From 73c04bcfe1096173b00431f0cdc742894b15eef0 Mon Sep 17 00:00:00 2001 From: Apple Date: Mon, 24 Sep 2007 19:41:56 +0000 Subject: [PATCH] ICU-8.11.tar.gz --- ICU.plist | 10 +- icuSources/Doxyfile.in | 32 +- icuSources/Makefile.in | 6 +- icuSources/aclocal.m4 | 70 +- icuSources/allinone/all/all.dsp | 93 - icuSources/allinone/allinone.dsw | 743 - icuSources/allinone/allinone.sln | 71 +- icuSources/common/Makefile.in | 75 +- icuSources/common/Makefile.local | 17 + icuSources/common/aaplbfct.cpp | 367 + icuSources/common/aaplbfct.h | 51 + icuSources/common/brkdict.cpp | 242 - icuSources/common/brkdict.h | 174 - icuSources/common/brkeng.cpp | 287 + icuSources/common/brkeng.h | 292 + icuSources/common/brkiter.cpp | 95 +- icuSources/common/caniter.cpp | 354 +- icuSources/common/charstr.h | 7 +- icuSources/common/cmemory.c | 3 +- icuSources/common/cmemory.h | 1 - icuSources/common/common.dsp | 3787 - icuSources/common/common.rc | 12 +- icuSources/common/common.vcproj | 213 +- icuSources/common/cpputils.h | 20 +- icuSources/common/cstring.h | 4 +- icuSources/common/dbbi.cpp | 629 - icuSources/common/dbbi_tbl.cpp | 59 - icuSources/common/dbbi_tbl.h | 90 - icuSources/common/dictbe.cpp | 418 + icuSources/common/dictbe.h | 193 + icuSources/common/hash.h | 50 +- icuSources/common/iculserv.cpp | 962 - icuSources/common/icunotif.cpp | 116 - icuSources/common/localsvc.cpp | 29 + icuSources/common/localsvc.h | 25 + icuSources/common/locid.cpp | 59 +- icuSources/common/locmap.c | 196 +- icuSources/common/locutil.cpp | 267 + icuSources/common/locutil.h | 37 + icuSources/common/msvcres.h | 11 +- icuSources/common/normlzr.cpp | 26 +- icuSources/common/propname.cpp | 23 +- icuSources/common/putil.c | 1213 +- icuSources/common/putilimp.h | 45 +- icuSources/common/rbbi.cpp | 1372 +- icuSources/common/rbbicst.pl | 865 +- icuSources/common/rbbidata.cpp | 58 +- icuSources/common/rbbidata.h | 32 +- icuSources/common/rbbinode.cpp | 11 +- icuSources/common/rbbinode.h | 11 +- icuSources/common/rbbirb.cpp | 15 +- icuSources/common/rbbirb.h | 6 +- icuSources/common/rbbirpt.h | 96 +- icuSources/common/rbbiscan.cpp | 30 +- icuSources/common/rbbiscan.h | 12 +- icuSources/common/rbbisetb.cpp | 98 +- icuSources/common/rbbisetb.h | 18 +- icuSources/common/rbbistbl.cpp | 6 +- icuSources/common/rbbitblb.cpp | 279 +- icuSources/common/rbbitblb.h | 3 +- icuSources/common/rbtok.cpp | 254 + icuSources/common/rbtok.h | 110 + icuSources/common/resbund_cnv.cpp | 33 +- icuSources/common/ruleiter.cpp | 6 +- icuSources/common/ruleiter.h | 10 +- icuSources/common/{icuserv.cpp => serv.cpp} | 2 +- icuSources/common/{icuserv.h => serv.h} | 25 +- icuSources/common/servlk.cpp | 187 + icuSources/common/servlkf.cpp | 151 + icuSources/common/{iculserv.h => servloc.h} | 33 +- icuSources/common/servls.cpp | 297 + icuSources/common/servnotf.cpp | 118 + icuSources/common/{icunotif.h => servnotf.h} | 0 icuSources/common/servrbf.cpp | 94 + icuSources/common/servslkf.cpp | 122 + icuSources/common/sprpimpl.h | 6 +- icuSources/common/triedict.cpp | 1407 + icuSources/common/triedict.h | 346 + icuSources/common/ubidi.c | 1877 +- icuSources/common/ubidi_props.c | 519 + icuSources/common/ubidi_props.h | 160 + icuSources/common/ubidi_props_data.c | 698 + icuSources/common/ubidiimp.h | 157 +- icuSources/common/ubidiln.c | 568 +- icuSources/common/ubidiwrt.c | 121 +- icuSources/common/ubrk.cpp | 95 +- icuSources/common/ubrkimpl.h | 13 + icuSources/common/ucase.c | 647 +- icuSources/common/ucase.h | 73 +- icuSources/common/ucase_props_data.c | 648 + icuSources/common/ucasemap.c | 333 + icuSources/common/uchar.c | 572 +- icuSources/common/uchar_props_data.c | 3772 + icuSources/common/ucln_cmn.c | 34 +- icuSources/common/ucln_cmn.h | 9 +- icuSources/common/ucmndata.c | 21 +- icuSources/common/ucmp8.c | 572 - icuSources/common/ucmp8.h | 244 - icuSources/common/ucnv.c | 316 +- icuSources/common/ucnv2022.c | 250 +- icuSources/common/ucnv_bld.c | 310 +- icuSources/common/ucnv_bld.h | 35 +- icuSources/common/ucnv_cb.c | 130 +- icuSources/common/ucnv_cnv.c | 4 +- icuSources/common/ucnv_cnv.h | 6 +- icuSources/common/ucnv_ext.c | 4 +- icuSources/common/ucnv_ext.h | 2 +- icuSources/common/ucnv_imp.h | 10 +- icuSources/common/ucnv_io.c | 716 +- icuSources/common/ucnv_io.h | 142 +- icuSources/common/ucnv_lmb.c | 13 +- icuSources/common/ucnv_set.c | 5 +- icuSources/common/ucnv_u16.c | 132 +- icuSources/common/ucnv_u32.c | 131 +- icuSources/common/ucnv_u7.c | 16 +- icuSources/common/ucnv_u8.c | 15 +- icuSources/common/ucnvbocu.c | 24 +- icuSources/common/ucnvdisp.c | 9 +- icuSources/common/ucnvhz.c | 61 +- icuSources/common/ucnvisci.c | 93 +- icuSources/common/ucnvlat1.c | 16 +- icuSources/common/ucnvmbcs.c | 42 +- icuSources/common/ucnvmbcs.h | 4 +- icuSources/common/ucnvscsu.c | 52 +- icuSources/common/ucol_swp.c | 87 +- icuSources/common/udata.c | 460 +- icuSources/common/udataswp.h | 56 +- icuSources/common/uenumimp.h | 16 +- icuSources/common/uhash.c | 1364 +- icuSources/common/uhash.h | 81 +- icuSources/common/uhash_us.cpp | 29 +- icuSources/common/uidna.cpp | 104 +- icuSources/common/uinit.c | 54 +- icuSources/common/uinvchar.c | 45 +- icuSources/common/uiter.cpp | 7 +- icuSources/common/uloc.c | 491 +- icuSources/common/umapfile.c | 90 +- icuSources/common/umath.c | 24 + icuSources/common/umutex.c | 71 +- icuSources/common/umutex.h | 10 +- icuSources/common/unames.c | 152 +- icuSources/common/unicode/brkiter.h | 223 +- icuSources/common/unicode/caniter.h | 11 +- icuSources/common/unicode/chariter.h | 8 +- icuSources/common/unicode/dbbi.h | 257 +- icuSources/common/unicode/docmain.h | 36 +- icuSources/common/unicode/locid.h | 42 +- icuSources/common/unicode/normlzr.h | 12 +- icuSources/common/unicode/parseerr.h | 6 +- icuSources/common/unicode/parsepos.h | 9 +- icuSources/common/unicode/platform.h.in | 29 +- icuSources/common/unicode/ppalmos.h | 273 + icuSources/common/unicode/putil.h | 10 +- icuSources/common/unicode/pwin32.h | 80 +- icuSources/common/unicode/rbbi.h | 225 +- icuSources/common/unicode/rep.h | 7 +- icuSources/common/unicode/resbund.h | 57 +- icuSources/common/unicode/schriter.h | 7 +- icuSources/common/unicode/strenum.h | 40 +- icuSources/common/unicode/symtable.h | 20 +- icuSources/common/unicode/ubidi.h | 955 +- icuSources/common/unicode/ubrk.h | 189 +- icuSources/common/unicode/ucasemap.h | 180 + icuSources/common/unicode/uchar.h | 518 +- icuSources/common/unicode/uchriter.h | 7 +- icuSources/common/unicode/uclean.h | 49 +- icuSources/common/unicode/ucnv.h | 209 +- icuSources/common/unicode/ucnv_err.h | 16 +- icuSources/common/unicode/uconfig.h | 37 +- icuSources/common/unicode/udata.h | 42 +- icuSources/common/unicode/udeprctd.h | 37 +- icuSources/common/unicode/udraft.h | 456 +- icuSources/common/unicode/uenum.h | 7 +- icuSources/common/unicode/uidna.h | 10 +- icuSources/common/unicode/uintrnal.h | 68 + icuSources/common/unicode/uiter.h | 2 +- icuSources/common/unicode/uloc.h | 100 +- icuSources/common/unicode/umachine.h | 22 +- icuSources/common/unicode/umisc.h | 16 +- icuSources/common/unicode/unifilt.h | 11 +- icuSources/common/unicode/unifunct.h | 7 +- icuSources/common/unicode/unimatch.h | 8 +- icuSources/common/unicode/uniset.h | 82 +- icuSources/common/unicode/unistr.h | 103 +- icuSources/common/unicode/unorm.h | 6 +- icuSources/common/unicode/uobject.h | 36 +- icuSources/common/unicode/uobslete.h | 9 +- icuSources/common/unicode/urbtok.h | 106 + icuSources/common/unicode/urename.h | 2989 +- icuSources/common/unicode/urep.h | 7 +- icuSources/common/unicode/ures.h | 276 +- icuSources/common/unicode/uscript.h | 110 +- icuSources/common/unicode/uset.h | 125 +- icuSources/common/unicode/usetiter.h | 95 +- icuSources/common/unicode/usprep.h | 31 +- icuSources/common/unicode/ustring.h | 184 +- icuSources/common/unicode/usystem.h | 46 + icuSources/common/unicode/utext.h | 1569 + icuSources/common/unicode/utf.h | 22 +- icuSources/common/unicode/utf16.h | 22 +- icuSources/common/unicode/utf8.h | 79 +- icuSources/common/unicode/utf_old.h | 16 +- icuSources/common/unicode/utrace.h | 61 +- icuSources/common/unicode/utypes.h | 57 +- icuSources/common/unicode/uversion.h | 71 +- icuSources/common/uniset.cpp | 25 +- icuSources/common/uniset_props.cpp | 822 +- icuSources/common/unistr.cpp | 31 +- icuSources/common/unistr_case.cpp | 35 +- icuSources/common/unistr_cnv.cpp | 481 +- icuSources/common/unorm.cpp | 361 +- icuSources/common/unorm_props_data.c | 3262 + icuSources/common/unormcmp.cpp | 4 +- icuSources/common/unormimp.h | 2 +- icuSources/common/uobject.cpp | 13 +- icuSources/common/uprops.c | 234 +- icuSources/common/uprops.h | 188 +- icuSources/common/urbtok.cpp | 169 + icuSources/common/ures_cnv.c | 68 +- icuSources/common/uresbund.c | 618 +- icuSources/common/uresdata.c | 157 +- icuSources/common/uresdata.h | 23 +- icuSources/common/uresimp.h | 80 +- icuSources/common/uscript.c | 27 +- icuSources/common/uset.cpp | 139 +- icuSources/common/uset_imp.h | 9 +- icuSources/common/uset_props.cpp | 14 +- icuSources/common/usetiter.cpp | 24 +- icuSources/common/ushape.c | 79 +- icuSources/common/usprep.cpp | 88 +- icuSources/common/ustack.cpp | 49 +- icuSources/common/ustr_cnv.c | 2 +- icuSources/common/ustr_imp.h | 14 +- icuSources/common/ustr_wcs.c | 22 +- icuSources/common/ustrcase.c | 114 +- icuSources/common/ustrenum.cpp | 12 +- icuSources/common/ustrfmt.c | 31 +- icuSources/common/ustrfmt.h | 4 +- icuSources/common/ustring.c | 2 +- icuSources/common/ustrtrns.c | 926 +- icuSources/common/utext.cpp | 2820 + icuSources/common/utf_impl.c | 30 +- icuSources/common/util.cpp | 208 +- icuSources/common/util.h | 5 +- icuSources/common/util_props.cpp | 214 + icuSources/common/utrace.c | 6 +- icuSources/common/utrie.c | 260 +- icuSources/common/utrie.h | 109 +- icuSources/common/utypes.c | 25 +- icuSources/common/uvector.cpp | 47 - icuSources/common/uvector.h | 14 +- icuSources/common/uvectr32.h | 10 +- icuSources/common/wintz.c | 581 + icuSources/common/wintz.h | 37 + icuSources/config.guess | 983 +- icuSources/config.sub | 462 +- icuSources/config/Makefile.inc.in | 22 +- icuSources/config/icu-config-bottom | 4 +- icuSources/config/make2sh.sed | 3 +- icuSources/config/mh-aix | 3 +- icuSources/config/mh-aix-gcc | 11 +- icuSources/config/mh-aix-va | 15 +- icuSources/config/mh-alpha-linux-cc | 7 +- icuSources/config/mh-alpha-linux-gcc | 7 +- icuSources/config/mh-alpha-osf | 7 +- icuSources/config/mh-beos | 5 +- icuSources/config/mh-bsd-gcc | 8 +- icuSources/config/mh-cygwin | 36 +- icuSources/config/mh-cygwin-msvc | 51 +- icuSources/config/mh-darwin | 6 +- icuSources/config/mh-hpux-acc | 4 +- icuSources/config/mh-irix | 4 +- icuSources/config/mh-linux | 10 +- icuSources/config/mh-linux-va | 10 +- icuSources/config/mh-mingw | 21 +- icuSources/config/mh-os390 | 73 +- icuSources/config/mh-os400 | 3 +- icuSources/config/mh-ptx | 65 - icuSources/config/mh-qnx | 5 +- icuSources/config/mh-solaris | 13 +- icuSources/config/mh-solaris-gcc | 11 +- icuSources/configure | 9848 ++- icuSources/configure.in | 242 +- icuSources/data/Makefile.in | 209 +- icuSources/data/brkitr/brkfiles.mk | 30 +- icuSources/data/brkitr/brklocal.mk | 8 + icuSources/data/brkitr/char.txt | 31 +- icuSources/data/brkitr/en.txt | 11 + icuSources/data/brkitr/en_US.txt | 11 + icuSources/data/brkitr/en_US_POSIX.txt | 14 + icuSources/data/brkitr/ja.txt | 14 + icuSources/data/brkitr/line.txt | 1019 +- icuSources/data/brkitr/line_th.txt | 393 - icuSources/data/brkitr/root.txt | 21 + icuSources/data/brkitr/sent.txt | 194 +- icuSources/data/brkitr/thaidict.brk | Bin 93616 -> 0 bytes icuSources/data/brkitr/thaidict.txt | 26359 +++++++ icuSources/data/brkitr/word.txt | 220 +- icuSources/data/brkitr/word_POSIX.txt | 223 +- icuSources/data/brkitr/word_ja.txt | 236 +- icuSources/data/brkitr/word_th.txt | 178 - icuSources/data/build.xml | 283 + icuSources/data/cldr-icu-readme.txt | 58 + icuSources/data/coll/ar.txt | 10 +- icuSources/data/coll/ar_AE.txt | 4 +- icuSources/data/coll/ar_BH.txt | 4 +- icuSources/data/coll/ar_DZ.txt | 4 +- icuSources/data/coll/ar_EG.txt | 4 +- icuSources/data/coll/ar_IQ.txt | 4 +- icuSources/data/coll/ar_JO.txt | 4 +- icuSources/data/coll/ar_KW.txt | 4 +- icuSources/data/coll/ar_LB.txt | 4 +- icuSources/data/coll/ar_LY.txt | 4 +- icuSources/data/coll/ar_MA.txt | 4 +- icuSources/data/coll/ar_OM.txt | 4 +- icuSources/data/coll/ar_QA.txt | 4 +- icuSources/data/coll/ar_SA.txt | 4 +- icuSources/data/coll/ar_SD.txt | 4 +- icuSources/data/coll/ar_SY.txt | 4 +- icuSources/data/coll/ar_TN.txt | 4 +- icuSources/data/coll/ar_YE.txt | 4 +- icuSources/data/coll/as.txt | 17 + icuSources/data/coll/{ar_IN.txt => as_IN.txt} | 8 +- icuSources/data/coll/be.txt | 8 +- icuSources/data/coll/be_BY.txt | 4 +- icuSources/data/coll/bg.txt | 8 +- icuSources/data/coll/bg_BG.txt | 4 +- icuSources/data/coll/bn.txt | 11 + icuSources/data/coll/ca.txt | 10 +- icuSources/data/coll/ca_ES.txt | 4 +- icuSources/data/coll/colfiles.mk | 45 +- icuSources/data/coll/collocal.mk | 8 +- icuSources/data/coll/cs.txt | 10 +- icuSources/data/coll/cs_CZ.txt | 4 +- icuSources/data/coll/da.txt | 10 +- icuSources/data/coll/da_DK.txt | 4 +- icuSources/data/coll/de.txt | 12 +- icuSources/data/coll/de_.txt | 17 + icuSources/data/coll/de_AT.txt | 4 +- icuSources/data/coll/de_BE.txt | 4 +- icuSources/data/coll/de_CH.txt | 4 +- icuSources/data/coll/de_DE.txt | 4 +- icuSources/data/coll/de_LU.txt | 4 +- icuSources/data/coll/de__PHONEBOOK.txt | 4 +- icuSources/data/coll/el.txt | 10 +- icuSources/data/coll/el_GR.txt | 4 +- icuSources/data/coll/en.txt | 10 +- icuSources/data/coll/en_AU.txt | 4 +- icuSources/data/coll/en_BE.txt | 11 +- icuSources/data/coll/en_BW.txt | 4 +- icuSources/data/coll/en_CA.txt | 4 +- icuSources/data/coll/en_GB.txt | 4 +- icuSources/data/coll/en_HK.txt | 4 +- icuSources/data/coll/en_IE.txt | 4 +- icuSources/data/coll/en_IN.txt | 4 +- icuSources/data/coll/en_MT.txt | 4 +- icuSources/data/coll/en_NZ.txt | 4 +- icuSources/data/coll/en_PH.txt | 4 +- icuSources/data/coll/en_SG.txt | 4 +- icuSources/data/coll/en_US.txt | 4 +- icuSources/data/coll/en_US_POSIX.txt | 4 +- icuSources/data/coll/en_VI.txt | 4 +- icuSources/data/coll/en_ZA.txt | 4 +- icuSources/data/coll/en_ZW.txt | 4 +- icuSources/data/coll/eo.txt | 10 +- icuSources/data/coll/es.txt | 12 +- icuSources/data/coll/es_.txt | 17 + icuSources/data/coll/es_AR.txt | 4 +- icuSources/data/coll/es_BO.txt | 4 +- icuSources/data/coll/es_CL.txt | 4 +- icuSources/data/coll/es_CO.txt | 4 +- icuSources/data/coll/es_CR.txt | 4 +- icuSources/data/coll/es_DO.txt | 4 +- icuSources/data/coll/es_EC.txt | 4 +- icuSources/data/coll/es_ES.txt | 4 +- icuSources/data/coll/es_GT.txt | 4 +- icuSources/data/coll/es_HN.txt | 4 +- icuSources/data/coll/es_MX.txt | 4 +- icuSources/data/coll/es_NI.txt | 4 +- icuSources/data/coll/es_PA.txt | 4 +- icuSources/data/coll/es_PE.txt | 4 +- icuSources/data/coll/es_PR.txt | 4 +- icuSources/data/coll/es_PY.txt | 4 +- icuSources/data/coll/es_SV.txt | 4 +- icuSources/data/coll/es_US.txt | 4 +- icuSources/data/coll/es_UY.txt | 4 +- icuSources/data/coll/es_VE.txt | 4 +- icuSources/data/coll/es__TRADITIONAL.txt | 4 +- icuSources/data/coll/et.txt | 10 +- icuSources/data/coll/et_EE.txt | 4 +- icuSources/data/coll/fa.txt | 10 +- icuSources/data/coll/fa_AF.txt | 9 +- icuSources/data/coll/fa_IR.txt | 4 +- icuSources/data/coll/fi.txt | 10 +- icuSources/data/coll/fi_FI.txt | 4 +- icuSources/data/coll/fo.txt | 10 +- icuSources/data/coll/fo_FO.txt | 4 +- icuSources/data/coll/fr.txt | 10 +- icuSources/data/coll/fr_BE.txt | 4 +- icuSources/data/coll/fr_CA.txt | 4 +- icuSources/data/coll/fr_CH.txt | 4 +- icuSources/data/coll/fr_FR.txt | 4 +- icuSources/data/coll/fr_LU.txt | 4 +- icuSources/data/coll/ga.txt | 4 +- icuSources/data/coll/ga_IE.txt | 4 +- icuSources/data/coll/gu.txt | 10 +- icuSources/data/coll/gu_IN.txt | 4 +- icuSources/data/coll/haw.txt | 54 +- icuSources/data/coll/he.txt | 10 +- icuSources/data/coll/he_IL.txt | 4 +- icuSources/data/coll/hi.txt | 58 +- icuSources/data/coll/hi_.txt | 17 + icuSources/data/coll/hi_IN.txt | 4 +- icuSources/data/coll/hi__DIRECT.txt | 4 +- icuSources/data/coll/hr.txt | 10 +- icuSources/data/coll/hr_HR.txt | 4 +- icuSources/data/coll/hu.txt | 10 +- icuSources/data/coll/hu_HU.txt | 4 +- icuSources/data/coll/id.txt | 4 +- icuSources/data/coll/id_ID.txt | 4 +- icuSources/data/coll/in.txt | 11 + icuSources/data/coll/in_ID.txt | 11 + icuSources/data/coll/is.txt | 10 +- icuSources/data/coll/is_IS.txt | 4 +- icuSources/data/coll/it.txt | 10 +- icuSources/data/coll/it_CH.txt | 4 +- icuSources/data/coll/it_IT.txt | 4 +- icuSources/data/coll/iw.txt | 11 + icuSources/data/coll/iw_IL.txt | 11 + icuSources/data/coll/ja.txt | 1026 +- icuSources/data/coll/ja_JP.txt | 4 +- icuSources/data/coll/kk.txt | 10 +- icuSources/data/coll/kk_KZ.txt | 4 +- icuSources/data/coll/kl.txt | 10 +- icuSources/data/coll/kl_GL.txt | 4 +- icuSources/data/coll/kn.txt | 10 +- icuSources/data/coll/kn_IN.txt | 4 +- icuSources/data/coll/ko.txt | 1374 +- icuSources/data/coll/ko_KR.txt | 4 +- icuSources/data/coll/kok.txt | 11 + icuSources/data/coll/lt.txt | 10 +- icuSources/data/coll/lt_LT.txt | 4 +- icuSources/data/coll/lv.txt | 10 +- icuSources/data/coll/lv_LV.txt | 4 +- icuSources/data/coll/mk.txt | 8 +- icuSources/data/coll/mk_MK.txt | 4 +- icuSources/data/coll/ml.txt | 14 +- icuSources/data/coll/mr.txt | 10 +- icuSources/data/coll/mr_IN.txt | 4 +- icuSources/data/coll/ms.txt | 4 +- icuSources/data/coll/ms_BN.txt | 4 +- icuSources/data/coll/ms_MY.txt | 4 +- icuSources/data/coll/mt.txt | 10 +- icuSources/data/coll/mt_MT.txt | 4 +- icuSources/data/coll/nb.txt | 10 +- icuSources/data/coll/nb_NO.txt | 4 +- icuSources/data/coll/nl.txt | 4 +- icuSources/data/coll/nl_BE.txt | 4 +- icuSources/data/coll/nl_NL.txt | 4 +- icuSources/data/coll/nn.txt | 10 +- icuSources/data/coll/nn_NO.txt | 4 +- icuSources/data/coll/om.txt | 10 +- icuSources/data/coll/om_ET.txt | 4 +- icuSources/data/coll/om_KE.txt | 4 +- icuSources/data/coll/or.txt | 14 +- icuSources/data/coll/pa.txt | 10 +- icuSources/data/coll/pa_IN.txt | 4 +- icuSources/data/coll/pl.txt | 10 +- icuSources/data/coll/pl_PL.txt | 4 +- icuSources/data/coll/ps.txt | 76 +- icuSources/data/coll/ps_AF.txt | 4 +- icuSources/data/coll/pt.txt | 4 +- icuSources/data/coll/pt_BR.txt | 4 +- icuSources/data/coll/pt_PT.txt | 4 +- icuSources/data/coll/ro.txt | 10 +- icuSources/data/coll/ro_RO.txt | 4 +- icuSources/data/coll/root.txt | 2762 +- icuSources/data/coll/ru.txt | 10 +- icuSources/data/coll/ru_RU.txt | 4 +- icuSources/data/coll/ru_UA.txt | 4 +- icuSources/data/coll/sh.txt | 8 +- icuSources/data/coll/sh_BA.txt | 17 + icuSources/data/coll/sh_YU.txt | 4 +- icuSources/data/coll/sk.txt | 10 +- icuSources/data/coll/sk_SK.txt | 4 +- icuSources/data/coll/sl.txt | 10 +- icuSources/data/coll/sl_SI.txt | 4 +- icuSources/data/coll/sq.txt | 10 +- icuSources/data/coll/sq_AL.txt | 4 +- icuSources/data/coll/sr.txt | 8 +- icuSources/data/coll/sr_BA.txt | 17 + icuSources/data/coll/sr_Cyrl.txt | 17 + icuSources/data/coll/sr_Cyrl_BA.txt | 17 + icuSources/data/coll/sr_Cyrl_YU.txt | 17 + icuSources/data/coll/sr_YU.txt | 4 +- icuSources/data/coll/sv.txt | 10 +- icuSources/data/coll/sv_FI.txt | 4 +- icuSources/data/coll/sv_SE.txt | 4 +- icuSources/data/coll/ta.txt | 10 +- icuSources/data/coll/ta_IN.txt | 4 +- icuSources/data/coll/te.txt | 10 +- icuSources/data/coll/te_IN.txt | 4 +- icuSources/data/coll/th.txt | 10 +- icuSources/data/coll/th_TH.txt | 4 +- icuSources/data/coll/tr.txt | 10 +- icuSources/data/coll/tr_TR.txt | 4 +- icuSources/data/coll/uk.txt | 10 +- icuSources/data/coll/uk_UA.txt | 4 +- icuSources/data/coll/vi.txt | 10 +- icuSources/data/coll/vi_VN.txt | 4 +- icuSources/data/coll/zh.txt | 3348 +- icuSources/data/coll/zh_.txt | 17 + icuSources/data/coll/zh_CN.txt | 4 +- icuSources/data/coll/zh_HK.txt | 9 +- icuSources/data/coll/zh_Hant.txt | 8 +- icuSources/data/coll/zh_MO.txt | 9 +- icuSources/data/coll/zh_SG.txt | 4 +- icuSources/data/coll/zh_TW.txt | 9 +- icuSources/data/coll/zh_TW_STROKE.txt | 4 +- icuSources/data/coll/zh__PINYIN.txt | 4 +- icuSources/data/icu-config.xml | 310 + icuSources/data/icupkg.inc.in | 11 +- icuSources/data/locales/af.txt | 84 +- icuSources/data/locales/af_ZA.txt | 14 +- icuSources/data/locales/am.txt | 852 +- icuSources/data/locales/am_ET.txt | 30 +- icuSources/data/locales/ar.txt | 2720 +- icuSources/data/locales/ar_AE.txt | 20 +- icuSources/data/locales/ar_BH.txt | 20 +- icuSources/data/locales/ar_DZ.txt | 22 +- icuSources/data/locales/ar_EG.txt | 25 +- icuSources/data/locales/ar_IQ.txt | 24 +- icuSources/data/locales/ar_JO.txt | 136 +- icuSources/data/locales/ar_KW.txt | 24 +- icuSources/data/locales/ar_LB.txt | 130 +- icuSources/data/locales/ar_LY.txt | 24 +- icuSources/data/locales/ar_MA.txt | 22 +- icuSources/data/locales/ar_OM.txt | 20 +- icuSources/data/locales/ar_QA.txt | 20 +- icuSources/data/locales/ar_SA.txt | 20 +- icuSources/data/locales/ar_SD.txt | 20 +- icuSources/data/locales/ar_SY.txt | 152 +- icuSources/data/locales/ar_TN.txt | 22 +- icuSources/data/locales/ar_YE.txt | 20 +- icuSources/data/locales/as.txt | 105 + icuSources/data/locales/as_IN.txt | 44 + icuSources/data/locales/az.txt | 144 + icuSources/data/locales/az_AZ.txt | 22 + icuSources/data/locales/az_Cyrl.txt | 84 + icuSources/data/locales/az_Cyrl_AZ.txt | 19 + icuSources/data/locales/az_Latn.txt | 27 + icuSources/data/locales/az_Latn_AZ.txt | 19 + icuSources/data/locales/be.txt | 348 +- icuSources/data/locales/be_BY.txt | 10 +- icuSources/data/locales/bg.txt | 4040 +- icuSources/data/locales/bg_BG.txt | 16 +- icuSources/data/locales/bn.txt | 408 +- icuSources/data/locales/bn_IN.txt | 16 +- icuSources/data/locales/ca.txt | 97 +- icuSources/data/locales/ca_ES.txt | 16 +- icuSources/data/locales/cs.txt | 927 +- icuSources/data/locales/cs_CZ.txt | 13 +- icuSources/data/locales/cy.txt | 109 +- icuSources/data/locales/cy_GB.txt | 16 +- icuSources/data/locales/da.txt | 1013 +- icuSources/data/locales/da_DK.txt | 18 +- icuSources/data/locales/de.txt | 941 +- icuSources/data/locales/de_AT.txt | 22 +- icuSources/data/locales/de_BE.txt | 26 +- icuSources/data/locales/de_CH.txt | 29 +- icuSources/data/locales/de_DE.txt | 18 +- icuSources/data/locales/de_LU.txt | 34 +- icuSources/data/locales/el.txt | 3669 +- icuSources/data/locales/el_GR.txt | 16 +- icuSources/data/locales/en.txt | 1222 +- icuSources/data/locales/en_AU.txt | 12 +- icuSources/data/locales/en_BE.txt | 12 +- icuSources/data/locales/en_BW.txt | 10 +- icuSources/data/locales/en_CA.txt | 10 +- icuSources/data/locales/en_GB.txt | 24 +- icuSources/data/locales/en_HK.txt | 14 +- icuSources/data/locales/en_IE.txt | 24 +- icuSources/data/locales/en_IN.txt | 18 +- icuSources/data/locales/en_MT.txt | 6 +- icuSources/data/locales/en_NZ.txt | 12 +- icuSources/data/locales/en_PH.txt | 16 +- icuSources/data/locales/en_PK.txt | 26 +- icuSources/data/locales/en_RH.txt | 11 + icuSources/data/locales/en_SG.txt | 30 +- icuSources/data/locales/en_US.txt | 16 +- icuSources/data/locales/en_US_POSIX.txt | 17 +- icuSources/data/locales/en_VI.txt | 16 +- icuSources/data/locales/en_ZA.txt | 10 +- icuSources/data/locales/en_ZW.txt | 10 +- icuSources/data/locales/eo.txt | 36 +- icuSources/data/locales/es.txt | 1410 +- icuSources/data/locales/es_AR.txt | 20 +- icuSources/data/locales/es_BO.txt | 20 +- icuSources/data/locales/es_CL.txt | 38 +- icuSources/data/locales/es_CO.txt | 20 +- icuSources/data/locales/es_CR.txt | 20 +- icuSources/data/locales/es_DO.txt | 20 +- icuSources/data/locales/es_EC.txt | 26 +- icuSources/data/locales/es_ES.txt | 27 +- icuSources/data/locales/es_GT.txt | 20 +- icuSources/data/locales/es_HN.txt | 20 +- icuSources/data/locales/es_MX.txt | 20 +- icuSources/data/locales/es_NI.txt | 20 +- icuSources/data/locales/es_PA.txt | 20 +- icuSources/data/locales/es_PE.txt | 27 +- icuSources/data/locales/es_PR.txt | 20 +- icuSources/data/locales/es_PY.txt | 24 +- icuSources/data/locales/es_SV.txt | 20 +- icuSources/data/locales/es_US.txt | 26 +- icuSources/data/locales/es_UY.txt | 26 +- icuSources/data/locales/es_VE.txt | 22 +- icuSources/data/locales/et.txt | 48 +- icuSources/data/locales/et_EE.txt | 10 +- icuSources/data/locales/eu.txt | 40 +- icuSources/data/locales/eu_ES.txt | 14 +- icuSources/data/locales/fa.txt | 2212 +- icuSources/data/locales/fa_AF.txt | 511 +- icuSources/data/locales/fa_IR.txt | 32 +- icuSources/data/locales/fi.txt | 1884 +- icuSources/data/locales/fi_FI.txt | 21 +- icuSources/data/locales/fo.txt | 31 +- icuSources/data/locales/fo_FO.txt | 16 +- icuSources/data/locales/fr.txt | 1571 +- icuSources/data/locales/fr_BE.txt | 12 +- icuSources/data/locales/fr_CA.txt | 16 +- icuSources/data/locales/fr_CH.txt | 16 +- icuSources/data/locales/fr_FR.txt | 14 +- icuSources/data/locales/fr_LU.txt | 16 +- icuSources/data/locales/ga.txt | 641 +- icuSources/data/locales/ga_IE.txt | 14 +- icuSources/data/locales/gl.txt | 28 +- icuSources/data/locales/gl_ES.txt | 14 +- icuSources/data/locales/gu.txt | 241 +- icuSources/data/locales/gu_IN.txt | 22 +- icuSources/data/locales/gv.txt | 10 +- icuSources/data/locales/gv_GB.txt | 14 +- icuSources/data/locales/haw.txt | 14 +- icuSources/data/locales/haw_US.txt | 15 +- icuSources/data/locales/he.txt | 1774 +- icuSources/data/locales/he_IL.txt | 28 +- icuSources/data/locales/hi.txt | 929 +- icuSources/data/locales/hi_IN.txt | 22 +- icuSources/data/locales/hr.txt | 376 +- icuSources/data/locales/hr_HR.txt | 12 +- icuSources/data/locales/hu.txt | 937 +- icuSources/data/locales/hu_HU.txt | 14 +- icuSources/data/locales/hy.txt | 631 +- icuSources/data/locales/hy_AM.txt | 6 +- icuSources/data/locales/hy_AM_REVISED.txt | 114 +- icuSources/data/locales/id.txt | 38 +- icuSources/data/locales/id_ID.txt | 6 +- icuSources/data/locales/in.txt | 4 +- icuSources/data/locales/in_ID.txt | 4 +- icuSources/data/locales/is.txt | 371 +- icuSources/data/locales/is_IS.txt | 18 +- icuSources/data/locales/it.txt | 1016 +- icuSources/data/locales/it_CH.txt | 14 +- icuSources/data/locales/it_IT.txt | 10 +- icuSources/data/locales/iw.txt | 4 +- icuSources/data/locales/iw_IL.txt | 4 +- icuSources/data/locales/ja.txt | 5486 +- icuSources/data/locales/ja_JP.txt | 18 +- icuSources/data/locales/ja_JP_TRADITIONAL.txt | 4 +- icuSources/data/locales/kk.txt | 231 +- icuSources/data/locales/kk_KZ.txt | 8 +- icuSources/data/locales/kl.txt | 12 +- icuSources/data/locales/kl_GL.txt | 12 +- icuSources/data/locales/kn.txt | 202 +- icuSources/data/locales/kn_IN.txt | 16 +- icuSources/data/locales/ko.txt | 4703 +- icuSources/data/locales/ko_KR.txt | 99 +- icuSources/data/locales/kok.txt | 496 +- icuSources/data/locales/kok_IN.txt | 16 +- icuSources/data/locales/kw.txt | 8 +- icuSources/data/locales/kw_GB.txt | 14 +- icuSources/data/locales/lt.txt | 344 +- icuSources/data/locales/lt_LT.txt | 134 +- icuSources/data/locales/lv.txt | 39 +- icuSources/data/locales/lv_LV.txt | 10 +- icuSources/data/locales/mk.txt | 2497 +- icuSources/data/locales/mk_MK.txt | 8 +- icuSources/data/locales/ml.txt | 552 +- icuSources/data/locales/ml_IN.txt | 26 +- icuSources/data/locales/mr.txt | 491 +- icuSources/data/locales/mr_IN.txt | 22 +- icuSources/data/locales/ms.txt | 35 +- icuSources/data/locales/ms_BN.txt | 8 +- icuSources/data/locales/ms_MY.txt | 8 +- icuSources/data/locales/mt.txt | 213 +- icuSources/data/locales/mt_MT.txt | 18 +- icuSources/data/locales/nb.txt | 1683 +- icuSources/data/locales/nb_NO.txt | 29 +- icuSources/data/locales/nl.txt | 1410 +- icuSources/data/locales/nl_BE.txt | 27 +- icuSources/data/locales/nl_NL.txt | 16 +- icuSources/data/locales/nn.txt | 835 +- icuSources/data/locales/nn_NO.txt | 20 +- icuSources/data/locales/no.txt | 4 +- icuSources/data/locales/no_NO.txt | 4 +- icuSources/data/locales/no_NO_NY.txt | 4 +- icuSources/data/locales/om.txt | 39 +- icuSources/data/locales/om_ET.txt | 16 +- icuSources/data/locales/om_KE.txt | 14 +- icuSources/data/locales/or.txt | 168 +- icuSources/data/locales/or_IN.txt | 25 +- icuSources/data/locales/pa.txt | 264 +- icuSources/data/locales/pa_IN.txt | 16 +- icuSources/data/locales/pl.txt | 816 +- icuSources/data/locales/pl_PL.txt | 497 +- icuSources/data/locales/ps.txt | 456 +- icuSources/data/locales/ps_AF.txt | 18 +- icuSources/data/locales/pt.txt | 926 +- icuSources/data/locales/pt_BR.txt | 141 +- icuSources/data/locales/pt_PT.txt | 86 +- icuSources/data/locales/resfiles.mk | 103 +- icuSources/data/locales/reslocal.mk | 17 +- icuSources/data/locales/ro.txt | 174 +- icuSources/data/locales/ro_RO.txt | 10 +- icuSources/data/locales/root.txt | 363 +- icuSources/data/locales/ru.txt | 3880 +- icuSources/data/locales/ru_RU.txt | 49 +- icuSources/data/locales/ru_UA.txt | 24 +- icuSources/data/locales/sh.txt | 7 +- icuSources/data/locales/sh_CS.txt | 11 + icuSources/data/locales/sh_YU.txt | 6 +- icuSources/data/locales/sk.txt | 705 +- icuSources/data/locales/sk_SK.txt | 24 +- icuSources/data/locales/sl.txt | 197 +- icuSources/data/locales/sl_SI.txt | 18 +- icuSources/data/locales/so.txt | 40 +- icuSources/data/locales/so_DJ.txt | 20 +- icuSources/data/locales/so_ET.txt | 20 +- icuSources/data/locales/so_KE.txt | 18 +- icuSources/data/locales/so_SO.txt | 20 +- icuSources/data/locales/sq.txt | 99 +- icuSources/data/locales/sq_AL.txt | 10 +- icuSources/data/locales/sr.txt | 1311 +- icuSources/data/locales/sr_CS.txt | 11 + icuSources/data/locales/sr_Cyrl.txt | 34 +- icuSources/data/locales/sr_Cyrl_CS.txt | 17 + icuSources/data/locales/sr_Cyrl_YU.txt | 6 +- icuSources/data/locales/sr_Latn.txt | 340 +- icuSources/data/locales/sr_Latn_CS.txt | 17 + icuSources/data/locales/sr_Latn_YU.txt | 6 +- icuSources/data/locales/sr_YU.txt | 6 +- icuSources/data/locales/sv.txt | 1328 +- icuSources/data/locales/sv_FI.txt | 108 +- icuSources/data/locales/sv_SE.txt | 79 +- icuSources/data/locales/sw.txt | 67 +- icuSources/data/locales/sw_KE.txt | 18 +- icuSources/data/locales/sw_TZ.txt | 10 +- icuSources/data/locales/ta.txt | 843 +- icuSources/data/locales/ta_IN.txt | 16 +- icuSources/data/locales/te.txt | 311 +- icuSources/data/locales/te_IN.txt | 16 +- icuSources/data/locales/th.txt | 2112 +- icuSources/data/locales/th_TH.txt | 57 +- icuSources/data/locales/th_TH_TRADITIONAL.txt | 4 +- icuSources/data/locales/ti.txt | 212 +- icuSources/data/locales/ti_ER.txt | 196 +- icuSources/data/locales/ti_ET.txt | 18 +- icuSources/data/locales/tr.txt | 1115 +- icuSources/data/locales/tr_TR.txt | 16 +- icuSources/data/locales/uk.txt | 4345 +- icuSources/data/locales/uk_UA.txt | 10 +- icuSources/data/locales/ur.txt | 25 + icuSources/data/locales/ur_IN.txt | 24 + icuSources/data/locales/ur_PK.txt | 19 + icuSources/data/locales/uz.txt | 198 + icuSources/data/locales/uz_Cyrl.txt | 17 + icuSources/data/locales/uz_Cyrl_UZ.txt | 19 + icuSources/data/locales/uz_Latn.txt | 173 + icuSources/data/locales/uz_Latn_UZ.txt | 19 + icuSources/data/locales/uz_UZ.txt | 22 + icuSources/data/locales/vi.txt | 27 +- icuSources/data/locales/vi_VN.txt | 6 +- icuSources/data/locales/zh.txt | 5032 +- icuSources/data/locales/zh_CN.txt | 12 +- icuSources/data/locales/zh_HK.txt | 12 +- icuSources/data/locales/zh_Hans.txt | 889 +- icuSources/data/locales/zh_Hans_CN.txt | 64 +- icuSources/data/locales/zh_Hans_SG.txt | 93 +- icuSources/data/locales/zh_Hant.txt | 4480 +- icuSources/data/locales/zh_Hant_HK.txt | 76 +- icuSources/data/locales/zh_Hant_MO.txt | 76 +- icuSources/data/locales/zh_Hant_TW.txt | 82 +- icuSources/data/locales/zh_MO.txt | 12 +- icuSources/data/locales/zh_SG.txt | 12 +- icuSources/data/locales/zh_TW.txt | 12 +- icuSources/data/makedata.dsp | 178 - icuSources/data/makedata.mak | 289 +- icuSources/data/makedata.vcproj | 6 + icuSources/data/mappings/convrtrs.txt | 443 +- icuSources/data/mappings/gb18030.ucm | 4 +- .../data/mappings/ibm-1375_P100-2003.ucm | 105 +- .../data/mappings/ibm-1381_P110-1999.ucm | 9649 --- .../data/mappings/ibm-4517_P100-2005.ucm | 470 + .../data/mappings/ibm-737_P100-1997.ucm | 2 +- .../data/mappings/ibm-775_P100-1996.ucm | 2 +- ...7_P100-1995.ucm => ibm-9005_X100-2005.ucm} | 204 +- .../data/mappings/ibm-9067_X100-2005.ucm | 370 + .../data/mappings/ibm-9448_X100-2005.ucm | 567 + .../data/mappings/icu-internal-25546.ucm | 15 +- icuSources/data/mappings/iso-8859_10-1998.ucm | 2 + icuSources/data/mappings/iso-8859_11-2001.ucm | 301 + icuSources/data/mappings/iso-8859_14-1998.ucm | 304 + icuSources/data/mappings/macos-6_2-10.4.ucm | 338 + icuSources/data/mappings/ucmebcdic.mk | 8 +- icuSources/data/mappings/ucmfiles.mk | 15 +- icuSources/data/mappings/ucmlocal.mk | 10 +- icuSources/data/misc/CurrencyData.txt | 34 +- icuSources/data/misc/icudata.rc | 14 +- icuSources/data/misc/supplementalData.txt | 8028 ++ icuSources/data/misc/zoneinfo.txt | 1834 +- icuSources/data/rbnf/ga.txt | 2 +- icuSources/data/rbnf/he.txt | 393 +- icuSources/data/rbnf/ja.txt | 64 +- icuSources/data/rbnf/nl.txt | 8 +- icuSources/data/rbnf/rbnffiles.mk | 2 +- icuSources/data/rbnf/rbnflocal.mk | 8 + icuSources/data/rbnf/uk.txt | 5 +- icuSources/data/translit/Any_Accents.txt | 317 +- icuSources/data/translit/Any_Publishing.txt | 29 +- icuSources/data/translit/Arabic_Latin.txt | 231 +- .../data/translit/Bengali_Devanagari.txt | 14 + icuSources/data/translit/Bengali_Gujarati.txt | 14 + icuSources/data/translit/Bengali_Gurmukhi.txt | 14 + .../data/translit/Bengali_InterIndic.txt | 186 +- icuSources/data/translit/Bengali_Kannada.txt | 14 + icuSources/data/translit/Bengali_Latin.txt | 14 + .../data/translit/Bengali_Malayalam.txt | 14 + icuSources/data/translit/Bengali_Oriya.txt | 14 + icuSources/data/translit/Bengali_Tamil.txt | 14 + icuSources/data/translit/Bengali_Telugu.txt | 14 + .../translit/CanadianAboriginal_Latin.txt | 191 + icuSources/data/translit/Cyrillic_Latin.txt | 221 +- .../data/translit/Devanagari_Bengali.txt | 14 + .../data/translit/Devanagari_Gujarati.txt | 14 + .../data/translit/Devanagari_Gurmukhi.txt | 14 + .../data/translit/Devanagari_InterIndic.txt | 232 +- .../data/translit/Devanagari_Kannada.txt | 14 + icuSources/data/translit/Devanagari_Latin.txt | 14 + .../data/translit/Devanagari_Malayalam.txt | 14 + icuSources/data/translit/Devanagari_Oriya.txt | 14 + icuSources/data/translit/Devanagari_Tamil.txt | 14 + .../data/translit/Devanagari_Telugu.txt | 14 + .../data/translit/Fullwidth_Halfwidth.txt | 532 +- icuSources/data/translit/Georgian_Latin.txt | 44 + icuSources/data/translit/Greek_Latin.txt | 370 +- .../data/translit/Greek_Latin_UNGEGN.txt | 413 +- icuSources/data/translit/Gujarati_Bengali.txt | 14 + .../data/translit/Gujarati_Devanagari.txt | 14 + .../data/translit/Gujarati_Gurmukhi.txt | 14 + .../data/translit/Gujarati_InterIndic.txt | 182 +- icuSources/data/translit/Gujarati_Kannada.txt | 14 + icuSources/data/translit/Gujarati_Latin.txt | 14 + .../data/translit/Gujarati_Malayalam.txt | 14 + icuSources/data/translit/Gujarati_Oriya.txt | 14 + icuSources/data/translit/Gujarati_Tamil.txt | 14 + icuSources/data/translit/Gujarati_Telugu.txt | 14 + icuSources/data/translit/Gurmukhi_Bengali.txt | 14 + .../data/translit/Gurmukhi_Devanagari.txt | 14 + .../data/translit/Gurmukhi_Gujarati.txt | 14 + .../data/translit/Gurmukhi_InterIndic.txt | 158 +- icuSources/data/translit/Gurmukhi_Kannada.txt | 14 + icuSources/data/translit/Gurmukhi_Latin.txt | 14 + .../data/translit/Gurmukhi_Malayalam.txt | 14 + icuSources/data/translit/Gurmukhi_Oriya.txt | 14 + icuSources/data/translit/Gurmukhi_Tamil.txt | 14 + icuSources/data/translit/Gurmukhi_Telugu.txt | 14 + icuSources/data/translit/Han_Latin.txt | 2849 +- icuSources/data/translit/Han_Spacedhan.txt | 29 +- icuSources/data/translit/Hangul_Latin.txt | 13 + icuSources/data/translit/Hebrew_Latin.txt | 116 +- .../data/translit/Hiragana_Katakana.txt | 342 +- icuSources/data/translit/Hiragana_Latin.txt | 20 +- .../data/translit/InterIndic_Bengali.txt | 255 +- .../data/translit/InterIndic_Devanagari.txt | 308 +- .../data/translit/InterIndic_Gujarati.txt | 266 +- .../data/translit/InterIndic_Gurmukhi.txt | 289 +- .../data/translit/InterIndic_Kannada.txt | 271 +- icuSources/data/translit/InterIndic_Latin.txt | 991 +- .../data/translit/InterIndic_Malayalam.txt | 271 +- icuSources/data/translit/InterIndic_Oriya.txt | 265 +- icuSources/data/translit/InterIndic_Tamil.txt | 286 +- .../data/translit/InterIndic_Telugu.txt | 270 +- icuSources/data/translit/Jamo_Latin.txt | 13 + icuSources/data/translit/Kannada_Bengali.txt | 14 + .../data/translit/Kannada_Devanagari.txt | 14 + icuSources/data/translit/Kannada_Gujarati.txt | 14 + icuSources/data/translit/Kannada_Gurmukhi.txt | 14 + .../data/translit/Kannada_InterIndic.txt | 176 +- icuSources/data/translit/Kannada_Latin.txt | 14 + .../data/translit/Kannada_Malayalam.txt | 14 + icuSources/data/translit/Kannada_Oriya.txt | 14 + icuSources/data/translit/Kannada_Tamil.txt | 14 + icuSources/data/translit/Kannada_Telugu.txt | 14 + icuSources/data/translit/Latin_Armenian.txt | 91 + icuSources/data/translit/Latin_Bengali.txt | 15 + .../data/translit/Latin_ConjoiningJamo.txt | 251 + icuSources/data/translit/Latin_Devanagari.txt | 15 + icuSources/data/translit/Latin_Ethiopic.txt | 353 + icuSources/data/translit/Latin_Gujarati.txt | 15 + icuSources/data/translit/Latin_Gurmukhi.txt | 15 + icuSources/data/translit/Latin_Hangul.txt | 14 + icuSources/data/translit/Latin_InterIndic.txt | 725 +- icuSources/data/translit/Latin_Jamo.txt | 536 +- icuSources/data/translit/Latin_Kannada.txt | 15 + icuSources/data/translit/Latin_Katakana.txt | 379 +- icuSources/data/translit/Latin_Malayalam.txt | 15 + .../data/translit/Latin_NumericPinyin.txt | 39 +- icuSources/data/translit/Latin_Oriya.txt | 15 + icuSources/data/translit/Latin_Tamil.txt | 15 + icuSources/data/translit/Latin_Telugu.txt | 15 + icuSources/data/translit/Latin_Thai.txt | 14 + .../data/translit/Malayalam_Bengali.txt | 14 + .../data/translit/Malayalam_Devanagari.txt | 14 + .../data/translit/Malayalam_Gujarati.txt | 14 + .../data/translit/Malayalam_Gurmukhi.txt | 14 + .../data/translit/Malayalam_InterIndic.txt | 161 +- .../data/translit/Malayalam_Kannada.txt | 14 + icuSources/data/translit/Malayalam_Latin.txt | 14 + icuSources/data/translit/Malayalam_Oriya.txt | 14 + icuSources/data/translit/Malayalam_Tamil.txt | 14 + icuSources/data/translit/Malayalam_Telugu.txt | 14 + icuSources/data/translit/Oriya_Bengali.txt | 14 + icuSources/data/translit/Oriya_Devanagari.txt | 14 + icuSources/data/translit/Oriya_Gujarati.txt | 14 + icuSources/data/translit/Oriya_Gurmukhi.txt | 14 + icuSources/data/translit/Oriya_InterIndic.txt | 169 +- icuSources/data/translit/Oriya_Kannada.txt | 14 + icuSources/data/translit/Oriya_Latin.txt | 14 + icuSources/data/translit/Oriya_Malayalam.txt | 14 + icuSources/data/translit/Oriya_Tamil.txt | 14 + icuSources/data/translit/Oriya_Telugu.txt | 14 + .../data/translit/Pinyin_NumericPinyin.txt | 14 + .../data/translit/Simplified_Traditional.txt | Bin 0 -> 45230 bytes icuSources/data/translit/Spacedhan_Han.txt | 10 + icuSources/data/translit/Syriac_Latin.txt | 56 + icuSources/data/translit/Tamil_Bengali.txt | 14 + icuSources/data/translit/Tamil_Devanagari.txt | 14 + icuSources/data/translit/Tamil_Gujarati.txt | 14 + icuSources/data/translit/Tamil_Gurmukhi.txt | 14 + icuSources/data/translit/Tamil_InterIndic.txt | 143 +- icuSources/data/translit/Tamil_Kannada.txt | 14 + icuSources/data/translit/Tamil_Latin.txt | 14 + icuSources/data/translit/Tamil_Malayalam.txt | 14 + icuSources/data/translit/Tamil_Oriya.txt | 14 + icuSources/data/translit/Tamil_Telugu.txt | 14 + icuSources/data/translit/Telugu_Bengali.txt | 14 + .../data/translit/Telugu_Devanagari.txt | 14 + icuSources/data/translit/Telugu_Gujarati.txt | 14 + icuSources/data/translit/Telugu_Gurmukhi.txt | 14 + .../data/translit/Telugu_InterIndic.txt | 156 +- icuSources/data/translit/Telugu_Kannada.txt | 14 + icuSources/data/translit/Telugu_Latin.txt | 14 + icuSources/data/translit/Telugu_Malayalam.txt | 14 + icuSources/data/translit/Telugu_Oriya.txt | 14 + icuSources/data/translit/Telugu_Tamil.txt | 14 + icuSources/data/translit/Thaana_Latin.txt | 440 + .../data/translit/ThaiLogical_Latin.txt | 193 +- icuSources/data/translit/Thai_Latin.txt | 16 + icuSources/data/translit/Thai_ThaiLogical.txt | 32 +- icuSources/data/translit/Thai_ThaiSemi.txt | 22 +- icuSources/data/translit/Tone_Digit.txt | 11 - icuSources/data/translit/el.txt | 2 +- icuSources/data/translit/en.txt | 2 +- icuSources/data/translit/root.txt | 1430 +- icuSources/data/translit/trnsfiles.mk | 4 +- icuSources/data/unidata/ApplePUApatch.txt | 365 + icuSources/data/unidata/BidiMirroring.txt | 71 +- icuSources/data/unidata/Blocks.txt | 54 +- icuSources/data/unidata/CaseFolding.txt | 177 +- icuSources/data/unidata/DerivedAge.txt | 145 +- icuSources/data/unidata/DerivedBidiClass.txt | 380 +- .../data/unidata/DerivedCoreProperties.txt | 1255 +- .../data/unidata/DerivedJoiningGroup.txt | 53 +- .../data/unidata/DerivedJoiningType.txt | 69 +- .../unidata/DerivedNormalizationProps.txt | 130 +- .../data/unidata/DerivedNumericValues.txt | 322 +- icuSources/data/unidata/EastAsianWidth.txt | 200 +- icuSources/data/unidata/FractionalUCA.txt | 32673 ++++---- .../data/unidata/GraphemeBreakProperty.txt | 1042 + icuSources/data/unidata/LineBreak.txt | 1186 +- .../data/unidata/NormalizationCorrections.txt | 15 +- icuSources/data/unidata/NormalizationTest.txt | 524 +- icuSources/data/unidata/PropList.txt | 1628 +- icuSources/data/unidata/PropertyAliases.txt | 18 +- .../data/unidata/PropertyValueAliases.txt | 103 +- icuSources/data/unidata/Scripts.txt | 2441 +- .../data/unidata/SentenceBreakProperty.txt | 1664 + icuSources/data/unidata/SpecialCasing.txt | 34 +- icuSources/data/unidata/UCARules.txt | 32207 ++++---- icuSources/data/unidata/UnicodeData.txt | 2904 +- icuSources/data/unidata/WordBreakProperty.txt | 521 + .../unidata/base_unidata/DerivedBidiClass.txt | 1452 + .../base_unidata/DerivedCoreProperties.txt | 5138 ++ .../base_unidata/DerivedNumericValues.txt | 1423 + .../unidata/base_unidata/EastAsianWidth.txt | 782 + .../base_unidata/GraphemeBreakProperty.txt | 1039 + .../data/unidata/base_unidata/LineBreak.txt | 1968 + .../data/unidata/base_unidata/Scripts.txt | 1538 + .../data/unidata/base_unidata/UnicodeData.txt | 17720 +++++ icuSources/data/unidata/changes.txt | 202 + icuSources/data/xml/brkitr/en.xml | 18 + icuSources/data/xml/brkitr/en_US.xml | 19 + icuSources/data/xml/brkitr/en_US_POSIX.xml | 27 + icuSources/data/xml/brkitr/ja.xml | 25 + icuSources/data/xml/brkitr/root.xml | 32 + icuSources/data/xml/collation/ar.xml | 19 + icuSources/data/xml/collation/be.xml | 19 + icuSources/data/xml/collation/bg.xml | 19 + icuSources/data/xml/collation/ca.xml | 19 + icuSources/data/xml/collation/cs.xml | 19 + icuSources/data/xml/collation/da.xml | 19 + icuSources/data/xml/collation/de.xml | 19 + icuSources/data/xml/collation/dz.xml | 19 + icuSources/data/xml/collation/el.xml | 19 + icuSources/data/xml/collation/en.xml | 19 + icuSources/data/xml/collation/en_BE.xml | 20 + icuSources/data/xml/collation/eo.xml | 19 + icuSources/data/xml/collation/es.xml | 19 + icuSources/data/xml/collation/et.xml | 19 + icuSources/data/xml/collation/fa.xml | 19 + icuSources/data/xml/collation/fa_AF.xml | 20 + icuSources/data/xml/collation/fi.xml | 19 + icuSources/data/xml/collation/fo.xml | 19 + icuSources/data/xml/collation/fr.xml | 19 + icuSources/data/xml/collation/gu.xml | 19 + icuSources/data/xml/collation/he.xml | 19 + icuSources/data/xml/collation/hi.xml | 19 + icuSources/data/xml/collation/hr.xml | 19 + icuSources/data/xml/collation/hu.xml | 19 + icuSources/data/xml/collation/is.xml | 19 + icuSources/data/xml/collation/it.xml | 19 + icuSources/data/xml/collation/ja.xml | 19 + icuSources/data/xml/collation/kk.xml | 19 + icuSources/data/xml/collation/kl.xml | 19 + icuSources/data/xml/collation/kn.xml | 19 + icuSources/data/xml/collation/ko.xml | 19 + icuSources/data/xml/collation/lt.xml | 19 + icuSources/data/xml/collation/lv.xml | 19 + icuSources/data/xml/collation/mk.xml | 19 + icuSources/data/xml/collation/ml.xml | 18 + icuSources/data/xml/collation/mr.xml | 19 + icuSources/data/xml/collation/mt.xml | 19 + icuSources/data/xml/collation/nb.xml | 19 + icuSources/data/xml/collation/nn.xml | 19 + icuSources/data/xml/collation/om.xml | 19 + icuSources/data/xml/collation/or.xml | 17 + icuSources/data/xml/collation/pa.xml | 19 + icuSources/data/xml/collation/pl.xml | 19 + icuSources/data/xml/collation/ps.xml | 19 + icuSources/data/xml/collation/ro.xml | 19 + icuSources/data/xml/collation/root.xml | 25 + icuSources/data/xml/collation/ru.xml | 19 + icuSources/data/xml/collation/sh.xml | 19 + icuSources/data/xml/collation/sk.xml | 19 + icuSources/data/xml/collation/sl.xml | 19 + icuSources/data/xml/collation/sq.xml | 19 + icuSources/data/xml/collation/sr.xml | 19 + icuSources/data/xml/collation/sv.xml | 19 + icuSources/data/xml/collation/ta.xml | 19 + icuSources/data/xml/collation/te.xml | 19 + icuSources/data/xml/collation/th.xml | 19 + icuSources/data/xml/collation/tr.xml | 19 + icuSources/data/xml/collation/uk.xml | 19 + icuSources/data/xml/collation/vi.xml | 19 + icuSources/data/xml/collation/zh.xml | 18 + icuSources/data/xml/collation/zh_HK.xml | 19 + icuSources/data/xml/collation/zh_Hant.xml | 19 + icuSources/data/xml/collation/zh_MO.xml | 19 + icuSources/data/xml/collation/zh_TW.xml | 19 + .../data/xml/collation/zh_TW_STROKE.xml | 20 + icuSources/data/xml/experimental/aa.txt | 202 + icuSources/data/xml/experimental/aa_DJ.txt | 20 + icuSources/data/xml/experimental/aa_ER.txt | 42 + .../data/xml/experimental/aa_ER_SAAHO.txt | 40 + icuSources/data/xml/experimental/aa_ET.txt | 48 + icuSources/data/xml/experimental/bs.txt | 111 + icuSources/data/xml/experimental/bs_BA.txt | 14 + icuSources/data/xml/experimental/byn.txt | 441 + icuSources/data/xml/experimental/byn_ER.txt | 35 + icuSources/data/xml/experimental/de_LI.txt | 28 + icuSources/data/xml/experimental/dv.txt | 50 + icuSources/data/xml/experimental/dv_MV.txt | 33 + icuSources/data/xml/experimental/dz.txt | 278 + icuSources/data/xml/experimental/dz_BT.txt | 37 + icuSources/data/xml/experimental/el_CY.txt | 17 + icuSources/data/xml/experimental/en_AS.txt | 20 + icuSources/data/xml/experimental/en_BZ.txt | 33 + icuSources/data/xml/experimental/en_GU.txt | 20 + icuSources/data/xml/experimental/en_JM.txt | 17 + icuSources/data/xml/experimental/en_MH.txt | 20 + icuSources/data/xml/experimental/en_MP.txt | 20 + icuSources/data/xml/experimental/en_TT.txt | 17 + icuSources/data/xml/experimental/en_UM.txt | 20 + icuSources/data/xml/experimental/fr_MC.txt | 17 + icuSources/data/xml/experimental/gez.txt | 436 + icuSources/data/xml/experimental/gez_ER.txt | 59 + icuSources/data/xml/experimental/gez_ET.txt | 55 + icuSources/data/xml/experimental/haw.txt | 101 + icuSources/data/xml/experimental/haw_US.txt | 40 + icuSources/data/xml/experimental/iu.txt | 82 + icuSources/data/xml/experimental/ka.txt | 234 + icuSources/data/xml/experimental/ka_GE.txt | 17 + icuSources/data/xml/experimental/km.txt | 427 + icuSources/data/xml/experimental/km_KH.txt | 26 + icuSources/data/xml/experimental/ky.txt | 44 + icuSources/data/xml/experimental/ky_KG.txt | 17 + icuSources/data/xml/experimental/lo.txt | 466 + icuSources/data/xml/experimental/lo_LA.txt | 23 + icuSources/data/xml/experimental/mn.txt | 118 + icuSources/data/xml/experimental/mn_MN.txt | 17 + icuSources/data/xml/experimental/sa.txt | 50 + .../ar_IN.txt => xml/experimental/sa_IN.txt} | 27 +- icuSources/data/xml/experimental/sh_BA.txt | 11 + icuSources/data/xml/experimental/sid.txt | 196 + icuSources/data/xml/experimental/sid_ET.txt | 20 + icuSources/data/xml/experimental/sr_BA.txt | 11 + .../data/xml/experimental/sr_Cyrl_BA.txt | 95 + .../data/xml/experimental/sr_Latn_BA.txt | 81 + icuSources/data/xml/experimental/syr.txt | 52 + icuSources/data/xml/experimental/syr_SY.txt | 39 + icuSources/data/xml/experimental/tig.txt | 441 + icuSources/data/xml/experimental/tig_ER.txt | 35 + icuSources/data/xml/experimental/tt.txt | 44 + icuSources/data/xml/experimental/tt_RU.txt | 39 + icuSources/data/xml/experimental/uz_AF.txt | 11 + icuSources/data/xml/experimental/uz_Arab.txt | 141 + .../data/xml/experimental/uz_Arab_AF.txt | 19 + icuSources/data/xml/experimental/wal.txt | 307 + icuSources/data/xml/experimental/wal_ET.txt | 49 + icuSources/data/xml/main/aa.xml | 25 + icuSources/data/xml/main/af.xml | 25 + icuSources/data/xml/main/am.xml | 25 + icuSources/data/xml/main/ar.xml | 25 + icuSources/data/xml/main/as.xml | 25 + icuSources/data/xml/main/az.xml | 25 + icuSources/data/xml/main/az_AZ.xml | 19 + icuSources/data/xml/main/az_Cyrl.xml | 26 + icuSources/data/xml/main/az_Latn.xml | 26 + icuSources/data/xml/main/be.xml | 25 + icuSources/data/xml/main/bg.xml | 25 + icuSources/data/xml/main/bn.xml | 25 + icuSources/data/xml/main/bs.xml | 25 + icuSources/data/xml/main/byn.xml | 25 + icuSources/data/xml/main/ca.xml | 25 + icuSources/data/xml/main/cs.xml | 25 + icuSources/data/xml/main/cy.xml | 25 + icuSources/data/xml/main/da.xml | 25 + icuSources/data/xml/main/de.xml | 25 + icuSources/data/xml/main/dv.xml | 25 + icuSources/data/xml/main/dz.xml | 25 + icuSources/data/xml/main/el.xml | 25 + icuSources/data/xml/main/en.xml | 25 + icuSources/data/xml/main/en_US_POSIX.xml | 20 + icuSources/data/xml/main/eo.xml | 25 + icuSources/data/xml/main/es.xml | 25 + icuSources/data/xml/main/et.xml | 25 + icuSources/data/xml/main/eu.xml | 25 + icuSources/data/xml/main/fa.xml | 25 + icuSources/data/xml/main/fi.xml | 25 + icuSources/data/xml/main/fo.xml | 25 + icuSources/data/xml/main/fr.xml | 25 + icuSources/data/xml/main/ga.xml | 25 + icuSources/data/xml/main/gez.xml | 25 + icuSources/data/xml/main/gl.xml | 25 + icuSources/data/xml/main/gu.xml | 25 + icuSources/data/xml/main/gv.xml | 25 + icuSources/data/xml/main/haw.xml | 25 + icuSources/data/xml/main/he.xml | 25 + icuSources/data/xml/main/hi.xml | 25 + icuSources/data/xml/main/hr.xml | 25 + icuSources/data/xml/main/hu.xml | 25 + icuSources/data/xml/main/hy.xml | 25 + icuSources/data/xml/main/id.xml | 25 + icuSources/data/xml/main/is.xml | 25 + icuSources/data/xml/main/it.xml | 25 + icuSources/data/xml/main/iu.xml | 25 + icuSources/data/xml/main/iw.xml | 25 + icuSources/data/xml/main/ja.xml | 27 + icuSources/data/xml/main/ka.xml | 25 + icuSources/data/xml/main/kk.xml | 25 + icuSources/data/xml/main/kl.xml | 25 + icuSources/data/xml/main/km.xml | 25 + icuSources/data/xml/main/kn.xml | 25 + icuSources/data/xml/main/ko.xml | 26 + icuSources/data/xml/main/kok.xml | 25 + icuSources/data/xml/main/kw.xml | 25 + icuSources/data/xml/main/ky.xml | 25 + icuSources/data/xml/main/lo.xml | 25 + icuSources/data/xml/main/lt.xml | 25 + icuSources/data/xml/main/lv.xml | 25 + icuSources/data/xml/main/mk.xml | 25 + icuSources/data/xml/main/ml.xml | 25 + icuSources/data/xml/main/mn.xml | 25 + icuSources/data/xml/main/mr.xml | 25 + icuSources/data/xml/main/ms.xml | 25 + icuSources/data/xml/main/mt.xml | 25 + icuSources/data/xml/main/nb.xml | 25 + icuSources/data/xml/main/nl.xml | 25 + icuSources/data/xml/main/nn.xml | 25 + icuSources/data/xml/main/no.xml | 25 + icuSources/data/xml/main/om.xml | 25 + icuSources/data/xml/main/or.xml | 25 + icuSources/data/xml/main/pa.xml | 25 + icuSources/data/xml/main/pl.xml | 25 + icuSources/data/xml/main/ps.xml | 25 + icuSources/data/xml/main/pt.xml | 25 + icuSources/data/xml/main/ro.xml | 25 + icuSources/data/xml/main/root.xml | 56 + icuSources/data/xml/main/ru.xml | 25 + icuSources/data/xml/main/sa.xml | 25 + icuSources/data/xml/main/sh.xml | 17 + icuSources/data/xml/main/sid.xml | 25 + icuSources/data/xml/main/sk.xml | 25 + icuSources/data/xml/main/sl.xml | 25 + icuSources/data/xml/main/so.xml | 25 + icuSources/data/xml/main/sq.xml | 25 + icuSources/data/xml/main/sr.xml | 25 + icuSources/data/xml/main/sr_Cyrl.xml | 25 + icuSources/data/xml/main/sr_Latn.xml | 26 + icuSources/data/xml/main/sv.xml | 25 + icuSources/data/xml/main/sw.xml | 25 + icuSources/data/xml/main/syr.xml | 25 + icuSources/data/xml/main/ta.xml | 25 + icuSources/data/xml/main/te.xml | 25 + icuSources/data/xml/main/th.xml | 25 + icuSources/data/xml/main/ti.xml | 25 + icuSources/data/xml/main/tig.xml | 25 + icuSources/data/xml/main/tr.xml | 25 + icuSources/data/xml/main/tt.xml | 25 + icuSources/data/xml/main/uk.xml | 25 + icuSources/data/xml/main/ur.xml | 25 + icuSources/data/xml/main/ur_IN.xml | 18 + icuSources/data/xml/main/uz.xml | 25 + icuSources/data/xml/main/uz_Arab.xml | 27 + icuSources/data/xml/main/uz_Cyrl.xml | 26 + icuSources/data/xml/main/uz_Latn.xml | 26 + icuSources/data/xml/main/uz_UZ.xml | 19 + icuSources/data/xml/main/vi.xml | 25 + icuSources/data/xml/main/wal.xml | 25 + icuSources/data/xml/main/zh.xml | 25 + icuSources/data/xml/main/zh_Hans.xml | 27 + icuSources/data/xml/main/zh_Hant.xml | 27 + icuSources/extra/uconv/Makefile.in | 28 +- icuSources/extra/uconv/samples/eucJP.txt | 74 +- .../extra/uconv/samples/hangul-eucKR.txt | 4 +- .../extra/uconv/samples/hania-eucKR.txt | 2 +- icuSources/extra/uconv/samples/iso8859-1.txt | 18 - icuSources/extra/uconv/samples/koi8r.txt | 12 +- .../extra/uconv/samples/utf8/armenian.txt | 8 +- .../extra/uconv/samples/utf8/banviet.txt | 22 +- .../uconv/samples/utf8/chinese-ulysses.txt | 444 +- icuSources/extra/uconv/samples/utf8/greek.txt | 88 +- .../extra/uconv/samples/utf8/hangul.txt | 4 +- icuSources/extra/uconv/samples/utf8/hania.txt | 2 +- icuSources/extra/uconv/samples/utf8/jap.txt | 74 +- .../extra/uconv/samples/utf8/korean.txt | 40 +- icuSources/extra/uconv/samples/utf8/linji.txt | 1834 +- icuSources/extra/uconv/samples/utf8/many.txt | 36 +- .../extra/uconv/samples/utf8/maopoem.txt | 46 +- .../extra/uconv/samples/utf8/russian.txt | 12 +- .../uconv/samples/utf8/simplechinese.txt | 28 +- .../extra/uconv/samples/utf8/utf-8-demo.txt | 117 +- icuSources/extra/uconv/uconv.1.in | 20 +- icuSources/extra/uconv/uconv.cpp | 22 +- icuSources/extra/uconv/uconv.dsp | 281 - icuSources/extra/uconv/uconv.vcproj | 16 +- icuSources/i18n/Makefile.in | 49 +- icuSources/i18n/anytrans.cpp | 24 +- icuSources/i18n/anytrans.h | 18 +- icuSources/i18n/astro.cpp | 48 +- icuSources/i18n/astro.h | 22 +- icuSources/i18n/calendar.cpp | 190 +- icuSources/i18n/casetrn.cpp | 16 +- icuSources/i18n/casetrn.h | 9 +- icuSources/i18n/choicfmt.cpp | 33 +- icuSources/i18n/coleitr.cpp | 543 +- icuSources/i18n/coll.cpp | 12 +- icuSources/i18n/cpdtrans.cpp | 87 +- icuSources/i18n/cpdtrans.h | 36 +- icuSources/i18n/csdetect.cpp | 387 + icuSources/i18n/csdetect.h | 56 + icuSources/i18n/csmatch.cpp | 61 + icuSources/i18n/csmatch.h | 44 + icuSources/i18n/csr2022.cpp | 172 + icuSources/i18n/csr2022.h | 86 + icuSources/i18n/csrecog.cpp | 28 + icuSources/i18n/csrecog.h | 42 + icuSources/i18n/csrmbcs.cpp | 517 + icuSources/i18n/csrmbcs.h | 205 + icuSources/i18n/csrsbcs.cpp | 1099 + icuSources/i18n/csrsbcs.h | 364 + icuSources/i18n/csrucode.cpp | 146 + icuSources/i18n/csrucode.h | 106 + icuSources/i18n/csrutf8.cpp | 111 + icuSources/i18n/csrutf8.h | 42 + icuSources/i18n/datefmt.cpp | 26 +- icuSources/i18n/dcfmtsym.cpp | 44 +- icuSources/i18n/decimfmt.cpp | 47 +- icuSources/i18n/decimfmt.cpp.fixed | 3741 + icuSources/i18n/digitlst.cpp | 4 +- icuSources/i18n/digitlst.h | 8 +- icuSources/i18n/dtfmtsym.cpp | 1442 +- icuSources/i18n/esctrn.cpp | 28 +- icuSources/i18n/esctrn.h | 19 +- icuSources/i18n/fmtable.cpp | 33 +- icuSources/i18n/fmtable_cnv.cpp | 44 + icuSources/i18n/funcrepl.h | 4 + icuSources/i18n/gregocal.cpp | 4 +- icuSources/i18n/gregoimp.cpp | 31 +- icuSources/i18n/gregoimp.h | 43 +- icuSources/i18n/hebrwcal.cpp | 21 +- icuSources/i18n/hebrwcal.h | 10 +- icuSources/i18n/i18n.dsp | 2676 - icuSources/i18n/i18n.rc | 12 +- icuSources/i18n/i18n.vcproj | 161 +- icuSources/i18n/inputext.cpp | 162 + icuSources/i18n/inputext.h | 59 + icuSources/i18n/japancal.cpp | 8 +- icuSources/i18n/msgfmt.cpp | 28 +- icuSources/i18n/name2uni.cpp | 46 +- icuSources/i18n/name2uni.h | 6 +- icuSources/i18n/nfrlist.h | 4 +- icuSources/i18n/nfrs.cpp | 14 +- icuSources/i18n/nfrs.h | 2 +- icuSources/i18n/nfrule.cpp | 25 +- icuSources/i18n/nfrule.h | 5 +- icuSources/i18n/nfsubs.cpp | 131 +- icuSources/i18n/nfsubs.h | 27 +- icuSources/i18n/nortrans.cpp | 6 +- icuSources/i18n/nortrans.h | 8 +- icuSources/i18n/nultrans.cpp | 10 +- icuSources/i18n/nultrans.h | 18 +- icuSources/i18n/numfmt.cpp | 109 +- icuSources/i18n/olsontz.cpp | 87 +- icuSources/i18n/olsontz.h | 4 +- icuSources/i18n/quant.h | 6 +- icuSources/i18n/rbnf.cpp | 46 +- icuSources/i18n/rbt.cpp | 11 +- icuSources/i18n/rbt_data.cpp | 39 +- icuSources/i18n/rbt_data.h | 18 +- icuSources/i18n/rbt_pars.cpp | 574 +- icuSources/i18n/rbt_pars.h | 102 +- icuSources/i18n/rbt_set.cpp | 6 +- icuSources/i18n/regexcmp.cpp | 111 +- icuSources/i18n/regexcmp.h | 11 +- icuSources/i18n/regeximp.h | 8 +- icuSources/i18n/rematch.cpp | 30 +- icuSources/i18n/remtrans.cpp | 33 +- icuSources/i18n/remtrans.h | 12 +- icuSources/i18n/repattrn.cpp | 17 +- icuSources/i18n/search.cpp | 3 +- icuSources/i18n/simpletz.cpp | 7 +- icuSources/i18n/smpdtfmt.cpp | 614 +- icuSources/i18n/sortkey.cpp | 10 +- icuSources/i18n/stsearch.cpp | 199 +- icuSources/i18n/tblcoll.cpp | 116 +- icuSources/i18n/timezone.cpp | 135 +- icuSources/i18n/titletrn.cpp | 13 +- icuSources/i18n/titletrn.h | 9 +- icuSources/i18n/tolowtrn.cpp | 4 +- icuSources/i18n/tolowtrn.h | 9 +- icuSources/i18n/toupptrn.cpp | 4 +- icuSources/i18n/toupptrn.h | 9 +- icuSources/i18n/translit.cpp | 292 +- icuSources/i18n/transreg.cpp | 281 +- icuSources/i18n/transreg.h | 16 +- icuSources/i18n/tridpars.cpp | 32 +- icuSources/i18n/tridpars.h | 14 +- icuSources/i18n/ucal.cpp | 29 +- icuSources/i18n/ucln_in.c | 6 +- icuSources/i18n/ucln_in.h | 3 +- icuSources/i18n/ucol.cpp | 2264 +- icuSources/i18n/ucol_bld.cpp | 156 +- icuSources/i18n/ucol_bld.h | 4 +- icuSources/i18n/ucol_cnt.cpp | 337 +- icuSources/i18n/ucol_cnt.h | 6 +- icuSources/i18n/ucol_elm.cpp | 186 +- icuSources/i18n/ucol_elm.h | 14 +- icuSources/i18n/ucol_imp.h | 32 +- icuSources/i18n/ucol_res.cpp | 719 + icuSources/i18n/ucol_sit.cpp | 225 +- icuSources/i18n/ucol_tok.cpp | 12 +- icuSources/i18n/ucol_tok.h | 4 +- icuSources/i18n/ucol_wgt.c | 9 +- icuSources/i18n/ucoleitr.cpp | 29 +- icuSources/i18n/ucsdet.cpp | 234 + icuSources/i18n/ucurr.cpp | 378 +- icuSources/i18n/udat.cpp | 336 +- icuSources/i18n/ulocdata.c | 155 +- icuSources/i18n/umsg.cpp | 108 +- icuSources/i18n/unesctrn.cpp | 36 +- icuSources/i18n/unesctrn.h | 23 +- icuSources/i18n/uni2name.cpp | 2 +- icuSources/i18n/uni2name.h | 6 +- icuSources/i18n/unicode/calendar.h | 29 +- icuSources/i18n/unicode/choicfmt.h | 13 +- icuSources/i18n/unicode/coleitr.h | 32 +- icuSources/i18n/unicode/coll.h | 29 +- icuSources/i18n/unicode/curramt.h | 30 +- icuSources/i18n/unicode/currunit.h | 27 +- icuSources/i18n/unicode/datefmt.h | 7 +- icuSources/i18n/unicode/dcfmtsym.h | 28 +- icuSources/i18n/unicode/decimfmt.h | 42 +- icuSources/i18n/unicode/dtfmtsym.h | 322 +- icuSources/i18n/unicode/fieldpos.h | 9 +- icuSources/i18n/unicode/fmtable.h | 61 +- icuSources/i18n/unicode/format.h | 12 +- icuSources/i18n/unicode/gregocal.h | 12 +- icuSources/i18n/unicode/measfmt.h | 16 +- icuSources/i18n/unicode/measunit.h | 17 +- icuSources/i18n/unicode/measure.h | 27 +- icuSources/i18n/unicode/msgfmt.h | 45 +- icuSources/i18n/unicode/numfmt.h | 33 +- icuSources/i18n/unicode/rbnf.h | 39 +- icuSources/i18n/unicode/regex.h | 14 +- icuSources/i18n/unicode/search.h | 8 +- icuSources/i18n/unicode/simpletz.h | 11 +- icuSources/i18n/unicode/smpdtfmt.h | 51 +- icuSources/i18n/unicode/sortkey.h | 14 +- icuSources/i18n/unicode/stsearch.h | 25 +- icuSources/i18n/unicode/tblcoll.h | 67 +- icuSources/i18n/unicode/timezone.h | 28 +- icuSources/i18n/unicode/translit.h | 56 +- icuSources/i18n/unicode/ucal.h | 290 +- icuSources/i18n/unicode/ucol.h | 184 +- icuSources/i18n/unicode/ucsdet.h | 350 + icuSources/i18n/unicode/ucurr.h | 80 +- icuSources/i18n/unicode/udat.h | 129 +- icuSources/i18n/unicode/ulocdata.h | 127 +- icuSources/i18n/unicode/umsg.h | 56 +- icuSources/i18n/unicode/unirepl.h | 7 +- icuSources/i18n/unicode/unum.h | 127 +- icuSources/i18n/unicode/uregex.h | 147 +- icuSources/i18n/unicode/usearch.h | 12 +- icuSources/i18n/unicode/utmscale.h | 166 +- icuSources/i18n/unicode/utrans.h | 18 +- icuSources/i18n/uregex.cpp | 162 +- icuSources/i18n/uregexc.cpp | 39 + icuSources/i18n/usearch.cpp | 64 +- icuSources/i18n/utmscale.c | 120 +- icuSources/i18n/utrans.cpp | 14 +- icuSources/i18n/windtfmt.cpp | 315 + icuSources/i18n/windtfmt.h | 148 + icuSources/i18n/winnmfmt.cpp | 345 + icuSources/i18n/winnmfmt.h | 168 + icuSources/icudefs.mk.in | 9 +- icuSources/io/Makefile.in | 44 +- icuSources/io/io.dsp | 336 - icuSources/io/io.rc | 12 +- icuSources/io/io.vcproj | 28 +- icuSources/io/locbund.c | 76 +- icuSources/io/locbund.h | 3 +- icuSources/io/ucln_io.c | 51 + icuSources/io/ucln_io.h | 37 + icuSources/io/ufile.c | 33 +- icuSources/io/ufile.h | 11 +- icuSources/io/ufmt_cmn.c | 81 +- icuSources/io/unicode/ustdio.h | 173 +- icuSources/io/unicode/ustream.h | 34 +- icuSources/io/uprintf.h | 3 +- icuSources/io/uprntf_p.c | 86 +- icuSources/io/uscanf_p.c | 193 +- icuSources/io/ustdio.c | 70 +- icuSources/io/ustream.cpp | 34 +- icuSources/layout/AnchorTables.cpp | 9 +- icuSources/layout/ArabicLayoutEngine.cpp | 49 +- icuSources/layout/ArabicLayoutEngine.h | 17 +- icuSources/layout/ArabicShaping.cpp | 163 +- icuSources/layout/ArabicShaping.h | 19 +- icuSources/layout/AttachmentPosnSubtables.h | 5 +- icuSources/layout/CanonData.cpp | 97 +- icuSources/layout/CanonShaping.cpp | 81 + icuSources/layout/CanonShaping.h | 12 +- .../layout/ContextualSubstSubtables.cpp | 15 +- .../layout/CursiveAttachmentSubtables.cpp | 66 +- .../layout/CursiveAttachmentSubtables.h | 8 +- icuSources/layout/DefaultCharMapper.h | 5 +- icuSources/layout/DeviceTables.cpp | 4 +- icuSources/layout/DeviceTables.h | 4 +- icuSources/layout/GXLayoutEngine.cpp | 6 +- icuSources/layout/GlyphIterator.cpp | 194 +- icuSources/layout/GlyphIterator.h | 46 +- .../layout/GlyphPositionAdjustments.cpp | 166 + icuSources/layout/GlyphPositionAdjustments.h | 305 +- icuSources/layout/GlyphPositioningTables.cpp | 14 +- icuSources/layout/GlyphPositioningTables.h | 16 +- icuSources/layout/GlyphPosnLookupProc.cpp | 7 +- icuSources/layout/GlyphPosnLookupProc.h | 5 +- icuSources/layout/GlyphSubstLookupProc.cpp | 6 +- icuSources/layout/GlyphSubstLookupProc.h | 6 +- icuSources/layout/GlyphSubstitutionTables.cpp | 7 +- icuSources/layout/GlyphSubstitutionTables.h | 13 +- icuSources/layout/HanLayoutEngine.cpp | 39 +- icuSources/layout/HanLayoutEngine.h | 4 +- icuSources/layout/HangulLayoutEngine.cpp | 338 + icuSources/layout/HangulLayoutEngine.h | 125 + icuSources/layout/IndicClassTables.cpp | 245 +- icuSources/layout/IndicLayoutEngine.cpp | 18 +- icuSources/layout/IndicLayoutEngine.h | 7 +- icuSources/layout/IndicReordering.cpp | 408 +- icuSources/layout/IndicReordering.h | 183 +- icuSources/layout/KernTable.cpp | 205 + icuSources/layout/KernTable.h | 51 + icuSources/layout/KhmerLayoutEngine.cpp | 81 + icuSources/layout/KhmerLayoutEngine.h | 129 + icuSources/layout/KhmerReordering.cpp | 491 + icuSources/layout/KhmerReordering.h | 132 + icuSources/layout/LEFontInstance.cpp | 74 +- icuSources/layout/LEFontInstance.h | 133 +- icuSources/layout/LEGlyphFilter.h | 2 +- icuSources/layout/LEGlyphStorage.cpp | 33 +- icuSources/layout/LEGlyphStorage.h | 97 +- icuSources/layout/LEInsertionList.h | 9 +- icuSources/layout/LELanguages.h | 11 +- icuSources/layout/LEScripts.h | 64 +- icuSources/layout/LESwaps.h | 7 +- icuSources/layout/LETypes.h | 420 +- icuSources/layout/LayoutEngine.cpp | 165 +- icuSources/layout/LayoutEngine.h | 37 +- icuSources/layout/LookupProcessor.cpp | 140 +- icuSources/layout/LookupProcessor.h | 35 +- icuSources/layout/Lookups.h | 5 +- icuSources/layout/Makefile.in | 59 +- icuSources/layout/MarkToMarkPosnSubtables.cpp | 7 +- icuSources/layout/MirroredCharData.cpp | 108 + icuSources/layout/OpenTypeLayoutEngine.cpp | 124 +- icuSources/layout/OpenTypeLayoutEngine.h | 58 +- icuSources/layout/OpenTypeTables.h | 13 +- .../layout/PairPositioningSubtables.cpp | 25 +- icuSources/layout/ScriptAndLanguageTags.cpp | 61 +- icuSources/layout/ScriptAndLanguageTags.h | 63 +- icuSources/layout/ShapingTypeData.cpp | 85 + .../layout/SinglePositioningSubtables.cpp | 19 +- icuSources/layout/ThaiLayoutEngine.cpp | 8 +- icuSources/layout/ThaiLayoutEngine.h | 4 +- icuSources/layout/ThaiShaping.h | 5 +- icuSources/layout/TibetanLayoutEngine.cpp | 87 + icuSources/layout/TibetanLayoutEngine.h | 129 + icuSources/layout/TibetanReordering.cpp | 381 + icuSources/layout/TibetanReordering.h | 151 + icuSources/layout/ValueRecords.cpp | 71 +- icuSources/layout/ValueRecords.h | 7 +- icuSources/layout/layout.dsp | 1175 - icuSources/layout/layout.rc | 12 +- icuSources/layout/layout.vcproj | 93 +- icuSources/layout/loengine.cpp | 18 - icuSources/layout/unicode/loengine.h | 358 - icuSources/layoutex/Makefile.in | 41 +- icuSources/layoutex/ParagraphLayout.cpp | 65 +- icuSources/layoutex/layout/ParagraphLayout.h | 145 +- icuSources/layoutex/layout/RunArrays.h | 170 +- icuSources/layoutex/layoutex.dsp | 277 - icuSources/layoutex/layoutex.rc | 12 +- icuSources/layoutex/layoutex.vcproj | 24 +- icuSources/runConfigureICU | 233 +- icuSources/samples/Makefile.in | 4 +- icuSources/samples/all/all.dsp | 85 - icuSources/samples/all/all.dsw | 347 - icuSources/samples/all/all.sln | 17 + icuSources/samples/break/break.dsp | 113 - icuSources/samples/break/break.dsw | 29 - icuSources/samples/break/break.vcproj | 4 +- icuSources/samples/break/readme.txt | 8 +- icuSources/samples/cal/cal.dsp | 110 - icuSources/samples/cal/cal.dsw | 29 - icuSources/samples/cal/cal.vcproj | 4 +- icuSources/samples/cal/readme.txt | 8 +- icuSources/samples/case/case.dsp | 106 - icuSources/samples/case/case.dsw | 29 - icuSources/samples/case/case.vcproj | 4 +- icuSources/samples/case/readme.txt | 9 +- icuSources/samples/citer/Makefile | 22 + icuSources/samples/citer/citer.cpp | 294 +- icuSources/samples/citer/citer.vcproj | 140 + icuSources/samples/citer/readme.txt | 8 +- icuSources/samples/coll/coll.cpp | 5 +- icuSources/samples/coll/coll.dsp | 101 - icuSources/samples/coll/coll.dsw | 29 - icuSources/samples/coll/coll.vcproj | 23 +- icuSources/samples/coll/readme.txt | 8 +- icuSources/samples/csdet/Makefile.in | 93 + icuSources/samples/csdet/csdet.c | 73 + icuSources/samples/csdet/csdet.sln | 21 + icuSources/samples/csdet/csdet.vcproj | 140 + icuSources/samples/date/date.dsp | 110 - icuSources/samples/date/date.dsw | 29 - icuSources/samples/date/date.vcproj | 4 +- icuSources/samples/date/readme.txt | 12 +- icuSources/samples/datecal/Makefile | 4 +- icuSources/samples/datefmt/README.TXT | 8 +- icuSources/samples/datefmt/datefmt.dsp | 106 - icuSources/samples/datefmt/datefmt.dsw | 29 - icuSources/samples/datefmt/datefmt.vcproj | 4 +- icuSources/samples/defs.mk | 6 +- icuSources/samples/layout/FontMap.GDI | 4 +- icuSources/samples/layout/FontMap.Gnome | 4 +- icuSources/samples/layout/FontMap.cpp | 21 +- icuSources/samples/layout/GDIFontInstance.cpp | 29 +- icuSources/samples/layout/GDIGUISupport.h | 4 +- icuSources/samples/layout/GUISupport.h | 4 +- .../samples/layout/GnomeFontInstance.cpp | 6 +- icuSources/samples/layout/GnomeGUISupport.h | 4 +- icuSources/samples/layout/Sample.txt | 2 +- .../layout/ScriptCompositeFontInstance.h | 4 +- icuSources/samples/layout/UnicodeReader.cpp | 4 +- icuSources/samples/layout/gnomelayout.cpp | 30 +- icuSources/samples/layout/layout.cpp | 8 +- icuSources/samples/layout/layout.dsp | 196 - icuSources/samples/layout/layout.dsw | 29 - icuSources/samples/layout/layout.vcproj | 4 +- icuSources/samples/layout/paragraph.cpp | 192 +- icuSources/samples/layout/paragraph.h | 18 +- icuSources/samples/layout/readme.html | 331 +- icuSources/samples/legacy/legacy.cpp | 6 +- icuSources/samples/legacy/legacy.dsp | 112 - icuSources/samples/legacy/legacy.dsw | 29 - icuSources/samples/legacy/legacy.sln | 10 +- icuSources/samples/legacy/legacy.vcproj | 4 +- icuSources/samples/legacy/newcol.cpp | 4 +- icuSources/samples/legacy/oldcol.cpp | 4 +- icuSources/samples/msgfmt/README.TXT | 8 +- icuSources/samples/msgfmt/msgfmt.dsp | 104 - icuSources/samples/msgfmt/msgfmt.dsw | 29 - icuSources/samples/msgfmt/msgfmt.vcproj | 4 +- icuSources/samples/numfmt/numfmt.dsp | 114 - icuSources/samples/numfmt/numfmt.dsw | 29 - icuSources/samples/numfmt/numfmt.vcproj | 4 +- icuSources/samples/numfmt/readme.txt | 8 +- icuSources/samples/props/props.dsp | 102 - icuSources/samples/props/props.dsw | 29 - icuSources/samples/props/props.vcproj | 4 +- icuSources/samples/props/readme.txt | 8 +- icuSources/samples/readme.txt | 4 +- icuSources/samples/rules.mk | 12 +- icuSources/samples/strsrch/readme.txt | 10 +- icuSources/samples/strsrch/strsrch.cpp | 5 +- icuSources/samples/strsrch/strsrch.dsp | 101 - icuSources/samples/strsrch/strsrch.dsw | 29 - icuSources/samples/strsrch/strsrch.vcproj | 4 +- icuSources/samples/translit/README.TXT | 8 +- icuSources/samples/translit/translit.dsp | 114 - icuSources/samples/translit/translit.dsw | 29 - icuSources/samples/translit/translit.vcproj | 4 +- icuSources/samples/uciter8/readme.txt | 8 +- icuSources/samples/uciter8/uciter8.dsp | 110 - icuSources/samples/uciter8/uciter8.dsw | 29 - icuSources/samples/uciter8/uciter8.sln | 10 +- icuSources/samples/uciter8/uciter8.vcproj | 4 +- icuSources/samples/uciter8/uit_len8.c | 151 +- icuSources/samples/ucnv/data01.txt | 30 +- icuSources/samples/ucnv/data06.txt | 178 +- icuSources/samples/ucnv/readme.txt | 8 +- icuSources/samples/ucnv/ucnv.dsp | 108 - icuSources/samples/ucnv/ucnv.dsw | 29 - icuSources/samples/ucnv/ucnv.vcproj | 4 +- icuSources/samples/udata/reader.dsp | 111 - icuSources/samples/udata/reader.vcproj | 4 +- icuSources/samples/udata/readme.txt | 8 +- icuSources/samples/udata/udata.dsw | 41 - icuSources/samples/udata/writer.dsp | 102 - icuSources/samples/udata/writer.vcproj | 4 +- icuSources/samples/ufortune/readme.txt | 8 +- .../samples/ufortune/resources/Makefile | 16 +- icuSources/samples/ufortune/resources/es.txt | 224 +- .../ufortune/resources/fortune_resources.mak | 5 +- .../ufortune/resources/res-file-list.txt | 4 +- icuSources/samples/ufortune/ufortune.c | 12 +- icuSources/samples/ufortune/ufortune.dsp | 161 - icuSources/samples/ufortune/ufortune.dsw | 29 - icuSources/samples/ufortune/ufortune.vcproj | 4 +- icuSources/samples/ugrep/readme.txt | 8 +- icuSources/samples/ugrep/ugrep.dsp | 103 - icuSources/samples/ugrep/ugrep.dsw | 29 - icuSources/samples/ugrep/ugrep.vcproj | 2 + icuSources/samples/uresb/Makefile | 23 +- icuSources/samples/uresb/readme.txt | 8 +- icuSources/samples/uresb/resources.dsp | 97 - icuSources/samples/uresb/resources.mak | 14 +- icuSources/samples/uresb/sr.txt | 94 +- icuSources/samples/uresb/uresb.c | 18 +- icuSources/samples/uresb/uresb.dsp | 111 - icuSources/samples/uresb/uresb.dsw | 44 - icuSources/samples/uresb/uresb.vcproj | 9 +- icuSources/samples/ustring/readme.txt | 8 +- icuSources/samples/ustring/ustring.dsp | 102 - icuSources/samples/ustring/ustring.dsw | 29 - icuSources/samples/ustring/ustring.vcproj | 4 +- icuSources/samples/xml2txt/readme.txt | 3 - icuSources/stubdata/Makefile.in | 34 +- icuSources/stubdata/stubdata.dsp | 185 - icuSources/stubdata/stubdata.vcproj | 23 +- icuSources/test/cintltst/Makefile.in | 43 +- icuSources/test/cintltst/bocu1tst.c | 6 +- icuSources/test/cintltst/callcoll.c | 87 +- icuSources/test/cintltst/callcoll.h | 6 +- icuSources/test/cintltst/calltest.c | 9 +- icuSources/test/cintltst/capitst.c | 248 +- icuSources/test/cintltst/capitst.h | 13 +- icuSources/test/cintltst/cbiapts.c | 118 +- icuSources/test/cintltst/cbiditst.c | 2081 +- icuSources/test/cintltst/cbkittst.c | 2 - icuSources/test/cintltst/ccaltst.c | 63 +- icuSources/test/cintltst/ccapitst.c | 576 +- icuSources/test/cintltst/ccolltst.c | 5 +- icuSources/test/cintltst/ccolltst.h | 4 +- icuSources/test/cintltst/ccurrtst.c | 4 +- icuSources/test/cintltst/cdantst.c | 245 - icuSources/test/cintltst/cdantst.h | 42 - icuSources/test/cintltst/cdattst.c | 51 +- icuSources/test/cintltst/cdtdptst.c | 21 +- icuSources/test/cintltst/cdtrgtst.c | 90 +- icuSources/test/cintltst/cformtst.c | 5 +- icuSources/test/cintltst/chashtst.c | 95 +- icuSources/test/cintltst/cintltst.c | 95 +- icuSources/test/cintltst/cintltst.dsp | 653 - icuSources/test/cintltst/cintltst.h | 19 +- icuSources/test/cintltst/cintltst.vcproj | 42 +- icuSources/test/cintltst/cldrtest.c | 232 +- icuSources/test/cintltst/cloctst.c | 508 +- icuSources/test/cintltst/cloctst.h | 20 +- icuSources/test/cintltst/cmsccoll.c | 160 +- icuSources/test/cintltst/cmsgtst.c | 47 +- icuSources/test/cintltst/cnmdptst.c | 242 +- icuSources/test/cintltst/cnumtst.c | 108 +- icuSources/test/cintltst/cnumtst.h | 8 +- icuSources/test/cintltst/cregrtst.c | 1804 - icuSources/test/cintltst/cregrtst.h | 222 - icuSources/test/cintltst/crestst.c | 82 +- icuSources/test/cintltst/creststn.c | 597 +- icuSources/test/cintltst/creststn.h | 19 +- icuSources/test/cintltst/cstrcase.c | 185 +- icuSources/test/cintltst/cstrtest.c | 11 + icuSources/test/cintltst/cucdapi.c | 63 +- icuSources/test/cintltst/cucdtst.c | 629 +- icuSources/test/cintltst/cucdtst.h | 27 - icuSources/test/cintltst/currtest.c | 204 + icuSources/test/cintltst/custrtrn.c | 449 +- icuSources/test/cintltst/custrtst.c | 56 +- icuSources/test/cintltst/cutiltst.c | 4 +- icuSources/test/cintltst/eurocreg.c | 13 +- icuSources/test/cintltst/hpmufn.c | 68 +- icuSources/test/cintltst/idnatest.c | 113 +- icuSources/test/cintltst/nccbtst.c | 164 +- icuSources/test/cintltst/ncnvfbts.c | 40 +- icuSources/test/cintltst/ncnvtst.c | 282 +- icuSources/test/cintltst/nfsprep.c | 42 +- icuSources/test/cintltst/nucnvtst.c | 540 +- icuSources/test/cintltst/putiltst.c | 9 +- icuSources/test/cintltst/reapits.c | 329 +- icuSources/test/cintltst/sorttest.c | 10 +- icuSources/test/cintltst/spreptst.c | 58 +- icuSources/test/cintltst/stdnmtst.c | 34 +- icuSources/test/cintltst/tracetst.c | 9 +- icuSources/test/cintltst/trietest.c | 95 +- icuSources/test/cintltst/ucmptst.c | 201 - icuSources/test/cintltst/ucsdetst.c | 356 + icuSources/test/cintltst/udatatst.c | 420 +- icuSources/test/cintltst/usettest.c | 41 +- icuSources/test/cintltst/utexttst.c | 250 + icuSources/test/cintltst/utf16tst.c | 8 +- icuSources/test/cintltst/utf8tst.c | 133 +- icuSources/test/cintltst/utmstest.c | 146 +- icuSources/test/cintltst/utransts.c | 9 +- icuSources/test/collperf/collperf.cpp | 1749 - icuSources/test/collperf/collperf.dsp | 160 - icuSources/test/collperf/readme.html | 84 - icuSources/test/hdrtst/Makefile.in | 75 +- icuSources/test/intltest/Makefile.in | 38 +- icuSources/test/intltest/aliastst.cpp | 287 + icuSources/test/intltest/aliastst.h | 30 + icuSources/test/intltest/apicoll.cpp | 110 +- icuSources/test/intltest/apicoll.h | 5 +- icuSources/test/intltest/astrotst.cpp | 6 +- icuSources/test/intltest/calcasts.cpp | 9 +- icuSources/test/intltest/callimts.cpp | 6 +- icuSources/test/intltest/calregts.cpp | 21 +- icuSources/test/intltest/caltest.cpp | 22 +- icuSources/test/intltest/caltest.h | 2 +- icuSources/test/intltest/canittst.cpp | 65 +- icuSources/test/intltest/canittst.h | 4 +- icuSources/test/intltest/citrtest.cpp | 49 +- icuSources/test/intltest/cntabcol.cpp | 324 +- icuSources/test/intltest/cntabcol.h | 4 +- icuSources/test/intltest/convtest.cpp | 51 +- icuSources/test/intltest/convtest.h | 4 +- icuSources/test/intltest/cpdtrtst.cpp | 9 +- icuSources/test/intltest/csdetest.cpp | 518 + icuSources/test/intltest/csdetest.h | 39 + icuSources/test/intltest/dacoll.cpp | 241 - icuSources/test/intltest/dacoll.h | 51 - icuSources/test/intltest/dadrcoll.cpp | 31 +- icuSources/test/intltest/dadrcoll.h | 3 +- icuSources/test/intltest/dcfmapts.cpp | 2 + icuSources/test/intltest/dtfmapts.cpp | 33 +- icuSources/test/intltest/dtfmrgts.cpp | 81 +- icuSources/test/intltest/dtfmtrtts.cpp | 30 +- icuSources/test/intltest/dtfmtrtts.h | 3 +- icuSources/test/intltest/dtfmttst.cpp | 652 +- icuSources/test/intltest/dtfmttst.h | 31 +- icuSources/test/intltest/escoll.cpp | 4 +- icuSources/test/intltest/ficoll.cpp | 4 +- icuSources/test/intltest/frcoll.cpp | 4 +- icuSources/test/intltest/icusvtst.cpp | 168 +- icuSources/test/intltest/idnaconf.cpp | 352 + icuSources/test/intltest/idnaconf.h | 49 + icuSources/test/intltest/idnaref.cpp | 235 +- icuSources/test/intltest/incaltst.cpp | 108 +- icuSources/test/intltest/incaltst.h | 3 +- icuSources/test/intltest/intltest.cpp | 254 +- icuSources/test/intltest/intltest.dsp | 1011 - icuSources/test/intltest/intltest.h | 32 +- icuSources/test/intltest/intltest.vcproj | 132 +- icuSources/test/intltest/itformat.cpp | 2 +- icuSources/test/intltest/itmajor.cpp | 12 +- icuSources/test/intltest/itrbnf.cpp | 144 +- icuSources/test/intltest/itrbnf.h | 12 +- icuSources/test/intltest/itutil.cpp | 34 +- icuSources/test/intltest/loctest.cpp | 211 +- icuSources/test/intltest/miscdtfm.cpp | 58 +- icuSources/test/intltest/msfmrgts.cpp | 10 +- icuSources/test/intltest/nmfmapts.cpp | 135 +- icuSources/test/intltest/nmfmtrt.cpp | 21 +- icuSources/test/intltest/nptrans.cpp | 3 +- icuSources/test/intltest/numfmtst.cpp | 219 +- icuSources/test/intltest/numfmtst.h | 44 +- icuSources/test/intltest/numrgts.cpp | 166 +- icuSources/test/intltest/numrgts.h | 72 +- icuSources/test/intltest/pptest.cpp | 7 +- icuSources/test/intltest/punyref.c | 4 +- icuSources/test/intltest/rbbiapts.cpp | 154 +- icuSources/test/intltest/rbbitst.cpp | 8032 +- icuSources/test/intltest/rbbitst.h | 38 +- icuSources/test/intltest/regcoll.cpp | 2 +- icuSources/test/intltest/regextst.cpp | 30 +- icuSources/test/intltest/reptest.cpp | 30 +- icuSources/test/intltest/restest.cpp | 2 +- icuSources/test/intltest/restsnew.cpp | 30 +- icuSources/test/intltest/restsnew.h | 2 + icuSources/test/intltest/rndmcoll.cpp | 185 + icuSources/test/intltest/rndmcoll.h | 29 + icuSources/test/intltest/sdtfmtts.cpp | 10 +- icuSources/test/intltest/srchtest.cpp | 47 +- icuSources/test/intltest/srchtest.h | 3 +- icuSources/test/intltest/strcase.cpp | 280 +- icuSources/test/intltest/strtest.cpp | 6 +- icuSources/test/intltest/tchcfmt.cpp | 10 +- icuSources/test/intltest/testidn.cpp | 9 +- icuSources/test/intltest/testidna.cpp | 89 +- icuSources/test/intltest/tfsmalls.cpp | 75 +- icuSources/test/intltest/thcoll.cpp | 11 +- icuSources/test/intltest/tmsgfmt.cpp | 86 +- icuSources/test/intltest/tmsgfmt.h | 4 +- icuSources/test/intltest/transapi.cpp | 24 +- icuSources/test/intltest/transapi.h | 4 +- icuSources/test/intltest/transrt.cpp | 228 +- icuSources/test/intltest/transtst.cpp | 456 +- icuSources/test/intltest/transtst.h | 25 +- icuSources/test/intltest/trcoll.cpp | 4 +- icuSources/test/intltest/trnserr.cpp | 24 +- icuSources/test/intltest/trnserr.h | 6 +- icuSources/test/intltest/tscoll.cpp | 11 +- icuSources/test/intltest/tsdate.cpp | 8 +- icuSources/test/intltest/tsdtfmsy.cpp | 220 +- icuSources/test/intltest/tsdtfmsy.h | 8 +- icuSources/test/intltest/tsmthred.cpp | 247 +- icuSources/test/intltest/tsputil.cpp | 29 +- icuSources/test/intltest/tsputil.h | 3 +- icuSources/test/intltest/tstnorm.cpp | 714 +- icuSources/test/intltest/tstnrapi.cpp | 22 +- icuSources/test/intltest/tzbdtest.cpp | 109 +- icuSources/test/intltest/tzbdtest.h | 5 +- icuSources/test/intltest/tzregts.cpp | 184 +- icuSources/test/intltest/tzregts.h | 5 +- icuSources/test/intltest/tztest.cpp | 214 +- icuSources/test/intltest/tztest.h | 6 +- icuSources/test/intltest/ucaconf.cpp | 10 +- icuSources/test/intltest/ucdtest.cpp | 4 +- icuSources/test/intltest/uobjtest.cpp | 87 +- icuSources/test/intltest/uobjtest.h | 3 +- icuSources/test/intltest/usettest.cpp | 289 +- icuSources/test/intltest/usettest.h | 6 +- icuSources/test/intltest/ustrtest.cpp | 25 + icuSources/test/intltest/ustrtest.h | 16 +- icuSources/test/intltest/utxttest.cpp | 1302 + icuSources/test/intltest/utxttest.h | 59 + icuSources/test/intltest/uvectest.cpp | 175 + icuSources/test/intltest/uvectest.h | 34 + icuSources/test/intltest/v32test.cpp | 16 +- icuSources/test/intltest/wbnf.cpp | 1771 + icuSources/test/intltest/wbnf.h | 157 + icuSources/test/intltest/windttst.cpp | 197 + icuSources/test/intltest/windttst.h | 41 + icuSources/test/intltest/winnmtst.cpp | 323 + icuSources/test/intltest/winnmtst.h | 41 + icuSources/test/intltest/winutil.cpp | 81 + icuSources/test/intltest/winutil.h | 46 + icuSources/test/iotest/Makefile.in | 30 +- icuSources/test/iotest/filetst.c | 331 +- icuSources/test/iotest/iotest.cpp | 140 +- icuSources/test/iotest/iotest.dsp | 166 - icuSources/test/iotest/iotest.h | 8 +- icuSources/test/iotest/iotest.vcproj | 35 +- icuSources/test/iotest/stream.cpp | 135 + icuSources/test/iotest/strtst.c | 50 +- icuSources/test/iotest/trnstst.c | 316 + icuSources/test/letest/FontTableCache.cpp | 11 +- icuSources/test/letest/Makefile.in | 23 +- .../test/letest/PortableFontInstance.cpp | 143 +- icuSources/test/letest/PortableFontInstance.h | 84 +- icuSources/test/letest/SimpleFontInstance.cpp | 132 + icuSources/test/letest/SimpleFontInstance.h | 72 + icuSources/test/letest/cmaps.h | 7 +- icuSources/test/letest/gendata.cpp | 552 +- icuSources/test/letest/gendata.dsp | 134 - icuSources/test/letest/gendata.dsw | 29 - icuSources/test/letest/gendata.sln | 10 +- icuSources/test/letest/gendata.vcproj | 52 +- icuSources/test/letest/gendata.xml | 77 + icuSources/test/letest/letest.cpp | 833 +- icuSources/test/letest/letest.dsp | 138 - icuSources/test/letest/letest.dsw | 29 - icuSources/test/letest/letest.h | 30 +- icuSources/test/letest/letest.sln | 19 +- icuSources/test/letest/letest.vcproj | 54 +- icuSources/test/letest/letsutil.cpp | 98 + icuSources/test/letest/letsutil.h | 36 + icuSources/test/letest/readme.html | 51 +- icuSources/test/letest/sfnt.h | 64 +- icuSources/test/letest/testdata.cpp | 412 +- icuSources/test/perf/all/all.dsp | 63 - icuSources/test/perf/charperf/Makefile.in | 21 +- icuSources/test/perf/charperf/charperf.cpp | 184 +- icuSources/test/perf/charperf/charperf.dsp | 109 - icuSources/test/perf/charperf/charperf.h | 215 +- icuSources/test/perf/charperf/charperf.vcproj | 181 + icuSources/test/perf/collperf/CollPerf.pl | 82 + .../test/{ => perf}/collperf/Makefile.in | 23 +- icuSources/test/perf/collperf/collperf.cpp | 879 + icuSources/test/perf/collperf/collperf.vcproj | 179 + icuSources/test/perf/convperf/convperf.cpp | 3 +- icuSources/test/perf/convperf/convperf.dsp | 112 - icuSources/test/perf/convperf/convperf.h | 18 +- icuSources/test/perf/convperf/convperf.vcproj | 185 + icuSources/test/perf/normperf/Makefile.in | 23 +- icuSources/test/perf/normperf/normperf.cpp | 4 +- icuSources/test/perf/normperf/normperf.dsp | 108 - icuSources/test/perf/normperf/normperf.h | 29 +- icuSources/test/perf/normperf/normperf.vcproj | 182 + icuSources/test/perf/perf.dsw | 98 - icuSources/test/perf/perf.sln | 77 + icuSources/test/perf/ubrkperf/Makefile.in | 23 +- icuSources/test/perf/ubrkperf/ubrkperf.cpp | 5 +- icuSources/test/perf/ubrkperf/ubrkperf.h | 4 +- icuSources/test/perf/ubrkperf/ubrkperf.vcproj | 182 + icuSources/test/perf/ubrkperf/ubrkperfold.cpp | 4 +- .../usetperf}/Makefile.in | 27 +- icuSources/test/perf/usetperf/UsetPerf.pl | 45 + .../test/{ => perf}/usetperf/bitset.cpp | 2 +- icuSources/test/{ => perf}/usetperf/bitset.h | 2 +- icuSources/test/perf/usetperf/usetperf.cpp | 143 + icuSources/test/perf/usetperf/usetperf.vcproj | 203 + icuSources/test/perf/ustrperf/Makefile.in | 78 + icuSources/test/perf/ustrperf/stringperf.cpp | 390 +- icuSources/test/perf/ustrperf/stringperf.h | 674 +- .../test/perf/ustrperf/stringperf.vcproj | 8 +- icuSources/test/perf/utfperf/Makefile.in | 78 + icuSources/test/perf/utfperf/UtfPerf.pl | 46 + icuSources/test/perf/utfperf/utfperf.cpp | 156 + icuSources/test/perf/utfperf/utfperf.vcproj | 160 + .../CollationTest_NON_IGNORABLE_STUB.txt | 6607 +- .../testdata/CollationTest_SHIFTED_STUB.txt | 6607 +- .../test/testdata/DataDrivenCollationTest.txt | 1017 +- .../testdata/GraphemeClusterBreakTest.txt | 116 + icuSources/test/testdata/Makefile.in | 98 +- .../test/testdata/SentenceBreakTest.txt | 165 + icuSources/test/testdata/WordBreakTest.txt | 893 + icuSources/test/testdata/casing.txt | 34 +- icuSources/test/testdata/conversion.txt | 230 +- icuSources/test/testdata/csdetest.xml | 550 + ...cu26_testtypes.res => icu26_testtypes.res} | Bin ...26e_testtypes.res => icu26e_testtypes.res} | Bin icuSources/test/testdata/icuio.txt | 51 +- icuSources/test/testdata/idna_conf.txt | 1266 + icuSources/test/testdata/idna_rules.txt | 4 +- icuSources/test/testdata/iscii.bin | 38 +- icuSources/test/testdata/letest.xml | 1048 + icuSources/test/testdata/ra.xlf | 247 + icuSources/test/testdata/rbbitst.txt | 65 +- icuSources/test/testdata/regextst.txt | 28 +- icuSources/test/testdata/riwords.txt | 65886 ++++++++-------- icuSources/test/testdata/root.txt | 15 +- icuSources/test/testdata/sh.txt | 14 + icuSources/test/testdata/sh_YU.txt | 12 + icuSources/test/testdata/structLocale.txt | 6376 +- icuSources/test/testdata/te.txt | 64 +- icuSources/test/testdata/te_IN.txt | 5 +- icuSources/test/testdata/te_IN_REVISED.txt | 13 + icuSources/test/testdata/testaliases.txt | 25 +- icuSources/test/testdata/testdata.mak | 129 +- icuSources/test/testmap/Makefile.in | 9 +- icuSources/test/thaitest/space.txt | 644 +- icuSources/test/thaitest/thaitest.cpp | 79 +- icuSources/test/threadtest/threadtest.cpp | 4 +- icuSources/test/unalignedtest/readme | 27 - icuSources/test/unalignedtest/unaligned.c | 304 - icuSources/test/usetperf/timer.h | 62 - icuSources/test/usetperf/usetperf.cpp | 122 - icuSources/test/usetperf/usetperf.dsp | 164 - icuSources/test/utfperf/utfperf.c | 450 - icuSources/test/utfperf/utfperf.dsp | 158 - icuSources/tools/Makefile.in | 12 +- icuSources/tools/cpysearch/cpyscan.pl | 5 +- icuSources/tools/cpysearch/cpysearch.pl | 6 +- icuSources/tools/cpysearch/cpyskip.txt | 270 +- icuSources/tools/cpysearch/readme.txt | 10 +- icuSources/tools/ctestfw/Makefile.in | 47 +- icuSources/tools/ctestfw/ctest.c | 16 +- icuSources/tools/ctestfw/ctestfw.dsp | 199 - icuSources/tools/ctestfw/ctestfw.vcproj | 38 +- icuSources/tools/ctestfw/datamap.cpp | 10 +- icuSources/tools/ctestfw/testdata.cpp | 12 +- icuSources/tools/ctestfw/tstdtmod.cpp | 8 +- icuSources/tools/ctestfw/unicode/datamap.h | 5 +- icuSources/tools/ctestfw/unicode/testdata.h | 4 +- icuSources/tools/ctestfw/unicode/testlog.h | 6 +- icuSources/tools/ctestfw/unicode/testtype.h | 9 +- icuSources/tools/ctestfw/unicode/tstdtmod.h | 4 +- .../{toolutil => ctestfw/unicode}/uperf.h | 20 +- .../{toolutil => ctestfw/unicode}/utimer.h | 108 +- .../tools/{toolutil => ctestfw}/uperf.cpp | 22 +- icuSources/tools/dumpce/dumpce.cpp | 6 +- icuSources/tools/genbidi/Makefile.in | 94 + icuSources/tools/genbidi/genbidi.c | 634 + icuSources/tools/genbidi/genbidi.h | 47 + icuSources/tools/genbidi/genbidi.vcproj | 168 + icuSources/tools/genbidi/store.c | 469 + icuSources/tools/genbrk/Makefile.in | 40 +- icuSources/tools/genbrk/genbrk.1.in | 112 + icuSources/tools/genbrk/genbrk.cpp | 43 +- icuSources/tools/genbrk/genbrk.dsp | 200 - icuSources/tools/genbrk/genbrk.vcproj | 13 +- icuSources/tools/gencase/Makefile.in | 48 +- icuSources/tools/gencase/gencase.8.in | 136 - icuSources/tools/gencase/gencase.c | 32 +- icuSources/tools/gencase/gencase.dsp | 194 - icuSources/tools/gencase/gencase.h | 42 +- icuSources/tools/gencase/gencase.vcproj | 13 +- icuSources/tools/gencase/store.c | 633 +- icuSources/tools/genccode/Makefile.in | 40 +- icuSources/tools/genccode/genccode.c | 13 +- icuSources/tools/genccode/genccode.dsp | 197 - icuSources/tools/genccode/genccode.vcproj | 14 +- icuSources/tools/gencmn/Makefile.in | 51 +- icuSources/tools/gencmn/decmn.8.in | 68 - icuSources/tools/gencmn/decmn.c | 265 - icuSources/tools/gencmn/decmn.dsp | 197 - icuSources/tools/gencmn/gencmn.c | 90 +- icuSources/tools/gencmn/gencmn.dsp | 198 - icuSources/tools/gencmn/gencmn.vcproj | 13 +- icuSources/tools/gencnval/Makefile.in | 42 +- icuSources/tools/gencnval/gencnval.c | 93 +- icuSources/tools/gencnval/gencnval.dsp | 198 - icuSources/tools/gencnval/gencnval.vcproj | 13 +- icuSources/tools/genctd/Makefile.in | 95 + icuSources/tools/genctd/genctd.1.in | 111 + icuSources/tools/genctd/genctd.cpp | 393 + .../decmn.vcproj => genctd/genctd.vcproj} | 58 +- icuSources/tools/gendraft/DeprecatedApi.txt | 225 - icuSources/tools/gendraft/DraftApi.txt | 372 - icuSources/tools/gendraft/ObsoleteApi.txt | 19 - icuSources/tools/gendraft/exclude.txt | 7 + icuSources/tools/gendraft/gendraft.pl | 172 - icuSources/tools/gendraft/genheaders.pl | 253 + icuSources/tools/gennames/Makefile.in | 54 +- icuSources/tools/gennames/gennames.8.in | 85 - icuSources/tools/gennames/gennames.c | 97 +- icuSources/tools/gennames/gennames.dsp | 198 - icuSources/tools/gennames/gennames.vcproj | 13 +- icuSources/tools/gennorm/Makefile.in | 49 +- icuSources/tools/gennorm/gennorm.8.in | 114 - icuSources/tools/gennorm/gennorm.c | 91 +- icuSources/tools/gennorm/gennorm.dsp | 206 - icuSources/tools/gennorm/gennorm.h | 30 +- icuSources/tools/gennorm/gennorm.vcproj | 13 +- icuSources/tools/gennorm/store.c | 335 +- icuSources/tools/genpname/Makefile.in | 37 +- .../genpname/SyntheticPropertyAliases.txt | 10 +- .../SyntheticPropertyValueAliases.txt | 62 + icuSources/tools/genpname/data.h | 3719 +- icuSources/tools/genpname/genpname.cpp | 5 +- icuSources/tools/genpname/genpname.dsp | 198 - icuSources/tools/genpname/genpname.vcproj | 13 +- icuSources/tools/genpname/gensvpa.pl | 161 + icuSources/tools/genpname/preparse.pl | 142 +- icuSources/tools/genprops/Makefile.in | 47 +- icuSources/tools/genprops/genprops.8.in | 126 - icuSources/tools/genprops/genprops.c | 493 +- icuSources/tools/genprops/genprops.dsp | 198 - icuSources/tools/genprops/genprops.h | 43 +- icuSources/tools/genprops/genprops.vcproj | 13 +- icuSources/tools/genprops/props2.c | 271 +- icuSources/tools/genprops/store.c | 857 +- icuSources/tools/genrb/Makefile.in | 36 +- icuSources/tools/genrb/derb.c | 65 +- icuSources/tools/genrb/derb.dsp | 206 - icuSources/tools/genrb/derb.vcproj | 13 +- icuSources/tools/genrb/gendtjar.pl | 287 +- icuSources/tools/genrb/genrb.c | 52 +- icuSources/tools/genrb/genrb.dsp | 274 - icuSources/tools/genrb/genrb.h | 4 +- icuSources/tools/genrb/genrb.vcproj | 26 +- icuSources/tools/genrb/genrbjar.pl | 358 - icuSources/tools/genrb/parse.c | 698 +- icuSources/tools/genrb/parse.h | 4 +- icuSources/tools/genrb/{util.c => rbutil.c} | 4 +- icuSources/tools/genrb/{util.h => rbutil.h} | 4 +- icuSources/tools/genrb/reslist.c | 24 +- icuSources/tools/genrb/reslist.h | 5 +- icuSources/tools/genrb/ustr.c | 3 +- icuSources/tools/genrb/wrtjava.c | 12 +- icuSources/tools/genrb/wrtxml.c | 253 +- icuSources/tools/genren/genren.pl | 4 +- icuSources/tools/gensprep/Makefile.in | 39 +- icuSources/tools/gensprep/gensprep.c | 19 +- icuSources/tools/gensprep/gensprep.dsp | 206 - icuSources/tools/gensprep/gensprep.h | 4 +- icuSources/tools/gensprep/gensprep.vcproj | 17 +- icuSources/tools/gensprep/store.c | 21 +- icuSources/tools/gentest/Makefile.in | 18 +- icuSources/tools/gentest/gentest.c | 7 +- icuSources/tools/gentest/gentest.dsp | 202 - icuSources/tools/gentest/gentest.vcproj | 13 +- icuSources/tools/genuca/Makefile.in | 40 +- icuSources/tools/genuca/genuca.cpp | 36 +- icuSources/tools/genuca/genuca.dsp | 204 - icuSources/tools/genuca/genuca.vcproj | 13 +- icuSources/tools/icupkg/Makefile.in | 96 + icuSources/tools/icupkg/icupkg.1.in | 204 + icuSources/tools/icupkg/icupkg.8.in | 204 + icuSources/tools/icupkg/icupkg.cpp | 579 + icuSources/tools/icupkg/icupkg.vcproj | 145 + icuSources/tools/icuswap/Makefile.in | 38 +- icuSources/tools/icuswap/icuswap.cpp | 221 +- icuSources/tools/icuswap/icuswap.dsp | 185 - icuSources/tools/icuswap/icuswap.vcproj | 30 +- icuSources/tools/makeconv/Makefile.in | 47 +- icuSources/tools/makeconv/gencnvex.c | 4 +- icuSources/tools/makeconv/genmbcs.c | 4 +- icuSources/tools/makeconv/genmbcs.h | 4 +- icuSources/tools/makeconv/makeconv.c | 92 +- icuSources/tools/makeconv/makeconv.dsp | 218 - icuSources/tools/makeconv/makeconv.h | 4 +- icuSources/tools/makeconv/makeconv.vcproj | 14 +- icuSources/tools/makeconv/misc/canonucm.c | 29 - icuSources/tools/makeconv/misc/rptp2ucm.c | 31 - icuSources/tools/makeconv/misc/ucmmerge.c | 26 - icuSources/tools/makeconv/misc/ucmstrip.c | 28 - icuSources/tools/makeconv/ucnvstat.c | 3 +- icuSources/tools/memcheck/ICUMemCheck.pl | 68 + icuSources/tools/pkgdata/Makefile.in | 38 +- icuSources/tools/pkgdata/cmnmode.c | 7 +- icuSources/tools/pkgdata/dllmode.c | 26 +- icuSources/tools/pkgdata/filemode.c | 224 +- icuSources/tools/pkgdata/make.c | 99 +- icuSources/tools/pkgdata/makefile.h | 4 +- icuSources/tools/pkgdata/pkgdata.c | 280 +- icuSources/tools/pkgdata/pkgdata.dsp | 226 - icuSources/tools/pkgdata/pkgdata.vcproj | 13 +- icuSources/tools/pkgdata/pkgtypes.c | 24 +- icuSources/tools/pkgdata/pkgtypes.h | 9 +- icuSources/tools/pkgdata/sttcmode.c | 9 +- icuSources/tools/pkgdata/winmode.c | 16 +- icuSources/tools/toolutil/Makefile.in | 32 +- .../{common => tools/toolutil}/filestrm.c | 9 +- .../{common => tools/toolutil}/filestrm.h | 9 +- icuSources/tools/toolutil/package.cpp | 1202 + icuSources/tools/toolutil/package.h | 159 + icuSources/tools/toolutil/pkg_imp.h | 35 + icuSources/tools/toolutil/pkgitems.cpp | 638 + icuSources/tools/toolutil/propsvec.c | 32 +- icuSources/tools/toolutil/propsvec.h | 29 +- icuSources/tools/toolutil/swapimpl.cpp | 643 + icuSources/tools/toolutil/swapimpl.h | 43 + icuSources/tools/toolutil/toolutil.c | 37 +- icuSources/tools/toolutil/toolutil.dsp | 246 - icuSources/tools/toolutil/toolutil.h | 10 +- icuSources/tools/toolutil/toolutil.vcproj | 78 +- icuSources/tools/toolutil/ucbuf.c | 102 +- icuSources/tools/toolutil/ucbuf.h | 9 +- icuSources/tools/toolutil/ucm.c | 6 +- icuSources/tools/toolutil/ucm.h | 7 +- icuSources/tools/toolutil/ucmpwrit.c | 164 - icuSources/tools/toolutil/ucmpwrit.h | 30 - icuSources/tools/toolutil/ucmstate.c | 6 +- icuSources/tools/toolutil/uoptions.h | 7 +- icuSources/tools/toolutil/uparse.c | 48 +- icuSources/tools/toolutil/writesrc.c | 190 + icuSources/tools/toolutil/writesrc.h | 70 + icuSources/tools/toolutil/xmlparser.cpp | 820 + icuSources/tools/toolutil/xmlparser.h | 245 + icuSources/tools/tzcode/Makefile.in | 88 + icuSources/tools/tzcode/asctime.c | 138 + icuSources/tools/tzcode/ialloc.c | 86 + icuSources/tools/tzcode/localtime.c | 2053 + icuSources/tools/tzcode/patch-icu-tzcode | 475 - icuSources/tools/tzcode/private.h | 368 + icuSources/tools/tzcode/readme.txt | 92 +- icuSources/tools/tzcode/scheck.c | 63 + icuSources/tools/tzcode/tz2icu.cpp | 7 +- icuSources/tools/tzcode/tzfile.h | 180 + icuSources/tools/tzcode/tzselect.ksh | 308 + icuSources/tools/tzcode/zic.c | 2948 + license.html | 2 +- makefile | 375 +- minimalpatchconfig.txt | 11 + patchconfig.txt | 11 + windowspatchconfig.txt | 20 + 2226 files changed, 372153 insertions(+), 205919 deletions(-) delete mode 100644 icuSources/allinone/all/all.dsp delete mode 100644 icuSources/allinone/allinone.dsw create mode 100644 icuSources/common/Makefile.local create mode 100644 icuSources/common/aaplbfct.cpp create mode 100644 icuSources/common/aaplbfct.h delete mode 100644 icuSources/common/brkdict.cpp delete mode 100644 icuSources/common/brkdict.h create mode 100644 icuSources/common/brkeng.cpp create mode 100644 icuSources/common/brkeng.h delete mode 100644 icuSources/common/common.dsp delete mode 100644 icuSources/common/dbbi.cpp delete mode 100644 icuSources/common/dbbi_tbl.cpp delete mode 100644 icuSources/common/dbbi_tbl.h create mode 100644 icuSources/common/dictbe.cpp create mode 100644 icuSources/common/dictbe.h delete mode 100644 icuSources/common/iculserv.cpp delete mode 100644 icuSources/common/icunotif.cpp create mode 100644 icuSources/common/localsvc.cpp create mode 100644 icuSources/common/localsvc.h create mode 100644 icuSources/common/locutil.cpp create mode 100644 icuSources/common/locutil.h create mode 100644 icuSources/common/rbtok.cpp create mode 100644 icuSources/common/rbtok.h rename icuSources/common/{icuserv.cpp => serv.cpp} (99%) rename icuSources/common/{icuserv.h => serv.h} (98%) create mode 100644 icuSources/common/servlk.cpp create mode 100644 icuSources/common/servlkf.cpp rename icuSources/common/{iculserv.h => servloc.h} (92%) create mode 100644 icuSources/common/servls.cpp create mode 100644 icuSources/common/servnotf.cpp rename icuSources/common/{icunotif.h => servnotf.h} (100%) create mode 100644 icuSources/common/servrbf.cpp create mode 100644 icuSources/common/servslkf.cpp create mode 100644 icuSources/common/triedict.cpp create mode 100644 icuSources/common/triedict.h create mode 100644 icuSources/common/ubidi_props.c create mode 100644 icuSources/common/ubidi_props.h create mode 100644 icuSources/common/ubidi_props_data.c create mode 100644 icuSources/common/ubrkimpl.h create mode 100644 icuSources/common/ucase_props_data.c create mode 100644 icuSources/common/ucasemap.c create mode 100644 icuSources/common/uchar_props_data.c delete mode 100644 icuSources/common/ucmp8.c delete mode 100644 icuSources/common/ucmp8.h create mode 100644 icuSources/common/umath.c create mode 100644 icuSources/common/unicode/ppalmos.h create mode 100644 icuSources/common/unicode/ucasemap.h create mode 100644 icuSources/common/unicode/uintrnal.h create mode 100644 icuSources/common/unicode/urbtok.h create mode 100644 icuSources/common/unicode/usystem.h create mode 100644 icuSources/common/unicode/utext.h create mode 100644 icuSources/common/unorm_props_data.c create mode 100644 icuSources/common/urbtok.cpp create mode 100644 icuSources/common/utext.cpp create mode 100644 icuSources/common/util_props.cpp create mode 100644 icuSources/common/wintz.c create mode 100644 icuSources/common/wintz.h delete mode 100644 icuSources/config/mh-ptx create mode 100644 icuSources/data/brkitr/brklocal.mk create mode 100644 icuSources/data/brkitr/en.txt create mode 100644 icuSources/data/brkitr/en_US.txt create mode 100644 icuSources/data/brkitr/en_US_POSIX.txt create mode 100644 icuSources/data/brkitr/ja.txt delete mode 100644 icuSources/data/brkitr/line_th.txt create mode 100644 icuSources/data/brkitr/root.txt delete mode 100644 icuSources/data/brkitr/thaidict.brk create mode 100644 icuSources/data/brkitr/thaidict.txt delete mode 100644 icuSources/data/brkitr/word_th.txt create mode 100644 icuSources/data/build.xml create mode 100644 icuSources/data/cldr-icu-readme.txt create mode 100644 icuSources/data/coll/as.txt rename icuSources/data/coll/{ar_IN.txt => as_IN.txt} (71%) create mode 100644 icuSources/data/coll/bn.txt create mode 100644 icuSources/data/coll/de_.txt create mode 100644 icuSources/data/coll/es_.txt create mode 100644 icuSources/data/coll/hi_.txt create mode 100644 icuSources/data/coll/in.txt create mode 100644 icuSources/data/coll/in_ID.txt create mode 100644 icuSources/data/coll/iw.txt create mode 100644 icuSources/data/coll/iw_IL.txt create mode 100644 icuSources/data/coll/kok.txt create mode 100644 icuSources/data/coll/sh_BA.txt create mode 100644 icuSources/data/coll/sr_BA.txt create mode 100644 icuSources/data/coll/sr_Cyrl.txt create mode 100644 icuSources/data/coll/sr_Cyrl_BA.txt create mode 100644 icuSources/data/coll/sr_Cyrl_YU.txt create mode 100644 icuSources/data/coll/zh_.txt create mode 100644 icuSources/data/icu-config.xml create mode 100644 icuSources/data/locales/as.txt create mode 100644 icuSources/data/locales/as_IN.txt create mode 100644 icuSources/data/locales/az.txt create mode 100644 icuSources/data/locales/az_AZ.txt create mode 100644 icuSources/data/locales/az_Cyrl.txt create mode 100644 icuSources/data/locales/az_Cyrl_AZ.txt create mode 100644 icuSources/data/locales/az_Latn.txt create mode 100644 icuSources/data/locales/az_Latn_AZ.txt create mode 100644 icuSources/data/locales/en_RH.txt create mode 100644 icuSources/data/locales/sh_CS.txt create mode 100644 icuSources/data/locales/sr_CS.txt create mode 100644 icuSources/data/locales/sr_Cyrl_CS.txt create mode 100644 icuSources/data/locales/sr_Latn_CS.txt create mode 100644 icuSources/data/locales/ur.txt create mode 100644 icuSources/data/locales/ur_IN.txt create mode 100644 icuSources/data/locales/ur_PK.txt create mode 100644 icuSources/data/locales/uz.txt create mode 100644 icuSources/data/locales/uz_Cyrl.txt create mode 100644 icuSources/data/locales/uz_Cyrl_UZ.txt create mode 100644 icuSources/data/locales/uz_Latn.txt create mode 100644 icuSources/data/locales/uz_Latn_UZ.txt create mode 100644 icuSources/data/locales/uz_UZ.txt delete mode 100644 icuSources/data/makedata.dsp delete mode 100644 icuSources/data/mappings/ibm-1381_P110-1999.ucm create mode 100644 icuSources/data/mappings/ibm-4517_P100-2005.ucm rename icuSources/data/mappings/{ibm-1277_P100-1995.ucm => ibm-9005_X100-2005.ucm} (71%) create mode 100644 icuSources/data/mappings/ibm-9067_X100-2005.ucm create mode 100644 icuSources/data/mappings/ibm-9448_X100-2005.ucm create mode 100644 icuSources/data/mappings/iso-8859_11-2001.ucm create mode 100644 icuSources/data/mappings/iso-8859_14-1998.ucm create mode 100644 icuSources/data/mappings/macos-6_2-10.4.ucm create mode 100644 icuSources/data/misc/supplementalData.txt create mode 100644 icuSources/data/rbnf/rbnflocal.mk create mode 100644 icuSources/data/translit/Bengali_Devanagari.txt create mode 100644 icuSources/data/translit/Bengali_Gujarati.txt create mode 100644 icuSources/data/translit/Bengali_Gurmukhi.txt create mode 100644 icuSources/data/translit/Bengali_Kannada.txt create mode 100644 icuSources/data/translit/Bengali_Latin.txt create mode 100644 icuSources/data/translit/Bengali_Malayalam.txt create mode 100644 icuSources/data/translit/Bengali_Oriya.txt create mode 100644 icuSources/data/translit/Bengali_Tamil.txt create mode 100644 icuSources/data/translit/Bengali_Telugu.txt create mode 100644 icuSources/data/translit/CanadianAboriginal_Latin.txt create mode 100644 icuSources/data/translit/Devanagari_Bengali.txt create mode 100644 icuSources/data/translit/Devanagari_Gujarati.txt create mode 100644 icuSources/data/translit/Devanagari_Gurmukhi.txt create mode 100644 icuSources/data/translit/Devanagari_Kannada.txt create mode 100644 icuSources/data/translit/Devanagari_Latin.txt create mode 100644 icuSources/data/translit/Devanagari_Malayalam.txt create mode 100644 icuSources/data/translit/Devanagari_Oriya.txt create mode 100644 icuSources/data/translit/Devanagari_Tamil.txt create mode 100644 icuSources/data/translit/Devanagari_Telugu.txt create mode 100644 icuSources/data/translit/Georgian_Latin.txt create mode 100644 icuSources/data/translit/Gujarati_Bengali.txt create mode 100644 icuSources/data/translit/Gujarati_Devanagari.txt create mode 100644 icuSources/data/translit/Gujarati_Gurmukhi.txt create mode 100644 icuSources/data/translit/Gujarati_Kannada.txt create mode 100644 icuSources/data/translit/Gujarati_Latin.txt create mode 100644 icuSources/data/translit/Gujarati_Malayalam.txt create mode 100644 icuSources/data/translit/Gujarati_Oriya.txt create mode 100644 icuSources/data/translit/Gujarati_Tamil.txt create mode 100644 icuSources/data/translit/Gujarati_Telugu.txt create mode 100644 icuSources/data/translit/Gurmukhi_Bengali.txt create mode 100644 icuSources/data/translit/Gurmukhi_Devanagari.txt create mode 100644 icuSources/data/translit/Gurmukhi_Gujarati.txt create mode 100644 icuSources/data/translit/Gurmukhi_Kannada.txt create mode 100644 icuSources/data/translit/Gurmukhi_Latin.txt create mode 100644 icuSources/data/translit/Gurmukhi_Malayalam.txt create mode 100644 icuSources/data/translit/Gurmukhi_Oriya.txt create mode 100644 icuSources/data/translit/Gurmukhi_Tamil.txt create mode 100644 icuSources/data/translit/Gurmukhi_Telugu.txt create mode 100644 icuSources/data/translit/Hangul_Latin.txt create mode 100644 icuSources/data/translit/Jamo_Latin.txt create mode 100644 icuSources/data/translit/Kannada_Bengali.txt create mode 100644 icuSources/data/translit/Kannada_Devanagari.txt create mode 100644 icuSources/data/translit/Kannada_Gujarati.txt create mode 100644 icuSources/data/translit/Kannada_Gurmukhi.txt create mode 100644 icuSources/data/translit/Kannada_Latin.txt create mode 100644 icuSources/data/translit/Kannada_Malayalam.txt create mode 100644 icuSources/data/translit/Kannada_Oriya.txt create mode 100644 icuSources/data/translit/Kannada_Tamil.txt create mode 100644 icuSources/data/translit/Kannada_Telugu.txt create mode 100644 icuSources/data/translit/Latin_Armenian.txt create mode 100644 icuSources/data/translit/Latin_Bengali.txt create mode 100644 icuSources/data/translit/Latin_ConjoiningJamo.txt create mode 100644 icuSources/data/translit/Latin_Devanagari.txt create mode 100644 icuSources/data/translit/Latin_Ethiopic.txt create mode 100644 icuSources/data/translit/Latin_Gujarati.txt create mode 100644 icuSources/data/translit/Latin_Gurmukhi.txt create mode 100644 icuSources/data/translit/Latin_Hangul.txt create mode 100644 icuSources/data/translit/Latin_Kannada.txt create mode 100644 icuSources/data/translit/Latin_Malayalam.txt create mode 100644 icuSources/data/translit/Latin_Oriya.txt create mode 100644 icuSources/data/translit/Latin_Tamil.txt create mode 100644 icuSources/data/translit/Latin_Telugu.txt create mode 100644 icuSources/data/translit/Latin_Thai.txt create mode 100644 icuSources/data/translit/Malayalam_Bengali.txt create mode 100644 icuSources/data/translit/Malayalam_Devanagari.txt create mode 100644 icuSources/data/translit/Malayalam_Gujarati.txt create mode 100644 icuSources/data/translit/Malayalam_Gurmukhi.txt create mode 100644 icuSources/data/translit/Malayalam_Kannada.txt create mode 100644 icuSources/data/translit/Malayalam_Latin.txt create mode 100644 icuSources/data/translit/Malayalam_Oriya.txt create mode 100644 icuSources/data/translit/Malayalam_Tamil.txt create mode 100644 icuSources/data/translit/Malayalam_Telugu.txt create mode 100644 icuSources/data/translit/Oriya_Bengali.txt create mode 100644 icuSources/data/translit/Oriya_Devanagari.txt create mode 100644 icuSources/data/translit/Oriya_Gujarati.txt create mode 100644 icuSources/data/translit/Oriya_Gurmukhi.txt create mode 100644 icuSources/data/translit/Oriya_Kannada.txt create mode 100644 icuSources/data/translit/Oriya_Latin.txt create mode 100644 icuSources/data/translit/Oriya_Malayalam.txt create mode 100644 icuSources/data/translit/Oriya_Tamil.txt create mode 100644 icuSources/data/translit/Oriya_Telugu.txt create mode 100644 icuSources/data/translit/Pinyin_NumericPinyin.txt create mode 100644 icuSources/data/translit/Simplified_Traditional.txt create mode 100644 icuSources/data/translit/Spacedhan_Han.txt create mode 100644 icuSources/data/translit/Syriac_Latin.txt create mode 100644 icuSources/data/translit/Tamil_Bengali.txt create mode 100644 icuSources/data/translit/Tamil_Devanagari.txt create mode 100644 icuSources/data/translit/Tamil_Gujarati.txt create mode 100644 icuSources/data/translit/Tamil_Gurmukhi.txt create mode 100644 icuSources/data/translit/Tamil_Kannada.txt create mode 100644 icuSources/data/translit/Tamil_Latin.txt create mode 100644 icuSources/data/translit/Tamil_Malayalam.txt create mode 100644 icuSources/data/translit/Tamil_Oriya.txt create mode 100644 icuSources/data/translit/Tamil_Telugu.txt create mode 100644 icuSources/data/translit/Telugu_Bengali.txt create mode 100644 icuSources/data/translit/Telugu_Devanagari.txt create mode 100644 icuSources/data/translit/Telugu_Gujarati.txt create mode 100644 icuSources/data/translit/Telugu_Gurmukhi.txt create mode 100644 icuSources/data/translit/Telugu_Kannada.txt create mode 100644 icuSources/data/translit/Telugu_Latin.txt create mode 100644 icuSources/data/translit/Telugu_Malayalam.txt create mode 100644 icuSources/data/translit/Telugu_Oriya.txt create mode 100644 icuSources/data/translit/Telugu_Tamil.txt create mode 100644 icuSources/data/translit/Thaana_Latin.txt create mode 100644 icuSources/data/translit/Thai_Latin.txt delete mode 100644 icuSources/data/translit/Tone_Digit.txt create mode 100644 icuSources/data/unidata/ApplePUApatch.txt create mode 100644 icuSources/data/unidata/GraphemeBreakProperty.txt create mode 100644 icuSources/data/unidata/SentenceBreakProperty.txt create mode 100644 icuSources/data/unidata/WordBreakProperty.txt create mode 100644 icuSources/data/unidata/base_unidata/DerivedBidiClass.txt create mode 100644 icuSources/data/unidata/base_unidata/DerivedCoreProperties.txt create mode 100644 icuSources/data/unidata/base_unidata/DerivedNumericValues.txt create mode 100644 icuSources/data/unidata/base_unidata/EastAsianWidth.txt create mode 100644 icuSources/data/unidata/base_unidata/GraphemeBreakProperty.txt create mode 100644 icuSources/data/unidata/base_unidata/LineBreak.txt create mode 100644 icuSources/data/unidata/base_unidata/Scripts.txt create mode 100644 icuSources/data/unidata/base_unidata/UnicodeData.txt create mode 100644 icuSources/data/xml/brkitr/en.xml create mode 100644 icuSources/data/xml/brkitr/en_US.xml create mode 100644 icuSources/data/xml/brkitr/en_US_POSIX.xml create mode 100644 icuSources/data/xml/brkitr/ja.xml create mode 100644 icuSources/data/xml/brkitr/root.xml create mode 100644 icuSources/data/xml/collation/ar.xml create mode 100644 icuSources/data/xml/collation/be.xml create mode 100644 icuSources/data/xml/collation/bg.xml create mode 100644 icuSources/data/xml/collation/ca.xml create mode 100644 icuSources/data/xml/collation/cs.xml create mode 100644 icuSources/data/xml/collation/da.xml create mode 100644 icuSources/data/xml/collation/de.xml create mode 100644 icuSources/data/xml/collation/dz.xml create mode 100644 icuSources/data/xml/collation/el.xml create mode 100644 icuSources/data/xml/collation/en.xml create mode 100644 icuSources/data/xml/collation/en_BE.xml create mode 100644 icuSources/data/xml/collation/eo.xml create mode 100644 icuSources/data/xml/collation/es.xml create mode 100644 icuSources/data/xml/collation/et.xml create mode 100644 icuSources/data/xml/collation/fa.xml create mode 100644 icuSources/data/xml/collation/fa_AF.xml create mode 100644 icuSources/data/xml/collation/fi.xml create mode 100644 icuSources/data/xml/collation/fo.xml create mode 100644 icuSources/data/xml/collation/fr.xml create mode 100644 icuSources/data/xml/collation/gu.xml create mode 100644 icuSources/data/xml/collation/he.xml create mode 100644 icuSources/data/xml/collation/hi.xml create mode 100644 icuSources/data/xml/collation/hr.xml create mode 100644 icuSources/data/xml/collation/hu.xml create mode 100644 icuSources/data/xml/collation/is.xml create mode 100644 icuSources/data/xml/collation/it.xml create mode 100644 icuSources/data/xml/collation/ja.xml create mode 100644 icuSources/data/xml/collation/kk.xml create mode 100644 icuSources/data/xml/collation/kl.xml create mode 100644 icuSources/data/xml/collation/kn.xml create mode 100644 icuSources/data/xml/collation/ko.xml create mode 100644 icuSources/data/xml/collation/lt.xml create mode 100644 icuSources/data/xml/collation/lv.xml create mode 100644 icuSources/data/xml/collation/mk.xml create mode 100644 icuSources/data/xml/collation/ml.xml create mode 100644 icuSources/data/xml/collation/mr.xml create mode 100644 icuSources/data/xml/collation/mt.xml create mode 100644 icuSources/data/xml/collation/nb.xml create mode 100644 icuSources/data/xml/collation/nn.xml create mode 100644 icuSources/data/xml/collation/om.xml create mode 100644 icuSources/data/xml/collation/or.xml create mode 100644 icuSources/data/xml/collation/pa.xml create mode 100644 icuSources/data/xml/collation/pl.xml create mode 100644 icuSources/data/xml/collation/ps.xml create mode 100644 icuSources/data/xml/collation/ro.xml create mode 100644 icuSources/data/xml/collation/root.xml create mode 100644 icuSources/data/xml/collation/ru.xml create mode 100644 icuSources/data/xml/collation/sh.xml create mode 100644 icuSources/data/xml/collation/sk.xml create mode 100644 icuSources/data/xml/collation/sl.xml create mode 100644 icuSources/data/xml/collation/sq.xml create mode 100644 icuSources/data/xml/collation/sr.xml create mode 100644 icuSources/data/xml/collation/sv.xml create mode 100644 icuSources/data/xml/collation/ta.xml create mode 100644 icuSources/data/xml/collation/te.xml create mode 100644 icuSources/data/xml/collation/th.xml create mode 100644 icuSources/data/xml/collation/tr.xml create mode 100644 icuSources/data/xml/collation/uk.xml create mode 100644 icuSources/data/xml/collation/vi.xml create mode 100644 icuSources/data/xml/collation/zh.xml create mode 100644 icuSources/data/xml/collation/zh_HK.xml create mode 100644 icuSources/data/xml/collation/zh_Hant.xml create mode 100644 icuSources/data/xml/collation/zh_MO.xml create mode 100644 icuSources/data/xml/collation/zh_TW.xml create mode 100644 icuSources/data/xml/collation/zh_TW_STROKE.xml create mode 100644 icuSources/data/xml/experimental/aa.txt create mode 100644 icuSources/data/xml/experimental/aa_DJ.txt create mode 100644 icuSources/data/xml/experimental/aa_ER.txt create mode 100644 icuSources/data/xml/experimental/aa_ER_SAAHO.txt create mode 100644 icuSources/data/xml/experimental/aa_ET.txt create mode 100644 icuSources/data/xml/experimental/bs.txt create mode 100644 icuSources/data/xml/experimental/bs_BA.txt create mode 100644 icuSources/data/xml/experimental/byn.txt create mode 100644 icuSources/data/xml/experimental/byn_ER.txt create mode 100644 icuSources/data/xml/experimental/de_LI.txt create mode 100644 icuSources/data/xml/experimental/dv.txt create mode 100644 icuSources/data/xml/experimental/dv_MV.txt create mode 100644 icuSources/data/xml/experimental/dz.txt create mode 100644 icuSources/data/xml/experimental/dz_BT.txt create mode 100644 icuSources/data/xml/experimental/el_CY.txt create mode 100644 icuSources/data/xml/experimental/en_AS.txt create mode 100644 icuSources/data/xml/experimental/en_BZ.txt create mode 100644 icuSources/data/xml/experimental/en_GU.txt create mode 100644 icuSources/data/xml/experimental/en_JM.txt create mode 100644 icuSources/data/xml/experimental/en_MH.txt create mode 100644 icuSources/data/xml/experimental/en_MP.txt create mode 100644 icuSources/data/xml/experimental/en_TT.txt create mode 100644 icuSources/data/xml/experimental/en_UM.txt create mode 100644 icuSources/data/xml/experimental/fr_MC.txt create mode 100644 icuSources/data/xml/experimental/gez.txt create mode 100644 icuSources/data/xml/experimental/gez_ER.txt create mode 100644 icuSources/data/xml/experimental/gez_ET.txt create mode 100644 icuSources/data/xml/experimental/haw.txt create mode 100644 icuSources/data/xml/experimental/haw_US.txt create mode 100644 icuSources/data/xml/experimental/iu.txt create mode 100644 icuSources/data/xml/experimental/ka.txt create mode 100644 icuSources/data/xml/experimental/ka_GE.txt create mode 100644 icuSources/data/xml/experimental/km.txt create mode 100644 icuSources/data/xml/experimental/km_KH.txt create mode 100644 icuSources/data/xml/experimental/ky.txt create mode 100644 icuSources/data/xml/experimental/ky_KG.txt create mode 100644 icuSources/data/xml/experimental/lo.txt create mode 100644 icuSources/data/xml/experimental/lo_LA.txt create mode 100644 icuSources/data/xml/experimental/mn.txt create mode 100644 icuSources/data/xml/experimental/mn_MN.txt create mode 100644 icuSources/data/xml/experimental/sa.txt rename icuSources/data/{locales/ar_IN.txt => xml/experimental/sa_IN.txt} (64%) create mode 100644 icuSources/data/xml/experimental/sh_BA.txt create mode 100644 icuSources/data/xml/experimental/sid.txt create mode 100644 icuSources/data/xml/experimental/sid_ET.txt create mode 100644 icuSources/data/xml/experimental/sr_BA.txt create mode 100644 icuSources/data/xml/experimental/sr_Cyrl_BA.txt create mode 100644 icuSources/data/xml/experimental/sr_Latn_BA.txt create mode 100644 icuSources/data/xml/experimental/syr.txt create mode 100644 icuSources/data/xml/experimental/syr_SY.txt create mode 100644 icuSources/data/xml/experimental/tig.txt create mode 100644 icuSources/data/xml/experimental/tig_ER.txt create mode 100644 icuSources/data/xml/experimental/tt.txt create mode 100644 icuSources/data/xml/experimental/tt_RU.txt create mode 100644 icuSources/data/xml/experimental/uz_AF.txt create mode 100644 icuSources/data/xml/experimental/uz_Arab.txt create mode 100644 icuSources/data/xml/experimental/uz_Arab_AF.txt create mode 100644 icuSources/data/xml/experimental/wal.txt create mode 100644 icuSources/data/xml/experimental/wal_ET.txt create mode 100644 icuSources/data/xml/main/aa.xml create mode 100644 icuSources/data/xml/main/af.xml create mode 100644 icuSources/data/xml/main/am.xml create mode 100644 icuSources/data/xml/main/ar.xml create mode 100644 icuSources/data/xml/main/as.xml create mode 100644 icuSources/data/xml/main/az.xml create mode 100644 icuSources/data/xml/main/az_AZ.xml create mode 100644 icuSources/data/xml/main/az_Cyrl.xml create mode 100644 icuSources/data/xml/main/az_Latn.xml create mode 100644 icuSources/data/xml/main/be.xml create mode 100644 icuSources/data/xml/main/bg.xml create mode 100644 icuSources/data/xml/main/bn.xml create mode 100644 icuSources/data/xml/main/bs.xml create mode 100644 icuSources/data/xml/main/byn.xml create mode 100644 icuSources/data/xml/main/ca.xml create mode 100644 icuSources/data/xml/main/cs.xml create mode 100644 icuSources/data/xml/main/cy.xml create mode 100644 icuSources/data/xml/main/da.xml create mode 100644 icuSources/data/xml/main/de.xml create mode 100644 icuSources/data/xml/main/dv.xml create mode 100644 icuSources/data/xml/main/dz.xml create mode 100644 icuSources/data/xml/main/el.xml create mode 100644 icuSources/data/xml/main/en.xml create mode 100644 icuSources/data/xml/main/en_US_POSIX.xml create mode 100644 icuSources/data/xml/main/eo.xml create mode 100644 icuSources/data/xml/main/es.xml create mode 100644 icuSources/data/xml/main/et.xml create mode 100644 icuSources/data/xml/main/eu.xml create mode 100644 icuSources/data/xml/main/fa.xml create mode 100644 icuSources/data/xml/main/fi.xml create mode 100644 icuSources/data/xml/main/fo.xml create mode 100644 icuSources/data/xml/main/fr.xml create mode 100644 icuSources/data/xml/main/ga.xml create mode 100644 icuSources/data/xml/main/gez.xml create mode 100644 icuSources/data/xml/main/gl.xml create mode 100644 icuSources/data/xml/main/gu.xml create mode 100644 icuSources/data/xml/main/gv.xml create mode 100644 icuSources/data/xml/main/haw.xml create mode 100644 icuSources/data/xml/main/he.xml create mode 100644 icuSources/data/xml/main/hi.xml create mode 100644 icuSources/data/xml/main/hr.xml create mode 100644 icuSources/data/xml/main/hu.xml create mode 100644 icuSources/data/xml/main/hy.xml create mode 100644 icuSources/data/xml/main/id.xml create mode 100644 icuSources/data/xml/main/is.xml create mode 100644 icuSources/data/xml/main/it.xml create mode 100644 icuSources/data/xml/main/iu.xml create mode 100644 icuSources/data/xml/main/iw.xml create mode 100644 icuSources/data/xml/main/ja.xml create mode 100644 icuSources/data/xml/main/ka.xml create mode 100644 icuSources/data/xml/main/kk.xml create mode 100644 icuSources/data/xml/main/kl.xml create mode 100644 icuSources/data/xml/main/km.xml create mode 100644 icuSources/data/xml/main/kn.xml create mode 100644 icuSources/data/xml/main/ko.xml create mode 100644 icuSources/data/xml/main/kok.xml create mode 100644 icuSources/data/xml/main/kw.xml create mode 100644 icuSources/data/xml/main/ky.xml create mode 100644 icuSources/data/xml/main/lo.xml create mode 100644 icuSources/data/xml/main/lt.xml create mode 100644 icuSources/data/xml/main/lv.xml create mode 100644 icuSources/data/xml/main/mk.xml create mode 100644 icuSources/data/xml/main/ml.xml create mode 100644 icuSources/data/xml/main/mn.xml create mode 100644 icuSources/data/xml/main/mr.xml create mode 100644 icuSources/data/xml/main/ms.xml create mode 100644 icuSources/data/xml/main/mt.xml create mode 100644 icuSources/data/xml/main/nb.xml create mode 100644 icuSources/data/xml/main/nl.xml create mode 100644 icuSources/data/xml/main/nn.xml create mode 100644 icuSources/data/xml/main/no.xml create mode 100644 icuSources/data/xml/main/om.xml create mode 100644 icuSources/data/xml/main/or.xml create mode 100644 icuSources/data/xml/main/pa.xml create mode 100644 icuSources/data/xml/main/pl.xml create mode 100644 icuSources/data/xml/main/ps.xml create mode 100644 icuSources/data/xml/main/pt.xml create mode 100644 icuSources/data/xml/main/ro.xml create mode 100644 icuSources/data/xml/main/root.xml create mode 100644 icuSources/data/xml/main/ru.xml create mode 100644 icuSources/data/xml/main/sa.xml create mode 100644 icuSources/data/xml/main/sh.xml create mode 100644 icuSources/data/xml/main/sid.xml create mode 100644 icuSources/data/xml/main/sk.xml create mode 100644 icuSources/data/xml/main/sl.xml create mode 100644 icuSources/data/xml/main/so.xml create mode 100644 icuSources/data/xml/main/sq.xml create mode 100644 icuSources/data/xml/main/sr.xml create mode 100644 icuSources/data/xml/main/sr_Cyrl.xml create mode 100644 icuSources/data/xml/main/sr_Latn.xml create mode 100644 icuSources/data/xml/main/sv.xml create mode 100644 icuSources/data/xml/main/sw.xml create mode 100644 icuSources/data/xml/main/syr.xml create mode 100644 icuSources/data/xml/main/ta.xml create mode 100644 icuSources/data/xml/main/te.xml create mode 100644 icuSources/data/xml/main/th.xml create mode 100644 icuSources/data/xml/main/ti.xml create mode 100644 icuSources/data/xml/main/tig.xml create mode 100644 icuSources/data/xml/main/tr.xml create mode 100644 icuSources/data/xml/main/tt.xml create mode 100644 icuSources/data/xml/main/uk.xml create mode 100644 icuSources/data/xml/main/ur.xml create mode 100644 icuSources/data/xml/main/ur_IN.xml create mode 100644 icuSources/data/xml/main/uz.xml create mode 100644 icuSources/data/xml/main/uz_Arab.xml create mode 100644 icuSources/data/xml/main/uz_Cyrl.xml create mode 100644 icuSources/data/xml/main/uz_Latn.xml create mode 100644 icuSources/data/xml/main/uz_UZ.xml create mode 100644 icuSources/data/xml/main/vi.xml create mode 100644 icuSources/data/xml/main/wal.xml create mode 100644 icuSources/data/xml/main/zh.xml create mode 100644 icuSources/data/xml/main/zh_Hans.xml create mode 100644 icuSources/data/xml/main/zh_Hant.xml delete mode 100644 icuSources/extra/uconv/uconv.dsp create mode 100644 icuSources/i18n/csdetect.cpp create mode 100644 icuSources/i18n/csdetect.h create mode 100644 icuSources/i18n/csmatch.cpp create mode 100644 icuSources/i18n/csmatch.h create mode 100644 icuSources/i18n/csr2022.cpp create mode 100644 icuSources/i18n/csr2022.h create mode 100644 icuSources/i18n/csrecog.cpp create mode 100644 icuSources/i18n/csrecog.h create mode 100644 icuSources/i18n/csrmbcs.cpp create mode 100644 icuSources/i18n/csrmbcs.h create mode 100644 icuSources/i18n/csrsbcs.cpp create mode 100644 icuSources/i18n/csrsbcs.h create mode 100644 icuSources/i18n/csrucode.cpp create mode 100644 icuSources/i18n/csrucode.h create mode 100644 icuSources/i18n/csrutf8.cpp create mode 100644 icuSources/i18n/csrutf8.h create mode 100644 icuSources/i18n/decimfmt.cpp.fixed create mode 100644 icuSources/i18n/fmtable_cnv.cpp delete mode 100644 icuSources/i18n/i18n.dsp create mode 100644 icuSources/i18n/inputext.cpp create mode 100644 icuSources/i18n/inputext.h create mode 100644 icuSources/i18n/ucol_res.cpp create mode 100644 icuSources/i18n/ucsdet.cpp create mode 100644 icuSources/i18n/unicode/ucsdet.h create mode 100644 icuSources/i18n/uregexc.cpp create mode 100644 icuSources/i18n/windtfmt.cpp create mode 100644 icuSources/i18n/windtfmt.h create mode 100644 icuSources/i18n/winnmfmt.cpp create mode 100644 icuSources/i18n/winnmfmt.h delete mode 100644 icuSources/io/io.dsp create mode 100644 icuSources/io/ucln_io.c create mode 100644 icuSources/io/ucln_io.h create mode 100644 icuSources/layout/CanonShaping.cpp create mode 100644 icuSources/layout/GlyphPositionAdjustments.cpp create mode 100644 icuSources/layout/HangulLayoutEngine.cpp create mode 100644 icuSources/layout/HangulLayoutEngine.h create mode 100644 icuSources/layout/KernTable.cpp create mode 100644 icuSources/layout/KernTable.h create mode 100644 icuSources/layout/KhmerLayoutEngine.cpp create mode 100644 icuSources/layout/KhmerLayoutEngine.h create mode 100644 icuSources/layout/KhmerReordering.cpp create mode 100644 icuSources/layout/KhmerReordering.h create mode 100644 icuSources/layout/MirroredCharData.cpp create mode 100644 icuSources/layout/ShapingTypeData.cpp create mode 100644 icuSources/layout/TibetanLayoutEngine.cpp create mode 100644 icuSources/layout/TibetanLayoutEngine.h create mode 100644 icuSources/layout/TibetanReordering.cpp create mode 100644 icuSources/layout/TibetanReordering.h delete mode 100644 icuSources/layout/layout.dsp delete mode 100644 icuSources/layout/loengine.cpp delete mode 100644 icuSources/layout/unicode/loengine.h delete mode 100644 icuSources/layoutex/layoutex.dsp delete mode 100644 icuSources/samples/all/all.dsp delete mode 100644 icuSources/samples/all/all.dsw delete mode 100644 icuSources/samples/break/break.dsp delete mode 100644 icuSources/samples/break/break.dsw delete mode 100644 icuSources/samples/cal/cal.dsp delete mode 100644 icuSources/samples/cal/cal.dsw delete mode 100644 icuSources/samples/case/case.dsp delete mode 100644 icuSources/samples/case/case.dsw create mode 100644 icuSources/samples/citer/Makefile create mode 100644 icuSources/samples/citer/citer.vcproj delete mode 100644 icuSources/samples/coll/coll.dsp delete mode 100644 icuSources/samples/coll/coll.dsw create mode 100644 icuSources/samples/csdet/Makefile.in create mode 100644 icuSources/samples/csdet/csdet.c create mode 100644 icuSources/samples/csdet/csdet.sln create mode 100644 icuSources/samples/csdet/csdet.vcproj delete mode 100644 icuSources/samples/date/date.dsp delete mode 100644 icuSources/samples/date/date.dsw delete mode 100644 icuSources/samples/datefmt/datefmt.dsp delete mode 100644 icuSources/samples/datefmt/datefmt.dsw delete mode 100644 icuSources/samples/layout/layout.dsp delete mode 100644 icuSources/samples/layout/layout.dsw delete mode 100644 icuSources/samples/legacy/legacy.dsp delete mode 100644 icuSources/samples/legacy/legacy.dsw delete mode 100644 icuSources/samples/msgfmt/msgfmt.dsp delete mode 100644 icuSources/samples/msgfmt/msgfmt.dsw delete mode 100644 icuSources/samples/numfmt/numfmt.dsp delete mode 100644 icuSources/samples/numfmt/numfmt.dsw delete mode 100644 icuSources/samples/props/props.dsp delete mode 100644 icuSources/samples/props/props.dsw delete mode 100644 icuSources/samples/strsrch/strsrch.dsp delete mode 100644 icuSources/samples/strsrch/strsrch.dsw delete mode 100644 icuSources/samples/translit/translit.dsp delete mode 100644 icuSources/samples/translit/translit.dsw delete mode 100644 icuSources/samples/uciter8/uciter8.dsp delete mode 100644 icuSources/samples/uciter8/uciter8.dsw delete mode 100644 icuSources/samples/ucnv/ucnv.dsp delete mode 100644 icuSources/samples/ucnv/ucnv.dsw delete mode 100644 icuSources/samples/udata/reader.dsp delete mode 100644 icuSources/samples/udata/udata.dsw delete mode 100644 icuSources/samples/udata/writer.dsp delete mode 100644 icuSources/samples/ufortune/ufortune.dsp delete mode 100644 icuSources/samples/ufortune/ufortune.dsw delete mode 100644 icuSources/samples/ugrep/ugrep.dsp delete mode 100644 icuSources/samples/ugrep/ugrep.dsw delete mode 100644 icuSources/samples/uresb/resources.dsp delete mode 100644 icuSources/samples/uresb/uresb.dsp delete mode 100644 icuSources/samples/uresb/uresb.dsw delete mode 100644 icuSources/samples/ustring/ustring.dsp delete mode 100644 icuSources/samples/ustring/ustring.dsw delete mode 100644 icuSources/samples/xml2txt/readme.txt delete mode 100644 icuSources/stubdata/stubdata.dsp delete mode 100644 icuSources/test/cintltst/cdantst.c delete mode 100644 icuSources/test/cintltst/cdantst.h delete mode 100644 icuSources/test/cintltst/cintltst.dsp delete mode 100644 icuSources/test/cintltst/cregrtst.c delete mode 100644 icuSources/test/cintltst/cregrtst.h delete mode 100644 icuSources/test/cintltst/cucdtst.h create mode 100644 icuSources/test/cintltst/currtest.c delete mode 100644 icuSources/test/cintltst/ucmptst.c create mode 100644 icuSources/test/cintltst/ucsdetst.c create mode 100644 icuSources/test/cintltst/utexttst.c delete mode 100644 icuSources/test/collperf/collperf.cpp delete mode 100644 icuSources/test/collperf/collperf.dsp delete mode 100644 icuSources/test/collperf/readme.html create mode 100644 icuSources/test/intltest/aliastst.cpp create mode 100644 icuSources/test/intltest/aliastst.h create mode 100644 icuSources/test/intltest/csdetest.cpp create mode 100644 icuSources/test/intltest/csdetest.h delete mode 100644 icuSources/test/intltest/dacoll.cpp delete mode 100644 icuSources/test/intltest/dacoll.h create mode 100644 icuSources/test/intltest/idnaconf.cpp create mode 100644 icuSources/test/intltest/idnaconf.h delete mode 100644 icuSources/test/intltest/intltest.dsp create mode 100644 icuSources/test/intltest/rndmcoll.cpp create mode 100644 icuSources/test/intltest/rndmcoll.h create mode 100644 icuSources/test/intltest/utxttest.cpp create mode 100644 icuSources/test/intltest/utxttest.h create mode 100644 icuSources/test/intltest/uvectest.cpp create mode 100644 icuSources/test/intltest/uvectest.h create mode 100644 icuSources/test/intltest/wbnf.cpp create mode 100644 icuSources/test/intltest/wbnf.h create mode 100644 icuSources/test/intltest/windttst.cpp create mode 100644 icuSources/test/intltest/windttst.h create mode 100644 icuSources/test/intltest/winnmtst.cpp create mode 100644 icuSources/test/intltest/winnmtst.h create mode 100644 icuSources/test/intltest/winutil.cpp create mode 100644 icuSources/test/intltest/winutil.h delete mode 100644 icuSources/test/iotest/iotest.dsp create mode 100644 icuSources/test/iotest/stream.cpp create mode 100644 icuSources/test/iotest/trnstst.c create mode 100644 icuSources/test/letest/SimpleFontInstance.cpp create mode 100644 icuSources/test/letest/SimpleFontInstance.h delete mode 100644 icuSources/test/letest/gendata.dsp delete mode 100644 icuSources/test/letest/gendata.dsw create mode 100644 icuSources/test/letest/gendata.xml delete mode 100644 icuSources/test/letest/letest.dsp delete mode 100644 icuSources/test/letest/letest.dsw create mode 100644 icuSources/test/letest/letsutil.cpp create mode 100644 icuSources/test/letest/letsutil.h delete mode 100644 icuSources/test/perf/all/all.dsp delete mode 100644 icuSources/test/perf/charperf/charperf.dsp create mode 100644 icuSources/test/perf/charperf/charperf.vcproj create mode 100644 icuSources/test/perf/collperf/CollPerf.pl rename icuSources/test/{ => perf}/collperf/Makefile.in (70%) create mode 100644 icuSources/test/perf/collperf/collperf.cpp create mode 100644 icuSources/test/perf/collperf/collperf.vcproj delete mode 100644 icuSources/test/perf/convperf/convperf.dsp create mode 100644 icuSources/test/perf/convperf/convperf.vcproj delete mode 100644 icuSources/test/perf/normperf/normperf.dsp create mode 100644 icuSources/test/perf/normperf/normperf.vcproj delete mode 100644 icuSources/test/perf/perf.dsw create mode 100644 icuSources/test/perf/perf.sln create mode 100644 icuSources/test/perf/ubrkperf/ubrkperf.vcproj rename icuSources/test/{unalignedtest => perf/usetperf}/Makefile.in (69%) create mode 100644 icuSources/test/perf/usetperf/UsetPerf.pl rename icuSources/test/{ => perf}/usetperf/bitset.cpp (96%) rename icuSources/test/{ => perf}/usetperf/bitset.h (91%) create mode 100644 icuSources/test/perf/usetperf/usetperf.cpp create mode 100644 icuSources/test/perf/usetperf/usetperf.vcproj create mode 100644 icuSources/test/perf/ustrperf/Makefile.in create mode 100644 icuSources/test/perf/utfperf/Makefile.in create mode 100644 icuSources/test/perf/utfperf/UtfPerf.pl create mode 100644 icuSources/test/perf/utfperf/utfperf.cpp create mode 100644 icuSources/test/perf/utfperf/utfperf.vcproj create mode 100644 icuSources/test/testdata/GraphemeClusterBreakTest.txt create mode 100644 icuSources/test/testdata/SentenceBreakTest.txt create mode 100644 icuSources/test/testdata/WordBreakTest.txt create mode 100644 icuSources/test/testdata/csdetest.xml rename icuSources/test/testdata/{testdata_icu26_testtypes.res => icu26_testtypes.res} (100%) rename icuSources/test/testdata/{testdata_icu26e_testtypes.res => icu26e_testtypes.res} (100%) create mode 100644 icuSources/test/testdata/idna_conf.txt create mode 100644 icuSources/test/testdata/letest.xml create mode 100644 icuSources/test/testdata/ra.xlf create mode 100644 icuSources/test/testdata/sh.txt create mode 100644 icuSources/test/testdata/sh_YU.txt create mode 100644 icuSources/test/testdata/te_IN_REVISED.txt delete mode 100644 icuSources/test/unalignedtest/readme delete mode 100644 icuSources/test/unalignedtest/unaligned.c delete mode 100644 icuSources/test/usetperf/timer.h delete mode 100644 icuSources/test/usetperf/usetperf.cpp delete mode 100644 icuSources/test/usetperf/usetperf.dsp delete mode 100644 icuSources/test/utfperf/utfperf.c delete mode 100644 icuSources/test/utfperf/utfperf.dsp delete mode 100644 icuSources/tools/ctestfw/ctestfw.dsp rename icuSources/tools/{toolutil => ctestfw/unicode}/uperf.h (92%) rename icuSources/tools/{toolutil => ctestfw/unicode}/utimer.h (72%) rename icuSources/tools/{toolutil => ctestfw}/uperf.cpp (96%) create mode 100644 icuSources/tools/genbidi/Makefile.in create mode 100644 icuSources/tools/genbidi/genbidi.c create mode 100644 icuSources/tools/genbidi/genbidi.h create mode 100644 icuSources/tools/genbidi/genbidi.vcproj create mode 100644 icuSources/tools/genbidi/store.c create mode 100644 icuSources/tools/genbrk/genbrk.1.in delete mode 100644 icuSources/tools/genbrk/genbrk.dsp delete mode 100644 icuSources/tools/gencase/gencase.8.in delete mode 100644 icuSources/tools/gencase/gencase.dsp delete mode 100644 icuSources/tools/genccode/genccode.dsp delete mode 100644 icuSources/tools/gencmn/decmn.8.in delete mode 100644 icuSources/tools/gencmn/decmn.c delete mode 100644 icuSources/tools/gencmn/decmn.dsp delete mode 100644 icuSources/tools/gencmn/gencmn.dsp delete mode 100644 icuSources/tools/gencnval/gencnval.dsp create mode 100644 icuSources/tools/genctd/Makefile.in create mode 100644 icuSources/tools/genctd/genctd.1.in create mode 100644 icuSources/tools/genctd/genctd.cpp rename icuSources/tools/{gencmn/decmn.vcproj => genctd/genctd.vcproj} (70%) delete mode 100644 icuSources/tools/gendraft/DeprecatedApi.txt delete mode 100644 icuSources/tools/gendraft/DraftApi.txt delete mode 100644 icuSources/tools/gendraft/ObsoleteApi.txt create mode 100644 icuSources/tools/gendraft/exclude.txt delete mode 100644 icuSources/tools/gendraft/gendraft.pl create mode 100644 icuSources/tools/gendraft/genheaders.pl delete mode 100644 icuSources/tools/gennames/gennames.8.in delete mode 100644 icuSources/tools/gennames/gennames.dsp delete mode 100644 icuSources/tools/gennorm/gennorm.8.in delete mode 100644 icuSources/tools/gennorm/gennorm.dsp create mode 100644 icuSources/tools/genpname/SyntheticPropertyValueAliases.txt delete mode 100644 icuSources/tools/genpname/genpname.dsp create mode 100644 icuSources/tools/genpname/gensvpa.pl delete mode 100644 icuSources/tools/genprops/genprops.8.in delete mode 100644 icuSources/tools/genprops/genprops.dsp delete mode 100644 icuSources/tools/genrb/derb.dsp delete mode 100644 icuSources/tools/genrb/genrb.dsp delete mode 100644 icuSources/tools/genrb/genrbjar.pl rename icuSources/tools/genrb/{util.c => rbutil.c} (96%) rename icuSources/tools/genrb/{util.h => rbutil.h} (89%) delete mode 100644 icuSources/tools/gensprep/gensprep.dsp delete mode 100644 icuSources/tools/gentest/gentest.dsp delete mode 100644 icuSources/tools/genuca/genuca.dsp create mode 100644 icuSources/tools/icupkg/Makefile.in create mode 100644 icuSources/tools/icupkg/icupkg.1.in create mode 100644 icuSources/tools/icupkg/icupkg.8.in create mode 100644 icuSources/tools/icupkg/icupkg.cpp create mode 100644 icuSources/tools/icupkg/icupkg.vcproj delete mode 100644 icuSources/tools/icuswap/icuswap.dsp delete mode 100644 icuSources/tools/makeconv/makeconv.dsp delete mode 100644 icuSources/tools/makeconv/misc/canonucm.c delete mode 100644 icuSources/tools/makeconv/misc/rptp2ucm.c delete mode 100644 icuSources/tools/makeconv/misc/ucmmerge.c delete mode 100644 icuSources/tools/makeconv/misc/ucmstrip.c create mode 100644 icuSources/tools/memcheck/ICUMemCheck.pl delete mode 100644 icuSources/tools/pkgdata/pkgdata.dsp rename icuSources/{common => tools/toolutil}/filestrm.c (97%) rename icuSources/{common => tools/toolutil}/filestrm.h (96%) create mode 100644 icuSources/tools/toolutil/package.cpp create mode 100644 icuSources/tools/toolutil/package.h create mode 100644 icuSources/tools/toolutil/pkg_imp.h create mode 100644 icuSources/tools/toolutil/pkgitems.cpp create mode 100644 icuSources/tools/toolutil/swapimpl.cpp create mode 100644 icuSources/tools/toolutil/swapimpl.h delete mode 100644 icuSources/tools/toolutil/toolutil.dsp delete mode 100644 icuSources/tools/toolutil/ucmpwrit.c delete mode 100644 icuSources/tools/toolutil/ucmpwrit.h create mode 100644 icuSources/tools/toolutil/writesrc.c create mode 100644 icuSources/tools/toolutil/writesrc.h create mode 100644 icuSources/tools/toolutil/xmlparser.cpp create mode 100644 icuSources/tools/toolutil/xmlparser.h create mode 100644 icuSources/tools/tzcode/Makefile.in create mode 100644 icuSources/tools/tzcode/asctime.c create mode 100644 icuSources/tools/tzcode/ialloc.c create mode 100644 icuSources/tools/tzcode/localtime.c delete mode 100644 icuSources/tools/tzcode/patch-icu-tzcode create mode 100644 icuSources/tools/tzcode/private.h create mode 100644 icuSources/tools/tzcode/scheck.c create mode 100644 icuSources/tools/tzcode/tzfile.h create mode 100644 icuSources/tools/tzcode/tzselect.ksh create mode 100644 icuSources/tools/tzcode/zic.c create mode 100644 minimalpatchconfig.txt create mode 100644 patchconfig.txt create mode 100644 windowspatchconfig.txt diff --git a/ICU.plist b/ICU.plist index 63f315e9..ec4ededb 100644 --- a/ICU.plist +++ b/ICU.plist @@ -4,7 +4,7 @@ OpenSourceImportDate - 2004/11/24 + 2005/08/11 OpenSourceLicense other OpenSourceLicenseFile @@ -12,13 +12,13 @@ OpenSourceProject International Components for Unicode OpenSourceSHA1 - 23fa1feb893a562408e6f13fcf968a6177d8aa6e + 7485e594002bef61c28822c3c2bfe722f35fdf4b OpenSourceURL - ftp://www-126.ibm.com/pub/icu/3.2/icu-3.2.tgz + ftp://ftp.software.ibm.com/software/globalization/icu/3.4/icu-3.4.tgz OpenSourceVersion - 3.2 + 3.4 OpenSourceWebsiteURL - http://www.ibm.com/software/globalization/icu + http://icu.sourceforge.net/ diff --git a/icuSources/Doxyfile.in b/icuSources/Doxyfile.in index 73cb4526..17002092 100644 --- a/icuSources/Doxyfile.in +++ b/icuSources/Doxyfile.in @@ -1,7 +1,7 @@ # Doxyfile 1.3.7 # ******************************************************************** # * COPYRIGHT: -# * Copyright (c) 2004, International Business Machines Corporation +# * Copyright (c) 2004-2006, International Business Machines Corporation # * and others. All Rights Reserved. # ******************************************************************** @@ -29,11 +29,14 @@ DETAILS_AT_TOP = NO INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 8 -ALIASES = "draft=\par ICU_Draft:\n" \ - "stable=\par ICU_Stable:\n" \ - "deprecated=\par ICU_Deprecated:\n" \ - "obsolete=\par ICU_Obsolete:\n" \ - "internal=\par ICU_Internal:\n" +ALIASES = "memo=\par Note:\n" \ + "draft=\xrefitem draft \"Draft\" \"Draft List\" This API may be changed in the future versions and was introduced in \n" \ + "stable=\xrefitem stable \"Stable\" \"Stable List\" \n" \ + "deprecated=\xrefitem deprecated \"Deprecated\" \"Deprecated List\" \n" \ + "obsolete=\xrefitem obsolete \"Obsolete\" \"Obsolete List\" \n" \ + "system=\xrefitem system \"System\" \"System List\" \n Do not use unless you know what you are doing. \n" \ + "internal=\xrefitem internal \"Internal\" \"Internal List\" Do not use. This API is for interal use only. \n" + OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES @@ -76,10 +79,10 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = ./common/unicode/platform.h @srcdir@/common/unicode @srcdir@/i18n/unicode @srcdir@/io/unicode @srcdir@/layout/unicode +INPUT = ./common/unicode/platform.h @srcdir@/common/unicode @srcdir@/i18n/unicode @srcdir@/io/unicode @srcdir@/layout/LEFontInstance.h @srcdir@/layout/LEGlyphStorage.h @srcdir@/layout/LELanguages.h @srcdir@/layout/LEScripts.h @srcdir@/layout/LESwaps.h @srcdir@/layout/LETypes.h @srcdir@/layout/LayoutEngine.h @srcdir@/layoutex/layout FILE_PATTERNS = *.h RECURSIVE = NO -EXCLUDE = @srcdir@/common/unicode/urename.h +EXCLUDE = @srcdir@/common/unicode/urename.h @srcdir@/common/unicode/udraft.h @srcdir@/common/unicode/udeprctd.h @srcdir@/common/unicode/uobslete.h @srcdir@/common/unicode/ppalmos.h EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = config*.h EXAMPLE_PATH = @@ -169,7 +172,7 @@ GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO +GENERATE_PERLMOD = NO PERLMOD_LATEX = YES PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = @@ -177,19 +180,19 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = +PREDEFINED = U_EXPORT2 U_STABLE U_DRAFT U_INTERNAL U_SYSTEM U_DEPRECATED U_OBSOLETE EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = -GENERATE_TAGFILE = +GENERATE_TAGFILE = "@srcdir@/doc/html/icudocs.tag" ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl @@ -218,5 +221,4 @@ DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- -SEARCHENGINE = NO -CGI_NAME = search.cgi +SEARCHENGINE = YES diff --git a/icuSources/Makefile.in b/icuSources/Makefile.in index 95c52d77..1d957db2 100644 --- a/icuSources/Makefile.in +++ b/icuSources/Makefile.in @@ -1,6 +1,6 @@ #****************************************************************************** # -# Copyright (C) 1998-2004, International Business Machines +# Copyright (C) 1998-2006, International Business Machines # Corporation and others. All Rights Reserved. # #****************************************************************************** @@ -130,7 +130,7 @@ install-icu: $(INSTALLED_BUILT_FILES) $(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc cd $(DESTDIR)$(pkglibdir)/..; \ $(RM) current && ln -s $(VERSION) current; \ - $(RM) Makefile.inc && ln -s current/Makefile.inc . + $(RM) Makefile.inc && ln -s current/Makefile.inc Makefile.inc ifeq ($(DOXYGEN),) install-doc: @@ -175,11 +175,13 @@ $(top_builddir)/config/Makefile.inc: $(srcdir)/config/Makefile.inc.in $(top_bui $(top_builddir)/config/icu-config: $(top_builddir)/Makefile $(top_srcdir)/config/icu-config-top $(top_srcdir)/config/icu-config-bottom $(top_builddir)/config/Makefile.inc @platform_make_fragment@ $(top_srcdir)/config/make2sh.sed -$(RMV) $@ $(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@ + chmod u+w $@ @echo "# Following from @platform_make_fragment@" >> $@ sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@ sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@ cat $(top_srcdir)/config/icu-config-bottom >> $@ echo "# Rebuilt on "`date` >> $@ + chmod u-w $@ config.status: $(srcdir)/configure $(srcdir)/common/unicode/uversion.h @echo diff --git a/icuSources/aclocal.m4 b/icuSources/aclocal.m4 index ef3c7d8e..fa0ab643 100644 --- a/icuSources/aclocal.m4 +++ b/icuSources/aclocal.m4 @@ -1,5 +1,5 @@ dnl aclocal.m4 for ICU -dnl Copyright (c) 1999-2004, International Business Machines Corporation and +dnl Copyright (c) 1999-2006, International Business Machines Corporation and dnl others. All Rights Reserved. dnl Stephen F. Booth @@ -43,7 +43,7 @@ powerpc*-*-linux*) else icu_cv_host_frag=mh-cygwin-msvc fi ;; -*-*-*bsd*) icu_cv_host_frag=mh-bsd-gcc ;; +*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;; *-*-aix*) if test "$GCC" = yes; then icu_cv_host_frag=mh-aix-gcc @@ -72,7 +72,6 @@ powerpc*-*-linux*) *-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;; *-*-nto*) icu_cv_host_frag=mh-qnx ;; *-ncr-*) icu_cv_host_frag=mh-mpras ;; -*-sequent-*) icu_cv_host_frag=mh-ptx ;; *) icu_cv_host_frag=mh-unknown ;; esac ] @@ -88,6 +87,18 @@ else $1_TRUE='#' fi]) +dnl ICU_PROG_LINK - Make sure that the linker is usable +AC_DEFUN(ICU_PROG_LINK, +[ +case "${host}" in + *-*-cygwin*|*-*-mingw*) + if test "$GCC" != yes && test -n "`link --version 2>&1 | grep 'GNU coreutils'`"; then + AC_MSG_ERROR([link.exe is not a valid linker. Your PATH is incorrect. + Please follow the directions in ICU's readme.]) + fi;; + *);; +esac]) + dnl AC_SEARCH_LIBS_FIRST(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]]) dnl Search for a library defining FUNC, then see if it's not already available. @@ -177,6 +188,27 @@ AC_DEFUN(AC_CHECK_64BIT_LIBS, ENABLE_64BIT_LIBS=no fi ;; + x86_64-*-cygwin) + if test "$GCC" = yes; then + if test -n "`$CXX -dumpspecs 2>&1 && $CC -dumpspecs 2>&1 | grep -v __LP64__`"; then + ENABLE_64BIT_LIBS=yes + else + ENABLE_64BIT_LIBS=no + fi + else + ENABLE_64BIT_LIBS=no + OLD_CPPFLAGS="${CPPFLAGS}" + OLD_LDFLAGS="${LDFLAGS}" + CPPFLAGS="${CPPFLAGS} /DWIN64" + LDFLAGS="${LDFLAGS} /MACHINE:AMD64" + AC_TRY_RUN(int main(void) {return 0;}, + ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no, ENABLE_64BIT_LIBS=no) + if test "$ENABLE_64BIT_LIBS" = no; then + CPPFLAGS="${OLD_CPPFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + fi + fi + ;; *-*-aix*|powerpc64-*-linux*) if test "$ac_cv_prog_gcc" = no; then # Note: Have not tested 64-bitness with gcc. @@ -224,10 +256,38 @@ AC_DEFUN(AC_CHECK_64BIT_LIBS, fi fi ;; + *-*ibm-openedition*|*-*-os390*) + OLD_CFLAGS="${CFLAGS}" + OLD_CXXFLAGS="${CXXFLAGS}" + OLD_LDFLAGS="${LDFLAGS}" + CFLAGS="${CFLAGS} -Wc,lp64" + CXXFLAGS="${CXXFLAGS} -Wc,lp64" + LDFLAGS="${LDFLAGS} -Wl,lp64" + AC_TRY_RUN(int main(void) {return 0;}, + ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no, ENABLE_64BIT_LIBS=no) + if test "$ENABLE_64BIT_LIBS" = no; then + CFLAGS="${OLD_CFLAGS}" + CXXFLAGS="${OLD_CXXFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + fi + ;; *) ENABLE_64BIT_LIBS=no ;; esac + else + if test "$GCC" = yes; then + OLD_CFLAGS="${CFLAGS}" + OLD_CXXFLAGS="${CXXFLAGS}" + CFLAGS="${CFLAGS} -m32" + CXXFLAGS="${CXXFLAGS} -m32" + AC_TRY_RUN(int main(void) {return 0;}, + ENABLE_64BIT_LIBS=no, ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=yes) + if test "$ENABLE_64BIT_LIBS" = yes; then + CFLAGS="${OLD_CFLAGS}" + CXXFLAGS="${OLD_CXXFLAGS}" + fi + fi fi dnl Individual tests that fail should reset their own flags. AC_MSG_RESULT($ENABLE_64BIT_LIBS) @@ -251,7 +311,7 @@ AC_DEFUN(AC_CHECK_STRICT_COMPILE, then if test "$GCC" = yes then - CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Winline -Wno-long-long" + CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long" case "${host}" in *-*-solaris*) CFLAGS="$CFLAGS -D__STDC__=0";; @@ -267,7 +327,7 @@ AC_DEFUN(AC_CHECK_STRICT_COMPILE, fi if test "$GXX" = yes then - CXXFLAGS="$CXXFLAGS -W -Wall -ansi -pedantic -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Winline -Wno-long-long" + CXXFLAGS="$CXXFLAGS -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" case "${host}" in *-*-solaris*) CXXFLAGS="$CXXFLAGS -D__STDC__=0";; diff --git a/icuSources/allinone/all/all.dsp b/icuSources/allinone/all/all.dsp deleted file mode 100644 index 5336d612..00000000 --- a/icuSources/allinone/all/all.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=ALL - WIN32 DEBUG -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "all.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "all.mak" CFG="ALL - WIN32 DEBUG" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE "all - Win64 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "all - Win64 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "all - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "all - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "all - Win32 Release" -# Name "all - Win32 Debug" -# Name "all - Win64 Release" -# Name "all - Win64 Debug" -# End Target -# End Project diff --git a/icuSources/allinone/allinone.dsw b/icuSources/allinone/allinone.dsw deleted file mode 100644 index c18acc55..00000000 --- a/icuSources/allinone/allinone.dsw +++ /dev/null @@ -1,743 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "all"=.\all\all.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name cintltst - End Project Dependency - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name ctestfw - End Project Dependency - Begin Project Dependency - Project_Dep_Name decmn - End Project Dependency - Begin Project Dependency - Project_Dep_Name derb - End Project Dependency - Begin Project Dependency - Project_Dep_Name genccode - End Project Dependency - Begin Project Dependency - Project_Dep_Name gencmn - End Project Dependency - Begin Project Dependency - Project_Dep_Name gencnval - End Project Dependency - Begin Project Dependency - Project_Dep_Name gennames - End Project Dependency - Begin Project Dependency - Project_Dep_Name gennorm - End Project Dependency - Begin Project Dependency - Project_Dep_Name genpname - End Project Dependency - Begin Project Dependency - Project_Dep_Name genprops - End Project Dependency - Begin Project Dependency - Project_Dep_Name genrb - End Project Dependency - Begin Project Dependency - Project_Dep_Name gentest - End Project Dependency - Begin Project Dependency - Project_Dep_Name genuca - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name intltest - End Project Dependency - Begin Project Dependency - Project_Dep_Name layout - End Project Dependency - Begin Project Dependency - Project_Dep_Name makeconv - End Project Dependency - Begin Project Dependency - Project_Dep_Name makedata - End Project Dependency - Begin Project Dependency - Project_Dep_Name pkgdata - End Project Dependency - Begin Project Dependency - Project_Dep_Name stubdata - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency - Begin Project Dependency - Project_Dep_Name uconv - End Project Dependency - Begin Project Dependency - Project_Dep_Name io - End Project Dependency - Begin Project Dependency - Project_Dep_Name genbrk - End Project Dependency - Begin Project Dependency - Project_Dep_Name layoutex - End Project Dependency - Begin Project Dependency - Project_Dep_Name gensprep - End Project Dependency - Begin Project Dependency - Project_Dep_Name icuswap - End Project Dependency - Begin Project Dependency - Project_Dep_Name iotest - End Project Dependency - Begin Project Dependency - Project_Dep_Name gencase - End Project Dependency -}}} - -############################################################################### - -Project: "cintltst"=..\test\cintltst\cintltst.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name ctestfw - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "common"=..\common\common.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name stubdata - End Project Dependency -}}} - -############################################################################### - -Project: "ctestfw"=..\tools\ctestfw\ctestfw.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency -}}} - -############################################################################### - -Project: "decmn"=..\tools\gencmn\decmn.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "derb"=..\TOOLS\GENRB\derb.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name stubdata - End Project Dependency -}}} - -############################################################################### - -Project: "genbrk"=..\tools\genbrk\genbrk.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "gencase"=..\tools\gencase\gencase.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "genccode"=..\tools\genccode\genccode.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "gencmn"=..\tools\gencmn\gencmn.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "gencnval"=..\tools\gencnval\gencnval.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "gennames"=..\tools\gennames\gennames.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "gennorm"=..\tools\gennorm\gennorm.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "genpname"=..\tools\genpname\genpname.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "genprops"=..\tools\genprops\genprops.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "genrb"=..\tools\genrb\genrb.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name makeconv - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "gensprep"=..\tools\gensprep\gensprep.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gentest"=..\tools\gentest\gentest.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "genuca"=..\TOOLS\genuca\genuca.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "i18n"=..\i18n\i18n.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency -}}} - -############################################################################### - -Project: "icuswap"=..\tools\icuswap\icuswap.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "intltest"=..\test\intltest\intltest.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency - Begin Project Dependency - Project_Dep_Name ctestfw - End Project Dependency -}}} - -############################################################################### - -Project: "io"=..\io\io.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency -}}} - -############################################################################### - -Project: "iotest"=..\test\iotest\iotest.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name ctestfw - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name io - End Project Dependency -}}} - -############################################################################### - -Project: "layout"=..\layout\layout.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency -}}} - -############################################################################### - -Project: "layoutex"=..\layoutex\layoutex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name layout - End Project Dependency -}}} - -############################################################################### - -Project: "makeconv"=..\tools\makeconv\makeconv.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "makedata"=..\data\makedata.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name genccode - End Project Dependency - Begin Project Dependency - Project_Dep_Name gencmn - End Project Dependency - Begin Project Dependency - Project_Dep_Name gencnval - End Project Dependency - Begin Project Dependency - Project_Dep_Name gennames - End Project Dependency - Begin Project Dependency - Project_Dep_Name gennorm - End Project Dependency - Begin Project Dependency - Project_Dep_Name genpname - End Project Dependency - Begin Project Dependency - Project_Dep_Name genprops - End Project Dependency - Begin Project Dependency - Project_Dep_Name genrb - End Project Dependency - Begin Project Dependency - Project_Dep_Name gentest - End Project Dependency - Begin Project Dependency - Project_Dep_Name genuca - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name makeconv - End Project Dependency - Begin Project Dependency - Project_Dep_Name pkgdata - End Project Dependency - Begin Project Dependency - Project_Dep_Name stubdata - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency - Begin Project Dependency - Project_Dep_Name genbrk - End Project Dependency - Begin Project Dependency - Project_Dep_Name gensprep - End Project Dependency - Begin Project Dependency - Project_Dep_Name gencase - End Project Dependency -}}} - -############################################################################### - -Project: "pkgdata"=..\tools\pkgdata\pkgdata.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "stubdata"=..\STUBDATA\stubdata.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "toolutil"=..\tools\toolutil\toolutil.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency -}}} - -############################################################################### - -Project: "uconv"=..\extra\uconv\uconv.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name genrb - End Project Dependency - Begin Project Dependency - Project_Dep_Name i18n - End Project Dependency - Begin Project Dependency - Project_Dep_Name pkgdata - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/allinone/allinone.sln b/icuSources/allinone/allinone.sln index 26eea2d7..835178e2 100644 --- a/icuSources/allinone/allinone.sln +++ b/icuSources/allinone/allinone.sln @@ -13,11 +13,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\common\common. EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctestfw", "..\tools\ctestfw\ctestfw.vcproj", "{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}" - ProjectSection(ProjectDependencies) = postProject - {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "decmn", "..\tools\gencmn\decmn.vcproj", "{20869594-A3DD-4A75-8068-99B03A5CF4E4}" ProjectSection(ProjectDependencies) = postProject {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} @@ -140,13 +135,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata", "..\data\makedat {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C} = {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C} {6F744648-D15F-478A-90C6-58E353B5DDB3} = {6F744648-D15F-478A-90C6-58E353B5DDB3} {DB312A49-12A9-4E07-9E96-451DC2D8FF61} = {DB312A49-12A9-4E07-9E96-451DC2D8FF61} + {DB312A49-12A9-4E07-9E96-451DC2D8FF62} = {DB312A49-12A9-4E07-9E96-451DC2D8FF62} {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC} = {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC} {77C78066-746F-4EA6-B3FE-B8C8A4A97891} = {77C78066-746F-4EA6-B3FE-B8C8A4A97891} {203EC78A-0531-43F0-A636-285439BDE025} = {203EC78A-0531-43F0-A636-285439BDE025} {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F} = {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F} {86829694-A375-4C58-B4EA-96EF514E3225} = {86829694-A375-4C58-B4EA-96EF514E3225} {631C23CE-6C1D-4875-88F0-85E0A42B36EA} = {631C23CE-6C1D-4875-88F0-85E0A42B36EA} {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547} = {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547} + {9D4211F7-2C77-439C-82F0-30A4E43BA569} = {9D4211F7-2C77-439C-82F0-30A4E43BA569} {4C8454FE-81D3-4CA3-9927-29BA96F03DAC} = {4C8454FE-81D3-4CA3-9927-29BA96F03DAC} EndProjectSection EndProject @@ -164,6 +162,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stubdata", "..\stubdata\stu EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "toolutil", "..\tools\toolutil\toolutil.vcproj", "{6B231032-3CB5-4EED-9210-810D666A23A0}" ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} EndProjectSection EndProject @@ -187,22 +186,48 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gensprep", "..\tools\genspr {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuswap", "..\tools\icuswap\icuswap.vcproj", "{6FC24387-370C-4561-9582-7A819749E2C5}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iotest", "..\test\iotest\iotest.vcproj", "{E4993E82-D68A-46CA-BAE0-9D35E172E46F}" ProjectSection(ProjectDependencies) = postProject + {C2B04507-2521-4801-BF0D-5FD79D6D518C} = {C2B04507-2521-4801-BF0D-5FD79D6D518C} {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genbidi", "..\tools\genbidi\genbidi.vcproj", "{DB312A49-12A9-4E07-9E96-451DC2D8FF62}" + ProjectSection(ProjectDependencies) = postProject {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iotest", "..\test\iotest\iotest.vcproj", "{E4993E82-D68A-46CA-BAE0-9D35E172E46F}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencase", "..\tools\gencase\gencase.vcproj", "{DB312A49-12A9-4E07-9E96-451DC2D8FF61}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icupkg", "..\tools\icupkg\icupkg.vcproj", "{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genctd", "..\tools\genctd\genctd.vcproj", "{9D4211F7-2C77-439C-82F0-30A4E43BA569}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "letest", "..\test\letest\letest.vcproj", "{67351485-4D18-4245-BE39-A7EF0675ACD2}" ProjectSection(ProjectDependencies) = postProject - {C2B04507-2521-4801-BF0D-5FD79D6D518C} = {C2B04507-2521-4801-BF0D-5FD79D6D518C} {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {C920062A-0647-4553-A3B2-37C58065664B} = {C920062A-0647-4553-A3B2-37C58065664B} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencase", "..\tools\gencase\gencase.vcproj", "{DB312A49-12A9-4E07-9E96-451DC2D8FF61}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuswap", "..\tools\icuswap\icuswap.vcproj", "{39690C2A-AD89-45E4-893A-899496B85785}" ProjectSection(ProjectDependencies) = postProject {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} @@ -226,10 +251,6 @@ Global {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug.Build.0 = Debug|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release.ActiveCfg = Release|Win32 {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release.Build.0 = Release|Win32 - {20869594-A3DD-4A75-8068-99B03A5CF4E4}.Debug.ActiveCfg = Debug|Win32 - {20869594-A3DD-4A75-8068-99B03A5CF4E4}.Debug.Build.0 = Debug|Win32 - {20869594-A3DD-4A75-8068-99B03A5CF4E4}.Release.ActiveCfg = Release|Win32 - {20869594-A3DD-4A75-8068-99B03A5CF4E4}.Release.Build.0 = Release|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug.ActiveCfg = Debug|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug.Build.0 = Debug|Win32 {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release.ActiveCfg = Release|Win32 @@ -326,18 +347,34 @@ Global {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug.Build.0 = Debug|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release.ActiveCfg = Release|Win32 {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release.Build.0 = Release|Win32 - {6FC24387-370C-4561-9582-7A819749E2C5}.Debug.ActiveCfg = Debug|Win32 - {6FC24387-370C-4561-9582-7A819749E2C5}.Debug.Build.0 = Debug|Win32 - {6FC24387-370C-4561-9582-7A819749E2C5}.Release.ActiveCfg = Release|Win32 - {6FC24387-370C-4561-9582-7A819749E2C5}.Release.Build.0 = Release|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug.ActiveCfg = Debug|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug.Build.0 = Debug|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release.ActiveCfg = Release|Win32 {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release.Build.0 = Release|Win32 + {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Debug.ActiveCfg = Debug|Win32 + {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Debug.Build.0 = Debug|Win32 + {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Release.ActiveCfg = Release|Win32 + {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Release.Build.0 = Release|Win32 {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Debug.ActiveCfg = Debug|Win32 {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Debug.Build.0 = Debug|Win32 {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Release.ActiveCfg = Release|Win32 {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Release.Build.0 = Release|Win32 + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug.ActiveCfg = Debug|Win32 + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug.Build.0 = Debug|Win32 + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release.ActiveCfg = Release|Win32 + {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release.Build.0 = Release|Win32 + {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug.ActiveCfg = Debug|Win32 + {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug.Build.0 = Debug|Win32 + {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release.ActiveCfg = Release|Win32 + {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release.Build.0 = Release|Win32 + {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug.ActiveCfg = Debug|Win32 + {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug.Build.0 = Debug|Win32 + {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release.ActiveCfg = Release|Win32 + {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release.Build.0 = Release|Win32 + {39690C2A-AD89-45E4-893A-899496B85785}.Debug.ActiveCfg = Debug|Win32 + {39690C2A-AD89-45E4-893A-899496B85785}.Debug.Build.0 = Debug|Win32 + {39690C2A-AD89-45E4-893A-899496B85785}.Release.ActiveCfg = Release|Win32 + {39690C2A-AD89-45E4-893A-899496B85785}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/icuSources/common/Makefile.in b/icuSources/common/Makefile.in index 5679e0db..666373cf 100644 --- a/icuSources/common/Makefile.in +++ b/icuSources/common/Makefile.in @@ -1,6 +1,6 @@ #****************************************************************************** # -# Copyright (C) 1999-2004, International Business Machines +# Copyright (C) 1999-2006, International Business Machines # Corporation and others. All Rights Reserved. # #****************************************************************************** @@ -19,8 +19,12 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = common +# for service hook +LOCALSVC_CPP=localsvc.cpp +SVC_HOOK_INC=$(top_builddir)/common/svchook.mk + ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB) +CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB) $(SVC_HOOK_INC) ## Target information @@ -32,7 +36,7 @@ endif ifneq ($(ENABLE_SHARED),) SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) ifeq ($(ENABLE_SO_VERSION_DATA),1) SO_VERSION_DATA = common.res @@ -51,39 +55,47 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) -LDFLAGS += $(LDFLAGSICUUC) -CPPFLAGS += -I. -I$(srcdir) -I$(top_srcdir)/i18n $(LIBCPPFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/i18n $(LIBCPPFLAGS) DEFS += -DU_COMMON_IMPLEMENTATION +LDFLAGS += $(LDFLAGSICUUC) # $(LIBICUDT) is either stub data or the real DLL common data. LIBS = $(LIBICUDT) $(DEFAULT_LIBS) -OBJECTS = putil.o utypes.o uobject.o cmemory.o umutex.o ucln_cmn.o uinit.o \ -udata.o ucmndata.o udatamem.o udataswp.o umapfile.o ucol_swp.o \ -uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \ -ucat.o locmap.o uloc.o locid.o \ -uhash.o uhash_us.o \ -ucnv.o ucnv_set.o ucnv_bld.o ucnv_cb.o ucnv_cnv.o ucnv_err.o ucnv_ext.o ucnv_io.o ucnvlat1.o \ +OBJECTS = putil.o umath.o utypes.o uinvchar.o umutex.o ucln_cmn.o uinit.o uobject.o cmemory.o \ +udata.o ucmndata.o udatamem.o umapfile.o udataswp.o ucol_swp.o utrace.o \ +uhash.o uhash_us.o uenum.o ustrenum.o uvector.o ustack.o uvectr32.o \ +ucnv.o ucnv_bld.o ucnv_cnv.o ucnv_io.o ucnv_cb.o ucnv_err.o ucnvlat1.o \ ucnv_u7.o ucnv_u8.o ucnv_u16.o ucnv_u32.o ucnvscsu.o ucnvbocu.o \ -ucnvmbcs.o ucnv2022.o ucnvhz.o ucnv_lmb.o ucnvisci.o ucnvdisp.o \ -unistr.o unistr_case.o unistr_cnv.o unistr_props.o \ -utf_impl.o ustring.o ustr_cnv.o ustrcase.o cstring.o ustrfmt.o ustrtrns.o ustr_wcs.o uinvchar.o \ +ucnv_ext.o ucnvmbcs.o ucnv2022.o ucnvhz.o ucnv_lmb.o ucnvisci.o ucnvdisp.o ucnv_set.o \ +uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \ +ucat.o locmap.o uloc.o locid.o locutil.o \ +ustr_cnv.o unistr_cnv.o unistr.o unistr_case.o unistr_props.o \ +utf_impl.o ustring.o ustrcase.o ucasemap.o cstring.o ustrfmt.o ustrtrns.o ustr_wcs.o utext.o \ normlzr.o unorm.o unormcmp.o unorm_it.o chariter.o schriter.o uchriter.o uiter.o \ -uchar.o uprops.o ucase.o propname.o ubidi.o ubidiwrt.o ubidiln.o ushape.o unames.o \ -uscript.o usc_impl.o uvector.o ustack.o uvectr32.o ucmp8.o \ -uarrsort.o utrie.o uset.o uset_props.o uniset.o uniset_props.o ruleiter.o caniter.o unifilt.o unifunct.o usetiter.o \ -brkiter.o brkdict.o ubrk.o dbbi.o dbbi_tbl.o \ +uchar.o uprops.o ucase.o propname.o ubidi_props.o ubidi.o ubidiwrt.o ubidiln.o ushape.o \ +uscript.o usc_impl.o unames.o \ +utrie.o uset_props.o uniset_props.o uset.o uniset.o usetiter.o ruleiter.o caniter.o unifilt.o unifunct.o \ +uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o triedict.o \ rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \ -icuserv.o iculserv.o icunotif.o uenum.o ustrenum.o \ +serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \ uidna.o usprep.o punycode.o \ -cwchar.o filestrm.o util.o parsepos.o utrace.o locbased.o +util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o + +## Header files to install +HEADERS = $(srcdir)/unicode/*.h unicode/*.h STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) DEPS = $(OBJECTS:.o=.d) -## Header files to install -HEADERS = unicode/*.h $(srcdir)/unicode/*.h +-include Makefile.local + +-include $(SVC_HOOK_INC) + ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ @@ -101,8 +113,6 @@ distclean : distclean-local dist: dist-local check: all check-local --include Makefile.local - all-local: $(ALL_TARGETS) unicode/platform.h install-local: install-headers install-library @@ -131,6 +141,14 @@ ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB)) endif endif +$(SVC_HOOK_INC): + @echo generating $@ + @-test -f $(top_srcdir)/common/$(LOCALSVC_CPP) && ( echo "have $(LOCALSVC_CPP) - U_LOCAL_SERVICE_HOOK=1" ; \ + echo 'CPPFLAGS +=-DU_LOCAL_SERVICE_HOOK=1' > $@ ; \ + echo 'OBJECTS += $(LOCALSVC_CPP:%.cpp=%.o)' >> $@ \ + ) ; true + @echo "# Autogenerated by Makefile" >> $@ + install-headers: $(MKINSTALLDIRS) $(DESTDIR)$(includedir)/unicode @for file in $(HEADERS); do \ @@ -145,11 +163,11 @@ clean-local: $(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA) distclean-local: clean-local - $(RMV) Makefile icucfg.h unicode/platform.h + $(RMV) Makefile icucfg.h unicode/platform.h $(SVC_HOOK_INC) check-local: -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(SVC_HOOK_INC) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status @@ -163,14 +181,13 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) $(SO_VERSION_DATA) +$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) ifeq ($(OS390BATCH),1) -$(BATCH_TARGET): $(OBJECTS) +$(BATCH_TARGET):$(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS) endif # OS390BATCH - endif # ENABLE_SHARED ifeq (,$(MAKECMDGOALS)) diff --git a/icuSources/common/Makefile.local b/icuSources/common/Makefile.local new file mode 100644 index 00000000..283a622d --- /dev/null +++ b/icuSources/common/Makefile.local @@ -0,0 +1,17 @@ +#****************************************************************************** +# +# Copyright (c) 2006-2007, Apple Inc. +# All Rights Reserved. +# +#****************************************************************************** +## Makefile.local for Apple Inc. + +ifeq "$(WINDOWS)" "YES" +else ifeq "$(MINIMAL)" "YES" +else + OBJECTS += rbtok.o urbtok.o aaplbfct.o + + STATIC_OBJECT += rbtok.$(STATIC_O) urbtok.$(STATIC_O) aaplbfct.$(STATIC_O) + + DEPS += rbtok.d urbtok.d aaplbfct.d +endif diff --git a/icuSources/common/aaplbfct.cpp b/icuSources/common/aaplbfct.cpp new file mode 100644 index 00000000..e77a3105 --- /dev/null +++ b/icuSources/common/aaplbfct.cpp @@ -0,0 +1,367 @@ +/** + ******************************************************************************* + * Copyright (C) 2007, International Business Machines Corporation, Apple Inc.,* + * and others. All Rights Reserved. * + ******************************************************************************* + */ + +#define __STDC_LIMIT_MACROS 1 +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION && defined(U_DARWIN) + +#include "brkeng.h" +#include "dictbe.h" +#include "triedict.h" +#include "aaplbfct.h" +#include "unicode/uscript.h" +#include "unicode/uniset.h" +#include "unicode/ucnv.h" +#include "unicode/uchar.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +U_NAMESPACE_BEGIN + +/* + ****************************************************************** + */ + +AppleLanguageBreakFactory::AppleLanguageBreakFactory(UErrorCode &status) +: ICULanguageBreakFactory(status) +{ +} + +AppleLanguageBreakFactory::~AppleLanguageBreakFactory() { +} + +// Helper function that makes a length-delimited buffer look NUL-terminated +static __attribute__((always_inline)) inline UChar nextUChar(const UChar *&p, ptrdiff_t &l) { + if (l > 0) { + l -= 1; + return *p++; + } + else { + return 0; + } +} + +// Add a file's worth of words to the supplied mutable dictionary +static void addDictFile(MutableTrieDictionary *to, const char *path) { + UErrorCode status = U_ZERO_ERROR; + off_t fileLength; + const char *dictRawData = (const char *) -1; + const UChar *dictData = NULL; + ptrdiff_t dictDataLength = 0; + UChar *dictBuffer = NULL; + const char *encoding = NULL; + int32_t signatureLength = 0; + + // Open the dictionary file + int dictFile = open(path, O_RDONLY, 0); + if (dictFile == -1) { + status = U_FILE_ACCESS_ERROR; + } + + // Determine its length + if (U_SUCCESS(status)) { + fileLength = lseek(dictFile, 0, SEEK_END); + (void) lseek(dictFile, 0, SEEK_SET); + if (fileLength < 0 || fileLength > PTRDIFF_MAX) { + status = U_FILE_ACCESS_ERROR; + } + } + + // Map it + if (U_SUCCESS(status)) { + dictRawData = (const char *) mmap(0, (size_t) fileLength, PROT_READ, MAP_SHARED, dictFile, 0); + if ((intptr_t)dictRawData == -1) { + status = U_FILE_ACCESS_ERROR; + } + } + + // No longer need the file descriptor open + if (dictFile != -1) { + (void) close(dictFile); + } + + // Look for a Unicode signature + if (U_SUCCESS(status)) { + encoding = ucnv_detectUnicodeSignature(dictRawData, fileLength, &signatureLength, &status); + } + + // If necessary, convert the data to UChars + if (U_SUCCESS(status) && encoding != NULL) { + UConverter *conv = ucnv_open(encoding, &status); + // Preflight to get buffer size + uint32_t destCap = ucnv_toUChars(conv, NULL, 0, dictRawData, fileLength, &status); + if (status == U_BUFFER_OVERFLOW_ERROR) { + status = U_ZERO_ERROR; + } + if (U_SUCCESS(status)) { + dictBuffer = new UChar[destCap+1]; + } + (void) ucnv_toUChars(conv, dictBuffer, destCap+1, dictRawData, fileLength, &status); + dictData = dictBuffer; + dictDataLength = destCap; + if (U_SUCCESS(status) && dictData[0] == 0xFEFF) { // BOM? Skip it + dictData += 1; + dictDataLength -= 1; + } + + ucnv_close(conv); + } + + // If it didn't need converting, just assume it's native-endian UTF-16, no BOM + if (U_SUCCESS(status) && dictData == NULL) { + dictData = (const UChar *) dictRawData; + dictDataLength = fileLength/sizeof(UChar); + } + + // OK, we now have a pointer to native-endian UTF-16. Process it as one word per line, + // stopping at the first space. + if (U_SUCCESS(status)) { + UnicodeSet breaks(UNICODE_STRING_SIMPLE("[[:lb=BK:][:lb=CR:][:lb=LF:][:lb=NL:]]"), status); + const UChar *candidate = dictData; + int32_t length = 0; + UChar uc = nextUChar(dictData, dictDataLength); + while (U_SUCCESS(status) && uc) { + while (uc && !u_isspace(uc)) { + length += 1; + uc = nextUChar(dictData, dictDataLength); + } + + if (length > 0) { + to->addWord(candidate, length, status); + } + + // Find beginning of next line + // 1. Skip non-line-break characters + while (uc && !breaks.contains(uc)) { + uc = nextUChar(dictData, dictDataLength); + } + // 2. Skip line break characters + while (uc && breaks.contains(uc)) { + uc = nextUChar(dictData, dictDataLength); + } + + // Prepare for next line + candidate = dictData-1; + length = 0; + } + } + + // Unmap the file if we mapped it + if ((intptr_t) dictRawData != -1) { + (void) munmap((void *)dictRawData, (size_t) fileLength); + } + + // Delete any temporary buffer + delete [] dictBuffer; +} + +#if U_IS_BIG_ENDIAN + static const char sArchType[] = ""; +#else + static const char sArchType[] = ".le"; // little endian +#endif + +const CompactTrieDictionary * +AppleLanguageBreakFactory::loadDictionaryFor(UScriptCode script, int32_t breakType) { + const CompactTrieDictionary *icuDict = ICULanguageBreakFactory::loadDictionaryFor(script, breakType); + // We only look for a user dictionary if there is actually an ICU dictionary + if (icuDict != NULL) { + UErrorCode status = U_ZERO_ERROR; + const char *scriptName = uscript_getName(script); + char path[256]; // PATH_MAX is overkill in this case + char cachePath[128]; + char cacheTargetPath[256]; + glob_t dirGlob; + glob_t fileGlob; + struct stat cacheStat; + struct stat dictStat; + bool cacheGood = true; + int globFlags = (GLOB_NOESCAPE|GLOB_NOSORT|GLOB_TILDE); + const CompactTrieDictionary *cacheDict = NULL; + + // Iterate the dictionary directories and accumulate in dirGlob + NSSearchPathEnumerationState state = NSStartSearchPathEnumeration(NSLibraryDirectory, (NSSearchPathDomainMask) (NSUserDomainMask|NSLocalDomainMask|NSNetworkDomainMask)); + while (state = NSGetNextSearchPathEnumeration(state, path)) { + // First get the directory itself. We should never overflow, but use strlcat anyway + // to avoid a crash if we do. + strlcat(path, "/Dictionaries", sizeof(path)); + if (!glob(path, globFlags, NULL, &dirGlob)) { + globFlags |= GLOB_APPEND; + } + } + + // If there are no Dictionaries directories, ignore any cache file and return the ICU + // standard dictionary + // TODO: Delete the cache? + if (dirGlob.gl_pathc == 0) { + globfree(&dirGlob); + return icuDict; + } + + // See if there is a cache file already; get its mod time + // TODO: should we be using geteuid() here instead of getuid()? + state = NSStartSearchPathEnumeration(NSCachesDirectory, NSLocalDomainMask); + state = NSGetNextSearchPathEnumeration(state, cachePath); // Just use first one + // Create the cache file name. We should never overflow, but use snprintf to avoid a crash + // if we do. + snprintf(cacheTargetPath, sizeof(cacheTargetPath), "%s/com.apple.ICUUserDictionaryCache%s.%s.%d", cachePath, sArchType, scriptName, getuid()); + if (stat(cacheTargetPath, &cacheStat) || cacheStat.st_mode != (S_IFREG|S_IRUSR|S_IWUSR)) { + cacheGood = false; // No file or bad permissions or type + } + + // Stat the dictionary folders, and glob the dictionary files + globFlags &= ~GLOB_APPEND; + char **pathsp = dirGlob.gl_pathv; + const char *dictpath; + while (dictpath = *pathsp++) { + // Stat the directory -- ignore if stat failure + if (!stat(dictpath, &dictStat)) { + // Glob the dictionaries in the directory + snprintf(path, sizeof(path), "%s/*-%s.txt", dictpath, scriptName); + if (!glob(path, globFlags, NULL, &fileGlob)) { + globFlags |= GLOB_APPEND; + } + // If the directory has been modified after the cache file, we need to rebuild; + // a dictionary might have been deleted. + if (cacheGood && (dictStat.st_mtimespec.tv_sec > cacheStat.st_mtimespec.tv_sec || (dictStat.st_mtimespec.tv_sec == cacheStat.st_mtimespec.tv_sec && dictStat.st_mtimespec.tv_nsec > cacheStat.st_mtimespec.tv_nsec))) { + cacheGood = false; + } + } + } + + // No longer need the directory glob + globfree(&dirGlob); + + // If there are no dictionaries, ignore the cache file and return the ICU dictionary + // TODO: Delete the cache? + if (fileGlob.gl_pathc == 0) { + globfree(&fileGlob); + return icuDict; + } + + // Now compare the last modified stamp for the cache against all the dictionaries + pathsp = fileGlob.gl_pathv; + while (cacheGood && (dictpath = *pathsp++)) { + // Stat the dictionary -- ignore if stat failure + if (!stat(dictpath, &dictStat) && (dictStat.st_mtimespec.tv_sec > cacheStat.st_mtimespec.tv_sec || (dictStat.st_mtimespec.tv_sec == cacheStat.st_mtimespec.tv_sec && dictStat.st_mtimespec.tv_nsec > cacheStat.st_mtimespec.tv_nsec))) { + cacheGood = false; + } + } + + // Do we need to build the dictionary cache? + if (!cacheGood) { + // Create a mutable dictionary from the ICU dictionary + MutableTrieDictionary *sum = icuDict->cloneMutable(status); + pathsp = fileGlob.gl_pathv; + while (U_SUCCESS(status) && (dictpath = *pathsp++)) { + // Add the contents of a file to the sum + addDictFile(sum, dictpath); + } + + // Create a compact (read-only) dictionary + CompactTrieDictionary compact(*sum, status); + delete sum; + + if (U_SUCCESS(status)) { + // Open a temp file to write out the cache + strlcat(cachePath, "/temp.XXXXXXXXXX", sizeof(cachePath)); + int temp = mkstemp(cachePath); + if (temp == -1) { + status = U_FILE_ACCESS_ERROR; + } + size_t dictSize = compact.dataSize(); + if (U_SUCCESS(status) && write(temp, compact.data(), dictSize) != dictSize) { + status = U_FILE_ACCESS_ERROR; + } + // Rename the temp file to the cache. Note that race conditions here are + // fine, as the file system operations are atomic. If an outdated version wins + // over a newer version, it will get rebuilt at the next app launch due to the + // modification time checks above. We don't care that any given app launch gets + // the most up-to-date cache (impossible since we can't lock all the Dictionaries + // directories), only that the cache (eventually) reflects the current state of + // any user dictionaries. That will happen on the next app launch after changes + // to the user dictionaries quiesce. + if (U_SUCCESS(status)) { + if (rename(cachePath, cacheTargetPath)) { + status = U_FILE_ACCESS_ERROR; + (void) unlink(cachePath); // Clean up the temp file + } + } + if (temp != -1) { + close(temp); + } + } + } + + // Done with dictionary paths; release memory allocated by glob() + globfree(&fileGlob); + + // Map the cache and build the dictionary + if (U_SUCCESS(status)) { + int cache = open(cacheTargetPath, O_RDONLY, 0); + off_t length; + const void *cacheData = (const void *) -1; + if (cache == -1) { + status = U_FILE_ACCESS_ERROR; + } + if (U_SUCCESS(status)) { + length = lseek(cache, 0, SEEK_END); + (void) lseek(cache, 0, SEEK_SET); + if (length < 0 || length > PTRDIFF_MAX) { + status = U_FILE_ACCESS_ERROR; + } + } + + // Map the cache. Note: it is left mapped until process exit. This is the normal + // behavior anyway, so it shouldn't be an issue. + if (U_SUCCESS(status)) { + cacheData = mmap(0, (size_t) length, PROT_READ, MAP_SHARED, cache, 0); + if ((intptr_t)cacheData == -1) { + status = U_FILE_ACCESS_ERROR; + } + } + // We can close the cache file now that it's mapped (or not) + if (cache != -1) { + (void) close(cache); + } + // If all was successful, try to create the dictionary. The constructor will + // check the magic number for us. + if (U_SUCCESS(status)) { + cacheDict = new CompactTrieDictionary(cacheData, status); + } + if (U_FAILURE(status) && (intptr_t)cacheData != -1) { + // Clean up the mmap + (void) munmap((void *)cacheData, (size_t) length); + } + } + + // If we were successful, free the ICU dictionary and return ours + if (U_SUCCESS(status)) { + delete icuDict; + return cacheDict; + } + else { + delete cacheDict; + } + } + return icuDict; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION && defined(U_DARWIN) */ diff --git a/icuSources/common/aaplbfct.h b/icuSources/common/aaplbfct.h new file mode 100644 index 00000000..67dfcdcd --- /dev/null +++ b/icuSources/common/aaplbfct.h @@ -0,0 +1,51 @@ +/** + ************************************************************************************ + * Copyright (C) 2006-2007, International Business Machines Corporation and others. * + * All Rights Reserved. * + ************************************************************************************ + */ + +#ifndef AAPLBFCT_H +#define AAPLBFCT_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/utext.h" +#include "unicode/uscript.h" +#include "brkeng.h" + +U_NAMESPACE_BEGIN + +class AppleLanguageBreakFactory : public ICULanguageBreakFactory { + public: + + /** + *

Standard constructor.

+ * + */ + AppleLanguageBreakFactory(UErrorCode &status); + + /** + *

Virtual destructor.

+ */ + virtual ~AppleLanguageBreakFactory(); + + protected: + + /** + *

Create a CompactTrieDictionary for the specified script and break type.

+ * + * @param script A script code that identifies the dictionary to be + * created. + * @param breakType The kind of text break for which a dictionary is + * sought. + * @return A CompactTrieDictionary with the desired characteristics, or 0. + */ + virtual const CompactTrieDictionary *loadDictionaryFor(UScriptCode script, int32_t breakType); + +}; + +U_NAMESPACE_END + + /* AAPLBFCT_H */ +#endif diff --git a/icuSources/common/brkdict.cpp b/icuSources/common/brkdict.cpp deleted file mode 100644 index 68875b97..00000000 --- a/icuSources/common/brkdict.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 1999-2004 IBM and others. All rights reserved. -********************************************************************** -* Date Name Description -* 12/1/99 rtg Ported from Java -* 01/13/2000 helena Added UErrorCode to ctors. -********************************************************************** -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/ures.h" -#include "brkdict.h" -#include "cmemory.h" - -U_NAMESPACE_BEGIN - -//================================================================================= -// deserialization -//================================================================================= - -BreakDictionary::BreakDictionary(const char* /*dictionaryFilename*/, UErrorCode& status) - : columnMap(NULL), - table(NULL), - rowIndex(NULL), - rowIndexFlags(NULL), - rowIndexFlagsIndex(NULL), - rowIndexShifts(NULL) -{ - if (U_FAILURE(status)) return; - - UResourceBundle *th_dict = ures_open(NULL, "th", &status); - th_dict = ures_getByKey(th_dict, "BreakDictionaryData", th_dict, &status); - if (U_FAILURE(status)) return; - - int32_t len; - const uint8_t * data = ures_getBinary(th_dict, &len, &status); - ures_close(th_dict); - if (U_FAILURE(status)) return; - - readDictionaryFile(data); -} - -BreakDictionary::~BreakDictionary() -{ - ucmp8_close(columnMap); - uprv_free(table); - uprv_free(rowIndex); - uprv_free(rowIndexFlags); - uprv_free(rowIndexFlagsIndex); - uprv_free(rowIndexShifts); -} - -// macros to support readDictionaryFile. The data files originated from a Java -// program, and Java always writes data out in big-endian format. These macros will -// byte-swap the data for appropriate use on Windows. - -#if U_IS_BIG_ENDIAN -#define SWAP32(x) -#define SWAP16(x) -#else -#define SWAP32(x) x = (uint32_t)((x >> 24 & 0xff) | (x >> 8 & 0xff00) | (x << 8 & 0xff0000) | (x << 24 & 0xff000000)) -#define SWAP16(x) x = (uint16_t)((x << 8 & 0xff00) | (x >> 8 & 0xff)) -#endif - -#define DICTIONARY_READ(source, destAddr, len) \ - uprv_memcpy(destAddr, source, len);\ - source+=(len) - - -void -BreakDictionary::readDictionaryFile(const uint8_t * in) -{ - int32_t l; - int32_t version; - - int i; - - // read in the version number (right now we just ignore it) - DICTIONARY_READ(in, &version, 4); - - // read in the column map (this is serialized in its internal form: - // an index array followed by a data array) - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - uint16_t* temp = (uint16_t*) uprv_malloc(sizeof(uint16_t)*l); - DICTIONARY_READ(in, temp, l * sizeof (int16_t) ); - for (i = 0; i < l; i++) { - SWAP16(temp[i]); - } - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - int8_t* temp2 = (int8_t*) uprv_malloc(sizeof(int8_t)*l); - DICTIONARY_READ(in, temp2, l); - columnMap = ucmp8_openAdopt(temp, temp2, l); - - // read in numCols and numColGroups - DICTIONARY_READ(in, &numCols, 4); - SWAP32(numCols); - DICTIONARY_READ(in, &numColGroups, 4); - SWAP32(numColGroups); - - // read in the row-number index - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - rowIndex = (int16_t *)uprv_malloc(l*2); - DICTIONARY_READ(in, rowIndex, l * sizeof (int16_t) ); - for (i = 0; i < l; i++) { - SWAP16(rowIndex[i]); - } - - // load in the populated-cells bitmap: index first, then bitmap list - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - rowIndexFlagsIndex = (int16_t *)uprv_malloc(l*2); - DICTIONARY_READ(in, rowIndexFlagsIndex, l * sizeof(int16_t) ); - for (i = 0; i < l; i++) { - SWAP16(rowIndexFlagsIndex[i]); - } - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - rowIndexFlags = (int32_t *)uprv_malloc(l*4); - DICTIONARY_READ(in, rowIndexFlags, l * sizeof(int32_t)); - for (i = 0; i < l; i++) { - SWAP32(rowIndexFlags[i]); - } - - // load in the row-shift index - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - rowIndexShifts = (int8_t *)uprv_malloc(l); - DICTIONARY_READ(in, rowIndexShifts, l); - - // finally, load in the actual state table - DICTIONARY_READ(in, &l, 4); - SWAP32(l); - table = (int16_t *)uprv_malloc(l*2); - DICTIONARY_READ(in, table, l * sizeof(int16_t) ); - for (i = 0; i < l; i++) { - SWAP16(table[i]); - } - - // the reverse column map occurs next in the file. In the C/C++ code, for the - // time being, we're not going to worry about that. -} - -//================================================================================= -// access to the words -//================================================================================= - -/** - * Uses the column map to map the character to a column number, then - * passes the row and column number to the other version of at() - * @param row The current state - * @param ch The character whose column we're interested in - * @return The new state to transition to - */ -int16_t -BreakDictionary::at(int32_t row, UChar ch) const -{ - int16_t col = ucmp8_get(columnMap, ch); - return at(row, (int32_t)col); -} - -/** - * Returns the value in the cell with the specified (logical) row and - * column numbers. In DictionaryBasedBreakIterator, the row number is - * a state number, the column number is an input, and the return value - * is the row number of the new state to transition to. (0 is the - * "error" state, and -1 is the "end of word" state in a dictionary) - * @param row The row number of the current state - * @param col The column number of the input character (0 means "not a - * dictionary character") - * @return The row number of the new state to transition to - */ -int16_t -BreakDictionary::at(int32_t row, int32_t col) const -{ - if (cellIsPopulated(row, col)) { - // we map from logical to physical row number by looking up the - // mapping in rowIndex; we map from logical column number to - // physical column number by looking up a shift value for this - // logical row and offsetting the logical column number by - // the shift amount. Then we can use internalAt() to actually - // get the value out of the table. - return internalAt(rowIndex[row], col + rowIndexShifts[row]); - } - else { - return 0; - } -} - -//================================================================================= -// implementation -//================================================================================= -/** - * Given (logical) row and column numbers, returns true if the - * cell in that position is populated - */ -UBool -BreakDictionary::cellIsPopulated(int32_t row, int32_t col) const -{ - // look up the entry in the bitmap index for the specified row. - // If it's a negative number, it's the column number of the only - // populated cell in the row - if (rowIndexFlagsIndex[row] < 0) { - return col == -rowIndexFlagsIndex[row]; - } - - // if it's a positive number, it's the offset of an entry in the bitmap - // list. If the table is more than 32 columns wide, the bitmap is stored - // successive entries in the bitmap list, so we have to divide the column - // number by 32 and offset the number we got out of the index by the result. - // Once we have the appropriate piece of the bitmap, test the appropriate - // bit and return the result. - else { - int32_t flags = rowIndexFlags[rowIndexFlagsIndex[row] + (col >> 5)]; - return (flags & (1 << (col & 0x1f))) != 0; - } -} - -/** - * Implementation of at() when we know the specified cell is populated. - * @param row The PHYSICAL row number of the cell - * @param col The PHYSICAL column number of the cell - * @return The value stored in the cell - */ -int16_t -BreakDictionary::internalAt(int32_t row, int32_t col) const -{ - // the table is a one-dimensional array, so this just does the math necessary - // to treat it as a two-dimensional array (we don't just use a two-dimensional - // array because two-dimensional arrays are inefficient in Java) - return table[row * numCols + col]; -} - -U_NAMESPACE_END - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/brkdict.h b/icuSources/common/brkdict.h deleted file mode 100644 index 87a6fd74..00000000 --- a/icuSources/common/brkdict.h +++ /dev/null @@ -1,174 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 1999-2004 IBM and others. All rights reserved. -********************************************************************** -* Date Name Description -* 12/1/99 rtg Ported from Java -* 01/13/2000 helena Added UErrorCode to ctors. -********************************************************************** -*/ - -#ifndef BRKDICT_H -#define BRKDICT_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "ucmp8.h" - -U_NAMESPACE_BEGIN - -/** - * This is the class that represents the list of known words used by - * DictionaryBasedBreakIterator. The conceptual data structure used - * here is a trie: there is a node hanging off the root node for every - * letter that can start a word. Each of these nodes has a node hanging - * off of it for every letter that can be the second letter of a word - * if this node is the first letter, and so on. The trie is represented - * as a two-dimensional array that can be treated as a table of state - * transitions. Indexes are used to compress this array, taking - * advantage of the fact that this array will always be very sparse. - */ -class BreakDictionary : public UMemory { - //================================================================================= - // data members - //================================================================================= -private: - - /** - * Maps from characters to column numbers. The main use of this is to - * avoid making room in the array for empty columns. - */ - CompactByteArray* columnMap; - - /** - * The number of actual columns in the table - */ - int32_t numCols; - - /** - * Columns are organized into groups of 32. This says how many - * column groups. (We could calculate this, but we store the - * value to avoid having to repeatedly calculate it.) - */ - int32_t numColGroups; - - /** - * The actual compressed state table. Each conceptual row represents - * a state, and the cells in it contain the row numbers of the states - * to transition to for each possible letter. 0 is used to indicate - * an illegal combination of letters (i.e., the error state). The - * table is compressed by eliminating all the unpopulated (i.e., zero) - * cells. Multiple conceptual rows can then be doubled up in a single - * physical row by sliding them up and possibly shifting them to one - * side or the other so the populated cells don't collide. Indexes - * are used to identify unpopulated cells and to locate populated cells. - */ - int16_t* table; - - /** - * This index maps logical row numbers to physical row numbers - */ - int16_t* rowIndex; - - /** - * A bitmap is used to tell which cells in the comceptual table are - * populated. This array contains all the unique bit combinations - * in that bitmap. If the table is more than 32 columns wide, - * successive entries in this array are used for a single row. - */ - int32_t* rowIndexFlags; - - /** - * This index maps from a logical row number into the bitmap table above. - * (This keeps us from storing duplicate bitmap combinations.) Since there - * are a lot of rows with only one populated cell, instead of wasting space - * in the bitmap table, we just store a negative number in this index for - * rows with one populated cell. The absolute value of that number is - * the column number of the populated cell. - */ - int16_t* rowIndexFlagsIndex; - - /** - * For each logical row, this index contains a constant that is added to - * the logical column number to get the physical column number - */ - int8_t* rowIndexShifts; - - //================================================================================= - // deserialization - //================================================================================= - -public: - /** - * Constructor. Creates the BreakDictionary by using readDictionaryFile() to - * load the dictionary tables from the disk. - * @param dictionaryFilename The name of the dictionary file - * @param status for errors if it occurs - */ - BreakDictionary(const char* dictionaryFilename, UErrorCode& status); - - /** - * Destructor. - */ - ~BreakDictionary(); - - /** - * Reads the dictionary file on the disk and constructs the appropriate in-memory - * representation. - * @param in The given memory stream - */ - void readDictionaryFile(const uint8_t * in); - - //================================================================================= - // access to the words - //================================================================================= - - /** - * Uses the column map to map the character to a column number, then - * passes the row and column number to the other version of at() - * @param row The current state - * @param ch The character whose column we're interested in - * @return The new state to transition to - */ - int16_t at(int32_t row, UChar ch) const; - - /** - * Returns the value in the cell with the specified (logical) row and - * column numbers. In DictionaryBasedBreakIterator, the row number is - * a state number, the column number is an input, and the return value - * is the row number of the new state to transition to. (0 is the - * "error" state, and -1 is the "end of word" state in a dictionary) - * @param row The row number of the current state - * @param col The column number of the input character (0 means "not a - * dictionary character") - * @return The row number of the new state to transition to - */ - int16_t at(int32_t row, int32_t col) const; - -private: - /** - * Given (logical) row and column numbers, returns true if the - * cell in that position is populated - * @param row The LOGICAL row number of the cell - * @param col The PHYSICAL row number of the cell - * @return true if the cell in that position is populated - */ - UBool cellIsPopulated(int32_t row, int32_t col) const; - - /** - * Implementation of at() when we know the specified cell is populated. - * @param row The PHYSICAL row number of the cell - * @param col The PHYSICAL column number of the cell - * @return The value stored in the cell - */ - int16_t internalAt(int32_t row, int32_t col) const; - - // the following methods are never meant to be called and so are not defined - // (if you don't declare them, you get default implementations) - BreakDictionary(const BreakDictionary& that); - BreakDictionary& operator=(const BreakDictionary& that); -}; - -U_NAMESPACE_END - -#endif diff --git a/icuSources/common/brkeng.cpp b/icuSources/common/brkeng.cpp new file mode 100644 index 00000000..c0ec1dd7 --- /dev/null +++ b/icuSources/common/brkeng.cpp @@ -0,0 +1,287 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "brkeng.h" +#include "dictbe.h" +#include "triedict.h" +#include "unicode/uchar.h" +#include "unicode/uniset.h" +#include "unicode/chariter.h" +#include "unicode/ures.h" +#include "unicode/udata.h" +#include "unicode/putil.h" +#include "unicode/ustring.h" +#include "unicode/uscript.h" +#include "uvector.h" +#include "mutex.h" +#include "uresimp.h" +#include "ubrkimpl.h" + +U_NAMESPACE_BEGIN + +/* + ****************************************************************** + */ + +LanguageBreakEngine::LanguageBreakEngine() { +} + +LanguageBreakEngine::~LanguageBreakEngine() { +} + +/* + ****************************************************************** + */ + +LanguageBreakFactory::LanguageBreakFactory() { +} + +LanguageBreakFactory::~LanguageBreakFactory() { +} + +/* + ****************************************************************** + */ + +UnhandledEngine::UnhandledEngine(UErrorCode &/*status*/) { + for (int32_t i = 0; i < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0])); ++i) { + fHandled[i] = 0; + } +} + +UnhandledEngine::~UnhandledEngine() { + for (int32_t i = 0; i < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0])); ++i) { + if (fHandled[i] != 0) { + delete fHandled[i]; + } + } +} + +UBool +UnhandledEngine::handles(UChar32 c, int32_t breakType) const { + return (breakType >= 0 && breakType < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0])) + && fHandled[breakType] != 0 && fHandled[breakType]->contains(c)); +} + +int32_t +UnhandledEngine::findBreaks( UText *text, + int32_t startPos, + int32_t endPos, + UBool reverse, + int32_t breakType, + UStack &/*foundBreaks*/ ) const { + if (breakType >= 0 && breakType < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0]))) { + UChar32 c = utext_current32(text); + if (reverse) { + while((int32_t)utext_getNativeIndex(text) > startPos && fHandled[breakType]->contains(c)) { + c = utext_previous32(text); + } + } + else { + while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) { + utext_next32(text); // TODO: recast loop to work with post-increment operations. + c = utext_current32(text); + } + } + } + return 0; +} + +void +UnhandledEngine::handleCharacter(UChar32 c, int32_t breakType) { + if (breakType >= 0 && breakType < (int32_t)(sizeof(fHandled)/sizeof(fHandled[0]))) { + if (fHandled[breakType] == 0) { + fHandled[breakType] = new UnicodeSet(); + if (fHandled[breakType] == 0) { + return; + } + } + if (!fHandled[breakType]->contains(c)) { + UErrorCode status = U_ZERO_ERROR; + // Apply the entire script of the character. + int32_t script = u_getIntPropertyValue(c, UCHAR_SCRIPT); + fHandled[breakType]->applyIntPropertyValue(UCHAR_SCRIPT, script, status); + } + } +} + +/* + ****************************************************************** + */ + +ICULanguageBreakFactory::ICULanguageBreakFactory(UErrorCode &/*status*/) { + fEngines = 0; +} + +ICULanguageBreakFactory::~ICULanguageBreakFactory() { + if (fEngines != 0) { + delete fEngines; + } +} + +U_NAMESPACE_END +U_CDECL_BEGIN +static void U_CALLCONV _deleteEngine(void *obj) { + delete (const LanguageBreakEngine *) obj; +} +U_CDECL_END +U_NAMESPACE_BEGIN + +const LanguageBreakEngine * +ICULanguageBreakFactory::getEngineFor(UChar32 c, int32_t breakType) { + UBool needsInit; + int32_t i; + const LanguageBreakEngine *lbe = NULL; + UErrorCode status = U_ZERO_ERROR; + + umtx_lock(NULL); + needsInit = (UBool)(fEngines == NULL); + if (!needsInit) { + i = fEngines->size(); + while (--i >= 0) { + lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i)); + if (lbe != NULL && lbe->handles(c, breakType)) { + break; + } + lbe = NULL; + } + } + umtx_unlock(NULL); + + if (lbe != NULL) { + return lbe; + } + + if (needsInit) { + UStack *engines = new UStack(_deleteEngine, NULL, status); + if (U_SUCCESS(status) && engines == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + else if (U_FAILURE(status)) { + delete engines; + engines = NULL; + } + else { + umtx_lock(NULL); + if (fEngines == NULL) { + fEngines = engines; + engines = NULL; + } + umtx_unlock(NULL); + delete engines; + } + } + + if (fEngines == NULL) { + return NULL; + } + + // We didn't find an engine the first time through, or there was no + // stack. Create an engine. + const LanguageBreakEngine *newlbe = loadEngineFor(c, breakType); + + // Now get the lock, and see if someone else has created it in the + // meantime + umtx_lock(NULL); + i = fEngines->size(); + while (--i >= 0) { + lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i)); + if (lbe != NULL && lbe->handles(c, breakType)) { + break; + } + lbe = NULL; + } + if (lbe == NULL && newlbe != NULL) { + fEngines->push((void *)newlbe, status); + lbe = newlbe; + newlbe = NULL; + } + umtx_unlock(NULL); + + delete newlbe; + + return lbe; +} + +const LanguageBreakEngine * +ICULanguageBreakFactory::loadEngineFor(UChar32 c, int32_t breakType) { + UErrorCode status = U_ZERO_ERROR; + UScriptCode code = uscript_getScript(c, &status); + if (U_SUCCESS(status)) { + const CompactTrieDictionary *dict = loadDictionaryFor(code, breakType); + if (dict != NULL) { + const LanguageBreakEngine *engine = NULL; + switch(code) { + case USCRIPT_THAI: + engine = new ThaiBreakEngine(dict, status); + break; + default: + break; + } + if (engine == NULL) { + delete dict; + } + else if (U_FAILURE(status)) { + delete engine; + engine = NULL; + } + return engine; + } + } + return NULL; +} + +const CompactTrieDictionary * +ICULanguageBreakFactory::loadDictionaryFor(UScriptCode script, int32_t breakType) { + UErrorCode status = U_ZERO_ERROR; + // Open root from brkitr tree. + char dictnbuff[256]; + char ext[4]={'\0'}; + + UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, "", &status); + b = ures_getByKeyWithFallback(b, "dictionaries", b, &status); + b = ures_getByKeyWithFallback(b, uscript_getShortName(script), b, &status); + int32_t dictnlength = 0; + const UChar *dictfname = ures_getString(b, &dictnlength, &status); + if (U_SUCCESS(status) && (size_t)dictnlength >= sizeof(dictnbuff)) { + dictnlength = 0; + status = U_BUFFER_OVERFLOW_ERROR; + } + if (U_SUCCESS(status) && dictfname) { + UChar* extStart=u_strchr(dictfname, 0x002e); + int len = 0; + if(extStart!=NULL){ + len = extStart-dictfname; + u_UCharsToChars(extStart+1, ext, sizeof(ext)); // nul terminates the buff + u_UCharsToChars(dictfname, dictnbuff, len); + } + dictnbuff[len]=0; // nul terminate + } + ures_close(b); + UDataMemory *file = udata_open(U_ICUDATA_BRKITR, ext, dictnbuff, &status); + if (U_SUCCESS(status)) { + const CompactTrieDictionary *dict = new CompactTrieDictionary( + file, status); + if (U_SUCCESS(status) && dict == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + if (U_FAILURE(status)) { + delete dict; + dict = NULL; + } + return dict; + } + return NULL; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/brkeng.h b/icuSources/common/brkeng.h new file mode 100644 index 00000000..8b27c214 --- /dev/null +++ b/icuSources/common/brkeng.h @@ -0,0 +1,292 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#ifndef BRKENG_H +#define BRKENG_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/utext.h" +#include "unicode/uscript.h" + +U_NAMESPACE_BEGIN + +class UnicodeSet; +class UStack; +class CompactTrieDictionary; + +/******************************************************************* + * LanguageBreakEngine + */ + +/** + *

LanguageBreakEngines implement language-specific knowledge for + * finding text boundaries within a run of characters belonging to a + * specific set. The boundaries will be of a specific kind, e.g. word, + * line, etc.

+ * + *

LanguageBreakEngines should normally be implemented so as to + * be shared between threads without locking.

+ */ +class LanguageBreakEngine : public UMemory { + public: + + /** + *

Default constructor.

+ * + */ + LanguageBreakEngine(); + + /** + *

Virtual destructor.

+ */ + virtual ~LanguageBreakEngine(); + + /** + *

Indicate whether this engine handles a particular character for + * a particular kind of break.

+ * + * @param c A character which begins a run that the engine might handle + * @param breakType The type of text break which the caller wants to determine + * @return TRUE if this engine handles the particular character and break + * type. + */ + virtual UBool handles(UChar32 c, int32_t breakType) const = 0; + + /** + *

Find any breaks within a run in the supplied text.

+ * + * @param text A UText representing the text. The + * iterator is left at the end of the run of characters which the engine + * is capable of handling. + * @param startPos The start of the run within the supplied text. + * @param endPos The end of the run within the supplied text. + * @param reverse Whether the caller is looking for breaks in a reverse + * direction. + * @param breakType The type of break desired, or -1. + * @param foundBreaks An allocated C array of the breaks found, if any + * @return The number of breaks found. + */ + virtual int32_t findBreaks( UText *text, + int32_t startPos, + int32_t endPos, + UBool reverse, + int32_t breakType, + UStack &foundBreaks ) const = 0; + +}; + +/******************************************************************* + * LanguageBreakFactory + */ + +/** + *

LanguageBreakFactorys find and return a LanguageBreakEngine + * that can determine breaks for characters in a specific set, if + * such an object can be found.

+ * + *

If a LanguageBreakFactory is to be shared between threads, + * appropriate synchronization must be used; there is none internal + * to the factory.

+ * + *

A LanguageBreakEngine returned by a LanguageBreakFactory can + * normally be shared between threads without synchronization, unless + * the specific subclass of LanguageBreakFactory indicates otherwise.

+ * + *

A LanguageBreakFactory is responsible for deleting any LanguageBreakEngine + * it returns when it itself is deleted, unless the specific subclass of + * LanguageBreakFactory indicates otherwise. Naturally, the factory should + * not be deleted until the LanguageBreakEngines it has returned are no + * longer needed.

+ */ +class LanguageBreakFactory : public UMemory { + public: + + /** + *

Default constructor.

+ * + */ + LanguageBreakFactory(); + + /** + *

Virtual destructor.

+ */ + virtual ~LanguageBreakFactory(); + + /** + *

Find and return a LanguageBreakEngine that can find the desired + * kind of break for the set of characters to which the supplied + * character belongs. It is up to the set of available engines to + * determine what the sets of characters are.

+ * + * @param c A character that begins a run for which a LanguageBreakEngine is + * sought. + * @param breakType The kind of text break for which a LanguageBreakEngine is + * sought. + * @return A LanguageBreakEngine with the desired characteristics, or 0. + */ + virtual const LanguageBreakEngine *getEngineFor(UChar32 c, int32_t breakType) = 0; + +}; + +/******************************************************************* + * UnhandledEngine + */ + +/** + *

UnhandledEngine is a special subclass of LanguageBreakEngine that + * handles characters that no other LanguageBreakEngine is available to + * handle. It is told the character and the type of break; at its + * discretion it may handle more than the specified character (e.g., + * the entire script to which that character belongs.

+ * + *

UnhandledEngines may not be shared between threads without + * external synchronization.

+ */ + +class UnhandledEngine : public LanguageBreakEngine { + private: + + /** + * The sets of characters handled, for each break type + * @internal + */ + + UnicodeSet *fHandled[4]; + + public: + + /** + *

Default constructor.

+ * + */ + UnhandledEngine(UErrorCode &status); + + /** + *

Virtual destructor.

+ */ + virtual ~UnhandledEngine(); + + /** + *

Indicate whether this engine handles a particular character for + * a particular kind of break.

+ * + * @param c A character which begins a run that the engine might handle + * @param breakType The type of text break which the caller wants to determine + * @return TRUE if this engine handles the particular character and break + * type. + */ + virtual UBool handles(UChar32 c, int32_t breakType) const; + + /** + *

Find any breaks within a run in the supplied text.

+ * + * @param text A UText representing the text (TODO: UText). The + * iterator is left at the end of the run of characters which the engine + * is capable of handling. + * @param startPos The start of the run within the supplied text. + * @param endPos The end of the run within the supplied text. + * @param reverse Whether the caller is looking for breaks in a reverse + * direction. + * @param breakType The type of break desired, or -1. + * @param foundBreaks An allocated C array of the breaks found, if any + * @return The number of breaks found. + */ + virtual int32_t findBreaks( UText *text, + int32_t startPos, + int32_t endPos, + UBool reverse, + int32_t breakType, + UStack &foundBreaks ) const; + + /** + *

Tell the engine to handle a particular character and break type.

+ * + * @param c A character which the engine should handle + * @param breakType The type of text break for which the engine should handle c + */ + virtual void handleCharacter(UChar32 c, int32_t breakType); + +}; + +/******************************************************************* + * ICULanguageBreakFactory + */ + +/** + *

ICULanguageBreakFactory is the default LanguageBreakFactory for + * ICU. It creates dictionary-based LanguageBreakEngines from dictionary + * data in the ICU data file.

+ */ +class ICULanguageBreakFactory : public LanguageBreakFactory { + private: + + /** + * The stack of break engines created by this factory + * @internal + */ + + UStack *fEngines; + + public: + + /** + *

Standard constructor.

+ * + */ + ICULanguageBreakFactory(UErrorCode &status); + + /** + *

Virtual destructor.

+ */ + virtual ~ICULanguageBreakFactory(); + + /** + *

Find and return a LanguageBreakEngine that can find the desired + * kind of break for the set of characters to which the supplied + * character belongs. It is up to the set of available engines to + * determine what the sets of characters are.

+ * + * @param c A character that begins a run for which a LanguageBreakEngine is + * sought. + * @param breakType The kind of text break for which a LanguageBreakEngine is + * sought. + * @return A LanguageBreakEngine with the desired characteristics, or 0. + */ + virtual const LanguageBreakEngine *getEngineFor(UChar32 c, int32_t breakType); + + protected: + + /** + *

Create a LanguageBreakEngine for the set of characters to which + * the supplied character belongs, for the specified break type.

+ * + * @param c A character that begins a run for which a LanguageBreakEngine is + * sought. + * @param breakType The kind of text break for which a LanguageBreakEngine is + * sought. + * @return A LanguageBreakEngine with the desired characteristics, or 0. + */ + virtual const LanguageBreakEngine *loadEngineFor(UChar32 c, int32_t breakType); + + /** + *

Create a CompactTrieDictionary for the specified script and break type.

+ * + * @param script An ISO 15924 script code that identifies the dictionary to be + * created. + * @param breakType The kind of text break for which a dictionary is + * sought. + * @return A CompactTrieDictionary with the desired characteristics, or 0. + */ + virtual const CompactTrieDictionary *loadDictionaryFor(UScriptCode script, int32_t breakType); + +}; + +U_NAMESPACE_END + + /* BRKENG_H */ +#endif diff --git a/icuSources/common/brkiter.cpp b/icuSources/common/brkiter.cpp index 835711d4..256095bf 100644 --- a/icuSources/common/brkiter.cpp +++ b/icuSources/common/brkiter.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -22,16 +22,19 @@ #if !UCONFIG_NO_BREAK_ITERATION -#include "unicode/dbbi.h" +#include "unicode/rbbi.h" #include "unicode/brkiter.h" #include "unicode/udata.h" #include "unicode/ures.h" +#include "unicode/ustring.h" #include "ucln_cmn.h" #include "cstring.h" #include "mutex.h" -#include "iculserv.h" +#include "servloc.h" #include "locbased.h" #include "uresimp.h" +#include "uassert.h" +#include "ubrkimpl.h" // ***************************************************************************** // class BreakIterator @@ -42,20 +45,21 @@ U_NAMESPACE_BEGIN -const int32_t BreakIterator::DONE = (int32_t)-1; - // ------------------------------------- BreakIterator* -BreakIterator::buildInstance(const Locale& loc, const char *type, UBool dict, UErrorCode &status) +BreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode &status) { char fnbuff[256]; + char ext[4]={'\0'}; char actualLocale[ULOC_FULLNAME_CAPACITY]; int32_t size; const UChar* brkfname = NULL; - UResourceBundle brkRulesStack, brkNameStack; - UResourceBundle *brkRules = &brkRulesStack, *brkName = &brkNameStack; - BreakIterator *result = NULL; + UResourceBundle brkRulesStack; + UResourceBundle brkNameStack; + UResourceBundle *brkRules = &brkRulesStack; + UResourceBundle *brkName = &brkNameStack; + RuleBasedBreakIterator *result = NULL; if (U_FAILURE(status)) return NULL; @@ -64,7 +68,13 @@ BreakIterator::buildInstance(const Locale& loc, const char *type, UBool dict, UE ures_initStackObject(brkName); // Get the locale - UResourceBundle *b = ures_open(NULL, loc.getName(), &status); + UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, loc.getName(), &status); + /* this is a hack for now. Should be fixed when the data is fetched from + brk_index.txt */ + if(status==U_USING_DEFAULT_WARNING){ + status=U_ZERO_ERROR; + ures_openFillIn(b, U_ICUDATA_BRKITR, "", &status); + } // Get the "boundaries" array. if (U_SUCCESS(status)) { @@ -73,57 +83,48 @@ BreakIterator::buildInstance(const Locale& loc, const char *type, UBool dict, UE brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status); // Get the actual string brkfname = ures_getString(brkName, &size, &status); + U_ASSERT((size_t)size=sizeof(fnbuff)) { + size=0; + if (U_SUCCESS(status)) { + status = U_BUFFER_OVERFLOW_ERROR; + } + } // Use the string if we found it if (U_SUCCESS(status) && brkfname) { uprv_strncpy(actualLocale, ures_getLocale(brkName, &status), sizeof(actualLocale)/sizeof(actualLocale[0])); - u_UCharsToChars(brkfname, fnbuff, size+1); + + UChar* extStart=u_strchr(brkfname, 0x002e); + int len = 0; + if(extStart!=NULL){ + len = extStart-brkfname; + u_UCharsToChars(extStart+1, ext, sizeof(ext)); // nul terminates the buff + u_UCharsToChars(brkfname, fnbuff, len); + } + fnbuff[len]=0; // nul terminate } } ures_close(brkRules); ures_close(brkName); - UDataMemory* file = udata_open(NULL, "brk", fnbuff, &status); + UDataMemory* file = udata_open(U_ICUDATA_BRKITR, ext, fnbuff, &status); if (U_FAILURE(status)) { ures_close(b); return NULL; } - // We found the break rules; now see if a dictionary is needed - if (dict) - { - UErrorCode localStatus = U_ZERO_ERROR; - brkName = &brkNameStack; - ures_initStackObject(brkName); - brkName = ures_getByKeyWithFallback(b, "BreakDictionaryData", brkName, &localStatus); -#if 0 - if (U_SUCCESS(localStatus)) { - brkfname = ures_getString(&brkname, &size, &localStatus); - } -#endif - if (U_SUCCESS(localStatus)) { -#if 0 - u_UCharsToChars(brkfname, fnbuff, size); - fnbuff[size] = '\0'; -#endif - result = new DictionaryBasedBreakIterator(file, "thaidict.brk", status); - } - ures_close(brkName); - } - - // If there is still no result but we haven't had an error, no dictionary, - // so make a non-dictionary break iterator - if (U_SUCCESS(status) && result == NULL) { - result = new RuleBasedBreakIterator(file, status); - } + // Create a RuleBasedBreakIterator + result = new RuleBasedBreakIterator(file, status); - // If there is a result, set the valid locale and actual locale + // If there is a result, set the valid locale and actual locale, and the kind if (U_SUCCESS(status) && result != NULL) { U_LOCALE_BASED(locBased, *result); locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale); + result->setBreakType(kind); } ures_close(b); @@ -363,7 +364,7 @@ BreakIterator::getAvailableLocales(void) // ------------------------------------- BreakIterator* -BreakIterator::createInstance(const Locale& loc, UBreakIteratorType kind, UErrorCode& status) +BreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& status) { if (U_FAILURE(status)) { return NULL; @@ -372,7 +373,7 @@ BreakIterator::createInstance(const Locale& loc, UBreakIteratorType kind, UError u_init(&status); #if !UCONFIG_NO_SERVICE if (hasService()) { - Locale actualLoc; + Locale actualLoc(""); BreakIterator *result = (BreakIterator*)gService->get(loc, kind, &actualLoc, status); // TODO: The way the service code works in ICU 2.8 is that if // there is a real registered break iterator, the actualLoc @@ -410,19 +411,19 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) BreakIterator *result = NULL; switch (kind) { case UBRK_CHARACTER: - result = BreakIterator::buildInstance(loc, "grapheme", FALSE, status); + result = BreakIterator::buildInstance(loc, "grapheme", kind, status); break; case UBRK_WORD: - result = BreakIterator::buildInstance(loc, "word", TRUE, status); + result = BreakIterator::buildInstance(loc, "word", kind, status); break; case UBRK_LINE: - result = BreakIterator::buildInstance(loc, "line", TRUE, status); + result = BreakIterator::buildInstance(loc, "line", kind, status); break; case UBRK_SENTENCE: - result = BreakIterator::buildInstance(loc, "sentence", FALSE, status); + result = BreakIterator::buildInstance(loc, "sentence", kind, status); break; case UBRK_TITLE: - result = BreakIterator::buildInstance(loc, "title", FALSE, status); + result = BreakIterator::buildInstance(loc, "title", kind, status); break; default: status = U_ILLEGAL_ARGUMENT_ERROR; diff --git a/icuSources/common/caniter.cpp b/icuSources/common/caniter.cpp index db9328c9..04d48ba8 100644 --- a/icuSources/common/caniter.cpp +++ b/icuSources/common/caniter.cpp @@ -1,6 +1,6 @@ /* ***************************************************************************** - * Copyright (C) 1996-2004, International Business Machines Corporation and * + * Copyright (C) 1996-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ***************************************************************************** */ @@ -51,29 +51,7 @@ Results for: {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMB *@author M. Davis *@draft */ -#if 0 -static UBool PROGRESS = FALSE; -#include -#include "unicode/translit.h" - -UErrorCode status = U_ZERO_ERROR; - -// Just for testing - remove, not thread safe. -static const char* UToS(const UnicodeString &source) { - static char buffer[256]; - buffer[source.extract(0, source.length(), buffer)] = 0; - return buffer; -} - -static const UnicodeString &Tr(const UnicodeString &source) { - static Transliterator *NAME = Transliterator::createInstance("name", UTRANS_FORWARD, status); - static UnicodeString result; - result = source; - NAME->transliterate(result); - return result; -} -#endif // public U_NAMESPACE_BEGIN @@ -102,24 +80,26 @@ CanonicalIterator::~CanonicalIterator() { } void CanonicalIterator::cleanPieces() { - int32_t i = 0; - if(pieces != NULL) { - for(i = 0; i < pieces_length; i++) { - if(pieces[i] != NULL) { - delete[] pieces[i]; - } - } - uprv_free(pieces); - pieces = NULL; + int32_t i = 0; + if(pieces != NULL) { + for(i = 0; i < pieces_length; i++) { + if(pieces[i] != NULL) { + delete[] pieces[i]; + } + } + uprv_free(pieces); + pieces = NULL; + pieces_length = 0; + } if(pieces_lengths != NULL) { - uprv_free(pieces_lengths); + uprv_free(pieces_lengths); + pieces_lengths = NULL; } - pieces_lengths = NULL; if(current != NULL) { - uprv_free(current); + uprv_free(current); + current = NULL; + current_length = 0; } - current = NULL; - } } /** @@ -180,6 +160,12 @@ UnicodeString CanonicalIterator::next() { * while changing the source string, saving object creation. */ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &status) { + int32_t list_length = 0; + UChar32 cp = 0; + int32_t start = 0; + int32_t i = 0; + UnicodeString *list = NULL; + Normalizer::normalize(newSource, UNORM_NFD, 0, source, status); if(U_FAILURE(status)) { return; @@ -190,60 +176,35 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st // catch degenerate case if (newSource.length() == 0) { - pieces_length = 1; pieces = (UnicodeString **)uprv_malloc(sizeof(UnicodeString *)); - /* test for NULL */ - if (pieces == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - current_length = 1; + pieces_lengths = (int32_t*)uprv_malloc(1 * sizeof(int32_t)); + pieces_length = 1; current = (int32_t*)uprv_malloc(1 * sizeof(int32_t)); - /* test for NULL */ - if (current == NULL) { + current_length = 1; + if (pieces == NULL || pieces_lengths == NULL || current == NULL) { status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(pieces); - pieces = NULL; - return; + goto CleanPartialInitialization; } current[0] = 0; pieces[0] = new UnicodeString[1]; - /* test for NULL */ + pieces_lengths[0] = 1; if (pieces[0] == 0) { status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(pieces); - pieces = NULL; - uprv_free(current); - return; + goto CleanPartialInitialization; } - pieces[0][0] = UnicodeString(); - pieces_lengths = (int32_t*)uprv_malloc(1 * sizeof(int32_t)); - /* test for NULL */ - if (pieces_lengths == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(pieces); - pieces = NULL; - uprv_free(current); - return; - } - pieces_lengths[0] = 1; return; } - UnicodeString *list = new UnicodeString[source.length()]; - /* test for NULL */ + list = new UnicodeString[source.length()]; if (list == 0) { status = U_MEMORY_ALLOCATION_ERROR; - return; + goto CleanPartialInitialization; } - int32_t list_length = 0; - UChar32 cp = 0; - int32_t start = 0; // i should initialy be the number of code units at the // start of the string - int32_t i = UTF16_CHAR_LENGTH(source.char32At(0)); + i = UTF16_CHAR_LENGTH(source.char32At(0)); //int32_t i = 1; // find the segments // This code iterates through the source string and @@ -262,36 +223,17 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st // allocate the arrays, and find the strings that are CE to each segment pieces = (UnicodeString **)uprv_malloc(list_length * sizeof(UnicodeString *)); - /* test for NULL */ - if (pieces == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - delete[] list; - return; - } pieces_length = list_length; pieces_lengths = (int32_t*)uprv_malloc(list_length * sizeof(int32_t)); - /* test for NULL */ - if (pieces_lengths == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - delete[] list; - uprv_free(pieces); - pieces = NULL; - return; - } - - current_length = list_length; current = (int32_t*)uprv_malloc(list_length * sizeof(int32_t)); - /* test for NULL */ - if (current == 0) { + current_length = list_length; + if (pieces == NULL || pieces_lengths == NULL || current == NULL) { status = U_MEMORY_ALLOCATION_ERROR; - delete[] list; - uprv_free(pieces); - pieces = NULL; - uprv_free(pieces_lengths); - return; + goto CleanPartialInitialization; } + for (i = 0; i < current_length; i++) { - current[i] = 0; + current[i] = 0; } // for each segment, get all the combinations that can produce // it after NFD normalization @@ -301,6 +243,13 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st } delete[] list; + return; +// Common section to cleanup all local variables and reset object variables. +CleanPartialInitialization: + if (list != NULL) { + delete[] list; + } + cleanPieces(); } /** @@ -311,7 +260,7 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st */ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros, Hashtable *result, UErrorCode &status) { if(U_FAILURE(status)) { - return; + return; } //if (PROGRESS) printf("Permute: %s\n", UToS(Tr(source))); int32_t i = 0; @@ -320,27 +269,23 @@ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros // if zero or one character, just return a set with it // we check for length < 2 to keep from counting code points all the time if (source.length() <= 2 && source.countChar32() <= 1) { - UnicodeString *toPut = new UnicodeString(source); - /* test for NULL */ - if (toPut == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - result->put(source, toPut, status); - return; + UnicodeString *toPut = new UnicodeString(source); + /* test for NULL */ + if (toPut == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + result->put(source, toPut, status); + return; } // otherwise iterate through the string, and recursively permute all the other characters UChar32 cp; - Hashtable *subpermute = new Hashtable(status); - /* test for NULL */ - if (subpermute == 0) { - status = U_MEMORY_ALLOCATION_ERROR; + Hashtable subpermute(status); + if(U_FAILURE(status)) { return; } - if (U_SUCCESS(status)) { - subpermute->setValueDeleter(uhash_deleteUnicodeString); - } + subpermute.setValueDeleter(uhash_deleteUnicodeString); for (i = 0; i < source.length(); i += UTF16_CHAR_LENGTH(cp)) { cp = source.char32At(i); @@ -356,37 +301,34 @@ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros continue; } - subpermute->removeAll(); + subpermute.removeAll(); // see what the permutations of the characters before and after this one are //Hashtable *subpermute = permute(source.substring(0,i) + source.substring(i + UTF16.getCharCount(cp))); - permute(subPermuteString.replace(i, UTF16_CHAR_LENGTH(cp), NULL, 0), skipZeros, subpermute, status); + permute(subPermuteString.replace(i, UTF16_CHAR_LENGTH(cp), NULL, 0), skipZeros, &subpermute, status); /* Test for buffer overflows */ if(U_FAILURE(status)) { - delete subpermute; return; } // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents // of source at this point. // prefix this character to all of them - ne = subpermute->nextElement(el); + ne = subpermute.nextElement(el); while (ne != NULL) { - UnicodeString *permRes = (UnicodeString *)(ne->value.pointer); - UnicodeString *chStr = new UnicodeString(cp); - //test for NULL - if (chStr == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - delete subpermute; - return; - } + UnicodeString *permRes = (UnicodeString *)(ne->value.pointer); + UnicodeString *chStr = new UnicodeString(cp); + //test for NULL + if (chStr == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } chStr->append(*permRes); //*((UnicodeString *)(ne->value.pointer)); //if (PROGRESS) printf(" Piece: %s\n", UToS(*chStr)); result->put(*chStr, chStr, status); - ne = subpermute->nextElement(el); + ne = subpermute.nextElement(el); } } - delete subpermute; //return result; } @@ -394,53 +336,39 @@ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros // we have a segment, in NFD. Find all the strings that are canonically equivalent to it. UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status) { - //private String[] getEquivalents(String segment) - - Hashtable *result = new Hashtable(status); - /* test for NULL */ - if (result == 0) { - status = U_MEMORY_ALLOCATION_ERROR; + Hashtable result(status); + Hashtable permutations(status); + Hashtable basic(status); + if (U_FAILURE(status)) { return 0; } - if (U_SUCCESS(status)) { - result->setValueDeleter(uhash_deleteUnicodeString); - } + result.setValueDeleter(uhash_deleteUnicodeString); + permutations.setValueDeleter(uhash_deleteUnicodeString); + basic.setValueDeleter(uhash_deleteUnicodeString); + UChar USeg[256]; int32_t segLen = segment.extract(USeg, 256, status); - Hashtable *basic = getEquivalents2(USeg, segLen, status); - //Hashtable *basic = getEquivalents2(segment, segLen, status); + getEquivalents2(&basic, USeg, segLen, status); // now get all the permutations // add only the ones that are canonically equivalent // TODO: optimize by not permuting any class zero. - Hashtable *permutations = new Hashtable(status); - /* test for NULL */ - if (permutations == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - delete result; - delete basic; - return 0; - } - if (U_SUCCESS(status)) { - permutations->setValueDeleter(uhash_deleteUnicodeString); - } - const UHashElement *ne = NULL; int32_t el = -1; //Iterator it = basic.iterator(); - ne = basic->nextElement(el); + ne = basic.nextElement(el); //while (it.hasNext()) while (ne != NULL) { //String item = (String) it.next(); UnicodeString item = *((UnicodeString *)(ne->value.pointer)); - permutations->removeAll(); - permute(item, CANITER_SKIP_ZEROES, permutations, status); + permutations.removeAll(); + permute(item, CANITER_SKIP_ZEROES, &permutations, status); const UHashElement *ne2 = NULL; int32_t el2 = -1; //Iterator it2 = permutations.iterator(); - ne2 = permutations->nextElement(el2); + ne2 = permutations.nextElement(el2); //while (it2.hasNext()) while (ne2 != NULL) { //String possible = (String) it2.next(); @@ -453,77 +381,59 @@ UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, i if (attempt==segment) { //if (PROGRESS) printf("Adding Permutation: %s\n", UToS(Tr(*possible))); // TODO: use the hashtable just to catch duplicates - store strings directly (somehow). - result->put(possible, new UnicodeString(possible), status); //add(possible); + result.put(possible, new UnicodeString(possible), status); //add(possible); } else { //if (PROGRESS) printf("-Skipping Permutation: %s\n", UToS(Tr(*possible))); } - ne2 = permutations->nextElement(el2); + ne2 = permutations.nextElement(el2); } - ne = basic->nextElement(el); + ne = basic.nextElement(el); } /* Test for buffer overflows */ if(U_FAILURE(status)) { - delete result; - delete permutations; - delete basic; return 0; } // convert into a String[] to clean up storage //String[] finalResult = new String[result.size()]; UnicodeString *finalResult = NULL; int32_t resultCount; - if((resultCount = result->count())) { - finalResult = new UnicodeString[resultCount]; - } else { - status = U_ILLEGAL_ARGUMENT_ERROR; - } - /* test for NULL */ - if (finalResult == 0) { - if(U_SUCCESS(status)) { - status = U_MEMORY_ALLOCATION_ERROR; - } - delete result; - delete permutations; - delete basic; - return 0; + if((resultCount = result.count())) { + finalResult = new UnicodeString[resultCount]; + if (finalResult == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + } + else { + status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; } //result.toArray(finalResult); result_len = 0; el = -1; - ne = result->nextElement(el); + ne = result.nextElement(el); while(ne != NULL) { - UnicodeString finResult = *((UnicodeString *)(ne->value.pointer)); - finalResult[result_len++] = finResult; - ne = result->nextElement(el); + finalResult[result_len++] = *((UnicodeString *)(ne->value.pointer)); + ne = result.nextElement(el); } - delete permutations; - delete basic; - delete result; return finalResult; } -Hashtable *CanonicalIterator::getEquivalents2(const UChar *segment, int32_t segLen, UErrorCode &status) { -//Hashtable *CanonicalIterator::getEquivalents2(const UnicodeString &segment, int32_t segLen, UErrorCode &status) { +Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status) { - Hashtable *result = new Hashtable(status); - /* test for NULL */ - if (result == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; - } - if (U_SUCCESS(status)) { - result->setValueDeleter(uhash_deleteUnicodeString); + if (U_FAILURE(status)) { + return NULL; } //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(segment))); UnicodeString toPut(segment, segLen); - result->put(toPut, new UnicodeString(toPut), status); + fillinResult->put(toPut, new UnicodeString(toPut), status); USerializedSet starts; @@ -534,48 +444,45 @@ Hashtable *CanonicalIterator::getEquivalents2(const UChar *segment, int32_t segL // see if any character is at the start of some decomposition UTF_GET_CHAR(segment, 0, i, segLen, cp); if (!unorm_getCanonStartSet(cp, &starts)) { - continue; + continue; } // if so, see which decompositions match for(j = 0, cp = end+1; cp <= end || uset_getSerializedRange(&starts, j++, &cp, &end); ++cp) { - //Hashtable *remainder = extract(cp, segment, segLen, i, status); - Hashtable *remainder = extract(cp, segment, segLen, i, status); - if (remainder == NULL) continue; + Hashtable remainder(status); + remainder.setValueDeleter(uhash_deleteUnicodeString); + if (extract(&remainder, cp, segment, segLen, i, status) == NULL) { + continue; + } // there were some matches, so add all the possibilities to the set. UnicodeString prefix(segment, i); prefix += cp; - const UHashElement *ne = NULL; int32_t el = -1; - ne = remainder->nextElement(el); + const UHashElement *ne = remainder.nextElement(el); while (ne != NULL) { UnicodeString item = *((UnicodeString *)(ne->value.pointer)); UnicodeString *toAdd = new UnicodeString(prefix); /* test for NULL */ if (toAdd == 0) { status = U_MEMORY_ALLOCATION_ERROR; - delete result; - delete remainder; - return 0; + return NULL; } *toAdd += item; - result->put(*toAdd, toAdd, status); + fillinResult->put(*toAdd, toAdd, status); //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(*toAdd))); - ne = remainder->nextElement(el); + ne = remainder.nextElement(el); } - - delete remainder; } } /* Test for buffer overflows */ if(U_FAILURE(status)) { - return 0; + return NULL; } - return result; + return fillinResult; } /** @@ -583,11 +490,15 @@ Hashtable *CanonicalIterator::getEquivalents2(const UChar *segment, int32_t segL * (with canonical rearrangment!) * If so, take the remainder, and return the equivalents */ -Hashtable *CanonicalIterator::extract(UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) { +Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) { //Hashtable *CanonicalIterator::extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) { //if (PROGRESS) printf(" extract: %s, ", UToS(Tr(UnicodeString(comp)))); //if (PROGRESS) printf("%s, %i\n", UToS(Tr(segment)), segmentPos); + if (U_FAILURE(status)) { + return NULL; + } + const int32_t bufSize = 256; int32_t bufLen = 0; UChar temp[bufSize]; @@ -622,7 +533,7 @@ Hashtable *CanonicalIterator::extract(UChar32 comp, const UChar *segment, int32_ i = segmentPos; while(i < segLen) { - UTF_NEXT_CHAR(segment, i, segLen, cp); + UTF_NEXT_CHAR(segment, i, segLen, cp); if (cp == decompCp) { // if equal, eat another cp from decomp @@ -669,20 +580,14 @@ Hashtable *CanonicalIterator::extract(UChar32 comp, const UChar *segment, int32_ */ } } - if (!ok) return NULL; // we failed, characters left over + if (!ok) + return NULL; // we failed, characters left over //if (PROGRESS) printf("Matches\n"); if (bufLen == 0) { - Hashtable *result = new Hashtable(status); - /* test for NULL */ - if (result == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; - } - result->setValueDeleter(uhash_deleteUnicodeString); - result->put(UnicodeString(), new UnicodeString(), status); - return result; // succeed, but no remainder + fillinResult->put(UnicodeString(), new UnicodeString(), status); + return fillinResult; // succeed, but no remainder } // brute force approach @@ -692,16 +597,13 @@ Hashtable *CanonicalIterator::extract(UChar32 comp, const UChar *segment, int32_ UChar trial[bufSize]; unorm_decompose(trial, bufSize, temp, tempLen, FALSE, 0, &status); - /* Test for buffer overflows */ - if(U_FAILURE(status)) { - return 0; - } - - if(uprv_memcmp(segment+segmentPos, trial, (segLen - segmentPos)*sizeof(UChar)) != 0) { - return NULL; + if(U_FAILURE(status) + || uprv_memcmp(segment+segmentPos, trial, (segLen - segmentPos)*sizeof(UChar)) != 0) + { + return NULL; } - return getEquivalents2(buff, bufLen, status); + return getEquivalents2(fillinResult, buff, bufLen, status); } U_NAMESPACE_END diff --git a/icuSources/common/charstr.h b/icuSources/common/charstr.h index 3f4302a1..3bb11cba 100644 --- a/icuSources/common/charstr.h +++ b/icuSources/common/charstr.h @@ -34,7 +34,7 @@ public: // @param str The unicode string to be converted to char * // @param codepage The char * code page. "" for invariant conversion. // NULL for default code page. - inline CharString(const UnicodeString& str, const char *codepage); +// inline CharString(const UnicodeString& str, const char *codepage); #endif inline CharString(const UnicodeString& str); @@ -51,6 +51,9 @@ private: #if !UCONFIG_NO_CONVERSION +// PLEASE DON'T USE THIS FUNCTION. +// We don't want the static dependency on conversion or the performance hit that comes from a codepage conversion. +/* inline CharString::CharString(const UnicodeString& str, const char *codepage) { int32_t len; ptr = buf; @@ -59,7 +62,7 @@ inline CharString::CharString(const UnicodeString& str, const char *codepage) { ptr = (char *)uprv_malloc(len+1); str.extract(0, 0x7FFFFFFF, ptr, len+1, codepage); } -} +}*/ #endif diff --git a/icuSources/common/cmemory.c b/icuSources/common/cmemory.c index 45902dc9..0f93f36a 100644 --- a/icuSources/common/cmemory.c +++ b/icuSources/common/cmemory.c @@ -18,8 +18,9 @@ * ****************************************************************************** */ -#include "cmemory.h" #include "unicode/uclean.h" +#include "cmemory.h" +#include /* uprv_malloc(0) returns a pointer to this read-only data. */ static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0}; diff --git a/icuSources/common/cmemory.h b/icuSources/common/cmemory.h index ffcfa2db..da65d7ce 100644 --- a/icuSources/common/cmemory.h +++ b/icuSources/common/cmemory.h @@ -25,7 +25,6 @@ #define CMEMORY_H #include "unicode/utypes.h" -#include #include diff --git a/icuSources/common/common.dsp b/icuSources/common/common.dsp deleted file mode 100644 index eeabc7f2..00000000 --- a/icuSources/common/common.dsp +++ /dev/null @@ -1,3787 +0,0 @@ -# Microsoft Developer Studio Project File - Name="common" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=common - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "common.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "common.mak" CFG="common - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "common - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "common - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "common - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "common - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "common - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /Zi /O2 /Ob2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /D "U_COMMON_IMPLEMENTATION" /D "UDATA_STATIC_LIB" /FR /FD /GF /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 icudt.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x4a800000" /dll /machine:I386 /out:"..\..\bin\icuuc32.dll" /implib:"..\..\lib\icuuc.lib" /libpath:"..\..\lib" -# SUBTRACT LINK32 /pdb:none /debug - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /D "U_COMMON_IMPLEMENTATION" /D "UDATA_STATIC_LIB" /D "RBBI_DEBUG" /FR /FD /GF /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icudt.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x4a800000" /dll /debug /machine:I386 /out:"..\..\bin\icuuc32d.dll" /implib:"..\..\lib\icuucd.lib" /pdbtype:sept /libpath:"..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /Ob2 /D "NDEBUG" /D "WIN64" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /D "U_COMMON_IMPLEMENTATION" /D "UDATA_STATIC_LIB" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GF /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 icudt.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x4a800000" /dll /machine:IX86 /out:"..\..\bin\icuuc32.dll" /implib:"..\..\lib\icuuc.lib" /libpath:"..\..\lib" /machine:IA64 -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN64" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMMON_EXPORTS" /D "U_COMMON_IMPLEMENTATION" /D "UDATA_STATIC_LIB" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GF /GZ /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icudt.lib kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /base:"0x4a800000" /dll /incremental:no /debug /machine:IX86 /out:"..\..\bin\icuuc32d.dll" /implib:"..\..\lib\icuucd.lib" /pdbtype:sept /libpath:"..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "common - Win32 Release" -# Name "common - Win32 Debug" -# Name "common - Win64 Release" -# Name "common - Win64 Debug" -# Begin Group "bidi" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\ubidi.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ubidi.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ubidi.h - -"..\..\include\unicode\ubidi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ubidi.h - -"..\..\include\unicode\ubidi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ubidi.h - -"..\..\include\unicode\ubidi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ubidi.h - -"..\..\include\unicode\ubidi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ubidiimp.h -# End Source File -# Begin Source File - -SOURCE=.\ubidiln.c -# End Source File -# Begin Source File - -SOURCE=.\ubidiwrt.c -# End Source File -# Begin Source File - -SOURCE=.\ushape.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ushape.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ushape.h - -"..\..\include\unicode\ushape.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ushape.h - -"..\..\include\unicode\ushape.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ushape.h - -"..\..\include\unicode\ushape.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ushape.h - -"..\..\include\unicode\ushape.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "break iteration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\brkdict.cpp -# End Source File -# Begin Source File - -SOURCE=.\brkdict.h -# End Source File -# Begin Source File - -SOURCE=.\brkiter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\brkiter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\brkiter.h - -"..\..\include\unicode\brkiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\brkiter.h - -"..\..\include\unicode\brkiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\brkiter.h - -"..\..\include\unicode\brkiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\brkiter.h - -"..\..\include\unicode\brkiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\dbbi.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\dbbi.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\dbbi.h - -"..\..\include\unicode\dbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\dbbi.h - -"..\..\include\unicode\dbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\dbbi.h - -"..\..\include\unicode\dbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\dbbi.h - -"..\..\include\unicode\dbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\dbbi_tbl.cpp -# End Source File -# Begin Source File - -SOURCE=.\dbbi_tbl.h -# End Source File -# Begin Source File - -SOURCE=.\rbbi.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\rbbi.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\rbbi.h - -"..\..\include\unicode\rbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\rbbi.h - -"..\..\include\unicode\rbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\rbbi.h - -"..\..\include\unicode\rbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\rbbi.h - -"..\..\include\unicode\rbbi.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\rbbidata.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbidata.h -# End Source File -# Begin Source File - -SOURCE=.\rbbinode.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbinode.h -# End Source File -# Begin Source File - -SOURCE=.\rbbirb.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbirb.h -# End Source File -# Begin Source File - -SOURCE=.\rbbirpt.h -# End Source File -# Begin Source File - -SOURCE=.\rbbiscan.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbiscan.h -# End Source File -# Begin Source File - -SOURCE=.\rbbisetb.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbisetb.h -# End Source File -# Begin Source File - -SOURCE=.\rbbistbl.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbitblb.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbitblb.h -# End Source File -# Begin Source File - -SOURCE=.\ubrk.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\ubrk.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ubrk.h - -"..\..\include\unicode\ubrk.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ubrk.h - -"..\..\include\unicode\ubrk.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ubrk.h - -"..\..\include\unicode\ubrk.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ubrk.h - -"..\..\include\unicode\ubrk.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "collation" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\ucol_swp.c -# ADD CPP /I "..\i18n" -# End Source File -# Begin Source File - -SOURCE=.\ucol_swp.h -# End Source File -# End Group -# Begin Group "collections" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\hash.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\strenum.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\strenum.h - -"..\..\include\unicode\strenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\strenum.h - -"..\..\include\unicode\strenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\strenum.h - -"..\..\include\unicode\strenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\strenum.h - -"..\..\include\unicode\strenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uarrsort.c -# End Source File -# Begin Source File - -SOURCE=.\uarrsort.h -# End Source File -# Begin Source File - -SOURCE=.\ucmp8.c -# End Source File -# Begin Source File - -SOURCE=.\ucmp8.h -# End Source File -# Begin Source File - -SOURCE=.\uenum.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\uenum.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uenum.h - -"..\..\include\unicode\uenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uenum.h - -"..\..\include\unicode\uenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uenum.h - -"..\..\include\unicode\uenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uenum.h - -"..\..\include\unicode\uenum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uenumimp.h -# End Source File -# Begin Source File - -SOURCE=.\uhash.c -# End Source File -# Begin Source File - -SOURCE=.\uhash.h -# End Source File -# Begin Source File - -SOURCE=.\uhash_us.cpp -# End Source File -# Begin Source File - -SOURCE=.\ustack.cpp -# End Source File -# Begin Source File - -SOURCE=.\ustrenum.cpp -# End Source File -# Begin Source File - -SOURCE=.\ustrenum.h -# End Source File -# Begin Source File - -SOURCE=.\utrie.c -# End Source File -# Begin Source File - -SOURCE=.\utrie.h -# End Source File -# Begin Source File - -SOURCE=.\uvector.cpp -# End Source File -# Begin Source File - -SOURCE=.\uvector.h -# End Source File -# Begin Source File - -SOURCE=.\uvectr32.cpp -# End Source File -# Begin Source File - -SOURCE=.\uvectr32.h -# End Source File -# End Group -# Begin Group "configuration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\common.rc -# End Source File -# Begin Source File - -SOURCE=.\cpputils.h -# End Source File -# Begin Source File - -SOURCE=.\filestrm.c -# End Source File -# Begin Source File - -SOURCE=.\filestrm.h -# End Source File -# Begin Source File - -SOURCE=.\locmap.c -# End Source File -# Begin Source File - -SOURCE=.\locmap.h -# End Source File -# Begin Source File - -SOURCE=.\mutex.h -# End Source File -# Begin Source File - -SOURCE=.\putil.c -# ADD CPP /Ze -# End Source File -# Begin Source File - -SOURCE=.\unicode\putil.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\putil.h - -"..\..\include\unicode\putil.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\putil.h - -"..\..\include\unicode\putil.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\putil.h - -"..\..\include\unicode\putil.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\putil.h - -"..\..\include\unicode\putil.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\pwin32.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\pwin32.h - -"..\..\include\unicode\pwin32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\pwin32.h - -"..\..\include\unicode\pwin32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\pwin32.h - -"..\..\include\unicode\pwin32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\pwin32.h - -"..\..\include\unicode\pwin32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uassert.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\uconfig.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uconfig.h - -"..\..\include\unicode\uconfig.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uconfig.h - -"..\..\include\unicode\uconfig.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uconfig.h - -"..\..\include\unicode\uconfig.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uconfig.h - -"..\..\include\unicode\uconfig.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\udeprctd.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\udeprctd.h - -"..\..\include\unicode\udeprctd.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\udeprctd.h - -"..\..\include\unicode\udeprctd.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\udeprctd.h - -"..\..\include\unicode\udeprctd.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\udeprctd.h - -"..\..\include\unicode\udeprctd.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\udraft.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\udraft.h - -"..\..\include\unicode\udraft.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\udraft.h - -"..\..\include\unicode\udraft.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\udraft.h - -"..\..\include\unicode\udraft.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\udraft.h - -"..\..\include\unicode\udraft.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\umachine.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\umachine.h - -"..\..\include\unicode\umachine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\umachine.h - -"..\..\include\unicode\umachine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\umachine.h - -"..\..\include\unicode\umachine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\umachine.h - -"..\..\include\unicode\umachine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\umutex.c -# ADD CPP /Ze -# End Source File -# Begin Source File - -SOURCE=.\umutex.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\uobslete.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uobslete.h - -"..\..\include\unicode\uobslete.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uobslete.h - -"..\..\include\unicode\uobslete.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uobslete.h - -"..\..\include\unicode\uobslete.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uobslete.h - -"..\..\include\unicode\uobslete.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\urename.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\urename.h - -"..\..\include\unicode\urename.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\urename.h - -"..\..\include\unicode\urename.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\urename.h - -"..\..\include\unicode\urename.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\urename.h - -"..\..\include\unicode\urename.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\utrace.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\utrace.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utrace.h - -"..\..\include\unicode\utrace.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utrace.h - -"..\..\include\unicode\utrace.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utrace.h - -"..\..\include\unicode\utrace.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utrace.h - -"..\..\include\unicode\utrace.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\utracimp.h -# End Source File -# Begin Source File - -SOURCE=.\utypes.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\utypes.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utypes.h - -"..\..\include\unicode\utypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utypes.h - -"..\..\include\unicode\utypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utypes.h - -"..\..\include\unicode\utypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utypes.h - -"..\..\include\unicode\utypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\uversion.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uversion.h - -"..\..\include\unicode\uversion.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uversion.h - -"..\..\include\unicode\uversion.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uversion.h - -"..\..\include\unicode\uversion.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uversion.h - -"..\..\include\unicode\uversion.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "conversion" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\ucnv.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucnv.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucnv.h - -"..\..\include\unicode\ucnv.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucnv.h - -"..\..\include\unicode\ucnv.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucnv.h - -"..\..\include\unicode\ucnv.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucnv.h - -"..\..\include\unicode\ucnv.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucnv2022.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_bld.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_bld.h -# End Source File -# Begin Source File - -SOURCE=.\ucnv_cb.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucnv_cb.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucnv_cb.h - -"..\..\include\unicode\ucnv_cb.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucnv_cb.h - -"..\..\include\unicode\ucnv_cb.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucnv_cb.h - -"..\..\include\unicode\ucnv_cb.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucnv_cb.h - -"..\..\include\unicode\ucnv_cb.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucnv_cnv.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_cnv.h -# End Source File -# Begin Source File - -SOURCE=.\ucnv_err.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucnv_err.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucnv_err.h - -"..\..\include\unicode\ucnv_err.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucnv_err.h - -"..\..\include\unicode\ucnv_err.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucnv_err.h - -"..\..\include\unicode\ucnv_err.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucnv_err.h - -"..\..\include\unicode\ucnv_err.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucnv_ext.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_ext.h -# End Source File -# Begin Source File - -SOURCE=.\ucnv_imp.h -# End Source File -# Begin Source File - -SOURCE=.\ucnv_io.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_io.h -# End Source File -# Begin Source File - -SOURCE=.\ucnv_lmb.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_set.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_u16.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_u32.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_u7.c -# End Source File -# Begin Source File - -SOURCE=.\ucnv_u8.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvbocu.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvdisp.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvhz.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvisci.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvlat1.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvmbcs.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvmbcs.h -# End Source File -# Begin Source File - -SOURCE=.\ucnvscsu.c -# End Source File -# End Group -# Begin Group "data & memory" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cmemory.c -# End Source File -# Begin Source File - -SOURCE=.\cmemory.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\uclean.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uclean.h - -"..\..\include\unicode\uclean.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uclean.h - -"..\..\include\unicode\uclean.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uclean.h - -"..\..\include\unicode\uclean.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uclean.h - -"..\..\include\unicode\uclean.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucln.h -# End Source File -# Begin Source File - -SOURCE=.\ucln_cmn.c -# End Source File -# Begin Source File - -SOURCE=.\ucln_cmn.h -# End Source File -# Begin Source File - -SOURCE=.\ucmndata.c -# End Source File -# Begin Source File - -SOURCE=.\ucmndata.h -# End Source File -# Begin Source File - -SOURCE=.\udata.c -# ADD CPP /Za -# End Source File -# Begin Source File - -SOURCE=.\unicode\udata.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\udata.h - -"..\..\include\unicode\udata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\udata.h - -"..\..\include\unicode\udata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\udata.h - -"..\..\include\unicode\udata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\udata.h - -"..\..\include\unicode\udata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\udatamem.c -# End Source File -# Begin Source File - -SOURCE=.\udatamem.h -# End Source File -# Begin Source File - -SOURCE=.\udataswp.c -# End Source File -# Begin Source File - -SOURCE=.\udataswp.h -# End Source File -# Begin Source File - -SOURCE=.\uinit.c -# End Source File -# Begin Source File - -SOURCE=.\umapfile.c -# ADD CPP /Ze -# End Source File -# Begin Source File - -SOURCE=.\umapfile.h -# End Source File -# Begin Source File - -SOURCE=.\uobject.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uobject.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uobject.h - -"..\..\include\unicode\uobject.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uobject.h - -"..\..\include\unicode\uobject.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uobject.h - -"..\..\include\unicode\uobject.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uobject.h - -"..\..\include\unicode\uobject.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "formatting" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\unicode\parseerr.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\parseerr.h - -"..\..\include\unicode\parseerr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\parseerr.h - -"..\..\include\unicode\parseerr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\parseerr.h - -"..\..\include\unicode\parseerr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\parseerr.h - -"..\..\include\unicode\parseerr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\parsepos.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\parsepos.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\parsepos.h - -"..\..\include\unicode\parsepos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\parsepos.h - -"..\..\include\unicode\parsepos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\parsepos.h - -"..\..\include\unicode\parsepos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\parsepos.h - -"..\..\include\unicode\parsepos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\umisc.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\umisc.h -InputName=umisc - -"..\..\include\unicode\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\umisc.h -InputName=umisc - -"..\..\include\unicode\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\umisc.h -InputName=umisc - -"..\..\include\unicode\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\umisc.h -InputName=umisc - -"..\..\include\unicode\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ustrfmt.c -# End Source File -# Begin Source File - -SOURCE=.\ustrfmt.h -# End Source File -# Begin Source File - -SOURCE=.\util.cpp -# End Source File -# Begin Source File - -SOURCE=.\util.h -# End Source File -# End Group -# Begin Group "idna" - -# PROP Default_Filter "*.c,*.h" -# Begin Source File - -SOURCE=.\punycode.c -# End Source File -# Begin Source File - -SOURCE=.\punycode.h -# End Source File -# Begin Source File - -SOURCE=.\uidna.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uidna.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uidna.h - -"..\..\include\unicode\uidna.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uidna.h - -"..\..\include\unicode\uidna.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uidna.h - -"..\..\include\unicode\uidna.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uidna.h - -"..\..\include\unicode\uidna.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "locales & resources" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\locbased.cpp -# End Source File -# Begin Source File - -SOURCE=.\locbased.h -# End Source File -# Begin Source File - -SOURCE=.\locid.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\locid.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\locid.h - -"..\..\include\unicode\locid.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\locid.h - -"..\..\include\unicode\locid.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\locid.h - -"..\..\include\unicode\locid.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\locid.h - -"..\..\include\unicode\locid.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\resbund.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\resbund.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\resbund.h - -"..\..\include\unicode\resbund.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\resbund.h - -"..\..\include\unicode\resbund.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\resbund.h - -"..\..\include\unicode\resbund.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\resbund.h - -"..\..\include\unicode\resbund.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\resbund_cnv.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucat.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucat.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucat.h - -"..\..\include\unicode\ucat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucat.h - -"..\..\include\unicode\ucat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucat.h - -"..\..\include\unicode\ucat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucat.h - -"..\..\include\unicode\ucat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uloc.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\uloc.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uloc.h - -"..\..\include\unicode\uloc.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uloc.h - -"..\..\include\unicode\uloc.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uloc.h - -"..\..\include\unicode\uloc.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uloc.h - -"..\..\include\unicode\uloc.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ulocimp.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\ures.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ures.h - -"..\..\include\unicode\ures.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ures.h - -"..\..\include\unicode\ures.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ures.h - -"..\..\include\unicode\ures.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ures.h - -"..\..\include\unicode\ures.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ures_cnv.c -# End Source File -# Begin Source File - -SOURCE=.\uresbund.c -# End Source File -# Begin Source File - -SOURCE=.\uresdata.c -# End Source File -# Begin Source File - -SOURCE=.\uresdata.h -# End Source File -# Begin Source File - -SOURCE=.\uresimp.h -# End Source File -# End Group -# Begin Group "normalization" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\caniter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\caniter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\caniter.h - -"..\..\include\unicode\caniter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\caniter.h - -"..\..\include\unicode\caniter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\caniter.h - -"..\..\include\unicode\caniter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\caniter.h - -"..\..\include\unicode\caniter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\normlzr.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\normlzr.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\normlzr.h - -"..\..\include\unicode\normlzr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\normlzr.h - -"..\..\include\unicode\normlzr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\normlzr.h - -"..\..\include\unicode\normlzr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\normlzr.h - -"..\..\include\unicode\normlzr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unorm.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\unorm.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unorm.h - -"..\..\include\unicode\unorm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unorm.h - -"..\..\include\unicode\unorm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unorm.h - -"..\..\include\unicode\unorm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unorm.h - -"..\..\include\unicode\unorm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unorm_it.c -# End Source File -# Begin Source File - -SOURCE=.\unorm_it.h -# End Source File -# Begin Source File - -SOURCE=.\unormcmp.cpp -# End Source File -# Begin Source File - -SOURCE=.\unormimp.h -# End Source File -# End Group -# Begin Group "properties & sets" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\propname.cpp -# End Source File -# Begin Source File - -SOURCE=.\propname.h -# End Source File -# Begin Source File - -SOURCE=.\ruleiter.cpp -# End Source File -# Begin Source File - -SOURCE=.\ruleiter.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\symtable.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\symtable.h - -"..\..\include\unicode\symtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\symtable.h - -"..\..\include\unicode\symtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\symtable.h - -"..\..\include\unicode\symtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\symtable.h - -"..\..\include\unicode\symtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucase.c -# End Source File -# Begin Source File - -SOURCE=.\ucase.h -# End Source File -# Begin Source File - -SOURCE=.\uchar.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\uchar.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uchar.h - -"..\..\include\unicode\uchar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uchar.h - -"..\..\include\unicode\uchar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uchar.h - -"..\..\include\unicode\uchar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uchar.h - -"..\..\include\unicode\uchar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unames.c -# End Source File -# Begin Source File - -SOURCE=.\unifilt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\unifilt.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unifilt.h - -"..\..\include\unicode\unifilt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unifilt.h - -"..\..\include\unicode\unifilt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unifilt.h - -"..\..\include\unicode\unifilt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unifilt.h - -"..\..\include\unicode\unifilt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unifunct.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\unifunct.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unifunct.h - -"..\..\include\unicode\unifunct.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unifunct.h - -"..\..\include\unicode\unifunct.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unifunct.h - -"..\..\include\unicode\unifunct.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unifunct.h - -"..\..\include\unicode\unifunct.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\unimatch.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unimatch.h - -"..\..\include\unicode\unimatch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unimatch.h - -"..\..\include\unicode\unimatch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unimatch.h - -"..\..\include\unicode\unimatch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unimatch.h - -"..\..\include\unicode\unimatch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uniset.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uniset.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uniset.h - -"..\..\include\unicode\uniset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uniset.h - -"..\..\include\unicode\uniset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uniset.h - -"..\..\include\unicode\uniset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uniset.h - -"..\..\include\unicode\uniset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uniset_props.cpp -# End Source File -# Begin Source File - -SOURCE=.\uprops.c -# End Source File -# Begin Source File - -SOURCE=.\uprops.h -# End Source File -# Begin Source File - -SOURCE=.\usc_impl.c -# End Source File -# Begin Source File - -SOURCE=.\usc_impl.h -# End Source File -# Begin Source File - -SOURCE=.\uscript.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\uscript.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uscript.h - -"..\..\include\unicode\uscript.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uscript.h - -"..\..\include\unicode\uscript.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uscript.h - -"..\..\include\unicode\uscript.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uscript.h - -"..\..\include\unicode\uscript.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uset.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uset.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uset.h - -"..\..\include\unicode\uset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uset.h - -"..\..\include\unicode\uset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uset.h - -"..\..\include\unicode\uset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uset.h - -"..\..\include\unicode\uset.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uset_imp.h -# End Source File -# Begin Source File - -SOURCE=.\uset_props.cpp -# End Source File -# Begin Source File - -SOURCE=.\usetiter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\usetiter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\usetiter.h - -"..\..\include\unicode\usetiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\usetiter.h - -"..\..\include\unicode\usetiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\usetiter.h - -"..\..\include\unicode\usetiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\usetiter.h - -"..\..\include\unicode\usetiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "registration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\iculdata.h -# End Source File -# Begin Source File - -SOURCE=.\iculserv.cpp -# End Source File -# Begin Source File - -SOURCE=.\iculserv.h -# End Source File -# Begin Source File - -SOURCE=.\icunotif.cpp -# End Source File -# Begin Source File - -SOURCE=.\icunotif.h -# End Source File -# Begin Source File - -SOURCE=.\icurwlck.h -# End Source File -# Begin Source File - -SOURCE=.\icuserv.cpp -# End Source File -# Begin Source File - -SOURCE=.\icuserv.h -# End Source File -# End Group -# Begin Group "sprep" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\sprpimpl.h -# End Source File -# Begin Source File - -SOURCE=.\usprep.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\usprep.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\usprep.h - -"..\..\include\unicode\usprep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\usprep.h - -"..\..\include\unicode\usprep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\usprep.h - -"..\..\include\unicode\usprep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\usprep.h - -"..\..\include\unicode\usprep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "strings" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\chariter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\chariter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\chariter.h - -"..\..\include\unicode\chariter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\chariter.h - -"..\..\include\unicode\chariter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\chariter.h - -"..\..\include\unicode\chariter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\chariter.h - -"..\..\include\unicode\chariter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\charstr.h -# End Source File -# Begin Source File - -SOURCE=.\cstring.c -# End Source File -# Begin Source File - -SOURCE=.\cstring.h -# End Source File -# Begin Source File - -SOURCE=.\cwchar.c -# End Source File -# Begin Source File - -SOURCE=.\cwchar.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\rep.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\rep.h - -"..\..\include\unicode\rep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\rep.h - -"..\..\include\unicode\rep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\rep.h - -"..\..\include\unicode\rep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\rep.h - -"..\..\include\unicode\rep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\schriter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\schriter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\schriter.h - -"..\..\include\unicode\schriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\schriter.h - -"..\..\include\unicode\schriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\schriter.h - -"..\..\include\unicode\schriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\schriter.h - -"..\..\include\unicode\schriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uchriter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uchriter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uchriter.h - -"..\..\include\unicode\uchriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uchriter.h - -"..\..\include\unicode\uchriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uchriter.h - -"..\..\include\unicode\uchriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uchriter.h - -"..\..\include\unicode\uchriter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\uinvchar.c -# End Source File -# Begin Source File - -SOURCE=.\uinvchar.h -# End Source File -# Begin Source File - -SOURCE=.\uiter.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uiter.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uiter.h - -"..\..\include\unicode\uiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uiter.h - -"..\..\include\unicode\uiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uiter.h - -"..\..\include\unicode\uiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uiter.h - -"..\..\include\unicode\uiter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unistr.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\unistr.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unistr.h - -"..\..\include\unicode\unistr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unistr.h - -"..\..\include\unicode\unistr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unistr.h - -"..\..\include\unicode\unistr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unistr.h - -"..\..\include\unicode\unistr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unistr_case.cpp -# End Source File -# Begin Source File - -SOURCE=.\unistr_cnv.cpp -# End Source File -# Begin Source File - -SOURCE=.\unistr_props.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\urep.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\urep.h - -"..\..\include\unicode\urep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\urep.h - -"..\..\include\unicode\urep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\urep.h - -"..\..\include\unicode\urep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\urep.h - -"..\..\include\unicode\urep.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ustr_cnv.c -# End Source File -# Begin Source File - -SOURCE=.\ustr_cnv.h -# End Source File -# Begin Source File - -SOURCE=.\ustr_imp.h -# End Source File -# Begin Source File - -SOURCE=.\ustr_wcs.c -# End Source File -# Begin Source File - -SOURCE=.\ustrcase.c -# End Source File -# Begin Source File - -SOURCE=.\ustring.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ustring.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ustring.h - -"..\..\include\unicode\ustring.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ustring.h - -"..\..\include\unicode\ustring.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ustring.h - -"..\..\include\unicode\ustring.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ustring.h - -"..\..\include\unicode\ustring.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ustrtrns.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\utf.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utf.h - -"..\..\include\unicode\utf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf.h - -"..\..\include\unicode\utf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utf.h - -"..\..\include\unicode\utf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf.h - -"..\..\include\unicode\utf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\utf16.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utf16.h - -"..\..\include\unicode\utf16.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf16.h - -"..\..\include\unicode\utf16.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utf16.h - -"..\..\include\unicode\utf16.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf16.h - -"..\..\include\unicode\utf16.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\utf32.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utf32.h - -"..\..\include\unicode\utf32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf32.h - -"..\..\include\unicode\utf32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utf32.h - -"..\..\include\unicode\utf32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf32.h - -"..\..\include\unicode\utf32.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\utf8.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utf8.h - -"..\..\include\unicode\utf8.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf8.h - -"..\..\include\unicode\utf8.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utf8.h - -"..\..\include\unicode\utf8.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf8.h - -"..\..\include\unicode\utf8.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\utf_impl.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\utf_old.h - -!IF "$(CFG)" == "common - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utf_old.h - -"..\..\include\unicode\utf_old.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf_old.h - -"..\..\include\unicode\utf_old.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utf_old.h - -"..\..\include\unicode\utf_old.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "common - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utf_old.h - -"..\..\include\unicode\utf_old.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/common/common.rc b/icuSources/common/common.rc index c3d9323b..f77a0803 100644 --- a/icuSources/common/common.rc +++ b/icuSources/common/common.rc @@ -1,7 +1,7 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. -// Copyright (c) 2001-2003 International Business Machines +// Copyright (c) 2001-2005 International Business Machines // Corporation and others. All Rights Reserved. // #include "msvcres.h" @@ -54,8 +54,8 @@ END #define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 + FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM + PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,10 +70,10 @@ BEGIN BEGIN BLOCK "00000000" BEGIN - VALUE "Comments", "http://oss.software.ibm.com/icu/\0" + VALUE "Comments", ICU_WEBSITE "\0" VALUE "CompanyName", "IBM Corporation and others\0" VALUE "FileDescription", "IBM ICU Common DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" #ifdef _DEBUG VALUE "OriginalFilename", "icuuc" U_ICU_VERSION_SHORT "d.dll\0") @@ -82,7 +82,7 @@ BEGIN #endif VALUE "PrivateBuild", "\0" VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "SpecialBuild", "\0" END END diff --git a/icuSources/common/common.vcproj b/icuSources/common/common.vcproj index 46026cde..a30a33c7 100644 --- a/icuSources/common/common.vcproj +++ b/icuSources/common/common.vcproj @@ -21,30 +21,29 @@ CharacterSet="2"> + SuppressStartupBanner="TRUE"/> + + + + @@ -204,10 +210,10 @@ Name="break iteration" Filter=""> + RelativePath=".\brkeng.cpp"> + RelativePath=".\brkeng.h"> @@ -231,9 +237,6 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> - - + RelativePath=".\dictbe.cpp"> + RelativePath=".\dictbe.h"> @@ -323,6 +326,12 @@ + + + + @@ -345,6 +354,9 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> + + - - - - @@ -477,10 +483,23 @@ RelativePath=".\cpputils.h"> - - + RelativePath=".\unicode\docmain.h"> + + + + + + @@ -603,6 +622,25 @@ + + + + + + + + @@ -626,6 +664,9 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> + + + + + + + + + + @@ -748,6 +808,24 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> + + + + + + + + + + + + + + + + @@ -1582,22 +1669,34 @@ Name="registration" Filter=""> + RelativePath=".\serv.cpp"> + + + + + RelativePath=".\servlkf.cpp"> + RelativePath=".\servloc.h"> + RelativePath=".\servls.cpp"> + RelativePath=".\servnotf.cpp"> + RelativePath=".\servnotf.h"> + + + + + + + + + + + + + + @@ -1850,6 +1971,28 @@ + + + + + + + + + + - + \ No newline at end of file diff --git a/icuSources/common/cpputils.h b/icuSources/common/cpputils.h index de09aea1..c1b439c7 100644 --- a/icuSources/common/cpputils.h +++ b/icuSources/common/cpputils.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2001, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -15,6 +15,7 @@ #define CPPUTILS_H #include "unicode/utypes.h" +#include "unicode/unistr.h" #include "cmemory.h" /*==========================================================================*/ @@ -63,4 +64,21 @@ uprv_arrayCopy(const UChar *src, int32_t srcStart, UChar *dst, int32_t dstStart, int32_t count) { uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +/** + * Copy an array of UnicodeString OBJECTS (not pointers). + * @internal + */ +static inline void +uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString *src, U_NAMESPACE_QUALIFIER UnicodeString *dst, int32_t count) +{ while(count-- > 0) *dst++ = *src++; } + +/** + * Copy an array of UnicodeString OBJECTS (not pointers). + * @internal + */ +static inline void +uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString *src, int32_t srcStart, + U_NAMESPACE_QUALIFIER UnicodeString *dst, int32_t dstStart, int32_t count) +{ uprv_arrayCopy(src+srcStart, dst+dstStart, count); } + #endif /* _CPPUTILS */ diff --git a/icuSources/common/cstring.h b/icuSources/common/cstring.h index 5e156f17..6d2fd0e8 100644 --- a/icuSources/common/cstring.h +++ b/icuSources/common/cstring.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -62,7 +62,7 @@ uprv_ebcdictolower(char c); #define uprv_strtod(source, end) U_STANDARD_CPP_NAMESPACE strtod(source, end) #define uprv_strtoul(str, end, base) U_STANDARD_CPP_NAMESPACE strtoul(str, end, base) #define uprv_strtol(str, end, base) U_STANDARD_CPP_NAMESPACE strtol(str, end, base) -#ifdef WIN32 +#ifdef U_WINDOWS # if defined(__BORLANDC__) # define uprv_stricmp(str1, str2) U_STANDARD_CPP_NAMESPACE stricmp(str1, str2) # define uprv_strnicmp(str1, str2, n) U_STANDARD_CPP_NAMESPACE strnicmp(str1, str2, n) diff --git a/icuSources/common/dbbi.cpp b/icuSources/common/dbbi.cpp deleted file mode 100644 index 2f83f6c3..00000000 --- a/icuSources/common/dbbi.cpp +++ /dev/null @@ -1,629 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 1999-2004 IBM Corp. All rights reserved. -********************************************************************** -* Date Name Description -* 12/1/99 rgillam Complete port from Java. -* 01/13/2000 helena Added UErrorCode to ctors. -********************************************************************** -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/dbbi.h" -#include "unicode/schriter.h" -#include "dbbi_tbl.h" -#include "uvector.h" -#include "cmemory.h" -#include "uassert.h" - -U_NAMESPACE_BEGIN - -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DictionaryBasedBreakIterator) - - -//------------------------------------------------------------------------------ -// -// constructors -// -//------------------------------------------------------------------------------ - -DictionaryBasedBreakIterator::DictionaryBasedBreakIterator() : -RuleBasedBreakIterator() { - init(); -} - - -DictionaryBasedBreakIterator::DictionaryBasedBreakIterator(UDataMemory* rbbiData, - const char* dictionaryFilename, - UErrorCode& status) -: RuleBasedBreakIterator(rbbiData, status) -{ - init(); - if (U_FAILURE(status)) {return;}; - fTables = new DictionaryBasedBreakIteratorTables(dictionaryFilename, status); - if (U_FAILURE(status)) { - if (fTables != NULL) { - fTables->removeReference(); - fTables = NULL; - } - return; - } - /* test for NULL */ - if(fTables == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } -} - - -DictionaryBasedBreakIterator::DictionaryBasedBreakIterator(const DictionaryBasedBreakIterator &other) : -RuleBasedBreakIterator(other) -{ - init(); - if (other.fTables != NULL) { - fTables = other.fTables; - fTables->addReference(); - } -} - - - - -//------------------------------------------------------------------------------ -// -// Destructor -// -//------------------------------------------------------------------------------ -DictionaryBasedBreakIterator::~DictionaryBasedBreakIterator() -{ - uprv_free(cachedBreakPositions); - cachedBreakPositions = NULL; - if (fTables != NULL) {fTables->removeReference();}; -} - -//------------------------------------------------------------------------------ -// -// Assignment operator. Sets this iterator to have the same behavior, -// and iterate over the same text, as the one passed in. -// -//------------------------------------------------------------------------------ -DictionaryBasedBreakIterator& -DictionaryBasedBreakIterator::operator=(const DictionaryBasedBreakIterator& that) { - if (this == &that) { - return *this; - } - reset(); // clears out cached break positions. - RuleBasedBreakIterator::operator=(that); - if (this->fTables != that.fTables) { - if (this->fTables != NULL) {this->fTables->removeReference();}; - this->fTables = that.fTables; - if (this->fTables != NULL) {this->fTables->addReference();}; - } - return *this; -} - -//------------------------------------------------------------------------------ -// -// Clone() Returns a newly-constructed RuleBasedBreakIterator with the same -// behavior, and iterating over the same text, as this one. -// -//------------------------------------------------------------------------------ -BreakIterator* -DictionaryBasedBreakIterator::clone() const { - return new DictionaryBasedBreakIterator(*this); -} - -//======================================================================= -// BreakIterator overrides -//======================================================================= - -/** - * Advances the iterator one step backwards. - * @return The position of the last boundary position before the - * current iteration position - */ -int32_t -DictionaryBasedBreakIterator::previous() -{ - // if we have cached break positions and we're still in the range - // covered by them, just move one step backward in the cache - if (cachedBreakPositions != NULL && positionInCache > 0) { - --positionInCache; - fText->setIndex(cachedBreakPositions[positionInCache]); - return cachedBreakPositions[positionInCache]; - } - - // otherwise, dump the cache and use the inherited previous() method to move - // backward. This may fill up the cache with new break positions, in which - // case we have to mark our position in the cache - else { - reset(); - int32_t result = RuleBasedBreakIterator::previous(); - if (cachedBreakPositions != NULL) { - for (positionInCache=0; - cachedBreakPositions[positionInCache] != result; - positionInCache++); - U_ASSERT(positionInCache < numCachedBreakPositions); - if (positionInCache >= numCachedBreakPositions) { - // Something has gone wrong. Dump the cache. - reset(); - } - } - return result; - } -} - -/** - * Sets the current iteration position to the last boundary position - * before the specified position. - * @param offset The position to begin searching from - * @return The position of the last boundary before "offset" - */ -int32_t -DictionaryBasedBreakIterator::preceding(int32_t offset) -{ - // if the offset passed in is already past the end of the text, - // just return DONE; if it's before the beginning, return the - // text's starting offset - if (fText == NULL || offset > fText->endIndex()) { - return BreakIterator::DONE; - } - else if (offset < fText->startIndex()) { - return fText->startIndex(); - } - - // if we have no cached break positions, or "offset" is outside the - // range covered by the cache, we can just call the inherited routine - // (which will eventually call other routines in this class that may - // refresh the cache) - if (cachedBreakPositions == NULL || offset <= cachedBreakPositions[0] || - offset > cachedBreakPositions[numCachedBreakPositions - 1]) { - reset(); - return RuleBasedBreakIterator::preceding(offset); - } - - // on the other hand, if "offset" is within the range covered by the cache, - // then all we have to do is search the cache for the last break position - // before "offset" - else { - positionInCache = 0; - while (positionInCache < numCachedBreakPositions - && offset > cachedBreakPositions[positionInCache]) - ++positionInCache; - --positionInCache; - fText->setIndex(cachedBreakPositions[positionInCache]); - return fText->getIndex(); - } -} - -/** - * Sets the current iteration position to the first boundary position after - * the specified position. - * @param offset The position to begin searching forward from - * @return The position of the first boundary after "offset" - */ -int32_t -DictionaryBasedBreakIterator::following(int32_t offset) -{ - // if the offset passed in is already past the end of the text, - // just return DONE; if it's before the beginning, return the - // text's starting offset - if (fText == NULL || offset > fText->endIndex()) { - return BreakIterator::DONE; - } - else if (offset < fText->startIndex()) { - return fText->startIndex(); - } - - // if we have no cached break positions, or if "offset" is outside the - // range covered by the cache, then dump the cache and call our - // inherited following() method. This will call other methods in this - // class that may refresh the cache. - if (cachedBreakPositions == NULL || offset < cachedBreakPositions[0] || - offset >= cachedBreakPositions[numCachedBreakPositions - 1]) { - reset(); - return RuleBasedBreakIterator::following(offset); - } - - // on the other hand, if "offset" is within the range covered by the - // cache, then just search the cache for the first break position - // after "offset" - else { - positionInCache = 0; - while (positionInCache < numCachedBreakPositions - && offset >= cachedBreakPositions[positionInCache]) - ++positionInCache; - fText->setIndex(cachedBreakPositions[positionInCache]); - return fText->getIndex(); - } -} - -/** - * This is the implementation function for next(). - */ -int32_t -DictionaryBasedBreakIterator::handleNext() -{ - UErrorCode status = U_ZERO_ERROR; - // if there are no cached break positions, or if we've just moved - // off the end of the range covered by the cache, we have to dump - // and possibly regenerate the cache - if (cachedBreakPositions == NULL || positionInCache == numCachedBreakPositions - 1) { - - // start by using the inherited handleNext() to find a tentative return - // value. dictionaryCharCount tells us how many dictionary characters - // we passed over on our way to the tentative return value - int32_t startPos = fText->getIndex(); - fDictionaryCharCount = 0; - int32_t result = RuleBasedBreakIterator::handleNext(); - - // if we passed over more than one dictionary character, then we use - // divideUpDictionaryRange() to regenerate the cached break positions - // for the new range - if (fDictionaryCharCount > 1 && result - startPos > 1) { - divideUpDictionaryRange(startPos, result, status); - U_ASSERT(U_SUCCESS(status)); - if (U_FAILURE(status)) { - // Something went badly wrong, an internal error. - // We have no way from here to report it to caller. - // Treat as if this is if the dictionary did not apply to range. - reset(); - return result; - } - } - - // otherwise, the value we got back from the inherited fuction - // is our return value, and we can dump the cache - else { - reset(); - return result; - } - } - - // if the cache of break positions has been regenerated (or existed all - // along), then just advance to the next break position in the cache - // and return it - if (cachedBreakPositions != NULL) { - ++positionInCache; - fText->setIndex(cachedBreakPositions[positionInCache]); - return cachedBreakPositions[positionInCache]; - } - return -9999; // SHOULD NEVER GET HERE! -} - -void -DictionaryBasedBreakIterator::reset() -{ - uprv_free(cachedBreakPositions); - cachedBreakPositions = NULL; - numCachedBreakPositions = 0; - fDictionaryCharCount = 0; - positionInCache = 0; -} - - - -//------------------------------------------------------------------------------ -// -// init() Common initialization routine, for use by constructors, etc. -// -//------------------------------------------------------------------------------ -void DictionaryBasedBreakIterator::init() { - cachedBreakPositions = NULL; - fTables = NULL; - numCachedBreakPositions = 0; - fDictionaryCharCount = 0; - positionInCache = 0; -} - - -//------------------------------------------------------------------------------ -// -// BufferClone -// -//------------------------------------------------------------------------------ -BreakIterator * DictionaryBasedBreakIterator::createBufferClone(void *stackBuffer, - int32_t &bufferSize, - UErrorCode &status) -{ - if (U_FAILURE(status)){ - return NULL; - } - - // - // If user buffer size is zero this is a preflight operation to - // obtain the needed buffer size, allowing for worst case misalignment. - // - if (bufferSize == 0) { - bufferSize = sizeof(DictionaryBasedBreakIterator) + U_ALIGNMENT_OFFSET_UP(0); - return NULL; - } - - // - // Check the alignment and size of the user supplied buffer. - // Allocate heap memory if the user supplied memory is insufficient. - // - char *buf = (char *)stackBuffer; - uint32_t s = bufferSize; - - if (stackBuffer == NULL) { - s = 0; // Ignore size, force allocation if user didn't give us a buffer. - } - if (U_ALIGNMENT_OFFSET(stackBuffer) != 0) { - int32_t offsetUp = (int32_t)U_ALIGNMENT_OFFSET_UP(buf); - s -= offsetUp; - buf += offsetUp; - } - if (s < sizeof(DictionaryBasedBreakIterator)) { - buf = (char *) new DictionaryBasedBreakIterator(); - if (buf == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - status = U_SAFECLONE_ALLOCATED_WARNING; - } - - // - // Initialize the clone object. - // TODO: using an overloaded C++ "operator new" to directly initialize the - // copy in the user's buffer would be better, but it doesn't seem - // to get along with namespaces. Investigate why. - // - // The memcpy is only safe with an empty (default constructed) - // break iterator. Use on others can screw up reference counts - // to data. memcpy-ing objects is not really a good idea... - // - DictionaryBasedBreakIterator localIter; // Empty break iterator, source for memcpy - DictionaryBasedBreakIterator *clone = (DictionaryBasedBreakIterator *)buf; - uprv_memcpy(clone, &localIter, sizeof(DictionaryBasedBreakIterator)); // clone = empty, but initialized, iterator. - *clone = *this; // clone = the real one we want. - if (status != U_SAFECLONE_ALLOCATED_WARNING) { - clone->fBufferClone = TRUE; - } - return clone; -} - - - - -/** - * This is the function that actually implements the dictionary-based - * algorithm. Given the endpoints of a range of text, it uses the - * dictionary to determine the positions of any boundaries in this - * range. It stores all the boundary positions it discovers in - * cachedBreakPositions so that we only have to do this work once - * for each time we enter the range. - */ -void -DictionaryBasedBreakIterator::divideUpDictionaryRange(int32_t startPos, int32_t endPos, UErrorCode &status) -{ - // the range we're dividing may begin or end with non-dictionary characters - // (i.e., for line breaking, we may have leading or trailing punctuation - // that needs to be kept with the word). Seek from the beginning of the - // range to the first dictionary character - fText->setIndex(startPos); - UChar c = fText->current(); - while (isDictionaryChar(c) == FALSE) { - c = fText->next(); - } - - if (U_FAILURE(status)) { - return; // UStack below overwrites the status error codes - } - - // initialize. We maintain two stacks: currentBreakPositions contains - // the list of break positions that will be returned if we successfully - // finish traversing the whole range now. possibleBreakPositions lists - // all other possible word ends we've passed along the way. (Whenever - // we reach an error [a sequence of characters that can't begin any word - // in the dictionary], we back up, possibly delete some breaks from - // currentBreakPositions, move a break from possibleBreakPositions - // to currentBreakPositions, and start over from there. This process - // continues in this way until we either successfully make it all the way - // across the range, or exhaust all of our combinations of break - // positions.) wrongBreakPositions is used to keep track of paths we've - // tried on previous iterations. As the iterator backs up further and - // further, this saves us from having to follow each possible path - // through the text all the way to the error (hopefully avoiding many - // future recursive calls as well). - // there can be only one kind of error in UStack and UVector, so we'll - // just let the error fall through - UStack currentBreakPositions(status); - UStack possibleBreakPositions(status); - UVector wrongBreakPositions(status); - - // the dictionary is implemented as a trie, which is treated as a state - // machine. -1 represents the end of a legal word. Every word in the - // dictionary is represented by a path from the root node to -1. A path - // that ends in state 0 is an illegal combination of characters. - int16_t state = 0; - - // these two variables are used for error handling. We keep track of the - // farthest we've gotten through the range being divided, and the combination - // of breaks that got us that far. If we use up all possible break - // combinations, the text contains an error or a word that's not in the - // dictionary. In this case, we "bless" the break positions that got us the - // farthest as real break positions, and then start over from scratch with - // the character where the error occurred. - int32_t farthestEndPoint = fText->getIndex(); - UStack bestBreakPositions(status); - UBool bestBreakPositionsInitialized = FALSE; - - if (U_FAILURE(status)) { - return; - } - // initialize (we always exit the loop with a break statement) - c = fText->current(); - for (;;) { - - // if we can transition to state "-1" from our current state, we're - // on the last character of a legal word. Push that position onto - // the possible-break-positions stack - if (fTables->fDictionary->at(state, (int32_t)0) == -1) { - possibleBreakPositions.push(fText->getIndex(), status); - if (U_FAILURE(status)) { - return; - } - } - - // look up the new state to transition to in the dictionary - state = fTables->fDictionary->at(state, c); - - // if the character we're sitting on causes us to transition to - // the "end of word" state, then it was a non-dictionary character - // and we've successfully traversed the whole range. Drop out - // of the loop. - if (state == -1) { - currentBreakPositions.push(fText->getIndex(), status); - if (U_FAILURE(status)) { - return; - } - break; - } - - // if the character we're sitting on causes us to transition to - // the error state, or if we've gone off the end of the range - // without transitioning to the "end of word" state, we've hit - // an error... - else if (state == 0 || fText->getIndex() >= endPos) { - - // if this is the farthest we've gotten, take note of it in - // case there's an error in the text - if (fText->getIndex() > farthestEndPoint) { - farthestEndPoint = fText->getIndex(); - bestBreakPositions.removeAllElements(); - bestBreakPositionsInitialized = TRUE; - for (int32_t i = 0; i < currentBreakPositions.size(); i++) { - bestBreakPositions.push(currentBreakPositions.elementAti(i), status); - } - } - - // wrongBreakPositions is a list of all break positions we've tried starting - // that didn't allow us to traverse all the way through the text. Every time - // we pop a break position off of currentBreakPositions, we put it into - // wrongBreakPositions to avoid trying it again later. If we make it to this - // spot, we're either going to back up to a break in possibleBreakPositions - // and try starting over from there, or we've exhausted all possible break - // positions and are going to do the fallback procedure. This loop prevents - // us from messing with anything in possibleBreakPositions that didn't work as - // a starting point the last time we tried it (this is to prevent a bunch of - // repetitive checks from slowing down some extreme cases) - while (!possibleBreakPositions.isEmpty() && wrongBreakPositions.contains( - possibleBreakPositions.peeki())) { - possibleBreakPositions.popi(); - } - - // if we've used up all possible break-position combinations, there's - // an error or an unknown word in the text. In this case, we start - // over, treating the farthest character we've reached as the beginning - // of the range, and "blessing" the break positions that got us that - // far as real break positions - if (possibleBreakPositions.isEmpty()) { - if (bestBreakPositionsInitialized) { - currentBreakPositions.removeAllElements(); - for (int32_t i = 0; i < bestBreakPositions.size(); i++) { - currentBreakPositions.push(bestBreakPositions.elementAti(i), status); - if (U_FAILURE(status)) { - return; - } - } - bestBreakPositions.removeAllElements(); - if (farthestEndPoint < endPos) { - fText->setIndex(farthestEndPoint + 1); - } - else { - break; - } - } - else { - if ((currentBreakPositions.isEmpty() - || currentBreakPositions.peeki() != fText->getIndex()) - && fText->getIndex() != startPos) { - currentBreakPositions.push(fText->getIndex(), status); - if (U_FAILURE(status)) { - return; - } - } - fText->next(); - currentBreakPositions.push(fText->getIndex(), status); - if (U_FAILURE(status)) { - return; - } - } - } - - // if we still have more break positions we can try, then promote the - // last break in possibleBreakPositions into currentBreakPositions, - // and get rid of all entries in currentBreakPositions that come after - // it. Then back up to that position and start over from there (i.e., - // treat that position as the beginning of a new word) - else { - int32_t temp = possibleBreakPositions.popi(); - int32_t temp2 = 0; - while (!currentBreakPositions.isEmpty() && temp < - currentBreakPositions.peeki()) { - temp2 = currentBreakPositions.popi(); - wrongBreakPositions.addElement(temp2, status); - } - currentBreakPositions.push(temp, status); - fText->setIndex(currentBreakPositions.peeki()); - } - - // re-sync "c" for the next go-round, and drop out of the loop if - // we've made it off the end of the range - c = fText->current(); - if (fText->getIndex() >= endPos) { - break; - } - } - - // if we didn't hit any exceptional conditions on this last iteration, - // just advance to the next character and loop - else { - c = fText->next(); - } - } - - // dump the last break position in the list, and replace it with the actual - // end of the range (which may be the same character, or may be further on - // because the range actually ended with non-dictionary characters we want to - // keep with the word) - if (!currentBreakPositions.isEmpty()) { - currentBreakPositions.popi(); - } - currentBreakPositions.push(endPos, status); - if (U_FAILURE(status)) { - return; - } - - // create a regular array to hold the break positions and copy - // the break positions from the stack to the array (in addition, - // our starting position goes into this array as a break position). - // This array becomes the cache of break positions used by next() - // and previous(), so this is where we actually refresh the cache. - if (cachedBreakPositions != NULL) { - uprv_free(cachedBreakPositions); - } - cachedBreakPositions = (int32_t *)uprv_malloc((currentBreakPositions.size() + 1) * sizeof(int32_t)); - /* Test for NULL */ - if(cachedBreakPositions == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - numCachedBreakPositions = currentBreakPositions.size() + 1; - cachedBreakPositions[0] = startPos; - - for (int32_t i = 0; i < currentBreakPositions.size(); i++) { - cachedBreakPositions[i + 1] = currentBreakPositions.elementAti(i); - } - positionInCache = 0; -} - -U_NAMESPACE_END - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -/* eof */ diff --git a/icuSources/common/dbbi_tbl.cpp b/icuSources/common/dbbi_tbl.cpp deleted file mode 100644 index 29eb3eb8..00000000 --- a/icuSources/common/dbbi_tbl.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 1999-2002 IBM Corp. All rights reserved. -********************************************************************** -* Date Name Description -* 12/1/99 rgillam Complete port from Java. -* 01/13/2000 helena Added UErrorCode to ctors. -* 06/14/2002 andy Gutted for new RBBI impl. -********************************************************************** -*/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "dbbi_tbl.h" -#include "unicode/dbbi.h" -#include "umutex.h" - -U_NAMESPACE_BEGIN - -//======================================================================= -// constructor -//======================================================================= - -DictionaryBasedBreakIteratorTables::DictionaryBasedBreakIteratorTables( - const char* dictionaryFilename, - UErrorCode &status) { - fDictionary = new BreakDictionary(dictionaryFilename, status); - fRefCount = 1; -} - - -void DictionaryBasedBreakIteratorTables::addReference() { - umtx_atomic_inc(&fRefCount); -} - - -void DictionaryBasedBreakIteratorTables::removeReference() { - if (umtx_atomic_dec(&fRefCount) == 0) { - delete this; - } -} - - -/** - * Destructor - */ -DictionaryBasedBreakIteratorTables::~DictionaryBasedBreakIteratorTables() { - delete fDictionary; - fDictionary = NULL; -} - - -U_NAMESPACE_END - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -/* eof */ diff --git a/icuSources/common/dbbi_tbl.h b/icuSources/common/dbbi_tbl.h deleted file mode 100644 index 70728e3f..00000000 --- a/icuSources/common/dbbi_tbl.h +++ /dev/null @@ -1,90 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 1999-2000 IBM Corp. All rights reserved. -********************************************************************** -* Date Name Description -* 12/1/99 rgillam Complete port from Java. -* 01/13/2000 helena Added UErrorCode to ctors. -********************************************************************** -*/ - -#ifndef DBBI_TBL_H -#define DBBI_TBL_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/udata.h" -#include "brkdict.h" - -U_NAMESPACE_BEGIN - -/* forward declaration */ -class DictionaryBasedBreakIterator; - -// -// DictionaryBasedBreakIteratorTables -// -// This class sits between instances of DictionaryBasedBreakIterator -// and the dictionary data itself, which is of type BreakDictionary. -// It provides reference counting, allowing multiple copies of a -// DictionaryBasedBreakIterator to share a single instance of -// BreakDictionary. -// -// TODO: it'd probably be cleaner to add the reference counting to -// BreakDictionary and get rid of this class, but doing it this way -// was a convenient transition from earlier code, and time is short... -// -class DictionaryBasedBreakIteratorTables : public UMemory { - -private: - int32_t fRefCount; - - -public: - //======================================================================= - // constructor - //======================================================================= - /* @param dictionaryFilename The name of the dictionary file - * @param status The error code - * @return the newly created DictionaryBasedBreakIteratorTables - **/ - DictionaryBasedBreakIteratorTables(const char* dictionaryFilename, - UErrorCode& status); - - BreakDictionary *fDictionary; - void addReference(); - void removeReference(); - /** - * Destructor. Should not be used directly. Use removeReference() istead. - * (Not private to avoid compiler warnings.) - */ - virtual ~DictionaryBasedBreakIteratorTables(); - -private: - /** - * The copy constructor is declared private and not implemented. - * THIS CLASS MAY NOT BE COPIED. - * @param that The DictionaryBasedBreakIteratorTables to be copied. - * @return the newly constructed DictionaryBasedBreakIteratorTables. - */ - DictionaryBasedBreakIteratorTables(const DictionaryBasedBreakIteratorTables& that); - - //======================================================================= - // boilerplate - //======================================================================= - - - /** - * The assignment operator is declared private and not implemented. - * THIS CLASS MAY NOT BE COPIED. - * Call addReference() and share an existing copy instead. - * @that The object to be copied - * @return the newly created DictionaryBasedBreakIteratorTables. - */ - DictionaryBasedBreakIteratorTables& operator=( - const DictionaryBasedBreakIteratorTables& that); -}; - -U_NAMESPACE_END - -#endif diff --git a/icuSources/common/dictbe.cpp b/icuSources/common/dictbe.cpp new file mode 100644 index 00000000..ac774f7c --- /dev/null +++ b/icuSources/common/dictbe.cpp @@ -0,0 +1,418 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "brkeng.h" +#include "dictbe.h" +#include "unicode/uniset.h" +#include "unicode/chariter.h" +#include "unicode/ubrk.h" +#include "uvector.h" +#include "triedict.h" + +U_NAMESPACE_BEGIN + +/* + ****************************************************************** + */ + +/*DictionaryBreakEngine::DictionaryBreakEngine() { + fTypes = 0; +}*/ + +DictionaryBreakEngine::DictionaryBreakEngine(uint32_t breakTypes) { + fTypes = breakTypes; +} + +DictionaryBreakEngine::~DictionaryBreakEngine() { +} + +UBool +DictionaryBreakEngine::handles(UChar32 c, int32_t breakType) const { + return (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes) + && fSet.contains(c)); +} + +int32_t +DictionaryBreakEngine::findBreaks( UText *text, + int32_t startPos, + int32_t endPos, + UBool reverse, + int32_t breakType, + UStack &foundBreaks ) const { + int32_t result = 0; + + // Find the span of characters included in the set. + int32_t start = (int32_t)utext_getNativeIndex(text); + int32_t current; + int32_t rangeStart; + int32_t rangeEnd; + UChar32 c = utext_current32(text); + if (reverse) { + UBool isDict = fSet.contains(c); + while((current = (int32_t)utext_getNativeIndex(text)) > startPos && isDict) { + c = utext_previous32(text); + isDict = fSet.contains(c); + } + rangeStart = (current < startPos) ? startPos : current+(isDict ? 0 : 1); + rangeEnd = start + 1; + } + else { + while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) { + utext_next32(text); // TODO: recast loop for postincrement + c = utext_current32(text); + } + rangeStart = start; + rangeEnd = current; + } + if (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes)) { + result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks); + utext_setNativeIndex(text, current); + } + + return result; +} + +void +DictionaryBreakEngine::setCharacters( UnicodeSet &set ) { + fSet = set; +} + +/*void +DictionaryBreakEngine::setBreakTypes( uint32_t breakTypes ) { + fTypes = breakTypes; +}*/ + +/* + ****************************************************************** + */ + + +// Helper class for improving readability of the Thai word break +// algorithm. The implementation is completely inline. + +// List size, limited by the maximum number of words in the dictionary +// that form a nested sequence. +#define POSSIBLE_WORD_LIST_MAX 20 + +class PossibleWord { + private: + // list of word candidate lengths, in increasing length order + int32_t lengths[POSSIBLE_WORD_LIST_MAX]; + int count; // Count of candidates + int32_t prefix; // The longest match with a dictionary word + int32_t offset; // Offset in the text of these candidates + int mark; // The preferred candidate's offset + int current; // The candidate we're currently looking at + + public: + PossibleWord(); + ~PossibleWord(); + + // Fill the list of candidates if needed, select the longest, and return the number found + int candidates( UText *text, const TrieWordDictionary *dict, int32_t rangeEnd ); + + // Select the currently marked candidate, point after it in the text, and invalidate self + int32_t acceptMarked( UText *text ); + + // Back up from the current candidate to the next shorter one; return TRUE if that exists + // and point the text after it + UBool backUp( UText *text ); + + // Return the longest prefix this candidate location shares with a dictionary word + int32_t longestPrefix(); + + // Mark the current candidate as the one we like + void markCurrent(); +}; + +inline +PossibleWord::PossibleWord() { + offset = -1; +} + +inline +PossibleWord::~PossibleWord() { +} + +inline int +PossibleWord::candidates( UText *text, const TrieWordDictionary *dict, int32_t rangeEnd ) { + // TODO: If getIndex is too slow, use offset < 0 and add discardAll() + int32_t start = (int32_t)utext_getNativeIndex(text); + if (start != offset) { + offset = start; + prefix = dict->matches(text, rangeEnd-start, lengths, count, sizeof(lengths)/sizeof(lengths[0])); + // Dictionary leaves text after longest prefix, not longest word. Back up. + if (count <= 0) { + utext_setNativeIndex(text, start); + } + } + if (count > 0) { + utext_setNativeIndex(text, start+lengths[count-1]); + } + current = count-1; + mark = current; + return count; +} + +inline int32_t +PossibleWord::acceptMarked( UText *text ) { + utext_setNativeIndex(text, offset + lengths[mark]); + return lengths[mark]; +} + +inline UBool +PossibleWord::backUp( UText *text ) { + if (current > 0) { + utext_setNativeIndex(text, offset + lengths[--current]); + return TRUE; + } + return FALSE; +} + +inline int32_t +PossibleWord::longestPrefix() { + return prefix; +} + +inline void +PossibleWord::markCurrent() { + mark = current; +} + +// How many words in a row are "good enough"? +#define THAI_LOOKAHEAD 3 + +// Will not combine a non-word with a preceding dictionary word longer than this +#define THAI_ROOT_COMBINE_THRESHOLD 3 + +// Will not combine a non-word that shares at least this much prefix with a +// dictionary word, with a preceding word +#define THAI_PREFIX_COMBINE_THRESHOLD 3 + +// Ellision character +#define THAI_PAIYANNOI 0x0E2F + +// Repeat character +#define THAI_MAIYAMOK 0x0E46 + +// Minimum word size +#define THAI_MIN_WORD 2 + +// Minimum number of characters for two words +#define THAI_MIN_WORD_SPAN (THAI_MIN_WORD * 2) + +ThaiBreakEngine::ThaiBreakEngine(const TrieWordDictionary *adoptDictionary, UErrorCode &status) + : DictionaryBreakEngine((1< 1) { + // If we're already at the end of the range, we're done + if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { + goto foundBest; + } + do { + int wordsMatched = 1; + if (words[(wordsFound+1)%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) { + if (wordsMatched < 2) { + // Followed by another dictionary word; mark first word as a good candidate + words[wordsFound%THAI_LOOKAHEAD].markCurrent(); + wordsMatched = 2; + } + + // If we're already at the end of the range, we're done + if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { + goto foundBest; + } + + // See if any of the possible second words is followed by a third word + do { + // If we find a third word, stop right away + if (words[(wordsFound+2)%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd)) { + words[wordsFound%THAI_LOOKAHEAD].markCurrent(); + goto foundBest; + } + } + while (words[(wordsFound+1)%THAI_LOOKAHEAD].backUp(text)); + } + } + while (words[wordsFound%THAI_LOOKAHEAD].backUp(text)); +foundBest: + wordLength = words[wordsFound%THAI_LOOKAHEAD].acceptMarked(text); + wordsFound += 1; + } + + // We come here after having either found a word or not. We look ahead to the + // next word. If it's not a dictionary word, we will combine it withe the word we + // just found (if there is one), but only if the preceding word does not exceed + // the threshold. + // The text iterator should now be positioned at the end of the word we found. + if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength < THAI_ROOT_COMBINE_THRESHOLD) { + // if it is a dictionary word, do nothing. If it isn't, then if there is + // no preceding word, or the non-word shares less than the minimum threshold + // of characters with a dictionary word, then scan to resynchronize + if (words[wordsFound%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0 + && (wordLength == 0 + || words[wordsFound%THAI_LOOKAHEAD].longestPrefix() < THAI_PREFIX_COMBINE_THRESHOLD)) { + // Look for a plausible word boundary + //TODO: This section will need a rework for UText. + int32_t remaining = rangeEnd - (current+wordLength); + UChar32 pc = utext_current32(text); + int32_t chars = 0; + while (TRUE) { + utext_next32(text); + uc = utext_current32(text); + // TODO: Here we're counting on the fact that the SA languages are all + // in the BMP. This should get fixed with the UText rework. + chars += 1; + if (--remaining <= 0) { + break; + } + if (fEndWordSet.contains(pc) && fBeginWordSet.contains(uc)) { + // Maybe. See if it's in the dictionary. + // NOTE: In the original Apple code, checked that the next + // two characters after uc were not 0x0E4C THANTHAKHAT before + // checking the dictionary. That is just a performance filter, + // but it's not clear it's faster than checking the trie. + int candidates = words[(wordsFound+1)%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd); + utext_setNativeIndex(text, current+wordLength+chars); + if (candidates > 0) { + break; + } + } + pc = uc; + } + + // Bump the word count if there wasn't already one + if (wordLength <= 0) { + wordsFound += 1; + } + + // Update the length with the passed-over characters + wordLength += chars; + } + else { + // Back up to where we were for next iteration + utext_setNativeIndex(text, current+wordLength); + } + } + + // Never stop before a combining mark. + int32_t currPos; + while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) { + utext_next32(text); + wordLength += (int32_t)utext_getNativeIndex(text) - currPos; + } + + // Look ahead for possible suffixes if a dictionary word does not follow. + // We do this in code rather than using a rule so that the heuristic + // resynch continues to function. For example, one of the suffix characters + // could be a typo in the middle of a word. + if ((int32_t)utext_getNativeIndex(text) < rangeEnd && wordLength > 0) { + if (words[wordsFound%THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) <= 0 + && fSuffixSet.contains(uc = utext_current32(text))) { + if (uc == THAI_PAIYANNOI) { + if (!fSuffixSet.contains(utext_previous32(text))) { + // Skip over previous end and PAIYANNOI + utext_next32(text); + utext_next32(text); + wordLength += 1; // Add PAIYANNOI to word + uc = utext_current32(text); // Fetch next character + } + else { + // Restore prior position + utext_next32(text); + } + } + if (uc == THAI_MAIYAMOK) { + if (utext_previous32(text) != THAI_MAIYAMOK) { + // Skip over previous end and MAIYAMOK + utext_next32(text); + utext_next32(text); + wordLength += 1; // Add MAIYAMOK to word + } + else { + // Restore prior position + utext_next32(text); + } + } + } + else { + utext_setNativeIndex(text, current+wordLength); + } + } + + // Did we find a word on this iteration? If so, push it on the break stack + if (wordLength > 0) { + foundBreaks.push((current+wordLength), status); + } + } + + // Don't return a break for the end of the dictionary range if there is one there. + if (foundBreaks.peeki() >= rangeEnd) { + (void) foundBreaks.popi(); + wordsFound -= 1; + } + + return wordsFound; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/dictbe.h b/icuSources/common/dictbe.h new file mode 100644 index 00000000..80a52f57 --- /dev/null +++ b/icuSources/common/dictbe.h @@ -0,0 +1,193 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#ifndef DICTBE_H +#define DICTBE_H + +#include "unicode/utypes.h" +#include "unicode/uniset.h" +#include "unicode/utext.h" + +#include "brkeng.h" + +U_NAMESPACE_BEGIN + +class TrieWordDictionary; + +/******************************************************************* + * DictionaryBreakEngine + */ + +/** + *

DictionaryBreakEngine is a kind of LanguageBreakEngine that uses a + * dictionary to determine language-specific breaks.

+ * + *

After it is constructed a DictionaryBreakEngine may be shared between + * threads without synchronization.

+ */ +class DictionaryBreakEngine : public LanguageBreakEngine { + private: + /** + * The set of characters handled by this engine + * @internal + */ + + UnicodeSet fSet; + + /** + * The set of break types handled by this engine + * @internal + */ + + uint32_t fTypes; + + /** + *

Default constructor.

+ * + */ + DictionaryBreakEngine(); + + public: + + /** + *

Constructor setting the break types handled.

+ * + * @param breakTypes A bitmap of types handled by the engine. + */ + DictionaryBreakEngine( uint32_t breakTypes ); + + /** + *

Virtual destructor.

+ */ + virtual ~DictionaryBreakEngine(); + + /** + *

Indicate whether this engine handles a particular character for + * a particular kind of break.

+ * + * @param c A character which begins a run that the engine might handle + * @param breakType The type of text break which the caller wants to determine + * @return TRUE if this engine handles the particular character and break + * type. + */ + virtual UBool handles( UChar32 c, int32_t breakType ) const; + + /** + *

Find any breaks within a run in the supplied text.

+ * + * @param text A UText representing the text. The + * iterator is left at the end of the run of characters which the engine + * is capable of handling. + * @param startPos The start of the run within the supplied text. + * @param endPos The end of the run within the supplied text. + * @param reverse Whether the caller is looking for breaks in a reverse + * direction. + * @param breakType The type of break desired, or -1. + * @param foundBreaks An allocated C array of the breaks found, if any + * @return The number of breaks found. + */ + virtual int32_t findBreaks( UText *text, + int32_t startPos, + int32_t endPos, + UBool reverse, + int32_t breakType, + UStack &foundBreaks ) const; + + protected: + + /** + *

Set the character set handled by this engine.

+ * + * @param set A UnicodeSet of the set of characters handled by the engine + */ + virtual void setCharacters( UnicodeSet &set ); + + /** + *

Set the break types handled by this engine.

+ * + * @param breakTypes A bitmap of types handled by the engine. + */ +// virtual void setBreakTypes( uint32_t breakTypes ); + + /** + *

Divide up a range of known dictionary characters.

+ * + * @param text A UText representing the text + * @param rangeStart The start of the range of dictionary characters + * @param rangeEnd The end of the range of dictionary characters + * @param foundBreaks Output of C array of int32_t break positions, or 0 + * @return The number of breaks found + */ + virtual int32_t divideUpDictionaryRange( UText *text, + int32_t rangeStart, + int32_t rangeEnd, + UStack &foundBreaks ) const = 0; + +}; + +/******************************************************************* + * ThaiBreakEngine + */ + +/** + *

ThaiBreakEngine is a kind of DictionaryBreakEngine that uses a + * TrieWordDictionary and heuristics to determine Thai-specific breaks.

+ * + *

After it is constructed a ThaiBreakEngine may be shared between + * threads without synchronization.

+ */ +class ThaiBreakEngine : public DictionaryBreakEngine { + private: + /** + * The set of characters handled by this engine + * @internal + */ + + UnicodeSet fThaiWordSet; + UnicodeSet fEndWordSet; + UnicodeSet fBeginWordSet; + UnicodeSet fSuffixSet; + UnicodeSet fMarkSet; + const TrieWordDictionary *fDictionary; + + public: + + /** + *

Default constructor.

+ * + * @param adoptDictionary A TrieWordDictionary to adopt. Deleted when the + * engine is deleted. + */ + ThaiBreakEngine(const TrieWordDictionary *adoptDictionary, UErrorCode &status); + + /** + *

Virtual destructor.

+ */ + virtual ~ThaiBreakEngine(); + + protected: + /** + *

Divide up a range of known dictionary characters.

+ * + * @param text A UText representing the text + * @param rangeStart The start of the range of dictionary characters + * @param rangeEnd The end of the range of dictionary characters + * @param foundBreaks Output of C array of int32_t break positions, or 0 + * @return The number of breaks found + */ + virtual int32_t divideUpDictionaryRange( UText *text, + int32_t rangeStart, + int32_t rangeEnd, + UStack &foundBreaks ) const; + +}; + + +U_NAMESPACE_END + + /* DICTBE_H */ +#endif diff --git a/icuSources/common/hash.h b/icuSources/common/hash.h index f1ea543c..375499bf 100644 --- a/icuSources/common/hash.h +++ b/icuSources/common/hash.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -26,8 +26,9 @@ U_NAMESPACE_BEGIN */ class U_COMMON_API Hashtable : public UMemory { UHashtable* hash; + UHashtable hashObj; - inline void init(UHashFunction *keyHash, UKeyComparator *keyComp, UErrorCode& status); + inline void init(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status); public: /** @@ -37,6 +38,14 @@ public: */ Hashtable(UBool ignoreKeyCase, UErrorCode& status); + /** + * Construct a hashtable + * @param keyComp Compartor for comparing the keys + * @param valueComp Compartor for comparing the values + * @param status Error code + */ + Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status); + /** * Construct a hashtable * @param status Error code @@ -76,7 +85,12 @@ public: const UHashElement* find(const UnicodeString& key) const; const UHashElement* nextElement(int32_t& pos) const; + + UKeyComparator* setKeyCompartor(UKeyComparator*keyComp); + + UValueComparator* setValueCompartor(UValueComparator* valueComp); + UBool equals(const Hashtable& that) const; private: Hashtable(const Hashtable &other); // forbid copying of this class Hashtable &operator=(const Hashtable &other); // forbid copying of this class @@ -86,16 +100,22 @@ private: * Implementation ********************************************************************/ -inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, UErrorCode& status) { +inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, + UValueComparator *valueComp, UErrorCode& status) { if (U_FAILURE(status)) { return; } - hash = uhash_open(keyHash, keyComp, &status); + uhash_init(&hashObj, keyHash, keyComp, valueComp, &status); if (U_SUCCESS(status)) { + hash = &hashObj; uhash_setKeyDeleter(hash, uhash_deleteUnicodeString); } } +inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, + UErrorCode& status) : hash(0) { + init( uhash_hashUnicodeString, keyComp, valueComp, status); +} inline Hashtable::Hashtable(UBool ignoreKeyCase, UErrorCode& status) : hash(0) { @@ -103,26 +123,26 @@ inline Hashtable::Hashtable(UBool ignoreKeyCase, UErrorCode& status) : uhash_hashUnicodeString, ignoreKeyCase ? uhash_compareCaselessUnicodeString : uhash_compareUnicodeString, + NULL, status); } inline Hashtable::Hashtable(UErrorCode& status) : hash(0) { - init(uhash_hashUnicodeString, uhash_compareUnicodeString, status); + init(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, status); } inline Hashtable::Hashtable() : hash(0) { UErrorCode status = U_ZERO_ERROR; - init(uhash_hashUnicodeString, uhash_compareUnicodeString, status); + init(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, status); } inline Hashtable::~Hashtable() { - if (hash != 0) { + if (hash != NULL) { uhash_close(hash); - hash = 0; } } @@ -167,9 +187,21 @@ inline const UHashElement* Hashtable::nextElement(int32_t& pos) const { } inline void Hashtable::removeAll(void) { - uhash_removeAll(hash); + uhash_removeAll(hash); } +inline UKeyComparator* Hashtable::setKeyCompartor(UKeyComparator*keyComp){ + return uhash_setKeyComparator(hash, keyComp); +} + +inline UValueComparator* Hashtable::setValueCompartor(UValueComparator* valueComp){ + return uhash_setValueComparator(hash, valueComp); +} + +inline UBool Hashtable::equals(const Hashtable& that)const{ + return uhash_equals(hash, that.hash); +} U_NAMESPACE_END #endif + diff --git a/icuSources/common/iculserv.cpp b/icuSources/common/iculserv.cpp deleted file mode 100644 index f99462ba..00000000 --- a/icuSources/common/iculserv.cpp +++ /dev/null @@ -1,962 +0,0 @@ -/** - ******************************************************************************* - * Copyright (C) 2001-2004, International Business Machines Corporation and * - * others. All Rights Reserved. * - ******************************************************************************* - * - ******************************************************************************* - */ -#include "unicode/utypes.h" - -#if !UCONFIG_NO_SERVICE - -#include "unicode/resbund.h" -#include "uresimp.h" -#include "cmemory.h" -#include "iculserv.h" -#include "ustrfmt.h" -#include "uhash.h" -#include "charstr.h" -#include "ucln_cmn.h" -#include "uassert.h" - -// see LocaleUtility::getAvailableLocaleNames -static Hashtable * LocaleUtility_cache = NULL; - -#define UNDERSCORE_CHAR ((UChar)0x005f) -#define AT_SIGN_CHAR ((UChar)64) -#define PERIOD_CHAR ((UChar)46) - -/* - ****************************************************************** - */ - -/** - * Release all static memory held by Locale Utility. - */ -U_CDECL_BEGIN -static UBool U_CALLCONV service_cleanup(void) { - if (LocaleUtility_cache) { - delete LocaleUtility_cache; - LocaleUtility_cache = NULL; - } - return TRUE; -} -U_CDECL_END - -U_NAMESPACE_BEGIN - -UnicodeString& -LocaleUtility::canonicalLocaleString(const UnicodeString* id, UnicodeString& result) -{ - if (id == NULL) { - result.setToBogus(); - } else { - // Fix case only (no other changes) up to the first '@' or '.' or - // end of string, whichever comes first. In 3.0 I changed this to - // stop at first '@' or '.'. It used to run out to the end of - // string. My fix makes the tests pass but is probably - // structurally incorrect. See below. [alan 3.0] - - // TODO: Doug, you might want to revise this... - result = *id; - int32_t i = 0; - int32_t end = result.indexOf(AT_SIGN_CHAR); - int32_t n = result.indexOf(PERIOD_CHAR); - if (n >= 0 && n < end) { - end = n; - } - if (end < 0) { - end = result.length(); - } - n = result.indexOf(UNDERSCORE_CHAR); - if (n < 0) { - n = end; - } - for (; i < n; ++i) { - UChar c = result.charAt(i); - if (c >= 0x0041 && c <= 0x005a) { - c += 0x20; - result.setCharAt(i, c); - } - } - for (n = end; i < n; ++i) { - UChar c = result.charAt(i); - if (c >= 0x0061 && c <= 0x007a) { - c -= 0x20; - result.setCharAt(i, c); - } - } - } - return result; - -#if 0 - // This code does a proper full level 2 canonicalization of id. - // It's nasty to go from UChar to char to char to UChar -- but - // that's what you have to do to use the uloc_canonicalize - // function on UnicodeStrings. - - // I ended up doing the alternate fix (see above) not for - // performance reasons, although performance will certainly be - // better, but because doing a full level 2 canonicalization - // causes some tests to fail. [alan 3.0] - - // TODO: Doug, you might want to revisit this... - result.setToBogus(); - if (id != 0) { - int32_t buflen = id->length() + 8; // space for NUL - char* buf = (char*) uprv_malloc(buflen); - char* canon = (buf == 0) ? 0 : (char*) uprv_malloc(buflen); - if (buf != 0 && canon != 0) { - U_ASSERT(id->extract(0, INT32_MAX, buf, buflen) < buflen); - UErrorCode ec = U_ZERO_ERROR; - uloc_canonicalize(buf, canon, buflen, &ec); - if (U_SUCCESS(ec)) { - result = UnicodeString(canon); - } - } - uprv_free(buf); - uprv_free(canon); - } - return result; -#endif -} - -Locale& -LocaleUtility::initLocaleFromName(const UnicodeString& id, Locale& result) -{ - enum { BUFLEN = 128 }; // larger than ever needed - - if (id.isBogus() || id.length() >= BUFLEN) { - result.setToBogus(); - } else { - /* - * We need to convert from a UnicodeString to char * in order to - * create a Locale. - * - * Problem: Locale ID strings may contain '@' which is a variant - * character and cannot be handled by invariant-character conversion. - * - * Hack: Since ICU code can handle locale IDs with multiple encodings - * of '@' (at least for EBCDIC; it's not known to be a problem for - * ASCII-based systems), - * we use regular invariant-character conversion for everything else - * and manually convert U+0040 into a compiler-char-constant '@'. - * While this compilation-time constant may not match the runtime - * encoding of '@', it should be one of the encodings which ICU - * recognizes. - * - * There should be only at most one '@' in a locale ID. - */ - char buffer[BUFLEN]; - int32_t prev, i; - prev = 0; - for(;;) { - i = id.indexOf((UChar)0x40, prev); - if(i < 0) { - // no @ between prev and the rest of the string - id.extract(prev, INT32_MAX, buffer + prev, BUFLEN - prev, US_INV); - break; // done - } else { - // normal invariant-character conversion for text between @s - id.extract(prev, i - prev, buffer + prev, BUFLEN - prev, US_INV); - // manually "convert" U+0040 at id[i] into '@' at buffer[i] - buffer[i] = '@'; - prev = i + 1; - } - } - result = Locale::createFromName(buffer); - } - return result; -} - -UnicodeString& -LocaleUtility::initNameFromLocale(const Locale& locale, UnicodeString& result) -{ - if (locale.isBogus()) { - result.setToBogus(); - } else { - result.append(UnicodeString(locale.getName(), -1, US_INV)); - } - return result; -} - -const Hashtable* -LocaleUtility::getAvailableLocaleNames(const UnicodeString& bundleID) -{ - // LocaleUtility_cache is a hash-of-hashes. The top-level keys - // are path strings ('bundleID') passed to - // ures_openAvailableLocales. The top-level values are - // second-level hashes. The second-level keys are result strings - // from ures_openAvailableLocales. The second-level values are - // garbage ((void*)1 or other random pointer). - - UErrorCode status = U_ZERO_ERROR; - Hashtable* cache; - umtx_lock(NULL); - cache = LocaleUtility_cache; - umtx_unlock(NULL); - - if (cache == NULL) { - cache = new Hashtable(status); - if (cache == NULL || U_FAILURE(status)) { - return NULL; // catastrophic failure; e.g. out of memory - } - cache->setValueDeleter(uhash_deleteHashtable); - Hashtable* h; // set this to final LocaleUtility_cache value - umtx_lock(NULL); - h = LocaleUtility_cache; - if (h == NULL) { - LocaleUtility_cache = h = cache; - cache = NULL; - ucln_common_registerCleanup(UCLN_COMMON_SERVICE, service_cleanup); - } - umtx_unlock(NULL); - delete cache; - cache = h; - } - - U_ASSERT(cache != NULL); - - Hashtable* htp; - umtx_lock(NULL); - htp = (Hashtable*) cache->get(bundleID); - umtx_unlock(NULL); - - if (htp == NULL) { - htp = new Hashtable(status); - if (htp && U_SUCCESS(status)) { - CharString cbundleID(bundleID); - const char* path = (const char*) cbundleID; - if (*path == 0) path = NULL; // empty string => NULL - UEnumeration *uenum = ures_openAvailableLocales(path, &status); - for (;;) { - const UChar* id = uenum_unext(uenum, NULL, &status); - if (id == NULL) { - break; - } - htp->put(UnicodeString(id), (void*)htp, status); - } - uenum_close(uenum); - if (U_FAILURE(status)) { - delete htp; - return NULL; - } - umtx_lock(NULL); - cache->put(bundleID, (void*)htp, status); - umtx_unlock(NULL); - } - } - return htp; -} - -UBool -LocaleUtility::isFallbackOf(const UnicodeString& root, const UnicodeString& child) -{ - return child.indexOf(root) == 0 && - (child.length() == root.length() || - child.charAt(root.length()) == UNDERSCORE_CHAR); -} - -/* - ****************************************************************** - */ - -const int32_t LocaleKey::KIND_ANY = -1; - -LocaleKey* -LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID, - const UnicodeString* canonicalFallbackID, - UErrorCode& status) -{ - return LocaleKey::createWithCanonicalFallback(primaryID, canonicalFallbackID, KIND_ANY, status); -} - -LocaleKey* -LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID, - const UnicodeString* canonicalFallbackID, - int32_t kind, - UErrorCode& status) -{ - if (primaryID == NULL || U_FAILURE(status)) { - return NULL; - } - UnicodeString canonicalPrimaryID; - LocaleUtility::canonicalLocaleString(primaryID, canonicalPrimaryID); - return new LocaleKey(*primaryID, canonicalPrimaryID, canonicalFallbackID, kind); -} - -LocaleKey::LocaleKey(const UnicodeString& primaryID, - const UnicodeString& canonicalPrimaryID, - const UnicodeString* canonicalFallbackID, - int32_t kind) - : ICUServiceKey(primaryID) - , _kind(kind) - , _primaryID(canonicalPrimaryID) - , _fallbackID() - , _currentID() -{ - _fallbackID.setToBogus(); - if (_primaryID.length() != 0) { - if (canonicalFallbackID != NULL && _primaryID != *canonicalFallbackID) { - _fallbackID = *canonicalFallbackID; - } - } - - _currentID = _primaryID; -} - -LocaleKey::~LocaleKey() {} - -UnicodeString& -LocaleKey::prefix(UnicodeString& result) const { - if (_kind != KIND_ANY) { - UChar buffer[64]; - uprv_itou(buffer, 64, _kind, 10, 0); - UnicodeString temp(buffer); - result.append(temp); - } - return result; -} - -int32_t -LocaleKey::kind() const { - return _kind; -} - -UnicodeString& -LocaleKey::canonicalID(UnicodeString& result) const { - return result.append(_primaryID); -} - -UnicodeString& -LocaleKey::currentID(UnicodeString& result) const { - if (!_currentID.isBogus()) { - result.append(_currentID); - } - return result; -} - -UnicodeString& -LocaleKey::currentDescriptor(UnicodeString& result) const { - if (!_currentID.isBogus()) { - prefix(result).append(PREFIX_DELIMITER).append(_currentID); - } else { - result.setToBogus(); - } - return result; -} - -Locale& -LocaleKey::canonicalLocale(Locale& result) const { - return LocaleUtility::initLocaleFromName(_primaryID, result); -} - -Locale& -LocaleKey::currentLocale(Locale& result) const { - return LocaleUtility::initLocaleFromName(_currentID, result); -} - -UBool -LocaleKey::fallback() { - if (!_currentID.isBogus()) { - int x = _currentID.lastIndexOf(UNDERSCORE_CHAR); - if (x != -1) { - _currentID.remove(x); // truncate current or fallback, whichever we're pointing to - return TRUE; - } - - if (!_fallbackID.isBogus()) { - _currentID = _fallbackID; - _fallbackID.setToBogus(); - return TRUE; - } - - if (_currentID.length() > 0) { - _currentID.remove(0); // completely truncate - return TRUE; - } - - _currentID.setToBogus(); - } - - return FALSE; -} - -UBool -LocaleKey::isFallbackOf(const UnicodeString& id) const { - UnicodeString temp(id); - parseSuffix(temp); - return temp.indexOf(_primaryID) == 0 && - (temp.length() == _primaryID.length() || - temp.charAt(_primaryID.length()) == UNDERSCORE_CHAR); -} - -#ifdef SERVICE_DEBUG -UnicodeString& -LocaleKey::debug(UnicodeString& result) const -{ - ICUServiceKey::debug(result); - result.append(" kind: "); - result.append(_kind); - result.append(" primaryID: "); - result.append(_primaryID); - result.append(" fallbackID: "); - result.append(_fallbackID); - result.append(" currentID: "); - result.append(_currentID); - return result; -} - -UnicodeString& -LocaleKey::debugClass(UnicodeString& result) const -{ - return result.append("LocaleKey "); -} -#endif - -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKey) - -/* - ****************************************************************** - */ - -LocaleKeyFactory::LocaleKeyFactory(int32_t coverage) - : _name() - , _coverage(coverage) -{ -} - -LocaleKeyFactory::LocaleKeyFactory(int32_t coverage, const UnicodeString& name) - : _name(name) - , _coverage(coverage) -{ -} - -LocaleKeyFactory::~LocaleKeyFactory() { -} - -UObject* -LocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const { - if (handlesKey(key, status)) { - const LocaleKey& lkey = (const LocaleKey&)key; - int32_t kind = lkey.kind(); - Locale loc; - lkey.currentLocale(loc); - - return handleCreate(loc, kind, service, status); - } - return NULL; -} - -UBool -LocaleKeyFactory::handlesKey(const ICUServiceKey& key, UErrorCode& status) const { - const Hashtable* supported = getSupportedIDs(status); - if (supported) { - UnicodeString id; - key.currentID(id); - return supported->get(id) != NULL; - } - return FALSE; -} - -void -LocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const { - const Hashtable* supported = getSupportedIDs(status); - if (supported) { - UBool visible = (_coverage & 0x1) == 0; - - const UHashElement* elem = NULL; - int32_t pos = 0; - while ((elem = supported->nextElement(pos)) != NULL) { - const UnicodeString& id = *((const UnicodeString*)elem->key.pointer); - if (!visible) { - result.remove(id); - } else { - result.put(id, (void*)this, status); // this is dummy non-void marker used for set semantics - if (U_FAILURE(status)) { - break; - } - } - } - } -} - -UnicodeString& -LocaleKeyFactory::getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const { - if ((_coverage & 0x1) == 0) { - //UErrorCode status = U_ZERO_ERROR; - // assume if this is called on us, we support some fallback of this id - // if (isSupportedID(id, status)) { - Locale loc; - LocaleUtility::initLocaleFromName(id, loc); - return loc.getDisplayName(locale, result); - // } - } - result.setToBogus(); - return result; -} - -UObject* -LocaleKeyFactory::handleCreate(const Locale& /* loc */, - int32_t /* kind */, - const ICUService* /* service */, - UErrorCode& /* status */) const { - return NULL; -} - -UBool -LocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& status) const { - const Hashtable* ids = getSupportedIDs(status); - return ids && ids->get(id); -} - -const Hashtable* -LocaleKeyFactory::getSupportedIDs(UErrorCode& /* status */) const { - return NULL; -} - -#ifdef SERVICE_DEBUG -UnicodeString& -LocaleKeyFactory::debug(UnicodeString& result) const -{ - debugClass(result); - result.append(", name: "); - result.append(_name); - result.append(", coverage: "); - result.append(_coverage); - return result; -} - -UnicodeString& -LocaleKeyFactory::debugClass(UnicodeString& result) const -{ - return result.append("LocaleKeyFactory"); -} -#endif - -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKeyFactory) - -/* - ****************************************************************** - */ - -SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, - const UnicodeString& locale, - int32_t kind, - int32_t coverage) - : LocaleKeyFactory(coverage) - , _obj(objToAdopt) - , _id(locale) - , _kind(kind) -{ -} - -SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, - const Locale& locale, - int32_t kind, - int32_t coverage) - : LocaleKeyFactory(coverage) - , _obj(objToAdopt) - , _id() - , _kind(kind) -{ - LocaleUtility::initNameFromLocale(locale, _id); -} - -SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory() -{ - delete _obj; - _obj = NULL; -} - -UObject* -SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const -{ - if (U_SUCCESS(status)) { - const LocaleKey& lkey = (const LocaleKey&)key; - if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) { - UnicodeString keyID; - lkey.currentID(keyID); - if (_id == keyID) { - return service->cloneInstance(_obj); - } - } - } - return NULL; -} - -UBool -SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const -{ - return id == _id; -} - -void -SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const -{ - if (U_SUCCESS(status)) { - if (_coverage & 0x1) { - result.remove(_id); - } else { - result.put(_id, (void*)this, status); - } - } -} - -#ifdef SERVICE_DEBUG -UnicodeString& -SimpleLocaleKeyFactory::debug(UnicodeString& result) const -{ - LocaleKeyFactory::debug(result); - result.append(", id: "); - result.append(_id); - result.append(", kind: "); - result.append(_kind); - return result; -} - -UnicodeString& -SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const -{ - return result.append("SimpleLocaleKeyFactory"); -} -#endif - -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory) - -/* - ****************************************************************** - */ - -ICUResourceBundleFactory::ICUResourceBundleFactory() - : LocaleKeyFactory(VISIBLE) - , _bundleName() -{ -} - -ICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName) - : LocaleKeyFactory(VISIBLE) - , _bundleName(bundleName) -{ -} - -ICUResourceBundleFactory::~ICUResourceBundleFactory() {} - -const Hashtable* -ICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const -{ - if (U_SUCCESS(status)) { - return LocaleUtility::getAvailableLocaleNames(_bundleName); - } - return NULL; -} - -UObject* -ICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const -{ - if (U_SUCCESS(status)) { - // _bundleName is a package name - // and should only contain invariant characters - char pkg[20]; - int32_t length; - length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV); - if(length>=(int32_t)sizeof(pkg)) { - return NULL; - } - return new ResourceBundle(pkg, loc, status); - } - return NULL; -} - -#ifdef SERVICE_DEBUG -UnicodeString& -ICUResourceBundleFactory::debug(UnicodeString& result) const -{ - LocaleKeyFactory::debug(result); - result.append(", bundle: "); - return result.append(_bundleName); -} - -UnicodeString& -ICUResourceBundleFactory::debugClass(UnicodeString& result) const -{ - return result.append("ICUResourceBundleFactory"); -} -#endif - -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory) - -/* - ****************************************************************** - */ - -ICULocaleService::ICULocaleService() - : fallbackLocale(Locale::getDefault()) - , llock(0) -{ - umtx_init(&llock); -} - -ICULocaleService::ICULocaleService(const UnicodeString& dname) - : ICUService(dname) - , fallbackLocale(Locale::getDefault()) - , llock(0) -{ - umtx_init(&llock); -} - -ICULocaleService::~ICULocaleService() -{ - umtx_destroy(&llock); -} - -UObject* -ICULocaleService::get(const Locale& locale, UErrorCode& status) const -{ - return get(locale, LocaleKey::KIND_ANY, NULL, status); -} - -UObject* -ICULocaleService::get(const Locale& locale, int32_t kind, UErrorCode& status) const -{ - return get(locale, kind, NULL, status); -} - -UObject* -ICULocaleService::get(const Locale& locale, Locale* actualReturn, UErrorCode& status) const -{ - return get(locale, LocaleKey::KIND_ANY, actualReturn, status); -} - -UObject* -ICULocaleService::get(const Locale& locale, int32_t kind, Locale* actualReturn, UErrorCode& status) const -{ - UObject* result = NULL; - if (U_FAILURE(status)) { - return result; - } - - UnicodeString locName(locale.getName(), -1, US_INV); - if (locName.isBogus()) { - status = U_MEMORY_ALLOCATION_ERROR; - } else { - ICUServiceKey* key = createKey(&locName, kind, status); - if (key) { - if (actualReturn == NULL) { - result = getKey(*key, status); - } else { - UnicodeString temp; - result = getKey(*key, &temp, status); - - if (result != NULL) { - key->parseSuffix(temp); - LocaleUtility::initLocaleFromName(temp, *actualReturn); - } - } - delete key; - } - } - return result; -} - - -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, - UBool visible, UErrorCode& status) -{ - Locale loc; - LocaleUtility::initLocaleFromName(locale, loc); - return registerInstance(objToAdopt, loc, LocaleKey::KIND_ANY, - visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE, status); -} - -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, UErrorCode& status) -{ - return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, LocaleKeyFactory::VISIBLE, status); -} - -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, UErrorCode& status) -{ - return registerInstance(objToAdopt, locale, kind, LocaleKeyFactory::VISIBLE, status); -} - -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, int32_t coverage, UErrorCode& status) -{ - ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage); - if (factory != NULL) { - return registerFactory(factory, status); - } - delete objToAdopt; - return NULL; -} - -#if 0 -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UErrorCode& status) -{ - return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, LocaleKeyFactory::VISIBLE, status); -} - -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status) -{ - return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, - visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE, - status); -} - -URegistryKey -ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, int32_t kind, int32_t coverage, UErrorCode& status) -{ - ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage); - if (factory != NULL) { - return registerFactory(factory, status); - } - delete objToAdopt; - return NULL; -} -#endif - -class ServiceEnumeration : public StringEnumeration { -private: - const ICULocaleService* _service; - int32_t _timestamp; - UVector _ids; - int32_t _pos; - -private: - ServiceEnumeration(const ICULocaleService* service, UErrorCode &status) - : _service(service) - , _timestamp(service->getTimestamp()) - , _ids(uhash_deleteUnicodeString, NULL, status) - , _pos(0) - { - _service->getVisibleIDs(_ids, status); - } - - ServiceEnumeration(const ServiceEnumeration &other, UErrorCode &status) - : _service(other._service) - , _timestamp(other._timestamp) - , _ids(uhash_deleteUnicodeString, NULL, status) - , _pos(0) - { - if(U_SUCCESS(status)) { - int32_t i, length; - - length = other._ids.size(); - for(i = 0; i < length; ++i) { - _ids.addElement(((UnicodeString *)other._ids.elementAt(i))->clone(), status); - } - - if(U_SUCCESS(status)) { - _pos = other._pos; - } - } - } - -public: - static ServiceEnumeration* create(const ICULocaleService* service) { - UErrorCode status = U_ZERO_ERROR; - ServiceEnumeration* result = new ServiceEnumeration(service, status); - if (U_SUCCESS(status)) { - return result; - } - delete result; - return NULL; - } - - virtual ~ServiceEnumeration() {} - - virtual StringEnumeration *clone() const { - UErrorCode status = U_ZERO_ERROR; - ServiceEnumeration *cl = new ServiceEnumeration(*this, status); - if(U_FAILURE(status)) { - delete cl; - cl = NULL; - } - return cl; - } - - UBool upToDate(UErrorCode& status) const { - if (U_SUCCESS(status)) { - if (_timestamp == _service->getTimestamp()) { - return TRUE; - } - status = U_ENUM_OUT_OF_SYNC_ERROR; - } - return FALSE; - } - - virtual int32_t count(UErrorCode& status) const { - return upToDate(status) ? _ids.size() : 0; - } - - virtual const UnicodeString* snext(UErrorCode& status) { - if (upToDate(status) && (_pos < _ids.size())) { - return (const UnicodeString*)_ids[_pos++]; - } - return NULL; - } - - virtual void reset(UErrorCode& status) { - if (status == U_ENUM_OUT_OF_SYNC_ERROR) { - status = U_ZERO_ERROR; - } - if (U_SUCCESS(status)) { - _timestamp = _service->getTimestamp(); - _pos = 0; - _service->getVisibleIDs(_ids, status); - } - } - -public: - static UClassID U_EXPORT2 getStaticClassID(void); - virtual UClassID getDynamicClassID(void) const; -}; - -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ServiceEnumeration) - -StringEnumeration* -ICULocaleService::getAvailableLocales(void) const -{ - return ServiceEnumeration::create(this); -} - -const UnicodeString& -ICULocaleService::validateFallbackLocale() const -{ - const Locale& loc = Locale::getDefault(); - ICULocaleService* ncThis = (ICULocaleService*)this; - { - Mutex mutex(&ncThis->llock); - if (loc != fallbackLocale) { - ncThis->fallbackLocale = loc; - LocaleUtility::initNameFromLocale(loc, ncThis->fallbackLocaleName); - ncThis->clearServiceCache(); - } - } - return fallbackLocaleName; -} - -ICUServiceKey* -ICULocaleService::createKey(const UnicodeString* id, UErrorCode& status) const -{ - return LocaleKey::createWithCanonicalFallback(id, &validateFallbackLocale(), status); -} - -ICUServiceKey* -ICULocaleService::createKey(const UnicodeString* id, int32_t kind, UErrorCode& status) const -{ - return LocaleKey::createWithCanonicalFallback(id, &validateFallbackLocale(), kind, status); -} - -U_NAMESPACE_END - -/* !UCONFIG_NO_SERVICE */ -#endif - - diff --git a/icuSources/common/icunotif.cpp b/icuSources/common/icunotif.cpp deleted file mode 100644 index f8b64862..00000000 --- a/icuSources/common/icunotif.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/** - ******************************************************************************* - * Copyright (C) 2001-2003, International Business Machines Corporation and * - * others. All Rights Reserved. * - ******************************************************************************* - */ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_SERVICE - -#include "icunotif.h" -#if DEBUG -#include -#endif - -U_NAMESPACE_BEGIN - -EventListener::~EventListener() {} -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(EventListener) - -ICUNotifier::ICUNotifier(void) - : notifyLock(0), listeners(NULL) -{ - umtx_init(¬ifyLock); -} - -ICUNotifier::~ICUNotifier(void) { - { - Mutex lmx(¬ifyLock); - delete listeners; - listeners = NULL; - } - umtx_destroy(¬ifyLock); -} - - -void -ICUNotifier::addListener(const EventListener* l, UErrorCode& status) -{ - if (U_SUCCESS(status)) { - if (l == NULL) { - status = U_ILLEGAL_ARGUMENT_ERROR; - } - - if (acceptsListener(*l)) { - Mutex lmx(¬ifyLock); - if (listeners == NULL) { - listeners = new UVector(5, status); - } else { - for (int i = 0, e = listeners->size(); i < e; ++i) { - const EventListener* el = (const EventListener*)(listeners->elementAt(i)); - if (l == el) { - return; - } - } - } - - listeners->addElement((void*)l, status); // cast away const - } else { -#if DEBUG - fprintf(stderr, "Listener invalid for this notifier."); - exit(1); -#endif - } - } -} - -void -ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) -{ - if (U_SUCCESS(status)) { - if (l == NULL) { - status = U_ILLEGAL_ARGUMENT_ERROR; - return; - } - - { - Mutex lmx(¬ifyLock); - if (listeners != NULL) { - // identity equality check - for (int i = 0, e = listeners->size(); i < e; ++i) { - const EventListener* el = (const EventListener*)listeners->elementAt(i); - if (l == el) { - listeners->removeElementAt(i); - if (listeners->size() == 0) { - delete listeners; - listeners = NULL; - } - return; - } - } - } - } - } -} - -void -ICUNotifier::notifyChanged(void) -{ - if (listeners != NULL) { - Mutex lmx(¬ifyLock); - if (listeners != NULL) { - for (int i = 0, e = listeners->size(); i < e; ++i) { - EventListener* el = (EventListener*)listeners->elementAt(i); - notifyListener(*el); - } - } - } -} - -U_NAMESPACE_END - -/* UCONFIG_NO_SERVICE */ -#endif - diff --git a/icuSources/common/localsvc.cpp b/icuSources/common/localsvc.cpp new file mode 100644 index 00000000..cb0cf6ca --- /dev/null +++ b/icuSources/common/localsvc.cpp @@ -0,0 +1,29 @@ +// +// localsvc.cpp -- Apple-specific service hook +// Copyright (c) 2007 Apple Inc. All rights reserved. +// + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "aaplbfct.h" +#include "cstring.h" +#if defined(U_DARWIN) +#include +#endif + +// Return an appropriate Apple-specific object, based on the service in question +U_CAPI void* uprv_svc_hook(const char *what, UErrorCode *status) +{ + if (uprv_strcmp(what, "languageBreakFactory") == 0) { +#if defined(U_DARWIN) && TARGET_OS_MAC + return new AppleLanguageBreakFactory(*status); + } +#else + } +#endif + return NULL; +} + +#endif diff --git a/icuSources/common/localsvc.h b/icuSources/common/localsvc.h new file mode 100644 index 00000000..67e5a845 --- /dev/null +++ b/icuSources/common/localsvc.h @@ -0,0 +1,25 @@ +/* +*************************************************************************** +* Copyright (C) 2006 International Business Machines Corporation * +* and others. All rights reserved. * +*************************************************************************** +*/ + +#ifndef LOCALSVC_H +#define LOCALSVC_H + +#include "unicode/utypes.h" + +#if U_LOCAL_SERVICE_HOOK +/** + * Prototype for user-supplied service hook. This function is expected to return + * a type of factory object specific to the requested service. + * + * @param what service-specific string identifying the specific user hook + * @param status error status + * @return a service-specific hook, or NULL on failure. + */ +U_CAPI void* uprv_svc_hook(const char *what, UErrorCode *status); +#endif + +#endif diff --git a/icuSources/common/locid.cpp b/icuSources/common/locid.cpp index 87ab0d5d..cb8d59eb 100644 --- a/icuSources/common/locid.cpp +++ b/icuSources/common/locid.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1997-2004, International Business Machines + * Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -160,7 +160,7 @@ void locale_set_default_internal(const char *id) umtx_unlock(NULL); if (hashTableNeedsInit) { status = U_ZERO_ERROR; - UHashtable *tHashTable = uhash_open(uhash_hashChars, uhash_compareChars, &status); + UHashtable *tHashTable = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &status); if (U_FAILURE(status)) { return; } @@ -357,7 +357,7 @@ Locale::Locale( const char * newLanguage, /*if the whole string is longer than our internal limit, we need to go to the heap for temporary buffers*/ - if (size > ULOC_FULLNAME_CAPACITY) + if (size >= ULOC_FULLNAME_CAPACITY) { togo_heap = (char *)uprv_malloc(sizeof(char)*(size+1)); togo = togo_heap; @@ -553,7 +553,7 @@ Locale& Locale::init(const char* localeID, UBool canonicalize) fieldIdx = 1; while ((separator = uprv_strchr(field[fieldIdx-1], SEP_CHAR)) && fieldIdx < (int32_t)(sizeof(field)/sizeof(field[0]))-1) { field[fieldIdx] = separator + 1; - fieldLen[fieldIdx-1] = separator - field[fieldIdx-1]; + fieldLen[fieldIdx-1] = (int32_t)(separator - field[fieldIdx-1]); fieldIdx++; } // variant may contain @foo or .foo POSIX cruft; remove it @@ -563,7 +563,7 @@ Locale& Locale::init(const char* localeID, UBool canonicalize) if (separator==NULL || (sep2!=NULL && separator > sep2)) { separator = sep2; } - fieldLen[fieldIdx-1] = separator - field[fieldIdx-1]; + fieldLen[fieldIdx-1] = (int32_t)(separator - field[fieldIdx-1]); } else { fieldLen[fieldIdx-1] = length - (int32_t)(field[fieldIdx-1] - fullName); } @@ -604,7 +604,7 @@ Locale& Locale::init(const char* localeID, UBool canonicalize) // successful end of init() return *this; - } while(0); + } while(0); /*loop doesn't iterate*/ // when an error occurs, then set this object to "bogus" (there is no UErrorCode here) setToBogus(); @@ -745,7 +745,7 @@ Locale::getDisplayLanguage(const Locale &displayLocale, length=uloc_getDisplayLanguage(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { buffer=result.getBuffer(length); @@ -757,11 +757,7 @@ Locale::getDisplayLanguage(const Locale &displayLocale, length=uloc_getDisplayLanguage(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); - } - - if(U_FAILURE(errorCode)) { - result.truncate(0); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } return result; @@ -789,7 +785,7 @@ Locale::getDisplayScript(const Locale &displayLocale, length=uloc_getDisplayScript(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { buffer=result.getBuffer(length); @@ -801,11 +797,7 @@ Locale::getDisplayScript(const Locale &displayLocale, length=uloc_getDisplayScript(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); - } - - if(U_FAILURE(errorCode)) { - result.truncate(0); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } return result; @@ -833,7 +825,7 @@ Locale::getDisplayCountry(const Locale &displayLocale, length=uloc_getDisplayCountry(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { buffer=result.getBuffer(length); @@ -845,11 +837,7 @@ Locale::getDisplayCountry(const Locale &displayLocale, length=uloc_getDisplayCountry(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); - } - - if(U_FAILURE(errorCode)) { - result.truncate(0); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } return result; @@ -877,7 +865,7 @@ Locale::getDisplayVariant(const Locale &displayLocale, length=uloc_getDisplayVariant(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { buffer=result.getBuffer(length); @@ -889,11 +877,7 @@ Locale::getDisplayVariant(const Locale &displayLocale, length=uloc_getDisplayVariant(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); - } - - if(U_FAILURE(errorCode)) { - result.truncate(0); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } return result; @@ -921,7 +905,7 @@ Locale::getDisplayName(const Locale &displayLocale, length=uloc_getDisplayName(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { buffer=result.getBuffer(length); @@ -933,11 +917,7 @@ Locale::getDisplayName(const Locale &displayLocale, length=uloc_getDisplayName(fullName, displayLocale.fullName, buffer, result.getCapacity(), &errorCode); - result.releaseBuffer(length); - } - - if(U_FAILURE(errorCode)) { - result.truncate(0); + result.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } return result; @@ -957,6 +937,7 @@ Locale::getAvailableLocales(int32_t& count) newLocaleList = new Locale[locCount]; } if (newLocaleList == NULL) { + count = 0; return NULL; } @@ -1127,13 +1108,13 @@ const Locale & Locale::getLocale(int locid) { Locale *localeCache = getLocaleCache(); - U_ASSERT(locid < eMAX_LOCALES); + U_ASSERT((locid < eMAX_LOCALES)&&(locid>=0)); if (localeCache == NULL) { // Failure allocating the locale cache. // The best we can do is return a NULL reference. locid = 0; } - return localeCache[locid]; + return localeCache[locid]; /*operating on NULL*/ } /* @@ -1242,7 +1223,7 @@ public: int32_t len; if(U_SUCCESS(status) && *current != 0) { result = current; - len = uprv_strlen(current); + len = (int32_t)uprv_strlen(current); current += len+1; if(resultLength != NULL) { *resultLength = len; diff --git a/icuSources/common/locmap.c b/icuSources/common/locmap.c index a403ee48..135746d3 100644 --- a/icuSources/common/locmap.c +++ b/icuSources/common/locmap.c @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1996-2004, International Business Machines + * Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -121,14 +121,28 @@ static const ILcidPosixElement ar[] = { ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN) ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET) +ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL) static const ILcidPosixElement az[] = { {0x2c, "az"}, - {0x082c, "az_AZ"}, /* Cyrillic based */ - {0x042c, "az_Latn_AZ"} /* Latin based */ + {0x082c, "az_Cyrl_AZ"}, /* Cyrillic based */ + {0x082c, "az_Cyrl"}, /* Cyrillic based */ + {0x042c, "az_Latn_AZ"}, /* Latin based */ + {0x042c, "az_Latn"}, /* Latin based */ + {0x042c, "az_AZ"} /* Latin based */ }; +ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU) ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY) + +static const ILcidPosixElement ber[] = { + {0x5f, "ber"}, + {0x045f, "ber_Arab_DZ"}, + {0x045f, "ber_Arab"}, + {0x085f, "ber_Latn_DZ"}, + {0x085f, "ber_Latn"} +}; + ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG) static const ILcidPosixElement bn[] = { @@ -137,14 +151,15 @@ static const ILcidPosixElement bn[] = { {0x0445, "bn_IN"} }; - static const ILcidPosixElement bo[] = { {0x51, "bo"}, {0x0851, "bo_BT"}, {0x0451, "bo_CN"} }; +ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR) ILCID_POSIX_ELEMENT_ARRAY(0x0403, ca, ca_ES) +ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR) ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US) /* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */ @@ -163,7 +178,8 @@ static const ILcidPosixElement de[] = { {0x0407, "de_DE"}, {0x1407, "de_LI"}, {0x1007, "de_LU"}, - {0x10407,"de__PHONEBOOK"} /*This is really de_DE_PHONEBOOK on Windows, maybe 10007*/ + {0x10407,"de_DE@collation=phonebook"}, /*This is really de_DE_PHONEBOOK on Windows*/ + {0x10407,"de@collation=phonebook"} /*This is really de_DE_PHONEBOOK on Windows*/ }; ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV) @@ -176,9 +192,12 @@ static const ILcidPosixElement en[] = { {0x1009, "en_CA"}, {0x0809, "en_GB"}, {0x1809, "en_IE"}, + {0x4009, "en_IN"}, {0x2009, "en_JM"}, + {0x4409, "en_MY"}, {0x1409, "en_NZ"}, {0x3409, "en_PH"}, + {0x4809, "en_SG"}, {0x2C09, "en_TT"}, {0x0409, "en_US"}, {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */ @@ -193,7 +212,7 @@ static const ILcidPosixElement en[] = { }; static const ILcidPosixElement en_US_POSIX[] = { - {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */ + {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */ }; static const ILcidPosixElement es[] = { @@ -215,15 +234,31 @@ static const ILcidPosixElement es[] = { {0x500a, "es_PR"}, {0x3c0a, "es_PY"}, {0x440a, "es_SV"}, + {0x540a, "es_US"}, {0x380a, "es_UY"}, {0x200a, "es_VE"}, - {0x040a, "es__TRADITIONAL"} /*This is really es_ES_TRADITIONAL on Windows */ + {0x040a, "es_ES@collation=traditional"}, + {0x040a, "es@collation=traditional"} }; ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE) ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES) -ILCID_POSIX_ELEMENT_ARRAY(0x0429, fa, fa_IR) + +/* ISO-639 doesn't distinguish between Persian and Dari.*/ +static const ILcidPosixElement fa[] = { + {0x29, "fa"}, + {0x0429, "fa_IR"}, /* Persian/Farsi (Iran) */ + {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */ +}; + +/* duplicate for roundtripping */ +static const ILcidPosixElement fa_AF[] = { + {0x8c, "fa_AF"}, /* Persian/Dari (Afghanistan) */ + {0x048c, "fa_AF"} /* Persian/Dari (Afghanistan) */ +}; + ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI) +ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH) ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO) static const ILcidPosixElement fr[] = { @@ -257,7 +292,8 @@ static const ILcidPosixElement ga[] = { ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES) ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN) ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY) -ILCID_POSIX_ELEMENT_ARRAY(0x0468, ha, ha_NG) +ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR) +ILCID_POSIX_ELEMENT_ARRAY(0x0468, ha, ha_NG) /* ha_Latn_NG? */ ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US) ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL) ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN) @@ -265,20 +301,28 @@ ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN) /* This LCID is really four different locales.*/ static const ILcidPosixElement hr[] = { {0x1a, "hr"}, + {0x141a, "bs_Latn_BA"}, /* Bosnian, Bosnia and Herzegovina */ + {0x141a, "bs_Latn"}, /* Bosnian, Bosnia and Herzegovina */ {0x141a, "bs_BA"}, /* Bosnian, Bosnia and Herzegovina */ {0x141a, "bs"}, /* Bosnian */ + {0x201a, "bs_Cyrl_BA"}, /* Bosnian, Bosnia and Herzegovina */ + {0x201a, "bs_Cyrl"}, /* Bosnian, Bosnia and Herzegovina */ + {0x101a, "hr_BA"}, /* Croatian in Bosnia */ {0x041a, "hr_HR"}, /* Croatian*/ - {0x081a, "sr_Latn_YU"}, /* Serbo-Croatian*/ + {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */ + {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/ {0x081a, "sr_Latn"}, /* It's 0x1a or 0x081a, pick one to make the test program happy. */ - {0x0c1a, "sr_Cyrl_YU"}, /* Serbian*/ + {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */ + {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/ {0x0c1a, "sr_Cyrl"}, /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */ - {0x0c1a, "sr"}, /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */ + {0x0c1a, "sr"} /* In CLDR sr is sr_Cyrl. */ }; ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU) ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM) ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID) ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG) +ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN) ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS) static const ILcidPosixElement it[] = { @@ -287,11 +331,19 @@ static const ILcidPosixElement it[] = { {0x0410, "it_IT"} }; -ILCID_POSIX_ELEMENT_ARRAY(0x045d, iu, iu_CA) /* TODO: verify country */ +static const ILcidPosixElement iu[] = { + {0x5d, "iu"}, + {0x045d, "iu_Cans_CA"}, + {0x045d, "iu_Cans"}, + {0x085d, "iu_Latn_CA"}, + {0x085d, "iu_Latn"} +}; + ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL) /*Left in for compatibility*/ ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP) ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE) ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ) +ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL) ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH) ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN) @@ -312,14 +364,22 @@ static const ILcidPosixElement ks[] = { /* We could add PK and CN too */ ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG) /* Kyrgyz is spoken in Kyrgyzstan */ ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT) /* TODO: Verify the country */ +ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU) ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA) ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT) ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV) ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ) ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK) ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN) -ILCID_POSIX_ELEMENT_ARRAY(0x0450, mn, mn_MN) + +static const ILcidPosixElement mn[] = { + {0x50, "mn"}, + {0x0850, "mn_CN"}, + {0x0450, "mn_MN"} +}; + ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN) +ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA) ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN) static const ILcidPosixElement ms[] = { @@ -328,8 +388,8 @@ static const ILcidPosixElement ms[] = { {0x043e, "ms_MY"} /* Malaysia*/ }; -/* The MSJDK documentation says this is maltese, but it's not supported.*/ ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT) +ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM) static const ILcidPosixElement ne[] = { {0x61, "ne"}, @@ -354,7 +414,8 @@ static const ILcidPosixElement no[] = { {0x0814, "no_NO_NY"}/* really nn_NO */ }; -ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA) /* TODO: Verify the country */ +ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA) /* TODO: Verify the ISO-639 code */ +ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR) ILCID_POSIX_ELEMENT_ARRAY(0x0472, om, om_ET) /* TODO: Verify the country */ /* Declared as or_IN to get around compiler errors*/ @@ -379,12 +440,14 @@ static const ILcidPosixElement pt[] = { }; static const ILcidPosixElement qu[] = { - {0x6B, "qu"}, - {0x046B, "qu_BO"}, - {0x086B, "qu_EC"}, - {0x0C6B, "qu_PE"} + {0x6b, "qu"}, + {0x046b, "qu_BO"}, + {0x086b, "qu_EC"}, + {0x0C6b, "qu_PE"} }; +ILCID_POSIX_ELEMENT_ARRAY(0x0486, qut, qut_GT) /* qut is an ISO-639-3 code */ +ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH) ILCID_POSIX_ELEMENT_ARRAY(0x0418, ro, ro_RO) static const ILcidPosixElement root[] = { @@ -392,7 +455,9 @@ static const ILcidPosixElement root[] = { }; ILCID_POSIX_ELEMENT_ARRAY(0x0419, ru, ru_RU) +ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW) ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN) +ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU) static const ILcidPosixElement sd[] = { {0x59, "sd"}, @@ -400,6 +465,19 @@ static const ILcidPosixElement sd[] = { {0x0859, "sd_PK"} }; +static const ILcidPosixElement se[] = { + {0x3b, "se"}, + {0x0c3b, "se_FI"}, + {0x043b, "se_NO"}, + {0x083b, "se_SE"}, + {0x183b, "sma_NO"}, + {0x1c3b, "sma_SE"}, + {0x103b, "smj_NO"}, + {0x143b, "smj_SE"}, + {0x243b, "smn_FI"}, + {0x203b, "sms_FI"}, +}; + ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK) ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK) ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI) @@ -416,6 +494,7 @@ ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE) ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY) ILCID_POSIX_ELEMENT_ARRAY(0x0449, ta, ta_IN) ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN) +ILCID_POSIX_ELEMENT_ARRAY(0x0428, tg, tg_TJ) /* Cyrillic based by default */ ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH) static const ILcidPosixElement ti[] = { @@ -425,7 +504,6 @@ static const ILcidPosixElement ti[] = { }; ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM) -ILCID_POSIX_ELEMENT_ARRAY(0x0464, tl, tl_PH) ILCID_POSIX_ELEMENT_ARRAY(0x0432, tn, tn_BW) ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR) ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU) @@ -440,19 +518,31 @@ static const ILcidPosixElement ur[] = { static const ILcidPosixElement uz[] = { {0x43, "uz"}, + {0x0843, "uz_Cyrl_UZ"}, /* Cyrillic based */ + {0x0843, "uz_Cyrl"}, /* Cyrillic based */ {0x0843, "uz_UZ"}, /* Cyrillic based */ - {0x0443, "uz_Latn_UZ"} /* Latin based */ + {0x0443, "uz_Latn_UZ"}, /* Latin based */ + {0x0443, "uz_Latn"} /* Latin based */ }; ILCID_POSIX_ELEMENT_ARRAY(0x0433, ve, ve_ZA) /* TODO: Verify the country */ ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN) -ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA) /* TODO: Verify the country */ -ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG) /* TODO: Verify the country */ -/* TODO: Make the locales with the script the primary locale once the names are implemented in the resources. */ +static const ILcidPosixElement wen[] = { + {0x2E, "wen"}, + {0x042E, "wen_DE"}, + {0x042E, "hsb_DE"}, + {0x082E, "dsb_DE"} +}; + +ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN) +ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA) +ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG) + static const ILcidPosixElement zh[] = { {0x04, "zh"}, {0x0804, "zh_Hans_CN"}, + {0x0804, "zh_Hans"}, {0x0804, "zh_CN"}, {0x0c04, "zh_Hant_HK"}, {0x0c04, "zh_HK"}, @@ -461,39 +551,47 @@ static const ILcidPosixElement zh[] = { {0x1004, "zh_Hans_SG"}, {0x1004, "zh_SG"}, {0x0404, "zh_Hant_TW"}, + {0x0404, "zh_Hant"}, {0x0404, "zh_TW"}, - {0x30404,"zh_Hant_TW"}, + {0x30404,"zh_Hant_TW"}, /* Bopomofo order */ {0x30404,"zh_TW"}, /* Bopomofo order */ - {0x20404,"zh_TW@collation=STROKE"} + {0x20404,"zh_Hant_TW@collation=stroke"}, + {0x20404,"zh_Hant@collation=stroke"}, + {0x20404,"zh_TW@collation=stroke"}, + {0x20004,"zh@collation=stroke"}, + {0x20804,"zh_Hans_CN@collation=stroke"}, + {0x20804,"zh_Hans@collation=stroke"}, + {0x20804,"zh_CN@collation=stroke"} }; -ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA) /* TODO: Verify the country */ +ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA) /* This must be static and grouped by LCID. */ -/* non-existent ISO-639 codes */ +/* non-existent ISO-639-2 codes */ /* 0x466 Edo 0x467 Fulfulde - Nigeria -0x43b Sami (Lappish) -0x42e Sorbian (iso639 = dsb, hsb, wen) +0x486 K'iche - Guatemala 0x430 Sutu -0x45f Tamazight (Arabic script) -0x85f Tamazight (Latin script) -0x478 Yi */ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(af), /* af Afrikaans 0x36 */ ILCID_POSIX_MAP(am), /* am Amharic 0x5e */ ILCID_POSIX_MAP(ar), /* ar Arabic 0x01 */ + ILCID_POSIX_MAP(arn), /* arn Araucanian/Mapudungun 0x7a */ ILCID_POSIX_MAP(as), /* as Assamese 0x4d */ ILCID_POSIX_MAP(az), /* az Azerbaijani 0x2c */ + ILCID_POSIX_MAP(ba), /* ba Bashkir 0x6d */ ILCID_POSIX_MAP(be), /* be Belarusian 0x23 */ + ILCID_POSIX_MAP(ber), /* ber Berber/Tamazight 0x5f */ ILCID_POSIX_MAP(bg), /* bg Bulgarian 0x02 */ ILCID_POSIX_MAP(bn), /* bn Bengali; Bangla 0x45 */ ILCID_POSIX_MAP(bo), /* bo Tibetan 0x51 */ + ILCID_POSIX_MAP(br), /* br Breton 0x7e */ ILCID_POSIX_MAP(ca), /* ca Catalan 0x03 */ ILCID_POSIX_MAP(chr), /* chr Cherokee 0x5c */ + ILCID_POSIX_MAP(co), /* co Corsican 0x83 */ ILCID_POSIX_MAP(cs_CZ), /* cs Czech 0x05 */ ILCID_POSIX_MAP(cy), /* cy Welsh 0x52 */ ILCID_POSIX_MAP(da), /* da Danish 0x06 */ @@ -505,14 +603,17 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(es), /* es Spanish 0x0a */ ILCID_POSIX_MAP(et), /* et Estonian 0x25 */ ILCID_POSIX_MAP(eu), /* eu Basque 0x2d */ - ILCID_POSIX_MAP(fa), /* fa Farsi 0x29 */ + ILCID_POSIX_MAP(fa), /* fa Persian/Farsi 0x29 */ + ILCID_POSIX_MAP(fa_AF), /* fa Persian/Dari 0x8c */ ILCID_POSIX_MAP(fi), /* fi Finnish 0x0b */ + ILCID_POSIX_MAP(fil), /* fil Filipino 0x64 */ ILCID_POSIX_MAP(fo), /* fo Faroese 0x38 */ ILCID_POSIX_MAP(fr), /* fr French 0x0c */ ILCID_POSIX_MAP(fy), /* fy Frisian 0x62 */ ILCID_POSIX_MAP(ga), /* * Gaelic (Ireland,Scotland) 0x3c */ ILCID_POSIX_MAP(gl), /* gl Galician 0x56 */ ILCID_POSIX_MAP(gn), /* gn Guarani 0x74 */ + ILCID_POSIX_MAP(gsw), /* gsw Alemanic/Alsatian/Swiss German 0x84 */ ILCID_POSIX_MAP(gu), /* gu Gujarati 0x47 */ ILCID_POSIX_MAP(ha), /* ha Hausa 0x68 */ ILCID_POSIX_MAP(haw), /* haw Hawaiian 0x75 */ @@ -523,6 +624,7 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(hy), /* hy Armenian 0x2b */ ILCID_POSIX_MAP(id), /* id Indonesian (formerly in) 0x21 */ ILCID_POSIX_MAP(ig), /* ig Igbo 0x70 */ + ILCID_POSIX_MAP(ii), /* ii Sichuan Yi 0x78 */ ILCID_POSIX_MAP(is), /* is Icelandic 0x0f */ ILCID_POSIX_MAP(it), /* it Italian 0x10 */ ILCID_POSIX_MAP(iu), /* iu Inuktitut 0x5d */ @@ -530,6 +632,7 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(ja), /* ja Japanese 0x11 */ ILCID_POSIX_MAP(ka), /* ka Georgian 0x37 */ ILCID_POSIX_MAP(kk), /* kk Kazakh 0x3f */ + ILCID_POSIX_MAP(kl), /* kl Kalaallisut 0x6f */ ILCID_POSIX_MAP(km), /* km Khmer 0x53 */ ILCID_POSIX_MAP(kn), /* kn Kannada 0x4b */ ILCID_POSIX_MAP(ko), /* ko Korean 0x12 */ @@ -537,6 +640,7 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(kr), /* kr Kanuri 0x71 */ ILCID_POSIX_MAP(ks), /* ks Kashmiri 0x60 */ ILCID_POSIX_MAP(ky), /* ky Kyrgyz 0x40 */ + ILCID_POSIX_MAP(lb), /* lb Luxembourgish 0x6e */ ILCID_POSIX_MAP(la), /* la Latin 0x76 */ ILCID_POSIX_MAP(lo), /* lo Lao 0x54 */ ILCID_POSIX_MAP(lt), /* lt Lithuanian 0x27 */ @@ -546,27 +650,35 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(ml), /* ml Malayalam 0x4c */ ILCID_POSIX_MAP(mn), /* mn Mongolian 0x50 */ ILCID_POSIX_MAP(mni), /* mni Manipuri 0x58 */ + ILCID_POSIX_MAP(moh), /* moh Mohawk 0x7c */ ILCID_POSIX_MAP(mr), /* mr Marathi 0x4e */ ILCID_POSIX_MAP(ms), /* ms Malay 0x3e */ ILCID_POSIX_MAP(mt), /* mt Maltese 0x3a */ + ILCID_POSIX_MAP(my), /* my Burmese 0x55 */ /* ILCID_POSIX_MAP(nb), // no Norwegian 0x14 */ ILCID_POSIX_MAP(ne), /* ne Nepali 0x61 */ ILCID_POSIX_MAP(nl), /* nl Dutch 0x13 */ /* ILCID_POSIX_MAP(nn), // no Norwegian 0x14 */ ILCID_POSIX_MAP(no), /* * Norwegian 0x14 */ ILCID_POSIX_MAP(nso), /* nso Sotho, Northern (Sepedi dialect) 0x6c */ + ILCID_POSIX_MAP(oc), /* oc Occitan 0x82 */ ILCID_POSIX_MAP(om), /* om Oromo 0x72 */ ILCID_POSIX_MAP(or_IN), /* or Oriya 0x48 */ ILCID_POSIX_MAP(pa), /* pa Punjabi 0x46 */ ILCID_POSIX_MAP(pl), /* pl Polish 0x15 */ ILCID_POSIX_MAP(ps), /* ps Pashto 0x63 */ ILCID_POSIX_MAP(pt), /* pt Portuguese 0x16 */ - ILCID_POSIX_MAP(qu), /* qu Quechua (correct spelling)0x6B */ + ILCID_POSIX_MAP(qu), /* qu Quechua 0x6B */ + ILCID_POSIX_MAP(qut), /* qut K'iche 0x86 */ + ILCID_POSIX_MAP(rm), /* rm Raeto-Romance/Romansh 0x17 */ ILCID_POSIX_MAP(ro), /* ro Romanian 0x18 */ ILCID_POSIX_MAP(root), /* root 0x00 */ ILCID_POSIX_MAP(ru), /* ru Russian 0x19 */ + ILCID_POSIX_MAP(rw), /* rw Kinyarwanda 0x87 */ ILCID_POSIX_MAP(sa), /* sa Sanskrit 0x4f */ + ILCID_POSIX_MAP(sah), /* sah Yakut 0x85 */ ILCID_POSIX_MAP(sd), /* sd Sindhi 0x59 */ + ILCID_POSIX_MAP(se), /* se Sami 0x3b */ /* ILCID_POSIX_MAP(sh), // sh Serbo-Croatian 0x1a */ ILCID_POSIX_MAP(si), /* si Sinhalese 0x5b */ ILCID_POSIX_MAP(sk), /* sk Slovak 0x1b */ @@ -579,10 +691,10 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(syr), /* syr Syriac 0x5A */ ILCID_POSIX_MAP(ta), /* ta Tamil 0x49 */ ILCID_POSIX_MAP(te), /* te Telugu 0x4a */ + ILCID_POSIX_MAP(tg), /* tg Tajik 0x28 */ ILCID_POSIX_MAP(th), /* th Thai 0x1e */ ILCID_POSIX_MAP(ti), /* ti Tigrigna 0x73 */ ILCID_POSIX_MAP(tk), /* tk Turkmen 0x42 */ - ILCID_POSIX_MAP(tl), /* tl Tagalog (Filipino) 0x64 */ ILCID_POSIX_MAP(tn), /* tn Tswana 0x32 */ ILCID_POSIX_MAP(tr), /* tr Turkish 0x1f */ ILCID_POSIX_MAP(tt), /* tt Tatar 0x44 */ @@ -592,6 +704,8 @@ static const ILcidPosixMap gPosixIDmap[] = { ILCID_POSIX_MAP(uz), /* uz Uzbek 0x43 */ ILCID_POSIX_MAP(ve), /* ve Venda 0x33 */ ILCID_POSIX_MAP(vi), /* vi Vietnamese 0x2a */ + ILCID_POSIX_MAP(wen), /* wen Sorbian 0x2e */ + ILCID_POSIX_MAP(wo), /* wo Wolof 0x88 */ ILCID_POSIX_MAP(xh), /* xh Xhosa 0x34 */ ILCID_POSIX_MAP(yo), /* yo Yoruba 0x6a */ ILCID_POSIX_MAP(zh), /* zh Chinese 0x04 */ @@ -630,7 +744,7 @@ getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status) { int32_t bestIdx = 0; int32_t bestIdxDiff = 0; - int32_t posixIDlen = (int32_t)uprv_strlen(posixID) + 1; + int32_t posixIDlen = (int32_t)uprv_strlen(posixID); uint32_t idx; for (idx = 0; idx < this_0->numRegions; idx++ ) { @@ -644,7 +758,11 @@ getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status) bestIdx = idx; } } - if (this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0) { + /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */ + /* We also have to make sure that sid and si and similar string subsets don't match. */ + if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@') + && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0) + { *status = U_USING_FALLBACK_WARNING; return this_0->regionMaps[bestIdx].hostID; } diff --git a/icuSources/common/locutil.cpp b/icuSources/common/locutil.cpp new file mode 100644 index 00000000..777403d7 --- /dev/null +++ b/icuSources/common/locutil.cpp @@ -0,0 +1,267 @@ +/** + ******************************************************************************* + * Copyright (C) 2002-2005, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE || !UCONFIG_NO_TRANSLITERATION + +#include "unicode/resbund.h" +#include "cmemory.h" +#include "ustrfmt.h" +#include "locutil.h" +#include "charstr.h" +#include "ucln_cmn.h" +#include "uassert.h" +#include "umutex.h" + +// see LocaleUtility::getAvailableLocaleNames +static Hashtable * LocaleUtility_cache = NULL; + +#define UNDERSCORE_CHAR ((UChar)0x005f) +#define AT_SIGN_CHAR ((UChar)64) +#define PERIOD_CHAR ((UChar)46) + +/* + ****************************************************************** + */ + +/** + * Release all static memory held by Locale Utility. + */ +U_CDECL_BEGIN +static UBool U_CALLCONV service_cleanup(void) { + if (LocaleUtility_cache) { + delete LocaleUtility_cache; + LocaleUtility_cache = NULL; + } + return TRUE; +} +U_CDECL_END + +U_NAMESPACE_BEGIN + +UnicodeString& +LocaleUtility::canonicalLocaleString(const UnicodeString* id, UnicodeString& result) +{ + if (id == NULL) { + result.setToBogus(); + } else { + // Fix case only (no other changes) up to the first '@' or '.' or + // end of string, whichever comes first. In 3.0 I changed this to + // stop at first '@' or '.'. It used to run out to the end of + // string. My fix makes the tests pass but is probably + // structurally incorrect. See below. [alan 3.0] + + // TODO: Doug, you might want to revise this... + result = *id; + int32_t i = 0; + int32_t end = result.indexOf(AT_SIGN_CHAR); + int32_t n = result.indexOf(PERIOD_CHAR); + if (n >= 0 && n < end) { + end = n; + } + if (end < 0) { + end = result.length(); + } + n = result.indexOf(UNDERSCORE_CHAR); + if (n < 0) { + n = end; + } + for (; i < n; ++i) { + UChar c = result.charAt(i); + if (c >= 0x0041 && c <= 0x005a) { + c += 0x20; + result.setCharAt(i, c); + } + } + for (n = end; i < n; ++i) { + UChar c = result.charAt(i); + if (c >= 0x0061 && c <= 0x007a) { + c -= 0x20; + result.setCharAt(i, c); + } + } + } + return result; + +#if 0 + // This code does a proper full level 2 canonicalization of id. + // It's nasty to go from UChar to char to char to UChar -- but + // that's what you have to do to use the uloc_canonicalize + // function on UnicodeStrings. + + // I ended up doing the alternate fix (see above) not for + // performance reasons, although performance will certainly be + // better, but because doing a full level 2 canonicalization + // causes some tests to fail. [alan 3.0] + + // TODO: Doug, you might want to revisit this... + result.setToBogus(); + if (id != 0) { + int32_t buflen = id->length() + 8; // space for NUL + char* buf = (char*) uprv_malloc(buflen); + char* canon = (buf == 0) ? 0 : (char*) uprv_malloc(buflen); + if (buf != 0 && canon != 0) { + U_ASSERT(id->extract(0, INT32_MAX, buf, buflen) < buflen); + UErrorCode ec = U_ZERO_ERROR; + uloc_canonicalize(buf, canon, buflen, &ec); + if (U_SUCCESS(ec)) { + result = UnicodeString(canon); + } + } + uprv_free(buf); + uprv_free(canon); + } + return result; +#endif +} + +Locale& +LocaleUtility::initLocaleFromName(const UnicodeString& id, Locale& result) +{ + enum { BUFLEN = 128 }; // larger than ever needed + + if (id.isBogus() || id.length() >= BUFLEN) { + result.setToBogus(); + } else { + /* + * We need to convert from a UnicodeString to char * in order to + * create a Locale. + * + * Problem: Locale ID strings may contain '@' which is a variant + * character and cannot be handled by invariant-character conversion. + * + * Hack: Since ICU code can handle locale IDs with multiple encodings + * of '@' (at least for EBCDIC; it's not known to be a problem for + * ASCII-based systems), + * we use regular invariant-character conversion for everything else + * and manually convert U+0040 into a compiler-char-constant '@'. + * While this compilation-time constant may not match the runtime + * encoding of '@', it should be one of the encodings which ICU + * recognizes. + * + * There should be only at most one '@' in a locale ID. + */ + char buffer[BUFLEN]; + int32_t prev, i; + prev = 0; + for(;;) { + i = id.indexOf((UChar)0x40, prev); + if(i < 0) { + // no @ between prev and the rest of the string + id.extract(prev, INT32_MAX, buffer + prev, BUFLEN - prev, US_INV); + break; // done + } else { + // normal invariant-character conversion for text between @s + id.extract(prev, i - prev, buffer + prev, BUFLEN - prev, US_INV); + // manually "convert" U+0040 at id[i] into '@' at buffer[i] + buffer[i] = '@'; + prev = i + 1; + } + } + result = Locale::createFromName(buffer); + } + return result; +} + +UnicodeString& +LocaleUtility::initNameFromLocale(const Locale& locale, UnicodeString& result) +{ + if (locale.isBogus()) { + result.setToBogus(); + } else { + result.append(UnicodeString(locale.getName(), -1, US_INV)); + } + return result; +} + +const Hashtable* +LocaleUtility::getAvailableLocaleNames(const UnicodeString& bundleID) +{ + // LocaleUtility_cache is a hash-of-hashes. The top-level keys + // are path strings ('bundleID') passed to + // ures_openAvailableLocales. The top-level values are + // second-level hashes. The second-level keys are result strings + // from ures_openAvailableLocales. The second-level values are + // garbage ((void*)1 or other random pointer). + + UErrorCode status = U_ZERO_ERROR; + Hashtable* cache; + umtx_lock(NULL); + cache = LocaleUtility_cache; + umtx_unlock(NULL); + + if (cache == NULL) { + cache = new Hashtable(status); + if (cache == NULL || U_FAILURE(status)) { + return NULL; // catastrophic failure; e.g. out of memory + } + cache->setValueDeleter(uhash_deleteHashtable); + Hashtable* h; // set this to final LocaleUtility_cache value + umtx_lock(NULL); + h = LocaleUtility_cache; + if (h == NULL) { + LocaleUtility_cache = h = cache; + cache = NULL; + ucln_common_registerCleanup(UCLN_COMMON_SERVICE, service_cleanup); + } + umtx_unlock(NULL); + if(cache != NULL) { + delete cache; + } + cache = h; + } + + U_ASSERT(cache != NULL); + + Hashtable* htp; + umtx_lock(NULL); + htp = (Hashtable*) cache->get(bundleID); + umtx_unlock(NULL); + + if (htp == NULL) { + htp = new Hashtable(status); + if (htp && U_SUCCESS(status)) { + CharString cbundleID(bundleID); + const char* path = (const char*) cbundleID; + if (*path == 0) path = NULL; // empty string => NULL + UEnumeration *uenum = ures_openAvailableLocales(path, &status); + for (;;) { + const UChar* id = uenum_unext(uenum, NULL, &status); + if (id == NULL) { + break; + } + htp->put(UnicodeString(id), (void*)htp, status); + } + uenum_close(uenum); + if (U_FAILURE(status)) { + delete htp; + return NULL; + } + umtx_lock(NULL); + cache->put(bundleID, (void*)htp, status); + umtx_unlock(NULL); + } + } + return htp; +} + +UBool +LocaleUtility::isFallbackOf(const UnicodeString& root, const UnicodeString& child) +{ + return child.indexOf(root) == 0 && + (child.length() == root.length() || + child.charAt(root.length()) == UNDERSCORE_CHAR); +} + +U_NAMESPACE_END + +/* !UCONFIG_NO_SERVICE */ +#endif + + diff --git a/icuSources/common/locutil.h b/icuSources/common/locutil.h new file mode 100644 index 00000000..cf64e343 --- /dev/null +++ b/icuSources/common/locutil.h @@ -0,0 +1,37 @@ +/** + ******************************************************************************* + * Copyright (C) 2002-2005, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#ifndef LOCUTIL_H +#define LOCUTIL_H + +#include "unicode/utypes.h" +#include "hash.h" + +#if !UCONFIG_NO_SERVICE || !UCONFIG_NO_TRANSLITERATION + + +U_NAMESPACE_BEGIN + +// temporary utility functions, till I know where to find them +// in header so tests can also access them + +class U_COMMON_API LocaleUtility { +public: + static UnicodeString& canonicalLocaleString(const UnicodeString* id, UnicodeString& result); + static Locale& initLocaleFromName(const UnicodeString& id, Locale& result); + static UnicodeString& initNameFromLocale(const Locale& locale, UnicodeString& result); + static const Hashtable* getAvailableLocaleNames(const UnicodeString& bundleID); + static UBool isFallbackOf(const UnicodeString& root, const UnicodeString& child); +}; + +U_NAMESPACE_END + + +#endif + +#endif diff --git a/icuSources/common/msvcres.h b/icuSources/common/msvcres.h index 1bd84b07..cad2fe66 100644 --- a/icuSources/common/msvcres.h +++ b/icuSources/common/msvcres.h @@ -1,5 +1,5 @@ //{{NO_DEPENDENCIES}} -// Copyright (c) 2003 International Business Machines +// Copyright (c) 2003-2005 International Business Machines // Corporation and others. All Rights Reserved. // // Used by common.rc and other .rc files. @@ -7,5 +7,14 @@ //header the wrong way. This is here to prevent Visual Studio .NET from //unnessarily building the resource files when it's not needed. // + +/* +These are defined before unicode/uversion.h in order to prevent +STLPort's broken stddef.h from being used when rc.exe parses this file. +*/ +#define _STLP_OUTERMOST_HEADER_ID 0 +#define _STLP_WINCE 1 + #include "unicode/uversion.h" +#define ICU_WEBSITE "http://ibm.com/software/globalization/icu/" diff --git a/icuSources/common/normlzr.cpp b/icuSources/common/normlzr.cpp index ba13ffb2..909bd30b 100644 --- a/icuSources/common/normlzr.cpp +++ b/icuSources/common/normlzr.cpp @@ -1,7 +1,7 @@ /* ************************************************************************* * COPYRIGHT: - * Copyright (c) 1996-2004, International Business Machines Corporation and + * Copyright (c) 1996-2005, International Business Machines Corporation and * others. All Rights Reserved. ************************************************************************* */ @@ -146,7 +146,7 @@ Normalizer::normalize(const UnicodeString& source, source.getBuffer(), source.length(), mode, options, &status); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(status) ? length : 0); if(status==U_BUFFER_OVERFLOW_ERROR) { status=U_ZERO_ERROR; buffer=dest->getBuffer(length); @@ -154,7 +154,7 @@ Normalizer::normalize(const UnicodeString& source, source.getBuffer(), source.length(), mode, options, &status); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(status) ? length : 0); } if(dest==&localDest) { @@ -192,7 +192,7 @@ Normalizer::compose(const UnicodeString& source, source.getBuffer(), source.length(), compat, options, &status); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(status) ? length : 0); if(status==U_BUFFER_OVERFLOW_ERROR) { status=U_ZERO_ERROR; buffer=dest->getBuffer(length); @@ -200,7 +200,7 @@ Normalizer::compose(const UnicodeString& source, source.getBuffer(), source.length(), compat, options, &status); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(status) ? length : 0); } if(dest==&localDest) { @@ -238,7 +238,7 @@ Normalizer::decompose(const UnicodeString& source, source.getBuffer(), source.length(), compat, options, &status); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(status) ? length : 0); if(status==U_BUFFER_OVERFLOW_ERROR) { status=U_ZERO_ERROR; buffer=dest->getBuffer(length); @@ -246,7 +246,7 @@ Normalizer::decompose(const UnicodeString& source, source.getBuffer(), source.length(), compat, options, &status); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(status) ? length : 0); } if(dest==&localDest) { @@ -285,7 +285,7 @@ Normalizer::concatenate(UnicodeString &left, UnicodeString &right, buffer, dest->getCapacity(), mode, options, &errorCode); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { errorCode=U_ZERO_ERROR; buffer=dest->getBuffer(length); @@ -294,7 +294,7 @@ Normalizer::concatenate(UnicodeString &left, UnicodeString &right, buffer, dest->getCapacity(), mode, options, &errorCode); - dest->releaseBuffer(length); + dest->releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } if(dest==&localDest) { @@ -554,7 +554,7 @@ Normalizer::nextNormalize() { fUMode, fOptions, TRUE, 0, &errorCode); - buffer.releaseBuffer(length); + buffer.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { errorCode=U_ZERO_ERROR; text->move(text, nextIndex, UITER_ZERO); @@ -563,7 +563,7 @@ Normalizer::nextNormalize() { fUMode, fOptions, TRUE, 0, &errorCode); - buffer.releaseBuffer(length); + buffer.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } nextIndex=text->getIndex(text, UITER_CURRENT); @@ -589,7 +589,7 @@ Normalizer::previousNormalize() { fUMode, fOptions, TRUE, 0, &errorCode); - buffer.releaseBuffer(length); + buffer.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode==U_BUFFER_OVERFLOW_ERROR) { errorCode=U_ZERO_ERROR; text->move(text, currentIndex, UITER_ZERO); @@ -598,7 +598,7 @@ Normalizer::previousNormalize() { fUMode, fOptions, TRUE, 0, &errorCode); - buffer.releaseBuffer(length); + buffer.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } bufferPos=buffer.length(); diff --git a/icuSources/common/propname.cpp b/icuSources/common/propname.cpp index 789a610a..95d7e9b2 100644 --- a/icuSources/common/propname.cpp +++ b/icuSources/common/propname.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -233,7 +233,7 @@ isPNameAcceptable(void* /*context*/, info->formatVersion[0] == PNAME_FORMAT_VERSION; } -static UBool U_CALLCONV pname_cleanup() { +static UBool U_CALLCONV pname_cleanup(void) { if (UDATA) { udata_close(UDATA); UDATA = NULL; @@ -276,9 +276,8 @@ static UBool _load() { * to load it, and return TRUE if the load succeeds. */ static inline UBool load() { - umtx_lock(NULL); - UBool f = (PNAME!=NULL); - umtx_unlock(NULL); + UBool f; + UMTX_CHECK(NULL, (PNAME!=NULL), f); return f || _load(); } @@ -520,16 +519,18 @@ NameToEnum::swap(const UDataSwapper *ds, * which makes testing harder */ cmp.chars=(const char *)outBytes; - cmp.propCompare= - ds->outCharset==U_ASCII_FAMILY ? - uprv_compareASCIIPropertyNames : - uprv_compareEBCDICPropertyNames; + if (ds->outCharset==U_ASCII_FAMILY) { + cmp.propCompare=uprv_compareASCIIPropertyNames; + } + else { + cmp.propCompare=uprv_compareEBCDICPropertyNames; + } uprv_sortArray(sortArray, tempMap->count, sizeof(NameAndIndex), upname_compareRows, &cmp, TRUE, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "upname_swap(NameToEnum).uprv_sortArray(%d items) failed - %s\n", - tempMap->count, u_errorName(*pErrorCode)); + udata_printError(ds, "upname_swap(NameToEnum).uprv_sortArray(%d items) failed\n", + tempMap->count); return 0; } diff --git a/icuSources/common/putil.c b/icuSources/common/putil.c index e86e3c66..c4cb049b 100644 --- a/icuSources/common/putil.c +++ b/icuSources/common/putil.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2007, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -36,23 +36,21 @@ ****************************************************************************** */ -#ifndef PTX - /* Define _XOPEN_SOURCE for Solaris and friends. */ /* NetBSD needs it to be >= 4 */ #ifndef _XOPEN_SOURCE +#if __STDC_VERSION__ >= 199901L +/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 */ +#define _XOPEN_SOURCE 600 +#else #define _XOPEN_SOURCE 4 #endif - -/* Define __USE_POSIX and __USE_XOPEN for Linux and glibc. */ -#ifndef __USE_POSIX -#define __USE_POSIX -#endif -#ifndef __USE_XOPEN -#define __USE_XOPEN #endif -#endif /* PTX */ +/* Make sure things like readlink and such functions work. */ +#ifndef _XOPEN_SOURCE_EXTENDED +#define _XOPEN_SOURCE_EXTENDED 1 +#endif /* include ICU headers */ #include "unicode/utypes.h" @@ -65,10 +63,18 @@ #include "cstring.h" #include "locmap.h" #include "ucln_cmn.h" -#include "udataswp.h" + +/* Include standard headers. */ +#include +#include +#include +#include +#include +#include +#include /* include system headers */ -#ifdef WIN32 +#ifdef U_WINDOWS # define WIN32_LEAN_AND_MEAN # define VC_EXTRALEAN # define NOUSER @@ -76,14 +82,10 @@ # define NOIME # define NOMCX # include +# include "wintz.h" #elif defined(U_CYGWIN) && defined(__STRICT_ANSI__) /* tzset isn't defined in strict ANSI on Cygwin. */ # undef __STRICT_ANSI__ -#elif defined(OS2) -# define INCL_DOSMISC -# define INCL_DOSERRORS -# define INCL_DOSMODULEMGR -# include #elif defined(OS400) # include # include /* error code structure */ @@ -96,26 +98,19 @@ # include # include # include +# define ICU_NO_USER_DATA_OVERRIDE 1 #elif defined(OS390) #include "unicode/ucnv.h" /* Needed for UCNV_SWAP_LFNL_OPTION_STRING */ -#elif defined(U_AIX) -#elif defined(U_SOLARIS) || defined(U_LINUX) -#elif defined(U_HPUX) -#elif defined(U_DARWIN) -#include -#include +#elif defined(U_DARWIN) || defined(U_LINUX) || defined(U_BSD) +#include +#include #elif defined(U_QNX) #include #endif -/* Include standard headers. */ -#include -#include -#include -#include -#include -#include -#include +#ifndef U_WINDOWS +#include +#endif /* * Only include langinfo.h if we have a way to get the codeset. If we later @@ -137,40 +132,14 @@ static const char copyright[] = U_COPYRIGHT_STRING; /* We return QNAN rather than SNAN*/ #define SIGN 0x80000000U -#if defined(__GNUC__) -/* - This is an optimization for when u_topNBytesOfDouble - and u_bottomNBytesOfDouble can't be properly optimized by the compiler. -*/ -#define USE_64BIT_DOUBLE_OPTIMIZATION 1 -#else -#define USE_64BIT_DOUBLE_OPTIMIZATION 0 -#endif -#if USE_64BIT_DOUBLE_OPTIMIZATION -/* gcc 3.2 has an optimization bug */ -static const int64_t gNan64 = 0x7FF8000000000000LL; -static const int64_t gInf64 = 0x7FF0000000000000LL; -static const double * const fgNan = (const double *)(&gNan64); -static const double * const fgInf = (const double *)(&gInf64); -#else - -#if IEEE_754 -#define NAN_TOP ((int16_t)0x7FF8) -#define INF_TOP ((int16_t)0x7FF0) -#elif defined(OS390) -#define NAN_TOP ((int16_t)0x7F08) -#define INF_TOP ((int16_t)0x3F00) -#endif - -/* statics */ -static UBool fgNaNInitialized = FALSE; -static UBool fgInfInitialized = FALSE; -static double gNan; -static double gInf; -static double * const fgNan = &gNan; -static double * const fgInf = &gInf; -#endif +/* Make it easy to define certain types of constants */ +typedef union { + int64_t i64; /* This must be defined first in order to allow the initialization to work. This is a C89 feature. */ + double d64; +} BitPatternConversion; +static const BitPatternConversion gNan = { (int64_t) INT64_C(0x7FF8000000000000) }; +static const BitPatternConversion gInf = { (int64_t) INT64_C(0x7FF0000000000000) }; /*--------------------------------------------------------------------------- Platform utilities @@ -180,13 +149,17 @@ static double * const fgInf = &gInf; functions). ---------------------------------------------------------------------------*/ -#if defined(_WIN32) || defined(XP_MAC) || defined(OS400) || defined(OS2) +#if defined(U_WINDOWS) || defined(XP_MAC) || defined(OS400) # undef U_POSIX_LOCALE #else # define U_POSIX_LOCALE 1 #endif -/* Utilities to get the bits from a double */ +/* + WARNING! u_topNBytesOfDouble and u_bottomNBytesOfDouble + can't be properly optimized by the gcc compiler sometimes (i.e. gcc 3.2). +*/ +#if !IEEE_754 static char* u_topNBytesOfDouble(double* d, int n) { @@ -196,6 +169,7 @@ u_topNBytesOfDouble(double* d, int n) return (char*)(d + 1) - n; #endif } +#endif static char* u_bottomNBytesOfDouble(double* d, int n) @@ -207,14 +181,26 @@ u_bottomNBytesOfDouble(double* d, int n) #endif } +#if defined(U_WINDOWS) +typedef union { + int64_t int64; + FILETIME fileTime; +} FileTimeConversion; /* This is like a ULARGE_INTEGER */ + +/* Number of 100 nanoseconds from 1/1/1601 to 1/1/1970 */ +#define EPOCH_BIAS INT64_C(116444736000000000) +#define HECTONANOSECOND_PER_MILLISECOND 10000 + +#endif + /*--------------------------------------------------------------------------- Universal Implementations - These are designed to work on all platforms. Try these, and if they don't - work on your platform, then special case your platform with new + These are designed to work on all platforms. Try these, and if they + don't work on your platform, then special case your platform with new implementations. - ---------------------------------------------------------------------------*/ +---------------------------------------------------------------------------*/ -/* Get UTC (GMT) time measured in seconds since 0:00 on 1/1/70.*/ +/* Return UTC (GMT) time measured in milliseconds since 0:00 on 1/1/70.*/ U_CAPI UDate U_EXPORT2 uprv_getUTCtime() { @@ -232,7 +218,17 @@ uprv_getUTCtime() uprv_memcpy( &tmrec, gmtime(&t), sizeof(tmrec) ); t2 = mktime(&tmrec); /* seconds of current GMT*/ return (UDate)(t2 - t1) * U_MILLIS_PER_SECOND; /* GMT (or UTC) in seconds since 1970*/ +#elif defined(U_WINDOWS) + + FileTimeConversion winTime; + GetSystemTimeAsFileTime(&winTime.fileTime); + return (UDate)((winTime.int64 - EPOCH_BIAS) / HECTONANOSECOND_PER_MILLISECOND); #else +/* + struct timeval posixTime; + gettimeofday(&posixTime, NULL); + return (UDate)(((int64_t)posixTime.tv_sec * U_MILLIS_PER_SECOND) + (posixTime.tv_usec/1000)); +*/ time_t epochtime; time(&epochtime); return (UDate)epochtime * U_MILLIS_PER_SECOND; @@ -253,35 +249,10 @@ U_CAPI UBool U_EXPORT2 uprv_isNaN(double number) { #if IEEE_754 -#if USE_64BIT_DOUBLE_OPTIMIZATION - /* gcc 3.2 has an optimization bug */ + BitPatternConversion convertedNumber; + convertedNumber.d64 = number; /* Infinity is 0x7FF0000000000000U. Anything greater than that is a NaN */ - return (UBool)(((*((int64_t *)&number)) & U_INT64_MAX) > gInf64); - -#else - /* This should work in theory, but it doesn't, so we resort to the more*/ - /* complicated method below.*/ - /* return number != number;*/ - - /* You can't return number == getNaN() because, by definition, NaN != x for*/ - /* all x, including NaN (that is, NaN != NaN). So instead, we compare*/ - /* against the known bit pattern. We must be careful of endianism here.*/ - /* The pattern we are looking for id:*/ - - /* 7FFy yyyy yyyy yyyy (some y non-zero)*/ - - /* There are two different kinds of NaN, but we ignore the distinction*/ - /* here. Note that the y value must be non-zero; if it is zero, then we*/ - /* have infinity.*/ - - uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number, - sizeof(uint32_t)); - uint32_t lowBits = *(uint32_t*)u_bottomNBytesOfDouble(&number, - sizeof(uint32_t)); - - return (UBool)(((highBits & 0x7FF00000L) == 0x7FF00000L) && - (((highBits & 0x000FFFFFL) != 0) || (lowBits != 0))); -#endif + return (UBool)((convertedNumber.i64 & U_INT64_MAX) > gInf.i64); #elif defined(OS390) uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number, @@ -304,32 +275,10 @@ U_CAPI UBool U_EXPORT2 uprv_isInfinite(double number) { #if IEEE_754 -#if USE_64BIT_DOUBLE_OPTIMIZATION - /* gcc 3.2 has an optimization bug */ - return (UBool)(((*((int64_t *)&number)) & U_INT64_MAX) == gInf64); -#else - - /* We know the top bit is the sign bit, so we mask that off in a copy of */ - /* the number and compare against infinity. [LIU]*/ - /* The following approach doesn't work for some reason, so we go ahead and */ - /* scrutinize the pattern itself. */ - /* double a = number; */ - /* *(int8_t*)u_topNBytesOfDouble(&a, 1) &= 0x7F;*/ - /* return a == uprv_getInfinity();*/ - /* Instead, We want to see either:*/ - - /* 7FF0 0000 0000 0000*/ - /* FFF0 0000 0000 0000*/ - - uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number, - sizeof(uint32_t)); - uint32_t lowBits = *(uint32_t*)u_bottomNBytesOfDouble(&number, - sizeof(uint32_t)); - - return (UBool)(((highBits & ~SIGN) == 0x7FF00000U) && - (lowBits == 0x00000000U)); -#endif - + BitPatternConversion convertedNumber; + convertedNumber.d64 = number; + /* Infinity is exactly 0x7FF0000000000000U. */ + return (UBool)((convertedNumber.i64 & U_INT64_MAX) == gInf.i64); #elif defined(OS390) uint32_t highBits = *(uint32_t*)u_topNBytesOfDouble(&number, sizeof(uint32_t)); @@ -374,19 +323,7 @@ U_CAPI double U_EXPORT2 uprv_getNaN() { #if IEEE_754 || defined(OS390) -#if !USE_64BIT_DOUBLE_OPTIMIZATION - if (!fgNaNInitialized) { - /* This variable is always initialized with the same value, - so a mutex isn't needed. */ - int i; - int8_t* p = (int8_t*)fgNan; - for(i = 0; i < sizeof(double); ++i) - *p++ = 0; - *(int16_t*)u_topNBytesOfDouble(fgNan, sizeof(NAN_TOP)) = NAN_TOP; - fgNaNInitialized = TRUE; - } -#endif - return *fgNan; + return gNan.d64; #else /* If your platform doesn't support IEEE 754 but *does* have an NaN value,*/ /* you'll need to replace this default implementation with what's correct*/ @@ -399,20 +336,7 @@ U_CAPI double U_EXPORT2 uprv_getInfinity() { #if IEEE_754 || defined(OS390) -#if !USE_64BIT_DOUBLE_OPTIMIZATION - if (!fgInfInitialized) - { - /* This variable is always initialized with the same value, - so a mutex isn't needed. */ - int i; - int8_t* p = (int8_t*)fgInf; - for(i = 0; i < sizeof(double); ++i) - *p++ = 0; - *(int16_t*)u_topNBytesOfDouble(fgInf, sizeof(INF_TOP)) = INF_TOP; - fgInfInitialized = TRUE; - } -#endif - return *fgInf; + return gInf.d64; #else /* If your platform doesn't support IEEE 754 but *does* have an infinity*/ /* value, you'll need to replace this default implementation with what's*/ @@ -491,12 +415,6 @@ uprv_fmax(double x, double y) return (x > y ? x : y); } -U_CAPI int32_t U_EXPORT2 -uprv_max(int32_t x, int32_t y) -{ - return (x > y ? x : y); -} - U_CAPI double U_EXPORT2 uprv_fmin(double x, double y) { @@ -518,12 +436,6 @@ uprv_fmin(double x, double y) return (x > y ? y : x); } -U_CAPI int32_t U_EXPORT2 -uprv_min(int32_t x, int32_t y) -{ - return (x > y ? y : x); -} - /** * Truncates the given double. * trunc(3.3) = 3.0, trunc (-3.3) = -3.0 @@ -565,40 +477,6 @@ uprv_maxMantissa(void) return pow(2.0, DBL_MANT_DIG + 1.0) - 1.0; } -/** - * Return the floor of the log base 10 of a given double. - * This method compensates for inaccuracies which arise naturally when - * computing logs, and always give the correct value. The parameter - * must be positive and finite. - * (Thanks to Alan Liu for supplying this function.) - */ -U_CAPI int16_t U_EXPORT2 -uprv_log10(double d) -{ -#ifdef OS400 - /* We don't use the normal implementation because you can't underflow */ - /* a double otherwise an underflow exception occurs */ - return log10(d); -#else - /* The reason this routine is needed is that simply taking the*/ - /* log and dividing by log10 yields a result which may be off*/ - /* by 1 due to rounding errors. For example, the naive log10*/ - /* of 1.0e300 taken this way is 299, rather than 300.*/ - double alog10 = log(d) / log(10.0); - int16_t ailog10 = (int16_t) floor(alog10); - - /* Positive logs could be too small, e.g. 0.99 instead of 1.0*/ - if (alog10 > 0 && d >= pow(10.0, (double)(ailog10 + 1))) - ++ailog10; - - /* Negative logs could be too big, e.g. -0.99 instead of -1.0*/ - else if (alog10 < 0 && d < pow(10.0, (double)(ailog10))) - --ailog10; - - return ailog10; -#endif -} - U_CAPI double U_EXPORT2 uprv_log(double d) { @@ -657,487 +535,6 @@ uprv_digitsAfterDecimal(double x) platform with new implementations. ---------------------------------------------------------------------------*/ -/* Win32 time zone detection ------------------------------------------------ */ - -#ifdef WIN32 - -/* - This code attempts to detect the Windows time zone, as set in the - Windows Date and Time control panel. It attempts to work on - multiple flavors of Windows (9x, Me, NT, 2000, XP) and on localized - installs. It works by directly interrogating the registry and - comparing the data there with the data returned by the - GetTimeZoneInformation API, along with some other strategies. The - registry contains time zone data under one of two keys (depending on - the flavor of Windows): - - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\ - HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\ - - Under this key are several subkeys, one for each time zone. These - subkeys are named "Pacific" on Win9x/Me and "Pacific Standard Time" - on WinNT/2k/XP. There are some other wrinkles; see the code for - details. The subkey name is NOT LOCALIZED, allowing us to support - localized installs. - - Under the subkey are data values. We care about: - - Std Standard time display name, localized - TZI Binary block of data - - The TZI data is of particular interest. It contains the offset, two - more offsets for standard and daylight time, and the start and end - rules. This is the same data returned by the GetTimeZoneInformation - API. The API may modify the data on the way out, so we have to be - careful, but essentially we do a binary comparison against the TZI - blocks of various registry keys. When we find a match, we know what - time zone Windows is set to. Since the registry key is not - localized, we can then translate the key through a simple table - lookup into the corresponding ICU time zone. - - This strategy doesn't always work because there are zones which - share an offset and rules, so more than one TZI block will match. - For example, both Tokyo and Seoul are at GMT+9 with no DST rules; - their TZI blocks are identical. For these cases, we fall back to a - name lookup. We attempt to match the display name as stored in the - registry for the current zone to the display name stored in the - registry for various Windows zones. By comparing the registry data - directly we avoid conversion complications. - - Author: Alan Liu - Since: ICU 2.6 - Based on original code by Carl Brown -*/ - -/** - * Layout of the binary registry data under the "TZI" key. - */ -typedef struct { - LONG Bias; - LONG StandardBias; - LONG DaylightBias; /* Tweaked by GetTimeZoneInformation */ - SYSTEMTIME StandardDate; - SYSTEMTIME DaylightDate; -} TZI; - -typedef struct { - const char* icuid; - const char* winid; -} WindowsICUMap; - -/** - * Mapping between Windows zone IDs and ICU zone IDs. This list has - * been mechanically checked; all zone offsets match (most important) - * and city names match the display city names (where possible). The - * presence or absence of DST differs in some cases, but this is - * acceptable as long as the zone is semantically the same (which has - * been manually checked). - * - * Windows 9x/Me zone IDs are listed as "Pacific" rather than "Pacific - * Standard Time", which is seen in NT/2k/XP. This is fixed-up at - * runtime as needed. The one exception is "Mexico Standard Time 2", - * which is not present on Windows 9x/Me. - * - * Zones that are not unique under Offset+Rules should be grouped - * together for efficiency (see code below). In addition, rules MUST - * be grouped so that all zones of a single offset are together. - * - * Comments list S(tandard) or D(aylight), as declared by Windows, - * followed by the display name (data from Windows XP). - * - * NOTE: Etc/GMT+12 is CORRECT for offset GMT-12:00. Consult - * documentation elsewhere for an explanation. - */ -static const WindowsICUMap ZONE_MAP[] = { - "Etc/GMT+12", "Dateline", /* S (GMT-12:00) International Date Line West */ - - "Pacific/Apia", "Samoa", /* S (GMT-11:00) Midway Island, Samoa */ - - "Pacific/Honolulu", "Hawaiian", /* S (GMT-10:00) Hawaii */ - - "America/Anchorage", "Alaskan", /* D (GMT-09:00) Alaska */ - - "America/Los_Angeles", "Pacific", /* D (GMT-08:00) Pacific Time (US & Canada); Tijuana */ - - "America/Phoenix", "US Mountain", /* S (GMT-07:00) Arizona */ - "America/Denver", "Mountain", /* D (GMT-07:00) Mountain Time (US & Canada) */ - "America/Chihuahua", "Mexico Standard Time 2", /* D (GMT-07:00) Chihuahua, La Paz, Mazatlan */ - - "America/Managua", "Central America", /* S (GMT-06:00) Central America */ - "America/Regina", "Canada Central", /* S (GMT-06:00) Saskatchewan */ - "America/Mexico_City", "Mexico", /* D (GMT-06:00) Guadalajara, Mexico City, Monterrey */ - "America/Chicago", "Central", /* D (GMT-06:00) Central Time (US & Canada) */ - - "America/Indianapolis", "US Eastern", /* S (GMT-05:00) Indiana (East) */ - "America/Bogota", "SA Pacific", /* S (GMT-05:00) Bogota, Lima, Quito */ - "America/New_York", "Eastern", /* D (GMT-05:00) Eastern Time (US & Canada) */ - - "America/Caracas", "SA Western", /* S (GMT-04:00) Caracas, La Paz */ - "America/Santiago", "Pacific SA", /* D (GMT-04:00) Santiago */ - "America/Halifax", "Atlantic", /* D (GMT-04:00) Atlantic Time (Canada) */ - - "America/St_Johns", "Newfoundland", /* D (GMT-03:30) Newfoundland */ - - "America/Buenos_Aires", "SA Eastern", /* S (GMT-03:00) Buenos Aires, Georgetown */ - "America/Godthab", "Greenland", /* D (GMT-03:00) Greenland */ - "America/Sao_Paulo", "E. South America", /* D (GMT-03:00) Brasilia */ - - "America/Noronha", "Mid-Atlantic", /* D (GMT-02:00) Mid-Atlantic */ - - "Atlantic/Cape_Verde", "Cape Verde", /* S (GMT-01:00) Cape Verde Is. */ - "Atlantic/Azores", "Azores", /* D (GMT-01:00) Azores */ - - "Africa/Casablanca", "Greenwich", /* S (GMT) Casablanca, Monrovia */ - "Europe/London", "GMT", /* D (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London */ - - "Africa/Lagos", "W. Central Africa", /* S (GMT+01:00) West Central Africa */ - "Europe/Berlin", "W. Europe", /* D (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna */ - "Europe/Paris", "Romance", /* D (GMT+01:00) Brussels, Copenhagen, Madrid, Paris */ - "Europe/Sarajevo", "Central European", /* D (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb */ - "Europe/Belgrade", "Central Europe", /* D (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague */ - - "Africa/Johannesburg", "South Africa", /* S (GMT+02:00) Harare, Pretoria */ - "Asia/Jerusalem", "Israel", /* S (GMT+02:00) Jerusalem */ - "Europe/Istanbul", "GTB", /* D (GMT+02:00) Athens, Istanbul, Minsk */ - "Europe/Helsinki", "FLE", /* D (GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius */ - "Africa/Cairo", "Egypt", /* D (GMT+02:00) Cairo */ - "Europe/Bucharest", "E. Europe", /* D (GMT+02:00) Bucharest */ - - "Africa/Nairobi", "E. Africa", /* S (GMT+03:00) Nairobi */ - "Asia/Riyadh", "Arab", /* S (GMT+03:00) Kuwait, Riyadh */ - "Europe/Moscow", "Russian", /* D (GMT+03:00) Moscow, St. Petersburg, Volgograd */ - "Asia/Baghdad", "Arabic", /* D (GMT+03:00) Baghdad */ - - "Asia/Tehran", "Iran", /* D (GMT+03:30) Tehran */ - - "Asia/Muscat", "Arabian", /* S (GMT+04:00) Abu Dhabi, Muscat */ - "Asia/Tbilisi", "Caucasus", /* D (GMT+04:00) Baku, Tbilisi, Yerevan */ - - "Asia/Kabul", "Afghanistan", /* S (GMT+04:30) Kabul */ - - "Asia/Karachi", "West Asia", /* S (GMT+05:00) Islamabad, Karachi, Tashkent */ - "Asia/Yekaterinburg", "Ekaterinburg", /* D (GMT+05:00) Ekaterinburg */ - - "Asia/Calcutta", "India", /* S (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi */ - - "Asia/Katmandu", "Nepal", /* S (GMT+05:45) Kathmandu */ - - "Asia/Colombo", "Sri Lanka", /* S (GMT+06:00) Sri Jayawardenepura */ - "Asia/Dhaka", "Central Asia", /* S (GMT+06:00) Astana, Dhaka */ - "Asia/Novosibirsk", "N. Central Asia", /* D (GMT+06:00) Almaty, Novosibirsk */ - - "Asia/Rangoon", "Myanmar", /* S (GMT+06:30) Rangoon */ - - "Asia/Bangkok", "SE Asia", /* S (GMT+07:00) Bangkok, Hanoi, Jakarta */ - "Asia/Krasnoyarsk", "North Asia", /* D (GMT+07:00) Krasnoyarsk */ - - "Australia/Perth", "W. Australia", /* S (GMT+08:00) Perth */ - "Asia/Taipei", "Taipei", /* S (GMT+08:00) Taipei */ - "Asia/Singapore", "Singapore", /* S (GMT+08:00) Kuala Lumpur, Singapore */ - "Asia/Hong_Kong", "China", /* S (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi */ - "Asia/Irkutsk", "North Asia East", /* D (GMT+08:00) Irkutsk, Ulaan Bataar */ - - "Asia/Tokyo", "Tokyo", /* S (GMT+09:00) Osaka, Sapporo, Tokyo */ - "Asia/Seoul", "Korea", /* S (GMT+09:00) Seoul */ - "Asia/Yakutsk", "Yakutsk", /* D (GMT+09:00) Yakutsk */ - - "Australia/Darwin", "AUS Central", /* S (GMT+09:30) Darwin */ - "Australia/Adelaide", "Cen. Australia", /* D (GMT+09:30) Adelaide */ - - "Pacific/Guam", "West Pacific", /* S (GMT+10:00) Guam, Port Moresby */ - "Australia/Brisbane", "E. Australia", /* S (GMT+10:00) Brisbane */ - "Asia/Vladivostok", "Vladivostok", /* D (GMT+10:00) Vladivostok */ - "Australia/Hobart", "Tasmania", /* D (GMT+10:00) Hobart */ - "Australia/Sydney", "AUS Eastern", /* D (GMT+10:00) Canberra, Melbourne, Sydney */ - - "Asia/Magadan", "Central Pacific", /* S (GMT+11:00) Magadan, Solomon Is., New Caledonia */ - - "Pacific/Fiji", "Fiji", /* S (GMT+12:00) Fiji, Kamchatka, Marshall Is. */ - "Pacific/Auckland", "New Zealand", /* D (GMT+12:00) Auckland, Wellington */ - - "Pacific/Tongatapu", "Tonga", /* S (GMT+13:00) Nuku'alofa */ - NULL, NULL -}; - -typedef struct { - const char* winid; - const char* altwinid; -} WindowsZoneRemap; - -/** - * If a lookup fails, we attempt to remap certain Windows ids to - * alternate Windows ids. If the alternate listed here begins with - * '-', we use it as is (without the '-'). If it begins with '+', we - * append a " Standard Time" if appropriate. - */ -static const WindowsZoneRemap ZONE_REMAP[] = { - "Central European", "-Warsaw", - "Central Europe", "-Prague Bratislava", - "China", "-Beijing", - - "Greenwich", "+GMT", - "GTB", "+GFT", - "Arab", "+Saudi Arabia", - "SE Asia", "+Bangkok", - "AUS Eastern", "+Sydney", - NULL, NULL, -}; - -/** - * Various registry keys and key fragments. - */ -static const char CURRENT_ZONE_REGKEY[] = "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\"; -static const char STANDARD_NAME_REGKEY[] = "StandardName"; -static const char STANDARD_TIME_REGKEY[] = " Standard Time"; -static const char TZI_REGKEY[] = "TZI"; -static const char STD_REGKEY[] = "Std"; - -/** - * HKLM subkeys used to probe for the flavor of Windows. Note that we - * specifically check for the "GMT" zone subkey; this is present on - * NT, but on XP has become "GMT Standard Time". We need to - * discriminate between these cases. - */ -static const char* const WIN_TYPE_PROBE_REGKEY[] = { - /* WIN_9X_ME_TYPE */ - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Time Zones", - - /* WIN_NT_TYPE */ - "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\GMT" - - /* otherwise: WIN_2K_XP_TYPE */ -}; - -/** - * The time zone root subkeys (under HKLM) for different flavors of - * Windows. - */ -static const char* const TZ_REGKEY[] = { - /* WIN_9X_ME_TYPE */ - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Time Zones\\", - - /* WIN_NT_TYPE | WIN_2K_XP_TYPE */ - "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\" -}; - -/** - * Flavor of Windows, from our perspective. Not a real OS version, - * but rather the flavor of the layout of the time zone information in - * the registry. - */ -enum { - WIN_9X_ME_TYPE = 0, - WIN_NT_TYPE = 1, - WIN_2K_XP_TYPE = 2 -}; - -/** - * Auxiliary Windows time zone function. Attempts to open the given - * Windows time zone ID as a registry key. Returns ERROR_SUCCESS if - * successful. Caller must close the registry key. Handles - * variations in the resource layout in different flavors of Windows. - * - * @param hkey output parameter to receive opened registry key - * @param winid Windows zone ID, e.g., "Pacific", without the - * " Standard Time" suffix (if any). Special case "Mexico Standard Time 2" - * allowed. - * @param winType Windows flavor (WIN_9X_ME_TYPE, etc.) - * @return ERROR_SUCCESS upon success - */ -static LONG openTZRegKey(HKEY *hkey, const char* winid, int winType) { - LONG result; - char subKeyName[96]; - char* name; - int i; - - uprv_strcpy(subKeyName, TZ_REGKEY[(winType == WIN_9X_ME_TYPE) ? 0 : 1]); - name = &subKeyName[strlen(subKeyName)]; - uprv_strcat(subKeyName, winid); - if (winType != WIN_9X_ME_TYPE) { - /* Don't modify "Mexico Standard Time 2", which does not occur - on WIN_9X_ME_TYPE. Also, if the type is WIN_NT_TYPE, then - in practice this means the GMT key is not followed by - " Standard Time", so don't append in that case. */ - int isMexico2 = (winid[uprv_strlen(winid)- 1] == '2'); - if (!isMexico2 && - !(winType == WIN_NT_TYPE && uprv_strcmp(winid, "GMT") == 0)) { - uprv_strcat(subKeyName, STANDARD_TIME_REGKEY); - } - } - result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, - subKeyName, - 0, - KEY_QUERY_VALUE, - hkey); - - if (result != ERROR_SUCCESS) { - /* If the primary lookup fails, try to remap the Windows zone - ID, according to the remapping table. */ - for (i=0; ZONE_REMAP[i].winid; ++i) { - if (uprv_strcmp(winid, ZONE_REMAP[i].winid) == 0) { - uprv_strcpy(name, ZONE_REMAP[i].altwinid + 1); - if (*(ZONE_REMAP[i].altwinid) == '+' && - winType != WIN_9X_ME_TYPE) { - uprv_strcat(subKeyName, STANDARD_TIME_REGKEY); - } - result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, - subKeyName, - 0, - KEY_QUERY_VALUE, - hkey); - break; - } - } - } - - return result; -} - -/** - * Main Windows time zone detection function. Returns the Windows - * time zone, translated to an ICU time zone, or NULL upon failure. - */ -static const char* detectWindowsTimeZone() { - int winType; - LONG result; - HKEY hkey; - TZI tziKey; - TZI tziReg; - DWORD cbData = sizeof(TZI); - TIME_ZONE_INFORMATION apiTZI; - char stdName[32]; - DWORD stdNameSize; - char stdRegName[64]; - DWORD stdRegNameSize; - int firstMatch, lastMatch; - int j; - - /* Detect the version of windows by trying to open a sequence of - probe keys. We don't use the OS version API because what we - really want to know is how the registry is laid out. - Specifically, is it 9x/Me or not, and is it "GMT" or "GMT - Standard Time". */ - for (winType=0; winType<2; ++winType) { - result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, - WIN_TYPE_PROBE_REGKEY[winType], - 0, - KEY_QUERY_VALUE, - &hkey); - RegCloseKey(hkey); - if (result == ERROR_SUCCESS) { - break; - } - } - - /* Obtain TIME_ZONE_INFORMATION from the API, and then convert it - to TZI. We could also interrogate the registry directly; we do - this below if needed. */ - uprv_memset(&apiTZI, 0, sizeof(apiTZI)); - GetTimeZoneInformation(&apiTZI); - tziKey.Bias = apiTZI.Bias; - uprv_memcpy((char *)&tziKey.StandardDate, (char*)&apiTZI.StandardDate, - sizeof(apiTZI.StandardDate)); - uprv_memcpy((char *)&tziKey.DaylightDate, (char*)&apiTZI.DaylightDate, - sizeof(apiTZI.DaylightDate)); - - /* For each zone that can be identified by Offset+Rules, see if we - have a match. Continue scanning after finding a match, - recording the index of the first and the last match. We have - to do this because some zones are not unique under - Offset+Rules. */ - firstMatch = lastMatch = -1; - for (j=0; ZONE_MAP[j].icuid; j++) { - result = openTZRegKey(&hkey, ZONE_MAP[j].winid, winType); - if (result == ERROR_SUCCESS) { - result = RegQueryValueEx(hkey, - TZI_REGKEY, - NULL, - NULL, - (LPBYTE)&tziReg, - &cbData); - } - RegCloseKey(hkey); - if (result == ERROR_SUCCESS) { - /* Assume that offsets are grouped together, and bail out - when we've scanned everything with a matching - offset. */ - if (firstMatch >= 0 && tziKey.Bias != tziReg.Bias) { - break; - } - /* Windows alters the DaylightBias in some situations. - Using the bias and the rules suffices, so overwrite - these unreliable fields. */ - tziKey.StandardBias = tziReg.StandardBias; - tziKey.DaylightBias = tziReg.DaylightBias; - if (uprv_memcmp((char *)&tziKey, (char*)&tziReg, - sizeof(tziKey)) == 0) { - if (firstMatch < 0) { - firstMatch = j; - } - lastMatch = j; - } - } - } - - /* This should never happen; if it does it means our table doesn't - match Windows AT ALL, perhaps because this is post-XP? */ - if (firstMatch < 0) { - return NULL; - } - - if (firstMatch != lastMatch) { - /* Offset+Rules lookup yielded >= 2 matches. Try to match the - localized display name. Get the name from the registry - (not the API). This avoids conversion issues. Use the - standard name, since Windows modifies the daylight name to - match the standard name if there is no DST. */ - result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, - CURRENT_ZONE_REGKEY, - 0, - KEY_QUERY_VALUE, - &hkey); - if (result == ERROR_SUCCESS) { - stdNameSize = sizeof(stdName); - result = RegQueryValueEx(hkey, - (LPTSTR)STANDARD_NAME_REGKEY, - NULL, - NULL, - (LPBYTE)stdName, - &stdNameSize); - RegCloseKey(hkey); - - /* Scan through the Windows time zone data in the registry - again (just the range of zones with matching TZIs) and - look for a standard display name match. */ - for (j=firstMatch; j<=lastMatch; j++) { - result = openTZRegKey(&hkey, ZONE_MAP[j].winid, winType); - if (result == ERROR_SUCCESS) { - stdRegNameSize = sizeof(stdRegName); - result = RegQueryValueEx(hkey, - (LPTSTR)STD_REGKEY, - NULL, - NULL, - (LPBYTE)stdRegName, - &stdRegNameSize); - } - RegCloseKey(hkey); - if (result == ERROR_SUCCESS && - stdRegNameSize == stdNameSize && - uprv_memcmp(stdName, stdRegName, stdNameSize) == 0) { - firstMatch = j; /* record the match */ - break; - } - } - } else { - RegCloseKey(hkey); /* should never get here */ - } - } - - return ZONE_MAP[firstMatch].icuid; -} - -#endif /*WIN32*/ - /* Generic time zone layer -------------------------------------------------- */ /* Time zone utilities */ @@ -1185,58 +582,103 @@ uprv_timezone() extern U_IMPORT char *U_TZNAME[]; #endif -#if defined(U_DARWIN) /* For Mac OS X */ -#define TZZONELINK "/etc/localtime" -#define TZZONEINFO "/usr/share/zoneinfo/" -static char *gTimeZoneBuffer = NULL; /* Heap allocated */ +#if !UCONFIG_NO_FILE_IO && (defined(U_DARWIN) || defined(U_LINUX) || defined(U_BSD)) +/* These platforms are likely to use Olson timezone IDs. */ +#define CHECK_LOCALTIME_LINK 1 +#include +#define TZZONEINFO (TZDIR "/") +static char gTimeZoneBuffer[PATH_MAX]; +static char *gTimeZoneBufferPtr = NULL; +#endif + +#ifndef U_WINDOWS +#define isNonDigit(ch) (ch < '0' || '9' < ch) +static UBool isValidOlsonID(const char *id) { + int32_t idx = 0; + + /* Determine if this is something like Iceland (Olson ID) + or AST4ADT (non-Olson ID) */ + while (id[idx] && isNonDigit(id[idx]) && id[idx] != ',') { + idx++; + } + + /* If we went through the whole string, then it might be okay. + The timezone is sometimes set to "CST-7CDT", "CST6CDT5,J129,J131/19:30", + "GRNLNDST3GRNLNDDT" or similar, so we cannot use it. + The rest of the time it could be an Olson ID. George */ + return (UBool)(id[idx] == 0 + || uprv_strcmp(id, "PST8PDT") == 0 + || uprv_strcmp(id, "MST7MDT") == 0 + || uprv_strcmp(id, "CST6CDT") == 0 + || uprv_strcmp(id, "EST5EDT") == 0); +} #endif U_CAPI const char* U_EXPORT2 uprv_tzname(int n) { -#ifdef WIN32 - char* id = (char*) detectWindowsTimeZone(); +#ifdef U_WINDOWS + const char *id = uprv_detectWindowsTimeZone(); + if (id != NULL) { return id; } -#endif +#else + const char *tzenv = NULL; -#if defined(U_DARWIN) +/*#if defined(U_DARWIN) int ret; - char *tzenv; - tzenv = getenv("TZFILE"); if (tzenv != NULL) { return tzenv; } +#endif*/ -#if 0 - /* TZ is often set to "PST8PDT" or similar, so we cannot use it. Alan */ tzenv = getenv("TZ"); - if (tzenv != NULL) { + if (tzenv != NULL && isValidOlsonID(tzenv)) + { + /* This might be a good Olson ID. */ + if (uprv_strncmp(tzenv, "posix/", 6) == 0 + || uprv_strncmp(tzenv, "right/", 6) == 0) + { + /* Remove the posix/ or right/ prefix. */ + tzenv += 6; + } return tzenv; } -#endif - - /* Caller must handle threading issues */ - if (gTimeZoneBuffer == NULL) { - gTimeZoneBuffer = (char *) uprv_malloc(MAXPATHLEN + 2); + /* else U_TZNAME will give a better result. */ - ret = readlink(TZZONELINK, gTimeZoneBuffer, MAXPATHLEN + 2); +#if defined(CHECK_LOCALTIME_LINK) + /* Caller must handle threading issues */ + if (gTimeZoneBufferPtr == NULL) { + /* + This is a trick to look at the name of the link to get the Olson ID + because the tzfile contents is underspecified. + This isn't guaranteed to work because it may not be a symlink. + */ + int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)); if (0 < ret) { - gTimeZoneBuffer[ret] = '\0'; - if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO, sizeof(TZZONEINFO) - 1) == 0) { - return (gTimeZoneBuffer += sizeof(TZZONEINFO) - 1); + int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO); + gTimeZoneBuffer[ret] = 0; + if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO, tzZoneInfoLen) == 0 + && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen)) + { + return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen); } } - - uprv_free(gTimeZoneBuffer); - gTimeZoneBuffer = NULL; } + else { + return gTimeZoneBufferPtr; + } +#endif #endif #ifdef U_TZNAME + /* + U_TZNAME is usually a non-unique abbreviation, + which isn't normally usable. + */ return U_TZNAME[n]; #else return ""; @@ -1252,10 +694,10 @@ static char *gDataDirectory = NULL; static UBool U_CALLCONV putil_cleanup(void) { - if (gDataDirectory) { + if (gDataDirectory && *gDataDirectory) { uprv_free(gDataDirectory); - gDataDirectory = NULL; } + gDataDirectory = NULL; #if U_POSIX_LOCALE if (gCorrectedPOSIXLocale) { uprv_free(gCorrectedPOSIXLocale); @@ -1273,26 +715,32 @@ static UBool U_CALLCONV putil_cleanup(void) U_CAPI void U_EXPORT2 u_setDataDirectory(const char *directory) { char *newDataDir; -#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) - char *p; -#endif int32_t length; - if(directory==NULL) { - directory = ""; + if(directory==NULL || *directory==0) { + /* A small optimization to prevent the malloc and copy when the + shared library is used, and this is a way to make sure that NULL + is never returned. + */ + newDataDir = (char *)""; } - length=(int32_t)uprv_strlen(directory); - newDataDir = (char *)uprv_malloc(length + 2); - uprv_strcpy(newDataDir, directory); + else { + length=(int32_t)uprv_strlen(directory); + newDataDir = (char *)uprv_malloc(length + 2); + uprv_strcpy(newDataDir, directory); #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) - while(p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) { - *p = U_FILE_SEP_CHAR; - } + { + char *p; + while(p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) { + *p = U_FILE_SEP_CHAR; + } + } #endif + } umtx_lock(NULL); - if (gDataDirectory) { + if (gDataDirectory && *gDataDirectory) { uprv_free(gDataDirectory); } gDataDirectory = newDataDir; @@ -1317,7 +765,7 @@ uprv_pathIsAbsolute(const char *path) } #endif -#if defined(WIN32) +#if defined(U_WINDOWS) if( (((path[0] >= 'A') && (path[0] <= 'Z')) || ((path[0] >= 'a') && (path[0] <= 'z'))) && path[1] == ':' ) { @@ -1331,97 +779,33 @@ uprv_pathIsAbsolute(const char *path) U_CAPI const char * U_EXPORT2 u_getDataDirectory(void) { const char *path = NULL; - char pathBuffer[1024]; - const char *dataDir; /* if we have the directory, then return it immediately */ umtx_lock(NULL); - dataDir = gDataDirectory; + path = gDataDirectory; umtx_unlock(NULL); - if(dataDir) { - return dataDir; + if(path) { + return path; } - /* we need to look for it */ - pathBuffer[0] = 0; /* Shuts up compiler warnings about unreferenced */ - /* variables when the code using it is ifdefed out */ -# if !defined(XP_MAC) - /* first try to get the environment variable */ + /* + When ICU_NO_USER_DATA_OVERRIDE is defined, users aren't allowed to + override ICU's data with the ICU_DATA environment variable. This prevents + problems where multiple custom copies of ICU's specific version of data + are installed on a system. Either the application must define the data + directory with u_setDataDirectory, define ICU_DATA_DIR when compiling + ICU, set the data with udata_setCommonData or trust that all of the + required data is contained in ICU's data library that contains + the entry point defined by U_ICUDATA_ENTRY_POINT. + + There may also be some platforms where environment variables + are not allowed. + */ +# if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO + /* First try to get the environment variable */ path=getenv("ICU_DATA"); -# else /* XP_MAC */ - { - OSErr myErr; - short vRef; - long dir,newDir; - int16_t volNum; - Str255 xpath; - FSSpec spec; - short len; - Handle full; - - xpath[0]=0; - - myErr = HGetVol(xpath, &volNum, &dir); - - if(myErr == noErr) { - myErr = FindFolder(volNum, kApplicationSupportFolderType, TRUE, &vRef, &dir); - newDir=-1; - if (myErr == noErr) { - myErr = DirCreate(volNum, - dir, - "\pICU", - &newDir); - if( (myErr == noErr) || (myErr == dupFNErr) ) { - spec.vRefNum = volNum; - spec.parID = dir; - uprv_memcpy(spec.name, "\pICU", 4); - - myErr = FSpGetFullPath(&spec, &len, &full); - if(full != NULL) - { - HLock(full); - uprv_memcpy(pathBuffer, ((char*)(*full)), len); - pathBuffer[len] = 0; - path = pathBuffer; - DisposeHandle(full); - } - } - } - } - } -# endif - - -# if defined WIN32 && defined ICU_ENABLE_DEPRECATED_WIN_REGISTRY - /* next, try to read the path from the registry */ - if(path==NULL || *path==0) { - HKEY key; - - if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\ICU\\Unicode\\Data", 0, KEY_QUERY_VALUE, &key)) { - DWORD type=REG_EXPAND_SZ, size=sizeof(pathBuffer); - - if(ERROR_SUCCESS==RegQueryValueEx(key, "Path", NULL, &type, (unsigned char *)pathBuffer, &size) && size>1) { - if(type==REG_EXPAND_SZ) { - /* replace environment variable references by their values */ - char temporaryPath[1024]; - - /* copy the path with variables to the temporary one */ - uprv_memcpy(temporaryPath, pathBuffer, size); - - /* do the replacement and store it in the pathBuffer */ - size=ExpandEnvironmentStrings(temporaryPath, pathBuffer, sizeof(pathBuffer)); - if(size>0 && size no_NO_NY here? * How about 'russian' -> 'ru'? + * Many of the other locales using ISO codes will be handled by the + * canonicalization functions in uloc_getDefault. */ } @@ -1704,7 +1101,7 @@ The leftmost codepage (.xxx) wins. return posixID; -#elif defined(WIN32) +#elif defined(U_WINDOWS) UErrorCode status = U_ZERO_ERROR; LCID id = GetThreadLocale(); const char* locID = uprv_convertToPosix(id, &status); @@ -1749,20 +1146,6 @@ The leftmost codepage (.xxx) wins. return posixID; -#elif defined(OS2) - char * locID; - - locID = getenv("LC_ALL"); - if (!locID || !*locID) - locID = getenv("LANG"); - if (!locID || !*locID) { - locID = "en_US"; - } - if (!stricmp(locID, "c") || !stricmp(locID, "posix") || - !stricmp(locID, "univ")) - locID = "en_US_POSIX"; - return locID; - #elif defined(OS400) /* locales are process scoped and are by definition thread safe */ static char correctedLocale[64]; @@ -1799,10 +1182,13 @@ The leftmost codepage (.xxx) wins. /* See if we are using the POSIX locale. Any of the * following are equivalent and use the same QLGPGCMA * (POSIX) locale. + * QLGPGCMA2 means UCS2 + * QLGPGCMA_4 means UTF-32 + * QLGPGCMA_8 means UTF-8 */ if ((uprv_strcmp("C", correctedLocale) == 0) || (uprv_strcmp("POSIX", correctedLocale) == 0) || - (uprv_strcmp("QLGPGCMA", correctedLocale) == 0)) + (uprv_strncmp("QLGPGCMA", correctedLocale, 8) == 0)) { uprv_strcpy(correctedLocale, "en_US_POSIX"); } @@ -1855,6 +1241,81 @@ The leftmost codepage (.xxx) wins. } +#if U_POSIX_LOCALE +/* +Due to various platform differences, one platform may specify a charset, +when they really mean a different charset. Remap the names so that they are +compatible with ICU. +*/ +static const char* +remapPlatformDependentCodepage(const char *locale, const char *name) { + if (locale != NULL && *locale == 0) { + /* Make sure that an empty locale is handled the same way. */ + locale = NULL; + } + if (name == NULL) { + return NULL; + } +#if defined(U_AIX) + if (uprv_strcmp(name, "IBM-943") == 0) { + /* Use the ASCII compatible ibm-943 */ + name = "Shift-JIS"; + } + else if (uprv_strcmp(name, "IBM-1252") == 0) { + /* Use the windows-1252 that contains the Euro */ + name = "IBM-5348"; + } +#elif defined(U_SOLARIS) + if (locale != NULL && uprv_strcmp(name, "EUC") == 0) { + /* Solaris underspecifies the "EUC" name. */ + if (uprv_strcmp(locale, "zh_CN") == 0) { + name = "EUC-CN"; + } + else if (uprv_strcmp(locale, "zh_TW") == 0) { + name = "EUC-TW"; + } + else if (uprv_strcmp(locale, "ko_KR") == 0) { + name = "EUC-KR"; + } + } +#elif defined(U_DARWIN) + if (locale == NULL && *name == 0) { + /* + No locale was specified, and an empty name was passed in. + This usually indicates that nl_langinfo didn't return valid information. + Mac OS X uses UTF-8 by default (especially the locale data and console). + */ + name = "UTF-8"; + } +#endif + /* return NULL when "" is passed in */ + if (*name == 0) { + name = NULL; + } + return name; +} + +static const char* +getCodepageFromPOSIXID(const char *localeName, char * buffer, int32_t buffCapacity) +{ + char localeBuf[100]; + const char *name = NULL; + char *variant = NULL; + + if (localeName != NULL && (name = (uprv_strchr(localeName, '.'))) != NULL) { + size_t localeCapacity = uprv_min(sizeof(localeBuf), (name-localeName)+1); + uprv_strncpy(localeBuf, localeName, localeCapacity); + localeBuf[localeCapacity-1] = 0; /* ensure NULL termination */ + name = uprv_strncpy(buffer, name+1, buffCapacity); + buffer[buffCapacity-1] = 0; /* ensure NULL termination */ + if ((variant = (uprv_strchr(name, '@'))) != NULL) { + *variant = 0; + } + name = remapPlatformDependentCodepage(localeBuf, name); + } + return name; +} +#endif static const char* int_getDefaultCodepage() @@ -1886,46 +1347,41 @@ int_getDefaultCodepage() return codepage; #elif defined(XP_MAC) - return "ibm-1275"; /* TODO: Macintosh Roman. There must be a better way. fixme! */ + return "macintosh"; /* TODO: Macintosh Roman. There must be a better way. fixme! */ -#elif defined(WIN32) +#elif defined(U_WINDOWS) static char codepage[64]; sprintf(codepage, "windows-%d", GetACP()); return codepage; #elif U_POSIX_LOCALE static char codesetName[100]; - char *name = NULL; - char *euro = NULL; const char *localeName = NULL; + const char *name = NULL; uprv_memset(codesetName, 0, sizeof(codesetName)); - /* Check setlocale before the environment variables - because the application may have set it first */ - /* setlocale needs "" and not NULL for Linux and Solaris */ - localeName = setlocale(LC_CTYPE, ""); - if (localeName != NULL && (name = (uprv_strchr(localeName, '.'))) != NULL) { - /* strip the locale name and look at the suffix only */ - name = uprv_strncpy(codesetName, name+1, sizeof(codesetName)); - codesetName[sizeof(codesetName)-1] = 0; - if ((euro = (uprv_strchr(name, '@'))) != NULL) { - *euro = 0; - } - /* if we can find the codset name from setlocale, return that. */ - if (*name) { - return name; - } + /* Use setlocale in a nice way, and then check some environment variables. + Maybe the application used setlocale already. + */ + localeName = uprv_getPOSIXID(); + name = getCodepageFromPOSIXID(localeName, codesetName, sizeof(codesetName)); + if (name) { + /* if we can find the codeset name from setlocale, return that. */ + return name; } + /* else "C" was probably returned. That's underspecified. */ #if U_HAVE_NL_LANGINFO_CODESET if (*codesetName) { uprv_memset(codesetName, 0, sizeof(codesetName)); } - /* When available, check nl_langinfo first because it usually gives more - useful names. It depends on LC_CTYPE and not LANG or LC_ALL */ + /* When available, check nl_langinfo because it usually gives more + useful names. It depends on LC_CTYPE and not LANG or LC_ALL. + nl_langinfo may use the same buffer as setlocale. */ { const char *codeset = nl_langinfo(U_NL_LANGINFO_CODESET); + codeset = remapPlatformDependentCodepage(NULL, codeset); if (codeset != NULL) { uprv_strncpy(codesetName, codeset, sizeof(codesetName)); codesetName[sizeof(codesetName)-1] = 0; @@ -1934,28 +1390,9 @@ int_getDefaultCodepage() } #endif - /* Try a locale specified by the user. - This is usually underspecified and usually checked by setlocale already. */ - if (*codesetName) { - uprv_memset(codesetName, 0, sizeof(codesetName)); - } - localeName = uprv_getPOSIXID(); - if (localeName != NULL && (name = (uprv_strchr(localeName, '.'))) != NULL) { - /* strip the locale name and look at the suffix only */ - name = uprv_strncpy(codesetName, name+1, sizeof(codesetName)); - codesetName[sizeof(codesetName)-1] = 0; - if ((euro = (uprv_strchr(name, '@'))) != NULL) { - *euro = 0; - } - /* if we can find the codset name, return that. */ - if (*name) { - return name; - } - } - if (*codesetName == 0) { - /* if the table lookup failed, return US ASCII (ISO 646). */ + /* Everything failed. Return US ASCII (ISO 646). */ uprv_strcpy(codesetName, "US-ASCII"); } return codesetName; diff --git a/icuSources/common/putilimp.h b/icuSources/common/putilimp.h index 945cae22..04c91b39 100644 --- a/icuSources/common/putilimp.h +++ b/icuSources/common/putilimp.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -134,19 +134,6 @@ U_INTERNAL int32_t U_EXPORT2 uprv_min(int32_t d, int32_t y); */ U_INTERNAL double U_EXPORT2 uprv_maxMantissa(void); -/** - * Return the floor of the log base 10 of a given double. - * This method compensates for inaccuracies which arise naturally when - * computing logs, and always gives the correct value. The parameter - * must be positive and finite. - * (Thanks to Alan Liu for supplying this function.) - * - * @param d the double value to apply the common log function for. - * @return the log of value d. - * @internal - */ -U_INTERNAL int16_t U_EXPORT2 uprv_log10(double d); - /** * Floating point utility to calculate the logarithm of a double. * @internal @@ -254,24 +241,40 @@ U_INTERNAL UBool U_EXPORT2 uprv_pathIsAbsolute(const char *path); * @internal */ #ifndef U_MAX_PTR -# ifdef OS390 +# if defined(OS390) && !defined(_LP64) + /* We have 31-bit pointers. */ # define U_MAX_PTR(base) ((void *)0x7fffffff) # elif defined(OS400) /* * With the provided macro we should never be out of range of a given segment - * (a traditional/typical segment that is). Our segments have 5 bytes for the id - * and 3 bytes for the offset. The key is that the casting takes care of only - * retrieving the offset portion minus x1000. Hence, the smallest offset seen in - * a program is x001000 and when casted to an int would be 0. That's why we can - * only add 0xffefff. Otherwise, we would exceed the segment. + * (a traditional/typical segment that is). Our segments have 5 bytes for the + * id and 3 bytes for the offset. The key is that the casting takes care of + * only retrieving the offset portion minus x1000. Hence, the smallest offset + * seen in a program is x001000 and when casted to an int would be 0. + * That's why we can only add 0xffefff. Otherwise, we would exceed the segment. * * Currently, 16MB is the current addressing limitation on as/400. This macro * may eventually be changed to use 2GB addressability for the newer version of * as/400 machines. */ # define U_MAX_PTR(base) ((void *)(((char *)base)-((int32_t)(base))+((int32_t)0xffefff))) +# elif defined(__GNUC__) && __GNUC__ >= 4 +/* + * Due to a compiler optimization bug, gcc 4 causes test failures when doing + * this math arithmetic on pointers on some platforms. It seems like the + * pointers are considered signed instead of unsigned. The uintptr_t type + * isn't available on all platforms (i.e MSVC 6) and pointers aren't always + * a scalar value (i.e. i5/OS in the lines above). + */ +# define U_MAX_PTR(base) \ + ((void *)(((uintptr_t)(base)+0x7fffffffu) > (uintptr_t)(base) \ + ? ((uintptr_t)(base)+0x7fffffffu) \ + : (uintptr_t)-1)) # else -# define U_MAX_PTR(base) ((void *)(((char *)(base)+0x7fffffffu) > (char *)(base) ? ((char *)(base)+0x7fffffffu) : (char *)-1)) +# define U_MAX_PTR(base) \ + ((char *)(((char *)(base)+0x7fffffffu) > (char *)(base) \ + ? ((char *)(base)+0x7fffffffu) \ + : (char *)-1)) # endif #endif diff --git a/icuSources/common/rbbi.cpp b/icuSources/common/rbbi.cpp index 50a9f0d6..10216c22 100644 --- a/icuSources/common/rbbi.cpp +++ b/icuSources/common/rbbi.cpp @@ -1,6 +1,6 @@ /* *************************************************************************** -* Copyright (C) 1999-2004 International Business Machines Corporation * +* Copyright (C) 1999-2006 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** */ @@ -16,14 +16,28 @@ #include "unicode/rbbi.h" #include "unicode/schriter.h" +#include "unicode/uchriter.h" #include "unicode/udata.h" #include "unicode/uclean.h" #include "rbbidata.h" #include "rbbirb.h" #include "cmemory.h" #include "cstring.h" +#include "mutex.h" +#include "ucln_cmn.h" +#include "brkeng.h" #include "uassert.h" +#include "uvector.h" + +// if U_LOCAL_SERVICE_HOOK is defined, then localsvc.cpp is expected to be included. +#if U_LOCAL_SERVICE_HOOK +#include "localsvc.h" +#endif + +#ifdef RBBI_DEBUG +static UBool fTrace = FALSE; +#endif U_NAMESPACE_BEGIN @@ -82,7 +96,6 @@ RuleBasedBreakIterator::RuleBasedBreakIterator( const UnicodeString &rules, UParseError &parseError, UErrorCode &status) { - u_init(&status); // Just in case ICU is not yet initialized init(); if (U_FAILURE(status)) {return;} RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *) @@ -127,12 +140,34 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& oth * Destructor */ RuleBasedBreakIterator::~RuleBasedBreakIterator() { - delete fText; - fText = NULL; + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + // fCharIter was adopted from the outside. + delete fCharIter; + } + fCharIter = NULL; + delete fSCharIter; + fCharIter = NULL; + delete fDCharIter; + fDCharIter = NULL; + + utext_close(fText); + if (fData != NULL) { fData->removeReference(); fData = NULL; } + if (fCachedBreakPositions) { + uprv_free(fCachedBreakPositions); + fCachedBreakPositions = NULL; + } + if (fLanguageBreakEngines) { + delete fLanguageBreakEngines; + fLanguageBreakEngines = NULL; + } + if (fUnhandledBreakEngine) { + delete fUnhandledBreakEngine; + fUnhandledBreakEngine = NULL; + } } /** @@ -144,10 +179,26 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { if (this == &that) { return *this; } - delete fText; - fText = NULL; - if (that.fText != NULL) { - fText = that.fText->clone(); + reset(); // Delete break cache information + fBreakType = that.fBreakType; + if (fLanguageBreakEngines != NULL) { + delete fLanguageBreakEngines; + fLanguageBreakEngines = NULL; // Just rebuild for now + } + // TODO: clone fLanguageBreakEngines from "that" + UErrorCode status = U_ZERO_ERROR; + fText = utext_clone(fText, that.fText, FALSE, TRUE, &status); + + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + delete fCharIter; + } + fCharIter = NULL; + + if (that.fCharIter != NULL ) { + // This is a little bit tricky - it will intially appear that + // this->fCharIter is adopted, even if that->fCharIter was + // not adopted. That's ok. + fCharIter = that.fCharIter->clone(); } if (fData != NULL) { @@ -157,7 +208,6 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { if (that.fData != NULL) { fData = that.fData->addReference(); } - fTrace = that.fTrace; return *this; } @@ -170,14 +220,24 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { // Initializes all fields, leaving the object in a consistent state. // //----------------------------------------------------------------------------- -UBool RuleBasedBreakIterator::fTrace = FALSE; void RuleBasedBreakIterator::init() { - - fText = NULL; + UErrorCode status = U_ZERO_ERROR; + fBufferClone = FALSE; + fText = utext_openUChars(NULL, NULL, 0, &status); + fCharIter = NULL; + fSCharIter = NULL; + fDCharIter = NULL; fData = NULL; fLastRuleStatusIndex = 0; fLastStatusIndexValid = TRUE; fDictionaryCharCount = 0; + fBreakType = -1; + + fCachedBreakPositions = NULL; + fLanguageBreakEngines = NULL; + fUnhandledBreakEngine = NULL; + fNumCachedBreakPositions = 0; + fPositionInCache = 0; #ifdef RBBI_DEBUG static UBool debugInitDone = FALSE; @@ -211,20 +271,26 @@ RuleBasedBreakIterator::clone(void) const { */ UBool RuleBasedBreakIterator::operator==(const BreakIterator& that) const { - UBool r = FALSE; if (that.getDynamicClassID() != getDynamicClassID()) { - return r; + return FALSE; } const RuleBasedBreakIterator& that2 = (const RuleBasedBreakIterator&) that; - if (fText == that2.fText || - (fText != NULL && that2.fText != NULL && *that2.fText == *fText)) { - if (that2.fData == fData || - (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) { - r = TRUE; + + if (!utext_equals(fText, that2.fText)) { + // The two break iterators are operating on different text, + // or have a different interation position. + return FALSE; + }; + + // TODO: need a check for when in a dictionary region at different offsets. + + if (that2.fData == fData || + (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) { + // The two break iterators are using the same rules. + return TRUE; } - } - return r; + return FALSE; } /** @@ -240,6 +306,42 @@ RuleBasedBreakIterator::hashCode(void) const { return hash; } + +void RuleBasedBreakIterator::setText(UText *ut, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + reset(); + fText = utext_clone(fText, ut, FALSE, TRUE, &status); + + // Set up a dummy CharacterIterator to be returned if anyone + // calls getText(). With input from UText, there is no reasonable + // way to return a characterIterator over the actual input text. + // Return one over an empty string instead - this is the closest + // we can come to signaling a failure. + // (GetText() is obsolete, this failure is sort of OK) + if (fDCharIter == NULL) { + static UChar c = 0; + fDCharIter = new UCharCharacterIterator(&c, 0); + } + + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + // existing fCharIter was adopted from the outside. Delete it now. + delete fCharIter; + } + fCharIter = fDCharIter; + + this->first(); +} + + +UText *RuleBasedBreakIterator::getUText(UText *fillIn, UErrorCode &status) const { + UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status); + return result; +} + + + /** * Returns the description used to create this iterator */ @@ -265,23 +367,11 @@ RuleBasedBreakIterator::getRules() const { //======================================================================= /** - * Return a CharacterIterator over the text being analyzed. This version - * of this method returns the actual CharacterIterator we're using internally. - * Changing the state of this iterator can have undefined consequences. If - * you need to change it, clone it first. - * @return An iterator over the text being analyzed. + * Return a CharacterIterator over the text being analyzed. */ -const CharacterIterator& +CharacterIterator& RuleBasedBreakIterator::getText() const { - RuleBasedBreakIterator* nonConstThis = (RuleBasedBreakIterator*)this; - - // The iterator is initialized pointing to no text at all, so if this - // function is called while we're in that state, we have to fudge an - // an iterator to return. - if (nonConstThis->fText == NULL) { - nonConstThis->fText = new StringCharacterIterator(UnicodeString()); - } - return *nonConstThis->fText; + return *fCharIter; } /** @@ -291,9 +381,22 @@ RuleBasedBreakIterator::getText() const { */ void RuleBasedBreakIterator::adoptText(CharacterIterator* newText) { + // If we are holding a CharacterIterator adopted from a + // previous call to this function, delete it now. + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + delete fCharIter; + } + + fCharIter = newText; + UErrorCode status = U_ZERO_ERROR; reset(); - delete fText; - fText = newText; + if (newText==NULL || newText->startIndex() != 0) { + // startIndex !=0 wants to be an error, but there's no way to report it. + // Make the iterator text be an empty string. + fText = utext_openUChars(fText, NULL, 0, &status); + } else { + fText = utext_openCharacterIterator(fText, newText, &status); + } this->first(); } @@ -304,15 +407,26 @@ RuleBasedBreakIterator::adoptText(CharacterIterator* newText) { */ void RuleBasedBreakIterator::setText(const UnicodeString& newText) { + UErrorCode status = U_ZERO_ERROR; reset(); - if (fText != NULL && fText->getDynamicClassID() - == StringCharacterIterator::getStaticClassID()) { - ((StringCharacterIterator*)fText)->setText(newText); + fText = utext_openConstUnicodeString(fText, &newText, &status); + + // Set up a character iterator on the string. + // Needed in case someone calls getText(). + // Can not, unfortunately, do this lazily on the (probably never) + // call to getText(), because getText is const. + if (fSCharIter == NULL) { + fSCharIter = new StringCharacterIterator(newText); + } else { + fSCharIter->setText(newText); } - else { - delete fText; - fText = new StringCharacterIterator(newText); + + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + // old fCharIter was adopted from the outside. Delete it. + delete fCharIter; } + fCharIter = fSCharIter; + this->first(); } @@ -320,23 +434,21 @@ RuleBasedBreakIterator::setText(const UnicodeString& newText) { /** * Sets the current iteration position to the beginning of the text. - * (i.e., the CharacterIterator's starting offset). * @return The offset of the beginning of the text. */ int32_t RuleBasedBreakIterator::first(void) { reset(); fLastRuleStatusIndex = 0; fLastStatusIndexValid = TRUE; - if (fText == NULL) - return BreakIterator::DONE; + //if (fText == NULL) + // return BreakIterator::DONE; - fText->first(); - return fText->getIndex(); + utext_setNativeIndex(fText, 0); + return 0; } /** * Sets the current iteration position to the end of the text. - * (i.e., the CharacterIterator's ending offset). * @return The text's past-the-end offset. */ int32_t RuleBasedBreakIterator::last(void) { @@ -347,17 +459,9 @@ int32_t RuleBasedBreakIterator::last(void) { return BreakIterator::DONE; } - // I'm not sure why, but t.last() returns the offset of the last character, - // rather than the past-the-end offset - // - // (It's so a loop like for(p=it.last(); p!=DONE; p=it.previous()) ... - // will work correctly.) - - fLastStatusIndexValid = FALSE; - int32_t pos = fText->endIndex(); - fText->setIndex(pos); - + int32_t pos = (int32_t)utext_nativeLength(fText); + utext_setNativeIndex(fText, pos); return pos; } @@ -373,7 +477,7 @@ int32_t RuleBasedBreakIterator::last(void) { int32_t RuleBasedBreakIterator::next(int32_t n) { int32_t result = current(); while (n > 0) { - result = handleNext(); + result = next(); --n; } while (n < 0) { @@ -388,7 +492,26 @@ int32_t RuleBasedBreakIterator::next(int32_t n) { * @return The position of the first boundary after this one. */ int32_t RuleBasedBreakIterator::next(void) { - return handleNext(); + // if we have cached break positions and we're still in the range + // covered by them, just move one step forward in the cache + if (fCachedBreakPositions != NULL) { + if (fPositionInCache < fNumCachedBreakPositions - 1) { + ++fPositionInCache; + int32_t pos = fCachedBreakPositions[fPositionInCache]; + utext_setNativeIndex(fText, pos); + return pos; + } + else { + reset(); + } + } + + int32_t startPos = current(); + int32_t result = handleNext(fData->fForwardTable); + if (fDictionaryCharCount > 0) { + result = checkDictionary(startPos, result, FALSE); + } + return result; } /** @@ -396,15 +519,41 @@ int32_t RuleBasedBreakIterator::next(void) { * @return The position of the last boundary position preceding this one. */ int32_t RuleBasedBreakIterator::previous(void) { + int32_t result; + int32_t startPos; + + // if we have cached break positions and we're still in the range + // covered by them, just move one step backward in the cache + if (fCachedBreakPositions != NULL) { + if (fPositionInCache > 0) { + --fPositionInCache; + // If we're at the beginning of the cache, need to reevaluate the + // rule status + if (fPositionInCache <= 0) { + fLastStatusIndexValid = FALSE; + } + int32_t pos = fCachedBreakPositions[fPositionInCache]; + utext_setNativeIndex(fText, pos); + return pos; + } + else { + reset(); + } + } + // if we're already sitting at the beginning of the text, return DONE - if (fText == NULL || current() == fText->startIndex()) { + if (fText == NULL || (startPos = current()) == 0) { fLastRuleStatusIndex = 0; fLastStatusIndexValid = TRUE; return BreakIterator::DONE; } if (fData->fSafeRevTable != NULL || fData->fSafeFwdTable != NULL) { - return handlePrevious(fData->fReverseTable); + result = handlePrevious(fData->fReverseTable); + if (fDictionaryCharCount > 0) { + result = checkDictionary(result, startPos, TRUE); + } + return result; } // old rule syntax @@ -412,13 +561,18 @@ int32_t RuleBasedBreakIterator::previous(void) { // break position before the current position (we back our internal // iterator up one step to prevent handlePrevious() from returning // the current position), but not necessarily the last one before + // where we started int32_t start = current(); - fText->previous32(); - int32_t lastResult = handlePrevious(); - int32_t result = lastResult; + UTEXT_PREVIOUS32(fText); + int32_t lastResult = handlePrevious(fData->fReverseTable); + if (lastResult == UBRK_DONE) { + lastResult = 0; + utext_setNativeIndex(fText, 0); + } + result = lastResult; int32_t lastTag = 0; UBool breakTagValid = FALSE; @@ -427,7 +581,7 @@ int32_t RuleBasedBreakIterator::previous(void) { // point is our return value for (;;) { - result = handleNext(); + result = next(); if (result == BreakIterator::DONE || result >= start) { break; } @@ -439,15 +593,19 @@ int32_t RuleBasedBreakIterator::previous(void) { // fLastBreakTag wants to have the value for section of text preceding // the result position that we are to return (in lastResult.) If // the backwards rules overshot and the above loop had to do two or more - // handleNext()s to move up to the desired return position, we will have a valid + // next()s to move up to the desired return position, we will have a valid // tag value. But, if handlePrevious() took us to exactly the correct result positon, // we wont have a tag value for that position, which is only set by handleNext(). // set the current iteration position to be the last break position // before where we started, and then return that value - fText->setIndex(lastResult); + utext_setNativeIndex(fText, lastResult); fLastRuleStatusIndex = lastTag; // for use by getRuleStatus() fLastStatusIndexValid = breakTagValid; + + // No need to check the dictionary; it will have been handled by + // next() + return lastResult; } @@ -458,16 +616,37 @@ int32_t RuleBasedBreakIterator::previous(void) { * @return The position of the first break after the current position. */ int32_t RuleBasedBreakIterator::following(int32_t offset) { + // if we have cached break positions and offset is in the range + // covered by them, use them + // TODO: could use binary search + // TODO: what if offset is outside range, but break is not? + if (fCachedBreakPositions != NULL) { + if (offset >= fCachedBreakPositions[0] + && offset < fCachedBreakPositions[fNumCachedBreakPositions - 1]) { + fPositionInCache = 0; + // We are guaranteed not to leave the array due to range test above + while (offset >= fCachedBreakPositions[fPositionInCache]) { + ++fPositionInCache; + } + int32_t pos = fCachedBreakPositions[fPositionInCache]; + utext_setNativeIndex(fText, pos); + return pos; + } + else { + reset(); + } + } + // if the offset passed in is already past the end of the text, // just return DONE; if it's before the beginning, return the // text's starting offset fLastRuleStatusIndex = 0; fLastStatusIndexValid = TRUE; - if (fText == NULL || offset >= fText->endIndex()) { + if (fText == NULL || offset >= utext_nativeLength(fText)) { last(); return next(); } - else if (offset < fText->startIndex()) { + else if (offset < 0) { return first(); } @@ -479,12 +658,11 @@ int32_t RuleBasedBreakIterator::following(int32_t offset) { if (fData->fSafeRevTable != NULL) { // new rule syntax - /// todo synwee - fText->setIndex(offset); + utext_setNativeIndex(fText, offset); // move forward one codepoint to prepare for moving back to a // safe point. // this handles offset being between a supplementary character - fText->next32(); + UTEXT_NEXT32(fText); // handlePrevious will move most of the time to < 1 boundary away handlePrevious(fData->fSafeRevTable); int32_t result = next(); @@ -495,8 +673,8 @@ int32_t RuleBasedBreakIterator::following(int32_t offset) { } if (fData->fSafeFwdTable != NULL) { // backup plan if forward safe table is not available - fText->setIndex(offset); - fText->previous32(); + utext_setNativeIndex(fText, offset); + UTEXT_PREVIOUS32(fText); // handle next will give result >= offset handleNext(fData->fSafeFwdTable); // previous will give result 0 or 1 boundary away from offset, @@ -517,7 +695,7 @@ int32_t RuleBasedBreakIterator::following(int32_t offset) { return result; } // otherwise, we have to sync up first. Use handlePrevious() to back - // us up to a known break position before the specified position (if + // up to a known break position before the specified position (if // we can determine that the specified position is a break position, // we don't back up at all). This may or may not be the last break // position at or before our starting position. Advance forward @@ -525,9 +703,10 @@ int32_t RuleBasedBreakIterator::following(int32_t offset) { // we stop on will be the first break position after the specified one. // old rule syntax - fText->setIndex(offset); - if (offset == fText->startIndex()) { - return handleNext(); + utext_setNativeIndex(fText, offset); + if (offset==0 || + offset==1 && utext_getNativeIndex(fText)==0) { + return next(); } result = previous(); @@ -545,15 +724,39 @@ int32_t RuleBasedBreakIterator::following(int32_t offset) { * @return The position of the last boundary before the starting position. */ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { + // if we have cached break positions and offset is in the range + // covered by them, use them + if (fCachedBreakPositions != NULL) { + // TODO: binary search? + // TODO: What if offset is outside range, but break is not? + if (offset > fCachedBreakPositions[0] + && offset <= fCachedBreakPositions[fNumCachedBreakPositions - 1]) { + fPositionInCache = 0; + while (fPositionInCache < fNumCachedBreakPositions + && offset > fCachedBreakPositions[fPositionInCache]) + ++fPositionInCache; + --fPositionInCache; + // If we're at the beginning of the cache, need to reevaluate the + // rule status + if (fPositionInCache <= 0) { + fLastStatusIndexValid = FALSE; + } + utext_setNativeIndex(fText, fCachedBreakPositions[fPositionInCache]); + return fCachedBreakPositions[fPositionInCache]; + } + else { + reset(); + } + } + // if the offset passed in is already past the end of the text, // just return DONE; if it's before the beginning, return the - // text's starting offset - if (fText == NULL || offset > fText->endIndex()) { + if (fText == NULL || offset > utext_nativeLength(fText)) { // return BreakIterator::DONE; return last(); } - else if (offset < fText->startIndex()) { + else if (offset < 0) { return first(); } @@ -562,18 +765,27 @@ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { // to carry out this operation if (fData->fSafeFwdTable != NULL) { - /// todo synwee // new rule syntax - fText->setIndex(offset); - // move backwards one codepoint to prepare for moving forwards to a - // safe point. - // this handles offset being between a supplementary character - // TODO: would it be better to just check for being in the middle of a surrogate pair, + utext_setNativeIndex(fText, offset); + int32_t newOffset = (int32_t)UTEXT_GETNATIVEINDEX(fText); + if (newOffset != offset) { + // Will come here if specified offset was not a code point boundary AND + // the underlying implmentation is using UText, which snaps any non-code-point-boundary + // indices to the containing code point. + // For breakitereator::preceding only, these non-code-point indices need to be moved + // up to refer to the following codepoint. + UTEXT_NEXT32(fText); + offset = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + + // TODO: (synwee) would it be better to just check for being in the middle of a surrogate pair, // rather than adjusting the position unconditionally? // (Change would interact with safe rules.) - fText->previous32(); + // TODO: change RBBI behavior for off-boundary indices to match that of UText? + // affects only preceding(), seems cleaner, but is slightly different. + UTEXT_PREVIOUS32(fText); handleNext(fData->fSafeFwdTable); - int32_t result = fText->getIndex(); + int32_t result = (int32_t)UTEXT_GETNATIVEINDEX(fText); while (result >= offset) { result = previous(); } @@ -581,8 +793,13 @@ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { } if (fData->fSafeRevTable != NULL) { // backup plan if forward safe table is not available - fText->setIndex(offset); - fText->next32(); + // TODO: check whether this path can be discarded + // It's probably OK to say that rules must supply both safe tables + // if they use safe tables at all. We have certainly never described + // to anyone how to work with just one safe table. + utext_setNativeIndex(fText, offset); + UTEXT_NEXT32(fText); + // handle previous will give result <= offset handlePrevious(fData->fSafeRevTable); @@ -605,7 +822,7 @@ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { } // old rule syntax - fText->setIndex(offset); + utext_setNativeIndex(fText, offset); return previous(); } @@ -618,23 +835,23 @@ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { */ UBool RuleBasedBreakIterator::isBoundary(int32_t offset) { // the beginning index of the iterator is always a boundary position by definition - if (fText == NULL || offset == fText->startIndex()) { + if (offset == 0) { first(); // For side effects on current position, tag values. return TRUE; } - if (offset == fText->endIndex()) { + if (offset == (int32_t)utext_nativeLength(fText)) { last(); // For side effects on current position, tag values. return TRUE; } // out-of-range indexes are never boundary positions - if (offset < fText->startIndex()) { + if (offset < 0) { first(); // For side effects on current position, tag values. return FALSE; } - if (offset > fText->endIndex()) { + if (offset > utext_nativeLength(fText)) { last(); // For side effects on current position, tag values. return FALSE; } @@ -642,7 +859,10 @@ UBool RuleBasedBreakIterator::isBoundary(int32_t offset) { // otherwise, we can use following() on the position before the specified // one and return true if the position we get back is the one the user // specified - return following(offset - 1) == offset; + utext_previous32From(fText, offset); + int32_t backOne = (int32_t)UTEXT_GETNATIVEINDEX(fText); + UBool result = following(backOne) == offset; + return result; } /** @@ -650,112 +870,136 @@ UBool RuleBasedBreakIterator::isBoundary(int32_t offset) { * @return The current iteration position. */ int32_t RuleBasedBreakIterator::current(void) const { - return (fText != NULL) ? fText->getIndex() : BreakIterator::DONE; + int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); + return pos; } - + //======================================================================= // implementation //======================================================================= +// +// RBBIRunMode - the state machine runs an extra iteration at the beginning and end +// of user text. A variable with this enum type keeps track of where we +// are. The state machine only fetches user input while in the RUN mode. +// +enum RBBIRunMode { + RBBI_START, // state machine processing is before first char of input + RBBI_RUN, // state machine processing is in the user text + RBBI_END // state machine processing is after end of user text. +}; + //----------------------------------------------------------------------------------- // -// handleNext() -// This method is the actual implementation of the next() method. All iteration -// vectors through here. This method initializes the state machine to state 1 +// handleNext(stateTable) +// This method is the actual implementation of the rbbi next() method. +// This method initializes the state machine to state 1 // and advances through the text character by character until we reach the end // of the text or the state machine transitions to state 0. We update our return // value every time the state machine passes through an accepting state. // //----------------------------------------------------------------------------------- -int32_t RuleBasedBreakIterator::handleNext() { - return handleNext(fData->fForwardTable); -} - int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { - if (fTrace) { - RBBIDebugPuts("Handle Next pos char state category"); - } + int32_t state; + int16_t category = 0; + RBBIRunMode mode; + + RBBIStateTableRow *row; + UChar32 c; + int32_t lookaheadStatus = 0; + int32_t lookaheadTagIdx = 0; + int32_t result = 0; + int32_t initialPosition = 0; + int32_t lookaheadResult = 0; + UBool lookAheadHardBreak = (statetable->fFlags & RBBI_LOOKAHEAD_HARD_BREAK) != 0; + const char *tableData = statetable->fTableData; + uint32_t tableRowLen = statetable->fRowLen; + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPuts("Handle Next pos char state category"); + } + #endif // No matter what, handleNext alway correctly sets the break tag value. fLastStatusIndexValid = TRUE; + fLastRuleStatusIndex = 0; // if we're already at the end of the text, return DONE. - if (fText == NULL || fData == NULL || fText->hasNext() == FALSE) { - fLastRuleStatusIndex = 0; + initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); + result = initialPosition; + c = UTEXT_NEXT32(fText); + if (fData == NULL || c==U_SENTINEL) { return BreakIterator::DONE; } - int32_t initialPosition = fText->getIndex(); - int32_t result = initialPosition; - int32_t lookaheadResult = 0; - - // Initialize the state machine. Begin in state 1 - int32_t state = START_STATE; - int16_t category; - UChar32 c = fText->current32(); - RBBIStateTableRow *row; - int32_t lookaheadStatus = 0; - int32_t lookaheadTagIdx = 0; - - fLastRuleStatusIndex = 0; - - row = (RBBIStateTableRow *) // Point to starting row of state table. - (statetable->fTableData + (statetable->fRowLen * state)); + // Set the initial state for the state machine + state = START_STATE; + row = (RBBIStateTableRow *) + //(statetable->fTableData + (statetable->fRowLen * state)); + (tableData + tableRowLen * state); + + + mode = RBBI_RUN; + if (statetable->fFlags & RBBI_BOF_REQUIRED) { + category = 2; + mode = RBBI_START; + } - // Character Category fetch for starting character. - // See comments on character category code within loop, below. - UTRIE_GET16(&fData->fTrie, c, category); - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - category &= ~0x4000; - } // loop until we reach the end of the text or transition to state 0 + // for (;;) { - if (c == CharacterIterator::DONE && fText->hasNext()==FALSE) { + if (c == U_SENTINEL) { // Reached end of input string. - // Note: CharacterIterator::DONE is 0xffff, which is also a legal - // character value. Check for DONE first, because it's quicker, - // but also need to check fText->hasNext() to be certain. - - if (lookaheadResult > result) { - // We ran off the end of the string with a pending look-ahead match. - // Treat this as if the look-ahead condition had been met, and return - // the match at the / position from the look-ahead rule. - result = lookaheadResult; - fLastRuleStatusIndex = lookaheadTagIdx; - lookaheadStatus = 0; - } else if (result == initialPosition) { - // Ran off end, no match found. - // move forward one - fText->setIndex(initialPosition); - fText->next32(); - fText->getIndex(); + if (mode == RBBI_END) { + // We have already run the loop one last time with the + // character set to the psueudo {eof} value. Now it is time + // to unconditionally bail out. + if (lookaheadResult > result) { + // We ran off the end of the string with a pending look-ahead match. + // Treat this as if the look-ahead condition had been met, and return + // the match at the / position from the look-ahead rule. + result = lookaheadResult; + fLastRuleStatusIndex = lookaheadTagIdx; + lookaheadStatus = 0; + } + break; } - break; + // Run the loop one last time with the fake end-of-input character category. + mode = RBBI_END; + category = 1; } - // look up the current character's character category, which tells us - // which column in the state table to look at. - // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, - // not the size of the character going in, which is a UChar32. - // - UTRIE_GET16(&fData->fTrie, c, category); - // Check the dictionary bit in the character's category. - // Counter is only used by dictionary based iterators (subclasses). - // Chars that need to be handled by a dictionary have a flag bit set - // in their category values. // - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - // And off the dictionary flag bit. - category &= ~0x4000; + // Get the char category. An incoming category of 1 or 2 means that + // we are preset for doing the beginning or end of input, and + // that we shouldn't get a category from an actual text input character. + // + if (mode == RBBI_RUN) { + // look up the current character's character category, which tells us + // which column in the state table to look at. + // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, + // not the size of the character going in, which is a UChar32. + // + UTRIE_GET16(&fData->fTrie, c, category); + + // Check the dictionary bit in the character's category. + // Counter is only used by dictionary based iterators (subclasses). + // Chars that need to be handled by a dictionary have a flag bit set + // in their category values. + // + if ((category & 0x4000) != 0) { + fDictionaryCharCount++; + // And off the dictionary flag bit. + category &= ~0x4000; + } } #ifdef RBBI_DEBUG if (fTrace) { - RBBIDebugPrintf(" %4d ", fText->getIndex()); + RBBIDebugPrintf(" %4d ", utext_getNativeIndex(fText)); if (0x20<=c && c<0x7f) { RBBIDebugPrintf("\"%c\" ", c); } else { @@ -765,42 +1009,40 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { } #endif - // look up a state transition in the state table + // State Transition - move machine to its next state + // state = row->fNextState[category]; row = (RBBIStateTableRow *) - (statetable->fTableData + (statetable->fRowLen * state)); + // (statetable->fTableData + (statetable->fRowLen * state)); + (tableData + tableRowLen * state); - // Get the next character. Doing it here positions the iterator - // to the correct position for recording matches in the code that - // follows. - c = fText->next32(); if (row->fAccepting == -1) { - // Match found, common case, could have lookahead so we move on to check it - result = fText->getIndex(); - /// added + // Match found, common case. + if (mode != RBBI_START) { + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } fLastRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values. } if (row->fLookAhead != 0) { if (lookaheadStatus != 0 && row->fAccepting == lookaheadStatus) { - // Lookahead match is completed. Set the result accordingly, but only - // if no other rule has matched further in the mean time. + // Lookahead match is completed. result = lookaheadResult; fLastRuleStatusIndex = lookaheadTagIdx; lookaheadStatus = 0; - /// i think we have to back up to read the lookahead character again - /// fText->setIndex(lookaheadResult); - /// TODO: this is a simple hack since reverse rules only have simple - /// lookahead rules that we can definitely break out from. - /// we need to make the lookahead rules not chain eventually. - /// return result; - /// this is going to be the longest match again + // TODO: make a standalone hard break in a rule work. + if (lookAheadHardBreak) { + utext_setNativeIndex(fText, result); + return result; + } + // Look-ahead completed, but other rules may match further. Continue on + // TODO: junk this feature? I don't think it's used anywhwere. goto continueOn; } - int32_t r = fText->getIndex(); + int32_t r = (int32_t)UTEXT_GETNATIVEINDEX(fText); lookaheadResult = r; lookaheadStatus = row->fLookAhead; lookaheadTagIdx = row->fTagIdx; @@ -808,13 +1050,12 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { } - if (row->fAccepting == 0) { - // No match, nothing of interest happening, common case. - goto continueOn; + if (row->fAccepting != 0) { + // Because this is an accepting state, any in-progress look-ahead match + // is no longer relavant. Clear out the pending lookahead status. + lookaheadStatus = 0; // clear out any pending look-ahead match. } - lookaheadStatus = 0; // clear out any pending look-ahead matches. - continueOn: if (state == STOP_STATE) { // This is the normal exit from the lookup state machine. @@ -822,6 +1063,20 @@ continueOn: // longer match is possible, no matter what characters follow. break; } + + // Advance to the next character. + // If this is a beginning-of-input loop iteration, don't advance + // the input position. The next iteration will be processing the + // first real input character. + if (mode == RBBI_RUN) { + c = UTEXT_NEXT32(fText); + } else { + if (mode == RBBI_START) { + mode = RBBI_RUN; + } + } + + } // The state machine is done. Check whether it found a match... @@ -830,230 +1085,138 @@ continueOn: // (This really indicates a defect in the break rules. They should always match // at least one character.) if (result == initialPosition) { - result = fText->setIndex(initialPosition); - fText ->next32(); - result = fText->getIndex(); + utext_setNativeIndex(fText, initialPosition); + UTEXT_NEXT32(fText); + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); } // Leave the iterator at our result position. - fText->setIndex(result); - if (fTrace) { - RBBIDebugPrintf("result = %d\n\n", result); - } - return result; -} - - -//---------------------------------------------------------------- -// -// handlePrevious(void) This is the variant used with old style rules -// (Overshoot to a safe point, then move forward) -// -//---------------------------------------------------------------- -int32_t RuleBasedBreakIterator::handlePrevious(void) { - if (fText == NULL || fData == NULL) { - return 0; - } - if (fData->fReverseTable == NULL) { - return fText->setToStart(); - } - - int32_t state = START_STATE; - int32_t category; - int32_t lastCategory = 0; - int32_t result = fText->getIndex(); - int32_t lookaheadStatus = 0; - int32_t lookaheadResult = 0; - int32_t lookaheadTagIdx = 0; - UChar32 c = fText->current32(); - RBBIStateTableRow *row; - - row = (RBBIStateTableRow *) - (this->fData->fReverseTable->fTableData + (state * fData->fReverseTable->fRowLen)); - UTRIE_GET16(&fData->fTrie, c, category); - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - category &= ~0x4000; - } - - if (fTrace) { - RBBIDebugPuts("Handle Prev pos char state category"); - } - - // loop until we reach the beginning of the text or transition to state 0 - for (;;) { - if (c == CharacterIterator::DONE && fText->hasPrevious()==FALSE) { - break; - } - - // save the last character's category and look up the current - // character's category - lastCategory = category; - UTRIE_GET16(&fData->fTrie, c, category); - - // Check the dictionary bit in the character's category. - // Counter is only used by dictionary based iterators. - // - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - category &= ~0x4000; + utext_setNativeIndex(fText, result); + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf("result = %d\n\n", result); } - - #ifdef RBBI_DEBUG - if (fTrace) { - RBBIDebugPrintf(" %4d ", fText->getIndex()); - if (0x20<=c && c<0x7f) { - RBBIDebugPrintf("\"%c\" ", c); - } else { - RBBIDebugPrintf("%5x ", c); - } - RBBIDebugPrintf("%3d %3d\n", state, category); - } - #endif - - // look up a state transition in the backwards state table - state = row->fNextState[category]; - row = (RBBIStateTableRow *) - (this->fData->fReverseTable->fTableData + (state * fData->fReverseTable->fRowLen)); - - if (row->fAccepting == 0 && row->fLookAhead == 0) { - // No match, nothing of interest happening, common case. - goto continueOn; - } - - if (row->fAccepting == -1) { - // Match found, common case, no lookahead involved. - result = fText->getIndex(); - lookaheadStatus = 0; // clear out any pending look-ahead matches. - goto continueOn; - } - - if (row->fAccepting == 0 && row->fLookAhead != 0) { - // Lookahead match point. Remember it, but only if no other rule - // has unconditionally matched to this point. - // TODO: handle case where there's a pending match from a different rule - // where lookaheadStatus != 0 && lookaheadStatus != row->fLookAhead. - int32_t r = fText->getIndex(); - if (r > result) { - lookaheadResult = r; - lookaheadStatus = row->fLookAhead; - lookaheadTagIdx = row->fTagIdx; - } - goto continueOn; - } - - if (row->fAccepting != 0 && row->fLookAhead != 0) { - // Lookahead match is completed. Set the result accordingly, but only - // if no other rule has matched further in the mean time. - if (lookaheadResult > result) { - U_ASSERT(row->fAccepting == lookaheadStatus); // TODO: handle this case - // of overlapping lookahead matches. - result = lookaheadResult; - fLastRuleStatusIndex = lookaheadTagIdx; - lookaheadStatus = 0; - } - goto continueOn; - } - -continueOn: - if (state == STOP_STATE) { - break; - } - - // then advance one character backwards - c = fText->previous32(); - } - - // Note: the result postion isn't what is returned to the user by previous(), - // but where the implementation of previous() turns around and - // starts iterating forward again. - if (c == CharacterIterator::DONE && fText->hasPrevious()==FALSE) { - result = fText->startIndex(); - } - fText->setIndex(result); - + #endif return result; } + //----------------------------------------------------------------------------------- // // handlePrevious() // -// This method backs the iterator back up to a "safe position" in the text. -// This is a position that we know, without any context, may be any position -// not more than 2 breaks away. Occasionally, the position may be less than -// one break away. -// The various calling methods then iterate forward from this safe position to -// the appropriate position to return. +// Iterate backwards, according to the logic of the reverse rules. +// This version handles the exact style backwards rules. // // The logic of this function is very similar to handleNext(), above. // //----------------------------------------------------------------------------------- int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) { - if (fText == NULL || statetable == NULL) { - return 0; - } - // break tag is no longer valid after icu switched to exact backwards - // positioning. + int32_t state; + int16_t category = 0; + RBBIRunMode mode; + RBBIStateTableRow *row; + UChar32 c; + int32_t lookaheadStatus = 0; + int32_t result = 0; + int32_t initialPosition = 0; + int32_t lookaheadResult = 0; + UBool lookAheadHardBreak = (statetable->fFlags & RBBI_LOOKAHEAD_HARD_BREAK) != 0; + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPuts("Handle Previous pos char state category"); + } + #endif + + // handlePrevious() never gets the rule status. + // Flag the status as invalid; if the user ever asks for status, we will need + // to back up, then re-find the break position using handleNext(), which does + // get the status value. fLastStatusIndexValid = FALSE; - if (statetable == NULL) { - return fText->setToStart(); - } + fLastRuleStatusIndex = 0; - int32_t state = START_STATE; - int32_t category; - int32_t lastCategory = 0; - UBool hasPassedStartText = !fText->hasPrevious(); - UChar32 c = fText->previous32(); - // previous character - int32_t result = fText->getIndex(); - int32_t lookaheadStatus = 0; - int32_t lookaheadResult = 0; - int32_t lookaheadTagIdx = 0; - UBool lookAheadHardBreak = (statetable->fFlags & RBBI_LOOKAHEAD_HARD_BREAK) != 0; + // if we're already at the start of the text, return DONE. + if (fText == NULL || fData == NULL || UTEXT_GETNATIVEINDEX(fText)==0) { + return BreakIterator::DONE; + } - RBBIStateTableRow *row; + // Set up the starting char. + initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); + result = initialPosition; + c = UTEXT_PREVIOUS32(fText); + // Set the initial state for the state machine + state = START_STATE; row = (RBBIStateTableRow *) - (statetable->fTableData + (state * statetable->fRowLen)); - UTRIE_GET16(&fData->fTrie, c, category); - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - category &= ~0x4000; + (statetable->fTableData + (statetable->fRowLen * state)); + category = 3; + mode = RBBI_RUN; + if (statetable->fFlags & RBBI_BOF_REQUIRED) { + category = 2; + mode = RBBI_START; } - if (fTrace) { - RBBIDebugPuts("Handle Prev pos char state category"); - } - // loop until we reach the beginning of the text or transition to state 0 + // loop until we reach the start of the text or transition to state 0 + // for (;;) { - // if (c == CharacterIterator::DONE && fText->hasPrevious()==FALSE) { - if (hasPassedStartText) { - // if we have already considered the start of the text - if (row->fLookAhead != 0 && lookaheadResult == 0) { - result = 0; + if (c == U_SENTINEL) { + // Reached end of input string. + if (mode == RBBI_END || + *(int32_t *)fData->fHeader->fFormatVersion == 1 ) { + // We have already run the loop one last time with the + // character set to the psueudo {eof} value. Now it is time + // to unconditionally bail out. + // (Or we have an old format binary rule file that does not support {eof}.) + if (lookaheadResult < result) { + // We ran off the end of the string with a pending look-ahead match. + // Treat this as if the look-ahead condition had been met, and return + // the match at the / position from the look-ahead rule. + result = lookaheadResult; + lookaheadStatus = 0; + } else if (result == initialPosition) { + // Ran off start, no match found. + // move one index one (towards the start, since we are doing a previous()) + utext_setNativeIndex(fText, initialPosition); + UTEXT_PREVIOUS32(fText); // TODO: shouldn't be necessary. We're already at beginning. Check. + } + break; } - break; + // Run the loop one last time with the fake end-of-input character category. + mode = RBBI_END; + category = 1; } - // save the last character's category and look up the current - // character's category - lastCategory = category; - UTRIE_GET16(&fData->fTrie, c, category); - - // Check the dictionary bit in the character's category. - // Counter is only used by dictionary based iterators. // - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - category &= ~0x4000; + // Get the char category. An incoming category of 1 or 2 means that + // we are preset for doing the beginning or end of input, and + // that we shouldn't get a category from an actual text input character. + // + if (mode == RBBI_RUN) { + // look up the current character's character category, which tells us + // which column in the state table to look at. + // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, + // not the size of the character going in, which is a UChar32. + // + UTRIE_GET16(&fData->fTrie, c, category); + + // Check the dictionary bit in the character's category. + // Counter is only used by dictionary based iterators (subclasses). + // Chars that need to be handled by a dictionary have a flag bit set + // in their category values. + // + if ((category & 0x4000) != 0) { + fDictionaryCharCount++; + // And off the dictionary flag bit. + category &= ~0x4000; + } } #ifdef RBBI_DEBUG if (fTrace) { - RBBIDebugPrintf(" %4d ", fText->getIndex()); + RBBIDebugPrintf(" %4d ", (int32_t)utext_getNativeIndex(fText)); if (0x20<=c && c<0x7f) { RBBIDebugPrintf("\"%c\" ", c); } else { @@ -1063,77 +1226,85 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) } #endif - // look up a state transition in the backwards state table + // State Transition - move machine to its next state + // state = row->fNextState[category]; row = (RBBIStateTableRow *) - (statetable->fTableData + (state * statetable->fRowLen)); + (statetable->fTableData + (statetable->fRowLen * state)); if (row->fAccepting == -1) { - // Match found, common case, could have lookahead so we move on to check it - result = fText->getIndex(); - /// added - fLastRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) value. + // Match found, common case. + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); } if (row->fLookAhead != 0) { if (lookaheadStatus != 0 && row->fAccepting == lookaheadStatus) { - // Lookahead match is completed. Set the result accordingly, but only - // if no other rule has matched further in the mean time. + // Lookahead match is completed. result = lookaheadResult; - fLastRuleStatusIndex = lookaheadTagIdx; lookaheadStatus = 0; - /// i think we have to back up to read the lookahead character again - /// fText->setIndex(lookaheadResult); - /// TODO: this is a simple hack since reverse rules only have simple - /// lookahead rules that we can definitely break out from. - /// we need to make the lookahead rules not chain eventually. - /// return result; - /// this is going to be the longest match again - - /// syn wee todo hard coded for line breaks stuff - /// needs to provide a tag in rules to ensure a stop. - + // TODO: make a standalone hard break in a rule work. if (lookAheadHardBreak) { - fText->setIndex(result); + utext_setNativeIndex(fText, result); return result; } - category = lastCategory; - fText->setIndex(result); - + // Look-ahead completed, but other rules may match further. Continue on + // TODO: junk this feature? I don't think it's used anywhwere. goto continueOn; } - int32_t r = fText->getIndex(); - lookaheadResult = r; - lookaheadStatus = row->fLookAhead; - fLastRuleStatusIndex = row->fTagIdx; + int32_t r = (int32_t)UTEXT_GETNATIVEINDEX(fText); + lookaheadResult = r; + lookaheadStatus = row->fLookAhead; goto continueOn; } - // not lookahead - if (row->fAccepting == 0) { - // No match, nothing of interest happening, common case. - goto continueOn; - } - lookaheadStatus = 0; // clear out any pending look-ahead matches. + if (row->fAccepting != 0) { + // Because this is an accepting state, any in-progress look-ahead match + // is no longer relavant. Clear out the pending lookahead status. + lookaheadStatus = 0; + } continueOn: if (state == STOP_STATE) { + // This is the normal exit from the lookup state machine. + // We have advanced through the string until it is certain that no + // longer match is possible, no matter what characters follow. break; } - // then advance one character backwards - hasPassedStartText = !fText->hasPrevious(); - c = fText->previous32(); + // Move (backwards) to the next character to process. + // If this is a beginning-of-input loop iteration, don't advance + // the input position. The next iteration will be processing the + // first real input character. + if (mode == RBBI_RUN) { + c = UTEXT_PREVIOUS32(fText); + } else { + if (mode == RBBI_START) { + mode = RBBI_RUN; + } + } } - // Note: the result postion isn't what is returned to the user by previous(), - // but where the implementation of previous() turns around and - // starts iterating forward again. - fText->setIndex(result); + // The state machine is done. Check whether it found a match... + + // If the iterator failed to advance in the match engine, force it ahead by one. + // (This really indicates a defect in the break rules. They should always match + // at least one character.) + if (result == initialPosition) { + utext_setNativeIndex(fText, initialPosition); + UTEXT_PREVIOUS32(fText); + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + // Leave the iterator at our result position. + utext_setNativeIndex(fText, result); + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf("result = %d\n\n", result); + } + #endif return result; } @@ -1141,8 +1312,13 @@ continueOn: void RuleBasedBreakIterator::reset() { - // Base-class version of this function is a no-op. - // Subclasses may override with their own reset behavior. + if (fCachedBreakPositions) { + uprv_free(fCachedBreakPositions); + } + fCachedBreakPositions = NULL; + fNumCachedBreakPositions = 0; + fDictionaryCharCount = 0; + fPositionInCache = 0; } @@ -1163,7 +1339,7 @@ RuleBasedBreakIterator::reset() void RuleBasedBreakIterator::makeRuleStatusValid() { if (fLastStatusIndexValid == FALSE) { // No cached status is available. - if (fText == NULL || current() == fText->startIndex()) { + if (fText == NULL || current() == 0) { // At start of text, or there is no text. Status is always zero. fLastRuleStatusIndex = 0; fLastStatusIndexValid = TRUE; @@ -1171,6 +1347,9 @@ void RuleBasedBreakIterator::makeRuleStatusValid() { // Not at start of text. Find status the tedious way. int32_t pa = current(); previous(); + if (fNumCachedBreakPositions > 0) { + reset(); // Blow off the dictionary cache + } int32_t pb = next(); if (pa != pb) { // note: the if (pa != pb) test is here only to eliminate warnings for @@ -1179,7 +1358,6 @@ void RuleBasedBreakIterator::makeRuleStatusValid() { } } } - U_ASSERT(fLastStatusIndexValid == TRUE); U_ASSERT(fLastRuleStatusIndex >= 0 && fLastRuleStatusIndex < fData->fStatusMaxIdx); } @@ -1289,16 +1467,20 @@ BreakIterator * RuleBasedBreakIterator::createBufferClone(void *stackBuffer, buf += offsetUp; } if (s < sizeof(RuleBasedBreakIterator)) { - buf = (char *) new RuleBasedBreakIterator; - if (buf == 0) { + // Not enough room in the caller-supplied buffer. + // Do a plain-vanilla heap based clone and return that, along with + // a warning that the clone was allocated. + RuleBasedBreakIterator *clonedBI = new RuleBasedBreakIterator(*this); + if (clonedBI == 0) { status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + } else { + status = U_SAFECLONE_ALLOCATED_WARNING; } - status = U_SAFECLONE_ALLOCATED_WARNING; + return clonedBI; } // - // Clone the object. + // Clone the source BI into the caller-supplied buffer. // TODO: using an overloaded operator new to directly initialize the // copy in the user's buffer would be better, but it doesn't seem // to get along with namespaces. Investigate why. @@ -1309,17 +1491,15 @@ BreakIterator * RuleBasedBreakIterator::createBufferClone(void *stackBuffer, // RuleBasedBreakIterator localIter; // Empty break iterator, source for memcpy RuleBasedBreakIterator *clone = (RuleBasedBreakIterator *)buf; - uprv_memcpy(clone, &localIter, sizeof(RuleBasedBreakIterator)); // clone = empty, but initialized, iterator. - *clone = *this; // clone = the real one we want. - if (status != U_SAFECLONE_ALLOCATED_WARNING) { - clone->fBufferClone = TRUE; - } + uprv_memcpy(clone, &localIter, sizeof(RuleBasedBreakIterator)); // init C++ gorp, BreakIterator base class part + clone->init(); // Init RuleBasedBreakIterator part, (user default constructor) + *clone = *this; // clone = the real BI we want. + clone->fBufferClone = TRUE; // Flag to prevent deleting storage on close (From C code) return clone; } - //------------------------------------------------------------------------------- // // isDictionaryChar Return true if the category lookup for this char @@ -1330,16 +1510,324 @@ BreakIterator * RuleBasedBreakIterator::createBufferClone(void *stackBuffer, // break iterators. // //------------------------------------------------------------------------------- -UBool RuleBasedBreakIterator::isDictionaryChar(UChar32 c) { +/*UBool RuleBasedBreakIterator::isDictionaryChar(UChar32 c) { if (fData == NULL) { return FALSE; } uint16_t category; UTRIE_GET16(&fData->fTrie, c, category); return (category & 0x4000) != 0; +}*/ + + +//------------------------------------------------------------------------------- +// +// checkDictionary This function handles all processing of characters in +// the "dictionary" set. It will determine the appropriate +// course of action, and possibly set up a cache in the +// process. +// +//------------------------------------------------------------------------------- +int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, + int32_t endPos, + UBool reverse) { + // Reset the old break cache first. + uint32_t dictionaryCount = fDictionaryCharCount; + reset(); + + if (dictionaryCount <= 1 || (endPos - startPos) <= 1) { + return (reverse ? startPos : endPos); + } + + // Starting from the starting point, scan towards the proposed result, + // looking for the first dictionary character (which may be the one + // we're on, if we're starting in the middle of a range). + utext_setNativeIndex(fText, reverse ? endPos : startPos); + if (reverse) { + UTEXT_PREVIOUS32(fText); + } + + int32_t rangeStart = startPos; + int32_t rangeEnd = endPos; + + uint16_t category; + int32_t current; + UErrorCode status = U_ZERO_ERROR; + UStack breaks(status); + int32_t foundBreakCount = 0; + UChar32 c = utext_current32(fText); + + UTRIE_GET16(&fData->fTrie, c, category); + + // Is the character we're starting on a dictionary character? If so, we + // need to back up to include the entire run; otherwise the results of + // the break algorithm will differ depending on where we start. Since + // the result is cached and there is typically a non-dictionary break + // within a small number of words, there should be little performance impact. + if (category & 0x4000) { + if (reverse) { + do { + utext_next32(fText); // TODO: recast to work directly with postincrement. + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } while (c != U_SENTINEL && (category & 0x4000)); + // Back up to the last dictionary character + rangeEnd = (int32_t)UTEXT_GETNATIVEINDEX(fText); + if (c == U_SENTINEL) { + // c = fText->last32(); + // TODO: why was this if needed? + c = UTEXT_PREVIOUS32(fText); + } + else { + c = UTEXT_PREVIOUS32(fText); + } + } + else { + do { + c = UTEXT_PREVIOUS32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + while (c != U_SENTINEL && (category & 0x4000)); + // Back up to the last dictionary character + if (c == U_SENTINEL) { + // c = fText->first32(); + c = utext_current32(fText); + } + else { + utext_next32(fText); + c = utext_current32(fText); + } + rangeStart = (int32_t)UTEXT_GETNATIVEINDEX(fText);; + } + UTRIE_GET16(&fData->fTrie, c, category); + } + + // Loop through the text, looking for ranges of dictionary characters. + // For each span, find the appropriate break engine, and ask it to find + // any breaks within the span. + // Note: we always do this in the forward direction, so that the break + // cache is built in the right order. + if (reverse) { + utext_setNativeIndex(fText, rangeStart); + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + while(U_SUCCESS(status)) { + while((current = (int32_t)UTEXT_GETNATIVEINDEX(fText)) < rangeEnd && (category & 0x4000) == 0) { + utext_next32(fText); // TODO: tweak for post-increment operation + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + if (current >= rangeEnd) { + break; + } + + // We now have a dictionary character. Get the appropriate language object + // to deal with it. + const LanguageBreakEngine *lbe = getLanguageBreakEngine(c); + + // Ask the language object if there are any breaks. It will leave the text + // pointer on the other side of its range, ready to search for the next one. + if (lbe != NULL) { + foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, FALSE, fBreakType, breaks); + } + + // Reload the loop variables for the next go-round + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + + // If we found breaks, build a new break cache. The first and last entries must + // be the original starting and ending position. + if (foundBreakCount > 0) { + int32_t totalBreaks = foundBreakCount; + if (startPos < breaks.elementAti(0)) { + totalBreaks += 1; + } + if (endPos > breaks.peeki()) { + totalBreaks += 1; + } + fCachedBreakPositions = (int32_t *)uprv_malloc(totalBreaks * sizeof(int32_t)); + if (fCachedBreakPositions != NULL) { + int32_t out = 0; + fNumCachedBreakPositions = totalBreaks; + if (startPos < breaks.elementAti(0)) { + fCachedBreakPositions[out++] = startPos; + } + for (int32_t i = 0; i < foundBreakCount; ++i) { + fCachedBreakPositions[out++] = breaks.elementAti(i); + } + if (endPos > fCachedBreakPositions[out-1]) { + fCachedBreakPositions[out] = endPos; + } + // If there are breaks, then by definition, we are replacing the original + // proposed break by one of the breaks we found. Use following() and + // preceding() to do the work. They should never recurse in this case. + if (reverse) { + return preceding(endPos - 1); + } + else { + return following(startPos); + } + } + // If the allocation failed, just fall through to the "no breaks found" case. + } + + // If we get here, there were no language-based breaks. Set the text pointer + // to the original proposed break. + utext_setNativeIndex(fText, reverse ? startPos : endPos); + return (reverse ? startPos : endPos); +} + +static UStack *gLanguageBreakFactories = NULL; + +U_NAMESPACE_END + +// defined in ucln_cmn.h + +/** + * Release all static memory held by breakiterator. + */ +U_CDECL_BEGIN +static UBool U_CALLCONV breakiterator_cleanup_dict(void) { + if (gLanguageBreakFactories) { + delete gLanguageBreakFactories; + gLanguageBreakFactories = NULL; + } + return TRUE; } +U_CDECL_END +U_CDECL_BEGIN +static void U_CALLCONV _deleteFactory(void *obj) { + delete (LanguageBreakFactory *) obj; +} +U_CDECL_END +U_NAMESPACE_BEGIN +static const LanguageBreakEngine* +getLanguageBreakEngineFromFactory(UChar32 c, int32_t breakType) +{ + UBool needsInit; + UErrorCode status = U_ZERO_ERROR; + umtx_lock(NULL); + needsInit = (UBool)(gLanguageBreakFactories == NULL); + umtx_unlock(NULL); + + if (needsInit) { + UStack *factories = new UStack(_deleteFactory, NULL, status); + if (U_SUCCESS(status)) { + ICULanguageBreakFactory *builtIn = new ICULanguageBreakFactory(status); + factories->push(builtIn, status); +#ifdef U_LOCAL_SERVICE_HOOK + LanguageBreakFactory *extra = (LanguageBreakFactory *)uprv_svc_hook("languageBreakFactory", &status); + if (extra != NULL) { + factories->push(extra, status); + } +#endif + } + umtx_lock(NULL); + if (gLanguageBreakFactories == NULL) { + gLanguageBreakFactories = factories; + factories = NULL; + ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR_DICT, breakiterator_cleanup_dict); + } + umtx_unlock(NULL); + delete factories; + } + + if (gLanguageBreakFactories == NULL) { + return NULL; + } + + int32_t i = gLanguageBreakFactories->size(); + const LanguageBreakEngine *lbe = NULL; + while (--i >= 0) { + LanguageBreakFactory *factory = (LanguageBreakFactory *)(gLanguageBreakFactories->elementAt(i)); + lbe = factory->getEngineFor(c, breakType); + if (lbe != NULL) { + break; + } + } + return lbe; +} + + +//------------------------------------------------------------------------------- +// +// getLanguageBreakEngine Find an appropriate LanguageBreakEngine for the +// the characer c. +// +//------------------------------------------------------------------------------- +const LanguageBreakEngine * +RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { + const LanguageBreakEngine *lbe = NULL; + UErrorCode status = U_ZERO_ERROR; + + if (fLanguageBreakEngines == NULL) { + fLanguageBreakEngines = new UStack(status); + if (U_FAILURE(status)) { + delete fLanguageBreakEngines; + fLanguageBreakEngines = 0; + return NULL; + } + } + + int32_t i = fLanguageBreakEngines->size(); + while (--i >= 0) { + lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i)); + if (lbe->handles(c, fBreakType)) { + return lbe; + } + } + + // No existing dictionary took the character. See if a factory wants to + // give us a new LanguageBreakEngine for this character. + lbe = getLanguageBreakEngineFromFactory(c, fBreakType); + + // If we got one, use it and push it on our stack. + if (lbe != NULL) { + fLanguageBreakEngines->push((void *)lbe, status); + // Even if we can't remember it, we can keep looking it up, so + // return it even if the push fails. + return lbe; + } + + // No engine is forthcoming for this character. Add it to the + // reject set. Create the reject break engine if needed. + if (fUnhandledBreakEngine == NULL) { + fUnhandledBreakEngine = new UnhandledEngine(status); + if (U_SUCCESS(status) && fUnhandledBreakEngine == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + // Put it last so that scripts for which we have an engine get tried + // first. + fLanguageBreakEngines->insertElementAt(fUnhandledBreakEngine, 0, status); + // If we can't insert it, or creation failed, get rid of it + if (U_FAILURE(status)) { + delete fUnhandledBreakEngine; + fUnhandledBreakEngine = 0; + return NULL; + } + } + + // Tell the reject engine about the character; at its discretion, it may + // add more than just the one character. + fUnhandledBreakEngine->handleCharacter(c, fBreakType); + + return fUnhandledBreakEngine; +} + + + +/*int32_t RuleBasedBreakIterator::getBreakType() const { + return fBreakType; +}*/ + +void RuleBasedBreakIterator::setBreakType(int32_t type) { + fBreakType = type; + reset(); +} U_NAMESPACE_END diff --git a/icuSources/common/rbbicst.pl b/icuSources/common/rbbicst.pl index 704c52f0..3537892c 100644 --- a/icuSources/common/rbbicst.pl +++ b/icuSources/common/rbbicst.pl @@ -1,412 +1,453 @@ -#************************************************************************** -# Copyright (C) 2002-2004 International Business Machines Corporation * -# and others. All rights reserved. * -#************************************************************************** -# -# rbbicst Compile the RBBI rule paser state table data into initialized C data. -# Usage: -# cd icu/source/common -# perl rbbicst.pl [-j] < rbbirpt.txt > rbbirpt.h -# -# The output file, rbbrpt.h, is included by some of the .cpp rbbi -# implementation files. This perl script is NOT run as part -# of a normal ICU build. It is run by hand when needed, and the -# rbbirpt.h generated file is put back into cvs. -# -# See rbbirpt.h for a description of the input format for this script. -# - -if ($ARGV[0] eq "-j") { - $javaOutput = 1; - shift @ARGV; -} - - -$num_states = 1; # Always the state number for the line being compiled. -$line_num = 0; # The line number in the input file. - -$states{"pop"} = 255; # Add the "pop" to the list of defined state names. - # This prevents any state from being labelled with "pop", - # and resolves references to "pop" in the next state field. - -line_loop: while (<>) { - chomp(); - $line = $_; - @fields = split(); - $line_num++; - - # Remove # comments, which are any fields beginning with a #, plus all - # that follow on the line. - for ($i=0; $i<@fields; $i++) { - if ($fields[$i] =~ /^#/) { - @fields = @fields[0 .. $i-1]; - last; - } - } - # ignore blank lines, and those with no fields left after stripping comments.. - if (@fields == 0) { - next; - } - - # - # State Label: handling. - # Does the first token end with a ":"? If so, it's the name of a state. - # Put in a hash, together with the current state number, - # so that we can later look up the number from the name. - # - if (@fields[0] =~ /.*:$/) { - $state_name = @fields[0]; - $state_name =~ s/://; # strip off the colon from the state name. - - if ($states{$state_name} != 0) { - print " rbbicst: at line $line-num duplicate definition of state $state_name\n"; - } - $states{$state_name} = $num_states; - $stateNames[$num_states] = $state_name; - - # if the label was the only thing on this line, go on to the next line, - # otherwise assume that a state definition is on the same line and fall through. - if (@fields == 1) { - next line_loop; - } - shift @fields; # shift off label field in preparation - # for handling the rest of the line. - } - - # - # State Transition line. - # syntax is this, - # character [n] target-state [^push-state] [function-name] - # where - # [something] is an optional something - # character is either a single quoted character e.g. '[' - # or a name of a character class, e.g. white_space - # - - $state_line_num[$num_states] = $line_num; # remember line number with each state - # so we can make better error messages later. - # - # First field, character class or literal character for this transition. - # - if ($fields[0] =~ /^'.'$/) { - # We've got a quoted literal character. - $state_literal_chars[$num_states] = $fields[0]; - $state_literal_chars[$num_states] =~ s/'//g; - } else { - # We've got the name of a character class. - $state_char_class[$num_states] = $fields[0]; - if ($fields[0] =~ /[\W]/) { - print " rbbicsts: at line $line_num, bad character literal or character class name.\n"; - print " scanning $fields[0]\n"; - exit(-1); - } - } - shift @fields; - - # - # do the 'n' flag - # - $state_flag[$num_states] = "FALSE"; - if ($fields[0] eq "n") { - $state_flag[$num_states] = "TRUE"; - shift @fields; - } - - # - # do the destination state. - # - $state_dest_state[$num_states] = $fields[0]; - if ($fields[0] eq "") { - print " rbbicsts: at line $line_num, destination state missing.\n"; - exit(-1); - } - shift @fields; - - # - # do the push state, if present. - # - if ($fields[0] =~ /^\^/) { - $fields[0] =~ s/^\^//; - $state_push_state[$num_states] = $fields[0]; - if ($fields[0] eq "" ) { - print " rbbicsts: at line $line_num, expected state after ^ (no spaces).\n"; - exit(-1); - } - shift @fields; - } - - # - # Lastly, do the optional action name. - # - if ($fields[0] ne "") { - $state_func_name[$num_states] = $fields[0]; - shift @fields; - } - - # - # There should be no fields left on the line at this point. - # - if (@fields > 0) { - print " rbbicsts: at line $line_num, unexpected extra stuff on input line.\n"; - print " scanning $fields[0]\n"; - } - $num_states++; -} - -# -# We've read in the whole file, now go back and output the -# C source code for the state transition table. -# -# We read all states first, before writing anything, so that the state numbers -# for the destination states are all available to be written. -# - -# -# Make hashes for the names of the character classes and -# for the names of the actions that appeared. -# -for ($state=1; $state < $num_states; $state++) { - if ($state_char_class[$state] ne "") { - if ($charClasses{$state_char_class[$state]} == 0) { - $charClasses{$state_char_class[$state]} = 1; - } - } - if ($state_func_name[$state] eq "") { - $state_func_name[$state] = "doNOP"; - } - if ($actions{$state_action_name[$state]} == 0) { - $actions{$state_func_name[$state]} = 1; - } -} - -# -# Check that all of the destination states have been defined -# -# -$states{"exit"} = 0; # Predefined state name, terminates state machine. -for ($state=1; $state<$num_states; $state++) { - if ($states{$state_dest_state[$state]} == 0 && $state_dest_state[$state] ne "exit") { - print "Error at line $state_line_num[$state]: target state \"$state_dest_state[$state]\" is not defined.\n"; - $errors++; - } - if ($state_push_state[$state] ne "" && $states{$state_push_state[$state]} == 0) { - print "Error at line $state_line_num[$state]: target state \"$state_push_state[$state]\" is not defined.\n"; - $errors++; - } -} - -die if ($errors>0); - -my ($sec, $min, $hour, , $day, $mon, $year, $wday, $yday, $isdst) = localtime; -$year += 1900; - -if ($javaOutput) { - print "/*\n"; - print " *******************************************************************************\n"; - print " * Copyright (C) 2003-$year,\n"; - print " * International Business Machines Corporation and others. All Rights Reserved.\n"; - print " *******************************************************************************\n"; - print " */\n"; - print " \n"; - print "package com.ibm.icu.text;\n"; - print " \n"; - print "/**\n"; - print " * Generated Java File. Do not edit by hand.\n"; - print " * This file contains the state table for the ICU Rule Based Break Iterator\n"; - print " * rule parser.\n"; - print " * It is generated by the Perl script \"rbbicst.pl\" from\n"; - print " * the rule parser state definitions file \"rbbirpt.txt\".\n"; - print " *\n"; - print " */\n"; - - print "public class RuleBasedBreakIteratorStateTable\n"; - print "{\n"; - - # - # Emit the constants for the actions to be performed. - # - $n = 1; - foreach $act (keys %actions) { - print " public static final int $act = $n;\n"; - $n++; - } - print " \n"; - # - # emit the state transition table - # - print " public static final String[] gRuleParseStateTable = {\n"; - printf(" \"\\u%04.4x\\u%04.4x\\u%04.4x\\u%04.4x\\u%04.4x\"\n", doNOP, 0, 0, 0, 1); - for ($state=1; $state < $num_states; $state++) { - printf(" , \"\\u%04.4x", $state_func_name[$state]); - # print " , {$state_func_name[$state],"; - if ($state_literal_chars[$state] ne "") { - printf("\\u%04.4x", $state_func_name[$state]); - }else { - printf("\\u%04.4x", $charClasses{$state_char_class[$state]}); - } - printf("\\u%04.4x", $states{$state_dest_state[$state]}); - - # The push-state field is optional. If omitted, fill field with a zero, which flags - # the state machine that there is no push state. - if ($state_push_state[$state] eq "") { - print "\\u0000"; - } else { - printf("\\u%04.4x", $states{$state_push_state[$state]}); - } - printf("\\u%04.4x", $state_flag[$state]); - - # For the first row of each state, append the state name. - # Used for debugging only. - if ($stateNames[$state] ne "") { - printf("%-20s", $stateNames[$state]."\""); - } else { - printf("%-20s", "\""); - } - - # Put out a C++ comment showing the number (index) of this state row, - print " // $state "; - print "\n"; - }; - print " };\n"; - print "}\n"; -} -else -{ - # - # C++ Output ... - # - - - print "//---------------------------------------------------------------------------------\n"; - print "//\n"; - print "// Generated Header File. Do not edit by hand.\n"; - print "// This file contains the state table for the ICU Rule Based Break Iterator\n"; - print "// rule parser.\n"; - print "// It is generated by the Perl script \"rbbicst.pl\" from\n"; - print "// the rule parser state definitions file \"rbbirpt.txt\".\n"; - print "//\n"; - print "// Copyright (C) 2002-$year International Business Machines Corporation \n"; - print "// and others. All rights reserved. \n"; - print "//\n"; - print "//---------------------------------------------------------------------------------\n"; - print "#ifndef RBBIRPT_H\n"; - print "#define RBBIRPT_H\n"; - print "\n"; - print "U_NAMESPACE_BEGIN\n"; - - # - # Emit the constants for indicies of Unicode Sets - # Define one constant for each of the character classes encountered. - # At the same time, store the index corresponding to the set name back into hash. - # - print "//\n"; - print "// Character classes for RBBI rule scanning.\n"; - print "//\n"; - $i = 128; # State Table values for Unicode char sets range from 128-250. - # Sets "default", "escaped", etc. get special handling. - # They have no corresponding UnicodeSet object in the state machine, - # but are handled by special case code. So we emit no reference - # to a UnicodeSet object to them here. - foreach $setName (keys %charClasses) { - if ($setName eq "default") { - $charClasses{$setName} = 255;} - elsif ($setName eq "escaped") { - $charClasses{$setName} = 254;} - elsif ($setName eq "escapedP") { - $charClasses{$setName} = 253;} - elsif ($setName eq "eof") { - $charClasses{$setName} = 252;} - else { - # Normal character class. Fill in array with a ptr to the corresponding UnicodeSet in the state machine. - print " static const uint8_t kRuleSet_$setName = $i;\n"; - $charClasses{$setName} = $i; - $i++; - } - } - print "\n\n"; - - # - # Emit the enum for the actions to be performed. - # - print "enum RBBI_RuleParseAction {\n"; - foreach $act (keys %actions) { - print " $act,\n"; - } - print " rbbiLastAction};\n\n"; - - # - # Emit the struct definition for transtion table elements. - # - print "//-------------------------------------------------------------------------------\n"; - print "//\n"; - print "// RBBIRuleTableEl represents the structure of a row in the transition table\n"; - print "// for the rule parser state machine.\n"; - print "//-------------------------------------------------------------------------------\n"; - print "struct RBBIRuleTableEl {\n"; - print " RBBI_RuleParseAction fAction;\n"; - print " uint8_t fCharClass; // 0-127: an individual ASCII character\n"; - print " // 128-255: character class index\n"; - print " uint8_t fNextState; // 0-250: normal next-stat numbers\n"; - print " // 255: pop next-state from stack.\n"; - print " uint8_t fPushState;\n"; - print " UBool fNextChar;\n"; - print "};\n\n"; - - # - # emit the state transition table - # - print "static const struct RBBIRuleTableEl gRuleParseStateTable[] = {\n"; - print " {doNOP, 0, 0, 0, TRUE}\n"; # State 0 is a dummy. Real states start with index = 1. - for ($state=1; $state < $num_states; $state++) { - print " , {$state_func_name[$state],"; - if ($state_literal_chars[$state] ne "") { - $c = $state_literal_chars[$state]; - printf(" %d /* $c */,", ord($c)); # use numeric value, so EBCDIC machines are ok. - }else { - print " $charClasses{$state_char_class[$state]},"; - } - print " $states{$state_dest_state[$state]},"; - - # The push-state field is optional. If omitted, fill field with a zero, which flags - # the state machine that there is no push state. - if ($state_push_state[$state] eq "") { - print "0, "; - } else { - print " $states{$state_push_state[$state]},"; - } - print " $state_flag[$state]} "; - - # Put out a C++ comment showing the number (index) of this state row, - # and, if this is the first row of the table for this state, the state name. - print " // $state "; - if ($stateNames[$state] ne "") { - print " $stateNames[$state]"; - } - print "\n"; - }; - print " };\n"; - - - # - # emit a mapping array from state numbers to state names. - # - # This array is used for producing debugging output from the rule parser. - # - print "#ifdef RBBI_DEBUG\n"; - print "static const char * const RBBIRuleStateNames[] = {"; - for ($state=0; $state<$num_states; $state++) { - if ($stateNames[$state] ne "") { - print " \"$stateNames[$state]\",\n"; - } else { - print " 0,\n"; - } - } - print " 0};\n"; - print "#endif\n\n"; - - print "U_NAMESPACE_END\n"; - print "#endif\n"; -} - - - +#************************************************************************** +# Copyright (C) 2002-2005 International Business Machines Corporation * +# and others. All rights reserved. * +#************************************************************************** +# +# rbbicst Compile the RBBI rule paser state table data into initialized C data. +# Usage: +# cd icu/source/common +# perl rbbicst.pl < rbbirpt.txt > rbbirpt.h +# perl rbbicst.pl -j < rbbirpt.txt > RBBIRuleParseTable.java +# +# The output file, rbbrpt.h, is included by some of the .cpp rbbi +# implementation files. This perl script is NOT run as part +# of a normal ICU build. It is run by hand when needed, and the +# rbbirpt.h generated file is put back into cvs. +# +# See rbbirpt.txt for a description of the input format for this script. +# + +if ($ARGV[0] eq "-j") { + $javaOutput = 1; + shift @ARGV; +} + + +$num_states = 1; # Always the state number for the line being compiled. +$line_num = 0; # The line number in the input file. + +$states{"pop"} = 255; # Add the "pop" to the list of defined state names. + # This prevents any state from being labelled with "pop", + # and resolves references to "pop" in the next state field. + +line_loop: while (<>) { + chomp(); + $line = $_; + @fields = split(); + $line_num++; + + # Remove # comments, which are any fields beginning with a #, plus all + # that follow on the line. + for ($i=0; $i<@fields; $i++) { + if ($fields[$i] =~ /^#/) { + @fields = @fields[0 .. $i-1]; + last; + } + } + # ignore blank lines, and those with no fields left after stripping comments.. + if (@fields == 0) { + next; + } + + # + # State Label: handling. + # Does the first token end with a ":"? If so, it's the name of a state. + # Put in a hash, together with the current state number, + # so that we can later look up the number from the name. + # + if (@fields[0] =~ /.*:$/) { + $state_name = @fields[0]; + $state_name =~ s/://; # strip off the colon from the state name. + + if ($states{$state_name} != 0) { + print " rbbicst: at line $line-num duplicate definition of state $state_name\n"; + } + $states{$state_name} = $num_states; + $stateNames[$num_states] = $state_name; + + # if the label was the only thing on this line, go on to the next line, + # otherwise assume that a state definition is on the same line and fall through. + if (@fields == 1) { + next line_loop; + } + shift @fields; # shift off label field in preparation + # for handling the rest of the line. + } + + # + # State Transition line. + # syntax is this, + # character [n] target-state [^push-state] [function-name] + # where + # [something] is an optional something + # character is either a single quoted character e.g. '[' + # or a name of a character class, e.g. white_space + # + + $state_line_num[$num_states] = $line_num; # remember line number with each state + # so we can make better error messages later. + # + # First field, character class or literal character for this transition. + # + if ($fields[0] =~ /^'.'$/) { + # We've got a quoted literal character. + $state_literal_chars[$num_states] = $fields[0]; + $state_literal_chars[$num_states] =~ s/'//g; + } else { + # We've got the name of a character class. + $state_char_class[$num_states] = $fields[0]; + if ($fields[0] =~ /[\W]/) { + print " rbbicsts: at line $line_num, bad character literal or character class name.\n"; + print " scanning $fields[0]\n"; + exit(-1); + } + } + shift @fields; + + # + # do the 'n' flag + # + $state_flag[$num_states] = $javaOutput? "false" : "FALSE"; + if ($fields[0] eq "n") { + $state_flag[$num_states] = $javaOutput? "true": "TRUE"; + shift @fields; + } + + # + # do the destination state. + # + $state_dest_state[$num_states] = $fields[0]; + if ($fields[0] eq "") { + print " rbbicsts: at line $line_num, destination state missing.\n"; + exit(-1); + } + shift @fields; + + # + # do the push state, if present. + # + if ($fields[0] =~ /^\^/) { + $fields[0] =~ s/^\^//; + $state_push_state[$num_states] = $fields[0]; + if ($fields[0] eq "" ) { + print " rbbicsts: at line $line_num, expected state after ^ (no spaces).\n"; + exit(-1); + } + shift @fields; + } + + # + # Lastly, do the optional action name. + # + if ($fields[0] ne "") { + $state_func_name[$num_states] = $fields[0]; + shift @fields; + } + + # + # There should be no fields left on the line at this point. + # + if (@fields > 0) { + print " rbbicsts: at line $line_num, unexpected extra stuff on input line.\n"; + print " scanning $fields[0]\n"; + } + $num_states++; +} + +# +# We've read in the whole file, now go back and output the +# C source code for the state transition table. +# +# We read all states first, before writing anything, so that the state numbers +# for the destination states are all available to be written. +# + +# +# Make hashes for the names of the character classes and +# for the names of the actions that appeared. +# +for ($state=1; $state < $num_states; $state++) { + if ($state_char_class[$state] ne "") { + if ($charClasses{$state_char_class[$state]} == 0) { + $charClasses{$state_char_class[$state]} = 1; + } + } + if ($state_func_name[$state] eq "") { + $state_func_name[$state] = "doNOP"; + } + if ($actions{$state_action_name[$state]} == 0) { + $actions{$state_func_name[$state]} = 1; + } +} + +# +# Check that all of the destination states have been defined +# +# +$states{"exit"} = 0; # Predefined state name, terminates state machine. +for ($state=1; $state<$num_states; $state++) { + if ($states{$state_dest_state[$state]} == 0 && $state_dest_state[$state] ne "exit") { + print "Error at line $state_line_num[$state]: target state \"$state_dest_state[$state]\" is not defined.\n"; + $errors++; + } + if ($state_push_state[$state] ne "" && $states{$state_push_state[$state]} == 0) { + print "Error at line $state_line_num[$state]: target state \"$state_push_state[$state]\" is not defined.\n"; + $errors++; + } +} + +die if ($errors>0); + +# +# Assign numbers to each of the character classes classes used. +# Sets are numbered from 128 - 250 +# The values 0-127 in the state table are used for matching +# individual ASCII characters (the only thing that can appear in the rules.) +# The "set" names appearing in the code below (default, etc.) need special +# handling because they do not correspond to a normal set of characters, +# but trigger special handling by code in the state machine. +# +$i = 128; +foreach $setName (sort keys %charClasses) { + if ($setName eq "default") { + $charClasses{$setName} = 255;} + elsif ($setName eq "escaped") { + $charClasses{$setName} = 254;} + elsif ($setName eq "escapedP") { + $charClasses{$setName} = 253;} + elsif ($setName eq "eof") { + $charClasses{$setName} = 252;} + else { + # Normal (single) character class. Number them. + $charClasses{$setName} = $i; + $i++; + } +} + + +my ($sec, $min, $hour, , $day, $mon, $year, $wday, $yday, $isdst) = localtime; +$year += 1900; + +if ($javaOutput) { + print "/*\n"; + print " *******************************************************************************\n"; + print " * Copyright (C) 2003-$year,\n"; + print " * International Business Machines Corporation and others. All Rights Reserved.\n"; + print " *******************************************************************************\n"; + print " */\n"; + print " \n"; + print "package com.ibm.icu.text;\n"; + print " \n"; + print "/**\n"; + print " * Generated Java File. Do not edit by hand.\n"; + print " * This file contains the state table for the ICU Rule Based Break Iterator\n"; + print " * rule parser.\n"; + print " * It is generated by the Perl script \"rbbicst.pl\" from\n"; + print " * the rule parser state definitions file \"rbbirpt.txt\".\n"; + print " * \@internal \n"; + print " *\n"; + print " */\n"; + + print "class RBBIRuleParseTable\n"; + print "{\n"; + + # + # Emit the constants for the actions to be performed. + # + $n = 1; + foreach $act (sort keys %actions) { + print " static final short $act = $n;\n"; + $n++; + } + print " \n"; + + # + # Emit constants for char class names + # + foreach $setName (sort keys %charClasses) { + print " static final short kRuleSet_$setName = $charClasses{$setName};\n"; + } + print "\n\n"; + + + print " static class RBBIRuleTableElement { \n"; + print " short fAction; \n"; + print " short fCharClass; \n"; + print " short fNextState; \n"; + print " short fPushState; \n"; + print " boolean fNextChar; \n"; + print " String fStateName; \n"; + print " RBBIRuleTableElement(short a, int cc, int ns, int ps, boolean nc, String sn) { \n"; + print " fAction = a; \n"; + print " fCharClass = (short)cc; \n"; + print " fNextState = (short)ns; \n"; + print " fPushState = (short)ps; \n"; + print " fNextChar = nc; \n"; + print " fStateName = sn; \n"; + print " } \n"; + print " }; \n"; + print " \n"; + + + print " static RBBIRuleTableElement[] gRuleParseStateTable = { \n "; + print " new RBBIRuleTableElement(doNOP, 0, 0,0, true, null ) // 0 \n"; #output the unused state 0. + for ($state=1; $state < $num_states; $state++) { + print " , new RBBIRuleTableElement($state_func_name[$state],"; + if ($state_literal_chars[$state] ne "") { + $c = $state_literal_chars[$state]; + print("'$c', "); + }else { + print " $charClasses{$state_char_class[$state]},"; + } + print " $states{$state_dest_state[$state]},"; + + # The push-state field is optional. If omitted, fill field with a zero, which flags + # the state machine that there is no push state. + if ($state_push_state[$state] eq "") { + print "0, "; + } else { + print " $states{$state_push_state[$state]},"; + } + print " $state_flag[$state], "; + + # if this is the first row of the table for this state, put out the state name. + if ($stateNames[$state] ne "") { + print " \"$stateNames[$state]\") "; + } else { + print " null ) "; + } + + # Put out a comment showing the number (index) of this state row, + print " // $state "; + print "\n"; + } + print " };\n"; + + print "}; \n"; + +} +else +{ + # + # C++ Output ... + # + + + print "//---------------------------------------------------------------------------------\n"; + print "//\n"; + print "// Generated Header File. Do not edit by hand.\n"; + print "// This file contains the state table for the ICU Rule Based Break Iterator\n"; + print "// rule parser.\n"; + print "// It is generated by the Perl script \"rbbicst.pl\" from\n"; + print "// the rule parser state definitions file \"rbbirpt.txt\".\n"; + print "//\n"; + print "// Copyright (C) 2002-$year International Business Machines Corporation \n"; + print "// and others. All rights reserved. \n"; + print "//\n"; + print "//---------------------------------------------------------------------------------\n"; + print "#ifndef RBBIRPT_H\n"; + print "#define RBBIRPT_H\n"; + print "\n"; + print "U_NAMESPACE_BEGIN\n"; + + # + # Emit the constants for indicies of Unicode Sets + # Define one constant for each of the character classes encountered. + # At the same time, store the index corresponding to the set name back into hash. + # + print "//\n"; + print "// Character classes for RBBI rule scanning.\n"; + print "//\n"; + foreach $setName (sort keys %charClasses) { + if ($charClasses{$setName} < 250) { + # Normal character class. + print " static const uint8_t kRuleSet_$setName = $charClasses{$setName};\n"; + } + } + print "\n\n"; + + # + # Emit the enum for the actions to be performed. + # + print "enum RBBI_RuleParseAction {\n"; + foreach $act (sort keys %actions) { + print " $act,\n"; + } + print " rbbiLastAction};\n\n"; + + # + # Emit the struct definition for transtion table elements. + # + print "//-------------------------------------------------------------------------------\n"; + print "//\n"; + print "// RBBIRuleTableEl represents the structure of a row in the transition table\n"; + print "// for the rule parser state machine.\n"; + print "//-------------------------------------------------------------------------------\n"; + print "struct RBBIRuleTableEl {\n"; + print " RBBI_RuleParseAction fAction;\n"; + print " uint8_t fCharClass; // 0-127: an individual ASCII character\n"; + print " // 128-255: character class index\n"; + print " uint8_t fNextState; // 0-250: normal next-stat numbers\n"; + print " // 255: pop next-state from stack.\n"; + print " uint8_t fPushState;\n"; + print " UBool fNextChar;\n"; + print "};\n\n"; + + # + # emit the state transition table + # + print "static const struct RBBIRuleTableEl gRuleParseStateTable[] = {\n"; + print " {doNOP, 0, 0, 0, TRUE}\n"; # State 0 is a dummy. Real states start with index = 1. + for ($state=1; $state < $num_states; $state++) { + print " , {$state_func_name[$state],"; + if ($state_literal_chars[$state] ne "") { + $c = $state_literal_chars[$state]; + printf(" %d /* $c */,", ord($c)); # use numeric value, so EBCDIC machines are ok. + }else { + print " $charClasses{$state_char_class[$state]},"; + } + print " $states{$state_dest_state[$state]},"; + + # The push-state field is optional. If omitted, fill field with a zero, which flags + # the state machine that there is no push state. + if ($state_push_state[$state] eq "") { + print "0, "; + } else { + print " $states{$state_push_state[$state]},"; + } + print " $state_flag[$state]} "; + + # Put out a C++ comment showing the number (index) of this state row, + # and, if this is the first row of the table for this state, the state name. + print " // $state "; + if ($stateNames[$state] ne "") { + print " $stateNames[$state]"; + } + print "\n"; + }; + print " };\n"; + + + # + # emit a mapping array from state numbers to state names. + # + # This array is used for producing debugging output from the rule parser. + # + print "#ifdef RBBI_DEBUG\n"; + print "static const char * const RBBIRuleStateNames[] = {"; + for ($state=0; $state<$num_states; $state++) { + if ($stateNames[$state] ne "") { + print " \"$stateNames[$state]\",\n"; + } else { + print " 0,\n"; + } + } + print " 0};\n"; + print "#endif\n\n"; + + print "U_NAMESPACE_END\n"; + print "#endif\n"; +} + + + diff --git a/icuSources/common/rbbidata.cpp b/icuSources/common/rbbidata.cpp index aa33c610..360290bd 100644 --- a/icuSources/common/rbbidata.cpp +++ b/icuSources/common/rbbidata.cpp @@ -1,6 +1,6 @@ /* *************************************************************************** -* Copyright (C) 1999-2004 International Business Machines Corporation * +* Copyright (C) 1999-2005 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** */ @@ -69,8 +69,11 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { return; } fHeader = data; - if (fHeader->fMagic != 0xb1a0) { - status = U_BRK_INTERNAL_ERROR; + if (fHeader->fMagic != 0xb1a0 || + !(fHeader->fFormatVersion[0] == 3 || // ICU 3.4 + *(int32_t *)fHeader->fFormatVersion == 1)) // ICU 3.2 and earlier. + { + status = U_INVALID_FORMAT_ERROR; return; } @@ -234,7 +237,8 @@ void RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *tab #ifdef RBBI_DEBUG void RBBIDataWrapper::printData() { RBBIDebugPrintf("RBBI Data at %p\n", (void *)fHeader); - RBBIDebugPrintf(" Version = %d\n", fHeader->fVersion); + RBBIDebugPrintf(" Version = {%d %d %d %d}\n", fHeader->fFormatVersion[0], fHeader->fFormatVersion[1], + fHeader->fFormatVersion[2], fHeader->fFormatVersion[3]); RBBIDebugPrintf(" total length of data = %d\n", fHeader->fLength); RBBIDebugPrintf(" number of character categories = %d\n\n", fHeader->fCatCount); @@ -267,6 +271,10 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD if (status == NULL || U_FAILURE(*status)) { return 0; } + if(ds==NULL || inData==NULL || length<-1 || (length>0 && outData==NULL)) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } // // Check that the data header is for for break data. @@ -298,10 +306,16 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // // Get the RRBI Data Header, and check that it appears to be OK. // + // Note: ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually + // an int32_t with a value of 1. Starting with ICU 3.4, + // RBBI's fDataFormat matches the dataFormat field from the + // UDataInfo header, four int8_t bytes. The value is {3,1,0,0} + // const uint8_t *inBytes =(const uint8_t *)inData+headerSize; RBBIDataHeader *rbbiDH = (RBBIDataHeader *)inBytes; + UBool formatVersionOne = ds->readUInt32(*(int32_t *)rbbiDH->fFormatVersion) == 1; if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 || - ds->readUInt32(rbbiDH->fVersion) != 1 || + !(formatVersionOne || rbbiDH->fFormatVersion[0] == 3) || ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader)) { udata_printError(ds, "ubrk_swap(): RBBI Data header is invalid.\n"); @@ -312,7 +326,8 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // // Prefight operation? Just return the size // - int32_t totalSize = headerSize + ds->readUInt32(rbbiDH->fLength); + int32_t breakDataLength = ds->readUInt32(rbbiDH->fLength); + int32_t totalSize = headerSize + breakDataLength; if (length < 0) { return totalSize; } @@ -320,15 +335,12 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // // Check that length passed in is consistent with length from RBBI data header. // - if (length > 0) { - length -= headerSize; - if ((uint32_t)length < ds->readUInt32(rbbiDH->fLength)) { - udata_printError(ds, "ubrk_swap(): too few bytes (%d after ICU Data header) for break data.\n", - length); - *status=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (length < totalSize) { + udata_printError(ds, "ubrk_swap(): too few bytes (%d after ICU Data header) for break data.\n", + breakDataLength); + *status=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } - } // @@ -336,7 +348,9 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // we need to reference the header to locate the data, and an // inplace swap of the header leaves it unusable. // - uint8_t *outBytes = (uint8_t *)outData + headerSize; + uint8_t *outBytes = (uint8_t *)outData + headerSize; + RBBIDataHeader *outputDH = (RBBIDataHeader *)outBytes; + int32_t tableStartOffset; int32_t tableLength; @@ -346,7 +360,7 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // when originally created. Any unused space between items needs to be zero. // if (inBytes != outBytes) { - uprv_memset(outBytes, 0, length); + uprv_memset(outBytes, 0, breakDataLength); } // @@ -412,8 +426,16 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD ds->swapArray32(ds, inBytes+ds->readUInt32(rbbiDH->fStatusTable), ds->readUInt32(rbbiDH->fStatusTableLen), outBytes+ds->readUInt32(rbbiDH->fStatusTable), status); - // And, last, the header. All 32 bit values. - ds->swapArray32(ds, inBytes, sizeof(RBBIDataHeader), outBytes, status); + // And, last, the header. + // For the old version one format, the entire header consists of int32_t values. + // For the newer formats, the fDataFormat field is an array of four bytes. + // Swap the whole thing as int32_t, then, for the newer format, re-swap the one field. + // + ds->swapArray32(ds, inBytes, sizeof(RBBIDataHeader), outBytes, status); + if (formatVersionOne == FALSE) { + ds->swapArray32(ds, outputDH->fFormatVersion, 4, outputDH->fFormatVersion, status); + } + return totalSize; } diff --git a/icuSources/common/rbbidata.h b/icuSources/common/rbbidata.h index fda2a79d..7ba1db05 100644 --- a/icuSources/common/rbbidata.h +++ b/icuSources/common/rbbidata.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -57,17 +57,22 @@ U_NAMESPACE_BEGIN * The following structs map exactly onto the raw data from ICU common data file. */ struct RBBIDataHeader { - uint32_t fMagic; /* == 0xbla0 */ - uint32_t fVersion; /* == 1 */ - uint32_t fLength; /* Total length in bytes of this RBBI Data, */ - /* including all sections, not just the header. */ - uint32_t fCatCount; /* Number of character categories. */ - - /* */ - /* Offsets and sizes of each of the subsections within the RBBI data. */ - /* All offsets are bytes from the start of the RBBIDataHeader. */ - /* All sizes are in bytes. */ - /* */ + uint32_t fMagic; /* == 0xbla0 */ + uint8_t fFormatVersion[4]; /* Data Format. Same as the value in struct UDataInfo */ + /* if there is one associated with this data. */ + /* (version originates in rbbi, is copied to UDataInfo) */ + /* For ICU 3.2 and earlier, this field was */ + /* uint32_t fVersion */ + /* with a value of 1. */ + uint32_t fLength; /* Total length in bytes of this RBBI Data, */ + /* including all sections, not just the header. */ + uint32_t fCatCount; /* Number of character categories. */ + + /* */ + /* Offsets and sizes of each of the subsections within the RBBI data. */ + /* All offsets are bytes from the start of the RBBIDataHeader. */ + /* All sizes are in bytes. */ + /* */ uint32_t fFTable; /* forward state transition table. */ uint32_t fFTableLen; uint32_t fRTable; /* Offset to the reverse state transition table. */ @@ -126,7 +131,8 @@ struct RBBIStateTable { }; typedef enum { - RBBI_LOOKAHEAD_HARD_BREAK = 1 + RBBI_LOOKAHEAD_HARD_BREAK = 1, + RBBI_BOF_REQUIRED = 2 } RBBIStateTableFlags; diff --git a/icuSources/common/rbbinode.cpp b/icuSources/common/rbbinode.cpp index b873f218..af467b6d 100644 --- a/icuSources/common/rbbinode.cpp +++ b/icuSources/common/rbbinode.cpp @@ -1,6 +1,6 @@ /* *************************************************************************** -* Copyright (C) 2002-2003 International Business Machines Corporation * +* Copyright (C) 2002-2006 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** */ @@ -33,8 +33,9 @@ U_NAMESPACE_BEGIN -int RBBINode::gLastSerial = 0; - +#ifdef RBBI_DEBUG +static int gLastSerial = 0; +#endif //------------------------------------------------------------------------- @@ -43,7 +44,9 @@ int RBBINode::gLastSerial = 0; // //------------------------------------------------------------------------- RBBINode::RBBINode(NodeType t) : UMemory() { +#ifdef RBBI_DEBUG fSerialNum = ++gLastSerial; +#endif fType = t; fParent = NULL; fLeftChild = NULL; @@ -69,7 +72,9 @@ RBBINode::RBBINode(NodeType t) : UMemory() { RBBINode::RBBINode(const RBBINode &other) : UMemory(other) { +#ifdef RBBI_DEBUG fSerialNum = ++gLastSerial; +#endif fType = other.fType; fParent = NULL; fLeftChild = NULL; diff --git a/icuSources/common/rbbinode.h b/icuSources/common/rbbinode.h index 68286792..0cbf6a71 100644 --- a/icuSources/common/rbbinode.h +++ b/icuSources/common/rbbinode.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2001-2003, International Business Machines Corporation and + * Copyright (c) 2001-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -96,20 +96,15 @@ class RBBINode : public UMemory { #ifdef RBBI_DEBUG void printNode(); void printTree(UBool withHeading); -#else - // Do-nothing inline functions for non-debug builds. Can't make empty defines for member - // functions - they won't compile at the call sites. - int fakeField; - #define printNode() fakeField=0; - #define printTree(withHeading) fakeField=0; #endif private: RBBINode &operator = (const RBBINode &other); // No defs. UBool operator == (const RBBINode &other); // Private, so these functions won't accidently be used. +#ifdef RBBI_DEBUG int fSerialNum; // Debugging aids. - static int gLastSerial; +#endif }; #ifdef RBBI_DEBUG diff --git a/icuSources/common/rbbirb.cpp b/icuSources/common/rbbirb.cpp index 273ef9d1..a3d32c39 100644 --- a/icuSources/common/rbbirb.cpp +++ b/icuSources/common/rbbirb.cpp @@ -1,7 +1,7 @@ // // file: rbbirb.cpp // -// Copyright (C) 2002-2004, International Business Machines Corporation and others. +// Copyright (C) 2002-2005, International Business Machines Corporation and others. // All Rights Reserved. // // This file contains the RBBIRuleBuilder class implementation. This is the main class for @@ -143,7 +143,7 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { } // Remove comments and whitespace from the rules to make it smaller. - UnicodeString strippedRules(RBBIRuleScanner::stripRules(fRules)); + UnicodeString strippedRules((const UnicodeString&)RBBIRuleScanner::stripRules(fRules)); // Calculate the size of each section in the data. // Sizes here are padded up to a multiple of 8 for better memory alignment. @@ -171,10 +171,13 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { uprv_memset(data, 0, totalSize); - data->fMagic = 0xb1a0; - data->fVersion = 1; - data->fLength = totalSize; - data->fCatCount = fSetBuilder->getNumCharCategories(); + data->fMagic = 0xb1a0; + data->fFormatVersion[0] = 3; + data->fFormatVersion[1] = 1; + data->fFormatVersion[2] = 0; + data->fFormatVersion[3] = 0; + data->fLength = totalSize; + data->fCatCount = fSetBuilder->getNumCharCategories(); data->fFTable = headerSize; data->fFTableLen = forwardTableSize; diff --git a/icuSources/common/rbbirb.h b/icuSources/common/rbbirb.h index 0e0aba0a..d7a53836 100644 --- a/icuSources/common/rbbirb.h +++ b/icuSources/common/rbbirb.h @@ -1,7 +1,7 @@ // // rbbirb.h // -// Copyright (C) 2002-2004, International Business Machines Corporation and others. +// Copyright (C) 2002-2005, International Business Machines Corporation and others. // All Rights Reserved. // // This file contains declarations for several classes from the @@ -84,7 +84,7 @@ public: #else // A do-nothing inline function for non-debug builds. Member funcs can't be empty // or the call sites won't compile. - int fFakeField; + int32_t fFakeField; #define rbbiSymtablePrint() fFakeField=0; #endif @@ -200,7 +200,7 @@ struct RBBISetTableEl { #define RBBIDebugPrintf printf #define RBBIDebugPuts puts #else -inline void RBBIDebugPrintf(...) {} +#undef RBBIDebugPrintf #define RBBIDebugPuts(arg) #endif diff --git a/icuSources/common/rbbirpt.h b/icuSources/common/rbbirpt.h index 3b6473d4..deea57b7 100644 --- a/icuSources/common/rbbirpt.h +++ b/icuSources/common/rbbirpt.h @@ -6,7 +6,7 @@ // It is generated by the Perl script "rbbicst.pl" from // the rule parser state definitions file "rbbirpt.txt". // -// Copyright (C) 2002-2004 International Business Machines Corporation +// Copyright (C) 2002-2005 International Business Machines Corporation // and others. All rights reserved. // //--------------------------------------------------------------------------------- @@ -18,44 +18,44 @@ U_NAMESPACE_BEGIN // Character classes for RBBI rule scanning. // static const uint8_t kRuleSet_digit_char = 128; - static const uint8_t kRuleSet_white_space = 129; - static const uint8_t kRuleSet_rule_char = 130; - static const uint8_t kRuleSet_name_start_char = 131; - static const uint8_t kRuleSet_name_char = 132; + static const uint8_t kRuleSet_name_char = 129; + static const uint8_t kRuleSet_name_start_char = 130; + static const uint8_t kRuleSet_rule_char = 131; + static const uint8_t kRuleSet_white_space = 132; enum RBBI_RuleParseAction { + doCheckVarDef, + doDotAny, + doEndAssign, + doEndOfRule, + doEndVariableName, + doExit, + doExprCatOperator, + doExprFinished, doExprOrOperator, + doExprRParen, + doExprStart, + doLParen, + doNOP, doOptionEnd, - doRuleErrorAssignExpr, - doTagValue, - doEndAssign, - doRuleError, - doVariableNameExpectedErr, + doOptionStart, + doReverseDir, doRuleChar, - doLParen, + doRuleError, + doRuleErrorAssignExpr, + doScanUnicodeSet, doSlash, + doStartAssign, doStartTagValue, - doDotAny, - doExprFinished, - doScanUnicodeSet, - doExprRParen, doStartVariableName, - doTagExpectedError, doTagDigit, - doUnaryOpStar, - doEndVariableName, - doNOP, - doUnaryOpQuestion, - doExit, - doStartAssign, - doEndOfRule, + doTagExpectedError, + doTagValue, doUnaryOpPlus, - doExprStart, - doOptionStart, - doExprCatOperator, - doReverseDir, - doCheckVarDef, + doUnaryOpQuestion, + doUnaryOpStar, + doVariableNameExpectedErr, rbbiLastAction}; //------------------------------------------------------------------------------- @@ -76,42 +76,42 @@ struct RBBIRuleTableEl { static const struct RBBIRuleTableEl gRuleParseStateTable[] = { {doNOP, 0, 0, 0, TRUE} , {doExprStart, 254, 21, 8, FALSE} // 1 start - , {doNOP, 129, 1,0, TRUE} // 2 + , {doNOP, 132, 1,0, TRUE} // 2 , {doExprStart, 36 /* $ */, 80, 90, FALSE} // 3 , {doNOP, 33 /* ! */, 11,0, TRUE} // 4 , {doNOP, 59 /* ; */, 1,0, TRUE} // 5 , {doNOP, 252, 0,0, FALSE} // 6 , {doExprStart, 255, 21, 8, FALSE} // 7 , {doEndOfRule, 59 /* ; */, 1,0, TRUE} // 8 break-rule-end - , {doNOP, 129, 8,0, TRUE} // 9 + , {doNOP, 132, 8,0, TRUE} // 9 , {doRuleError, 255, 95,0, FALSE} // 10 , {doNOP, 33 /* ! */, 13,0, TRUE} // 11 rev-option , {doReverseDir, 255, 20, 8, FALSE} // 12 - , {doOptionStart, 131, 15,0, TRUE} // 13 option-scan1 + , {doOptionStart, 130, 15,0, TRUE} // 13 option-scan1 , {doRuleError, 255, 95,0, FALSE} // 14 - , {doNOP, 132, 15,0, TRUE} // 15 option-scan2 + , {doNOP, 129, 15,0, TRUE} // 15 option-scan2 , {doOptionEnd, 255, 17,0, FALSE} // 16 , {doNOP, 59 /* ; */, 1,0, TRUE} // 17 option-scan3 - , {doNOP, 129, 17,0, TRUE} // 18 + , {doNOP, 132, 17,0, TRUE} // 18 , {doRuleError, 255, 95,0, FALSE} // 19 , {doExprStart, 255, 21, 8, FALSE} // 20 reverse-rule , {doRuleChar, 254, 30,0, TRUE} // 21 term - , {doNOP, 129, 21,0, TRUE} // 22 - , {doRuleChar, 130, 30,0, TRUE} // 23 + , {doNOP, 132, 21,0, TRUE} // 22 + , {doRuleChar, 131, 30,0, TRUE} // 23 , {doNOP, 91 /* [ */, 86, 30, FALSE} // 24 , {doLParen, 40 /* ( */, 21, 30, TRUE} // 25 , {doNOP, 36 /* $ */, 80, 29, FALSE} // 26 , {doDotAny, 46 /* . */, 30,0, TRUE} // 27 , {doRuleError, 255, 95,0, FALSE} // 28 , {doCheckVarDef, 255, 30,0, FALSE} // 29 term-var-ref - , {doNOP, 129, 30,0, TRUE} // 30 expr-mod + , {doNOP, 132, 30,0, TRUE} // 30 expr-mod , {doUnaryOpStar, 42 /* * */, 35,0, TRUE} // 31 , {doUnaryOpPlus, 43 /* + */, 35,0, TRUE} // 32 , {doUnaryOpQuestion, 63 /* ? */, 35,0, TRUE} // 33 , {doNOP, 255, 35,0, FALSE} // 34 , {doExprCatOperator, 254, 21,0, FALSE} // 35 expr-cont - , {doNOP, 129, 35,0, TRUE} // 36 - , {doExprCatOperator, 130, 21,0, FALSE} // 37 + , {doNOP, 132, 35,0, TRUE} // 36 + , {doExprCatOperator, 131, 21,0, FALSE} // 37 , {doExprCatOperator, 91 /* [ */, 21,0, FALSE} // 38 , {doExprCatOperator, 40 /* ( */, 21,0, FALSE} // 39 , {doExprCatOperator, 36 /* $ */, 21,0, FALSE} // 40 @@ -124,8 +124,8 @@ static const struct RBBIRuleTableEl gRuleParseStateTable[] = { , {doSlash, 47 /* / */, 49,0, TRUE} // 47 look-ahead , {doNOP, 255, 95,0, FALSE} // 48 , {doExprCatOperator, 254, 21,0, FALSE} // 49 expr-cont-no-slash - , {doNOP, 129, 35,0, TRUE} // 50 - , {doExprCatOperator, 130, 21,0, FALSE} // 51 + , {doNOP, 132, 35,0, TRUE} // 50 + , {doExprCatOperator, 131, 21,0, FALSE} // 51 , {doExprCatOperator, 91 /* [ */, 21,0, FALSE} // 52 , {doExprCatOperator, 40 /* ( */, 21,0, FALSE} // 53 , {doExprCatOperator, 36 /* $ */, 21,0, FALSE} // 54 @@ -133,19 +133,19 @@ static const struct RBBIRuleTableEl gRuleParseStateTable[] = { , {doExprOrOperator, 124 /* | */, 21,0, TRUE} // 56 , {doExprRParen, 41 /* ) */, 255,0, TRUE} // 57 , {doExprFinished, 255, 255,0, FALSE} // 58 - , {doNOP, 129, 59,0, TRUE} // 59 tag-open + , {doNOP, 132, 59,0, TRUE} // 59 tag-open , {doStartTagValue, 128, 62,0, FALSE} // 60 , {doTagExpectedError, 255, 95,0, FALSE} // 61 - , {doNOP, 129, 66,0, TRUE} // 62 tag-value + , {doNOP, 132, 66,0, TRUE} // 62 tag-value , {doNOP, 125 /* } */, 66,0, FALSE} // 63 , {doTagDigit, 128, 62,0, TRUE} // 64 , {doTagExpectedError, 255, 95,0, FALSE} // 65 - , {doNOP, 129, 66,0, TRUE} // 66 tag-close + , {doNOP, 132, 66,0, TRUE} // 66 tag-close , {doTagValue, 125 /* } */, 69,0, TRUE} // 67 , {doTagExpectedError, 255, 95,0, FALSE} // 68 , {doExprCatOperator, 254, 21,0, FALSE} // 69 expr-cont-no-tag - , {doNOP, 129, 69,0, TRUE} // 70 - , {doExprCatOperator, 130, 21,0, FALSE} // 71 + , {doNOP, 132, 69,0, TRUE} // 70 + , {doExprCatOperator, 131, 21,0, FALSE} // 71 , {doExprCatOperator, 91 /* [ */, 21,0, FALSE} // 72 , {doExprCatOperator, 40 /* ( */, 21,0, FALSE} // 73 , {doExprCatOperator, 36 /* $ */, 21,0, FALSE} // 74 @@ -156,15 +156,15 @@ static const struct RBBIRuleTableEl gRuleParseStateTable[] = { , {doExprFinished, 255, 255,0, FALSE} // 79 , {doStartVariableName, 36 /* $ */, 82,0, TRUE} // 80 scan-var-name , {doNOP, 255, 95,0, FALSE} // 81 - , {doNOP, 131, 84,0, TRUE} // 82 scan-var-start + , {doNOP, 130, 84,0, TRUE} // 82 scan-var-start , {doVariableNameExpectedErr, 255, 95,0, FALSE} // 83 - , {doNOP, 132, 84,0, TRUE} // 84 scan-var-body + , {doNOP, 129, 84,0, TRUE} // 84 scan-var-body , {doEndVariableName, 255, 255,0, FALSE} // 85 , {doScanUnicodeSet, 91 /* [ */, 255,0, TRUE} // 86 scan-unicode-set , {doScanUnicodeSet, 112 /* p */, 255,0, TRUE} // 87 , {doScanUnicodeSet, 80 /* P */, 255,0, TRUE} // 88 , {doNOP, 255, 95,0, FALSE} // 89 - , {doNOP, 129, 90,0, TRUE} // 90 assign-or-rule + , {doNOP, 132, 90,0, TRUE} // 90 assign-or-rule , {doStartAssign, 61 /* = */, 21, 93, TRUE} // 91 , {doNOP, 255, 29, 8, FALSE} // 92 , {doEndAssign, 59 /* ; */, 1,0, TRUE} // 93 assign-end diff --git a/icuSources/common/rbbiscan.cpp b/icuSources/common/rbbiscan.cpp index 13c44c42..75c69f52 100644 --- a/icuSources/common/rbbiscan.cpp +++ b/icuSources/common/rbbiscan.cpp @@ -2,7 +2,7 @@ // // file: rbbiscan.cpp // -// Copyright (C) 2002-2004, International Business Machines Corporation and others. +// Copyright (C) 2002-2006, International Business Machines Corporation and others. // All Rights Reserved. // // This file contains the Rule Based Break Iterator Rule Builder functions for @@ -71,7 +71,7 @@ static const UChar kAny[] = {0x61, 0x6e, 0x79, 0x00}; // "any" U_CDECL_BEGIN -static void U_EXPORT2 U_CALLCONV RBBISetTable_deleter(void *p) { +static void U_CALLCONV RBBISetTable_deleter(void *p) { RBBISetTableEl *px = (RBBISetTableEl *)p; delete px->key; // Note: px->val is owned by the linked list "fSetsListHead" in scanner. @@ -142,7 +142,7 @@ RBBIRuleScanner::RBBIRuleScanner(RBBIRuleBuilder *rb) } fSymbolTable = new RBBISymbolTable(this, rb->fRules, *rb->fStatus); - fSetTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, rb->fStatus); + fSetTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, rb->fStatus); uhash_setValueDeleter(fSetTable, RBBISetTable_deleter); } @@ -289,6 +289,13 @@ UBool RBBIRuleScanner::doParseActions(EParseAction action) // Make a symbol table entry for the $variableRef node. fSymbolTable->addEntry(varRefNode->fText, varRefNode, *fRB->fStatus); + if (U_FAILURE(*fRB->fStatus)) { + // This is a round-about way to get the parse position set + // so that duplicate symbols error messages include a line number. + UErrorCode t = *fRB->fStatus; + *fRB->fStatus = U_ZERO_ERROR; + error(t); + } // Clean up the stack. delete startExprNode; @@ -302,7 +309,9 @@ UBool RBBIRuleScanner::doParseActions(EParseAction action) if (U_FAILURE(*fRB->fStatus)) { // parse tree rooted in TOS node. break; } +#ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "rtree")) {printNodeStack("end of rule");} +#endif U_ASSERT(fNodeStackPtr == 1); // If this rule includes a look-ahead '/', add a endMark node to the @@ -426,7 +435,6 @@ UBool RBBIRuleScanner::doParseActions(EParseAction action) fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText); break; } - break; case doSlash: // Scanned a '/', which identifies a look-ahead break position in a rule. @@ -939,7 +947,9 @@ void RBBIRuleScanner::parse() { #endif for (;;) { - if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPrintf(".");} + #ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPrintf(".");} + #endif if (tableEl->fCharClass < 127 && fC.fEscaped == FALSE && tableEl->fCharClass == fC.fChar) { // Table row specified an individual character, not a set, and // the input character is not escaped, and @@ -978,7 +988,7 @@ void RBBIRuleScanner::parse() { // No match on this row, advance to the next row for this state, tableEl++; } - if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPrintf("\n");} + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPuts("");} // // We've found the row of the state table that matches the current input @@ -1062,8 +1072,6 @@ void RBBIRuleScanner::parse() { // //--------------------------------------------------------------------------------- #ifdef RBBI_DEBUG -void RBBIRuleScanner::printNodeStack(const char *) {} -#else void RBBIRuleScanner::printNodeStack(const char *title) { int i; RBBIDebugPrintf("%s. Dumping node stack...\n", title); @@ -1130,7 +1138,9 @@ void RBBIRuleScanner::scanSet() { if (U_FAILURE(localStatus)) { // TODO: Get more accurate position of the error from UnicodeSet's return info. // UnicodeSet appears to not be reporting correctly at this time. - RBBIDebugPrintf("UnicodeSet parse postion.ErrorIndex = %d\n", pos.getIndex()); + #ifdef RBBI_DEBUG + RBBIDebugPrintf("UnicodeSet parse postion.ErrorIndex = %d\n", pos.getIndex()); + #endif error(localStatus); delete uset; return; @@ -1138,7 +1148,7 @@ void RBBIRuleScanner::scanSet() { // Verify that the set contains at least one code point. // - if (uset->charAt(0) == -1) { + if (uset->isEmpty()) { // This set is empty. // Make it an error, because it almost certainly is not what the user wanted. // Also, avoids having to think about corner cases in the tree manipulation code diff --git a/icuSources/common/rbbiscan.h b/icuSources/common/rbbiscan.h index 918f5f9f..89748318 100644 --- a/icuSources/common/rbbiscan.h +++ b/icuSources/common/rbbiscan.h @@ -1,7 +1,7 @@ // // rbbiscan.h // -// Copyright (C) 2002-2003, International Business Machines Corporation and others. +// Copyright (C) 2002-2005, International Business Machines Corporation and others. // All Rights Reserved. // // This file contains declarations for class RBBIRuleScanner @@ -88,7 +88,9 @@ private: void findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt = NULL); UChar32 nextCharLL(); +#ifdef RBBI_DEBUG void printNodeStack(const char *title); +#endif RBBINode *pushNewNode(RBBINode::NodeType t); void scanSet(); @@ -100,8 +102,8 @@ private: int32_t fNextIndex; // Index of the next character, which // is the first character not yet scanned. UBool fQuoteMode; // Scan is in a 'quoted region' - int fLineNum; // Line number in input file. - int fCharNum; // Char position within the line. + int32_t fLineNum; // Line number in input file. + int32_t fCharNum; // Char position within the line. UChar32 fLastChar; // Previous char, needed to count CR-LF // as a single line, not two. @@ -114,12 +116,12 @@ private: // parsing. index by p[state][char-class] uint16_t fStack[kStackSize]; // State stack, holds state pushes - int fStackPtr; // and pops as specified in the state + int32_t fStackPtr; // and pops as specified in the state // transition rules. RBBINode *fNodeStack[kStackSize]; // Node stack, holds nodes created // during the parse of a rule - int fNodeStackPtr; + int32_t fNodeStackPtr; UBool fReverseRule; // True if the rule currently being scanned diff --git a/icuSources/common/rbbisetb.cpp b/icuSources/common/rbbisetb.cpp index 50ac3ca1..5337738b 100644 --- a/icuSources/common/rbbisetb.cpp +++ b/icuSources/common/rbbisetb.cpp @@ -3,7 +3,7 @@ // /* *************************************************************************** -* Copyright (C) 2002-2004 International Business Machines Corporation * +* Copyright (C) 2002-2005 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** */ @@ -94,6 +94,7 @@ RBBISetBuilder::RBBISetBuilder(RBBIRuleBuilder *rb) fTrie = 0; fTrieSize = 0; fGroupCount = 0; + fSawBOF = FALSE; } @@ -147,7 +148,7 @@ void RBBISetBuilder::build() { // Find the set of non-overlapping ranges of characters // int ni; - for (ni=0; ; ni++) { + for (ni=0; ; ni++) { // Loop over each of the UnicodeSets encountered in the input rules usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni); if (usetNode==NULL) { break; @@ -222,6 +223,11 @@ void RBBISetBuilder::build() { // The groups are numbered, and these group numbers are the set of // input symbols recognized by the run-time state machine. // + // Numbering: # 0 (state table column 0) is unused. + // # 1 is reserved - table column 1 is for end-of-input + // # 2 is reserved - table column 2 is for beginning-in-input + // # 3 is the first range list. + // RangeDescriptor *rlSearchRange; for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { for (rlSearchRange=fRangeList; rlSearchRange != rlRange; rlSearchRange=rlSearchRange->fNext) { @@ -232,12 +238,42 @@ void RBBISetBuilder::build() { } if (rlRange->fNum == 0) { fGroupCount ++; - rlRange->fNum = fGroupCount; + rlRange->fNum = fGroupCount+2; rlRange->setDictionaryFlag(); - addValToSets(rlRange->fIncludesSets, fGroupCount); + addValToSets(rlRange->fIncludesSets, fGroupCount+2); + } + } + + // Handle input sets that contain the special string {eof}. + // Column 1 of the state table is reserved for EOF on input. + // Column 2 is reserved for before-the-start-input. + // (This column can be optimized away later if there are no rule + // references to {bof}.) + // Add this column value (1 or 2) to the equivalent expression + // subtree for each UnicodeSet that contains the string {eof} + // Because {bof} and {eof} are not a characters in the normal sense, + // they doesn't affect the computation of ranges or TRIE. + static const UChar eofUString[] = {0x65, 0x6f, 0x66, 0}; + static const UChar bofUString[] = {0x62, 0x6f, 0x66, 0}; + + UnicodeString eofString(eofUString); + UnicodeString bofString(bofUString); + for (ni=0; ; ni++) { // Loop over each of the UnicodeSets encountered in the input rules + usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni); + if (usetNode==NULL) { + break; + } + UnicodeSet *inputSet = usetNode->fInputSet; + if (inputSet->contains(eofString)) { + addValToSet(usetNode, 1); + } + if (inputSet->contains(bofString)) { + addValToSet(usetNode, 2); + fSawBOF = TRUE; } } + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "rgroup")) {printRangeGroups();} if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "esets")) {printSets();} @@ -296,7 +332,7 @@ void RBBISetBuilder::serializeTrie(uint8_t *where) { //------------------------------------------------------------------------ // // addValToSets Add a runtime-mapped input value to each uset from a -// list of uset nodes. +// list of uset nodes. (val corresponds to a state table column.) // For each of the original Unicode sets - which correspond // directly to uset nodes - a logically equivalent expression // is constructed in terms of the remapped runtime input @@ -312,38 +348,50 @@ void RBBISetBuilder::addValToSets(UVector *sets, uint32_t val) { for (ix=0; ixsize(); ix++) { RBBINode *usetNode = (RBBINode *)sets->elementAt(ix); - RBBINode *leafNode = new RBBINode(RBBINode::leafChar); - leafNode->fVal = (unsigned short)val; - if (usetNode->fLeftChild == NULL) { - usetNode->fLeftChild = leafNode; - leafNode->fParent = usetNode; - } else { - // There are already input symbols present for this set. - // Set up an OR node, with the previous stuff as the left child - // and the new value as the right child. - RBBINode *orNode = new RBBINode(RBBINode::opOr); - orNode->fLeftChild = usetNode->fLeftChild; - orNode->fRightChild = leafNode; - orNode->fLeftChild->fParent = orNode; - orNode->fRightChild->fParent = orNode; - usetNode->fLeftChild = orNode; - orNode->fParent = usetNode; - } + addValToSet(usetNode, val); } } +void RBBISetBuilder::addValToSet(RBBINode *usetNode, uint32_t val) { + RBBINode *leafNode = new RBBINode(RBBINode::leafChar); + leafNode->fVal = (unsigned short)val; + if (usetNode->fLeftChild == NULL) { + usetNode->fLeftChild = leafNode; + leafNode->fParent = usetNode; + } else { + // There are already input symbols present for this set. + // Set up an OR node, with the previous stuff as the left child + // and the new value as the right child. + RBBINode *orNode = new RBBINode(RBBINode::opOr); + orNode->fLeftChild = usetNode->fLeftChild; + orNode->fRightChild = leafNode; + orNode->fLeftChild->fParent = orNode; + orNode->fRightChild->fParent = orNode; + usetNode->fLeftChild = orNode; + orNode->fParent = usetNode; + } +} //------------------------------------------------------------------------ // -// getNumOutputSets +// getNumCharCategories // //------------------------------------------------------------------------ int32_t RBBISetBuilder::getNumCharCategories() const { - return fGroupCount + 1; + return fGroupCount + 3; } +//------------------------------------------------------------------------ +// +// sawBOF +// +//------------------------------------------------------------------------ +UBool RBBISetBuilder::sawBOF() const { + return fSawBOF; +} + //------------------------------------------------------------------------ // @@ -462,7 +510,7 @@ void RBBISetBuilder::printSets() { RBBIDebugPrintf("\n\nUnicode Sets List\n------------------\n"); for (i=0; ; i++) { - RBBINode *usetNode; + RBBINode *usetNode; RBBINode *setRef; RBBINode *varRef; UnicodeString setName; diff --git a/icuSources/common/rbbisetb.h b/icuSources/common/rbbisetb.h index 17544f54..c8bc1df7 100644 --- a/icuSources/common/rbbisetb.h +++ b/icuSources/common/rbbisetb.h @@ -2,7 +2,7 @@ // rbbisetb.h /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -79,13 +79,16 @@ public: ~RBBISetBuilder(); void build(); - void addValToSets(UVector *sets, uint32_t val); + void addValToSets(UVector *sets, uint32_t val); + void addValToSet (RBBINode *usetNode, uint32_t val); int32_t getNumCharCategories() const; // CharCategories are the same as input symbol set to the - // runtime state machine, which are the same as - // columns in the DFA state table + // runtime state machine, which are the same as + // columns in the DFA state table int32_t getTrieSize() /*const*/; // Size in bytes of the serialized Trie. void serializeTrie(uint8_t *where); // write out the serialized Trie. UChar32 getFirstChar(int32_t val) const; + UBool sawBOF() const; // Indicate whether any references to the {bof} pseudo + // character were encountered. #ifdef RBBI_DEBUG void printSets(); void printRanges(); @@ -110,10 +113,13 @@ private: // Groups correspond to character categories - // groups of ranges that are in the same original UnicodeSets. // fGroupCount is the index of the last used group. - // The value is also the number of columns in the RBBI state table being compiled. - // Index 0 is not used. Funny counting. + // fGroupCount+1 is also the number of columns in the RBBI state table being compiled. + // State table column 0 is not used. Column 1 is for end-of-input. + // column 2 is for group 0. Funny counting. int32_t fGroupCount; + UBool fSawBOF; + RBBISetBuilder(const RBBISetBuilder &other); // forbid copying of this class RBBISetBuilder &operator=(const RBBISetBuilder &other); // forbid copying of this class }; diff --git a/icuSources/common/rbbistbl.cpp b/icuSources/common/rbbistbl.cpp index f8aae326..771eb313 100644 --- a/icuSources/common/rbbistbl.cpp +++ b/icuSources/common/rbbistbl.cpp @@ -3,7 +3,7 @@ // /* *************************************************************************** -* Copyright (C) 2002-2004 International Business Machines Corporation * +* Copyright (C) 2002-2005 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** */ @@ -28,7 +28,7 @@ // when the hash table is deleted. // U_CDECL_BEGIN -static void U_EXPORT2 U_CALLCONV RBBISymbolTableEntry_deleter(void *p) { +static void U_CALLCONV RBBISymbolTableEntry_deleter(void *p) { RBBISymbolTableEntry *px = (RBBISymbolTableEntry *)p; delete px; } @@ -44,7 +44,7 @@ RBBISymbolTable::RBBISymbolTable(RBBIRuleScanner *rs, const UnicodeString &rules fHashTable = NULL; fCachedSetLookup = NULL; - fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, &status); + fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, &status); // uhash_open checks status if (U_FAILURE(status)) { return; diff --git a/icuSources/common/rbbitblb.cpp b/icuSources/common/rbbitblb.cpp index b979c92a..6bc60c2d 100644 --- a/icuSources/common/rbbitblb.cpp +++ b/icuSources/common/rbbitblb.cpp @@ -1,13 +1,13 @@ -// -// rbbitblb.cpp -// - /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ +// +// rbbitblb.cpp +// + #include "unicode/utypes.h" @@ -20,6 +20,7 @@ #include "rbbidata.h" #include "cstring.h" #include "uassert.h" +#include "cmemory.h" U_NAMESPACE_BEGIN @@ -75,10 +76,28 @@ void RBBITableBuilder::build() { // parse tree for the substition expression. // fTree = fTree->flattenVariables(); +#ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ftree")) { RBBIDebugPuts("Parse tree after flattening variable references."); fTree->printTree(TRUE); } +#endif + + // + // If the rules contained any references to {bof} + // add a {bof} to the + // tree. Means that all matches must start out with the + // {bof} fake character. + // + if (fRB->fSetBuilder->sawBOF()) { + RBBINode *bofTop = new RBBINode(RBBINode::opCat); + RBBINode *bofLeaf = new RBBINode(RBBINode::leafChar); + bofTop->fLeftChild = bofLeaf; + bofTop->fRightChild = fTree; + bofLeaf->fParent = bofTop; + bofLeaf->fVal = 2; // Reserved value for {bof}. + fTree = bofTop; + } // // Add a unique right-end marker to the expression. @@ -97,10 +116,12 @@ void RBBITableBuilder::build() { // expression. // fTree->flattenSets(); +#ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "stree")) { RBBIDebugPuts("Parse tree after flattening Unicode Set references."); fTree->printTree(TRUE); } +#endif // @@ -126,6 +147,13 @@ void RBBITableBuilder::build() { calcChainedFollowPos(fTree); } + // + // BOF (start of input) test fixup. + // + if (fRB->fSetBuilder->sawBOF()) { + bofFixup(); + } + // // Build the DFA state transition tables. // @@ -207,6 +235,9 @@ void RBBITableBuilder::calcFirstPos(RBBINode *n) { n->fType == RBBINode::lookAhead || n->fType == RBBINode::tag) { // These are non-empty leaf node types. + // Note: In order to maintain the sort invariant on the set, + // this function should only be called on a node whose set is + // empty to start with. n->fFirstPosSet->addElement(n, *fStatus); return; } @@ -250,6 +281,9 @@ void RBBITableBuilder::calcLastPos(RBBINode *n) { n->fType == RBBINode::lookAhead || n->fType == RBBINode::tag) { // These are non-empty leaf node types. + // Note: In order to maintain the sort invariant on the set, + // this function should only be called on a node whose set is + // empty to start with. n->fLastPosSet->addElement(n, *fStatus); return; } @@ -343,14 +377,21 @@ void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) { // get a list of all endmarker nodes. tree->findNodes(&endMarkerNodes, RBBINode::endMark, *fStatus); - // get a list all leaf nodes + // get a list all leaf nodes tree->findNodes(&leafNodes, RBBINode::leafChar, *fStatus); if (U_FAILURE(*fStatus)) { return; } - // Get all nodes that can be the start a match, which is FirstPosition(root) - UVector *matchStartNodes = tree->fFirstPosSet; + // Get all nodes that can be the start a match, which is FirstPosition() + // of the portion of the tree corresponding to user-written rules. + // See the tree description in bofFixup(). + RBBINode *userRuleRoot = tree; + if (fRB->fSetBuilder->sawBOF()) { + userRuleRoot = tree->fLeftChild->fRightChild; + } + U_ASSERT(userRuleRoot != NULL); + UVector *matchStartNodes = userRuleRoot->fFirstPosSet; // Iteratate over all leaf nodes, @@ -383,10 +424,12 @@ void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) { // into the rule file. if (fRB->fLBCMNoChain) { UChar32 c = this->fRB->fSetBuilder->getFirstChar(endNode->fVal); - U_ASSERT(c != -1); - ULineBreak cLBProp = (ULineBreak)u_getIntPropertyValue(c, UCHAR_LINE_BREAK); - if (cLBProp == U_LB_COMBINING_MARK) { - continue; + if (c != -1) { + // c == -1 occurs with sets containing only the {eof} marker string. + ULineBreak cLBProp = (ULineBreak)u_getIntPropertyValue(c, UCHAR_LINE_BREAK); + if (cLBProp == U_LB_COMBINING_MARK) { + continue; + } } } @@ -415,6 +458,62 @@ void RBBITableBuilder::calcChainedFollowPos(RBBINode *tree) { } +//----------------------------------------------------------------------------- +// +// bofFixup. Fixup for state tables that include {bof} beginning of input testing. +// Do an swizzle similar to chaining, modifying the followPos set of +// the bofNode to include the followPos nodes from other {bot} nodes +// scattered through the tree. +// +// This function has much in common with calcChainedFollowPos(). +// +//----------------------------------------------------------------------------- +void RBBITableBuilder::bofFixup() { + + if (U_FAILURE(*fStatus)) { + return; + } + + // The parse tree looks like this ... + // fTree root ---> + // / \ . + // <#end node> + // / \ . + // rest + // of tree + // + // We will be adding things to the followPos set of the + // + RBBINode *bofNode = fTree->fLeftChild->fLeftChild; + U_ASSERT(bofNode->fType == RBBINode::leafChar); + U_ASSERT(bofNode->fVal == 2); + + // Get all nodes that can be the start a match of the user-written rules + // (excluding the fake bofNode) + // We want the nodes that can start a match in the + // part labeled "rest of tree" + // + UVector *matchStartNodes = fTree->fLeftChild->fRightChild->fFirstPosSet; + + RBBINode *startNode; + int startNodeIx; + for (startNodeIx = 0; startNodeIxsize(); startNodeIx++) { + startNode = (RBBINode *)matchStartNodes->elementAt(startNodeIx); + if (startNode->fType != RBBINode::leafChar) { + continue; + } + + if (startNode->fVal == bofNode->fVal) { + // We found a leaf node corresponding to a {bof} that was + // explicitly written into a rule. + // Add everything from the followPos set of this node to the + // followPos set of the fake bofNode at the start of the tree. + // + setAdd(bofNode->fFollowPos, startNode->fFollowPos); + } + } +} + //----------------------------------------------------------------------------- // // buildStateTable() Determine the set of runtime DFA states and the @@ -572,14 +671,29 @@ void RBBITableBuilder::flagAcceptingStates() { // Any non-zero value for fAccepting means this is an accepting node. // The value is what will be returned to the user as the break status. // If no other value was specified, force it to -1. - sd->fAccepting = endMarker->fVal; - if (sd->fAccepting == 0) { - sd->fAccepting = -1; + + if (sd->fAccepting==0) { + // State hasn't been marked as accepting yet. Do it now. + sd->fAccepting = endMarker->fVal; + if (sd->fAccepting == 0) { + sd->fAccepting = -1; + } + } + if (sd->fAccepting==-1 && endMarker->fVal != 0) { + // Both lookahead and non-lookahead accepting for this state. + // Favor the look-ahead. Expedient for line break. + // TODO: need a more elegant resolution for conflicting rules. + sd->fAccepting = endMarker->fVal; } + // implicit else: + // if sd->fAccepting already had a value other than 0 or -1, leave it be. // If the end marker node is from a look-ahead rule, set // the fLookAhead field or this state also. if (endMarker->fLookAheadEnd) { + // TODO: don't change value if already set? + // TODO: allow for more than one active look-ahead rule in engine. + // Make value here an index to a side array in engine? sd->fLookAhead = sd->fAccepting; } } @@ -644,7 +758,7 @@ void RBBITableBuilder::flagTaggedStates() { } for (i=0; isize(); n++) { // For each state s (row in the state table) RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); if (sd->fPositions->indexOf(tagNode) >= 0) { // if s include the tag node t @@ -686,9 +800,9 @@ void RBBITableBuilder::mergeRuleStatusVals() { fRB->fRuleStatusVals->addElement(1, *fStatus); // Num of statuses in group fRB->fRuleStatusVals->addElement((int32_t)0, *fStatus); // and our single status of zero } - - // For each state - for (n=0; nsize(); n++) { + + // For each state + for (n=0; nsize(); n++) { RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); UVector *thisStatesTagValues = sd->fTagVals; if (thisStatesTagValues == NULL) { @@ -704,7 +818,7 @@ void RBBITableBuilder::mergeRuleStatusVals() { sd->fTagsIdx = -1; int32_t thisTagGroupStart = 0; // indexes into the global rule status vals list int32_t nextTagGroupStart = 0; - + // Loop runs once per group of tags in the global list while (nextTagGroupStart < fRB->fRuleStatusVals->size()) { thisTagGroupStart = nextTagGroupStart; @@ -718,21 +832,21 @@ void RBBITableBuilder::mergeRuleStatusVals() { // The lengths match, go ahead and compare the actual tag values // between this state and the group from the global list. for (i=0; isize(); i++) { - if (thisStatesTagValues->elementAti(i) != + if (thisStatesTagValues->elementAti(i) != fRB->fRuleStatusVals->elementAti(thisTagGroupStart + 1 + i) ) { - // Mismatch. + // Mismatch. break; } } - + if (i == thisStatesTagValues->size()) { // We found a set of tag values in the global list that match // those for this state. Use them. sd->fTagsIdx = thisTagGroupStart; - break; + break; } } - + if (sd->fTagsIdx == -1) { // No suitable entry in the global tag list already. Add one sd->fTagsIdx = fRB->fRuleStatusVals->size(); @@ -788,23 +902,78 @@ void RBBITableBuilder::sortedAdd(UVector **vector, int32_t val) { // // setAdd Set operation on UVector // dest = dest union source -// Elements may only appear once. Order is unimportant. +// Elements may only appear once and must be sorted. // //----------------------------------------------------------------------------- void RBBITableBuilder::setAdd(UVector *dest, UVector *source) { int destOriginalSize = dest->size(); int sourceSize = source->size(); - int32_t si, di; + int32_t di = 0; + void *(destS[16]), *(sourceS[16]); // Handle small cases without malloc + void **destH = 0, **sourceH = 0; + void **destBuff, **sourceBuff; + void **destLim, **sourceLim; - for (si=0; sielementAt(si); - for (di=0; dielementAt(di) == elToAdd) { - goto elementAlreadyInDest; - } + if (destOriginalSize > sizeof(destS)/sizeof(destS[0])) { + destH = (void **)uprv_malloc(sizeof(void *) * destOriginalSize); + destBuff = destH; + } + else { + destBuff = destS; + } + if (destBuff == 0) { + return; + } + destLim = destBuff + destOriginalSize; + + if (sourceSize > sizeof(sourceS)/sizeof(sourceS[0])) { + sourceH = (void **)uprv_malloc(sizeof(void *) * sourceSize); + sourceBuff = sourceH; + } + else { + sourceBuff = sourceS; + } + if (sourceBuff == 0) { + if (destH) { + uprv_free(destH); + } + return; + } + sourceLim = sourceBuff + sourceSize; + + // Avoid multiple "get element" calls by getting the contents into arrays + (void) dest->toArray(destBuff); + (void) source->toArray(sourceBuff); + + dest->setSize(sourceSize+destOriginalSize); + + while (sourceBuff < sourceLim && destBuff < destLim) { + if (*destBuff < *sourceBuff) { + dest->setElementAt(*destBuff++, di++); + } + else if (*sourceBuff < *destBuff) { + dest->setElementAt(*sourceBuff++, di++); + } + else { + dest->setElementAt(*sourceBuff++, di++); + destBuff++; } - dest->addElement(elToAdd, *fStatus); - elementAlreadyInDest: ; + } + + // At most one of these two cleanup loops will execute + while (destBuff < destLim) { + dest->setElementAt(*destBuff++, di++); + } + while (sourceBuff < sourceLim) { + dest->setElementAt(*sourceBuff++, di++); + } + + dest->setSize(di); + if (destH) { + uprv_free(destH); + } + if (sourceH) { + uprv_free(sourceH); } } @@ -814,40 +983,11 @@ void RBBITableBuilder::setAdd(UVector *dest, UVector *source) { // // setEqual Set operation on UVector. // Compare for equality. -// Elements may appear only once. -// Elements may appear in any order. +// Elements must be sorted. // //----------------------------------------------------------------------------- UBool RBBITableBuilder::setEquals(UVector *a, UVector *b) { - int32_t aSize = a->size(); - int32_t bSize = b->size(); - - if (aSize != bSize) { - return FALSE; - } - - int32_t ax; - int32_t bx; - int32_t firstBx = 0; - void *aVal; - void *bVal = NULL; - - for (ax=0; axelementAt(ax); - for (bx=firstBx; bxelementAt(bx); - if (aVal == bVal) { - if (bx==firstBx) { - firstBx++; - } - break; - } - } - if (aVal != bVal) { - return FALSE; - } - } - return TRUE; + return a->equals(*b); } @@ -941,6 +1081,9 @@ void RBBITableBuilder::exportTable(void *where) { if (fRB->fLookAheadHardBreak) { table->fFlags |= RBBI_LOOKAHEAD_HARD_BREAK; } + if (fRB->fSetBuilder->sawBOF()) { + table->fFlags |= RBBI_BOF_REQUIRED; + } table->fReserved = 0; for (state=0; statefNumStates; state++) { @@ -1027,7 +1170,7 @@ void RBBITableBuilder::printRuleStatusTable() { RBBIDebugPrintf("index | tags \n"); RBBIDebugPrintf("-------------------\n"); - + while (nextRecord < tbl->size()) { thisRecord = nextRecord; nextRecord = thisRecord + tbl->elementAti(thisRecord) + 1; @@ -1057,7 +1200,7 @@ RBBIStateDescriptor::RBBIStateDescriptor(int lastInputSymbol, UErrorCode *fStatu fTagVals = NULL; fPositions = NULL; fDtran = NULL; - + fDtran = new UVector(lastInputSymbol+1, *fStatus); if (U_FAILURE(*fStatus)) { return; diff --git a/icuSources/common/rbbitblb.h b/icuSources/common/rbbitblb.h index e4a2b890..3805b675 100644 --- a/icuSources/common/rbbitblb.h +++ b/icuSources/common/rbbitblb.h @@ -4,7 +4,7 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -51,6 +51,7 @@ private: void calcLastPos(RBBINode *n); void calcFollowPos(RBBINode *n); void calcChainedFollowPos(RBBINode *n); + void bofFixup(); void buildStateTable(); void flagAcceptingStates(); void flagLookAheadStates(); diff --git a/icuSources/common/rbtok.cpp b/icuSources/common/rbtok.cpp new file mode 100644 index 00000000..311afd2d --- /dev/null +++ b/icuSources/common/rbtok.cpp @@ -0,0 +1,254 @@ +/* +*************************************************************************** +* Copyright (C) 2006 Apple Computer, Inc. All rights reserved. * +*************************************************************************** + +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "rbtok.h" +#include "unicode/ustring.h" +#include "unicode/utext.h" +#include "rbbidata.h" + +U_NAMESPACE_BEGIN + + +#if defined(__GNUC__) && (__GNUC__ >= 4) +#pragma GCC optimization_level 3 +#endif + +static const int16_t START_STATE = 1; // The state number of the starting state +static const int16_t STOP_STATE = 0; // The state-transition value indicating "stop" + +int32_t RuleBasedTokenizer::tokenize(int32_t maxTokens, RuleBasedTokenRange *outTokenRanges, unsigned long *outTokenFlags) +{ + RuleBasedTokenRange *outTokenLimit = outTokenRanges + maxTokens; + RuleBasedTokenRange *outTokenP = outTokenRanges; + int32_t state; + int16_t category; + + const RBBIStateTableRow *row; + const RBBIStateTableRow *const startRow = fStartRow; + + int32_t lastAcceptingState = 0; + UChar32 c = 0; + signed long prev; + signed long result; + const char *const tableData = fData->fForwardTable->fTableData; + const uint32_t tableRowLen = fData->fForwardTable->fRowLen; + UText *text = fText; + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPuts("Handle Next pos char state category"); + } + #endif + + fLastStatusIndexValid = FALSE; + + // if we're already at the end of the text, return DONE. + prev = (signed long)UTEXT_GETNATIVEINDEX(text); + + // loop until we reach the end of the text or transition to state 0 + // + const UTrie *trie = &fData->fTrie; + while (outTokenP < outTokenLimit) { + c = UTEXT_NEXT32(text); + if (c == U_SENTINEL) + { + goto exitTokenizer; + } + // Set the initial state for the state machine + state = START_STATE; + row = startRow; + + // if we have cached break positions and we're still in the range + // covered by them, just move one step forward in the cache + if (fCachedBreakPositions != NULL) { + if (fPositionInCache < fNumCachedBreakPositions - 1) { + ++fPositionInCache; + result = fCachedBreakPositions[fPositionInCache]; + goto emitToken; + } + else { + reset(); + } + } + + while (c != U_SENTINEL) { + // + // Get the char category. An incoming category of 1 or 2 means that + // we are preset for doing the beginning or end of input, and + // that we shouldn't get a category from an actual text input character. + // + // look up the current character's character category, which tells us + // which column in the state table to look at. + // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, + // not the size of the character going in, which is a UChar32. + // + if (__builtin_expect((c < 0x100), 1)) + category = fLatin1Cat[c]; + else + UTRIE_GET16(trie, c, category); + + // Check the dictionary bit in the character's category. + // Counter is only used by dictionary based iterators (subclasses). + // Chars that need to be handled by a dictionary have a flag bit set + // in their category values. + // + if (__builtin_expect((category & 0x4000) != 0, 0)) { + fDictionaryCharCount++; + // And off the dictionary flag bit. + category &= ~0x4000; + } + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf(" %4d ", utext_getNativeIndex(fText)); + if (0x20<=c && c<0x7f) { + RBBIDebugPrintf("\"%c\" ", c); + } else { + RBBIDebugPrintf("%5x ", c); + } + RBBIDebugPrintf("%3d %3d\n", state, category); + } + #endif + + // State Transition - move machine to its next state + // + state = row->fNextState[category]; + row = (const RBBIStateTableRow *) (tableData + tableRowLen * state); + + if (row->fAccepting == -1) { + // Match found, common case. + result = (signed long)UTEXT_GETNATIVEINDEX(text); + //fLastRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values. + //lastStatusRow = row; + lastAcceptingState = state; + } + + if (state == STOP_STATE) { + // This is the normal exit from the lookup state machine. + // We have advanced through the string until it is certain that no + // longer match is possible, no matter what characters follow. + break; + } + + // Advance to the next character. + // If this is a beginning-of-input loop iteration, don't advance + // the input position. The next iteration will be processing the + // first real input character. + c = UTEXT_NEXT32(text); + } + + if (fDictionaryCharCount > 0) { + result = (signed long) checkDictionary(prev, (int32_t) result, FALSE); + } + +emitToken: + // The state machine is done. Check whether it found a match... + + // Leave the iterator at our result position. + UTEXT_SETNATIVEINDEX(text, result); + + RuleBasedTokenRange range = {(signed long)prev, (signed long) (result-prev)}; + int32_t flags = fStateFlags[lastAcceptingState]; + + if (flags == -1) + goto skipToken; + + *outTokenP++ = range; + if (outTokenFlags) + { + *outTokenFlags++ = (unsigned long) flags; + } + + if (flags & 0x40000000) + goto exitTokenizer; + +skipToken: + prev = result; + } + +exitTokenizer: + return (outTokenP - outTokenRanges); +} + +#if defined (__GNUC__) && (__GNUC__ >= 4) +#pragma GCC optimization_level reset +#endif + +void +RuleBasedTokenizer::init() +{ + const RBBIStateTable *statetable = fData->fForwardTable; + setBreakType(UBRK_WORD); + fStartRow = (const RBBIStateTableRow *) + (statetable->fTableData + (statetable->fRowLen * START_STATE)); + UChar i; + const UTrie *trie = &fData->fTrie; + int16_t category; + fLatin1Cat = new int16_t[256]; + for (i = 0; i < 256; ++i) + { + //UTRIE_GET16(trie, i, category); + //fLatin1Cat[i] = category; + fLatin1Cat[i] = _UTRIE_GET_RAW(trie, index, 0, i); + } + fStateFlags = new int32_t[statetable->fNumStates]; + for (i = 0; i < statetable->fNumStates; ++i) + { + const RBBIStateTableRow *row = (const RBBIStateTableRow *) + (statetable->fTableData + (statetable->fRowLen * i)); + int32_t flags = 0; + if (row->fAccepting == -1) + { + const int32_t *vals = (fData->fRuleStatusTable) + (row->fTagIdx); + const int32_t *valLimit = vals + 1; + valLimit += *vals++; + while (vals < valLimit) + { + int32_t val = *vals++; + if (val == 0) + { + break; + } + else if (val > 0) + { + flags |= val; + } + else + { + flags = val; + break; + } + } + } + fStateFlags[i] = flags; + } +} + +RuleBasedTokenizer::RuleBasedTokenizer(const UnicodeString &rules, UParseError &parseErr, UErrorCode &err) + : RuleBasedBreakIterator(rules, parseErr, err) +{ + init(); +} + +RuleBasedTokenizer::RuleBasedTokenizer(uint8_t *data, UErrorCode &status) + : RuleBasedBreakIterator((RBBIDataHeader *)data, status) +{ + init(); +} + +RuleBasedTokenizer::~RuleBasedTokenizer() { + delete [] fStateFlags; + delete [] fLatin1Cat; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbtok.h b/icuSources/common/rbtok.h new file mode 100644 index 00000000..15bb072d --- /dev/null +++ b/icuSources/common/rbtok.h @@ -0,0 +1,110 @@ +/* +*************************************************************************** +* Copyright (C) 2006 Apple Computer, Inc. All rights reserved. * +*************************************************************************** + +*/ + +#ifndef RBTOK_H +#define RBTOK_H + +#include "unicode/utypes.h" + +/** + * \file + * \brief C++ API: Rule Based Tokenizer + */ + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/urbtok.h" +#include "unicode/rbbi.h" +#include "unicode/parseerr.h" + + +U_NAMESPACE_BEGIN + +/** @internal */ +struct RBBIDataHeader; +struct RBBIStateTableRow; + + +/** + * + * A subclass of RuleBasedBreakIterator that adds tokenization functionality. + + *

This class is for internal use only by Apple Computer, Inc.

+ * + */ +class U_COMMON_API RuleBasedTokenizer : public RuleBasedBreakIterator { + +private: + /** + * The row corresponding to the start state + * @internal + */ + const RBBIStateTableRow *fStartRow; + + /** + * The merged flag results for accepting states + * @internal + */ + int32_t *fStateFlags; + + /** + * Character categories for the Latin1 subset of Unicode + * @internal + */ + int16_t *fLatin1Cat; + +public: + /** + * Construct a RuleBasedTokenizer from a set of rules supplied as a string. + * @param rules The break rules to be used. + * @param parseError In the event of a syntax error in the rules, provides the location + * within the rules of the problem. + * @param status Information on any errors encountered. + * @internal + */ + RuleBasedTokenizer(const UnicodeString &rules, UParseError &parseErr, UErrorCode &status); + + /** + * Constructor from a flattened set of RBBI data in uprv_malloc'd memory. + * RulesBasedBreakIterators built from a custom set of rules + * are created via this constructor; the rules are compiled + * into memory, then the break iterator is constructed here. + * + * The break iterator adopts the memory, and will + * free it when done. + * @internal + */ + RuleBasedTokenizer(uint8_t *data, UErrorCode &status); + + /** + * Destructor + * @internal + */ + virtual ~RuleBasedTokenizer(); + + /** + * Fetch the next set of tokens. + * @param maxTokens The maximum number of tokens to return. + * @param outTokenRanges Pointer to output array of token ranges. + * @param outTokenFlags (optional) pointer to output array of token flags. + * @internal + */ + int32_t tokenize(int32_t maxTokens, RuleBasedTokenRange *outTokenRanges, unsigned long *outTokenFlags); + +private: + /** + * Common initialization function, used by constructors. + * @internal + */ + void init(); +}; + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ + +#endif diff --git a/icuSources/common/resbund_cnv.cpp b/icuSources/common/resbund_cnv.cpp index b7eddbf3..a18e57e3 100644 --- a/icuSources/common/resbund_cnv.cpp +++ b/icuSources/common/resbund_cnv.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -42,30 +42,13 @@ ResourceBundle::constructForLocale(const UnicodeString& path, const Locale& locale, UErrorCode& error) { - char name[300]; - - if(path.length() >= (int32_t)sizeof(name)) { - fResource = NULL; - error = U_ILLEGAL_ARGUMENT_ERROR; - } else if(!path.isEmpty()) { - if(uprv_isInvariantUString(path.getBuffer(), path.length())) { - // the invariant converter is sufficient for package and tree names - // and is more efficient - path.extract(0, INT32_MAX, name, (int32_t)sizeof(name), US_INV); - } else { -#if !UCONFIG_NO_CONVERSION - // use the default converter to support variant-character paths - path.extract(name, sizeof(name), 0, error); -#else - // the default converter is not available - fResource = NULL; - error = U_UNSUPPORTED_ERROR; - return; -#endif - } - fResource = ures_open(name, locale.getName(), &error); - } else { - fResource = ures_open(0, locale.getName(), &error); + if (path.isEmpty()) { + fResource = ures_open(NULL, locale.getName(), &error); + } + else { + UnicodeString nullTerminatedPath(path); + nullTerminatedPath.append((UChar)0); + fResource = ures_openU(nullTerminatedPath.getBuffer(), locale.getName(), &error); } } diff --git a/icuSources/common/ruleiter.cpp b/icuSources/common/ruleiter.cpp index 7a084aa6..30f136c0 100644 --- a/icuSources/common/ruleiter.cpp +++ b/icuSources/common/ruleiter.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2004, International Business Machines +* Copyright (c) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -117,11 +117,13 @@ void RuleCharacterIterator::jumpahead(int32_t count) { _advance(count); } +/* UnicodeString& RuleCharacterIterator::toString(UnicodeString& result) const { int32_t b = pos.getIndex(); text.extract(0, b, result); - return result.append((UChar) 0x7C /*'|'*/).append(text, b, 0x7FFFFFFF); + return result.append((UChar) 0x7C).append(text, b, 0x7FFFFFFF); // Insert '|' at index } +*/ UChar32 RuleCharacterIterator::_current() const { if (buf != 0) { diff --git a/icuSources/common/ruleiter.h b/icuSources/common/ruleiter.h index 736b54ed..5c86020b 100644 --- a/icuSources/common/ruleiter.h +++ b/icuSources/common/ruleiter.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003, International Business Machines +* Copyright (c) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -11,7 +11,7 @@ #ifndef _RULEITER_H_ #define _RULEITER_H_ -#include "unicode/utypes.h" +#include "unicode/uobject.h" U_NAMESPACE_BEGIN @@ -26,7 +26,7 @@ class SymbolTable; * @author Alan Liu * @since ICU 2.8 */ -class U_COMMON_API RuleCharacterIterator { +class RuleCharacterIterator : public UMemory { // TODO: Ideas for later. (Do not implement if not needed, lest the // code coverage numbers go down due to unused methods.) @@ -131,7 +131,7 @@ public: /** * An opaque object representing the position of a RuleCharacterIterator. */ - struct Pos { + struct Pos : public UMemory { private: const UnicodeString* buf; int32_t pos; @@ -204,7 +204,7 @@ public: * @param result output parameter to receive a string * representation of this object */ - UnicodeString& toString(UnicodeString& result) const; +// UnicodeString& toString(UnicodeString& result) const; private: /** diff --git a/icuSources/common/icuserv.cpp b/icuSources/common/serv.cpp similarity index 99% rename from icuSources/common/icuserv.cpp rename to icuSources/common/serv.cpp index 7bb15812..c00b9c8f 100644 --- a/icuSources/common/icuserv.cpp +++ b/icuSources/common/serv.cpp @@ -9,7 +9,7 @@ #if !UCONFIG_NO_SERVICE -#include "icuserv.h" +#include "serv.h" #include "umutex.h" #undef SERVICE_REFCOUNT diff --git a/icuSources/common/icuserv.h b/icuSources/common/serv.h similarity index 98% rename from icuSources/common/icuserv.h rename to icuSources/common/serv.h index eeb4cbcc..72f0a9f4 100644 --- a/icuSources/common/icuserv.h +++ b/icuSources/common/serv.h @@ -1,6 +1,6 @@ /** ******************************************************************************* - * Copyright (C) 2001-2004, International Business Machines Corporation. * + * Copyright (C) 2001-2006, International Business Machines Corporation. * * All Rights Reserved. * ******************************************************************************* */ @@ -26,10 +26,11 @@ U_NAMESPACE_END #include "unicode/unistr.h" #include "unicode/locid.h" +#include "unicode/umisc.h" #include "hash.h" #include "uvector.h" -#include "icunotif.h" +#include "servnotf.h" class ICUServiceTest; @@ -203,7 +204,7 @@ public: */ /** - *

ICUServiceFactories generate the service objects maintained by the + *

An implementing ICUServiceFactory generates the service objects maintained by the * service. A factory generates a service object from a key, * updates id->factory mappings, and returns the display name for * a supported id.

@@ -251,9 +252,10 @@ class U_COMMON_API ICUServiceFactory : public UObject { /** *

Return, in result, the display name of the id in the provided locale. * This is an id, not a descriptor. If the id is - * not visible or not defined by the factory, sets result to bogus. If the + * not visible, sets result to bogus. If the * incoming result is bogus, it remains bogus. Result is returned as a - * convenience.

+ * convenience. Results are not defined if id is not one supported by this + * factory.

* * @param id a visible id supported by this factory. * @param locale the locale for which to generate the corresponding localized display name. @@ -310,7 +312,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { * @param status the error code status. * @return the service object, or NULL if the factory does not support the key. */ - UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; + virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; /** *

This implementation adds a mapping from ID -> this to result if visible is TRUE, @@ -319,7 +321,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { * @param result the mapping table to update. * @param status the error code status. */ - void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; + virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; /** *

This implementation returns the factory ID if it equals id and visible is TRUE, @@ -331,9 +333,9 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory { * @param result output parameter to hold the display name. * @return result. */ - UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const; + virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const; - public: +public: /** * UObject RTTI boilerplate. */ @@ -435,11 +437,6 @@ private: U_CAPI void U_EXPORT2 userv_deleteStringPair(void *obj); -/** - * Opaque type returned by registerInstance and registerFactory. - */ -typedef const void* URegistryKey; - /******************************************************************* * ICUService */ diff --git a/icuSources/common/servlk.cpp b/icuSources/common/servlk.cpp new file mode 100644 index 00000000..b6204148 --- /dev/null +++ b/icuSources/common/servlk.cpp @@ -0,0 +1,187 @@ +/** + ******************************************************************************* + * Copyright (C) 2001-2004, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE + +#include "unicode/resbund.h" +#include "uresimp.h" +#include "cmemory.h" +#include "servloc.h" +#include "ustrfmt.h" +#include "uhash.h" +#include "charstr.h" +#include "ucln_cmn.h" +#include "uassert.h" + +#define UNDERSCORE_CHAR ((UChar)0x005f) +#define AT_SIGN_CHAR ((UChar)64) +#define PERIOD_CHAR ((UChar)46) + +U_NAMESPACE_BEGIN + +LocaleKey* +LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID, + const UnicodeString* canonicalFallbackID, + UErrorCode& status) +{ + return LocaleKey::createWithCanonicalFallback(primaryID, canonicalFallbackID, KIND_ANY, status); +} + +LocaleKey* +LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID, + const UnicodeString* canonicalFallbackID, + int32_t kind, + UErrorCode& status) +{ + if (primaryID == NULL || U_FAILURE(status)) { + return NULL; + } + UnicodeString canonicalPrimaryID; + LocaleUtility::canonicalLocaleString(primaryID, canonicalPrimaryID); + return new LocaleKey(*primaryID, canonicalPrimaryID, canonicalFallbackID, kind); +} + +LocaleKey::LocaleKey(const UnicodeString& primaryID, + const UnicodeString& canonicalPrimaryID, + const UnicodeString* canonicalFallbackID, + int32_t kind) + : ICUServiceKey(primaryID) + , _kind(kind) + , _primaryID(canonicalPrimaryID) + , _fallbackID() + , _currentID() +{ + _fallbackID.setToBogus(); + if (_primaryID.length() != 0) { + if (canonicalFallbackID != NULL && _primaryID != *canonicalFallbackID) { + _fallbackID = *canonicalFallbackID; + } + } + + _currentID = _primaryID; +} + +LocaleKey::~LocaleKey() {} + +UnicodeString& +LocaleKey::prefix(UnicodeString& result) const { + if (_kind != KIND_ANY) { + UChar buffer[64]; + uprv_itou(buffer, 64, _kind, 10, 0); + UnicodeString temp(buffer); + result.append(temp); + } + return result; +} + +int32_t +LocaleKey::kind() const { + return _kind; +} + +UnicodeString& +LocaleKey::canonicalID(UnicodeString& result) const { + return result.append(_primaryID); +} + +UnicodeString& +LocaleKey::currentID(UnicodeString& result) const { + if (!_currentID.isBogus()) { + result.append(_currentID); + } + return result; +} + +UnicodeString& +LocaleKey::currentDescriptor(UnicodeString& result) const { + if (!_currentID.isBogus()) { + prefix(result).append(PREFIX_DELIMITER).append(_currentID); + } else { + result.setToBogus(); + } + return result; +} + +Locale& +LocaleKey::canonicalLocale(Locale& result) const { + return LocaleUtility::initLocaleFromName(_primaryID, result); +} + +Locale& +LocaleKey::currentLocale(Locale& result) const { + return LocaleUtility::initLocaleFromName(_currentID, result); +} + +UBool +LocaleKey::fallback() { + if (!_currentID.isBogus()) { + int x = _currentID.lastIndexOf(UNDERSCORE_CHAR); + if (x != -1) { + _currentID.remove(x); // truncate current or fallback, whichever we're pointing to + return TRUE; + } + + if (!_fallbackID.isBogus()) { + _currentID = _fallbackID; + _fallbackID.setToBogus(); + return TRUE; + } + + if (_currentID.length() > 0) { + _currentID.remove(0); // completely truncate + return TRUE; + } + + _currentID.setToBogus(); + } + + return FALSE; +} + +UBool +LocaleKey::isFallbackOf(const UnicodeString& id) const { + UnicodeString temp(id); + parseSuffix(temp); + return temp.indexOf(_primaryID) == 0 && + (temp.length() == _primaryID.length() || + temp.charAt(_primaryID.length()) == UNDERSCORE_CHAR); +} + +#ifdef SERVICE_DEBUG +UnicodeString& +LocaleKey::debug(UnicodeString& result) const +{ + ICUServiceKey::debug(result); + result.append(" kind: "); + result.append(_kind); + result.append(" primaryID: "); + result.append(_primaryID); + result.append(" fallbackID: "); + result.append(_fallbackID); + result.append(" currentID: "); + result.append(_currentID); + return result; +} + +UnicodeString& +LocaleKey::debugClass(UnicodeString& result) const +{ + return result.append("LocaleKey "); +} +#endif + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKey) + +U_NAMESPACE_END + +/* !UCONFIG_NO_SERVICE */ +#endif + + diff --git a/icuSources/common/servlkf.cpp b/icuSources/common/servlkf.cpp new file mode 100644 index 00000000..c455080f --- /dev/null +++ b/icuSources/common/servlkf.cpp @@ -0,0 +1,151 @@ +/** + ******************************************************************************* + * Copyright (C) 2001-2005, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE + +#include "unicode/resbund.h" +#include "uresimp.h" +#include "cmemory.h" +#include "servloc.h" +#include "ustrfmt.h" +#include "uhash.h" +#include "charstr.h" +#include "ucln_cmn.h" +#include "uassert.h" + +#define UNDERSCORE_CHAR ((UChar)0x005f) +#define AT_SIGN_CHAR ((UChar)64) +#define PERIOD_CHAR ((UChar)46) + + +U_NAMESPACE_BEGIN + +LocaleKeyFactory::LocaleKeyFactory(int32_t coverage) + : _name() + , _coverage(coverage) +{ +} + +LocaleKeyFactory::LocaleKeyFactory(int32_t coverage, const UnicodeString& name) + : _name(name) + , _coverage(coverage) +{ +} + +LocaleKeyFactory::~LocaleKeyFactory() { +} + +UObject* +LocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const { + if (handlesKey(key, status)) { + const LocaleKey& lkey = (const LocaleKey&)key; + int32_t kind = lkey.kind(); + Locale loc; + lkey.currentLocale(loc); + + return handleCreate(loc, kind, service, status); + } + return NULL; +} + +UBool +LocaleKeyFactory::handlesKey(const ICUServiceKey& key, UErrorCode& status) const { + const Hashtable* supported = getSupportedIDs(status); + if (supported) { + UnicodeString id; + key.currentID(id); + return supported->get(id) != NULL; + } + return FALSE; +} + +void +LocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const { + const Hashtable* supported = getSupportedIDs(status); + if (supported) { + UBool visible = (_coverage & 0x1) == 0; + + const UHashElement* elem = NULL; + int32_t pos = 0; + while ((elem = supported->nextElement(pos)) != NULL) { + const UnicodeString& id = *((const UnicodeString*)elem->key.pointer); + if (!visible) { + result.remove(id); + } else { + result.put(id, (void*)this, status); // this is dummy non-void marker used for set semantics + if (U_FAILURE(status)) { + break; + } + } + } + } +} + +UnicodeString& +LocaleKeyFactory::getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const { + if ((_coverage & 0x1) == 0) { + //UErrorCode status = U_ZERO_ERROR; + // assume if this is called on us, we support some fallback of this id + // if (isSupportedID(id, status)) { + Locale loc; + LocaleUtility::initLocaleFromName(id, loc); + return loc.getDisplayName(locale, result); + // } + } + result.setToBogus(); + return result; +} + +UObject* +LocaleKeyFactory::handleCreate(const Locale& /* loc */, + int32_t /* kind */, + const ICUService* /* service */, + UErrorCode& /* status */) const { + return NULL; +} + +//UBool +//LocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& status) const { +// const Hashtable* ids = getSupportedIDs(status); +// return ids && ids->get(id); +//} + +const Hashtable* +LocaleKeyFactory::getSupportedIDs(UErrorCode& /* status */) const { + return NULL; +} + +#ifdef SERVICE_DEBUG +UnicodeString& +LocaleKeyFactory::debug(UnicodeString& result) const +{ + debugClass(result); + result.append(", name: "); + result.append(_name); + result.append(", coverage: "); + result.append(_coverage); + return result; +} + +UnicodeString& +LocaleKeyFactory::debugClass(UnicodeString& result) const +{ + return result.append("LocaleKeyFactory"); +} +#endif + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKeyFactory) + +U_NAMESPACE_END + +/* !UCONFIG_NO_SERVICE */ +#endif + + diff --git a/icuSources/common/iculserv.h b/icuSources/common/servloc.h similarity index 92% rename from icuSources/common/iculserv.h rename to icuSources/common/servloc.h index 1798e200..d08b09e3 100644 --- a/icuSources/common/iculserv.h +++ b/icuSources/common/servloc.h @@ -1,6 +1,6 @@ /** ******************************************************************************* - * Copyright (C) 2001-2004, International Business Machines Corporation and * + * Copyright (C) 2001-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -32,7 +32,8 @@ U_NAMESPACE_END #include "hash.h" #include "uvector.h" -#include "icuserv.h" +#include "serv.h" +#include "locutil.h" U_NAMESPACE_BEGIN @@ -68,7 +69,9 @@ class U_COMMON_API LocaleKey : public ICUServiceKey { UnicodeString _currentID; public: - static const int32_t KIND_ANY; // = -1; + enum { + KIND_ANY = -1 + }; /** * Create a LocaleKey with canonical primary and fallback IDs. @@ -243,12 +246,12 @@ public: * Override of superclass method. This adjusts the result based * on the coverage rule for this factory. */ - void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; + virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; /** * Return a localized name for the locale represented by id. */ - UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const; + virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const; protected: /** @@ -261,7 +264,7 @@ protected: * Return true if this id is one the factory supports (visible or * otherwise). */ - virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const; + // virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const; /** * Return the set of ids that this factory supports (visible or @@ -319,19 +322,19 @@ class U_COMMON_API SimpleLocaleKeyFactory : public LocaleKeyFactory { /** * Override of superclass method. Returns the service object if kind/locale match. Service is not used. */ - UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; + virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; /** * Override of superclass method. This adjusts the result based * on the coverage rule for this factory. */ - void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; + virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const; protected: /** * Return true if this id is equal to the locale name. */ - virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const; + //virtual UBool isSupportedID(const UnicodeString& id, UErrorCode& status) const; public: @@ -537,18 +540,6 @@ class U_COMMON_API ICULocaleService : public ICUService friend class ServiceEnumeration; }; -// temporary utility functions, till I know where to find them -// in header so tests can also access them - -class U_COMMON_API LocaleUtility { -public: - static UnicodeString& canonicalLocaleString(const UnicodeString* id, UnicodeString& result); - static Locale& initLocaleFromName(const UnicodeString& id, Locale& result); - static UnicodeString& initNameFromLocale(const Locale& locale, UnicodeString& result); - static const Hashtable* getAvailableLocaleNames(const UnicodeString& bundleID); - static UBool isFallbackOf(const UnicodeString& root, const UnicodeString& child); -}; - U_NAMESPACE_END /* UCONFIG_NO_SERVICE */ diff --git a/icuSources/common/servls.cpp b/icuSources/common/servls.cpp new file mode 100644 index 00000000..b39e72ed --- /dev/null +++ b/icuSources/common/servls.cpp @@ -0,0 +1,297 @@ +/** + ******************************************************************************* + * Copyright (C) 2001-2004, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE + +#include "unicode/resbund.h" +#include "uresimp.h" +#include "cmemory.h" +#include "servloc.h" +#include "ustrfmt.h" +#include "uhash.h" +#include "charstr.h" +#include "ucln_cmn.h" +#include "uassert.h" + +#define UNDERSCORE_CHAR ((UChar)0x005f) +#define AT_SIGN_CHAR ((UChar)64) +#define PERIOD_CHAR ((UChar)46) + +U_NAMESPACE_BEGIN + +ICULocaleService::ICULocaleService() + : fallbackLocale(Locale::getDefault()) + , llock(0) +{ + umtx_init(&llock); +} + +ICULocaleService::ICULocaleService(const UnicodeString& dname) + : ICUService(dname) + , fallbackLocale(Locale::getDefault()) + , llock(0) +{ + umtx_init(&llock); +} + +ICULocaleService::~ICULocaleService() +{ + umtx_destroy(&llock); +} + +UObject* +ICULocaleService::get(const Locale& locale, UErrorCode& status) const +{ + return get(locale, LocaleKey::KIND_ANY, NULL, status); +} + +UObject* +ICULocaleService::get(const Locale& locale, int32_t kind, UErrorCode& status) const +{ + return get(locale, kind, NULL, status); +} + +UObject* +ICULocaleService::get(const Locale& locale, Locale* actualReturn, UErrorCode& status) const +{ + return get(locale, LocaleKey::KIND_ANY, actualReturn, status); +} + +UObject* +ICULocaleService::get(const Locale& locale, int32_t kind, Locale* actualReturn, UErrorCode& status) const +{ + UObject* result = NULL; + if (U_FAILURE(status)) { + return result; + } + + UnicodeString locName(locale.getName(), -1, US_INV); + if (locName.isBogus()) { + status = U_MEMORY_ALLOCATION_ERROR; + } else { + ICUServiceKey* key = createKey(&locName, kind, status); + if (key) { + if (actualReturn == NULL) { + result = getKey(*key, status); + } else { + UnicodeString temp; + result = getKey(*key, &temp, status); + + if (result != NULL) { + key->parseSuffix(temp); + LocaleUtility::initLocaleFromName(temp, *actualReturn); + } + } + delete key; + } + } + return result; +} + + +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, + UBool visible, UErrorCode& status) +{ + Locale loc; + LocaleUtility::initLocaleFromName(locale, loc); + return registerInstance(objToAdopt, loc, LocaleKey::KIND_ANY, + visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE, status); +} + +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, UErrorCode& status) +{ + return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, LocaleKeyFactory::VISIBLE, status); +} + +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, UErrorCode& status) +{ + return registerInstance(objToAdopt, locale, kind, LocaleKeyFactory::VISIBLE, status); +} + +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const Locale& locale, int32_t kind, int32_t coverage, UErrorCode& status) +{ + ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage); + if (factory != NULL) { + return registerFactory(factory, status); + } + delete objToAdopt; + return NULL; +} + +#if 0 +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UErrorCode& status) +{ + return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, LocaleKeyFactory::VISIBLE, status); +} + +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status) +{ + return registerInstance(objToAdopt, locale, LocaleKey::KIND_ANY, + visible ? LocaleKeyFactory::VISIBLE : LocaleKeyFactory::INVISIBLE, + status); +} + +URegistryKey +ICULocaleService::registerInstance(UObject* objToAdopt, const UnicodeString& locale, int32_t kind, int32_t coverage, UErrorCode& status) +{ + ICUServiceFactory * factory = new SimpleLocaleKeyFactory(objToAdopt, locale, kind, coverage); + if (factory != NULL) { + return registerFactory(factory, status); + } + delete objToAdopt; + return NULL; +} +#endif + +class ServiceEnumeration : public StringEnumeration { +private: + const ICULocaleService* _service; + int32_t _timestamp; + UVector _ids; + int32_t _pos; + +private: + ServiceEnumeration(const ICULocaleService* service, UErrorCode &status) + : _service(service) + , _timestamp(service->getTimestamp()) + , _ids(uhash_deleteUnicodeString, NULL, status) + , _pos(0) + { + _service->getVisibleIDs(_ids, status); + } + + ServiceEnumeration(const ServiceEnumeration &other, UErrorCode &status) + : _service(other._service) + , _timestamp(other._timestamp) + , _ids(uhash_deleteUnicodeString, NULL, status) + , _pos(0) + { + if(U_SUCCESS(status)) { + int32_t i, length; + + length = other._ids.size(); + for(i = 0; i < length; ++i) { + _ids.addElement(((UnicodeString *)other._ids.elementAt(i))->clone(), status); + } + + if(U_SUCCESS(status)) { + _pos = other._pos; + } + } + } + +public: + static ServiceEnumeration* create(const ICULocaleService* service) { + UErrorCode status = U_ZERO_ERROR; + ServiceEnumeration* result = new ServiceEnumeration(service, status); + if (U_SUCCESS(status)) { + return result; + } + delete result; + return NULL; + } + + virtual ~ServiceEnumeration() {} + + virtual StringEnumeration *clone() const { + UErrorCode status = U_ZERO_ERROR; + ServiceEnumeration *cl = new ServiceEnumeration(*this, status); + if(U_FAILURE(status)) { + delete cl; + cl = NULL; + } + return cl; + } + + UBool upToDate(UErrorCode& status) const { + if (U_SUCCESS(status)) { + if (_timestamp == _service->getTimestamp()) { + return TRUE; + } + status = U_ENUM_OUT_OF_SYNC_ERROR; + } + return FALSE; + } + + virtual int32_t count(UErrorCode& status) const { + return upToDate(status) ? _ids.size() : 0; + } + + virtual const UnicodeString* snext(UErrorCode& status) { + if (upToDate(status) && (_pos < _ids.size())) { + return (const UnicodeString*)_ids[_pos++]; + } + return NULL; + } + + virtual void reset(UErrorCode& status) { + if (status == U_ENUM_OUT_OF_SYNC_ERROR) { + status = U_ZERO_ERROR; + } + if (U_SUCCESS(status)) { + _timestamp = _service->getTimestamp(); + _pos = 0; + _service->getVisibleIDs(_ids, status); + } + } + +public: + static UClassID U_EXPORT2 getStaticClassID(void); + virtual UClassID getDynamicClassID(void) const; +}; + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ServiceEnumeration) + +StringEnumeration* +ICULocaleService::getAvailableLocales(void) const +{ + return ServiceEnumeration::create(this); +} + +const UnicodeString& +ICULocaleService::validateFallbackLocale() const +{ + const Locale& loc = Locale::getDefault(); + ICULocaleService* ncThis = (ICULocaleService*)this; + { + Mutex mutex(&ncThis->llock); + if (loc != fallbackLocale) { + ncThis->fallbackLocale = loc; + LocaleUtility::initNameFromLocale(loc, ncThis->fallbackLocaleName); + ncThis->clearServiceCache(); + } + } + return fallbackLocaleName; +} + +ICUServiceKey* +ICULocaleService::createKey(const UnicodeString* id, UErrorCode& status) const +{ + return LocaleKey::createWithCanonicalFallback(id, &validateFallbackLocale(), status); +} + +ICUServiceKey* +ICULocaleService::createKey(const UnicodeString* id, int32_t kind, UErrorCode& status) const +{ + return LocaleKey::createWithCanonicalFallback(id, &validateFallbackLocale(), kind, status); +} + +U_NAMESPACE_END + +/* !UCONFIG_NO_SERVICE */ +#endif + + diff --git a/icuSources/common/servnotf.cpp b/icuSources/common/servnotf.cpp new file mode 100644 index 00000000..6adf52ec --- /dev/null +++ b/icuSources/common/servnotf.cpp @@ -0,0 +1,118 @@ +/** + ******************************************************************************* + * Copyright (C) 2001-2006, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE + +#include "servnotf.h" +#ifdef NOTIFIER_DEBUG +#include +#endif + +U_NAMESPACE_BEGIN + +EventListener::~EventListener() {} +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(EventListener) + +ICUNotifier::ICUNotifier(void) +: notifyLock(0), listeners(NULL) +{ + umtx_init(¬ifyLock); +} + +ICUNotifier::~ICUNotifier(void) { + { + Mutex lmx(¬ifyLock); + delete listeners; + listeners = NULL; + } + umtx_destroy(¬ifyLock); +} + + +void +ICUNotifier::addListener(const EventListener* l, UErrorCode& status) +{ + if (U_SUCCESS(status)) { + if (l == NULL) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + if (acceptsListener(*l)) { + Mutex lmx(¬ifyLock); + if (listeners == NULL) { + listeners = new UVector(5, status); + } else { + for (int i = 0, e = listeners->size(); i < e; ++i) { + const EventListener* el = (const EventListener*)(listeners->elementAt(i)); + if (l == el) { + return; + } + } + } + + listeners->addElement((void*)l, status); // cast away const + } +#ifdef NOTIFIER_DEBUG + else { + fprintf(stderr, "Listener invalid for this notifier."); + exit(1); + } +#endif + } +} + +void +ICUNotifier::removeListener(const EventListener *l, UErrorCode& status) +{ + if (U_SUCCESS(status)) { + if (l == NULL) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + { + Mutex lmx(¬ifyLock); + if (listeners != NULL) { + // identity equality check + for (int i = 0, e = listeners->size(); i < e; ++i) { + const EventListener* el = (const EventListener*)listeners->elementAt(i); + if (l == el) { + listeners->removeElementAt(i); + if (listeners->size() == 0) { + delete listeners; + listeners = NULL; + } + return; + } + } + } + } + } +} + +void +ICUNotifier::notifyChanged(void) +{ + if (listeners != NULL) { + Mutex lmx(¬ifyLock); + if (listeners != NULL) { + for (int i = 0, e = listeners->size(); i < e; ++i) { + EventListener* el = (EventListener*)listeners->elementAt(i); + notifyListener(*el); + } + } + } +} + +U_NAMESPACE_END + +/* UCONFIG_NO_SERVICE */ +#endif + diff --git a/icuSources/common/icunotif.h b/icuSources/common/servnotf.h similarity index 100% rename from icuSources/common/icunotif.h rename to icuSources/common/servnotf.h diff --git a/icuSources/common/servrbf.cpp b/icuSources/common/servrbf.cpp new file mode 100644 index 00000000..3a0227f7 --- /dev/null +++ b/icuSources/common/servrbf.cpp @@ -0,0 +1,94 @@ +/** + ******************************************************************************* + * Copyright (C) 2001-2005, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE + +#include "unicode/resbund.h" +#include "uresimp.h" +#include "cmemory.h" +#include "servloc.h" +#include "ustrfmt.h" +#include "uhash.h" +#include "charstr.h" +#include "ucln_cmn.h" +#include "uassert.h" + +#define UNDERSCORE_CHAR ((UChar)0x005f) +#define AT_SIGN_CHAR ((UChar)64) +#define PERIOD_CHAR ((UChar)46) + +U_NAMESPACE_BEGIN + +ICUResourceBundleFactory::ICUResourceBundleFactory() + : LocaleKeyFactory(VISIBLE) + , _bundleName() +{ +} + +ICUResourceBundleFactory::ICUResourceBundleFactory(const UnicodeString& bundleName) + : LocaleKeyFactory(VISIBLE) + , _bundleName(bundleName) +{ +} + +ICUResourceBundleFactory::~ICUResourceBundleFactory() {} + +const Hashtable* +ICUResourceBundleFactory::getSupportedIDs(UErrorCode& status) const +{ + if (U_SUCCESS(status)) { + return LocaleUtility::getAvailableLocaleNames(_bundleName); + } + return NULL; +} + +UObject* +ICUResourceBundleFactory::handleCreate(const Locale& loc, int32_t /* kind */, const ICUService* /* service */, UErrorCode& status) const +{ + if (U_SUCCESS(status)) { + // _bundleName is a package name + // and should only contain invariant characters + // ??? is it always true that the max length of the bundle name is 19? + // who made this change? -- dlf + char pkg[20]; + int32_t length; + length=_bundleName.extract(0, INT32_MAX, pkg, (int32_t)sizeof(pkg), US_INV); + if(length>=(int32_t)sizeof(pkg)) { + return NULL; + } + return new ResourceBundle(pkg, loc, status); + } + return NULL; +} + +#ifdef SERVICE_DEBUG +UnicodeString& +ICUResourceBundleFactory::debug(UnicodeString& result) const +{ + LocaleKeyFactory::debug(result); + result.append(", bundle: "); + return result.append(_bundleName); +} + +UnicodeString& +ICUResourceBundleFactory::debugClass(UnicodeString& result) const +{ + return result.append("ICUResourceBundleFactory"); +} +#endif + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICUResourceBundleFactory) + +U_NAMESPACE_END + +/* !UCONFIG_NO_SERVICE */ +#endif + + diff --git a/icuSources/common/servslkf.cpp b/icuSources/common/servslkf.cpp new file mode 100644 index 00000000..b8afaaad --- /dev/null +++ b/icuSources/common/servslkf.cpp @@ -0,0 +1,122 @@ +/** + ******************************************************************************* + * Copyright (C) 2001-2005, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + ******************************************************************************* + */ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_SERVICE + +#include "unicode/resbund.h" +#include "uresimp.h" +#include "cmemory.h" +#include "servloc.h" +#include "ustrfmt.h" +#include "uhash.h" +#include "charstr.h" +#include "ucln_cmn.h" +#include "uassert.h" + +#define UNDERSCORE_CHAR ((UChar)0x005f) +#define AT_SIGN_CHAR ((UChar)64) +#define PERIOD_CHAR ((UChar)46) + +U_NAMESPACE_BEGIN + +/* + ****************************************************************** + */ + +SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, + const UnicodeString& locale, + int32_t kind, + int32_t coverage) + : LocaleKeyFactory(coverage) + , _obj(objToAdopt) + , _id(locale) + , _kind(kind) +{ +} + +SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt, + const Locale& locale, + int32_t kind, + int32_t coverage) + : LocaleKeyFactory(coverage) + , _obj(objToAdopt) + , _id() + , _kind(kind) +{ + LocaleUtility::initNameFromLocale(locale, _id); +} + +SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory() +{ + delete _obj; + _obj = NULL; +} + +UObject* +SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const +{ + if (U_SUCCESS(status)) { + const LocaleKey& lkey = (const LocaleKey&)key; + if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) { + UnicodeString keyID; + lkey.currentID(keyID); + if (_id == keyID) { + return service->cloneInstance(_obj); + } + } + } + return NULL; +} + +//UBool +//SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const +//{ +// return id == _id; +//} + +void +SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const +{ + if (U_SUCCESS(status)) { + if (_coverage & 0x1) { + result.remove(_id); + } else { + result.put(_id, (void*)this, status); + } + } +} + +#ifdef SERVICE_DEBUG +UnicodeString& +SimpleLocaleKeyFactory::debug(UnicodeString& result) const +{ + LocaleKeyFactory::debug(result); + result.append(", id: "); + result.append(_id); + result.append(", kind: "); + result.append(_kind); + return result; +} + +UnicodeString& +SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const +{ + return result.append("SimpleLocaleKeyFactory"); +} +#endif + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory) + +U_NAMESPACE_END + +/* !UCONFIG_NO_SERVICE */ +#endif + + diff --git a/icuSources/common/sprpimpl.h b/icuSources/common/sprpimpl.h index 50d7c350..1422cc3a 100644 --- a/icuSources/common/sprpimpl.h +++ b/icuSources/common/sprpimpl.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -27,6 +27,7 @@ #include "unicode/udata.h" #include "utrie.h" #include "udataswp.h" +#include "ubidi_props.h" #define _SPREP_DATA_TYPE "spp" @@ -87,8 +88,9 @@ struct UStringPrepProfile{ UTrie sprepTrie; const uint16_t* mappingData; UDataMemory* sprepData; - UBool isDataLoaded; + const UBiDiProps *bdp; /* used only if checkBiDi is set */ int32_t refCount; + UBool isDataLoaded; UBool doNFKC; UBool checkBiDi; }; diff --git a/icuSources/common/triedict.cpp b/icuSources/common/triedict.cpp new file mode 100644 index 00000000..2c58a550 --- /dev/null +++ b/icuSources/common/triedict.cpp @@ -0,0 +1,1407 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "triedict.h" +#include "unicode/chariter.h" +#include "unicode/uchriter.h" +#include "unicode/strenum.h" +#include "unicode/uenum.h" +#include "unicode/udata.h" +#include "cmemory.h" +#include "udataswp.h" +#include "uvector.h" +#include "uvectr32.h" +#include "uarrsort.h" + +//#define DEBUG_TRIE_DICT 1 + +#ifdef DEBUG_TRIE_DICT +#include +#include +#include +#endif + +U_NAMESPACE_BEGIN + +/******************************************************************* + * TrieWordDictionary + */ + +TrieWordDictionary::TrieWordDictionary() { +} + +TrieWordDictionary::~TrieWordDictionary() { +} + +/******************************************************************* + * MutableTrieDictionary + */ + +// Node structure for the ternary, uncompressed trie +struct TernaryNode : public UMemory { + UChar ch; // UTF-16 code unit + uint16_t flags; // Flag word + TernaryNode *low; // Less-than link + TernaryNode *equal; // Equal link + TernaryNode *high; // Greater-than link + + TernaryNode(UChar uc); + ~TernaryNode(); +}; + +enum MutableTrieNodeFlags { + kEndsWord = 0x0001 // This node marks the end of a valid word +}; + +inline +TernaryNode::TernaryNode(UChar uc) { + ch = uc; + flags = 0; + low = NULL; + equal = NULL; + high = NULL; +} + +// Not inline since it's recursive +TernaryNode::~TernaryNode() { + delete low; + delete equal; + delete high; +} + +MutableTrieDictionary::MutableTrieDictionary( UChar median, UErrorCode &status ) { + // Start the trie off with something. Having the root node already present + // cuts a special case out of the search/insertion functions. + // Making it a median character cuts the worse case for searches from + // 4x a balanced trie to 2x a balanced trie. It's best to choose something + // that starts a word that is midway in the list. + fTrie = new TernaryNode(median); + if (fTrie == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + fIter = utext_openUChars(NULL, NULL, 0, &status); + if (U_SUCCESS(status) && fIter == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } +} + +MutableTrieDictionary::MutableTrieDictionary( UErrorCode &status ) { + fTrie = NULL; + fIter = utext_openUChars(NULL, NULL, 0, &status); + if (U_SUCCESS(status) && fIter == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } +} + +MutableTrieDictionary::~MutableTrieDictionary() { + delete fTrie; + utext_close(fIter); +} + +int32_t +MutableTrieDictionary::search( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit, + TernaryNode *&parent, + UBool &pMatched ) const { + // TODO: current implementation works in UTF-16 space + const TernaryNode *up = NULL; + const TernaryNode *p = fTrie; + int mycount = 0; + pMatched = TRUE; + int i; + + UChar uc = utext_current32(text); + for (i = 0; i < maxLength && p != NULL; ++i) { + while (p != NULL) { + if (uc < p->ch) { + up = p; + p = p->low; + } + else if (uc == p->ch) { + break; + } + else { + up = p; + p = p->high; + } + } + if (p == NULL) { + pMatched = FALSE; + break; + } + // Must be equal to get here + if (limit > 0 && (p->flags & kEndsWord)) { + lengths[mycount++] = i+1; + --limit; + } + up = p; + p = p->equal; + uc = utext_next32(text); + uc = utext_current32(text); + } + + // Note that there is no way to reach here with up == 0 unless + // maxLength is 0 coming in. + parent = (TernaryNode *)up; + count = mycount; + return i; +} + +void +MutableTrieDictionary::addWord( const UChar *word, + int32_t length, + UErrorCode &status ) { +#if 0 + if (length <= 0) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } +#endif + TernaryNode *parent; + UBool pMatched; + int count; + fIter = utext_openUChars(fIter, word, length, &status); + + int matched; + matched = search(fIter, length, NULL, count, 0, parent, pMatched); + + while (matched++ < length) { + UChar32 uc = utext_next32(fIter); // TODO: supplemetary support? + U_ASSERT(uc != U_SENTINEL); + TernaryNode *newNode = new TernaryNode(uc); + if (newNode == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + if (pMatched) { + parent->equal = newNode; + } + else { + pMatched = TRUE; + if (uc < parent->ch) { + parent->low = newNode; + } + else { + parent->high = newNode; + } + } + parent = newNode; + } + + parent->flags |= kEndsWord; +} + +#if 0 +void +MutableTrieDictionary::addWords( UEnumeration *words, + UErrorCode &status ) { + int32_t length; + const UChar *word; + while ((word = uenum_unext(words, &length, &status)) && U_SUCCESS(status)) { + addWord(word, length, status); + } +} +#endif + +int32_t +MutableTrieDictionary::matches( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit ) const { + TernaryNode *parent; + UBool pMatched; + return search(text, maxLength, lengths, count, limit, parent, pMatched); +} + +// Implementation of iteration for MutableTrieDictionary +class MutableTrieEnumeration : public StringEnumeration { +private: + UStack fNodeStack; // Stack of nodes to process + UVector32 fBranchStack; // Stack of which branch we are working on + TernaryNode *fRoot; // Root node + static const char fgClassID; + enum StackBranch { + kLessThan, + kEqual, + kGreaterThan, + kDone + }; + +public: + static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; } + virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } +public: + MutableTrieEnumeration(TernaryNode *root, UErrorCode &status) + : fNodeStack(status), fBranchStack(status) { + fRoot = root; + fNodeStack.push(root, status); + fBranchStack.push(kLessThan, status); + unistr.remove(); + } + + virtual ~MutableTrieEnumeration() { + } + + virtual StringEnumeration *clone() const { + UErrorCode status = U_ZERO_ERROR; + return new MutableTrieEnumeration(fRoot, status); + } + + virtual const UnicodeString *snext(UErrorCode &status) { + if (fNodeStack.empty() || U_FAILURE(status)) { + return NULL; + } + TernaryNode *node = (TernaryNode *) fNodeStack.peek(); + StackBranch where = (StackBranch) fBranchStack.peeki(); + while (!fNodeStack.empty() && U_SUCCESS(status)) { + UBool emit; + UBool equal; + + switch (where) { + case kLessThan: + if (node->low != NULL) { + fBranchStack.setElementAt(kEqual, fBranchStack.size()-1); + node = (TernaryNode *) fNodeStack.push(node->low, status); + where = (StackBranch) fBranchStack.push(kLessThan, status); + break; + } + case kEqual: + emit = (node->flags & kEndsWord) != 0; + equal = (node->equal != NULL); + // If this node should be part of the next emitted string, append + // the UChar to the string, and make sure we pop it when we come + // back to this node. The character should only be in the string + // for as long as we're traversing the equal subtree of this node + if (equal || emit) { + unistr.append(node->ch); + fBranchStack.setElementAt(kGreaterThan, fBranchStack.size()-1); + } + if (equal) { + node = (TernaryNode *) fNodeStack.push(node->equal, status); + where = (StackBranch) fBranchStack.push(kLessThan, status); + } + if (emit) { + return &unistr; + } + if (equal) { + break; + } + case kGreaterThan: + // If this node's character is in the string, remove it. + if (node->equal != NULL || (node->flags & kEndsWord)) { + unistr.truncate(unistr.length()-1); + } + if (node->high != NULL) { + fBranchStack.setElementAt(kDone, fBranchStack.size()-1); + node = (TernaryNode *) fNodeStack.push(node->high, status); + where = (StackBranch) fBranchStack.push(kLessThan, status); + break; + } + case kDone: + fNodeStack.pop(); + fBranchStack.popi(); + node = (TernaryNode *) fNodeStack.peek(); + where = (StackBranch) fBranchStack.peeki(); + break; + default: + return NULL; + } + } + return NULL; + } + + // Very expensive, but this should never be used. + virtual int32_t count(UErrorCode &status) const { + MutableTrieEnumeration counter(fRoot, status); + int32_t result = 0; + while (counter.snext(status) != NULL && U_SUCCESS(status)) { + ++result; + } + return result; + } + + virtual void reset(UErrorCode &status) { + fNodeStack.removeAllElements(); + fBranchStack.removeAllElements(); + fNodeStack.push(fRoot, status); + fBranchStack.push(kLessThan, status); + unistr.remove(); + } +}; + +const char MutableTrieEnumeration::fgClassID = '\0'; + +StringEnumeration * +MutableTrieDictionary::openWords( UErrorCode &status ) const { + if (U_FAILURE(status)) { + return NULL; + } + return new MutableTrieEnumeration(fTrie, status); +} + +/******************************************************************* + * CompactTrieDictionary + */ + +struct CompactTrieHeader { + uint32_t size; // Size of the data in bytes + uint32_t magic; // Magic number (including version) + uint16_t nodeCount; // Number of entries in offsets[] + uint16_t root; // Node number of the root node + uint32_t offsets[1]; // Offsets to nodes from start of data +}; + +// Note that to avoid platform-specific alignment issues, all members of the node +// structures should be the same size, or should contain explicit padding to +// natural alignment boundaries. + +// We can't use a bitfield for the flags+count field, because the layout of those +// is not portable. 12 bits of count allows for up to 4096 entries in a node. +struct CompactTrieNode { + uint16_t flagscount; // Count of sub-entries, plus flags +}; + +enum CompactTrieNodeFlags { + kVerticalNode = 0x1000, // This is a vertical node + kParentEndsWord = 0x2000, // The node whose equal link points to this ends a word + kReservedFlag1 = 0x4000, + kReservedFlag2 = 0x8000, + kCountMask = 0x0FFF, // The count portion of flagscount + kFlagMask = 0xF000 // The flags portion of flagscount +}; + +// The two node types are distinguished by the kVerticalNode flag. + +struct CompactTrieHorizontalEntry { + uint16_t ch; // UChar + uint16_t equal; // Equal link node index +}; + +// We don't use inheritance here because C++ does not guarantee that the +// base class comes first in memory!! + +struct CompactTrieHorizontalNode { + uint16_t flagscount; // Count of sub-entries, plus flags + CompactTrieHorizontalEntry entries[1]; +}; + +struct CompactTrieVerticalNode { + uint16_t flagscount; // Count of sub-entries, plus flags + uint16_t equal; // Equal link node index + uint16_t chars[1]; // Code units +}; + +// {'Dic', 1}, version 1 +#define COMPACT_TRIE_MAGIC_1 0x44696301 + +CompactTrieDictionary::CompactTrieDictionary(UDataMemory *dataObj, + UErrorCode &status ) +: fUData(dataObj) +{ + fData = (const CompactTrieHeader *) udata_getMemory(dataObj); + fOwnData = FALSE; + if (fData->magic != COMPACT_TRIE_MAGIC_1) { + status = U_ILLEGAL_ARGUMENT_ERROR; + fData = NULL; + } +} +CompactTrieDictionary::CompactTrieDictionary( const void *data, + UErrorCode &status ) +: fUData(NULL) +{ + fData = (const CompactTrieHeader *) data; + fOwnData = FALSE; + if (fData->magic != COMPACT_TRIE_MAGIC_1) { + status = U_ILLEGAL_ARGUMENT_ERROR; + fData = NULL; + } +} + +CompactTrieDictionary::CompactTrieDictionary( const MutableTrieDictionary &dict, + UErrorCode &status ) +: fUData(NULL) +{ + fData = compactMutableTrieDictionary(dict, status); + fOwnData = !U_FAILURE(status); +} + +CompactTrieDictionary::~CompactTrieDictionary() { + if (fOwnData) { + uprv_free((void *)fData); + } + if (fUData) { + udata_close(fUData); + } +} + +uint32_t +CompactTrieDictionary::dataSize() const { + return fData->size; +} + +const void * +CompactTrieDictionary::data() const { + return fData; +} + +// This function finds the address of a node for us, given its node ID +static inline const CompactTrieNode * +getCompactNode(const CompactTrieHeader *header, uint16_t node) { + return (const CompactTrieNode *)((const uint8_t *)header + header->offsets[node]); +} + +int32_t +CompactTrieDictionary::matches( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit ) const { + // TODO: current implementation works in UTF-16 space + const CompactTrieNode *node = getCompactNode(fData, fData->root); + int mycount = 0; + + UChar uc = utext_current32(text); + int i = 0; + + while (node != NULL) { + // Check if the node we just exited ends a word + if (limit > 0 && (node->flagscount & kParentEndsWord)) { + lengths[mycount++] = i; + --limit; + } + // Check that we haven't exceeded the maximum number of input characters. + // We have to do that here rather than in the while condition so that + // we can check for ending a word, above. + if (i >= maxLength) { + break; + } + + int nodeCount = (node->flagscount & kCountMask); + if (nodeCount == 0) { + // Special terminal node; return now + break; + } + if (node->flagscount & kVerticalNode) { + // Vertical node; check all the characters in it + const CompactTrieVerticalNode *vnode = (const CompactTrieVerticalNode *)node; + for (int j = 0; j < nodeCount && i < maxLength; ++j) { + if (uc != vnode->chars[j]) { + // We hit a non-equal character; return + goto exit; + } + utext_next32(text); + uc = utext_current32(text); + ++i; + } + // To get here we must have come through the whole list successfully; + // go on to the next node. Note that a word cannot end in the middle + // of a vertical node. + node = getCompactNode(fData, vnode->equal); + } + else { + // Horizontal node; do binary search + const CompactTrieHorizontalNode *hnode = (const CompactTrieHorizontalNode *)node; + int low = 0; + int high = nodeCount-1; + int middle; + node = NULL; // If we don't find a match, we'll fall out of the loop + while (high >= low) { + middle = (high+low)/2; + if (uc == hnode->entries[middle].ch) { + // We hit a match; get the next node and next character + node = getCompactNode(fData, hnode->entries[middle].equal); + utext_next32(text); + uc = utext_current32(text); + ++i; + break; + } + else if (uc < hnode->entries[middle].ch) { + high = middle-1; + } + else { + low = middle+1; + } + } + } + } +exit: + count = mycount; + return i; +} + +// Implementation of iteration for CompactTrieDictionary +class CompactTrieEnumeration : public StringEnumeration { +private: + UVector32 fNodeStack; // Stack of nodes to process + UVector32 fIndexStack; // Stack of where in node we are + const CompactTrieHeader *fHeader; // Trie data + static const char fgClassID; + +public: + static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; } + virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } +public: + CompactTrieEnumeration(const CompactTrieHeader *header, UErrorCode &status) + : fNodeStack(status), fIndexStack(status) { + fHeader = header; + fNodeStack.push(header->root, status); + fIndexStack.push(0, status); + unistr.remove(); + } + + virtual ~CompactTrieEnumeration() { + } + + virtual StringEnumeration *clone() const { + UErrorCode status = U_ZERO_ERROR; + return new CompactTrieEnumeration(fHeader, status); + } + + virtual const UnicodeString * snext(UErrorCode &status); + + // Very expensive, but this should never be used. + virtual int32_t count(UErrorCode &status) const { + CompactTrieEnumeration counter(fHeader, status); + int32_t result = 0; + while (counter.snext(status) != NULL && U_SUCCESS(status)) { + ++result; + } + return result; + } + + virtual void reset(UErrorCode &status) { + fNodeStack.removeAllElements(); + fIndexStack.removeAllElements(); + fNodeStack.push(fHeader->root, status); + fIndexStack.push(0, status); + unistr.remove(); + } +}; + +const char CompactTrieEnumeration::fgClassID = '\0'; + +const UnicodeString * +CompactTrieEnumeration::snext(UErrorCode &status) { + if (fNodeStack.empty() || U_FAILURE(status)) { + return NULL; + } + const CompactTrieNode *node = getCompactNode(fHeader, fNodeStack.peeki()); + int where = fIndexStack.peeki(); + while (!fNodeStack.empty() && U_SUCCESS(status)) { + int nodeCount = (node->flagscount & kCountMask); + UBool goingDown = FALSE; + if (nodeCount == 0) { + // Terminal node; go up immediately + fNodeStack.popi(); + fIndexStack.popi(); + node = getCompactNode(fHeader, fNodeStack.peeki()); + where = fIndexStack.peeki(); + } + else if (node->flagscount & kVerticalNode) { + // Vertical node + const CompactTrieVerticalNode *vnode = (const CompactTrieVerticalNode *)node; + if (where == 0) { + // Going down + unistr.append((const UChar *)vnode->chars, (int32_t) nodeCount); + fIndexStack.setElementAt(1, fIndexStack.size()-1); + node = getCompactNode(fHeader, fNodeStack.push(vnode->equal, status)); + where = fIndexStack.push(0, status); + goingDown = TRUE; + } + else { + // Going up + unistr.truncate(unistr.length()-nodeCount); + fNodeStack.popi(); + fIndexStack.popi(); + node = getCompactNode(fHeader, fNodeStack.peeki()); + where = fIndexStack.peeki(); + } + } + else { + // Horizontal node + const CompactTrieHorizontalNode *hnode = (const CompactTrieHorizontalNode *)node; + if (where > 0) { + // Pop previous char + unistr.truncate(unistr.length()-1); + } + if (where < nodeCount) { + // Push on next node + unistr.append((UChar)hnode->entries[where].ch); + fIndexStack.setElementAt(where+1, fIndexStack.size()-1); + node = getCompactNode(fHeader, fNodeStack.push(hnode->entries[where].equal, status)); + where = fIndexStack.push(0, status); + goingDown = TRUE; + } + else { + // Going up + fNodeStack.popi(); + fIndexStack.popi(); + node = getCompactNode(fHeader, fNodeStack.peeki()); + where = fIndexStack.peeki(); + } + } + // Check if the parent of the node we've just gone down to ends a + // word. If so, return it. + if (goingDown && (node->flagscount & kParentEndsWord)) { + return &unistr; + } + } + return NULL; +} + +StringEnumeration * +CompactTrieDictionary::openWords( UErrorCode &status ) const { + if (U_FAILURE(status)) { + return NULL; + } + return new CompactTrieEnumeration(fData, status); +} + +// +// Below here is all code related to converting a ternary trie to a compact trie +// and back again +// + +// Helper classes to construct the compact trie +class BuildCompactTrieNode: public UMemory { + public: + UBool fParentEndsWord; + UBool fVertical; + UBool fHasDuplicate; + int32_t fNodeID; + UnicodeString fChars; + + public: + BuildCompactTrieNode(UBool parentEndsWord, UBool vertical, UStack &nodes, UErrorCode &status) { + fParentEndsWord = parentEndsWord; + fHasDuplicate = FALSE; + fVertical = vertical; + fNodeID = nodes.size(); + nodes.push(this, status); + } + + virtual ~BuildCompactTrieNode() { + } + + virtual uint32_t size() { + return sizeof(uint16_t); + } + + virtual void write(uint8_t *bytes, uint32_t &offset, const UVector32 &/*translate*/) { + // Write flag/count + *((uint16_t *)(bytes+offset)) = (fChars.length() & kCountMask) + | (fVertical ? kVerticalNode : 0) | (fParentEndsWord ? kParentEndsWord : 0 ); + offset += sizeof(uint16_t); + } +}; + +class BuildCompactTrieHorizontalNode: public BuildCompactTrieNode { + public: + UStack fLinks; + + public: + BuildCompactTrieHorizontalNode(UBool parentEndsWord, UStack &nodes, UErrorCode &status) + : BuildCompactTrieNode(parentEndsWord, FALSE, nodes, status), fLinks(status) { + } + + virtual ~BuildCompactTrieHorizontalNode() { + } + + virtual uint32_t size() { + return offsetof(CompactTrieHorizontalNode,entries) + + (fChars.length()*sizeof(CompactTrieHorizontalEntry)); + } + + virtual void write(uint8_t *bytes, uint32_t &offset, const UVector32 &translate) { + BuildCompactTrieNode::write(bytes, offset, translate); + int32_t count = fChars.length(); + for (int32_t i = 0; i < count; ++i) { + CompactTrieHorizontalEntry *entry = (CompactTrieHorizontalEntry *)(bytes+offset); + entry->ch = fChars[i]; + entry->equal = translate.elementAti(((BuildCompactTrieNode *)fLinks[i])->fNodeID); +#ifdef DEBUG_TRIE_DICT + if (entry->equal == 0) { + fprintf(stderr, "ERROR: horizontal link %d, logical node %d maps to physical node zero\n", + i, ((BuildCompactTrieNode *)fLinks[i])->fNodeID); + } +#endif + offset += sizeof(CompactTrieHorizontalEntry); + } + } + + void addNode(UChar ch, BuildCompactTrieNode *link, UErrorCode &status) { + fChars.append(ch); + fLinks.push(link, status); + } +}; + +class BuildCompactTrieVerticalNode: public BuildCompactTrieNode { + public: + BuildCompactTrieNode *fEqual; + + public: + BuildCompactTrieVerticalNode(UBool parentEndsWord, UStack &nodes, UErrorCode &status) + : BuildCompactTrieNode(parentEndsWord, TRUE, nodes, status) { + fEqual = NULL; + } + + virtual ~BuildCompactTrieVerticalNode() { + } + + virtual uint32_t size() { + return offsetof(CompactTrieVerticalNode,chars) + (fChars.length()*sizeof(uint16_t)); + } + + virtual void write(uint8_t *bytes, uint32_t &offset, const UVector32 &translate) { + CompactTrieVerticalNode *node = (CompactTrieVerticalNode *)(bytes+offset); + BuildCompactTrieNode::write(bytes, offset, translate); + node->equal = translate.elementAti(fEqual->fNodeID); + offset += sizeof(node->equal); +#ifdef DEBUG_TRIE_DICT + if (node->equal == 0) { + fprintf(stderr, "ERROR: vertical link, logical node %d maps to physical node zero\n", + fEqual->fNodeID); + } +#endif + fChars.extract(0, fChars.length(), (UChar *)node->chars); + offset += sizeof(uint16_t)*fChars.length(); + } + + void addChar(UChar ch) { + fChars.append(ch); + } + + void setLink(BuildCompactTrieNode *node) { + fEqual = node; + } +}; + +// Forward declaration +static void walkHorizontal(const TernaryNode *node, + BuildCompactTrieHorizontalNode *building, + UStack &nodes, + UErrorCode &status); + +// Convert one node. Uses recursion. + +static BuildCompactTrieNode * +compactOneNode(const TernaryNode *node, UBool parentEndsWord, UStack &nodes, UErrorCode &status) { + if (U_FAILURE(status)) { + return NULL; + } + BuildCompactTrieNode *result = NULL; + UBool horizontal = (node->low != NULL || node->high != NULL); + if (horizontal) { + BuildCompactTrieHorizontalNode *hResult = + new BuildCompactTrieHorizontalNode(parentEndsWord, nodes, status); + if (hResult == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + if (U_SUCCESS(status)) { + walkHorizontal(node, hResult, nodes, status); + result = hResult; + } + } + else { + BuildCompactTrieVerticalNode *vResult = + new BuildCompactTrieVerticalNode(parentEndsWord, nodes, status); + if (vResult == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + if (U_SUCCESS(status)) { + UBool endsWord = FALSE; + // Take up nodes until we end a word, or hit a node with < or > links + do { + vResult->addChar(node->ch); + endsWord = (node->flags & kEndsWord) != 0; + node = node->equal; + } + while(node != NULL && !endsWord && node->low == NULL && node->high == NULL); + if (node == NULL) { + if (!endsWord) { + status = U_ILLEGAL_ARGUMENT_ERROR; // Corrupt input trie + } + else { + vResult->setLink((BuildCompactTrieNode *)nodes[1]); + } + } + else { + vResult->setLink(compactOneNode(node, endsWord, nodes, status)); + } + result = vResult; + } + } + return result; +} + +// Walk the set of peers at the same level, to build a horizontal node. +// Uses recursion. + +static void walkHorizontal(const TernaryNode *node, + BuildCompactTrieHorizontalNode *building, + UStack &nodes, + UErrorCode &status) { + while (U_SUCCESS(status) && node != NULL) { + if (node->low != NULL) { + walkHorizontal(node->low, building, nodes, status); + } + BuildCompactTrieNode *link = NULL; + if (node->equal != NULL) { + link = compactOneNode(node->equal, (node->flags & kEndsWord) != 0, nodes, status); + } + else if (node->flags & kEndsWord) { + link = (BuildCompactTrieNode *)nodes[1]; + } + if (U_SUCCESS(status) && link != NULL) { + building->addNode(node->ch, link, status); + } + // Tail recurse manually instead of leaving it to the compiler. + //if (node->high != NULL) { + // walkHorizontal(node->high, building, nodes, status); + //} + node = node->high; + } +} + +U_NAMESPACE_END +U_CDECL_BEGIN +static int32_t U_CALLCONV +_sortBuildNodes(const void * /*context*/, const void *voidl, const void *voidr) { + BuildCompactTrieNode *left = *(BuildCompactTrieNode **)voidl; + BuildCompactTrieNode *right = *(BuildCompactTrieNode **)voidr; + // Check for comparing a node to itself, to avoid spurious duplicates + if (left == right) { + return 0; + } + // Most significant is type of node. Can never coalesce. + if (left->fVertical != right->fVertical) { + return left->fVertical - right->fVertical; + } + // Next, the "parent ends word" flag. If that differs, we cannot coalesce. + if (left->fParentEndsWord != right->fParentEndsWord) { + return left->fParentEndsWord - right->fParentEndsWord; + } + // Next, the string. If that differs, we can never coalesce. + int32_t result = left->fChars.compare(right->fChars); + if (result != 0) { + return result; + } + // We know they're both the same node type, so branch for the two cases. + if (left->fVertical) { + result = ((BuildCompactTrieVerticalNode *)left)->fEqual->fNodeID + - ((BuildCompactTrieVerticalNode *)right)->fEqual->fNodeID; + } + else { + // We need to compare the links vectors. They should be the + // same size because the strings were equal. + // We compare the node IDs instead of the pointers, to handle + // coalesced nodes. + BuildCompactTrieHorizontalNode *hleft, *hright; + hleft = (BuildCompactTrieHorizontalNode *)left; + hright = (BuildCompactTrieHorizontalNode *)right; + int32_t count = hleft->fLinks.size(); + for (int32_t i = 0; i < count && result == 0; ++i) { + result = ((BuildCompactTrieNode *)(hleft->fLinks[i]))->fNodeID - + ((BuildCompactTrieNode *)(hright->fLinks[i]))->fNodeID; + } + } + // If they are equal to each other, mark them (speeds coalescing) + if (result == 0) { + left->fHasDuplicate = TRUE; + right->fHasDuplicate = TRUE; + } + return result; +} +U_CDECL_END +U_NAMESPACE_BEGIN + +static void coalesceDuplicates(UStack &nodes, UErrorCode &status) { + // We sort the array of nodes to place duplicates next to each other + if (U_FAILURE(status)) { + return; + } + int32_t size = nodes.size(); + void **array = (void **)uprv_malloc(sizeof(void *)*size); + if (array == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + (void) nodes.toArray(array); + + // Now repeatedly identify duplicates until there are no more + int32_t dupes = 0; + long passCount = 0; +#ifdef DEBUG_TRIE_DICT + long totalDupes = 0; +#endif + do { + BuildCompactTrieNode *node; + BuildCompactTrieNode *first = NULL; + BuildCompactTrieNode **p; + BuildCompactTrieNode **pFirst = NULL; + int32_t counter = size - 2; + // Sort the array, skipping nodes 0 and 1. Use quicksort for the first + // pass for speed. For the second and subsequent passes, we use stable + // (insertion) sort for two reasons: + // 1. The array is already mostly ordered, so we get better performance. + // 2. The way we find one and only one instance of a set of duplicates is to + // check that the node ID equals the array index. If we used an unstable + // sort for the second or later passes, it's possible that none of the + // duplicates would wind up with a node ID equal to its array index. + // The sort stability guarantees that, because as we coalesce more and + // more groups, the first element of the resultant group will be one of + // the first elements of the groups being coalesced. + // To use quicksort for the second and subsequent passes, we would have to + // find the minimum of the node numbers in a group, and set all the nodes + // in the group to that node number. + uprv_sortArray(array+2, counter, sizeof(void *), _sortBuildNodes, NULL, (passCount > 0), &status); + dupes = 0; + for (p = (BuildCompactTrieNode **)array + 2; counter > 0; --counter, ++p) { + node = *p; + if (node->fHasDuplicate) { + if (first == NULL) { + first = node; + pFirst = p; + } + else if (_sortBuildNodes(NULL, pFirst, p) != 0) { + // Starting a new run of dupes + first = node; + pFirst = p; + } + else if (node->fNodeID != first->fNodeID) { + // Slave one to the other, note duplicate + node->fNodeID = first->fNodeID; + dupes += 1; + } + } + else { + // This node has no dupes + first = NULL; + pFirst = NULL; + } + } + passCount += 1; +#ifdef DEBUG_TRIE_DICT + totalDupes += dupes; + fprintf(stderr, "Trie node dupe removal, pass %d: %d nodes tagged\n", passCount, dupes); +#endif + } + while (dupes > 0); +#ifdef DEBUG_TRIE_DICT + fprintf(stderr, "Trie node dupe removal complete: %d tagged in %d passes\n", totalDupes, passCount); +#endif + + // We no longer need the temporary array, as the nodes have all been marked appropriately. + uprv_free(array); +} + +U_NAMESPACE_END +U_CDECL_BEGIN +static void U_CALLCONV _deleteBuildNode(void *obj) { + delete (BuildCompactTrieNode *) obj; +} +U_CDECL_END +U_NAMESPACE_BEGIN + +CompactTrieHeader * +CompactTrieDictionary::compactMutableTrieDictionary( const MutableTrieDictionary &dict, + UErrorCode &status ) { + if (U_FAILURE(status)) { + return NULL; + } +#ifdef DEBUG_TRIE_DICT + struct tms timing; + struct tms previous; + (void) ::times(&previous); +#endif + UStack nodes(_deleteBuildNode, NULL, status); // Index of nodes + + // Add node 0, used as the NULL pointer/sentinel. + nodes.addElement((int32_t)0, status); + + // Start by creating the special empty node we use to indicate that the parent + // terminates a word. This must be node 1, because the builder assumes + // that. + if (U_FAILURE(status)) { + return NULL; + } + BuildCompactTrieNode *terminal = new BuildCompactTrieNode(TRUE, FALSE, nodes, status); + if (terminal == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + + // This call does all the work of building the new trie structure. The root + // will be node 2. + BuildCompactTrieNode *root = compactOneNode(dict.fTrie, FALSE, nodes, status); +#ifdef DEBUG_TRIE_DICT + (void) ::times(&timing); + fprintf(stderr, "Compact trie built, %d nodes, time user %f system %f\n", + nodes.size(), (double)(timing.tms_utime-previous.tms_utime)/CLK_TCK, + (double)(timing.tms_stime-previous.tms_stime)/CLK_TCK); + previous = timing; +#endif + + // Now coalesce all duplicate nodes. + coalesceDuplicates(nodes, status); +#ifdef DEBUG_TRIE_DICT + (void) ::times(&timing); + fprintf(stderr, "Duplicates coalesced, time user %f system %f\n", + (double)(timing.tms_utime-previous.tms_utime)/CLK_TCK, + (double)(timing.tms_stime-previous.tms_stime)/CLK_TCK); + previous = timing; +#endif + + // Next, build the output trie. + // First we compute all the sizes and build the node ID translation table. + uint32_t totalSize = offsetof(CompactTrieHeader,offsets); + int32_t count = nodes.size(); + int32_t nodeCount = 1; // The sentinel node we already have + BuildCompactTrieNode *node; + UVector32 translate(count, status); // Should be no growth needed after this + translate.push(0, status); // The sentinel node + + if (U_FAILURE(status)) { + return NULL; + } + + for (int32_t i = 1; i < count; ++i) { + node = (BuildCompactTrieNode *)nodes[i]; + if (node->fNodeID == i) { + // Only one node out of each duplicate set is used + if (i >= translate.size()) { + // Logically extend the mapping table + translate.setSize(i+1); + } + translate.setElementAt(nodeCount++, i); + totalSize += node->size(); + } + } + + // Check for overflowing 16 bits worth of nodes. + if (nodeCount > 0x10000) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + // Add enough room for the offsets. + totalSize += nodeCount*sizeof(uint32_t); +#ifdef DEBUG_TRIE_DICT + (void) ::times(&timing); + fprintf(stderr, "Sizes/mapping done, time user %f system %f\n", + (double)(timing.tms_utime-previous.tms_utime)/CLK_TCK, + (double)(timing.tms_stime-previous.tms_stime)/CLK_TCK); + previous = timing; + fprintf(stderr, "%d nodes, %d unique, %d bytes\n", nodes.size(), nodeCount, totalSize); +#endif + uint8_t *bytes = (uint8_t *)uprv_malloc(totalSize); + if (bytes == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + + CompactTrieHeader *header = (CompactTrieHeader *)bytes; + header->size = totalSize; + header->nodeCount = nodeCount; + header->offsets[0] = 0; // Sentinel + header->root = translate.elementAti(root->fNodeID); +#ifdef DEBUG_TRIE_DICT + if (header->root == 0) { + fprintf(stderr, "ERROR: root node %d translate to physical zero\n", root->fNodeID); + } +#endif + uint32_t offset = offsetof(CompactTrieHeader,offsets)+(nodeCount*sizeof(uint32_t)); + nodeCount = 1; + // Now write the data + for (int32_t i = 1; i < count; ++i) { + node = (BuildCompactTrieNode *)nodes[i]; + if (node->fNodeID == i) { + header->offsets[nodeCount++] = offset; + node->write(bytes, offset, translate); + } + } +#ifdef DEBUG_TRIE_DICT + (void) ::times(&timing); + fprintf(stderr, "Trie built, time user %f system %f\n", + (double)(timing.tms_utime-previous.tms_utime)/CLK_TCK, + (double)(timing.tms_stime-previous.tms_stime)/CLK_TCK); + previous = timing; + fprintf(stderr, "Final offset is %d\n", offset); + + // Collect statistics on node types and sizes + int hCount = 0; + int vCount = 0; + size_t hSize = 0; + size_t vSize = 0; + size_t hItemCount = 0; + size_t vItemCount = 0; + uint32_t previousOff = offset; + for (uint16_t i = nodeCount-1; i >= 2; --i) { + const CompactTrieNode *node = getCompactNode(header, i); + if (node->flagscount & kVerticalNode) { + vCount += 1; + vItemCount += (node->flagscount & kCountMask); + vSize += previousOff-header->offsets[i]; + } + else { + hCount += 1; + hItemCount += (node->flagscount & kCountMask); + hSize += previousOff-header->offsets[i]; + } + previousOff = header->offsets[i]; + } + fprintf(stderr, "Horizontal nodes: %d total, average %f bytes with %f items\n", hCount, + (double)hSize/hCount, (double)hItemCount/hCount); + fprintf(stderr, "Vertical nodes: %d total, average %f bytes with %f items\n", vCount, + (double)vSize/vCount, (double)vItemCount/vCount); +#endif + + if (U_FAILURE(status)) { + uprv_free(bytes); + header = NULL; + } + else { + header->magic = COMPACT_TRIE_MAGIC_1; + } + return header; +} + +// Forward declaration +static TernaryNode * +unpackOneNode( const CompactTrieHeader *header, const CompactTrieNode *node, UErrorCode &status ); + + +// Convert a horizontal node (or subarray thereof) into a ternary subtrie +static TernaryNode * +unpackHorizontalArray( const CompactTrieHeader *header, const CompactTrieHorizontalEntry *array, + int low, int high, UErrorCode &status ) { + if (U_FAILURE(status) || low > high) { + return NULL; + } + int middle = (low+high)/2; + TernaryNode *result = new TernaryNode(array[middle].ch); + if (result == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + const CompactTrieNode *equal = getCompactNode(header, array[middle].equal); + if (equal->flagscount & kParentEndsWord) { + result->flags |= kEndsWord; + } + result->low = unpackHorizontalArray(header, array, low, middle-1, status); + result->high = unpackHorizontalArray(header, array, middle+1, high, status); + result->equal = unpackOneNode(header, equal, status); + return result; +} + +// Convert one compact trie node into a ternary subtrie +static TernaryNode * +unpackOneNode( const CompactTrieHeader *header, const CompactTrieNode *node, UErrorCode &status ) { + int nodeCount = (node->flagscount & kCountMask); + if (nodeCount == 0 || U_FAILURE(status)) { + // Failure, or terminal node + return NULL; + } + if (node->flagscount & kVerticalNode) { + const CompactTrieVerticalNode *vnode = (const CompactTrieVerticalNode *)node; + TernaryNode *head = NULL; + TernaryNode *previous = NULL; + TernaryNode *latest = NULL; + for (int i = 0; i < nodeCount; ++i) { + latest = new TernaryNode(vnode->chars[i]); + if (latest == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + break; + } + if (head == NULL) { + head = latest; + } + if (previous != NULL) { + previous->equal = latest; + } + previous = latest; + } + if (latest != NULL) { + const CompactTrieNode *equal = getCompactNode(header, vnode->equal); + if (equal->flagscount & kParentEndsWord) { + latest->flags |= kEndsWord; + } + latest->equal = unpackOneNode(header, equal, status); + } + return head; + } + else { + // Horizontal node + const CompactTrieHorizontalNode *hnode = (const CompactTrieHorizontalNode *)node; + return unpackHorizontalArray(header, &hnode->entries[0], 0, nodeCount-1, status); + } +} + +MutableTrieDictionary * +CompactTrieDictionary::cloneMutable( UErrorCode &status ) const { + MutableTrieDictionary *result = new MutableTrieDictionary( status ); + if (result == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + TernaryNode *root = unpackOneNode(fData, getCompactNode(fData, fData->root), status); + if (U_FAILURE(status)) { + delete root; // Clean up + delete result; + return NULL; + } + result->fTrie = root; + return result; +} + +U_NAMESPACE_END + +U_CAPI int32_t U_EXPORT2 +triedict_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outData, + UErrorCode *status) { + + if (status == NULL || U_FAILURE(*status)) { + return 0; + } + if(ds==NULL || inData==NULL || length<-1 || (length>0 && outData==NULL)) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + // + // Check that the data header is for for dictionary data. + // (Header contents are defined in genxxx.cpp) + // + const UDataInfo *pInfo = (const UDataInfo *)((const uint8_t *)inData+4); + if(!( pInfo->dataFormat[0]==0x54 && /* dataFormat="TrDc" */ + pInfo->dataFormat[1]==0x72 && + pInfo->dataFormat[2]==0x44 && + pInfo->dataFormat[3]==0x63 && + pInfo->formatVersion[0]==1 )) { + udata_printError(ds, "triedict_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + pInfo->formatVersion[0]); + *status=U_UNSUPPORTED_ERROR; + return 0; + } + + // + // Swap the data header. (This is the generic ICU Data Header, not the + // CompactTrieHeader). This swap also conveniently gets us + // the size of the ICU d.h., which lets us locate the start + // of the RBBI specific data. + // + int32_t headerSize=udata_swapDataHeader(ds, inData, length, outData, status); + + // + // Get the CompactTrieHeader, and check that it appears to be OK. + // + const uint8_t *inBytes =(const uint8_t *)inData+headerSize; + const CompactTrieHeader *header = (const CompactTrieHeader *)inBytes; + if (ds->readUInt32(header->magic) != COMPACT_TRIE_MAGIC_1 + || ds->readUInt32(header->size) < sizeof(CompactTrieHeader)) + { + udata_printError(ds, "triedict_swap(): CompactTrieHeader is invalid.\n"); + *status=U_UNSUPPORTED_ERROR; + return 0; + } + + // + // Prefight operation? Just return the size + // + uint32_t totalSize = ds->readUInt32(header->size); + int32_t sizeWithUData = (int32_t)totalSize + headerSize; + if (length < 0) { + return sizeWithUData; + } + + // + // Check that length passed in is consistent with length from RBBI data header. + // + if (length < sizeWithUData) { + udata_printError(ds, "triedict_swap(): too few bytes (%d after ICU Data header) for trie data.\n", + totalSize); + *status=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + // + // Swap the Data. Do the data itself first, then the CompactTrieHeader, because + // we need to reference the header to locate the data, and an + // inplace swap of the header leaves it unusable. + // + uint8_t *outBytes = (uint8_t *)outData + headerSize; + CompactTrieHeader *outputHeader = (CompactTrieHeader *)outBytes; + +#if 0 + // + // If not swapping in place, zero out the output buffer before starting. + // + if (inBytes != outBytes) { + uprv_memset(outBytes, 0, totalSize); + } + + // We need to loop through all the nodes in the offset table, and swap each one. + uint16_t nodeCount = ds->readUInt16(header->nodeCount); + // Skip node 0, which should always be 0. + for (int i = 1; i < nodeCount; ++i) { + uint32_t nodeOff = ds->readUInt32(header->offsets[i]); + const CompactTrieNode *inNode = (const CompactTrieNode *)(inBytes + nodeOff); + CompactTrieNode *outNode = (CompactTrieNode *)(outBytes + nodeOff); + uint16_t flagscount = ds->readUInt16(inNode->flagscount); + uint16_t itemCount = flagscount & kCountMask; + ds->writeUInt16(&outNode->flagscount, flagscount); + if (itemCount > 0) { + if (flagscount & kVerticalNode) { + ds->swapArray16(ds, inBytes+nodeOff+offsetof(CompactTrieVerticalNode,chars), + itemCount*sizeof(uint16_t), + outBytes+nodeOff+offsetof(CompactTrieVerticalNode,chars), status); + uint16_t equal = ds->readUInt16(inBytes+nodeOff+offsetof(CompactTrieVerticalNode,equal); + ds->writeUInt16(outBytes+nodeOff+offsetof(CompactTrieVerticalNode,equal)); + } + else { + const CompactTrieHorizontalNode *inHNode = (const CompactTrieHorizontalNode *)inNode; + CompactTrieHorizontalNode *outHNode = (CompactTrieHorizontalNode *)outNode; + for (int j = 0; j < itemCount; ++j) { + uint16_t word = ds->readUInt16(inHNode->entries[j].ch); + ds->writeUInt16(&outHNode->entries[j].ch, word); + word = ds->readUInt16(inHNode->entries[j].equal); + ds->writeUInt16(&outHNode->entries[j].equal, word); + } + } + } + } +#endif + + // All the data in all the nodes consist of 16 bit items. Swap them all at once. + uint16_t nodeCount = ds->readUInt16(header->nodeCount); + uint32_t nodesOff = offsetof(CompactTrieHeader,offsets)+((uint32_t)nodeCount*sizeof(uint32_t)); + ds->swapArray16(ds, inBytes+nodesOff, totalSize-nodesOff, outBytes+nodesOff, status); + + // Swap the header + ds->writeUInt32(&outputHeader->size, totalSize); + uint32_t magic = ds->readUInt32(header->magic); + ds->writeUInt32(&outputHeader->magic, magic); + ds->writeUInt16(&outputHeader->nodeCount, nodeCount); + uint16_t root = ds->readUInt16(header->root); + ds->writeUInt16(&outputHeader->root, root); + ds->swapArray32(ds, inBytes+offsetof(CompactTrieHeader,offsets), + sizeof(uint32_t)*(int32_t)nodeCount, + outBytes+offsetof(CompactTrieHeader,offsets), status); + + return sizeWithUData; +} + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/triedict.h b/icuSources/common/triedict.h new file mode 100644 index 00000000..b8796617 --- /dev/null +++ b/icuSources/common/triedict.h @@ -0,0 +1,346 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#ifndef TRIEDICT_H +#define TRIEDICT_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/utext.h" + +struct UEnumeration; +struct UDataSwapper; +struct UDataMemory; + + /** + *

UDataSwapFn function for use in swapping a compact dictionary.

+ * + * @param ds Pointer to UDataSwapper containing global data about the + * transformation and function pointers for handling primitive + * types. + * @param inData Pointer to the input data to be transformed or examined. + * @param length Length of the data, counting bytes. May be -1 for preflighting. + * If length>=0, then transform the data. + * If length==-1, then only determine the length of the data. + * The length cannot be determined from the data itself for all + * types of data (e.g., not for simple arrays of integers). + * @param outData Pointer to the output data buffer. + * If length>=0 (transformation), then the output buffer must + * have a capacity of at least length. + * If length==-1, then outData will not be used and can be NULL. + * @param pErrorCode ICU UErrorCode parameter, must not be NULL and must + * fulfill U_SUCCESS on input. + * @return The actual length of the data. + * + * @see UDataSwapper + */ + +U_CAPI int32_t U_EXPORT2 +triedict_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode); + +U_NAMESPACE_BEGIN + +class StringEnumeration; +struct CompactTrieHeader; + +/******************************************************************* + * TrieWordDictionary + */ + +/** + *

TrieWordDictionary is an abstract class that represents a word + * dictionary based on a trie. The base protocol is read-only. + * Subclasses may allow writing.

+ */ +class U_COMMON_API TrieWordDictionary : public UMemory { + public: + + /** + *

Default constructor.

+ * + */ + TrieWordDictionary(); + + /** + *

Virtual destructor.

+ */ + virtual ~TrieWordDictionary(); + + /** + *

Find dictionary words that match the text.

+ * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param start The current position in text. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @return The number of characters in text that were matched. + */ + virtual int32_t matches( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit ) const = 0; + + /** + *

Return a StringEnumeration for iterating all the words in the dictionary.

+ * + * @param status A status code recording the success of the call. + * @return A StringEnumeration that will iterate through the whole dictionary. + * The caller is responsible for closing it. The order is unspecified. + */ + virtual StringEnumeration *openWords( UErrorCode &status ) const = 0; + +}; + +/******************************************************************* + * MutableTrieDictionary + */ + +/** + *

MutableTrieDictionary is a TrieWordDictionary that allows words to be + * added.

+ */ + +struct TernaryNode; // Forwards declaration + +class U_COMMON_API MutableTrieDictionary : public TrieWordDictionary { + private: + /** + * The root node of the trie + * @internal + */ + + TernaryNode *fTrie; + + /** + * A UText for internal use + * @internal + */ + + UText *fIter; + + friend class CompactTrieDictionary; // For fast conversion + + public: + + /** + *

Constructor.

+ * + * @param median A UChar around which to balance the trie. Ideally, it should + * begin at least one word that is near the median of the set in the dictionary + * @param status A status code recording the success of the call. + */ + MutableTrieDictionary( UChar median, UErrorCode &status ); + + /** + *

Virtual destructor.

+ */ + virtual ~MutableTrieDictionary(); + + /** + *

Find dictionary words that match the text.

+ * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @return The number of characters in text that were matched. + */ + virtual int32_t matches( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit ) const; + + /** + *

Return a StringEnumeration for iterating all the words in the dictionary.

+ * + * @param status A status code recording the success of the call. + * @return A StringEnumeration that will iterate through the whole dictionary. + * The caller is responsible for closing it. The order is unspecified. + */ + virtual StringEnumeration *openWords( UErrorCode &status ) const; + + /** + *

Add one word to the dictionary.

+ * + * @param word A UChar buffer containing the word. + * @param length The length of the word. + * @param status The resultant status + */ + virtual void addWord( const UChar *word, + int32_t length, + UErrorCode &status); + +#if 0 + /** + *

Add all strings from a UEnumeration to the dictionary.

+ * + * @param words A UEnumeration that will return the desired words. + * @param status The resultant status + */ + virtual void addWords( UEnumeration *words, UErrorCode &status ); +#endif + +protected: + /** + *

Search the dictionary for matches.

+ * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @param parent The parent of the current node + * @param pMatched The returned parent node matched the input + * @return The number of characters in text that were matched. + */ + virtual int32_t search( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit, + TernaryNode *&parent, + UBool &pMatched ) const; + +private: + /** + *

Private constructor. The root node it not allocated.

+ * + * @param status A status code recording the success of the call. + */ + MutableTrieDictionary( UErrorCode &status ); +}; + +/******************************************************************* + * CompactTrieDictionary + */ + +/** + *

CompactTrieDictionary is a TrieWordDictionary that has been compacted + * to save space.

+ */ +class U_COMMON_API CompactTrieDictionary : public TrieWordDictionary { + private: + /** + * The root node of the trie + */ + + const CompactTrieHeader *fData; + + /** + * A UBool indicating whether or not we own the fData. + */ + + UBool fOwnData; + + UDataMemory *fUData; + public: + /** + *

Construct a dictionary from a UDataMemory.

+ * + * @param data A pointer to a UDataMemory, which is adopted + * @param status A status code giving the result of the constructor + */ + CompactTrieDictionary(UDataMemory *dataObj, UErrorCode &status); + + /** + *

Construct a dictionary from raw saved data.

+ * + * @param data A pointer to the raw data, which is still owned by the caller + * @param status A status code giving the result of the constructor + */ + CompactTrieDictionary(const void *dataObj, UErrorCode &status); + + /** + *

Construct a dictionary from a MutableTrieDictionary.

+ * + * @param dict The dictionary to use as input. + * @param status A status code recording the success of the call. + */ + CompactTrieDictionary( const MutableTrieDictionary &dict, UErrorCode &status ); + + /** + *

Virtual destructor.

+ */ + virtual ~CompactTrieDictionary(); + + /** + *

Find dictionary words that match the text.

+ * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @return The number of characters in text that were matched. + */ + virtual int32_t matches( UText *text, + int32_t rangeEnd, + int32_t *lengths, + int &count, + int limit ) const; + + /** + *

Return a StringEnumeration for iterating all the words in the dictionary.

+ * + * @param status A status code recording the success of the call. + * @return A StringEnumeration that will iterate through the whole dictionary. + * The caller is responsible for closing it. The order is unspecified. + */ + virtual StringEnumeration *openWords( UErrorCode &status ) const; + + /** + *

Return the size of the compact data.

+ * + * @return The size of the dictionary's compact data. + */ + virtual uint32_t dataSize() const; + + /** + *

Return a void * pointer to the compact data, platform-endian.

+ * + * @return The data for the compact dictionary, suitable for passing to the + * constructor. + */ + virtual const void *data() const; + + /** + *

Return a MutableTrieDictionary clone of this dictionary.

+ * + * @param status A status code recording the success of the call. + * @return A MutableTrieDictionary with the same data as this dictionary + */ + virtual MutableTrieDictionary *cloneMutable( UErrorCode &status ) const; + + private: + + /** + *

Convert a MutableTrieDictionary into a compact data blob.

+ * + * @param dict The dictionary to convert. + * @param status A status code recording the success of the call. + * @return A single data blob starting with a CompactTrieHeader. + */ + static CompactTrieHeader *compactMutableTrieDictionary( const MutableTrieDictionary &dict, + UErrorCode &status ); + +}; + +U_NAMESPACE_END + + /* TRIEDICT_H */ +#endif diff --git a/icuSources/common/ubidi.c b/icuSources/common/ubidi.c index 2e7713f0..bccdbfaa 100644 --- a/icuSources/common/ubidi.c +++ b/icuSources/common/ubidi.c @@ -1,7 +1,7 @@ -/* +/* ****************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -24,6 +24,7 @@ #include "unicode/ustring.h" #include "unicode/uchar.h" #include "unicode/ubidi.h" +#include "ubidi_props.h" #include "ubidiimp.h" /* @@ -52,7 +53,7 @@ * that look at immediately surrounding types. * * As a related topic, this implementation does not remove Boundary Neutral - * types from the input, but ignores them whereever this is relevant. + * types from the input, but ignores them wherever this is relevant. * For example, the loop for the resolution of the weak types reads * types until it finds a non-BN. * Also, explicit embedding codes are neither changed into BN nor removed. @@ -119,7 +120,7 @@ static const Flags flagO[2]={ DIRPROP_FLAG(LRO), DIRPROP_FLAG(RLO) }; /* UBiDi object management -------------------------------------------------- */ U_CAPI UBiDi * U_EXPORT2 -ubidi_open(void) +ubidi_open(void) { UErrorCode errorCode=U_ZERO_ERROR; return ubidi_openSized(0, 0, &errorCode); @@ -147,6 +148,13 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode) /* reset the object, all pointers NULL, all flags FALSE, all sizes 0 */ uprv_memset(pBiDi, 0, sizeof(UBiDi)); + /* get BiDi properties */ + pBiDi->bdp=ubidi_getSingleton(pErrorCode); + if(U_FAILURE(*pErrorCode)) { + uprv_free(pBiDi); + return NULL; + } + /* allocate memory for arrays as requested */ if(maxLength>0) { if( !getInitialDirPropsMemory(pBiDi, maxLength) || @@ -207,6 +215,9 @@ ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeN /* not enough memory, and we must not allocate */ return FALSE; } else if(sizeNeeded!=*pSize && mayAllocate) { + /* FOOD FOR THOUGHT: in hope to improve performance, we should + * try never shrinking memory, only growing it when required. + */ /* we may try to grow or shrink */ void *memory; @@ -228,6 +239,7 @@ ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeN U_CAPI void U_EXPORT2 ubidi_close(UBiDi *pBiDi) { if(pBiDi!=NULL) { + pBiDi->pParaBiDi=NULL; /* in case one tries to reuse this block */ if(pBiDi->dirPropsMemory!=NULL) { uprv_free(pBiDi->dirPropsMemory); } @@ -237,6 +249,13 @@ ubidi_close(UBiDi *pBiDi) { if(pBiDi->runsMemory!=NULL) { uprv_free(pBiDi->runsMemory); } + if(pBiDi->parasMemory!=NULL) { + uprv_free(pBiDi->parasMemory); + } + if(pBiDi->insertPoints.points!=NULL) { + uprv_free(pBiDi->insertPoints.points); + } + uprv_free(pBiDi); } } @@ -247,6 +266,8 @@ U_CAPI void U_EXPORT2 ubidi_setInverse(UBiDi *pBiDi, UBool isInverse) { if(pBiDi!=NULL) { pBiDi->isInverse=isInverse; + pBiDi->reorderingMode = isInverse ? UBIDI_REORDER_INVERSE_NUMBERS_AS_L + : UBIDI_REORDER_DEFAULT; } } @@ -259,81 +280,223 @@ ubidi_isInverse(UBiDi *pBiDi) { } } +/* FOOD FOR THOUGHT: currently the reordering modes are a mixture of + * algorithm for direct BiDi, algorithm for inverse BiDi and the bizarre + * concept of RUNS_ONLY which is a double operation. + * It could be advantageous to divide this into 3 concepts: + * a) Operation: direct / inverse / RUNS_ONLY + * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_L + * c) Inverse algorithm: default / INVERSE_LIKE_DIRECT / NUMBERS_SPECIAL + * This would allow combinations not possible today like RUNS_ONLY with + * NUMBERS_SPECIAL. + * Also allow to set INSERT_MARKS for the direct step of RUNS_ONLY and + * REMOVE_CONTROLS for the inverse step. + * Not all combinations would be supported, and probably not all do make sense. + * This would need to document which ones are supported and what are the + * fallbacks for unsupported combinations. + */ +U_CAPI void U_EXPORT2 +ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode) { + if ((pBiDi != NULL) && (reorderingMode >= UBIDI_REORDER_DEFAULT) + && (reorderingMode < UBIDI_REORDER_COUNT)) { + pBiDi->reorderingMode = reorderingMode; + pBiDi->isInverse = reorderingMode == UBIDI_REORDER_INVERSE_NUMBERS_AS_L; + } +} + +U_CAPI UBiDiReorderingMode U_EXPORT2 +ubidi_getReorderingMode(UBiDi *pBiDi) { + if (pBiDi != NULL) { + return pBiDi->reorderingMode; + } else { + return UBIDI_REORDER_DEFAULT; + } +} + +U_CAPI void U_EXPORT2 +ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions) { + if (reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) { + reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS; + } + if (pBiDi != NULL) { + pBiDi->reorderingOptions = reorderingOptions; + } +} + +U_CAPI uint32_t U_EXPORT2 +ubidi_getReorderingOptions(UBiDi *pBiDi) { + if (pBiDi != NULL) { + return pBiDi->reorderingOptions; + } else { + return 0; + } +} + /* perform (P2)..(P3) ------------------------------------------------------- */ /* * Get the directional properties for the text, * calculate the flags bit-set, and - * determine the partagraph level if necessary. + * determine the paragraph level if necessary. */ static void -getDirProps(UBiDi *pBiDi, const UChar *text) { +getDirProps(UBiDi *pBiDi) { + const UChar *text=pBiDi->text; DirProp *dirProps=pBiDi->dirPropsMemory; /* pBiDi->dirProps is const */ - int32_t i=0, i0, i1, length=pBiDi->length; + int32_t i=0, i0, i1, length=pBiDi->originalLength; Flags flags=0; /* collect all directionalities in the text */ UChar32 uchar; - DirProp dirProp; - - if(IS_DEFAULT_LEVEL(pBiDi->paraLevel)) { - /* determine the paragraph level (P2..P3) */ - for(;;) { - i0=i; /* index of first code unit */ - UTF_NEXT_CHAR(text, i, length, uchar); - i1=i-1; /* index of last code unit, gets the directional property */ - flags|=DIRPROP_FLAG(dirProps[i1]=dirProp=u_charDirection(uchar)); - if(i1>i0) { /* set previous code units' properties to BN */ - flags|=DIRPROP_FLAG(BN); - do { - dirProps[--i1]=BN; - } while(i1>i0); - } - - if(dirProp==L) { - pBiDi->paraLevel=0; - break; - } else if(dirProp==R || dirProp==AL) { - pBiDi->paraLevel=1; - break; - } else if(i>=length) { - /* - * see comment in ubidi.h: - * the DEFAULT_XXX values are designed so that - * their bit 0 alone yields the intended default - */ - pBiDi->paraLevel&=1; - break; - } - } + DirProp dirProp=0, paraDirDefault=0;/* initialize to avoid compiler warnings */ + UBool isDefaultLevel=IS_DEFAULT_LEVEL(pBiDi->paraLevel); + /* for inverse BiDi, the default para level is set to RTL if there is a + strong character at either end of the text */ + UBool isDefaultLevelInverse=isDefaultLevel && + (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT || + pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL); + int32_t lastArabicPos=-1; + int32_t controlCount=0; + UBool removeBiDiControls = pBiDi->reorderingOptions & + UBIDI_OPTION_REMOVE_CONTROLS; + + typedef enum { + NOT_CONTEXTUAL, /* 0: not contextual paraLevel */ + LOOKING_FOR_STRONG, /* 1: looking for first strong char */ + FOUND_STRONG_CHAR /* 2: found first strong char */ + } State; + State state; + int32_t paraStart=0; /* index of first char in paragraph */ + DirProp paraDir; /* == CONTEXT_RTL within paragraphs + starting with strong R char */ + DirProp lastStrongDir=0; /* for default level & inverse BiDi */ + int32_t lastStrongLTR=0; /* for STREAMING option */ + + if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) { + pBiDi->length=0; + lastStrongLTR=0; + } + if(isDefaultLevel) { + paraDirDefault=pBiDi->paraLevel&1 ? CONTEXT_RTL : 0; + paraDir=paraDirDefault; + lastStrongDir=paraDirDefault; + state=LOOKING_FOR_STRONG; } else { - flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel); + state=NOT_CONTEXTUAL; + paraDir=0; } - - /* get the rest of the directional properties and the flags bits */ - while(ii0) { /* set previous code units' properties to BN */ flags|=DIRPROP_FLAG(BN); do { - dirProps[--i1]=BN; + dirProps[--i1]=BN|paraDir; } while(i1>i0); } + if(state==LOOKING_FOR_STRONG) { + if(dirProp==L) { + state=FOUND_STRONG_CHAR; + if(paraDir) { + paraDir=0; + for(i1=paraStart; i1reorderingOptions & UBIDI_OPTION_STREAMING) { + pBiDi->length=i; /* i is index to next character */ + } + if(isDefaultLevelInverse && (lastStrongDir==CONTEXT_RTL) &&(paraDir!=lastStrongDir)) { + for( ; paraStartparaCount++; + } + if(isDefaultLevel) { + state=LOOKING_FOR_STRONG; + paraStart=i; /* i is index to next character */ + paraDir=paraDirDefault; + lastStrongDir=paraDirDefault; + } + } + } + if(removeBiDiControls && IS_BIDI_CONTROL_CHAR(uchar)) { + controlCount++; + } } - if(flags&MASK_EMBEDDING) { - flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel); + if(isDefaultLevelInverse && (lastStrongDir==CONTEXT_RTL) &&(paraDir!=lastStrongDir)) { + for(i1=paraStart; i1paraLevel=GET_PARALEVEL(pBiDi, 0); + } + if(pBiDi->reorderingOptions & UBIDI_OPTION_STREAMING) { + if((lastStrongLTR>pBiDi->length) && + (GET_PARALEVEL(pBiDi, lastStrongLTR)==0)) { + pBiDi->length = lastStrongLTR; + } + if(pBiDi->lengthoriginalLength) { + pBiDi->paraCount--; + } + } + /* The following line does nothing new for contextual paraLevel, but is + needed for absolute paraLevel. */ + flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel); + + if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) { + flags|=DIRPROP_FLAG(L); } + pBiDi->controlCount = controlCount; pBiDi->flags=flags; + pBiDi->lastArabicPos=lastArabicPos; } /* perform (X1)..(X9) ------------------------------------------------------- */ /* determine if the text is mixed-directional or single-directional */ static UBiDiDirection -directionFromFlags(Flags flags) { +directionFromFlags(UBiDi *pBiDi) { + Flags flags=pBiDi->flags; /* if the text contains AN and neutrals, then some neutrals may become RTL */ if(!(flags&MASK_RTL || ((flags&DIRPROP_FLAG(AN)) && (flags&MASK_POSSIBLE_N)))) { return UBIDI_LTR; @@ -400,23 +563,29 @@ static UBiDiDirection resolveExplicitLevels(UBiDi *pBiDi) { const DirProp *dirProps=pBiDi->dirProps; UBiDiLevel *levels=pBiDi->levels; - + const UChar *text=pBiDi->text; + int32_t i=0, length=pBiDi->length; Flags flags=pBiDi->flags; /* collect all directionalities in the text */ DirProp dirProp; - UBiDiLevel level=pBiDi->paraLevel; + UBiDiLevel level=GET_PARALEVEL(pBiDi, 0); UBiDiDirection direction; + int32_t paraIndex=0; /* determine if the text is mixed-directional or single-directional */ - direction=directionFromFlags(flags); + direction=directionFromFlags(pBiDi); - /* we may not need to resolve any explicit levels */ - if(direction!=UBIDI_MIXED) { + /* we may not need to resolve any explicit levels, but for multiple + paragraphs we want to loop on all chars to set the para boundaries */ + if((direction!=UBIDI_MIXED) && (pBiDi->paraCount==1)) { /* not mixed directionality: levels don't matter - trailingWSStart will be 0 */ - } else if(!(flags&MASK_EXPLICIT) || pBiDi->isInverse) { + } else if((pBiDi->paraCount==1) && + (!(flags&MASK_EXPLICIT) || + (pBiDi->reorderingMode > UBIDI_REORDER_LAST_LOGICAL_TO_VISUAL))) { /* mixed, but all characters are at the same embedding level */ /* or we are in "inverse BiDi" */ + /* and we don't have contextual multiple paragraphs with some B char */ /* set all levels to the paragraph level */ for(i=0; iparaLevel; + level=GET_PARALEVEL(pBiDi, i); + if((i+1)paras[paraIndex++]=i+1; + } + } flags|=DIRPROP_FLAG(B); break; case BN: @@ -533,13 +706,17 @@ resolveExplicitLevels(UBiDi *pBiDi) { if(flags&MASK_EMBEDDING) { flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel); } + if(pBiDi->orderParagraphsLTR && (flags&DIRPROP_FLAG(B))) { + flags|=DIRPROP_FLAG(L); + } /* subsequently, ignore the explicit codes and BN (X9) */ /* again, determine if the text is mixed-directional or single-directional */ pBiDi->flags=flags; - direction=directionFromFlags(flags); + direction=directionFromFlags(pBiDi); } + return direction; } @@ -556,27 +733,38 @@ resolveExplicitLevels(UBiDi *pBiDi) { static UBiDiDirection checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { const DirProp *dirProps=pBiDi->dirProps; + DirProp dirProp; UBiDiLevel *levels=pBiDi->levels; - + const UChar *text=pBiDi->text; + int32_t i, length=pBiDi->length; Flags flags=0; /* collect all directionalities in the text */ - UBiDiLevel level, paraLevel=pBiDi->paraLevel; + UBiDiLevel level; + uint32_t paraIndex=0; for(i=0; iparas[paraIndex++]=i+1; + } + } } if(flags&MASK_EMBEDDING) { flags|=DIRPROP_FLAG_LR(pBiDi->paraLevel); @@ -584,7 +772,408 @@ checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { /* determine if the text is mixed-directional or single-directional */ pBiDi->flags=flags; - return directionFromFlags(flags); + return directionFromFlags(pBiDi); +} + +/*********************************************************************/ +/* The Properties state machine table */ +/*********************************************************************/ +/* */ +/* All table cells are 8 bits: */ +/* bits 0..4: next state */ +/* bits 5..7: action to perform (if > 0) */ +/* */ +/* Cells may be of format "n" where n represents the next state */ +/* (except for the rightmost column). */ +/* Cells may also be of format "_(x,y)" where x represents an action */ +/* to perform and y represents the next state. */ +/* */ +/*********************************************************************/ +/* Definitions and type for properties state table */ +/*********************************************************************/ +#define IMPTABPROPS_COLUMNS 14 +#define IMPTABPROPS_RES (IMPTABPROPS_COLUMNS - 1) +#define GET_STATEPROPS(cell) ((cell)&0x1f) +#define GET_ACTIONPROPS(cell) ((cell)>>5) +#define _(action, newState) ((uint8_t)(newState+(action<<5))) + +static const uint8_t groupProp[] = /* dirProp regrouped */ +{ +/* L R EN ES ET AN CS B S WS ON LRE LRO AL RLE RLO PDF NSM BN */ + 0, 1, 2, 7, 8, 3, 9, 6, 5, 4, 4, 10, 10, 12, 10, 10, 10, 11, 10 +}; +enum { _L=0, _R=1, _EN=2, _AN=3, _ON=4, _S=5, _B=6 }; /* reduced dirProp */ + +/*********************************************************************/ +/* */ +/* PROPERTIES STATE TABLE */ +/* */ +/* In table impTabProps, */ +/* - the ON column regroups ON and WS */ +/* - the BN column regroups BN, LRE, RLE, LRO, RLO, PDF */ +/* - the Res column is the reduced property assigned to a run */ +/* */ +/* Action 1: process current run1, init new run1 */ +/* 2: init new run2 */ +/* 3: process run1, process run2, init new run1 */ +/* 4: process run1, set run1=run2, init new run2 */ +/* */ +/* Notes: */ +/* 1) This table is used in resolveImplicitLevels(). */ +/* 2) This table triggers actions when there is a change in the Bidi*/ +/* property of incoming characters (action 1). */ +/* 3) Most such property sequences are processed immediately (in */ +/* fact, passed to processPropertySeq(). */ +/* 4) However, numbers are assembled as one sequence. This means */ +/* that undefined situations (like CS following digits, until */ +/* it is known if the next char will be a digit) are held until */ +/* following chars define them. */ +/* Example: digits followed by CS, then comes another CS or ON; */ +/* the digits will be processed, then the CS assigned */ +/* as the start of an ON sequence (action 3). */ +/* 5) There are cases where more than one sequence must be */ +/* processed, for instance digits followed by CS followed by L: */ +/* the digits must be processed as one sequence, and the CS */ +/* must be processed as an ON sequence, all this before starting */ +/* assembling chars for the opening L sequence. */ +/* */ +/* */ +static const uint8_t impTabProps[][IMPTABPROPS_COLUMNS] = +{ +/* L , R , EN , AN , ON , S , B , ES , ET , CS , BN , NSM , AL , Res */ +/* 0 Init */ { 1 , 2 , 4 , 5 , 7 , 15 , 17 , 7 , 9 , 7 , 0 , 7 , 3 , _ON }, +/* 1 L */ { 1 , _(1,2), _(1,4), _(1,5), _(1,7),_(1,15),_(1,17), _(1,7), _(1,9), _(1,7), 1 , 1 , _(1,3), _L }, +/* 2 R */ { _(1,1), 2 , _(1,4), _(1,5), _(1,7),_(1,15),_(1,17), _(1,7), _(1,9), _(1,7), 2 , 2 , _(1,3), _R }, +/* 3 AL */ { _(1,1), _(1,2), _(1,6), _(1,6), _(1,8),_(1,16),_(1,17), _(1,8), _(1,8), _(1,8), 3 , 3 , 3 , _R }, +/* 4 EN */ { _(1,1), _(1,2), 4 , _(1,5), _(1,7),_(1,15),_(1,17),_(2,10), 11 ,_(2,10), 4 , 4 , _(1,3), _EN }, +/* 5 AN */ { _(1,1), _(1,2), _(1,4), 5 , _(1,7),_(1,15),_(1,17), _(1,7), _(1,9),_(2,12), 5 , 5 , _(1,3), _AN }, +/* 6 AL:EN/AN */ { _(1,1), _(1,2), 6 , 6 , _(1,8),_(1,16),_(1,17), _(1,8), _(1,8),_(2,13), 6 , 6 , _(1,3), _AN }, +/* 7 ON */ { _(1,1), _(1,2), _(1,4), _(1,5), 7 ,_(1,15),_(1,17), 7 ,_(2,14), 7 , 7 , 7 , _(1,3), _ON }, +/* 8 AL:ON */ { _(1,1), _(1,2), _(1,6), _(1,6), 8 ,_(1,16),_(1,17), 8 , 8 , 8 , 8 , 8 , _(1,3), _ON }, +/* 9 ET */ { _(1,1), _(1,2), 4 , _(1,5), 7 ,_(1,15),_(1,17), 7 , 9 , 7 , 9 , 9 , _(1,3), _ON }, +/*10 EN+ES/CS */ { _(3,1), _(3,2), 4 , _(3,5), _(4,7),_(3,15),_(3,17), _(4,7),_(4,14), _(4,7), 10 , _(4,7), _(3,3), _EN }, +/*11 EN+ET */ { _(1,1), _(1,2), 4 , _(1,5), _(1,7),_(1,15),_(1,17), _(1,7), 11 , _(1,7), 11 , 11 , _(1,3), _EN }, +/*12 AN+CS */ { _(3,1), _(3,2), _(3,4), 5 , _(4,7),_(3,15),_(3,17), _(4,7),_(4,14), _(4,7), 12 , _(4,7), _(3,3), _AN }, +/*13 AL:EN/AN+CS */ { _(3,1), _(3,2), 6 , 6 , _(4,8),_(3,16),_(3,17), _(4,8), _(4,8), _(4,8), 13 , _(4,8), _(3,3), _AN }, +/*14 ON+ET */ { _(1,1), _(1,2), _(4,4), _(1,5), 7 ,_(1,15),_(1,17), 7 , 14 , 7 , 14 , 14 , _(1,3), _ON }, +/*15 S */ { _(1,1), _(1,2), _(1,4), _(1,5), _(1,7), 15 ,_(1,17), _(1,7), _(1,9), _(1,7), 15 , _(1,7), _(1,3), _S }, +/*16 AL:S */ { _(1,1), _(1,2), _(1,6), _(1,6), _(1,8), 16 ,_(1,17), _(1,8), _(1,8), _(1,8), 16 , _(1,8), _(1,3), _S }, +/*17 B */ { _(1,1), _(1,2), _(1,4), _(1,5), _(1,7),_(1,15), 17 , _(1,7), _(1,9), _(1,7), 17 , _(1,7), _(1,3), _B } +}; + +/* we must undef macro _ because the levels table have a different + * structure (4 bits for action and 4 bits for next state. + */ +#undef _ + +/*********************************************************************/ +/* The levels state machine tables */ +/*********************************************************************/ +/* */ +/* All table cells are 8 bits: */ +/* bits 0..3: next state */ +/* bits 4..7: action to perform (if > 0) */ +/* */ +/* Cells may be of format "n" where n represents the next state */ +/* (except for the rightmost column). */ +/* Cells may also be of format "_(x,y)" where x represents an action */ +/* to perform and y represents the next state. */ +/* */ +/* This format limits each table to 16 states each and to 15 actions.*/ +/* */ +/*********************************************************************/ +/* Definitions and type for levels state tables */ +/*********************************************************************/ +#define IMPTABLEVELS_COLUMNS (_B + 2) +#define IMPTABLEVELS_RES (IMPTABLEVELS_COLUMNS - 1) +#define GET_STATE(cell) ((cell)&0x0f) +#define GET_ACTION(cell) ((cell)>>4) +#define _(action, newState) ((uint8_t)(newState+(action<<4))) + +typedef uint8_t ImpTab[][IMPTABLEVELS_COLUMNS]; +typedef uint8_t ImpAct[]; + +/* FOOD FOR THOUGHT: each ImpTab should have its associated ImpAct, + * instead of having a pair of ImpTab and a pair of ImpAct. + */ +typedef struct ImpTabPair { + ImpTab * pImpTab[2]; + ImpAct * pImpAct[2]; +} ImpTabPair; + +/*********************************************************************/ +/* */ +/* LEVELS STATE TABLES */ +/* */ +/* In all levels state tables, */ +/* - state 0 is the initial state */ +/* - the Res column is the increment to add to the text level */ +/* for this property sequence. */ +/* */ +/* The impAct arrays for each table of a pair map the local action */ +/* numbers of the table to the total list of actions. For instance, */ +/* action 2 in a given table corresponds to the action number which */ +/* appears in entry [2] of the impAct array for that table. */ +/* The first entry of all impAct arrays must be 0. */ +/* */ +/* Action 1: init conditional sequence */ +/* 2: prepend conditional sequence to current sequence */ +/* 3: set ON sequence to new level - 1 */ +/* 4: init EN/AN/ON sequence */ +/* 5: fix EN/AN/ON sequence followed by R */ +/* 6: set previous level sequence to level 2 */ +/* */ +/* Notes: */ +/* 1) These tables are used in processPropertySeq(). The input */ +/* is property sequences as determined by resolveImplicitLevels. */ +/* 2) Most such property sequences are processed immediately */ +/* (levels are assigned). */ +/* 3) However, some sequences cannot be assigned a final level till */ +/* one or more following sequences are received. For instance, */ +/* ON following an R sequence within an even-level paragraph. */ +/* If the following sequence is R, the ON sequence will be */ +/* assigned basic run level+1, and so will the R sequence. */ +/* 4) S is generally handled like ON, since its level will be fixed */ +/* to paragraph level in adjustWSLevels(). */ +/* */ + +static const ImpTab impTabL_DEFAULT = /* Even paragraph level */ +/* In this table, conditional sequences receive the higher possible level + until proven otherwise. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 0 , 1 , 0 , 2 , 0 , 0 , 0 , 0 }, +/* 1 : R */ { 0 , 1 , 3 , 3 , _(1,4), _(1,4), 0 , 1 }, +/* 2 : AN */ { 0 , 1 , 0 , 2 , _(1,5), _(1,5), 0 , 2 }, +/* 3 : R+EN/AN */ { 0 , 1 , 3 , 3 , _(1,4), _(1,4), 0 , 2 }, +/* 4 : R+ON */ { _(2,0), 1 , 3 , 3 , 4 , 4 , _(2,0), 1 }, +/* 5 : AN+ON */ { _(2,0), 1 , _(2,0), 2 , 5 , 5 , _(2,0), 1 } +}; +static const ImpTab impTabR_DEFAULT = /* Odd paragraph level */ +/* In this table, conditional sequences receive the lower possible level + until proven otherwise. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 0 }, +/* 1 : L */ { 1 , 0 , 1 , 3 , _(1,4), _(1,4), 0 , 1 }, +/* 2 : EN/AN */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 1 }, +/* 3 : L+AN */ { 1 , 0 , 1 , 3 , 5 , 5 , 0 , 1 }, +/* 4 : L+ON */ { _(2,1), 0 , _(2,1), 3 , 4 , 4 , 0 , 0 }, +/* 5 : L+AN+ON */ { 1 , 0 , 1 , 3 , 5 , 5 , 0 , 0 } +}; +static const ImpAct impAct0 = {0,1,2,3,4,5,6}; +static const ImpTabPair impTab_DEFAULT = {{(ImpTab*)&impTabL_DEFAULT, + (ImpTab*)&impTabR_DEFAULT}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct0}}; + +static const ImpTab impTabL_NUMBERS_SPECIAL = /* Even paragraph level */ +/* In this table, conditional sequences receive the higher possible level + until proven otherwise. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 0 , 2 , 1 , 1 , 0 , 0 , 0 , 0 }, +/* 1 : L+EN/AN */ { 0 , 2 , 1 , 1 , 0 , 0 , 0 , 2 }, +/* 2 : R */ { 0 , 2 , 4 , 4 , _(1,3), 0 , 0 , 1 }, +/* 3 : R+ON */ { _(2,0), 2 , 4 , 4 , 3 , 3 , _(2,0), 1 }, +/* 4 : R+EN/AN */ { 0 , 2 , 4 , 4 , _(1,3), _(1,3), 0 , 2 } + }; +static const ImpTabPair impTab_NUMBERS_SPECIAL = {{(ImpTab*)&impTabL_NUMBERS_SPECIAL, + (ImpTab*)&impTabR_DEFAULT}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct0}}; + +static const ImpTab impTabL_GROUP_NUMBERS_WITH_R = +/* In this table, EN/AN+ON sequences receive levels as if associated with R + until proven that there is L or sor/eor on both sides. AN is handled like EN. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 init */ { 0 , 3 , _(1,1), _(1,1), 0 , 0 , 0 , 0 }, +/* 1 EN/AN */ { _(2,0), 3 , 1 , 1 , 2 , _(2,0), _(2,0), 2 }, +/* 2 EN/AN+ON */ { _(2,0), 3 , 1 , 1 , 2 , _(2,0), _(2,0), 1 }, +/* 3 R */ { 0 , 3 , 5 , 5 , _(1,4), 0 , 0 , 1 }, +/* 4 R+ON */ { _(2,0), 3 , 5 , 5 , 4 , _(2,0), _(2,0), 1 }, +/* 5 R+EN/AN */ { 0 , 3 , 5 , 5 , _(1,4), 0 , 0 , 2 } +}; +static const ImpTab impTabR_GROUP_NUMBERS_WITH_R = +/* In this table, EN/AN+ON sequences receive levels as if associated with R + until proven that there is L on both sides. AN is handled like EN. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 init */ { 2 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, +/* 1 EN/AN */ { 2 , 0 , 1 , 1 , 0 , 0 , 0 , 1 }, +/* 2 L */ { 2 , 0 , _(1,4), _(1,4), _(1,3), 0 , 0 , 1 }, +/* 3 L+ON */ { _(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 0 }, +/* 4 L+EN/AN */ { _(2,2), 0 , 4 , 4 , 3 , 0 , 0 , 1 } +}; +static const ImpTabPair impTab_GROUP_NUMBERS_WITH_R = { + {(ImpTab*)&impTabL_GROUP_NUMBERS_WITH_R, + (ImpTab*)&impTabR_GROUP_NUMBERS_WITH_R}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct0}}; + + +static const ImpTab impTabL_INVERSE_NUMBERS_AS_L = +/* This table is identical to the Default LTR table except that EN and AN are + handled like L. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 }, +/* 1 : R */ { 0 , 1 , 0 , 0 , _(1,4), _(1,4), 0 , 1 }, +/* 2 : AN */ { 0 , 1 , 0 , 0 , _(1,5), _(1,5), 0 , 2 }, +/* 3 : R+EN/AN */ { 0 , 1 , 0 , 0 , _(1,4), _(1,4), 0 , 2 }, +/* 4 : R+ON */ { _(2,0), 1 , _(2,0), _(2,0), 4 , 4 , _(2,0), 1 }, +/* 5 : AN+ON */ { _(2,0), 1 , _(2,0), _(2,0), 5 , 5 , _(2,0), 1 } +}; +static const ImpTab impTabR_INVERSE_NUMBERS_AS_L = +/* This table is identical to the Default RTL table except that EN and AN are + handled like L. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 }, +/* 1 : L */ { 1 , 0 , 1 , 1 , _(1,4), _(1,4), 0 , 1 }, +/* 2 : EN/AN */ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 }, +/* 3 : L+AN */ { 1 , 0 , 1 , 1 , 5 , 5 , 0 , 1 }, +/* 4 : L+ON */ { _(2,1), 0 , _(2,1), _(2,1), 4 , 4 , 0 , 0 }, +/* 5 : L+AN+ON */ { 1 , 0 , 1 , 1 , 5 , 5 , 0 , 0 } +}; +static const ImpTabPair impTab_INVERSE_NUMBERS_AS_L = { + {(ImpTab*)&impTabL_INVERSE_NUMBERS_AS_L, + (ImpTab*)&impTabR_INVERSE_NUMBERS_AS_L}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct0}}; + +static const ImpTab impTabR_INVERSE_LIKE_DIRECT = /* Odd paragraph level */ +/* In this table, conditional sequences receive the lower possible level + until proven otherwise. +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 0 }, +/* 1 : L */ { 1 , 0 , 1 , 2 , _(1,3), _(1,3), 0 , 1 }, +/* 2 : EN/AN */ { 1 , 0 , 2 , 2 , 0 , 0 , 0 , 1 }, +/* 3 : L+ON */ { _(2,1), _(3,0), 6 , 4 , 3 , 3 , _(3,0), 0 }, +/* 4 : L+ON+AN */ { _(2,1), _(3,0), 6 , 4 , 5 , 5 , _(3,0), 3 }, +/* 5 : L+AN+ON */ { _(2,1), _(3,0), 6 , 4 , 5 , 5 , _(3,0), 2 }, +/* 6 : L+ON+EN */ { _(2,1), _(3,0), 6 , 4 , 3 , 3 , _(3,0), 1 } +}; +static const ImpAct impAct1 = {0,1,11,12}; +/* FOOD FOR THOUGHT: in LTR table below, check case "JKL 123abc" + */ +static const ImpTabPair impTab_INVERSE_LIKE_DIRECT = { + {(ImpTab*)&impTabL_DEFAULT, + (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct1}}; + +static const ImpTab impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS = +/* The case handled in this table is (visually): R EN L +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 0 , _(6,3), 0 , 1 , 0 , 0 , 0 , 0 }, +/* 1 : L+AN */ { 0 , _(6,3), 0 , 1 , _(1,2), _(3,0), 0 , 4 }, +/* 2 : L+AN+ON */ { _(2,0), _(6,3), _(2,0), 1 , 2 , _(3,0), _(2,0), 3 }, +/* 3 : R */ { 0 , _(6,3), _(5,5), _(5,6), _(1,4), _(3,0), 0 , 3 }, +/* 4 : R+ON */ { _(3,0), _(4,3), _(5,5), _(5,6), 4 , _(3,0), _(3,0), 3 }, +/* 5 : R+EN */ { _(3,0), _(4,3), 5 , _(5,6), _(1,4), _(3,0), _(3,0), 4 }, +/* 6 : R+AN */ { _(3,0), _(4,3), _(5,5), 6 , _(1,4), _(3,0), _(3,0), 4 } +}; +static const ImpTab impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS = +/* The cases handled in this table are (visually): R EN L + R L AN L +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { _(1,3), 0 , 1 , 1 , 0 , 0 , 0 , 0 }, +/* 1 : R+EN/AN */ { _(2,3), 0 , 1 , 1 , 2 , _(4,0), 0 , 1 }, +/* 2 : R+EN/AN+ON */ { _(2,3), 0 , 1 , 1 , 2 , _(4,0), 0 , 0 }, +/* 3 : L */ { 3 , 0 , 3 , _(3,6), _(1,4), _(4,0), 0 , 1 }, +/* 4 : L+ON */ { _(5,3), _(4,0), 5 , _(3,6), 4 , _(4,0), _(4,0), 0 }, +/* 5 : L+ON+EN */ { _(5,3), _(4,0), 5 , _(3,6), 4 , _(4,0), _(4,0), 1 }, +/* 6 : L+AN */ { _(5,3), _(4,0), 6 , 6 , 4 , _(4,0), _(4,0), 3 } +}; +static const ImpAct impAct2 = {0,1,7,8,9,10}; +static const ImpTabPair impTab_INVERSE_LIKE_DIRECT_WITH_MARKS = { + {(ImpTab*)&impTabL_INVERSE_LIKE_DIRECT_WITH_MARKS, + (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct2}}; + +static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL = { + {(ImpTab*)&impTabL_NUMBERS_SPECIAL, + (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct1}}; + +static const ImpTab impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS = +/* The case handled in this table is (visually): R EN L +*/ +{ +/* L , R , EN , AN , ON , S , B , Res */ +/* 0 : init */ { 0 , _(6,2), 1 , 1 , 0 , 0 , 0 , 0 }, +/* 1 : L+EN/AN */ { 0 , _(6,2), 1 , 1 , 0 , _(3,0), 0 , 4 }, +/* 2 : R */ { 0 , _(6,2), _(5,4), _(5,4), _(1,3), _(3,0), 0 , 3 }, +/* 3 : R+ON */ { _(3,0), _(4,2), _(5,4), _(5,4), 3 , _(3,0), _(3,0), 3 }, +/* 4 : R+EN/AN */ { _(3,0), _(4,2), 4 , 4 , _(1,3), _(3,0), _(3,0), 4 } +}; +static const ImpTabPair impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS = { + {(ImpTab*)&impTabL_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS, + (ImpTab*)&impTabR_INVERSE_LIKE_DIRECT_WITH_MARKS}, + {(ImpAct*)&impAct0, (ImpAct*)&impAct2}}; + +#undef _ + +typedef struct { + ImpTab * pImpTab; /* level table pointer */ + ImpAct * pImpAct; /* action map array */ + int32_t startON; /* start of ON sequence */ + int32_t startL2EN; /* start of level 2 sequence */ + int32_t lastStrongRTL; /* index of last found R or AL */ + int32_t state; /* current state */ + UBiDiLevel runLevel; /* run level before implicit solving */ +} LevState; + +/*------------------------------------------------------------------------*/ + +static void +addPoint(UBiDi *pBiDi, int32_t pos, int32_t flag) + /* param pos: position where to insert + param flag: one of LRM_BEFORE, LRM_AFTER, RLM_BEFORE, RLM_AFTER + */ +{ +#define FIRSTALLOC 10 + Point point; + InsertPoints * pInsertPoints=&(pBiDi->insertPoints); + + if (pInsertPoints->capacity == 0) + { + pInsertPoints->points=uprv_malloc(sizeof(Point)*FIRSTALLOC); + if (pInsertPoints->points == NULL) + { + pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR; + return; + } + pInsertPoints->capacity=FIRSTALLOC; + } + if (pInsertPoints->size >= pInsertPoints->capacity) /* no room for new point */ + { + void * savePoints=pInsertPoints->points; + pInsertPoints->points=uprv_realloc(pInsertPoints->points, + pInsertPoints->capacity*2*sizeof(Point)); + if (pInsertPoints->points == NULL) + { + pInsertPoints->points=savePoints; + pInsertPoints->errorCode=U_MEMORY_ALLOCATION_ERROR; + return; + } + else pInsertPoints->capacity*=2; + } + point.pos=pos; + point.flag=flag; + pInsertPoints->points[pInsertPoints->size]=point; + pInsertPoints->size++; +#undef FIRSTALLOC } /* perform rules (Wn), (Nn), and (In) on a run of the text ------------------ */ @@ -595,16 +1184,6 @@ checkExplicitLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { * (except for W5: sequences of ET) and keeps track of changes * in a rule Wp that affect a later Wq (pdirProps; - UBiDiLevel *levels=pBiDi->levels; - - int32_t i, next, neutralStart=-1; - DirProp prevDirProp, dirProp, nextDirProp, lastStrong, beforeNeutral=L; - UBiDiLevel numberLevel; - uint8_t historyOfEN; - - /* initialize: current at sor, next at start (it is startisInverse) { - /* - * For "inverse BiDi", we set the levels of numbers just like for - * regular L characters, plus a flag that ubidi_getRuns() will use - * to set a similar flag on the corresponding output run. - */ - numberLevel=levels[start]; - if(numberLevel&1) { - ++numberLevel; - } - } else { - /* normal BiDi: least greater even level */ - numberLevel=(UBiDiLevel)((levels[start]+2)&~1); - } - - /* - * In all steps of this implementation, BN and explicit embedding codes - * must be treated as if they didn't exist (X9). - * They will get levels set before a non-neutral character, and remain - * undefined before a neutral one, but adjustWSLevels() will take care - * of all of them. - */ - while(DIRPROP_FLAG(nextDirProp)&MASK_BN_EXPLICIT) { - if(++nextpImpTab; + ImpAct * pImpAct=pLevState->pImpAct; + UBiDiLevel * levels=pBiDi->levels; + UBiDiLevel level, addLevel; + InsertPoints * pInsertPoints; + int32_t start0, k; + + start0=start; /* save original start position */ + oldStateSeq=pLevState->state; + cell=(*pImpTab)[oldStateSeq][_prop]; + pLevState->state=GET_STATE(cell); /* isolate the new state */ + actionSeq=(*pImpAct)[GET_ACTION(cell)]; /* isolate the action */ + addLevel=(*pImpTab)[pLevState->state][IMPTABLEVELS_RES]; + + if(actionSeq) { + switch(actionSeq) { + case 1: /* init ON seq */ + pLevState->startON=start0; break; - } - } - /* - * Note: at the end of this file, there is a prototype - * of a version of this function that uses a statetable - * at the core of this state machine. - * If you make changes to this state machine, - * please update that prototype as well. - */ + case 2: /* prepend ON seq to current seq */ + start=pLevState->startON; + break; - /* loop for entire run */ - while(nextstartL2EN >= 0) { + addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE); } - } while(DIRPROP_FLAG(nextDirProp)&MASK_BN_EXPLICIT); - historyOfEN<<=EN_SHIFT; - - /* (W1..W7) */ - switch(dirProp) { - case L: - lastStrong=L; - break; - case R: - lastStrong=R; - break; - case AL: - /* (W3) */ - lastStrong=AL; - dirProp=R; - break; - case EN: - /* we have to set historyOfEN correctly */ - if(lastStrong==AL) { - /* (W2) */ - dirProp=AN; - } else { - if(lastStrong==L) { - /* (W7) */ - dirProp=L; + pLevState->startL2EN=-1; /* not within previous if since could also be -2 */ + /* check if we had any relevant EN/AN after R/AL */ + pInsertPoints=&(pBiDi->insertPoints); + if ((pInsertPoints->capacity == 0) || + (pInsertPoints->size <= pInsertPoints->confirmed)) + { + /* nothing, just clean up */ + pLevState->lastStrongRTL=-1; + /* check if we have a pending conditional segment */ + level=(*pImpTab)[oldStateSeq][IMPTABLEVELS_RES]; + if ((level & 1) && (pLevState->startON > 0)) { /* after ON */ + start=pLevState->startON; /* reset to basic run level */ } - /* this EN stays after (W2) and (W4) - at least before (W7) */ - historyOfEN|=EN_ALL; - } - break; - case ES: - if( historyOfEN&PREV_EN_AFTER_W2 && /* previous was EN before (W4) */ - nextDirProp==EN && lastStrong!=AL /* next is EN and (W2) won't make it AN */ - ) { - /* (W4) */ - if(lastStrong!=L) { - dirProp=EN; - } else { - /* (W7) */ - dirProp=L; + if (_prop == _S) /* add LRM before S */ + { + addPoint(pBiDi, start0, LRM_BEFORE); + pInsertPoints->confirmed=pInsertPoints->size; } - historyOfEN|=EN_AFTER_W4; - } else { - /* (W6) */ - dirProp=ON; + break; } - break; - case CS: - if( historyOfEN&PREV_EN_AFTER_W2 && /* previous was EN before (W4) */ - nextDirProp==EN && lastStrong!=AL /* next is EN and (W2) won't make it AN */ - ) { - /* (W4) */ - if(lastStrong!=L) { - dirProp=EN; - } else { - /* (W7) */ - dirProp=L; - } - historyOfEN|=EN_AFTER_W4; - } else if(prevDirProp==AN && /* previous was AN */ - (nextDirProp==AN || /* next is AN */ - (nextDirProp==EN && lastStrong==AL)) /* or (W2) will make it one */ - ) { - /* (W4) */ - dirProp=AN; - } else { - /* (W6) */ - dirProp=ON; + /* reset previous RTL cont to level for LTR text */ + for (k=pLevState->lastStrongRTL+1; kconfirmed=pInsertPoints->size; + pLevState->lastStrongRTL=-1; + if (_prop == _S) /* add LRM before S */ + { + addPoint(pBiDi, start0, LRM_BEFORE); + pInsertPoints->confirmed=pInsertPoints->size; } + break; - /* now process the sequence of ET like a single ET */ - if((historyOfEN&PREV_EN_AFTER_W4) || /* previous was EN before (W5) */ - (nextDirProp==EN && lastStrong!=AL) /* next is EN and (W2) won't make it AN */ - ) { - /* (W5) */ - if(lastStrong!=L) { - dirProp=EN; - } else { - /* (W7) */ - dirProp=L; + case 4: /* R/AL after possible relevant EN/AN */ + /* just clean up */ + pInsertPoints=&(pBiDi->insertPoints); + if (pInsertPoints->capacity > 0) + /* remove all non confirmed insert points */ + pInsertPoints->size=pInsertPoints->confirmed; + pLevState->startON=-1; + pLevState->startL2EN=-1; + pLevState->lastStrongRTL=limit - 1; + break; + + case 5: /* EN/AN after R/AL + possible cont */ + /* check for real AN */ + if ((_prop == _AN) && (NO_CONTEXT_RTL(pBiDi->dirProps[start0]) == AN) && + (pBiDi->reorderingMode!=UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL)) + { + /* real AN */ + if (pLevState->startL2EN == -1) /* if no relevant EN already found */ + { + /* just note the righmost digit as a strong RTL */ + pLevState->lastStrongRTL=limit - 1; + break; } - } else { - /* (W6) */ - dirProp=ON; + if (pLevState->startL2EN >= 0) /* after EN, no AN */ + { + addPoint(pBiDi, pLevState->startL2EN, LRM_BEFORE); + pLevState->startL2EN=-2; + } + /* note AN */ + addPoint(pBiDi, start0, LRM_BEFORE); + break; + } + /* if first EN/AN after R/AL */ + if (pLevState->startL2EN == -1) { + pLevState->startL2EN=start0; } + break; - /* apply the result of (W1), (W5)..(W7) to the entire sequence of ET */ + case 6: /* note location of latest R/AL */ + pLevState->lastStrongRTL=limit - 1; + pLevState->startON=-1; break; - case NSM: - /* (W1) */ - dirProp=prevDirProp; - /* set historyOfEN back to prevDirProp's historyOfEN */ - historyOfEN>>=EN_SHIFT; - /* - * Technically, this should be done before the switch() in the form - * if(nextDirProp==NSM) { - * dirProps[next]=nextDirProp=dirProp; - * } - * - * - effectively one iteration ahead. - * However, whether the next dirProp is NSM or is equal to the current dirProp - * does not change the outcome of any condition in (W2)..(W7). - */ + + case 7: /* L after R+ON/EN/AN */ + /* include possible adjacent number on the left */ + for (k=start0-1; k>=0 && !(levels[k]&1); k--); + if(k>=0) { + addPoint(pBiDi, k, RLM_BEFORE); /* add RLM before */ + pInsertPoints=&(pBiDi->insertPoints); + pInsertPoints->confirmed=pInsertPoints->size; /* confirm it */ + } + pLevState->startON=start0; break; - default: + + case 8: /* AN after L */ + /* AN numbers between L text on both sides may be trouble. */ + /* tentatively bracket with LRMs; will be confirmed if followed by L */ + addPoint(pBiDi, start0, LRM_BEFORE); /* add LRM before */ + addPoint(pBiDi, start0, LRM_AFTER); /* add LRM after */ break; - } - /* here, it is always [prev,this,next]dirProp!=BN; it may be next>i+1 */ + case 9: /* R after L+ON/EN/AN */ + /* false alert, infirm LRMs around previous AN */ + pInsertPoints=&(pBiDi->insertPoints); + pInsertPoints->size=pInsertPoints->confirmed; + if (_prop == _S) /* add RLM before S */ + { + addPoint(pBiDi, start0, RLM_BEFORE); + pInsertPoints->confirmed=pInsertPoints->size; + } + break; - /* perform (Nn) - here, only L, R, EN, AN, and neutrals are left */ - /* for "inverse BiDi", treat neutrals like L */ - /* this is one iteration late for the neutrals */ - if(DIRPROP_FLAG(dirProp)&MASK_N) { - if(neutralStart<0) { - /* start of a sequence of neutrals */ - neutralStart=i; - beforeNeutral=prevDirProp; + case 10: /* L after L+ON/AN */ + level=pLevState->runLevel + addLevel; + for(k=pLevState->startON; k=0) { - UBiDiLevel final; - /* end of a sequence of neutrals (dirProp is "afterNeutral") */ - if(!(pBiDi->isInverse)) { - if(beforeNeutral==L) { - if(dirProp==L) { - final=0; /* make all neutrals L (N1) */ - } else { - final=level; /* make all neutrals "e" (N2) */ - } - } else /* beforeNeutral is one of { R, EN, AN } */ { - if(dirProp==L) { - final=level; /* make all neutrals "e" (N2) */ - } else { - final=1; /* make all neutrals R (N1) */ - } + pInsertPoints=&(pBiDi->insertPoints); + pInsertPoints->confirmed=pInsertPoints->size; /* confirm inserts */ + pLevState->startON=start0; + break; + + case 11: /* L after L+ON+EN/AN/ON */ + level=pLevState->runLevel; + for(k=start0-1; k>=pLevState->startON; k--) { + if(levels[k]==level+3) { + while(levels[k]==level+3) { + levels[k--]-=2; } - } else { - /* "inverse BiDi": collapse [before]dirProps L, EN, AN into L */ - if(beforeNeutral!=R) { - if(dirProp!=R) { - final=0; /* make all neutrals L (N1) */ - } else { - final=level; /* make all neutrals "e" (N2) */ - } - } else /* beforeNeutral is one of { R, EN, AN } */ { - if(dirProp!=R) { - final=level; /* make all neutrals "e" (N2) */ - } else { - final=1; /* make all neutrals R (N1) */ - } + while(levels[k]==level) { + k--; } } - /* perform (In) on the sequence of neutrals */ - if((level^final)&1) { - /* do something only if we need to _change_ the level */ - do { - ++levels[neutralStart]; - } while(++neutralStartrunLevel+1; + for(k=start0-1; k>=pLevState->startON; k--) { + if(levels[k]>level) { + levels[k]-=2; } - } else /* EN or AN */ { - /* this level depends on whether we do "inverse BiDi" */ - level=numberLevel; } + break; - /* apply the new level to the sequence, if necessary */ - while(irunLevel + addLevel; + for(k=start; k=0) { - /* - * Note that all levels[] values are still the same at this - * point because this function is called for an entire - * same-level run. - * Therefore, we need to read only one actual level. - */ - UBiDiLevel level=levels[neutralStart], final; +static void +resolveImplicitLevels(UBiDi *pBiDi, + int32_t start, int32_t limit, + DirProp sor, DirProp eor) { + const DirProp *dirProps=pBiDi->dirProps; - /* end of a sequence of neutrals (eor is "afterNeutral") */ - if(!(pBiDi->isInverse)) { - if(beforeNeutral==L) { - if(eor==L) { - final=0; /* make all neutrals L (N1) */ - } else { - final=level; /* make all neutrals "e" (N2) */ - } - } else /* beforeNeutral is one of { R, EN, AN } */ { - if(eor==L) { - final=level; /* make all neutrals "e" (N2) */ - } else { - final=1; /* make all neutrals R (N1) */ - } - } + LevState levState; + int32_t i, start1, start2; + uint8_t oldStateImp, stateImp, actionImp; + uint8_t gprop, resProp, cell; + UBool inverseRTL; + DirProp nextStrongProp=R; + int32_t nextStrongPos=-1; + + /* check for RTL inverse BiDi mode */ + /* FOOD FOR THOUGHT: in case of RTL inverse BiDi, it would make sense to + * loop on the text characters from end to start. + * This would need a different properties state table (at least different + * actions) and different levels state tables (maybe very similar to the + * LTR corresponding ones. + */ + inverseRTL=((startlastArabicPos) && (GET_PARALEVEL(pBiDi, start) & 1) && + (pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_LIKE_DIRECT || + pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL)); + /* initialize for levels state table */ + levState.startL2EN=-1; /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */ + levState.lastStrongRTL=-1; /* used for INVERSE_LIKE_DIRECT_WITH_MARKS */ + levState.state=0; + levState.runLevel=pBiDi->levels[start]; + levState.pImpTab=((pBiDi->pImpTabPair)->pImpTab)[levState.runLevel&1]; + levState.pImpAct=((pBiDi->pImpTabPair)->pImpAct)[levState.runLevel&1]; + processPropertySeq(pBiDi, &levState, sor, start, start); + /* initialize for property state table */ + if(dirProps[start]==NSM) { + stateImp = 1 + sor; + } else { + stateImp=0; + } + start1=start; + start2=start; + + for(i=start; i<=limit; i++) { + if(i>=limit) { + gprop=eor; } else { - /* "inverse BiDi": collapse [before]dirProps L, EN, AN into L */ - if(beforeNeutral!=R) { - if(eor!=R) { - final=0; /* make all neutrals L (N1) */ - } else { - final=level; /* make all neutrals "e" (N2) */ - } - } else /* beforeNeutral is one of { R, EN, AN } */ { - if(eor!=R) { - final=level; /* make all neutrals "e" (N2) */ - } else { - final=1; /* make all neutrals R (N1) */ + DirProp prop, prop1; + prop=NO_CONTEXT_RTL(dirProps[i]); + if(inverseRTL) { + if(prop==AL) { + /* AL before EN does not make it AN */ + prop=R; + } else if(prop==EN) { + if(nextStrongPos<=i) { + /* look for next strong char (L/R/AL) */ + int32_t j; + nextStrongProp=R; /* set default */ + nextStrongPos=limit; + for(j=i+1; jflags&MASK_WS) { - UBiDiLevel paraLevel=pBiDi->paraLevel; + UBool orderParagraphsLTR=pBiDi->orderParagraphsLTR; Flags flag; i=pBiDi->trailingWSStart; while(i>0) { /* reset a sequence of WS/BN before eop and B/S to the paragraph paraLevel */ - while(i>0 && DIRPROP_FLAG(dirProps[--i])&MASK_WS) { - levels[i]=paraLevel; + while(i>0 && (flag=DIRPROP_FLAG_NC(dirProps[--i]))&MASK_WS) { + if(orderParagraphsLTR&&(flag&DIRPROP_FLAG(B))) { + levels[i]=0; + } else { + levels[i]=GET_PARALEVEL(pBiDi, i); + } } /* reset BN to the next character's paraLevel until B/S, which restarts above loop */ /* here, i+1 is guaranteed to be 0) { - flag=DIRPROP_FLAG(dirProps[--i]); + flag=DIRPROP_FLAG_NC(dirProps[--i]); if(flag&MASK_BN_EXPLICIT) { levels[i]=levels[i+1]; + } else if(orderParagraphsLTR&&(flag&DIRPROP_FLAG(B))) { + levels[i]=0; + break; } else if(flag&MASK_B_S) { - levels[i]=paraLevel; + levels[i]=GET_PARALEVEL(pBiDi, i); break; } } @@ -997,6 +1544,159 @@ adjustWSLevels(UBiDi *pBiDi) { } } +#define BIDI_MIN(x, y) ((x)<(y) ? (x) : (y)) +#define BIDI_ABS(x) ((x)>=0 ? (x) : (-(x))) +static void +setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length, + UBiDiLevel paraLevel, UErrorCode *pErrorCode) { + void *runsOnlyMemory; + int32_t *visualMap; + UChar *visualText; + const UBiDiLevel *levels; + UBiDiLevel *saveLevels; + Run *runs; + int32_t visualLength, i, j, visualStart, logicalStart, + runCount, runLength, addedRuns, insertRemove, + start, limit, step, indexOddBit, logicalPos, + index, index1; + uint32_t saveOptions; + + pBiDi->reorderingMode=UBIDI_REORDER_DEFAULT; + if(length==0) { + ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode); + goto cleanup3; + } + /* obtain memory for mapping table and visual text */ + runsOnlyMemory=uprv_malloc(length*(sizeof(int32_t)+sizeof(UChar)+sizeof(UBiDiLevel))); + if(runsOnlyMemory==NULL) { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + goto cleanup3; + } + visualMap=runsOnlyMemory; + visualText=(UChar *)&visualMap[length]; + saveLevels=(UBiDiLevel *)&visualText[length]; + saveOptions=pBiDi->reorderingOptions; + if(saveOptions & UBIDI_OPTION_INSERT_MARKS) { + pBiDi->reorderingOptions&=~UBIDI_OPTION_INSERT_MARKS; + pBiDi->reorderingOptions|=UBIDI_OPTION_REMOVE_CONTROLS; + } + ubidi_setPara(pBiDi, text, length, paraLevel, NULL, pErrorCode); + levels=ubidi_getLevels(pBiDi, pErrorCode); + + /* FOOD FOR THOUGHT: instead of writing the visual text, we could use + * the visual map and the dirProps array to drive the second call + * to ubidi_setPara (but must make provision for possible removal of + * BiDi controls. Alternatively, only use the dirProps array via + * customized classifier callback. + */ + visualLength=ubidi_writeReordered(pBiDi, visualText, length, + UBIDI_DO_MIRRORING, pErrorCode); + pBiDi->reorderingOptions=saveOptions; + ubidi_getVisualMap(pBiDi, visualMap, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + goto cleanup2; + } + uprv_memcpy(saveLevels, levels, length*sizeof(UBiDiLevel)); + + pBiDi->reorderingMode=UBIDI_REORDER_INVERSE_LIKE_DIRECT; + paraLevel=pBiDi->paraLevel^1; + ubidi_setPara(pBiDi, visualText, visualLength, paraLevel, NULL, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + goto cleanup1; + } + ubidi_getRuns(pBiDi); + /* check if some runs must be split, count how many splits */ + addedRuns=0; + runCount=pBiDi->runCount; + runs=pBiDi->runs; + visualStart=0; + for(i=0; irunsMemory[0]=runs[0]; + } + runs=pBiDi->runs=pBiDi->runsMemory; + pBiDi->runCount+=addedRuns; + } else { + goto cleanup1; + } + } + /* split runs which are not consecutive in source text */ + for(i=runCount-1; i>=0; i--) { + runLength= i==0 ? runs[0].visualLimit : + runs[i].visualLimit-runs[i-1].visualLimit; + logicalStart=runs[i].logicalStart; + indexOddBit=GET_ODD_BIT(logicalStart); + logicalStart=GET_INDEX(logicalStart); + if(runLength<2) { + if(addedRuns) { + runs[i+addedRuns]=runs[i]; + } + logicalPos=visualMap[logicalStart]; + runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos, + saveLevels[logicalPos]^indexOddBit); + continue; + } + if(indexOddBit) { + start=logicalStart; + limit=logicalStart+runLength-1; + step=1; + } else { + start=logicalStart+runLength-1; + limit=logicalStart; + step=-1; + } + for(j=start; j!=limit; j+=step) { + index=visualMap[j]; + index1=visualMap[j+step]; + if((BIDI_ABS(index-index1)!=1) || (saveLevels[index]!=saveLevels[index1])) { + logicalPos=BIDI_MIN(visualMap[start], index); + runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos, + saveLevels[logicalPos]^indexOddBit); + runs[i+addedRuns].visualLimit=runs[i].visualLimit; + runs[i].visualLimit-=BIDI_ABS(j-start)+1; + insertRemove=runs[i].insertRemove&(LRM_AFTER|RLM_AFTER); + runs[i+addedRuns].insertRemove=insertRemove; + runs[i].insertRemove&=~insertRemove; + start=j+step; + addedRuns--; + } + } + if(addedRuns) { + runs[i+addedRuns]=runs[i]; + } + logicalPos=BIDI_MIN(visualMap[start], visualMap[limit]); + runs[i+addedRuns].logicalStart=MAKE_INDEX_ODD_PAIR(logicalPos, + saveLevels[logicalPos]^indexOddBit); + } + + cleanup1: + /* restore initial paraLevel */ + pBiDi->paraLevel^=1; + cleanup2: + /* restore real text */ + pBiDi->text=text; + /* free memory for mapping table and visual text */ + uprv_free(runsOnlyMemory); + cleanup3: + pBiDi->reorderingMode=UBIDI_REORDER_RUNS_ONLY; +} + /* ubidi_setPara ------------------------------------------------------------ */ U_CAPI void U_EXPORT2 @@ -1020,16 +1720,34 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, length=u_strlen(text); } + /* special treatment for RUNS_ONLY mode */ + if(pBiDi->reorderingMode==UBIDI_REORDER_RUNS_ONLY) { + setParaRunsOnly(pBiDi, text, length, paraLevel, pErrorCode); + return; + } + /* initialize the UBiDi structure */ + pBiDi->pParaBiDi=NULL; /* mark unfinished setPara */ pBiDi->text=text; - pBiDi->length=length; + pBiDi->length=pBiDi->originalLength=pBiDi->resultLength=length; pBiDi->paraLevel=paraLevel; pBiDi->direction=UBIDI_LTR; - pBiDi->trailingWSStart=length; /* the levels[] will reflect the WS run */ + pBiDi->paraCount=1; pBiDi->dirProps=NULL; pBiDi->levels=NULL; pBiDi->runs=NULL; + pBiDi->insertPoints.size=0; /* clean up from last call */ + pBiDi->insertPoints.confirmed=0; /* clean up from last call */ + + /* + * Save the original paraLevel if contextual; otherwise, set to 0. + */ + if(IS_DEFAULT_LEVEL(paraLevel)) { + pBiDi->defaultParaLevel=paraLevel; + } else { + pBiDi->defaultParaLevel=0; + } if(length==0) { /* @@ -1039,6 +1757,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, */ if(IS_DEFAULT_LEVEL(paraLevel)) { pBiDi->paraLevel&=1; + pBiDi->defaultParaLevel=0; } if(paraLevel&1) { pBiDi->flags=DIRPROP_FLAG(R); @@ -1049,6 +1768,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, } pBiDi->runCount=0; + pBiDi->pParaBiDi=pBiDi; /* mark successful setPara */ return; } @@ -1057,15 +1777,32 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, /* * Get the directional properties, * the flags bit-set, and - * determine the partagraph level if necessary. + * determine the paragraph level if necessary. */ if(getDirPropsMemory(pBiDi, length)) { pBiDi->dirProps=pBiDi->dirPropsMemory; - getDirProps(pBiDi, text); + getDirProps(pBiDi); } else { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return; } + /* the processed length may have changed if UBIDI_OPTION_STREAMING */ + length= pBiDi->length; + pBiDi->trailingWSStart=length; /* the levels[] will reflect the WS run */ + /* allocate paras memory */ + if(pBiDi->paraCount>1) { + if(getInitialParasMemory(pBiDi, pBiDi->paraCount)) { + pBiDi->paras=pBiDi->parasMemory; + pBiDi->paras[pBiDi->paraCount-1]=length; + } else { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + return; + } + } else { + /* initialize paras for single paragraph */ + pBiDi->paras=pBiDi->simpleParas; + pBiDi->simpleParas[0]=length; + } /* are explicit levels specified? */ if(embeddingLevels==NULL) { @@ -1078,7 +1815,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, return; } } else { - /* set BN for all explicit codes, check that all levels are paraLevel..UBIDI_MAX_EXPLICIT_LEVEL */ + /* set BN for all explicit codes, check that all levels are 0 or paraLevel..UBIDI_MAX_EXPLICIT_LEVEL */ pBiDi->levels=embeddingLevels; direction=checkExplicitLevels(pBiDi, pErrorCode); if(U_FAILURE(*pErrorCode)) { @@ -1107,6 +1844,45 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, pBiDi->trailingWSStart=0; break; default: + /* + * Choose the right implicit state table + */ + switch(pBiDi->reorderingMode) { + case UBIDI_REORDER_DEFAULT: + pBiDi->pImpTabPair=&impTab_DEFAULT; + break; + case UBIDI_REORDER_NUMBERS_SPECIAL: + pBiDi->pImpTabPair=&impTab_NUMBERS_SPECIAL; + break; + case UBIDI_REORDER_GROUP_NUMBERS_WITH_R: + pBiDi->pImpTabPair=&impTab_GROUP_NUMBERS_WITH_R; + break; + case UBIDI_REORDER_RUNS_ONLY: + /* we should never get here */ + pBiDi=NULL; + pBiDi->text=NULL; /* make the program crash! */ + break; + case UBIDI_REORDER_INVERSE_NUMBERS_AS_L: + pBiDi->pImpTabPair=&impTab_INVERSE_NUMBERS_AS_L; + break; + case UBIDI_REORDER_INVERSE_LIKE_DIRECT: + if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) { + pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT_WITH_MARKS; + } else { + pBiDi->pImpTabPair=&impTab_INVERSE_LIKE_DIRECT; + } + break; + case UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL: + if (pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) { + pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL_WITH_MARKS; + } else { + pBiDi->pImpTabPair=&impTab_INVERSE_FOR_NUMBERS_SPECIAL; + } + break; + default: + pBiDi->pImpTabPair=&impTab_DEFAULT; + break; + } /* * If there are no external levels specified and there * are no significant explicit level codes in the text, @@ -1120,8 +1896,8 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, */ if(embeddingLevels==NULL && !(pBiDi->flags&DIRPROP_FLAG_MULTI_RUNS)) { resolveImplicitLevels(pBiDi, 0, length, - GET_LR_FROM_LEVEL(pBiDi->paraLevel), - GET_LR_FROM_LEVEL(pBiDi->paraLevel)); + GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, 0)), + GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, length-1))); } else { /* sor, eor: start and end types of same-level-run */ UBiDiLevel *levels=pBiDi->levels; @@ -1130,7 +1906,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, DirProp sor, eor; /* determine the first sor and set eor to it because of the loop body (sor=eor there) */ - level=pBiDi->paraLevel; + level=GET_PARALEVEL(pBiDi, 0); nextLevel=levels[0]; if(level0) && (NO_CONTEXT_RTL(pBiDi->dirProps[start-1])==B)) { + /* except if this is a new paragraph, then set sor = para level */ + sor=GET_LR_FROM_LEVEL(GET_PARALEVEL(pBiDi, start)); + } else { + sor=eor; + } /* search for the limit of this run */ while(++limitparaLevel; + nextLevel=GET_PARALEVEL(pBiDi, length-1); } /* determine eor from max(level, nextLevel); sor is last run's eor */ @@ -1175,24 +1956,43 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, } } while(limitinsertPoints.errorCode)) + { + *pErrorCode=pBiDi->insertPoints.errorCode; + return; + } /* reset the embedding levels for some non-graphic characters (L1), (X9) */ adjustWSLevels(pBiDi); - - /* for "inverse BiDi", ubidi_getRuns() modifies the levels of numeric runs following RTL runs */ - if(pBiDi->isInverse) { - if(!ubidi_getRuns(pBiDi)) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return; - } - } break; } + if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) { + pBiDi->resultLength -= pBiDi->controlCount; + } else { + pBiDi->resultLength += pBiDi->insertPoints.size; + } + pBiDi->pParaBiDi=pBiDi; /* mark successful setPara */ +} + +U_CAPI void U_EXPORT2 +ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR) { + if(pBiDi!=NULL) { + pBiDi->orderParagraphsLTR=orderParagraphsLTR; + } +} + +U_CAPI UBool U_EXPORT2 +ubidi_isOrderParagraphsLTR(UBiDi *pBiDi) { + if(pBiDi!=NULL) { + return pBiDi->orderParagraphsLTR; + } else { + return FALSE; + } } U_CAPI UBiDiDirection U_EXPORT2 ubidi_getDirection(const UBiDi *pBiDi) { - if(pBiDi!=NULL) { + if(IS_VALID_PARA_OR_LINE(pBiDi)) { return pBiDi->direction; } else { return UBIDI_LTR; @@ -1201,7 +2001,7 @@ ubidi_getDirection(const UBiDi *pBiDi) { U_CAPI const UChar * U_EXPORT2 ubidi_getText(const UBiDi *pBiDi) { - if(pBiDi!=NULL) { + if(IS_VALID_PARA_OR_LINE(pBiDi)) { return pBiDi->text; } else { return NULL; @@ -1210,155 +2010,152 @@ ubidi_getText(const UBiDi *pBiDi) { U_CAPI int32_t U_EXPORT2 ubidi_getLength(const UBiDi *pBiDi) { - if(pBiDi!=NULL) { + if(IS_VALID_PARA_OR_LINE(pBiDi)) { + return pBiDi->originalLength; + } else { + return 0; + } +} + +U_CAPI int32_t U_EXPORT2 +ubidi_getProcessedLength(const UBiDi *pBiDi) { + if(IS_VALID_PARA_OR_LINE(pBiDi)) { return pBiDi->length; } else { return 0; } } +U_CAPI int32_t U_EXPORT2 +ubidi_getResultLength(const UBiDi *pBiDi) { + if(IS_VALID_PARA_OR_LINE(pBiDi)) { + return pBiDi->resultLength; + } else { + return 0; + } +} + +/* paragraphs API functions ------------------------------------------------- */ + U_CAPI UBiDiLevel U_EXPORT2 ubidi_getParaLevel(const UBiDi *pBiDi) { - if(pBiDi!=NULL) { + if(IS_VALID_PARA_OR_LINE(pBiDi)) { return pBiDi->paraLevel; } else { return 0; } } -/* statetable prototype ----------------------------------------------------- */ - -/* - * This is here for possible future - * performance work and is not compiled right now. - */ - -#if 0 -/* - * This is a piece of code that could be part of ubidi.c/resolveImplicitLevels(). - * It replaces in the (Wn) state machine the switch()-if()-cascade with - * just a few if()s and a state table. - */ - -/* use the state table only for the following dirProp's */ -#define MASK_W_TABLE (FLAG(L)|FLAG(R)|FLAG(AL)|FLAG(EN)|FLAG(ES)|FLAG(CS)|FLAG(ET)|FLAG(AN)) - -/* - * inputs: - * - * 0..1 historyOfEN - 2b - * 2 prevDirProp==AN - 1b - * 3..4 lastStrong, one of { L, R, AL, none } - 2b - * 5..7 dirProp, one of { L, R, AL, EN, ES, CS, ET, AN } - 3b - * 8..9 nextDirProp, one of { EN, AN, other } - * - * total: 10b=1024 states - */ -enum { _L, _R, _AL, _EN, _ES, _CS, _ET, _AN, _OTHER }; /* lastStrong, dirProp */ -enum { __EN, __AN, __OTHER }; /* nextDirProp */ - -#define LAST_STRONG_SHIFT 3 -#define DIR_PROP_SHIFT 5 -#define NEXT_DIR_PROP_SHIFT 8 - -/* masks after shifting */ -#define LAST_STRONG_MASK 3 -#define DIR_PROP_MASK 7 -#define STATE_MASK 0x1f +U_CAPI int32_t U_EXPORT2 +ubidi_countParagraphs(UBiDi *pBiDi) { + if(!IS_VALID_PARA_OR_LINE(pBiDi)) { + return 0; + } else { + return pBiDi->paraCount; + } +} -/* convert dirProp into _dirProp (above enum) */ -static DirProp inputDirProp[dirPropCount]={ _X<=pBiDi->paraCount ) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return; + } + pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */ + if(paraIndex) { + paraStart=pBiDi->paras[paraIndex-1]; + } else { + paraStart=0; + } + if(pParaStart!=NULL) { + *pParaStart=paraStart; + } + if(pParaLimit!=NULL) { + *pParaLimit=pBiDi->paras[paraIndex]; + } + if(pParaLevel!=NULL) { + *pParaLevel=GET_PARALEVEL(pBiDi, paraStart); + } + return; +} -/* - * outputs: - * - * dirProp, one of { L, R, EN, AN, ON } - 3b - * - * 0..1 historyOfEN - 2b - * 2 prevDirProp==AN - 1b - * 3..4 lastStrong, one of { L, R, AL, none } - 2b - * 5..7 new dirProp, one of { L, R, EN, AN, ON } - * - * total: 8 bits=1 byte per state - */ -enum { ___L, ___R, ___EN, ___AN, ___ON, ___count }; +U_CAPI int32_t U_EXPORT2 +ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, + int32_t *pParaStart, int32_t *pParaLimit, + UBiDiLevel *pParaLevel, UErrorCode *pErrorCode) { + uint32_t paraIndex; -/* convert ___dirProp into dirProp (above enum) */ -static DirProp outputDirProp[___count]={ X, ... }; + /* check the argument values */ + /* pErrorCode will be checked by the call to ubidi_getParagraphByIndex */ + if( !IS_VALID_PARA_OR_LINE(pBiDi)) {/* no valid setPara/setLine */ + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + pBiDi=pBiDi->pParaBiDi; /* get Para object if Line object */ + if( charIndex<0 || charIndex>=pBiDi->length ) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + for(paraIndex=0; charIndex>=pBiDi->paras[paraIndex]; paraIndex++); + ubidi_getParagraphByIndex(pBiDi, paraIndex, pParaStart, pParaLimit, pParaLevel, pErrorCode); + return paraIndex; +} -/* state table */ -static uint8_t wnTable[1024]={ /* calculate with switch()-if()-cascade */ }; +U_CAPI void U_EXPORT2 +ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, + const void *newContext, UBiDiClassCallback **oldFn, + const void **oldContext, UErrorCode *pErrorCode) +{ + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return; + } else if(pBiDi==NULL) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return; + } + if( oldFn ) + { + *oldFn = pBiDi->fnClassCallback; + } + if( oldContext ) + { + *oldContext = pBiDi->coClassCallback; + } + pBiDi->fnClassCallback = newFn; + pBiDi->coClassCallback = newContext; +} -static void -resolveImplicitLevels(BiDi *pBiDi, - Index start, Index end, - DirProp sor, DirProp eor) { - /* new variable */ - uint8_t state; - - /* remove variable lastStrong */ - - /* set initial state (set lastStrong, the rest is 0) */ - state= sor==L ? 0 : _R<>DIR_PROP_SHIFT]; - state&=STATE_MASK; - } else if(dirProp==ET) { - /* get sequence of ET; advance only next, not current, previous or historyOfEN */ - while(nextfnClassCallback; + } + if( context ) + { + *context = pBiDi->coClassCallback; + } +} - state=wnTable[ - ((int)state)| - _ET<>DIR_PROP_SHIFT]; - state&=STATE_MASK; - - /* apply the result of (W1), (W5)..(W7) to the entire sequence of ET */ - } else if(dirProp==NSM) { - /* (W1) */ - dirProp=prevDirProp; - /* keep prevDirProp's EN and AN states! */ - } else /* other */ { - /* set EN and AN states to 0 */ - state&=LAST_STRONG_MASK<fnClassCallback == NULL || + (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_CLASS_DEFAULT ) + { + return ubidi_getClass(pBiDi->bdp, c); + } else { + return dir; } - /* perform (Nn) and (In) as usual */ } -#endif + diff --git a/icuSources/common/ubidi_props.c b/icuSources/common/ubidi_props.c new file mode 100644 index 00000000..8538c6c5 --- /dev/null +++ b/icuSources/common/ubidi_props.c @@ -0,0 +1,519 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: ubidi_props.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004dec30 +* created by: Markus W. Scherer +* +* Low-level Unicode bidi/shaping properties access. +*/ + +#include "unicode/utypes.h" +#include "unicode/uset.h" +#include "unicode/udata.h" /* UDataInfo */ +#include "ucmndata.h" /* DataHeader */ +#include "udatamem.h" +#include "umutex.h" +#include "uassert.h" +#include "cmemory.h" +#include "utrie.h" +#include "ubidi_props.h" +#include "ucln_cmn.h" + +struct UBiDiProps { + UDataMemory *mem; + const int32_t *indexes; + const uint32_t *mirrors; + const uint8_t *jgArray; + + UTrie trie; + uint8_t formatVersion[4]; +}; + +/* data loading etc. -------------------------------------------------------- */ + +#define UBIDI_HARDCODE_DATA 1 + +#if UBIDI_HARDCODE_DATA + +/* ubidi_props_data.c is machine-generated by genbidi --csource */ +#include "ubidi_props_data.c" + +#else + +static UBool U_CALLCONV +isAcceptable(void *context, + const char *type, const char *name, + const UDataInfo *pInfo) { + if( + pInfo->size>=20 && + pInfo->isBigEndian==U_IS_BIG_ENDIAN && + pInfo->charsetFamily==U_CHARSET_FAMILY && + pInfo->dataFormat[0]==UBIDI_FMT_0 && /* dataFormat="BiDi" */ + pInfo->dataFormat[1]==UBIDI_FMT_1 && + pInfo->dataFormat[2]==UBIDI_FMT_2 && + pInfo->dataFormat[3]==UBIDI_FMT_3 && + pInfo->formatVersion[0]==1 && + pInfo->formatVersion[2]==UTRIE_SHIFT && + pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT + ) { + UBiDiProps *bdp=(UBiDiProps *)context; + uprv_memcpy(bdp->formatVersion, pInfo->formatVersion, 4); + return TRUE; + } else { + return FALSE; + } +} + +static UBiDiProps * +ubidi_openData(UBiDiProps *bdpProto, + const uint8_t *bin, int32_t length, UErrorCode *pErrorCode) { + UBiDiProps *bdp; + int32_t size; + + bdpProto->indexes=(const int32_t *)bin; + if( (length>=0 && length<16*4) || + bdpProto->indexes[UBIDI_IX_INDEX_TOP]<16 + ) { + /* length or indexes[] too short for minimum indexes[] length of 16 */ + *pErrorCode=U_INVALID_FORMAT_ERROR; + return NULL; + } + size=bdpProto->indexes[UBIDI_IX_INDEX_TOP]*4; + if(length>=0) { + if(length>=size && length>=bdpProto->indexes[UBIDI_IX_LENGTH]) { + length-=size; + } else { + /* length too short for indexes[] or for the whole data length */ + *pErrorCode=U_INVALID_FORMAT_ERROR; + return NULL; + } + } + bin+=size; + /* from here on, assume that the sizes of the items fit into the total length */ + + /* unserialize the trie, after indexes[] */ + size=bdpProto->indexes[UBIDI_IX_TRIE_SIZE]; + utrie_unserialize(&bdpProto->trie, bin, size, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + bin+=size; + + /* get mirrors[] */ + size=4*bdpProto->indexes[UBIDI_IX_MIRROR_LENGTH]; + bdpProto->mirrors=(const uint32_t *)bin; + bin+=size; + + /* get jgArray[] */ + size=bdpProto->indexes[UBIDI_IX_JG_LIMIT]-bdpProto->indexes[UBIDI_IX_JG_START]; + bdpProto->jgArray=bin; + bin+=size; + + /* allocate, copy, and return the new UBiDiProps */ + bdp=(UBiDiProps *)uprv_malloc(sizeof(UBiDiProps)); + if(bdp==NULL) { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + return NULL; + } else { + uprv_memcpy(bdp, bdpProto, sizeof(UBiDiProps)); + return bdp; + } +} + +U_CAPI UBiDiProps * U_EXPORT2 +ubidi_openProps(UErrorCode *pErrorCode) { + UBiDiProps bdpProto={ NULL }, *bdp; + + bdpProto.mem=udata_openChoice(NULL, UBIDI_DATA_TYPE, UBIDI_DATA_NAME, isAcceptable, &bdpProto, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + + bdp=ubidi_openData( + &bdpProto, + udata_getMemory(bdpProto.mem), + udata_getLength(bdpProto.mem), + pErrorCode); + if(U_FAILURE(*pErrorCode)) { + udata_close(bdpProto.mem); + return NULL; + } else { + return bdp; + } +} + +U_CAPI UBiDiProps * U_EXPORT2 +ubidi_openBinary(const uint8_t *bin, int32_t length, UErrorCode *pErrorCode) { + UBiDiProps bdpProto={ NULL }; + const DataHeader *hdr; + + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + if(bin==NULL) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + /* check the header */ + if(length>=0 && length<20) { + *pErrorCode=U_INVALID_FORMAT_ERROR; + return NULL; + } + hdr=(const DataHeader *)bin; + if( + !(hdr->dataHeader.magic1==0xda && hdr->dataHeader.magic2==0x27 && + hdr->info.isBigEndian==U_IS_BIG_ENDIAN && + isAcceptable(&bdpProto, UBIDI_DATA_TYPE, UBIDI_DATA_NAME, &hdr->info)) + ) { + *pErrorCode=U_INVALID_FORMAT_ERROR; + return NULL; + } + + bin+=hdr->dataHeader.headerSize; + if(length>=0) { + length-=hdr->dataHeader.headerSize; + } + return ubidi_openData(&bdpProto, bin, length, pErrorCode); +} + +#endif + +U_CAPI void U_EXPORT2 +ubidi_closeProps(UBiDiProps *bdp) { + if(bdp!=NULL) { +#if !UBIDI_HARDCODE_DATA + udata_close(bdp->mem); +#endif + uprv_free(bdp); + } +} + +/* UBiDiProps singleton ----------------------------------------------------- */ + +static UBiDiProps *gBdp=NULL, *gBdpDummy=NULL; +#if !UBIDI_HARDCODE_DATA +static UErrorCode gErrorCode=U_ZERO_ERROR; +static int8_t gHaveData=0; +#endif + +static UBool U_CALLCONV +ubidi_cleanup(void) { + ubidi_closeProps(gBdp); + gBdp=NULL; + ubidi_closeProps(gBdpDummy); + gBdpDummy=NULL; +#if !UBIDI_HARDCODE_DATA + gErrorCode=U_ZERO_ERROR; + gHaveData=0; +#endif + return TRUE; +} + +U_CAPI const UBiDiProps * U_EXPORT2 +ubidi_getSingleton(UErrorCode *pErrorCode) { +#if UBIDI_HARDCODE_DATA + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + return &ubidi_props_singleton; +#else + int8_t haveData; + + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + + UMTX_CHECK(NULL, gHaveData, haveData); + + if(haveData>0) { + /* data was loaded */ + return gBdp; + } else if(haveData<0) { + /* data loading failed */ + *pErrorCode=gErrorCode; + return NULL; + } else /* haveData==0 */ { + /* load the data */ + UBiDiProps *bdp=ubidi_openProps(pErrorCode); + if(U_FAILURE(*pErrorCode)) { + gHaveData=-1; + gErrorCode=*pErrorCode; + return NULL; + } + + /* set the static variables */ + umtx_lock(NULL); + if(gBdp==NULL) { + gBdp=bdp; + bdp=NULL; + gHaveData=1; + ucln_common_registerCleanup(UCLN_COMMON_UBIDI, ubidi_cleanup); + } + umtx_unlock(NULL); + + ubidi_closeProps(bdp); + return gBdp; + } +#endif +} + +U_CAPI const UBiDiProps * U_EXPORT2 +ubidi_getDummy(UErrorCode *pErrorCode) { + UBiDiProps *bdp; + + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + + UMTX_CHECK(NULL, gBdpDummy, bdp); + + if(bdp!=NULL) { + /* the dummy object was already created */ + return bdp; + } else /* bdp==NULL */ { + /* create the dummy object */ + int32_t *indexes; + + bdp=(UBiDiProps *)uprv_malloc(sizeof(UBiDiProps)+UBIDI_IX_TOP*4+UTRIE_DUMMY_SIZE); + if(bdp==NULL) { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memset(bdp, 0, sizeof(UBiDiProps)+UBIDI_IX_TOP*4); + + bdp->indexes=indexes=(int32_t *)(bdp+1); + indexes[UBIDI_IX_INDEX_TOP]=UBIDI_IX_TOP; + + indexes[UBIDI_IX_TRIE_SIZE]= + utrie_unserializeDummy(&bdp->trie, indexes+UBIDI_IX_TOP, UTRIE_DUMMY_SIZE, 0, 0, TRUE, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + uprv_free(bdp); + return NULL; + } + + bdp->formatVersion[0]=1; + bdp->formatVersion[2]=UTRIE_SHIFT; + bdp->formatVersion[3]=UTRIE_INDEX_SHIFT; + + /* set the static variables */ + umtx_lock(NULL); + if(gBdpDummy==NULL) { + gBdpDummy=bdp; + bdp=NULL; + ucln_common_registerCleanup(UCLN_COMMON_UBIDI, ubidi_cleanup); + } + umtx_unlock(NULL); + + uprv_free(bdp); + return gBdpDummy; + } +} + +/* set of property starts for UnicodeSet ------------------------------------ */ + +static UBool U_CALLCONV +_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint32_t value) { + /* add the start code point to the USet */ + const USetAdder *sa=(const USetAdder *)context; + sa->add(sa->set, start); + return TRUE; +} + +U_CAPI void U_EXPORT2 +ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode) { + int32_t i, length; + UChar32 c, start, limit; + + const uint8_t *jgArray; + uint8_t prev, jg; + + if(U_FAILURE(*pErrorCode)) { + return; + } + + /* add the start code point of each same-value range of the trie */ + utrie_enum(&bdp->trie, NULL, _enumPropertyStartsRange, sa); + + /* add the code points from the bidi mirroring table */ + length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH]; + for(i=0; imirrors[i]); + sa->addRange(sa->set, c, c+1); + } + + /* add the code points from the Joining_Group array where the value changes */ + start=bdp->indexes[UBIDI_IX_JG_START]; + limit=bdp->indexes[UBIDI_IX_JG_LIMIT]; + jgArray=bdp->jgArray; + prev=0; + while(startadd(sa->set, start); + prev=jg; + } + ++start; + } + if(prev!=0) { + /* add the limit code point if the last value was not 0 (it is now start==limit) */ + sa->add(sa->set, limit); + } + + /* add code points with hardcoded properties, plus the ones following them */ + + /* (none right now) */ +} + +/* data access primitives --------------------------------------------------- */ + +/* UTRIE_GET16() itself validates c */ +#define GET_PROPS(bdp, c, result) \ + UTRIE_GET16(&(bdp)->trie, c, result); + +/* property access functions ------------------------------------------------ */ + +U_CFUNC int32_t +ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which) { + int32_t max; + + if(bdp==NULL) { + return -1; + } + + max=bdp->indexes[UBIDI_MAX_VALUES_INDEX]; + switch(which) { + case UCHAR_BIDI_CLASS: + return (max&UBIDI_CLASS_MASK); + case UCHAR_JOINING_GROUP: + return (max&UBIDI_MAX_JG_MASK)>>UBIDI_MAX_JG_SHIFT; + case UCHAR_JOINING_TYPE: + return (max&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT; + default: + return -1; /* undefined */ + } +} + +U_CAPI UCharDirection U_EXPORT2 +ubidi_getClass(const UBiDiProps *bdp, UChar32 c) { + uint32_t props; + GET_PROPS(bdp, c, props); + return (UCharDirection)UBIDI_GET_CLASS(props); +} + +U_CAPI UBool U_EXPORT2 +ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c) { + uint32_t props; + GET_PROPS(bdp, c, props); + return (UBool)UBIDI_GET_FLAG(props, UBIDI_IS_MIRRORED_SHIFT); +} + +U_CAPI UChar32 U_EXPORT2 +ubidi_getMirror(const UBiDiProps *bdp, UChar32 c) { + uint32_t props; + int32_t delta; + + GET_PROPS(bdp, c, props); + delta=((int16_t)props)>>UBIDI_MIRROR_DELTA_SHIFT; + if(delta!=UBIDI_ESC_MIRROR_DELTA) { + return c+delta; + } else { + /* look for mirror code point in the mirrors[] table */ + const uint32_t *mirrors; + uint32_t m; + int32_t i, length; + UChar32 c2; + + mirrors=bdp->mirrors; + length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH]; + + /* linear search */ + for(i=0; i>UBIDI_JT_SHIFT); +} + +U_CAPI UJoiningGroup U_EXPORT2 +ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c) { + UChar32 start, limit; + + start=bdp->indexes[UBIDI_IX_JG_START]; + limit=bdp->indexes[UBIDI_IX_JG_LIMIT]; + if(start<=c && cjgArray[c-start]; + } else { + return U_JG_NO_JOINING_GROUP; + } +} + +/* public API (see uchar.h) ------------------------------------------------- */ + +U_CAPI UCharDirection U_EXPORT2 +u_charDirection(UChar32 c) { + UErrorCode errorCode=U_ZERO_ERROR; + const UBiDiProps *bdp=ubidi_getSingleton(&errorCode); + if(bdp!=NULL) { + return ubidi_getClass(bdp, c); + } else { + return U_LEFT_TO_RIGHT; + } +} + +U_CAPI UBool U_EXPORT2 +u_isMirrored(UChar32 c) { + UErrorCode errorCode=U_ZERO_ERROR; + const UBiDiProps *bdp=ubidi_getSingleton(&errorCode); + return (UBool)(bdp!=NULL && ubidi_isMirrored(bdp, c)); +} + +U_CAPI UChar32 U_EXPORT2 +u_charMirror(UChar32 c) { + UErrorCode errorCode=U_ZERO_ERROR; + const UBiDiProps *bdp=ubidi_getSingleton(&errorCode); + if(bdp!=NULL) { + return ubidi_getMirror(bdp, c); + } else { + return c; + } +} diff --git a/icuSources/common/ubidi_props.h b/icuSources/common/ubidi_props.h new file mode 100644 index 00000000..7788c8b4 --- /dev/null +++ b/icuSources/common/ubidi_props.h @@ -0,0 +1,160 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: ubidi_props.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004dec30 +* created by: Markus W. Scherer +* +* Low-level Unicode bidi/shaping properties access. +*/ + +#ifndef __UBIDI_PROPS_H__ +#define __UBIDI_PROPS_H__ + +#include "unicode/utypes.h" +#include "unicode/uset.h" +#include "uset_imp.h" +#include "udataswp.h" + +U_CDECL_BEGIN + +/* library API -------------------------------------------------------------- */ + +struct UBiDiProps; +typedef struct UBiDiProps UBiDiProps; + +U_CAPI UBiDiProps * U_EXPORT2 +ubidi_openProps(UErrorCode *pErrorCode); + +U_CAPI UBiDiProps * U_EXPORT2 +ubidi_openBinary(const uint8_t *bin, int32_t length, UErrorCode *pErrorCode); + +U_CAPI void U_EXPORT2 +ubidi_closeProps(UBiDiProps *bdp); + + +U_CAPI const UBiDiProps * U_EXPORT2 +ubidi_getSingleton(UErrorCode *pErrorCode); + +/** + * Get a singleton dummy object, one that works with no real data. + * This can be used when the real data is not available. + * Using the dummy can reduce checks for available data after an initial failure. + */ +U_CAPI const UBiDiProps * U_EXPORT2 +ubidi_getDummy(UErrorCode *pErrorCode); + + +U_CAPI int32_t U_EXPORT2 +ubidi_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode); + +U_CAPI void U_EXPORT2 +ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode); + +/* property access functions */ + +U_CFUNC int32_t +ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which); + +U_CAPI UCharDirection U_EXPORT2 +ubidi_getClass(const UBiDiProps *bdp, UChar32 c); + +U_CAPI UBool U_EXPORT2 +ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c); + +U_CAPI UChar32 U_EXPORT2 +ubidi_getMirror(const UBiDiProps *bdp, UChar32 c); + +U_CAPI UBool U_EXPORT2 +ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c); + +U_CAPI UBool U_EXPORT2 +ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c); + +U_CAPI UJoiningType U_EXPORT2 +ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c); + +U_CAPI UJoiningGroup U_EXPORT2 +ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c); + +/* file definitions --------------------------------------------------------- */ + +#define UBIDI_DATA_NAME "ubidi" +#define UBIDI_DATA_TYPE "icu" + +/* format "BiDi" */ +#define UBIDI_FMT_0 0x42 +#define UBIDI_FMT_1 0x69 +#define UBIDI_FMT_2 0x44 +#define UBIDI_FMT_3 0x69 + +/* indexes into indexes[] */ +enum { + UBIDI_IX_INDEX_TOP, + UBIDI_IX_LENGTH, + UBIDI_IX_TRIE_SIZE, + UBIDI_IX_MIRROR_LENGTH, + + UBIDI_IX_JG_START, + UBIDI_IX_JG_LIMIT, + + UBIDI_MAX_VALUES_INDEX=15, + UBIDI_IX_TOP=16 +}; + +/* definitions for 16-bit bidi/shaping properties word ---------------------- */ + +enum { + /* UBIDI_CLASS_SHIFT=0, */ /* bidi class: 5 bits (4..0) */ + UBIDI_JT_SHIFT=5, /* joining type: 3 bits (7..5) */ + + /* UBIDI__SHIFT=8, reserved: 2 bits (9..8) */ + + UBIDI_JOIN_CONTROL_SHIFT=10, + UBIDI_BIDI_CONTROL_SHIFT=11, + + UBIDI_IS_MIRRORED_SHIFT=12, /* 'is mirrored' */ + UBIDI_MIRROR_DELTA_SHIFT=13, /* bidi mirroring delta: 3 bits (15..13) */ + + UBIDI_MAX_JG_SHIFT=16 /* max JG value in indexes[UBIDI_MAX_VALUES_INDEX] bits 23..16 */ +}; + +#define UBIDI_CLASS_MASK 0x0000001f +#define UBIDI_JT_MASK 0x000000e0 + +#define UBIDI_MAX_JG_MASK 0x00ff0000 + +#define UBIDI_GET_CLASS(props) ((props)&UBIDI_CLASS_MASK) +#define UBIDI_GET_FLAG(props, shift) (((props)>>(shift))&1) + +enum { + UBIDI_ESC_MIRROR_DELTA=-4, + UBIDI_MIN_MIRROR_DELTA=-3, + UBIDI_MAX_MIRROR_DELTA=3 +}; + +/* definitions for 32-bit mirror table entry -------------------------------- */ + +enum { + /* the source Unicode code point takes 21 bits (20..0) */ + UBIDI_MIRROR_INDEX_SHIFT=21, + UBIDI_MAX_MIRROR_INDEX=0x7ff +}; + +#define UBIDI_GET_MIRROR_CODE_POINT(m) (UChar32)((m)&0x1fffff) + +#define UBIDI_GET_MIRROR_INDEX(m) ((m)>>UBIDI_MIRROR_INDEX_SHIFT) + +U_CDECL_END + +#endif diff --git a/icuSources/common/ubidi_props_data.c b/icuSources/common/ubidi_props_data.c new file mode 100644 index 00000000..e4314164 --- /dev/null +++ b/icuSources/common/ubidi_props_data.c @@ -0,0 +1,698 @@ +/* + * Copyright (C) 1999-2007, International Business Machines + * Corporation and others. All Rights Reserved. + * + * file name: ubidi_props_data.c + * + * machine-generated on: 2006-06-13 + * machine-generated on: 2007-02-08 U_DARWIN + */ + +static const UVersionInfo ubidi_props_dataVersion={5,0,0,0}; + +#ifndef U_DARWIN +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x3f14,0x3d20,0x1a,0x622,0x76e,0,0,0,0,0,0,0,0,0,0x3500b2}; +#else /* U_DARWIN */ +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x4024,0x3e30,0x1a,0x622,0x76e,0,0,0,0,0,0,0,0,0,0x3500b2}; +#endif /* U_DARWIN */ + +#ifndef U_DARWIN +static const uint16_t ubidi_props_trieIndex[7816]={ +#else /* U_DARWIN */ +static const uint16_t ubidi_props_trieIndex[7952]={ +#endif /* U_DARWIN */ +0x250,0x258,0x260,0x268,0x270,0x278,0x280,0x288,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x28e,0x296,0x29e,0x2a6,0x2a6,0x2a6,0x2aa,0x2b2,0x248,0x248,0x2b5, +0x248,0x248,0x248,0x248,0x2bd,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x2c3,0x2c8,0x2d0,0x2d2, +0x2da,0x2e2,0x2ea,0x2f2,0x2f8,0x2ff,0x307,0x30f,0x317,0x31f,0x325,0x32c,0x330,0x337,0x33f,0x345, +0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x34d,0x34e,0x356,0x35e,0x366,0x34e,0x36e,0x376, +0x34d,0x34e,0x37e,0x382,0x34d,0x34e,0x38a,0x392,0x366,0x397,0x39f,0x248,0x3a4,0x248,0x3ac,0x3b0, +0x248,0x3b7,0x3bf,0x248,0x248,0x3c5,0x3cd,0x3d5,0x248,0x248,0x3dd,0x248,0x248,0x248,0x3e3,0x248, +0x248,0x3e9,0x3f1,0x248,0x248,0x3f5,0x3fd,0x248,0x401,0x408,0x248,0x410,0x418,0x41f,0x3a3,0x248, +0x248,0x427,0x401,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x42e,0x248,0x436,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x43e,0x248,0x248,0x248,0x446,0x446,0x372,0x372,0x248,0x44c,0x454,0x436, +0x45c,0x248,0x248,0x248,0x248,0x364,0x248,0x248,0x248,0x464,0x46c,0x248,0x248,0x248,0x46e,0x476, +0x47e,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x486,0x489,0x3a4,0x491,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x499,0x3b7, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x49c,0x4a4,0x4a8, +0x4b0,0x4b8,0x4bf,0x4c7,0x4cf,0x4d7,0x4dd,0x4e1,0x4e9,0x4f1,0x4f9,0x248,0x501,0x476,0x476,0x476, +0x509,0x511,0x519,0x521,0x526,0x52e,0x536,0x53c,0x544,0x54c,0x248,0x552,0x559,0x476,0x476,0x55f, +0x476,0x567,0x56f,0x476,0x577,0x248,0x248,0x473,0x476,0x476,0x476,0x476,0x476,0x476,0x476,0x476, +0x476,0x476,0x476,0x476,0x57f,0x587,0x248,0x248,0x58f,0x595,0x59a,0x5a2,0x581,0x5a8,0x5b0,0x5b8, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x476,0x476,0x476,0x476,0x5c0,0x5c7,0x5cf,0x5d7, +0x5df,0x5e7,0x5ef,0x5f6,0x5fe,0x606,0x60d,0x615,0x61d,0x625,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x62c,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x634,0x248,0x248,0x248,0x63c,0x476,0x476,0x479,0x476,0x476,0x476,0x476,0x476,0x476,0x643,0x649, +0x651,0x659,0x248,0x248,0x661,0x668,0x248,0x287,0x248,0x248,0x248,0x248,0x248,0x248,0x47a,0x248, +0x669,0x248,0x501,0x671,0x248,0x679,0x681,0x248,0x248,0x248,0x248,0x685,0x248,0x248,0x46e,0x286, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x476,0x476, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x501,0x476,0x567,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x61d,0x46d,0x248,0x248,0x248,0x248,0x248,0x248, +0x68d,0x694,0x248,0x697,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifndef U_DARWIN +0x787,0x78a,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792, +0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x248,0x792,0x79a,0x792,0x248,0x792,0x248,0x792, +#else /* U_DARWIN */ +0x7a9,0x7ac,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4, +0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x248,0x7b4,0x7bc,0x7b4,0x248,0x7b4,0x248,0x7b4, +#endif /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifdef U_DARWIN +0x475,0x476,0x476,0x69f,0x6a7,0x6af,0x6b7,0x476,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x6bf,0x6c7,0x6cb,0x330,0x330,0x330,0x330,0x330, +0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x6cf,0x330,0x330,0x330,0x330,0x6d7,0x6db, +0x6e3,0x6eb,0x6ef,0x6f7,0x330,0x330,0x330,0x6fb,0x703,0x260,0x70b,0x713,0x248,0x248,0x248,0x71b, +#endif /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifndef U_DARWIN +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x69d,0x6a5,0x6a9,0x330,0x330,0x330,0x330,0x330, +0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x6ad,0x330,0x330,0x330,0x330,0x6b5,0x6b9, +0x6c1,0x6c9,0x6cd,0x6d5,0x330,0x330,0x330,0x6d9,0x6e1,0x260,0x6e9,0x6f1,0x248,0x248,0x248,0x6f9, +#endif /* not U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifdef U_DARWIN +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x723,0x248,0x476,0x476,0x56f,0x248,0x248,0x248, +#endif /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifndef U_DARWIN +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x701,0x248,0x476,0x476,0x56f,0x248,0x248,0x248, +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x709,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2, +0x711,0x715,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2, +#else /* U_DARWIN */ +0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x72b,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2, +0x733,0x737,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2, +#endif /* U_DARWIN */ +0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2, +0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2,0x2d2, +#ifndef U_DARWIN +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x71d,0x725,0x72b,0x248,0x248, +0x476,0x476,0x733,0x248,0x248,0x248,0x248,0x248,0x476,0x476,0x73b,0x248,0x248,0x248,0x248,0x248, +#else /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x73f,0x747,0x74d,0x248,0x248, +0x476,0x476,0x755,0x248,0x248,0x248,0x248,0x248,0x476,0x476,0x75d,0x248,0x248,0x248,0x248,0x248, +#endif /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifndef U_DARWIN +0x248,0x248,0x248,0x248,0x248,0x248,0x741,0x248,0x748,0x248,0x744,0x248,0x74b,0x248,0x753,0x757, +#else /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x763,0x248,0x76a,0x248,0x766,0x248,0x76d,0x248,0x775,0x779, +#endif /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248, +#ifndef U_DARWIN +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x75f, +0x767,0x76f,0x76f,0x76f,0x777,0x777,0x777,0x777,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x77f, +0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777, +0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777, +0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777,0x777, +#else /* U_DARWIN */ +0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x248,0x781, +0x789,0x791,0x791,0x791,0x799,0x799,0x799,0x799,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x7a1, +0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799, +0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799, +0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799,0x799, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8, +9,0xa,0xa,4,4,4,0xa,0xa,0x300a,0xf00a,0xa,3,6,3,6,6, +2,2,2,2,2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0x12, +0x12,0x12,0x12,0x12,0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +6,0xa,4,4,4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa, +4,4,2,2,0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xa,0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0, +0,0,0,0,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xa,0,0,0,0,0,1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1, +1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d, +0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,5,5,5,5,5,5,5,5, +5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d, +0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d,2,2,2,2, +2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0x8d,0xb1,0x4d,0x4d, +0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, +0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1, +1,1,1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa,0xa,0xa,0x21,1, +1,1,1,1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1, +0xb1,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0,0,0xa0,0,0,0,0,0,0,0xa0,0,0,0,0,0, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0,0,4,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x300a,0xf00a,0x300a,0xf00a,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0, +0,0,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0,0,0,0,0,9,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x300a,0xf00a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa0,0xa0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,0,0xb1,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,9,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0x11,0x11,0x11,0,0,0,0, +0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0, +0xa,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa, +0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0, +9,9,9,9,9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6, +4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +6,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2, +0x12,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0, +2,2,2,2,2,2,3,3,0xa,0x300a,0xf00a,0,2,2,2,2, +2,2,2,2,2,2,3,3,0xa,0x300a,0xf00a,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, +0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa, +0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a, +0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a, +0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, +0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a, +0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa, +0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0xa,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0xa,0,0xa,0xa,0xa,0xa,0,0,0,0xa,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0,0,0,0,0, +0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0xa, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x700a,0x300a,0xf00a, +0xb00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a, +0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa, +0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, +0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa, +0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa, +0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa, +0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x100a,0xa,0x900a,0xa,0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa, +0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a, +0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0x300a,0xf00a,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,9,0xa,0xa,0xa,0xa,0,0,0,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0xa,0x300a,0xf00a,0x100a,0xa,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0xa,0xa,0,0,0,0, +0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0, +0,0,0,0,0,0,0x11,0,0,0,0xb1,0,0,0,0,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1,0xb1,1,1,1,1,1,1,1,1,1,1,3,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +#else /* U_DARWIN */ +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x11,0x11,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,0xd,1, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,1,1,1,1,1,0x11,4,2,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0,0, +0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1,0xb1,1,1,1,1,1, +1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd, +#endif /* U_DARWIN */ +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +#ifndef U_DARWIN +0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa, +0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +#else /* U_DARWIN */ +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0, +0xa,6,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,4,0xa,0xa,3,3, +0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd, +#endif /* U_DARWIN */ +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +#ifndef U_DARWIN +0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x300a,0xf00a,0xa,3, +6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa, +0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x500a, +0xa,0xd00a,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa, +0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4, +4,4,0xa,0xa,0x300a,0xf00a,0xa,3,6,3,6,6,2,2,2,2, +2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x500a,0xa,0xd00a,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a, +0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,4,0xa,0xa, +0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +#else /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, +#endif /* U_DARWIN */ +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +#ifndef U_DARWIN +1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1, +0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1, +1,1,1,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1, +0xb1,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000, +#else /* U_DARWIN */ +1,1,1,1,1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1, +1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2, +0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000, +0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2, +#else /* U_DARWIN */ +0,0,0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x1000,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0, +0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +#endif /* U_DARWIN */ +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +#ifndef U_DARWIN +2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, +#else /* U_DARWIN */ +2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0xb2,0x12,0x12, +#else /* U_DARWIN */ +0,0,0x12,0x12,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +#endif /* U_DARWIN */ +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +#ifndef U_DARWIN +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2, +#else /* U_DARWIN */ +0x12,0x12,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, +#endif /* U_DARWIN */ +0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, +#ifndef U_DARWIN +0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x12,0x12,0x12, +#else /* U_DARWIN */ +0xb2,0xb2,0xb2,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +#endif /* U_DARWIN */ +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +#ifndef U_DARWIN +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x820,0,0x840,0x860, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x880,0x8a0,0,0, +0,0,0,0,0,0,0,0x8c0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x8c0,0x8e0,0x900,0x900,0x900,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0 +#else /* U_DARWIN */ +0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x820,0,0x840,0x860,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,0,0,0,0x8c0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x8c0, +0x8e0,0x900,0x900,0x900,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +#endif /* U_DARWIN */ +}; + +static const uint32_t ubidi_props_mirrors[26]={ +0x2000ab,0xbb,0x2a02215,0x1202243,0x2802298,0x2c022a6,0x30022a8,0x2e022a9,0x32022ab,0x6022cd,0x1e022f2,0x20022f3,0x22022f4,0x24022f6,0x26022f7,0x14022fa, +0x16022fb,0x18022fc,0x1a022fd,0x1c022fe,0x8029b8,0x4029f5,0xa02ade,0xe02ae3,0xc02ae4,0x1002ae5 +}; + +static const uint8_t ubidi_props_jgArray[332]={ +3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6,6,0x1f, +0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0,0,0,0,0,0,9, +0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0x1d,0,3, +3,3,0,3,0x2c,0x2c,0x2d,4,4,4,4,4,4,4,4,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,6,6,6,6,6,6,6,6,6,0x1f, +0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x23,0x23,0x23,0x21,0x21,0x28,1,9, +9,9,9,9,9,0x1d,0x1d,0xb,0x26,0xb,0x13,0x13,0x13,0xb,0xb,0xb, +0xb,0xb,0xb,0x16,0x16,0x16,0x16,0x1a,0x1a,0x1a,0x1a,0x1a,0x15,0xd,0x2a,0x11, +0x11,0xe,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2f,0x2d,0x2c,0x2d,0x2d, +0x2e,0x2e,0,0x2a,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,0x1f,0,0, +0,0,0,0,0,0,0,0,0x23,0x21,1,0,0,0x15,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +5,0xc,0xc,7,7,0xf,0x27,0x32,0x12,0x2b,0x2b,0x30,0x31,0x14,0x17,0x19, +0x1b,0x24,0xa,8,0x1c,0x20,0x22,0x1e,7,0x25,0x29,5,0xc,7,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x35,0x34,0x33,4,4, +4,4,4,4,4,0xd,0xd,6,6,0x1f,0x23,1,1,1,9,9, +0xb,0xb,0xb,0x18,0x18,0x1a,0x1a,0x1a,0x16,0x1f,0x1f,0x23 +}; + +static const UBiDiProps ubidi_props_singleton={ + NULL, + ubidi_props_indexes, + ubidi_props_mirrors, + ubidi_props_jgArray, + { + ubidi_props_trieIndex, + NULL, + utrie_defaultGetFoldingOffset, + 2336, +#ifndef U_DARWIN + 5480, +#else /* U_DARWIN */ + 5616, +#endif /* U_DARWIN */ + 0, + TRUE + }, + { 1,0,5,2 } +}; diff --git a/icuSources/common/ubidiimp.h b/icuSources/common/ubidiimp.h index 310e2a72..ca68858d 100644 --- a/icuSources/common/ubidiimp.h +++ b/icuSources/common/ubidiimp.h @@ -1,7 +1,7 @@ -/* +/* ****************************************************************************** * -* Copyright (C) 1999-2001, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -22,6 +22,7 @@ #include "unicode/utypes.h" #include "unicode/uchar.h" +#include "ubidi_props.h" /* miscellaneous definitions ---------------------------------------------- */ @@ -32,7 +33,7 @@ typedef uint32_t Flags; is easier with the same names for the BiDi types in the code as there. See UCharDirection in uchar.h . */ -enum { +enum { L= U_LEFT_TO_RIGHT, R= U_RIGHT_TO_LEFT, EN= U_EUROPEAN_NUMBER, @@ -101,45 +102,127 @@ enum { /* the dirProp's L and R are defined to 0 and 1 values in UCharDirection */ #define GET_LR_FROM_LEVEL(level) ((DirProp)((level)&1)) -#define IS_DEFAULT_LEVEL(level) (((level)&0xfe)==0xfe) +#define IS_DEFAULT_LEVEL(level) ((level)>=0xfe) + +/* + * The following bit is ORed to the property of characters in paragraphs + * with contextual RTL direction when paraLevel is contextual. + */ +#define CONTEXT_RTL 0x80 +#define NO_CONTEXT_RTL(dir) ((dir)&~CONTEXT_RTL) +/* + * The following is a variant of DIRPROP_FLAG which ignores the CONTEXT_RTL bit. + */ +#define DIRPROP_FLAG_NC(dir) (1UL<<(NO_CONTEXT_RTL(dir))) + +#define GET_PARALEVEL(ubidi, index) \ + (UBiDiLevel)((ubidi)->defaultParaLevel ? (ubidi)->dirProps[index]>>7 \ + : (ubidi)->paraLevel) + +/* Paragraph type for multiple paragraph support ---------------------------- */ +typedef int32_t Para; + +#define CR 0x000D +#define LF 0x000A /* Run structure for reordering --------------------------------------------- */ +enum { + LRM_BEFORE=1, + LRM_AFTER=2, + RLM_BEFORE=4, + RLM_AFTER=8 +}; typedef struct Run { int32_t logicalStart, /* first character of the run; b31 indicates even/odd level */ - visualLimit; /* last visual position of the run +1 */ + visualLimit, /* last visual position of the run +1 */ + insertRemove; /* if >0, flags for inserting LRM/RLM before/after run, + if <0, count of bidi controls within run */ } Run; /* in a Run, logicalStart will get this bit set if the run level is odd */ #define INDEX_ODD_BIT (1UL<<31) -#define MAKE_INDEX_ODD_PAIR(index, level) (index|((int32_t)level<<31)) -#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((int32_t)level<<31)) +#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((int32_t)(level)<<31)) +#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((int32_t)(level)<<31)) #define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT) -#define GET_INDEX(x) (x&~INDEX_ODD_BIT) -#define GET_ODD_BIT(x) ((uint32_t)x>>31) -#define IS_ODD_RUN(x) ((x&INDEX_ODD_BIT)!=0) -#define IS_EVEN_RUN(x) ((x&INDEX_ODD_BIT)==0) +#define GET_INDEX(x) ((x)&~INDEX_ODD_BIT) +#define GET_ODD_BIT(x) ((uint32_t)(x)>>31) +#define IS_ODD_RUN(x) (((x)&INDEX_ODD_BIT)!=0) +#define IS_EVEN_RUN(x) (((x)&INDEX_ODD_BIT)==0) U_CFUNC UBool ubidi_getRuns(UBiDi *pBiDi); +/** BiDi control code points */ +enum { + ZWNJ_CHAR=0x200c, + ZWJ_CHAR, + LRM_CHAR, + RLM_CHAR, + LRE_CHAR=0x202a, + RLE_CHAR, + PDF_CHAR, + LRO_CHAR, + RLO_CHAR +}; + +#define IS_BIDI_CONTROL_CHAR(c) (((uint32_t)(c)&0xfffffffc)==ZWNJ_CHAR || (uint32_t)((c)-LRE_CHAR)<5) + +/* InsertPoints structure for noting where to put BiDi marks ---------------- */ + +typedef struct Point { + int32_t pos; /* position in text */ + int32_t flag; /* flag for LRM/RLM, before/after */ +} Point; + +typedef struct InsertPoints { + int32_t capacity; /* number of points allocated */ + int32_t size; /* number of points used */ + int32_t confirmed; /* number of points confirmed */ + UErrorCode errorCode; /* for eventual memory shortage */ + Point *points; /* pointer to array of points */ +} InsertPoints; + + /* UBiDi structure ----------------------------------------------------------- */ struct UBiDi { + /* pointer to parent paragraph object (pointer to self if this object is + * a paragraph object); set to NULL in a newly opened object; set to a + * real value after a successful execution of ubidi_setPara or ubidi_setLine + */ + const UBiDi * pParaBiDi; + + const UBiDiProps *bdp; + /* alias pointer to the current text */ const UChar *text; /* length of the current text */ + int32_t originalLength; + + /* if the UBIDI_OPTION_STREAMING option is set, this is the length + * of text actually processed by ubidi_setPara, which may be shorter than + * the original length. + * Otherwise, it is identical to the original length. + */ int32_t length; + /* if the UBIDI_OPTION_REMOVE_CONTROLS option is set, and/or + * marks are allowed to be inserted in one of the reordering mode, the + * length of the result string may be different from the processed length. + */ + int32_t resultLength; + /* memory sizes in bytes */ - int32_t dirPropsSize, levelsSize, runsSize; + int32_t dirPropsSize, levelsSize, parasSize, runsSize; /* allocated memory */ DirProp *dirPropsMemory; UBiDiLevel *levelsMemory; + Para *parasMemory; Run *runsMemory; /* indicators for whether memory may be allocated after ubidi_open() */ @@ -152,8 +235,29 @@ struct UBiDi { /* are we performing an approximation of the "inverse BiDi" algorithm? */ UBool isInverse; + /* are we using the basic algorithm or its variation? */ + UBiDiReorderingMode reorderingMode; + + /* UBIDI_REORDER_xxx values must be ordered so that all the regular + * logical to visual modes come first, and all inverse BiDi modes + * come last. + */ + #define UBIDI_REORDER_LAST_LOGICAL_TO_VISUAL UBIDI_REORDER_NUMBERS_SPECIAL + + /* bitmask for reordering options */ + uint32_t reorderingOptions; + + /* must block separators receive level 0? */ + UBool orderParagraphsLTR; + /* the paragraph level */ UBiDiLevel paraLevel; + /* original paraLevel when contextual */ + /* must be one of UBIDI_DEFAULT_xxx or 0 if not contextual */ + UBiDiLevel defaultParaLevel; + + /* the following is set in ubidi_setPara, used in processPropertySeq */ + const struct ImpTabPair * pImpTabPair; /* pointer to levels state table pair */ /* the overall paragraph or line directionality - see UBiDiDirection */ UBiDiDirection direction; @@ -161,18 +265,43 @@ struct UBiDi { /* flags is a bit set for which directional properties are in the text */ Flags flags; + /* lastArabicPos is index to the last AL in the text, -1 if none */ + int32_t lastArabicPos; + /* characters after trailingWSStart are WS and are */ /* implicitly at the paraLevel (rule (L1)) - levels may not reflect that */ int32_t trailingWSStart; + /* fields for paragraph handling */ + int32_t paraCount; /* set in getDirProps() */ + Para *paras; /* limits of paragraphs, filled in + ResolveExplicitLevels() or CheckExplicitLevels() */ + + /* for single paragraph text, we only need a tiny array of paras (no malloc()) */ + Para simpleParas[1]; + /* fields for line reordering */ int32_t runCount; /* ==-1: runs not set up yet */ Run *runs; /* for non-mixed text, we only need a tiny array of runs (no malloc()) */ Run simpleRuns[1]; + + /* for inverse Bidi with insertion of directional marks */ + InsertPoints insertPoints; + + /* for option UBIDI_OPTION_REMOVE_CONTROLS */ + int32_t controlCount; + + /* for Bidi class callback */ + UBiDiClassCallback *fnClassCallback; /* action pointer */ + const void *coClassCallback; /* context pointer */ }; +#define IS_VALID_PARA(x) ((x) && ((x)->pParaBiDi==(x))) +#define IS_VALID_LINE(x) ((x) && ((x)->pParaBiDi) && ((x)->pParaBiDi->pParaBiDi==(x)->pParaBiDi)) +#define IS_VALID_PARA_OR_LINE(x) ((x) && ((x)->pParaBiDi==(x) || (((x)->pParaBiDi) && (x)->pParaBiDi->pParaBiDi==(x)->pParaBiDi))) + /* helper function to (re)allocate memory if allowed */ U_CFUNC UBool ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeNeeded); @@ -199,6 +328,10 @@ ubidi_getMemory(void **pMemory, int32_t *pSize, UBool mayAllocate, int32_t sizeN ubidi_getMemory((void **)&(pBiDi)->levelsMemory, &(pBiDi)->levelsSize, \ TRUE, (length)) +#define getInitialParasMemory(pBiDi, length) \ + ubidi_getMemory((void **)&(pBiDi)->parasMemory, &(pBiDi)->parasSize, \ + TRUE, (length)*sizeof(Para)) + #define getInitialRunsMemory(pBiDi, length) \ ubidi_getMemory((void **)&(pBiDi)->runsMemory, &(pBiDi)->runsSize, \ TRUE, (length)*sizeof(Run)) diff --git a/icuSources/common/ubidiln.c b/icuSources/common/ubidiln.c index 6731cf2a..31866b47 100644 --- a/icuSources/common/ubidiln.c +++ b/icuSources/common/ubidiln.c @@ -1,7 +1,7 @@ -/* +/* ****************************************************************************** * -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -33,8 +33,8 @@ * text in a single paragraph or in a line of a single paragraph * which has already been processed according to * the Unicode 3.0 BiDi algorithm as defined in - * http://www.unicode.org/unicode/reports/tr9/ , version 5, - * also described in The Unicode Standard, Version 3.0 . + * http://www.unicode.org/unicode/reports/tr9/ , version 13, + * also described in The Unicode Standard, Version 4.0.1 . * * This means that there is a UBiDi object with a levels * and a dirProps array. @@ -86,6 +86,9 @@ * * To make subsequent operations easier, we also include the run * before the WS if it is at the paraLevel - we merge the two here. + * + * This function is called only from ubidi_setLine(), so pBiDi->paraLevel is + * set correctly for the line even when contextual multiple paragraphs. */ static void setTrailingWSStart(UBiDi *pBiDi) { @@ -96,8 +99,18 @@ setTrailingWSStart(UBiDi *pBiDi) { int32_t start=pBiDi->length; UBiDiLevel paraLevel=pBiDi->paraLevel; + /* If the line is terminated by a block separator, all preceding WS etc... + are already set to paragraph level. + Setting trailingWSStart to pBidi->length will avoid changing the + level of B chars from 0 to paraLevel in ubidi_getLevels when + orderParagraphsLTR==TRUE. + */ + if(NO_CONTEXT_RTL(dirProps[start-1])==B) { + pBiDi->trailingWSStart=start; /* currently == pBiDi->length */ + return; + } /* go backwards across all WS, BN, explicit codes */ - while(start>0 && DIRPROP_FLAG(dirProps[start-1])&MASK_WS) { + while(start>0 && DIRPROP_FLAG_NC(dirProps[start-1])&MASK_WS) { --start; } @@ -121,21 +134,39 @@ ubidi_setLine(const UBiDi *pParaBiDi, /* check the argument values */ if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return; - } else if(pParaBiDi==NULL || pLineBiDi==NULL) { + } else if(!IS_VALID_PARA(pParaBiDi) || pLineBiDi==NULL) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return; } else if(start<0 || start>limit || limit>pParaBiDi->length) { *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; return; + } else if(ubidi_getParagraph(pParaBiDi, start, NULL, NULL, NULL, pErrorCode) != + ubidi_getParagraph(pParaBiDi, limit-1, NULL, NULL, NULL, pErrorCode)) { + /* the line crosses a paragraph boundary */ + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return; } /* set the values in pLineBiDi from its pParaBiDi parent */ + pLineBiDi->pParaBiDi=NULL; /* mark unfinished setLine */ pLineBiDi->text=pParaBiDi->text+start; length=pLineBiDi->length=limit-start; - pLineBiDi->paraLevel=pParaBiDi->paraLevel; - + pLineBiDi->resultLength=pLineBiDi->originalLength=length; + pLineBiDi->paraLevel=GET_PARALEVEL(pParaBiDi, start); + pLineBiDi->paraCount=pParaBiDi->paraCount; pLineBiDi->runs=NULL; pLineBiDi->flags=0; + pLineBiDi->reorderingMode=pParaBiDi->reorderingMode; + pLineBiDi->reorderingOptions=pParaBiDi->reorderingOptions; + pLineBiDi->controlCount=0; + if(pParaBiDi->controlCount>0) { + int32_t j; + for(j=start; jtext[j])) { + pLineBiDi->controlCount++; + } + } + } if(length>0) { pLineBiDi->dirProps=pParaBiDi->dirProps+start; @@ -222,16 +253,17 @@ ubidi_setLine(const UBiDi *pParaBiDi, pLineBiDi->dirProps=NULL; pLineBiDi->levels=NULL; } + pLineBiDi->pParaBiDi=pParaBiDi; /* mark successful setLine */ return; } U_CAPI UBiDiLevel U_EXPORT2 ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex) { /* return paraLevel if in the trailing WS run, otherwise the real level */ - if(pBiDi==NULL || charIndex<0 || pBiDi->length<=charIndex) { + if(!IS_VALID_PARA_OR_LINE(pBiDi) || charIndex<0 || pBiDi->length<=charIndex) { return 0; } else if(pBiDi->direction!=UBIDI_MIXED || charIndex>=pBiDi->trailingWSStart) { - return pBiDi->paraLevel; + return GET_PARALEVEL(pBiDi, charIndex); } else { return pBiDi->levels[charIndex]; } @@ -243,7 +275,7 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return NULL; - } else if(pBiDi==NULL || (length=pBiDi->length)<=0) { + } else if(!IS_VALID_PARA_OR_LINE(pBiDi) || (length=pBiDi->length)<=0) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return NULL; } @@ -267,6 +299,8 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode) { if(start>0 && levels!=pBiDi->levels) { uprv_memcpy(levels, pBiDi->levels, start); } + /* pBiDi->paraLevel is ok even if contextual multiple paragraphs, + since pBidi is a line object */ uprv_memset(levels+start, pBiDi->paraLevel, length-start); /* this new levels array is set for the line and reflects the WS run */ @@ -284,7 +318,8 @@ ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalStart, int32_t *pLogicalLimit, UBiDiLevel *pLevel) { int32_t length; - if(pBiDi==NULL || logicalStart<0 || (length=pBiDi->length)<=logicalStart) { + if(!IS_VALID_PARA_OR_LINE(pBiDi) || logicalStart<0 || + (length=pBiDi->length)<=logicalStart) { return; } @@ -293,7 +328,7 @@ ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalStart, *pLogicalLimit=length; } if(pLevel!=NULL) { - *pLevel=pBiDi->paraLevel; + *pLevel=GET_PARALEVEL(pBiDi, logicalStart); } } else { UBiDiLevel *levels=pBiDi->levels; @@ -318,7 +353,8 @@ U_CAPI int32_t U_EXPORT2 ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) { if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return -1; - } else if(pBiDi==NULL || (pBiDi->runCount<0 && !ubidi_getRuns(pBiDi))) { + } else if(!IS_VALID_PARA_OR_LINE(pBiDi) || + (pBiDi->runCount<0 && !ubidi_getRuns(pBiDi))) { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return -1; } else { @@ -329,7 +365,7 @@ ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode) { U_CAPI UBiDiDirection U_EXPORT2 ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, int32_t *pLogicalStart, int32_t *pLength) { - if( pBiDi==NULL || runIndex<0 || + if( !IS_VALID_PARA_OR_LINE(pBiDi) || runIndex<0 || (pBiDi->runCount==-1 && !ubidi_getRuns(pBiDi)) || runIndex>=pBiDi->runCount ) { @@ -361,6 +397,7 @@ getSingleRun(UBiDi *pBiDi, UBiDiLevel level) { /* fill and reorder the single run */ pBiDi->runs[0].logicalStart=MAKE_INDEX_ODD_PAIR(0, level); pBiDi->runs[0].visualLimit=pBiDi->length; + pBiDi->runs[0].insertRemove=0; } /* reorder the runs array (L2) ---------------------------------------------- */ @@ -398,10 +435,9 @@ getSingleRun(UBiDi *pBiDi, UBiDiLevel level) { */ static void reorderLine(UBiDi *pBiDi, UBiDiLevel minLevel, UBiDiLevel maxLevel) { - Run *runs; + Run *runs, tempRun; UBiDiLevel *levels; - int32_t firstRun, endRun, limitRun, runCount, - temp; + int32_t firstRun, endRun, limitRun, runCount; /* nothing to do? */ if(maxLevel<=(minLevel|1)) { @@ -444,14 +480,9 @@ reorderLine(UBiDi *pBiDi, UBiDiLevel minLevel, UBiDiLevel maxLevel) { /* Swap the entire sequence of runs from firstRun to limitRun-1. */ endRun=limitRun-1; while(firstRunruns; + int32_t runCount=pBiDi->runCount, visualStart=0, i, length, logicalStart; + + for(i=0; i=logicalStart) && (logicalIndex<(logicalStart+length))) { + return i; + } + visualStart+=length; + } + /* we should never get here */ + i=length+25; + i/=(i-length-25); /* force program crash */ + return 0; +} + /* * Compute the runs array from the levels array. * After ubidi_getRuns() returns TRUE, runCount is guaranteed to be >0 * and the runs are reordered. * Odd-level runs have visualStart on their visual right edge and * they progress visually to the left. + * If option UBIDI_OPTION_INSERT_MARKS is set, insertRemove will contain the + * sum of appropriate LRM/RLM_BEFORE/AFTER flags. + * If option UBIDI_OPTION_REMOVE_CONTROLS is set, insertRemove will contain the + * negative number of BiDi control characters within this run. */ U_CFUNC UBool ubidi_getRuns(UBiDi *pBiDi) { if(pBiDi->direction!=UBIDI_MIXED) { /* simple, single-run case - this covers length==0 */ + /* pBiDi->paraLevel is ok even for contextual multiple paragraphs */ getSingleRun(pBiDi, pBiDi->paraLevel); } else /* UBIDI_MIXED, length>0 */ { /* mixed directionality */ @@ -521,7 +570,7 @@ ubidi_getRuns(UBiDi *pBiDi) { limit=pBiDi->trailingWSStart; if(limit==0) { /* there is only WS on this line */ - getSingleRun(pBiDi, pBiDi->paraLevel); + getSingleRun(pBiDi, GET_PARALEVEL(pBiDi, 0)); } else { UBiDiLevel *levels=pBiDi->levels; int32_t i, runCount; @@ -550,7 +599,7 @@ ubidi_getRuns(UBiDi *pBiDi) { int32_t runIndex, start; UBiDiLevel minLevel=UBIDI_MAX_EXPLICIT_LEVEL+1, maxLevel=0; - /* now, count a (non-mergable) WS run */ + /* now, count a (non-mergeable) WS run */ if(limit444, 484->444, 575->555, 595->555 */ - /* however, that would take longer and make other functions more complicated */ + /* FOOD FOR THOUGHT: this could be optimized, e.g.: + * 464->444, 484->444, 575->555, 595->555 + * However, that would take longer. Check also how it would + * interact with BiDi control removal and inserting Marks. + */ runIndex=0; /* search for the run limits and initialize visualLimit values with the run lengths */ @@ -586,6 +638,7 @@ ubidi_getRuns(UBiDi *pBiDi) { /* i is another run limit */ runs[runIndex].logicalStart=start; runs[runIndex].visualLimit=i-start; + runs[runIndex].insertRemove=0; ++runIndex; } while(iparaLevel is ok even + if contextual multiple paragraphs. */ if(pBiDi->paraLevelparaLevel; } @@ -605,17 +660,17 @@ ubidi_getRuns(UBiDi *pBiDi) { reorderLine(pBiDi, minLevel, maxLevel); /* now add the direction flags and adjust the visualLimit's to be just that */ - ADD_ODD_BIT_FROM_LEVEL(runs[0].logicalStart, levels[runs[0].logicalStart]); - limit=runs[0].visualLimit; - /* this loop will also handle the trailing WS run */ - for(i=1; iparaLevel is ok even if + contextual multiple paragraphs. */ if(runIndexparaLevel & 1) != 0)? 0 : runIndex; @@ -624,6 +679,30 @@ ubidi_getRuns(UBiDi *pBiDi) { } } } + + /* handle insert LRM/RLM BEFORE/AFTER run */ + if(pBiDi->insertPoints.size>0) { + Point *point, *start=pBiDi->insertPoints.points, + *limit=start+pBiDi->insertPoints.size; + int32_t runIndex; + for(point=start; pointpos); + pBiDi->runs[runIndex].insertRemove|=point->flag; + } + } + + /* handle remove BiDi control characters */ + if(pBiDi->controlCount>0) { + int32_t runIndex; + const UChar *start=pBiDi->text, *limit=start+pBiDi->length, *pu; + for(pu=start; puruns[runIndex].insertRemove--; + } + } + } + return TRUE; } @@ -794,9 +873,10 @@ ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) U_CAPI int32_t U_EXPORT2 ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) { + int32_t visualIndex; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return 0; - } else if(pBiDi==NULL) { + } else if(!IS_VALID_PARA_OR_LINE(pBiDi)) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } else if(logicalIndex<0 || pBiDi->length<=logicalIndex) { @@ -806,9 +886,11 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) /* we can do the trivial cases without the runs array */ switch(pBiDi->direction) { case UBIDI_LTR: - return logicalIndex; + visualIndex=logicalIndex; + break; case UBIDI_RTL: - return pBiDi->length-logicalIndex-1; + visualIndex=pBiDi->length-logicalIndex-1; + break; default: if(pBiDi->runCount<0 && !ubidi_getRuns(pBiDi)) { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; @@ -824,92 +906,288 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) if(offset>=0 && offsetinsertPoints.size>0) { + /* add the number of added marks until the calculated visual index */ + Run *runs=pBiDi->runs; + int32_t i, length, insertRemove; + int32_t visualStart=0, markFound=0; + for(i=0; ; i++, visualStart+=length) { + length=runs[i].visualLimit-visualStart; + insertRemove=runs[i].insertRemove; + if(insertRemove & (LRM_BEFORE|RLM_BEFORE)) { + markFound++; + } + /* is it the run containing the visual index? */ + if(visualIndexcontrolCount>0) { + /* subtract the number of controls until the calculated visual index */ + Run *runs=pBiDi->runs; + int32_t i, j, start, limit, length, insertRemove; + int32_t visualStart=0, controlFound=0; + UChar uchar=pBiDi->text[logicalIndex]; + /* is the logical index pointing to a control ? */ + if(IS_BIDI_CONTROL_CHAR(uchar)) { + return UBIDI_MAP_NOWHERE; + } + /* loop on runs */ + for(i=0; ; i++, visualStart+=length) { + length=runs[i].visualLimit-visualStart; + insertRemove=runs[i].insertRemove; + /* calculated visual index is beyond this run? */ + if(visualIndex>=runs[i].visualLimit) { + controlFound-=insertRemove; + continue; + } + /* calculated visual index must be within current run */ + if(insertRemove==0) { + return visualIndex-controlFound; + } + if(IS_EVEN_RUN(runs[i].logicalStart)) { + /* LTR: check from run start to logical index */ + start=runs[i].logicalStart; + limit=logicalIndex; + } else { + /* RTL: check from logical index to run end */ + start=logicalIndex+1; + limit=runs[i].logicalStart+length; + } + for(j=start; jtext[j]; + if(IS_BIDI_CONTROL_CHAR(uchar)) { + controlFound++; + } + } + return visualIndex-controlFound; + } + } + + return visualIndex; } U_CAPI int32_t U_EXPORT2 ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode) { + Run *runs; + int32_t i, runCount, start; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return 0; - } else if(pBiDi==NULL) { + } else if(!IS_VALID_PARA_OR_LINE(pBiDi)) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; - } else if(visualIndex<0 || pBiDi->length<=visualIndex) { + } else if(visualIndex<0 || pBiDi->resultLength<=visualIndex) { *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; - } else { - /* we can do the trivial cases without the runs array */ - switch(pBiDi->direction) { - case UBIDI_LTR: + } + /* we can do the trivial cases without the runs array */ + if(pBiDi->insertPoints.size==0 && pBiDi->controlCount==0) { + if(pBiDi->direction==UBIDI_LTR) { return visualIndex; - case UBIDI_RTL: + } + else if(pBiDi->direction==UBIDI_RTL) { return pBiDi->length-visualIndex-1; - default: - if(pBiDi->runCount<0 && !ubidi_getRuns(pBiDi)) { - *pErrorCode=U_MEMORY_ALLOCATION_ERROR; - return 0; - } else { - Run *runs=pBiDi->runs; - int32_t i, runCount=pBiDi->runCount, start; - - if(runCount<=10) { - /* linear search for the run */ - for(i=0; visualIndex>=runs[i].visualLimit; ++i) {} - } else { - /* binary search for the run */ - int32_t begin=0, limit=runCount; + } + if(pBiDi->runCount<0 && !ubidi_getRuns(pBiDi)) { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + return 0; + } + } - /* the middle if() will guaranteed find the run, we don't need a loop limit */ - for(;;) { - i=(begin+limit)/2; - if(visualIndex>=runs[i].visualLimit) { - begin=i+1; - } else if(i==0 || visualIndex>=runs[i-1].visualLimit) { - break; - } else { - limit=i; - } - } + runs=pBiDi->runs; + runCount=pBiDi->runCount; + if(pBiDi->insertPoints.size>0) { + /* handle inserted LRM/RLM */ + int32_t markFound=0, insertRemove; + int32_t visualStart=0, length; + runs=pBiDi->runs; + /* subtract number of marks until visual index */ + for(i=0; ; i++, visualStart+=length) { + length=runs[i].visualLimit-visualStart; + insertRemove=runs[i].insertRemove; + if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) { + if(visualIndex<=(visualStart+markFound)) { + return UBIDI_MAP_NOWHERE; } - - start=runs[i].logicalStart; - if(IS_EVEN_RUN(start)) { - /* LTR */ - /* the offset in runs[i] is visualIndex-runs[i-1].visualLimit */ - if(i>0) { - visualIndex-=runs[i-1].visualLimit; - } - return GET_INDEX(start)+visualIndex; - } else { - /* RTL */ - return GET_INDEX(start)+runs[i].visualLimit-visualIndex-1; + markFound++; + } + /* is adjusted visual index within this run? */ + if(visualIndex<(runs[i].visualLimit+markFound)) { + visualIndex-=markFound; + break; + } + if(insertRemove&(LRM_AFTER|RLM_AFTER)) { + if(visualIndex==(visualStart+length+markFound)) { + return UBIDI_MAP_NOWHERE; + } + markFound++; + } + } + } + else if(pBiDi->controlCount>0) { + /* handle removed BiDi control characters */ + int32_t controlFound=0, insertRemove, length; + int32_t logicalStart, logicalEnd, visualStart=0, j, k; + UChar uchar; + UBool evenRun; + /* add number of controls until visual index */ + for(i=0; ; i++, visualStart+=length) { + length=runs[i].visualLimit-visualStart; + insertRemove=runs[i].insertRemove; + /* is adjusted visual index beyond current run? */ + if(visualIndex>=(runs[i].visualLimit-controlFound+insertRemove)) { + controlFound-=insertRemove; + continue; + } + /* adjusted visual index is within current run */ + if(insertRemove==0) { + visualIndex+=controlFound; + break; + } + /* count non-control chars until visualIndex */ + logicalStart=runs[i].logicalStart; + evenRun=IS_EVEN_RUN(logicalStart); + REMOVE_ODD_BIT(logicalStart); + logicalEnd=logicalStart+length-1; + for(j=0; jtext[k]; + if(IS_BIDI_CONTROL_CHAR(uchar)) { + controlFound++; + } + if((visualIndex+controlFound)==(visualStart+j)) { + break; } } + visualIndex+=controlFound; + break; } } + /* handle all cases */ + if(runCount<=10) { + /* linear search for the run */ + for(i=0; visualIndex>=runs[i].visualLimit; ++i) {} + } else { + /* binary search for the run */ + int32_t begin=0, limit=runCount; + + /* the middle if() is guaranteed to find the run, we don't need a loop limit */ + for(;;) { + i=(begin+limit)/2; + if(visualIndex>=runs[i].visualLimit) { + begin=i+1; + } else if(i==0 || visualIndex>=runs[i-1].visualLimit) { + break; + } else { + limit=i; + } + } + } + + start=runs[i].logicalStart; + if(IS_EVEN_RUN(start)) { + /* LTR */ + /* the offset in runs[i] is visualIndex-runs[i-1].visualLimit */ + if(i>0) { + visualIndex-=runs[i-1].visualLimit; + } + return start+visualIndex; + } else { + /* RTL */ + return GET_INDEX(start)+runs[i].visualLimit-visualIndex-1; + } } U_CAPI void U_EXPORT2 ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) { - UBiDiLevel *levels; + const UBiDiLevel *levels; /* ubidi_getLevels() checks all of its and our arguments */ - if((levels=(UBiDiLevel *)ubidi_getLevels(pBiDi, pErrorCode))==NULL) { + if((levels=ubidi_getLevels(pBiDi, pErrorCode))==NULL) { /* no op */ } else if(indexMap==NULL) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; } else { ubidi_reorderLogical(levels, pBiDi->length, indexMap); + + if(pBiDi->insertPoints.size>0) { + int32_t markFound=0, runCount=pBiDi->runCount; + int32_t visualStart=0, length, insertRemove, i, j; + Run *runs=pBiDi->runs; + /* add number of marks found until each index */ + for(i=0; i0) { + int32_t logicalStart=GET_INDEX(runs[i].logicalStart); + int32_t limit=logicalStart+length; + for(j=logicalStart; jcontrolCount>0) { + int32_t controlFound=0, runCount=pBiDi->runCount; + int32_t visualStart=0, length, insertRemove, i, j, k; + int32_t logicalStart, logicalEnd; + UBool evenRun; + UChar uchar; + Run *runs=pBiDi->runs; + /* subtract number of controls found until each index */ + for(i=0; itext[k]; + if(IS_BIDI_CONTROL_CHAR(uchar)) { + controlFound++; + indexMap[k]=UBIDI_MAP_NOWHERE; + continue; + } + indexMap[k]-=controlFound; + } + } + } } } @@ -923,7 +1201,7 @@ ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode) { } else { /* fill a visual-to-logical index map using the runs[] */ Run *runs=pBiDi->runs, *runsLimit=runs+pBiDi->runCount; - int32_t logicalStart, visualStart, visualLimit; + int32_t logicalStart, visualStart, visualLimit, *pi=indexMap; visualStart=0; for(; runsvisualLimit; if(IS_EVEN_RUN(logicalStart)) { do { /* LTR */ - *indexMap++ = logicalStart++; + *pi++ = logicalStart++; } while(++visualStartinsertPoints.size>0) { + int32_t markFound=0, runCount=pBiDi->runCount; + int32_t insertRemove, i, j, k; + runs=pBiDi->runs; + /* count all inserted marks */ + for(i=0; iresultLength; + for(i=runCount-1; i>=0 && markFound>0; i--) { + insertRemove=runs[i].insertRemove; + if(insertRemove&(LRM_AFTER|RLM_AFTER)) { + indexMap[--k]= UBIDI_MAP_NOWHERE; + markFound--; + } + visualStart= i>0 ? runs[i-1].visualLimit : 0; + for(j=runs[i].visualLimit-1; j>=visualStart && markFound>0; j--) { + indexMap[--k]=indexMap[j]; + } + if(insertRemove&(LRM_BEFORE|RLM_BEFORE)) { + indexMap[--k]= UBIDI_MAP_NOWHERE; + markFound--; + } + } + } + else if(pBiDi->controlCount>0) { + int32_t runCount=pBiDi->runCount, logicalEnd; + int32_t insertRemove, length, i, j, k, m; + UChar uchar; + UBool evenRun; + runs=pBiDi->runs; + visualStart=0; + /* move forward indexes by number of preceding controls */ + k=0; + for(i=0; itext[m]; + if(!IS_BIDI_CONTROL_CHAR(uchar)) { + indexMap[k++]=m; + } + } + } + } } } U_CAPI void U_EXPORT2 ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length) { - if(srcMap!=NULL && destMap!=NULL) { - srcMap+=length; + if(srcMap!=NULL && destMap!=NULL && length>0) { + const int32_t *pi; + int32_t destLength=-1, count=0; + /* find highest value and count positive indexes in srcMap */ + pi=srcMap+length; + while(pi>srcMap) { + if(*--pi>destLength) { + destLength=*pi; + } + if(*pi>=0) { + count++; + } + } + destLength++; /* add 1 for origin 0 */ + if(count0) { - destMap[*--srcMap]=--length; + if(*--pi>=0) { + destMap[*pi]=--length; + } else { + --length; + } } } } diff --git a/icuSources/common/ubidiwrt.c b/icuSources/common/ubidiwrt.c index 2d16465d..acbc4bb4 100644 --- a/icuSources/common/ubidiwrt.c +++ b/icuSources/common/ubidiwrt.c @@ -1,7 +1,7 @@ -/* +/* ****************************************************************************** * -* Copyright (C) 2000-2001, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -46,18 +46,6 @@ # error reimplement ubidi_writeReordered() for UTF-8, see comment above #endif -/** BiDi control code points */ -enum { - LRM_CHAR=0x200e, - RLM_CHAR, - LRE_CHAR=0x202a, - RLE_CHAR, - PDF_CHAR, - LRO_CHAR, - RLO_CHAR -}; - -#define IS_BIDI_CONTROL_CHAR(c) (((uint32_t)(c)&0xfffffffe)==LRM_CHAR || (uint32_t)((c)-LRE_CHAR)<5) #define IS_COMBINING(type) ((1UL<<(type))&(1UL<text)==NULL || (length=pBiDi->length)<0 || destSize<0 || (destSize>0 && dest==NULL)) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; @@ -388,7 +376,7 @@ ubidi_writeReordered(UBiDi *pBiDi, /* do input and output overlap? */ if( dest!=NULL && ((text>=dest && text=text && dest=text && destoriginalLength))) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; @@ -408,14 +396,32 @@ ubidi_writeReordered(UBiDi *pBiDi, saveDest=dest; destCapacity=destSize; + /* + * Option "insert marks" implies UBIDI_INSERT_LRM_FOR_NUMERIC if the + * reordering mode (checked below) is appropriate. + */ + if(pBiDi->reorderingOptions & UBIDI_OPTION_INSERT_MARKS) { + options|=UBIDI_INSERT_LRM_FOR_NUMERIC; + options&=~UBIDI_REMOVE_BIDI_CONTROLS; + } + /* + * Option "remove controls" implies UBIDI_REMOVE_BIDI_CONTROLS + * and cancels UBIDI_INSERT_LRM_FOR_NUMERIC. + */ + if(pBiDi->reorderingOptions & UBIDI_OPTION_REMOVE_CONTROLS) { + options|=UBIDI_REMOVE_BIDI_CONTROLS; + options&=~UBIDI_INSERT_LRM_FOR_NUMERIC; + } /* * If we do not perform the "inverse BiDi" algorithm, then we * don't need to insert any LRMs, and don't need to test for it. */ - if(!ubidi_isInverse(pBiDi)) { + if((pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_NUMBERS_AS_L) && + (pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_LIKE_DIRECT) && + (pBiDi->reorderingMode != UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL) && + (pBiDi->reorderingMode != UBIDI_REORDER_RUNS_ONLY)) { options&=~UBIDI_INSERT_LRM_FOR_NUMERIC; } - /* * Iterate through all visual runs and copy the run text segments to * the destination, according to the options. @@ -447,17 +453,36 @@ ubidi_writeReordered(UBiDi *pBiDi, } } else { /* insert BiDi controls for "inverse BiDi" */ + const DirProp *dirProps=pBiDi->dirProps; const UChar *src; + UChar uc; UBiDiDirection dir; + int32_t markFlag; for(run=0; runruns[run].insertRemove; + if(markFlag<0) { /* insert count */ + markFlag=0; + } if(UBIDI_LTR==dir) { - if(/*run>0 &&*/ u_charDirection(*src)!=U_LEFT_TO_RIGHT) { + if((pBiDi->isInverse) && + (/*run>0 &&*/ dirProps[logicalStart]!=L)) { + markFlag |= LRM_BEFORE; + } + if (markFlag & LRM_BEFORE) { + uc=LRM_CHAR; + } + else if (markFlag & RLM_BEFORE) { + uc=RLM_CHAR; + } + else uc=0; + if(uc) { if(destSize>0) { - *dest++=LRM_CHAR; + *dest++=uc; } --destSize; } @@ -468,16 +493,38 @@ ubidi_writeReordered(UBiDi *pBiDi, dest+=runLength; destSize-=runLength; - if(/*runisInverse) && + (/*run0) { - *dest++=LRM_CHAR; + *dest++=uc; } --destSize; } - } else { - if(/*run>0 &&*/ !(MASK_R_AL&1UL<isInverse) && + (/*run>0 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart+runLength-1])))) { + markFlag |= RLM_BEFORE; + } + if (markFlag & LRM_BEFORE) { + uc=LRM_CHAR; + } + else if (markFlag & RLM_BEFORE) { + uc=RLM_CHAR; + } + else uc=0; + if(uc) { if(destSize>0) { - *dest++=RLM_CHAR; + *dest++=uc; } --destSize; } @@ -488,9 +535,20 @@ ubidi_writeReordered(UBiDi *pBiDi, dest+=runLength; destSize-=runLength; - if(/*runisInverse) && + (/*run0) { - *dest++=RLM_CHAR; + *dest++=uc; } --destSize; } @@ -516,6 +574,7 @@ ubidi_writeReordered(UBiDi *pBiDi, } } else { /* insert BiDi controls for "inverse BiDi" */ + const DirProp *dirProps=pBiDi->dirProps; const UChar *src; UBiDiDirection dir; @@ -525,7 +584,7 @@ ubidi_writeReordered(UBiDi *pBiDi, src=text+logicalStart; if(UBIDI_LTR==dir) { - if(/*run0) { *dest++=LRM_CHAR; } @@ -538,14 +597,14 @@ ubidi_writeReordered(UBiDi *pBiDi, dest+=runLength; destSize-=runLength; - if(/*run>0 &&*/ u_charDirection(*src)!=U_LEFT_TO_RIGHT) { + if(/*run>0 &&*/ dirProps[logicalStart]!=L) { if(destSize>0) { *dest++=LRM_CHAR; } --destSize; } } else { - if(/*run0) { *dest++=RLM_CHAR; } @@ -558,7 +617,7 @@ ubidi_writeReordered(UBiDi *pBiDi, dest+=runLength; destSize-=runLength; - if(/*run>0 &&*/ !(MASK_R_AL&1UL<0 &&*/ !(MASK_R_AL&DIRPROP_FLAG(dirProps[logicalStart+runLength-1]))) { if(destSize>0) { *dest++=RLM_CHAR; } diff --git a/icuSources/common/ubrk.cpp b/icuSources/common/ubrk.cpp index 710fd980..3f941a54 100644 --- a/icuSources/common/ubrk.cpp +++ b/icuSources/common/ubrk.cpp @@ -1,6 +1,6 @@ /* ***************************************************************************************** -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ***************************************************************************************** */ @@ -17,6 +17,7 @@ #include "unicode/uchriter.h" #include "unicode/rbbi.h" #include "rbbirb.h" +#include "uassert.h" U_NAMESPACE_USE @@ -59,6 +60,9 @@ ubrk_open(UBreakIteratorType type, case UBRK_TITLE: result = BreakIterator::createTitleInstance(Locale(locale), *status); break; + + default: + *status = U_ILLEGAL_ARGUMENT_ERROR; } // check for allocation error @@ -70,16 +74,12 @@ ubrk_open(UBreakIteratorType type, return 0; } - UCharCharacterIterator *iter = 0; - iter = new UCharCharacterIterator(text, textLength); - if(iter == 0) { - *status = U_MEMORY_ALLOCATION_ERROR; - delete result; - return 0; - } - result->adoptText(iter); - return (UBreakIterator*)result; + UBreakIterator *uBI = (UBreakIterator *)result; + if (text != NULL) { + ubrk_setText(uBI, text, textLength, status); + } + return uBI; } @@ -109,17 +109,11 @@ ubrk_openRules( const UChar *rules, return 0; } + UBreakIterator *uBI = (UBreakIterator *)result; if (text != NULL) { - UCharCharacterIterator *iter = 0; - iter = new UCharCharacterIterator(text, textLength); - if(iter == 0) { - *status = U_MEMORY_ALLOCATION_ERROR; - delete result; - return 0; - } - result->adoptText(iter); + ubrk_setText(uBI, text, textLength, status); } - return (UBreakIterator *)result; + return uBI; } @@ -140,6 +134,12 @@ ubrk_safeClone( *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } + // Clear any incoming Safe Clone Allocated warning. + // Propagating this through to our return would really + // confuse our caller. + if (*status==U_SAFECLONE_ALLOCATED_WARNING) { + *status = U_ZERO_ERROR; + } return (UBreakIterator *)(((BreakIterator*)bi)-> createBufferClone(stackBuffer, *pBufferSize, *status)); } @@ -166,59 +166,62 @@ ubrk_setText(UBreakIterator* bi, int32_t textLength, UErrorCode* status) { + BreakIterator *brit = (BreakIterator *)bi; + UText ut = UTEXT_INITIALIZER; + utext_openUChars(&ut, text, textLength, status); + brit->setText(&ut, *status); + // A stack allocated UText wrapping a UCHar * string + // can be dumped without explicitly closing it. +} - if (U_FAILURE(*status)) return; - const CharacterIterator& biText = ((BreakIterator*)bi)->getText(); - int32_t textLen = (textLength == -1 ? u_strlen(text) : textLength); - if (biText.getDynamicClassID() == UCharCharacterIterator::getStaticClassID()) { - ((UCharCharacterIterator&)biText).setText(text, textLen); - } - else { - UCharCharacterIterator *iter = 0; - iter = new UCharCharacterIterator(text, textLen); - if(iter == 0) { - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } - ((BreakIterator*)bi)->adoptText(iter); - } +U_DRAFT void U_EXPORT2 +ubrk_setUText(UBreakIterator *bi, + UText *text, + UErrorCode *status) +{ + RuleBasedBreakIterator *brit = (RuleBasedBreakIterator *)bi; + brit->RuleBasedBreakIterator::setText(text, *status); } + + + + U_CAPI int32_t U_EXPORT2 ubrk_current(const UBreakIterator *bi) { - return ((BreakIterator*)bi)->current(); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::current(); } U_CAPI int32_t U_EXPORT2 ubrk_next(UBreakIterator *bi) { - return ((BreakIterator*)bi)->next(); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::next(); } U_CAPI int32_t U_EXPORT2 ubrk_previous(UBreakIterator *bi) { - return ((BreakIterator*)bi)->previous(); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::previous(); } U_CAPI int32_t U_EXPORT2 ubrk_first(UBreakIterator *bi) { - return ((BreakIterator*)bi)->first(); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::first(); } U_CAPI int32_t U_EXPORT2 ubrk_last(UBreakIterator *bi) { - return ((BreakIterator*)bi)->last(); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::last(); } U_CAPI int32_t U_EXPORT2 @@ -226,7 +229,7 @@ ubrk_preceding(UBreakIterator *bi, int32_t offset) { - return ((BreakIterator*)bi)->preceding(offset); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::preceding(offset); } U_CAPI int32_t U_EXPORT2 @@ -234,7 +237,7 @@ ubrk_following(UBreakIterator *bi, int32_t offset) { - return ((BreakIterator*)bi)->following(offset); + return ((RuleBasedBreakIterator*)bi)->RuleBasedBreakIterator::following(offset); } U_CAPI const char* U_EXPORT2 @@ -255,26 +258,26 @@ ubrk_countAvailable() U_CAPI UBool U_EXPORT2 ubrk_isBoundary(UBreakIterator *bi, int32_t offset) { - return ((BreakIterator *)bi)->isBoundary(offset); + return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::isBoundary(offset); } U_CAPI int32_t U_EXPORT2 ubrk_getRuleStatus(UBreakIterator *bi) { - return ((RuleBasedBreakIterator *)bi)->getRuleStatus(); + return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::getRuleStatus(); } U_CAPI int32_t U_EXPORT2 ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status) { - return ((RuleBasedBreakIterator *)bi)->getRuleStatusVec(fillInVec, capacity, *status); + return ((RuleBasedBreakIterator *)bi)->RuleBasedBreakIterator::getRuleStatusVec(fillInVec, capacity, *status); } U_CAPI const char* U_EXPORT2 -ubrk_getLocaleByType(const UBreakIterator *bi, - ULocDataLocaleType type, +ubrk_getLocaleByType(const UBreakIterator *bi, + ULocDataLocaleType type, UErrorCode* status) { if (bi == NULL) { diff --git a/icuSources/common/ubrkimpl.h b/icuSources/common/ubrkimpl.h new file mode 100644 index 00000000..e4909712 --- /dev/null +++ b/icuSources/common/ubrkimpl.h @@ -0,0 +1,13 @@ +/* +********************************************************************** +* Copyright (C) 2006, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +*/ + +#ifndef UBRKIMPL_H +#define UBRKIMPL_H + +#define U_ICUDATA_BRKITR U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "brkitr" + +#endif /*UBRKIMPL_H*/ diff --git a/icuSources/common/ucase.c b/icuSources/common/ucase.c index 76b26bb9..c21045a0 100644 --- a/icuSources/common/ucase.c +++ b/icuSources/common/ucase.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -33,6 +33,7 @@ struct UCaseProps { UDataMemory *mem; const int32_t *indexes; const uint16_t *exceptions; + const UChar *unfold; UTrie trie; uint8_t formatVersion[4]; @@ -40,6 +41,15 @@ struct UCaseProps { /* data loading etc. -------------------------------------------------------- */ +#define UCASE_HARDCODE_DATA 1 + +#if UCASE_HARDCODE_DATA + +/* ucase_props_data.c is machine-generated by gencase --csource */ +#include "ucase_props_data.c" + +#else + static UBool U_CALLCONV isAcceptable(void *context, const char *type, const char *name, @@ -68,38 +78,50 @@ static UCaseProps * ucase_openData(UCaseProps *cspProto, const uint8_t *bin, int32_t length, UErrorCode *pErrorCode) { UCaseProps *csp; - int32_t size, trieSize; + int32_t size; cspProto->indexes=(const int32_t *)bin; - if( cspProto->indexes[UCASE_IX_INDEX_TOP]<16 || - (length>=0 && lengthindexes[UCASE_IX_LENGTH]) + if( (length>=0 && length<16*4) || + cspProto->indexes[UCASE_IX_INDEX_TOP]<16 ) { + /* length or indexes[] too short for minimum indexes[] length of 16 */ *pErrorCode=U_INVALID_FORMAT_ERROR; return NULL; } - - /* get the trie address, after indexes[] */ size=cspProto->indexes[UCASE_IX_INDEX_TOP]*4; - bin+=size; - if(length>=0 && (length-=size)<16) { - *pErrorCode=U_INVALID_FORMAT_ERROR; - return NULL; + if(length>=0) { + if(length>=size && length>=cspProto->indexes[UCASE_IX_LENGTH]) { + length-=size; + } else { + /* length too short for indexes[] or for the whole data length */ + *pErrorCode=U_INVALID_FORMAT_ERROR; + return NULL; + } } + bin+=size; + /* from here on, assume that the sizes of the items fit into the total length */ - /* unserialize the trie */ - trieSize=cspProto->indexes[UCASE_IX_TRIE_SIZE]; - trieSize=utrie_unserialize(&cspProto->trie, bin, length>=0 ? length : trieSize, pErrorCode); + /* unserialize the trie, after indexes[] */ + size=cspProto->indexes[UCASE_IX_TRIE_SIZE]; + utrie_unserialize(&cspProto->trie, bin, size, pErrorCode); if(U_FAILURE(*pErrorCode)) { return NULL; } + bin+=size; /* get exceptions[] */ - bin+=trieSize; - if(length>=0 && (length-=trieSize)<2*cspProto->indexes[UCASE_IX_EXC_LENGTH]) { - *pErrorCode=U_INVALID_FORMAT_ERROR; - return NULL; - } + size=2*cspProto->indexes[UCASE_IX_EXC_LENGTH]; cspProto->exceptions=(const uint16_t *)bin; + bin+=size; + + /* get unfold[] */ + size=2*cspProto->indexes[UCASE_IX_UNFOLD_LENGTH]; + if(size!=0) { + cspProto->unfold=(const UChar *)bin; + bin+=size; + } else { + cspProto->unfold=NULL; + } /* allocate, copy, and return the new UCaseProps */ csp=(UCaseProps *)uprv_malloc(sizeof(UCaseProps)); @@ -169,30 +191,46 @@ ucase_openBinary(const uint8_t *bin, int32_t length, UErrorCode *pErrorCode) { return ucase_openData(&cspProto, bin, length, pErrorCode); } +#endif + U_CAPI void U_EXPORT2 ucase_close(UCaseProps *csp) { if(csp!=NULL) { +#if !UCASE_HARDCODE_DATA udata_close(csp->mem); +#endif uprv_free(csp); } } /* UCaseProps singleton ----------------------------------------------------- */ -static UCaseProps *gCsp=NULL; +static UCaseProps *gCsp=NULL, *gCspDummy=NULL; +#if !UCASE_HARDCODE_DATA static UErrorCode gErrorCode=U_ZERO_ERROR; static int8_t gHaveData=0; +#endif static UBool U_CALLCONV ucase_cleanup(void) { ucase_close(gCsp); gCsp=NULL; + ucase_close(gCspDummy); + gCspDummy=NULL; +#if !UCASE_HARDCODE_DATA gErrorCode=U_ZERO_ERROR; gHaveData=0; +#endif return TRUE; } -U_CAPI UCaseProps * U_EXPORT2 +U_CAPI const UCaseProps * U_EXPORT2 ucase_getSingleton(UErrorCode *pErrorCode) { +#if UCASE_HARDCODE_DATA + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + return &ucase_props_singleton; +#else int8_t haveData; if(U_FAILURE(*pErrorCode)) { @@ -230,107 +268,59 @@ ucase_getSingleton(UErrorCode *pErrorCode) { ucase_close(csp); return gCsp; } +#endif } -/* Unicode case mapping data swapping --------------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -ucase_swap(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const UDataInfo *pInfo; - int32_t headerSize; - - const uint8_t *inBytes; - uint8_t *outBytes; - - const int32_t *inIndexes; - int32_t indexes[16]; - - int32_t i, offset, count, size; - - /* udata_swapDataHeader checks the arguments */ - headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } +U_CAPI const UCaseProps * U_EXPORT2 +ucase_getDummy(UErrorCode *pErrorCode) { + UCaseProps *csp; - /* check data format and format version */ - pInfo=(const UDataInfo *)((const char *)inData+4); - if(!( - pInfo->dataFormat[0]==UCASE_FMT_0 && /* dataFormat="cAsE" */ - pInfo->dataFormat[1]==UCASE_FMT_1 && - pInfo->dataFormat[2]==UCASE_FMT_2 && - pInfo->dataFormat[3]==UCASE_FMT_3 && - pInfo->formatVersion[0]==1 && - pInfo->formatVersion[2]==UTRIE_SHIFT && - pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT - )) { - udata_printError(ds, "ucase_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as case mapping data\n", - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3], - pInfo->formatVersion[0]); - *pErrorCode=U_UNSUPPORTED_ERROR; - return 0; + if(U_FAILURE(*pErrorCode)) { + return NULL; } - inBytes=(const uint8_t *)inData+headerSize; - outBytes=(uint8_t *)outData+headerSize; + UMTX_CHECK(NULL, gCspDummy, csp); - inIndexes=(const int32_t *)inBytes; - - if(length>=0) { - length-=headerSize; - if(length<16*4) { - udata_printError(ds, "ucase_swap(): too few bytes (%d after header) for case mapping data\n", - length); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if(csp!=NULL) { + /* the dummy object was already created */ + return csp; + } else /* csp==NULL */ { + /* create the dummy object */ + int32_t *indexes; + + csp=(UCaseProps *)uprv_malloc(sizeof(UCaseProps)+UCASE_IX_TOP*4+UTRIE_DUMMY_SIZE); + if(csp==NULL) { + *pErrorCode=U_MEMORY_ALLOCATION_ERROR; + return NULL; } - } - - /* read the first 16 indexes (ICU 3.2/format version 1: UCASE_IX_TOP==16, might grow) */ - for(i=0; i<16; ++i) { - indexes[i]=udata_readInt32(ds, inIndexes[i]); - } - - /* get the total length of the data */ - size=indexes[UCASE_IX_LENGTH]; + uprv_memset(csp, 0, sizeof(UCaseProps)+UCASE_IX_TOP*4); - if(length>=0) { - if(lengthindexes=indexes=(int32_t *)(csp+1); + indexes[UCASE_IX_INDEX_TOP]=UCASE_IX_TOP; - /* copy the data for inaccessible bytes */ - if(inBytes!=outBytes) { - uprv_memcpy(outBytes, inBytes, size); + indexes[UCASE_IX_TRIE_SIZE]= + utrie_unserializeDummy(&csp->trie, indexes+UCASE_IX_TOP, UTRIE_DUMMY_SIZE, 0, 0, TRUE, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + uprv_free(csp); + return NULL; } - offset=0; - - /* swap the int32_t indexes[] */ - count=indexes[UCASE_IX_INDEX_TOP]*4; - ds->swapArray32(ds, inBytes, count, outBytes, pErrorCode); - offset+=count; - - /* swap the UTrie */ - count=indexes[UCASE_IX_TRIE_SIZE]; - utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; + csp->formatVersion[0]=1; + csp->formatVersion[2]=UTRIE_SHIFT; + csp->formatVersion[3]=UTRIE_INDEX_SHIFT; - /* swap the uint16_t exceptions[] */ - count=indexes[UCASE_IX_EXC_LENGTH]*2; - ds->swapArray16(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; + /* set the static variables */ + umtx_lock(NULL); + if(gCspDummy==NULL) { + gCspDummy=csp; + csp=NULL; + ucln_common_registerCleanup(UCLN_COMMON_UCASE, ucase_cleanup); + } + umtx_unlock(NULL); - U_ASSERT(offset==size); + uprv_free(csp); + return gCspDummy; } - - return headerSize+size; } /* set of property starts for UnicodeSet ------------------------------------ */ @@ -338,13 +328,13 @@ ucase_swap(const UDataSwapper *ds, static UBool U_CALLCONV _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint32_t value) { /* add the start code point to the USet */ - USetAdder *sa=(USetAdder *)context; + const USetAdder *sa=(const USetAdder *)context; sa->add(sa->set, start); return TRUE; } U_CAPI void U_EXPORT2 -ucase_addPropertyStarts(const UCaseProps *csp, USetAdder *sa, UErrorCode *pErrorCode) { +ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode) { if(U_FAILURE(*pErrorCode)) { return; } @@ -368,8 +358,6 @@ ucase_addPropertyStarts(const UCaseProps *csp, USetAdder *sa, UErrorCode *pError #define GET_PROPS(csp, c, result) \ UTRIE_GET16(&(csp)->trie, c, result); -#define GET_CASE_TYPE(props) ((props)&UCASE_TYPE_MASK) -#define GET_SIGNED_DELTA(props) ((int16_t)(props)>>UCASE_DELTA_SHIFT) #define GET_EXCEPTIONS(csp, props) ((csp)->exceptions+((props)>>UCASE_EXC_SHIFT)) #define PROPS_HAS_EXCEPTION(props) ((props)&UCASE_EXCEPTION) @@ -423,8 +411,8 @@ ucase_tolower(const UCaseProps *csp, UChar32 c) { uint16_t props; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)>=UCASE_UPPER) { - c+=GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props); @@ -441,8 +429,8 @@ ucase_toupper(const UCaseProps *csp, UChar32 c) { uint16_t props; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)==UCASE_LOWER) { - c+=GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)==UCASE_LOWER) { + c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props); @@ -459,8 +447,8 @@ ucase_totitle(const UCaseProps *csp, UChar32 c) { uint16_t props; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)==UCASE_LOWER) { - c+=GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)==UCASE_LOWER) { + c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props); @@ -478,12 +466,212 @@ ucase_totitle(const UCaseProps *csp, UChar32 c) { return c; } +U_CAPI void U_EXPORT2 +ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa) { + uint16_t props; + + /* + * Hardcode the case closure of i and its relatives and ignore the + * data file data for these characters. + * The Turkic dotless i and dotted I with their case mapping conditions + * and case folding option make the related characters behave specially. + * This code matches their closure behavior to their case folding behavior. + */ + static const UChar + iDot[2]= { 0x69, 0x307 }; + + switch(c) { + case 0x49: + /* regular i and I are in one equivalence class */ + sa->add(sa->set, 0x69); + return; + case 0x69: + sa->add(sa->set, 0x49); + return; + case 0x130: + /* dotted I is in a class with <0069 0307> (for canonical equivalence with <0049 0307>) */ + sa->addString(sa->set, iDot, 2); + return; + case 0x131: + /* dotless i is in a class by itself */ + return; + default: + /* otherwise use the data file data */ + break; + } + + GET_PROPS(csp, c, props); + if(!PROPS_HAS_EXCEPTION(props)) { + if(UCASE_GET_TYPE(props)!=UCASE_NONE) { + /* add the one simple case mapping, no matter what type it is */ + int32_t delta=UCASE_GET_DELTA(props); + if(delta!=0) { + sa->add(sa->set, c+delta); + } + } + } else { + /* + * c has exceptions, so there may be multiple simple and/or + * full case mappings. Add them all. + */ + const uint16_t *pe0, *pe=GET_EXCEPTIONS(csp, props); + const UChar *closure; + uint16_t excWord=*pe++; + int32_t index, closureLength, fullLength, length; + + pe0=pe; + + /* add all simple case mappings */ + for(index=UCASE_EXC_LOWER; index<=UCASE_EXC_TITLE; ++index) { + if(HAS_SLOT(excWord, index)) { + pe=pe0; + GET_SLOT_VALUE(excWord, index, pe, c); + sa->add(sa->set, c); + } + } + + /* get the closure string pointer & length */ + if(HAS_SLOT(excWord, UCASE_EXC_CLOSURE)) { + pe=pe0; + GET_SLOT_VALUE(excWord, UCASE_EXC_CLOSURE, pe, closureLength); + closureLength&=UCASE_CLOSURE_MAX_LENGTH; /* higher bits are reserved */ + closure=(const UChar *)pe+1; /* behind this slot, unless there are full case mappings */ + } else { + closureLength=0; + closure=NULL; + } + + /* add the full case folding */ + if(HAS_SLOT(excWord, UCASE_EXC_FULL_MAPPINGS)) { + pe=pe0; + GET_SLOT_VALUE(excWord, UCASE_EXC_FULL_MAPPINGS, pe, fullLength); + + /* start of full case mapping strings */ + ++pe; + + fullLength&=0xffff; /* bits 16 and higher are reserved */ + + /* skip the lowercase result string */ + pe+=fullLength&UCASE_FULL_LOWER; + fullLength>>=4; + + /* add the full case folding string */ + length=fullLength&0xf; + if(length!=0) { + sa->addString(sa->set, (const UChar *)pe, length); + pe+=length; + } + + /* skip the uppercase and titlecase strings */ + fullLength>>=4; + pe+=fullLength&0xf; + fullLength>>=4; + pe+=fullLength; + + closure=(const UChar *)pe; /* behind full case mappings */ + } + + /* add each code point in the closure string */ + for(index=0; indexadd(sa->set, c); + } + } +} + +/* + * compare s, which has a length, with t, which has a maximum length or is NUL-terminated + * must be length>0 and max>0 and length<=max + */ +static U_INLINE int32_t +strcmpMax(const UChar *s, int32_t length, const UChar *t, int32_t max) { + int32_t c1, c2; + + max-=length; /* we require length<=max, so no need to decrement max in the loop */ + do { + c1=*s++; + c2=*t++; + if(c2==0) { + return 1; /* reached the end of t but not of s */ + } + c1-=c2; + if(c1!=0) { + return c1; /* return difference result */ + } + } while(--length>0); + /* ends with length==0 */ + + if(max==0 || *t==0) { + return 0; /* equal to length of both strings */ + } else { + return -max; /* return lengh difference */ + } +} + +U_CAPI UBool U_EXPORT2 +ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa) { + const UChar *unfold, *p; + int32_t i, start, limit, result, unfoldRows, unfoldRowWidth, unfoldStringWidth; + + if(csp->unfold==NULL || s==NULL) { + return FALSE; /* no reverse case folding data, or no string */ + } + if(length<=1) { + /* the string is too short to find any match */ + /* + * more precise would be: + * if(!u_strHasMoreChar32Than(s, length, 1)) + * but this does not make much practical difference because + * a single supplementary code point would just not be found + */ + return FALSE; + } + + unfold=csp->unfold; + unfoldRows=unfold[UCASE_UNFOLD_ROWS]; + unfoldRowWidth=unfold[UCASE_UNFOLD_ROW_WIDTH]; + unfoldStringWidth=unfold[UCASE_UNFOLD_STRING_WIDTH]; + unfold+=unfoldRowWidth; + + if(length>unfoldStringWidth) { + /* the string is too long to find any match */ + return FALSE; + } + + /* do a binary search for the string */ + start=0; + limit=unfoldRows; + while(startadd(sa->set, c); + ucase_addCaseClosure(csp, c, sa); + } + return TRUE; + } else if(result<0) { + limit=i; + } else /* result>0 */ { + start=i+1; + } + } + + return FALSE; /* string not found */ +} + /** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */ U_CAPI int32_t U_EXPORT2 ucase_getType(const UCaseProps *csp, UChar32 c) { uint16_t props; GET_PROPS(csp, c, props); - return GET_CASE_TYPE(props); + return UCASE_GET_TYPE(props); } /** @return same as ucase_getType(), or <0 if c is case-ignorable */ @@ -492,7 +680,7 @@ ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c) { int32_t type; uint16_t props; GET_PROPS(csp, c, props); - type=GET_CASE_TYPE(props); + type=UCASE_GET_TYPE(props); if(type!=UCASE_NONE) { return type; } else if( @@ -530,70 +718,6 @@ ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c) { return (UBool)((props&UCASE_SENSITIVE)!=0); } -/* public API (see uchar.h) ------------------------------------------------- */ - -U_CAPI UBool U_EXPORT2 -u_isULowercase(UChar32 c) { - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - return (UBool)(csp!=NULL && UCASE_LOWER==ucase_getType(csp, c)); -} - -U_CAPI UBool U_EXPORT2 -u_isUUppercase(UChar32 c) { - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - return (UBool)(csp!=NULL && UCASE_UPPER==ucase_getType(csp, c)); -} - -/* Transforms the Unicode character to its lower case equivalent.*/ -U_CAPI UChar32 U_EXPORT2 -u_tolower(UChar32 c) { - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - if(csp!=NULL) { - return ucase_tolower(csp, c); - } else { - return c; - } -} - -/* Transforms the Unicode character to its upper case equivalent.*/ -U_CAPI UChar32 U_EXPORT2 -u_toupper(UChar32 c) { - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - if(csp!=NULL) { - return ucase_toupper(csp, c); - } else { - return c; - } -} - -/* Transforms the Unicode character to its title case equivalent.*/ -U_CAPI UChar32 U_EXPORT2 -u_totitle(UChar32 c) { - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - if(csp!=NULL) { - return ucase_totitle(csp, c); - } else { - return c; - } -} - -/* return the simple case folding mapping for c */ -U_CAPI UChar32 U_EXPORT2 -u_foldCase(UChar32 c, uint32_t options) { - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - if(csp!=NULL) { - return ucase_fold(csp, c, options); - } else { - return c; - } -} - /* string casing ------------------------------------------------------------ */ /* @@ -693,13 +817,13 @@ enum { /* separator? */ #define is_sep(c) ((c)=='_' || (c)=='-' || (c)==0) -/* +/** * Requires non-NULL locale ID but otherwise does the equivalent of * checking for language codes as if uloc_getLanguage() were called: * Accepts both 2- and 3-letter codes and accepts case variants. */ -static int32_t -getCaseLocale(const char *locale, int32_t *locCache) { +U_CFUNC int32_t +ucase_getCaseLocale(const char *locale, int32_t *locCache) { int32_t result; char c; @@ -775,7 +899,7 @@ isFollowedByCasedLetter(const UCaseProps *csp, UCaseContextIterator *iter, void for(/* dir!=0 sets direction */; (c=iter(context, dir))>=0; dir=0) { GET_PROPS(csp, c, props); - if(GET_CASE_TYPE(props)!=UCASE_NONE) { + if(UCASE_GET_TYPE(props)!=UCASE_NONE) { return TRUE; /* followed by cased letter */ } else if(c==0x307 || (props&(UCASE_EXCEPTION|UCASE_CASE_IGNORABLE))==UCASE_CASE_IGNORABLE) { /* case-ignorable, continue with the loop */ @@ -934,8 +1058,8 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, result=c; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)>=UCASE_UPPER) { - result=c+GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + result=c+UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2; @@ -946,7 +1070,7 @@ ucase_toFullLower(const UCaseProps *csp, UChar32 c, if(excWord&UCASE_EXC_CONDITIONAL_SPECIAL) { /* use hardcoded conditions and mappings */ - int32_t loc=getCaseLocale(locale, locCache); + int32_t loc=ucase_getCaseLocale(locale, locCache); /* * Test for conditional mappings first @@ -1081,8 +1205,8 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, result=c; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)==UCASE_LOWER) { - result=c+GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)==UCASE_LOWER) { + result=c+UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2; @@ -1093,7 +1217,7 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, if(excWord&UCASE_EXC_CONDITIONAL_SPECIAL) { /* use hardcoded conditions and mappings */ - int32_t loc=getCaseLocale(locale, locCache); + int32_t loc=ucase_getCaseLocale(locale, locCache); if(loc==LOC_TURKISH && c==0x69) { /* @@ -1219,25 +1343,17 @@ ucase_toFullTitle(const UCaseProps *csp, UChar32 c, 0049; C; 0069; # LATIN CAPITAL LETTER I 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE - * U+0130 is otherwise lowercased to U+0069 (UnicodeData.txt). - * - * In case this code is used with CaseFolding.txt from an older version of Unicode - * where CaseFolding.txt contains mappings with a status of 'I' that - * have the opposite polarity ('I' mappings are included by default but excluded for Turkic), - * we must also hardcode the Unicode 3.2 mappings for the code points - * with 'I' mappings. - * Unicode 3.1.1 has 'I' mappings for U+0130 and U+0131. - * Unicode 3.2 has a 'T' mapping for U+0130, and lowercases U+0131 to itself (see UnicodeData.txt). + * U+0130 has no simple case folding (simple-case-folds to itself). */ /* return the simple case folding mapping for c */ U_CAPI UChar32 U_EXPORT2 -ucase_fold(UCaseProps *csp, UChar32 c, uint32_t options) { +ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) { uint16_t props; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)>=UCASE_UPPER) { - c+=GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props); @@ -1251,8 +1367,8 @@ ucase_fold(UCaseProps *csp, UChar32 c, uint32_t options) { /* 0049; C; 0069; # LATIN CAPITAL LETTER I */ return 0x69; } else if(c==0x130) { - /* no simple default mapping for U+0130, use UnicodeData.txt */ - return 0x69; + /* no simple case folding for U+0130 */ + return c; } } else { /* Turkic mappings */ @@ -1305,8 +1421,8 @@ ucase_toFullFolding(const UCaseProps *csp, UChar32 c, result=c; GET_PROPS(csp, c, props); if(!PROPS_HAS_EXCEPTION(props)) { - if(GET_CASE_TYPE(props)>=UCASE_UPPER) { - result=c+GET_SIGNED_DELTA(props); + if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + result=c+UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(csp, props), *pe2; @@ -1368,3 +1484,116 @@ ucase_toFullFolding(const UCaseProps *csp, UChar32 c, return (result==c) ? ~result : result; } + +/* case mapping properties API ---------------------------------------------- */ + +/* get the UCaseProps singleton, or else its dummy, once and for all */ +static const UCaseProps * +getCaseProps() { + /* + * This lazy intialization with double-checked locking (without mutex protection for + * the initial check) is transiently unsafe under certain circumstances. + * Check the readme and use u_init() if necessary. + */ + + /* the initial check is performed by the GET_CASE_PROPS() macro */ + const UCaseProps *csp; + UErrorCode errorCode=U_ZERO_ERROR; + + csp=ucase_getSingleton(&errorCode); + if(U_FAILURE(errorCode)) { + errorCode=U_ZERO_ERROR; + csp=ucase_getDummy(&errorCode); + if(U_FAILURE(errorCode)) { + return NULL; + } + } + + return csp; +} + +/* + * In ICU 3.0, most Unicode properties were loaded from uprops.icu. + * ICU 3.2 adds ucase.icu for case mapping properties. + * ICU 3.4 adds ubidi.icu for bidi/shaping properties and + * removes case/bidi/shaping properties from uprops.icu. + * + * Loading of uprops.icu was never mutex-protected and required u_init() + * for thread safety. + * In order to maintain performance for all such properties, + * ucase.icu and ubidi.icu are loaded lazily, without mutexing. + * u_init() will try to load them for thread safety, + * but u_init() will not fail if they are missing. + * + * uchar.c maintains a tri-state flag for (not loaded/loaded/failed to load) + * and an error code for load failure. + * Instead, here we try to load at most once. + * If it works, we use the resulting singleton object. + * If it fails, then we get a dummy object, which always works unless + * we are seriously out of memory. + * After the first try, we have a never-changing pointer to either the + * real singleton or the dummy. + * + * This method is used in Unicode properties APIs (uchar.h) that + * do not have a service object and also do not have an error code parameter. + * Other API implementations get the singleton themselves + * (with mutexing), store it in the service object, and report errors. + */ +#define GET_CASE_PROPS() (gCsp!=NULL ? gCsp : getCaseProps()) + +/* public API (see uchar.h) */ + +U_CAPI UBool U_EXPORT2 +u_isULowercase(UChar32 c) { + return (UBool)(UCASE_LOWER==ucase_getType(GET_CASE_PROPS(), c)); +} + +U_CAPI UBool U_EXPORT2 +u_isUUppercase(UChar32 c) { + return (UBool)(UCASE_UPPER==ucase_getType(GET_CASE_PROPS(), c)); +} + +/* Transforms the Unicode character to its lower case equivalent.*/ +U_CAPI UChar32 U_EXPORT2 +u_tolower(UChar32 c) { + return ucase_tolower(GET_CASE_PROPS(), c); +} + +/* Transforms the Unicode character to its upper case equivalent.*/ +U_CAPI UChar32 U_EXPORT2 +u_toupper(UChar32 c) { + return ucase_toupper(GET_CASE_PROPS(), c); +} + +/* Transforms the Unicode character to its title case equivalent.*/ +U_CAPI UChar32 U_EXPORT2 +u_totitle(UChar32 c) { + return ucase_totitle(GET_CASE_PROPS(), c); +} + +/* return the simple case folding mapping for c */ +U_CAPI UChar32 U_EXPORT2 +u_foldCase(UChar32 c, uint32_t options) { + return ucase_fold(GET_CASE_PROPS(), c, options); +} + +U_CFUNC int32_t U_EXPORT2 +ucase_hasBinaryProperty(UChar32 c, UProperty which) { + /* case mapping properties */ + const UCaseProps *csp=GET_CASE_PROPS(); + if(csp==NULL) { + return FALSE; + } + switch(which) { + case UCHAR_LOWERCASE: + return (UBool)(UCASE_LOWER==ucase_getType(csp, c)); + case UCHAR_UPPERCASE: + return (UBool)(UCASE_UPPER==ucase_getType(csp, c)); + case UCHAR_SOFT_DOTTED: + return ucase_isSoftDotted(csp, c); + case UCHAR_CASE_SENSITIVE: + return ucase_isCaseSensitive(csp, c); + default: + return FALSE; + } +} diff --git a/icuSources/common/ucase.h b/icuSources/common/ucase.h index f137d9bf..e3e5be05 100644 --- a/icuSources/common/ucase.h +++ b/icuSources/common/ucase.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -41,9 +41,17 @@ U_CAPI void U_EXPORT2 ucase_close(UCaseProps *csp); -U_CAPI UCaseProps * U_EXPORT2 +U_CAPI const UCaseProps * U_EXPORT2 ucase_getSingleton(UErrorCode *pErrorCode); +/** + * Get a singleton dummy object, one that works with no real data. + * This can be used when the real data is not available. + * Using the dummy can reduce checks for available data after an initial failure. + */ +U_CAPI const UCaseProps * U_EXPORT2 +ucase_getDummy(UErrorCode *pErrorCode); + U_CAPI int32_t U_EXPORT2 ucase_swap(const UDataSwapper *ds, @@ -51,7 +59,15 @@ ucase_swap(const UDataSwapper *ds, UErrorCode *pErrorCode); U_CAPI void U_EXPORT2 -ucase_addPropertyStarts(const UCaseProps *csp, USetAdder *sa, UErrorCode *pErrorCode); +ucase_addPropertyStarts(const UCaseProps *csp, const USetAdder *sa, UErrorCode *pErrorCode); + +/** + * Requires non-NULL locale ID but otherwise does the equivalent of + * checking for language codes as if uloc_getLanguage() were called: + * Accepts both 2- and 3-letter codes and accepts case variants. + */ +U_CFUNC int32_t +ucase_getCaseLocale(const char *locale, int32_t *locCache); /** * Bit mask for getting just the options from a string compare options word @@ -81,7 +97,34 @@ U_CAPI UChar32 U_EXPORT2 ucase_totitle(const UCaseProps *csp, UChar32 c); U_CAPI UChar32 U_EXPORT2 -ucase_fold(UCaseProps *csp, UChar32 c, uint32_t options); +ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options); + +/** + * Adds all simple case mappings and the full case folding for c to sa, + * and also adds special case closure mappings. + * c itself is not added. + * For example, the mappings + * - for s include long s + * - for sharp s include ss + * - for k include the Kelvin sign + */ +U_CAPI void U_EXPORT2 +ucase_addCaseClosure(const UCaseProps *csp, UChar32 c, const USetAdder *sa); + +/** + * Maps the string to single code points and adds the associated case closure + * mappings. + * The string is mapped to code points if it is their full case folding string. + * In other words, this performs a reverse full case folding and then + * adds the case closure items of the resulting code points. + * If the string is found and its closure applied, then + * the string itself is added as well as part of its code points' closure. + * It must be length>=0. + * + * @return TRUE if the string was found + */ +U_CAPI UBool U_EXPORT2 +ucase_addStringCaseClosure(const UCaseProps *csp, const UChar *s, int32_t length, const USetAdder *sa); /** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */ U_CAPI int32_t U_EXPORT2 @@ -108,7 +151,8 @@ ucase_isCaseSensitive(const UCaseProps *csp, UChar32 c); * It does not support random access or an arbitrary change of * iteration direction. * - * The direction parameter either starts + * The code point being case-mapped itself is never returned by + * this iterator. * * @param context A pointer to the iterator's working data. * @param dir If <0 then start iterating backward from the character; @@ -194,6 +238,9 @@ ucase_toFullFolding(const UCaseProps *csp, UChar32 c, const UChar **pString, uint32_t options); +U_CFUNC int32_t U_EXPORT2 +ucase_hasBinaryProperty(UChar32 c, UProperty which); + /* file definitions --------------------------------------------------------- */ #define UCASE_DATA_NAME "ucase" @@ -211,6 +258,7 @@ enum { UCASE_IX_LENGTH, UCASE_IX_TRIE_SIZE, UCASE_IX_EXC_LENGTH, + UCASE_IX_UNFOLD_LENGTH, UCASE_IX_MAX_FULL_LENGTH=15, UCASE_IX_TOP=16 @@ -227,6 +275,8 @@ enum { UCASE_TITLE }; +#define UCASE_GET_TYPE(props) ((props)&UCASE_TYPE_MASK) + #define UCASE_SENSITIVE 4 #define UCASE_EXCEPTION 8 @@ -264,7 +314,7 @@ enum { UCASE_EXC_TITLE, UCASE_EXC_4, /* reserved */ UCASE_EXC_5, /* reserved */ - UCASE_EXC_6, /* reserved */ + UCASE_EXC_CLOSURE, UCASE_EXC_FULL_MAPPINGS, UCASE_EXC_ALL_SLOTS /* one past the last slot */ }; @@ -296,6 +346,17 @@ enum { #define UCASE_FULL_UPPER 0xf00 #define UCASE_FULL_TITLE 0xf000 +/* maximum lengths */ +#define UCASE_FULL_MAPPINGS_MAX_LENGTH (4*0xf) +#define UCASE_CLOSURE_MAX_LENGTH 0xf + +/* constants for reverse case folding ("unfold") data */ +enum { + UCASE_UNFOLD_ROWS, + UCASE_UNFOLD_ROW_WIDTH, + UCASE_UNFOLD_STRING_WIDTH +}; + U_CDECL_END #endif diff --git a/icuSources/common/ucase_props_data.c b/icuSources/common/ucase_props_data.c new file mode 100644 index 00000000..015269b1 --- /dev/null +++ b/icuSources/common/ucase_props_data.c @@ -0,0 +1,648 @@ +/* + * Copyright (C) 1999-2007, International Business Machines + * Corporation and others. All Rights Reserved. + * + * file name: ucase_props_data.c + * + * machine-generated on: 2006-06-13 + * machine-generated on: 2007-02-08 U_DARWIN + */ + +static const UVersionInfo ucase_props_dataVersion={5,0,0,0}; + +#ifndef U_DARWIN +static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x466a,0x3980,0x4e3,0x172,0,0,0,0,0,0,0,0,0,0,3}; +#else /* U_DARWIN */ +static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x46ca,0x39e0,0x4e3,0x172,0,0,0,0,0,0,0,0,0,0,3}; +#endif /* U_DARWIN */ + +#ifndef U_DARWIN +static const uint16_t ucase_props_trieIndex[7352]={ +#else /* U_DARWIN */ +static const uint16_t ucase_props_trieIndex[7400]={ +#endif /* U_DARWIN */ +0x238,0x240,0x248,0x250,0x258,0x260,0x268,0x270,0x278,0x27e,0x285,0x288,0x290,0x298,0x2a0,0x2a8, +0x278,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c, +0x324,0x328,0x32c,0x278,0x334,0x278,0x33c,0x278,0x340,0x345,0x34a,0x352,0x359,0x361,0x369,0x36c, +0x374,0x230,0x37c,0x384,0x230,0x230,0x389,0x391,0x396,0x39b,0x3a3,0x230,0x230,0x3aa,0x230,0x3b0, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x3b8,0x3b9,0x3c1,0x3c9,0x3d1,0x3b9,0x3d9,0x3c9, +0x3b8,0x3b9,0x3e1,0x3e5,0x3b8,0x3b9,0x3ed,0x3c9,0x3d1,0x3f1,0x3f9,0x230,0x3fe,0x230,0x406,0x230, +0x230,0x40a,0x412,0x230,0x230,0x3f1,0x419,0x3c9,0x230,0x230,0x421,0x230,0x230,0x230,0x427,0x230, +0x230,0x42d,0x434,0x230,0x230,0x438,0x440,0x230,0x444,0x44b,0x230,0x452,0x45a,0x461,0x469,0x230, +0x230,0x46e,0x475,0x230,0x230,0x47d,0x485,0x3ff,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x487,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x48f,0x48f,0x495,0x495,0x230,0x49a,0x4a2,0x230, +0x4aa,0x230,0x4b2,0x230,0x230,0x407,0x230,0x230,0x230,0x4ba,0x230,0x230,0x230,0x230,0x230,0x230, +0x4c1,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x4c9,0x4cc,0x4d4,0x4da,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x4e2,0x4e2,0x4e2,0x4ea,0x4e5,0x4f2,0x4fa,0x4fd, +0x278,0x505,0x278,0x50d,0x510,0x278,0x518,0x51b,0x523,0x52b,0x533,0x53b,0x543,0x54b,0x553,0x55b, +0x563,0x56a,0x230,0x572,0x57a,0x230,0x580,0x588,0x590,0x598,0x5a0,0x5a8,0x5b0,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x5b3,0x5b9,0x5bf,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x5c7,0x5cc,0x5d0,0x5d8,0x278,0x278,0x278,0x5e0,0x5e8,0x5f0,0x230,0x23e,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x3d0,0x5f6,0x230,0x230,0x5fd,0x230,0x230,0x4b3,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x3cc,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x605,0x60d,0x230,0x230,0x230,0x230,0x230,0x230, +0x614,0x3b7,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifndef U_DARWIN +0x71b,0x71e,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x726,0x230,0x230,0x230,0x230,0x230, +#else /* U_DARWIN */ +0x727,0x72a,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x732,0x230,0x230,0x230,0x230,0x230, +#endif /* U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifdef U_DARWIN +0x230,0x230,0x230,0x618,0x620,0x36b,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x628,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#endif /* U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifndef U_DARWIN +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x61c,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#else /* U_DARWIN */ +0x630,0x638,0x230,0x230,0x230,0x230,0x230,0x23a,0x230,0x640,0x648,0x64f,0x40a,0x230,0x230,0x657, +#endif /* U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifndef U_DARWIN +0x624,0x62c,0x230,0x230,0x230,0x230,0x230,0x23a,0x230,0x634,0x63c,0x643,0x40a,0x230,0x230,0x64b, +#endif /* not U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifdef U_DARWIN +0x65f,0x665,0x669,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#endif /* U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifndef U_DARWIN +0x653,0x659,0x65d,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#endif /* not U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +#ifndef U_DARWIN +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x665,0x669,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x671,0x679,0x67f,0x230,0x230, +0x230,0x230,0x687,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x68f,0x697,0x69c,0x6a2,0x6aa,0x6b2,0x6ba,0x693,0x6c2,0x6ca,0x6d2,0x6d9,0x694,0x68f,0x697,0x692, +0x6a2,0x695,0x690,0x6e1,0x693,0x6e9,0x6f1,0x6f9,0x700,0x6ec,0x6f4,0x6fc,0x703,0x6ef,0x70b,0x230, +0x3d1,0x713,0x713,0x713,0x230,0x230,0x230,0x230,0x713,0x713,0x713,0x713,0x713,0x713,0x713,0x624, +#else /* U_DARWIN */ +0x671,0x675,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x67d,0x685,0x68b,0x230,0x230, +0x230,0x230,0x693,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0x69b,0x6a3,0x6a8,0x6ae,0x6b6,0x6be,0x6c6,0x69f,0x6ce,0x6d6,0x6de,0x6e5,0x6a0,0x69b,0x6a3,0x69e, +0x6ae,0x6a1,0x69c,0x6ed,0x69f,0x6f5,0x6fd,0x705,0x70c,0x6f8,0x700,0x708,0x70f,0x6fb,0x717,0x230, +0x3d1,0x71f,0x71f,0x71f,0x230,0x230,0x230,0x230,0x71f,0x71f,0x71f,0x71f,0x71f,0x71f,0x71f,0x630, +#endif /* U_DARWIN */ +0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230,0x230, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0, +0,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0xe,0x5e,0x7e,0x806,0x806,0x806,0x806, +0x806,0x806,0x806,0xbe,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0,0,0,0x40,0, +0x40,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xfd,0xf815,0x14d,0xf805,0xf805,0xf805,0xf805, +0xf805,0xf805,0xf805,0x18d,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x40,0,1,0,0,0x40,0,0x40, +0,0,0,0,0x40,0x1cd,0,0x40,0x40,0,1,0,0,0,0,0, +0x806,0x806,0x806,0x806,0x806,0x1fe,0x806,0x806,0x806,0x806,0x806,0x806,0x23e,0x25e,0x806,0x806, +0x806,0x806,0x806,0x806,0x806,0x806,0x806,0,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x27d, +0xf805,0xf805,0xf805,0xf805,0xf805,0x2fd,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805, +0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0x1e45, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x33e,0xffc5,0x46,0xffc5,0x46,0xffc5,0x35e,0xffd5,0x37e,0x3cd,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x41d,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xe1c6,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x49d, +0x30c5,0x3486,0x46,0xffc5,0x46,0xffc5,0x3386,0x46,0xffc5,0x3346,0x3346,0x46,0xffc5,1,0x13c6,0x3286, +0x32c6,0x46,0xffc5,0x3346,0x33c6,0x1845,0x34c6,0x3446,0x46,0xffc5,0x28c5,1,0x34c6,0x3546,0x2085,0x3586, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x3686,0x46,0xffc5,0x3686,1,1,0x46,0xffc5,0x3686,0x46, +0xffc5,0x3646,0x3646,0x46,0xffc5,0x46,0xffc5,0x36c6,0x46,0xffc5,1,0,0x46,0xffc5,1,0xe05, +0,0,0,0,0x4ce,0x4ff,0x53d,0x56e,0x59f,0x5dd,0x60e,0x63f,0x67d,0x46,0xffc5,0x46, +0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xec45,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x6ad,0x72e,0x75f,0x79d,0x46,0xffc5,0xe7c6,0xf206,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0xdf86,1,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,1,1,1,1,1,1,0x7ce,0x46,0xffc5,0xd746,0x7ee,1, +1,0x46,0xffc5,0xcf46,0x1146,0x11c6,0x46,0xffc5,0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +1,1,1,0xcb85,0xcc85,1,0xccc5,0xccc5,1,0xcd85,1,0xcd45,1,1,1,1, +0xccc5,1,1,0xcc45,1,1,1,1,0xcbd5,0xcb45,1,0x80d,1,1,1,0xcb45, +1,1,0xcac5,1,1,0xca85,1,1,1,1,1,1,1,0x82d,1,1, +0xc985,1,1,0xc985,1,1,1,1,0xc985,0xeec5,0xc9c5,0xc9c5,0xee45,1,1,1, +1,1,0xc945,1,0,1,1,1,1,1,1,1,1,0x11,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0x11,1,1,1,1,1,1,0x40,0x40,0x40,0x44,0x40,0x44,0x40, +1,1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +1,1,1,1,1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x64,0x64,0x60,0x60,0x60,0x60,0x60,0x84c,0x64,0x60,0x64,0x60,0x64,0x60,0x60,0x60, +0x60,0x60,0x60,0x64,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, +0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x74,0x70,0x70,0x70,0x70,0x70,0x70, +0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x64,0x60,0x60,0x85d,0x60,0x70, +0x70,0x70,0x60,0x60,0x60,0x70,0x70,0x40,0x60,0x60,0x60,0x70,0x70,0x70,0x70,0x60, +0x70,0x70,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x60,0x60,0x60, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,0x40,0x40,0,0, +0,0,1,0x2085,0x2085,0x2085,0,0,0,0,0,0,0x40,0x40,0x986,0, +0x946,0x946,0x946,0,0x1006,0,0xfc6,0xfc6,0x8ad,0x806,0x97e,0x806,0x806,0x9be,0x806,0x806, +0x9fe,0xa4e,0xa9e,0x806,0xade,0x806,0x806,0x806,0xb1e,0xb5e,0,0xb9e,0x806,0x806,0xbde,0x806, +0x806,0xc1e,0x806,0x806,0xf685,0xf6c5,0xf6c5,0xf6c5,0xc5d,0xf805,0xd2d,0xf805,0xf805,0xd6d,0xf805,0xf805, +0xdad,0xdfd,0xe4d,0xf805,0xe8d,0xf805,0xf805,0xf805,0xecd,0xf0d,0xf4d,0xf7d,0xf805,0xf805,0xfbd,0xf805, +0xf805,0xffd,0xf805,0xf805,0xf005,0xf045,0xf045,0,0x103d,0x106d,2,2,2,0x10bd,0x10ed,1, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x111d,0x114d,0x1c5,0x11,0x117e,0x11cd,0,0x46,0xffc5,0xfe46,0x46,0xffc5,1,0xdf86,0xdf86,0xdf86, +0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406,0x1406, +0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806, +0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805, +0xec05,0xec05,0xec05,0xec05,0xec05,0xec05,0xec15,0xec05,0xec15,0xec05,0xec05,0xec05,0xec05,0xec05,0xec05,0xec05, +0x46,0xffc5,0,0x60,0x60,0x60,0x60,0,0x40,0x40,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x3c6,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0xfc45, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06, +0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0, +0,0x40,0,0,0,0,0,0,0,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405, +0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405, +0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0x11fd,0,0,0,0, +0,0,0,0,0,0x70,0x60,0x60,0x60,0x60,0x70,0x60,0x60,0x60,0x70,0x70, +0x60,0x60,0x60,0x60,0x60,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x60,0x70,0x60, +0x60,0x70,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70, +0x70,0x70,0,0x70,0,0x70,0x70,0,0x60,0x70,0,0x70,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,0, +0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0, +0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,0, +0x40,0,0,0,0,0,0,0,0,0,0,0x70,0x70,0x70,0x70,0x70, +0x70,0x70,0x70,0x60,0x60,0x70,0x70,0x60,0x60,0x60,0x60,0x60,0x70,0x60,0x60,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60, +0x60,0x40,0x40,0x60,0x60,0x60,0x60,0x70,0x60,0x40,0x40,0x60,0x60,0,0x70,0x60, +0x60,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x40,0,0x70,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x70,0x60,0x60, +0x70,0x60,0x60,0x70,0x70,0x70,0x60,0x70,0x70,0x60,0x70,0x60,0x60,0x60,0x70,0x60, +0x70,0x60,0x70,0x60,0x70,0x60,0x60,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x60,0x60,0x60,0x60,0x60, +0x60,0x60,0x70,0x60,0x40,0x40,0,0,0,0,0x40,0,0,0,0,0, +0,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x70,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0, +0,0x70,0,0,0,0x60,0x70,0x60,0x60,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0, +0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0,0,0,0,0x40,0x40,0,0,0x40, +0x40,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0,0x40,0x40,0,0,0, +0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x70,0,0,0x40,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0, +0,0x70,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0, +0,0,0,0,0,0x70,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0,0x40,0x40, +0x40,0,0x40,0x40,0x40,0x70,0,0,0,0,0,0,0,0x70,0x70,0, +0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0, +0x40,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0, +0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x70,0,0,0,0,0,0,0,0x40,0x40, +0x40,0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0,0,0x40,0x40,0x40,0x40,0x70,0x70,0x70,0, +0,0,0,0,0,0,0x40,0x40,0x70,0x70,0x70,0x70,0x40,0x40,0x40,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x40,0,0,0x40,0x40,0x40,0x40,0x70,0x70,0,0x40,0x40,0,0,0, +0,0,0,0,0,0,0x40,0,0x70,0x70,0x70,0x70,0x40,0x40,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x70,0x70,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x70,0,0x70,0,0x70,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x70,0x70,0x40,0x70,0x40,0x40,0x40, +0x40,0x40,0x70,0x70,0x70,0x70,0x40,0,0x70,0x40,0x60,0x60,0x70,0,0x60,0x60, +0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0,0,0,0,0,0,0,0,0,0x70,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0x40,0x40,0,0x40,0,0,0,0x40,0x70, +0,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0,0, +0,0,0,0,0x127e,0x129e,0x12be,0x12de,0x12fe,0x131e,0x133e,0x135e,0x137e,0x139e,0x13be,0x13de, +0x13fe,0x141e,0x143e,0x145e,0x147e,0x149e,0x14be,0x14de,0x14fe,0x151e,0x153e,0x155e,0x157e,0x159e,0x15be,0x15de, +0x15fe,0x161e,0x163e,0x165e,0x167e,0x169e,0x16be,0x16de,0x16fe,0x171e,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x60,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40, +0x70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0x40,0, +0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x40,0,0,0,0x40, +0,0,0,0,0,0x60,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0x40, +0x40,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0, +0,0x70,0x60,0x70,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x60,0x70,0,0,0, +0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x70,0,0x40,0x40,0x40,0x40,0x40,0,0x40,0,0,0, +0,0,0x40,0,0x30,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x60,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0,0,0,0, +0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0x11,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0x173d,1,1,1,1,1,1,0x11,1,1,1, +0x11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0x60,0x60,0x70,0x60,0x60,0x60,0x60,0x60, +0x60,0x60,0x70,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x60,0x70,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffd5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x175e,0x179d,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x17dd,0x185d,0x18dd,0x195d,0x19dd,0x1a5d,0,0,0,0, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffd5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5, +0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0,0,0,0,0,0,0x205,0x205,0x205,0x205, +0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205, +0x205,0x205,0,0,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0,0,0x205,0x205,0x205,0x205, +0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205, +0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x205,0x205,0x205,0x205, +0x205,0x205,0,0,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0,0,0x1a8d,0x205,0x1b0d,0x205, +0x1bbd,0x205,0x1c6d,0x205,0,0xfe06,0,0xfe06,0,0xfe06,0,0xfe06,0x205,0x205,0x205,0x205, +0x205,0x205,0x205,0x205,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0xfe06,0x1285,0x1285,0x1585,0x1585, +0x1585,0x1585,0x1905,0x1905,0x2005,0x2005,0x1c05,0x1c05,0x1f85,0x1f85,0,0,0x1d1d,0x1d8d,0x1dfd,0x1e6d, +0x1edd,0x1f4d,0x1fbd,0x202d,0x209f,0x210f,0x217f,0x21ef,0x225f,0x22cf,0x233f,0x23af,0x241d,0x248d,0x24fd,0x256d, +0x25dd,0x264d,0x26bd,0x272d,0x279f,0x280f,0x287f,0x28ef,0x295f,0x29cf,0x2a3f,0x2aaf,0x2b1d,0x2b8d,0x2bfd,0x2c6d, +0x2cdd,0x2d4d,0x2dbd,0x2e2d,0x2e9f,0x2f0f,0x2f7f,0x2fef,0x305f,0x30cf,0x313f,0x31af,0x205,0x205,0x321d,0x329d, +0x330d,0,0x338d,0x340d,0xfe06,0xfe06,0xed86,0xed86,0x34bf,0x40,0x352d,0x40,0x40,0x40,0x357d,0x35fd, +0x366d,0,0x36ed,0x376d,0xea86,0xea86,0xea86,0xea86,0x381f,0x40,0x40,0x40,0x205,0x205,0x388d,0x393d, +0,0,0x3a0d,0x3a8d,0xfe06,0xfe06,0xe706,0xe706,0,0x40,0x40,0x40,0x205,0x205,0x3b3d,0x3bed, +0x3cbd,0x1c5,0x3d3d,0x3dbd,0xfe06,0xfe06,0xe406,0xe406,0xfe46,0x40,0x40,0x40,0,0,0x3e6d,0x3eed, +0x3f5d,0,0x3fdd,0x405d,0xe006,0xe006,0xe086,0xe086,0x410f,0x40,0x40,0,0,0,0,0, +0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0,0,0,0, +0,0,0,0,0,0x40,0,0,0,0,0,0,0,0,0,0x40, +0,0,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0,0,0,0, +0,0,0x40,0x40,0x40,0x40,0x40,0x40,0,0x11,0,0,0,0,0,0, +0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x60,0x60,0x70,0x70,0x60,0x60,0x60,0x60,0x70,0x70,0x70,0x60,0x60,0x40,0x40,0x40, +0x40,0x60,0x40,0x40,0x40,0x70,0x70,0x60,0x70,0x60,0x70,0x70,0x70,0x70,0x70,0x70, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,2,0,0,0,0,2,0,0,1,2,2,2,1,1, +2,2,2,1,0,2,0,0,0,2,2,2,2,2,0,0, +0,0,0,0,2,0,0x417e,0,2,0,0x41be,0x41fe,2,2,0,1, +2,2,0x706,2,1,0,0,0,0,1,0,0,1,1,2,2, +0,0,0,0,0,2,1,1,0x11,0x11,0,0,0,0,0xf905,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406,0x406, +0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05,0xfc05, +0,0,0,0x46,0xffc5,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686,0x686, +0x686,0x686,0x686,0x686,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0xf985, +0xf985,0xf985,0xf985,0xf985,0xf985,0xf985,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xc06,0xc06,0xc06,0xc06, +0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06, +0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0, +0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405, +0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0xf405,0, +0x46,0xffc5,0x423e,0x425e,0x427e,0x429d,0x42bd,0x46,0xffc5,0x46,0xffc5,0x46,0xffc5,0,0,0, +0,0,0,0,1,0x46,0xffc5,1,0,0,0,0,0,0,0,0, +0x46,0xffc5,0x46,0xffc5,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x42dd,0x42fd,0x431d,0x433d,0x435d,0x437d,0x439d,0x43bd,0x43dd,0x43fd,0x441d,0x443d,0x445d,0x447d,0x449d,0x44bd, +0x44dd,0x44fd,0x451d,0x453d,0x455d,0x457d,0x459d,0x45bd,0x45dd,0x45fd,0x461d,0x463d,0x465d,0x467d,0x469d,0x46bd, +0x46dd,0x46fd,0x471d,0x473d,0x475d,0x477d,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x70,0x70,0x70,0x70,0x70,0x70,0,0x40,0x40,0x40,0x40,0x40,0,0, +0,0,0,0x40,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x70,0x70,0x40, +0x40,0x40,0x40,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0, +0,0,0,0,0x40,0x40,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x70,0,0,0,0,0x40,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifdef U_DARWIN +0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40, +0,0,0,0,0x40,0,0,0,0,0x40,0x70,0x70,0x70,0x70,0x70,0x70, +0x70,0x70,0x70,0x70,0x70,0x70,0x40,0,0,0x40,0,0,0,0,0,0x70, +#endif /* U_DARWIN */ +0x479d,0x481d,0x489d,0x491d,0x49cd,0x4a7d,0x4b1d,0,0,0,0,0,0,0,0,0, +0,0,0,0x4bbd,0x4c3d,0x4cbd,0x4d3d,0x4dbd,0,0,0,0,0,0,0x70,0, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x60,0x60,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806, +0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0x806,0,0,0,0x40,0, +0x40,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805, +0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0xf805,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x40,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x40, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0x40,0,0,0,0,0xa06,0xa06,0xa06,0xa06, +0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06, +0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xa06,0xf605,0xf605,0xf605,0xf605, +0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605,0xf605, +0xf605,0xf605,0xf605,0xf605,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x40,0x40,0x40,0,0x40,0x40,0,0,0,0,0, +0x40,0x70,0x40,0x60,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x70,0x70,0, +0,0,0,0x70,0,0,0,0,0,0x30,0x30,0x70,0x70,0x70,0,0, +0,0x30,0x30,0x30,0x30,0x30,0x30,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70, +0x70,0x70,0x70,0x70,0x70,0x70,0x70,0,0,0x60,0x60,0x60,0x60,0x60,0x70,0x70, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x60,0x60,0x60,0x60,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x60, +0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,1,1,1,1,1,1,1,1,0x11,0x11, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1, +1,1,1,1,1,0,0x11,0x11,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1, +1,1,0x11,0x11,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,0,2,2,0,0,2,0,0,2,2,0, +0,2,2,2,2,0,2,2,2,2,2,2,2,2,1,1, +1,1,0,1,0,1,0x11,0x11,1,1,1,1,0,1,1,1, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,1,1,1,1,2,2,0,2, +2,2,2,0,0,2,2,2,2,2,2,2,2,0,2,2, +2,2,2,2,2,0,1,1,1,1,1,1,1,1,0x11,0x11, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +2,2,0,2,2,2,2,0,2,2,2,2,2,0,2,0, +0,0,2,2,2,2,2,2,2,0,1,1,1,1,1,1, +1,1,0x11,0x11,1,1,1,1,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,1,1,0,0,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0, +1,1,1,1,1,1,2,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0x820,0x840,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x860,0x880,0,0, +0,0,0,0,0,0,0,0,0x8a0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0 +}; + +static const uint16_t ucase_props_exceptions[1251]={ +0xc041,0x69,2,0x130,0x131,0x4001,0x6a,0x41,0x6b,1,0x212a,0x41,0x73,1,0x17f,0x5044, +0x49,2,0x130,0x131,0x44,0x4b,1,0x212a,0x44,0x53,1,0x17f,6,0x3bc,0x39c,0x41, +0xe5,1,0x212b,0x4001,0xec,0x4001,0xed,0x80,0x2220,0x73,0x73,0x53,0x53,0x53,0x73,0x44, +0xc5,1,0x212b,0x4001,0x129,0x4001,0x12f,0xc041,0x69,2,0x131,0x49,0x44,0x49,2,0x69, +0x130,0x80,0x2220,0x2bc,0x6e,0x2bc,0x4e,0x2bc,0x4e,6,0x73,0x53,9,0x1c6,0x1c5,0xd, +0x1c6,0x1c4,0x1c5,0xc,0x1c4,0x1c5,9,0x1c9,0x1c8,0xd,0x1c9,0x1c7,0x1c8,0xc,0x1c7,0x1c8, +9,0x1cc,0x1cb,0xd,0x1cc,0x1ca,0x1cb,0xc,0x1ca,0x1cb,0x80,0x2220,0x6a,0x30c,0x4a,0x30c, +0x4a,0x30c,9,0x1f3,0x1f2,0xd,0x1f3,0x1f1,0x1f2,0xc,0x1f1,0x1f2,1,0x2c65,1,0x2c66, +4,0x2c62,4,0x2c64,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308,0x301, +0x399,0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5,0x41, +0x3b8,2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc,1, +0xb5,0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6,1, +0x3d5,0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308, +0x301,0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,0x3f4,0x44, +0x399,2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,1,0x3d6, +0x44,0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5,0x44, +0x3a9,1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,6,0x3c0, +0x3a0,6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,0x395,0x80, +0x2220,0x565,0x582,0x535,0x552,0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1, +0x2d04,1,0x2d05,1,0x2d06,1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1, +0x2d0c,1,0x2d0d,1,0x2d0e,1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1, +0x2d14,1,0x2d15,1,0x2d16,1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1, +0x2d1c,1,0x2d1d,1,0x2d1e,1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1, +0x2d24,1,0x2d25,4,0x2c63,0x41,0x1e61,1,0x1e9b,0x44,0x1e60,1,0x1e9b,0x80,0x2220,0x68, +0x331,0x48,0x331,0x48,0x331,0x80,0x2220,0x74,0x308,0x54,0x308,0x54,0x308,0x80,0x2220,0x77, +0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220,0x79,0x30a,0x59,0x30a,0x59,0x30a,0x80,0x2220,0x61, +0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61,0x1e60,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313, +0x80,0x3330,0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301, +0x3a5,0x313,0x301,0x3a5,0x313,0x301,0x80,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313, +0x342,0x84,0x1f88,0x220,0x1f00,0x3b9,0x1f08,0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84, +0x1f8a,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x84,0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220, +0x1f04,0x3b9,0x1f0c,0x399,0x84,0x1f8d,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9, +0x1f0e,0x399,0x84,0x1f8f,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399, +0x81,0x1f81,0x220,0x1f01,0x3b9,0x1f09,0x399,0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83, +0x220,0x1f03,0x3b9,0x1f0b,0x399,0x81,0x1f84,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05, +0x3b9,0x1f0d,0x399,0x81,0x1f86,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f, +0x399,0x84,0x1f98,0x220,0x1f20,0x3b9,0x1f28,0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84, +0x1f9a,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x84,0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220, +0x1f24,0x3b9,0x1f2c,0x399,0x84,0x1f9d,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9, +0x1f2e,0x399,0x84,0x1f9f,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399, +0x81,0x1f91,0x220,0x1f21,0x3b9,0x1f29,0x399,0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93, +0x220,0x1f23,0x3b9,0x1f2b,0x399,0x81,0x1f94,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25, +0x3b9,0x1f2d,0x399,0x81,0x1f96,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f, +0x399,0x84,0x1fa8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84, +0x1faa,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x84,0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220, +0x1f64,0x3b9,0x1f6c,0x399,0x84,0x1fad,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9, +0x1f6e,0x399,0x84,0x1faf,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399, +0x81,0x1fa1,0x220,0x1f61,0x3b9,0x1f69,0x399,0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3, +0x220,0x1f63,0x3b9,0x1f6b,0x399,0x81,0x1fa4,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65, +0x3b9,0x1f6d,0x399,0x81,0x1fa6,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f, +0x399,0x80,0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399, +0x80,0x2220,0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342, +0x80,0x3330,0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9, +0x391,0x399,0x46,0x3b9,0x399,1,0x345,0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84, +0x1fcc,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220, +0x3b7,0x342,0x397,0x342,0x397,0x342,0x80,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342, +0x345,0x81,0x1fc3,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300, +0x399,0x308,0x300,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390, +0x80,0x2220,0x3b9,0x342,0x399,0x342,0x399,0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342, +0x399,0x308,0x342,0x80,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1, +0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1, +0x313,0x3a1,0x313,0x80,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342, +0x3a5,0x308,0x342,0x3a5,0x308,0x342,0x80,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc, +0x220,0x3c9,0x3b9,0x3a9,0x399,0x80,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9, +0x342,0x3a9,0x342,0x3a9,0x342,0x80,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345, +0x81,0x1ff3,0x220,0x3c9,0x3b9,0x3a9,0x399,0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41, +0xe5,1,0xc5,1,0x26b,1,0x1d7d,1,0x27d,4,0x23a,4,0x23e,4,0x10a0,4, +0x10a1,4,0x10a2,4,0x10a3,4,0x10a4,4,0x10a5,4,0x10a6,4,0x10a7,4,0x10a8,4, +0x10a9,4,0x10aa,4,0x10ab,4,0x10ac,4,0x10ad,4,0x10ae,4,0x10af,4,0x10b0,4, +0x10b1,4,0x10b2,4,0x10b3,4,0x10b4,4,0x10b5,4,0x10b6,4,0x10b7,4,0x10b8,4, +0x10b9,4,0x10ba,4,0x10bb,4,0x10bc,4,0x10bd,4,0x10be,4,0x10bf,4,0x10c0,4, +0x10c1,4,0x10c2,4,0x10c3,4,0x10c4,4,0x10c5,0x80,0x2220,0x66,0x66,0x46,0x46,0x46, +0x66,0x80,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x80,0x2220,0x66,0x6c,0x46,0x4c,0x46, +0x6c,0x80,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69,0x80,0x3330,0x66,0x66, +0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74, +0xfb06,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x80,0x2220,0x574,0x576,0x544, +0x546,0x544,0x576,0x80,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x80,0x2220,0x574,0x56b,0x544, +0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x80,0x2220,0x574,0x56d,0x544, +0x53d,0x544,0x56d +}; + +static const uint16_t ucase_props_unfold[370]={ +0x49,5,3,0,0,0x61,0x2be,0,0x1e9a,0,0x66,0x66,0,0xfb00,0,0x66, +0x66,0x69,0xfb03,0,0x66,0x66,0x6c,0xfb04,0,0x66,0x69,0,0xfb01,0,0x66,0x6c, +0,0xfb02,0,0x68,0x331,0,0x1e96,0,0x69,0x307,0,0x130,0,0x6a,0x30c,0, +0x1f0,0,0x73,0x73,0,0xdf,0,0x73,0x74,0,0xfb05,0xfb06,0x74,0x308,0,0x1e97, +0,0x77,0x30a,0,0x1e98,0,0x79,0x30a,0,0x1e99,0,0x2bc,0x6e,0,0x149,0, +0x3ac,0x3b9,0,0x1fb4,0,0x3ae,0x3b9,0,0x1fc4,0,0x3b1,0x342,0,0x1fb6,0,0x3b1, +0x342,0x3b9,0x1fb7,0,0x3b1,0x3b9,0,0x1fb3,0x1fbc,0x3b7,0x342,0,0x1fc6,0,0x3b7,0x342, +0x3b9,0x1fc7,0,0x3b7,0x3b9,0,0x1fc3,0x1fcc,0x3b9,0x308,0x300,0x1fd2,0,0x3b9,0x308,0x301, +0x390,0x1fd3,0x3b9,0x308,0x342,0x1fd7,0,0x3b9,0x342,0,0x1fd6,0,0x3c1,0x313,0,0x1fe4, +0,0x3c5,0x308,0x300,0x1fe2,0,0x3c5,0x308,0x301,0x3b0,0x1fe3,0x3c5,0x308,0x342,0x1fe7,0, +0x3c5,0x313,0,0x1f50,0,0x3c5,0x313,0x300,0x1f52,0,0x3c5,0x313,0x301,0x1f54,0,0x3c5, +0x313,0x342,0x1f56,0,0x3c5,0x342,0,0x1fe6,0,0x3c9,0x342,0,0x1ff6,0,0x3c9,0x342, +0x3b9,0x1ff7,0,0x3c9,0x3b9,0,0x1ff3,0x1ffc,0x3ce,0x3b9,0,0x1ff4,0,0x565,0x582,0, +0x587,0,0x574,0x565,0,0xfb14,0,0x574,0x56b,0,0xfb15,0,0x574,0x56d,0,0xfb17, +0,0x574,0x576,0,0xfb13,0,0x57e,0x576,0,0xfb16,0,0x1f00,0x3b9,0,0x1f80,0x1f88, +0x1f01,0x3b9,0,0x1f81,0x1f89,0x1f02,0x3b9,0,0x1f82,0x1f8a,0x1f03,0x3b9,0,0x1f83,0x1f8b,0x1f04, +0x3b9,0,0x1f84,0x1f8c,0x1f05,0x3b9,0,0x1f85,0x1f8d,0x1f06,0x3b9,0,0x1f86,0x1f8e,0x1f07,0x3b9, +0,0x1f87,0x1f8f,0x1f20,0x3b9,0,0x1f90,0x1f98,0x1f21,0x3b9,0,0x1f91,0x1f99,0x1f22,0x3b9,0, +0x1f92,0x1f9a,0x1f23,0x3b9,0,0x1f93,0x1f9b,0x1f24,0x3b9,0,0x1f94,0x1f9c,0x1f25,0x3b9,0,0x1f95, +0x1f9d,0x1f26,0x3b9,0,0x1f96,0x1f9e,0x1f27,0x3b9,0,0x1f97,0x1f9f,0x1f60,0x3b9,0,0x1fa0,0x1fa8, +0x1f61,0x3b9,0,0x1fa1,0x1fa9,0x1f62,0x3b9,0,0x1fa2,0x1faa,0x1f63,0x3b9,0,0x1fa3,0x1fab,0x1f64, +0x3b9,0,0x1fa4,0x1fac,0x1f65,0x3b9,0,0x1fa5,0x1fad,0x1f66,0x3b9,0,0x1fa6,0x1fae,0x1f67,0x3b9, +0,0x1fa7,0x1faf,0x1f70,0x3b9,0,0x1fb2,0,0x1f74,0x3b9,0,0x1fc2,0,0x1f7c,0x3b9,0, +0x1ff2,0 +}; + +static const UCaseProps ucase_props_singleton={ + NULL, + ucase_props_indexes, + ucase_props_exceptions, + ucase_props_unfold, + { + ucase_props_trieIndex, + NULL, + utrie_defaultGetFoldingOffset, + 2240, +#ifndef U_DARWIN + 5112, +#else /* U_DARWIN */ + 5160, +#endif /* U_DARWIN */ + 0, + TRUE + }, + { 1,1,5,2 } +}; diff --git a/icuSources/common/ucasemap.c b/icuSources/common/ucasemap.c new file mode 100644 index 00000000..02f94762 --- /dev/null +++ b/icuSources/common/ucasemap.c @@ -0,0 +1,333 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: ucasemap.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005may06 +* created by: Markus W. Scherer +* +* Case mapping service object and functions using it. +*/ + +#include "unicode/utypes.h" +#include "unicode/uloc.h" +#include "unicode/ustring.h" +#include "unicode/ucasemap.h" +#include "cmemory.h" +#include "cstring.h" +#include "ucase.h" +#include "ustr_imp.h" + +/* UCaseMap service object -------------------------------------------------- */ + +struct UCaseMap { + const UCaseProps *csp; + char locale[32]; + int32_t locCache; + uint32_t options; +}; + +U_DRAFT UCaseMap * U_EXPORT2 +ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode) { + UCaseMap *csm; + + if(U_FAILURE(*pErrorCode)) { + return NULL; + } + + csm=(UCaseMap *)uprv_malloc(sizeof(UCaseMap)); + if(csm==NULL) { + return NULL; + } + uprv_memset(csm, 0, sizeof(UCaseMap)); + + csm->csp=ucase_getSingleton(pErrorCode); + ucasemap_setLocale(csm, locale, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + uprv_free(csm); + return NULL; + } + + csm->options=options; + return csm; +} + +U_DRAFT void U_EXPORT2 +ucasemap_close(UCaseMap *csm) { + if(csm!=NULL) { + uprv_free(csm); + } +} + +U_DRAFT const char * U_EXPORT2 +ucasemap_getLocale(const UCaseMap *csm) { + return csm->locale; +} + +U_DRAFT uint32_t U_EXPORT2 +ucasemap_getOptions(const UCaseMap *csm) { + return csm->options; +} + +U_DRAFT void U_EXPORT2 +ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode) { + int32_t length; + + if(U_FAILURE(*pErrorCode)) { + return; + } + + length=uloc_getName(locale, csm->locale, (int32_t)sizeof(csm->locale), pErrorCode); + if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR || length==sizeof(csm->locale)) { + *pErrorCode=U_ZERO_ERROR; + /* we only really need the language code for case mappings */ + length=uloc_getLanguage(locale, csm->locale, (int32_t)sizeof(csm->locale), pErrorCode); + } + if(length==sizeof(csm->locale)) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } + csm->locCache=0; + if(U_SUCCESS(*pErrorCode)) { + ucase_getCaseLocale(csm->locale, &csm->locCache); + } else { + csm->locale[0]=0; + } +} + +U_DRAFT void U_EXPORT2 +ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode) { + csm->options=options; +} + +/* UTF-8 string case mappings ----------------------------------------------- */ + +/* append a full case mapping result, see UCASE_MAX_STRING_LENGTH */ +static U_INLINE int32_t +appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity, + int32_t result, const UChar *s) { + UChar32 c; + int32_t length, destLength; + UErrorCode errorCode; + + /* decode the result */ + if(result<0) { + /* (not) original code point */ + c=~result; + length=-1; + } else if(result<=UCASE_MAX_STRING_LENGTH) { + c=U_SENTINEL; + length=result; + } else { + c=result; + length=-1; + } + + if(destIndexindex=csc->cpStart; + csc->dir=dir; + } else if(dir>0) { + /* reset for forward iteration */ + csc->index=csc->cpLimit; + csc->dir=dir; + } else { + /* continue current iteration direction */ + dir=csc->dir; + } + + if(dir<0) { + if(csc->startindex) { + U8_PREV((const uint8_t *)csc->p, csc->start, csc->index, c); + return c; + } + } else { + if(csc->indexlimit) { + U8_NEXT((const uint8_t *)csc->p, csc->index, csc->limit, c); + return c; + } + } + return U_SENTINEL; +} + +typedef int32_t U_CALLCONV +UCaseMapFull(const UCaseProps *csp, UChar32 c, + UCaseContextIterator *iter, void *context, + const UChar **pString, + const char *locale, int32_t *locCache); + +/* + * Case-maps [srcStart..srcLimit[ but takes + * context [0..srcLength[ into account. + */ +static int32_t +_caseMap(const UCaseMap *csm, UCaseMapFull *map, + uint8_t *dest, int32_t destCapacity, + const uint8_t *src, UCaseContext *csc, + int32_t srcStart, int32_t srcLimit, + UErrorCode *pErrorCode) { + const UChar *s; + UChar32 c; + int32_t srcIndex, destIndex; + int32_t locCache; + + locCache=csm->locCache; + + /* case mapping loop */ + srcIndex=srcStart; + destIndex=0; + while(srcIndexcpStart=srcIndex; + U8_NEXT(src, srcIndex, srcLimit, c); + csc->cpLimit=srcIndex; + c=map(csm->csp, c, utf8_caseContextIterator, csc, &s, csm->locale, &locCache); + destIndex=appendResult(dest, destIndex, destCapacity, c, s); + } + + if(destIndex>destCapacity) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } + return destIndex; +} + +/* + * Implement argument checking and buffer handling + * for string case mapping as a common function. + */ +enum { + TO_LOWER, + TO_UPPER, + TO_TITLE, + FOLD_CASE +}; + +/* common internal function for public API functions */ + +static int32_t +caseMap(const UCaseMap *csm, + uint8_t *dest, int32_t destCapacity, + const uint8_t *src, int32_t srcLength, + int32_t toWhichCase, + UErrorCode *pErrorCode) { + UCaseContext csc={ NULL }; + int32_t destLength; + + /* check argument values */ + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if( destCapacity<0 || + (dest==NULL && destCapacity>0) || + src==NULL || + srcLength<-1 + ) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + /* get the string length */ + if(srcLength==-1) { + srcLength=uprv_strlen((const char *)src); + } + + /* check for overlapping source and destination */ + if( dest!=NULL && + ((src>=dest && src<(dest+destCapacity)) || + (dest>=src && dest<(src+srcLength))) + ) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + destLength=0; + + csc.p=(void *)src; + csc.limit=srcLength; + + if(toWhichCase==TO_LOWER) { + destLength=_caseMap(csm, ucase_toFullLower, + dest, destCapacity, + src, &csc, + 0, srcLength, + pErrorCode); + } else /* if(toWhichCase==TO_UPPER) */ { + destLength=_caseMap(csm, ucase_toFullUpper, + dest, destCapacity, + src, &csc, + 0, srcLength, + pErrorCode); + } + + return u_terminateChars((char *)dest, destCapacity, destLength, pErrorCode); +} + +/* public API functions */ + +U_DRAFT int32_t U_EXPORT2 +ucasemap_utf8ToLower(const UCaseMap *csm, + char *dest, int32_t destCapacity, + const char *src, int32_t srcLength, + UErrorCode *pErrorCode) { + return caseMap(csm, + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + TO_LOWER, pErrorCode); +} + +U_DRAFT int32_t U_EXPORT2 +ucasemap_utf8ToUpper(const UCaseMap *csm, + char *dest, int32_t destCapacity, + const char *src, int32_t srcLength, + UErrorCode *pErrorCode) { + return caseMap(csm, + (uint8_t *)dest, destCapacity, + (const uint8_t *)src, srcLength, + TO_UPPER, pErrorCode); +} diff --git a/icuSources/common/uchar.c b/icuSources/common/uchar.c index 29c288aa..718e87a4 100644 --- a/icuSources/common/uchar.c +++ b/icuSources/common/uchar.c @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -35,6 +35,15 @@ /* dynamically loaded Unicode character properties -------------------------- */ +#define UCHAR_HARDCODE_DATA 1 + +#if UCHAR_HARDCODE_DATA + +/* uchar_props_data.c is machine-generated by genprops --csource */ +#include "uchar_props_data.c" + +#else + /* * loaded uprops.dat - * for a description of the file format, see icu/source/tools/genprops/store.c @@ -49,8 +58,7 @@ static uint8_t formatVersion[4]={ 0, 0, 0, 0 }; static UVersionInfo dataVersion={ 0, 0, 0, 0 }; static UTrie propsTrie={ 0 }, propsVectorsTrie={ 0 }; -static const uint32_t *pData32=NULL, *props32Table=NULL, *exceptionsTable=NULL, *propsVectors=NULL; -static const UChar *ucharsTable=NULL; +static const uint32_t *pData32=NULL, *propsVectors=NULL; static int32_t countPropsVectors=0, propsVectorsColumns=0; static int8_t havePropsData=0; /* == 0 -> Data has not been loaded. @@ -61,16 +69,6 @@ static int8_t havePropsData=0; /* == 0 -> Data has not been loaded. /* index values loaded from uprops.dat */ static int32_t indexes[UPROPS_INDEX_COUNT]; -/* if bit 15 is set, then the folding offset is in bits 14..0 of the 16-bit trie result */ -static int32_t U_CALLCONV -getFoldingPropsOffset(uint32_t data) { - if(data&0x8000) { - return (int32_t)(data&0x7fff); - } else { - return 0; - } -} - static UBool U_CALLCONV isAcceptable(void *context, const char *type, const char *name, @@ -83,7 +81,7 @@ isAcceptable(void *context, pInfo->dataFormat[1]==0x50 && pInfo->dataFormat[2]==0x72 && pInfo->dataFormat[3]==0x6f && - pInfo->formatVersion[0]==3 && + pInfo->formatVersion[0]==4 && pInfo->formatVersion[2]==UTRIE_SHIFT && pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT ) { @@ -102,11 +100,9 @@ static UBool U_CALLCONV uchar_cleanup(void) propsData=NULL; } pData32=NULL; - props32Table=NULL; - exceptionsTable=NULL; - ucharsTable=NULL; propsVectors=NULL; countPropsVectors=0; + uprv_memset(dataVersion, 0, U_MAX_VERSION_LENGTH); dataErrorCode=U_ZERO_ERROR; havePropsData=0; @@ -139,23 +135,27 @@ _openProps(UCharProps *ucp, UErrorCode *pErrorCode) { if(U_FAILURE(*pErrorCode)) { return; } - ucp->propsTrie.getFoldingOffset=getFoldingPropsOffset; - /* unserialize the properties vectors trie, if any */ - if( p[UPROPS_ADDITIONAL_TRIE_INDEX]!=0 && - p[UPROPS_ADDITIONAL_VECTORS_INDEX]!=0 - ) { - length=(int32_t)(p[UPROPS_ADDITIONAL_VECTORS_INDEX]-p[UPROPS_ADDITIONAL_TRIE_INDEX])*4; + /* unserialize the properties vectors trie */ + length=(int32_t)(p[UPROPS_ADDITIONAL_VECTORS_INDEX]-p[UPROPS_ADDITIONAL_TRIE_INDEX])*4; + if(length>0) { length=utrie_unserialize(&ucp->propsVectorsTrie, (const uint8_t *)(p+p[UPROPS_ADDITIONAL_TRIE_INDEX]), length, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - uprv_memset(&ucp->propsVectorsTrie, 0, sizeof(ucp->propsVectorsTrie)); - } else { - ucp->propsVectorsTrie.getFoldingOffset=getFoldingPropsOffset; - } + } + if(length<=0 || U_FAILURE(*pErrorCode)) { + /* + * length==0: + * Allow the properties vectors trie to be missing - + * also requires propsVectorsColumns=indexes[UPROPS_ADDITIONAL_VECTORS_COLUMNS_INDEX] + * to be zero so that this trie is never accessed. + */ + uprv_memset(&ucp->propsVectorsTrie, 0, sizeof(ucp->propsVectorsTrie)); } } -U_CFUNC int8_t +#endif + +#if !UCHAR_HARDCODE_DATA +static int8_t uprv_loadPropsData(UErrorCode *pErrorCode) { /* load Unicode character properties data from file if necessary */ @@ -166,7 +166,6 @@ uprv_loadPropsData(UErrorCode *pErrorCode) { */ if(havePropsData==0) { UCharProps ucp={ NULL }; - UCaseProps *csp; if(U_FAILURE(*pErrorCode)) { return havePropsData; @@ -185,14 +184,10 @@ uprv_loadPropsData(UErrorCode *pErrorCode) { ucp.pData32=NULL; uprv_memcpy(&propsTrie, &ucp.propsTrie, sizeof(propsTrie)); uprv_memcpy(&propsVectorsTrie, &ucp.propsVectorsTrie, sizeof(propsVectorsTrie)); - csp=NULL; } /* initialize some variables */ uprv_memcpy(indexes, pData32, sizeof(indexes)); - props32Table=pData32+indexes[UPROPS_PROPS32_INDEX]; - exceptionsTable=pData32+indexes[UPROPS_EXCEPTIONS_INDEX]; - ucharsTable=(const UChar *)(pData32+indexes[UPROPS_EXCEPTIONS_TOP_INDEX]); /* additional properties */ if(indexes[UPROPS_ADDITIONAL_VECTORS_INDEX]!=0) { @@ -216,7 +211,6 @@ uprv_loadPropsData(UErrorCode *pErrorCode) { return havePropsData; } - static int8_t loadPropsData(void) { UErrorCode errorCode = U_ZERO_ERROR; @@ -224,146 +218,20 @@ loadPropsData(void) { return retVal; } +#endif -/* Unicode properties data swapping ----------------------------------------- */ - -U_CAPI int32_t U_EXPORT2 -uprops_swap(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const UDataInfo *pInfo; - int32_t headerSize, i; - - int32_t dataIndexes[UPROPS_INDEX_COUNT]; - const int32_t *inData32; - - /* udata_swapDataHeader checks the arguments */ - headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - /* check data format and format version */ - pInfo=(const UDataInfo *)((const char *)inData+4); - if(!( - pInfo->dataFormat[0]==0x55 && /* dataFormat="UPro" */ - pInfo->dataFormat[1]==0x50 && - pInfo->dataFormat[2]==0x72 && - pInfo->dataFormat[3]==0x6f && - pInfo->formatVersion[0]==3 && - pInfo->formatVersion[2]==UTRIE_SHIFT && - pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT - )) { - udata_printError(ds, "uprops_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not a Unicode properties file\n", - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3], - pInfo->formatVersion[0]); - *pErrorCode=U_UNSUPPORTED_ERROR; - return 0; - } - - /* the properties file must contain at least the indexes array */ - if(length>=0 && (length-headerSize)=0) { - int32_t *outData32; - - if((length-headerSize)<(4*dataIndexes[UPROPS_RESERVED_INDEX])) { - udata_printError(ds, "uprops_swap(): too few bytes (%d after header) for a Unicode properties file\n", - length-headerSize); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } - - outData32=(int32_t *)((char *)outData+headerSize); - - /* copy everything for inaccessible data (padding) */ - if(inData32!=outData32) { - uprv_memcpy(outData32, inData32, 4*dataIndexes[UPROPS_RESERVED_INDEX]); - } - - /* swap the indexes[16] */ - ds->swapArray32(ds, inData32, 4*UPROPS_INDEX_COUNT, outData32, pErrorCode); - - /* - * swap the main properties UTrie - * PT serialized properties trie, see utrie.h (byte size: 4*(i0-16)) - */ - utrie_swap(ds, - inData32+UPROPS_INDEX_COUNT, - 4*(dataIndexes[UPROPS_PROPS32_INDEX]-UPROPS_INDEX_COUNT), - outData32+UPROPS_INDEX_COUNT, - pErrorCode); - - /* - * swap the properties and exceptions words - * P const uint32_t props32[i1-i0]; - * E const uint32_t exceptions[i2-i1]; - */ - ds->swapArray32(ds, - inData32+dataIndexes[UPROPS_PROPS32_INDEX], - 4*(dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX]-dataIndexes[UPROPS_PROPS32_INDEX]), - outData32+dataIndexes[UPROPS_PROPS32_INDEX], - pErrorCode); - - /* - * swap the UChars - * U const UChar uchars[2*(i3-i2)]; - */ - ds->swapArray16(ds, - inData32+dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX], - 4*(dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX]-dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX]), - outData32+dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX], - pErrorCode); - - /* - * swap the additional UTrie - * i3 additionalTrieIndex; -- 32-bit unit index to the additional trie for more properties - */ - utrie_swap(ds, - inData32+dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX], - 4*(dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX]-dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX]), - outData32+dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX], - pErrorCode); +/* constants and macros for access to the data ------------------------------ */ - /* - * swap the properties vectors - * PV const uint32_t propsVectors[(i6-i4)/i5][i5]==uint32_t propsVectors[i6-i4]; - */ - ds->swapArray32(ds, - inData32+dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX], - 4*(dataIndexes[UPROPS_RESERVED_INDEX]-dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX]), - outData32+dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX], - pErrorCode); - } +/* getting a uint32_t properties word from the data */ +#if UCHAR_HARDCODE_DATA - /* i6 reservedItemIndex; -- 32-bit unit index to the top of the properties vectors table */ - return headerSize+4*dataIndexes[UPROPS_RESERVED_INDEX]; -} +#define GET_PROPS(c, result) UTRIE_GET16(&propsTrie, c, result); -/* constants and macros for access to the data ------------------------------ */ +#else -/* getting a uint32_t properties word from the data */ #define HAVE_DATA (havePropsData>0 || loadPropsData()>0) -#define VALIDATE(c) (((uint32_t)(c))<=0x10ffff && HAVE_DATA) #define GET_PROPS_UNSAFE(c, result) \ - UTRIE_GET16(&propsTrie, c, result); \ - (result)=props32Table[(result)] + UTRIE_GET16(&propsTrie, c, result); #define GET_PROPS(c, result) \ if(HAVE_DATA) { \ GET_PROPS_UNSAFE(c, result); \ @@ -371,44 +239,14 @@ uprops_swap(const UDataSwapper *ds, (result)=0; \ } -/* finding an exception value */ -#define HAVE_EXCEPTION_VALUE(flags, index) ((flags)&(1UL<<(index))) - -/* number of bits in an 8-bit integer value */ -#define EXC_GROUP 8 -static const uint8_t flagsOffset[256]={ - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 -}; - -#define ADD_EXCEPTION_OFFSET(flags, index, offset) { \ - if((index)>=EXC_GROUP) { \ - (offset)+=flagsOffset[(flags)&((1<>=EXC_GROUP; \ - (index)-=EXC_GROUP; \ - } \ - (offset)+=flagsOffset[(flags)&((1<<(index))-1)]; \ -} +#endif U_CFUNC UBool uprv_haveProperties(UErrorCode *pErrorCode) { if(U_FAILURE(*pErrorCode)) { return FALSE; } +#if !UCHAR_HARDCODE_DATA if(havePropsData==0) { uprv_loadPropsData(pErrorCode); } @@ -416,6 +254,7 @@ uprv_haveProperties(UErrorCode *pErrorCode) { *pErrorCode=dataErrorCode; return FALSE; } +#endif return TRUE; } @@ -437,8 +276,7 @@ struct _EnumTypeCallback { static uint32_t U_CALLCONV _enumTypeValue(const void *context, uint32_t value) { - /* access the general category from the 32-bit properties, and those from the 16-bit trie value */ - return GET_CATEGORY(props32Table[value]); + return GET_CATEGORY(value); } static UBool U_CALLCONV @@ -453,7 +291,11 @@ U_CAPI void U_EXPORT2 u_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context) { struct _EnumTypeCallback callback; - if(enumRange==NULL || !HAVE_DATA) { + if(enumRange==NULL +#if !UCHAR_HARDCODE_DATA + || !HAVE_DATA +#endif + ) { return; } @@ -523,7 +365,7 @@ u_isUAlphabetic(UChar32 c) { return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_ALPHABETIC))!=0; } -/* Checks if ch is a letter or a decimal digit */ +/* Checks if c is a letter or a decimal digit */ U_CAPI UBool U_EXPORT2 u_isalnum(UChar32 c) { uint32_t props; @@ -531,6 +373,15 @@ u_isalnum(UChar32 c) { return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_ND_MASK))!=0); } +/** + * Checks if c is alphabetic, or a decimal digit; implements UCHAR_POSIX_ALNUM. + * @internal + */ +U_CFUNC UBool +u_isalnumPOSIX(UChar32 c) { + return (UBool)(u_isUAlphabetic(c) || u_isdigit(c)); +} + /* Checks if ch is a unicode character with assigned character type.*/ U_CAPI UBool U_EXPORT2 u_isdefined(UChar32 c) { @@ -596,8 +447,10 @@ u_isblank(UChar32 c) { if((uint32_t)c<=0x9f) { return c==9 || c==0x20; /* TAB or SPACE */ } else { - /* White_Space but not LS (Zl) or PS (Zp) */ - return u_isUWhiteSpace(c) && ((c&0xfffffffe)!=0x2028); + /* Zs */ + uint32_t props; + GET_PROPS(c, props); + return (UBool)(GET_CATEGORY(props)==U_SPACE_SEPARATOR); } } @@ -615,6 +468,22 @@ u_isprint(UChar32 c) { return (UBool)((CAT_MASK(props)&U_GC_C_MASK)==0); } +/** + * Checks if c is in \p{graph}\p{blank} - \p{cntrl}. + * Implements UCHAR_POSIX_PRINT. + * @internal + */ +U_CFUNC UBool +u_isprintPOSIX(UChar32 c) { + uint32_t props; + GET_PROPS(c, props); + /* + * The only cntrl character in graph+blank is TAB (in blank). + * Here we implement (blank-TAB)=Zs instead of calling u_isblank(). + */ + return (UBool)((GET_CATEGORY(props)==U_SPACE_SEPARATOR) || u_isgraphPOSIX(c)); +} + U_CAPI UBool U_EXPORT2 u_isgraph(UChar32 c) { uint32_t props; @@ -625,6 +494,24 @@ u_isgraph(UChar32 c) { ==0); } +/** + * Checks if c is in + * [^\p{space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}] + * with space=\p{Whitespace} and Control=Cc. + * Implements UCHAR_POSIX_GRAPH. + * @internal + */ +U_CFUNC UBool +u_isgraphPOSIX(UChar32 c) { + uint32_t props; + GET_PROPS(c, props); + /* \p{space}\p{gc=Control} == \p{gc=Z}\p{Control} */ + /* comparing ==0 returns FALSE for the categories mentioned */ + return (UBool)((CAT_MASK(props)& + (U_GC_CC_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK)) + ==0); +} + U_CAPI UBool U_EXPORT2 u_ispunct(UChar32 c) { uint32_t props; @@ -695,155 +582,87 @@ u_isJavaIDPart(UChar32 c) { U_CAPI int32_t U_EXPORT2 u_charDigitValue(UChar32 c) { - uint32_t props, numericType; + uint32_t props; GET_PROPS(c, props); - numericType=GET_NUMERIC_TYPE(props); - if(numericType==1) { - if(!PROPS_VALUE_IS_EXCEPTION(props)) { - return GET_SIGNED_VALUE(props); - } else { - const uint32_t *pe=GET_EXCEPTIONS(props); - uint32_t firstExceptionValue=*pe; - if(HAVE_EXCEPTION_VALUE(firstExceptionValue, EXC_NUMERIC_VALUE)) { - int i=EXC_NUMERIC_VALUE; - ++pe; - ADD_EXCEPTION_OFFSET(firstExceptionValue, i, pe); - return (int32_t)*pe; - } - } + if(GET_NUMERIC_TYPE(props)==1) { + return GET_NUMERIC_VALUE(props); + } else { + return -1; } - - return -1; } U_CAPI double U_EXPORT2 u_getNumericValue(UChar32 c) { - uint32_t props, numericType; + uint32_t props, numericType, numericValue; GET_PROPS(c, props); numericType=GET_NUMERIC_TYPE(props); - if(numericType==0 || numericType>=(int32_t)U_NT_COUNT) { + if(numericType==0 || numericType>=UPROPS_NT_COUNT) { return U_NO_NUMERIC_VALUE; - } else { - if(!PROPS_VALUE_IS_EXCEPTION(props)) { - return GET_SIGNED_VALUE(props); - } else { - const uint32_t *pe; - uint32_t firstExceptionValue; - - double numValue; - uint32_t denominator; - - pe=GET_EXCEPTIONS(props); - firstExceptionValue=*pe++; - - if(HAVE_EXCEPTION_VALUE(firstExceptionValue, EXC_NUMERIC_VALUE)) { - uint32_t flags=firstExceptionValue; - int i=EXC_NUMERIC_VALUE; - const uint32_t *p=pe; - int32_t numerator; - - ADD_EXCEPTION_OFFSET(flags, i, p); - numerator=(int32_t)*p; - - /* - * There are special values for huge numbers that are powers of ten. - * genprops/store.c documents: - * if numericValue=0x7fffff00+x then numericValue=10^x - */ - if(numerator<0x7fffff00) { - numValue=(double)numerator; - } else { - numerator&=0xff; - - /* 10^x without math.h */ - numValue=1.; - while(numerator>=4) { - numValue*=10000.; - numerator-=4; - } - switch(numerator) { - case 3: - numValue*=1000.; - break; - case 2: - numValue*=100.; - break; - case 1: - numValue*=10.; - break; - case 0: - default: - break; - } - } - } else { - numValue=0.; - } - if(HAVE_EXCEPTION_VALUE(firstExceptionValue, EXC_DENOMINATOR_VALUE)) { - uint32_t flags=firstExceptionValue; - int i=EXC_DENOMINATOR_VALUE; - const uint32_t *p=pe; - ADD_EXCEPTION_OFFSET(flags, i, p); - denominator=*p; - } else { - denominator=0; - } - - switch(firstExceptionValue&((1UL<0) */ - default: - return U_NO_NUMERIC_VALUE; - } - } } -} -/* Gets the character's linguistic directionality.*/ -U_CAPI UCharDirection U_EXPORT2 -u_charDirection(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UCharDirection)GET_BIDI_CLASS(props); -} + numericValue=GET_NUMERIC_VALUE(props); -U_CAPI UBool U_EXPORT2 -u_isMirrored(UChar32 c) { - uint32_t props; - GET_PROPS(c, props); - return (UBool)(props&(1UL<>UPROPS_FRACTION_NUM_SHIFT; + denominator=(numericValue&UPROPS_FRACTION_DEN_MASK)+UPROPS_FRACTION_DEN_OFFSET; + + if(numerator==0) { + numerator=-1; + } + return (double)numerator/(double)denominator; + } else /* numericType==UPROPS_NT_LARGE */ { + /* large value with exponent */ + double numValue; + int32_t mant, exp; + + mant=(int32_t)numericValue>>UPROPS_LARGE_MANT_SHIFT; + exp=(int32_t)numericValue&UPROPS_LARGE_EXP_MASK; + if(mant==0) { + mant=1; + exp+=UPROPS_LARGE_EXP_OFFSET_EXTRA; + } else if(mant>9) { + return U_NO_NUMERIC_VALUE; /* reserved mantissa value */ } else { - return c; + exp+=UPROPS_LARGE_EXP_OFFSET; } + + numValue=mant; + + /* multiply by 10^exp without math.h */ + while(exp>=4) { + numValue*=10000.; + exp-=4; + } + switch(exp) { + case 3: + numValue*=1000.; + break; + case 2: + numValue*=100.; + break; + case 1: + numValue*=10.; + break; + case 0: + default: + break; + } + + return numValue; } } +/* ICU 3.4: bidi/shaping properties moved to ubidi_props.c */ + /* ICU 2.1: u_getCombiningClass() moved to unorm.cpp */ U_CAPI int32_t U_EXPORT2 @@ -885,11 +704,7 @@ u_forDigit(int32_t digit, int8_t radix) { U_CAPI void U_EXPORT2 u_getUnicodeVersion(UVersionInfo versionArray) { if(versionArray!=NULL) { - if(HAVE_DATA) { - uprv_memcpy(versionArray, dataVersion, U_MAX_VERSION_LENGTH); - } else { - uprv_memset(versionArray, 0, U_MAX_VERSION_LENGTH); - } + uprv_memcpy(versionArray, dataVersion, U_MAX_VERSION_LENGTH); } } @@ -901,8 +716,10 @@ u_getUnicodeProperties(UChar32 c, int32_t column) { uint32_t props; GET_PROPS(c, props); return props; - } else if( !HAVE_DATA || countPropsVectors==0 || - (uint32_t)c>0x10ffff || + } else if( +#if !UCHAR_HARDCODE_DATA + !HAVE_DATA || countPropsVectors==0 || +#endif column<0 || column>=propsVectorsColumns ) { return 0; @@ -914,7 +731,9 @@ u_getUnicodeProperties(UChar32 c, int32_t column) { U_CFUNC int32_t uprv_getMaxValues(int32_t column) { +#if !UCHAR_HARDCODE_DATA if(HAVE_DATA) { +#endif switch(column) { case 0: return indexes[UPROPS_MAX_VALUES_INDEX]; @@ -923,9 +742,11 @@ uprv_getMaxValues(int32_t column) { default: return 0; } +#if !UCHAR_HARDCODE_DATA } else { return 0; } +#endif } /* @@ -978,11 +799,11 @@ u_charAge(UChar32 c, UVersionInfo versionArray) { U_CAPI UScriptCode U_EXPORT2 uscript_getScript(UChar32 c, UErrorCode *pErrorCode) { if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; + return USCRIPT_INVALID_CODE; } if((uint32_t)c>0x10ffff) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; + return USCRIPT_INVALID_CODE; } return (UScriptCode)(u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_MASK); @@ -997,7 +818,7 @@ ublock_getCode(UChar32 c) { /* for Hangul_Syllable_Type */ U_CAPI void U_EXPORT2 -uhst_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { +uhst_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { UChar32 c; int32_t value, value2; @@ -1005,10 +826,12 @@ uhst_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { return; } +#if !UCHAR_HARDCODE_DATA if(!HAVE_DATA) { *pErrorCode=dataErrorCode; return; } +#endif /* add code points with hardcoded properties, plus the ones following them */ @@ -1061,7 +884,7 @@ uhst_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { static UBool U_CALLCONV _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint32_t value) { /* add the start code point to the USet */ - USetAdder *sa=(USetAdder *)context; + const USetAdder *sa=(const USetAdder *)context; sa->add(sa->set, start); return TRUE; } @@ -1069,25 +892,28 @@ _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 limit, uint #define USET_ADD_CP_AND_NEXT(sa, cp) sa->add(sa->set, cp); sa->add(sa->set, cp+1) U_CAPI void U_EXPORT2 -uchar_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { +uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { if(U_FAILURE(*pErrorCode)) { return; } +#if !UCHAR_HARDCODE_DATA if(!HAVE_DATA) { *pErrorCode=dataErrorCode; return; } +#endif - /* add the start code point of each same-value range of each trie */ + /* add the start code point of each same-value range of the main trie */ utrie_enum(&propsTrie, NULL, _enumPropertyStartsRange, sa); - utrie_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa); /* add code points with hardcoded properties, plus the ones following them */ + /* add for u_isblank() */ + USET_ADD_CP_AND_NEXT(sa, TAB); + /* add for IS_THAT_CONTROL_SPACE() */ - sa->add(sa->set, TAB); /* range TAB..CR */ - sa->add(sa->set, CR+1); + sa->add(sa->set, CR+1); /* range TAB..CR */ sa->add(sa->set, 0x1c); sa->add(sa->set, 0x1f+1); USET_ADD_CP_AND_NEXT(sa, NL); @@ -1105,23 +931,21 @@ uchar_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { USET_ADD_CP_AND_NEXT(sa, FIGURESP); USET_ADD_CP_AND_NEXT(sa, NNBSP); - /* add for u_charDigitValue() */ - USET_ADD_CP_AND_NEXT(sa, 0x3007); - USET_ADD_CP_AND_NEXT(sa, 0x4e00); - USET_ADD_CP_AND_NEXT(sa, 0x4e8c); - USET_ADD_CP_AND_NEXT(sa, 0x4e09); - USET_ADD_CP_AND_NEXT(sa, 0x56db); - USET_ADD_CP_AND_NEXT(sa, 0x4e94); - USET_ADD_CP_AND_NEXT(sa, 0x516d); - USET_ADD_CP_AND_NEXT(sa, 0x4e03); - USET_ADD_CP_AND_NEXT(sa, 0x516b); - USET_ADD_CP_AND_NEXT(sa, 0x4e5d); - /* add for u_digit() */ sa->add(sa->set, U_a); sa->add(sa->set, U_z+1); sa->add(sa->set, U_A); sa->add(sa->set, U_Z+1); + sa->add(sa->set, U_FW_a); + sa->add(sa->set, U_FW_z+1); + sa->add(sa->set, U_FW_A); + sa->add(sa->set, U_FW_Z+1); + + /* add for u_isxdigit() */ + sa->add(sa->set, U_f+1); + sa->add(sa->set, U_F+1); + sa->add(sa->set, U_FW_f+1); + sa->add(sa->set, U_FW_F+1); /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */ sa->add(sa->set, WJ); /* range WJ..NOMDIG */ @@ -1132,8 +956,24 @@ uchar_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { /* add for UCHAR_GRAPHEME_BASE and others */ USET_ADD_CP_AND_NEXT(sa, CGJ); +} - /* add for UCHAR_JOINING_TYPE */ - sa->add(sa->set, ZWNJ); /* range ZWNJ..ZWJ */ - sa->add(sa->set, ZWJ+1); +U_CAPI void U_EXPORT2 +upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return; + } + +#if !UCHAR_HARDCODE_DATA + if(!HAVE_DATA) { + *pErrorCode=dataErrorCode; + return; + } +#endif + + /* add the start code point of each same-value range of the properties vectors trie */ + if(propsVectorsColumns>0) { + /* if propsVectorsColumns==0 then the properties vectors trie may not be there at all */ + utrie_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa); + } } diff --git a/icuSources/common/uchar_props_data.c b/icuSources/common/uchar_props_data.c new file mode 100644 index 00000000..3dabf335 --- /dev/null +++ b/icuSources/common/uchar_props_data.c @@ -0,0 +1,3772 @@ +/* + * Copyright (C) 1999-2007, International Business Machines + * Corporation and others. All Rights Reserved. + * + * file name: uchar_props_data.c + * + * machine-generated on: 2006-06-13 + * machine-generated on: 2007-03-29 U_DARWIN + */ + +static const UVersionInfo formatVersion={4,0,5,2}; + +static const UVersionInfo dataVersion={5,0,0,0}; + +#ifndef U_DARWIN +static const uint16_t propsTrie_index[13440]={ +#else /* U_DARWIN */ +static const uint16_t propsTrie_index[13612]={ +#endif /* U_DARWIN */ +0x2a8,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0x2e8,0x2ea,0x2f0,0x2f3,0x2fb,0x303,0x30b,0x313, +0x2e8,0x319,0x321,0x325,0x328,0x32e,0x336,0x33e,0x346,0x346,0x346,0x34a,0x352,0x35a,0x35f,0x365, +0x36d,0x371,0x325,0x2e8,0x379,0x2e8,0x381,0x2e8,0x385,0x38a,0x38f,0x397,0x39d,0x3a2,0x3aa,0x3b0, +0x3b8,0x3c0,0x3c8,0x3d0,0x3d5,0x3d5,0x3d8,0x3e0,0x3e8,0x3ed,0x3f3,0x3f8,0x3d5,0x400,0x408,0x40e, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x416,0x418,0x420,0x428,0x430,0x436,0x43e,0x446, +0x44e,0x454,0x45c,0x464,0x46c,0x472,0x47a,0x482,0x430,0x48a,0x492,0x49a,0x4a2,0x4aa,0x4b2,0x4b9, +0x4c1,0x4c7,0x4cf,0x4d7,0x4df,0x4e5,0x4ed,0x4f5,0x4df,0x4fd,0x505,0x4d7,0x50d,0x514,0x51c,0x524, +0x52c,0x530,0x538,0x2a0,0x540,0x548,0x550,0x2a0,0x558,0x560,0x568,0x56e,0x576,0x57d,0x585,0x2a0, +0x3d5,0x58d,0x595,0x2a0,0x2a0,0x36d,0x59d,0x5a1,0x3d5,0x3d5,0x5a9,0x3d5,0x3d5,0x5b1,0x3d5,0x5b3, +0x3d5,0x3d5,0x5bb,0x3d5,0x5c3,0x5c7,0x5cf,0x3d5,0x5d5,0x3d5,0x5db,0x5e3,0x5eb,0x3d5,0x3d5,0x5f3, +0x52c,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x5fb,0x603,0x3d5,0x3d5,0x60b,0x613,0x61b,0x623,0x62b,0x3d5,0x633,0x63b,0x643, +0x64b,0x3d5,0x653,0x655,0x3d5,0x65d,0x2a0,0x2a0,0x665,0x66d,0x675,0x67a,0x3d5,0x682,0x68a,0x692, +0x69a,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x6a2,0x6a5,0x6ad,0x6b5,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x325,0x6bd,0x6c0,0x6c8,0x6cf,0x6c0,0x6d7,0x6da, +0x2e8,0x2e8,0x2e8,0x2e8,0x6e2,0x2e8,0x2e8,0x6ea,0x6f2,0x6fa,0x702,0x70a,0x712,0x716,0x71e,0x726, +0x72e,0x736,0x73e,0x746,0x74e,0x756,0x75c,0x764,0x76c,0x774,0x77c,0x784,0x78c,0x794,0x799,0x79f, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7ac,0x7b4,0x692,0x7b7,0x7bf,0x7c6,0x7cb,0x7d3, +0x692,0x7db,0x7e3,0x7eb,0x7ee,0x692,0x692,0x7f5,0x692,0x692,0x692,0x692,0x692,0x7fd,0x805,0x807, +0x692,0x692,0x692,0x80f,0x813,0x81b,0x2a0,0x2a0,0x823,0x829,0x82e,0x836,0x83e,0x844,0x84c,0x853, +0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x7a4,0x7a4,0x7a4,0x7a4,0x85b,0x7a4,0x862,0x869, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x871,0x879,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x36d,0x881,0x885,0x88d,0x2e8,0x2e8,0x2e8,0x895,0x325,0x89d,0x3d5,0x8a4,0x8ac,0x8b4,0x8b4,0x2a0, +0x8bc,0x2a0,0x2a0,0x2a0,0x8c4,0x692,0x692,0x8cb,0x692,0x692,0x692,0x692,0x692,0x692,0x8d3,0x8d9, +0x8e1,0x8e9,0x52c,0x3d5,0x8f1,0x8f9,0x3d5,0x8fb,0x52b,0x903,0x3d5,0x3d5,0x908,0x655,0x90e,0x661, +0x916,0x91e,0x925,0x692,0x91e,0x92d,0x692,0x916,0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x692, +#ifndef U_DARWIN +0xc64,0x3d5,0x3d5,0x3d5,0xbfc,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0xc8f,0x3d5,0x3d5,0x3d5,0xc27,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0xc6a,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc84,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0xc95,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcaf,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbb3,0x692,0x692, +0xbdc,0x3d5,0xc99,0x3d5,0xc01,0xcde,0xcb1,0xc17,0xc62,0x3d5,0x3d5,0xccd,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xce6,0x3d5,0xced,0xc07,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcb9,0x3d5,0x3d5,0x3d5,0xc1f,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbcb,0x692,0x692, +0xc07,0x3d5,0xcc4,0x3d5,0xc2c,0xd09,0xcdc,0xc42,0xc8d,0x3d5,0x3d5,0xcf8,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xd11,0x3d5,0xd18,0xc32,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xce4,0x3d5,0x3d5,0x3d5,0xc4a,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc42,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbe0,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc6d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc0b,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0xbe7,0x3d5,0x3d5,0x3d5,0xca1,0xbee,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0xc12,0x3d5,0x3d5,0x3d5,0xccc,0xc19,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcbd,0x3d5,0x3d5,0xc95,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xce8,0x3d5,0x3d5,0xcc0,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc88,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcb3,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xca9,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xcd4,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0xcd2,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0xcfd,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0xc49,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0xc74,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0xcda,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0xd05,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc0c,0x3d5,0x3d5,0x3d5,0xc11,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc37,0x3d5,0x3d5,0x3d5,0xc3c,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0xc79,0xc7d,0x3d5,0x3d5,0x3d5,0xbd4,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0xca4,0xca8,0x3d5,0x3d5,0x3d5,0xbff,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x654,0x2a0,0x2a0, +0x935,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x93b,0x692,0x7db,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x943,0x94b,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x953,0x95b,0x3d5,0x963,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbbb,0x2a0,0x2a0, +0xcf5,0xcf8,0xd00,0xd07,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xd0f,0x2a0,0xd17,0xd18,0xd17,0xd18, +0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3, +0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x96b,0x3d5,0x971,0x3d5,0x3d5,0x5b3,0x2a0,0x979,0x981,0x989,0x3d5,0x3d5,0x3f7,0x991,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x996,0x661,0x3d5,0x99e,0x3d5,0x9a4,0x9a8, +0x9b0,0x9b8,0x9bf,0x9c7,0x3d5,0x3d5,0x3d5,0x9cd,0x9d5,0x2b8,0x9dd,0x9e5,0x9ea,0x9f2,0x9fa,0xa02, +0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3, +0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3,0xbc3, +0xa0a,0xa11,0xa19,0x2a0,0x3d5,0x3d5,0x3d5,0xa21,0xa29,0xa31,0xa39,0xa41,0xa48,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x9f2,0xa50,0xa58,0x2a0,0xa60,0x3d5,0xa68,0x2a0, +0x36d,0xa70,0xa74,0x3d5,0x417,0xa7c,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbd3,0x2a0,0x2a0, +0xd20,0xd23,0xd2b,0xd32,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xd3a,0x2a0,0xd42,0xd43,0xd42,0xd43, +0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb, +0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbeb,0x692,0x692,0xbef,0x96b,0x973,0x97b,0x692,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x983,0x3d5,0x989,0x3d5,0x3d5,0x5b3,0x2a0,0x991,0x999,0x9a1,0x3d5,0x3d5,0x3f7,0x9a9,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x9ae,0x661,0x3d5,0x9b6,0x3d5,0x9bc,0x9c0, +0x9c8,0x9d0,0x9d7,0x9df,0x3d5,0x3d5,0x3d5,0x9e5,0x9ed,0x2b8,0x9f5,0x9fd,0xa02,0xa0a,0xa12,0xa1a, +0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb, +0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb,0xbdb, +0xa22,0xa29,0xa31,0x2a0,0x3d5,0x3d5,0x3d5,0xa39,0xa41,0xa49,0xa51,0xa59,0xa60,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xa0a,0xa68,0xa70,0x2a0,0xa78,0x3d5,0xa80,0x2a0, +0x36d,0xa88,0xa8c,0x3d5,0x417,0xa94,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0xa84,0xa87,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xa8f,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0xa97,0xa9e,0xaa6,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0xa9c,0xa9f,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xaa7,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0xaaf,0xab6,0xabe,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xaae,0x2a0,0x2a0,0x2a0,0x2a0, +0xab6,0xabe,0xac6,0xace,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xac6,0x2a0,0x2a0,0x2a0,0x2a0, +0xace,0xad6,0xade,0xae6,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x8d3,0x692,0xad6,0x692,0xadd,0xae5,0xaeb,0xaef,0x2a0, +0x692,0x692,0xaf7,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x692,0x692,0xaff,0xb07,0x2a0,0x2a0,0x2a0,0x2a0, +0xb0f,0xb16,0xb1b,0xb21,0xb29,0xb31,0xb39,0xb13,0xb41,0xb49,0xb51,0xb56,0xb28,0xb0f,0xb16,0xb12, +0xb21,0xb5e,0xb10,0xb61,0xb13,0xb69,0xb71,0xb79,0xb80,0xb6c,0xb74,0xb7c,0xb83,0xb6f,0xb8b,0xb93, +0xc90,0x3d5,0x3d5,0xc50,0x3d5,0x3d5,0x3d5,0xc58,0x3d5,0xc72,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x692,0x692,0x692,0x692,0x692,0x692,0x692,0x8d3,0x692,0xaee,0x692,0xaf5,0xafd,0xb03,0xb07,0x2a0, +0x692,0x692,0xb0f,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x692,0x692,0xb17,0xb1f,0x2a0,0x2a0,0x2a0,0x2a0, +0xb27,0xb2e,0xb33,0xb39,0xb41,0xb49,0xb51,0xb2b,0xb59,0xb61,0xb69,0xb6e,0xb40,0xb27,0xb2e,0xb2a, +0xb39,0xb76,0xb28,0xb79,0xb2b,0xb81,0xb89,0xb91,0xb98,0xb84,0xb8c,0xb94,0xb9b,0xb87,0xba3,0xbab, +0xcbb,0x3d5,0x3d5,0xc7b,0x3d5,0x3d5,0x3d5,0xc83,0x3d5,0xc9d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xbf4,0x3d5,0x3d5,0xcc5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc25,0xc2d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc1f,0x3d5,0x3d5,0xcf0,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc50,0xc58,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc11,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc34,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc3c,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc5f,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc3b,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0xc66,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#ifndef U_DARWIN +0x3d5,0x3d5,0x3d5,0xc5d,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#else /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0xc88,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +#endif /* U_DARWIN */ +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x8ac,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x417,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0xb9b,0xba3,0xba3,0xba3,0x2a0,0x2a0,0x2a0,0x2a0,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xbab, +#else /* U_DARWIN */ +0xbb3,0xbbb,0xbbb,0xbbb,0x2a0,0x2a0,0x2a0,0x2a0,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xbc3, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb, +0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcb,0xbcc, +#else /* U_DARWIN */ +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3, +0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbe3,0xbf7, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,0x18,0x18,0x18,0x17, +0x17,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0x14,0x17,0x15,0x1a,0x16, +0x1a,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0xc,0x17,0x19,0x19,0x19,0x19,0x1b,0x1b,0x1a,0x1b,2,0x1c,0x18,0x10,0x1b,0x1a, +0x1b,0x18,0x24b,0x34b,0x1a,2,0x1b,0x17,0x1a,0x14b,2,0x1d,0xa8b,0x88b,0x1a8b,0x17, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0x18,1,1,1,1,1,1,1,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,2,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,1,2,1,2,1,2,2,2,1,1,2, +1,2,1,1,2,1,1,1,2,2,1,1,1,1,2,1, +1,2,1,1,1,2,2,2,1,1,2,1,1,2,1,2, +1,2,1,1,2,1,2,2,1,2,1,1,2,1,1,1, +2,1,2,1,1,2,2,5,1,2,2,2,5,5,5,5, +1,3,2,1,3,2,1,3,2,1,2,1,2,1,2,1, +2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,2,1,3,2, +1,2,1,1,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,2,2,2,2,2,2,1,1, +2,1,1,2,2,1,2,1,1,1,1,2,1,2,1,2, +1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,5,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,0x1a,0x1a,4,4, +4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,0,0,0,0,0x1a,0x1a,0,0, +0,0,4,2,2,2,0x17,0,0,0,0,0,0x1a,0x1a,1,0x17, +1,1,1,0,1,0,1,1,2,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,0,2,2,1,1, +1,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,2,2,2,2,1,2,0x18,1,2,1,1,2, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,2,0x1b,6,6,6,6,0,7,7,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,1,2,1,2,1,2,1,2,1,2,1, +2,1,2,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0,0,4,0x17,0x17,0x17,0x17,0x17,0x17,0,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,0,0x17,0x13,0, +0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,0x17,6,0x17,6,6,0x17,6,6,0x17,6, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0, +5,5,5,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0, +0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0x19,0x17,0x17,0x1b,0x1b, +6,6,6,6,6,6,0,0,0,0,0,0x17,0,0,0x17,0x17, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0, +4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,0x17,0x17,5,5, +6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x17,5,6,6,6,6,6,6,6,0x10,7,6, +6,6,6,6,6,4,4,6,6,0x1b,6,6,6,6,5,5, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,5,0x1b,0x1b,5, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0x10, +5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,0,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6, +6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,6,6,6,6,6,6,6,6,6,4,4,0x1b,0x17, +0x17,0x17,4,0,0,0,0,0,0,6,6,8,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,6,5,8,8, +8,6,6,6,6,6,6,6,6,8,8,8,8,6,0,0, +5,6,6,6,6,0,0,0,5,5,5,5,5,5,5,5, +5,5,6,6,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929, +0x17,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5, +0,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5, +5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,5,5,5,5,0,5,0,0,0,5,5, +5,5,0,0,6,5,8,8,8,6,6,6,6,0,0,8, +8,0,0,8,8,6,5,0,0,0,0,0,0,0,0,8, +0,0,0,0,5,5,0,5,5,5,6,6,0,0,0x29,0x129, +0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,5,5,0x19,0x19,0x16b,0x26b,0x36b,0x46b, +0xb,0x106b,0x1b,0,0,0,0,0,0,6,6,8,0,5,5,5, +5,5,5,0,0,0,0,5,5,0,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, +5,0,5,5,0,5,5,0,5,5,0,0,6,0,8,8, +8,6,6,0,0,0,0,6,6,0,0,6,6,6,0,0, +0,0,0,0,0,0,0,0,0,5,5,5,5,0,5,0, +0,0,0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929, +6,6,5,5,5,0,0,0,0,0,0,0,0,0,0,0, +0,6,6,8,0,5,5,5,5,5,5,5,5,5,0,5, +5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5, +5,5,0,0,6,5,8,8,8,6,6,6,6,6,0,6, +6,8,0,8,8,6,0,0,5,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,6,6,0,0,0x29,0x129, +0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0x19,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5, +5,5,0,0,6,5,8,6,8,6,6,6,0,0,0,8, +8,0,0,8,8,6,0,0,0,0,0,0,0,0,6,8, +0,0,0,0,5,5,0,5,5,5,0,0,0,0,0x29,0x129, +0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x1b,5,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,5,0,5,5,5, +5,5,5,0,0,0,5,5,5,0,5,5,5,5,0,0, +0,5,5,0,5,0,5,5,0,0,0,5,5,0,0,0, +5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,0,0,8,8,6,8,8,0,0,0,8,8, +8,0,8,8,8,6,0,0,0,0,0,0,0,0,0,8, +0,0,0,0,0,0,0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529, +0x629,0x729,0x829,0x929,0xa6b,0x646b,0x11ab,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0, +0,0,0,0,0,8,8,8,0,5,5,5,5,5,5,5, +5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +0,5,5,5,5,5,0,0,0,0,6,6,6,8,8,8, +8,0,6,6,6,0,6,6,6,6,0,0,0,0,0,0, +0,6,6,0,0,0,0,0,0,0,0,0,5,5,0,0, +0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8, +0,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,5,5,5,0,5,5,5,5,5,0,0, +6,5,8,6,8,8,8,8,8,0,6,8,8,0,8,8, +6,6,0,0,0,0,0,0,0,8,8,0,0,0,0,0, +0,0,5,0,5,5,6,6,0,0,0x29,0x129,0x229,0x329,0x429,0x529, +0x629,0x729,0x829,0x929,0,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,0,8,8,8,6,6,6,0,0,8,8,8,0,8,8, +8,6,0,0,0,0,0,0,0,0,0,8,0,0,0,0, +0,0,0,0,0,0,8,8,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,0,5,0,0, +5,5,5,5,5,5,5,0,0,0,6,0,0,0,0,8, +8,8,6,6,6,0,6,0,8,8,8,8,8,8,8,8, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,8,8,0x17,0,0,0,0,0,0,0,0,0,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,6,5,5,6,6,6,6,6,6,6,0,0,0,0,0x19, +5,5,5,5,5,5,4,6,6,6,6,6,6,6,6,0x17, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17,0,0,0,0, +0,5,5,0,5,0,0,5,5,0,5,0,0,5,0,0, +0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5, +0,5,5,5,0,5,0,5,0,0,5,5,0,5,5,5, +5,6,5,5,6,6,6,6,6,6,0,6,6,5,0,0, +5,5,5,5,5,0,4,0,6,6,6,6,6,6,0,0, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,5,5,0,0, +5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x88b,0x188b,0x288b,0x388b,0x488b,0x588b, +0x688b,0x788b,0x888b,0x8b,0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8, +5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,0,0,0,0,0,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,8,6,6,6,6,6,0x17,6,6, +5,5,5,5,0,0,0,0,6,6,6,6,6,6,6,6, +0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0,0,0x1b,0x17,0x17,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,0,5,5,5,5,5,0,5,5,0, +8,6,6,6,6,8,6,0,0,0,6,6,8,6,0,0, +0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17, +0x17,0x17,0x17,0x17,5,5,5,5,5,5,8,8,6,6,0,0, +0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17, +4,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,0,0,5,5,5,5,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,0,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,0,0,5,5,5,5,5,5,5,0,5,0,5,5, +5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,6,0x1b,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x146b, +0x1e6b,0x286b,0x326b,0x3c6b,0x466b,0x506b,0x5a6b,0x646b,0x12ab,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x17,0x17,5,5,5,5,5, +5,5,5,0,0,0,0,0,0,0,0,0,0xc,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x14,0x15,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,0x17,0x17,0x17,0x116a,0x126a,0x136a,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,5,6,6, +6,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, +6,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,0,6,6, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0x10,0x10,8,6,6,6,6,6,6,6,8,8,8,8,8,8, +8,8,6,8,8,6,6,6,6,6,6,6,6,6,6,6, +0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,0x29,0x129,0x229,0x329, +0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0,0x6b,0x16b,0x26b,0x36b, +0x46b,0x56b,0x66b,0x76b,0x86b,0x96b,0,0,0,0,0,0,0x17,0x17,0x17,0x17, +0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0xc,0,0x29,0x129,0x229,0x329, +0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0,5,5,5,4, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0,6,6,6,8,8,8,8,6,6,8,8,8, +0,0,0,0,8,8,6,8,8,8,8,8,8,6,6,6, +0,0,0,0,0x1b,0,0,0,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529, +0x629,0x729,0x829,0x929,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,0,0,0,0,0,0,8,8,8,8,8,8,8,8, +8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,5, +8,8,0,0,0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729, +0x829,0x929,0,0,0,0,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, +6,8,8,8,0,0,0x17,0x17,6,6,6,6,8,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,8,6,6,6,6,6,8, +6,8,8,8,8,8,6,8,8,5,5,5,5,5,5,5, +0,0,0,0,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6, +6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,4,4,4,4,4,6,6,6,6, +6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,6,6,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,2, +2,2,2,2,0,0,0,0,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0, +1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0, +1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2, +0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2, +3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2, +3,3,3,3,3,3,3,3,2,2,2,2,2,0,2,2, +1,1,1,1,3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2, +1,1,1,1,3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2, +1,1,1,1,0,0x1a,0x1a,0x1a,2,2,2,2,2,2,2,2, +1,1,1,1,1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2, +1,1,1,1,3,0x1a,0x1a,0,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc, +0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17, +0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0,0,0,0, +0,0,0x10,0x10,0x10,0x10,0x10,0x10,0x4b,2,0,0,0x44b,0x54b,0x64b,0x74b, +0x84b,0x94b,0x18,0x18,0x18,0x14,0x15,2,0x4b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b, +0x84b,0x94b,0x18,0x18,0x18,0x14,0x15,0,4,4,4,4,4,0,0,0, +0,0,0,0,0,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, +0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7, +7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2, +1,1,1,2,0x1b,1,0x1b,0x1b,0x1b,1,1,1,1,1,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2, +1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,2,2,1,1, +0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0, +0,0,0,0x98b,0x118b,0xb8b,0x138b,0x1b8b,0x238b,0xc8b,0x2c8b,0xe8b,0x1e8b,0x2e8b,0x3e8b,0x16b, +0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0xa6a,0xb6a,0xc6a,0x326a,0x646a,0x50aa,0x11aa, +0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0xa6a,0xb6a,0xc6a,0x326a,0x646a,0x50aa,0x11aa, +0x11aa,0x51aa,0x12aa,1,2,0,0,0,0,0,0,0,0,0,0,0, +0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x14b,0x24b,0x34b,0x44b, +0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0xb6b,0xc6b,0xd6b,0xe6b,0xf6b,0x106b,0x116b,0x126b,0x136b,0x146b, +0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0xb6b,0xc6b,0xd6b,0xe6b,0xf6b,0x106b, +0x116b,0x126b,0x136b,0x146b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x4b,0xb6b, +0xc6b,0xd6b,0xe6b,0xf6b,0x106b,0x116b,0x126b,0x136b,0x146b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b, +0x84b,0x94b,0xa6b,0x4b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b, +0x1b,0,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0x1b,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14b,0x24b, +0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b, +0x94b,0xa6b,0x14b,0x24b,0x34b,0x44b,0x54b,0x64b,0x74b,0x84b,0x94b,0xa6b,0x1b,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x18,0x18,0,0,0,0,0, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0,0,0,0,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14, +0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, +0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,0,1,2,1,1,1,2,2,1,2,1,2,1, +2,0,0,0,0,0,0,0,2,1,2,2,0,0,0,0, +0,0,0,0,1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x17,0x17,0x17, +0x17,0x88b,0x17,0x17,2,2,2,2,2,2,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, +0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0,0,0,0,0x1c,0x1d,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0xc,0x17,0x17,0x17,0x1b,4,5,0x6a,0x14,0x15,0x14,0x15, +0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, +0x13,0x14,0x15,0x15,0x1b,0x16a,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,6,6, +6,6,6,6,0x13,4,4,4,4,4,0x1b,0x1b,0xa6a,0x146a,0x1e6a,4, +5,0x17,0x1b,0x1b,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a, +0x1a,4,4,5,0x13,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x17,4,4,4,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0x1b,0x1b,0x16b,0x26b,0x36b,0x46b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x16b,0x26b,0x36b,0x46b,0x56b,0x66b,0x76b,0x86b, +0x96b,0xa6b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0,0,0,0,0x1b,0x156b,0x166b,0x176b,0x186b,0x196b,0x1a6b,0x1b6b,0x1c6b,0x1d6b,0x1e6b,0x1f6b, +0x206b,0x216b,0x226b,0x236b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x246b,0x256b,0x266b,0x276b,0x286b,0x296b,0x2a6b,0x2b6b,0x2c6b,0x2d6b,0x2e6b, +0x2f6b,0x306b,0x316b,0x326b,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,4,4,4,4,0,0,0,0,0,0x1a,0x1a,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,8,5, +5,5,6,5,5,5,5,6,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, +8,6,6,8,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,5,5,5,5, +#else /* U_DARWIN */ +0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0x1b,0x1b,5,0x19, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,5,5,5,5,5,6,0x19,0x4b,0xd6a,0xe6a, +0xf6a,0xd6a,0xe6a,0xf6a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x15,0x17,0x17,0x17,4,0x13,0x13,0x17,0x18,0x18,0x14,0x15,0x18,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,2,2,2,2,2,2,2,0,0,0,0,0, +0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0, +0,5,6,5,5,5,5,5,5,5,5,5,5,0x18,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5, +5,0,5,0,5,5,0,5,5,0,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0x14,0x15,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,0x19,0x1b,0,0, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0,0,0,0,0, +6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0, +0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, +0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0, +0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13, +0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,5,5,5,5, +5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0x10,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18, +0x17,0x13,0x17,0x17,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x17,0x17, +0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x14, +0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,5,5,5,5, +5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5, +0,0,5,5,5,5,5,5,0,0,5,5,5,5,5,5, +0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0, +0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0,0x10,0x10,0x10,0x1b,0x1b,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0x17,0x17,0x1b,0,0,0,0,0x16b,0x26b,0x36b,0x46b,0x56b, +0x66b,0x76b,0x86b,0x96b,0xa6b,0x146b,0x1e6b,0x286b,0x326b,0x3c6b,0x466b,0x506b,0x5a6b,0x646b,0xc86b,0x30ab, +0x40ab,0x50ab,0x60ab,0x70ab,0x80ab,0x90ab,0x11ab,0x21ab,0x31ab,0x41ab,0x51ab,0x61ab,0x71ab,0x81ab,0x91ab,0x12ab, +0x22ab,0x32ab,0x42ab,0x52ab,0x62ab,0x72ab,0x82ab,0x92ab,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0xa8a,0x88a,0x16a,0x56a,0x326a,0x50aa,0x51aa,0x52aa,0x56a,0xa6a,0x326a,0x646a, +0x50aa,0x11aa,0x51aa,0x56a,0xa6a,0x326a,0x646a,0x50aa,0x11aa,0x12aa,0x52aa,0xa6a,0x16a,0x16a,0x16a,0x26a, +0x26a,0x26a,0x26a,0x56a,0xa6a,0xa6a,0xa6a,0xa6a,0xa6a,0x1e6a,0x326a,0x326a,0x326a,0x326a,0x646a,0x30aa, +0x50aa,0x50aa,0x50aa,0x50aa,0x50aa,0x11aa,0x51aa,0x56a,0x326a,0x88b,0x88b,0x118b,0x1a8b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x6b,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x16b,0x56b,0xa6b,0x326b,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0x5a6a,5,5,5,5,5,5,5,5,0x90aa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17, +5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5, +0x17,0x16a,0x26a,0xa6a,0x146a,0x646a,0,0,0,0,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,0,0,5,0,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,5,5,0,0,0,5,0,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0x16b,0xa6b,0x146b,0x646b,0,0,0,0,0,0x17,5,6,6,6, +0,6,6,0,0,0,0,0,6,6,6,6,5,5,5,5, +0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +6,6,6,0,0,0,0,6,0x14b,0x24b,0x34b,0x44b,0xa6b,0x146b,0x646b,0x11ab, +0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x26a,0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a, +0x36a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0x16a,0x26a,0x36a, +0x46a,0x56a,0x66a,0x76a,0x86a,0x96a,0x16a,0x26a,0x36a,0x46a,0x56a,0x26a,0x36a,0x36a,0x46a,0x56a, +0x66a,0x76a,0x86a,0x96a,0x16a,0x26a,0x36a,0x36a,0x46a,0x56a,0xa,0xa,0x16a,0x26a,0x36a,0x36a, +0x46a,0x56a,0x36a,0x36a,0x46a,0x46a,0x46a,0x46a,0x66a,0x76a,0x76a,0x76a,0x86a,0x86a,0x96a,0x96a, +0x96a,0x96a,0x26a,0x36a,0x46a,0x56a,0x66a,0x16a,0x26a,0x36a,0x46a,0x46a,0x56a,0x56a,0xa,0xa, +0x16a,0x26a,0x98a,0x118a,0x2c8a,0x98a,0x118a,0xe8a,0xa8a,0xc8a,0xa8a,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b, +0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6, +6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,6,6, +6,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0x16b,0x26b,0x36b,0x46b, +0x56b,0x66b,0x76b,0x86b,0x96b,0xa6b,0x146b,0x1e6b,0x286b,0x326b,0x3c6b,0x466b,0x506b,0x5a6b,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, +2,0,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1, +1,0,1,1,1,1,1,1,1,1,2,2,2,2,0,2, +0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,1,1,0,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, +1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,1, +1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1, +1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0x18,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x18, +2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x18, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,0x18,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,0x18, +2,2,2,2,2,2,1,2,0,0,0x29,0x129,0x229,0x329,0x429,0x529, +0x629,0x729,0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x29,0x129, +0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729, +0x829,0x929,0x29,0x129,0x229,0x329,0x429,0x529,0x629,0x729,0x829,0x929,0,0x10,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +#ifndef U_DARWIN +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0x65,5,5,5,5,5,5,5,5,5, +0x165,5,5,0x765,5,5,5,0x12a5,5,0x365,5,5,5,5,5,5, +#else /* U_DARWIN */ +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,0x11,0x11,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,0x165,5,5,5,5,5,5,5,0x165,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,0x65,5,5,5,5,5,5,5,5,5,0x165,5,5,0x765, +5,5,5,0x12a5,5,0x365,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x165,5,5, +5,5,5,5,5,0x165,5,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifdef U_DARWIN +5,5,0x165,5,5,5,5,5,5,5,5,5,5,5,5,5, +0x165,0x265,0x365,5,0x265,5,5,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,0x165,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,0x165,0x265,0x365,5,0x265,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x165,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x265, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,0x265,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,0x265,5,5,5, +5,5,5,5,0x565,5,0x465,5,5,5,5,5,5,5,5,5, +5,0x265,5,0x865,5,0x665,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x265,5,5,5,5,0x265, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +0x265,5,5,5,5,5,5,5,0x565,5,0x465,5,5,5,5,5, +5,5,5,5,5,0x265,5,0x865,5,0x665,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x265,5, +5,5,5,0x265,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x265,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x365,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x365,0x365,0x365, +#else /* U_DARWIN */ +0x265,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +0x365,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x665,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,0x365,0x365,0x365,0x365,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,0x365,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,0x665,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,0x365,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,5,5,0x365,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,0x365,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,5,0x365,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,0x365,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0x365,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x465, +5,5,5,5,5,5,0x465,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,0x465,5,5,5,5,5,5,0x465,5,5,5,5,5, +#else /* U_DARWIN */ +0x465,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x465,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,0x465,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,0x465,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,0x465,5,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,0x565,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x565,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,0x465,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#endif /* not U_DARWIN */ +5,5,5,5,5,0x565,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,0x565,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x565,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,0x665,5,5,5,5,5,0x6465,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,5,5,5,5,0x665,5,5,5,5,5, +0x6465,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x665,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,0x665,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x765,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x765,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,0x765,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,0x765,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0x765,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,0x865,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +0x865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,0x965,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,0x965,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x965,0x1465, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,0x965,0x1465,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x965,5,5,5,5,5, +5,5,5,5,0xa65,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,0x965,5,5,5,5,5,5,5,5,5, +0xa65,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x11a5, +5,0xa65,5,0x11a5,0x1465,0x1e65,5,5,5,5,5,5,0x2865,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,0x11a5,5,0xa65,5,0x11a5,0x1465,0x1e65,5,5,5,5,5,5, +0x2865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0xa65,5, +5,5,5,0x1e65,5,5,5,5,5,5,5,5,0x2865,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x2865,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,0xa65,5,5,5,5,0x1e65,5,5,5,5,5,5,5,5, +0x2865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0x2865,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x6465,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +0x6465,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,0x6465,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x12a5,5,5,5,5,5,5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,0x6465,5,5,5,5,5,5,5,5,5,5,5,5,5, +0x12a5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,5,0x16a5,5,5,5,5,0x16a5,5,5,5, +#else /* U_DARWIN */ +5,5,5,0x16a5,5,5,5,5,0x16a5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,5,5,5,5,5,5,0x1aa5,5,5,5,5,5, +#else /* U_DARWIN */ +5,5,5,5,5,5,0x1aa5,5,5,5,5,5,5,5,5,5, +#endif /* U_DARWIN */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#ifndef U_DARWIN +5,5,5,5,0x820,0x840,0x860,0,0,0,0,0,0x880,0x8a0,0,0, +#else /* U_DARWIN */ +0x820,0x840,0x860,0,0,0,0,0,0x880,0x8a0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0x8c0,0x8e0,0,0,0,0,0,0,0,0,0,0, +0x900,0x920,0x940,0x920,0x920,0x920,0x920,0x920,0x960,0x920,0x980,0x920,0x920,0x920,0x9a0,0x920, +0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x9c0,0x920,0x920,0x920,0x920,0x920,0x920,0x920, +0x920,0x920,0x920,0x920,0x920,0x9e0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xa00,0,0xa20,0,0,0, +#else /* U_DARWIN */ +0x8c0,0x8e0,0,0,0,0,0,0,0,0,0,0,0x900,0x920,0x940,0x920, +0x920,0x920,0x920,0x920,0x960,0x920,0x980,0x920,0x920,0x920,0x9a0,0x920,0x920,0x920,0x920,0x920, +0x920,0x920,0x920,0x920,0x9c0,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920, +0x920,0x9e0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xa00,0,0xa20,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0,0,0,0,0xa40,0xa40,0xa40,0xa40, +#else /* U_DARWIN */ +0,0,0,0,0,0,0,0,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +#endif /* U_DARWIN */ +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +#ifndef U_DARWIN +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa60 +#else /* U_DARWIN */ +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa60 +#endif /* U_DARWIN */ +}; + +static const UTrie propsTrie={ + propsTrie_index, + NULL, + utrie_defaultGetFoldingOffset, + 2688, +#ifndef U_DARWIN + 10752, +#else /* U_DARWIN */ + 10924, +#endif /* U_DARWIN */ + 0, + TRUE +}; + +#ifndef U_DARWIN +static const uint16_t propsVectorsTrie_index[16924]={ +0x2a8,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0xb1b,0xb22,0xb2a,0xb31,0xb39,0xb41,0xb49,0xb51, +0xb58,0xde3,0xb60,0xb64,0xb67,0xb6d,0xa52,0xb75,0xcdc,0xcdc,0xce4,0x340,0x348,0x350,0x358,0xb7d, +0xba9,0xca7,0xb85,0xb8d,0x360,0xb93,0xb9b,0xba1,0x860,0x368,0x36d,0x375,0x37c,0xcbc,0x384,0x38a, +0x392,0x39a,0x3a2,0xbb9,0xbc9,0xbcb,0xbb1,0xbc1,0x3aa,0xdeb,0x3b2,0x91a,0xdf3,0x3ba,0x1016,0x9cc, +#else /* U_DARWIN */ +static const uint16_t propsVectorsTrie_index[17132]={ +0x2a8,0x2b0,0x2b8,0x2c0,0x2c8,0x2d0,0x2d8,0x2e0,0xb2b,0xb32,0xb3a,0xb41,0xb49,0xb51,0xb59,0xb61, +0xb68,0xe17,0xb70,0xb74,0xb77,0xb7d,0xa5a,0xb85,0xd10,0xd10,0xd18,0x340,0x348,0x350,0x358,0xb8d, +0xbb9,0xcd3,0xb95,0xb9d,0x360,0xba3,0xbab,0xbb1,0x860,0x368,0x36d,0x375,0x37c,0xcf0,0x384,0x38a, +0x392,0x39a,0x3a2,0xbc9,0xbd9,0xbdb,0xbc1,0xbd1,0x3aa,0xe1f,0x3b2,0x91a,0xe27,0x3ba,0x104a,0x9cc, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x3c2,0x3c8,0x3d0,0x3d8,0x3e0,0x3e6,0x3ee,0x3f6, +0x3fe,0x404,0x40c,0x414,0x41c,0x422,0x42a,0x432,0x43a,0x440,0x448,0x450,0x458,0x460,0x468,0x46f, +0x477,0x47d,0x485,0x48d,0x495,0x49b,0x4a3,0x4ab,0x4b3,0x4b9,0x4c1,0x4c9,0x4d1,0x4d8,0x4e0,0x4e8, +#ifndef U_DARWIN +0x4f0,0x4f4,0x4fc,0x503,0x50b,0x513,0x51b,0x523,0xdad,0xdb5,0x52b,0x533,0x53b,0x543,0x54b,0x550, +0xe70,0x558,0x560,0x567,0x567,0xbd3,0x56f,0x573,0xd74,0xd74,0x57b,0xd84,0xd85,0x583,0xd7c,0x585, +0xdfb,0xdfd,0x58d,0xdfd,0x595,0x59a,0x5a2,0xe02,0x5a8,0xdfd,0x5ae,0x5b6,0x959,0xe0a,0xe0a,0x5be, +0x5c6,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12,0xe12, +0xe12,0xe12,0xe12,0x5cb,0x5d3,0xe1a,0xe1a,0x5db,0x868,0x870,0x878,0x880,0xe80,0xe78,0x5e3,0x5eb, +0x5f3,0xe22,0xe2a,0x5fb,0xe22,0x2e8,0x2a0,0x2a0,0x897,0x89f,0x8a7,0x8ac,0x100e,0x994,0x99c,0xf5e, +0x922,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x101e,0x1023,0x9d4,0x9dc,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xf7e,0xf66,0xf76,0xf6e,0xfee,0xfe6,0x936,0x939, +0xbdb,0xbdb,0xbdb,0xbdb,0x603,0xbdb,0xbdb,0x60b,0x613,0xbe3,0x617,0x61f,0xbe3,0x627,0x62f,0x637, +0xa62,0xa5a,0xbeb,0x63f,0x647,0x64f,0x655,0x65d,0xa6a,0xa72,0x665,0xa7a,0x66d,0xbf3,0xa82,0xbfa, +0xa8a,0xa92,0xa9a,0xaa2,0xaaa,0xab1,0xc02,0xc0a,0xab9,0xc12,0xc15,0xc17,0xe32,0xf13,0xf19,0x675, +0xc1f,0x67d,0x685,0xac1,0xac6,0xac9,0xacf,0xa42,0xad7,0xad7,0xadc,0xa4a,0xae4,0xaec,0xaf4,0xafc, +0xb04,0xc27,0xb0b,0xb13,0x68d,0x695,0x69a,0x69a,0x6a2,0x6a8,0x6b0,0x6b8,0x6c0,0x6c6,0x888,0x88f, +0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xf21,0xf21,0xf21,0xf21,0xf29,0xf30,0xf32,0xf39, +0xf41,0xf45,0xf45,0xf48,0xf45,0xf45,0xf4e,0xf45,0x8b4,0x8bc,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd, +0xfd6,0x969,0x96d,0x9e4,0xfc6,0xfc6,0xfc6,0x941,0xfce,0x961,0xffe,0x9bc,0x949,0x951,0x951,0x2a0, +0x9ac,0x9b4,0x9b4,0x9b4,0x6ce,0xe42,0xe42,0x6d6,0xe4a,0xe4a,0xe4a,0xe4a,0xe4a,0xe4a,0x6de,0x2ec, +0xcd4,0xcec,0x6e6,0xcf4,0x6ee,0xcfc,0xd04,0xd0c,0x6f6,0x6fb,0xd14,0xd1b,0x700,0x708,0x92a,0x92e, +0x710,0xd2b,0x718,0xd23,0xd34,0xd38,0xd30,0x720,0xd56,0xd56,0xd40,0xd46,0xd56,0xd56,0xd57,0xd4e, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0x728,0xf86,0xf86, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, +0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0x730,0x737,0x737, +0xe5a,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60, +0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60,0xe60, +0xe60,0xe60,0xe60,0xe60,0x73f,0xe68,0x2f4,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0x4f0,0x4f4,0x4fc,0x503,0x50b,0x513,0x51b,0x523,0xde1,0xde9,0x52b,0x533,0x53b,0x543,0x54b,0x550, +0xea4,0x558,0x560,0x567,0x567,0xbe3,0x56f,0x573,0xda8,0xda8,0x57b,0xdb8,0xdb9,0x583,0xdb0,0x585, +0xe2f,0xe31,0x58d,0xe31,0x595,0x59a,0x5a2,0xe36,0x5a8,0xe31,0x5ae,0x5b6,0x959,0xe3e,0xe3e,0x5be, +0x5c6,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46, +0xe46,0xe46,0xe46,0x5cb,0x5d3,0xe4e,0xe4e,0x5db,0x868,0x870,0x878,0x880,0xeb4,0xeac,0x5e3,0x5eb, +0x5f3,0xe56,0xe5e,0x5fb,0xe56,0x2e8,0x2a0,0x2a0,0x897,0x89f,0x8a7,0x8ac,0x1042,0x994,0x99c,0xf92, +0x922,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x1052,0x1057,0x9d4,0x9dc,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xfb2,0xf9a,0xfaa,0xfa2,0x1022,0x101a,0x936,0x939, +0xbeb,0xbeb,0xbeb,0xbeb,0x603,0xbeb,0xbeb,0x60b,0x613,0xbf3,0x617,0x61f,0xbf3,0x627,0x62f,0x637, +0xa6a,0xa62,0xbfb,0x63f,0x647,0x64f,0x655,0x65d,0xa72,0xa7a,0x665,0xa82,0x66d,0xc03,0xa8a,0xc0a, +0xa92,0xa9a,0xaa2,0xaaa,0xab2,0xab9,0xc12,0xc1a,0xac1,0xc22,0xc25,0xc27,0xe66,0xf47,0xf4d,0x675, +0xc2f,0x67d,0x685,0xac9,0xace,0xad1,0xad7,0xa4a,0xadf,0xadf,0xae4,0xa52,0xaec,0xaf4,0xafc,0xb04, +0xb0c,0xc37,0xb13,0xb1b,0x68d,0x695,0x69a,0x69a,0x6a2,0x6a8,0x6b0,0x6b8,0x6c0,0x6c6,0x888,0x88f, +0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xe6e,0xf55,0xf55,0xf55,0xf55,0xf5d,0xf64,0xf66,0xf6d, +0xf75,0xf79,0xf79,0xf7c,0xf79,0xf79,0xf82,0xf79,0x8b4,0x8bc,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd,0x8bd, +0x100a,0x969,0x96d,0x9e4,0xffa,0xffa,0xffa,0x941,0x1002,0x961,0x1032,0x9bc,0x949,0x951,0x951,0x2a0, +0x9ac,0x9b4,0x9b4,0x9b4,0x6ce,0xe76,0xe76,0x6d6,0xe7e,0xe7e,0xe7e,0xe7e,0xe7e,0xe7e,0x6de,0x2ec, +0xd08,0xd20,0x6e6,0xd28,0x6ee,0xd30,0xd38,0xd40,0x6f6,0x6fb,0xd48,0xd4f,0x700,0x708,0x92a,0x92e, +0x710,0xd5f,0x718,0xd57,0xd68,0xd6c,0xd64,0x720,0xd8a,0xd8a,0xd74,0xd7a,0xd8a,0xd8a,0xd8b,0xd82, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86, +0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0xe86,0x728,0xfba,0xfba, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93, +0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0xd93,0x730,0x737,0x737, +0xe8e,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94, +0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94, +0xe94,0xe94,0xe94,0xe94,0x73f,0xe9c,0x2f4,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x98c,0x9ec,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed, +#ifndef U_DARWIN +0xff6,0x2fc,0x102b,0x9f5,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0x102a,0x2fc,0x105f,0x9f5,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6, +0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8, +0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda, +0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5, +0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7, +0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9, +0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb, +0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6, +0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8, +0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda, +0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5, +0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7, +0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9, +0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb, +0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6, +0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8, +0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda, +0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5, +0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7, +0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9, +0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb, +0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0xddb,0xdd5,0xdd6,0xdd7,0xdd8,0xdd9,0xdda,0x304,0x2a0,0x2a0, +0x1043,0x1046,0x104e,0x1054,0x105c,0x105d,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065, +0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x2a0,0x1065,0x106d,0x1065,0x1075,0x1076,0x107e,0x107f, +0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd, +0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd,0xdcd, +#else /* U_DARWIN */ +0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a, +0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c, +0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e, +0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09, +0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b, +0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d, +0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f, +0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a, +0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c, +0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e, +0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09, +0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b, +0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d, +0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f, +0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a, +0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c, +0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e, +0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09, +0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b, +0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d, +0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f, +0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0xe0f,0xe09,0xe0a,0xe0b,0xe0c,0xe0d,0xe0e,0x304,0x2a0,0x2a0, +0x1077,0x107a,0x1082,0x1088,0x1090,0x1091,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099, +0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x2a0,0x1099,0x10a1,0x1099,0x10a9,0x10aa,0x10b2,0x10b3, +0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01, +0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01, +#endif /* U_DARWIN */ +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a, +#ifndef U_DARWIN +0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xa3a,0xd67,0xd67,0xd67,0xd67,0xd67,0xd67,0xd67,0xd67, +0xd6c,0x747,0xf56,0x74d,0x1006,0x1006,0x751,0x758,0x760,0x768,0x770,0xc3f,0xc46,0x778,0x77d,0xc4e, +0xc84,0xc84,0xc2f,0xc37,0xc56,0xc7b,0xc7c,0xc8c,0xc5e,0xc63,0x785,0xc6b,0x78d,0xc73,0x795,0x799, +0x9c4,0x7a1,0x7a9,0x7b1,0xc94,0xc9a,0xc9f,0x7b9,0x7c9,0xcc4,0xccc,0xcaf,0xcb4,0x7d1,0x7d9,0x7c1, +0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd, +0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdbd,0xdc5,0xdc5,0xdc5,0xdc5, +0x8c5,0x8cc,0x8d4,0x8dc,0xf8e,0xf8e,0xf8e,0x8e4,0x8ec,0x8ef,0xfbe,0xfb6,0x30c,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x7e1,0x7e9,0x314,0x2a0,0x8f7,0xfde,0x9a4,0x2a0, +0xe95,0xe88,0xe8d,0xf96,0x8ff,0x31c,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0xa42,0xc3f,0xc43,0xcdb,0xc4b,0xb23,0xc53,0xc3f,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, +0xda0,0x747,0xf8a,0x74d,0x103a,0x103a,0x751,0x758,0x760,0x768,0x770,0xc6b,0xc72,0x778,0x77d,0xc7a, +0xcb0,0xcb0,0xc5b,0xc63,0xc82,0xca7,0xca8,0xcb8,0xc8a,0xc8f,0x785,0xc97,0x78d,0xc9f,0x795,0x799, +0x9c4,0x7a1,0x7a9,0x7b1,0xcc0,0xcc6,0xccb,0x7b9,0x7c9,0xcf8,0xd00,0xce3,0xce8,0x7d1,0x7d9,0x7c1, +0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1, +0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf1,0xdf9,0xdf9,0xdf9,0xdf9, +0x8c5,0x8cc,0x8d4,0x8dc,0xfc2,0xfc2,0xfc2,0x8e4,0x8ec,0x8ef,0xff2,0xfea,0x30c,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x7e1,0x7e9,0x314,0x2a0,0x8f7,0x1012,0x9a4,0x2a0, +0xec9,0xebc,0xec1,0xfca,0x8ff,0x31c,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x907,0x90a,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x9fd,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x975,0x97c,0x984,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033, +0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0x1033,0xa05,0xa09,0xa09,0xa09,0xa09, +0x103b,0x103b,0x103b,0xa11,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#else /* U_DARWIN */ +0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067, +0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0x1067,0xa05,0xa09,0xa09,0xa09,0xa09, +0x106f,0x106f,0x106f,0xa11,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#ifndef U_DARWIN +0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0x7f1,0xea5,0x7f9,0xea6,0xeae,0xeb6,0xebc,0x801,0x809, +0xfae,0xfae,0x324,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xf9e,0xf9e,0x912,0xa19,0x2a0,0x2a0,0x2a0,0x2a0, +0xee5,0xee0,0x811,0xee3,0x819,0x821,0x829,0xee9,0x831,0x839,0x841,0xee2,0xeea,0xee5,0xee0,0xee8, +0xee3,0xeeb,0xee6,0xee1,0xee9,0x848,0xec4,0xecc,0xed3,0xeda,0xec7,0xecf,0xed6,0xedd,0x850,0xf0b, +#else /* U_DARWIN */ +0xed1,0xed1,0xed1,0xed1,0xed1,0xed1,0xed1,0x7f1,0xed9,0x7f9,0xeda,0xee2,0xeea,0xef0,0x801,0x809, +0xfe2,0xfe2,0x324,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0xfd2,0xfd2,0x912,0xa19,0x2a0,0x2a0,0x2a0,0x2a0, +0xf19,0xf14,0x811,0xf17,0x819,0x821,0x829,0xf1d,0x831,0x839,0x841,0xf16,0xf1e,0xf19,0xf14,0xf1c, +0xf17,0xf1f,0xf1a,0xf15,0xf1d,0x848,0xef8,0xf00,0xf07,0xf0e,0xefb,0xf03,0xf0a,0xf11,0x850,0xf3f, +#endif /* U_DARWIN */ +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x328, +#ifndef U_DARWIN +0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb, +0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb, +0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xefb, +0xefb,0xefb,0xefb,0xefb,0xefb,0xefb,0xa2a,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21, +#else /* U_DARWIN */ +0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f, +0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f, +0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f, +0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xf2f,0xa2a,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21, +#endif /* U_DARWIN */ +0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21, +0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21, +#ifndef U_DARWIN +0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03,0xf03, +#else /* U_DARWIN */ +0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37,0xf37, +#endif /* U_DARWIN */ +0xa32,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21, +0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21, +0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa21,0xa22, +#ifndef U_DARWIN +0x858,0xef3,0xef3,0xef3,0x330,0x330,0x330,0x330,0xfa6,0xfa6,0xfa6,0xfa6,0xfa6,0xfa6,0xfa6,0x338, +#else /* U_DARWIN */ +0x858,0xf27,0xf27,0xf27,0x330,0x330,0x330,0x330,0xfda,0xfda,0xfda,0xfda,0xfda,0xfda,0xfda,0x338, +#endif /* U_DARWIN */ +0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330, +0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330, +0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330,0x330, +#ifndef U_DARWIN +0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d, +0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d, +0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d, +0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd9d,0xd8d, +0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5, +0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5, +0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5, +0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xda5,0xd95, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x426,0x621,0x450,0x450,0x54c,0x495,0x495, +0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495, +0x747,0x561,0x717,0x3ff,0x6fc,0x6d2,0x3ff,0x71a,0x69f,0x474,0x3ff,0x6ff,0x61b,0x573,0x61e,0x74a, +0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x618,0x61b,0x402,0x402,0x402,0x561, +0x3ff,0x417,0x417,0x417,0x417,0x417,0x417,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411, +0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x69f,0x6fc,0x474,0x408,0x40b, +0x405,0x414,0x414,0x414,0x414,0x414,0x414,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e, +0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x69f,0x447,0x474,0x402,0x495, +0x498,0x498,0x498,0x498,0x498,0x750,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498, +0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498, +0x567,0x17d,0x6d5,0x702,0x6ed,0x702,0x41a,0x17d,0x183,0x1f2,0x189,0x708,0x41d,0x43b,0x3a8,0x420, +0x6c0,0x6f0,0x17a,0x17a,0x44d,0x1f5,0x17d,0x186,0x183,0x17a,0x189,0x708,0x177,0x177,0x177,0x17d, +0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x3b1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb, +0x3b1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x180,0x3b1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x3b1,0x3ab, +0x3ae,0x3ae,0x1f8,0x1f8,0x1f8,0x1f8,0x3ab,0x1f8,0x3ae,0x3ae,0x3ae,0x1f8,0x3ae,0x3ae,0x1f8,0x1f8, +0x3ab,0x1f8,0x3ae,0x3ae,0x1f8,0x1f8,0x1f8,0x180,0x3ab,0x3ae,0x3ae,0x1f8,0x3ae,0x1f8,0x3ab,0x1f8, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x8b8,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x8d9,0x8d9,0x8dc,0x8dc,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d,0x8d,0x8d,0x8d, +0x8ee,0xa41,0x8ee,0x8ee,0x8ee,0xa41,0x8ee,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xbf1,0xbf1,0xbf1,0xc4b,0xc4b,0xc42,0xc42,0xc4b,0xbee,0xbee,0xbee,0xbee,0x138,0x138,0x138,0x138, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x7c5,0x7c5,0x7c5,0x7c5,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0x10b,0x10b,0x10b,0x10b,0x10b, +#else /* U_DARWIN */ +0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, +0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, +0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, +0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdc1, +0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9, +0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9, +0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9, +0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdd9,0xdc9, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x438,0x64b,0x465,0x465,0x56d,0x4b0,0x4b0, +0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0, +0x77d,0x582,0x74d,0x40b,0x732,0x705,0x40b,0x750,0x6d2,0x48c,0x40b,0x735,0x645,0x594,0x648,0x780, +0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x642,0x645,0x40e,0x40e,0x40e,0x582, +0x40b,0x423,0x423,0x423,0x423,0x423,0x423,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d, +0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x6d2,0x732,0x48c,0x414,0x417, +0x411,0x420,0x420,0x420,0x420,0x420,0x420,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a, +0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x6d2,0x459,0x48c,0x40e,0x4b0, +0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x786,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3, +0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3, +0x588,0x17d,0x708,0x738,0x723,0x738,0x426,0x17d,0x183,0x1f5,0x189,0x73e,0x429,0x44d,0x3b1,0x42c, +0x6f3,0x726,0x17a,0x17a,0x462,0x1f8,0x17d,0x186,0x183,0x17a,0x189,0x73e,0x177,0x177,0x177,0x17d, +0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x3ba,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe, +0x3ba,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x180,0x3ba,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x3ba,0x3b4, +0x3b7,0x3b7,0x1fb,0x1fb,0x1fb,0x1fb,0x3b4,0x1fb,0x3b7,0x3b7,0x3b7,0x1fb,0x3b7,0x3b7,0x1fb,0x1fb, +0x3b4,0x1fb,0x3b7,0x3b7,0x1fb,0x1fb,0x1fb,0x180,0x3b4,0x3b7,0x3b7,0x1fb,0x3b7,0x1fb,0x3b4,0x1fb, +0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x8ee,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x90f,0x90f,0x912,0x912,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x8d,0x8d,0x8d,0x8d, +0x924,0xa77,0x924,0x924,0x924,0xa77,0x924,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xc27,0xc27,0xc27,0xc81,0xc81,0xc78,0xc78,0xc81,0xc24,0xc24,0xc24,0xc24,0x138,0x138,0x138,0x138, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x7fb,0x7fb,0x7fb,0x7fb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0x10b,0x10b,0x10b,0x10b,0x10b, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0xc9,0xc9,0xc9,0xc9,0xc9, +#else /* U_DARWIN */ +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0xc9,0xc9,0xc9,0xc9,0xc9, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xff,0xff,0xff,0xff,0xff,0xff, +#else /* U_DARWIN */ +0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xff,0xff,0xff,0xff,0xff,0xff, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0xba9,0xba9,0xc2a,0xc2a,0xc2a,0xba9,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108, +#else /* U_DARWIN */ +0xbdf,0xbdf,0xc60,0xc60,0xc60,0xbdf,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x765,0x765, +#else /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x79b,0x79b, +#endif /* U_DARWIN */ +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +#ifndef U_DARWIN +0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, +#else /* U_DARWIN */ +0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a, +#endif /* U_DARWIN */ +3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +#ifndef U_DARWIN +0x570,0x570,0x8cd,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c, +6,6,6,6,0x243,0x240,6,6,6,6,0x249,0xc93,0xc93,0xc93,0x60f,6, +6,6,6,6,0x246,0x243,0x258,0x237,0x258,0x258,0x258,6,0x258,6,0x258,0x258, +0x24f,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, +0x3cf,0x3cf,6,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x258,0x258,0x24f,0x24f,0x24f,0x24f, +0x24f,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc, +0x3cc,0x3cc,0x24c,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x24f,0x24f,0x24f,0x24f,0x24f,6, +0x25b,0x25b,0x25e,0x258,0x258,0x25b,0x252,0x7e3,0x98d,0x98a,0x255,0x7e3,0x255,0x7e3,0x255,0x7e3, +0x26a,0x264,0x261,0x49b,0x49b,0x49b,0x49b,9,0x894,0x894,0x993,0x990,0x7ec,0x7e6,0x7ec,0x7e6, +0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264, +#else /* U_DARWIN */ +0x591,0x591,0x903,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62, +6,6,6,6,0x246,0x243,6,6,6,6,0x24c,0xcc9,0xcc9,0xcc9,0x639,6, +6,6,6,6,0x249,0x246,0x25b,0x23a,0x25b,0x25b,0x25b,6,0x25b,6,0x25b,0x25b, +0x252,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8, +0x3d8,0x3d8,6,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x25b,0x25b,0x252,0x252,0x252,0x252, +0x252,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, +0x3d5,0x3d5,0x24f,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x252,0x252,0x252,0x252,0x252,6, +0x25e,0x25e,0x261,0x25b,0x25b,0x25e,0x255,0x819,0x9c3,0x9c0,0x258,0x819,0x258,0x819,0x258,0x819, +0x26d,0x267,0x264,0x4b6,0x4b6,0x4b6,0x4b6,9,0x8ca,0x8ca,0x9c9,0x9c6,0x822,0x81c,0x822,0x81c, +0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267, +#endif /* U_DARWIN */ +0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8, +#ifndef U_DARWIN +0xc,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c, +0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0xc,0xc,0x27f,0x270,0x270, +0x273,0x270,0x273,0x270,0xc,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, +0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, +0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x279,0xc,0x612,0x86a,0xc,0xc,0xc,0xc,0xc, +0xf,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, +0x282,0x49e,0x49e,0x28b,0x78f,0xc1e,0xc51,0xc1e,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e, +0x28e,0x28e,0x28e,0xf,0xf,0xf,0xf,0xf,0x28e,0x28e,0x28e,0x288,0x285,0xf,0xf,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xa89,0xa89,0xa89,0xa89,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0xc7b,0x54f,0xb49,0xa8c,0xa8c,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0x12,0x12, +0x12,0x12,0x12,0x54f,0x12,0x12,0xc54,0x552,0x12,0x29a,0x29d,0x29d,0x29d,0x29d,0x29d,0x29a, +0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x12,0x12,0x12,0x12,0x12,0x294,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x897,0x897,0x897,0xb13,0xb19, +0xb16,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0x12,0x801,0x801,0x801,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe, +0x7fe,0x7fe,0x7fe,0x7fb,0x7fe,0x7fb,0x15,0x7f8,0x804,0x89a,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d,0x89d, +0x89d,0x89d,0x89d,0x15,0x15,0xa92,0xa92,0xa92,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2, +0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0x807,0x807,0x807,0x807,0x807,0x807,0x8a3,0x8a3, +0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x8a3,0x999,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x4b0,0x4b0,0x4b9,0xa95,0x2a9,0x2a9,0x2a9, +0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9, +0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2ac,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9, +0x2a9,0x2ac,0x2a9,0x2a9,0x2ac,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x1b,0x1b,0x4b3,0x2a9,0x4b9,0x4b9, +0x4b9,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b9,0x4b9,0x4b9,0x4b9,0x4b6,0x1b,0x1b, +0x2a9,0x4b3,0x4b3,0x4b3,0x4b3,0x1b,0x1b,0x1b,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, +0x2a9,0x2a9,0x4b0,0x4b0,0x42c,0x42c,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666, +0x2a6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xc9c,0xc9c,0xb73,0xc9c,0xc9c, +0x1e,0x4bc,0x4c5,0x4c5,0x1e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x1e,0x1e,0x2b2, +0x2b2,0x1e,0x1e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2, +0x2b2,0x1e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x1e,0x2b2,0x1e,0x1e,0x1e,0x2b2,0x2b2, +0x2b2,0x2b2,0x1e,0x1e,0x4bf,0xa98,0x4bc,0x4c5,0x4c5,0x4bc,0x4bc,0x4bc,0x4bc,0x1e,0x1e,0x4c5, +0x4c5,0x1e,0x1e,0x4c8,0x4c8,0x4c2,0xb76,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x4bc, +0x1e,0x1e,0x1e,0x1e,0x2b5,0x2b5,0x1e,0x2b5,0x2b2,0x2b2,0x4bc,0x4bc,0x1e,0x1e,0x669,0x669, +0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x2b2,0x2b2,0x6db,0x6db,0x2af,0x2af,0x2af,0x2af, +0x2af,0x2af,0x2af,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0xb1c,0x4cb,0xb1f,0x21,0x2b8,0x2b8,0x2b8, +0x2b8,0x2b8,0x2b8,0x21,0x21,0x21,0x21,0x2b8,0x2b8,0x21,0x21,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8, +0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x21,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8, +0x2b8,0x21,0x2b8,0x2bb,0x21,0x2b8,0x2bb,0x21,0x2b8,0x2b8,0x21,0x21,0x4ce,0x21,0x4d4,0x4d4, +0x4d4,0x4cb,0x4cb,0x21,0x21,0x21,0x21,0x4cb,0x4cb,0x21,0x21,0x4cb,0x4cb,0x4d1,0x21,0x21, +0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x2bb,0x2bb,0x2bb,0x2b8,0x21,0x2bb,0x21, +0x21,0x21,0x21,0x21,0x21,0x21,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c, +0x4cb,0x4cb,0x2b8,0x2b8,0x2b8,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, +0x24,0x4d7,0x4d7,0x4e0,0x24,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0xa9b,0x2be,0x24,0x2be, +0x2be,0x2be,0x24,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be, +0x2be,0x24,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x24,0x2be,0x2be,0x24,0x2be,0x2be,0x2be, +0x2be,0x2be,0x24,0x24,0x4da,0x2be,0x4e0,0x4e0,0x4e0,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x24,0x4d7, +0x4d7,0x4e0,0x24,0x4e0,0x4e0,0x4dd,0x24,0x24,0x2be,0x24,0x24,0x24,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x2be,0xa9b,0xb22,0xb22,0x24,0x24,0x66f,0x66f, +0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x66f,0x24,0xb55,0x24,0x24,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x4e3,0x4ec,0x4ec,0x27,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x27,0x27,0x2c4,0x2c4,0x27,0x27,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x27,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4, +0x2c4,0x27,0x2c4,0x2c4,0x27,0xa9e,0x2c4,0x2c4,0x2c4,0x2c4,0x27,0x27,0x4e6,0x2c4,0x4e3,0x4e3, +0x4ec,0x4e3,0x4e3,0x4e3,0x27,0x27,0x27,0x4ec,0x4ef,0x27,0x27,0x4ef,0x4ef,0x4e9,0x27,0x27, +0x27,0x27,0x27,0x27,0x27,0x27,0x4e3,0x4e3,0x27,0x27,0x27,0x27,0x2c7,0x2c7,0x27,0x2c4, +0x2c4,0x2c4,0x27,0x27,0x27,0x27,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672,0x672, +0x2c1,0xa9e,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, +0x2a,0x2a,0x4f2,0x2cd,0x2a,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd, +0x2cd,0x2a,0x2cd,0x2cd,0x2d0,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd,0x2a,0x2cd,0x2a,0x2cd,0x2cd, +0x2a,0x2a,0x2a,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2cd,0x2cd, +0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0xb79,0x2cd,0x2cd,0x2cd,0x2a,0x2a,0x2a,0x2a,0x4f2,0x4f8, +0x4f2,0x4f8,0x4f8,0x2a,0x2a,0x2a,0x4f8,0x4f8,0x4f8,0x2a,0x4fb,0x4fb,0x4fb,0x4f5,0x2a,0x2a, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x4f2,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0xc6f,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x2ca,0x2ca,0x2ca,0xaa1, +0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xb58,0xaa1,0x2a,0x2a,0x2a,0x2a,0x2a,0x2d,0x507,0x507,0x507, +0x2d,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3, +0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3, +0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d,0x2d, +0x2d,0x2d,0x4fe,0x4fe,0x4fe,0x507,0x507,0x507,0x507,0x2d,0x4fe,0x4fe,0x501,0x2d,0x4fe,0x4fe, +0x4fe,0x504,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x4fe,0x4fe,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x2d,0x2d,0x2d,0x2d3,0x2d3,0x2d,0x2d,0x2d,0x2d,0x678,0x678,0x678,0x678,0x678,0x678, +0x678,0x678,0x678,0x678,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x2d,0x2d,0x2d,0x30,0x30,0x510,0x510,0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6, +0x2d6,0x30,0x2d6,0x2d6,0x2d6,0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6, +0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6, +0x30,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x30,0x30,0xb25,0xaa4,0x510,0x50a,0x513,0x510,0x50a,0x510, +0x510,0x30,0x50a,0x513,0x513,0x30,0x513,0x513,0x50a,0x50d,0x30,0x30,0x30,0x30,0x30,0x30, +0x30,0x50a,0x50a,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2d6,0x30,0x2d6,0x2d6,0xd0e,0xd0e, +0x30,0x30,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x30,0xc9f,0xc9f,0x30, +0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x33,0x33,0x51c,0x51c, +0x33,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x33,0x2d9,0x2d9,0x2d9,0x33,0x2d9,0x2d9, +0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x33,0x2d9,0x2d9, +0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x33,0x33, +0x33,0x33,0x516,0x51c,0x51c,0x516,0x516,0x516,0x33,0x33,0x51c,0x51c,0x51c,0x33,0x51f,0x51f, +0x51f,0x519,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x516,0x33,0x33,0x33,0x33, +0x33,0x33,0x33,0x33,0x2d9,0x2d9,0x33,0x33,0x33,0x33,0x67e,0x67e,0x67e,0x67e,0x67e,0x67e, +0x67e,0x67e,0x67e,0x67e,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, +0x33,0x33,0x33,0x33,0x36,0x36,0x8ac,0x8ac,0x36,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x36,0x36,0x36,0x80d,0x80d, +0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0x80d,0x36,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x36,0x80d,0x36,0x36, +0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x36,0x36,0x36,0x8a9,0x36,0x36,0x36,0x36,0x8a6, +0x8ac,0x8ac,0x8a6,0x8a6,0x8a6,0x36,0x8a6,0x36,0x8ac,0x8ac,0x8af,0x8ac,0x8af,0x8af,0x8af,0x8a6, +#else /* U_DARWIN */ +0xc,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f, +0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0xc,0xc,0x282,0x273,0x273, +0x276,0x273,0x276,0x273,0xc,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279, +0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279, +0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x27c,0xc,0x63c,0x8a0,0xc,0xc,0xc,0xc,0xc, +0xf,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2, +0x285,0x4b9,0x4b9,0x28e,0x7c5,0xc54,0xc87,0xc54,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291, +0x291,0x291,0x291,0xf,0xf,0xf,0xf,0xf,0x291,0x291,0x291,0x28b,0x288,0xf,0xf,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xabf,0xabf,0xabf,0xabf,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0xcb1,0x570,0xb7f,0xac2,0xac2,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0x12,0x12, +0x12,0x12,0x12,0x570,0x12,0x12,0xc8a,0x573,0x12,0x29d,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x29d, +0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x12,0x12,0x12,0x12,0x12,0x297,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x8cd,0x8cd,0x8cd,0xb49,0xb4f, +0xb4c,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0x12,0x837,0x837,0x837,0x834,0x834,0x834,0x834,0x834, +0x834,0x834,0x834,0x831,0x834,0x831,0x15,0x82e,0x83a,0x8d0,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a, +0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3, +0x8d3,0x8d3,0x8d3,0x15,0x15,0xac8,0xac8,0xac8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, +0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x8d9,0x8d9, +0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x9cf,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x4cb,0x4cb,0x4d4,0xacb,0x2ac,0x2ac,0x2ac, +0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, +0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2af,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, +0x2ac,0x2af,0x2ac,0x2ac,0x2af,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x1b,0x1b,0x4ce,0x2ac,0x4d4,0x4d4, +0x4d4,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4d4,0x4d4,0x4d4,0x4d4,0x4d1,0x1b,0x1b, +0x2ac,0x4ce,0x4ce,0x4ce,0x4ce,0x1b,0x1b,0x1b,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af, +0x2ac,0x2ac,0x4cb,0x4cb,0x43e,0x43e,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696,0x696, +0x2a9,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xcd2,0xcd2,0xba9,0xcd2,0xcd2, +0x1e,0x4d7,0x4e0,0x4e0,0x1e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x1e,0x1e,0x2b5, +0x2b5,0x1e,0x1e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5, +0x2b5,0x1e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x1e,0x2b5,0x1e,0x1e,0x1e,0x2b5,0x2b5, +0x2b5,0x2b5,0x1e,0x1e,0x4da,0xace,0x4d7,0x4e0,0x4e0,0x4d7,0x4d7,0x4d7,0x4d7,0x1e,0x1e,0x4e0, +0x4e0,0x1e,0x1e,0x4e3,0x4e3,0x4dd,0xbac,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x4d7, +0x1e,0x1e,0x1e,0x1e,0x2b8,0x2b8,0x1e,0x2b8,0x2b5,0x2b5,0x4d7,0x4d7,0x1e,0x1e,0x699,0x699, +0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x699,0x2b5,0x2b5,0x70e,0x70e,0x2b2,0x2b2,0x2b2,0x2b2, +0x2b2,0x2b2,0x2b2,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0xb52,0x4e6,0xb55,0x21,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x21,0x21,0x21,0x21,0x2bb,0x2bb,0x21,0x21,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x21,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x21,0x2bb,0x2be,0x21,0x2bb,0x2be,0x21,0x2bb,0x2bb,0x21,0x21,0x4e9,0x21,0x4ef,0x4ef, +0x4ef,0x4e6,0x4e6,0x21,0x21,0x21,0x21,0x4e6,0x4e6,0x21,0x21,0x4e6,0x4e6,0x4ec,0x21,0x21, +0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x2be,0x2be,0x2be,0x2bb,0x21,0x2be,0x21, +0x21,0x21,0x21,0x21,0x21,0x21,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c, +0x4e6,0x4e6,0x2bb,0x2bb,0x2bb,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, +0x24,0x4f2,0x4f2,0x4fb,0x24,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0xad1,0x2c1,0x24,0x2c1, +0x2c1,0x2c1,0x24,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1, +0x2c1,0x24,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x24,0x2c1,0x2c1,0x24,0x2c1,0x2c1,0x2c1, +0x2c1,0x2c1,0x24,0x24,0x4f5,0x2c1,0x4fb,0x4fb,0x4fb,0x4f2,0x4f2,0x4f2,0x4f2,0x4f2,0x24,0x4f2, +0x4f2,0x4fb,0x24,0x4fb,0x4fb,0x4f8,0x24,0x24,0x2c1,0x24,0x24,0x24,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x2c1,0xad1,0xb58,0xb58,0x24,0x24,0x69f,0x69f, +0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x24,0xb8b,0x24,0x24,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x4fe,0x507,0x507,0x27,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x27,0x27,0x2c7,0x2c7,0x27,0x27,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x27,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x27,0x2c7,0x2c7,0x27,0xad4,0x2c7,0x2c7,0x2c7,0x2c7,0x27,0x27,0x501,0x2c7,0x4fe,0x4fe, +0x507,0x4fe,0x4fe,0x4fe,0x27,0x27,0x27,0x507,0x50a,0x27,0x27,0x50a,0x50a,0x504,0x27,0x27, +0x27,0x27,0x27,0x27,0x27,0x27,0x4fe,0x4fe,0x27,0x27,0x27,0x27,0x2ca,0x2ca,0x27,0x2c7, +0x2c7,0x2c7,0x27,0x27,0x27,0x27,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2, +0x2c4,0xad4,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, +0x2a,0x2a,0x50d,0x2d0,0x2a,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0, +0x2d0,0x2a,0x2d0,0x2d0,0x2d3,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0,0x2a,0x2d0,0x2a,0x2d0,0x2d0, +0x2a,0x2a,0x2a,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2d0,0x2d0, +0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,0xbaf,0x2d0,0x2d0,0x2d0,0x2a,0x2a,0x2a,0x2a,0x50d,0x513, +0x50d,0x513,0x513,0x2a,0x2a,0x2a,0x513,0x513,0x513,0x2a,0x516,0x516,0x516,0x510,0x2a,0x2a, +0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x50d,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0xca5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x6a5,0x2cd,0x2cd,0x2cd,0xad7, +0xad7,0xad7,0xad7,0xad7,0xad7,0xb8e,0xad7,0x2a,0x2a,0x2a,0x2a,0x2a,0x2d,0x522,0x522,0x522, +0x2d,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6, +0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6, +0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d,0x2d, +0x2d,0x2d,0x519,0x519,0x519,0x522,0x522,0x522,0x522,0x2d,0x519,0x519,0x51c,0x2d,0x519,0x519, +0x519,0x51f,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x519,0x519,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x2d,0x2d,0x2d,0x2d6,0x2d6,0x2d,0x2d,0x2d,0x2d,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8, +0x6a8,0x6a8,0x6a8,0x6a8,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x2d,0x2d,0x2d,0x30,0x30,0x52b,0x52b,0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9, +0x2d9,0x30,0x2d9,0x2d9,0x2d9,0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9, +0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9, +0x30,0x2d9,0x2d9,0x2d9,0x2d9,0x2d9,0x30,0x30,0xb5b,0xada,0x52b,0x525,0x52e,0x52b,0x525,0x52b, +0x52b,0x30,0x525,0x52e,0x52e,0x30,0x52e,0x52e,0x525,0x528,0x30,0x30,0x30,0x30,0x30,0x30, +0x30,0x525,0x525,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2d9,0x30,0x2d9,0x2d9,0xd44,0xd44, +0x30,0x30,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x30,0xcd5,0xcd5,0x30, +0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x33,0x33,0x537,0x537, +0x33,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x33,0x2dc,0x2dc,0x2dc,0x33,0x2dc,0x2dc, +0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x33,0x2dc,0x2dc, +0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x33,0x33, +0x33,0x33,0x531,0x537,0x537,0x531,0x531,0x531,0x33,0x33,0x537,0x537,0x537,0x33,0x53a,0x53a, +0x53a,0x534,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x531,0x33,0x33,0x33,0x33, +0x33,0x33,0x33,0x33,0x2dc,0x2dc,0x33,0x33,0x33,0x33,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae, +0x6ae,0x6ae,0x6ae,0x6ae,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, +0x33,0x33,0x33,0x33,0x36,0x36,0x8e2,0x8e2,0x36,0x843,0x843,0x843,0x843,0x843,0x843,0x843, +0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x36,0x36,0x36,0x843,0x843, +0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843, +0x843,0x843,0x36,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x36,0x843,0x36,0x36, +0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x36,0x36,0x36,0x8df,0x36,0x36,0x36,0x36,0x8dc, +0x8e2,0x8e2,0x8dc,0x8dc,0x8dc,0x36,0x8dc,0x36,0x8e2,0x8e2,0x8e5,0x8e2,0x8e5,0x8e5,0x8e5,0x8dc, +#endif /* U_DARWIN */ +0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +#ifndef U_DARWIN +0x36,0x36,0x8ac,0x8ac,0x80a,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +0x39,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729, +0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729, +0x729,0x71d,0x729,0x726,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x723,0x39,0x39,0x39,0x39,0x6de, +0x72f,0x72f,0x72f,0x72f,0x72f,0x729,0x72c,0x720,0x720,0x720,0x720,0x720,0x720,0x71d,0x720,0x2dc, +0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x42f,0x42f,0x39,0x39,0x39,0x39, +#else /* U_DARWIN */ +0x36,0x36,0x8e2,0x8e2,0x840,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +0x39,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0x75f,0x753,0x75f,0x75c,0x753,0x753,0x753,0x753,0x753,0x753,0x759,0x39,0x39,0x39,0x39,0x711, +0x765,0x765,0x765,0x765,0x765,0x75f,0x762,0x756,0x756,0x756,0x756,0x756,0x756,0x753,0x756,0x2df, +0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x441,0x441,0x39,0x39,0x39,0x39, +#endif /* U_DARWIN */ +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, +#ifndef U_DARWIN +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3c,0x73b,0x73b,0x3c, +0x73b,0x3c,0x3c,0x73b,0x73b,0x3c,0x73b,0x3c,0x3c,0x73b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x73b,0x73b,0x73b,0x73b,0x3c,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x3c,0x73b,0x73b,0x73b, +0x3c,0x73b,0x3c,0x73b,0x3c,0x3c,0x73b,0x73b,0x3c,0x73b,0x73b,0x73b,0x73b,0x732,0x73b,0x738, +0x732,0x732,0x732,0x732,0x732,0x732,0x3c,0x732,0x732,0x73b,0x3c,0x3c,0x744,0x744,0x744,0x744, +0x744,0x3c,0x741,0x3c,0x735,0x735,0x735,0x735,0x735,0x732,0x3c,0x3c,0x684,0x684,0x684,0x684, +0x684,0x684,0x684,0x684,0x684,0x684,0x3c,0x3c,0x73e,0x73e,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +#else /* U_DARWIN */ +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x3c,0x771,0x771,0x3c, +0x771,0x3c,0x3c,0x771,0x771,0x3c,0x771,0x3c,0x3c,0x771,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x771,0x771,0x771,0x771,0x3c,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x3c,0x771,0x771,0x771, +0x3c,0x771,0x3c,0x771,0x3c,0x3c,0x771,0x771,0x3c,0x771,0x771,0x771,0x771,0x768,0x771,0x76e, +0x768,0x768,0x768,0x768,0x768,0x768,0x3c,0x768,0x768,0x771,0x3c,0x3c,0x77a,0x77a,0x77a,0x77a, +0x77a,0x3c,0x777,0x3c,0x76b,0x76b,0x76b,0x76b,0x76b,0x768,0x3c,0x3c,0x6b4,0x6b4,0x6b4,0x6b4, +0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x3c,0x3c,0x774,0x774,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +#endif /* U_DARWIN */ +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +#ifndef U_DARWIN +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x777,0x777,0x777,0x77a, +0x777,0x777,0x777,0x777,0x3f,0x777,0x777,0x777,0x777,0x77a,0x777,0x777,0x777,0x777,0x77a,0x777, +0x777,0x777,0x777,0x77a,0x777,0x777,0x777,0x777,0x77a,0x777,0x777,0x777,0x777,0x777,0x777,0x777, +0x777,0x777,0x777,0x777,0x777,0x77a,0x813,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x792,0x792,0x795, +0x792,0x795,0x795,0x798,0x795,0x798,0x792,0x792,0x792,0x792,0x792,0x783,0x792,0x795,0x79b,0x79b, +0x79e,0x780,0x79b,0x79b,0x777,0x777,0x777,0x777,0x3f,0x3f,0x3f,0x3f,0x792,0x792,0x792,0x795, +0x792,0x792,0x8b2,0x792,0x3f,0x792,0x792,0x792,0x792,0x795,0x792,0x792,0x792,0x792,0x795,0x792, +0x792,0x792,0x792,0x795,0x792,0x792,0x792,0x792,0x795,0x792,0x8b2,0x8b2,0x8b2,0x792,0x792,0x792, +0x792,0x792,0x792,0x792,0x8b2,0x795,0x8b2,0x8b2,0x8b2,0x3f,0x86d,0x86d,0x810,0x810,0x810,0x810, +0x810,0x810,0x8b5,0x810,0x810,0x810,0x810,0x810,0x810,0x3f,0x3f,0x810,0xc0f,0xc0f,0x3f,0x3f, +#else /* U_DARWIN */ +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x7ad,0x7ad,0x7ad,0x7b0, +0x7ad,0x7ad,0x7ad,0x7ad,0x3f,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x7ad, +0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad, +0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7b0,0x849,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x7c8,0x7c8,0x7cb, +0x7c8,0x7cb,0x7cb,0x7ce,0x7cb,0x7ce,0x7c8,0x7c8,0x7c8,0x7c8,0x7c8,0x7b9,0x7c8,0x7cb,0x7d1,0x7d1, +0x7d4,0x7b6,0x7d1,0x7d1,0x7ad,0x7ad,0x7ad,0x7ad,0x3f,0x3f,0x3f,0x3f,0x7c8,0x7c8,0x7c8,0x7cb, +0x7c8,0x7c8,0x8e8,0x7c8,0x3f,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c8, +0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,0x7c8,0x7c8,0x7c8,0x7cb,0x7c8,0x8e8,0x8e8,0x8e8,0x7c8,0x7c8,0x7c8, +0x7c8,0x7c8,0x7c8,0x7c8,0x8e8,0x7cb,0x8e8,0x8e8,0x8e8,0x3f,0x8a3,0x8a3,0x846,0x846,0x846,0x846, +0x846,0x846,0x8eb,0x846,0x846,0x846,0x846,0x846,0x846,0x3f,0x3f,0x846,0xc45,0xc45,0x3f,0x3f, +#endif /* U_DARWIN */ +0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, +0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, +#ifndef U_DARWIN +0x918,0x918,0x42,0x918,0x918,0x918,0x91b,0x918,0x42,0x918,0x918,0x42,0x915,0x90c,0x90c,0x90c, +0x90c,0x915,0x90c,0x42,0x42,0x42,0x90c,0x90f,0x915,0x912,0x42,0x42,0x42,0x42,0x42,0x42, +0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x870,0x870,0x816,0x816,0x816,0x816, +0x918,0x918,0x918,0x918,0x918,0x918,0x915,0x915,0x90c,0x90c,0x42,0x42,0x42,0x42,0x42,0x42, +#else /* U_DARWIN */ +0x94e,0x94e,0x42,0x94e,0x94e,0x94e,0x951,0x94e,0x42,0x94e,0x94e,0x42,0x94b,0x942,0x942,0x942, +0x942,0x94b,0x942,0x42,0x42,0x42,0x942,0x945,0x94b,0x948,0x42,0x42,0x42,0x42,0x42,0x42, +0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x8a6,0x8a6,0x84c,0x84c,0x84c,0x84c, +0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94b,0x94b,0x942,0x942,0x42,0x42,0x42,0x42,0x42,0x42, +#endif /* U_DARWIN */ +0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, +#ifndef U_DARWIN +0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x2e5,0x2e5,0x2e5,0x2e5, +0x2e5,0x2e5,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x2e2,0x2e2,0x2e2,0x2e2, +0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2, +0x2e2,0x2e2,0x2e2,0x99c,0x99c,0xb7c,0xb7c,0x2df,0xb7f,0x45,0x45,0x45,0x756,0x756,0x756,0x756, +0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756, +0x756,0x756,0x756,0x756,0x756,0x756,0x48,0x48,0x48,0x48,0x48,0x759,0x75f,0x75f,0x75f,0x48, +0x48,0x48,0x48,0x48,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c, +0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x48,0x48, +0x48,0x48,0x48,0x48,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x4b,0x825,0x825, +0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x4b,0x825,0x4b,0x825,0x825, +0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x4b,0x825,0x825, +0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x4b,0x825,0x825,0x825,0x825,0x4b,0x4b, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x4b,0x825,0x4b,0x825,0x825,0x825,0x825,0x4b,0x4b, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x4b, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85, +0x825,0x4b,0x825,0x825,0x825,0x825,0x4b,0x4b,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, +0x825,0x825,0x825,0x4b,0x4b,0x4b,0x4b,0xc24,0xb82,0x873,0x81f,0x81c,0x81c,0x81c,0x81c,0x81f, +0x81f,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x819,0x819,0x819,0x819,0x819,0x819, +0x819,0x819,0x819,0x819,0x819,0x4b,0x4b,0x4b,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828, +0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x4e,0x4e,0x4e, +0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x51,0x831,0x831,0x831,0x831,0x831,0x831,0x831, +0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831, +0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x82b,0x82e,0x831,0x831,0x831,0x831,0x831, +0x831,0x831,0x831,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x876,0x834,0x834,0x834, +0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834, +0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x903,0x891,0x54,0x54,0x54,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x879,0x879,0x879,0x837,0x837,0x837,0x57,0x57,0x57, +0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x92d,0x92d,0x92d,0x92d, +0x92d,0x92d,0x921,0x92d,0x92d,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x927,0x92a, +0x87f,0x87f,0x8f1,0x930,0x87c,0x83a,0x87f,0x906,0x930,0xb5b,0x5a,0x5a,0x8fd,0x8fd,0x8fd,0x8fd, +0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0xaa7,0xaa7,0xaa7,0xaa7, +0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x83d,0x83d,0x882,0x885, +0x888,0x882,0x88e,0x83d,0x888,0x88b,0x83d,0x8bb,0x8bb,0x8bb,0x8c7,0x5d,0x900,0x900,0x900,0x900, +0x900,0x900,0x900,0x900,0x900,0x900,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x2ee,0x2e8,0x2ee,0x2e8, +0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8, +0x2ee,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2eb,0x77d,0x60,0x60,0x60,0x60,0x2ee,0x2e8,0x2ee,0x2e8, +0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8, +0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x60,0x60,0x60,0x60,0x60,0x60,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x63,0x63,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x63,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x63,0x2fa,0x63,0x2fa,0x63,0x2fa,0x63,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x63,0x63,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f4,0x2f7,0x2f4,0x2f4,0x2f1,0x2f7,0x2f7, +0x2f7,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f1,0x2f1,0x2f1,0x2f7,0x2f7,0x2f7,0x2f7, +0x63,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x2f1,0x2f1,0x2f1,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f1,0x2f1,0x2f1,0x63,0x63,0x2f7,0x2f7, +0x2f7,0x63,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f1,0x2f4,0x63,0xa71,0x99f,0x99f,0x99f, +0x66,0x66,0x66,0x66,0x66,0x66,0x528,0x528,0x528,0x528,0x528,0x528,0x30c,0x9ab,0x69,0x69, +0x1a1,0x30c,0x30c,0x30c,0x30c,0x30c,0x312,0x318,0x312,0x693,0x45c,0x1a4,0x309,0x19e,0x19e,0x19e, +0x19e,0x309,0x309,0x309,0x309,0x309,0x30f,0x315,0x30f,0x690,0x459,0x69,0xb8b,0xb8b,0xb8b,0xb8b, +0xb8b,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x6e1,0x6e1,0x6e1,0x6e1, +0x6e1,0x6e1,0x6e1,0x6bd,0x6e4,0x6f6,0x6e1,0x7b6,0x7cb,0x909,0x909,0x909,0xa6e,0xa6e,0xc7e,0xc7e, +0xc7e,0xc7e,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c, +0x6c,0x6c,0x6c,0x6c,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531, +0x531,0x52e,0x52e,0x52e,0x52e,0x531,0x8be,0x8be,0xa11,0xa17,0xa17,0xa14,0xa14,0xa14,0xa14,0xc27, +0xd11,0xd11,0xd11,0xd11,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x6f,0x6f,0x9b4,0x9b1,0x9b1,0x9b1,0x9b1,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9ae,0x9b1, +0xb8e,0xca2,0xca5,0x72,0x75,0x75,0x75,0x3e7,0x1b3,0x16b,0x33c,0x33c,0x33c,0x33c,0x33c,0x1b3, +0x3e7,0x3e7,0x1b3,0x33c,0x342,0x342,0x342,0x84f,0xca8,0x75,0x75,0x75,0x75,0x75,0x75,0x75, +0x75,0x75,0x75,0x75,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x351,0x351, +0x348,0x348,0x348,0x348,0xcae,0xcae,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0x78,0x78,0x78,0x78, +#else /* U_DARWIN */ +0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x2e8,0x2e8,0x2e8,0x2e8, +0x2e8,0x2e8,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x2e5,0x2e5,0x2e5,0x2e5, +0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5, +0x2e5,0x2e5,0x2e5,0x9d2,0x9d2,0xbb2,0xbb2,0x2e2,0xbb5,0x45,0x45,0x45,0x78c,0x78c,0x78c,0x78c, +0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, +0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x48,0x48,0x48,0x48,0x48,0x78f,0x795,0x795,0x795,0x48, +0x48,0x48,0x48,0x48,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792, +0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x48,0x48, +0x48,0x48,0x48,0x48,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x4b,0x85b,0x85b, +0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x4b,0x85b,0x4b,0x85b,0x85b, +0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x4b,0x85b,0x85b, +0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x4b,0x85b,0x85b,0x85b,0x85b,0x4b,0x4b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x4b,0x85b,0x4b,0x85b,0x85b,0x85b,0x85b,0x4b,0x4b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x4b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb, +0x85b,0x4b,0x85b,0x85b,0x85b,0x85b,0x4b,0x4b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b, +0x85b,0x85b,0x85b,0x4b,0x4b,0x4b,0x4b,0xc5a,0xbb8,0x8a9,0x855,0x852,0x852,0x852,0x852,0x855, +0x855,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f, +0x84f,0x84f,0x84f,0x84f,0x84f,0x4b,0x4b,0x4b,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e, +0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x4e,0x4e,0x4e, +0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x51,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x861,0x864,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x8ac,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x939,0x8c7,0x54,0x54,0x54,0x86d,0x86d,0x86d,0x86d, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x8af,0x8af,0x8af,0x86d,0x86d,0x86d,0x57,0x57,0x57, +0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x963,0x963,0x963,0x963, +0x963,0x963,0x957,0x963,0x963,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x960, +0x8b5,0x8b5,0x927,0x966,0x8b2,0x870,0x8b5,0x93c,0x966,0xb91,0x5a,0x5a,0x933,0x933,0x933,0x933, +0x933,0x933,0x933,0x933,0x933,0x933,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x873,0x873,0x8b8,0x8bb, +0x8be,0x8b8,0x8c4,0x873,0x8be,0x8c1,0x873,0x8f1,0x8f1,0x8f1,0x8fd,0x5d,0x936,0x936,0x936,0x936, +0x936,0x936,0x936,0x936,0x936,0x936,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x876,0x876,0x876,0x876, +0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876, +0x876,0x876,0x876,0x876,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x2f1,0x2eb,0x2f1,0x2eb, +0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb, +0x2f1,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2ee,0x7b3,0x60,0x60,0x60,0x60,0x2f1,0x2eb,0x2f1,0x2eb, +0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb, +0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x60,0x60,0x60,0x60,0x60,0x60,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x63,0x63,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x63,0x63,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x2fd,0x63,0x2fd,0x63,0x2fd,0x63,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x63,0x63,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f7,0x2fa,0x2f7,0x2f7,0x2f4,0x2fa,0x2fa, +0x2fa,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0x2f4,0x2f4,0x2fa,0x2fa,0x2fa,0x2fa, +0x63,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x63,0x2f4,0x2f4,0x2f4,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0x2f4,0x2f4,0x63,0x63,0x2fa,0x2fa, +0x2fa,0x63,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2f4,0x2f7,0x63,0xaa7,0x9d5,0x9d5,0x9d5, +0x66,0x66,0x66,0x66,0x66,0x66,0x543,0x543,0x543,0x543,0x543,0x543,0x30f,0x9e1,0x69,0x69, +0x1a1,0x30f,0x30f,0x30f,0x30f,0x30f,0x315,0x31b,0x315,0x6c3,0x471,0x1a4,0x30c,0x19e,0x19e,0x19e, +0x19e,0x30c,0x30c,0x30c,0x30c,0x30c,0x312,0x318,0x312,0x6c0,0x46e,0x69,0xbc1,0xbc1,0xbc1,0xbc1, +0xbc1,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x714,0x714,0x714,0x714, +0x714,0x714,0x714,0x6f0,0x717,0x72c,0x714,0x7ec,0x801,0x93f,0x93f,0x93f,0xaa4,0xaa4,0xcb4,0xcb4, +0xcb4,0xcb4,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c, +0x6c,0x6c,0x6c,0x6c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c,0x54c, +0x54c,0x549,0x549,0x549,0x549,0x54c,0x8f4,0x8f4,0xa47,0xa4d,0xa4d,0xa4a,0xa4a,0xa4a,0xa4a,0xc5d, +0xd47,0xd47,0xd47,0xd47,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x6f,0x6f,0x9ea,0x9e7,0x9e7,0x9e7,0x9e7,0x9f0,0x9ed,0x9ed,0x9ed,0x9ed,0x9e4,0x9e7, +0xbc4,0xcd8,0xcdb,0x72,0x75,0x75,0x75,0x3f0,0x1b3,0x16b,0x33f,0x33f,0x33f,0x33f,0x33f,0x1b3, +0x3f0,0x3f0,0x1b3,0x33f,0x345,0x345,0x345,0x885,0xcde,0x75,0x75,0x75,0x75,0x75,0x75,0x75, +0x75,0x75,0x75,0x75,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x354,0x354, +0x34b,0x34b,0x34b,0x34b,0xce4,0xce4,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0x78,0x78,0x78,0x78, +#endif /* U_DARWIN */ +0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78, +#ifndef U_DARWIN +0x78,0x78,0x78,0x78,0x363,0x363,0x363,0x363,0x363,0x858,0x858,0x7b,0x7b,0x7b,0x7b,0x7b, +#else /* U_DARWIN */ +0x78,0x78,0x78,0x78,0x366,0x366,0x366,0x366,0x366,0x88e,0x88e,0x7b,0x7b,0x7b,0x7b,0x7b, +#endif /* U_DARWIN */ +0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b, +#ifndef U_DARWIN +0x7b,0x7b,0x7b,0x7b,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x7e, +#else /* U_DARWIN */ +0x7b,0x7b,0x7b,0x7b,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x7e, +#endif /* U_DARWIN */ +0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e, +#ifndef U_DARWIN +0x7e,0x7e,0x7e,0x7e,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xab9,0xab9, +0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0x81,0x81,0x81,0xab9,0xab9,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xcb1,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, +#else /* U_DARWIN */ +0x7e,0x7e,0x7e,0x7e,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xaef,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd, +0xbcd,0x81,0x81,0x81,0xaef,0xaef,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd, +0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xce7,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, +#endif /* U_DARWIN */ +0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81, +#ifndef U_DARWIN +0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x375,0x375,0x375,0x375,0x84,0x375,0x375, +0x375,0x375,0x84,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x3ed,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x375,0x84,0x375, +0x375,0x375,0x375,0x84,0x84,0x84,0x375,0x84,0x375,0x375,0x375,0x70e,0x70e,0x70e,0x70e,0x84, +0x84,0x375,0x55b,0x55b,0x375,0x375,0x375,0x375,0xa5c,0xa02,0xa5c,0xa02,0xa5c,0xa02,0xa5c,0xa02, +0xa5c,0xa02,0xa5c,0xa02,0xa5c,0xa02,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +#else /* U_DARWIN */ +0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x84,0x378,0x378,0x378,0x378,0x84,0x378,0x378, +0x378,0x378,0x84,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x3f6,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x378,0x84,0x378, +0x378,0x378,0x378,0x84,0x84,0x84,0x378,0x84,0x378,0x378,0x378,0x744,0x744,0x744,0x744,0x84, +0x84,0x378,0x57c,0x57c,0x378,0x378,0x378,0x378,0xa92,0xa38,0xa92,0xa38,0xa92,0xa38,0xa92,0xa38, +0xa92,0xa38,0xa92,0xa38,0xa92,0xa38,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +#endif /* U_DARWIN */ +0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174,0x174, +#ifndef U_DARWIN +0x174,0x174,0x174,0x174,0x375,0x84,0x84,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x84,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0, +0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0, +0x8d0,0x8d0,0x87,0x8d0,0x8d0,0x8d0,0x8d0,0x8d3,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0, +0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d3,0x87,0x87,0x87,0x87, +0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8a,0x8a, +0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x90,0x642,0x5b5,0x642,0x5b5,0x642,0x5b5,0x642, +0x5b5,0x642,0x5b5,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5, +0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b5,0x5b5,0x5b5,0x642,0x5b5,0x642,0x5b5,0x642, +0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x642,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b8,0xa53,0xa53,0x90, +0x90,0x549,0x549,0x63f,0x63f,0x645,0x648,0xa38,0x93,0x93,0x93,0x93,0x93,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x93,0x93,0x93,0x96,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x96, +0x5ca,0x5ca,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, +0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9, +0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0xb40,0xb40,0x9c, +0x5d3,0x5d3,0x5d3,0x5d3,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, +0xb3d,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, +0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x9c, +0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8, +0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, +0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60, +0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xa2,0xa2,0xa2,0xa2, +#else /* U_DARWIN */ +0x174,0x174,0x174,0x174,0x378,0x84,0x84,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x84,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906, +0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906, +0x906,0x906,0x87,0x906,0x906,0x906,0x906,0x909,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906, +0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x909,0x87,0x87,0x87,0x87, +0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x8a,0x8a, +0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x90,0x66c,0x5dc,0x66c,0x5dc,0x66c,0x5dc,0x66c, +0x5dc,0x66c,0x5dc,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc, +0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x66c,0x5dc,0x66c,0x5dc,0x66c, +0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x66c,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0xa89,0xa89,0x90, +0x90,0x56a,0x56a,0x669,0x669,0x66f,0x672,0xa6e,0x93,0x93,0x93,0x93,0x93,0x5e8,0x5e8,0x5e8, +0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8, +0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x93,0x93,0x93,0x96,0x5eb,0x5eb,0x5eb, +0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x96, +0x5f1,0x5f1,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4, +0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b, +0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, +0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600, +0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0xb76,0xb76,0x9c, +0x5fa,0x5fa,0x5fa,0x5fa,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c, +0xb73,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x9c, +0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e, +0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, +0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96, +0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xa2,0xa2,0xa2,0xa2, +#endif /* U_DARWIN */ +0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, +#ifndef U_DARWIN +0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x8eb,0x8eb,0x8eb,0x8eb, +0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0xa5,0xa5,0xa5,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x5e8,0x5eb,0x5e8,0x5eb, +0x5eb,0x5e8,0x5e8,0x5eb,0x5eb,0x5eb,0x5e8,0x5e8,0x5e8,0x5e8,0xae,0xae,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xae, +0xae,0xae,0xae,0xae,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63, +0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xae,0xae, +#else /* U_DARWIN */ +0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0x921,0x921,0x921,0x921, +0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0xa5,0xa5,0xa5,0x924,0x924,0x924,0x924, +0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x60f,0x612,0x60f,0x612, +0x612,0x60f,0x60f,0x612,0x612,0x612,0x60f,0x60f,0x60f,0x60f,0xae,0xae,0xa7a,0xa7a,0xa7a,0xa7a, +0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xae, +0xae,0xae,0xae,0xae,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99, +0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xae,0xae, +#endif /* U_DARWIN */ +0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, +0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, +#ifndef U_DARWIN +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0x378,0x378,0x378,0x378,0x378,0xb1,0xb1,0xb1,0xb1,0xb1,0x864,0x534,0x37e, +0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x37b,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e, +0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0xb1,0x37e,0x37e,0x37e,0x37e,0x37e,0xb1,0x37e,0xb1, +0x37e,0x37e,0xb1,0x37e,0x37e,0xb1,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x381, +0x393,0x38d,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d, +0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d, +0x393,0x38d,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x393, +0x38d,0x393,0x393,0x38d,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0x390,0x38d,0x390,0x390,0x390,0x390,0x390,0x390,0x38d,0x390,0x38d,0x38d, +0x390,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x390,0x390,0x38d, +0x390,0x390,0x390,0x390,0xb4,0xb4,0x390,0x390,0x390,0x390,0x38d,0x38d,0x390,0x38d,0x38d,0x38d, +0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x390,0x390,0x38d,0x38d,0xb4,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936, +0x936,0x936,0x936,0x936,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x38a,0x38a, +0xa6b,0xabc,0xb4,0xb4,0x537,0x537,0x537,0x537,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7, +0xb7,0xb7,0xb7,0xb7,0x5f1,0x5f4,0x5f4,0x5fa,0x5fa,0x6ab,0x486,0x6ab,0x486,0x6ab,0x486,0x6ab, +0x486,0x6ab,0x486,0x6ab,0x486,0x6ae,0x489,0x6ae,0x489,0xa47,0xa47,0xb52,0xb10,0x5ee,0x5ee,0x5ee, +0x5ee,0x5f7,0x5f7,0x5f7,0x48f,0x603,0x492,0xba,0x65a,0x65a,0x564,0x564,0x600,0x6b1,0x48c,0x6b1, +0x48c,0x6b1,0x48c,0x5fd,0x5fd,0x606,0x606,0x609,0x606,0x606,0x606,0xba,0x606,0x705,0x6d8,0x5fd, +0xba,0xba,0xba,0xba,0x399,0x3a5,0x399,0x9d2,0x399,0xbd,0x399,0x3a5,0x399,0x3a5,0x399,0x3a5, +0x399,0x3a5,0x399,0x3a5,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f, +0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2, +0x39c,0xbd,0xbd,0x753,0x6cf,0x6f9,0x585,0x588,0x57c,0x6f9,0x6f9,0xc3,0x3f0,0x3f3,0x3f3,0x3f3, +0x3f3,0x3f0,0x3f0,0xc3,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x8c1,0x8c1,0x8c1, +0x7c8,0x1ef,0x165,0x165,0xc3,0x55e,0x582,0x57c,0x6f9,0x6cf,0x57c,0x582,0x69c,0x46b,0x57c,0x585, +0x46e,0x57f,0x471,0x57c,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x636,0x636, +0x585,0x585,0x585,0x55e,0x3f9,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0xc3,0xc3,0xc3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0xc3,0xc3,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0xc3,0xc3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0xc3,0xc3,0x3f6,0x3f6, +0x3f6,0xc3,0xc3,0xc3,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, +0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, +0x942,0x942,0x942,0xc6,0x93f,0x93f,0x93f,0x93f,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945, +0x945,0x945,0x945,0x945,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e, +0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc, +0xcc,0xcc,0xcc,0xcc,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xcf,0xcf,0xcf,0x951,0x951, +0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, +0x951,0x951,0x951,0x951,0x954,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, +0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, +0x951,0x951,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf, +#else /* U_DARWIN */ +0x390,0x390,0x390,0x390,0x390,0x390,0x390,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0x381,0x381,0x381,0x381,0x381,0xb1,0xb1,0xb1,0xb1,0xb1,0x89a,0x552,0x387, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x384,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0xb1,0x387,0x387,0x387,0x387,0x387,0xb1,0x387,0xb1, +0x387,0x387,0xb1,0x387,0x387,0xb1,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x38a, +0x39c,0x396,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396, +0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396, +0x39c,0x396,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c, +0x396,0x39c,0x39c,0x396,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0x399,0x396,0x399,0x399,0x399,0x399,0x399,0x399,0x396,0x399,0x396,0x396, +0x399,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x396,0x396,0x399,0x396,0x399,0x399,0x399,0x396, +0x399,0x399,0x399,0x399,0xb4,0xb4,0x399,0x399,0x399,0x399,0x396,0x396,0x399,0x396,0x396,0x396, +0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x399,0x399,0x396,0x396,0xb4,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, +0x96c,0x96c,0x96c,0x96c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x393,0x393, +0xaa1,0xaf2,0xb4,0xb4,0x555,0x555,0x555,0x555,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7, +0xb7,0xb7,0xb7,0xb7,0x618,0x61b,0x61b,0x621,0x621,0x6de,0x4a1,0x6de,0x4a1,0x6de,0x4a1,0x6de, +0x4a1,0x6de,0x4a1,0x6de,0x4a1,0x6e1,0x4a4,0x6e1,0x4a4,0xa7d,0xa7d,0xb88,0xb46,0x615,0x615,0x615, +0x615,0x61e,0x61e,0x61e,0x4aa,0x62a,0x4ad,0xba,0x68a,0x68a,0x585,0x585,0x627,0x6e4,0x4a7,0x6e4, +0x4a7,0x6e4,0x4a7,0x624,0x624,0x62d,0x62d,0x630,0x62d,0x62d,0x62d,0xba,0x62d,0x73b,0x70b,0x624, +0xba,0xba,0xba,0xba,0x3a2,0x3ae,0x3a2,0xa08,0x3a2,0xbd,0x3a2,0x3ae,0x3a2,0x3ae,0x3a2,0x3ae, +0x3a2,0x3ae,0x3a2,0x3ae,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8, +0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab, +0x3a5,0xbd,0xbd,0x789,0x702,0x72f,0x5ac,0x5af,0x5a3,0x72f,0x72f,0xc3,0x3fc,0x3ff,0x3ff,0x3ff, +0x3ff,0x3fc,0x3fc,0xc3,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x8f7,0x8f7,0x8f7, +0x7fe,0x1ef,0x165,0x165,0xc3,0x57f,0x5a9,0x5a3,0x72f,0x702,0x5a3,0x5a9,0x6cf,0x483,0x5a3,0x5ac, +0x486,0x5a6,0x489,0x5a3,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x660,0x660, +0x5ac,0x5ac,0x5ac,0x57f,0x405,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402, +0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402,0x402, +0x402,0x402,0x402,0xc3,0xc3,0xc3,0x402,0x402,0x402,0x402,0x402,0x402,0xc3,0xc3,0x402,0x402, +0x402,0x402,0x402,0x402,0xc3,0xc3,0x402,0x402,0x402,0x402,0x402,0x402,0xc3,0xc3,0x402,0x402, +0x402,0xc3,0xc3,0xc3,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0xc6,0x975,0x975,0x975,0x975,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984, +0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc, +0xcc,0xcc,0xcc,0xcc,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0xcf,0xcf,0xcf,0x987,0x987, +0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0x987,0x987,0x98a,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf, +#endif /* U_DARWIN */ +0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf, +#ifndef U_DARWIN +0xcf,0xcf,0xcf,0xcf,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95d,0xd2,0x95d,0x95d,0xd2,0xd2,0x95d,0xd2,0xd2,0x95d,0x95d,0xd2,0xd2,0x95d,0x95d,0x95d, +0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0xd2,0x95a, +0xd2,0x95a,0x95a,0x95a,0x95a,0xac5,0x95a,0x95a,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0xd2, +0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0xd2,0x95d, +0x95d,0x95d,0x95d,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0xd2,0x95d,0xd2,0xd2,0xd2,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0xd2,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0xb9a,0xb9a,0xd2,0xd2,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95a,0x95a,0x95a,0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0xcb7,0xcb4,0xd2,0xd2,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0xd5,0x972,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5, +#else /* U_DARWIN */ +0xcf,0xcf,0xcf,0xcf,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0x993,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0xd2,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x993,0x993,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x993,0xd2,0x993,0x993,0xd2,0xd2,0x993,0xd2,0xd2,0x993,0x993,0xd2,0xd2,0x993,0x993,0x993, +0x993,0xd2,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x990,0x990,0x990,0x990,0xd2,0x990, +0xd2,0x990,0x990,0x990,0x990,0xafb,0x990,0x990,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0x993,0x993,0x993,0x990,0x990,0x990,0x990,0x993,0x993,0xd2,0x993,0x993,0x993,0x993,0xd2, +0xd2,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0xd2,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x993,0x993,0xd2,0x993, +0x993,0x993,0x993,0xd2,0x993,0x993,0x993,0x993,0x993,0xd2,0x993,0xd2,0xd2,0xd2,0x993,0x993, +0x993,0x993,0x993,0x993,0x993,0xd2,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0xbd0,0xbd0,0xd2,0xd2,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x990,0x990,0x990,0x98d,0x990,0x990,0x990,0x990,0x990,0x990,0xced,0xcea,0xd2,0xd2,0x9b1,0x9b1, +0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, +0xd5,0x9a8,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5, +#endif /* U_DARWIN */ +0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5, +#ifndef U_DARWIN +0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5,0x9d8,0x9d5, +0xcbd,0xcba,0xcbd,0xcba,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8, +0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0xdb,0x9db,0x9db, +0x9db,0x9db,0xa1a,0xa1a,0xa1d,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, +0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de, +0x9de,0x9de,0xa20,0xa20,0xa23,0x9ff,0x9ff,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde, +0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1, +0x9e1,0x9e1,0xa26,0xa26,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1, +0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0xe4,0x9e4,0x9e4, +0x9e4,0xe4,0xa29,0xa29,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, +0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xc75,0xc12,0xcc0,0xcc0,0xcc0,0xcc0,0xe7,0xe7,0xe7,0xe7,0xe7, +0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7, +0x9e7,0x9e7,0xa65,0xa0b,0xa65,0xa0b,0xa65,0xa0b,0xe7,0xe7,0xe7,0xe7,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0xacb,0xacb,0xacb,0xacb, +0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb, +0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xea,0xea,0xea,0xb28,0xb28,0xb28,0xb2e, +0xb2e,0xb2e,0xb2e,0xb28,0xb28,0xb2e,0xb2e,0xb2e,0xea,0xea,0xea,0xea,0xb2e,0xb2e,0xb28,0xb2e, +0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2b,0xb2b,0xb2b,0xea,0xea,0xea,0xea,0xac8,0xea,0xea,0xea, +0xb37,0xb37,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb5e,0xb5e,0xb5e,0xb5e, +0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xed,0xed, +0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xba6,0xba6, +0xba6,0xba6,0xba6,0xba6,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xf0,0xf0,0xf0,0xf0,0xf0, +0xcc3,0xcc3,0xcc3,0xcc3,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, +#else /* U_DARWIN */ +0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b,0xa0e,0xa0b, +0xcf3,0xcf0,0xcf3,0xcf0,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8, +0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xdb,0xa11,0xa11, +0xa11,0xa11,0xa50,0xa50,0xa53,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, +0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14, +0xa14,0xa14,0xa56,0xa56,0xa59,0xa35,0xa35,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde, +0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17, +0xa17,0xa17,0xa5c,0xa5c,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1, +0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xe4,0xa1a,0xa1a, +0xa1a,0xe4,0xa5f,0xa5f,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, +0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xcab,0xc48,0xcf6,0xcf6,0xcf6,0xcf6,0xe7,0xe7,0xe7,0xe7,0xe7, +0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, +0xa1d,0xa1d,0xa9b,0xa41,0xa9b,0xa41,0xa9b,0xa41,0xe7,0xe7,0xe7,0xe7,0xa20,0xa20,0xa20,0xa20, +0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xb01,0xb01,0xb01,0xb01, +0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01, +0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xea,0xea,0xea,0xb5e,0xb5e,0xb5e,0xb64, +0xb64,0xb64,0xb64,0xb5e,0xb5e,0xb64,0xb64,0xb64,0xea,0xea,0xea,0xea,0xb64,0xb64,0xb5e,0xb64, +0xb64,0xb64,0xb64,0xb64,0xb64,0xb61,0xb61,0xb61,0xea,0xea,0xea,0xea,0xafe,0xea,0xea,0xea, +0xb6d,0xb6d,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb94,0xb94,0xb94,0xb94, +0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xed,0xed, +0xb94,0xb94,0xb94,0xb94,0xb94,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed, +0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xbdc,0xbdc, +0xbdc,0xbdc,0xbdc,0xbdc,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xf0,0xf0,0xf0,0xf0,0xf0, +0xcf9,0xcf9,0xcf9,0xcf9,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, +#endif /* U_DARWIN */ +0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, +#ifndef U_DARWIN +0xf0,0xf0,0xf0,0xf0,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xf3,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xaef,0xaef,0xf3,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xf3, +0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xf3,0xf3, +#else /* U_DARWIN */ +0xf0,0xf0,0xf0,0xf0,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xf3,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xb25,0xb25,0xf3,0xb25, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xf3, +0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xf3,0xf3, +#endif /* U_DARWIN */ +0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3, +0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3, +#ifndef U_DARWIN +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xf6,0xf6,0xf6,0xf6,0xf6, +0xb0a,0xb0a,0xb0a,0xf9,0xf9,0xf9,0xf9,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5, +0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5, +0xf9,0xf9,0xf9,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf8,0xaf8,0xaf8,0xaf8, +0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8, +0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xfc,0xb0d,0xafe,0xafe,0xafe,0xafe, +0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, +0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xff,0xff,0xb01,0xb01,0xb01,0xb01, +0xb01,0xb01,0x102,0x102,0xb01,0x102,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01, +0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0x102,0xb01, +0xb01,0x102,0x102,0x102,0xb01,0x102,0x102,0xb01,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04, +0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0x105, +0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2, +0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e, +0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8, +0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xc2d, +0xc2d,0xc30,0xc30,0xc30,0x111,0x111,0xbfd,0xbb5,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66, +0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, +0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59, +0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xc33,0xc33,0xc33,0xc33,0xd14,0xd14,0xd14,0xd14, +0xd14,0xd14,0xd14,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117, +#else /* U_DARWIN */ +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xf6,0xf6,0xf6,0xf6,0xf6, +0xb40,0xb40,0xb40,0xf9,0xf9,0xf9,0xf9,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, +0xf9,0xf9,0xf9,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2e,0xb2e,0xb2e,0xb2e, +0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e, +0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xfc,0xb43,0xb34,0xb34,0xb34,0xb34, +0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xff,0xff,0xb37,0xb37,0xb37,0xb37, +0xb37,0xb37,0x102,0x102,0xb37,0x102,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37, +0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0x102,0xb37, +0xb37,0x102,0x102,0x102,0xb37,0x102,0x102,0xb37,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x105, +0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, +0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e, +0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0x10e,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee, +0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xc63, +0xc63,0xc66,0xc66,0xc66,0x111,0x111,0xc33,0xbeb,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c, +0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, +0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f, +0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xc69,0xc69,0xc69,0xc69,0xd4a,0xd4a,0xd4a,0xd4a, +0xd4a,0xd4a,0xd4a,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117, +#endif /* U_DARWIN */ +0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117, +#ifndef U_DARWIN +0x117,0x117,0xd14,0xd14,0xbc1,0xbbe,0xbc1,0xbbe,0xbbe,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0x11a, +0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xc00,0xc00,0xc00, +0xc00,0xbbb,0xc00,0xc00,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4, +0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0x11d,0x11d,0x11d,0x11d,0x11d, +0x11d,0x11d,0x11d,0x11d,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0x11d,0xbc4,0xbc4,0xbc4,0xbc4, +0xbc4,0xbc4,0xbc4,0x11d,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0x11d,0xbc4,0xbc4,0xbc4,0xbc4, +0xbc4,0xbc4,0xbc4,0x11d,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, +0xbca,0xbca,0xbca,0xbca,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0x120,0x120, +0x120,0x120,0x120,0x120,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0x123,0x123,0x123,0x123,0x123,0x123, +0x123,0x123,0x123,0x123,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4, +0xbf4,0xbf4,0xbf4,0xbf4,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3, +0xbd3,0xbd3,0xbd3,0x126,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, +0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, +0xbd0,0xbd0,0xbd0,0x126,0xbd9,0xc39,0xc39,0xc39,0x129,0xc39,0xc39,0x129,0x129,0x129,0x129,0x129, +0xc39,0xc39,0xc39,0xc39,0xbd9,0xbd9,0xbd9,0xbd9,0x129,0xbd9,0xbd9,0xbd9,0x129,0xbd9,0xbd9,0xbd9, +0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, +0xbd9,0xbd9,0xbd9,0xbd9,0x129,0x129,0x129,0x129,0xc36,0xc36,0xc36,0x129,0x129,0x129,0x129,0xc3c, +0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129, +0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xbd6,0x129,0x129,0x129,0x129,0x129,0x129,0x129, +0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc, +0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xcc6,0xcc6,0xcc6,0xcc6,0x12c,0x12c,0x12c,0x12c,0x12c, +0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, +0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, +0xc87,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc87,0xc87,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0x12f,0x12f,0x12f,0x12f,0xc84,0xc84, +0xbdf,0xbdf,0xbdf,0xbdf,0x132,0x132,0x132,0x132,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf, +0xc06,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, +0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc09,0xc09, +0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xbeb,0xc0c,0x135,0x135,0x135,0x135,0xc81,0xc81,0x135,0x135, +#else /* U_DARWIN */ +0x117,0x117,0xd4a,0xd4a,0xbf7,0xbf4,0xbf7,0xbf4,0xbf4,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0x11a, +0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xc36,0xc36,0xc36, +0xc36,0xbf1,0xc36,0xc36,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa, +0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x11d,0x11d,0x11d,0x11d,0x11d, +0x11d,0x11d,0x11d,0x11d,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x11d,0xbfa,0xbfa,0xbfa,0xbfa, +0xbfa,0xbfa,0xbfa,0x11d,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0x11d,0xbfa,0xbfa,0xbfa,0xbfa, +0xbfa,0xbfa,0xbfa,0x11d,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0x120,0x120, +0x120,0x120,0x120,0x120,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0x123,0x123,0x123,0x123,0x123,0x123, +0x123,0x123,0x123,0x123,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a, +0xc2a,0xc2a,0xc2a,0xc2a,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, +0xc09,0xc09,0xc09,0x126,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06, +0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06, +0xc06,0xc06,0xc06,0x126,0xc0f,0xc6f,0xc6f,0xc6f,0x129,0xc6f,0xc6f,0x129,0x129,0x129,0x129,0x129, +0xc6f,0xc6f,0xc6f,0xc6f,0xc0f,0xc0f,0xc0f,0xc0f,0x129,0xc0f,0xc0f,0xc0f,0x129,0xc0f,0xc0f,0xc0f, +0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, +0xc0f,0xc0f,0xc0f,0xc0f,0x129,0x129,0x129,0x129,0xc6c,0xc6c,0xc6c,0x129,0x129,0x129,0x129,0xc72, +0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc0c,0x129,0x129,0x129,0x129,0x129,0x129,0x129, +0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, +0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xcfc,0xcfc,0xcfc,0xcfc,0x12c,0x12c,0x12c,0x12c,0x12c, +0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, +0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd, +0xcbd,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcbd,0xcbd,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, +0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0x12f,0x12f,0x12f,0x12f,0xcba,0xcba, +0xc15,0xc15,0xc15,0xc15,0x132,0x132,0x132,0x132,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15, +0xc3c,0xc15,0xc15,0xc15,0xc15,0xc15,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, +0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xcb7,0xc3f,0xc3f, +0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc21,0xc42,0x135,0x135,0x135,0x135,0xcb7,0xcb7,0x135,0x135, +#endif /* U_DARWIN */ +0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, +0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, +#ifndef U_DARWIN +0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xbf7, +#else /* U_DARWIN */ +0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0xc2d, +#endif /* U_DARWIN */ +0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b, +#ifndef U_DARWIN +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xc6c,0xc15,0xc15,0xc6c,0xc6c,0xc57,0xc57,0xc78,0xc18,0xc69,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, +0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xd17,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xccf,0xccf,0xcc9,0xcc9,0xd2f,0xd29,0xcd2,0x141,0x141,0x141,0x141,0x141, +0xd23,0xd23,0xd1a,0xd23,0xd26,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0x144,0x144,0x144,0x144, +0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xcff,0xcff,0xcf9,0xcfc,0xcff,0xcff, +0xcf9,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d, +0xd1d,0xd1d,0xd1d,0xd1d,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0x144,0x144,0x144, +0xce1,0xcde,0xce1,0xce1,0xce1,0xcde,0xcde,0xce1,0xcde,0xce1,0xcde,0xce1,0xcde,0x147,0x147,0x147, +0x147,0x147,0x147,0x147,0xcde,0xce1,0xcde,0xcde,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, +0xce4,0xce4,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a, +#else /* U_DARWIN */ +0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65,0xa65, +0xca2,0xc4b,0xc4b,0xca2,0xca2,0xc8d,0xc8d,0xcae,0xc4e,0xc9f,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, +0xd4d,0xd4d,0xd4d,0xd4d,0xd05,0xd05,0xcff,0xcff,0xd65,0xd5f,0xd08,0x141,0x141,0x141,0x141,0x141, +0xd59,0xd59,0xd50,0xd59,0xd5c,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0x144,0x144,0x144,0x144, +0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd35,0xd35,0xd2f,0xd32,0xd35,0xd35, +0xd2f,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0x144,0x144,0x144, +0xd17,0xd14,0xd17,0xd17,0xd17,0xd14,0xd14,0xd17,0xd14,0xd17,0xd14,0xd17,0xd14,0x147,0x147,0x147, +0x147,0x147,0x147,0x147,0xd14,0xd17,0xd14,0xd14,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, +0xd1a,0xd1a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a, +#endif /* U_DARWIN */ +0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a, +#ifndef U_DARWIN +0x14a,0x14a,0x14a,0x14a,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7, +0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xd08,0xd08,0xd2c,0xd2c,0x14d,0x14d,0x14d,0x14d, +0x14d,0x14d,0x14d,0x14d,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced, +0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xcea,0xcea,0xcea,0xcea,0x150,0x150, +0x150,0x150,0x150,0xd02,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, +0xcf0,0xcf0,0xcf0,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153, +#else /* U_DARWIN */ +0x14a,0x14a,0x14a,0x14a,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d, +0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd3e,0xd3e,0xd62,0xd62,0x14d,0x14d,0x14d,0x14d, +0x14d,0x14d,0x14d,0x14d,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd20,0xd20,0xd20,0xd20,0x150,0x150, +0x150,0x150,0x150,0xd38,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26, +0xd26,0xd26,0xd26,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153, +#endif /* U_DARWIN */ +0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153, +#ifndef U_DARWIN +0x153,0x153,0x153,0x153,0xcf3,0xcf3,0xcf3,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, +0x156,0x156,0x156,0x156,0xd05,0xd05,0xd05,0xd05,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, +0x156,0x156,0x156,0x156,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6, +0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159, +#else /* U_DARWIN */ +0x153,0x153,0x153,0x153,0xd29,0xd29,0xd29,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, +0x156,0x156,0x156,0x156,0xd3b,0xd3b,0xd3b,0xd3b,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, +0x156,0x156,0x156,0x156,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c, +0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159,0x159, +#endif /* U_DARWIN */ +0x159,0x159,0x159,0x159,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c, +0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x15c, +#ifndef U_DARWIN +0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x765,0x765,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975, +0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x15f, +0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x162,0x162,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168, +#else /* U_DARWIN */ +0x15c,0x15c,0x15c,0x15c,0x15c,0x15c,0x79b,0x79b,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x15f, +0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x162,0x162,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168, +#endif /* U_DARWIN */ +0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168, +#ifndef U_DARWIN +0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, +0x1d4,0x1d4,0x16e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x981,0x981,0x981,0xb07,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x171,0x369,0x369,0x369, +0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x22b,0x22b,0x225,0x225,0x3c9,0x225,0x22e,0x18f, +0x44a,0x18f,0x18f,0x18f,0x44a,0x18f,0x22e,0x22e,0x192,0x231,0x225,0x225,0x225,0x225,0x225,0x225, +0x18c,0x18c,0x18c,0x18c,0x228,0x18c,0x225,0x867,0x195,0x195,0x3de,0x2fd,0x60c,0x60c,0x60c,0x43e, +0x453,0x453,0x522,0x522,0x522,0x522,0x522,0x8ca,0x6c3,0x6b4,0x6c6,0x6c9,0x6ba,0x6c3,0x6b7,0x6b7, +0x2fd,0x70b,0x70b,0x195,0x627,0x624,0x3e1,0x303,0x432,0x432,0x435,0x435,0x435,0x435,0x435,0x56a, +0x435,0x435,0x435,0x74d,0x52b,0x52b,0x525,0x525,0x444,0x56d,0x438,0x441,0x423,0x198,0x19b,0x300, +0x711,0x714,0x68d,0x70b,0x711,0x711,0x68d,0x70b,0x31e,0x31e,0x333,0x6cc,0x31b,0x1a7,0x31e,0x32a, +0x31b,0x6cc,0x32d,0x333,0x333,0x333,0x32d,0x32d,0x333,0x333,0x333,0x1ad,0x31b,0x333,0x6f3,0x31b, +0x327,0x333,0x333,0x333,0x333,0x333,0x31b,0x31b,0x321,0x1a7,0x1aa,0x31b,0x333,0x31b,0x3e4,0x31b, +0x333,0x324,0x339,0x1b0,0x333,0x333,0x327,0x32d,0x333,0x333,0x336,0x333,0x32d,0x330,0x330,0x330, +0x330,0x84c,0x849,0xab0,0xb91,0x9b7,0x9ba,0x9ba,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, +0x1b9,0x1b9,0x1b9,0x1b9,0x345,0x345,0x345,0x345,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6, +0x1b6,0x1b6,0x33f,0x33f,0x33f,0x33f,0x33f,0x33f,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348, +0x348,0x348,0x348,0x348,0x348,0x34b,0x351,0x351,0x348,0x348,0x1bf,0x348,0x1bf,0x348,0x348,0x348, +0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x1c2,0x354,0x1c2,0x1c2,0x357,0x354,0x354,0x1c2, +0x1c2,0x357,0x354,0x1c2,0x357,0x354,0x354,0x1c2,0x354,0x1c2,0x6ea,0x6e7,0x354,0x1c2,0x354,0x354, +0x354,0x354,0x1c2,0x354,0x354,0x1c2,0x1c2,0x1c2,0x1c2,0x354,0x354,0x1c2,0x357,0x1c2,0x357,0x1c2, +0x1c2,0x1c2,0x1c2,0x1c2,0x1c8,0x35a,0x1c2,0x35a,0x35a,0x354,0x354,0x354,0x1c2,0x1c2,0x1c2,0x1c2, +0x354,0x354,0x354,0x354,0x1c2,0x1c2,0x354,0x354,0x354,0x357,0x354,0x354,0x357,0x354,0x354,0x357, +0x1c2,0x357,0x354,0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,0x1c2,0x354,0x354,0x354,0x354,0x354, +0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x1c5,0x1c2,0x357,0x354,0x1c2,0x1c2,0x1c2,0x1c2, +0x354,0x354,0x1c2,0x1c2,0x354,0x357,0x1c5,0x1c5,0x357,0x357,0x354,0x354,0x357,0x357,0x354,0x354, +0x357,0x357,0x354,0x354,0x354,0x354,0x354,0x354,0x357,0x357,0x1c2,0x1c2,0x357,0x357,0x1c2,0x1c2, +0x357,0x357,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x1c2,0x354,0x354, +0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x1c2,0x354,0x354,0x354,0x354,0x354,0x354, +0x357,0x357,0x357,0x357,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354, +0x354,0x354,0x354,0x1c2,0x35d,0x855,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x360,0x360,0x360,0x360, +0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x1cb,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d, +0x35d,0x35d,0x35d,0x35d,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +#else /* U_DARWIN */ +0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b, +0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b, +0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, +0x1d4,0x1d4,0x16e,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7, +0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0xb3d,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x171,0x36c,0x36c,0x36c, +0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x22e,0x22e,0x228,0x228,0x3d2,0x228,0x231,0x18f, +0x45f,0x18f,0x18f,0x18f,0x45f,0x18f,0x231,0x231,0x192,0x234,0x228,0x228,0x228,0x228,0x228,0x228, +0x18c,0x18c,0x18c,0x18c,0x22b,0x18c,0x228,0x89d,0x195,0x195,0x3e7,0x300,0x633,0x633,0x633,0x450, +0x468,0x468,0x53d,0x53d,0x53d,0x53d,0x53d,0x900,0x6f6,0x6e7,0x6f9,0x6fc,0x6ed,0x6f6,0x6ea,0x6ea, +0x300,0x741,0x741,0x195,0x651,0x64e,0x3ea,0x306,0x444,0x444,0x447,0x447,0x447,0x447,0x447,0x58b, +0x447,0x447,0x447,0x783,0x546,0x546,0x540,0x540,0x456,0x58e,0x44a,0x453,0x435,0x198,0x19b,0x303, +0x747,0x74a,0x6bd,0x741,0x747,0x747,0x6bd,0x741,0x321,0x321,0x336,0x6ff,0x31e,0x1a7,0x321,0x32d, +0x31e,0x6ff,0x330,0x336,0x336,0x336,0x330,0x330,0x336,0x336,0x336,0x1ad,0x31e,0x336,0x729,0x31e, +0x32a,0x336,0x336,0x336,0x336,0x336,0x31e,0x31e,0x324,0x1a7,0x1aa,0x31e,0x336,0x31e,0x3ed,0x31e, +0x336,0x327,0x33c,0x1b0,0x336,0x336,0x32a,0x330,0x336,0x336,0x339,0x336,0x330,0x333,0x333,0x333, +0x333,0x882,0x87f,0xae6,0xbc7,0x9ed,0x9f0,0x9f0,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, +0x1b9,0x1b9,0x1b9,0x1b9,0x348,0x348,0x348,0x348,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6, +0x1b6,0x1b6,0x342,0x342,0x342,0x342,0x342,0x342,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b, +0x34b,0x34b,0x34b,0x34b,0x34b,0x34e,0x354,0x354,0x34b,0x34b,0x1bf,0x34b,0x1bf,0x34b,0x34b,0x34b, +0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x1c2,0x357,0x1c2,0x1c2,0x35a,0x357,0x357,0x1c2, +0x1c2,0x35a,0x357,0x1c2,0x35a,0x357,0x357,0x1c2,0x357,0x1c2,0x71d,0x71a,0x357,0x1c2,0x357,0x357, +0x357,0x357,0x1c2,0x357,0x357,0x1c2,0x1c2,0x1c2,0x1c2,0x357,0x357,0x1c2,0x35a,0x1c2,0x35a,0x1c2, +0x1c2,0x1c2,0x1c2,0x1c2,0x1c8,0x35d,0x1c2,0x35d,0x35d,0x357,0x357,0x357,0x1c2,0x1c2,0x1c2,0x1c2, +0x357,0x357,0x357,0x357,0x1c2,0x1c2,0x357,0x357,0x357,0x35a,0x357,0x357,0x35a,0x357,0x357,0x35a, +0x1c2,0x35a,0x357,0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,0x1c2,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x1c5,0x1c2,0x35a,0x357,0x1c2,0x1c2,0x1c2,0x1c2, +0x357,0x357,0x1c2,0x1c2,0x357,0x35a,0x1c5,0x1c5,0x35a,0x35a,0x357,0x357,0x35a,0x35a,0x357,0x357, +0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x35a,0x35a,0x1c2,0x1c2,0x35a,0x35a,0x1c2,0x1c2, +0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x1c2,0x357,0x357, +0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x1c2,0x357,0x357,0x357,0x357,0x357,0x357, +0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x1c2,0x360,0x88b,0x360,0x360,0x360,0x360,0x360,0x360,0x363,0x363,0x363,0x363, +0x360,0x360,0x360,0x360,0x360,0x360,0x1cb,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360, +0x360,0x360,0x360,0x360,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +#endif /* U_DARWIN */ +0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce, +0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce, +0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7, +0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d4,0x1d4,0x1d4,0x1d4, +0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1da,0x1da,0x1da,0x1da, +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +#ifndef U_DARWIN +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x369,0x369,0x369,0x369, +#else /* U_DARWIN */ +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x36c,0x36c,0x36c,0x36c, +#endif /* U_DARWIN */ +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd, +#ifndef U_DARWIN +0x36c,0x36c,0x1dd,0x1dd,0x1dd,0x1dd,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9, +0x1e0,0x1e0,0x36f,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, +0x36f,0x36f,0x1e0,0x1e0,0x36f,0x36f,0x1e0,0x1e3,0x36f,0x36f,0x36f,0x36f,0x1e0,0x1e0,0x36f,0x36f, +0x1e0,0x1e3,0x36f,0x36f,0x36f,0x36f,0x1e0,0x1e0,0x1e0,0x36f,0x36f,0x1e0,0x36f,0x36f,0x1e0,0x1e0, +0x1e0,0x1e0,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, +0x36f,0x36f,0x1e0,0x1e0,0x1e0,0x1e0,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x1e0, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc, +0x372,0x372,0x372,0x372,0x372,0x1e6,0x1e6,0x372,0x372,0x1e6,0x372,0x372,0x372,0x372,0x1e6,0x1e6, +0x372,0x372,0x372,0x372,0xa74,0xa74,0x97e,0x97e,0xb97,0x85e,0x372,0x372,0x1e6,0x372,0x1e6,0x372, +0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372, +0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x1e6,0x1e6,0x372,0x1e6, +0x1e6,0x1e6,0x372,0x1e6,0x1e6,0x1e6,0x1e6,0x372,0x1e6,0x1e6,0x372,0x1e9,0x85e,0x85e,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xb97,0xb97,0x207,0x3b7,0x207,0x1fe, +0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x204,0x3b4,0x207,0x3b7, +0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x3b7,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x3bd,0x3b4, +0x207,0x1fe,0x207,0x3b7,0x207,0x1fe,0x207,0x1fe,0x207,0x3b4,0x3c0,0x3ba,0x207,0x1fe,0x207,0x1fe, +0x3b4,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x3c0,0x3ba,0x3bd,0x3b4,0x207,0x3b7,0x207,0x1fe,0x207, +0x3b7,0x3ba,0x3bd,0x3b4,0x207,0x3b7,0x207,0x1fe,0x207,0x1fe,0x3bd,0x3b4,0x207,0x1fe,0x207,0x1fe, +0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x3bd,0x3b4,0x207,0x1fe,0x207,0x3b7, +0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x1fe,0x207,0x207,0x1fe,0x207, +0x1fe,0x207,0x1fe,0x201,0x20a,0x216,0x216,0x20a,0x216,0x20a,0x216,0x216,0x20a,0x216,0x216,0x216, +0x20a,0x20a,0x216,0x216,0x216,0x216,0x20a,0x216,0x216,0x20a,0x216,0x216,0x216,0x20a,0x20a,0x20a, +0x216,0x216,0x20a,0x216,0x219,0x20d,0x216,0x20a,0x216,0x20a,0x216,0x216,0x20a,0x216,0x20a,0x20a, +0x216,0x20a,0x216,0x219,0x20d,0x216,0x216,0x216,0x20a,0x216,0x20a,0x216,0x216,0x20a,0x20a,0x213, +0x216,0x20a,0x20a,0x20a,0x213,0x213,0x213,0x213,0x21c,0x21c,0x210,0x21c,0x21c,0x210,0x21c,0x21c, +0x210,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219,0x3c3,0x219, +0x3c3,0x20a,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x216,0x20a,0x219,0x20d,0x219,0x20d,0x219,0x20d, +0x219,0x20d,0x219,0x20d,0x20d,0x21c,0x21c,0x210,0x219,0x20d,0x7d4,0x7d4,0x7d7,0x7d1,0x219,0x20d, +0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d, +0x219,0x20d,0x219,0x20d,0x219,0x20d,0x219,0x20d,0x7d7,0x7d1,0x7d7,0x7d1,0x7d4,0x7ce,0x7d7,0x7d1, +0xb61,0xb64,0xc8d,0xc90,0xc90,0xc90,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d, +0x21f,0x3c6,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f, +0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f, +0x222,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x7da,0x7da,0x7da, +0x7da,0x7da,0xa7a,0xa7a,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x22e,0x22e,0x22e, +0x22e,0x22e,0x22e,0x22e,0x234,0x234,0x234,0x234,0x234,0x225,0x225,0x225,0x225,0x225,0x7dd,0x7dd, +0x7dd,0x7dd,0x7e0,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d, +0xa7d,0xa7d,0xa7d,0xa7d,0x255,0x7e3,0x23d,0x23a,0x23d,0x23a,0x23d,0x23a,0x23d,0x23a,0x23d,0x23a, +0x23d,0x23a,0x23d,0x23a,0x25b,0x25b,0x252,0x24c,0x93c,0x939,0x987,0xa83,0xa80,0xa86,0xa83,0xa80, +0xb67,0xb6a,0xb6a,0xb6a,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2, +0x3d2,0x3d2,0x3d2,0x3d2,0x7e9,0x3d5,0x264,0x267,0x264,0x264,0x264,0x267,0x264,0x264,0x264,0x264, +0x267,0x7e9,0x267,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264, +0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26d,0x267,0x26a,0x264,0x26a,0x264, +0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264, +0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x264,0x26a,0x26d,0x267,0x26a, +0x264,0x993,0x990,0x26a,0x264,0x993,0x990,0x26a,0x264,0x993,0x990,0xc96,0x26d,0x267,0x26d,0x267, +0x26a,0x264,0x26d,0x267,0x26a,0x264,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26a,0x264,0x26d,0x267, +0x7ef,0x7e9,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0xb70,0xb6d,0x26d,0x267,0xc99,0xc96, +0xc99,0xc96,0xc99,0xc96,0x7ef,0x3db,0x26a,0x26d,0x26a,0x26a,0x26a,0x26d,0x26a,0x26a,0x26a,0x26a, +0x26d,0x7ef,0x26d,0x26a,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3db,0x3d8,0x3d8, +0x3d8,0x3d8,0x3d8,0x3d8,0x29d,0x29a,0x29d,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x7f5,0x29a,0x29a,0x29a,0x29d,0x558,0x29a,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa, +0x4aa,0x291,0x4a7,0x4ad,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x555,0x660, +0x660,0x297,0x996,0x996,0x4a1,0x29a,0x29a,0x29a,0x29a,0x2a0,0x2a0,0x2a0,0x2a0,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x29a,0x4ad,0x4aa,0x4aa,0x4aa,0x4aa,0x2a3,0x2a3,0x4aa,0x4aa,0x297,0x4ad,0x4ad, +0x4ad,0x4aa,0xa8f,0xa8f,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x7f5,0x7f5, +0x7f5,0x7f2,0x7f2,0xa8f,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x29a,0x7f5,0x7f5,0x29a,0x29a,0x29a,0x29a,0x29a,0x7f5,0x2e5,0x2e5,0x2e5,0x2e5, +0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5, +0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2ee,0x2e8,0x2ee,0x2e8, +0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8, +0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2ee,0x2e8,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0x2f7,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x306,0x2fd,0x2fd,0x2fd, +0x615,0x68a,0x456,0xa4a,0x8f4,0x8f4,0x846,0x846,0x846,0x846,0x9a2,0x9a2,0x9a2,0x9a2,0x9a8,0xaaa, +0xaad,0xb88,0xbfa,0x9a5,0xbfa,0xbfa,0xbfa,0xbfa,0xb88,0xbfa,0xbfa,0x9fc,0x34e,0x348,0x348,0x34e, +0x348,0x348,0x34e,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x351,0x348,0x348,0x348,0x348,0x348, +0x348,0x348,0x348,0x348,0x3ea,0x3ea,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x348,0x3ea, +0x348,0x348,0x348,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x9bd,0x9bd,0x9bd,0x9bd, +0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354, +0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354, +0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x357,0x357,0x357,0x357,0x354,0x354,0x354,0x354, +0x354,0x354,0x357,0x357,0x357,0x357,0x354,0x354,0x354,0x354,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, +0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x360,0x360,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d, +0x35d,0x6a2,0x477,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d, +0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d, +0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x855,0x9c6,0x855,0x855,0x855,0x363,0x363,0x363,0x363, +0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363, +0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x372,0x372,0x372,0x372, +0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372, +0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x393,0x393,0x393,0x393, +0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x396,0x393,0x38d, +0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d, +0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,0x38d, +0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d, +0x390,0x396,0x393,0x38d,0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x390,0x396, +0x390,0x396,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d,0x393,0x38d, +0x390,0x393,0x38d,0x390,0x393,0x38d,0x390,0x396,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x390, +0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x390,0x390,0x390,0x390,0x390,0x390, +0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x38d,0x393,0x696,0x45f,0x390,0x390,0x38d,0x390, +0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x390, +0x38d,0x38d,0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d, +0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d, +0x390,0x390,0x38d,0x38d,0x390,0x38d,0x390,0x38d,0x38d,0x38d,0x38d,0x38d,0x390,0x390,0x390,0x390, +0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390, +0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x390,0x396, +0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +#else /* U_DARWIN */ +0x36f,0x36f,0x1dd,0x1dd,0x1dd,0x1dd,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff, +0x1e0,0x1e0,0x372,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x372,0x372,0x372,0x372,0x372,0x372, +0x372,0x372,0x1e0,0x1e0,0x372,0x372,0x1e0,0x1e3,0x372,0x372,0x372,0x372,0x1e0,0x1e0,0x372,0x372, +0x1e0,0x1e3,0x372,0x372,0x372,0x372,0x1e0,0x1e0,0x1e0,0x372,0x372,0x1e0,0x372,0x372,0x1e0,0x1e0, +0x1e0,0x1e0,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372, +0x372,0x372,0x1e0,0x1e0,0x1e0,0x1e0,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x1e0, +0x891,0x891,0x891,0x891,0x891,0x891,0x891,0x891,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, +0x375,0x375,0x375,0x375,0x375,0x1e6,0x1e6,0x375,0x375,0x1e6,0x375,0x375,0x375,0x375,0x1e6,0x1e6, +0x375,0x375,0x375,0x375,0xaaa,0xaaa,0x9b4,0x9b4,0xbcd,0x894,0x375,0x375,0x1e6,0x375,0x1e6,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x1e6,0x1e6,0x375,0x1e6, +0x1e6,0x1e6,0x375,0x1e6,0x1e6,0x1e6,0x1e6,0x375,0x1e6,0x1e6,0x375,0x1e9,0x894,0x894,0xa05,0xa05, +0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xbcd,0xbcd,0x720,0x42f,0x432,0x432, +0x432,0x432,0x432,0x432,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f, +0x49e,0x49e,0x49e,0x59d,0x687,0x45c,0x684,0x1f2,0x5a0,0x636,0x6cc,0x480,0x20a,0x3c0,0x20a,0x201, +0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x207,0x3bd,0x20a,0x3c0, +0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x3c0,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x3c6,0x3bd, +0x20a,0x201,0x20a,0x3c0,0x20a,0x201,0x20a,0x201,0x20a,0x3bd,0x3c9,0x3c3,0x20a,0x201,0x20a,0x201, +0x3bd,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x3c9,0x3c3,0x3c6,0x3bd,0x20a,0x3c0,0x20a,0x201,0x20a, +0x3c0,0x3c3,0x3c6,0x3bd,0x20a,0x3c0,0x20a,0x201,0x20a,0x201,0x3c6,0x3bd,0x20a,0x201,0x20a,0x201, +0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x3c6,0x3bd,0x20a,0x201,0x20a,0x3c0, +0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x201,0x20a,0x20a,0x201,0x20a, +0x201,0x20a,0x201,0x204,0x20d,0x219,0x219,0x20d,0x219,0x20d,0x219,0x219,0x20d,0x219,0x219,0x219, +0x20d,0x20d,0x219,0x219,0x219,0x219,0x20d,0x219,0x219,0x20d,0x219,0x219,0x219,0x20d,0x20d,0x20d, +0x219,0x219,0x20d,0x219,0x21c,0x210,0x219,0x20d,0x219,0x20d,0x219,0x219,0x20d,0x219,0x20d,0x20d, +0x219,0x20d,0x219,0x21c,0x210,0x219,0x219,0x219,0x20d,0x219,0x20d,0x219,0x219,0x20d,0x20d,0x216, +0x219,0x20d,0x20d,0x20d,0x216,0x216,0x216,0x216,0x21f,0x21f,0x213,0x21f,0x21f,0x213,0x21f,0x21f, +0x213,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c,0x3cc,0x21c, +0x3cc,0x20d,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x219,0x20d,0x21c,0x210,0x21c,0x210,0x21c,0x210, +0x21c,0x210,0x21c,0x210,0x210,0x21f,0x21f,0x213,0x21c,0x210,0x80a,0x80a,0x80d,0x807,0x21c,0x210, +0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210, +0x21c,0x210,0x21c,0x210,0x21c,0x210,0x21c,0x210,0x80d,0x807,0x80d,0x807,0x80a,0x804,0x80d,0x807, +0xb97,0xb9a,0xcc3,0xcc6,0xcc6,0xcc6,0xcc6,0xcc3,0xcc6,0xcc3,0xcc6,0xcc3,0xcc6,0xcc3,0xcc6,0xcc3, +0x222,0x3cf,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, +0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, +0x225,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x810,0x810,0x810, +0x810,0x810,0xab0,0xab0,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x231,0x231,0x231, +0x231,0x231,0x231,0x231,0x237,0x237,0x237,0x237,0x237,0x228,0x228,0x228,0x228,0x228,0x813,0x813, +0x813,0x813,0x816,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3, +0xab3,0xab3,0xab3,0xab3,0x258,0x819,0x240,0x23d,0x240,0x23d,0x240,0x23d,0x240,0x23d,0x240,0x23d, +0x240,0x23d,0x240,0x23d,0x25e,0x25e,0x255,0x24f,0x972,0x96f,0x9bd,0xab9,0xab6,0xabc,0xab9,0xab6, +0xb9d,0xba0,0xba0,0xba0,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db, +0x3db,0x3db,0x3db,0x3db,0x81f,0x3de,0x267,0x26a,0x267,0x267,0x267,0x26a,0x267,0x267,0x267,0x267, +0x26a,0x81f,0x26a,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267, +0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x270,0x26a,0x26d,0x267,0x26d,0x267, +0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267, +0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x267,0x26d,0x270,0x26a,0x26d, +0x267,0x9c9,0x9c6,0x26d,0x267,0x9c9,0x9c6,0x26d,0x267,0x9c9,0x9c6,0xccc,0x270,0x26a,0x270,0x26a, +0x26d,0x267,0x270,0x26a,0x26d,0x267,0x270,0x26a,0x270,0x26a,0x270,0x26a,0x26d,0x267,0x270,0x26a, +0x825,0x81f,0x270,0x26a,0x270,0x26a,0x270,0x26a,0x270,0x26a,0xba6,0xba3,0x270,0x26a,0xccf,0xccc, +0xccf,0xccc,0xccf,0xccc,0x825,0x3e4,0x26d,0x270,0x26d,0x26d,0x26d,0x270,0x26d,0x26d,0x26d,0x26d, +0x270,0x825,0x270,0x26d,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e4,0x3e1,0x3e1, +0x3e1,0x3e1,0x3e1,0x3e1,0x2a0,0x29d,0x2a0,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x82b,0x29d,0x29d,0x29d,0x2a0,0x579,0x29d,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5, +0x4c5,0x294,0x4c2,0x4c8,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x576,0x690, +0x690,0x29a,0x9cc,0x9cc,0x4bc,0x29d,0x29d,0x29d,0x29d,0x2a3,0x2a3,0x2a3,0x2a3,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x29d,0x4c8,0x4c5,0x4c5,0x4c5,0x4c5,0x2a6,0x2a6,0x4c5,0x4c5,0x29a,0x4c8,0x4c8, +0x4c8,0x4c5,0xac5,0xac5,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x82b,0x82b, +0x82b,0x828,0x828,0xac5,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d, +0x29d,0x29d,0x29d,0x29d,0x82b,0x82b,0x29d,0x29d,0x29d,0x29d,0x29d,0x82b,0x2e8,0x2e8,0x2e8,0x2e8, +0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2f1,0x2eb,0x2f1,0x2eb, +0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb, +0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2f1,0x2eb,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fa,0x2fa,0x2fa,0x2fa, +0x2fa,0x2fa,0x2fa,0x2fa,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x2fd,0x309,0x300,0x300,0x300, +0x63f,0x6ba,0x46b,0xa80,0x92a,0x92a,0x87c,0x87c,0x87c,0x87c,0x9d8,0x9d8,0x9d8,0x9d8,0x9de,0xae0, +0xae3,0xbbe,0xc30,0x9db,0xc30,0xc30,0xc30,0xc30,0xbbe,0xc30,0xc30,0xa32,0x351,0x34b,0x34b,0x351, +0x34b,0x34b,0x351,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x354,0x34b,0x34b,0x34b,0x34b,0x34b, +0x34b,0x34b,0x34b,0x34b,0x3f3,0x3f3,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x3f3, +0x34b,0x34b,0x34b,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357, +0x357,0x357,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6, +0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x363,0x363,0x360,0x360,0x360,0x360,0x360,0x360, +0x360,0x6d5,0x48f,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360, +0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x360, +0x360,0x360,0x360,0x360,0x360,0x360,0x360,0x88b,0x9fc,0x88b,0x88b,0x88b,0x366,0x366,0x366,0x366, +0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366, +0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, +0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x37b,0x37b,0x37b,0x37b, +0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b, +0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x3f9,0x3f9,0x3f9,0x3f9, +0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x42f,0x42f,0x37e,0x37b, +0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f, +0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x37e,0x37e,0x37e,0x37e,0x37e,0x54f,0x5a0,0x687,0x687,0x687, +0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687, +0x687,0x687,0x687,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x37b,0x39c,0x39c,0x39c,0x39c, +0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c, +0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x393,0x393,0x393,0x393,0x393,0x393, +#endif /* U_DARWIN */ +0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396, +#ifndef U_DARWIN +0x396,0x396,0x396,0x396,0x396,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +0x3a2,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x3a2, +0x39c,0x39f,0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f, +0x3a5,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f, +0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f, +0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3a5,0x3a2,0x39c,0x39f,0x3d8,0x3d8,0x3d8,0x3d8, +0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d2,0x3d2,0x3d2,0x3d2, +0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d5,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0xa08,0x468,0x699,0x462, +0x465,0x62a,0x3fc,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x633,0x630,0x3fc,0x3fc,0x3fc, +0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc, +0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x62d,0x62d, +0x78c,0x78c,0xc1b,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, +0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0xd0b,0x49e,0x49e,0x49e,0x429,0x49e, +0x57c,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597, +0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x69c,0x585,0x46b,0x58b,0x58e, +0x588,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594, +0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x69c,0x585,0x46b,0x585,0xa62, +0x579,0x480,0x483,0x5a6,0x5a0,0x63c,0x5ac,0x5b2,0x6a5,0x47a,0x6a5,0x47a,0x6a8,0x47d,0x6a8,0x47d, +0x6a5,0x47a,0x5a6,0x5a6,0x6a5,0x47a,0x6a5,0x47a,0x6a5,0x47a,0x6a5,0x47a,0x639,0x6a8,0x47d,0x47d, +0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a, +0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a,0x53a, +0x543,0x543,0x53a,0x53d,0x53d,0x540,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0x8c4,0xa32, +0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xc4e,0xc4e,0xc4e,0xc4e,0xc5a,0xb3a,0xb3a,0xb3a, +0x5a6,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x546,0x546,0x546,0x546,0x546,0x546, +0x5a9,0x5af,0x5af,0x5af,0x5af,0x5af,0x5a3,0x5a0,0x8e2,0x8e2,0x8e2,0xa50,0xa4d,0xa35,0x8df,0x576, +0x5b8,0x5b5,0x5b8,0x642,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b8,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5, +0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b8,0x5b8,0x5b5,0x5b5, +0xa56,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x5bb,0x5be,0x5bb,0x5be,0x5bb, +0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb, +0x5be,0x5bb,0x5be,0x651,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5be,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb, +0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5be,0x5be,0x5bb,0x5bb, +0x5bb,0x5bb,0x5bb,0x651,0x5bb,0x651,0x5bb,0x651,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x651,0x5bb, +0x5bb,0x5bb,0x5bb,0x5bb,0x5be,0x651,0x651,0x5be,0x5be,0x5be,0x5be,0x64b,0x64e,0x654,0x657,0xa3b, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c7,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5dc,0x5dc,0x5dc,0x5dc, +0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, +0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0xb43,0xb43,0xc5d,0x5d0,0x5d3,0x5d3,0x5d3,0x5d3, +0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3, +0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0xb3d,0xb3d,0xb3d,0xb3d, +0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, +0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, +0x5d6,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, +0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df, +0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0xb46, +0xb46,0xb46,0xb46,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df, +0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df, +0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0xb46,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, +0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, +0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0xb46,0xb46,0x5e5,0x5e5,0x5e5,0x5e5, +0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5, +0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e8,0x5e8,0x5e8,0x5e8, +0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8, +0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5eb,0x5eb, +0x5e8,0x5eb,0x5e8,0x5eb,0x5eb,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5eb, +0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756, +0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756, +0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c, +0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c,0x75c, +0x762,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e, +0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e, +0x76e,0x76e,0x768,0x768,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, +0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, +0x771,0x771,0x76b,0x76b,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e, +0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e, +0x76e,0x76e,0x76e,0x76e,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, +0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, +0x771,0x771,0x771,0x771,0x777,0x786,0x786,0x786,0x786,0x774,0x786,0x786,0x7ad,0x786,0x786,0x780, +0x7aa,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7ad,0x774,0x7a4,0x774,0x774,0x774,0x79b,0x79b,0x774,0x774, +0x774,0x774,0x774,0x774,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x774,0x774, +0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x780,0x79b,0x774,0x79b,0x774,0x79b,0x7b3,0x789, +0x7b3,0x789,0x7a1,0x7a1,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9, +0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9, +0x7b9,0x7b9,0x7b9,0x7b9,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc, +0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc, +0x7bc,0x7bc,0x7bc,0x7bc,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7c2,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5, +0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5, +0x7c2,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5, +0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x7c5,0x984,0xa77,0x7d4,0x7ce, +0x7d4,0x7ce,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1, +0xa77,0xa77,0xa77,0xb61,0xb61,0xb61,0xb64,0xb64,0xb61,0xb64,0xb64,0xb61,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0xa92,0xa92,0xa92,0x8a0,0x8a0,0x8a0,0x8a0, +0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x8a0,0x807,0x807,0x807,0x807, +0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807, +0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x825,0x825,0x825,0x825, +0x825,0x825,0x825,0xb85,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0xb85,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, +0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828, +0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828, +0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831, +0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831, +0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x843,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861, +0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861, +0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0, +0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0, +0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d0,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8, +0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8, +0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, +0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8f7,0x8eb,0x8eb, +0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, +0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, +0x8ee,0x8ee,0xa41,0xa41,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0xa41,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918, +0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918, +0x930,0x930,0x930,0x933,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930, +0x930,0x930,0x930,0x930,0x91e,0x91e,0x92d,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x92d,0x92d, +0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930, +0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930, +0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0xac2,0xac2,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, +0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, +0x948,0x948,0xabf,0xabf,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb, +0xafb,0xafb,0xafb,0xafb,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b, +0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b, +0x94b,0x94b,0x94b,0x94b,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e, +#else /* U_DARWIN */ +0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x399,0x39f,0x39c,0x396, +0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396, +0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,0x396, +0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396, +0x399,0x39f,0x39c,0x396,0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x399,0x39f, +0x399,0x39f,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396,0x39c,0x396, +0x399,0x39c,0x396,0x399,0x39c,0x396,0x399,0x39f,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396, +0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x399, +0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c, +0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x396,0x396,0x396,0x396,0x396,0x396,0x396, +0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x399,0x399,0x399,0x399,0x399,0x399,0x399, +0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x396,0x39c,0x6c6,0x474,0x399,0x399,0x396,0x399, +0x396,0x399,0x396,0x396,0x399,0x396,0x396,0x399,0x396,0x399,0x396,0x396,0x399,0x396,0x399,0x399, +0x396,0x396,0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x396, +0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396,0x396, +0x399,0x399,0x396,0x396,0x399,0x396,0x399,0x396,0x396,0x396,0x396,0x396,0x399,0x399,0x399,0x399, +0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399, +0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x39f, +0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c, +0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c, +0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f, +0x39f,0x39f,0x39f,0x39f,0x39f,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c, +0x3ab,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3ab, +0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8, +0x3ae,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8, +0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8, +0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3ae,0x3ab,0x3a5,0x3a8,0x3e1,0x3e1,0x3e1,0x3e1, +0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3db,0x3db,0x3db,0x3db, +0x3db,0x3db,0x3db,0x3db,0x3db,0x3de,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3f9,0x3f9,0x3f9,0x3f9, +0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x3f9,0x564,0x564,0x564,0x564, +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0xa3e,0x47d,0x6c9,0x477, +0x47a,0x654,0x408,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65d,0x65a,0x408,0x408,0x408, +0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x657,0x657, +0x7c2,0x7c2,0xc51,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2, +0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0xd41,0x4b9,0x4b9,0x4b9,0x43b,0x4b9, +0x5a3,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be, +0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x6cf,0x5ac,0x483,0x5b2,0x5b5, +0x5af,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb, +0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x6cf,0x5ac,0x483,0x5ac,0xa98, +0x59a,0x498,0x49b,0x5cd,0x5c7,0x666,0x5d3,0x5d9,0x6d8,0x492,0x6d8,0x492,0x6db,0x495,0x6db,0x495, +0x6d8,0x492,0x5cd,0x5cd,0x6d8,0x492,0x6d8,0x492,0x6d8,0x492,0x6d8,0x492,0x663,0x6db,0x495,0x495, +0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, +0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, +0x561,0x561,0x558,0x55b,0x55b,0x55e,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0xa68, +0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xc84,0xc84,0xc84,0xc84,0xc90,0xb70,0xb70,0xb70, +0x5cd,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x567,0x567,0x567,0x567,0x567,0x567, +0x5d0,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5ca,0x5c7,0x918,0x918,0x918,0xa86,0xa83,0xa6b,0x915,0x597, +0x5df,0x5dc,0x5df,0x66c,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, +0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5dc,0x5dc, +0xa8c,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2, +0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2, +0x5e5,0x5e2,0x5e5,0x67b,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e5,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, +0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e5,0x5e5,0x5e2,0x5e2, +0x5e2,0x5e2,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x67b,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x67b,0x5e2, +0x5e2,0x5e2,0x5e2,0x5e2,0x5e5,0x67b,0x67b,0x5e5,0x5e5,0x5e5,0x5e5,0x675,0x678,0x67e,0x681,0xa71, +0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb, +0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb, +0x5ee,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb, +0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x5eb,0x603,0x603,0x603,0x603, +0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0xb79,0xb79,0xc93,0x5f7,0x5fa,0x5fa,0x5fa,0x5fa, +0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa, +0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0xb73,0xb73,0xb73,0xb73, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74, +0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609, +0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606, +0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x609,0x609,0x609,0x609,0x609,0x609,0xb7c, +0xb7c,0xb7c,0xb7c,0x609,0x609,0x609,0x609,0x609,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606, +0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606, +0x606,0x606,0x606,0x606,0x606,0x606,0x606,0xb7c,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609, +0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609, +0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0xb7c,0xb7c,0x60c,0x60c,0x60c,0x60c, +0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c, +0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60f,0x60f,0x60f,0x60f, +0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f, +0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x612,0x612, +0x60f,0x612,0x60f,0x612,0x612,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x60f,0x612, +0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, +0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, +0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792, +0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792, +0x798,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795, +0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795, +0x795,0x795,0x795,0x795,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x79e,0x79e,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a1,0x7a1,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a7,0x7a7,0x7ad,0x7bc,0x7bc,0x7bc,0x7bc,0x7aa,0x7bc,0x7bc,0x7e3,0x7bc,0x7bc,0x7b6, +0x7e0,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7e3,0x7aa,0x7da,0x7aa,0x7aa,0x7aa,0x7d1,0x7d1,0x7aa,0x7aa, +0x7aa,0x7aa,0x7aa,0x7aa,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7e6,0x7aa,0x7aa, +0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7b6,0x7d1,0x7aa,0x7d1,0x7aa,0x7d1,0x7e9,0x7bf, +0x7e9,0x7bf,0x7d7,0x7d7,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef, +0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef, +0x7ef,0x7ef,0x7ef,0x7ef,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5, +0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5, +0x7f5,0x7f5,0x7f5,0x7f5,0x7f8,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, +0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, +0x7f8,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, +0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x9ba,0xaad,0x80a,0x804, +0x80a,0x804,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d,0x807, +0xaad,0xaad,0xaad,0xb97,0xb97,0xb97,0xb9a,0xb9a,0xb97,0xb9a,0xb9a,0xb97,0x83a,0x83a,0x83a,0x83a, +0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0xac8,0xac8,0xac8,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x83d,0x83d,0x83d,0x83d, +0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d, +0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x85b,0x85b,0x85b,0x85b, +0x85b,0x85b,0x85b,0xbbb,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0xbbb,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b, +0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e, +0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e, +0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876, +0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876, +0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x879,0x876,0x876,0x876,0x876, +0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876, +0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b, +0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b,0x88b, +0x88b,0x88b,0x88b,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897, +0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897, +0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x897,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906, +0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906, +0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e, +0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e, +0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921, +0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x92d,0x921,0x921, +0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921, +0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921, +0x924,0x924,0xa77,0xa77,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, +0x924,0x924,0x924,0x924,0xa77,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, +#endif /* U_DARWIN */ +0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e, +#ifndef U_DARWIN +0x94e,0x94e,0x94e,0x94e,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, +0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, +0x951,0x951,0x951,0x951,0x951,0x951,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x963,0x969,0x96f, +0x96f,0x96f,0x951,0x951,0x951,0x96c,0x966,0x966,0x966,0x966,0x966,0x960,0x960,0x960,0x960,0x960, +0x960,0x960,0x960,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x951,0x951,0x96f,0x96f,0x96f, +0x96f,0x96f,0x96f,0x96f,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, +0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x96f,0x96f,0x96f,0x96f,0x951,0x951, +0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x954,0x954,0x954,0x954,0x954, +0x95d,0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x957,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x957,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x957,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, +0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95d,0x95d,0x95d,0x95d,0x972,0x972,0x972,0x972, +0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972, +0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x975,0x975,0x975,0x975, +0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975, +0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x9c6,0x9c6,0x9c6,0x9c6, +0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6, +0x9c3,0x9c3,0x9c3,0x9c6,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, +0x9c3,0x9c3,0x9c3,0xab3,0xab6,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, +0xcae,0xcae,0xcae,0xcae,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed, +0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed, +0x9ed,0x9ed,0x9ed,0x9ed,0x9f0,0x9f0,0x9f0,0xa5f,0xa05,0xa68,0xa0e,0xa5f,0xa05,0xa5f,0xa05,0xa5f, +0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0xa5f,0xa05,0x9f0,0x9f0,0x9f0, +0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0, +0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0, +0xa5f,0xa05,0xa5f,0xa05,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0, +0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0, +0xa5f,0xa05,0x9f0,0x9f0,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f9,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f3,0x9f3,0x9f9,0x9f9,0x9f9,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f3,0x9f3,0x9f6,0x9f3,0x9f3,0x9f3,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace, +0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace, +0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xad4,0xad4, +0xad4,0xad4,0xad4,0xad1,0xae6,0xae6,0xae6,0xae0,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, +0xae6,0xae6,0xae6,0xae0,0xae6,0xae6,0xae6,0xae6,0xada,0xada,0xae3,0xae3,0xae3,0xae3,0xad7,0xad7, +0xad7,0xad7,0xad7,0xadd,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3, +0xba0,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, +0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae0,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, +0xae6,0xae6,0xae6,0xae6,0xae6,0xada,0xada,0xada,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd, +0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec, +0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec, +0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb, +0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb, +0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04, +#else /* U_DARWIN */ +0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e, +0x966,0x966,0x966,0x969,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966, +0x966,0x966,0x966,0x966,0x954,0x954,0x963,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x963,0x963, +0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966, +0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966, +0x981,0x981,0x981,0x981,0x981,0x981,0xaf8,0xaf8,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e, +0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e, +0x97e,0x97e,0xaf5,0xaf5,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31, +0xb31,0xb31,0xb31,0xb31,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984, +0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984,0x984, +0x984,0x984,0x984,0x984,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0x987,0x987,0x987,0x987,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x999,0x99f,0x9a5, +0x9a5,0x9a5,0x987,0x987,0x987,0x9a2,0x99c,0x99c,0x99c,0x99c,0x99c,0x996,0x996,0x996,0x996,0x996, +0x996,0x996,0x996,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x987,0x987,0x9a5,0x9a5,0x9a5, +0x9a5,0x9a5,0x9a5,0x9a5,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x9a5,0x9a5,0x9a5,0x9a5,0x987,0x987, +0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x98a,0x98a,0x98a,0x98a,0x98a, +0x993,0x98d,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x98d,0x990,0x990,0x990,0x990, +0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x98d,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x98d,0x990,0x990,0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x98d,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, +0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x990,0x993,0x993,0x993,0x993,0x9a8,0x9a8,0x9a8,0x9a8, +0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8, +0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0x9b1,0x9b1,0x9b1, +0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, +0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9fc,0x9fc,0x9fc,0x9fc, +0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, +0x9f9,0x9f9,0x9f9,0x9fc,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9, +0x9f9,0x9f9,0x9f9,0xae9,0xaec,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, +0xce4,0xce4,0xce4,0xce4,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa26,0xa26,0xa26,0xa95,0xa3b,0xa9e,0xa44,0xa95,0xa3b,0xa95,0xa3b,0xa95, +0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa95,0xa3b,0xa26,0xa26,0xa26, +0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26, +0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26, +0xa95,0xa3b,0xa95,0xa3b,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26, +0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26, +0xa95,0xa3b,0xa26,0xa26,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa2f,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa2f,0xa2f,0xa2f,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa2c,0xa29,0xa29,0xa29,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a, +0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a, +0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04, +#endif /* U_DARWIN */ +0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04, +#ifndef U_DARWIN +0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe, +0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe, +0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbc1,0xbbe,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd, +0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd, +0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3, +0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3, +0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf, +#else /* U_DARWIN */ +0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb0a,0xb0a, +0xb0a,0xb0a,0xb0a,0xb07,0xb1c,0xb1c,0xb1c,0xb16,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb16,0xb1c,0xb1c,0xb1c,0xb1c,0xb10,0xb10,0xb19,0xb19,0xb19,0xb19,0xb0d,0xb0d, +0xb0d,0xb0d,0xb0d,0xb13,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, +0xbd6,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb16,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb10,0xb10,0xb10,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, +0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, +0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31, +0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31, +0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a, +0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a, +0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf, +#endif /* U_DARWIN */ +0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf, +#ifndef U_DARWIN +0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, +0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, +0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe2,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, +#else /* U_DARWIN */ +0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, +0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe2,0xbe2,0xbe2, +0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, +#endif /* U_DARWIN */ +0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, +#ifndef U_DARWIN +0xbe5,0xbe5,0xbe5,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbf1,0xbf1,0xc48,0xbf1,0xbf1,0xbf1,0xc45,0xbf1, +0xbf1,0xbf1,0xbf1,0xc3f,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4, +0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4, +0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63, +0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63, +0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a, +0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a, +0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32, +0xd32,0xd32,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc, +0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xd1a,0xd1a,0xd1a,0xd1a,0xd20,0xcd8,0xcdb,0xcd8, +0xcdb,0xcd8,0xcdb,0xcd8,0xcdb,0xcd8,0xcdb,0xcd8,0xcd8,0xcd8,0xcdb,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, +0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, +0xd1d,0xd20,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd23,0xd1a,0xd23,0xd20,0xd20,0xce7,0xce7,0xce7,0xce7, +0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7, +0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xcf0,0xcf0,0xcf0,0xcf0, +0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, +0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0x820,0x840,0x860,0, +#else /* U_DARWIN */ +0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4, +0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4, +0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xbf7,0xbf4,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03, +0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03, +0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, +0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, +0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15, +0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15, +0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e, +0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e, +0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc18,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b, +0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b,0xc1b, +0xc1b,0xc1b,0xc1b,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc27,0xc27,0xc7e,0xc27,0xc27,0xc27,0xc7b,0xc27, +0xc27,0xc27,0xc27,0xc75,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27, +0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a, +0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a, +0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99, +0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99, +0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0, +0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0, +0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xcc0,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68, +0xd68,0xd68,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd50,0xd50,0xd50,0xd50,0xd56,0xd0e,0xd11,0xd0e, +0xd11,0xd0e,0xd11,0xd0e,0xd11,0xd0e,0xd11,0xd0e,0xd0e,0xd0e,0xd11,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e, +0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e, +0xd53,0xd56,0xd50,0xd50,0xd50,0xd50,0xd50,0xd59,0xd50,0xd59,0xd56,0xd56,0xd1d,0xd1d,0xd1d,0xd1d, +0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d, +0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd26,0xd26,0xd26,0xd26, +0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26, +0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd29,0xd29,0xd29,0xd29, +0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29, +0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0x820,0x840,0x860,0, +#endif /* U_DARWIN */ +0,0,0,0,0x880,0x8a0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x8c0,0x8e0,0,0, +0,0,0,0,0,0,0,0x900,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920, +0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920, +0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x920,0x940,0x960,0x960,0x960,0x960,0x960,0x960, +0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x980,0x9a0, +0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960, +0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960, +0x960,0x960,0x960,0x9a0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x900,0x9c0,0x9e0,0x9e0,0x9e0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00, +0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00, +0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa00,0xa20,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa60 +}; + +static const UTrie propsVectorsTrie={ + propsVectorsTrie_index, + NULL, + utrie_defaultGetFoldingOffset, + 2688, +#ifndef U_DARWIN + 14236, +#else /* U_DARWIN */ + 14444, +#endif /* U_DARWIN */ + 0, + TRUE +}; + +#ifndef U_DARWIN +static const uint32_t propsVectors[3384]={ +#else /* U_DARWIN */ +static const uint32_t propsVectors[3438]={ +#endif /* U_DARWIN */ +0x67,0,0,0x67,0x800000,0,0x467,0,0,0x4e7,0,0,0x567,0,0,0x5e7, +0,0,0x667,0,0,0x6e7,0,0,0x767,0,0,0x7e7,0,0,0x867,0, +0,0x8e7,0,0,0x967,0,0,0x9e7,0,0,0xa67,0,0,0xae7,0,0, +0xb67,0,0,0xbe7,0,0,0xc67,0,0,0xce7,0,0,0xd67,0,0,0xde7, +0,0,0xe67,0,0,0xee7,0,0,0xf67,0,0,0xfe7,0,0,0x1067,0, +0,0x10e7,0,0,0x1167,0,0,0x11e7,0,0,0x1267,0,0,0x12e7,0,0, +0x1367,0,0,0x13e7,0,0,0x1467,0x800000,0,0x14e7,0,0,0x1567,0,0,0x15e7, +0,0,0x1667,0,0,0x16e7,0,0,0x1867,0,0x4000000,0x18e7,0,0x4000000,0x1967,0, +0x4000000,0x1be7,0,0x4000000,0x1c67,0,0x4000000,0x1d67,0,0,0x1de7,0,0,0x1e67,0,0, +0x1f67,0,0,0x2067,0,0,0x20e7,0,0,0x21e7,0,0,0x2267,0,0,0x2367, +0,0,0x23e7,0,0,0x2467,0,0,0x24e7,0,0,0x2567,0,0,0x27e7,0, +0,0x2867,0,0,0x28e7,0,0,0x2967,0,0,0x2a67,0,0,0x2ae7,0,0, +0x2b67,0x800000,0,0x2be7,0,0,0x2c67,0,0,0x2ce7,0,0,0x2de7,0,0,0x2e67, +0,0,0x2ee7,0,0,0x3067,0x800000,0,0x30e7,0,0,0x3167,0,0,0x31e7,0, +0,0x3267,0,0,0x32e7,0,0,0x3367,0,0x4000000,0x37e7,0,0,0x3867,0,0, +0x39e7,0,0x4000000,0x3ae7,0,0,0x3b67,0,0,0x3be7,0,0,0x3c67,0,0,0x3d67, +0,0,0x3de7,0,0,0x3e67,0,0,0x3f67,0,0,0x3fe7,0,0,0x4067,0, +0,0x40e7,0,0,0x4167,0,0,0x41e7,0,0,0x4267,0,0,0x42e7,0,0, +0x4367,0,0,0x43e7,0,0,0x4467,0,0,0x44e7,0,0,0x4567,0,0,0x45e7, +0,0,0x4667,0,0,0x4767,0,0x4000000,0x47e7,0,0,0x4867,0,0,0x48e7,0, +0,0x4967,0,0,0x49e7,0,0,0x4a67,0,0,0x4ae7,0,0,0x4b67,0,0, +0x4be7,0,0,0x4c67,0,0,0x4ce7,0,0,0x4d67,0,0,0x28067,0,0,0x2af67, +0,0,0x2afe7,0,0,0x11002b67,0x810000,0,0x1100a767,0,0,0x11041680,0x80000000,6,0x11041980,0x80000000, +3,0x11041a00,0x80000000,0x4000000,0x11041c00,0x80000000,0,0x11048100,0x80000000,6,0x11048100,0x80000000,0xf,0x11048100,0x80000000,0x4000000, +0x11048100,0x80000080,0x4000000,0x11048100,0x80001000,2,0x11048100,0x90003000,0x1000,0x11048119,0xf8000400,0x1040f,0x11048300,0x80001000,2,0x11048300, +0xf8001400,0x18400,0x11048300,0xf8003400,0x18400,0x11049400,0x80000000,0x4000000,0x11049400,0x80000008,0x4000000,0x11049400,0x80000080,0x4000000,0x11049480,0x80000000, +0xe,0x11049480,0x80000000,0xf,0x11049499,0xf8000400,0x1040f,0x11049600,0x80000000,2,0x11049600,0x80000000,0xf,0x11049600,0xf8000480,0x10405, +0x11049619,0xf8000400,0x28401,0x11049680,0x80000000,6,0x11049680,0xf8000400,0x10402,0x11049680,0xf8000400,0x28402,0x11049700,0x80000000,0x4000000,0x11049700, +0x80000080,0x4000000,0x11049780,0x80000080,0x4000000,0x11049780,0x80000080,0x4000001,0x11049780,0x80000080,0x4000002,0x11049800,0x80000000,0x4000000,0x11049980,0x80000000, +2,0x11049980,0x80000000,3,0x11049980,0x80000400,0x10403,0x11049980,0x80000400,0x28403,0x11049a00,0x80000000,0x4000000,0x11049a80,0x80000000,0x4000000, +0x11049b00,0x80000000,0x4000000,0x11049b00,0x80000080,0x4000000,0x11049b80,0x80000000,0x4000000,0x11049b80,0x80000080,0x4000000,0x11049c00,0x80000000,0,0x1104ab00, +#ifndef U_DARWIN +0x80000000,0,0x11080100,0x80000000,0x4000000,0x11080100,0xf8000400,0x10402,0x11080119,0xf8000400,0x10401,0x11080119,0xf8000400,0x28401,0x11080199,0xf8000400, +0x10401,0x11080199,0xf8000400,0x10402,0x11080199,0xf8000400,0x28400,0x11080199,0xf8000400,0x28401,0x11080219,0xf8000400,0x10400,0x11080219,0xf8000400,0x10401, +0x11080219,0xf8000400,0x10402,0x11080219,0xf8000400,0x18400,0x11080219,0xf8000400,0x28400,0x11080219,0xf8000400,0x28401,0x11080219,0xf8000400,0x28402,0x11080299, +0xf8000400,0x10400,0x11080299,0xf8000400,0x18400,0x11080300,0x80001000,0,0x11080300,0x80001000,2,0x11080300,0xf8001400,0x10400,0x11080300,0xf8001400, +0x18400,0x11080300,0xf8003400,0x18400,0x11080319,0xf8001400,0x1040f,0x11080400,0x80000040,1,0x11080407,0xf8000400,0x10400,0x11080407,0xf8000400,0x28400, +0x1108040e,0x80001000,0,0x1108040e,0x80001000,1,0x1108040e,0x80001000,2,0x1108040e,0xe0001400,0x10402,0x1108040e,0xf8000400,0x10400,0x1108040e, +0xf8000400,0x10401,0x1108040e,0xf8000400,0x10402,0x1108040e,0xf8000400,0x28400,0x1108040e,0xf8000400,0x28401,0x1108040e,0xf8000480,0x10402,0x1108040e,0xf8000480, +0x28402,0x11080488,0x80000000,0,0x11080488,0xf8000400,0x10400,0x11080488,0xf8000400,0x10401,0x11080488,0xf8000400,0x28400,0x11080488,0xf8000400,0x28401, +0x11080503,0x80000000,0,0x11080503,0x80000000,0x1024000,0x11080503,0xf8000400,0x10400,0x11080503,0xf8000400,0x10402,0x11080503,0xf8000400,0x28400,0x11080503, +0xf8001400,0x18400,0x11080593,0x80000000,0,0x11080593,0x80000000,0x1000,0x11080593,0x80000000,0x18400,0x11080593,0x80000040,0,0x11080593,0xf8000400, +0x18400,0x11080600,0x800000,0xc820,0x11080600,0xf8002400,0x18400,0x11080602,0x80000000,0,0x11080602,0xf8000400,0x18400,0x11080602,0xf8000400,0x18401, +0x11080602,0xf8000400,0x18402,0x11080602,0xf8001400,0x18400,0x11080780,0x80000000,0,0x1108078a,0xf8000400,0x18400,0x1108078a,0xf8000400,0x18401,0x11080804, +0x80000000,0,0x11080804,0xf8000400,0x18400,0x11080804,0xf8000400,0x18401,0x11080890,0xf8000400,0x18400,0x11080890,0xf8000400,0x18401,0x1108090f,0xf8000400, +0x18400,0x1108099f,0x80000000,0,0x1108099f,0xf8000400,0x18400,0x1108099f,0xf8000400,0x18401,0x11080a23,0x80000000,0,0x11080a23,0xf8000400,0x18400, +0x11080a23,0xf8000400,0x18401,0x11080aa4,0xf8000400,0x18400,0x11080b15,0xf8000400,0x18400,0x11080b9a,0xf8000400,0x18400,0x11080ca6,0x80000000,0,0x11080e80, +0x80000000,0,0x11080e8c,0xf8000400,0x18400,0x11080e8c,0xf8000400,0x28400,0x11081319,0xf8000400,0x10401,0x11081319,0xf8000400,0x10402,0x11081319,0xf8000400, +0x28401,0x1108138e,0x80001000,1,0x1108138e,0x80001000,2,0x1108138e,0xf8000400,0x10401,0x1108138e,0xf8000400,0x28401,0x11081400,0x80000000,0x4000000, +0x11081400,0x80000000,0x4000002,0x11081400,0xd0000000,0x1c00,0x11081400,0xd0000080,0x1c00,0x11081480,0x80000000,0xe,0x11081480,0x80000000,0xf,0x11081480, +0x80000080,0xe,0x11081480,0x80000080,0xf,0x11081480,0x80000088,0xe,0x11081480,0x80000088,0xf,0x11081600,0x80000000,0,0x11081600,0x80000000, +2,0x11081600,0x80000000,0xf,0x11081600,0x80000080,0,0x11081600,0xf8000000,0,0x11081600,0xf8000400,0x28402,0x11081600,0xf8000480,0x10405, +0x11081600,0xf8000480,0x18402,0x11081600,0xf8000480,0x28405,0x11081619,0xf8000400,0x28400,0x11081619,0xf8000400,0x28401,0x11081680,0x80000000,6,0x11081680, +0xf8000400,0x10402,0x11081680,0xf8000400,0x18400,0x11081680,0xf8000400,0x28402,0x11081700,0x80000000,0x4000000,0x11081700,0x80000000,0x4000001,0x11081700,0x80000080, +0x4000000,0x11081700,0x80000080,0x4000001,0x11081780,0x80000080,0x4000000,0x11081780,0x80000080,0x4000001,0x11081780,0x80000080,0x4000002,0x11081800,0x80000000,0x4000000, +0x11081800,0x80000080,0x4000000,0x11081880,0x80000000,0x4000000,0x11081900,0x80000000,0x4000000,0x11081a00,0x80000000,0x4000000,0x11081a80,0x80000000,0x4000000,0x11081b00, +0x80000000,0x4000000,0x11081b80,0x80000000,0x4000000,0x11081c00,0x80000000,0x4000000,0x11082803,0xf8000400,0x10402,0x11082813,0x80000080,5,0x11082813,0xf8000400, +0x18401,0x11082813,0xf8000400,0x18402,0x11082813,0xf8000400,0x18405,0x11082819,0xf8000400,0x10402,0x11082882,0xe0000400,0x18408,0x11082882,0xf8000400,0x18404, +0x11082882,0xf8000400,0x18407,0x11082882,0xf8000400,0x18408,0x11082882,0xf8000400,0x18409,0x11082a82,0xe0000400,0x18408,0x11082a82,0xf8000400,0x18404,0x11082a82, +0xf8000400,0x18407,0x11082a82,0xf8000400,0x18408,0x11082a82,0xf8000400,0x18409,0x11088100,0x80000000,0x4000000,0x11088119,0xf8000400,0x10400,0x11088119,0xf8000400, +0x10401,0x11088119,0xf8000400,0x28400,0x11088199,0xf8000400,0x10400,0x11088199,0xf8000400,0x10401,0x11088199,0xf8000400,0x10402,0x11088199,0xf8000400,0x28400, +0x11088199,0xf8000400,0x28402,0x11088219,0xf8000400,0x10401,0x11088299,0xf8000400,0x10400,0x11088300,0x80001000,0,0x1108840e,0xf8000400,0x10400,0x1108840e, +0xf8000400,0x28400,0x11088488,0xf8000400,0x10400,0x11088488,0xf8000400,0x10401,0x11088488,0xf8000400,0x28400,0x11088488,0xf8000400,0x28401,0x11089400,0x80000000, +0x4000000,0x11089400,0x80000000,0x4000002,0x1108960e,0xf8000400,0x28401,0x11089680,0x80000000,6,0x11089700,0x80000000,0x4000000,0x11089c00,0x80000000,0x4000000, +0x11092b80,0x80000000,0xa,0x11092b80,0x80000080,0xa,0x11092b92,0xf8000400,0x1840a,0x11092b92,0xf8800400,0x1840a,0x11092b96,0xf8000400,0x18c0a,0x110a0080, +0x80000000,0x4000000,0x110a0080,0x80000080,0x4000000,0x110a0080,0x80001000,0x4000000,0x110a0080,0x80001080,0x4000000,0x110a0080,0xd0000000,0x1c00,0x110a0099,0xf8000400, +0x10400,0x110a0099,0xf8000400,0x28400,0x110a0099,0xf8000700,0x10400,0x110a0099,0xf8000700,0x28400,0x110a0100,0x80000000,0x4000000,0x110a0100,0x80000080,0x4000000, +0x110a0100,0x80001000,2,0x110c9400,0x80000008,0x4000000,0x11100080,1,0x8020020,0x11100593,0x80000008,0,0x11100780,0x80000040,0x1024000,0x11100ca6, +0x80000040,0,0x11101400,0x80000001,0x20001,0x11101400,0x80000001,0x20002,0x11101400,0x80000008,0x4000000,0x11108100,0x800010,0xc820,0x11109400,0x80000000, +0x4001000,0x11109400,0x80000008,0x4000000,0x11109400,0x80000018,0x4000000,0x11120080,0x80000080,0x4000000,0x11140300,0xf8001400,0x18400,0x11148100,0x80001000,2, +0x11180080,1,0x8020020,0x11181400,1,0x801c020,0x11201400,0x80000000,0x4008000,0x11201480,0x80000080,0x800e,0x11201480,0x80000080,0x800f,0x11202880, +0x80000000,0x4008000,0x11212b80,0x80000020,0x800a,0x11212b80,0x80000040,0xa,0x11212b80,0x80000040,0x102400a,0x1121ab80,0x80000000,0x8011,0x1121ab80,0x80000040, +0x11,0x1121ab80,0x80000040,0x1024011,0x11220080,0x80000000,0x4008000,0x11229800,0x80000000,0x4008001,0x11229e80,0x80000000,0x4008000,0x11229e80,0x80000020,0x4008000, +0x11229e80,0x80000040,0x4000000,0x11229e80,0x80000040,0x5024000,0x1122a980,0x80000000,0x8010,0x1122a980,0x80000020,0x8010,0x1122aa00,0x80000000,0x800c,0x1122aa00, +0x80000040,0xc,0x1122aa00,0x80000040,0x102400c,0x11240080,0x800000,0x20,0x11240100,0x800000,0x20,0x11240488,0x50021000,0x60,0x11240593,0x50021400, +0x60,0x11240601,0x50020400,0x60,0x11240601,0x50021400,0x60,0x11240602,0x20000,0x60,0x11240602,0x50020400,0x60,0x11240602,0x50021000,0x60, +0x1124078a,0x50020400,0x60,0x1124078a,0x50021000,0x60,0x1124078a,0x50061000,0x60,0x1124078a,0xd0000400,0x18400,0x11240804,0x50020400,0x60,0x11240804, +0x50021000,0x60,0x11240804,0x50061000,0x60,0x11240804,0xd0000400,0x18400,0x11240804,0xd0000400,0x18401,0x11240890,0x50020400,0x60,0x11240890,0x50021000, +0x60,0x11240890,0x50061000,0x60,0x11240890,0xd0000400,0x18400,0x1124090f,0x50020400,0x60,0x1124090f,0x50021000,0x60,0x1124090f,0x50061000,0x60, +0x1124090f,0xd0000400,0x18400,0x1124099f,0x50020400,0x60,0x1124099f,0x50021000,0x60,0x1124099f,0x50061000,0x60,0x1124099f,0xd0000400,0x18400,0x1124099f, +0xd0000400,0x18401,0x11240a23,0x50020400,0x60,0x11240a23,0x50061000,0x60,0x11240a23,0xd0000400,0x18400,0x11240a23,0xd0000400,0x18401,0x11240aa4,0x50020400, +0x60,0x11240aa4,0x50020400,0x61,0x11240aa4,0x50061000,0x60,0x11240aa4,0xd0000400,0x18400,0x11240b15,0x50020400,0x60,0x11240b15,0x50061000,0x60, +0x11240b15,0xd0000400,0x18400,0x11240b15,0xd0000400,0x18401,0x11240b9a,0x50020400,0x60,0x11240b9a,0x50061000,0x60,0x11240b9a,0xd0000400,0x18400,0x11240b9a, +0xd0000400,0x18401,0x11241400,0x800000,0xc820,0x11241400,0x800000,0x800c820,0x11241400,0x1800000,0xc820,0x11241401,0x820000,0x60,0x11241581,0x20000, +0x60,0x11241581,0x50020080,0x60,0x11242813,0x50021400,0x60,0x11242901,0x50021000,0x60,0x11248381,0x50021000,0x60,0x11248381,0x50021000,0x61, +0x11248381,0x50021400,0x60,0x11248381,0x51021000,0x61,0x11269e81,0x50021000,0x60,0x11269f01,0x50021000,0x60,0x11280080,1,0x801c040,0x112c0600, +0x80000040,0,0x112c0600,0x80000040,0x1024000,0x112c0602,0x80000000,0,0x112c0602,0x80000040,0x1024000,0x112c1c00,0x80000000,0x4000000,0x112dab80,0x80000040, +0x1024011,0x112e0080,0x80000040,0x5024000,0x112eaa00,0x80000040,0x102400c,0x11300100,0x80000001,0x1800b,0x11301400,0x80000001,0x2000b,0x11301400,0x80000018,0x400000b, +0x11308381,0x50021000,0x60,0x11360080,0x80000018,0x4000000,0x11381e80,0x80000000,0,0x11399e80,0x80000001,0x20011,0x1139ab80,0x80000000,0x11,0x1139ab80, +0x80000018,0x11,0x1139ab80,0x80000020,0x11,0x1139ab80,0x80000080,0x11,0x1139ab80,0x80001000,0x11,0x1139ab80,0x80001080,0x11,0x1139ab80,0xd0000000, +0x1c11,0x1139ab80,0xd0000100,0x11,0x1139ab99,0xf8000400,0x10411,0x1139ab99,0xf8000400,0x28411,0x1139ab99,0xf8000500,0x10411,0x1139ab99,0xf8000500,0x28411, +0x113a9e80,0x80000000,0,0x113a9e80,0x80000000,2,0x113a9e80,0x80000000,0x4000000,0x113a9e80,0x80000008,0x4000000,0x113a9e80,0xf8000c00,0x18000,0x113a9e80, +0xf8002400,0x18c00,0x113a9e91,0xf8000c00,0x18000,0x113a9f14,0xf8000400,0x18000,0x113a9f14,0xf8000400,0x18001,0x113a9f96,0xf8000400,0x18c00,0x113a9f96,0xf8000400, +0x18c01,0x113aa005,0xf8000400,0x18400,0x113aa092,0xf8000400,0x18402,0x113aa092,0xf8800400,0x18402,0x113aa100,0x80000000,0,0x113aa100,0x80000000,0xf, +0x113aa200,0x80000000,0,0x113aa200,0x80000000,2,0x113aa200,0x80000000,3,0x113aa212,0x80000000,2,0x113aa212,0x80000000,3,0x113aa280, +0x80000000,2,0x113aa280,0x80000000,0xd,0x113aa391,0xf8400c00,0x18000,0x113aa791,0xf8000c00,0x18001,0x113aa791,0xf8400c00,0x18000,0x113aa980,0x80000000, +2,0x113aa980,0x80000000,0x10,0x113aa980,0x80000008,0x10,0x113aa980,0xd0000000,0x1c02,0x113aa980,0xd0000000,0x1c10,0x113aaa00,0x80000000,0xc, +0x113aaa00,0x80000008,0xc,0x113aaa00,0x80000040,0xc,0x113aaa00,0x80000080,0xc,0x113aaa00,0x80000098,0xc,0x113c9400,0x80000000,0x4000002,0x11400400, +0x80000040,0x1401,0x11400500,0x80000040,0x1025400,0x11401400,0x80000080,0x4001400,0x11420080,0x80000040,0x4001000,0x11420080,0x80000040,0x4001400,0x11420080,0x80000040, +0x5005400,0x11440080,1,0x801c0a0,0x11481400,0x80000040,0x5024000,0x11481400,0x80000040,0x5024002,0x11492b80,0x80000010,0xa,0x11492b80,0xf0001400,0x18c0a, +0x11492b80,0xf8003400,0x18c0a,0x11492b96,0xf8000400,0x18c0a,0x1149ab80,0x80000040,0x11,0x114a9e80,0x80000008,0x4000000,0x114a9e91,0xf8002400,0x18400,0x114a9f00, +0xe0001000,0xc02,0x114a9f14,0xf8000400,0x18000,0x114a9f14,0xf8002400,0x18000,0x114a9f14,0xf8002400,0x18001,0x114a9f80,0x80000010,0,0x114a9f80,0xf8003400, +0x18c00,0x114a9f96,0xf8000400,0x18c00,0x114a9f96,0xf8002400,0x18c00,0x114a9f96,0xf8002400,0x18c01,0x114aaa00,0x80000040,0xc,0x114c0600,0xd0000000,0x15800, +#else /* U_DARWIN */ +0x80000000,0,0x1106a700,0x80000000,0,0x11080100,0x80000000,0x4000000,0x11080100,0xf8000400,0x10402,0x11080119,0xf8000400,0x10401,0x11080119,0xf8000400, +0x28401,0x11080199,0xf8000400,0x10401,0x11080199,0xf8000400,0x10402,0x11080199,0xf8000400,0x28400,0x11080199,0xf8000400,0x28401,0x11080219,0xf8000400,0x10400, +0x11080219,0xf8000400,0x10401,0x11080219,0xf8000400,0x10402,0x11080219,0xf8000400,0x18400,0x11080219,0xf8000400,0x28400,0x11080219,0xf8000400,0x28401,0x11080219, +0xf8000400,0x28402,0x11080299,0xf8000400,0x10400,0x11080299,0xf8000400,0x18400,0x11080300,0x80001000,0,0x11080300,0x80001000,2,0x11080300,0xf8001400, +0x10400,0x11080300,0xf8001400,0x18400,0x11080300,0xf8003400,0x18400,0x11080319,0xf8001400,0x1040f,0x11080400,0x80000040,1,0x11080407,0xf8000400,0x10400, +0x11080407,0xf8000400,0x28400,0x1108040e,0x80001000,0,0x1108040e,0x80001000,1,0x1108040e,0x80001000,2,0x1108040e,0xe0001400,0x10402,0x1108040e, +0xf8000400,0x10400,0x1108040e,0xf8000400,0x10401,0x1108040e,0xf8000400,0x10402,0x1108040e,0xf8000400,0x28400,0x1108040e,0xf8000400,0x28401,0x1108040e,0xf8000480, +0x10402,0x1108040e,0xf8000480,0x28402,0x11080488,0x80000000,0,0x11080488,0xf8000400,0x10400,0x11080488,0xf8000400,0x10401,0x11080488,0xf8000400,0x28400, +0x11080488,0xf8000400,0x28401,0x11080503,0x80000000,0,0x11080503,0x80000000,0x1024000,0x11080503,0xf8000400,0x10400,0x11080503,0xf8000400,0x10402,0x11080503, +0xf8000400,0x28400,0x11080503,0xf8001400,0x18400,0x11080593,0x80000000,0,0x11080593,0x80000000,0x1000,0x11080593,0x80000000,0x18400,0x11080593,0x80000040, +0,0x11080593,0xf8000400,0x18400,0x11080600,0x800000,0xc820,0x11080600,0xf8002400,0x18400,0x11080602,0x80000000,0,0x11080602,0xf8000400,0x18400, +0x11080602,0xf8000400,0x18401,0x11080602,0xf8000400,0x18402,0x11080602,0xf8001400,0x18400,0x11080780,0x80000000,0,0x1108078a,0xf8000400,0x18400,0x1108078a, +0xf8000400,0x18401,0x11080804,0x80000000,0,0x11080804,0xf8000400,0x18400,0x11080804,0xf8000400,0x18401,0x11080890,0xf8000400,0x18400,0x11080890,0xf8000400, +0x18401,0x1108090f,0xf8000400,0x18400,0x1108099f,0x80000000,0,0x1108099f,0xf8000400,0x18400,0x1108099f,0xf8000400,0x18401,0x11080a23,0x80000000,0, +0x11080a23,0xf8000400,0x18400,0x11080a23,0xf8000400,0x18401,0x11080aa4,0xf8000400,0x18400,0x11080b15,0xf8000400,0x18400,0x11080b9a,0xf8000400,0x18400,0x11080ca6, +0x80000000,0,0x11080e80,0x80000000,0,0x11080e8c,0xf8000400,0x18400,0x11080e8c,0xf8000400,0x28400,0x11081319,0xf8000400,0x10401,0x11081319,0xf8000400, +0x10402,0x11081319,0xf8000400,0x28401,0x1108138e,0x80001000,1,0x1108138e,0x80001000,2,0x1108138e,0xf8000400,0x10401,0x1108138e,0xf8000400,0x28401, +0x11081400,0x80000000,0x4000000,0x11081400,0x80000000,0x4000002,0x11081400,0xd0000000,0x1c00,0x11081400,0xd0000080,0x1c00,0x11081480,0x80000000,0xe,0x11081480, +0x80000000,0xf,0x11081480,0x80000080,0xe,0x11081480,0x80000080,0xf,0x11081480,0x80000088,0xe,0x11081480,0x80000088,0xf,0x11081600,0x80000000, +0,0x11081600,0x80000000,2,0x11081600,0x80000000,0xf,0x11081600,0x80000080,0,0x11081600,0xf8000000,0,0x11081600,0xf8000400,0x28402, +0x11081600,0xf8000480,0x10405,0x11081600,0xf8000480,0x18402,0x11081600,0xf8000480,0x28405,0x11081619,0xf8000400,0x28400,0x11081619,0xf8000400,0x28401,0x11081680, +0x80000000,6,0x11081680,0xf8000400,0x10402,0x11081680,0xf8000400,0x18400,0x11081680,0xf8000400,0x28402,0x11081700,0x80000000,0x4000000,0x11081700,0x80000000, +0x4000001,0x11081700,0x80000080,0x4000000,0x11081700,0x80000080,0x4000001,0x11081780,0x80000080,0x4000000,0x11081780,0x80000080,0x4000001,0x11081780,0x80000080,0x4000002, +0x11081800,0x80000000,0x4000000,0x11081800,0x80000080,0x4000000,0x11081880,0x80000000,0x4000000,0x11081900,0x80000000,0x4000000,0x11081a00,0x80000000,0x4000000,0x11081a80, +0x80000000,0x4000000,0x11081b00,0x80000000,0x4000000,0x11081b80,0x80000000,0x4000000,0x11081c00,0x80000000,0x4000000,0x11082700,0x80000000,0,0x11082700,0x80000400, +0,0x11082803,0xf8000400,0x10402,0x11082813,0x80000080,5,0x11082813,0xf8000400,0x18401,0x11082813,0xf8000400,0x18402,0x11082813,0xf8000400,0x18405, +0x11082819,0xf8000400,0x10402,0x11082882,0xe0000400,0x18408,0x11082882,0xf8000400,0x18404,0x11082882,0xf8000400,0x18407,0x11082882,0xf8000400,0x18408,0x11082882, +0xf8000400,0x18409,0x11082a82,0xe0000400,0x18408,0x11082a82,0xf8000400,0x18404,0x11082a82,0xf8000400,0x18407,0x11082a82,0xf8000400,0x18408,0x11082a82,0xf8000400, +0x18409,0x11088100,0x80000000,0x4000000,0x11088119,0xf8000400,0x10400,0x11088119,0xf8000400,0x10401,0x11088119,0xf8000400,0x28400,0x11088199,0xf8000400,0x10400, +0x11088199,0xf8000400,0x10401,0x11088199,0xf8000400,0x10402,0x11088199,0xf8000400,0x28400,0x11088199,0xf8000400,0x28402,0x11088219,0xf8000400,0x10401,0x11088299, +0xf8000400,0x10400,0x11088300,0x80001000,0,0x1108840e,0xf8000400,0x10400,0x1108840e,0xf8000400,0x28400,0x11088488,0xf8000400,0x10400,0x11088488,0xf8000400, +0x10401,0x11088488,0xf8000400,0x28400,0x11088488,0xf8000400,0x28401,0x11089400,0x80000000,0x4000000,0x11089400,0x80000000,0x4000002,0x1108960e,0xf8000400,0x28401, +0x11089680,0x80000000,6,0x11089700,0x80000000,0x4000000,0x11089c00,0x80000000,0x4000000,0x1108a700,0,0,0x11092b80,0x80000000,0xa,0x11092b80, +0x80000080,0xa,0x11092b92,0xf8000400,0x1840a,0x11092b92,0xf8800400,0x1840a,0x11092b96,0xf8000400,0x18c0a,0x110a0080,0x80000000,0x4000000,0x110a0080,0x80000080, +0x4000000,0x110a0080,0x80001000,0x4000000,0x110a0080,0x80001080,0x4000000,0x110a0080,0xd0000000,0x1c00,0x110a0099,0xf8000400,0x10400,0x110a0099,0xf8000400,0x28400, +0x110a0099,0xf8000700,0x10400,0x110a0099,0xf8000700,0x28400,0x110a0100,0x80000000,0x4000000,0x110a0100,0x80000080,0x4000000,0x110a0100,0x80001000,2,0x110aa700, +0x80000000,0,0x110aa700,0x80000400,0,0x110c9400,0x80000008,0x4000000,0x11100080,1,0x8020020,0x11100593,0x80000008,0,0x11100780,0x80000040, +0x1024000,0x11100ca6,0x80000040,0,0x11101400,0x80000001,0x20001,0x11101400,0x80000001,0x20002,0x11101400,0x80000008,0x4000000,0x11108100,0x800010,0xc820, +0x11109400,0x80000000,0x4001000,0x11109400,0x80000008,0x4000000,0x11109400,0x80000018,0x4000000,0x11120080,0x80000080,0x4000000,0x1112a700,0x80000000,0,0x11140300, +0xf8001400,0x18400,0x11148100,0x80001000,2,0x11180080,1,0x8020020,0x11181400,1,0x801c020,0x11201400,0x80000000,0x4008000,0x11201480,0x80000080, +0x800e,0x11201480,0x80000080,0x800f,0x11202880,0x80000000,0x4008000,0x11212b80,0x80000020,0x800a,0x11212b80,0x80000040,0xa,0x11212b80,0x80000040,0x102400a, +0x1121a700,0x80000000,0,0x1121ab80,0x80000000,0x8011,0x1121ab80,0x80000040,0x11,0x1121ab80,0x80000040,0x1024011,0x11220080,0x80000000,0x4008000,0x11229800, +0x80000000,0x4008001,0x11229e80,0x80000000,0x4008000,0x11229e80,0x80000020,0x4008000,0x11229e80,0x80000040,0x4000000,0x11229e80,0x80000040,0x5024000,0x1122a700,0x80000000, +0,0x1122a980,0x80000000,0x8010,0x1122a980,0x80000020,0x8010,0x1122aa00,0x80000000,0x800c,0x1122aa00,0x80000040,0xc,0x1122aa00,0x80000040,0x102400c, +0x11240080,0x800000,0x20,0x11240100,0x800000,0x20,0x11240488,0x50021000,0x60,0x11240593,0x50021400,0x60,0x11240601,0x50020400,0x60,0x11240601, +0x50021400,0x60,0x11240602,0x20000,0x60,0x11240602,0x50020400,0x60,0x11240602,0x50021000,0x60,0x1124078a,0x50020400,0x60,0x1124078a,0x50021000, +0x60,0x1124078a,0x50061000,0x60,0x1124078a,0xd0000400,0x18400,0x11240804,0x50020400,0x60,0x11240804,0x50021000,0x60,0x11240804,0x50061000,0x60, +0x11240804,0xd0000400,0x18400,0x11240804,0xd0000400,0x18401,0x11240890,0x50020400,0x60,0x11240890,0x50021000,0x60,0x11240890,0x50061000,0x60,0x11240890, +0xd0000400,0x18400,0x1124090f,0x50020400,0x60,0x1124090f,0x50021000,0x60,0x1124090f,0x50061000,0x60,0x1124090f,0xd0000400,0x18400,0x1124099f,0x50020400, +0x60,0x1124099f,0x50021000,0x60,0x1124099f,0x50061000,0x60,0x1124099f,0xd0000400,0x18400,0x1124099f,0xd0000400,0x18401,0x11240a23,0x50020400,0x60, +0x11240a23,0x50061000,0x60,0x11240a23,0xd0000400,0x18400,0x11240a23,0xd0000400,0x18401,0x11240aa4,0x50020400,0x60,0x11240aa4,0x50020400,0x61,0x11240aa4, +0x50061000,0x60,0x11240aa4,0xd0000400,0x18400,0x11240b15,0x50020400,0x60,0x11240b15,0x50061000,0x60,0x11240b15,0xd0000400,0x18400,0x11240b15,0xd0000400, +0x18401,0x11240b9a,0x50020400,0x60,0x11240b9a,0x50061000,0x60,0x11240b9a,0xd0000400,0x18400,0x11240b9a,0xd0000400,0x18401,0x11241400,0x800000,0xc820, +0x11241400,0x800000,0x800c820,0x11241400,0x1800000,0xc820,0x11241401,0x820000,0x60,0x11241581,0x20000,0x60,0x11241581,0x50020080,0x60,0x11242700, +0x20000,0x60,0x11242813,0x50021400,0x60,0x11242901,0x50021000,0x60,0x11248381,0x50021000,0x60,0x11248381,0x50021000,0x61,0x11248381,0x50021400, +0x60,0x11248381,0x51021000,0x61,0x1124a700,0x20000,0x60,0x11269e81,0x50021000,0x60,0x11269f01,0x50021000,0x60,0x11280080,1,0x801c040, +0x112c0600,0x80000040,0,0x112c0600,0x80000040,0x1024000,0x112c0602,0x80000000,0,0x112c0602,0x80000040,0x1024000,0x112c1c00,0x80000000,0x4000000,0x112dab80, +0x80000040,0x1024011,0x112e0080,0x80000040,0x5024000,0x112eaa00,0x80000040,0x102400c,0x11300100,0x80000001,0x1800b,0x11301400,0x80000001,0x2000b,0x11301400,0x80000018, +0x400000b,0x11308381,0x50021000,0x60,0x11360080,0x80000018,0x4000000,0x11381e80,0x80000000,0,0x11399e80,0x80000001,0x20011,0x1139a700,0x80000000,0, +0x1139a700,0x80000080,0,0x1139ab80,0x80000000,0x11,0x1139ab80,0x80000018,0x11,0x1139ab80,0x80000020,0x11,0x1139ab80,0x80000080,0x11,0x1139ab80, +0x80001000,0x11,0x1139ab80,0x80001080,0x11,0x1139ab80,0xd0000000,0x1c11,0x1139ab80,0xd0000100,0x11,0x1139ab99,0xf8000400,0x10411,0x1139ab99,0xf8000400, +0x28411,0x1139ab99,0xf8000500,0x10411,0x1139ab99,0xf8000500,0x28411,0x113a9e80,0x80000000,0,0x113a9e80,0x80000000,2,0x113a9e80,0x80000000,0x4000000, +0x113a9e80,0x80000008,0x4000000,0x113a9e80,0xf8000c00,0x18000,0x113a9e80,0xf8002400,0x18c00,0x113a9e91,0xf8000c00,0x18000,0x113a9f14,0xf8000400,0x18000,0x113a9f14, +0xf8000400,0x18001,0x113a9f96,0xf8000400,0x18c00,0x113a9f96,0xf8000400,0x18c01,0x113aa005,0xf8000400,0x18400,0x113aa092,0xf8000400,0x18402,0x113aa092,0xf8800400, +0x18402,0x113aa100,0x80000000,0,0x113aa100,0x80000000,0xf,0x113aa200,0x80000000,0,0x113aa200,0x80000000,2,0x113aa200,0x80000000,3, +0x113aa212,0x80000000,2,0x113aa212,0x80000000,3,0x113aa280,0x80000000,2,0x113aa280,0x80000000,0xd,0x113aa391,0xf8400c00,0x18000,0x113aa791, +0xf8000c00,0x18001,0x113aa791,0xf8400c00,0x18000,0x113aa980,0x80000000,2,0x113aa980,0x80000000,0x10,0x113aa980,0x80000008,0x10,0x113aa980,0xd0000000, +0x1c02,0x113aa980,0xd0000000,0x1c10,0x113aaa00,0x80000000,0xc,0x113aaa00,0x80000008,0xc,0x113aaa00,0x80000040,0xc,0x113aaa00,0x80000080,0xc, +0x113aaa00,0x80000098,0xc,0x113c9400,0x80000000,0x4000002,0x113ea700,0x80000080,0,0x11400400,0x80000040,0x1401,0x11400500,0x80000040,0x1025400,0x11401400, +0x80000080,0x4001400,0x11420080,0x80000040,0x4001000,0x11420080,0x80000040,0x4001400,0x11420080,0x80000040,0x5005400,0x11440080,1,0x801c0a0,0x11481400,0x80000040, +0x5024000,0x11481400,0x80000040,0x5024002,0x11492b80,0x80000010,0xa,0x11492b80,0xf0001400,0x18c0a,0x11492b80,0xf8003400,0x18c0a,0x11492b96,0xf8000400,0x18c0a, +0x1149ab80,0x80000040,0x11,0x114a9e80,0x80000008,0x4000000,0x114a9e91,0xf8002400,0x18400,0x114a9f00,0xe0001000,0xc02,0x114a9f14,0xf8000400,0x18000,0x114a9f14, +0xf8002400,0x18000,0x114a9f14,0xf8002400,0x18001,0x114a9f80,0x80000010,0,0x114a9f80,0xf8003400,0x18c00,0x114a9f96,0xf8000400,0x18c00,0x114a9f96,0xf8002400, +0x18c00,0x114a9f96,0xf8002400,0x18c01,0x114aa700,0x80000000,0,0x114aa700,0x80000400,0,0x114aaa00,0x80000040,0xc,0x114c0600,0xd0000000,0x15800, +#endif /* U_DARWIN */ +0x114c0602,0x80000000,0x15800,0x114c0602,0xd0000000,0x15800,0x114c078a,0xd0000000,0x15800,0x114c0804,0xd0000000,0x15800,0x114c0890,0xd0000000,0x15800,0x114c090f, +0xd0000000,0x15800,0x114c099f,0xd0000000,0x15800,0x114c0a23,0xd0000000,0x15800,0x114c0aa4,0xd0000000,0x15800,0x114c0b15,0xd0000000,0x15800,0x114c0b9a,0xd0000000, +0x15800,0x114c0ca6,0xd0000000,0x15800,0x114c0d18,0xd0000000,0x15800,0x114e0080,0xd0000300,0x15800,0x11501400,0x80000000,0x4008000,0x11501400,0x80000020,0x4008000, +#ifndef U_DARWIN +0x11501480,0x80000080,0x800e,0x11501480,0x80000080,0x800f,0x11502880,0x80000000,0x4008000,0x11512b80,0x80000020,0x800a,0x1151ab80,0x80000000,0x8011,0x11520080, +0x80000000,0x4008000,0x11529800,0x80000000,0x4008001,0x11529e80,0x80000000,0x4008000,0x11529e80,0x80000020,0x4008000,0x1152a980,0x80000000,0x8010,0x1152a980,0x80000020, +0x8010,0x1152aa00,0x80000000,0x800c,0x11541400,0x80000000,0x4000000,0x11541400,0x80000000,0x4000002,0x11541400,0x80000080,0x4000002,0x11541500,0x80000000,0, +0x11548100,0x80000000,0x4000000,0x11549400,0x80000000,0x4000000,0x11549400,0x80000080,0x4000000,0x11549400,0x80000080,0x4000002,0x11549600,0x80000000,2,0x1155ab80, +0x80000000,0x11,0x11560080,0x80000000,0x4000000,0x11560100,0x80000000,0x4000000,0x1156aa00,0x80000000,0xc,0x11580804,0x80000000,0,0x11580c80,0x80000000, +0,0x11581500,0x80000000,0,0x11581500,0x80000000,2,0x11581780,0x80000080,0x4000000,0x11581780,0x80000088,0x4000000,0x11588100,0x80000000,0x4000000, +0x11588100,0x80000080,0x4000000,0x11589600,0x80000000,2,0x11591500,0x80000000,0,0x1159ab80,0x80000000,0x11,0x115a0080,0x80000000,0x4000000,0x115a0080, +0x80000080,0x4000000,0x115a0100,0x80000000,0x4000000,0x115aaa00,0x80000000,0xc,0x115c0100,0x80000020,0x4008000,0x115c1400,0x80000020,0x4008000,0x115c1c00,0x80000000, +0x4008000,0x115c9400,0x80000020,0x4008000,0x115c9400,0x80000020,0x4009000,0x115e0080,0x80000020,0x4008000,0x115e0080,0x80000020,0x4009000,0x11600ca6,0x50020400,0x60, +0x11600ca6,0x50021000,0x60,0x11600ca6,0x50060400,0x60,0x11600ca6,0xf0000400,0x18002,0x11600ca6,0xf8000400,0x18000,0x11600ca6,0xf8002400,0x18000,0x11600ca6, +0xfc000400,0x18000,0x11600d18,0x50020400,0x60,0x11600d18,0x50021000,0x60,0x11600d18,0xf0000400,0x18002,0x11600d18,0xf8000400,0x18000,0x11600d18,0xf8000400, +0x18002,0x11600d18,0xf8002400,0x18000,0x11600d18,0xfc000400,0x18000,0x116a0080,0x80000001,0x8020000,0x116e0080,0x80000000,0x4000000,0x11701400,0x800000,0xc820, +0x11740100,1,0x801c020,0x11782a80,0x800000,0xc820,0x11868f12,0xf8000400,0x18480,0x11868f12,0xf8800400,0x18480,0x11880f12,0xf8000400,0x18500,0x118c0f12, +0xf8000400,0x18520,0x118c0f12,0xf8800400,0x18520,0x20000067,0x810000,0,0x200036e7,0x810000,0,0x20003767,0x810000,0,0x2000b6e7,0, +0,0x2000b767,0,0,0x20080da7,0x80000000,0,0x20080da7,0xf8000400,0x18400,0x20080da7,0xf8000400,0x18401,0x20081319,0xf8000400,0x10401, +0x20100da7,0x80000000,0,0x20100da7,0xd0000400,0x18400,0x20140da7,0x80000000,0,0x20200da7,0x80000000,0x8000,0x20240593,0x50021000,0x60,0x20240593, +0x50021400,0x60,0x20240da7,0x50020400,0x60,0x20240da7,0x50020400,0x61,0x20240da7,0x50020400,0x62,0x20240da7,0x50021000,0x60,0x20240da7,0x50061000, +0x60,0x20240da7,0xd0001000,0,0x202c0da7,0x80000000,0,0x202c0da7,0x80000040,0,0x20300da7,0x80000000,0xb,0x20300da7,0x80000040,0, +0x204c0da7,0xd0000000,0x15800,0x20500da7,0x80000000,0x8000,0x20581500,0x80000000,0,0x206425e7,0x800000,0,0x20642667,0x800000,0,0x206426e7, +0x800000,0,0x207ea512,0xf8000400,0x184c1,0x2082a512,0xf8000400,0x184e1,0x211c2b00,0x80000000,0,0x21589500,0x80000000,0,0x30080219,0xf8000400, +0x10400,0x30080219,0xf8000400,0x10401,0x30080219,0xf8000400,0x28400,0x30080219,0xf8000400,0x28401,0x30080299,0xf8000400,0x10400,0x30080300,0x80001000,0, +0x30080300,0xf8001400,0x18400,0x3008040e,0xf8000400,0x10400,0x30080488,0xf8000400,0x10400,0x30080488,0xf8000400,0x10401,0x30080488,0xf8000400,0x28400,0x30080488, +0xf8000400,0x28401,0x30080602,0x80000000,0,0x30080602,0xf8000400,0x18400,0x300806a2,0x800000,0xc820,0x300806a2,0x80000000,0,0x300806a2,0x80000040, +0,0x300806a2,0x80000040,0x1024000,0x300806a2,0xf8000400,0x18400,0x30080725,0xf8000400,0x18400,0x30080c21,0x80000000,0,0x30080c21,0xf8000400,0x18400, +0x30080da7,0x80000000,0,0x30080da7,0xf8000400,0x18400,0x30080e1c,0x80000000,0,0x30080f8b,0x80000000,0,0x30080f8b,0x80000040,0,0x30080f8b, +0x80000040,0x1024000,0x30080f8b,0xd0000000,0,0x30080f8b,0xf8000400,0x18400,0x30081006,0xf8000400,0x18400,0x300810a8,0x80000040,0,0x300810a8,0x80000040, +0x1024000,0x300810a8,0xf8000400,0x18400,0x3008111d,0xf8000400,0x18400,0x300811a0,0xf8000400,0x18400,0x30081217,0x80000000,0,0x3008129b,0x80000000,0, +0x3008129b,0xf8000400,0x18400,0x3008129b,0xf8002400,0x18400,0x30081400,0x80000000,0x4000000,0x30081600,0x80000000,0,0x30081600,0xf8000400,0x10405,0x30081680, +0xf8000400,0x28400,0x30081700,0x80000000,0x4000000,0x30081800,0x80000000,0x4000000,0x30081880,0x80000000,0x4000000,0x30081b00,0x80000000,0x4000000,0x30081b80,0x80000000, +0x4000000,0x30081cae,0x80000000,0x4000000,0x30082813,0xf8000400,0x18401,0x30088300,0x80001000,0,0x30100503,0x80000018,0,0x30100da7,0x80000000,0, +0x30100e1c,0x80000040,0x1024000,0x30100f8b,0x80000040,0,0x3010111d,0x80000001,0x20000,0x30101180,0x80000040,0,0x30101217,0x80000000,0,0x30101217, +0x80000040,0,0x30101280,0x80000040,0,0x30101280,0x80000040,0x1024000,0x3010129b,0x80000040,0,0x3010129b,0x80000040,0x1024000,0x3014129b,0x80000018, +0,0x3020111d,0x80000000,0x8000,0x30240488,0x20000,0x60,0x30240601,0x50020400,0x60,0x302406a2,0x50020400,0x60,0x302406a2,0x50021000,0x60, +0x302406a2,0x50021400,0x60,0x30240725,0x50021400,0x60,0x30240c21,0x50020400,0x60,0x30240c21,0x50061000,0x60,0x30240c21,0xd0000400,0x18400,0x30240c21, +0xd0000400,0x18401,0x30240da7,0x50020400,0x60,0x30240da7,0x50021000,0x60,0x3024129b,0x50020400,0x60,0x3024129b,0x50820000,0x2000060,0x30241581,0x20000, +0x60,0x30242b00,0,0xc820,0x30248381,0x50021000,0x60,0x3030129b,0x80000001,0x20000,0x30301400,0x80000001,0x2000b,0x30308381,0x50021000,0x60, +0x303a9d11,0x80200000,0,0x303a9d11,0x80200000,2,0x303a9d91,0x80200000,2,0x303a9e00,0x80080000,0,0x303a9e00,0x80100000,0,0x303a9e80, +0x80000000,0,0x303a9e91,0xf8000c00,0x18002,0x303aa185,0xf8000400,0x18400,0x303aa311,0xf8400c00,0x18000,0x303aa429,0xf8000400,0x18400,0x303aa4a9,0x80000000, +0,0x30481217,0x80000040,0,0x30481400,0x80000040,0x5024002,0x304aa429,0xf8002400,0x18400,0x304c0e1c,0xd0000000,0x15800,0x304c1217,0xd0000000,0x15800, +0x304c129b,0xd0000000,0x15800,0x3050111d,0x80000000,0x8000,0x30581217,0x80000000,0,0x30581500,0x80000000,0,0x30600e1c,0x50020400,0x60,0x30600e1c, +0x50021000,0x60,0x30600e1c,0x50061000,0x60,0x30600e1c,0xd0000400,0x18000,0x30600e1c,0xf8000400,0x18000,0x30600e1c,0xf8000400,0x18001,0x30601217,0x800000, +0xc820,0x30601217,0x50020400,0x60,0x30601217,0x50021000,0x60,0x30601217,0x50061000,0x60,0x30601217,0x51021000,0x60,0x30601217,0xd0000400,0x18000, +0x30601217,0xf8000400,0x18000,0x30601217,0xf9000400,0x18000,0x310028e7,0x810000,0,0x3108040e,0xf8000480,0x10402,0x3108040e,0xf8000480,0x28402,0x31082c1e, +0x80000000,0,0x31082c1e,0xf8000400,0x18400,0x31082c8d,0xf8000400,0x18400,0x31082d09,0xf8000400,0x10400,0x31082d09,0xf8000400,0x28400,0x31082d80,0x80000000, +0,0x31082e00,0x80000000,0,0x31082e00,0x80000000,1,0x31082e80,0x80000080,5,0x31082e80,0xf8000480,0x10405,0x31082e80,0xf8000480,0x28405, +0x31242e00,0x800000,0xc820,0x31242e00,0x50020000,0x60,0x31242e00,0x50021000,0x60,0x31242e00,0xd0000000,0,0x31242e00,0xd0001000,0,0x31242e01, +0x50021000,0x60,0x31243000,0x800000,0xc820,0x313aaf11,0xf8400c00,0x18000,0x313aaf91,0xf8000c00,0x18001,0x314c2e80,0xd0000080,0x15805,0x32041b80,0x80000000, +0x4000000,0x32049980,0x80000000,0,0x32080219,0xf8000400,0x28400,0x3208040e,0x80000080,0,0x3208040e,0xf8000400,0x10400,0x3208040e,0xf8000400,0x28400, +0x32080488,0xf8000400,0x10400,0x32080488,0xf8000400,0x28400,0x32080602,0xf8000400,0x18400,0x32080725,0xf8000400,0x18400,0x32080e8c,0xf8000400,0x18400,0x32081400, +0x800080,0xc820,0x32081400,0x80000000,0x4000000,0x32081400,0x80000000,0x4000002,0x32081400,0x80000080,0x4000000,0x32081499,0xf8000400,0x1040f,0x32081600,0x80000000, +0,0x32081600,0x80000080,0,0x32081600,0x80000080,5,0x32081600,0xf8000480,0x10405,0x32081600,0xf8000480,0x28405,0x32081700,0x80000080,0x4000000, +0x32081780,0x80000080,0x4000000,0x32081800,0x80000000,0x4000000,0x32081800,0x80000080,0x4000000,0x32081a80,0x80000000,0x4000000,0x32081b00,0x80000080,0x4000000,0x32081b80, +0x80000000,0x4000000,0x32082a82,0xf8000400,0x18400,0x32083088,0xf8000400,0x10400,0x32083088,0xf8000400,0x28400,0x3208312a,0xf8000400,0x18400,0x320831ab,0xf8000400, +0x18400,0x3208322c,0xf8000400,0x18400,0x320832ad,0xf8000400,0x18400,0x32083300,0x80000080,0x4000000,0x32083380,0x80000080,0x4000000,0x32083400,0x80000080,0x4000000, +0x32083480,0x80000080,0x4000000,0x32083500,0x80000080,0x4000000,0x32083500,0x80000080,0x4000001,0x32083500,0x80000080,0x4000002,0x32101400,0x80000001,0x20002,0x32103180, +0x80000000,0,0x32201c00,0x80000000,0x4008000,0x32203480,0x80000080,0x4008000,0x3221ab80,0x80000000,0x8011,0x32223300,0x80000080,0x4008000,0x32223480,0x80000080, +0x4008000,0x32241581,0x20000,0x60,0x32241581,0x50020000,0x60,0x32241581,0x50020080,0x60,0x3224312a,0x50020400,0x60,0x3224312a,0x50060000,0x60, +0x322431ab,0x50020400,0x60,0x322431ab,0x50060000,0x60,0x3224322c,0x50020400,0x60,0x322432ad,0x50020400,0x60,0x32248381,0x50020000,0x60,0x3224b601, +0x50820000,0x2000060,0x32308381,0x50820000,0x60,0x323a9e80,0x80000000,0,0x323a9f14,0xf8000400,0x18010,0x323a9f96,0xf8000400,0x18c10,0x323aa200,0x80000000, +3,0x323aa4a9,0x80000000,0,0x323aa791,0xf8000400,0x18401,0x323aa980,0x80000000,0x4000000,0x32481400,0x80000040,0x5024002,0x324a9e80,0xf8000400,0x18400, +0x324a9e91,0xf8000400,0x18400,0x324a9f14,0xf8000400,0x18000,0x324a9f80,0x80000008,0xc00,0x324ab596,0xf8000400,0x18c00,0x32501c00,0x80000000,0x4008000,0x32503480, +0x80000080,0x4008000,0x3251ab80,0x80000000,0x8011,0x32523300,0x80000080,0x4008000,0x32523480,0x80000080,0x4008000,0x32542882,0x80000000,8,0x32581500,0x80000000, +0,0x32781400,0x800000,0xc820,0x40049b80,0x80000000,0x4000000,0x40080219,0xf8000400,0x10400,0x40080299,0xf8000400,0x10400,0x40080300,0x80001000,0, +0x4008040e,0xf8000400,0x10400,0x4008040e,0xf8000400,0x28400,0x4008040e,0xf8000400,0x28402,0x40080600,0x800000,0xc820,0x40080602,0x80000000,0,0x40080602, +0xf8000400,0x18400,0x400806a2,0xf8000400,0x18400,0x4008078a,0xf8000400,0x18400,0x40080804,0xf8000400,0x18400,0x4008090f,0xf8000400,0x18400,0x4008099f,0xf8000400, +0x18400,0x40080a23,0x80000000,0,0x40080b15,0xf8000400,0x18400,0x40081217,0x80000000,0,0x40081400,0x80000008,0x4000000,0x40081400,0xd0000000,0x1c00, +0x40081600,0x80000000,2,0x40081800,0x80000000,0x4000000,0x40081800,0x80000080,0x4000000,0x40081b80,0x80000000,0x4000000,0x40082880,0x80000000,0,0x40082d09, +0xf8000400,0x10400,0x40082d09,0xf8000400,0x28400,0x40082e80,0xf8000480,0x10405,0x400837b0,0x80000000,0,0x400837b0,0xf8000400,0x18400,0x40083897,0x80000000, +0,0x40083908,0xf8000400,0x10400,0x4008390e,0xf8000400,0x10400,0x4008390e,0xf8001400,0x1040e,0x4008390e,0xf8001400,0x1040f,0x40083919,0xf8000400,0x10400, +0x40083919,0xf8001400,0x10400,0x40083919,0xf8001400,0x1040e,0x40083919,0xf8001400,0x1040f,0x40083980,0x80000000,0x4000000,0x40083a00,0x80000000,0,0x40083ab1, +0xf8000400,0x18400,0x40083b31,0xf8000400,0x18400,0x40083b80,0x80000000,0,0x40083c35,0xf8000400,0x18400,0x40083cb3,0xf8000400,0x18400,0x40083d32,0xf8000400, +0x18400,0x40083daf,0xf8000400,0x18400,0x40083e00,0x80000000,0,0x40089980,0x80000000,0,0x40103b80,0x80000000,0,0x40103c35,0x80000040,0, +0x4022a980,0x80000000,0x8010,0x40240602,0x50020400,0x60,0x40240602,0x50021000,0x60,0x40240602,0x50021400,0x60,0x40240890,0x50020400,0x60,0x40240890, +0xd0000400,0x18400,0x4024090f,0x50020400,0x60,0x40240b15,0x50021000,0x60,0x402437b0,0x50020400,0x60,0x402437b0,0x50021000,0x60,0x402437b0,0xd0000400, +0x18400,0x40248381,0x50021000,0x60,0x4024be81,0x50820000,0x2000060,0x402c37b0,0x80000040,0x1024000,0x40308381,0x50021000,0x60,0x403aa200,0x80000000,0xd, +0x403aa212,0x80000000,2,0x403aa212,0x80000000,3,0x403aa280,0x80000000,0xd,0x40400602,0x80000000,0x1400,0x404c37b0,0xd0000000,0x15800,0x404c3d32, +0xd0000000,0x15800,0x4052a980,0x80000000,0x8010,0x4058090f,0x80000000,0,0x40580a23,0x80000000,0,0x40601217,0x50021000,0x60,0x40603834,0xf8000400, +0x18000,0x41080219,0xf8000400,0x10400,0x41080219,0xf8000400,0x28400,0x4108040e,0xf8000400,0x10400,0x4108040e,0xf8000400,0x28400,0x41080488,0xf8000400,0x10400, +0x41080488,0xf8000400,0x28400,0x4108078a,0xf8000400,0x18400,0x41080804,0xf8000400,0x18400,0x41080a23,0xf8000400,0x18400,0x41080e8c,0xf8000400,0x18400,0x41080e8c, +0xf8000400,0x1840f,0x41080f8b,0x80000000,0,0x41080f8b,0xf8000400,0x18400,0x41081400,0x80000000,0x4000000,0x41081499,0xf8000400,0x1040e,0x41081600,0x80000000, +0,0x41081600,0xf8000480,0x10405,0x41081800,0x80000000,0x4000000,0x41081b80,0x80000000,0x4000000,0x41082e80,0xf8000480,0x10405,0x41083300,0x80000080,0x4000000, +0x41083908,0xf8000400,0x1040f,0x41083919,0xf8000400,0x10400,0x41083980,0x80000000,0x4000000,0x41083f0e,0x80000000,0,0x41083f8e,0x80000000,0,0x41083f8e, +0xf8000400,0x18400,0x41084002,0xf8000400,0x18400,0x410840b7,0x80000000,0,0x410840b7,0xf8000400,0x18400,0x41084207,0x80000000,0,0x41084207,0xf8000400, +0x10400,0x41084207,0xf8000400,0x28400,0x4108428b,0xf8000400,0x18400,0x4108430b,0x80000000,0,0x4108430b,0xf8000400,0x18400,0x4108438c,0xf8000400,0x10400, +0x41084438,0xf8000400,0x10400,0x41084438,0xf8000400,0x28400,0x410844b9,0x80000000,0,0x410844b9,0xf8000400,0x18400,0x41084500,0x80000000,0,0x4108463d, +0xf8000400,0x18400,0x4108468e,0xf8000400,0x1040f,0x41084699,0xf8000400,0x10400,0x41084699,0xf8000400,0x1040f,0x41084700,0x80000000,0x4000000,0x410847ba,0x80000000, +0,0x410847ba,0xf8000400,0x18400,0x4108483c,0xf8000400,0x18400,0x4108483c,0xf8000400,0x1840f,0x41101400,0x80000000,0x4000000,0x411040b7,0x80000000,0, +0x41104207,0x80000000,0,0x411044b9,0x80000000,0,0x4110463d,0x80000040,0,0x41104700,0x80000000,0x4000000,0x41104700,0x80000018,0x4000000,0x41140da7, +0x80000000,0,0x41203300,0x80000080,0x4008000,0x4122c880,0x80000000,0x10,0x4122c880,0x80000000,0x8010,0x41240593,0x50020000,0x60,0x41240593,0x50020400, +0x60,0x41240602,0x50020400,0x60,0x41240f8b,0x50020400,0x60,0x41241581,0x50020000,0x60,0x41243f0e,0x50020000,0x60,0x412440b7,0x50020400,0x60, +0x412440b7,0xd0000400,0x18400,0x41244181,0x50020000,0x60,0x412444b9,0x50020000,0x60,0x412444b9,0x50020400,0x60,0x412444b9,0x50060000,0x60,0x412447ba, +0x50020000,0x60,0x412447ba,0x50020400,0x60,0x412447ba,0x50060000,0x60,0x412447ba,0xd0000000,0,0x412447ba,0xd0000400,0x18400,0x41248381,0x50020000, +0x60,0x412c0593,0x80000000,0,0x412c0602,0x80000000,0,0x412ec880,0x80000000,0x10,0x41308381,0x50020000,0x60,0x413aa200,0x80000000,3, +0x413aa391,0xf8400c00,0x18000,0x413aa791,0xf8000c00,0x18001,0x413ac100,0x80000000,0,0x413ec880,0x80000000,0x10,0x4142c880,0x80000000,0x1410,0x414c0a23, +0xd0000000,0x15800,0x414c45bb,0xd0000000,0x15800,0x41503300,0x80000080,0x4008000,0x4152c880,0x80000000,0x8010,0x41540602,0x80000000,0,0x41581500,0x80000000, +0,0x415c4700,0x80000000,0x4008000,0x416045bb,0x80000000,0,0x416045bb,0xd0000400,0x18000,0x416045bb,0xf8000400,0x18000,0x50080219,0xf8000400,0x10400, +0x50080219,0xf8000400,0x28400,0x5008040e,0xf8000400,0x10400,0x50080488,0xf8000400,0x10400,0x50080488,0xf8000400,0x28400,0x5008078a,0xf8000400,0x18400,0x50080b15, +0x80000000,0,0x50081600,0x80000000,0,0x50081619,0xf8000400,0x10400,0x50081699,0xf8000400,0x10400,0x50081800,0x80000000,0x4000000,0x50081800,0x80000080, +0x4000000,0x50081b80,0x80000000,0x4000000,0x50082e80,0xf8000480,0x10405,0x50082e80,0xf8000480,0x28405,0x50083088,0xf8000400,0x10400,0x50083088,0xf8000400,0x28400, +0x50083300,0x80000080,0x4000000,0x50083980,0x80000000,0x4000000,0x50084500,0xf8001400,0x18400,0x50084957,0x80000000,0,0x50084957,0xf8000400,0x18400,0x50084957, +0xf8001400,0x18400,0x50084957,0xf8002400,0x18400,0x500849be,0x80000000,0,0x500849be,0xf8000400,0x18400,0x500849be,0xf8000400,0x18401,0x50084a19,0xf8000400, +0x10400,0x50084a19,0xf8000400,0x28400,0x50084a80,0x80001000,0,0x50084b5a,0xf8000400,0x18400,0x50084bdb,0x80000000,0,0x50084bdb,0xf8000400,0x18400, +0x50084c65,0xf8000400,0x18400,0x50084ce5,0xf8000400,0x18400,0x50084d00,0x80000000,0,0x501049be,0x80000000,0,0x501049be,0x80000040,0,0x501049be, +0x80000040,0x1024000,0x50104bdb,0x80000040,0,0x50104ce5,0x80000040,0,0x50144b5a,0x80000000,0,0x50240593,0x50021400,0x60,0x50240b15,0x50020400, +0x60,0x50241581,0x50020080,0x60,0x50244181,0x50021000,0x60,0x50244957,0x50021000,0x60,0x502449be,0x50020400,0x60,0x502449be,0x50021000,0x60, +0x502449be,0xd0000400,0x18400,0x502449be,0xd0000400,0x18401,0x502449be,0xd0041000,0,0x502c4957,0x80000040,0x1024000,0x502c4b5a,0x80000040,0x1024000,0x50404957, +0x80000040,0x1400,0x504c4957,0xd0000000,0x15800,0x504c49be,0xd0000000,0x15800}; +#else /* U_DARWIN */ +0x11501480,0x80000080,0x800e,0x11501480,0x80000080,0x800f,0x11502880,0x80000000,0x4008000,0x11512b80,0x80000020,0x800a,0x1151a700,0x80000000,0,0x1151ab80, +0x80000000,0x8011,0x11520080,0x80000000,0x4008000,0x11529800,0x80000000,0x4008001,0x11529e80,0x80000000,0x4008000,0x11529e80,0x80000020,0x4008000,0x1152a980,0x80000000, +0x8010,0x1152a980,0x80000020,0x8010,0x1152aa00,0x80000000,0x800c,0x11541400,0x80000000,0x4000000,0x11541400,0x80000000,0x4000002,0x11541400,0x80000080,0x4000002, +0x11541500,0x80000000,0,0x11548100,0x80000000,0x4000000,0x11549400,0x80000000,0x4000000,0x11549400,0x80000080,0x4000000,0x11549400,0x80000080,0x4000002,0x11549600, +0x80000000,2,0x1155ab80,0x80000000,0x11,0x11560080,0x80000000,0x4000000,0x11560100,0x80000000,0x4000000,0x1156aa00,0x80000000,0xc,0x11580804,0x80000000, +0,0x11580c80,0x80000000,0,0x11581500,0x80000000,0,0x11581500,0x80000000,2,0x11581780,0x80000080,0x4000000,0x11581780,0x80000088,0x4000000, +0x11582700,0x80000000,0,0x11588100,0x80000000,0x4000000,0x11588100,0x80000080,0x4000000,0x11589600,0x80000000,2,0x11591500,0x80000000,0,0x1159ab80, +0x80000000,0x11,0x115a0080,0x80000000,0x4000000,0x115a0080,0x80000080,0x4000000,0x115a0100,0x80000000,0x4000000,0x115aaa00,0x80000000,0xc,0x115c0100,0x80000020, +0x4008000,0x115c1400,0x80000020,0x4008000,0x115c1c00,0x80000000,0x4008000,0x115c9400,0x80000020,0x4008000,0x115c9400,0x80000020,0x4009000,0x115e0080,0x80000020,0x4008000, +0x115e0080,0x80000020,0x4009000,0x11600ca6,0x50020400,0x60,0x11600ca6,0x50021000,0x60,0x11600ca6,0x50060400,0x60,0x11600ca6,0xf0000400,0x18002,0x11600ca6, +0xf8000400,0x18000,0x11600ca6,0xf8002400,0x18000,0x11600ca6,0xfc000400,0x18000,0x11600d18,0x50020400,0x60,0x11600d18,0x50021000,0x60,0x11600d18,0xf0000400, +0x18002,0x11600d18,0xf8000400,0x18000,0x11600d18,0xf8000400,0x18002,0x11600d18,0xf8002400,0x18000,0x11600d18,0xfc000400,0x18000,0x116a0080,0x80000001,0x8020000, +0x116e0080,0x80000000,0x4000000,0x11701400,0x800000,0xc820,0x11740100,1,0x801c020,0x11782a80,0x800000,0xc820,0x11868f12,0xf8000400,0x18480,0x11868f12, +0xf8800400,0x18480,0x11880f12,0xf8000400,0x18500,0x118c0f12,0xf8000400,0x18520,0x118c0f12,0xf8800400,0x18520,0x20000067,0x810000,0,0x200036e7,0x810000, +0,0x20003767,0x810000,0,0x2000b6e7,0,0,0x2000b767,0,0,0x20080da7,0x80000000,0,0x20080da7,0xf8000400,0x18400, +0x20080da7,0xf8000400,0x18401,0x20081319,0xf8000400,0x10401,0x20100da7,0x80000000,0,0x20100da7,0xd0000400,0x18400,0x20140da7,0x80000000,0,0x20200da7, +0x80000000,0x8000,0x20240593,0x50021000,0x60,0x20240593,0x50021400,0x60,0x20240da7,0x50020400,0x60,0x20240da7,0x50020400,0x61,0x20240da7,0x50020400, +0x62,0x20240da7,0x50021000,0x60,0x20240da7,0x50061000,0x60,0x20240da7,0xd0001000,0,0x202c0da7,0x80000000,0,0x202c0da7,0x80000040,0, +0x20300da7,0x80000000,0xb,0x20300da7,0x80000040,0,0x204c0da7,0xd0000000,0x15800,0x20500da7,0x80000000,0x8000,0x20581500,0x80000000,0,0x206425e7, +0x800000,0,0x20642667,0x800000,0,0x206426e7,0x800000,0,0x207ea512,0xf8000400,0x184c1,0x2082a512,0xf8000400,0x184e1,0x211c2b00,0x80000000, +0,0x21589500,0x80000000,0,0x30080219,0xf8000400,0x10400,0x30080219,0xf8000400,0x10401,0x30080219,0xf8000400,0x28400,0x30080219,0xf8000400,0x28401, +0x30080299,0xf8000400,0x10400,0x30080300,0x80001000,0,0x30080300,0xf8001400,0x18400,0x3008040e,0xf8000400,0x10400,0x30080488,0xf8000400,0x10400,0x30080488, +0xf8000400,0x10401,0x30080488,0xf8000400,0x28400,0x30080488,0xf8000400,0x28401,0x30080602,0x80000000,0,0x30080602,0xf8000400,0x18400,0x300806a2,0x800000, +0xc820,0x300806a2,0x80000000,0,0x300806a2,0x80000040,0,0x300806a2,0x80000040,0x1024000,0x300806a2,0xf8000400,0x18400,0x30080725,0xf8000400,0x18400, +0x30080c21,0x80000000,0,0x30080c21,0xf8000400,0x18400,0x30080da7,0x80000000,0,0x30080da7,0xf8000400,0x18400,0x30080e1c,0x80000000,0,0x30080f8b, +0x80000000,0,0x30080f8b,0x80000040,0,0x30080f8b,0x80000040,0x1024000,0x30080f8b,0xd0000000,0,0x30080f8b,0xf8000400,0x18400,0x30081006,0xf8000400, +0x18400,0x300810a8,0x80000040,0,0x300810a8,0x80000040,0x1024000,0x300810a8,0xf8000400,0x18400,0x3008111d,0xf8000400,0x18400,0x300811a0,0xf8000400,0x18400, +0x30081217,0x80000000,0,0x3008129b,0x80000000,0,0x3008129b,0xf8000400,0x18400,0x3008129b,0xf8002400,0x18400,0x30081400,0x80000000,0x4000000,0x30081600, +0x80000000,0,0x30081600,0xf8000400,0x10405,0x30081680,0xf8000400,0x28400,0x30081700,0x80000000,0x4000000,0x30081800,0x80000000,0x4000000,0x30081880,0x80000000, +0x4000000,0x30081b00,0x80000000,0x4000000,0x30081b80,0x80000000,0x4000000,0x30081cae,0x80000000,0x4000000,0x30082813,0xf8000400,0x18401,0x30088300,0x80001000,0, +0x30100503,0x80000018,0,0x30100da7,0x80000000,0,0x30100e1c,0x80000040,0x1024000,0x30100f8b,0x80000040,0,0x3010111d,0x80000001,0x20000,0x30101180, +0x80000040,0,0x30101217,0x80000000,0,0x30101217,0x80000040,0,0x30101280,0x80000040,0,0x30101280,0x80000040,0x1024000,0x3010129b,0x80000040, +0,0x3010129b,0x80000040,0x1024000,0x3014129b,0x80000018,0,0x3020111d,0x80000000,0x8000,0x30240488,0x20000,0x60,0x30240601,0x50020400,0x60, +0x302406a2,0x50020400,0x60,0x302406a2,0x50021000,0x60,0x302406a2,0x50021400,0x60,0x30240725,0x50021400,0x60,0x30240c21,0x50020400,0x60,0x30240c21, +0x50061000,0x60,0x30240c21,0xd0000400,0x18400,0x30240c21,0xd0000400,0x18401,0x30240da7,0x50020400,0x60,0x30240da7,0x50021000,0x60,0x3024129b,0x50020400, +0x60,0x3024129b,0x50820000,0x2000060,0x30241581,0x20000,0x60,0x30242b00,0,0xc820,0x30248381,0x50021000,0x60,0x3030129b,0x80000001,0x20000, +0x30301400,0x80000001,0x2000b,0x30308381,0x50021000,0x60,0x303a9d11,0x80200000,0,0x303a9d11,0x80200000,2,0x303a9d91,0x80200000,2,0x303a9e00, +0x80080000,0,0x303a9e00,0x80100000,0,0x303a9e80,0x80000000,0,0x303a9e91,0xf8000c00,0x18002,0x303aa185,0xf8000400,0x18400,0x303aa311,0xf8400c00, +0x18000,0x303aa429,0xf8000400,0x18400,0x303aa4a9,0x80000000,0,0x30481217,0x80000040,0,0x30481400,0x80000040,0x5024002,0x304aa429,0xf8002400,0x18400, +0x304c0e1c,0xd0000000,0x15800,0x304c1217,0xd0000000,0x15800,0x304c129b,0xd0000000,0x15800,0x3050111d,0x80000000,0x8000,0x30581217,0x80000000,0,0x30581500, +0x80000000,0,0x30600e1c,0x50020400,0x60,0x30600e1c,0x50021000,0x60,0x30600e1c,0x50061000,0x60,0x30600e1c,0xd0000400,0x18000,0x30600e1c,0xf8000400, +0x18000,0x30600e1c,0xf8000400,0x18001,0x30601217,0x800000,0xc820,0x30601217,0x50020400,0x60,0x30601217,0x50021000,0x60,0x30601217,0x50061000,0x60, +0x30601217,0x51021000,0x60,0x30601217,0xd0000400,0x18000,0x30601217,0xf8000400,0x18000,0x30601217,0xf9000400,0x18000,0x310028e7,0x810000,0,0x3108040e, +0xf8000480,0x10402,0x3108040e,0xf8000480,0x28402,0x31082c1e,0x80000000,0,0x31082c1e,0xf8000400,0x18400,0x31082c8d,0xf8000400,0x18400,0x31082d09,0xf8000400, +0x10400,0x31082d09,0xf8000400,0x28400,0x31082d80,0x80000000,0,0x31082e00,0x80000000,0,0x31082e00,0x80000000,1,0x31082e80,0x80000080,5, +0x31082e80,0xf8000480,0x10405,0x31082e80,0xf8000480,0x28405,0x31242e00,0x800000,0xc820,0x31242e00,0x50020000,0x60,0x31242e00,0x50021000,0x60,0x31242e00, +0xd0000000,0,0x31242e00,0xd0001000,0,0x31242e01,0x50021000,0x60,0x31243000,0x800000,0xc820,0x313aaf11,0xf8400c00,0x18000,0x313aaf91,0xf8000c00, +0x18001,0x314c2e80,0xd0000080,0x15805,0x32041b80,0x80000000,0x4000000,0x32049980,0x80000000,0,0x32080219,0xf8000400,0x28400,0x3208040e,0x80000080,0, +0x3208040e,0xf8000400,0x10400,0x3208040e,0xf8000400,0x28400,0x32080488,0xf8000400,0x10400,0x32080488,0xf8000400,0x28400,0x32080602,0xf8000400,0x18400,0x32080725, +0xf8000400,0x18400,0x32080e8c,0xf8000400,0x18400,0x32081400,0x800080,0xc820,0x32081400,0x80000000,0x4000000,0x32081400,0x80000000,0x4000002,0x32081400,0x80000080, +0x4000000,0x32081499,0xf8000400,0x1040f,0x32081600,0x80000000,0,0x32081600,0x80000080,0,0x32081600,0x80000080,5,0x32081600,0xf8000480,0x10405, +0x32081600,0xf8000480,0x28405,0x32081700,0x80000080,0x4000000,0x32081780,0x80000080,0x4000000,0x32081800,0x80000000,0x4000000,0x32081800,0x80000080,0x4000000,0x32081a80, +0x80000000,0x4000000,0x32081b00,0x80000080,0x4000000,0x32081b80,0x80000000,0x4000000,0x32082a82,0xf8000400,0x18400,0x32083088,0xf8000400,0x10400,0x32083088,0xf8000400, +0x28400,0x3208312a,0xf8000400,0x18400,0x320831ab,0xf8000400,0x18400,0x3208322c,0xf8000400,0x18400,0x320832ad,0xf8000400,0x18400,0x32083300,0x80000080,0x4000000, +0x32083380,0x80000080,0x4000000,0x32083400,0x80000080,0x4000000,0x32083480,0x80000080,0x4000000,0x32083500,0x80000080,0x4000000,0x32083500,0x80000080,0x4000001,0x32083500, +0x80000080,0x4000002,0x32101400,0x80000001,0x20002,0x32103180,0x80000000,0,0x32201c00,0x80000000,0x4008000,0x32203480,0x80000080,0x4008000,0x3221ab80,0x80000000, +0x8011,0x32223300,0x80000080,0x4008000,0x32223480,0x80000080,0x4008000,0x32241581,0x20000,0x60,0x32241581,0x50020000,0x60,0x32241581,0x50020080,0x60, +0x3224312a,0x50020400,0x60,0x3224312a,0x50060000,0x60,0x322431ab,0x50020400,0x60,0x322431ab,0x50060000,0x60,0x3224322c,0x50020400,0x60,0x322432ad, +0x50020400,0x60,0x32248381,0x50020000,0x60,0x3224b601,0x50820000,0x2000060,0x32308381,0x50820000,0x60,0x323a9e80,0x80000000,0,0x323a9f14,0xf8000400, +0x18010,0x323a9f96,0xf8000400,0x18c10,0x323aa200,0x80000000,3,0x323aa4a9,0x80000000,0,0x323aa791,0xf8000400,0x18401,0x323aa980,0x80000000,0x4000000, +0x32481400,0x80000040,0x5024002,0x324a9e80,0xf8000400,0x18400,0x324a9e91,0xf8000400,0x18400,0x324a9f14,0xf8000400,0x18000,0x324a9f80,0x80000008,0xc00,0x324ab596, +0xf8000400,0x18c00,0x32501c00,0x80000000,0x4008000,0x32503480,0x80000080,0x4008000,0x3251ab80,0x80000000,0x8011,0x32523300,0x80000080,0x4008000,0x32523480,0x80000080, +0x4008000,0x32542882,0x80000000,8,0x32581500,0x80000000,0,0x32781400,0x800000,0xc820,0x40049b80,0x80000000,0x4000000,0x40080219,0xf8000400,0x10400, +0x40080299,0xf8000400,0x10400,0x40080300,0x80001000,0,0x4008040e,0xf8000400,0x10400,0x4008040e,0xf8000400,0x28400,0x4008040e,0xf8000400,0x28402,0x40080600, +0x800000,0xc820,0x40080602,0x80000000,0,0x40080602,0xf8000400,0x18400,0x400806a2,0xf8000400,0x18400,0x4008078a,0xf8000400,0x18400,0x40080804,0xf8000400, +0x18400,0x4008090f,0xf8000400,0x18400,0x4008099f,0xf8000400,0x18400,0x40080a23,0x80000000,0,0x40080b15,0xf8000400,0x18400,0x40081217,0x80000000,0, +0x40081400,0x80000008,0x4000000,0x40081400,0xd0000000,0x1c00,0x40081600,0x80000000,2,0x40081800,0x80000000,0x4000000,0x40081800,0x80000080,0x4000000,0x40081b80, +0x80000000,0x4000000,0x40082880,0x80000000,0,0x40082d09,0xf8000400,0x10400,0x40082d09,0xf8000400,0x28400,0x40082e80,0xf8000480,0x10405,0x400837b0,0x80000000, +0,0x400837b0,0xf8000400,0x18400,0x40083897,0x80000000,0,0x40083908,0xf8000400,0x10400,0x4008390e,0xf8000400,0x10400,0x4008390e,0xf8001400,0x1040e, +0x4008390e,0xf8001400,0x1040f,0x40083919,0xf8000400,0x10400,0x40083919,0xf8001400,0x10400,0x40083919,0xf8001400,0x1040e,0x40083919,0xf8001400,0x1040f,0x40083980, +0x80000000,0x4000000,0x40083a00,0x80000000,0,0x40083ab1,0xf8000400,0x18400,0x40083b31,0xf8000400,0x18400,0x40083b80,0x80000000,0,0x40083c35,0xf8000400, +0x18400,0x40083cb3,0xf8000400,0x18400,0x40083d32,0xf8000400,0x18400,0x40083daf,0xf8000400,0x18400,0x40083e00,0x80000000,0,0x40089980,0x80000000,0, +0x40103b80,0x80000000,0,0x40103c35,0x80000040,0,0x4022a980,0x80000000,0x8010,0x40240602,0x50020400,0x60,0x40240602,0x50021000,0x60,0x40240602, +0x50021400,0x60,0x40240890,0x50020400,0x60,0x40240890,0xd0000400,0x18400,0x4024090f,0x50020400,0x60,0x40240b15,0x50021000,0x60,0x402437b0,0x50020400, +0x60,0x402437b0,0x50021000,0x60,0x402437b0,0xd0000400,0x18400,0x40248381,0x50021000,0x60,0x4024be81,0x50820000,0x2000060,0x402c37b0,0x80000040,0x1024000, +0x40308381,0x50021000,0x60,0x403aa200,0x80000000,0xd,0x403aa212,0x80000000,2,0x403aa212,0x80000000,3,0x403aa280,0x80000000,0xd,0x40400602, +0x80000000,0x1400,0x404c37b0,0xd0000000,0x15800,0x404c3d32,0xd0000000,0x15800,0x4052a980,0x80000000,0x8010,0x4058090f,0x80000000,0,0x40580a23,0x80000000, +0,0x40601217,0x50021000,0x60,0x40603834,0xf8000400,0x18000,0x41080219,0xf8000400,0x10400,0x41080219,0xf8000400,0x28400,0x4108040e,0xf8000400,0x10400, +0x4108040e,0xf8000400,0x28400,0x41080488,0xf8000400,0x10400,0x41080488,0xf8000400,0x28400,0x4108078a,0xf8000400,0x18400,0x41080804,0xf8000400,0x18400,0x41080a23, +0xf8000400,0x18400,0x41080e8c,0xf8000400,0x18400,0x41080e8c,0xf8000400,0x1840f,0x41080f8b,0x80000000,0,0x41080f8b,0xf8000400,0x18400,0x41081400,0x80000000, +0x4000000,0x41081499,0xf8000400,0x1040e,0x41081600,0x80000000,0,0x41081600,0xf8000480,0x10405,0x41081800,0x80000000,0x4000000,0x41081b80,0x80000000,0x4000000, +0x41082e80,0xf8000480,0x10405,0x41083300,0x80000080,0x4000000,0x41083908,0xf8000400,0x1040f,0x41083919,0xf8000400,0x10400,0x41083980,0x80000000,0x4000000,0x41083f0e, +0x80000000,0,0x41083f8e,0x80000000,0,0x41083f8e,0xf8000400,0x18400,0x41084002,0xf8000400,0x18400,0x410840b7,0x80000000,0,0x410840b7,0xf8000400, +0x18400,0x41084207,0x80000000,0,0x41084207,0xf8000400,0x10400,0x41084207,0xf8000400,0x28400,0x4108428b,0xf8000400,0x18400,0x4108430b,0x80000000,0, +0x4108430b,0xf8000400,0x18400,0x4108438c,0xf8000400,0x10400,0x41084438,0xf8000400,0x10400,0x41084438,0xf8000400,0x28400,0x410844b9,0x80000000,0,0x410844b9, +0xf8000400,0x18400,0x41084500,0x80000000,0,0x4108463d,0xf8000400,0x18400,0x4108468e,0xf8000400,0x1040f,0x41084699,0xf8000400,0x10400,0x41084699,0xf8000400, +0x1040f,0x41084700,0x80000000,0x4000000,0x410847ba,0x80000000,0,0x410847ba,0xf8000400,0x18400,0x4108483c,0xf8000400,0x18400,0x4108483c,0xf8000400,0x1840f, +0x41101400,0x80000000,0x4000000,0x411040b7,0x80000000,0,0x41104207,0x80000000,0,0x411044b9,0x80000000,0,0x4110463d,0x80000040,0,0x41104700, +0x80000000,0x4000000,0x41104700,0x80000018,0x4000000,0x41140da7,0x80000000,0,0x41203300,0x80000080,0x4008000,0x4122c880,0x80000000,0x10,0x4122c880,0x80000000, +0x8010,0x41240593,0x50020000,0x60,0x41240593,0x50020400,0x60,0x41240602,0x50020400,0x60,0x41240f8b,0x50020400,0x60,0x41241581,0x50020000,0x60, +0x41243f0e,0x50020000,0x60,0x412440b7,0x50020400,0x60,0x412440b7,0xd0000400,0x18400,0x41244181,0x50020000,0x60,0x412444b9,0x50020000,0x60,0x412444b9, +0x50020400,0x60,0x412444b9,0x50060000,0x60,0x412447ba,0x50020000,0x60,0x412447ba,0x50020400,0x60,0x412447ba,0x50060000,0x60,0x412447ba,0xd0000000, +0,0x412447ba,0xd0000400,0x18400,0x41248381,0x50020000,0x60,0x412c0593,0x80000000,0,0x412c0602,0x80000000,0,0x412ec880,0x80000000,0x10, +0x41308381,0x50020000,0x60,0x413aa200,0x80000000,3,0x413aa391,0xf8400c00,0x18000,0x413aa791,0xf8000c00,0x18001,0x413ac100,0x80000000,0,0x413ec880, +0x80000000,0x10,0x4142c880,0x80000000,0x1410,0x414c0a23,0xd0000000,0x15800,0x414c45bb,0xd0000000,0x15800,0x41503300,0x80000080,0x4008000,0x4152c880,0x80000000, +0x8010,0x41540602,0x80000000,0,0x41581500,0x80000000,0,0x415c4700,0x80000000,0x4008000,0x416045bb,0x80000000,0,0x416045bb,0xd0000400,0x18000, +0x416045bb,0xf8000400,0x18000,0x50080219,0xf8000400,0x10400,0x50080219,0xf8000400,0x28400,0x5008040e,0xf8000400,0x10400,0x50080488,0xf8000400,0x10400,0x50080488, +0xf8000400,0x28400,0x5008078a,0xf8000400,0x18400,0x50080b15,0x80000000,0,0x50081600,0x80000000,0,0x50081619,0xf8000400,0x10400,0x50081699,0xf8000400, +0x10400,0x50081800,0x80000000,0x4000000,0x50081800,0x80000080,0x4000000,0x50081b80,0x80000000,0x4000000,0x50082e80,0xf8000480,0x10405,0x50082e80,0xf8000480,0x28405, +0x50083088,0xf8000400,0x10400,0x50083088,0xf8000400,0x28400,0x50083300,0x80000080,0x4000000,0x50083980,0x80000000,0x4000000,0x50084500,0xf8001400,0x18400,0x50084957, +0x80000000,0,0x50084957,0xf8000400,0x18400,0x50084957,0xf8001400,0x18400,0x50084957,0xf8002400,0x18400,0x500849be,0x80000000,0,0x500849be,0xf8000400, +0x18400,0x500849be,0xf8000400,0x18401,0x50084a19,0xf8000400,0x10400,0x50084a19,0xf8000400,0x28400,0x50084a80,0x80001000,0,0x50084b5a,0xf8000400,0x18400, +0x50084bdb,0x80000000,0,0x50084bdb,0xf8000400,0x18400,0x50084c65,0xf8000400,0x18400,0x50084ce5,0xf8000400,0x18400,0x50084d00,0x80000000,0,0x501049be, +0x80000000,0,0x501049be,0x80000040,0,0x501049be,0x80000040,0x1024000,0x50104bdb,0x80000040,0,0x50104ce5,0x80000040,0,0x50144b5a,0x80000000, +0,0x50240593,0x50021400,0x60,0x50240b15,0x50020400,0x60,0x50241581,0x50020080,0x60,0x50244181,0x50021000,0x60,0x50244957,0x50021000,0x60, +0x502449be,0x50020400,0x60,0x502449be,0x50021000,0x60,0x502449be,0xd0000400,0x18400,0x502449be,0xd0000400,0x18401,0x502449be,0xd0041000,0,0x502c4957, +0x80000040,0x1024000,0x502c4b5a,0x80000040,0x1024000,0x50404957,0x80000040,0x1400,0x504c4957,0xd0000000,0x15800,0x504c49be,0xd0000000,0x15800}; +#endif /* U_DARWIN */ + +#ifndef U_DARWIN +static const int32_t countPropsVectors=3384; +#else /* U_DARWIN */ +static const int32_t countPropsVectors=3438; +#endif /* U_DARWIN */ +static const int32_t propsVectorsColumns=3; +#ifndef U_DARWIN +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x1a54,0x1a54,0x1a54,0x1a54,0x3b66,3,0x489e,0,0,0,0x8ecd67,0x29d31,0,0,0,0}; +#else /* U_DARWIN */ +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x1aaa,0x1aaa,0x1aaa,0x1aaa,0x3c24,3,0x4992,0,0,0,0x8ecd67,0x29d31,0,0,0,0}; +#endif /* U_DARWIN */ + diff --git a/icuSources/common/ucln_cmn.c b/icuSources/common/ucln_cmn.c index c14b3dbc..452e628b 100644 --- a/icuSources/common/ucln_cmn.c +++ b/icuSources/common/ucln_cmn.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2001-2004, International Business Machines * +* Copyright (C) 2001-2006, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -26,9 +26,11 @@ #include "uassert.h" static cleanupFunc *gCommonCleanupFunctions[UCLN_COMMON_COUNT]; +static cleanupFunc *gLibCleanupFunctions[UCLN_COMMON]; -void ucln_common_registerCleanup(ECleanupCommonType type, - cleanupFunc *func) +U_CFUNC void +ucln_common_registerCleanup(ECleanupCommonType type, + cleanupFunc *func) { U_ASSERT(UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT); if (UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT) @@ -37,10 +39,30 @@ void ucln_common_registerCleanup(ECleanupCommonType type, } } -U_CFUNC UBool ucln_common_lib_cleanup(void) { - ECleanupCommonType commonFunc; +U_CAPI void U_EXPORT2 +ucln_registerCleanup(ECleanupLibraryType type, + cleanupFunc *func) +{ + U_ASSERT(UCLN_START < type && type < UCLN_COMMON); + if (UCLN_START < type && type < UCLN_COMMON) + { + gLibCleanupFunctions[type] = func; + } +} + +U_CFUNC UBool ucln_lib_cleanup(void) { + ECleanupLibraryType libType = UCLN_START; + ECleanupCommonType commonFunc = UCLN_COMMON_START; + + for (libType++; libTypetoc; if(toc!=NULL) { - const char *base=(const char *)pData->toc; + const char *base=(const char *)toc; uint32_t start, limit, number, lastNumber; int32_t strResult; const UDataOffsetTOCEntry *entry; @@ -120,13 +120,11 @@ offsetTOCLookupFn(const UDataMemory *pData, limit=toc->count; /* number of names in this table of contents */ lastNumber=limit; entry=toc->entry; - if (limit == 0) { /* Stub common data library used during build is empty. */ - return NULL; - } for (;;) { number = (start+limit)/2; if (lastNumber == number) { /* Have we moved? */ - break; /* We haven't moved, and it wasn't found. */ + break; /* We haven't moved, and it wasn't found; */ + /* or the empty stub common data library was used during build. */ } lastNumber = number; strResult = uprv_strcmp(tocEntryName, base+entry[number].nameOffset); @@ -165,11 +163,7 @@ offsetTOCLookupFn(const UDataMemory *pData, static uint32_t pointerTOCEntryCount(const UDataMemory *pData) { const PointerTOC *toc = (PointerTOC *)pData->toc; - if (toc != NULL) { - return toc->count; - } else { - return 0; - } + return (uint32_t)((toc != NULL) ? (toc->count) : 0); } @@ -194,14 +188,11 @@ static const DataHeader *pointerTOCLookupFn(const UDataMemory *pData, limit=toc->count; lastNumber=limit; - if (limit == 0) { /* Stub common data library used during build is empty. */ - return NULL; - } - for (;;) { number = (start+limit)/2; if (lastNumber == number) { /* Have we moved? */ - break; /* We haven't moved, and it wasn't found. */ + break; /* We haven't moved, and it wasn't found, */ + /* or the empty stub common data library was used during build. */ } lastNumber = number; strResult = uprv_strcmp(name, toc->entry[number].entryName); diff --git a/icuSources/common/ucmp8.c b/icuSources/common/ucmp8.c deleted file mode 100644 index f22c2e13..00000000 --- a/icuSources/common/ucmp8.c +++ /dev/null @@ -1,572 +0,0 @@ -/* -******************************************************************** -* COPYRIGHT: -* Copyright (c) 1997-2004, International Business Machines Corporation and -* others. All Rights Reserved. -******************************************************************** -*/ - -#include "ucmp8.h" -#include "cmemory.h" - -/* internal constants*/ - - -U_CAPI int32_t U_EXPORT2 -ucmp8_getkUnicodeCount() { return UCMP8_kUnicodeCount;} - -U_CAPI int32_t U_EXPORT2 -ucmp8_getkBlockCount() { return UCMP8_kBlockCount;} - -U_CAPI void U_EXPORT2 -ucmp8_initBogus(CompactByteArray* array) -{ - CompactByteArray* this_obj = array; - - if (this_obj == NULL) return; - - this_obj->fStructSize = sizeof(CompactByteArray); - this_obj->fArray = NULL; - this_obj->fIndex = NULL; - this_obj->fCount = UCMP8_kUnicodeCount; - this_obj->fCompact = FALSE; - this_obj->fBogus = TRUE; - this_obj->fAlias = FALSE; - this_obj->fIAmOwned = TRUE; -} - -/* debug flags*/ -/*=======================================================*/ -U_CAPI void U_EXPORT2 -ucmp8_init(CompactByteArray* array, int8_t defaultValue) -{ -/* set up the index array and the data array. - * the index array always points into particular parts of the data array - * it is initially set up to point at regular block boundaries - * The following example uses blocks of 4 for simplicity - * Example: Expanded - * INDEX# 0 1 2 3 4 - * INDEX 0 4 8 12 16 ... - * ARRAY abcdeababcedzyabcdea... - * | | | | | |... - * whenever you set an element in the array, it unpacks to this state - * After compression, the index will point to various places in the data array - * wherever there is a runs of the same elements as in the original - * Example: Compressed - * INDEX# 0 1 2 3 4 - * INDEX 0 4 1 8 2 ... - * ARRAY abcdeabazyabc... - * If you look at the example, index# 2 in the expanded version points - * to data position number 8, which has elements "bced". In the compressed - * version, index# 2 points to data position 1, which also has "bced" - */ - CompactByteArray* this_obj = array; - int32_t i; - - if (this_obj == NULL) return; - - this_obj->fStructSize = sizeof(CompactByteArray); - this_obj->fArray = NULL; - this_obj->fIndex = NULL; - this_obj->fCount = UCMP8_kUnicodeCount; - this_obj->fCompact = FALSE; - this_obj->fBogus = FALSE; - this_obj->fAlias = FALSE; - this_obj->fIAmOwned = TRUE; - - - this_obj->fArray = (int8_t*) uprv_malloc(sizeof(int8_t) * UCMP8_kUnicodeCount); - if (!this_obj->fArray) - { - this_obj->fBogus = TRUE; - return; - } - this_obj->fIndex = (uint16_t*) uprv_malloc(sizeof(uint16_t) * UCMP8_kIndexCount); - if (!this_obj->fIndex) - { - uprv_free(this_obj->fArray); - this_obj->fArray = NULL; - this_obj->fBogus = TRUE; - return; - } - for (i = 0; i < UCMP8_kUnicodeCount; ++i) - { - this_obj->fArray[i] = defaultValue; - } - for (i = 0; i < UCMP8_kIndexCount; ++i) - { - this_obj->fIndex[i] = (uint16_t)(i << UCMP8_kBlockShift); - } -} - -U_CAPI CompactByteArray* U_EXPORT2 -ucmp8_open(int8_t defaultValue) -{ -/* set up the index array and the data array. - * the index array always points into particular parts of the data array - * it is initially set up to point at regular block boundaries - * The following example uses blocks of 4 for simplicity - * Example: Expanded - * INDEX# 0 1 2 3 4 - * INDEX 0 4 8 12 16 ... - * ARRAY abcdeababcedzyabcdea... - * | | | | | |... - * whenever you set an element in the array, it unpacks to this state - * After compression, the index will point to various places in the data array - * wherever there is a runs of the same elements as in the original - * Example: Compressed - * INDEX# 0 1 2 3 4 - * INDEX 0 4 1 8 2 ... - * ARRAY abcdeabazyabc... - * If you look at the example, index# 2 in the expanded version points - * to data position number 8, which has elements "bced". In the compressed - * version, index# 2 points to data position 1, which also has "bced" - */ - CompactByteArray* this_obj = (CompactByteArray*) uprv_malloc(sizeof(CompactByteArray)); - int32_t i; - - if (this_obj == NULL) return NULL; - - this_obj->fStructSize = sizeof(CompactByteArray); - this_obj->fArray = NULL; - this_obj->fIndex = NULL; - this_obj->fCount = UCMP8_kUnicodeCount; - this_obj->fCompact = FALSE; - this_obj->fBogus = FALSE; - this_obj->fAlias = FALSE; - this_obj->fIAmOwned = FALSE; - - - this_obj->fArray = (int8_t*) uprv_malloc(sizeof(int8_t) * UCMP8_kUnicodeCount); - if (!this_obj->fArray) - { - this_obj->fBogus = TRUE; - return NULL; - } - this_obj->fIndex = (uint16_t*) uprv_malloc(sizeof(uint16_t) * UCMP8_kIndexCount); - if (!this_obj->fIndex) - { - uprv_free(this_obj->fArray); - this_obj->fArray = NULL; - this_obj->fBogus = TRUE; - return NULL; - } - for (i = 0; i < UCMP8_kUnicodeCount; ++i) - { - this_obj->fArray[i] = defaultValue; - } - for (i = 0; i < UCMP8_kIndexCount; ++i) - { - this_obj->fIndex[i] = (uint16_t)(i << UCMP8_kBlockShift); - } - - return this_obj; -} - -U_CAPI CompactByteArray* U_EXPORT2 -ucmp8_openAdopt(uint16_t *indexArray, - int8_t *newValues, - int32_t count) -{ - CompactByteArray* this_obj = (CompactByteArray*) uprv_malloc(sizeof(CompactByteArray)); - /* test for NULL */ - if(this_obj == NULL) - return NULL; - ucmp8_initAdopt(this_obj, indexArray, newValues, count); - this_obj->fIAmOwned = FALSE; - return this_obj; -} - -U_CAPI CompactByteArray* U_EXPORT2 -ucmp8_openAlias(uint16_t *indexArray, - int8_t *newValues, - int32_t count) -{ - CompactByteArray* this_obj = (CompactByteArray*) uprv_malloc(sizeof(CompactByteArray)); - /* test for NULL */ - if(this_obj == NULL) - return NULL; - ucmp8_initAlias(this_obj, indexArray, newValues, count); - this_obj->fIAmOwned = FALSE; - return this_obj; -} - -/*=======================================================*/ - -U_CAPI CompactByteArray* U_EXPORT2 -ucmp8_initAdopt(CompactByteArray *this_obj, - uint16_t *indexArray, - int8_t *newValues, - int32_t count) -{ - if (this_obj) { - this_obj->fCount = count; - this_obj->fBogus = FALSE; - this_obj->fStructSize = sizeof(CompactByteArray); - - this_obj->fArray = newValues; - this_obj->fIndex = indexArray; - this_obj->fCompact = (UBool)((count < UCMP8_kUnicodeCount) ? TRUE : FALSE); - this_obj->fAlias = FALSE; - this_obj->fIAmOwned = TRUE; - } - - return this_obj; -} - -U_CAPI CompactByteArray* U_EXPORT2 -ucmp8_initAlias(CompactByteArray *this_obj, - uint16_t *indexArray, - int8_t *newValues, - int32_t count) -{ - if (this_obj) { - this_obj->fArray = NULL; - this_obj->fIndex = NULL; - this_obj->fCount = count; - this_obj->fBogus = FALSE; - this_obj->fStructSize = sizeof(CompactByteArray); - - this_obj->fArray = newValues; - this_obj->fIndex = indexArray; - this_obj->fCompact = (UBool)((count < UCMP8_kUnicodeCount) ? TRUE : FALSE); - this_obj->fAlias = TRUE; - this_obj->fIAmOwned = TRUE; - } - - return this_obj; -} - -/*=======================================================*/ - -U_CAPI void U_EXPORT2 -ucmp8_close(CompactByteArray* this_obj) -{ - if(this_obj != NULL) { - if(!this_obj->fAlias) { - if(this_obj->fArray != NULL) { - uprv_free(this_obj->fArray); - } - if(this_obj->fIndex != NULL) { - uprv_free(this_obj->fIndex); - } - } - if(!this_obj->fIAmOwned) /* Called if 'init' was called instead of 'open'. */ - { - uprv_free(this_obj); - } - } -} - - -/*=======================================================*/ - -U_CAPI void U_EXPORT2 -ucmp8_expand(CompactByteArray* this_obj) -{ - /* can optimize later. - * if we have to expand, then walk through the blocks instead of using Get - * this code unpacks the array by copying the blocks to the normalized position. - * Example: Compressed - * INDEX# 0 1 2 3 4 - * INDEX 0 4 1 8 2 ... - * ARRAY abcdeabazyabc... - * turns into - * Example: Expanded - * INDEX# 0 1 2 3 4 - * INDEX 0 4 8 12 16 ... - * ARRAY abcdeababcedzyabcdea... - */ - int32_t i; - if (this_obj->fCompact) - { - int8_t* tempArray; - tempArray = (int8_t*) uprv_malloc(sizeof(int8_t) * UCMP8_kUnicodeCount); - if (!tempArray) - { - this_obj->fBogus = TRUE; - return; - } - for (i = 0; i < UCMP8_kUnicodeCount; ++i) - { - tempArray[i] = ucmp8_get(this_obj,(UChar)i); /* HSYS : How expand?*/ - } - for (i = 0; i < UCMP8_kIndexCount; ++i) - { - this_obj->fIndex[i] = (uint16_t)(i<< UCMP8_kBlockShift); - } - uprv_free(this_obj->fArray); - this_obj->fArray = tempArray; - this_obj->fCompact = FALSE; - this_obj->fAlias = FALSE; - - } -} - - -/*=======================================================*/ -/* this_obj->fArray: an array to be overlapped - * start and count: specify the block to be overlapped - * tempIndex: the overlapped array (actually indices back into inputContents) - * inputHash: an index of hashes for tempIndex, where - * inputHash[i] = XOR of values from i-count+1 to i - */ -static int32_t -findOverlappingPosition(CompactByteArray* this_obj, - uint32_t start, - const UChar* tempIndex, - int32_t tempIndexCount, - uint32_t cycle) -{ - /* this_obj is a utility routine for finding blocks that overlap. - * IMPORTANT: the cycle number is very important. Small cycles take a lot - * longer to work. In some cases, they may be able to get better compaction. - */ - - int32_t i; - int32_t j; - int32_t currentCount; - - for (i = 0; i < tempIndexCount; i += cycle) - { - currentCount = UCMP8_kBlockCount; - if (i + UCMP8_kBlockCount > tempIndexCount) - { - currentCount = tempIndexCount - i; - } - for (j = 0; j < currentCount; ++j) - { - if (this_obj->fArray[start + j] != this_obj->fArray[tempIndex[i + j]]) - break; - } - if (j == currentCount) - break; - } - - return i; -} - -U_CAPI UBool U_EXPORT2 -ucmp8_isBogus(const CompactByteArray* this_obj) -{ - return (UBool)(this_obj == NULL || this_obj->fBogus); -} - -U_CAPI const int8_t* U_EXPORT2 -ucmp8_getArray(const CompactByteArray* this_obj) -{ - return this_obj->fArray; -} - -U_CAPI const uint16_t* U_EXPORT2 -ucmp8_getIndex(const CompactByteArray* this_obj) -{ - return this_obj->fIndex; -} - -U_CAPI int32_t U_EXPORT2 -ucmp8_getCount(const CompactByteArray* this_obj) -{ - return this_obj->fCount; -} - - -U_CAPI void U_EXPORT2 -ucmp8_set(CompactByteArray* this_obj, - UChar c, - int8_t value) -{ - if (this_obj->fCompact == TRUE) - { - ucmp8_expand(this_obj); - if (this_obj->fBogus) return; - } - this_obj->fArray[(int32_t)c] = value; -} - - -U_CAPI void U_EXPORT2 -ucmp8_setRange(CompactByteArray* this_obj, - UChar start, - UChar end, - int8_t value) -{ - int32_t i; - if (this_obj->fCompact == TRUE) - { - ucmp8_expand(this_obj); - if (this_obj->fBogus) - return; - } - for (i = start; i <= end; ++i) - { - this_obj->fArray[i] = value; - } -} - - -/*=======================================================*/ - -U_CAPI void U_EXPORT2 -ucmp8_compact(CompactByteArray* this_obj, - uint32_t cycle) -{ - if (!this_obj->fCompact) - { - /* this_obj actually does the compaction. - * it walks throught the contents of the expanded array, finding the - * first block in the data that matches the contents of the current index. - * As it works, it keeps an updated pointer to the last position, - * so that it knows how big to make the final array - * If the matching succeeds, then the index will point into the data - * at some earlier position. - * If the matching fails, then last position pointer will be bumped, - * and the index will point to that last block of data. - */ - UChar* tempIndex; - int32_t tempIndexCount; - int8_t* tempArray; - int32_t iBlock, iIndex; - - /* fix cycle, must be 0 < cycle <= blockcount*/ - if (cycle <= 0) - cycle = 1; - else if (cycle > (uint32_t)UCMP8_kBlockCount) - cycle = UCMP8_kBlockCount; - - /* make temp storage, larger than we need*/ - tempIndex = (UChar*) uprv_malloc(sizeof(UChar)* UCMP8_kUnicodeCount); - if (!tempIndex) - { - this_obj->fBogus = TRUE; - return; - } - /* set up first block.*/ - tempIndexCount = UCMP8_kBlockCount; - for (iIndex = 0; iIndex < UCMP8_kBlockCount; ++iIndex) - { - tempIndex[iIndex] = (uint16_t)iIndex; - } /* endfor (iIndex = 0; .....)*/ - this_obj->fIndex[0] = 0; - - /* for each successive block, find out its first position in the compacted array*/ - for (iBlock = 1; iBlock < UCMP8_kIndexCount; ++iBlock) - { - int32_t newCount, firstPosition, block; - block = iBlock << UCMP8_kBlockShift; - /* if (debugSmall) if (block > debugSmallLimit) break;*/ - firstPosition = findOverlappingPosition(this_obj, - block, - tempIndex, - tempIndexCount, - cycle); - - /* if not contained in the current list, copy the remainder - * invariant; cumulativeHash[iBlock] = XOR of values from iBlock-kBlockCount+1 to iBlock - * we do this_obj by XORing out cumulativeHash[iBlock-kBlockCount] - */ - newCount = firstPosition + UCMP8_kBlockCount; - if (newCount > tempIndexCount) - { - for (iIndex = tempIndexCount; iIndex < newCount; ++iIndex) - { - tempIndex[iIndex] = (uint16_t)(iIndex - firstPosition + block); - } /* endfor (iIndex = tempIndexCount....)*/ - tempIndexCount = newCount; - } /* endif (newCount > tempIndexCount)*/ - this_obj->fIndex[iBlock] = (uint16_t)firstPosition; - } /* endfor (iBlock = 1.....)*/ - - /* now allocate and copy the items into the array*/ - tempArray = (int8_t*) uprv_malloc(tempIndexCount * sizeof(int8_t)); - if (!tempArray) - { - this_obj->fBogus = TRUE; - uprv_free(tempIndex); - return; - } - for (iIndex = 0; iIndex < tempIndexCount; ++iIndex) - { - tempArray[iIndex] = this_obj->fArray[tempIndex[iIndex]]; - } - uprv_free(this_obj->fArray); - this_obj->fArray = tempArray; - this_obj->fCount = tempIndexCount; - - - /* free up temp storage*/ - uprv_free(tempIndex); - this_obj->fCompact = TRUE; - } /* endif (!this_obj->fCompact)*/ -} - -#define MEMORY_WRITE(destAddr, source, sizeSoFar, len) \ - if (destAddr) {\ - uprv_memcpy(destAddr+sizeSoFar, source, len);\ - }\ - sizeSoFar += (len) - -U_CAPI uint32_t U_EXPORT2 ucmp8_flattenMem (const CompactByteArray* array, uint8_t *MS) -{ - int32_t size = 0; - static const int32_t version = ICU_UCMP8_VERSION; - - MEMORY_WRITE(MS, &version, size, 4); - - MEMORY_WRITE(MS, &array->fCount, size, 4); - - MEMORY_WRITE(MS, array->fIndex, size, sizeof(array->fIndex[0])*UCMP8_kIndexCount); - - MEMORY_WRITE(MS, array->fArray, size, sizeof(array->fArray[0])*array->fCount); - - while(size%4) /* end padding */ - { - uint8_t pad = 0; - MEMORY_WRITE(MS, &pad, size, 1); - } - - return size; -} - -/* We use sizeof(*array), etc so that this code can be as portable as - possible between the ucmpX_ family. -*/ - -U_CAPI void U_EXPORT2 ucmp8_initFromData(CompactByteArray *this_obj, const uint8_t **source, UErrorCode *status) -{ - uint32_t i; - const uint8_t *oldSource = *source; - - if(U_FAILURE(*status)) - return; - - this_obj->fArray = NULL; - this_obj->fIndex = NULL; - this_obj->fBogus = FALSE; - this_obj->fStructSize = sizeof(CompactByteArray); - this_obj->fCompact = TRUE; - this_obj->fAlias = TRUE; - this_obj->fIAmOwned = TRUE; - - i = * ((const uint32_t*) *source); - (*source) += 4; - - if(i != ICU_UCMP8_VERSION) - { - *status = U_INVALID_FORMAT_ERROR; - return; - } - - this_obj->fCount = * ((const uint32_t*)*source); - (*source) += 4; - - this_obj->fIndex = (uint16_t*) *source; - (*source) += sizeof(this_obj->fIndex[0])*UCMP8_kIndexCount; - - this_obj->fArray = (int8_t*) *source; - (*source) += sizeof(this_obj->fArray[0])*this_obj->fCount; - - /* eat up padding */ - while((*source-(oldSource))%4) - (*source)++; -} diff --git a/icuSources/common/ucmp8.h b/icuSources/common/ucmp8.h deleted file mode 100644 index b4951825..00000000 --- a/icuSources/common/ucmp8.h +++ /dev/null @@ -1,244 +0,0 @@ -/* - ******************************************************************** - * COPYRIGHT: - * Copyright (c) 1996-2004, International Business Machines Corporation and - * others. All Rights Reserved. - ******************************************************************** - */ - - - -#ifndef UCMP8_H -#define UCMP8_H - -/* 32-bits. - Bump this whenever the internal structure changes. -*/ -#define ICU_UCMP8_VERSION 0x01260000 - -#include "unicode/utypes.h" - -/*==================================== - * class CompactByteArray - * Provides a compact way to store information that is indexed by Unicode values, - * such as character properties, types, keyboard values, etc. - * The ATypes are used by value, so should be small, integers or pointers. - *==================================== - */ - -U_CAPI int32_t U_EXPORT2 ucmp8_getkUnicodeCount(void); -U_CAPI int32_t U_EXPORT2 ucmp8_getkBlockCount(void); - -typedef struct CompactByteArray { - uint32_t fStructSize; - int8_t* fArray; - uint16_t* fIndex; - int32_t fCount; - UBool fCompact; - UBool fBogus; - UBool fAlias; - UBool fIAmOwned; /* don't free CBA on close */ -} CompactByteArray; - -#define UCMP8_kUnicodeCount 65536 -#define UCMP8_kBlockShift 7 -#define UCMP8_kBlockCount (1<fArray[(array->fIndex[index >> UCMP8_kBlockShift] & 0xFFFF) + (index & UCMP8_kBlockMask)]) - -#define ucmp8_getu(array,index) (uint8_t)ucmp8_get(array,index) - - -/** - * Set a new value for a Unicode character. - * Set automatically expands the array if it is compacted. - * - * @param array the CompactByteArray to be set - * @param character the character to set the mapped value with - * @param value the new mapped value - */ -U_CAPI void U_EXPORT2 ucmp8_set(CompactByteArray* array, - UChar character, - int8_t value); - -/** - * Set new values for a range of Unicode character. - * - * @param array the CompactByteArray to be set - * @param start the starting offset of the range - * @param end the ending offset of the range - * @param value the new mapped value - */ -U_CAPI void U_EXPORT2 ucmp8_setRange(CompactByteArray* array, - UChar start, - UChar end, - int8_t value); - -U_CAPI int32_t U_EXPORT2 ucmp8_getCount(const CompactByteArray* array); -U_CAPI const int8_t* U_EXPORT2 ucmp8_getArray(const CompactByteArray* array); -U_CAPI const uint16_t* U_EXPORT2 ucmp8_getIndex(const CompactByteArray* array); - -/** - * Compact the array. - * The value of cycle determines how large the overlap can be. - * A cycle of 1 is the most compacted, but takes the most time to do. - * If values stored in the array tend to repeat in cycles of, say, 16, - * then using that will be faster than cycle = 1, and get almost the - * same compression. - * @param array The CompactByteArray to be compacted - * @param cycle The value determines how large the overlap can be. - */ -U_CAPI void U_EXPORT2 ucmp8_compact(CompactByteArray* array, - uint32_t cycle); - -/** Expanded takes the array back to a 65536 element array - * @param array The CompactByteArray to be expanded - */ -U_CAPI void U_EXPORT2 ucmp8_expand(CompactByteArray* array); - -/** - * Flatten into a memory structure. Pass in NULL to pre-flight to get the required size. - * @internal - */ -U_CAPI uint32_t U_EXPORT2 ucmp8_flattenMem(const CompactByteArray* array, uint8_t *MS); - -/* initializes an existing CBA from memory. Will cause ucmp8_close() to not deallocate anything. */ -U_CAPI void U_EXPORT2 ucmp8_initFromData(CompactByteArray* array, const uint8_t **source, UErrorCode *status); - -#endif - diff --git a/icuSources/common/ucnv.c b/icuSources/common/ucnv.c index 635c78fa..ff6eebaf 100644 --- a/icuSources/common/ucnv.c +++ b/icuSources/common/ucnv.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -34,7 +34,6 @@ #include "utracimp.h" #include "ustr_imp.h" #include "ucnv_imp.h" -#include "ucnv_io.h" #include "ucnv_cnv.h" #include "ucnv_bld.h" @@ -56,17 +55,6 @@ static const UAmbiguousConverter ambiguousConverters[]={ { "ISO_2022,locale=ko,version=0", 0x20a9 } }; -U_CAPI const char* U_EXPORT2 -ucnv_getDefaultName () -{ - return ucnv_io_getDefaultConverterName(); -} - -U_CAPI void U_EXPORT2 -ucnv_setDefaultName (const char *converterName) -{ - ucnv_io_setDefaultConverterName(converterName); -} /*Calls through createConverter */ U_CAPI UConverter* U_EXPORT2 ucnv_open (const char *name, @@ -107,6 +95,28 @@ ucnv_openU (const UChar * name, return ucnv_open(u_austrcpy(asciiName, name), err); } +/* Copy the string that is represented by the UConverterPlatform enum + * @param platformString An output buffer + * @param platform An enum representing a platform + * @return the length of the copied string. + */ +static int32_t +ucnv_copyPlatformString(char *platformString, UConverterPlatform pltfrm) +{ + switch (pltfrm) + { + case UCNV_IBM: + uprv_strcpy(platformString, "ibm-"); + return 4; + case UCNV_UNKNOWN: + break; + } + + /* default to empty string */ + *platformString = 0; + return 0; +} + /*Assumes a $platform-#codepage.$CONVERTER_FILE_EXTENSION scheme and calls *through createConverter*/ U_CAPI UConverter* U_EXPORT2 @@ -239,6 +249,19 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U uprv_memcpy(localConverter, cnv, sizeof(UConverter)); localConverter->isCopyLocal = localConverter->isExtraLocal = FALSE; + /* copy the substitution string */ + if (cnv->subChars == (uint8_t *)cnv->subUChars) { + localConverter->subChars = (uint8_t *)localConverter->subUChars; + } else { + localConverter->subChars = (uint8_t *)uprv_malloc(UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); + if (localConverter->subChars == NULL) { + uprv_free(allocatedConverter); + UTRACE_EXIT_STATUS(*status); + return NULL; + } + uprv_memcpy(localConverter->subChars, cnv->subChars, UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); + } + /* now either call the safeclone fcn or not */ if (cnv->sharedData->impl->safeClone != NULL) { /* call the custom safeClone function */ @@ -246,6 +269,9 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U } if(localConverter==NULL || U_FAILURE(*status)) { + if (allocatedConverter != NULL && allocatedConverter->subChars != (uint8_t *)allocatedConverter->subUChars) { + uprv_free(allocatedConverter->subChars); + } uprv_free(allocatedConverter); UTRACE_EXIT_STATUS(*status); return NULL; @@ -285,27 +311,6 @@ ucnv_safeClone(const UConverter* cnv, void *stackBuffer, int32_t *pBufferSize, U U_CAPI void U_EXPORT2 ucnv_close (UConverter * converter) { - /* first, notify the callback functions that the converter is closed */ - UConverterToUnicodeArgs toUArgs = { - sizeof(UConverterToUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; - UConverterFromUnicodeArgs fromUArgs = { - sizeof(UConverterFromUnicodeArgs), - TRUE, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - }; UErrorCode errorCode = U_ZERO_ERROR; UTRACE_ENTRY_OC(UTRACE_UCNV_CLOSE); @@ -319,16 +324,50 @@ ucnv_close (UConverter * converter) UTRACE_DATA3(UTRACE_OPEN_CLOSE, "close converter %s at %p, isCopyLocal=%b", ucnv_getName(converter, &errorCode), converter, converter->isCopyLocal); - toUArgs.converter = fromUArgs.converter = converter; + /* In order to speed up the close, only call the callbacks when they have been changed. + This performance check will only work when the callbacks are set within a shared library + or from user code that statically links this code. */ + /* first, notify the callback functions that the converter is closed */ + if (converter->fromCharErrorBehaviour != UCNV_TO_U_DEFAULT_CALLBACK) { + UConverterToUnicodeArgs toUArgs = { + sizeof(UConverterToUnicodeArgs), + TRUE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + }; - converter->fromCharErrorBehaviour(converter->toUContext, &toUArgs, NULL, 0, UCNV_CLOSE, &errorCode); - errorCode = U_ZERO_ERROR; - converter->fromUCharErrorBehaviour(converter->fromUContext, &fromUArgs, NULL, 0, 0, UCNV_CLOSE, &errorCode); + toUArgs.converter = converter; + errorCode = U_ZERO_ERROR; + converter->fromCharErrorBehaviour(converter->toUContext, &toUArgs, NULL, 0, UCNV_CLOSE, &errorCode); + } + if (converter->fromUCharErrorBehaviour != UCNV_FROM_U_DEFAULT_CALLBACK) { + UConverterFromUnicodeArgs fromUArgs = { + sizeof(UConverterFromUnicodeArgs), + TRUE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + }; + fromUArgs.converter = converter; + errorCode = U_ZERO_ERROR; + converter->fromUCharErrorBehaviour(converter->fromUContext, &fromUArgs, NULL, 0, 0, UCNV_CLOSE, &errorCode); + } if (converter->sharedData->impl->close != NULL) { converter->sharedData->impl->close(converter); } + if (converter->subChars != (uint8_t *)converter->subUChars) { + uprv_free(converter->subChars); + } + /* Checking whether it's an algorithic converter is okay in multithreaded applications because the value never changes. @@ -339,7 +378,7 @@ ucnv_close (UConverter * converter) } if(!converter->isCopyLocal){ - uprv_free (converter); + uprv_free(converter); } UTRACE_EXIT(); @@ -350,47 +389,21 @@ ucnv_close (UConverter * converter) U_CAPI const char* U_EXPORT2 ucnv_getAvailableName (int32_t n) { - if (0 <= n && n <= 0xffff) { - UErrorCode err = U_ZERO_ERROR; - const char *name = ucnv_io_getAvailableConverter((uint16_t)n, &err); - if (U_SUCCESS(err)) { - return name; + if (0 <= n && n <= 0xffff) { + UErrorCode err = U_ZERO_ERROR; + const char *name = ucnv_bld_getAvailableConverter((uint16_t)n, &err); + if (U_SUCCESS(err)) { + return name; + } } - } - return NULL; + return NULL; } U_CAPI int32_t U_EXPORT2 ucnv_countAvailable () { UErrorCode err = U_ZERO_ERROR; - return ucnv_io_countAvailableConverters(&err); -} - -U_CAPI uint16_t U_EXPORT2 -ucnv_countAliases(const char *alias, UErrorCode *pErrorCode) -{ - return ucnv_io_countAliases(alias, pErrorCode); -} - - -U_CAPI const char* U_EXPORT2 -ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode) -{ - return ucnv_io_getAlias(alias, n, pErrorCode); -} - -U_CAPI void U_EXPORT2 -ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode) -{ - ucnv_io_getAliases(alias, 0, aliases, pErrorCode); -} - -U_CAPI uint16_t U_EXPORT2 -ucnv_countStandards(void) -{ - UErrorCode err = U_ZERO_ERROR; - return ucnv_io_countStandards(&err); + return ucnv_bld_countAvailableConverters(&err); } U_CAPI void U_EXPORT2 @@ -402,15 +415,19 @@ ucnv_getSubstChars (const UConverter * converter, if (U_FAILURE (*err)) return; + if (converter->subCharLen <= 0) { + /* Unicode string or empty string from ucnv_setSubstString(). */ + *len = 0; + return; + } + if (*len < converter->subCharLen) /*not enough space in subChars */ { *err = U_INDEX_OUTOFBOUNDS_ERROR; return; } - uprv_memcpy (mySubChar, converter->subChar, converter->subCharLen); /*fills in the subchars */ - *len = converter->subCharLen; /*store # of bytes copied to buffer */ - uprv_memcpy (mySubChar, converter->subChar, converter->subCharLen); /*fills in the subchars */ + uprv_memcpy (mySubChar, converter->subChars, converter->subCharLen); /*fills in the subchars */ *len = converter->subCharLen; /*store # of bytes copied to buffer */ } @@ -431,7 +448,7 @@ ucnv_setSubstChars (UConverter * converter, return; } - uprv_memcpy (converter->subChar, mySubChar, len); /*copies the subchars */ + uprv_memcpy (converter->subChars, mySubChar, len); /*copies the subchars */ converter->subCharLen = len; /*sets the new len */ /* @@ -444,6 +461,93 @@ ucnv_setSubstChars (UConverter * converter, return; } +U_DRAFT void U_EXPORT2 +ucnv_setSubstString(UConverter *cnv, + const UChar *s, + int32_t length, + UErrorCode *err) { + UAlignedMemory cloneBuffer[U_CNV_SAFECLONE_BUFFERSIZE / sizeof(UAlignedMemory) + 1]; + char chars[UCNV_ERROR_BUFFER_LENGTH]; + + UConverter *clone; + uint8_t *subChars; + int32_t cloneSize, length8; + + /* Let the following functions check all arguments. */ + cloneSize = sizeof(cloneBuffer); + clone = ucnv_safeClone(cnv, cloneBuffer, &cloneSize, err); + ucnv_setFromUCallBack(clone, UCNV_FROM_U_CALLBACK_STOP, NULL, NULL, NULL, err); + length8 = ucnv_fromUChars(clone, chars, (int32_t)sizeof(chars), s, length, err); + ucnv_close(clone); + if (U_FAILURE(*err)) { + return; + } + + if (cnv->sharedData->impl->writeSub == NULL +#if !UCONFIG_NO_LEGACY_CONVERSION + || (cnv->sharedData->staticData->conversionType == UCNV_MBCS && + ucnv_MBCSGetType(cnv) != UCNV_EBCDIC_STATEFUL) +#endif + ) { + /* The converter is not stateful. Store the charset bytes as a fixed string. */ + subChars = (uint8_t *)chars; + } else { + /* + * The converter has a non-default writeSub() function, indicating + * that it is stateful. + * Store the Unicode string for on-the-fly conversion for correct + * state handling. + */ + if (length > UCNV_ERROR_BUFFER_LENGTH) { + /* + * Should not occur. The converter should output at least one byte + * per UChar, which means that ucnv_fromUChars() should catch all + * overflows. + */ + *err = U_BUFFER_OVERFLOW_ERROR; + return; + } + subChars = (uint8_t *)s; + if (length < 0) { + length = u_strlen(s); + } + length8 = length * U_SIZEOF_UCHAR; + } + + /* + * For storing the substitution string, select either the small buffer inside + * UConverter or allocate a subChars buffer. + */ + if (length8 > UCNV_MAX_SUBCHAR_LEN) { + /* Use a separate buffer for the string. Outside UConverter to not make it too large. */ + if (cnv->subChars == (uint8_t *)cnv->subUChars) { + /* Allocate a new buffer for the string. */ + cnv->subChars = (uint8_t *)uprv_malloc(UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); + if (cnv->subChars == NULL) { + cnv->subChars = (uint8_t *)cnv->subUChars; + *err = U_MEMORY_ALLOCATION_ERROR; + return; + } + uprv_memset(cnv->subChars, 0, UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR); + } + } + + /* Copy the substitution string into the UConverter or its subChars buffer. */ + if (length8 == 0) { + cnv->subCharLen = 0; + } else { + uprv_memcpy(cnv->subChars, subChars, length8); + if (subChars == (uint8_t *)chars) { + cnv->subCharLen = (int8_t)length8; + } else /* subChars == s */ { + cnv->subCharLen = (int8_t)-length; + } + } + + /* See comment in ucnv_setSubstChars(). */ + cnv->subChar1 = 0; +} + /*resets the internal states of a converter *goal : have the same behaviour than a freshly created converter */ @@ -1587,7 +1691,7 @@ ucnv_toUChars(UConverter *cnv, ucnv_resetToUnicode(cnv); originalDest=dest; if(srcLength==-1) { - srcLength=uprv_strlen(src); + srcLength=(int32_t)uprv_strlen(src); } if(srcLength>0) { srcLimit=src+srcLength; @@ -1855,6 +1959,12 @@ ucnv_convertEx(UConverter *targetCnv, UConverter *sourceCnv, } if(pivotStart==NULL) { + if(!flush) { + /* streaming conversion requires an explicit pivot buffer */ + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return; + } + /* use the stack pivot buffer */ pivotStart=myPivotSource=myPivotTarget=pivotBuffer; pivotSource=&myPivotSource; @@ -1984,7 +2094,7 @@ ucnv_internalConvert(UConverter *outConverter, UConverter *inConverter, FALSE, TRUE, pErrorCode); - targetLength=myTarget-target; + targetLength=(int32_t)(myTarget-target); } /* @@ -2007,7 +2117,7 @@ ucnv_internalConvert(UConverter *outConverter, UConverter *inConverter, FALSE, TRUE, pErrorCode); - targetLength+=(myTarget-targetBuffer); + targetLength+=(int32_t)(myTarget-targetBuffer); } while(*pErrorCode==U_BUFFER_OVERFLOW_ERROR); /* done with preflighting, set warnings and errors as appropriate */ @@ -2322,7 +2432,7 @@ ucnv_detectUnicodeSignature( const char* source, } if(sourceLength==-1){ - sourceLength=uprv_strlen(source); + sourceLength=(int32_t)uprv_strlen(source); } @@ -2384,6 +2494,50 @@ ucnv_detectUnicodeSignature( const char* source, return NULL; } + U_DRAFT int32_t U_EXPORT2 + ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status){ + + if(status == NULL || U_FAILURE(*status)){ + return -1; + } + if(cnv == NULL){ + *status = U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + + if(cnv->preFromULength > 0){ + return U16_LENGTH(cnv->preFromUFirstCP)+cnv->preFromULength ; + }else if(cnv->preFromULength < 0){ + return -cnv->preFromULength ; + }else if(cnv->fromUChar32 > 0){ + return 1; + }else if(cnv->preFromUFirstCP >0){ + return U16_LENGTH(cnv->preFromUFirstCP); + } + return 0; + + } + +U_DRAFT int32_t U_EXPORT2 +ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status){ + + if(status == NULL || U_FAILURE(*status)){ + return -1; + } + if(cnv == NULL){ + *status = U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + + if(cnv->preToULength > 0){ + return cnv->preToULength ; + }else if(cnv->preToULength < 0){ + return -cnv->preToULength; + }else if(cnv->toULength > 0){ + return cnv->toULength; + } + return 0; +} #endif /* diff --git a/icuSources/common/ucnv2022.c b/icuSources/common/ucnv2022.c index cc8159a2..9dc1c283 100644 --- a/icuSources/common/ucnv2022.c +++ b/icuSources/common/ucnv2022.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnv2022.c @@ -84,6 +84,14 @@ static const char SHIFT_OUT_STR[] = "\x0E"; #define V_TAB 0x0B #define SPACE 0x20 +/* + * ISO 2022 control codes must not be converted from Unicode + * because they would mess up the byte stream. + * The bit mask 0x0800c000 has bits set at bit positions 0xe, 0xf, 0x1b + * corresponding to SO, SI, and ESC. + */ +#define IS_2022_CONTROL(c) (((c)<0x20) && (((uint32_t)1<<(c))&0x0800c000)!=0) + /* for ISO-2022-JP and -CN implementations */ typedef enum { /* shared values */ @@ -164,17 +172,17 @@ typedef struct ISO2022State { #define UCNV_2022_MAX_CONVERTERS 10 typedef struct{ + UConverterSharedData *myConverterArray[UCNV_2022_MAX_CONVERTERS]; UConverter *currentConverter; -#ifdef U_ENABLE_GENERIC_ISO_2022 - UBool isFirstBuffer; -#endif Cnv2022Type currentType; ISO2022State toU2022State, fromU2022State; - UConverterSharedData *myConverterArray[UCNV_2022_MAX_CONVERTERS]; uint32_t key; uint32_t version; - char locale[3]; +#ifdef U_ENABLE_GENERIC_ISO_2022 + UBool isFirstBuffer; +#endif char name[30]; + char locale[3]; }UConverterDataISO2022; /* Protos */ @@ -370,7 +378,23 @@ static const UConverterSharedData _ISO2022CNData; /*************** Converter implementations ******************/ -static void +/* The purpose of this function is to get around gcc compiler warnings. */ +static U_INLINE void +fromUWriteUInt8(UConverter *cnv, + const char *bytes, int32_t length, + uint8_t **target, const char *targetLimit, + int32_t **offsets, + int32_t sourceIndex, + UErrorCode *pErrorCode) +{ + char *targetChars = (char *)*target; + ucnv_fromUWriteBytes(cnv, bytes, length, &targetChars, targetLimit, + offsets, sourceIndex, pErrorCode); + *target = (uint8_t*)targetChars; + +} + +static U_INLINE void setInitialStateToUnicodeKR(UConverter* converter, UConverterDataISO2022 *myConverterData){ if(myConverterData->version == 1) { UConverter *cnv = myConverterData->currentConverter; @@ -381,7 +405,7 @@ setInitialStateToUnicodeKR(UConverter* converter, UConverterDataISO2022 *myConve } } -static void +static U_INLINE void setInitialStateFromUnicodeKR(UConverter* converter,UConverterDataISO2022 *myConverterData){ /* in ISO-2022-KR the designator sequence appears only once * in a file so we append it only once @@ -413,21 +437,17 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti uint32_t version; uprv_memset(myConverterData, 0, sizeof(UConverterDataISO2022)); - myConverterData->currentConverter = NULL; myConverterData->currentType = ASCII1; - myConverterData->key =0; -#ifdef U_ENABLE_GENERIC_ISO_2022 - myConverterData->isFirstBuffer = TRUE; -#endif cnv->fromUnicodeStatus =FALSE; if(locale){ uprv_strncpy(myLocale, locale, sizeof(myLocale)); } - myConverterData->version= 0; version = options & UCNV_OPTIONS_VERSION_MASK; + myConverterData->version = version; if(myLocale[0]=='j' && (myLocale[1]=='a'|| myLocale[1]=='p') && - (myLocale[2]=='_' || myLocale[2]=='\0')){ - int len=0; + (myLocale[2]=='_' || myLocale[2]=='\0')) + { + size_t len=0; /* open the required converters and cache them */ if(jpCharsetMasks[version]&CSM(ISO8859_7)) { myConverterData->myConverterArray[ISO8859_7]= ucnv_loadSharedData("ISO8859_7", NULL, errorCode); @@ -448,50 +468,49 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti cnv->sharedData=(UConverterSharedData*)(&_ISO2022JPData); uprv_strcpy(myConverterData->locale,"ja"); - myConverterData->version = version; uprv_strcpy(myConverterData->name,"ISO_2022,locale=ja,version="); len = uprv_strlen(myConverterData->name); myConverterData->name[len]=(char)(myConverterData->version+(int)'0'); myConverterData->name[len+1]='\0'; } else if(myLocale[0]=='k' && (myLocale[1]=='o'|| myLocale[1]=='r') && - (myLocale[2]=='_' || myLocale[2]=='\0')){ - - if ((options & UCNV_OPTIONS_VERSION_MASK)==1){ - myConverterData->version = 1; - myConverterData->currentConverter= - ucnv_open("icu-internal-25546",errorCode); + (myLocale[2]=='_' || myLocale[2]=='\0')) + { + if (version==1){ + myConverterData->currentConverter= + ucnv_open("icu-internal-25546",errorCode); - if (U_FAILURE(*errorCode)) { - _ISO2022Close(cnv); - return; - } + if (U_FAILURE(*errorCode)) { + _ISO2022Close(cnv); + return; + } - uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=1"); - uprv_memcpy(cnv->subChar, myConverterData->currentConverter->subChar, 4); - cnv->subCharLen = myConverterData->currentConverter->subCharLen; + uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=1"); + uprv_memcpy(cnv->subChars, myConverterData->currentConverter->subChars, 4); + cnv->subCharLen = myConverterData->currentConverter->subCharLen; }else{ - myConverterData->currentConverter=ucnv_open("ibm-949",errorCode); + myConverterData->currentConverter=ucnv_open("ibm-949",errorCode); - if (U_FAILURE(*errorCode)) { - _ISO2022Close(cnv); - return; - } + if (U_FAILURE(*errorCode)) { + _ISO2022Close(cnv); + return; + } - myConverterData->version = 0; - uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=0"); + myConverterData->version = 0; + uprv_strcpy(myConverterData->name,"ISO_2022,locale=ko,version=0"); } /* initialize the state variables */ setInitialStateToUnicodeKR(cnv, myConverterData); - setInitialStateFromUnicodeKR(cnv,myConverterData); + setInitialStateFromUnicodeKR(cnv, myConverterData); /* set the function pointers to appropriate funtions */ cnv->sharedData=(UConverterSharedData*)&_ISO2022KRData; uprv_strcpy(myConverterData->locale,"ko"); } else if(((myLocale[0]=='z' && myLocale[1]=='h') || (myLocale[0]=='c'&& myLocale[1]=='n'))&& - (myLocale[2]=='_' || myLocale[2]=='\0')){ + (myLocale[2]=='_' || myLocale[2]=='\0')) + { /* open the required converters and cache them */ myConverterData->myConverterArray[GB2312_1] = ucnv_loadSharedData("ibm-5478", NULL, errorCode); @@ -505,16 +524,17 @@ _ISO2022Open(UConverter *cnv, const char *name, const char *locale,uint32_t opti cnv->sharedData=(UConverterSharedData*)&_ISO2022CNData; uprv_strcpy(myConverterData->locale,"cn"); - if ((options & UCNV_OPTIONS_VERSION_MASK)==1){ - myConverterData->version = 1; + if (version==1){ uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=1"); }else{ - uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=0"); myConverterData->version = 0; + uprv_strcpy(myConverterData->name,"ISO_2022,locale=zh,version=0"); } } else{ #ifdef U_ENABLE_GENERIC_ISO_2022 + myConverterData->isFirstBuffer = TRUE; + /* append the UTF-8 escape sequence */ cnv->charErrorBufferLength = 3; cnv->charErrorBuffer[0] = 0x1b; @@ -712,7 +732,7 @@ changeState_2022(UConverter* _this, UCNV_TableStates_2022 value; UConverterDataISO2022* myData2022 = ((UConverterDataISO2022*)_this->extraInfo); uint32_t key = myData2022->key; - int32_t offset; + int32_t offset = 0; char c; value = VALID_NON_TERMINAL_2022; @@ -861,7 +881,9 @@ DONE: *err = U_UNSUPPORTED_ESCAPE_SEQUENCE; break; } + /*fall through*/ case GB2312_1: + /*fall through*/ case CNS_11643_1: myData2022->toU2022State.cs[1]=(int8_t)tempState; break; @@ -1242,6 +1264,10 @@ static const StateEnum jpCharsetPref[]={ HWKANA_7BIT }; +/* + * The escape sequences must be in order of the enum constants like JISX201 = 3, + * not in order of jpCharsetPref[]! + */ static const char escSeqChars[][6] ={ "\x1B\x28\x42", /* (B ASCII */ "\x1B\x2E\x41", /* .A ISO-8859-1 */ @@ -1297,7 +1323,7 @@ UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args int32_t len, outLen; int8_t choices[10]; int32_t choiceCount; - uint32_t targetValue; + uint32_t targetValue = 0; UBool useFallback; int32_t i; @@ -1320,7 +1346,7 @@ UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args sourceChar = *(source++); /*check if the char is a First surrogate*/ - if(UTF_IS_SURROGATE(sourceChar)) { + if(UTF_IS_SURROGATE(sourceChar)) { if(UTF_IS_SURROGATE_FIRST(sourceChar)) { getTrail: /*look ahead to find the trail surrogate*/ @@ -1354,6 +1380,14 @@ getTrail: } } + /* do not convert SO/SI/ESC */ + if(IS_2022_CONTROL(sourceChar)) { + /* callback(illegal) */ + *err=U_ILLEGAL_CHAR_FOUND; + args->converter->fromUChar32=sourceChar; + break; + } + /* do the conversion */ if(choiceCount == 0) { @@ -1535,7 +1569,7 @@ getTrail: if(outLen == 1) { *target++ = buffer[0]; if(offsets) { - *offsets++ = source - args->source - 1; /* -1: known to be ASCII */ + *offsets++ = (int32_t)(source - args->source - 1); /* -1: known to be ASCII */ } } else if(outLen == 2 && (target + 2) <= targetLimit) { *target++ = buffer[0]; @@ -1546,10 +1580,10 @@ getTrail: *offsets++ = sourceIndex; } } else { - ucnv_fromUWriteBytes( + fromUWriteUInt8( args->converter, buffer, outLen, - (char **)&target, (const char *)targetLimit, + &target, (const char *)targetLimit, &offsets, (int32_t)(source - args->source - U16_LENGTH(sourceChar)), err); if(U_FAILURE(*err)) { @@ -1614,10 +1648,10 @@ getTrail: sourceIndex=-1; } - ucnv_fromUWriteBytes( + fromUWriteUInt8( args->converter, buffer, outLen, - (char **)&target, (const char *)targetLimit, + &target, (const char *)targetLimit, &offsets, sourceIndex, err); } @@ -1781,7 +1815,7 @@ getTrailByte: } if(targetUniChar < (missingCharMarker-1/*0xfffe*/)){ if(args->offsets){ - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } *(myTarget++)=(UChar)targetUniChar; } @@ -1790,13 +1824,13 @@ getTrailByte: targetUniChar-=0x0010000; *myTarget = (UChar)(0xd800+(UChar)(targetUniChar>>10)); if(args->offsets){ - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } ++myTarget; if(myTarget< args->targetLimit){ *myTarget = (UChar)(0xdc00+(UChar)(targetUniChar&0x3ff)); if(args->offsets){ - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } ++myTarget; }else{ @@ -1897,6 +1931,15 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args if(target < (unsigned char*) args->targetLimit){ sourceChar = *source++; + + /* do not convert SO/SI/ESC */ + if(IS_2022_CONTROL(sourceChar)) { + /* callback(illegal) */ + *err=U_ILLEGAL_CHAR_FOUND; + args->converter->fromUChar32=sourceChar; + break; + } + /* length= ucnv_MBCSFromUChar32(converterData->currentConverter->sharedData, sourceChar,&targetByteUnit,args->converter->useFallback);*/ MBCS_FROM_UCHAR32_ISO2022(sharedData,sourceChar,&targetByteUnit,useFallback,&length,MBCS_OUTPUT_2); @@ -1917,14 +1960,14 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args else *target++ = UCNV_SI; if(offsets) - *(offsets++)= source - args->source-1; + *(offsets++) = (int32_t)(source - args->source-1); } /* write the targetUniChar to target */ if(targetByteUnit <= 0x00FF){ if( target < targetLimit){ *(target++) = (unsigned char) targetByteUnit; if(offsets){ - *(offsets++) = source - args->source-1; + *(offsets++) = (int32_t)(source - args->source-1); } }else{ @@ -1935,12 +1978,12 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args if(target < targetLimit){ *(target++) =(unsigned char) ((targetByteUnit>>8) -0x80); if(offsets){ - *(offsets++) = source - args->source-1; + *(offsets++) = (int32_t)(source - args->source-1); } if(target < targetLimit){ *(target++) =(unsigned char) (targetByteUnit -0x80); if(offsets){ - *(offsets++) = source - args->source-1; + *(offsets++) = (int32_t)(source - args->source-1); } }else{ args->converter->charErrorBuffer[args->converter->charErrorBufferLength++] = (unsigned char) (targetByteUnit -0x80); @@ -1993,7 +2036,6 @@ getTrail: } args->converter->fromUChar32=sourceChar; - args->converter->fromUnicodeStatus = (int32_t)isTargetByteDBCS; break; } } /* end if(myTargetIndexconverter, SHIFT_IN_STR, 1, - (char **)&target, (const char *)targetLimit, + &target, (const char *)targetLimit, &offsets, sourceIndex, err); } @@ -2242,7 +2284,7 @@ getTrailByte: } if(targetUniChar < 0xfffe){ if(args->offsets) { - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } *(myTarget++)=(UChar)targetUniChar; } @@ -2382,7 +2424,7 @@ UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args int32_t len; int8_t choices[3]; int32_t choiceCount; - uint32_t targetValue; + uint32_t targetValue = 0; UBool useFallback; /* set up the state */ @@ -2438,6 +2480,14 @@ getTrail: /* do the conversion */ if(sourceChar <= 0x007f ){ + /* do not convert SO/SI/ESC */ + if(IS_2022_CONTROL(sourceChar)) { + /* callback(illegal) */ + *err=U_ILLEGAL_CHAR_FOUND; + args->converter->fromUChar32=sourceChar; + break; + } + /* US-ASCII */ if(pFromU2022State->g == 0) { buffer[0] = (char)sourceChar; @@ -2591,7 +2641,7 @@ getTrail: if(len == 1) { *target++ = buffer[0]; if(offsets) { - *offsets++ = source - args->source - 1; /* -1: known to be ASCII */ + *offsets++ = (int32_t)(source - args->source - 1); /* -1: known to be ASCII */ } } else if(len == 2 && (target + 2) <= targetLimit) { *target++ = buffer[0]; @@ -2602,10 +2652,10 @@ getTrail: *offsets++ = sourceIndex; } } else { - ucnv_fromUWriteBytes( + fromUWriteUInt8( args->converter, buffer, len, - (char **)&target, (const char *)targetLimit, + &target, (const char *)targetLimit, &offsets, (int32_t)(source - args->source - U16_LENGTH(sourceChar)), err); if(U_FAILURE(*err)) { @@ -2659,10 +2709,10 @@ getTrail: sourceIndex=-1; } - ucnv_fromUWriteBytes( + fromUWriteUInt8( args->converter, SHIFT_IN_STR, 1, - (char **)&target, (const char *)targetLimit, + &target, (const char *)targetLimit, &offsets, sourceIndex, err); } @@ -2786,7 +2836,7 @@ getTrailByte: } if(targetUniChar < (missingCharMarker-1/*0xfffe*/)){ if(args->offsets){ - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } *(myTarget++)=(UChar)targetUniChar; } @@ -2795,13 +2845,13 @@ getTrailByte: targetUniChar-=0x0010000; *myTarget = (UChar)(0xd800+(UChar)(targetUniChar>>10)); if(args->offsets){ - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } ++myTarget; if(myTarget< args->targetLimit){ *myTarget = (UChar)(0xdc00+(UChar)(targetUniChar&0x3ff)); if(args->offsets){ - args->offsets[myTarget - args->target]= mySource - args->source - (mySourceChar <= 0xff ? 1 : 2); + args->offsets[myTarget - args->target] = (int32_t)(mySource - args->source - (mySourceChar <= 0xff ? 1 : 2)); } ++myTarget; }else{ @@ -2835,7 +2885,7 @@ _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorC char buffer[8]; int32_t length; - subchar=(char *)cnv->subChar; + subchar=(char *)cnv->subChars; length=cnv->subCharLen; /* assume length==1 for most variants */ p = buffer; @@ -2890,14 +2940,24 @@ _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorC } break; } else { - /* let the subconverter write the subchar */ - args->converter = myConverterData->currentConverter; - uprv_memcpy(myConverterData->currentConverter->subChar, subchar, 4); + /* save the subconverter's substitution string */ + uint8_t *currentSubChars = myConverterData->currentConverter->subChars; + int8_t currentSubCharLen = myConverterData->currentConverter->subCharLen; + + /* set our substitution string into the subconverter */ + myConverterData->currentConverter->subChars = (uint8_t *)subchar; myConverterData->currentConverter->subCharLen = (int8_t)length; + /* let the subconverter write the subchar, set/retrieve fromUChar32 state */ + args->converter = myConverterData->currentConverter; myConverterData->currentConverter->fromUChar32 = cnv->fromUChar32; ucnv_cbFromUWriteSub(args, 0, err); cnv->fromUChar32 = myConverterData->currentConverter->fromUChar32; + args->converter = cnv; + + /* restore the subconverter's substitution string */ + myConverterData->currentConverter->subChars = currentSubChars; + myConverterData->currentConverter->subCharLen = currentSubCharLen; if(*err == U_BUFFER_OVERFLOW_ERROR) { if(myConverterData->currentConverter->charErrorBufferLength > 0) { @@ -2909,7 +2969,6 @@ _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorC cnv->charErrorBufferLength = myConverterData->currentConverter->charErrorBufferLength; myConverterData->currentConverter->charErrorBufferLength = 0; } - args->converter = cnv; return; } default: @@ -2921,12 +2980,23 @@ _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorC offsetIndex, err); } -/* structure for SafeClone calculations */ +/* + * Structure for cloning an ISO 2022 converter into a single memory block. + * ucnv_safeClone() of the converter will align the entire cloneStruct, + * and then ucnv_safeClone() of the sub-converter may additionally align + * currentConverter inside the cloneStruct, for which we need the deadSpace + * after currentConverter. + * This is because UAlignedMemory may be larger than the actually + * necessary alignment size for the platform. + * The other cloneStruct fields will not be moved around, + * and are aligned properly with cloneStruct's alignment. + */ struct cloneStruct { UConverter cnv; - UConverterDataISO2022 mydata; UConverter currentConverter; + UAlignedMemory deadSpace; + UConverterDataISO2022 mydata; }; @@ -2952,11 +3022,13 @@ _ISO_2022_SafeClone( /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ uprv_memcpy(&localClone->mydata, cnvData, sizeof(UConverterDataISO2022)); + localClone->cnv.extraInfo = &localClone->mydata; /* set pointer to extra data */ + localClone->cnv.isExtraLocal = TRUE; /* share the subconverters */ if(cnvData->currentConverter != NULL) { - size = (int32_t)sizeof(UConverter); + size = (int32_t)(sizeof(UConverter) + sizeof(UAlignedMemory)); /* include size of padding */ localClone->mydata.currentConverter = ucnv_safeClone(cnvData->currentConverter, &localClone->currentConverter, @@ -2972,14 +3044,12 @@ _ISO_2022_SafeClone( } } - localClone->cnv.extraInfo = &localClone->mydata; /* set pointer to extra data */ - localClone->cnv.isExtraLocal = TRUE; return &localClone->cnv; } static void _ISO_2022_GetUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { @@ -3024,17 +3094,18 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv, /* there is only one converter for KR, and it is not in the myConverterArray[] */ cnvData->currentConverter->sharedData->impl->getUnicodeSet( cnvData->currentConverter, sa, which, pErrorCode); - return; + /* the loop over myConverterArray[] will simply not find another converter */ + break; default: break; } /* - * TODO: need to make this version-specific for CN. + * Version-specific for CN: * CN version 0 does not map CNS planes 3..7 although * they are all available in the CNS conversion table; * CN version 1 does map them all. - * The two versions need to create different Unicode sets. + * The two versions create different Unicode sets. */ for (i=0; imyConverterArray[i]!=NULL) { @@ -3052,6 +3123,15 @@ _ISO_2022_GetUnicodeSet(const UConverter *cnv, } } } + + /* + * ISO 2022 converters must not convert SO/SI/ESC despite what + * sub-converters do by themselves. + * Remove these characters from the set. + */ + sa->remove(sa->set, 0x0e); + sa->remove(sa->set, 0x0f); + sa->remove(sa->set, 0x1b); } static const UConverterImpl _ISO2022Impl={ @@ -3240,7 +3320,7 @@ static const UConverterStaticData _ISO2022CNStaticData={ 0, UCNV_IBM, UCNV_ISO_2022, - 2, + 1, 8, /* max 8 bytes per UChar: 4-byte CNS designator + 2 bytes for SS2/SS3 + DBCS */ { 0x1a, 0, 0, 0 }, 1, diff --git a/icuSources/common/ucnv_bld.c b/icuSources/common/ucnv_bld.c index f9f99c9b..62e1609f 100644 --- a/icuSources/common/ucnv_bld.c +++ b/icuSources/common/ucnv_bld.c @@ -1,7 +1,7 @@ /* ******************************************************************** * COPYRIGHT: - * Copyright (c) 1996-2004, International Business Machines Corporation and + * Copyright (c) 1996-2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************** * @@ -23,6 +23,7 @@ #if !UCONFIG_NO_CONVERSION +#include "unicode/putil.h" #include "unicode/udata.h" #include "unicode/ucnv.h" #include "unicode/uloc.h" @@ -154,6 +155,14 @@ static UMTX cnvCacheMutex = NULL; /* Mutex for synchronizing cnv cache a /* Note: the global mutex is used for */ /* reference count updates. */ +static const char **gAvailableConverters = NULL; +static uint16_t gAvailableConverterCount = 0; + +static char gDefaultConverterNameBuffer[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; /* +1 for NULL */ +static const char *gDefaultConverterName = NULL; +static const UConverterSharedData *gDefaultAlgorithmicSharedData = NULL; +static UBool gDefaultConverterContainsOption; + static const char DATA_TYPE[] = "cnv"; @@ -170,6 +179,14 @@ static UBool U_CALLCONV ucnv_cleanup(void) { } } + /* Called from ucnv_flushCache because it allocates the hashtable */ + /*ucnv_flushAvailableConverterCache();*/ + + gDefaultConverterName = NULL; + gDefaultConverterNameBuffer[0] = 0; + gDefaultConverterContainsOption = FALSE; + gDefaultAlgorithmicSharedData = NULL; + umtx_destroy(&cnvCacheMutex); /* Don't worry about destroying the mutex even */ /* if the hash table still exists. The mutex */ /* will lazily re-init itself if needed. */ @@ -274,7 +291,7 @@ static UConverterSharedData *createConverterFromFile(UConverterLoadArgs *pArgs, UTRACE_ENTRY_OC(UTRACE_UCNV_LOAD); - if (err == NULL || U_FAILURE (*err)) { + if (U_FAILURE (*err)) { UTRACE_EXIT_STATUS(*err); return NULL; } @@ -307,23 +324,6 @@ static UConverterSharedData *createConverterFromFile(UConverterLoadArgs *pArgs, return sharedData; } -int32_t -ucnv_copyPlatformString(char *platformString, UConverterPlatform pltfrm) -{ - switch (pltfrm) - { - case UCNV_IBM: - uprv_strcpy(platformString, "ibm-"); - return 4; - case UCNV_UNKNOWN: - break; - } - - /* default to empty string */ - *platformString = 0; - return 0; -} - /*returns a converter type from a string */ static const UConverterSharedData * @@ -378,8 +378,8 @@ ucnv_shareConverterData(UConverterSharedData * data) if (SHARED_DATA_HASHTABLE == NULL) { - SHARED_DATA_HASHTABLE = uhash_openSize(uhash_hashChars, uhash_compareChars, - ucnv_io_countAvailableAliases(&err), + SHARED_DATA_HASHTABLE = uhash_openSize(uhash_hashChars, uhash_compareChars, NULL, + ucnv_io_countTotalAliases(&err), &err); ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); @@ -662,6 +662,8 @@ ucnv_loadSharedData(const char *converterName, UConverterLookupData *lookup, UEr UConverterLookupData stackLookup; UConverterSharedData *mySharedConverterData = NULL; UErrorCode internalErrorCode = U_ZERO_ERROR; + UBool mayContainOption = TRUE; + UBool checkForAlgorithmic = TRUE; if (U_FAILURE (*err)) { return NULL; @@ -676,13 +678,29 @@ ucnv_loadSharedData(const char *converterName, UConverterLookupData *lookup, UEr /* In case "name" is NULL we want to open the default converter. */ if (converterName == NULL) { - lookup->realName = ucnv_io_getDefaultConverterName(); + /* Call ucnv_getDefaultName first to query the name from the OS. */ + lookup->realName = ucnv_getDefaultName(); if (lookup->realName == NULL) { *err = U_MISSING_RESOURCE_ERROR; return NULL; } + mySharedConverterData = (UConverterSharedData *)gDefaultAlgorithmicSharedData; + checkForAlgorithmic = FALSE; + mayContainOption = gDefaultConverterContainsOption; /* the default converter name is already canonical */ - } else { + } + else if((converterName[0] == 'U' ? + ( converterName[1] == 'T' && converterName[2] == 'F') : + (converterName[0] == 'u' && converterName[1] == 't' && converterName[2] == 'f')) + && + (converterName[3] == '-' ? + (converterName[4] == '8' && converterName[5] == 0) : + (converterName[3] == '8' && converterName[4] == 0))) + { + /* fastpath for UTF-8 */ + return (UConverterSharedData *)converterData[UCNV_UTF8]; + } + else { /* separate the converter name from the options */ parseConverterOptions(converterName, lookup->cnvName, lookup->locale, &lookup->options, err); if (U_FAILURE(*err)) { @@ -691,7 +709,7 @@ ucnv_loadSharedData(const char *converterName, UConverterLookupData *lookup, UEr } /* get the canonical converter name */ - lookup->realName = ucnv_io_getConverterName(lookup->cnvName, &internalErrorCode); + lookup->realName = ucnv_io_getConverterName(lookup->cnvName, &mayContainOption, &internalErrorCode); if (U_FAILURE(internalErrorCode) || lookup->realName == NULL) { /* * set the input name in case the converter was added @@ -702,13 +720,15 @@ ucnv_loadSharedData(const char *converterName, UConverterLookupData *lookup, UEr } /* separate the converter name from the options */ - if(lookup->realName != lookup->cnvName) { + if(mayContainOption && lookup->realName != lookup->cnvName) { parseConverterOptions(lookup->realName, lookup->cnvName, lookup->locale, &lookup->options, err); lookup->realName = lookup->cnvName; } /* get the shared data for an algorithmic converter, if it is one */ - mySharedConverterData = (UConverterSharedData *)getAlgorithmicTypeFromName(lookup->realName); + if (checkForAlgorithmic) { + mySharedConverterData = (UConverterSharedData *)getAlgorithmicTypeFromName(lookup->realName); + } if (mySharedConverterData == NULL) { /* it is a data-based converter, get its shared data. */ @@ -882,20 +902,21 @@ ucnv_createConverterFromSharedData(UConverter *myUConverter, /* initialize the converter */ uprv_memset(myUConverter, 0, sizeof(UConverter)); myUConverter->isCopyLocal = isCopyLocal; - myUConverter->isExtraLocal = FALSE; + /*myUConverter->isExtraLocal = FALSE;*/ /* Set by the memset call */ myUConverter->sharedData = mySharedConverterData; myUConverter->options = options; - myUConverter->fromCharErrorBehaviour = (UConverterToUCallback) UCNV_TO_U_CALLBACK_SUBSTITUTE; - myUConverter->fromUCharErrorBehaviour = (UConverterFromUCallback) UCNV_FROM_U_CALLBACK_SUBSTITUTE; - myUConverter->toUnicodeStatus = myUConverter->sharedData->toUnicodeStatus; - myUConverter->maxBytesPerUChar = myUConverter->sharedData->staticData->maxBytesPerChar; - myUConverter->subChar1 = myUConverter->sharedData->staticData->subChar1; - myUConverter->subCharLen = myUConverter->sharedData->staticData->subCharLen; - uprv_memcpy (myUConverter->subChar, myUConverter->sharedData->staticData->subChar, myUConverter->subCharLen); myUConverter->preFromUFirstCP = U_SENTINEL; - - if(myUConverter != NULL && myUConverter->sharedData->impl->open != NULL) { - myUConverter->sharedData->impl->open(myUConverter, realName, locale,options, err); + myUConverter->fromCharErrorBehaviour = UCNV_TO_U_DEFAULT_CALLBACK; + myUConverter->fromUCharErrorBehaviour = UCNV_FROM_U_DEFAULT_CALLBACK; + myUConverter->toUnicodeStatus = mySharedConverterData->toUnicodeStatus; + myUConverter->maxBytesPerUChar = mySharedConverterData->staticData->maxBytesPerChar; + myUConverter->subChar1 = mySharedConverterData->staticData->subChar1; + myUConverter->subCharLen = mySharedConverterData->staticData->subCharLen; + myUConverter->subChars = (uint8_t *)myUConverter->subUChars; + uprv_memcpy(myUConverter->subChars, mySharedConverterData->staticData->subChar, myUConverter->subCharLen); + + if(mySharedConverterData->impl->open != NULL) { + mySharedConverterData->impl->open(myUConverter, realName, locale, options, err); if(U_FAILURE(*err)) { ucnv_close(myUConverter); return NULL; @@ -905,6 +926,17 @@ ucnv_createConverterFromSharedData(UConverter *myUConverter, return myUConverter; } +static void +ucnv_flushAvailableConverterCache() { + if (gAvailableConverters) { + umtx_lock(&cnvCacheMutex); + gAvailableConverterCount = 0; + uprv_free((char **)gAvailableConverters); + gAvailableConverters = NULL; + umtx_unlock(&cnvCacheMutex); + } +} + /*Frees all shared immutable objects that aren't referred to (reference count = 0) */ U_CAPI int32_t U_EXPORT2 @@ -974,12 +1006,197 @@ ucnv_flushCache () UTRACE_DATA1(UTRACE_INFO, "ucnv_flushCache() exits with %d converters remaining", remaining); - ucnv_io_flushAvailableConverterCache(); + ucnv_flushAvailableConverterCache(); UTRACE_EXIT_VALUE(tableDeletedNum); return tableDeletedNum; } +/* available converters list --------------------------------------------------- */ + +static UBool haveAvailableConverterList(UErrorCode *pErrorCode) { + int needInit; + UMTX_CHECK(&cnvCacheMutex, (gAvailableConverters == NULL), needInit); + if (needInit) { + UConverter tempConverter; + UEnumeration *allConvEnum = NULL; + uint16_t idx; + uint16_t localConverterCount; + uint16_t allConverterCount; + UErrorCode localStatus; + const char *converterName; + const char **localConverterList; + + allConvEnum = ucnv_openAllNames(pErrorCode); + allConverterCount = uenum_count(allConvEnum, pErrorCode); + if (U_FAILURE(*pErrorCode)) { + return FALSE; + } + + /* We can't have more than "*converterTable" converters to open */ + localConverterList = (const char **) uprv_malloc(allConverterCount * sizeof(char*)); + if (!localConverterList) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + return FALSE; + } + + localConverterCount = 0; + + for (idx = 0; idx < allConverterCount; idx++) { + localStatus = U_ZERO_ERROR; + converterName = uenum_next(allConvEnum, NULL, &localStatus); + ucnv_close(ucnv_createConverter(&tempConverter, converterName, &localStatus)); + if (U_SUCCESS(localStatus)) { + localConverterList[localConverterCount++] = converterName; + } + } + uenum_close(allConvEnum); + + umtx_lock(&cnvCacheMutex); + if (gAvailableConverters == NULL) { + gAvailableConverters = localConverterList; + gAvailableConverterCount = localConverterCount; + ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); + } + else { + uprv_free((char **)localConverterList); + } + umtx_unlock(&cnvCacheMutex); + } + return TRUE; +} + +U_CFUNC uint16_t +ucnv_bld_countAvailableConverters(UErrorCode *pErrorCode) { + if (haveAvailableConverterList(pErrorCode)) { + return gAvailableConverterCount; + } + return 0; +} + +U_CFUNC const char * +ucnv_bld_getAvailableConverter(uint16_t n, UErrorCode *pErrorCode) { + if (haveAvailableConverterList(pErrorCode)) { + if (n < gAvailableConverterCount) { + return gAvailableConverters[n]; + } + *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR; + } + return NULL; +} + +/* default converter name --------------------------------------------------- */ + +/* Copy the canonical converter name. */ +static U_INLINE void +internalSetName(const char *name, UErrorCode *status) { + UConverterLookupData lookup; + int32_t length=(int32_t)(uprv_strlen(name)); + UBool containsOption = (UBool)(uprv_strchr(name, UCNV_OPTION_SEP_CHAR) != NULL); + const UConverterSharedData *algorithmicSharedData; + + lookup.locale[0] = 0; + lookup.options = 0; + lookup.realName = name; + if(containsOption) { + parseConverterOptions(lookup.realName, lookup.cnvName, lookup.locale, &lookup.options, status); + lookup.realName = lookup.cnvName; + } + algorithmicSharedData = getAlgorithmicTypeFromName(lookup.realName); + + umtx_lock(&cnvCacheMutex); + + uprv_memcpy(gDefaultConverterNameBuffer, name, length); + gDefaultConverterNameBuffer[length]=0; + gDefaultConverterName = gDefaultConverterNameBuffer; + gDefaultConverterContainsOption = containsOption; + gDefaultAlgorithmicSharedData = algorithmicSharedData; + + ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); + + umtx_unlock(&cnvCacheMutex); +} + +/* + * In order to be really thread-safe, the get function would have to take + * a buffer parameter and copy the current string inside a mutex block. + * This implementation only tries to be really thread-safe while + * setting the name. + * It assumes that setting a pointer is atomic. + */ + +U_CAPI const char* U_EXPORT2 +ucnv_getDefaultName() { + /* local variable to be thread-safe */ + const char *name; + + UMTX_CHECK(&cnvCacheMutex, gDefaultConverterName, name); + if(name==NULL) { + UErrorCode errorCode = U_ZERO_ERROR; + UConverter *cnv = NULL; + + name = uprv_getDefaultCodepage(); + + /* if the name is there, test it out and get the canonical name with options */ + if(name != NULL) { + cnv = ucnv_open(name, &errorCode); + if(U_SUCCESS(errorCode) && cnv != NULL) { + name = ucnv_getName(cnv, &errorCode); + } + } + + if(name == NULL || name[0] == 0 + || U_FAILURE(errorCode) || cnv == NULL + || uprv_strlen(name)>=sizeof(gDefaultConverterNameBuffer)) + { + /* Panic time, let's use a fallback. */ +#if (U_CHARSET_FAMILY == U_ASCII_FAMILY) + name = "US-ASCII"; + /* there is no 'algorithmic' converter for EBCDIC */ +#elif defined(OS390) + name = "ibm-1047_P100-1995" UCNV_SWAP_LFNL_OPTION_STRING; +#else + name = "ibm-37_P100-1995"; +#endif + } + + internalSetName(name, &errorCode); + + /* The close may make the current name go away. */ + ucnv_close(cnv); + } + + return name; +} + +U_CAPI void U_EXPORT2 +ucnv_setDefaultName(const char *converterName) { + if(converterName==NULL) { + /* reset to the default codepage */ + umtx_lock(&cnvCacheMutex); + gDefaultConverterName=NULL; + umtx_unlock(&cnvCacheMutex); + } else { + UErrorCode errorCode = U_ZERO_ERROR; + UConverter *cnv = NULL; + const char *name = NULL; + + /* if the name is there, test it out and get the canonical name with options */ + cnv = ucnv_open(converterName, &errorCode); + if(U_SUCCESS(errorCode) && cnv != NULL) { + name = ucnv_getName(cnv, &errorCode); + } + + if(U_SUCCESS(errorCode) && name!=NULL) { + internalSetName(name, &errorCode); + } + /* else this converter is bad to use. Don't change it to a bad value. */ + + /* The close may make the current name go away. */ + ucnv_close(cnv); + } +} + /* data swapping ------------------------------------------------------------ */ /* most of this might belong more properly into ucnvmbcs.c, but that is so large */ @@ -1066,11 +1283,10 @@ ucnv_swap(const UDataSwapper *ds, ds->swapArray32(ds, &inStaticData->codepage, 4, &outStaticData->codepage, pErrorCode); - ds->swapInvChars(ds, inStaticData->name, uprv_strlen(inStaticData->name), + ds->swapInvChars(ds, inStaticData->name, (int32_t)uprv_strlen(inStaticData->name), outStaticData->name, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ucnv_swap(): error swapping converter name - %s\n", - u_errorName(*pErrorCode)); + udata_printError(ds, "ucnv_swap(): error swapping converter name\n"); return 0; } } @@ -1087,7 +1303,13 @@ ucnv_swap(const UDataSwapper *ds, inMBCSHeader=(const _MBCSHeader *)inBytes; outMBCSHeader=(_MBCSHeader *)outBytes; - if(!(inMBCSHeader->version[0]==4 || inMBCSHeader->version[1]>=1)) { + if(0<=length && lengthversion[0]==4 && inMBCSHeader->version[1]>=1)) { udata_printError(ds, "ucnv_swap(): unsupported _MBCSHeader.version %d.%d\n", inMBCSHeader->version[0], inMBCSHeader->version[1]); *pErrorCode=U_UNSUPPORTED_ERROR; @@ -1103,7 +1325,7 @@ ucnv_swap(const UDataSwapper *ds, mbcsHeader.flags= ds->readUInt32(inMBCSHeader->flags); mbcsHeader.fromUBytesLength= ds->readUInt32(inMBCSHeader->fromUBytesLength); - extOffset=(int32_t)mbcsHeader.flags>>8; + extOffset=(int32_t)(mbcsHeader.flags>>8); outputType=(uint8_t)mbcsHeader.flags; /* make sure that the output type is known */ @@ -1168,7 +1390,7 @@ ucnv_swap(const UDataSwapper *ds, */ /* swap the base name, between the header and the extension data */ - ds->swapInvChars(ds, inMBCSHeader+1, uprv_strlen((const char *)(inMBCSHeader+1)), + ds->swapInvChars(ds, inMBCSHeader+1, (int32_t)uprv_strlen((const char *)(inMBCSHeader+1)), outMBCSHeader+1, pErrorCode); } else { /* normal file with base table data */ diff --git a/icuSources/common/ucnv_bld.h b/icuSources/common/ucnv_bld.h index e3983ec4..75aa4d18 100644 --- a/icuSources/common/ucnv_bld.h +++ b/icuSources/common/ucnv_bld.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -157,6 +157,17 @@ struct UConverter { const void *fromUContext; const void *toUContext; + /* + * Pointer to charset bytes for substitution string if subCharLen>0, + * or pointer to Unicode string (UChar *) if subCharLen<0. + * subCharLen==0 is equivalent to using a skip callback. + * If the pointer is !=subUChars then it is allocated with + * UCNV_ERROR_BUFFER_LENGTH * U_SIZEOF_UCHAR bytes. + * The subUChars field is declared as UChar[] not uint8_t[] to + * guarantee alignment for UChars. + */ + uint8_t *subChars; + UConverterSharedData *sharedData; /* Pointer to the shared immutable part of the converter object */ uint32_t options; /* options flags from UConverterOpen, may contain additional bits */ @@ -200,9 +211,9 @@ struct UConverter { uint8_t subChar1; /* single-byte substitution character if different from subChar */ UBool useSubChar1; - uint8_t subChar[UCNV_MAX_SUBCHAR_LEN]; /* codepage specific character sequence */ char invalidCharBuffer[UCNV_MAX_CHAR_LEN]; /* bytes from last error/callback situation */ uint8_t charErrorBuffer[UCNV_ERROR_BUFFER_LENGTH]; /* codepage output from Error functions */ + UChar subUChars[UCNV_MAX_SUBCHAR_LEN/U_SIZEOF_UCHAR]; /* see subChars documentation */ UChar invalidUCharBuffer[U16_MAX_LENGTH]; /* UChars from last error/callback situation */ UChar UCharErrorBuffer[UCNV_ERROR_BUFFER_LENGTH]; /* unicode output from Error functions */ @@ -221,6 +232,26 @@ U_CDECL_END /* end of UConverter */ #define CONVERTER_FILE_EXTENSION ".cnv" + +/** + * Return the number of all converter names. + * @param pErrorCode The error code + * @return the number of all converter names + */ +U_CFUNC uint16_t +ucnv_bld_countAvailableConverters(UErrorCode *pErrorCode); + +/** + * Return the (n)th converter name in mixed case, or NULL + * if there is none (typically, if the data cannot be loaded). + * 0<=indextarget >= args->targetLimit) -- S. Hrcek */ { - /* Overflowed the target. Now, we'll write into the charErrorBuffer. + /* Overflowed the target. Now, we'll write into the charErrorBuffer. It's a fixed size. If we overflow it... Hmm */ char *newTarget; const char *newTargetLimit; @@ -126,49 +126,48 @@ ucnv_cbFromUWriteUChars(UConverterFromUnicodeArgs *args, return; } - /* We're going to tell the converter that the errbuff len is empty. - This prevents the existing errbuff from being 'flushed' out onto - itself. If the errbuff is needed by the converter this time, - we're hosed - we're out of space! */ - - args->converter->charErrorBufferLength = 0; - - ucnv_fromUnicode(args->converter, - &newTarget, - newTargetLimit, - source, - sourceLimit, - NULL, - FALSE, - &err2); - - /* We can go ahead and overwrite the length here. We know just how - to recalculate it. */ - - args->converter->charErrorBufferLength = (int8_t)( - newTarget - (char*)args->converter->charErrorBuffer); - - if((newTarget >= newTargetLimit) || (err2 == U_BUFFER_OVERFLOW_ERROR)) - { - /* now we're REALLY in trouble. - Internal program error - callback shouldn't have written this much - data! - */ - *err = U_INTERNAL_PROGRAM_ERROR; - return; - } - else - { - /* sub errs could be invalid/truncated/illegal chars or w/e. - These might want to be passed on up.. But the problem is, we already - need to pass U_BUFFER_OVERFLOW_ERROR. That has to override these - other errs.. */ - - /* - if(U_FAILURE(err2)) - ?? - */ - } + /* We're going to tell the converter that the errbuff len is empty. + This prevents the existing errbuff from being 'flushed' out onto + itself. If the errbuff is needed by the converter this time, + we're hosed - we're out of space! */ + + args->converter->charErrorBufferLength = 0; + + ucnv_fromUnicode(args->converter, + &newTarget, + newTargetLimit, + source, + sourceLimit, + NULL, + FALSE, + &err2); + + /* We can go ahead and overwrite the length here. We know just how + to recalculate it. */ + + args->converter->charErrorBufferLength = (int8_t)( + newTarget - (char*)args->converter->charErrorBuffer); + + if((newTarget >= newTargetLimit) || (err2 == U_BUFFER_OVERFLOW_ERROR)) + { + /* now we're REALLY in trouble. + Internal program error - callback shouldn't have written this much + data! + */ + *err = U_INTERNAL_PROGRAM_ERROR; + return; + } + /*else {*/ + /* sub errs could be invalid/truncated/illegal chars or w/e. + These might want to be passed on up.. But the problem is, we already + need to pass U_BUFFER_OVERFLOW_ERROR. That has to override these + other errs.. */ + + /* + if(U_FAILURE(err2)) + ?? + */ + /*}*/ } } @@ -177,19 +176,48 @@ ucnv_cbFromUWriteSub (UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode * err) { + UConverter *converter; + int32_t length; + if(U_FAILURE(*err)) { return; } + converter = args->converter; + length = converter->subCharLen; - if(args->converter->sharedData->impl->writeSub!=NULL) { - args->converter->sharedData->impl->writeSub(args, offsetIndex, err); - } else if(args->converter->subChar1!=0 && args->converter->invalidUCharBuffer[0]<=0xff) { + if(length == 0) { + return; + } + + if(length < 0) { + /* + * Write/convert the substitution string. Its real length is -length. + * Unlike the escape callback, we need not change the converter's + * callback function because ucnv_setSubstString() verified that + * the string can be converted, so we will not get a conversion error + * and will not recurse. + * At worst we should get a U_BUFFER_OVERFLOW_ERROR. + */ + const UChar *source = (const UChar *)converter->subChars; + ucnv_cbFromUWriteUChars(args, &source, source - length, offsetIndex, err); + return; + } + + if(converter->sharedData->impl->writeSub!=NULL) { + converter->sharedData->impl->writeSub(args, offsetIndex, err); + } + else if(converter->subChar1!=0 && (uint16_t)converter->invalidUCharBuffer[0]<=(uint16_t)0xffu) { + /* + TODO: Is this untestable because the MBCS converter has a writeSub function to call + and the other converters don't use subChar1? + */ ucnv_cbFromUWriteBytes(args, - (const char *)&args->converter->subChar1, 1, + (const char *)&converter->subChar1, 1, offsetIndex, err); - } else { + } + else { ucnv_cbFromUWriteBytes(args, - (const char *)args->converter->subChar, args->converter->subCharLen, + (const char *)converter->subChars, length, offsetIndex, err); } } diff --git a/icuSources/common/ucnv_cnv.c b/icuSources/common/ucnv_cnv.c index 48c22010..f8e2f830 100644 --- a/icuSources/common/ucnv_cnv.c +++ b/icuSources/common/ucnv_cnv.c @@ -28,7 +28,7 @@ U_CFUNC void ucnv_getCompleteUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { sa->addRange(sa->set, 0, 0x10ffff); @@ -36,7 +36,7 @@ ucnv_getCompleteUnicodeSet(const UConverter *cnv, U_CFUNC void ucnv_getNonSurrogateUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { sa->addRange(sa->set, 0, 0xd7ff); diff --git a/icuSources/common/ucnv_cnv.h b/icuSources/common/ucnv_cnv.h index e0692a50..e3de1014 100644 --- a/icuSources/common/ucnv_cnv.h +++ b/icuSources/common/ucnv_cnv.h @@ -171,7 +171,7 @@ typedef UConverter * (*UConverterSafeClone) (const UConverter *cnv, * For more documentation, see ucnv_getUnicodeSet() in ucnv.h. */ typedef void (*UConverterGetUnicodeSet) (const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); @@ -246,13 +246,13 @@ U_CDECL_END U_CFUNC void ucnv_getCompleteUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); U_CFUNC void ucnv_getNonSurrogateUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); diff --git a/icuSources/common/ucnv_ext.c b/icuSources/common/ucnv_ext.c index ed1bc65d..18fe3f94 100644 --- a/icuSources/common/ucnv_ext.c +++ b/icuSources/common/ucnv_ext.c @@ -932,7 +932,7 @@ ucnv_extContinueMatchFromU(UConverter *cnv, static void ucnv_extGetUnicodeSetString(const UConverterSharedData *sharedData, const int32_t *cx, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, int32_t minLength, UChar32 c, @@ -989,7 +989,7 @@ ucnv_extGetUnicodeSetString(const UConverterSharedData *sharedData, U_CFUNC void ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { const int32_t *cx; diff --git a/icuSources/common/ucnv_ext.h b/icuSources/common/ucnv_ext.h index 6fb43d96..6ccd7669 100644 --- a/icuSources/common/ucnv_ext.h +++ b/icuSources/common/ucnv_ext.h @@ -384,7 +384,7 @@ ucnv_extContinueMatchFromU(UConverter *cnv, U_CFUNC void ucnv_extGetUnicodeSet(const UConverterSharedData *sharedData, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); diff --git a/icuSources/common/ucnv_imp.h b/icuSources/common/ucnv_imp.h index 0f06c1e2..c1f48c0e 100644 --- a/icuSources/common/ucnv_imp.h +++ b/icuSources/common/ucnv_imp.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -87,12 +87,8 @@ ucnv_unloadSharedDataIfReady(UConverterSharedData *sharedData); void ucnv_incrementRefCount(UConverterSharedData *sharedData); -/* Copy the string that is represented by the UConverterPlatform enum - * @param platformString An output buffer - * @param platform An enum representing a platform - * @return the length of the copied string. - */ -int32_t ucnv_copyPlatformString(char *platformString, UConverterPlatform platform); +#define UCNV_TO_U_DEFAULT_CALLBACK ((UConverterToUCallback) UCNV_TO_U_CALLBACK_SUBSTITUTE) +#define UCNV_FROM_U_DEFAULT_CALLBACK ((UConverterFromUCallback) UCNV_FROM_U_CALLBACK_SUBSTITUTE) #endif diff --git a/icuSources/common/ucnv_io.c b/icuSources/common/ucnv_io.c index a86af8f5..4e570e55 100644 --- a/icuSources/common/ucnv_io.c +++ b/icuSources/common/ucnv_io.c @@ -1,15 +1,15 @@ /* ****************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** * * * ucnv_io.c: -* initializes global variables and defines functions pertaining to file -* access, and name resolution aspect of the library. +* initializes global variables and defines functions pertaining to converter +* name resolution aspect of the conversion code. * * new implementation: * @@ -31,8 +31,7 @@ #if !UCONFIG_NO_CONVERSION -#include "unicode/putil.h" -#include "unicode/ucnv.h" /* This file implements ucnv_xXXX() APIs */ +#include "unicode/ucnv.h" #include "unicode/udata.h" #include "umutex.h" @@ -74,6 +73,8 @@ * index of this list is also used by other sections, like the 4th section. * The index for the 3rd and 4th section is used to get the * alias -> converter name mapping. Section 3 and 4 form a two column table. + * Some of the most significant bits of each index may contain other + * information (see findConverter for details). * * 4) This section contains a list of mapped converter names. Consider this * as a table that maps the 3rd section to the 1st section. This list contains @@ -95,8 +96,10 @@ * the third dimension to the section 5. No other section should be referencing * this section. * - * 7) Reserved at this time (There is no information). This _usually_ has a - * size of 0. Future versions may add more information here. + * 7) Starting in ICU 3.6, this can be a UConverterAliasOptions struct. Its + * presence indicates that a section 9 exists. UConverterAliasOptions specifies + * what type of string normalization is used among other potential things in the + * future. * * 8) This is the string table. All strings are indexed on an even address. * There are two reasons for this. First many chip architectures locate strings @@ -104,6 +107,10 @@ * numbers, this string table can be 128KB in size instead of 64KB when we * only have strings starting on an even address. * + * 9) When present this is a set of prenormalized strings from section 8. This + * table contains normalized strings with the dashes and spaces stripped out, + * and all strings lowercased. In the future, the options in section 7 may state + * other types of normalization. * * Here is the concept of section 5 and 6. It's a 3D cube. Each tag * has a unique alias among all converters. That same alias can @@ -174,35 +181,21 @@ enum { untaggedConvArrayIndex=4, taggedAliasArrayIndex=5, taggedAliasListsIndex=6, - reservedIndex1=7, + tableOptionsIndex=7, stringTableIndex=8, - minTocLength=8, /* min. tocLength in the file, does not count the tocLengthIndex! */ - offsetsCount /* length of the swapper's temporary offsets[] */ + normalizedStringTableIndex=9, + offsetsCount, /* length of the swapper's temporary offsets[] */ + minTocLength=8 /* min. tocLength in the file, does not count the tocLengthIndex! */ }; -static const uint16_t *gConverterList = NULL; -static const uint16_t *gTagList = NULL; -static const uint16_t *gAliasList = NULL; -static const uint16_t *gUntaggedConvArray = NULL; -static const uint16_t *gTaggedAliasArray = NULL; -static const uint16_t *gTaggedAliasLists = NULL; -static const uint16_t *gStringTable = NULL; - -static uint32_t gConverterListSize; -static uint32_t gTagListSize; -static uint32_t gAliasListSize; -static uint32_t gUntaggedConvArraySize; -static uint32_t gTaggedAliasArraySize; -static uint32_t gTaggedAliasListsSize; -static uint32_t gStringTableSize; - -static const char **gAvailableConverters = NULL; -static uint16_t gAvailableConverterCount = 0; - -static char gDefaultConverterNameBuffer[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; /* +1 for NULL */ -static const char *gDefaultConverterName = NULL; +static const UConverterAliasOptions defaultTableOptions = { + UCNV_IO_UNNORMALIZED, + 0 /* containsCnvOptionInfo */ +}; +static UConverterAlias gMainTable; -#define GET_STRING(idx) (const char *)(gStringTable + (idx)) +#define GET_STRING(idx) (const char *)(gMainTable.stringTable + (idx)) +#define GET_NORMALIZED_STRING(idx) (const char *)(gMainTable.normalizedStringTable + (idx)) static UBool U_CALLCONV isAcceptable(void *context, @@ -226,49 +219,27 @@ static UBool U_CALLCONV ucnv_io_cleanup(void) gAliasData = NULL; } - ucnv_io_flushAvailableConverterCache(); - - gConverterListSize = 0; - gTagListSize = 0; - gAliasListSize = 0; - gUntaggedConvArraySize = 0; - gTaggedAliasArraySize = 0; - gTaggedAliasListsSize = 0; - gStringTableSize = 0; - - gConverterList = NULL; - gTagList = NULL; - gAliasList = NULL; - gUntaggedConvArray = NULL; - gTaggedAliasArray = NULL; - gTaggedAliasLists = NULL; - gStringTable = NULL; - - gDefaultConverterName = NULL; - gDefaultConverterNameBuffer[0] = 0; + uprv_memset(&gMainTable, 0, sizeof(gMainTable)); return TRUE; /* Everything was cleaned up */ } static UBool haveAliasData(UErrorCode *pErrorCode) { - int haveData; + int needInit; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return FALSE; } - umtx_lock(NULL); - haveData = (int)(gAliasData==NULL); - umtx_unlock(NULL); + UMTX_CHECK(NULL, (gAliasData==NULL), needInit); /* load converter alias data from file if necessary */ - if (haveData) { + if (needInit) { UDataMemory *data = NULL; const uint16_t *table = NULL; uint32_t tableStart; uint32_t currOffset; - uint32_t reservedSize1; data = udata_openChoice(NULL, DATA_TYPE, DATA_NAME, isAcceptable, NULL, pErrorCode); if(U_FAILURE(*pErrorCode)) { @@ -289,39 +260,57 @@ haveAliasData(UErrorCode *pErrorCode) { gAliasData = data; data=NULL; - gConverterListSize = ((const uint32_t *)(table))[1]; - gTagListSize = ((const uint32_t *)(table))[2]; - gAliasListSize = ((const uint32_t *)(table))[3]; - gUntaggedConvArraySize = ((const uint32_t *)(table))[4]; - gTaggedAliasArraySize = ((const uint32_t *)(table))[5]; - gTaggedAliasListsSize = ((const uint32_t *)(table))[6]; - reservedSize1 = ((const uint32_t *)(table))[7]; /* reserved */ - gStringTableSize = ((const uint32_t *)(table))[8]; + gMainTable.converterListSize = ((const uint32_t *)(table))[1]; + gMainTable.tagListSize = ((const uint32_t *)(table))[2]; + gMainTable.aliasListSize = ((const uint32_t *)(table))[3]; + gMainTable.untaggedConvArraySize = ((const uint32_t *)(table))[4]; + gMainTable.taggedAliasArraySize = ((const uint32_t *)(table))[5]; + gMainTable.taggedAliasListsSize = ((const uint32_t *)(table))[6]; + gMainTable.optionTableSize = ((const uint32_t *)(table))[7]; + gMainTable.stringTableSize = ((const uint32_t *)(table))[8]; + + if (((const uint32_t *)(table))[0] > 8) { + gMainTable.normalizedStringTableSize = ((const uint32_t *)(table))[9]; + } currOffset = tableStart * (sizeof(uint32_t)/sizeof(uint16_t)) + (sizeof(uint32_t)/sizeof(uint16_t)); - gConverterList = table + currOffset; + gMainTable.converterList = table + currOffset; - currOffset += gConverterListSize; - gTagList = table + currOffset; + currOffset += gMainTable.converterListSize; + gMainTable.tagList = table + currOffset; - currOffset += gTagListSize; - gAliasList = table + currOffset; + currOffset += gMainTable.tagListSize; + gMainTable.aliasList = table + currOffset; - currOffset += gAliasListSize; - gUntaggedConvArray = table + currOffset; + currOffset += gMainTable.aliasListSize; + gMainTable.untaggedConvArray = table + currOffset; - currOffset += gUntaggedConvArraySize; - gTaggedAliasArray = table + currOffset; + currOffset += gMainTable.untaggedConvArraySize; + gMainTable.taggedAliasArray = table + currOffset; /* aliasLists is a 1's based array, but it has a padding character */ - currOffset += gTaggedAliasArraySize; - gTaggedAliasLists = table + currOffset; + currOffset += gMainTable.taggedAliasArraySize; + gMainTable.taggedAliasLists = table + currOffset; - currOffset += gTaggedAliasListsSize; - /* reserved */ + currOffset += gMainTable.taggedAliasListsSize; + if (gMainTable.optionTableSize > 0 + && ((const UConverterAliasOptions *)(table + currOffset))->stringNormalizationType < UCNV_IO_NORM_TYPE_COUNT) + { + /* Faster table */ + gMainTable.optionTable = (const UConverterAliasOptions *)(table + currOffset); + } + else { + /* Smaller table, or I can't handle this normalization mode! + Use the original slower table lookup. */ + gMainTable.optionTable = &defaultTableOptions; + } - currOffset += reservedSize1; - gStringTable = table + currOffset; + currOffset += gMainTable.optionTableSize; + gMainTable.stringTable = table + currOffset; + + currOffset += gMainTable.stringTableSize; + gMainTable.normalizedStringTable = ((gMainTable.optionTable->stringNormalizationType == UCNV_IO_UNNORMALIZED) + ? gMainTable.stringTable : (table + currOffset)); ucln_common_registerCleanup(UCLN_COMMON_UCNV_IO, ucnv_io_cleanup); } @@ -341,18 +330,15 @@ isAlias(const char *alias, UErrorCode *pErrorCode) { if(alias==NULL) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return FALSE; - } else if(*alias==0) { - return FALSE; - } else { - return TRUE; } + return (UBool)(*alias!=0); } static uint32_t getTagNumber(const char *tagname) { - if (gTagList) { + if (gMainTable.tagList) { uint32_t tagNum; - for (tagNum = 0; tagNum < gTagListSize; tagNum++) { - if (!uprv_stricmp(GET_STRING(gTagList[tagNum]), tagname)) { + for (tagNum = 0; tagNum < gMainTable.tagListSize; tagNum++) { + if (!uprv_stricmp(GET_STRING(gMainTable.tagList[tagNum]), tagname)) { return tagNum; } } @@ -361,48 +347,128 @@ static uint32_t getTagNumber(const char *tagname) { return UINT32_MAX; } +/* character types relevant for ucnv_compareNames() */ +enum { + IGNORE, + ZERO, + NONZERO, + MINLETTER /* any values from here on are lowercase letter mappings */ +}; + +/* character types for ASCII 00..7F */ +static const uint8_t asciiTypes[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, 0, 0, 0, 0, 0, 0, + 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0, 0, 0, 0, 0, + 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0, 0, 0, 0, 0 +}; + +#define GET_ASCII_TYPE(c) ((int8_t)(c) >= 0 ? asciiTypes[(uint8_t)c] : (uint8_t)IGNORE) + +/* character types for EBCDIC 80..FF */ +static const uint8_t ebcdicTypes[128] = { + 0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0, 0, 0, 0, 0, 0, + 0, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0, 0, 0, 0, 0, 0, + 0, 0, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0, 0, 0, 0, 0, 0, + 0, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0, 0, 0, 0, 0, 0, + 0, 0, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0, 0, 0, 0, 0, 0, + ZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, NONZERO, 0, 0, 0, 0, 0, 0 +}; + +#define GET_EBCDIC_TYPE(c) ((int8_t)(c) < 0 ? ebcdicTypes[(c)&0x7f] : (uint8_t)IGNORE) + +#if U_CHARSET_FAMILY==U_ASCII_FAMILY +# define GET_CHAR_TYPE(c) GET_ASCII_TYPE(c) +#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY +# define GET_CHAR_TYPE(c) GET_EBCDIC_TYPE(c) +#else +# error U_CHARSET_FAMILY is not valid +#endif + /* @see ucnv_compareNames */ U_CFUNC char * U_EXPORT2 ucnv_io_stripASCIIForCompare(char *dst, const char *name) { - char c1 = *name; char *dstItr = dst; - - while (c1) { - /* Ignore delimiters '-', '_', and ' ' */ - while ((c1 = *name) == 0x2d || c1 == 0x5f || c1 == 0x20) { - ++name; + uint8_t type, nextType; + char c1; + UBool afterDigit = FALSE; + + while ((c1 = *name++) != 0) { + type = GET_ASCII_TYPE(c1); + switch (type) { + case IGNORE: + afterDigit = FALSE; + continue; /* ignore all but letters and digits */ + case ZERO: + if (!afterDigit) { + nextType = GET_ASCII_TYPE(*name); + if (nextType == ZERO || nextType == NONZERO) { + continue; /* ignore leading zero before another digit */ + } + } + break; + case NONZERO: + afterDigit = TRUE; + break; + default: + c1 = (char)type; /* lowercased letter */ + afterDigit = FALSE; + break; } - - /* lowercase for case-insensitive comparison */ - *(dstItr++) = uprv_asciitolower(c1); - ++name; + *dstItr++ = c1; } + *dstItr = 0; return dst; } U_CFUNC char * U_EXPORT2 ucnv_io_stripEBCDICForCompare(char *dst, const char *name) { - char c1 = *name; char *dstItr = dst; - - while (c1) { - /* Ignore delimiters '-', '_', and ' ' */ - while ((c1 = *name) == 0x60 || c1 == 0x6d || c1 == 0x40) { - ++name; + uint8_t type, nextType; + char c1; + UBool afterDigit = FALSE; + + while ((c1 = *name++) != 0) { + type = GET_EBCDIC_TYPE(c1); + switch (type) { + case IGNORE: + afterDigit = FALSE; + continue; /* ignore all but letters and digits */ + case ZERO: + if (!afterDigit) { + nextType = GET_EBCDIC_TYPE(*name); + if (nextType == ZERO || nextType == NONZERO) { + continue; /* ignore leading zero before another digit */ + } + } + break; + case NONZERO: + afterDigit = TRUE; + break; + default: + c1 = (char)type; /* lowercased letter */ + afterDigit = FALSE; + break; } - - /* lowercase for case-insensitive comparison */ - *(dstItr++) = uprv_ebcdictolower(c1); - ++name; + *dstItr++ = c1; } + *dstItr = 0; return dst; } /** - * Do a fuzzy compare of a two converter/alias names. The comparison - * is case-insensitive. It also ignores the characters '-', '_', and - * ' ' (dash, underscore, and space). Thus the strings "UTF-8", - * "utf_8", and "Utf 8" are exactly equivalent. + * Do a fuzzy compare of two converter/alias names. + * The comparison is case-insensitive, ignores leading zeroes if they are not + * followed by further digits, and ignores all but letters and digits. + * Thus the strings "UTF-8", "utf_8", "u*T@f08" and "Utf 8" are exactly equivalent. + * See section 1.4, Charset Alias Matching in Unicode Technical Standard #22 + * at http://www.unicode.org/reports/tr22/ * * This is a symmetrical (commutative) operation; order of arguments * is insignificant. This is an important property for sorting the @@ -420,15 +486,58 @@ ucnv_io_stripEBCDICForCompare(char *dst, const char *name) { U_CAPI int U_EXPORT2 ucnv_compareNames(const char *name1, const char *name2) { int rc; + uint8_t type, nextType; char c1, c2; + UBool afterDigit1 = FALSE, afterDigit2 = FALSE; for (;;) { - /* Ignore delimiters '-', '_', and ' ' */ - while ((c1 = *name1) == '-' || c1 == '_' || c1 == ' ') { - ++name1; + while ((c1 = *name1++) != 0) { + type = GET_CHAR_TYPE(c1); + switch (type) { + case IGNORE: + afterDigit1 = FALSE; + continue; /* ignore all but letters and digits */ + case ZERO: + if (!afterDigit1) { + nextType = GET_CHAR_TYPE(*name1); + if (nextType == ZERO || nextType == NONZERO) { + continue; /* ignore leading zero before another digit */ + } + } + break; + case NONZERO: + afterDigit1 = TRUE; + break; + default: + c1 = (char)type; /* lowercased letter */ + afterDigit1 = FALSE; + break; + } + break; /* deliver c1 */ } - while ((c2 = *name2) == '-' || c2 == '_' || c2 == ' ') { - ++name2; + while ((c2 = *name2++) != 0) { + type = GET_CHAR_TYPE(c2); + switch (type) { + case IGNORE: + afterDigit2 = FALSE; + continue; /* ignore all but letters and digits */ + case ZERO: + if (!afterDigit2) { + nextType = GET_CHAR_TYPE(*name2); + if (nextType == ZERO || nextType == NONZERO) { + continue; /* ignore leading zero before another digit */ + } + } + break; + case NONZERO: + afterDigit2 = TRUE; + break; + default: + c2 = (char)type; /* lowercased letter */ + afterDigit2 = FALSE; + break; + } + break; /* deliver c2 */ } /* If we reach the ends of both strings then they match */ @@ -437,13 +546,10 @@ ucnv_compareNames(const char *name1, const char *name2) { } /* Case-insensitive comparison */ - rc = (int)(unsigned char)uprv_tolower(c1) - - (int)(unsigned char)uprv_tolower(c2); + rc = (int)(unsigned char)c1 - (int)(unsigned char)c2; if (rc != 0) { return rc; } - ++name1; - ++name2; } } @@ -452,14 +558,27 @@ ucnv_compareNames(const char *name1, const char *name2) { * return the converter number index for gConverterList */ static U_INLINE uint32_t -findConverter(const char *alias, UErrorCode *pErrorCode) { +findConverter(const char *alias, UBool *containsOption, UErrorCode *pErrorCode) { uint32_t mid, start, limit; uint32_t lastMid; int result; + int isUnnormalized = (gMainTable.optionTable->stringNormalizationType == UCNV_IO_UNNORMALIZED); + char strippedName[UCNV_MAX_CONVERTER_NAME_LENGTH]; + + if (!isUnnormalized) { + if (uprv_strlen(alias) >= UCNV_MAX_CONVERTER_NAME_LENGTH) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + return UINT32_MAX; + } + + /* Lower case and remove ignoreable characters. */ + ucnv_io_stripForCompare(strippedName, alias); + alias = strippedName; + } /* do a binary search for the alias */ start = 0; - limit = gUntaggedConvArraySize; + limit = gMainTable.untaggedConvArraySize; mid = limit; lastMid = UINT32_MAX; @@ -469,7 +588,12 @@ findConverter(const char *alias, UErrorCode *pErrorCode) { break; /* We haven't moved, and it wasn't found. */ } lastMid = mid; - result = ucnv_compareNames(alias, GET_STRING(gAliasList[mid])); + if (isUnnormalized) { + result = ucnv_compareNames(alias, GET_STRING(gMainTable.aliasList[mid])); + } + else { + result = uprv_strcmp(alias, GET_NORMALIZED_STRING(gMainTable.aliasList[mid])); + } if (result < 0) { limit = mid; @@ -480,10 +604,18 @@ findConverter(const char *alias, UErrorCode *pErrorCode) { * this alias in gAliasList is unique, but different standards * may map an alias to different converters. */ - if (gUntaggedConvArray[mid] & UCNV_AMBIGUOUS_ALIAS_MAP_BIT) { + if (gMainTable.untaggedConvArray[mid] & UCNV_AMBIGUOUS_ALIAS_MAP_BIT) { *pErrorCode = U_AMBIGUOUS_ALIAS_WARNING; } - return gUntaggedConvArray[mid] & UCNV_CONVERTER_INDEX_MASK; + /* State whether the canonical converter name contains an option. + This information is contained in this list in order to maintain backward & forward compatibility. */ + if (containsOption) { + UBool containsCnvOptionInfo = (UBool)gMainTable.optionTable->containsCnvOptionInfo; + *containsOption = (UBool)((containsCnvOptionInfo + && ((gMainTable.untaggedConvArray[mid] & UCNV_CONTAINS_OPTION_BIT) != 0)) + || !containsCnvOptionInfo); + } + return gMainTable.untaggedConvArray[mid] & UCNV_CONVERTER_INDEX_MASK; } } @@ -498,9 +630,9 @@ static U_INLINE UBool isAliasInList(const char *alias, uint32_t listOffset) { if (listOffset) { uint32_t currAlias; - uint32_t listCount = gTaggedAliasLists[listOffset]; + uint32_t listCount = gMainTable.taggedAliasLists[listOffset]; /* +1 to skip listCount */ - const uint16_t *currList = gTaggedAliasLists + listOffset + 1; + const uint16_t *currList = gMainTable.taggedAliasLists + listOffset + 1; for (currAlias = 0; currAlias < listCount; currAlias++) { if (currList[currAlias] && ucnv_compareNames(alias, GET_STRING(currList[currAlias]))==0) @@ -527,14 +659,14 @@ findTaggedAliasListsOffset(const char *alias, const char *standard, UErrorCode * uint32_t tagNum = getTagNumber(standard); /* Make a quick guess. Hopefully they used a TR22 canonical alias. */ - convNum = findConverter(alias, &myErr); + convNum = findConverter(alias, NULL, &myErr); if (myErr != U_ZERO_ERROR) { *pErrorCode = myErr; } - if (tagNum < (gTagListSize - UCNV_NUM_HIDDEN_TAGS) && convNum < gConverterListSize) { - listOffset = gTaggedAliasArray[tagNum*gConverterListSize + convNum]; - if (listOffset && gTaggedAliasLists[listOffset + 1]) { + if (tagNum < (gMainTable.tagListSize - UCNV_NUM_HIDDEN_TAGS) && convNum < gMainTable.converterListSize) { + listOffset = gMainTable.taggedAliasArray[tagNum*gMainTable.converterListSize + convNum]; + if (listOffset && gMainTable.taggedAliasLists[listOffset + 1]) { return listOffset; } if (myErr == U_AMBIGUOUS_ALIAS_WARNING) { @@ -543,13 +675,13 @@ findTaggedAliasListsOffset(const char *alias, const char *standard, UErrorCode * at the highest standard affinity. This may take a while. */ - for (idx = 0; idx < gTaggedAliasArraySize; idx++) { - listOffset = gTaggedAliasArray[idx]; + for (idx = 0; idx < gMainTable.taggedAliasArraySize; idx++) { + listOffset = gMainTable.taggedAliasArray[idx]; if (listOffset && isAliasInList(alias, listOffset)) { - uint32_t currTagNum = idx/gConverterListSize; - uint32_t currConvNum = (idx - currTagNum*gConverterListSize); - uint32_t tempListOffset = gTaggedAliasArray[tagNum*gConverterListSize + currConvNum]; - if (tempListOffset && gTaggedAliasLists[tempListOffset + 1]) { + uint32_t currTagNum = idx/gMainTable.converterListSize; + uint32_t currConvNum = (idx - currTagNum*gMainTable.converterListSize); + uint32_t tempListOffset = gMainTable.taggedAliasArray[tagNum*gMainTable.converterListSize + currConvNum]; + if (tempListOffset && gMainTable.taggedAliasLists[tempListOffset + 1]) { return tempListOffset; } /* else keep on looking */ @@ -578,13 +710,13 @@ findTaggedConverterNum(const char *alias, const char *standard, UErrorCode *pErr uint32_t tagNum = getTagNumber(standard); /* Make a quick guess. Hopefully they used a TR22 canonical alias. */ - convNum = findConverter(alias, &myErr); + convNum = findConverter(alias, NULL, &myErr); if (myErr != U_ZERO_ERROR) { *pErrorCode = myErr; } - if (tagNum < (gTagListSize - UCNV_NUM_HIDDEN_TAGS) && convNum < gConverterListSize) { - listOffset = gTaggedAliasArray[tagNum*gConverterListSize + convNum]; + if (tagNum < (gMainTable.tagListSize - UCNV_NUM_HIDDEN_TAGS) && convNum < gMainTable.converterListSize) { + listOffset = gMainTable.taggedAliasArray[tagNum*gMainTable.converterListSize + convNum]; if (listOffset && isAliasInList(alias, listOffset)) { return convNum; } @@ -594,10 +726,10 @@ findTaggedConverterNum(const char *alias, const char *standard, UErrorCode *pErr We search only in the requested tag, not the whole thing. This may take a while. */ - uint32_t convStart = (tagNum)*gConverterListSize; - uint32_t convLimit = (tagNum+1)*gConverterListSize; + uint32_t convStart = (tagNum)*gMainTable.converterListSize; + uint32_t convLimit = (tagNum+1)*gMainTable.converterListSize; for (idx = convStart; idx < convLimit; idx++) { - listOffset = gTaggedAliasArray[idx]; + listOffset = gMainTable.taggedAliasArray[idx]; if (listOffset && isAliasInList(alias, listOffset)) { return idx-convStart; } @@ -614,11 +746,11 @@ findTaggedConverterNum(const char *alias, const char *standard, UErrorCode *pErr U_CFUNC const char * -ucnv_io_getConverterName(const char *alias, UErrorCode *pErrorCode) { +ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode) { if(haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { - uint32_t convNum = findConverter(alias, pErrorCode); - if (convNum < gConverterListSize) { - return GET_STRING(gConverterList[convNum]); + uint32_t convNum = findConverter(alias, containsOption, pErrorCode); + if (convNum < gMainTable.converterListSize) { + return GET_STRING(gMainTable.converterList[convNum]); } /* else converter not found */ } @@ -632,7 +764,7 @@ ucnv_io_countStandardAliases(UEnumeration *enumerator, UErrorCode *pErrorCode) { uint32_t listOffset = myContext->listOffset; if (listOffset) { - value = gTaggedAliasLists[listOffset]; + value = gMainTable.taggedAliasLists[listOffset]; } return value; } @@ -646,8 +778,8 @@ ucnv_io_nextStandardAliases(UEnumeration *enumerator, uint32_t listOffset = myContext->listOffset; if (listOffset) { - uint32_t listCount = gTaggedAliasLists[listOffset]; - const uint16_t *currList = gTaggedAliasLists + listOffset + 1; + uint32_t listCount = gMainTable.taggedAliasLists[listOffset]; + const uint16_t *currList = gMainTable.taggedAliasLists + listOffset + 1; if (myContext->listIdx < listCount) { const char *myStr = GET_STRING(currList[myContext->listIdx++]); @@ -658,7 +790,9 @@ ucnv_io_nextStandardAliases(UEnumeration *enumerator, } } /* Either we accessed a zero length list, or we enumerated too far. */ - *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR; + if (resultLength) { + *resultLength = 0; + } return NULL; } @@ -696,7 +830,7 @@ ucnv_openStandardNames(const char *convName, /* When listOffset == 0, we want to acknowledge that the converter name and standard are okay, but there is nothing to enumerate. */ - if (listOffset < gTaggedAliasListsSize) { + if (listOffset < gMainTable.taggedAliasListsSize) { UAliasContext *myContext; myEnum = uprv_malloc(sizeof(UEnumeration)); @@ -720,16 +854,16 @@ ucnv_openStandardNames(const char *convName, return myEnum; } -U_CFUNC uint16_t +static uint16_t ucnv_io_countAliases(const char *alias, UErrorCode *pErrorCode) { if(haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { - uint32_t convNum = findConverter(alias, pErrorCode); - if (convNum < gConverterListSize) { + uint32_t convNum = findConverter(alias, NULL, pErrorCode); + if (convNum < gMainTable.converterListSize) { /* tagListNum - 1 is the ALL tag */ - int32_t listOffset = gTaggedAliasArray[(gTagListSize - 1)*gConverterListSize + convNum]; + int32_t listOffset = gMainTable.taggedAliasArray[(gMainTable.tagListSize - 1)*gMainTable.converterListSize + convNum]; if (listOffset) { - return gTaggedAliasLists[listOffset]; + return gMainTable.taggedAliasLists[listOffset]; } /* else this shouldn't happen. internal program error */ } @@ -738,19 +872,19 @@ ucnv_io_countAliases(const char *alias, UErrorCode *pErrorCode) { return 0; } -U_CFUNC uint16_t +static uint16_t ucnv_io_getAliases(const char *alias, uint16_t start, const char **aliases, UErrorCode *pErrorCode) { if(haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { uint32_t currAlias; - uint32_t convNum = findConverter(alias, pErrorCode); - if (convNum < gConverterListSize) { + uint32_t convNum = findConverter(alias, NULL, pErrorCode); + if (convNum < gMainTable.converterListSize) { /* tagListNum - 1 is the ALL tag */ - int32_t listOffset = gTaggedAliasArray[(gTagListSize - 1)*gConverterListSize + convNum]; + int32_t listOffset = gMainTable.taggedAliasArray[(gMainTable.tagListSize - 1)*gMainTable.converterListSize + convNum]; if (listOffset) { - uint32_t listCount = gTaggedAliasLists[listOffset]; + uint32_t listCount = gMainTable.taggedAliasLists[listOffset]; /* +1 to skip listCount */ - const uint16_t *currList = gTaggedAliasLists + listOffset + 1; + const uint16_t *currList = gMainTable.taggedAliasLists + listOffset + 1; for (currAlias = start; currAlias < listCount; currAlias++) { aliases[currAlias] = GET_STRING(currList[currAlias]); @@ -763,18 +897,18 @@ ucnv_io_getAliases(const char *alias, uint16_t start, const char **aliases, UErr return 0; } -U_CFUNC const char * +static const char * ucnv_io_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode) { if(haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { - uint32_t convNum = findConverter(alias, pErrorCode); - if (convNum < gConverterListSize) { + uint32_t convNum = findConverter(alias, NULL, pErrorCode); + if (convNum < gMainTable.converterListSize) { /* tagListNum - 1 is the ALL tag */ - int32_t listOffset = gTaggedAliasArray[(gTagListSize - 1)*gConverterListSize + convNum]; + int32_t listOffset = gMainTable.taggedAliasArray[(gMainTable.tagListSize - 1)*gMainTable.converterListSize + convNum]; if (listOffset) { - uint32_t listCount = gTaggedAliasLists[listOffset]; + uint32_t listCount = gMainTable.taggedAliasLists[listOffset]; /* +1 to skip listCount */ - const uint16_t *currList = gTaggedAliasLists + listOffset + 1; + const uint16_t *currList = gMainTable.taggedAliasLists + listOffset + 1; if (n < listCount) { return GET_STRING(currList[n]); @@ -788,11 +922,11 @@ ucnv_io_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode) { return NULL; } -U_CFUNC uint16_t +static uint16_t ucnv_io_countStandards(UErrorCode *pErrorCode) { if (haveAliasData(pErrorCode)) { /* Don't include the empty list */ - return (uint16_t)(gTagListSize - UCNV_NUM_HIDDEN_TAGS); + return (uint16_t)(gMainTable.tagListSize - UCNV_NUM_HIDDEN_TAGS); } return 0; @@ -801,8 +935,8 @@ ucnv_io_countStandards(UErrorCode *pErrorCode) { U_CAPI const char * U_EXPORT2 ucnv_getStandard(uint16_t n, UErrorCode *pErrorCode) { if (haveAliasData(pErrorCode)) { - if (n < gTagListSize - UCNV_NUM_HIDDEN_TAGS) { - return GET_STRING(gTagList[n]); + if (n < gMainTable.tagListSize - UCNV_NUM_HIDDEN_TAGS) { + return GET_STRING(gMainTable.tagList[n]); } *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR; } @@ -815,8 +949,8 @@ ucnv_getStandardName(const char *alias, const char *standard, UErrorCode *pError if (haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { uint32_t listOffset = findTaggedAliasListsOffset(alias, standard, pErrorCode); - if (0 < listOffset && listOffset < gTaggedAliasListsSize) { - const uint16_t *currList = gTaggedAliasLists + listOffset + 1; + if (0 < listOffset && listOffset < gMainTable.taggedAliasListsSize) { + const uint16_t *currList = gMainTable.taggedAliasLists + listOffset + 1; /* Get the preferred name from this list */ if (currList[0]) { @@ -830,96 +964,48 @@ ucnv_getStandardName(const char *alias, const char *standard, UErrorCode *pError return NULL; } -U_CAPI const char * U_EXPORT2 -ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode) { - if (haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { - uint32_t convNum = findTaggedConverterNum(alias, standard, pErrorCode); +U_CAPI uint16_t U_EXPORT2 +ucnv_countAliases(const char *alias, UErrorCode *pErrorCode) +{ + return ucnv_io_countAliases(alias, pErrorCode); +} - if (convNum < gConverterListSize) { - return GET_STRING(gConverterList[convNum]); - } - } - return NULL; +U_CAPI const char* U_EXPORT2 +ucnv_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode) +{ + return ucnv_io_getAlias(alias, n, pErrorCode); } -void -ucnv_io_flushAvailableConverterCache() { - if (gAvailableConverters) { - umtx_lock(NULL); - gAvailableConverterCount = 0; - uprv_free((char **)gAvailableConverters); - gAvailableConverters = NULL; - umtx_unlock(NULL); - } +U_CAPI void U_EXPORT2 +ucnv_getAliases(const char *alias, const char **aliases, UErrorCode *pErrorCode) +{ + ucnv_io_getAliases(alias, 0, aliases, pErrorCode); } -static UBool haveAvailableConverterList(UErrorCode *pErrorCode) { - if (gAvailableConverters == NULL) { - uint16_t idx; - uint16_t localConverterCount; - UErrorCode status; - const char *converterName; - const char **localConverterList; - - if (!haveAliasData(pErrorCode)) { - return FALSE; - } - - /* We can't have more than "*converterTable" converters to open */ - localConverterList = (const char **) uprv_malloc(gConverterListSize * sizeof(char*)); - if (!localConverterList) { - *pErrorCode = U_MEMORY_ALLOCATION_ERROR; - return FALSE; - } - - localConverterCount = 0; - - for (idx = 0; idx < gConverterListSize; idx++) { - status = U_ZERO_ERROR; - converterName = GET_STRING(gConverterList[idx]); - ucnv_close(ucnv_open(converterName, &status)); - if (U_SUCCESS(status)) { - localConverterList[localConverterCount++] = converterName; - } - } - - umtx_lock(NULL); - if (gAvailableConverters == NULL) { - gAvailableConverters = localConverterList; - gAvailableConverterCount = localConverterCount; - /* haveData should have already registered the cleanup function */ - } - else { - uprv_free((char **)localConverterList); - } - umtx_unlock(NULL); - } - return TRUE; +U_CAPI uint16_t U_EXPORT2 +ucnv_countStandards(void) +{ + UErrorCode err = U_ZERO_ERROR; + return ucnv_io_countStandards(&err); } -U_CFUNC uint16_t -ucnv_io_countAvailableConverters(UErrorCode *pErrorCode) { - if (haveAvailableConverterList(pErrorCode)) { - return gAvailableConverterCount; - } - return 0; -} +U_CAPI const char * U_EXPORT2 +ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErrorCode) { + if (haveAliasData(pErrorCode) && isAlias(alias, pErrorCode)) { + uint32_t convNum = findTaggedConverterNum(alias, standard, pErrorCode); -U_CFUNC const char * -ucnv_io_getAvailableConverter(uint16_t n, UErrorCode *pErrorCode) { - if (haveAvailableConverterList(pErrorCode)) { - if (n < gAvailableConverterCount) { - return gAvailableConverters[n]; + if (convNum < gMainTable.converterListSize) { + return GET_STRING(gMainTable.converterList[convNum]); } - *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR; } + return NULL; } static int32_t U_CALLCONV ucnv_io_countAllConverters(UEnumeration *enumerator, UErrorCode *pErrorCode) { - return gConverterListSize; + return gMainTable.converterListSize; } static const char* U_CALLCONV @@ -929,15 +1015,17 @@ ucnv_io_nextAllConverters(UEnumeration *enumerator, { uint16_t *myContext = (uint16_t *)(enumerator->context); - if (*myContext < gConverterListSize) { - const char *myStr = GET_STRING(gConverterList[(*myContext)++]); + if (*myContext < gMainTable.converterListSize) { + const char *myStr = GET_STRING(gMainTable.converterList[(*myContext)++]); if (resultLength) { *resultLength = (int32_t)uprv_strlen(myStr); } return myStr; } /* Either we accessed a zero length list, or we enumerated too far. */ - *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR; + if (resultLength) { + *resultLength = 0; + } return NULL; } @@ -981,109 +1069,13 @@ ucnv_openAllNames(UErrorCode *pErrorCode) { } U_CFUNC uint16_t -ucnv_io_countAvailableAliases(UErrorCode *pErrorCode) { +ucnv_io_countTotalAliases(UErrorCode *pErrorCode) { if (haveAliasData(pErrorCode)) { - return (uint16_t)gAliasListSize; + return (uint16_t)gMainTable.aliasListSize; } return 0; } -/* default converter name --------------------------------------------------- */ - -/* - * In order to be really thread-safe, the get function would have to take - * a buffer parameter and copy the current string inside a mutex block. - * This implementation only tries to be really thread-safe while - * setting the name. - * It assumes that setting a pointer is atomic. - */ - -U_CFUNC const char * -ucnv_io_getDefaultConverterName() { - /* local variable to be thread-safe */ - const char *name; - - umtx_lock(NULL); - name=gDefaultConverterName; - umtx_unlock(NULL); - - if(name==NULL) { - UErrorCode errorCode = U_ZERO_ERROR; - UConverter *cnv = NULL; - int32_t length = 0; - - name = uprv_getDefaultCodepage(); - - /* if the name is there, test it out and get the canonical name with options */ - if(name != NULL) { - cnv = ucnv_open(name, &errorCode); - if(U_SUCCESS(errorCode) && cnv != NULL) { - name = ucnv_getName(cnv, &errorCode); - } - } - - if(name == NULL || name[0] == 0 - || U_FAILURE(errorCode) || cnv == NULL - || length>=sizeof(gDefaultConverterNameBuffer)) - { - /* Panic time, let's use a fallback. */ -#if (U_CHARSET_FAMILY == U_ASCII_FAMILY) - name = "US-ASCII"; - /* there is no 'algorithmic' converter for EBCDIC */ -#elif defined(OS390) - name = "ibm-1047_P100-1995" UCNV_SWAP_LFNL_OPTION_STRING; -#else - name = "ibm-37_P100-1995"; -#endif - } - - length=(int32_t)(uprv_strlen(name)); - - /* Copy the name before we close the converter. */ - umtx_lock(NULL); - uprv_memcpy(gDefaultConverterNameBuffer, name, length); - gDefaultConverterNameBuffer[length]=0; - gDefaultConverterName = gDefaultConverterNameBuffer; - name = gDefaultConverterName; - ucln_common_registerCleanup(UCLN_COMMON_UCNV_IO, ucnv_io_cleanup); - umtx_unlock(NULL); - - /* The close may make the current name go away. */ - ucnv_close(cnv); - } - - return name; -} - -U_CFUNC void -ucnv_io_setDefaultConverterName(const char *converterName) { - if(converterName==NULL) { - /* reset to the default codepage */ - umtx_lock(NULL); - gDefaultConverterName=NULL; - umtx_unlock(NULL); - } else { - UErrorCode errorCode=U_ZERO_ERROR; - const char *name=ucnv_io_getConverterName(converterName, &errorCode); - - umtx_lock(NULL); - - if(U_SUCCESS(errorCode) && name!=NULL) { - gDefaultConverterName=name; - } else { - /* do not set the name if the alias lookup failed and it is too long */ - int32_t length=(int32_t)(uprv_strlen(converterName)); - if(lengthreadUInt32(((const uint32_t *)inTable)[tocLengthIndex]); - if(tocLengthreadUInt32(((const uint32_t *)inTable)[i]); } /* compute offsets */ - offsets[tocLengthIndex]=0; + uprv_memset(offsets, 0, sizeof(offsets)); offsets[converterListIndex]=2*(1+tocLength); /* count two 16-bit units per toc entry */ - for(i=tagListIndex; i<=stringTableIndex; ++i) { + for(i=tagListIndex; i<=tocLength; ++i) { offsets[i]=offsets[i-1]+toc[i-1]; } @@ -1210,12 +1203,11 @@ ucnv_swapAliases(const UDataSwapper *ds, /* swap the entire table of contents */ ds->swapArray32(ds, inTable, 4*(1+tocLength), outTable, pErrorCode); - /* swap strings */ - ds->swapInvChars(ds, inTable+offsets[stringTableIndex], 2*(int32_t)toc[stringTableIndex], + /* swap unormalized strings & normalized strings */ + ds->swapInvChars(ds, inTable+offsets[stringTableIndex], 2*(int32_t)(toc[stringTableIndex]+toc[normalizedStringTableIndex]), outTable+offsets[stringTableIndex], pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ucnv_swapAliases().swapInvChars(charset names) failed - %s\n", - u_errorName(*pErrorCode)); + udata_printError(ds, "ucnv_swapAliases().swapInvChars(charset names) failed\n"); return 0; } @@ -1311,8 +1303,8 @@ ucnv_swapAliases(const UDataSwapper *ds, } if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ucnv_swapAliases().uprv_sortArray(%u items) failed - %s\n", - count, u_errorName(*pErrorCode)); + udata_printError(ds, "ucnv_swapAliases().uprv_sortArray(%u items) failed\n", + count); return 0; } diff --git a/icuSources/common/ucnv_io.h b/icuSources/common/ucnv_io.h index 7ae6def4..91bc6e59 100644 --- a/icuSources/common/ucnv_io.h +++ b/icuSources/common/ucnv_io.h @@ -1,13 +1,13 @@ /* ********************************************************************** - * Copyright (C) 1999-2004, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * * * ucnv_io.h: - * defines variables and functions pertaining to file access, and name resolution - * aspect of the library + * defines variables and functions pertaining to converter name resolution + * aspect of the conversion code */ #ifndef UCNV_IO_H @@ -20,16 +20,51 @@ #include "udataswp.h" #define UCNV_AMBIGUOUS_ALIAS_MAP_BIT 0x8000 +#define UCNV_CONTAINS_OPTION_BIT 0x4000 #define UCNV_CONVERTER_INDEX_MASK 0xFFF #define UCNV_NUM_RESERVED_TAGS 2 #define UCNV_NUM_HIDDEN_TAGS 1 +enum { + UCNV_IO_UNNORMALIZED, + UCNV_IO_STD_NORMALIZED, + UCNV_IO_NORM_TYPE_COUNT +}; + +typedef struct { + uint16_t stringNormalizationType; + uint16_t containsCnvOptionInfo; +} UConverterAliasOptions; + +typedef struct UConverterAlias { + const uint16_t *converterList; + const uint16_t *tagList; + const uint16_t *aliasList; + const uint16_t *untaggedConvArray; + const uint16_t *taggedAliasArray; + const uint16_t *taggedAliasLists; + const UConverterAliasOptions *optionTable; + const uint16_t *stringTable; + const uint16_t *normalizedStringTable; + + uint32_t converterListSize; + uint32_t tagListSize; + uint32_t aliasListSize; + uint32_t untaggedConvArraySize; + uint32_t taggedAliasArraySize; + uint32_t taggedAliasListsSize; + uint32_t optionTableSize; + uint32_t stringTableSize; + uint32_t normalizedStringTableSize; +} UConverterAlias; + /** * \var ucnv_io_stripForCompare * Remove the underscores, dashes and spaces from the name, and convert * the name to lower case. * @param dst The destination buffer, which is <= the buffer of name. * @param dst The destination buffer, which is <= the buffer of name. + * @see ucnv_compareNames * @return the destination buffer. */ #if U_CHARSET_FAMILY==U_ASCII_FAMILY @@ -40,10 +75,10 @@ # error U_CHARSET_FAMILY is not valid #endif -U_CFUNC char * U_EXPORT2 +U_CAPI char * U_EXPORT2 ucnv_io_stripASCIIForCompare(char *dst, const char *name); -U_CFUNC char * U_EXPORT2 +U_CAPI char * U_EXPORT2 ucnv_io_stripEBCDICForCompare(char *dst, const char *name); /** @@ -52,109 +87,24 @@ ucnv_io_stripEBCDICForCompare(char *dst, const char *name); * is returned in mixed-case. * Returns NULL if the alias is not found. * @param alias The alias name to be searched. + * @param containsOption A return value stating whether the returned converter name contains an option (a comma) * @param pErrorCode The error code * @return the converter name in mixed-case, return NULL if the alias is not found. */ U_CFUNC const char * -ucnv_io_getConverterName(const char *alias, UErrorCode *pErrorCode); - -/** - * The count for ucnv_io_getAliases and ucnv_io_getAlias - * @param alias The alias name to be counted - * @param pErrorCode The error code - * @return the alias count - */ -U_CFUNC uint16_t -ucnv_io_countAliases(const char *alias, UErrorCode *pErrorCode); - -/** - * Search case-insensitively for a converter alias and set aliases to - * a pointer to the list of aliases for the actual converter. - * The first "alias" is the canonical converter name. - * The aliases are stored consecutively, in mixed case, each NUL-terminated. - * There are as many strings in this list as the return value specifies. - * Returns the number of aliases including the canonical converter name, - * or 0 if the alias is not found. - * @param alias The canonical converter name - * @param start - * @param aliases A pointer to the list of aliases for the actual converter - * @return the number of aliases including the canonical converter name, or 0 if the alias is not found. - */ -U_CFUNC uint16_t -ucnv_io_getAliases(const char *alias, uint16_t start, const char **aliases, UErrorCode *pErrorCode); - -/** - * Search case-insensitively for a converter alias and return - * the (n)th alias. - * Returns NULL if the alias is not found. - * @param alias The converter alias - * @param n The number specifies which alias to get - * @param pErrorCode The error code - * @return the (n)th alias and return NULL if the alias is not found. - */ -U_CFUNC const char * -ucnv_io_getAlias(const char *alias, uint16_t n, UErrorCode *pErrorCode); - -/** - * Return the number of all standard names. - * @param pErrorCode The error code - * @return the number of all standard names - */ -U_CFUNC uint16_t -ucnv_io_countStandards(UErrorCode *pErrorCode); +ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode); /** - * Return the number of all converter names. - * @param pErrorCode The error code - * @return the number of all converter names - */ -U_CFUNC uint16_t -ucnv_io_countAvailableConverters(UErrorCode *pErrorCode); - -/** - * Return the (n)th converter name in mixed case, or NULL - * if there is none (typically, if the data cannot be loaded). - * 0<=indexucnv_io_getConverterName(). - * @return the name of the default converter - */ -U_CFUNC const char * -ucnv_io_getDefaultConverterName(void); - -/** - * Set the name of the default converter. - * @param name The name set to the default converter - */ -U_CFUNC void -ucnv_io_setDefaultConverterName(const char *name); +ucnv_io_countTotalAliases(UErrorCode *pErrorCode); /** - * Swap an ICU converter alias table. See ucnv_io.c. + * Swap an ICU converter alias table. See implementation for details. * @internal */ U_CAPI int32_t U_EXPORT2 diff --git a/icuSources/common/ucnv_lmb.c b/icuSources/common/ucnv_lmb.c index e9942a4b..79606af2 100644 --- a/icuSources/common/ucnv_lmb.c +++ b/icuSources/common/ucnv_lmb.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnv_lmb.cpp @@ -664,7 +664,7 @@ _LMBCSSafeClone(const UConverter *cnv, static void _LMBCSGetUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { /* all but U+F6xx, see LMBCS explanation above (search for F6xx) */ @@ -1016,9 +1016,8 @@ static UChar32 _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, UErrorCode* err) { - UChar32 uniChar = 0; /* an output UNICODE char */ - ulmbcs_byte_t CurByte; /* A byte from the input stream */ - const char * saveSource; + UChar32 uniChar = 0; /* an output UNICODE char */ + ulmbcs_byte_t CurByte; /* A byte from the input stream */ /* error check */ if (args->source >= args->sourceLimit) @@ -1027,7 +1026,7 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, return 0xffff; } /* Grab first byte & save address for error recovery */ - CurByte = *((ulmbcs_byte_t *) (saveSource = args->source++)); + CurByte = *((ulmbcs_byte_t *) (args->source++)); /* * at entry of each if clause: @@ -1046,7 +1045,7 @@ _LMBCSGetNextUCharWorker(UConverterToUnicodeArgs* args, || CurByte == ULMBCS_HT || CurByte == ULMBCS_CR || CurByte == ULMBCS_LF || CurByte == ULMBCS_123SYSTEMRANGE) { - uniChar = CurByte; + uniChar = CurByte; } else { diff --git a/icuSources/common/ucnv_set.c b/icuSources/common/ucnv_set.c index c192ea4f..772e7ed8 100644 --- a/icuSources/common/ucnv_set.c +++ b/icuSources/common/ucnv_set.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -51,7 +51,8 @@ ucnv_getUnicodeSet(const UConverter *cnv, NULL, uset_add, uset_addRange, - uset_addString + uset_addString, + uset_remove }; sa.set=setFillIn; diff --git a/icuSources/common/ucnv_u16.c b/icuSources/common/ucnv_u16.c index 86fd1999..6fc9e2a4 100644 --- a/icuSources/common/ucnv_u16.c +++ b/icuSources/common/ucnv_u16.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnv_u16.c @@ -23,6 +23,10 @@ #include "ucnv_cnv.h" #include "cmemory.h" +enum { + UCNV_NEED_TO_WRITE_BOM=1 +}; + /* UTF-16BE ----------------------------------------------------------------- */ #if U_IS_BIG_ENDIAN @@ -31,33 +35,46 @@ # define _UTF16PEFromUnicodeWithOffsets _UTF16LEFromUnicodeWithOffsets #endif + static void _UTF16BEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; const UChar *source; - uint8_t *target; + char *target; int32_t *offsets; - int32_t targetCapacity, length, count, sourceIndex; + uint32_t targetCapacity, length, sourceIndex; UChar c, trail; char overflow[4]; source=pArgs->source; - length=pArgs->sourceLimit-source; + length=(int32_t)(pArgs->sourceLimit-source); if(length<=0) { /* no input, nothing to do */ return; } - targetCapacity=pArgs->targetLimit-pArgs->target; - if(targetCapacity<=0) { + cnv=pArgs->converter; + + /* write the BOM if necessary */ + if(cnv->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { + static const char bom[]={ (char)0xfe, (char)0xff }; + ucnv_fromUWriteBytes(cnv, + bom, 2, + &pArgs->target, pArgs->targetLimit, + &pArgs->offsets, -1, + pErrorCode); + cnv->fromUnicodeStatus=0; + } + + target=pArgs->target; + if(target >= pArgs->targetLimit) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; return; } - cnv=pArgs->converter; - target=(uint8_t *)pArgs->target; + targetCapacity=(uint32_t)(pArgs->targetLimit-target); offsets=pArgs->offsets; sourceIndex=0; @@ -83,13 +100,13 @@ _UTF16BEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, cnv->fromUChar32=c=0; } - /* copy an even number of bytes for complete UChars */ - count=2*length; - if(count>targetCapacity) { - count=targetCapacity&~1; - } - /* count is even */ if(c==0) { + /* copy an even number of bytes for complete UChars */ + uint32_t count=2*length; + if(count>targetCapacity) { + count=targetCapacity&~1; + } + /* count is even */ targetCapacity-=count; count>>=1; length-=count; @@ -210,7 +227,7 @@ _UTF16BEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, (char **)&target, pArgs->targetLimit, &offsets, sourceIndex, pErrorCode); - targetCapacity=pArgs->targetLimit-(char *)target; + targetCapacity=(uint32_t)(pArgs->targetLimit-(char *)target); } if(U_SUCCESS(*pErrorCode) && sourcesourceLimit && targetCapacity==0) { @@ -231,24 +248,24 @@ _UTF16BEToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, UChar *target; int32_t *offsets; - int32_t targetCapacity, length, count, sourceIndex; + uint32_t targetCapacity, length, count, sourceIndex; UChar c, trail; cnv=pArgs->converter; source=(const uint8_t *)pArgs->source; - length=(const uint8_t *)pArgs->sourceLimit-source; + length=(int32_t)((const uint8_t *)pArgs->sourceLimit-source); if(length<=0 && cnv->toUnicodeStatus==0) { /* no input, nothing to do */ return; } - targetCapacity=pArgs->targetLimit-pArgs->target; - if(targetCapacity<=0) { + target=pArgs->target; + if(target >= pArgs->targetLimit) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; return; } - target=pArgs->target; + targetCapacity=(uint32_t)(pArgs->targetLimit-target); offsets=pArgs->offsets; sourceIndex=0; c=0; @@ -551,7 +568,7 @@ static const UConverterImpl _UTF16BEImpl={ NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getNonSurrogateUnicodeSet }; static const UConverterStaticData _UTF16BEStaticData={ @@ -578,28 +595,40 @@ _UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; const UChar *source; - uint8_t *target; + char *target; int32_t *offsets; - int32_t targetCapacity, length, count, sourceIndex; + uint32_t targetCapacity, length, sourceIndex; UChar c, trail; char overflow[4]; source=pArgs->source; - length=pArgs->sourceLimit-source; + length=(int32_t)(pArgs->sourceLimit-source); if(length<=0) { /* no input, nothing to do */ return; } - targetCapacity=pArgs->targetLimit-pArgs->target; - if(targetCapacity<=0) { + cnv=pArgs->converter; + + /* write the BOM if necessary */ + if(cnv->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { + static const char bom[]={ (char)0xff, (char)0xfe }; + ucnv_fromUWriteBytes(cnv, + bom, 2, + &pArgs->target, pArgs->targetLimit, + &pArgs->offsets, -1, + pErrorCode); + cnv->fromUnicodeStatus=0; + } + + target=pArgs->target; + if(target >= pArgs->targetLimit) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; return; } - cnv=pArgs->converter; - target=(uint8_t *)pArgs->target; + targetCapacity=(uint32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; sourceIndex=0; @@ -625,13 +654,13 @@ _UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, cnv->fromUChar32=c=0; } - /* copy an even number of bytes for complete UChars */ - count=2*length; - if(count>targetCapacity) { - count=targetCapacity&~1; - } - /* count is even */ if(c==0) { + /* copy an even number of bytes for complete UChars */ + uint32_t count=2*length; + if(count>targetCapacity) { + count=targetCapacity&~1; + } + /* count is even */ targetCapacity-=count; count>>=1; length-=count; @@ -749,10 +778,10 @@ _UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, /* output length bytes with overflow (length>targetCapacity>0) */ ucnv_fromUWriteBytes(cnv, overflow, length, - (char **)&target, pArgs->targetLimit, + &target, pArgs->targetLimit, &offsets, sourceIndex, pErrorCode); - targetCapacity=pArgs->targetLimit-(char *)target; + targetCapacity=(uint32_t)(pArgs->targetLimit-(char *)target); } if(U_SUCCESS(*pErrorCode) && sourcesourceLimit && targetCapacity==0) { @@ -761,7 +790,7 @@ _UTF16LEFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, /* write back the updated pointers */ pArgs->source=source; - pArgs->target=(char *)target; + pArgs->target=target; pArgs->offsets=offsets; } @@ -773,24 +802,24 @@ _UTF16LEToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, UChar *target; int32_t *offsets; - int32_t targetCapacity, length, count, sourceIndex; + uint32_t targetCapacity, length, count, sourceIndex; UChar c, trail; cnv=pArgs->converter; source=(const uint8_t *)pArgs->source; - length=(const uint8_t *)pArgs->sourceLimit-source; + length=(int32_t)((const uint8_t *)pArgs->sourceLimit-source); if(length<=0 && cnv->toUnicodeStatus==0) { /* no input, nothing to do */ return; } - targetCapacity=pArgs->targetLimit-pArgs->target; - if(targetCapacity<=0) { + target=pArgs->target; + if(target >= pArgs->targetLimit) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; return; } - target=pArgs->target; + targetCapacity=(uint32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; sourceIndex=0; c=0; @@ -1093,7 +1122,7 @@ static const UConverterImpl _UTF16LEImpl={ NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getNonSurrogateUnicodeSet }; @@ -1144,14 +1173,7 @@ _UTF16Reset(UConverter *cnv, UConverterResetChoice choice) { } if(choice!=UCNV_RESET_TO_UNICODE) { /* reset fromUnicode: prepare to output the UTF-16PE BOM */ - cnv->charErrorBufferLength=2; -#if U_IS_BIG_ENDIAN - cnv->charErrorBuffer[0]=0xfe; - cnv->charErrorBuffer[1]=0xff; -#else - cnv->charErrorBuffer[0]=0xff; - cnv->charErrorBuffer[1]=0xfe; -#endif + cnv->fromUnicodeStatus=UCNV_NEED_TO_WRITE_BOM; } } @@ -1206,10 +1228,10 @@ _UTF16ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, ++source; if(state==1) { state=8; /* detect UTF-16BE */ - offsetDelta=source-pArgs->source; + offsetDelta=(int32_t)(source-pArgs->source); } else if(state==5) { state=9; /* detect UTF-16LE */ - offsetDelta=source-pArgs->source; + offsetDelta=(int32_t)(source-pArgs->source); } } else { /* switch to UTF-16BE and pass the previous bytes */ @@ -1322,13 +1344,13 @@ static const UConverterImpl _UTF16Impl = { NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getNonSurrogateUnicodeSet }; static const UConverterStaticData _UTF16StaticData = { sizeof(UConverterStaticData), "UTF-16", - 0, /* ### TODO review correctness of all Unicode CCSIDs */ + 1204, /* CCSID for BOM sensitive UTF-16 */ UCNV_IBM, UCNV_UTF16, 2, 2, #if U_IS_BIG_ENDIAN { 0xff, 0xfd, 0, 0 }, 2, diff --git a/icuSources/common/ucnv_u32.c b/icuSources/common/ucnv_u32.c index 1a37e96f..034bf9bb 100644 --- a/icuSources/common/ucnv_u32.c +++ b/icuSources/common/ucnv_u32.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnv_u32.c @@ -34,6 +34,10 @@ /* -SURROGATE_LOW_START + HALF_BASE */ #define SURROGATE_LOW_BASE 9216 +enum { + UCNV_NEED_TO_WRITE_BOM=1 +}; + /* UTF-32BE ----------------------------------------------------------------- */ static void @@ -47,9 +51,10 @@ T_UConverter_toUnicode_UTF32_BE(UConverterToUnicodeArgs * args, unsigned char *toUBytes = args->converter->toUBytes; uint32_t ch, i; - /* UTF-8 returns here for only non-offset, this needs to change.*/ + /* Restore state of current sequence */ if (args->converter->toUnicodeStatus && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ + args->converter->toULength = 0; ch = args->converter->toUnicodeStatus - 1;/*Stores the previously calculated ch from a previous call*/ args->converter->toUnicodeStatus = 0; @@ -127,8 +132,10 @@ T_UConverter_toUnicode_UTF32_BE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, uint32_t ch, i; int32_t offsetNum = 0; + /* Restore state of current sequence */ if (args->converter->toUnicodeStatus && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ + args->converter->toULength = 0; ch = args->converter->toUnicodeStatus - 1;/*Stores the previously calculated ch from a previous call*/ args->converter->toUnicodeStatus = 0; @@ -204,13 +211,30 @@ T_UConverter_fromUnicode_UTF32_BE(UConverterFromUnicodeArgs * args, UErrorCode * err) { const UChar *mySource = args->source; - unsigned char *myTarget = (unsigned char *) args->target; + unsigned char *myTarget; const UChar *sourceLimit = args->sourceLimit; const unsigned char *targetLimit = (unsigned char *) args->targetLimit; UChar32 ch, ch2; unsigned int indexToWrite; unsigned char temp[sizeof(uint32_t)]; + if(mySource >= sourceLimit) { + /* no input, nothing to do */ + return; + } + + /* write the BOM if necessary */ + if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { + static const char bom[]={ 0, 0, (char)0xfe, (char)0xff }; + ucnv_fromUWriteBytes(args->converter, + bom, 4, + &args->target, args->targetLimit, + &args->offsets, -1, + err); + args->converter->fromUnicodeStatus=0; + } + + myTarget = (unsigned char *) args->target; temp[0] = 0; if (args->converter->fromUChar32) { @@ -288,8 +312,8 @@ T_UConverter_fromUnicode_UTF32_BE_OFFSET_LOGIC(UConverterFromUnicodeArgs * args, UErrorCode * err) { const UChar *mySource = args->source; - unsigned char *myTarget = (unsigned char *) args->target; - int32_t *myOffsets = args->offsets; + unsigned char *myTarget; + int32_t *myOffsets; const UChar *sourceLimit = args->sourceLimit; const unsigned char *targetLimit = (unsigned char *) args->targetLimit; UChar32 ch, ch2; @@ -297,6 +321,24 @@ T_UConverter_fromUnicode_UTF32_BE_OFFSET_LOGIC(UConverterFromUnicodeArgs * args, unsigned int indexToWrite; unsigned char temp[sizeof(uint32_t)]; + if(mySource >= sourceLimit) { + /* no input, nothing to do */ + return; + } + + /* write the BOM if necessary */ + if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { + static const char bom[]={ 0, 0, (char)0xfe, (char)0xff }; + ucnv_fromUWriteBytes(args->converter, + bom, 4, + &args->target, args->targetLimit, + &args->offsets, -1, + err); + args->converter->fromUnicodeStatus=0; + } + + myTarget = (unsigned char *) args->target; + myOffsets = args->offsets; temp[0] = 0; if (args->converter->fromUChar32) { @@ -360,7 +402,7 @@ lowsurogate: *err = U_BUFFER_OVERFLOW_ERROR; } } - offsetNum++; + offsetNum = offsetNum + 1 + (temp[1] != 0); } if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) { @@ -437,7 +479,7 @@ static const UConverterImpl _UTF32BEImpl = { NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getNonSurrogateUnicodeSet }; /* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ @@ -471,10 +513,11 @@ T_UConverter_toUnicode_UTF32_LE(UConverterToUnicodeArgs * args, unsigned char *toUBytes = args->converter->toUBytes; uint32_t ch, i; - /* UTF-8 returns here for only non-offset, this needs to change.*/ + /* Restore state of current sequence */ if (args->converter->toUnicodeStatus && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ + args->converter->toULength = 0; /* Stores the previously calculated ch from a previous call*/ ch = args->converter->toUnicodeStatus - 1; @@ -557,10 +600,11 @@ T_UConverter_toUnicode_UTF32_LE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, uint32_t ch, i; int32_t offsetNum = 0; - /* UTF-8 returns here for only non-offset, this needs to change.*/ + /* Restore state of current sequence */ if (args->converter->toUnicodeStatus && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ + args->converter->toULength = 0; /* Stores the previously calculated ch from a previous call*/ ch = args->converter->toUnicodeStatus - 1; @@ -645,13 +689,30 @@ T_UConverter_fromUnicode_UTF32_LE(UConverterFromUnicodeArgs * args, UErrorCode * err) { const UChar *mySource = args->source; - unsigned char *myTarget = (unsigned char *) args->target; + unsigned char *myTarget; const UChar *sourceLimit = args->sourceLimit; const unsigned char *targetLimit = (unsigned char *) args->targetLimit; UChar32 ch, ch2; unsigned int indexToWrite; unsigned char temp[sizeof(uint32_t)]; + if(mySource >= sourceLimit) { + /* no input, nothing to do */ + return; + } + + /* write the BOM if necessary */ + if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { + static const char bom[]={ (char)0xff, (char)0xfe, 0, 0 }; + ucnv_fromUWriteBytes(args->converter, + bom, 4, + &args->target, args->targetLimit, + &args->offsets, -1, + err); + args->converter->fromUnicodeStatus=0; + } + + myTarget = (unsigned char *) args->target; temp[3] = 0; if (args->converter->fromUChar32) @@ -737,8 +798,8 @@ T_UConverter_fromUnicode_UTF32_LE_OFFSET_LOGIC(UConverterFromUnicodeArgs * args, UErrorCode * err) { const UChar *mySource = args->source; - unsigned char *myTarget = (unsigned char *) args->target; - int32_t *myOffsets = args->offsets; + unsigned char *myTarget; + int32_t *myOffsets; const UChar *sourceLimit = args->sourceLimit; const unsigned char *targetLimit = (unsigned char *) args->targetLimit; UChar32 ch, ch2; @@ -746,6 +807,24 @@ T_UConverter_fromUnicode_UTF32_LE_OFFSET_LOGIC(UConverterFromUnicodeArgs * args, unsigned char temp[sizeof(uint32_t)]; int32_t offsetNum = 0; + if(mySource >= sourceLimit) { + /* no input, nothing to do */ + return; + } + + /* write the BOM if necessary */ + if(args->converter->fromUnicodeStatus==UCNV_NEED_TO_WRITE_BOM) { + static const char bom[]={ (char)0xff, (char)0xfe, 0, 0 }; + ucnv_fromUWriteBytes(args->converter, + bom, 4, + &args->target, args->targetLimit, + &args->offsets, -1, + err); + args->converter->fromUnicodeStatus=0; + } + + myTarget = (unsigned char *) args->target; + myOffsets = args->offsets; temp[3] = 0; if (args->converter->fromUChar32) @@ -817,7 +896,7 @@ lowsurogate: *err = U_BUFFER_OVERFLOW_ERROR; } } - offsetNum++; + offsetNum = offsetNum + 1 + (temp[2] != 0); } if (mySource < sourceLimit && myTarget >= targetLimit && U_SUCCESS(*err)) @@ -895,7 +974,7 @@ static const UConverterImpl _UTF32LEImpl = { NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getNonSurrogateUnicodeSet }; /* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ @@ -948,18 +1027,7 @@ _UTF32Reset(UConverter *cnv, UConverterResetChoice choice) { } if(choice!=UCNV_RESET_TO_UNICODE) { /* reset fromUnicode: prepare to output the UTF-32PE BOM */ - cnv->charErrorBufferLength=4; -#if U_IS_BIG_ENDIAN - cnv->charErrorBuffer[0]=0; - cnv->charErrorBuffer[1]=0; - cnv->charErrorBuffer[2]=0xfe; - cnv->charErrorBuffer[3]=0xff; -#else - cnv->charErrorBuffer[0]=0xff; - cnv->charErrorBuffer[1]=0xfe; - cnv->charErrorBuffer[2]=0; - cnv->charErrorBuffer[3]=0; -#endif + cnv->fromUnicodeStatus=UCNV_NEED_TO_WRITE_BOM; } } @@ -1019,14 +1087,14 @@ _UTF32ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, ++source; if(state==4) { state=8; /* detect UTF-32BE */ - offsetDelta=source-pArgs->source; + offsetDelta=(int32_t)(source-pArgs->source); } else if(state==8) { state=9; /* detect UTF-32LE */ - offsetDelta=source-pArgs->source; + offsetDelta=(int32_t)(source-pArgs->source); } } else { /* switch to UTF-32BE and pass the previous bytes */ - int32_t count=source-pArgs->source; /* number of bytes from this buffer */ + int32_t count=(int32_t)(source-pArgs->source); /* number of bytes from this buffer */ /* reset the source */ source=pArgs->source; @@ -1153,13 +1221,14 @@ static const UConverterImpl _UTF32Impl = { NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getNonSurrogateUnicodeSet }; +/* The 1236 CCSID refers to any version of Unicode with a BOM sensitive endianess of UTF-32 */ static const UConverterStaticData _UTF32StaticData = { sizeof(UConverterStaticData), "UTF-32", - 0, /* ### TODO review correctness of all Unicode CCSIDs */ + 1236, UCNV_IBM, UCNV_UTF32, 4, 4, #if U_IS_BIG_ENDIAN { 0, 0, 0xff, 0xfd }, 4, diff --git a/icuSources/common/ucnv_u7.c b/icuSources/common/ucnv_u7.c index f15da503..62e27929 100644 --- a/icuSources/common/ucnv_u7.c +++ b/icuSources/common/ucnv_u7.c @@ -259,8 +259,8 @@ directMode: * In Direct Mode, only the sourceIndex is used. */ byteIndex=0; - length=sourceLimit-source; - targetCapacity=targetLimit-target; + length=(int32_t)(sourceLimit-source); + targetCapacity=(int32_t)(targetLimit-target); if(length>targetCapacity) { length=targetCapacity; } @@ -482,8 +482,8 @@ _UTF7FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, if(inDirectMode) { directMode: - length=sourceLimit-source; - targetCapacity=targetLimit-target; + length=(int32_t)(sourceLimit-source); + targetCapacity=(int32_t)(targetLimit-target); if(length>targetCapacity) { length=targetCapacity; } @@ -917,8 +917,8 @@ directMode: * In Direct Mode, only the sourceIndex is used. */ byteIndex=0; - length=sourceLimit-source; - targetCapacity=targetLimit-target; + length=(int32_t)(sourceLimit-source); + targetCapacity=(int32_t)(targetLimit-target); if(length>targetCapacity) { length=targetCapacity; } @@ -1167,8 +1167,8 @@ _IMAPFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, if(inDirectMode) { directMode: - length=sourceLimit-source; - targetCapacity=targetLimit-target; + length=(int32_t)(sourceLimit-source); + targetCapacity=(int32_t)(targetLimit-target); if(length>targetCapacity) { length=targetCapacity; } diff --git a/icuSources/common/ucnv_u8.c b/icuSources/common/ucnv_u8.c index a8635783..7b977019 100644 --- a/icuSources/common/ucnv_u8.c +++ b/icuSources/common/ucnv_u8.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnv_u8.c @@ -101,6 +101,7 @@ static void ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args, { inBytes = args->converter->mode; /* restore # of bytes to consume */ i = args->converter->toULength; /* restore # of bytes consumed */ + args->converter->toULength = 0; ch = args->converter->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/ args->converter->toUnicodeStatus = 0; @@ -165,7 +166,6 @@ morebytes: (isCESU8 ? i <= 3 : !UTF_IS_SURROGATE(ch))) { /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - args->converter->toULength = 0; if (ch <= MAXIMUM_UCS2) { /* fits in 16 bits */ @@ -230,6 +230,7 @@ static void ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeArgs * args, { inBytes = args->converter->mode; /* restore # of bytes to consume */ i = args->converter->toULength; /* restore # of bytes consumed */ + args->converter->toULength = 0; ch = args->converter->toUnicodeStatus;/*Stores the previously calculated ch from a previous call*/ args->converter->toUnicodeStatus = 0; @@ -292,7 +293,6 @@ morebytes: (isCESU8 ? i <= 3 : !UTF_IS_SURROGATE(ch))) { /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ - args->converter->toULength = 0; if (ch <= MAXIMUM_UCS2) { /* fits in 16 bits */ @@ -349,7 +349,7 @@ U_CFUNC void ucnv_fromUnicode_UTF8 (UConverterFromUnicodeArgs * args, const UChar *sourceLimit = args->sourceLimit; const unsigned char *targetLimit = (unsigned char *) args->targetLimit; UBool isCESU8 = (UBool)(args->converter->sharedData == &_CESU8Data); - UChar32 ch, ch2; + UChar32 ch; int16_t indexToWrite; char temp[4]; @@ -394,7 +394,6 @@ lowsurrogate: if(UTF_IS_SECOND_SURROGATE(trail)) { ++mySource; ch=UTF16_GET_PAIR_VALUE(ch, trail); - ch2 = 0; /* convert this supplementary code point */ /* exit this condition tree */ } else { @@ -466,7 +465,7 @@ U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC (UConverterFromUnicodeArgs * ar const UChar *sourceLimit = args->sourceLimit; const unsigned char *targetLimit = (unsigned char *) args->targetLimit; UBool isCESU8 = (UBool)(args->converter->sharedData == &_CESU8Data); - UChar32 ch, ch2; + UChar32 ch; int32_t offsetNum, nextSourceIndex; int16_t indexToWrite; char temp[4]; @@ -522,7 +521,6 @@ lowsurrogate: ++mySource; ++nextSourceIndex; ch=UTF16_GET_PAIR_VALUE(ch, trail); - ch2 = 0; /* convert this supplementary code point */ /* exit this condition tree */ } else { @@ -798,7 +796,8 @@ static const UConverterImpl _CESU8Impl={ static const UConverterStaticData _CESU8StaticData={ sizeof(UConverterStaticData), "CESU-8", - 0, UCNV_UNKNOWN, UCNV_CESU8, 1, 3, + 9400, /* CCSID for CESU-8 */ + UCNV_UNKNOWN, UCNV_CESU8, 1, 3, { 0xef, 0xbf, 0xbd, 0 },3,FALSE,FALSE, 0, 0, diff --git a/icuSources/common/ucnvbocu.c b/icuSources/common/ucnvbocu.c index dacd6c16..8623b114 100644 --- a/icuSources/common/ucnvbocu.c +++ b/icuSources/common/ucnvbocu.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -401,7 +401,7 @@ U_ALIGN_CODE(16) source=pArgs->source; sourceLimit=pArgs->sourceLimit; target=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; /* get the converter state from UConverter */ @@ -423,7 +423,7 @@ U_ALIGN_CODE(16) fastSingle: /* fast loop for single-byte differences */ /* use only one loop counter variable, targetCapacity, not also source */ - diff=sourceLimit-source; + diff=(int32_t)(sourceLimit-source); if(targetCapacity>diff) { targetCapacity=diff; } @@ -450,7 +450,7 @@ fastSingle: } } /* restore real values */ - targetCapacity=(const uint8_t *)pArgs->targetLimit-target; + targetCapacity=(int32_t)((const uint8_t *)pArgs->targetLimit-target); sourceIndex=nextSourceIndex; /* wrong if offsets==NULL but does not matter */ /* regular loop for all cases */ @@ -650,7 +650,7 @@ _Bocu1FromUnicode(UConverterFromUnicodeArgs *pArgs, source=pArgs->source; sourceLimit=pArgs->sourceLimit; target=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); /* get the converter state from UConverter */ c=cnv->fromUChar32; @@ -667,7 +667,7 @@ _Bocu1FromUnicode(UConverterFromUnicodeArgs *pArgs, fastSingle: /* fast loop for single-byte differences */ /* use only one loop counter variable, targetCapacity, not also source */ - diff=sourceLimit-source; + diff=(int32_t)(sourceLimit-source); if(targetCapacity>diff) { targetCapacity=diff; } @@ -690,7 +690,7 @@ fastSingle: --targetCapacity; } /* restore real values */ - targetCapacity=(const uint8_t *)pArgs->targetLimit-target; + targetCapacity=(int32_t)((const uint8_t *)pArgs->targetLimit-target); /* regular loop for all cases */ while(sourcetargetLimit-target; + diff=(int32_t)(sourceLimit-source); + count=(int32_t)(pArgs->targetLimit-target); if(count>diff) { count=diff; } @@ -1195,8 +1195,8 @@ U_ALIGN_CODE(16) fastSingle: /* fast loop for single-byte differences */ /* use count as the only loop counter variable */ - diff=sourceLimit-source; - count=pArgs->targetLimit-target; + diff=(int32_t)(sourceLimit-source); + count=(int32_t)(pArgs->targetLimit-target); if(count>diff) { count=diff; } @@ -1374,7 +1374,7 @@ static const UConverterImpl _Bocu1Impl={ static const UConverterStaticData _Bocu1StaticData={ sizeof(UConverterStaticData), "BOCU-1", - 0, /* CCSID for BOCU-1 */ + 1214, /* CCSID for BOCU-1 */ UCNV_IBM, UCNV_BOCU1, 1, 4, /* one UChar generates at least 1 byte and at most 4 bytes */ { 0x1a, 0, 0, 0 }, 1, /* BOCU-1 never needs to write a subchar */ diff --git a/icuSources/common/ucnvdisp.c b/icuSources/common/ucnvdisp.c index 07196b3e..4075be66 100644 --- a/icuSources/common/ucnvdisp.c +++ b/icuSources/common/ucnvdisp.c @@ -38,6 +38,7 @@ ucnv_getDisplayName(const UConverter *cnv, UResourceBundle *rb; const UChar *name; int32_t length; + UErrorCode localStatus = U_ZERO_ERROR; /* check arguments */ if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { @@ -56,15 +57,17 @@ ucnv_getDisplayName(const UConverter *cnv, } /* use the internal name as the key */ - name=ures_getStringByKey(rb, cnv->sharedData->staticData->name, &length, pErrorCode); + name=ures_getStringByKey(rb, cnv->sharedData->staticData->name, &length, &localStatus); ures_close(rb); - if(U_SUCCESS(*pErrorCode)) { + if(U_SUCCESS(localStatus)) { /* copy the string */ + if (*pErrorCode == U_ZERO_ERROR) { + *pErrorCode = localStatus; + } u_memcpy(displayName, name, uprv_min(length, displayNameCapacity)*U_SIZEOF_UCHAR); } else { /* convert the internal name into a Unicode string */ - *pErrorCode=U_ZERO_ERROR; length=(int32_t)uprv_strlen(cnv->sharedData->staticData->name); u_charsToUChars(cnv->sharedData->staticData->name, displayName, uprv_min(length, displayNameCapacity)); } diff --git a/icuSources/common/ucnvhz.c b/icuSources/common/ucnvhz.c index 2178fa1e..b94811b8 100644 --- a/icuSources/common/ucnvhz.c +++ b/icuSources/common/ucnvhz.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnvhz.c @@ -53,10 +53,10 @@ typedef struct{ + UConverter* gbConverter; int32_t targetIndex; int32_t sourceIndex; UBool isEscapeAppended; - UConverter* gbConverter; UBool isStateDBCS; UBool isTargetUCharDBCS; }UConverterDataHZ; @@ -69,16 +69,11 @@ _HZOpen(UConverter *cnv, const char *name,const char *locale,uint32_t options, U cnv->fromUnicodeStatus= 0; cnv->mode=0; cnv->fromUChar32=0x0000; - cnv->extraInfo = uprv_malloc (sizeof (UConverterDataHZ)); + cnv->extraInfo = uprv_malloc(sizeof(UConverterDataHZ)); if(cnv->extraInfo != NULL){ + uprv_memset(cnv->extraInfo, 0, sizeof(UConverterDataHZ)); ((UConverterDataHZ*)cnv->extraInfo)->gbConverter = ucnv_open("ibm-1386",errorCode); - ((UConverterDataHZ*)cnv->extraInfo)->isStateDBCS = FALSE; - ((UConverterDataHZ*)cnv->extraInfo)->isEscapeAppended = FALSE; - ((UConverterDataHZ*)cnv->extraInfo)->targetIndex = 0; - ((UConverterDataHZ*)cnv->extraInfo)->sourceIndex = 0; - ((UConverterDataHZ*)cnv->extraInfo)->isTargetUCharDBCS = FALSE; } - /* test for NULL */ else { *errorCode = U_MEMORY_ALLOCATION_ERROR; return; @@ -148,7 +143,8 @@ UConverter_toUnicode_HZ_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UChar32 targetUniChar = 0x0000; UChar mySourceChar = 0x0000; UConverterDataHZ* myData=(UConverterDataHZ*)(args->converter->extraInfo); - + tempBuf[0]=0; + tempBuf[1]=0; if ((args->converter == NULL) || (args->targetLimit < args->target) || (mySourceLimit < args->source)){ *err = U_ILLEGAL_ARGUMENT_ERROR; return; @@ -261,9 +257,17 @@ SAVE_STATE: *err = U_ILLEGAL_CHAR_FOUND; } if(myData->isStateDBCS){ - args->converter->toUBytes[0] = (uint8_t)(tempBuf[0]-0x80); - args->converter->toUBytes[1] = (uint8_t)(tempBuf[1]-0x80); - args->converter->toULength=2; + /* this should never occur since isStateDBCS is set to true + * only after tempBuf[0] and tempBuf[1] + * are set to the input .. just to please BEAM + */ + if(tempBuf[0]==0 || tempBuf[1]==0){ + *err = U_INTERNAL_PROGRAM_ERROR; + }else{ + args->converter->toUBytes[0] = (uint8_t)(tempBuf[0]-0x80); + args->converter->toUBytes[1] = (uint8_t)(tempBuf[1]-0x80); + args->converter->toULength=2; + } } else{ args->converter->toUBytes[0] = (uint8_t)mySourceChar; @@ -295,11 +299,10 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, int32_t mySourceLength = (int32_t)(args->sourceLimit - args->source); int32_t length=0; uint32_t targetUniChar = 0x0000; - UChar32 mySourceChar = 0x0000,c=0x0000; + UChar32 mySourceChar = 0x0000; UConverterDataHZ *myConverterData=(UConverterDataHZ*)args->converter->extraInfo; UBool isTargetUCharDBCS = (UBool) myConverterData->isTargetUCharDBCS; UBool oldIsTargetUCharDBCS = isTargetUCharDBCS; - UBool isEscapeAppended =FALSE; int len =0; const char* escSeq=NULL; @@ -315,7 +318,7 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, targetUniChar = missingCharMarker; if (myTargetIndex < targetLength){ - c=mySourceChar = (UChar) mySource[mySourceIndex++]; + mySourceChar = (UChar) mySource[mySourceIndex++]; oldIsTargetUCharDBCS = isTargetUCharDBCS; @@ -344,13 +347,13 @@ UConverter_fromUnicode_HZ_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, len =ESC_LEN; escSeq = SB_ESCAPE; CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex); - myConverterData->isEscapeAppended =isEscapeAppended =TRUE; + myConverterData->isEscapeAppended = TRUE; } else{ /* Shifting from a single byte to double byte mode*/ len =ESC_LEN; escSeq = DB_ESCAPE; CONCAT_ESCAPE_MACRO(args, myTargetIndex, targetLength, escSeq,err,len,mySourceIndex); - myConverterData->isEscapeAppended =isEscapeAppended =TRUE; + myConverterData->isEscapeAppended = TRUE; } } @@ -457,20 +460,28 @@ _HZ_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *e *p++= UCNV_CLOSE_BRACE; convData->isTargetUCharDBCS=FALSE; } - *p++= cnv->subChar[0]; + *p++= (char)cnv->subChars[0]; ucnv_cbFromUWriteBytes(args, buffer, (int32_t)(p - buffer), offsetIndex, err); } -/* structure for SafeClone calculations */ +/* + * Structure for cloning an HZ converter into a single memory block. + * ucnv_safeClone() of the HZ converter will align the entire cloneHZStruct, + * and then ucnv_safeClone() of the sub-converter may additionally align + * subCnv inside the cloneHZStruct, for which we need the deadSpace after + * subCnv. This is because UAlignedMemory may be larger than the actually + * necessary alignment size for the platform. + * The other cloneHZStruct fields will not be moved around, + * and are aligned properly with cloneHZStruct's alignment. + */ struct cloneHZStruct { UConverter cnv; - UAlignedMemory deadSpace1; UConverter subCnv; - UAlignedMemory deadSpace2; + UAlignedMemory deadSpace; UConverterDataHZ mydata; }; @@ -494,14 +505,14 @@ _HZ_SafeClone(const UConverter *cnv, } localClone = (struct cloneHZStruct *)stackBuffer; - uprv_memcpy(&localClone->cnv, cnv, sizeof(UConverter)); + /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ uprv_memcpy(&localClone->mydata, cnv->extraInfo, sizeof(UConverterDataHZ)); localClone->cnv.extraInfo = &localClone->mydata; localClone->cnv.isExtraLocal = TRUE; /* deep-clone the sub-converter */ - size = (int32_t)sizeof(UConverter); + size = (int32_t)(sizeof(UConverter) + sizeof(UAlignedMemory)); /* include size of padding */ ((UConverterDataHZ*)localClone->cnv.extraInfo)->gbConverter = ucnv_safeClone(((UConverterDataHZ*)cnv->extraInfo)->gbConverter, &localClone->subCnv, &size, status); @@ -510,7 +521,7 @@ _HZ_SafeClone(const UConverter *cnv, static void _HZ_GetUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { /* the tilde '~' is hardcoded in the converter */ diff --git a/icuSources/common/ucnvisci.c b/icuSources/common/ucnvisci.c index dd3a0a92..84a2740f 100644 --- a/icuSources/common/ucnvisci.c +++ b/icuSources/common/ucnvisci.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ucnvisci.c @@ -70,28 +70,28 @@ typedef enum { /** - * Enumeration for switching code pages if + + * Enumeration for switching code pages if + * is encountered */ typedef enum { - DEF =0x40, - RMN =0x41, - DEV =0x42, - BNG =0x43, - TML =0x44, - TLG =0x45, - ASM =0x46, - ORI =0x47, - KND =0x48, - MLM =0x49, - GJR =0x4A, - PNJ =0x4B, - ARB =0x71, - PES =0x72, - URD =0x73, - SND =0x74, - KSM =0x75, - PST =0x76 + DEF = 0x40, + RMN = 0x41, + DEV = 0x42, + BNG = 0x43, + TML = 0x44, + TLG = 0x45, + ASM = 0x46, + ORI = 0x47, + KND = 0x48, + MLM = 0x49, + GJR = 0x4A, + PNJ = 0x4B, + ARB = 0x71, + PES = 0x72, + URD = 0x73, + SND = 0x74, + KSM = 0x75, + PST = 0x76 }ISCIILang; typedef enum{ @@ -116,10 +116,18 @@ typedef struct{ MaskEnum currentMaskToUnicode; /* mask for current state in toUnicode */ MaskEnum defMaskToUnicode; /* mask for default state in toUnicode */ UBool isFirstBuffer; /* boolean for fromUnicode to see if we need to announce the first script */ + UBool resetToDefaultToUnicode; /* boolean for reseting to default delta and mask when a newline is encountered*/ char name[30]; }UConverterDataISCII; -static const uint16_t lookupInitialData[][3]={ +typedef struct LookupDataStruct +{ + UniLang uniLang; + MaskEnum maskEnum; + ISCIILang isciiLang; +} LookupDataStruct; + +static const LookupDataStruct lookupInitialData[]={ { DEVANAGARI, DEV_MASK, DEV }, { BENGALI, BNG_MASK, BNG }, { GURMUKHI, PNJ_MASK, PNJ }, @@ -141,15 +149,16 @@ _ISCIIOpen(UConverter *cnv, const char *name,const char *locale,uint32_t options converterData->contextCharToUnicode=NO_CHAR_MARKER; cnv->toUnicodeStatus = missingCharMarker; converterData->contextCharFromUnicode=0x0000; + converterData->resetToDefaultToUnicode=FALSE; /* check if the version requested is supported */ if((options & UCNV_OPTIONS_VERSION_MASK) < 9){ /* initialize state variables */ converterData->currentDeltaFromUnicode=converterData->currentDeltaToUnicode= converterData->defDeltaToUnicode= - (uint16_t)(lookupInitialData[options & UCNV_OPTIONS_VERSION_MASK][0] * DELTA); + (uint16_t)(lookupInitialData[options & UCNV_OPTIONS_VERSION_MASK].uniLang * DELTA); converterData->currentMaskFromUnicode = converterData->currentMaskToUnicode = - converterData->defMaskToUnicode=lookupInitialData[options & UCNV_OPTIONS_VERSION_MASK][1]; + converterData->defMaskToUnicode=lookupInitialData[options & UCNV_OPTIONS_VERSION_MASK].maskEnum; converterData->isFirstBuffer=TRUE; uprv_strcpy(converterData->name,"ISCII,version="); @@ -198,9 +207,10 @@ _ISCIIReset(UConverter *cnv, UConverterResetChoice choice){ if(choice!=UCNV_RESET_TO_UNICODE) { cnv->fromUChar32=0x0000; data->contextCharFromUnicode=0x00; - data->currentMaskFromUnicode=data->defDeltaToUnicode; + data->currentMaskFromUnicode=data->defMaskToUnicode; data->currentDeltaFromUnicode=data->defDeltaToUnicode; data->isFirstBuffer=TRUE; + data->resetToDefaultToUnicode=FALSE; } } @@ -809,7 +819,6 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, int32_t* offsets = args->offsets; uint32_t targetByteUnit = 0x0000; UChar32 sourceChar = 0x0000; - UBool useFallback; UConverterDataISCII *converterData; uint16_t newDelta=0; uint16_t range = 0; @@ -821,7 +830,6 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, } /* initialize data */ converterData=(UConverterDataISCII*)args->converter->extraInfo; - useFallback = args->converter->useFallback; newDelta=converterData->currentDeltaFromUnicode; range = (uint16_t)(newDelta/DELTA); @@ -844,7 +852,7 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, } if(sourceChar == LF){ targetByteUnit = ATR<<8; - targetByteUnit += (uint8_t) lookupInitialData[range][2]; + targetByteUnit += (uint8_t) lookupInitialData[range].isciiLang; args->converter->fromUnicodeStatus=sourceChar; /* now append ATR and language code */ WRITE_TO_TARGET_FROM_U(args,offsets,source,target,targetLimit,targetByteUnit,err); @@ -890,7 +898,7 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, /* Now are we in the same block as the previous? */ if(newDelta!= converterData->currentDeltaFromUnicode || converterData->isFirstBuffer){ converterData->currentDeltaFromUnicode = newDelta; - converterData->currentMaskFromUnicode = lookupInitialData[range][1]; + converterData->currentMaskFromUnicode = lookupInitialData[range].maskEnum; deltaChanged =TRUE; converterData->isFirstBuffer=FALSE; } @@ -916,7 +924,7 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC (UConverterFromUnicodeArgs * args, */ uint16_t temp=0; temp =(uint16_t)(ATR<<8); - temp += (uint16_t)((uint8_t) lookupInitialData[range][2]); + temp += (uint16_t)((uint8_t) lookupInitialData[range].isciiLang); /* reset */ deltaChanged=FALSE; /* now append ATR and language code */ @@ -997,8 +1005,10 @@ static const int32_t lookupTable[][2]={ { BENGALI, BNG_MASK }, { ORIYA, ORI_MASK }, { KANNADA, KND_MASK }, + { MALAYALAM, MLM_MASK }, { GUJARATI, GJR_MASK }, - { GURMUKHI, PNJ_MASK }, + { GURMUKHI, PNJ_MASK } + }; #define WRITE_TO_TARGET_TO_U(args,source,target,offsets,offset,targetUniChar,delta, err){\ @@ -1099,7 +1109,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, data->currentDeltaToUnicode = (uint16_t)(lookupTable[sourceChar & 0x0F][0] * DELTA); data->currentMaskToUnicode = - lookupTable[sourceChar & 0x0F][1] ; + (MaskEnum)lookupTable[sourceChar & 0x0F][1] ; } else if(sourceChar==DEF){ /* switch back to default */ @@ -1200,6 +1210,14 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, *contextCharToUnicode = sourceChar; } break; + case 0x0A: + /* fall through */ + case 0x0D: + data->resetToDefaultToUnicode = TRUE; + GET_MAPPING(sourceChar,targetUniChar,data); + *contextCharToUnicode = sourceChar; + break; + case ISCII_NUKTA: /* handle soft halant */ if(*contextCharToUnicode == ISCII_HALANT){ @@ -1221,7 +1239,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, if(found){ /* find out if the mapping is valid in this state */ if(validityTable[(uint8_t)targetUniChar] & data->currentMaskToUnicode){ - targetUniChar += data->currentDeltaToUnicode ; + /*targetUniChar += data->currentDeltaToUnicode ;*/ *contextCharToUnicode= NO_CHAR_MARKER; *toUnicodeStatus = missingCharMarker; break; @@ -1248,6 +1266,11 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, if(targetUniChar != missingCharMarker ){ /* now save the targetUniChar for delayed write */ *toUnicodeStatus = (UChar) targetUniChar; + if(data->resetToDefaultToUnicode==TRUE){ + data->currentDeltaToUnicode = data->defDeltaToUnicode; + data->currentMaskToUnicode = data->defMaskToUnicode; + data->resetToDefaultToUnicode=FALSE; + } }else{ /* we reach here only if targetUniChar == missingCharMarker @@ -1321,7 +1344,7 @@ _ISCII_SafeClone(const UConverter *cnv, } localClone = (struct cloneISCIIStruct *)stackBuffer; - uprv_memcpy(&localClone->cnv, cnv, sizeof(UConverter)); + /* ucnv.c/ucnv_safeClone() copied the main UConverter already */ uprv_memcpy(&localClone->mydata, cnv->extraInfo, sizeof(UConverterDataISCII)); localClone->cnv.extraInfo = &localClone->mydata; @@ -1332,7 +1355,7 @@ _ISCII_SafeClone(const UConverter *cnv, static void _ISCIIGetUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { @@ -1343,7 +1366,7 @@ _ISCIIGetUnicodeSet(const UConverter *cnv, scripts, we add all roundtrippable characters to this set. */ sa->addRange(sa->set, 0, ASCII_END); for (script = DEVANAGARI; script <= MALAYALAM; script++) { - mask = (uint8_t)(lookupInitialData[script][1]); + mask = (uint8_t)(lookupInitialData[script].maskEnum); for (idx = 0; idx < DELTA; idx++) { if (validityTable[idx] & mask) { sa->add(sa->set, idx + (script * DELTA) + INDIC_BLOCK_BEGIN); diff --git a/icuSources/common/ucnvlat1.c b/icuSources/common/ucnvlat1.c index edb753e1..bbaece60 100644 --- a/icuSources/common/ucnvlat1.c +++ b/icuSources/common/ucnvlat1.c @@ -42,7 +42,7 @@ _Latin1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, /* set up the local pointers */ source=(const uint8_t *)pArgs->source; target=pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; sourceIndex=0; @@ -51,7 +51,7 @@ _Latin1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, * since the conversion here is 1:1 UChar:uint8_t, we need only one counter * for the minimum of the sourceLength and targetCapacity */ - length=(const uint8_t *)pArgs->sourceLimit-source; + length=(int32_t)((const uint8_t *)pArgs->sourceLimit-source); if(length<=targetCapacity) { targetCapacity=length; } else { @@ -163,7 +163,7 @@ _Latin1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, source=pArgs->source; sourceLimit=pArgs->sourceLimit; target=oldTarget=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; if(cnv->sharedData==&_Latin1Data) { @@ -182,7 +182,7 @@ _Latin1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, * since the conversion here is 1:1 UChar:uint8_t, we need only one counter * for the minimum of the sourceLength and targetCapacity */ - length=sourceLimit-source; + length=(int32_t)(sourceLimit-source); if(lengthaddRange(sa->set, 0, 0xff); @@ -396,7 +396,7 @@ _ASCIIToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, source=(const uint8_t *)pArgs->source; sourceLimit=(const uint8_t *)pArgs->sourceLimit; target=oldTarget=pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; /* sourceIndex=-1 if the current character began in the previous buffer */ @@ -406,7 +406,7 @@ _ASCIIToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, * since the conversion here is 1:1 UChar:uint8_t, we need only one counter * for the minimum of the sourceLength and targetCapacity */ - length=sourceLimit-source; + length=(int32_t)(sourceLimit-source); if(lengthaddRange(sa->set, 0, 0x7f); diff --git a/icuSources/common/ucnvmbcs.c b/icuSources/common/ucnvmbcs.c index 9f9c6f32..84bae8a9 100644 --- a/icuSources/common/ucnvmbcs.c +++ b/icuSources/common/ucnvmbcs.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -344,7 +344,7 @@ gb18030Ranges[13][4]={ static void _getUnicodeSetForBytes(const UConverterSharedData *sharedData, const int32_t (*stateTable)[256], const uint16_t *unicodeCodeUnits, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, uint8_t state, uint32_t offset, int32_t lowByte, int32_t highByte, @@ -421,7 +421,7 @@ _getUnicodeSetForBytes(const UConverterSharedData *sharedData, */ U_CFUNC void ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, uint8_t state, int32_t lowByte, int32_t highByte, UErrorCode *pErrorCode) { @@ -434,7 +434,7 @@ ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData, U_CFUNC void ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { const UConverterMBCSTable *mbcsTable; @@ -571,7 +571,7 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData, static void ucnv_MBCSGetUnicodeSet(const UConverter *cnv, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode) { if(cnv->options&_MBCS_OPTION_GB18030) { @@ -589,7 +589,7 @@ ucnv_MBCSGetUnicodeSet(const UConverter *cnv, * Definition of LINEAR macros and gb18030Ranges see near the beginning of the file. * * In the future, conversion extensions may handle m:n mappings and delta tables, - * see http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/conversion/conversion_extensions.html + * see http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/conversion/conversion_extensions.html * * If an input character cannot be mapped, then these functions set an error * code. The framework will then call the callback function. @@ -1411,7 +1411,7 @@ ucnv_MBCSSingleToBMPWithOffsets(UConverterToUnicodeArgs *pArgs, source=(const uint8_t *)pArgs->source; sourceLimit=(const uint8_t *)pArgs->sourceLimit; target=pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0) { @@ -1428,7 +1428,7 @@ ucnv_MBCSSingleToBMPWithOffsets(UConverterToUnicodeArgs *pArgs, * since the conversion here is 1:1 UChar:uint8_t, we need only one counter * for the minimum of the sourceLength and targetCapacity */ - length=sourceLimit-source; + length=(int32_t)(sourceLimit-source); if(lengthtargetLimit-target; - length=sourceLimit-source; + targetCapacity=(int32_t)(pArgs->targetLimit-target); + length=(int32_t)(sourceLimit-source); if(lengthsource; sourceLimit=pArgs->sourceLimit; target=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; table=cnv->sharedData->mbcs.fromUnicodeTable; @@ -2650,7 +2650,7 @@ unassigned: /* a mapping was written to the target, continue */ /* recalculate the targetCapacity after an extension mapping */ - targetCapacity=pArgs->targetLimit-(char *)target; + targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target); /* normal end of conversion: prepare for a new character */ sourceIndex=nextSourceIndex; @@ -2736,7 +2736,7 @@ ucnv_MBCSSingleFromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, source=pArgs->source; sourceLimit=pArgs->sourceLimit; target=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; table=cnv->sharedData->mbcs.fromUnicodeTable; @@ -2855,7 +2855,7 @@ unassigned: /* a mapping was written to the target, continue */ /* recalculate the targetCapacity after an extension mapping */ - targetCapacity=pArgs->targetLimit-(char *)target; + targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target); /* normal end of conversion: prepare for a new character */ sourceIndex=nextSourceIndex; @@ -2906,7 +2906,7 @@ ucnv_MBCSSingleFromBMPWithOffsets(UConverterFromUnicodeArgs *pArgs, source=pArgs->source; sourceLimit=pArgs->sourceLimit; target=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; table=cnv->sharedData->mbcs.fromUnicodeTable; @@ -2935,7 +2935,7 @@ ucnv_MBCSSingleFromBMPWithOffsets(UConverterFromUnicodeArgs *pArgs, * since the conversion here is 1:1 UChar:uint8_t, we need only one counter * for the minimum of the sourceLength and targetCapacity */ - length=sourceLimit-source; + length=(int32_t)(sourceLimit-source); if(lengthtargetLimit-(char *)target; - length=sourceLimit-source; + targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target); + length=(int32_t)(sourceLimit-source); if(lengthsource; sourceLimit=pArgs->sourceLimit; target=(uint8_t *)pArgs->target; - targetCapacity=pArgs->targetLimit-pArgs->target; + targetCapacity=(int32_t)(pArgs->targetLimit-pArgs->target); offsets=pArgs->offsets; table=cnv->sharedData->mbcs.fromUnicodeTable; @@ -3475,7 +3475,7 @@ unassigned: /* a mapping was written to the target, continue */ /* recalculate the targetCapacity after an extension mapping */ - targetCapacity=pArgs->targetLimit-(char *)target; + targetCapacity=(int32_t)(pArgs->targetLimit-(char *)target); /* normal end of conversion: prepare for a new character */ if(offsets!=NULL) { @@ -3877,7 +3877,7 @@ ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs, length=1; } else { /* select subChar in all other cases */ - subchar=(char *)cnv->subChar; + subchar=(char *)cnv->subChars; length=cnv->subCharLen; } diff --git a/icuSources/common/ucnvmbcs.h b/icuSources/common/ucnvmbcs.h index 4ac4358a..7a118311 100644 --- a/icuSources/common/ucnvmbcs.h +++ b/icuSources/common/ucnvmbcs.h @@ -373,7 +373,7 @@ ucnv_MBCSToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, */ U_CFUNC void ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, uint8_t state, int32_t lowByte, int32_t highByte, UErrorCode *pErrorCode); @@ -388,7 +388,7 @@ ucnv_MBCSGetUnicodeSetForBytes(const UConverterSharedData *sharedData, */ U_CFUNC void ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData, - USetAdder *sa, + const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); diff --git a/icuSources/common/ucnvscsu.c b/icuSources/common/ucnvscsu.c index 1211da7a..910a4920 100644 --- a/icuSources/common/ucnvscsu.c +++ b/icuSources/common/ucnvscsu.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -205,6 +205,10 @@ _SCSUOpen(UConverter *cnv, } else { *pErrorCode=U_MEMORY_ALLOCATION_ERROR; } + + /* Set the substitution character U+fffd as a Unicode string. */ + cnv->subUChars[0]=0xfffd; + cnv->subCharLen=-1; } static void @@ -1433,11 +1437,14 @@ outputBytes: * first to the overflow buffer what does not fit into the * regular target. */ - /* we know that 1<=targetCapacitycharErrorBuffer; switch(length) { /* each branch falls through to the next one */ + case 4: + *p++=(uint8_t)(c>>24); case 3: *p++=(uint8_t)(c>>16); case 2: @@ -1470,7 +1477,6 @@ outputBytes: *offsets++=sourceIndex; } default: - /* will never occur */ break; } @@ -1868,11 +1874,14 @@ outputBytes: * first to the overflow buffer what does not fit into the * regular target. */ - /* we know that 1<=targetCapacitycharErrorBuffer; switch(length) { /* each branch falls through to the next one */ + case 4: + *p++=(uint8_t)(c>>24); case 3: *p++=(uint8_t)(c>>16); case 2: @@ -1896,7 +1905,6 @@ outputBytes: case 1: *target++=(uint8_t)c; default: - /* will never occur */ break; } @@ -1922,30 +1930,6 @@ _SCSUGetName(const UConverter *cnv) { } } -static void -_SCSUWriteSub(UConverterFromUnicodeArgs *pArgs, - int32_t offsetIndex, - UErrorCode *pErrorCode) { - static const char squ_fffd[]={ (char)SQU, (char)0xffu, (char)0xfdu }; - - /* - * The substitution character is U+fffd={ ff, fd }. - * If the SCSU converter is in Unicode mode, then these two bytes just need to - * be written. Otherwise, this character is quoted. - */ - if(((SCSUData *)pArgs->converter->extraInfo)->fromUIsSingleByteMode) { - /* single-byte mode: quote Unicode */ - ucnv_cbFromUWriteBytes(pArgs, - squ_fffd, 3, - offsetIndex, pErrorCode); - } else { - /* Unicode mode: just write U+fffd */ - ucnv_cbFromUWriteBytes(pArgs, - squ_fffd+1, 2, - offsetIndex, pErrorCode); - } -} - /* structure for SafeClone calculations */ struct cloneSCSUStruct { @@ -2000,7 +1984,7 @@ static const UConverterImpl _SCSUImpl={ NULL, _SCSUGetName, - _SCSUWriteSub, + NULL, _SCSUSafeClone, ucnv_getCompleteUnicodeSet }; @@ -2008,14 +1992,12 @@ static const UConverterImpl _SCSUImpl={ static const UConverterStaticData _SCSUStaticData={ sizeof(UConverterStaticData), "SCSU", - 0, /* CCSID for SCSU */ + 1212, /* CCSID for SCSU */ UCNV_IBM, UCNV_SCSU, 1, 3, /* one UChar generates at least 1 byte and at most 3 bytes */ /* - * ### TODO the subchar really must be written by an SCSU function - * however, currently SCSU's fromUnicode() never causes errors, therefore - * no callbacks will be called and no subchars written - * See Jitterbug 2837 - RFE: forbid converting surrogate code points in all charsets + * The subchar here is ignored because _SCSUOpen() sets U+fffd as a Unicode + * substitution string. */ { 0x0e, 0xff, 0xfd, 0 }, 3, FALSE, FALSE, diff --git a/icuSources/common/ucol_swp.c b/icuSources/common/ucol_swp.c index 18e2c2ca..3b8ac14c 100644 --- a/icuSources/common/ucol_swp.c +++ b/icuSources/common/ucol_swp.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -16,17 +16,92 @@ * Swap collation binaries. */ -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - #include "unicode/udata.h" /* UDataInfo */ -#include "cmemory.h" #include "utrie.h" #include "udataswp.h" +#include "cmemory.h" #include "ucol_imp.h" #include "ucol_swp.h" +/* swapping ----------------------------------------------------------------- */ + +/* + * This performs data swapping for a folded trie (see utrie.c for details). + */ + +U_CAPI int32_t U_EXPORT2 +utrie_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode) { + const UTrieHeader *inTrie; + UTrieHeader trie; + int32_t size; + UBool dataIs32; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return 0; + } + if(ds==NULL || inData==NULL || (length>=0 && outData==NULL)) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + /* setup and swapping */ + if(length>=0 && lengthreadUInt32(inTrie->signature); + trie.options=ds->readUInt32(inTrie->options); + trie.indexLength=udata_readInt32(ds, inTrie->indexLength); + trie.dataLength=udata_readInt32(ds, inTrie->dataLength); + + if( trie.signature!=0x54726965 || + (trie.options&UTRIE_OPTIONS_SHIFT_MASK)!=UTRIE_SHIFT || + ((trie.options>>UTRIE_OPTIONS_INDEX_SHIFT)&UTRIE_OPTIONS_SHIFT_MASK)!=UTRIE_INDEX_SHIFT || + trie.indexLength=0) { + UTrieHeader *outTrie; + + if(lengthswapArray32(ds, inTrie, sizeof(UTrieHeader), outTrie, pErrorCode); + + /* swap the index and the data */ + if(dataIs32) { + ds->swapArray16(ds, inTrie+1, trie.indexLength*2, outTrie+1, pErrorCode); + ds->swapArray32(ds, (const uint16_t *)(inTrie+1)+trie.indexLength, trie.dataLength*4, + (uint16_t *)(outTrie+1)+trie.indexLength, pErrorCode); + } else { + ds->swapArray16(ds, inTrie+1, (trie.indexLength+trie.dataLength)*2, outTrie+1, pErrorCode); + } + } + + return size; +} + +#if !UCONFIG_NO_COLLATION + /* swap a header-less collation binary, inside a resource bundle or ucadata.icu */ U_CAPI int32_t U_EXPORT2 ucol_swapBinary(const UDataSwapper *ds, diff --git a/icuSources/common/udata.c b/icuSources/common/udata.c index 35936500..5ffd8507 100644 --- a/icuSources/common/udata.c +++ b/icuSources/common/udata.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -78,6 +78,7 @@ static UDataMemory *gStubICUData = NULL; /* If gCommonICUData does get upda static UHashtable *gCommonDataCache = NULL; /* Global hash table of opened ICU data files. */ +static UDataFileAccess gDataFileAccess = UDATA_DEFAULT_ACCESS; static UBool U_CALLCONV udata_cleanup(void) @@ -138,7 +139,6 @@ setCommonICUData(UDataMemory *pData, /* The new common data. Belongs to ca uprv_free(newCommonData); } umtx_unlock(NULL); - return; } static const char * @@ -193,7 +193,7 @@ typedef struct DataCacheElement { * udata cleanup function closes the hash table; hash table in turn calls back to * here for each entry. */ -static void U_EXPORT2 U_CALLCONV DataCacheElement_deleter(void *pDCEl) { +static void U_CALLCONV DataCacheElement_deleter(void *pDCEl) { DataCacheElement *p = (DataCacheElement *)pDCEl; udata_close(p->item); /* unmaps storage */ uprv_free(p->name); /* delete the hash key string. */ @@ -217,7 +217,7 @@ static UHashtable *udata_getHashTable() { return gCommonDataCache; } - tHT = uhash_open(uhash_hashChars, uhash_compareChars, &err); + tHT = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &err); uhash_setValueDeleter(tHT, DataCacheElement_deleter); umtx_lock(NULL); @@ -283,6 +283,7 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr } newElement->item = UDataMemory_createNewInstance(pErr); if (U_FAILURE(*pErr)) { + uprv_free(newElement); return NULL; } UDatamemory_assign(newElement->item, item); @@ -292,6 +293,8 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr newElement->name = uprv_malloc(nameLen+1); if (newElement->name == NULL) { *pErr = U_MEMORY_ALLOCATION_ERROR; + uprv_free(newElement->item); + uprv_free(newElement); return NULL; } uprv_strcpy(newElement->name, baseName); @@ -492,11 +495,6 @@ static void udata_pathiter_init(UDataPathIterator *iter, const char *path, const iter->basename = findBasename(item); iter->basenameLen = (int32_t)uprv_strlen(iter->basename); - if(iter->basename == NULL) { - iter->nextPath = NULL; - return; - } - /** Item path **/ iter->itemPath = iter->itemPathBuf; if(iter->basename == item) { @@ -534,7 +532,7 @@ static void udata_pathiter_init(UDataPathIterator *iter, const char *path, const * Get an upper bound of possible string size, and make sure that the buffer * is big enough (sum of length of each piece, 2 extra delimiters, + trailing NULL) */ { - int32_t maxPathLen = (int32_t)uprv_strlen(iter->path) + uprv_strlen(item) + uprv_strlen(iter->suffix) + iter->packageStubLen + 3; + int32_t maxPathLen = (int32_t)(uprv_strlen(iter->path) + uprv_strlen(item) + uprv_strlen(iter->suffix) + iter->packageStubLen + 3); iter->pathBuffer = iter->pathBufferA; if (maxPathLen >= U_DATA_PATHITER_BUFSIZ) { iter->pathBuffer = (char *)uprv_malloc(maxPathLen); @@ -566,20 +564,16 @@ static void udata_pathiter_init(UDataPathIterator *iter, const char *path, const * @param len If set, pointer to the length of the returned path, for convenience. * @return Pointer to the next path segment, or NULL if there are no more. */ -static const char *udata_pathiter_next(UDataPathIterator *iter, int32_t *outPathLen) +static const char *udata_pathiter_next(UDataPathIterator *iter) { const char *path = NULL; uint32_t pathLen = 0; const char *pathBasename; - if(outPathLen != NULL) { - *outPathLen = 0; - } - do { if( iter->nextPath == NULL ) { - return NULL; + break; } path = iter->nextPath; @@ -676,11 +670,6 @@ static const char *udata_pathiter_next(UDataPathIterator *iter, int32_t *outPath } - /* return value of path size */ - if( outPathLen ) { - *outPathLen = pathLen; - } - #ifdef UDATA_DEBUG fprintf(stderr, " --> %s\n", iter->pathBuffer); #endif @@ -706,6 +695,10 @@ static void udata_pathiter_dt(UDataPathIterator *iter) { uprv_free(iter->pathBuffer); iter->pathBuffer = NULL; } + if (iter->packageStub != iter->packageStubBuf) { + uprv_free(iter->packageStub); + iter->packageStub = NULL; + } } /* ==================================================================================*/ @@ -732,7 +725,7 @@ extern const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT; * * *----------------------------------------------------------------------*/ static UDataMemory * -openCommonData(const char *path, /* Path from OpenCHoice? */ +openCommonData(const char *path, /* Path from OpenChoice? */ UBool isICUData, /* ICU Data true if path == NULL */ UErrorCode *pErrorCode) { @@ -797,7 +790,7 @@ openCommonData(const char *path, /* Path from OpenCHoice? */ udata_pathiter_init(&iter, u_getDataDirectory(), inBasename, path, ".dat", TRUE); while((UDataMemory_isLoaded(&tData)==FALSE) && - (pathBuffer = udata_pathiter_next(&iter, NULL)) != NULL) + (pathBuffer = udata_pathiter_next(&iter)) != NULL) { #ifdef UDATA_DEBUG fprintf(stderr, "ocd: trying path %s - ", pathBuffer); @@ -1017,8 +1010,133 @@ checkDataItem return rDataMem; } +/** + * @return 0 if not loaded, 1 if loaded or err + */ +static UDataMemory *doLoadFromIndividualFiles(const char *pkgName, + const char *dataPath, const char *tocEntryPathSuffix, + /* following arguments are the same as doOpenChoice itself */ + const char *path, const char *type, const char *name, + UDataMemoryIsAcceptable *isAcceptable, void *context, + UErrorCode *subErrorCode, + UErrorCode *pErrorCode) +{ + UDataMemory *retVal = NULL; + const char *pathBuffer; + UDataMemory dataMemory; + UDataMemory *pEntryData; + + UDataPathIterator iter; + /* look in ind. files: package\nam.typ ========================= */ + /* init path iterator for individual files */ + udata_pathiter_init(&iter, dataPath, pkgName, path, tocEntryPathSuffix, FALSE); + + while((pathBuffer = udata_pathiter_next(&iter))) + { +#ifdef UDATA_DEBUG + fprintf(stderr, "UDATA: trying individual file %s\n", pathBuffer); +#endif + if(uprv_mapFile(&dataMemory, pathBuffer)) + { + pEntryData = checkDataItem(dataMemory.pHeader, isAcceptable, context, type, name, subErrorCode, pErrorCode); + if (pEntryData != NULL) { + /* Data is good. + * Hand off ownership of the backing memory to the user's UDataMemory. + * and return it. */ + pEntryData->mapAddr = dataMemory.mapAddr; + pEntryData->map = dataMemory.map; + +#ifdef UDATA_DEBUG + fprintf(stderr, "** Mapped file: %s\n", pathBuffer); +#endif + retVal = pEntryData; + goto commonReturn; + } + + /* the data is not acceptable, or some error occured. Either way, unmap the memory */ + udata_close(&dataMemory); + + /* If we had a nasty error, bail out completely. */ + if (U_FAILURE(*pErrorCode)) { + retVal = NULL; + goto commonReturn; + } + + /* Otherwise remember that we found data but didn't like it for some reason */ + *subErrorCode=U_INVALID_FORMAT_ERROR; + } +#ifdef UDATA_DEBUG + fprintf(stderr, "%s\n", UDataMemory_isLoaded(&dataMemory)?"LOADED":"not loaded"); +#endif + } +commonReturn: + udata_pathiter_dt(&iter); + return retVal; +} + +/** + * @return 0 if not loaded, 1 if loaded or err + */ +static UDataMemory *doLoadFromCommonData(UBool isICUData, const char *pkgName, + const char *dataPath, const char *tocEntryPathSuffix, const char *tocEntryName, + /* following arguments are the same as doOpenChoice itself */ + const char *path, const char *type, const char *name, + UDataMemoryIsAcceptable *isAcceptable, void *context, + UErrorCode *subErrorCode, + UErrorCode *pErrorCode) +{ + UDataMemory *retVal = NULL; + UDataMemory *pEntryData; + const DataHeader *pHeader; + UDataMemory *pCommonData; + /* try to get common data. The loop is for platforms such as the 390 that do + * not initially load the full set of ICU data. If the lookup of an ICU data item + * fails, the full (but slower to load) set is loaded, the and the loop repeats, + * trying the lookup again. Once the full set of ICU data is loaded, the loop wont + * repeat because the full set will be checked the first time through. + * + * The loop also handles the fallback to a .dat file if the application linked + * to the stub data library rather than a real library. + */ + for (;;) { + pCommonData=openCommonData(path, isICUData, subErrorCode); /** search for pkg **/ + + if(U_SUCCESS(*subErrorCode)) { + int32_t length; + + /* look up the data piece in the common data */ + pHeader=pCommonData->vFuncs->Lookup(pCommonData, tocEntryName, &length, subErrorCode); +#ifdef UDATA_DEBUG + fprintf(stderr, "%s: pHeader=%p - %s\n", tocEntryName, pHeader, u_errorName(*subErrorCode)); +#endif + if(pHeader!=NULL) { + pEntryData = checkDataItem(pHeader, isAcceptable, context, type, name, subErrorCode, pErrorCode); +#ifdef UDATA_DEBUG + fprintf(stderr, "pEntryData=%p\n", pEntryData); +#endif + if (U_FAILURE(*pErrorCode)) { + retVal = NULL; + goto commonReturn; + } + if (pEntryData != NULL) { + pEntryData->length = length; + retVal = pEntryData; + goto commonReturn; + } + } + } + /* Data wasn't found. If we were looking for an ICUData item and there is + * more data available, load it and try again, + * otherwise break out of this loop. */ + if (!(isICUData && pCommonData && extendICUData(pCommonData, subErrorCode))) { + break; + } + } +commonReturn: + return retVal; +} /* * A note on the ownership of Mapped Memory @@ -1058,46 +1176,37 @@ doOpenChoice(const char *path, const char *type, const char *name, UErrorCode *pErrorCode) { UDataMemory *retVal = NULL; - - const char *pathBuffer; - + TinyString tocEntryName; /* entry name in tree format. ex: 'icudt28b/coll/ar.res' */ TinyString tocEntryPath; /* entry name in path format. ex: 'icudt28b\\coll\\ar.res' */ - TinyString oldIndFileName; /* ex: icudt28b_ar.res */ - TinyString oldStylePath; - TinyString oldStylePathBasename; TinyString pkgName; TinyString treeName; -#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) +#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) /* '/' vs '\' */ TinyString altSepPath; #endif const char *dataPath; - const char *tocEntrySuffix; int32_t tocEntrySuffixIndex; const char *tocEntryPathSuffix; - UDataMemory dataMemory; - UDataMemory *pCommonData; - UDataMemory *pEntryData; - const DataHeader *pHeader; - const char *inBasename; - UErrorCode errorCode=U_ZERO_ERROR; + UErrorCode subErrorCode=U_ZERO_ERROR; const char *treeChar; UBool isICUData = FALSE; + + /* Is this path ICU data? */ if(path == NULL || - !strcmp(path, U_ICUDATA_ALIAS) || - !uprv_strncmp(path, U_ICUDATA_NAME U_TREE_SEPARATOR_STRING, - uprv_strlen(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING)) || - !uprv_strncmp(path, U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING, + !strcmp(path, U_ICUDATA_ALIAS) || /* "ICUDATA" */ + !uprv_strncmp(path, U_ICUDATA_NAME U_TREE_SEPARATOR_STRING, /* "icudt26e-" */ + uprv_strlen(U_ICUDATA_NAME U_TREE_SEPARATOR_STRING)) || + !uprv_strncmp(path, U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING, /* "ICUDATA-" */ uprv_strlen(U_ICUDATA_ALIAS U_TREE_SEPARATOR_STRING))) { isICUData = TRUE; } -#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) +#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) /* Windows: try "foo\bar" and "foo/bar" */ /* remap from alternate path char to the main one */ TinyString_init(&altSepPath); if(path) { @@ -1115,16 +1224,13 @@ doOpenChoice(const char *path, const char *type, const char *name, } #endif - TinyString_init(&oldIndFileName); TinyString_init(&tocEntryName); TinyString_init(&tocEntryPath); - TinyString_init(&oldStylePath); - TinyString_init(&oldStylePathBasename); TinyString_init(&pkgName); TinyString_init(&treeName); - + /* ======= Set up strings */ if(path==NULL) { TinyString_append(&pkgName, U_ICUDATA_NAME); } else { @@ -1143,16 +1249,23 @@ doOpenChoice(const char *path, const char *type, const char *name, treeChar = uprv_strchr(path, U_TREE_SEPARATOR); if(treeChar) { TinyString_append(&treeName, treeChar+1); /* following '-' */ - if(!isICUData) { - TinyString_appendn(&pkgName, path, (int32_t)(treeChar-path)); - } else { + if(isICUData) { TinyString_append(&pkgName, U_ICUDATA_NAME); + } else { + TinyString_appendn(&pkgName, path, (int32_t)(treeChar-path)); + if (first == NULL) { + /* + This user data has no path, but there is a tree name. + Look up the correct path from the data cache later. + */ + path = pkgName.s; + } } } else { - if(!isICUData) { - TinyString_append(&pkgName, path); - } else { + if(isICUData) { TinyString_append(&pkgName, U_ICUDATA_NAME); + } else { + TinyString_append(&pkgName, path); } } } @@ -1162,14 +1275,14 @@ doOpenChoice(const char *path, const char *type, const char *name, fprintf(stderr, " P=%s T=%s\n", pkgName.s, treeName.s); #endif - /* Make up a full name by appending the type to the supplied + /* setting up the entry name and file name + * Make up a full name by appending the type to the supplied * name, assuming that a type was supplied. */ /* prepend the package */ TinyString_append(&tocEntryName, pkgName.s); TinyString_append(&tocEntryPath, pkgName.s); - TinyString_append(&oldIndFileName, pkgName.s); tocEntrySuffixIndex = tocEntryName.length; if(treeName.s[0]) { @@ -1180,10 +1293,8 @@ doOpenChoice(const char *path, const char *type, const char *name, TinyString_append(&tocEntryPath, treeName.s); } - TinyString_append(&oldIndFileName, "_"); TinyString_append(&tocEntryName, U_TREE_ENTRY_SEP_STRING); TinyString_append(&tocEntryPath, U_FILE_SEP_STRING); - TinyString_append(&oldIndFileName, name); TinyString_append(&tocEntryName, name); TinyString_append(&tocEntryPath, name); if(type!=NULL && *type!=0) { @@ -1191,30 +1302,16 @@ doOpenChoice(const char *path, const char *type, const char *name, TinyString_append(&tocEntryName, type); TinyString_append(&tocEntryPath, "."); TinyString_append(&tocEntryPath, type); - TinyString_append(&oldIndFileName, "."); - TinyString_append(&oldIndFileName, type); } - tocEntrySuffix = tocEntryName.s+tocEntrySuffixIndex; /* suffix starts here */ tocEntryPathSuffix = tocEntryPath.s+tocEntrySuffixIndex; /* suffix starts here */ #ifdef UDATA_DEBUG fprintf(stderr, " tocEntryName = %s\n", tocEntryName.s); fprintf(stderr, " tocEntryPath = %s\n", tocEntryName.s); - fprintf(stderr, " oldIndFileName = %s\n", oldIndFileName.s); #endif - - /* the data was not found in the common data, look further, */ - /* try to get an individual data file */ if(path == NULL) { - path = COMMON_DATA_NAME; - inBasename = COMMON_DATA_NAME; - } else { - if(isICUData) { - inBasename=COMMON_DATA_NAME; - } else { - inBasename=findBasename(path); - } + path = COMMON_DATA_NAME; /* "icudt26e" */ } /************************ Begin loop looking for ind. files ***************/ @@ -1222,206 +1319,82 @@ doOpenChoice(const char *path, const char *type, const char *name, fprintf(stderr, "IND: inBasename = %s, pkg=%s\n", inBasename, packageNameFromPath(path)); #endif - /* Deal with a null basename */ - if( (*inBasename==0) && (uprv_strlen(path) > 3) ) { - /* the purpose of this exercise is to turn /tmp/foo/bar/ into - path= /tmp/foo/bar/bar and basename= bar - (i.e. /tmp/foo/bar/bar.dat or /tmp/foo/bar/bar_en_US.res ) - */ - - char *rightSlash; - TinyString_append(&oldStylePath, path); - /* chop off trailing slash */ - oldStylePath.length--; - oldStylePath.s[oldStylePath.length] = 0; - - rightSlash = (char*)uprv_strrchr(oldStylePath.s, U_FILE_SEP_CHAR); - if(rightSlash != NULL) { - rightSlash++; - TinyString_append(&oldStylePathBasename, rightSlash); - inBasename = oldStylePathBasename.s; - TinyString_append(&oldStylePath, U_FILE_SEP_STRING); - TinyString_append(&oldStylePath, inBasename); /* one more time, for the base name */ - path = oldStylePath.s; - } else { - *pErrorCode = U_FILE_ACCESS_ERROR; /* hopelessly bad case */ - retVal = NULL; - goto commonReturn; - } - } /* End of dealing with a null basename */ - dataPath = u_getDataDirectory(); - /* Check to make sure that there is a dataPath to iterate over */ - if ((dataPath && *dataPath) || !isICUData) { - UDataPathIterator iter; - /* #1a look in ind. files: package\nam.typ ========================= */ - /* init path iterator for individual files */ - udata_pathiter_init(&iter, dataPath, pkgName.s, path, tocEntryPathSuffix, FALSE); - - while((pathBuffer = udata_pathiter_next(&iter, NULL))) - { -#ifdef UDATA_DEBUG - fprintf(stderr, "UDATA: trying individual file %s\n", pathBuffer); -#endif - if( uprv_mapFile(&dataMemory, pathBuffer) || - (inBasename!=pathBuffer && uprv_mapFile(&dataMemory, inBasename))) - { - pEntryData = checkDataItem(dataMemory.pHeader, isAcceptable, context, type, name, &errorCode, pErrorCode); - if (pEntryData != NULL) { - /* Data is good. - * Hand off ownership of the backing memory to the user's UDataMemory. - * and return it. */ - pEntryData->mapAddr = dataMemory.mapAddr; - pEntryData->map = dataMemory.map; - -#ifdef UDATA_DEBUG - fprintf(stderr, "** Mapped file: %s\n", pathBuffer); -#endif - udata_pathiter_dt(&iter); - retVal = pEntryData; - goto commonReturn; - } - - /* the data is not acceptable, or some error occured. Either way, unmap the memory */ - udata_close(&dataMemory); - - /* If we had a nasty error, bail out completely. */ - if (U_FAILURE(*pErrorCode)) { - udata_pathiter_dt(&iter); - retVal = NULL; - goto commonReturn; - } - - /* Otherwise remember that we found data but didn't like it for some reason */ - errorCode=U_INVALID_FORMAT_ERROR; - } + /**** COMMON PACKAGE - only if packages are first. */ + if(gDataFileAccess == UDATA_PACKAGES_FIRST) { #ifdef UDATA_DEBUG - fprintf(stderr, "%s\n", UDataMemory_isLoaded(&dataMemory)?"LOADED":"not loaded"); + fprintf(stderr, "Trying packages (UDATA_PACKAGES_FIRST)\n"); #endif + /* #2 */ + retVal = doLoadFromCommonData(isICUData, + pkgName.s, dataPath, tocEntryPathSuffix, tocEntryName.s, + path, type, name, isAcceptable, context, &subErrorCode, pErrorCode); + if((retVal != NULL) || U_FAILURE(*pErrorCode)) { + goto commonReturn; } - udata_pathiter_dt(&iter); - - /* #1b look in ind. files - with old naming (package_nam.typ not package\nam.typ) ==================== */ - /* init path iterator for individual files */ - udata_pathiter_init(&iter, dataPath, "", path, oldIndFileName.s, FALSE); - - while((pathBuffer = udata_pathiter_next(&iter, NULL))) - { -#ifdef UDATA_DEBUG - fprintf(stderr, "UDATA: trying individual file %s\n", pathBuffer); -#endif - if( uprv_mapFile(&dataMemory, pathBuffer) || - (inBasename!=pathBuffer && uprv_mapFile(&dataMemory, inBasename))) - { - pEntryData = checkDataItem(dataMemory.pHeader, isAcceptable, context, type, name, &errorCode, pErrorCode); - if (pEntryData != NULL) { - /* Data is good. - * Hand off ownership of the backing memory to the user's UDataMemory. - * and return it. */ - pEntryData->mapAddr = dataMemory.mapAddr; - pEntryData->map = dataMemory.map; - + } + + /**** INDIVIDUAL FILES */ + if((gDataFileAccess==UDATA_PACKAGES_FIRST) || + (gDataFileAccess==UDATA_FILES_FIRST)) { #ifdef UDATA_DEBUG - fprintf(stderr, "** Mapped file: %s\n", pathBuffer); + fprintf(stderr, "Trying individual files\n"); #endif - udata_pathiter_dt(&iter); - retVal = pEntryData; - goto commonReturn; - } - - /* the data is not acceptable, or some error occured. Either way, unmap the memory */ - udata_close(&dataMemory); - - /* If we had a nasty error, bail out completely. */ - if (U_FAILURE(*pErrorCode)) { - udata_pathiter_dt(&iter); - retVal = NULL; - goto commonReturn; - } - - /* Otherwise remember that we found data but didn't like it for some reason */ - errorCode=U_INVALID_FORMAT_ERROR; + /* Check to make sure that there is a dataPath to iterate over */ + if ((dataPath && *dataPath) || !isICUData) { + retVal = doLoadFromIndividualFiles(pkgName.s, dataPath, tocEntryPathSuffix, + path, type, name, isAcceptable, context, &subErrorCode, pErrorCode); + if((retVal != NULL) || U_FAILURE(*pErrorCode)) { + goto commonReturn; } -#ifdef UDATA_DEBUG - fprintf(stderr, "%s\n", UDataMemory_isLoaded(&dataMemory)?"LOADED":"not loaded"); -#endif } - udata_pathiter_dt(&iter); } - /* #2 */ - - /* try to get common data. The loop is for platforms such as the 390 that do - * not initially load the full set of ICU data. If the lookup of an ICU data item - * fails, the full (but slower to load) set is loaded, the and the loop repeats, - * trying the lookup again. Once the full set of ICU data is loaded, the loop wont - * repeat because the full set will be checked the first time through. - * - * The loop also handles the fallback to a .dat file if the application linked - * to the stub data library rather than a real library. - */ - for (;;) { - pCommonData=openCommonData(path, isICUData, &errorCode); /** search for pkg **/ - - if(U_SUCCESS(errorCode)) { - int32_t length; - - /* look up the data piece in the common data */ - pHeader=pCommonData->vFuncs->Lookup(pCommonData, tocEntryName.s, &length, &errorCode); + /**** COMMON PACKAGE */ + if((gDataFileAccess==UDATA_ONLY_PACKAGES) || + (gDataFileAccess==UDATA_FILES_FIRST)) { #ifdef UDATA_DEBUG - fprintf(stderr, "%s: pHeader=%p - %s\n", tocEntryName.s, pHeader, u_errorName(errorCode)); + fprintf(stderr, "Trying packages (UDATA_ONLY_PACKAGES || UDATA_FILES_FIRST)\n"); #endif - if((pHeader == NULL) && !U_FAILURE(errorCode)) { - pHeader=pCommonData->vFuncs->Lookup(pCommonData, oldIndFileName.s, /* oldIndFileName is preceded by a slash */ - &length, &errorCode); -#ifdef UDATA_DEBUG - fprintf(stderr, "[OLD name] %s: pHeader=%p - %s\n", oldIndFileName.s, pHeader, u_errorName(errorCode)); -#endif - } - - if(pHeader!=NULL) { - pEntryData = checkDataItem(pHeader, isAcceptable, context, type, name, &errorCode, pErrorCode); + retVal = doLoadFromCommonData(isICUData, + pkgName.s, dataPath, tocEntryPathSuffix, tocEntryName.s, + path, type, name, isAcceptable, context, &subErrorCode, pErrorCode); + if((retVal != NULL) || U_FAILURE(*pErrorCode)) { + goto commonReturn; + } + } + + /* Load from DLL. If we haven't attempted package load, we also haven't had any chance to + try a DLL (static or setCommonData/etc) load. + If we ever have a "UDATA_ONLY_FILES", add it to the or list here. */ + if(gDataFileAccess==UDATA_NO_FILES) { #ifdef UDATA_DEBUG - fprintf(stderr, "pEntryData=%p\n", pEntryData); + fprintf(stderr, "Trying common data (UDATA_NO_FILES)\n"); #endif - if (U_FAILURE(*pErrorCode)) { - retVal = NULL; - goto commonReturn; - } - if (pEntryData != NULL) { - pEntryData->length = length; - retVal = pEntryData; - goto commonReturn; - } - } - } - /* Data wasn't found. If we were looking for an ICUData item and there is - * more data available, load it and try again, - * otherwise break out of this loop. */ - if (!(isICUData && pCommonData && extendICUData(pCommonData, &errorCode))) { - break; + retVal = doLoadFromCommonData(isICUData, + pkgName.s, "", tocEntryPathSuffix, tocEntryName.s, + path, type, name, isAcceptable, context, &subErrorCode, pErrorCode); + if((retVal != NULL) || U_FAILURE(*pErrorCode)) { + goto commonReturn; } } /* data not found */ if(U_SUCCESS(*pErrorCode)) { - if(U_SUCCESS(errorCode)) { + if(U_SUCCESS(subErrorCode)) { /* file not found */ *pErrorCode=U_FILE_ACCESS_ERROR; } else { /* entry point not found or rejected */ - *pErrorCode=errorCode; + *pErrorCode=subErrorCode; } } commonReturn: TinyString_dt(&tocEntryName); TinyString_dt(&tocEntryPath); - TinyString_dt(&oldIndFileName); - TinyString_dt(&oldStylePath); - TinyString_dt(&oldStylePathBasename); TinyString_dt(&pkgName); TinyString_dt(&treeName); #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) @@ -1494,3 +1467,10 @@ udata_getInfo(UDataMemory *pData, UDataInfo *pInfo) { } } } + + +U_CAPI void U_EXPORT2 udata_setFileAccess(UDataFileAccess access, UErrorCode *status) +{ + gDataFileAccess = access; +} + diff --git a/icuSources/common/udataswp.h b/icuSources/common/udataswp.h index e62faec8..52b99aaa 100644 --- a/icuSources/common/udataswp.h +++ b/icuSources/common/udataswp.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003, International Business Machines +* Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -82,7 +82,7 @@ typedef struct UDataSwapper UDataSwapper; * @return The actual length of the data. * * @see UDataSwapper - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef int32_t U_CALLCONV UDataSwapFn(const UDataSwapper *ds, @@ -91,28 +91,28 @@ UDataSwapFn(const UDataSwapper *ds, /** * Convert one uint16_t from input to platform endianness. - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef uint16_t U_CALLCONV UDataReadUInt16(uint16_t x); /** * Convert one uint32_t from input to platform endianness. - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef uint32_t U_CALLCONV UDataReadUInt32(uint32_t x); /** * Convert one uint16_t from platform to input endianness. - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef void U_CALLCONV UDataWriteUInt16(uint16_t *p, uint16_t x); /** * Convert one uint32_t from platform to input endianness. - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef void U_CALLCONV UDataWriteUInt32(uint32_t *p, uint32_t x); @@ -125,7 +125,7 @@ UDataWriteUInt32(uint32_t *p, uint32_t x); * according to the output charset. * You can use -1 for the length parameters of NUL-terminated strings as usual. * Returns Unicode code point order for invariant characters. - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef int32_t U_CALLCONV UDataCompareInvChars(const UDataSwapper *ds, @@ -141,53 +141,53 @@ UDataCompareInvChars(const UDataSwapper *ds, * @param fmt The format string. * @param args The arguments for format string inserts. * - * @draft ICU 2.8 + * @internal ICU 2.8 */ typedef void U_CALLCONV UDataPrintError(void *context, const char *fmt, va_list args); struct UDataSwapper { - /** Input endianness. @draft ICU 2.8 */ + /** Input endianness. @internal ICU 2.8 */ UBool inIsBigEndian; - /** Input charset family. @see U_CHARSET_FAMILY @draft ICU 2.8 */ + /** Input charset family. @see U_CHARSET_FAMILY @internal ICU 2.8 */ uint8_t inCharset; - /** Output endianness. @draft ICU 2.8 */ + /** Output endianness. @internal ICU 2.8 */ UBool outIsBigEndian; - /** Output charset family. @see U_CHARSET_FAMILY @draft ICU 2.8 */ + /** Output charset family. @see U_CHARSET_FAMILY @internal ICU 2.8 */ uint8_t outCharset; /* basic functions for reading data values */ - /** Convert one uint16_t from input to platform endianness. @draft ICU 2.8 */ + /** Convert one uint16_t from input to platform endianness. @internal ICU 2.8 */ UDataReadUInt16 *readUInt16; - /** Convert one uint32_t from input to platform endianness. @draft ICU 2.8 */ + /** Convert one uint32_t from input to platform endianness. @internal ICU 2.8 */ UDataReadUInt32 *readUInt32; - /** Compare an invariant-character output string with a local one. @draft ICU 2.8 */ + /** Compare an invariant-character output string with a local one. @internal ICU 2.8 */ UDataCompareInvChars *compareInvChars; /* basic functions for writing data values */ - /** Convert one uint16_t from platform to input endianness. @draft ICU 2.8 */ + /** Convert one uint16_t from platform to input endianness. @internal ICU 2.8 */ UDataWriteUInt16 *writeUInt16; - /** Convert one uint32_t from platform to input endianness. @draft ICU 2.8 */ + /** Convert one uint32_t from platform to input endianness. @internal ICU 2.8 */ UDataWriteUInt32 *writeUInt32; /* basic functions for data transformations */ - /** Transform an array of 16-bit integers. @draft ICU 2.8 */ + /** Transform an array of 16-bit integers. @internal ICU 2.8 */ UDataSwapFn *swapArray16; - /** Transform an array of 32-bit integers. @draft ICU 2.8 */ + /** Transform an array of 32-bit integers. @internal ICU 2.8 */ UDataSwapFn *swapArray32; - /** Transform an invariant-character string. @draft ICU 2.8 */ + /** Transform an invariant-character string. @internal ICU 2.8 */ UDataSwapFn *swapInvChars; /** * Function for message output when an error occurs during data swapping. * Can be NULL. - * @draft ICU 2.8 + * @internal ICU 2.8 */ UDataPrintError *printError; - /** Context pointer for printError. @draft ICU 2.8 */ + /** Context pointer for printError. @internal ICU 2.8 */ void *printErrorContext; }; @@ -205,7 +205,7 @@ udata_openSwapper(UBool inIsBigEndian, uint8_t inCharset, * characteristics. * * @see udata_swap - * @draft ICU 2.8 + * @internal ICU 2.8 */ U_CAPI UDataSwapper * U_EXPORT2 udata_openSwapperForInputData(const void *data, int32_t length, @@ -222,7 +222,7 @@ udata_closeSwapper(UDataSwapper *ds); * * @return The size of the data header, in bytes. * - * @draft ICU 2.8 + * @internal ICU 2.8 */ U_CAPI int32_t U_EXPORT2 udata_swapDataHeader(const UDataSwapper *ds, @@ -231,14 +231,14 @@ udata_swapDataHeader(const UDataSwapper *ds, /** * Convert one int16_t from input to platform endianness. - * @draft ICU 2.8 + * @internal ICU 2.8 */ U_CAPI int16_t U_EXPORT2 udata_readInt16(const UDataSwapper *ds, int16_t x); /** * Convert one int32_t from input to platform endianness. - * @draft ICU 2.8 + * @internal ICU 2.8 */ U_CAPI int32_t U_EXPORT2 udata_readInt32(const UDataSwapper *ds, int32_t x); @@ -266,7 +266,7 @@ udata_printError(const UDataSwapper *ds, * Swap invariant char * strings ASCII->EBCDIC. * @internal */ -U_CFUNC int32_t +U_CAPI int32_t U_EXPORT2 uprv_ebcdicFromAscii(const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode); @@ -335,7 +335,7 @@ uprv_compareInvEbcdic(const UDataSwapper *ds, * * @param isAcceptable Same as for udata_openChoice(). May be NULL. * - * @draft ICU 2.8 + * @internal ICU 2.8 */ U_CAPI UDataMemory * U_EXPORT2 udata_openSwap(const char *path, const char *type, const char *name, diff --git a/icuSources/common/uenumimp.h b/icuSources/common/uenumimp.h index 2c5cc3ac..664bc686 100644 --- a/icuSources/common/uenumimp.h +++ b/icuSources/common/uenumimp.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -58,13 +58,14 @@ UEnumCount(UEnumeration *en, UErrorCode *status); /** * Function type declaration for uenum_unext(). * - * This function should return the next element - * as a UChar * + * This function returns the next element as a UChar *, + * or NULL after all elements haven been enumerated. * * @param en enumeration * @param resultLength pointer to result length * @param status pointer to UErrorCode variable - * @return next element as UChar * + * @return next element as UChar *, + * or NULL after all elements haven been enumerated */ typedef const UChar* U_CALLCONV UEnumUNext(UEnumeration* en, @@ -74,13 +75,14 @@ UEnumUNext(UEnumeration* en, /** * Function type declaration for uenum_next(). * - * This function should return the next element - * as a char * + * This function returns the next element as a char *, + * or NULL after all elements haven been enumerated. * * @param en enumeration * @param resultLength pointer to result length * @param status pointer to UErrorCode variable - * @return next element as char * + * @return next element as char *, + * or NULL after all elements haven been enumerated */ typedef const char* U_CALLCONV UEnumNext(UEnumeration* en, diff --git a/icuSources/common/uhash.c b/icuSources/common/uhash.c index 7ba8b459..7907205d 100644 --- a/icuSources/common/uhash.c +++ b/icuSources/common/uhash.c @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -83,6 +83,7 @@ static const int32_t PRIMES[] = { }; #define PRIMES_LENGTH (sizeof(PRIMES) / sizeof(PRIMES[0])) +#define DEFAULT_PRIME_INDEX 3 /* These ratios are tuned to the PRIMES array such that a resize * places the table back into the zone of non-resizing. That is, @@ -132,805 +133,858 @@ static const float RESIZE_POLICY_RATIO_TABLE[6] = { #define HINT_VALUE_POINTER (2) /******************************************************************** - * Debugging + * PRIVATE Implementation ********************************************************************/ +static UHashTok +_uhash_setElement(UHashtable *hash, UHashElement* e, + int32_t hashcode, + UHashTok key, UHashTok value, int8_t hint) { -/******************************************************************** - * PRIVATE Prototypes - ********************************************************************/ - -static UHashtable* _uhash_create(UHashFunction *keyHash, UKeyComparator *keyComp, - int32_t primeIndex, UErrorCode *status); + UHashTok oldValue = e->value; + if (hash->keyDeleter != NULL && e->key.pointer != NULL && + e->key.pointer != key.pointer) { /* Avoid double deletion */ + (*hash->keyDeleter)(e->key.pointer); + } + if (hash->valueDeleter != NULL) { + if (oldValue.pointer != NULL && + oldValue.pointer != value.pointer) { /* Avoid double deletion */ + (*hash->valueDeleter)(oldValue.pointer); + } + oldValue.pointer = NULL; + } + /* Compilers should copy the UHashTok union correctly, but even if + * they do, memory heap tools (e.g. BoundsChecker) can get + * confused when a pointer is cloaked in a union and then copied. + * TO ALLEVIATE THIS, we use hints (based on what API the user is + * calling) to copy pointers when we know the user thinks + * something is a pointer. */ + if (hint & HINT_KEY_POINTER) { + e->key.pointer = key.pointer; + } else { + e->key = key; + } + if (hint & HINT_VALUE_POINTER) { + e->value.pointer = value.pointer; + } else { + e->value = value; + } + e->hashcode = hashcode; + return oldValue; +} -static void _uhash_allocate(UHashtable *hash, int32_t primeIndex, - UErrorCode *status); +/** + * Assumes that the given element is not empty or deleted. + */ +static UHashTok +_uhash_internalRemoveElement(UHashtable *hash, UHashElement* e) { + UHashTok empty; + U_ASSERT(!IS_EMPTY_OR_DELETED(e->hashcode)); + --hash->count; + empty.pointer = NULL; empty.integer = 0; + return _uhash_setElement(hash, e, HASH_DELETED, empty, empty, 0); +} -static void _uhash_rehash(UHashtable *hash); +static void +_uhash_internalSetResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { + U_ASSERT(hash != NULL); + U_ASSERT(((int32_t)policy) >= 0); + U_ASSERT(((int32_t)policy) < 3); + hash->lowWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2]; + hash->highWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2 + 1]; +} -static UHashElement* _uhash_find(const UHashtable *hash, UHashTok key, - int32_t hashcode); +/** + * Allocate internal data array of a size determined by the given + * prime index. If the index is out of range it is pinned into range. + * If the allocation fails the status is set to + * U_MEMORY_ALLOCATION_ERROR and all array storage is freed. In + * either case the previous array pointer is overwritten. + * + * Caller must ensure primeIndex is in range 0..PRIME_LENGTH-1. + */ +static void +_uhash_allocate(UHashtable *hash, + int32_t primeIndex, + UErrorCode *status) { -static UHashTok _uhash_put(UHashtable *hash, - UHashTok key, - UHashTok value, - int8_t hint, - UErrorCode *status); + UHashElement *p, *limit; + UHashTok emptytok; -static UHashTok _uhash_remove(UHashtable *hash, - UHashTok key); + if (U_FAILURE(*status)) return; -static UHashTok _uhash_internalRemoveElement(UHashtable *hash, UHashElement* e); + U_ASSERT(primeIndex >= 0 && primeIndex < PRIMES_LENGTH); -static UHashTok _uhash_setElement(UHashtable* hash, UHashElement* e, - int32_t hashcode, - UHashTok key, UHashTok value, - int8_t hint); + hash->primeIndex = primeIndex; + hash->length = PRIMES[primeIndex]; -static void _uhash_internalSetResizePolicy(UHashtable *hash, enum UHashResizePolicy policy); + p = hash->elements = (UHashElement*) + uprv_malloc(sizeof(UHashElement) * hash->length); -/******************************************************************** - * PUBLIC API - ********************************************************************/ + if (hash->elements == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return; + } -U_CAPI UHashtable* U_EXPORT2 -uhash_open(UHashFunction *keyHash, UKeyComparator *keyComp, - UErrorCode *status) { + emptytok.pointer = NULL; /* Only one of these two is needed */ + emptytok.integer = 0; /* but we don't know which one. */ + + limit = p + hash->length; + while (p < limit) { + p->key = emptytok; + p->value = emptytok; + p->hashcode = HASH_EMPTY; + ++p; + } - return _uhash_create(keyHash, keyComp, 3, status); + hash->count = 0; + hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); + hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); } -U_CAPI UHashtable* U_EXPORT2 -uhash_openSize(UHashFunction *keyHash, UKeyComparator *keyComp, - int32_t size, - UErrorCode *status) { +static UHashtable* +_uhash_init(UHashtable *result, + UHashFunction *keyHash, + UKeyComparator *keyComp, + UValueComparator *valueComp, + int32_t primeIndex, + UErrorCode *status) +{ + if (U_FAILURE(*status)) return NULL; + U_ASSERT(keyHash != NULL); + U_ASSERT(keyComp != NULL); - /* Find the smallest index i for which PRIMES[i] >= size. */ - int32_t i = 0; - while (i<(PRIMES_LENGTH-1) && PRIMES[i]keyHasher = keyHash; + result->keyComparator = keyComp; + result->valueComparator = valueComp; + result->keyDeleter = NULL; + result->valueDeleter = NULL; + result->allocated = FALSE; + _uhash_internalSetResizePolicy(result, U_GROW); - return _uhash_create(keyHash, keyComp, i, status); -} + _uhash_allocate(result, primeIndex, status); -U_CAPI void U_EXPORT2 -uhash_close(UHashtable *hash) { - U_ASSERT(hash != NULL); - if (hash->elements != NULL) { - if (hash->keyDeleter != NULL || hash->valueDeleter != NULL) { - int32_t pos=-1; - UHashElement *e; - while ((e = (UHashElement*) uhash_nextElement(hash, &pos)) != NULL) { - HASH_DELETE_KEY_VALUE(hash, e->key.pointer, e->value.pointer); - } - } - uprv_free(hash->elements); - hash->elements = NULL; + if (U_FAILURE(*status)) { + return NULL; } - uprv_free(hash); -} -U_CAPI UHashFunction *U_EXPORT2 -uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn) { - UHashFunction *result = hash->keyHasher; - hash->keyHasher = fn; return result; } -U_CAPI UKeyComparator *U_EXPORT2 -uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn) { - UKeyComparator *result = hash->keyComparator; - hash->keyComparator = fn; - return result; -} +static UHashtable* +_uhash_create(UHashFunction *keyHash, + UKeyComparator *keyComp, + UValueComparator *valueComp, + int32_t primeIndex, + UErrorCode *status) { + UHashtable *result; -U_CAPI UObjectDeleter *U_EXPORT2 -uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn) { - UObjectDeleter *result = hash->keyDeleter; - hash->keyDeleter = fn; - return result; -} + if (U_FAILURE(*status)) return NULL; -U_CAPI UObjectDeleter *U_EXPORT2 -uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn) { - UObjectDeleter *result = hash->valueDeleter; - hash->valueDeleter = fn; - return result; -} + result = (UHashtable*) uprv_malloc(sizeof(UHashtable)); + if (result == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } -U_CAPI void U_EXPORT2 -uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { - _uhash_internalSetResizePolicy(hash, policy); - hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); - hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); - _uhash_rehash(hash); -} + _uhash_init(result, keyHash, keyComp, valueComp, primeIndex, status); + result->allocated = TRUE; -U_CAPI int32_t U_EXPORT2 -uhash_count(const UHashtable *hash) { - return hash->count; -} + if (U_FAILURE(*status)) { + uprv_free(result); + return NULL; + } -U_CAPI void* U_EXPORT2 -uhash_get(const UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer; + return result; } -U_CAPI void* U_EXPORT2 -uhash_iget(const UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer; -} +/** + * Look for a key in the table, or if no such key exists, the first + * empty slot matching the given hashcode. Keys are compared using + * the keyComparator function. + * + * First find the start position, which is the hashcode modulo + * the length. Test it to see if it is: + * + * a. identical: First check the hash values for a quick check, + * then compare keys for equality using keyComparator. + * b. deleted + * c. empty + * + * Stop if it is identical or empty, otherwise continue by adding a + * "jump" value (moduloing by the length again to keep it within + * range) and retesting. For efficiency, there need enough empty + * values so that the searchs stop within a reasonable amount of time. + * This can be changed by changing the high/low water marks. + * + * In theory, this function can return NULL, if it is full (no empty + * or deleted slots) and if no matching key is found. In practice, we + * prevent this elsewhere (in uhash_put) by making sure the last slot + * in the table is never filled. + * + * The size of the table should be prime for this algorithm to work; + * otherwise we are not guaranteed that the jump value (the secondary + * hash) is relatively prime to the table length. + */ +static UHashElement* +_uhash_find(const UHashtable *hash, UHashTok key, + int32_t hashcode) { -U_CAPI int32_t U_EXPORT2 -uhash_geti(const UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer; -} + int32_t firstDeleted = -1; /* assume invalid index */ + int32_t theIndex, startIndex; + int32_t jump = 0; /* lazy evaluate */ + int32_t tableHash; + UHashElement *elements = hash->elements; -U_CAPI int32_t U_EXPORT2 -uhash_igeti(const UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer; -} + hashcode &= 0x7FFFFFFF; /* must be positive */ + startIndex = theIndex = (hashcode ^ 0x4000000) % hash->length; -U_CAPI void* U_EXPORT2 -uhash_put(UHashtable *hash, - void* key, - void* value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.pointer = key; - valueholder.pointer = value; - return _uhash_put(hash, keyholder, valueholder, - HINT_KEY_POINTER | HINT_VALUE_POINTER, - status).pointer; -} + do { + tableHash = elements[theIndex].hashcode; + if (tableHash == hashcode) { /* quick check */ + if ((*hash->keyComparator)(key, elements[theIndex].key)) { + return &(elements[theIndex]); + } + } else if (!IS_EMPTY_OR_DELETED(tableHash)) { + /* We have hit a slot which contains a key-value pair, + * but for which the hash code does not match. Keep + * looking. + */ + } else if (tableHash == HASH_EMPTY) { /* empty, end o' the line */ + break; + } else if (firstDeleted < 0) { /* remember first deleted */ + firstDeleted = theIndex; + } + if (jump == 0) { /* lazy compute jump */ + /* The jump value must be relatively prime to the table + * length. As long as the length is prime, then any value + * 1..length-1 will be relatively prime to it. + */ + jump = (hashcode % (hash->length - 1)) + 1; + } + theIndex = (theIndex + jump) % hash->length; + } while (theIndex != startIndex); -U_CAPI void* U_EXPORT2 -uhash_iput(UHashtable *hash, - int32_t key, - void* value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.integer = key; - valueholder.pointer = value; - return _uhash_put(hash, keyholder, valueholder, - HINT_VALUE_POINTER, - status).pointer; + if (firstDeleted >= 0) { + theIndex = firstDeleted; /* reset if had deleted slot */ + } else if (tableHash != HASH_EMPTY) { + /* We get to this point if the hashtable is full (no empty or + * deleted slots), and we've failed to find a match. THIS + * WILL NEVER HAPPEN as long as uhash_put() makes sure that + * count is always < length. + */ + U_ASSERT(FALSE); + return NULL; /* Never happens if uhash_put() behaves */ + } + return &(elements[theIndex]); } -U_CAPI int32_t U_EXPORT2 -uhash_puti(UHashtable *hash, - void* key, - int32_t value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.pointer = key; - valueholder.integer = value; - return _uhash_put(hash, keyholder, valueholder, - HINT_KEY_POINTER, - status).integer; -} +/** + * Attempt to grow or shrink the data arrays in order to make the + * count fit between the high and low water marks. hash_put() and + * hash_remove() call this method when the count exceeds the high or + * low water marks. This method may do nothing, if memory allocation + * fails, or if the count is already in range, or if the length is + * already at the low or high limit. In any case, upon return the + * arrays will be valid. + */ +static void +_uhash_rehash(UHashtable *hash) { + UHashElement *old = hash->elements; + int32_t oldLength = hash->length; + int32_t newPrimeIndex = hash->primeIndex; + int32_t i; + UErrorCode status = U_ZERO_ERROR; -U_CAPI int32_t U_EXPORT2 -uhash_iputi(UHashtable *hash, - int32_t key, - int32_t value, - UErrorCode *status) { - UHashTok keyholder, valueholder; - keyholder.integer = key; - valueholder.integer = value; - return _uhash_put(hash, keyholder, valueholder, - 0, /* neither is a ptr */ - status).integer; -} + if (hash->count > hash->highWaterMark) { + if (++newPrimeIndex >= PRIMES_LENGTH) { + return; + } + } else if (hash->count < hash->lowWaterMark) { + if (--newPrimeIndex < 0) { + return; + } + } else { + return; + } -U_CAPI void* U_EXPORT2 -uhash_remove(UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_remove(hash, keyholder).pointer; -} + _uhash_allocate(hash, newPrimeIndex, &status); -U_CAPI void* U_EXPORT2 -uhash_iremove(UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_remove(hash, keyholder).pointer; -} + if (U_FAILURE(status)) { + hash->elements = old; + hash->length = oldLength; + return; + } -U_CAPI int32_t U_EXPORT2 -uhash_removei(UHashtable *hash, - const void* key) { - UHashTok keyholder; - keyholder.pointer = (void*) key; - return _uhash_remove(hash, keyholder).integer; -} + for (i = oldLength - 1; i >= 0; --i) { + if (!IS_EMPTY_OR_DELETED(old[i].hashcode)) { + UHashElement *e = _uhash_find(hash, old[i].key, old[i].hashcode); + U_ASSERT(e != NULL); + U_ASSERT(e->hashcode == HASH_EMPTY); + e->key = old[i].key; + e->value = old[i].value; + e->hashcode = old[i].hashcode; + ++hash->count; + } + } -U_CAPI int32_t U_EXPORT2 -uhash_iremovei(UHashtable *hash, - int32_t key) { - UHashTok keyholder; - keyholder.integer = key; - return _uhash_remove(hash, keyholder).integer; + uprv_free(old); } -U_CAPI void U_EXPORT2 -uhash_removeAll(UHashtable *hash) { - int32_t pos = -1; - const UHashElement *e; - U_ASSERT(hash != NULL); - if (hash->count != 0) { - while ((e = uhash_nextElement(hash, &pos)) != NULL) { - uhash_removeElement(hash, e); +static UHashTok +_uhash_remove(UHashtable *hash, + UHashTok key) { + /* First find the position of the key in the table. If the object + * has not been removed already, remove it. If the user wanted + * keys deleted, then delete it also. We have to put a special + * hashcode in that position that means that something has been + * deleted, since when we do a find, we have to continue PAST any + * deleted values. + */ + UHashTok result; + UHashElement* e = _uhash_find(hash, key, hash->keyHasher(key)); + U_ASSERT(e != NULL); + result.pointer = NULL; result.integer = 0; + if (!IS_EMPTY_OR_DELETED(e->hashcode)) { + result = _uhash_internalRemoveElement(hash, e); + if (hash->count < hash->lowWaterMark) { + _uhash_rehash(hash); } } - U_ASSERT(hash->count == 0); + return result; } -U_CAPI const UHashElement* U_EXPORT2 -uhash_find(const UHashtable *hash, const void* key) { - UHashTok keyholder; - const UHashElement *e; - keyholder.pointer = (void*) key; - e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder)); - return IS_EMPTY_OR_DELETED(e->hashcode) ? NULL : e; -} +static UHashTok +_uhash_put(UHashtable *hash, + UHashTok key, + UHashTok value, + int8_t hint, + UErrorCode *status) { -U_CAPI const UHashElement* U_EXPORT2 -uhash_nextElement(const UHashtable *hash, int32_t *pos) { - /* Walk through the array until we find an element that is not - * EMPTY and not DELETED. + /* Put finds the position in the table for the new value. If the + * key is already in the table, it is deleted, if there is a + * non-NULL keyDeleter. Then the key, the hash and the value are + * all put at the position in their respective arrays. */ - int32_t i; + int32_t hashcode; + UHashElement* e; + UHashTok emptytok; + + if (U_FAILURE(*status)) { + goto err; + } U_ASSERT(hash != NULL); - for (i = *pos + 1; i < hash->length; ++i) { - if (!IS_EMPTY_OR_DELETED(hash->elements[i].hashcode)) { - *pos = i; - return &(hash->elements[i]); - } + /* Cannot always check pointer here or iSeries sees NULL every time. */ + if ((hint & HINT_VALUE_POINTER) && value.pointer == NULL) { + /* Disallow storage of NULL values, since NULL is returned by + * get() to indicate an absent key. Storing NULL == removing. + */ + return _uhash_remove(hash, key); + } + if (hash->count > hash->highWaterMark) { + _uhash_rehash(hash); } - /* No more elements */ - return NULL; -} - -U_CAPI void* U_EXPORT2 -uhash_removeElement(UHashtable *hash, const UHashElement* e) { - U_ASSERT(hash != NULL); + hashcode = (*hash->keyHasher)(key); + e = _uhash_find(hash, key, hashcode); U_ASSERT(e != NULL); - if (!IS_EMPTY_OR_DELETED(e->hashcode)) { - return _uhash_internalRemoveElement(hash, (UHashElement*) e).pointer; + + if (IS_EMPTY_OR_DELETED(e->hashcode)) { + /* Important: We must never actually fill the table up. If we + * do so, then _uhash_find() will return NULL, and we'll have + * to check for NULL after every call to _uhash_find(). To + * avoid this we make sure there is always at least one empty + * or deleted slot in the table. This only is a problem if we + * are out of memory and rehash isn't working. + */ + ++hash->count; + if (hash->count == hash->length) { + /* Don't allow count to reach length */ + --hash->count; + *status = U_MEMORY_ALLOCATION_ERROR; + goto err; + } } - return NULL; -} -/******************************************************************** - * UHashTok convenience - ********************************************************************/ + /* We must in all cases handle storage properly. If there was an + * old key, then it must be deleted (if the deleter != NULL). + * Make hashcodes stored in table positive. + */ + return _uhash_setElement(hash, e, hashcode & 0x7FFFFFFF, key, value, hint); -/** - * Return a UHashTok for an integer. - */ -U_CAPI UHashTok U_EXPORT2 -uhash_toki(int32_t i) { - UHashTok tok; - tok.integer = i; - return tok; + err: + /* If the deleters are non-NULL, this method adopts its key and/or + * value arguments, and we must be sure to delete the key and/or + * value in all cases, even upon failure. + */ + HASH_DELETE_KEY_VALUE(hash, key.pointer, value.pointer); + emptytok.pointer = NULL; emptytok.integer = 0; + return emptytok; } -/** - * Return a UHashTok for a pointer. - */ -U_CAPI UHashTok U_EXPORT2 -uhash_tokp(void* p) { - UHashTok tok; - tok.pointer = p; - return tok; -} /******************************************************************** - * PUBLIC Key Hash Functions + * PUBLIC API ********************************************************************/ -/* - Compute the hash by iterating sparsely over about 32 (up to 63) - characters spaced evenly through the string. For each character, - multiply the previous hash value by a prime number and add the new - character in, like a linear congruential random number generator, - producing a pseudorandom deterministic value well distributed over - the output range. [LIU] -*/ - -#define STRING_HASH(TYPE, STR, STRLEN, DEREF) \ - int32_t hash = 0; \ - const TYPE *p = (const TYPE*) STR; \ - if (p != NULL) { \ - int32_t len = (int32_t)(STRLEN); \ - int32_t inc = ((len - 32) / 32) + 1; \ - const TYPE *limit = p + len; \ - while (p= size. */ + int32_t i = 0; + while (i<(PRIMES_LENGTH-1) && PRIMES[i]elements != NULL) { + if (hash->keyDeleter != NULL || hash->valueDeleter != NULL) { + int32_t pos=-1; + UHashElement *e; + while ((e = (UHashElement*) uhash_nextElement(hash, &pos)) != NULL) { + HASH_DELETE_KEY_VALUE(hash, e->key.pointer, e->value.pointer); + } + } + uprv_free(hash->elements); + hash->elements = NULL; } - if (p1 == NULL || p2 == NULL) { - return FALSE; + if (hash->allocated) { + uprv_free(hash); } - while (*p1 != 0 && *p1 == *p2) { - ++p1; - ++p2; - } - return (UBool)(*p1 == *p2); } -U_CAPI UBool U_EXPORT2 -uhash_compareIChars(const UHashTok key1, const UHashTok key2) { - const char *p1 = (const char*) key1.pointer; - const char *p2 = (const char*) key2.pointer; - if (p1 == p2) { - return TRUE; - } - if (p1 == NULL || p2 == NULL) { - return FALSE; - } - while (*p1 != 0 && uprv_tolower(*p1) == uprv_tolower(*p2)) { - ++p1; - ++p2; - } - return (UBool)(*p1 == *p2); +U_CAPI UHashFunction *U_EXPORT2 +uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn) { + UHashFunction *result = hash->keyHasher; + hash->keyHasher = fn; + return result; } -/******************************************************************** - * PUBLIC int32_t Support Functions - ********************************************************************/ - -U_CAPI int32_t U_EXPORT2 -uhash_hashLong(const UHashTok key) { - return key.integer; +U_CAPI UKeyComparator *U_EXPORT2 +uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn) { + UKeyComparator *result = hash->keyComparator; + hash->keyComparator = fn; + return result; +} +U_CAPI UValueComparator *U_EXPORT2 +uhash_setValueComparator(UHashtable *hash, UValueComparator *fn){ + UValueComparator *result = hash->valueComparator; + hash->valueComparator = fn; + return result; } -U_CAPI UBool U_EXPORT2 -uhash_compareLong(const UHashTok key1, const UHashTok key2) { - return (UBool)(key1.integer == key2.integer); +U_CAPI UObjectDeleter *U_EXPORT2 +uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn) { + UObjectDeleter *result = hash->keyDeleter; + hash->keyDeleter = fn; + return result; } -/******************************************************************** - * PUBLIC Deleter Functions - ********************************************************************/ +U_CAPI UObjectDeleter *U_EXPORT2 +uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn) { + UObjectDeleter *result = hash->valueDeleter; + hash->valueDeleter = fn; + return result; +} U_CAPI void U_EXPORT2 -uhash_freeBlock(void *obj) { - uprv_free(obj); +uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { + _uhash_internalSetResizePolicy(hash, policy); + hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); + hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); + _uhash_rehash(hash); } -/******************************************************************** - * PRIVATE Implementation - ********************************************************************/ - -static UHashtable* -_uhash_create(UHashFunction *keyHash, UKeyComparator *keyComp, - int32_t primeIndex, - UErrorCode *status) { - UHashtable *result; +U_CAPI int32_t U_EXPORT2 +uhash_count(const UHashtable *hash) { + return hash->count; +} - if (U_FAILURE(*status)) return NULL; - U_ASSERT(keyHash != NULL); - U_ASSERT(keyComp != NULL); +U_CAPI void* U_EXPORT2 +uhash_get(const UHashtable *hash, + const void* key) { + UHashTok keyholder; + keyholder.pointer = (void*) key; + return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer; +} - result = (UHashtable*) uprv_malloc(sizeof(UHashtable)); - if (result == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } +U_CAPI void* U_EXPORT2 +uhash_iget(const UHashtable *hash, + int32_t key) { + UHashTok keyholder; + keyholder.integer = key; + return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.pointer; +} - result->keyHasher = keyHash; - result->keyComparator = keyComp; - result->keyDeleter = NULL; - result->valueDeleter = NULL; - _uhash_internalSetResizePolicy(result, U_GROW); +U_CAPI int32_t U_EXPORT2 +uhash_geti(const UHashtable *hash, + const void* key) { + UHashTok keyholder; + keyholder.pointer = (void*) key; + return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer; +} - _uhash_allocate(result, primeIndex, status); +U_CAPI int32_t U_EXPORT2 +uhash_igeti(const UHashtable *hash, + int32_t key) { + UHashTok keyholder; + keyholder.integer = key; + return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer; +} - if (U_FAILURE(*status)) { - uprv_free(result); - return NULL; - } +U_CAPI void* U_EXPORT2 +uhash_put(UHashtable *hash, + void* key, + void* value, + UErrorCode *status) { + UHashTok keyholder, valueholder; + keyholder.pointer = key; + valueholder.pointer = value; + return _uhash_put(hash, keyholder, valueholder, + HINT_KEY_POINTER | HINT_VALUE_POINTER, + status).pointer; +} - return result; +U_CAPI void* U_EXPORT2 +uhash_iput(UHashtable *hash, + int32_t key, + void* value, + UErrorCode *status) { + UHashTok keyholder, valueholder; + keyholder.integer = key; + valueholder.pointer = value; + return _uhash_put(hash, keyholder, valueholder, + HINT_VALUE_POINTER, + status).pointer; } -/** - * Allocate internal data array of a size determined by the given - * prime index. If the index is out of range it is pinned into range. - * If the allocation fails the status is set to - * U_MEMORY_ALLOCATION_ERROR and all array storage is freed. In - * either case the previous array pointer is overwritten. - * - * Caller must ensure primeIndex is in range 0..PRIME_LENGTH-1. - */ -static void -_uhash_allocate(UHashtable *hash, - int32_t primeIndex, - UErrorCode *status) { +U_CAPI int32_t U_EXPORT2 +uhash_puti(UHashtable *hash, + void* key, + int32_t value, + UErrorCode *status) { + UHashTok keyholder, valueholder; + keyholder.pointer = key; + valueholder.integer = value; + return _uhash_put(hash, keyholder, valueholder, + HINT_KEY_POINTER, + status).integer; +} - UHashElement *p, *limit; - UHashTok emptytok; - if (U_FAILURE(*status)) return; +U_CAPI int32_t U_EXPORT2 +uhash_iputi(UHashtable *hash, + int32_t key, + int32_t value, + UErrorCode *status) { + UHashTok keyholder, valueholder; + keyholder.integer = key; + valueholder.integer = value; + return _uhash_put(hash, keyholder, valueholder, + 0, /* neither is a ptr */ + status).integer; +} - U_ASSERT(primeIndex >= 0 && primeIndex < PRIMES_LENGTH); +U_CAPI void* U_EXPORT2 +uhash_remove(UHashtable *hash, + const void* key) { + UHashTok keyholder; + keyholder.pointer = (void*) key; + return _uhash_remove(hash, keyholder).pointer; +} - hash->primeIndex = primeIndex; - hash->length = PRIMES[primeIndex]; +U_CAPI void* U_EXPORT2 +uhash_iremove(UHashtable *hash, + int32_t key) { + UHashTok keyholder; + keyholder.integer = key; + return _uhash_remove(hash, keyholder).pointer; +} - p = hash->elements = (UHashElement*) - uprv_malloc(sizeof(UHashElement) * hash->length); +U_CAPI int32_t U_EXPORT2 +uhash_removei(UHashtable *hash, + const void* key) { + UHashTok keyholder; + keyholder.pointer = (void*) key; + return _uhash_remove(hash, keyholder).integer; +} - if (hash->elements == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return; - } +U_CAPI int32_t U_EXPORT2 +uhash_iremovei(UHashtable *hash, + int32_t key) { + UHashTok keyholder; + keyholder.integer = key; + return _uhash_remove(hash, keyholder).integer; +} - emptytok.pointer = NULL; /* Only one of these two is needed */ - emptytok.integer = 0; /* but we don't know which one. */ - - limit = p + hash->length; - while (p < limit) { - p->key = emptytok; - p->value = emptytok; - p->hashcode = HASH_EMPTY; - ++p; +U_CAPI void U_EXPORT2 +uhash_removeAll(UHashtable *hash) { + int32_t pos = -1; + const UHashElement *e; + U_ASSERT(hash != NULL); + if (hash->count != 0) { + while ((e = uhash_nextElement(hash, &pos)) != NULL) { + uhash_removeElement(hash, e); + } } - - hash->count = 0; - hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); - hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); + U_ASSERT(hash->count == 0); } -/** - * Attempt to grow or shrink the data arrays in order to make the - * count fit between the high and low water marks. hash_put() and - * hash_remove() call this method when the count exceeds the high or - * low water marks. This method may do nothing, if memory allocation - * fails, or if the count is already in range, or if the length is - * already at the low or high limit. In any case, upon return the - * arrays will be valid. - */ -static void -_uhash_rehash(UHashtable *hash) { +U_CAPI const UHashElement* U_EXPORT2 +uhash_find(const UHashtable *hash, const void* key) { + UHashTok keyholder; + const UHashElement *e; + keyholder.pointer = (void*) key; + e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder)); + return IS_EMPTY_OR_DELETED(e->hashcode) ? NULL : e; +} - UHashElement *old = hash->elements; - int32_t oldLength = hash->length; - int32_t newPrimeIndex = hash->primeIndex; +U_CAPI const UHashElement* U_EXPORT2 +uhash_nextElement(const UHashtable *hash, int32_t *pos) { + /* Walk through the array until we find an element that is not + * EMPTY and not DELETED. + */ int32_t i; - UErrorCode status = U_ZERO_ERROR; - - if (hash->count > hash->highWaterMark) { - if (++newPrimeIndex >= PRIMES_LENGTH) { - return; - } - } else if (hash->count < hash->lowWaterMark) { - if (--newPrimeIndex < 0) { - return; + U_ASSERT(hash != NULL); + for (i = *pos + 1; i < hash->length; ++i) { + if (!IS_EMPTY_OR_DELETED(hash->elements[i].hashcode)) { + *pos = i; + return &(hash->elements[i]); } - } else { - return; } - _uhash_allocate(hash, newPrimeIndex, &status); + /* No more elements */ + return NULL; +} - if (U_FAILURE(status)) { - hash->elements = old; - hash->length = oldLength; - return; +U_CAPI void* U_EXPORT2 +uhash_removeElement(UHashtable *hash, const UHashElement* e) { + U_ASSERT(hash != NULL); + U_ASSERT(e != NULL); + if (!IS_EMPTY_OR_DELETED(e->hashcode)) { + return _uhash_internalRemoveElement(hash, (UHashElement*) e).pointer; } + return NULL; +} - for (i = oldLength - 1; i >= 0; --i) { - if (!IS_EMPTY_OR_DELETED(old[i].hashcode)) { - UHashElement *e = _uhash_find(hash, old[i].key, old[i].hashcode); - U_ASSERT(e != NULL); - U_ASSERT(e->hashcode == HASH_EMPTY); - e->key = old[i].key; - e->value = old[i].value; - e->hashcode = old[i].hashcode; - ++hash->count; - } - } +/******************************************************************** + * UHashTok convenience + ********************************************************************/ - uprv_free(old); -} +/** + * Return a UHashTok for an integer. + */ +/*U_CAPI UHashTok U_EXPORT2 +uhash_toki(int32_t i) { + UHashTok tok; + tok.integer = i; + return tok; +}*/ /** - * Look for a key in the table, or if no such key exists, the first - * empty slot matching the given hashcode. Keys are compared using - * the keyComparator function. - * - * First find the start position, which is the hashcode modulo - * the length. Test it to see if it is: - * - * a. identical: First check the hash values for a quick check, - * then compare keys for equality using keyComparator. - * b. deleted - * c. empty - * - * Stop if it is identical or empty, otherwise continue by adding a - * "jump" value (moduloing by the length again to keep it within - * range) and retesting. For efficiency, there need enough empty - * values so that the searchs stop within a reasonable amount of time. - * This can be changed by changing the high/low water marks. - * - * In theory, this function can return NULL, if it is full (no empty - * or deleted slots) and if no matching key is found. In practice, we - * prevent this elsewhere (in uhash_put) by making sure the last slot - * in the table is never filled. - * - * The size of the table should be prime for this algorithm to work; - * otherwise we are not guaranteed that the jump value (the secondary - * hash) is relatively prime to the table length. + * Return a UHashTok for a pointer. */ -static UHashElement* -_uhash_find(const UHashtable *hash, UHashTok key, - int32_t hashcode) { +/*U_CAPI UHashTok U_EXPORT2 +uhash_tokp(void* p) { + UHashTok tok; + tok.pointer = p; + return tok; +}*/ - int32_t firstDeleted = -1; /* assume invalid index */ - int32_t theIndex, startIndex; - int32_t jump = 0; /* lazy evaluate */ - int32_t tableHash; +/******************************************************************** + * PUBLIC Key Hash Functions + ********************************************************************/ + +/* + Compute the hash by iterating sparsely over about 32 (up to 63) + characters spaced evenly through the string. For each character, + multiply the previous hash value by a prime number and add the new + character in, like a linear congruential random number generator, + producing a pseudorandom deterministic value well distributed over + the output range. [LIU] +*/ + +#define STRING_HASH(TYPE, STR, STRLEN, DEREF) \ + int32_t hash = 0; \ + const TYPE *p = (const TYPE*) STR; \ + if (p != NULL) { \ + int32_t len = (int32_t)(STRLEN); \ + int32_t inc = ((len - 32) / 32) + 1; \ + const TYPE *limit = p + len; \ + while (plength; +U_CAPI int32_t U_EXPORT2 +uhash_hashUChars(const UHashTok key) { + STRING_HASH(UChar, key.pointer, u_strlen(p), *p); +} - do { - tableHash = hash->elements[theIndex].hashcode; - if (tableHash == hashcode) { /* quick check */ - if ((*hash->keyComparator)(key, hash->elements[theIndex].key)) { - return &(hash->elements[theIndex]); - } - } else if (!IS_EMPTY_OR_DELETED(tableHash)) { - /* We have hit a slot which contains a key-value pair, - * but for which the hash code does not match. Keep - * looking. - */ - } else if (tableHash == HASH_EMPTY) { /* empty, end o' the line */ - break; - } else if (firstDeleted < 0) { /* remember first deleted */ - firstDeleted = theIndex; - } - if (jump == 0) { /* lazy compute jump */ - /* The jump value must be relatively prime to the table - * length. As long as the length is prime, then any value - * 1..length-1 will be relatively prime to it. - */ - jump = (hashcode % (hash->length - 1)) + 1; - } - theIndex = (theIndex + jump) % hash->length; - } while (theIndex != startIndex); +/* Used by UnicodeString to compute its hashcode - Not public API. */ +U_CAPI int32_t U_EXPORT2 +uhash_hashUCharsN(const UChar *str, int32_t length) { + STRING_HASH(UChar, str, length, *p); +} - if (firstDeleted >= 0) { - theIndex = firstDeleted; /* reset if had deleted slot */ - } else if (tableHash != HASH_EMPTY) { - /* We get to this point if the hashtable is full (no empty or - * deleted slots), and we've failed to find a match. THIS - * WILL NEVER HAPPEN as long as uhash_put() makes sure that - * count is always < length. - */ - U_ASSERT(FALSE); - return NULL; /* Never happens if uhash_put() behaves */ - } - return &(hash->elements[theIndex]); +U_CAPI int32_t U_EXPORT2 +uhash_hashChars(const UHashTok key) { + STRING_HASH(uint8_t, key.pointer, uprv_strlen((char*)p), *p); } -static UHashTok -_uhash_put(UHashtable *hash, - UHashTok key, - UHashTok value, - int8_t hint, - UErrorCode *status) { +U_CAPI int32_t U_EXPORT2 +uhash_hashIChars(const UHashTok key) { + STRING_HASH(uint8_t, key.pointer, uprv_strlen((char*)p), uprv_tolower(*p)); +} - /* Put finds the position in the table for the new value. If the - * key is already in the table, it is deleted, if there is a - * non-NULL keyDeleter. Then the key, the hash and the value are - * all put at the position in their respective arrays. - */ - int32_t hashcode; - UHashElement* e; - UHashTok emptytok; +U_CAPI UBool U_EXPORT2 +uhash_equals(const UHashtable* hash1, const UHashtable* hash2){ + + int32_t count1, count2, pos, i; - if (U_FAILURE(*status)) { - goto err; + if(hash1==hash2){ + return TRUE; } - U_ASSERT(hash != NULL); - /* Cannot always check pointer here or iSeries sees NULL every time. */ - if ((hint & HINT_VALUE_POINTER) && value.pointer == NULL) { - /* Disallow storage of NULL values, since NULL is returned by - * get() to indicate an absent key. Storing NULL == removing. - */ - return _uhash_remove(hash, key); + + if(hash1==NULL || hash2==NULL){ + return FALSE; } - if (hash->count > hash->highWaterMark) { - _uhash_rehash(hash); + /* make sure that we are comparing 2 hashes of the same type */ + if( hash1->keyComparator != hash2->keyComparator || + hash2->valueComparator != hash2->valueComparator){ + return FALSE; } - hashcode = (*hash->keyHasher)(key); - e = _uhash_find(hash, key, hashcode); - U_ASSERT(e != NULL); - - if (IS_EMPTY_OR_DELETED(e->hashcode)) { - /* Important: We must never actually fill the table up. If we - * do so, then _uhash_find() will return NULL, and we'll have - * to check for NULL after every call to _uhash_find(). To - * avoid this we make sure there is always at least one empty - * or deleted slot in the table. This only is a problem if we - * are out of memory and rehash isn't working. + count1 = uhash_count(hash1); + count2 = uhash_count(hash2); + if(count1!=count2){ + return FALSE; + } + + pos=-1; + for(i=0; ikey; + const UHashTok val1 = elem1->value; + /* here the keys are not compared, instead the key form hash1 is used to fetch + * value from hash2. If the hashes are equal then then both hashes should + * contain equal values for the same key! */ - ++hash->count; - if (hash->count == hash->length) { - /* Don't allow count to reach length */ - --hash->count; - *status = U_MEMORY_ALLOCATION_ERROR; - goto err; + const UHashElement* elem2 = _uhash_find(hash2, key1, hash2->keyHasher(key1)); + const UHashTok val2 = elem2->value; + if(hash1->valueComparator(val1, val2)==FALSE){ + return FALSE; } } + return TRUE; +} - /* We must in all cases handle storage properly. If there was an - * old key, then it must be deleted (if the deleter != NULL). - * Make hashcodes stored in table positive. - */ - return _uhash_setElement(hash, e, hashcode & 0x7FFFFFFF, key, value, hint); +/******************************************************************** + * PUBLIC Comparator Functions + ********************************************************************/ - err: - /* If the deleters are non-NULL, this method adopts its key and/or - * value arguments, and we must be sure to delete the key and/or - * value in all cases, even upon failure. - */ - HASH_DELETE_KEY_VALUE(hash, key.pointer, value.pointer); - emptytok.pointer = NULL; emptytok.integer = 0; - return emptytok; +U_CAPI UBool U_EXPORT2 +uhash_compareUChars(const UHashTok key1, const UHashTok key2) { + const UChar *p1 = (const UChar*) key1.pointer; + const UChar *p2 = (const UChar*) key2.pointer; + if (p1 == p2) { + return TRUE; + } + if (p1 == NULL || p2 == NULL) { + return FALSE; + } + while (*p1 != 0 && *p1 == *p2) { + ++p1; + ++p2; + } + return (UBool)(*p1 == *p2); } -static UHashTok -_uhash_remove(UHashtable *hash, - UHashTok key) { - /* First find the position of the key in the table. If the object - * has not been removed already, remove it. If the user wanted - * keys deleted, then delete it also. We have to put a special - * hashcode in that position that means that something has been - * deleted, since when we do a find, we have to continue PAST any - * deleted values. - */ - UHashTok result; - UHashElement* e = _uhash_find(hash, key, hash->keyHasher(key)); - U_ASSERT(e != NULL); - result.pointer = NULL; result.integer = 0; - if (!IS_EMPTY_OR_DELETED(e->hashcode)) { - result = _uhash_internalRemoveElement(hash, e); - if (hash->count < hash->lowWaterMark) { - _uhash_rehash(hash); - } +U_CAPI UBool U_EXPORT2 +uhash_compareChars(const UHashTok key1, const UHashTok key2) { + const char *p1 = (const char*) key1.pointer; + const char *p2 = (const char*) key2.pointer; + if (p1 == p2) { + return TRUE; } - return result; + if (p1 == NULL || p2 == NULL) { + return FALSE; + } + while (*p1 != 0 && *p1 == *p2) { + ++p1; + ++p2; + } + return (UBool)(*p1 == *p2); } -static UHashTok -_uhash_setElement(UHashtable *hash, UHashElement* e, - int32_t hashcode, - UHashTok key, UHashTok value, int8_t hint) { - - UHashTok oldValue = e->value; - if (hash->keyDeleter != NULL && e->key.pointer != NULL && - e->key.pointer != key.pointer) { /* Avoid double deletion */ - (*hash->keyDeleter)(e->key.pointer); - } - if (hash->valueDeleter != NULL) { - if (oldValue.pointer != NULL && - oldValue.pointer != value.pointer) { /* Avoid double deletion */ - (*hash->valueDeleter)(oldValue.pointer); - } - oldValue.pointer = NULL; +U_CAPI UBool U_EXPORT2 +uhash_compareIChars(const UHashTok key1, const UHashTok key2) { + const char *p1 = (const char*) key1.pointer; + const char *p2 = (const char*) key2.pointer; + if (p1 == p2) { + return TRUE; } - /* Compilers should copy the UHashTok union correctly, but even if - * they do, memory heap tools (e.g. BoundsChecker) can get - * confused when a pointer is cloaked in a union and then copied. - * TO ALLEVIATE THIS, we use hints (based on what API the user is - * calling) to copy pointers when we know the user thinks - * something is a pointer. */ - if (hint & HINT_KEY_POINTER) { - e->key.pointer = key.pointer; - } else { - e->key = key; + if (p1 == NULL || p2 == NULL) { + return FALSE; } - if (hint & HINT_VALUE_POINTER) { - e->value.pointer = value.pointer; - } else { - e->value = value; + while (*p1 != 0 && uprv_tolower(*p1) == uprv_tolower(*p2)) { + ++p1; + ++p2; } - e->hashcode = hashcode; - return oldValue; + return (UBool)(*p1 == *p2); } -/** - * Assumes that the given element is not empty or deleted. - */ -static UHashTok -_uhash_internalRemoveElement(UHashtable *hash, UHashElement* e) { - UHashTok empty; - U_ASSERT(!IS_EMPTY_OR_DELETED(e->hashcode)); - --hash->count; - empty.pointer = NULL; empty.integer = 0; - return _uhash_setElement(hash, e, HASH_DELETED, empty, empty, 0); +/******************************************************************** + * PUBLIC int32_t Support Functions + ********************************************************************/ + +U_CAPI int32_t U_EXPORT2 +uhash_hashLong(const UHashTok key) { + return key.integer; } -static void -_uhash_internalSetResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { - U_ASSERT(hash != NULL); - U_ASSERT(((int32_t)policy) >= 0); - U_ASSERT(((int32_t)policy) < 3); - hash->lowWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2]; - hash->highWaterRatio = RESIZE_POLICY_RATIO_TABLE[policy * 2 + 1]; +U_CAPI UBool U_EXPORT2 +uhash_compareLong(const UHashTok key1, const UHashTok key2) { + return (UBool)(key1.integer == key2.integer); +} + +/******************************************************************** + * PUBLIC Deleter Functions + ********************************************************************/ + +U_CAPI void U_EXPORT2 +uhash_freeBlock(void *obj) { + uprv_free(obj); } + diff --git a/icuSources/common/uhash.h b/icuSources/common/uhash.h index e1b6b806..b5f3a67d 100644 --- a/icuSources/common/uhash.h +++ b/icuSources/common/uhash.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -117,7 +117,14 @@ typedef int32_t U_CALLCONV UHashFunction(const UHashTok key); */ typedef UBool U_CALLCONV UKeyComparator(const UHashTok key1, const UHashTok key2); - +/** + * A key comparison function. + * @param val1 A key stored in a hashtable + * @param val2 A key stored in a hashtable + * @return TRUE if the two keys are equal. + */ +typedef UBool U_CALLCONV UValueComparator(const UHashTok val1, + const UHashTok val2); /** * A function called by uhash_remove, * uhash_close, or uhash_put to delete @@ -146,6 +153,19 @@ struct UHashtable { UHashElement *elements; + /* Function pointers */ + + UHashFunction *keyHasher; /* Computes hash from key. + * Never null. */ + UKeyComparator *keyComparator; /* Compares keys for equality. + * Never null. */ + UValueComparator *valueComparator; /* Compares the values for equality */ + + UObjectDeleter *keyDeleter; /* Deletes keys when required. + * If NULL won't do anything */ + UObjectDeleter *valueDeleter; /* Deletes values when required. + * If NULL won't do anything */ + /* Size parameters */ int32_t count; /* The number of key-value pairs in this table. @@ -163,16 +183,7 @@ struct UHashtable { float highWaterRatio; /* 0..1; high water as a fraction of length */ float lowWaterRatio; /* 0..1; low water as a fraction of length */ - /* Function pointers */ - - UHashFunction *keyHasher; /* Computes hash from key. - * Never null. */ - UKeyComparator *keyComparator; /* Compares keys for equality. - * Never null. */ - UObjectDeleter *keyDeleter; /* Deletes keys when required. - * If NULL won't do anything */ - UObjectDeleter *valueDeleter; /* Deletes values when required. - * If NULL won't do anything */ + UBool allocated; /* Was this UHashtable allocated? */ }; typedef struct UHashtable UHashtable; @@ -195,6 +206,7 @@ U_CDECL_END U_CAPI UHashtable* U_EXPORT2 uhash_open(UHashFunction *keyHash, UKeyComparator *keyComp, + UValueComparator *valueComp, UErrorCode *status); /** @@ -211,9 +223,27 @@ uhash_open(UHashFunction *keyHash, U_CAPI UHashtable* U_EXPORT2 uhash_openSize(UHashFunction *keyHash, UKeyComparator *keyComp, + UValueComparator *valueComp, int32_t size, UErrorCode *status); +/** + * Initialize an existing UHashtable. + * @param keyHash A pointer to the key hashing function. Must not be + * NULL. + * @param keyComp A pointer to the function that compares keys. Must + * not be NULL. + * @param status A pointer to an UErrorCode to receive any errors. + * @return A pointer to a UHashtable, or 0 if an error occurred. + * @see uhash_openSize + */ +U_CAPI UHashtable* U_EXPORT2 +uhash_init(UHashtable *hash, + UHashFunction *keyHash, + UKeyComparator *keyComp, + UValueComparator *valueComp, + UErrorCode *status); + /** * Close a UHashtable, releasing the memory used. * @param hash The UHashtable to close. @@ -242,6 +272,16 @@ uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn); U_CAPI UKeyComparator *U_EXPORT2 uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn); +/** + * Set the function used to compare values. The default comparison is a + * void* pointer comparison. + * @param hash The UHashtable to set + * @param fn the function to be used compare keys; must not be NULL + * @return the previous key comparator; non-NULL + */ +U_CAPI UValueComparator *U_EXPORT2 +uhash_setValueComparator(UHashtable *hash, UValueComparator *fn); + /** * Set the function used to delete keys. If this function pointer is * NULL, this hashtable does not delete keys. If it is non-NULL, this @@ -503,16 +543,16 @@ uhash_removeElement(UHashtable *hash, const UHashElement* e); * @param i The given integer * @return a UHashTok for an integer. */ -U_CAPI UHashTok U_EXPORT2 -uhash_toki(int32_t i); +/*U_CAPI UHashTok U_EXPORT2 +uhash_toki(int32_t i);*/ /** * Return a UHashTok for a pointer. * @param p The given pointer * @return a UHashTok for a pointer. */ -U_CAPI UHashTok U_EXPORT2 -uhash_tokp(void* p); +/*U_CAPI UHashTok U_EXPORT2 +uhash_tokp(void* p);*/ /******************************************************************** * UChar* and char* Support Functions @@ -676,4 +716,13 @@ uhash_deleteUVector(void *obj); U_CAPI void U_EXPORT2 uhash_freeBlock(void *obj); +/** + * Checks if the given hash tables are equal or not. + * @param hash1 + * @param hash2 + * @return true if the hashtables are equal and false if not. + */ +U_CAPI UBool U_EXPORT2 +uhash_equals(const UHashtable* hash1, const UHashtable* hash2); + #endif diff --git a/icuSources/common/uhash_us.cpp b/icuSources/common/uhash_us.cpp index 3e12ffd0..0c6a3178 100644 --- a/icuSources/common/uhash_us.cpp +++ b/icuSources/common/uhash_us.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2001, International Business Machines +* Copyright (C) 1997-2004, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -27,19 +27,6 @@ uhash_hashUnicodeString(const UHashTok key) { return (str == NULL) ? 0 : str->hashCode(); } -U_CAPI int32_t U_EXPORT2 -uhash_hashCaselessUnicodeString(const UHashTok key) { - U_NAMESPACE_USE - const UnicodeString *str = (const UnicodeString*) key.pointer; - if (str == NULL) { - return 0; - } - // Inefficient; a better way would be to have a hash function in - // UnicodeString that does case folding on the fly. - UnicodeString copy(*str); - return copy.foldCase().hashCode(); -} - U_CAPI void U_EXPORT2 uhash_deleteUnicodeString(void *obj) { U_NAMESPACE_USE @@ -60,20 +47,6 @@ uhash_compareUnicodeString(const UHashTok key1, const UHashTok key2) { return *str1 == *str2; } -U_CAPI UBool U_EXPORT2 -uhash_compareCaselessUnicodeString(const UHashTok key1, const UHashTok key2) { - U_NAMESPACE_USE - const UnicodeString *str1 = (const UnicodeString*) key1.pointer; - const UnicodeString *str2 = (const UnicodeString*) key2.pointer; - if (str1 == str2) { - return TRUE; - } - if (str1 == NULL || str2 == NULL) { - return FALSE; - } - return str1->caseCompare(*str2, U_FOLD_CASE_DEFAULT) == 0; -} - /** * Deleter for Hashtable objects. */ diff --git a/icuSources/common/uidna.cpp b/icuSources/common/uidna.cpp index 4fdb5521..5b030a0f 100644 --- a/icuSources/common/uidna.cpp +++ b/icuSources/common/uidna.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2007, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -66,12 +66,6 @@ startsWithPrefix(const UChar* src , int32_t srcLength){ return startsWithPrefix; } -inline static void -toASCIILower(UChar* src, int32_t srcLen){ - for(int32_t i=0; i b1Capacity){ + b1 = (UChar*) uprv_malloc(srcLength * U_SIZEOF_UCHAR); if(b1==NULL){ *status = U_MEMORY_ALLOCATION_ERROR; goto CLEANUP; } + b1Capacity = srcLength; + } - *status = U_ZERO_ERROR; // reset error + // step 1 + for( j=0;j 0x7F){ + srcIsASCII = FALSE; + } + b1[b1Len++] = src[j]; + } + + // step 2 is performed only if the source contains non ASCII + if(srcIsASCII == FALSE){ - b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Len, namePrepOptions, parseError, status); + // step 2 + b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Capacity, namePrepOptions, parseError, status); + + if(*status == U_BUFFER_OVERFLOW_ERROR){ + // redo processing of string + // we do not have enough room so grow the buffer + if(b1 != b1Stack){ + uprv_free(b1); + } + b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR); + if(b1==NULL){ + *status = U_MEMORY_ALLOCATION_ERROR; + goto CLEANUP; + } + + *status = U_ZERO_ERROR; // reset error + + b1Len = usprep_prepare(nameprep, src, srcLength, b1, b1Len, namePrepOptions, parseError, status); + } } // error bail out if(U_FAILURE(*status)){ goto CLEANUP; } + if(b1Len == 0){ + *status = U_IDNA_ZERO_LENGTH_LABEL_ERROR; + goto CLEANUP; + } - // step 3 & 4 + // for step 3 & 4 + srcIsASCII = TRUE; for( j=0;j 0x7F){ srcIsASCII = FALSE; }else if(isLDHChar(b1[j])==FALSE){ // if the char is in ASCII range verify that it is an LDH character @@ -255,7 +283,6 @@ _internal_toASCII(const UChar* src, int32_t srcLength, failPos = j; } } - if(useSTD3ASCIIRules == TRUE){ // verify 3a and 3b // 3(a) Verify the absence of non-LDH ASCII code points; that is, the @@ -282,6 +309,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, goto CLEANUP; } } + // Step 4: if the source is ASCII then proceed to step 8 if(srcIsASCII){ if(b1Len <= destCapacity){ uprv_memmove(dest, b1, b1Len * U_SIZEOF_UCHAR); @@ -341,7 +369,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, goto CLEANUP; } } - + // step 8: verify the length of lable if(reqLength > MAX_LABEL_LENGTH){ *status = U_IDNA_LABEL_TOO_LONG_ERROR; } @@ -447,7 +475,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, //step 3: verify ACE Prefix if(startsWithPrefix(src,srcLength)){ - + //step 4: Remove the ACE Prefix b1Prime = b1 + ACE_PREFIX_LENGTH; b1PrimeLen = b1Len - ACE_PREFIX_LENGTH; @@ -470,10 +498,9 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, } - //step 6:Apply toASCII b3Len = uidna_toASCII(b2, b2Len, b3, b3Capacity,options,parseError, status); - + if(*status == U_BUFFER_OVERFLOW_ERROR){ // redo processing of string /* we do not have enough room so grow the buffer*/ @@ -488,6 +515,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, b3Len = uidna_toASCII(b2,b2Len,b3,b3Len,options,parseError, status); } + //bail out on error if(U_FAILURE(*status)){ goto CLEANUP; @@ -659,16 +687,19 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength, for(;;){ labelLen = getNextSeparator(labelStart,remainingLen, &delimiter,&done); + labelReqLength = 0; + if(!(labelLen==0 && done)){// make sure this is not a root label separator. - labelReqLength = _internal_toASCII( labelStart, labelLen, - currentDest, remainingDestCapacity, - options, nameprep, - parseError, status); - - if(*status == U_BUFFER_OVERFLOW_ERROR){ - - *status = U_ZERO_ERROR; // reset error - remainingDestCapacity = 0; + labelReqLength = _internal_toASCII( labelStart, labelLen, + currentDest, remainingDestCapacity, + options, nameprep, + parseError, status); + + if(*status == U_BUFFER_OVERFLOW_ERROR){ + + *status = U_ZERO_ERROR; // reset error + remainingDestCapacity = 0; + } } @@ -698,7 +729,7 @@ uidna_IDNToASCII( const UChar *src, int32_t srcLength, labelStart = delimiter; if(remainingLen >0 ){ - remainingLen = srcLength - (delimiter - src); + remainingLen = (int32_t)(srcLength - (delimiter - src)); } } @@ -745,6 +776,9 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, labelLen = getNextSeparator(labelStart,remainingLen, &delimiter,&done); + if(labelLen==0 && done==FALSE){ + *status = U_IDNA_ZERO_LENGTH_LABEL_ERROR; + } labelReqLength = _internal_toUnicode(labelStart, labelLen, currentDest, remainingDestCapacity, options, nameprep, @@ -784,7 +818,7 @@ uidna_IDNToUnicode( const UChar* src, int32_t srcLength, labelStart = delimiter; if(remainingLen >0 ){ - remainingLen = srcLength - (delimiter - src); + remainingLen = (int32_t)(srcLength - (delimiter - src)); } } diff --git a/icuSources/common/uinit.c b/icuSources/common/uinit.c index 1f8fc089..a70e51d0 100644 --- a/icuSources/common/uinit.c +++ b/icuSources/common/uinit.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2001-2004, International Business Machines * +* Copyright (C) 2001-2006, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -20,6 +20,7 @@ #include "ustr_imp.h" #include "unormimp.h" #include "ucln_cmn.h" +#include "ucnv_io.h" #include "umutex.h" #include "ucln.h" #include "cmemory.h" @@ -29,19 +30,6 @@ static UBool gICUInitialized = FALSE; static UMTX gICUInitMutex = NULL; -static cleanupFunc *gLibCleanupFunctions[UCLN_COMMON]; - -U_CAPI void U_EXPORT2 -ucln_registerCleanup(ECleanupLibraryType type, - cleanupFunc *func) -{ - U_ASSERT(UCLN_START < type && type < UCLN_COMMON); - if (UCLN_START < type && type < UCLN_COMMON) - { - gLibCleanupFunctions[type] = func; - } -} - /************************************************ The cleanup order is important in this function. Please be sure that you have read ucln.h @@ -49,28 +37,20 @@ ucln_registerCleanup(ECleanupLibraryType type, U_CAPI void U_EXPORT2 u_cleanup(void) { - ECleanupLibraryType libType; - UTRACE_ENTRY_OC(UTRACE_U_CLEANUP); umtx_lock(NULL); /* Force a memory barrier, so that we are sure to see */ umtx_unlock(NULL); /* all state left around by any other threads. */ - for (libType = UCLN_START+1; libType0) { c=(uint8_t)(*cs++); -#if U_CHARSET_FAMILY==U_ASCII_FAMILY - u=(UChar)c; -#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY - u=(UChar)asciiFromEbcdic[c]; -#else -# error U_CHARSET_FAMILY is not valid -#endif - if(u==0 && c!=0) { - onlyInvariantChars=FALSE; - } + u=(UChar)CHAR_TO_UCHAR(c); + U_ASSERT((u!=0 || c==0)); /* only invariant chars converted? */ *us++=u; --length; } - U_ASSERT(onlyInvariantChars); /* only invariant chars? */ } U_CAPI void U_EXPORT2 u_UCharsToChars(const UChar *us, char *cs, int32_t length) { UChar u; - UBool onlyInvariantChars; - onlyInvariantChars=TRUE; while(length>0) { u=*us++; if(!UCHAR_IS_INVARIANT(u)) { - onlyInvariantChars=FALSE; + U_ASSERT(FALSE); /* Variant characters were used. These are not portable in ICU. */ u=0; } -#if U_CHARSET_FAMILY==U_ASCII_FAMILY - *cs++=(char)u; -#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY - *cs++=(char)ebcdicFromAscii[u]; -#else -# error U_CHARSET_FAMILY is not valid -#endif + *cs++=(char)UCHAR_TO_CHAR(u); --length; } - U_ASSERT(onlyInvariantChars); /* only invariant chars? */ } U_CAPI UBool U_EXPORT2 @@ -232,7 +223,7 @@ uprv_isInvariantString(const char *s, int32_t length) { return FALSE; /* found a variant char */ } #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY - c=asciiFromEbcdic[c]; + c=CHAR_TO_UCHAR(c); if(c==0 || !UCHAR_IS_INVARIANT(c)) { return FALSE; /* found a variant char */ } @@ -277,7 +268,7 @@ uprv_isInvariantUString(const UChar *s, int32_t length) { /* UDataSwapFn implementations used in udataswp.c ------- */ /* convert ASCII to EBCDIC and verify that all characters are invariant */ -U_CFUNC int32_t +U_CAPI int32_t U_EXPORT2 uprv_ebcdicFromAscii(const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode) { diff --git a/icuSources/common/uiter.cpp b/icuSources/common/uiter.cpp index 6ca97508..bfe92c6c 100644 --- a/icuSources/common/uiter.cpp +++ b/icuSources/common/uiter.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -50,11 +50,12 @@ noopCurrent(UCharIterator * /*iter*/) { static uint32_t U_CALLCONV noopGetState(const UCharIterator * /*iter*/) { - return 0; + return UITER_NO_STATE; } static void U_CALLCONV -noopSetState(UCharIterator * /*iter*/, uint32_t /*state*/, UErrorCode * /*pErrorCode*/) { +noopSetState(UCharIterator * /*iter*/, uint32_t /*state*/, UErrorCode *pErrorCode) { + *pErrorCode=U_UNSUPPORTED_ERROR; } static const UCharIterator noopIterator={ diff --git a/icuSources/common/uloc.c b/icuSources/common/uloc.c index ddb1b206..a11193cb 100644 --- a/icuSources/common/uloc.c +++ b/icuSources/common/uloc.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2007, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -31,6 +31,7 @@ #include "unicode/utypes.h" #include "unicode/ustring.h" #include "unicode/uloc.h" +#include "unicode/ures.h" #include "putilimp.h" #include "ustr_imp.h" @@ -113,32 +114,34 @@ static int32_t _installedLocalesCount = 0; */ static const char * const LANGUAGES[] = { "aa", "ab", "ace", "ach", "ada", "ady", "ae", "af", "afa", - "afh", "ak", "akk", "ale", "alg", "am", "an", "ang", "apa", + "afh", "ain", "ak", "akk", "ale", "alg", "alt", "am", "an", + "ang", "anp", "apa", "ar", "arc", "arn", "arp", "art", "arw", "as", "ast", "ath", "aus", "av", "awa", "ay", "az", "ba", "bad", "bai", "bal", "ban", "bas", "bat", "be", "bej", "bem", "ber", "bg", "bh", "bho", "bi", "bik", "bin", "bla", "bm", "bn", "bnt", "bo", "br", "bra", "bs", "btk", "bua", "bug", "byn", "ca", "cad", "cai", "car", "cau", - "ce", "ceb", "cel", "ch", "chb", "chg", "chk", "chm", + "cch", "ce", "ceb", "cel", "ch", "chb", "chg", "chk", "chm", "chn", "cho", "chp", "chr", "chy", "cmc", "co", "cop", "cpe", "cpf", "cpp", "cr", "crh", "crp", "cs", "csb", "cu", "cus", "cv", "cy", "da", "dak", "dar", "day", "de", "del", "den", "dgr", "din", "doi", "dra", "dsb", "dua", "dum", "dv", "dyu", "dz", "ee", "efi", "egy", "eka", "el", "elx", "en", "enm", "eo", "es", "et", "eu", "ewo", "fa", - "fan", "fat", "ff", "fi", "fiu", "fj", "fo", "fon", - "fr", "frm", "fro", "fur", "fy", "ga", "gaa", "gay", - "gba", "gd", "gem", "gez", "gil", "gl", "gmh", "gn", - "goh", "gon", "gor", "got", "grb", "grc", "gu", "gv", - "gwi", "ha", "hai", "haw", "he", "hi", "hil", "him", + "fan", "fat", "ff", "fi", "fil", "fiu", "fj", "fo", "fon", + "fr", "frm", "fro", "frr", "frs", "fur", "fy", + "ga", "gaa", "gay", "gba", "gd", "gem", "gez", "gil", + "gl", "gmh", "gn", "goh", "gon", "gor", "got", "grb", + "grc", "gsw", "gu", "gv", "gwi", + "ha", "hai", "haw", "he", "hi", "hil", "him", "hit", "hmn", "ho", "hr", "hsb", "ht", "hu", "hup", "hy", "hz", "ia", "iba", "id", "ie", "ig", "ii", "ijo", "ik", "ilo", "inc", "ine", "inh", "io", "ira", "iro", "is", "it", "iu", "ja", "jbo", "jpr", "jrb", "jv", "ka", "kaa", "kab", - "kac", "kam", "kar", "kaw", "kbd", "kg", "kha", "khi", + "kac", "kaj", "kam", "kar", "kaw", "kbd", "kcg", "kfo", "kg", "kha", "khi", "kho", "ki", "kj", "kk", "kl", "km", "kmb", "kn", - "ko", "kok", "kos", "kpe", "kr", "krc", "kro", "kru", "ks", + "ko", "kok", "kos", "kpe", "kr", "krc", "krl", "kro", "kru", "ks", "ku", "kum", "kut", "kv", "kw", "ky", "la", "lad", "lah", "lam", "lb", "lez", "lg", "li", "ln", "lo", "lol", "loz", "lt", "lu", "lua", "lui", "lun", "luo", "lus", @@ -146,7 +149,7 @@ static const char * const LANGUAGES[] = { "mdf", "mdr", "men", "mg", "mga", "mh", "mi", "mic", "min", "mis", "mk", "mkh", "ml", "mn", "mnc", "mni", "mno", "mo", "moh", "mos", "mr", "ms", "mt", "mul", "mun", - "mus", "mwr", "my", "myn", "myv", "na", "nah", "nai", "nap", + "mus", "mwl", "mwr", "my", "myn", "myv", "na", "nah", "nai", "nap", "nb", "nd", "nds", "ne", "new", "ng", "nia", "nic", "niu", "nl", "nn", "no", "nog", "non", "nr", "nso", "nub", "nv", "nwc", "ny", "nym", "nyn", "nyo", "nzi", "oc", "oj", @@ -154,12 +157,12 @@ static const char * const LANGUAGES[] = { "pag", "pal", "pam", "pap", "pau", "peo", "phi", "phn", "pi", "pl", "pon", "pra", "pro", "ps", "pt", "qu", "raj", "rap", "rar", "rm", "rn", "ro", "roa", "rom", - "ru", "rw", "sa", "sad", "sah", "sai", "sal", "sam", - "sas", "sat", "sc", "sco", "sd", "se", "sel", "sem", + "ru", "rup", "rw", "sa", "sad", "sah", "sai", "sal", "sam", + "sas", "sat", "sc", "scn", "sco", "sd", "se", "sel", "sem", "sg", "sga", "sgn", "shn", "si", "sid", "sio", "sit", "sk", "sl", "sla", "sm", "sma", "smi", "smj", "smn", "sms", "sn", "snk", "so", "sog", "son", "sq", "sr", - "srr", "ss", "ssa", "st", "su", "suk", "sus", "sux", + "srn", "srr", "ss", "ssa", "st", "su", "suk", "sus", "sux", "sv", "sw", "syr", "ta", "tai", "te", "tem", "ter", "tet", "tg", "th", "ti", "tig", "tiv", "tk", "tkl", "tl", "tlh", "tli", "tmh", "tn", "to", "tog", "tpi", "tr", @@ -168,11 +171,17 @@ static const char * const LANGUAGES[] = { "uz", "vai", "ve", "vi", "vo", "vot", "wa", "wak", "wal", "war", "was", "wen", "wo", "xal", "xh", "yao", "yap", "yi", "yo", "ypk", "za", "zap", "zen", "zh", "znd", - "zu", "zun", + "zu", "zun", "zxx", NULL, "in", "iw", "ji", "jw", "sh", /* obsolete language codes */ NULL }; +static const char* const DEPRECATED_LANGUAGES[]={ + "in", "iw", "ji", "jw", NULL, NULL +}; +static const char* const REPLACEMENT_LANGUAGES[]={ + "id", "he", "yi", "jv", NULL, NULL +}; /** * Table of 3-letter language codes. @@ -193,8 +202,8 @@ NULL static const char * const LANGUAGES_3[] = { /* "aa", "ab", "ace", "ach", "ada", "ady", "ae", "af", "afa", */ "aar", "abk", "ace", "ach", "ada", "ady", "ave", "afr", "afa", -/* "afh", "ak", "akk", "ale", "alg", "am", "an", "ang", "apa", */ - "afh", "aka", "akk", "ale", "alg", "amh", "arg", "ang", "apa", +/* "afh", "ain", "ak", "akk", "ale", "alg", "alt", "am", "an", "ang", "anp", "apa", */ + "afh", "ain", "aka", "akk", "ale", "alg", "alt", "amh", "arg", "ang", "anp", "apa", /* "ar", "arc", "arn", "arp", "art", "arw", "as", "ast", */ "ara", "arc", "arn", "arp", "art", "arw", "asm", "ast", /* "ath", "aus", "av", "awa", "ay", "az", "ba", "bad", */ @@ -207,8 +216,8 @@ static const char * const LANGUAGES_3[] = { "bla", "bam", "ben", "bnt", "bod", "bre", "bra", "bos", /* "btk", "bua", "bug", "byn", "ca", "cad", "cai", "car", "cau", */ "btk", "bua", "bug", "byn", "cat", "cad", "cai", "car", "cau", -/* "ce", "ceb", "cel", "ch", "chb", "chg", "chk", "chm", */ - "che", "ceb", "cel", "cha", "chb", "chg", "chk", "chm", +/* "cch", "ce", "ceb", "cel", "ch", "chb", "chg", "chk", "chm", */ + "cch", "che", "ceb", "cel", "cha", "chb", "chg", "chk", "chm", /* "chn", "cho", "chp", "chr", "chy", "cmc", "co", "cop", */ "chn", "cho", "chp", "chr", "chy", "cmc", "cos", "cop", /* "cpe", "cpf", "cpp", "cr", "crh", "crp", "cs", "csb", "cu", "cus", */ @@ -221,14 +230,14 @@ static const char * const LANGUAGES_3[] = { "dzo", "ewe", "efi", "egy", "eka", "ell", "elx", "eng", /* "enm", "eo", "es", "et", "eu", "ewo", "fa", */ "enm", "epo", "spa", "est", "eus", "ewo", "fas", -/* "fan", "fat", "ff", "fi", "fiu", "fj", "fo", "fon", */ - "fan", "fat", "ful", "fin", "fiu", "fij", "fao", "fon", -/* "fr", "frm", "fro", "fur", "fy", "ga", "gaa", "gay", */ - "fra", "frm", "fro", "fur", "fry", "gle", "gaa", "gay", +/* "fan", "fat", "ff", "fi", "fil", "fiu", "fj", "fo", "fon", */ + "fan", "fat", "ful", "fin", "fil", "fiu", "fij", "fao", "fon", +/* "fr", "frm", "fro", "fur", "frr", "frs", "fy", "ga", "gaa", "gay", */ + "fra", "frm", "fro", "fur", "frr", "frs", "fry", "gle", "gaa", "gay", /* "gba", "gd", "gem", "gez", "gil", "gl", "gmh", "gn", */ "gba", "gla", "gem", "gez", "gil", "glg", "gmh", "grn", -/* "goh", "gon", "gor", "got", "grb", "grc", "gu", "gv", */ - "goh", "gon", "gor", "got", "grb", "grc", "guj", "glv", +/* "goh", "gon", "gor", "got", "grb", "grc", "gsw", "gu", "gv", */ + "goh", "gon", "gor", "got", "grb", "grc", "gsw", "guj", "glv", /* "gwi", "ha", "hai", "haw", "he", "hi", "hil", "him", */ "gwi", "hau", "hai", "haw", "heb", "hin", "hil", "him", /* "hit", "hmn", "ho", "hr", "hsb", "ht", "hu", "hup", "hy", "hz", */ @@ -239,12 +248,12 @@ static const char * const LANGUAGES_3[] = { "ilo", "inc", "ine", "inh", "ido", "ira", "iro", "isl", "ita", /* "iu", "ja", "jbo", "jpr", "jrb", "jv", "ka", "kaa", "kab", */ "iku", "jpn", "jbo", "jpr", "jrb", "jav", "kat", "kaa", "kab", -/* "kac", "kam", "kar", "kaw", "kbd", "kg", "kha", "khi", */ - "kac", "kam", "kar", "kaw", "kbd", "kon", "kha", "khi", +/* "kac", "kaj", "kam", "kar", "kaw", "kbd", "kcg", "kfo", "kg", "kha", "khi",*/ + "kac", "kaj", "kam", "kar", "kaw", "kbd", "kcg", "kfo", "kg", "kha", "khi", /* "kho", "ki", "kj", "kk", "kl", "km", "kmb", "kn", */ "kho", "kik", "kua", "kaz", "kal", "khm", "kmb", "kan", -/* "ko", "kok", "kos", "kpe", "kr", "krc", "kro", "kru", "ks", */ - "kor", "kok", "kos", "kpe", "kau", "krc", "kro", "kru", "kas", +/* "ko", "kok", "kos", "kpe", "kr", "krc", "krl", "kro", "kru", "ks", */ + "kor", "kok", "kos", "kpe", "kau", "krc", "krl", "kro", "kru", "kas", /* "ku", "kum", "kut", "kv", "kw", "ky", "la", "lad", */ "kur", "kum", "kut", "kom", "cor", "kir", "lat", "lad", /* "lah", "lam", "lb", "lez", "lg", "li", "ln", "lo", "lol", */ @@ -259,8 +268,8 @@ static const char * const LANGUAGES_3[] = { "mis", "mkd", "mkh", "mal", "mon", "mnc", "mni", "mno", /* "mo", "moh", "mos", "mr", "ms", "mt", "mul", "mun", */ "mol", "moh", "mos", "mar", "msa", "mlt", "mul", "mun", -/* "mus", "mwr", "my", "myn", "myv", "na", "nah", "nai", "nap", */ - "mus", "mwr", "mya", "myn", "myv", "nau", "nah", "nai", "nap", +/* "mus", "mwl", "mwr", "my", "myn", "myv", "na", "nah", "nai", "nap", */ + "mus", "mwl", "mwr", "mya", "myn", "myv", "nau", "nah", "nai", "nap", /* "nb", "nd", "nds", "ne", "new", "ng", "nia", "nic", */ "nob", "nde", "nds", "nep", "new", "ndo", "nia", "nic", /* "niu", "nl", "nn", "no", "nog", "non", "nr", "nso", "nub", */ @@ -275,18 +284,18 @@ static const char * const LANGUAGES_3[] = { "pli", "pol", "pon", "pra", "pro", "pus", "por", "que", /* "raj", "rap", "rar", "rm", "rn", "ro", "roa", "rom", */ "raj", "rap", "rar", "roh", "run", "ron", "roa", "rom", -/* "ru", "rw", "sa", "sad", "sah", "sai", "sal", "sam", */ - "rus", "kin", "san", "sad", "sah", "sai", "sal", "sam", -/* "sas", "sat", "sc", "sco", "sd", "se", "sel", "sem", */ - "sas", "sat", "srd", "sco", "snd", "sme", "sel", "sem", +/* "ru", "rup", "rw", "sa", "sad", "sah", "sai", "sal", "sam", */ + "rus", "rup", "kin", "san", "sad", "sah", "sai", "sal", "sam", +/* "sas", "sat", "sc", "scn", "sco", "sd", "se", "sel", "sem", */ + "sas", "sat", "srd", "scn", "sco", "snd", "sme", "sel", "sem", /* "sg", "sga", "sgn", "shn", "si", "sid", "sio", "sit", */ "sag", "sga", "sgn", "shn", "sin", "sid", "sio", "sit", /* "sk", "sl", "sla", "sm", "sma", "smi", "smj", "smn", */ "slk", "slv", "sla", "smo", "sma", "smi", "smj", "smn", /* "sms", "sn", "snk", "so", "sog", "son", "sq", "sr", */ "sms", "sna", "snk", "som", "sog", "son", "sqi", "srp", -/* "srr", "ss", "ssa", "st", "su", "suk", "sus", "sux", */ - "srr", "ssw", "ssa", "sot", "sun", "suk", "sus", "sux", +/* "srn", "srr", "ss", "ssa", "st", "su", "suk", "sus", "sux", */ + "srn", "srr", "ssw", "ssa", "sot", "sun", "suk", "sus", "sux", /* "sv", "sw", "syr", "ta", "tai", "te", "tem", "ter", */ "swe", "swa", "syr", "tam", "tai", "tel", "tem", "ter", /* "tet", "tg", "th", "ti", "tig", "tiv", "tk", "tkl", */ @@ -304,7 +313,7 @@ static const char * const LANGUAGES_3[] = { /* "yi", "yo", "ypk", "za", "zap", "zen", "zh", "znd", */ "yid", "yor", "ypk", "zha", "zap", "zen", "zho", "znd", /* "zu", "zun", */ - "zul", "zun", + "zul", "zun", "zxx", NULL, /* "in", "iw", "ji", "jw", "sh", */ "ind", "heb", "yid", "jaw", "srp", @@ -337,7 +346,7 @@ NULL */ static const char * const COUNTRIES[] = { "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", - "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", + "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", @@ -345,11 +354,11 @@ static const char * const COUNTRIES[] = { "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", - "GA", "GB", "GD", "GE", "GF", "GH", "GI", "GL", + "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", - "ID", "IE", "IL", "IN", "IO", "IQ", "IR", "IS", - "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", + "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS", + "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", @@ -365,12 +374,20 @@ static const char * const COUNTRIES[] = { "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", - "WS", "YE", "YT", "YU", "ZA", "ZM", "ZW", + "WS", "YE", "YT", "YU", "ZA", "ZM", "ZW", "ZZ", NULL, "FX", "RO", "TP", "ZR", /* obsolete country codes */ NULL }; +static const char* const DEPRECATED_COUNTRIES[] ={ + "BU", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR", NULL, NULL /* deprecated country list */ +}; +static const char* const REPLACEMENT_COUNTRIES[] = { +/* "BU", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR" */ + "MM", "BJ", "FR", "BF", "VU", "ZW", "TL", "CS", "CD", NULL, NULL /* replacement country codes */ +}; + /** * Table of 3-letter country codes. * @@ -387,8 +404,8 @@ NULL static const char * const COUNTRIES_3[] = { /* "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", */ "AND", "ARE", "AFG", "ATG", "AIA", "ALB", "ARM", "ANT", -/* "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", */ - "AGO", "ATA", "ARG", "ASM", "AUT", "AUS", "ABW", "AZE", +/* "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", */ + "AGO", "ATA", "ARG", "ASM", "AUT", "AUS", "ABW", "ALA", "AZE", /* "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", */ "BIH", "BRB", "BGD", "BEL", "BFA", "BGR", "BHR", "BDI", /* "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", */ @@ -403,16 +420,16 @@ static const char * const COUNTRIES_3[] = { "DMA", "DOM", "DZA", "ECU", "EST", "EGY", "ESH", "ERI", /* "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", */ "ESP", "ETH", "FIN", "FJI", "FLK", "FSM", "FRO", "FRA", -/* "GA", "GB", "GD", "GE", "GF", "GH", "GI", "GL", */ - "GAB", "GBR", "GRD", "GEO", "GUF", "GHA", "GIB", "GRL", +/* "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", */ + "GAB", "GBR", "GRD", "GEO", "GUF", "GGY", "GHA", "GIB", "GRL", /* "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", */ "GMB", "GIN", "GLP", "GNQ", "GRC", "SGS", "GTM", "GUM", /* "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", */ "GNB", "GUY", "HKG", "HMD", "HND", "HRV", "HTI", "HUN", -/* "ID", "IE", "IL", "IN", "IO", "IQ", "IR", "IS", */ - "IDN", "IRL", "ISR", "IND", "IOT", "IRQ", "IRN", "ISL", -/* "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", */ - "ITA", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR", +/* ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS" */ + "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL", +/* "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", */ + "ITA", "JEY", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR", /* "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", */ "COM", "KNA", "PRK", "KOR", "KWT", "CYM", "KAZ", "LAO", /* "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", */ @@ -443,8 +460,8 @@ static const char * const COUNTRIES_3[] = { "TWN", "TZA", "UKR", "UGA", "UMI", "USA", "URY", "UZB", /* "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", */ "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF", -/* "WS", "YE", "YT", "YU", "ZA", "ZM", "ZW", */ - "WSM", "YEM", "MYT", "YUG", "ZAF", "ZMB", "ZWE", +/* "WS", "YE", "YT", "YU", "ZA", "ZM", "ZW", "ZZZ" */ + "WSM", "YEM", "MYT", "YUG", "ZAF", "ZMB", "ZWE", "ZZZ", NULL, /* "FX", "RO", "TP", "ZR", */ "FXX", "ROM", "TMP", "ZAR", @@ -465,6 +482,7 @@ typedef struct CanonicalizationMap { static const CanonicalizationMap CANONICALIZE_MAP[] = { { "", "en_US_POSIX", NULL, NULL }, /* .NET name */ { "C", "en_US_POSIX", NULL, NULL }, /* POSIX name */ + { "posix", "en_US_POSIX", NULL, NULL }, /* POSIX name (alias of C) */ { "art_LOJBAN", "jbo", NULL, NULL }, /* registered name */ { "az_AZ_CYRL", "az_Cyrl_AZ", NULL, NULL }, /* .NET name */ { "az_AZ_LATN", "az_Latn_AZ", NULL, NULL }, /* .NET name */ @@ -498,12 +516,14 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = { { "nl_NL_PREEURO", "nl_NL", "currency", "NLG" }, { "pt_PT_PREEURO", "pt_PT", "currency", "PTE" }, { "sl_ROZAJ", "sl__ROZAJ", NULL, NULL }, /* registered name */ - { "sr_SP_CYRL", "sr_Cyrl_SP", NULL, NULL }, /* .NET name */ - { "sr_SP_LATN", "sr_Latn_SP", NULL, NULL }, /* .NET name */ + { "sr_SP_CYRL", "sr_Cyrl_CS", NULL, NULL }, /* .NET name */ + { "sr_SP_LATN", "sr_Latn_CS", NULL, NULL }, /* .NET name */ + { "sr_YU_CYRILLIC", "sr_Cyrl_CS", NULL, NULL }, /* Linux name */ + { "uz_UZ_CYRILLIC", "uz_Cyrl_UZ", NULL, NULL }, /* Linux name */ { "uz_UZ_CYRL", "uz_Cyrl_UZ", NULL, NULL }, /* .NET name */ { "uz_UZ_LATN", "uz_Latn_UZ", NULL, NULL }, /* .NET name */ { "zh_CHS", "zh_Hans", NULL, NULL }, /* .NET name */ - { "zh_CHT", "zh_TW", NULL, NULL }, /* .NET name TODO: This should be zh_Hant once the locale structure is fixed. */ + { "zh_CHT", "zh_Hant", NULL, NULL }, /* .NET name TODO: This should be zh_Hant once the locale structure is fixed. */ { "zh_GAN", "zh__GAN", NULL, NULL }, /* registered name */ { "zh_GUOYU", "zh", NULL, NULL }, /* registered name */ { "zh_HAKKA", "zh__HAKKA", NULL, NULL }, /* registered name */ @@ -513,7 +533,7 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = { { "zh_XIANG", "zh__XIANG", NULL, NULL }, /* registered name */ { "zh_YUE", "zh__YUE", NULL, NULL }, /* registered name */ { "th_TH_TRADITIONAL", "th_TH", "calendar", "buddhist" }, - { "zh_TW_STROKE", "zh_TW", "collation", "stroke" }, + { "zh_TW_STROKE", "zh_Hant_TW", "collation", "stroke" }, { "zh__PINYIN", "zh", "collation", "pinyin" } }; @@ -524,14 +544,16 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = { static const char * locale_getKeywordsStart(const char *localeID) { - /* TODO This seems odd. No matter what charset we're on, won't '@' - be '@'? Or are we building on one EBCDIC machine and moving the - library to another? */ const char *result = NULL; - static const uint8_t ebcdicSigns[] = { 0x7C, 0x44, 0x66, 0x80, 0xAC, 0xAE, 0xAF, 0xB5, 0xEC, 0xEF, 0x00 }; if((result = uprv_strchr(localeID, '@')) != NULL) { return result; - } else if(U_CHARSET_FAMILY == U_EBCDIC_FAMILY) { + } +#if (U_CHARSET_FAMILY == U_EBCDIC_FAMILY) + else { + /* We do this because the @ sign is variant, and the @ sign used on one + EBCDIC machine won't be compiled the same way on other EBCDIC based + machines. */ + static const uint8_t ebcdicSigns[] = { 0x7C, 0x44, 0x66, 0x80, 0xAC, 0xAE, 0xAF, 0xB5, 0xEC, 0xEF, 0x00 }; const uint8_t *charToFind = ebcdicSigns; while(*charToFind) { if((result = uprv_strchr(localeID, *charToFind)) != NULL) { @@ -540,6 +562,7 @@ locale_getKeywordsStart(const char *localeID) { charToFind++; } } +#endif return NULL; } @@ -552,7 +575,7 @@ locale_getKeywordsStart(const char *localeID) { static int32_t locale_canonKeywordName(char *buf, const char *keywordName, UErrorCode *status) { int32_t i; - int32_t keywordNameLen = uprv_strlen(keywordName); + int32_t keywordNameLen = (int32_t)uprv_strlen(keywordName); if(keywordNameLen >= ULOC_KEYWORD_BUFFER_LEN) { /* keyword name too long for internal buffer */ @@ -660,10 +683,10 @@ _getKeywords(const char *localeID, while(*(pos - i - 1) == ' ') { i++; } - keywordList[numKeywords].valueLen = pos - equalSign - i; + keywordList[numKeywords].valueLen = (int32_t)(pos - equalSign - i); pos++; } else { - i = uprv_strlen(equalSign); + i = (int32_t)uprv_strlen(equalSign); while(equalSign[i-1] == ' ') { i--; } @@ -699,9 +722,9 @@ _getKeywords(const char *localeID, return 0; } uprv_strcpy(keywordList[numKeywords].keyword, addKeyword); - keywordList[numKeywords].keywordLen = uprv_strlen(addKeyword); + keywordList[numKeywords].keywordLen = (int32_t)uprv_strlen(addKeyword); keywordList[numKeywords].valueStart = addValue; - keywordList[numKeywords].valueLen = uprv_strlen(addValue); + keywordList[numKeywords].valueLen = (int32_t)uprv_strlen(addValue); ++numKeywords; } } else { @@ -775,7 +798,6 @@ uloc_getKeywordValue(const char* localeID, UErrorCode* status) { const char* nextSeparator = NULL; - int32_t keywordNameLen; char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; char localeKeywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; int32_t i = 0; @@ -789,7 +811,7 @@ uloc_getKeywordValue(const char* localeID, return 0; } - keywordNameLen = locale_canonKeywordName(keywordNameBuffer, keywordName, status); + locale_canonKeywordName(keywordNameBuffer, keywordName, status); if(U_FAILURE(*status)) { return 0; } @@ -833,9 +855,9 @@ uloc_getKeywordValue(const char* localeID, startSearchHere--; } uprv_strncpy(buffer, nextSeparator, startSearchHere - nextSeparator); - result = u_terminateChars(buffer, bufferCapacity, startSearchHere - nextSeparator, status); + result = u_terminateChars(buffer, bufferCapacity, (int32_t)(startSearchHere - nextSeparator), status); } else if(!startSearchHere && (int32_t)uprv_strlen(nextSeparator) < bufferCapacity) { /* last item in string */ - i = uprv_strlen(nextSeparator); + i = (int32_t)uprv_strlen(nextSeparator); while(nextSeparator[i - 1] == ' ') { i--; } @@ -845,9 +867,9 @@ uloc_getKeywordValue(const char* localeID, /* give a bigger buffer, please */ *status = U_BUFFER_OVERFLOW_ERROR; if(startSearchHere) { - result = startSearchHere - nextSeparator; + result = (int32_t)(startSearchHere - nextSeparator); } else { - result = uprv_strlen(nextSeparator); + result = (int32_t)uprv_strlen(nextSeparator); } } return result; @@ -882,11 +904,22 @@ uloc_setKeywordValue(const char* keywordName, if(U_FAILURE(*status)) { return -1; } + if(bufferCapacity>1) { + bufLen = (int32_t)uprv_strlen(buffer); + } else { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + if(bufferCapacity1) { - bufLen = uprv_strlen(buffer); - } else { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } if(startSearchHere == NULL || (startSearchHere[1]==0)) { if(!keywordValue) { /* no keywords = nothing to remove */ return bufLen; @@ -965,10 +992,10 @@ uloc_setKeywordValue(const char* keywordName, /* we actually found the keyword. Change the value */ if (nextSeparator) { keywordAtEnd = 0; - foundValueLen = nextSeparator - nextEqualsign; + foundValueLen = (int32_t)(nextSeparator - nextEqualsign); } else { keywordAtEnd = 1; - foundValueLen = uprv_strlen(nextEqualsign); + foundValueLen = (int32_t)uprv_strlen(nextEqualsign); } if(keywordValue) { /* adding a value - not removing */ if(foundValueLen == keywordValueLen) { @@ -1001,11 +1028,11 @@ uloc_setKeywordValue(const char* keywordName, if(keywordAtEnd) { /* zero out the ';' or '@' just before startSearchhere */ keywordStart[-1] = 0; - return (keywordStart-buffer)-1; /* (string length without keyword) minus separator */ + return (int32_t)((keywordStart-buffer)-1); /* (string length without keyword) minus separator */ } else { uprv_memmove(keywordStart, nextSeparator+1, bufLen-((nextSeparator+1)-buffer)); keywordStart[bufLen-((nextSeparator+1)-buffer)]=0; - return bufLen-((nextSeparator+1)-keywordStart); + return (int32_t)(bufLen-((nextSeparator+1)-keywordStart)); } } } else if(rc<0){ /* end match keyword */ @@ -1123,6 +1150,22 @@ _copyCount(char *dest, int32_t destCapacity, const char *src) { } } +static const char* +uloc_getCurrentCountryID(const char* oldID){ + int32_t offset = _findIndex(DEPRECATED_COUNTRIES, oldID); + if (offset >= 0) { + return REPLACEMENT_COUNTRIES[offset]; + } + return oldID; +} +static const char* +uloc_getCurrentLanguageID(const char* oldID){ + int32_t offset = _findIndex(DEPRECATED_LANGUAGES, oldID); + if (offset >= 0) { + return REPLACEMENT_LANGUAGES[offset]; + } + return oldID; +} /* * the internal functions _getLanguage(), _getCountry(), _getVariant() * avoid duplicating code to handle the earlier locale ID pieces @@ -1355,7 +1398,7 @@ _deleteVariant(char* variants, int32_t variantsLen, return delta; } ++p; - variantsLen -= p - variants; + variantsLen -= (int32_t)(p - variants); variants = p; } } @@ -1393,7 +1436,7 @@ uloc_kw_nextKeyword(UEnumeration* en, const char* result = ((UKeywordsContext *)en->context)->current; int32_t len = 0; if(*result) { - len = uprv_strlen(((UKeywordsContext *)en->context)->current); + len = (int32_t)uprv_strlen(((UKeywordsContext *)en->context)->current); ((UKeywordsContext *)en->context)->current += len+1; } else { result = NULL; @@ -1498,6 +1541,9 @@ uloc_openKeywords(const char* localeID, #define OPTION_SET(options, mask) ((options & mask) != 0) +static const char i_default[] = {'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'}; +#define I_DEFAULT_LENGTH (sizeof i_default / sizeof i_default[0]) + /** * Canonicalize the given localeID, to level 1 or to level 2, * depending on the options. To specify level 1, pass in options=0. @@ -1513,6 +1559,7 @@ _canonicalize(const char* localeID, UErrorCode* err) { int32_t j, len, fieldCount=0, scriptSize=0, variantSize=0, nameCapacity; char localeBuffer[ULOC_FULLNAME_CAPACITY]; + const char* origLocaleID = localeID; const char* keywordAssign = NULL; const char* separatorIndicator = NULL; const char* addKeyword = NULL; @@ -1542,7 +1589,16 @@ _canonicalize(const char* localeID, /* get all pieces, one after another, and separate with '_' */ len=_getLanguage(localeID, name, nameCapacity, &localeID); - if(_isIDSeparator(*localeID)) { + + if(len == I_DEFAULT_LENGTH && uprv_strncmp(origLocaleID, i_default, len) == 0) { + const char *d = uloc_getDefault(); + + len = uprv_strlen(d); + + if (name != NULL) { + uprv_strncpy(name, d, len); + } + } else if(_isIDSeparator(*localeID)) { const char *scriptID; ++fieldCount; @@ -1663,7 +1719,7 @@ _canonicalize(const char* localeID, /* Look up the ID in the canonicalization map */ for (j=0; j<(int32_t)(sizeof(CANONICALIZE_MAP)/sizeof(CANONICALIZE_MAP[0])); j++) { const char* id = CANONICALIZE_MAP[j].id; - int32_t n = uprv_strlen(id); + int32_t n = (int32_t)uprv_strlen(id); if (len == n && uprv_strncmp(name, id, n) == 0) { if (n == 0 && localeID != NULL) { break; /* Don't remap "" if keywords present */ @@ -1733,7 +1789,7 @@ uloc_getParent(const char* localeID, i=0; } - if(i>0) { + if(i>0 && parent != localeID) { uprv_memcpy(parent, localeID, uprv_min(i, parentCapacity)); } return u_terminateChars(parent, parentCapacity, i, err); @@ -1824,7 +1880,6 @@ uloc_getVariant(const char* localeID, UErrorCode* err) { int32_t i=0; - UBool haveVariant=FALSE; if(err==NULL || U_FAILURE(*err)) { return 0; @@ -1848,7 +1903,6 @@ uloc_getVariant(const char* localeID, if (_isIDSeparator(*localeID)) { _getCountry(localeID+1, NULL, 0, &localeID); if(_isIDSeparator(*localeID)) { - haveVariant=TRUE; i=_getVariant(localeID+1, *localeID, variant, variantCapacity); } } @@ -1946,6 +2000,25 @@ uloc_getLCID(const char* localeID) return uprv_convertToLCID(langID, localeID, &status); } +U_CAPI int32_t U_EXPORT2 +uloc_getLocaleForLCID(uint32_t hostid, char *locale, int32_t localeCapacity, + UErrorCode *status) +{ + int32_t length; + const char *posix = uprv_convertToPosix(hostid, status); + if (U_FAILURE(*status) || posix == NULL) { + return 0; + } + length = (int32_t)uprv_strlen(posix); + if (length+1 > localeCapacity) { + *status = U_BUFFER_OVERFLOW_ERROR; + } + else { + uprv_strcpy(locale, posix); + } + return length; +} + /* ### Default locale **************************************************/ U_CAPI const char* U_EXPORT2 @@ -1988,153 +2061,107 @@ _res_getTableStringWithFallback(const char *path, const char *locale, int32_t *pLength, UErrorCode *pErrorCode) { - char localeBuffer[ULOC_FULLNAME_CAPACITY*4]; - UResourceBundle *rb, table; - const UChar *item; +/* char localeBuffer[ULOC_FULLNAME_CAPACITY*4];*/ + UResourceBundle *rb=NULL, table, subTable; + const UChar *item=NULL; UErrorCode errorCode; char explicitFallbackName[ULOC_FULLNAME_CAPACITY] = {0}; - int32_t efnLen =0; - const UChar* ef = NULL; - UBool overrideExplicitFallback = FALSE; - for(;;) { - /* - * open the bundle for the current locale - * this falls back through the locale's chain to root - */ - errorCode=U_ZERO_ERROR; - rb=ures_open(path, locale, &errorCode); - if(U_FAILURE(errorCode)) { - /* total failure, not even root could be opened */ - *pErrorCode=errorCode; - return NULL; - } else if(errorCode==U_USING_DEFAULT_WARNING || - (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING) - ) { - /* set the "strongest" error code (success->fallback->default->failure) */ - *pErrorCode=errorCode; - } - - /* - * try to open the requested table - * this falls back through the locale's chain to root, but not through the default locale - */ - errorCode=U_ZERO_ERROR; + + /* + * open the bundle for the current locale + * this falls back through the locale's chain to root + */ + errorCode=U_ZERO_ERROR; + rb=ures_open(path, locale, &errorCode); + if(U_FAILURE(errorCode)) { + /* total failure, not even root could be opened */ + *pErrorCode=errorCode; + return NULL; + } else if(errorCode==U_USING_DEFAULT_WARNING || + (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING) + ) { + /* set the "strongest" error code (success->fallback->default->failure) */ + *pErrorCode=errorCode; + } + + for(;;){ ures_initStackObject(&table); - ures_getByKey(rb, tableKey, &table, &errorCode); - if(U_FAILURE(errorCode)) { - /* no such table anywhere in this fallback chain */ - ures_close(rb); - *pErrorCode=errorCode; - return NULL; - } else if(errorCode==U_USING_DEFAULT_WARNING || - (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING) - ) { - /* set the "strongest" error code (success->fallback->default->failure) */ - *pErrorCode=errorCode; + ures_initStackObject(&subTable); + ures_getByKeyWithFallback(rb, tableKey, &table, &errorCode); + if (subTableKey != NULL) { + /* + ures_getByKeyWithFallback(&table,subTableKey, &subTable, &errorCode); + item = ures_getStringByKeyWithFallback(&subTable, itemKey, pLength, &errorCode); + if(U_FAILURE(errorCode)){ + *pErrorCode = errorCode; + } + + break;*/ + + ures_getByKeyWithFallback(&table,subTableKey, &table, &errorCode); } - - /* check if the fallback token is set */ - ef = ures_getStringByKey(&table, "Fallback", &efnLen, &errorCode); if(U_SUCCESS(errorCode)){ - /* set the fallback chain */ - u_UCharsToChars(ef, explicitFallbackName, efnLen); - /* null terminate the buffer */ - explicitFallbackName[efnLen]=0; - }else if(errorCode==U_USING_DEFAULT_WARNING || - (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING) - ) { - /* set the "strongest" error code (success->fallback->default->failure) */ - *pErrorCode=errorCode; - } - - /* try to open the requested item in the table */ - errorCode=U_ZERO_ERROR; - if(subTableKey == NULL){ - item=ures_getStringByKey(&table, itemKey, pLength, &errorCode); - }else{ - UResourceBundle subTable; - ures_initStackObject(&subTable); - ures_getByKey(&table, subTableKey, &subTable, &errorCode); - item = ures_getStringByKey(&subTable, itemKey, pLength, &errorCode); - ures_close(&subTable); - } - if(U_SUCCESS(errorCode)) { - /* if the item for the key is empty ... override the explicit fall back set */ - if(item[0]==0 && efnLen > 0){ - overrideExplicitFallback = TRUE; - }else{ - /* we got the requested item! */ - ures_close(&table); - ures_close(rb); - - if(errorCode==U_USING_DEFAULT_WARNING || - (errorCode==U_USING_FALLBACK_WARNING && *pErrorCode!=U_USING_DEFAULT_WARNING) - ) { - /* set the "strongest" error code (success->fallback->default->failure) */ - *pErrorCode=errorCode; + item = ures_getStringByKeyWithFallback(&table, itemKey, pLength, &errorCode); + if(U_FAILURE(errorCode)){ + const char* replacement = NULL; + *pErrorCode = errorCode; /*save the errorCode*/ + errorCode = U_ZERO_ERROR; + /* may be a deprecated code */ + if(uprv_strcmp(tableKey, "Countries")==0){ + replacement = uloc_getCurrentCountryID(itemKey); + }else if(uprv_strcmp(tableKey, "Languages")==0){ + replacement = uloc_getCurrentLanguageID(itemKey); } - - /* - * It is safe to close the bundle and still return the - * string pointer because resource bundles are - * cached until u_cleanup(). - */ - return item; + /*pointer comparison is ok since uloc_getCurrentCountryID & uloc_getCurrentLanguageID return the key itself is replacement is not found*/ + if(replacement!=NULL && itemKey != replacement){ + item = ures_getStringByKeyWithFallback(&table, replacement, pLength, &errorCode); + if(U_SUCCESS(errorCode)){ + *pErrorCode = errorCode; + break; + } + } + }else{ + break; } } + + if(U_FAILURE(errorCode)){ - /* - * We get here if the item was not found. - * We will follow the chain to the parent locale bundle and look in - * the table there. - */ - - /* get the real locale ID for this table */ - errorCode=U_ZERO_ERROR; - locale=ures_getLocale(&table, &errorCode); - /* keep table and rb open until we are done using the locale string owned by the table bundle */ - if(U_FAILURE(errorCode)) { - /* error getting the locale ID for an open RB - should never happen */ - ures_close(&table); - ures_close(rb); - *pErrorCode=U_INTERNAL_PROGRAM_ERROR; - return NULL; - } + /* still can't figure out ?.. try the fallback mechanism */ + int32_t len = 0; + const UChar* fallbackLocale = NULL; + *pErrorCode = errorCode; + errorCode = U_ZERO_ERROR; - if(*locale==0 || 0==uprv_strcmp(locale, _kRootName) || 0==uprv_strcmp(locale,explicitFallbackName)) { - /* end of fallback; even root does not have the requested item either */ - ures_close(&table); + fallbackLocale = ures_getStringByKeyWithFallback(&table, "Fallback", &len, &errorCode); + if(U_FAILURE(errorCode)){ + *pErrorCode = errorCode; + break; + } + + u_UCharsToChars(fallbackLocale, explicitFallbackName, len); + + /* guard against recursive fallback */ + if(uprv_strcmp(explicitFallbackName, locale)==0){ + *pErrorCode = U_INTERNAL_PROGRAM_ERROR; + break; + } ures_close(rb); - *pErrorCode=U_MISSING_RESOURCE_ERROR; - return NULL; - } - - /* could not find the table, or its item, try to fall back to a different RB and table */ - errorCode=U_ZERO_ERROR; - if(efnLen > 0 && overrideExplicitFallback == FALSE){ - /* continue the fallback lookup with the explicit fallback that is requested */ - locale = explicitFallbackName; - }else{ - uloc_getParent(locale, localeBuffer, sizeof(localeBuffer), &errorCode); - if(U_FAILURE(errorCode) || errorCode==U_STRING_NOT_TERMINATED_WARNING) { - /* error getting the parent locale ID - should never happen */ - *pErrorCode=U_INTERNAL_PROGRAM_ERROR; - return NULL; + rb = ures_open(NULL, explicitFallbackName, &errorCode); + if(U_FAILURE(errorCode)){ + *pErrorCode = errorCode; + break; } - - /* continue the fallback lookup with the parent locale ID */ - locale=localeBuffer; - - /* adjust error code as we fall back */ - if (uprv_strlen(locale) == 0) /* Falling back to root locale? */ - *pErrorCode = U_USING_DEFAULT_WARNING; - else if (*pErrorCode != U_USING_DEFAULT_WARNING) - *pErrorCode = U_USING_FALLBACK_WARNING; + /* succeeded in opening the fallback bundle .. continue and try to fetch the item */ + }else{ + break; } - /* done with the locale string - ready to close table and rb */ - ures_close(&table); - ures_close(rb); } + /* done with the locale string - ready to close table and rb */ + ures_close(&subTable); + ures_close(&table); + ures_close(rb); + return item; } static int32_t @@ -2146,7 +2173,7 @@ _getStringOrCopyKey(const char *path, const char *locale, UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode) { const UChar *s = NULL; - int32_t length; + int32_t length = 0; if(itemKey==NULL) { /* top-level item: normal resource bundle access */ @@ -2796,7 +2823,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult const char *t; int32_t res; int32_t i; - int32_t l = uprv_strlen(httpAcceptLanguage); + int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage); int32_t jSize; j = smallBuffer; @@ -2840,7 +2867,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult /* eat spaces prior to semi */ for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--) ; - j[n].locale = uprv_strndup(s,(t+1)-s); + j[n].locale = uprv_strndup(s,(int32_t)((t+1)-s)); uloc_canonicalize(j[n].locale,tmp,sizeof(tmp)/sizeof(tmp[0]),status); if(strcmp(j[n].locale,tmp)) { uprv_free(j[n].locale); @@ -2938,7 +2965,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, #if defined(ULOC_DEBUG) fprintf(stderr," %s\n", l); #endif - len = uprv_strlen(l); + len = (int32_t)uprv_strlen(l); if(!uprv_strcmp(acceptList[i], l)) { if(outResult) { *outResult = ULOC_ACCEPT_VALID; @@ -2978,7 +3005,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, #if defined(ULOC_DEBUG) fprintf(stderr," %s\n", l); #endif - len = uprv_strlen(l); + len = (int32_t)uprv_strlen(l); if(!uprv_strcmp(fallbackList[i], l)) { if(outResult) { *outResult = ULOC_ACCEPT_FALLBACK; @@ -2989,11 +3016,11 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, if(len>0) { uprv_strncpy(result, l, uprv_min(len, resultAvailable)); } - for(i=0;i +# include "cmemory.h" typedef HANDLE MemoryMap; @@ -46,7 +49,7 @@ # define MAP_IMPLEMENTATION MAP_WIN32 /* ### Todo: properly auto detect mmap(). Until then, just add your platform here. */ -#elif U_HAVE_MMAP || defined(U_AIX) || defined(U_HPUX) || defined(OS390) || defined(PTX) +#elif U_HAVE_MMAP || defined(U_AIX) || defined(U_HPUX) || defined(OS390) typedef size_t MemoryMap; # define IS_MAP(map) ((map)!=0) @@ -81,16 +84,16 @@ # define MAP_IMPLEMENTATION MAP_POSIX # endif -#else /* unknown platform, no memory map implementation: use FileStream/uprv_malloc() instead */ +#else /* unknown platform, no memory map implementation: use stdio.h and uprv_malloc() instead */ -# include "filestrm.h" +# include # include "cmemory.h" typedef void *MemoryMap; # define IS_MAP(map) ((map)!=NULL) -# define MAP_IMPLEMENTATION MAP_FILE_STREAM +# define MAP_IMPLEMENTATION MAP_STDIO #endif @@ -103,7 +106,17 @@ * functions used by the rest of the implementation.* * * *----------------------------------------------------------------------------*/ -#if MAP_IMPLEMENTATION==MAP_WIN32 +#if MAP_IMPLEMENTATION==MAP_NONE + UBool + uprv_mapFile(UDataMemory *pData, const char *path) { + UDataMemory_init(pData); /* Clear the output struct. */ + return FALSE; /* no file access */ + } + + void uprv_unmapFile(UDataMemory *pData) { + /* nothing to do */ + } +#elif MAP_IMPLEMENTATION==MAP_WIN32 UBool uprv_mapFile( UDataMemory *pData, /* Fill in with info on the result doing the mapping. */ @@ -113,6 +126,9 @@ { HANDLE map; HANDLE file; + SECURITY_ATTRIBUTES mappingAttributes; + SECURITY_ATTRIBUTES *mappingAttributesPtr = NULL; + SECURITY_DESCRIPTOR securityDesc; UDataMemory_init(pData); /* Clear the output struct. */ @@ -124,8 +140,24 @@ return FALSE; } + /* Declare and initialize a security descriptor. + This is required for multiuser systems on Windows 2000 SP4 and beyond */ + if (InitializeSecurityDescriptor(&securityDesc, SECURITY_DESCRIPTOR_REVISION)) { + /* give the security descriptor a Null Dacl done using the "TRUE, (PACL)NULL" here */ + if (SetSecurityDescriptorDacl(&securityDesc, TRUE, (PACL)NULL, FALSE)) { + /* Make the security attributes point to the security descriptor */ + uprv_memset(&mappingAttributes, 0, sizeof(mappingAttributes)); + mappingAttributes.nLength = sizeof(mappingAttributes); + mappingAttributes.lpSecurityDescriptor = &securityDesc; + mappingAttributes.bInheritHandle = FALSE; /* object uninheritable */ + mappingAttributesPtr = &mappingAttributes; + } + } + /* else creating security descriptors can fail when we are on Windows 98, + and mappingAttributesPtr == NULL for that case. */ + /* create an unnamed Windows file-mapping object for the specified file */ - map=CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL); + map=CreateFileMapping(file, mappingAttributesPtr, PAGE_READONLY, 0, 0, NULL); CloseHandle(file); if(map==NULL) { return FALSE; @@ -209,42 +241,56 @@ -#elif MAP_IMPLEMENTATION==MAP_FILE_STREAM +#elif MAP_IMPLEMENTATION==MAP_STDIO + /* copy of the filestrm.c/T_FileStream_size() implementation */ + static int32_t + umap_fsize(FILE *f) { + int32_t savedPos = ftell(f); + int32_t size = 0; + + /*Changes by Bertrand A. D. doesn't affect the current position + goes to the end of the file before ftell*/ + fseek(f, 0, SEEK_END); + size = (int32_t)ftell(f); + fseek(f, savedPos, SEEK_SET); + return size; + } + UBool uprv_mapFile(UDataMemory *pData, const char *path) { - FileStream *file; + FILE *file; int32_t fileLength; void *p; UDataMemory_init(pData); /* Clear the output struct. */ /* open the input file */ - file=T_FileStream_open(path, "rb"); + file=fopen(path, "rb"); if(file==NULL) { return FALSE; } /* get the file length */ - fileLength=T_FileStream_size(file); - if(T_FileStream_error(file) || fileLength<=20) { - T_FileStream_close(file); + fileLength=umap_fsize(file); + if(ferror(file) || fileLength<=20) { + fclose(file); return FALSE; } /* allocate the memory to hold the file data */ p=uprv_malloc(fileLength); if(p==NULL) { - T_FileStream_close(file); + fclose(file); return FALSE; } /* read the file */ - if(fileLength!=T_FileStream_read(file, p, fileLength)) { + if(fileLength!=fread(p, 1, fileLength, file)) { uprv_free(p); - T_FileStream_close(file); + fclose(file); return FALSE; } - T_FileStream_close(file); + fclose(file); pData->map=p; pData->pHeader=(const DataHeader *)p; pData->mapAddr=p; @@ -446,5 +492,3 @@ #else # error MAP_IMPLEMENTATION is set incorrectly #endif - - diff --git a/icuSources/common/umath.c b/icuSources/common/umath.c new file mode 100644 index 00000000..4a571143 --- /dev/null +++ b/icuSources/common/umath.c @@ -0,0 +1,24 @@ +/* +****************************************************************************** +* +* Copyright (C) 1997-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +****************************************************************************** +* This file contains platform independent math. +*/ + +#include "putilimp.h" + +U_CAPI int32_t U_EXPORT2 +uprv_max(int32_t x, int32_t y) +{ + return (x > y ? x : y); +} + +U_CAPI int32_t U_EXPORT2 +uprv_min(int32_t x, int32_t y) +{ + return (x > y ? y : x); +} + diff --git a/icuSources/common/umutex.c b/icuSources/common/umutex.c index 5cf9e4ff..22396f5e 100644 --- a/icuSources/common/umutex.c +++ b/icuSources/common/umutex.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -18,10 +18,22 @@ ****************************************************************************** */ +#include "unicode/utypes.h" +#include "uassert.h" +#include "ucln_cmn.h" + +#if defined(U_DARWIN) +#include +#if (ICU_USE_THREADS == 1) && defined(MAC_OS_X_VERSION_10_4) && defined(MAC_OS_X_VERSION_MIN_REQUIRED) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4) +#include +#define USE_MAC_OS_ATOMIC_INCREMENT 1 +#endif +#endif + /* Assume POSIX, and modify as necessary below */ #define POSIX -#if defined(_WIN32) +#if defined(U_WINDOWS) #undef POSIX #endif #if defined(macintosh) @@ -31,18 +43,12 @@ #undef POSIX #endif - -#include "unicode/utypes.h" -#include "uassert.h" -#include "ucln_cmn.h" - - #if defined(POSIX) && (ICU_USE_THREADS==1) # include /* must be first, so that we get the multithread versions of things. */ #endif /* POSIX && (ICU_USE_THREADS==1) */ -#ifdef WIN32 +#ifdef U_WINDOWS # define WIN32_LEAN_AND_MEAN # define VC_EXTRALEAN # define NOUSER @@ -91,7 +97,7 @@ static UMTX gIncDecMutex = NULL; static UBool gMutexPoolInitialized = FALSE; static char gMutexesInUse[MAX_MUTEXES]; -#if defined(WIN32) +#if defined(U_WINDOWS) /*------------------------------------------------------------- * * WINDOWS platform variable declarations @@ -206,7 +212,7 @@ umtx_lock(UMTX *mutex) } else { #if (ICU_USE_THREADS == 1) -#if defined(WIN32) +#if defined(U_WINDOWS) EnterCriticalSection((CRITICAL_SECTION*) *mutex); #elif defined(POSIX) pthread_mutex_lock((pthread_mutex_t*) *mutex); @@ -214,14 +220,14 @@ umtx_lock(UMTX *mutex) #endif /* ICU_USE_THREADS==1 */ } -#if defined(WIN32) && defined(U_DEBUG) && (ICU_USE_THREADS==1) +#if defined(U_WINDOWS) && defined(U_DEBUG) && (ICU_USE_THREADS==1) if (mutex == &gGlobalMutex) { /* Detect Reentrant locking of the global mutex. */ gRecursionCount++; /* Recursion causes deadlocks on Unixes. */ U_ASSERT(gRecursionCount == 1); /* Detection works on Windows. Debug problems there. */ } /* This handles gGlobalMutex too, but only if there is no pMutexLockFn */ else if (pMutexLockFn == NULL) { /* see comments above */ - int i = ((CRITICAL_SECTION*)*mutex) - &gMutexes[0]; + size_t i = ((CRITICAL_SECTION*)*mutex) - &gMutexes[0]; U_ASSERT(i >= 0 && i < MAX_MUTEXES); ++gRecursionCountPool[i]; @@ -256,14 +262,14 @@ umtx_unlock(UMTX* mutex) return; } -#if defined (WIN32) && defined (U_DEBUG) && (ICU_USE_THREADS==1) +#if defined (U_WINDOWS) && defined (U_DEBUG) && (ICU_USE_THREADS==1) if (mutex == &gGlobalMutex) { gRecursionCount--; U_ASSERT(gRecursionCount == 0); /* Detect unlock of an already unlocked mutex */ } /* This handles gGlobalMutex too, but only if there is no pMutexLockFn */ else if (pMutexLockFn == NULL) { /* see comments above */ - int i = ((CRITICAL_SECTION*)*mutex) - &gMutexes[0]; + size_t i = ((CRITICAL_SECTION*)*mutex) - &gMutexes[0]; U_ASSERT(i >= 0 && i < MAX_MUTEXES); --gRecursionCountPool[i]; @@ -283,7 +289,7 @@ umtx_unlock(UMTX* mutex) (*pMutexUnlockFn)(gMutexContext, mutex); } else { #if (ICU_USE_THREADS==1) -#if defined (WIN32) +#if defined (U_WINDOWS) LeaveCriticalSection((CRITICAL_SECTION*)*mutex); #elif defined (POSIX) pthread_mutex_unlock((pthread_mutex_t*)*mutex); @@ -326,7 +332,7 @@ static void initGlobalMutex() { * for Windows, init the pool of critical sections that we * will use as needed for ICU mutexes. */ -#if defined (WIN32) +#if defined (U_WINDOWS) if (gMutexPoolInitialized == FALSE) { int i; for (i=0; imaxISOCommentLength) { - maxISOCommentLength=length; - } + /*length=calcNameSetLength(tokens, tokenCount, tokenStrings, tokenLengths, gISOCommentSet, &line, lineLimit);*/ } ++group; @@ -1397,7 +1386,6 @@ calcGroupNameSetsLengths(int32_t maxNameLength) { } /* set gMax... - name length last for threading */ - gMaxISOCommentLength=maxISOCommentLength; gMaxNameLength=maxNameLength; } @@ -1696,29 +1684,13 @@ uprv_getMaxCharNameLength() { } } -#if 0 -/* -Currently not used but left for future use. Probably by UnicodeSet. -urename.h and uprops.h changed accordingly. -*/ -U_CAPI int32_t U_EXPORT2 -uprv_getMaxISOCommentLength() { - UErrorCode errorCode=U_ZERO_ERROR; - if(calcNameSetsLengths(&errorCode)) { - return gMaxISOCommentLength; - } else { - return 0; - } -} -#endif - /** * Converts the char set cset into a Unicode set uset. * @param cset Set of 256 bit flags corresponding to a set of chars. * @param uset USet to receive characters. Existing contents are deleted. */ static void -charSetToUSet(uint32_t cset[8], USetAdder *sa) { +charSetToUSet(uint32_t cset[8], const USetAdder *sa) { UChar us[256]; char cs[256]; @@ -1755,25 +1727,10 @@ charSetToUSet(uint32_t cset[8], USetAdder *sa) { * @param set USet to receive characters. */ U_CAPI void U_EXPORT2 -uprv_getCharNameCharacters(USetAdder *sa) { +uprv_getCharNameCharacters(const USetAdder *sa) { charSetToUSet(gNameSet, sa); } -#if 0 -/* -Currently not used but left for future use. Probably by UnicodeSet. -urename.h and uprops.h changed accordingly. -*/ -/** - * Fills set with characters that are used in Unicode character names. - * @param set USetAdder to receive characters. - */ -U_CAPI void U_EXPORT2 -uprv_getISOCommentCharacters(USetAdder *sa) { - charSetToUSet(gISOCommentSet, sa); -} -#endif - /* data swapping ------------------------------------------------------------ */ /* @@ -1820,8 +1777,8 @@ makeTokenMap(const UDataSwapper *ds, c1=(uint8_t)i; ds->swapInvChars(ds, &c1, 1, &c2, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "unames/makeTokenMap() finds variant character 0x%02x used (input charset family %d) - %s\n", - i, ds->inCharset, u_errorName(*pErrorCode)); + udata_printError(ds, "unames/makeTokenMap() finds variant character 0x%02x used (input charset family %d)\n", + i, ds->inCharset); return; } @@ -2000,8 +1957,7 @@ uchar_swapNames(const UDataSwapper *ds, udata_swapInvStringBlock(ds, inBytes+tokenStringOffset, (int32_t)(groupsOffset-tokenStringOffset), outBytes+tokenStringOffset, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "uchar_swapNames(token strings) failed - %s\n", - u_errorName(*pErrorCode)); + udata_printError(ds, "uchar_swapNames(token strings) failed\n"); return 0; } @@ -2080,31 +2036,19 @@ uchar_swapNames(const UDataSwapper *ds, ds->swapInvChars(ds, inRange+1, (int32_t)uprv_strlen((const char *)(inRange+1)), outRange+1, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "uchar_swapNames(prefix string of algorithmic range %u) failed - %s\n", - i, u_errorName(*pErrorCode)); + udata_printError(ds, "uchar_swapNames(prefix string of algorithmic range %u) failed\n", + i); return 0; } break; case 1: { /* swap factors and the prefix and factor strings */ - uint16_t factors[8]; - uint32_t j, factorsCount; + uint32_t factorsCount; factorsCount=inRange->variant; - if(factorsCount==0 || factorsCount>LENGTHOF(factors)) { - udata_printError(ds, "uchar_swapNames(): too many factors (%u) in algorithmic range %u\n", - factorsCount, i); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } - - /* read and swap the factors */ p=(const uint16_t *)(inRange+1); q=(uint16_t *)(outRange+1); - for(j=0; jreadUInt16(p[j]); - } ds->swapArray16(ds, p, (int32_t)(factorsCount*2), q, pErrorCode); /* swap the strings, up to the last terminating NUL */ diff --git a/icuSources/common/unicode/brkiter.h b/icuSources/common/unicode/brkiter.h index 9e397128..ba65650b 100644 --- a/icuSources/common/unicode/brkiter.h +++ b/icuSources/common/unicode/brkiter.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -22,6 +22,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Break Iterator. + */ + #if UCONFIG_NO_BREAK_ITERATION U_NAMESPACE_BEGIN @@ -42,38 +47,32 @@ U_NAMESPACE_END #include "unicode/locid.h" #include "unicode/ubrk.h" #include "unicode/strenum.h" +#include "unicode/utext.h" +#include "unicode/umisc.h" U_NAMESPACE_BEGIN -#if !UCONFIG_NO_SERVICE -/** - * Opaque type returned by registerInstance. - * @stable - */ -typedef const void* URegistryKey; -#endif - /** * The BreakIterator class implements methods for finding the location * of boundaries in text. BreakIterator is an abstract base class. * Instances of BreakIterator maintain a current position and scan over * text returning the index of characters where boundaries occur. - *

+ *

* Line boundary analysis determines where a text string can be broken * when line-wrapping. The mechanism correctly handles punctuation and * hyphenated words. - *

+ *

* Sentence boundary analysis allows selection with correct * interpretation of periods within numbers and abbreviations, and * trailing punctuation marks such as quotation marks and parentheses. - *

+ *

* Word boundary analysis is used by search and replace functions, as * well as within text editing applications that allow the user to * select words with a double click. Word selection provides correct * interpretation of punctuation marks within and following * words. Characters that are not part of a word, such as symbols or * punctuation marks, have word-breaks on both sides. - *

+ *

* Character boundary analysis allows users to interact with * characters as they expect to, for example, when moving the cursor * through a text string. Character boundary analysis provides correct @@ -81,126 +80,22 @@ typedef const void* URegistryKey; * character is stored. For example, an accented character might be * stored as a base character and a diacritical mark. What users * consider to be a character can differ between languages. - *

- * This is the interface for all text boundaries. - *

- * Examples: - *

- * Helper function to output text - *

- * \code
- *    void printTextRange( BreakIterator& iterator, int32_t start, int32_t end )
- *    {
- *        UnicodeString textBuffer, temp;
- *        CharacterIterator *strIter = iterator.createText();
- *        strIter->getText(temp);
- *        cout << " " << start << " " << end << " |"
- *             << temp.extractBetween(start, end, textBuffer)
- *             << "|" << endl;
- *        delete strIter;
- *    }
- * \endcode
- * 
- * Print each element in order: - *
- * \code
- *    void printEachForward( BreakIterator& boundary)
- *    {
- *       int32_t start = boundary.first();
- *       for (int32_t end = boundary.next();
- *         end != BreakIterator::DONE;
- *         start = end, end = boundary.next())
- *         {
- *             printTextRange( boundary, start, end );
- *         }
- *    }
- * \code
- * 
- * Print each element in reverse order: - *
- * \code
- *    void printEachBackward( BreakIterator& boundary)
- *    {
- *       int32_t end = boundary.last();
- *       for (int32_t start = boundary.previous();
- *         start != BreakIterator::DONE;
- *         end = start, start = boundary.previous())
- *         {
- *             printTextRange( boundary, start, end );
- *         }
- *    }
- * \endcode
- * 
- * Print first element - *
- * \code
- *    void printFirst(BreakIterator& boundary)
- *    {
- *        int32_t start = boundary.first();
- *        int32_t end = boundary.next();
- *        printTextRange( boundary, start, end );
- *    }
- * \endcode
- * 
- * Print last element - *
- *  \code
- *    void printLast(BreakIterator& boundary)
- *    {
- *        int32_t end = boundary.last();
- *        int32_t start = boundary.previous();
- *        printTextRange( boundary, start, end );
- *    }
- * \endcode
- * 
- * Print the element at a specified position - *
- * \code
- *    void printAt(BreakIterator &boundary, int32_t pos )
- *    {
- *        int32_t end = boundary.following(pos);
- *        int32_t start = boundary.previous();
- *        printTextRange( boundary, start, end );
- *    }
- * \endcode
- * 
- * Creating and using text boundaries - *
- * \code
- *       void BreakIterator_Example( void )
- *       {
- *           BreakIterator* boundary;
- *           UnicodeString stringToExamine("Aaa bbb ccc. Ddd eee fff.");
- *           cout << "Examining: " << stringToExamine << endl;
- *
- *           //print each sentence in forward and reverse order
- *           boundary = BreakIterator::createSentenceInstance( Locale::US );
- *           boundary->setText(stringToExamine);
- *           cout << "----- forward: -----------" << endl;
- *           printEachForward(*boundary);
- *           cout << "----- backward: ----------" << endl;
- *           printEachBackward(*boundary);
- *           delete boundary;
- *
- *           //print each word in order
- *           boundary = BreakIterator::createWordInstance();
- *           boundary->setText(stringToExamine);
- *           cout << "----- forward: -----------" << endl;
- *           printEachForward(*boundary);
- *           //print first element
- *           cout << "----- first: -------------" << endl;
- *           printFirst(*boundary);
- *           //print last element
- *           cout << "----- last: --------------" << endl;
- *           printLast(*boundary);
- *           //print word at charpos 10
- *           cout << "----- at pos 10: ---------" << endl;
- *           printAt(*boundary, 10 );
+ * 

+ * The text boundary positions are found according to the rules + * described in Unicode Standard Annex #29, Text Boundaries, and + * Unicode Standard Annex #14, Line Breaking Properties. These + * are available at http://www.unicode.org/reports/tr14/ and + * http://www.unicode.org/reports/tr29/. + *

+ * In addition to the C++ API defined in this header file, a + * plain C API with equivalent functionality is defined in the + * file ubrk.h + *

+ * Code snippits illustrating the use of the Break Iterator APIs + * are available in the ICU User Guide, + * http://icu.sourceforge.net/userguide/boundaryAnalysis.html + * and in the sample program icu/source/samples/break/break.cpp" * - * delete boundary; - * } - * \endcode - *

*/ class U_COMMON_API BreakIterator : public UObject { public: @@ -249,11 +144,26 @@ public: /** * Return a CharacterIterator over the text being analyzed. - * Changing the state of the returned iterator can have undefined consequences - * on the operation of the break iterator. If you need to change it, clone it first. * @stable ICU 2.0 */ - virtual const CharacterIterator& getText(void) const = 0; + virtual CharacterIterator& getText(void) const = 0; + + + /** + * Get a UText for the text being analyzed. + * The returned UText is a shallow clone of the UText used internally + * by the break iterator implementation. It can safely be used to + * access the text without impacting any break iterator operations, + * but the underlying text itself must not be altered. + * + * @param fillIn A UText to be filled in. If NULL, a new UText will be + * allocated to hold the result. + * @param status receives any error codes. + * @return The current UText for this break iterator. If an input + * UText was provided, it will always be returned. + * @draft ICU 3.4 + */ + virtual UText *getUText(UText *fillIn, UErrorCode &status) const = 0; /** * Change the text over which this operates. The text boundary is @@ -263,24 +173,39 @@ public: */ virtual void setText(const UnicodeString &text) = 0; + /** + * Reset the break iterator to operate over the text represented by + * the UText. The iterator position is reset to the start. + * + * This function makes a shallow clone of the supplied UText. This means + * that the caller is free to immediately close or otherwise reuse the + * Utext that was passed as a parameter, but that the underlying text itself + * must not be altered while being referenced by the break iterator. + * + * @param text The UText used to change the text. + * @param status receives any error codes. + * @draft ICU 3.4 + */ + virtual void setText(UText *text, UErrorCode &status) = 0; + /** * Change the text over which this operates. The text boundary is * reset to the start. + * Note that setText(UText *) provides similar functionality to this function, + * and is more efficient. * @param it The CharacterIterator used to change the text. * @stable ICU 2.0 */ virtual void adoptText(CharacterIterator* it) = 0; - /** - * DONE is returned by previous() and next() after all valid - * boundaries have been returned. - * @stable ICU 2.0 - */ -#ifdef U_CYGWIN - static U_COMMON_API const int32_t DONE; -#else - static const int32_t DONE; -#endif + enum { + /** + * DONE is returned by previous() and next() after all valid + * boundaries have been returned. + * @stable ICU 2.0 + */ + DONE = (int32_t)-1 + }; /** * Return the index of the first character in the text being scanned. @@ -577,7 +502,7 @@ public: /** * Returns the locale for this break iterator. Two flavors are available: valid and * actual locale. - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; @@ -590,8 +515,8 @@ public: const char *getLocaleID(ULocDataLocaleType type, UErrorCode& status) const; private: - static BreakIterator* buildInstance(const Locale& loc, const char *type, UBool dict, UErrorCode& status); - static BreakIterator* createInstance(const Locale& loc, UBreakIteratorType kind, UErrorCode& status); + static BreakIterator* buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode& status); + static BreakIterator* createInstance(const Locale& loc, int32_t kind, UErrorCode& status); static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status); friend class ICUBreakIteratorFactory; @@ -615,7 +540,7 @@ private: * The assignment operator has no real implementation. * It's provided to make the compiler happy. Do not call. */ - BreakIterator& operator=(const BreakIterator&) { return *this; } + BreakIterator& operator=(const BreakIterator&); }; inline UBool BreakIterator::isBufferClone() diff --git a/icuSources/common/unicode/caniter.h b/icuSources/common/unicode/caniter.h index 1deb3be6..84a65958 100644 --- a/icuSources/common/unicode/caniter.h +++ b/icuSources/common/unicode/caniter.h @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1996-2004, International Business Machines Corporation and * + * Copyright (C) 1996-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -15,6 +15,11 @@ #include "unicode/uobject.h" #include "unicode/unistr.h" +/** + * \file + * \brief C++ API: Canonical Iterator + */ + /** Should permutation skip characters with combining class zero * Should be either TRUE or FALSE. This is a compile time option * @stable ICU 2.4 @@ -173,7 +178,7 @@ private: UnicodeString *getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status); //private String[] getEquivalents(String segment) //Set getEquivalents2(String segment); - Hashtable *getEquivalents2(const UChar *segment, int32_t segLen, UErrorCode &status); + Hashtable *getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status); //Hashtable *getEquivalents2(const UnicodeString &segment, int32_t segLen, UErrorCode &status); /** @@ -182,7 +187,7 @@ private: * If so, take the remainder, and return the equivalents */ //Set extract(int comp, String segment, int segmentPos, StringBuffer buffer); - Hashtable *extract(UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); + Hashtable *extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); //Hashtable *extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); void cleanPieces(); diff --git a/icuSources/common/unicode/chariter.h b/icuSources/common/unicode/chariter.h index 94ce9a8d..12fc9248 100644 --- a/icuSources/common/unicode/chariter.h +++ b/icuSources/common/unicode/chariter.h @@ -1,7 +1,7 @@ /* ******************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************** @@ -13,7 +13,11 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" #include "unicode/unistr.h" - +/** + * \file + * \brief C++ API: Character Iterator + */ + U_NAMESPACE_BEGIN /** * Abstract class that defines an API for forward-only iteration diff --git a/icuSources/common/unicode/dbbi.h b/icuSources/common/unicode/dbbi.h index 9c6278a9..c7984ef8 100644 --- a/icuSources/common/unicode/dbbi.h +++ b/icuSources/common/unicode/dbbi.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004 IBM Corp. All rights reserved. +* Copyright (C) 1999-2006 IBM Corp. All rights reserved. ********************************************************************** * Date Name Description * 12/1/99 rgillam Complete port from Java. @@ -15,255 +15,24 @@ #if !UCONFIG_NO_BREAK_ITERATION +/** + * \file + * \brief C++ API: Dictionary Based Break Iterator + */ + U_NAMESPACE_BEGIN -/* forward declaration */ -class DictionaryBasedBreakIteratorTables; - /** - * A subclass of RuleBasedBreakIterator that adds the ability to use a dictionary - * to further subdivide ranges of text beyond what is possible using just the - * state-table-based algorithm. This is necessary, for example, to handle - * word and line breaking in Thai, which doesn't use spaces between words. The - * state-table-based algorithm used by RuleBasedBreakIterator is used to divide - * up text as far as possible, and then contiguous ranges of letters are - * repeatedly compared against a list of known words (i.e., the dictionary) - * to divide them up into words. - * - *

Applications do not normally need to include this header.

- * - *

This class will probably be deprecated in a future release of ICU, and replaced - * with a more flexible and capable dictionary based break iterator. This change - * should be invisible to applications, because creation and use of instances of - * DictionaryBasedBreakIterator is through the factories and abstract - * API on class BreakIterator, which will remain stable.

- * - *

This class is not intended to be subclassed.

- * - * - * DictionaryBasedBreakIterator uses the same rule language as RuleBasedBreakIterator, - * but adds one more special substitution name: <dictionary>. This substitution - * name is used to identify characters in words in the dictionary. The idea is that - * if the iterator passes over a chunk of text that includes two or more characters - * in a row that are included in <dictionary>, it goes back through that range and - * derives additional break positions (if possible) using the dictionary. - * - * DictionaryBasedBreakIterator is also constructed with the filename of a dictionary - * file. It follows a prescribed search path to locate the dictionary (right now, - * it looks for it in /com/ibm/text/resources in each directory in the classpath, - * and won't find it in JAR files, but this location is likely to change). The - * dictionary file is in a serialized binary format. We have a very primitive (and - * slow) BuildDictionaryFile utility for creating dictionary files, but aren't - * currently making it public. Contact us for help. - *

- * NOTE The DictionaryBasedIterator class is still under development. The - * APIs are not in stable condition yet. + * An obsolete subclass of RuleBasedBreakIterator. Handling of dictionary- + * based break iteration has been folded into the base class. This class + * is deprecated as of ICU 3.6. */ -class U_COMMON_API DictionaryBasedBreakIterator : public RuleBasedBreakIterator { - -private: - - /** - * when a range of characters is divided up using the dictionary, the break - * positions that are discovered are stored here, preventing us from having - * to use either the dictionary or the state table again until the iterator - * leaves this range of text - */ - int32_t* cachedBreakPositions; - - /** - * The number of elements in cachedBreakPositions - */ - int32_t numCachedBreakPositions; - - /** - * if cachedBreakPositions is not null, this indicates which item in the - * cache the current iteration position refers to - */ - int32_t positionInCache; - - DictionaryBasedBreakIteratorTables *fTables; - - /**======================================================================= - * Create a dictionary based break boundary detection iterator. - * @param tablesImage The location for the dictionary to be loaded into memory - * @param dictionaryFilename The name of the dictionary file - * @param status the error code status - * @return A dictionary based break detection iterator. The UErrorCode& status - * parameter is used to return status information to the user. - * To check whether the construction succeeded or not, you should check - * the value of U_SUCCESS(err). If you wish more detailed information, you - * can check for informational error results which still indicate success. For example, - * U_FILE_ACCESS_ERROR will be returned if the file does not exist. - * The caller owns the returned object and is responsible for deleting it. - ======================================================================= */ - DictionaryBasedBreakIterator(UDataMemory* tablesImage, const char* dictionaryFilename, UErrorCode& status); - -public: - //======================================================================= - // boilerplate - //======================================================================= - - /** - * Destructor - * @stable ICU 2.0 - */ - virtual ~DictionaryBasedBreakIterator(); - - /** - * Default constructor. Creates an "empty" break iterator. - * Such an iterator can subsequently be assigned to. - * @return the newly created DictionaryBaseBreakIterator. - * @stable ICU 2.0 - */ - DictionaryBasedBreakIterator(); - - /** - * Copy constructor. - * @param other The DictionaryBasedBreakIterator to be copied. - * @return the newly created DictionaryBasedBreakIterator. - * @stable ICU 2.0 - */ - DictionaryBasedBreakIterator(const DictionaryBasedBreakIterator &other); - - /** - * Assignment operator. - * @param that The object to be copied. - * @return the newly set DictionaryBasedBreakIterator. - * @stable ICU 2.0 - */ - DictionaryBasedBreakIterator& operator=(const DictionaryBasedBreakIterator& that); + +#ifndef U_HIDE_DEPRECATED_API - /** - * Returns a newly-constructed RuleBasedBreakIterator with the same - * behavior, and iterating over the same text, as this one. - * @return Returns a newly-constructed RuleBasedBreakIterator. - * @stable ICU 2.0 - */ - virtual BreakIterator* clone(void) const; +typedef RuleBasedBreakIterator DictionaryBasedBreakIterator; - //======================================================================= - // BreakIterator overrides - //======================================================================= - /** - * Advances the iterator backwards, to the last boundary preceding this one. - * @return The position of the last boundary position preceding this one. - * @stable ICU 2.0 - */ - virtual int32_t previous(void); - - /** - * Sets the iterator to refer to the first boundary position following - * the specified position. - * @param offset The position from which to begin searching for a break position. - * @return The position of the first break after the current position. - * @stable ICU 2.0 - */ - virtual int32_t following(int32_t offset); - - /** - * Sets the iterator to refer to the last boundary position before the - * specified position. - * @param offset The position to begin searching for a break from. - * @return The position of the last boundary before the starting position. - * @stable ICU 2.0 - */ - virtual int32_t preceding(int32_t offset); - - /** - * Returns the class ID for this class. This is useful only for - * comparing to a return value from getDynamicClassID(). For example: - * - * Base* polymorphic_pointer = createPolymorphicObject(); - * if (polymorphic_pointer->getDynamicClassID() == - * Derived::getStaticClassID()) ... - * - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); - - /** - * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. - * This method is to implement a simple version of RTTI, since not all - * C++ compilers support genuine RTTI. Polymorphic operator==() and - * clone() methods call this method. - * - * @return The class ID for this object. All objects of a - * given class have the same class ID. Objects of - * other classes have different class IDs. - * @stable ICU 2.0 - */ - virtual UClassID getDynamicClassID(void) const; - -protected: - //======================================================================= - // implementation - //======================================================================= - /** - * This method is the actual implementation of the next() method. All iteration - * vectors through here. This method initializes the state machine to state 1 - * and advances through the text character by character until we reach the end - * of the text or the state machine transitions to state 0. We update our return - * value every time the state machine passes through a possible end state. - * @internal - */ - virtual int32_t handleNext(void); - - /** - * removes the cache of break positions (usually in response to a change in - * position of some sort) - * @internal - */ - virtual void reset(void); - - /** - * init Initialize a dbbi. Common routine for use by constructors. - * @internal - */ - void init(); - - /** - * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated. - * If buffer is not large enough, new memory will be allocated. - * @param BufferSize reference to size of allocated space. - * If BufferSize == 0, a sufficient size for use in cloning will - * be returned ('pre-flighting') - * If BufferSize is not enough for a stack-based safe clone, - * new memory will be allocated. - * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were - * necessary. - * @return pointer to the new clone - * @internal - */ - virtual BreakIterator * createBufferClone(void *stackBuffer, - int32_t &BufferSize, - UErrorCode &status); - - -private: - /** - * This is the function that actually implements the dictionary-based - * algorithm. Given the endpoints of a range of text, it uses the - * dictionary to determine the positions of any boundaries in this - * range. It stores all the boundary positions it discovers in - * cachedBreakPositions so that we only have to do this work once - * for each time we enter the range. - * @param startPos The start position of a range of text - * @param endPos The end position of a range of text - * @param status The error code status - */ - void divideUpDictionaryRange(int32_t startPos, int32_t endPos, UErrorCode &status); - - - /* - * HSYS : Please revisit with Rich, the ctors of the DBBI class is currently - * marked as private. - */ - friend class DictionaryBasedBreakIteratorTables; - friend class BreakIterator; -}; +#endif U_NAMESPACE_END diff --git a/icuSources/common/unicode/docmain.h b/icuSources/common/unicode/docmain.h index 94ac7301..649eb2a7 100644 --- a/icuSources/common/unicode/docmain.h +++ b/icuSources/common/unicode/docmain.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. * * FILE NAME: DOCMAIN.h @@ -39,21 +39,20 @@ * * *

API References for Previous Releases

- *

The API References for the previous release are available - * online. - * For each release there are also .zip and .tgz files for the API References - * on the download page of the release.

+ *

The API References for each release of ICU are also available as + * a zip file from the ICU + * download page.

* *
* *

Architecture (User's Guide)

* * *
@@ -184,5 +183,20 @@ * utmscale.h * utmscale.h C API * + * + * Basic Layout Engine Types and Constants + * (no C API) + * LETypes.h + * + * + * Complex Text Layout + * (no C API) + * LayoutEngine, ParagraphLayout + * + * + * ICU I/O + * ustdio.h + * ustream.h + * * */ diff --git a/icuSources/common/unicode/locid.h b/icuSources/common/unicode/locid.h index fea77201..a3cc23b3 100644 --- a/icuSources/common/unicode/locid.h +++ b/icuSources/common/unicode/locid.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -57,9 +57,9 @@ * this class: * \htmlonly
\endhtmlonly *
- * .      Locale( const   char*  language,
- * .              const   char*  country,
- * .              const   char*  variant);
+ *       Locale( const   char*  language,
+ *               const   char*  country,
+ *               const   char*  variant);
  * 
* \htmlonly
\endhtmlonly * The first argument to the constructors is a valid ISO @@ -74,17 +74,17 @@ * Code. These codes are the upper-case two-letter codes * as defined by ISO-3166. * You can find a full list of these codes at a number of sites, such as: - *
- * http://www.iso.ch/iso/en/prods-services/iso3166ma/index.html + *
+ * http://www.iso.org/iso/en/prods-services/iso3166ma/index.html * *

* The third constructor requires a third argument--the Variant. * The Variant codes are vendor and browser-specific. - * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX. + * For example, use REVISED for a langauge's revised script orthography, and POSIX for POSIX. * Where there are two variants, separate them with an underscore, and * put the most important one first. For * example, a Traditional Spanish collation might be referenced, with - * "ES", "ES", "Traditional_WIN". + * "ES", "ES", "Traditional_POSIX". * *

* Because a Locale object is just an identifier for a region, @@ -315,7 +315,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ Locale *clone() const; @@ -367,7 +367,7 @@ public: * the string by calling uloc_canonicalize(). * @param name the locale ID to create from. Must not be NULL. * @return a new locale object corresponding to the given name - * @draft ICU 3.0 + * @stable ICU 3.0 * @see uloc_canonicalize */ static Locale U_EXPORT2 createCanonical(const char* name); @@ -384,7 +384,7 @@ public: * @return An alias to the code * @see uscript_getShortName * @see uscript_getCode - * @draft ICU 2.8 + * @stable ICU 2.8 */ inline const char * getScript( ) const; @@ -417,7 +417,7 @@ public: * but without keywords. * @return A pointer to "name". * @see getName - * @draft ICU 2.8 + * @stable ICU 2.8 */ const char * getBaseName() const; @@ -427,7 +427,7 @@ public: * * @return pointer to StringEnumeration class. Client must dispose of it by calling delete. * @param status Returns any error information while performing this operation. - * @draft ICU 2.8 + * @stable ICU 2.8 */ StringEnumeration * createKeywords(UErrorCode &status) const; @@ -440,13 +440,13 @@ public: * @param bufferCapacity The capacity of receiving buffer * @return the length of keyword value * - * @draft ICU 2.8 + * @stable ICU 2.8 */ int32_t getKeywordValue(const char* keywordName, char *buffer, int32_t bufferCapacity, UErrorCode &status) const; /** * returns the locale's three-letter language code, as specified - * in ISO draft standard ISO-639-2.. + * in ISO draft standard ISO-639-2. * @return An alias to the code, or NULL * @stable ICU 2.0 */ @@ -502,7 +502,7 @@ public: * dispScript to "Latin". * @param dispScript Receives the scripts's display name. * @return A reference to "dispScript". - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeString& getDisplayScript( UnicodeString& dispScript) const; @@ -518,7 +518,7 @@ public: * "". * @param dispScript Receives the scripts's display name. * @return A reference to "dispScript". - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeString& getDisplayScript( const Locale& displayLocale, UnicodeString& dispScript) const; @@ -538,10 +538,10 @@ public: * Fills in "dispCountry" with the name of this locale's country in a format suitable * for user display in the locale specified by "displayLocale". For example, if the locale's * country code is "US" and displayLocale's language code is "fr", this function would set - * dispCountry to "Etats-Unis". + * dispCountry to "États-Unis". * @param displayLocale Specifies the locale to be used to display the name. In other * words, if the locale's country code is "US", passing - * Locale::getFrench() for displayLocale would result in "États-Unis", while + * Locale::getFrench() for displayLocale would result in "États-Unis", while * passing Locale::getGerman() for displayLocale would result in * "Vereinigte Staaten". * @param dispCountry Receives the country's display name. @@ -589,8 +589,8 @@ public: * in the locale specfied by "displayLocale". This function uses getDisplayLanguage(), * getDisplayCountry(), and getDisplayVariant() to do its work, and outputs the display * name in the format "language (country[,variant])". For example, if displayLocale is - * fr_FR, then en_US's display name would be "Anglais (États-Unis)", and no_NO_NY's - * display name would be "norvégien (Norvège,NY)". + * fr_FR, then en_US's display name would be "Anglais (États-Unis)", and no_NO_NY's + * display name would be "norvégien (Norvège,NY)". * @param displayLocale Specifies the locale to be used to display the name. * @param name Receives the locale's display name. * @return A reference to "name". diff --git a/icuSources/common/unicode/normlzr.h b/icuSources/common/unicode/normlzr.h index 447f0469..7974f1ac 100644 --- a/icuSources/common/unicode/normlzr.h +++ b/icuSources/common/unicode/normlzr.h @@ -1,7 +1,7 @@ /* ******************************************************************** * COPYRIGHT: - * Copyright (c) 1996-2004, International Business Machines Corporation and + * Copyright (c) 1996-2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************** */ @@ -11,6 +11,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Unicode Normalization + */ + #if !UCONFIG_NO_NORMALIZATION #include "unicode/uobject.h" @@ -18,12 +23,15 @@ #include "unicode/chariter.h" #include "unicode/unorm.h" + struct UCharIterator; typedef struct UCharIterator UCharIterator; /**< C typedef for struct UCharIterator. @stable ICU 2.1 */ U_NAMESPACE_BEGIN /** - * \brief C++ API: Unicode Normalization + * The Normalizer class supports the standard normalization forms described in + * + * Unicode Standard Annex #15: Unicode Normalization Forms. * * The Normalizer class consists of two parts: * - static functions that normalize strings or test if strings are normalized diff --git a/icuSources/common/unicode/parseerr.h b/icuSources/common/unicode/parseerr.h index d1ba3948..44ff0081 100644 --- a/icuSources/common/unicode/parseerr.h +++ b/icuSources/common/unicode/parseerr.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -14,6 +14,10 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C API: Parse Error Information + */ /** * The capacity of the context strings in UParseError. * @stable ICU 2.0 diff --git a/icuSources/common/unicode/parsepos.h b/icuSources/common/unicode/parsepos.h index 0a46ea52..cdf49e04 100644 --- a/icuSources/common/unicode/parsepos.h +++ b/icuSources/common/unicode/parsepos.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 1997-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************* * * File PARSEPOS.H @@ -19,9 +19,14 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" + U_NAMESPACE_BEGIN /** + * \file + * \brief C++ API: Canonical Iterator + */ +/** * ParsePosition is a simple class used by Format * and its subclasses to keep track of the current position during parsing. * The parseObject method in the various Format @@ -108,7 +113,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ ParsePosition *clone() const; diff --git a/icuSources/common/unicode/platform.h.in b/icuSources/common/unicode/platform.h.in index e1dcfdc1..80766a25 100644 --- a/icuSources/common/unicode/platform.h.in +++ b/icuSources/common/unicode/platform.h.in @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -16,6 +16,11 @@ ****************************************************************************** */ +/** + * \file + * \brief Basic types for the platform + */ + /* Define the platform we're on. */ #ifndef @platform@ #define @platform@ @@ -192,6 +197,11 @@ typedef unsigned int uint32_t; #define U_ENABLE_TRACING @U_ENABLE_TRACING@ #endif +/* Do we allow ICU users to use the draft APIs by default? */ +#ifndef U_DEFAULT_SHOW_DRAFT +#define U_DEFAULT_SHOW_DRAFT @U_DEFAULT_SHOW_DRAFT@ +#endif + /* Define the library suffix in a C syntax. */ #define U_HAVE_LIB_SUFFIX @U_HAVE_LIB_SUFFIX@ #define U_LIB_SUFFIX_C_NAME @ICULIBSUFFIXCNAME@ @@ -201,7 +211,7 @@ typedef unsigned int uint32_t; /* Character data types */ /*===========================================================================*/ -#if defined(OS390) || defined(OS400) +#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400) # define U_CHARSET_FAMILY 1 #endif @@ -239,7 +249,16 @@ typedef unsigned int uint32_t; /* Symbol import-export control */ /*===========================================================================*/ +#if defined(U_DARWIN) && defined(__GNUC__) && (__GNUC__ >= 4) +#define USE_GCC_VISIBILITY_ATTRIBUTE 1 +#endif + +#ifdef USE_GCC_VISIBILITY_ATTRIBUTE +#define U_EXPORT __attribute__((visibility("default"))) +#else #define U_EXPORT +#endif + /* U_CALLCONV is releated to U_EXPORT2 */ #define U_EXPORT2 @@ -255,7 +274,11 @@ typedef unsigned int uint32_t; /*===========================================================================*/ #ifndef U_INLINE -#define U_INLINE @U_INLINE@ +# ifdef __cplusplus +# define U_INLINE inline +# else +# define U_INLINE @U_INLINE@ +# endif #endif #define U_ALIGN_CODE(n) diff --git a/icuSources/common/unicode/ppalmos.h b/icuSources/common/unicode/ppalmos.h new file mode 100644 index 00000000..c15b2cea --- /dev/null +++ b/icuSources/common/unicode/ppalmos.h @@ -0,0 +1,273 @@ +/* +****************************************************************************** +* +* Copyright (C) 1997-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +****************************************************************************** +* +* FILE NAME : ppalmos.h +* +* Date Name Description +* 05/10/04 Ken Krugler Creation (copied from pwin32.h & modified). +****************************************************************************** +*/ + +#ifndef U_PPALMOS_H +#define U_PPALMOS_H + + /** + * \file + * \brief Configuration constants for the Palm OS platform + */ + +/* Define the platform we're on. */ +#ifndef U_PALMOS +#define U_PALMOS +#endif + +/* _MSC_VER is used to detect the Microsoft compiler. */ +#if defined(_MSC_VER) +#define U_INT64_IS_LONG_LONG 0 +#else +#define U_INT64_IS_LONG_LONG 1 +#endif + +/* Define whether inttypes.h is available */ +#ifndef U_HAVE_INTTYPES_H +#define U_HAVE_INTTYPES_H 1 +#endif + +/* + * Define what support for C++ streams is available. + * If U_IOSTREAM_SOURCE is set to 199711, then is available + * (1997711 is the date the ISO/IEC C++ FDIS was published), and then + * one should qualify streams using the std namespace in ICU header + * files. + * If U_IOSTREAM_SOURCE is set to 198506, then is + * available instead (198506 is the date when Stroustrup published + * "An Extensible I/O Facility for C++" at the summer USENIX conference). + * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and + * support for them will be silently suppressed in ICU. + * + */ + +#ifndef U_IOSTREAM_SOURCE +#define U_IOSTREAM_SOURCE 199711 +#endif + +/* Determines whether specific types are available */ +#ifndef U_HAVE_INT8_T +#define U_HAVE_INT8_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_UINT8_T +#define U_HAVE_UINT8_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_INT16_T +#define U_HAVE_INT16_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_UINT16_T +#define U_HAVE_UINT16_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_INT32_T +#define U_HAVE_INT32_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_UINT32_T +#define U_HAVE_UINT32_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_INT64_T +#define U_HAVE_INT64_T U_HAVE_INTTYPES_H +#endif + +#ifndef U_HAVE_UINT64_T +#define U_HAVE_UINT64_T U_HAVE_INTTYPES_H +#endif + + +/*===========================================================================*/ +/* Generic data types */ +/*===========================================================================*/ + +/* If your platform does not have the header, you may + need to edit the typedefs below. */ +#if U_HAVE_INTTYPES_H +#include +#else /* U_HAVE_INTTYPES_H */ + +#if ! U_HAVE_INT8_T +typedef signed char int8_t; +#endif + +#if ! U_HAVE_UINT8_T +typedef unsigned char uint8_t; +#endif + +#if ! U_HAVE_INT16_T +typedef signed short int16_t; +#endif + +#if ! U_HAVE_UINT16_T +typedef unsigned short uint16_t; +#endif + +#if ! U_HAVE_INT32_T +typedef signed int int32_t; +#endif + +#if ! U_HAVE_UINT32_T +typedef unsigned int uint32_t; +#endif + +#if ! U_HAVE_INT64_T +#if U_INT64_IS_LONG_LONG + typedef signed long long int64_t; +#else + typedef signed __int64 int64_t; +#endif +#endif + +#if ! U_HAVE_UINT64_T +#if U_INT64_IS_LONG_LONG + typedef unsigned long long uint64_t; +#else + typedef unsigned __int64 uint64_t; +#endif +#endif +#endif + +/*===========================================================================*/ +/* Compiler and environment features */ +/*===========================================================================*/ + +/* Define whether namespace is supported */ +#ifndef U_HAVE_NAMESPACE +#define U_HAVE_NAMESPACE 1 +#endif + +/* Determines the endianness of the platform */ +#define U_IS_BIG_ENDIAN 0 + +/* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */ +#define ICU_USE_THREADS 1 + +#ifndef U_DEBUG +#ifdef _DEBUG +#define U_DEBUG 1 +#else +#define U_DEBUG 0 +#endif +#endif + +#ifndef U_RELEASE +#ifdef NDEBUG +#define U_RELEASE 1 +#else +#define U_RELEASE 0 +#endif +#endif + +/* Determine whether to disable renaming or not. This overrides the + setting in umachine.h which is for all platforms. */ +#ifndef U_DISABLE_RENAMING +#define U_DISABLE_RENAMING 0 +#endif + +/* Determine whether to override new and delete. */ +#ifndef U_OVERRIDE_CXX_ALLOCATION +#define U_OVERRIDE_CXX_ALLOCATION 1 +#endif +/* Determine whether to override placement new and delete for STL. */ +#ifndef U_HAVE_PLACEMENT_NEW +#define U_HAVE_PLACEMENT_NEW 0 +#endif +/* Determine whether to override new and delete for MFC. */ +#if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER) +#define U_HAVE_DEBUG_LOCATION_NEW 0 +#endif + +/* Determine whether to enable tracing. */ +#ifndef U_ENABLE_TRACING +#define U_ENABLE_TRACING 1 +#endif + +/* Do we allow ICU users to use the draft APIs by default? */ +#ifndef U_DEFAULT_SHOW_DRAFT +#define U_DEFAULT_SHOW_DRAFT 1 +#endif + +/* Define the library suffix in a C syntax. */ +#define U_HAVE_LIB_SUFFIX 0 +#define U_LIB_SUFFIX_C_NAME +#define U_LIB_SUFFIX_C_NAME_STRING "" + +/*===========================================================================*/ +/* Information about wchar support */ +/*===========================================================================*/ + +#define U_HAVE_WCHAR_H 1 +#define U_SIZEOF_WCHAR_T 2 + +#define U_HAVE_WCSCPY 0 + +/*===========================================================================*/ +/* Information about POSIX support */ +/*===========================================================================*/ + + +/* TODO: Fix Palm OS's determination of a timezone */ +#if 0 +#define U_TZSET _tzset +#endif +#if 0 +#define U_TIMEZONE _timezone +#endif +#if 0 +#define U_TZNAME _tzname +#endif + +#define U_HAVE_MMAP 0 +#define U_HAVE_POPEN 0 + +/*===========================================================================*/ +/* Symbol import-export control */ +/*===========================================================================*/ + +#define U_EXPORT +#define U_EXPORT2 +#define U_IMPORT + +/*===========================================================================*/ +/* Code alignment and C function inlining */ +/*===========================================================================*/ + +#ifndef U_INLINE +# ifdef __cplusplus +# define U_INLINE inline +# else +# define U_INLINE __inline +# endif +#endif + +#if defined(_MSC_VER) && defined(_M_IX86) +#define U_ALIGN_CODE(val) __asm align val +#else +#define U_ALIGN_CODE(val) +#endif + + +/*===========================================================================*/ +/* Programs used by ICU code */ +/*===========================================================================*/ + +#ifndef U_MAKE +#define U_MAKE "nmake" +#define U_MAKE_IS_NMAKE 1 +#endif + +#endif diff --git a/icuSources/common/unicode/putil.h b/icuSources/common/unicode/putil.h index 685df530..bdb385c7 100644 --- a/icuSources/common/unicode/putil.h +++ b/icuSources/common/unicode/putil.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -25,7 +25,11 @@ #define PUTIL_H #include "unicode/utypes.h" - + /** + * \file + * \brief C API: Platform Utilities + */ + /* Define this to 1 if your platform supports IEEE 754 floating point, to 0 if it does not. */ #ifndef IEEE_754 @@ -118,7 +122,7 @@ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultLocaleID(void); # define U_FILE_SEP_STRING ":" # define U_FILE_ALT_SEP_STRING ":" # define U_PATH_SEP_STRING ";" -#elif defined(WIN32) || defined(OS2) +#elif defined(U_WINDOWS) # define U_FILE_SEP_CHAR '\\' # define U_FILE_ALT_SEP_CHAR '/' # define U_PATH_SEP_CHAR ';' diff --git a/icuSources/common/unicode/pwin32.h b/icuSources/common/unicode/pwin32.h index 5d500326..198ce8e3 100644 --- a/icuSources/common/unicode/pwin32.h +++ b/icuSources/common/unicode/pwin32.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -16,9 +16,14 @@ ****************************************************************************** */ + /** + * \file + * \brief Configuration constants for the Windows platform + */ + /* Define the platform we're on. */ -#ifndef WIN32 -#define WIN32 +#ifndef U_WINDOWS +#define U_WINDOWS #endif #if defined(__BORLANDC__) @@ -27,6 +32,13 @@ #define __STDC_CONSTANT_MACROS #endif +/* _MSC_VER is used to detect the Microsoft compiler. */ +#if defined(_MSC_VER) +#define U_INT64_IS_LONG_LONG 0 +#else +#define U_INT64_IS_LONG_LONG 1 +#endif + /* Define whether inttypes.h is available */ #ifndef U_HAVE_INTTYPES_H #define U_HAVE_INTTYPES_H 0 @@ -84,8 +96,15 @@ #endif /* Define 64 bit limits */ -#define INT64_C(x) ((int64_t)x) -#define UINT64_C(x) ((uint64_t)x) +#if !U_INT64_IS_LONG_LONG +# ifndef INT64_C +# define INT64_C(x) ((int64_t)x) +# endif +# ifndef UINT64_C +# define UINT64_C(x) ((uint64_t)x) +# endif +/* else use the umachine.h definition */ +#endif /*===========================================================================*/ /* Generic data types */ @@ -122,20 +141,18 @@ typedef unsigned int uint32_t; #endif #if ! U_HAVE_INT64_T -/* _MSC_VER is used to detect the Microsoft compiler. */ -#ifdef _MSC_VER - typedef signed __int64 int64_t; -#else +#if U_INT64_IS_LONG_LONG typedef signed long long int64_t; +#else + typedef signed __int64 int64_t; #endif #endif #if ! U_HAVE_UINT64_T -/* _MSC_VER is used to detect the Microsoft compiler. */ -#ifdef _MSC_VER - typedef unsigned __int64 uint64_t; -#else +#if U_INT64_IS_LONG_LONG typedef unsigned long long uint64_t; +#else + typedef unsigned __int64 uint64_t; #endif #endif #endif @@ -155,8 +172,14 @@ typedef unsigned int uint32_t; /* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */ #define ICU_USE_THREADS 1 -/* Windows currently only runs on x86 CPUs which currently all have strong memory models. */ +/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check mutex lock. */ +/* +Microsoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) or _M_X64 (starting in Visual Studio 8). +Intel can define _M_IX86 or _M_X64 +*/ +#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) #define UMTX_STRONG_MEMORY_MODEL 1 +#endif #ifndef U_DEBUG #ifdef _DEBUG @@ -173,6 +196,7 @@ typedef unsigned int uint32_t; #define U_RELEASE 0 #endif #endif + /* Determine whether to disable renaming or not. This overrides the setting in umachine.h which is for all platforms. */ #ifndef U_DISABLE_RENAMING @@ -187,12 +211,21 @@ typedef unsigned int uint32_t; #ifndef U_HAVE_PLACEMENT_NEW #define U_HAVE_PLACEMENT_NEW 1 #endif +/* Determine whether to override new and delete for MFC. */ +#if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER) +#define U_HAVE_DEBUG_LOCATION_NEW 1 +#endif /* Determine whether to enable tracing. */ #ifndef U_ENABLE_TRACING #define U_ENABLE_TRACING 1 #endif +/* Do we allow ICU users to use the draft APIs by default? */ +#ifndef U_DEFAULT_SHOW_DRAFT +#define U_DEFAULT_SHOW_DRAFT 1 +#endif + /* Define the library suffix in a C syntax. */ #define U_HAVE_LIB_SUFFIX 0 #define U_LIB_SUFFIX_C_NAME @@ -211,12 +244,15 @@ typedef unsigned int uint32_t; /* Information about POSIX support */ /*===========================================================================*/ +#if 1 #define U_TZSET _tzset -#define U_HAVE_TIMEZONE 1 -#if U_HAVE_TIMEZONE -# define U_TIMEZONE _timezone #endif +#if 1 +#define U_TIMEZONE _timezone +#endif +#if 1 #define U_TZNAME _tzname +#endif #define U_HAVE_MMAP 0 #define U_HAVE_POPEN 0 @@ -238,15 +274,19 @@ typedef unsigned int uint32_t; /*===========================================================================*/ #ifndef U_INLINE -#define U_INLINE __inline +# ifdef __cplusplus +# define U_INLINE inline +# else +# define U_INLINE __inline +# endif #endif -#if defined(_MSC_VER) && defined(_M_IX86) +#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED) #define U_ALIGN_CODE(val) __asm align val #else #define U_ALIGN_CODE(val) #endif - + /*===========================================================================*/ /* Programs used by ICU code */ diff --git a/icuSources/common/unicode/rbbi.h b/icuSources/common/unicode/rbbi.h index 9af38301..51bab4b1 100644 --- a/icuSources/common/unicode/rbbi.h +++ b/icuSources/common/unicode/rbbi.h @@ -1,6 +1,6 @@ /* *************************************************************************** -* Copyright (C) 1999-2004 International Business Machines Corporation * +* Copyright (C) 1999-2006 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** @@ -16,11 +16,19 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Rule Based Break Iterator + */ + #if !UCONFIG_NO_BREAK_ITERATION #include "unicode/brkiter.h" #include "unicode/udata.h" #include "unicode/parseerr.h" +#include "unicode/schriter.h" +#include "unicode/uchriter.h" + struct UTrie; @@ -31,11 +39,16 @@ struct RBBIDataHeader; class RuleBasedBreakIteratorTables; class BreakIterator; class RBBIDataWrapper; +class UStack; +class LanguageBreakEngine; +class UnhandledEngine; struct RBBIStateTable; + /** + * * A subclass of BreakIterator whose behavior is specified using a list of rules. *

Instances of this class are most commonly created by the factory methods of * BreakIterator::createWordInstance(), BreakIterator::createLineInstance(), etc., @@ -53,10 +66,31 @@ class U_COMMON_API RuleBasedBreakIterator : public BreakIterator { protected: /** - * The character iterator through which this BreakIterator accesses the text + * The UText through which this BreakIterator accesses the text * @internal */ - CharacterIterator* fText; + UText *fText; + + /** + * A character iterator that refers to the same text as the UText, above. + * Only included for compatibility with old API, which was based on CharacterIterators. + * Value may be adopted from outside, or one of fSCharIter or fDCharIter, below. + */ + CharacterIterator *fCharIter; + + /** + * When the input text is provided by a UnicodeString, this will point to + * a characterIterator that wraps that data. Needed only for the + * implementation of getText(), a backwards compatibility issue. + */ + StringCharacterIterator *fSCharIter; + + /** + * When the input text is provided by a UText, this + * dummy CharacterIterator over an empty string will + * be returned from getText() + */ + UCharCharacterIterator *fDCharIter; /** * The rule data for this BreakIterator instance @@ -79,20 +113,58 @@ protected: /** * Counter for the number of characters encountered with the "dictionary" - * flag set. Normal RBBI iterators don't use it, although the code - * for updating it is live. Dictionary Based break iterators (a subclass - * of us) access this field directly. + * flag set. * @internal */ - uint32_t fDictionaryCharCount; + uint32_t fDictionaryCharCount; /** - * Debugging flag. Trace operation of state machine when true. + * When a range of characters is divided up using the dictionary, the break + * positions that are discovered are stored here, preventing us from having + * to use either the dictionary or the state table again until the iterator + * leaves this range of text. Has the most impact for line breaking. * @internal */ - static UBool fTrace; + int32_t* fCachedBreakPositions; + /** + * The number of elements in fCachedBreakPositions + * @internal + */ + int32_t fNumCachedBreakPositions; + /** + * if fCachedBreakPositions is not null, this indicates which item in the + * cache the current iteration position refers to + * @internal + */ + int32_t fPositionInCache; + + /** + * + * If present, UStack of LanguageBreakEngine objects that might handle + * dictionary characters. Searched from top to bottom to find an object to + * handle a given character. + * @internal + */ + UStack *fLanguageBreakEngines; + + /** + * + * If present, the special LanguageBreakEngine used for handling + * characters that are in the dictionary set, but not handled by any + * LangugageBreakEngine. + * @internal + */ + UnhandledEngine *fUnhandledBreakEngine; + + /** + * + * The type of the break iterator, or -1 if it has not been set. + * @internal + */ + int32_t fBreakType; + protected: //======================================================================= // constructors @@ -110,7 +182,9 @@ protected: */ RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status); - friend class RBBIRuleBuilder; /** @internal */ + + friend class RBBIRuleBuilder; + /** @internal */ friend class BreakIterator; @@ -154,7 +228,7 @@ public: * @param status Information on any errors encountered. * @see udata_open * @see #getBinaryRules - * @draft ICU 2.8 + * @stable ICU 2.8 */ RuleBasedBreakIterator(UDataMemory* image, UErrorCode &status); @@ -223,15 +297,48 @@ public: //======================================================================= /** - * Return a CharacterIterator over the text being analyzed. This version - * of this method returns the actual CharacterIterator we're using internally. - * Changing the state of this iterator can have undefined consequences. If - * you need to change it, clone it first. + *

+ * Return a CharacterIterator over the text being analyzed. + * The returned character iterator is owned by the break iterator, and must + * not be deleted by the caller. Repeated calls to this function may + * return the same CharacterIterator. + *

+ *

+ * The returned character iterator must not be used concurrently with + * the break iterator. If concurrent operation is needed, clone the + * returned character iterator first and operate on the clone. + *

+ *

+ * When the break iterator is operating on text supplied via a UText, + * this function will fail. Lacking any way to signal failures, it + * returns an CharacterIterator containing no text. + * The function getUText() provides similar functionality, + * is reliable, and is more efficient. + *

+ * + * TODO: deprecate this function? + * * @return An iterator over the text being analyzed. - * @stable ICU 2.0 + * @stable ICU 2.0 */ - virtual const CharacterIterator& getText(void) const; + virtual CharacterIterator& getText(void) const; + + /** + * Get a UText for the text being analyzed. + * The returned UText is a shallow clone of the UText used internally + * by the break iterator implementation. It can safely be used to + * access the text without impacting any break iterator operations, + * but the underlying text itself must not be altered. + * + * @param fillIn A UText to be filled in. If NULL, a new UText will be + * allocated to hold the result. + * @param status receives any error codes. + * @return The current UText for this break iterator. If an input + * UText was provided, it will always be returned. + * @draft ICU 3.4 + */ + virtual UText *getUText(UText *fillIn, UErrorCode &status) const; /** * Set the iterator to analyze a new piece of text. This function resets @@ -250,9 +357,23 @@ public: */ virtual void setText(const UnicodeString& newText); + /** + * Reset the break iterator to operate over the text represented by + * the UText. The iterator position is reset to the start. + * + * This function makes a shallow clone of the supplied UText. This means + * that the caller is free to immediately close or otherwise reuse the + * Utext that was passed as a parameter, but that the underlying text itself + * must not be altered while being referenced by the break iterator. + * + * @param text The UText used to change the text. + * @param status Receives any error codes. + * @draft ICU 3.4 + */ + virtual void setText(UText *text, UErrorCode &status); + /** * Sets the current iteration position to the beginning of the text. - * (i.e., the CharacterIterator's starting offset). * @return The offset of the beginning of the text. * @stable ICU 2.0 */ @@ -260,7 +381,6 @@ public: /** * Sets the current iteration position to the end of the text. - * (i.e., the CharacterIterator's ending offset). * @return The text's past-the-end offset. * @stable ICU 2.0 */ @@ -383,7 +503,7 @@ public: * is the total number of status values that were available, * not the reduced number that were actually returned. * @see getRuleStatus - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status); @@ -466,34 +586,14 @@ protected: //======================================================================= // implementation //======================================================================= - /** - * This method is the actual implementation of the next() method. All iteration - * vectors through here. This method initializes the state machine to state 1 - * and advances through the text character by character until we reach the end - * of the text or the state machine transitions to state 0. We update our return - * value every time the state machine passes through a possible end state. - * @internal - */ - virtual int32_t handleNext(void); - - /** - * This method backs the iterator back up to a "safe position" in the text. - * This is a position that we know, without any context, must be a break position. - * The various calling methods then iterate forward from this safe position to - * the appropriate position to return. (For more information, see the description - * of buildBackwardsStateTable() in RuleBasedBreakIterator.Builder.) - * @internal - */ - virtual int32_t handlePrevious(void); - /** * Dumps caches and performs other actions associated with a complete change - * in text or iteration position. This function is a no-op in RuleBasedBreakIterator, - * but subclasses can and do override it. + * in text or iteration position. * @internal */ virtual void reset(void); +#if 0 /** * Return true if the category lookup for this char * indicates that it is in the set of dictionary lookup chars. @@ -504,6 +604,19 @@ protected: */ virtual UBool isDictionaryChar(UChar32); + /** + * Get the type of the break iterator. + * @internal + */ + virtual int32_t getBreakType() const; +#endif + + /** + * Set the type of the break iterator. + * @internal + */ + virtual void setBreakType(int32_t type); + /** * Common initialization function, used by constructors and bufferClone. * (Also used by DictionaryBasedBreakIterator::createBufferClone().) @@ -535,6 +648,34 @@ private: */ int32_t handleNext(const RBBIStateTable *statetable); +protected: + + /** + * This is the function that actually implements dictionary-based + * breaking. Covering at least the range from startPos to endPos, + * it checks for dictionary characters, and if it finds them determines + * the appropriate object to deal with them. It may cache found breaks in + * fCachedBreakPositions as it goes. It may well also look at text outside + * the range startPos to endPos. + * If going forward, endPos is the normal Unicode break result, and + * if goind in reverse, startPos is the normal Unicode break result + * @param startPos The start position of a range of text + * @param endPos The end position of a range of text + * @param reverse The call is for the reverse direction + * @internal + */ + int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse); + +private: + + /** + * This function returns the appropriate LanguageBreakEngine for a + * given character c. + * @param c A character in the dictionary set + * @internal + */ + const LanguageBreakEngine *getLanguageBreakEngine(UChar32 c); + /** * @internal */ diff --git a/icuSources/common/unicode/rep.h b/icuSources/common/unicode/rep.h index efe3eadb..3fab6fa1 100644 --- a/icuSources/common/unicode/rep.h +++ b/icuSources/common/unicode/rep.h @@ -1,6 +1,6 @@ /* ************************************************************************** -* Copyright (C) 1999-2004, International Business Machines Corporation and +* Copyright (C) 1999-2005, International Business Machines Corporation and * others. All Rights Reserved. ************************************************************************** * Date Name Description @@ -16,6 +16,11 @@ #include "unicode/uobject.h" +/** + * \file + * \brief C++ API: Replaceable String + */ + U_NAMESPACE_BEGIN class UnicodeString; diff --git a/icuSources/common/unicode/resbund.h b/icuSources/common/unicode/resbund.h index 3d566e8f..ec0e620b 100644 --- a/icuSources/common/unicode/resbund.h +++ b/icuSources/common/unicode/resbund.h @@ -1,8 +1,8 @@ /* ****************************************************************************** * -* Copyright (C) 1996-2004, International Business Machines -* Corporation and others. All Rights Reserved. +* Copyright (C) 1996-2005, International Business Machines Corporation +* and others. All Rights Reserved. * ****************************************************************************** * @@ -52,6 +52,11 @@ #include "unicode/unistr.h" #include "unicode/locid.h" +/** + * \file + * \brief C++ API: Resource Bundle + */ + U_NAMESPACE_BEGIN /** @@ -61,9 +66,9 @@ U_NAMESPACE_BEGIN * locale and then ask it for individual resources. *

* Resource bundles in ICU4C are currently defined using text files which conform to the following - * BNF definition. + * BNF definition. * More on resource bundle concepts and syntax can be found in the - * Users Guide. + * Users Guide. *

* * The ResourceBundle class is not suitable for subclassing. @@ -75,13 +80,11 @@ public: /** * Constructor * - * @param path This is a full pathname in the platform-specific format for the - * directory containing the resource data files we want to load - * resources from. We use locale IDs to generate filenames, and the - * filenames have this string prepended to them before being passed - * to the C++ I/O functions. Therefore, this string must always end - * with a directory delimiter (whatever that is for the target OS) - * for this class to work correctly. + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. * @param locale This is the locale this resource bundle is for. To get resources * for the French locale, for example, you would create a * ResourceBundle passing Locale::FRENCH for the "locale" parameter, @@ -100,22 +103,26 @@ public: * fall back locales could be found. * @stable ICU 2.0 */ - ResourceBundle(const UnicodeString& path, + ResourceBundle(const UnicodeString& packageName, const Locale& locale, UErrorCode& err); /** - * Construct a resource bundle for the root bundle in the specified path. + * Construct a resource bundle for the default bundle in the specified package. * - * @param path A path/basename for the data file(s) containing the bundle. + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. * @param err A UErrorCode value * @stable ICU 2.0 */ - ResourceBundle(const UnicodeString& path, + ResourceBundle(const UnicodeString& packageName, UErrorCode& err); /** - * Construct a resource bundle for the ICU root bundle. + * Construct a resource bundle for the ICU default bundle. * * @param err A UErrorCode value * @stable ICU 2.0 @@ -124,15 +131,19 @@ public: /** * Standard constructor, onstructs a resource bundle for the locale-specific - * bundle in the specified path. - * - * @param path A path/basename for the data file(s) containing the bundle. - * NULL is used for ICU data. + * bundle in the specified package. + * + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. + * NULL is used to refer to ICU data. * @param locale The locale for which to open a resource bundle. * @param err A UErrorCode value * @stable ICU 2.0 */ - ResourceBundle(const char* path, + ResourceBundle(const char* packageName, const Locale& locale, UErrorCode& err); @@ -179,7 +190,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ ResourceBundle *clone() const; @@ -437,7 +448,7 @@ public: * @param status just for catching illegal arguments * * @return a Locale object - * @draft ICU 2.8 + * @stable ICU 2.8 */ const Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const; diff --git a/icuSources/common/unicode/schriter.h b/icuSources/common/unicode/schriter.h index df8cd300..d0b5e225 100644 --- a/icuSources/common/unicode/schriter.h +++ b/icuSources/common/unicode/schriter.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -22,6 +22,11 @@ #include "unicode/chariter.h" #include "unicode/uchriter.h" +/** + * \file + * \brief C++ API: String Character Iterator + */ + U_NAMESPACE_BEGIN /** * A concrete subclass of CharacterIterator that iterates over the diff --git a/icuSources/common/unicode/strenum.h b/icuSources/common/unicode/strenum.h index 4f6ce02d..5e956430 100644 --- a/icuSources/common/unicode/strenum.h +++ b/icuSources/common/unicode/strenum.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -13,6 +13,11 @@ #include "unicode/uobject.h" #include "unicode/unistr.h" +/** + * \file + * \brief C++ API: String Enumeration + */ + U_NAMESPACE_BEGIN /** @@ -68,7 +73,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual StringEnumeration *clone() const; @@ -179,32 +184,49 @@ public: */ virtual void reset(UErrorCode& status) = 0; + /** + * Compares this enumeration to other to check if both are equal + * + * @param that The other string enumeration to compare this object to + * @return TRUE if the enumerations are equal. FALSE if not. + * @draft ICU 3.6 + */ + virtual UBool operator==(const StringEnumeration& that)const; + /** + * Compares this enumeration to other to check if both are not equal + * + * @param that The other string enumeration to compare this object to + * @return TRUE if the enumerations are equal. FALSE if not. + * @draft ICU 3.6 + */ + virtual UBool operator!=(const StringEnumeration& that)const; + protected: /** * UnicodeString field for use with default implementations and subclasses. - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeString unistr; /** * char * default buffer for use with default implementations and subclasses. - * @draft ICU 2.8 + * @stable ICU 2.8 */ char charsBuffer[32]; /** * char * buffer for use with default implementations and subclasses. * Allocated in constructor and in ensureCharsCapacity(). - * @draft ICU 2.8 + * @stable ICU 2.8 */ char *chars; /** * Capacity of chars, for use with default implementations and subclasses. - * @draft ICU 2.8 + * @stable ICU 2.8 */ int32_t charsCapacity; /** * Default constructor for use with default implementations and subclasses. - * @draft ICU 2.8 + * @stable ICU 2.8 */ StringEnumeration(); @@ -214,7 +236,7 @@ protected: * * @param capacity Requested capacity. * @param status ICU in/out error code. - * @draft ICU 2.8 + * @stable ICU 2.8 */ void ensureCharsCapacity(int32_t capacity, UErrorCode &status); @@ -238,7 +260,7 @@ protected: * @param length Length of the string. * @param status ICU in/out error code. * @return A pointer to unistr. - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeString *setChars(const char *s, int32_t length, UErrorCode &status); }; diff --git a/icuSources/common/unicode/symtable.h b/icuSources/common/unicode/symtable.h index 27094030..428f8bff 100644 --- a/icuSources/common/unicode/symtable.h +++ b/icuSources/common/unicode/symtable.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2000-2004, International Business Machines +* Copyright (c) 2000-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -13,6 +13,12 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" +/** + * \file + * \brief C++ API: An interface that defines both lookup protocol and parsing of + * symbolic names. + */ + U_NAMESPACE_BEGIN class ParsePosition; @@ -43,20 +49,20 @@ class UnicodeString; * with the position immediately following the SYMBOL_REF. The symbol * table parses the name, if there is one, and returns it. * - * @draft ICU 2.8 + * @stable ICU 2.8 */ class U_COMMON_API SymbolTable /* not : public UObject because this is an interface/mixin class */ { public: /** * The character preceding a symbol reference name. - * @draft ICU 2.8 + * @stable ICU 2.8 */ enum { SYMBOL_REF = 0x0024 /*$*/ }; /** * Destructor. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual ~SymbolTable(); @@ -67,7 +73,7 @@ public: * @param s the symbolic name to lookup * @return a string containing the name's value, or NULL if * there is no mapping for s. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual const UnicodeString* lookup(const UnicodeString& s) const = 0; @@ -77,7 +83,7 @@ public: * @param ch a 32-bit code point from 0 to 0x10FFFF inclusive. * @return the UnicodeMatcher object represented by the given * character, or NULL if there is no mapping for ch. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const = 0; @@ -96,7 +102,7 @@ public: * @param limit the index after the last character to be parsed. * @return the parsed name, or an empty string if there is no * valid symbolic name at the given position. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual UnicodeString parseReference(const UnicodeString& text, ParsePosition& pos, int32_t limit) const = 0; diff --git a/icuSources/common/unicode/ubidi.h b/icuSources/common/unicode/ubidi.h index a0528d21..71d181ca 100644 --- a/icuSources/common/unicode/ubidi.h +++ b/icuSources/common/unicode/ubidi.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -20,20 +20,6 @@ #include "unicode/utypes.h" #include "unicode/uchar.h" -/* - * javadoc-style comments are intended to be transformed into HTML - * using DOC++ - see - * http://www.zib.de/Visual/software/doc++/index.html . - * - * The HTML documentation is created with - * doc++ -H ubidi.h - * - * The following #define trick allows us to do it all in one file - * and still be able to compile it. - */ -/*#define DOCXX_TAG*/ -/*#define BIDI_SAMPLE_CODE*/ - /** *\file * \brief C API: BIDI algorithm @@ -368,6 +354,21 @@ typedef uint8_t UBiDiLevel; */ #define UBIDI_LEVEL_OVERRIDE 0x80 +/** + * Special value which can be returned by the mapping functions when a logical + * index has no corresponding visual index or vice-versa. This may happen + * for the logical-to-visual mapping of a BiDi control when option + * #UBIDI_OPTION_REMOVE_CONTROLS is specified. This can also happen + * for the visual-to-logical mapping of a BiDi mark (LRM or RLM) inserted + * by option #UBIDI_OPTION_INSERT_MARKS. + * @see ubidi_getVisualIndex + * @see ubidi_getVisualMap + * @see ubidi_getLogicalIndex + * @see ubidi_getLogicalMap + * @draft ICU 3.6 + */ +#define UBIDI_MAP_NOWHERE (-1) + /** * UBiDiDirection values indicate the text direction. * @stable ICU 2.0 @@ -387,11 +388,11 @@ typedef enum UBiDiDirection UBiDiDirection; /** * Forward declaration of the UBiDi structure for the declaration of * the API functions. Its fields are implementation-specific.

- * This structure holds information about a paragraph of text - * with BiDi-algorithm-related details, or about one line of + * This structure holds information about a paragraph (or multiple paragraphs) + * of text with BiDi-algorithm-related details, or about one line of * such a paragraph.

- * Reordering can be done on a line, or on a paragraph which is - * then interpreted as one single line. + * Reordering can be done on a line, or on one or more paragraphs which are + * then interpreted each as one single line. * @stable ICU 2.0 */ struct UBiDi; @@ -402,13 +403,14 @@ typedef struct UBiDi UBiDi; /** * Allocate a UBiDi structure. * Such an object is initially empty. It is assigned - * the BiDi properties of a paragraph by ubidi_setPara() - * or the BiDi properties of a line of a paragraph by + * the BiDi properties of a piece of text containing one or more paragraphs + * by ubidi_setPara() + * or the BiDi properties of a line within a paragraph by * ubidi_setLine().

* This object can be reused for as long as it is not deallocated * by calling ubidi_close().

- * ubidi_set() will allocate additional memory for - * internal structures as necessary. + * ubidi_setPara() and ubidi_setLine() will allocate + * additional memory for internal structures as necessary. * * @return An empty UBiDi object. * @stable ICU 2.0 @@ -432,7 +434,7 @@ ubidi_open(void); * and the internal structures that are associated with it will be allocated * on demand, just like with ubidi_open(). * - * @param maxLength is the maximum paragraph or line length that internal memory + * @param maxLength is the maximum text or line length that internal memory * will be preallocated for. An attempt to associate this object with a * longer text will fail, unless this value is 0, which leaves the allocation * up to the implementation. @@ -441,12 +443,11 @@ ubidi_open(void); * that internal memory will be preallocated for. An attempt to access * visual runs on an object that was not preallocated for as many runs * as the text was actually resolved to will fail, - * unless this value is 0, which leaves the allocation up to the implementation.

+ * unless this value is 0, which leaves the allocation up to the implementation.

* The number of runs depends on the actual text and maybe anywhere between - * 1 and maxLength. It is typically small.

+ * 1 and maxLength. It is typically small. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return An empty UBiDi object with preallocated memory. * @stable ICU 2.0 @@ -461,8 +462,8 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode); * Important: * A parent UBiDi object must not be destroyed or reused if * it still has children. - * If a UBiDi object is the child - * of another one (its parent), after calling + * If a UBiDi object has become the child + * of another one (its parent) by calling * ubidi_setLine(), then the child object must * be destroyed (closed) or reused (by calling * ubidi_setPara() or ubidi_setLine()) @@ -505,12 +506,24 @@ ubidi_close(UBiDi *pBiDi); * ubidi_getVisualRun() gets the reordered runs, these are actually * the runs of the logically ordered output.

* + *

Calling this function with argument isInverse set to + * TRUE is equivalent to calling + * ubidi_setReorderingMode with argument + * reorderingMode + * set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L.
+ * Calling this function with argument isInverse set to + * FALSE is equivalent to calling + * ubidi_setReorderingMode with argument + * reorderingMode + * set to #UBIDI_REORDER_DEFAULT. + * * @param pBiDi is a UBiDi object. * - * @param isInverse specifies "forward" or "inverse" BiDi operation + * @param isInverse specifies "forward" or "inverse" BiDi operation. * * @see ubidi_setPara * @see ubidi_writeReordered + * @see ubidi_setReorderingMode * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -518,27 +531,438 @@ ubidi_setInverse(UBiDi *pBiDi, UBool isInverse); /** * Is this BiDi object set to perform the inverse BiDi algorithm? + *

Note: calling this function after setting the reordering mode with + * ubidi_setReorderingMode will return TRUE if the + * reordering mode was set to #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, + * FALSE for all other values.

* * @param pBiDi is a UBiDi object. - * @return TRUE if the BiDi object set to perform the inverse BiDi algorithm + * @return TRUE if the BiDi object is set to perform the inverse BiDi algorithm + * by handling numbers as L. * * @see ubidi_setInverse + * @see ubidi_setReorderingMode * @stable ICU 2.0 */ + U_STABLE UBool U_EXPORT2 ubidi_isInverse(UBiDi *pBiDi); +/** + * Specify whether block separators must be allocated level zero, + * so that successive paragraphs will progress from left to right. + * This function must be called before ubidi_setPara(). + * Paragraph separators (B) may appear in the text. Setting them to level zero + * means that all paragraph separators (including one possibly appearing + * in the last text position) are kept in the reordered text after the text + * that they follow in the source text. + * When this feature is not enabled, a paragraph separator at the last + * position of the text before reordering will go to the first position + * of the reordered text when the paragraph level is odd. + * + * @param pBiDi is a UBiDi object. + * + * @param orderParagraphsLTR specifies whether paragraph separators (B) must + * receive level 0, so that successive paragraphs progress from left to right. + * + * @see ubidi_setPara + * @stable ICU 3.4 + */ +U_STABLE void U_EXPORT2 +ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR); + +/** + * Is this BiDi object set to allocate level 0 to block separators so that + * successive paragraphs progress from left to right? + * + * @param pBiDi is a UBiDi object. + * @return TRUE if the BiDi object is set to allocate level 0 to block + * separators. + * + * @see ubidi_orderParagraphsLTR + * @stable ICU 3.4 + */ +U_STABLE UBool U_EXPORT2 +ubidi_isOrderParagraphsLTR(UBiDi *pBiDi); + +/** + * UBiDiReorderingMode values indicate which variant of the BiDi + * algorithm to use. + * + * @see ubidi_setReorderingMode + * @draft ICU 3.6 + */ +typedef enum UBiDiReorderingMode { + /** Regular Logical to Visual BiDi algorithm according to Unicode. + * This is a 0 value. @draft ICU 3.6 */ + UBIDI_REORDER_DEFAULT = 0, + /** Logical to Visual algorithm which handles numbers in a way which + * mimicks the behavior of Windows XP. + * @draft ICU 3.6 */ + UBIDI_REORDER_NUMBERS_SPECIAL, + /** Logical to Visual algorithm grouping numbers with adjacent R characters + * (reversible algorithm). + * @draft ICU 3.6 */ + UBIDI_REORDER_GROUP_NUMBERS_WITH_R, + /** Reorder runs only to transform a Logical LTR string to the Logical RTL + * string with the same display, or vice-versa.
+ * If this mode is set together with option + * #UBIDI_OPTION_INSERT_MARKS, some BiDi controls in the source + * text may be removed and other controls may be added to produce the + * minimum combination which has the required display. + * @draft ICU 3.6 */ + UBIDI_REORDER_RUNS_ONLY, + /** Visual to Logical algorithm which handles numbers like L + * (same algorithm as selected by ubidi_setInverse(TRUE). + * @see ubidi_setInverse + * @draft ICU 3.6 */ + UBIDI_REORDER_INVERSE_NUMBERS_AS_L, + /** Visual to Logical algorithm equivalent to the regular Logical to Visual + * algorithm. @draft ICU 3.6 */ + UBIDI_REORDER_INVERSE_LIKE_DIRECT, + /** Inverse BiDi (Visual to Logical) algorithm for the + * UBIDI_REORDER_NUMBERS_SPECIAL BiDi algorithm. + * @draft ICU 3.6 */ + UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, + /** Number of values for reordering mode. + * @draft ICU 3.6 */ + UBIDI_REORDER_COUNT +} UBiDiReorderingMode; + +/** + * Modify the operation of the BiDi algorithm such that it implements some + * variant to the basic BiDi algorithm or approximates an "inverse BiDi" + * algorithm, depending on different values of the "reordering mode". + * This function must be called before ubidi_setPara(), and stays + * in effect until called again with a different argument. + * + *

The normal operation of the BiDi algorithm as described + * in the Unicode Standard Annex #9 is to take text stored in logical + * (keyboard, typing) order and to determine how to reorder it for visual + * rendering.

+ * + *

With the reordering mode set to a value other than + * #UBIDI_REORDER_DEFAULT, this function changes the behavior of + * some of the subsequent functions in a way such that they implement an + * inverse BiDi algorithm or some other algorithm variants.

+ * + *

Some legacy systems store text in visual order, and for operations + * with standard, Unicode-based algorithms, the text needs to be transformed + * into logical order. This is effectively the inverse algorithm of the + * described BiDi algorithm. Note that there is no standard algorithm for + * this "inverse BiDi", so a number of variants are implemented here.

+ * + *

In other cases, it may be desirable to emulate some variant of the + * Logical to Visual algorithm (e.g. one used in MS Windows), or perform a + * Logical to Logical transformation.

+ * + *
    + *
  • When the reordering mode is set to #UBIDI_REORDER_DEFAULT, + * the standard BiDi Logical to Visual algorithm is applied.
  • + * + *
  • When the reordering mode is set to + * #UBIDI_REORDER_NUMBERS_SPECIAL, + * the algorithm used to perform BiDi transformations when calling + * ubidi_setPara should approximate the algorithm used in + * Microsoft Windows XP rather than strictly conform to the Unicode BiDi + * algorithm. + *
    + * The differences between the basic algorithm and the algorithm addressed + * by this option are as follows: + *
      + *
    • Within text at an even embedding level, the sequence "123AB" + * (where AB represent R or AL letters) is transformed to "123BA" by the + * Unicode algorithm and to "BA123" by the Windows algorithm.
    • + *
    • Arabic-Indic numbers (AN) are handled by the Windows algorithm just + * like regular numbers (EN).
    • + *
  • + * + *
  • When the reordering mode is set to + * #UBIDI_REORDER_GROUP_NUMBERS_WITH_R, + * numbers located between LTR text and RTL text are associated with the RTL + * text. For instance, an LTR paragraph with content "abc 123 DEF" (where + * upper case letters represent RTL characters) will be transformed to + * "abc FED 123" (and not "abc 123 FED"), "DEF 123 abc" will be transformed + * to "123 FED abc" and "123 FED abc" will be transformed to "DEF 123 abc". + * This makes the algorithm reversible and makes it useful when round trip + * (from visual to logical and back to visual) must be achieved without + * adding LRM characters. However, this is a variation from the standard + * Unicode Bidi algorithm.
    + * The source text should not contain BiDi control characters other than LRM + * or RLM.
  • + * + *
  • When the reordering mode is set to + * #UBIDI_REORDER_RUNS_ONLY, + * a "Logical to Logical" transformation must be performed: + *
      + *
    • If the default text level of the source text (argument paraLevel + * in ubidi_setPara) is even, the source text will be handled as + * LTR logical text and will be transformed to the RTL logical text which has + * the same LTR visual display.
    • + *
    • If the default level of the source text is odd, the source text + * will be handled as RTL logical text and will be transformed to the + * LTR logical text which has the same LTR visual display.
    • + *
    + * This mode may be needed when logical text which is basically Arabic or + * Hebrew, with possible included numbers or phrases in English, has to be + * displayed as if it had an even embedding level (this can happen if the + * displaying application treats all text as if it was basically LTR. + *
    + * This mode may also be needed in the reverse case, when logical text which is + * basically English, with possible included phrases in Arabic or Hebrew, has to + * be displayed as if it had an odd embedding level. + *
    + * Both cases could be handled by adding LRE or RLE at the head of the text, + * if the display subsystem supports these formatting controls. If it does not, + * the problem may be handled by transforming the source text in this mode + * before displaying it, so that it will be displayed properly.
    + * The source text should not contain BiDi control characters other than LRM + * or RLM.
  • + * + *
  • When the reordering mode is set to + * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L, an "inverse BiDi" algorithm + * is applied. + * Runs of text with numeric characters will be treated like LTR letters and + * may need to be surrounded with LRM characters when they are written in + * reordered sequence (the option #UBIDI_INSERT_LRM_FOR_NUMERIC can + * be used with function ubidi_writeReordered to this end. This + * mode is equivalent to calling ubidi_setInverse() with + * argument isInverse set to TRUE.
  • + * + *
  • When the reordering mode is set to + * #UBIDI_REORDER_INVERSE_LIKE_DIRECT, the "direct" Logical to Visual + * BiDi algorithm is used as an approximation of an "inverse BiDi" algorithm. + * This mode is similar to mode #UBIDI_REORDER_INVERSE_NUMBERS_AS_L + * but is closer to the regular BiDi algorithm. + *
    + * For example, an LTR paragraph with the content "FED 123 456 CBA" (where + * upper case represents RTL characters) will be transformed to + * "ABC 456 123 DEF", as opposed to "DEF 123 456 ABC" + * with mode UBIDI_REORDER_INVERSE_NUMBERS_AS_L.
    + * When used in conjunction with option + * #UBIDI_OPTION_INSERT_MARKS, this mode generally + * adds BiDi marks to the output significantly more sparingly than mode + * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L with option + * #UBIDI_INSERT_LRM_FOR_NUMERIC in calls to + * ubidi_writeReordered.
  • + * + *
  • When the reordering mode is set to + * #UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, the Logical to Visual + * BiDi algorithm used in Windows XP is used as an approximation of an + * "inverse BiDi" algorithm. + *
    + * For example, an LTR paragraph with the content "abc FED123" (where + * upper case represents RTL characters) will be transformed to + * "abc 123DEF.
  • + *
+ * + *

In all the reordering modes specifying an "inverse BiDi" algorithm + * (i.e. those with a name starting with UBIDI_REORDER_INVERSE), + * output runs should be retrieved using + * ubidi_getVisualRun(), and the output text with + * ubidi_writeReordered(). The caller should keep in mind that in + * "inverse BiDi" modes the input is actually visually ordered text and + * reordered output returned by ubidi_getVisualRun() or + * ubidi_writeReordered() are actually runs or character string + * of logically ordered output.
+ * For all the "inverse BiDi" modes, the source text should not contain + * BiDi control characters other than LRM or RLM.

+ * + *

Note that option #UBIDI_OUTPUT_REVERSE of + * ubidi_writeReordered has no useful meaning and should not be + * used in conjunction with any value of the reordering mode specifying + * "inverse BiDi" or with value UBIDI_REORDER_RUNS_ONLY. + * + * @param pBiDi is a UBiDi object. + * @param reorderingMode specifies the required variant of the BiDi algorithm. + * + * @see UBiDiReorderingMode + * @see ubidi_setInverse + * @see ubidi_setPara + * @see ubidi_writeReordered + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode); + +/** + * What is the requested reordering mode for a given BiDi object? + * + * @param pBiDi is a UBiDi object. + * @return the current reordering mode of the BiDi object + * @see ubidi_setReorderingMode + * @draft ICU 3.6 + */ +U_DRAFT UBiDiReorderingMode U_EXPORT2 +ubidi_getReorderingMode(UBiDi *pBiDi); + +/** + * UBiDiReorderingOption values indicate which options are + * specified to affect the BiDi algorithm. + * + * @see ubidi_setReorderingOptions + * @draft ICU 3.6 + */ +typedef enum UBiDiReorderingOption { + /** + * option value for ubidi_setReorderingOptions: + * disable all the options which can be set with this function + * @see ubidi_setReorderingOptions + * @draft ICU 3.6 + */ + UBIDI_OPTION_DEFAULT = 0, + + /** + * option bit for ubidi_setReorderingOptions: + * insert BiDi marks (LRM or RLM) when needed to ensure correct result of + * a reordering to a Logical order + * + *

This option must be set or reset before calling + * ubidi_setPara.

+ * + *

This option is significant only with reordering modes which generate + * a result with Logical order, specifically:

+ *
    + *
  • #UBIDI_REORDER_RUNS_ONLY
  • + *
  • #UBIDI_REORDER_INVERSE_NUMBERS_AS_L
  • + *
  • #UBIDI_REORDER_INVERSE_LIKE_DIRECT
  • + *
  • #UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
  • + *
+ * + *

If this option is set in conjunction with reordering mode + * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L or with calling + * ubidi_setInverse(TRUE), it implies + * option #UBIDI_INSERT_LRM_FOR_NUMERIC + * in calls to function ubidi_writeReordered().

+ * + *

For other reordering modes, a minimum number of LRM or RLM characters + * will be added to the source text after reordering it so as to ensure + * round trip, i.e. when applying the inverse reordering mode on the + * resulting logical text with removal of BiDi marks + * (option #UBIDI_OPTION_REMOVE_CONTROLS set before calling + * ubidi_setPara() or option #UBIDI_REMOVE_BIDI_CONTROLS + * in ubidi_writeReordered), the result will be identical to the + * source text in the first transformation. + * + *

This option will be ignored if specified together with option + * #UBIDI_OPTION_REMOVE_CONTROLS. It inhibits option + * UBIDI_REMOVE_BIDI_CONTROLS in calls to function + * ubidi_writeReordered() and it implies option + * #UBIDI_INSERT_LRM_FOR_NUMERIC in calls to function + * ubidi_writeReordered() if the reordering mode is + * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L.

+ * + * @see ubidi_setReorderingMode + * @see ubidi_setReorderingOptions + * @draft ICU 3.6 + */ + UBIDI_OPTION_INSERT_MARKS = 1, + + /** + * option bit for ubidi_setReorderingOptions: + * remove BiDi control characters + * + *

This option must be set or reset before calling + * ubidi_setPara.

+ * + *

This option nullifies option #UBIDI_OPTION_INSERT_MARKS. + * It inhibits option #UBIDI_INSERT_LRM_FOR_NUMERIC in calls + * to function ubidi_writeReordered() and it implies option + * #UBIDI_REMOVE_BIDI_CONTROLS in calls to that function.

+ * + * @see ubidi_setReorderingMode + * @see ubidi_setReorderingOptions + * @draft ICU 3.6 + */ + UBIDI_OPTION_REMOVE_CONTROLS = 2, + + /** + * option bit for ubidi_setReorderingOptions: + * process the output as part of a stream to be continued + * + *

This option must be set or reset before calling + * ubidi_setPara.

+ * + *

This option specifies that the caller is interested in processing large + * text object in parts. + * The results of the successive calls are expected to be concatenated by the + * caller. Only the call for the last part will have this option bit off.

+ * + *

When this option bit is on, ubidi_setPara() may process + * less than the full source text in order to truncate the text at a meaningful + * boundary. The caller should call ubidi_getProcessedLength() + * immediately after calling ubidi_setPara() in order to + * determine how much of the source text has been processed. + * Source text beyond that length should be resubmitted in following calls to + * ubidi_setPara. The processed length may be less than + * the length of the source text if a character preceding the last character of + * the source text constitutes a reasonable boundary (like a block separator) + * for text to be continued.
+ * If the last character of the source text constitutes a reasonable + * boundary, the whole text will be processed at once.
+ * If nowhere in the source text there exists + * such a reasonable boundary, the processed length will be zero.
+ * The caller should check for such an occurrence and do one of the following: + *

  • submit a larger amount of text with a better chance to include + * a reasonable boundary.
  • + *
  • resubmit the same text after turning off option + * UBIDI_OPTION_STREAMING.
+ * In all cases, this option should be turned off before processing the last + * part of the text.

+ * + *

When the UBIDI_OPTION_STREAMING option is used, + * it is recommended to call ubidi_orderParagraphsLTR() with + * argument orderParagraphsLTR set to TRUE before + * calling ubidi_setPara so that later paragraphs may be + * concatenated to previous paragraphs on the right.

+ * + * @see ubidi_setReorderingMode + * @see ubidi_setReorderingOptions + * @see ubidi_getProcessedLength + * @see ubidi_orderParagraphsLTR + * @draft ICU 3.6 + */ + UBIDI_OPTION_STREAMING = 4 +} UBiDiReorderingOption; + +/** + * Specify which of the reordering options + * should be applied during BiDi transformations. + * + * @param pBiDi is a UBiDi object. + * @param reorderingOptions is a combination of zero or more of the following + * options: + * #UBIDI_OPTION_DEFAULT, #UBIDI_OPTION_INSERT_MARKS, + * #UBIDI_OPTION_REMOVE_CONTROLS, #UBIDI_OPTION_STREAMING. + * + * @see ubidi_getReorderingOptions + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions); + +/** + * What are the reordering options applied to a given BiDi object? + * + * @param pBiDi is a UBiDi object. + * @return the current reordering options of the BiDi object + * @see ubidi_setReorderingOptions + * @draft ICU 3.6 + */ +U_DRAFT uint32_t U_EXPORT2 +ubidi_getReorderingOptions(UBiDi *pBiDi); + /** * Perform the Unicode BiDi algorithm. It is defined in the * Unicode Standard Anned #9, * version 13, * also described in The Unicode Standard, Version 4.0 .

* - * This function takes a single plain text paragraph with or without - * externally specified embedding levels from styled text - * and computes the left-right-directionality of each character.

+ * This function takes a piece of plain text containing one or more paragraphs, + * with or without externally specified embedding levels from styled + * text and computes the left-right-directionality of each character.

* - * If the entire paragraph consists of text of only one direction, then + * If the entire text is all of the same directionality, then * the function may not perform all the steps described by the algorithm, * i.e., some levels may not be the same as if all steps were performed. * This is not relevant for unidirectional text.
@@ -547,41 +971,48 @@ ubidi_isInverse(UBiDi *pBiDi); * the algorithm. This implementation may set all resolved levels to * the same value in such a case.

* - * The text must be externally split into separate paragraphs (rule P1). - * Paragraph separators (B) should appear at most at the very end. + * The text can be composed of multiple paragraphs. Occurrence of a block + * separator in the text terminates a paragraph, and whatever comes next starts + * a new paragraph. The exception to this rule is when a Carriage Return (CR) + * is followed by a Line Feed (LF). Both CR and LF are block separators, but + * in that case, the pair of characters is considered as terminating the + * preceding paragraph, and a new paragraph will be started by a character + * coming after the LF. * * @param pBiDi A UBiDi object allocated with ubidi_open() * which will be set to contain the reordering information, * especially the resolved levels for all the characters in text. * - * @param text is a pointer to the single-paragraph text that the - * BiDi algorithm will be performed on - * (step (P1) of the algorithm is performed externally). - * The text must be (at least) length long. + * @param text is a pointer to the text that the BiDi algorithm will be performed on. * This pointer is stored in the UBiDi object and can be retrieved - * with ubidi_getText(). + * with ubidi_getText().
+ * Note: the text must be (at least) length long. * * @param length is the length of the text; if length==-1 then * the text must be zero-terminated. * - * @param paraLevel specifies the default level for the paragraph; + * @param paraLevel specifies the default level for the text; * it is typically 0 (LTR) or 1 (RTL). * If the function shall determine the paragraph level from the text, * then paraLevel can be set to - * either UBIDI_DEFAULT_LTR - * or UBIDI_DEFAULT_RTL; - * if there is no strongly typed character, then - * the desired default is used (0 for LTR or 1 for RTL). - * Any other value between 0 and UBIDI_MAX_EXPLICIT_LEVEL is also valid, - * with odd levels indicating RTL. + * either #UBIDI_DEFAULT_LTR + * or #UBIDI_DEFAULT_RTL; if the text contains multiple + * paragraphs, the paragraph level shall be determined separately for + * each paragraph; if a paragraph does not include any strongly typed + * character, then the desired default is used (0 for LTR or 1 for RTL). + * Any other value between 0 and #UBIDI_MAX_EXPLICIT_LEVEL + * is also valid, with odd levels indicating RTL. * * @param embeddingLevels (in) may be used to preset the embedding and override levels, * ignoring characters like LRE and PDF in the text. * A level overrides the directional property of its corresponding * (same index) character if the level has the - * UBIDI_LEVEL_OVERRIDE bit set.

+ * #UBIDI_LEVEL_OVERRIDE bit set.

* Except for that bit, it must be - * paraLevel<=embeddingLevels[]<=UBIDI_MAX_EXPLICIT_LEVEL.

+ * paraLevel<=embeddingLevels[]<=UBIDI_MAX_EXPLICIT_LEVEL, + * with one exception: a level of zero may be specified for a paragraph + * separator even if paraLevel>0 when multiple paragraphs + * are submitted in the same call to ubidi_setPara().

* Caution: A copy of this pointer, not of the levels, * will be stored in the UBiDi object; * the embeddingLevels array must not be @@ -589,14 +1020,13 @@ ubidi_isInverse(UBiDi *pBiDi); * and the embeddingLevels * should not be modified to avoid unexpected results on subsequent BiDi operations. * However, the ubidi_setPara() and - * ubidi_setLine() functions may modify some or all of the levels.

+ * ubidi_setLine() functions may modify some or all of the levels.

* After the UBiDi object is reused or destroyed, the caller - * must take care of the deallocation of the embeddingLevels array.

- * The embeddingLevels array must be - * at least length long. + * must take care of the deallocation of the embeddingLevels array.

+ * Note: the embeddingLevels array must be + * at least length long. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -609,13 +1039,13 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, * contain the reordering information, especially the resolved levels, * for all the characters in a line of text. This line of text is * specified by referring to a UBiDi object representing - * this information for a paragraph of text, and by specifying - * a range of indexes in this paragraph.

+ * this information for a piece of text containing one or more paragraphs, + * and by specifying a range of indexes in this text.

* In the new line object, the indexes will range from 0 to limit-start-1.

* * This is used after calling ubidi_setPara() - * for a paragraph, and after line-breaking on that paragraph. - * It is not necessary if the paragraph is treated as a single line.

+ * for a piece of text, and after line-breaking on that text. + * It is not necessary if each paragraph is treated as a single line.

* * After line-breaking, rules (L1) and (L2) for the treatment of * trailing WS and for reordering are performed on @@ -631,20 +1061,23 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, * and start is added to it so that it points to the beginning of the * line for this object. * - * @param pParaBiDi is the parent paragraph object. + * @param pParaBiDi is the parent paragraph object. It must have been set + * by a successful call to ubidi_setPara. * - * @param start is the line's first index into the paragraph text. + * @param start is the line's first index into the text. * - * @param limit is just behind the line's last index into the paragraph text + * @param limit is just behind the line's last index into the text * (its last index +1).
- * It must be 0<=start<=limit<=paragraph length. + * It must be 0<=start<=limit<=containing paragraph limit. + * If the specified line crosses a paragraph boundary, the function + * will terminate with error code U_ILLEGAL_ARGUMENT_ERROR. * - * @param pLineBiDi is the object that will now represent a line of the paragraph. + * @param pLineBiDi is the object that will now represent a line of the text. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @see ubidi_setPara + * @see ubidi_getProcessedLength * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -698,14 +1131,99 @@ ubidi_getLength(const UBiDi *pBiDi); * * @param pBiDi is the paragraph or line UBiDi object. * - * @return The paragraph level. + * @return The paragraph level. If there are multiple paragraphs, their + * level may vary if the required paraLevel is UBIDI_DEFAULT_LTR or + * UBIDI_DEFAULT_RTL. In that case, the level of the first paragraph + * is returned. * * @see UBiDiLevel + * @see ubidi_getParagraph + * @see ubidi_getParagraphByIndex * @stable ICU 2.0 */ U_STABLE UBiDiLevel U_EXPORT2 ubidi_getParaLevel(const UBiDi *pBiDi); +/** + * Get the number of paragraphs. + * + * @param pBiDi is the paragraph or line UBiDi object. + * + * @return The number of paragraphs. + * @stable ICU 3.4 + */ +U_STABLE int32_t U_EXPORT2 +ubidi_countParagraphs(UBiDi *pBiDi); + +/** + * Get a paragraph, given a position within the text. + * This function returns information about a paragraph.

+ * + * @param pBiDi is the paragraph or line UBiDi object. + * + * @param charIndex is the index of a character within the text, in the + * range [0..ubidi_getProcessedLength(pBiDi)-1]. + * + * @param pParaStart will receive the index of the first character of the + * paragraph in the text. + * This pointer can be NULL if this + * value is not necessary. + * + * @param pParaLimit will receive the limit of the paragraph. + * The l-value that you point to here may be the + * same expression (variable) as the one for + * charIndex. + * This pointer can be NULL if this + * value is not necessary. + * + * @param pParaLevel will receive the level of the paragraph. + * This pointer can be NULL if this + * value is not necessary. + * + * @param pErrorCode must be a valid pointer to an error code value. + * + * @return The index of the paragraph containing the specified position. + * + * @see ubidi_getProcessedLength + * @stable ICU 3.4 + */ +U_STABLE int32_t U_EXPORT2 +ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart, + int32_t *pParaLimit, UBiDiLevel *pParaLevel, + UErrorCode *pErrorCode); + +/** + * Get a paragraph, given the index of this paragraph. + * + * This function returns information about a paragraph.

+ * + * @param pBiDi is the paragraph UBiDi object. + * + * @param paraIndex is the number of the paragraph, in the + * range [0..ubidi_countParagraphs(pBiDi)-1]. + * + * @param pParaStart will receive the index of the first character of the + * paragraph in the text. + * This pointer can be NULL if this + * value is not necessary. + * + * @param pParaLimit will receive the limit of the paragraph. + * This pointer can be NULL if this + * value is not necessary. + * + * @param pParaLevel will receive the level of the paragraph. + * This pointer can be NULL if this + * value is not necessary. + * + * @param pErrorCode must be a valid pointer to an error code value. + * + * @stable ICU 3.4 + */ +U_STABLE void U_EXPORT2 +ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex, + int32_t *pParaStart, int32_t *pParaLimit, + UBiDiLevel *pParaLevel, UErrorCode *pErrorCode); + /** * Get the level for one character. * @@ -716,6 +1234,7 @@ ubidi_getParaLevel(const UBiDi *pBiDi); * @return The level for the character at charIndex. * * @see UBiDiLevel + * @see ubidi_getProcessedLength * @stable ICU 2.0 */ U_STABLE UBiDiLevel U_EXPORT2 @@ -727,15 +1246,16 @@ ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex); * Note that this function may allocate memory under some * circumstances, unlike ubidi_getLevelAt(). * - * @param pBiDi is the paragraph or line UBiDi object. + * @param pBiDi is the paragraph or line UBiDi object, whose + * text length must be strictly positive. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return The levels array for the text, * or NULL if an error occurs. * * @see UBiDiLevel + * @see ubidi_getProcessedLength * @stable ICU 2.0 */ U_STABLE const UBiDiLevel * U_EXPORT2 @@ -761,6 +1281,8 @@ ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode); * @param pLevel will receive the level of the run. * This pointer can be NULL if this * value is not necessary. + * + * @see ubidi_getProcessedLength * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -777,8 +1299,7 @@ ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalStart, * * @param pBiDi is the paragraph or line UBiDi object. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return The number of runs. * @stable ICU 2.0 @@ -847,6 +1368,10 @@ ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, * UBiDi object, then calling * ubidi_getLogicalMap() is more efficient.

* + * The value returned may be #UBIDI_MAP_NOWHERE if there is no + * visual position because the corresponding text character is a BiDi control + * removed from output by the option #UBIDI_OPTION_REMOVE_CONTROLS. + *

* Note that in right-to-left runs, this mapping places * modifier letters before base characters and second surrogates * before first ones. @@ -855,13 +1380,13 @@ ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, * * @param logicalIndex is the index of a character in the text. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return The visual position of this character. * * @see ubidi_getLogicalMap * @see ubidi_getLogicalIndex + * @see ubidi_getProcessedLength * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -873,19 +1398,23 @@ ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode) * UBiDi object, then calling * ubidi_getVisualMap() is more efficient.

* + * The value returned may be #UBIDI_MAP_NOWHERE if there is no + * logical position because the corresponding text character is a BiDi mark + * inserted in the output by option #UBIDI_OPTION_INSERT_MARKS. + *

* This is the inverse function to ubidi_getVisualIndex(). * * @param pBiDi is the paragraph or line UBiDi object. * * @param visualIndex is the visual position of a character. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return The index of this character in the text. * * @see ubidi_getVisualMap * @see ubidi_getVisualIndex + * @see ubidi_getResultLength * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -894,19 +1423,27 @@ ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode) /** * Get a logical-to-visual index map (array) for the characters in the UBiDi * (paragraph or line) object. + *

+ * Some values in the map may be #UBIDI_MAP_NOWHERE if the + * corresponding text characters are BiDi controls removed from the visual + * output by the option #UBIDI_OPTION_REMOVE_CONTROLS. * * @param pBiDi is the paragraph or line UBiDi object. * - * @param indexMap is a pointer to an array of ubidi_getLength() + * @param indexMap is a pointer to an array of ubidi_getProcessedLength() * indexes which will reflect the reordering of the characters. - * The array does not need to be initialized.

- * The index map will result in indexMap[logicalIndex]==visualIndex.

+ * If option #UBIDI_OPTION_INSERT_MARKS is set, the number + * of elements allocated in indexMap must be no less than + * ubidi_getResultLength(). + * The array does not need to be initialized.

+ * The index map will result in indexMap[logicalIndex]==visualIndex. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @see ubidi_getVisualMap * @see ubidi_getVisualIndex + * @see ubidi_getProcessedLength + * @see ubidi_getResultLength * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -915,19 +1452,27 @@ ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); /** * Get a visual-to-logical index map (array) for the characters in the UBiDi * (paragraph or line) object. + *

+ * Some values in the map may be #UBIDI_MAP_NOWHERE if the + * corresponding text characters are BiDi marks inserted in the visual output + * by the option #UBIDI_OPTION_INSERT_MARKS. * * @param pBiDi is the paragraph or line UBiDi object. * - * @param indexMap is a pointer to an array of ubidi_getLength() + * @param indexMap is a pointer to an array of ubidi_getResultLength() * indexes which will reflect the reordering of the characters. - * The array does not need to be initialized.

- * The index map will result in indexMap[visualIndex]==logicalIndex.

+ * If option #UBIDI_OPTION_REMOVE_CONTROLS is set, the number + * of elements allocated in indexMap must be no less than + * ubidi_getProcessedLength(). + * The array does not need to be initialized.

+ * The index map will result in indexMap[visualIndex]==logicalIndex. * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @see ubidi_getLogicalMap * @see ubidi_getLogicalIndex + * @see ubidi_getProcessedLength + * @see ubidi_getResultLength * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -937,7 +1482,7 @@ ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode); * This is a convenience function that does not use a UBiDi object. * It is intended to be used for when an application has determined the levels * of objects (character sequences) and just needs to have them reordered (L2). - * This is equivalent to using ubidi_getLogicalMap on a + * This is equivalent to using ubidi_getLogicalMap() on a * UBiDi object. * * @param levels is an array with length levels that have been determined by @@ -960,7 +1505,7 @@ ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap * This is a convenience function that does not use a UBiDi object. * It is intended to be used for when an application has determined the levels * of objects (character sequences) and just needs to have them reordered (L2). - * This is equivalent to using ubidi_getVisualMap on a + * This is equivalent to using ubidi_getVisualMap() on a * UBiDi object. * * @param levels is an array with length levels that have been determined by @@ -981,16 +1526,29 @@ ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap) /** * Invert an index map. - * The one-to-one index mapping of the first map is inverted and written to + * The index mapping of the first map is inverted and written to * the second one. * * @param srcMap is an array with length indexes - * which define the original mapping. - * - * @param destMap is an array with length indexes - * which will be filled with the inverse mapping. + * which defines the original mapping from a source array containing + * length elements to a destination array. + * All indexes must be >=0 or equal to UBIDI_MAP_NOWHERE. + * This special value means that the corresponding elements in the source + * array have no matching element in the destination array. + * Some indexes may have a value >= length, if the + * destination array has more elements than the source array. + * There must be no duplicate indexes (two or more indexes with the + * same value except UBIDI_MAP_NOWHERE). + * + * @param destMap is an array with a number of indexes equal to 1 + the highest + * value in srcMap. + * destMap will be filled with the inverse mapping. + * Elements of destMap which have no matching elements in + * srcMap will receive an index equal to + * UBIDI_MAP_NOWHERE * * @param length is the length of each array. + * @See UBIDI_MAP_NOWHERE * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -1022,6 +1580,9 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); * surround the run with LRMs if necessary; * this is part of the approximate "inverse BiDi" algorithm * + *

This option does not imply corresponding adjustment of the index + * mappings.

+ * * @see ubidi_setInverse * @see ubidi_writeReordered * @stable ICU 2.0 @@ -1031,7 +1592,10 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); /** * option bit for ubidi_writeReordered(): * remove BiDi control characters - * (this does not affect UBIDI_INSERT_LRM_FOR_NUMERIC) + * (this does not affect #UBIDI_INSERT_LRM_FOR_NUMERIC) + * + *

This option does not imply corresponding adjustment of the index + * mappings.

* * @see ubidi_writeReordered * @stable ICU 2.0 @@ -1054,11 +1618,182 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); */ #define UBIDI_OUTPUT_REVERSE 16 +/** + * Get the length of the source text processed by the last call to + * ubidi_setPara(). This length may be different from the length + * of the source text if option #UBIDI_OPTION_STREAMING + * has been set. + *
+ * Note that whenever the length of the text affects the execution or the + * result of a function, it is the processed length which must be considered, + * except for ubidi_setPara (which receives unprocessed source + * text) and ubidi_getLength (which returns the original length + * of the source text).
+ * In particular, the processed length is the one to consider in the following + * cases: + *
    + *
  • maximum value of the limit argument of + * ubidi_setLine
  • + *
  • maximum value of the charIndex argument of + * ubidi_getParagraph
  • + *
  • maximum value of the charIndex argument of + * ubidi_getLevelAt
  • + *
  • number of elements in the array returned by ubidi_getLevels
  • + *
  • maximum value of the logicalStart argument of + * ubidi_getLogicalRun
  • + *
  • maximum value of the logicalIndex argument of + * ubidi_getVisualIndex
  • + *
  • number of elements filled in the *indexMap argument of + * ubidi_getLogicalMap
  • + *
  • length of text processed by ubidi_writeReordered
  • + *
+ * + * @param pBiDi is the paragraph UBiDi object. + * + * @return The length of the part of the source text processed by + * the last call to ubidi_setPara. + * @see ubidi_setPara + * @see UBIDI_OPTION_STREAMING + * @draft ICU 3.6 + */ +U_DRAFT int32_t U_EXPORT2 +ubidi_getProcessedLength(const UBiDi *pBiDi); + +/** + * Get the length of the reordered text resulting from the last call to + * ubidi_setPara(). This length may be different from the length + * of the source text if option #UBIDI_OPTION_INSERT_MARKS + * or option #UBIDI_OPTION_REMOVE_CONTROLS has been set. + *
+ * This resulting length is the one to consider in the following cases: + *
    + *
  • maximum value of the visualIndex argument of + * ubidi_getLogicalIndex
  • + *
  • number of elements of the *indexMap argument of + * ubidi_getVisualMap
  • + *
+ * Note that this length stays identical to the source text length if + * BiDi marks are inserted or removed using option bits of + * ubidi_writeReordered, or if option + * #UBIDI_REORDER_INVERSE_NUMBERS_AS_L has been set. + * + * @param pBiDi is the paragraph UBiDi object. + * + * @return The length of the reordered text resulting from + * the last call to ubidi_setPara. + * @see ubidi_setPara + * @see UBIDI_OPTION_INSERT_MARKS + * @see UBIDI_OPTION_REMOVE_CONTROLS + * @draft ICU 3.6 + */ +U_DRAFT int32_t U_EXPORT2 +ubidi_getResultLength(const UBiDi *pBiDi); + +U_CDECL_BEGIN +/** + * value returned by UBiDiClassCallback callbacks when + * there is no need to override the standard BiDi class for a given code point. + * @see UBiDiClassCallback + * @draft ICU 3.6 + */ +#define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT + +/** + * Callback type declaration for overriding default BiDi class values with + * custom ones. + *

Usually, the function pointer will be propagated to a UBiDi + * object by calling the ubidi_setClassCallback() function; + * then the callback will be invoked by the UBA implementation any time the + * class of a character is to be determined.

+ * + * @param context is a pointer to the callback private data. + * + * @param c is the code point to get a BiDi class for. + * + * @return The directional property / BiDi class for the given code point + * c if the default class has been overridden, or + * #U_BIDI_CLASS_DEFAULT if the standard BiDi class value + * for c is to be used. + * @see ubidi_setClassCallback + * @see ubidi_getClassCallback + * @draft ICU 3.6 + */ +typedef UCharDirection U_CALLCONV +UBiDiClassCallback(const void *context, UChar32 c); + +U_CDECL_END + +/** + * Retrieve the BiDi class for a given code point. + *

If a #UBiDiClassCallback callback is defined and returns a + * value other than #U_BIDI_CLASS_DEFAULT, that value is used; + * otherwise the default class determination mechanism is invoked.

+ * + * @param pBiDi is the paragraph UBiDi object. + * + * @param c is the code point whose BiDi class must be retrieved. + * + * @return The BiDi class for character c based + * on the given pBiDi instance. + * @see UBiDiClassCallback + * @draft ICU 3.6 + */ +U_DRAFT UCharDirection U_EXPORT2 +ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c); + +/** + * Set the callback function and callback data used by the UBA + * implementation for BiDi class determination. + *

This may be useful for assigning BiDi classes to PUA characters, or + * for special application needs. For instance, an application may want to + * handle all spaces like L or R characters (according to the base direction) + * when creating the visual ordering of logical lines which are part of a report + * organized in columns: there should not be interaction between adjacent + * cells.

+ * + * @param pBiDi is the paragraph UBiDi object. + * + * @param newFn is the new callback function pointer. + * + * @param newContext is the new callback context pointer. This can be NULL. + * + * @param oldFn fillin: Returns the old callback function pointer. This can be + * NULL. + * + * @param oldContext fillin: Returns the old callback's context. This can be + * NULL. + * + * @param pErrorCode must be a valid pointer to an error code value. + * + * @see ubidi_getClassCallback + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, + const void *newContext, UBiDiClassCallback **oldFn, + const void **oldContext, UErrorCode *pErrorCode); + +/** + * Get the current callback function used for BiDi class determination. + * + * @param pBiDi is the paragraph UBiDi object. + * + * @param fn fillin: Returns the callback function pointer. + * + * @param context fillin: Returns the callback's private context. + * + * @see ubidi_setClassCallback + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context); + /** * Take a UBiDi object containing the reordering - * information for one paragraph or line of text as set by - * ubidi_setPara() or ubidi_setLine() and - * write a reordered string to the destination buffer. + * information for a piece of text (one or more paragraphs) set by + * ubidi_setPara() or for a line of text set by + * ubidi_setLine() and write a reordered string to the + * destination buffer. * * This function preserves the integrity of characters with multiple * code units and (optionally) modifier letters. @@ -1071,20 +1806,14 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); * characters; see the description of the destSize * and options parameters and of the option bit flags. * - * @see UBIDI_DO_MIRRORING - * @see UBIDI_INSERT_LRM_FOR_NUMERIC - * @see UBIDI_KEEP_BASE_COMBINING - * @see UBIDI_OUTPUT_REVERSE - * @see UBIDI_REMOVE_BIDI_CONTROLS - * * @param pBiDi A pointer to a UBiDi object that * is set by ubidi_setPara() or * ubidi_setLine() and contains the reordering * information for the text that it was defined for, - * as well as a pointer to that text. - *

The text was aliased (only the pointer was stored + * as well as a pointer to that text.

+ * The text was aliased (only the pointer was stored * without copying the contents) and must not have been modified - * since the ubidi_setPara() call.

+ * since the ubidi_setPara() call. * * @param dest A pointer to where the reordered text is to be copied. * The source text and dest[destSize] @@ -1117,10 +1846,11 @@ ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length); * #UBIDI_OUTPUT_REVERSE, * #UBIDI_REMOVE_BIDI_CONTROLS * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return The length of the output string. + * + * @see ubidi_getProcessedLength * @stable ICU 2.0 */ U_STABLE int32_t U_EXPORT2 @@ -1170,8 +1900,7 @@ ubidi_writeReordered(UBiDi *pBiDi, * how the reordered text is written. * See the options parameter in ubidi_writeReordered(). * - * @param pErrorCode must be a valid pointer to an error code value, - * which must not indicate a failure before the function call. + * @param pErrorCode must be a valid pointer to an error code value. * * @return The length of the output string. * @stable ICU 2.0 diff --git a/icuSources/common/unicode/ubrk.h b/icuSources/common/unicode/ubrk.h index 81e12c00..39f25cf8 100644 --- a/icuSources/common/unicode/ubrk.h +++ b/icuSources/common/unicode/ubrk.h @@ -1,6 +1,8 @@ /* -* Copyright (C) 1996-2004, International Business Machines Corporation and others. All Rights Reserved. -***************************************************************************************** +****************************************************************************** +* Copyright (C) 1996-2006, International Business Machines Corporation and others. +* All Rights Reserved. +****************************************************************************** */ #ifndef UBRK_H @@ -8,6 +10,7 @@ #include "unicode/utypes.h" #include "unicode/uloc.h" +#include "unicode/utext.h" /** * A text-break iterator. @@ -36,22 +39,22 @@ * of boundaries in text. Pointer to a UBreakIterator maintain a * current position and scan over text returning the index of characters * where boundaries occur. - *

+ *

* Line boundary analysis determines where a text string can be broken * when line-wrapping. The mechanism correctly handles punctuation and * hyphenated words. - *

+ *

* Sentence boundary analysis allows selection with correct * interpretation of periods within numbers and abbreviations, and * trailing punctuation marks such as quotation marks and parentheses. - *

+ *

* Word boundary analysis is used by search and replace functions, as * well as within text editing applications that allow the user to * select words with a double click. Word selection provides correct * interpretation of punctuation marks within and following * words. Characters that are not part of a word, such as symbols or * punctuation marks, have word-breaks on both sides. - *

+ *

* Character boundary analysis allows users to interact with * characters as they expect to, for example, when moving the cursor * through a text string. Character boundary analysis provides correct @@ -59,140 +62,37 @@ * character is stored. For example, an accented character might be * stored as a base character and a diacritical mark. What users * consider to be a character can differ between languages. - *

+ *

* Title boundary analysis locates all positions, * typically starts of words, that should be set to Title Case * when title casing the text. - *

- * - * This is the interface for all text boundaries. - *

- * Examples: - *

- * Helper function to output text - *

- * \code
- *    void printTextRange(UChar* str, int32_t start, int32_t end ) {
- *         UChar* result;
- *         UChar* temp;
- *         const char* res;
- *         temp=(UChar*)malloc(sizeof(UChar) * ((u_strlen(str)-start)+1));
- *         result=(UChar*)malloc(sizeof(UChar) * ((end-start)+1));
- *         u_strcpy(temp, &str[start]);
- *         u_strncpy(result, temp, end-start);
- *         res=(char*)malloc(sizeof(char) * (u_strlen(result)+1));
- *         u_austrcpy(res, result);
- *         printf("%s\n", res);
- *    }
- * \endcode
- * 
- * Print each element in order: - *
- * \code
- *    void printEachForward( UBreakIterator* boundary, UChar* str) {
- *       int32_t end;
- *       int32_t start = ubrk_first(boundary);
- *       for (end = ubrk_next(boundary)); end != UBRK_DONE; start = end, end = ubrk_next(boundary)) {
- *             printTextRange(str, start, end );
- *         }
- *    }
- * \endcode
- * 
- * Print each element in reverse order: - *
- * \code
- *    void printEachBackward( UBreakIterator* boundary, UChar* str) {
- *       int32_t start;
- *       int32_t end = ubrk_last(boundary);
- *       for (start = ubrk_previous(boundary); start != UBRK_DONE;  end = start, start =ubrk_previous(boundary)) {
- *             printTextRange( str, start, end );
- *         }
- *    }
- * \endcode
- * 
- * Print first element - *
- * \code
- *    void printFirst(UBreakIterator* boundary, UChar* str) {
- *        int32_t end;
- *        int32_t start = ubrk_first(boundary);
- *        end = ubrk_next(boundary);
- *        printTextRange( str, start, end );
- *    }
- * \endcode
- * 
- * Print last element - *
- * \code
- *    void printLast(UBreakIterator* boundary, UChar* str) {
- *        int32_t start;
- *        int32_t end = ubrk_last(boundary);
- *        start = ubrk_previous(boundary);
- *        printTextRange(str, start, end );
- *    }
- * \endcode
- * 
- * Print the element at a specified position - *
- * \code
- *    void printAt(UBreakIterator* boundary, int32_t pos , UChar* str) {
- *        int32_t start;
- *        int32_t end = ubrk_following(boundary, pos);
- *        start = ubrk_previous(boundary);
- *        printTextRange(str, start, end );
- *    }
- * \endcode
- * 
- * Creating and using text boundaries - *
- * \code
- *       void BreakIterator_Example( void ) {
- *           UBreakIterator* boundary;
- *           UChar *stringToExamine;
- *           stringToExamine=(UChar*)malloc(sizeof(UChar) * (strlen("Aaa bbb ccc. Ddd eee fff.")+1) );
- *           u_uastrcpy(stringToExamine, "Aaa bbb ccc. Ddd eee fff.");
- *           printf("Examining: "Aaa bbb ccc. Ddd eee fff.");
- *
- *           //print each sentence in forward and reverse order
- *           boundary = ubrk_open(UBRK_SENTENCE, "en_us", stringToExamine, u_strlen(stringToExamine), &status);
- *           printf("----- forward: -----------\n");
- *           printEachForward(boundary, stringToExamine);
- *           printf("----- backward: ----------\n");
- *           printEachBackward(boundary, stringToExamine);
- *           ubrk_close(boundary);
- *
- *           //print each word in order
- *           boundary = ubrk_open(UBRK_WORD, "en_us", stringToExamine, u_strlen(stringToExamine), &status);
- *           printf("----- forward: -----------\n");
- *           printEachForward(boundary, stringToExamine);
- *           printf("----- backward: ----------\n");
- *           printEachBackward(boundary, stringToExamine);
- *           //print first element
- *           printf("----- first: -------------\n");
- *           printFirst(boundary, stringToExamine);
- *           //print last element
- *           printf("----- last: --------------\n");
- *           printLast(boundary, stringToExamine);
- *           //print word at charpos 10
- *           printf("----- at pos 10: ---------\n");
- *           printAt(boundary, 10 , stringToExamine);
- *
- *           ubrk_close(boundary);
- *       }
- * \endcode
- * 
+ *

+ * The text boundary positions are found according to the rules + * described in Unicode Standard Annex #29, Text Boundaries, and + * Unicode Standard Annex #14, Line Breaking Properties. These + * are available at http://www.unicode.org/reports/tr14/ and + * http://www.unicode.org/reports/tr29/. + *

+ * In addition to the plain C API defined in this header file, an + * object oriented C++ API with equivalent functionality is defined in the + * file brkiter.h. + *

+ * Code snippits illustrating the use of the Break Iterator APIs + * are available in the ICU User Guide, + * http://icu.sourceforge.net/userguide/boundaryAnalysis.html + * and in the sample program icu/source/samples/break/break.cpp" */ /** The possible types of text boundaries. @stable ICU 2.0 */ typedef enum UBreakIteratorType { /** Character breaks @stable ICU 2.0 */ - UBRK_CHARACTER, + UBRK_CHARACTER = 0, /** Word breaks @stable ICU 2.0 */ - UBRK_WORD, + UBRK_WORD = 1, /** Line breaks @stable ICU 2.0 */ - UBRK_LINE, + UBRK_LINE = 2, /** Sentence breaks @stable ICU 2.0 */ - UBRK_SENTENCE, + UBRK_SENTENCE = 3, #ifndef U_HIDE_DEPRECATED_API /** @@ -203,9 +103,9 @@ typedef enum UBreakIteratorType { * * @deprecated ICU 2.8 Use the word break iterator for titlecasing for Unicode 4 and later. */ - UBRK_TITLE + UBRK_TITLE = 4, #endif /* U_HIDE_DEPRECATED_API */ - + UBRK_COUNT = 5 } UBreakIteratorType; /** Value indicating all text boundaries have been returned. @@ -253,7 +153,7 @@ typedef enum UWordBreak { * word, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef enum ULineBreakTag { /** Tag value for soft line breaks, positions at which a line break @@ -275,7 +175,7 @@ typedef enum ULineBreakTag { * sentence, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef enum USentenceBreakTag { /** Tag value for for sentences ending with a sentence terminator @@ -392,6 +292,21 @@ ubrk_setText(UBreakIterator* bi, int32_t textLength, UErrorCode* status); + +/** + * Sets an existing iterator to point to a new piece of text + * @param bi The iterator to use + * @param text The text to be set + * @param status The error code + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ubrk_setUText(UBreakIterator* bi, + UText* text, + UErrorCode* status); + + + /** * Determine the most recently-returned text boundary. * @@ -540,9 +455,9 @@ ubrk_getRuleStatus(UBreakIterator *bi); * @param status receives error codes. * @return The number of rule status values from rules that determined * the most recent boundary returned by the break iterator. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, UErrorCode *status); /** @@ -552,9 +467,9 @@ ubrk_getRuleStatusVec(UBreakIterator *bi, int32_t *fillInVec, int32_t capacity, * @param type locale type (valid or actual) * @param status error code * @return locale string - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ -U_DRAFT const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 ubrk_getLocaleByType(const UBreakIterator *bi, ULocDataLocaleType type, UErrorCode* status); diff --git a/icuSources/common/unicode/ucasemap.h b/icuSources/common/unicode/ucasemap.h new file mode 100644 index 00000000..17c8f601 --- /dev/null +++ b/icuSources/common/unicode/ucasemap.h @@ -0,0 +1,180 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: ucasemap.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005may06 +* created by: Markus W. Scherer +* +* Case mapping service object and functions using it. +*/ + +#ifndef __UCASEMAP_H__ +#define __UCASEMAP_H__ + +#include "unicode/utypes.h" +#include "unicode/ustring.h" + +/** + * \file + * \brief C API: Unicode case mapping functions using a UCaseMap service object. + * + * The service object takes care of memory allocations, data loading, and setup + * for the attributes, as usual. + * + * Currently, the functionality provided here does not overlap with uchar.h + * and ustring.h. + * + * ucasemap_utf8ToLower() and ucasemap_utf8ToUpper() operate directly on + * UTF-8 strings. + */ + +/** + * UCaseMap is an opaque service object for newer ICU case mapping functions. + * Older functions did not use a service object. + * @draft ICU 3.4 + */ +struct UCaseMap; +typedef struct UCaseMap UCaseMap; /**< C typedef for struct UCaseMap. @draft ICU 3.4 */ + +/** + * Open a UCaseMap service object for a locale and a set of options. + * The locale ID and options are preprocessed so that functions using the + * service object need not process them in each call. + * + * @param locale ICU locale ID, used for language-dependent + * upper-/lower-/title-casing according to the Unicode standard. + * Usual semantics: ""=root, NULL=default locale, etc. + * @param options Options bit set, used for case folding and string comparisons. + * Same flags as for u_foldCase(), u_strFoldCase(), + * u_strCaseCompare(), etc. + * Use 0 or U_FOLD_CASE_DEFAULT for default behavior. + * @param pErrorCode Must be a valid pointer to an error code value, + * which must not indicate a failure before the function call. + * @return Pointer to a UCaseMap service object, if successful. + * + * @draft ICU 3.4 + */ +U_DRAFT UCaseMap * U_EXPORT2 +ucasemap_open(const char *locale, uint32_t options, UErrorCode *pErrorCode); + +/** + * Close a UCaseMap service object. + * @param csm Object to be closed. + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ucasemap_close(UCaseMap *csm); + +/** + * Get the locale ID that is used for language-dependent case mappings. + * @param csm UCaseMap service object. + * @return locale ID + * @draft ICU 3.4 + */ +U_DRAFT const char * U_EXPORT2 +ucasemap_getLocale(const UCaseMap *csm); + +/** + * Get the options bit set that is used for case folding and string comparisons. + * @param csm UCaseMap service object. + * @return options bit set + * @draft ICU 3.4 + */ +U_DRAFT uint32_t U_EXPORT2 +ucasemap_getOptions(const UCaseMap *csm); + +/** + * Set the locale ID that is used for language-dependent case mappings. + * + * @param csm UCaseMap service object. + * @param locale Locale ID, see ucasemap_open(). + * @param pErrorCode Must be a valid pointer to an error code value, + * which must not indicate a failure before the function call. + * + * @see ucasemap_open + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode); + +/** + * Set the options bit set that is used for case folding and string comparisons. + * + * @param csm UCaseMap service object. + * @param options Options bit set, see ucasemap_open(). + * @param pErrorCode Must be a valid pointer to an error code value, + * which must not indicate a failure before the function call. + * + * @see ucasemap_open + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode); + +/** + * Lowercase the characters in a UTF-8 string. + * Casing is locale-dependent and context-sensitive. + * The result may be longer or shorter than the original. + * The source string and the destination buffer must not overlap. + * + * @param csm UCaseMap service object. + * @param dest A buffer for the result string. The result will be NUL-terminated if + * the buffer is large enough. + * The contents is undefined in case of failure. + * @param destCapacity The size of the buffer (number of bytes). If it is 0, then + * dest may be NULL and the function will only return the length of the result + * without writing any of the result string. + * @param src The original string + * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. + * @param pErrorCode Must be a valid pointer to an error code value, + * which must not indicate a failure before the function call. + * @return The length of the result string, if successful - or in case of a buffer overflow, + * in which case it will be greater than destCapacity. + * + * @see u_strToLower + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +ucasemap_utf8ToLower(const UCaseMap *csm, + char *dest, int32_t destCapacity, + const char *src, int32_t srcLength, + UErrorCode *pErrorCode); + +/** + * Uppercase the characters in a UTF-8 string. + * Casing is locale-dependent and context-sensitive. + * The result may be longer or shorter than the original. + * The source string and the destination buffer must not overlap. + * + * @param csm UCaseMap service object. + * @param dest A buffer for the result string. The result will be NUL-terminated if + * the buffer is large enough. + * The contents is undefined in case of failure. + * @param destCapacity The size of the buffer (number of bytes). If it is 0, then + * dest may be NULL and the function will only return the length of the result + * without writing any of the result string. + * @param src The original string + * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. + * @param pErrorCode Must be a valid pointer to an error code value, + * which must not indicate a failure before the function call. + * @return The length of the result string, if successful - or in case of a buffer overflow, + * in which case it will be greater than destCapacity. + * + * @see u_strToUpper + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +ucasemap_utf8ToUpper(const UCaseMap *csm, + char *dest, int32_t destCapacity, + const char *src, int32_t srcLength, + UErrorCode *pErrorCode); + +#endif diff --git a/icuSources/common/unicode/uchar.h b/icuSources/common/unicode/uchar.h index 7fd490c8..ce5fc4f4 100644 --- a/icuSources/common/unicode/uchar.h +++ b/icuSources/common/unicode/uchar.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -39,7 +39,7 @@ U_CDECL_BEGIN * @see u_getUnicodeVersion * @stable ICU 2.0 */ -#define U_UNICODE_VERSION "4.0.1" +#define U_UNICODE_VERSION "5.0" /** * \file @@ -56,12 +56,12 @@ U_CDECL_BEGIN * * For more information see * "About the Unicode Character Database" (http://www.unicode.org/ucd/) - * and the ICU User Guide chapter on Properties (http://oss.software.ibm.com/icu/userguide/properties.html). + * and the ICU User Guide chapter on Properties (http://icu.sourceforge.net/userguide/properties.html). * * Many functions are designed to match java.lang.Character functions. * See the individual function documentation, - * and see the JDK 1.4.1 java.lang.Character documentation - * at http://java.sun.com/j2se/1.4.1/docs/api/java/lang/Character.html + * and see the JDK 1.4 java.lang.Character documentation + * at http://java.sun.com/j2se/1.4/docs/api/java/lang/Character.html * * There are also functions that provide easy migration from C/POSIX functions * like isblank(). Their use is generally discouraged because the C/POSIX @@ -77,12 +77,33 @@ U_CDECL_BEGIN * (In ICU, BreakIterator is the most sophisticated API for word boundaries.) * Another example: There is no "istitle()" class for titlecase characters. * - * A summary of the behavior of some C/POSIX character classification implementations - * for Unicode is available at http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/posix_classes.html - * - * Important: - * The behavior of the ICU C/POSIX-style character classification - * functions is subject to change according to discussion of the above summary. + * ICU 3.4 and later provides API access for all twelve C/POSIX character classes. + * ICU implements them according to the Standard Recommendations in + * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions + * (http://www.unicode.org/reports/tr18/#Compatibility_Properties). + * + * API access for C/POSIX character classes is as follows: + * - alpha: u_isUAlphabetic(c) or u_hasBinaryProperty(c, UCHAR_ALPHABETIC) + * - lower: u_isULowercase(c) or u_hasBinaryProperty(c, UCHAR_LOWERCASE) + * - upper: u_isUUppercase(c) or u_hasBinaryProperty(c, UCHAR_UPPERCASE) + * - punct: u_ispunct(c) + * - digit: u_isdigit(c) or u_charType(c)==U_DECIMAL_DIGIT_NUMBER + * - xdigit: u_isxdigit(c) or u_hasBinaryProperty(c, UCHAR_POSIX_XDIGIT) + * - alnum: u_hasBinaryProperty(c, UCHAR_POSIX_ALNUM) + * - space: u_isUWhiteSpace(c) or u_hasBinaryProperty(c, UCHAR_WHITE_SPACE) + * - blank: u_isblank(c) or u_hasBinaryProperty(c, UCHAR_POSIX_BLANK) + * - cntrl: u_charType(c)==U_CONTROL_CHAR + * - graph: u_hasBinaryProperty(c, UCHAR_POSIX_GRAPH) + * - print: u_hasBinaryProperty(c, UCHAR_POSIX_PRINT) + * + * Note: Some of the u_isxyz() functions in uchar.h predate, and do not match, + * the Standard Recommendations in UTS #18. Instead, they match Java + * functions according to their API documentation. + * + * \htmlonly + * The C/POSIX character classes are also available in UnicodeSet patterns, + * using patterns like [:graph:] or \p{graph}. + * \endhtmlonly * * Note: There are several ICU whitespace functions. * Comparison: @@ -166,137 +187,137 @@ typedef enum UProperty { /** First constant for binary Unicode properties. @stable ICU 2.1 */ UCHAR_BINARY_START=UCHAR_ALPHABETIC, /** Binary property ASCII_Hex_Digit. 0-9 A-F a-f @stable ICU 2.1 */ - UCHAR_ASCII_HEX_DIGIT, + UCHAR_ASCII_HEX_DIGIT=1, /** Binary property Bidi_Control. Format controls which have specific functions in the Bidi Algorithm. @stable ICU 2.1 */ - UCHAR_BIDI_CONTROL, + UCHAR_BIDI_CONTROL=2, /** Binary property Bidi_Mirrored. Characters that may change display in RTL text. Same as u_isMirrored. See Bidi Algorithm, UTR 9. @stable ICU 2.1 */ - UCHAR_BIDI_MIRRORED, + UCHAR_BIDI_MIRRORED=3, /** Binary property Dash. Variations of dashes. @stable ICU 2.1 */ - UCHAR_DASH, + UCHAR_DASH=4, /** Binary property Default_Ignorable_Code_Point (new in Unicode 3.2). Ignorable in most processing. <2060..206F, FFF0..FFFB, E0000..E0FFF>+Other_Default_Ignorable_Code_Point+(Cf+Cc+Cs-White_Space) @stable ICU 2.1 */ - UCHAR_DEFAULT_IGNORABLE_CODE_POINT, + UCHAR_DEFAULT_IGNORABLE_CODE_POINT=5, /** Binary property Deprecated (new in Unicode 3.2). The usage of deprecated characters is strongly discouraged. @stable ICU 2.1 */ - UCHAR_DEPRECATED, + UCHAR_DEPRECATED=6, /** Binary property Diacritic. Characters that linguistically modify the meaning of another character to which they apply. @stable ICU 2.1 */ - UCHAR_DIACRITIC, + UCHAR_DIACRITIC=7, /** Binary property Extender. Extend the value or shape of a preceding alphabetic character, e.g., length and iteration marks. @stable ICU 2.1 */ - UCHAR_EXTENDER, + UCHAR_EXTENDER=8, /** Binary property Full_Composition_Exclusion. CompositionExclusions.txt+Singleton Decompositions+ Non-Starter Decompositions. @stable ICU 2.1 */ - UCHAR_FULL_COMPOSITION_EXCLUSION, + UCHAR_FULL_COMPOSITION_EXCLUSION=9, /** Binary property Grapheme_Base (new in Unicode 3.2). For programmatic determination of grapheme cluster boundaries. [0..10FFFF]-Cc-Cf-Cs-Co-Cn-Zl-Zp-Grapheme_Link-Grapheme_Extend-CGJ @stable ICU 2.1 */ - UCHAR_GRAPHEME_BASE, + UCHAR_GRAPHEME_BASE=10, /** Binary property Grapheme_Extend (new in Unicode 3.2). For programmatic determination of grapheme cluster boundaries. Me+Mn+Mc+Other_Grapheme_Extend-Grapheme_Link-CGJ @stable ICU 2.1 */ - UCHAR_GRAPHEME_EXTEND, + UCHAR_GRAPHEME_EXTEND=11, /** Binary property Grapheme_Link (new in Unicode 3.2). For programmatic determination of grapheme cluster boundaries. @stable ICU 2.1 */ - UCHAR_GRAPHEME_LINK, + UCHAR_GRAPHEME_LINK=12, /** Binary property Hex_Digit. Characters commonly used for hexadecimal numbers. @stable ICU 2.1 */ - UCHAR_HEX_DIGIT, + UCHAR_HEX_DIGIT=13, /** Binary property Hyphen. Dashes used to mark connections between pieces of words, plus the Katakana middle dot. @stable ICU 2.1 */ - UCHAR_HYPHEN, + UCHAR_HYPHEN=14, /** Binary property ID_Continue. Characters that can continue an identifier. DerivedCoreProperties.txt also says "NOTE: Cf characters should be filtered out." ID_Start+Mn+Mc+Nd+Pc @stable ICU 2.1 */ - UCHAR_ID_CONTINUE, + UCHAR_ID_CONTINUE=15, /** Binary property ID_Start. Characters that can start an identifier. Lu+Ll+Lt+Lm+Lo+Nl @stable ICU 2.1 */ - UCHAR_ID_START, + UCHAR_ID_START=16, /** Binary property Ideographic. CJKV ideographs. @stable ICU 2.1 */ - UCHAR_IDEOGRAPHIC, + UCHAR_IDEOGRAPHIC=17, /** Binary property IDS_Binary_Operator (new in Unicode 3.2). For programmatic determination of Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_IDS_BINARY_OPERATOR, + UCHAR_IDS_BINARY_OPERATOR=18, /** Binary property IDS_Trinary_Operator (new in Unicode 3.2). For programmatic determination of Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_IDS_TRINARY_OPERATOR, + UCHAR_IDS_TRINARY_OPERATOR=19, /** Binary property Join_Control. Format controls for cursive joining and ligation. @stable ICU 2.1 */ - UCHAR_JOIN_CONTROL, + UCHAR_JOIN_CONTROL=20, /** Binary property Logical_Order_Exception (new in Unicode 3.2). Characters that do not use logical order and require special handling in most processing. @stable ICU 2.1 */ - UCHAR_LOGICAL_ORDER_EXCEPTION, + UCHAR_LOGICAL_ORDER_EXCEPTION=21, /** Binary property Lowercase. Same as u_isULowercase, different from u_islower. Ll+Other_Lowercase @stable ICU 2.1 */ - UCHAR_LOWERCASE, + UCHAR_LOWERCASE=22, /** Binary property Math. Sm+Other_Math @stable ICU 2.1 */ - UCHAR_MATH, + UCHAR_MATH=23, /** Binary property Noncharacter_Code_Point. Code points that are explicitly defined as illegal for the encoding of characters. @stable ICU 2.1 */ - UCHAR_NONCHARACTER_CODE_POINT, + UCHAR_NONCHARACTER_CODE_POINT=24, /** Binary property Quotation_Mark. @stable ICU 2.1 */ - UCHAR_QUOTATION_MARK, + UCHAR_QUOTATION_MARK=25, /** Binary property Radical (new in Unicode 3.2). For programmatic determination of Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_RADICAL, + UCHAR_RADICAL=26, /** Binary property Soft_Dotted (new in Unicode 3.2). Characters with a "soft dot", like i or j. An accent placed on these characters causes the dot to disappear. @stable ICU 2.1 */ - UCHAR_SOFT_DOTTED, + UCHAR_SOFT_DOTTED=27, /** Binary property Terminal_Punctuation. Punctuation characters that generally mark the end of textual units. @stable ICU 2.1 */ - UCHAR_TERMINAL_PUNCTUATION, + UCHAR_TERMINAL_PUNCTUATION=28, /** Binary property Unified_Ideograph (new in Unicode 3.2). For programmatic determination of Ideographic Description Sequences. @stable ICU 2.1 */ - UCHAR_UNIFIED_IDEOGRAPH, + UCHAR_UNIFIED_IDEOGRAPH=29, /** Binary property Uppercase. Same as u_isUUppercase, different from u_isupper. Lu+Other_Uppercase @stable ICU 2.1 */ - UCHAR_UPPERCASE, + UCHAR_UPPERCASE=30, /** Binary property White_Space. Same as u_isUWhiteSpace, different from u_isspace and u_isWhitespace. Space characters+TAB+CR+LF-ZWSP-ZWNBSP @stable ICU 2.1 */ - UCHAR_WHITE_SPACE, + UCHAR_WHITE_SPACE=31, /** Binary property XID_Continue. ID_Continue modified to allow closure under normalization forms NFKC and NFKD. @stable ICU 2.1 */ - UCHAR_XID_CONTINUE, + UCHAR_XID_CONTINUE=32, /** Binary property XID_Start. ID_Start modified to allow closure under normalization forms NFKC and NFKD. @stable ICU 2.1 */ - UCHAR_XID_START, + UCHAR_XID_START=33, /** Binary property Case_Sensitive. Either the source of a case mapping or _in_ the target of a case mapping. Not the same as the general category Cased_Letter. @stable ICU 2.6 */ - UCHAR_CASE_SENSITIVE, + UCHAR_CASE_SENSITIVE=34, /** Binary property STerm (new in Unicode 4.0.1). Sentence Terminal. Used in UAX #29: Text Boundaries (http://www.unicode.org/reports/tr29/) - @draft ICU 3.0 */ - UCHAR_S_TERM, + @stable ICU 3.0 */ + UCHAR_S_TERM=35, /** Binary property Variation_Selector (new in Unicode 4.0.1). Indicates all those characters that qualify as Variation Selectors. For details on the behavior of these characters, see StandardizedVariants.html and 15.6 Variation Selectors. - @draft ICU 3.0 */ - UCHAR_VARIATION_SELECTOR, + @stable ICU 3.0 */ + UCHAR_VARIATION_SELECTOR=36, /** Binary property NFD_Inert. ICU-specific property for characters that are inert under NFD, i.e., they do not interact with adjacent characters. @@ -318,8 +339,8 @@ typedef enum UProperty { See also com.ibm.text.UCD.NFSkippable in the ICU4J repository, and icu/source/common/unormimp.h . - @draft ICU 3.0 */ - UCHAR_NFD_INERT, + @stable ICU 3.0 */ + UCHAR_NFD_INERT=37, /** Binary property NFKD_Inert. ICU-specific property for characters that are inert under NFKD, i.e., they do not interact with adjacent characters. @@ -327,8 +348,8 @@ typedef enum UProperty { to find the boundary of safely normalizable text despite possible text additions. @see UCHAR_NFD_INERT - @draft ICU 3.0 */ - UCHAR_NFKD_INERT, + @stable ICU 3.0 */ + UCHAR_NFKD_INERT=38, /** Binary property NFC_Inert. ICU-specific property for characters that are inert under NFC, i.e., they do not interact with adjacent characters. @@ -336,8 +357,8 @@ typedef enum UProperty { to find the boundary of safely normalizable text despite possible text additions. @see UCHAR_NFD_INERT - @draft ICU 3.0 */ - UCHAR_NFC_INERT, + @stable ICU 3.0 */ + UCHAR_NFC_INERT=39, /** Binary property NFKC_Inert. ICU-specific property for characters that are inert under NFKC, i.e., they do not interact with adjacent characters. @@ -345,8 +366,8 @@ typedef enum UProperty { to find the boundary of safely normalizable text despite possible text additions. @see UCHAR_NFD_INERT - @draft ICU 3.0 */ - UCHAR_NFKC_INERT, + @stable ICU 3.0 */ + UCHAR_NFKC_INERT=40, /** Binary Property Segment_Starter. ICU-specific property for characters that are starters in terms of Unicode normalization and combining character sequences. @@ -356,10 +377,47 @@ typedef enum UProperty { ICU uses this property for segmenting a string for generating a set of canonically equivalent strings, e.g. for canonical closure while processing collation tailoring rules. - @draft ICU 3.0 */ - UCHAR_SEGMENT_STARTER, + @stable ICU 3.0 */ + UCHAR_SEGMENT_STARTER=41, +#ifndef U_HIDE_DRAFT_API + /** Binary property Pattern_Syntax (new in Unicode 4.1). + See UAX #31 Identifier and Pattern Syntax + (http://www.unicode.org/reports/tr31/) + @draft ICU 3.4 */ + UCHAR_PATTERN_SYNTAX=42, + /** Binary property Pattern_White_Space (new in Unicode 4.1). + See UAX #31 Identifier and Pattern Syntax + (http://www.unicode.org/reports/tr31/) + @draft ICU 3.4 */ + UCHAR_PATTERN_WHITE_SPACE=43, + /** Binary property alnum (a C/POSIX character class). + Implemented according to the UTS #18 Annex C Standard Recommendation. + See the uchar.h file documentation. + @draft ICU 3.4 */ + UCHAR_POSIX_ALNUM=44, + /** Binary property blank (a C/POSIX character class). + Implemented according to the UTS #18 Annex C Standard Recommendation. + See the uchar.h file documentation. + @draft ICU 3.4 */ + UCHAR_POSIX_BLANK=45, + /** Binary property graph (a C/POSIX character class). + Implemented according to the UTS #18 Annex C Standard Recommendation. + See the uchar.h file documentation. + @draft ICU 3.4 */ + UCHAR_POSIX_GRAPH=46, + /** Binary property print (a C/POSIX character class). + Implemented according to the UTS #18 Annex C Standard Recommendation. + See the uchar.h file documentation. + @draft ICU 3.4 */ + UCHAR_POSIX_PRINT=47, + /** Binary property xdigit (a C/POSIX character class). + Implemented according to the UTS #18 Annex C Standard Recommendation. + See the uchar.h file documentation. + @draft ICU 3.4 */ + UCHAR_POSIX_XDIGIT=48, +#endif /* U_HIDE_DRAFT_API */ /** One more than the last constant for binary Unicode properties. @stable ICU 2.1 */ - UCHAR_BINARY_LIMIT, + UCHAR_BINARY_LIMIT=49, /** Enumerated property Bidi_Class. Same as u_charDirection, returns UCharDirection values. @stable ICU 2.2 */ @@ -368,66 +426,83 @@ typedef enum UProperty { UCHAR_INT_START=UCHAR_BIDI_CLASS, /** Enumerated property Block. Same as ublock_getCode, returns UBlockCode values. @stable ICU 2.2 */ - UCHAR_BLOCK, + UCHAR_BLOCK=0x1001, /** Enumerated property Canonical_Combining_Class. Same as u_getCombiningClass, returns 8-bit numeric values. @stable ICU 2.2 */ - UCHAR_CANONICAL_COMBINING_CLASS, + UCHAR_CANONICAL_COMBINING_CLASS=0x1002, /** Enumerated property Decomposition_Type. Returns UDecompositionType values. @stable ICU 2.2 */ - UCHAR_DECOMPOSITION_TYPE, + UCHAR_DECOMPOSITION_TYPE=0x1003, /** Enumerated property East_Asian_Width. See http://www.unicode.org/reports/tr11/ Returns UEastAsianWidth values. @stable ICU 2.2 */ - UCHAR_EAST_ASIAN_WIDTH, + UCHAR_EAST_ASIAN_WIDTH=0x1004, /** Enumerated property General_Category. Same as u_charType, returns UCharCategory values. @stable ICU 2.2 */ - UCHAR_GENERAL_CATEGORY, + UCHAR_GENERAL_CATEGORY=0x1005, /** Enumerated property Joining_Group. Returns UJoiningGroup values. @stable ICU 2.2 */ - UCHAR_JOINING_GROUP, + UCHAR_JOINING_GROUP=0x1006, /** Enumerated property Joining_Type. Returns UJoiningType values. @stable ICU 2.2 */ - UCHAR_JOINING_TYPE, + UCHAR_JOINING_TYPE=0x1007, /** Enumerated property Line_Break. Returns ULineBreak values. @stable ICU 2.2 */ - UCHAR_LINE_BREAK, + UCHAR_LINE_BREAK=0x1008, /** Enumerated property Numeric_Type. Returns UNumericType values. @stable ICU 2.2 */ - UCHAR_NUMERIC_TYPE, + UCHAR_NUMERIC_TYPE=0x1009, /** Enumerated property Script. Same as uscript_getScript, returns UScriptCode values. @stable ICU 2.2 */ - UCHAR_SCRIPT, + UCHAR_SCRIPT=0x100A, /** Enumerated property Hangul_Syllable_Type, new in Unicode 4. Returns UHangulSyllableType values. @stable ICU 2.6 */ - UCHAR_HANGUL_SYLLABLE_TYPE, + UCHAR_HANGUL_SYLLABLE_TYPE=0x100B, /** Enumerated property NFD_Quick_Check. - Returns UNormalizationCheckResult values. @draft ICU 3.0 */ - UCHAR_NFD_QUICK_CHECK, + Returns UNormalizationCheckResult values. @stable ICU 3.0 */ + UCHAR_NFD_QUICK_CHECK=0x100C, /** Enumerated property NFKD_Quick_Check. - Returns UNormalizationCheckResult values. @draft ICU 3.0 */ - UCHAR_NFKD_QUICK_CHECK, + Returns UNormalizationCheckResult values. @stable ICU 3.0 */ + UCHAR_NFKD_QUICK_CHECK=0x100D, /** Enumerated property NFC_Quick_Check. - Returns UNormalizationCheckResult values. @draft ICU 3.0 */ - UCHAR_NFC_QUICK_CHECK, + Returns UNormalizationCheckResult values. @stable ICU 3.0 */ + UCHAR_NFC_QUICK_CHECK=0x100E, /** Enumerated property NFKC_Quick_Check. - Returns UNormalizationCheckResult values. @draft ICU 3.0 */ - UCHAR_NFKC_QUICK_CHECK, + Returns UNormalizationCheckResult values. @stable ICU 3.0 */ + UCHAR_NFKC_QUICK_CHECK=0x100F, /** Enumerated property Lead_Canonical_Combining_Class. ICU-specific property for the ccc of the first code point of the decomposition, or lccc(c)=ccc(NFD(c)[0]). Useful for checking for canonically ordered text; see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD . - Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @draft ICU 3.0 */ - UCHAR_LEAD_CANONICAL_COMBINING_CLASS, + Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */ + UCHAR_LEAD_CANONICAL_COMBINING_CLASS=0x1010, /** Enumerated property Trail_Canonical_Combining_Class. ICU-specific property for the ccc of the last code point of the decomposition, or tccc(c)=ccc(NFD(c)[last]). Useful for checking for canonically ordered text; see UNORM_FCD and http://www.unicode.org/notes/tn5/#FCD . - Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @draft ICU 3.0 */ - UCHAR_TRAIL_CANONICAL_COMBINING_CLASS, + Returns 8-bit numeric values like UCHAR_CANONICAL_COMBINING_CLASS. @stable ICU 3.0 */ + UCHAR_TRAIL_CANONICAL_COMBINING_CLASS=0x1011, +#ifndef U_HIDE_DRAFT_API + /** Enumerated property Grapheme_Cluster_Break (new in Unicode 4.1). + Used in UAX #29: Text Boundaries + (http://www.unicode.org/reports/tr29/) + Returns UGraphemeClusterBreak values. @draft ICU 3.4 */ + UCHAR_GRAPHEME_CLUSTER_BREAK=0x1012, + /** Enumerated property Sentence_Break (new in Unicode 4.1). + Used in UAX #29: Text Boundaries + (http://www.unicode.org/reports/tr29/) + Returns USentenceBreak values. @draft ICU 3.4 */ + UCHAR_SENTENCE_BREAK=0x1013, + /** Enumerated property Word_Break (new in Unicode 4.1). + Used in UAX #29: Text Boundaries + (http://www.unicode.org/reports/tr29/) + Returns UWordBreakValues values. @draft ICU 3.4 */ + UCHAR_WORD_BREAK=0x1014, +#endif /*U_HIDE_DRAFT_API*/ /** One more than the last constant for enumerated/integer Unicode properties. @stable ICU 2.2 */ - UCHAR_INT_LIMIT, + UCHAR_INT_LIMIT=0x1015, /** Bitmask property General_Category_Mask. This is the General_Category property returned as a bit mask. @@ -441,7 +516,7 @@ typedef enum UProperty { /** First constant for bit-mask Unicode properties. @stable ICU 2.4 */ UCHAR_MASK_START=UCHAR_GENERAL_CATEGORY_MASK, /** One more than the last constant for bit-mask Unicode properties. @stable ICU 2.4 */ - UCHAR_MASK_LIMIT, + UCHAR_MASK_LIMIT=0x2001, /** Double property Numeric_Value. Corresponds to u_getNumericValue. @stable ICU 2.4 */ @@ -449,7 +524,7 @@ typedef enum UProperty { /** First constant for double Unicode properties. @stable ICU 2.4 */ UCHAR_DOUBLE_START=UCHAR_NUMERIC_VALUE, /** One more than the last constant for double Unicode properties. @stable ICU 2.4 */ - UCHAR_DOUBLE_LIMIT, + UCHAR_DOUBLE_LIMIT=0x3001, /** String property Age. Corresponds to u_charAge. @stable ICU 2.4 */ @@ -458,42 +533,42 @@ typedef enum UProperty { UCHAR_STRING_START=UCHAR_AGE, /** String property Bidi_Mirroring_Glyph. Corresponds to u_charMirror. @stable ICU 2.4 */ - UCHAR_BIDI_MIRRORING_GLYPH, + UCHAR_BIDI_MIRRORING_GLYPH=0x4001, /** String property Case_Folding. Corresponds to u_strFoldCase in ustring.h. @stable ICU 2.4 */ - UCHAR_CASE_FOLDING, + UCHAR_CASE_FOLDING=0x4002, /** String property ISO_Comment. Corresponds to u_getISOComment. @stable ICU 2.4 */ - UCHAR_ISO_COMMENT, + UCHAR_ISO_COMMENT=0x4003, /** String property Lowercase_Mapping. Corresponds to u_strToLower in ustring.h. @stable ICU 2.4 */ - UCHAR_LOWERCASE_MAPPING, + UCHAR_LOWERCASE_MAPPING=0x4004, /** String property Name. Corresponds to u_charName. @stable ICU 2.4 */ - UCHAR_NAME, + UCHAR_NAME=0x4005, /** String property Simple_Case_Folding. Corresponds to u_foldCase. @stable ICU 2.4 */ - UCHAR_SIMPLE_CASE_FOLDING, + UCHAR_SIMPLE_CASE_FOLDING=0x4006, /** String property Simple_Lowercase_Mapping. Corresponds to u_tolower. @stable ICU 2.4 */ - UCHAR_SIMPLE_LOWERCASE_MAPPING, + UCHAR_SIMPLE_LOWERCASE_MAPPING=0x4007, /** String property Simple_Titlecase_Mapping. Corresponds to u_totitle. @stable ICU 2.4 */ - UCHAR_SIMPLE_TITLECASE_MAPPING, + UCHAR_SIMPLE_TITLECASE_MAPPING=0x4008, /** String property Simple_Uppercase_Mapping. Corresponds to u_toupper. @stable ICU 2.4 */ - UCHAR_SIMPLE_UPPERCASE_MAPPING, + UCHAR_SIMPLE_UPPERCASE_MAPPING=0x4009, /** String property Titlecase_Mapping. Corresponds to u_strToTitle in ustring.h. @stable ICU 2.4 */ - UCHAR_TITLECASE_MAPPING, + UCHAR_TITLECASE_MAPPING=0x400A, /** String property Unicode_1_Name. Corresponds to u_charName. @stable ICU 2.4 */ - UCHAR_UNICODE_1_NAME, + UCHAR_UNICODE_1_NAME=0x400B, /** String property Uppercase_Mapping. Corresponds to u_strToUpper in ustring.h. @stable ICU 2.4 */ - UCHAR_UPPERCASE_MAPPING, + UCHAR_UPPERCASE_MAPPING=0x400C, /** One more than the last constant for string Unicode properties. @stable ICU 2.4 */ - UCHAR_STRING_LIMIT, + UCHAR_STRING_LIMIT=0x400D, /** Represents a nonexistent or invalid property or property value. @stable ICU 2.4 */ UCHAR_INVALID_CODE = -1 @@ -1057,7 +1132,7 @@ enum UBlockCode { * @stable ICU 2.2 */ UBLOCK_CYRILLIC_SUPPLEMENTARY = 97, - /** @draft ICU 3.0 */ + /** @stable ICU 3.0 */ UBLOCK_CYRILLIC_SUPPLEMENT = UBLOCK_CYRILLIC_SUPPLEMENTARY, /*[0500]*/ /** @stable ICU 2.2 */ UBLOCK_TAGALOG = 98, /*[1700]*/ @@ -1119,8 +1194,75 @@ enum UBlockCode { /** @stable ICU 2.6 */ UBLOCK_VARIATION_SELECTORS_SUPPLEMENT = 125, /*[E0100]*/ - /** @stable ICU 2.0 */ - UBLOCK_COUNT, +#ifndef U_HIDE_DRAFT_API + /* New blocks in Unicode 4.1 */ + + /** @draft ICU 3.4 */ + UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION = 126, /*[1D200]*/ + /** @draft ICU 3.4 */ + UBLOCK_ANCIENT_GREEK_NUMBERS = 127, /*[10140]*/ + /** @draft ICU 3.4 */ + UBLOCK_ARABIC_SUPPLEMENT = 128, /*[0750]*/ + /** @draft ICU 3.4 */ + UBLOCK_BUGINESE = 129, /*[1A00]*/ + /** @draft ICU 3.4 */ + UBLOCK_CJK_STROKES = 130, /*[31C0]*/ + /** @draft ICU 3.4 */ + UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = 131, /*[1DC0]*/ + /** @draft ICU 3.4 */ + UBLOCK_COPTIC = 132, /*[2C80]*/ + /** @draft ICU 3.4 */ + UBLOCK_ETHIOPIC_EXTENDED = 133, /*[2D80]*/ + /** @draft ICU 3.4 */ + UBLOCK_ETHIOPIC_SUPPLEMENT = 134, /*[1380]*/ + /** @draft ICU 3.4 */ + UBLOCK_GEORGIAN_SUPPLEMENT = 135, /*[2D00]*/ + /** @draft ICU 3.4 */ + UBLOCK_GLAGOLITIC = 136, /*[2C00]*/ + /** @draft ICU 3.4 */ + UBLOCK_KHAROSHTHI = 137, /*[10A00]*/ + /** @draft ICU 3.4 */ + UBLOCK_MODIFIER_TONE_LETTERS = 138, /*[A700]*/ + /** @draft ICU 3.4 */ + UBLOCK_NEW_TAI_LUE = 139, /*[1980]*/ + /** @draft ICU 3.4 */ + UBLOCK_OLD_PERSIAN = 140, /*[103A0]*/ + /** @draft ICU 3.4 */ + UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT = 141, /*[1D80]*/ + /** @draft ICU 3.4 */ + UBLOCK_SUPPLEMENTAL_PUNCTUATION = 142, /*[2E00]*/ + /** @draft ICU 3.4 */ + UBLOCK_SYLOTI_NAGRI = 143, /*[A800]*/ + /** @draft ICU 3.4 */ + UBLOCK_TIFINAGH = 144, /*[2D30]*/ + /** @draft ICU 3.4 */ + UBLOCK_VERTICAL_FORMS = 145, /*[FE10]*/ + + /* New blocks in Unicode 5.0 */ + + /** @draft ICU 3.6 */ + UBLOCK_NKO = 146, /*[07C0]*/ + /** @draft ICU 3.6 */ + UBLOCK_BALINESE = 147, /*[1B00]*/ + /** @draft ICU 3.6 */ + UBLOCK_LATIN_EXTENDED_C = 148, /*[2C60]*/ + /** @draft ICU 3.6 */ + UBLOCK_LATIN_EXTENDED_D = 149, /*[A720]*/ + /** @draft ICU 3.6 */ + UBLOCK_PHAGS_PA = 150, /*[A840]*/ + /** @draft ICU 3.6 */ + UBLOCK_PHOENICIAN = 151, /*[10900]*/ + /** @draft ICU 3.6 */ + UBLOCK_CUNEIFORM = 152, /*[12000]*/ + /** @draft ICU 3.6 */ + UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION = 153, /*[12400]*/ + /** @draft ICU 3.6 */ + UBLOCK_COUNTING_ROD_NUMERALS = 154, /*[1D360]*/ + +#endif /*U_HIDE_DRAFT_API*/ + + /** @stable ICU 2.0 */ + UBLOCK_COUNT = 155, /** @stable ICU 2.0 */ UBLOCK_INVALID_CODE=-1 @@ -1295,6 +1437,72 @@ typedef enum UJoiningGroup { U_JG_COUNT } UJoiningGroup; +/** + * Grapheme Cluster Break constants. + * + * @see UCHAR_GRAPHEME_CLUSTER_BREAK + * @draft ICU 3.4 + */ +typedef enum UGraphemeClusterBreak { +#ifndef U_HIDE_DRAFT_API + U_GCB_OTHER = 0, /*[XX]*/ /*See note !!*/ + U_GCB_CONTROL = 1, /*[CN]*/ + U_GCB_CR = 2, /*[CR]*/ + U_GCB_EXTEND = 3, /*[EX]*/ + U_GCB_L = 4, /*[L]*/ + U_GCB_LF = 5, /*[LF]*/ + U_GCB_LV = 6, /*[LV]*/ + U_GCB_LVT = 7, /*[LVT]*/ + U_GCB_T = 8, /*[T]*/ + U_GCB_V = 9, /*[V]*/ +#endif /*U_HIDE_DRAFT_API*/ + U_GCB_COUNT = 10 +} UGraphemeClusterBreak; + +/** + * Word Break constants. + * (UWordBreak is a pre-existing enum type in ubrk.h for word break status tags.) + * + * @see UCHAR_WORD_BREAK + * @draft ICU 3.4 + */ +typedef enum UWordBreakValues { +#ifndef U_HIDE_DRAFT_API + U_WB_OTHER = 0, /*[XX]*/ /*See note !!*/ + U_WB_ALETTER = 1, /*[LE]*/ + U_WB_FORMAT = 2, /*[FO]*/ + U_WB_KATAKANA = 3, /*[KA]*/ + U_WB_MIDLETTER = 4, /*[ML]*/ + U_WB_MIDNUM = 5, /*[MN]*/ + U_WB_NUMERIC = 6, /*[NU]*/ + U_WB_EXTENDNUMLET = 7, /*[EX]*/ +#endif /*U_HIDE_DRAFT_API*/ + U_WB_COUNT = 8 +} UWordBreakValues; + +/** + * Sentence Break constants. + * + * @see UCHAR_SENTENCE_BREAK + * @draft ICU 3.4 + */ +typedef enum USentenceBreak { +#ifndef U_HIDE_DRAFT_API + U_SB_OTHER = 0, /*[XX]*/ /*See note !!*/ + U_SB_ATERM = 1, /*[AT]*/ + U_SB_CLOSE = 2, /*[CL]*/ + U_SB_FORMAT = 3, /*[FO]*/ + U_SB_LOWER = 4, /*[LO]*/ + U_SB_NUMERIC = 5, /*[NU]*/ + U_SB_OLETTER = 6, /*[LE]*/ + U_SB_SEP = 7, /*[SE]*/ + U_SB_SP = 8, /*[SP]*/ + U_SB_STERM = 9, /*[ST]*/ + U_SB_UPPER = 10, /*[UP]*/ +#endif /*U_HIDE_DRAFT_API*/ + U_SB_COUNT = 11 +} USentenceBreak; + /** * Line Break constants. * @@ -1302,40 +1510,45 @@ typedef enum UJoiningGroup { * @stable ICU 2.2 */ typedef enum ULineBreak { - U_LB_UNKNOWN, /*[XX]*/ /*See note !!*/ - U_LB_AMBIGUOUS, /*[AI]*/ - U_LB_ALPHABETIC, /*[AL]*/ - U_LB_BREAK_BOTH, /*[B2]*/ - U_LB_BREAK_AFTER, /*[BA]*/ - U_LB_BREAK_BEFORE, /*[BB]*/ - U_LB_MANDATORY_BREAK, /*[BK]*/ - U_LB_CONTINGENT_BREAK, /*[CB]*/ - U_LB_CLOSE_PUNCTUATION, /*[CL]*/ - U_LB_COMBINING_MARK, /*[CM]*/ - U_LB_CARRIAGE_RETURN, /*[CR]*/ - U_LB_EXCLAMATION, /*[EX]*/ - U_LB_GLUE, /*[GL]*/ - U_LB_HYPHEN, /*[HY]*/ - U_LB_IDEOGRAPHIC, /*[ID]*/ - U_LB_INSEPERABLE, - /** Renamed from the misspelled "inseperable" in Unicode 4.0.1/ICU 3.0 @draft ICU 3.0 */ + U_LB_UNKNOWN = 0, /*[XX]*/ /*See note !!*/ + U_LB_AMBIGUOUS = 1, /*[AI]*/ + U_LB_ALPHABETIC = 2, /*[AL]*/ + U_LB_BREAK_BOTH = 3, /*[B2]*/ + U_LB_BREAK_AFTER = 4, /*[BA]*/ + U_LB_BREAK_BEFORE = 5, /*[BB]*/ + U_LB_MANDATORY_BREAK = 6, /*[BK]*/ + U_LB_CONTINGENT_BREAK = 7, /*[CB]*/ + U_LB_CLOSE_PUNCTUATION = 8, /*[CL]*/ + U_LB_COMBINING_MARK = 9, /*[CM]*/ + U_LB_CARRIAGE_RETURN = 10, /*[CR]*/ + U_LB_EXCLAMATION = 11, /*[EX]*/ + U_LB_GLUE = 12, /*[GL]*/ + U_LB_HYPHEN = 13, /*[HY]*/ + U_LB_IDEOGRAPHIC = 14, /*[ID]*/ + U_LB_INSEPERABLE = 15, + /** Renamed from the misspelled "inseperable" in Unicode 4.0.1/ICU 3.0 @stable ICU 3.0 */ U_LB_INSEPARABLE=U_LB_INSEPERABLE,/*[IN]*/ - U_LB_INFIX_NUMERIC, /*[IS]*/ - U_LB_LINE_FEED, /*[LF]*/ - U_LB_NONSTARTER, /*[NS]*/ - U_LB_NUMERIC, /*[NU]*/ - U_LB_OPEN_PUNCTUATION, /*[OP]*/ - U_LB_POSTFIX_NUMERIC, /*[PO]*/ - U_LB_PREFIX_NUMERIC, /*[PR]*/ - U_LB_QUOTATION, /*[QU]*/ - U_LB_COMPLEX_CONTEXT, /*[SA]*/ - U_LB_SURROGATE, /*[SG]*/ - U_LB_SPACE, /*[SP]*/ - U_LB_BREAK_SYMBOLS, /*[SY]*/ - U_LB_ZWSPACE, /*[ZW]*/ - U_LB_NEXT_LINE, /*[NL]*/ /* from here on: new in Unicode 4/ICU 2.6 */ - U_LB_WORD_JOINER, /*[WJ]*/ - U_LB_COUNT + U_LB_INFIX_NUMERIC = 16, /*[IS]*/ + U_LB_LINE_FEED = 17, /*[LF]*/ + U_LB_NONSTARTER = 18, /*[NS]*/ + U_LB_NUMERIC = 19, /*[NU]*/ + U_LB_OPEN_PUNCTUATION = 20, /*[OP]*/ + U_LB_POSTFIX_NUMERIC = 21, /*[PO]*/ + U_LB_PREFIX_NUMERIC = 22, /*[PR]*/ + U_LB_QUOTATION = 23, /*[QU]*/ + U_LB_COMPLEX_CONTEXT = 24, /*[SA]*/ + U_LB_SURROGATE = 25, /*[SG]*/ + U_LB_SPACE = 26, /*[SP]*/ + U_LB_BREAK_SYMBOLS = 27, /*[SY]*/ + U_LB_ZWSPACE = 28, /*[ZW]*/ + U_LB_NEXT_LINE = 29, /*[NL]*/ /* from here on: new in Unicode 4/ICU 2.6 */ + U_LB_WORD_JOINER = 30, /*[WJ]*/ + U_LB_H2 = 31, /*[H2]*/ /* from here on: new in Unicode 4.1/ICU 3.4 */ + U_LB_H3 = 32, /*[H3]*/ + U_LB_JL = 33, /*[JL]*/ + U_LB_JT = 34, /*[JT]*/ + U_LB_JV = 35, /*[JV]*/ + U_LB_COUNT = 36 } ULineBreak; /** @@ -1606,7 +1819,6 @@ u_getNumericValue(UChar32 c); * @see UCHAR_LOWERCASE * @see u_isupper * @see u_istitle - * @see u_islower * @stable ICU 2.0 */ U_STABLE UBool U_EXPORT2 @@ -2273,7 +2485,7 @@ u_charFromName(UCharNameChoice nameChoice, * @see u_enumCharNames * @stable ICU 1.7 */ -typedef UBool UEnumCharNamesFn(void *context, +typedef UBool U_CALLCONV UEnumCharNamesFn(void *context, UChar32 code, UCharNameChoice nameChoice, const char *name, @@ -2568,10 +2780,14 @@ u_isJavaIDPart(UChar32 c); * Same as java.lang.Character.toLowerCase(). * * This function only returns the simple, single-code point case mapping. - * Full case mappings may result in zero, one or more code points and depend - * on context or language etc. + * Full case mappings should be used whenever possible because they produce + * better results by working on whole strings. + * They take into account the string context and the language and can map + * to a result string with a different length as appropriate. * Full case mappings are applied by the string case mapping functions, * see ustring.h and the UnicodeString class. + * See also the User Guide chapter on C/POSIX migration: + * http://icu.sourceforge.net/userguide/posix.html#case_mappings * * @param c the code point to be mapped * @return the Simple_Lowercase_Mapping of the code point, if any; @@ -2589,10 +2805,14 @@ u_tolower(UChar32 c); * Same as java.lang.Character.toUpperCase(). * * This function only returns the simple, single-code point case mapping. - * Full case mappings may result in zero, one or more code points and depend - * on context or language etc. + * Full case mappings should be used whenever possible because they produce + * better results by working on whole strings. + * They take into account the string context and the language and can map + * to a result string with a different length as appropriate. * Full case mappings are applied by the string case mapping functions, * see ustring.h and the UnicodeString class. + * See also the User Guide chapter on C/POSIX migration: + * http://icu.sourceforge.net/userguide/posix.html#case_mappings * * @param c the code point to be mapped * @return the Simple_Uppercase_Mapping of the code point, if any; @@ -2610,10 +2830,14 @@ u_toupper(UChar32 c); * Same as java.lang.Character.toTitleCase(). * * This function only returns the simple, single-code point case mapping. - * Full case mappings may result in zero, one or more code points and depend - * on context or language etc. + * Full case mappings should be used whenever possible because they produce + * better results by working on whole strings. + * They take into account the string context and the language and can map + * to a result string with a different length as appropriate. * Full case mappings are applied by the string case mapping functions, * see ustring.h and the UnicodeString class. + * See also the User Guide chapter on C/POSIX migration: + * http://icu.sourceforge.net/userguide/posix.html#case_mappings * * @param c the code point to be mapped * @return the Simple_Titlecase_Mapping of the code point, if any; @@ -2651,10 +2875,14 @@ u_totitle(UChar32 c); * itself is returned. * * This function only returns the simple, single-code point case mapping. - * Full case mappings may result in zero, one or more code points and depend - * on context or language etc. + * Full case mappings should be used whenever possible because they produce + * better results by working on whole strings. + * They take into account the string context and the language and can map + * to a result string with a different length as appropriate. * Full case mappings are applied by the string case mapping functions, * see ustring.h and the UnicodeString class. + * See also the User Guide chapter on C/POSIX migration: + * http://icu.sourceforge.net/userguide/posix.html#case_mappings * * @param c the code point to be mapped * @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I diff --git a/icuSources/common/unicode/uchriter.h b/icuSources/common/unicode/uchriter.h index f81a4bfd..6d5a990f 100644 --- a/icuSources/common/unicode/uchriter.h +++ b/icuSources/common/unicode/uchriter.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -11,6 +11,11 @@ #include "unicode/utypes.h" #include "unicode/chariter.h" +/** + * \file + * \brief C++ API: UChar Character Iterator + */ + U_NAMESPACE_BEGIN /** diff --git a/icuSources/common/unicode/uclean.h b/icuSources/common/unicode/uclean.h index 82c6af49..a13924a0 100644 --- a/icuSources/common/unicode/uclean.h +++ b/icuSources/common/unicode/uclean.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2001-2004, International Business Machines * +* Copyright (C) 2001-2005, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -18,9 +18,26 @@ #define __UCLEAN_H__ #include "unicode/utypes.h" - /** - * Initialize ICU. This function loads and initializes data items + * \file + * \brief C API: Initialize and clean up ICU + */ + +/** + * Initialize ICU. The description further below applies to ICU 2.6 to ICU 3.4. + * Starting with ICU 3.4, u_init() needs not be called any more for + * ensuring thread safety, but it can give an indication for whether ICU + * can load its data. In ICU 3.4, it will try to load the converter alias table + * (cnvalias.icu) and give an error code if that fails. + * This may change in the future. + *

+ * For ensuring the availability of necessary data, an application should + * open the service objects (converters, collators, etc.) that it will use + * and check for error codes there. + *

+ * Documentation for ICU 2.6 to ICU 3.4: + *

+ * This function loads and initializes data items * that are required internally by various ICU functions. Use of this explicit * initialization is required in multi-threaded applications; in * single threaded apps, use is optional, but incurs little additional @@ -106,7 +123,7 @@ u_cleanup(void); * An opaque pointer type that represents an ICU mutex. * For user-implemented mutexes, the value will typically point to a * struct or object that implements the mutex. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef void *UMTX; @@ -124,7 +141,7 @@ typedef void *UMTX; * identify the mutex by the UMTX value. * @param status Error status. Report errors back to ICU by setting this variable * with an error code. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef void U_CALLCONV UMtxInitFn (const void *context, UMTX *mutex, UErrorCode* status); @@ -136,7 +153,7 @@ typedef void U_CALLCONV UMtxInitFn (const void *context, UMTX *mutex, UErrorCod * whenever ICU needs to lock, unlock, or destroy a mutex. * @param context user supplied value, obtained from from u_setMutexFunctions(). * @param mutex specify the mutex on which to operate. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex); @@ -158,10 +175,10 @@ typedef void U_CALLCONV UMtxFn (const void *context, UMTX *mutex); * @param lock pointer to the mutex lock function. Must be non-null. * @param unlock Pointer to the mutex unlock function. Must be non-null. * @param status Receives error values. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 u_setMutexFunctions(const void *context, UMtxInitFn *init, UMtxFn *destroy, UMtxFn *lock, UMtxFn *unlock, UErrorCode *status); @@ -171,7 +188,7 @@ u_setMutexFunctions(const void *context, UMtxInitFn *init, UMtxFn *destroy, UMtx * @param context user supplied value, obtained from from u_setAtomicIncDecFunctions(). * @param p Pointer to a 32 bit int to be incremented or decremented * @return The value of the variable after the inc or dec operation. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef int32_t U_CALLCONV UMtxAtomicFn(const void *context, int32_t *p); @@ -188,10 +205,10 @@ typedef int32_t U_CALLCONV UMtxAtomicFn(const void *context, int32_t *p); * @param inc Pointer to a function to do an atomic increment operation. Must be non-null. * @param dec Pointer to a function to do an atomic decrement operation. Must be non-null. * @param status Receives error values. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 u_setAtomicIncDecFunctions(const void *context, UMtxAtomicFn *inc, UMtxAtomicFn *dec, UErrorCode *status); @@ -202,7 +219,7 @@ u_setAtomicIncDecFunctions(const void *context, UMtxAtomicFn *inc, UMtxAtomicFn * @param context user supplied value, obtained from from u_setMemoryFunctions(). * @param size The number of bytes to be allocated * @return Pointer to the newly allocated memory, or NULL if the allocation failed. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef void *U_CALLCONV UMemAllocFn(const void *context, size_t size); @@ -211,7 +228,7 @@ typedef void *U_CALLCONV UMemAllocFn(const void *context, size_t size); * @param context user supplied value, obtained from from u_setMemoryFunctions(). * @param size The number of bytes to be allocated * @return Pointer to the newly allocated memory, or NULL if the allocation failed. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef void *U_CALLCONV UMemReallocFn(const void *context, void *mem, size_t size); @@ -222,7 +239,7 @@ typedef void *U_CALLCONV UMemReallocFn(const void *context, void *mem, size_t si * @param mem Pointer to the memory block to be resized * @param size The new size for the block * @return Pointer to the resized memory block, or NULL if the resizing failed. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); @@ -240,10 +257,10 @@ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); * @param r Pointer to a user-supplied realloc function. * @param f Pointer to a user-supplied free function. * @param status Receives error values. - * @draft ICU 2.8 + * @stable ICU 2.8 * @system */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, UErrorCode *status); diff --git a/icuSources/common/unicode/ucnv.h b/icuSources/common/unicode/ucnv.h index a042f7ab..f8fce55b 100644 --- a/icuSources/common/unicode/ucnv.h +++ b/icuSources/common/unicode/ucnv.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * ucnv.h: @@ -35,12 +35,12 @@ * *

When a converter encounters an illegal, irregular, invalid or unmappable character * its default behavior is to use a substitution character to replace the - * bad byte sequence. This behavior can be changed by using {@link ucnv_getFromUCallBack() } - * or {@link ucnv_getToUCallBack() } on the converter. The header ucnv_err.h defines + * bad byte sequence. This behavior can be changed by using {@link ucnv_setFromUCallBack() } + * or {@link ucnv_setToUCallBack() } on the converter. The header ucnv_err.h defines * many other callback actions that can be used instead of a character substitution.

* *

More information about this API can be found in our - * User's + * User's * Guide.

*/ @@ -151,6 +151,9 @@ typedef enum { * @param codeUnits Points to 'length' bytes of the concerned codepage sequence * @param length Size (in bytes) of the concerned codepage sequence * @param reason Defines the reason the callback was invoked + * @param pErrorCode ICU error code in/out parameter. + * For converter callback functions, set to a conversion error + * before the call, and the callback may reset it to U_ZERO_ERROR. * @see ucnv_setToUCallBack * @see UConverterToUnicodeArgs * @stable ICU 2.0 @@ -161,7 +164,7 @@ typedef void (U_EXPORT2 *UConverterToUCallback) ( const char *codeUnits, int32_t length, UConverterCallbackReason reason, - UErrorCode *); + UErrorCode *pErrorCode); /** * Function pointer for error callback in the unicode to codepage direction. @@ -172,6 +175,9 @@ typedef void (U_EXPORT2 *UConverterToUCallback) ( * @param length Size (in bytes) of the concerned codepage sequence * @param codePoint Single UChar32 (UTF-32) containing the concerend Unicode codepoint. * @param reason Defines the reason the callback was invoked + * @param pErrorCode ICU error code in/out parameter. + * For converter callback functions, set to a conversion error + * before the call, and the callback may reset it to U_ZERO_ERROR. * @see ucnv_setFromUCallBack * @stable ICU 2.0 */ @@ -182,7 +188,7 @@ typedef void (U_EXPORT2 *UConverterFromUCallback) ( int32_t length, UChar32 codePoint, UConverterCallbackReason reason, - UErrorCode *); + UErrorCode *pErrorCode); U_CDECL_END @@ -247,11 +253,13 @@ U_CDECL_END #define UCNV_SWAP_LFNL_OPTION_STRING ",swaplfnl" /** - * Do a fuzzy compare of a two converter/alias names. The comparison - * is case-insensitive. It also ignores the characters '-', '_', and - * ' ' (dash, underscore, and space). Thus the strings "UTF-8", - * "utf_8", and "Utf 8" are exactly equivalent. - * + * Do a fuzzy compare of two converter/alias names. + * The comparison is case-insensitive, ignores leading zeroes if they are not + * followed by further digits, and ignores all but letters and digits. + * Thus the strings "UTF-8", "utf_8", "u*T@f08" and "Utf 8" are exactly equivalent. + * See section 1.4, Charset Alias Matching in Unicode Technical Standard #22 + * at http://www.unicode.org/reports/tr22/ + * * @param name1 a converter name or alias, zero-terminated * @param name2 a converter name or alias, zero-terminated * @return 0 if the names match, or a negative value if the name1 @@ -264,11 +272,12 @@ ucnv_compareNames(const char *name1, const char *name2); /** - * Creates a UConverter object with the names specified as a C string. + * Creates a UConverter object with the name of a coded character set specified as a C string. * The actual name will be resolved with the alias file * using a case-insensitive string comparison that ignores - * the delimiters '-', '_', and ' ' (dash, underscore, and space). - * E.g., the names "UTF8", "utf-8", and "Utf 8" are all equivalent. + * leading zeroes and all non-alphanumeric characters. + * E.g., the names "UTF8", "utf-8", "u*T@f08" and "Utf 8" are all equivalent. + * (See also ucnv_compareNames().) * If NULL is passed for the converter name, it will create one with the * getDefaultName return value. * @@ -287,15 +296,27 @@ ucnv_compareNames(const char *name1, const char *name2); * *

The conversion behavior and names can vary between platforms. ICU may * convert some characters differently from other platforms. Details on this topic - * are in the User's - * Guide.

- * - * @param converterName Name of the uconv table, may have options appended + * are in the User's + * Guide. Aliases starting with a "cp" prefix have no specific meaning + * other than its an alias starting with the letters "cp". Please do not + * associate any meaning to these aliases.

+ * + * @param converterName Name of the coded character set table. + * This may have options appended to the string. + * IANA alias character set names, IBM CCSIDs starting with "ibm-", + * Windows codepage numbers starting with "windows-" are frequently + * used for this parameter. See ucnv_getAvailableName and + * ucnv_getAlias for a complete list that is available. + * If this parameter is NULL, the default converter will be used. * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR * @return the created Unicode converter object, or NULL if an error occured * @see ucnv_openU * @see ucnv_openCCSID + * @see ucnv_getAvailableName + * @see ucnv_getAlias + * @see ucnv_getDefaultName * @see ucnv_close + * @ee ucnv_compareNames * @stable ICU 2.0 */ U_STABLE UConverter* U_EXPORT2 @@ -307,13 +328,16 @@ ucnv_open(const char *converterName, UErrorCode *err); * The name should be limited to the ASCII-7 alphanumerics range. * The actual name will be resolved with the alias file * using a case-insensitive string comparison that ignores - * the delimiters '-', '_', and ' ' (dash, underscore, and space). - * E.g., the names "UTF8", "utf-8", and "Utf 8" are all equivalent. + * leading zeroes and all non-alphanumeric characters. + * E.g., the names "UTF8", "utf-8", "u*T@f08" and "Utf 8" are all equivalent. + * (See also ucnv_compareNames().) * If NULL is passed for the converter name, it will create * one with the ucnv_getDefaultName() return value. * If the alias is ambiguous, then the preferred converter is used * and the status is set to U_AMBIGUOUS_ALIAS_WARNING. - * @param name : name of the uconv table in a zero terminated + * + *

See ucnv_open for the complete details

+ * @param name Name of the UConverter table in a zero terminated * Unicode string * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, * U_FILE_ACCESS_ERROR @@ -322,7 +346,7 @@ ucnv_open(const char *converterName, UErrorCode *err); * @see ucnv_open * @see ucnv_openCCSID * @see ucnv_close - * @see ucnv_getDefaultName + * @ee ucnv_compareNames * @stable ICU 2.0 */ U_STABLE UConverter* U_EXPORT2 @@ -404,7 +428,7 @@ ucnv_openCCSID(int32_t codepage, *

The packageName and converterName must point to an ICU udata object, as defined by * udata_open( packageName, "cnv", converterName, err) or equivalent. * Typically, packageName will refer to a (.dat) file, or to a package registered with - * udata_setAppData().

+ * udata_setAppData(). Using a full file or directory pathname for packageName is deprecated.

* *

The name will NOT be looked up in the alias mechanism, nor will the converter be * stored in the converter cache or the alias table. The only way to open further converters @@ -432,18 +456,39 @@ U_STABLE UConverter* U_EXPORT2 ucnv_openPackage(const char *packageName, const char *converterName, UErrorCode *err); /** - * Thread safe cloning operation + * Thread safe converter cloning operation. + * For most efficient operation, pass in a stackBuffer (and a *pBufferSize) + * with at least U_CNV_SAFECLONE_BUFFERSIZE bytes of space. + * If the buffer size is sufficient, then the clone will use the stack buffer; + * otherwise, it will be allocated, and *pBufferSize will indicate + * the actual size. (This should not occur with U_CNV_SAFECLONE_BUFFERSIZE.) + * + * You must ucnv_close() the clone in any case. + * + * If *pBufferSize==0, (regardless of whether stackBuffer==NULL or not) + * then *pBufferSize will be changed to a sufficient size + * for cloning this converter, + * without actually cloning the converter ("pure pre-flighting"). + * + * If *pBufferSize is greater than zero but not large enough for a stack-based + * clone, then the converter is cloned using newly allocated memory + * and *pBufferSize is changed to the necessary size. + * + * If the converter clone fits into the stack buffer but the stack buffer is not + * sufficiently aligned for the clone, then the clone will use an + * adjusted pointer and use an accordingly smaller buffer size. + * * @param cnv converter to be cloned * @param stackBuffer user allocated space for the new clone. If NULL new memory will be allocated. * If buffer is not large enough, new memory will be allocated. * Clients can use the U_CNV_SAFECLONE_BUFFERSIZE. This will probably be enough to avoid memory allocations. - * @param pBufferSize pointer to size of allocated space. - * If *pBufferSize == 0, a sufficient size for use in cloning will - * be returned ('pre-flighting') - * If *pBufferSize is not enough for a stack-based safe clone, - * new memory will be allocated. + * @param pBufferSize pointer to size of allocated space. pBufferSize must not be NULL. * @param status to indicate whether the operation went on smoothly or there were errors - * An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were necessary. + * An informational status value, U_SAFECLONE_ALLOCATED_WARNING, + * is used if any allocations were necessary. + * However, it is better to check if *pBufferSize grew for checking for + * allocations because warning codes can be overridden by subsequent + * function calls. * @return pointer to the new clone * @stable ICU 2.0 */ @@ -478,6 +523,8 @@ ucnv_close(UConverter * converter); /** * Fills in the output parameter, subChars, with the substitution characters * as multiple bytes. + * If ucnv_setSubstString() set a Unicode string because the converter is + * stateful, then subChars will be an empty string. * * @param converter the Unicode converter * @param subChars the subsitution characters @@ -486,6 +533,7 @@ ucnv_close(UConverter * converter); * @param err the outgoing error status code. * If the substitution character array is too small, an * U_INDEX_OUTOFBOUNDS_ERROR will be returned. + * @see ucnv_setSubstString * @see ucnv_setSubstChars * @stable ICU 2.0 */ @@ -498,12 +546,19 @@ ucnv_getSubstChars(const UConverter *converter, /** * Sets the substitution chars when converting from unicode to a codepage. The * substitution is specified as a string of 1-4 bytes, and may contain - * NULL byte. + * NULL bytes. + * The subChars must represent a single character. The caller needs to know the + * byte sequence of a valid character in the converter's charset. + * For some converters, for example some ISO 2022 variants, only single-byte + * substitution characters may be supported. + * The newer ucnv_setSubstString() function relaxes these limitations. + * * @param converter the Unicode converter * @param subChars the substitution character byte sequence we want set * @param len the number of bytes in subChars * @param err the error status code. U_INDEX_OUTOFBOUNDS_ERROR if * len is bigger than the maximum number of bytes allowed in subchars + * @see ucnv_setSubstString * @see ucnv_getSubstChars * @stable ICU 2.0 */ @@ -513,6 +568,39 @@ ucnv_setSubstChars(UConverter *converter, int8_t len, UErrorCode *err); +/** + * Set a substitution string for converting from Unicode to a charset. + * The caller need not know the charset byte sequence for each charset. + * + * Unlike ucnv_setSubstChars() which is designed to set a charset byte sequence + * for a single character, this function takes a Unicode string with + * zero, one or more characters, and immediately verifies that the string can be + * converted to the charset. + * If not, or if the result is too long (more than 32 bytes as of ICU 3.6), + * then the function returns with an error accordingly. + * + * Also unlike ucnv_setSubstChars(), this function works for stateful charsets + * by converting on the fly at the point of substitution rather than setting + * a fixed byte sequence. + * + * @param cnv The UConverter object. + * @param s The Unicode string. + * @param length The number of UChars in s, or -1 for a NUL-terminated string. + * @param err Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * + * @see ucnv_setSubstChars + * @see ucnv_getSubstChars + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ucnv_setSubstString(UConverter *cnv, + const UChar *s, + int32_t length, + UErrorCode *err); + /** * Fills in the output parameter, errBytes, with the error characters from the * last failing conversion. @@ -634,8 +722,6 @@ ucnv_resetFromUnicode(UConverter *converter); U_STABLE int8_t U_EXPORT2 ucnv_getMaxCharSize(const UConverter *converter); -#ifndef U_HIDE_DRAFT_API - /** * Calculates the size of a buffer for conversion from Unicode to a charset. * The calculated size is guaranteed to be sufficient for this conversion. @@ -653,13 +739,11 @@ ucnv_getMaxCharSize(const UConverter *converter); * converting length UChars with the converter that returned the maxCharSize. * * @see ucnv_getMaxCharSize - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define UCNV_GET_MAX_BYTES_FOR_STRING(length, maxCharSize) \ (((int32_t)(length)+10)*(int32_t)(maxCharSize)) -#endif /*U_HIDE_DRAFT_API*/ - /** * Returns the minimum byte length for characters in this codepage. * This is usually either 1 or 2. @@ -1192,6 +1276,12 @@ ucnv_getNextUChar(UConverter * converter, * Internally, two conversions - ucnv_toUnicode() and ucnv_fromUnicode() - * are used, "pivoting" through 16-bit Unicode. * + * Important: For streaming conversion (multiple function calls for successive + * parts of a text stream), the caller must provide a pivot buffer explicitly, + * and must preserve the pivot buffer and associated pointers from one + * call to another. (The buffer may be moved if its contents and the relative + * pointer positions are preserved.) + * * There is a similar function, ucnv_convert(), * which has the following limitations: * - it takes charset names, not converter objects, so that @@ -1203,7 +1293,7 @@ ucnv_getNextUChar(UConverter * converter, * * By contrast, ucnv_convertEx() * - takes UConverter parameters instead of charset names - * - fully exposes the pivot buffer for complete error handling + * - fully exposes the pivot buffer for streaming conversion and complete error handling * * ucnv_convertEx() also provides further convenience: * - an option to reset the converters at the beginning @@ -1217,6 +1307,7 @@ ucnv_getNextUChar(UConverter * converter, * or set U_STRING_NOT_TERMINATED_WARNING if the output exactly fills * the target buffer * - the pivot buffer can be provided internally; + * possible only for whole-string conversion, not streaming conversion; * in this case, the caller will not be able to get details about where an * error occurred * (if pivotStart==NULL, see below) @@ -1688,11 +1779,14 @@ U_STABLE const char * U_EXPORT2 ucnv_getDefaultName(void); /** - * sets the current default converter name. Caller must own the storage for 'name' - * and preserve it indefinitely. + * This function sets the current default converter name. + * DO NOT call this function from multiple threads! This function is not + * thread safe. If this function needs to be called, it should be called + * during application initialization. Most of the time, the results from + * ucnv_getDefaultName() is sufficient for your application. * @param name the converter name to be the default (must exist). * @see ucnv_getDefaultName - * @system SYSTEM API + * @system * @stable ICU 2.0 */ U_STABLE void U_EXPORT2 @@ -1769,7 +1863,7 @@ ucnv_usesFallback(const UConverter *cnv); * UErrorCode err = U_ZERO_ERROR; * char input[] = { '\xEF','\xBB', '\xBF','\x41','\x42','\x43' }; * int32_t signatureLength = 0; - * char *encoding = ucnv_detectUnicodeSignatures(input,sizeof(input),&signatureLength,&err); + * char *encoding = ucnv_detectUnicodeSignature(input,sizeof(input),&signatureLength,&err); * UConverter *conv = NULL; * UChar output[100]; * UChar *target = output, *out; @@ -1799,9 +1893,8 @@ ucnv_usesFallback(const UConverter *cnv); * @param signatureLength A pointer to int32_t to receive the number of bytes that make up the signature * of the detected UTF. 0 if not detected. * Can be a NULL pointer. - * @param pErrorCode A pointer to receive information about any errors that may occur during detection. - * Must be a valid pointer to an error code value, which must not indicate a failure - * before the function call. + * @param pErrorCode ICU error code in/out parameter. + * Must fulfill U_SUCCESS before the function call. * @return The name of the encoding detected. NULL if encoding is not detected. * @stable ICU 2.4 */ @@ -1811,6 +1904,34 @@ ucnv_detectUnicodeSignature(const char* source, int32_t *signatureLength, UErrorCode *pErrorCode); +/** + * Returns the number of UChars held in the converter's internal state + * because more input is needed for completing the conversion. This function is + * useful for mapping semantics of ICU's converter interface to those of iconv, + * and this information is not needed for normal conversion. + * @param cnv The converter in which the input is held + * @param status ICU error code in/out parameter. + * Must fulfill U_SUCCESS before the function call. + * @return The number of UChars in the state. -1 if an error is encountered. + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +ucnv_fromUCountPending(const UConverter* cnv, UErrorCode* status); + +/** + * Returns the number of chars held in the converter's internal state + * because more input is needed for completing the conversion. This function is + * useful for mapping semantics of ICU's converter interface to those of iconv, + * and this information is not needed for normal conversion. + * @param cnv The converter in which the input is held as internal state + * @param status ICU error code in/out parameter. + * Must fulfill U_SUCCESS before the function call. + * @return The number of chars in the state. -1 if an error is encountered. + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status); + #endif #endif diff --git a/icuSources/common/unicode/ucnv_err.h b/icuSources/common/unicode/ucnv_err.h index 2a6104c7..b0db7bc1 100644 --- a/icuSources/common/unicode/ucnv_err.h +++ b/icuSources/common/unicode/ucnv_err.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -122,14 +122,14 @@ typedef struct UConverter UConverter; */ #define UCNV_ESCAPE_C "C" /** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Decimal escape (&#DDDD;) - * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Decimal escape (&#DDDD;) + * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly + * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly * @stable ICU 2.0 */ #define UCNV_ESCAPE_XML_DEC "D" /** - * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Hex escape (&#xXXXX;) - * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Hex escape (&#xXXXX;) + * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly + * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly * @stable ICU 2.0 */ #define UCNV_ESCAPE_XML_HEX "X" @@ -340,17 +340,17 @@ U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * \\U00023456 *

  • UCNV_ESCAPE_XML_DEC: Substitues the ILLEGAL SEQUENCE with the decimal - * representation in the format &#DDDDDDDD;, e.g. "&#65534;&#172;&#51454;"). + * representation in the format \htmlonly&#DDDDDDDD;, e.g. "&#65534;&#172;&#51454;")\endhtmlonly. * In the Event the converter doesn't support the characters {&,#}[0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as * &#144470; and Zero padding is ignored.
  • *
  • UCNV_ESCAPE_XML_HEX:Substitues the ILLEGAL SEQUENCE with the decimal - * representation in the format &#xXXXX, e.g. "&#xFFFE;&#x00AC;&#xC8FE;"). + * representation in the format \htmlonly&#xXXXX; e.g. "&#xFFFE;&#x00AC;&#xC8FE;")\endhtmlonly. * In the Event the converter doesn't support the characters {&,#,x}[0-9], * it will substitute the illegal sequence with the substitution characters. * Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as - * &#x23456;
  • + * \htmlonly&#x23456;\endhtmlonly * * @param fromUArgs Information about the conversion in progress * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence diff --git a/icuSources/common/unicode/uconfig.h b/icuSources/common/unicode/uconfig.h index 997cf686..8dea2ab8 100644 --- a/icuSources/common/unicode/uconfig.h +++ b/icuSources/common/unicode/uconfig.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: uconfig.h @@ -24,6 +24,13 @@ * The switches are fairly coarse, controlling large modules. * Basic services cannot be turned off. * + * Building with any of these options does not guarantee that the + * ICU build process will completely work. It is recommended that + * the ICU libraries and data be built using the normal build. + * At that time you should remove the data used by those services. + * After building the ICU data library, you should rebuild the ICU + * libraries with these switches customized to your needs. + * * @stable ICU 2.4 */ @@ -34,7 +41,7 @@ * It does not turn off legacy conversion because that is necessary * for ICU to work on EBCDIC platforms (for the default converter). * If you want "only collation" and do not build for EBCDIC, - * then you can #define UCONFIG_NO_LEGACY_CONVERSION 1 as well. + * then you can define UCONFIG_NO_LEGACY_CONVERSION 1 as well. * * @stable ICU 2.4 */ @@ -58,12 +65,34 @@ /* common library switches -------------------------------------------------- */ +/** + * \def UCONFIG_NO_FILE_IO + * This switch turns off all file access in the common library + * where file access is only used for data loading. + * ICU data must then be provided in the form of a data DLL (or with an + * equivalent way to link to the data residing in an executable, + * as in building a combined library with both the common library's code and + * the data), or via udata_setCommonData(). + * Application data must be provided via udata_setAppData() or by using + * "open" functions that take pointers to data, for example ucol_openBinary(). + * + * File access is not used at all in the i18n library. + * + * File access cannot be turned off for the icuio library or for the ICU + * test suites and ICU tools. + * + * @draft ICU 3.6 + */ +#ifndef UCONFIG_NO_FILE_IO +# define UCONFIG_NO_FILE_IO 0 +#endif + /** * \def UCONFIG_NO_CONVERSION * ICU will not completely build with this switch turned on. * This switch turns off all converters. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ #ifndef UCONFIG_NO_CONVERSION # define UCONFIG_NO_CONVERSION 0 @@ -177,7 +206,7 @@ * \def UCONFIG_NO_SERVICE * This switch turns off service registration. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ #ifndef UCONFIG_NO_SERVICE # define UCONFIG_NO_SERVICE 0 diff --git a/icuSources/common/unicode/udata.h b/icuSources/common/unicode/udata.h index ef81cc66..2a12c11f 100644 --- a/icuSources/common/unicode/udata.h +++ b/icuSources/common/unicode/udata.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -35,7 +35,8 @@ U_CDECL_BEGIN * * See the User Guide Data Management chapter. */ - + +#ifndef U_HIDE_INTERNAL_API /** * Character used to separate package names from tree names * @internal ICU 3.0 @@ -66,6 +67,8 @@ U_CDECL_BEGIN */ #define U_ICUDATA_ALIAS "ICUDATA" +#endif /* U_HIDE_INTERNAL_API */ + /** * UDataInfo contains the properties about the requested data. * This is meta data. @@ -217,7 +220,7 @@ udata_open(const char *path, const char *type, const char *name, * logically prepended to the ICU data directory string.

    * *

    For details about ICU data loading see the User Guide - * Data Management chapter. (http://oss.software.ibm.com/icu/userguide/icudata.html)

    + * Data Management chapter. (http://icu.sourceforge.net/userguide/icudata.html)

    * * @param path Specifies an absolute path and/or a basename for the * finding of the data in the file system. @@ -348,6 +351,39 @@ udata_setCommonData(const void *data, UErrorCode *err); U_STABLE void U_EXPORT2 udata_setAppData(const char *packageName, const void *data, UErrorCode *err); +/** + * Possible settings for udata_setFileAccess() + * @see udata_setFileAccess + * @draft ICU 3.4 + */ +typedef enum UDataFileAccess { + /** ICU does not access the file system for data loading. */ + UDATA_NO_FILES, + /** ICU only loads data from packages, not from single files. */ + UDATA_ONLY_PACKAGES, + /** ICU loads data from packages first, and only from single files + if the data cannot be found in a package. */ + UDATA_PACKAGES_FIRST, + /** ICU looks for data in single files first, then in packages. (default) */ + UDATA_FILES_FIRST, + /** An alias for the default access mode. */ + UDATA_DEFAULT_ACCESS = UDATA_FILES_FIRST, + UDATA_FILE_ACCESS_COUNT +} UDataFileAccess; + +/** + * This function may be called to control how ICU loads data. It must be called + * before any ICU data is loaded, including application data loaded with ures/ResourceBundle or + * udata APIs. It should be called before u_init. This function is not multithread safe. + * The results of calling it while other threads are loading data are undefined. + * @param access The type of file access to be used + * @param status Error code. + * @see UDataFileAccess + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +udata_setFileAccess(UDataFileAccess access, UErrorCode *status); + U_CDECL_END #endif diff --git a/icuSources/common/unicode/udeprctd.h b/icuSources/common/unicode/udeprctd.h index 55301c87..8369eb4a 100644 --- a/icuSources/common/unicode/udeprctd.h +++ b/icuSources/common/unicode/udeprctd.h @@ -1,15 +1,15 @@ /* ******************************************************************************* -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * -* file name: udeprctd.h +* file name: * encoding: US-ASCII * tab size: 8 (not used) * indentation:4 * -* Created by: gendraft.pl, a perl script written by Ram Viswanadha +* Created by: genheaders.pl, a perl script written by Ram Viswanadha * * Contains data for commenting out APIs. * Gets included by umachine.h @@ -23,16 +23,27 @@ #ifdef U_HIDE_DEPRECATED_API -#define UBRK_TITLE_3_2 UBRK_TITLE_DEPRECATED_API_DO_NOT_USE -#define ucol_getLocale_3_2 ucol_getLocale_DEPRECATED_API_DO_NOT_USE -#define ULOC_REQUESTED_LOCALE_3_2 ULOC_REQUESTED_LOCALE_DEPRECATED_API_DO_NOT_USE -#define ures_countArrayItems_3_2 ures_countArrayItems_DEPRECATED_API_DO_NOT_USE -#define ures_getVersionNumber_3_2 ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE -#define ures_getLocale_3_2 ures_getLocale_DEPRECATED_API_DO_NOT_USE -#define utrans_open_3_2 utrans_open_DEPRECATED_API_DO_NOT_USE -#define utrans_getID_3_2 utrans_getID_DEPRECATED_API_DO_NOT_USE -#define utrans_unregister_3_2 utrans_unregister_DEPRECATED_API_DO_NOT_USE -#define utrans_getAvailableID_3_2 utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE +# if U_DISABLE_RENAMING +# define ucol_getContractions ucol_getContractions_DEPRECATED_API_DO_NOT_USE +# define ucol_getLocale ucol_getLocale_DEPRECATED_API_DO_NOT_USE +# define ures_countArrayItems ures_countArrayItems_DEPRECATED_API_DO_NOT_USE +# define ures_getLocale ures_getLocale_DEPRECATED_API_DO_NOT_USE +# define ures_getVersionNumber ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE +# define utrans_getAvailableID utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE +# define utrans_getID utrans_getID_DEPRECATED_API_DO_NOT_USE +# define utrans_open utrans_open_DEPRECATED_API_DO_NOT_USE +# define utrans_unregister utrans_unregister_DEPRECATED_API_DO_NOT_USE +# else +# define ucol_getContractions_3_6 ucol_getContractions_DEPRECATED_API_DO_NOT_USE +# define ucol_getLocale_3_6 ucol_getLocale_DEPRECATED_API_DO_NOT_USE +# define ures_countArrayItems_3_6 ures_countArrayItems_DEPRECATED_API_DO_NOT_USE +# define ures_getLocale_3_6 ures_getLocale_DEPRECATED_API_DO_NOT_USE +# define ures_getVersionNumber_3_6 ures_getVersionNumber_DEPRECATED_API_DO_NOT_USE +# define utrans_getAvailableID_3_6 utrans_getAvailableID_DEPRECATED_API_DO_NOT_USE +# define utrans_getID_3_6 utrans_getID_DEPRECATED_API_DO_NOT_USE +# define utrans_open_3_6 utrans_open_DEPRECATED_API_DO_NOT_USE +# define utrans_unregister_3_6 utrans_unregister_DEPRECATED_API_DO_NOT_USE +# endif /* U_DISABLE_RENAMING */ #endif /* U_HIDE_DEPRECATED_API */ #endif /* UDEPRCTD_H */ diff --git a/icuSources/common/unicode/udraft.h b/icuSources/common/unicode/udraft.h index bd92a60d..2c4150e1 100644 --- a/icuSources/common/unicode/udraft.h +++ b/icuSources/common/unicode/udraft.h @@ -1,15 +1,15 @@ /* ******************************************************************************* -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * -* file name: udraft.h +* file name: * encoding: US-ASCII * tab size: 8 (not used) * indentation:4 * -* Created by: gendraft.pl, a perl script written by Ram Viswanadha +* Created by: genheaders.pl, a perl script written by Ram Viswanadha * * Contains data for commenting out APIs. * Gets included by umachine.h @@ -23,223 +23,239 @@ #ifdef U_HIDE_DRAFT_API -#define ULineBreakTag_3_2 ULineBreakTag_DRAFT_API_DO_NOT_USE -#define USentenceBreakTag_3_2 USentenceBreakTag_DRAFT_API_DO_NOT_USE -#define ULineBreakTag_3_2 ULineBreakTag_DRAFT_API_DO_NOT_USE -#define USentenceBreakTag_3_2 USentenceBreakTag_DRAFT_API_DO_NOT_USE -#define ubrk_getRuleStatusVec_3_2 ubrk_getRuleStatusVec_DRAFT_API_DO_NOT_USE -#define ubrk_getLocaleByType_3_2 ubrk_getLocaleByType_DRAFT_API_DO_NOT_USE -#define UCAL_EXTENDED_YEAR_3_2 UCAL_EXTENDED_YEAR_DRAFT_API_DO_NOT_USE -#define UCAL_JULIAN_DAY_3_2 UCAL_JULIAN_DAY_DRAFT_API_DO_NOT_USE -#define UCAL_MILLISECONDS_IN_DAY_3_2 UCAL_MILLISECONDS_IN_DAY_DRAFT_API_DO_NOT_USE -#define UCAL_DAY_OF_MONTH_3_2 UCAL_DAY_OF_MONTH_DRAFT_API_DO_NOT_USE -#define ucal_getLocaleByType_3_2 ucal_getLocaleByType_DRAFT_API_DO_NOT_USE -#define UCHAR_S_TERM_3_2 UCHAR_S_TERM_DRAFT_API_DO_NOT_USE -#define UCHAR_VARIATION_SELECTOR_3_2 UCHAR_VARIATION_SELECTOR_DRAFT_API_DO_NOT_USE -#define UCHAR_NFD_INERT_3_2 UCHAR_NFD_INERT_DRAFT_API_DO_NOT_USE -#define UCHAR_NFKD_INERT_3_2 UCHAR_NFKD_INERT_DRAFT_API_DO_NOT_USE -#define UCHAR_NFC_INERT_3_2 UCHAR_NFC_INERT_DRAFT_API_DO_NOT_USE -#define UCHAR_NFKC_INERT_3_2 UCHAR_NFKC_INERT_DRAFT_API_DO_NOT_USE -#define UCHAR_SEGMENT_STARTER_3_2 UCHAR_SEGMENT_STARTER_DRAFT_API_DO_NOT_USE -#define UCHAR_NFD_QUICK_CHECK_3_2 UCHAR_NFD_QUICK_CHECK_DRAFT_API_DO_NOT_USE -#define UCHAR_NFKD_QUICK_CHECK_3_2 UCHAR_NFKD_QUICK_CHECK_DRAFT_API_DO_NOT_USE -#define UCHAR_NFC_QUICK_CHECK_3_2 UCHAR_NFC_QUICK_CHECK_DRAFT_API_DO_NOT_USE -#define UCHAR_NFKC_QUICK_CHECK_3_2 UCHAR_NFKC_QUICK_CHECK_DRAFT_API_DO_NOT_USE -#define UCHAR_LEAD_CANONICAL_COMBINING_CLASS_3_2 UCHAR_LEAD_CANONICAL_COMBINING_CLASS_DRAFT_API_DO_NOT_USE -#define UCHAR_TRAIL_CANONICAL_COMBINING_CLASS_3_2 UCHAR_TRAIL_CANONICAL_COMBINING_CLASS_DRAFT_API_DO_NOT_USE -#define UBLOCK_CYRILLIC_SUPPLEMENT_3_2 UBLOCK_CYRILLIC_SUPPLEMENT_DRAFT_API_DO_NOT_USE -#define U_LB_INSEPARABLE_3_2 U_LB_INSEPARABLE_DRAFT_API_DO_NOT_USE -#define UCNV_GET_MAX_BYTES_FOR_STRING_3_2 UCNV_GET_MAX_BYTES_FOR_STRING_DRAFT_API_DO_NOT_USE -#define ucol_openFromShortString_3_2 ucol_openFromShortString_DRAFT_API_DO_NOT_USE -#define ucol_getContractions_3_2 ucol_getContractions_DRAFT_API_DO_NOT_USE -#define ucol_openAvailableLocales_3_2 ucol_openAvailableLocales_DRAFT_API_DO_NOT_USE -#define ucol_getKeywords_3_2 ucol_getKeywords_DRAFT_API_DO_NOT_USE -#define ucol_getKeywordValues_3_2 ucol_getKeywordValues_DRAFT_API_DO_NOT_USE -#define ucol_getFunctionalEquivalent_3_2 ucol_getFunctionalEquivalent_DRAFT_API_DO_NOT_USE -#define ucol_getShortDefinitionString_3_2 ucol_getShortDefinitionString_DRAFT_API_DO_NOT_USE -#define ucol_normalizeShortDefinitionString_3_2 ucol_normalizeShortDefinitionString_DRAFT_API_DO_NOT_USE -#define ucol_getUCAVersion_3_2 ucol_getUCAVersion_DRAFT_API_DO_NOT_USE -#define ucol_getLocaleByType_3_2 ucol_getLocaleByType_DRAFT_API_DO_NOT_USE -#define ucol_cloneBinary_3_2 ucol_cloneBinary_DRAFT_API_DO_NOT_USE -#define ucol_openBinary_3_2 ucol_openBinary_DRAFT_API_DO_NOT_USE -#define UCONFIG_NO_CONVERSION_3_2 UCONFIG_NO_CONVERSION_DRAFT_API_DO_NOT_USE -#define ucurr_forLocale_3_2 ucurr_forLocale_DRAFT_API_DO_NOT_USE -#define ucurr_getDefaultFractionDigits_3_2 ucurr_getDefaultFractionDigits_DRAFT_API_DO_NOT_USE -#define ucurr_getRoundingIncrement_3_2 ucurr_getRoundingIncrement_DRAFT_API_DO_NOT_USE -#define UDateFormatField_3_2 UDateFormatField_DRAFT_API_DO_NOT_USE -#define UDAT_ERA_FIELD_3_2 UDAT_ERA_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_YEAR_FIELD_3_2 UDAT_YEAR_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_MONTH_FIELD_3_2 UDAT_MONTH_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_DATE_FIELD_3_2 UDAT_DATE_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_HOUR_OF_DAY1_FIELD_3_2 UDAT_HOUR_OF_DAY1_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_HOUR_OF_DAY0_FIELD_3_2 UDAT_HOUR_OF_DAY0_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_MINUTE_FIELD_3_2 UDAT_MINUTE_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_SECOND_FIELD_3_2 UDAT_SECOND_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_FRACTIONAL_SECOND_FIELD_3_2 UDAT_FRACTIONAL_SECOND_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_DAY_OF_WEEK_FIELD_3_2 UDAT_DAY_OF_WEEK_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_DAY_OF_YEAR_FIELD_3_2 UDAT_DAY_OF_YEAR_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_DAY_OF_WEEK_IN_MONTH_FIELD_3_2 UDAT_DAY_OF_WEEK_IN_MONTH_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_WEEK_OF_YEAR_FIELD_3_2 UDAT_WEEK_OF_YEAR_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_WEEK_OF_MONTH_FIELD_3_2 UDAT_WEEK_OF_MONTH_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_AM_PM_FIELD_3_2 UDAT_AM_PM_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_HOUR1_FIELD_3_2 UDAT_HOUR1_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_HOUR0_FIELD_3_2 UDAT_HOUR0_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_TIMEZONE_FIELD_3_2 UDAT_TIMEZONE_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_YEAR_WOY_FIELD_3_2 UDAT_YEAR_WOY_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_DOW_LOCAL_FIELD_3_2 UDAT_DOW_LOCAL_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_EXTENDED_YEAR_FIELD_3_2 UDAT_EXTENDED_YEAR_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_JULIAN_DAY_FIELD_3_2 UDAT_JULIAN_DAY_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_MILLISECONDS_IN_DAY_FIELD_3_2 UDAT_MILLISECONDS_IN_DAY_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_TIMEZONE_RFC_FIELD_3_2 UDAT_TIMEZONE_RFC_FIELD_DRAFT_API_DO_NOT_USE -#define UDAT_FIELD_COUNT_3_2 UDAT_FIELD_COUNT_DRAFT_API_DO_NOT_USE -#define UDateFormatField_3_2 UDateFormatField_DRAFT_API_DO_NOT_USE -#define udat_getLocaleByType_3_2 udat_getLocaleByType_DRAFT_API_DO_NOT_USE -#define ULOC_SCRIPT_CAPACITY_3_2 ULOC_SCRIPT_CAPACITY_DRAFT_API_DO_NOT_USE -#define ULOC_KEYWORDS_CAPACITY_3_2 ULOC_KEYWORDS_CAPACITY_DRAFT_API_DO_NOT_USE -#define ULOC_KEYWORD_AND_VALUES_CAPACITY_3_2 ULOC_KEYWORD_AND_VALUES_CAPACITY_DRAFT_API_DO_NOT_USE -#define ULOC_KEYWORD_SEPARATOR_3_2 ULOC_KEYWORD_SEPARATOR_DRAFT_API_DO_NOT_USE -#define ULOC_KEYWORD_ASSIGN_3_2 ULOC_KEYWORD_ASSIGN_DRAFT_API_DO_NOT_USE -#define ULOC_KEYWORD_ITEM_SEPARATOR_3_2 ULOC_KEYWORD_ITEM_SEPARATOR_DRAFT_API_DO_NOT_USE -#define UAcceptResult_3_2 UAcceptResult_DRAFT_API_DO_NOT_USE -#define uloc_getScript_3_2 uloc_getScript_DRAFT_API_DO_NOT_USE -#define uloc_canonicalize_3_2 uloc_canonicalize_DRAFT_API_DO_NOT_USE -#define uloc_getDisplayScript_3_2 uloc_getDisplayScript_DRAFT_API_DO_NOT_USE -#define uloc_getDisplayKeyword_3_2 uloc_getDisplayKeyword_DRAFT_API_DO_NOT_USE -#define uloc_getDisplayKeywordValue_3_2 uloc_getDisplayKeywordValue_DRAFT_API_DO_NOT_USE -#define uloc_getBaseName_3_2 uloc_getBaseName_DRAFT_API_DO_NOT_USE -#define uloc_openKeywords_3_2 uloc_openKeywords_DRAFT_API_DO_NOT_USE -#define uloc_getKeywordValue_3_2 uloc_getKeywordValue_DRAFT_API_DO_NOT_USE -#define uloc_setKeywordValue_3_2 uloc_setKeywordValue_DRAFT_API_DO_NOT_USE -#define uloc_acceptLanguageFromHTTP_3_2 uloc_acceptLanguageFromHTTP_DRAFT_API_DO_NOT_USE -#define uloc_acceptLanguage_3_2 uloc_acceptLanguage_DRAFT_API_DO_NOT_USE -#define UMeasurementSystem_3_2 UMeasurementSystem_DRAFT_API_DO_NOT_USE -#define UMeasurementSystem_3_2 UMeasurementSystem_DRAFT_API_DO_NOT_USE -#define ulocdata_getExemplarSet_3_2 ulocdata_getExemplarSet_DRAFT_API_DO_NOT_USE -#define ulocdata_getMeasurementSystem_3_2 ulocdata_getMeasurementSystem_DRAFT_API_DO_NOT_USE -#define ulocdata_getPaperSize_3_2 ulocdata_getPaperSize_DRAFT_API_DO_NOT_USE -#define UINT64_C_3_2 UINT64_C_DRAFT_API_DO_NOT_USE -#define umsg_getLocaleByType_3_2 umsg_getLocaleByType_DRAFT_API_DO_NOT_USE -#define U_ETHER_3_2 U_ETHER_DRAFT_API_DO_NOT_USE -#define US_INV_3_2 US_INV_DRAFT_API_DO_NOT_USE -#define UNUM_PATTERN_DECIMAL_3_2 UNUM_PATTERN_DECIMAL_DRAFT_API_DO_NOT_USE -#define UNUM_ORDINAL_3_2 UNUM_ORDINAL_DRAFT_API_DO_NOT_USE -#define UNUM_DURATION_3_2 UNUM_DURATION_DRAFT_API_DO_NOT_USE -#define UNUM_PATTERN_RULEBASED_3_2 UNUM_PATTERN_RULEBASED_DRAFT_API_DO_NOT_USE -#define UNUM_SIGNIFICANT_DIGITS_USED_3_2 UNUM_SIGNIFICANT_DIGITS_USED_DRAFT_API_DO_NOT_USE -#define UNUM_MIN_SIGNIFICANT_DIGITS_3_2 UNUM_MIN_SIGNIFICANT_DIGITS_DRAFT_API_DO_NOT_USE -#define UNUM_MAX_SIGNIFICANT_DIGITS_3_2 UNUM_MAX_SIGNIFICANT_DIGITS_DRAFT_API_DO_NOT_USE -#define UNUM_LENIENT_PARSE_3_2 UNUM_LENIENT_PARSE_DRAFT_API_DO_NOT_USE -#define UNUM_DEFAULT_RULESET_3_2 UNUM_DEFAULT_RULESET_DRAFT_API_DO_NOT_USE -#define UNUM_PUBLIC_RULESETS_3_2 UNUM_PUBLIC_RULESETS_DRAFT_API_DO_NOT_USE -#define UNUM_SIGNIFICANT_DIGIT_SYMBOL_3_2 UNUM_SIGNIFICANT_DIGIT_SYMBOL_DRAFT_API_DO_NOT_USE -#define unum_formatDoubleCurrency_3_2 unum_formatDoubleCurrency_DRAFT_API_DO_NOT_USE -#define unum_parseInt64_3_2 unum_parseInt64_DRAFT_API_DO_NOT_USE -#define unum_parseDoubleCurrency_3_2 unum_parseDoubleCurrency_DRAFT_API_DO_NOT_USE -#define unum_getLocaleByType_3_2 unum_getLocaleByType_DRAFT_API_DO_NOT_USE -#define URegularExpression_3_2 URegularExpression_DRAFT_API_DO_NOT_USE -#define UREGEX_CANON_EQ_3_2 UREGEX_CANON_EQ_DRAFT_API_DO_NOT_USE -#define UREGEX_UWORD_3_2 UREGEX_UWORD_DRAFT_API_DO_NOT_USE -#define uregex_open_3_2 uregex_open_DRAFT_API_DO_NOT_USE -#define uregex_openC_3_2 uregex_openC_DRAFT_API_DO_NOT_USE -#define uregex_close_3_2 uregex_close_DRAFT_API_DO_NOT_USE -#define uregex_clone_3_2 uregex_clone_DRAFT_API_DO_NOT_USE -#define uregex_pattern_3_2 uregex_pattern_DRAFT_API_DO_NOT_USE -#define uregex_flags_3_2 uregex_flags_DRAFT_API_DO_NOT_USE -#define uregex_setText_3_2 uregex_setText_DRAFT_API_DO_NOT_USE -#define uregex_getText_3_2 uregex_getText_DRAFT_API_DO_NOT_USE -#define uregex_matches_3_2 uregex_matches_DRAFT_API_DO_NOT_USE -#define uregex_lookingAt_3_2 uregex_lookingAt_DRAFT_API_DO_NOT_USE -#define uregex_find_3_2 uregex_find_DRAFT_API_DO_NOT_USE -#define uregex_findNext_3_2 uregex_findNext_DRAFT_API_DO_NOT_USE -#define uregex_groupCount_3_2 uregex_groupCount_DRAFT_API_DO_NOT_USE -#define uregex_group_3_2 uregex_group_DRAFT_API_DO_NOT_USE -#define uregex_start_3_2 uregex_start_DRAFT_API_DO_NOT_USE -#define uregex_end_3_2 uregex_end_DRAFT_API_DO_NOT_USE -#define uregex_reset_3_2 uregex_reset_DRAFT_API_DO_NOT_USE -#define uregex_replaceAll_3_2 uregex_replaceAll_DRAFT_API_DO_NOT_USE -#define uregex_replaceFirst_3_2 uregex_replaceFirst_DRAFT_API_DO_NOT_USE -#define uregex_appendReplacement_3_2 uregex_appendReplacement_DRAFT_API_DO_NOT_USE -#define uregex_appendTail_3_2 uregex_appendTail_DRAFT_API_DO_NOT_USE -#define uregex_split_3_2 uregex_split_DRAFT_API_DO_NOT_USE -#define ures_getLocaleByType_3_2 ures_getLocaleByType_DRAFT_API_DO_NOT_USE -#define ures_openAvailableLocales_3_2 ures_openAvailableLocales_DRAFT_API_DO_NOT_USE -#define USCRIPT_KATAKANA_OR_HIRAGANA_3_2 USCRIPT_KATAKANA_OR_HIRAGANA_DRAFT_API_DO_NOT_USE -#define USET_ADD_CASE_MAPPINGS_3_2 USET_ADD_CASE_MAPPINGS_DRAFT_API_DO_NOT_USE -#define uset_set_3_2 uset_set_DRAFT_API_DO_NOT_USE -#define uset_applyPattern_3_2 uset_applyPattern_DRAFT_API_DO_NOT_USE -#define uset_applyIntPropertyValue_3_2 uset_applyIntPropertyValue_DRAFT_API_DO_NOT_USE -#define uset_applyPropertyAlias_3_2 uset_applyPropertyAlias_DRAFT_API_DO_NOT_USE -#define uset_resemblesPattern_3_2 uset_resemblesPattern_DRAFT_API_DO_NOT_USE -#define uset_removeAll_3_2 uset_removeAll_DRAFT_API_DO_NOT_USE -#define uset_retain_3_2 uset_retain_DRAFT_API_DO_NOT_USE -#define uset_retainAll_3_2 uset_retainAll_DRAFT_API_DO_NOT_USE -#define uset_compact_3_2 uset_compact_DRAFT_API_DO_NOT_USE -#define uset_complementAll_3_2 uset_complementAll_DRAFT_API_DO_NOT_USE -#define uset_indexOf_3_2 uset_indexOf_DRAFT_API_DO_NOT_USE -#define uset_charAt_3_2 uset_charAt_DRAFT_API_DO_NOT_USE -#define uset_containsAll_3_2 uset_containsAll_DRAFT_API_DO_NOT_USE -#define uset_containsNone_3_2 uset_containsNone_DRAFT_API_DO_NOT_USE -#define uset_containsSome_3_2 uset_containsSome_DRAFT_API_DO_NOT_USE -#define uset_equals_3_2 uset_equals_DRAFT_API_DO_NOT_USE -#define USPREP_DEFAULT_3_2 USPREP_DEFAULT_DRAFT_API_DO_NOT_USE -#define USPREP_ALLOW_UNASSIGNED_3_2 USPREP_ALLOW_UNASSIGNED_DRAFT_API_DO_NOT_USE -#define UStringPrepProfile_3_2 UStringPrepProfile_DRAFT_API_DO_NOT_USE -#define usprep_open_3_2 usprep_open_DRAFT_API_DO_NOT_USE -#define usprep_close_3_2 usprep_close_DRAFT_API_DO_NOT_USE -#define usprep_prepare_3_2 usprep_prepare_DRAFT_API_DO_NOT_USE -#define U_IS_BMP_3_2 U_IS_BMP_DRAFT_API_DO_NOT_USE -#define U_IS_SUPPLEMENTARY_3_2 U_IS_SUPPLEMENTARY_DRAFT_API_DO_NOT_USE -#define UDateTimeScale_3_2 UDateTimeScale_DRAFT_API_DO_NOT_USE -#define UDTS_JAVA_TIME_3_2 UDTS_JAVA_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_UNIX_TIME_3_2 UDTS_UNIX_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_ICU4C_TIME_3_2 UDTS_ICU4C_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_WINDOWS_FILE_TIME_3_2 UDTS_WINDOWS_FILE_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_WINDOWS_DATE_TIME_3_2 UDTS_WINDOWS_DATE_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_MAC_OLD_TIME_3_2 UDTS_MAC_OLD_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_MAC_TIME_3_2 UDTS_MAC_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_EXCEL_TIME_3_2 UDTS_EXCEL_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_DB2_TIME_3_2 UDTS_DB2_TIME_DRAFT_API_DO_NOT_USE -#define UDTS_MAX_SCALE_3_2 UDTS_MAX_SCALE_DRAFT_API_DO_NOT_USE -#define UDateTimeScale_3_2 UDateTimeScale_DRAFT_API_DO_NOT_USE -#define UTSV_UNITS_VALUE_3_2 UTSV_UNITS_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_EPOCH_OFFSET_VALUE_3_2 UTSV_EPOCH_OFFSET_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_FROM_MIN_VALUE_3_2 UTSV_FROM_MIN_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_FROM_MAX_VALUE_3_2 UTSV_FROM_MAX_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_TO_MIN_VALUE_3_2 UTSV_TO_MIN_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_TO_MAX_VALUE_3_2 UTSV_TO_MAX_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_EPOCH_OFFSET_PLUS_1_VALUE_3_2 UTSV_EPOCH_OFFSET_PLUS_1_VALUE_DRAFT_API_DO_NOT_USE -#define UTSV_EPOCH_OFFSET_MINUS_1_VALUE_3_2 UTSV_EPOCH_OFFSET_MINUS_1_VALUE_DRAFT_API_DO_NOT_USE -#define utmscale_getTimeScaleValue_3_2 utmscale_getTimeScaleValue_DRAFT_API_DO_NOT_USE -#define utmscale_fromInt64_3_2 utmscale_fromInt64_DRAFT_API_DO_NOT_USE -#define utmscale_toInt64_3_2 utmscale_toInt64_DRAFT_API_DO_NOT_USE -#define UTraceLevel_3_2 UTraceLevel_DRAFT_API_DO_NOT_USE -#define UTraceFunctionNumber_3_2 UTraceFunctionNumber_DRAFT_API_DO_NOT_USE -#define UTraceEntry_3_2 UTraceEntry_DRAFT_API_DO_NOT_USE -#define UTraceExit_3_2 UTraceExit_DRAFT_API_DO_NOT_USE -#define UTraceData_3_2 UTraceData_DRAFT_API_DO_NOT_USE -#define UTRACE_OFF_3_2 UTRACE_OFF_DRAFT_API_DO_NOT_USE -#define UTRACE_ERROR_3_2 UTRACE_ERROR_DRAFT_API_DO_NOT_USE -#define UTRACE_WARNING_3_2 UTRACE_WARNING_DRAFT_API_DO_NOT_USE -#define UTRACE_OPEN_CLOSE_3_2 UTRACE_OPEN_CLOSE_DRAFT_API_DO_NOT_USE -#define UTRACE_INFO_3_2 UTRACE_INFO_DRAFT_API_DO_NOT_USE -#define UTRACE_VERBOSE_3_2 UTRACE_VERBOSE_DRAFT_API_DO_NOT_USE -#define UTraceLevel_3_2 UTraceLevel_DRAFT_API_DO_NOT_USE -#define UTraceFunctionNumber_3_2 UTraceFunctionNumber_DRAFT_API_DO_NOT_USE -#define utrace_setLevel_3_2 utrace_setLevel_DRAFT_API_DO_NOT_USE -#define utrace_getLevel_3_2 utrace_getLevel_DRAFT_API_DO_NOT_USE -#define utrace_setFunctions_3_2 utrace_setFunctions_DRAFT_API_DO_NOT_USE -#define utrace_getFunctions_3_2 utrace_getFunctions_DRAFT_API_DO_NOT_USE -#define utrace_vformat_3_2 utrace_vformat_DRAFT_API_DO_NOT_USE -#define utrace_format_3_2 utrace_format_DRAFT_API_DO_NOT_USE -#define utrace_functionName_3_2 utrace_functionName_DRAFT_API_DO_NOT_USE -#define utrans_openU_3_2 utrans_openU_DRAFT_API_DO_NOT_USE -#define utrans_getUnicodeID_3_2 utrans_getUnicodeID_DRAFT_API_DO_NOT_USE -#define utrans_unregisterID_3_2 utrans_unregisterID_DRAFT_API_DO_NOT_USE -#define utrans_openIDs_3_2 utrans_openIDs_DRAFT_API_DO_NOT_USE -#define U_DATA_API_3_2 U_DATA_API_DRAFT_API_DO_NOT_USE -#define unistr_3_2 unistr_DRAFT_API_DO_NOT_USE -#define UnicodeSet_3_2 UnicodeSet_DRAFT_API_DO_NOT_USE -#define UnicodeString_3_2 UnicodeString_DRAFT_API_DO_NOT_USE +# if U_DISABLE_RENAMING +# define u_fclose u_fclose_DRAFT_API_DO_NOT_USE +# define u_feof u_feof_DRAFT_API_DO_NOT_USE +# define u_fflush u_fflush_DRAFT_API_DO_NOT_USE +# define u_fgetConverter u_fgetConverter_DRAFT_API_DO_NOT_USE +# define u_fgetc u_fgetc_DRAFT_API_DO_NOT_USE +# define u_fgetcodepage u_fgetcodepage_DRAFT_API_DO_NOT_USE +# define u_fgetcx u_fgetcx_DRAFT_API_DO_NOT_USE +# define u_fgetfile u_fgetfile_DRAFT_API_DO_NOT_USE +# define u_fgetlocale u_fgetlocale_DRAFT_API_DO_NOT_USE +# define u_fgets u_fgets_DRAFT_API_DO_NOT_USE +# define u_file_read u_file_read_DRAFT_API_DO_NOT_USE +# define u_file_write u_file_write_DRAFT_API_DO_NOT_USE +# define u_finit u_finit_DRAFT_API_DO_NOT_USE +# define u_fopen u_fopen_DRAFT_API_DO_NOT_USE +# define u_fprintf u_fprintf_DRAFT_API_DO_NOT_USE +# define u_fprintf_u u_fprintf_u_DRAFT_API_DO_NOT_USE +# define u_fputc u_fputc_DRAFT_API_DO_NOT_USE +# define u_fputs u_fputs_DRAFT_API_DO_NOT_USE +# define u_frewind u_frewind_DRAFT_API_DO_NOT_USE +# define u_fscanf u_fscanf_DRAFT_API_DO_NOT_USE +# define u_fscanf_u u_fscanf_u_DRAFT_API_DO_NOT_USE +# define u_fsetcodepage u_fsetcodepage_DRAFT_API_DO_NOT_USE +# define u_fsetlocale u_fsetlocale_DRAFT_API_DO_NOT_USE +# define u_fsettransliterator u_fsettransliterator_DRAFT_API_DO_NOT_USE +# define u_fstropen u_fstropen_DRAFT_API_DO_NOT_USE +# define u_fungetc u_fungetc_DRAFT_API_DO_NOT_USE +# define u_snprintf u_snprintf_DRAFT_API_DO_NOT_USE +# define u_snprintf_u u_snprintf_u_DRAFT_API_DO_NOT_USE +# define u_sprintf u_sprintf_DRAFT_API_DO_NOT_USE +# define u_sprintf_u u_sprintf_u_DRAFT_API_DO_NOT_USE +# define u_sscanf u_sscanf_DRAFT_API_DO_NOT_USE +# define u_sscanf_u u_sscanf_u_DRAFT_API_DO_NOT_USE +# define u_strFromUTF8Lenient u_strFromUTF8Lenient_DRAFT_API_DO_NOT_USE +# define u_strFromUTF8WithSub u_strFromUTF8WithSub_DRAFT_API_DO_NOT_USE +# define u_strToUTF8WithSub u_strToUTF8WithSub_DRAFT_API_DO_NOT_USE +# define u_vfprintf u_vfprintf_DRAFT_API_DO_NOT_USE +# define u_vfprintf_u u_vfprintf_u_DRAFT_API_DO_NOT_USE +# define u_vfscanf u_vfscanf_DRAFT_API_DO_NOT_USE +# define u_vfscanf_u u_vfscanf_u_DRAFT_API_DO_NOT_USE +# define u_vsnprintf u_vsnprintf_DRAFT_API_DO_NOT_USE +# define u_vsnprintf_u u_vsnprintf_u_DRAFT_API_DO_NOT_USE +# define u_vsprintf u_vsprintf_DRAFT_API_DO_NOT_USE +# define u_vsprintf_u u_vsprintf_u_DRAFT_API_DO_NOT_USE +# define u_vsscanf u_vsscanf_DRAFT_API_DO_NOT_USE +# define u_vsscanf_u u_vsscanf_u_DRAFT_API_DO_NOT_USE +# define ubidi_getProcessedLength ubidi_getProcessedLength_DRAFT_API_DO_NOT_USE +# define ubidi_getReorderingMode ubidi_getReorderingMode_DRAFT_API_DO_NOT_USE +# define ubidi_getReorderingOptions ubidi_getReorderingOptions_DRAFT_API_DO_NOT_USE +# define ubidi_getResultLength ubidi_getResultLength_DRAFT_API_DO_NOT_USE +# define ubidi_setReorderingMode ubidi_setReorderingMode_DRAFT_API_DO_NOT_USE +# define ubidi_setReorderingOptions ubidi_setReorderingOptions_DRAFT_API_DO_NOT_USE +# define ubrk_setUText ubrk_setUText_DRAFT_API_DO_NOT_USE +# define ucal_getGregorianChange ucal_getGregorianChange_DRAFT_API_DO_NOT_USE +# define ucal_setGregorianChange ucal_setGregorianChange_DRAFT_API_DO_NOT_USE +# define ucasemap_close ucasemap_close_DRAFT_API_DO_NOT_USE +# define ucasemap_getLocale ucasemap_getLocale_DRAFT_API_DO_NOT_USE +# define ucasemap_getOptions ucasemap_getOptions_DRAFT_API_DO_NOT_USE +# define ucasemap_open ucasemap_open_DRAFT_API_DO_NOT_USE +# define ucasemap_setLocale ucasemap_setLocale_DRAFT_API_DO_NOT_USE +# define ucasemap_setOptions ucasemap_setOptions_DRAFT_API_DO_NOT_USE +# define ucasemap_utf8ToLower ucasemap_utf8ToLower_DRAFT_API_DO_NOT_USE +# define ucasemap_utf8ToUpper ucasemap_utf8ToUpper_DRAFT_API_DO_NOT_USE +# define ucnv_fromUCountPending ucnv_fromUCountPending_DRAFT_API_DO_NOT_USE +# define ucnv_setSubstString ucnv_setSubstString_DRAFT_API_DO_NOT_USE +# define ucnv_toUCountPending ucnv_toUCountPending_DRAFT_API_DO_NOT_USE +# define ucol_getContractionsAndExpansions ucol_getContractionsAndExpansions_DRAFT_API_DO_NOT_USE +# define ucsdet_close ucsdet_close_DRAFT_API_DO_NOT_USE +# define ucsdet_detect ucsdet_detect_DRAFT_API_DO_NOT_USE +# define ucsdet_detectAll ucsdet_detectAll_DRAFT_API_DO_NOT_USE +# define ucsdet_enableInputFilter ucsdet_enableInputFilter_DRAFT_API_DO_NOT_USE +# define ucsdet_getAllDetectableCharsets ucsdet_getAllDetectableCharsets_DRAFT_API_DO_NOT_USE +# define ucsdet_getConfidence ucsdet_getConfidence_DRAFT_API_DO_NOT_USE +# define ucsdet_getLanguage ucsdet_getLanguage_DRAFT_API_DO_NOT_USE +# define ucsdet_getName ucsdet_getName_DRAFT_API_DO_NOT_USE +# define ucsdet_getUChars ucsdet_getUChars_DRAFT_API_DO_NOT_USE +# define ucsdet_isInputFilterEnabled ucsdet_isInputFilterEnabled_DRAFT_API_DO_NOT_USE +# define ucsdet_open ucsdet_open_DRAFT_API_DO_NOT_USE +# define ucsdet_setDeclaredEncoding ucsdet_setDeclaredEncoding_DRAFT_API_DO_NOT_USE +# define ucsdet_setText ucsdet_setText_DRAFT_API_DO_NOT_USE +# define udata_setFileAccess udata_setFileAccess_DRAFT_API_DO_NOT_USE +# define ulocdata_close ulocdata_close_DRAFT_API_DO_NOT_USE +# define ulocdata_getDelimiter ulocdata_getDelimiter_DRAFT_API_DO_NOT_USE +# define ulocdata_getExemplarSet ulocdata_getExemplarSet_DRAFT_API_DO_NOT_USE +# define ulocdata_getNoSubstitute ulocdata_getNoSubstitute_DRAFT_API_DO_NOT_USE +# define ulocdata_open ulocdata_open_DRAFT_API_DO_NOT_USE +# define ulocdata_setNoSubstitute ulocdata_setNoSubstitute_DRAFT_API_DO_NOT_USE +# define ures_getUTF8String ures_getUTF8String_DRAFT_API_DO_NOT_USE +# define ures_getUTF8StringByIndex ures_getUTF8StringByIndex_DRAFT_API_DO_NOT_USE +# define ures_getUTF8StringByKey ures_getUTF8StringByKey_DRAFT_API_DO_NOT_USE +# define uset_addAllCodePoints uset_addAllCodePoints_DRAFT_API_DO_NOT_USE +# define uset_containsAllCodePoints uset_containsAllCodePoints_DRAFT_API_DO_NOT_USE +# define utext_char32At utext_char32At_DRAFT_API_DO_NOT_USE +# define utext_clone utext_clone_DRAFT_API_DO_NOT_USE +# define utext_close utext_close_DRAFT_API_DO_NOT_USE +# define utext_copy utext_copy_DRAFT_API_DO_NOT_USE +# define utext_current32 utext_current32_DRAFT_API_DO_NOT_USE +# define utext_equals utext_equals_DRAFT_API_DO_NOT_USE +# define utext_extract utext_extract_DRAFT_API_DO_NOT_USE +# define utext_freeze utext_freeze_DRAFT_API_DO_NOT_USE +# define utext_getNativeIndex utext_getNativeIndex_DRAFT_API_DO_NOT_USE +# define utext_getPreviousNativeIndex utext_getPreviousNativeIndex_DRAFT_API_DO_NOT_USE +# define utext_hasMetaData utext_hasMetaData_DRAFT_API_DO_NOT_USE +# define utext_isLengthExpensive utext_isLengthExpensive_DRAFT_API_DO_NOT_USE +# define utext_isWritable utext_isWritable_DRAFT_API_DO_NOT_USE +# define utext_moveIndex32 utext_moveIndex32_DRAFT_API_DO_NOT_USE +# define utext_nativeLength utext_nativeLength_DRAFT_API_DO_NOT_USE +# define utext_next32 utext_next32_DRAFT_API_DO_NOT_USE +# define utext_next32From utext_next32From_DRAFT_API_DO_NOT_USE +# define utext_openUChars utext_openUChars_DRAFT_API_DO_NOT_USE +# define utext_openUTF8 utext_openUTF8_DRAFT_API_DO_NOT_USE +# define utext_previous32 utext_previous32_DRAFT_API_DO_NOT_USE +# define utext_previous32From utext_previous32From_DRAFT_API_DO_NOT_USE +# define utext_replace utext_replace_DRAFT_API_DO_NOT_USE +# define utext_setNativeIndex utext_setNativeIndex_DRAFT_API_DO_NOT_USE +# define utext_setup utext_setup_DRAFT_API_DO_NOT_USE +# else +# define u_fclose_3_6 u_fclose_DRAFT_API_DO_NOT_USE +# define u_feof_3_6 u_feof_DRAFT_API_DO_NOT_USE +# define u_fflush_3_6 u_fflush_DRAFT_API_DO_NOT_USE +# define u_fgetConverter_3_6 u_fgetConverter_DRAFT_API_DO_NOT_USE +# define u_fgetc_3_6 u_fgetc_DRAFT_API_DO_NOT_USE +# define u_fgetcodepage_3_6 u_fgetcodepage_DRAFT_API_DO_NOT_USE +# define u_fgetcx_3_6 u_fgetcx_DRAFT_API_DO_NOT_USE +# define u_fgetfile_3_6 u_fgetfile_DRAFT_API_DO_NOT_USE +# define u_fgetlocale_3_6 u_fgetlocale_DRAFT_API_DO_NOT_USE +# define u_fgets_3_6 u_fgets_DRAFT_API_DO_NOT_USE +# define u_file_read_3_6 u_file_read_DRAFT_API_DO_NOT_USE +# define u_file_write_3_6 u_file_write_DRAFT_API_DO_NOT_USE +# define u_finit_3_6 u_finit_DRAFT_API_DO_NOT_USE +# define u_fopen_3_6 u_fopen_DRAFT_API_DO_NOT_USE +# define u_fprintf_3_6 u_fprintf_DRAFT_API_DO_NOT_USE +# define u_fprintf_u_3_6 u_fprintf_u_DRAFT_API_DO_NOT_USE +# define u_fputc_3_6 u_fputc_DRAFT_API_DO_NOT_USE +# define u_fputs_3_6 u_fputs_DRAFT_API_DO_NOT_USE +# define u_frewind_3_6 u_frewind_DRAFT_API_DO_NOT_USE +# define u_fscanf_3_6 u_fscanf_DRAFT_API_DO_NOT_USE +# define u_fscanf_u_3_6 u_fscanf_u_DRAFT_API_DO_NOT_USE +# define u_fsetcodepage_3_6 u_fsetcodepage_DRAFT_API_DO_NOT_USE +# define u_fsetlocale_3_6 u_fsetlocale_DRAFT_API_DO_NOT_USE +# define u_fsettransliterator_3_6 u_fsettransliterator_DRAFT_API_DO_NOT_USE +# define u_fstropen_3_6 u_fstropen_DRAFT_API_DO_NOT_USE +# define u_fungetc_3_6 u_fungetc_DRAFT_API_DO_NOT_USE +# define u_snprintf_3_6 u_snprintf_DRAFT_API_DO_NOT_USE +# define u_snprintf_u_3_6 u_snprintf_u_DRAFT_API_DO_NOT_USE +# define u_sprintf_3_6 u_sprintf_DRAFT_API_DO_NOT_USE +# define u_sprintf_u_3_6 u_sprintf_u_DRAFT_API_DO_NOT_USE +# define u_sscanf_3_6 u_sscanf_DRAFT_API_DO_NOT_USE +# define u_sscanf_u_3_6 u_sscanf_u_DRAFT_API_DO_NOT_USE +# define u_strFromUTF8Lenient_3_6 u_strFromUTF8Lenient_DRAFT_API_DO_NOT_USE +# define u_strFromUTF8WithSub_3_6 u_strFromUTF8WithSub_DRAFT_API_DO_NOT_USE +# define u_strToUTF8WithSub_3_6 u_strToUTF8WithSub_DRAFT_API_DO_NOT_USE +# define u_vfprintf_3_6 u_vfprintf_DRAFT_API_DO_NOT_USE +# define u_vfprintf_u_3_6 u_vfprintf_u_DRAFT_API_DO_NOT_USE +# define u_vfscanf_3_6 u_vfscanf_DRAFT_API_DO_NOT_USE +# define u_vfscanf_u_3_6 u_vfscanf_u_DRAFT_API_DO_NOT_USE +# define u_vsnprintf_3_6 u_vsnprintf_DRAFT_API_DO_NOT_USE +# define u_vsnprintf_u_3_6 u_vsnprintf_u_DRAFT_API_DO_NOT_USE +# define u_vsprintf_3_6 u_vsprintf_DRAFT_API_DO_NOT_USE +# define u_vsprintf_u_3_6 u_vsprintf_u_DRAFT_API_DO_NOT_USE +# define u_vsscanf_3_6 u_vsscanf_DRAFT_API_DO_NOT_USE +# define u_vsscanf_u_3_6 u_vsscanf_u_DRAFT_API_DO_NOT_USE +# define ubidi_getProcessedLength_3_6 ubidi_getProcessedLength_DRAFT_API_DO_NOT_USE +# define ubidi_getReorderingMode_3_6 ubidi_getReorderingMode_DRAFT_API_DO_NOT_USE +# define ubidi_getReorderingOptions_3_6 ubidi_getReorderingOptions_DRAFT_API_DO_NOT_USE +# define ubidi_getResultLength_3_6 ubidi_getResultLength_DRAFT_API_DO_NOT_USE +# define ubidi_setReorderingMode_3_6 ubidi_setReorderingMode_DRAFT_API_DO_NOT_USE +# define ubidi_setReorderingOptions_3_6 ubidi_setReorderingOptions_DRAFT_API_DO_NOT_USE +# define ubrk_setUText_3_6 ubrk_setUText_DRAFT_API_DO_NOT_USE +# define ucal_getGregorianChange_3_6 ucal_getGregorianChange_DRAFT_API_DO_NOT_USE +# define ucal_setGregorianChange_3_6 ucal_setGregorianChange_DRAFT_API_DO_NOT_USE +# define ucasemap_close_3_6 ucasemap_close_DRAFT_API_DO_NOT_USE +# define ucasemap_getLocale_3_6 ucasemap_getLocale_DRAFT_API_DO_NOT_USE +# define ucasemap_getOptions_3_6 ucasemap_getOptions_DRAFT_API_DO_NOT_USE +# define ucasemap_open_3_6 ucasemap_open_DRAFT_API_DO_NOT_USE +# define ucasemap_setLocale_3_6 ucasemap_setLocale_DRAFT_API_DO_NOT_USE +# define ucasemap_setOptions_3_6 ucasemap_setOptions_DRAFT_API_DO_NOT_USE +# define ucasemap_utf8ToLower_3_6 ucasemap_utf8ToLower_DRAFT_API_DO_NOT_USE +# define ucasemap_utf8ToUpper_3_6 ucasemap_utf8ToUpper_DRAFT_API_DO_NOT_USE +# define ucnv_fromUCountPending_3_6 ucnv_fromUCountPending_DRAFT_API_DO_NOT_USE +# define ucnv_setSubstString_3_6 ucnv_setSubstString_DRAFT_API_DO_NOT_USE +# define ucnv_toUCountPending_3_6 ucnv_toUCountPending_DRAFT_API_DO_NOT_USE +# define ucol_getContractionsAndExpansions_3_6 ucol_getContractionsAndExpansions_DRAFT_API_DO_NOT_USE +# define ucsdet_close_3_6 ucsdet_close_DRAFT_API_DO_NOT_USE +# define ucsdet_detectAll_3_6 ucsdet_detectAll_DRAFT_API_DO_NOT_USE +# define ucsdet_detect_3_6 ucsdet_detect_DRAFT_API_DO_NOT_USE +# define ucsdet_enableInputFilter_3_6 ucsdet_enableInputFilter_DRAFT_API_DO_NOT_USE +# define ucsdet_getAllDetectableCharsets_3_6 ucsdet_getAllDetectableCharsets_DRAFT_API_DO_NOT_USE +# define ucsdet_getConfidence_3_6 ucsdet_getConfidence_DRAFT_API_DO_NOT_USE +# define ucsdet_getLanguage_3_6 ucsdet_getLanguage_DRAFT_API_DO_NOT_USE +# define ucsdet_getName_3_6 ucsdet_getName_DRAFT_API_DO_NOT_USE +# define ucsdet_getUChars_3_6 ucsdet_getUChars_DRAFT_API_DO_NOT_USE +# define ucsdet_isInputFilterEnabled_3_6 ucsdet_isInputFilterEnabled_DRAFT_API_DO_NOT_USE +# define ucsdet_open_3_6 ucsdet_open_DRAFT_API_DO_NOT_USE +# define ucsdet_setDeclaredEncoding_3_6 ucsdet_setDeclaredEncoding_DRAFT_API_DO_NOT_USE +# define ucsdet_setText_3_6 ucsdet_setText_DRAFT_API_DO_NOT_USE +# define udata_setFileAccess_3_6 udata_setFileAccess_DRAFT_API_DO_NOT_USE +# define ulocdata_close_3_6 ulocdata_close_DRAFT_API_DO_NOT_USE +# define ulocdata_getDelimiter_3_6 ulocdata_getDelimiter_DRAFT_API_DO_NOT_USE +# define ulocdata_getExemplarSet_3_6 ulocdata_getExemplarSet_DRAFT_API_DO_NOT_USE +# define ulocdata_getNoSubstitute_3_6 ulocdata_getNoSubstitute_DRAFT_API_DO_NOT_USE +# define ulocdata_open_3_6 ulocdata_open_DRAFT_API_DO_NOT_USE +# define ulocdata_setNoSubstitute_3_6 ulocdata_setNoSubstitute_DRAFT_API_DO_NOT_USE +# define ures_getUTF8StringByIndex_3_6 ures_getUTF8StringByIndex_DRAFT_API_DO_NOT_USE +# define ures_getUTF8StringByKey_3_6 ures_getUTF8StringByKey_DRAFT_API_DO_NOT_USE +# define ures_getUTF8String_3_6 ures_getUTF8String_DRAFT_API_DO_NOT_USE +# define uset_addAllCodePoints_3_6 uset_addAllCodePoints_DRAFT_API_DO_NOT_USE +# define uset_containsAllCodePoints_3_6 uset_containsAllCodePoints_DRAFT_API_DO_NOT_USE +# define utext_char32At_3_6 utext_char32At_DRAFT_API_DO_NOT_USE +# define utext_clone_3_6 utext_clone_DRAFT_API_DO_NOT_USE +# define utext_close_3_6 utext_close_DRAFT_API_DO_NOT_USE +# define utext_copy_3_6 utext_copy_DRAFT_API_DO_NOT_USE +# define utext_current32_3_6 utext_current32_DRAFT_API_DO_NOT_USE +# define utext_equals_3_6 utext_equals_DRAFT_API_DO_NOT_USE +# define utext_extract_3_6 utext_extract_DRAFT_API_DO_NOT_USE +# define utext_freeze_3_6 utext_freeze_DRAFT_API_DO_NOT_USE +# define utext_getNativeIndex_3_6 utext_getNativeIndex_DRAFT_API_DO_NOT_USE +# define utext_getPreviousNativeIndex_3_6 utext_getPreviousNativeIndex_DRAFT_API_DO_NOT_USE +# define utext_hasMetaData_3_6 utext_hasMetaData_DRAFT_API_DO_NOT_USE +# define utext_isLengthExpensive_3_6 utext_isLengthExpensive_DRAFT_API_DO_NOT_USE +# define utext_isWritable_3_6 utext_isWritable_DRAFT_API_DO_NOT_USE +# define utext_moveIndex32_3_6 utext_moveIndex32_DRAFT_API_DO_NOT_USE +# define utext_nativeLength_3_6 utext_nativeLength_DRAFT_API_DO_NOT_USE +# define utext_next32From_3_6 utext_next32From_DRAFT_API_DO_NOT_USE +# define utext_next32_3_6 utext_next32_DRAFT_API_DO_NOT_USE +# define utext_openUChars_3_6 utext_openUChars_DRAFT_API_DO_NOT_USE +# define utext_openUTF8_3_6 utext_openUTF8_DRAFT_API_DO_NOT_USE +# define utext_previous32From_3_6 utext_previous32From_DRAFT_API_DO_NOT_USE +# define utext_previous32_3_6 utext_previous32_DRAFT_API_DO_NOT_USE +# define utext_replace_3_6 utext_replace_DRAFT_API_DO_NOT_USE +# define utext_setNativeIndex_3_6 utext_setNativeIndex_DRAFT_API_DO_NOT_USE +# define utext_setup_3_6 utext_setup_DRAFT_API_DO_NOT_USE +# endif /* U_DISABLE_RENAMING */ #endif /* U_HIDE_DRAFT_API */ #endif /* UDRAFT_H */ diff --git a/icuSources/common/unicode/uenum.h b/icuSources/common/unicode/uenum.h index 63690f8b..ff9b2999 100644 --- a/icuSources/common/unicode/uenum.h +++ b/icuSources/common/unicode/uenum.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -19,6 +19,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C API: String Enumeration + */ + /** * An enumeration object. * For usage in C programs. diff --git a/icuSources/common/unicode/uidna.h b/icuSources/common/unicode/uidna.h index 7b1dd0b3..1371b9ed 100644 --- a/icuSources/common/unicode/uidna.h +++ b/icuSources/common/unicode/uidna.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -24,7 +24,9 @@ #include "unicode/parseerr.h" /** - *\file + * \file + * \brief C API: Internationalized Domain Names in Applications Tranformation + * * UIDNA API implements the IDNA protocol as defined in the IDNA RFC * (http://www.ietf.org/rfc/rfc3490.txt). * The RFC defines 2 operations: ToASCII and ToUnicode. Domain labels @@ -47,8 +49,6 @@ * */ -#ifndef U_HIDE_DRAFT_API - /** * Option to prohibit processing of unassigned codepoints in the input and * do not check if the input conforms to STD-3 ASCII rules. @@ -72,8 +72,6 @@ */ #define UIDNA_USE_STD3_RULES 0x0002 -#endif /*U_HIDE_DRAFT_API*/ - /** * This function implements the ToASCII operation as defined in the IDNA RFC. * This operation is done on single labels before sending it to something that expects diff --git a/icuSources/common/unicode/uintrnal.h b/icuSources/common/unicode/uintrnal.h new file mode 100644 index 00000000..79630d1d --- /dev/null +++ b/icuSources/common/unicode/uintrnal.h @@ -0,0 +1,68 @@ +/* +******************************************************************************* +* Copyright (C) 2004-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* +* file name: +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* Created by: genheaders.pl, a perl script written by Ram Viswanadha +* +* Contains data for commenting out APIs. +* Gets included by umachine.h +* +* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT +* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! +*/ + +#ifndef UINTRNAL_H +#define UINTRNAL_H + +#ifdef U_HIDE_INTERNAL_API + +# if U_DISABLE_RENAMING +# define RegexPatternDump RegexPatternDump_INTERNAL_API_DO_NOT_USE +# define ucol_collatorToIdentifier ucol_collatorToIdentifier_INTERNAL_API_DO_NOT_USE +# define ucol_equals ucol_equals_INTERNAL_API_DO_NOT_USE +# define ucol_forgetUCA ucol_forgetUCA_INTERNAL_API_DO_NOT_USE +# define ucol_getAttributeOrDefault ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE +# define ucol_getUnsafeSet ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE +# define ucol_identifierToShortString ucol_identifierToShortString_INTERNAL_API_DO_NOT_USE +# define ucol_openFromIdentifier ucol_openFromIdentifier_INTERNAL_API_DO_NOT_USE +# define ucol_prepareShortStringOpen ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE +# define ucol_shortStringToIdentifier ucol_shortStringToIdentifier_INTERNAL_API_DO_NOT_USE +# define uprv_getDefaultCodepage uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE +# define uprv_getDefaultLocaleID uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE +# define ures_openFillIn ures_openFillIn_INTERNAL_API_DO_NOT_USE +# define utf8_appendCharSafeBody utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE +# define utf8_back1SafeBody utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE +# define utf8_countTrailBytes utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE +# define utf8_nextCharSafeBody utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE +# define utf8_prevCharSafeBody utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE +# else +# define RegexPatternDump_3_6 RegexPatternDump_INTERNAL_API_DO_NOT_USE +# define ucol_collatorToIdentifier_3_6 ucol_collatorToIdentifier_INTERNAL_API_DO_NOT_USE +# define ucol_equals_3_6 ucol_equals_INTERNAL_API_DO_NOT_USE +# define ucol_forgetUCA_3_6 ucol_forgetUCA_INTERNAL_API_DO_NOT_USE +# define ucol_getAttributeOrDefault_3_6 ucol_getAttributeOrDefault_INTERNAL_API_DO_NOT_USE +# define ucol_getUnsafeSet_3_6 ucol_getUnsafeSet_INTERNAL_API_DO_NOT_USE +# define ucol_identifierToShortString_3_6 ucol_identifierToShortString_INTERNAL_API_DO_NOT_USE +# define ucol_openFromIdentifier_3_6 ucol_openFromIdentifier_INTERNAL_API_DO_NOT_USE +# define ucol_prepareShortStringOpen_3_6 ucol_prepareShortStringOpen_INTERNAL_API_DO_NOT_USE +# define ucol_shortStringToIdentifier_3_6 ucol_shortStringToIdentifier_INTERNAL_API_DO_NOT_USE +# define uprv_getDefaultCodepage_3_6 uprv_getDefaultCodepage_INTERNAL_API_DO_NOT_USE +# define uprv_getDefaultLocaleID_3_6 uprv_getDefaultLocaleID_INTERNAL_API_DO_NOT_USE +# define ures_openFillIn_3_6 ures_openFillIn_INTERNAL_API_DO_NOT_USE +# define utf8_appendCharSafeBody_3_6 utf8_appendCharSafeBody_INTERNAL_API_DO_NOT_USE +# define utf8_back1SafeBody_3_6 utf8_back1SafeBody_INTERNAL_API_DO_NOT_USE +# define utf8_countTrailBytes_3_6 utf8_countTrailBytes_INTERNAL_API_DO_NOT_USE +# define utf8_nextCharSafeBody_3_6 utf8_nextCharSafeBody_INTERNAL_API_DO_NOT_USE +# define utf8_prevCharSafeBody_3_6 utf8_prevCharSafeBody_INTERNAL_API_DO_NOT_USE +# endif /* U_DISABLE_RENAMING */ + +#endif /* U_HIDE_INTERNAL_API */ +#endif /* UINTRNAL_H */ + diff --git a/icuSources/common/unicode/uiter.h b/icuSources/common/unicode/uiter.h index 963df5cf..42c76677 100644 --- a/icuSources/common/unicode/uiter.h +++ b/icuSources/common/unicode/uiter.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* diff --git a/icuSources/common/unicode/uloc.h b/icuSources/common/unicode/uloc.h index f584ec1c..2912f677 100644 --- a/icuSources/common/unicode/uloc.h +++ b/icuSources/common/unicode/uloc.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2007, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -261,47 +261,42 @@ */ #define ULOC_FULLNAME_CAPACITY 56 - -#ifndef U_HIDE_DRAFT_API - /** * Useful constant for the maximum size of the script part of a locale ID * (including the terminating NULL). - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define ULOC_SCRIPT_CAPACITY 6 /** * Useful constant for the maximum size of keywords in a locale - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define ULOC_KEYWORDS_CAPACITY 50 /** - * Useful constant for the maximum size of keywords in a locale - * @draft ICU 2.8 + * Useful constant for the maximum SIZE of keywords in a locale + * @stable ICU 2.8 */ #define ULOC_KEYWORD_AND_VALUES_CAPACITY 100 /** * Character separating keywords from the locale string * different for EBCDIC - TODO - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define ULOC_KEYWORD_SEPARATOR '@' /** * Character for assigning value to a keyword - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define ULOC_KEYWORD_ASSIGN '=' /** * Character separating keywords - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define ULOC_KEYWORD_ITEM_SEPARATOR ';' -#endif /*U_HIDE_DRAFT_API*/ - /** * Constants for *_getLocale() * Allow user to select whether she wants information on @@ -333,7 +328,7 @@ typedef enum { ULOC_REQUESTED_LOCALE = 2, #endif /* U_HIDE_DEPRECATED_API */ - ULOC_DATA_LOCALE_TYPE_LIMIT + ULOC_DATA_LOCALE_TYPE_LIMIT = 3 } ULocDataLocaleType ; @@ -400,9 +395,9 @@ uloc_getLanguage(const char* localeID, * @param err error information if retrieving the language code failed * @return the actual buffer size needed for the language code. If it's greater * than scriptCapacity, the returned language code will be truncated. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getScript(const char* localeID, char* script, int32_t scriptCapacity, @@ -420,7 +415,7 @@ uloc_getScript(const char* localeID, * than countryCapacity, the returned country code will be truncated. * @stable ICU 2.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getCountry(const char* localeID, char* country, int32_t countryCapacity, @@ -482,9 +477,9 @@ uloc_getName(const char* localeID, * @param err error information if retrieving the full name failed * @return the actual buffer size needed for the full name. If it's greater * than nameCapacity, the returned full name will be truncated. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_canonicalize(const char* localeID, char* name, int32_t nameCapacity, @@ -559,9 +554,9 @@ uloc_getDisplayLanguage(const char* locale, * @param status error information if retrieving the displayable script code failed * @return the actual buffer size needed for the displayable script code. If it's greater * than scriptCapacity, the returned displayable script code will be truncated. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getDisplayScript(const char* locale, const char* displayLocale, UChar* script, @@ -653,9 +648,9 @@ uloc_getDisplayVariant(const char* locale, * Should not be NULL and should not indicate failure on entry. * @return the actual buffer size needed for the displayable variant code. * @see #uloc_openKeywords - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getDisplayKeyword(const char* keyword, const char* displayLocale, UChar* dest, @@ -679,9 +674,9 @@ uloc_getDisplayKeyword(const char* keyword, * @param status error information if retrieving the displayable string failed. * Should not be NULL and must not indicate failure on entry. * @return the actual buffer size needed for the displayable variant code. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getDisplayKeywordValue( const char* locale, const char* keyword, const char* displayLocale, @@ -796,9 +791,9 @@ uloc_getParent(const char* localeID, * @param err error information if retrieving the full name failed * @return the actual buffer size needed for the full name. If it's greater * than nameCapacity, the returned full name will be truncated. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getBaseName(const char* localeID, char* name, int32_t nameCapacity, @@ -811,9 +806,9 @@ uloc_getBaseName(const char* localeID, * @param localeID the locale to get the variant code with * @param status error information if retrieving the keywords failed * @return enumeration of keywords or NULL if there are no keywords. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_STABLE UEnumeration* U_EXPORT2 uloc_openKeywords(const char* localeID, UErrorCode* status); @@ -826,9 +821,9 @@ uloc_openKeywords(const char* localeID, * @param bufferCapacity capacity of receiving buffer * @param status containing error code - buffer not big enough. * @return the length of keyword value - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_getKeywordValue(const char* localeID, const char* keywordName, char* buffer, int32_t bufferCapacity, @@ -852,9 +847,9 @@ uloc_getKeywordValue(const char* localeID, * @param status containing error code - buffer not big enough. * @return the length needed for the buffer * @see uloc_getKeywordValue - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_setKeywordValue(const char* keywordName, const char* keywordValue, char* buffer, int32_t bufferCapacity, @@ -864,7 +859,7 @@ uloc_setKeywordValue(const char* keywordName, * enums for the 'outResult' parameter return value * @see uloc_acceptLanguageFromHTTP * @see uloc_acceptLanguage - * @draft ICU 3.2 + * @stable ICU 3.2 */ typedef enum { ULOC_ACCEPT_FAILED = 0, /* No exact match was found. */ @@ -876,15 +871,18 @@ typedef enum { /** - * @param httpAcceptLanguage - "Accept-Language:" header as per HTTP. + * Based on a HTTP header from a web browser and a list of available locales, + * determine an acceptable locale for the user. * @param result - buffer to accept the result locale * @param resultAvailable the size of the result buffer. + * @param outResult - An out parameter that contains the fallback status + * @param httpAcceptLanguage - "Accept-Language:" header as per HTTP. * @param availableLocales - list of available locales to match * @param status Error status, may be BUFFER_OVERFLOW_ERROR * @return length needed for the locale. - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult *outResult, const char *httpAcceptLanguage, @@ -892,26 +890,42 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UErrorCode *status); /** - * @param acceptList -list of acceptable languages - * @param acceptListCount - count of acceptList items + * Based on a list of available locales, + * determine an acceptable locale for the user. * @param result - buffer to accept the result locale * @param resultAvailable the size of the result buffer. + * @param outResult - An out parameter that contains the fallback status + * @param acceptList - list of acceptable languages + * @param acceptListCount - count of acceptList items * @param availableLocales - list of available locales to match * @param status Error status, may be BUFFER_OVERFLOW_ERROR * @return length needed for the locale. - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uloc_acceptLanguage(char *result, int32_t resultAvailable, UAcceptResult *outResult, const char **acceptList, int32_t acceptListCount, UEnumeration* availableLocales, UErrorCode *status); -/*eof*/ +/** + * Gets the ICU locale ID for the specified Win32 LCID value. + * + * @param hostID the Win32 LCID to translate + * @param locale the output buffer for the ICU locale ID, which will be NUL-terminated + * if there is room. + * @param localeCapacity the size of the output buffer + * @param status an error is returned if the LCID is unrecognized or the output buffer + * is too small + * @return actual the actual size of the locale ID, not including NUL-termination + * @draft ICU 3.8 + */ +U_DRAFT int32_t U_EXPORT2 +uloc_getLocaleForLCID(uint32_t hostid, char *locale, int32_t localeCapacity, + UErrorCode *status); #endif /*_ULOC*/ - diff --git a/icuSources/common/unicode/umachine.h b/icuSources/common/unicode/umachine.h index d841f534..60419cda 100644 --- a/icuSources/common/unicode/umachine.h +++ b/icuSources/common/unicode/umachine.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -41,7 +41,9 @@ /* which are contained in the platform-specific file platform.h */ /*==========================================================================*/ -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +#if defined(U_PALMOS) +# include "unicode/ppalmos.h" +#elif defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) # include "unicode/pwin32.h" #else # include "unicode/platform.h" @@ -201,7 +203,7 @@ /** * Provides a platform independent way to specify a signed 64-bit integer constant. * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C - * @draft ICU 2.8 + * @stable ICU 2.8 */ # define INT64_C(c) c ## LL # endif @@ -209,7 +211,7 @@ /** * Provides a platform independent way to specify an unsigned 64-bit integer constant. * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C - * @draft ICU 2.8 + * @stable ICU 2.8 */ # define UINT64_C(c) c ## ULL # endif @@ -298,7 +300,7 @@ typedef int8_t UBool; # if (U_SIZEOF_WCHAR_T==4) # define U_WCHAR_IS_UTF32 # endif -# elif defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +# elif defined(U_WINDOWS) # define U_WCHAR_IS_UTF16 # endif #endif @@ -352,6 +354,8 @@ typedef int32_t UChar32; /* the OS in use. */ /*==========================================================================*/ +#ifndef U_HIDE_INTERNAL_API + /** * \def U_ALIGN_CODE * This is used to align code fragments to a specific byte boundary. @@ -362,8 +366,14 @@ typedef int32_t UChar32; # define U_ALIGN_CODE(n) #endif +#endif /* U_HIDE_INTERNAL_API */ + #ifndef U_INLINE -# define U_INLINE +# ifdef XP_CPLUSPLUS +# define U_INLINE inline +# else +# define U_INLINE +# endif #endif #include "unicode/urename.h" diff --git a/icuSources/common/unicode/umisc.h b/icuSources/common/unicode/umisc.h index d47fa383..d85451fc 100644 --- a/icuSources/common/unicode/umisc.h +++ b/icuSources/common/unicode/umisc.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: umisc.h @@ -23,7 +23,9 @@ * * This file contains miscellaneous definitions for the C APIs. */ - + +U_CDECL_BEGIN + /** A struct representing a range of text containing a specific field * @stable ICU 2.0 */ @@ -45,4 +47,14 @@ typedef struct UFieldPosition { int32_t endIndex; } UFieldPosition; +#if !UCONFIG_NO_SERVICE +/** + * Opaque type returned by registerInstance, registerFactory and unregister for service registration. + * @stable ICU 2.6 + */ +typedef const void* URegistryKey; +#endif + +U_CDECL_END + #endif diff --git a/icuSources/common/unicode/unifilt.h b/icuSources/common/unicode/unifilt.h index 694a7bd0..5bf1ba4e 100644 --- a/icuSources/common/unicode/unifilt.h +++ b/icuSources/common/unicode/unifilt.h @@ -1,5 +1,6 @@ /* -* Copyright (C) 1999-2004, International Business Machines Corporation and others. +********************************************************************** +* Copyright (C) 1999-2006, International Business Machines Corporation and others. * All Rights Reserved. ********************************************************************** * Date Name Description @@ -12,6 +13,11 @@ #include "unicode/unifunct.h" #include "unicode/unimatch.h" +/** + * \file + * \brief C++ API: Unicode Filter + */ + U_NAMESPACE_BEGIN /** @@ -20,11 +26,12 @@ U_NAMESPACE_BEGIN * characters outside the range contextStart..contextLimit-1. This * allows explicit matching by rules and UnicodeSets of text outside a * defined range. - * @draft ICU 3.0 + * @stable ICU 3.0 */ #define U_ETHER ((UChar)0xFFFF) /** + * * UnicodeFilter defines a protocol for selecting a * subset of the full range (U+0000 to U+10FFFF) of Unicode characters. * Currently, filters are used in conjunction with classes like {@link diff --git a/icuSources/common/unicode/unifunct.h b/icuSources/common/unicode/unifunct.h index 36898e9e..3aa7b035 100644 --- a/icuSources/common/unicode/unifunct.h +++ b/icuSources/common/unicode/unifunct.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines Corporation +* Copyright (c) 2002-2005, International Business Machines Corporation * and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -13,6 +13,11 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" +/** + * \file + * \brief C++ API: Unicode Functor + */ + U_NAMESPACE_BEGIN class UnicodeMatcher; diff --git a/icuSources/common/unicode/unimatch.h b/icuSources/common/unicode/unimatch.h index f23bfd01..0dbb14ef 100644 --- a/icuSources/common/unicode/unimatch.h +++ b/icuSources/common/unicode/unimatch.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2001-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description * 07/18/01 aliu Creation. @@ -10,6 +10,12 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Unicode Matcher + */ + + U_NAMESPACE_BEGIN class Replaceable; diff --git a/icuSources/common/unicode/uniset.h b/icuSources/common/unicode/uniset.h index 48464cfd..1e48aa83 100644 --- a/icuSources/common/unicode/uniset.h +++ b/icuSources/common/unicode/uniset.h @@ -1,10 +1,11 @@ /* -********************************************************************** -* Copyright (C) 1999-2004, International Business Machines Corporation and others. All Rights Reserved. -********************************************************************** +*************************************************************************** +* Copyright (C) 1999-2006, International Business Machines Corporation +* and others. All Rights Reserved. +*************************************************************************** * Date Name Description * 10/20/99 alan Creation. -********************************************************************** +*************************************************************************** */ #ifndef UNICODESET_H @@ -14,12 +15,16 @@ #include "unicode/unistr.h" #include "unicode/uset.h" +/** + * \file + * \brief C++ API: Unicode Set + */ + U_NAMESPACE_BEGIN class ParsePosition; class SymbolTable; class UVector; -class CaseEquivClass; class RuleCharacterIterator; /** @@ -108,8 +113,8 @@ class RuleCharacterIterator; * "[:Lu:]" and the Perl-like syntax "\\p{Lu}" are recognized. For a * complete list of supported property patterns, see the User's Guide * for UnicodeSet at - * - * http://oss.software.ibm.com/icu/userguide/unicodeSet.html. + * + * http://icu.sourceforge.net/userguide/unicodeSet.html. * Actual determination of property data is defined by the underlying * Unicode database as implemented by UCharacter. * @@ -276,25 +281,19 @@ class U_COMMON_API UnicodeSet : public UnicodeFilter { public: - /** - * Minimum value that can be stored in a UnicodeSet. - * @stable ICU 2.4 - */ -#ifdef U_CYGWIN - static U_COMMON_API const UChar32 MIN_VALUE; -#else - static const UChar32 MIN_VALUE; -#endif + enum { + /** + * Minimum value that can be stored in a UnicodeSet. + * @stable ICU 2.4 + */ + MIN_VALUE = 0, - /** - * Maximum value that can be stored in a UnicodeSet. - * @stable ICU 2.4 - */ -#ifdef U_CYGWIN - static U_COMMON_API const UChar32 MAX_VALUE; -#else - static const UChar32 MAX_VALUE; -#endif + /** + * Maximum value that can be stored in a UnicodeSet. + * @stable ICU 2.4 + */ + MAX_VALUE = 0x10ffff + }; //---------------------------------------------------------------- // Constructors &c @@ -357,23 +356,13 @@ public: * @param symbols a symbol table mapping variable names to values * and stand-in characters to UnicodeSets; may be NULL * @param status input-output error code - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeSet(const UnicodeString& pattern, ParsePosition& pos, uint32_t options, const SymbolTable* symbols, UErrorCode& status); -#ifdef U_USE_UNICODESET_DEPRECATES - /** - * Obsolete: Constructs a set from the given Unicode character category. - * @param category an integer indicating the character category as - * defined in uchar.h. - * @obsolete ICU 2.6. Use a pattern with the category instead since this API will be removed in that release. - */ - UnicodeSet(int8_t category, UErrorCode& status); -#endif - /** * Constructs a set that is identical to the given UnicodeSet. * @stable ICU 2.0 @@ -514,7 +503,7 @@ public: * @param status returns U_ILLEGAL_ARGUMENT_ERROR if the pattern * contains a syntax error. * @return a reference to this - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeSet& applyPattern(const UnicodeString& pattern, ParsePosition& pos, @@ -575,7 +564,8 @@ public: * correspond to the following sets: * * "ANY" = [\\u0000-\\U0010FFFF], - * "ASCII" = [\\u0000-\\u007F]. + * "ASCII" = [\\u0000-\\u007F], + * "Assigned" = [:^Cn:]. * * @param value a value alias, either short or long. The name is matched * loosely. See PropertyValueAliases.txt for names and a description of @@ -1258,7 +1248,7 @@ private: * * The original design document is out of date, but still useful. * Ignore the property and value names: - * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/unicodeset_properties.html + * http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/unicodeset_properties.html * * Recognized syntax: * @@ -1324,20 +1314,6 @@ private: static const UnicodeSet* getInclusions(int32_t src, UErrorCode &errorCode); friend class UnicodeSetIterator; - - //---------------------------------------------------------------- - // Implementation: closeOver - //---------------------------------------------------------------- - - void caseCloseOne(const UnicodeString& folded); - - void caseCloseOne(const CaseEquivClass& c); - - void caseCloseOne(UChar folded); - - static const CaseEquivClass* getCaseMapOf(const UnicodeString& folded); - - static const CaseEquivClass* getCaseMapOf(UChar folded); }; inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const { diff --git a/icuSources/common/unicode/unistr.h b/icuSources/common/unicode/unistr.h index 3827458b..fe1722bd 100644 --- a/icuSources/common/unicode/unistr.h +++ b/icuSources/common/unicode/unistr.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -21,6 +21,11 @@ #ifndef UNISTR_H #define UNISTR_H +/** + * \file + * \brief C++ API: Unicode String + */ + #include "unicode/rep.h" struct UConverter; // unicode/ucnv.h @@ -37,7 +42,9 @@ class StringThreadTest; #endif #ifndef USTRING_H -/* see ustring.h */ +/** + * \ingroup ustring_ustrlen + */ U_STABLE int32_t U_EXPORT2 u_strlen(const UChar *s); #endif @@ -58,7 +65,7 @@ class BreakIterator; // unicode/brkiter.h * therefore recommended over ones taking a charset name string * (where the empty string "" indicates invariant-character conversion). * - * @draft ICU 3.2 + * @stable ICU 3.2 */ #define US_INV UnicodeString::kInvariant @@ -79,7 +86,7 @@ class BreakIterator; // unicode/brkiter.h * such string variable before it is used. * @stable ICU 2.0 */ -#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && U_CHARSET_FAMILY==U_ASCII_FAMILY +#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) # define UNICODE_STRING(cs, _length) UnicodeString(TRUE, (const UChar *)L ## cs, _length) #elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY # define UNICODE_STRING(cs, _length) UnicodeString(TRUE, (const UChar *)cs, _length) @@ -100,7 +107,7 @@ class BreakIterator; // unicode/brkiter.h * The string parameter must be a C string literal. * @stable ICU 2.0 */ -#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && U_CHARSET_FAMILY==U_ASCII_FAMILY +#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) # define UNICODE_STRING_SIMPLE(cs) UnicodeString(TRUE, (const UChar *)L ## cs, -1) #elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY # define UNICODE_STRING_SIMPLE(cs) UnicodeString(TRUE, (const UChar *)cs, -1) @@ -116,13 +123,12 @@ class BreakIterator; // unicode/brkiter.h * The UnicodeString class is not suitable for subclassing. * *

    For an overview of Unicode strings in C and C++ see the - * User Guide Strings chapter.

    + * User Guide Strings chapter.

    * *

    In ICU, a Unicode string consists of 16-bit Unicode code units. - * A Unicode character may be stored with either - * one code unit — which is the most common case — or with a matched pair of - * special code units ("surrogates"). - * The data type for code units is UChar.
    + * A Unicode character may be stored with either one code unit + * (the most common case) or with a matched pair of special code units + * ("surrogates"). The data type for code units is UChar. * For single-character handling, a Unicode character code point is a value * in the range 0..0x10ffff. ICU uses the UChar32 type for code points.

    * @@ -172,7 +178,7 @@ class BreakIterator; // unicode/brkiter.h * significant performance improvements. * Also, the internal buffer is accessible via special functions. * For details see the - * User Guide Strings chapter.

    + * User Guide Strings chapter.

    * * @see utf.h * @see CharacterIterator @@ -188,12 +194,12 @@ public: * Use the macro US_INV instead of the full qualification for this value. * * @see US_INV - * @draft ICU 3.2 + * @stable ICU 3.2 */ enum EInvariant { /** * @see EInvariant - * @draft ICU 3.2 + * @stable ICU 3.2 */ kInvariant }; @@ -1434,7 +1440,7 @@ public: * @param targetCapacity the length of the target buffer * @param inv Signature-distinguishing paramater, use US_INV. * @return the output string length, not including the terminating NUL - * @draft ICU 3.2 + * @stable ICU 3.2 */ int32_t extract(int32_t start, int32_t startLength, @@ -2813,7 +2819,7 @@ public: * @param inv Signature-distinguishing paramater, use US_INV. * * @see US_INV - * @draft ICU 3.2 + * @stable ICU 3.2 */ UnicodeString(const char *src, int32_t length, enum EInvariant inv); @@ -3192,37 +3198,11 @@ private: * @param s1 The first string to be copied to the new one. * @param s2 The second string to be copied to the new one, after s1. * @return UnicodeString(s1).append(s2) - * @draft ICU 2.8 + * @stable ICU 2.8 */ U_COMMON_API UnicodeString U_EXPORT2 operator+ (const UnicodeString &s1, const UnicodeString &s2); -U_NAMESPACE_END - -// inline implementations -------------------------------------------------- *** - -//======================================== -// Array copying -//======================================== -/** - * Copy an array of UnicodeString OBJECTS (not pointers). - * @internal - */ -inline void -uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString *src, U_NAMESPACE_QUALIFIER UnicodeString *dst, int32_t count) -{ while(count-- > 0) *dst++ = *src++; } - -/** - * Copy an array of UnicodeString OBJECTS (not pointers). - * @internal - */ -inline void -uprv_arrayCopy(const U_NAMESPACE_QUALIFIER UnicodeString *src, int32_t srcStart, - U_NAMESPACE_QUALIFIER UnicodeString *dst, int32_t dstStart, int32_t count) -{ uprv_arrayCopy(src+srcStart, dst+dstStart, count); } - -U_NAMESPACE_BEGIN - //======================================== // Inline members //======================================== @@ -4000,23 +3980,6 @@ UnicodeString::setTo(UChar32 srcChar) return replace(0, fLength, srcChar); } -inline UnicodeString& -UnicodeString::operator+= (UChar ch) -{ return doReplace(fLength, 0, &ch, 0, 1); } - -inline UnicodeString& -UnicodeString::operator+= (UChar32 ch) { - UChar buffer[U16_MAX_LENGTH]; - int32_t _length = 0; - UBool isError = FALSE; - U16_APPEND(buffer, _length, U16_MAX_LENGTH, ch, isError); - return doReplace(fLength, 0, buffer, 0, _length); -} - -inline UnicodeString& -UnicodeString::operator+= (const UnicodeString& srcText) -{ return doReplace(fLength, 0, srcText, 0, srcText.fLength); } - inline UnicodeString& UnicodeString::append(const UnicodeString& srcText, int32_t srcStart, @@ -4051,6 +4014,19 @@ UnicodeString::append(UChar32 srcChar) { return doReplace(fLength, 0, buffer, 0, _length); } +inline UnicodeString& +UnicodeString::operator+= (UChar ch) +{ return doReplace(fLength, 0, &ch, 0, 1); } + +inline UnicodeString& +UnicodeString::operator+= (UChar32 ch) { + return append(ch); +} + +inline UnicodeString& +UnicodeString::operator+= (const UnicodeString& srcText) +{ return doReplace(fLength, 0, srcText, 0, srcText.fLength); } + inline UnicodeString& UnicodeString::insert(int32_t start, const UnicodeString& srcText, @@ -4103,12 +4079,11 @@ inline UnicodeString& UnicodeString::remove(int32_t start, int32_t _length) { - if(start <= 0 && _length == INT32_MAX) { - // remove(guaranteed everything) of a bogus string makes the string empty and non-bogus - return remove(); - } else { + if(start <= 0 && _length == INT32_MAX) { + // remove(guaranteed everything) of a bogus string makes the string empty and non-bogus + return remove(); + } return doReplace(start, _length, NULL, 0, 0); - } } inline UnicodeString& diff --git a/icuSources/common/unicode/unorm.h b/icuSources/common/unicode/unorm.h index 8bdbee7c..31c52245 100644 --- a/icuSources/common/unicode/unorm.h +++ b/icuSources/common/unicode/unorm.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (c) 1996-2004, International Business Machines Corporation +* Copyright (c) 1996-2005, International Business Machines Corporation * and others. All Rights Reserved. ******************************************************************************* * File unorm.h @@ -31,7 +31,7 @@ * decomposed form, allowing for easier sorting and searching of text. * unorm_normalize supports the standard normalization forms described in * - * Unicode Standard Annex #15 — Unicode Normalization Forms. + * Unicode Standard Annex #15: Unicode Normalization Forms. * * Characters with accents or other adornments can be encoded in * several different ways in Unicode. For example, take the character A-acute. @@ -106,7 +106,7 @@ * unorm_normalize(UNORM_FCD) may be implemented with UNORM_NFD. * * For more details on FCD see the collation design document: - * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm + * http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm * * ICU collation performs either NFD or FCD normalization automatically if normalization * is turned on for the collator object. diff --git a/icuSources/common/unicode/uobject.h b/icuSources/common/unicode/uobject.h index 49f6ed0c..87735994 100644 --- a/icuSources/common/unicode/uobject.h +++ b/icuSources/common/unicode/uobject.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -49,6 +49,18 @@ U_NAMESPACE_BEGIN #define U_HAVE_PLACEMENT_NEW 1 #endif + +#ifndef U_HIDE_DRAFT_API +/** U_HAVE_DEBUG_LOCATION_NEW - Define this to define the MFC debug + * version of the operator new. + * + * @draft ICU 3.4 + */ +#ifndef U_HAVE_DEBUG_LOCATION_NEW +#define U_HAVE_DEBUG_LOCATION_NEW 0 +#endif +#endif /*U_HIDE_DRAFT_API*/ + /** * UMemory is the common ICU base class. * All other ICU C++ classes are derived from UMemory (starting with ICU 2.4). @@ -117,6 +129,24 @@ public: */ static inline void U_EXPORT2 operator delete(void *, void *) {} #endif /* U_HAVE_PLACEMENT_NEW */ +#if U_HAVE_DEBUG_LOCATION_NEW + /** + * This method overrides the MFC debug version of the operator new + * + * @param size The requested memory size + * @param file The file where the allocation was requested + * @param line The line where the allocation was requested + */ + static void * U_EXPORT2 operator new(size_t size, const char* file, int line); + /** + * This method provides a matching delete for the MFC debug new + * + * @param p The pointer to the allocated memory + * @param file The file where the allocation was requested + * @param line The line where the allocation was requested + */ + static void U_EXPORT2 operator delete(void* p, const char* file, int line); +#endif /* U_HAVE_DEBUG_LOCATION_NEW */ #endif /* U_OVERRIDE_CXX_ALLOCATION */ /* @@ -237,7 +267,7 @@ protected: */ #define UOBJECT_DEFINE_RTTI_IMPLEMENTATION(myClass) \ UClassID U_EXPORT2 myClass::getStaticClassID() { \ - static const char classID = 0; \ + static char classID = 0; \ return (UClassID)&classID; \ } \ UClassID myClass::getDynamicClassID() const \ @@ -254,7 +284,7 @@ protected: */ #define UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(myClass) \ UClassID U_EXPORT2 myClass::getStaticClassID() { \ - static const char classID = 0; \ + static char classID = 0; \ return (UClassID)&classID; \ } diff --git a/icuSources/common/unicode/uobslete.h b/icuSources/common/unicode/uobslete.h index 763da02e..e4f160f4 100644 --- a/icuSources/common/unicode/uobslete.h +++ b/icuSources/common/unicode/uobslete.h @@ -1,15 +1,15 @@ /* ******************************************************************************* -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * -* file name: uobslete.h +* file name: * encoding: US-ASCII * tab size: 8 (not used) * indentation:4 * -* Created by: gendraft.pl, a perl script written by Ram Viswanadha +* Created by: genheaders.pl, a perl script written by Ram Viswanadha * * Contains data for commenting out APIs. * Gets included by umachine.h @@ -23,6 +23,9 @@ #ifdef U_HIDE_OBSOLETE_API +# if U_DISABLE_RENAMING +# else +# endif /* U_DISABLE_RENAMING */ #endif /* U_HIDE_OBSOLETE_API */ #endif /* UOBSLETE_H */ diff --git a/icuSources/common/unicode/urbtok.h b/icuSources/common/unicode/urbtok.h new file mode 100644 index 00000000..5d70a07e --- /dev/null +++ b/icuSources/common/unicode/urbtok.h @@ -0,0 +1,106 @@ +/* +****************************************************************************** +* Copyright (C) 2006, Apple Computer, Inc. +* All Rights Reserved. +****************************************************************************** +*/ + +#ifndef URBTOK_H +#define URBTOK_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/utext.h" +#include "unicode/ubrk.h" +#include "unicode/parseerr.h" + + +typedef struct RuleBasedTokenRange { + signed long location; + signed long length; +} RuleBasedTokenRange; + +/** + * Open a new UBreakIterator for tokenizing text using specified breaking rules. + * The rule syntax is ... (TBD) + * @param rules A set of rules specifying the text breaking conventions. + * @param rulesLength The number of characters in rules, or -1 if null-terminated. + * @param parseErr Receives position and context information for any syntax errors + * detected while parsing the rules. + * @param status A UErrorCode to receive any errors. + * @return A UBreakIterator for the specified rules. + * @see ubrk_open + * @internal + */ +U_INTERNAL UBreakIterator* U_EXPORT2 +urbtok_openRules(const UChar *rules, + int32_t rulesLength, + UParseError *parseErr, + UErrorCode *status); + +/** + * Open a new UBreakIterator for tokenizing text using specified breaking rules. + * @param rules A set of rules specifying the text breaking conventions. The binary rules + * must be at least 32-bit aligned. + * @param status A UErrorCode to receive any errors. + * @return A UBreakIterator for the specified rules. + * @see ubrk_open + * @internal + */ +U_INTERNAL UBreakIterator* U_EXPORT2 +urbtok_openBinaryRules(const uint8_t *rules, + UErrorCode *status); + +/** + * Get the (native-endian) binary break rules for this tokenizer. + * @param bi The tokenizer to use. + * @param buffer The output buffer for the rules. You can pass 0 to get the required size. + * @param buffSize The size of the output buffer. + * @param status A UErrorCode to receive any errors. + * @return The actual size of the binary rules, whether they fit the buffer or not. + * @internal + */ +U_INTERNAL uint32_t U_EXPORT2 +urbtok_getBinaryRules(UBreakIterator *bi, + uint8_t *buffer, + uint32_t buffSize, + UErrorCode *status); + +/** + * Tokenize text using a rule-based tokenizer. + * @param bi The tokenizer to use. + * @param maxTokens The maximum number of tokens to return. + * @param outTokens An array of RuleBasedTokenRange to fill in with the tokens. + * @param outTokenFlags An (optional) array of uint32_t to fill in with token flags. + * @return The number of tokens returned, 0 if done. + * @internal + */ +U_INTERNAL int32_t U_EXPORT2 +urbtok_tokenize(UBreakIterator *bi, + int32_t maxTokens, + RuleBasedTokenRange *outTokens, + unsigned long *outTokenFlags); + +/** + * Swap the endianness of a set of binary break rules. + * @param rules A set of rules which need swapping. + * @param buffer The output buffer for the swapped rules, which must be the same + * size as the input rules buffer. + * @param inIsBigEndian UBool indicating whether the input is big-endian + * @param outIsBigEndian UBool indicating whether the output should be big-endian + * @param status A UErrorCode to receive any errors. + * @internal + */ +U_INTERNAL void U_EXPORT2 +urbtok_swapBinaryRules(const uint8_t *rules, + uint8_t *buffer, + UBool inIsBigEndian, + UBool outIsBigEndian, + UErrorCode *status); + + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ + +#endif diff --git a/icuSources/common/unicode/urename.h b/icuSources/common/unicode/urename.h index 55625921..8c00aa5d 100644 --- a/icuSources/common/unicode/urename.h +++ b/icuSources/common/unicode/urename.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * @@ -29,1436 +29,1573 @@ /* C exports renaming data */ -#define T_CString_int64ToString T_CString_int64ToString_3_2 -#define T_CString_integerToString T_CString_integerToString_3_2 -#define T_CString_stricmp T_CString_stricmp_3_2 -#define T_CString_stringToInteger T_CString_stringToInteger_3_2 -#define T_CString_strnicmp T_CString_strnicmp_3_2 -#define T_CString_toLowerCase T_CString_toLowerCase_3_2 -#define T_CString_toUpperCase T_CString_toUpperCase_3_2 -#define T_FileStream_close T_FileStream_close_3_2 -#define T_FileStream_eof T_FileStream_eof_3_2 -#define T_FileStream_error T_FileStream_error_3_2 -#define T_FileStream_file_exists T_FileStream_file_exists_3_2 -#define T_FileStream_getc T_FileStream_getc_3_2 -#define T_FileStream_open T_FileStream_open_3_2 -#define T_FileStream_peek T_FileStream_peek_3_2 -#define T_FileStream_putc T_FileStream_putc_3_2 -#define T_FileStream_read T_FileStream_read_3_2 -#define T_FileStream_readLine T_FileStream_readLine_3_2 -#define T_FileStream_remove T_FileStream_remove_3_2 -#define T_FileStream_rewind T_FileStream_rewind_3_2 -#define T_FileStream_size T_FileStream_size_3_2 -#define T_FileStream_stderr T_FileStream_stderr_3_2 -#define T_FileStream_stdin T_FileStream_stdin_3_2 -#define T_FileStream_stdout T_FileStream_stdout_3_2 -#define T_FileStream_ungetc T_FileStream_ungetc_3_2 -#define T_FileStream_write T_FileStream_write_3_2 -#define T_FileStream_writeLine T_FileStream_writeLine_3_2 -#define UCNV_FROM_U_CALLBACK_ESCAPE UCNV_FROM_U_CALLBACK_ESCAPE_3_2 -#define UCNV_FROM_U_CALLBACK_SKIP UCNV_FROM_U_CALLBACK_SKIP_3_2 -#define UCNV_FROM_U_CALLBACK_STOP UCNV_FROM_U_CALLBACK_STOP_3_2 -#define UCNV_FROM_U_CALLBACK_SUBSTITUTE UCNV_FROM_U_CALLBACK_SUBSTITUTE_3_2 -#define UCNV_TO_U_CALLBACK_ESCAPE UCNV_TO_U_CALLBACK_ESCAPE_3_2 -#define UCNV_TO_U_CALLBACK_SKIP UCNV_TO_U_CALLBACK_SKIP_3_2 -#define UCNV_TO_U_CALLBACK_STOP UCNV_TO_U_CALLBACK_STOP_3_2 -#define UCNV_TO_U_CALLBACK_SUBSTITUTE UCNV_TO_U_CALLBACK_SUBSTITUTE_3_2 -#define UDataMemory_createNewInstance UDataMemory_createNewInstance_3_2 -#define UDataMemory_init UDataMemory_init_3_2 -#define UDataMemory_isLoaded UDataMemory_isLoaded_3_2 -#define UDataMemory_normalizeDataPointer UDataMemory_normalizeDataPointer_3_2 -#define UDataMemory_setData UDataMemory_setData_3_2 -#define UDatamemory_assign UDatamemory_assign_3_2 -#define _ASCIIData _ASCIIData_3_2 -#define _Bocu1Data _Bocu1Data_3_2 -#define _CESU8Data _CESU8Data_3_2 -#define _HZData _HZData_3_2 -#define _IMAPData _IMAPData_3_2 -#define _ISCIIData _ISCIIData_3_2 -#define _ISO2022Data _ISO2022Data_3_2 -#define _LMBCSData1 _LMBCSData1_3_2 -#define _LMBCSData11 _LMBCSData11_3_2 -#define _LMBCSData16 _LMBCSData16_3_2 -#define _LMBCSData17 _LMBCSData17_3_2 -#define _LMBCSData18 _LMBCSData18_3_2 -#define _LMBCSData19 _LMBCSData19_3_2 -#define _LMBCSData2 _LMBCSData2_3_2 -#define _LMBCSData3 _LMBCSData3_3_2 -#define _LMBCSData4 _LMBCSData4_3_2 -#define _LMBCSData5 _LMBCSData5_3_2 -#define _LMBCSData6 _LMBCSData6_3_2 -#define _LMBCSData8 _LMBCSData8_3_2 -#define _Latin1Data _Latin1Data_3_2 -#define _MBCSData _MBCSData_3_2 -#define _SCSUData _SCSUData_3_2 -#define _UTF16BEData _UTF16BEData_3_2 -#define _UTF16Data _UTF16Data_3_2 -#define _UTF16LEData _UTF16LEData_3_2 -#define _UTF32BEData _UTF32BEData_3_2 -#define _UTF32Data _UTF32Data_3_2 -#define _UTF32LEData _UTF32LEData_3_2 -#define _UTF7Data _UTF7Data_3_2 -#define _UTF8Data _UTF8Data_3_2 -#define cmemory_cleanup cmemory_cleanup_3_2 -#define cmemory_inUse cmemory_inUse_3_2 -#define locale_getKeywords locale_getKeywords_3_2 -#define locale_get_default locale_get_default_3_2 -#define locale_set_default locale_set_default_3_2 -#define res_countArrayItems res_countArrayItems_3_2 -#define res_findResource res_findResource_3_2 -#define res_getAlias res_getAlias_3_2 -#define res_getArrayItem res_getArrayItem_3_2 -#define res_getBinary res_getBinary_3_2 -#define res_getIntVector res_getIntVector_3_2 -#define res_getResource res_getResource_3_2 -#define res_getString res_getString_3_2 -#define res_getTableItemByIndex res_getTableItemByIndex_3_2 -#define res_getTableItemByKey res_getTableItemByKey_3_2 -#define res_load res_load_3_2 -#define res_unload res_unload_3_2 -#define transliterator_cleanup transliterator_cleanup_3_2 -#define u_UCharsToChars u_UCharsToChars_3_2 -#define u_austrcpy u_austrcpy_3_2 -#define u_austrncpy u_austrncpy_3_2 -#define u_catclose u_catclose_3_2 -#define u_catgets u_catgets_3_2 -#define u_catopen u_catopen_3_2 -#define u_charAge u_charAge_3_2 -#define u_charDigitValue u_charDigitValue_3_2 -#define u_charDirection u_charDirection_3_2 -#define u_charFromName u_charFromName_3_2 -#define u_charMirror u_charMirror_3_2 -#define u_charName u_charName_3_2 -#define u_charType u_charType_3_2 -#define u_charsToUChars u_charsToUChars_3_2 -#define u_cleanup u_cleanup_3_2 -#define u_countChar32 u_countChar32_3_2 -#define u_digit u_digit_3_2 -#define u_enumCharNames u_enumCharNames_3_2 -#define u_enumCharTypes u_enumCharTypes_3_2 -#define u_errorName u_errorName_3_2 -#define u_fclose u_fclose_3_2 -#define u_feof u_feof_3_2 -#define u_fflush u_fflush_3_2 -#define u_fgetConverter u_fgetConverter_3_2 -#define u_fgetc u_fgetc_3_2 -#define u_fgetcodepage u_fgetcodepage_3_2 -#define u_fgetcx u_fgetcx_3_2 -#define u_fgetfile u_fgetfile_3_2 -#define u_fgetlocale u_fgetlocale_3_2 -#define u_fgets u_fgets_3_2 -#define u_file_read u_file_read_3_2 -#define u_file_write u_file_write_3_2 -#define u_file_write_flush u_file_write_flush_3_2 -#define u_finit u_finit_3_2 -#define u_foldCase u_foldCase_3_2 -#define u_fopen u_fopen_3_2 -#define u_forDigit u_forDigit_3_2 -#define u_formatMessage u_formatMessage_3_2 -#define u_formatMessageWithError u_formatMessageWithError_3_2 -#define u_fprintf u_fprintf_3_2 -#define u_fprintf_u u_fprintf_u_3_2 -#define u_fputc u_fputc_3_2 -#define u_fputs u_fputs_3_2 -#define u_frewind u_frewind_3_2 -#define u_fscanf u_fscanf_3_2 -#define u_fscanf_u u_fscanf_u_3_2 -#define u_fsetcodepage u_fsetcodepage_3_2 -#define u_fsetlocale u_fsetlocale_3_2 -#define u_fsettransliterator u_fsettransliterator_3_2 -#define u_fstropen u_fstropen_3_2 -#define u_fungetc u_fungetc_3_2 -#define u_getCombiningClass u_getCombiningClass_3_2 -#define u_getDataDirectory u_getDataDirectory_3_2 -#define u_getDefaultConverter u_getDefaultConverter_3_2 -#define u_getFC_NFKC_Closure u_getFC_NFKC_Closure_3_2 -#define u_getISOComment u_getISOComment_3_2 -#define u_getIntPropertyMaxValue u_getIntPropertyMaxValue_3_2 -#define u_getIntPropertyMinValue u_getIntPropertyMinValue_3_2 -#define u_getIntPropertyValue u_getIntPropertyValue_3_2 -#define u_getNumericValue u_getNumericValue_3_2 -#define u_getPropertyEnum u_getPropertyEnum_3_2 -#define u_getPropertyName u_getPropertyName_3_2 -#define u_getPropertyValueEnum u_getPropertyValueEnum_3_2 -#define u_getPropertyValueName u_getPropertyValueName_3_2 -#define u_getUnicodeProperties u_getUnicodeProperties_3_2 -#define u_getUnicodeVersion u_getUnicodeVersion_3_2 -#define u_getVersion u_getVersion_3_2 -#define u_growBufferFromStatic u_growBufferFromStatic_3_2 -#define u_hasBinaryProperty u_hasBinaryProperty_3_2 -#define u_init u_init_3_2 -#define u_isIDIgnorable u_isIDIgnorable_3_2 -#define u_isIDPart u_isIDPart_3_2 -#define u_isIDStart u_isIDStart_3_2 -#define u_isISOControl u_isISOControl_3_2 -#define u_isJavaIDPart u_isJavaIDPart_3_2 -#define u_isJavaIDStart u_isJavaIDStart_3_2 -#define u_isJavaSpaceChar u_isJavaSpaceChar_3_2 -#define u_isMirrored u_isMirrored_3_2 -#define u_isUAlphabetic u_isUAlphabetic_3_2 -#define u_isULowercase u_isULowercase_3_2 -#define u_isUUppercase u_isUUppercase_3_2 -#define u_isUWhiteSpace u_isUWhiteSpace_3_2 -#define u_isWhitespace u_isWhitespace_3_2 -#define u_isalnum u_isalnum_3_2 -#define u_isalpha u_isalpha_3_2 -#define u_isbase u_isbase_3_2 -#define u_isblank u_isblank_3_2 -#define u_iscntrl u_iscntrl_3_2 -#define u_isdefined u_isdefined_3_2 -#define u_isdigit u_isdigit_3_2 -#define u_isgraph u_isgraph_3_2 -#define u_islower u_islower_3_2 -#define u_isprint u_isprint_3_2 -#define u_ispunct u_ispunct_3_2 -#define u_isspace u_isspace_3_2 -#define u_istitle u_istitle_3_2 -#define u_isupper u_isupper_3_2 -#define u_isxdigit u_isxdigit_3_2 -#define u_lengthOfIdenticalLevelRun u_lengthOfIdenticalLevelRun_3_2 -#define u_locbund_close u_locbund_close_3_2 -#define u_locbund_getNumberFormat u_locbund_getNumberFormat_3_2 -#define u_locbund_init u_locbund_init_3_2 -#define u_memcasecmp u_memcasecmp_3_2 -#define u_memchr u_memchr_3_2 -#define u_memchr32 u_memchr32_3_2 -#define u_memcmp u_memcmp_3_2 -#define u_memcmpCodePointOrder u_memcmpCodePointOrder_3_2 -#define u_memcpy u_memcpy_3_2 -#define u_memmove u_memmove_3_2 -#define u_memrchr u_memrchr_3_2 -#define u_memrchr32 u_memrchr32_3_2 -#define u_memset u_memset_3_2 -#define u_parseMessage u_parseMessage_3_2 -#define u_parseMessageWithError u_parseMessageWithError_3_2 -#define u_printf_parse u_printf_parse_3_2 -#define u_releaseDefaultConverter u_releaseDefaultConverter_3_2 -#define u_scanf_parse u_scanf_parse_3_2 -#define u_setAtomicIncDecFunctions u_setAtomicIncDecFunctions_3_2 -#define u_setDataDirectory u_setDataDirectory_3_2 -#define u_setMemoryFunctions u_setMemoryFunctions_3_2 -#define u_setMutexFunctions u_setMutexFunctions_3_2 -#define u_shapeArabic u_shapeArabic_3_2 -#define u_snprintf u_snprintf_3_2 -#define u_snprintf_u u_snprintf_u_3_2 -#define u_sprintf u_sprintf_3_2 -#define u_sprintf_u u_sprintf_u_3_2 -#define u_sscanf u_sscanf_3_2 -#define u_sscanf_u u_sscanf_u_3_2 -#define u_strCaseCompare u_strCaseCompare_3_2 -#define u_strCompare u_strCompare_3_2 -#define u_strCompareIter u_strCompareIter_3_2 -#define u_strFindFirst u_strFindFirst_3_2 -#define u_strFindLast u_strFindLast_3_2 -#define u_strFoldCase u_strFoldCase_3_2 -#define u_strFromPunycode u_strFromPunycode_3_2 -#define u_strFromUTF32 u_strFromUTF32_3_2 -#define u_strFromUTF8 u_strFromUTF8_3_2 -#define u_strFromWCS u_strFromWCS_3_2 -#define u_strHasMoreChar32Than u_strHasMoreChar32Than_3_2 -#define u_strToLower u_strToLower_3_2 -#define u_strToPunycode u_strToPunycode_3_2 -#define u_strToTitle u_strToTitle_3_2 -#define u_strToUTF32 u_strToUTF32_3_2 -#define u_strToUTF8 u_strToUTF8_3_2 -#define u_strToUpper u_strToUpper_3_2 -#define u_strToWCS u_strToWCS_3_2 -#define u_strcasecmp u_strcasecmp_3_2 -#define u_strcat u_strcat_3_2 -#define u_strchr u_strchr_3_2 -#define u_strchr32 u_strchr32_3_2 -#define u_strcmp u_strcmp_3_2 -#define u_strcmpCodePointOrder u_strcmpCodePointOrder_3_2 -#define u_strcmpFold u_strcmpFold_3_2 -#define u_strcpy u_strcpy_3_2 -#define u_strcspn u_strcspn_3_2 -#define u_strlen u_strlen_3_2 -#define u_strncasecmp u_strncasecmp_3_2 -#define u_strncat u_strncat_3_2 -#define u_strncmp u_strncmp_3_2 -#define u_strncmpCodePointOrder u_strncmpCodePointOrder_3_2 -#define u_strncpy u_strncpy_3_2 -#define u_strpbrk u_strpbrk_3_2 -#define u_strrchr u_strrchr_3_2 -#define u_strrchr32 u_strrchr32_3_2 -#define u_strrstr u_strrstr_3_2 -#define u_strspn u_strspn_3_2 -#define u_strstr u_strstr_3_2 -#define u_strtok_r u_strtok_r_3_2 -#define u_terminateChars u_terminateChars_3_2 -#define u_terminateUChar32s u_terminateUChar32s_3_2 -#define u_terminateUChars u_terminateUChars_3_2 -#define u_terminateWChars u_terminateWChars_3_2 -#define u_tolower u_tolower_3_2 -#define u_totitle u_totitle_3_2 -#define u_toupper u_toupper_3_2 -#define u_uastrcpy u_uastrcpy_3_2 -#define u_uastrncpy u_uastrncpy_3_2 -#define u_unescape u_unescape_3_2 -#define u_unescapeAt u_unescapeAt_3_2 -#define u_versionFromString u_versionFromString_3_2 -#define u_versionToString u_versionToString_3_2 -#define u_vformatMessage u_vformatMessage_3_2 -#define u_vformatMessageWithError u_vformatMessageWithError_3_2 -#define u_vfprintf u_vfprintf_3_2 -#define u_vfprintf_u u_vfprintf_u_3_2 -#define u_vfscanf u_vfscanf_3_2 -#define u_vfscanf_u u_vfscanf_u_3_2 -#define u_vparseMessage u_vparseMessage_3_2 -#define u_vparseMessageWithError u_vparseMessageWithError_3_2 -#define u_vsnprintf u_vsnprintf_3_2 -#define u_vsnprintf_u u_vsnprintf_u_3_2 -#define u_vsprintf u_vsprintf_3_2 -#define u_vsprintf_u u_vsprintf_u_3_2 -#define u_vsscanf u_vsscanf_3_2 -#define u_vsscanf_u u_vsscanf_u_3_2 -#define u_writeDiff u_writeDiff_3_2 -#define u_writeIdenticalLevelRun u_writeIdenticalLevelRun_3_2 -#define u_writeIdenticalLevelRunTwoChars u_writeIdenticalLevelRunTwoChars_3_2 -#define ubidi_close ubidi_close_3_2 -#define ubidi_countRuns ubidi_countRuns_3_2 -#define ubidi_getDirection ubidi_getDirection_3_2 -#define ubidi_getLength ubidi_getLength_3_2 -#define ubidi_getLevelAt ubidi_getLevelAt_3_2 -#define ubidi_getLevels ubidi_getLevels_3_2 -#define ubidi_getLogicalIndex ubidi_getLogicalIndex_3_2 -#define ubidi_getLogicalMap ubidi_getLogicalMap_3_2 -#define ubidi_getLogicalRun ubidi_getLogicalRun_3_2 -#define ubidi_getMemory ubidi_getMemory_3_2 -#define ubidi_getParaLevel ubidi_getParaLevel_3_2 -#define ubidi_getRuns ubidi_getRuns_3_2 -#define ubidi_getText ubidi_getText_3_2 -#define ubidi_getVisualIndex ubidi_getVisualIndex_3_2 -#define ubidi_getVisualMap ubidi_getVisualMap_3_2 -#define ubidi_getVisualRun ubidi_getVisualRun_3_2 -#define ubidi_invertMap ubidi_invertMap_3_2 -#define ubidi_isInverse ubidi_isInverse_3_2 -#define ubidi_open ubidi_open_3_2 -#define ubidi_openSized ubidi_openSized_3_2 -#define ubidi_reorderLogical ubidi_reorderLogical_3_2 -#define ubidi_reorderVisual ubidi_reorderVisual_3_2 -#define ubidi_setInverse ubidi_setInverse_3_2 -#define ubidi_setLine ubidi_setLine_3_2 -#define ubidi_setPara ubidi_setPara_3_2 -#define ubidi_writeReordered ubidi_writeReordered_3_2 -#define ubidi_writeReverse ubidi_writeReverse_3_2 -#define ublock_getCode ublock_getCode_3_2 -#define ubrk_close ubrk_close_3_2 -#define ubrk_countAvailable ubrk_countAvailable_3_2 -#define ubrk_current ubrk_current_3_2 -#define ubrk_first ubrk_first_3_2 -#define ubrk_following ubrk_following_3_2 -#define ubrk_getAvailable ubrk_getAvailable_3_2 -#define ubrk_getLocaleByType ubrk_getLocaleByType_3_2 -#define ubrk_getRuleStatus ubrk_getRuleStatus_3_2 -#define ubrk_getRuleStatusVec ubrk_getRuleStatusVec_3_2 -#define ubrk_isBoundary ubrk_isBoundary_3_2 -#define ubrk_last ubrk_last_3_2 -#define ubrk_next ubrk_next_3_2 -#define ubrk_open ubrk_open_3_2 -#define ubrk_openRules ubrk_openRules_3_2 -#define ubrk_preceding ubrk_preceding_3_2 -#define ubrk_previous ubrk_previous_3_2 -#define ubrk_safeClone ubrk_safeClone_3_2 -#define ubrk_setText ubrk_setText_3_2 -#define ubrk_swap ubrk_swap_3_2 -#define ucal_add ucal_add_3_2 -#define ucal_clear ucal_clear_3_2 -#define ucal_clearField ucal_clearField_3_2 -#define ucal_close ucal_close_3_2 -#define ucal_countAvailable ucal_countAvailable_3_2 -#define ucal_equivalentTo ucal_equivalentTo_3_2 -#define ucal_get ucal_get_3_2 -#define ucal_getAttribute ucal_getAttribute_3_2 -#define ucal_getAvailable ucal_getAvailable_3_2 -#define ucal_getDSTSavings ucal_getDSTSavings_3_2 -#define ucal_getDefaultTimeZone ucal_getDefaultTimeZone_3_2 -#define ucal_getLimit ucal_getLimit_3_2 -#define ucal_getLocaleByType ucal_getLocaleByType_3_2 -#define ucal_getMillis ucal_getMillis_3_2 -#define ucal_getNow ucal_getNow_3_2 -#define ucal_getTimeZoneDisplayName ucal_getTimeZoneDisplayName_3_2 -#define ucal_inDaylightTime ucal_inDaylightTime_3_2 -#define ucal_isSet ucal_isSet_3_2 -#define ucal_open ucal_open_3_2 -#define ucal_openCountryTimeZones ucal_openCountryTimeZones_3_2 -#define ucal_openTimeZones ucal_openTimeZones_3_2 -#define ucal_roll ucal_roll_3_2 -#define ucal_set ucal_set_3_2 -#define ucal_setAttribute ucal_setAttribute_3_2 -#define ucal_setDate ucal_setDate_3_2 -#define ucal_setDateTime ucal_setDateTime_3_2 -#define ucal_setDefaultTimeZone ucal_setDefaultTimeZone_3_2 -#define ucal_setMillis ucal_setMillis_3_2 -#define ucal_setTimeZone ucal_setTimeZone_3_2 -#define ucase_addPropertyStarts ucase_addPropertyStarts_3_2 -#define ucase_close ucase_close_3_2 -#define ucase_fold ucase_fold_3_2 -#define ucase_getSingleton ucase_getSingleton_3_2 -#define ucase_getType ucase_getType_3_2 -#define ucase_getTypeOrIgnorable ucase_getTypeOrIgnorable_3_2 -#define ucase_isCaseSensitive ucase_isCaseSensitive_3_2 -#define ucase_isSoftDotted ucase_isSoftDotted_3_2 -#define ucase_open ucase_open_3_2 -#define ucase_openBinary ucase_openBinary_3_2 -#define ucase_swap ucase_swap_3_2 -#define ucase_toFullFolding ucase_toFullFolding_3_2 -#define ucase_toFullLower ucase_toFullLower_3_2 -#define ucase_toFullTitle ucase_toFullTitle_3_2 -#define ucase_toFullUpper ucase_toFullUpper_3_2 -#define ucase_tolower ucase_tolower_3_2 -#define ucase_totitle ucase_totitle_3_2 -#define ucase_toupper ucase_toupper_3_2 -#define uchar_addPropertyStarts uchar_addPropertyStarts_3_2 -#define uchar_getHST uchar_getHST_3_2 -#define uchar_swapNames uchar_swapNames_3_2 -#define ucln_common_lib_cleanup ucln_common_lib_cleanup_3_2 -#define ucln_common_registerCleanup ucln_common_registerCleanup_3_2 -#define ucln_i18n_registerCleanup ucln_i18n_registerCleanup_3_2 -#define ucln_registerCleanup ucln_registerCleanup_3_2 -#define ucmp8_close ucmp8_close_3_2 -#define ucmp8_compact ucmp8_compact_3_2 -#define ucmp8_expand ucmp8_expand_3_2 -#define ucmp8_flattenMem ucmp8_flattenMem_3_2 -#define ucmp8_getArray ucmp8_getArray_3_2 -#define ucmp8_getCount ucmp8_getCount_3_2 -#define ucmp8_getIndex ucmp8_getIndex_3_2 -#define ucmp8_getkBlockCount ucmp8_getkBlockCount_3_2 -#define ucmp8_getkUnicodeCount ucmp8_getkUnicodeCount_3_2 -#define ucmp8_init ucmp8_init_3_2 -#define ucmp8_initAdopt ucmp8_initAdopt_3_2 -#define ucmp8_initAlias ucmp8_initAlias_3_2 -#define ucmp8_initBogus ucmp8_initBogus_3_2 -#define ucmp8_initFromData ucmp8_initFromData_3_2 -#define ucmp8_isBogus ucmp8_isBogus_3_2 -#define ucmp8_open ucmp8_open_3_2 -#define ucmp8_openAdopt ucmp8_openAdopt_3_2 -#define ucmp8_openAlias ucmp8_openAlias_3_2 -#define ucmp8_set ucmp8_set_3_2 -#define ucmp8_setRange ucmp8_setRange_3_2 -#define ucnv_MBCSFromUChar32 ucnv_MBCSFromUChar32_3_2 -#define ucnv_MBCSFromUnicodeWithOffsets ucnv_MBCSFromUnicodeWithOffsets_3_2 -#define ucnv_MBCSGetType ucnv_MBCSGetType_3_2 -#define ucnv_MBCSGetUnicodeSetForBytes ucnv_MBCSGetUnicodeSetForBytes_3_2 -#define ucnv_MBCSGetUnicodeSetForUnicode ucnv_MBCSGetUnicodeSetForUnicode_3_2 -#define ucnv_MBCSIsLeadByte ucnv_MBCSIsLeadByte_3_2 -#define ucnv_MBCSSimpleGetNextUChar ucnv_MBCSSimpleGetNextUChar_3_2 -#define ucnv_MBCSToUnicodeWithOffsets ucnv_MBCSToUnicodeWithOffsets_3_2 -#define ucnv_cbFromUWriteBytes ucnv_cbFromUWriteBytes_3_2 -#define ucnv_cbFromUWriteSub ucnv_cbFromUWriteSub_3_2 -#define ucnv_cbFromUWriteUChars ucnv_cbFromUWriteUChars_3_2 -#define ucnv_cbToUWriteSub ucnv_cbToUWriteSub_3_2 -#define ucnv_cbToUWriteUChars ucnv_cbToUWriteUChars_3_2 -#define ucnv_close ucnv_close_3_2 -#define ucnv_compareNames ucnv_compareNames_3_2 -#define ucnv_convert ucnv_convert_3_2 -#define ucnv_convertEx ucnv_convertEx_3_2 -#define ucnv_copyPlatformString ucnv_copyPlatformString_3_2 -#define ucnv_countAliases ucnv_countAliases_3_2 -#define ucnv_countAvailable ucnv_countAvailable_3_2 -#define ucnv_countStandards ucnv_countStandards_3_2 -#define ucnv_createAlgorithmicConverter ucnv_createAlgorithmicConverter_3_2 -#define ucnv_createConverter ucnv_createConverter_3_2 -#define ucnv_createConverterFromPackage ucnv_createConverterFromPackage_3_2 -#define ucnv_createConverterFromSharedData ucnv_createConverterFromSharedData_3_2 -#define ucnv_detectUnicodeSignature ucnv_detectUnicodeSignature_3_2 -#define ucnv_extContinueMatchFromU ucnv_extContinueMatchFromU_3_2 -#define ucnv_extContinueMatchToU ucnv_extContinueMatchToU_3_2 -#define ucnv_extGetUnicodeSet ucnv_extGetUnicodeSet_3_2 -#define ucnv_extInitialMatchFromU ucnv_extInitialMatchFromU_3_2 -#define ucnv_extInitialMatchToU ucnv_extInitialMatchToU_3_2 -#define ucnv_extSimpleMatchFromU ucnv_extSimpleMatchFromU_3_2 -#define ucnv_extSimpleMatchToU ucnv_extSimpleMatchToU_3_2 -#define ucnv_fixFileSeparator ucnv_fixFileSeparator_3_2 -#define ucnv_flushCache ucnv_flushCache_3_2 -#define ucnv_fromAlgorithmic ucnv_fromAlgorithmic_3_2 -#define ucnv_fromUChars ucnv_fromUChars_3_2 -#define ucnv_fromUWriteBytes ucnv_fromUWriteBytes_3_2 -#define ucnv_fromUnicode ucnv_fromUnicode_3_2 -#define ucnv_fromUnicode_UTF8 ucnv_fromUnicode_UTF8_3_2 -#define ucnv_fromUnicode_UTF8_OFFSETS_LOGIC ucnv_fromUnicode_UTF8_OFFSETS_LOGIC_3_2 -#define ucnv_getAlias ucnv_getAlias_3_2 -#define ucnv_getAliases ucnv_getAliases_3_2 -#define ucnv_getAvailableName ucnv_getAvailableName_3_2 -#define ucnv_getCCSID ucnv_getCCSID_3_2 -#define ucnv_getCanonicalName ucnv_getCanonicalName_3_2 -#define ucnv_getCompleteUnicodeSet ucnv_getCompleteUnicodeSet_3_2 -#define ucnv_getDefaultName ucnv_getDefaultName_3_2 -#define ucnv_getDisplayName ucnv_getDisplayName_3_2 -#define ucnv_getFromUCallBack ucnv_getFromUCallBack_3_2 -#define ucnv_getInvalidChars ucnv_getInvalidChars_3_2 -#define ucnv_getInvalidUChars ucnv_getInvalidUChars_3_2 -#define ucnv_getMaxCharSize ucnv_getMaxCharSize_3_2 -#define ucnv_getMinCharSize ucnv_getMinCharSize_3_2 -#define ucnv_getName ucnv_getName_3_2 -#define ucnv_getNextUChar ucnv_getNextUChar_3_2 -#define ucnv_getNonSurrogateUnicodeSet ucnv_getNonSurrogateUnicodeSet_3_2 -#define ucnv_getPlatform ucnv_getPlatform_3_2 -#define ucnv_getStandard ucnv_getStandard_3_2 -#define ucnv_getStandardName ucnv_getStandardName_3_2 -#define ucnv_getStarters ucnv_getStarters_3_2 -#define ucnv_getSubstChars ucnv_getSubstChars_3_2 -#define ucnv_getToUCallBack ucnv_getToUCallBack_3_2 -#define ucnv_getType ucnv_getType_3_2 -#define ucnv_getUnicodeSet ucnv_getUnicodeSet_3_2 -#define ucnv_incrementRefCount ucnv_incrementRefCount_3_2 -#define ucnv_io_countAliases ucnv_io_countAliases_3_2 -#define ucnv_io_countAvailableAliases ucnv_io_countAvailableAliases_3_2 -#define ucnv_io_countAvailableConverters ucnv_io_countAvailableConverters_3_2 -#define ucnv_io_countStandards ucnv_io_countStandards_3_2 -#define ucnv_io_flushAvailableConverterCache ucnv_io_flushAvailableConverterCache_3_2 -#define ucnv_io_getAlias ucnv_io_getAlias_3_2 -#define ucnv_io_getAliases ucnv_io_getAliases_3_2 -#define ucnv_io_getAvailableConverter ucnv_io_getAvailableConverter_3_2 -#define ucnv_io_getConverterName ucnv_io_getConverterName_3_2 -#define ucnv_io_getDefaultConverterName ucnv_io_getDefaultConverterName_3_2 -#define ucnv_io_setDefaultConverterName ucnv_io_setDefaultConverterName_3_2 -#define ucnv_io_stripASCIIForCompare ucnv_io_stripASCIIForCompare_3_2 -#define ucnv_io_stripEBCDICForCompare ucnv_io_stripEBCDICForCompare_3_2 -#define ucnv_isAmbiguous ucnv_isAmbiguous_3_2 -#define ucnv_load ucnv_load_3_2 -#define ucnv_loadSharedData ucnv_loadSharedData_3_2 -#define ucnv_open ucnv_open_3_2 -#define ucnv_openAllNames ucnv_openAllNames_3_2 -#define ucnv_openCCSID ucnv_openCCSID_3_2 -#define ucnv_openPackage ucnv_openPackage_3_2 -#define ucnv_openStandardNames ucnv_openStandardNames_3_2 -#define ucnv_openU ucnv_openU_3_2 -#define ucnv_reset ucnv_reset_3_2 -#define ucnv_resetFromUnicode ucnv_resetFromUnicode_3_2 -#define ucnv_resetToUnicode ucnv_resetToUnicode_3_2 -#define ucnv_safeClone ucnv_safeClone_3_2 -#define ucnv_setDefaultName ucnv_setDefaultName_3_2 -#define ucnv_setFallback ucnv_setFallback_3_2 -#define ucnv_setFromUCallBack ucnv_setFromUCallBack_3_2 -#define ucnv_setSubstChars ucnv_setSubstChars_3_2 -#define ucnv_setToUCallBack ucnv_setToUCallBack_3_2 -#define ucnv_swap ucnv_swap_3_2 -#define ucnv_swapAliases ucnv_swapAliases_3_2 -#define ucnv_toAlgorithmic ucnv_toAlgorithmic_3_2 -#define ucnv_toUChars ucnv_toUChars_3_2 -#define ucnv_toUWriteCodePoint ucnv_toUWriteCodePoint_3_2 -#define ucnv_toUWriteUChars ucnv_toUWriteUChars_3_2 -#define ucnv_toUnicode ucnv_toUnicode_3_2 -#define ucnv_unload ucnv_unload_3_2 -#define ucnv_unloadSharedDataIfReady ucnv_unloadSharedDataIfReady_3_2 -#define ucnv_usesFallback ucnv_usesFallback_3_2 -#define ucol_allocWeights ucol_allocWeights_3_2 -#define ucol_assembleTailoringTable ucol_assembleTailoringTable_3_2 -#define ucol_calcSortKey ucol_calcSortKey_3_2 -#define ucol_calcSortKeySimpleTertiary ucol_calcSortKeySimpleTertiary_3_2 -#define ucol_cloneBinary ucol_cloneBinary_3_2 -#define ucol_cloneRuleData ucol_cloneRuleData_3_2 -#define ucol_close ucol_close_3_2 -#define ucol_closeElements ucol_closeElements_3_2 -#define ucol_collatorToIdentifier ucol_collatorToIdentifier_3_2 -#define ucol_countAvailable ucol_countAvailable_3_2 -#define ucol_createElements ucol_createElements_3_2 -#define ucol_doCE ucol_doCE_3_2 -#define ucol_equal ucol_equal_3_2 -#define ucol_equals ucol_equals_3_2 -#define ucol_getAttribute ucol_getAttribute_3_2 -#define ucol_getAttributeOrDefault ucol_getAttributeOrDefault_3_2 -#define ucol_getAvailable ucol_getAvailable_3_2 -#define ucol_getBound ucol_getBound_3_2 -#define ucol_getCEGenerator ucol_getCEGenerator_3_2 -#define ucol_getCEStrengthDifference ucol_getCEStrengthDifference_3_2 -#define ucol_getContractions ucol_getContractions_3_2 -#define ucol_getDisplayName ucol_getDisplayName_3_2 -#define ucol_getFirstCE ucol_getFirstCE_3_2 -#define ucol_getFunctionalEquivalent ucol_getFunctionalEquivalent_3_2 -#define ucol_getKeywordValues ucol_getKeywordValues_3_2 -#define ucol_getKeywords ucol_getKeywords_3_2 -#define ucol_getLocale ucol_getLocale_3_2 -#define ucol_getLocaleByType ucol_getLocaleByType_3_2 -#define ucol_getMaxExpansion ucol_getMaxExpansion_3_2 -#define ucol_getNextCE ucol_getNextCE_3_2 -#define ucol_getNextGenerated ucol_getNextGenerated_3_2 -#define ucol_getOffset ucol_getOffset_3_2 -#define ucol_getPrevCE ucol_getPrevCE_3_2 -#define ucol_getRules ucol_getRules_3_2 -#define ucol_getRulesEx ucol_getRulesEx_3_2 -#define ucol_getShortDefinitionString ucol_getShortDefinitionString_3_2 -#define ucol_getSimpleCEGenerator ucol_getSimpleCEGenerator_3_2 -#define ucol_getSortKey ucol_getSortKey_3_2 -#define ucol_getSortKeySize ucol_getSortKeySize_3_2 -#define ucol_getSortKeyWithAllocation ucol_getSortKeyWithAllocation_3_2 -#define ucol_getStrength ucol_getStrength_3_2 -#define ucol_getTailoredSet ucol_getTailoredSet_3_2 -#define ucol_getUCAVersion ucol_getUCAVersion_3_2 -#define ucol_getUnsafeSet ucol_getUnsafeSet_3_2 -#define ucol_getVariableTop ucol_getVariableTop_3_2 -#define ucol_getVersion ucol_getVersion_3_2 -#define ucol_greater ucol_greater_3_2 -#define ucol_greaterOrEqual ucol_greaterOrEqual_3_2 -#define ucol_identifierToShortString ucol_identifierToShortString_3_2 -#define ucol_initBuffers ucol_initBuffers_3_2 -#define ucol_initCollator ucol_initCollator_3_2 -#define ucol_initInverseUCA ucol_initInverseUCA_3_2 -#define ucol_initUCA ucol_initUCA_3_2 -#define ucol_inv_getGapPositions ucol_inv_getGapPositions_3_2 -#define ucol_inv_getNextCE ucol_inv_getNextCE_3_2 -#define ucol_inv_getPrevCE ucol_inv_getPrevCE_3_2 -#define ucol_isTailored ucol_isTailored_3_2 -#define ucol_keyHashCode ucol_keyHashCode_3_2 -#define ucol_mergeSortkeys ucol_mergeSortkeys_3_2 -#define ucol_next ucol_next_3_2 -#define ucol_nextSortKeyPart ucol_nextSortKeyPart_3_2 -#define ucol_nextWeight ucol_nextWeight_3_2 -#define ucol_normalizeShortDefinitionString ucol_normalizeShortDefinitionString_3_2 -#define ucol_open ucol_open_3_2 -#define ucol_openAvailableLocales ucol_openAvailableLocales_3_2 -#define ucol_openBinary ucol_openBinary_3_2 -#define ucol_openElements ucol_openElements_3_2 -#define ucol_openFromIdentifier ucol_openFromIdentifier_3_2 -#define ucol_openFromShortString ucol_openFromShortString_3_2 -#define ucol_openRules ucol_openRules_3_2 -#define ucol_open_internal ucol_open_internal_3_2 -#define ucol_previous ucol_previous_3_2 -#define ucol_primaryOrder ucol_primaryOrder_3_2 -#define ucol_prv_getSpecialCE ucol_prv_getSpecialCE_3_2 -#define ucol_prv_getSpecialPrevCE ucol_prv_getSpecialPrevCE_3_2 -#define ucol_reset ucol_reset_3_2 -#define ucol_restoreVariableTop ucol_restoreVariableTop_3_2 -#define ucol_safeClone ucol_safeClone_3_2 -#define ucol_secondaryOrder ucol_secondaryOrder_3_2 -#define ucol_setAttribute ucol_setAttribute_3_2 -#define ucol_setOffset ucol_setOffset_3_2 -#define ucol_setOptionsFromHeader ucol_setOptionsFromHeader_3_2 -#define ucol_setReqValidLocales ucol_setReqValidLocales_3_2 -#define ucol_setStrength ucol_setStrength_3_2 -#define ucol_setText ucol_setText_3_2 -#define ucol_setVariableTop ucol_setVariableTop_3_2 -#define ucol_shortStringToIdentifier ucol_shortStringToIdentifier_3_2 -#define ucol_sortKeyToString ucol_sortKeyToString_3_2 -#define ucol_strcoll ucol_strcoll_3_2 -#define ucol_strcollIter ucol_strcollIter_3_2 -#define ucol_swap ucol_swap_3_2 -#define ucol_swapBinary ucol_swapBinary_3_2 -#define ucol_swapInverseUCA ucol_swapInverseUCA_3_2 -#define ucol_tertiaryOrder ucol_tertiaryOrder_3_2 -#define ucol_tok_assembleTokenList ucol_tok_assembleTokenList_3_2 -#define ucol_tok_closeTokenList ucol_tok_closeTokenList_3_2 -#define ucol_tok_getNextArgument ucol_tok_getNextArgument_3_2 -#define ucol_tok_initTokenList ucol_tok_initTokenList_3_2 -#define ucol_tok_parseNextToken ucol_tok_parseNextToken_3_2 -#define ucol_updateInternalState ucol_updateInternalState_3_2 -#define ucurr_forLocale ucurr_forLocale_3_2 -#define ucurr_getDefaultFractionDigits ucurr_getDefaultFractionDigits_3_2 -#define ucurr_getName ucurr_getName_3_2 -#define ucurr_getRoundingIncrement ucurr_getRoundingIncrement_3_2 -#define ucurr_register ucurr_register_3_2 -#define ucurr_unregister ucurr_unregister_3_2 -#define udat_applyPattern udat_applyPattern_3_2 -#define udat_clone udat_clone_3_2 -#define udat_close udat_close_3_2 -#define udat_countAvailable udat_countAvailable_3_2 -#define udat_countSymbols udat_countSymbols_3_2 -#define udat_format udat_format_3_2 -#define udat_get2DigitYearStart udat_get2DigitYearStart_3_2 -#define udat_getAvailable udat_getAvailable_3_2 -#define udat_getCalendar udat_getCalendar_3_2 -#define udat_getLocaleByType udat_getLocaleByType_3_2 -#define udat_getNumberFormat udat_getNumberFormat_3_2 -#define udat_getSymbols udat_getSymbols_3_2 -#define udat_isLenient udat_isLenient_3_2 -#define udat_open udat_open_3_2 -#define udat_parse udat_parse_3_2 -#define udat_parseCalendar udat_parseCalendar_3_2 -#define udat_set2DigitYearStart udat_set2DigitYearStart_3_2 -#define udat_setCalendar udat_setCalendar_3_2 -#define udat_setLenient udat_setLenient_3_2 -#define udat_setNumberFormat udat_setNumberFormat_3_2 -#define udat_setSymbols udat_setSymbols_3_2 -#define udat_toPattern udat_toPattern_3_2 -#define udata_checkCommonData udata_checkCommonData_3_2 -#define udata_close udata_close_3_2 -#define udata_closeSwapper udata_closeSwapper_3_2 -#define udata_getHeaderSize udata_getHeaderSize_3_2 -#define udata_getInfo udata_getInfo_3_2 -#define udata_getInfoSize udata_getInfoSize_3_2 -#define udata_getLength udata_getLength_3_2 -#define udata_getMemory udata_getMemory_3_2 -#define udata_getRawMemory udata_getRawMemory_3_2 -#define udata_open udata_open_3_2 -#define udata_openChoice udata_openChoice_3_2 -#define udata_openSwapper udata_openSwapper_3_2 -#define udata_openSwapperForInputData udata_openSwapperForInputData_3_2 -#define udata_printError udata_printError_3_2 -#define udata_readInt16 udata_readInt16_3_2 -#define udata_readInt32 udata_readInt32_3_2 -#define udata_setAppData udata_setAppData_3_2 -#define udata_setCommonData udata_setCommonData_3_2 -#define udata_swapDataHeader udata_swapDataHeader_3_2 -#define udata_swapInvStringBlock udata_swapInvStringBlock_3_2 -#define uenum_close uenum_close_3_2 -#define uenum_count uenum_count_3_2 -#define uenum_next uenum_next_3_2 -#define uenum_nextDefault uenum_nextDefault_3_2 -#define uenum_openCharStringsEnumeration uenum_openCharStringsEnumeration_3_2 -#define uenum_openStringEnumeration uenum_openStringEnumeration_3_2 -#define uenum_reset uenum_reset_3_2 -#define uenum_unext uenum_unext_3_2 -#define uenum_unextDefault uenum_unextDefault_3_2 -#define ufile_close_translit ufile_close_translit_3_2 -#define ufile_fill_uchar_buffer ufile_fill_uchar_buffer_3_2 -#define ufile_flush_translit ufile_flush_translit_3_2 -#define ufile_getch ufile_getch_3_2 -#define ufile_getch32 ufile_getch32_3_2 -#define ufmt_64tou ufmt_64tou_3_2 -#define ufmt_defaultCPToUnicode ufmt_defaultCPToUnicode_3_2 -#define ufmt_digitvalue ufmt_digitvalue_3_2 -#define ufmt_isdigit ufmt_isdigit_3_2 -#define ufmt_ptou ufmt_ptou_3_2 -#define ufmt_uto64 ufmt_uto64_3_2 -#define ufmt_utop ufmt_utop_3_2 -#define uhash_close uhash_close_3_2 -#define uhash_compareCaselessUnicodeString uhash_compareCaselessUnicodeString_3_2 -#define uhash_compareChars uhash_compareChars_3_2 -#define uhash_compareIChars uhash_compareIChars_3_2 -#define uhash_compareLong uhash_compareLong_3_2 -#define uhash_compareUChars uhash_compareUChars_3_2 -#define uhash_compareUnicodeString uhash_compareUnicodeString_3_2 -#define uhash_count uhash_count_3_2 -#define uhash_deleteHashtable uhash_deleteHashtable_3_2 -#define uhash_deleteUVector uhash_deleteUVector_3_2 -#define uhash_deleteUnicodeString uhash_deleteUnicodeString_3_2 -#define uhash_find uhash_find_3_2 -#define uhash_freeBlock uhash_freeBlock_3_2 -#define uhash_get uhash_get_3_2 -#define uhash_geti uhash_geti_3_2 -#define uhash_hashCaselessUnicodeString uhash_hashCaselessUnicodeString_3_2 -#define uhash_hashChars uhash_hashChars_3_2 -#define uhash_hashIChars uhash_hashIChars_3_2 -#define uhash_hashLong uhash_hashLong_3_2 -#define uhash_hashUChars uhash_hashUChars_3_2 -#define uhash_hashUCharsN uhash_hashUCharsN_3_2 -#define uhash_hashUnicodeString uhash_hashUnicodeString_3_2 -#define uhash_iget uhash_iget_3_2 -#define uhash_igeti uhash_igeti_3_2 -#define uhash_iput uhash_iput_3_2 -#define uhash_iputi uhash_iputi_3_2 -#define uhash_iremove uhash_iremove_3_2 -#define uhash_iremovei uhash_iremovei_3_2 -#define uhash_nextElement uhash_nextElement_3_2 -#define uhash_open uhash_open_3_2 -#define uhash_openSize uhash_openSize_3_2 -#define uhash_put uhash_put_3_2 -#define uhash_puti uhash_puti_3_2 -#define uhash_remove uhash_remove_3_2 -#define uhash_removeAll uhash_removeAll_3_2 -#define uhash_removeElement uhash_removeElement_3_2 -#define uhash_removei uhash_removei_3_2 -#define uhash_setKeyComparator uhash_setKeyComparator_3_2 -#define uhash_setKeyDeleter uhash_setKeyDeleter_3_2 -#define uhash_setKeyHasher uhash_setKeyHasher_3_2 -#define uhash_setResizePolicy uhash_setResizePolicy_3_2 -#define uhash_setValueDeleter uhash_setValueDeleter_3_2 -#define uhash_toki uhash_toki_3_2 -#define uhash_tokp uhash_tokp_3_2 -#define uhst_addPropertyStarts uhst_addPropertyStarts_3_2 -#define uidna_IDNToASCII uidna_IDNToASCII_3_2 -#define uidna_IDNToUnicode uidna_IDNToUnicode_3_2 -#define uidna_compare uidna_compare_3_2 -#define uidna_toASCII uidna_toASCII_3_2 -#define uidna_toUnicode uidna_toUnicode_3_2 -#define uiter_current32 uiter_current32_3_2 -#define uiter_getState uiter_getState_3_2 -#define uiter_next32 uiter_next32_3_2 -#define uiter_previous32 uiter_previous32_3_2 -#define uiter_setCharacterIterator uiter_setCharacterIterator_3_2 -#define uiter_setReplaceable uiter_setReplaceable_3_2 -#define uiter_setState uiter_setState_3_2 -#define uiter_setString uiter_setString_3_2 -#define uiter_setUTF16BE uiter_setUTF16BE_3_2 -#define uiter_setUTF8 uiter_setUTF8_3_2 -#define uloc_acceptLanguage uloc_acceptLanguage_3_2 -#define uloc_acceptLanguageFromHTTP uloc_acceptLanguageFromHTTP_3_2 -#define uloc_canonicalize uloc_canonicalize_3_2 -#define uloc_countAvailable uloc_countAvailable_3_2 -#define uloc_getAvailable uloc_getAvailable_3_2 -#define uloc_getBaseName uloc_getBaseName_3_2 -#define uloc_getCountry uloc_getCountry_3_2 -#define uloc_getDefault uloc_getDefault_3_2 -#define uloc_getDisplayCountry uloc_getDisplayCountry_3_2 -#define uloc_getDisplayKeyword uloc_getDisplayKeyword_3_2 -#define uloc_getDisplayKeywordValue uloc_getDisplayKeywordValue_3_2 -#define uloc_getDisplayLanguage uloc_getDisplayLanguage_3_2 -#define uloc_getDisplayName uloc_getDisplayName_3_2 -#define uloc_getDisplayScript uloc_getDisplayScript_3_2 -#define uloc_getDisplayVariant uloc_getDisplayVariant_3_2 -#define uloc_getISO3Country uloc_getISO3Country_3_2 -#define uloc_getISO3Language uloc_getISO3Language_3_2 -#define uloc_getISOCountries uloc_getISOCountries_3_2 -#define uloc_getISOLanguages uloc_getISOLanguages_3_2 -#define uloc_getKeywordValue uloc_getKeywordValue_3_2 -#define uloc_getLCID uloc_getLCID_3_2 -#define uloc_getLanguage uloc_getLanguage_3_2 -#define uloc_getName uloc_getName_3_2 -#define uloc_getParent uloc_getParent_3_2 -#define uloc_getScript uloc_getScript_3_2 -#define uloc_getVariant uloc_getVariant_3_2 -#define uloc_openKeywordList uloc_openKeywordList_3_2 -#define uloc_openKeywords uloc_openKeywords_3_2 -#define uloc_setDefault uloc_setDefault_3_2 -#define uloc_setKeywordValue uloc_setKeywordValue_3_2 -#define ulocdata_getExemplarSet ulocdata_getExemplarSet_3_2 -#define ulocdata_getMeasurementSystem ulocdata_getMeasurementSystem_3_2 -#define ulocdata_getPaperSize ulocdata_getPaperSize_3_2 -#define umsg_applyPattern umsg_applyPattern_3_2 -#define umsg_clone umsg_clone_3_2 -#define umsg_close umsg_close_3_2 -#define umsg_format umsg_format_3_2 -#define umsg_getLocale umsg_getLocale_3_2 -#define umsg_getLocaleByType umsg_getLocaleByType_3_2 -#define umsg_open umsg_open_3_2 -#define umsg_parse umsg_parse_3_2 -#define umsg_setLocale umsg_setLocale_3_2 -#define umsg_toPattern umsg_toPattern_3_2 -#define umsg_vformat umsg_vformat_3_2 -#define umsg_vparse umsg_vparse_3_2 -#define umtx_atomic_dec umtx_atomic_dec_3_2 -#define umtx_atomic_inc umtx_atomic_inc_3_2 -#define umtx_cleanup umtx_cleanup_3_2 -#define umtx_destroy umtx_destroy_3_2 -#define umtx_init umtx_init_3_2 -#define umtx_lock umtx_lock_3_2 -#define umtx_unlock umtx_unlock_3_2 -#define unorm_addPropertyStarts unorm_addPropertyStarts_3_2 -#define unorm_closeIter unorm_closeIter_3_2 -#define unorm_compare unorm_compare_3_2 -#define unorm_compose unorm_compose_3_2 -#define unorm_concatenate unorm_concatenate_3_2 -#define unorm_decompose unorm_decompose_3_2 -#define unorm_getCanonStartSet unorm_getCanonStartSet_3_2 -#define unorm_getCanonicalDecomposition unorm_getCanonicalDecomposition_3_2 -#define unorm_getDecomposition unorm_getDecomposition_3_2 -#define unorm_getFCD16FromCodePoint unorm_getFCD16FromCodePoint_3_2 -#define unorm_getFCDTrie unorm_getFCDTrie_3_2 -#define unorm_getNX unorm_getNX_3_2 -#define unorm_getQuickCheck unorm_getQuickCheck_3_2 -#define unorm_getUnicodeVersion unorm_getUnicodeVersion_3_2 -#define unorm_haveData unorm_haveData_3_2 -#define unorm_internalIsFullCompositionExclusion unorm_internalIsFullCompositionExclusion_3_2 -#define unorm_internalNormalize unorm_internalNormalize_3_2 -#define unorm_internalNormalizeWithNX unorm_internalNormalizeWithNX_3_2 -#define unorm_internalQuickCheck unorm_internalQuickCheck_3_2 -#define unorm_isCanonSafeStart unorm_isCanonSafeStart_3_2 -#define unorm_isNFSkippable unorm_isNFSkippable_3_2 -#define unorm_isNormalized unorm_isNormalized_3_2 -#define unorm_isNormalizedWithOptions unorm_isNormalizedWithOptions_3_2 -#define unorm_next unorm_next_3_2 -#define unorm_normalize unorm_normalize_3_2 -#define unorm_openIter unorm_openIter_3_2 -#define unorm_previous unorm_previous_3_2 -#define unorm_quickCheck unorm_quickCheck_3_2 -#define unorm_quickCheckWithOptions unorm_quickCheckWithOptions_3_2 -#define unorm_setIter unorm_setIter_3_2 -#define unorm_swap unorm_swap_3_2 -#define unum_applyPattern unum_applyPattern_3_2 -#define unum_clone unum_clone_3_2 -#define unum_close unum_close_3_2 -#define unum_countAvailable unum_countAvailable_3_2 -#define unum_format unum_format_3_2 -#define unum_formatDouble unum_formatDouble_3_2 -#define unum_formatDoubleCurrency unum_formatDoubleCurrency_3_2 -#define unum_formatInt64 unum_formatInt64_3_2 -#define unum_getAttribute unum_getAttribute_3_2 -#define unum_getAvailable unum_getAvailable_3_2 -#define unum_getDoubleAttribute unum_getDoubleAttribute_3_2 -#define unum_getLocaleByType unum_getLocaleByType_3_2 -#define unum_getSymbol unum_getSymbol_3_2 -#define unum_getTextAttribute unum_getTextAttribute_3_2 -#define unum_open unum_open_3_2 -#define unum_parse unum_parse_3_2 -#define unum_parseDouble unum_parseDouble_3_2 -#define unum_parseDoubleCurrency unum_parseDoubleCurrency_3_2 -#define unum_parseInt64 unum_parseInt64_3_2 -#define unum_setAttribute unum_setAttribute_3_2 -#define unum_setDoubleAttribute unum_setDoubleAttribute_3_2 -#define unum_setSymbol unum_setSymbol_3_2 -#define unum_setTextAttribute unum_setTextAttribute_3_2 -#define unum_toPattern unum_toPattern_3_2 -#define upname_swap upname_swap_3_2 -#define uprops_getSource uprops_getSource_3_2 -#define uprops_swap uprops_swap_3_2 -#define uprv_asciiFromEbcdic uprv_asciiFromEbcdic_3_2 -#define uprv_asciitolower uprv_asciitolower_3_2 -#define uprv_ceil uprv_ceil_3_2 -#define uprv_cnttab_addContraction uprv_cnttab_addContraction_3_2 -#define uprv_cnttab_changeContraction uprv_cnttab_changeContraction_3_2 -#define uprv_cnttab_changeLastCE uprv_cnttab_changeLastCE_3_2 -#define uprv_cnttab_clone uprv_cnttab_clone_3_2 -#define uprv_cnttab_close uprv_cnttab_close_3_2 -#define uprv_cnttab_constructTable uprv_cnttab_constructTable_3_2 -#define uprv_cnttab_findCE uprv_cnttab_findCE_3_2 -#define uprv_cnttab_findCP uprv_cnttab_findCP_3_2 -#define uprv_cnttab_getCE uprv_cnttab_getCE_3_2 -#define uprv_cnttab_insertContraction uprv_cnttab_insertContraction_3_2 -#define uprv_cnttab_isTailored uprv_cnttab_isTailored_3_2 -#define uprv_cnttab_open uprv_cnttab_open_3_2 -#define uprv_cnttab_setContraction uprv_cnttab_setContraction_3_2 -#define uprv_compareASCIIPropertyNames uprv_compareASCIIPropertyNames_3_2 -#define uprv_compareEBCDICPropertyNames uprv_compareEBCDICPropertyNames_3_2 -#define uprv_compareInvAscii uprv_compareInvAscii_3_2 -#define uprv_compareInvEbcdic uprv_compareInvEbcdic_3_2 -#define uprv_convertToLCID uprv_convertToLCID_3_2 -#define uprv_convertToPosix uprv_convertToPosix_3_2 -#define uprv_copyAscii uprv_copyAscii_3_2 -#define uprv_copyEbcdic uprv_copyEbcdic_3_2 -#define uprv_dtostr uprv_dtostr_3_2 -#define uprv_ebcdicFromAscii uprv_ebcdicFromAscii_3_2 -#define uprv_ebcdictolower uprv_ebcdictolower_3_2 -#define uprv_fabs uprv_fabs_3_2 -#define uprv_floor uprv_floor_3_2 -#define uprv_fmax uprv_fmax_3_2 -#define uprv_fmin uprv_fmin_3_2 -#define uprv_fmod uprv_fmod_3_2 -#define uprv_free uprv_free_3_2 -#define uprv_getCharNameCharacters uprv_getCharNameCharacters_3_2 -#define uprv_getDefaultCodepage uprv_getDefaultCodepage_3_2 -#define uprv_getDefaultLocaleID uprv_getDefaultLocaleID_3_2 -#define uprv_getInfinity uprv_getInfinity_3_2 -#define uprv_getMaxCharNameLength uprv_getMaxCharNameLength_3_2 -#define uprv_getMaxValues uprv_getMaxValues_3_2 -#define uprv_getNaN uprv_getNaN_3_2 -#define uprv_getStaticCurrencyName uprv_getStaticCurrencyName_3_2 -#define uprv_getUTCtime uprv_getUTCtime_3_2 -#define uprv_haveProperties uprv_haveProperties_3_2 -#define uprv_init_collIterate uprv_init_collIterate_3_2 -#define uprv_int32Comparator uprv_int32Comparator_3_2 -#define uprv_isInfinite uprv_isInfinite_3_2 -#define uprv_isInvariantString uprv_isInvariantString_3_2 -#define uprv_isInvariantUString uprv_isInvariantUString_3_2 -#define uprv_isNaN uprv_isNaN_3_2 -#define uprv_isNegativeInfinity uprv_isNegativeInfinity_3_2 -#define uprv_isPositiveInfinity uprv_isPositiveInfinity_3_2 -#define uprv_isRuleWhiteSpace uprv_isRuleWhiteSpace_3_2 -#define uprv_itou uprv_itou_3_2 -#define uprv_loadPropsData uprv_loadPropsData_3_2 -#define uprv_log uprv_log_3_2 -#define uprv_log10 uprv_log10_3_2 -#define uprv_malloc uprv_malloc_3_2 -#define uprv_mapFile uprv_mapFile_3_2 -#define uprv_max uprv_max_3_2 -#define uprv_maxMantissa uprv_maxMantissa_3_2 -#define uprv_min uprv_min_3_2 -#define uprv_modf uprv_modf_3_2 -#define uprv_openRuleWhiteSpaceSet uprv_openRuleWhiteSpaceSet_3_2 -#define uprv_pathIsAbsolute uprv_pathIsAbsolute_3_2 -#define uprv_pow uprv_pow_3_2 -#define uprv_pow10 uprv_pow10_3_2 -#define uprv_realloc uprv_realloc_3_2 -#define uprv_round uprv_round_3_2 -#define uprv_sortArray uprv_sortArray_3_2 -#define uprv_strCompare uprv_strCompare_3_2 -#define uprv_strdup uprv_strdup_3_2 -#define uprv_strndup uprv_strndup_3_2 -#define uprv_syntaxError uprv_syntaxError_3_2 -#define uprv_timezone uprv_timezone_3_2 -#define uprv_toupper uprv_toupper_3_2 -#define uprv_trunc uprv_trunc_3_2 -#define uprv_tzname uprv_tzname_3_2 -#define uprv_tzset uprv_tzset_3_2 -#define uprv_uca_addAnElement uprv_uca_addAnElement_3_2 -#define uprv_uca_assembleTable uprv_uca_assembleTable_3_2 -#define uprv_uca_canonicalClosure uprv_uca_canonicalClosure_3_2 -#define uprv_uca_cloneTempTable uprv_uca_cloneTempTable_3_2 -#define uprv_uca_closeTempTable uprv_uca_closeTempTable_3_2 -#define uprv_uca_getCodePointFromRaw uprv_uca_getCodePointFromRaw_3_2 -#define uprv_uca_getImplicitFromRaw uprv_uca_getImplicitFromRaw_3_2 -#define uprv_uca_getImplicitPrimary uprv_uca_getImplicitPrimary_3_2 -#define uprv_uca_getRawFromCodePoint uprv_uca_getRawFromCodePoint_3_2 -#define uprv_uca_getRawFromImplicit uprv_uca_getRawFromImplicit_3_2 -#define uprv_uca_initImplicitConstants uprv_uca_initImplicitConstants_3_2 -#define uprv_uca_initTempTable uprv_uca_initTempTable_3_2 -#define uprv_uint16Comparator uprv_uint16Comparator_3_2 -#define uprv_uint32Comparator uprv_uint32Comparator_3_2 -#define uprv_unmapFile uprv_unmapFile_3_2 -#define uregex_appendReplacement uregex_appendReplacement_3_2 -#define uregex_appendTail uregex_appendTail_3_2 -#define uregex_clone uregex_clone_3_2 -#define uregex_close uregex_close_3_2 -#define uregex_end uregex_end_3_2 -#define uregex_find uregex_find_3_2 -#define uregex_findNext uregex_findNext_3_2 -#define uregex_flags uregex_flags_3_2 -#define uregex_getText uregex_getText_3_2 -#define uregex_group uregex_group_3_2 -#define uregex_groupCount uregex_groupCount_3_2 -#define uregex_lookingAt uregex_lookingAt_3_2 -#define uregex_matches uregex_matches_3_2 -#define uregex_open uregex_open_3_2 -#define uregex_openC uregex_openC_3_2 -#define uregex_pattern uregex_pattern_3_2 -#define uregex_replaceAll uregex_replaceAll_3_2 -#define uregex_replaceFirst uregex_replaceFirst_3_2 -#define uregex_reset uregex_reset_3_2 -#define uregex_setText uregex_setText_3_2 -#define uregex_split uregex_split_3_2 -#define uregex_start uregex_start_3_2 -#define ures_appendResPath ures_appendResPath_3_2 -#define ures_close ures_close_3_2 -#define ures_copyResb ures_copyResb_3_2 -#define ures_countArrayItems ures_countArrayItems_3_2 -#define ures_findResource ures_findResource_3_2 -#define ures_findSubResource ures_findSubResource_3_2 -#define ures_freeResPath ures_freeResPath_3_2 -#define ures_getBinary ures_getBinary_3_2 -#define ures_getByIndex ures_getByIndex_3_2 -#define ures_getByKey ures_getByKey_3_2 -#define ures_getByKeyWithFallback ures_getByKeyWithFallback_3_2 -#define ures_getFunctionalEquivalent ures_getFunctionalEquivalent_3_2 -#define ures_getInt ures_getInt_3_2 -#define ures_getIntVector ures_getIntVector_3_2 -#define ures_getKey ures_getKey_3_2 -#define ures_getKeywordValues ures_getKeywordValues_3_2 -#define ures_getLocale ures_getLocale_3_2 -#define ures_getLocaleByType ures_getLocaleByType_3_2 -#define ures_getName ures_getName_3_2 -#define ures_getNextResource ures_getNextResource_3_2 -#define ures_getNextString ures_getNextString_3_2 -#define ures_getPath ures_getPath_3_2 -#define ures_getSize ures_getSize_3_2 -#define ures_getString ures_getString_3_2 -#define ures_getStringByIndex ures_getStringByIndex_3_2 -#define ures_getStringByKey ures_getStringByKey_3_2 -#define ures_getType ures_getType_3_2 -#define ures_getUInt ures_getUInt_3_2 -#define ures_getVersion ures_getVersion_3_2 -#define ures_getVersionNumber ures_getVersionNumber_3_2 -#define ures_hasNext ures_hasNext_3_2 -#define ures_initStackObject ures_initStackObject_3_2 -#define ures_open ures_open_3_2 -#define ures_openAvailableLocales ures_openAvailableLocales_3_2 -#define ures_openDirect ures_openDirect_3_2 -#define ures_openFillIn ures_openFillIn_3_2 -#define ures_openU ures_openU_3_2 -#define ures_resetIterator ures_resetIterator_3_2 -#define ures_swap ures_swap_3_2 -#define uscript_closeRun uscript_closeRun_3_2 -#define uscript_getCode uscript_getCode_3_2 -#define uscript_getName uscript_getName_3_2 -#define uscript_getScript uscript_getScript_3_2 -#define uscript_getShortName uscript_getShortName_3_2 -#define uscript_nextRun uscript_nextRun_3_2 -#define uscript_openRun uscript_openRun_3_2 -#define uscript_resetRun uscript_resetRun_3_2 -#define uscript_setRunText uscript_setRunText_3_2 -#define usearch_close usearch_close_3_2 -#define usearch_first usearch_first_3_2 -#define usearch_following usearch_following_3_2 -#define usearch_getAttribute usearch_getAttribute_3_2 -#define usearch_getBreakIterator usearch_getBreakIterator_3_2 -#define usearch_getCollator usearch_getCollator_3_2 -#define usearch_getMatchedLength usearch_getMatchedLength_3_2 -#define usearch_getMatchedStart usearch_getMatchedStart_3_2 -#define usearch_getMatchedText usearch_getMatchedText_3_2 -#define usearch_getOffset usearch_getOffset_3_2 -#define usearch_getPattern usearch_getPattern_3_2 -#define usearch_getText usearch_getText_3_2 -#define usearch_handleNextCanonical usearch_handleNextCanonical_3_2 -#define usearch_handleNextExact usearch_handleNextExact_3_2 -#define usearch_handlePreviousCanonical usearch_handlePreviousCanonical_3_2 -#define usearch_handlePreviousExact usearch_handlePreviousExact_3_2 -#define usearch_last usearch_last_3_2 -#define usearch_next usearch_next_3_2 -#define usearch_open usearch_open_3_2 -#define usearch_openFromCollator usearch_openFromCollator_3_2 -#define usearch_preceding usearch_preceding_3_2 -#define usearch_previous usearch_previous_3_2 -#define usearch_reset usearch_reset_3_2 -#define usearch_setAttribute usearch_setAttribute_3_2 -#define usearch_setBreakIterator usearch_setBreakIterator_3_2 -#define usearch_setCollator usearch_setCollator_3_2 -#define usearch_setOffset usearch_setOffset_3_2 -#define usearch_setPattern usearch_setPattern_3_2 -#define usearch_setText usearch_setText_3_2 -#define userv_deleteStringPair userv_deleteStringPair_3_2 -#define uset_add uset_add_3_2 -#define uset_addAll uset_addAll_3_2 -#define uset_addRange uset_addRange_3_2 -#define uset_addString uset_addString_3_2 -#define uset_applyIntPropertyValue uset_applyIntPropertyValue_3_2 -#define uset_applyPattern uset_applyPattern_3_2 -#define uset_applyPropertyAlias uset_applyPropertyAlias_3_2 -#define uset_charAt uset_charAt_3_2 -#define uset_clear uset_clear_3_2 -#define uset_close uset_close_3_2 -#define uset_compact uset_compact_3_2 -#define uset_complement uset_complement_3_2 -#define uset_complementAll uset_complementAll_3_2 -#define uset_contains uset_contains_3_2 -#define uset_containsAll uset_containsAll_3_2 -#define uset_containsNone uset_containsNone_3_2 -#define uset_containsRange uset_containsRange_3_2 -#define uset_containsSome uset_containsSome_3_2 -#define uset_containsString uset_containsString_3_2 -#define uset_equals uset_equals_3_2 -#define uset_getItem uset_getItem_3_2 -#define uset_getItemCount uset_getItemCount_3_2 -#define uset_getSerializedRange uset_getSerializedRange_3_2 -#define uset_getSerializedRangeCount uset_getSerializedRangeCount_3_2 -#define uset_getSerializedSet uset_getSerializedSet_3_2 -#define uset_indexOf uset_indexOf_3_2 -#define uset_isEmpty uset_isEmpty_3_2 -#define uset_open uset_open_3_2 -#define uset_openPattern uset_openPattern_3_2 -#define uset_openPatternOptions uset_openPatternOptions_3_2 -#define uset_remove uset_remove_3_2 -#define uset_removeAll uset_removeAll_3_2 -#define uset_removeRange uset_removeRange_3_2 -#define uset_removeString uset_removeString_3_2 -#define uset_resemblesPattern uset_resemblesPattern_3_2 -#define uset_retain uset_retain_3_2 -#define uset_retainAll uset_retainAll_3_2 -#define uset_serialize uset_serialize_3_2 -#define uset_serializedContains uset_serializedContains_3_2 -#define uset_set uset_set_3_2 -#define uset_setSerializedToOne uset_setSerializedToOne_3_2 -#define uset_size uset_size_3_2 -#define uset_toPattern uset_toPattern_3_2 -#define usprep_close usprep_close_3_2 -#define usprep_open usprep_open_3_2 -#define usprep_prepare usprep_prepare_3_2 -#define usprep_swap usprep_swap_3_2 -#define ustr_foldCase ustr_foldCase_3_2 -#define ustr_toLower ustr_toLower_3_2 -#define ustr_toTitle ustr_toTitle_3_2 -#define ustr_toUpper ustr_toUpper_3_2 -#define utf8_appendCharSafeBody utf8_appendCharSafeBody_3_2 -#define utf8_back1SafeBody utf8_back1SafeBody_3_2 -#define utf8_countTrailBytes utf8_countTrailBytes_3_2 -#define utf8_nextCharSafeBody utf8_nextCharSafeBody_3_2 -#define utf8_prevCharSafeBody utf8_prevCharSafeBody_3_2 -#define utmscale_fromInt64 utmscale_fromInt64_3_2 -#define utmscale_getTimeScaleValue utmscale_getTimeScaleValue_3_2 -#define utmscale_toInt64 utmscale_toInt64_3_2 -#define utrace_cleanup utrace_cleanup_3_2 -#define utrace_data utrace_data_3_2 -#define utrace_entry utrace_entry_3_2 -#define utrace_exit utrace_exit_3_2 -#define utrace_format utrace_format_3_2 -#define utrace_functionName utrace_functionName_3_2 -#define utrace_getFunctions utrace_getFunctions_3_2 -#define utrace_getLevel utrace_getLevel_3_2 -#define utrace_level utrace_level_3_2 -#define utrace_setFunctions utrace_setFunctions_3_2 -#define utrace_setLevel utrace_setLevel_3_2 -#define utrace_vformat utrace_vformat_3_2 -#define utrans_clone utrans_clone_3_2 -#define utrans_close utrans_close_3_2 -#define utrans_countAvailableIDs utrans_countAvailableIDs_3_2 -#define utrans_getAvailableID utrans_getAvailableID_3_2 -#define utrans_getID utrans_getID_3_2 -#define utrans_getUnicodeID utrans_getUnicodeID_3_2 -#define utrans_open utrans_open_3_2 -#define utrans_openIDs utrans_openIDs_3_2 -#define utrans_openInverse utrans_openInverse_3_2 -#define utrans_openU utrans_openU_3_2 -#define utrans_register utrans_register_3_2 -#define utrans_rep_caseContextIterator utrans_rep_caseContextIterator_3_2 -#define utrans_setFilter utrans_setFilter_3_2 -#define utrans_trans utrans_trans_3_2 -#define utrans_transIncremental utrans_transIncremental_3_2 -#define utrans_transIncrementalUChars utrans_transIncrementalUChars_3_2 -#define utrans_transUChars utrans_transUChars_3_2 -#define utrans_unregister utrans_unregister_3_2 -#define utrans_unregisterID utrans_unregisterID_3_2 -#define utrie_clone utrie_clone_3_2 -#define utrie_close utrie_close_3_2 -#define utrie_enum utrie_enum_3_2 -#define utrie_get32 utrie_get32_3_2 -#define utrie_getData utrie_getData_3_2 -#define utrie_open utrie_open_3_2 -#define utrie_serialize utrie_serialize_3_2 -#define utrie_set32 utrie_set32_3_2 -#define utrie_setRange32 utrie_setRange32_3_2 -#define utrie_swap utrie_swap_3_2 -#define utrie_unserialize utrie_unserialize_3_2 +#define T_CString_int64ToString T_CString_int64ToString_3_6 +#define T_CString_integerToString T_CString_integerToString_3_6 +#define T_CString_stricmp T_CString_stricmp_3_6 +#define T_CString_stringToInteger T_CString_stringToInteger_3_6 +#define T_CString_strnicmp T_CString_strnicmp_3_6 +#define T_CString_toLowerCase T_CString_toLowerCase_3_6 +#define T_CString_toUpperCase T_CString_toUpperCase_3_6 +#define UCNV_FROM_U_CALLBACK_ESCAPE UCNV_FROM_U_CALLBACK_ESCAPE_3_6 +#define UCNV_FROM_U_CALLBACK_SKIP UCNV_FROM_U_CALLBACK_SKIP_3_6 +#define UCNV_FROM_U_CALLBACK_STOP UCNV_FROM_U_CALLBACK_STOP_3_6 +#define UCNV_FROM_U_CALLBACK_SUBSTITUTE UCNV_FROM_U_CALLBACK_SUBSTITUTE_3_6 +#define UCNV_TO_U_CALLBACK_ESCAPE UCNV_TO_U_CALLBACK_ESCAPE_3_6 +#define UCNV_TO_U_CALLBACK_SKIP UCNV_TO_U_CALLBACK_SKIP_3_6 +#define UCNV_TO_U_CALLBACK_STOP UCNV_TO_U_CALLBACK_STOP_3_6 +#define UCNV_TO_U_CALLBACK_SUBSTITUTE UCNV_TO_U_CALLBACK_SUBSTITUTE_3_6 +#define UDataMemory_createNewInstance UDataMemory_createNewInstance_3_6 +#define UDataMemory_init UDataMemory_init_3_6 +#define UDataMemory_isLoaded UDataMemory_isLoaded_3_6 +#define UDataMemory_normalizeDataPointer UDataMemory_normalizeDataPointer_3_6 +#define UDataMemory_setData UDataMemory_setData_3_6 +#define UDatamemory_assign UDatamemory_assign_3_6 +#define _ASCIIData _ASCIIData_3_6 +#define _Bocu1Data _Bocu1Data_3_6 +#define _CESU8Data _CESU8Data_3_6 +#define _HZData _HZData_3_6 +#define _IMAPData _IMAPData_3_6 +#define _ISCIIData _ISCIIData_3_6 +#define _ISO2022Data _ISO2022Data_3_6 +#define _LMBCSData1 _LMBCSData1_3_6 +#define _LMBCSData11 _LMBCSData11_3_6 +#define _LMBCSData16 _LMBCSData16_3_6 +#define _LMBCSData17 _LMBCSData17_3_6 +#define _LMBCSData18 _LMBCSData18_3_6 +#define _LMBCSData19 _LMBCSData19_3_6 +#define _LMBCSData2 _LMBCSData2_3_6 +#define _LMBCSData3 _LMBCSData3_3_6 +#define _LMBCSData4 _LMBCSData4_3_6 +#define _LMBCSData5 _LMBCSData5_3_6 +#define _LMBCSData6 _LMBCSData6_3_6 +#define _LMBCSData8 _LMBCSData8_3_6 +#define _Latin1Data _Latin1Data_3_6 +#define _MBCSData _MBCSData_3_6 +#define _SCSUData _SCSUData_3_6 +#define _UTF16BEData _UTF16BEData_3_6 +#define _UTF16Data _UTF16Data_3_6 +#define _UTF16LEData _UTF16LEData_3_6 +#define _UTF32BEData _UTF32BEData_3_6 +#define _UTF32Data _UTF32Data_3_6 +#define _UTF32LEData _UTF32LEData_3_6 +#define _UTF7Data _UTF7Data_3_6 +#define _UTF8Data _UTF8Data_3_6 +#define cmemory_cleanup cmemory_cleanup_3_6 +#define cmemory_inUse cmemory_inUse_3_6 +#define locale_getKeywords locale_getKeywords_3_6 +#define locale_get_default locale_get_default_3_6 +#define locale_set_default locale_set_default_3_6 +#define res_countArrayItems res_countArrayItems_3_6 +#define res_findResource res_findResource_3_6 +#define res_getAlias res_getAlias_3_6 +#define res_getArrayItem res_getArrayItem_3_6 +#define res_getBinary res_getBinary_3_6 +#define res_getIntVector res_getIntVector_3_6 +#define res_getResource res_getResource_3_6 +#define res_getString res_getString_3_6 +#define res_getTableItemByIndex res_getTableItemByIndex_3_6 +#define res_getTableItemByKey res_getTableItemByKey_3_6 +#define res_load res_load_3_6 +#define res_unload res_unload_3_6 +#define transliterator_cleanup transliterator_cleanup_3_6 +#define triedict_swap triedict_swap_3_6 +#define u_UCharsToChars u_UCharsToChars_3_6 +#define u_austrcpy u_austrcpy_3_6 +#define u_austrncpy u_austrncpy_3_6 +#define u_catclose u_catclose_3_6 +#define u_catgets u_catgets_3_6 +#define u_catopen u_catopen_3_6 +#define u_charAge u_charAge_3_6 +#define u_charDigitValue u_charDigitValue_3_6 +#define u_charDirection u_charDirection_3_6 +#define u_charFromName u_charFromName_3_6 +#define u_charMirror u_charMirror_3_6 +#define u_charName u_charName_3_6 +#define u_charType u_charType_3_6 +#define u_charsToUChars u_charsToUChars_3_6 +#define u_cleanup u_cleanup_3_6 +#define u_countChar32 u_countChar32_3_6 +#define u_digit u_digit_3_6 +#define u_enumCharNames u_enumCharNames_3_6 +#define u_enumCharTypes u_enumCharTypes_3_6 +#define u_errorName u_errorName_3_6 +#define u_fclose u_fclose_3_6 +#define u_feof u_feof_3_6 +#define u_fflush u_fflush_3_6 +#define u_fgetConverter u_fgetConverter_3_6 +#define u_fgetc u_fgetc_3_6 +#define u_fgetcodepage u_fgetcodepage_3_6 +#define u_fgetcx u_fgetcx_3_6 +#define u_fgetfile u_fgetfile_3_6 +#define u_fgetlocale u_fgetlocale_3_6 +#define u_fgets u_fgets_3_6 +#define u_file_read u_file_read_3_6 +#define u_file_write u_file_write_3_6 +#define u_file_write_flush u_file_write_flush_3_6 +#define u_finit u_finit_3_6 +#define u_foldCase u_foldCase_3_6 +#define u_fopen u_fopen_3_6 +#define u_forDigit u_forDigit_3_6 +#define u_formatMessage u_formatMessage_3_6 +#define u_formatMessageWithError u_formatMessageWithError_3_6 +#define u_fprintf u_fprintf_3_6 +#define u_fprintf_u u_fprintf_u_3_6 +#define u_fputc u_fputc_3_6 +#define u_fputs u_fputs_3_6 +#define u_frewind u_frewind_3_6 +#define u_fscanf u_fscanf_3_6 +#define u_fscanf_u u_fscanf_u_3_6 +#define u_fsetcodepage u_fsetcodepage_3_6 +#define u_fsetlocale u_fsetlocale_3_6 +#define u_fsettransliterator u_fsettransliterator_3_6 +#define u_fstropen u_fstropen_3_6 +#define u_fungetc u_fungetc_3_6 +#define u_getCombiningClass u_getCombiningClass_3_6 +#define u_getDataDirectory u_getDataDirectory_3_6 +#define u_getDefaultConverter u_getDefaultConverter_3_6 +#define u_getFC_NFKC_Closure u_getFC_NFKC_Closure_3_6 +#define u_getISOComment u_getISOComment_3_6 +#define u_getIntPropertyMaxValue u_getIntPropertyMaxValue_3_6 +#define u_getIntPropertyMinValue u_getIntPropertyMinValue_3_6 +#define u_getIntPropertyValue u_getIntPropertyValue_3_6 +#define u_getNumericValue u_getNumericValue_3_6 +#define u_getPropertyEnum u_getPropertyEnum_3_6 +#define u_getPropertyName u_getPropertyName_3_6 +#define u_getPropertyValueEnum u_getPropertyValueEnum_3_6 +#define u_getPropertyValueName u_getPropertyValueName_3_6 +#define u_getUnicodeProperties u_getUnicodeProperties_3_6 +#define u_getUnicodeVersion u_getUnicodeVersion_3_6 +#define u_getVersion u_getVersion_3_6 +#define u_growBufferFromStatic u_growBufferFromStatic_3_6 +#define u_hasBinaryProperty u_hasBinaryProperty_3_6 +#define u_init u_init_3_6 +#define u_isIDIgnorable u_isIDIgnorable_3_6 +#define u_isIDPart u_isIDPart_3_6 +#define u_isIDStart u_isIDStart_3_6 +#define u_isISOControl u_isISOControl_3_6 +#define u_isJavaIDPart u_isJavaIDPart_3_6 +#define u_isJavaIDStart u_isJavaIDStart_3_6 +#define u_isJavaSpaceChar u_isJavaSpaceChar_3_6 +#define u_isMirrored u_isMirrored_3_6 +#define u_isUAlphabetic u_isUAlphabetic_3_6 +#define u_isULowercase u_isULowercase_3_6 +#define u_isUUppercase u_isUUppercase_3_6 +#define u_isUWhiteSpace u_isUWhiteSpace_3_6 +#define u_isWhitespace u_isWhitespace_3_6 +#define u_isalnum u_isalnum_3_6 +#define u_isalnumPOSIX u_isalnumPOSIX_3_6 +#define u_isalpha u_isalpha_3_6 +#define u_isbase u_isbase_3_6 +#define u_isblank u_isblank_3_6 +#define u_iscntrl u_iscntrl_3_6 +#define u_isdefined u_isdefined_3_6 +#define u_isdigit u_isdigit_3_6 +#define u_isgraph u_isgraph_3_6 +#define u_isgraphPOSIX u_isgraphPOSIX_3_6 +#define u_islower u_islower_3_6 +#define u_isprint u_isprint_3_6 +#define u_isprintPOSIX u_isprintPOSIX_3_6 +#define u_ispunct u_ispunct_3_6 +#define u_isspace u_isspace_3_6 +#define u_istitle u_istitle_3_6 +#define u_isupper u_isupper_3_6 +#define u_isxdigit u_isxdigit_3_6 +#define u_lengthOfIdenticalLevelRun u_lengthOfIdenticalLevelRun_3_6 +#define u_locbund_close u_locbund_close_3_6 +#define u_locbund_getNumberFormat u_locbund_getNumberFormat_3_6 +#define u_locbund_init u_locbund_init_3_6 +#define u_memcasecmp u_memcasecmp_3_6 +#define u_memchr u_memchr_3_6 +#define u_memchr32 u_memchr32_3_6 +#define u_memcmp u_memcmp_3_6 +#define u_memcmpCodePointOrder u_memcmpCodePointOrder_3_6 +#define u_memcpy u_memcpy_3_6 +#define u_memmove u_memmove_3_6 +#define u_memrchr u_memrchr_3_6 +#define u_memrchr32 u_memrchr32_3_6 +#define u_memset u_memset_3_6 +#define u_parseMessage u_parseMessage_3_6 +#define u_parseMessageWithError u_parseMessageWithError_3_6 +#define u_printf_parse u_printf_parse_3_6 +#define u_releaseDefaultConverter u_releaseDefaultConverter_3_6 +#define u_scanf_parse u_scanf_parse_3_6 +#define u_setAtomicIncDecFunctions u_setAtomicIncDecFunctions_3_6 +#define u_setDataDirectory u_setDataDirectory_3_6 +#define u_setMemoryFunctions u_setMemoryFunctions_3_6 +#define u_setMutexFunctions u_setMutexFunctions_3_6 +#define u_shapeArabic u_shapeArabic_3_6 +#define u_snprintf u_snprintf_3_6 +#define u_snprintf_u u_snprintf_u_3_6 +#define u_sprintf u_sprintf_3_6 +#define u_sprintf_u u_sprintf_u_3_6 +#define u_sscanf u_sscanf_3_6 +#define u_sscanf_u u_sscanf_u_3_6 +#define u_strCaseCompare u_strCaseCompare_3_6 +#define u_strCompare u_strCompare_3_6 +#define u_strCompareIter u_strCompareIter_3_6 +#define u_strFindFirst u_strFindFirst_3_6 +#define u_strFindLast u_strFindLast_3_6 +#define u_strFoldCase u_strFoldCase_3_6 +#define u_strFromPunycode u_strFromPunycode_3_6 +#define u_strFromUTF32 u_strFromUTF32_3_6 +#define u_strFromUTF8 u_strFromUTF8_3_6 +#define u_strFromUTF8Lenient u_strFromUTF8Lenient_3_6 +#define u_strFromUTF8WithSub u_strFromUTF8WithSub_3_6 +#define u_strFromWCS u_strFromWCS_3_6 +#define u_strHasMoreChar32Than u_strHasMoreChar32Than_3_6 +#define u_strToLower u_strToLower_3_6 +#define u_strToPunycode u_strToPunycode_3_6 +#define u_strToTitle u_strToTitle_3_6 +#define u_strToUTF32 u_strToUTF32_3_6 +#define u_strToUTF8 u_strToUTF8_3_6 +#define u_strToUTF8WithSub u_strToUTF8WithSub_3_6 +#define u_strToUpper u_strToUpper_3_6 +#define u_strToWCS u_strToWCS_3_6 +#define u_strcasecmp u_strcasecmp_3_6 +#define u_strcat u_strcat_3_6 +#define u_strchr u_strchr_3_6 +#define u_strchr32 u_strchr32_3_6 +#define u_strcmp u_strcmp_3_6 +#define u_strcmpCodePointOrder u_strcmpCodePointOrder_3_6 +#define u_strcmpFold u_strcmpFold_3_6 +#define u_strcpy u_strcpy_3_6 +#define u_strcspn u_strcspn_3_6 +#define u_strlen u_strlen_3_6 +#define u_strncasecmp u_strncasecmp_3_6 +#define u_strncat u_strncat_3_6 +#define u_strncmp u_strncmp_3_6 +#define u_strncmpCodePointOrder u_strncmpCodePointOrder_3_6 +#define u_strncpy u_strncpy_3_6 +#define u_strpbrk u_strpbrk_3_6 +#define u_strrchr u_strrchr_3_6 +#define u_strrchr32 u_strrchr32_3_6 +#define u_strrstr u_strrstr_3_6 +#define u_strspn u_strspn_3_6 +#define u_strstr u_strstr_3_6 +#define u_strtok_r u_strtok_r_3_6 +#define u_terminateChars u_terminateChars_3_6 +#define u_terminateUChar32s u_terminateUChar32s_3_6 +#define u_terminateUChars u_terminateUChars_3_6 +#define u_terminateWChars u_terminateWChars_3_6 +#define u_tolower u_tolower_3_6 +#define u_totitle u_totitle_3_6 +#define u_toupper u_toupper_3_6 +#define u_uastrcpy u_uastrcpy_3_6 +#define u_uastrncpy u_uastrncpy_3_6 +#define u_unescape u_unescape_3_6 +#define u_unescapeAt u_unescapeAt_3_6 +#define u_versionFromString u_versionFromString_3_6 +#define u_versionToString u_versionToString_3_6 +#define u_vformatMessage u_vformatMessage_3_6 +#define u_vformatMessageWithError u_vformatMessageWithError_3_6 +#define u_vfprintf u_vfprintf_3_6 +#define u_vfprintf_u u_vfprintf_u_3_6 +#define u_vfscanf u_vfscanf_3_6 +#define u_vfscanf_u u_vfscanf_u_3_6 +#define u_vparseMessage u_vparseMessage_3_6 +#define u_vparseMessageWithError u_vparseMessageWithError_3_6 +#define u_vsnprintf u_vsnprintf_3_6 +#define u_vsnprintf_u u_vsnprintf_u_3_6 +#define u_vsprintf u_vsprintf_3_6 +#define u_vsprintf_u u_vsprintf_u_3_6 +#define u_vsscanf u_vsscanf_3_6 +#define u_vsscanf_u u_vsscanf_u_3_6 +#define u_writeDiff u_writeDiff_3_6 +#define u_writeIdenticalLevelRun u_writeIdenticalLevelRun_3_6 +#define u_writeIdenticalLevelRunTwoChars u_writeIdenticalLevelRunTwoChars_3_6 +#define ubidi_addPropertyStarts ubidi_addPropertyStarts_3_6 +#define ubidi_close ubidi_close_3_6 +#define ubidi_closeProps ubidi_closeProps_3_6 +#define ubidi_countParagraphs ubidi_countParagraphs_3_6 +#define ubidi_countRuns ubidi_countRuns_3_6 +#define ubidi_getClass ubidi_getClass_3_6 +#define ubidi_getClassCallback ubidi_getClassCallback_3_6 +#define ubidi_getCustomizedClass ubidi_getCustomizedClass_3_6 +#define ubidi_getDirection ubidi_getDirection_3_6 +#define ubidi_getDummy ubidi_getDummy_3_6 +#define ubidi_getJoiningGroup ubidi_getJoiningGroup_3_6 +#define ubidi_getJoiningType ubidi_getJoiningType_3_6 +#define ubidi_getLength ubidi_getLength_3_6 +#define ubidi_getLevelAt ubidi_getLevelAt_3_6 +#define ubidi_getLevels ubidi_getLevels_3_6 +#define ubidi_getLogicalIndex ubidi_getLogicalIndex_3_6 +#define ubidi_getLogicalMap ubidi_getLogicalMap_3_6 +#define ubidi_getLogicalRun ubidi_getLogicalRun_3_6 +#define ubidi_getMaxValue ubidi_getMaxValue_3_6 +#define ubidi_getMemory ubidi_getMemory_3_6 +#define ubidi_getMirror ubidi_getMirror_3_6 +#define ubidi_getParaLevel ubidi_getParaLevel_3_6 +#define ubidi_getParagraph ubidi_getParagraph_3_6 +#define ubidi_getParagraphByIndex ubidi_getParagraphByIndex_3_6 +#define ubidi_getProcessedLength ubidi_getProcessedLength_3_6 +#define ubidi_getReorderingMode ubidi_getReorderingMode_3_6 +#define ubidi_getReorderingOptions ubidi_getReorderingOptions_3_6 +#define ubidi_getResultLength ubidi_getResultLength_3_6 +#define ubidi_getRuns ubidi_getRuns_3_6 +#define ubidi_getSingleton ubidi_getSingleton_3_6 +#define ubidi_getText ubidi_getText_3_6 +#define ubidi_getVisualIndex ubidi_getVisualIndex_3_6 +#define ubidi_getVisualMap ubidi_getVisualMap_3_6 +#define ubidi_getVisualRun ubidi_getVisualRun_3_6 +#define ubidi_invertMap ubidi_invertMap_3_6 +#define ubidi_isBidiControl ubidi_isBidiControl_3_6 +#define ubidi_isInverse ubidi_isInverse_3_6 +#define ubidi_isJoinControl ubidi_isJoinControl_3_6 +#define ubidi_isMirrored ubidi_isMirrored_3_6 +#define ubidi_isOrderParagraphsLTR ubidi_isOrderParagraphsLTR_3_6 +#define ubidi_open ubidi_open_3_6 +#define ubidi_openSized ubidi_openSized_3_6 +#define ubidi_orderParagraphsLTR ubidi_orderParagraphsLTR_3_6 +#define ubidi_reorderLogical ubidi_reorderLogical_3_6 +#define ubidi_reorderVisual ubidi_reorderVisual_3_6 +#define ubidi_setClassCallback ubidi_setClassCallback_3_6 +#define ubidi_setInverse ubidi_setInverse_3_6 +#define ubidi_setLine ubidi_setLine_3_6 +#define ubidi_setPara ubidi_setPara_3_6 +#define ubidi_setReorderingMode ubidi_setReorderingMode_3_6 +#define ubidi_setReorderingOptions ubidi_setReorderingOptions_3_6 +#define ubidi_writeReordered ubidi_writeReordered_3_6 +#define ubidi_writeReverse ubidi_writeReverse_3_6 +#define ublock_getCode ublock_getCode_3_6 +#define ubrk_close ubrk_close_3_6 +#define ubrk_countAvailable ubrk_countAvailable_3_6 +#define ubrk_current ubrk_current_3_6 +#define ubrk_first ubrk_first_3_6 +#define ubrk_following ubrk_following_3_6 +#define ubrk_getAvailable ubrk_getAvailable_3_6 +#define ubrk_getLocaleByType ubrk_getLocaleByType_3_6 +#define ubrk_getRuleStatus ubrk_getRuleStatus_3_6 +#define ubrk_getRuleStatusVec ubrk_getRuleStatusVec_3_6 +#define ubrk_isBoundary ubrk_isBoundary_3_6 +#define ubrk_last ubrk_last_3_6 +#define ubrk_next ubrk_next_3_6 +#define ubrk_open ubrk_open_3_6 +#define ubrk_openRules ubrk_openRules_3_6 +#define ubrk_preceding ubrk_preceding_3_6 +#define ubrk_previous ubrk_previous_3_6 +#define ubrk_safeClone ubrk_safeClone_3_6 +#define ubrk_setText ubrk_setText_3_6 +#define ubrk_setUText ubrk_setUText_3_6 +#define ubrk_swap ubrk_swap_3_6 +#define ucal_add ucal_add_3_6 +#define ucal_clear ucal_clear_3_6 +#define ucal_clearField ucal_clearField_3_6 +#define ucal_close ucal_close_3_6 +#define ucal_countAvailable ucal_countAvailable_3_6 +#define ucal_equivalentTo ucal_equivalentTo_3_6 +#define ucal_get ucal_get_3_6 +#define ucal_getAttribute ucal_getAttribute_3_6 +#define ucal_getAvailable ucal_getAvailable_3_6 +#define ucal_getDSTSavings ucal_getDSTSavings_3_6 +#define ucal_getDefaultTimeZone ucal_getDefaultTimeZone_3_6 +#define ucal_getGregorianChange ucal_getGregorianChange_3_6 +#define ucal_getLimit ucal_getLimit_3_6 +#define ucal_getLocaleByType ucal_getLocaleByType_3_6 +#define ucal_getMillis ucal_getMillis_3_6 +#define ucal_getNow ucal_getNow_3_6 +#define ucal_getTimeZoneDisplayName ucal_getTimeZoneDisplayName_3_6 +#define ucal_inDaylightTime ucal_inDaylightTime_3_6 +#define ucal_isSet ucal_isSet_3_6 +#define ucal_open ucal_open_3_6 +#define ucal_openCountryTimeZones ucal_openCountryTimeZones_3_6 +#define ucal_openTimeZones ucal_openTimeZones_3_6 +#define ucal_roll ucal_roll_3_6 +#define ucal_set ucal_set_3_6 +#define ucal_setAttribute ucal_setAttribute_3_6 +#define ucal_setDate ucal_setDate_3_6 +#define ucal_setDateTime ucal_setDateTime_3_6 +#define ucal_setDefaultTimeZone ucal_setDefaultTimeZone_3_6 +#define ucal_setGregorianChange ucal_setGregorianChange_3_6 +#define ucal_setMillis ucal_setMillis_3_6 +#define ucal_setTimeZone ucal_setTimeZone_3_6 +#define ucase_addCaseClosure ucase_addCaseClosure_3_6 +#define ucase_addPropertyStarts ucase_addPropertyStarts_3_6 +#define ucase_addStringCaseClosure ucase_addStringCaseClosure_3_6 +#define ucase_close ucase_close_3_6 +#define ucase_fold ucase_fold_3_6 +#define ucase_getCaseLocale ucase_getCaseLocale_3_6 +#define ucase_getDummy ucase_getDummy_3_6 +#define ucase_getSingleton ucase_getSingleton_3_6 +#define ucase_getType ucase_getType_3_6 +#define ucase_getTypeOrIgnorable ucase_getTypeOrIgnorable_3_6 +#define ucase_hasBinaryProperty ucase_hasBinaryProperty_3_6 +#define ucase_isCaseSensitive ucase_isCaseSensitive_3_6 +#define ucase_isSoftDotted ucase_isSoftDotted_3_6 +#define ucase_toFullFolding ucase_toFullFolding_3_6 +#define ucase_toFullLower ucase_toFullLower_3_6 +#define ucase_toFullTitle ucase_toFullTitle_3_6 +#define ucase_toFullUpper ucase_toFullUpper_3_6 +#define ucase_tolower ucase_tolower_3_6 +#define ucase_totitle ucase_totitle_3_6 +#define ucase_toupper ucase_toupper_3_6 +#define ucasemap_close ucasemap_close_3_6 +#define ucasemap_getLocale ucasemap_getLocale_3_6 +#define ucasemap_getOptions ucasemap_getOptions_3_6 +#define ucasemap_open ucasemap_open_3_6 +#define ucasemap_setLocale ucasemap_setLocale_3_6 +#define ucasemap_setOptions ucasemap_setOptions_3_6 +#define ucasemap_utf8ToLower ucasemap_utf8ToLower_3_6 +#define ucasemap_utf8ToUpper ucasemap_utf8ToUpper_3_6 +#define uchar_addPropertyStarts uchar_addPropertyStarts_3_6 +#define uchar_getHST uchar_getHST_3_6 +#define uchar_swapNames uchar_swapNames_3_6 +#define ucln_common_registerCleanup ucln_common_registerCleanup_3_6 +#define ucln_i18n_registerCleanup ucln_i18n_registerCleanup_3_6 +#define ucln_io_registerCleanup ucln_io_registerCleanup_3_6 +#define ucln_lib_cleanup ucln_lib_cleanup_3_6 +#define ucln_registerCleanup ucln_registerCleanup_3_6 +#define ucnv_MBCSFromUChar32 ucnv_MBCSFromUChar32_3_6 +#define ucnv_MBCSFromUnicodeWithOffsets ucnv_MBCSFromUnicodeWithOffsets_3_6 +#define ucnv_MBCSGetType ucnv_MBCSGetType_3_6 +#define ucnv_MBCSGetUnicodeSetForBytes ucnv_MBCSGetUnicodeSetForBytes_3_6 +#define ucnv_MBCSGetUnicodeSetForUnicode ucnv_MBCSGetUnicodeSetForUnicode_3_6 +#define ucnv_MBCSIsLeadByte ucnv_MBCSIsLeadByte_3_6 +#define ucnv_MBCSSimpleGetNextUChar ucnv_MBCSSimpleGetNextUChar_3_6 +#define ucnv_MBCSToUnicodeWithOffsets ucnv_MBCSToUnicodeWithOffsets_3_6 +#define ucnv_bld_countAvailableConverters ucnv_bld_countAvailableConverters_3_6 +#define ucnv_bld_getAvailableConverter ucnv_bld_getAvailableConverter_3_6 +#define ucnv_cbFromUWriteBytes ucnv_cbFromUWriteBytes_3_6 +#define ucnv_cbFromUWriteSub ucnv_cbFromUWriteSub_3_6 +#define ucnv_cbFromUWriteUChars ucnv_cbFromUWriteUChars_3_6 +#define ucnv_cbToUWriteSub ucnv_cbToUWriteSub_3_6 +#define ucnv_cbToUWriteUChars ucnv_cbToUWriteUChars_3_6 +#define ucnv_close ucnv_close_3_6 +#define ucnv_compareNames ucnv_compareNames_3_6 +#define ucnv_convert ucnv_convert_3_6 +#define ucnv_convertEx ucnv_convertEx_3_6 +#define ucnv_countAliases ucnv_countAliases_3_6 +#define ucnv_countAvailable ucnv_countAvailable_3_6 +#define ucnv_countStandards ucnv_countStandards_3_6 +#define ucnv_createAlgorithmicConverter ucnv_createAlgorithmicConverter_3_6 +#define ucnv_createConverter ucnv_createConverter_3_6 +#define ucnv_createConverterFromPackage ucnv_createConverterFromPackage_3_6 +#define ucnv_createConverterFromSharedData ucnv_createConverterFromSharedData_3_6 +#define ucnv_detectUnicodeSignature ucnv_detectUnicodeSignature_3_6 +#define ucnv_extContinueMatchFromU ucnv_extContinueMatchFromU_3_6 +#define ucnv_extContinueMatchToU ucnv_extContinueMatchToU_3_6 +#define ucnv_extGetUnicodeSet ucnv_extGetUnicodeSet_3_6 +#define ucnv_extInitialMatchFromU ucnv_extInitialMatchFromU_3_6 +#define ucnv_extInitialMatchToU ucnv_extInitialMatchToU_3_6 +#define ucnv_extSimpleMatchFromU ucnv_extSimpleMatchFromU_3_6 +#define ucnv_extSimpleMatchToU ucnv_extSimpleMatchToU_3_6 +#define ucnv_fixFileSeparator ucnv_fixFileSeparator_3_6 +#define ucnv_flushCache ucnv_flushCache_3_6 +#define ucnv_fromAlgorithmic ucnv_fromAlgorithmic_3_6 +#define ucnv_fromUChars ucnv_fromUChars_3_6 +#define ucnv_fromUCountPending ucnv_fromUCountPending_3_6 +#define ucnv_fromUWriteBytes ucnv_fromUWriteBytes_3_6 +#define ucnv_fromUnicode ucnv_fromUnicode_3_6 +#define ucnv_fromUnicode_UTF8 ucnv_fromUnicode_UTF8_3_6 +#define ucnv_fromUnicode_UTF8_OFFSETS_LOGIC ucnv_fromUnicode_UTF8_OFFSETS_LOGIC_3_6 +#define ucnv_getAlias ucnv_getAlias_3_6 +#define ucnv_getAliases ucnv_getAliases_3_6 +#define ucnv_getAvailableName ucnv_getAvailableName_3_6 +#define ucnv_getCCSID ucnv_getCCSID_3_6 +#define ucnv_getCanonicalName ucnv_getCanonicalName_3_6 +#define ucnv_getCompleteUnicodeSet ucnv_getCompleteUnicodeSet_3_6 +#define ucnv_getDefaultName ucnv_getDefaultName_3_6 +#define ucnv_getDisplayName ucnv_getDisplayName_3_6 +#define ucnv_getFromUCallBack ucnv_getFromUCallBack_3_6 +#define ucnv_getInvalidChars ucnv_getInvalidChars_3_6 +#define ucnv_getInvalidUChars ucnv_getInvalidUChars_3_6 +#define ucnv_getMaxCharSize ucnv_getMaxCharSize_3_6 +#define ucnv_getMinCharSize ucnv_getMinCharSize_3_6 +#define ucnv_getName ucnv_getName_3_6 +#define ucnv_getNextUChar ucnv_getNextUChar_3_6 +#define ucnv_getNonSurrogateUnicodeSet ucnv_getNonSurrogateUnicodeSet_3_6 +#define ucnv_getPlatform ucnv_getPlatform_3_6 +#define ucnv_getStandard ucnv_getStandard_3_6 +#define ucnv_getStandardName ucnv_getStandardName_3_6 +#define ucnv_getStarters ucnv_getStarters_3_6 +#define ucnv_getSubstChars ucnv_getSubstChars_3_6 +#define ucnv_getToUCallBack ucnv_getToUCallBack_3_6 +#define ucnv_getType ucnv_getType_3_6 +#define ucnv_getUnicodeSet ucnv_getUnicodeSet_3_6 +#define ucnv_incrementRefCount ucnv_incrementRefCount_3_6 +#define ucnv_io_countTotalAliases ucnv_io_countTotalAliases_3_6 +#define ucnv_io_getConverterName ucnv_io_getConverterName_3_6 +#define ucnv_io_stripASCIIForCompare ucnv_io_stripASCIIForCompare_3_6 +#define ucnv_io_stripEBCDICForCompare ucnv_io_stripEBCDICForCompare_3_6 +#define ucnv_isAmbiguous ucnv_isAmbiguous_3_6 +#define ucnv_load ucnv_load_3_6 +#define ucnv_loadSharedData ucnv_loadSharedData_3_6 +#define ucnv_open ucnv_open_3_6 +#define ucnv_openAllNames ucnv_openAllNames_3_6 +#define ucnv_openCCSID ucnv_openCCSID_3_6 +#define ucnv_openPackage ucnv_openPackage_3_6 +#define ucnv_openStandardNames ucnv_openStandardNames_3_6 +#define ucnv_openU ucnv_openU_3_6 +#define ucnv_reset ucnv_reset_3_6 +#define ucnv_resetFromUnicode ucnv_resetFromUnicode_3_6 +#define ucnv_resetToUnicode ucnv_resetToUnicode_3_6 +#define ucnv_safeClone ucnv_safeClone_3_6 +#define ucnv_setDefaultName ucnv_setDefaultName_3_6 +#define ucnv_setFallback ucnv_setFallback_3_6 +#define ucnv_setFromUCallBack ucnv_setFromUCallBack_3_6 +#define ucnv_setSubstChars ucnv_setSubstChars_3_6 +#define ucnv_setSubstString ucnv_setSubstString_3_6 +#define ucnv_setToUCallBack ucnv_setToUCallBack_3_6 +#define ucnv_swap ucnv_swap_3_6 +#define ucnv_swapAliases ucnv_swapAliases_3_6 +#define ucnv_toAlgorithmic ucnv_toAlgorithmic_3_6 +#define ucnv_toUChars ucnv_toUChars_3_6 +#define ucnv_toUCountPending ucnv_toUCountPending_3_6 +#define ucnv_toUWriteCodePoint ucnv_toUWriteCodePoint_3_6 +#define ucnv_toUWriteUChars ucnv_toUWriteUChars_3_6 +#define ucnv_toUnicode ucnv_toUnicode_3_6 +#define ucnv_unload ucnv_unload_3_6 +#define ucnv_unloadSharedDataIfReady ucnv_unloadSharedDataIfReady_3_6 +#define ucnv_usesFallback ucnv_usesFallback_3_6 +#define ucol_allocWeights ucol_allocWeights_3_6 +#define ucol_assembleTailoringTable ucol_assembleTailoringTable_3_6 +#define ucol_calcSortKey ucol_calcSortKey_3_6 +#define ucol_calcSortKeySimpleTertiary ucol_calcSortKeySimpleTertiary_3_6 +#define ucol_cloneBinary ucol_cloneBinary_3_6 +#define ucol_cloneRuleData ucol_cloneRuleData_3_6 +#define ucol_close ucol_close_3_6 +#define ucol_closeElements ucol_closeElements_3_6 +#define ucol_collatorToIdentifier ucol_collatorToIdentifier_3_6 +#define ucol_countAvailable ucol_countAvailable_3_6 +#define ucol_createElements ucol_createElements_3_6 +#define ucol_doCE ucol_doCE_3_6 +#define ucol_equal ucol_equal_3_6 +#define ucol_equals ucol_equals_3_6 +#define ucol_forgetUCA ucol_forgetUCA_3_6 +#define ucol_getAttribute ucol_getAttribute_3_6 +#define ucol_getAttributeOrDefault ucol_getAttributeOrDefault_3_6 +#define ucol_getAvailable ucol_getAvailable_3_6 +#define ucol_getBound ucol_getBound_3_6 +#define ucol_getCEGenerator ucol_getCEGenerator_3_6 +#define ucol_getCEStrengthDifference ucol_getCEStrengthDifference_3_6 +#define ucol_getContractions ucol_getContractions_3_6 +#define ucol_getContractionsAndExpansions ucol_getContractionsAndExpansions_3_6 +#define ucol_getDisplayName ucol_getDisplayName_3_6 +#define ucol_getFirstCE ucol_getFirstCE_3_6 +#define ucol_getFunctionalEquivalent ucol_getFunctionalEquivalent_3_6 +#define ucol_getKeywordValues ucol_getKeywordValues_3_6 +#define ucol_getKeywords ucol_getKeywords_3_6 +#define ucol_getLocale ucol_getLocale_3_6 +#define ucol_getLocaleByType ucol_getLocaleByType_3_6 +#define ucol_getMaxExpansion ucol_getMaxExpansion_3_6 +#define ucol_getNextCE ucol_getNextCE_3_6 +#define ucol_getNextGenerated ucol_getNextGenerated_3_6 +#define ucol_getOffset ucol_getOffset_3_6 +#define ucol_getPrevCE ucol_getPrevCE_3_6 +#define ucol_getRules ucol_getRules_3_6 +#define ucol_getRulesEx ucol_getRulesEx_3_6 +#define ucol_getShortDefinitionString ucol_getShortDefinitionString_3_6 +#define ucol_getSimpleCEGenerator ucol_getSimpleCEGenerator_3_6 +#define ucol_getSortKey ucol_getSortKey_3_6 +#define ucol_getSortKeySize ucol_getSortKeySize_3_6 +#define ucol_getSortKeyWithAllocation ucol_getSortKeyWithAllocation_3_6 +#define ucol_getStrength ucol_getStrength_3_6 +#define ucol_getTailoredSet ucol_getTailoredSet_3_6 +#define ucol_getUCAVersion ucol_getUCAVersion_3_6 +#define ucol_getUnsafeSet ucol_getUnsafeSet_3_6 +#define ucol_getVariableTop ucol_getVariableTop_3_6 +#define ucol_getVersion ucol_getVersion_3_6 +#define ucol_greater ucol_greater_3_6 +#define ucol_greaterOrEqual ucol_greaterOrEqual_3_6 +#define ucol_identifierToShortString ucol_identifierToShortString_3_6 +#define ucol_initBuffers ucol_initBuffers_3_6 +#define ucol_initCollator ucol_initCollator_3_6 +#define ucol_initInverseUCA ucol_initInverseUCA_3_6 +#define ucol_initUCA ucol_initUCA_3_6 +#define ucol_inv_getGapPositions ucol_inv_getGapPositions_3_6 +#define ucol_inv_getNextCE ucol_inv_getNextCE_3_6 +#define ucol_inv_getPrevCE ucol_inv_getPrevCE_3_6 +#define ucol_isTailored ucol_isTailored_3_6 +#define ucol_keyHashCode ucol_keyHashCode_3_6 +#define ucol_mergeSortkeys ucol_mergeSortkeys_3_6 +#define ucol_next ucol_next_3_6 +#define ucol_nextSortKeyPart ucol_nextSortKeyPart_3_6 +#define ucol_nextWeight ucol_nextWeight_3_6 +#define ucol_normalizeShortDefinitionString ucol_normalizeShortDefinitionString_3_6 +#define ucol_open ucol_open_3_6 +#define ucol_openAvailableLocales ucol_openAvailableLocales_3_6 +#define ucol_openBinary ucol_openBinary_3_6 +#define ucol_openElements ucol_openElements_3_6 +#define ucol_openFromIdentifier ucol_openFromIdentifier_3_6 +#define ucol_openFromShortString ucol_openFromShortString_3_6 +#define ucol_openRules ucol_openRules_3_6 +#define ucol_open_internal ucol_open_internal_3_6 +#define ucol_prepareShortStringOpen ucol_prepareShortStringOpen_3_6 +#define ucol_previous ucol_previous_3_6 +#define ucol_primaryOrder ucol_primaryOrder_3_6 +#define ucol_prv_getSpecialCE ucol_prv_getSpecialCE_3_6 +#define ucol_prv_getSpecialPrevCE ucol_prv_getSpecialPrevCE_3_6 +#define ucol_reset ucol_reset_3_6 +#define ucol_restoreVariableTop ucol_restoreVariableTop_3_6 +#define ucol_safeClone ucol_safeClone_3_6 +#define ucol_secondaryOrder ucol_secondaryOrder_3_6 +#define ucol_setAttribute ucol_setAttribute_3_6 +#define ucol_setOffset ucol_setOffset_3_6 +#define ucol_setOptionsFromHeader ucol_setOptionsFromHeader_3_6 +#define ucol_setReqValidLocales ucol_setReqValidLocales_3_6 +#define ucol_setStrength ucol_setStrength_3_6 +#define ucol_setText ucol_setText_3_6 +#define ucol_setVariableTop ucol_setVariableTop_3_6 +#define ucol_shortStringToIdentifier ucol_shortStringToIdentifier_3_6 +#define ucol_strcoll ucol_strcoll_3_6 +#define ucol_strcollIter ucol_strcollIter_3_6 +#define ucol_swap ucol_swap_3_6 +#define ucol_swapBinary ucol_swapBinary_3_6 +#define ucol_swapInverseUCA ucol_swapInverseUCA_3_6 +#define ucol_tertiaryOrder ucol_tertiaryOrder_3_6 +#define ucol_tok_assembleTokenList ucol_tok_assembleTokenList_3_6 +#define ucol_tok_closeTokenList ucol_tok_closeTokenList_3_6 +#define ucol_tok_getNextArgument ucol_tok_getNextArgument_3_6 +#define ucol_tok_initTokenList ucol_tok_initTokenList_3_6 +#define ucol_tok_parseNextToken ucol_tok_parseNextToken_3_6 +#define ucol_updateInternalState ucol_updateInternalState_3_6 +#define ucsdet_close ucsdet_close_3_6 +#define ucsdet_detect ucsdet_detect_3_6 +#define ucsdet_detectAll ucsdet_detectAll_3_6 +#define ucsdet_enableInputFilter ucsdet_enableInputFilter_3_6 +#define ucsdet_getAllDetectableCharsets ucsdet_getAllDetectableCharsets_3_6 +#define ucsdet_getConfidence ucsdet_getConfidence_3_6 +#define ucsdet_getLanguage ucsdet_getLanguage_3_6 +#define ucsdet_getName ucsdet_getName_3_6 +#define ucsdet_getUChars ucsdet_getUChars_3_6 +#define ucsdet_isInputFilterEnabled ucsdet_isInputFilterEnabled_3_6 +#define ucsdet_open ucsdet_open_3_6 +#define ucsdet_setDeclaredEncoding ucsdet_setDeclaredEncoding_3_6 +#define ucsdet_setText ucsdet_setText_3_6 +#define ucurr_forLocale ucurr_forLocale_3_6 +#define ucurr_getDefaultFractionDigits ucurr_getDefaultFractionDigits_3_6 +#define ucurr_getName ucurr_getName_3_6 +#define ucurr_getRoundingIncrement ucurr_getRoundingIncrement_3_6 +#define ucurr_openISOCurrencies ucurr_openISOCurrencies_3_6 +#define ucurr_register ucurr_register_3_6 +#define ucurr_unregister ucurr_unregister_3_6 +#define udat_applyPattern udat_applyPattern_3_6 +#define udat_clone udat_clone_3_6 +#define udat_close udat_close_3_6 +#define udat_countAvailable udat_countAvailable_3_6 +#define udat_countSymbols udat_countSymbols_3_6 +#define udat_format udat_format_3_6 +#define udat_get2DigitYearStart udat_get2DigitYearStart_3_6 +#define udat_getAvailable udat_getAvailable_3_6 +#define udat_getCalendar udat_getCalendar_3_6 +#define udat_getLocaleByType udat_getLocaleByType_3_6 +#define udat_getNumberFormat udat_getNumberFormat_3_6 +#define udat_getSymbols udat_getSymbols_3_6 +#define udat_isLenient udat_isLenient_3_6 +#define udat_open udat_open_3_6 +#define udat_parse udat_parse_3_6 +#define udat_parseCalendar udat_parseCalendar_3_6 +#define udat_set2DigitYearStart udat_set2DigitYearStart_3_6 +#define udat_setCalendar udat_setCalendar_3_6 +#define udat_setLenient udat_setLenient_3_6 +#define udat_setNumberFormat udat_setNumberFormat_3_6 +#define udat_setSymbols udat_setSymbols_3_6 +#define udat_toPattern udat_toPattern_3_6 +#define udata_checkCommonData udata_checkCommonData_3_6 +#define udata_close udata_close_3_6 +#define udata_closeSwapper udata_closeSwapper_3_6 +#define udata_getHeaderSize udata_getHeaderSize_3_6 +#define udata_getInfo udata_getInfo_3_6 +#define udata_getInfoSize udata_getInfoSize_3_6 +#define udata_getLength udata_getLength_3_6 +#define udata_getMemory udata_getMemory_3_6 +#define udata_getRawMemory udata_getRawMemory_3_6 +#define udata_open udata_open_3_6 +#define udata_openChoice udata_openChoice_3_6 +#define udata_openSwapper udata_openSwapper_3_6 +#define udata_openSwapperForInputData udata_openSwapperForInputData_3_6 +#define udata_printError udata_printError_3_6 +#define udata_readInt16 udata_readInt16_3_6 +#define udata_readInt32 udata_readInt32_3_6 +#define udata_setAppData udata_setAppData_3_6 +#define udata_setCommonData udata_setCommonData_3_6 +#define udata_setFileAccess udata_setFileAccess_3_6 +#define udata_swapDataHeader udata_swapDataHeader_3_6 +#define udata_swapInvStringBlock udata_swapInvStringBlock_3_6 +#define uenum_close uenum_close_3_6 +#define uenum_count uenum_count_3_6 +#define uenum_next uenum_next_3_6 +#define uenum_nextDefault uenum_nextDefault_3_6 +#define uenum_openCharStringsEnumeration uenum_openCharStringsEnumeration_3_6 +#define uenum_openStringEnumeration uenum_openStringEnumeration_3_6 +#define uenum_reset uenum_reset_3_6 +#define uenum_unext uenum_unext_3_6 +#define uenum_unextDefault uenum_unextDefault_3_6 +#define ufile_close_translit ufile_close_translit_3_6 +#define ufile_fill_uchar_buffer ufile_fill_uchar_buffer_3_6 +#define ufile_flush_translit ufile_flush_translit_3_6 +#define ufile_getch ufile_getch_3_6 +#define ufile_getch32 ufile_getch32_3_6 +#define ufmt_64tou ufmt_64tou_3_6 +#define ufmt_defaultCPToUnicode ufmt_defaultCPToUnicode_3_6 +#define ufmt_digitvalue ufmt_digitvalue_3_6 +#define ufmt_isdigit ufmt_isdigit_3_6 +#define ufmt_ptou ufmt_ptou_3_6 +#define ufmt_uto64 ufmt_uto64_3_6 +#define ufmt_utop ufmt_utop_3_6 +#define uhash_close uhash_close_3_6 +#define uhash_compareCaselessUnicodeString uhash_compareCaselessUnicodeString_3_6 +#define uhash_compareChars uhash_compareChars_3_6 +#define uhash_compareIChars uhash_compareIChars_3_6 +#define uhash_compareLong uhash_compareLong_3_6 +#define uhash_compareUChars uhash_compareUChars_3_6 +#define uhash_compareUnicodeString uhash_compareUnicodeString_3_6 +#define uhash_count uhash_count_3_6 +#define uhash_deleteHashtable uhash_deleteHashtable_3_6 +#define uhash_deleteUVector uhash_deleteUVector_3_6 +#define uhash_deleteUnicodeString uhash_deleteUnicodeString_3_6 +#define uhash_equals uhash_equals_3_6 +#define uhash_find uhash_find_3_6 +#define uhash_freeBlock uhash_freeBlock_3_6 +#define uhash_get uhash_get_3_6 +#define uhash_geti uhash_geti_3_6 +#define uhash_hashCaselessUnicodeString uhash_hashCaselessUnicodeString_3_6 +#define uhash_hashChars uhash_hashChars_3_6 +#define uhash_hashIChars uhash_hashIChars_3_6 +#define uhash_hashLong uhash_hashLong_3_6 +#define uhash_hashUChars uhash_hashUChars_3_6 +#define uhash_hashUCharsN uhash_hashUCharsN_3_6 +#define uhash_hashUnicodeString uhash_hashUnicodeString_3_6 +#define uhash_iget uhash_iget_3_6 +#define uhash_igeti uhash_igeti_3_6 +#define uhash_init uhash_init_3_6 +#define uhash_iput uhash_iput_3_6 +#define uhash_iputi uhash_iputi_3_6 +#define uhash_iremove uhash_iremove_3_6 +#define uhash_iremovei uhash_iremovei_3_6 +#define uhash_nextElement uhash_nextElement_3_6 +#define uhash_open uhash_open_3_6 +#define uhash_openSize uhash_openSize_3_6 +#define uhash_put uhash_put_3_6 +#define uhash_puti uhash_puti_3_6 +#define uhash_remove uhash_remove_3_6 +#define uhash_removeAll uhash_removeAll_3_6 +#define uhash_removeElement uhash_removeElement_3_6 +#define uhash_removei uhash_removei_3_6 +#define uhash_setKeyComparator uhash_setKeyComparator_3_6 +#define uhash_setKeyDeleter uhash_setKeyDeleter_3_6 +#define uhash_setKeyHasher uhash_setKeyHasher_3_6 +#define uhash_setResizePolicy uhash_setResizePolicy_3_6 +#define uhash_setValueComparator uhash_setValueComparator_3_6 +#define uhash_setValueDeleter uhash_setValueDeleter_3_6 +#define uhst_addPropertyStarts uhst_addPropertyStarts_3_6 +#define uidna_IDNToASCII uidna_IDNToASCII_3_6 +#define uidna_IDNToUnicode uidna_IDNToUnicode_3_6 +#define uidna_compare uidna_compare_3_6 +#define uidna_toASCII uidna_toASCII_3_6 +#define uidna_toUnicode uidna_toUnicode_3_6 +#define uiter_current32 uiter_current32_3_6 +#define uiter_getState uiter_getState_3_6 +#define uiter_next32 uiter_next32_3_6 +#define uiter_previous32 uiter_previous32_3_6 +#define uiter_setCharacterIterator uiter_setCharacterIterator_3_6 +#define uiter_setReplaceable uiter_setReplaceable_3_6 +#define uiter_setState uiter_setState_3_6 +#define uiter_setString uiter_setString_3_6 +#define uiter_setUTF16BE uiter_setUTF16BE_3_6 +#define uiter_setUTF8 uiter_setUTF8_3_6 +#define uloc_acceptLanguage uloc_acceptLanguage_3_6 +#define uloc_acceptLanguageFromHTTP uloc_acceptLanguageFromHTTP_3_6 +#define uloc_canonicalize uloc_canonicalize_3_6 +#define uloc_countAvailable uloc_countAvailable_3_6 +#define uloc_getAvailable uloc_getAvailable_3_6 +#define uloc_getBaseName uloc_getBaseName_3_6 +#define uloc_getCountry uloc_getCountry_3_6 +#define uloc_getDefault uloc_getDefault_3_6 +#define uloc_getDisplayCountry uloc_getDisplayCountry_3_6 +#define uloc_getDisplayKeyword uloc_getDisplayKeyword_3_6 +#define uloc_getDisplayKeywordValue uloc_getDisplayKeywordValue_3_6 +#define uloc_getDisplayLanguage uloc_getDisplayLanguage_3_6 +#define uloc_getDisplayName uloc_getDisplayName_3_6 +#define uloc_getDisplayScript uloc_getDisplayScript_3_6 +#define uloc_getDisplayVariant uloc_getDisplayVariant_3_6 +#define uloc_getISO3Country uloc_getISO3Country_3_6 +#define uloc_getISO3Language uloc_getISO3Language_3_6 +#define uloc_getISOCountries uloc_getISOCountries_3_6 +#define uloc_getISOLanguages uloc_getISOLanguages_3_6 +#define uloc_getKeywordValue uloc_getKeywordValue_3_6 +#define uloc_getLCID uloc_getLCID_3_6 +#define uloc_getLanguage uloc_getLanguage_3_6 +#define uloc_getLocaleForLCID uloc_getLocaleForLCID_3_6 +#define uloc_getName uloc_getName_3_6 +#define uloc_getParent uloc_getParent_3_6 +#define uloc_getScript uloc_getScript_3_6 +#define uloc_getVariant uloc_getVariant_3_6 +#define uloc_openKeywordList uloc_openKeywordList_3_6 +#define uloc_openKeywords uloc_openKeywords_3_6 +#define uloc_setDefault uloc_setDefault_3_6 +#define uloc_setKeywordValue uloc_setKeywordValue_3_6 +#define ulocdata_close ulocdata_close_3_6 +#define ulocdata_getDelimiter ulocdata_getDelimiter_3_6 +#define ulocdata_getExemplarSet ulocdata_getExemplarSet_3_6 +#define ulocdata_getMeasurementSystem ulocdata_getMeasurementSystem_3_6 +#define ulocdata_getNoSubstitute ulocdata_getNoSubstitute_3_6 +#define ulocdata_getPaperSize ulocdata_getPaperSize_3_6 +#define ulocdata_open ulocdata_open_3_6 +#define ulocdata_setNoSubstitute ulocdata_setNoSubstitute_3_6 +#define umsg_applyPattern umsg_applyPattern_3_6 +#define umsg_autoQuoteApostrophe umsg_autoQuoteApostrophe_3_6 +#define umsg_clone umsg_clone_3_6 +#define umsg_close umsg_close_3_6 +#define umsg_format umsg_format_3_6 +#define umsg_getLocale umsg_getLocale_3_6 +#define umsg_open umsg_open_3_6 +#define umsg_parse umsg_parse_3_6 +#define umsg_setLocale umsg_setLocale_3_6 +#define umsg_toPattern umsg_toPattern_3_6 +#define umsg_vformat umsg_vformat_3_6 +#define umsg_vparse umsg_vparse_3_6 +#define umtx_atomic_dec umtx_atomic_dec_3_6 +#define umtx_atomic_inc umtx_atomic_inc_3_6 +#define umtx_cleanup umtx_cleanup_3_6 +#define umtx_destroy umtx_destroy_3_6 +#define umtx_init umtx_init_3_6 +#define umtx_lock umtx_lock_3_6 +#define umtx_unlock umtx_unlock_3_6 +#define unorm_addPropertyStarts unorm_addPropertyStarts_3_6 +#define unorm_closeIter unorm_closeIter_3_6 +#define unorm_compare unorm_compare_3_6 +#define unorm_compose unorm_compose_3_6 +#define unorm_concatenate unorm_concatenate_3_6 +#define unorm_decompose unorm_decompose_3_6 +#define unorm_getCanonStartSet unorm_getCanonStartSet_3_6 +#define unorm_getCanonicalDecomposition unorm_getCanonicalDecomposition_3_6 +#define unorm_getDecomposition unorm_getDecomposition_3_6 +#define unorm_getFCD16FromCodePoint unorm_getFCD16FromCodePoint_3_6 +#define unorm_getFCDTrie unorm_getFCDTrie_3_6 +#define unorm_getNX unorm_getNX_3_6 +#define unorm_getQuickCheck unorm_getQuickCheck_3_6 +#define unorm_getUnicodeVersion unorm_getUnicodeVersion_3_6 +#define unorm_haveData unorm_haveData_3_6 +#define unorm_internalIsFullCompositionExclusion unorm_internalIsFullCompositionExclusion_3_6 +#define unorm_internalNormalize unorm_internalNormalize_3_6 +#define unorm_internalNormalizeWithNX unorm_internalNormalizeWithNX_3_6 +#define unorm_internalQuickCheck unorm_internalQuickCheck_3_6 +#define unorm_isCanonSafeStart unorm_isCanonSafeStart_3_6 +#define unorm_isNFSkippable unorm_isNFSkippable_3_6 +#define unorm_isNormalized unorm_isNormalized_3_6 +#define unorm_isNormalizedWithOptions unorm_isNormalizedWithOptions_3_6 +#define unorm_next unorm_next_3_6 +#define unorm_normalize unorm_normalize_3_6 +#define unorm_openIter unorm_openIter_3_6 +#define unorm_previous unorm_previous_3_6 +#define unorm_quickCheck unorm_quickCheck_3_6 +#define unorm_quickCheckWithOptions unorm_quickCheckWithOptions_3_6 +#define unorm_setIter unorm_setIter_3_6 +#define unum_applyPattern unum_applyPattern_3_6 +#define unum_clone unum_clone_3_6 +#define unum_close unum_close_3_6 +#define unum_countAvailable unum_countAvailable_3_6 +#define unum_format unum_format_3_6 +#define unum_formatDouble unum_formatDouble_3_6 +#define unum_formatDoubleCurrency unum_formatDoubleCurrency_3_6 +#define unum_formatInt64 unum_formatInt64_3_6 +#define unum_getAttribute unum_getAttribute_3_6 +#define unum_getAvailable unum_getAvailable_3_6 +#define unum_getDoubleAttribute unum_getDoubleAttribute_3_6 +#define unum_getLocaleByType unum_getLocaleByType_3_6 +#define unum_getSymbol unum_getSymbol_3_6 +#define unum_getTextAttribute unum_getTextAttribute_3_6 +#define unum_open unum_open_3_6 +#define unum_parse unum_parse_3_6 +#define unum_parseDouble unum_parseDouble_3_6 +#define unum_parseDoubleCurrency unum_parseDoubleCurrency_3_6 +#define unum_parseInt64 unum_parseInt64_3_6 +#define unum_setAttribute unum_setAttribute_3_6 +#define unum_setDoubleAttribute unum_setDoubleAttribute_3_6 +#define unum_setSymbol unum_setSymbol_3_6 +#define unum_setTextAttribute unum_setTextAttribute_3_6 +#define unum_toPattern unum_toPattern_3_6 +#define upname_swap upname_swap_3_6 +#define uprops_getSource uprops_getSource_3_6 +#define upropsvec_addPropertyStarts upropsvec_addPropertyStarts_3_6 +#define uprv_asciiFromEbcdic uprv_asciiFromEbcdic_3_6 +#define uprv_asciitolower uprv_asciitolower_3_6 +#define uprv_ceil uprv_ceil_3_6 +#define uprv_cnttab_addContraction uprv_cnttab_addContraction_3_6 +#define uprv_cnttab_changeContraction uprv_cnttab_changeContraction_3_6 +#define uprv_cnttab_changeLastCE uprv_cnttab_changeLastCE_3_6 +#define uprv_cnttab_clone uprv_cnttab_clone_3_6 +#define uprv_cnttab_close uprv_cnttab_close_3_6 +#define uprv_cnttab_constructTable uprv_cnttab_constructTable_3_6 +#define uprv_cnttab_findCE uprv_cnttab_findCE_3_6 +#define uprv_cnttab_findCP uprv_cnttab_findCP_3_6 +#define uprv_cnttab_getCE uprv_cnttab_getCE_3_6 +#define uprv_cnttab_insertContraction uprv_cnttab_insertContraction_3_6 +#define uprv_cnttab_isTailored uprv_cnttab_isTailored_3_6 +#define uprv_cnttab_open uprv_cnttab_open_3_6 +#define uprv_cnttab_setContraction uprv_cnttab_setContraction_3_6 +#define uprv_compareASCIIPropertyNames uprv_compareASCIIPropertyNames_3_6 +#define uprv_compareEBCDICPropertyNames uprv_compareEBCDICPropertyNames_3_6 +#define uprv_compareInvAscii uprv_compareInvAscii_3_6 +#define uprv_compareInvEbcdic uprv_compareInvEbcdic_3_6 +#define uprv_convertToLCID uprv_convertToLCID_3_6 +#define uprv_convertToPosix uprv_convertToPosix_3_6 +#define uprv_copyAscii uprv_copyAscii_3_6 +#define uprv_copyEbcdic uprv_copyEbcdic_3_6 +#define uprv_ebcdicFromAscii uprv_ebcdicFromAscii_3_6 +#define uprv_ebcdictolower uprv_ebcdictolower_3_6 +#define uprv_fabs uprv_fabs_3_6 +#define uprv_floor uprv_floor_3_6 +#define uprv_fmax uprv_fmax_3_6 +#define uprv_fmin uprv_fmin_3_6 +#define uprv_fmod uprv_fmod_3_6 +#define uprv_free uprv_free_3_6 +#define uprv_getCharNameCharacters uprv_getCharNameCharacters_3_6 +#define uprv_getDefaultCodepage uprv_getDefaultCodepage_3_6 +#define uprv_getDefaultLocaleID uprv_getDefaultLocaleID_3_6 +#define uprv_getInfinity uprv_getInfinity_3_6 +#define uprv_getMaxCharNameLength uprv_getMaxCharNameLength_3_6 +#define uprv_getMaxValues uprv_getMaxValues_3_6 +#define uprv_getNaN uprv_getNaN_3_6 +#define uprv_getStaticCurrencyName uprv_getStaticCurrencyName_3_6 +#define uprv_getUTCtime uprv_getUTCtime_3_6 +#define uprv_haveProperties uprv_haveProperties_3_6 +#define uprv_init_collIterate uprv_init_collIterate_3_6 +#define uprv_int32Comparator uprv_int32Comparator_3_6 +#define uprv_isInfinite uprv_isInfinite_3_6 +#define uprv_isInvariantString uprv_isInvariantString_3_6 +#define uprv_isInvariantUString uprv_isInvariantUString_3_6 +#define uprv_isNaN uprv_isNaN_3_6 +#define uprv_isNegativeInfinity uprv_isNegativeInfinity_3_6 +#define uprv_isPositiveInfinity uprv_isPositiveInfinity_3_6 +#define uprv_isRuleWhiteSpace uprv_isRuleWhiteSpace_3_6 +#define uprv_itou uprv_itou_3_6 +#define uprv_log uprv_log_3_6 +#define uprv_malloc uprv_malloc_3_6 +#define uprv_mapFile uprv_mapFile_3_6 +#define uprv_max uprv_max_3_6 +#define uprv_maxMantissa uprv_maxMantissa_3_6 +#define uprv_min uprv_min_3_6 +#define uprv_modf uprv_modf_3_6 +#define uprv_openRuleWhiteSpaceSet uprv_openRuleWhiteSpaceSet_3_6 +#define uprv_parseCurrency uprv_parseCurrency_3_6 +#define uprv_pathIsAbsolute uprv_pathIsAbsolute_3_6 +#define uprv_pow uprv_pow_3_6 +#define uprv_pow10 uprv_pow10_3_6 +#define uprv_realloc uprv_realloc_3_6 +#define uprv_round uprv_round_3_6 +#define uprv_sortArray uprv_sortArray_3_6 +#define uprv_strCompare uprv_strCompare_3_6 +#define uprv_strdup uprv_strdup_3_6 +#define uprv_strndup uprv_strndup_3_6 +#define uprv_syntaxError uprv_syntaxError_3_6 +#define uprv_timezone uprv_timezone_3_6 +#define uprv_toupper uprv_toupper_3_6 +#define uprv_trunc uprv_trunc_3_6 +#define uprv_tzname uprv_tzname_3_6 +#define uprv_tzset uprv_tzset_3_6 +#define uprv_uca_addAnElement uprv_uca_addAnElement_3_6 +#define uprv_uca_assembleTable uprv_uca_assembleTable_3_6 +#define uprv_uca_canonicalClosure uprv_uca_canonicalClosure_3_6 +#define uprv_uca_cloneTempTable uprv_uca_cloneTempTable_3_6 +#define uprv_uca_closeTempTable uprv_uca_closeTempTable_3_6 +#define uprv_uca_getCodePointFromRaw uprv_uca_getCodePointFromRaw_3_6 +#define uprv_uca_getImplicitFromRaw uprv_uca_getImplicitFromRaw_3_6 +#define uprv_uca_getImplicitPrimary uprv_uca_getImplicitPrimary_3_6 +#define uprv_uca_getRawFromCodePoint uprv_uca_getRawFromCodePoint_3_6 +#define uprv_uca_getRawFromImplicit uprv_uca_getRawFromImplicit_3_6 +#define uprv_uca_initImplicitConstants uprv_uca_initImplicitConstants_3_6 +#define uprv_uca_initTempTable uprv_uca_initTempTable_3_6 +#define uprv_uint16Comparator uprv_uint16Comparator_3_6 +#define uprv_uint32Comparator uprv_uint32Comparator_3_6 +#define uprv_unmapFile uprv_unmapFile_3_6 +#define uregex_appendReplacement uregex_appendReplacement_3_6 +#define uregex_appendTail uregex_appendTail_3_6 +#define uregex_clone uregex_clone_3_6 +#define uregex_close uregex_close_3_6 +#define uregex_end uregex_end_3_6 +#define uregex_find uregex_find_3_6 +#define uregex_findNext uregex_findNext_3_6 +#define uregex_flags uregex_flags_3_6 +#define uregex_getText uregex_getText_3_6 +#define uregex_group uregex_group_3_6 +#define uregex_groupCount uregex_groupCount_3_6 +#define uregex_lookingAt uregex_lookingAt_3_6 +#define uregex_matches uregex_matches_3_6 +#define uregex_open uregex_open_3_6 +#define uregex_openC uregex_openC_3_6 +#define uregex_pattern uregex_pattern_3_6 +#define uregex_replaceAll uregex_replaceAll_3_6 +#define uregex_replaceFirst uregex_replaceFirst_3_6 +#define uregex_reset uregex_reset_3_6 +#define uregex_setText uregex_setText_3_6 +#define uregex_split uregex_split_3_6 +#define uregex_start uregex_start_3_6 +#define ures_clone ures_clone_3_6 +#define ures_close ures_close_3_6 +#define ures_copyResb ures_copyResb_3_6 +#define ures_countArrayItems ures_countArrayItems_3_6 +#define ures_equal ures_equal_3_6 +#define ures_findResource ures_findResource_3_6 +#define ures_findSubResource ures_findSubResource_3_6 +#define ures_getBinary ures_getBinary_3_6 +#define ures_getByIndex ures_getByIndex_3_6 +#define ures_getByKey ures_getByKey_3_6 +#define ures_getByKeyWithFallback ures_getByKeyWithFallback_3_6 +#define ures_getFunctionalEquivalent ures_getFunctionalEquivalent_3_6 +#define ures_getInt ures_getInt_3_6 +#define ures_getIntVector ures_getIntVector_3_6 +#define ures_getKey ures_getKey_3_6 +#define ures_getKeywordValues ures_getKeywordValues_3_6 +#define ures_getLocale ures_getLocale_3_6 +#define ures_getLocaleByType ures_getLocaleByType_3_6 +#define ures_getName ures_getName_3_6 +#define ures_getNextResource ures_getNextResource_3_6 +#define ures_getNextString ures_getNextString_3_6 +#define ures_getParentBundle ures_getParentBundle_3_6 +#define ures_getPath ures_getPath_3_6 +#define ures_getSize ures_getSize_3_6 +#define ures_getString ures_getString_3_6 +#define ures_getStringByIndex ures_getStringByIndex_3_6 +#define ures_getStringByKey ures_getStringByKey_3_6 +#define ures_getStringByKeyWithFallback ures_getStringByKeyWithFallback_3_6 +#define ures_getType ures_getType_3_6 +#define ures_getUInt ures_getUInt_3_6 +#define ures_getUTF8String ures_getUTF8String_3_6 +#define ures_getUTF8StringByIndex ures_getUTF8StringByIndex_3_6 +#define ures_getUTF8StringByKey ures_getUTF8StringByKey_3_6 +#define ures_getVersion ures_getVersion_3_6 +#define ures_getVersionNumber ures_getVersionNumber_3_6 +#define ures_hasNext ures_hasNext_3_6 +#define ures_initStackObject ures_initStackObject_3_6 +#define ures_open ures_open_3_6 +#define ures_openAvailableLocales ures_openAvailableLocales_3_6 +#define ures_openDirect ures_openDirect_3_6 +#define ures_openFillIn ures_openFillIn_3_6 +#define ures_openU ures_openU_3_6 +#define ures_resetIterator ures_resetIterator_3_6 +#define ures_swap ures_swap_3_6 +#define uscript_closeRun uscript_closeRun_3_6 +#define uscript_getCode uscript_getCode_3_6 +#define uscript_getName uscript_getName_3_6 +#define uscript_getScript uscript_getScript_3_6 +#define uscript_getShortName uscript_getShortName_3_6 +#define uscript_nextRun uscript_nextRun_3_6 +#define uscript_openRun uscript_openRun_3_6 +#define uscript_resetRun uscript_resetRun_3_6 +#define uscript_setRunText uscript_setRunText_3_6 +#define usearch_close usearch_close_3_6 +#define usearch_first usearch_first_3_6 +#define usearch_following usearch_following_3_6 +#define usearch_getAttribute usearch_getAttribute_3_6 +#define usearch_getBreakIterator usearch_getBreakIterator_3_6 +#define usearch_getCollator usearch_getCollator_3_6 +#define usearch_getMatchedLength usearch_getMatchedLength_3_6 +#define usearch_getMatchedStart usearch_getMatchedStart_3_6 +#define usearch_getMatchedText usearch_getMatchedText_3_6 +#define usearch_getOffset usearch_getOffset_3_6 +#define usearch_getPattern usearch_getPattern_3_6 +#define usearch_getText usearch_getText_3_6 +#define usearch_handleNextCanonical usearch_handleNextCanonical_3_6 +#define usearch_handleNextExact usearch_handleNextExact_3_6 +#define usearch_handlePreviousCanonical usearch_handlePreviousCanonical_3_6 +#define usearch_handlePreviousExact usearch_handlePreviousExact_3_6 +#define usearch_last usearch_last_3_6 +#define usearch_next usearch_next_3_6 +#define usearch_open usearch_open_3_6 +#define usearch_openFromCollator usearch_openFromCollator_3_6 +#define usearch_preceding usearch_preceding_3_6 +#define usearch_previous usearch_previous_3_6 +#define usearch_reset usearch_reset_3_6 +#define usearch_setAttribute usearch_setAttribute_3_6 +#define usearch_setBreakIterator usearch_setBreakIterator_3_6 +#define usearch_setCollator usearch_setCollator_3_6 +#define usearch_setOffset usearch_setOffset_3_6 +#define usearch_setPattern usearch_setPattern_3_6 +#define usearch_setText usearch_setText_3_6 +#define userv_deleteStringPair userv_deleteStringPair_3_6 +#define uset_add uset_add_3_6 +#define uset_addAll uset_addAll_3_6 +#define uset_addAllCodePoints uset_addAllCodePoints_3_6 +#define uset_addRange uset_addRange_3_6 +#define uset_addString uset_addString_3_6 +#define uset_applyIntPropertyValue uset_applyIntPropertyValue_3_6 +#define uset_applyPattern uset_applyPattern_3_6 +#define uset_applyPropertyAlias uset_applyPropertyAlias_3_6 +#define uset_charAt uset_charAt_3_6 +#define uset_clear uset_clear_3_6 +#define uset_close uset_close_3_6 +#define uset_compact uset_compact_3_6 +#define uset_complement uset_complement_3_6 +#define uset_complementAll uset_complementAll_3_6 +#define uset_contains uset_contains_3_6 +#define uset_containsAll uset_containsAll_3_6 +#define uset_containsAllCodePoints uset_containsAllCodePoints_3_6 +#define uset_containsNone uset_containsNone_3_6 +#define uset_containsRange uset_containsRange_3_6 +#define uset_containsSome uset_containsSome_3_6 +#define uset_containsString uset_containsString_3_6 +#define uset_equals uset_equals_3_6 +#define uset_getItem uset_getItem_3_6 +#define uset_getItemCount uset_getItemCount_3_6 +#define uset_getSerializedRange uset_getSerializedRange_3_6 +#define uset_getSerializedRangeCount uset_getSerializedRangeCount_3_6 +#define uset_getSerializedSet uset_getSerializedSet_3_6 +#define uset_indexOf uset_indexOf_3_6 +#define uset_isEmpty uset_isEmpty_3_6 +#define uset_open uset_open_3_6 +#define uset_openPattern uset_openPattern_3_6 +#define uset_openPatternOptions uset_openPatternOptions_3_6 +#define uset_remove uset_remove_3_6 +#define uset_removeAll uset_removeAll_3_6 +#define uset_removeRange uset_removeRange_3_6 +#define uset_removeString uset_removeString_3_6 +#define uset_resemblesPattern uset_resemblesPattern_3_6 +#define uset_retain uset_retain_3_6 +#define uset_retainAll uset_retainAll_3_6 +#define uset_serialize uset_serialize_3_6 +#define uset_serializedContains uset_serializedContains_3_6 +#define uset_set uset_set_3_6 +#define uset_setSerializedToOne uset_setSerializedToOne_3_6 +#define uset_size uset_size_3_6 +#define uset_toPattern uset_toPattern_3_6 +#define usprep_close usprep_close_3_6 +#define usprep_open usprep_open_3_6 +#define usprep_prepare usprep_prepare_3_6 +#define usprep_swap usprep_swap_3_6 +#define ustr_foldCase ustr_foldCase_3_6 +#define ustr_toLower ustr_toLower_3_6 +#define ustr_toTitle ustr_toTitle_3_6 +#define ustr_toUpper ustr_toUpper_3_6 +#define utext_char32At utext_char32At_3_6 +#define utext_clone utext_clone_3_6 +#define utext_close utext_close_3_6 +#define utext_copy utext_copy_3_6 +#define utext_current32 utext_current32_3_6 +#define utext_equals utext_equals_3_6 +#define utext_extract utext_extract_3_6 +#define utext_freeze utext_freeze_3_6 +#define utext_getNativeIndex utext_getNativeIndex_3_6 +#define utext_getPreviousNativeIndex utext_getPreviousNativeIndex_3_6 +#define utext_hasMetaData utext_hasMetaData_3_6 +#define utext_isLengthExpensive utext_isLengthExpensive_3_6 +#define utext_isWritable utext_isWritable_3_6 +#define utext_moveIndex32 utext_moveIndex32_3_6 +#define utext_nativeLength utext_nativeLength_3_6 +#define utext_next32 utext_next32_3_6 +#define utext_next32From utext_next32From_3_6 +#define utext_openCharacterIterator utext_openCharacterIterator_3_6 +#define utext_openConstUnicodeString utext_openConstUnicodeString_3_6 +#define utext_openReplaceable utext_openReplaceable_3_6 +#define utext_openUChars utext_openUChars_3_6 +#define utext_openUTF8 utext_openUTF8_3_6 +#define utext_openUnicodeString utext_openUnicodeString_3_6 +#define utext_previous32 utext_previous32_3_6 +#define utext_previous32From utext_previous32From_3_6 +#define utext_replace utext_replace_3_6 +#define utext_setNativeIndex utext_setNativeIndex_3_6 +#define utext_setup utext_setup_3_6 +#define utf8_appendCharSafeBody utf8_appendCharSafeBody_3_6 +#define utf8_back1SafeBody utf8_back1SafeBody_3_6 +#define utf8_countTrailBytes utf8_countTrailBytes_3_6 +#define utf8_nextCharSafeBody utf8_nextCharSafeBody_3_6 +#define utf8_prevCharSafeBody utf8_prevCharSafeBody_3_6 +#define utmscale_fromInt64 utmscale_fromInt64_3_6 +#define utmscale_getTimeScaleValue utmscale_getTimeScaleValue_3_6 +#define utmscale_toInt64 utmscale_toInt64_3_6 +#define utrace_cleanup utrace_cleanup_3_6 +#define utrace_data utrace_data_3_6 +#define utrace_entry utrace_entry_3_6 +#define utrace_exit utrace_exit_3_6 +#define utrace_format utrace_format_3_6 +#define utrace_functionName utrace_functionName_3_6 +#define utrace_getFunctions utrace_getFunctions_3_6 +#define utrace_getLevel utrace_getLevel_3_6 +#define utrace_level utrace_level_3_6 +#define utrace_setFunctions utrace_setFunctions_3_6 +#define utrace_setLevel utrace_setLevel_3_6 +#define utrace_vformat utrace_vformat_3_6 +#define utrans_clone utrans_clone_3_6 +#define utrans_close utrans_close_3_6 +#define utrans_countAvailableIDs utrans_countAvailableIDs_3_6 +#define utrans_getAvailableID utrans_getAvailableID_3_6 +#define utrans_getID utrans_getID_3_6 +#define utrans_getUnicodeID utrans_getUnicodeID_3_6 +#define utrans_open utrans_open_3_6 +#define utrans_openIDs utrans_openIDs_3_6 +#define utrans_openInverse utrans_openInverse_3_6 +#define utrans_openU utrans_openU_3_6 +#define utrans_register utrans_register_3_6 +#define utrans_rep_caseContextIterator utrans_rep_caseContextIterator_3_6 +#define utrans_setFilter utrans_setFilter_3_6 +#define utrans_stripRules utrans_stripRules_3_6 +#define utrans_trans utrans_trans_3_6 +#define utrans_transIncremental utrans_transIncremental_3_6 +#define utrans_transIncrementalUChars utrans_transIncrementalUChars_3_6 +#define utrans_transUChars utrans_transUChars_3_6 +#define utrans_unregister utrans_unregister_3_6 +#define utrans_unregisterID utrans_unregisterID_3_6 +#define utrie_clone utrie_clone_3_6 +#define utrie_close utrie_close_3_6 +#define utrie_defaultGetFoldingOffset utrie_defaultGetFoldingOffset_3_6 +#define utrie_enum utrie_enum_3_6 +#define utrie_get32 utrie_get32_3_6 +#define utrie_getData utrie_getData_3_6 +#define utrie_open utrie_open_3_6 +#define utrie_serialize utrie_serialize_3_6 +#define utrie_set32 utrie_set32_3_6 +#define utrie_setRange32 utrie_setRange32_3_6 +#define utrie_swap utrie_swap_3_6 +#define utrie_unserialize utrie_unserialize_3_6 +#define utrie_unserializeDummy utrie_unserializeDummy_3_6 /* C++ class names renaming defines */ #ifdef XP_CPLUSPLUS #if !U_HAVE_NAMESPACE -#define AbsoluteValueSubstitution AbsoluteValueSubstitution_3_2 -#define AlternateSubstitutionSubtable AlternateSubstitutionSubtable_3_2 -#define AnchorTable AnchorTable_3_2 -#define AnyTransliterator AnyTransliterator_3_2 -#define ArabicOpenTypeLayoutEngine ArabicOpenTypeLayoutEngine_3_2 -#define ArabicShaping ArabicShaping_3_2 -#define BasicCalendarFactory BasicCalendarFactory_3_2 -#define BinarySearchLookupTable BinarySearchLookupTable_3_2 -#define BreakDictionary BreakDictionary_3_2 -#define BreakIterator BreakIterator_3_2 -#define BuddhistCalendar BuddhistCalendar_3_2 -#define CFactory CFactory_3_2 -#define Calendar Calendar_3_2 -#define CalendarAstronomer CalendarAstronomer_3_2 -#define CalendarCache CalendarCache_3_2 -#define CalendarData CalendarData_3_2 -#define CalendarService CalendarService_3_2 -#define CanonShaping CanonShaping_3_2 -#define CanonicalIterator CanonicalIterator_3_2 -#define CaseMapTransliterator CaseMapTransliterator_3_2 -#define ChainingContextualSubstitutionFormat1Subtable ChainingContextualSubstitutionFormat1Subtable_3_2 -#define ChainingContextualSubstitutionFormat2Subtable ChainingContextualSubstitutionFormat2Subtable_3_2 -#define ChainingContextualSubstitutionFormat3Subtable ChainingContextualSubstitutionFormat3Subtable_3_2 -#define ChainingContextualSubstitutionSubtable ChainingContextualSubstitutionSubtable_3_2 -#define CharSubstitutionFilter CharSubstitutionFilter_3_2 -#define CharacterIterator CharacterIterator_3_2 -#define ChoiceFormat ChoiceFormat_3_2 -#define ClassDefFormat1Table ClassDefFormat1Table_3_2 -#define ClassDefFormat2Table ClassDefFormat2Table_3_2 -#define ClassDefinitionTable ClassDefinitionTable_3_2 -#define CollationElementIterator CollationElementIterator_3_2 -#define CollationKey CollationKey_3_2 -#define Collator Collator_3_2 -#define CollatorFactory CollatorFactory_3_2 -#define CompoundTransliterator CompoundTransliterator_3_2 -#define ContextualGlyphSubstitutionProcessor ContextualGlyphSubstitutionProcessor_3_2 -#define ContextualSubstitutionBase ContextualSubstitutionBase_3_2 -#define ContextualSubstitutionFormat1Subtable ContextualSubstitutionFormat1Subtable_3_2 -#define ContextualSubstitutionFormat2Subtable ContextualSubstitutionFormat2Subtable_3_2 -#define ContextualSubstitutionFormat3Subtable ContextualSubstitutionFormat3Subtable_3_2 -#define ContextualSubstitutionSubtable ContextualSubstitutionSubtable_3_2 -#define CoverageFormat1Table CoverageFormat1Table_3_2 -#define CoverageFormat2Table CoverageFormat2Table_3_2 -#define CoverageTable CoverageTable_3_2 -#define CurrencyAmount CurrencyAmount_3_2 -#define CurrencyFormat CurrencyFormat_3_2 -#define CurrencyUnit CurrencyUnit_3_2 -#define CursiveAttachmentSubtable CursiveAttachmentSubtable_3_2 -#define DateFormat DateFormat_3_2 -#define DateFormatSymbols DateFormatSymbols_3_2 -#define DecimalFormat DecimalFormat_3_2 -#define DecimalFormatSymbols DecimalFormatSymbols_3_2 -#define DefaultCalendarFactory DefaultCalendarFactory_3_2 -#define DefaultCharMapper DefaultCharMapper_3_2 -#define DeviceTable DeviceTable_3_2 -#define DictionaryBasedBreakIterator DictionaryBasedBreakIterator_3_2 -#define DictionaryBasedBreakIteratorTables DictionaryBasedBreakIteratorTables_3_2 -#define DigitList DigitList_3_2 -#define Entry Entry_3_2 -#define EnumToOffset EnumToOffset_3_2 -#define EscapeTransliterator EscapeTransliterator_3_2 -#define EventListener EventListener_3_2 -#define ExtensionSubtable ExtensionSubtable_3_2 -#define FeatureListTable FeatureListTable_3_2 -#define FieldPosition FieldPosition_3_2 -#define FontRuns FontRuns_3_2 -#define Format Format_3_2 -#define Format1AnchorTable Format1AnchorTable_3_2 -#define Format2AnchorTable Format2AnchorTable_3_2 -#define Format3AnchorTable Format3AnchorTable_3_2 -#define Formattable Formattable_3_2 -#define ForwardCharacterIterator ForwardCharacterIterator_3_2 -#define FractionalPartSubstitution FractionalPartSubstitution_3_2 -#define FunctionReplacer FunctionReplacer_3_2 -#define GDEFMarkFilter GDEFMarkFilter_3_2 -#define GXLayoutEngine GXLayoutEngine_3_2 -#define GlyphDefinitionTableHeader GlyphDefinitionTableHeader_3_2 -#define GlyphIterator GlyphIterator_3_2 -#define GlyphLookupTableHeader GlyphLookupTableHeader_3_2 -#define GlyphPositioningLookupProcessor GlyphPositioningLookupProcessor_3_2 -#define GlyphPositioningTableHeader GlyphPositioningTableHeader_3_2 -#define GlyphSubstitutionLookupProcessor GlyphSubstitutionLookupProcessor_3_2 -#define GlyphSubstitutionTableHeader GlyphSubstitutionTableHeader_3_2 -#define Grego Grego_3_2 -#define GregorianCalendar GregorianCalendar_3_2 -#define HanOpenTypeLayoutEngine HanOpenTypeLayoutEngine_3_2 -#define HebrewCalendar HebrewCalendar_3_2 -#define ICUBreakIteratorFactory ICUBreakIteratorFactory_3_2 -#define ICUBreakIteratorService ICUBreakIteratorService_3_2 -#define ICUCollatorFactory ICUCollatorFactory_3_2 -#define ICUCollatorService ICUCollatorService_3_2 -#define ICULayoutEngine ICULayoutEngine_3_2 -#define ICULocaleService ICULocaleService_3_2 -#define ICUNotifier ICUNotifier_3_2 -#define ICUNumberFormatFactory ICUNumberFormatFactory_3_2 -#define ICUNumberFormatService ICUNumberFormatService_3_2 -#define ICUResourceBundleFactory ICUResourceBundleFactory_3_2 -#define ICUService ICUService_3_2 -#define ICUServiceFactory ICUServiceFactory_3_2 -#define ICUServiceKey ICUServiceKey_3_2 -#define ICU_Utility ICU_Utility_3_2 -#define IndicClassTable IndicClassTable_3_2 -#define IndicOpenTypeLayoutEngine IndicOpenTypeLayoutEngine_3_2 -#define IndicRearrangementProcessor IndicRearrangementProcessor_3_2 -#define IndicReordering IndicReordering_3_2 -#define IntegralPartSubstitution IntegralPartSubstitution_3_2 -#define IslamicCalendar IslamicCalendar_3_2 -#define JapaneseCalendar JapaneseCalendar_3_2 -#define KeywordEnumeration KeywordEnumeration_3_2 -#define LECharMapper LECharMapper_3_2 -#define LEFontInstance LEFontInstance_3_2 -#define LEGlyphFilter LEGlyphFilter_3_2 -#define LEGlyphStorage LEGlyphStorage_3_2 -#define LEInsertionCallback LEInsertionCallback_3_2 -#define LEInsertionList LEInsertionList_3_2 -#define LXUtilities LXUtilities_3_2 -#define LayoutEngine LayoutEngine_3_2 -#define LigatureSubstitutionProcessor LigatureSubstitutionProcessor_3_2 -#define LigatureSubstitutionSubtable LigatureSubstitutionSubtable_3_2 -#define LocDataParser LocDataParser_3_2 -#define Locale Locale_3_2 -#define LocaleBased LocaleBased_3_2 -#define LocaleKey LocaleKey_3_2 -#define LocaleKeyFactory LocaleKeyFactory_3_2 -#define LocaleRuns LocaleRuns_3_2 -#define LocaleUtility LocaleUtility_3_2 -#define LocalizationInfo LocalizationInfo_3_2 -#define LookupListTable LookupListTable_3_2 -#define LookupProcessor LookupProcessor_3_2 -#define LookupSubtable LookupSubtable_3_2 -#define LookupTable LookupTable_3_2 -#define LowercaseTransliterator LowercaseTransliterator_3_2 -#define MPreFixups MPreFixups_3_2 -#define MarkArray MarkArray_3_2 -#define MarkToBasePositioningSubtable MarkToBasePositioningSubtable_3_2 -#define MarkToLigaturePositioningSubtable MarkToLigaturePositioningSubtable_3_2 -#define MarkToMarkPositioningSubtable MarkToMarkPositioningSubtable_3_2 -#define Math Math_3_2 -#define Measure Measure_3_2 -#define MeasureFormat MeasureFormat_3_2 -#define MeasureUnit MeasureUnit_3_2 -#define MessageFormat MessageFormat_3_2 -#define MessageFormatAdapter MessageFormatAdapter_3_2 -#define ModulusSubstitution ModulusSubstitution_3_2 -#define MoonRiseSetCoordFunc MoonRiseSetCoordFunc_3_2 -#define MoonTimeAngleFunc MoonTimeAngleFunc_3_2 -#define MorphSubtableHeader MorphSubtableHeader_3_2 -#define MorphTableHeader MorphTableHeader_3_2 -#define MultipleSubstitutionSubtable MultipleSubstitutionSubtable_3_2 -#define MultiplierSubstitution MultiplierSubstitution_3_2 -#define NFFactory NFFactory_3_2 -#define NFRule NFRule_3_2 -#define NFRuleSet NFRuleSet_3_2 -#define NFSubstitution NFSubstitution_3_2 -#define NameToEnum NameToEnum_3_2 -#define NameUnicodeTransliterator NameUnicodeTransliterator_3_2 -#define NonContextualGlyphSubstitutionProcessor NonContextualGlyphSubstitutionProcessor_3_2 -#define NonContiguousEnumToOffset NonContiguousEnumToOffset_3_2 -#define NormalizationTransliterator NormalizationTransliterator_3_2 -#define Normalizer Normalizer_3_2 -#define NullSubstitution NullSubstitution_3_2 -#define NullTransliterator NullTransliterator_3_2 -#define NumberFormat NumberFormat_3_2 -#define NumberFormatFactory NumberFormatFactory_3_2 -#define NumeratorSubstitution NumeratorSubstitution_3_2 -#define OlsonTimeZone OlsonTimeZone_3_2 -#define OpenTypeLayoutEngine OpenTypeLayoutEngine_3_2 -#define OpenTypeUtilities OpenTypeUtilities_3_2 -#define PairPositioningFormat1Subtable PairPositioningFormat1Subtable_3_2 -#define PairPositioningFormat2Subtable PairPositioningFormat2Subtable_3_2 -#define PairPositioningSubtable PairPositioningSubtable_3_2 -#define ParagraphLayout ParagraphLayout_3_2 -#define ParseData ParseData_3_2 -#define ParsePosition ParsePosition_3_2 -#define PropertyAliases PropertyAliases_3_2 -#define Quantifier Quantifier_3_2 -#define RBBIDataWrapper RBBIDataWrapper_3_2 -#define RBBINode RBBINode_3_2 -#define RBBIRuleBuilder RBBIRuleBuilder_3_2 -#define RBBIRuleScanner RBBIRuleScanner_3_2 -#define RBBISetBuilder RBBISetBuilder_3_2 -#define RBBIStateDescriptor RBBIStateDescriptor_3_2 -#define RBBISymbolTable RBBISymbolTable_3_2 -#define RBBISymbolTableEntry RBBISymbolTableEntry_3_2 -#define RBBITableBuilder RBBITableBuilder_3_2 -#define RangeDescriptor RangeDescriptor_3_2 -#define RegexCompile RegexCompile_3_2 -#define RegexMatcher RegexMatcher_3_2 -#define RegexPattern RegexPattern_3_2 -#define RegexStaticSets RegexStaticSets_3_2 -#define RemoveTransliterator RemoveTransliterator_3_2 -#define Replaceable Replaceable_3_2 -#define ReplaceableGlue ReplaceableGlue_3_2 -#define ResourceBundle ResourceBundle_3_2 -#define RiseSetCoordFunc RiseSetCoordFunc_3_2 -#define RuleBasedBreakIterator RuleBasedBreakIterator_3_2 -#define RuleBasedCollator RuleBasedCollator_3_2 -#define RuleBasedNumberFormat RuleBasedNumberFormat_3_2 -#define RuleBasedTransliterator RuleBasedTransliterator_3_2 -#define RuleCharacterIterator RuleCharacterIterator_3_2 -#define RuleHalf RuleHalf_3_2 -#define RunArray RunArray_3_2 -#define SameValueSubstitution SameValueSubstitution_3_2 -#define ScriptListTable ScriptListTable_3_2 -#define ScriptRunIterator ScriptRunIterator_3_2 -#define ScriptTable ScriptTable_3_2 -#define SearchIterator SearchIterator_3_2 -#define SegmentArrayProcessor SegmentArrayProcessor_3_2 -#define SegmentSingleProcessor SegmentSingleProcessor_3_2 -#define ServiceEnumeration ServiceEnumeration_3_2 -#define ServiceListener ServiceListener_3_2 -#define SimpleArrayProcessor SimpleArrayProcessor_3_2 -#define SimpleDateFormat SimpleDateFormat_3_2 -#define SimpleFactory SimpleFactory_3_2 -#define SimpleLocaleKeyFactory SimpleLocaleKeyFactory_3_2 -#define SimpleNumberFormatFactory SimpleNumberFormatFactory_3_2 -#define SimpleTimeZone SimpleTimeZone_3_2 -#define SinglePositioningFormat1Subtable SinglePositioningFormat1Subtable_3_2 -#define SinglePositioningFormat2Subtable SinglePositioningFormat2Subtable_3_2 -#define SinglePositioningSubtable SinglePositioningSubtable_3_2 -#define SingleSubstitutionFormat1Subtable SingleSubstitutionFormat1Subtable_3_2 -#define SingleSubstitutionFormat2Subtable SingleSubstitutionFormat2Subtable_3_2 -#define SingleSubstitutionSubtable SingleSubstitutionSubtable_3_2 -#define SingleTableProcessor SingleTableProcessor_3_2 -#define Spec Spec_3_2 -#define StateTableProcessor StateTableProcessor_3_2 -#define StringCharacterIterator StringCharacterIterator_3_2 -#define StringEnumeration StringEnumeration_3_2 -#define StringLocalizationInfo StringLocalizationInfo_3_2 -#define StringMatcher StringMatcher_3_2 -#define StringPair StringPair_3_2 -#define StringReplacer StringReplacer_3_2 -#define StringSearch StringSearch_3_2 -#define StyleRuns StyleRuns_3_2 -#define SubstitutionLookup SubstitutionLookup_3_2 -#define SubtableProcessor SubtableProcessor_3_2 -#define SunTimeAngleFunc SunTimeAngleFunc_3_2 -#define SymbolTable SymbolTable_3_2 -#define TZEnumeration TZEnumeration_3_2 -#define ThaiLayoutEngine ThaiLayoutEngine_3_2 -#define ThaiShaping ThaiShaping_3_2 -#define TimeZone TimeZone_3_2 -#define TitlecaseTransliterator TitlecaseTransliterator_3_2 -#define TransliterationRule TransliterationRule_3_2 -#define TransliterationRuleData TransliterationRuleData_3_2 -#define TransliterationRuleSet TransliterationRuleSet_3_2 -#define Transliterator Transliterator_3_2 -#define TransliteratorAlias TransliteratorAlias_3_2 -#define TransliteratorIDParser TransliteratorIDParser_3_2 -#define TransliteratorParser TransliteratorParser_3_2 -#define TransliteratorRegistry TransliteratorRegistry_3_2 -#define TrimmedArrayProcessor TrimmedArrayProcessor_3_2 -#define UCharCharacterIterator UCharCharacterIterator_3_2 -#define UMemory UMemory_3_2 -#define UObject UObject_3_2 -#define UStack UStack_3_2 -#define UStringEnumeration UStringEnumeration_3_2 -#define UVector UVector_3_2 -#define UVector32 UVector32_3_2 -#define UnescapeTransliterator UnescapeTransliterator_3_2 -#define UnicodeArabicOpenTypeLayoutEngine UnicodeArabicOpenTypeLayoutEngine_3_2 -#define UnicodeFilter UnicodeFilter_3_2 -#define UnicodeFunctor UnicodeFunctor_3_2 -#define UnicodeMatcher UnicodeMatcher_3_2 -#define UnicodeNameTransliterator UnicodeNameTransliterator_3_2 -#define UnicodeReplacer UnicodeReplacer_3_2 -#define UnicodeSet UnicodeSet_3_2 -#define UnicodeSetIterator UnicodeSetIterator_3_2 -#define UnicodeString UnicodeString_3_2 -#define UppercaseTransliterator UppercaseTransliterator_3_2 -#define ValueRecord ValueRecord_3_2 -#define ValueRuns ValueRuns_3_2 -#define locale_set_default_internal locale_set_default_internal_3_2 -#define uprv_parseCurrency uprv_parseCurrency_3_2 -#define util64_fromDouble util64_fromDouble_3_2 -#define util64_pow util64_pow_3_2 -#define util64_tou util64_tou_3_2 -#define util64_utoi util64_utoi_3_2 +#define AbsoluteValueSubstitution AbsoluteValueSubstitution_3_6 +#define AlternateSubstitutionSubtable AlternateSubstitutionSubtable_3_6 +#define AnchorTable AnchorTable_3_6 +#define AnyTransliterator AnyTransliterator_3_6 +#define ArabicOpenTypeLayoutEngine ArabicOpenTypeLayoutEngine_3_6 +#define ArabicShaping ArabicShaping_3_6 +#define BasicCalendarFactory BasicCalendarFactory_3_6 +#define BinarySearchLookupTable BinarySearchLookupTable_3_6 +#define BreakIterator BreakIterator_3_6 +#define BuddhistCalendar BuddhistCalendar_3_6 +#define BuildCompactTrieHorizontalNode BuildCompactTrieHorizontalNode_3_6 +#define BuildCompactTrieNode BuildCompactTrieNode_3_6 +#define BuildCompactTrieVerticalNode BuildCompactTrieVerticalNode_3_6 +#define CFactory CFactory_3_6 +#define Calendar Calendar_3_6 +#define CalendarAstronomer CalendarAstronomer_3_6 +#define CalendarCache CalendarCache_3_6 +#define CalendarData CalendarData_3_6 +#define CalendarService CalendarService_3_6 +#define CanonShaping CanonShaping_3_6 +#define CanonicalIterator CanonicalIterator_3_6 +#define CaseMapTransliterator CaseMapTransliterator_3_6 +#define ChainingContextualSubstitutionFormat1Subtable ChainingContextualSubstitutionFormat1Subtable_3_6 +#define ChainingContextualSubstitutionFormat2Subtable ChainingContextualSubstitutionFormat2Subtable_3_6 +#define ChainingContextualSubstitutionFormat3Subtable ChainingContextualSubstitutionFormat3Subtable_3_6 +#define ChainingContextualSubstitutionSubtable ChainingContextualSubstitutionSubtable_3_6 +#define CharSubstitutionFilter CharSubstitutionFilter_3_6 +#define CharacterIterator CharacterIterator_3_6 +#define CharsetDetector CharsetDetector_3_6 +#define CharsetMatch CharsetMatch_3_6 +#define CharsetRecog_2022 CharsetRecog_2022_3_6 +#define CharsetRecog_2022CN CharsetRecog_2022CN_3_6 +#define CharsetRecog_2022JP CharsetRecog_2022JP_3_6 +#define CharsetRecog_2022KR CharsetRecog_2022KR_3_6 +#define CharsetRecog_8859_1 CharsetRecog_8859_1_3_6 +#define CharsetRecog_8859_1_da CharsetRecog_8859_1_da_3_6 +#define CharsetRecog_8859_1_de CharsetRecog_8859_1_de_3_6 +#define CharsetRecog_8859_1_en CharsetRecog_8859_1_en_3_6 +#define CharsetRecog_8859_1_es CharsetRecog_8859_1_es_3_6 +#define CharsetRecog_8859_1_fr CharsetRecog_8859_1_fr_3_6 +#define CharsetRecog_8859_1_it CharsetRecog_8859_1_it_3_6 +#define CharsetRecog_8859_1_nl CharsetRecog_8859_1_nl_3_6 +#define CharsetRecog_8859_1_no CharsetRecog_8859_1_no_3_6 +#define CharsetRecog_8859_1_pt CharsetRecog_8859_1_pt_3_6 +#define CharsetRecog_8859_1_sv CharsetRecog_8859_1_sv_3_6 +#define CharsetRecog_8859_2 CharsetRecog_8859_2_3_6 +#define CharsetRecog_8859_2_cs CharsetRecog_8859_2_cs_3_6 +#define CharsetRecog_8859_2_hu CharsetRecog_8859_2_hu_3_6 +#define CharsetRecog_8859_2_pl CharsetRecog_8859_2_pl_3_6 +#define CharsetRecog_8859_2_ro CharsetRecog_8859_2_ro_3_6 +#define CharsetRecog_8859_5 CharsetRecog_8859_5_3_6 +#define CharsetRecog_8859_5_ru CharsetRecog_8859_5_ru_3_6 +#define CharsetRecog_8859_6 CharsetRecog_8859_6_3_6 +#define CharsetRecog_8859_6_ar CharsetRecog_8859_6_ar_3_6 +#define CharsetRecog_8859_7 CharsetRecog_8859_7_3_6 +#define CharsetRecog_8859_7_el CharsetRecog_8859_7_el_3_6 +#define CharsetRecog_8859_8 CharsetRecog_8859_8_3_6 +#define CharsetRecog_8859_8_I_he CharsetRecog_8859_8_I_he_3_6 +#define CharsetRecog_8859_8_he CharsetRecog_8859_8_he_3_6 +#define CharsetRecog_8859_9 CharsetRecog_8859_9_3_6 +#define CharsetRecog_8859_9_tr CharsetRecog_8859_9_tr_3_6 +#define CharsetRecog_KOI8_R CharsetRecog_KOI8_R_3_6 +#define CharsetRecog_UTF8 CharsetRecog_UTF8_3_6 +#define CharsetRecog_UTF_16_BE CharsetRecog_UTF_16_BE_3_6 +#define CharsetRecog_UTF_16_LE CharsetRecog_UTF_16_LE_3_6 +#define CharsetRecog_UTF_32 CharsetRecog_UTF_32_3_6 +#define CharsetRecog_UTF_32_BE CharsetRecog_UTF_32_BE_3_6 +#define CharsetRecog_UTF_32_LE CharsetRecog_UTF_32_LE_3_6 +#define CharsetRecog_Unicode CharsetRecog_Unicode_3_6 +#define CharsetRecog_big5 CharsetRecog_big5_3_6 +#define CharsetRecog_euc CharsetRecog_euc_3_6 +#define CharsetRecog_euc_jp CharsetRecog_euc_jp_3_6 +#define CharsetRecog_euc_kr CharsetRecog_euc_kr_3_6 +#define CharsetRecog_gb_18030 CharsetRecog_gb_18030_3_6 +#define CharsetRecog_mbcs CharsetRecog_mbcs_3_6 +#define CharsetRecog_sbcs CharsetRecog_sbcs_3_6 +#define CharsetRecog_sjis CharsetRecog_sjis_3_6 +#define CharsetRecog_windows_1251 CharsetRecog_windows_1251_3_6 +#define CharsetRecog_windows_1256 CharsetRecog_windows_1256_3_6 +#define CharsetRecognizer CharsetRecognizer_3_6 +#define ChoiceFormat ChoiceFormat_3_6 +#define ClassDefFormat1Table ClassDefFormat1Table_3_6 +#define ClassDefFormat2Table ClassDefFormat2Table_3_6 +#define ClassDefinitionTable ClassDefinitionTable_3_6 +#define CollationElementIterator CollationElementIterator_3_6 +#define CollationKey CollationKey_3_6 +#define Collator Collator_3_6 +#define CollatorFactory CollatorFactory_3_6 +#define CompactTrieDictionary CompactTrieDictionary_3_6 +#define CompactTrieEnumeration CompactTrieEnumeration_3_6 +#define CompoundTransliterator CompoundTransliterator_3_6 +#define ContextualGlyphSubstitutionProcessor ContextualGlyphSubstitutionProcessor_3_6 +#define ContextualSubstitutionBase ContextualSubstitutionBase_3_6 +#define ContextualSubstitutionFormat1Subtable ContextualSubstitutionFormat1Subtable_3_6 +#define ContextualSubstitutionFormat2Subtable ContextualSubstitutionFormat2Subtable_3_6 +#define ContextualSubstitutionFormat3Subtable ContextualSubstitutionFormat3Subtable_3_6 +#define ContextualSubstitutionSubtable ContextualSubstitutionSubtable_3_6 +#define CoverageFormat1Table CoverageFormat1Table_3_6 +#define CoverageFormat2Table CoverageFormat2Table_3_6 +#define CoverageTable CoverageTable_3_6 +#define CurrencyAmount CurrencyAmount_3_6 +#define CurrencyFormat CurrencyFormat_3_6 +#define CurrencyUnit CurrencyUnit_3_6 +#define CursiveAttachmentSubtable CursiveAttachmentSubtable_3_6 +#define DateFormat DateFormat_3_6 +#define DateFormatSymbols DateFormatSymbols_3_6 +#define DecimalFormat DecimalFormat_3_6 +#define DecimalFormatSymbols DecimalFormatSymbols_3_6 +#define DefaultCalendarFactory DefaultCalendarFactory_3_6 +#define DefaultCharMapper DefaultCharMapper_3_6 +#define DeviceTable DeviceTable_3_6 +#define DictionaryBreakEngine DictionaryBreakEngine_3_6 +#define DigitList DigitList_3_6 +#define Entry Entry_3_6 +#define EnumToOffset EnumToOffset_3_6 +#define EscapeTransliterator EscapeTransliterator_3_6 +#define EventListener EventListener_3_6 +#define ExtensionSubtable ExtensionSubtable_3_6 +#define FeatureListTable FeatureListTable_3_6 +#define FieldPosition FieldPosition_3_6 +#define FontRuns FontRuns_3_6 +#define Format Format_3_6 +#define Format1AnchorTable Format1AnchorTable_3_6 +#define Format2AnchorTable Format2AnchorTable_3_6 +#define Format3AnchorTable Format3AnchorTable_3_6 +#define Formattable Formattable_3_6 +#define ForwardCharacterIterator ForwardCharacterIterator_3_6 +#define FractionalPartSubstitution FractionalPartSubstitution_3_6 +#define FunctionReplacer FunctionReplacer_3_6 +#define GDEFMarkFilter GDEFMarkFilter_3_6 +#define GXLayoutEngine GXLayoutEngine_3_6 +#define GlyphDefinitionTableHeader GlyphDefinitionTableHeader_3_6 +#define GlyphIterator GlyphIterator_3_6 +#define GlyphLookupTableHeader GlyphLookupTableHeader_3_6 +#define GlyphPositionAdjustments GlyphPositionAdjustments_3_6 +#define GlyphPositioningLookupProcessor GlyphPositioningLookupProcessor_3_6 +#define GlyphPositioningTableHeader GlyphPositioningTableHeader_3_6 +#define GlyphSubstitutionLookupProcessor GlyphSubstitutionLookupProcessor_3_6 +#define GlyphSubstitutionTableHeader GlyphSubstitutionTableHeader_3_6 +#define Grego Grego_3_6 +#define GregorianCalendar GregorianCalendar_3_6 +#define HanOpenTypeLayoutEngine HanOpenTypeLayoutEngine_3_6 +#define HangulOpenTypeLayoutEngine HangulOpenTypeLayoutEngine_3_6 +#define HebrewCalendar HebrewCalendar_3_6 +#define ICUBreakIteratorFactory ICUBreakIteratorFactory_3_6 +#define ICUBreakIteratorService ICUBreakIteratorService_3_6 +#define ICUCollatorFactory ICUCollatorFactory_3_6 +#define ICUCollatorService ICUCollatorService_3_6 +#define ICULanguageBreakFactory ICULanguageBreakFactory_3_6 +#define ICULocaleService ICULocaleService_3_6 +#define ICUNotifier ICUNotifier_3_6 +#define ICUNumberFormatFactory ICUNumberFormatFactory_3_6 +#define ICUNumberFormatService ICUNumberFormatService_3_6 +#define ICUResourceBundleFactory ICUResourceBundleFactory_3_6 +#define ICUService ICUService_3_6 +#define ICUServiceFactory ICUServiceFactory_3_6 +#define ICUServiceKey ICUServiceKey_3_6 +#define ICU_Utility ICU_Utility_3_6 +#define IndicClassTable IndicClassTable_3_6 +#define IndicOpenTypeLayoutEngine IndicOpenTypeLayoutEngine_3_6 +#define IndicRearrangementProcessor IndicRearrangementProcessor_3_6 +#define IndicReordering IndicReordering_3_6 +#define InputText InputText_3_6 +#define IntegralPartSubstitution IntegralPartSubstitution_3_6 +#define IslamicCalendar IslamicCalendar_3_6 +#define IteratedChar IteratedChar_3_6 +#define JapaneseCalendar JapaneseCalendar_3_6 +#define KernTable KernTable_3_6 +#define KeywordEnumeration KeywordEnumeration_3_6 +#define KhmerClassTable KhmerClassTable_3_6 +#define KhmerOpenTypeLayoutEngine KhmerOpenTypeLayoutEngine_3_6 +#define KhmerReordering KhmerReordering_3_6 +#define LECharMapper LECharMapper_3_6 +#define LEFontInstance LEFontInstance_3_6 +#define LEGlyphFilter LEGlyphFilter_3_6 +#define LEGlyphStorage LEGlyphStorage_3_6 +#define LEInsertionCallback LEInsertionCallback_3_6 +#define LEInsertionList LEInsertionList_3_6 +#define LXUtilities LXUtilities_3_6 +#define LanguageBreakEngine LanguageBreakEngine_3_6 +#define LanguageBreakFactory LanguageBreakFactory_3_6 +#define LayoutEngine LayoutEngine_3_6 +#define LigatureSubstitutionProcessor LigatureSubstitutionProcessor_3_6 +#define LigatureSubstitutionSubtable LigatureSubstitutionSubtable_3_6 +#define LocDataParser LocDataParser_3_6 +#define Locale Locale_3_6 +#define LocaleBased LocaleBased_3_6 +#define LocaleKey LocaleKey_3_6 +#define LocaleKeyFactory LocaleKeyFactory_3_6 +#define LocaleRuns LocaleRuns_3_6 +#define LocaleUtility LocaleUtility_3_6 +#define LocalizationInfo LocalizationInfo_3_6 +#define LookupListTable LookupListTable_3_6 +#define LookupProcessor LookupProcessor_3_6 +#define LookupSubtable LookupSubtable_3_6 +#define LookupTable LookupTable_3_6 +#define LowercaseTransliterator LowercaseTransliterator_3_6 +#define MPreFixups MPreFixups_3_6 +#define MarkArray MarkArray_3_6 +#define MarkToBasePositioningSubtable MarkToBasePositioningSubtable_3_6 +#define MarkToLigaturePositioningSubtable MarkToLigaturePositioningSubtable_3_6 +#define MarkToMarkPositioningSubtable MarkToMarkPositioningSubtable_3_6 +#define Math Math_3_6 +#define Measure Measure_3_6 +#define MeasureFormat MeasureFormat_3_6 +#define MeasureUnit MeasureUnit_3_6 +#define MessageFormat MessageFormat_3_6 +#define MessageFormatAdapter MessageFormatAdapter_3_6 +#define ModulusSubstitution ModulusSubstitution_3_6 +#define MoonRiseSetCoordFunc MoonRiseSetCoordFunc_3_6 +#define MoonTimeAngleFunc MoonTimeAngleFunc_3_6 +#define MorphSubtableHeader MorphSubtableHeader_3_6 +#define MorphTableHeader MorphTableHeader_3_6 +#define MultipleSubstitutionSubtable MultipleSubstitutionSubtable_3_6 +#define MultiplierSubstitution MultiplierSubstitution_3_6 +#define MutableTrieDictionary MutableTrieDictionary_3_6 +#define MutableTrieEnumeration MutableTrieEnumeration_3_6 +#define NFFactory NFFactory_3_6 +#define NFRule NFRule_3_6 +#define NFRuleSet NFRuleSet_3_6 +#define NFSubstitution NFSubstitution_3_6 +#define NGramParser NGramParser_3_6 +#define NameToEnum NameToEnum_3_6 +#define NameUnicodeTransliterator NameUnicodeTransliterator_3_6 +#define NonContextualGlyphSubstitutionProcessor NonContextualGlyphSubstitutionProcessor_3_6 +#define NonContiguousEnumToOffset NonContiguousEnumToOffset_3_6 +#define NormalizationTransliterator NormalizationTransliterator_3_6 +#define Normalizer Normalizer_3_6 +#define NullSubstitution NullSubstitution_3_6 +#define NullTransliterator NullTransliterator_3_6 +#define NumberFormat NumberFormat_3_6 +#define NumberFormatFactory NumberFormatFactory_3_6 +#define NumeratorSubstitution NumeratorSubstitution_3_6 +#define OlsonTimeZone OlsonTimeZone_3_6 +#define OpenTypeLayoutEngine OpenTypeLayoutEngine_3_6 +#define OpenTypeUtilities OpenTypeUtilities_3_6 +#define PairPositioningFormat1Subtable PairPositioningFormat1Subtable_3_6 +#define PairPositioningFormat2Subtable PairPositioningFormat2Subtable_3_6 +#define PairPositioningSubtable PairPositioningSubtable_3_6 +#define ParagraphLayout ParagraphLayout_3_6 +#define ParseData ParseData_3_6 +#define ParsePosition ParsePosition_3_6 +#define PropertyAliases PropertyAliases_3_6 +#define Quantifier Quantifier_3_6 +#define RBBIDataWrapper RBBIDataWrapper_3_6 +#define RBBINode RBBINode_3_6 +#define RBBIRuleBuilder RBBIRuleBuilder_3_6 +#define RBBIRuleScanner RBBIRuleScanner_3_6 +#define RBBISetBuilder RBBISetBuilder_3_6 +#define RBBIStateDescriptor RBBIStateDescriptor_3_6 +#define RBBISymbolTable RBBISymbolTable_3_6 +#define RBBISymbolTableEntry RBBISymbolTableEntry_3_6 +#define RBBITableBuilder RBBITableBuilder_3_6 +#define RangeDescriptor RangeDescriptor_3_6 +#define RegexCompile RegexCompile_3_6 +#define RegexMatcher RegexMatcher_3_6 +#define RegexPattern RegexPattern_3_6 +#define RegexStaticSets RegexStaticSets_3_6 +#define RemoveTransliterator RemoveTransliterator_3_6 +#define Replaceable Replaceable_3_6 +#define ReplaceableGlue ReplaceableGlue_3_6 +#define ResourceBundle ResourceBundle_3_6 +#define RiseSetCoordFunc RiseSetCoordFunc_3_6 +#define RuleBasedBreakIterator RuleBasedBreakIterator_3_6 +#define RuleBasedCollator RuleBasedCollator_3_6 +#define RuleBasedNumberFormat RuleBasedNumberFormat_3_6 +#define RuleBasedTransliterator RuleBasedTransliterator_3_6 +#define RuleCharacterIterator RuleCharacterIterator_3_6 +#define RuleHalf RuleHalf_3_6 +#define RunArray RunArray_3_6 +#define SameValueSubstitution SameValueSubstitution_3_6 +#define ScriptListTable ScriptListTable_3_6 +#define ScriptRunIterator ScriptRunIterator_3_6 +#define ScriptTable ScriptTable_3_6 +#define SearchIterator SearchIterator_3_6 +#define SegmentArrayProcessor SegmentArrayProcessor_3_6 +#define SegmentSingleProcessor SegmentSingleProcessor_3_6 +#define ServiceEnumeration ServiceEnumeration_3_6 +#define ServiceListener ServiceListener_3_6 +#define SimpleArrayProcessor SimpleArrayProcessor_3_6 +#define SimpleDateFormat SimpleDateFormat_3_6 +#define SimpleFactory SimpleFactory_3_6 +#define SimpleLocaleKeyFactory SimpleLocaleKeyFactory_3_6 +#define SimpleNumberFormatFactory SimpleNumberFormatFactory_3_6 +#define SimpleTimeZone SimpleTimeZone_3_6 +#define SinglePositioningFormat1Subtable SinglePositioningFormat1Subtable_3_6 +#define SinglePositioningFormat2Subtable SinglePositioningFormat2Subtable_3_6 +#define SinglePositioningSubtable SinglePositioningSubtable_3_6 +#define SingleSubstitutionFormat1Subtable SingleSubstitutionFormat1Subtable_3_6 +#define SingleSubstitutionFormat2Subtable SingleSubstitutionFormat2Subtable_3_6 +#define SingleSubstitutionSubtable SingleSubstitutionSubtable_3_6 +#define SingleTableProcessor SingleTableProcessor_3_6 +#define Spec Spec_3_6 +#define StateTableProcessor StateTableProcessor_3_6 +#define StringCharacterIterator StringCharacterIterator_3_6 +#define StringEnumeration StringEnumeration_3_6 +#define StringLocalizationInfo StringLocalizationInfo_3_6 +#define StringMatcher StringMatcher_3_6 +#define StringPair StringPair_3_6 +#define StringReplacer StringReplacer_3_6 +#define StringSearch StringSearch_3_6 +#define StyleRuns StyleRuns_3_6 +#define SubstitutionLookup SubstitutionLookup_3_6 +#define SubtableProcessor SubtableProcessor_3_6 +#define SunTimeAngleFunc SunTimeAngleFunc_3_6 +#define SymbolTable SymbolTable_3_6 +#define TZEnumeration TZEnumeration_3_6 +#define TernaryNode TernaryNode_3_6 +#define ThaiBreakEngine ThaiBreakEngine_3_6 +#define ThaiLayoutEngine ThaiLayoutEngine_3_6 +#define ThaiShaping ThaiShaping_3_6 +#define TibetanClassTable TibetanClassTable_3_6 +#define TibetanOpenTypeLayoutEngine TibetanOpenTypeLayoutEngine_3_6 +#define TibetanReordering TibetanReordering_3_6 +#define TimeZone TimeZone_3_6 +#define TimeZoneKeysEnumeration TimeZoneKeysEnumeration_3_6 +#define TitlecaseTransliterator TitlecaseTransliterator_3_6 +#define TransliterationRule TransliterationRule_3_6 +#define TransliterationRuleData TransliterationRuleData_3_6 +#define TransliterationRuleSet TransliterationRuleSet_3_6 +#define Transliterator Transliterator_3_6 +#define TransliteratorAlias TransliteratorAlias_3_6 +#define TransliteratorIDParser TransliteratorIDParser_3_6 +#define TransliteratorParser TransliteratorParser_3_6 +#define TransliteratorRegistry TransliteratorRegistry_3_6 +#define TrieWordDictionary TrieWordDictionary_3_6 +#define TrimmedArrayProcessor TrimmedArrayProcessor_3_6 +#define UCharCharacterIterator UCharCharacterIterator_3_6 +#define UMemory UMemory_3_6 +#define UObject UObject_3_6 +#define URegularExpression URegularExpression_3_6 +#define UStack UStack_3_6 +#define UStringEnumeration UStringEnumeration_3_6 +#define UVector UVector_3_6 +#define UVector32 UVector32_3_6 +#define UnescapeTransliterator UnescapeTransliterator_3_6 +#define UnhandledEngine UnhandledEngine_3_6 +#define UnicodeArabicOpenTypeLayoutEngine UnicodeArabicOpenTypeLayoutEngine_3_6 +#define UnicodeFilter UnicodeFilter_3_6 +#define UnicodeFunctor UnicodeFunctor_3_6 +#define UnicodeMatcher UnicodeMatcher_3_6 +#define UnicodeNameTransliterator UnicodeNameTransliterator_3_6 +#define UnicodeReplacer UnicodeReplacer_3_6 +#define UnicodeSet UnicodeSet_3_6 +#define UnicodeSetIterator UnicodeSetIterator_3_6 +#define UnicodeString UnicodeString_3_6 +#define UppercaseTransliterator UppercaseTransliterator_3_6 +#define ValueRecord ValueRecord_3_6 +#define ValueRuns ValueRuns_3_6 +#define locale_set_default_internal locale_set_default_internal_3_6 +#define util64_fromDouble util64_fromDouble_3_6 +#define util64_pow util64_pow_3_6 +#define util64_tou util64_tou_3_6 #endif #endif diff --git a/icuSources/common/unicode/urep.h b/icuSources/common/unicode/urep.h index ee2df3d4..57b547c8 100644 --- a/icuSources/common/unicode/urep.h +++ b/icuSources/common/unicode/urep.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2003, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -28,7 +28,10 @@ U_CDECL_BEGIN /******************************************************************** * Data Structures ********************************************************************/ - +/** + * \file + * \brief C API: Callbacks for UReplacebale + */ /** * An opaque replaceable text object. This will be manipulated only * through the caller-supplied UReplaceableFunctor struct. Related diff --git a/icuSources/common/unicode/ures.h b/icuSources/common/unicode/ures.h index c1cecd49..f6e3b347 100644 --- a/icuSources/common/unicode/ures.h +++ b/icuSources/common/unicode/ures.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -38,9 +38,9 @@ * locale and then ask it for individual resources. *

    * Resource bundles in ICU4C are currently defined using text files which conform to the following - * BNF definition. + * BNF definition. * More on resource bundle concepts and syntax can be found in the - * Users Guide. + * Users Guide. *

    */ @@ -82,6 +82,8 @@ typedef enum { */ URES_ALIAS=3, +#ifndef U_HIDE_INTERNAL_API + /** * Internal use only. * Alternative resource type constant for tables of key-value pairs. @@ -90,6 +92,8 @@ typedef enum { */ URES_TABLE32=4, +#endif /* U_HIDE_INTERNAL_API */ + /** * Resource type constant for a single 28-bit integer, interpreted as * signed or unsigned by the ures_getInt() or ures_getUInt() function. @@ -107,8 +111,7 @@ typedef enum { * @see ures_getIntVector * @stable ICU 2.6 */ - URES_INT_VECTOR=14, - + URES_INT_VECTOR = 14, #ifndef U_HIDE_DEPRECATED_API /** @deprecated ICU 2.6 Use the URES_ constant instead. */ RES_NONE=URES_NONE, @@ -126,10 +129,11 @@ typedef enum { RES_ARRAY=URES_ARRAY, /** @deprecated ICU 2.6 Use the URES_ constant instead. */ RES_INT_VECTOR=URES_INT_VECTOR, + /** @deprecated ICU 2.6 Not used. */ + RES_RESERVED=15, #endif /* U_HIDE_DEPRECATED_API */ - /** @deprecated ICU 2.6 Not used. */ - RES_RESERVED=15 + URES_LIMIT = 16 } UResType; /* @@ -141,10 +145,11 @@ typedef enum { * their corresponding keys. * Note that the caller is responsible of calling ures_close on each succesfully * opened resource bundle. - * @param path string containing the full path pointing to the directory - * where the resources reside followed by the package name - * e.g. "/usr/resource/my_app/resources/guimessages" on a Unix system. - * if NULL, ICU default data files will be used. + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param locale specifies the locale for which we want to open the resource * if NULL, the default locale will be used. If strlen(locale) == 0 * root locale will be used. @@ -164,7 +169,7 @@ typedef enum { * @stable ICU 2.0 */ U_STABLE UResourceBundle* U_EXPORT2 -ures_open(const char* path, +ures_open(const char* packageName, const char* locale, UErrorCode* status); @@ -172,10 +177,11 @@ ures_open(const char* path, /** This function does not care what kind of localeID is passed in. It simply opens a bundle with * that name. Fallback mechanism is disabled for the new bundle. If the requested bundle contains * an %%ALIAS directive, the results are undefined. - * @param path string containing the full path pointing to the directory - * where the resources reside followed by the package name - * e.g. "/usr/resource/my_app/resources/guimessages" on a Unix system. - * if NULL, ICU default data files will be used. + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param locale specifies the locale for which we want to open the resource * if NULL, the default locale will be used. If strlen(locale) == 0 * root locale will be used. @@ -186,7 +192,7 @@ ures_open(const char* path, * @stable ICU 2.0 */ U_STABLE UResourceBundle* U_EXPORT2 -ures_openDirect(const char* path, +ures_openDirect(const char* packageName, const char* locale, UErrorCode* status); @@ -195,8 +201,11 @@ ures_openDirect(const char* path, * This path will be converted to char * using the default converter, * then ures_open() is called. * - * @param path string containing the full path pointing to the directory - * where the resources reside followed by the package name + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param locale specifies the locale for which we want to open the resource * if NULL, the default locale will be used. If strlen(locale) == 0 * root locale will be used. @@ -206,7 +215,7 @@ ures_openDirect(const char* path, * @stable ICU 2.0 */ U_STABLE UResourceBundle* U_EXPORT2 -ures_openU(const UChar* path, +ures_openU(const UChar* packageName, const char* locale, UErrorCode* status); @@ -294,9 +303,9 @@ ures_getLocale(const UResourceBundle* resourceBundle, * ULocDataLocaleType in uloc.h * @param status just for catching illegal arguments * @return A Locale name - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 ures_getLocaleByType(const UResourceBundle* resourceBundle, ULocDataLocaleType type, UErrorCode* status); @@ -308,8 +317,11 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle, * TODO need to revisit usefulness of this function * and usage model for fillIn parameters without knowing sizeof(UResourceBundle) * @param r The resourcebundle to open - * @param path String containing the full path pointing to the directory - * where the resources reside followed by the package name + * @param packageName The packageName and locale together point to an ICU udata object, + * as defined by udata_open( packageName, "res", locale, err) + * or equivalent. Typically, packageName will refer to a (.dat) file, or to + * a package registered with udata_setAppData(). Using a full file or directory + * pathname for packageName is deprecated. If NULL, ICU data will be used. * @param localeID specifies the locale for which we want to open the resource * @param status The error code * @return a newly allocated resource bundle or NULL if it doesn't exist. @@ -317,7 +329,7 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle, */ U_INTERNAL void U_EXPORT2 ures_openFillIn(UResourceBundle *r, - const char* path, + const char* packageName, const char* localeID, UErrorCode* status); @@ -343,6 +355,59 @@ ures_getString(const UResourceBundle* resourceBundle, int32_t* len, UErrorCode* status); +/** + * Returns a UTF-8 string from a string resource. + * The UTF-8 string may be returnable directly as a pointer, or + * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() + * or equivalent. + * + * If forceCopy==TRUE, then the string is always written to the dest buffer + * and dest is returned. + * + * If forceCopy==FALSE, then the string is returned as a pointer if possible, + * without needing a dest buffer (it can be NULL). If the string needs to be + * copied or transformed, then it may be placed into dest at an arbitrary offset. + * + * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and + * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual. + * + * If the string is transformed from UTF-16, then a conversion error may occur + * if an unpaired surrogate is encountered. If the function is successful, then + * the output UTF-8 string is always well-formed. + * + * @param resB Resource bundle. + * @param dest Destination buffer. Can be NULL only if capacity=*length==0. + * @param length Input: Capacity of destination buffer. + * Output: Actual length of the UTF-8 string, not counting the + * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. + * Can be NULL, meaning capacity=0 and the string length is not + * returned to the caller. + * @param forceCopy If TRUE, then the output string will always be written to + * dest, with U_BUFFER_OVERFLOW_ERROR and + * U_STRING_NOT_TERMINATED_WARNING set if appropriate. + * If FALSE, then the dest buffer may or may not contain a + * copy of the string. dest may or may not be modified. + * If a copy needs to be written, then the UErrorCode parameter + * indicates overflow etc. as usual. + * @param status Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return The pointer to the UTF-8 string. It may be dest, or at some offset + * from dest (only if !forceCopy), or in unrelated memory. + * Always NUL-terminated unless the string was written to dest and + * length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set). + * + * @see ures_getString + * @see u_strToUTF8 + * @draft ICU 3.6 + */ +U_DRAFT const char * U_EXPORT2 +ures_getUTF8String(const UResourceBundle *resB, + char *dest, int32_t *length, + UBool forceCopy, + UErrorCode *status); + /** * Returns a binary data from a binary resource. * @@ -490,11 +555,11 @@ ures_hasNext(const UResourceBundle *resourceBundle); * to iterate over. Features a fill-in parameter. * * @param resourceBundle a resource - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be deleted by the caller. + * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. You may still get a non NULL result even if an * error occured. Check status instead. - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it + * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ U_STABLE UResourceBundle* U_EXPORT2 @@ -525,11 +590,11 @@ ures_getNextString(UResourceBundle *resourceBundle, * * @param resourceBundle the resource bundle from which to get a sub-resource * @param indexR an index to the wanted resource. - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be deleted by the caller. + * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. Don't count on NULL being returned if an error has * occured. Check status instead. - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it + * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ U_STABLE UResourceBundle* U_EXPORT2 @@ -555,16 +620,71 @@ ures_getStringByIndex(const UResourceBundle *resourceBundle, int32_t* len, UErrorCode *status); +/** + * Returns a UTF-8 string from a resource at the specified index. + * The UTF-8 string may be returnable directly as a pointer, or + * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() + * or equivalent. + * + * If forceCopy==TRUE, then the string is always written to the dest buffer + * and dest is returned. + * + * If forceCopy==FALSE, then the string is returned as a pointer if possible, + * without needing a dest buffer (it can be NULL). If the string needs to be + * copied or transformed, then it may be placed into dest at an arbitrary offset. + * + * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and + * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual. + * + * If the string is transformed from UTF-16, then a conversion error may occur + * if an unpaired surrogate is encountered. If the function is successful, then + * the output UTF-8 string is always well-formed. + * + * @param resB Resource bundle. + * @param index An index to the wanted string. + * @param dest Destination buffer. Can be NULL only if capacity=*length==0. + * @param pLength Input: Capacity of destination buffer. + * Output: Actual length of the UTF-8 string, not counting the + * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. + * Can be NULL, meaning capacity=0 and the string length is not + * returned to the caller. + * @param forceCopy If TRUE, then the output string will always be written to + * dest, with U_BUFFER_OVERFLOW_ERROR and + * U_STRING_NOT_TERMINATED_WARNING set if appropriate. + * If FALSE, then the dest buffer may or may not contain a + * copy of the string. dest may or may not be modified. + * If a copy needs to be written, then the UErrorCode parameter + * indicates overflow etc. as usual. + * @param status Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return The pointer to the UTF-8 string. It may be dest, or at some offset + * from dest (only if !forceCopy), or in unrelated memory. + * Always NUL-terminated unless the string was written to dest and + * length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set). + * + * @see ures_getStringByIndex + * @see u_strToUTF8 + * @draft ICU 3.6 + */ +U_DRAFT const char * U_EXPORT2 +ures_getUTF8StringByIndex(const UResourceBundle *resB, + int32_t index, + char *dest, int32_t *pLength, + UBool forceCopy, + UErrorCode *status); + /** * Returns a resource in a given resource that has a given key. This procedure works only with table * resources. Features a fill-in parameter. * * @param resourceBundle a resource * @param key a key associated with the wanted resource - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be deleted by the caller. + * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it + * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ U_STABLE UResourceBundle* U_EXPORT2 @@ -591,6 +711,63 @@ ures_getStringByKey(const UResourceBundle *resB, int32_t* len, UErrorCode *status); +/** + * Returns a UTF-8 string from a resource and a key. + * This function works only with table resources. + * + * The UTF-8 string may be returnable directly as a pointer, or + * it may need to be copied, or transformed from UTF-16 using u_strToUTF8() + * or equivalent. + * + * If forceCopy==TRUE, then the string is always written to the dest buffer + * and dest is returned. + * + * If forceCopy==FALSE, then the string is returned as a pointer if possible, + * without needing a dest buffer (it can be NULL). If the string needs to be + * copied or transformed, then it may be placed into dest at an arbitrary offset. + * + * If the string is to be written to dest, then U_BUFFER_OVERFLOW_ERROR and + * U_STRING_NOT_TERMINATED_WARNING are set if appropriate, as usual. + * + * If the string is transformed from UTF-16, then a conversion error may occur + * if an unpaired surrogate is encountered. If the function is successful, then + * the output UTF-8 string is always well-formed. + * + * @param resB Resource bundle. + * @param key A key associated with the wanted resource + * @param dest Destination buffer. Can be NULL only if capacity=*length==0. + * @param pLength Input: Capacity of destination buffer. + * Output: Actual length of the UTF-8 string, not counting the + * terminating NUL, even in case of U_BUFFER_OVERFLOW_ERROR. + * Can be NULL, meaning capacity=0 and the string length is not + * returned to the caller. + * @param forceCopy If TRUE, then the output string will always be written to + * dest, with U_BUFFER_OVERFLOW_ERROR and + * U_STRING_NOT_TERMINATED_WARNING set if appropriate. + * If FALSE, then the dest buffer may or may not contain a + * copy of the string. dest may or may not be modified. + * If a copy needs to be written, then the UErrorCode parameter + * indicates overflow etc. as usual. + * @param status Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return The pointer to the UTF-8 string. It may be dest, or at some offset + * from dest (only if !forceCopy), or in unrelated memory. + * Always NUL-terminated unless the string was written to dest and + * length==capacity (in which case U_STRING_NOT_TERMINATED_WARNING is set). + * + * @see ures_getStringByKey + * @see u_strToUTF8 + * @draft ICU 3.6 + */ +U_DRAFT const char * U_EXPORT2 +ures_getUTF8StringByKey(const UResourceBundle *resB, + const char *key, + char *dest, int32_t *pLength, + UBool forceCopy, + UErrorCode *status); + #ifdef XP_CPLUSPLUS #include "unicode/unistr.h" @@ -598,12 +775,12 @@ U_NAMESPACE_BEGIN /** * returns a string from a string resource type * - * @param resB a resource + * @param resB a resource * @param status: fills in the outgoing error code * could be U_MISSING_RESOURCE_ERROR if the key is not found * could be a non-failing error * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return an UnicodeString object. If there is an error, string is bogus + * @return a UnicodeString object. If there is an error, string is bogus * @stable ICU 2.0 */ inline UnicodeString @@ -678,41 +855,16 @@ U_NAMESPACE_END #endif - -/** - * Get a resource with multi-level fallback. Normally only the top level resources will - * fallback to its parent. This performs fallback on subresources. For example, when a table - * is defined in a resource bundle and a parent resource bundle, normally no fallback occurs - * on the sub-resources because the table is defined in the current resource bundle, but this - * function can perform fallback on the sub-resources of the table. - * @param resB a resource - * @param inKey a key associated with the requested resource - * @param fillIn if NULL a new UResourceBundle struct is allocated and must be deleted by the caller. - * Alternatively, you can supply a struct to be filled by this function. - * @param status: fills in the outgoing error code - * could be U_MISSING_RESOURCE_ERROR if the key is not found - * could be a non-failing error - * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING - * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it - * @internal ICU 3.0 - */ -U_INTERNAL UResourceBundle* U_EXPORT2 -ures_getByKeyWithFallback(const UResourceBundle *resB, - const char* inKey, - UResourceBundle *fillIn, - UErrorCode *status); - - /** * Create a string enumerator, owned by the caller, of all locales located within * the specified resource tree. - * @param path path to the tree, such as (NULL) or U_ICUDATA_ALIAS or or "ICUDATA-coll" + * @param packageName name of the tree, such as (NULL) or U_ICUDATA_ALIAS or or "ICUDATA-coll" * This call is similar to uloc_getAvailable(). * @param status error code - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UEnumeration* U_EXPORT2 -ures_openAvailableLocales(const char *path, UErrorCode *status); +U_STABLE UEnumeration* U_EXPORT2 +ures_openAvailableLocales(const char *packageName, UErrorCode *status); #endif /*_URES*/ diff --git a/icuSources/common/unicode/uscript.h b/icuSources/common/unicode/uscript.h index f31d7480..d7cbc38e 100644 --- a/icuSources/common/unicode/uscript.h +++ b/icuSources/common/unicode/uscript.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -17,7 +17,28 @@ #include "unicode/utypes.h" /** - * Constants for Unicode script values from ScriptNames.txt . + * \file + * \brief C API: Unicode Script Information + */ + +/** + * Constants for ISO 15924 script codes. + * + * Many of these script codes - those from Unicode's ScriptNames.txt - + * are character property values for Unicode's Script property. + * See UAX #24 Script Names (http://www.unicode.org/reports/tr24/). + * + * Starting with ICU 3.6, constants for most ISO 15924 script codes + * are included (currently excluding private-use codes Qaaa..Qabx). + * For scripts for which there are codes in ISO 15924 but which are not + * used in the Unicode Character Database (UCD), there are no Unicode characters + * associated with those scripts. + * + * For example, there are no characters that have a UCD script code of + * Hans or Hant. All Han ideographs have the Hani script code. + * The Hans and Hant script codes are used with CLDR data. + * + * ISO 15924 script codes are included for use with CLDR and similar. * * @stable ICU 2.2 */ @@ -31,11 +52,11 @@ typedef enum UScriptCode { USCRIPT_BOPOMOFO = 5, /* Bopo */ USCRIPT_CHEROKEE = 6, /* Cher */ USCRIPT_COPTIC = 7, /* Copt */ - USCRIPT_CYRILLIC = 8, /* Cyrl (Cyrs) */ + USCRIPT_CYRILLIC = 8, /* Cyrl */ USCRIPT_DESERET = 9, /* Dsrt */ USCRIPT_DEVANAGARI = 10, /* Deva */ USCRIPT_ETHIOPIC = 11, /* Ethi */ - USCRIPT_GEORGIAN = 12, /* Geor (Geon, Geoa) */ + USCRIPT_GEORGIAN = 12, /* Geor */ USCRIPT_GOTHIC = 13, /* Goth */ USCRIPT_GREEK = 14, /* Grek */ USCRIPT_GUJARATI = 15, /* Gujr */ @@ -48,7 +69,7 @@ typedef enum UScriptCode { USCRIPT_KATAKANA = 22, /* Kana */ USCRIPT_KHMER = 23, /* Khmr */ USCRIPT_LAO = 24, /* Laoo */ - USCRIPT_LATIN = 25, /* Latn (Latf, Latg) */ + USCRIPT_LATIN = 25, /* Latn */ USCRIPT_MALAYALAM = 26, /* Mlym */ USCRIPT_MONGOLIAN = 27, /* Mong */ USCRIPT_MYANMAR = 28, /* Mymr */ @@ -57,7 +78,7 @@ typedef enum UScriptCode { USCRIPT_ORIYA = 31, /* Orya */ USCRIPT_RUNIC = 32, /* Runr */ USCRIPT_SINHALA = 33, /* Sinh */ - USCRIPT_SYRIAC = 34, /* Syrc (Syrj, Syrn, Syre) */ + USCRIPT_SYRIAC = 34, /* Syrc */ USCRIPT_TAMIL = 35, /* Taml */ USCRIPT_TELUGU = 36, /* Telu */ USCRIPT_THAANA = 37, /* Thaa */ @@ -74,19 +95,74 @@ typedef enum UScriptCode { USCRIPT_TAGBANWA = 45, /* Tagb */ /* New scripts in Unicode 4 @stable ICU 2.6 */ - USCRIPT_BRAILLE, /* Brai */ - USCRIPT_CYPRIOT, /* Cprt */ - USCRIPT_LIMBU, /* Limb */ - USCRIPT_LINEAR_B, /* Linb */ - USCRIPT_OSMANYA, /* Osma */ - USCRIPT_SHAVIAN, /* Shaw */ - USCRIPT_TAI_LE, /* Tale */ - USCRIPT_UGARITIC, /* Ugar */ + USCRIPT_BRAILLE = 46, /* Brai */ + USCRIPT_CYPRIOT = 47, /* Cprt */ + USCRIPT_LIMBU = 48, /* Limb */ + USCRIPT_LINEAR_B = 49, /* Linb */ + USCRIPT_OSMANYA = 50, /* Osma */ + USCRIPT_SHAVIAN = 51, /* Shaw */ + USCRIPT_TAI_LE = 52, /* Tale */ + USCRIPT_UGARITIC = 53, /* Ugar */ - /** New script code in Unicode 4.0.1 @draft ICU 3.0 */ - USCRIPT_KATAKANA_OR_HIRAGANA,/*Hrkt */ + /** New script code in Unicode 4.0.1 @stable ICU 3.0 */ + USCRIPT_KATAKANA_OR_HIRAGANA = 54,/*Hrkt */ + +#ifndef U_HIDE_DRAFT_API + /* New scripts in Unicode 4.1 @draft ICU 3.4 */ + USCRIPT_BUGINESE = 55, /* Bugi */ + USCRIPT_GLAGOLITIC = 56, /* Glag */ + USCRIPT_KHAROSHTHI = 57, /* Khar */ + USCRIPT_SYLOTI_NAGRI = 58, /* Sylo */ + USCRIPT_NEW_TAI_LUE = 59, /* Talu */ + USCRIPT_TIFINAGH = 60, /* Tfng */ + USCRIPT_OLD_PERSIAN = 61, /* Xpeo */ - USCRIPT_CODE_LIMIT + /* New script codes from ISO 15924 @draft ICU 3.6 */ + USCRIPT_BALINESE = 62, /* Bali */ + USCRIPT_BATAK = 63, /* Batk */ + USCRIPT_BLISSYMBOLS = 64, /* Blis */ + USCRIPT_BRAHMI = 65, /* Brah */ + USCRIPT_CHAM = 66, /* Cham */ + USCRIPT_CIRTH = 67, /* Cirt */ + USCRIPT_OLD_CHURCH_SLAVONIC_CYRILLIC = 68, /* Cyrs */ + USCRIPT_DEMOTIC_EGYPTIAN = 69, /* Egyd */ + USCRIPT_HIERATIC_EGYPTIAN = 70, /* Egyh */ + USCRIPT_EGYPTIAN_HIEROGLYPHS = 71, /* Egyp */ + USCRIPT_KHUTSURI = 72, /* Geok */ + USCRIPT_SIMPLIFIED_HAN = 73, /* Hans */ + USCRIPT_TRADITIONAL_HAN = 74, /* Hant */ + USCRIPT_PAHAWH_HMONG = 75, /* Hmng */ + USCRIPT_OLD_HUNGARIAN = 76, /* Hung */ + USCRIPT_HARAPPAN_INDUS = 77, /* Inds */ + USCRIPT_JAVANESE = 78, /* Java */ + USCRIPT_KAYAH_LI = 79, /* Kali */ + USCRIPT_LATIN_FRAKTUR = 80, /* Latf */ + USCRIPT_LATIN_GAELIC = 81, /* Latg */ + USCRIPT_LEPCHA = 82, /* Lepc */ + USCRIPT_LINEAR_A = 83, /* Lina */ + USCRIPT_MANDAEAN = 84, /* Mand */ + USCRIPT_MAYAN_HIEROGLYPHS = 85, /* Maya */ + USCRIPT_MEROITIC = 86, /* Mero */ + USCRIPT_NKO = 87, /* Nkoo */ + USCRIPT_ORKHON = 88, /* Orkh */ + USCRIPT_OLD_PERMIC = 89, /* Perm */ + USCRIPT_PHAGS_PA = 90, /* Phag */ + USCRIPT_PHOENICIAN = 91, /* Phnx */ + USCRIPT_PHONETIC_POLLARD = 92, /* Plrd */ + USCRIPT_RONGORONGO = 93, /* Roro */ + USCRIPT_SARATI = 94, /* Sara */ + USCRIPT_ESTRANGELO_SYRIAC = 95, /* Syre */ + USCRIPT_WESTERN_SYRIAC = 96, /* Syrj */ + USCRIPT_EASTERN_SYRIAC = 97, /* Syrn */ + USCRIPT_TENGWAR = 98, /* Teng */ + USCRIPT_VAI = 99, /* Vaii */ + USCRIPT_VISIBLE_SPEECH = 100, /* Visp */ + USCRIPT_CUNEIFORM = 101,/* Xsux */ + USCRIPT_UNWRITTEN_LANGUAGES = 102,/* Zxxx */ + USCRIPT_UNKNOWN = 103,/* Zzzz */ /* Unknown="Code for uncoded script", for unassigned code points */ + /* Private use codes from Qaaa - Qabx are not supported*/ +#endif /* U_HIDE_DRAFT_API */ + USCRIPT_CODE_LIMIT = 104 } UScriptCode; /** diff --git a/icuSources/common/unicode/uset.h b/icuSources/common/unicode/uset.h index b82ceb8f..e6c7d3ec 100644 --- a/icuSources/common/unicode/uset.h +++ b/icuSources/common/unicode/uset.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -57,27 +57,39 @@ enum { * will match 'a', 'A', 'b', and 'B'. "[^ab]" with this flag will * match all except 'a', 'A', 'b', and 'B'. This performs a full * closure over case mappings, e.g. U+017F for s. + * + * The resulting set is a superset of the input for the code points but + * not for the strings. + * It performs a case mapping closure of the code points and adds + * full case folding strings for the code points, and reduces strings of + * the original set to their full case folding equivalents. + * + * This is designed for case-insensitive matches, for example + * in regular expressions. The full code point case closure allows checking of + * an input character directly against the closure set. + * Strings are matched by comparing the case-folded form from the closure + * set with an incremental case folding of the string in question. + * + * The closure set will also contain single code points if the original + * set contained case-equivalent strings (like U+00DF for "ss" or "Ss" etc.). + * This is not necessary (that is, redundant) for the above matching method + * but results in the same closure sets regardless of whether the original + * set contained the code point or a string. + * * @stable ICU 2.4 */ USET_CASE_INSENSITIVE = 2, - /** - * Bitmask for UnicodeSet::closeOver() indicating letter case. - * This may be ORed together with other selectors. - * @internal - */ - USET_CASE = 2, - /** * Enable case insensitive matching. E.g., "[ab]" with this flag * will match 'a', 'A', 'b', and 'B'. "[^ab]" with this flag will * match all except 'a', 'A', 'b', and 'B'. This adds the lower-, * title-, and uppercase mappings as well as the case folding * of each existing element in the set. - * @draft ICU 3.2 + * @stable ICU 3.2 */ USET_ADD_CASE_MAPPINGS = 4, - + /** * Enough for any single-code point set * @internal @@ -173,9 +185,9 @@ uset_close(USet* set); * @param set the object to set to the given range * @param start first character in the set, inclusive * @param end last character in the set, inclusive - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_set(USet* set, UChar32 start, UChar32 end); @@ -197,9 +209,9 @@ uset_set(USet* set, * If the status code indicates failure, then the return value * is the index of the error in the source. * - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uset_applyPattern(USet *set, const UChar *pattern, int32_t patternLength, uint32_t options, @@ -224,9 +236,9 @@ uset_applyPattern(USet *set, * * @param ec error code input/output parameter * - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_applyIntPropertyValue(USet* set, UProperty prop, int32_t value, UErrorCode* ec); @@ -246,7 +258,8 @@ uset_applyIntPropertyValue(USet* set, * matched loosely and correspond to the following sets: * * "ANY" = [\\u0000-\\U0010FFFF], - * "ASCII" = [\\u0000-\\u007F]. + * "ASCII" = [\\u0000-\\u007F], + * "Assigned" = [:^Cn:]. * * @param propLength the length of the prop, or -1 if NULL * @@ -261,9 +274,9 @@ uset_applyIntPropertyValue(USet* set, * * @param ec error code input/output parameter * - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_applyPropertyAlias(USet* set, const UChar *prop, int32_t propLength, const UChar *value, int32_t valueLength, @@ -276,9 +289,9 @@ uset_applyPropertyAlias(USet* set, * @param pattern a string specifying the pattern * @param patternLength the length of the pattern, or -1 if NULL * @param pos the given position - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uset_resemblesPattern(const UChar *pattern, int32_t patternLength, int32_t pos); @@ -349,6 +362,17 @@ uset_addRange(USet* set, UChar32 start, UChar32 end); U_STABLE void U_EXPORT2 uset_addString(USet* set, const UChar* str, int32_t strLen); +/** + * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"} + * If this set already any particular character, it has no effect on that character. + * @param set the object to which to add the character + * @param str the source string + * @param strLen the length of the string or -1 if null terminated. + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen); + /** * Removes the given character from the given USet. After this call, * uset_contains(set, c) will return FALSE. @@ -389,9 +413,9 @@ uset_removeString(USet* set, const UChar* str, int32_t strLen); * @param set the object from which the elements are to be removed * @param removeSet the object that defines which elements will be * removed from this set - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_removeAll(USet* set, const USet* removeSet); /** @@ -405,9 +429,9 @@ uset_removeAll(USet* set, const USet* removeSet); * to this set. * @param end last character, inclusive, of range to be retained * to this set. - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_retain(USet* set, UChar32 start, UChar32 end); /** @@ -419,9 +443,9 @@ uset_retain(USet* set, UChar32 start, UChar32 end); * * @param set the object on which to perform the retain * @param retain set that defines which elements this set will retain - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_retainAll(USet* set, const USet* retain); /** @@ -429,9 +453,9 @@ uset_retainAll(USet* set, const USet* retain); * possible space, without changing this object's value. * * @param set the object on which to perfrom the compact - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_compact(USet* set); /** @@ -452,9 +476,9 @@ uset_complement(USet* set); * @param set the set with which to complement * @param complement set that defines which elements will be xor'ed * from this set. - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uset_complementAll(USet* set, const USet* complement); /** @@ -517,9 +541,9 @@ uset_containsString(const USet* set, const UChar* str, int32_t strLen); * @param set the set * @param c the character to obtain the index for * @return an index from 0..size()-1, or -1 - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uset_indexOf(const USet* set, UChar32 c); /** @@ -530,9 +554,9 @@ uset_indexOf(const USet* set, UChar32 c); * @param set the set * @param index an index from 0..size()-1 to obtain the char for * @return the character at the given index, or (UChar32)-1. - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UChar32 U_EXPORT2 +U_STABLE UChar32 U_EXPORT2 uset_charAt(const USet* set, int32_t index); /** @@ -583,24 +607,37 @@ uset_getItem(const USet* set, int32_t itemIndex, /** * Returns true if set1 contains all the characters and strings - * of set2. It answers the question, 'Is set1 a subset of set2?' + * of set2. It answers the question, 'Is set1 a superset of set2?' * @param set1 set to be checked for containment * @param set2 set to be checked for containment * @return true if the test condition is met - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uset_containsAll(const USet* set1, const USet* set2); +/** + * Returns true if this set contains all the characters + * of the given string. This is does not check containment of grapheme + * clusters, like uset_containsString. + * @param set set of characters to be checked for containment + * @param str string containing codepoints to be checked for containment + * @param strLen the length of the string or -1 if null terminated. + * @return true if the test condition is met + * @draft ICU 3.4 + */ +U_DRAFT UBool U_EXPORT2 +uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen); + /** * Returns true if set1 contains none of the characters and strings * of set2. It answers the question, 'Is set1 a disjoint set of set2?' * @param set1 set to be checked for containment * @param set2 set to be checked for containment * @return true if the test condition is met - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uset_containsNone(const USet* set1, const USet* set2); /** @@ -609,9 +646,9 @@ uset_containsNone(const USet* set1, const USet* set2); * @param set1 set to be checked for containment * @param set2 set to be checked for containment * @return true if the test condition is met - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uset_containsSome(const USet* set1, const USet* set2); /** @@ -620,9 +657,9 @@ uset_containsSome(const USet* set1, const USet* set2); * @param set1 set to be checked for containment * @param set2 set to be checked for containment * @return true if the test condition is met - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uset_equals(const USet* set1, const USet* set2); /********************************************************************* diff --git a/icuSources/common/unicode/usetiter.h b/icuSources/common/unicode/usetiter.h index 9584b748..defa75cd 100644 --- a/icuSources/common/unicode/usetiter.h +++ b/icuSources/common/unicode/usetiter.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -11,30 +11,40 @@ #include "unicode/uobject.h" #include "unicode/unistr.h" +/** + * \file + * \brief C++ API: UnicodeSetIterator iterates over the contents of a UnicodeSet. + */ + U_NAMESPACE_BEGIN class UnicodeSet; class UnicodeString; /** + * * UnicodeSetIterator iterates over the contents of a UnicodeSet. It * iterates over either code points or code point ranges. After all * code points or ranges have been returned, it returns the * multicharacter strings of the UnicodSet, if any. * - *

    To iterate over code points, use a loop like this: + * This class is not intended to be subclassed. Consider any fields + * or methods declared as "protected" to be private. The use of + * protected in this class is an artifact of history. + * + *

    To iterate over code points and strings, use a loop like this: *

      * UnicodeSetIterator it(set);
      * while (set.next()) {
    - *   if (set.isString()) {
    - *     processString(set.getString());
    - *   } else {
    - *     processCodepoint(set.getCodepoint());
    - *   }
    + *     processItem(set.getString());
      * }
      * 
    + *

    Each item in the set is accessed as a string. Set elements + * consisting of single code points are returned as strings containing + * just the one code point. * - *

    To iterate over code point ranges, use a loop like this: + *

    To iterate over code point ranges, instead of individual code points, + * use a loop like this: *

      * UnicodeSetIterator it(set);
      * while (it.nextRange()) {
    @@ -115,9 +125,14 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
          * caller can retrieve it with getString().  If this
          * method returns false, the current element is a code point or
          * code point range, depending on whether next() or
    -     * nextRange() was called, and the caller can retrieve it
    -     * with getCodepoint() and, for a range,
    -     * getCodepointEnd().
    +     * nextRange() was called.
    +     * Elements of types string and codepoint can both be retrieved
    +     * with the function getString().
    +     * Elements of type codepoint can also be retrieved with
    +     * getCodepoint().
    +     * For ranges, getCodepoint() returns the starting codepoint
    +     * of the range, and getCodepointEnd() returns the end
    +     * of the range.
          * @stable ICU 2.4
          */
         inline UBool isString() const;
    @@ -139,28 +154,37 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
     
         /**
          * Returns the current string, if isString() returned
    -     * true.  Otherwise returns an undefined result.
    +     * true.  If the current iteration item is a code point, a UnicodeString
    +     * containing that single code point is returned.
    +     *
    +     * Ownership of the returned string remains with the iterator.
    +     * The string is guaranteed to remain valid only until the iterator is
    +     *   advanced to the next item, or until the iterator is deleted.
    +     * 
          * @stable ICU 2.4
          */
    -    inline const UnicodeString& getString() const;
    +    const UnicodeString& getString();
     
         /**
    -     * Returns the next element in the set, either a single code point
    -     * or a string.  If there are no more elements in the set, return
    -     * false.  If codepoint == IS_STRING, the value is a
    -     * string in the string field.  Otherwise the value is a
    -     * single code point in the codepoint field.
    +     * Advances the iteration position to the next element in the set, 
    +     * which can be either a single code point or a string.  
    +     * If there are no more elements in the set, return false.
    +     *
    +     * 

    + * If isString() == TRUE, the value is a + * string, otherwise the value is a + * single code point. Elements of either type can be retrieved + * with the function getString(), while elements of + * consisting of a single code point can be retrieved with + * getCodepoint() * *

    The order of iteration is all code points in sorted order, - * followed by all strings sorted order. codepointEnd is - * undefined after calling this method. string is - * undefined unless codepoint == IS_STRING. Do not mix + * followed by all strings sorted order. Do not mix * calls to next() and nextRange() without * calling reset() between them. The results of doing so * are undefined. * - * @return true if there was another element in the set and this - * object contains the element. + * @return true if there was another element in the set. * @stable ICU 2.4 */ UBool next(); @@ -168,21 +192,20 @@ class U_COMMON_API UnicodeSetIterator : public UObject { /** * Returns the next element in the set, either a code point range * or a string. If there are no more elements in the set, return - * false. If codepoint == IS_STRING, the value is a - * string in the string field. Otherwise the value is a - * range of one or more code points from codepoint to - * codepointeEnd inclusive. + * false. If isString() == TRUE, the value is a + * string and can be accessed with getString(). Otherwise the value is a + * range of one or more code points from getCodepoint() to + * getCodepointeEnd() inclusive. * *

    The order of iteration is all code points ranges in sorted * order, followed by all strings sorted order. Ranges are - * disjoint and non-contiguous. string is undefined - * unless codepoint == IS_STRING. Do not mix calls to + * disjoint and non-contiguous. The value returned from getString() + * is undefined unless isString() == TRUE. Do not mix calls to * next() and nextRange() without calling * reset() between them. The results of doing so are * undefined. * - * @return true if there was another element in the set and this - * object contains the element. + * @return true if there was another element in the set. * @stable ICU 2.4 */ UBool nextRange(); @@ -253,6 +276,13 @@ class U_COMMON_API UnicodeSetIterator : public UObject { */ int32_t stringCount; + /** + * Points to the string to use when the caller asks for a + * string and the current iteration item is a code point, not a string. + * @internal + */ + UnicodeString *cpString; + /** Copy constructor. Disallowed. * @stable ICU 2.4 */ @@ -282,9 +312,6 @@ inline UChar32 UnicodeSetIterator::getCodepointEnd() const { return codepointEnd; } -inline const UnicodeString& UnicodeSetIterator::getString() const { - return *string; -} U_NAMESPACE_END diff --git a/icuSources/common/unicode/usprep.h b/icuSources/common/unicode/usprep.h index 5bedc11f..c7e75a53 100644 --- a/icuSources/common/unicode/usprep.h +++ b/icuSources/common/unicode/usprep.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -17,9 +17,14 @@ #ifndef __USPREP_H__ #define __USPREP_H__ +/** + * \file + * \brief C API: Implements the StringPrep algorithm. + */ + #include "unicode/utypes.h" /** - *\file + * * StringPrep API implements the StingPrep framework as described by RFC 3454. * StringPrep prepares Unicode strings for use in network protocols. * Profiles of StingPrep are set of rules and data according to with the @@ -54,11 +59,9 @@ #include "unicode/parseerr.h" -#ifndef U_HIDE_DRAFT_API - /** * The StringPrep profile - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef struct UStringPrepProfile UStringPrepProfile; @@ -67,7 +70,7 @@ typedef struct UStringPrepProfile UStringPrepProfile; * Option to prohibit processing of unassigned code points in the input * * @see usprep_prepare - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define USPREP_DEFAULT 0x0000 @@ -75,13 +78,11 @@ typedef struct UStringPrepProfile UStringPrepProfile; * Option to allow processing of unassigned code points in the input * * @see usprep_prepare - * @draft ICU 2.8 + * @stable ICU 2.8 */ #define USPREP_ALLOW_UNASSIGNED 0x0001 -#endif /*U_HIDE_DRAFT_API*/ - /** * Creates a StringPrep profile from the data file. * @@ -95,9 +96,9 @@ typedef struct UStringPrepProfile UStringPrepProfile; * @return Pointer to UStringPrepProfile that is opened. Should be closed by * calling usprep_close() * @see usprep_close() - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT UStringPrepProfile* U_EXPORT2 +U_STABLE UStringPrepProfile* U_EXPORT2 usprep_open(const char* path, const char* fileName, UErrorCode* status); @@ -106,9 +107,9 @@ usprep_open(const char* path, /** * Closes the profile * @param profile The profile to close - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 usprep_close(UStringPrepProfile* profile); @@ -138,10 +139,10 @@ usprep_close(UStringPrepProfile* profile); * too many code points. * U_BUFFER_OVERFLOW_ERROR if destCapacity is not enough * @return The number of UChars in the destination buffer - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 usprep_prepare( const UStringPrepProfile* prep, const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, diff --git a/icuSources/common/unicode/ustring.h b/icuSources/common/unicode/ustring.h index 6ebb6fbe..4777c269 100644 --- a/icuSources/common/unicode/ustring.h +++ b/icuSources/common/unicode/ustring.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -65,11 +65,15 @@ * their occurrence is rare. Almost all characters in modern use require only * a single UChar code unit (i.e., their code point values are <=0xffff). * - * For more details see the User Guide Strings chapter (http://oss.software.ibm.com/icu/userguide/strings.html). + * For more details see the User Guide Strings chapter (http://icu.sourceforge.net/userguide/strings.html). * For a discussion of the handling of unpaired surrogates see also * Jitterbug 2145 and its icu mailing list proposal on 2002-sep-18. */ +/** +* \defgroup ustring_ustrlen + */ +/*@{*/ /** * Determine the length of an array of UChar. * @@ -79,6 +83,7 @@ */ U_STABLE int32_t U_EXPORT2 u_strlen(const UChar *s); +/*@}*/ /** * Count Unicode code points in the length UChar code units of the string. @@ -898,22 +903,22 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count); * * Usage: *

    - *     U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11);
    - *     U_STRING_DECL(ustringVar2, "jumps 5%", 8);
    - *     static UBool didInit=FALSE;
    - *  
    - *     int32_t function() {
    - *         if(!didInit) {
    - *             U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11);
    - *             U_STRING_INIT(ustringVar2, "jumps 5%", 8);
    - *             didInit=TRUE;
    - *         }
    - *         return u_strcmp(ustringVar1, ustringVar2);
    - *     }
    + *    U_STRING_DECL(ustringVar1, "Quick-Fox 2", 11);
    + *    U_STRING_DECL(ustringVar2, "jumps 5%", 8);
    + *    static UBool didInit=FALSE;
    + * 
    + *    int32_t function() {
    + *        if(!didInit) {
    + *            U_STRING_INIT(ustringVar1, "Quick-Fox 2", 11);
    + *            U_STRING_INIT(ustringVar2, "jumps 5%", 8);
    + *            didInit=TRUE;
    + *        }
    + *        return u_strcmp(ustringVar1, ustringVar2);
    + *    }
      * 
    * @stable ICU 2.0 */ -#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && U_CHARSET_FAMILY==U_ASCII_FAMILY +#if U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16))) # define U_STRING_DECL(var, cs, length) static const wchar_t var[(length)+1]={ L ## cs } /**@stable ICU 2.0 */ # define U_STRING_INIT(var, cs, length) @@ -1157,6 +1162,7 @@ u_strFoldCase(UChar *dest, int32_t destCapacity, uint32_t options, UErrorCode *pErrorCode); +#if defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION /** * Converts a sequence of UChars to wchar_t units. * @@ -1209,6 +1215,8 @@ u_strFromWCS(UChar *dest, const wchar_t *src, int32_t srcLength, UErrorCode *pErrorCode); +#endif /* defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION */ + /** * Converts a sequence of UChars (UTF-16) to UTF-8 bytes * @@ -1227,6 +1235,8 @@ u_strFromWCS(UChar *dest, * which must not indicate a failure before the function call. * @return The pointer to destination buffer. * @stable ICU 2.0 + * @see u_strToUTF8WithSub + * @see u_strFromUTF8 */ U_STABLE char* U_EXPORT2 u_strToUTF8(char *dest, @@ -1254,6 +1264,8 @@ u_strToUTF8(char *dest, * which must not indicate a failure before the function call. * @return The pointer to destination buffer. * @stable ICU 2.0 + * @see u_strFromUTF8WithSub + * @see u_strFromUTF8Lenient */ U_STABLE UChar* U_EXPORT2 u_strFromUTF8(UChar *dest, @@ -1263,6 +1275,148 @@ u_strFromUTF8(UChar *dest, int32_t srcLength, UErrorCode *pErrorCode); +/** + * Converts a sequence of UChars (UTF-16) to UTF-8 bytes. + * Same as u_strToUTF8() except for the additional subchar which is output for + * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code. + * With subchar==U_SENTINEL, this function behaves exactly like u_strToUTF8(). + * + * @param dest A buffer for the result string. The result will be zero-terminated if + * the buffer is large enough. + * @param destCapacity The size of the buffer (number of chars). If it is 0, then + * dest may be NULL and the function will only return the length of the + * result without writing any of the result string (pre-flighting). + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of + * all the input units, even in case of a buffer overflow. + * @param src The original source string + * @param srcLength The length of the original string. If -1, then src must be zero-terminated. + * @param subchar The substitution character to use in place of an illegal input sequence, + * or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead. + * A substitution character can be any valid Unicode code point (up to U+10FFFF) + * except for surrogate code points (U+D800..U+DFFF). + * The recommended value is U+FFFD "REPLACEMENT CHARACTER". + * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0. + * Set to 0 if no substitutions occur or subchar<0. + * pNumSubstitutions can be NULL. + * @param pErrorCode Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return The pointer to destination buffer. + * @see u_strToUTF8 + * @see u_strFromUTF8WithSub + * @draft ICU 3.6 + */ +U_DRAFT char* U_EXPORT2 +u_strToUTF8WithSub(char *dest, + int32_t destCapacity, + int32_t *pDestLength, + const UChar *src, + int32_t srcLength, + UChar32 subchar, int32_t *pNumSubstitutions, + UErrorCode *pErrorCode); + +/** + * Converts a sequence of UTF-8 bytes to UChars (UTF-16). + * Same as u_strFromUTF8() except for the additional subchar which is output for + * illegal input sequences, instead of stopping with the U_INVALID_CHAR_FOUND error code. + * With subchar==U_SENTINEL, this function behaves exactly like u_strFromUTF8(). + * + * @param dest A buffer for the result string. The result will be zero-terminated if + * the buffer is large enough. + * @param destCapacity The size of the buffer (number of UChars). If it is 0, then + * dest may be NULL and the function will only return the length of the + * result without writing any of the result string (pre-flighting). + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of + * all the input units, even in case of a buffer overflow. + * @param src The original source string + * @param srcLength The length of the original string. If -1, then src must be zero-terminated. + * @param subchar The substitution character to use in place of an illegal input sequence, + * or U_SENTINEL if the function is to return with U_INVALID_CHAR_FOUND instead. + * A substitution character can be any valid Unicode code point (up to U+10FFFF) + * except for surrogate code points (U+D800..U+DFFF). + * The recommended value is U+FFFD "REPLACEMENT CHARACTER". + * @param pNumSubstitutions Output parameter receiving the number of substitutions if subchar>=0. + * Set to 0 if no substitutions occur or subchar<0. + * pNumSubstitutions can be NULL. + * @param pErrorCode Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return The pointer to destination buffer. + * @see u_strFromUTF8 + * @see u_strFromUTF8Lenient + * @see u_strToUTF8WithSub + * @draft ICU 3.6 + */ +U_DRAFT UChar* U_EXPORT2 +u_strFromUTF8WithSub(UChar *dest, + int32_t destCapacity, + int32_t *pDestLength, + const char *src, + int32_t srcLength, + UChar32 subchar, int32_t *pNumSubstitutions, + UErrorCode *pErrorCode); + +/** + * Converts a sequence of UTF-8 bytes to UChars (UTF-16). + * Same as u_strFromUTF8() except that this function is designed to be very fast, + * which it achieves by being lenient about malformed UTF-8 sequences. + * This function is intended for use in environments where UTF-8 text is + * expected to be well-formed. + * + * Its semantics are: + * - Well-formed UTF-8 text is correctly converted to well-formed UTF-16 text. + * - The function will not read beyond the input string, nor write beyond + * the destCapacity. + * - Malformed UTF-8 results in "garbage" 16-bit Unicode strings which may not + * be well-formed UTF-16. + * The function will resynchronize to valid code point boundaries + * within a small number of code points after an illegal sequence. + * - Non-shortest forms are not detected and will result in "spoofing" output. + * + * For further performance improvement, if srcLength is given (>=0), + * then it must be destCapacity>=srcLength. + * + * @param dest A buffer for the result string. The result will be zero-terminated if + * the buffer is large enough. + * @param destCapacity The size of the buffer (number of UChars). If it is 0, then + * dest may be NULL and the function will only return the length of the + * result without writing any of the result string (pre-flighting). + * Unlike for other ICU functions, if srcLength>=0 then it + * must be destCapacity>=srcLength. + * @param pDestLength A pointer to receive the number of units written to the destination. If + * pDestLength!=NULL then *pDestLength is always set to the + * number of output units corresponding to the transformation of + * all the input units, even in case of a buffer overflow. + * Unlike for other ICU functions, if srcLength>=0 but + * destCapacityIterating over text + * + * Here is sample code for a forward iteration over the contents of a UText + * + * \code + * UChar32 c; + * UText *ut = whatever(); + * + * for (c=utext_next32From(ut, 0); c>=0; c=utext_next32(ut)) { + * // do whatever with the codepoint c here. + * } + * \endcode + * + * And here is similar code to iterate in the reverse direction, from the end + * of the text towards the beginning. + * + * \code + * UChar32 c; + * UText *ut = whatever(); + * int textLength = utext_nativeLength(ut); + * for (c=utext_previous32From(ut, textLength); c>=0; c=utext_previous32(ut)) { + * // do whatever with the codepoint c here. + * } + * \endcode + * + * Characters and Indexing + * + * Indexing into text by UText functions is nearly always in terms of the native + * indexing of the underlying text storage. The storage format could be UTF-8 + * or UTF-32, for example. When coding to the UText access API, no assumptions + * can be made regarding the size of characters, or how far an index + * may move when iterating between characters. + * + * All indices supplied to UText functions are pinned to the length of the + * text. An out-of-bounds index is not considered to be an error, but is + * adjusted to be in the range 0 <= index <= length of input text. + * + * + * When an index position is returned from a UText function, it will be + * a native index to the underlying text. In the case of multi-unit characters, + * it will always refer to the first position of the character, + * never to the interior. This is essentially the same thing as saying that + * a returned index will always point to a boundary between characters. + * + * When a native index is supplied to a UText function, all indices that + * refer to any part of a multi-unit character representation are considered + * to be equivalent. In the case of multi-unit characters, an incoming index + * will be logically normalized to refer to the start of the character. + * + * It is possible to test whether a native index is on a code point boundary + * by doing a utext_setNativeIndex() followed by a utext_getNativeIndex(). + * If the index is returned unchanged, it was on a code point boundary. If + * an adjusted index is returned, the original index referred to the + * interior of a character. + * + * Conventions for calling UText functions + * + * Most UText access functions have as their first parameter a (UText *) pointer, + * which specifies the UText to be used. Unless otherwise noted, the + * pointer must refer to a valid, open UText. Attempting to + * use a closed UText or passing a NULL pointer is a programming error and + * will produce undefined results or NULL pointer exceptions. + * + * The UText_Open family of functions can either open an existing (closed) + * UText, or heap allocate a new UText. Here is sample code for creating + * a stack-allocated UText. + * + * \code + * char *s = whatever(); // A utf-8 string + * U_ErrorCode status = U_ZERO_ERROR; + * UText ut = UTEXT_INITIALIZER; + * utext_openUTF8(ut, s, -1, &status); + * if (U_FAILURE(status)) { + * // error handling + * } else { + * // work with the UText + * } + * \endcode + * + * Any existing UText passed to an open function _must_ have been initialized, + * either by the UTEXT_INITIALIZER, or by having been originally heap-allocated + * by an open function. Passing NULL will cause the open function to + * heap-allocate and fully initialize a new UText. + * + */ + + + +#include "unicode/utypes.h" +#ifdef XP_CPLUSPLUS +#include "unicode/rep.h" +#include "unicode/unistr.h" +#include "unicode/chariter.h" +#endif + + +U_CDECL_BEGIN + +struct UText; +typedef struct UText UText; /**< C typedef for struct UText. @draft ICU 3.6 */ + + +/*************************************************************************************** + * + * C Functions for creating UText wrappers around various kinds of text strings. + * + ****************************************************************************************/ + + +/** + * Close function for UText instances. + * Cleans up, releases any resources being held by an open UText. + *

    + * If the UText was originally allocated by one of the utext_open functions, + * the storage associated with the utext will also be freed. + * If the UText storage originated with the application, as it would with + * a local or static instance, the storage will not be deleted. + * + * An open UText can be reset to refer to new string by using one of the utext_open() + * functions without first closing the UText. + * + * @param ut The UText to be closed. + * @return NULL if the UText struct was deleted by the close. If the UText struct + * was originally provided by the caller to the open function, it is + * returned by this function, and may be safely used again in + * a subsequent utext_open. + * + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_close(UText *ut); + + +/** + * Open a read-only UText implementation for UTF-8 strings. + * + * \htmlonly + * Any invalid UTF-8 in the input will be handled in this way: + * a sequence of bytes that has the form of a truncated, but otherwise valid, + * UTF-8 sequence will be replaced by a single unicode replacement character, \uFFFD. + * Any other illegal bytes will each be replaced by a \uFFFD. + * \endhtmlonly + * + * @param ut Pointer to a UText struct. If NULL, a new UText will be created. + * If non-NULL, must refer to an initialized UText struct, which will then + * be reset to reference the specified UTF-8 string. + * @param s A UTF-8 string. Must not be NULL. + * @param length The length of the UTF-8 string in bytes, or -1 if the string is + * zero terminated. + * @param status Errors are returned here. + * @return A pointer to the UText. If a pre-allocated UText was provided, it + * will always be used and returned. + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status); + + +/** + * Open a read-only UText for UChar * string. + * + * @param ut Pointer to a UText struct. If NULL, a new UText will be created. + * If non-NULL, must refer to an initialized UText struct, which will then + * be reset to reference the specified UChar string. + * @param s A UChar (UTF-16) string + * @param length The number of UChars in the input string, or -1 if the string is + * zero terminated. + * @param status Errors are returned here. + * @return A pointer to the UText. If a pre-allocated UText was provided, it + * will always be used and returned. + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status); + + +#ifdef XP_CPLUSPLUS +/** + * Open a writable UText for a non-const UnicodeString. + * + * @param ut Pointer to a UText struct. If NULL, a new UText will be created. + * If non-NULL, must refer to an initialized UText struct, which will then + * be reset to reference the specified input string. + * @param s A UnicodeString. + * @param status Errors are returned here. + * @return Pointer to the UText. If a UText was supplied as input, this + * will always be used and returned. + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_openUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status); + + +/** + * Open a UText for a const UnicodeString. The resulting UText will not be writable. + * + * @param ut Pointer to a UText struct. If NULL, a new UText will be created. + * If non-NULL, must refer to an initialized UText struct, which will then + * be reset to reference the specified input string. + * @param s A const UnicodeString to be wrapped. + * @param status Errors are returned here. + * @return Pointer to the UText. If a UText was supplied as input, this + * will always be used and returned. + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_openConstUnicodeString(UText *ut, const UnicodeString *s, UErrorCode *status); + + +/** + * Open a writable UText implementation for an ICU Replaceable object. + * @param ut Pointer to a UText struct. If NULL, a new UText will be created. + * If non-NULL, must refer to an already existing UText, which will then + * be reset to reference the specified replaceable text. + * @param rep A Replaceable text object. + * @param status Errors are returned here. + * @return Pointer to the UText. If a UText was supplied as input, this + * will always be used and returned. + * @see Replaceable + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_openReplaceable(UText *ut, Replaceable *rep, UErrorCode *status); + +/** + * Open a UText implementation over an ICU CharacterIterator. + * @param ut Pointer to a UText struct. If NULL, a new UText will be created. + * If non-NULL, must refer to an already existing UText, which will then + * be reset to reference the specified replaceable text. + * @param ci A Character Iterator. + * @param status Errors are returned here. + * @return Pointer to the UText. If a UText was supplied as input, this + * will always be used and returned. + * @see Replaceable + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_openCharacterIterator(UText *ut, CharacterIterator *ic, UErrorCode *status); + +#endif + + +/** + * Clone a UText. This is much like opening a UText where the source text is itself + * another UText. + * + * A deep clone will copy both the UText data structures and the underlying text. + * The original and cloned UText will operate completely independently; modifications + * made to the text in one will not affect the other. Text providers are not + * required to support deep clones. The user of clone() must check the status return + * and be prepared to handle failures. + * + * The standard UText implementations for UTF8, UChar *, UnicodeString and + * Replaceable all support deep cloning. + * + * The UText returned from a deep clone will be writable, assuming that the text + * provider is able to support writing, even if the source UText had been made + * non-writable by means of UText_freeze(). + * + * A shallow clone replicates only the UText data structures; it does not make + * a copy of the underlying text. Shallow clones can be used as an efficient way to + * have multiple iterators active in a single text string that is not being + * modified. + * + * A shallow clone operation will not fail, barring truly exceptional conditions such + * as memory allocation failures. + * + * Shallow UText clones should be avoided if the UText functions that modify the + * text are expected to be used, either on the original or the cloned UText. + * Any such modifications can cause unpredictable behavior. Read Only + * shallow clones provide some protection against errors of this type by + * disabling text modification via the cloned UText. + * + * A shallow clone made with the readOnly parameter == FALSE will preserve the + * utext_isWritable() state of the source object. Note, however, that + * write operations must be avoided while more than one UText exists that refer + * to the same underlying text. + * + * A UText and its clone may be safely concurrently accessed by separate threads. + * This is true for read access only with shallow clones, and for both read and + * write access with deep clones. + * It is the responsibility of the Text Provider to ensure that this thread safety + * constraint is met. + * + * @param dest A UText struct to be filled in with the result of the clone operation, + * or NULL if the clone function should heap-allocate a new UText struct. + * If non-NULL, must refer to an already existing UText, which will then + * be reset to become the clone. + * @param src The UText to be cloned. + * @param deep TRUE to request a deep clone, FALSE for a shallow clone. + * @param readOnly TRUE to request that the cloned UText have read only access to the + * underlying text. + + * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR + * will be returned if the text provider is unable to clone the + * original text. + * @return The newly created clone, or NULL if the clone operation failed. + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status); + + +/** + * Compare two UText objects for equality. + * UTexts are equal if they are iterating over the same text, and + * have the same iteration position within the text. + * If either or both of the parameters are NULL, the comparison is FALSE. + * + * @param a The first of the two UTexts to compare. + * @param b The other UText to be compared. + * @return TRUE if the two UTexts are equal. + * @draft ICU 3.6 + */ +U_DRAFT UBool U_EXPORT2 +utext_equals(const UText *a, const UText *b); + + +/***************************************************************************** + * + * Functions to work with the text represeted by a UText wrapper + * + *****************************************************************************/ + +/** + * Get the length of the text. Depending on the characteristics + * of the underlying text representation, this may be expensive. + * @see utext_isLengthExpensive() + * + * + * @param ut the text to be accessed. + * @return the length of the text, expressed in native units. + * + * @draft ICU 3.4 + */ +U_DRAFT int64_t U_EXPORT2 +utext_nativeLength(UText *ut); + +/** + * Return TRUE if calculating the length of the text could be expensive. + * Finding the length of NUL terminated strings is considered to be expensive. + * + * Note that the value of this function may change + * as the result of other operations on a UText. + * Once the length of a string has been discovered, it will no longer + * be expensive to report it. + * + * @param ut the text to be accessed. + * @return TRUE if determining the length of the text could be time consuming. + * @draft ICU 3.4 + */ +U_DRAFT UBool U_EXPORT2 +utext_isLengthExpensive(const UText *ut); + +/** + * Returns the code point at the requested index, + * or U_SENTINEL (-1) if it is out of bounds. + * + * If the specified index points to the interior of a multi-unit + * character - one of the trail bytes of a UTF-8 sequence, for example - + * the complete code point will be returned. + * + * The iteration position will be set to the start of the returned code point. + * + * This function is roughly equivalent to the the sequence + * utext_setNativeIndex(index); + * utext_current32(); + * (There is a subtle difference if the index is out of bounds by being less than zero - + * utext_setNativeIndex(negative value) sets the index to zero, after which utext_current() + * will return the char at zero. utext_char32At(negative index), on the other hand, will + * return the U_SENTINEL value of -1.) + * + * @param ut the text to be accessed + * @param nativeIndex the native index of the character to be accessed. If the index points + * to other than the first unit of a multi-unit character, it will be adjusted + * to the start of the character. + * @return the code point at the specified index. + * @draft ICU 3.4 + */ +U_DRAFT UChar32 U_EXPORT2 +utext_char32At(UText *ut, int64_t nativeIndex); + + +/** + * + * Get the code point at the current iteration position, + * or U_SENTINEL (-1) if the iteration has reached the end of + * the input text. + * + * @param ut the text to be accessed. + * @return the Unicode code point at the current iterator position. + * @draft ICU 3.4 + */ +U_DRAFT UChar32 U_EXPORT2 +utext_current32(UText *ut); + + +/** + * Get the code point at the current iteration position of the UText, and + * advance the position to the first index following the character. + * + * If the position is at the end of the text (the index following + * the last character, which is also the length of the text), + * return U_SENTINEL (-1) and do not advance the index. + * + * This is a post-increment operation. + * + * An inline macro version of this function, UTEXT_NEXT32(), + * is available for performance critical use. + * + * @param ut the text to be accessed. + * @return the Unicode code point at the iteration position. + * @see UTEXT_NEXT32 + * @draft ICU 3.4 + */ +U_DRAFT UChar32 U_EXPORT2 +utext_next32(UText *ut); + + +/** + * Move the iterator position to the character (code point) whose + * index precedes the current position, and return that character. + * This is a pre-decrement operation. + * + * If the initial position is at the start of the text (index of 0) + * return U_SENTINEL (-1), and leave the position unchanged. + * + * An inline macro version of this function, UTEXT_PREVIOUS32(), + * is available for performance critical use. + * + * @param ut the text to be accessed. + * @return the previous UChar32 code point, or U_SENTINEL (-1) + * if the iteration has reached the start of the text. + * @see UTEXT_PREVIOUS32 + * @draft ICU 3.4 + */ +U_DRAFT UChar32 U_EXPORT2 +utext_previous32(UText *ut); + + +/** + * Set the iteration index and return the code point at that index. + * Leave the iteration index at the start of the following code point. + * + * This function is the most efficient and convenient way to + * begin a forward iteration. The results are identical to the those + * from the sequence + * \code + * utext_setIndex(); + * utext_next32(); + * \endcode + * + * @param ut the text to be accessed. + * @param nativeIndex Iteration index, in the native units of the text provider. + * @return Code point which starts at or before index, + * or U_SENTINEL (-1) if it is out of bounds. + * @draft ICU 3.4 + */ +U_DRAFT UChar32 U_EXPORT2 +utext_next32From(UText *ut, int64_t nativeIndex); + + + +/** + * Set the iteration index, and return the code point preceding the + * one specified by the initial index. Leave the iteration position + * at the start of the returned code point. + * + * This function is the most efficient and convenient way to + * begin a backwards iteration. + * + * @param ut the text to be accessed. + * @param nativeIndex Iteration index in the native units of the text provider. + * @return Code point preceding the one at the initial index, + * or U_SENTINEL (-1) if it is out of bounds. + * + * @draft ICU 3.4 + */ +U_DRAFT UChar32 U_EXPORT2 +utext_previous32From(UText *ut, int64_t nativeIndex); + +/** + * Get the current iterator position, which can range from 0 to + * the length of the text. + * The position is a native index into the input text, in whatever format it + * may have (possibly UTF-8 for example), and may not always be the same as + * the corresponding UChar (UTF-16) index. + * The returned position will always be aligned to a code point boundary. + * + * @param ut the text to be accessed. + * @return the current index position, in the native units of the text provider. + * @draft ICU 3.4 + */ +U_DRAFT int64_t U_EXPORT2 +utext_getNativeIndex(const UText *ut); + +/** + * Set the current iteration position to the nearest code point + * boundary at or preceding the specified index. + * The index is in the native units of the original input text. + * If the index is out of range, it will be pinned to be within + * the range of the input text. + *

    + * It will usually be more efficient to begin an iteration + * using the functions utext_next32From() or utext_previous32From() + * rather than setIndex(). + *

    + * Moving the index position to an adjacent character is best done + * with utext_next32(), utext_previous32() or utext_moveIndex32(). + * Attempting to do direct arithmetic on the index position is + * complicated by the fact that the size (in native units) of a + * character depends on the underlying representation of the character + * (UTF-8, UTF-16, UTF-32, arbitrary codepage), and is not + * easily knowable. + * + * @param ut the text to be accessed. + * @param nativeIndex the native unit index of the new iteration position. + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +utext_setNativeIndex(UText *ut, int64_t nativeIndex); + +/** + * Move the iterator postion by delta code points. The number of code points + * is a signed number; a negative delta will move the iterator backwards, + * towards the start of the text. + *

    + * The index is moved by delta code points + * forward or backward, but no further backward than to 0 and + * no further forward than to utext_nativeLength(). + * The resulting index value will be in between 0 and length, inclusive. + * + * @param ut the text to be accessed. + * @param delta the signed number of code points to move the iteration position. + * @return TRUE if the position could be moved the requested number of positions while + * staying within the range [0 - text length]. + * @draft ICU 3.4 + */ +U_DRAFT UBool U_EXPORT2 +utext_moveIndex32(UText *ut, int32_t delta); + +/** + * Get the native index of the character preceeding the current position. + * If the iteration position is already at the start of the text, zero + * is returned. + * The value returned is the same as that obtained from the following sequence, + * but without the side effect of changing the iteration position. + * + * \code + * UText *ut = whatever; + * ... + * utext_previous(ut) + * utext_getNativeIndex(ut); + * \endcode + * + * This function is most useful during forwards iteration, where it will get the + * native index of the character most recently returned from utext_next(). + * + * @param ut the text to be accessed + * @return the native index of the character preceeding the current index position, + * or zero if the current position is at the start of the text. + * @draft ICU 3.6 + */ +U_DRAFT int64_t U_EXPORT2 +utext_getPreviousNativeIndex(UText *ut); + + +/** + * + * Extract text from a UText into a UChar buffer. The range of text to be extracted + * is specified in the native indices of the UText provider. These may not necessarily + * be UTF-16 indices. + *

    + * The size (number of 16 bit UChars) of the data to be extracted is returned. The + * full number of UChars is returned, even when the extracted text is truncated + * because the specified buffer size is too small. + *

    + * The extracted string will (if you are a user) / must (if you are a text provider) + * be NUL-terminated if there is sufficient space in the destination buffer. This + * terminating NUL is not included in the returned length. + *

    + * The iteration index is left at the position following the last extracted character. + * + * @param ut the UText from which to extract data. + * @param nativeStart the native index of the first character to extract.\ + * If the specified index is out of range, + * it will be pinned to to be within 0 <= index <= textLength + * @param nativeLimit the native string index of the position following the last + * character to extract. If the specified index is out of range, + * it will be pinned to to be within 0 <= index <= textLength. + * nativeLimit must be >= nativeStart. + * @param dest the UChar (UTF-16) buffer into which the extracted text is placed + * @param destCapacity The size, in UChars, of the destination buffer. May be zero + * for precomputing the required size. + * @param status receives any error status. + * U_BUFFER_OVERFLOW_ERROR: the extracted text was truncated because the + * buffer was too small. Returns number of UChars for preflighting. + * @return Number of UChars in the data to be extracted. Does not include a trailing NUL. + * + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +utext_extract(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + UChar *dest, int32_t destCapacity, + UErrorCode *status); + + +#ifndef U_HIDE_DRAFT_API +/************************************************************************************ + * + * #define inline versions of selected performance-critical text access functions + * Caution: do not use auto increment++ or decrement-- expressions + * as parameters to these macros. + * + * For most use, where there is no extreme performance constraint, the + * normal, non-inline functions are a better choice. The resulting code + * will be smaller, and, if the need ever arises, easier to debug. + * + * These are implemented as #defines rather than real functions + * because there is no fully portable way to do inline functions in plain C. + * + ************************************************************************************/ + +/** + * inline version of utext_next32(), for performance-critical situations. + * + * Get the code point at the current iteration position of the UText, and + * advance the position to the first index following the character. + * This is a post-increment operation. + * Returns U_SENTINEL (-1) if the position is at the end of the + * text. + * + * @draft ICU 3.4 + */ +#define UTEXT_NEXT32(ut) \ + ((ut)->chunkOffset < (ut)->chunkLength && ((ut)->chunkContents)[(ut)->chunkOffset]<0xd800 ? \ + ((ut)->chunkContents)[((ut)->chunkOffset)++] : utext_next32(ut)) + +/** + * inline version of utext_previous32(), for performance-critical situations. + * + * Move the iterator position to the character (code point) whose + * index precedes the current position, and return that character. + * This is a pre-decrement operation. + * Returns U_SENTINEL (-1) if the position is at the start of the text. + * + * @draft ICU 3.4 + */ +#define UTEXT_PREVIOUS32(ut) \ + ((ut)->chunkOffset > 0 && \ + (ut)->chunkContents[(ut)->chunkOffset-1] < 0xd800 ? \ + (ut)->chunkContents[--((ut)->chunkOffset)] : utext_previous32(ut)) + +/** + * inline version of utext_getNativeIndex(), for performance-critical situations. + * + * Get the current iterator position, which can range from 0 to + * the length of the text. + * The position is a native index into the input text, in whatever format it + * may have (possibly UTF-8 for example), and may not always be the same as + * the corresponding UChar (UTF-16) index. + * The returned position will always be aligned to a code point boundary. + * + * @draft ICU 3.6 + */ +#define UTEXT_GETNATIVEINDEX(ut) \ + ((ut)->chunkOffset <= (ut)->nativeIndexingLimit? \ + (ut)->chunkNativeStart+(ut)->chunkOffset : \ + (ut)->pFuncs->mapOffsetToNative(ut)) + +/** + * inline version of utext_setNativeIndex(), for performance-critical situations. + * + * Set the current iteration position to the nearest code point + * boundary at or preceding the specified index. + * The index is in the native units of the original input text. + * If the index is out of range, it will be pinned to be within + * the range of the input text. + * + * @draft ICU 3.8 + */ +#define UTEXT_SETNATIVEINDEX(ut, ix) \ + { int64_t __offset = (ix) - (ut)->chunkNativeStart; \ + if (__offset>=0 && __offset<=(int64_t)(ut)->nativeIndexingLimit) { \ + (ut)->chunkOffset=(int32_t)__offset; \ + } else { \ + utext_setNativeIndex((ut), (ix)); } } + + + +#endif + +/************************************************************************************ + * + * Functions related to writing or modifying the text. + * These will work only with modifiable UTexts. Attempting to + * modify a read-only UText will return an error status. + * + ************************************************************************************/ + + +/** + * Return TRUE if the text can be written (modified) with utext_replace() or + * utext_copy(). For the text to be writable, the text provider must + * be of a type that supports writing and the UText must not be frozen. + * + * Attempting to modify text when utext_isWriteable() is FALSE will fail - + * the text will not be modified, and an error will be returned from the function + * that attempted the modification. + * + * @param ut the UText to be tested. + * @return TRUE if the text is modifiable. + * + * @see utext_freeze() + * @see utext_replace() + * @see utext_copy() + * @draft ICU 3.4 + * + */ +U_DRAFT UBool U_EXPORT2 +utext_isWritable(const UText *ut); + + +/** + * Test whether there is meta data associated with the text. + * @see Replaceable::hasMetaData() + * + * @param ut The UText to be tested + * @return TRUE if the underlying text includes meta data. + * @draft ICU 3.4 + */ +U_DRAFT UBool U_EXPORT2 +utext_hasMetaData(const UText *ut); + + +/** + * Replace a range of the original text with a replacement text. + * + * Leaves the current iteration position at the position following the + * newly inserted replacement text. + * + * This function is only available on UText types that support writing, + * that is, ones where utext_isWritable() returns TRUE. + * + * When using this function, there should be only a single UText opened onto the + * underlying native text string. Behavior after a replace operation + * on a UText is undefined for any other additional UTexts that refer to the + * modified string. + * + * @param ut the UText representing the text to be operated on. + * @param nativeStart the native index of the start of the region to be replaced + * @param nativeLimit the native index of the character following the region to be replaced. + * @param replacementText pointer to the replacement text + * @param replacementLength length of the replacement text, or -1 if the text is NUL terminated. + * @param status receives any error status. Possible errors include + * U_NO_WRITE_PERMISSION + * + * @return The signed number of (native) storage units by which + * the length of the text expanded or contracted. + * + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +utext_replace(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + const UChar *replacementText, int32_t replacementLength, + UErrorCode *status); + + + +/** + * + * Copy or move a substring from one position to another within the text, + * while retaining any metadata associated with the text. + * This function is used to duplicate or reorder substrings. + * The destination index must not overlap the source range. + * + * The text to be copied or moved is inserted at destIndex; + * it does not replace or overwrite any existing text. + * + * The iteration position is left following the newly inserted text + * at the destination position. + * + * This function is only available on UText types that support writing, + * that is, ones where utext_isWritable() returns TRUE. + * + * When using this function, there should be only a single UText opened onto the + * underlying native text string. Behavior after a copy operation + * on a UText is undefined in any other additional UTexts that refer to the + * modified string. + * + * @param ut The UText representing the text to be operated on. + * @param nativeStart The native index of the start of the region to be copied or moved + * @param nativeLimit The native index of the character position following the region + * to be copied. + * @param destIndex The native destination index to which the source substring is + * copied or moved. + * @param move If TRUE, then the substring is moved, not copied/duplicated. + * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION + * + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +utext_copy(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + int64_t destIndex, + UBool move, + UErrorCode *status); + + +/** + *

    + * Freeze a UText. This prevents any modification to the underlying text itself + * by means of functions operating on this UText. + *

    + *

    + * Once frozen, a UText can not be unfrozen. The intent is to ensure + * that a the text underlying a frozen UText wrapper cannot be modified via that UText. + *

    + *

    + * Caution: freezing a UText will disable changes made via the specific + * frozen UText wrapper only; it will not have any effect on the ability to + * directly modify the text by bypassing the UText. Any such backdoor modifications + * are always an error while UText access is occuring because the underlying + * text can get out of sync with UText's buffering. + *

    + * + * @param ut The UText to be frozen. + * @see utext_isWritable() + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +utext_freeze(UText *ut); + + +#ifndef U_HIDE_DRAFT_API +/** + * UText provider properties (bit field indexes). + * + * @see UText + * @draft ICU 3.4 + */ +enum { + /** + * It is potentially time consuming for the provider to determine the length of the text. + * @draft ICU 3.4 + */ + UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE = 1, + /** + * Text chunks remain valid and usable until the text object is modified or + * deleted, not just until the next time the access() function is called + * (which is the default). + * @draft ICU 3.4 + */ + UTEXT_PROVIDER_STABLE_CHUNKS = 2, + /** + * The provider supports modifying the text via the replace() and copy() + * functions. + * @see Replaceable + * @draft ICU 3.4 + */ + UTEXT_PROVIDER_WRITABLE = 3, + /** + * There is meta data associated with the text. + * @see Replaceable::hasMetaData() + * @draft ICU 3.4 + */ + UTEXT_PROVIDER_HAS_META_DATA = 4, + /** + * Text provider owns the text storage. + * Generally occurs as the result of a deep clone of the UText. + * When closing the UText, the associated text must + * also be closed/deleted/freed/ whatever is appropriate. + * @draft ICU 3.6 + */ + UTEXT_PROVIDER_OWNS_TEXT = 5 +}; + +/** + * Function type declaration for UText.clone(). + * + * clone a UText. Much like opening a UText where the source text is itself + * another UText. + * + * A deep clone will copy both the UText data structures and the underlying text. + * The original and cloned UText will operate completely independently; modifications + * made to the text in one will not effect the other. Text providers are not + * required to support deep clones. The user of clone() must check the status return + * and be prepared to handle failures. + * + * A shallow clone replicates only the UText data structures; it does not make + * a copy of the underlying text. Shallow clones can be used as an efficient way to + * have multiple iterators active in a single text string that is not being + * modified. + * + * A shallow clone operation must not fail except for truly exceptional conditions such + * as memory allocation failures. + * + * A UText and its clone may be safely concurrently accessed by separate threads. + * This is true for both shallow and deep clones. + * It is the responsibility of the Text Provider to ensure that this thread safety + * constraint is met. + + * + * @param dest A UText struct to be filled in with the result of the clone operation, + * or NULL if the clone function should heap-allocate a new UText struct. + * @param src The UText to be cloned. + * @param deep TRUE to request a deep clone, FALSE for a shallow clone. + * @param status Errors are returned here. For deep clones, U_UNSUPPORTED_ERROR + * should be returned if the text provider is unable to clone the + * original text. + * @return The newly created clone, or NULL if the clone operation failed. + * + * @draft ICU 3.4 + */ +typedef UText * U_CALLCONV +UTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status); + + +/** + * Function type declaration for UText.nativeLength(). + * + * @param ut the UText to get the length of. + * @return the length, in the native units of the original text string. + * @see UText + * @draft ICU 3.4 + */ +typedef int64_t U_CALLCONV +UTextNativeLength(UText *ut); + +/** + * Function type declaration for UText.access(). Get the description of the text chunk + * containing the text at a requested native index. The UText's iteration + * position will be left at the requested index. If the index is out + * of bounds, the iteration position will be left at the start or end + * of the string, as appropriate. + * + * Chunks must begin and end on code point boundaries. A single code point + * comprised of multiple storage units must never span a chunk boundary. + * + * + * @param ut the UText being accessed. + * @param nativeIndex Requested index of the text to be accessed. + * @param forward If TRUE, then the returned chunk must contain text + * starting from the index, so that start<=index + * The size (number of 16 bit UChars) in the data to be extracted is returned. The + * full amount is returned, even when the specified buffer size is smaller. + *

    + * The extracted string will (if you are a user) / must (if you are a text provider) + * be NUL-terminated if there is sufficient space in the destination buffer. + * + * @param ut the UText from which to extract data. + * @param nativeStart the native index of the first characer to extract. + * @param nativeLimit the native string index of the position following the last + * character to extract. + * @param dest the UChar (UTF-16) buffer into which the extracted text is placed + * @param destCapacity The size, in UChars, of the destination buffer. May be zero + * for precomputing the required size. + * @param status receives any error status. + * If U_BUFFER_OVERFLOW_ERROR: Returns number of UChars for + * preflighting. + * @return Number of UChars in the data. Does not include a trailing NUL. + * + * @draft ICU 3.4 + */ +typedef int32_t U_CALLCONV +UTextExtract(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + UChar *dest, int32_t destCapacity, + UErrorCode *status); + +/** + * Function type declaration for UText.replace(). + * + * Replace a range of the original text with a replacement text. + * + * Leaves the current iteration position at the position following the + * newly inserted replacement text. + * + * This function need only be implemented on UText types that support writing. + * + * When using this function, there should be only a single UText opened onto the + * underlying native text string. The function is responsible for updating the + * text chunk within the UText to reflect the updated iteration position, + * taking into account any changes to the underlying string's structure caused + * by the replace operation. + * + * @param ut the UText representing the text to be operated on. + * @param nativeStart the index of the start of the region to be replaced + * @param nativeLimit the index of the character following the region to be replaced. + * @param replacementText pointer to the replacement text + * @param replacmentLength length of the replacement text in UChars, or -1 if the text is NUL terminated. + * @param status receives any error status. Possible errors include + * U_NO_WRITE_PERMISSION + * + * @return The signed number of (native) storage units by which + * the length of the text expanded or contracted. + * + * @draft ICU 3.4 + */ +typedef int32_t U_CALLCONV +UTextReplace(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + const UChar *replacementText, int32_t replacmentLength, + UErrorCode *status); + +/** + * Function type declaration for UText.copy(). + * + * Copy or move a substring from one position to another within the text, + * while retaining any metadata associated with the text. + * This function is used to duplicate or reorder substrings. + * The destination index must not overlap the source range. + * + * The text to be copied or moved is inserted at destIndex; + * it does not replace or overwrite any existing text. + * + * This function need only be implemented for UText types that support writing. + * + * When using this function, there should be only a single UText opened onto the + * underlying native text string. The function is responsible for updating the + * text chunk within the UText to reflect the updated iteration position, + * taking into account any changes to the underlying string's structure caused + * by the replace operation. + * + * @param ut The UText representing the text to be operated on. + * @param nativeStart The index of the start of the region to be copied or moved + * @param nativeLimit The index of the character following the region to be replaced. + * @param nativeDest The destination index to which the source substring is copied or moved. + * @param move If TRUE, then the substring is moved, not copied/duplicated. + * @param status receives any error status. Possible errors include U_NO_WRITE_PERMISSION + * + * @draft ICU 3.4 + */ +typedef void U_CALLCONV +UTextCopy(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + int64_t nativeDest, + UBool move, + UErrorCode *status); + +/** + * Function type declaration for UText.mapOffsetToNative(). + * Map from the current UChar offset within the current text chunk to + * the corresponding native index in the original source text. + * + * This is required only for text providers that do not use native UTF-16 indexes. + * + * @param ut the UText. + * @return Absolute (native) index corresponding to chunkOffset in the current chunk. + * The returned native index should always be to a code point boundary. + * + * @draft ICU 3.4 + */ +typedef int64_t U_CALLCONV +UTextMapOffsetToNative(const UText *ut); + +/** + * Function type declaration for UText.mapIndexToUTF16(). + * Map from a native index to a UChar offset within a text chunk. + * Behavior is undefined if the native index does not fall within the + * current chunk. + * + * This function is required only for text providers that do not use native UTF-16 indexes. + * + * @param ut The UText containing the text chunk. + * @param nativeIndex Absolute (native) text index, chunk->start<=index<=chunk->limit. + * @return Chunk-relative UTF-16 offset corresponding to the specified native + * index. + * + * @draft ICU 3.4 + */ +typedef int32_t U_CALLCONV +UTextMapNativeIndexToUTF16(const UText *ut, int64_t nativeIndex); + + +/** + * Function type declaration for UText.utextClose(). + * + * A Text Provider close function is only required for provider types that make + * allocations in their open function (or other functions) that must be + * cleaned when the UText is closed. + * + * The allocation of the UText struct itself and any "extra" storage + * associated with the UText is handled by the common UText implementation + * and does not require provider specific cleanup in a close function. + * + * Most UText provider implementations do not need to implement this function. + * + * @param ut A UText object to be closed. + * + * @draft ICU 3.4 + */ +typedef void U_CALLCONV +UTextClose(UText *ut); + + +/** + * (public) Function dispatch table for UText. + * Conceptually very much like a C++ Virtual Function Table. + * This struct defines the organization of the table. + * Each text provider implementation must provide an + * actual table that is initialized with the appropriate functions + * for the type of text being handled. + * @draft ICU 3.6 + */ +struct UTextFuncs { + /** + * (public) Function table size, sizeof(UTextFuncs) + * Intended for use should the table grow to accomodate added + * functions in the future, to allow tests for older format + * function tables that do not contain the extensions. + * + * Fields are placed for optimal alignment on + * 32/64/128-bit-pointer machines, by normally grouping together + * 4 32-bit fields, + * 4 pointers, + * 2 64-bit fields + * in sequence. + * @draft ICU 3.6 + */ + int32_t tableSize; + + /** + * (private) Alignment padding. + * Do not use, reserved for use by the UText framework only. + * @internal + */ + int32_t reserved1, reserved2, reserved3; + + + /** + * (public) Function pointer for UTextClone + * + * @see UTextClone + * @draft ICU 3.6 + */ + UTextClone *clone; + + /** + * (public) function pointer for UTextLength + * May be expensive to compute! + * + * @see UTextLength + * @draft ICU 3.6 + */ + UTextNativeLength *nativeLength; + + /** + * (public) Function pointer for UTextAccess. + * + * @see UTextAccess + * @draft ICU 3.6 + */ + UTextAccess *access; + + /** + * (public) Function pointer for UTextExtract. + * + * @see UTextExtract + * @draft ICU 3.6 + */ + UTextExtract *extract; + + /** + * (public) Function pointer for UTextReplace. + * + * @see UTextReplace + * @draft ICU 3.6 + */ + UTextReplace *replace; + + /** + * (public) Function pointer for UTextCopy. + * + * @see UTextCopy + * @draft ICU 3.6 + */ + UTextCopy *copy; + + /** + * (public) Function pointer for UTextMapOffsetToNative. + * + * @see UTextMapOffsetToNative + * @draft ICU 3.6 + */ + UTextMapOffsetToNative *mapOffsetToNative; + + /** + * (public) Function pointer for UTextMapNativeIndexToUTF16. + * + * @see UTextMapNativeIndexToUTF16 + * @draft ICU 3.6 + */ + UTextMapNativeIndexToUTF16 *mapNativeIndexToUTF16; + + /** + * (public) Function pointer for UTextClose. + * + * @see UTextClose + * @draft ICU 3.6 + */ + UTextClose *close; + + /** + * (private) Spare function pointer + * @internal + */ + + UTextClose *spare1; + /** + * (private) Spare function pointer + * @internal + */ + UTextClose *spare2; + + /** + * (private) Spare function pointer + * @internal + */ + UTextClose *spare3; + +}; +typedef struct UTextFuncs UTextFuncs; + +#endif + +#ifndef U_HIDE_DRAFT_API + /** + * UText struct. Provides the interface between the generic UText access code + * and the UText provider code that works on specific kinds of + * text (UTF-8, noncontiguous UTF-16, whatever.) + * + * Applications that are using predefined types of text providers + * to pass text data to ICU services will have no need to view the + * internals of the UText structs that they open. + * + * @draft ICU 3.6 + */ +struct UText { + /** + * (private) Magic. Used to help detect when UText functions are handed + * invalid or unitialized UText structs. + * utext_openXYZ() functions take an initialized, + * but not necessarily open, UText struct as an + * optional fill-in parameter. This magic field + * is used to check for that initialization. + * Text provider close functions must NOT clear + * the magic field because that would prevent + * reuse of the UText struct. + * @internal + */ + uint32_t magic; + + + /** + * (private) Flags for managing the allocation and freeing of + * memory associated with this UText. + * @internal + */ + int32_t flags; + + + /** + * Text provider properties. This set of flags is maintainted by the + * text provider implementation. + * @draft ICU 3.4 + */ + int32_t providerProperties; + + /** + * (public) sizeOfStruct=sizeof(UText) + * Allows possible backward compatible extension. + * + * @draft ICU 3.4 + */ + int32_t sizeOfStruct; + + /* ------ 16 byte alignment boundary ----------- */ + + + /** + * (protected) Native index of the first character position following + * the current chunk. + * @draft ICU 3.6 + */ + int64_t chunkNativeLimit; + + /** + * (protected) Size in bytes of the extra space (pExtra). + * @draft ICU 3.4 + */ + int32_t extraSize; + + /** + * (protected) The highest chunk offset where native indexing and + * chunk (UTF-16) indexing correspond. For UTF-16 sources, value + * will be equal to chunkLength. + * + * @draft ICU 3.6 + */ + int32_t nativeIndexingLimit; + + /* ---- 16 byte alignment boundary------ */ + + /** + * (protected) Native index of the first character in the text chunk. + * @draft ICU 3.6 + */ + int64_t chunkNativeStart; + + /** + * (protected) Current iteration position within the text chunk (UTF-16 buffer). + * This is the index to the character that will be returned by utext_next32(). + * @draft ICU 3.6 + */ + int32_t chunkOffset; + + /** + * (protected) Length the text chunk (UTF-16 buffer), in UChars. + * @draft ICU 3.6 + */ + int32_t chunkLength; + + /* ---- 16 byte alignment boundary-- */ + + + /** + * (protected) pointer to a chunk of text in UTF-16 format. + * May refer either to original storage of the source of the text, or + * if conversion was required, to a buffer owned by the UText. + * @draft ICU 3.6 + */ + const UChar *chunkContents; + + /** + * (public) Pointer to Dispatch table for accessing functions for this UText. + * @draft ICU 3.6 + */ + UTextFuncs *pFuncs; + + /** + * (protected) Pointer to additional space requested by the + * text provider during the utext_open operation. + * @draft ICU 3.4 + */ + void *pExtra; + + /** + * (protected) Pointer to string or text-containin object or similar. + * This is the source of the text that this UText is wrapping, in a format + * that is known to the text provider functions. + * @draft ICU 3.4 + */ + const void *context; + + /* --- 16 byte alignment boundary--- */ + + /** + * (protected) Pointer fields available for use by the text provider. + * Not used by UText common code. + * @draft ICU 3.6 + */ + const void *p; + /** + * (protected) Pointer fields available for use by the text provider. + * Not used by UText common code. + * @draft ICU 3.6 + */ + const void *q; + /** + * (protected) Pointer fields available for use by the text provider. + * Not used by UText common code. + * @draft ICU 3.6 + */ + const void *r; + + /** + * Private field reserved for future use by the UText framework + * itself. This is not to be touched by the text providers. + * @internal ICU 3.4 + */ + void *privP; + + + /* --- 16 byte alignment boundary--- */ + + + /** + * (protected) Integer field reserved for use by the text provider. + * Not used by the UText framework, or by the client (user) of the UText. + * @draft ICU 3.4 + */ + int64_t a; + + /** + * (protected) Integer field reserved for use by the text provider. + * Not used by the UText framework, or by the client (user) of the UText. + * @draft ICU 3.4 + */ + int32_t b; + + /** + * (protected) Integer field reserved for use by the text provider. + * Not used by the UText framework, or by the client (user) of the UText. + * @draft ICU 3.4 + */ + int32_t c; + + /* ---- 16 byte alignment boundary---- */ + + + /** + * Private field reserved for future use by the UText framework + * itself. This is not to be touched by the text providers. + * @internal ICU 3.4 + */ + int64_t privA; + /** + * Private field reserved for future use by the UText framework + * itself. This is not to be touched by the text providers. + * @internal ICU 3.4 + */ + int32_t privB; + /** + * Private field reserved for future use by the UText framework + * itself. This is not to be touched by the text providers. + * @internal ICU 3.4 + */ + int32_t privC; +}; + +#endif + +/** + * Common function for use by Text Provider implementations to allocate and/or initialize + * a new UText struct. To be called in the implementation of utext_open() functions. + * If the supplied UText parameter is null, a new UText struct will be allocated on the heap. + * If the supplied UText is already open, the provider's close function will be called + * so that the struct can be reused by the open that is in progress. + * + * @param ut pointer to a UText struct to be re-used, or null if a new UText + * should be allocated. + * @param extraSpace The amount of additional space to be allocated as part + * of this UText, for use by types of providers that require + * additional storage. + * @param status Errors are returned here. + * @return pointer to the UText, allocated if necessary, with extra space set up if requested. + * @draft ICU 3.4 + */ +U_DRAFT UText * U_EXPORT2 +utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status); + +/** + * @internal + * Value used to help identify correctly initialized UText structs. + * Note: must be publicly visible so that UTEXT_INITIALIZER can access it. + */ +enum { + UTEXT_MAGIC = 0x345ad82c +}; +#ifndef U_HIDE_DRAFT_API + +/** + * initializer to be used with local (stack) instances of a UText + * struct. UText structs must be initialized before passing + * them to one of the utext_open functions. + * + * @draft ICU 3.6 + */ +#define UTEXT_INITIALIZER { \ + UTEXT_MAGIC, /* magic */ \ + 0, /* flags */ \ + 0, /* providerProps */ \ + sizeof(UText), /* sizeOfStruct */ \ + 0, /* chunkNativeLimit */ \ + 0, /* extraSize */ \ + 0, /* nativeIndexingLimit */ \ + 0, /* chunkNativeStart */ \ + 0, /* chunkOffset */ \ + 0, /* chunkLength */ \ + NULL, /* chunkContents */ \ + NULL, /* pFuncs */ \ + NULL, /* pExtra */ \ + NULL, /* context */ \ + NULL, NULL, NULL, /* p, q, r */ \ + NULL, /* privP */ \ + 0, 0, 0, /* a, b, c */ \ + 0, 0, 0 /* privA,B,C, */ \ + } + + +#endif /* U_HIDE_DRAFT_API */ + +U_CDECL_END + + + +#endif diff --git a/icuSources/common/unicode/utf.h b/icuSources/common/unicode/utf.h index 201691d0..2dfef63d 100644 --- a/icuSources/common/unicode/utf.h +++ b/icuSources/common/unicode/utf.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -63,6 +63,14 @@ * malformed sequences can be expressed unambiguously with a distinct subrange * of Unicode code points.) * + * The regular "safe" macros require that the initial, passed-in string index + * is within bounds. They only check the index when they read more than one + * code unit. This is usually done with code similar to the following loop: + *

    while(i
    + *
      * When it is safe to assume that text is well-formed UTF-16
      * (does not contain single, unpaired surrogates), then one can use
      * U16_..._UNSAFE macros.
    @@ -80,12 +88,14 @@
      * The unsafe UTF-8 macros are entirely implemented inside the macro definitions
      * and are fast, while the safe UTF-8 macros call functions for all but the
      * trivial (ASCII) cases.
    + * (ICU 3.6 optimizes U8_NEXT() and U8_APPEND() to handle most other common
    + * characters inline as well.)
      *
      * Unlike with UTF-16, malformed sequences cannot be expressed with distinct
      * code point values (0..U+10ffff). They are indicated with negative values instead.
      *
      * For more information see the ICU User Guide Strings chapter
    - * (http://oss.software.ibm.com/icu/userguide/).
    + * (http://icu.sourceforge.net/userguide/strings.html).
      *
      * Usage:
      * ICU coding guidelines for if() statements should be followed when using these macros.
    @@ -157,13 +167,11 @@
              (uint32_t)(c)<=0x10ffff && \
              !U_IS_UNICODE_NONCHAR(c)))
     
    -#ifndef U_HIDE_DRAFT_API
    -
     /**
      * Is this code point a BMP code point (U+0000..U+ffff)?
      * @param c 32-bit code point
      * @return TRUE or FALSE
    - * @draft ICU 2.8
    + * @stable ICU 2.8
      */
     #define U_IS_BMP(c) ((uint32_t)(c)<=0xffff)
     
    @@ -171,11 +179,9 @@
      * Is this code point a supplementary code point (U+10000..U+10ffff)?
      * @param c 32-bit code point
      * @return TRUE or FALSE
    - * @draft ICU 2.8
    + * @stable ICU 2.8
      */
     #define U_IS_SUPPLEMENTARY(c) ((uint32_t)((c)-0x10000)<=0xfffff)
    -
    -#endif /*U_HIDE_DRAFT_API*/
      
     /**
      * Is this code point a lead surrogate (U+d800..U+dbff)?
    diff --git a/icuSources/common/unicode/utf16.h b/icuSources/common/unicode/utf16.h
    index 7bf38720..cd8c5c1e 100644
    --- a/icuSources/common/unicode/utf16.h
    +++ b/icuSources/common/unicode/utf16.h
    @@ -1,7 +1,7 @@
     /*
     *******************************************************************************
     *
    -*   Copyright (C) 1999-2004, International Business Machines
    +*   Copyright (C) 1999-2006, International Business Machines
     *   Corporation and others.  All Rights Reserved.
     *
     *******************************************************************************
    @@ -23,7 +23,7 @@
      * and some common definitions.
      *
      * For more information see utf.h and the ICU User Guide Strings chapter
    - * (http://oss.software.ibm.com/icu/userguide/).
    + * (http://icu.sourceforge.net/userguide/strings.html).
      *
      * Usage:
      * ICU coding guidelines for if() statements should be followed when using these macros.
    @@ -179,7 +179,7 @@
      *
      * @param s const UChar * string
      * @param start starting string offset (usually 0)
    - * @param i string offset, start<=iUsage:
      * ICU coding guidelines for if() statements should be followed when using these macros.
    @@ -48,8 +48,8 @@
      * @internal
      */
     #ifdef U_UTF8_IMPL
    -U_INTERNAL const uint8_t 
    -#elif defined(U_STATIC_IMPLEMENTATION)
    +U_EXPORT const uint8_t 
    +#elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION)
     U_CFUNC const uint8_t
     #else
     U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ 
    @@ -181,7 +181,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
      *
      * @param s const uint8_t * string
      * @param start starting string offset
    - * @param i string offset, start<=i=0x80) { \
    -        if(U8_IS_LEAD(c)) { \
    +    (c)=(uint8_t)(s)[(i)++]; \
    +    if((c)>=0x80) { \
    +        uint8_t __t1, __t2; \
    +        if( /* handle U+1000..U+CFFF inline */ \
    +            (0xe0<(c) && (c)<=0xec) && \
    +            (((i)+1)<(length)) && \
    +            (__t1=(uint8_t)((s)[i]-0x80))<=0x3f && \
    +            (__t2=(uint8_t)((s)[(i)+1]-0x80))<= 0x3f \
    +        ) { \
    +            /* no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ \
    +            (c)=(UChar)(((c)<<12)|(__t1<<6)|__t2); \
    +            (i)+=2; \
    +        } else if( /* handle U+0080..U+07FF inline */ \
    +            ((c)<0xe0 && (c)>=0xc2) && \
    +            ((i)<(length)) && \
    +            (__t1=(uint8_t)((s)[i]-0x80))<=0x3f \
    +        ) { \
    +            (c)=(UChar)((((c)&0x1f)<<6)|__t1); \
    +            ++(i); \
    +        } else if(U8_IS_LEAD(c)) { \
    +            /* function call for "complicated" and error cases */ \
                 (c)=utf8_nextCharSafeBody((const uint8_t *)s, &(i), (int32_t)(length), c, -1); \
             } else { \
                 (c)=U_SENTINEL; \
    @@ -293,7 +311,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
     }
     
     /**
    - * Append a code point to a string, overwriting 1 or 2 code units.
    + * Append a code point to a string, overwriting 1 to 4 bytes.
      * The offset points to the current end of the string contents
      * and is advanced (post-increment).
      * "Safe" macro, checks for a valid code point.
    @@ -302,18 +320,25 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
      * then isError is set to TRUE.
      *
      * @param s const uint8_t * string buffer
    - * @param i string offset, i>6)|0xc0); \
    +        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
    +    } else if((uint32_t)(c)<=0xd7ff && (i)+2<(capacity)) { \
    +        (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \
    +        (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \
    +        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
         } else { \
    -        (i)=utf8_appendCharSafeBody(s, (int32_t)(i), (int32_t)(length), c, &(isError)); \
    +        (i)=utf8_appendCharSafeBody(s, (int32_t)(i), (int32_t)(capacity), c, &(isError)); \
         } \
     }
     
    @@ -337,13 +362,13 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
      * "Safe" macro, checks for illegal sequences and for string boundaries.
      *
      * @param s const uint8_t * string
    - * @param i string offset, i(length)) { \
    @@ -383,7 +408,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
      * "Safe" macro, checks for illegal sequences and for string boundaries.
      *
      * @param s const uint8_t * string
    - * @param i string offset, i=0xc0) { \
                     U8_MASK_LEAD_BYTE(__b, __count); \
                     (c)|=(UChar32)__b<<__shift; \
    @@ -492,16 +517,16 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
      *
      * @param s const uint8_t * string
      * @param start starting string offset (usually 0)
    - * @param i string offset, start<=i
    + * @param i string offset, must be start=0x80) { \
             if((c)<=0xbf) { \
    -            (c)=utf8_prevCharSafeBody(s, start, &(i), c, -1); \
    +            (c)=utf8_prevCharSafeBody((const uint8_t *)s, start, &(i), c, -1); \
             } else { \
                 (c)=U_SENTINEL; \
             } \
    @@ -531,7 +556,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
      *
      * @param s const uint8_t * string
      * @param start starting string offset (usually 0)
    - * @param i string offset, start<=i
    + * @param i string offset, must be start
      *
      * 

    This concept has been abandoned. - * A lot of the ICU source code — especially low-level code like - * conversion, normalization, and collation — assumes UTF-16, - * utf.h enforces the default of UTF-16. + * A lot of the ICU source code assumes UChar strings are in UTF-16. + * This is especially true for low-level code like + * conversion, normalization, and collation. + * The utf.h header enforces the default of UTF-16. * The UTF-8 and UTF-32 macros remain for now for completeness and backward compatibility.

    * *

    Accordingly, utf.h defines UChar to be an unsigned 16-bit integer. If this matches wchar_t, then diff --git a/icuSources/common/unicode/utrace.h b/icuSources/common/unicode/utrace.h index cf21b982..bacca6df 100644 --- a/icuSources/common/unicode/utrace.h +++ b/icuSources/common/unicode/utrace.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -23,33 +23,36 @@ #include #include "unicode/utypes.h" +/** + * \file + * \brief C API: Definitions for ICU tracing/logging. + */ + U_CDECL_BEGIN -#ifndef U_HIDE_DRAFT_API - /** * Trace severity levels. Higher levels increase the verbosity of the trace output. * @see utrace_setLevel - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef enum UTraceLevel { - /** Disable all tracing @draft ICU 2.8*/ + /** Disable all tracing @stable ICU 2.8*/ UTRACE_OFF=-1, - /** Trace error conditions only @draft ICU 2.8*/ + /** Trace error conditions only @stable ICU 2.8*/ UTRACE_ERROR=0, - /** Trace errors and warnings @draft ICU 2.8*/ + /** Trace errors and warnings @stable ICU 2.8*/ UTRACE_WARNING=3, - /** Trace opens and closes of ICU services @draft ICU 2.8*/ + /** Trace opens and closes of ICU services @stable ICU 2.8*/ UTRACE_OPEN_CLOSE=5, - /** Trace an intermediate number of ICU operations @draft ICU 2.8*/ + /** Trace an intermediate number of ICU operations @stable ICU 2.8*/ UTRACE_INFO=7, - /** Trace the maximum number of ICU operations @draft ICU 2.8*/ + /** Trace the maximum number of ICU operations @stable ICU 2.8*/ UTRACE_VERBOSE=9 } UTraceLevel; /** * These are the ICU functions that will be traced when tracing is enabled. - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef enum UTraceFunctionNumber { UTRACE_FUNCTION_START=0, @@ -80,22 +83,20 @@ typedef enum UTraceFunctionNumber { UTRACE_COLLATION_LIMIT } UTraceFunctionNumber; -#endif /*U_HIDE_DRAFT_API*/ - /** * Setter for the trace level. * @param traceLevel A UTraceLevel value. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 utrace_setLevel(int32_t traceLevel); /** * Getter for the trace level. * @return The UTraceLevel value being used by ICU. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 utrace_getLevel(void); /* Trace function pointers types ----------------------------- */ @@ -104,7 +105,7 @@ utrace_getLevel(void); * Type signature for the trace function to be called when entering a function. * @param context value supplied at the time the trace functions are set. * @param fnNumber Enum value indicating the ICU function being entered. - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef void U_CALLCONV UTraceEntry(const void *context, int32_t fnNumber); @@ -120,7 +121,7 @@ UTraceEntry(const void *context, int32_t fnNumber); * @param args A variable arguments list. Contents are described by * the fmt parameter. * @see utrace_vformat - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef void U_CALLCONV UTraceExit(const void *context, int32_t fnNumber, @@ -135,7 +136,7 @@ UTraceExit(const void *context, int32_t fnNumber, * @param fmt A format string describing the tracing data that is supplied * as variable args * @param args The data being traced, passed as variable args. - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef void U_CALLCONV UTraceData(const void *context, int32_t fnNumber, int32_t level, @@ -167,9 +168,9 @@ UTraceData(const void *context, int32_t fnNumber, int32_t level, * traced ICU function, for the purpose of providing * data to the trace. * - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 utrace_setFunctions(const void *context, UTraceEntry *e, UTraceExit *x, UTraceData *d); @@ -181,9 +182,9 @@ utrace_setFunctions(const void *context, * @param e The currently installed UTraceEntry function. * @param x The currently installed UTraceExit function. * @param d The currently installed UTraceData function. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 utrace_getFunctions(const void **context, UTraceEntry **e, UTraceExit **x, UTraceData **d); @@ -303,9 +304,9 @@ utrace_getFunctions(const void **context, * @param args Data to be formatted. * @return Length of formatted output, including the terminating NUL. * If buffer capacity is insufficient, the required capacity is returned. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 utrace_vformat(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, va_list args); @@ -324,9 +325,9 @@ utrace_vformat(char *outBuf, int32_t capacity, * @param ... Data to be formatted. * @return Length of formatted output, including the terminating NUL. * If buffer capacity is insufficient, the required capacity is returned. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 utrace_format(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, ...); @@ -341,9 +342,9 @@ utrace_format(char *outBuf, int32_t capacity, * @return The name string for the function. * * @see UTraceFunctionNumber - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 utrace_functionName(int32_t fnNumber); U_CDECL_END diff --git a/icuSources/common/unicode/utypes.h b/icuSources/common/unicode/utypes.h index e20cd793..7aceb27f 100644 --- a/icuSources/common/unicode/utypes.h +++ b/icuSources/common/unicode/utypes.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -38,6 +38,10 @@ #include "unicode/uversion.h" #include "unicode/uconfig.h" +#if !U_DEFAULT_SHOW_DRAFT && !defined(U_SHOW_DRAFT_API) +#define U_HIDE_DRAFT_API 1 +#endif + #ifdef U_HIDE_DRAFT_API #include "unicode/udraft.h" #endif @@ -50,6 +54,13 @@ #include "unicode/uobslete.h" #endif +#ifdef U_HIDE_INTERNAL_API +#include "unicode/uintrnal.h" +#endif + +#ifdef U_HIDE_SYSTEM_API +#include "unicode/usystem.h" +#endif /*! * \file @@ -186,11 +197,14 @@ * @stable ICU 2.4 */ #define U_ICUDATA_ENTRY_POINT U_DEF2_ICUDATA_ENTRY_POINT(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM) + /** + * Do not use. * @internal */ #define U_DEF2_ICUDATA_ENTRY_POINT(major, minor) U_DEF_ICUDATA_ENTRY_POINT(major, minor) /** + * Do not use. * @internal */ #define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt##major##minor##_dat @@ -318,7 +332,7 @@ typedef void* UClassID; * \def U_DATA_API * Set to export library symbols from inside the stubdata library, * and to import them from outside. - * @draft ICU 3.0 + * @stable ICU 3.0 */ /** @@ -356,6 +370,13 @@ typedef void* UClassID; * @stable ICU 2.0 */ +/** + * \def U_TOOLUTIL_API + * Set to export library symbols from inside the toolutil library, + * and to import them from outside. + * @draft ICU 3.4 + */ + #if defined(U_COMBINED_IMPLEMENTATION) #define U_DATA_API U_EXPORT #define U_COMMON_API U_EXPORT @@ -363,6 +384,7 @@ typedef void* UClassID; #define U_LAYOUT_API U_EXPORT #define U_LAYOUTEX_API U_EXPORT #define U_IO_API U_EXPORT +#define U_TOOLUTIL_API U_EXPORT #elif defined(U_STATIC_IMPLEMENTATION) #define U_DATA_API #define U_COMMON_API @@ -370,6 +392,7 @@ typedef void* UClassID; #define U_LAYOUT_API #define U_LAYOUTEX_API #define U_IO_API +#define U_TOOLUTIL_API #elif defined(U_COMMON_IMPLEMENTATION) #define U_DATA_API U_IMPORT #define U_COMMON_API U_EXPORT @@ -377,6 +400,7 @@ typedef void* UClassID; #define U_LAYOUT_API U_IMPORT #define U_LAYOUTEX_API U_IMPORT #define U_IO_API U_IMPORT +#define U_TOOLUTIL_API U_IMPORT #elif defined(U_I18N_IMPLEMENTATION) #define U_DATA_API U_IMPORT #define U_COMMON_API U_IMPORT @@ -384,6 +408,7 @@ typedef void* UClassID; #define U_LAYOUT_API U_IMPORT #define U_LAYOUTEX_API U_IMPORT #define U_IO_API U_IMPORT +#define U_TOOLUTIL_API U_IMPORT #elif defined(U_LAYOUT_IMPLEMENTATION) #define U_DATA_API U_IMPORT #define U_COMMON_API U_IMPORT @@ -391,6 +416,7 @@ typedef void* UClassID; #define U_LAYOUT_API U_EXPORT #define U_LAYOUTEX_API U_IMPORT #define U_IO_API U_IMPORT +#define U_TOOLUTIL_API U_IMPORT #elif defined(U_LAYOUTEX_IMPLEMENTATION) #define U_DATA_API U_IMPORT #define U_COMMON_API U_IMPORT @@ -398,6 +424,7 @@ typedef void* UClassID; #define U_LAYOUT_API U_IMPORT #define U_LAYOUTEX_API U_EXPORT #define U_IO_API U_IMPORT +#define U_TOOLUTIL_API U_IMPORT #elif defined(U_IO_IMPLEMENTATION) #define U_DATA_API U_IMPORT #define U_COMMON_API U_IMPORT @@ -405,6 +432,15 @@ typedef void* UClassID; #define U_LAYOUT_API U_IMPORT #define U_LAYOUTEX_API U_IMPORT #define U_IO_API U_EXPORT +#define U_TOOLUTIL_API U_IMPORT +#elif defined(U_TOOLUTIL_IMPLEMENTATION) +#define U_DATA_API U_IMPORT +#define U_COMMON_API U_IMPORT +#define U_I18N_API U_IMPORT +#define U_LAYOUT_API U_IMPORT +#define U_LAYOUTEX_API U_IMPORT +#define U_IO_API U_IMPORT +#define U_TOOLUTIL_API U_EXPORT #else #define U_DATA_API U_IMPORT #define U_COMMON_API U_IMPORT @@ -412,6 +448,7 @@ typedef void* UClassID; #define U_LAYOUT_API U_IMPORT #define U_LAYOUTEX_API U_IMPORT #define U_IO_API U_IMPORT +#define U_TOOLUTIL_API U_IMPORT #endif /** @@ -449,10 +486,11 @@ typedef void* UClassID; * * Note: This is currently only done on Windows because * some Linux/Unix compilers have problems with defining global new/delete. - * On Windows, WIN32 is defined, and it is _MSC_Ver>=1200 for MSVC 6.0 and higher. + * On Windows, WIN32 is defined, and it is _MSC_VER>=1200 for MSVC 6.0 and higher. */ -#if defined(XP_CPLUSPLUS) && defined(WIN32) && (_MSC_Ver>=1200) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_USTDIO_IMPLEMENTATION)) +#if defined(XP_CPLUSPLUS) && defined(U_WINDOWS) && (_MSC_VER>=1200) && U_DEBUG && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_USTDIO_IMPLEMENTATION)) +#ifndef U_HIDE_INTERNAL_API /** * Global operator new, defined only inside ICU4C, must not be used. * Crashes intentionally. @@ -499,6 +537,7 @@ operator delete[](void * /*p*/) { *q=5; /* break it */ } +#endif /* U_HIDE_INTERNAL_API */ #endif /*===========================================================================*/ @@ -559,7 +598,7 @@ typedef enum UErrorCode { U_PARSE_ERROR = 9, /**< Equivalent to Java ParseException */ U_INVALID_CHAR_FOUND = 10, /**< Character conversion: Unmappable input sequence. In other APIs: Invalid character. */ U_TRUNCATED_CHAR_FOUND = 11, /**< Character conversion: Incomplete input sequence. */ - U_ILLEGAL_CHAR_FOUND = 12, /**< Character conversion: Illegal input sequence/combination of input units.. */ + U_ILLEGAL_CHAR_FOUND = 12, /**< Character conversion: Illegal input sequence/combination of input units. */ U_INVALID_TABLE_FORMAT = 13, /**< Conversion table file found, but corrupted */ U_INVALID_TABLE_FILE = 14, /**< Conversion table file not found */ U_BUFFER_OVERFLOW_ERROR = 15, /**< A result would not fit in the supplied buffer */ @@ -578,6 +617,7 @@ typedef enum UErrorCode { U_INVALID_STATE_ERROR = 27, /**< Requested operation can not be completed with ICU in its current state */ U_COLLATOR_VERSION_MISMATCH = 28, /**< Collator version is not compatible with the base version */ U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */ + U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */ U_STANDARD_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for standard errors */ /* @@ -643,8 +683,8 @@ typedef enum UErrorCode { /* * the error code range 0x10200 0x102ff are reserved for Break Iterator related error */ + U_BRK_INTERNAL_ERROR=0x10200, /**< An internal error (bug) was detected. */ U_BRK_ERROR_START=0x10200, /**< Start of codes indicating Break Iterator failures */ - U_BRK_INTERNAL_ERROR, /**< An internal error (bug) was detected. */ U_BRK_HEX_DIGITS_EXPECTED, /**< Hex digits expected as part of a escaped char in a rule. */ U_BRK_SEMICOLON_EXPECTED, /**< Missing ';' at the end of a RBBI rule. */ U_BRK_RULE_SYNTAX, /**< Syntax error in RBBI rule. */ @@ -663,8 +703,8 @@ typedef enum UErrorCode { /* * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs */ + U_REGEX_INTERNAL_ERROR=0x10300, /**< An internal error (bug) was detected. */ U_REGEX_ERROR_START=0x10300, /**< Start of codes indicating Regexp failures */ - U_REGEX_INTERNAL_ERROR, /**< An internal error (bug) was detected. */ U_REGEX_RULE_SYNTAX, /**< Syntax error in regexp pattern. */ U_REGEX_INVALID_STATE, /**< RegexMatcher in invalid state for requested operation */ U_REGEX_BAD_ESCAPE_SEQUENCE, /**< Unrecognized backslash escape sequence in pattern */ @@ -683,14 +723,15 @@ typedef enum UErrorCode { /* * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes */ + U_IDNA_PROHIBITED_ERROR=0x10400, U_IDNA_ERROR_START=0x10400, - U_IDNA_PROHIBITED_ERROR, U_IDNA_UNASSIGNED_ERROR, U_IDNA_CHECK_BIDI_ERROR, U_IDNA_STD3_ASCII_RULES_ERROR, U_IDNA_ACE_PREFIX_ERROR, U_IDNA_VERIFICATION_ERROR, U_IDNA_LABEL_TOO_LONG_ERROR, + U_IDNA_ZERO_LENGTH_LABEL_ERROR, U_IDNA_ERROR_LIMIT, /* * Aliases for StringPrep diff --git a/icuSources/common/unicode/uversion.h b/icuSources/common/unicode/uversion.h index f9a7755b..67e57a8c 100644 --- a/icuSources/common/unicode/uversion.h +++ b/icuSources/common/unicode/uversion.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * @@ -15,6 +15,10 @@ * Gets included by utypes.h and Windows .rc files */ +/** + * \file + * \brief C API: Contains all the important version numbers for ICU. + */ /*===========================================================================*/ /* Main ICU version information */ /*===========================================================================*/ @@ -22,20 +26,22 @@ #ifndef UVERSION_H #define UVERSION_H -/** IMPORTANT: When updating version, the following things need to be done: */ -/** source/common/unicode/uversion.h - this file: update major, minor, */ -/** patchlevel, suffix, version, short version constants, namespace, */ -/** and copyright */ -/** source/common/common.dsp - update 'Output file name' on the link tab so */ -/** that it contains the new major/minor combination */ -/** source/i18n/i18n.dsp - same as for the common.dsp */ -/** source/layout/layout.dsp - same as for the common.dsp */ -/** source/stubdata/stubdata.dsp - same as for the common.dsp */ -/** source/extra/ustdio/ustdio.dsp - same as for the common.dsp */ -/** source/data/makedata.mak - change U_ICUDATA_NAME so that it contains */ -/** the new major/minor combination */ -/** source/tools/genren/genren.pl - use this script according to the README */ -/** in that folder */ +/** + * IMPORTANT: When updating version, the following things need to be done: + * source/common/unicode/uversion.h - this file: update major, minor, + * patchlevel, suffix, version, short version constants, namespace, + * and copyright + * source/common/common.vcproj - update 'Output file name' on the link tab so + * that it contains the new major/minor combination + * source/i18n/i18n.vcproj - same as for the common.vcproj + * source/layout/layout.vcproj - same as for the common.vcproj + * source/stubdata/stubdata.vcproj - same as for the common.vcproj + * source/io/io.vcproj - same as for the common.vcproj + * source/data/makedata.mak - change U_ICUDATA_NAME so that it contains + * the new major/minor combination + * source/tools/genren/genren.pl - use this script according to the README + * in that folder + */ #include "unicode/umachine.h" @@ -44,7 +50,7 @@ * @stable ICU 2.4 */ #define U_COPYRIGHT_STRING \ - " Copyright (C) 2004, International Business Machines Corporation and others. All Rights Reserved. " + " Copyright (C) 2005, International Business Machines Corporation and others. All Rights Reserved. " /** Maximum length of the copyright string. * @stable ICU 2.4 @@ -61,7 +67,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_MINOR_NUM 2 +#define U_ICU_VERSION_MINOR_NUM 6 /** The current ICU patchlevel version as an integer. * This value will change in the subsequent releases of ICU @@ -69,24 +75,32 @@ */ #define U_ICU_VERSION_PATCHLEVEL_NUM 0 +/** The current ICU build level version as an integer. + * This value is for use by ICU clients. It defaults to 0. + * @draft ICU 4.0 + */ +#ifndef U_ICU_VERSION_BUILDLEVEL_NUM +#define U_ICU_VERSION_BUILDLEVEL_NUM 0 +#endif + /** Glued version suffix for renamers * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _3_2 +#define U_ICU_VERSION_SUFFIX _3_6 /** The current ICU library version as a dotted-decimal string. The patchlevel * only appears in this string if it non-zero. * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "3.2" +#define U_ICU_VERSION "3.6" /** The current ICU library major/minor version as a string without dots, for library name suffixes. * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SHORT "32" +#define U_ICU_VERSION_SHORT "36" /** An ICU version consists of up to 4 numbers from 0..255. * @stable ICU 2.4 @@ -113,13 +127,21 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; #define U_ICU_NAMESPACE icu namespace U_ICU_NAMESPACE { } #else -#define U_ICU_NAMESPACE icu_3_2 +#define U_ICU_NAMESPACE icu_3_6 namespace U_ICU_NAMESPACE { } namespace icu = U_ICU_NAMESPACE; #endif + +#ifndef U_USING_ICU_NAMESPACE +# define U_USING_ICU_NAMESPACE 1 +#endif + +#if U_USING_ICU_NAMESPACE U_NAMESPACE_USE #endif +#endif + /*===========================================================================*/ /* General version helper functions. Definitions in putil.c */ @@ -180,10 +202,11 @@ u_getVersion(UVersionInfo versionArray); * version 4 - ICU 2.2 - tracking UCA changes, ignore completely ignorables * in contractions, ignore primary ignorables after shifted * version 5 - ICU 2.8 - changed implicit generation code + * version 6 - ICU 3.4 - with the UCA 4.1, Thai tag is no longer generated or used * This value may change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define UCOL_RUNTIME_VERSION 5 +#define UCOL_RUNTIME_VERSION 6 /** Builder code version. When this is different, same tailoring might result * in assigning different collation elements to code points @@ -191,11 +214,13 @@ u_getVersion(UVersionInfo versionArray); * closure. However, the tailorings should probably get same CEs assigned * version 5 - ICU 2.2 - fixed some bugs, renamed some indirect values. * version 6 - ICU 2.8 - fixed bug in builder that allowed 0xFF in primary values + * version 7 - ICU 3.4 - with the UCA 4.1 Thai tag is no longer processed, complete ignorables + * now break contractions * Backward compatible with the old rules. * This value may change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define UCOL_BUILDER_VERSION 6 +#define UCOL_BUILDER_VERSION 7 /** *** Removed *** Instead we use the data we read from FractionalUCA.txt * This is the version of FractionalUCA.txt tailoring rules diff --git a/icuSources/common/uniset.cpp b/icuSources/common/uniset.cpp index 07794e70..50e78630 100644 --- a/icuSources/common/uniset.cpp +++ b/icuSources/common/uniset.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -57,16 +57,6 @@ U_NAMESPACE_BEGIN SymbolTable::~SymbolTable() {} -/** - * Minimum value that can be stored in a UnicodeSet. - */ -const UChar32 UnicodeSet::MIN_VALUE = UNICODESET_LOW; - -/** - * Maximum value that can be stored in a UnicodeSet. - */ -const UChar32 UnicodeSet::MAX_VALUE = UNICODESET_HIGH - 1; - UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UnicodeSet) /** @@ -349,24 +339,27 @@ int32_t UnicodeSet::findCodePoint(UChar32 c) const { // Return the smallest i such that c < list[i]. Assume // list[len - 1] == HIGH and that c is legal (0..HIGH-1). - if (c < list[0]) return 0; + if (c < list[0]) + return 0; // High runner test. c is often after the last range, so an // initial check for this condition pays off. - if (len >= 2 && c >= list[len-2]) return len-1; + if (len >= 2 && c >= list[len-2]) + return len-1; int32_t lo = 0; int32_t hi = len - 1; // invariant: c >= list[lo] // invariant: c < list[hi] for (;;) { int32_t i = (lo + hi) >> 1; - if (i == lo) return hi; - if (c < list[i]) { + if (i == lo) { + break; // Found! + } else if (c < list[i]) { hi = i; } else { lo = i; } } - return 0; // To make compiler happy; never reached + return hi; } /** diff --git a/icuSources/common/uniset_props.cpp b/icuSources/common/uniset_props.cpp index c0ffa87c..fe6e1291 100644 --- a/icuSources/common/uniset_props.cpp +++ b/icuSources/common/uniset_props.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,7 +28,6 @@ #include "uset_imp.h" #include "ruleiter.h" #include "cmemory.h" -#include "uhash.h" #include "ucln_cmn.h" #include "util.h" #include "uvector.h" @@ -36,13 +35,15 @@ #include "propname.h" #include "unormimp.h" #include "ucase.h" +#include "ubidi_props.h" #include "uinvchar.h" #include "charstr.h" #include "cstring.h" #include "mutex.h" #include "uassert.h" #include "hash.h" -#include "ucmp8.h" + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) // initial storage. Must be >= 0 // *** same as in uniset.cpp ! *** @@ -66,101 +67,32 @@ #define UPPER_N ((UChar)78) /*N*/ #define EQUALS ((UChar)0x003D) /*=*/ -static const UChar POSIX_OPEN[] = { SET_OPEN,COLON,0 }; // "[:" +//static const UChar POSIX_OPEN[] = { SET_OPEN,COLON,0 }; // "[:" static const UChar POSIX_CLOSE[] = { COLON,SET_CLOSE,0 }; // ":]" -static const UChar PERL_OPEN[] = { BACKSLASH,LOWER_P,0 }; // "\\p" +//static const UChar PERL_OPEN[] = { BACKSLASH,LOWER_P,0 }; // "\\p" static const UChar PERL_CLOSE[] = { CLOSE_BRACE,0 }; // "}" -static const UChar NAME_OPEN[] = { BACKSLASH,UPPER_N,0 }; // "\\N" +//static const UChar NAME_OPEN[] = { BACKSLASH,UPPER_N,0 }; // "\\N" static const UChar HYPHEN_RIGHT_BRACE[] = {HYPHEN,SET_CLOSE,0}; /*-]*/ // Special property set IDs static const char ANY[] = "ANY"; // [\u0000-\U0010FFFF] static const char ASCII[] = "ASCII"; // [\u0000-\u007F] +static const char ASSIGNED[] = "Assigned"; // [:^Cn:] // Unicode name property alias #define NAME_PROP "na" #define NAME_PROP_LENGTH 2 -// TODO: Remove the following special-case code when -// these four C99-compatibility properties are implemented -// as enums/names. -U_CDECL_BEGIN - typedef UBool (U_CALLCONV *C99_Property_Function)(UChar32); -U_CDECL_END -static const struct C99_Map { - const char* name; - C99_Property_Function func; -} C99_DISPATCH[] = { - // These three entries omitted; they clash with PropertyAliases - // names for Unicode properties, so UnicodeSet already maps them - // to those properties. - //{ "alpha", u_isalpha }, - //{ "lower", u_islower }, - //{ "upper", u_isupper }, - - // MUST be in SORTED order - { "blank", u_isblank }, - { "cntrl", u_iscntrl }, - { "digit", u_isdigit }, - { "graph", u_isgraph }, - { "print", u_isprint }, - { "punct", u_ispunct }, - { "space", u_isspace }, - { "title", u_istitle }, - { "xdigit", u_isxdigit } -}; -#define C99_COUNT (9) - -// TEMPORARY: Remove when deprecated category code constructor is removed. -static const UChar CATEGORY_NAMES[] = { - // Must be kept in sync with uchar.h/UCharCategory - 0x43, 0x6E, /* "Cn" */ - 0x4C, 0x75, /* "Lu" */ - 0x4C, 0x6C, /* "Ll" */ - 0x4C, 0x74, /* "Lt" */ - 0x4C, 0x6D, /* "Lm" */ - 0x4C, 0x6F, /* "Lo" */ - 0x4D, 0x6E, /* "Mn" */ - 0x4D, 0x65, /* "Me" */ - 0x4D, 0x63, /* "Mc" */ - 0x4E, 0x64, /* "Nd" */ - 0x4E, 0x6C, /* "Nl" */ - 0x4E, 0x6F, /* "No" */ - 0x5A, 0x73, /* "Zs" */ - 0x5A, 0x6C, /* "Zl" */ - 0x5A, 0x70, /* "Zp" */ - 0x43, 0x63, /* "Cc" */ - 0x43, 0x66, /* "Cf" */ - 0x43, 0x6F, /* "Co" */ - 0x43, 0x73, /* "Cs" */ - 0x50, 0x64, /* "Pd" */ - 0x50, 0x73, /* "Ps" */ - 0x50, 0x65, /* "Pe" */ - 0x50, 0x63, /* "Pc" */ - 0x50, 0x6F, /* "Po" */ - 0x53, 0x6D, /* "Sm" */ - 0x53, 0x63, /* "Sc" */ - 0x53, 0x6B, /* "Sk" */ - 0x53, 0x6F, /* "So" */ - 0x50, 0x69, /* "Pi" */ - 0x50, 0x66, /* "Pf" */ - 0x00 -}; - /** * Delimiter string used in patterns to close a category reference: * ":]". Example: "[:Lu:]". */ -static const UChar CATEGORY_CLOSE[] = {COLON, SET_CLOSE, 0x0000}; /* ":]" */ +//static const UChar CATEGORY_CLOSE[] = {COLON, SET_CLOSE, 0x0000}; /* ":]" */ U_NAMESPACE_BEGIN static UnicodeSet *INCLUSIONS[UPROPS_SRC_COUNT] = { NULL }; // cached getInclusions() -static Hashtable* CASE_EQUIV_HASH = NULL; // for closeOver(USET_CASE) - -static CompactByteArray* CASE_EQUIV_CBA = NULL; // for closeOver(USET_CASE) - // helper functions for matching of pattern syntax pieces ------------------ *** // these functions are parallel to the PERL_OPEN etc. strings above @@ -174,10 +106,10 @@ isPerlOpen(const UnicodeString &pattern, int32_t pos) { return pattern.charAt(pos)==BACKSLASH && ((c=pattern.charAt(pos+1))==LOWER_P || c==UPPER_P); } -static inline UBool +/*static inline UBool isPerlClose(const UnicodeString &pattern, int32_t pos) { return pattern.charAt(pos)==CLOSE_BRACE; -} +}*/ static inline UBool isNameOpen(const UnicodeString &pattern, int32_t pos) { @@ -189,10 +121,10 @@ isPOSIXOpen(const UnicodeString &pattern, int32_t pos) { return pattern.charAt(pos)==SET_OPEN && pattern.charAt(pos+1)==COLON; } -static inline UBool +/*static inline UBool isPOSIXClose(const UnicodeString &pattern, int32_t pos) { return pattern.charAt(pos)==COLON && pattern.charAt(pos+1)==SET_CLOSE; -} +}*/ // TODO memory debugging provided inside uniset.cpp // could be made available here but probably obsolete with use of modern @@ -275,40 +207,6 @@ UnicodeSet::UnicodeSet(const UnicodeString& pattern, ParsePosition& pos, _dbgct(this); } -#ifdef U_USE_UNICODESET_DEPRECATES -/** - * DEPRECATED Constructs a set from the given Unicode character category. - * @param category an integer indicating the character category as - * defined in uchar.h. - * @deprecated To be removed after 2002-DEC-31 - */ -UnicodeSet::UnicodeSet(int8_t category, UErrorCode& status) : - len(0), capacity(START_EXTRA), bufferCapacity(0), - list(0), buffer(0), strings(0) -{ - static const UChar OPEN[] = { 91, 58, 0 }; // "[:" - static const UChar CLOSE[]= { 58, 93, 0 }; // ":]" - if (U_SUCCESS(status)) { - if (category < 0 || category >= U_CHAR_CATEGORY_COUNT) { - status = U_ILLEGAL_ARGUMENT_ERROR; - } else { - UnicodeString pattern(FALSE, CATEGORY_NAMES + category*2, 2); - pattern.insert(0, OPEN); - pattern.append(CLOSE); - list = (UChar32*) uprv_malloc(sizeof(UChar32) * capacity); - /* test for NULL */ - if(list == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - }else{ - allocateStrings(); - applyPattern(pattern, status); - } - } - } - _dbgct(this); -} -#endif - //---------------------------------------------------------------- // Public API //---------------------------------------------------------------- @@ -806,7 +704,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars, * patterns like /[^abc]/i work. */ if ((options & USET_CASE_INSENSITIVE) != 0) { - closeOver(USET_CASE); + closeOver(USET_CASE_INSENSITIVE); } else if ((options & USET_ADD_CASE_MAPPINGS) != 0) { closeOver(USET_ADD_CASE_MAPPINGS); @@ -933,14 +831,6 @@ static UBool mungeCharName(char* dst, const char* src, int32_t dstCapacity) { #define FAIL(ec) {ec=U_ILLEGAL_ARGUMENT_ERROR; return *this;} -// TODO: Remove the following special-case code when -// these four C99-compatibility properties are implemented -// as enums/names. -static UBool c99Filter(UChar32 ch, void* context) { - struct C99_Map* m = (struct C99_Map*) context; - return m->func(ch); -} - UnicodeSet& UnicodeSet::applyIntPropertyValue(UProperty prop, int32_t value, UErrorCode& ec) { if (U_FAILURE(ec)) return *this; @@ -976,7 +866,7 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop, UProperty p; int32_t v; - UBool mustNotBeEmpty = FALSE; + UBool mustNotBeEmpty = FALSE, invert = FALSE; if (value.length() > 0) { p = u_getPropertyEnum(pname); @@ -1053,7 +943,7 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop, if (!mungeCharName(buf, vname, sizeof(buf))) FAIL(ec); UVersionInfo version; u_versionFromString(version, buf); - applyFilter(versionFilter, &version, UPROPS_SRC_CHAR, ec); + applyFilter(versionFilter, &version, UPROPS_SRC_PROPSVEC, ec); return *this; } break; @@ -1083,22 +973,12 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop, } else if (0 == uprv_comparePropertyNames(ASCII, pname)) { set(0, 0x7F); return *this; + } else if (0 == uprv_comparePropertyNames(ASSIGNED, pname)) { + // [:Assigned:]=[:^Cn:] + p = UCHAR_GENERAL_CATEGORY_MASK; + v = U_GC_CN_MASK; + invert = TRUE; } else { - - // TODO: Remove the following special-case code when - // these four C99-compatibility properties are implemented - // as enums/names. - for (int32_t i=0; isize() > 0) { - for (int32_t j=0; jsize(); ++j) { - str = * (const UnicodeString*) strings->elementAt(j); - foldSet.caseCloseOne(str.foldCase()); - } - } - *this = foldSet; - } - else if ((attribute & USET_ADD_CASE_MAPPINGS)) { - UnicodeSet foldSet(*this); - UnicodeString str; + if (attribute & (USET_CASE_INSENSITIVE | USET_ADD_CASE_MAPPINGS)) { UErrorCode status = U_ZERO_ERROR; - UCaseProps *csp = ucase_getSingleton(&status); + const UCaseProps *csp = ucase_getSingleton(&status); if (U_SUCCESS(status)) { + UnicodeSet foldSet(*this); + UnicodeString str; + USetAdder sa = { + (USet *)&foldSet, + _set_add, + _set_addRange, + _set_addString, + NULL // don't need remove() + }; + + // start with input set to guarantee inclusion + // USET_CASE: remove strings because the strings will actually be reduced (folded); + // therefore, start with no strings and add only those needed + if (attribute & USET_CASE_INSENSITIVE) { + foldSet.strings->removeAllElements(); + } + int32_t n = getRangeCount(); UChar32 result; const UChar *full; @@ -1442,45 +1320,64 @@ UnicodeSet& UnicodeSet::closeOver(int32_t attribute) { UChar32 start = getRangeStart(i); UChar32 end = getRangeEnd(i); - for (UChar32 cp=start; cp<=end; ++cp) { - result = ucase_toFullLower(csp, cp, NULL, NULL, &full, "", &locCache); - addCaseMapping(foldSet, result, full, str); + if (attribute & USET_CASE_INSENSITIVE) { + // full case closure + for (UChar32 cp=start; cp<=end; ++cp) { + ucase_addCaseClosure(csp, cp, &sa); + } + } else { + // add case mappings + // (does not add long s for regular s, or Kelvin for k, for example) + for (UChar32 cp=start; cp<=end; ++cp) { + result = ucase_toFullLower(csp, cp, NULL, NULL, &full, "", &locCache); + addCaseMapping(foldSet, result, full, str); - result = ucase_toFullTitle(csp, cp, NULL, NULL, &full, "", &locCache); - addCaseMapping(foldSet, result, full, str); + result = ucase_toFullTitle(csp, cp, NULL, NULL, &full, "", &locCache); + addCaseMapping(foldSet, result, full, str); - result = ucase_toFullUpper(csp, cp, NULL, NULL, &full, "", &locCache); - addCaseMapping(foldSet, result, full, str); + result = ucase_toFullUpper(csp, cp, NULL, NULL, &full, "", &locCache); + addCaseMapping(foldSet, result, full, str); - result = ucase_toFullFolding(csp, cp, &full, 0); - addCaseMapping(foldSet, result, full, str); + result = ucase_toFullFolding(csp, cp, &full, 0); + addCaseMapping(foldSet, result, full, str); + } } } if (strings != NULL && strings->size() > 0) { - Locale root(""); + if (attribute & USET_CASE_INSENSITIVE) { + for (int32_t j=0; jsize(); ++j) { + str = *(const UnicodeString *) strings->elementAt(j); + str.foldCase(); + if(!ucase_addStringCaseClosure(csp, str.getBuffer(), str.length(), &sa)) { + foldSet.add(str); // does not map to code points: add the folded string itself + } + } + } else { + Locale root(""); #if !UCONFIG_NO_BREAK_ITERATION - BreakIterator *bi = BreakIterator::createWordInstance(root, status); + BreakIterator *bi = BreakIterator::createWordInstance(root, status); #endif - if (U_SUCCESS(status)) { - const UnicodeString *pStr; + if (U_SUCCESS(status)) { + const UnicodeString *pStr; - for (int32_t j=0; jsize(); ++j) { - pStr = (const UnicodeString *) strings->elementAt(j); - (str = *pStr).toLower(root); - foldSet.add(str); + for (int32_t j=0; jsize(); ++j) { + pStr = (const UnicodeString *) strings->elementAt(j); + (str = *pStr).toLower(root); + foldSet.add(str); #if !UCONFIG_NO_BREAK_ITERATION - (str = *pStr).toTitle(bi, root); - foldSet.add(str); + (str = *pStr).toTitle(bi, root); + foldSet.add(str); #endif - (str = *pStr).toUpper(root); - foldSet.add(str); - (str = *pStr).foldCase(); - foldSet.add(str); + (str = *pStr).toUpper(root); + foldSet.add(str); + (str = *pStr).foldCase(); + foldSet.add(str); + } } - } #if !UCONFIG_NO_BREAK_ITERATION - delete bi; + delete bi; #endif + } } *this = foldSet; } @@ -1488,525 +1385,4 @@ UnicodeSet& UnicodeSet::closeOver(int32_t attribute) { return *this; } -//---------------------------------------------------------------- -// Case folding implementation -//---------------------------------------------------------------- - -/** - * Data structure representing a case-fold equivalency class. It is a - * SET containing 0 or more code units, and 0 or more strings of - * length 2 code units or longer. - * - * This class is implemented as a 8-UChar buffer with a few - * convenience methods on it. The format of the buffer: - * - All single code units in this set, followed by a terminating - * zero. If none, then just a terminating zero. - * - Zero or more 0-terminated strings, each of length >= 2 - * code units. - * - A single terminating (UChar)0. - * - * Usage: - * - * const CaseEquivClass& c = ...; - * const UChar* p; - * for (c.getStrings(p); *p; c.nextString(p)) { - * foo(p); - * } - */ -class CaseEquivClass { -public: - UChar data[8]; - - /** - * Return the string of single code units. May be "". Will never - * be NULL. - */ - const UChar* getSingles() const { - return data; - } - - /** - * Return the first multi-code-unit string. May be "" if there - * are none. Will never be NULL. - * @param p pointer to be set to point to the first string. - */ - void getStrings(const UChar*& p) const { - p = data; - nextString(p); - } - - /** - * Advance a pointer from one multi-code-unit string to the next. - * May advance 'p' to point to "" if there are no more. - * Do NOT call if *p == 0. - * @param p pointer to be advanced to point to the next string. - */ - static void nextString(const UChar*& p) { - while (*p++) {} - } -}; - -/** - * IMPORTANT: The following two static data arrays represent the - * information used to do case closure. The first array is an array - * of pairs. That is, for each even index e, entries [e] and [e+1] - * form a pair of case equivalent code units. The entry at [e] is the - * folded one, that is, the one for which u_foldCase(x)==x. - * - * The second static array is an array of CaseEquivClass objects. - * Since these objects are just adorned UChar[] arrays, they can be - * initialized in place in the array, and all of them can live in a - * single piece of static memory, with no heap allocation. - */ - -// MACHINE-GENERATED: Do not edit (see com.ibm.icu.dev.tools.translit.UnicodeSetCloseOver) -static const UChar CASE_PAIRS[] = { - 0x0061,0x0041,0x0062,0x0042,0x0063,0x0043,0x0064,0x0044,0x0065,0x0045, - 0x0066,0x0046,0x0067,0x0047,0x0068,0x0048,0x0069,0x0049,0x006A,0x004A, - 0x006C,0x004C,0x006D,0x004D,0x006E,0x004E,0x006F,0x004F,0x0070,0x0050, - 0x0071,0x0051,0x0072,0x0052,0x0074,0x0054,0x0075,0x0055,0x0076,0x0056, - 0x0077,0x0057,0x0078,0x0058,0x0079,0x0059,0x007A,0x005A,0x00E0,0x00C0, - 0x00E1,0x00C1,0x00E2,0x00C2,0x00E3,0x00C3,0x00E4,0x00C4,0x00E6,0x00C6, - 0x00E7,0x00C7,0x00E8,0x00C8,0x00E9,0x00C9,0x00EA,0x00CA,0x00EB,0x00CB, - 0x00EC,0x00CC,0x00ED,0x00CD,0x00EE,0x00CE,0x00EF,0x00CF,0x00F0,0x00D0, - 0x00F1,0x00D1,0x00F2,0x00D2,0x00F3,0x00D3,0x00F4,0x00D4,0x00F5,0x00D5, - 0x00F6,0x00D6,0x00F8,0x00D8,0x00F9,0x00D9,0x00FA,0x00DA,0x00FB,0x00DB, - 0x00FC,0x00DC,0x00FD,0x00DD,0x00FE,0x00DE,0x00FF,0x0178,0x0101,0x0100, - 0x0103,0x0102,0x0105,0x0104,0x0107,0x0106,0x0109,0x0108,0x010B,0x010A, - 0x010D,0x010C,0x010F,0x010E,0x0111,0x0110,0x0113,0x0112,0x0115,0x0114, - 0x0117,0x0116,0x0119,0x0118,0x011B,0x011A,0x011D,0x011C,0x011F,0x011E, - 0x0121,0x0120,0x0123,0x0122,0x0125,0x0124,0x0127,0x0126,0x0129,0x0128, - 0x012B,0x012A,0x012D,0x012C,0x012F,0x012E,0x0133,0x0132,0x0135,0x0134, - 0x0137,0x0136,0x013A,0x0139,0x013C,0x013B,0x013E,0x013D,0x0140,0x013F, - 0x0142,0x0141,0x0144,0x0143,0x0146,0x0145,0x0148,0x0147,0x014B,0x014A, - 0x014D,0x014C,0x014F,0x014E,0x0151,0x0150,0x0153,0x0152,0x0155,0x0154, - 0x0157,0x0156,0x0159,0x0158,0x015B,0x015A,0x015D,0x015C,0x015F,0x015E, - 0x0161,0x0160,0x0163,0x0162,0x0165,0x0164,0x0167,0x0166,0x0169,0x0168, - 0x016B,0x016A,0x016D,0x016C,0x016F,0x016E,0x0171,0x0170,0x0173,0x0172, - 0x0175,0x0174,0x0177,0x0176,0x017A,0x0179,0x017C,0x017B,0x017E,0x017D, - 0x0183,0x0182,0x0185,0x0184,0x0188,0x0187,0x018C,0x018B,0x0192,0x0191, - 0x0195,0x01F6,0x0199,0x0198,0x019E,0x0220,0x01A1,0x01A0,0x01A3,0x01A2, - 0x01A5,0x01A4,0x01A8,0x01A7,0x01AD,0x01AC,0x01B0,0x01AF,0x01B4,0x01B3, - 0x01B6,0x01B5,0x01B9,0x01B8,0x01BD,0x01BC,0x01BF,0x01F7,0x01CE,0x01CD, - 0x01D0,0x01CF,0x01D2,0x01D1,0x01D4,0x01D3,0x01D6,0x01D5,0x01D8,0x01D7, - 0x01DA,0x01D9,0x01DC,0x01DB,0x01DD,0x018E,0x01DF,0x01DE,0x01E1,0x01E0, - 0x01E3,0x01E2,0x01E5,0x01E4,0x01E7,0x01E6,0x01E9,0x01E8,0x01EB,0x01EA, - 0x01ED,0x01EC,0x01EF,0x01EE,0x01F5,0x01F4,0x01F9,0x01F8,0x01FB,0x01FA, - 0x01FD,0x01FC,0x01FF,0x01FE,0x0201,0x0200,0x0203,0x0202,0x0205,0x0204, - 0x0207,0x0206,0x0209,0x0208,0x020B,0x020A,0x020D,0x020C,0x020F,0x020E, - 0x0211,0x0210,0x0213,0x0212,0x0215,0x0214,0x0217,0x0216,0x0219,0x0218, - 0x021B,0x021A,0x021D,0x021C,0x021F,0x021E,0x0223,0x0222,0x0225,0x0224, - 0x0227,0x0226,0x0229,0x0228,0x022B,0x022A,0x022D,0x022C,0x022F,0x022E, - 0x0231,0x0230,0x0233,0x0232,0x0253,0x0181,0x0254,0x0186,0x0256,0x0189, - 0x0257,0x018A,0x0259,0x018F,0x025B,0x0190,0x0260,0x0193,0x0263,0x0194, - 0x0268,0x0197,0x0269,0x0196,0x026F,0x019C,0x0272,0x019D,0x0275,0x019F, - 0x0280,0x01A6,0x0283,0x01A9,0x0288,0x01AE,0x028A,0x01B1,0x028B,0x01B2, - 0x0292,0x01B7,0x03AC,0x0386,0x03AD,0x0388,0x03AE,0x0389,0x03AF,0x038A, - 0x03B1,0x0391,0x03B3,0x0393,0x03B4,0x0394,0x03B6,0x0396,0x03B7,0x0397, - 0x03BB,0x039B,0x03BD,0x039D,0x03BE,0x039E,0x03BF,0x039F,0x03C4,0x03A4, - 0x03C5,0x03A5,0x03C7,0x03A7,0x03C8,0x03A8,0x03CA,0x03AA,0x03CB,0x03AB, - 0x03CC,0x038C,0x03CD,0x038E,0x03CE,0x038F,0x03D9,0x03D8,0x03DB,0x03DA, - 0x03DD,0x03DC,0x03DF,0x03DE,0x03E1,0x03E0,0x03E3,0x03E2,0x03E5,0x03E4, - 0x03E7,0x03E6,0x03E9,0x03E8,0x03EB,0x03EA,0x03ED,0x03EC,0x03EF,0x03EE, - 0x0430,0x0410,0x0431,0x0411,0x0432,0x0412,0x0433,0x0413,0x0434,0x0414, - 0x0435,0x0415,0x0436,0x0416,0x0437,0x0417,0x0438,0x0418,0x0439,0x0419, - 0x043A,0x041A,0x043B,0x041B,0x043C,0x041C,0x043D,0x041D,0x043E,0x041E, - 0x043F,0x041F,0x0440,0x0420,0x0441,0x0421,0x0442,0x0422,0x0443,0x0423, - 0x0444,0x0424,0x0445,0x0425,0x0446,0x0426,0x0447,0x0427,0x0448,0x0428, - 0x0449,0x0429,0x044A,0x042A,0x044B,0x042B,0x044C,0x042C,0x044D,0x042D, - 0x044E,0x042E,0x044F,0x042F,0x0450,0x0400,0x0451,0x0401,0x0452,0x0402, - 0x0453,0x0403,0x0454,0x0404,0x0455,0x0405,0x0456,0x0406,0x0457,0x0407, - 0x0458,0x0408,0x0459,0x0409,0x045A,0x040A,0x045B,0x040B,0x045C,0x040C, - 0x045D,0x040D,0x045E,0x040E,0x045F,0x040F,0x0461,0x0460,0x0463,0x0462, - 0x0465,0x0464,0x0467,0x0466,0x0469,0x0468,0x046B,0x046A,0x046D,0x046C, - 0x046F,0x046E,0x0471,0x0470,0x0473,0x0472,0x0475,0x0474,0x0477,0x0476, - 0x0479,0x0478,0x047B,0x047A,0x047D,0x047C,0x047F,0x047E,0x0481,0x0480, - 0x048B,0x048A,0x048D,0x048C,0x048F,0x048E,0x0491,0x0490,0x0493,0x0492, - 0x0495,0x0494,0x0497,0x0496,0x0499,0x0498,0x049B,0x049A,0x049D,0x049C, - 0x049F,0x049E,0x04A1,0x04A0,0x04A3,0x04A2,0x04A5,0x04A4,0x04A7,0x04A6, - 0x04A9,0x04A8,0x04AB,0x04AA,0x04AD,0x04AC,0x04AF,0x04AE,0x04B1,0x04B0, - 0x04B3,0x04B2,0x04B5,0x04B4,0x04B7,0x04B6,0x04B9,0x04B8,0x04BB,0x04BA, - 0x04BD,0x04BC,0x04BF,0x04BE,0x04C2,0x04C1,0x04C4,0x04C3,0x04C6,0x04C5, - 0x04C8,0x04C7,0x04CA,0x04C9,0x04CC,0x04CB,0x04CE,0x04CD,0x04D1,0x04D0, - 0x04D3,0x04D2,0x04D5,0x04D4,0x04D7,0x04D6,0x04D9,0x04D8,0x04DB,0x04DA, - 0x04DD,0x04DC,0x04DF,0x04DE,0x04E1,0x04E0,0x04E3,0x04E2,0x04E5,0x04E4, - 0x04E7,0x04E6,0x04E9,0x04E8,0x04EB,0x04EA,0x04ED,0x04EC,0x04EF,0x04EE, - 0x04F1,0x04F0,0x04F3,0x04F2,0x04F5,0x04F4,0x04F9,0x04F8,0x0501,0x0500, - 0x0503,0x0502,0x0505,0x0504,0x0507,0x0506,0x0509,0x0508,0x050B,0x050A, - 0x050D,0x050C,0x050F,0x050E,0x0561,0x0531,0x0562,0x0532,0x0563,0x0533, - 0x0564,0x0534,0x0565,0x0535,0x0566,0x0536,0x0567,0x0537,0x0568,0x0538, - 0x0569,0x0539,0x056A,0x053A,0x056B,0x053B,0x056C,0x053C,0x056D,0x053D, - 0x056E,0x053E,0x056F,0x053F,0x0570,0x0540,0x0571,0x0541,0x0572,0x0542, - 0x0573,0x0543,0x0574,0x0544,0x0575,0x0545,0x0576,0x0546,0x0577,0x0547, - 0x0578,0x0548,0x0579,0x0549,0x057A,0x054A,0x057B,0x054B,0x057C,0x054C, - 0x057D,0x054D,0x057E,0x054E,0x057F,0x054F,0x0580,0x0550,0x0581,0x0551, - 0x0582,0x0552,0x0583,0x0553,0x0584,0x0554,0x0585,0x0555,0x0586,0x0556, - 0x1E01,0x1E00,0x1E03,0x1E02,0x1E05,0x1E04,0x1E07,0x1E06,0x1E09,0x1E08, - 0x1E0B,0x1E0A,0x1E0D,0x1E0C,0x1E0F,0x1E0E,0x1E11,0x1E10,0x1E13,0x1E12, - 0x1E15,0x1E14,0x1E17,0x1E16,0x1E19,0x1E18,0x1E1B,0x1E1A,0x1E1D,0x1E1C, - 0x1E1F,0x1E1E,0x1E21,0x1E20,0x1E23,0x1E22,0x1E25,0x1E24,0x1E27,0x1E26, - 0x1E29,0x1E28,0x1E2B,0x1E2A,0x1E2D,0x1E2C,0x1E2F,0x1E2E,0x1E31,0x1E30, - 0x1E33,0x1E32,0x1E35,0x1E34,0x1E37,0x1E36,0x1E39,0x1E38,0x1E3B,0x1E3A, - 0x1E3D,0x1E3C,0x1E3F,0x1E3E,0x1E41,0x1E40,0x1E43,0x1E42,0x1E45,0x1E44, - 0x1E47,0x1E46,0x1E49,0x1E48,0x1E4B,0x1E4A,0x1E4D,0x1E4C,0x1E4F,0x1E4E, - 0x1E51,0x1E50,0x1E53,0x1E52,0x1E55,0x1E54,0x1E57,0x1E56,0x1E59,0x1E58, - 0x1E5B,0x1E5A,0x1E5D,0x1E5C,0x1E5F,0x1E5E,0x1E63,0x1E62,0x1E65,0x1E64, - 0x1E67,0x1E66,0x1E69,0x1E68,0x1E6B,0x1E6A,0x1E6D,0x1E6C,0x1E6F,0x1E6E, - 0x1E71,0x1E70,0x1E73,0x1E72,0x1E75,0x1E74,0x1E77,0x1E76,0x1E79,0x1E78, - 0x1E7B,0x1E7A,0x1E7D,0x1E7C,0x1E7F,0x1E7E,0x1E81,0x1E80,0x1E83,0x1E82, - 0x1E85,0x1E84,0x1E87,0x1E86,0x1E89,0x1E88,0x1E8B,0x1E8A,0x1E8D,0x1E8C, - 0x1E8F,0x1E8E,0x1E91,0x1E90,0x1E93,0x1E92,0x1E95,0x1E94,0x1EA1,0x1EA0, - 0x1EA3,0x1EA2,0x1EA5,0x1EA4,0x1EA7,0x1EA6,0x1EA9,0x1EA8,0x1EAB,0x1EAA, - 0x1EAD,0x1EAC,0x1EAF,0x1EAE,0x1EB1,0x1EB0,0x1EB3,0x1EB2,0x1EB5,0x1EB4, - 0x1EB7,0x1EB6,0x1EB9,0x1EB8,0x1EBB,0x1EBA,0x1EBD,0x1EBC,0x1EBF,0x1EBE, - 0x1EC1,0x1EC0,0x1EC3,0x1EC2,0x1EC5,0x1EC4,0x1EC7,0x1EC6,0x1EC9,0x1EC8, - 0x1ECB,0x1ECA,0x1ECD,0x1ECC,0x1ECF,0x1ECE,0x1ED1,0x1ED0,0x1ED3,0x1ED2, - 0x1ED5,0x1ED4,0x1ED7,0x1ED6,0x1ED9,0x1ED8,0x1EDB,0x1EDA,0x1EDD,0x1EDC, - 0x1EDF,0x1EDE,0x1EE1,0x1EE0,0x1EE3,0x1EE2,0x1EE5,0x1EE4,0x1EE7,0x1EE6, - 0x1EE9,0x1EE8,0x1EEB,0x1EEA,0x1EED,0x1EEC,0x1EEF,0x1EEE,0x1EF1,0x1EF0, - 0x1EF3,0x1EF2,0x1EF5,0x1EF4,0x1EF7,0x1EF6,0x1EF9,0x1EF8,0x1F00,0x1F08, - 0x1F01,0x1F09,0x1F02,0x1F0A,0x1F03,0x1F0B,0x1F04,0x1F0C,0x1F05,0x1F0D, - 0x1F06,0x1F0E,0x1F07,0x1F0F,0x1F10,0x1F18,0x1F11,0x1F19,0x1F12,0x1F1A, - 0x1F13,0x1F1B,0x1F14,0x1F1C,0x1F15,0x1F1D,0x1F20,0x1F28,0x1F21,0x1F29, - 0x1F22,0x1F2A,0x1F23,0x1F2B,0x1F24,0x1F2C,0x1F25,0x1F2D,0x1F26,0x1F2E, - 0x1F27,0x1F2F,0x1F30,0x1F38,0x1F31,0x1F39,0x1F32,0x1F3A,0x1F33,0x1F3B, - 0x1F34,0x1F3C,0x1F35,0x1F3D,0x1F36,0x1F3E,0x1F37,0x1F3F,0x1F40,0x1F48, - 0x1F41,0x1F49,0x1F42,0x1F4A,0x1F43,0x1F4B,0x1F44,0x1F4C,0x1F45,0x1F4D, - 0x1F51,0x1F59,0x1F53,0x1F5B,0x1F55,0x1F5D,0x1F57,0x1F5F,0x1F60,0x1F68, - 0x1F61,0x1F69,0x1F62,0x1F6A,0x1F63,0x1F6B,0x1F64,0x1F6C,0x1F65,0x1F6D, - 0x1F66,0x1F6E,0x1F67,0x1F6F,0x1F70,0x1FBA,0x1F71,0x1FBB,0x1F72,0x1FC8, - 0x1F73,0x1FC9,0x1F74,0x1FCA,0x1F75,0x1FCB,0x1F76,0x1FDA,0x1F77,0x1FDB, - 0x1F78,0x1FF8,0x1F79,0x1FF9,0x1F7A,0x1FEA,0x1F7B,0x1FEB,0x1F7C,0x1FFA, - 0x1F7D,0x1FFB,0x1FB0,0x1FB8,0x1FB1,0x1FB9,0x1FD0,0x1FD8,0x1FD1,0x1FD9, - 0x1FE0,0x1FE8,0x1FE1,0x1FE9,0x1FE5,0x1FEC,0x2170,0x2160,0x2171,0x2161, - 0x2172,0x2162,0x2173,0x2163,0x2174,0x2164,0x2175,0x2165,0x2176,0x2166, - 0x2177,0x2167,0x2178,0x2168,0x2179,0x2169,0x217A,0x216A,0x217B,0x216B, - 0x217C,0x216C,0x217D,0x216D,0x217E,0x216E,0x217F,0x216F,0x24D0,0x24B6, - 0x24D1,0x24B7,0x24D2,0x24B8,0x24D3,0x24B9,0x24D4,0x24BA,0x24D5,0x24BB, - 0x24D6,0x24BC,0x24D7,0x24BD,0x24D8,0x24BE,0x24D9,0x24BF,0x24DA,0x24C0, - 0x24DB,0x24C1,0x24DC,0x24C2,0x24DD,0x24C3,0x24DE,0x24C4,0x24DF,0x24C5, - 0x24E0,0x24C6,0x24E1,0x24C7,0x24E2,0x24C8,0x24E3,0x24C9,0x24E4,0x24CA, - 0x24E5,0x24CB,0x24E6,0x24CC,0x24E7,0x24CD,0x24E8,0x24CE,0x24E9,0x24CF, - 0xFF41,0xFF21,0xFF42,0xFF22,0xFF43,0xFF23,0xFF44,0xFF24,0xFF45,0xFF25, - 0xFF46,0xFF26,0xFF47,0xFF27,0xFF48,0xFF28,0xFF49,0xFF29,0xFF4A,0xFF2A, - 0xFF4B,0xFF2B,0xFF4C,0xFF2C,0xFF4D,0xFF2D,0xFF4E,0xFF2E,0xFF4F,0xFF2F, - 0xFF50,0xFF30,0xFF51,0xFF31,0xFF52,0xFF32,0xFF53,0xFF33,0xFF54,0xFF34, - 0xFF55,0xFF35,0xFF56,0xFF36,0xFF57,0xFF37,0xFF58,0xFF38,0xFF59,0xFF39, - 0xFF5A,0xFF3A, -}; - -// MACHINE-GENERATED: Do not edit (see com.ibm.icu.dev.tools.translit.UnicodeSetCloseOver) -static const CaseEquivClass CASE_NONPAIRS[] = { - {{0x1E9A,0, 0x0061,0x02BE,0, 0}}, - {{0xFB00,0, 0x0066,0x0066,0, 0}}, - {{0xFB03,0, 0x0066,0x0066,0x0069,0, 0}}, - {{0xFB04,0, 0x0066,0x0066,0x006C,0, 0}}, - {{0xFB01,0, 0x0066,0x0069,0, 0}}, - {{0xFB02,0, 0x0066,0x006C,0, 0}}, - {{0x1E96,0, 0x0068,0x0331,0, 0}}, - {{0x0130,0, 0x0069,0x0307,0, 0}}, - {{0x01F0,0, 0x006A,0x030C,0, 0}}, - {{0x004B,0x006B,0x212A,0, 0}}, - {{0x0053,0x0073,0x017F,0, 0}}, - {{0x00DF,0, 0x0073,0x0073,0, 0}}, - {{0xFB05,0xFB06,0, 0x0073,0x0074,0, 0}}, - {{0x1E97,0, 0x0074,0x0308,0, 0}}, - {{0x1E98,0, 0x0077,0x030A,0, 0}}, - {{0x1E99,0, 0x0079,0x030A,0, 0}}, - {{0x00C5,0x00E5,0x212B,0, 0}}, - {{0x01C4,0x01C5,0x01C6,0, 0}}, - {{0x01C7,0x01C8,0x01C9,0, 0}}, - {{0x01CA,0x01CB,0x01CC,0, 0}}, - {{0x01F1,0x01F2,0x01F3,0, 0}}, - {{0x0149,0, 0x02BC,0x006E,0, 0}}, - {{0x1FB4,0, 0x03AC,0x03B9,0, 0}}, - {{0x1FC4,0, 0x03AE,0x03B9,0, 0}}, - {{0x1FB6,0, 0x03B1,0x0342,0, 0}}, - {{0x1FB7,0, 0x03B1,0x0342,0x03B9,0, 0}}, - {{0x1FB3,0x1FBC,0, 0x03B1,0x03B9,0, 0}}, - {{0x0392,0x03B2,0x03D0,0, 0}}, - {{0x0395,0x03B5,0x03F5,0, 0}}, - {{0x1FC6,0, 0x03B7,0x0342,0, 0}}, - {{0x1FC7,0, 0x03B7,0x0342,0x03B9,0, 0}}, - {{0x1FC3,0x1FCC,0, 0x03B7,0x03B9,0, 0}}, - {{0x0398,0x03B8,0x03D1,0x03F4,0, 0}}, - {{0x0345,0x0399,0x03B9,0x1FBE,0, 0}}, - {{0x1FD2,0, 0x03B9,0x0308,0x0300,0, 0}}, - {{0x0390,0x1FD3,0, 0x03B9,0x0308,0x0301,0, 0}}, - {{0x1FD7,0, 0x03B9,0x0308,0x0342,0, 0}}, - {{0x1FD6,0, 0x03B9,0x0342,0, 0}}, - {{0x039A,0x03BA,0x03F0,0, 0}}, - {{0x00B5,0x039C,0x03BC,0, 0}}, - {{0x03A0,0x03C0,0x03D6,0, 0}}, - {{0x03A1,0x03C1,0x03F1,0, 0}}, - {{0x1FE4,0, 0x03C1,0x0313,0, 0}}, - {{0x03A3,0x03C2,0x03C3,0x03F2,0, 0}}, - {{0x1FE2,0, 0x03C5,0x0308,0x0300,0, 0}}, - {{0x03B0,0x1FE3,0, 0x03C5,0x0308,0x0301,0, 0}}, - {{0x1FE7,0, 0x03C5,0x0308,0x0342,0, 0}}, - {{0x1F50,0, 0x03C5,0x0313,0, 0}}, - {{0x1F52,0, 0x03C5,0x0313,0x0300,0, 0}}, - {{0x1F54,0, 0x03C5,0x0313,0x0301,0, 0}}, - {{0x1F56,0, 0x03C5,0x0313,0x0342,0, 0}}, - {{0x1FE6,0, 0x03C5,0x0342,0, 0}}, - {{0x03A6,0x03C6,0x03D5,0, 0}}, - {{0x03A9,0x03C9,0x2126,0, 0}}, - {{0x1FF6,0, 0x03C9,0x0342,0, 0}}, - {{0x1FF7,0, 0x03C9,0x0342,0x03B9,0, 0}}, - {{0x1FF3,0x1FFC,0, 0x03C9,0x03B9,0, 0}}, - {{0x1FF4,0, 0x03CE,0x03B9,0, 0}}, - {{0x0587,0, 0x0565,0x0582,0, 0}}, - {{0xFB14,0, 0x0574,0x0565,0, 0}}, - {{0xFB15,0, 0x0574,0x056B,0, 0}}, - {{0xFB17,0, 0x0574,0x056D,0, 0}}, - {{0xFB13,0, 0x0574,0x0576,0, 0}}, - {{0xFB16,0, 0x057E,0x0576,0, 0}}, - {{0x1E60,0x1E61,0x1E9B,0, 0}}, - {{0x1F80,0x1F88,0, 0x1F00,0x03B9,0, 0}}, - {{0x1F81,0x1F89,0, 0x1F01,0x03B9,0, 0}}, - {{0x1F82,0x1F8A,0, 0x1F02,0x03B9,0, 0}}, - {{0x1F83,0x1F8B,0, 0x1F03,0x03B9,0, 0}}, - {{0x1F84,0x1F8C,0, 0x1F04,0x03B9,0, 0}}, - {{0x1F85,0x1F8D,0, 0x1F05,0x03B9,0, 0}}, - {{0x1F86,0x1F8E,0, 0x1F06,0x03B9,0, 0}}, - {{0x1F87,0x1F8F,0, 0x1F07,0x03B9,0, 0}}, - {{0x1F90,0x1F98,0, 0x1F20,0x03B9,0, 0}}, - {{0x1F91,0x1F99,0, 0x1F21,0x03B9,0, 0}}, - {{0x1F92,0x1F9A,0, 0x1F22,0x03B9,0, 0}}, - {{0x1F93,0x1F9B,0, 0x1F23,0x03B9,0, 0}}, - {{0x1F94,0x1F9C,0, 0x1F24,0x03B9,0, 0}}, - {{0x1F95,0x1F9D,0, 0x1F25,0x03B9,0, 0}}, - {{0x1F96,0x1F9E,0, 0x1F26,0x03B9,0, 0}}, - {{0x1F97,0x1F9F,0, 0x1F27,0x03B9,0, 0}}, - {{0x1FA0,0x1FA8,0, 0x1F60,0x03B9,0, 0}}, - {{0x1FA1,0x1FA9,0, 0x1F61,0x03B9,0, 0}}, - {{0x1FA2,0x1FAA,0, 0x1F62,0x03B9,0, 0}}, - {{0x1FA3,0x1FAB,0, 0x1F63,0x03B9,0, 0}}, - {{0x1FA4,0x1FAC,0, 0x1F64,0x03B9,0, 0}}, - {{0x1FA5,0x1FAD,0, 0x1F65,0x03B9,0, 0}}, - {{0x1FA6,0x1FAE,0, 0x1F66,0x03B9,0, 0}}, - {{0x1FA7,0x1FAF,0, 0x1F67,0x03B9,0, 0}}, - {{0x1FB2,0, 0x1F70,0x03B9,0, 0}}, - {{0x1FC2,0, 0x1F74,0x03B9,0, 0}}, - {{0x1FF2,0, 0x1F7C,0x03B9,0, 0}}, - {{0, 0xD801,0xDC00,0, 0xD801,0xDC28,0, 0}}, - {{0, 0xD801,0xDC01,0, 0xD801,0xDC29,0, 0}}, - {{0, 0xD801,0xDC02,0, 0xD801,0xDC2A,0, 0}}, - {{0, 0xD801,0xDC03,0, 0xD801,0xDC2B,0, 0}}, - {{0, 0xD801,0xDC04,0, 0xD801,0xDC2C,0, 0}}, - {{0, 0xD801,0xDC05,0, 0xD801,0xDC2D,0, 0}}, - {{0, 0xD801,0xDC06,0, 0xD801,0xDC2E,0, 0}}, - {{0, 0xD801,0xDC07,0, 0xD801,0xDC2F,0, 0}}, - {{0, 0xD801,0xDC08,0, 0xD801,0xDC30,0, 0}}, - {{0, 0xD801,0xDC09,0, 0xD801,0xDC31,0, 0}}, - {{0, 0xD801,0xDC0A,0, 0xD801,0xDC32,0, 0}}, - {{0, 0xD801,0xDC0B,0, 0xD801,0xDC33,0, 0}}, - {{0, 0xD801,0xDC0C,0, 0xD801,0xDC34,0, 0}}, - {{0, 0xD801,0xDC0D,0, 0xD801,0xDC35,0, 0}}, - {{0, 0xD801,0xDC0E,0, 0xD801,0xDC36,0, 0}}, - {{0, 0xD801,0xDC0F,0, 0xD801,0xDC37,0, 0}}, - {{0, 0xD801,0xDC10,0, 0xD801,0xDC38,0, 0}}, - {{0, 0xD801,0xDC11,0, 0xD801,0xDC39,0, 0}}, - {{0, 0xD801,0xDC12,0, 0xD801,0xDC3A,0, 0}}, - {{0, 0xD801,0xDC13,0, 0xD801,0xDC3B,0, 0}}, - {{0, 0xD801,0xDC14,0, 0xD801,0xDC3C,0, 0}}, - {{0, 0xD801,0xDC15,0, 0xD801,0xDC3D,0, 0}}, - {{0, 0xD801,0xDC16,0, 0xD801,0xDC3E,0, 0}}, - {{0, 0xD801,0xDC17,0, 0xD801,0xDC3F,0, 0}}, - {{0, 0xD801,0xDC18,0, 0xD801,0xDC40,0, 0}}, - {{0, 0xD801,0xDC19,0, 0xD801,0xDC41,0, 0}}, - {{0, 0xD801,0xDC1A,0, 0xD801,0xDC42,0, 0}}, - {{0, 0xD801,0xDC1B,0, 0xD801,0xDC43,0, 0}}, - {{0, 0xD801,0xDC1C,0, 0xD801,0xDC44,0, 0}}, - {{0, 0xD801,0xDC1D,0, 0xD801,0xDC45,0, 0}}, - {{0, 0xD801,0xDC1E,0, 0xD801,0xDC46,0, 0}}, - {{0, 0xD801,0xDC1F,0, 0xD801,0xDC47,0, 0}}, - {{0, 0xD801,0xDC20,0, 0xD801,0xDC48,0, 0}}, - {{0, 0xD801,0xDC21,0, 0xD801,0xDC49,0, 0}}, - {{0, 0xD801,0xDC22,0, 0xD801,0xDC4A,0, 0}}, - {{0, 0xD801,0xDC23,0, 0xD801,0xDC4B,0, 0}}, - {{0, 0xD801,0xDC24,0, 0xD801,0xDC4C,0, 0}}, - {{0, 0xD801,0xDC25,0, 0xD801,0xDC4D,0, 0}} -}; - -#define CASE_PAIRS_LENGTH (sizeof(CASE_PAIRS)/sizeof(CASE_PAIRS[0])) -#define CASE_NONPAIRS_LENGTH (sizeof(CASE_NONPAIRS)/sizeof(CASE_NONPAIRS[0])) - -/** - * Add to this set all members of the case fold equivalency class - * that contains 'folded'. - * @param folded a string within a case fold equivalency class. - * It must have the property that UCharacter.foldCase(folded, - * DEFAULT_CASE_MAP).equals(folded). - */ -void UnicodeSet::caseCloseOne(const UnicodeString& folded) { - if (folded.length() == 1) { - caseCloseOne(folded.charAt(0)); - return; - } - - const CaseEquivClass* c = getCaseMapOf(folded); - if (c != NULL) { - caseCloseOne(*c); - return; - } - - // Add 'folded' itself; it belongs to no equivalency class. - add(folded); -} - -/** - * Add to this set all members of the case fold equivalency class - * that contains 'folded'. - * @param folded a code UNIT within a case fold equivalency class. - * It must have the property that uchar_foldCase(folded, - * DEFAULT_CASE_MAP) == folded. - */ -void UnicodeSet::caseCloseOne(UChar folded) { - // We must do a DOUBLE LOOKUP, first in the CompactByteArray that - // indexes into CASE_NONPAIRS[] and then into the CASE_PAIRS[] - // sorted array. A character will occur in one or the other, or - // neither, but not both. - - // Look in the CompactByteArray. - const CaseEquivClass* c = getCaseMapOf(folded); - if (c != NULL) { - caseCloseOne(*c); - return; - } - - // Binary search in pairs array, looking at only even entries. - // The indices low, high, and x will be halved with respect to - // CASE_PAIRS[]; that is, they must be doubled before indexing. - - // CASE_PAIRS has 1312 elements, of 656 pairs, so the search - // takes no more than 10 passes. - int32_t low = 0; - int32_t high = (CASE_PAIRS_LENGTH >> 1) - 1; - int32_t x; - do { - x = (low + high) >> 1; - UChar ch = CASE_PAIRS[(uint32_t)(x << 1)]; - if (folded < ch) { - high = x - 1; - } else if (folded > ch) { - low = x + 1; - } else { - break; - } - } while (low < high); - - x = (low + high) & ~1; // ((low + high) >> 1) << 1 - if (folded == CASE_PAIRS[x]) { - add(CASE_PAIRS[x]); - add(CASE_PAIRS[x+1]); - } else { - // If the search fails, then add folded itself; it is a - // case-unique code unit. - add(folded); - } -} - -/** - * Add to this set all members of the given CaseEquivClass object. - */ -void UnicodeSet::caseCloseOne(const CaseEquivClass& c) { - const UChar* p = c.getSingles(); - while (*p) { - add(*p++); // add all single code units - } - for (c.getStrings(p); *p; c.nextString(p)) { - add(p); // add all strings - } -} - -/** - * Given a folded string of length >= 2 code units, return the - * CaseEquivClass containing this string, or NULL if none. - */ -const CaseEquivClass* UnicodeSet::getCaseMapOf(const UnicodeString& folded) { - umtx_lock(NULL); - UBool f = (CASE_EQUIV_HASH == NULL); - umtx_unlock(NULL); - - if (f) { - // Create the Hashtable, which maps UnicodeStrings to index - // values into CASE_NONPAIRS. - UErrorCode ec = U_ZERO_ERROR; - Hashtable* hash = new Hashtable(); - if (hash != NULL) { - int32_t i; - for (i=0; i<(int32_t)CASE_NONPAIRS_LENGTH; ++i) { - const CaseEquivClass* c = &CASE_NONPAIRS[i]; - const UChar* p; - for (c->getStrings(p); *p; c->nextString(p)) { - hash->put(UnicodeString(p), (void*) c, ec); - } - } - if (U_SUCCESS(ec)) { - umtx_lock(NULL); - if (CASE_EQUIV_HASH == NULL) { - CASE_EQUIV_HASH = hash; - hash = NULL; - ucln_common_registerCleanup(UCLN_COMMON_USET, uset_cleanup); - } - umtx_unlock(NULL); - } - delete hash; - } - } - - return (CASE_EQUIV_HASH != NULL) ? - (const CaseEquivClass*) CASE_EQUIV_HASH->get(folded) : NULL; -} - -/** - * Given a folded code unit, return the CaseEquivClass containing it, - * or NULL if none. - */ -const CaseEquivClass* UnicodeSet::getCaseMapOf(UChar folded) { - umtx_lock(NULL); - UBool f = (CASE_EQUIV_CBA == NULL); - umtx_unlock(NULL); - - if (f) { - // Create the CompactByteArray, which maps single code units - // to index values into CASE_NONPAIRS. - CompactByteArray* cba = ucmp8_open(-1); - if (ucmp8_isBogus(cba)) { - ucmp8_close(cba); - cba = NULL; - } else { - int32_t i; - for (i=0; i<(int32_t)CASE_NONPAIRS_LENGTH; ++i) { - const UChar* p = CASE_NONPAIRS[i].getSingles(); - UChar ch; - while ((ch = *p++) != 0) { - ucmp8_set(cba, ch, (int8_t) i); - } - } - ucmp8_compact(cba, 256); - } - - umtx_lock(NULL); - if (CASE_EQUIV_CBA == NULL) { - CASE_EQUIV_CBA = cba; - cba = NULL; - ucln_common_registerCleanup(UCLN_COMMON_USET, uset_cleanup); - } - umtx_unlock(NULL); - if (cba != NULL) { - ucmp8_close(cba); - } - } - - if (CASE_EQUIV_CBA != NULL) { - int32_t index = ucmp8_getu(CASE_EQUIV_CBA, folded); - if (index != 255) { - return &CASE_NONPAIRS[index]; - } - } - return NULL; -} - U_NAMESPACE_END diff --git a/icuSources/common/unistr.cpp b/icuSources/common/unistr.cpp index 640ef899..1b3e9da5 100644 --- a/icuSources/common/unistr.cpp +++ b/icuSources/common/unistr.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1999-2004, International Business Machines Corporation and * +* Copyright (C) 1999-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ****************************************************************************** * @@ -302,7 +302,7 @@ UnicodeString::UnicodeString(const char *src, int32_t length, EInvariant) // treat as an empty string } else { if(length<0) { - length=uprv_strlen(src); + length=(int32_t)uprv_strlen(src); } if(cloneArrayIfNeeded(length, length, FALSE)) { u_charsToUChars(src, getArrayStart(), length); @@ -759,7 +759,7 @@ UnicodeString::indexOf(const UChar *srcChars, if(match == NULL) { return -1; } else { - return match - fArray; + return (int32_t)(match - fArray); } } @@ -776,7 +776,7 @@ UnicodeString::doIndexOf(UChar c, if(match == NULL) { return -1; } else { - return match - fArray; + return (int32_t)(match - fArray); } } @@ -792,7 +792,7 @@ UnicodeString::doIndexOf(UChar32 c, if(match == NULL) { return -1; } else { - return match - fArray; + return (int32_t)(match - fArray); } } @@ -820,7 +820,7 @@ UnicodeString::lastIndexOf(const UChar *srcChars, if(match == NULL) { return -1; } else { - return match - fArray; + return (int32_t)(match - fArray); } } @@ -841,7 +841,7 @@ UnicodeString::doLastIndexOf(UChar c, if(match == NULL) { return -1; } else { - return match - fArray; + return (int32_t)(match - fArray); } } @@ -857,7 +857,7 @@ UnicodeString::doLastIndexOf(UChar32 c, if(match == NULL) { return -1; } else { - return match - fArray; + return (int32_t)(match - fArray); } } @@ -1368,3 +1368,18 @@ UnicodeString::cloneArrayIfNeeded(int32_t newCapacity, return TRUE; } U_NAMESPACE_END + +#ifdef U_STATIC_IMPLEMENTATION +/* +This should never be called. It is defined here to make sure that the +virtual vector deleting destructor is defined within unistr.cpp. +The vector deleting destructor is already a part of UObject, +but defining it here makes sure that it is included with this object file. +This makes sure that static library dependencies are kept to a minimum. +*/ +static void uprv_UnicodeStringDummy(void) { + U_NAMESPACE_USE + delete [] (new UnicodeString[2]); +} +#endif + diff --git a/icuSources/common/unistr_case.cpp b/icuSources/common/unistr_case.cpp index dd4a0819..34f53d8a 100644 --- a/icuSources/common/unistr_case.cpp +++ b/icuSources/common/unistr_case.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -27,6 +27,7 @@ #include "unicode/ubrk.h" #include "ustr_imp.h" #include "unormimp.h" +#include "uhash.h" U_NAMESPACE_BEGIN @@ -108,7 +109,7 @@ UnicodeString::caseMap(BreakIterator *titleIter, UErrorCode errorCode; errorCode = U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); + const UCaseProps *csp=ucase_getSingleton(&errorCode); if(U_FAILURE(errorCode)) { setToBogus(); return *this; @@ -242,3 +243,33 @@ UnicodeString::foldCase(uint32_t options) { } U_NAMESPACE_END + +// Defined here to reduce dependencies on break iterator +U_CAPI int32_t U_EXPORT2 +uhash_hashCaselessUnicodeString(const UHashTok key) { + U_NAMESPACE_USE + const UnicodeString *str = (const UnicodeString*) key.pointer; + if (str == NULL) { + return 0; + } + // Inefficient; a better way would be to have a hash function in + // UnicodeString that does case folding on the fly. + UnicodeString copy(*str); + return copy.foldCase().hashCode(); +} + +// Defined here to reduce dependencies on break iterator +U_CAPI UBool U_EXPORT2 +uhash_compareCaselessUnicodeString(const UHashTok key1, const UHashTok key2) { + U_NAMESPACE_USE + const UnicodeString *str1 = (const UnicodeString*) key1.pointer; + const UnicodeString *str2 = (const UnicodeString*) key2.pointer; + if (str1 == str2) { + return TRUE; + } + if (str1 == NULL || str2 == NULL) { + return FALSE; + } + return str1->caseCompare(*str2, U_FOLD_CASE_DEFAULT) == 0; +} + diff --git a/icuSources/common/unistr_cnv.cpp b/icuSources/common/unistr_cnv.cpp index f5defc66..adc0dda6 100644 --- a/icuSources/common/unistr_cnv.cpp +++ b/icuSources/common/unistr_cnv.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -43,9 +43,9 @@ UnicodeString::UnicodeString(const char *codepageData, fArray(fStackBuffer), fFlags(kShortString) { - if(codepageData != 0) { - doCodepageCreate(codepageData, (int32_t)uprv_strlen(codepageData), codepage); - } + if(codepageData != 0) { + doCodepageCreate(codepageData, (int32_t)uprv_strlen(codepageData), codepage); + } } @@ -57,9 +57,9 @@ UnicodeString::UnicodeString(const char *codepageData, fArray(fStackBuffer), fFlags(kShortString) { - if(codepageData != 0) { - doCodepageCreate(codepageData, dataLength, codepage); - } + if(codepageData != 0) { + doCodepageCreate(codepageData, dataLength, codepage); + } } UnicodeString::UnicodeString(const char *src, int32_t srcLength, @@ -70,35 +70,35 @@ UnicodeString::UnicodeString(const char *src, int32_t srcLength, fArray(fStackBuffer), fFlags(kShortString) { - if(U_SUCCESS(errorCode)) { - // check arguments - if(src==NULL) { - // treat as an empty string, do nothing more - } else if(srcLength<-1) { - errorCode=U_ILLEGAL_ARGUMENT_ERROR; - } else { - // get input length - if(srcLength==-1) { - srcLength=(int32_t)uprv_strlen(src); - } - if(srcLength>0) { - if(cnv!=0) { - // use the provided converter - ucnv_resetToUnicode(cnv); - doCodepageCreate(src, srcLength, cnv, errorCode); + if(U_SUCCESS(errorCode)) { + // check arguments + if(src==NULL) { + // treat as an empty string, do nothing more + } else if(srcLength<-1) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; } else { - // use the default converter - cnv=u_getDefaultConverter(&errorCode); - doCodepageCreate(src, srcLength, cnv, errorCode); - u_releaseDefaultConverter(cnv); + // get input length + if(srcLength==-1) { + srcLength=(int32_t)uprv_strlen(src); + } + if(srcLength>0) { + if(cnv!=0) { + // use the provided converter + ucnv_resetToUnicode(cnv); + doCodepageCreate(src, srcLength, cnv, errorCode); + } else { + // use the default converter + cnv=u_getDefaultConverter(&errorCode); + doCodepageCreate(src, srcLength, cnv, errorCode); + u_releaseDefaultConverter(cnv); + } + } } - } - } - if(U_FAILURE(errorCode)) { - setToBogus(); + if(U_FAILURE(errorCode)) { + setToBogus(); + } } - } } //======================================== @@ -111,257 +111,260 @@ UnicodeString::extract(int32_t start, uint32_t dstSize, const char *codepage) const { - // if the arguments are illegal, then do nothing - if(/*dstSize < 0 || */(dstSize > 0 && target == 0)) { - return 0; - } - - // pin the indices to legal values - pinIndices(start, length); - - // create the converter - UConverter *converter; - UErrorCode status = U_ZERO_ERROR; - - // just write the NUL if the string length is 0 - if(length == 0) { - if(dstSize >= 0x80000000) { - // careful: dstSize is unsigned! (0xffffffff means "unlimited") - // make sure that the NUL-termination works (takes int32_t) - dstSize=0x7fffffff; - } - return u_terminateChars(target, dstSize, 0, &status); - } - - // if the codepage is the default, use our cache - // if it is an empty string, then use the "invariant character" conversion - if (codepage == 0) { - converter = u_getDefaultConverter(&status); - } else if (*codepage == 0) { - // use the "invariant characters" conversion - int32_t destLength; - // careful: dstSize is unsigned! (0xffffffff means "unlimited") - if(dstSize >= 0x80000000) { - destLength = length; - // make sure that the NUL-termination works (takes int32_t) - dstSize=0x7fffffff; - } else if(length <= (int32_t)dstSize) { - destLength = length; + // if the arguments are illegal, then do nothing + if(/*dstSize < 0 || */(dstSize > 0 && target == 0)) { + return 0; + } + + // pin the indices to legal values + pinIndices(start, length); + + // create the converter + UConverter *converter; + UErrorCode status = U_ZERO_ERROR; + + // just write the NUL if the string length is 0 + if(length == 0) { + if(dstSize >= 0x80000000) { + // careful: dstSize is unsigned! (0xffffffff means "unlimited") + // make sure that the NUL-termination works (takes int32_t) + dstSize=0x7fffffff; + } + return u_terminateChars(target, dstSize, 0, &status); + } + + // if the codepage is the default, use our cache + // if it is an empty string, then use the "invariant character" conversion + if (codepage == 0) { + converter = u_getDefaultConverter(&status); + } else if (*codepage == 0) { + // use the "invariant characters" conversion + int32_t destLength; + // careful: dstSize is unsigned! (0xffffffff means "unlimited") + if(dstSize >= 0x80000000) { + destLength = length; + // make sure that the NUL-termination works (takes int32_t) + dstSize=0x7fffffff; + } else if(length <= (int32_t)dstSize) { + destLength = length; + } else { + destLength = (int32_t)dstSize; + } + u_UCharsToChars(getArrayStart() + start, target, destLength); + return u_terminateChars(target, (int32_t)dstSize, length, &status); } else { - destLength = (int32_t)dstSize; + converter = ucnv_open(codepage, &status); } - u_UCharsToChars(getArrayStart() + start, target, destLength); - return u_terminateChars(target, (int32_t)dstSize, length, &status); - } else { - converter = ucnv_open(codepage, &status); - } - - length = doExtract(start, length, target, (int32_t)dstSize, converter, status); - - // close the converter - if (codepage == 0) { - u_releaseDefaultConverter(converter); - } else { - ucnv_close(converter); - } - - return length; + + length = doExtract(start, length, target, (int32_t)dstSize, converter, status); + + // close the converter + if (codepage == 0) { + u_releaseDefaultConverter(converter); + } else { + ucnv_close(converter); + } + + return length; } int32_t UnicodeString::extract(char *dest, int32_t destCapacity, UConverter *cnv, - UErrorCode &errorCode) const { - if(U_FAILURE(errorCode)) { - return 0; - } - - if(isBogus() || destCapacity<0 || (destCapacity>0 && dest==0)) { - errorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - // nothing to do? - if(fLength<=0) { - return u_terminateChars(dest, destCapacity, 0, &errorCode); - } - - // get the converter - UBool isDefaultConverter; - if(cnv==0) { - isDefaultConverter=TRUE; - cnv=u_getDefaultConverter(&errorCode); + UErrorCode &errorCode) const +{ if(U_FAILURE(errorCode)) { - return 0; + return 0; } - } else { - isDefaultConverter=FALSE; - ucnv_resetFromUnicode(cnv); - } - // convert - int32_t length=doExtract(0, fLength, dest, destCapacity, cnv, errorCode); + if(isBogus() || destCapacity<0 || (destCapacity>0 && dest==0)) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } - // release the converter - if(isDefaultConverter) { - u_releaseDefaultConverter(cnv); - } + // nothing to do? + if(fLength<=0) { + return u_terminateChars(dest, destCapacity, 0, &errorCode); + } - return length; + // get the converter + UBool isDefaultConverter; + if(cnv==0) { + isDefaultConverter=TRUE; + cnv=u_getDefaultConverter(&errorCode); + if(U_FAILURE(errorCode)) { + return 0; + } + } else { + isDefaultConverter=FALSE; + ucnv_resetFromUnicode(cnv); + } + + // convert + int32_t length=doExtract(0, fLength, dest, destCapacity, cnv, errorCode); + + // release the converter + if(isDefaultConverter) { + u_releaseDefaultConverter(cnv); + } + + return length; } int32_t UnicodeString::doExtract(int32_t start, int32_t length, char *dest, int32_t destCapacity, UConverter *cnv, - UErrorCode &errorCode) const { - if(U_FAILURE(errorCode)) { - if(destCapacity!=0) { - *dest=0; + UErrorCode &errorCode) const +{ + if(U_FAILURE(errorCode)) { + if(destCapacity!=0) { + *dest=0; + } + return 0; + } + + const UChar *src=fArray+start, *srcLimit=src+length; + char *originalDest=dest; + const char *destLimit; + + if(destCapacity==0) { + destLimit=dest=0; + } else if(destCapacity==-1) { + // Pin the limit to U_MAX_PTR if the "magic" destCapacity is used. + destLimit=(char*)U_MAX_PTR(dest); + // for NUL-termination, translate into highest int32_t + destCapacity=0x7fffffff; + } else { + destLimit=dest+destCapacity; + } + + // perform the conversion + ucnv_fromUnicode(cnv, &dest, destLimit, &src, srcLimit, 0, TRUE, &errorCode); + length=(int32_t)(dest-originalDest); + + // if an overflow occurs, then get the preflighting length + if(errorCode==U_BUFFER_OVERFLOW_ERROR) { + char buffer[1024]; + + destLimit=buffer+sizeof(buffer); + do { + dest=buffer; + errorCode=U_ZERO_ERROR; + ucnv_fromUnicode(cnv, &dest, destLimit, &src, srcLimit, 0, TRUE, &errorCode); + length+=(int32_t)(dest-buffer); + } while(errorCode==U_BUFFER_OVERFLOW_ERROR); } - return 0; - } - - const UChar *src=fArray+start, *srcLimit=src+length; - char *originalDest=dest; - const char *destLimit; - - if(destCapacity==0) { - destLimit=dest=0; - } else if(destCapacity==-1) { - // Pin the limit to U_MAX_PTR if the "magic" destCapacity is used. - destLimit=(char*)U_MAX_PTR(dest); - // for NUL-termination, translate into highest int32_t - destCapacity=0x7fffffff; - } else { - destLimit=dest+destCapacity; - } - - // perform the conversion - ucnv_fromUnicode(cnv, &dest, destLimit, &src, srcLimit, 0, TRUE, &errorCode); - length=(int32_t)(dest-originalDest); - - // if an overflow occurs, then get the preflighting length - if(errorCode==U_BUFFER_OVERFLOW_ERROR) { - char buffer[1024]; - - destLimit=buffer+sizeof(buffer); - do { - dest=buffer; - errorCode=U_ZERO_ERROR; - ucnv_fromUnicode(cnv, &dest, destLimit, &src, srcLimit, 0, TRUE, &errorCode); - length+=(int32_t)(dest-buffer); - } while(errorCode==U_BUFFER_OVERFLOW_ERROR); - } - - return u_terminateChars(originalDest, destCapacity, length, &errorCode); + + return u_terminateChars(originalDest, destCapacity, length, &errorCode); } void UnicodeString::doCodepageCreate(const char *codepageData, - int32_t dataLength, - const char *codepage) + int32_t dataLength, + const char *codepage) { - // if there's nothing to convert, do nothing - if(codepageData == 0 || dataLength == 0 || dataLength < -1) { - return; - } - if(dataLength == -1) { - dataLength = uprv_strlen(codepageData); - } - - UErrorCode status = U_ZERO_ERROR; - - // create the converter - // if the codepage is the default, use our cache - // if it is an empty string, then use the "invariant character" conversion - UConverter *converter = (codepage == 0 ? + // if there's nothing to convert, do nothing + if(codepageData == 0 || dataLength == 0 || dataLength < -1) { + return; + } + if(dataLength == -1) { + dataLength = (int32_t)uprv_strlen(codepageData); + } + + UErrorCode status = U_ZERO_ERROR; + + // create the converter + // if the codepage is the default, use our cache + // if it is an empty string, then use the "invariant character" conversion + UConverter *converter = (codepage == 0 ? u_getDefaultConverter(&status) : *codepage == 0 ? 0 : ucnv_open(codepage, &status)); - // if we failed, set the appropriate flags and return - if(U_FAILURE(status)) { - setToBogus(); - return; - } - - // perform the conversion - if(converter == 0) { - // use the "invariant characters" conversion - if(cloneArrayIfNeeded(dataLength, dataLength, FALSE)) { - u_charsToUChars(codepageData, getArrayStart(), dataLength); - fLength = dataLength; + // if we failed, set the appropriate flags and return + if(U_FAILURE(status)) { + setToBogus(); + return; + } + + // perform the conversion + if(converter == 0) { + // use the "invariant characters" conversion + if(cloneArrayIfNeeded(dataLength, dataLength, FALSE)) { + u_charsToUChars(codepageData, getArrayStart(), dataLength); + fLength = dataLength; + } else { + setToBogus(); + } + return; + } + + // convert using the real converter + doCodepageCreate(codepageData, dataLength, converter, status); + if(U_FAILURE(status)) { + setToBogus(); + } + + // close the converter + if(codepage == 0) { + u_releaseDefaultConverter(converter); } else { - setToBogus(); + ucnv_close(converter); } - return; - } - - // convert using the real converter - doCodepageCreate(codepageData, dataLength, converter, status); - if(U_FAILURE(status)) { - setToBogus(); - } - - // close the converter - if(codepage == 0) { - u_releaseDefaultConverter(converter); - } else { - ucnv_close(converter); - } } void UnicodeString::doCodepageCreate(const char *codepageData, int32_t dataLength, UConverter *converter, - UErrorCode &status) { - if(U_FAILURE(status)) { - return; - } - - // set up the conversion parameters - const char *mySource = codepageData; - const char *mySourceEnd = mySource + dataLength; - UChar *myTarget; - - // estimate the size needed: - // 1.25 UChar's per source byte should cover most cases - int32_t arraySize = dataLength + (dataLength >> 2); - - // we do not care about the current contents - UBool doCopyArray = FALSE; - for(;;) { - if(!cloneArrayIfNeeded(arraySize, arraySize, doCopyArray)) { - setToBogus(); - break; + UErrorCode &status) +{ + if(U_FAILURE(status)) { + return; } - // perform the conversion - myTarget = fArray + fLength; - ucnv_toUnicode(converter, &myTarget, fArray + fCapacity, - &mySource, mySourceEnd, 0, TRUE, &status); + // set up the conversion parameters + const char *mySource = codepageData; + const char *mySourceEnd = mySource + dataLength; + UChar *myTarget; + + // estimate the size needed: + // 1.25 UChar's per source byte should cover most cases + int32_t arraySize = dataLength + (dataLength >> 2); + + // we do not care about the current contents + UBool doCopyArray = FALSE; + for(;;) { + if(!cloneArrayIfNeeded(arraySize, arraySize, doCopyArray)) { + setToBogus(); + break; + } - // update the conversion parameters - fLength = (int32_t)(myTarget - fArray); + // perform the conversion + myTarget = fArray + fLength; + ucnv_toUnicode(converter, &myTarget, fArray + fCapacity, + &mySource, mySourceEnd, 0, TRUE, &status); - // allocate more space and copy data, if needed - if(status == U_BUFFER_OVERFLOW_ERROR) { - // reset the error code - status = U_ZERO_ERROR; + // update the conversion parameters + fLength = (int32_t)(myTarget - fArray); - // keep the previous conversion results - doCopyArray = TRUE; + // allocate more space and copy data, if needed + if(status == U_BUFFER_OVERFLOW_ERROR) { + // reset the error code + status = U_ZERO_ERROR; - // estimate the new size needed, larger than before - // try 2 UChar's per remaining source byte - arraySize = (int32_t)(fLength + 2 * (mySourceEnd - mySource)); - } else { - break; + // keep the previous conversion results + doCopyArray = TRUE; + + // estimate the new size needed, larger than before + // try 2 UChar's per remaining source byte + arraySize = (int32_t)(fLength + 2 * (mySourceEnd - mySource)); + } else { + break; + } } - } } U_NAMESPACE_END diff --git a/icuSources/common/unorm.cpp b/icuSources/common/unorm.cpp index fc9cfb0b..b89c3e1f 100644 --- a/icuSources/common/unorm.cpp +++ b/icuSources/common/unorm.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (c) 1996-2004, International Business Machines +* Copyright (c) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * File unorm.cpp @@ -117,6 +117,7 @@ enum { _NORM_OPTIONS_COMPOSE_CONTIGUOUS=0x2000 }; +U_CDECL_BEGIN static inline UBool isHangulWithoutJamoT(UChar c) { c-=HANGUL_BASE; @@ -147,10 +148,10 @@ isNorm32HangulOrJamo(uint32_t norm32) { * Given isNorm32HangulOrJamo(), * is this a Hangul syllable or a Jamo? */ -static inline UBool +/*static inline UBool isHangulJamoNorm32HangulOrJamoL(uint32_t norm32) { return norm32<_NORM_MIN_JAMO_V; -} +}*/ /* * Given norm32 for Jamo V or T, @@ -163,6 +164,37 @@ isJamoVTNorm32JamoV(uint32_t norm32) { /* load unorm.dat ----------------------------------------------------------- */ +/* normTrie: 32-bit trie result may contain a special extraData index with the folding offset */ +static int32_t U_CALLCONV +getFoldingNormOffset(uint32_t norm32) { + if(isNorm32LeadSurrogate(norm32)) { + return + UTRIE_BMP_INDEX_LENGTH+ + (((int32_t)norm32>>(_NORM_EXTRA_SHIFT-UTRIE_SURROGATE_BLOCK_BITS))& + (0x3ff<>(_NORM_EXTRA_SHIFT-UTRIE_SURROGATE_BLOCK_BITS))& - (0x3ff<add(sa->set, start); return TRUE; } U_CDECL_END +#if !UNORM_HARDCODE_DATA + static int8_t loadNormData(UErrorCode &errorCode) { /* load Unicode normalization data from file */ @@ -290,6 +309,7 @@ loadNormData(UErrorCode &errorCode) { if(haveNormData==0) { UTrie _normTrie={ 0,0,0,0,0,0,0 }, _fcdTrie={ 0,0,0,0,0,0,0 }, _auxTrie={ 0,0,0,0,0,0,0 }; UDataMemory *data; + const int32_t *p=NULL; const uint8_t *pb; @@ -310,11 +330,12 @@ loadNormData(UErrorCode &errorCode) { _normTrie.getFoldingOffset=getFoldingNormOffset; pb+=p[_NORM_INDEX_TRIE_SIZE]+p[_NORM_INDEX_UCHAR_COUNT]*2+p[_NORM_INDEX_COMBINE_DATA_COUNT]*2; - utrie_unserialize(&_fcdTrie, pb, p[_NORM_INDEX_FCD_TRIE_SIZE], &errorCode); - _fcdTrie.getFoldingOffset=getFoldingFCDOffset; - if(p[_NORM_INDEX_FCD_TRIE_SIZE]!=0) { - pb+=p[_NORM_INDEX_FCD_TRIE_SIZE]; + utrie_unserialize(&_fcdTrie, pb, p[_NORM_INDEX_FCD_TRIE_SIZE], &errorCode); + } + pb+=p[_NORM_INDEX_FCD_TRIE_SIZE]; + + if(p[_NORM_INDEX_AUX_TRIE_SIZE]!=0) { utrie_unserialize(&_auxTrie, pb, p[_NORM_INDEX_AUX_TRIE_SIZE], &errorCode); _auxTrie.getFoldingOffset=getFoldingAuxOffset; } @@ -362,14 +383,24 @@ loadNormData(UErrorCode &errorCode) { return haveNormData; } +#endif + static inline UBool _haveData(UErrorCode &errorCode) { - if(haveNormData!=0) { +#if UNORM_HARDCODE_DATA + return U_SUCCESS(errorCode); +#else + if(U_FAILURE(errorCode)) { + return FALSE; + } else if(haveNormData>0) { + return TRUE; + } else if(haveNormData<0) { errorCode=dataErrorCode; - return (UBool)(haveNormData>0); - } else { + return FALSE; + } else /* haveNormData==0 */ { return (UBool)(loadNormData(errorCode)>0); } +#endif } U_CAPI UBool U_EXPORT2 @@ -436,6 +467,38 @@ _getExtraData(uint32_t norm32) { return extraData+(norm32>>_NORM_EXTRA_SHIFT); } +#if 0 +/* + * It is possible to get the FCD data from the main trie if unorm.icu + * was built without the FCD trie, although it is slower. + * This is not implemented because it is hard to test, and because it seems + * unusual to want to use FCD and not build the data file for it. + * + * Untested sample code: + */ +static inline uint16_t +_getFCD16FromNormData(UChar32 c) { + uint32_t norm32, fcd; + + norm32=_getNorm32(c); + if((norm32&_NORM_QC_NFD) && isNorm32Regular(norm32)) { + /* get the lead/trail cc from the decomposition data */ + const uint16_t *nfd=_getExtraData(norm32); + if(*nfd&_NORM_DECOMP_FLAG_LENGTH_HAS_CC) { + fcd=nfd[1]; + } + } else { + fcd=norm32&_NORM_CC_MASK; + if(fcd!=0) { + /* use the code point cc value for both lead and trail cc's */ + fcd|=fcd>>_NORM_CC_SHIFT; /* assume that the cc is in bits 15..8 */ + } + } + + return (uint16_t)fcd; +} +#endif + /* normalization exclusion sets --------------------------------------------- */ /* @@ -464,6 +527,7 @@ internalGetNXHangul(UErrorCode &errorCode) { if(nxCache[UNORM_NX_HANGUL]==NULL) { nxCache[UNORM_NX_HANGUL]=set; set=NULL; + ucln_common_registerCleanup(UCLN_COMMON_UNORM, unorm_cleanup); } umtx_unlock(NULL); @@ -520,6 +584,7 @@ internalGetSerializedNX(int32_t options, int32_t nxIndex, UErrorCode &errorCode) if(nxCache[options]==NULL) { nxCache[options]=set; set=NULL; + ucln_common_registerCleanup(UCLN_COMMON_UNORM, unorm_cleanup); } umtx_unlock(NULL); @@ -610,6 +675,7 @@ internalGetNX(int32_t options, UErrorCode &errorCode) { if(nxCache[options]==NULL) { nxCache[options]=set; set=NULL; + ucln_common_registerCleanup(UCLN_COMMON_UNORM, unorm_cleanup); } umtx_unlock(NULL); @@ -882,21 +948,29 @@ _isTrueStarter(uint32_t norm32, uint32_t ccOrQCMask, uint32_t decompQCMask) { /* uchar.h */ U_CAPI uint8_t U_EXPORT2 u_getCombiningClass(UChar32 c) { +#if !UNORM_HARDCODE_DATA UErrorCode errorCode=U_ZERO_ERROR; if(_haveData(errorCode)) { +#endif uint32_t norm32; UTRIE_GET32(&normTrie, c, norm32); return (uint8_t)(norm32>>_NORM_CC_SHIFT); +#if !UNORM_HARDCODE_DATA } else { return 0; } +#endif } U_CAPI UBool U_EXPORT2 unorm_internalIsFullCompositionExclusion(UChar32 c) { +#if UNORM_HARDCODE_DATA + if(auxTrie.index!=NULL) { +#else UErrorCode errorCode=U_ZERO_ERROR; - if(_haveData(errorCode) && formatVersion_2_1) { + if(_haveData(errorCode) && auxTrie.index!=NULL) { +#endif uint16_t aux; UTRIE_GET16(&auxTrie, c, aux); @@ -908,8 +982,12 @@ unorm_internalIsFullCompositionExclusion(UChar32 c) { U_CAPI UBool U_EXPORT2 unorm_isCanonSafeStart(UChar32 c) { +#if UNORM_HARDCODE_DATA + if(auxTrie.index!=NULL) { +#else UErrorCode errorCode=U_ZERO_ERROR; - if(_haveData(errorCode) && formatVersion_2_1) { + if(_haveData(errorCode) && auxTrie.index!=NULL) { +#endif uint16_t aux; UTRIE_GET16(&auxTrie, c, aux); @@ -929,9 +1007,14 @@ unorm_getUnicodeVersion(UVersionInfo *versionInfo, UErrorCode *pErrorCode){ U_CAPI UBool U_EXPORT2 unorm_getCanonStartSet(UChar32 c, USerializedSet *fillSet) { +#if !UNORM_HARDCODE_DATA UErrorCode errorCode=U_ZERO_ERROR; +#endif if( fillSet!=NULL && (uint32_t)c<=0x10ffff && - _haveData(errorCode) && canonStartSets!=NULL +#if !UNORM_HARDCODE_DATA + _haveData(errorCode) && +#endif + canonStartSets!=NULL ) { const uint16_t *table; int32_t i, start, limit; @@ -1031,7 +1114,7 @@ u_getFC_NFKC_Closure(UChar32 c, UChar *dest, int32_t destCapacity, UErrorCode *p *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } - if(!_haveData(*pErrorCode) || !formatVersion_2_1) { + if(!_haveData(*pErrorCode) || auxTrie.index==NULL) { return 0; } @@ -1061,14 +1144,15 @@ u_getFC_NFKC_Closure(UChar32 c, UChar *dest, int32_t destCapacity, UErrorCode *p /* Is c an NF-skippable code point? See unormimp.h. */ U_CAPI UBool U_EXPORT2 unorm_isNFSkippable(UChar32 c, UNormalizationMode mode) { - UErrorCode errorCode; uint32_t norm32, mask; uint16_t aux, fcd; - errorCode=U_ZERO_ERROR; +#if !UNORM_HARDCODE_DATA + UErrorCode errorCode=U_ZERO_ERROR; if(!_haveData(errorCode)) { return FALSE; } +#endif /* handle trivial cases; set the comparison mask for the normal ones */ switch(mode) { @@ -1089,8 +1173,12 @@ unorm_isNFSkippable(UChar32 c, UNormalizationMode mode) { break; case UNORM_FCD: /* FCD: skippable if lead cc==0 and trail cc<=1 */ - UTRIE_GET16(&fcdTrie, c, fcd); - return fcd<=1; + if(fcdTrie.index!=NULL) { + UTRIE_GET16(&fcdTrie, c, fcd); + return fcd<=1; + } else { + return FALSE; + } default: return FALSE; } @@ -1118,7 +1206,7 @@ unorm_isNFSkippable(UChar32 c, UNormalizationMode mode) { /* if(mode<=UNORM_NFKC) { -- enable when implementing FCC */ /* NF*C, test (f) flag */ - if(!formatVersion_2_2) { + if(!formatVersion_2_2 || auxTrie.index==NULL) { return FALSE; /* no (f) data, say not skippable to be safe */ } @@ -1129,17 +1217,19 @@ unorm_isNFSkippable(UChar32 c, UNormalizationMode mode) { } U_CAPI void U_EXPORT2 -unorm_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode) { +unorm_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { UChar c; - if(U_FAILURE(*pErrorCode) || !_haveData(*pErrorCode)) { + if(!_haveData(*pErrorCode)) { return; } /* add the start code point of each same-value range of each trie */ utrie_enum(&normTrie, NULL, _enumPropertyStartsRange, sa); - utrie_enum(&fcdTrie, NULL, _enumPropertyStartsRange, sa); - if(formatVersion_2_1) { + if(fcdTrie.index!=NULL) { + utrie_enum(&fcdTrie, NULL, _enumPropertyStartsRange, sa); + } + if(auxTrie.index!=NULL) { utrie_enum(&auxTrie, NULL, _enumPropertyStartsRange, sa); } @@ -1157,13 +1247,14 @@ unorm_getQuickCheck(UChar32 c, UNormalizationMode mode) { 0, 0, _NORM_QC_NFD, _NORM_QC_NFKD, _NORM_QC_NFC, _NORM_QC_NFKC }; - UErrorCode errorCode; uint32_t norm32; - errorCode=U_ZERO_ERROR; +#if !UNORM_HARDCODE_DATA + UErrorCode errorCode=U_ZERO_ERROR; if(!_haveData(errorCode)) { return UNORM_YES; } +#endif UTRIE_GET32(&normTrie, c, norm32); norm32&=qcMask[mode]; @@ -1183,7 +1274,12 @@ unorm_getFCD16FromCodePoint(UChar32 c) { uint16_t fcd; errorCode=U_ZERO_ERROR; - if(!_haveData(errorCode)) { + if( +#if !UNORM_HARDCODE_DATA + !_haveData(errorCode) || +#endif + fcdTrie.index==NULL + ) { return 0; } @@ -1411,9 +1507,13 @@ _findNextStarter(const UChar *src, const UChar *limit, U_CAPI int32_t U_EXPORT2 unorm_getDecomposition(UChar32 c, UBool compat, UChar *dest, int32_t destCapacity) { +#if !UNORM_HARDCODE_DATA UErrorCode errorCode=U_ZERO_ERROR; +#endif if( (uint32_t)c<=0x10ffff && +#if !UNORM_HARDCODE_DATA _haveData(errorCode) && +#endif ((dest!=NULL && destCapacity>0) || destCapacity==0) ) { uint32_t norm32, qcMask; @@ -1522,6 +1622,8 @@ _decompose(UChar *dest, int32_t destCapacity, /* avoid compiler warnings */ norm32=0; c=0; + cc=0; + trailCC=0; if(srcLength>=0) { /* string with length */ @@ -2153,7 +2255,7 @@ _composePart(UChar *stackBuffer, UChar *&buffer, int32_t &bufferCapacity, int32_ /* decompose [prevStarter..src[ */ length=_decompose(buffer, bufferCapacity, - prevStarter, src-prevStarter, + prevStarter, (int32_t)(src-prevStarter), compat, nx, trailCC); if(length>bufferCapacity) { @@ -2162,7 +2264,7 @@ _composePart(UChar *stackBuffer, UChar *&buffer, int32_t &bufferCapacity, int32_ return NULL; } length=_decompose(buffer, bufferCapacity, - prevStarter, src-prevStarter, + prevStarter, (int32_t)(src-prevStarter), compat, nx, trailCC); } @@ -2174,7 +2276,7 @@ _composePart(UChar *stackBuffer, UChar *&buffer, int32_t &bufferCapacity, int32_ } /* return with a pointer to the recomposition and its length */ - length=recomposeLimit-buffer; + length=(int32_t)(recomposeLimit-buffer); return buffer; } @@ -3006,6 +3108,10 @@ _quickCheck(const UChar *src, options=_NORM_OPTIONS_COMPAT; break; case UNORM_FCD: + if(fcdTrie.index==NULL) { + *pErrorCode=U_UNSUPPORTED_ERROR; + return UNORM_MAYBE; + } return unorm_checkFCD(src, srcLength, nx) ? UNORM_YES : UNORM_NO; default: *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; @@ -3218,6 +3324,10 @@ unorm_internalNormalizeWithNX(UChar *dest, int32_t destCapacity, options|_NORM_OPTIONS_COMPAT, nx, pErrorCode); break; case UNORM_FCD: + if(fcdTrie.index==NULL) { + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } return unorm_makeFCD(dest, destCapacity, src, srcLength, nx, @@ -3483,8 +3593,13 @@ unorm_previous(UCharIterator *src, } switch(mode) { - case UNORM_NFD: case UNORM_FCD: + if(fcdTrie.index==NULL) { + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } + /* fall through to NFD */ + case UNORM_NFD: isPreviousBoundary=_isPrevNFDSafe; minC=_NORM_MIN_WITH_LEAD_CC; mask=_NORM_CC_MASK|_NORM_QC_NFD; @@ -3731,8 +3846,13 @@ unorm_next(UCharIterator *src, } switch(mode) { - case UNORM_NFD: case UNORM_FCD: + if(fcdTrie.index==NULL) { + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } + /* fall through to NFD */ + case UNORM_NFD: isNextBoundary=_isNextNFDSafe; minC=_NORM_MIN_WITH_LEAD_CC; mask=_NORM_CC_MASK|_NORM_QC_NFD; @@ -3966,127 +4086,4 @@ unorm_concatenate(const UChar *left, int32_t leftLength, return u_terminateUChars(dest, destCapacity, destLength, pErrorCode); } -/* data swapping ------------------------------------------------------------ */ - -U_CAPI int32_t U_EXPORT2 -unorm_swap(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const UDataInfo *pInfo; - int32_t headerSize; - - const uint8_t *inBytes; - uint8_t *outBytes; - - const int32_t *inIndexes; - int32_t indexes[32]; - - int32_t i, offset, count, size; - - /* udata_swapDataHeader checks the arguments */ - headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - /* check data format and format version */ - pInfo=(const UDataInfo *)((const char *)inData+4); - if(!( - pInfo->dataFormat[0]==0x4e && /* dataFormat="Norm" */ - pInfo->dataFormat[1]==0x6f && - pInfo->dataFormat[2]==0x72 && - pInfo->dataFormat[3]==0x6d && - pInfo->formatVersion[0]==2 - )) { - udata_printError(ds, "unorm_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as unorm.icu\n", - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3], - pInfo->formatVersion[0]); - *pErrorCode=U_UNSUPPORTED_ERROR; - return 0; - } - - inBytes=(const uint8_t *)inData+headerSize; - outBytes=(uint8_t *)outData+headerSize; - - inIndexes=(const int32_t *)inBytes; - - if(length>=0) { - length-=headerSize; - if(length<32*4) { - udata_printError(ds, "unorm_swap(): too few bytes (%d after header) for unorm.icu\n", - length); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } - } - - /* read the first 32 indexes (ICU 2.8/format version 2.2: _NORM_INDEX_TOP==32, might grow) */ - for(i=0; i<32; ++i) { - indexes[i]=udata_readInt32(ds, inIndexes[i]); - } - - /* calculate the total length of the data */ - size= - 32*4+ /* size of indexes[] */ - indexes[_NORM_INDEX_TRIE_SIZE]+ - indexes[_NORM_INDEX_UCHAR_COUNT]*2+ - indexes[_NORM_INDEX_COMBINE_DATA_COUNT]*2+ - indexes[_NORM_INDEX_FCD_TRIE_SIZE]+ - indexes[_NORM_INDEX_AUX_TRIE_SIZE]+ - indexes[_NORM_INDEX_CANON_SET_COUNT]*2; - - if(length>=0) { - if(lengthswapArray32(ds, inBytes, count, outBytes, pErrorCode); - offset+=count; - - /* swap the main UTrie */ - count=indexes[_NORM_INDEX_TRIE_SIZE]; - utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; - - /* swap the uint16_t extraData[] and the uint16_t combiningTable[] */ - count=(indexes[_NORM_INDEX_UCHAR_COUNT]+indexes[_NORM_INDEX_COMBINE_DATA_COUNT])*2; - ds->swapArray16(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; - - /* swap the FCD UTrie */ - count=indexes[_NORM_INDEX_FCD_TRIE_SIZE]; - if(count!=0) { - utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; - } - - /* swap the aux UTrie */ - count=indexes[_NORM_INDEX_AUX_TRIE_SIZE]; - if(count!=0) { - utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; - } - - /* swap the uint16_t combiningTable[] */ - count=indexes[_NORM_INDEX_CANON_SET_COUNT]*2; - ds->swapArray16(ds, inBytes+offset, count, outBytes+offset, pErrorCode); - offset+=count; - } - - return headerSize+size; -} - #endif /* #if !UCONFIG_NO_NORMALIZATION */ diff --git a/icuSources/common/unorm_props_data.c b/icuSources/common/unorm_props_data.c new file mode 100644 index 00000000..f6945378 --- /dev/null +++ b/icuSources/common/unorm_props_data.c @@ -0,0 +1,3262 @@ +/* + * Copyright (C) 1999-2007, International Business Machines + * Corporation and others. All Rights Reserved. + * + * file name: unorm_props_data.c + * + * machine-generated on: 2006-06-13 + * machine-generated on: 2007-02-08 U_DARWIN + */ + +static const UVersionInfo formatVersion={ 2,3,5,2 }; + +static const UVersionInfo dataVersion={ 5,0,0,0 }; + +static const int32_t indexes[_NORM_INDEX_TOP]={ +#ifndef U_DARWIN +0xa1a0,0x3e4b,0x7a7,0x16f,0,0x36,0x300,0xa0,0xc0,0xa0,0x2b00,0x2cf8,0x1e2c,0,0,0, +#else /* U_DARWIN */ +0xa230,0x3e4b,0x7a7,0x16f,0,0x36,0x300,0xa0,0xc0,0xa0,0x2b48,0x2d40,0x1e2c,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +}; + +static const uint16_t normTrie_index[2208]={ +0,0x8b4,0x7ff,0x807,0,0x54d,0x336,0x33e,0x346,0x34e,0x356,0x35e,0,0x366,0x36d,0x375, +0x37d,0x385,0,0,0x80e,0x555,0x55c,0x564,0x4ff,0x507,0x175,8,0x17d,0x38d,0x10,0x16, +0x395,0x39d,0x3a5,0x3ad,0x816,0,0x3b5,0x3bd,0,0,0,0,0x56b,0x81e,0x826,0, +0x82a,0x3c5,0x50f,0x573,0,0,0x3cd,0x832,0x836,0x83b,0x843,0,0,0,0,0x849, +0,0,0,0,0,0,0,0,0,0x3d5,0x185,0,0,0x517,0x18d,0, +0,0x195,0x19d,0,0,0x84e,0x856,0,0,0x51f,0x1a5,0,0x3dd,0x527,0x3e4,0, +0,0,0x3eb,0,0,0x85a,0x3f3,0,0,0x52f,0x3fa,0,0,0,0x400,0, +0,0x57a,0x862,0,0,0x581,0x588,0,0x590,0x865,0x1ad,0x1b5,0x1bd,0x1c5,0x86c,0, +#ifndef U_DARWIN +0,0x408,0,0,0,0,0,0x597,0x8dd,0,0,0x537,0,0x53d,0x545,0, +#else /* U_DARWIN */ +0,0x408,0,0,0,0,0,0x597,0x8e6,0,0,0x537,0,0x53d,0x545,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0x86e,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x876,0x876,0,0,0,0,0x87c,0, +0,0,0,0,0,0x884,0,0,0,0x887,0,0,0,0,0,0, +0x88e,0,0,0,0,0,0,0,0x40f,0x414,0x41c,0x895,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x1d,0x25,0x59f,0x5a6,0x5ae,0x89d,0x8a0, +0x424,0x42c,0x434,0x43c,0x444,0x44c,0x454,0x45c,0x464,0x46c,0x474,0x1cd,0x47c,0x1d5,0x1dd,0x1e5, +0x1ed,0x5b6,0x5be,0x5c6,0x5ce,0x2d,0x8a8,0x8b0,0x35,0x3d,0x45,0x5d6,0x484,0x48b,0x490,0, +0x498,0x4a0,0x4a8,0x4b0,0x4b8,0x4c0,0,0x4c8,0,0x1f3,0,0,0,0,0,0, +0,0,0,0x5de,0x5e6,0x5ee,0x5f6,0x5fe,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x603,0,0,0x607,0,0,0x1f6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x60d,0,0,0,0, +0,0,0,0,0x611,0,0,0x619,0x621,0x629,0x631,0x639,0x641,0x649,0x651,0, +0x659,0x65f,0x4cf,0x4d7,0x4df,0x4e7,0x4ef,0x4f7,0,0x666,0x66e,0x676,0x67e,0,0,0, +0x686,0x68e,0x4d,0x696,0x69e,0x6a6,0x55,0x6ae,0x6b6,0x6be,0x6c6,0x5d,0x65,0x6d,0x75,0x6ce, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x8bc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, +0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8ec,0,0, +0x8f4,0x8f7,0,0x8fd,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee, +0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8ee,0x8f5,0,0, +0x8fd,0x900,0,0x906,0,0,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0x1fe,0x206,0x20e,0x216,0x21e,0x226,0x22e,0x236, +#else /* U_DARWIN */ +0,0,0,0,0x8c2,0,0,0,0x1fe,0x206,0x20e,0x216,0x21e,0x226,0x22e,0x236, +#endif /* U_DARWIN */ +0x23e,0x246,0x24e,0x256,0x25e,0x266,0x26e,0,0x276,0x27e,0x286,0x6d6,0x6de,0x6e6,0x6eb,0x6f3, +0x6fb,0x703,0x70b,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743,0x74b,0x753,0x75b,0x763,0x76b,0x76f, +0x777,0x77f,0x787,0x78f,0x797,0x79f,0x7a7,0x7af,0x7b7,0x7bf,0x7c7,0x7cf,0x7d7,0x7df,0x7e7,0x7ef, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0x8c1,0x8c5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x28e,0x296,0x8cd,0x29e,0x2a6,0, +0,0,0x8d5,0,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0x8ca,0x8ce,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x28e,0x296,0x8d6,0x29e,0x2a6,0, +0,0,0x8de,0,0,0,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0x7d,0x85,0x8d,0x95,0x9d,0xa5,0xad,0xb5,0xbd,0xc5,0xcd,0xd5,0xdd,0xe5,0xed,0xf5, +0xfd,0x105,0x10d,0x115,0x11d,0x125,0x12d,0x135,0x13d,0x145,0x14d,0x155,0x15d,0x165,0x16d,0x7f7, +0x2ae,0x2b6,0x2be,0x2c6,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31e,0x326, +0x32e,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +}; + +#ifndef U_DARWIN +static const uint32_t normTrie_data32[9236]={ +#else /* U_DARWIN */ +static const uint32_t normTrie_data32[9272]={ +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xea00,0xea00,0xe900,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600, +0,0,0,0,0x612000f,0,0,0,0,0,0x13b000a,0,0,0,0x614000f,0, +0,0x3dee0040,0,0,0,0x3d9f0040,0,0,0,0x3da10040,0x14a5004c,0x14aa004c,0x14ae000c,0x14b2000c,0x14b7004c,0, +0x2123000a,0x2125000a,0x140004a,0x142000e,0x149000e,0x2127000a,0x2129000a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x212b000a,0x212d000a,0x150000a,0,0x212f000a,0x2131000a,0,0, +0,0x152000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x154000a,0x156000a,0x158000a,0,0x15a000a,0x15c000a,0x15e000a,0x160000a,0x162000a,0x164000a,0x166000a,0x168000a,0x16a000a,0x16c000a,0x16e000a,0, +0x170000a,0x172000a,0x174000a,0x176000a,0x178000a,0x17a000a,0x17c000a,0x215c000a,0x215e000a,0x2160000a,0x2162000a,0x2164000a,0x2166000a,0x2168000a,0x216a000a,0x216c000a, +0x216e000a,0x2170000a,0,0x2172000a,0x2174000a,0x2176000a,0x2178000a,0x217a000a,0x217c000a,0x217e000a,0x2180000a,0x2182000a,0x2184000a,0x2186000a,0x2188000a,0x218a000a, +0x218c000a,0x218e000a,0x2190000a,0x2192000a,0,0,0,0,0,0,0,0,0x17e000a,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x2297000a,0x229b000a,0x181000a,0x183000a,0,0x229f000a,0x22a3000a,0x186000a,0,0x188000a,0x22a7000a,0x18b000a, +0x18d000a,0x18f000a,0x22a9000a,0x22ab000a,0x191000a,0x193000a,0x195000a,0x22ad000a,0,0x197000a,0x199000a,0,0,0x19c000a,0x19e000a,0x1a0000a, +0x1a2000a,0x1a4000a,0,0,0x1a6000a,0x1a9000a,0x1ad000a,0,0x1b0000a,0,0x6f5000f,0,0x1b2000a,0,0x6f7000f,0x6f9000f, +0x1b4000a,0x1b6000a,0,0x22af000a,0x1b8000a,0x1ba000a,0,0x1bc000a,0x22b1000a,0x22b3000a,0x22b5000a,0x22b7000a,0x22b9000a,0x22bb000a,0,0x1be000a, +0x22bd000a,0x22bf000a,0x1c2000a,0x1c4000a,0x22c1000a,0,0,0,0,0x1c6000a,0x22c3000a,0x22c5000a,0x22c7000a,0x22c9000a,0,0, +0,0,0,0,0,0,0,0x22cb000a,0x22cf000a,0x22d3000a,0x22d7000a,0x22db000a,0x22df000a,0x22e3000a,0x22e7000a,0x22eb000a, +0x22ef000a,0x22f3000a,0x22f7000a,0x22fb000a,0x28d3000a,0x28d7000a,0x28db000a,0x28df000a,0,0,0,0,0,0,0,0, +0,0,0,0,0x1c8000a,0x28e3000a,0x28e6000a,0x28e9000a,0x28ec000a,0x28ef000a,0x28f2000a,0x28f5000a,0x28f8000a,0x28fb000a,0x28fe000a,0x2901000a, +0x2904000a,0x2907000a,0x290a000a,0x290d000a,0x29f3000a,0x29f6000a,0x29f9000a,0x29fc000a,0x29ff000a,0x2a02000a,0x2a05000a,0x2a08000a,0x2a0b000a,0x2a0e000a,0x2a12000a,0x2a16000a, +0x1cc000a,0x2a1a000a,0x1cf000a,0x1d2000a,0x2a1e000a,0x2a20000a,0x2a22000a,0x2a24000a,0x2a26000a,0x2a28000a,0x2a2a000a,0x2a2c000a,0x2a2e000a,0x2a30000a,0x2a32000a,0x2a34000a, +0x2a36000a,0x2a38000a,0x2a3a000a,0x2a3c000a,0x2c52000a,0x2c55000a,0x2c58000a,0x2c5c000a,0x2c60000a,0x2c64000a,0x2c68000a,0x2c6c000a,0x2c70000a,0x2c74000a,0x2c78000a,0x2c7c000a, +0x2c80000a,0x2c84000a,0x2c88000a,0x2c8c000a,0x2c90000a,0x1d6000a,0x2c94000a,0x1da000a,0x2c97000a,0x1dd000a,0x2c9b000a,0x2c9e000a,0x2ca1000a,0x2ca5000a,0x1e0000a,0x2ca9000a, +0x2cac000a,0x2caf000a,0x2cb2000a,0x2cb5000a,0x1e3000a,0x1e6000a,0x1e9000a,0x1ec000a,0x1ef000a,0x1f2000a,0x1f5000a,0x1f8000a,0x2cba000a,0x2cbe000a,0x1fb000a,0x1fe000a, +0x201000a,0x2cc3000a,0x2cc6000a,0x2cc9000a,0x204000a,0x207000a,0x20b000a,0x20f000a,0x213000a,0x2ccc000a,0x2ccf000a,0x2cd2000a,0x2cd5000a,0x2cd8000a,0x2cdb000a,0x2cde000a, +0x2ce1000a,0x2ce4000a,0x2ce7000a,0x2cea000a,0x2cee000a,0x2cf2000a,0x2cf5000a,0x2cf9000a,0x2cfd000a,0x2d01000a,0x2d04000a,0x2d08000a,0x2d0c000a,0x217000a,0x21a000a,0x21e000a, +0x222000a,0x2d11000a,0x2d15000a,0x2d1b000a,0x2d22000a,0x2d25000a,0x2d28000a,0x2d2b000a,0x226000a,0x229000a,0x22c000a,0x22f000a,0x232000a,0x235000a,0x238000a,0x23b000a, +0x23e000a,0x241000a,0x244000a,0x247000a,0x24a000a,0x24d000a,0x2d2e000a,0x250000a,0x2d33000a,0x2d36000a,0x253000a,0x258000a,0x25c000a,0x25f000a,0x2d39000a,0x262000a, +0x2d3c000a,0x265000a,0x268000a,0x2d3f000a,0x2d42000a,0x2d45000a,0x2d48000a,0x2d4c000a,0x2d4f000a,0x2d52000a,0x2d56000a,0x26b000a,0x2d5a000a,0x26e000a,0x272000a,0x2d5f000a, +0x275000a,0x278000a,0x27b000a,0x27f000a,0x283000a,0x285000a,0x287000a,0x289000a,0x28b000a,0x28d000a,0x28f000a,0x291000a,0x293000a,0x295000a,0x297000a,0x299000a, +0x29b000a,0x29d000a,0x29f000a,0x2a1000a,0x2a3000a,0x2a5000a,0x2a7000a,0x2a9000a,0x2ab000a,0x2ad000a,0x2af000a,0x2b1000a,0x2b3000a,0x2b5000a,0x3921000a,0x3923000a, +0x3925000a,0x3927000a,0x3929000a,0x392b000a,0x392d000a,0x392f000a,0x3931000a,0x3933000a,0x3935000a,0x3937000a,0x3939000a,0x393b000a,0x393d000a,0x393f000a,0x3941000a,0x3943000a, +0x3945000a,0x3947000a,0x3949000a,0x394b000a,0x394d000a,0x394f000a,0x3951000a,0x3953000a,0x2b7000a,0x2b9000a,0x2bb000a,0x2bd000a,0x2bf000a,0x2c1000a,0x2c3000a,0x2c5000a, +0x2c7000a,0x2c9000a,0x2cb000a,0x2cd000a,0x2cf000a,0x2d1000a,0x2d3000a,0x2d5000a,0x2d7000a,0x2d9000a,0x2db000a,0x2dd000a,0x2df000a,0x2e1000a,0x2e3000a,0x2e5000a, +0x2e7000a,0x2e9000a,0x3955000a,0x3957000a,0x3959000a,0x395b000a,0x395d000a,0x395f000a,0x3961000a,0,0x3963000a,0x3965000a,0x3967000a,0x3969000a,0x396b000a,0x396d000a, +0x396f000a,0x3971000a,0x3973000a,0x3975000a,0x3977000a,0x3979000a,0x397b000a,0x397d000a,0x397f000a,0x3981000a,0x3983000a,0x3985000a,0x2eb000a,0x2ed000a,0x2ef000a,0x2f1000a, +0x2f3000a,0x2f5000a,0x2f7000a,0x2f9000a,0x2fb000a,0x2fd000a,0x2ff000a,0x301000a,0x303000a,0x305000a,0x307000a,0x309000a,0x30b000a,0x30d000a,0x30f000a,0x311000a, +0x313000a,0x315000a,0x317000a,0x319000a,0x31b000a,0x31d000a,0x3987000a,0x3989000a,0x398b000a,0x398d000a,0x398f000a,0x3991000a,0x3993000a,0x3995000a,0x3997000a,0x3999000a, +0x399b000a,0x399d000a,0x399f000a,0x39a1000a,0x39a3000a,0x39a5000a,0x39a7000a,0x39a9000a,0x39ab000a,0x39ad000a,0x39af000a,0x39b1000a,0x39b3000a,0x39b5000a,0x39b7000a,0x39b9000a, +0x31f000a,0,0x321000a,0x323000a,0,0,0x325000a,0,0,0x327000a,0x329000a,0,0,0x32b000a,0x32d000a,0x32f000a, +0x331000a,0,0x333000a,0x335000a,0x337000a,0x339000a,0x33b000a,0x33d000a,0x33f000a,0x341000a,0x39bb000a,0x39bd000a,0x39bf000a,0x39c1000a,0,0x39c3000a, +0,0x39c5000a,0x39c7000a,0x39c9000a,0x39cb000a,0x39cd000a,0x39cf000a,0x39d1000a,0,0x39d3000a,0x39d5000a,0x39d7000a,0x39d9000a,0x39db000a,0x39dd000a,0x39df000a, +0x39e1000a,0x39e3000a,0x39e5000a,0x39e7000a,0x343000a,0x345000a,0x347000a,0x349000a,0x34b000a,0x34d000a,0x34f000a,0x351000a,0x353000a,0x355000a,0x357000a,0x359000a, +0x35b000a,0x35d000a,0x35f000a,0x361000a,0x363000a,0x365000a,0x367000a,0x369000a,0x36b000a,0x36d000a,0x36f000a,0x371000a,0x373000a,0x375000a,0x39e9000a,0x39eb000a, +0x39ed000a,0x39ef000a,0x39f1000a,0x39f3000a,0x39f5000a,0x39f7000a,0x39f9000a,0x39fb000a,0x39fd000a,0x39ff000a,0x3a01000a,0x3a03000a,0x3a05000a,0x3a07000a,0x3a09000a,0x3a0b000a, +0x3a0d000a,0x3a0f000a,0x3a11000a,0x3a13000a,0x3a15000a,0x3a17000a,0x3a19000a,0x3a1b000a,0x377000a,0x379000a,0,0x37b000a,0x37d000a,0x37f000a,0x381000a,0, +0,0x383000a,0x385000a,0x387000a,0x389000a,0x38b000a,0x38d000a,0x38f000a,0x391000a,0,0x393000a,0x395000a,0x397000a,0x399000a,0x39b000a,0x39d000a, +0x39f000a,0,0x3a1d000a,0x3a1f000a,0x3a21000a,0x3a23000a,0x3a25000a,0x3a27000a,0x3a29000a,0x3a2b000a,0x3a2d000a,0x3a2f000a,0x3a31000a,0x3a33000a,0x3a35000a,0x3a37000a, +0x3a39000a,0x3a3b000a,0x3a3d000a,0x3a3f000a,0x3a41000a,0x3a43000a,0x3a45000a,0x3a47000a,0x3a49000a,0x3a4b000a,0x3a4d000a,0x3a4f000a,0x3a1000a,0x3a3000a,0,0x3a5000a, +0x3a7000a,0x3a9000a,0x3ab000a,0,0x3ad000a,0x3af000a,0x3b1000a,0x3b3000a,0x3b5000a,0,0x3b7000a,0,0,0,0x3b9000a,0x3bb000a, +0x3bd000a,0x3bf000a,0x3c1000a,0x3c3000a,0x3c5000a,0,0x3a51000a,0x3a53000a,0x3a55000a,0x3a57000a,0x3a59000a,0x3a5b000a,0x3a5d000a,0x3a5f000a,0x3a61000a,0x3a63000a, +0x3a65000a,0x3a67000a,0x3a69000a,0x3a6b000a,0x3a6d000a,0x3a6f000a,0x3a71000a,0x3a73000a,0x3a75000a,0x3a77000a,0x3a79000a,0x3a7b000a,0x3a7d000a,0x3a7f000a,0x3a81000a,0x3a83000a, +0x3c7000a,0x3c9000a,0x3cb000a,0x3cd000a,0x3cf000a,0x3d1000a,0x3d3000a,0x3d5000a,0x3d7000a,0x3d9000a,0x3db000a,0x3dd000a,0x3df000a,0x3e1000a,0x3e3000a,0x3e5000a, +0x3e7000a,0x3e9000a,0x3eb000a,0x3ed000a,0x3ef000a,0x3f1000a,0x3f3000a,0x3f5000a,0x3f7000a,0x3f9000a,0x3a85000a,0x3a87000a,0x3a89000a,0x3a8b000a,0x3a8d000a,0x3a8f000a, +0x3a91000a,0x3a93000a,0x3a95000a,0x3a97000a,0x3a99000a,0x3a9b000a,0x3a9d000a,0x3a9f000a,0x3aa1000a,0x3aa3000a,0x3aa5000a,0x3aa7000a,0x3aa9000a,0x3aab000a,0x3aad000a,0x3aaf000a, +0x3ab1000a,0x3ab3000a,0x3ab5000a,0x3ab7000a,0x3fb000a,0x3fd000a,0x3ff000a,0x401000a,0x403000a,0x405000a,0x407000a,0x409000a,0x40b000a,0x40d000a,0x40f000a,0x411000a, +0x413000a,0x415000a,0x417000a,0x419000a,0x41b000a,0x41d000a,0x41f000a,0x421000a,0x423000a,0x425000a,0x427000a,0x429000a,0x42b000a,0x42d000a,0x3ab9000a,0x3abb000a, +0x3abd000a,0x3abf000a,0x3ac1000a,0x3ac3000a,0x3ac5000a,0x3ac7000a,0x3ac9000a,0x3acb000a,0x3acd000a,0x3acf000a,0x3ad1000a,0x3ad3000a,0x3ad5000a,0x3ad7000a,0x3ad9000a,0x3adb000a, +0x3add000a,0x3adf000a,0x3ae1000a,0x3ae3000a,0x3ae5000a,0x3ae7000a,0x3ae9000a,0x3aeb000a,0x42f000a,0x431000a,0x433000a,0x435000a,0x437000a,0x439000a,0x43b000a,0x43d000a, +0x43f000a,0x441000a,0x443000a,0x445000a,0x447000a,0x449000a,0x44b000a,0x44d000a,0x44f000a,0x451000a,0x453000a,0x455000a,0x457000a,0x459000a,0x45b000a,0x45d000a, +0x45f000a,0x461000a,0x3aed000a,0x3aef000a,0x3af1000a,0x3af3000a,0x3af5000a,0x3af7000a,0x3af9000a,0x3afb000a,0x3afd000a,0x3aff000a,0x3b01000a,0x3b03000a,0x3b05000a,0x3b07000a, +0x3b09000a,0x3b0b000a,0x3b0d000a,0x3b0f000a,0x3b11000a,0x3b13000a,0x3b15000a,0x3b17000a,0x3b19000a,0x3b1b000a,0x3b1d000a,0x3b1f000a,0x463000a,0x465000a,0x467000a,0x469000a, +0x46b000a,0x46d000a,0x46f000a,0x471000a,0x473000a,0x475000a,0x477000a,0x479000a,0x47b000a,0x47d000a,0x47f000a,0x481000a,0x483000a,0x485000a,0x487000a,0x489000a, +0x48b000a,0x48d000a,0x48f000a,0x491000a,0x493000a,0x495000a,0x3b21000a,0x3b23000a,0x3b25000a,0x3b27000a,0x3b29000a,0x3b2b000a,0x3b2d000a,0x3b2f000a,0x3b31000a,0x3b33000a, +0x3b35000a,0x3b37000a,0x3b39000a,0x3b3b000a,0x3b3d000a,0x3b3f000a,0x3b41000a,0x3b43000a,0x3b45000a,0x3b47000a,0x3b49000a,0x3b4b000a,0x3b4d000a,0x3b4f000a,0x3b51000a,0x3b53000a, +0x497000a,0x499000a,0x49b000a,0x49d000a,0x49f000a,0x4a1000a,0x4a3000a,0x4a5000a,0x4a7000a,0x4a9000a,0x4ab000a,0x4ad000a,0x4af000a,0x4b1000a,0x4b3000a,0x4b5000a, +0x4b7000a,0x4b9000a,0x4bb000a,0x4bd000a,0x4bf000a,0x4c1000a,0x4c3000a,0x4c5000a,0x4c7000a,0x4c9000a,0x3b55000a,0x3b57000a,0x3b59000a,0x3b5b000a,0x3b5d000a,0x3b5f000a, +0x3b61000a,0x3b63000a,0x3b65000a,0x3b67000a,0x3b69000a,0x3b6b000a,0x3b6d000a,0x3b6f000a,0x3b71000a,0x3b73000a,0x3b75000a,0x3b77000a,0x3b79000a,0x3b7b000a,0x3b7d000a,0x3b7f000a, +0x3b81000a,0x3b83000a,0x3b85000a,0x3b87000a,0x4cb000a,0x4cd000a,0x4cf000a,0x4d1000a,0x4d3000a,0x4d5000a,0x4d7000a,0x4d9000a,0x4db000a,0x4dd000a,0x4df000a,0x4e1000a, +0x4e3000a,0x4e5000a,0x4e7000a,0x4e9000a,0x4eb000a,0x4ed000a,0x4ef000a,0x4f1000a,0x4f3000a,0x4f5000a,0x4f7000a,0x4f9000a,0x4fb000a,0x4fd000a,0x3b89000a,0x3b8b000a, +0x3b8d000a,0x3b8f000a,0x3b91000a,0x3b93000a,0x3b95000a,0x3b97000a,0x3b99000a,0x3b9b000a,0x3b9d000a,0x3b9f000a,0x3ba1000a,0x3ba3000a,0x3ba5000a,0x3ba7000a,0x3ba9000a,0x3bab000a, +0x3bad000a,0x3baf000a,0x3bb1000a,0x3bb3000a,0x3bb5000a,0x3bb7000a,0x3bb9000a,0x3bbb000a,0x3bbd000a,0x3bbf000a,0,0,0x4ff000a,0x501000a,0x503000a,0x505000a, +0x507000a,0x509000a,0x50b000a,0x50d000a,0x50f000a,0x511000a,0x513000a,0x515000a,0x517000a,0x519000a,0x51b000a,0x51d000a,0x51f000a,0x521000a,0x523000a,0x525000a, +0x527000a,0x529000a,0x52b000a,0x52d000a,0x52f000a,0x3bc1000a,0x3bc3000a,0x3bc5000a,0x3bc7000a,0x3bc9000a,0x3bcb000a,0x3bcd000a,0x3bcf000a,0x3bd1000a,0x3bd3000a,0x3bd5000a, +0x3bd7000a,0x3bd9000a,0x3bdb000a,0x3bdd000a,0x3bdf000a,0x3be1000a,0x3be3000a,0x531000a,0x3be5000a,0x3be7000a,0x3be9000a,0x3beb000a,0x3bed000a,0x3bef000a,0x3bf1000a,0x3bf3000a, +0x3bf5000a,0x3bf7000a,0x3bf9000a,0x3bfb000a,0x3bfd000a,0x3bff000a,0x533000a,0x535000a,0x537000a,0x539000a,0x53b000a,0x53d000a,0x53f000a,0x541000a,0x543000a,0x545000a, +0x547000a,0x549000a,0x54b000a,0x54d000a,0x54f000a,0x551000a,0x553000a,0x555000a,0x557000a,0x559000a,0x55b000a,0x55d000a,0x55f000a,0x561000a,0x563000a,0x3c01000a, +0x3c03000a,0x3c05000a,0x3c07000a,0x3c09000a,0x3c0b000a,0x3c0d000a,0x3c0f000a,0x3c11000a,0x3c13000a,0x3c15000a,0x3c17000a,0x3c19000a,0x3c1b000a,0x3c1d000a,0x3c1f000a,0x3c21000a, +0x3c23000a,0x565000a,0x3c25000a,0x3c27000a,0x3c29000a,0x3c2b000a,0x3c2d000a,0x3c2f000a,0x3c31000a,0x3c33000a,0x3c35000a,0x3c37000a,0x3c39000a,0x3c3b000a,0x3c3d000a,0x3c3f000a, +0x567000a,0x569000a,0x56b000a,0x56d000a,0x56f000a,0x571000a,0x573000a,0x575000a,0x577000a,0x579000a,0x57b000a,0x57d000a,0x57f000a,0x581000a,0x583000a,0x585000a, +0x587000a,0x589000a,0x58b000a,0x58d000a,0x58f000a,0x591000a,0x593000a,0x595000a,0x597000a,0x3c41000a,0x3c43000a,0x3c45000a,0x3c47000a,0x3c49000a,0x3c4b000a,0x3c4d000a, +0x3c4f000a,0x3c51000a,0x3c53000a,0x3c55000a,0x3c57000a,0x3c59000a,0x3c5b000a,0x3c5d000a,0x3c5f000a,0x3c61000a,0x3c63000a,0x599000a,0x3c65000a,0x3c67000a,0x3c69000a,0x3c6b000a, +0x3c6d000a,0x3c6f000a,0x3c71000a,0x3c73000a,0x3c75000a,0x3c77000a,0x3c79000a,0x3c7b000a,0x3c7d000a,0x3c7f000a,0x59b000a,0x59d000a,0x59f000a,0x5a1000a,0x5a3000a,0x5a5000a, +0x5a7000a,0x5a9000a,0x5ab000a,0x5ad000a,0x5af000a,0x5b1000a,0x5b3000a,0x5b5000a,0x5b7000a,0x5b9000a,0x5bb000a,0x5bd000a,0x5bf000a,0x5c1000a,0x5c3000a,0x5c5000a, +0x5c7000a,0x5c9000a,0x5cb000a,0x3c81000a,0x3c83000a,0x3c85000a,0x3c87000a,0x3c89000a,0x3c8b000a,0x3c8d000a,0x3c8f000a,0x3c91000a,0x3c93000a,0x3c95000a,0x3c97000a,0x3c99000a, +0x3c9b000a,0x3c9d000a,0x3c9f000a,0x3ca1000a,0x3ca3000a,0x5cd000a,0x3ca5000a,0x3ca7000a,0x3ca9000a,0x3cab000a,0x3cad000a,0x3caf000a,0x3cb1000a,0x3cb3000a,0x3cb5000a,0x3cb7000a, +0x3cb9000a,0x3cbb000a,0x3cbd000a,0x3cbf000a,0x5cf000a,0x5d1000a,0x5d3000a,0x5d5000a,0x5d7000a,0x5d9000a,0x5db000a,0x5dd000a,0x5df000a,0x5e1000a,0x5e3000a,0x5e5000a, +0x5e7000a,0x5e9000a,0x5eb000a,0x5ed000a,0x5ef000a,0x5f1000a,0x5f3000a,0x5f5000a,0x5f7000a,0x5f9000a,0x5fb000a,0x5fd000a,0x5ff000a,0x3cc1000a,0x3cc3000a,0x3cc5000a, +0x3cc7000a,0x3cc9000a,0x3ccb000a,0x3ccd000a,0x3ccf000a,0x3cd1000a,0x3cd3000a,0x3cd5000a,0x3cd7000a,0x3cd9000a,0x3cdb000a,0x3cdd000a,0x3cdf000a,0x3ce1000a,0x3ce3000a,0x601000a, +0x3ce5000a,0x3ce7000a,0x3ce9000a,0x3ceb000a,0x3ced000a,0x3cef000a,0x3cf1000a,0x3cf3000a,0x3cf5000a,0x3cf7000a,0x3cf9000a,0x3cfb000a,0x3cfd000a,0x3cff000a,0x603000a,0x3d01000a, +0,0,0x3d03000a,0x3d05000a,0x3d07000a,0x3d09000a,0x3d0b000a,0x3d0d000a,0x3d0f000a,0x3d11000a,0x3d13000a,0x3d15000a,0x3d17000a,0x3d19000a,0x3d1b000a,0x3d1d000a, +0x3d1f000a,0x3d21000a,0x3d23000a,0x3d25000a,0x605e60f,0x608e60f,0x206be6b0,0x60be60f,0x60ee60f,0x206cf0b0,0xe600,0xdc00,0xdc00,0xdc00,0xe600,0xe600, +0xe600,0xdc00,0xdc00,0,0xe600,0xe600,0xe600,0xdc00,0xdc00,0xdc00,0xdc00,0xe600,0xe800,0xdc00,0xdc00,0xe600, +0xe900,0xea00,0xea00,0xe900,0,0,0,0,0x211f000a,0x145c000e,0x1464000c,0x616000f,0x1468000c,0x146c000c,0x1470000c,0, +0x1474000c,0,0x1478000c,0x147c000c,0x1480000c,0x3d940040,0,0,0,0x3d950040,0,0x3d960040,0,0x3d970040,0,0, +0,0,0,0x3d980040,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x900,0,0,0,0xe600,0xdc00,0xe600,0xe600,0,0,0,0x618000f,0x61c000f,0x620000f,0x624000f, +0x628000f,0x62c000f,0x630000f,0x634000f,0,0,0,0,0,0,0,0x3dcb0040,0,0,0,0x15b7000c, +0x15ba000c,0x900,0,0,0,0,0,0,0,0,0,0x207200b0,0,0,0,0, +0x638000f,0x63c000f,0,0x640000f,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x644000f,0,0,0x648000f,0,0,0,0,0, +0x700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x900,0,0,0,0,0,0,0,0,0,0,0,0x64c000f,0x650000f,0x654000f, +0,0,0x658000f,0,0,0,0,0,0,0,0,0x3dcc0040,0x15bd000c,0,0,0x15c0000c, +0x15c3000c,0x900,0,0,0,0,0,0,0,0,0x207400b0,0x207500b0,0,0,0,0, +0x65c000f,0x660000f,0,0,0,0,0,0x664000f,0,0,0,0,0,0,0,0, +0,0x667000f,0,0,0,0,0x66a000f,0,0,0,0,0x66d000f,0,0,0,0, +0x670000f,0,0,0,0,0,0,0,0,0,0,0,0,0x673000f,0,0, +0,0,0,0,0,0x8100,0x8200,0x676000f,0x8400,0x67a000f,0x67e000f,0x2150000a,0x682000f,0x2155000a,0x8200,0x8200, +0x8200,0x8200,0,0,0x8200,0x686000f,0xe600,0xe600,0x900,0,0xe600,0xe600,0,0,0,0, +0,0,0,0,0,0,0,0x68a000f,0,0,0,0,0,0,0,0, +0,0x68d000f,0,0,0,0,0x690000f,0,0,0,0,0x693000f,0,0,0,0, +0x696000f,0,0,0,0,0,0,0,0,0,0,0,0,0x699000f,0,0, +0,0,0,0,0x1c20004c,0x1c25004c,0x1c2a004c,0x1c30004c,0x1c36004c,0x1c3c004c,0x1c42004c,0x1c48004c,0x1c4e004c,0x1c53004c,0x1c58004c,0x1c5e004c, +0x1c64004c,0x1c6a004c,0x1c70004c,0x1c76004c,0x1c7c004c,0x69c000f,0x1c80000c,0x6a0000f,0x1c85004c,0x6a4000f,0x1c89000c,0x6a8000f,0x1c8d000c,0x6ac000f,0x1c91000c,0x6b0000f, +0x1c96004c,0x6b4000f,0,0,0x1d52000c,0x1d57000c,0x1d5c000c,0x1d62000c,0x1d68000c,0x1d6e000c,0x1d74000c,0x1d7a000c,0x1d80000c,0x1d85000c,0x1d8a000c,0x1d90000c, +0x1d96000c,0x1d9c000c,0x1da2000c,0x1da8000c,0x1dae000c,0x1db2000c,0x1db6000c,0x1dbb000c,0x1dbf000c,0,0x1dc5004c,0x1dc9000c,0x1dce000c,0x1dd2000c,0x1dd6000c,0x6b8000f, +0x1dda000c,0x21f9000a,0x6bc000f,0x21fe004a,0x2202000a,0x1dde000e,0x1de6000c,0x1deb000c,0x1def000c,0,0x1df5004c,0x1df9000c,0x1dfe000c,0x6be000f,0x1e02000c,0x6c2000f, +0x1e06000c,0x1e0a000e,0x1e12000e,0x1e1a000e,0x1e22000c,0x1e26000c,0x1e2a000c,0x6c6000f,0,0,0x1e2f000c,0x1e33000c,0x1e38000c,0x1e3c000c,0x1e40000c,0x6cb000f, +0,0x1e44000e,0x1e4c000e,0x1e54000e,0x1e5c000c,0x1e60000c,0x1e64000c,0x6cf000f,0x1e69000c,0x1e6d000c,0x1e71000c,0x1e75000c,0x1e7a000c,0x1e7e000c,0x1e82000c,0x6d4000f, +0x1e86000c,0x1e8a000e,0x6d8000f,0x6e0000f,0,0,0x1e92000c,0x1e97000c,0x1e9b000c,0,0x1ea1004c,0x1ea5000c,0x1eaa000c,0x6e2000f,0x1eae000c,0x6e6000f, +0x1eb2000c,0x6ea000f,0x2207004a,0,0x6ef000f,0x6f2000f,0x220b000a,0x220d000a,0x220f000a,0x2211000a,0x2213000a,0x2215000a,0x2217000a,0x2219000a,0x221b000a,0, +0,0,0,0,0,0x221d000a,0,0,0,0,0,0x221f000a,0,0,0,0, +0,0,0,0,0,0x6fd000f,0x6ff000f,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x701000f,0,0,0,0x705000f,0x707000f,0x709000f,0x70b000f,0x70d000f,0x70f000f,0x711000f,0x713000f, +0x715000f,0x717000f,0x719000f,0x71b000f,0x71d000f,0x71f000f,0x721000f,0x723000f,0x725000f,0x727000f,0x729000f,0x72b000f,0x72d000f,0x72f000f,0x731000f,0x733000f, +0x735000f,0x737000f,0x739000f,0x73b000f,0x73d000f,0x73f000f,0x741000f,0x743000f,0x745000f,0x747000f,0x749000f,0x74b000f,0x74d000f,0x74f000f,0x751000f,0x753000f, +0x755000f,0x757000f,0x759000f,0x75b000f,0x75d000f,0x75f000f,0x761000f,0x763000f,0x765000f,0x767000f,0x769000f,0x76b000f,0x76d000f,0x76f000f,0x771000f,0x773000f, +0x775000f,0x777000f,0x779000f,0x77b000f,0x77d000f,0x77f000f,0x781000f,0x783000f,0x785000f,0x787000f,0x789000f,0x78b000f,0x78d000f,0x78f000f,0x791000f,0x793000f, +0x795000f,0x797000f,0x799000f,0x79b000f,0x79d000f,0x79f000f,0x7a1000f,0x7a3000f,0x7a5000f,0x7a7000f,0x7a9000f,0x7ab000f,0x7ad000f,0x7af000f,0x7b1000f,0x7b3000f, +0x7b5000f,0x7b7000f,0x7b9000f,0x7bb000f,0x7bd000f,0x7bf000f,0x7c1000f,0x7c3000f,0x7c5000f,0x7c7000f,0x7c9000f,0x7cb000f,0x7cd000f,0x7cf000f,0x7d1000f,0x7d3000f, +0x7d5000f,0x7d7000f,0x7d9000f,0x7db000f,0x7dd000f,0x7df000f,0x7e1000f,0x7e3000f,0x7e5000f,0x7e7000f,0x7e9000f,0x7eb000f,0x7ed000f,0x7ef000f,0x7f1000f,0x7f3000f, +0x7f5000f,0x7f7000f,0x7f9000f,0x7fb000f,0x7fd000f,0x7ff000f,0x801000f,0x803000f,0x805000f,0x807000f,0x809000f,0x80b000f,0x80d000f,0x80f000f,0x811000f,0x813000f, +0x815000f,0x817000f,0x819000f,0x81b000f,0x81d000f,0x81f000f,0x821000f,0x823000f,0x825000f,0x827000f,0x829000f,0x82b000f,0x82d000f,0x82f000f,0x831000f,0x833000f, +0x835000f,0x837000f,0x839000f,0x83b000f,0x83d000f,0x83f000f,0x841000f,0x843000f,0x845000f,0x847000f,0x849000f,0x84b000f,0x84d000f,0x84f000f,0x851000f,0x853000f, +0x855000f,0x857000f,0x859000f,0x85b000f,0x85d000f,0x85f000f,0x861000f,0x863000f,0x865000f,0x867000f,0x869000f,0x86b000f,0x86d000f,0x86f000f,0x871000f,0x873000f, +0x875000f,0x877000f,0x879000f,0x87b000f,0x87d000f,0x87f000f,0x881000f,0x883000f,0x885000f,0x887000f,0x889000f,0x88b000f,0x88d000f,0x88f000f,0x891000f,0x893000f, +0x895000f,0x897000f,0x899000f,0x89b000f,0x89d000f,0x89f000f,0x8a1000f,0x8a3000f,0x8a5000f,0x8a7000f,0x8a9000f,0x8ab000f,0x8ad000f,0x8af000f,0x8b1000f,0x8b3000f, +0x8b5000f,0x8b7000f,0x8b9000f,0x8bb000f,0x8bd000f,0x8bf000f,0x8c1000f,0x8c3000f,0x8c5000f,0x8c7000f,0x8c9000f,0x8cb000f,0x8cd000f,0x8cf000f,0x8d1000f,0x8d3000f, +0x8d5000f,0x8d7000f,0x8d9000f,0x8db000f,0x8dd000f,0x8df000f,0x8e1000f,0x8e3000f,0x8e5000f,0x8e7000f,0x8e9000f,0x8eb000f,0x8ed000f,0x8ef000f,0x8f1000f,0x8f3000f, +0x8f5000f,0x8f7000f,0x8f9000f,0x8fb000f,0x8fd000f,0x8ff000f,0x901000f,0x903000f,0x905000f,0x907000f,0x909000f,0x90b000f,0x90d000f,0x90f000f,0x911000f,0x913000f, +0x915000f,0x917000f,0x919000f,0x91b000f,0x91d000f,0x91f000f,0,0,0x921000f,0,0x923000f,0,0,0x925000f,0x927000f,0x929000f, +0x92b000f,0x92d000f,0x92f000f,0x931000f,0x933000f,0x935000f,0x937000f,0,0x939000f,0,0x93b000f,0,0,0x93d000f,0x93f000f,0, +0,0,0x941000f,0x943000f,0x945000f,0x947000f,0,0,0x949000f,0x94b000f,0x94d000f,0x94f000f,0x951000f,0x953000f,0x955000f,0x957000f, +0x959000f,0x95b000f,0x95d000f,0x95f000f,0x961000f,0x963000f,0x965000f,0x967000f,0x969000f,0x96b000f,0x96d000f,0x96f000f,0x971000f,0x973000f,0x975000f,0x977000f, +0x979000f,0x97b000f,0x97d000f,0x97f000f,0x981000f,0x983000f,0x985000f,0x987000f,0x989000f,0x98b000f,0x98d000f,0x98f000f,0x991000f,0x993000f,0x995000f,0x997000f, +0x999000f,0x99b000f,0x99d000f,0x99f000f,0x9a1000f,0x9a3000f,0x9a5000f,0x9a7000f,0x9a9000f,0x9ab000f,0x9ad000f,0x9af000f,0x9b1000f,0x9b3000f,0x9b5000f,0x9b7000f, +0x9b9000f,0x9bb000f,0x9bd000f,0,0,0,0,0,0x9bf000f,0x9c1000f,0x9c3000f,0x9c5000f,0x9c7000f,0x9c9000f,0x9cb000f,0x9cd000f, +0x9cf000f,0x9d1000f,0x9d3000f,0x9d5000f,0x9d7000f,0x9d9000f,0x9db000f,0x9dd000f,0x9df000f,0x9e1000f,0x9e3000f,0x9e5000f,0x9e7000f,0x9e9000f,0x9eb000f,0x9ed000f, +0x9ef000f,0x9f1000f,0x9f3000f,0x9f5000f,0x9f7000f,0x9f9000f,0x9fb000f,0x9fd000f,0x9ff000f,0xa01000f,0xa03000f,0xa05000f,0xa07000f,0xa09000f,0xa0b000f,0xa0d000f, +0xa0f000f,0xa11000f,0xa13000f,0xa15000f,0xa17000f,0xa19000f,0xa1b000f,0xa1d000f,0xa1f000f,0xa21000f,0xa23000f,0xa25000f,0xa27000f,0xa29000f,0xa2b000f,0xa2d000f, +0xa2f000f,0xa31000f,0xa33000f,0xa35000f,0xa37000f,0xa39000f,0xa3b000f,0xa3d000f,0xa3f000f,0xa41000f,0xa43000f,0xa45000f,0xa47000f,0xa49000f,0xa4b000f,0xa4d000f, +0xa4f000f,0xa51000f,0xa53000f,0xa55000f,0xa57000f,0xa59000f,0xa5b000f,0xa5d000f,0xa5f000f,0xa61000f,0xa63000f,0xa65000f,0xa67000f,0xa69000f,0xa6b000f,0xa6d000f, +0xa6f000f,0xa71000f,0xa73000f,0xa75000f,0xa77000f,0xa79000f,0xa7b000f,0xa7d000f,0xa80000f,0xa83000f,0xa86000f,0xa88000f,0xa8a000f,0xa8c000f,0xa8f000f,0xa92000f, +0xa95000f,0xa97000f,0,0,0,0,0,0,0x2dd9000a,0x2ddc000a,0x2ddf000a,0x2de2000a,0x2de6000a,0x2dea000a,0x2ded000a,0, +0,0,0,0,0,0,0,0,0,0,0,0x2df0000a,0x2df3000a,0x2df6000a,0x2df9000a,0x2dfc000a, +0,0,0,0,0,0xa99000f,0x1a00,0xa9d000f,0x2dff000a,0x2e01000a,0x2e03000a,0x2e05000a,0x2e07000a,0x2e09000a,0x2e0b000a,0x2e0d000a, +0x2e0f000a,0x2e11000a,0xaa1000f,0xaa5000f,0xaa9000f,0xaae000f,0xab3000f,0xab7000f,0xabb000f,0xabf000f,0xac3000f,0xac7000f,0xacb000f,0xacf000f,0xad3000f,0, +0xad7000f,0xadb000f,0xadf000f,0xae3000f,0xae7000f,0,0xaeb000f,0,0xaef000f,0xaf3000f,0,0xaf7000f,0xafb000f,0,0xaff000f,0xb03000f, +0xb07000f,0xb0b000f,0xb0f000f,0xb13000f,0xb17000f,0xb1b000f,0xb1f000f,0x2e13000a,0x2e16000a,0x2e18000a,0x2e1a000a,0x2e1c000a,0x2e1e000a,0x2e20000a,0x2e22000a,0x2e24000a, +0x2e26000a,0x2e28000a,0x2e2a000a,0x2e2c000a,0x2e2e000a,0x2e30000a,0x2e32000a,0x2e34000a,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb23000f,0xb29000f,0xb2f000f,0xb37000f,0xb3f000f,0xb47000f,0xb4f000f,0xd800,0xd800,0x100, +0x100,0x100,0,0,0,0xe200,0xd800,0xd800,0xd800,0xd800,0xd800,0,0,0,0,0, +0,0,0,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0,0,0,0,0,0,0,0, +0,0,0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb57000f,0xb5d000f,0xb63000f,0xb6b000f,0xb73000f,0xb7b000f,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb83000f,0xb85000f,0xb87000f,0xb89000f,0xb8c000f,0xb8e000f,0xb90000f,0xb92000f, +0xb94000f,0xb96000f,0xb98000f,0xb9a000f,0xb9c000f,0xb9e000f,0xba1000f,0xba3000f,0xba5000f,0xba7000f,0xba9000f,0xbac000f,0xbae000f,0xbb0000f,0xbb2000f,0xbb5000f, +0xbb7000f,0xbb9000f,0xbbb000f,0xbbd000f,0xbbf000f,0xbc2000f,0xbc4000f,0xbc6000f,0xbc8000f,0xbca000f,0xbcc000f,0xbce000f,0xbd0000f,0xbd2000f,0xbd4000f,0xbd6000f, +0xbd8000f,0xbda000f,0xbdc000f,0xbde000f,0xbe0000f,0xbe2000f,0xbe4000f,0xbe6000f,0xbe8000f,0xbea000f,0xbec000f,0xbee000f,0xbf0000f,0xbf3000f,0xbf5000f,0xbf7000f, +0xbf9000f,0xbfc000f,0xbfe000f,0xc00000f,0xc02000f,0xc04000f,0xc06000f,0xc08000f,0xc0a000f,0xc0c000f,0xc0e000f,0xc10000f,0xc12000f,0xc14000f,0xc16000f,0xc18000f, +0xc1a000f,0xc1c000f,0xc1e000f,0xc20000f,0xc22000f,0xc24000f,0xc26000f,0xc28000f,0xc2a000f,0xc2c000f,0xc2e000f,0xc30000f,0xc32000f,0xc34000f,0xc36000f,0xc38000f, +0xc3a000f,0xc3c000f,0xc3f000f,0xc41000f,0xc43000f,0xc45000f,0xc47000f,0xc49000f,0xc4b000f,0xc4e000f,0xc51000f,0xc53000f,0xc55000f,0xc57000f,0xc59000f,0xc5b000f, +0xc5d000f,0xc5f000f,0xc61000f,0xc63000f,0xc65000f,0xc68000f,0xc6a000f,0xc6c000f,0xc6e000f,0xc70000f,0xc73000f,0xc75000f,0xc77000f,0xc79000f,0xc7b000f,0xc7d000f, +0xc7f000f,0xc81000f,0xc83000f,0xc85000f,0xc88000f,0xc8a000f,0xc8d000f,0xc8f000f,0xc91000f,0xc93000f,0xc95000f,0xc97000f,0xc99000f,0xc9b000f,0xc9d000f,0xc9f000f, +0xca1000f,0xca3000f,0xca6000f,0xca8000f,0xcaa000f,0xcac000f,0xcae000f,0xcb0000f,0xcb3000f,0xcb5000f,0xcb8000f,0xcbb000f,0xcbd000f,0xcbf000f,0xcc1000f,0xcc3000f, +0xcc6000f,0xcc9000f,0xccb000f,0xccd000f,0xccf000f,0xcd1000f,0xcd3000f,0xcd5000f,0xcd7000f,0xcd9000f,0xcdb000f,0xcdd000f,0xcdf000f,0xce2000f,0xce4000f,0xce6000f, +0xce8000f,0xcea000f,0xcec000f,0xcee000f,0xcf0000f,0xcf2000f,0xcf4000f,0xcf6000f,0xcf8000f,0xcfa000f,0xcfc000f,0xcfe000f,0xd00000f,0xd02000f,0xd04000f,0xd06000f, +0xd08000f,0xd0b000f,0xd0d000f,0xd0f000f,0xd11000f,0xd13000f,0xd15000f,0xd18000f,0xd1a000f,0xd1c000f,0xd1e000f,0xd20000f,0xd22000f,0xd24000f,0xd26000f,0xd28000f, +0xd2a000f,0xd2c000f,0xd2e000f,0xd31000f,0xd33000f,0xd35000f,0xd37000f,0xd39000f,0xd3b000f,0xd3d000f,0xd3f000f,0xd41000f,0xd43000f,0xd45000f,0xd47000f,0xd49000f, +0xd4b000f,0xd4d000f,0xd4f000f,0xd51000f,0xd53000f,0xd55000f,0xd58000f,0xd5a000f,0xd5c000f,0xd5e000f,0xd60000f,0xd62000f,0xd65000f,0xd67000f,0xd69000f,0xd6b000f, +0xd6d000f,0xd6f000f,0xd71000f,0xd73000f,0xd75000f,0xd78000f,0xd7a000f,0xd7c000f,0xd7e000f,0xd81000f,0xd83000f,0xd85000f,0xd87000f,0xd89000f,0xd8b000f,0xd8d000f, +0xd90000f,0xd93000f,0xd96000f,0xd98000f,0xd9b000f,0xd9d000f,0xd9f000f,0xda1000f,0xda3000f,0xda5000f,0xda7000f,0xda9000f,0xdab000f,0xdad000f,0xdaf000f,0xdb2000f, +0xdb4000f,0xdb6000f,0xdb8000f,0xdba000f,0xdbc000f,0xdbe000f,0xdc1000f,0xdc3000f,0xdc5000f,0xdc8000f,0xdcb000f,0xdcd000f,0xdcf000f,0xdd1000f,0xdd3000f,0xdd5000f, +0xdd7000f,0xdd9000f,0xddb000f,0xddd000f,0xde0000f,0xde2000f,0xde5000f,0xde7000f,0xdea000f,0xdec000f,0xdee000f,0xdf0000f,0xdf3000f,0xdf5000f,0xdf7000f,0xdfa000f, +0xdfd000f,0xdff000f,0xe01000f,0xe03000f,0xe05000f,0xe07000f,0xe09000f,0xe0b000f,0xe0d000f,0xe0f000f,0xe11000f,0xe13000f,0xe15000f,0xe17000f,0xe1a000f,0xe1c000f, +0xe1f000f,0xe21000f,0xe24000f,0xe26000f,0xe29000f,0xe2c000f,0xe2f000f,0xe31000f,0xe33000f,0xe35000f,0xe38000f,0xe3b000f,0xe3e000f,0xe41000f,0xe43000f,0xe45000f, +0xe47000f,0xe49000f,0xe4b000f,0xe4d000f,0xe4f000f,0xe51000f,0xe54000f,0xe56000f,0xe58000f,0xe5a000f,0xe5c000f,0xe5f000f,0xe61000f,0xe64000f,0xe67000f,0xe69000f, +0xe6b000f,0xe6d000f,0xe6f000f,0xe71000f,0xe73000f,0xe76000f,0xe79000f,0xe7c000f,0xe7e000f,0xe80000f,0xe83000f,0xe85000f,0xe87000f,0xe89000f,0xe8c000f,0xe8e000f, +0xe90000f,0xe92000f,0xe94000f,0xe96000f,0xe99000f,0xe9b000f,0xe9d000f,0xe9f000f,0xea1000f,0xea3000f,0xea5000f,0xea8000f,0xeab000f,0xead000f,0xeb0000f,0xeb2000f, +0xeb5000f,0xeb7000f,0xeb9000f,0xebb000f,0xebe000f,0xec1000f,0xec3000f,0xec6000f,0xec8000f,0xecb000f,0xecd000f,0xecf000f,0xed1000f,0xed3000f,0xed5000f,0xed7000f, +0xeda000f,0xedd000f,0xee0000f,0xee3000f,0xee5000f,0xee7000f,0xee9000f,0xeeb000f,0xeed000f,0xeef000f,0xef1000f,0xef3000f,0xef5000f,0xef7000f,0xef9000f,0xefb000f, +0xefe000f,0xf00000f,0xf02000f,0xf04000f,0xf06000f,0xf08000f,0xf0a000f,0xf0c000f,0xf0e000f,0xf10000f,0xf12000f,0xf14000f,0xf16000f,0xf19000f,0xf1c000f,0xf1f000f, +0xf21000f,0xf23000f,0xf25000f,0xf27000f,0xf2a000f,0xf2c000f,0xf2f000f,0xf31000f,0xf33000f,0xf36000f,0xf39000f,0xf3b000f,0xf3d000f,0xf3f000f,0xf41000f,0xf43000f, +0xf45000f,0xf47000f,0xf49000f,0xf4b000f,0xf4d000f,0xf4f000f,0xf51000f,0xf53000f,0xf55000f,0xf57000f,0xf59000f,0xf5b000f,0xf5d000f,0xf5f000f,0xf62000f,0xf64000f, +0xf66000f,0xf68000f,0xf6a000f,0xf6c000f,0xf6f000f,0xf72000f,0xf74000f,0xf76000f,0xf78000f,0xf7a000f,0xf7c000f,0xf7e000f,0xf81000f,0xf83000f,0xf85000f,0xf87000f, +0xf89000f,0xf8c000f,0xf8f000f,0xf91000f,0xf93000f,0xf95000f,0xf98000f,0xf9a000f,0xf9c000f,0xf9f000f,0xfa2000f,0xfa4000f,0xfa6000f,0xfa8000f,0xfab000f,0xfad000f, +0xfaf000f,0xfb1000f,0xfb3000f,0xfb5000f,0xfb7000f,0xfb9000f,0xfbc000f,0xfbe000f,0xfc0000f,0xfc2000f,0xfc5000f,0xfc7000f,0xfc9000f,0xfcb000f,0xfcd000f,0xfd0000f, +0xfd3000f,0xfd5000f,0xfd7000f,0xfd9000f,0xfdc000f,0xfde000f,0xfe1000f,0xfe3000f,0xfe5000f,0xfe7000f,0xfea000f,0xfec000f,0xfee000f,0xff0000f,0xff2000f,0xff4000f, +0xff6000f,0xff8000f,0xffb000f,0xffd000f,0xfff000f,0x1001000f,0x1003000f,0x1005000f,0x1007000f,0x100a000f,0x100c000f,0x100f000f,0x1012000f,0x1015000f,0x1017000f,0x1019000f, +0x101b000f,0x101d000f,0x101f000f,0x1021000f,0x1023000f,0x1025000f,0,0,0x1028000c,0x102c000c,0x1031004c,0x1035000c,0x103a004c,0x103f004c,0x3d8e0040,0x1044004c, +0x1048000c,0x104c000c,0x1051004c,0x1055000c,0x1059000c,0x105d000c,0x1061000c,0x1066004c,0,0x106a000c,0x106e000c,0x1072000c,0x1077004c,0x107c004c,0x1081004c,0, +0x3d920040,0x1085000c,0x1089000c,0x108d000c,0x1092004c,0x1096000c,0,0,0x109a000c,0x109e000c,0x10a3004c,0x10a7000c,0x10ac004c,0x10b1004c,0x3d8f0040,0x10b6004c, +0x10ba000c,0x10be000c,0x10c3004c,0x10c7000c,0x10cb000c,0x10cf000c,0x10d3000c,0x10d8004c,0,0x10dc000c,0x10e0000c,0x10e4000c,0x10e9004c,0x10ee004c,0x10f3004c,0, +0x3d930040,0x10f7000c,0x10fb000c,0x10ff000c,0x1104004c,0x1108000c,0,0x110c000c,0x1110000c,0x1114000c,0x1119004c,0x111e004c,0x1122000c,0x1126000c,0x112a000c,0x112e000c, +0x1132000c,0x1136000c,0x113a000c,0x113e000c,0x1142000c,0x1146000c,0x114a000c,0x114e000c,0,0,0x1153004c,0x1158004c,0x115c000c,0x1160000c,0x1164000c,0x1168000c, +0x116c000c,0x1170000c,0x1174000c,0x1178000c,0x117c000c,0x1180000c,0x1184000c,0x1188000c,0x118c000c,0x1190000c,0x1194000c,0x1198000c,0x119c000c,0x11a0000c,0,0, +0x11a4000c,0x11a8000c,0x11ac000c,0x11b0000c,0x11b4000c,0x11b8000c,0x11bc000c,0x11c0000c,0x11c4000c,0,0x20af000a,0x20b2000a,0x11c8000c,0x11cc000c,0x11d0000c,0x11d4000c, +0,0x11d8000c,0x11dc000c,0x11e0000c,0x11e4000c,0x11e8000c,0x11ec000c,0x20b5000a,0x20b8000a,0,0,0x11f0000c,0x11f4000c,0x11f8000c,0x11fc000c,0x1200000c, +0x1204000c,0x20bb000a,0,0,0x1209004c,0x120e004c,0x1212000c,0x1216000c,0x121a000c,0x121e000c,0,0,0x1222000c,0x1226000c,0x122a000c,0x122e000c, +0x1232000c,0x1236000c,0x123b004c,0x1240004c,0x1244000c,0x1248000c,0x124c000c,0x1250000c,0x1255004c,0x125a004c,0x125e000c,0x1262000c,0x1266000c,0x126a000c,0,0, +0x126f004c,0x1274004c,0x1279004c,0x127e004c,0x1282000c,0x1286000c,0x128a000c,0x128e000c,0x1292000c,0x1296000c,0x129a000c,0x129e000c,0x12a2000c,0x12a6000c,0x12aa000c,0x12ae000c, +0x12b2000c,0x12b6000c,0x12ba000c,0x12be000c,0x12c2000c,0x12c6000c,0x12ca000c,0x20bf004a,0x12cf004c,0x12d4004c,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x12d9004c,0x12de004c,0,0,0,0,0,0,0x3d900040, +0,0,0,0,0,0,0,0,0x20c1000a,0x20c6000a,0x20cb000a,0x20d0000a,0x20d3000a,0x20d6000a,0x20d9000a,0x20dc000a, +0x20df000a,0x12e2000c,0x12e6000c,0x12ea000c,0x12ee000c,0x12f2000c,0x12f6000c,0x12fa000c,0x12fe000c,0x1302000c,0x1307000c,0x130c000c,0x1311000c,0x1316000c,0x131b000c,0x1320000c, +0x1325000c,0,0x132a000c,0x132f000c,0x1334000c,0x1339000c,0x133e000c,0x1342000c,0,0,0x1346000c,0x134a000c,0x134e000c,0x1352000c,0x1357004c,0x135c004c, +0x1360000c,0x1365000c,0x136a000c,0x136e000c,0x1372000c,0x20e2000a,0x20e5000a,0x20e8000a,0x1376000c,0x137a000c,0,0,0x137e000c,0x1382000c,0x1386000c,0x138b000c, +0x1390000c,0x1394000c,0x1398000c,0x139c000c,0x13a0000c,0x13a4000c,0x13a8000c,0x13ac000c,0x13b0000c,0x13b4000c,0x13b8000c,0x13bc000c,0x13c0000c,0x13c4000c,0x13c8000c,0x13cc000c, +0x13d0000c,0x13d4000c,0x13d8000c,0x13dc000c,0x13e0000c,0x13e4000c,0x13e8000c,0x13ec000c,0x13f0000c,0x13f4000c,0x13f8000c,0x13fc000c,0x1400000c,0x1404000c,0x1408000c,0x140c000c, +0,0,0x1410000c,0x1414000c,0,0,0,0,0,0,0x1419004c,0x141e004c,0x1423004c,0x1428004c,0x142c000c,0x1431000c, +0x1436000c,0x143b000c,0x1441004c,0x1446004c,0x144a000c,0x144f000c,0x1454000c,0x1458000c,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x3def0040,0,0,0,0x3d990040,0,0,0,0x3d9a0040,0x1485000c,0x1489000c, +0x148e004c,0x1492000c,0x1497004c,0x149b000c,0x149f000c,0x3d9b0040,0,0,0,0x3d9c0040,0,0x3d9d0040,0,0x3d9e0040,0,0, +0,0,0,0x3da00040,0x14bb000c,0x14bf000c,0,0x14c3000c,0,0,0x3da40040,0x14c7000c,0,0,0,0, +0x14cb000c,0x14cf000c,0x14d3000c,0,0x3db20040,0,0,0x3da30040,0,0x3da20040,0x3db00040,0x3db60040,0x3da60040,0x14d7000c,0x3da50040,0, +0,0,0x3db80040,0,0,0,0,0x3da70040,0,0,0,0x3dbe0040,0,0,0,0x3dc00040, +0,0x3dbc0040,0,0,0x3db30040,0,0,0x3daa0040,0,0x3da90040,0x3db10040,0x3db70040,0x3da80040,0x14db000c,0x3dac0040,0, +0,0,0x3db90040,0,0,0,0,0x3dad0040,0,0,0,0x3dbf0040,0,0,0,0x3dc10040, +0,0x3dbd0040,0,0,0x14df000c,0x14e3000c,0,0x14e7000c,0,0,0x3dab0040,0x14eb000c,0,0,0,0, +0x14ef000c,0x14f3000c,0x14f7000c,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x3dae0040,0x3daf0040,0x14fb000c,0x14ff000c,0,0,0,0, +0,0,0,0,0,0x1503000c,0x1507000c,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x150b000c,0x150f000c,0x1513000c,0x1517000c,0,0,0x151b000c,0x151f000c,0x3db40040,0x3db50040,0x1523000c,0x1527000c, +0x152b000c,0x152f000c,0x1533000c,0x1537000c,0,0,0x153b000c,0x153f000c,0x1543000c,0x1547000c,0x154b000c,0x154f000c,0x3dba0040,0x3dbb0040,0x1553000c,0x1557000c, +0x155b000c,0x155f000c,0x1563000c,0x1567000c,0x156b000c,0x156f000c,0x1573000c,0x1577000c,0x157b000c,0x157f000c,0,0,0x1583000c,0x1587000c,0,0, +0,0,0,0,0,0,0x158b000c,0x158f000c,0x1593000c,0x1597000c,0x159b000c,0x3dc20040,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x159f000c,0x3dc60040,0x15a3000c,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x3dc70040,0x15a7000c,0,0x3dc50040,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600, +0xe600,0,0,0xe600,0,0,0,0,0,0,0,0,0x3dc80040,0x15ab000c,0,0, +0,0,0,0,0x3dc90040,0x15af000c,0,0x3dca0040,0x15b3000c,0,0,0,0,0,0,0, +0x207007b0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x3dcd0040,0,0x15c6000c,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x3dce0040,0x3dcf0040,0,0,0x15c9000c,0x15cc000c,0x15cf000c,0x900,0,0, +0,0,0,0,0,0,0,0x207700b0,0,0,0,0,0,0,0,0, +0,0,0x3dd00040,0,0x15d2000c,0,0,0,0,0x900,0,0,0,0,0,0, +0,0x5400,0x20785bb0,0,0,0,0,0,0,0,0,0,0x15d6000c,0,0x207900b0,0, +0,0,0x3dd20040,0x15d9000c,0x15dc000c,0,0x15e0004c,0x15e3000c,0,0x900,0,0,0,0,0,0, +0,0x207a00b0,0x207b00b0,0,0,0,0,0,0,0,0,0,0,0,0x3dd30040,0x3dd40040, +0,0,0x15e7000c,0x15ea000c,0x15ed000c,0x900,0,0,0,0,0,0,0,0,0,0x207d00b0, +0,0,0,0,0,0,0,0,0,0,0x207e09b0,0,0,0,0,0x207f00b0, +0,0,0,0,0,0,0,0,0,0x3dd50040,0x15f0000c,0,0x15f5004c,0x15f8000c,0x15fd000c,0x208000b0, +0,0,0,0,0,0x3dd60040,0x1600000c,0,0,0,0,0,0,0,0x208100b0,0, +0,0,0,0,0,0,0,0x700,0,0x900,0,0,0,0,0,0, +0,0x3dd70040,0x1603000c,0x3dd80040,0x1606000c,0x3dd90040,0x1609000c,0x3dda0040,0x160c000c,0x3ddb0040,0x160f000c,0,0,0x3ddc0040,0x1612000c,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x700,0x208200b0,0,0,0,0,0x3ddd0040,0x1615000c,0x3dde0040,0x1618000c,0x3ddf0040,0x3de00040, +0x161b000c,0x161e000c,0x3de10040,0x1621000c,0x900,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1624000c,0x1628000c,0x162c000c,0x1630000c,0x1634000c,0x1638000c,0x163c000c,0x1640000c,0x1644000c,0x1649000c,0x164e000c,0x1652000c,0x1656000c,0x165a000c,0x165e000c,0x1662000c, +0x1666000c,0x166a000c,0x166e000c,0x1672000c,0x1676000c,0x167b000c,0x1680000c,0x1685000c,0x168a000c,0x168e000c,0x1692000c,0x1696000c,0x169a000c,0x169f000c,0x16a4000c,0x16a8000c, +0x16ac000c,0x16b0000c,0x16b4000c,0x16b8000c,0x16bc000c,0x16c0000c,0x16c4000c,0x16c8000c,0x16cc000c,0x16d0000c,0x16d4000c,0x16d8000c,0x16dc000c,0x16e0000c,0x16e4000c,0x16e9000c, +0x16ee000c,0x16f2000c,0x16f6000c,0x16fa000c,0x16fe000c,0x1702000c,0x1707004c,0x170c004c,0x1710000c,0x1715000c,0x171a000c,0x171e000c,0x1722000c,0x1726000c,0x172a000c,0x172e000c, +0x1732000c,0x1736000c,0x173a000c,0x173e000c,0x1742000c,0x1746000c,0x174a000c,0x174e000c,0x1752000c,0x1756000c,0x175a000c,0x175e000c,0x1762000c,0x1767000c,0x176c000c,0x1771000c, +0x1776000c,0x177b000c,0x1780000c,0x1785000c,0x178a000c,0x178e000c,0x1792000c,0x1796000c,0x179a000c,0x179e000c,0x17a3004c,0x17a8004c,0x17ac000c,0x17b1000c,0x17b6000c,0x17ba000c, +0x17be000c,0x17c2000c,0x17c7004c,0x17cc004c,0x17d0000c,0x17d5000c,0x17da000c,0x17df000c,0x17e4000c,0x17e9000c,0x17ee000c,0x17f2000c,0x17f6000c,0x17fa000c,0x17fe000c,0x1802000c, +0x1806000c,0x180a000c,0x180e000c,0x1812000c,0x1816000c,0x181a000c,0x181e000c,0x1822000c,0x1826000c,0x182b000c,0x1830000c,0x1835000c,0x183a000c,0x183e000c,0x1842000c,0x1846000c, +0x184a000c,0x184e000c,0x1852000c,0x1856000c,0x185a000c,0x185e000c,0x1862000c,0x1866000c,0x186a000c,0x186e000c,0x1872000c,0x1876000c,0x187a000c,0x187e000c,0x1882000c,0x1886000c, +0x188a000c,0x188e000c,0x1892000c,0x1896000c,0x189a000c,0x189e000c,0x18a2000c,0x18a6000c,0x18aa000c,0x18ae000c,0x21f6000a,0x18b2000e,0,0,0,0, +0x18ba004c,0x18bf004c,0x18c3000c,0x18c7000c,0x18cb000c,0x18d0000c,0x18d5000c,0x18da000c,0x18df000c,0x18e4000c,0x18e9000c,0x18ee000c,0x18f3000c,0x18f8000c,0x18fd000c,0x1902000c, +0x1907000c,0x190c000c,0x1911000c,0x1916000c,0x191b000c,0x1920000c,0x1925000c,0x192a000c,0x1930004c,0x1935004c,0x1939000c,0x193d000c,0x1941000c,0x1945000c,0x1949000c,0x194e000c, +0x1953000c,0x1958000c,0x195d000c,0x1962000c,0x1967000c,0x196c000c,0x1971000c,0x1976000c,0x197b000c,0x197f000c,0x1983000c,0x1987000c,0x198c004c,0x1991004c,0x1995000c,0x1999000c, +0x199d000c,0x19a2000c,0x19a7000c,0x19ac000c,0x19b1000c,0x19b6000c,0x19bb000c,0x19c0000c,0x19c5000c,0x19ca000c,0x19cf000c,0x19d4000c,0x19d9000c,0x19de000c,0x19e3000c,0x19e8000c, +0x19ed000c,0x19f2000c,0x19f7000c,0x19fc000c,0x1a01000c,0x1a05000c,0x1a09000c,0x1a0d000c,0x1a11000c,0x1a16000c,0x1a1b000c,0x1a20000c,0x1a25000c,0x1a2a000c,0x1a2f000c,0x1a34000c, +0x1a39000c,0x1a3e000c,0x1a43000c,0x1a47000c,0x1a4b000c,0x1a4f000c,0x1a53000c,0x1a57000c,0x1a5b000c,0x1a5f000c,0,0,0,0,0,0, +0x1a64004c,0x1a69004c,0x1a6e004c,0x1a74004c,0x1a7a004c,0x1a80004c,0x1a86004c,0x1a8c004c,0x1a92004c,0x1a97004c,0x1a9c004c,0x1aa2004c,0x1aa8004c,0x1aae004c,0x1ab4004c,0x1aba004c, +0x1ac0004c,0x1ac5004c,0x1ac9000c,0x1ace000c,0x1ad3000c,0x1ad8000c,0,0,0x1ade004c,0x1ae3004c,0x1ae7000c,0x1aec000c,0x1af1000c,0x1af6000c,0,0, +0x1afc004c,0x1b01004c,0x1b06004c,0x1b0c004c,0x1b12004c,0x1b18004c,0x1b1e004c,0x1b24004c,0x1b2a004c,0x1b2f004c,0x1b34004c,0x1b3a004c,0x1b40004c,0x1b46004c,0x1b4c004c,0x1b52004c, +0x1b58004c,0x1b5d004c,0x1b61000c,0x1b66000c,0x1b6b000c,0x1b70000c,0x1b75000c,0x1b7a000c,0x1b80004c,0x1b85004c,0x1b89000c,0x1b8e000c,0x1b93000c,0x1b98000c,0x1b9d000c,0x1ba2000c, +0x1ba8004c,0x1bad004c,0x1bb1000c,0x1bb6000c,0x1bbb000c,0x1bc0000c,0,0,0x1bc6004c,0x1bcb004c,0x1bcf000c,0x1bd4000c,0x1bd9000c,0x1bde000c,0,0, +0x1be4004c,0x1be9004c,0x1bed000c,0x1bf2000c,0x1bf7000c,0x1bfc000c,0x1c01000c,0x1c06000c,0,0x1c0c004c,0,0x1c10000c,0,0x1c15000c,0,0x1c1a000c, +0x1c9a000c,0x1c9f000c,0x1ca4000c,0x1caa000c,0x1cb0000c,0x1cb6000c,0x1cbc000c,0x1cc2000c,0x1cc8000c,0x1ccd000c,0x1cd2000c,0x1cd8000c,0x1cde000c,0x1ce4000c,0x1cea000c,0x1cf0000c, +0x1cf6000c,0x1cfb000c,0x1d00000c,0x1d06000c,0x1d0c000c,0x1d12000c,0x1d18000c,0x1d1e000c,0x1d24000c,0x1d29000c,0x1d2e000c,0x1d34000c,0x1d3a000c,0x1d40000c,0x1d46000c,0x1d4c000c, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x3df00040,0,0x3df10040,0,0x3df20040,0,0,0,0,0,0x1eb6000c,0x1eba000c,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x1ebe000c,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x1ec2000c,0x1ec6000c,0x1eca000c, +0x3df30040,0,0x3df50040,0,0x3df40040,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x3df60040,0x1ece000c,0,0,0,0x3df70040,0x1ed2000c,0,0x3df80040,0x1ed6000c,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x3df90040,0x1eda000c,0x3dfa0040,0x1ede000c,0,0,0,0,0,0x235a000a,0x235d000a,0,0x2361000a, +0x2364000a,0,0,0,0,0,0,0,0,0,0,0,0x3dfb0040,0,0,0, +0,0x1ee2000c,0,0x3dfc0040,0x1ee6000c,0x3dfd0040,0,0x1eea000c,0x3dfe0040,0x1eee000c,0,0,0,0x3e010040,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1ef2000c,0x3e000040,0x1ef6000c,0,0x3e040040,0x3e050040,0,0,0,0,0,0,0,0x1efa000c,0x1efe000c,0x1f02000c, +0x1f06000c,0x1f0a000c,0x3e060040,0x3e070040,0x1f0e000c,0x1f12000c,0x3e080040,0x3e090040,0x1f16000c,0x1f1a000c,0x3e0a0040,0x3e0b0040,0x3e140040,0x3e150040,0,0, +0x1f1e000c,0x1f22000c,0x3e0c0040,0x3e0d0040,0x1f26000c,0x1f2a000c,0x3e0e0040,0x3e0f0040,0x1f2e000c,0x1f32000c,0,0,0,0,0,0, +0,0x3e160040,0x3e170040,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x3e100040,0,0,0,0,0,0x3e110040,0x3e120040,0,0x3e130040,0x1f36000c,0x1f3a000c,0x1f3e000c,0x1f42000c, +0,0,0x3e180040,0x3e190040,0x3e1a0040,0x3e1b0040,0,0,0,0,0,0,0,0,0,0, +0x1f46000c,0x1f4a000c,0x1f4e000c,0x1f52000c,0,0,0,0,0,0,0x1f56000c,0x1f5a000c,0x1f5e000c,0x1f62000c,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x3e300040,0,0,0,0,0x3e1c0040,0x1f66000c,0x3e1d0040,0x1f6a000c,0x3e1e0040,0x1f6e000c,0x3e1f0040,0x1f72000c,0x3e200040, +0x1f76000c,0x3e210040,0x1f7a000c,0x3e220040,0x1f7e000c,0x3e230040,0x1f82000c,0x3e240040,0x1f86000c,0x3e250040,0x1f8a000c,0x3e260040,0x1f8e000c,0x3e270040,0x1f92000c,0, +0x3e280040,0x1f96000c,0x3e290040,0x1f9a000c,0x3e2a0040,0x1f9e000c,0,0,0,0,0,0x3e2b0040,0x1fa2000c,0x1fa6000c,0x3e2c0040,0x1faa000c, +0x1fae000c,0x3e2d0040,0x1fb2000c,0x1fb6000c,0x3e2e0040,0x1fba000c,0x1fbe000c,0x3e2f0040,0x1fc2000c,0x1fc6000c,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1fca000c,0,0,0,0,0x208308b0,0x208408b0,0x26db000a,0x26df000a,0x3e310040,0x1fce000c,0x26e3000a,0,0,0,0, +0,0,0x3e460040,0,0,0,0,0x3e320040,0x1fd2000c,0x3e330040,0x1fd6000c,0x3e340040,0x1fda000c,0x3e350040,0x1fde000c,0x3e360040, +0x1fe2000c,0x3e370040,0x1fe6000c,0x3e380040,0x1fea000c,0x3e390040,0x1fee000c,0x3e3a0040,0x1ff2000c,0x3e3b0040,0x1ff6000c,0x3e3c0040,0x1ffa000c,0x3e3d0040,0x1ffe000c,0, +0x3e3e0040,0x2002000c,0x3e3f0040,0x2006000c,0x3e400040,0x200a000c,0,0,0,0,0,0x3e410040,0x200e000c,0x2012000c,0x3e420040,0x2016000c, +0x201a000c,0x3e430040,0x201e000c,0x2022000c,0x3e440040,0x2026000c,0x202a000c,0x3e450040,0x202e000c,0x2032000c,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x3e470040,0x3e480040,0x3e490040,0x3e4a0040,0, +0x2036000c,0,0,0x203a000c,0x203e000c,0x2042000c,0x2046000c,0,0,0x3e4b0040,0x204a000c,0x26e6000a,0x204fe6b0,0x2050e6b0,0x2051e6b0,0x2052e6b0, +0x2053e6b0,0xe600,0x2054e6b0,0x2055e6b0,0x2056e6b0,0x2057e6b0,0x2058e6b0,0x2059e6b0,0x205ae6b0,0xe600,0xe600,0x205be6b0,0xe600,0x205ce6b0,0xe600,0x205de6b0, +0x205ee6b0,0xe800,0xdc00,0xdc00,0xdc00,0xdc00,0xe800,0x205fd8b0,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0xca00,0xca00,0x2060dcb0, +0x2061dcb0,0x2062dcb0,0x2063dcb0,0x2064cab0,0x2065cab0,0xdc00,0xdc00,0xdc00,0xdc00,0x2066dcb0,0x2067dcb0,0xdc00,0x2068dcb0,0x2069dcb0,0xdc00,0xdc00, +0x100,0x100,0x100,0x100,0x206a01b0,0xdc00,0xdc00,0xdc00,0xdc00,0xe600,0xe600,0xe600,0,0,0,0, +0,0,0,0,0x3dc30040,0,0x3dc40040,0x1b00,0x1c00,0x1d00,0x1e00,0x1f00,0x2000,0x2100,0x2200,0x206de6b0, +0x206ee6b0,0x206fdcb0,0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xe600,0xe600,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x700,0,0x207100b0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x700,0,0x207300b0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x207600b0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x207c00b0,0,0,0xfff200b0,0xfff200b0,0xfff200b0, +0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0,0xfff200b0, +0xfff200b0,0xfff200b0,0,0,0,0,0,0,0,0,0,0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0, +0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0, +0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0xfff300b0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x2084000a,0,0,0,0,0,0,0,0x2087004a,0,0x208b000a,0, +0,0,0,0x208d000a,0,0,0x2091000a,0x2093000a,0x2095000a,0x2099000a,0,0,0x209b000a,0x209f000a,0x20a1000a,0, +0x20a3000a,0x20a7000a,0x20ab000a,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x20eb000a,0x20ed000a,0x20ef000a,0x20f1000a,0x20f3000a,0x20f5000a,0x20f7000a,0x20f9000a,0x20fb000a,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x20fd000a,0x2101000a,0x2105000a,0x2109000a,0x210d000a,0x2111000a,0,0, +0x2115000a,0x2117000a,0x2119000a,0x211b000a,0x211d000a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x2133000a,0,0,0,0,0,0,0,0,0,0xdc00,0xe600,0xe600, +0xe600,0xe600,0xdc00,0xe600,0xe600,0xe600,0xde00,0xdc00,0xe600,0xe600,0xe600,0xe600,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x2300,0,0,0, +0,0x2136000a,0x2139000a,0x213c000a,0x213f000a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x2142000a,0,0,0,0, +0x6700,0x6700,0x900,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x2145000a,0,0,0,0,0x7600,0x7600,0,0, +0,0,0,0,0,0,0,0,0x7a00,0x7a00,0x7a00,0x7a00,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x2148000a,0x214b000a,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x214e000a,0,0,0, +0,0,0,0,0,0,0,0,0xdc00,0xdc00,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x215a000a,0,0,0,0x2194000a,0x2196000a,0x2198000a,0x219a000a, +0x219c000a,0x219e000a,0x21a0000a,0x21a2000a,0x21a4000a,0x21a6000a,0x21a8000a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x21aa000a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x21ac000a,0x21ae000a,0x21b0000a,0x21b2000a,0x21b4000a,0x21b6000a,0x21b8000a,0x21ba000a,0x21bc000a,0x21be000a,0x21c0000a,0x21c2000a,0x21c4000a, +0x21c6000a,0x21c8000a,0x21ca000a,0x21cc000a,0x21ce000a,0x21d0000a,0x21d2000a,0x21d4000a,0x21d6000a,0x21d8000a,0x21da000a,0x21dc000a,0x21de000a,0x21e0000a,0x21e2000a,0x21e4000a, +0x21e6000a,0x21e8000a,0x21ea000a,0x21ec000a,0x21ee000a,0x21f0000a,0x21f2000a,0x21f4000a,0,0,0,0,0x2223000a,0x2225000a,0x2228000a,0, +0,0,0,0,0,0,0,0x222c000a,0,0,0,0x222e000a,0x2231000a,0,0x2235000a,0x2238000a, +0,0,0,0,0x223c000a,0,0x223f000a,0,0,0,0,0,0,0,0,0x2243000a, +0x2246000a,0x2249000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0x224c000a, +0,0,0,0,0,0,0,0x2251000a,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x2253000a,0x2255000a,0,0,0x2257000a,0x2259000a,0x225b000a,0x225d000a, +0x225f000a,0x2261000a,0x2263000a,0x2265000a,0x2267000a,0x2269000a,0x226b000a,0x226d000a,0x226f000a,0x2271000a,0x2273000a,0x2275000a,0x2277000a,0x2279000a,0x227b000a,0x227d000a, +0x227f000a,0x2281000a,0x2283000a,0x2285000a,0x2287000a,0x2289000a,0x228b000a,0,0x228d000a,0x228f000a,0x2291000a,0x2293000a,0x2295000a,0,0,0, +0,0,0,0,0,0,0,0,0x22fe000a,0x2300000a,0x2303000a,0x2307000a,0x230a000a,0x230c000a,0x230f000a,0x2313000a, +0x2318000a,0x231b000a,0x231d000a,0x2320000a,0x2324000a,0x2326000a,0x2328000a,0x232a000a,0x232c000a,0x232e000a,0x2331000a,0x2335000a,0x2338000a,0x233a000a,0x233d000a,0x2341000a, +0x2346000a,0x2349000a,0x234b000a,0x234e000a,0x2352000a,0x2354000a,0x2356000a,0x2358000a,0x2368000a,0x236a000a,0x236c000a,0x236e000a,0x2370000a,0x2372000a,0x2374000a,0x2376000a, +0x2378000a,0x237a000a,0x237d000a,0x2380000a,0x2383000a,0x2386000a,0x2389000a,0x238c000a,0x238f000a,0x2392000a,0x2395000a,0x2398000a,0x239b000a,0x239f000a,0x23a3000a,0x23a7000a, +0x23ab000a,0x23af000a,0x23b3000a,0x23b7000a,0x23bb000a,0x23bf000a,0x23c4000a,0x23c9000a,0x23ce000a,0x23d3000a,0x23d8000a,0x23dd000a,0x23e2000a,0x23e7000a,0x23ec000a,0x23f1000a, +0x23f6000a,0x23f9000a,0x23fc000a,0x23ff000a,0x2402000a,0x2405000a,0x2408000a,0x240b000a,0x240e000a,0x2411000a,0x2415000a,0x2419000a,0x241d000a,0x2421000a,0x2425000a,0x2429000a, +0x242d000a,0x2431000a,0x2435000a,0x2439000a,0x243d000a,0x2441000a,0x2445000a,0x2449000a,0x244d000a,0x2451000a,0x2455000a,0x2459000a,0x245d000a,0x2461000a,0x2465000a,0x2469000a, +0x246d000a,0x2471000a,0x2475000a,0x2479000a,0x247d000a,0x2481000a,0x2485000a,0x2489000a,0x248d000a,0x2491000a,0x2495000a,0x2499000a,0x249d000a,0x24a1000a,0x24a5000a,0x24a7000a, +0x24a9000a,0x24ab000a,0x24ad000a,0x24af000a,0x24b1000a,0x24b3000a,0x24b5000a,0x24b7000a,0x24b9000a,0x24bb000a,0x24bd000a,0x24bf000a,0x24c1000a,0x24c3000a,0x24c5000a,0x24c7000a, +0x24c9000a,0x24cb000a,0x24cd000a,0x24cf000a,0x24d1000a,0x24d3000a,0x24d5000a,0x24d7000a,0x24d9000a,0x24db000a,0x24dd000a,0x24df000a,0x24e1000a,0x24e3000a,0x24e5000a,0x24e7000a, +0x24e9000a,0x24eb000a,0x24ed000a,0x24ef000a,0x24f1000a,0x24f3000a,0x24f5000a,0x24f7000a,0x24f9000a,0x24fb000a,0x24fd000a,0x24ff000a,0x2501000a,0x2503000a,0x2505000a,0x2507000a, +0x2509000a,0x250b000a,0x250d000a,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x250f000a,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x2514000a,0x2518000a,0x251b000a,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x251f000a,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x2521000a,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x2523000a,0,0,0,0,0,0,0,0, +0,0,0,0,0x2525000a,0x2527000a,0x2529000a,0x252b000a,0x252d000a,0x252f000a,0x2531000a,0x2533000a,0x2535000a,0x2537000a,0x2539000a,0x253b000a, +0x253d000a,0x253f000a,0x2541000a,0x2543000a,0x2545000a,0x2547000a,0x2549000a,0x254b000a,0x254d000a,0x254f000a,0x2551000a,0x2553000a,0x2555000a,0x2557000a,0x2559000a,0x255b000a, +0x255d000a,0x255f000a,0x2561000a,0x2563000a,0x2565000a,0x2567000a,0x2569000a,0x256b000a,0x256d000a,0x256f000a,0x2571000a,0x2573000a,0x2575000a,0x2577000a,0x2579000a,0x257b000a, +0x257d000a,0x257f000a,0x2581000a,0x2583000a,0x2585000a,0x2587000a,0x2589000a,0x258b000a,0x258d000a,0x258f000a,0x2591000a,0x2593000a,0x2595000a,0x2597000a,0x2599000a,0x259b000a, +0x259d000a,0x259f000a,0x25a1000a,0x25a3000a,0x25a5000a,0x25a7000a,0x25a9000a,0x25ab000a,0x25ad000a,0x25af000a,0x25b1000a,0x25b3000a,0x25b5000a,0x25b7000a,0x25b9000a,0x25bb000a, +0x25bd000a,0x25bf000a,0x25c1000a,0x25c3000a,0x25c5000a,0x25c7000a,0x25c9000a,0x25cb000a,0x25cd000a,0x25cf000a,0x25d1000a,0x25d3000a,0x25d5000a,0x25d7000a,0x25d9000a,0x25db000a, +0x25dd000a,0x25df000a,0x25e1000a,0x25e3000a,0x25e5000a,0x25e7000a,0x25e9000a,0x25eb000a,0x25ed000a,0x25ef000a,0x25f1000a,0x25f3000a,0x25f5000a,0x25f7000a,0x25f9000a,0x25fb000a, +0x25fd000a,0x25ff000a,0x2601000a,0x2603000a,0x2605000a,0x2607000a,0x2609000a,0x260b000a,0x260d000a,0x260f000a,0x2611000a,0x2613000a,0x2615000a,0x2617000a,0x2619000a,0x261b000a, +0x261d000a,0x261f000a,0x2621000a,0x2623000a,0x2625000a,0x2627000a,0x2629000a,0x262b000a,0x262d000a,0x262f000a,0x2631000a,0x2633000a,0x2635000a,0x2637000a,0x2639000a,0x263b000a, +0x263d000a,0x263f000a,0x2641000a,0x2643000a,0x2645000a,0x2647000a,0x2649000a,0x264b000a,0x264d000a,0x264f000a,0x2651000a,0x2653000a,0x2655000a,0x2657000a,0x2659000a,0x265b000a, +0x265d000a,0x265f000a,0x2661000a,0x2663000a,0x2665000a,0x2667000a,0x2669000a,0x266b000a,0x266d000a,0x266f000a,0x2671000a,0x2673000a,0x2675000a,0x2677000a,0x2679000a,0x267b000a, +0x267d000a,0x267f000a,0x2681000a,0x2683000a,0x2685000a,0x2687000a,0x2689000a,0x268b000a,0x268d000a,0x268f000a,0x2691000a,0x2693000a,0x2695000a,0x2697000a,0x2699000a,0x269b000a, +0x269d000a,0x269f000a,0x26a1000a,0x26a3000a,0x26a5000a,0x26a7000a,0x26a9000a,0x26ab000a,0x26ad000a,0x26af000a,0x26b1000a,0x26b3000a,0x26b5000a,0x26b7000a,0x26b9000a,0x26bb000a, +0x26bd000a,0x26bf000a,0x26c1000a,0x26c3000a,0x26c5000a,0x26c7000a,0x26c9000a,0x26cb000a,0x26cd000a,0x26cf000a,0,0,0,0,0,0, +0,0,0,0,0x26d1000a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xda00,0xe400,0xe800,0xde00,0xe000,0xe000,0,0,0,0, +0,0,0x26d3000a,0,0x26d5000a,0x26d7000a,0x26d9000a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x26e9000a,0x26eb000a,0x26ed000a,0x26ef000a,0x26f1000a,0x26f3000a,0x26f5000a, +0x26f7000a,0x26f9000a,0x26fb000a,0x26fd000a,0x26ff000a,0x2701000a,0x2703000a,0x2705000a,0x2707000a,0x2709000a,0x270b000a,0x270d000a,0x270f000a,0x2711000a,0x2713000a,0x2715000a, +0x2717000a,0x2719000a,0x271b000a,0x271d000a,0x271f000a,0x2721000a,0x2723000a,0x2725000a,0x2727000a,0x2729000a,0x272b000a,0x272d000a,0x272f000a,0x2731000a,0x2733000a,0x2735000a, +0x2737000a,0x2739000a,0x273b000a,0x273d000a,0x273f000a,0x2741000a,0x2743000a,0x2745000a,0x2747000a,0x2749000a,0x274b000a,0x274d000a,0x274f000a,0x2751000a,0x2753000a,0x2755000a, +0x2757000a,0x2759000a,0x275b000a,0x275d000a,0x275f000a,0x2761000a,0x2763000a,0x2765000a,0x2767000a,0x2769000a,0x276b000a,0x276d000a,0x276f000a,0x2771000a,0x2773000a,0x2775000a, +0x2777000a,0x2779000a,0x277b000a,0x277d000a,0x277f000a,0x2781000a,0x2783000a,0x2785000a,0x2787000a,0x2789000a,0x278b000a,0x278d000a,0x278f000a,0x2791000a,0x2793000a,0x2795000a, +0x2797000a,0x2799000a,0x279b000a,0x279d000a,0x279f000a,0x27a1000a,0x27a3000a,0,0,0,0x27a5000a,0x27a7000a,0x27a9000a,0x27ab000a,0x27ad000a,0x27af000a, +0x27b1000a,0x27b3000a,0x27b5000a,0x27b7000a,0x27b9000a,0x27bb000a,0x27bd000a,0x27bf000a,0x27c1000a,0x27c5000a,0x27c9000a,0x27cd000a,0x27d1000a,0x27d5000a,0x27d9000a,0x27dd000a, +0x27e1000a,0x27e5000a,0x27e9000a,0x27ed000a,0x27f1000a,0x27f5000a,0x27f9000a,0x27fe000a,0x2803000a,0x2808000a,0x280d000a,0x2812000a,0x2817000a,0x281c000a,0x2821000a,0x2826000a, +0x282b000a,0x2830000a,0x2835000a,0x283a000a,0x283f000a,0x2844000a,0x284c000a,0,0x2853000a,0x2857000a,0x285b000a,0x285f000a,0x2863000a,0x2867000a,0x286b000a,0x286f000a, +0x2873000a,0x2877000a,0x287b000a,0x287f000a,0x2883000a,0x2887000a,0x288b000a,0x288f000a,0x2893000a,0x2897000a,0x289b000a,0x289f000a,0x28a3000a,0x28a7000a,0x28ab000a,0x28af000a, +0x28b3000a,0x28b7000a,0x28bb000a,0x28bf000a,0x28c3000a,0x28c7000a,0x28cb000a,0x28cf000a,0x2910000a,0x2912000a,0x2914000a,0x2916000a,0x2918000a,0x291a000a,0x291c000a,0x291e000a, +0x2920000a,0x2922000a,0x2924000a,0x2926000a,0x2928000a,0x292a000a,0x292c000a,0x292f000a,0x2932000a,0x2935000a,0x2938000a,0x293b000a,0x293e000a,0x2941000a,0x2944000a,0x2947000a, +0x294a000a,0x294d000a,0x2950000a,0x2953000a,0x2956000a,0x295c000a,0x2961000a,0,0x2964000a,0x2966000a,0x2968000a,0x296a000a,0x296c000a,0x296e000a,0x2970000a,0x2972000a, +0x2974000a,0x2976000a,0x2978000a,0x297a000a,0x297c000a,0x297e000a,0x2980000a,0x2982000a,0x2984000a,0x2986000a,0x2988000a,0x298a000a,0x298c000a,0x298e000a,0x2990000a,0x2992000a, +0x2994000a,0x2996000a,0x2998000a,0x299a000a,0x299c000a,0x299e000a,0x29a0000a,0x29a2000a,0x29a4000a,0x29a6000a,0x29a8000a,0x29aa000a,0x29ac000a,0x29ae000a,0x29b0000a,0x29b2000a, +0x29b4000a,0x29b6000a,0x29b8000a,0x29ba000a,0x29bc000a,0x29be000a,0x29c0000a,0x29c2000a,0x29c4000a,0x29c6000a,0x29c9000a,0x29cc000a,0x29cf000a,0x29d2000a,0x29d5000a,0x29d8000a, +0x29db000a,0x29de000a,0x29e1000a,0x29e4000a,0x29e7000a,0x29ea000a,0x29ed000a,0x29f0000a,0x2a3e000a,0x2a40000a,0x2a42000a,0x2a44000a,0x2a46000a,0x2a48000a,0x2a4a000a,0x2a4c000a, +0x2a4e000a,0x2a50000a,0x2a52000a,0x2a54000a,0x2a56000a,0x2a58000a,0x2a5a000a,0x2a5c000a,0x2a5e000a,0x2a60000a,0x2a62000a,0x2a64000a,0x2a66000a,0x2a68000a,0x2a6a000a,0x2a6c000a, +0x2a6e000a,0x2a70000a,0x2a72000a,0x2a74000a,0x2a76000a,0x2a78000a,0x2a7a000a,0,0x2a7c000a,0x2a82000a,0x2a87000a,0x2a8d000a,0x2a91000a,0x2a98000a,0x2a9c000a,0x2aa0000a, +0x2aa8000a,0x2aad000a,0x2ab1000a,0x2ab5000a,0x2ab9000a,0x2abe000a,0x2ac3000a,0x2ac8000a,0x2acd000a,0x2ad3000a,0x2ad8000a,0x2add000a,0x2ae4000a,0x2ae7000a,0x2aee000a,0x2af5000a, +0x2afb000a,0x2b00000a,0x2b07000a,0x2b0e000a,0x2b13000a,0x2b17000a,0x2b1b000a,0x2b21000a,0x2b26000a,0x2b2c000a,0x2b33000a,0x2b37000a,0x2b3b000a,0x2b40000a,0x2b44000a,0x2b48000a, +0x2b4b000a,0x2b4e000a,0x2b52000a,0x2b56000a,0x2b5d000a,0x2b62000a,0x2b68000a,0x2b6f000a,0x2b74000a,0x2b78000a,0x2b7c000a,0x2b84000a,0x2b89000a,0x2b90000a,0x2b94000a,0x2b9a000a, +0x2b9e000a,0x2ba3000a,0x2ba7000a,0x2bac000a,0x2bb3000a,0x2bb8000a,0x2bbe000a,0x2bc3000a,0x2bc6000a,0x2bcd000a,0x2bd1000a,0x2bd5000a,0x2bda000a,0x2bde000a,0x2be2000a,0x2be6000a, +0x2bec000a,0x2bf1000a,0x2bf4000a,0x2bfb000a,0x2c00000a,0x2c06000a,0x2c0b000a,0x2c11000a,0x2c15000a,0x2c19000a,0x2c1e000a,0x2c21000a,0x2c26000a,0x2c2c000a,0x2c2f000a,0x2c36000a, +0x2c3a000a,0x2c3d000a,0x2c40000a,0x2c43000a,0x2c46000a,0x2c49000a,0x2c4c000a,0x2c4f000a,0x2d62000a,0x2d65000a,0x2d68000a,0x2d6b000a,0x2d6e000a,0x2d71000a,0x2d74000a,0x2d77000a, +0x2d7a000a,0x2d7d000a,0x2d81000a,0x2d85000a,0x2d89000a,0x2d8d000a,0x2d91000a,0x2d95000a,0x2d99000a,0x2d9d000a,0x2da1000a,0x2da5000a,0x2da9000a,0x2dad000a,0x2db1000a,0x2db5000a, +0x2db9000a,0x2dbd000a,0x2dc1000a,0x2dc5000a,0x2dc9000a,0x2dcd000a,0x2dd1000a,0x2dd5000a,0x2e36000a,0x2e38000a,0x2e3a000a,0x2e3c000a,0x2e3e000a,0x2e40000a,0x2e42000a,0x2e44000a, +0x2e46000a,0x2e48000a,0x2e4a000a,0x2e4c000a,0x2e4e000a,0x2e50000a,0x2e52000a,0x2e54000a,0x2e56000a,0x2e58000a,0x2e5a000a,0x2e5c000a,0x2e5e000a,0x2e60000a,0x2e62000a,0x2e64000a, +0x2e66000a,0x2e68000a,0x2e6a000a,0x2e6c000a,0x2e6e000a,0x2e70000a,0x2e72000a,0x2e74000a,0x2e76000a,0x2e78000a,0x2e7a000a,0x2e7c000a,0x2e7e000a,0x2e80000a,0x2e82000a,0x2e84000a, +0x2e86000a,0x2e88000a,0x2e8a000a,0x2e8c000a,0x2e8e000a,0x2e90000a,0x2e92000a,0x2e94000a,0x2e96000a,0x2e98000a,0x2e9a000a,0x2e9c000a,0x2e9e000a,0x2ea0000a,0x2ea2000a,0x2ea4000a, +0x2ea6000a,0x2ea8000a,0x2eaa000a,0x2eac000a,0x2eae000a,0x2eb0000a,0x2eb2000a,0x2eb4000a,0x2eb6000a,0x2eb8000a,0x2eba000a,0x2ebc000a,0x2ebe000a,0x2ec2000a,0x2ec6000a,0x2ec8000a, +0x2eca000a,0x2ecc000a,0x2ece000a,0x2ed0000a,0x2ed2000a,0x2ed4000a,0x2ed6000a,0x2ed8000a,0x2eda000a,0x2ede000a,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2ee2000a, +0x2ee4000a,0x2ee6000a,0x2ee8000a,0x2eea000a,0x2eec000a,0x2eee000a,0x2ef0000a,0x2ef2000a,0x2ef4000a,0x2ef6000a,0x2ef9000a,0x2efb000a,0x2efd000a,0x2eff000a,0x2f01000a,0x2f03000a, +0x2f05000a,0x2f07000a,0x2f09000a,0x2f0b000a,0x2f0d000a,0x2f0f000a,0x2f11000a,0x2f15000a,0x2f19000a,0x2f1d000a,0x2f21000a,0x2f25000a,0x2f29000a,0x2f2d000a,0x2f31000a,0x2f35000a, +0x2f39000a,0x2f3d000a,0x2f41000a,0x2f45000a,0x2f49000a,0x2f4d000a,0x2f51000a,0x2f55000a,0x2f59000a,0x2f5b000a,0x2f5d000a,0x2f5f000a,0x2f61000a,0x2f65000a,0x2f69000a,0x2f6d000a, +0x2f71000a,0x2f75000a,0x2f78000a,0x2f7b000a,0x2f7e000a,0x2f81000a,0x2f84000a,0x2f87000a,0x2f8a000a,0x2f8d000a,0x2f90000a,0x2f93000a,0x2f96000a,0x2f99000a,0x2f9c000a,0x2f9f000a, +0x2fa2000a,0x2fa5000a,0x2fa8000a,0x2fab000a,0x2fae000a,0x2fb1000a,0x2fb4000a,0x2fb7000a,0x2fba000a,0x2fbd000a,0x2fc0000a,0x2fc3000a,0x2fc6000a,0x2fc9000a,0x2fcc000a,0x2fcf000a, +0x2fd2000a,0x2fd5000a,0x2fd8000a,0x2fdb000a,0x2fde000a,0x2fe1000a,0x2fe4000a,0x2fe7000a,0x2fea000a,0x2fed000a,0x2ff0000a,0x2ff3000a,0x2ff6000a,0x2ff9000a,0x2ffc000a,0x2fff000a, +0x3002000a,0x3005000a,0x3008000a,0x300b000a,0x300e000a,0x3011000a,0x3014000a,0x3017000a,0x301a000a,0x301d000a,0x3020000a,0x3023000a,0x3026000a,0x3029000a,0x302c000a,0x302f000a, +0x3032000a,0x3035000a,0x3038000a,0x303b000a,0x303e000a,0x3041000a,0x3044000a,0x3047000a,0x304a000a,0x304d000a,0x3050000a,0x3053000a,0x3056000a,0x3059000a,0x305c000a,0x305f000a, +0x3062000a,0x3065000a,0x3068000a,0x306b000a,0x306e000a,0x3071000a,0x3074000a,0x3077000a,0x307b000a,0x307f000a,0x3083000a,0x3088000a,0x308d000a,0x3092000a,0x3097000a,0x309c000a, +0x30a1000a,0x30a5000a,0x30a9000a,0x30ad000a,0x30b1000a,0x30b5000a,0x30b9000a,0x30bc000a,0x30bf000a,0x30c2000a,0x30c5000a,0x30c8000a,0x30cb000a,0x30ce000a,0x30d1000a,0x30d4000a, +0x30d7000a,0x30da000a,0x30dd000a,0x30e0000a,0x30e3000a,0x30e6000a,0x30e9000a,0x30ec000a,0x30ef000a,0x30f2000a,0x30f5000a,0x30f8000a,0x30fb000a,0x30fe000a,0x3101000a,0x3104000a, +0x3107000a,0x310a000a,0x310d000a,0x3110000a,0x3113000a,0x3116000a,0x3119000a,0x311c000a,0x311f000a,0x3122000a,0x3125000a,0x3128000a,0x312b000a,0x312f000a,0x3132000a,0x3135000a, +0x3138000a,0x313b000a,0x313e000a,0x3141000a,0x3145000a,0x3149000a,0x314d000a,0x3151000a,0x3155000a,0x3158000a,0x315b000a,0x315e000a,0x3161000a,0x3164000a,0x3167000a,0x316a000a, +0x316d000a,0x3170000a,0x3173000a,0x3176000a,0x3179000a,0x317c000a,0x317f000a,0x3182000a,0x3185000a,0x3188000a,0x318b000a,0x318e000a,0x3191000a,0x3194000a,0x3197000a,0x319a000a, +0x319d000a,0x31a0000a,0x31a3000a,0x31a6000a,0x31a9000a,0x31ac000a,0x31af000a,0x31b2000a,0x31b5000a,0x31b8000a,0x31bb000a,0x31be000a,0x31c1000a,0x31c4000a,0x31c7000a,0x31ca000a, +0x31cd000a,0x31d0000a,0x31d3000a,0x31d6000a,0x31d9000a,0x31dc000a,0x31df000a,0x31e2000a,0x31e5000a,0x31e8000a,0x31eb000a,0x31ee000a,0x31f1000a,0x31f4000a,0x31f7000a,0x31fa000a, +0x31fd000a,0x3200000a,0x3203000a,0x3206000a,0x3209000a,0x320c000a,0x3210000a,0x3213000a,0x3216000a,0x3219000a,0x321c000a,0x321f000a,0x3223000a,0x3227000a,0x322a000a,0x322d000a, +0x3230000a,0x3233000a,0x3236000a,0x3239000a,0x323c000a,0x323f000a,0x3242000a,0x3245000a,0x3248000a,0x324b000a,0x324e000a,0x3251000a,0x3254000a,0x3257000a,0x325a000a,0x325f000a, +0x3264000a,0x3269000a,0x326c000a,0x326f000a,0x3272000a,0x3275000a,0x3278000a,0x327b000a,0x327e000a,0x3281000a,0x3284000a,0x3287000a,0x328a000a,0x328d000a,0x3290000a,0x3293000a, +0x3296000a,0x3299000a,0x329c000a,0x329f000a,0x32a2000a,0x32a5000a,0x32a8000a,0x32ab000a,0x32ae000a,0x32b1000a,0x32b4000a,0x32b7000a,0x32ba000a,0x32bd000a,0x32c0000a,0x32c3000a, +0x32c6000a,0x32c9000a,0x32cc000a,0x32cf000a,0x32d2000a,0x32d5000a,0x32d8000a,0x32db000a,0x32de000a,0x32e1000a,0x32e4000a,0x32e7000a,0x32ea000a,0x32ed000a,0x32f0000a,0x32f3000a, +0x32f6000a,0x32f9000a,0x32fc000a,0x32ff000a,0x3302000a,0x3305000a,0x3308000a,0x330b000a,0x330e000a,0x3311000a,0x3314000a,0x3317000a,0x331a000a,0x331d000a,0x3320000a,0x3323000a, +0x3326000a,0x3329000a,0x332c000a,0x332f000a,0x3332000a,0x3335000a,0x3338000a,0x333b000a,0x333e000a,0x3342000a,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x3346000a,0x334a000a,0x334e000a,0x3352000a, +0x3356000a,0x335a000a,0x335e000a,0x3362000a,0x3366000a,0x336a000a,0x336e000a,0x3372000a,0x3376000a,0x337a000a,0x337e000a,0x3382000a,0x3386000a,0x338a000a,0x338e000a,0x3392000a, +0x3396000a,0x339a000a,0x339e000a,0x33a2000a,0x33a6000a,0x33aa000a,0x33ae000a,0x33b2000a,0x33b6000a,0x33ba000a,0x33be000a,0x33c2000a,0x33c6000a,0x33ca000a,0x33ce000a,0x33d2000a, +0x33d6000a,0x33da000a,0x33de000a,0x33e2000a,0x33e6000a,0x33ea000a,0x33ee000a,0x33f2000a,0x33f6000a,0x33fa000a,0x33fe000a,0x3402000a,0x3406000a,0x340a000a,0x340e000a,0x3412000a, +0x3416000a,0x341a000a,0x341e000a,0x3422000a,0x3426000a,0x342a000a,0x342e000a,0x3432000a,0x3436000a,0x343a000a,0x343e000a,0x3442000a,0,0,0x3446000a,0x344a000a, +0x344e000a,0x3452000a,0x3456000a,0x345a000a,0x345e000a,0x3462000a,0x3466000a,0x346a000a,0x346e000a,0x3472000a,0x3476000a,0x347a000a,0x347e000a,0x3482000a,0x3486000a,0x348a000a, +0x348e000a,0x3492000a,0x3496000a,0x349a000a,0x349e000a,0x34a2000a,0x34a6000a,0x34aa000a,0x34ae000a,0x34b2000a,0x34b6000a,0x34ba000a,0x34be000a,0x34c2000a,0x34c6000a,0x34ca000a, +0x34ce000a,0x34d2000a,0x34d6000a,0x34da000a,0x34de000a,0x34e2000a,0x34e6000a,0x34ea000a,0x34ee000a,0x34f2000a,0x34f6000a,0x34fa000a,0x34fe000a,0x3502000a,0x3506000a,0x350a000a, +0x350e000a,0x3512000a,0x3516000a,0x351a000a,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x351e000a,0x3522000a,0x3526000a,0x352b000a, +0x3530000a,0x3535000a,0x353a000a,0x353f000a,0x3544000a,0x3549000a,0x354d000a,0x3560000a,0x3569000a,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x356e000a,0x3570000a,0x3572000a,0x3574000a, +0x3576000a,0x3578000a,0x357a000a,0x357c000a,0x357e000a,0x3580000a,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600, +0,0,0,0,0,0,0,0,0,0,0,0,0x3584000a,0x3587000a,0x3589000a,0x358b000a, +0x358d000a,0x358f000a,0x3591000a,0x3593000a,0x3595000a,0x3597000a,0x3599000a,0x359b000a,0x359d000a,0x359f000a,0x35a1000a,0x35a3000a,0x35a5000a,0x35a7000a,0x35a9000a,0x35ab000a, +0x35ad000a,0,0,0x35af000a,0x35b1000a,0x35b3000a,0x35b7000a,0x35bb000a,0x35bf000a,0x35c3000a,0x35c5000a,0x35c7000a,0x35c9000a,0x35cb000a,0x35cd000a,0, +0x35cf000a,0x35d1000a,0x35d3000a,0x35d5000a,0x35d7000a,0x35d9000a,0x35db000a,0x35dd000a,0x35df000a,0x35e1000a,0x35e3000a,0x35e5000a,0x35e7000a,0x35e9000a,0x35eb000a,0x35ed000a, +0x35ef000a,0x35f1000a,0x35f3000a,0,0x35f5000a,0x35f7000a,0x35f9000a,0x35fb000a,0,0,0,0,0x35fd000a,0x3601000a,0x3605000a,0, +0x3609000a,0,0x360d000a,0x3611000a,0x3615000a,0x3619000a,0x361d000a,0x3621000a,0x3625000a,0x3629000a,0x362d000a,0x3631000a,0x3635000a,0x3637000a,0x363b000a,0x363f000a, +0x3643000a,0x3647000a,0x364b000a,0x364f000a,0x3653000a,0x3657000a,0x365b000a,0x365f000a,0x3663000a,0x3667000a,0x3669000a,0x366b000a,0x366d000a,0x366f000a,0x3671000a,0x3673000a, +0x3675000a,0x3677000a,0x3679000a,0x367b000a,0x367d000a,0x367f000a,0x3681000a,0x3683000a,0x3685000a,0x3687000a,0x3689000a,0x368b000a,0x368d000a,0x368f000a,0x3691000a,0x3693000a, +0x3695000a,0x3697000a,0x3699000a,0x369b000a,0x369d000a,0x369f000a,0x36a1000a,0x36a3000a,0x36a5000a,0x36a7000a,0x36a9000a,0x36ab000a,0x36ad000a,0x36af000a,0x36b1000a,0x36b3000a, +0x36b5000a,0x36b7000a,0x36b9000a,0x36bb000a,0x36bd000a,0x36bf000a,0x36c1000a,0x36c3000a,0x36c5000a,0x36c7000a,0x36c9000a,0x36cb000a,0x36cd000a,0x36cf000a,0x36d1000a,0x36d3000a, +0x36d5000a,0x36d7000a,0x36d9000a,0x36db000a,0x36dd000a,0x36df000a,0x36e1000a,0x36e3000a,0x36e5000a,0x36e7000a,0x36e9000a,0x36eb000a,0x36ed000a,0x36ef000a,0x36f1000a,0x36f3000a, +0x36f5000a,0x36f7000a,0x36f9000a,0x36fb000a,0x36fd000a,0x36ff000a,0x3701000a,0x3703000a,0x3705000a,0x3707000a,0x3709000a,0x370b000a,0x370d000a,0x370f000a,0x3711000a,0x3713000a, +0x3715000a,0x3717000a,0x3719000a,0x371b000a,0x371d000a,0x371f000a,0x3721000a,0x3723000a,0x3725000a,0x3727000a,0x3729000a,0x372b000a,0x372d000a,0x372f000a,0x3731000a,0x3733000a, +0x3735000a,0x3737000a,0x373c000a,0x3741000a,0x3746000a,0x374b000a,0x3750000a,0x3755000a,0x3758000a,0,0,0,0,0x375b000a,0x375d000a,0x375f000a, +0x3761000a,0x3763000a,0x3765000a,0x3767000a,0x3769000a,0x376b000a,0x376d000a,0x376f000a,0x3771000a,0x3773000a,0x3775000a,0x3777000a,0x3779000a,0x377b000a,0x377d000a,0x377f000a, +0x3781000a,0x3783000a,0x3785000a,0x3787000a,0x3789000a,0x378b000a,0x378d000a,0x378f000a,0x3791000a,0x3793000a,0x3795000a,0x3797000a,0x3799000a,0x379b000a,0x379d000a,0x379f000a, +0x37a1000a,0x37a3000a,0x37a5000a,0x37a7000a,0x37a9000a,0x37ab000a,0x37ad000a,0x37af000a,0x37b1000a,0x37b3000a,0x37b5000a,0x37b7000a,0x37b9000a,0x37bb000a,0x37bd000a,0x37bf000a, +0x37c1000a,0x37c3000a,0x37c5000a,0x37c7000a,0x37c9000a,0x37cb000a,0x37cd000a,0x37cf000a,0x37d1000a,0x37d3000a,0x37d5000a,0x37d7000a,0x37d9000a,0x37db000a,0x37dd000a,0x37df000a, +0x37e1000a,0x37e3000a,0x37e5000a,0x37e7000a,0x37e9000a,0x37eb000a,0x37ed000a,0x37ef000a,0x37f1000a,0x37f3000a,0x37f5000a,0x37f7000a,0x37f9000a,0x37fb000a,0x37fd000a,0x37ff000a, +0x3801000a,0x3803000a,0x3805000a,0x3807000a,0x3809000a,0x380b000a,0x380d000a,0x380f000a,0x3811000a,0x3813000a,0x3815000a,0x3817000a,0x3819000a,0x381b000a,0x381d000a,0x381f000a, +0x3821000a,0x3823000a,0x3825000a,0x3827000a,0x3829000a,0x382b000a,0x382d000a,0x382f000a,0x3831000a,0x3833000a,0x3835000a,0x3837000a,0x3839000a,0x383b000a,0x383d000a,0x383f000a, +0x3841000a,0x3843000a,0x3845000a,0x3847000a,0x3849000a,0x384b000a,0x384d000a,0x384f000a,0x3851000a,0x3853000a,0x3855000a,0x3857000a,0x3859000a,0x385b000a,0x385d000a,0x385f000a, +0x3861000a,0x3863000a,0x3865000a,0x3867000a,0x3869000a,0x386b000a,0x386d000a,0x386f000a,0x3871000a,0x3873000a,0x3875000a,0x3877000a,0x3879000a,0x387b000a,0x387d000a,0x387f000a, +0x3881000a,0x3883000a,0x3885000a,0x3887000a,0x3889000a,0x388b000a,0x388d000a,0x388f000a,0x3891000a,0x3893000a,0x3895000a,0x3898000a,0x389b000a,0x389d000a,0x389f000a,0x38a1000a, +0x38a3000a,0x38a5000a,0x38a7000a,0x38a9000a,0x38ab000a,0x38ad000a,0x38af000a,0x38b1000a,0x38b3000a,0x38b5000a,0x38b7000a,0x38b9000a,0x38bb000a,0x38bd000a,0x38bf000a,0x38c1000a, +0x38c3000a,0x38c5000a,0x38c7000a,0x38c9000a,0x38cb000a,0x38cd000a,0x38cf000a,0x38d1000a,0x38d3000a,0x38d5000a,0x38d7000a,0,0,0,0x38d9000a,0x38db000a, +0x38dd000a,0x38df000a,0x38e1000a,0x38e3000a,0,0,0x38e5000a,0x38e7000a,0x38e9000a,0x38eb000a,0x38ed000a,0x38ef000a,0,0,0x38f1000a,0x38f3000a, +0x38f5000a,0x38f7000a,0x38f9000a,0x38fb000a,0,0,0x38fd000a,0x38ff000a,0x3901000a,0,0,0,0x3903000a,0x3905000a,0x3907000a,0x3909000a, +0x390d000a,0x390f000a,0x3911000a,0,0x3913000a,0x3915000a,0x3917000a,0x3919000a,0x391b000a,0x391d000a,0x391f000a,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x3d27000a,0x3d29000a,0x3d2b000a,0x3d2d000a, +0x3d2f000a,0x3d31000a,0x3d33000a,0x3d35000a,0x3d37000a,0x3d39000a,0x3d3b000a,0x3d3d000a,0x3d3f000a,0x3d41000a,0x3d43000a,0x3d45000a,0x3d47000a,0x3d49000a,0x3d4b000a,0x3d4d000a, +0x3d4f000a,0x3d51000a,0x3d53000a,0x3d55000a,0x3d57000a,0x3d59000a,0x3d5b000a,0x3d5d000a,0x3d5f000a,0x3d61000a,0x3d63000a,0x3d65000a,0,0x3d680040,0x3de20040,0x3d690040, +0x3d780040,0x3d6a0040,0x3de40040,0x3d7a0040,0x3d7c0040,0x3d6b0040,0x3d7e0040,0x3d800040,0x3d820040,0x3de60040,0x3d6c0040,0x3d6d0040,0x3de80040,0,0x3d840040,0x3d860040, +0x3d880040,0x3d6e0040,0x3dea0040,0x3d8a0040,0x3dec0040,0x3d6f0040,0x3d8c0040,0,0,0,0,0,0,0x3d700040,0x3de30040,0x3d710040, +0x3d790040,0x3d720040,0x3de50040,0x3d7b0040,0x3d7d0040,0x3d730040,0x3d7f0040,0x3d810040,0x3d830040,0x3de70040,0x3d740040,0x3d750040,0x3de90040,0,0x3d850040,0x3d870040, +0x3d890040,0x3d760040,0x3deb0040,0x3d8b0040,0x3ded0040,0x3d770040,0x3d8d0040,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x3d910040,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe600,0xe600,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00,0xdc00, +0xe600,0xe600,0xdc00,0xe600,0xe600,0xde00,0xe400,0xe600,0xa00,0xb00,0xc00,0xd00,0xe00,0xf00,0x1000,0x1100, +0x1200,0x1300,0x1300,0x1400,0x1500,0x1600,0,0x1700,0,0x1800,0x1900,0,0xe600,0xdc00,0,0x1200, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0,0, +0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0xdc00,0xe600,0,0,0xe600, +0xe600,0,0xdc00,0xe600,0xe600,0xdc00,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x2400,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0xdc00,0xe600,0xe600, +0xdc00,0xe600,0xe600,0xdc00,0xdc00,0xdc00,0xe600,0xdc00,0xdc00,0xe600,0xdc00,0xe600,0xe600,0xe600,0xdc00,0xe600, +0xdc00,0xe600,0xdc00,0xe600,0xdc00,0xe600,0xe600,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600, +0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xe600,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x700,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x900,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x700,0,0,0x3dd10040,0,0,0,0,0,0,0,0, +0x6b00,0x6b00,0x6b00,0x6b00,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xdc00,0,0xdc00,0,0xd800,0,0, +0,0,0,0,0,0,0xdc00,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xe600,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x900,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x900,0,0,0,0,0,0,0,0,0,0,0xe600,0,0, +0,0,0,0,0,0,0,0,0,0xe400,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xde00,0xe600,0xdc00,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600, +0xdc00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600, +0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0,0,0,0,0,0,0,0, +0,0,0,0,0xe600,0xe600,0xdc00,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0xdc00, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xe600,0xe600,0x100,0x100,0xe600,0xe600,0xe600,0xe600,0x100,0x100,0x100,0xe600,0xe600,0,0,0, +0,0xe600,0,0,0,0x100,0x100,0xe600,0xdc00,0xe600,0x100,0x100,0xdc00,0xdc00,0xdc00,0xdc00, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x3e020040,0x3dff0040,0x3e030040,0, +0,0,0,0,0,0,0x900,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0xdc00,0,0xe600,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe600,0x100,0xdc00,0, +0,0,0,0x900,0xdc00,0xdc00,0xdc00,0,0,0xe600,0xe600,0xe600,0xe600,0xe600,0xdc00,0xdc00, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xe600,0xe600,0xe600,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040, +0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c, +#else /* U_DARWIN */ +0,0,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0x6b00,0,0, +0,0,0,0,0,0,0,0x1200,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xdc00,0,0xe600,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xe600,0x100,0xdc00,0,0,0,0,0x900,0xdc00,0xdc00,0xdc00,0,0,0xe600,0xe600,0xe600, +0xe600,0xe600,0xdc00,0xdc00,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xe600,0xe600,0xe600,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040, +0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0xfff10040,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c, +#endif /* U_DARWIN */ +0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c, +#ifndef U_DARWIN +0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0xfff0000c,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0xfc01ff00,0,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0,0,0xfc01ff00,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0xfc02ff0f,0xfc03000a,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0xfc02ff0f,0xfc03000a,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0xfc04000f,0 +#else /* U_DARWIN */ +0,0,0,0,0,0,0xfc04000f,0 +#endif /* U_DARWIN */ +}; + +static const UTrie normTrie={ + normTrie_index, + normTrie_data32, + getFoldingNormOffset, + 2208, +#ifndef U_DARWIN + 9236, +#else /* U_DARWIN */ + 9272, +#endif /* U_DARWIN */ + 0, + FALSE +}; + +static const uint16_t extraData[15947]={ +0x13b,0xff02,0x20,0x3b9,0xff01,0x3c5,0xff01,0x3cd,0xff01,0x3cb,0xff01,0x3c3,0xff01,0x61,0xff01,0xe6, +0xff01,0x62,0xff01,0x64,0xff01,0x65,0xff01,0x1dd,0xff01,0x67,0xff01,0x68,0xff01,0x69,0xff01,0x6a, +0xff01,0x6b,0xff01,0x6c,0xff01,0x6d,0xff01,0x6e,0xff01,0x6f,0xff01,0x223,0xff01,0x70,0xff01,0x72, +0xff01,0x74,0xff01,0x75,0xff01,0x77,0xff02,0x72,0x73,0xff01,0x63,0xff02,0xb0,0x63,0xff01,0x25b, +0xff02,0xb0,0x66,0xff02,0x6e,0x6f,0xff01,0x71,0xff02,0x73,0x6d,0xff03,0x74,0x65,0x6c,0xff02, +0x74,0x6d,0xff01,0x7a,0xff03,0x66,0x61,0x78,0xff01,0x3b3,0xff01,0x3c0,0xff03,0x70,0x74,0x65, +0xff02,0x68,0x67,0xff02,0x65,0x76,0xff03,0x6c,0x74,0x64,0xff03,0x68,0x70,0x61,0xff02,0x61, +0x75,0xff02,0x6f,0x76,0xff02,0x69,0x75,0xff02,0x70,0x61,0xff02,0x6e,0x61,0xff02,0x3bc,0x61, +0xff02,0x6d,0x61,0xff02,0x6b,0x61,0xff02,0x6b,0x62,0xff02,0x6d,0x62,0xff02,0x67,0x62,0xff02, +0x70,0x66,0xff02,0x6e,0x66,0xff02,0x3bc,0x66,0xff02,0x68,0x7a,0xff03,0x6b,0x68,0x7a,0xff03, +0x6d,0x68,0x7a,0xff03,0x67,0x68,0x7a,0xff03,0x74,0x68,0x7a,0xff02,0x70,0x61,0xff03,0x6b, +0x70,0x61,0xff03,0x6d,0x70,0x61,0xff03,0x67,0x70,0x61,0xff02,0x70,0x76,0xff02,0x6e,0x76, +0xff02,0x3bc,0x76,0xff02,0x6d,0x76,0xff02,0x6b,0x76,0xff02,0x6d,0x76,0xff02,0x70,0x77,0xff02, +0x6e,0x77,0xff02,0x3bc,0x77,0xff02,0x6d,0x77,0xff02,0x6b,0x77,0xff02,0x6d,0x77,0xff02,0x6b, +0x3c9,0xff02,0x6d,0x3c9,0xff02,0x62,0x71,0xff04,0x63,0x2215,0x6b,0x67,0xff03,0x63,0x6f,0x2e, +0xff02,0x64,0x62,0xff02,0x67,0x79,0xff02,0x68,0x70,0xff02,0x6b,0x6b,0xff02,0x6b,0x6d,0xff02, +0x70,0x68,0xff03,0x70,0x70,0x6d,0xff02,0x70,0x72,0xff02,0x73,0x76,0xff02,0x77,0x62,0xff03, +0x76,0x2215,0x6d,0xff03,0x61,0x2215,0x6d,0xff01,0x3b1,0xff01,0x3b2,0xff01,0x3b4,0xff01,0x3b5,0xff01, +0x3b6,0xff01,0x3b7,0xff01,0x3b8,0xff01,0x3ba,0xff01,0x3bb,0xff01,0x3bd,0xff01,0x3be,0xff01,0x3bf,0xff01, +0x3c1,0xff01,0x3c4,0xff01,0x3c6,0xff01,0x3c7,0xff01,0x3c8,0xff01,0x3dd,0x8200,0xf0,0x20,0x345,0x3b2, +0x100,0x3a5,0x8282,0xe6,0x3d2,0x301,0xe6,0x3a5,0x301,0x8282,0xe6,0x3d2,0x308,0xe6,0x3a5,0x308, +0x100,0x3c2,0x100,0x3a3,0x100,0x41,0x100,0xc6,0x100,0x42,0x100,0x44,0x100,0x45,0x100,0x18e, +0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e, +0x100,0x4f,0x100,0x222,0x100,0x50,0x100,0x52,0x100,0x54,0x100,0x55,0x100,0x57,0x200,0x52, +0x73,0x100,0x43,0x200,0xb0,0x43,0x100,0x190,0x200,0xb0,0x46,0x100,0x48,0x100,0x48,0x100, +0x48,0x100,0x49,0x100,0x49,0x100,0x4c,0x100,0x4e,0x200,0x4e,0x6f,0x100,0x50,0x100,0x51, +0x100,0x52,0x100,0x52,0x100,0x52,0x200,0x53,0x4d,0x300,0x54,0x45,0x4c,0x200,0x54,0x4d, +0x100,0x5a,0x100,0x5a,0x100,0x42,0x100,0x43,0x100,0x45,0x100,0x46,0x100,0x4d,0x300,0x46, +0x41,0x58,0x100,0x393,0x100,0x3a0,0x100,0x44,0x300,0x50,0x54,0x45,0x200,0x48,0x67,0x200, +0x65,0x56,0x300,0x4c,0x54,0x44,0x300,0x68,0x50,0x61,0x200,0x41,0x55,0x200,0x6f,0x56, +0x200,0x49,0x55,0x200,0x70,0x41,0x200,0x6e,0x41,0x200,0x3bc,0x41,0x200,0x6d,0x41,0x200, +0x6b,0x41,0x200,0x4b,0x42,0x200,0x4d,0x42,0x200,0x47,0x42,0x200,0x70,0x46,0x200,0x6e, +0x46,0x200,0x3bc,0x46,0x200,0x48,0x7a,0x300,0x6b,0x48,0x7a,0x300,0x4d,0x48,0x7a,0x300, +0x47,0x48,0x7a,0x300,0x54,0x48,0x7a,0x200,0x50,0x61,0x300,0x6b,0x50,0x61,0x300,0x4d, +0x50,0x61,0x300,0x47,0x50,0x61,0x200,0x70,0x56,0x200,0x6e,0x56,0x200,0x3bc,0x56,0x200, +0x6d,0x56,0x200,0x6b,0x56,0x200,0x4d,0x56,0x200,0x70,0x57,0x200,0x6e,0x57,0x200,0x3bc, +0x57,0x200,0x6d,0x57,0x200,0x6b,0x57,0x200,0x4d,0x57,0x200,0x6b,0x3a9,0x200,0x4d,0x3a9, +0x200,0x42,0x71,0x400,0x43,0x2215,0x6b,0x67,0x300,0x43,0x6f,0x2e,0x200,0x64,0x42,0x200, +0x47,0x79,0x200,0x48,0x50,0x200,0x4b,0x4b,0x200,0x4b,0x4d,0x200,0x50,0x48,0x300,0x50, +0x50,0x4d,0x200,0x50,0x52,0x200,0x53,0x76,0x200,0x57,0x62,0x300,0x56,0x2215,0x6d,0x300, +0x41,0x2215,0x6d,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100, +0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100, +0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100, +0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100, +0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100, +0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100, +0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100, +0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100, +0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100, +0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100, +0x41,0x100,0x43,0x100,0x44,0x100,0x47,0x100,0x4a,0x100,0x4b,0x100,0x4e,0x100,0x4f,0x100, +0x50,0x100,0x51,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100, +0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100, +0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100, +0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100, +0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x44,0x100,0x45,0x100, +0x46,0x100,0x47,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100, +0x50,0x100,0x51,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100, +0x59,0x100,0x41,0x100,0x42,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x49,0x100, +0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4f,0x100,0x53,0x100,0x54,0x100,0x55,0x100, +0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100, +0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100, +0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100, +0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100, +0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100, +0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100, +0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100, +0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100, +0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100, +0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100, +0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100, +0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100, +0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100, +0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100, +0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100, +0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100, +0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x41,0x100,0x42,0x100, +0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100, +0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100, +0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100, +0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,0x397,0x100,0x398,0x100, +0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,0x39f,0x100,0x3a0,0x100, +0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,0x3a7,0x100,0x3a8,0x100, +0x3a9,0x100,0x3c2,0x100,0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100, +0x397,0x100,0x398,0x100,0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100, +0x39f,0x100,0x3a0,0x100,0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100, +0x3a7,0x100,0x3a8,0x100,0x3a9,0x100,0x3c2,0x100,0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100, +0x395,0x100,0x396,0x100,0x397,0x100,0x398,0x100,0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100, +0x39d,0x100,0x39e,0x100,0x39f,0x100,0x3a0,0x100,0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100, +0x3a5,0x100,0x3a6,0x100,0x3a7,0x100,0x3a8,0x100,0x3a9,0x100,0x3c2,0x100,0x391,0x100,0x392,0x100, +0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,0x397,0x100,0x398,0x100,0x399,0x100,0x39a,0x100, +0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,0x39f,0x100,0x3a0,0x100,0x3a1,0x100,0x398,0x100, +0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,0x3a7,0x100,0x3a8,0x100,0x3a9,0x100,0x3c2,0x100, +0x391,0x100,0x392,0x100,0x393,0x100,0x394,0x100,0x395,0x100,0x396,0x100,0x397,0x100,0x398,0x100, +0x399,0x100,0x39a,0x100,0x39b,0x100,0x39c,0x100,0x39d,0x100,0x39e,0x100,0x39f,0x100,0x3a0,0x100, +0x3a1,0x100,0x398,0x100,0x3a3,0x100,0x3a4,0x100,0x3a5,0x100,0x3a6,0x100,0x3a7,0x100,0x3a8,0x100, +0x3a9,0x100,0x3c2,0x100,0x3dc,0x81,0xe6e6,0x300,0x81,0xe6e6,0x301,0x81,0xe6e6,0x313,0x82,0xe6e6, +0x308,0x301,1,0x2b9,1,0x3b,1,0xb7,0x82,7,0x915,0x93c,0x82,7,0x916,0x93c, +0x82,7,0x917,0x93c,0x82,7,0x91c,0x93c,0x82,7,0x921,0x93c,0x82,7,0x922,0x93c, +0x82,7,0x92b,0x93c,0x82,7,0x92f,0x93c,0x82,7,0x9a1,0x9bc,0x82,7,0x9a2,0x9bc, +0x82,7,0x9af,0x9bc,0x82,7,0xa32,0xa3c,0x82,7,0xa38,0xa3c,0x82,7,0xa16,0xa3c, +0x82,7,0xa17,0xa3c,0x82,7,0xa1c,0xa3c,0x82,7,0xa2b,0xa3c,0x82,7,0xb21,0xb3c, +0x82,7,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,2,0xf56,0xfb7, +2,0xf5b,0xfb7,2,0xf40,0xfb5,0x82,0x8182,0xf71,0xf72,0x82,0x8184,0xf71,0xf74,0x82,0x82, +0xfb2,0xf80,0x82,0x82,0xfb3,0xf80,0x82,0x8182,0xf71,0xf80,2,0xf92,0xfb7,2,0xf9c,0xfb7, +2,0xfa1,0xfb7,2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,0x82,0xe6,0x3b1,0x301, +0x82,0xe6,0x3b5,0x301,0x82,0xe6,0x3b7,0x301,0x82,0xe6,0x3b9,0x301,0x82,0xe6,0x3bf,0x301, +0x82,0xe6,0x3c5,0x301,0x82,0xe6,0x3c9,0x301,0x82,0xe6,0x391,0x301,1,0x3b9,0x82,0xe6, +0x395,0x301,0x82,0xe6,0x397,0x301,0x83,0xe6,0x3b9,0x308,0x301,0x82,0xe6,0x399,0x301,0x83, +0xe6,0x3c5,0x308,0x301,0x82,0xe6,0x3a5,0x301,0x8382,0xe6,0xa8,0x301,0xe6,0x20,0x308,0x301, +1,0x60,0x82,0xe6,0x39f,0x301,0x82,0xe6,0x3a9,0x301,0x8201,0xb4,0xe6,0x20,0x301,0x101, +0x2002,0x20,0x101,0x2003,0x20,1,0x3a9,1,0x4b,0x82,0xe6,0x41,0x30a,1,0x3008,1, +0x3009,0x82,1,0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1,1, +0x4e32,1,0x53e5,1,0x9f9c,1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1, +0x61f6,1,0x7669,1,0x7f85,1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1, +0x6d1b,1,0x70d9,1,0x73de,1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1, +0x6b04,1,0x721b,1,0x862d,1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1, +0x62c9,1,0x81d8,1,0x881f,1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1, +0x4f86,1,0x51b7,1,0x52de,1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1, +0x8606,1,0x865c,1,0x8def,1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1, +0x7da0,1,0x83c9,1,0x9304,1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1, +0x807e,1,0x7262,1,0x78ca,1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1, +0x6dda,1,0x6f0f,1,0x7d2f,1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1, +0x51cc,1,0x7a1c,1,0x7dbe,1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x6a02,1, +0x8afe,1,0x4e39,1,0x5be7,1,0x6012,1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1, +0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc,1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1, +0x7701,1,0x8449,1,0x8aaa,1,0x6bba,1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1, +0x63a0,1,0x7565,1,0x4eae,1,0x5169,1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1, +0x8ad2,1,0x91cf,1,0x52f5,1,0x5442,1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1, +0x792a,1,0x95ad,1,0x9a6a,1,0x9e97,1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1, +0x8f62,1,0x5e74,1,0x6190,1,0x6200,1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1, +0x79ca,1,0x7df4,1,0x806f,1,0x8f26,1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1, +0x52a3,1,0x54bd,1,0x70c8,1,0x88c2,1,0x8aaa,1,0x5ec9,1,0x5ff5,1,0x637b,1, +0x6bae,1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9,1,0x5be7,1,0x5dba,1,0x601c,1, +0x73b2,1,0x7469,1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6,1,0x9748,1,0x9818,1, +0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86,1,0x50da,1,0x5bee,1, +0x5c3f,1,0x6599,1,0x6a02,1,0x71ce,1,0x7642,1,0x84fc,1,0x907c,1,0x9f8d,1, +0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,1,0x6d41,1,0x6e9c,1,0x7409,1, +0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,1,0x622e,1,0x9678,1,0x502b,1, +0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,1,0x6817,1,0x7387,1,0x9686,1, +0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,1,0x6ce5,1,0x7406,1, +0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,1,0x533f,1,0x6eba,1, +0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,1,0x9e9f,1,0x6797,1, +0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,1,0x7099,1,0x8b58,1, +0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,1,0x7cd6,1,0x5b85,1, +0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,1,0x5ed3,1,0x5140,1, +0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,1,0x793c,1,0x795e,1, +0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,1,0x8af8,1,0x9038,1, +0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x4fae,1,0x50e7,1,0x514d,1, +0x52c9,1,0x52e4,1,0x5351,1,0x559d,1,0x5606,1,0x5668,1,0x5840,1,0x58a8,1, +0x5c64,1,0x5c6e,1,0x6094,1,0x6168,1,0x618e,1,0x61f2,1,0x654f,1,0x65e2,1, +0x6691,1,0x6885,1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e,1,0x722b,1,0x7422,1, +0x7891,1,0x793e,1,0x7949,1,0x7948,1,0x7950,1,0x7956,1,0x795d,1,0x798d,1, +0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,1,0x7df4,1,0x7e09,1,0x7e41,1,0x7f72,1, +0x8005,1,0x81ed,1,0x8279,1,0x8279,1,0x8457,1,0x8910,1,0x8996,1,0x8b01,1, +0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x9038,1,0x96e3,1,0x97ff,1,0x983b,1, +0x4e26,1,0x51b5,1,0x5168,1,0x4f80,1,0x5145,1,0x5180,1,0x52c7,1,0x52fa,1, +0x559d,1,0x5555,1,0x5599,1,0x55e2,1,0x585a,1,0x58b3,1,0x5944,1,0x5954,1, +0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,0x5fad,1,0x60d8,1,0x614e,1, +0x6108,1,0x618e,1,0x6160,1,0x61f2,1,0x6234,1,0x63c4,1,0x641c,1,0x6452,1, +0x6556,1,0x6674,1,0x6717,1,0x671b,1,0x6756,1,0x6b79,1,0x6bba,1,0x6d41,1, +0x6edb,1,0x6ecb,1,0x6f22,1,0x701e,1,0x716e,1,0x77a7,1,0x7235,1,0x72af,1, +0x732a,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,0x76ca,1,0x76db,1, +0x76f4,1,0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7bc0,1,0x7c7b,1,0x7d5b,1, +0x7df4,1,0x7f3e,1,0x8005,1,0x8352,1,0x83ef,1,0x8779,1,0x8941,1,0x8986,1, +0x8996,1,0x8abf,1,0x8af8,1,0x8acb,1,0x8b01,1,0x8afe,1,0x8aed,1,0x8b39,1, +0x8b8a,1,0x8d08,1,0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x96e3,1, +0x9756,1,0x97db,1,0x97ff,1,0x980b,1,0x983b,1,0x9b12,1,0x9f9c,2,0xd84a,0xdc4a, +2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,1,0x4039,2,0xd854,0xde49,2, +0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0x82,0xe,0x5d9,0x5b4,0x82,0x11,0x5f2, +0x5b7,0x82,0x18,0x5e9,0x5c1,0x82,0x19,0x5e9,0x5c2,0x83,0x18,0x5e9,0x5bc,0x5c1,0x83,0x19, +0x5e9,0x5bc,0x5c2,0x82,0x11,0x5d0,0x5b7,0x82,0x12,0x5d0,0x5b8,0x82,0x15,0x5d0,0x5bc,0x82, +0x15,0x5d1,0x5bc,0x82,0x15,0x5d2,0x5bc,0x82,0x15,0x5d3,0x5bc,0x82,0x15,0x5d4,0x5bc,0x82, +0x15,0x5d5,0x5bc,0x82,0x15,0x5d6,0x5bc,0x82,0x15,0x5d8,0x5bc,0x82,0x15,0x5d9,0x5bc,0x82, +0x15,0x5da,0x5bc,0x82,0x15,0x5db,0x5bc,0x82,0x15,0x5dc,0x5bc,0x82,0x15,0x5de,0x5bc,0x82, +0x15,0x5e0,0x5bc,0x82,0x15,0x5e1,0x5bc,0x82,0x15,0x5e3,0x5bc,0x82,0x15,0x5e4,0x5bc,0x82, +0x15,0x5e6,0x5bc,0x82,0x15,0x5e7,0x5bc,0x82,0x15,0x5e8,0x5bc,0x82,0x15,0x5e9,0x5bc,0x82, +0x15,0x5ea,0x5bc,0x82,0x13,0x5d5,0x5b9,0x82,0x17,0x5d1,0x5bf,0x82,0x17,0x5db,0x5bf,0x82, +0x17,0x5e4,0x5bf,0x84,0xd8,0xd834,0xdd57,0xd834,0xdd65,0x84,0xd8,0xd834,0xdd58,0xd834,0xdd65,0x86, +0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0x86, +0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd70,0x86,0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd71,0x86, +0xd8,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0x84,0xd8,0xd834,0xddb9,0xd834,0xdd65,0x84,0xd8,0xd834, +0xddba,0xd834,0xdd65,0x86,0xd8,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xddba,0xd834, +0xdd65,0xd834,0xdd6e,0x86,0xd8,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0x86,0xd8,0xd834,0xddba,0xd834, +0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,0xd840,0xdd22,1,0x4f60,1,0x4fae, +1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50e7,1,0x50cf,1,0x349e,2,0xd841, +0xde3a,1,0x514d,1,0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167, +1,0x518d,2,0xd841,0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,1,0x51b5,2, +0xd864,0xdddf,1,0x51f5,1,0x5203,1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277, +1,0x3515,1,0x52c7,1,0x52c9,1,0x52e4,1,0x52fa,1,0x5305,1,0x5306,1,0x5317, +1,0x5349,1,0x5351,1,0x535a,1,0x5373,1,0x537d,1,0x537f,1,0x537f,1,0x537f, +2,0xd842,0xde2c,1,0x7070,1,0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1, +1,0x5406,1,0x549e,1,0x5438,1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510, +1,0x5553,1,0x5563,1,0x5584,1,0x5584,1,0x5599,1,0x55ab,1,0x55b3,1,0x55c2, +1,0x5716,1,0x5606,1,0x5717,1,0x5651,1,0x5674,1,0x5207,1,0x58ee,1,0x57ce, +1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,1,0x58ac,2,0xd845,0xdce4,1, +0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,0x5962,2,0xd845,0xdea8,2,0xd845, +0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,0x5a66,1,0x36ee,1,0x36fc,1, +0x5b08,1,0x5b3e,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,1,0x5be7,1,0x5bf3, +2,0xd846,0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1,0x5c60,1, +0x5c6e,1,0x5cc0,1,0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1, +0x5d6b,1,0x5d7c,1,0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1, +0x5e69,1,0x3862,2,0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,1,0x5eca, +2,0xd868,0xdf92,1,0x5efe,2,0xd848,0xdf31,2,0xd848,0xdf31,1,0x8201,1,0x5f22,1, +0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62,1,0x5f6b,1,0x38e3,1, +0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a,1,0x391c,1,0x6094,2, +0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,0x614e,1,0x614c,1,0x617a,1,0x618e, +1,0x61b2,1,0x61a4,1,0x61af,1,0x61de,1,0x61f2,1,0x61f6,1,0x6210,1,0x621b, +1,0x625d,1,0x62b1,1,0x62d4,1,0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1, +0x6368,1,0x6383,1,0x63e4,2,0xd84a,0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e, +1,0x6469,1,0x647e,1,0x649d,1,0x6477,1,0x3a6c,1,0x654f,1,0x656c,2,0xd84c, +0xdc0a,1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19,1,0x6691,1,0x3b08,1,0x3ae4,1, +0x5192,1,0x5195,1,0x6700,1,0x669c,1,0x80ad,1,0x43d9,1,0x6717,1,0x671b,1, +0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,0x67fa,1,0x6785,1,0x6852, +1,0x6885,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x3b9d,1,0x6942,1, +0x69a3,1,0x69ea,1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2,0xd84e, +0xdca7,1,0x6b54,1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bba,1,0x6bbb,2,0xd84e,0xde8d, +2,0xd847,0xdd0b,2,0xd84e,0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1, +0x6c67,1,0x6d16,1,0x6d3e,1,0x6d77,1,0x6d41,1,0x6d69,1,0x6d78,1,0x6d85,2, +0xd84f,0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1,0x3d33,1,0x6ecb,1,0x6ec7,2,0xd84f, +0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e,1,0x6fc6,1,0x7039,1, +0x701e,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,1,0x7077,1,0x70ad,2,0xd841,0xdd25, +1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,0xdfab,1,0x7228,1,0x7235,1,0x7250, +2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,0xd852,0xdc14,1,0x737a,1, +0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x3eb8,1,0x7447,1,0x745c,1,0x7471,1, +0x7485,1,0x74ca,1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92,1, +0x7570,2,0xd848,0xdd9f,1,0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1, +0x3ffc,1,0x4008,1,0x76f4,2,0xd854,0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854, +0xdd33,1,0x771e,1,0x771f,1,0x771f,1,0x774a,1,0x4039,1,0x778b,1,0x4046,1, +0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x788c,1,0x78cc,1,0x40e3,2,0xd855,0xde26,1, +0x7956,2,0xd855,0xde9a,2,0xd855,0xdec5,1,0x798f,1,0x79eb,1,0x412f,1,0x7a40,1, +0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2,0xd856,0xdea7,2,0xd856,0xdea7,1,0x7aee,1,0x4202, +2,0xd856,0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2,0xd857,0xdc80,1,0x7cd2,1,0x42a0, +1,0x7ce8,1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1,0x7d63,1,0x4301,1,0x7dc7,1, +0x7e02,1,0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858,0xde47,1,0x4359,2,0xd858,0xded9, +1,0x7f7a,2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,1,0x8005,2,0xd859,0xdcda,2,0xd859, +0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1,0x43d5,1,0x80b2,1, +0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859,0xdfb5,2,0xd84c,0xdf93, +2,0xd84c,0xdf9c,1,0x8201,1,0x8204,1,0x8f9e,1,0x446b,1,0x8291,1,0x828b,1, +0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,0x82e6,2,0xd85a,0xdf3c,1,0x82e5, +1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,1,0x8457,1,0x8353, +1,0x83ca,1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b,0xdcd5,1, +0x452b,1,0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b,0xdf2c,1, +0x455d,1,0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1,0x865c,1, +0x8667,1,0x8669,1,0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8779,1,0x8728,1, +0x876b,1,0x8786,1,0x45d7,1,0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2, +0xd85d,0xde67,1,0x88d7,1,0x88de,1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2, +0xd85e,0xdd66,1,0x46be,1,0x46c7,1,0x8aa0,1,0x8aed,1,0x8b8a,1,0x8c55,2,0xd85f, +0xdca8,1,0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2,0xd85f,0xdf2f,2,0xd842,0xdc04,1, +0x8dcb,1,0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4,1,0x8f38,2,0xd861,0xddd2,2, +0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1,0x911b,1,0x9238,1, +0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa,1,0x958b,1,0x4995, +1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1,0x9723,2,0xd864,0xdd45, +2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a,1,0x4ab2,2,0xd865, +0xdc96,1,0x980b,1,0x980b,1,0x9829,2,0xd865,0xddb6,1,0x98e2,1,0x4b33,1,0x9929, +1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,0x9b12,1,0x9c40,1, +0x9cfd,1,0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868,0xdd05,2, +0xd868,0xde0e,2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1,0x9f05,1, +0x9f0f,1,0x9f16,1,0x9f3b,2,0xd869,0xde00,0x82,0xe6,0x41,0x300,0x82,0xe6,0x41,0x301, +0x4e6,0x82,0xe6,0x41,0x302,0x82,0xe6,0x41,0x303,0x2c8,0x82,0xe6,0x41,0x308,0x2e0,0x82, +0xe6,0x41,0x30a,0x484,0x82,0xca,0x43,0x327,0x82,0xe6,0x45,0x300,0x82,0xe6,0x45,0x301, +0x50e,0x82,0xe6,0x45,0x302,0x82,0xe6,0x45,0x308,0x82,0xe6,0x49,0x300,0x82,0xe6,0x49, +0x301,0x82,0xe6,0x49,0x302,0x498,0x82,0xe6,0x49,0x308,0x82,0xe6,0x4e,0x303,0x82,0xe6, +0x4f,0x300,0x82,0xe6,0x4f,0x301,0x522,0x82,0xe6,0x4f,0x302,0x2ec,0x82,0xe6,0x4f,0x303, +0x2e8,0x82,0xe6,0x4f,0x308,0x82,0xe6,0x55,0x300,0x82,0xe6,0x55,0x301,0x82,0xe6,0x55, +0x302,0x2b8,0x82,0xe6,0x55,0x308,0x82,0xe6,0x59,0x301,0x82,0xe6,0x61,0x300,0x82,0xe6, +0x61,0x301,0x4ee,0x82,0xe6,0x61,0x302,0x82,0xe6,0x61,0x303,0x2ca,0x82,0xe6,0x61,0x308, +0x2e2,0x82,0xe6,0x61,0x30a,0x486,0x82,0xca,0x63,0x327,0x82,0xe6,0x65,0x300,0x82,0xe6, +0x65,0x301,0x516,0x82,0xe6,0x65,0x302,0x82,0xe6,0x65,0x308,0x82,0xe6,0x69,0x300,0x82, +0xe6,0x69,0x301,0x82,0xe6,0x69,0x302,0x49a,0x82,0xe6,0x69,0x308,0x82,0xe6,0x6e,0x303, +0x82,0xe6,0x6f,0x300,0x82,0xe6,0x6f,0x301,0x52a,0x82,0xe6,0x6f,0x302,0x2f2,0x82,0xe6, +0x6f,0x303,0x2ea,0x82,0xe6,0x6f,0x308,0x82,0xe6,0x75,0x300,0x82,0xe6,0x75,0x301,0x82, +0xe6,0x75,0x302,0x2c0,0x82,0xe6,0x75,0x308,0x82,0xe6,0x79,0x301,0x82,0xe6,0x79,0x308, +0x82,0xe6,0x41,0x304,0x82,0xe6,0x61,0x304,0x4fe,0x82,0xe6,0x41,0x306,0x506,0x82,0xe6, +0x61,0x306,0x82,0xca,0x41,0x328,0x82,0xca,0x61,0x328,0x82,0xe6,0x43,0x301,0x82,0xe6, +0x63,0x301,0x82,0xe6,0x43,0x302,0x82,0xe6,0x63,0x302,0x82,0xe6,0x43,0x307,0x82,0xe6, +0x63,0x307,0x82,0xe6,0x43,0x30c,0x82,0xe6,0x63,0x30c,0x82,0xe6,0x44,0x30c,0x82,0xe6, +0x64,0x30c,0x488,0x82,0xe6,0x45,0x304,0x48c,0x82,0xe6,0x65,0x304,0x82,0xe6,0x45,0x306, +0x82,0xe6,0x65,0x306,0x82,0xe6,0x45,0x307,0x82,0xe6,0x65,0x307,0x82,0xca,0x45,0x328, +0x82,0xca,0x65,0x328,0x82,0xe6,0x45,0x30c,0x82,0xe6,0x65,0x30c,0x82,0xe6,0x47,0x302, +0x82,0xe6,0x67,0x302,0x82,0xe6,0x47,0x306,0x82,0xe6,0x67,0x306,0x82,0xe6,0x47,0x307, +0x82,0xe6,0x67,0x307,0x82,0xca,0x47,0x327,0x82,0xca,0x67,0x327,0x82,0xe6,0x48,0x302, +0x82,0xe6,0x68,0x302,0x82,0xe6,0x49,0x303,0x82,0xe6,0x69,0x303,0x82,0xe6,0x49,0x304, +0x82,0xe6,0x69,0x304,0x82,0xe6,0x49,0x306,0x82,0xe6,0x69,0x306,0x82,0xca,0x49,0x328, +0x82,0xca,0x69,0x328,0x82,0xe6,0x49,0x307,0x82,0xe6,0x4a,0x302,0x82,0xe6,0x6a,0x302, +0x82,0xca,0x4b,0x327,0x82,0xca,0x6b,0x327,0x82,0xe6,0x4c,0x301,0x82,0xe6,0x6c,0x301, +0x82,0xca,0x4c,0x327,0x82,0xca,0x6c,0x327,0x82,0xe6,0x4c,0x30c,0x82,0xe6,0x6c,0x30c, +0x82,0xe6,0x4e,0x301,0x82,0xe6,0x6e,0x301,0x82,0xca,0x4e,0x327,0x82,0xca,0x6e,0x327, +0x82,0xe6,0x4e,0x30c,0x82,0xe6,0x6e,0x30c,0x4ac,0x82,0xe6,0x4f,0x304,0x4b0,0x82,0xe6, +0x6f,0x304,0x82,0xe6,0x4f,0x306,0x82,0xe6,0x6f,0x306,0x82,0xe6,0x4f,0x30b,0x82,0xe6, +0x6f,0x30b,0x82,0xe6,0x52,0x301,0x82,0xe6,0x72,0x301,0x82,0xca,0x52,0x327,0x82,0xca, +0x72,0x327,0x82,0xe6,0x52,0x30c,0x82,0xe6,0x72,0x30c,0x4c0,0x82,0xe6,0x53,0x301,0x4c2, +0x82,0xe6,0x73,0x301,0x82,0xe6,0x53,0x302,0x82,0xe6,0x73,0x302,0x82,0xca,0x53,0x327, +0x82,0xca,0x73,0x327,0x4c4,0x82,0xe6,0x53,0x30c,0x4c6,0x82,0xe6,0x73,0x30c,0x82,0xca, +0x54,0x327,0x82,0xca,0x74,0x327,0x82,0xe6,0x54,0x30c,0x82,0xe6,0x74,0x30c,0x4cc,0x82, +0xe6,0x55,0x303,0x4ce,0x82,0xe6,0x75,0x303,0x4d0,0x82,0xe6,0x55,0x304,0x4d2,0x82,0xe6, +0x75,0x304,0x82,0xe6,0x55,0x306,0x82,0xe6,0x75,0x306,0x82,0xe6,0x55,0x30a,0x82,0xe6, +0x75,0x30a,0x82,0xe6,0x55,0x30b,0x82,0xe6,0x75,0x30b,0x82,0xca,0x55,0x328,0x82,0xca, +0x75,0x328,0x82,0xe6,0x57,0x302,0x82,0xe6,0x77,0x302,0x82,0xe6,0x59,0x302,0x82,0xe6, +0x79,0x302,0x82,0xe6,0x59,0x308,0x82,0xe6,0x5a,0x301,0x82,0xe6,0x7a,0x301,0x82,0xe6, +0x5a,0x307,0x82,0xe6,0x7a,0x307,0x82,0xe6,0x5a,0x30c,0x82,0xe6,0x7a,0x30c,0x536,0x82, +0xd8,0x4f,0x31b,0x540,0x82,0xd8,0x6f,0x31b,0x54a,0x82,0xd8,0x55,0x31b,0x554,0x82,0xd8, +0x75,0x31b,0x82,0xe6,0x41,0x30c,0x82,0xe6,0x61,0x30c,0x82,0xe6,0x49,0x30c,0x82,0xe6, +0x69,0x30c,0x82,0xe6,0x4f,0x30c,0x82,0xe6,0x6f,0x30c,0x82,0xe6,0x55,0x30c,0x82,0xe6, +0x75,0x30c,0x83,0xe6,0x55,0x308,0x304,0x83,0xe6,0x75,0x308,0x304,0x83,0xe6,0x55,0x308, +0x301,0x83,0xe6,0x75,0x308,0x301,0x83,0xe6,0x55,0x308,0x30c,0x83,0xe6,0x75,0x308,0x30c, +0x83,0xe6,0x55,0x308,0x300,0x83,0xe6,0x75,0x308,0x300,0x83,0xe6,0x41,0x308,0x304,0x83, +0xe6,0x61,0x308,0x304,0x83,0xe6,0x41,0x307,0x304,0x83,0xe6,0x61,0x307,0x304,0x82,0xe6, +0xc6,0x304,0x82,0xe6,0xe6,0x304,0x82,0xe6,0x47,0x30c,0x82,0xe6,0x67,0x30c,0x82,0xe6, +0x4b,0x30c,0x82,0xe6,0x6b,0x30c,0x2d8,0x82,0xca,0x4f,0x328,0x2da,0x82,0xca,0x6f,0x328, +0x83,0xe6,0x4f,0x328,0x304,0x83,0xe6,0x6f,0x328,0x304,0x82,0xe6,0x1b7,0x30c,0x82,0xe6, +0x292,0x30c,0x82,0xe6,0x6a,0x30c,0x82,0xe6,0x47,0x301,0x82,0xe6,0x67,0x301,0x82,0xe6, +0x4e,0x300,0x82,0xe6,0x6e,0x300,0x83,0xe6,0x41,0x30a,0x301,0x83,0xe6,0x61,0x30a,0x301, +0x82,0xe6,0xc6,0x301,0x82,0xe6,0xe6,0x301,0x82,0xe6,0xd8,0x301,0x82,0xe6,0xf8,0x301, +0x82,0xe6,0x41,0x30f,0x82,0xe6,0x61,0x30f,0x82,0xe6,0x41,0x311,0x82,0xe6,0x61,0x311, +0x82,0xe6,0x45,0x30f,0x82,0xe6,0x65,0x30f,0x82,0xe6,0x45,0x311,0x82,0xe6,0x65,0x311, +0x82,0xe6,0x49,0x30f,0x82,0xe6,0x69,0x30f,0x82,0xe6,0x49,0x311,0x82,0xe6,0x69,0x311, +0x82,0xe6,0x4f,0x30f,0x82,0xe6,0x6f,0x30f,0x82,0xe6,0x4f,0x311,0x82,0xe6,0x6f,0x311, +0x82,0xe6,0x52,0x30f,0x82,0xe6,0x72,0x30f,0x82,0xe6,0x52,0x311,0x82,0xe6,0x72,0x311, +0x82,0xe6,0x55,0x30f,0x82,0xe6,0x75,0x30f,0x82,0xe6,0x55,0x311,0x82,0xe6,0x75,0x311, +0x82,0xdc,0x53,0x326,0x82,0xdc,0x73,0x326,0x82,0xdc,0x54,0x326,0x82,0xdc,0x74,0x326, +0x82,0xe6,0x48,0x30c,0x82,0xe6,0x68,0x30c,0x2cc,0x82,0xe6,0x41,0x307,0x2ce,0x82,0xe6, +0x61,0x307,0x490,0x82,0xca,0x45,0x327,0x492,0x82,0xca,0x65,0x327,0x83,0xe6,0x4f,0x308, +0x304,0x83,0xe6,0x6f,0x308,0x304,0x83,0xe6,0x4f,0x303,0x304,0x83,0xe6,0x6f,0x303,0x304, +0x2f8,0x82,0xe6,0x4f,0x307,0x2fa,0x82,0xe6,0x6f,0x307,0x83,0xe6,0x4f,0x307,0x304,0x83, +0xe6,0x6f,0x307,0x304,0x82,0xe6,0x59,0x304,0x82,0xe6,0x79,0x304,0x8382,0xe6,0xa8,0x301, +0xe6,0x20,0x308,0x301,0x82,0xe6,0x391,0x301,0x82,0xe6,0x395,0x301,0x82,0xe6,0x397,0x301, +0x82,0xe6,0x399,0x301,0x82,0xe6,0x39f,0x301,0x82,0xe6,0x3a5,0x301,0x82,0xe6,0x3a9,0x301, +0x83,0xe6,0x3b9,0x308,0x301,0x82,0xe6,0x399,0x308,0x82,0xe6,0x3a5,0x308,0x652,0x82,0xe6, +0x3b1,0x301,0x82,0xe6,0x3b5,0x301,0x658,0x82,0xe6,0x3b7,0x301,0x82,0xe6,0x3b9,0x301,0x83, +0xe6,0x3c5,0x308,0x301,0x34e,0x82,0xe6,0x3b9,0x308,0x388,0x82,0xe6,0x3c5,0x308,0x82,0xe6, +0x3bf,0x301,0x82,0xe6,0x3c5,0x301,0x670,0x82,0xe6,0x3c9,0x301,0x82,0xe6,0x415,0x300,0x82, +0xe6,0x415,0x308,0x82,0xe6,0x413,0x301,0x82,0xe6,0x406,0x308,0x82,0xe6,0x41a,0x301,0x82, +0xe6,0x418,0x300,0x82,0xe6,0x423,0x306,0x82,0xe6,0x418,0x306,0x82,0xe6,0x438,0x306,0x82, +0xe6,0x435,0x300,0x82,0xe6,0x435,0x308,0x82,0xe6,0x433,0x301,0x82,0xe6,0x456,0x308,0x82, +0xe6,0x43a,0x301,0x82,0xe6,0x438,0x300,0x82,0xe6,0x443,0x306,0x82,0xe6,0x474,0x30f,0x82, +0xe6,0x475,0x30f,0x82,0xe6,0x416,0x306,0x82,0xe6,0x436,0x306,0x82,0xe6,0x410,0x306,0x82, +0xe6,0x430,0x306,0x82,0xe6,0x410,0x308,0x82,0xe6,0x430,0x308,0x82,0xe6,0x415,0x306,0x82, +0xe6,0x435,0x306,0x82,0xe6,0x4d8,0x308,0x82,0xe6,0x4d9,0x308,0x82,0xe6,0x416,0x308,0x82, +0xe6,0x436,0x308,0x82,0xe6,0x417,0x308,0x82,0xe6,0x437,0x308,0x82,0xe6,0x418,0x304,0x82, +0xe6,0x438,0x304,0x82,0xe6,0x418,0x308,0x82,0xe6,0x438,0x308,0x82,0xe6,0x41e,0x308,0x82, +0xe6,0x43e,0x308,0x82,0xe6,0x4e8,0x308,0x82,0xe6,0x4e9,0x308,0x82,0xe6,0x42d,0x308,0x82, +0xe6,0x44d,0x308,0x82,0xe6,0x423,0x304,0x82,0xe6,0x443,0x304,0x82,0xe6,0x423,0x308,0x82, +0xe6,0x443,0x308,0x82,0xe6,0x423,0x30b,0x82,0xe6,0x443,0x30b,0x82,0xe6,0x427,0x308,0x82, +0xe6,0x447,0x308,0x82,0xe6,0x42b,0x308,0x82,0xe6,0x44b,0x308,0x82,0xe6,0x627,0x653,0x82, +0xe6,0x627,0x654,0x82,0xe6,0x648,0x654,0x82,0xdc,0x627,0x655,0x82,0xe6,0x64a,0x654,0x82, +0xe6,0x6d5,0x654,0x82,0xe6,0x6c1,0x654,0x82,0xe6,0x6d2,0x654,0x82,7,0x928,0x93c,0x82, +7,0x930,0x93c,0x82,7,0x933,0x93c,2,0x9c7,0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56, +2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,0xbd7,2,0xbc6,0xbbe,2,0xbc7,0xbbe,2, +0xbc6,0xbd7,0x82,0x5b,0xc46,0xc56,2,0xcbf,0xcd5,2,0xcc6,0xcd5,2,0xcc6,0xcd6,0x450, +2,0xcc6,0xcc2,3,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,0xd3e,2,0xd46,0xd57, +0x82,9,0xdd9,0xdca,0x45e,2,0xdd9,0xdcf,0x83,9,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf, +2,0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2, +0x1b0d,0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f, +0x1b35,2,0x1b42,0x1b35,0x82,0xdc,0x41,0x325,0x82,0xdc,0x61,0x325,0x82,0xe6,0x42,0x307, +0x82,0xe6,0x62,0x307,0x82,0xdc,0x42,0x323,0x82,0xdc,0x62,0x323,0x82,0xdc,0x42,0x331, +0x82,0xdc,0x62,0x331,0x83,0xe6,0x43,0x327,0x301,0x83,0xe6,0x63,0x327,0x301,0x82,0xe6, +0x44,0x307,0x82,0xe6,0x64,0x307,0x82,0xdc,0x44,0x323,0x82,0xdc,0x64,0x323,0x82,0xdc, +0x44,0x331,0x82,0xdc,0x64,0x331,0x82,0xca,0x44,0x327,0x82,0xca,0x64,0x327,0x82,0xdc, +0x44,0x32d,0x82,0xdc,0x64,0x32d,0x83,0xe6,0x45,0x304,0x300,0x83,0xe6,0x65,0x304,0x300, +0x83,0xe6,0x45,0x304,0x301,0x83,0xe6,0x65,0x304,0x301,0x82,0xdc,0x45,0x32d,0x82,0xdc, +0x65,0x32d,0x82,0xdc,0x45,0x330,0x82,0xdc,0x65,0x330,0x83,0xe6,0x45,0x327,0x306,0x83, +0xe6,0x65,0x327,0x306,0x82,0xe6,0x46,0x307,0x82,0xe6,0x66,0x307,0x82,0xe6,0x47,0x304, +0x82,0xe6,0x67,0x304,0x82,0xe6,0x48,0x307,0x82,0xe6,0x68,0x307,0x82,0xdc,0x48,0x323, +0x82,0xdc,0x68,0x323,0x82,0xe6,0x48,0x308,0x82,0xe6,0x68,0x308,0x82,0xca,0x48,0x327, +0x82,0xca,0x68,0x327,0x82,0xdc,0x48,0x32e,0x82,0xdc,0x68,0x32e,0x82,0xdc,0x49,0x330, +0x82,0xdc,0x69,0x330,0x83,0xe6,0x49,0x308,0x301,0x83,0xe6,0x69,0x308,0x301,0x82,0xe6, +0x4b,0x301,0x82,0xe6,0x6b,0x301,0x82,0xdc,0x4b,0x323,0x82,0xdc,0x6b,0x323,0x82,0xdc, +0x4b,0x331,0x82,0xdc,0x6b,0x331,0x49c,0x82,0xdc,0x4c,0x323,0x49e,0x82,0xdc,0x6c,0x323, +0x83,0xe6,0x4c,0x323,0x304,0x83,0xe6,0x6c,0x323,0x304,0x82,0xdc,0x4c,0x331,0x82,0xdc, +0x6c,0x331,0x82,0xdc,0x4c,0x32d,0x82,0xdc,0x6c,0x32d,0x82,0xe6,0x4d,0x301,0x82,0xe6, +0x6d,0x301,0x82,0xe6,0x4d,0x307,0x82,0xe6,0x6d,0x307,0x82,0xdc,0x4d,0x323,0x82,0xdc, +0x6d,0x323,0x82,0xe6,0x4e,0x307,0x82,0xe6,0x6e,0x307,0x82,0xdc,0x4e,0x323,0x82,0xdc, +0x6e,0x323,0x82,0xdc,0x4e,0x331,0x82,0xdc,0x6e,0x331,0x82,0xdc,0x4e,0x32d,0x82,0xdc, +0x6e,0x32d,0x83,0xe6,0x4f,0x303,0x301,0x83,0xe6,0x6f,0x303,0x301,0x83,0xe6,0x4f,0x303, +0x308,0x83,0xe6,0x6f,0x303,0x308,0x83,0xe6,0x4f,0x304,0x300,0x83,0xe6,0x6f,0x304,0x300, +0x83,0xe6,0x4f,0x304,0x301,0x83,0xe6,0x6f,0x304,0x301,0x82,0xe6,0x50,0x301,0x82,0xe6, +0x70,0x301,0x82,0xe6,0x50,0x307,0x82,0xe6,0x70,0x307,0x82,0xe6,0x52,0x307,0x82,0xe6, +0x72,0x307,0x4bc,0x82,0xdc,0x52,0x323,0x4be,0x82,0xdc,0x72,0x323,0x83,0xe6,0x52,0x323, +0x304,0x83,0xe6,0x72,0x323,0x304,0x82,0xdc,0x52,0x331,0x82,0xdc,0x72,0x331,0x82,0xe6, +0x53,0x307,0x82,0xe6,0x73,0x307,0x4c8,0x82,0xdc,0x53,0x323,0x4ca,0x82,0xdc,0x73,0x323, +0x83,0xe6,0x53,0x301,0x307,0x83,0xe6,0x73,0x301,0x307,0x83,0xe6,0x53,0x30c,0x307,0x83, +0xe6,0x73,0x30c,0x307,0x83,0xe6,0x53,0x323,0x307,0x83,0xe6,0x73,0x323,0x307,0x82,0xe6, +0x54,0x307,0x82,0xe6,0x74,0x307,0x82,0xdc,0x54,0x323,0x82,0xdc,0x74,0x323,0x82,0xdc, +0x54,0x331,0x82,0xdc,0x74,0x331,0x82,0xdc,0x54,0x32d,0x82,0xdc,0x74,0x32d,0x82,0xdc, +0x55,0x324,0x82,0xdc,0x75,0x324,0x82,0xdc,0x55,0x330,0x82,0xdc,0x75,0x330,0x82,0xdc, +0x55,0x32d,0x82,0xdc,0x75,0x32d,0x83,0xe6,0x55,0x303,0x301,0x83,0xe6,0x75,0x303,0x301, +0x83,0xe6,0x55,0x304,0x308,0x83,0xe6,0x75,0x304,0x308,0x82,0xe6,0x56,0x303,0x82,0xe6, +0x76,0x303,0x82,0xdc,0x56,0x323,0x82,0xdc,0x76,0x323,0x82,0xe6,0x57,0x300,0x82,0xe6, +0x77,0x300,0x82,0xe6,0x57,0x301,0x82,0xe6,0x77,0x301,0x82,0xe6,0x57,0x308,0x82,0xe6, +0x77,0x308,0x82,0xe6,0x57,0x307,0x82,0xe6,0x77,0x307,0x82,0xdc,0x57,0x323,0x82,0xdc, +0x77,0x323,0x82,0xe6,0x58,0x307,0x82,0xe6,0x78,0x307,0x82,0xe6,0x58,0x308,0x82,0xe6, +0x78,0x308,0x82,0xe6,0x59,0x307,0x82,0xe6,0x79,0x307,0x82,0xe6,0x5a,0x302,0x82,0xe6, +0x7a,0x302,0x82,0xdc,0x5a,0x323,0x82,0xdc,0x7a,0x323,0x82,0xdc,0x5a,0x331,0x82,0xdc, +0x7a,0x331,0x82,0xdc,0x68,0x331,0x82,0xe6,0x74,0x308,0x82,0xe6,0x77,0x30a,0x82,0xe6, +0x79,0x30a,0x8282,0xe6,0x17f,0x307,0xe6,0x73,0x307,0x4f6,0x82,0xdc,0x41,0x323,0x4fa,0x82, +0xdc,0x61,0x323,0x82,0xe6,0x41,0x309,0x82,0xe6,0x61,0x309,0x83,0xe6,0x41,0x302,0x301, +0x83,0xe6,0x61,0x302,0x301,0x83,0xe6,0x41,0x302,0x300,0x83,0xe6,0x61,0x302,0x300,0x83, +0xe6,0x41,0x302,0x309,0x83,0xe6,0x61,0x302,0x309,0x83,0xe6,0x41,0x302,0x303,0x83,0xe6, +0x61,0x302,0x303,0x83,0xe6,0x41,0x323,0x302,0x83,0xe6,0x61,0x323,0x302,0x83,0xe6,0x41, +0x306,0x301,0x83,0xe6,0x61,0x306,0x301,0x83,0xe6,0x41,0x306,0x300,0x83,0xe6,0x61,0x306, +0x300,0x83,0xe6,0x41,0x306,0x309,0x83,0xe6,0x61,0x306,0x309,0x83,0xe6,0x41,0x306,0x303, +0x83,0xe6,0x61,0x306,0x303,0x83,0xe6,0x41,0x323,0x306,0x83,0xe6,0x61,0x323,0x306,0x51e, +0x82,0xdc,0x45,0x323,0x520,0x82,0xdc,0x65,0x323,0x82,0xe6,0x45,0x309,0x82,0xe6,0x65, +0x309,0x82,0xe6,0x45,0x303,0x82,0xe6,0x65,0x303,0x83,0xe6,0x45,0x302,0x301,0x83,0xe6, +0x65,0x302,0x301,0x83,0xe6,0x45,0x302,0x300,0x83,0xe6,0x65,0x302,0x300,0x83,0xe6,0x45, +0x302,0x309,0x83,0xe6,0x65,0x302,0x309,0x83,0xe6,0x45,0x302,0x303,0x83,0xe6,0x65,0x302, +0x303,0x83,0xe6,0x45,0x323,0x302,0x83,0xe6,0x65,0x323,0x302,0x82,0xe6,0x49,0x309,0x82, +0xe6,0x69,0x309,0x82,0xdc,0x49,0x323,0x82,0xdc,0x69,0x323,0x532,0x82,0xdc,0x4f,0x323, +0x534,0x82,0xdc,0x6f,0x323,0x82,0xe6,0x4f,0x309,0x82,0xe6,0x6f,0x309,0x83,0xe6,0x4f, +0x302,0x301,0x83,0xe6,0x6f,0x302,0x301,0x83,0xe6,0x4f,0x302,0x300,0x83,0xe6,0x6f,0x302, +0x300,0x83,0xe6,0x4f,0x302,0x309,0x83,0xe6,0x6f,0x302,0x309,0x83,0xe6,0x4f,0x302,0x303, +0x83,0xe6,0x6f,0x302,0x303,0x83,0xe6,0x4f,0x323,0x302,0x83,0xe6,0x6f,0x323,0x302,0x83, +0xe6,0x4f,0x31b,0x301,0x83,0xe6,0x6f,0x31b,0x301,0x83,0xe6,0x4f,0x31b,0x300,0x83,0xe6, +0x6f,0x31b,0x300,0x83,0xe6,0x4f,0x31b,0x309,0x83,0xe6,0x6f,0x31b,0x309,0x83,0xe6,0x4f, +0x31b,0x303,0x83,0xe6,0x6f,0x31b,0x303,0x83,0xdc,0x4f,0x31b,0x323,0x83,0xdc,0x6f,0x31b, +0x323,0x82,0xdc,0x55,0x323,0x82,0xdc,0x75,0x323,0x82,0xe6,0x55,0x309,0x82,0xe6,0x75, +0x309,0x83,0xe6,0x55,0x31b,0x301,0x83,0xe6,0x75,0x31b,0x301,0x83,0xe6,0x55,0x31b,0x300, +0x83,0xe6,0x75,0x31b,0x300,0x83,0xe6,0x55,0x31b,0x309,0x83,0xe6,0x75,0x31b,0x309,0x83, +0xe6,0x55,0x31b,0x303,0x83,0xe6,0x75,0x31b,0x303,0x83,0xdc,0x55,0x31b,0x323,0x83,0xdc, +0x75,0x31b,0x323,0x82,0xe6,0x59,0x300,0x82,0xe6,0x79,0x300,0x82,0xdc,0x59,0x323,0x82, +0xdc,0x79,0x323,0x82,0xe6,0x59,0x309,0x82,0xe6,0x79,0x309,0x82,0xe6,0x59,0x303,0x82, +0xe6,0x79,0x303,0x55e,0x82,0xe6,0x3b1,0x313,0x566,0x82,0xe6,0x3b1,0x314,0x608,0x83,0xe6, +0x3b1,0x313,0x300,0x60a,0x83,0xe6,0x3b1,0x314,0x300,0x60c,0x83,0xe6,0x3b1,0x313,0x301,0x60e, +0x83,0xe6,0x3b1,0x314,0x301,0x610,0x83,0xe6,0x3b1,0x313,0x342,0x612,0x83,0xe6,0x3b1,0x314, +0x342,0x56e,0x82,0xe6,0x391,0x313,0x576,0x82,0xe6,0x391,0x314,0x614,0x83,0xe6,0x391,0x313, +0x300,0x616,0x83,0xe6,0x391,0x314,0x300,0x618,0x83,0xe6,0x391,0x313,0x301,0x61a,0x83,0xe6, +0x391,0x314,0x301,0x61c,0x83,0xe6,0x391,0x313,0x342,0x61e,0x83,0xe6,0x391,0x314,0x342,0x57e, +0x82,0xe6,0x3b5,0x313,0x582,0x82,0xe6,0x3b5,0x314,0x83,0xe6,0x3b5,0x313,0x300,0x83,0xe6, +0x3b5,0x314,0x300,0x83,0xe6,0x3b5,0x313,0x301,0x83,0xe6,0x3b5,0x314,0x301,0x586,0x82,0xe6, +0x395,0x313,0x58a,0x82,0xe6,0x395,0x314,0x83,0xe6,0x395,0x313,0x300,0x83,0xe6,0x395,0x314, +0x300,0x83,0xe6,0x395,0x313,0x301,0x83,0xe6,0x395,0x314,0x301,0x58e,0x82,0xe6,0x3b7,0x313, +0x596,0x82,0xe6,0x3b7,0x314,0x620,0x83,0xe6,0x3b7,0x313,0x300,0x622,0x83,0xe6,0x3b7,0x314, +0x300,0x624,0x83,0xe6,0x3b7,0x313,0x301,0x626,0x83,0xe6,0x3b7,0x314,0x301,0x628,0x83,0xe6, +0x3b7,0x313,0x342,0x62a,0x83,0xe6,0x3b7,0x314,0x342,0x59e,0x82,0xe6,0x397,0x313,0x5a6,0x82, +0xe6,0x397,0x314,0x62c,0x83,0xe6,0x397,0x313,0x300,0x62e,0x83,0xe6,0x397,0x314,0x300,0x630, +0x83,0xe6,0x397,0x313,0x301,0x632,0x83,0xe6,0x397,0x314,0x301,0x634,0x83,0xe6,0x397,0x313, +0x342,0x636,0x83,0xe6,0x397,0x314,0x342,0x5ae,0x82,0xe6,0x3b9,0x313,0x5b4,0x82,0xe6,0x3b9, +0x314,0x83,0xe6,0x3b9,0x313,0x300,0x83,0xe6,0x3b9,0x314,0x300,0x83,0xe6,0x3b9,0x313,0x301, +0x83,0xe6,0x3b9,0x314,0x301,0x83,0xe6,0x3b9,0x313,0x342,0x83,0xe6,0x3b9,0x314,0x342,0x5ba, +0x82,0xe6,0x399,0x313,0x5c0,0x82,0xe6,0x399,0x314,0x83,0xe6,0x399,0x313,0x300,0x83,0xe6, +0x399,0x314,0x300,0x83,0xe6,0x399,0x313,0x301,0x83,0xe6,0x399,0x314,0x301,0x83,0xe6,0x399, +0x313,0x342,0x83,0xe6,0x399,0x314,0x342,0x5c6,0x82,0xe6,0x3bf,0x313,0x5ca,0x82,0xe6,0x3bf, +0x314,0x83,0xe6,0x3bf,0x313,0x300,0x83,0xe6,0x3bf,0x314,0x300,0x83,0xe6,0x3bf,0x313,0x301, +0x83,0xe6,0x3bf,0x314,0x301,0x5ce,0x82,0xe6,0x39f,0x313,0x5d2,0x82,0xe6,0x39f,0x314,0x83, +0xe6,0x39f,0x313,0x300,0x83,0xe6,0x39f,0x314,0x300,0x83,0xe6,0x39f,0x313,0x301,0x83,0xe6, +0x39f,0x314,0x301,0x5d6,0x82,0xe6,0x3c5,0x313,0x5dc,0x82,0xe6,0x3c5,0x314,0x83,0xe6,0x3c5, +0x313,0x300,0x83,0xe6,0x3c5,0x314,0x300,0x83,0xe6,0x3c5,0x313,0x301,0x83,0xe6,0x3c5,0x314, +0x301,0x83,0xe6,0x3c5,0x313,0x342,0x83,0xe6,0x3c5,0x314,0x342,0x5e2,0x82,0xe6,0x3a5,0x314, +0x83,0xe6,0x3a5,0x314,0x300,0x83,0xe6,0x3a5,0x314,0x301,0x83,0xe6,0x3a5,0x314,0x342,0x5e8, +0x82,0xe6,0x3c9,0x313,0x5f0,0x82,0xe6,0x3c9,0x314,0x638,0x83,0xe6,0x3c9,0x313,0x300,0x63a, +0x83,0xe6,0x3c9,0x314,0x300,0x63c,0x83,0xe6,0x3c9,0x313,0x301,0x63e,0x83,0xe6,0x3c9,0x314, +0x301,0x640,0x83,0xe6,0x3c9,0x313,0x342,0x642,0x83,0xe6,0x3c9,0x314,0x342,0x5f8,0x82,0xe6, +0x3a9,0x313,0x600,0x82,0xe6,0x3a9,0x314,0x644,0x83,0xe6,0x3a9,0x313,0x300,0x646,0x83,0xe6, +0x3a9,0x314,0x300,0x648,0x83,0xe6,0x3a9,0x313,0x301,0x64a,0x83,0xe6,0x3a9,0x314,0x301,0x64c, +0x83,0xe6,0x3a9,0x313,0x342,0x64e,0x83,0xe6,0x3a9,0x314,0x342,0x650,0x82,0xe6,0x3b1,0x300, +0x82,0xe6,0x3b5,0x300,0x656,0x82,0xe6,0x3b7,0x300,0x82,0xe6,0x3b9,0x300,0x82,0xe6,0x3bf, +0x300,0x82,0xe6,0x3c5,0x300,0x66e,0x82,0xe6,0x3c9,0x300,0x83,0xf0,0x3b1,0x313,0x345,0x83, +0xf0,0x3b1,0x314,0x345,0x84,0xf0,0x3b1,0x313,0x300,0x345,0x84,0xf0,0x3b1,0x314,0x300,0x345, +0x84,0xf0,0x3b1,0x313,0x301,0x345,0x84,0xf0,0x3b1,0x314,0x301,0x345,0x84,0xf0,0x3b1,0x313, +0x342,0x345,0x84,0xf0,0x3b1,0x314,0x342,0x345,0x83,0xf0,0x391,0x313,0x345,0x83,0xf0,0x391, +0x314,0x345,0x84,0xf0,0x391,0x313,0x300,0x345,0x84,0xf0,0x391,0x314,0x300,0x345,0x84,0xf0, +0x391,0x313,0x301,0x345,0x84,0xf0,0x391,0x314,0x301,0x345,0x84,0xf0,0x391,0x313,0x342,0x345, +0x84,0xf0,0x391,0x314,0x342,0x345,0x83,0xf0,0x3b7,0x313,0x345,0x83,0xf0,0x3b7,0x314,0x345, +0x84,0xf0,0x3b7,0x313,0x300,0x345,0x84,0xf0,0x3b7,0x314,0x300,0x345,0x84,0xf0,0x3b7,0x313, +0x301,0x345,0x84,0xf0,0x3b7,0x314,0x301,0x345,0x84,0xf0,0x3b7,0x313,0x342,0x345,0x84,0xf0, +0x3b7,0x314,0x342,0x345,0x83,0xf0,0x397,0x313,0x345,0x83,0xf0,0x397,0x314,0x345,0x84,0xf0, +0x397,0x313,0x300,0x345,0x84,0xf0,0x397,0x314,0x300,0x345,0x84,0xf0,0x397,0x313,0x301,0x345, +0x84,0xf0,0x397,0x314,0x301,0x345,0x84,0xf0,0x397,0x313,0x342,0x345,0x84,0xf0,0x397,0x314, +0x342,0x345,0x83,0xf0,0x3c9,0x313,0x345,0x83,0xf0,0x3c9,0x314,0x345,0x84,0xf0,0x3c9,0x313, +0x300,0x345,0x84,0xf0,0x3c9,0x314,0x300,0x345,0x84,0xf0,0x3c9,0x313,0x301,0x345,0x84,0xf0, +0x3c9,0x314,0x301,0x345,0x84,0xf0,0x3c9,0x313,0x342,0x345,0x84,0xf0,0x3c9,0x314,0x342,0x345, +0x83,0xf0,0x3a9,0x313,0x345,0x83,0xf0,0x3a9,0x314,0x345,0x84,0xf0,0x3a9,0x313,0x300,0x345, +0x84,0xf0,0x3a9,0x314,0x300,0x345,0x84,0xf0,0x3a9,0x313,0x301,0x345,0x84,0xf0,0x3a9,0x314, +0x301,0x345,0x84,0xf0,0x3a9,0x313,0x342,0x345,0x84,0xf0,0x3a9,0x314,0x342,0x345,0x82,0xe6, +0x3b1,0x306,0x82,0xe6,0x3b1,0x304,0x83,0xf0,0x3b1,0x300,0x345,0x82,0xf0,0x3b1,0x345,0x83, +0xf0,0x3b1,0x301,0x345,0x654,0x82,0xe6,0x3b1,0x342,0x83,0xf0,0x3b1,0x342,0x345,0x82,0xe6, +0x391,0x306,0x82,0xe6,0x391,0x304,0x82,0xe6,0x391,0x300,0x82,0xf0,0x391,0x345,0x8382,0xe6, +0xa8,0x342,0xe6,0x20,0x308,0x342,0x83,0xf0,0x3b7,0x300,0x345,0x82,0xf0,0x3b7,0x345,0x83, +0xf0,0x3b7,0x301,0x345,0x65a,0x82,0xe6,0x3b7,0x342,0x83,0xf0,0x3b7,0x342,0x345,0x82,0xe6, +0x395,0x300,0x82,0xe6,0x397,0x300,0x82,0xf0,0x397,0x345,0x8382,0xe6,0x1fbf,0x300,0xe6,0x20, +0x313,0x300,0x8382,0xe6,0x1fbf,0x301,0xe6,0x20,0x313,0x301,0x8382,0xe6,0x1fbf,0x342,0xe6,0x20, +0x313,0x342,0x82,0xe6,0x3b9,0x306,0x82,0xe6,0x3b9,0x304,0x83,0xe6,0x3b9,0x308,0x300,0x82, +0xe6,0x3b9,0x342,0x83,0xe6,0x3b9,0x308,0x342,0x82,0xe6,0x399,0x306,0x82,0xe6,0x399,0x304, +0x82,0xe6,0x399,0x300,0x8382,0xe6,0x1ffe,0x300,0xe6,0x20,0x314,0x300,0x8382,0xe6,0x1ffe,0x301, +0xe6,0x20,0x314,0x301,0x8382,0xe6,0x1ffe,0x342,0xe6,0x20,0x314,0x342,0x82,0xe6,0x3c5,0x306, +0x82,0xe6,0x3c5,0x304,0x83,0xe6,0x3c5,0x308,0x300,0x82,0xe6,0x3c1,0x313,0x82,0xe6,0x3c1, +0x314,0x82,0xe6,0x3c5,0x342,0x83,0xe6,0x3c5,0x308,0x342,0x82,0xe6,0x3a5,0x306,0x82,0xe6, +0x3a5,0x304,0x82,0xe6,0x3a5,0x300,0x82,0xe6,0x3a1,0x314,0x8382,0xe6,0xa8,0x300,0xe6,0x20, +0x308,0x300,0x83,0xf0,0x3c9,0x300,0x345,0x82,0xf0,0x3c9,0x345,0x83,0xf0,0x3c9,0x301,0x345, +0x672,0x82,0xe6,0x3c9,0x342,0x83,0xf0,0x3c9,0x342,0x345,0x82,0xe6,0x39f,0x300,0x82,0xe6, +0x3a9,0x300,0x82,0xf0,0x3a9,0x345,0x82,1,0x2190,0x338,0x82,1,0x2192,0x338,0x82,1, +0x2194,0x338,0x82,1,0x21d0,0x338,0x82,1,0x21d4,0x338,0x82,1,0x21d2,0x338,0x82,1, +0x2203,0x338,0x82,1,0x2208,0x338,0x82,1,0x220b,0x338,0x82,1,0x2223,0x338,0x82,1, +0x2225,0x338,0x82,1,0x223c,0x338,0x82,1,0x2243,0x338,0x82,1,0x2245,0x338,0x82,1, +0x2248,0x338,0x82,1,0x3d,0x338,0x82,1,0x2261,0x338,0x82,1,0x224d,0x338,0x82,1, +0x3c,0x338,0x82,1,0x3e,0x338,0x82,1,0x2264,0x338,0x82,1,0x2265,0x338,0x82,1, +0x2272,0x338,0x82,1,0x2273,0x338,0x82,1,0x2276,0x338,0x82,1,0x2277,0x338,0x82,1, +0x227a,0x338,0x82,1,0x227b,0x338,0x82,1,0x2282,0x338,0x82,1,0x2283,0x338,0x82,1, +0x2286,0x338,0x82,1,0x2287,0x338,0x82,1,0x22a2,0x338,0x82,1,0x22a8,0x338,0x82,1, +0x22a9,0x338,0x82,1,0x22ab,0x338,0x82,1,0x227c,0x338,0x82,1,0x227d,0x338,0x82,1, +0x2291,0x338,0x82,1,0x2292,0x338,0x82,1,0x22b2,0x338,0x82,1,0x22b3,0x338,0x82,1, +0x22b4,0x338,0x82,1,0x22b5,0x338,0x82,8,0x304b,0x3099,0x82,8,0x304d,0x3099,0x82,8, +0x304f,0x3099,0x82,8,0x3051,0x3099,0x82,8,0x3053,0x3099,0x82,8,0x3055,0x3099,0x82,8, +0x3057,0x3099,0x82,8,0x3059,0x3099,0x82,8,0x305b,0x3099,0x82,8,0x305d,0x3099,0x82,8, +0x305f,0x3099,0x82,8,0x3061,0x3099,0x82,8,0x3064,0x3099,0x82,8,0x3066,0x3099,0x82,8, +0x3068,0x3099,0x82,8,0x306f,0x3099,0x82,8,0x306f,0x309a,0x82,8,0x3072,0x3099,0x82,8, +0x3072,0x309a,0x82,8,0x3075,0x3099,0x82,8,0x3075,0x309a,0x82,8,0x3078,0x3099,0x82,8, +0x3078,0x309a,0x82,8,0x307b,0x3099,0x82,8,0x307b,0x309a,0x82,8,0x3046,0x3099,0x82,8, +0x309d,0x3099,0x82,8,0x30ab,0x3099,0x82,8,0x30ad,0x3099,0x82,8,0x30af,0x3099,0x82,8, +0x30b1,0x3099,0x82,8,0x30b3,0x3099,0x82,8,0x30b5,0x3099,0x82,8,0x30b7,0x3099,0x82,8, +0x30b9,0x3099,0x82,8,0x30bb,0x3099,0x82,8,0x30bd,0x3099,0x82,8,0x30bf,0x3099,0x82,8, +0x30c1,0x3099,0x82,8,0x30c4,0x3099,0x82,8,0x30c6,0x3099,0x82,8,0x30c8,0x3099,0x82,8, +0x30cf,0x3099,0x82,8,0x30cf,0x309a,0x82,8,0x30d2,0x3099,0x82,8,0x30d2,0x309a,0x82,8, +0x30d5,0x3099,0x82,8,0x30d5,0x309a,0x82,8,0x30d8,0x3099,0x82,8,0x30d8,0x309a,0x82,8, +0x30db,0x3099,0x82,8,0x30db,0x309a,0x82,8,0x30a6,0x3099,0x82,8,0x30ef,0x3099,0x82,8, +0x30f0,0x3099,0x82,8,0x30f1,0x3099,0x82,8,0x30f2,0x3099,0x82,8,0x30fd,0x3099,0x7a6,0x7a7, +0x7a8,0x7a9,0x7ad,0x7ae,0x7b0,0x7aa,0x7d4,0x7ab,0x7b2,0x7b1,0x7b4,0x7b5,0x7d5,0x7d6,0x7b3,0x7ce, +0x7d3,0x7cd,0x7b6,0x7ac,0x7af,0x7d0,0x7d2,0x7d1,0x7cf,0x7d9,0x7d7,0x7d8,0x7b7,0x7b8,0x7b9,0x7ba, +0x7bb,0x7bc,0x7be,0x7bd,0x7bf,0x7c1,0x7c0,0x7c2,0x7c5,0x7c3,0x7c4,0x7c6,0x7c7,0x7c8,0x7c9,0x7ca, +0x7cb,0x7cc,0x7da,0x7db,0x100,0x20,0x2fc,0x8200,0xe6,0x20,0x308,0x100,0x61,0x8200,0xe6,0x20, +0x304,0x100,0x32,0x100,0x33,0x8200,0xe6,0x20,0x301,0x100,0x3bc,0x8200,0xca,0x20,0x327,0x100, +0x31,0x100,0x6f,0x300,0x31,0x2044,0x34,0x300,0x31,0x2044,0x32,0x300,0x33,0x2044,0x34,0x200, +0x49,0x4a,0x200,0x69,0x6a,0x200,0x4c,0xb7,0x200,0x6c,0xb7,0x200,0x2bc,0x6e,0x4e4,0x100, +0x73,0x8300,0xe6,0x44,0x5a,0x30c,0x8300,0xe6,0x44,0x7a,0x30c,0x8300,0xe6,0x64,0x7a,0x30c, +0x200,0x4c,0x4a,0x200,0x4c,0x6a,0x200,0x6c,0x6a,0x200,0x4e,0x4a,0x200,0x4e,0x6a,0x200, +0x6e,0x6a,0x200,0x44,0x5a,0x200,0x44,0x7a,0x200,0x64,0x7a,0x100,0x68,0x100,0x266,0x100, +0x6a,0x100,0x72,0x100,0x279,0x100,0x27b,0x100,0x281,0x100,0x77,0x100,0x79,0x8200,0xe6,0x20, +0x306,0x8200,0xe6,0x20,0x307,0x8200,0xe6,0x20,0x30a,0x8200,0xca,0x20,0x328,0x8200,0xe6,0x20, +0x303,0x8200,0xe6,0x20,0x30b,0x100,0x263,0x100,0x6c,0x100,0x73,0x100,0x78,0x100,0x295,0x8200, +0xe6,0x20,0x301,0x100,0x3b2,0x100,0x3b8,0x100,0x3c6,0x100,0x3c0,0x100,0x3ba,0x100,0x3c1,0x100, +0x398,0x100,0x3b5,0x200,0x565,0x582,0x200,0x627,0x674,0x200,0x648,0x674,0x200,0x6c7,0x674,0x200, +0x64a,0x674,0x200,0xe4d,0xe32,0x200,0xecd,0xeb2,0x200,0xeab,0xe99,0x200,0xeab,0xea1,0x100,0xf0b, +0x8300,0x82,0xfb2,0xf71,0xf80,0x8300,0x82,0xfb3,0xf71,0xf80,0x100,0x10dc,0x100,0x61,0x100,0x250, +0x100,0x251,0x100,0x1d02,0x100,0x62,0x100,0x64,0x100,0x65,0x100,0x259,0x100,0x25b,0x100,0x25c, +0x100,0x67,0x100,0x6b,0x100,0x6d,0x100,0x14b,0x100,0x6f,0x100,0x254,0x100,0x1d16,0x100,0x1d17, +0x100,0x70,0x100,0x74,0x100,0x75,0x100,0x1d1d,0x100,0x26f,0x100,0x76,0x100,0x1d25,0x100,0x3b2, +0x100,0x3b3,0x100,0x3b4,0x100,0x3c6,0x100,0x3c7,0x100,0x69,0x100,0x72,0x100,0x75,0x100,0x76, +0x100,0x3b2,0x100,0x3b3,0x100,0x3c1,0x100,0x3c6,0x100,0x3c7,0x100,0x43d,0x100,0x252,0x100,0x63, +0x100,0x255,0x100,0xf0,0x100,0x25c,0x100,0x66,0x100,0x25f,0x100,0x261,0x100,0x265,0x100,0x268, +0x100,0x269,0x100,0x26a,0x100,0x1d7b,0x100,0x29d,0x100,0x26d,0x100,0x1d85,0x100,0x29f,0x100,0x271, +0x100,0x270,0x100,0x272,0x100,0x273,0x100,0x274,0x100,0x275,0x100,0x278,0x100,0x282,0x100,0x283, +0x100,0x1ab,0x100,0x289,0x100,0x28a,0x100,0x1d1c,0x100,0x28b,0x100,0x28c,0x100,0x7a,0x100,0x290, +0x100,0x291,0x100,0x292,0x100,0x3b8,0x200,0x61,0x2be,0x8200,0xe6,0x20,0x313,0x65c,0x8200,0xe6, +0x20,0x313,0x8200,0xe6,0x20,0x342,0x662,0x8200,0xe6,0x20,0x314,0x100,0x20,0x100,0x20,0x100, +0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x20,0x100,0x2010,0x8200, +0xdc,0x20,0x333,0x100,0x2e,0x200,0x2e,0x2e,0x300,0x2e,0x2e,0x2e,0x100,0x20,0x200,0x2032, +0x2032,0x300,0x2032,0x2032,0x2032,0x200,0x2035,0x2035,0x300,0x2035,0x2035,0x2035,0x200,0x21,0x21,0x8200, +0xe6,0x20,0x305,0x200,0x3f,0x3f,0x200,0x3f,0x21,0x200,0x21,0x3f,0x400,0x2032,0x2032,0x2032, +0x2032,0x100,0x20,0x100,0x30,0x100,0x69,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100, +0x38,0x100,0x39,0x100,0x2b,0x100,0x2212,0x100,0x3d,0x100,0x28,0x100,0x29,0x100,0x6e,0x100, +0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100, +0x38,0x100,0x39,0x100,0x2b,0x100,0x2212,0x100,0x3d,0x100,0x28,0x100,0x29,0x100,0x61,0x100, +0x65,0x100,0x6f,0x100,0x78,0x100,0x259,0x300,0x61,0x2f,0x63,0x300,0x61,0x2f,0x73,0x300, +0x63,0x2f,0x6f,0x300,0x63,0x2f,0x75,0x100,0x67,0x100,0x68,0x100,0x127,0x100,0x6c,0x100, +0x65,0x100,0x6f,0x100,0x5d0,0x100,0x5d1,0x100,0x5d2,0x100,0x5d3,0x100,0x69,0x100,0x3c0,0x100, +0x3b3,0x100,0x2211,0x100,0x64,0x100,0x65,0x100,0x69,0x100,0x6a,0x300,0x31,0x2044,0x33,0x300, +0x32,0x2044,0x33,0x300,0x31,0x2044,0x35,0x300,0x32,0x2044,0x35,0x300,0x33,0x2044,0x35,0x300, +0x34,0x2044,0x35,0x300,0x31,0x2044,0x36,0x300,0x35,0x2044,0x36,0x300,0x31,0x2044,0x38,0x300, +0x33,0x2044,0x38,0x300,0x35,0x2044,0x38,0x300,0x37,0x2044,0x38,0x200,0x31,0x2044,0x100,0x49, +0x200,0x49,0x49,0x300,0x49,0x49,0x49,0x200,0x49,0x56,0x100,0x56,0x200,0x56,0x49,0x300, +0x56,0x49,0x49,0x400,0x56,0x49,0x49,0x49,0x200,0x49,0x58,0x100,0x58,0x200,0x58,0x49, +0x300,0x58,0x49,0x49,0x100,0x4c,0x100,0x43,0x100,0x44,0x100,0x4d,0x100,0x69,0x200,0x69, +0x69,0x300,0x69,0x69,0x69,0x200,0x69,0x76,0x100,0x76,0x200,0x76,0x69,0x300,0x76,0x69, +0x69,0x400,0x76,0x69,0x69,0x69,0x200,0x69,0x78,0x100,0x78,0x200,0x78,0x69,0x300,0x78, +0x69,0x69,0x100,0x6c,0x100,0x63,0x100,0x64,0x100,0x6d,0x200,0x222b,0x222b,0x300,0x222b,0x222b, +0x222b,0x200,0x222e,0x222e,0x300,0x222e,0x222e,0x222e,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34, +0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x200,0x31,0x30,0x200,0x31,0x31, +0x200,0x31,0x32,0x200,0x31,0x33,0x200,0x31,0x34,0x200,0x31,0x35,0x200,0x31,0x36,0x200, +0x31,0x37,0x200,0x31,0x38,0x200,0x31,0x39,0x200,0x32,0x30,0x300,0x28,0x31,0x29,0x300, +0x28,0x32,0x29,0x300,0x28,0x33,0x29,0x300,0x28,0x34,0x29,0x300,0x28,0x35,0x29,0x300, +0x28,0x36,0x29,0x300,0x28,0x37,0x29,0x300,0x28,0x38,0x29,0x300,0x28,0x39,0x29,0x400, +0x28,0x31,0x30,0x29,0x400,0x28,0x31,0x31,0x29,0x400,0x28,0x31,0x32,0x29,0x400,0x28, +0x31,0x33,0x29,0x400,0x28,0x31,0x34,0x29,0x400,0x28,0x31,0x35,0x29,0x400,0x28,0x31, +0x36,0x29,0x400,0x28,0x31,0x37,0x29,0x400,0x28,0x31,0x38,0x29,0x400,0x28,0x31,0x39, +0x29,0x400,0x28,0x32,0x30,0x29,0x200,0x31,0x2e,0x200,0x32,0x2e,0x200,0x33,0x2e,0x200, +0x34,0x2e,0x200,0x35,0x2e,0x200,0x36,0x2e,0x200,0x37,0x2e,0x200,0x38,0x2e,0x200,0x39, +0x2e,0x300,0x31,0x30,0x2e,0x300,0x31,0x31,0x2e,0x300,0x31,0x32,0x2e,0x300,0x31,0x33, +0x2e,0x300,0x31,0x34,0x2e,0x300,0x31,0x35,0x2e,0x300,0x31,0x36,0x2e,0x300,0x31,0x37, +0x2e,0x300,0x31,0x38,0x2e,0x300,0x31,0x39,0x2e,0x300,0x32,0x30,0x2e,0x300,0x28,0x61, +0x29,0x300,0x28,0x62,0x29,0x300,0x28,0x63,0x29,0x300,0x28,0x64,0x29,0x300,0x28,0x65, +0x29,0x300,0x28,0x66,0x29,0x300,0x28,0x67,0x29,0x300,0x28,0x68,0x29,0x300,0x28,0x69, +0x29,0x300,0x28,0x6a,0x29,0x300,0x28,0x6b,0x29,0x300,0x28,0x6c,0x29,0x300,0x28,0x6d, +0x29,0x300,0x28,0x6e,0x29,0x300,0x28,0x6f,0x29,0x300,0x28,0x70,0x29,0x300,0x28,0x71, +0x29,0x300,0x28,0x72,0x29,0x300,0x28,0x73,0x29,0x300,0x28,0x74,0x29,0x300,0x28,0x75, +0x29,0x300,0x28,0x76,0x29,0x300,0x28,0x77,0x29,0x300,0x28,0x78,0x29,0x300,0x28,0x79, +0x29,0x300,0x28,0x7a,0x29,0x100,0x41,0x100,0x42,0x100,0x43,0x100,0x44,0x100,0x45,0x100, +0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100,0x4b,0x100,0x4c,0x100,0x4d,0x100, +0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100,0x53,0x100,0x54,0x100,0x55,0x100, +0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100,0x61,0x100,0x62,0x100,0x63,0x100, +0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100, +0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100, +0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x30,0x400, +0x222b,0x222b,0x222b,0x222b,0x300,0x3a,0x3a,0x3d,0x200,0x3d,0x3d,0x300,0x3d,0x3d,0x3d,0x100, +0x2d61,0x100,0x6bcd,0x100,0x9f9f,0x100,0x4e00,0x100,0x4e28,0x100,0x4e36,0x100,0x4e3f,0x100,0x4e59,0x100, +0x4e85,0x100,0x4e8c,0x100,0x4ea0,0x100,0x4eba,0x100,0x513f,0x100,0x5165,0x100,0x516b,0x100,0x5182,0x100, +0x5196,0x100,0x51ab,0x100,0x51e0,0x100,0x51f5,0x100,0x5200,0x100,0x529b,0x100,0x52f9,0x100,0x5315,0x100, +0x531a,0x100,0x5338,0x100,0x5341,0x100,0x535c,0x100,0x5369,0x100,0x5382,0x100,0x53b6,0x100,0x53c8,0x100, +0x53e3,0x100,0x56d7,0x100,0x571f,0x100,0x58eb,0x100,0x5902,0x100,0x590a,0x100,0x5915,0x100,0x5927,0x100, +0x5973,0x100,0x5b50,0x100,0x5b80,0x100,0x5bf8,0x100,0x5c0f,0x100,0x5c22,0x100,0x5c38,0x100,0x5c6e,0x100, +0x5c71,0x100,0x5ddb,0x100,0x5de5,0x100,0x5df1,0x100,0x5dfe,0x100,0x5e72,0x100,0x5e7a,0x100,0x5e7f,0x100, +0x5ef4,0x100,0x5efe,0x100,0x5f0b,0x100,0x5f13,0x100,0x5f50,0x100,0x5f61,0x100,0x5f73,0x100,0x5fc3,0x100, +0x6208,0x100,0x6236,0x100,0x624b,0x100,0x652f,0x100,0x6534,0x100,0x6587,0x100,0x6597,0x100,0x65a4,0x100, +0x65b9,0x100,0x65e0,0x100,0x65e5,0x100,0x66f0,0x100,0x6708,0x100,0x6728,0x100,0x6b20,0x100,0x6b62,0x100, +0x6b79,0x100,0x6bb3,0x100,0x6bcb,0x100,0x6bd4,0x100,0x6bdb,0x100,0x6c0f,0x100,0x6c14,0x100,0x6c34,0x100, +0x706b,0x100,0x722a,0x100,0x7236,0x100,0x723b,0x100,0x723f,0x100,0x7247,0x100,0x7259,0x100,0x725b,0x100, +0x72ac,0x100,0x7384,0x100,0x7389,0x100,0x74dc,0x100,0x74e6,0x100,0x7518,0x100,0x751f,0x100,0x7528,0x100, +0x7530,0x100,0x758b,0x100,0x7592,0x100,0x7676,0x100,0x767d,0x100,0x76ae,0x100,0x76bf,0x100,0x76ee,0x100, +0x77db,0x100,0x77e2,0x100,0x77f3,0x100,0x793a,0x100,0x79b8,0x100,0x79be,0x100,0x7a74,0x100,0x7acb,0x100, +0x7af9,0x100,0x7c73,0x100,0x7cf8,0x100,0x7f36,0x100,0x7f51,0x100,0x7f8a,0x100,0x7fbd,0x100,0x8001,0x100, +0x800c,0x100,0x8012,0x100,0x8033,0x100,0x807f,0x100,0x8089,0x100,0x81e3,0x100,0x81ea,0x100,0x81f3,0x100, +0x81fc,0x100,0x820c,0x100,0x821b,0x100,0x821f,0x100,0x826e,0x100,0x8272,0x100,0x8278,0x100,0x864d,0x100, +0x866b,0x100,0x8840,0x100,0x884c,0x100,0x8863,0x100,0x897e,0x100,0x898b,0x100,0x89d2,0x100,0x8a00,0x100, +0x8c37,0x100,0x8c46,0x100,0x8c55,0x100,0x8c78,0x100,0x8c9d,0x100,0x8d64,0x100,0x8d70,0x100,0x8db3,0x100, +0x8eab,0x100,0x8eca,0x100,0x8f9b,0x100,0x8fb0,0x100,0x8fb5,0x100,0x9091,0x100,0x9149,0x100,0x91c6,0x100, +0x91cc,0x100,0x91d1,0x100,0x9577,0x100,0x9580,0x100,0x961c,0x100,0x96b6,0x100,0x96b9,0x100,0x96e8,0x100, +0x9751,0x100,0x975e,0x100,0x9762,0x100,0x9769,0x100,0x97cb,0x100,0x97ed,0x100,0x97f3,0x100,0x9801,0x100, +0x98a8,0x100,0x98db,0x100,0x98df,0x100,0x9996,0x100,0x9999,0x100,0x99ac,0x100,0x9aa8,0x100,0x9ad8,0x100, +0x9adf,0x100,0x9b25,0x100,0x9b2f,0x100,0x9b32,0x100,0x9b3c,0x100,0x9b5a,0x100,0x9ce5,0x100,0x9e75,0x100, +0x9e7f,0x100,0x9ea5,0x100,0x9ebb,0x100,0x9ec3,0x100,0x9ecd,0x100,0x9ed1,0x100,0x9ef9,0x100,0x9efd,0x100, +0x9f0e,0x100,0x9f13,0x100,0x9f20,0x100,0x9f3b,0x100,0x9f4a,0x100,0x9f52,0x100,0x9f8d,0x100,0x9f9c,0x100, +0x9fa0,0x100,0x20,0x100,0x3012,0x100,0x5341,0x100,0x5344,0x100,0x5345,0x8200,8,0x20,0x3099,0x8200, +8,0x20,0x309a,0x200,0x3088,0x308a,0x200,0x30b3,0x30c8,0x100,0x1100,0x100,0x1101,0x100,0x11aa,0x100, +0x1102,0x100,0x11ac,0x100,0x11ad,0x100,0x1103,0x100,0x1104,0x100,0x1105,0x100,0x11b0,0x100,0x11b1,0x100, +0x11b2,0x100,0x11b3,0x100,0x11b4,0x100,0x11b5,0x100,0x111a,0x100,0x1106,0x100,0x1107,0x100,0x1108,0x100, +0x1121,0x100,0x1109,0x100,0x110a,0x100,0x110b,0x100,0x110c,0x100,0x110d,0x100,0x110e,0x100,0x110f,0x100, +0x1110,0x100,0x1111,0x100,0x1112,0x100,0x1161,0x100,0x1162,0x100,0x1163,0x100,0x1164,0x100,0x1165,0x100, +0x1166,0x100,0x1167,0x100,0x1168,0x100,0x1169,0x100,0x116a,0x100,0x116b,0x100,0x116c,0x100,0x116d,0x100, +0x116e,0x100,0x116f,0x100,0x1170,0x100,0x1171,0x100,0x1172,0x100,0x1173,0x100,0x1174,0x100,0x1175,0x100, +0x1160,0x100,0x1114,0x100,0x1115,0x100,0x11c7,0x100,0x11c8,0x100,0x11cc,0x100,0x11ce,0x100,0x11d3,0x100, +0x11d7,0x100,0x11d9,0x100,0x111c,0x100,0x11dd,0x100,0x11df,0x100,0x111d,0x100,0x111e,0x100,0x1120,0x100, +0x1122,0x100,0x1123,0x100,0x1127,0x100,0x1129,0x100,0x112b,0x100,0x112c,0x100,0x112d,0x100,0x112e,0x100, +0x112f,0x100,0x1132,0x100,0x1136,0x100,0x1140,0x100,0x1147,0x100,0x114c,0x100,0x11f1,0x100,0x11f2,0x100, +0x1157,0x100,0x1158,0x100,0x1159,0x100,0x1184,0x100,0x1185,0x100,0x1188,0x100,0x1191,0x100,0x1192,0x100, +0x1194,0x100,0x119e,0x100,0x11a1,0x100,0x4e00,0x100,0x4e8c,0x100,0x4e09,0x100,0x56db,0x100,0x4e0a,0x100, +0x4e2d,0x100,0x4e0b,0x100,0x7532,0x100,0x4e59,0x100,0x4e19,0x100,0x4e01,0x100,0x5929,0x100,0x5730,0x100, +0x4eba,0x300,0x28,0x1100,0x29,0x300,0x28,0x1102,0x29,0x300,0x28,0x1103,0x29,0x300,0x28,0x1105, +0x29,0x300,0x28,0x1106,0x29,0x300,0x28,0x1107,0x29,0x300,0x28,0x1109,0x29,0x300,0x28,0x110b, +0x29,0x300,0x28,0x110c,0x29,0x300,0x28,0x110e,0x29,0x300,0x28,0x110f,0x29,0x300,0x28,0x1110, +0x29,0x300,0x28,0x1111,0x29,0x300,0x28,0x1112,0x29,0x400,0x28,0x1100,0x1161,0x29,0x400,0x28, +0x1102,0x1161,0x29,0x400,0x28,0x1103,0x1161,0x29,0x400,0x28,0x1105,0x1161,0x29,0x400,0x28,0x1106, +0x1161,0x29,0x400,0x28,0x1107,0x1161,0x29,0x400,0x28,0x1109,0x1161,0x29,0x400,0x28,0x110b,0x1161, +0x29,0x400,0x28,0x110c,0x1161,0x29,0x400,0x28,0x110e,0x1161,0x29,0x400,0x28,0x110f,0x1161,0x29, +0x400,0x28,0x1110,0x1161,0x29,0x400,0x28,0x1111,0x1161,0x29,0x400,0x28,0x1112,0x1161,0x29,0x400, +0x28,0x110c,0x116e,0x29,0x700,0x28,0x110b,0x1169,0x110c,0x1165,0x11ab,0x29,0x600,0x28,0x110b,0x1169, +0x1112,0x116e,0x29,0x300,0x28,0x4e00,0x29,0x300,0x28,0x4e8c,0x29,0x300,0x28,0x4e09,0x29,0x300, +0x28,0x56db,0x29,0x300,0x28,0x4e94,0x29,0x300,0x28,0x516d,0x29,0x300,0x28,0x4e03,0x29,0x300, +0x28,0x516b,0x29,0x300,0x28,0x4e5d,0x29,0x300,0x28,0x5341,0x29,0x300,0x28,0x6708,0x29,0x300, +0x28,0x706b,0x29,0x300,0x28,0x6c34,0x29,0x300,0x28,0x6728,0x29,0x300,0x28,0x91d1,0x29,0x300, +0x28,0x571f,0x29,0x300,0x28,0x65e5,0x29,0x300,0x28,0x682a,0x29,0x300,0x28,0x6709,0x29,0x300, +0x28,0x793e,0x29,0x300,0x28,0x540d,0x29,0x300,0x28,0x7279,0x29,0x300,0x28,0x8ca1,0x29,0x300, +0x28,0x795d,0x29,0x300,0x28,0x52b4,0x29,0x300,0x28,0x4ee3,0x29,0x300,0x28,0x547c,0x29,0x300, +0x28,0x5b66,0x29,0x300,0x28,0x76e3,0x29,0x300,0x28,0x4f01,0x29,0x300,0x28,0x8cc7,0x29,0x300, +0x28,0x5354,0x29,0x300,0x28,0x796d,0x29,0x300,0x28,0x4f11,0x29,0x300,0x28,0x81ea,0x29,0x300, +0x28,0x81f3,0x29,0x200,0x32,0x31,0x200,0x32,0x32,0x200,0x32,0x33,0x200,0x32,0x34,0x200, +0x32,0x35,0x200,0x32,0x36,0x200,0x32,0x37,0x200,0x32,0x38,0x200,0x32,0x39,0x200,0x33, +0x30,0x200,0x33,0x31,0x200,0x33,0x32,0x200,0x33,0x33,0x200,0x33,0x34,0x200,0x33,0x35, +0x100,0x1100,0x100,0x1102,0x100,0x1103,0x100,0x1105,0x100,0x1106,0x100,0x1107,0x100,0x1109,0x100,0x110b, +0x100,0x110c,0x100,0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,0x100,0x1112,0x200,0x1100,0x1161,0x200, +0x1102,0x1161,0x200,0x1103,0x1161,0x200,0x1105,0x1161,0x200,0x1106,0x1161,0x200,0x1107,0x1161,0x200,0x1109, +0x1161,0x200,0x110b,0x1161,0x200,0x110c,0x1161,0x200,0x110e,0x1161,0x200,0x110f,0x1161,0x200,0x1110,0x1161, +0x200,0x1111,0x1161,0x200,0x1112,0x1161,0x500,0x110e,0x1161,0x11b7,0x1100,0x1169,0x400,0x110c,0x116e,0x110b, +0x1174,0x200,0x110b,0x116e,0x100,0x4e00,0x100,0x4e8c,0x100,0x4e09,0x100,0x56db,0x100,0x4e94,0x100,0x516d, +0x100,0x4e03,0x100,0x516b,0x100,0x4e5d,0x100,0x5341,0x100,0x6708,0x100,0x706b,0x100,0x6c34,0x100,0x6728, +0x100,0x91d1,0x100,0x571f,0x100,0x65e5,0x100,0x682a,0x100,0x6709,0x100,0x793e,0x100,0x540d,0x100,0x7279, +0x100,0x8ca1,0x100,0x795d,0x100,0x52b4,0x100,0x79d8,0x100,0x7537,0x100,0x5973,0x100,0x9069,0x100,0x512a, +0x100,0x5370,0x100,0x6ce8,0x100,0x9805,0x100,0x4f11,0x100,0x5199,0x100,0x6b63,0x100,0x4e0a,0x100,0x4e2d, +0x100,0x4e0b,0x100,0x5de6,0x100,0x53f3,0x100,0x533b,0x100,0x5b97,0x100,0x5b66,0x100,0x76e3,0x100,0x4f01, +0x100,0x8cc7,0x100,0x5354,0x100,0x591c,0x200,0x33,0x36,0x200,0x33,0x37,0x200,0x33,0x38,0x200, +0x33,0x39,0x200,0x34,0x30,0x200,0x34,0x31,0x200,0x34,0x32,0x200,0x34,0x33,0x200,0x34, +0x34,0x200,0x34,0x35,0x200,0x34,0x36,0x200,0x34,0x37,0x200,0x34,0x38,0x200,0x34,0x39, +0x200,0x35,0x30,0x200,0x31,0x6708,0x200,0x32,0x6708,0x200,0x33,0x6708,0x200,0x34,0x6708,0x200, +0x35,0x6708,0x200,0x36,0x6708,0x200,0x37,0x6708,0x200,0x38,0x6708,0x200,0x39,0x6708,0x300,0x31, +0x30,0x6708,0x300,0x31,0x31,0x6708,0x300,0x31,0x32,0x6708,0x300,0x65,0x72,0x67,0x100,0x30a2, +0x100,0x30a4,0x100,0x30a6,0x100,0x30a8,0x100,0x30aa,0x100,0x30ab,0x100,0x30ad,0x100,0x30af,0x100,0x30b1, +0x100,0x30b3,0x100,0x30b5,0x100,0x30b7,0x100,0x30b9,0x100,0x30bb,0x100,0x30bd,0x100,0x30bf,0x100,0x30c1, +0x100,0x30c4,0x100,0x30c6,0x100,0x30c8,0x100,0x30ca,0x100,0x30cb,0x100,0x30cc,0x100,0x30cd,0x100,0x30ce, +0x100,0x30cf,0x100,0x30d2,0x100,0x30d5,0x100,0x30d8,0x100,0x30db,0x100,0x30de,0x100,0x30df,0x100,0x30e0, +0x100,0x30e1,0x100,0x30e2,0x100,0x30e4,0x100,0x30e6,0x100,0x30e8,0x100,0x30e9,0x100,0x30ea,0x100,0x30eb, +0x100,0x30ec,0x100,0x30ed,0x100,0x30ef,0x100,0x30f0,0x100,0x30f1,0x100,0x30f2,0x500,0x30a2,0x30cf,0x309a, +0x30fc,0x30c8,0x400,0x30a2,0x30eb,0x30d5,0x30a1,0x500,0x30a2,0x30f3,0x30d8,0x309a,0x30a2,0x300,0x30a2,0x30fc, +0x30eb,0x8500,8,0x30a4,0x30cb,0x30f3,0x30af,0x3099,0x300,0x30a4,0x30f3,0x30c1,0x300,0x30a6,0x30a9,0x30f3, +0x8600,8,0x30a8,0x30b9,0x30af,0x30fc,0x30c8,0x3099,0x400,0x30a8,0x30fc,0x30ab,0x30fc,0x300,0x30aa,0x30f3, +0x30b9,0x300,0x30aa,0x30fc,0x30e0,0x300,0x30ab,0x30a4,0x30ea,0x400,0x30ab,0x30e9,0x30c3,0x30c8,0x400,0x30ab, +0x30ed,0x30ea,0x30fc,0x400,0x30ab,0x3099,0x30ed,0x30f3,0x400,0x30ab,0x3099,0x30f3,0x30de,0x8400,8,0x30ad, +0x3099,0x30ab,0x3099,0x400,0x30ad,0x3099,0x30cb,0x30fc,0x400,0x30ad,0x30e5,0x30ea,0x30fc,0x600,0x30ad,0x3099, +0x30eb,0x30bf,0x3099,0x30fc,0x200,0x30ad,0x30ed,0x600,0x30ad,0x30ed,0x30af,0x3099,0x30e9,0x30e0,0x600,0x30ad, +0x30ed,0x30e1,0x30fc,0x30c8,0x30eb,0x500,0x30ad,0x30ed,0x30ef,0x30c3,0x30c8,0x400,0x30af,0x3099,0x30e9,0x30e0, +0x600,0x30af,0x3099,0x30e9,0x30e0,0x30c8,0x30f3,0x600,0x30af,0x30eb,0x30bb,0x3099,0x30a4,0x30ed,0x400,0x30af, +0x30ed,0x30fc,0x30cd,0x300,0x30b1,0x30fc,0x30b9,0x300,0x30b3,0x30eb,0x30ca,0x8400,8,0x30b3,0x30fc,0x30db, +0x309a,0x400,0x30b5,0x30a4,0x30af,0x30eb,0x500,0x30b5,0x30f3,0x30c1,0x30fc,0x30e0,0x8500,8,0x30b7,0x30ea, +0x30f3,0x30af,0x3099,0x300,0x30bb,0x30f3,0x30c1,0x300,0x30bb,0x30f3,0x30c8,0x400,0x30bf,0x3099,0x30fc,0x30b9, +0x300,0x30c6,0x3099,0x30b7,0x300,0x30c8,0x3099,0x30eb,0x200,0x30c8,0x30f3,0x200,0x30ca,0x30ce,0x300,0x30ce, +0x30c3,0x30c8,0x300,0x30cf,0x30a4,0x30c4,0x600,0x30cf,0x309a,0x30fc,0x30bb,0x30f3,0x30c8,0x400,0x30cf,0x309a, +0x30fc,0x30c4,0x500,0x30cf,0x3099,0x30fc,0x30ec,0x30eb,0x600,0x30d2,0x309a,0x30a2,0x30b9,0x30c8,0x30eb,0x400, +0x30d2,0x309a,0x30af,0x30eb,0x300,0x30d2,0x309a,0x30b3,0x300,0x30d2,0x3099,0x30eb,0x8600,8,0x30d5,0x30a1, +0x30e9,0x30c3,0x30c8,0x3099,0x400,0x30d5,0x30a3,0x30fc,0x30c8,0x600,0x30d5,0x3099,0x30c3,0x30b7,0x30a7,0x30eb, +0x300,0x30d5,0x30e9,0x30f3,0x500,0x30d8,0x30af,0x30bf,0x30fc,0x30eb,0x300,0x30d8,0x309a,0x30bd,0x400,0x30d8, +0x309a,0x30cb,0x30d2,0x300,0x30d8,0x30eb,0x30c4,0x400,0x30d8,0x309a,0x30f3,0x30b9,0x8500,8,0x30d8,0x309a, +0x30fc,0x30b7,0x3099,0x400,0x30d8,0x3099,0x30fc,0x30bf,0x500,0x30db,0x309a,0x30a4,0x30f3,0x30c8,0x400,0x30db, +0x3099,0x30eb,0x30c8,0x200,0x30db,0x30f3,0x8500,8,0x30db,0x309a,0x30f3,0x30c8,0x3099,0x300,0x30db,0x30fc, +0x30eb,0x300,0x30db,0x30fc,0x30f3,0x400,0x30de,0x30a4,0x30af,0x30ed,0x300,0x30de,0x30a4,0x30eb,0x300,0x30de, +0x30c3,0x30cf,0x300,0x30de,0x30eb,0x30af,0x500,0x30de,0x30f3,0x30b7,0x30e7,0x30f3,0x400,0x30df,0x30af,0x30ed, +0x30f3,0x200,0x30df,0x30ea,0x600,0x30df,0x30ea,0x30cf,0x3099,0x30fc,0x30eb,0x8300,8,0x30e1,0x30ab,0x3099, +0x500,0x30e1,0x30ab,0x3099,0x30c8,0x30f3,0x400,0x30e1,0x30fc,0x30c8,0x30eb,0x8400,8,0x30e4,0x30fc,0x30c8, +0x3099,0x300,0x30e4,0x30fc,0x30eb,0x300,0x30e6,0x30a2,0x30f3,0x400,0x30ea,0x30c3,0x30c8,0x30eb,0x200,0x30ea, +0x30e9,0x400,0x30eb,0x30d2,0x309a,0x30fc,0x500,0x30eb,0x30fc,0x30d5,0x3099,0x30eb,0x200,0x30ec,0x30e0,0x600, +0x30ec,0x30f3,0x30c8,0x30b1,0x3099,0x30f3,0x300,0x30ef,0x30c3,0x30c8,0x200,0x30,0x70b9,0x200,0x31,0x70b9, +0x200,0x32,0x70b9,0x200,0x33,0x70b9,0x200,0x34,0x70b9,0x200,0x35,0x70b9,0x200,0x36,0x70b9,0x200, +0x37,0x70b9,0x200,0x38,0x70b9,0x200,0x39,0x70b9,0x300,0x31,0x30,0x70b9,0x300,0x31,0x31,0x70b9, +0x300,0x31,0x32,0x70b9,0x300,0x31,0x33,0x70b9,0x300,0x31,0x34,0x70b9,0x300,0x31,0x35,0x70b9, +0x300,0x31,0x36,0x70b9,0x300,0x31,0x37,0x70b9,0x300,0x31,0x38,0x70b9,0x300,0x31,0x39,0x70b9, +0x300,0x32,0x30,0x70b9,0x300,0x32,0x31,0x70b9,0x300,0x32,0x32,0x70b9,0x300,0x32,0x33,0x70b9, +0x300,0x32,0x34,0x70b9,0x200,0x64,0x61,0x300,0x62,0x61,0x72,0x200,0x70,0x63,0x200,0x64, +0x6d,0x300,0x64,0x6d,0x32,0x300,0x64,0x6d,0x33,0x200,0x5e73,0x6210,0x200,0x662d,0x548c,0x200, +0x5927,0x6b63,0x200,0x660e,0x6cbb,0x400,0x682a,0x5f0f,0x4f1a,0x793e,0x300,0x63,0x61,0x6c,0x400,0x6b, +0x63,0x61,0x6c,0x200,0x3bc,0x67,0x200,0x6d,0x67,0x200,0x6b,0x67,0x200,0x3bc,0x6c,0x200, +0x6d,0x6c,0x200,0x64,0x6c,0x200,0x6b,0x6c,0x200,0x66,0x6d,0x200,0x6e,0x6d,0x200,0x3bc, +0x6d,0x200,0x6d,0x6d,0x200,0x63,0x6d,0x200,0x6b,0x6d,0x300,0x6d,0x6d,0x32,0x300,0x63, +0x6d,0x32,0x200,0x6d,0x32,0x300,0x6b,0x6d,0x32,0x300,0x6d,0x6d,0x33,0x300,0x63,0x6d, +0x33,0x200,0x6d,0x33,0x300,0x6b,0x6d,0x33,0x300,0x6d,0x2215,0x73,0x400,0x6d,0x2215,0x73, +0x32,0x300,0x72,0x61,0x64,0x500,0x72,0x61,0x64,0x2215,0x73,0x600,0x72,0x61,0x64,0x2215, +0x73,0x32,0x200,0x70,0x73,0x200,0x6e,0x73,0x200,0x3bc,0x73,0x200,0x6d,0x73,0x400,0x61, +0x2e,0x6d,0x2e,0x200,0x63,0x63,0x200,0x63,0x64,0x200,0x68,0x61,0x200,0x69,0x6e,0x200, +0x6b,0x74,0x200,0x6c,0x6d,0x200,0x6c,0x6e,0x300,0x6c,0x6f,0x67,0x200,0x6c,0x78,0x200, +0x6d,0x62,0x300,0x6d,0x69,0x6c,0x300,0x6d,0x6f,0x6c,0x400,0x70,0x2e,0x6d,0x2e,0x200, +0x73,0x72,0x200,0x31,0x65e5,0x200,0x32,0x65e5,0x200,0x33,0x65e5,0x200,0x34,0x65e5,0x200,0x35, +0x65e5,0x200,0x36,0x65e5,0x200,0x37,0x65e5,0x200,0x38,0x65e5,0x200,0x39,0x65e5,0x300,0x31,0x30, +0x65e5,0x300,0x31,0x31,0x65e5,0x300,0x31,0x32,0x65e5,0x300,0x31,0x33,0x65e5,0x300,0x31,0x34, +0x65e5,0x300,0x31,0x35,0x65e5,0x300,0x31,0x36,0x65e5,0x300,0x31,0x37,0x65e5,0x300,0x31,0x38, +0x65e5,0x300,0x31,0x39,0x65e5,0x300,0x32,0x30,0x65e5,0x300,0x32,0x31,0x65e5,0x300,0x32,0x32, +0x65e5,0x300,0x32,0x33,0x65e5,0x300,0x32,0x34,0x65e5,0x300,0x32,0x35,0x65e5,0x300,0x32,0x36, +0x65e5,0x300,0x32,0x37,0x65e5,0x300,0x32,0x38,0x65e5,0x300,0x32,0x39,0x65e5,0x300,0x33,0x30, +0x65e5,0x300,0x33,0x31,0x65e5,0x300,0x67,0x61,0x6c,0x200,0x66,0x66,0x200,0x66,0x69,0x200, +0x66,0x6c,0x300,0x66,0x66,0x69,0x300,0x66,0x66,0x6c,0x200,0x73,0x74,0x200,0x73,0x74, +0x200,0x574,0x576,0x200,0x574,0x565,0x200,0x574,0x56b,0x200,0x57e,0x576,0x200,0x574,0x56d,0x100, +0x5e2,0x100,0x5d0,0x100,0x5d3,0x100,0x5d4,0x100,0x5db,0x100,0x5dc,0x100,0x5dd,0x100,0x5e8,0x100, +0x5ea,0x100,0x2b,0x200,0x5d0,0x5dc,0x100,0x671,0x100,0x671,0x100,0x67b,0x100,0x67b,0x100,0x67b, +0x100,0x67b,0x100,0x67e,0x100,0x67e,0x100,0x67e,0x100,0x67e,0x100,0x680,0x100,0x680,0x100,0x680, +0x100,0x680,0x100,0x67a,0x100,0x67a,0x100,0x67a,0x100,0x67a,0x100,0x67f,0x100,0x67f,0x100,0x67f, +0x100,0x67f,0x100,0x679,0x100,0x679,0x100,0x679,0x100,0x679,0x100,0x6a4,0x100,0x6a4,0x100,0x6a4, +0x100,0x6a4,0x100,0x6a6,0x100,0x6a6,0x100,0x6a6,0x100,0x6a6,0x100,0x684,0x100,0x684,0x100,0x684, +0x100,0x684,0x100,0x683,0x100,0x683,0x100,0x683,0x100,0x683,0x100,0x686,0x100,0x686,0x100,0x686, +0x100,0x686,0x100,0x687,0x100,0x687,0x100,0x687,0x100,0x687,0x100,0x68d,0x100,0x68d,0x100,0x68c, +0x100,0x68c,0x100,0x68e,0x100,0x68e,0x100,0x688,0x100,0x688,0x100,0x698,0x100,0x698,0x100,0x691, +0x100,0x691,0x100,0x6a9,0x100,0x6a9,0x100,0x6a9,0x100,0x6a9,0x100,0x6af,0x100,0x6af,0x100,0x6af, +0x100,0x6af,0x100,0x6b3,0x100,0x6b3,0x100,0x6b3,0x100,0x6b3,0x100,0x6b1,0x100,0x6b1,0x100,0x6b1, +0x100,0x6b1,0x100,0x6ba,0x100,0x6ba,0x100,0x6bb,0x100,0x6bb,0x100,0x6bb,0x100,0x6bb,0x8200,0xe6, +0x6d5,0x654,0x8200,0xe6,0x6d5,0x654,0x100,0x6c1,0x100,0x6c1,0x100,0x6c1,0x100,0x6c1,0x100,0x6be, +0x100,0x6be,0x100,0x6be,0x100,0x6be,0x100,0x6d2,0x100,0x6d2,0x8200,0xe6,0x6d2,0x654,0x8200,0xe6, +0x6d2,0x654,0x100,0x6ad,0x100,0x6ad,0x100,0x6ad,0x100,0x6ad,0x100,0x6c7,0x100,0x6c7,0x100,0x6c6, +0x100,0x6c6,0x100,0x6c8,0x100,0x6c8,0x200,0x6c7,0x674,0x100,0x6cb,0x100,0x6cb,0x100,0x6c5,0x100, +0x6c5,0x100,0x6c9,0x100,0x6c9,0x100,0x6d0,0x100,0x6d0,0x100,0x6d0,0x100,0x6d0,0x100,0x649,0x100, +0x649,0x300,0x64a,0x654,0x627,0x300,0x64a,0x654,0x627,0x300,0x64a,0x654,0x6d5,0x300,0x64a,0x654, +0x6d5,0x300,0x64a,0x654,0x648,0x300,0x64a,0x654,0x648,0x300,0x64a,0x654,0x6c7,0x300,0x64a,0x654, +0x6c7,0x300,0x64a,0x654,0x6c6,0x300,0x64a,0x654,0x6c6,0x300,0x64a,0x654,0x6c8,0x300,0x64a,0x654, +0x6c8,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654,0x6d0,0x300,0x64a,0x654, +0x649,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,0x649,0x100,0x6cc,0x100,0x6cc,0x100,0x6cc,0x100, +0x6cc,0x300,0x64a,0x654,0x62c,0x300,0x64a,0x654,0x62d,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654, +0x649,0x300,0x64a,0x654,0x64a,0x200,0x628,0x62c,0x200,0x628,0x62d,0x200,0x628,0x62e,0x200,0x628, +0x645,0x200,0x628,0x649,0x200,0x628,0x64a,0x200,0x62a,0x62c,0x200,0x62a,0x62d,0x200,0x62a,0x62e, +0x200,0x62a,0x645,0x200,0x62a,0x649,0x200,0x62a,0x64a,0x200,0x62b,0x62c,0x200,0x62b,0x645,0x200, +0x62b,0x649,0x200,0x62b,0x64a,0x200,0x62c,0x62d,0x200,0x62c,0x645,0x200,0x62d,0x62c,0x200,0x62d, +0x645,0x200,0x62e,0x62c,0x200,0x62e,0x62d,0x200,0x62e,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d, +0x200,0x633,0x62e,0x200,0x633,0x645,0x200,0x635,0x62d,0x200,0x635,0x645,0x200,0x636,0x62c,0x200, +0x636,0x62d,0x200,0x636,0x62e,0x200,0x636,0x645,0x200,0x637,0x62d,0x200,0x637,0x645,0x200,0x638, +0x645,0x200,0x639,0x62c,0x200,0x639,0x645,0x200,0x63a,0x62c,0x200,0x63a,0x645,0x200,0x641,0x62c, +0x200,0x641,0x62d,0x200,0x641,0x62e,0x200,0x641,0x645,0x200,0x641,0x649,0x200,0x641,0x64a,0x200, +0x642,0x62d,0x200,0x642,0x645,0x200,0x642,0x649,0x200,0x642,0x64a,0x200,0x643,0x627,0x200,0x643, +0x62c,0x200,0x643,0x62d,0x200,0x643,0x62e,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x643,0x649, +0x200,0x643,0x64a,0x200,0x644,0x62c,0x200,0x644,0x62d,0x200,0x644,0x62e,0x200,0x644,0x645,0x200, +0x644,0x649,0x200,0x644,0x64a,0x200,0x645,0x62c,0x200,0x645,0x62d,0x200,0x645,0x62e,0x200,0x645, +0x645,0x200,0x645,0x649,0x200,0x645,0x64a,0x200,0x646,0x62c,0x200,0x646,0x62d,0x200,0x646,0x62e, +0x200,0x646,0x645,0x200,0x646,0x649,0x200,0x646,0x64a,0x200,0x647,0x62c,0x200,0x647,0x645,0x200, +0x647,0x649,0x200,0x647,0x64a,0x200,0x64a,0x62c,0x200,0x64a,0x62d,0x200,0x64a,0x62e,0x200,0x64a, +0x645,0x200,0x64a,0x649,0x200,0x64a,0x64a,0x8200,0x23,0x630,0x670,0x8200,0x23,0x631,0x670,0x8200, +0x23,0x649,0x670,0x8300,0x21,0x20,0x64c,0x651,0x8300,0x21,0x20,0x64d,0x651,0x8300,0x21,0x20, +0x64e,0x651,0x8300,0x21,0x20,0x64f,0x651,0x8300,0x21,0x20,0x650,0x651,0x8300,0x23,0x20,0x651, +0x670,0x300,0x64a,0x654,0x631,0x300,0x64a,0x654,0x632,0x300,0x64a,0x654,0x645,0x300,0x64a,0x654, +0x646,0x300,0x64a,0x654,0x649,0x300,0x64a,0x654,0x64a,0x200,0x628,0x631,0x200,0x628,0x632,0x200, +0x628,0x645,0x200,0x628,0x646,0x200,0x628,0x649,0x200,0x628,0x64a,0x200,0x62a,0x631,0x200,0x62a, +0x632,0x200,0x62a,0x645,0x200,0x62a,0x646,0x200,0x62a,0x649,0x200,0x62a,0x64a,0x200,0x62b,0x631, +0x200,0x62b,0x632,0x200,0x62b,0x645,0x200,0x62b,0x646,0x200,0x62b,0x649,0x200,0x62b,0x64a,0x200, +0x641,0x649,0x200,0x641,0x64a,0x200,0x642,0x649,0x200,0x642,0x64a,0x200,0x643,0x627,0x200,0x643, +0x644,0x200,0x643,0x645,0x200,0x643,0x649,0x200,0x643,0x64a,0x200,0x644,0x645,0x200,0x644,0x649, +0x200,0x644,0x64a,0x200,0x645,0x627,0x200,0x645,0x645,0x200,0x646,0x631,0x200,0x646,0x632,0x200, +0x646,0x645,0x200,0x646,0x646,0x200,0x646,0x649,0x200,0x646,0x64a,0x8200,0x23,0x649,0x670,0x200, +0x64a,0x631,0x200,0x64a,0x632,0x200,0x64a,0x645,0x200,0x64a,0x646,0x200,0x64a,0x649,0x200,0x64a, +0x64a,0x300,0x64a,0x654,0x62c,0x300,0x64a,0x654,0x62d,0x300,0x64a,0x654,0x62e,0x300,0x64a,0x654, +0x645,0x300,0x64a,0x654,0x647,0x200,0x628,0x62c,0x200,0x628,0x62d,0x200,0x628,0x62e,0x200,0x628, +0x645,0x200,0x628,0x647,0x200,0x62a,0x62c,0x200,0x62a,0x62d,0x200,0x62a,0x62e,0x200,0x62a,0x645, +0x200,0x62a,0x647,0x200,0x62b,0x645,0x200,0x62c,0x62d,0x200,0x62c,0x645,0x200,0x62d,0x62c,0x200, +0x62d,0x645,0x200,0x62e,0x62c,0x200,0x62e,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d,0x200,0x633, +0x62e,0x200,0x633,0x645,0x200,0x635,0x62d,0x200,0x635,0x62e,0x200,0x635,0x645,0x200,0x636,0x62c, +0x200,0x636,0x62d,0x200,0x636,0x62e,0x200,0x636,0x645,0x200,0x637,0x62d,0x200,0x638,0x645,0x200, +0x639,0x62c,0x200,0x639,0x645,0x200,0x63a,0x62c,0x200,0x63a,0x645,0x200,0x641,0x62c,0x200,0x641, +0x62d,0x200,0x641,0x62e,0x200,0x641,0x645,0x200,0x642,0x62d,0x200,0x642,0x645,0x200,0x643,0x62c, +0x200,0x643,0x62d,0x200,0x643,0x62e,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x644,0x62c,0x200, +0x644,0x62d,0x200,0x644,0x62e,0x200,0x644,0x645,0x200,0x644,0x647,0x200,0x645,0x62c,0x200,0x645, +0x62d,0x200,0x645,0x62e,0x200,0x645,0x645,0x200,0x646,0x62c,0x200,0x646,0x62d,0x200,0x646,0x62e, +0x200,0x646,0x645,0x200,0x646,0x647,0x200,0x647,0x62c,0x200,0x647,0x645,0x8200,0x23,0x647,0x670, +0x200,0x64a,0x62c,0x200,0x64a,0x62d,0x200,0x64a,0x62e,0x200,0x64a,0x645,0x200,0x64a,0x647,0x300, +0x64a,0x654,0x645,0x300,0x64a,0x654,0x647,0x200,0x628,0x645,0x200,0x628,0x647,0x200,0x62a,0x645, +0x200,0x62a,0x647,0x200,0x62b,0x645,0x200,0x62b,0x647,0x200,0x633,0x645,0x200,0x633,0x647,0x200, +0x634,0x645,0x200,0x634,0x647,0x200,0x643,0x644,0x200,0x643,0x645,0x200,0x644,0x645,0x200,0x646, +0x645,0x200,0x646,0x647,0x200,0x64a,0x645,0x200,0x64a,0x647,0x8300,0x21,0x640,0x64e,0x651,0x8300, +0x21,0x640,0x64f,0x651,0x8300,0x21,0x640,0x650,0x651,0x200,0x637,0x649,0x200,0x637,0x64a,0x200, +0x639,0x649,0x200,0x639,0x64a,0x200,0x63a,0x649,0x200,0x63a,0x64a,0x200,0x633,0x649,0x200,0x633, +0x64a,0x200,0x634,0x649,0x200,0x634,0x64a,0x200,0x62d,0x649,0x200,0x62d,0x64a,0x200,0x62c,0x649, +0x200,0x62c,0x64a,0x200,0x62e,0x649,0x200,0x62e,0x64a,0x200,0x635,0x649,0x200,0x635,0x64a,0x200, +0x636,0x649,0x200,0x636,0x64a,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x634, +0x645,0x200,0x634,0x631,0x200,0x633,0x631,0x200,0x635,0x631,0x200,0x636,0x631,0x200,0x637,0x649, +0x200,0x637,0x64a,0x200,0x639,0x649,0x200,0x639,0x64a,0x200,0x63a,0x649,0x200,0x63a,0x64a,0x200, +0x633,0x649,0x200,0x633,0x64a,0x200,0x634,0x649,0x200,0x634,0x64a,0x200,0x62d,0x649,0x200,0x62d, +0x64a,0x200,0x62c,0x649,0x200,0x62c,0x64a,0x200,0x62e,0x649,0x200,0x62e,0x64a,0x200,0x635,0x649, +0x200,0x635,0x64a,0x200,0x636,0x649,0x200,0x636,0x64a,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200, +0x634,0x62e,0x200,0x634,0x645,0x200,0x634,0x631,0x200,0x633,0x631,0x200,0x635,0x631,0x200,0x636, +0x631,0x200,0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x634,0x645,0x200,0x633,0x647, +0x200,0x634,0x647,0x200,0x637,0x645,0x200,0x633,0x62c,0x200,0x633,0x62d,0x200,0x633,0x62e,0x200, +0x634,0x62c,0x200,0x634,0x62d,0x200,0x634,0x62e,0x200,0x637,0x645,0x200,0x638,0x645,0x8200,0x1b, +0x627,0x64b,0x8200,0x1b,0x627,0x64b,0x300,0x62a,0x62c,0x645,0x300,0x62a,0x62d,0x62c,0x300,0x62a, +0x62d,0x62c,0x300,0x62a,0x62d,0x645,0x300,0x62a,0x62e,0x645,0x300,0x62a,0x645,0x62c,0x300,0x62a, +0x645,0x62d,0x300,0x62a,0x645,0x62e,0x300,0x62c,0x645,0x62d,0x300,0x62c,0x645,0x62d,0x300,0x62d, +0x645,0x64a,0x300,0x62d,0x645,0x649,0x300,0x633,0x62d,0x62c,0x300,0x633,0x62c,0x62d,0x300,0x633, +0x62c,0x649,0x300,0x633,0x645,0x62d,0x300,0x633,0x645,0x62d,0x300,0x633,0x645,0x62c,0x300,0x633, +0x645,0x645,0x300,0x633,0x645,0x645,0x300,0x635,0x62d,0x62d,0x300,0x635,0x62d,0x62d,0x300,0x635, +0x645,0x645,0x300,0x634,0x62d,0x645,0x300,0x634,0x62d,0x645,0x300,0x634,0x62c,0x64a,0x300,0x634, +0x645,0x62e,0x300,0x634,0x645,0x62e,0x300,0x634,0x645,0x645,0x300,0x634,0x645,0x645,0x300,0x636, +0x62d,0x649,0x300,0x636,0x62e,0x645,0x300,0x636,0x62e,0x645,0x300,0x637,0x645,0x62d,0x300,0x637, +0x645,0x62d,0x300,0x637,0x645,0x645,0x300,0x637,0x645,0x64a,0x300,0x639,0x62c,0x645,0x300,0x639, +0x645,0x645,0x300,0x639,0x645,0x645,0x300,0x639,0x645,0x649,0x300,0x63a,0x645,0x645,0x300,0x63a, +0x645,0x64a,0x300,0x63a,0x645,0x649,0x300,0x641,0x62e,0x645,0x300,0x641,0x62e,0x645,0x300,0x642, +0x645,0x62d,0x300,0x642,0x645,0x645,0x300,0x644,0x62d,0x645,0x300,0x644,0x62d,0x64a,0x300,0x644, +0x62d,0x649,0x300,0x644,0x62c,0x62c,0x300,0x644,0x62c,0x62c,0x300,0x644,0x62e,0x645,0x300,0x644, +0x62e,0x645,0x300,0x644,0x645,0x62d,0x300,0x644,0x645,0x62d,0x300,0x645,0x62d,0x62c,0x300,0x645, +0x62d,0x645,0x300,0x645,0x62d,0x64a,0x300,0x645,0x62c,0x62d,0x300,0x645,0x62c,0x645,0x300,0x645, +0x62e,0x62c,0x300,0x645,0x62e,0x645,0x300,0x645,0x62c,0x62e,0x300,0x647,0x645,0x62c,0x300,0x647, +0x645,0x645,0x300,0x646,0x62d,0x645,0x300,0x646,0x62d,0x649,0x300,0x646,0x62c,0x645,0x300,0x646, +0x62c,0x645,0x300,0x646,0x62c,0x649,0x300,0x646,0x645,0x64a,0x300,0x646,0x645,0x649,0x300,0x64a, +0x645,0x645,0x300,0x64a,0x645,0x645,0x300,0x628,0x62e,0x64a,0x300,0x62a,0x62c,0x64a,0x300,0x62a, +0x62c,0x649,0x300,0x62a,0x62e,0x64a,0x300,0x62a,0x62e,0x649,0x300,0x62a,0x645,0x64a,0x300,0x62a, +0x645,0x649,0x300,0x62c,0x645,0x64a,0x300,0x62c,0x62d,0x649,0x300,0x62c,0x645,0x649,0x300,0x633, +0x62e,0x649,0x300,0x635,0x62d,0x64a,0x300,0x634,0x62d,0x64a,0x300,0x636,0x62d,0x64a,0x300,0x644, +0x62c,0x64a,0x300,0x644,0x645,0x64a,0x300,0x64a,0x62d,0x64a,0x300,0x64a,0x62c,0x64a,0x300,0x64a, +0x645,0x64a,0x300,0x645,0x645,0x64a,0x300,0x642,0x645,0x64a,0x300,0x646,0x62d,0x64a,0x300,0x642, +0x645,0x62d,0x300,0x644,0x62d,0x645,0x300,0x639,0x645,0x64a,0x300,0x643,0x645,0x64a,0x300,0x646, +0x62c,0x62d,0x300,0x645,0x62e,0x64a,0x300,0x644,0x62c,0x645,0x300,0x643,0x645,0x645,0x300,0x644, +0x62c,0x645,0x300,0x646,0x62c,0x62d,0x300,0x62c,0x62d,0x64a,0x300,0x62d,0x62c,0x64a,0x300,0x645, +0x62c,0x64a,0x300,0x641,0x645,0x64a,0x300,0x628,0x62d,0x64a,0x300,0x643,0x645,0x645,0x300,0x639, +0x62c,0x645,0x300,0x635,0x645,0x645,0x300,0x633,0x62e,0x64a,0x300,0x646,0x62c,0x64a,0x300,0x635, +0x644,0x6d2,0x300,0x642,0x644,0x6d2,0x400,0x627,0x644,0x644,0x647,0x400,0x627,0x643,0x628,0x631, +0x400,0x645,0x62d,0x645,0x62f,0x400,0x635,0x644,0x639,0x645,0x400,0x631,0x633,0x648,0x644,0x400, +0x639,0x644,0x64a,0x647,0x400,0x648,0x633,0x644,0x645,0x300,0x635,0x644,0x649,0x1200,0x635,0x644, +0x649,0x20,0x627,0x644,0x644,0x647,0x20,0x639,0x644,0x64a,0x647,0x20,0x648,0x633,0x644,0x645, +0x800,0x62c,0x644,0x20,0x62c,0x644,0x627,0x644,0x647,0x400,0x631,0x6cc,0x627,0x644,0x100,0x2c, +0x100,0x3001,0x100,0x3002,0x100,0x3a,0x100,0x3b,0x100,0x21,0x100,0x3f,0x100,0x3016,0x100,0x3017, +0x300,0x2e,0x2e,0x2e,0x200,0x2e,0x2e,0x100,0x2014,0x100,0x2013,0x100,0x5f,0x100,0x5f,0x100, +0x28,0x100,0x29,0x100,0x7b,0x100,0x7d,0x100,0x3014,0x100,0x3015,0x100,0x3010,0x100,0x3011,0x100, +0x300a,0x100,0x300b,0x100,0x3008,0x100,0x3009,0x100,0x300c,0x100,0x300d,0x100,0x300e,0x100,0x300f,0x100, +0x5b,0x100,0x5d,0x8200,0xe6,0x20,0x305,0x8200,0xe6,0x20,0x305,0x8200,0xe6,0x20,0x305,0x8200, +0xe6,0x20,0x305,0x100,0x5f,0x100,0x5f,0x100,0x5f,0x100,0x2c,0x100,0x3001,0x100,0x2e,0x100, +0x3b,0x100,0x3a,0x100,0x3f,0x100,0x21,0x100,0x2014,0x100,0x28,0x100,0x29,0x100,0x7b,0x100, +0x7d,0x100,0x3014,0x100,0x3015,0x100,0x23,0x100,0x26,0x100,0x2a,0x100,0x2b,0x100,0x2d,0x100, +0x3c,0x100,0x3e,0x100,0x3d,0x100,0x5c,0x100,0x24,0x100,0x25,0x100,0x40,0x8200,0x1b,0x20, +0x64b,0x8200,0x1b,0x640,0x64b,0x8200,0x1c,0x20,0x64c,0x8200,0x1d,0x20,0x64d,0x8200,0x1e,0x20, +0x64e,0x8200,0x1e,0x640,0x64e,0x8200,0x1f,0x20,0x64f,0x8200,0x1f,0x640,0x64f,0x8200,0x20,0x20, +0x650,0x8200,0x20,0x640,0x650,0x8200,0x21,0x20,0x651,0x8200,0x21,0x640,0x651,0x8200,0x22,0x20, +0x652,0x8200,0x22,0x640,0x652,0x100,0x621,0x8200,0xe6,0x627,0x653,0x8200,0xe6,0x627,0x653,0x8200, +0xe6,0x627,0x654,0x8200,0xe6,0x627,0x654,0x8200,0xe6,0x648,0x654,0x8200,0xe6,0x648,0x654,0x8200, +0xdc,0x627,0x655,0x8200,0xdc,0x627,0x655,0x8200,0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x8200, +0xe6,0x64a,0x654,0x8200,0xe6,0x64a,0x654,0x100,0x627,0x100,0x627,0x100,0x628,0x100,0x628,0x100, +0x628,0x100,0x628,0x100,0x629,0x100,0x629,0x100,0x62a,0x100,0x62a,0x100,0x62a,0x100,0x62a,0x100, +0x62b,0x100,0x62b,0x100,0x62b,0x100,0x62b,0x100,0x62c,0x100,0x62c,0x100,0x62c,0x100,0x62c,0x100, +0x62d,0x100,0x62d,0x100,0x62d,0x100,0x62d,0x100,0x62e,0x100,0x62e,0x100,0x62e,0x100,0x62e,0x100, +0x62f,0x100,0x62f,0x100,0x630,0x100,0x630,0x100,0x631,0x100,0x631,0x100,0x632,0x100,0x632,0x100, +0x633,0x100,0x633,0x100,0x633,0x100,0x633,0x100,0x634,0x100,0x634,0x100,0x634,0x100,0x634,0x100, +0x635,0x100,0x635,0x100,0x635,0x100,0x635,0x100,0x636,0x100,0x636,0x100,0x636,0x100,0x636,0x100, +0x637,0x100,0x637,0x100,0x637,0x100,0x637,0x100,0x638,0x100,0x638,0x100,0x638,0x100,0x638,0x100, +0x639,0x100,0x639,0x100,0x639,0x100,0x639,0x100,0x63a,0x100,0x63a,0x100,0x63a,0x100,0x63a,0x100, +0x641,0x100,0x641,0x100,0x641,0x100,0x641,0x100,0x642,0x100,0x642,0x100,0x642,0x100,0x642,0x100, +0x643,0x100,0x643,0x100,0x643,0x100,0x643,0x100,0x644,0x100,0x644,0x100,0x644,0x100,0x644,0x100, +0x645,0x100,0x645,0x100,0x645,0x100,0x645,0x100,0x646,0x100,0x646,0x100,0x646,0x100,0x646,0x100, +0x647,0x100,0x647,0x100,0x647,0x100,0x647,0x100,0x648,0x100,0x648,0x100,0x649,0x100,0x649,0x100, +0x64a,0x100,0x64a,0x100,0x64a,0x100,0x64a,0x8300,0xe6,0x644,0x627,0x653,0x8300,0xe6,0x644,0x627, +0x653,0x8300,0xe6,0x644,0x627,0x654,0x8300,0xe6,0x644,0x627,0x654,0x8300,0xdc,0x644,0x627,0x655, +0x8300,0xdc,0x644,0x627,0x655,0x200,0x644,0x627,0x200,0x644,0x627,0x100,0x21,0x100,0x22,0x100, +0x23,0x100,0x24,0x100,0x25,0x100,0x26,0x100,0x27,0x100,0x28,0x100,0x29,0x100,0x2a,0x100, +0x2b,0x100,0x2c,0x100,0x2d,0x100,0x2e,0x100,0x2f,0x100,0x30,0x100,0x31,0x100,0x32,0x100, +0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x3a,0x100, +0x3b,0x100,0x3c,0x100,0x3d,0x100,0x3e,0x100,0x3f,0x100,0x40,0x100,0x41,0x100,0x42,0x100, +0x43,0x100,0x44,0x100,0x45,0x100,0x46,0x100,0x47,0x100,0x48,0x100,0x49,0x100,0x4a,0x100, +0x4b,0x100,0x4c,0x100,0x4d,0x100,0x4e,0x100,0x4f,0x100,0x50,0x100,0x51,0x100,0x52,0x100, +0x53,0x100,0x54,0x100,0x55,0x100,0x56,0x100,0x57,0x100,0x58,0x100,0x59,0x100,0x5a,0x100, +0x5b,0x100,0x5c,0x100,0x5d,0x100,0x5e,0x100,0x5f,0x100,0x60,0x100,0x61,0x100,0x62,0x100, +0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100, +0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100, +0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100, +0x7b,0x100,0x7c,0x100,0x7d,0x100,0x7e,0x100,0x2985,0x100,0x2986,0x100,0x3002,0x100,0x300c,0x100, +0x300d,0x100,0x3001,0x100,0x30fb,0x100,0x30f2,0x100,0x30a1,0x100,0x30a3,0x100,0x30a5,0x100,0x30a7,0x100, +0x30a9,0x100,0x30e3,0x100,0x30e5,0x100,0x30e7,0x100,0x30c3,0x100,0x30fc,0x100,0x30a2,0x100,0x30a4,0x100, +0x30a6,0x100,0x30a8,0x100,0x30aa,0x100,0x30ab,0x100,0x30ad,0x100,0x30af,0x100,0x30b1,0x100,0x30b3,0x100, +0x30b5,0x100,0x30b7,0x100,0x30b9,0x100,0x30bb,0x100,0x30bd,0x100,0x30bf,0x100,0x30c1,0x100,0x30c4,0x100, +0x30c6,0x100,0x30c8,0x100,0x30ca,0x100,0x30cb,0x100,0x30cc,0x100,0x30cd,0x100,0x30ce,0x100,0x30cf,0x100, +0x30d2,0x100,0x30d5,0x100,0x30d8,0x100,0x30db,0x100,0x30de,0x100,0x30df,0x100,0x30e0,0x100,0x30e1,0x100, +0x30e2,0x100,0x30e4,0x100,0x30e6,0x100,0x30e8,0x100,0x30e9,0x100,0x30ea,0x100,0x30eb,0x100,0x30ec,0x100, +0x30ed,0x100,0x30ef,0x100,0x30f3,0x8100,0x808,0x3099,0x8100,0x808,0x309a,0x100,0x1160,0x100,0x1100,0x100, +0x1101,0x100,0x11aa,0x100,0x1102,0x100,0x11ac,0x100,0x11ad,0x100,0x1103,0x100,0x1104,0x100,0x1105,0x100, +0x11b0,0x100,0x11b1,0x100,0x11b2,0x100,0x11b3,0x100,0x11b4,0x100,0x11b5,0x100,0x111a,0x100,0x1106,0x100, +0x1107,0x100,0x1108,0x100,0x1121,0x100,0x1109,0x100,0x110a,0x100,0x110b,0x100,0x110c,0x100,0x110d,0x100, +0x110e,0x100,0x110f,0x100,0x1110,0x100,0x1111,0x100,0x1112,0x100,0x1161,0x100,0x1162,0x100,0x1163,0x100, +0x1164,0x100,0x1165,0x100,0x1166,0x100,0x1167,0x100,0x1168,0x100,0x1169,0x100,0x116a,0x100,0x116b,0x100, +0x116c,0x100,0x116d,0x100,0x116e,0x100,0x116f,0x100,0x1170,0x100,0x1171,0x100,0x1172,0x100,0x1173,0x100, +0x1174,0x100,0x1175,0x100,0xa2,0x100,0xa3,0x100,0xac,0x8200,0xe6,0x20,0x304,0x100,0xa6,0x100, +0xa5,0x100,0x20a9,0x100,0x2502,0x100,0x2190,0x100,0x2191,0x100,0x2192,0x100,0x2193,0x100,0x25a0,0x100, +0x25cb,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100, +0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100, +0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100, +0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100, +0x66,0x100,0x67,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100, +0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100, +0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100, +0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100, +0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100, +0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100, +0x63,0x100,0x64,0x100,0x66,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100, +0x6d,0x100,0x6e,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100, +0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100, +0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100, +0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100, +0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100, +0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100, +0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100, +0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100, +0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100, +0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100, +0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100, +0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100, +0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100, +0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100, +0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100, +0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100, +0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100, +0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100, +0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100, +0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100, +0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100, +0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100, +0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100, +0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100, +0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100,0x64,0x100,0x65,0x100, +0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100,0x6c,0x100,0x6d,0x100, +0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100,0x74,0x100,0x75,0x100, +0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x61,0x100,0x62,0x100,0x63,0x100, +0x64,0x100,0x65,0x100,0x66,0x100,0x67,0x100,0x68,0x100,0x69,0x100,0x6a,0x100,0x6b,0x100, +0x6c,0x100,0x6d,0x100,0x6e,0x100,0x6f,0x100,0x70,0x100,0x71,0x100,0x72,0x100,0x73,0x100, +0x74,0x100,0x75,0x100,0x76,0x100,0x77,0x100,0x78,0x100,0x79,0x100,0x7a,0x100,0x131,0x100, +0x237,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100, +0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100, +0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100, +0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100, +0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100, +0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100, +0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100, +0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100, +0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100, +0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100, +0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100, +0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100, +0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100, +0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100, +0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100, +0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100, +0x3c0,0x100,0x2207,0x100,0x3b1,0x100,0x3b2,0x100,0x3b3,0x100,0x3b4,0x100,0x3b5,0x100,0x3b6,0x100, +0x3b7,0x100,0x3b8,0x100,0x3b9,0x100,0x3ba,0x100,0x3bb,0x100,0x3bc,0x100,0x3bd,0x100,0x3be,0x100, +0x3bf,0x100,0x3c0,0x100,0x3c1,0x100,0x3c3,0x100,0x3c4,0x100,0x3c5,0x100,0x3c6,0x100,0x3c7,0x100, +0x3c8,0x100,0x3c9,0x100,0x2202,0x100,0x3b5,0x100,0x3b8,0x100,0x3ba,0x100,0x3c6,0x100,0x3c1,0x100, +0x3c0,0x100,0x3dd,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100, +0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100, +0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100, +0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100,0x38,0x100,0x39,0x100, +0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100,0x36,0x100,0x37,0x100, +0x38,0x100,0x39,0x100,0x30,0x100,0x31,0x100,0x32,0x100,0x33,0x100,0x34,0x100,0x35,0x100, +0x36,0x100,0x37,0x100,0x38,0x100,0x39,0,0x20,0x2a,0x4c,0x6a,0x7c,0x9c,0xc2,0xd4, +0xf4,0xfe,0x120,0x13c,0x14e,0x16e,0x194,0x1a8,0x1b4,0x1c0,0x1ce,0x1dc,0x1ea,0x1fa,0x1fc,0x200, +0x20a,0x214,0x220,0x22c,0x23c,0x24c,0x25a,0x268,0x276,0x286,0x292,0x2a0,0x2ac,0x2d0,0x2d4,0x2dc, +0x2de,0x2e4,0x2e6,0x302,0x310,0x318,0x322,0x330,0x338,0x344,0x354,0x364,0x36c,0x378,0x38e,0x39e, +0x3a6,0x3b6,0x3bc,0x3be,0x3c0,0x3c2,0x3ca,0x3d2,0x3da,0x3e0,0x3e2,0x3e4,0x3e6,0x3ee,0x3f0,0x3f2, +0x3f6,0x3fa,0x3fe,0x402,0x404,0x406,0x408,0x40a,0x40c,0x40e,0x410,0x412,0x414,0x416,0x418,0x41a, +0x41c,0x41e,0x424,0x426,0x428,0x42a,0x42c,0x42e,0x430,0x432,0x434,0x438,0x43e,0x440,0x444,0x446, +0x448,0x44a,0x452,0x456,0x458,0x460,0x462,0x464,0x466,0x468,0x46a,0x46c,0x46e,0x470,0x472,0x474, +0x476,0x478,0x47e,0x494,0x496,0x4a0,0x4a6,0x4b4,0x4b8,0x4d4,0x4d8,0x4dc,0x4e0,0x668,0x66c,0x674, +0x677,0x67a,0x67d,0x680,0x683,0x686,0x689,0x68c,0x68f,0x692,0x695,0x698,0x69b,0x69e,0x6a1,0x6a4, +0x6a7,0x6aa,0x6ad,0x6b0,0x6b3,0x6b6,0x6b9,0x6bc,0x6bf,0x6c2,0x6c5,0x6c8,0x6cb,0x6ce,0x6d1,0x6d4, +0x6d7,0x6da,0x6dd,0x6e0,0x6e3,0x6e6,0x6e9,0x6ec,0x6ef,0x6f2,0x6f5,0x6f8,0x6fb,0x6fe,0x701,0x704, +0x707,0x70a,0x70d,0x710,0x713,0x716,0x719,0x71c,0x71f,0x722,0x725,0x72b,0x731,0x737,0x73d,0x743, +0x746,0x749,0x74c,0x74f,0x752,0x755,0x758,0x75b,0x75e,0x761,0x764,0x767,0x76a,0x76d,0x770,0x773, +0x776,0x77c,0x782,0x788,0x78e,0x794,0x797,0x79a,0x79d,0x7a0,0x7a3 +}; + +static const uint16_t combiningTable[1959]={ +0x7a6,0xc0,0x7a7,0xc1,0x7a8,0x20c2,0x7a9,0xc3,0x7aa,0x20c4,0x7ab,0x20c5,0x7ad,0x100,0x7ae,0x2102, +0x7af,0x104,0x7b0,0x2226,0x7b1,0x1cd,0x7b4,0x200,0x7b5,0x202,0x7cd,0x1e00,0x7ce,0x3ea0,0x87d4,0x1ea2, +0x7a7,0x106,0x7a8,0x108,0x7ac,0x20c7,0x7b0,0x10a,0x87b1,0x10c,0x7a6,0xc8,0x7a7,0xc9,0x7a8,0x20ca, +0x7a9,0x1ebc,0x7aa,0xcb,0x7ac,0x2228,0x7ad,0x2112,0x7ae,0x114,0x7af,0x118,0x7b0,0x116,0x7b1,0x11a, +0x7b4,0x204,0x7b5,0x206,0x7ce,0x3eb8,0x7d0,0x1e18,0x7d1,0x1e1a,0x87d4,0x1eba,0x7a6,0xcc,0x7a7,0xcd, +0x7a8,0xce,0x7a9,0x128,0x7aa,0x20cf,0x7ad,0x12a,0x7ae,0x12c,0x7af,0x12e,0x7b0,0x130,0x7b1,0x1cf, +0x7b4,0x208,0x7b5,0x20a,0x7ce,0x1eca,0x7d1,0x1e2c,0x87d4,0x1ec8,0x7a6,0x1f8,0x7a7,0x143,0x7a9,0xd1, +0x7ac,0x145,0x7b0,0x1e44,0x7b1,0x147,0x7ce,0x1e46,0x7cf,0x1e48,0x87d0,0x1e4a,0x7a6,0xd2,0x7a7,0xd3, +0x7a8,0x20d4,0x7a9,0x20d5,0x7aa,0x20d6,0x7ad,0x214c,0x7ae,0x14e,0x7af,0x21ea,0x7b0,0x222e,0x7b1,0x1d1, +0x7b2,0x150,0x7b3,0x21a0,0x7b4,0x20c,0x7b5,0x20e,0x7ce,0x3ecc,0x87d4,0x1ece,0x7a6,0xd9,0x7a7,0xda, +0x7a8,0xdb,0x7a9,0x2168,0x7aa,0x20dc,0x7ab,0x16e,0x7ad,0x216a,0x7ae,0x16c,0x7af,0x172,0x7b1,0x1d3, +0x7b2,0x170,0x7b3,0x21af,0x7b4,0x214,0x7b5,0x216,0x7ce,0x1ee4,0x7d0,0x1e76,0x7d1,0x1e74,0x7d3,0x1e72, +0x87d4,0x1ee6,0x7a6,0x1ef2,0x7a7,0xdd,0x7a8,0x176,0x7a9,0x1ef8,0x7aa,0x178,0x7ad,0x232,0x7b0,0x1e8e, +0x7ce,0x1ef4,0x87d4,0x1ef6,0x7a6,0xe0,0x7a7,0xe1,0x7a8,0x20e2,0x7a9,0xe3,0x7aa,0x20e4,0x7ab,0x20e5, +0x7ad,0x101,0x7ae,0x2103,0x7af,0x105,0x7b0,0x2227,0x7b1,0x1ce,0x7b4,0x201,0x7b5,0x203,0x7cd,0x1e01, +0x7ce,0x3ea1,0x87d4,0x1ea3,0x7a7,0x107,0x7a8,0x109,0x7ac,0x20e7,0x7b0,0x10b,0x87b1,0x10d,0x7a6,0xe8, +0x7a7,0xe9,0x7a8,0x20ea,0x7a9,0x1ebd,0x7aa,0xeb,0x7ac,0x2229,0x7ad,0x2113,0x7ae,0x115,0x7af,0x119, +0x7b0,0x117,0x7b1,0x11b,0x7b4,0x205,0x7b5,0x207,0x7ce,0x3eb9,0x7d0,0x1e19,0x7d1,0x1e1b,0x87d4,0x1ebb, +0x7a6,0xec,0x7a7,0xed,0x7a8,0xee,0x7a9,0x129,0x7aa,0x20ef,0x7ad,0x12b,0x7ae,0x12d,0x7af,0x12f, +0x7b1,0x1d0,0x7b4,0x209,0x7b5,0x20b,0x7ce,0x1ecb,0x7d1,0x1e2d,0x87d4,0x1ec9,0x7a6,0x1f9,0x7a7,0x144, +0x7a9,0xf1,0x7ac,0x146,0x7b0,0x1e45,0x7b1,0x148,0x7ce,0x1e47,0x7cf,0x1e49,0x87d0,0x1e4b,0x7a6,0xf2, +0x7a7,0xf3,0x7a8,0x20f4,0x7a9,0x20f5,0x7aa,0x20f6,0x7ad,0x214d,0x7ae,0x14f,0x7af,0x21eb,0x7b0,0x222f, +0x7b1,0x1d2,0x7b2,0x151,0x7b3,0x21a1,0x7b4,0x20d,0x7b5,0x20f,0x7ce,0x3ecd,0x87d4,0x1ecf,0x7a6,0xf9, +0x7a7,0xfa,0x7a8,0xfb,0x7a9,0x2169,0x7aa,0x20fc,0x7ab,0x16f,0x7ad,0x216b,0x7ae,0x16d,0x7af,0x173, +0x7b1,0x1d4,0x7b2,0x171,0x7b3,0x21b0,0x7b4,0x215,0x7b5,0x217,0x7ce,0x1ee5,0x7d0,0x1e77,0x7d1,0x1e75, +0x7d3,0x1e73,0x87d4,0x1ee7,0x7a6,0x1ef3,0x7a7,0xfd,0x7a8,0x177,0x7a9,0x1ef9,0x7aa,0xff,0x7ab,0x1e99, +0x7ad,0x233,0x7b0,0x1e8f,0x7ce,0x1ef5,0x87d4,0x1ef7,0x7ac,0x1e10,0x7b0,0x1e0a,0x7b1,0x10e,0x7ce,0x1e0c, +0x7cf,0x1e0e,0x87d0,0x1e12,0x7ac,0x1e11,0x7b0,0x1e0b,0x7b1,0x10f,0x7ce,0x1e0d,0x7cf,0x1e0f,0x87d0,0x1e13, +0x7a7,0x1f4,0x7a8,0x11c,0x7ac,0x122,0x7ad,0x1e20,0x7ae,0x11e,0x7b0,0x120,0x87b1,0x1e6,0x7a7,0x1f5, +0x7a8,0x11d,0x7ac,0x123,0x7ad,0x1e21,0x7ae,0x11f,0x7b0,0x121,0x87b1,0x1e7,0x7a8,0x124,0x7aa,0x1e26, +0x7ac,0x1e28,0x7b0,0x1e22,0x7b1,0x21e,0x7ce,0x1e24,0x87d2,0x1e2a,0x7a8,0x125,0x7aa,0x1e27,0x7ac,0x1e29, +0x7b0,0x1e23,0x7b1,0x21f,0x7ce,0x1e25,0x7cf,0x1e96,0x87d2,0x1e2b,0x87a8,0x134,0x7a8,0x135,0x87b1,0x1f0, +0x7a7,0x1e30,0x7ac,0x136,0x7b1,0x1e8,0x7ce,0x1e32,0x87cf,0x1e34,0x7a7,0x1e31,0x7ac,0x137,0x7b1,0x1e9, +0x7ce,0x1e33,0x87cf,0x1e35,0x7a7,0x139,0x7ac,0x13b,0x7b1,0x13d,0x7ce,0x3e36,0x7cf,0x1e3a,0x87d0,0x1e3c, +0x7a7,0x13a,0x7ac,0x13c,0x7b1,0x13e,0x7ce,0x3e37,0x7cf,0x1e3b,0x87d0,0x1e3d,0x7a7,0x154,0x7ac,0x156, +0x7b0,0x1e58,0x7b1,0x158,0x7b4,0x210,0x7b5,0x212,0x7ce,0x3e5a,0x87cf,0x1e5e,0x7a7,0x155,0x7ac,0x157, +0x7b0,0x1e59,0x7b1,0x159,0x7b4,0x211,0x7b5,0x213,0x7ce,0x3e5b,0x87cf,0x1e5f,0x7a7,0x215a,0x7a8,0x15c, +0x7ac,0x15e,0x7b0,0x1e60,0x7b1,0x2160,0x7b6,0x218,0x87ce,0x3e62,0x7a7,0x215b,0x7a8,0x15d,0x7ac,0x15f, +0x7b0,0x1e61,0x7b1,0x2161,0x7b6,0x219,0x87ce,0x3e63,0x7ac,0x162,0x7b0,0x1e6a,0x7b1,0x164,0x7b6,0x21a, +0x7ce,0x1e6c,0x7cf,0x1e6e,0x87d0,0x1e70,0x7aa,0x1e97,0x7ac,0x163,0x7b0,0x1e6b,0x7b1,0x165,0x7b6,0x21b, +0x7ce,0x1e6d,0x7cf,0x1e6f,0x87d0,0x1e71,0x7a6,0x1e80,0x7a7,0x1e82,0x7a8,0x174,0x7aa,0x1e84,0x7b0,0x1e86, +0x87ce,0x1e88,0x7a6,0x1e81,0x7a7,0x1e83,0x7a8,0x175,0x7aa,0x1e85,0x7ab,0x1e98,0x7b0,0x1e87,0x87ce,0x1e89, +0x7a7,0x179,0x7a8,0x1e90,0x7b0,0x17b,0x7b1,0x17d,0x7ce,0x1e92,0x87cf,0x1e94,0x7a7,0x17a,0x7a8,0x1e91, +0x7b0,0x17c,0x7b1,0x17e,0x7ce,0x1e93,0x87cf,0x1e95,0x7a6,0x1db,0x7a7,0x1d7,0x7ad,0x1d5,0x87b1,0x1d9, +0x7a6,0x1dc,0x7a7,0x1d8,0x7ad,0x1d6,0x87b1,0x1da,0x87ad,0x1de,0x87ad,0x1df,0x87ad,0x1e0,0x87ad,0x1e1, +0x7a7,0x1fc,0x87ad,0x1e2,0x7a7,0x1fd,0x87ad,0x1e3,0x87ad,0x1ec,0x87ad,0x1ed,0x87b1,0x1ee,0x87b1,0x1ef, +0x87a7,0x1fa,0x87a7,0x1fb,0x87a7,0x1fe,0x87a7,0x1ff,0x87ad,0x22a,0x87ad,0x22b,0x7a7,0x1e4c,0x7aa,0x1e4e, +0x87ad,0x22c,0x7a7,0x1e4d,0x7aa,0x1e4f,0x87ad,0x22d,0x87ad,0x230,0x87ad,0x231,0x7a6,0x1fed,0x7a7,0x385, +0x87d7,0x1fc1,0x7a6,0x1fba,0x7a7,0x386,0x7ad,0x1fb9,0x7ae,0x1fb8,0x7d5,0x3f08,0x7d6,0x3f09,0x87d8,0x1fbc, +0x7a6,0x1fc8,0x7a7,0x388,0x7d5,0x3f18,0x87d6,0x3f19,0x7a6,0x1fca,0x7a7,0x389,0x7d5,0x3f28,0x7d6,0x3f29, +0x87d8,0x1fcc,0x7a6,0x1fda,0x7a7,0x38a,0x7aa,0x3aa,0x7ad,0x1fd9,0x7ae,0x1fd8,0x7d5,0x3f38,0x87d6,0x3f39, +0x7a6,0x1ff8,0x7a7,0x38c,0x7d5,0x3f48,0x87d6,0x3f49,0x7a6,0x1fea,0x7a7,0x38e,0x7aa,0x3ab,0x7ad,0x1fe9, +0x7ae,0x1fe8,0x87d6,0x3f59,0x7a6,0x1ffa,0x7a7,0x38f,0x7d5,0x3f68,0x7d6,0x3f69,0x87d8,0x1ffc,0x7a6,0x1fd2, +0x7a7,0x390,0x87d7,0x1fd7,0x7a6,0x3f70,0x7a7,0x23ac,0x7ad,0x1fb1,0x7ae,0x1fb0,0x7d5,0x3f00,0x7d6,0x3f01, +0x7d7,0x3fb6,0x87d8,0x1fb3,0x7a6,0x1f72,0x7a7,0x3ad,0x7d5,0x3f10,0x87d6,0x3f11,0x7a6,0x3f74,0x7a7,0x23ae, +0x7d5,0x3f20,0x7d6,0x3f21,0x7d7,0x3fc6,0x87d8,0x1fc3,0x7a6,0x1f76,0x7a7,0x3af,0x7aa,0x23ca,0x7ad,0x1fd1, +0x7ae,0x1fd0,0x7d5,0x3f30,0x7d6,0x3f31,0x87d7,0x1fd6,0x7a6,0x1fe2,0x7a7,0x3b0,0x87d7,0x1fe7,0x7a6,0x1f7a, +0x7a7,0x3cd,0x7aa,0x23cb,0x7ad,0x1fe1,0x7ae,0x1fe0,0x7d5,0x3f50,0x7d6,0x3f51,0x87d7,0x1fe6,0x7a6,0x1f78, +0x7a7,0x3cc,0x7d5,0x3f40,0x87d6,0x3f41,0x7a6,0x3f7c,0x7a7,0x23ce,0x7d5,0x3f60,0x7d6,0x3f61,0x7d7,0x3ff6, +0x87d8,0x1ff3,0x7a7,0x3d3,0x87aa,0x3d4,0x7a6,0x400,0x7aa,0x401,0x87ae,0x4d6,0x87a7,0x403,0x87aa,0x407, +0x87a7,0x40c,0x7a6,0x40d,0x7aa,0x4e4,0x7ad,0x4e2,0x87ae,0x419,0x7aa,0x4f0,0x7ad,0x4ee,0x7ae,0x40e, +0x87b2,0x4f2,0x7a6,0x45d,0x7aa,0x4e5,0x7ad,0x4e3,0x87ae,0x439,0x7a6,0x450,0x7aa,0x451,0x87ae,0x4d7, +0x87a7,0x453,0x87aa,0x457,0x87a7,0x45c,0x7aa,0x4f1,0x7ad,0x4ef,0x7ae,0x45e,0x87b2,0x4f3,0x87b4,0x476, +0x87b4,0x477,0x7aa,0x4dc,0x87ae,0x4c1,0x7aa,0x4dd,0x87ae,0x4c2,0x7aa,0x4d2,0x87ae,0x4d0,0x7aa,0x4d3, +0x87ae,0x4d1,0x87aa,0x4da,0x87aa,0x4db,0x87aa,0x4de,0x87aa,0x4df,0x87aa,0x4e6,0x87aa,0x4e7,0x87aa,0x4ea, +0x87aa,0x4eb,0x87aa,0x4ec,0x87aa,0x4ed,0x87aa,0x4f4,0x87aa,0x4f5,0x87aa,0x4f8,0x87aa,0x4f9,0x7b7,0x622, +0x7b8,0x623,0x87b9,0x625,0x87b8,0x624,0x87b8,0x626,0x87b8,0x6c0,0x87b8,0x6c2,0x87b8,0x6d3,0x87ba,0x929, +0x87ba,0x931,0x87ba,0x934,0x7bb,0x9cb,0x87bc,0x9cc,0x7bd,0xb48,0x7be,0xb4b,0x87bf,0xb4c,0x87c0,0xb94, +0x7c0,0xbcc,0x87c1,0xbca,0x87c1,0xbcb,0x87c2,0xc48,0x87c3,0xcc0,0x7c3,0xcc7,0x7c4,0xcc8,0x87c5,0x2cca, +0x87c3,0xccb,0x7c6,0xd4a,0x87c7,0xd4c,0x87c6,0xd4b,0x7c8,0xdda,0x7c9,0x2ddc,0x87ca,0xdde,0x87c8,0xddd, +0x87cb,0x1026,0x87cc,0x1b06,0x87cc,0x1b08,0x87cc,0x1b0a,0x87cc,0x1b0c,0x87cc,0x1b0e,0x87cc,0x1b12,0x87cc,0x1b3b, +0x87cc,0x1b3d,0x87cc,0x1b40,0x87cc,0x1b41,0x87cc,0x1b43,0x7b0,0x1e02,0x7ce,0x1e04,0x87cf,0x1e06,0x7b0,0x1e03, +0x7ce,0x1e05,0x87cf,0x1e07,0x87a7,0x1e08,0x87a7,0x1e09,0x7a6,0x1e14,0x87a7,0x1e16,0x7a6,0x1e15,0x87a7,0x1e17, +0x87ae,0x1e1c,0x87ae,0x1e1d,0x87b0,0x1e1e,0x87b0,0x1e1f,0x87a7,0x1e2e,0x87a7,0x1e2f,0x87ad,0x1e38,0x87ad,0x1e39, +0x7a7,0x1e3e,0x7b0,0x1e40,0x87ce,0x1e42,0x7a7,0x1e3f,0x7b0,0x1e41,0x87ce,0x1e43,0x7a6,0x1e50,0x87a7,0x1e52, +0x7a6,0x1e51,0x87a7,0x1e53,0x7a7,0x1e54,0x87b0,0x1e56,0x7a7,0x1e55,0x87b0,0x1e57,0x87ad,0x1e5c,0x87ad,0x1e5d, +0x87b0,0x1e64,0x87b0,0x1e65,0x87b0,0x1e66,0x87b0,0x1e67,0x87b0,0x1e68,0x87b0,0x1e69,0x87a7,0x1e78,0x87a7,0x1e79, +0x87aa,0x1e7a,0x87aa,0x1e7b,0x7a9,0x1e7c,0x87ce,0x1e7e,0x7a9,0x1e7d,0x87ce,0x1e7f,0x7aa,0x1e8c,0x87b0,0x1e8a, +0x7aa,0x1e8d,0x87b0,0x1e8b,0x87b0,0x1e9b,0x7a6,0x1ea6,0x7a7,0x1ea4,0x7a9,0x1eaa,0x87d4,0x1ea8,0x7a6,0x1ea7, +0x7a7,0x1ea5,0x7a9,0x1eab,0x87d4,0x1ea9,0x7a8,0x1eac,0x87ae,0x1eb6,0x7a8,0x1ead,0x87ae,0x1eb7,0x7a6,0x1eb0, +0x7a7,0x1eae,0x7a9,0x1eb4,0x87d4,0x1eb2,0x7a6,0x1eb1,0x7a7,0x1eaf,0x7a9,0x1eb5,0x87d4,0x1eb3,0x7a6,0x1ec0, +0x7a7,0x1ebe,0x7a9,0x1ec4,0x87d4,0x1ec2,0x7a6,0x1ec1,0x7a7,0x1ebf,0x7a9,0x1ec5,0x87d4,0x1ec3,0x87a8,0x1ec6, +0x87a8,0x1ec7,0x7a6,0x1ed2,0x7a7,0x1ed0,0x7a9,0x1ed6,0x87d4,0x1ed4,0x7a6,0x1ed3,0x7a7,0x1ed1,0x7a9,0x1ed7, +0x87d4,0x1ed5,0x87a8,0x1ed8,0x87a8,0x1ed9,0x7a6,0x1edc,0x7a7,0x1eda,0x7a9,0x1ee0,0x7ce,0x1ee2,0x87d4,0x1ede, +0x7a6,0x1edd,0x7a7,0x1edb,0x7a9,0x1ee1,0x7ce,0x1ee3,0x87d4,0x1edf,0x7a6,0x1eea,0x7a7,0x1ee8,0x7a9,0x1eee, +0x7ce,0x1ef0,0x87d4,0x1eec,0x7a6,0x1eeb,0x7a7,0x1ee9,0x7a9,0x1eef,0x7ce,0x1ef1,0x87d4,0x1eed,0x7a6,0x3f02, +0x7a7,0x3f04,0x7d7,0x3f06,0x87d8,0x1f80,0x7a6,0x3f03,0x7a7,0x3f05,0x7d7,0x3f07,0x87d8,0x1f81,0x7a6,0x3f0a, +0x7a7,0x3f0c,0x7d7,0x3f0e,0x87d8,0x1f88,0x7a6,0x3f0b,0x7a7,0x3f0d,0x7d7,0x3f0f,0x87d8,0x1f89,0x7a6,0x1f12, +0x87a7,0x1f14,0x7a6,0x1f13,0x87a7,0x1f15,0x7a6,0x1f1a,0x87a7,0x1f1c,0x7a6,0x1f1b,0x87a7,0x1f1d,0x7a6,0x3f22, +0x7a7,0x3f24,0x7d7,0x3f26,0x87d8,0x1f90,0x7a6,0x3f23,0x7a7,0x3f25,0x7d7,0x3f27,0x87d8,0x1f91,0x7a6,0x3f2a, +0x7a7,0x3f2c,0x7d7,0x3f2e,0x87d8,0x1f98,0x7a6,0x3f2b,0x7a7,0x3f2d,0x7d7,0x3f2f,0x87d8,0x1f99,0x7a6,0x1f32, +0x7a7,0x1f34,0x87d7,0x1f36,0x7a6,0x1f33,0x7a7,0x1f35,0x87d7,0x1f37,0x7a6,0x1f3a,0x7a7,0x1f3c,0x87d7,0x1f3e, +0x7a6,0x1f3b,0x7a7,0x1f3d,0x87d7,0x1f3f,0x7a6,0x1f42,0x87a7,0x1f44,0x7a6,0x1f43,0x87a7,0x1f45,0x7a6,0x1f4a, +0x87a7,0x1f4c,0x7a6,0x1f4b,0x87a7,0x1f4d,0x7a6,0x1f52,0x7a7,0x1f54,0x87d7,0x1f56,0x7a6,0x1f53,0x7a7,0x1f55, +0x87d7,0x1f57,0x7a6,0x1f5b,0x7a7,0x1f5d,0x87d7,0x1f5f,0x7a6,0x3f62,0x7a7,0x3f64,0x7d7,0x3f66,0x87d8,0x1fa0, +0x7a6,0x3f63,0x7a7,0x3f65,0x7d7,0x3f67,0x87d8,0x1fa1,0x7a6,0x3f6a,0x7a7,0x3f6c,0x7d7,0x3f6e,0x87d8,0x1fa8, +0x7a6,0x3f6b,0x7a7,0x3f6d,0x7d7,0x3f6f,0x87d8,0x1fa9,0x87d8,0x1f82,0x87d8,0x1f83,0x87d8,0x1f84,0x87d8,0x1f85, +0x87d8,0x1f86,0x87d8,0x1f87,0x87d8,0x1f8a,0x87d8,0x1f8b,0x87d8,0x1f8c,0x87d8,0x1f8d,0x87d8,0x1f8e,0x87d8,0x1f8f, +0x87d8,0x1f92,0x87d8,0x1f93,0x87d8,0x1f94,0x87d8,0x1f95,0x87d8,0x1f96,0x87d8,0x1f97,0x87d8,0x1f9a,0x87d8,0x1f9b, +0x87d8,0x1f9c,0x87d8,0x1f9d,0x87d8,0x1f9e,0x87d8,0x1f9f,0x87d8,0x1fa2,0x87d8,0x1fa3,0x87d8,0x1fa4,0x87d8,0x1fa5, +0x87d8,0x1fa6,0x87d8,0x1fa7,0x87d8,0x1faa,0x87d8,0x1fab,0x87d8,0x1fac,0x87d8,0x1fad,0x87d8,0x1fae,0x87d8,0x1faf, +0x87d8,0x1fb2,0x87d8,0x1fb4,0x87d8,0x1fb7,0x87d8,0x1fc2,0x87d8,0x1fc4,0x87d8,0x1fc7,0x7a6,0x1fcd,0x7a7,0x1fce, +0x87d7,0x1fcf,0x7a6,0x1fdd,0x7a7,0x1fde,0x87d7,0x1fdf,0x7d5,0x1fe4,0x87d6,0x1fe5,0x87d6,0x1fec,0x87d8,0x1ff2, +0x87d8,0x1ff4,0x87d8,0x1ff7,0x87d9,0x8000,0x219a,0x87d9,0x8000,0x219b,0x87d9,0x8000,0x21ae,0x87d9,0x8000,0x21cd, +0x87d9,0x8000,0x21ce,0x87d9,0x8000,0x21cf,0x87d9,0x8000,0x2204,0x87d9,0x8000,0x2209,0x87d9,0x8000,0x220c,0x87d9, +0x8000,0x2224,0x87d9,0x8000,0x2226,0x87d9,0x8000,0x2241,0x87d9,0x8000,0x2244,0x87d9,0x8000,0x2247,0x87d9,0x8000, +0x2249,0x87d9,0x8000,0x2260,0x87d9,0x8000,0x2262,0x87d9,0x8000,0x226d,0x87d9,0x8000,0x226e,0x87d9,0x8000,0x226f, +0x87d9,0x8000,0x2270,0x87d9,0x8000,0x2271,0x87d9,0x8000,0x2274,0x87d9,0x8000,0x2275,0x87d9,0x8000,0x2278,0x87d9, +0x8000,0x2279,0x87d9,0x8000,0x2280,0x87d9,0x8000,0x2281,0x87d9,0x8000,0x2284,0x87d9,0x8000,0x2285,0x87d9,0x8000, +0x2288,0x87d9,0x8000,0x2289,0x87d9,0x8000,0x22ac,0x87d9,0x8000,0x22ad,0x87d9,0x8000,0x22ae,0x87d9,0x8000,0x22af, +0x87d9,0x8000,0x22e0,0x87d9,0x8000,0x22e1,0x87d9,0x8000,0x22e2,0x87d9,0x8000,0x22e3,0x87d9,0x8000,0x22ea,0x87d9, +0x8000,0x22eb,0x87d9,0x8000,0x22ec,0x87d9,0x8000,0x22ed,0x87da,0x8000,0x304c,0x87da,0x8000,0x304e,0x87da,0x8000, +0x3050,0x87da,0x8000,0x3052,0x87da,0x8000,0x3054,0x87da,0x8000,0x3056,0x87da,0x8000,0x3058,0x87da,0x8000,0x305a, +0x87da,0x8000,0x305c,0x87da,0x8000,0x305e,0x87da,0x8000,0x3060,0x87da,0x8000,0x3062,0x87da,0x8000,0x3065,0x87da, +0x8000,0x3067,0x87da,0x8000,0x3069,0x7da,0x8000,0x3070,0x87db,0x8000,0x3071,0x7da,0x8000,0x3073,0x87db,0x8000, +0x3074,0x7da,0x8000,0x3076,0x87db,0x8000,0x3077,0x7da,0x8000,0x3079,0x87db,0x8000,0x307a,0x7da,0x8000,0x307c, +0x87db,0x8000,0x307d,0x87da,0x8000,0x3094,0x87da,0x8000,0x309e,0x87da,0x8000,0x30ac,0x87da,0x8000,0x30ae,0x87da, +0x8000,0x30b0,0x87da,0x8000,0x30b2,0x87da,0x8000,0x30b4,0x87da,0x8000,0x30b6,0x87da,0x8000,0x30b8,0x87da,0x8000, +0x30ba,0x87da,0x8000,0x30bc,0x87da,0x8000,0x30be,0x87da,0x8000,0x30c0,0x87da,0x8000,0x30c2,0x87da,0x8000,0x30c5, +0x87da,0x8000,0x30c7,0x87da,0x8000,0x30c9,0x7da,0x8000,0x30d0,0x87db,0x8000,0x30d1,0x7da,0x8000,0x30d3,0x87db, +0x8000,0x30d4,0x7da,0x8000,0x30d6,0x87db,0x8000,0x30d7,0x7da,0x8000,0x30d9,0x87db,0x8000,0x30da,0x7da,0x8000, +0x30dc,0x87db,0x8000,0x30dd,0x87da,0x8000,0x30f4,0x87da,0x8000,0x30f7,0x87da,0x8000,0x30f8,0x87da,0x8000,0x30f9, +0x87da,0x8000,0x30fa,0x87da,0x8000,0x30fe,0x1234 +}; + +#ifndef U_DARWIN +static const uint16_t fcdTrie_index[5496]={ +#else /* U_DARWIN */ +static const uint16_t fcdTrie_index[5532]={ +#endif /* U_DARWIN */ +0x218,0x218,0x218,0x218,0x218,0x218,0x2d5,0x2dd,0x2e5,0x2ed,0x2f5,0x2fc,0x218,0x304,0x309,0x311, +0x317,0x31f,0x218,0x218,0x218,0x218,0x218,0x218,0x456,0x45e,0x234,0x220,0x23c,0x325,0x226,0x218, +0x32d,0x334,0x33b,0x343,0x4ab,0x218,0x34b,0x351,0x218,0x218,0x218,0x218,0x476,0x4b3,0x4bb,0x218, +0x4bf,0x359,0x466,0x47e,0x218,0x218,0x361,0x4c7,0x4cb,0x4d0,0x4d8,0x218,0x218,0x218,0x218,0x4de, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x369,0x241,0x218,0x218,0x46e,0x249,0x218, +0x218,0x251,0x259,0x218,0x218,0x46e,0x371,0x218,0x218,0x46e,0x261,0x218,0x218,0x218,0x371,0x218, +0x218,0x218,0x377,0x218,0x218,0x46e,0x371,0x218,0x218,0x218,0x371,0x218,0x218,0x218,0x37d,0x218, +0x218,0x483,0x4e4,0x218,0x218,0x48a,0x491,0x218,0x494,0x4e7,0x218,0x269,0x271,0x218,0x4ee,0x218, +0x218,0x385,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x4a4,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x4f1,0x4f1,0x218,0x218,0x218,0x218,0x4f7,0x218, +0x218,0x218,0x218,0x218,0x218,0x4ff,0x218,0x218,0x218,0x502,0x218,0x218,0x218,0x218,0x218,0x218, +0x509,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x38c,0x393,0x510,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x518,0x51b, +0x39b,0x3a2,0x3aa,0x3b1,0x3b9,0x3c1,0x3c8,0x3d0,0x3d8,0x3e0,0x3e7,0x279,0x3ef,0x281,0x289,0x291, +0x218,0x218,0x218,0x218,0x218,0x218,0x523,0x52b,0x218,0x22c,0x218,0x218,0x3f7,0x3fe,0x403,0x218, +0x40a,0x411,0x419,0x421,0x425,0x42a,0x218,0x432,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x299,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x49b,0x437,0x43e,0x446,0x437,0x43e,0x44e,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x532,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#ifndef U_DARWIN +0x553,0x556,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#else /* U_DARWIN */ +0x55c,0x55f,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#endif /* U_DARWIN */ +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#ifdef U_DARWIN +0x218,0x218,0x218,0x218,0x538,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#endif /* U_DARWIN */ +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x2a1,0x2a9,0x2b1,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x4a3,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#ifndef U_DARWIN +0x537,0x53b,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x2b5,0x2bd,0x543,0x2c5,0x2cd,0x218, +0x218,0x218,0x54b,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#else /* U_DARWIN */ +0x540,0x544,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x2b5,0x2bd,0x54c,0x2c5,0x2cd,0x218, +0x218,0x218,0x554,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218,0x218, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xeaea,0xeaea,0xe9e9,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0,0,0xe6,0xe6,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xe6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xf0f0,0xe6e6,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0, +0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0xe8e8,0xdcdc,0xdcdc,0xe6e6,0xe9e9,0xeaea,0xeaea,0xe9e9, +0,0,0,0,0,0xe6,0xe6,0,0xe6,0xe6,0xe6,0,0xe6,0,0xe6,0xe6, +0xe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x909,0,0,0,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0,0,0,7,7,7,7, +7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x909,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,7,0,7,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,7,0,0,7,0,0,0,0,0, +0x707,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x909,0,0,0,0,0,0,0,0,0,0,0,7,7,7, +0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x909,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x8181,0x8282,0x8182,0x8484,0x8184,0x82,0,0x82,0,0x8282,0x8282, +0x8282,0x8282,0,0,0x8282,0x8182,0xe6e6,0xe6e6,0x909,0,0xe6e6,0xe6e6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0,0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xe6,0xe6,0xf0,0xf0,0xf0,0,0xe6,0xf0,0xe6,0xe6,0xe6,0xe6, +0xf0,0,0,0,0,0xe6,0xf0,0xf0,0xf0,0,0xe6,0xf0,0xe6,0xe6,0xe6,0xe6, +0xf0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0,0,0,0xf0,0xf0,0xf0,0,0xe6,0xf0,0xe6,0xe6,0xe6,0xe6, +0xf0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xe,0x1a1a,0x11,0,0,0,0,0,0,0,0,0,0,0x18,0x19, +0x18,0x19,0x11,0x12,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0,0x15,0x15,0x15,0x15, +0x15,0,0x15,0,0x15,0x15,0,0x15,0x15,0,0x15,0x15,0x15,0x15,0x15,0x13, +0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8d8,0xd8d8,0x101,0x101,0x101,0,0, +0,0xe2e2,0xd8d8,0xd8d8,0xd8d8,0xd8d8,0xd8d8,0,0,0,0,0,0,0,0,0xdcdc, +0xdcdc,0xdcdc,0xdcdc,0xdcdc,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6, +0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,0,0xd8, +0xd8,0xd8,0xd8,0xd8,0xd8,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0xca,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6, +0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0xca,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6, +0xe6,0xe6,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xca,0xca,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xca,0xca,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xca,0xca,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xca,0xca,0xe6,0,0,0,0xe6,0xe6,0xca,0xca,0,0xe6,0xe6,0xca, +0xca,0xe6,0xe6,0,0,0,0,0xe6,0xe6,0xca,0xca,0xe6,0xe6,0,0,0, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xca,0xca,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xca,0xca,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xca,0xca,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0, +0xd8,0xd8,0,0,0,0,0,0,0,0,0,0,0,0,0,0xd8, +0xd8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xca,0xca, +0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0,0,0xe6,0xe6,0,0,0,0, +0,0,0xe6,0xe6,0xca,0xca,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xe6,0xe6,0,0xe6,0,0,0,0xe6,0,0,0,0, +0xe6,0xe6,0xe6,0,0,0,0,0,0,0,0,0,0,0xe6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xe6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe6,0xe6,0,0xe6, +0,0,0,0xe6,0,0,0,0,0xe6,0xe6,0xe6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xe6,0xe6,0,0,0,0,0,0,0,0,0,0xe6,0xe6,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe6,0xe6,0xe6,0xe6, +0,0,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0,0, +0,0,0,0,0,0,0xe6,0xe6,0xe6,0xdc,0xe6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xe6,0,0xe6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xe6,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6, +0xe6e6,0,0,0xe6e6,0,0,0,0,0,0,0,0,0,7,0,0, +0,0,0,0,0,7,0,0,7,0,0,0,0,0,0,0, +0x707,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x909,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x5b,0,0,0,0,0x909,0,0,0,0,0,0, +0,0x5454,0x5b5b,0,0,0,0,0,0,0,0,0,0,0,0x909,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0, +0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x707,0,0x909,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x707,0,0,0,0,0,0,0,0,0,0,0, +0x909,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xdc,0xdc,0xe6,0xe6, +0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xca,0xca,0xdc,0xdc, +0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xe6,0xe6, +0xca,0xca,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc, +0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xe6,0xe6,0xdc,0xdc, +0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xdc,0xdc,0xe6,0xe6,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0,0xe6, +0,0,0,0,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xdc,0xdc,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xdc,0xdc,0xe6,0xe6,0xdc,0xdc,0xe6,0xe6,0xe6,0xe6,0,0,0,0,0,0, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0,0,0xe6,0xe6,0xe6,0xe6, +0xe6,0xe6,0xe6,0xe6,0,0xe6,0,0xe6,0,0xe6,0,0xe6,0xf0,0xf0,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, +0,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0, +0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,8,0,8,0,8,0,8,0, +8,0,8,0,8,0,8,0,8,0,8,0,0,8,0,8, +0,8,0,0,0,0,0,0,8,8,0,8,8,0,8,8, +0,8,8,0,8,8,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0, +0,0x808,0x808,0,0,0,8,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,8, +8,8,8,0,0,0,8,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6, +0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe8e8,0xdcdc,0xdcdc, +0xdcdc,0xdcdc,0xe8e8,0xd8d8,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xcaca,0xcaca,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xcaca, +0xcaca,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0x101,0x101,0x101,0x101, +0x101,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0, +0,0,0,0x1b1b,0x1c1c,0x1d1d,0x1e1e,0x1f1f,0x2020,0x2121,0x2222,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0xe6e6, +0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x707,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xe6e6, +0xe6e6,0xe6e6,0xdede,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x2323,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x6767,0x6767,0x909,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x7676,0x7676,0,0,0,0,0,0,0,0,0,0,0x7a7a,0x7a7a,0x7a7a,0x7a7a, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xdcdc,0xdcdc,0,0,0,0,0,0, +0,0,0,0,0,0,0xdada,0xe4e4,0xe8e8,0xdede,0xe0e0,0xe0e0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6, +0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xdcdc,0xdcdc, +0xdcdc,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xdede,0xe4e4,0xe6e6,0xa0a,0xb0b,0xc0c,0xd0d, +0xe0e,0xf0f,0x1010,0x1111,0x1212,0x1313,0x1313,0x1414,0x1515,0x1616,0,0x1717,0,0x1818,0x1919,0, +0xe6e6,0xdcdc,0,0x1212,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6, +0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0xe6e6,0xdcdc, +0xe6e6,0,0,0xe6e6,0xe6e6,0,0xdcdc,0xe6e6,0xe6e6,0xdcdc,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x2424,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0xdcdc,0xe6e6,0xdcdc,0xdcdc,0xe6e6,0xdcdc,0xe6e6, +0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xdcdc,0xe6e6,0xdcdc,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xe6e6,0,0,0,0, +0,0,0,0,0,0,0,0,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xdcdc,0,0xdcdc,0,0xd8d8,0,0,0,0,0,0,0,0,0xdcdc,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x909,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x909,0, +0,0,0,0,0,0,0,0,0,0xe6e6,0,0,0,0,0,0, +0,0,0,0,0,0xe4e4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xdede,0xe6e6,0xdcdc,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xdcdc,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xe6e6, +0xe6e6,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0, +0xe6e6,0xe6e6,0xdcdc,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xe6e6,0xdcdc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6,0x101,0x101, +0xe6e6,0xe6e6,0xe6e6,0xe6e6,0x101,0x101,0x101,0xe6e6,0xe6e6,0,0,0,0,0xe6e6,0,0, +0,0x101,0x101,0xe6e6,0xdcdc,0xe6e6,0x101,0x101,0xdcdc,0xdcdc,0xdcdc,0xdcdc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x909,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0,0xdcdc,0,0xe6e6,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b, +0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0x6b6b,0,0,0,0,0,0,0,0,0,0x1212, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xdcdc,0,0xe6e6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xe6e6,0x101,0xdcdc,0,0,0,0,0x909, +0xdcdc,0xdcdc,0xdcdc,0,0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xe6e6,0xe6e6,0xe6e6,0,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0xe6e6,0x101,0xdcdc,0,0,0,0,0x909,0xdcdc,0xdcdc,0xdcdc,0, +0,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xe6e6,0xdcdc,0xdcdc,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xe6e6,0xe6e6, +0xe6e6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x820,0, +#else /* U_DARWIN */ +0,0,0x820,0,0,0,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0,0,0,0,0x840,0,0,0, +0,0,0,0,0,0,0,0 +#else /* U_DARWIN */ +0x840,0,0,0,0,0,0,0,0,0,0,0 +#endif /* U_DARWIN */ +}; + +static const UTrie fcdTrie={ + fcdTrie_index, + NULL, + utrie_defaultGetFoldingOffset, + 2144, +#ifndef U_DARWIN + 3352, +#else /* U_DARWIN */ + 3388, +#endif /* U_DARWIN */ + 0, + FALSE +}; + +#ifndef U_DARWIN +static const uint16_t auxTrie_index[5748]={ +#else /* U_DARWIN */ +static const uint16_t auxTrie_index[5784]={ +#endif /* U_DARWIN */ +0x228,0x228,0x228,0x228,0x228,0x228,0x3ea,0x3f2,0x3fa,0x402,0x40a,0x412,0x228,0x228,0x41a,0x422, +0x42a,0x432,0x228,0x228,0x228,0x228,0x228,0x228,0x4be,0x4be,0x315,0x230,0x31d,0x228,0x238,0x23e, +0x228,0x228,0x228,0x228,0x513,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x4ec,0x51b,0x523,0x228, +0x527,0x43a,0x4c6,0x448,0x228,0x228,0x43d,0x52f,0x533,0x22c,0x4cb,0x228,0x228,0x228,0x228,0x539, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x445,0x322,0x228,0x228,0x4ce,0x32a,0x228, +0x228,0x332,0x33a,0x228,0x228,0x445,0x53e,0x228,0x228,0x4ce,0x342,0x228,0x228,0x4d6,0x44d,0x228, +0x228,0x228,0x453,0x228,0x228,0x445,0x45b,0x228,0x228,0x4d6,0x44d,0x228,0x228,0x228,0x461,0x228, +0x228,0x4f4,0x502,0x228,0x228,0x4fb,0x502,0x228,0x4fb,0x542,0x34a,0x352,0x35a,0x362,0x549,0x228, +0x228,0x469,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x4de,0x228,0x4e4,0x4cd,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x50c,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x447,0x447,0x228,0x228,0x228,0x228,0x54d,0x228, +0x228,0x228,0x228,0x228,0x228,0x53f,0x228,0x228,0x228,0x555,0x228,0x228,0x228,0x228,0x228,0x228, +0x55c,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x470,0x477,0x539,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x245,0x24d,0x228,0x228,0x228,0x4cb,0x43b, +0x47f,0x487,0x48c,0x492,0x49a,0x4a2,0x4a5,0x4a9,0x228,0x228,0x228,0x369,0x4af,0x371,0x379,0x37f, +0x387,0x228,0x228,0x228,0x228,0x253,0x563,0x56b,0x25b,0x263,0x26b,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x38d,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x390,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x508,0x228,0x228,0x4b6,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x26f,0x228,0x228,0x228,0x274,0x228,0x228,0x228,0x228,0x278,0x280,0x286,0x28e,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x549,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#ifndef U_DARWIN +0x58c,0x58f,0x228,0x595,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#else /* U_DARWIN */ +0x595,0x598,0x228,0x59e,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#endif /* U_DARWIN */ +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#ifndef U_DARWIN +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398, +#else /* U_DARWIN */ +0x228,0x228,0x228,0x228,0x571,0x228,0x228,0x228,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398, +#endif /* U_DARWIN */ +0x39d,0x3a5,0x398,0x3ab,0x398,0x398,0x3af,0x228,0x3b6,0x3be,0x3c6,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x50b,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#ifndef U_DARWIN +0x570,0x574,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x3ca,0x3d2,0x57c,0x3da,0x3e2,0x228, +0x228,0x228,0x584,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#else /* U_DARWIN */ +0x579,0x57d,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x3ca,0x3d2,0x585,0x3da,0x3e2,0x228, +0x228,0x228,0x58d,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +#endif /* U_DARWIN */ +0x296,0x29d,0x299,0x2a0,0x2a8,0x2b0,0x29e,0x29a,0x2b7,0x2bf,0x2c7,0x29f,0x2a7,0x296,0x29d,0x299, +0x2a0,0x2cf,0x297,0x29e,0x29a,0x2d7,0x2df,0x2e7,0x2ee,0x2f6,0x2e2,0x2fe,0x2f1,0x306,0x30d,0x228, +0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398, +0x399,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0,0,0,0,0x400,0,0,0,0,0,1,0,0,0,0x400,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,6,8,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xa,0,0,0,0,0, +0,0xb,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xc,0xe,0x10,0,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0, +0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x36,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x39,0x3b, +0,0,0,0x3e,0,0x40,0,0x1b,0x1b,0x1b,0,0,0x1d,0x1d,0x23,0, +0,0x27,0x43,0,0,0x2d,0x46,0x2f,0x2f,0x2f,0,0,0x48,0x4b,0x4f,0, +0x52,0,0x400,0,0x53,0,0x400,0x400,0x11,0x3a,0,0,0x15,0x42,0,0x25, +0,0,0,0,0,0,0,0x54,0,0,0x58,0x5a,0,0,0,0, +0,0x13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x5c,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x60,0,0x63,0x66, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x6a,0,0x6e,0,0x71,0,0,0,0,0x74,0,0,0,0,0, +0x77,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8c,0,0,0x8f,0x92,0x95,0,0,0, +0x98,0x9b,0x9f,0xa3,0xa7,0,0,0,0,0,0,0,0,0,0,0, +0,0xab,0xae,0xb2,0xb6,0,0,0,0,0,0,0,0xba,0xbd,0xc0,0xc3, +0xc6,0xc9,0xcc,0xcf,0xd2,0xd5,0xd8,0xdb,0xde,0xe1,0,0xe4,0,0,0xe7,0xec, +0xf0,0xf3,0,0xf6,0,0xf9,0xfc,0,0,0,0,0,0,0,0,0xff, +0,0x102,0x106,0,0x109,0x10c,0x10f,0x113,0xd,0x11,0x3a,0x13,0x15,0x42,0x19,0x1b, +0x1d,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,0x47,0x2f,0x38,0x31,0x33,0x65,0x35,0x57, +0xf5,0x53,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xd,0x11,0x3a,0x13,0x15,0x42,0x19,0x1b, +0x1d,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d,0x47,0x2f,0x38,0x31,0x33,0x65,0x35,0x57, +0xf5,0x53,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xd,0,0x3a,0x13, +0,0,0x19,0,0,0x1f,0x21,0,0,0x27,0x29,0x2d,0x47,0,0x38,0x31, +0x33,0x65,0x35,0x57,0xf5,0x53,0,0,0,0,0,0,0,0,0,0, +0xd,0x11,0,0x13,0x15,0x42,0x19,0,0,0x1f,0x21,0x23,0x25,0x27,0x29,0x2d, +0x47,0,0x38,0x31,0x33,0x65,0x35,0x57,0xf5,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xd,0x11,0,0x13,0x15,0x42,0x19,0,0x1d,0x1f,0x21,0x23, +0x25,0,0x29,0,0,0,0x38,0x31,0x33,0x65,0x35,0x57,0xf5,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xf5,0x53,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xd,0x11,0x3a,0x13,0,0,0,0, +0,0,0,0,0x117,0x119,0x59,0x11b,0x11d,0x11f,0x121,0x123,3,0x125,0x127,0x7e, +0x129,0x12b,0x12d,0x5b,0x12f,0x124,0xb,0x131,5,0x133,0x135,0x137,0xe0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x118,0x11a, +0x59,0x11c,0x11e,0x120,0x122,0x124,3,0x126,0x128,0x7e,0x12a,0x12c,0x12e,0x5b,0x130,0x124, +0xb,0x132,5,0x134,0x136,0x138,0xe0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x118,0x11a,0x59,0x11c,0x11e,0x120,0x122,0x124,3,0x126,0x128,0x7e, +0x12a,0x12c,0x12e,0x5b,0x130,0x124,0xb,0x132,5,0x134,0x136,0x138,0xe0,0,0,0, +0,0,0,0,0,0,0,0,0x128,0x7e,0x12a,0x12c,0x12e,0x5b,0x130,0x124, +0xb,0x132,5,0x134,0x136,0x138,0xe0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x130,0x124,0xb,0x132,5,0x134,0x136,0x138, +0xe0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb,0,0,0,0,0,0,0,0,0,0,0x139,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xc00,0xc00,0x800,0xc00,0xc00,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0x400,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x800,0,0,0,0x800,0x800,0x800,0x800,0,0,0, +0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0x800, +0,0,0,0,0x400,0x400,0,0x400,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x400,0,0,0x400,0, +0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0, +0,0x400,0x400,0x400,0,0,0x400,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0x800,0x800, +0,0,0,0,0x400,0x400,0,0,0,0,0,0x400,0,0,0,0, +0,0,0,0,0,0x400,0,0,0,0,0x400,0,0,0,0,0x400, +0,0,0,0,0x400,0,0,0,0,0,0,0,0,0,0,0, +0,0x400,0,0,0,0,0,0,0,0x800,0x800,0x400,0x800,0x400,0x400,0, +0x400,0,0x800,0x800,0x800,0x800,0,0,0x800,0x400,0x800,0x800,0x800,0,0x800,0x800, +0,0,0,0,0,0,0,0,0,0,0,0x400,0,0,0,0, +0,0,0,0,0,0x400,0,0,0,0,0x400,0,0,0,0,0x400, +0,0,0,0,0x400,0,0,0,0,0,0,0,0,0x800,0,0x800, +0,0x400,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x400,0,0x400,0,0x400,0,0x400,0,0x400,0,0x400, +0,0x400,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0, +0,0,0,0,0,0,0,0x1000,0,0,0,0,0,0,0,0x400, +0x1000,0,0x400,0,0,0,0,0x1000,0,0,0,0,0,0x400,0,0x400, +0x1000,0,0,0,0,0,0,0x400,0,0,0,0,0,0,0,0x400, +0,0,0,0,0,0,0,0x400,0,0,0x400,0x400,0,0,0,0x1000, +0,0,0,0,0,0x400,0,0x400,0x1000,0x400,0,0,0x400,0x400,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x400,0x400,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x400,0,0,0, +0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400, +0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400, +0x400,0x400,0,0,0x400,0,0x400,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400, +0x400,0x400,0x400,0,0x400,0,0x400,0,0,0x400,0x400,0,0,0,0x400,0x400, +0x400,0x400,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400, +0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0x400,0x400,0x400,0x400, +0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400, +0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x400,0x800,0x400,0,0,0,0,0,0,0,0, +0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0, +0x400,0x400,0x400,0x400,0x400,0,0x400,0,0x400,0x400,0,0x400,0x400,0,0x400,0x400, +0x400,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0x400,0x800,0x800,0x800, +0x800,0x800,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0, +0,0,0,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0, +0,0,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x400,0x400,0x400,0x400,0x400,0x400,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1000,0x1000,0,0x1000,0,0,0,0, +0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0,0,0,0, +0,0x1000,0x1000,0x1000,0,0x1000,0,0,0x1000,0x1000,0,0x1000,0,0,0,0, +0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0,0,0,0, +0,0x1000,0x1000,0x1000,0,0x1000,0,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000, +0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0,0, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0,0,0,0,0,0,0, +0,0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0,0,0x1000, +0x1000,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0,0, +0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0, +0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000, +0x1000,0x1000,0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0,0, +0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0,0,0,0,0,0,0,0, +0,0,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x800,0,0,0,0,0,0,0,0,0,0x800,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0, +0,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0x800,0, +0,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0,0, +0,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0x800,0, +0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x800,0,0,0,0,0,0,0,0,0x800,0,0x800,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x800,0x800,0,0,0,0,0,0,0,0,0,0, +0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000, +0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0,0,0,0,0x1000,0x1000, +0x1000,0x1000,0,0,0,0,0,0,0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0,0,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, +0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0,0,0x1000,0x1000,0x1000,0x1000,0,0, +0,0,0,0,0x1000,0x1000,0,0,0,0,0,0,0x1000,0x1000,0,0, +0,0,0,0,0x1000,0x1000,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x800,0x800,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0, +0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x800,0,0x800,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x800,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0, +0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x800,0x800,0x800,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x800,0x800,0,0,0,0,0,0,0,0,0,0, +0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800,0x800,0x800, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800, +0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0x800,0,0x800,0x800,0, +0x800,0x800,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800, +0x800,0x800,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800, +0x800,0,0,0x800,0x800,0,0x800,0x800,0x800,0x800,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0x800, +0,0x800,0,0,0,0,0,0,0,0,0x800,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x800,0,0,0,0,0,0,0,0,0, +0,0x800,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x800,0x800,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0x800,0,0, +0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0, +#ifndef U_DARWIN +0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0,0x800, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x800,0x800,0x800,0,0,0,0,0x800, +0x800,0x800,0x800,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800, +0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0x800,0,0,0,0,0,0, +0,0,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x800,0,0x800,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x800,0x800,0x800,0, +0,0,0,0x800,0x800,0x800,0x800,0,0,0x800,0x800,0x800,0x800,0x800,0x800,0x800, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0x800,0x800,0x800,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0,0,0x800,0x800,0x800,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0x841,0,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0,0,0x841,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0xc42,0x43,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* U_DARWIN */ +0,0,0,0,0xc42,0x43,0,0,0,0,0,0,0,0,0,0, +#endif /* U_DARWIN */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +#ifndef U_DARWIN +0,0,0x444,0 +#else /* U_DARWIN */ +0,0,0,0,0,0,0x444,0 +#endif /* U_DARWIN */ +}; + +static const UTrie auxTrie={ + auxTrie_index, + NULL, + getFoldingAuxOffset, + 2208, +#ifndef U_DARWIN + 3540, +#else /* U_DARWIN */ + 3576, +#endif /* U_DARWIN */ + 0, + FALSE +}; + +static const uint16_t canonStartSets[7724]={ +0x109b,0x8ae,0x153,0x1a9c,0x1ab4,0x1e2c,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x32,0xc0,0xc6,0x100,0x101,0x102,0x103,0x104,0x105,0x1cd,0x1ce,0x1de,0x1df,0x1e0,0x1e1,0x1fa, +0x1fb,0x200,0x201,0x202,0x203,0x226,0x227,0x1e00,0x1e01,0x1ea0,0x1ea1,0x1ea2,0x1ea3,0x1ea4,0x1ea5,0x1ea6, +0x1ea7,0x1ea8,0x1ea9,0x1eaa,0x1eab,0x1eac,0x1ead,0x1eae,0x1eaf,0x1eb0,0x1eb1,0x1eb2,0x1eb3,0x1eb4,0x1eb5,0x1eb6, +0x1eb7,0x212b,0x212c,6,0x1e02,0x1e03,0x1e04,0x1e05,0x1e06,0x1e07,0xc,0xc7,0xc8,0x106,0x107,0x108, +0x109,0x10a,0x10b,0x10c,0x10d,0x1e08,0x1e09,0xc,0x10e,0x10f,0x1e0a,0x1e0b,0x1e0c,0x1e0d,0x1e0e,0x1e0f, +0x1e10,0x1e11,0x1e12,0x1e13,0x2c,0xc8,0xcc,0x112,0x113,0x114,0x115,0x116,0x117,0x118,0x119,0x11a, +0x11b,0x204,0x205,0x206,0x207,0x228,0x229,0x1e14,0x1e15,0x1e16,0x1e17,0x1e18,0x1e19,0x1e1a,0x1e1b,0x1e1c, +0x1e1d,0x1eb8,0x1eb9,0x1eba,0x1ebb,0x1ebc,0x1ebd,0x1ebe,0x1ebf,0x1ec0,0x1ec1,0x1ec2,0x1ec3,0x1ec4,0x1ec5,0x1ec6, +0x1ec7,0xe,0x11c,0x11d,0x11e,0x11f,0x120,0x121,0x122,0x123,0x1e6,0x1e7,0x1f4,0x1f5,0x1e20,0x1e21, +0xe,0x124,0x125,0x21e,0x21f,0x1e22,0x1e23,0x1e24,0x1e25,0x1e26,0x1e27,0x1e28,0x1e29,0x1e2a,0x1e2b,0x1a, +0xcc,0xd0,0x128,0x129,0x12a,0x12b,0x12c,0x12d,0x12e,0x12f,0x130,0x131,0x1cf,0x1d0,0x208,0x209, +0x20a,0x20b,0x1e2c,0x1e2d,0x1e2e,0x1e2f,0x1ec8,0x1ec9,0x1eca,0x1ecb,0xc,0x136,0x137,0x1e8,0x1e9,0x1e30, +0x1e31,0x1e32,0x1e33,0x1e34,0x1e35,0x212a,0x212b,0xe,0x139,0x13a,0x13b,0x13c,0x13d,0x13e,0x1e36,0x1e37, +0x1e38,0x1e39,0x1e3a,0x1e3b,0x1e3c,0x1e3d,6,0x1e3e,0x1e3f,0x1e40,0x1e41,0x1e42,0x1e43,0x12,0xd1,0xd2, +0x143,0x144,0x145,0x146,0x147,0x148,0x1f8,0x1f9,0x1e44,0x1e45,0x1e46,0x1e47,0x1e48,0x1e49,0x1e4a,0x1e4b, +0x3c,0xd2,0xd7,0x14c,0x14d,0x14e,0x14f,0x150,0x151,0x1a0,0x1a1,0x1d1,0x1d2,0x1ea,0x1eb,0x1ec, +0x1ed,0x20c,0x20d,0x20e,0x20f,0x22a,0x22b,0x22c,0x22d,0x22e,0x22f,0x230,0x231,0x1e4c,0x1e4d,0x1e4e, +0x1e4f,0x1e50,0x1e51,0x1e52,0x1e53,0x1ecc,0x1ecd,0x1ece,0x1ecf,0x1ed0,0x1ed1,0x1ed2,0x1ed3,0x1ed4,0x1ed5,0x1ed6, +0x1ed7,0x1ed8,0x1ed9,0x1eda,0x1edb,0x1edc,0x1edd,0x1ede,0x1edf,0x1ee0,0x1ee1,0x1ee2,0x1ee3,4,0x1e54,0x1e55, +0x1e56,0x1e57,0x12,0x154,0x155,0x156,0x157,0x158,0x159,0x210,0x211,0x212,0x213,0x1e58,0x1e59,0x1e5a, +0x1e5b,0x1e5c,0x1e5d,0x1e5e,0x1e5f,0x14,0x15a,0x15b,0x15c,0x15d,0x15e,0x15f,0x160,0x161,0x218,0x219, +0x1e60,0x1e61,0x1e62,0x1e63,0x1e64,0x1e65,0x1e66,0x1e67,0x1e68,0x1e69,0xe,0x162,0x163,0x164,0x165,0x21a, +0x21b,0x1e6a,0x1e6b,0x1e6c,0x1e6d,0x1e6e,0x1e6f,0x1e70,0x1e71,0x36,0xd9,0xdd,0x168,0x169,0x16a,0x16b, +0x16c,0x16d,0x16e,0x16f,0x170,0x171,0x172,0x173,0x1af,0x1b0,0x1d3,0x1d4,0x1d5,0x1d6,0x1d7,0x1d8, +0x1d9,0x1da,0x1db,0x1dc,0x214,0x215,0x216,0x217,0x1e72,0x1e73,0x1e74,0x1e75,0x1e76,0x1e77,0x1e78,0x1e79, +0x1e7a,0x1e7b,0x1ee4,0x1ee5,0x1ee6,0x1ee7,0x1ee8,0x1ee9,0x1eea,0x1eeb,0x1eec,0x1eed,0x1eee,0x1eef,0x1ef0,0x1ef1, +4,0x1e7c,0x1e7d,0x1e7e,0x1e7f,0xc,0x174,0x175,0x1e80,0x1e81,0x1e82,0x1e83,0x1e84,0x1e85,0x1e86,0x1e87, +0x1e88,0x1e89,4,0x1e8a,0x1e8b,0x1e8c,0x1e8d,0x12,0xdd,0xde,0x176,0x177,0x178,0x179,0x232,0x233, +0x1e8e,0x1e8f,0x1ef2,0x1ef3,0x1ef4,0x1ef5,0x1ef6,0x1ef7,0x1ef8,0x1ef9,0xc,0x179,0x17a,0x17b,0x17c,0x17d, +0x17e,0x1e90,0x1e91,0x1e92,0x1e93,0x1e94,0x1e95,0x30,0xe0,0xe6,0x101,0x102,0x103,0x104,0x105,0x106, +0x1ce,0x1cf,0x1df,0x1e0,0x1e1,0x1e2,0x1fb,0x1fc,0x201,0x202,0x203,0x204,0x227,0x228,0x1e01,0x1e02, +0x1ea1,0x1ea2,0x1ea3,0x1ea4,0x1ea5,0x1ea6,0x1ea7,0x1ea8,0x1ea9,0x1eaa,0x1eab,0x1eac,0x1ead,0x1eae,0x1eaf,0x1eb0, +0x1eb1,0x1eb2,0x1eb3,0x1eb4,0x1eb5,0x1eb6,0x1eb7,0x1eb8,6,0x1e03,0x1e04,0x1e05,0x1e06,0x1e07,0x1e08,0xc, +0xe7,0xe8,0x107,0x108,0x109,0x10a,0x10b,0x10c,0x10d,0x10e,0x1e09,0x1e0a,0xc,0x10f,0x110,0x1e0b, +0x1e0c,0x1e0d,0x1e0e,0x1e0f,0x1e10,0x1e11,0x1e12,0x1e13,0x1e14,0x2c,0xe8,0xec,0x113,0x114,0x115,0x116, +0x117,0x118,0x119,0x11a,0x11b,0x11c,0x205,0x206,0x207,0x208,0x229,0x22a,0x1e15,0x1e16,0x1e17,0x1e18, +0x1e19,0x1e1a,0x1e1b,0x1e1c,0x1e1d,0x1e1e,0x1eb9,0x1eba,0x1ebb,0x1ebc,0x1ebd,0x1ebe,0x1ebf,0x1ec0,0x1ec1,0x1ec2, +0x1ec3,0x1ec4,0x1ec5,0x1ec6,0x1ec7,0x1ec8,0xe,0x11d,0x11e,0x11f,0x120,0x121,0x122,0x123,0x124,0x1e7, +0x1e8,0x1f5,0x1f6,0x1e21,0x1e22,0x10,0x125,0x126,0x21f,0x220,0x1e23,0x1e24,0x1e25,0x1e26,0x1e27,0x1e28, +0x1e29,0x1e2a,0x1e2b,0x1e2c,0x1e96,0x1e97,0x18,0xec,0xf0,0x129,0x12a,0x12b,0x12c,0x12d,0x12e,0x12f, +0x130,0x1d0,0x1d1,0x209,0x20a,0x20b,0x20c,0x1e2d,0x1e2e,0x1e2f,0x1e30,0x1ec9,0x1eca,0x1ecb,0x1ecc,4, +0x135,0x136,0x1f0,0x1f1,0xa,0x137,0x138,0x1e9,0x1ea,0x1e31,0x1e32,0x1e33,0x1e34,0x1e35,0x1e36,0xe, +0x13a,0x13b,0x13c,0x13d,0x13e,0x13f,0x1e37,0x1e38,0x1e39,0x1e3a,0x1e3b,0x1e3c,0x1e3d,0x1e3e,6,0x1e3f, +0x1e40,0x1e41,0x1e42,0x1e43,0x1e44,0x12,0xf1,0xf2,0x144,0x145,0x146,0x147,0x148,0x149,0x1f9,0x1fa, +0x1e45,0x1e46,0x1e47,0x1e48,0x1e49,0x1e4a,0x1e4b,0x1e4c,0x3c,0xf2,0xf7,0x14d,0x14e,0x14f,0x150,0x151, +0x152,0x1a1,0x1a2,0x1d2,0x1d3,0x1eb,0x1ec,0x1ed,0x1ee,0x20d,0x20e,0x20f,0x210,0x22b,0x22c,0x22d, +0x22e,0x22f,0x230,0x231,0x232,0x1e4d,0x1e4e,0x1e4f,0x1e50,0x1e51,0x1e52,0x1e53,0x1e54,0x1ecd,0x1ece,0x1ecf, +0x1ed0,0x1ed1,0x1ed2,0x1ed3,0x1ed4,0x1ed5,0x1ed6,0x1ed7,0x1ed8,0x1ed9,0x1eda,0x1edb,0x1edc,0x1edd,0x1ede,0x1edf, +0x1ee0,0x1ee1,0x1ee2,0x1ee3,0x1ee4,4,0x1e55,0x1e56,0x1e57,0x1e58,0x12,0x155,0x156,0x157,0x158,0x159, +0x15a,0x211,0x212,0x213,0x214,0x1e59,0x1e5a,0x1e5b,0x1e5c,0x1e5d,0x1e5e,0x1e5f,0x1e60,0x14,0x15b,0x15c, +0x15d,0x15e,0x15f,0x160,0x161,0x162,0x219,0x21a,0x1e61,0x1e62,0x1e63,0x1e64,0x1e65,0x1e66,0x1e67,0x1e68, +0x1e69,0x1e6a,0x10,0x163,0x164,0x165,0x166,0x21b,0x21c,0x1e6b,0x1e6c,0x1e6d,0x1e6e,0x1e6f,0x1e70,0x1e71, +0x1e72,0x1e97,0x1e98,0x36,0xf9,0xfd,0x169,0x16a,0x16b,0x16c,0x16d,0x16e,0x16f,0x170,0x171,0x172, +0x173,0x174,0x1b0,0x1b1,0x1d4,0x1d5,0x1d6,0x1d7,0x1d8,0x1d9,0x1da,0x1db,0x1dc,0x1dd,0x215,0x216, +0x217,0x218,0x1e73,0x1e74,0x1e75,0x1e76,0x1e77,0x1e78,0x1e79,0x1e7a,0x1e7b,0x1e7c,0x1ee5,0x1ee6,0x1ee7,0x1ee8, +0x1ee9,0x1eea,0x1eeb,0x1eec,0x1eed,0x1eee,0x1eef,0x1ef0,0x1ef1,0x1ef2,4,0x1e7d,0x1e7e,0x1e7f,0x1e80,0xe, +0x175,0x176,0x1e81,0x1e82,0x1e83,0x1e84,0x1e85,0x1e86,0x1e87,0x1e88,0x1e89,0x1e8a,0x1e98,0x1e99,4,0x1e8b, +0x1e8c,0x1e8d,0x1e8e,0x14,0xfd,0xfe,0xff,0x100,0x177,0x178,0x233,0x234,0x1e8f,0x1e90,0x1e99,0x1e9a, +0x1ef3,0x1ef4,0x1ef5,0x1ef6,0x1ef7,0x1ef8,0x1ef9,0x1efa,0xc,0x17a,0x17b,0x17c,0x17d,0x17e,0x17f,0x1e91, +0x1e92,0x1e93,0x1e94,0x1e95,0x1e96,6,0x385,0x386,0x1fc1,0x1fc2,0x1fed,0x1fef,4,0x1e2,0x1e3,0x1fc, +0x1fd,4,0x1e3,0x1e4,0x1fd,0x1fe,8,0x386,0x387,0x1f08,0x1f10,0x1f88,0x1f90,0x1fb8,0x1fbd,6, +0x388,0x389,0x1f18,0x1f1e,0x1fc8,0x1fca,8,0x389,0x38a,0x1f28,0x1f30,0x1f98,0x1fa0,0x1fca,0x1fcd,8, +0x38a,0x38b,0x3aa,0x3ab,0x1f38,0x1f40,0x1fd8,0x1fdc,6,0x38c,0x38d,0x1f48,0x1f4e,0x1ff8,0x1ffa,0xe, +0x38e,0x38f,0x3ab,0x3ac,0x1f59,0x1f5a,0x1f5b,0x1f5c,0x1f5d,0x1f5e,0x1f5f,0x1f60,0x1fe8,0x1fec,0xa,0x38f, +0x390,0x1f68,0x1f70,0x1fa8,0x1fb0,0x1ffa,0x1ffd,0x2126,0x2127,0xc,0x3ac,0x3ad,0x1f00,0x1f08,0x1f70,0x1f72, +0x1f80,0x1f88,0x1fb0,0x1fb5,0x1fb6,0x1fb8,6,0x3ad,0x3ae,0x1f10,0x1f16,0x1f72,0x1f74,0xc,0x3ae,0x3af, +0x1f20,0x1f28,0x1f74,0x1f76,0x1f90,0x1f98,0x1fc2,0x1fc5,0x1fc6,0x1fc8,0x10,0x390,0x391,0x3af,0x3b0,0x3ca, +0x3cb,0x1f30,0x1f38,0x1f76,0x1f78,0x1fbe,0x1fbf,0x1fd0,0x1fd4,0x1fd6,0x1fd8,6,0x3cc,0x3cd,0x1f40,0x1f46, +0x1f78,0x1f7a,2,0x1fe4,0x1fe6,0xe,0x3b0,0x3b1,0x3cb,0x3cc,0x3cd,0x3ce,0x1f50,0x1f58,0x1f7a,0x1f7c, +0x1fe0,0x1fe4,0x1fe6,0x1fe8,0xc,0x3ce,0x3cf,0x1f60,0x1f68,0x1f7c,0x1f7e,0x1fa0,0x1fa8,0x1ff2,0x1ff5,0x1ff6, +0x1ff8,2,0x3d3,0x3d5,4,0x4d0,0x4d1,0x4d2,0x4d3,4,0x400,0x402,0x4d6,0x4d7,4,0x4c1, +0x4c2,0x4dc,0x4dd,8,0x40d,0x40e,0x419,0x41a,0x4e2,0x4e3,0x4e4,0x4e5,8,0x40e,0x40f,0x4ee, +0x4ef,0x4f0,0x4f1,0x4f2,0x4f3,4,0x4d1,0x4d2,0x4d3,0x4d4,4,0x450,0x452,0x4d7,0x4d8,4, +0x4c2,0x4c3,0x4dd,0x4de,8,0x439,0x43a,0x45d,0x45e,0x4e3,0x4e4,0x4e5,0x4e6,8,0x45e,0x45f, +0x4ef,0x4f0,0x4f1,0x4f2,0x4f3,0x4f4,2,0xfb2e,0xfb31,4,0xfb31,0xfb32,0xfb4c,0xfb4d,4,0xfb35, +0xfb36,0xfb4b,0xfb4c,4,0xfb1d,0xfb1e,0xfb39,0xfb3a,4,0xfb3b,0xfb3c,0xfb4d,0xfb4e,4,0xfb44,0xfb45, +0xfb4e,0xfb4f,4,0xfb2a,0xfb2e,0xfb49,0xfb4a,4,0x622,0x624,0x625,0x626,2,0x9cb,0x9cd,4, +0xb48,0xb49,0xb4b,0xb4d,4,0xbca,0xbcb,0xbcc,0xbcd,4,0xcc7,0xcc9,0xcca,0xccc,4,0xd4a, +0xd4b,0xd4c,0xd4d,4,0xdda,0xddb,0xddc,0xddf,6,0xf73,0xf74,0xf75,0xf76,0xf81,0xf82,2, +0xac00,0xae4c,2,0xae4c,0xb098,2,0xb098,0xb2e4,2,0xb2e4,0xb530,2,0xb530,0xb77c,2,0xb77c, +0xb9c8,2,0xb9c8,0xbc14,2,0xbc14,0xbe60,2,0xbe60,0xc0ac,2,0xc0ac,0xc2f8,2,0xc2f8,0xc544, +2,0xc544,0xc790,2,0xc790,0xc9dc,2,0xc9dc,0xcc28,2,0xcc28,0xce74,2,0xce74,0xd0c0,2, +0xd0c0,0xd30c,2,0xd30c,0xd558,2,0xd558,0xd7a4,2,0x1fcd,0x1fd0,2,0x1fdd,0x1fe0,2,0x3070, +0x3072,2,0x3073,0x3075,2,0x3076,0x3078,2,0x3079,0x307b,2,0x307c,0x307e,2,0x30d0,0x30d2, +2,0x30d3,0x30d5,2,0x30d6,0x30d8,2,0x30d9,0x30db,2,0x30dc,0x30de,0x8004,0,2,0xf80c, +2,0xf80d,0x8004,0,2,0xf813,2,0xf814,0x8004,0,2,0xf9ca,2,0xf9cb,0x8004,0, +2,0xf81f,2,0xf820,0x8004,0,2,0xf824,2,0xf825,0x8004,0,2,0xf867,2,0xf868, +0x8004,0,2,0xf868,2,0xf869,0x8004,0,2,0xf876,2,0xf877,0x8004,0,2,0xf883, +2,0xf884,0x8004,0,2,0xf888,2,0xf889,0x8004,0,2,0xf88a,2,0xf88b,0x8004,0, +2,0xf896,2,0xf897,0x8004,0,2,0xf89b,2,0xf89c,0x8004,0,2,0xf8a2,2,0xf8a3, +0x8004,0,2,0xf8a1,2,0xf8a2,0x8004,0,2,0xf8c2,2,0xf8c3,0x8004,0,2,0xf8c7, +2,0xf8c8,0x8004,0,2,0xf8d1,2,0xf8d2,0x8004,0,2,0xf8d0,2,0xf8d1,0x8004,0, +2,0xf8ce,2,0xf8cf,0x8004,0,2,0xf8de,2,0xf8df,0x8006,2,0xfad2,0xfad3,2,0xf8e7, +2,0xf8e8,0x8004,0,2,0xf8ee,2,0xf8ef,0x8004,0,2,0xf8f2,2,0xf8f3,0x8004,0, +2,0xf90a,2,0xf90b,0x8004,0,2,0xf916,2,0xf917,0x8004,0,2,0xf92a,2,0xf92b, +0x8004,0,2,0xf92c,2,0xf92e,0x8004,0,2,0xf933,2,0xf934,0x8004,0,2,0xf93e, +2,0xf93f,0x8004,0,2,0xf93f,2,0xf940,0x8006,2,0xfad4,0xfad5,2,0xf949,2,0xf94a, +0x8004,0,2,0xf94b,2,0xf94c,0x8004,0,2,0xf94c,2,0xf94d,0x8004,0,2,0xf951, +2,0xf952,0x8004,0,2,0xf958,2,0xf959,0x8004,0,2,0xf960,2,0xf961,0x8004,0, +2,0xf964,2,0xf965,0x8004,0,2,0xf967,2,0xf968,0x8004,0,2,0xf96d,2,0xf96e, +0x8004,0,2,0xf971,2,0xf972,0x8004,0,2,0xf974,2,0xf975,0x8004,0,2,0xf981, +2,0xf982,0x8004,0,2,0xf8d7,2,0xf8d8,0x8004,0,2,0xf984,2,0xf985,0x8004,0, +2,0xf98e,2,0xf98f,0x8004,0,2,0xf9a7,2,0xf9a8,0x8004,0,2,0xf9ae,2,0xf9af, +0x8004,0,2,0xf9af,2,0xf9b0,0x8004,0,2,0xf9b2,2,0xf9b3,0x8004,0,2,0xf9bf, +2,0xf9c0,0x8004,0,2,0xf9c2,2,0xf9c3,0x8004,0,2,0xf9c8,2,0xf9c9,0x8004,0, +2,0xf9cd,2,0xf9ce,0x8004,0,2,0xf9ce,2,0xf9cf,0x8004,0,2,0xf9ef,2,0xf9f0, +0x8004,0,2,0xf9f2,2,0xf9f3,0x8004,0,2,0xf9f8,2,0xf9f9,0x8004,0,2,0xf9f9, +2,0xf9fa,0x8004,0,2,0xf9fc,2,0xf9fd,0x8004,0,2,0xfa03,2,0xfa04,0x8004,0, +2,0xfa08,2,0xfa09,0x8004,0,2,0xfa0d,2,0xfa0e,0x8004,0,2,0xfa0e,2,0xfa0f, +0x8004,0,2,0xfa11,2,0xfa12,0x8004,0,2,0xfa16,2,0xfa17,0x8004,0,2,0xf801, +2,0xf802,0x8004,0,2,0xf800,2,0xf801,0x8004,0,2,0xf802,2,0xf803,0x8004,0, +2,0xf819,2,0xf81a,0x8004,0,2,0xf804,2,0xf805,0x8006,2,0xfa30,0xfa31,2,0xf805, +2,0xf806,0x8004,0,2,0xf806,2,0xf807,0x8004,0,2,0xf807,2,0xf808,0x8004,0, +2,0xf808,2,0xf809,0x8004,0,2,0xf809,2,0xf80a,0x8004,0,2,0xf80b,2,0xf80c, +0x8006,2,0xfa31,0xfa32,2,0xf80a,2,0xf80b,0x8006,2,0xfa32,0xfa33,2,0xf80e,2,0xf80f, +0x8004,0,2,0xf80f,2,0xf810,0x8004,0,2,0xf810,2,0xf811,0x8004,0,2,0xf814, +2,0xf815,0x8004,0,2,0xf811,2,0xf812,0x8004,0,2,0xf815,2,0xf816,0x8004,0, +2,0xf8d2,2,0xf8d3,0x8004,0,2,0xf8d3,2,0xf8d4,0x8004,0,2,0xf817,2,0xf818, +0x8004,0,2,0xf818,2,0xf819,0x8004,0,2,0xf81a,2,0xf81b,0x8006,2,0xfa71,0xfa72, +2,0xf81b,2,0xf81c,0x8004,0,2,0xf81d,2,0xf81e,0x8004,0,2,0xf81e,2,0xf81f, +0x8006,2,0xfa00,0xfa01,2,0xf850,2,0xf851,0x8004,0,2,0xf820,2,0xf821,0x8004,0, +2,0xf821,2,0xf822,0x8004,0,2,0xf822,2,0xf823,0x8004,0,2,0xf823,2,0xf824, +0x8004,0,2,0xf992,2,0xf993,0x8006,2,0xfa76,0xfa77,2,0xf825,2,0xf826,0x8006,2, +0xfa33,0xfa34,2,0xf826,2,0xf827,0x8006,2,0xfa34,0xfa35,2,0xf827,2,0xf828,0x8006,2, +0xfa77,0xfa78,2,0xf828,2,0xf829,0x8004,0,2,0xf829,2,0xf82a,0x8004,0,2,0xf82a, +2,0xf82b,0x8006,2,0xf963,0xf964,2,0xf82b,2,0xf82c,0x8004,0,2,0xf82c,2,0xf82d, +0x8006,2,0xfa35,0xfa36,2,0xf82d,2,0xf82e,0x8004,0,2,0xf82e,2,0xf82f,0x8004,0, +2,0xf82f,2,0xf830,0x8004,0,2,0xf830,2,0xf831,0x8004,0,2,0xf831,2,0xf834, +0x8004,0,2,0xf836,2,0xf837,0x8004,0,2,0xf837,2,0xf838,0x8004,0,2,0xf839, +2,0xf83a,0x8004,0,2,0xf83a,2,0xf83b,0x8004,0,2,0xf83b,2,0xf83c,0x8004,0, +2,0xf83d,2,0xf83e,0x8004,0,2,0xf83e,2,0xf83f,0x8004,0,2,0xf83f,2,0xf840, +0x8004,0,2,0xf83c,2,0xf83d,0x8004,0,2,0xf840,2,0xf841,0x8004,0,2,0xf841, +2,0xf842,0x8004,0,2,0xf842,2,0xf843,0x8004,0,2,0xf843,2,0xf844,0x8004,0, +2,0xf844,2,0xf845,0x8004,0,2,0xf845,2,0xf847,0x8006,2,0xfa7a,0xfa7b,2,0xf847, +2,0xf848,4,0xfa36,0xfa37,0xfa78,0xfa79,0x8004,0,2,0xf848,2,0xf849,0x8004,0,2, +0xf849,2,0xf84a,0x8004,0,2,0xf84a,2,0xf84b,0x8006,2,0xfa37,0xfa38,2,0xf84c,2, +0xf84d,0x8004,0,2,0xf84e,2,0xf84f,0x8004,0,2,0xf84f,2,0xf850,0x8004,0,2, +0xf84b,2,0xf84c,0x8004,0,2,0xf84d,2,0xf84e,0x8004,0,2,0xf855,2,0xf856,0x8004, +0,2,0xf852,2,0xf853,0x8004,0,2,0xf853,2,0xf854,0x8004,0,2,0xf854,2, +0xf855,0x8004,0,2,0xf857,2,0xf858,0x8004,0,2,0xf856,2,0xf857,4,0xfa10,0xfa11, +0xfa7c,0xfa7d,0x8004,0,2,0xf858,2,0xf859,0x8004,0,2,0xf851,2,0xf852,0x8004,0, +2,0xf85a,2,0xf85b,0x8004,0,2,0xf85b,2,0xf85c,0x8004,0,2,0xf85c,2,0xf85d, +0x8004,0,2,0xf85d,2,0xf85e,0x8004,0,2,0xf85e,2,0xf85f,0x8004,0,2,0xf85f, +2,0xf860,0x8004,0,2,0xf865,2,0xf866,0x8004,0,2,0xf862,2,0xf863,0x8004,0, +2,0xf863,2,0xf864,0x8004,0,2,0xf864,2,0xf865,0x8004,0,2,0xf866,2,0xf867, +0x8004,0,2,0xf986,2,0xf987,0x8004,0,2,0xf869,2,0xf86a,0x8004,0,2,0xf86a, +2,0xf86c,0x8004,0,2,0xf86d,2,0xf86e,0x8004,0,2,0xf86e,2,0xf86f,0x8008,4, +0xf95f,0xf960,0xf9aa,0xf9ab,2,0xf86f,2,0xf870,0x8004,0,2,0xf870,2,0xf871,0x8004,0, +2,0xf872,2,0xf873,0x8004,0,2,0xf873,2,0xf874,0x8004,0,2,0xf875,2,0xf876, +0x8004,0,2,0xf877,2,0xf878,0x8006,2,0xfa3c,0xfa3d,2,0xf878,2,0xf879,0x8004,0, +2,0xf87a,2,0xf87b,0x8004,0,2,0xf879,2,0xf87a,0x8004,0,2,0xf87c,2,0xf87d, +0x8004,0,2,0xf87f,2,0xf880,0x8004,0,2,0xf87e,2,0xf87f,0x8004,0,2,0xf880, +2,0xf881,0x8004,0,2,0xf9f4,2,0xf9f5,0x8004,0,2,0xf881,2,0xf882,0x8004,0, +2,0xf882,2,0xf883,0x8004,0,2,0xf884,2,0xf885,0x8004,0,2,0xf885,2,0xf886, +0x8004,0,2,0xf886,2,0xf887,0x8004,0,2,0xf887,2,0xf888,0x8004,0,2,0xf88b, +2,0xf88c,0x8004,0,2,0xf88c,2,0xf88d,0x8004,0,2,0xf88d,2,0xf88e,0x8006,2, +0xf928,0xf929,2,0xf88e,2,0xf88f,0x8004,0,2,0xf890,2,0xf891,0x8004,0,2,0xf894, +2,0xf896,0x8004,0,2,0xf874,2,0xf875,0x8004,0,2,0xf899,2,0xf89a,0x8004,0, +2,0xf89a,2,0xf89b,0x8004,0,2,0xf89c,2,0xf89d,0x8004,0,2,0xf89d,2,0xf89e, +0x8004,0,2,0xf89e,2,0xf89f,0x8004,0,2,0xf89f,2,0xf8a0,0x8004,0,2,0xf8a0, +2,0xf8a1,0x8006,2,0xfa3d,0xfa3e,2,0xf8a3,2,0xf8a4,0x8004,0,2,0xf8a5,2,0xf8a6, +0x8004,0,2,0xf8a6,2,0xf8a7,0x8008,0,2,0xf8a7,2,0xf8a8,2,0xf8a9,2,0xf8aa, +0x8006,2,0xfa87,0xfa88,2,0xf8a8,2,0xf8a9,0x8004,0,2,0xf8aa,2,0xf8ab,0x8008,4, +0xfa3f,0xfa40,0xfa89,0xfa8a,2,0xf8ab,2,0xf8ac,0x8004,0,2,0xf8ad,2,0xf8ae,0x8004,0, +2,0xf8ae,2,0xf8af,0x8004,0,2,0xf8ac,2,0xf8ad,0x8004,0,2,0xf8af,2,0xf8b0, +0x8008,4,0xfa40,0xfa41,0xfa8b,0xfa8c,2,0xf8b0,2,0xf8b1,0x8006,2,0xf90d,0xf90e,2,0xf8b1, +2,0xf8b2,0x8004,0,2,0xf8b2,2,0xf8b3,0x8004,0,2,0xf8b3,2,0xf8b4,0x8004,0, +2,0xf8b4,2,0xf8b5,0x8004,0,2,0xf8b5,2,0xf8b6,0x8004,0,2,0xf8b6,2,0xf8b7, +0x8004,0,2,0xf8ba,2,0xf8bb,0x8004,0,2,0xf8b9,2,0xf8ba,0x8004,0,2,0xf8b7, +2,0xf8b8,0x8004,0,2,0xf8bb,2,0xf8bc,0x8004,0,2,0xf8bc,2,0xf8bd,0x8004,0, +2,0xf8c1,2,0xf8c2,0x8004,0,2,0xf8c0,2,0xf8c1,0x8004,0,2,0xf8bd,2,0xf8be, +0x8004,0,2,0xf8bf,2,0xf8c0,0x8004,0,2,0xf8c3,2,0xf8c4,0x8004,0,2,0xf8c6, +2,0xf8c7,0x8004,0,2,0xf8c4,2,0xf8c5,0x8004,0,2,0xf8c5,2,0xf8c6,0x8006,2, +0xfa41,0xfa42,2,0xf8c8,2,0xf8c9,0x8004,0,2,0xf8c9,2,0xf8ca,0x8004,0,2,0xf8cb, +2,0xf8cc,0x8004,0,2,0xf8cd,2,0xf8ce,4,0xfa12,0xfa13,0xfa91,0xfa92,0x8006,2,0xfa43, +0xfa44,2,0xf8cf,2,0xf8d0,0x8004,0,2,0xf8d5,2,0xf8d6,0x8004,0,2,0xf8cc,2, +0xf8cd,0x8004,0,2,0xf8d4,2,0xf8d5,0x8008,4,0xf929,0xf92a,0xfa92,0xfa93,2,0xf8d8,2, +0xf8d9,0x8006,2,0xfa93,0xfa94,2,0xf8d9,2,0xf8da,0x8004,0,2,0xf8da,2,0xf8db,0x8004, +0,2,0xf8dc,2,0xf8dd,0x8004,0,2,0xf8db,2,0xf8dc,0x8004,0,2,0xf8e0,2, +0xf8e1,0x8004,0,2,0xf8df,2,0xf8e0,0x8004,0,2,0xf8e5,2,0xf8e6,0x8004,0,2, +0xf8e1,2,0xf8e2,0x8006,2,0xfa44,0xfa45,2,0xf8e2,2,0xf8e3,0x8004,0,2,0xf8e4,2, +0xf8e5,0x8004,0,2,0xf8e6,2,0xf8e7,0x8004,0,2,0xf8e8,2,0xf8e9,0x8004,0,2, +0xf8e9,2,0xf8ea,0x8004,0,2,0xf8ea,2,0xf8eb,6,0xf914,0xf915,0xf95c,0xf95d,0xf9bf,0xf9c0, +0x8004,0,2,0xf8eb,2,0xf8ec,0x8004,0,2,0xf8ed,2,0xf8ee,0x8004,0,2,0xf8ef, +2,0xf8f0,0x8004,0,2,0xf8f1,2,0xf8f2,0x8004,0,2,0xf8f3,2,0xf8f4,0x8004,0, +2,0xf8f4,2,0xf8f5,0x8008,4,0xf970,0xf971,0xfa96,0xfa97,2,0xf8f5,2,0xf8f6,0x8004,0, +2,0xf8f6,2,0xf8f7,0x8004,0,2,0xf8fa,2,0xf8fb,0x8004,0,2,0xf8fe,2,0xf8ff, +0x8004,0,2,0xf8fc,2,0xf8fd,0x8004,0,2,0xf8fd,2,0xf8fe,0x8004,0,2,0xf8ff, +2,0xf900,0x8004,0,2,0xf907,2,0xf908,0x8004,0,2,0xf900,2,0xf901,0x8008,4, +0xf9ca,0xf9cb,0xfa97,0xfa98,2,0xf902,2,0xf903,0x8004,0,2,0xf903,2,0xf904,0x8006,2, +0xfa45,0xfa46,2,0xf901,2,0xf902,0x8004,0,2,0xf904,2,0xf905,0x8004,0,2,0xf905, +2,0xf906,0x8004,0,2,0xf90e,2,0xf90f,0x8004,0,2,0xf908,2,0xf909,0x8004,0, +2,0xf909,2,0xf90a,0x8004,0,2,0xf90c,2,0xf90d,0x8006,2,0xfa99,0xfa9a,2,0xf90b, +2,0xf90c,4,0xfa47,0xfa48,0xfa9a,0xfa9b,0x8004,0,2,0xf90f,2,0xf910,0x8004,0,2, +0xf912,2,0xf913,0x8004,0,2,0xf915,2,0xf916,0x8006,2,0xfa9b,0xfa9c,2,0xf914,2, +0xf915,0x8004,0,2,0xf913,2,0xf914,0x8004,0,2,0xf917,2,0xf918,0x8004,0,2, +0xf835,2,0xf836,0x8004,0,2,0xf919,2,0xf91a,0x8004,0,2,0xf918,2,0xf919,0x8004, +0,2,0xf91a,2,0xf91b,0x8004,0,2,0xf91c,2,0xf91d,4,0xfa48,0xfa49,0xfa9c,0xfa9d, +0x8004,0,2,0xf91e,2,0xf91f,0x8004,0,2,0xf920,2,0xf921,0x8006,2,0xfa9e,0xfa9f, +2,0xf921,2,0xf922,0x8004,0,2,0xf922,2,0xf923,0x8004,0,2,0xf924,2,0xf925, +0x8004,0,2,0xf925,2,0xf926,4,0xfa16,0xfa17,0xfaa0,0xfaa1,0x8004,0,2,0xf928,2, +0xf929,4,0xf961,0xf962,0xf9db,0xf9dc,0x8004,0,2,0xf929,2,0xf92a,0x8004,0,2,0xf92b, +2,0xf92c,0x8004,0,2,0xf92e,2,0xf92f,0x8004,0,2,0xf92f,2,0xf930,0x8006,2, +0xfaa1,0xfaa2,2,0xf930,2,0xf931,0x8004,0,2,0xf931,2,0xf932,0x8004,0,2,0xf932, +2,0xf933,0x8004,0,2,0xf934,2,0xf935,0x8004,0,2,0xf936,2,0xf937,0x8006,2, +0xf962,0xf963,2,0xf938,2,0xf939,0x8004,0,2,0xf93a,2,0xf93b,4,0xfa17,0xfa18,0xfaa6, +0xfaa7,0x8006,2,0xfaa8,0xfaa9,2,0xf940,2,0xf941,0x8004,0,2,0xf945,2,0xf946,0x8004, +0,2,0xf946,2,0xf948,0x8006,2,0xfaa9,0xfaaa,2,0xf948,2,0xf949,0x8004,0,2, +0xf94a,2,0xf94b,0x8004,0,2,0xf94e,2,0xf94f,0x8006,2,0xf93b,0xf93c,2,0xf94f,2, +0xf950,0x8006,2,0xfaab,0xfaac,2,0xf950,2,0xf951,0x8006,2,0xfa50,0xfa51,2,0xf953,2, +0xf954,0x8006,2,0xfa1b,0xfa1c,2,0xf956,2,0xf957,0x8004,0,2,0xf957,2,0xf958,0x8006, +2,0xfa54,0xfa55,2,0xf959,2,0xf95a,0x8004,0,2,0xf95a,2,0xf95b,0x8004,0,2, +0xf95b,2,0xf95c,0x8004,0,2,0xf95f,2,0xf960,4,0xfa56,0xfa57,0xfaad,0xfaae,0x8004,0, +2,0xf962,2,0xf963,0x8004,0,2,0xf963,2,0xf964,0x8004,0,2,0xf966,2,0xf967, +0x8004,0,2,0xf969,2,0xf96a,0x8004,0,2,0xf968,2,0xf969,0x8004,0,2,0xf96a, +2,0xf96b,0x8004,0,2,0xf96c,2,0xf96d,0x8004,0,2,0xf96e,2,0xf96f,6,0xf996, +0xf997,0xfa57,0xfa58,0xfab0,0xfab1,0x8004,0,2,0xf96f,2,0xf970,0x8004,0,2,0xf970,2, +0xf971,0x8004,0,2,0xf976,2,0xf977,0x8004,0,2,0xf978,2,0xf979,0x8004,0,2, +0xf979,2,0xf97a,0x8008,4,0xfa5b,0xfa5c,0xfab2,0xfab3,2,0xf97a,2,0xf97b,0x8004,0,2, +0xf97d,2,0xf97e,0x8004,0,2,0xf97f,2,0xf980,0x8004,0,2,0xf8d6,2,0xf8d7,0x8004, +0,2,0xf982,2,0xf983,0x8004,0,2,0xf983,2,0xf984,0x8004,0,2,0xf985,2, +0xf986,0x8008,0,2,0xf893,2,0xf894,2,0xf98b,2,0xf98c,0x8004,0,2,0xf98c,2, +0xf98d,2,0xfa5d,0xfa5f,0x8004,0,2,0xf990,2,0xf991,0x8004,0,2,0xf98f,2,0xf990, +0x8004,0,2,0xf991,2,0xf992,0x8004,0,2,0xf993,2,0xf994,0x8004,0,2,0xf994, +2,0xf995,0x8004,0,2,0xf995,2,0xf996,0x8006,2,0xf974,0xf975,2,0xf998,2,0xf999, +0x8004,0,2,0xf996,2,0xf997,0x8004,0,2,0xf999,2,0xf99a,0x8004,0,2,0xf99c, +2,0xf99d,0x8004,0,2,0xf9a0,2,0xf9a1,0x8004,0,2,0xf99a,2,0xf99b,0x8004,0, +2,0xf99b,2,0xf99c,0x8004,0,2,0xf99d,2,0xf99e,0x8004,0,2,0xf9a1,2,0xf9a2, +0x8004,0,2,0xf9a2,2,0xf9a3,0x8004,0,2,0xf9a3,2,0xf9a4,0x8004,0,2,0xf99e, +2,0xf99f,0x8006,2,0xfa5f,0xfa60,2,0xf99f,2,0xf9a0,0x8004,0,2,0xf9a8,2,0xf9a9, +0x8004,0,2,0xf9a9,2,0xf9aa,0x8004,0,2,0xf9aa,2,0xf9ab,0x8004,0,2,0xf9ac, +2,0xf9ad,0x8004,0,2,0xf9b3,2,0xf9b4,0x8006,2,0xf936,0xf937,2,0xf9b4,2,0xf9b5, +0x8004,0,2,0xf9b5,2,0xf9b6,0x8004,0,2,0xf9b6,2,0xf9b7,0x8004,0,2,0xf9b8, +2,0xf9b9,0x8004,0,2,0xf9b7,2,0xf9b8,0x8004,0,2,0xf9ba,2,0xf9bb,0x8004,0, +2,0xf9b9,2,0xf9ba,0x8004,0,2,0xf9bc,2,0xf9bd,0x8004,0,2,0xf9bd,2,0xf9be, +0x8006,2,0xfab5,0xfab6,2,0xf9bb,2,0xf9bc,0x8004,0,2,0xf9be,2,0xf9bf,0x8004,0, +2,0xf9c0,2,0xf9c1,0x8004,0,2,0xf9c1,2,0xf9c2,0x8004,0,2,0xf9c3,2,0xf9c4, +0x8004,0,2,0xf9c4,2,0xf9c5,0x8004,0,2,0xf9c6,2,0xf9c7,0x8004,0,2,0xf9c7, +2,0xf9c8,0x8004,0,2,0xf9c9,2,0xf9ca,4,0xfa61,0xfa62,0xfab8,0xfab9,0x8004,0,2, +0xf9cf,2,0xf9d0,4,0xf96f,0xf970,0xf9a1,0xf9a2,0x8006,2,0xfabe,0xfabf,2,0xf9d0,2,0xf9d1, +4,0xfa22,0xfa23,0xfaba,0xfabb,4,0xf95d,0xf95e,0xfabd,0xfabe,4,0xfa62,0xfa63,0xfabc,0xfabd,4, +0xfa63,0xfa64,0xfabf,0xfac0,0x8006,2,0xfac0,0xfac1,2,0xf9d1,2,0xf9d2,0x8004,0,2,0xf9d2, +2,0xf9d3,0x8004,0,2,0xf9d4,2,0xf9d5,0x8004,0,2,0xf9d5,2,0xf9d6,4,0xfa65, +0xfa66,0xfac1,0xfac2,0x8004,0,2,0xf9d6,2,0xf9d7,0x8004,0,2,0xf9d7,2,0xf9d8,0x8004, +0,2,0xf9db,2,0xf9dc,0x8004,0,2,0xf9da,2,0xf9db,0x8004,0,2,0xf9dc,2, +0xf9dd,0x8004,0,2,0xf9de,2,0xf9df,0x8006,2,0xfac2,0xfac3,2,0xf9df,2,0xf9e0,0x8004, +0,2,0xf98d,2,0xf98e,4,0xfa25,0xfa26,0xfa67,0xfa68,0x8004,0,2,0xf9e2,2,0xf9e3, +0x8004,0,2,0xf9e3,2,0xf9e4,0x8004,0,2,0xf9e4,2,0xf9e5,0x8004,0,2,0xf9e6, +2,0xf9e7,0x8004,0,2,0xf9e7,2,0xf9e8,0x8004,0,2,0xf9ea,2,0xf9eb,0x8004,0, +2,0xf9e8,2,0xf9e9,0x8004,0,2,0xf9e9,2,0xf9ea,0x8004,0,2,0xf9eb,2,0xf9ec, +0x8004,0,2,0xf9ec,2,0xf9ed,0x8004,0,2,0xf9ee,2,0xf9ef,0x8004,0,2,0xf9f0, +2,0xf9f1,0x8004,0,2,0xf9f3,2,0xf9f4,4,0xfa68,0xfa69,0xfac7,0xfac8,0x8004,0,2, +0xf9f5,2,0xf9f6,4,0xfa1c,0xfa1d,0xfac8,0xfac9,0x8004,0,2,0xf9fa,2,0xf9fb,4,0xfa69, +0xfa6a,0xfaca,0xfacb,0x8006,2,0xfacb,0xfacc,2,0xf9fe,2,0xfa00,0x8004,0,2,0xfa00,2, +0xfa01,4,0xfa6a,0xfa6b,0xfacc,0xfacd,0x8004,0,2,0xfa02,2,0xfa03,0x8004,0,2,0xfa04, +2,0xfa05,0x8004,0,2,0xfa05,2,0xfa06,0x8004,0,2,0xfa06,2,0xfa07,0x8004,0, +2,0xfa07,2,0xfa08,0x8006,2,0xfacd,0xface,2,0xfa0a,2,0xfa0b,0x8004,0,2,0xfa0b, +2,0xfa0c,0x8004,0,2,0xfa0c,2,0xfa0d,0x8004,0,2,0xfa0f,2,0xfa10,0x8004,0, +2,0xfa15,2,0xfa16,0x8004,0,2,0xfa17,2,0xfa18,0x8004,0,2,0xfa18,2,0xfa19, +0x8004,0,2,0xfa19,2,0xfa1a,0x8004,0,2,0xfa1a,2,0xfa1b,0x8004,0,2,0xfa1b, +2,0xfa1c,0x8004,0,2,0xfa1c,2,0xfa1d,4,0xf907,0xf909,0xface,0xfacf,0x8004,0,1, +0xd15f,1,0xd165,0x800c,0,1,0xd1bb,1,0xd1bc,1,0xd1bd,1,0xd1be,1,0xd1bf,1, +0xd1c0,0x800c,0,1,0xd1bc,1,0xd1bd,1,0xd1be,1,0xd1bf,1,0xd1c0,1,0xd1c1,0x8004, +0,2,0xf891,2,0xf893,0x8004,0,2,0xf95d,2,0xf95f,0x3b,0x37e,0x3c,0x226e,0x3d, +0x2260,0x3e,0x226f,0x41,0x4020,0x42,0x4053,0x43,0x405a,0x44,0x4067,0x45,0x4074,0x46,0x1e1e,0x47, +0x40a1,0x48,0x40b0,0x49,0x40bf,0x4a,0x134,0x4b,0x40da,0x4c,0x40e7,0x4d,0x40f6,0x4e,0x40fd,0x4f, +0x4110,0x50,0x414d,0x52,0x4152,0x53,0x4165,0x54,0x417a,0x55,0x4189,0x56,0x41c0,0x57,0x41c5,0x58, +0x41d2,0x59,0x41d7,0x5a,0x41ea,0x60,0x1fef,0x61,0x41f7,0x62,0x4228,0x63,0x422f,0x64,0x423c,0x65, +0x4249,0x66,0x1e1f,0x67,0x4276,0x68,0x4285,0x69,0x4296,0x6a,0x42af,0x6b,0x42b4,0x6c,0x42bf,0x6d, +0x42ce,0x6e,0x42d5,0x6f,0x42e8,0x70,0x4325,0x72,0x432a,0x73,0x433d,0x74,0x4352,0x75,0x4363,0x76, +0x439a,0x77,0x439f,0x78,0x43ae,0x79,0x43b3,0x7a,0x43c8,0xa8,0x43d5,0xb4,0x1ffd,0xb7,0x387,0xc6, +0x43dc,0xd8,0x1fe,0xe6,0x43e1,0xf8,0x1ff,0x17f,0x1e9b,0x1b7,0x1ee,0x292,0x1ef,0x2b9,0x374,0x300, +0x340,0x301,0x341,0x308,0x344,0x313,0x343,0x391,0x43e6,0x395,0x43ef,0x397,0x43f6,0x399,0x43ff,0x39f, +0x4408,0x3a1,0x1fec,0x3a5,0x440f,0x3a9,0x441e,0x3b1,0x4429,0x3b5,0x4436,0x3b7,0x443d,0x3b9,0x444a,0x3bf, +0x445b,0x3c1,0x4462,0x3c5,0x4465,0x3c9,0x4474,0x3d2,0x4481,0x406,0x407,0x410,0x4484,0x413,0x403,0x415, +0x4489,0x416,0x448e,0x417,0x4de,0x418,0x4493,0x41a,0x40c,0x41e,0x4e6,0x423,0x449c,0x427,0x4f4,0x42b, +0x4f8,0x42d,0x4ec,0x430,0x44a5,0x433,0x453,0x435,0x44aa,0x436,0x44af,0x437,0x4df,0x438,0x44b4,0x43a, +0x45c,0x43e,0x4e7,0x443,0x44bd,0x447,0x4f5,0x44b,0x4f9,0x44d,0x4ed,0x456,0x457,0x474,0x476,0x475, +0x477,0x4d8,0x4da,0x4d9,0x4db,0x4e8,0x4ea,0x4e9,0x4eb,0x5d0,0x44c6,0x5d1,0x44c9,0x5d2,0xfb32,0x5d3, +0xfb33,0x5d4,0xfb34,0x5d5,0x44ce,0x5d6,0xfb36,0x5d8,0xfb38,0x5d9,0x44d3,0x5da,0xfb3a,0x5db,0x44d8,0x5dc, +0xfb3c,0x5de,0xfb3e,0x5e0,0xfb40,0x5e1,0xfb41,0x5e3,0xfb43,0x5e4,0x44dd,0x5e6,0xfb46,0x5e7,0xfb47,0x5e8, +0xfb48,0x5e9,0x44e2,0x5ea,0xfb4a,0x5f2,0xfb1f,0x627,0x44e7,0x648,0x624,0x64a,0x626,0x6c1,0x6c2,0x6d2, +0x6d3,0x6d5,0x6c0,0x915,0x958,0x916,0x959,0x917,0x95a,0x91c,0x95b,0x921,0x95c,0x922,0x95d,0x928, +0x929,0x92b,0x95e,0x92f,0x95f,0x930,0x931,0x933,0x934,0x9a1,0x9dc,0x9a2,0x9dd,0x9af,0x9df,0x9c7, +0x44ec,0xa16,0xa59,0xa17,0xa5a,0xa1c,0xa5b,0xa2b,0xa5e,0xa32,0xa33,0xa38,0xa36,0xb21,0xb5c,0xb22, +0xb5d,0xb47,0x44ef,0xb92,0xb94,0xbc6,0x44f4,0xbc7,0xbcb,0xc46,0xc48,0xcbf,0xcc0,0xcc6,0x44f9,0xd46, +0x44fe,0xd47,0xd4b,0xdd9,0x4503,0xf40,0xf69,0xf42,0xf43,0xf4c,0xf4d,0xf51,0xf52,0xf56,0xf57,0xf5b, +0xf5c,0xf71,0x4508,0xf90,0xfb9,0xf92,0xf93,0xf9c,0xf9d,0xfa1,0xfa2,0xfa6,0xfa7,0xfab,0xfac,0xfb2, +0xf76,0xfb3,0xf78,0x1025,0x1026,0x1100,0x450f,0x1101,0x4512,0x1102,0x4515,0x1103,0x4518,0x1104,0x451b,0x1105, +0x451e,0x1106,0x4521,0x1107,0x4524,0x1108,0x4527,0x1109,0x452a,0x110a,0x452d,0x110b,0x4530,0x110c,0x4533,0x110d, +0x4536,0x110e,0x4539,0x110f,0x453c,0x1110,0x453f,0x1111,0x4542,0x1112,0x4545,0x1b05,0x1b06,0x1b07,0x1b08,0x1b09, +0x1b0a,0x1b0b,0x1b0c,0x1b0d,0x1b0e,0x1b11,0x1b12,0x1b3a,0x1b3b,0x1b3c,0x1b3d,0x1b3e,0x1b40,0x1b3f,0x1b41,0x1b42, +0x1b43,0x1fbf,0x4548,0x1ffe,0x454b,0x2002,0x2000,0x2003,0x2001,0x2190,0x219a,0x2192,0x219b,0x2194,0x21ae,0x21d0, +0x21cd,0x21d2,0x21cf,0x21d4,0x21ce,0x2203,0x2204,0x2208,0x2209,0x220b,0x220c,0x2223,0x2224,0x2225,0x2226,0x223c, +0x2241,0x2243,0x2244,0x2245,0x2247,0x2248,0x2249,0x224d,0x226d,0x2261,0x2262,0x2264,0x2270,0x2265,0x2271,0x2272, +0x2274,0x2273,0x2275,0x2276,0x2278,0x2277,0x2279,0x227a,0x2280,0x227b,0x2281,0x227c,0x22e0,0x227d,0x22e1,0x2282, +0x2284,0x2283,0x2285,0x2286,0x2288,0x2287,0x2289,0x2291,0x22e2,0x2292,0x22e3,0x22a2,0x22ac,0x22a8,0x22ad,0x22a9, +0x22ae,0x22ab,0x22af,0x22b2,0x22ea,0x22b3,0x22eb,0x22b4,0x22ec,0x22b5,0x22ed,0x2add,0x2adc,0x3008,0x2329,0x3009, +0x232a,0x3046,0x3094,0x304b,0x304c,0x304d,0x304e,0x304f,0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057, +0x3058,0x3059,0x305a,0x305b,0x305c,0x305d,0x305e,0x305f,0x3060,0x3061,0x3062,0x3064,0x3065,0x3066,0x3067,0x3068, +0x3069,0x306f,0x454e,0x3072,0x4551,0x3075,0x4554,0x3078,0x4557,0x307b,0x455a,0x309d,0x309e,0x30a6,0x30f4,0x30ab, +0x30ac,0x30ad,0x30ae,0x30af,0x30b0,0x30b1,0x30b2,0x30b3,0x30b4,0x30b5,0x30b6,0x30b7,0x30b8,0x30b9,0x30ba,0x30bb, +0x30bc,0x30bd,0x30be,0x30bf,0x30c0,0x30c1,0x30c2,0x30c4,0x30c5,0x30c6,0x30c7,0x30c8,0x30c9,0x30cf,0x455d,0x30d2, +0x4560,0x30d5,0x4563,0x30d8,0x4566,0x30db,0x4569,0x30ef,0x30f7,0x30f0,0x30f8,0x30f1,0x30f9,0x30f2,0x30fa,0x30fd, +0x30fe,0x349e,0x456c,0x34b9,0x4572,0x34bb,0x4578,0x34df,0x457e,0x3515,0x4584,0x36ee,0x458a,0x36fc,0x4590,0x3781, +0x4596,0x382f,0x459c,0x3862,0x45a2,0x387c,0x45a8,0x38c7,0x45ae,0x38e3,0x45b4,0x391c,0x45ba,0x393a,0x45c0,0x3a2e, +0x45c6,0x3a6c,0x45cc,0x3ae4,0x45d2,0x3b08,0x45d8,0x3b19,0x45de,0x3b49,0x45e4,0x3b9d,0x45ea,0x3c18,0x45f2,0x3c4e, +0x45f8,0x3d33,0x45fe,0x3d96,0x4604,0x3eac,0x460a,0x3eb8,0x4610,0x3f1b,0x4616,0x3ffc,0x461c,0x4008,0x4622,0x4018, +0xfad3,0x4039,0x4628,0x4046,0x4630,0x4096,0x4636,0x40e3,0x463c,0x412f,0x4642,0x4202,0x4648,0x4227,0x464e,0x42a0, +0x4654,0x4301,0x465a,0x4334,0x4660,0x4359,0x4666,0x43d5,0x466c,0x43d9,0x4672,0x440b,0x4678,0x446b,0x467e,0x452b, +0x4684,0x455d,0x468a,0x4561,0x4690,0x456b,0x4696,0x45d7,0x469c,0x45f9,0x46a2,0x4635,0x46a8,0x46be,0x46ae,0x46c7, +0x46b4,0x4995,0x46ba,0x49e6,0x46c0,0x4a6e,0x46c6,0x4a76,0x46cc,0x4ab2,0x46d2,0x4b33,0x46d8,0x4bce,0x46de,0x4cce, +0x46e4,0x4ced,0x46ea,0x4cf8,0x46f0,0x4d56,0x46f6,0x4e0d,0xf967,0x4e26,0xfa70,0x4e32,0xf905,0x4e38,0x46fc,0x4e39, +0xf95e,0x4e3d,0x4702,0x4e41,0x4708,0x4e82,0xf91b,0x4e86,0xf9ba,0x4eae,0xf977,0x4ec0,0xf9fd,0x4ecc,0x470e,0x4ee4, +0xf9a8,0x4f60,0x4714,0x4f80,0xfa73,0x4f86,0xf92d,0x4f8b,0xf9b5,0x4fae,0x471a,0x4fbb,0x4722,0x4fbf,0xf965,0x5002, +0x4728,0x502b,0xf9d4,0x507a,0x472e,0x5099,0x4734,0x50cf,0x473a,0x50da,0xf9bb,0x50e7,0x4740,0x5140,0xfa0c,0x5145, +0xfa74,0x514d,0x4748,0x5154,0x4750,0x5164,0x4756,0x5167,0x475c,0x5168,0xfa72,0x5169,0xf978,0x516d,0xf9d1,0x5177, +0x4762,0x5180,0xfa75,0x518d,0x4768,0x5192,0x476e,0x5195,0x4774,0x5197,0x477a,0x51a4,0x4780,0x51ac,0x4786,0x51b5, +0x478c,0x51b7,0xf92e,0x51c9,0xf979,0x51cc,0xf955,0x51dc,0xf954,0x51de,0xfa15,0x51f5,0x4794,0x5203,0x479a,0x5207, +0x47a0,0x5217,0xf99c,0x5229,0xf9dd,0x523a,0xf9ff,0x523b,0x47a8,0x5246,0x47ae,0x5272,0x47b4,0x5277,0x47ba,0x5289, +0xf9c7,0x529b,0xf98a,0x52a3,0xf99d,0x52b3,0x47c0,0x52c7,0x47c6,0x52c9,0x47ce,0x52d2,0xf952,0x52de,0xf92f,0x52e4, +0x47d6,0x52f5,0xf97f,0x52fa,0x47de,0x5305,0x47e6,0x5306,0x47ec,0x5317,0x47f2,0x533f,0xf9eb,0x5349,0x47fa,0x5351, +0x4800,0x535a,0x4808,0x5373,0x480e,0x5375,0xf91c,0x537d,0x4814,0x537f,0x481a,0x53c3,0xf96b,0x53ca,0x4820,0x53df, +0x4826,0x53e5,0xf906,0x53eb,0x482c,0x53f1,0x4832,0x5406,0x4838,0x540f,0xf9de,0x541d,0xf9ed,0x5438,0x483e,0x5442, +0xf980,0x5448,0x4844,0x5468,0x484a,0x549e,0x4850,0x54a2,0x4856,0x54bd,0xf99e,0x54f6,0x485c,0x5510,0x4862,0x5553, +0x4868,0x5555,0xfa79,0x5563,0x486e,0x5584,0x4874,0x5587,0xf90b,0x5599,0x487a,0x559d,0x4882,0x55ab,0x4887,0x55b3, +0x488d,0x55c0,0xfa0d,0x55c2,0x4893,0x55e2,0xfa7b,0x5606,0x4899,0x5651,0x48a1,0x5668,0xfa38,0x5674,0x48a7,0x56f9, +0xf9a9,0x5716,0x48ad,0x5717,0x48b3,0x578b,0x48b9,0x57ce,0x48bf,0x57f4,0x48c5,0x580d,0x48cb,0x5831,0x48d1,0x5832, +0x48d7,0x5840,0xfa39,0x585a,0x48dd,0x585e,0xf96c,0x58a8,0xfa3a,0x58ac,0x48e2,0x58b3,0xfa7d,0x58d8,0xf94a,0x58df, +0xf942,0x58ee,0x48e8,0x58f2,0x48ee,0x58f7,0x48f4,0x5906,0x48fa,0x591a,0x4900,0x5922,0x4906,0x5944,0xfa7e,0x5948, +0xf90c,0x5951,0xf909,0x5954,0xfa7f,0x5962,0x490c,0x5973,0xf981,0x59d8,0x4912,0x59ec,0x4918,0x5a1b,0x491e,0x5a27, +0x4924,0x5a62,0xfa80,0x5a66,0x492a,0x5ab5,0x4930,0x5b08,0x4936,0x5b28,0xfa81,0x5b3e,0x493c,0x5b85,0xfa04,0x5bc3, +0x4942,0x5bd8,0x4948,0x5be7,0x494e,0x5bee,0xf9bc,0x5bf3,0x4958,0x5bff,0x495e,0x5c06,0x4964,0x5c22,0x496a,0x5c3f, +0xf9bd,0x5c60,0x4970,0x5c62,0xf94b,0x5c64,0xfa3b,0x5c65,0xf9df,0x5c6e,0x4976,0x5c8d,0x497e,0x5cc0,0x4984,0x5d19, +0xf9d5,0x5d43,0x498a,0x5d50,0xf921,0x5d6b,0x4990,0x5d6e,0x4996,0x5d7c,0x499c,0x5db2,0x49a2,0x5dba,0xf9ab,0x5de1, +0x49a8,0x5de2,0x49ae,0x5dfd,0x49b4,0x5e28,0x49ba,0x5e3d,0x49c0,0x5e69,0x49c6,0x5e74,0xf98e,0x5ea6,0xfa01,0x5eb0, +0x49cc,0x5eb3,0x49d2,0x5eb6,0x49d8,0x5ec9,0xf9a2,0x5eca,0x49de,0x5ed2,0xfa82,0x5ed3,0xfa0b,0x5ed9,0xfa83,0x5eec, +0xf982,0x5efe,0x49e6,0x5f04,0xf943,0x5f22,0x49ec,0x5f53,0x49f2,0x5f62,0x49f8,0x5f69,0xfa84,0x5f6b,0x49fe,0x5f8b, +0xf9d8,0x5f9a,0x4a04,0x5fa9,0xf966,0x5fad,0xfa85,0x5fcd,0x4a0a,0x5fd7,0x4a10,0x5ff5,0xf9a3,0x5ff9,0x4a16,0x6012, +0xf960,0x601c,0xf9ac,0x6081,0x4a1c,0x6094,0x4a22,0x60c7,0x4a2a,0x60d8,0xfa86,0x60e1,0xf9b9,0x6108,0xfa88,0x6144, +0xf9d9,0x6148,0x4a30,0x614c,0x4a36,0x614e,0x4a40,0x6160,0xfa8a,0x6168,0xfa3e,0x617a,0x4a48,0x618e,0x4a4e,0x6190, +0xf98f,0x61a4,0x4a58,0x61af,0x4a5e,0x61b2,0x4a64,0x61de,0x4a6a,0x61f2,0x4a70,0x61f6,0x4a7a,0x6200,0xf990,0x6210, +0x4a82,0x621b,0x4a88,0x622e,0xf9d2,0x6234,0xfa8c,0x625d,0x4a8e,0x62b1,0x4a94,0x62c9,0xf925,0x62cf,0xf95b,0x62d3, +0xfa02,0x62d4,0x4a9a,0x62fc,0x4aa0,0x62fe,0xf973,0x633d,0x4aa6,0x6350,0x4aac,0x6368,0x4ab2,0x637b,0xf9a4,0x6383, +0x4ab8,0x63a0,0xf975,0x63a9,0x4abe,0x63c4,0xfa8d,0x63c5,0x4ac4,0x63e4,0x4aca,0x641c,0xfa8e,0x6422,0x4ad0,0x6452, +0xfa8f,0x6469,0x4ad6,0x6477,0x4adc,0x647e,0x4ae2,0x649a,0xf991,0x649d,0x4ae8,0x64c4,0xf930,0x654f,0x4aee,0x6556, +0xfa90,0x656c,0x4af6,0x6578,0xf969,0x6599,0xf9be,0x65c5,0xf983,0x65e2,0xfa42,0x65e3,0x4afc,0x6613,0xf9e0,0x6649, +0x4b02,0x6674,0x4b08,0x6688,0xf9c5,0x6691,0x4b0d,0x669c,0x4b15,0x66b4,0xfa06,0x66c6,0xf98b,0x66f4,0xf901,0x66f8, +0x4b1b,0x6700,0x4b21,0x6717,0x4b27,0x671b,0x4b31,0x6721,0x4b39,0x674e,0xf9e1,0x6753,0x4b3f,0x6756,0xfa94,0x675e, +0x4b45,0x677b,0xf9c8,0x6785,0x4b4b,0x6797,0xf9f4,0x67f3,0xf9c9,0x67fa,0x4b51,0x6817,0xf9da,0x681f,0x4b57,0x6852, +0x4b5d,0x6881,0xf97a,0x6885,0x4b63,0x688e,0x4b6b,0x68a8,0xf9e2,0x6914,0x4b71,0x6942,0x4b77,0x69a3,0x4b7d,0x69ea, +0x4b83,0x6a02,0x4b89,0x6a13,0xf94c,0x6aa8,0x4b90,0x6ad3,0xf931,0x6adb,0x4b96,0x6b04,0xf91d,0x6b21,0x4b9c,0x6b54, +0x4ba2,0x6b72,0x4ba8,0x6b77,0xf98c,0x6b79,0xfa95,0x6b9f,0x4bae,0x6bae,0xf9a5,0x6bba,0x4bb4,0x6bbb,0x4bbe,0x6c4e, +0x4bc4,0x6c67,0x4bca,0x6c88,0xf972,0x6cbf,0x4bd0,0x6ccc,0xf968,0x6ccd,0x4bd6,0x6ce5,0xf9e3,0x6d16,0x4bdc,0x6d1b, +0xf915,0x6d1e,0xfa05,0x6d34,0x4be2,0x6d3e,0x4be8,0x6d41,0x4bee,0x6d69,0x4bf8,0x6d6a,0xf92a,0x6d77,0x4bfe,0x6d78, +0x4c06,0x6d85,0x4c0c,0x6dcb,0xf9f5,0x6dda,0xf94d,0x6dea,0xf9d6,0x6df9,0x4c12,0x6e1a,0xfa46,0x6e2f,0x4c18,0x6e6e, +0x4c1e,0x6e9c,0xf9cb,0x6eba,0xf9ec,0x6ec7,0x4c24,0x6ecb,0x4c2a,0x6ed1,0xf904,0x6edb,0xfa98,0x6f0f,0xf94e,0x6f22, +0x4c32,0x6f23,0xf992,0x6f6e,0x4c37,0x6fc6,0x4c3d,0x6feb,0xf922,0x6ffe,0xf984,0x701b,0x4c43,0x701e,0x4c49,0x7039, +0x4c51,0x704a,0x4c57,0x7070,0x4c5d,0x7077,0x4c63,0x707d,0x4c69,0x7099,0xf9fb,0x70ad,0x4c6f,0x70c8,0xf99f,0x70d9, +0xf916,0x7145,0x4c75,0x7149,0xf993,0x716e,0x4c7b,0x719c,0x4c80,0x71ce,0xf9c0,0x71d0,0xf9ee,0x7210,0xf932,0x721b, +0xf91e,0x7228,0x4c86,0x722b,0xfa49,0x7235,0x4c8c,0x7250,0x4c94,0x7262,0xf946,0x7280,0x4c9a,0x7295,0x4ca0,0x72af, +0xfa9f,0x72c0,0xf9fa,0x72fc,0xf92b,0x732a,0x4ca6,0x7375,0xf9a7,0x737a,0x4cab,0x7387,0x4cb1,0x738b,0x4cb6,0x73a5, +0x4cbc,0x73b2,0xf9ad,0x73de,0xf917,0x7406,0xf9e4,0x7409,0xf9cc,0x7422,0xfa4a,0x7447,0x4cc2,0x745c,0x4cc8,0x7469, +0xf9ae,0x7471,0x4cce,0x7485,0x4cd6,0x7489,0xf994,0x7498,0xf9ef,0x74ca,0x4cdc,0x7506,0xfaa2,0x7524,0x4ce2,0x753b, +0xfaa3,0x753e,0x4ce8,0x7559,0xf9cd,0x7565,0xf976,0x7570,0x4cee,0x75e2,0xf9e5,0x7610,0x4cf6,0x761d,0xfaa4,0x761f, +0xfaa5,0x7642,0xf9c1,0x7669,0xf90e,0x76ca,0x4cfc,0x76db,0xfaa7,0x76e7,0xf933,0x76f4,0x4d01,0x7701,0xf96d,0x771e, +0x4d09,0x771f,0x4d0f,0x7740,0xfaaa,0x774a,0x4d15,0x778b,0x4d1d,0x77a7,0xfa9d,0x784e,0x4d23,0x786b,0xf9ce,0x788c, +0x4d29,0x7891,0xfa4b,0x78ca,0xf947,0x78cc,0x4d31,0x78fb,0xf964,0x792a,0xf985,0x793c,0xfa18,0x793e,0xfa4c,0x7948, +0xfa4e,0x7949,0xfa4d,0x7950,0xfa4f,0x7956,0x4d39,0x795d,0xfa51,0x795e,0xfa19,0x7965,0xfa1a,0x797f,0xf93c,0x798d, +0xfa52,0x798e,0xfa53,0x798f,0x4d41,0x79ae,0xf9b6,0x79ca,0xf995,0x79eb,0x4d49,0x7a1c,0xf956,0x7a40,0x4d4f,0x7a4a, +0x4d57,0x7a4f,0x4d5d,0x7a81,0xfa55,0x7ab1,0xfaac,0x7acb,0xf9f7,0x7aee,0x4d63,0x7b20,0xf9f8,0x7bc0,0x4d69,0x7bc6, +0x4d6e,0x7bc9,0x4d74,0x7c3e,0xf9a6,0x7c60,0xf944,0x7c7b,0xfaae,0x7c92,0xf9f9,0x7cbe,0xfa1d,0x7cd2,0x4d7a,0x7cd6, +0xfa03,0x7ce3,0x4d80,0x7ce7,0xf97b,0x7ce8,0x4d86,0x7d00,0x4d8c,0x7d10,0xf9cf,0x7d22,0xf96a,0x7d2f,0xf94f,0x7d5b, +0xfaaf,0x7d63,0x4d92,0x7da0,0xf93d,0x7dbe,0xf957,0x7dc7,0x4d98,0x7df4,0x4d9e,0x7e02,0x4da5,0x7e09,0xfa58,0x7e37, +0xf950,0x7e41,0xfa59,0x7e45,0x4dab,0x7f3e,0xfab1,0x7f72,0xfa5a,0x7f79,0xf9e6,0x7f7a,0x4db1,0x7f85,0xf90f,0x7f95, +0x4db7,0x7f9a,0xf9af,0x7fbd,0xfa1e,0x7ffa,0x4dbd,0x8001,0xf934,0x8005,0x4dc3,0x8046,0xf9b0,0x8060,0x4dcd,0x806f, +0xf997,0x8070,0x4dd3,0x807e,0xf945,0x808b,0xf953,0x80ad,0x4dd9,0x80b2,0x4ddf,0x8103,0x4de5,0x813e,0x4deb,0x81d8, +0xf926,0x81e8,0xf9f6,0x81ed,0xfa5c,0x8201,0x4df1,0x8204,0x4dfb,0x826f,0xf97c,0x8279,0x4e01,0x828b,0x4e04,0x8291, +0x4e0a,0x829d,0x4e10,0x82b1,0x4e16,0x82b3,0x4e1c,0x82bd,0x4e22,0x82e5,0x4e28,0x82e6,0x4e30,0x831d,0x4e36,0x8323, +0x4e3c,0x8336,0xf9fe,0x8352,0xfab3,0x8353,0x4e42,0x8363,0x4e48,0x83ad,0x4e4e,0x83bd,0x4e54,0x83c9,0xf93e,0x83ca, +0x4e5a,0x83cc,0x4e60,0x83dc,0x4e66,0x83e7,0x4e6c,0x83ef,0xfab4,0x83f1,0xf958,0x843d,0xf918,0x8449,0xf96e,0x8457, +0x4e72,0x84ee,0xf999,0x84f1,0x4e7a,0x84f3,0x4e80,0x84fc,0xf9c2,0x8516,0x4e86,0x8564,0x4e8c,0x85cd,0xf923,0x85fa, +0xf9f0,0x8606,0xf935,0x8612,0xfa20,0x862d,0xf91f,0x863f,0xf910,0x8650,0x4e92,0x865c,0x4e98,0x8667,0x4ea0,0x8669, +0x4ea6,0x8688,0x4eac,0x86a9,0x4eb2,0x86e2,0x4eb8,0x870e,0x4ebe,0x8728,0x4ec4,0x876b,0x4eca,0x8779,0x4ed0,0x8786, +0x4ed8,0x87ba,0xf911,0x87e1,0x4ede,0x8801,0x4ee4,0x881f,0xf927,0x884c,0xfa08,0x8860,0x4eea,0x8863,0x4ef0,0x88c2, +0xf9a0,0x88cf,0xf9e7,0x88d7,0x4ef6,0x88de,0x4efc,0x88e1,0xf9e8,0x88f8,0xf912,0x88fa,0x4f02,0x8910,0xfa60,0x8941, +0xfab6,0x8964,0xf924,0x8986,0xfab7,0x898b,0xfa0a,0x8996,0x4f08,0x8aa0,0x4f0d,0x8aaa,0x4f13,0x8abf,0xfab9,0x8acb, +0xfabb,0x8ad2,0xf97d,0x8ad6,0xf941,0x8aed,0x4f18,0x8af8,0x4f20,0x8afe,0x4f25,0x8b01,0x4f2a,0x8b39,0x4f2f,0x8b58, +0xf9fc,0x8b80,0xf95a,0x8b8a,0x4f34,0x8c48,0xf900,0x8c55,0x4f3c,0x8cab,0x4f42,0x8cc1,0x4f48,0x8cc2,0xf948,0x8cc8, +0xf903,0x8cd3,0xfa64,0x8d08,0x4f4e,0x8d1b,0x4f53,0x8d77,0x4f59,0x8dbc,0x4f5f,0x8dcb,0x4f65,0x8def,0xf937,0x8df0, +0x4f6b,0x8eca,0xf902,0x8ed4,0x4f71,0x8f26,0xf998,0x8f2a,0xf9d7,0x8f38,0x4f77,0x8f3b,0xfa07,0x8f62,0xf98d,0x8f9e, +0x4f7f,0x8fb0,0xf971,0x8fb6,0xfa66,0x9023,0xf99a,0x9038,0x4f85,0x9072,0xfac3,0x907c,0xf9c3,0x908f,0xf913,0x9094, +0x4f8a,0x90ce,0xf92c,0x90f1,0x4f90,0x90fd,0xfa26,0x9111,0x4f96,0x911b,0x4f9c,0x916a,0xf919,0x9199,0xfac4,0x91b4, +0xf9b7,0x91cc,0xf9e9,0x91cf,0xf97e,0x91d1,0xf90a,0x9234,0xf9b1,0x9238,0x4fa2,0x9276,0xfac5,0x927c,0x4fa8,0x92d7, +0x4fae,0x92d8,0x4fb4,0x9304,0xf93f,0x934a,0xf99b,0x93f9,0x4fba,0x9415,0x4fc0,0x958b,0x4fc6,0x95ad,0xf986,0x95b7, +0x4fcc,0x962e,0xf9c6,0x964b,0xf951,0x964d,0xfa09,0x9675,0xf959,0x9678,0xf9d3,0x967c,0xfac6,0x9686,0xf9dc,0x96a3, +0xf9f1,0x96b8,0xf9b8,0x96c3,0x4fd2,0x96e2,0xf9ea,0x96e3,0x4fd8,0x96f6,0xf9b2,0x96f7,0xf949,0x9723,0x4fdd,0x9732, +0xf938,0x9748,0xf9b3,0x9756,0x4fe3,0x97db,0xfac9,0x97e0,0x4fe8,0x97ff,0x4fee,0x980b,0x4ff3,0x9818,0xf9b4,0x9829, +0x4ffb,0x983b,0x5001,0x985e,0xf9d0,0x98e2,0x5006,0x98ef,0xfa2a,0x98fc,0xfa2b,0x9928,0xfa2c,0x9929,0x500c,0x99a7, +0x5012,0x99c2,0x5018,0x99f1,0xf91a,0x99fe,0x501e,0x9a6a,0xf987,0x9b12,0x5024,0x9b6f,0xf939,0x9c40,0x502c,0x9c57, +0xf9f2,0x9cfd,0x5032,0x9d67,0x5038,0x9db4,0xfa2d,0x9dfa,0xf93a,0x9e1e,0xf920,0x9e7f,0xf940,0x9e97,0xf988,0x9e9f, +0xf9f3,0x9ebb,0x503e,0x9ece,0xf989,0x9ef9,0x5044,0x9efe,0x504a,0x9f05,0x5050,0x9f0f,0x5056,0x9f16,0x505c,0x9f3b, +0x5062,0x9f43,0xfad8,0x9f8d,0xf9c4,0x9f8e,0xfad9,0x9f9c,0x5068,0x8101,0xd157,0xd15e,1,0xd158,0x106d,1, +0xd1b9,0x1073,1,0xd1ba,0x1081,0x8202,0x122,0xf803,0x8202,0x51c,0xf812,0x8202,0x525,0xf91b,0x8202,0x54b, +0xf816,0x8202,0x63a,0xf80d,0x8202,0x804,0xf9d9,0x8202,0x8de,0xf9dd,0x8202,0xa2c,0xf834,0x8202,0xb63,0xf838, +0x8202,0x14e4,0xf859,0x8202,0x16a8,0xf860,0x8202,0x16ea,0xf861,0x8202,0x19c8,0xf86c,0x8202,0x1b18,0xf871,0x8202, +0x1d0b,0xf8f8,0x8202,0x1de4,0xf87b,0x8202,0x1de6,0xf87d,0x8202,0x2183,0xf889,0x8202,0x219f,0xf939,2,0x2331, +0x108f,0x8202,0x26d4,0xf8a4,0x8002,0x2844,0xfad0,0x8002,0x284a,0xfacf,0x8202,0x2b0c,0xf8b8,0x8202,0x2bf1,0xf8be, +0x8202,0x300a,0xf8ca,0x8202,0x32b8,0xf897,0x8202,0x335f,0xf980,0x8202,0x3393,0xf989,0x8202,0x339c,0xf98a,0x8202, +0x33c3,0xf8dd,0x8002,0x33d5,0xfad1,0x8202,0x346d,0xf8e3,0x8202,0x36a3,0xf8ec,0x8202,0x38a7,0xf8f0,0x8202,0x3a8d, +0xf8f7,0x8202,0x3afa,0xf8f9,0x8202,0x3cbc,0xf8fb,0x8202,0x3d1e,0xf906,0x8202,0x3ed1,0xf90d,0x8202,0x3f5e,0xf910, +0x8202,0x3f8e,0xf911,0x8202,0x4263,0xf91d,0x8202,0x43ab,0xf91f,0x8202,0x4608,0xf923,0x8202,0x4735,0xf926,0x8202, +0x4814,0xf927,0x8202,0x4c36,0xf935,0x8202,0x4c92,0xf937,0x8202,0x4fa1,0xf93b,0x8202,0x4fb8,0xf93c,0x8202,0x5044, +0xf93d,0x8202,0x50f2,0xf942,0x8202,0x50f3,0xf941,0x8202,0x5119,0xf943,0x8202,0x5133,0xf944,0x8002,0x5249,0xfad5, +0x8202,0x541d,0xf94d,0x8202,0x5626,0xf952,0x8202,0x569a,0xf954,0x8202,0x56c5,0xf955,0x8202,0x597c,0xf95c,2, +0x5aa7,0x1095,0x8202,0x5bab,0xf961,0x8202,0x5c80,0xf965,0x8002,0x5cd0,0xfad6,0x8202,0x5f86,0xf96b,0x8202,0x61da, +0xf898,0x8202,0x6228,0xf972,0x8202,0x6247,0xf973,0x8202,0x62d9,0xf975,0x8202,0x633e,0xf977,0x8202,0x64da,0xf97b, +0x8202,0x6523,0xf97c,0x8202,0x65a8,0xf97e,0x8202,0x67a7,0xf987,0x8202,0x67b5,0xf988,0x8202,0x6b3c,0xf997,0x8202, +0x6c36,0xf9a4,0x8202,0x6cd5,0xf9a6,0x8202,0x6d6b,0xf9a5,0x8202,0x6f2c,0xf9ad,0x8202,0x6fb1,0xf9b0,0x8202,0x70d2, +0xf9b1,0x8202,0x73ca,0xf9ab,0x8202,0x7667,0xf9c5,0x8202,0x78ae,0xf9cb,0x8202,0x7966,0xf9cc,0x8202,0x7ca8,0xf9d3, +0x8002,0x7ed3,0xfad7,0x8202,0x7f2f,0xf9d8,0x8202,0x85d2,0xf9e0,0x8202,0x85ed,0xf9e1,0x8202,0x872e,0xf9e5,0x8202, +0x8bfa,0xf9ed,0x8202,0x8d77,0xf9f1,0x8202,0x9145,0xf9f6,0x8202,0x91df,0xf81c,0x8202,0x921a,0xf9f7,0x8202,0x940a, +0xf9fb,0x8202,0x9496,0xf9fd,0x8202,0x95b6,0xfa01,0x8202,0x9b30,0xfa09,0x8202,0xa0ce,0xfa10,0x8202,0xa105,0xfa12, +0x8202,0xa20e,0xfa13,0x8202,0xa291,0xfa14,0x8202,0xa392,0xf88f,0x8202,0xa600,0xfa1d,0x8016,0x12,0xf900,0xfa0e, +0xfa10,0xfa11,0xfa12,0xfa13,0xfa15,0xfa1f,0xfa20,0xfa21,0xfa22,0xfa23,0xfa25,0xfa27,0xfa2a,0xfa2e,0xfa70,0xfada, +2,0xf800,2,0xfa1e,0x8376,0x2ba,0x221,0x222,0x234,0x250,0x2ae,0x2b0,0x2ef,0x300,0x350,0x360, +0x370,0x374,0x376,0x37a,0x37b,0x37e,0x37f,0x384,0x38b,0x38c,0x38d,0x38e,0x3a2,0x3a3,0x3cf,0x3d0, +0x3f7,0x400,0x487,0x488,0x4cf,0x4d0,0x4f6,0x4f8,0x4fa,0x500,0x510,0x531,0x557,0x559,0x560,0x561, +0x588,0x589,0x58b,0x591,0x5a2,0x5a3,0x5ba,0x5bb,0x5c5,0x5d0,0x5eb,0x5f0,0x5f5,0x60c,0x60d,0x61b, +0x61c,0x61f,0x620,0x621,0x63b,0x640,0x656,0x660,0x6ee,0x6f0,0x6ff,0x700,0x70e,0x70f,0x72d,0x730, +0x74b,0x780,0x7b2,0x901,0x904,0x905,0x93a,0x93c,0x94e,0x950,0x955,0x958,0x971,0x981,0x984,0x985, +0x98d,0x98f,0x991,0x993,0x9a9,0x9aa,0x9b1,0x9b2,0x9b3,0x9b6,0x9ba,0x9bc,0x9bd,0x9be,0x9c5,0x9c7, +0x9c9,0x9cb,0x9ce,0x9d7,0x9d8,0x9dc,0x9de,0x9df,0x9e4,0x9e6,0x9fb,0xa02,0xa03,0xa05,0xa0b,0xa0f, +0xa11,0xa13,0xa29,0xa2a,0xa31,0xa32,0xa34,0xa35,0xa37,0xa38,0xa3a,0xa3c,0xa3d,0xa3e,0xa43,0xa47, +0xa49,0xa4b,0xa4e,0xa59,0xa5d,0xa5e,0xa5f,0xa66,0xa75,0xa81,0xa84,0xa85,0xa8c,0xa8d,0xa8e,0xa8f, +0xa92,0xa93,0xaa9,0xaaa,0xab1,0xab2,0xab4,0xab5,0xaba,0xabc,0xac6,0xac7,0xaca,0xacb,0xace,0xad0, +0xad1,0xae0,0xae1,0xae6,0xaf0,0xb01,0xb04,0xb05,0xb0d,0xb0f,0xb11,0xb13,0xb29,0xb2a,0xb31,0xb32, +0xb34,0xb36,0xb3a,0xb3c,0xb44,0xb47,0xb49,0xb4b,0xb4e,0xb56,0xb58,0xb5c,0xb5e,0xb5f,0xb62,0xb66, +0xb71,0xb82,0xb84,0xb85,0xb8b,0xb8e,0xb91,0xb92,0xb96,0xb99,0xb9b,0xb9c,0xb9d,0xb9e,0xba0,0xba3, +0xba5,0xba8,0xbab,0xbae,0xbb6,0xbb7,0xbba,0xbbe,0xbc3,0xbc6,0xbc9,0xbca,0xbce,0xbd7,0xbd8,0xbe7, +0xbf3,0xc01,0xc04,0xc05,0xc0d,0xc0e,0xc11,0xc12,0xc29,0xc2a,0xc34,0xc35,0xc3a,0xc3e,0xc45,0xc46, +0xc49,0xc4a,0xc4e,0xc55,0xc57,0xc60,0xc62,0xc66,0xc70,0xc82,0xc84,0xc85,0xc8d,0xc8e,0xc91,0xc92, +0xca9,0xcaa,0xcb4,0xcb5,0xcba,0xcbe,0xcc5,0xcc6,0xcc9,0xcca,0xcce,0xcd5,0xcd7,0xcde,0xcdf,0xce0, +0xce2,0xce6,0xcf0,0xd02,0xd04,0xd05,0xd0d,0xd0e,0xd11,0xd12,0xd29,0xd2a,0xd3a,0xd3e,0xd44,0xd46, +0xd49,0xd4a,0xd4e,0xd57,0xd58,0xd60,0xd62,0xd66,0xd70,0xd82,0xd84,0xd85,0xd97,0xd9a,0xdb2,0xdb3, +0xdbc,0xdbd,0xdbe,0xdc0,0xdc7,0xdca,0xdcb,0xdcf,0xdd5,0xdd6,0xdd7,0xdd8,0xde0,0xdf2,0xdf5,0xe01, +0xe3b,0xe3f,0xe5c,0xe81,0xe83,0xe84,0xe85,0xe87,0xe89,0xe8a,0xe8b,0xe8d,0xe8e,0xe94,0xe98,0xe99, +0xea0,0xea1,0xea4,0xea5,0xea6,0xea7,0xea8,0xeaa,0xeac,0xead,0xeba,0xebb,0xebe,0xec0,0xec5,0xec6, +0xec7,0xec8,0xece,0xed0,0xeda,0xedc,0xede,0xf00,0xf48,0xf49,0xf6b,0xf71,0xf8c,0xf90,0xf98,0xf99, +0xfbd,0xfbe,0xfcd,0xfcf,0xfd0,0x1000,0x1022,0x1023,0x1028,0x1029,0x102b,0x102c,0x1033,0x1036,0x103a,0x1040, +0x105a,0x10a0,0x10c6,0x10d0,0x10f9,0x10fb,0x10fc,0x1100,0x115a,0x115f,0x11a3,0x11a8,0x11fa,0x1200,0x1207,0x1208, +0x1247,0x1248,0x1249,0x124a,0x124e,0x1250,0x1257,0x1258,0x1259,0x125a,0x125e,0x1260,0x1287,0x1288,0x1289,0x128a, +0x128e,0x1290,0x12af,0x12b0,0x12b1,0x12b2,0x12b6,0x12b8,0x12bf,0x12c0,0x12c1,0x12c2,0x12c6,0x12c8,0x12cf,0x12d0, +0x12d7,0x12d8,0x12ef,0x12f0,0x130f,0x1310,0x1311,0x1312,0x1316,0x1318,0x131f,0x1320,0x1347,0x1348,0x135b,0x1361, +0x137d,0x13a0,0x13f5,0x1401,0x1677,0x1680,0x169d,0x16a0,0x16f1,0x1700,0x170d,0x170e,0x1715,0x1720,0x1737,0x1740, +0x1754,0x1760,0x176d,0x176e,0x1771,0x1772,0x1774,0x1780,0x17dd,0x17e0,0x17ea,0x1800,0x180f,0x1810,0x181a,0x1820, +0x1878,0x1880,0x18aa,0x1e00,0x1e9c,0x1ea0,0x1efa,0x1f00,0x1f16,0x1f18,0x1f1e,0x1f20,0x1f46,0x1f48,0x1f4e,0x1f50, +0x1f58,0x1f59,0x1f5a,0x1f5b,0x1f5c,0x1f5d,0x1f5e,0x1f5f,0x1f7e,0x1f80,0x1fb5,0x1fb6,0x1fc5,0x1fc6,0x1fd4,0x1fd6, +0x1fdc,0x1fdd,0x1ff0,0x1ff2,0x1ff5,0x1ff6,0x1fff,0x2000,0x2053,0x2057,0x2058,0x205f,0x2064,0x206a,0x2072,0x2074, +0x208f,0x20a0,0x20b2,0x20d0,0x20eb,0x2100,0x213b,0x213d,0x214c,0x2153,0x2184,0x2190,0x23cf,0x2400,0x2427,0x2440, +0x244b,0x2460,0x24ff,0x2500,0x2614,0x2616,0x2618,0x2619,0x267e,0x2680,0x268a,0x2701,0x2705,0x2706,0x270a,0x270c, +0x2728,0x2729,0x274c,0x274d,0x274e,0x274f,0x2753,0x2756,0x2757,0x2758,0x275f,0x2761,0x2795,0x2798,0x27b0,0x27b1, +0x27bf,0x27d0,0x27ec,0x27f0,0x2b00,0x2e80,0x2e9a,0x2e9b,0x2ef4,0x2f00,0x2fd6,0x2ff0,0x2ffc,0x3000,0x3040,0x3041, +0x3097,0x3099,0x3100,0x3105,0x312d,0x3131,0x318f,0x3190,0x31b8,0x31f0,0x321d,0x3220,0x3244,0x3251,0x327c,0x327f, +0x32cc,0x32d0,0x32ff,0x3300,0x3377,0x337b,0x33de,0x33e0,0x33ff,0x3400,0x4db6,0x4e00,0x9fa6,0xa000,0xa48d,0xa490, +0xa4c7,0xac00,0xd7a4,0xd800,0xfa2e,0xfa30,0xfa6b,0xfb00,0xfb07,0xfb13,0xfb18,0xfb1d,0xfb37,0xfb38,0xfb3d,0xfb3e, +0xfb3f,0xfb40,0xfb42,0xfb43,0xfb45,0xfb46,0xfbb2,0xfbd3,0xfd40,0xfd50,0xfd90,0xfd92,0xfdc8,0xfdd0,0xfdfd,0xfe00, +0xfe10,0xfe20,0xfe24,0xfe30,0xfe47,0xfe49,0xfe53,0xfe54,0xfe67,0xfe68,0xfe6c,0xfe70,0xfe75,0xfe76,0xfefd,0xfeff, +0xff00,0xff01,0xffbf,0xffc2,0xffc8,0xffca,0xffd0,0xffd2,0xffd8,0xffda,0xffdd,0xffe0,0xffe7,0xffe8,0xffef,0xfff9, +1,0,1,0x300,1,0x31f,1,0x320,1,0x324,1,0x330,1,0x34b,1,0x400, +1,0x426,1,0x428,1,0x44e,1,0xd000,1,0xd0f6,1,0xd100,1,0xd127,1,0xd12a, +1,0xd1de,1,0xd400,1,0xd455,1,0xd456,1,0xd49d,1,0xd49e,1,0xd4a0,1,0xd4a2, +1,0xd4a3,1,0xd4a5,1,0xd4a7,1,0xd4a9,1,0xd4ad,1,0xd4ae,1,0xd4ba,1,0xd4bb, +1,0xd4bc,1,0xd4bd,1,0xd4c1,1,0xd4c2,1,0xd4c4,1,0xd4c5,1,0xd506,1,0xd507, +1,0xd50b,1,0xd50d,1,0xd515,1,0xd516,1,0xd51d,1,0xd51e,1,0xd53a,1,0xd53b, +1,0xd53f,1,0xd540,1,0xd545,1,0xd546,1,0xd547,1,0xd54a,1,0xd551,1,0xd552, +1,0xd6a4,1,0xd6a8,1,0xd7ca,1,0xd7ce,1,0xd800,1,0xfffe,2,0xa6d7,2,0xf800, +2,0xfa1e,2,0xfffe,3,0,3,0xfffe,4,0,4,0xfffe,5,0,5,0xfffe, +6,0,6,0xfffe,7,0,7,0xfffe,8,0,8,0xfffe,9,0,9,0xfffe, +0xa,0,0xa,0xfffe,0xb,0,0xb,0xfffe,0xc,0,0xc,0xfffe,0xd,0,0xd,0xfffe, +0xe,0,0xe,1,0xe,2,0xe,0x20,0xe,0x80,0xe,0xfffe +}; + diff --git a/icuSources/common/unormcmp.cpp b/icuSources/common/unormcmp.cpp index 106e8399..ded2e730 100644 --- a/icuSources/common/unormcmp.cpp +++ b/icuSources/common/unormcmp.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -138,7 +138,7 @@ unorm_cmpEquivFold(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, uint32_t options, UErrorCode *pErrorCode) { - UCaseProps *csp; + const UCaseProps *csp; /* current-level start/limit - s1/s2 as current */ const UChar *start1, *start2, *limit1, *limit2; diff --git a/icuSources/common/unormimp.h b/icuSources/common/unormimp.h index 6be9f303..f7b67806 100644 --- a/icuSources/common/unormimp.h +++ b/icuSources/common/unormimp.h @@ -452,7 +452,7 @@ unorm_getNX(int32_t options, UErrorCode *pErrorCode); * @internal */ U_CAPI void U_EXPORT2 -unorm_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode); +unorm_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); /** * Swap unorm.icu. See udataswp.h. diff --git a/icuSources/common/uobject.cpp b/icuSources/common/uobject.cpp index 581cd742..5fc54238 100644 --- a/icuSources/common/uobject.cpp +++ b/icuSources/common/uobject.cpp @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -76,6 +76,17 @@ void U_EXPORT2 UMemory::operator delete[](void *p) { } } +#if U_HAVE_DEBUG_LOCATION_NEW +void * U_EXPORT2 UMemory::operator new(size_t size, const char* /*file*/, int /*line*/) { + return UMemory::operator new(size); +} + +void U_EXPORT2 UMemory::operator delete(void* p, const char* /*file*/, int /*line*/) { + UMemory::operator delete(p); +} +#endif /* U_HAVE_DEBUG_LOCATION_NEW */ + + #endif UObject::~UObject() {} diff --git a/icuSources/common/uprops.c b/icuSources/common/uprops.c index 1abc8729..86464e54 100644 --- a/icuSources/common/uprops.c +++ b/icuSources/common/uprops.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -25,12 +25,63 @@ #include "unicode/uchar.h" #include "unicode/uscript.h" #include "cstring.h" +#include "ucln_cmn.h" +#include "umutex.h" #include "unormimp.h" +#include "ubidi_props.h" #include "uprops.h" +#include "ucase.h" #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) -/* API functions ------------------------------------------------------------ */ +/* cleanup ------------------------------------------------------------------ */ + +static const UBiDiProps *gBdp=NULL; + +static UBool U_CALLCONV uprops_cleanup(void) { + gBdp=NULL; + return TRUE; +} + +/* bidi/shaping properties API ---------------------------------------------- */ + +/* get the UBiDiProps singleton, or else its dummy, once and for all */ +static const UBiDiProps * +getBiDiProps() { + /* + * This lazy intialization with double-checked locking (without mutex protection for + * the initial check) is transiently unsafe under certain circumstances. + * Check the readme and use u_init() if necessary. + */ + + /* the initial check is performed by the GET_BIDI_PROPS() macro */ + const UBiDiProps *bdp; + UErrorCode errorCode=U_ZERO_ERROR; + + bdp=ubidi_getSingleton(&errorCode); + if(U_FAILURE(errorCode)) { + errorCode=U_ZERO_ERROR; + bdp=ubidi_getDummy(&errorCode); + if(U_FAILURE(errorCode)) { + return NULL; + } + } + + umtx_lock(NULL); + if(gBdp==NULL) { + gBdp=bdp; + bdp=NULL; + ucln_common_registerCleanup(UCLN_COMMON_UPROPS, uprops_cleanup); + } + umtx_unlock(NULL); + + return gBdp; +} + +/* see comment for GET_CASE_PROPS() */ +#define GET_BIDI_PROPS() (gBdp!=NULL ? gBdp : getBiDiProps()) + +/* general properties API functions ----------------------------------------- */ static const struct { int32_t column; @@ -46,8 +97,8 @@ static const struct { */ { 1, U_MASK(UPROPS_ALPHABETIC) }, { 1, U_MASK(UPROPS_ASCII_HEX_DIGIT) }, - { 1, U_MASK(UPROPS_BIDI_CONTROL) }, - { -1, U_MASK(UPROPS_MIRROR_SHIFT) }, + { UPROPS_SRC_BIDI, 0 }, /* UCHAR_BIDI_CONTROL */ + { UPROPS_SRC_BIDI, 0 }, /* UCHAR_BIDI_MIRRORED */ { 1, U_MASK(UPROPS_DASH) }, { 1, U_MASK(UPROPS_DEFAULT_IGNORABLE_CODE_POINT) }, { 1, U_MASK(UPROPS_DEPRECATED) }, @@ -64,7 +115,7 @@ static const struct { { 1, U_MASK(UPROPS_IDEOGRAPHIC) }, { 1, U_MASK(UPROPS_IDS_BINARY_OPERATOR) }, { 1, U_MASK(UPROPS_IDS_TRINARY_OPERATOR) }, - { 1, U_MASK(UPROPS_JOIN_CONTROL) }, + { UPROPS_SRC_BIDI, 0 }, /* UCHAR_JOIN_CONTROL */ { 1, U_MASK(UPROPS_LOGICAL_ORDER_EXCEPTION) }, { UPROPS_SRC_CASE, 0 }, /* UCHAR_LOWERCASE */ { 1, U_MASK(UPROPS_MATH) }, @@ -85,7 +136,14 @@ static const struct { { UPROPS_SRC_NORM, 0 }, /* UCHAR_NFKD_INERT */ { UPROPS_SRC_NORM, 0 }, /* UCHAR_NFC_INERT */ { UPROPS_SRC_NORM, 0 }, /* UCHAR_NFKC_INERT */ - { UPROPS_SRC_NORM, 0 } /* UCHAR_SEGMENT_STARTER */ + { UPROPS_SRC_NORM, 0 }, /* UCHAR_SEGMENT_STARTER */ + { 2, U_MASK(UPROPS_V2_PATTERN_SYNTAX) }, + { 2, U_MASK(UPROPS_V2_PATTERN_WHITE_SPACE) }, + { UPROPS_SRC_CHAR_AND_PROPSVEC, 0 }, /* UCHAR_POSIX_ALNUM */ + { UPROPS_SRC_CHAR, 0 }, /* UCHAR_POSIX_BLANK */ + { UPROPS_SRC_CHAR, 0 }, /* UCHAR_POSIX_GRAPH */ + { UPROPS_SRC_CHAR, 0 }, /* UCHAR_POSIX_PRINT */ + { UPROPS_SRC_CHAR, 0 } /* UCHAR_POSIX_XDIGIT */ }; U_CAPI UBool U_EXPORT2 @@ -101,24 +159,7 @@ u_hasBinaryProperty(UChar32 c, UProperty which) { return (u_getUnicodeProperties(c, column)&mask)!=0; } else { if(column==UPROPS_SRC_CASE) { - /* case mapping properties */ - UErrorCode errorCode=U_ZERO_ERROR; - UCaseProps *csp=ucase_getSingleton(&errorCode); - if(U_FAILURE(errorCode)) { - return FALSE; - } - switch(which) { - case UCHAR_LOWERCASE: - return (UBool)(UCASE_LOWER==ucase_getType(csp, c)); - case UCHAR_UPPERCASE: - return (UBool)(UCASE_UPPER==ucase_getType(csp, c)); - case UCHAR_SOFT_DOTTED: - return ucase_isSoftDotted(csp, c); - case UCHAR_CASE_SENSITIVE: - return ucase_isCaseSensitive(csp, c); - default: - break; - } + return ucase_hasBinaryProperty(c, which); } else if(column==UPROPS_SRC_NORM) { #if !UCONFIG_NO_NORMALIZATION /* normalization properties from unorm.icu */ @@ -129,13 +170,49 @@ u_hasBinaryProperty(UChar32 c, UProperty which) { case UCHAR_NFKD_INERT: case UCHAR_NFC_INERT: case UCHAR_NFKC_INERT: - return unorm_isNFSkippable(c, (UNormalizationMode)(which-UCHAR_NFD_INERT)+UNORM_NFD); + return unorm_isNFSkippable(c, (UNormalizationMode)(which-UCHAR_NFD_INERT+UNORM_NFD)); case UCHAR_SEGMENT_STARTER: return unorm_isCanonSafeStart(c); default: break; } #endif + } else if(column==UPROPS_SRC_BIDI) { + /* bidi/shaping properties */ + const UBiDiProps *bdp=GET_BIDI_PROPS(); + if(bdp!=NULL) { + switch(which) { + case UCHAR_BIDI_MIRRORED: + return ubidi_isMirrored(bdp, c); + case UCHAR_BIDI_CONTROL: + return ubidi_isBidiControl(bdp, c); + case UCHAR_JOIN_CONTROL: + return ubidi_isJoinControl(bdp, c); + default: + break; + } + } + /* else return FALSE below */ + } else if(column==UPROPS_SRC_CHAR) { + switch(which) { + case UCHAR_POSIX_BLANK: + return u_isblank(c); + case UCHAR_POSIX_GRAPH: + return u_isgraphPOSIX(c); + case UCHAR_POSIX_PRINT: + return u_isprintPOSIX(c); + case UCHAR_POSIX_XDIGIT: + return u_isxdigit(c); + default: + break; + } + } else if(column==UPROPS_SRC_CHAR_AND_PROPSVEC) { + switch(which) { + case UCHAR_POSIX_ALNUM: + return u_isalnumPOSIX(c); + default: + break; + } } } } @@ -145,6 +222,7 @@ u_hasBinaryProperty(UChar32 c, UProperty which) { U_CAPI int32_t U_EXPORT2 u_getIntPropertyValue(UChar32 c, UProperty which) { UErrorCode errorCode; + int32_t type; if(which>UPROPS_JG_SHIFT; + return ubidi_getJoiningGroup(GET_BIDI_PROPS(), c); case UCHAR_JOINING_TYPE: - return (int32_t)(u_getUnicodeProperties(c, 2)&UPROPS_JT_MASK)>>UPROPS_JT_SHIFT; + return ubidi_getJoiningType(GET_BIDI_PROPS(), c); case UCHAR_LINE_BREAK: return (int32_t)(u_getUnicodeProperties(c, 0)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT; case UCHAR_NUMERIC_TYPE: - return (int32_t)GET_NUMERIC_TYPE(u_getUnicodeProperties(c, -1)); + type=(int32_t)GET_NUMERIC_TYPE(u_getUnicodeProperties(c, -1)); + if(type>U_NT_NUMERIC) { + /* keep internal variants of U_NT_NUMERIC from becoming visible */ + type=U_NT_NUMERIC; + } + return type; case UCHAR_SCRIPT: errorCode=U_ZERO_ERROR; return (int32_t)uscript_getScript(c, &errorCode); @@ -188,12 +271,18 @@ u_getIntPropertyValue(UChar32 c, UProperty which) { case UCHAR_NFKD_QUICK_CHECK: case UCHAR_NFC_QUICK_CHECK: case UCHAR_NFKC_QUICK_CHECK: - return (int32_t)unorm_getQuickCheck(c, (UNormalizationMode)(which-UCHAR_NFD_QUICK_CHECK)+UNORM_NFD); + return (int32_t)unorm_getQuickCheck(c, (UNormalizationMode)(which-UCHAR_NFD_QUICK_CHECK+UNORM_NFD)); case UCHAR_LEAD_CANONICAL_COMBINING_CLASS: return unorm_getFCD16FromCodePoint(c)>>8; case UCHAR_TRAIL_CANONICAL_COMBINING_CLASS: return unorm_getFCD16FromCodePoint(c)&0xff; #endif + case UCHAR_GRAPHEME_CLUSTER_BREAK: + return (int32_t)(u_getUnicodeProperties(c, 2)&UPROPS_GCB_MASK)>>UPROPS_GCB_SHIFT; + case UCHAR_SENTENCE_BREAK: + return (int32_t)(u_getUnicodeProperties(c, 2)&UPROPS_SB_MASK)>>UPROPS_SB_SHIFT; + case UCHAR_WORD_BREAK: + return (int32_t)(u_getUnicodeProperties(c, 2)&UPROPS_WB_MASK)>>UPROPS_WB_SHIFT; default: return 0; /* undefined */ } @@ -211,8 +300,6 @@ u_getIntPropertyMinValue(UProperty which) { U_CAPI int32_t U_EXPORT2 u_getIntPropertyMaxValue(UProperty which) { - int32_t max; - if(which>UPROPS_BLOCK_SHIFT; - return max!=0 ? max : (int32_t)UBLOCK_COUNT-1; + return (uprv_getMaxValues(0)&UPROPS_BLOCK_MASK)>>UPROPS_BLOCK_SHIFT; case UCHAR_CANONICAL_COMBINING_CLASS: case UCHAR_LEAD_CANONICAL_COMBINING_CLASS: case UCHAR_TRAIL_CANONICAL_COMBINING_CLASS: return 0xff; /* TODO do we need to be more precise, getting the actual maximum? */ case UCHAR_DECOMPOSITION_TYPE: - max=uprv_getMaxValues(2)&UPROPS_DT_MASK; - return max!=0 ? max : (int32_t)U_DT_COUNT-1; + return uprv_getMaxValues(2)&UPROPS_DT_MASK; case UCHAR_EAST_ASIAN_WIDTH: - max=(uprv_getMaxValues(0)&UPROPS_EA_MASK)>>UPROPS_EA_SHIFT; - return max!=0 ? max : (int32_t)U_EA_COUNT-1; + return (uprv_getMaxValues(0)&UPROPS_EA_MASK)>>UPROPS_EA_SHIFT; case UCHAR_GENERAL_CATEGORY: return (int32_t)U_CHAR_CATEGORY_COUNT-1; - case UCHAR_JOINING_GROUP: - max=(uprv_getMaxValues(2)&UPROPS_JG_MASK)>>UPROPS_JG_SHIFT; - return max!=0 ? max : (int32_t)U_JG_COUNT-1; - case UCHAR_JOINING_TYPE: - max=(uprv_getMaxValues(2)&UPROPS_JT_MASK)>>UPROPS_JT_SHIFT; - return max!=0 ? max : (int32_t)U_JT_COUNT-1; case UCHAR_LINE_BREAK: - max=(uprv_getMaxValues(0)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT; - return max!=0 ? max : (int32_t)U_LB_COUNT-1; + return (uprv_getMaxValues(0)&UPROPS_LB_MASK)>>UPROPS_LB_SHIFT; case UCHAR_NUMERIC_TYPE: return (int32_t)U_NT_COUNT-1; case UCHAR_SCRIPT: - max=uprv_getMaxValues(0)&UPROPS_SCRIPT_MASK; - return max!=0 ? max : (int32_t)USCRIPT_CODE_LIMIT-1; + return uprv_getMaxValues(0)&UPROPS_SCRIPT_MASK; case UCHAR_HANGUL_SYLLABLE_TYPE: return (int32_t)U_HST_COUNT-1; #if !UCONFIG_NO_NORMALIZATION @@ -262,6 +340,12 @@ u_getIntPropertyMaxValue(UProperty which) { case UCHAR_NFKC_QUICK_CHECK: return (int32_t)UNORM_MAYBE; #endif + case UCHAR_GRAPHEME_CLUSTER_BREAK: + return (uprv_getMaxValues(2)&UPROPS_GCB_MASK)>>UPROPS_GCB_SHIFT; + case UCHAR_SENTENCE_BREAK: + return (uprv_getMaxValues(2)&UPROPS_SB_MASK)>>UPROPS_SB_SHIFT; + case UCHAR_WORD_BREAK: + return (uprv_getMaxValues(2)&UPROPS_WB_MASK)>>UPROPS_WB_SHIFT; default: return -1; /* undefined */ } @@ -276,7 +360,7 @@ uprops_getSource(UProperty which) { return UPROPS_SRC_NONE; /* undefined */ } else if(which>UPROPS_BIDI_SHIFT)&0x1f) +#define CAT_MASK(props) U_MASK(GET_CATEGORY(props)) + #define GET_NUMERIC_TYPE(props) (((props)>>UPROPS_NUMERIC_TYPE_SHIFT)&7) -#define GET_UNSIGNED_VALUE(props) ((props)>>UPROPS_VALUE_SHIFT) -#define GET_SIGNED_VALUE(props) ((int32_t)(props)>>UPROPS_VALUE_SHIFT) -#define GET_EXCEPTIONS(props) (exceptionsTable+GET_UNSIGNED_VALUE(props)) +#define GET_NUMERIC_VALUE(props) (((props)>>UPROPS_NUMERIC_VALUE_SHIFT)&0xff) -#define CAT_MASK(props) U_MASK(GET_CATEGORY(props)) +/* internal numeric pseudo-types for special encodings of numeric values */ +enum { + UPROPS_NT_FRACTION=4, /* ==U_NT_COUNT, must not change unless binary format version changes */ + UPROPS_NT_LARGE, + UPROPS_NT_COUNT +}; +/* encoding of fractional and large numbers */ enum { - EXC_UPPERCASE, - EXC_LOWERCASE, - EXC_TITLECASE, - EXC_UNUSED, - EXC_NUMERIC_VALUE, - EXC_DENOMINATOR_VALUE, - EXC_MIRROR_MAPPING, - EXC_SPECIAL_CASING, - EXC_CASE_FOLDING + UPROPS_MAX_SMALL_NUMBER=0xff, + + UPROPS_FRACTION_NUM_SHIFT=3, /* numerator: bits 7..3 */ + UPROPS_FRACTION_DEN_MASK=7, /* denominator: bits 2..0 */ + + UPROPS_FRACTION_MAX_NUM=31, + UPROPS_FRACTION_DEN_OFFSET=2, /* denominator values are 2..9 */ + + UPROPS_FRACTION_MIN_DEN=UPROPS_FRACTION_DEN_OFFSET, + UPROPS_FRACTION_MAX_DEN=UPROPS_FRACTION_MIN_DEN+UPROPS_FRACTION_DEN_MASK, + + UPROPS_LARGE_MANT_SHIFT=4, /* mantissa: bits 7..4 */ + UPROPS_LARGE_EXP_MASK=0xf, /* exponent: bits 3..0 */ + UPROPS_LARGE_EXP_OFFSET=2, /* regular exponents 2..17 */ + UPROPS_LARGE_EXP_OFFSET_EXTRA=18, /* extra large exponents 18..33 */ + + UPROPS_LARGE_MIN_EXP=UPROPS_LARGE_EXP_OFFSET, + UPROPS_LARGE_MAX_EXP=UPROPS_LARGE_MIN_EXP+UPROPS_LARGE_EXP_MASK, + UPROPS_LARGE_MAX_EXP_EXTRA=UPROPS_LARGE_EXP_OFFSET_EXTRA+UPROPS_LARGE_EXP_MASK }; /* number of properties vector words */ @@ -94,8 +95,7 @@ enum { * Properties in vector word 0 * Bits * 31..24 DerivedAge version major/minor one nibble each - * 23 reserved - * 22..18 Line Break + * 23..18 Line Break * 17..15 East Asian Width * 14.. 7 UBlockCode * 6.. 0 UScriptCode @@ -105,7 +105,7 @@ enum { #define UPROPS_AGE_MASK 0xff000000 #define UPROPS_AGE_SHIFT 24 -#define UPROPS_LB_MASK 0x007C0000 +#define UPROPS_LB_MASK 0x00FC0000 #define UPROPS_LB_SHIFT 18 #define UPROPS_EA_MASK 0x00038000 @@ -129,8 +129,8 @@ enum { */ enum { UPROPS_WHITE_SPACE, - UPROPS_BIDI_CONTROL, - UPROPS_JOIN_CONTROL, + UPROPS_WAS_BIDI_CONTROL, /* reserved, was used in format version 3 */ + UPROPS_WAS_JOIN_CONTROL, UPROPS_DASH, UPROPS_HYPHEN, UPROPS_QUOTATION_MARK, @@ -142,8 +142,8 @@ enum { UPROPS_IDEOGRAPHIC, UPROPS_DIACRITIC, UPROPS_EXTENDER, - UPROPS_LOWERCASE, - UPROPS_UPPERCASE, + UPROPS_WAS_LOWERCASE, /* reserved, was used in format version 3 */ + UPROPS_WAS_UPPERCASE, UPROPS_NONCHARACTER_CODE_POINT, UPROPS_GRAPHEME_EXTEND, UPROPS_GRAPHEME_LINK, @@ -153,7 +153,7 @@ enum { UPROPS_UNIFIED_IDEOGRAPH, UPROPS_DEFAULT_IGNORABLE_CODE_POINT, UPROPS_DEPRECATED, - UPROPS_SOFT_DOTTED, + UPROPS_WAS_SOFT_DOTTED, /* reserved, was used in format version 3 */ UPROPS_LOGICAL_ORDER_EXCEPTION, UPROPS_XID_START, UPROPS_XID_CONTINUE, @@ -167,21 +167,28 @@ enum { * Properties in vector word 2 * Bits * 31..24 More binary properties - * 13..11 Joining Type - * 10.. 5 Joining Group + * 23..19 reserved + * 18..14 Sentence Break + * 13..10 Word Break + * 9.. 5 Grapheme Cluster Break * 4.. 0 Decomposition Type */ -#define UPROPS_JT_MASK 0x00003800 -#define UPROPS_JT_SHIFT 11 +#define UPROPS_SB_MASK 0x0007c000 +#define UPROPS_SB_SHIFT 14 + +#define UPROPS_WB_MASK 0x00003c00 +#define UPROPS_WB_SHIFT 10 -#define UPROPS_JG_MASK 0x000007e0 -#define UPROPS_JG_SHIFT 5 +#define UPROPS_GCB_MASK 0x000003e0 +#define UPROPS_GCB_SHIFT 5 #define UPROPS_DT_MASK 0x0000001f enum { UPROPS_V2_S_TERM=24, /* new in ICU 3.0 and Unicode 4.0.1 */ UPROPS_V2_VARIATION_SELECTOR, + UPROPS_V2_PATTERN_SYNTAX, /* new in ICU 3.4 and Unicode 4.1 */ + UPROPS_V2_PATTERN_WHITE_SPACE, UPROPS_V2_TOP /* must be <=32 */ }; @@ -217,6 +224,31 @@ uprv_getMaxValues(int32_t column); U_CFUNC UHangulSyllableType uchar_getHST(UChar32 c); +/** + * Checks if c is alphabetic, or a decimal digit; implements UCHAR_POSIX_ALNUM. + * @internal + */ +U_CFUNC UBool +u_isalnumPOSIX(UChar32 c); + +/** + * Checks if c is in + * [^\p{space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}] + * with space=\p{Whitespace} and Control=Cc. + * Implements UCHAR_POSIX_GRAPH. + * @internal + */ +U_CFUNC UBool +u_isgraphPOSIX(UChar32 c); + +/** + * Checks if c is in \p{graph}\p{blank} - \p{cntrl}. + * Implements UCHAR_POSIX_PRINT. + * @internal + */ +U_CFUNC UBool +u_isprintPOSIX(UChar32 c); + /** Turn a bit index into a bit flag. @internal */ #define FLAG(n) ((uint32_t)1<<(n)) @@ -259,8 +291,10 @@ enum { FF =0x000c, CR =0x000d, U_A =0x0041, + U_F =0x0046, U_Z =0x005a, U_a =0x0061, + U_f =0x0066, U_z =0x007a, DEL =0x007f, NL =0x0085, @@ -275,6 +309,12 @@ enum { WJ =0x2060, INHSWAP =0x206a, NOMDIG =0x206f, + U_FW_A =0xff21, + U_FW_F =0xff26, + U_FW_Z =0xff3a, + U_FW_a =0xff41, + U_FW_f =0xff46, + U_FW_z =0xff5a, ZWNBSP =0xfeff }; @@ -285,19 +325,6 @@ enum { U_CAPI int32_t U_EXPORT2 uprv_getMaxCharNameLength(void); -#if 0 -/* -Currently not used but left for future use. Probably by UnicodeSet. -urename.h and unames.c changed accordingly. -*/ -/** - * Get the maximum length of an ISO comment. - * @return 0 if no ISO comments available. - */ -U_CAPI int32_t U_EXPORT2 -uprv_getMaxISOCommentLength(); -#endif - /** * Fills set with characters that are used in Unicode character names. * Includes all characters that are used in regular/Unicode 1.0/extended names. @@ -305,22 +332,7 @@ uprv_getMaxISOCommentLength(); * @param sa USetAdder to receive characters. */ U_CAPI void U_EXPORT2 -uprv_getCharNameCharacters(USetAdder *sa); - -#if 0 -/* -Currently not used but left for future use. Probably by UnicodeSet. -urename.h and unames.c changed accordingly. -*/ -/** - * Fills set with characters that are used in Unicode character names. - * Just empties the set if no ISO comments are available. - * @param sa USetAdder to receive characters. - */ -U_CAPI void U_EXPORT2 -uprv_getISOCommentCharacters(USetAdder *sa); -*/ -#endif +uprv_getCharNameCharacters(const USetAdder *sa); /** * Constants for which data and implementation files provide which properties. @@ -330,8 +342,10 @@ uprv_getISOCommentCharacters(USetAdder *sa); enum UPropertySource { /** No source, not a supported property. */ UPROPS_SRC_NONE, - /** From uchar.c/uprops.icu */ + /** From uchar.c/uprops.icu main trie */ UPROPS_SRC_CHAR, + /** From uchar.c/uprops.icu properties vectors trie */ + UPROPS_SRC_PROPSVEC, /** Hangul_Syllable_Type, from uchar.c/uprops.icu */ UPROPS_SRC_HST, /** From unames.c/unames.icu */ @@ -340,9 +354,11 @@ enum UPropertySource { UPROPS_SRC_NORM, /** From ucase.c/ucase.icu */ UPROPS_SRC_CASE, - /** From ubidi.c/ubidi.icu */ + /** From ubidi_props.c/ubidi.icu */ UPROPS_SRC_BIDI, - /** One more than the highes UPropertySource (UPROPS_SRC_) constant. */ + /** From uchar.c/uprops.icu main trie as well as properties vectors trie */ + UPROPS_SRC_CHAR_AND_PROPSVEC, + /** One more than the highest UPropertySource (UPROPS_SRC_) constant. */ UPROPS_SRC_COUNT }; typedef enum UPropertySource UPropertySource; @@ -355,19 +371,27 @@ U_CAPI UPropertySource U_EXPORT2 uprops_getSource(UProperty which); /** - * Enumerate each core properties data trie and add the + * Enumerate uprops.icu's main data trie and add the + * start of each range of same properties to the set. + * @internal + */ +U_CAPI void U_EXPORT2 +uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); + +/** + * Enumerate uprops.icu's properties vectors trie and add the * start of each range of same properties to the set. * @internal */ U_CAPI void U_EXPORT2 -uchar_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode); +upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); /** * Same as uchar_addPropertyStarts() but only for Hangul_Syllable_Type. * @internal */ U_CAPI void U_EXPORT2 -uhst_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode); +uhst_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); /** * Return a set of characters for property enumeration. @@ -378,7 +402,7 @@ uhst_addPropertyStarts(USetAdder *sa, UErrorCode *pErrorCode); * @internal */ U_CAPI void U_EXPORT2 -uprv_getInclusions(USetAdder *sa, UErrorCode *pErrorCode); +uprv_getInclusions(const USetAdder *sa, UErrorCode *pErrorCode); /** * Swap the ICU Unicode properties file. See uchar.c. diff --git a/icuSources/common/urbtok.cpp b/icuSources/common/urbtok.cpp new file mode 100644 index 00000000..7c217c9f --- /dev/null +++ b/icuSources/common/urbtok.cpp @@ -0,0 +1,169 @@ +/* +***************************************************************************************** +* Copyright (C) 2006, Apple Computer, Inc. +* All Rights Reserved. +***************************************************************************************** +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/urbtok.h" + +#include "rbtok.h" +#include "unicode/ustring.h" +#include "rbbidata.h" +#include "cmemory.h" +#include "ucmndata.h" + +U_NAMESPACE_USE + +U_CAPI UBreakIterator* U_EXPORT2 +urbtok_openRules(const UChar *rules, + int32_t rulesLength, + UParseError *parseErr, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + + BreakIterator *result = 0; + UnicodeString ruleString(rules, rulesLength); + result = new RuleBasedTokenizer(ruleString, *parseErr, *status); + if(U_FAILURE(*status)) { + return 0; + } + + UBreakIterator *uBI = (UBreakIterator *)result; + return uBI; +} + +U_CAPI UBreakIterator* U_EXPORT2 +urbtok_openBinaryRules(const uint8_t *rules, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + + uint32_t length = ((const RBBIDataHeader *)rules)->fLength; + uint8_t *ruleCopy = (uint8_t *) uprv_malloc(length); + if (ruleCopy == 0) + { + *status = U_MEMORY_ALLOCATION_ERROR; + return 0; + } + // Copy the rules so they can be adopted by the tokenizer + uprv_memcpy(ruleCopy, rules, length); + BreakIterator *result = 0; + result = new RuleBasedTokenizer(ruleCopy, *status); + if(U_FAILURE(*status)) { + return 0; + } + + UBreakIterator *uBI = (UBreakIterator *)result; + return uBI; +} + +U_CAPI uint32_t U_EXPORT2 +urbtok_getBinaryRules(UBreakIterator *bi, + uint8_t *buffer, + uint32_t buffSize, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + + uint32_t length; + const uint8_t *rules = ((RuleBasedBreakIterator *)bi)->getBinaryRules(length); + if (buffer != 0) + { + if (length > buffSize) + { + *status = U_BUFFER_OVERFLOW_ERROR; + } + else + { + uprv_memcpy(buffer, rules, length); + } + } + return length; +} + +U_CAPI int32_t U_EXPORT2 +urbtok_tokenize(UBreakIterator *bi, + int32_t maxTokens, + RuleBasedTokenRange *outTokens, + unsigned long *outTokenFlags) +{ + return ((RuleBasedTokenizer *)bi)->tokenize(maxTokens, outTokens, outTokenFlags); +} + +U_CAPI void U_EXPORT2 +urbtok_swapBinaryRules(const uint8_t *rules, + uint8_t *buffer, + UBool inIsBigEndian, + UBool outIsBigEndian, + UErrorCode *status) +{ + UDataSwapper *ds = udata_openSwapper(inIsBigEndian, U_CHARSET_FAMILY, outIsBigEndian, U_CHARSET_FAMILY, status); + + if (status == NULL || U_FAILURE(*status)){ + return; + } + + uint32_t length = ds->readUInt32(((const RBBIDataHeader *)rules)->fLength); + uint32_t totalLength = sizeof(DataHeader) + length; + + DataHeader *dh = (DataHeader *)uprv_malloc(totalLength); + if (dh == 0) + { + *status = U_MEMORY_ALLOCATION_ERROR; + goto closeSwapper; + } + DataHeader *outH = (DataHeader *)uprv_malloc(totalLength); + if (outH == 0) + { + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(dh); + goto closeSwapper; + } + dh->dataHeader.headerSize = ds->readUInt16(sizeof(DataHeader)); + dh->dataHeader.magic1 = 0xda; + dh->dataHeader.magic2 = 0x27; + dh->info.size = ds->readUInt16(sizeof(UDataInfo)); + dh->info.reservedWord = 0; + dh->info.isBigEndian = inIsBigEndian; + dh->info.charsetFamily = U_CHARSET_FAMILY; + dh->info.sizeofUChar = U_SIZEOF_UCHAR; + dh->info.reservedByte = 0; + uprv_memcpy(dh->info.dataFormat, "Brk ", sizeof(dh->info.dataFormat)); + uprv_memcpy(dh->info.formatVersion, ((const RBBIDataHeader *)rules)->fFormatVersion, sizeof(dh->info.formatVersion)); + dh->info.dataVersion[0] = 4; // Unicode version + dh->info.dataVersion[1] = 1; + dh->info.dataVersion[2] = 0; + dh->info.dataVersion[3] = 0; + uprv_memcpy(((uint8_t*)dh) + sizeof(DataHeader), rules, length); + + int32_t outLength = ubrk_swap(ds, dh, totalLength, outH, status); + if (U_SUCCESS(*status) && outLength != totalLength) // something went horribly wrong + { + *status = U_INVALID_FORMAT_ERROR; + } + + if (U_SUCCESS(*status)) + { + uprv_memcpy(buffer, ((uint8_t *)outH) + sizeof(DataHeader), length); + } + uprv_free(outH); + uprv_free(dh); + +closeSwapper: + udata_closeSwapper(ds); +} + + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/ures_cnv.c b/icuSources/common/ures_cnv.c index 9326ef12..c9729019 100644 --- a/icuSources/common/ures_cnv.c +++ b/icuSources/common/ures_cnv.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -27,51 +27,49 @@ U_CAPI UResourceBundle * U_EXPORT2 ures_openU(const UChar *myPath, const char *localeID, - UErrorCode *status) { - char path[2048]; + UErrorCode *status) +{ + char pathBuffer[1024]; int32_t length; + char *path = pathBuffer; if(status==NULL || U_FAILURE(*status)) { return NULL; } if(myPath==NULL) { - *status=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; + path = NULL; } - - length=u_strlen(myPath); - if(length>=sizeof(path)) { - *status=U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } else if(uprv_isInvariantUString(myPath, length)) { - /* - * the invariant converter is sufficient for package and tree names - * and is more efficient - */ - u_UCharsToChars(myPath, path, length+1); /* length+1 to include the NUL */ - } else { -#if !UCONFIG_NO_CONVERSION - /* use the default converter to support variant-character paths */ - UConverter *cnv=u_getDefaultConverter(status); - if(U_FAILURE(*status)) { - return NULL; - } - - length=ucnv_fromUChars(cnv, path, (int32_t)sizeof(path), myPath, length, status); - u_releaseDefaultConverter(cnv); - if(U_FAILURE(*status)) { - return NULL; - } - if(length>=sizeof(path)) { - /* not NUL-terminated - path too long */ + else { + length=u_strlen(myPath); + if(length>=sizeof(pathBuffer)) { *status=U_ILLEGAL_ARGUMENT_ERROR; return NULL; - } + } else if(uprv_isInvariantUString(myPath, length)) { + /* + * the invariant converter is sufficient for package and tree names + * and is more efficient + */ + u_UCharsToChars(myPath, path, length+1); /* length+1 to include the NUL */ + } else { +#if !UCONFIG_NO_CONVERSION + /* use the default converter to support variant-character paths */ + UConverter *cnv=u_getDefaultConverter(status); + length=ucnv_fromUChars(cnv, path, (int32_t)sizeof(pathBuffer), myPath, length, status); + u_releaseDefaultConverter(cnv); + if(U_FAILURE(*status)) { + return NULL; + } + if(length>=sizeof(pathBuffer)) { + /* not NUL-terminated - path too long */ + *status=U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } #else - /* the default converter is not available */ - *status=U_UNSUPPORTED_ERROR; - return NULL; + /* the default converter is not available */ + *status=U_UNSUPPORTED_ERROR; + return NULL; #endif + } } return ures_open(path, localeID, status); diff --git a/icuSources/common/uresbund.c b/icuSources/common/uresbund.c index c3a7f0cf..1a99a241 100644 --- a/icuSources/common/uresbund.c +++ b/icuSources/common/uresbund.c @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ****************************************************************************** * @@ -45,7 +45,7 @@ static UHashtable *cache = NULL; static UMTX resbMutex = NULL; /* INTERNAL: hashes an entry */ -static int32_t U_EXPORT2 U_CALLCONV hashEntry(const UHashTok parm) { +static int32_t U_CALLCONV hashEntry(const UHashTok parm) { UResourceDataEntry *b = (UResourceDataEntry *)parm.pointer; UHashTok namekey, pathkey; namekey.pointer = b->fName; @@ -54,7 +54,7 @@ static int32_t U_EXPORT2 U_CALLCONV hashEntry(const UHashTok parm) { } /* INTERNAL: compares two entries */ -static UBool U_EXPORT2 U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) { +static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) { UResourceDataEntry *b1 = (UResourceDataEntry *)p1.pointer; UResourceDataEntry *b2 = (UResourceDataEntry *)p2.pointer; UHashTok name1, name2, path1, path2; @@ -214,7 +214,7 @@ static void initCache(UErrorCode *status) { makeCache = (cache == NULL); umtx_unlock(&resbMutex); if(makeCache) { - UHashtable *newCache = uhash_open(hashEntry, compareEntries, status); + UHashtable *newCache = uhash_open(hashEntry, compareEntries, NULL, status); if (U_FAILURE(*status)) { return; } @@ -257,7 +257,7 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE const char *myPath = NULL; char aliasName[100] = { 0 }; int32_t aliasLen = 0; - UBool isAlias = FALSE; + /*UBool isAlias = FALSE;*/ UHashTok hashkey; if(U_FAILURE(*status)) { @@ -267,7 +267,7 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE /* here we try to deduce the right locale name */ if(localeID == NULL) { /* if localeID is NULL, we're trying to open default locale */ uprv_strcpy(name, uloc_getDefault()); - } else if(uprv_strlen(localeID) == 0) { /* if localeID is "" then we try to open root locale */ + } else if(*localeID == 0) { /* if localeID is "" then we try to open root locale */ uprv_strcpy(name, kRootLocaleName); } else { /* otherwise, we'll open what we're given */ uprv_strcpy(name, localeID); @@ -320,12 +320,10 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE r->fHashKey = hashValue; r->fParent = NULL; - r->fData.data = NULL; - r->fData.pRoot = NULL; - r->fData.rootRes = 0; + uprv_memset(&r->fData, 0, sizeof(ResourceData)); r->fBogus = U_ZERO_ERROR; - /* this is the acutal loading - returns bool true/false */ + /* this is the actual loading - returns bool true/false */ result = res_load(&(r->fData), r->fPath, r->fName, status); if (result == FALSE || U_FAILURE(*status)) { @@ -338,18 +336,20 @@ static UResourceDataEntry *init_entry(const char *localeID, const char *path, UE /* handle the alias by trying to get out the %%Alias tag.*/ /* We'll try to get alias string from the bundle */ Resource aliasres = res_getResource(&(r->fData), "%%ALIAS"); - const UChar *alias = res_getString(&(r->fData), aliasres, &aliasLen); - if(alias != NULL && aliasLen > 0) { /* if there is actual alias - unload and load new data */ - u_UCharsToChars(alias, aliasName, aliasLen+1); - isAlias = TRUE; - res_unload(&(r->fData)); - result = res_load(&(r->fData), r->fPath, aliasName, status); - if (result == FALSE || U_FAILURE(*status)) { - /* we couldn't load aliased data - so we have no data */ - *status = U_USING_FALLBACK_WARNING; - r->fBogus = U_USING_FALLBACK_WARNING; + if (aliasres != RES_BOGUS) { + const UChar *alias = res_getString(&(r->fData), aliasres, &aliasLen); + if(alias != NULL && aliasLen > 0) { /* if there is actual alias - unload and load new data */ + u_UCharsToChars(alias, aliasName, aliasLen+1); + /*isAlias = TRUE;*/ + res_unload(&(r->fData)); + result = res_load(&(r->fData), r->fPath, aliasName, status); + if (result == FALSE || U_FAILURE(*status)) { + /* we couldn't load aliased data - so we have no data */ + *status = U_USING_FALLBACK_WARNING; + r->fBogus = U_USING_FALLBACK_WARNING; + } + setEntryName(r, aliasName, status); } - setEntryName(r, aliasName, status); } } @@ -459,7 +459,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID, UEr if(r != NULL) { /* if there is one real locale, we can look for parents. */ t1 = r; hasRealData = TRUE; - while (hasChopped && !isRoot && t1->fParent == NULL) { + while (hasChopped && !isRoot && t1->fParent == NULL && !t1->fData.noFallback) { /* insert regular parents */ t2 = init_entry(name, r->fPath, &parentStatus); t1->fParent = t2; @@ -501,7 +501,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID, UEr } else { /* we don't even have the root locale */ *status = U_MISSING_RESOURCE_ERROR; } - } else if(!isRoot && uprv_strcmp(t1->fName, kRootLocaleName) != 0 && t1->fParent == NULL) { + } else if(!isRoot && uprv_strcmp(t1->fName, kRootLocaleName) != 0 && t1->fParent == NULL && !r->fData.noFallback) { /* insert root locale */ t2 = init_entry(kRootLocaleName, r->fPath, &parentStatus); if(!hasRealData) { @@ -580,6 +580,80 @@ static void entryClose(UResourceDataEntry *resB) { umtx_unlock(&resbMutex); } +/* +U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd) { + if(resB->fResPath == NULL) { + resB->fResPath = resB->fResBuf; + *(resB->fResPath) = 0; + } + resB->fResPathLen = uprv_strlen(toAdd); + if(RES_BUFSIZE <= resB->fResPathLen+1) { + if(resB->fResPath == resB->fResBuf) { + resB->fResPath = (char *)uprv_malloc((resB->fResPathLen+1)*sizeof(char)); + } else { + resB->fResPath = (char *)uprv_realloc(resB->fResPath, (resB->fResPathLen+1)*sizeof(char)); + } + } + uprv_strcpy(resB->fResPath, toAdd); +} +*/ +static void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd) { + int32_t resPathLenOrig = resB->fResPathLen; + if(resB->fResPath == NULL) { + resB->fResPath = resB->fResBuf; + *(resB->fResPath) = 0; + resB->fResPathLen = 0; + } + resB->fResPathLen += lenToAdd; + if(RES_BUFSIZE <= resB->fResPathLen+1) { + if(resB->fResPath == resB->fResBuf) { + resB->fResPath = (char *)uprv_malloc((resB->fResPathLen+1)*sizeof(char)); + uprv_strcpy(resB->fResPath, resB->fResBuf); + } else { + resB->fResPath = (char *)uprv_realloc(resB->fResPath, (resB->fResPathLen+1)*sizeof(char)); + } + } + uprv_strcpy(resB->fResPath + resPathLenOrig, toAdd); +} + +static void ures_freeResPath(UResourceBundle *resB) { + if (resB->fResPath && resB->fResPath != resB->fResBuf) { + uprv_free(resB->fResPath); + } + resB->fResPath = NULL; + resB->fResPathLen = 0; +} + +static void +ures_closeBundle(UResourceBundle* resB, UBool freeBundleObj) +{ + if(resB != NULL) { + if(resB->fData != NULL) { + entryClose(resB->fData); + } + if(resB->fVersion != NULL) { + uprv_free(resB->fVersion); + } + ures_freeResPath(resB); + + if(ures_isStackObject(resB) == FALSE && freeBundleObj) { + uprv_free(resB); + } +#if 0 /*U_DEBUG*/ + else { + /* poison the data */ + uprv_memset(resB, -1, sizeof(UResourceBundle)); + } +#endif + } +} + +U_CAPI void U_EXPORT2 +ures_close(UResourceBundle* resB) +{ + ures_closeBundle(resB, TRUE); +} + static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, const char *key, int32_t index, UResourceDataEntry *realData, const UResourceBundle *parent, int32_t noAlias, @@ -613,7 +687,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, */ ++len; /* count the terminating NUL */ if(parent != NULL && parent->fResPath != NULL) { - capacity = uprv_strlen(parent->fResPath) + 1; + capacity = (int32_t)uprv_strlen(parent->fResPath) + 1; } else { capacity = 0; } @@ -634,28 +708,44 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, u_UCharsToChars(alias, chAlias, len); if(*chAlias == RES_PATH_SEPARATOR) { - /* there is a path included */ - locale = uprv_strchr(chAlias+1, RES_PATH_SEPARATOR); - if(locale == NULL) { + /* there is a path included */ + locale = uprv_strchr(chAlias+1, RES_PATH_SEPARATOR); + if(locale == NULL) { locale = uprv_strchr(chAlias, 0); /* avoid locale == NULL to make code below work */ - } else { + } else { *locale = 0; locale++; - } - path = chAlias+1; - if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */ - path = NULL; - } + } + path = chAlias+1; + if(uprv_strcmp(path, "LOCALE") == 0) { + /* this is an XPath alias, starting with "/LOCALE/" */ + /* it contains the path to a resource which should be looked up */ + /* starting in parent */ + keyPath = locale; + locale = parent->fData->fName; /* this is the parent's name */ + path = realData->fPath; /* we will be looking in the same package */ + } else { + if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */ + path = NULL; + } + keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR); + if(keyPath) { + *keyPath = 0; + keyPath++; + } + } } else { /* no path, start with a locale */ locale = chAlias; + keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR); + if(keyPath) { + *keyPath = 0; + keyPath++; + } path = realData->fPath; } - keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR); - if(keyPath) { - *keyPath = 0; - keyPath++; - } + + { /* got almost everything, let's try to open */ /* first, open the bundle with real data */ @@ -682,9 +772,9 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, } if(key) { /* we need to make keyPath from parent's fResPath and - * current key, if there is a key associated - */ - len = uprv_strlen(key) + 1; + * current key, if there is a key associated + */ + len = (int32_t)(uprv_strlen(key) + 1); if(len > capacity) { capacity = len; if(chAlias == stackAlias) { @@ -711,7 +801,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, } } if(r != RES_BOGUS) { - result = init_resb_result(&(mainRes->fResData), r, key, -1, mainRes->fData, parent, noAlias+1, resB, status); + result = init_resb_result(&(mainRes->fResData), r, temp, -1, mainRes->fData, mainRes, noAlias+1, resB, status); } else { *status = U_MISSING_RESOURCE_ERROR; result = resB; @@ -724,17 +814,46 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, * anotheralias:alias { "/ICUDATA/sh/CollationElements" } * aliastest resource should finally have the sequence, not collation elements. */ + UResourceDataEntry *dataEntry = mainRes->fData; + char stackPath[URES_MAX_BUFFER_SIZE]; + char *pathBuf = stackPath, *myPath = pathBuf; + if(uprv_strlen(keyPath) > URES_MAX_BUFFER_SIZE) { + pathBuf = (char *)uprv_malloc((uprv_strlen(keyPath)+1)*sizeof(char)); + if(pathBuf == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + } + uprv_strcpy(pathBuf, keyPath); result = mainRes; - while(*keyPath && U_SUCCESS(*status)) { - r = res_findResource(&(result->fResData), result->fRes, &keyPath, &temp); - if(r == RES_BOGUS) { - *status = U_MISSING_RESOURCE_ERROR; - result = resB; - break; + /* now we have fallback following here */ + do { + r = dataEntry->fData.rootRes; + /* this loop handles 'found' resources over several levels */ + while(*myPath && U_SUCCESS(*status)) { + r = res_findResource(&(dataEntry->fData), r, &myPath, &temp); + if(r != RES_BOGUS) { /* found a resource, but it might be an indirection */ + resB = init_resb_result(&(dataEntry->fData), r, temp, -1, dataEntry, result, noAlias+1, resB, status); + result = resB; + if(result) { + r = result->fRes; /* switch to a new resource, possibly a new tree */ + dataEntry = result->fData; + } + } else { /* no resource found, we don't really want to look anymore on this level */ + break; + } } - resB = init_resb_result(&(result->fResData), r, key, -1, result->fData, parent, noAlias+1, resB, status); + dataEntry = dataEntry->fParent; + uprv_strcpy(pathBuf, keyPath); + myPath = pathBuf; + } while(r == RES_BOGUS && dataEntry != NULL); + if(r == RES_BOGUS) { + *status = U_MISSING_RESOURCE_ERROR; result = resB; } + if(pathBuf != stackPath) { + uprv_free(pathBuf); + } } } else { /* we failed to open the resource we're aliasing to */ *status = intStatus; @@ -774,9 +893,17 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, if(resB->fVersion != NULL) { uprv_free(resB->fVersion); } + /* + weiv: if stack object was passed in, it doesn't really need to be reinited, + since the purpose of initing is to remove stack junk. However, at this point + we would not do anything to an allocated object, so stack object should be + treated the same + */ + /* if(ures_isStackObject(resB) != FALSE) { ures_initStackObject(resB); } + */ if(parent != resB) { ures_freeResPath(resB); } @@ -786,28 +913,35 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, resB->fHasFallback = FALSE; resB->fIsTopLevel = FALSE; resB->fIndex = -1; - resB->fKey = key; + resB->fKey = key; resB->fParentRes = parent; resB->fTopLevelData = parent->fTopLevelData; if(parent->fResPath && parent != resB) { - ures_appendResPath(resB, parent->fResPath, parent->fResPathLen); + ures_appendResPath(resB, parent->fResPath, parent->fResPathLen); } if(key != NULL) { - ures_appendResPath(resB, key, uprv_strlen(key)); - ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1); - } else { - char buf[256]; - int32_t len = T_CString_integerToString(buf, index, 10); - ures_appendResPath(resB, buf, len); - ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1); + ures_appendResPath(resB, key, (int32_t)uprv_strlen(key)); + if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) { + ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1); + } + } else if(index >= 0) { + char buf[256]; + int32_t len = T_CString_integerToString(buf, index, 10); + ures_appendResPath(resB, buf, len); + if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) { + ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1); + } + } + /* Make sure that Purify doesn't complain about uninitialized memory copies. */ + { + int32_t usedLen = ((resB->fResBuf == resB->fResPath) ? resB->fResPathLen : 0); + uprv_memset(resB->fResBuf + usedLen, 0, sizeof(resB->fResBuf) - usedLen); } resB->fVersion = NULL; resB->fRes = r; /*resB->fParent = parent->fRes;*/ - resB->fResData.data = rdata->data; - resB->fResData.pRoot = rdata->pRoot; - resB->fResData.rootRes = rdata->rootRes; + uprv_memcpy(&resB->fResData, rdata, sizeof(ResourceData)); resB->fSize = res_countArrayItems(&(resB->fResData), resB->fRes); return resB; } @@ -828,18 +962,7 @@ UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *origin } } else { isStackObject = ures_isStackObject(r); - if(U_FAILURE(*status)) { - return r; - } - ures_close(r); - if(isStackObject == FALSE) { - r = (UResourceBundle *)uprv_malloc(sizeof(UResourceBundle)); - /* test for NULL */ - if (r == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - } + ures_closeBundle(r, FALSE); } uprv_memcpy(r, original, sizeof(UResourceBundle)); r->fResPath = NULL; @@ -851,10 +974,8 @@ UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *origin if(r->fData != NULL) { entryIncrease(r->fData); } - return r; - } else { - return r; } + return r; } /** @@ -887,6 +1008,78 @@ U_CAPI const UChar* U_EXPORT2 ures_getString(const UResourceBundle* resB, int32_ return NULL; } +static const char * +ures_toUTF8String(const UChar *s16, int32_t length16, + char *dest, int32_t *pLength, + UBool forceCopy, + UErrorCode *status) { + int32_t capacity; + + if (U_FAILURE(*status)) { + return NULL; + } + if (pLength != NULL) { + capacity = *pLength; + } else { + capacity = 0; + } + if (capacity < 0 || (capacity > 0 && dest == NULL)) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + if (length16 == 0) { + /* empty string, return as read-only pointer */ + if (pLength != NULL) { + *pLength = 0; + } + if (forceCopy) { + u_terminateChars(dest, capacity, 0, status); + return dest; + } else { + return ""; + } + } else { + /* We need to transform the string to the destination buffer. */ + if (capacity < length16) { + /* No chance for the string to fit. Pure preflighting. */ + return u_strToUTF8(NULL, 0, pLength, s16, length16, status); + } + if (!forceCopy && (length16 <= 0x2aaaaaaa)) { + /* + * We know the string will fit into dest because each UChar turns + * into at most three UTF-8 bytes. Fill the latter part of dest + * so that callers do not expect to use dest as a string pointer, + * hopefully leading to more robust code for when resource bundles + * may store UTF-8 natively. + * (In which case dest would not be used at all.) + * + * We do not do this if forceCopy=TRUE because then the caller + * expects the string to start exactly at dest. + * + * The test above for <= 0x2aaaaaaa prevents overflows. + * The +1 is for the NUL terminator. + */ + int32_t maxLength = 3 * length16 + 1; + if (capacity > maxLength) { + dest += capacity - maxLength; + capacity = maxLength; + } + } + return u_strToUTF8(dest, capacity, pLength, s16, length16, status); + } +} + +U_DRAFT const char * U_EXPORT2 +ures_getUTF8String(const UResourceBundle *resB, + char *dest, int32_t *pLength, + UBool forceCopy, + UErrorCode *status) { + int32_t length16; + const UChar *s16 = ures_getString(resB, &length16, status); + return ures_toUTF8String(s16, length16, dest, pLength, forceCopy, status); +} + U_CAPI const uint8_t* U_EXPORT2 ures_getBinary(const UResourceBundle* resB, int32_t* len, UErrorCode* status) { if (status==NULL || U_FAILURE(*status)) { @@ -1060,7 +1253,6 @@ U_CAPI const UChar* U_EXPORT2 ures_getNextString(UResourceBundle *resB, int32_t* case URES_INT_VECTOR: default: return NULL; - break; } } @@ -1203,6 +1395,17 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resB, return NULL; } +U_DRAFT const char * U_EXPORT2 +ures_getUTF8StringByIndex(const UResourceBundle *resB, + int32_t index, + char *dest, int32_t *pLength, + UBool forceCopy, + UErrorCode *status) { + int32_t length16; + const UChar *s16 = ures_getStringByIndex(resB, index, &length16, status); + return ures_toUTF8String(s16, length16, dest, pLength, forceCopy, status); +} + /*U_CAPI const char *ures_getResPath(UResourceBundle *resB) { return resB->fResPath; }*/ @@ -1213,7 +1416,7 @@ ures_findResource(const char* path, UResourceBundle *fillIn, UErrorCode *status) UResourceBundle *first = NULL; UResourceBundle *result = fillIn; char *packageName = NULL; - char *pathToResource = NULL; + char *pathToResource = NULL, *save = NULL; char *locale = NULL, *localeEnd = NULL; int32_t length; @@ -1221,8 +1424,8 @@ ures_findResource(const char* path, UResourceBundle *fillIn, UErrorCode *status) return result; } - length = uprv_strlen(path)+1; - pathToResource = (char *)uprv_malloc(length*sizeof(char)); + length = (int32_t)(uprv_strlen(path)+1); + save = pathToResource = (char *)uprv_malloc(length*sizeof(char)); /* test for NULL */ if(pathToResource == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; @@ -1258,7 +1461,7 @@ ures_findResource(const char* path, UResourceBundle *fillIn, UErrorCode *status) } ures_close(first); } - uprv_free(pathToResource); + uprv_free(save); return result; } @@ -1285,17 +1488,31 @@ ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *f *status = U_MISSING_RESOURCE_ERROR; break; } - } while(uprv_strlen(path)); /* there is more stuff in the path */ + } while(*path); /* there is more stuff in the path */ return result; } +U_INTERNAL const UChar* U_EXPORT2 +ures_getStringByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, + int32_t* len, + UErrorCode *status) { + + UResourceBundle stack; + const UChar* retVal = NULL; + ures_initStackObject(&stack); + ures_getByKeyWithFallback(resB, inKey, &stack, status); + retVal = ures_getString(&stack, len, status); + ures_close(&stack); + return retVal; +} U_CAPI UResourceBundle* U_EXPORT2 ures_getByKeyWithFallback(const UResourceBundle *resB, const char* inKey, UResourceBundle *fillIn, UErrorCode *status) { - Resource res = RES_BOGUS; + Resource res = RES_BOGUS, rootRes = RES_BOGUS; /*UResourceDataEntry *realData = NULL;*/ const char *key = inKey; UResourceBundle *helper = NULL; @@ -1315,27 +1532,45 @@ ures_getByKeyWithFallback(const UResourceBundle *resB, UResourceDataEntry *dataEntry = resB->fData; char path[256]; char* myPath = path; + const char* resPath = resB->fResPath; + int32_t len = resB->fResPathLen; while(res == RES_BOGUS && dataEntry->fParent != NULL) { /* Otherwise, we'll look in parents */ dataEntry = dataEntry->fParent; + rootRes = dataEntry->fData.rootRes; if(dataEntry->fBogus == U_ZERO_ERROR) { - uprv_strncpy(path, resB->fResPath, resB->fResPathLen); - uprv_strcpy(path+resB->fResPathLen, inKey); + uprv_strncpy(path, resPath, len); + uprv_strcpy(path+len, inKey); myPath = path; key = inKey; do { - res = res_findResource(&(dataEntry->fData), dataEntry->fData.rootRes, &myPath, &key); + res = res_findResource(&(dataEntry->fData), rootRes, &myPath, &key); if (RES_GET_TYPE(res) == URES_ALIAS && *myPath) { /* We hit an alias, but we didn't finish following the path. */ - helper = init_resb_result(&(dataEntry->fData), res, inKey, -1, dataEntry, resB, 0, helper, status); - dataEntry = helper->fData; + helper = init_resb_result(&(dataEntry->fData), res, NULL, -1, dataEntry, resB, 0, helper, status); + /*helper = init_resb_result(&(dataEntry->fData), res, inKey, -1, dataEntry, resB, 0, helper, status);*/ + if(helper) { + dataEntry = helper->fData; + rootRes = helper->fRes; + resPath = helper->fResPath; + len = helper->fResPathLen; + + } else { + break; + } } - } while(uprv_strlen(myPath)); + } while(*myPath); /* Continue until the whole path is consumed */ } } /*const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status);*/ if(res != RES_BOGUS) { /* check if resB->fResPath gives the right name here */ + if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) { + *status = U_USING_DEFAULT_WARNING; + } else { + *status = U_USING_FALLBACK_WARNING; + } + fillIn = init_resb_result(&(dataEntry->fData), res, inKey, -1, dataEntry, resB, 0, fillIn, status); } else { *status = U_MISSING_RESOURCE_ERROR; @@ -1489,6 +1724,16 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c return NULL; } +U_DRAFT const char * U_EXPORT2 +ures_getUTF8StringByKey(const UResourceBundle *resB, + const char *key, + char *dest, int32_t *pLength, + UBool forceCopy, + UErrorCode *status) { + int32_t length16; + const UChar *s16 = ures_getStringByKey(resB, key, &length16, status); + return ures_toUTF8String(s16, length16, dest, pLength, forceCopy, status); +} /* TODO: clean from here down */ @@ -1524,13 +1769,10 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle, switch(type) { case ULOC_ACTUAL_LOCALE: return resourceBundle->fData->fName; - break; case ULOC_VALID_LOCALE: return resourceBundle->fTopLevelData->fName; - break; case ULOC_REQUESTED_LOCALE: return NULL; - break; default: *status = U_ILLEGAL_ARGUMENT_ERROR; return NULL; @@ -1538,52 +1780,6 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle, } } - -/* -U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd) { - if(resB->fResPath == NULL) { - resB->fResPath = resB->fResBuf; - *(resB->fResPath) = 0; - } - resB->fResPathLen = uprv_strlen(toAdd); - if(RES_BUFSIZE <= resB->fResPathLen+1) { - if(resB->fResPath == resB->fResBuf) { - resB->fResPath = (char *)uprv_malloc((resB->fResPathLen+1)*sizeof(char)); - } else { - resB->fResPath = (char *)uprv_realloc(resB->fResPath, (resB->fResPathLen+1)*sizeof(char)); - } - } - uprv_strcpy(resB->fResPath, toAdd); -} -*/ -U_CFUNC void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd) { - int32_t resPathLenOrig = resB->fResPathLen; - if(resB->fResPath == NULL) { - resB->fResPath = resB->fResBuf; - *(resB->fResPath) = 0; - resB->fResPathLen = 0; - } - resB->fResPathLen += lenToAdd; - if(RES_BUFSIZE <= resB->fResPathLen+1) { - if(resB->fResPath == resB->fResBuf) { - resB->fResPath = (char *)uprv_malloc((resB->fResPathLen+1)*sizeof(char)); - uprv_strcpy(resB->fResPath, resB->fResBuf); - } else { - resB->fResPath = (char *)uprv_realloc(resB->fResPath, (resB->fResPathLen+1)*sizeof(char)); - } - } - uprv_strcpy(resB->fResPath + resPathLenOrig, toAdd); -} - -U_CFUNC void ures_freeResPath(UResourceBundle *resB) { - if (resB->fResPath && resB->fResPath != resB->fResBuf) { - uprv_free(resB->fResPath); - } - resB->fResPath = NULL; - resB->fResPathLen = 0; -} - - U_CFUNC const char* ures_getName(const UResourceBundle* resB) { if(resB == NULL) { return NULL; @@ -1611,37 +1807,31 @@ U_CAPI void U_EXPORT2 ures_openFillIn(UResourceBundle *r, const char* path, const char* localeID, UErrorCode* status) { if(r == NULL) { - *status = U_INTERNAL_PROGRAM_ERROR; + *status = U_ILLEGAL_ARGUMENT_ERROR; } else { UResourceDataEntry *firstData; + UBool isStackObject = ures_isStackObject(r); + + ures_closeBundle(r, FALSE); + uprv_memset(r, 0, sizeof(UResourceBundle)); + ures_setIsStackObject(r, isStackObject); r->fHasFallback = TRUE; r->fIsTopLevel = TRUE; - r->fKey = NULL; - r->fVersion = NULL; r->fIndex = -1; - if(r->fData != NULL) { - entryClose(r->fData); - } - if(r->fVersion != NULL) { - uprv_free(r->fVersion); - } r->fData = entryOpen(path, localeID, status); + if(U_FAILURE(*status)) { + return; + } /* this is a quick fix to get regular data in bundle - until construction is cleaned up */ firstData = r->fData; while(firstData->fBogus != U_ZERO_ERROR && firstData->fParent != NULL) { firstData = firstData->fParent; } - r->fResData.data = firstData->fData.data; - r->fResData.pRoot = firstData->fData.pRoot; - r->fResData.rootRes = firstData->fData.rootRes; + uprv_memcpy(&r->fResData, &firstData->fData, sizeof(ResourceData)); + r->fHasFallback=(UBool)!r->fResData.noFallback; r->fRes = r->fResData.rootRes; r->fSize = res_countArrayItems(&(r->fResData), r->fRes); - /*r->fParent = RES_BOGUS;*/ - /*r->fResPath = NULL;*/ - r->fParentRes = NULL; r->fTopLevelData = r->fData; - - ures_freeResPath(r); } } @@ -1653,14 +1843,13 @@ ures_open(const char* path, char canonLocaleID[100]; UResourceDataEntry *hasData = NULL; UResourceBundle *r; - int32_t length; if(status == NULL || U_FAILURE(*status)) { return NULL; } /* first "canonicalize" the locale ID */ - length = uloc_getBaseName(localeID, canonLocaleID, sizeof(canonLocaleID), status); + uloc_getBaseName(localeID, canonLocaleID, sizeof(canonLocaleID), status); if(U_FAILURE(*status) || *status == U_STRING_NOT_TERMINATED_WARNING) { *status = U_ILLEGAL_ARGUMENT_ERROR; return NULL; @@ -1672,18 +1861,16 @@ ures_open(const char* path, return NULL; } + uprv_memset(r, 0, sizeof(UResourceBundle)); r->fHasFallback = TRUE; r->fIsTopLevel = TRUE; ures_setIsStackObject(r, FALSE); - r->fKey = NULL; - r->fVersion = NULL; r->fIndex = -1; r->fData = entryOpen(path, canonLocaleID, status); if(U_FAILURE(*status)) { uprv_free(r); return NULL; } - r->fParentRes = NULL; r->fTopLevelData = r->fData; hasData = r->fData; @@ -1699,14 +1886,10 @@ ures_open(const char* path, } } - r->fResData.data = hasData->fData.data; - r->fResData.pRoot = hasData->fData.pRoot; - r->fResData.rootRes = hasData->fData.rootRes; + uprv_memcpy(&r->fResData, &hasData->fData, sizeof(ResourceData)); + r->fHasFallback=(UBool)!r->fResData.noFallback; r->fRes = r->fResData.rootRes; - /*r->fParent = RES_BOGUS;*/ r->fSize = res_countArrayItems(&(r->fResData), r->fRes); - r->fResPath = NULL; - r->fResPathLen = 0; /* if(r->fData->fPath != NULL) { ures_setResPath(r, r->fData->fPath); @@ -1761,9 +1944,8 @@ ures_openDirect(const char* path, const char* localeID, UErrorCode* status) { r->fKey = NULL; r->fVersion = NULL; - r->fResData.data = r->fData->fData.data; - r->fResData.pRoot = r->fData->fData.pRoot; - r->fResData.rootRes = r->fData->fData.rootRes; + uprv_memcpy(&r->fResData, &r->fData->fData, sizeof(ResourceData)); + /* r->fHasFallback remains FALSE here in ures_openDirect() */ r->fRes = r->fResData.rootRes; /*r->fParent = RES_BOGUS;*/ r->fSize = res_countArrayItems(&(r->fResData), r->fRes); @@ -1806,30 +1988,6 @@ ures_countArrayItems(const UResourceBundle* resourceBundle, } } -U_CAPI void U_EXPORT2 -ures_close(UResourceBundle* resB) -{ - if(resB != NULL) { - if(resB->fData != NULL) { - entryClose(resB->fData); - } - if(resB->fVersion != NULL) { - uprv_free(resB->fVersion); - } - ures_freeResPath(resB); - - if(ures_isStackObject(resB) == FALSE) { - uprv_free(resB); - } - else { -#if 0 /*U_DEBUG*/ - /* poison the data */ - uprv_memset(resB, -1, sizeof(UResourceBundle)); -#endif - } - } -} - U_CAPI const char* U_EXPORT2 ures_getVersionNumber(const UResourceBundle* resourceBundle) { @@ -1863,7 +2021,7 @@ ures_getVersionNumber(const UResourceBundle* resourceBundle) resourceBundle->fVersion[len] = '\0'; } else { - uprv_strcpy(resourceBundle->fVersion, kDefaultMinorVersion); + uprv_strcpy(resourceBundle->fVersion, kDefaultMinorVersion); } } @@ -1916,7 +2074,7 @@ ures_loc_nextLocale(UEnumeration* en, int32_t len = 0; if(ures_hasNext(res) && (k = ures_getNextResource(res, &ctx->curr, status))) { result = ures_getKey(k); - len = uprv_strlen(result); + len = (int32_t)uprv_strlen(result); } if (resultLength) { *resultLength = len; @@ -2266,7 +2424,7 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, ures_close(&bund1); ures_close(&bund2); - length = uprv_strlen(found); + length = (int32_t)uprv_strlen(found); if(U_SUCCESS(*status)) { int32_t copyLength = uprv_min(length, resultCapacity); @@ -2307,8 +2465,8 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) locs = ures_openAvailableLocales(path, status); if(U_FAILURE(*status)) { - ures_close(&item); - ures_close(&subItem); + ures_close(&item); + ures_close(&subItem); return NULL; } @@ -2344,7 +2502,7 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) && U_SUCCESS(subStatus)) { const char *k; int32_t i; - k = ures_getKey(&subItem); + k = ures_getKey(subPtr); #if defined(URES_TREE_DEBUG) /* fprintf(stderr, "%s | %s | %s | %s\n", path?path:"", keyword, locale, k); */ @@ -2355,7 +2513,7 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) } } if(k && *k) { - int32_t kLen = uprv_strlen(k); + int32_t kLen = (int32_t)uprv_strlen(k); if(!uprv_strcmp(k,DEFAULT_TAG)) { continue; /* don't need 'default'. */ } @@ -2387,5 +2545,63 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status) #endif return uloc_openKeywordList(valuesBuf, valuesIndex, status); } - +U_INTERNAL UBool U_EXPORT2 +ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){ + if(res1==NULL || res2==NULL){ + return res1==res2; /* pointer comparision */ + } + if(res1->fKey==NULL|| res2->fKey==NULL){ + return (res1->fKey==res2->fKey); + }else{ + if(uprv_strcmp(res1->fKey, res2->fKey)!=0){ + return FALSE; + } + } + if(uprv_strcmp(res1->fData->fName, res2->fData->fName)!=0){ + return FALSE; + } + if(res1->fData->fPath == NULL|| res2->fData->fPath==NULL){ + return (res1->fData->fPath == res2->fData->fPath); + }else{ + if(uprv_strcmp(res1->fData->fPath, res2->fData->fPath)!=0){ + return FALSE; + } + } + if(uprv_strcmp(res1->fData->fParent->fName, res2->fData->fParent->fName)!=0){ + return FALSE; + } + if(uprv_strcmp(res1->fData->fParent->fPath, res2->fData->fParent->fPath)!=0){ + return FALSE; + } + if(uprv_strncmp(res1->fResPath, res2->fResPath, res1->fResPathLen)!=0){ + return FALSE; + } + if(res1->fRes != res2->fRes){ + return FALSE; + } + return TRUE; +} +U_INTERNAL UResourceBundle* U_EXPORT2 +ures_clone(const UResourceBundle* res, UErrorCode* status){ + UResourceBundle* bundle = NULL; + UResourceBundle* ret = NULL; + if(U_FAILURE(*status) || res == NULL){ + return NULL; + } + bundle = ures_open(res->fData->fPath, res->fData->fName, status); + if(res->fResPath!=NULL){ + ret = ures_findSubResource(bundle, res->fResPath, NULL, status); + ures_close(bundle); + }else{ + ret = bundle; + } + return ret; +} +U_INTERNAL const UResourceBundle* U_EXPORT2 +ures_getParentBundle(const UResourceBundle* res){ + if(res==NULL){ + return NULL; + } + return res->fParentRes; +} /* eof */ diff --git a/icuSources/common/uresdata.c b/icuSources/common/uresdata.c index 4e3136f6..4d947f5b 100644 --- a/icuSources/common/uresdata.c +++ b/icuSources/common/uresdata.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * * -* Copyright (C) 1999-2004, International Business Machines Corporation * +* Copyright (C) 1999-2006, International Business Machines Corporation * * and others. All Rights Reserved. * * * ******************************************************************************* @@ -119,72 +119,79 @@ static Resource _res_findTableItem(const Resource *pRoot, const Resource res, const char *key, int32_t *index, const char **realKey) { const uint16_t *p=(const uint16_t *)RES_GET_POINTER(pRoot, res); - int32_t i, start, limit; + uint32_t mid, start, limit; + uint32_t lastMid; + int result; limit=*p++; /* number of entries */ - if(limit == 0) { /* this table is empty */ - *index=URESDATA_ITEM_NOT_FOUND; - return RES_BOGUS; - } + if(limit != 0) { + /* do a binary search for the key */ + start=0; + lastMid = UINT32_MAX; + for (;;) { + mid = (uint32_t)((start + limit) / 2); + if (lastMid == mid) { /* Have we moved? */ + break; /* We haven't moved, and it wasn't found. */ + } + lastMid = mid; + result = uprv_strcmp(key, RES_GET_KEY(pRoot, p[mid])); - /* do a binary search for the key */ - start=0; - while(start 0) { + start = mid; + } else { + /* We found it! */ + *index=mid; + *realKey=RES_GET_KEY(pRoot, p[mid]); + limit=*(p-1); /* itemCount */ + return ((const Resource *)(p+limit+(~limit&1)))[mid]; + } } } - /* did we really find it? */ - if(uprv_strcmp(key, RES_GET_KEY(pRoot, p[start]))==0) { - *index=start; - *realKey=RES_GET_KEY(pRoot, p[start]); - limit=*(p-1); /* itemCount */ - return ((const Resource *)(p+limit+(~limit&1)))[start]; - } else { - *index=URESDATA_ITEM_NOT_FOUND; - return RES_BOGUS; /* not found */ - } + *index=URESDATA_ITEM_NOT_FOUND; + return RES_BOGUS; /* not found or table is empty. */ } static Resource _res_findTable32Item(const Resource *pRoot, const Resource res, const char *key, int32_t *index, const char **realKey) { const int32_t *p=(const int32_t *)RES_GET_POINTER(pRoot, res); - int32_t i, start, limit; + int32_t mid, start, limit; + int32_t lastMid; + int result; limit=*p++; /* number of entries */ - if(limit == 0) { /* this table is empty */ - *index=URESDATA_ITEM_NOT_FOUND; - return RES_BOGUS; - } + if(limit != 0) { + /* do a binary search for the key */ + start=0; + lastMid = INT32_MAX; + for (;;) { + mid = (uint32_t)((start + limit) / 2); + if (lastMid == mid) { /* Have we moved? */ + break; /* We haven't moved, and it wasn't found. */ + } + lastMid = mid; + result = uprv_strcmp(key, RES_GET_KEY(pRoot, p[mid])); - /* do a binary search for the key */ - start=0; - while(start 0) { + start = mid; + } else { + /* We found it! */ + *index=mid; + *realKey=RES_GET_KEY(pRoot, p[mid]); + return ((const Resource *)(p+(*(p-1))))[mid]; + } } } - /* did we really find it? */ - if(uprv_strcmp(key, RES_GET_KEY(pRoot, p[start]))==0) { - *index=start; - *realKey=RES_GET_KEY(pRoot, p[start]); - limit=*(p-1); /* itemCount */ - return ((const Resource *)(p+limit))[start]; - } else { - *index=URESDATA_ITEM_NOT_FOUND; - return RES_BOGUS; /* not found */ - } + *index=URESDATA_ITEM_NOT_FOUND; + return RES_BOGUS; /* not found or table is empty. */ } /* helper for res_load() ---------------------------------------------------- */ @@ -193,6 +200,7 @@ static UBool U_CALLCONV isAcceptable(void *context, const char *type, const char *name, const UDataInfo *pInfo) { + uprv_memcpy(context, pInfo->formatVersion, 4); return (UBool)( pInfo->size>=20 && pInfo->isBigEndian==U_IS_BIG_ENDIAN && @@ -210,10 +218,11 @@ isAcceptable(void *context, U_CFUNC UBool res_load(ResourceData *pResData, const char *path, const char *name, UErrorCode *errorCode) { + UVersionInfo formatVersion; UResType rootType; /* load the ResourceBundle file */ - pResData->data=udata_openChoice(path, "res", name, isAcceptable, NULL, errorCode); + pResData->data=udata_openChoice(path, "res", name, isAcceptable, formatVersion, errorCode); if(U_FAILURE(*errorCode)) { return FALSE; } @@ -221,6 +230,7 @@ res_load(ResourceData *pResData, /* get its memory and root resource */ pResData->pRoot=(Resource *)udata_getMemory(pResData->data); pResData->rootRes=*pResData->pRoot; + pResData->noFallback=FALSE; /* currently, we accept only resources that have a Table as their roots */ rootType=RES_GET_TYPE(pResData->rootRes); @@ -231,6 +241,14 @@ res_load(ResourceData *pResData, return FALSE; } + if(formatVersion[0]>1 || (formatVersion[0]==1 && formatVersion[1]>=1)) { + /* bundles with formatVersion 1.1 and later contain an indexes[] array */ + const int32_t *indexes=(const int32_t *)pResData->pRoot+1; + if(indexes[URES_INDEX_LENGTH]>URES_INDEX_ATTRIBUTES) { + pResData->noFallback=(UBool)(indexes[URES_INDEX_ATTRIBUTES]&URES_ATT_NO_FALLBACK); + } + } + return TRUE; } @@ -244,8 +262,16 @@ res_unload(ResourceData *pResData) { U_CFUNC const UChar * res_getString(const ResourceData *pResData, const Resource res, int32_t *pLength) { + /* + * The data structure is documented as supporting res==0 for empty strings. + * Return a fixed pointer in such a case. + * This was dropped in uresdata.c 1.17 as part of Jitterbug 1005 work + * on code coverage for ICU 2.0. + * Re-added for consistency with the design and with other code. + */ + static const int32_t emptyString[2]={ 0, 0 }; if(res!=RES_BOGUS && RES_GET_TYPE(res)==URES_STRING) { - const int32_t *p=(const int32_t *)RES_GET_POINTER(pResData->pRoot, res); + const int32_t *p= res==0 ? emptyString : (const int32_t *)RES_GET_POINTER(pResData->pRoot, res); if (pLength) { *pLength=*p; } @@ -432,7 +458,7 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch U_CFUNC Resource res_getTableItemByKey(const ResourceData *pResData, Resource table, - int32_t *indexR, const char **key) { + int32_t *indexR, const char **key ){ if(key != NULL && *key != NULL) { if(RES_GET_TYPE(table)==URES_TABLE) { return _res_findTableItem(pResData->pRoot, table, *key, indexR, key); @@ -611,8 +637,8 @@ ures_preflightResource(const UDataSwapper *ds, pBottom, pTop, pMaxTableLength, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_preflightResource(table res=%08x)[%d].recurse(%08x) failed - %s\n", - res, i, item, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_preflightResource(table res=%08x)[%d].recurse(%08x) failed\n", + res, i, item); break; } } @@ -636,8 +662,8 @@ ures_preflightResource(const UDataSwapper *ds, pBottom, pTop, pMaxTableLength, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_preflightResource(array res=%08x)[%d].recurse(%08x) failed - %s\n", - res, i, item, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_preflightResource(array res=%08x)[%d].recurse(%08x) failed\n", + res, i, item); break; } } @@ -785,8 +811,8 @@ ures_swapResource(const UDataSwapper *ds, item=ds->readUInt32(p[i]); ures_swapResource(ds, inBundle, outBundle, item, specialType, pTempTable, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_swapResource(table res=%08x)[%d].recurse(%08x) failed - %s\n", - res, i, item, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_swapResource(table res=%08x)[%d].recurse(%08x) failed\n", + res, i, item); return; } } @@ -826,8 +852,8 @@ ures_swapResource(const UDataSwapper *ds, ures_compareRows, pTempTable->keyChars, FALSE, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_swapResource(table res=%08x).uprv_sortArray(%d items) failed - %s\n", - res, count, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_swapResource(table res=%08x).uprv_sortArray(%d items) failed\n", + res, count); return; } @@ -905,8 +931,8 @@ ures_swapResource(const UDataSwapper *ds, item=ds->readUInt32(p[i]); ures_swapResource(ds, inBundle, outBundle, item, URES_NO_SPECIAL_TYPE, pTempTable, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_swapResource(array res=%08x)[%d].recurse(%08x) failed - %s\n", - res, i, item, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_swapResource(array res=%08x)[%d].recurse(%08x) failed\n", + res, i, item); return; } } @@ -995,8 +1021,8 @@ ures_swap(const UDataSwapper *ds, &bottom, &top, &maxTableLength, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_preflightResource(root res=%08x) failed - %s\n", - rootRes, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_preflightResource(root res=%08x) failed\n", + rootRes); return 0; } } else { @@ -1030,8 +1056,7 @@ ures_swap(const UDataSwapper *ds, udata_swapInvStringBlock(ds, inBundle+stringsBottom, 4*(bottom-stringsBottom), outBundle+stringsBottom, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_swap().udata_swapInvStringBlock(keys[%d]) failed - %s\n", 4*(bottom-1), - u_errorName(*pErrorCode)); + udata_printError(ds, "ures_swap().udata_swapInvStringBlock(keys[%d]) failed\n", 4*(bottom-1)); return 0; } @@ -1054,8 +1079,8 @@ ures_swap(const UDataSwapper *ds, /* swap the resources */ ures_swapResource(ds, inBundle, outBundle, rootRes, URES_NO_SPECIAL_TYPE, &tempTable, pErrorCode); if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "ures_swapResource(root res=%08x) failed - %s\n", - rootRes, u_errorName(*pErrorCode)); + udata_printError(ds, "ures_swapResource(root res=%08x) failed\n", + rootRes); } if(tempTable.rows!=rows) { diff --git a/icuSources/common/uresdata.h b/icuSources/common/uresdata.h index 92a8667d..6b8aa8aa 100644 --- a/icuSources/common/uresdata.h +++ b/icuSources/common/uresdata.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 1999-2003, International Business Machines * +* Copyright (C) 1999-2006, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -31,7 +31,7 @@ typedef uint32_t Resource; #define RES_BOGUS 0xffffffff -#define RES_GET_TYPE(res) ((res)>>28UL) +#define RES_GET_TYPE(res) ((UResType)((res)>>28UL)) #define RES_GET_OFFSET(res) ((res)&0x0fffffff) #define RES_GET_POINTER(pRoot, res) ((pRoot)+RES_GET_OFFSET(res)) @@ -48,6 +48,7 @@ enum { URES_INDEX_BUNDLE_TOP, /* [3] contains the top of the bundle, */ /* in case it were ever different from [2] */ URES_INDEX_MAX_TABLE_LENGTH,/* [4] max. length of any table */ + URES_INDEX_ATTRIBUTES, /* [5] attributes bit set, see URES_ATT_* (new in formatVersion 1.2) */ URES_INDEX_TOP }; @@ -57,7 +58,20 @@ enum { }; /* - * File format for .res resource bundle files (formatVersion=1.1) + * Nofallback attribute, attribute bit 0 in indexes[URES_INDEX_ATTRIBUTES]. + * New in formatVersion 1.2 (ICU 3.6). + * + * If set, then this resource bundle is a standalone bundle. + * If not set, then the bundle participates in locale fallback, eventually + * all the way to the root bundle. + * If indexes[] is missing or too short, then the attribute cannot be determined + * reliably. Dependency checking should ignore such bundles, and loading should + * use fallbacks. + */ +#define URES_ATT_NO_FALLBACK 1 + +/* + * File format for .res resource bundle files (formatVersion=1.2) * * An ICU4C resource bundle file (.res) is a binary, memory-mappable file * with nested, hierarchical data structures. @@ -67,7 +81,7 @@ enum { * currently, the root item must be a table or table32 resource item * int32_t indexes[indexes[0]]; -- array of indexes for friendly * reading and swapping; see URES_INDEX_* above - * new in formatVersion 1.1 + * new in formatVersion 1.1 (ICU 2.8) * char keys[]; -- characters for key strings * (formatVersion 1.0: up to 65k of characters; 1.1: <2G) * (minus the space for root and indexes[]), @@ -156,6 +170,7 @@ typedef struct { UDataMemory *data; Resource *pRoot; Resource rootRes; + UBool noFallback; /* see URES_ATT_NO_FALLBACK */ } ResourceData; /* diff --git a/icuSources/common/uresimp.h b/icuSources/common/uresimp.h index 9c5fe665..3e530d9e 100644 --- a/icuSources/common/uresimp.h +++ b/icuSources/common/uresimp.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -27,6 +27,7 @@ #define MAGIC2 19641227 #define URES_MAX_ALIAS_LEVEL 256 +#define URES_MAX_BUFFER_SIZE 256 /* enum UResEntryType { @@ -83,9 +84,9 @@ U_CAPI void U_EXPORT2 ures_initStackObject(UResourceBundle* resB); /* Some getters used by the copy constructor */ U_CFUNC const char* ures_getName(const UResourceBundle* resB); U_CFUNC const char* ures_getPath(const UResourceBundle* resB); -U_CFUNC void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd); +/*U_CFUNC void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd);*/ /*U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd);*/ -U_CFUNC void ures_freeResPath(UResourceBundle *resB); +/*U_CFUNC void ures_freeResPath(UResourceBundle *resB);*/ /* Candidates for export */ U_CFUNC UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *original, UErrorCode *status); @@ -164,4 +165,77 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity, U_INTERNAL UEnumeration* U_EXPORT2 ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status); +/** + * Test if 2 resource bundles are equal + * @param res1 + * @param res2 + * @param status error code + * @internal ICU 3.6 + */ +U_INTERNAL UBool U_EXPORT2 +ures_equal(const UResourceBundle* res1, const UResourceBundle* res2); + +/** + * Clones the given resource bundle + * @param res + * @param status error code + * @internal ICU 3.6 + */ +U_INTERNAL UResourceBundle* U_EXPORT2 +ures_clone(const UResourceBundle* res, UErrorCode* status); + +/** + * Returns the parent bundle. Internal. DONOT close the returned bundle!!! + * @param res + * @internal ICU 3.6 + */ +U_INTERNAL const UResourceBundle* U_EXPORT2 +ures_getParentBundle(const UResourceBundle* res); + + +/** + * Get a resource with multi-level fallback. Normally only the top level resources will + * fallback to its parent. This performs fallback on subresources. For example, when a table + * is defined in a resource bundle and a parent resource bundle, normally no fallback occurs + * on the sub-resources because the table is defined in the current resource bundle, but this + * function can perform fallback on the sub-resources of the table. + * @param resB a resource + * @param inKey a key associated with the requested resource + * @param fillIn if NULL a new UResourceBundle struct is allocated and must be deleted by the caller. + * Alternatively, you can supply a struct to be filled by this function. + * @param status: fills in the outgoing error code + * could be U_MISSING_RESOURCE_ERROR if the key is not found + * could be a non-failing error + * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING + * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it + * @internal ICU 3.0 + */ +U_INTERNAL UResourceBundle* U_EXPORT2 +ures_getByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, + UResourceBundle *fillIn, + UErrorCode *status); + + +/** + * Get a String with multi-level fallback. Normally only the top level resources will + * fallback to its parent. This performs fallback on subresources. For example, when a table + * is defined in a resource bundle and a parent resource bundle, normally no fallback occurs + * on the sub-resources because the table is defined in the current resource bundle, but this + * function can perform fallback on the sub-resources of the table. + * @param resB a resource + * @param inKey a key associated with the requested resource + * @param status: fills in the outgoing error code + * could be U_MISSING_RESOURCE_ERROR if the key is not found + * could be a non-failing error + * e.g.: U_USING_FALLBACK_WARNING,U_USING_DEFAULT_WARNING + * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it + * @internal ICU 3.4 + * @draft ICU 3.4 + */ +U_INTERNAL const UChar* U_EXPORT2 +ures_getStringByKeyWithFallback(const UResourceBundle *resB, + const char* inKey, + int32_t* len, + UErrorCode *status); #endif /*URESIMP_H*/ diff --git a/icuSources/common/uscript.c b/icuSources/common/uscript.c index 546d5f88..47ae56da 100644 --- a/icuSources/common/uscript.c +++ b/icuSources/common/uscript.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -22,7 +22,10 @@ #include "cstring.h" static const char kLocaleScript[] = "LocaleScript"; +static const char kHyphen = '-'; +static const char kUnderscore = '_'; +/* TODO: this is a bad API should be deprecated */ U_CAPI int32_t U_EXPORT2 uscript_getCode(const char* nameOrAbbrOrLocale, UScriptCode* fillIn, @@ -41,12 +44,13 @@ uscript_getCode(const char* nameOrAbbrOrLocale, return numFilled; } - /* try long and abbreviated script names first */ - code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale); - - /* we still haven't found it try locale */ + if(uprv_strchr(nameOrAbbrOrLocale, kHyphen)==NULL && uprv_strchr(nameOrAbbrOrLocale, kUnderscore)==NULL ){ + /* try long and abbreviated script names first */ + code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale); + + } if(code==(UScriptCode)UCHAR_INVALID_CODE){ - /* Do not propagate error codes from just not finding a locale bundle. */ + /* Do not propagate error codes from just not finding a locale bundle. */ UErrorCode localErrorCode = U_ZERO_ERROR; UResourceBundle* resB = ures_open(NULL,nameOrAbbrOrLocale,&localErrorCode); if(U_SUCCESS(localErrorCode)&& localErrorCode != U_USING_DEFAULT_WARNING){ @@ -72,11 +76,16 @@ uscript_getCode(const char* nameOrAbbrOrLocale, } } } - ures_close(resD); - + ures_close(resD); } ures_close(resB); - }else{ + code = USCRIPT_INVALID_CODE; + } + if(code==(UScriptCode)UCHAR_INVALID_CODE){ + /* still not found .. try long and abbreviated script names again */ + code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale); + } + if(code!=(UScriptCode)UCHAR_INVALID_CODE){ /* we found it */ if(numFilled<=capacity){ *(fillIn)++=code; diff --git a/icuSources/common/uset.cpp b/icuSources/common/uset.cpp index cd5f323a..8cd25221 100644 --- a/icuSources/common/uset.cpp +++ b/icuSources/common/uset.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -42,122 +42,134 @@ uset_close(USet* set) { U_CAPI void U_EXPORT2 uset_set(USet* set, UChar32 start, UChar32 end) { - ((UnicodeSet*) set)->set(start, end); + ((UnicodeSet*) set)->UnicodeSet::set(start, end); } U_CAPI void U_EXPORT2 uset_addAll(USet* set, const USet *additionalSet) { - ((UnicodeSet*) set)->addAll(*((const UnicodeSet*)additionalSet)); + ((UnicodeSet*) set)->UnicodeSet::addAll(*((const UnicodeSet*)additionalSet)); } U_CAPI void U_EXPORT2 uset_add(USet* set, UChar32 c) { - ((UnicodeSet*) set)->add(c); + ((UnicodeSet*) set)->UnicodeSet::add(c); } U_CAPI void U_EXPORT2 uset_addRange(USet* set, UChar32 start, UChar32 end) { - ((UnicodeSet*) set)->add(start, end); + ((UnicodeSet*) set)->UnicodeSet::add(start, end); } U_CAPI void U_EXPORT2 uset_addString(USet* set, const UChar* str, int32_t strLen) { - // WRONG! Do not alias, it will stay aliased, even after - // copying. TODO: do we need a copy ctor that unaliases + // WRONG! Do not alias, it will stay aliased, even after + // copying. TODO: do we need a copy ctor that unaliases //UnicodeString s(strLen==-1, str, strLen); - // We promised -1 for zero terminated - if(strLen == -1) { - strLen = u_strlen(str); - } + + // UnicodeString handles -1 for strLen + UnicodeString s(str, strLen); + ((UnicodeSet*) set)->UnicodeSet::add(s); +} + +U_CAPI void U_EXPORT2 +uset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen) { + // UnicodeString handles -1 for strLen UnicodeString s(str, strLen); - ((UnicodeSet*) set)->add(s); + ((UnicodeSet*) set)->UnicodeSet::addAll(s); } U_CAPI void U_EXPORT2 uset_remove(USet* set, UChar32 c) { - ((UnicodeSet*) set)->remove(c); + ((UnicodeSet*) set)->UnicodeSet::remove(c); } U_CAPI void U_EXPORT2 uset_removeRange(USet* set, UChar32 start, UChar32 end) { - ((UnicodeSet*) set)->remove(start, end); + ((UnicodeSet*) set)->UnicodeSet::remove(start, end); } U_CAPI void U_EXPORT2 uset_removeString(USet* set, const UChar* str, int32_t strLen) { UnicodeString s(strLen==-1, str, strLen); - ((UnicodeSet*) set)->remove(s); + ((UnicodeSet*) set)->UnicodeSet::remove(s); } U_CAPI void U_EXPORT2 uset_removeAll(USet* set, const USet* remove) { - ((UnicodeSet*) set)->removeAll(*(const UnicodeSet*)remove); + ((UnicodeSet*) set)->UnicodeSet::removeAll(*(const UnicodeSet*)remove); } U_CAPI void U_EXPORT2 uset_retain(USet* set, UChar32 start, UChar32 end) { - ((UnicodeSet*) set)->retain(start, end); + ((UnicodeSet*) set)->UnicodeSet::retain(start, end); } U_CAPI void U_EXPORT2 uset_retainAll(USet* set, const USet* retain) { - ((UnicodeSet*) set)->retainAll(*(const UnicodeSet*)retain); + ((UnicodeSet*) set)->UnicodeSet::retainAll(*(const UnicodeSet*)retain); } U_CAPI void U_EXPORT2 uset_compact(USet* set) { - ((UnicodeSet*) set)->compact(); + ((UnicodeSet*) set)->UnicodeSet::compact(); } U_CAPI void U_EXPORT2 uset_complement(USet* set) { - ((UnicodeSet*) set)->complement(); + ((UnicodeSet*) set)->UnicodeSet::complement(); } U_CAPI void U_EXPORT2 uset_complementAll(USet* set, const USet* complement) { - ((UnicodeSet*) set)->complementAll(*(const UnicodeSet*)complement); + ((UnicodeSet*) set)->UnicodeSet::complementAll(*(const UnicodeSet*)complement); } U_CAPI void U_EXPORT2 uset_clear(USet* set) { - ((UnicodeSet*) set)->clear(); + ((UnicodeSet*) set)->UnicodeSet::clear(); } U_CAPI UBool U_EXPORT2 uset_isEmpty(const USet* set) { - return ((const UnicodeSet*) set)->isEmpty(); + return ((const UnicodeSet*) set)->UnicodeSet::isEmpty(); } U_CAPI UBool U_EXPORT2 uset_contains(const USet* set, UChar32 c) { - return ((const UnicodeSet*) set)->contains(c); + return ((const UnicodeSet*) set)->UnicodeSet::contains(c); } U_CAPI UBool U_EXPORT2 uset_containsRange(const USet* set, UChar32 start, UChar32 end) { - return ((const UnicodeSet*) set)->contains(start, end); + return ((const UnicodeSet*) set)->UnicodeSet::contains(start, end); } U_CAPI UBool U_EXPORT2 uset_containsString(const USet* set, const UChar* str, int32_t strLen) { UnicodeString s(strLen==-1, str, strLen); - return ((const UnicodeSet*) set)->contains(s); + return ((const UnicodeSet*) set)->UnicodeSet::contains(s); } U_CAPI UBool U_EXPORT2 uset_containsAll(const USet* set1, const USet* set2) { - return ((const UnicodeSet*) set1)->containsAll(* (const UnicodeSet*) set2); + return ((const UnicodeSet*) set1)->UnicodeSet::containsAll(* (const UnicodeSet*) set2); +} + +U_CAPI UBool U_EXPORT2 +uset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen) { + // Create a string alias, since nothing is being added to the set. + UnicodeString s(strLen==-1, str, strLen); + return ((const UnicodeSet*) set)->UnicodeSet::containsAll(s); } U_CAPI UBool U_EXPORT2 uset_containsNone(const USet* set1, const USet* set2) { - return ((const UnicodeSet*) set1)->containsNone(* (const UnicodeSet*) set2); + return ((const UnicodeSet*) set1)->UnicodeSet::containsNone(* (const UnicodeSet*) set2); } U_CAPI UBool U_EXPORT2 uset_containsSome(const USet* set1, const USet* set2) { - return ((const UnicodeSet*) set1)->containsSome(* (const UnicodeSet*) set2); + return ((const UnicodeSet*) set1)->UnicodeSet::containsSome(* (const UnicodeSet*) set2); } U_CAPI UBool U_EXPORT2 @@ -167,17 +179,17 @@ uset_equals(const USet* set1, const USet* set2) { U_CAPI int32_t U_EXPORT2 uset_indexOf(const USet* set, UChar32 c) { - return ((UnicodeSet*) set)->indexOf(c); + return ((UnicodeSet*) set)->UnicodeSet::indexOf(c); } U_CAPI UChar32 U_EXPORT2 uset_charAt(const USet* set, int32_t index) { - return ((UnicodeSet*) set)->charAt(index); + return ((UnicodeSet*) set)->UnicodeSet::charAt(index); } U_CAPI int32_t U_EXPORT2 uset_size(const USet* set) { - return ((const UnicodeSet*) set)->size(); + return ((const UnicodeSet*) set)->UnicodeSet::size(); } U_NAMESPACE_BEGIN @@ -253,6 +265,18 @@ uset_getItem(const USet* uset, int32_t itemIndex, // return TRUE; //} +U_CAPI USet* U_EXPORT2 +uprv_openRuleWhiteSpaceSet(UErrorCode* ec) { + if(U_FAILURE(*ec)) { + return NULL; + } + // create a set with the Pattern_White_Space characters, + // without a pattern for fewer code dependencies + UnicodeSet *set=new UnicodeSet(9, 0xd); + set->UnicodeSet::add(0x20).add(0x85).add(0x200e, 0x200f).add(0x2028, 0x2029); + return (USet *)set; +} + /* * Serialize a USet into 16-bit units. * Store BMP code points as themselves with one 16-bit unit each. @@ -277,7 +301,7 @@ uset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode return 0; } - return ((const UnicodeSet*) set)->serialize(dest, destCapacity,* ec); + return ((const UnicodeSet*) set)->UnicodeSet::serialize(dest, destCapacity,* ec); } U_CAPI UBool U_EXPORT2 @@ -358,19 +382,50 @@ uset_serializedContains(const USerializedSet* set, UChar32 c) { array=set->array; if(c<=0xffff) { /* find c in the BMP part */ - int32_t i, bmpLength=set->bmpLength; - for(i=0; i=array[i]; ++i) {} - return (UBool)(i&1); + int32_t lo = 0; + int32_t hi = set->bmpLength-1; + if (c < array[0]) { + hi = 0; + } else if (c < array[hi]) { + for(;;) { + int32_t i = (lo + hi) >> 1; + if (i == lo) { + break; // Done! + } else if (c < array[i]) { + hi = i; + } else { + lo = i; + } + } + } else { + hi += 1; + } + return (UBool)(hi&1); } else { /* find c in the supplementary part */ - int32_t i, length=set->length; uint16_t high=(uint16_t)(c>>16), low=(uint16_t)c; - for(i=set->bmpLength; - iarray[i] || (high==array[i] && low>=array[i+1])); - i+=2) {} - + int32_t base = set->bmpLength; + int32_t lo = 0; + int32_t hi = set->length - 2 - base; + if (high < array[base] || (high==array[base] && low> 1) & ~1; // Guarantee even result + int32_t iabs = i + base; + if (i == lo) { + break; // Done! + } else if (high < array[iabs] || (high==array[iabs] && lowbmpLength)&2)!=0); + return (UBool)(((hi+(base<<1))&2)!=0); } } diff --git a/icuSources/common/uset_imp.h b/icuSources/common/uset_imp.h index b5a969e1..c826f49f 100644 --- a/icuSources/common/uset_imp.h +++ b/icuSources/common/uset_imp.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -33,6 +33,9 @@ USetAddRange(USet *set, UChar32 start, UChar32 end); typedef void U_CALLCONV USetAddString(USet *set, const UChar *str, int32_t length); +typedef void U_CALLCONV +USetRemove(USet *set, UChar32 c); + /** * Interface for adding items to a USet, to keep low-level code from * statically depending on the USet implementation. @@ -43,6 +46,7 @@ struct USetAdder { USetAdd *add; USetAddRange *addRange; USetAddString *addString; + USetRemove *remove; }; typedef struct USetAdder USetAdder; @@ -51,6 +55,9 @@ U_CDECL_END /** * Get the set of "white space" characters in the sense of ICU rule * parsers. Caller must close/delete result. + * Equivalent to the set of characters with the Pattern_White_Space Unicode property. + * Stable set of characters, won't change. + * See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/ * @internal */ U_CAPI USet* U_EXPORT2 diff --git a/icuSources/common/uset_props.cpp b/icuSources/common/uset_props.cpp index d2f8824d..d36a5250 100644 --- a/icuSources/common/uset_props.cpp +++ b/icuSources/common/uset_props.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -132,15 +132,3 @@ uset_toPattern(const USet* set, ((const UnicodeSet*) set)->toPattern(pat, escapeUnprintable); return pat.extract(result, resultCapacity, *ec); } - -U_CAPI USet* U_EXPORT2 -uprv_openRuleWhiteSpaceSet(UErrorCode* ec) { - static const UChar _PATTERN[] = { - /* "[[:Cf:][:WSpace:]]" */ - 91, 91, 58, 67, 102, 58, 93, 91, 58, 87, - 83, 112, 97, 99, 101, 58, 93, 93, 0 - }; - return uset_openPattern(_PATTERN, - sizeof(_PATTERN)/sizeof(_PATTERN[0])-1, ec); -} - diff --git a/icuSources/common/usetiter.cpp b/icuSources/common/usetiter.cpp index 75a75de4..44858ed4 100644 --- a/icuSources/common/usetiter.cpp +++ b/icuSources/common/usetiter.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2003, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -18,6 +18,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UnicodeSetIterator) * @param set set to iterate over */ UnicodeSetIterator::UnicodeSetIterator(const UnicodeSet& uSet) { + cpString = NULL; reset(uSet); } @@ -26,11 +27,12 @@ UnicodeSetIterator::UnicodeSetIterator(const UnicodeSet& uSet) { */ UnicodeSetIterator::UnicodeSetIterator() { this->set = NULL; + cpString = NULL; reset(); } UnicodeSetIterator::~UnicodeSetIterator() { - // Nothing to do + delete cpString; } /** @@ -45,11 +47,13 @@ UnicodeSetIterator::~UnicodeSetIterator() { UBool UnicodeSetIterator::next() { if (nextElement <= endElement) { codepoint = codepointEnd = nextElement++; + string = NULL; return TRUE; } if (range < endRange) { loadRange(++range); codepoint = codepointEnd = nextElement++; + string = NULL; return TRUE; } @@ -71,6 +75,7 @@ UBool UnicodeSetIterator::next() { *
    Note also that the codepointEnd is undefined after calling this method. */ UBool UnicodeSetIterator::nextRange() { + string = NULL; if (nextElement <= endElement) { codepointEnd = endElement; codepoint = nextElement; @@ -118,6 +123,7 @@ void UnicodeSetIterator::reset() { loadRange(range); } nextString = 0; + string = NULL; } void UnicodeSetIterator::loadRange(int32_t iRange) { @@ -125,6 +131,20 @@ void UnicodeSetIterator::loadRange(int32_t iRange) { endElement = set->getRangeEnd(iRange); } + +const UnicodeString& UnicodeSetIterator::getString() { + if (string==NULL && codepoint!=(UChar32)IS_STRING) { + if (cpString == NULL) { + cpString = new UnicodeString(); + } + if (cpString != NULL) { + cpString->setTo((UChar32)codepoint); + } + string = cpString; + } + return *string; +} + U_NAMESPACE_END //eof diff --git a/icuSources/common/ushape.c b/icuSources/common/ushape.c index a4f62977..ad0b449d 100644 --- a/icuSources/common/ushape.c +++ b/icuSources/common/ushape.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -23,6 +23,7 @@ #include "cmemory.h" #include "putilimp.h" #include "ustr_imp.h" +#include "ubidi_props.h" #if UTF_SIZE<16 /* @@ -224,16 +225,25 @@ static void _shapeToArabicDigitsWithContext(UChar *s, int32_t length, UChar digitBase, UBool isLogical, UBool lastStrongWasAL) { + const UBiDiProps *bdp; + UErrorCode errorCode; + int32_t i; UChar c; + errorCode=U_ZERO_ERROR; + bdp=ubidi_getSingleton(&errorCode); + if(U_FAILURE(errorCode)) { + return; + } + digitBase-=0x30; /* the iteration direction depends on the type of input */ if(isLogical) { for(i=0; i0; /* pre-decrement in the body */) { c=s[--i]; - switch(u_charDirection(c)) { + switch(ubidi_getClass(bdp, c)) { case U_LEFT_TO_RIGHT: /* L */ case U_RIGHT_TO_LEFT: /* R */ lastStrongWasAL=FALSE; @@ -304,26 +314,20 @@ invertBuffer(UChar *buffer,int32_t size,uint32_t options,int32_t *spacesCountl,i * later it'll be converted into the 0xFExx LamAlefs * in the shaping function. */ -static UChar +static U_INLINE UChar changeLamAlef(UChar ch) { switch(ch) { case 0x0622 : - return(0x065C); - break; + return 0x065C; case 0x0623 : - return(0x065D); - break; + return 0x065D; case 0x0625 : - return(0x065E); - break; + return 0x065E; case 0x0627 : - return(0x065F); - break; - default : - return(0); - break; + return 0x065F; } + return 0; } /* @@ -338,11 +342,9 @@ specialChar(UChar ch) { (ch>0x0647 && ch<0x064a)||(ch==0x0629) ) { return (1); } - else - if( ch>=0x064B && ch<= 0x0652 ) + else if( ch>=0x064B && ch<= 0x0652 ) return (2); - else - if( (ch>=0x0653 && ch<= 0x0655) || ch == 0x0670 || + else if( (ch>=0x0653 && ch<= 0x0655) || ch == 0x0670 || (ch>=0xFE70 && ch<= 0xFE7F) ) return (3); else @@ -398,39 +400,27 @@ countSpaces(UChar *dest,int32_t size,uint32_t options,int32_t *spacesCountl,int3 *Name : isTashkeelChar *Function : Returns 1 for Tashkeel characters else return 0 */ -static int32_t +static U_INLINE int32_t isTashkeelChar(UChar ch) { - - if( ch>=0x064B && ch<= 0x0652 ) - return (1); - else - return (0); + return (int32_t)( ch>=0x064B && ch<= 0x0652 ); } /* *Name : isAlefChar *Function : Returns 1 for Alef characters else return 0 */ -static int32_t +static U_INLINE int32_t isAlefChar(UChar ch) { - - if( (ch==0x0622)||(ch==0x0623)||(ch==0x0625)||(ch==0x0627) ) - return (1); - else - return (0); + return (int32_t)( (ch==0x0622)||(ch==0x0623)||(ch==0x0625)||(ch==0x0627) ); } /* *Name : isLamAlefChar *Function : Returns 1 for LamAlef characters else return 0 */ -static int32_t +static U_INLINE int32_t isLamAlefChar(UChar ch) { - - if( (ch>=0xFEF5)&&(ch<=0xFEFC) ) - return (1); - else - return (0); + return (int32_t)( (ch>=0xFEF5)&&(ch<=0xFEFC) ); } /* @@ -796,7 +786,7 @@ shapeUnicode(UChar *dest, int32_t sourceLength, int32_t i, iend; int32_t step; - int32_t prevPos, lastPos,Nx, Nw; + int32_t lastPos,Nx, Nw; unsigned int Shape; int32_t flag; int32_t lamalef_found = 0; @@ -830,7 +820,6 @@ shapeUnicode(UChar *dest, int32_t sourceLength, */ currLink = getLink(dest[i]); - prevPos = i; lastPos = i; Nx = -2, Nw = 0; @@ -877,13 +866,14 @@ shapeUnicode(UChar *dest, int32_t sourceLength, if (flag == 1) { Shape = (Shape == 1 || Shape == 3) ? 1 : 0; } - else - if(flag == 2) { + else if(flag == 2) { if( (lastLink & LINKL) && (nextLink & LINKR) && (tashkeelFlag == 1) && - dest[i] != 0x064C && dest[i] != 0x064D ) { + dest[i] != 0x064C && dest[i] != 0x064D ) + { Shape = 1; - if( (nextLink&ALEFTYPE) == ALEFTYPE && (lastLink&LAMTYPE) == LAMTYPE ) + if( (nextLink&ALEFTYPE) == ALEFTYPE && (lastLink&LAMTYPE) == LAMTYPE ) { Shape = 0; + } } else { Shape = 0; @@ -901,7 +891,6 @@ shapeUnicode(UChar *dest, int32_t sourceLength, if ((currLink & IRRELEVANT) == 0) { prevLink = lastLink; lastLink = currLink; - prevPos = lastPos; lastPos = i; } @@ -987,7 +976,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, if(sourceLength==-1) { sourceLength=u_strlen(source); } - if(sourceLength==0) { + if(sourceLength<=0) { return u_terminateUChars(dest, destCapacity, 0, pErrorCode); } diff --git a/icuSources/common/usprep.cpp b/icuSources/common/usprep.cpp index 975a598d..ec98ad01 100644 --- a/icuSources/common/usprep.cpp +++ b/icuSources/common/usprep.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -33,6 +33,7 @@ #include "udataswp.h" #include "ucln_cmn.h" #include "unormimp.h" +#include "ubidi_props.h" U_CDECL_BEGIN @@ -82,7 +83,7 @@ getSPrepFoldingOffset(uint32_t data) { } /* hashes an entry */ -static int32_t U_EXPORT2 U_CALLCONV +static int32_t U_CALLCONV hashEntry(const UHashTok parm) { UStringPrepKey *b = (UStringPrepKey *)parm.pointer; UHashTok namekey, pathkey; @@ -92,7 +93,7 @@ hashEntry(const UHashTok parm) { } /* compares two entries */ -static UBool U_EXPORT2 U_CALLCONV +static UBool U_CALLCONV compareEntries(const UHashTok p1, const UHashTok p2) { UStringPrepKey *b1 = (UStringPrepKey *)p1.pointer; UStringPrepKey *b2 = (UStringPrepKey *)p2.pointer; @@ -196,19 +197,18 @@ initCache(UErrorCode *status) { makeCache = (SHARED_DATA_HASHTABLE == NULL); umtx_unlock(&usprepMutex); if(makeCache) { - UHashtable *newCache = uhash_open(hashEntry, compareEntries, status); - if (U_FAILURE(*status)) { - return; - } - umtx_lock(&usprepMutex); - if(SHARED_DATA_HASHTABLE == NULL) { - SHARED_DATA_HASHTABLE = newCache; - ucln_common_registerCleanup(UCLN_COMMON_USPREP, usprep_cleanup); - newCache = NULL; - } - umtx_unlock(&usprepMutex); - if(newCache != NULL) { - uhash_close(newCache); + UHashtable *newCache = uhash_open(hashEntry, compareEntries, NULL, status); + if (U_SUCCESS(*status)) { + umtx_lock(&usprepMutex); + if(SHARED_DATA_HASHTABLE == NULL) { + SHARED_DATA_HASHTABLE = newCache; + ucln_common_registerCleanup(UCLN_COMMON_USPREP, usprep_cleanup); + newCache = NULL; + } + umtx_unlock(&usprepMutex); + if(newCache != NULL) { + uhash_close(newCache); + } } } } @@ -316,7 +316,9 @@ usprep_getProfile(const char* path, stackKey.path = (char*) path; /* fetch the data from the cache */ + umtx_lock(&usprepMutex); profile = (UStringPrepProfile*) (uhash_get(SHARED_DATA_HASHTABLE,&stackKey)); + umtx_unlock(&usprepMutex); if(profile == NULL){ UStringPrepKey* key = (UStringPrepKey*) uprv_malloc(sizeof(UStringPrepKey)); @@ -355,7 +357,7 @@ usprep_getProfile(const char* path, key->path = (char*) uprv_malloc(uprv_strlen(path)+1); if(key->path == NULL){ *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(key->path); + uprv_free(key->name); uprv_free(key); uprv_free(profile); return NULL; @@ -365,12 +367,30 @@ usprep_getProfile(const char* path, /* load the data */ if(!loadData(profile, path, name, _SPREP_DATA_TYPE, status) || U_FAILURE(*status) ){ + uprv_free(key->path); + uprv_free(key->name); + uprv_free(key); + uprv_free(profile); return NULL; } /* get the options */ profile->doNFKC = (UBool)((profile->indexes[_SPREP_OPTIONS] & _SPREP_NORMALIZATION_ON) > 0); profile->checkBiDi = (UBool)((profile->indexes[_SPREP_OPTIONS] & _SPREP_CHECK_BIDI_ON) > 0); + + if(profile->checkBiDi) { + profile->bdp = ubidi_getSingleton(status); + if(U_FAILURE(*status)) { + usprep_unload(profile); + uprv_free(key->path); + uprv_free(key->name); + uprv_free(key); + uprv_free(profile); + return NULL; + } + } else { + profile->bdp = NULL; + } umtx_lock(&usprepMutex); /* add the data object to the cache */ @@ -397,7 +417,7 @@ usprep_open(const char* path, usprep_init(); /* initialize the profile struct members */ - return usprep_getProfile(path,name,status);; + return usprep_getProfile(path,name,status); } U_CAPI void U_EXPORT2 @@ -459,8 +479,12 @@ getValues(uint16_t trieWord, int16_t& value, UBool& isIndex){ * the source codepoint is copied to the destination */ type = USPREP_TYPE_LIMIT; + isIndex =FALSE; + value = 0; }else if(trieWord >= _SPREP_TYPE_THRESHOLD){ type = (UStringPrepType) (trieWord - _SPREP_TYPE_THRESHOLD); + isIndex =FALSE; + value = 0; }else{ /* get the type */ type = USPREP_MAP; @@ -468,12 +492,10 @@ getValues(uint16_t trieWord, int16_t& value, UBool& isIndex){ if(trieWord & 0x02){ isIndex = TRUE; value = trieWord >> 2; //mask off the lower 2 bits and shift - }else{ isIndex = FALSE; value = (int16_t)trieWord; value = (value >> 2); - } if((trieWord>>2) == _SPREP_MAX_INDEX_VALUE){ @@ -752,17 +774,19 @@ usprep_prepare( const UStringPrepProfile* profile, goto CLEANUP; } - direction = u_charDirection(ch); - if(firstCharDir == U_CHAR_DIRECTION_COUNT){ - firstCharDir = direction; - } - if(direction == U_LEFT_TO_RIGHT){ - leftToRight = TRUE; - ltrPos = b2Index-1; - } - if(direction == U_RIGHT_TO_LEFT || direction == U_RIGHT_TO_LEFT_ARABIC){ - rightToLeft = TRUE; - rtlPos = b2Index-1; + if(profile->checkBiDi) { + direction = ubidi_getClass(profile->bdp, ch); + if(firstCharDir == U_CHAR_DIRECTION_COUNT){ + firstCharDir = direction; + } + if(direction == U_LEFT_TO_RIGHT){ + leftToRight = TRUE; + ltrPos = b2Index-1; + } + if(direction == U_RIGHT_TO_LEFT || direction == U_RIGHT_TO_LEFT_ARABIC){ + rightToLeft = TRUE; + rtlPos = b2Index-1; + } } } if(profile->checkBiDi == TRUE){ @@ -783,7 +807,7 @@ usprep_prepare( const UStringPrepProfile* profile, return FALSE; } } - if(b2Len <= destCapacity){ + if(b2Len>0 && b2Len <= destCapacity){ uprv_memmove(dest,b2, b2Len*U_SIZEOF_UCHAR); } diff --git a/icuSources/common/ustack.cpp b/icuSources/common/ustack.cpp index ef528686..76118bce 100644 --- a/icuSources/common/ustack.cpp +++ b/icuSources/common/ustack.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2003-2003, International Business Machines +* Copyright (C) 2003-2004, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -11,4 +11,51 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UStack) +UStack::UStack(UErrorCode &status) : + UVector(status) +{ +} + +UStack::UStack(int32_t initialCapacity, UErrorCode &status) : + UVector(initialCapacity, status) +{ +} + +UStack::UStack(UObjectDeleter *d, UKeyComparator *c, UErrorCode &status) : + UVector(d, c, status) +{ +} + +UStack::UStack(UObjectDeleter *d, UKeyComparator *c, int32_t initialCapacity, UErrorCode &status) : + UVector(d, c, initialCapacity, status) +{ +} + +UStack::~UStack() {} + +void* UStack::pop(void) { + int32_t n = size() - 1; + void* result = 0; + if (n >= 0) { + result = elementAt(n); + removeElementAt(n); + } + return result; +} + +int32_t UStack::popi(void) { + int32_t n = size() - 1; + int32_t result = 0; + if (n >= 0) { + result = elementAti(n); + removeElementAt(n); + } + return result; +} + +int32_t UStack::search(void* obj) const { + int32_t i = indexOf(obj); + return (i >= 0) ? size() - i : i; +} + U_NAMESPACE_END diff --git a/icuSources/common/ustr_cnv.c b/icuSources/common/ustr_cnv.c index a0537e60..05d10258 100644 --- a/icuSources/common/ustr_cnv.c +++ b/icuSources/common/ustr_cnv.c @@ -145,7 +145,7 @@ u_uastrcpy(UChar *ucs1, ucs1, MAX_STRLEN, s2, - uprv_strlen(s2), + (int32_t)uprv_strlen(s2), &err); u_releaseDefaultConverter(cnv); if(U_FAILURE(err)) { diff --git a/icuSources/common/ustr_imp.h b/icuSources/common/ustr_imp.h index 3b162e8a..bfb851d7 100644 --- a/icuSources/common/ustr_imp.h +++ b/icuSources/common/ustr_imp.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: ustr_imp.h @@ -67,8 +67,8 @@ uprv_haveProperties(UErrorCode *pErrorCode); * NOT thread safe. * @internal */ -U_CFUNC int8_t -uprv_loadPropsData(UErrorCode *errorCode); +/*U_CFUNC int8_t +uprv_loadPropsData(UErrorCode *errorCode);*/ /** * Type of a function that may be passed to the internal case mapping functions @@ -102,7 +102,7 @@ u_growBufferFromStatic(void *context, * @internal */ U_CFUNC int32_t -ustr_toLower(UCaseProps *csp, +ustr_toLower(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, @@ -112,7 +112,7 @@ ustr_toLower(UCaseProps *csp, * @internal */ U_CFUNC int32_t -ustr_toUpper(UCaseProps *csp, +ustr_toUpper(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, @@ -124,7 +124,7 @@ ustr_toUpper(UCaseProps *csp, * @internal */ U_CFUNC int32_t -ustr_toTitle(UCaseProps *csp, +ustr_toTitle(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UBreakIterator *titleIter, @@ -138,7 +138,7 @@ ustr_toTitle(UCaseProps *csp, * @internal */ U_CFUNC int32_t -ustr_foldCase(UCaseProps *csp, +ustr_foldCase(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, uint32_t options, diff --git a/icuSources/common/ustr_wcs.c b/icuSources/common/ustr_wcs.c index 119c63ad..3b0e4b08 100644 --- a/icuSources/common/ustr_wcs.c +++ b/icuSources/common/ustr_wcs.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -25,6 +25,12 @@ #include "ustr_imp.h" #include "ustr_cnv.h" +#if defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32) || !UCONFIG_NO_CONVERSION + +#define _STACK_BUFFER_CAPACITY 1000 +#define _BUFFER_CAPACITY_MULTIPLIER 2 + +#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) static U_INLINE UBool u_growAnyBufferFromStatic(void *context, void **pBuffer, int32_t *pCapacity, int32_t reqCapacity, @@ -49,10 +55,6 @@ u_growAnyBufferFromStatic(void *context, return (UBool)(newBuffer!=NULL); } -#define _STACK_BUFFER_CAPACITY 1000 -#define _BUFFER_CAPACITY_MULTIPLIER 2 - -#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) /* helper function */ static wchar_t* _strToWCS(wchar_t *dest, @@ -224,7 +226,7 @@ u_strToWCS(wchar_t *dest, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode){ - + /* args check */ if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ return NULL; @@ -272,8 +274,8 @@ _strFromWCS( UChar *dest, int32_t *pDestLength, const wchar_t *src, int32_t srcLength, - UErrorCode *pErrorCode){ - + UErrorCode *pErrorCode) +{ int32_t retVal =0, count =0 ; UConverter* conv = NULL; UChar* pTarget = NULL; @@ -307,7 +309,7 @@ _strFromWCS( UChar *dest, if(retVal == -1){ *pErrorCode = U_ILLEGAL_CHAR_FOUND; goto cleanup; - }else if(retVal == cStackCap){ + }else if(retVal >= (cStackCap-1)){ /* Should rarely occur */ u_growAnyBufferFromStatic(cStack,(void**)&pCSrc,&cStackCap, cStackCap * _BUFFER_CAPACITY_MULTIPLIER, 0, sizeof(char)); @@ -516,3 +518,5 @@ u_strFromWCS(UChar *dest, #endif } + +#endif /* #if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) && !UCONFIG_NO_CONVERSION */ diff --git a/icuSources/common/ustrcase.c b/icuSources/common/ustrcase.c index d7531f2d..866d7548 100644 --- a/icuSources/common/ustrcase.c +++ b/icuSources/common/ustrcase.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -121,18 +121,18 @@ UCaseMapFull(const UCaseProps *csp, UChar32 c, const char *locale, int32_t *locCache); /* - * Lowercases [srcStart..srcLimit[ but takes + * Case-maps [srcStart..srcLimit[ but takes * context [0..srcLength[ into account. */ static int32_t -_caseMap(UCaseProps *csp, UCaseMapFull *map, +_caseMap(const UCaseProps *csp, UCaseMapFull *map, UChar *dest, int32_t destCapacity, const UChar *src, UCaseContext *csc, int32_t srcStart, int32_t srcLimit, const char *locale, int32_t *locCache, UErrorCode *pErrorCode) { const UChar *s; - UChar32 c; + UChar32 c, c2; int32_t srcIndex, destIndex; /* case mapping loop */ @@ -143,7 +143,12 @@ _caseMap(UCaseProps *csp, UCaseMapFull *map, U16_NEXT(src, srcIndex, srcLimit, c); csc->cpLimit=srcIndex; c=map(csp, c, utf16_caseContextIterator, csc, &s, locale, locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if((destIndexdestCapacity) { @@ -160,7 +165,7 @@ _caseMap(UCaseProps *csp, UCaseMapFull *map, * Must get titleIter!=NULL. */ static int32_t -_toTitle(UCaseProps *csp, +_toTitle(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, UCaseContext *csc, int32_t srcLength, @@ -169,7 +174,7 @@ _toTitle(UCaseProps *csp, UErrorCode *pErrorCode) { const UChar *s; UChar32 c; - int32_t prev, index, destIndex; + int32_t prev, titleStart, titleLimit, index, destIndex, length; UBool isFirstIndex; /* set up local variables */ @@ -190,29 +195,65 @@ _toTitle(UCaseProps *csp, index=srcLength; } - /* lowercase [prev..index[ */ + /* + * Unicode 4 & 5 section 3.13 Default Case Operations: + * + * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex + * #29, "Text Boundaries." Between each pair of word boundaries, find the first + * cased character F. If F exists, map F to default_title(F); then map each + * subsequent character C to default_lower(C). + * + * In this implementation, segment [prev..index[ into 3 parts: + * a) uncased characters (copy as-is) [prev..titleStart[ + * b) first case letter (titlecase) [titleStart..titleLimit[ + * c) subsequent characters (lowercase) [titleLimit..index[ + */ if(prev0) { + if((destIndex+length)<=destCapacity) { + uprv_memcpy(dest+destIndex, src+prev, length*U_SIZEOF_UCHAR); + } + destIndex+=length; + } - if(index>=srcLength) { - break; + if(titleStartcpStart=titleStart; + csc->cpLimit=titleLimit; + c=ucase_toFullTitle(csp, c, utf16_caseContextIterator, csc, &s, locale, locCache); + destIndex=appendResult(dest, destIndex, destCapacity, c, s); + + /* lowercase [titleLimit..index[ */ + if(titleLimitcpStart=index; - U16_NEXT(src, index, srcLength, c); - csc->cpLimit=index; - c=ucase_toFullTitle(csp, c, utf16_caseContextIterator, csc, &s, locale, locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); - prev=index; } @@ -223,7 +264,7 @@ _toTitle(UCaseProps *csp, } U_CFUNC int32_t -ustr_toTitle(UCaseProps *csp, +ustr_toTitle(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UBreakIterator *titleIter, @@ -247,7 +288,7 @@ ustr_toTitle(UCaseProps *csp, /* functions available in the common library (for unistr_case.cpp) */ U_CFUNC int32_t -ustr_toLower(UCaseProps *csp, +ustr_toLower(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, @@ -266,7 +307,7 @@ ustr_toLower(UCaseProps *csp, } U_CFUNC int32_t -ustr_toUpper(UCaseProps *csp, +ustr_toUpper(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, @@ -285,7 +326,7 @@ ustr_toUpper(UCaseProps *csp, } U_CFUNC int32_t -ustr_foldCase(UCaseProps *csp, +ustr_foldCase(const UCaseProps *csp, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, uint32_t options, @@ -293,14 +334,19 @@ ustr_foldCase(UCaseProps *csp, int32_t srcIndex, destIndex; const UChar *s; - UChar32 c; + UChar32 c, c2; /* case mapping loop */ srcIndex=destIndex=0; while(srcIndexdestCapacity) { @@ -333,7 +379,7 @@ caseMap(UChar *dest, int32_t destCapacity, UChar buffer[300]; UChar *temp; - UCaseProps *csp; + const UCaseProps *csp; int32_t destLength; UBool ownTitleIter; @@ -527,7 +573,7 @@ u_strcmpFold(const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, uint32_t options, UErrorCode *pErrorCode) { - UCaseProps *csp; + const UCaseProps *csp; /* current-level start/limit - s1/s2 as current */ const UChar *start1, *start2, *limit1, *limit2; diff --git a/icuSources/common/ustrenum.cpp b/icuSources/common/ustrenum.cpp index 22db32b8..2a7acf68 100644 --- a/icuSources/common/ustrenum.cpp +++ b/icuSources/common/ustrenum.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -111,6 +111,15 @@ StringEnumeration::setChars(const char *s, int32_t length, UErrorCode &status) { return NULL; } +UBool +StringEnumeration::operator==(const StringEnumeration& that)const { + return getDynamicClassID() == that.getDynamicClassID(); +} + +UBool +StringEnumeration::operator!=(const StringEnumeration& that)const { + return !operator==(that); +} // UStringEnumeration implementation --------------------------------------- *** @@ -311,3 +320,4 @@ uenum_openCharStringsEnumeration(const char** strings, int32_t count, return (UEnumeration*) result; } + diff --git a/icuSources/common/ustrfmt.c b/icuSources/common/ustrfmt.c index 81b778c1..5e9fb924 100644 --- a/icuSources/common/ustrfmt.c +++ b/icuSources/common/ustrfmt.c @@ -1,42 +1,13 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ #include "cstring.h" #include "ustrfmt.h" -#include -U_CAPI char* U_EXPORT2 -uprv_dtostr(double value, char *buffer, int maximumDigits,UBool fixedPoint) -{ - char *itrPtr = buffer + 1; /* skip '-' or a number before the decimal */ - char *startPtr; - - sprintf(buffer,"%f",value); - - /* Find the decimal point. - Some unusal machines use a comma when the system locale changes - */ - while (isalnum(*itrPtr)) { - itrPtr++; - } - *itrPtr = '.'; - - /* truncate trailing zeros, except the one after '.' */ - startPtr = itrPtr + 1; - itrPtr = uprv_strchr(startPtr, 0); - while(--itrPtr > startPtr){ - if(*itrPtr == '0'){ - *itrPtr = 0; - }else{ - break; - } - } - return buffer; -} /*** * Fills in a UChar* string with the radix-based representation of a diff --git a/icuSources/common/ustrfmt.h b/icuSources/common/ustrfmt.h index 814b5373..f1891bda 100644 --- a/icuSources/common/ustrfmt.h +++ b/icuSources/common/ustrfmt.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -10,8 +10,6 @@ #include "unicode/utypes.h" -U_CAPI char* U_EXPORT2 -uprv_dtostr(double value, char *buffer, int maximumDigits,UBool fixedPoint); U_CAPI int32_t U_EXPORT2 uprv_itou (UChar * buffer, int32_t capacity, uint32_t i, uint32_t radix, int32_t minwidth); diff --git a/icuSources/common/ustring.c b/icuSources/common/ustring.c index 8c49959c..cb7fd706 100644 --- a/icuSources/common/ustring.c +++ b/icuSources/common/ustring.c @@ -990,7 +990,7 @@ U_CAPI int32_t U_EXPORT2 u_strlen(const UChar *s) { #if U_SIZEOF_WCHAR_T == U_SIZEOF_UCHAR - return uprv_wcslen(s); + return (int32_t)uprv_wcslen(s); #else const UChar *t = s; while(*t != 0) { diff --git a/icuSources/common/ustrtrns.c b/icuSources/common/ustrtrns.c index a1f2e5ab..1801d8ae 100644 --- a/icuSources/common/ustrtrns.c +++ b/icuSources/common/ustrtrns.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -101,7 +101,7 @@ u_strFromUTF32(UChar *dest, } } - reqLength += pDest - dest; + reqLength += (int32_t)(pDest - dest); if(pDestLength){ *pDestLength = reqLength; } @@ -175,7 +175,7 @@ u_strToUTF32(UChar32 *dest, } } - reqLength+=(pDest - (uint32_t *)dest); + reqLength+=(int32_t)(pDest - (uint32_t *)dest); if(pDestLength){ *pDestLength = reqLength; } @@ -186,73 +186,691 @@ u_strToUTF32(UChar32 *dest, return dest; } +/* for utf8_nextCharSafeBodyTerminated() */ +static const UChar32 +utf8_minLegal[4]={ 0, 0x80, 0x800, 0x10000 }; + +/* + * Version of utf8_nextCharSafeBody() with the following differences: + * - checks for NUL termination instead of length + * - works with pointers instead of indexes + * - always strict (strict==-1) + * + * *ps points to after the lead byte and will be moved to after the last trail byte. + * c is the lead byte. + * @return the code point, or U_SENTINEL + */ +static UChar32 +utf8_nextCharSafeBodyTerminated(const uint8_t **ps, UChar32 c) { + const uint8_t *s=*ps; + uint8_t trail, illegal=0; + uint8_t count=UTF8_COUNT_TRAIL_BYTES(c); + UTF8_MASK_LEAD_BYTE((c), count); + /* count==0 for illegally leading trail bytes and the illegal bytes 0xfe and 0xff */ + switch(count) { + /* each branch falls through to the next one */ + case 5: + case 4: + /* count>=4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ + illegal=1; + break; + case 3: + trail=(uint8_t)(*s++ - 0x80); + c=(c<<6)|trail; + if(trail>0x3f || c>=0x110) { + /* not a trail byte, or code point>0x10ffff (outside Unicode) */ + illegal=1; + break; + } + case 2: + trail=(uint8_t)(*s++ - 0x80); + if(trail>0x3f) { + /* not a trail byte */ + illegal=1; + break; + } + c=(c<<6)|trail; + case 1: + trail=(uint8_t)(*s++ - 0x80); + if(trail>0x3f) { + /* not a trail byte */ + illegal=1; + } + c=(c<<6)|trail; + break; + case 0: + return U_SENTINEL; + /* no default branch to optimize switch() - all values are covered */ + } + + /* correct sequence - all trail bytes have (b7..b6)==(10)? */ + /* illegal is also set if count>=4 */ + if(illegal || c0 && UTF8_IS_TRAIL(*s)) { + ++s; + --count; + } + c=U_SENTINEL; + } + *ps=s; + return c; +} + +/* + * Version of utf8_nextCharSafeBody() with the following differences: + * - works with pointers instead of indexes + * - always strict (strict==-1) + * + * *ps points to after the lead byte and will be moved to after the last trail byte. + * c is the lead byte. + * @return the code point, or U_SENTINEL + */ +static UChar32 +utf8_nextCharSafeBodyPointer(const uint8_t **ps, const uint8_t *limit, UChar32 c) { + const uint8_t *s=*ps; + uint8_t trail, illegal=0; + uint8_t count=UTF8_COUNT_TRAIL_BYTES(c); + if((limit-s)>=count) { + UTF8_MASK_LEAD_BYTE((c), count); + /* count==0 for illegally leading trail bytes and the illegal bytes 0xfe and 0xff */ + switch(count) { + /* each branch falls through to the next one */ + case 5: + case 4: + /* count>=4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ + illegal=1; + break; + case 3: + trail=*s++; + c=(c<<6)|(trail&0x3f); + if(c<0x110) { + illegal|=(trail&0xc0)^0x80; + } else { + /* code point>0x10ffff, outside Unicode */ + illegal=1; + break; + } + case 2: + trail=*s++; + c=(c<<6)|(trail&0x3f); + illegal|=(trail&0xc0)^0x80; + case 1: + trail=*s++; + c=(c<<6)|(trail&0x3f); + illegal|=(trail&0xc0)^0x80; + break; + case 0: + return U_SENTINEL; + /* no default branch to optimize switch() - all values are covered */ + } + } else { + illegal=1; /* too few bytes left */ + } + + /* correct sequence - all trail bytes have (b7..b6)==(10)? */ + /* illegal is also set if count>=4 */ + if(illegal || c0 && s 0)){ + if( (src==NULL) || (srcLength < -1) || (destCapacity<0) || (!dest && destCapacity > 0) || + subchar > 0x10ffff || U_IS_SURROGATE(subchar) + ) { *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; return NULL; } - if(srcLength == -1){ - srcLength = uprv_strlen((char*)pSrc); - } - - while((index < srcLength)&&(pDest 0xe0) { + if( /* handle U+1000..U+CFFF inline */ + ch <= 0xec && + (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && + (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f + ) { + /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ + *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); + pSrc += 3; + continue; + } + } else if(ch < 0xe0) { + if( /* handle U+0080..U+07FF inline */ + ch >= 0xc2 && + (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f + ) { + *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); + pSrc += 2; + continue; + } + } + + /* function call for "complicated" and error cases */ + ++pSrc; /* continue after the lead byte */ + ch=utf8_nextCharSafeBodyTerminated(&pSrc, ch); + if(ch<0 && (++numSubstitutions, ch = subchar) < 0) { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + } else if(ch<=0xFFFF) { + *(pDest++)=(UChar)ch; + } else { + *(pDest++)=UTF16_LEAD(ch); + if(pDest 0xe0) { + if( /* handle U+1000..U+CFFF inline */ + ch <= 0xec && + (uint8_t)(pSrc[1] - 0x80) <= 0x3f && + (uint8_t)(pSrc[2] - 0x80) <= 0x3f + ) { + ++reqLength; + pSrc += 3; + continue; + } + } else if(ch < 0xe0) { + if( /* handle U+0080..U+07FF inline */ + ch >= 0xc2 && + (uint8_t)(pSrc[1] - 0x80) <= 0x3f + ) { + ++reqLength; + pSrc += 2; + continue; + } + } + + /* function call for "complicated" and error cases */ + ++pSrc; /* continue after the lead byte */ + ch=utf8_nextCharSafeBodyTerminated(&pSrc, ch); + if(ch<0 && (++numSubstitutions, ch = subchar) < 0) { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + } + reqLength += U16_LENGTH(ch); + } + } + } else /* srcLength >= 0 */ { + const uint8_t *pSrcLimit = pSrc + srcLength; + int32_t count; + + /* Faster loop without ongoing checking for pSrcLimit and pDestLimit. */ + for(;;) { + /* + * Each iteration of the inner loop progresses by at most 3 UTF-8 + * bytes and one UChar, for most characters. + * For supplementary code points (4 & 2), which are rare, + * there is an additional adjustment. + */ + count = (int32_t)(pDestLimit - pDest); + srcLength = (int32_t)((pSrcLimit - pSrc) / 3); + if(count > srcLength) { + count = srcLength; /* min(remaining dest, remaining src/3) */ + } + if(count < 3) { + /* + * Too much overhead if we get near the end of the string, + * continue with the next loop. + */ + break; + } + + do { + ch = *pSrc; + if(ch <= 0x7f){ + *pDest++=(UChar)ch; + ++pSrc; + } else { + if(ch > 0xe0) { + if( /* handle U+1000..U+CFFF inline */ + ch <= 0xec && + (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && + (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f + ) { + /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ + *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); + pSrc += 3; + continue; + } + } else if(ch < 0xe0) { + if( /* handle U+0080..U+07FF inline */ + ch >= 0xc2 && + (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f + ) { + *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); + pSrc += 2; + continue; + } + } + + if(ch >= 0xf0 || subchar > 0xffff) { + /* + * We may read up to six bytes and write up to two UChars, + * which we didn't account for with computing count, + * so we adjust it here. + */ + if(--count == 0) { + break; + } + } + + /* function call for "complicated" and error cases */ + ++pSrc; /* continue after the lead byte */ + ch=utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); + if(ch<0 && (++numSubstitutions, ch = subchar) < 0){ + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + }else if(ch<=0xFFFF){ + *(pDest++)=(UChar)ch; + }else{ + *(pDest++)=UTF16_LEAD(ch); + if(pDest 0); + } + + while((pSrc 0xe0) { + if( /* handle U+1000..U+CFFF inline */ + ch <= 0xec && + ((pSrcLimit - pSrc) >= 3) && + (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && + (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f + ) { + /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ + *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); + pSrc += 3; + continue; + } + } else if(ch < 0xe0) { + if( /* handle U+0080..U+07FF inline */ + ch >= 0xc2 && + ((pSrcLimit - pSrc) >= 2) && + (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f + ) { + *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); + pSrc += 2; + continue; + } + } + + /* function call for "complicated" and error cases */ + ++pSrc; /* continue after the lead byte */ + ch=utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); + if(ch<0 && (++numSubstitutions, ch = subchar) < 0){ + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + }else if(ch<=0xFFFF){ + *(pDest++)=(UChar)ch; }else{ - reqLength++; - break; + *(pDest++)=UTF16_LEAD(ch); + if(pDest 0xe0) { + if( /* handle U+1000..U+CFFF inline */ + ch <= 0xec && + ((pSrcLimit - pSrc) >= 3) && + (uint8_t)(pSrc[1] - 0x80) <= 0x3f && + (uint8_t)(pSrc[2] - 0x80) <= 0x3f + ) { + reqLength++; + pSrc += 3; + continue; + } + } else if(ch < 0xe0) { + if( /* handle U+0080..U+07FF inline */ + ch >= 0xc2 && + ((pSrcLimit - pSrc) >= 2) && + (uint8_t)(pSrc[1] - 0x80) <= 0x3f + ) { + reqLength++; + pSrc += 2; + continue; + } } + + /* function call for "complicated" and error cases */ + ++pSrc; /* continue after the lead byte */ + ch=utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); + if(ch<0 && (++numSubstitutions, ch = subchar) < 0){ + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + } + reqLength+=UTF_CHAR_LENGTH(ch); } } } - /* donot fill the dest buffer just count the UChars needed */ - while(index < srcLength){ - ch = pSrc[index++]; - if(ch <= 0x7f){ - reqLength++; - }else{ - ch=utf8_nextCharSafeBody(pSrc, &index, srcLength, ch, -1); - if(ch<0){ - *pErrorCode = U_INVALID_CHAR_FOUND; - return NULL; + + reqLength+=(int32_t)(pDest - dest); + + if(pNumSubstitutions!=NULL) { + *pNumSubstitutions=numSubstitutions; + } + + if(pDestLength){ + *pDestLength = reqLength; + } + + /* Terminate the buffer */ + u_terminateUChars(dest,destCapacity,reqLength,pErrorCode); + + return dest; +} + +U_CAPI UChar* U_EXPORT2 +u_strFromUTF8(UChar *dest, + int32_t destCapacity, + int32_t *pDestLength, + const char* src, + int32_t srcLength, + UErrorCode *pErrorCode){ + return u_strFromUTF8WithSub( + dest, destCapacity, pDestLength, + src, srcLength, + U_SENTINEL, NULL, + pErrorCode); +} + +U_CAPI UChar * U_EXPORT2 +u_strFromUTF8Lenient(UChar *dest, + int32_t destCapacity, + int32_t *pDestLength, + const char *src, + int32_t srcLength, + UErrorCode *pErrorCode) { + + UChar *pDest = dest; + UChar32 ch; + int32_t reqLength = 0; + uint8_t* pSrc = (uint8_t*) src; + + /* args check */ + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ + return NULL; + } + + if((src==NULL) || (srcLength < -1) || (destCapacity<0) || (!dest && destCapacity > 0)) { + *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + if(srcLength < 0) { + /* Transform a NUL-terminated string. */ + UChar *pDestLimit = dest+destCapacity; + uint8_t t1, t2, t3; /* trail bytes */ + + while(((ch = *pSrc) != 0) && (pDest < pDestLimit)) { + if(ch < 0xc0) { + /* + * ASCII, or a trail byte in lead position which is treated like + * a single-byte sequence for better character boundary + * resynchronization after illegal sequences. + */ + *pDest++=(UChar)ch; + ++pSrc; + continue; + } else if(ch < 0xe0) { /* U+0080..U+07FF */ + if((t1 = pSrc[1]) != 0) { + /* 0x3080 = (0xc0 << 6) + 0x80 */ + *pDest++ = (UChar)((ch << 6) + t1 - 0x3080); + pSrc += 2; + continue; + } + } else if(ch < 0xf0) { /* U+0800..U+FFFF */ + if((t1 = pSrc[1]) != 0 && (t2 = pSrc[2]) != 0) { + /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ + /* 0x2080 = (0x80 << 6) + 0x80 */ + *pDest++ = (UChar)((ch << 12) + (t1 << 6) + t2 - 0x2080); + pSrc += 3; + continue; + } + } else /* f0..f4 */ { /* U+10000..U+10FFFF */ + if((t1 = pSrc[1]) != 0 && (t2 = pSrc[2]) != 0 && (t3 = pSrc[3]) != 0) { + pSrc += 4; + /* 0x3c82080 = (0xf0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80 */ + ch = (ch << 18) + (t1 << 12) + (t2 << 6) + t3 - 0x3c82080; + *(pDest++) = U16_LEAD(ch); + if(pDest < pDestLimit) { + *(pDest++) = U16_TRAIL(ch); + } else { + reqLength = 1; + break; + } + continue; + } } - reqLength+=UTF_CHAR_LENGTH(ch); + + /* truncated character at the end */ + *pDest++ = 0xfffd; + while(*++pSrc != 0) {} + break; + } + + /* Pre-flight the rest of the string. */ + while((ch = *pSrc) != 0) { + if(ch < 0xc0) { + /* + * ASCII, or a trail byte in lead position which is treated like + * a single-byte sequence for better character boundary + * resynchronization after illegal sequences. + */ + ++reqLength; + ++pSrc; + continue; + } else if(ch < 0xe0) { /* U+0080..U+07FF */ + if(pSrc[1] != 0) { + ++reqLength; + pSrc += 2; + continue; + } + } else if(ch < 0xf0) { /* U+0800..U+FFFF */ + if(pSrc[1] != 0 && pSrc[2] != 0) { + ++reqLength; + pSrc += 3; + continue; + } + } else /* f0..f4 */ { /* U+10000..U+10FFFF */ + if(pSrc[1] != 0 && pSrc[2] != 0 && pSrc[3] != 0) { + reqLength += 2; + pSrc += 4; + continue; + } + } + + /* truncated character at the end */ + ++reqLength; + break; + } + } else /* srcLength >= 0 */ { + const uint8_t *pSrcLimit = pSrc + srcLength; + + /* + * This function requires that if srcLength is given, then it must be + * destCapatity >= srcLength so that we need not check for + * destination buffer overflow in the loop. + */ + if(destCapacity < srcLength) { + if(pDestLength != NULL) { + *pDestLength = srcLength; /* this likely overestimates the true destLength! */ + } + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + return NULL; + } + + if((pSrcLimit - pSrc) >= 4) { + pSrcLimit -= 3; /* temporarily reduce pSrcLimit */ + + /* in this loop, we can always access at least 4 bytes, up to pSrc+3 */ + do { + ch = *pSrc++; + if(ch < 0xc0) { + /* + * ASCII, or a trail byte in lead position which is treated like + * a single-byte sequence for better character boundary + * resynchronization after illegal sequences. + */ + *pDest++=(UChar)ch; + } else if(ch < 0xe0) { /* U+0080..U+07FF */ + /* 0x3080 = (0xc0 << 6) + 0x80 */ + *pDest++ = (UChar)((ch << 6) + *pSrc++ - 0x3080); + } else if(ch < 0xf0) { /* U+0800..U+FFFF */ + /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ + /* 0x2080 = (0x80 << 6) + 0x80 */ + ch = (ch << 12) + (*pSrc++ << 6); + *pDest++ = (UChar)(ch + *pSrc++ - 0x2080); + } else /* f0..f4 */ { /* U+10000..U+10FFFF */ + /* 0x3c82080 = (0xf0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80 */ + ch = (ch << 18) + (*pSrc++ << 12); + ch += *pSrc++ << 6; + ch += *pSrc++ - 0x3c82080; + *(pDest++) = U16_LEAD(ch); + *(pDest++) = U16_TRAIL(ch); + } + } while(pSrc < pSrcLimit); + + pSrcLimit += 3; /* restore original pSrcLimit */ + } + + while(pSrc < pSrcLimit) { + ch = *pSrc++; + if(ch < 0xc0) { + /* + * ASCII, or a trail byte in lead position which is treated like + * a single-byte sequence for better character boundary + * resynchronization after illegal sequences. + */ + *pDest++=(UChar)ch; + continue; + } else if(ch < 0xe0) { /* U+0080..U+07FF */ + if(pSrc < pSrcLimit) { + /* 0x3080 = (0xc0 << 6) + 0x80 */ + *pDest++ = (UChar)(((ch & 0x1f) << 6) + *pSrc++ - 0x3080); + continue; + } + } else if(ch < 0xf0) { /* U+0800..U+FFFF */ + if((pSrcLimit - pSrc) >= 2) { + /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ + /* 0x2080 = (0x80 << 6) + 0x80 */ + ch = (ch << 12) + (*pSrc++ << 6); + *pDest++ = (UChar)(ch + *pSrc++ - 0x2080); + pSrc += 3; + continue; + } + } else /* f0..f4 */ { /* U+10000..U+10FFFF */ + if((pSrcLimit - pSrc) >= 3) { + /* 0x3c82080 = (0xf0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80 */ + ch = (ch << 18) + (*pSrc++ << 12); + ch += *pSrc++ << 6; + ch += *pSrc++ - 0x3c82080; + *(pDest++) = U16_LEAD(ch); + *(pDest++) = U16_TRAIL(ch); + pSrc += 4; + continue; + } + } + + /* truncated character at the end */ + *pDest++ = 0xfffd; + break; } } - reqLength+=(pDest - dest); + reqLength+=(int32_t)(pDest - dest); if(pDestLength){ *pDestLength = reqLength; @@ -266,11 +884,13 @@ u_strFromUTF8(UChar *dest, static U_INLINE uint8_t * _appendUTF8(uint8_t *pDest, UChar32 c) { - /* c<=0x7f is handled by the caller, here it is 0x80<=c<=0x10ffff */ - if((c)<=0x7ff) { + /* it is 0<=c<=0x10ffff and not a surrogate if called by a validating function */ + if((c)<=0x7f) { + *pDest++=(uint8_t)c; + } else if(c<=0x7ff) { *pDest++=(uint8_t)((c>>6)|0xc0); *pDest++=(uint8_t)((c&0x3f)|0x80); - } else if((uint32_t)(c)<=0xffff) { + } else if(c<=0xffff) { *pDest++=(uint8_t)((c>>12)|0xe0); *pDest++=(uint8_t)(((c>>6)&0x3f)|0x80); *pDest++=(uint8_t)(((c)&0x3f)|0x80); @@ -285,57 +905,86 @@ _appendUTF8(uint8_t *pDest, UChar32 c) { U_CAPI char* U_EXPORT2 -u_strToUTF8(char *dest, +u_strToUTF8WithSub(char *dest, int32_t destCapacity, int32_t *pDestLength, - const UChar *pSrc, + const UChar *pSrc, int32_t srcLength, + UChar32 subchar, int32_t *pNumSubstitutions, UErrorCode *pErrorCode){ int32_t reqLength=0; - const UChar *pSrcLimit; uint32_t ch=0,ch2=0; uint8_t *pDest = (uint8_t *)dest; uint8_t *pDestLimit = pDest + destCapacity; - + int32_t numSubstitutions; /* args check */ if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ return NULL; } - if((pSrc==NULL) || (srcLength < -1) || (destCapacity<0) || (!dest && destCapacity > 0)){ + if( (pSrc==NULL) || (srcLength < -1) || (destCapacity<0) || (!dest && destCapacity > 0) || + subchar > 0x10ffff || U_IS_SURROGATE(subchar) + ) { *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; return NULL; } + numSubstitutions=0; + if(srcLength==-1) { - while((ch=*pSrc)!=0 && pDest!=pDestLimit) { + while((ch=*pSrc)!=0) { ++pSrc; if(ch <= 0x7f) { - *pDest++ = (char)ch; - ++reqLength; - continue; - } + if(pDest= 2) { + *pDest++=(uint8_t)((ch>>6)|0xc0); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else { + reqLength = 2; + break; + } + } else if(ch <= 0xd7ff || ch >= 0xe000) { + if((pDestLimit - pDest) >= 3) { + *pDest++=(uint8_t)((ch>>12)|0xe0); + *pDest++=(uint8_t)(((ch>>6)&0x3f)|0x80); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else { + reqLength = 3; + break; + } + } else /* ch is a surrogate */ { + int32_t length; - /*need not check for NUL because NUL fails UTF_IS_TRAIL() anyway*/ - if(UTF_IS_SURROGATE(ch)) { + /*need not check for NUL because NUL fails UTF_IS_TRAIL() anyway*/ if(UTF_IS_SURROGATE_FIRST(ch) && UTF_IS_TRAIL(ch2=*pSrc)) { ++pSrc; ch=UTF16_GET_PAIR_VALUE(ch, ch2); + } else if(subchar>=0) { + ch=subchar; + ++numSubstitutions; } else { /* Unicode 3.2 forbids surrogate code points in UTF-8 */ *pErrorCode = U_INVALID_CHAR_FOUND; return NULL; } + + length = U8_LENGTH(ch); + if((pDestLimit - pDest) >= length) { + /* convert and append*/ + pDest=_appendUTF8(pDest, ch); + } else { + reqLength = length; + break; + } } - reqLength += UTF8_CHAR_LENGTH(ch); - /* do we have enough room in destination? */ - if(destCapacity< reqLength){ - break; - } - /* convert and append*/ - pDest=_appendUTF8(pDest, ch); } while((ch=*pSrc++)!=0) { if(ch<=0x7f) { @@ -347,6 +996,9 @@ u_strToUTF8(char *dest, } else if(UTF_IS_SURROGATE_FIRST(ch) && UTF_IS_TRAIL(ch2=*pSrc)) { ++pSrc; reqLength+=4; + } else if(subchar>=0) { + reqLength+=U8_LENGTH(subchar); + ++numSubstitutions; } else { /* Unicode 3.2 forbids surrogate code points in UTF-8 */ *pErrorCode = U_INVALID_CHAR_FOUND; @@ -354,32 +1006,127 @@ u_strToUTF8(char *dest, } } } else { - pSrcLimit = pSrc+srcLength; - while(pSrc srcLength) { + count = srcLength; /* min(remaining dest/3, remaining src) */ + } + if(count < 3) { + /* + * Too much overhead if we get near the end of the string, + * continue with the next loop. + */ + break; + } + do { + ch=*pSrc++; + if(ch <= 0x7f) { + *pDest++ = (char)ch; + } else if(ch <= 0x7ff) { + *pDest++=(uint8_t)((ch>>6)|0xc0); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else if(ch <= 0xd7ff || ch >= 0xe000) { + *pDest++=(uint8_t)((ch>>12)|0xe0); + *pDest++=(uint8_t)(((ch>>6)&0x3f)|0x80); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else /* ch is a surrogate */ { + /* + * We will read two UChars and probably output four bytes, + * which we didn't account for with computing count, + * so we adjust it here. + */ + if(--count == 0) { + --pSrc; /* undo ch=*pSrc++ for the lead surrogate */ + break; /* recompute count */ + } + + if(UTF_IS_SURROGATE_FIRST(ch) && UTF_IS_TRAIL(ch2=*pSrc)) { + ++pSrc; + ch=UTF16_GET_PAIR_VALUE(ch, ch2); + + /* writing 4 bytes per 2 UChars is ok */ + *pDest++=(uint8_t)((ch>>18)|0xf0); + *pDest++=(uint8_t)(((ch>>12)&0x3f)|0x80); + *pDest++=(uint8_t)(((ch>>6)&0x3f)|0x80); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else { + /* Unicode 3.2 forbids surrogate code points in UTF-8 */ + if(subchar>=0) { + ch=subchar; + ++numSubstitutions; + } else { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + } + + /* convert and append*/ + pDest=_appendUTF8(pDest, ch); + } + } + } while(--count > 0); + } + + while(pSrc= 2) { + *pDest++=(uint8_t)((ch>>6)|0xc0); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else { + reqLength = 2; + break; + } + } else if(ch <= 0xd7ff || ch >= 0xe000) { + if((pDestLimit - pDest) >= 3) { + *pDest++=(uint8_t)((ch>>12)|0xe0); + *pDest++=(uint8_t)(((ch>>6)&0x3f)|0x80); + *pDest++=(uint8_t)((ch&0x3f)|0x80); + } else { + reqLength = 3; + break; + } + } else /* ch is a surrogate */ { + int32_t length; - if(UTF_IS_SURROGATE(ch)) { if(UTF_IS_SURROGATE_FIRST(ch) && pSrc=0) { + ch=subchar; + ++numSubstitutions; } else { /* Unicode 3.2 forbids surrogate code points in UTF-8 */ *pErrorCode = U_INVALID_CHAR_FOUND; return NULL; } + + length = U8_LENGTH(ch); + if((pDestLimit - pDest) >= length) { + /* convert and append*/ + pDest=_appendUTF8(pDest, ch); + } else { + reqLength = length; + break; + } } - reqLength += UTF8_CHAR_LENGTH(ch); - /* do we have enough room in destination? */ - if(destCapacity< reqLength){ - break; - } - /* convert and append*/ - pDest=_appendUTF8(pDest, ch); } while(pSrc=0) { + reqLength+=U8_LENGTH(subchar); + ++numSubstitutions; } else { /* Unicode 3.2 forbids surrogate code points in UTF-8 */ *pErrorCode = U_INVALID_CHAR_FOUND; @@ -400,6 +1150,12 @@ u_strToUTF8(char *dest, } } + reqLength+=(int32_t)(pDest - (uint8_t *)dest); + + if(pNumSubstitutions!=NULL) { + *pNumSubstitutions=numSubstitutions; + } + if(pDestLength){ *pDestLength = reqLength; } @@ -409,3 +1165,17 @@ u_strToUTF8(char *dest, return (char*)dest; } + +U_CAPI char* U_EXPORT2 +u_strToUTF8(char *dest, + int32_t destCapacity, + int32_t *pDestLength, + const UChar *pSrc, + int32_t srcLength, + UErrorCode *pErrorCode){ + return u_strToUTF8WithSub( + dest, destCapacity, pDestLength, + pSrc, srcLength, + U_SENTINEL, NULL, + pErrorCode); +} diff --git a/icuSources/common/utext.cpp b/icuSources/common/utext.cpp new file mode 100644 index 00000000..da496cd0 --- /dev/null +++ b/icuSources/common/utext.cpp @@ -0,0 +1,2820 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: utext.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005apr12 +* created by: Markus W. Scherer +*/ + +#include "unicode/utypes.h" +#include "unicode/ustring.h" +#include "unicode/unistr.h" +#include "unicode/chariter.h" +#include "unicode/utext.h" +#include "ustr_imp.h" +#include "cmemory.h" +#include "cstring.h" +#include "uassert.h" + + +#define I32_FLAG(bitIndex) ((int32_t)1<<(bitIndex)) + + +static UBool +utext_access(UText *ut, int64_t index, UBool forward) { + return ut->pFuncs->access(ut, index, forward); +} + + + +U_DRAFT UBool U_EXPORT2 +utext_moveIndex32(UText *ut, int32_t delta) { + UChar32 c; + if (delta > 0) { + do { + if(ut->chunkOffset>=ut->chunkLength && !utext_access(ut, ut->chunkNativeLimit, TRUE)) { + return FALSE; + } + c = ut->chunkContents[ut->chunkOffset]; + if (U16_IS_SURROGATE(c)) { + c = utext_next32(ut); + if (c == U_SENTINEL) { + return FALSE; + } + } else { + ut->chunkOffset++; + } + } while(--delta>0); + + } else if (delta<0) { + do { + if(ut->chunkOffset<=0 && !utext_access(ut, ut->chunkNativeStart, FALSE)) { + return FALSE; + } + c = ut->chunkContents[ut->chunkOffset-1]; + if (U16_IS_SURROGATE(c)) { + c = utext_previous32(ut); + if (c == U_SENTINEL) { + return FALSE; + } + } else { + ut->chunkOffset--; + } + } while(++delta<0); + } + + return TRUE; +} + + +U_DRAFT int64_t U_EXPORT2 +utext_nativeLength(UText *ut) { + return ut->pFuncs->nativeLength(ut); +} + + +U_DRAFT UBool U_EXPORT2 +utext_isLengthExpensive(const UText *ut) { + UBool r = (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE)) != 0; + return r; +} + + +U_DRAFT int64_t U_EXPORT2 +utext_getNativeIndex(const UText *ut) { + if(ut->chunkOffset <= ut->nativeIndexingLimit) { + return ut->chunkNativeStart+ut->chunkOffset; + } else { + return ut->pFuncs->mapOffsetToNative(ut); + } +} + + +U_DRAFT void U_EXPORT2 +utext_setNativeIndex(UText *ut, int64_t index) { + if(indexchunkNativeStart || index>=ut->chunkNativeLimit) { + // The desired position is outside of the current chunk. + // Access the new position. Assume a forward iteration from here, + // which will also be optimimum for a single random access. + // Reverse iterations may suffer slightly. + ut->pFuncs->access(ut, index, TRUE); + } else if((int32_t)(index - ut->chunkNativeStart) <= ut->nativeIndexingLimit) { + // utf-16 indexing. + ut->chunkOffset=(int32_t)(index-ut->chunkNativeStart); + } else { + ut->chunkOffset=ut->pFuncs->mapNativeIndexToUTF16(ut, index); + } + // The convention is that the index must always be on a code point boundary. + // Adjust the index position if it is in the middle of a surrogate pair. + if (ut->chunkOffsetchunkLength) { + UChar c= ut->chunkContents[ut->chunkOffset]; + if (UTF16_IS_TRAIL(c)) { + if (ut->chunkOffset==0) { + ut->pFuncs->access(ut, ut->chunkNativeStart, FALSE); + } + if (ut->chunkOffset>0) { + UChar lead = ut->chunkContents[ut->chunkOffset-1]; + if (UTF16_IS_LEAD(lead)) { + ut->chunkOffset--; + } + } + } + } +} + + + +U_DRAFT int64_t U_EXPORT2 +utext_getPreviousNativeIndex(UText *ut) { + // + // Fast-path the common case. + // Common means current position is not at the beginning of a chunk + // and the preceding character is not supplementary. + // + int32_t i = ut->chunkOffset - 1; + int64_t result; + if (i >= 0) { + UChar c = ut->chunkContents[i]; + if (U16_IS_TRAIL(c) == FALSE) { + if (i <= ut->nativeIndexingLimit) { + result = ut->chunkNativeStart + i; + } else { + ut->chunkOffset = i; + result = ut->pFuncs->mapOffsetToNative(ut); + ut->chunkOffset++; + } + return result; + } + } + + // If at the start of text, simply return 0. + if (ut->chunkOffset==0 && ut->chunkNativeStart==0) { + return 0; + } + + // Harder, less common cases. We are at a chunk boundary, or on a surrogate. + // Keep it simple, use other functions to handle the edges. + // + utext_previous32(ut); + result = UTEXT_GETNATIVEINDEX(ut); + utext_next32(ut); + return result; +} + + +// +// utext_current32. Get the UChar32 at the current position. +// UText iteration position is always on a code point boundary, +// never on the trail half of a surrogate pair. +// +U_DRAFT UChar32 U_EXPORT2 +utext_current32(UText *ut) { + UChar32 c; + if (ut->chunkOffset==ut->chunkLength) { + // Current position is just off the end of the chunk. + if (ut->pFuncs->access(ut, ut->chunkNativeLimit, TRUE) == FALSE) { + // Off the end of the text. + return U_SENTINEL; + } + } + + c = ut->chunkContents[ut->chunkOffset]; + if (U16_IS_LEAD(c) == FALSE) { + // Normal, non-supplementary case. + return c; + } + + // + // Possible supplementary char. + // + UChar32 trail = 0; + UChar32 supplementaryC = c; + if ((ut->chunkOffset+1) < ut->chunkLength) { + // The trail surrogate is in the same chunk. + trail = ut->chunkContents[ut->chunkOffset+1]; + } else { + // The trail surrogate is in a different chunk. + // Because we must maintain the iteration position, we need to switch forward + // into the new chunk, get the trail surrogate, then revert the chunk back to the + // original one. + // An edge case to be careful of: the entire text may end with an unpaired + // leading surrogate. The attempt to access the trail will fail, but + // the original position before the unpaired lead still needs to be restored. + int64_t nativePosition = ut->chunkNativeLimit; + int32_t originalOffset = ut->chunkOffset; + if (ut->pFuncs->access(ut, nativePosition, TRUE)) { + trail = ut->chunkContents[ut->chunkOffset]; + } + UBool r = ut->pFuncs->access(ut, nativePosition, FALSE); // reverse iteration flag loads preceding chunk + U_ASSERT(r==TRUE); + ut->chunkOffset = originalOffset; + if(!r) { + return U_SENTINEL; + } + } + + if (U16_IS_TRAIL(trail)) { + supplementaryC = U16_GET_SUPPLEMENTARY(c, trail); + } + return supplementaryC; + +} + + +U_DRAFT UChar32 U_EXPORT2 +utext_char32At(UText *ut, int64_t nativeIndex) { + UChar32 c = U_SENTINEL; + + // Fast path the common case. + if (nativeIndex>=ut->chunkNativeStart && nativeIndex < ut->chunkNativeStart + ut->nativeIndexingLimit) { + ut->chunkOffset = (int32_t)(nativeIndex - ut->chunkNativeStart); + c = ut->chunkContents[ut->chunkOffset]; + if (U16_IS_SURROGATE(c) == FALSE) { + return c; + } + } + + + utext_setNativeIndex(ut, nativeIndex); + if (nativeIndex>=ut->chunkNativeStart && ut->chunkOffsetchunkLength) { + c = ut->chunkContents[ut->chunkOffset]; + if (U16_IS_SURROGATE(c)) { + // For surrogates, let current32() deal with the complications + // of supplementaries that may span chunk boundaries. + c = utext_current32(ut); + } + } + return c; +} + + +U_DRAFT UChar32 U_EXPORT2 +utext_next32(UText *ut) { + UChar32 c; + + if (ut->chunkOffset >= ut->chunkLength) { + if (ut->pFuncs->access(ut, ut->chunkNativeLimit, TRUE) == FALSE) { + return U_SENTINEL; + } + } + + c = ut->chunkContents[ut->chunkOffset++]; + if (U16_IS_LEAD(c) == FALSE) { + // Normal case, not supplementary. + // (A trail surrogate seen here is just returned as is, as a surrogate value. + // It cannot be part of a pair.) + return c; + } + + if (ut->chunkOffset >= ut->chunkLength) { + if (ut->pFuncs->access(ut, ut->chunkNativeLimit, TRUE) == FALSE) { + // c is an unpaired lead surrogate at the end of the text. + // return it as it is. + return c; + } + } + UChar32 trail = ut->chunkContents[ut->chunkOffset]; + if (U16_IS_TRAIL(trail) == FALSE) { + // c was an unpaired lead surrogate, not at the end of the text. + // return it as it is (unpaired). Iteration position is on the + // following character, possibly in the next chunk, where the + // trail surrogate would have been if it had existed. + return c; + } + + UChar32 supplementary = U16_GET_SUPPLEMENTARY(c, trail); + ut->chunkOffset++; // move iteration position over the trail surrogate. + return supplementary; + } + + +U_DRAFT UChar32 U_EXPORT2 +utext_previous32(UText *ut) { + UChar32 c; + + if (ut->chunkOffset <= 0) { + if (ut->pFuncs->access(ut, ut->chunkNativeStart, FALSE) == FALSE) { + return U_SENTINEL; + } + } + ut->chunkOffset--; + c = ut->chunkContents[ut->chunkOffset]; + if (U16_IS_TRAIL(c) == FALSE) { + // Normal case, not supplementary. + // (A lead surrogate seen here is just returned as is, as a surrogate value. + // It cannot be part of a pair.) + return c; + } + + if (ut->chunkOffset <= 0) { + if (ut->pFuncs->access(ut, ut->chunkNativeStart, FALSE) == FALSE) { + // c is an unpaired trail surrogate at the start of the text. + // return it as it is. + return c; + } + } + + UChar32 lead = ut->chunkContents[ut->chunkOffset-1]; + if (U16_IS_LEAD(lead) == FALSE) { + // c was an unpaired trail surrogate, not at the end of the text. + // return it as it is (unpaired). Iteration position is at c + return c; + } + + UChar32 supplementary = U16_GET_SUPPLEMENTARY(lead, c); + ut->chunkOffset--; // move iteration position over the lead surrogate. + return supplementary; +} + + + +U_DRAFT UChar32 U_EXPORT2 +utext_next32From(UText *ut, int64_t index) { + UChar32 c = U_SENTINEL; + + if(indexchunkNativeStart || index>=ut->chunkNativeLimit) { + // Desired position is outside of the current chunk. + if(!ut->pFuncs->access(ut, index, TRUE)) { + // no chunk available here + return U_SENTINEL; + } + } else if (index - ut->chunkNativeStart <= (int64_t)ut->nativeIndexingLimit) { + // Desired position is in chunk, with direct 1:1 native to UTF16 indexing + ut->chunkOffset = (int32_t)(index - ut->chunkNativeStart); + } else { + // Desired position is in chunk, with non-UTF16 indexing. + ut->chunkOffset = ut->pFuncs->mapNativeIndexToUTF16(ut, index); + } + + c = ut->chunkContents[ut->chunkOffset++]; + if (U16_IS_SURROGATE(c)) { + // Surrogates. Many edge cases. Use other functions that already + // deal with the problems. + utext_setNativeIndex(ut, index); + c = utext_next32(ut); + } + return c; +} + + +U_DRAFT UChar32 U_EXPORT2 +utext_previous32From(UText *ut, int64_t index) { + // + // Return the character preceding the specified index. + // Leave the iteration position at the start of the character that was returned. + // + UChar32 cPrev; // The character preceding cCurr, which is what we will return. + + // Address the chunk containg the position preceding the incoming index + // A tricky edge case: + // We try to test the requested native index against the chunkNativeStart to determine + // whether the character preceding the one at the index is in the current chunk. + // BUT, this test can fail with UTF-8 (or any other multibyte encoding), when the + // requested index is on something other than the first position of the first char. + // + if(index<=ut->chunkNativeStart || index>ut->chunkNativeLimit) { + // Requested native index is outside of the current chunk. + if(!ut->pFuncs->access(ut, index, FALSE)) { + // no chunk available here + return U_SENTINEL; + } + } else if(index - ut->chunkNativeStart <= (int64_t)ut->nativeIndexingLimit) { + // Direct UTF-16 indexing. + ut->chunkOffset = (int32_t)(index - ut->chunkNativeStart); + } else { + ut->chunkOffset=ut->pFuncs->mapNativeIndexToUTF16(ut, index); + if (ut->chunkOffset==0 && !ut->pFuncs->access(ut, index, FALSE)) { + // no chunk available here + return U_SENTINEL; + } + } + + // + // Simple case with no surrogates. + // + ut->chunkOffset--; + cPrev = ut->chunkContents[ut->chunkOffset]; + + if (U16_IS_SURROGATE(cPrev)) { + // Possible supplementary. Many edge cases. + // Let other functions do the heavy lifting. + utext_setNativeIndex(ut, index); + cPrev = utext_previous32(ut); + } + return cPrev; +} + + +U_DRAFT int32_t U_EXPORT2 +utext_extract(UText *ut, + int64_t start, int64_t limit, + UChar *dest, int32_t destCapacity, + UErrorCode *status) { + return ut->pFuncs->extract(ut, start, limit, dest, destCapacity, status); + } + + + +U_DRAFT UBool U_EXPORT2 +utext_equals(const UText *a, const UText *b) { + if (a==NULL || b==NULL || + a->magic != UTEXT_MAGIC || + b->magic != UTEXT_MAGIC) { + // Null or invalid arguments don't compare equal to anything. + return FALSE; + } + + if (a->pFuncs != b->pFuncs) { + // Different types of text providers. + return FALSE; + } + + if (a->context != b->context) { + // Different sources (different strings) + return FALSE; + } + if (utext_getNativeIndex(a) != utext_getNativeIndex(b)) { + // Different current position in the string. + return FALSE; + } + + return TRUE; +} + +U_DRAFT UBool U_EXPORT2 +utext_isWritable(const UText *ut) +{ + UBool b = (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_WRITABLE)) != 0; + return b; +} + + +U_DRAFT void U_EXPORT2 +utext_freeze(UText *ut) { + // Zero out the WRITABLE flag. + ut->providerProperties &= ~(I32_FLAG(UTEXT_PROVIDER_WRITABLE)); +} + + +U_DRAFT UBool U_EXPORT2 +utext_hasMetaData(const UText *ut) +{ + UBool b = (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_HAS_META_DATA)) != 0; + return b; +} + + + +U_DRAFT int32_t U_EXPORT2 +utext_replace(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + const UChar *replacementText, int32_t replacementLength, + UErrorCode *status) +{ + if (U_FAILURE(*status)) { + return 0; + } + if ((ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_WRITABLE)) == 0) { + *status = U_NO_WRITE_PERMISSION; + return 0; + } + int32_t i = ut->pFuncs->replace(ut, nativeStart, nativeLimit, replacementText, replacementLength, status); + return i; +} + +U_DRAFT void U_EXPORT2 +utext_copy(UText *ut, + int64_t nativeStart, int64_t nativeLimit, + int64_t destIndex, + UBool move, + UErrorCode *status) +{ + if (U_FAILURE(*status)) { + return; + } + if ((ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_WRITABLE)) == 0) { + *status = U_NO_WRITE_PERMISSION; + return; + } + ut->pFuncs->copy(ut, nativeStart, nativeLimit, destIndex, move, status); +} + + + +U_DRAFT UText * U_EXPORT2 +utext_clone(UText *dest, const UText *src, UBool deep, UBool readOnly, UErrorCode *status) { + UText *result; + result = src->pFuncs->clone(dest, src, deep, status); + if (readOnly) { + utext_freeze(result); + } + return result; +} + + + +//------------------------------------------------------------------------------ +// +// UText common functions implementation +// +//------------------------------------------------------------------------------ + +// +// UText.flags bit definitions +// +enum { + UTEXT_HEAP_ALLOCATED = 1, // 1 if ICU has allocated this UText struct on the heap. + // 0 if caller provided storage for the UText. + + UTEXT_EXTRA_HEAP_ALLOCATED = 2, // 1 if ICU has allocated extra storage as a separate + // heap block. + // 0 if there is no separate allocation. Either no extra + // storage was requested, or it is appended to the end + // of the main UText storage. + + UTEXT_OPEN = 4 // 1 if this UText is currently open + // 0 if this UText is not open. +}; + + +// +// Extended form of a UText. The purpose is to aid in computing the total size required +// when a provider asks for a UText to be allocated with extra storage. + +struct ExtendedUText { + UText ut; + UAlignedMemory extension; +}; + +static const UText emptyText = UTEXT_INITIALIZER; + +U_DRAFT UText * U_EXPORT2 +utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status) { + if (U_FAILURE(*status)) { + return ut; + } + + if (ut == NULL) { + // We need to heap-allocate storage for the new UText + int32_t spaceRequired = sizeof(UText); + if (extraSpace > 0) { + spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(UAlignedMemory); + } + ut = (UText *)uprv_malloc(spaceRequired); + if (ut == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + } else { + *ut = emptyText; + ut->flags |= UTEXT_HEAP_ALLOCATED; + if (spaceRequired>0) { + ut->extraSize = extraSpace; + ut->pExtra = &((ExtendedUText *)ut)->extension; + uprv_memset(ut->pExtra, 0, extraSpace); // Purify whines about copying untouched extra [buffer] + // space when cloning, so init it now. + } + } + } else { + // We have been supplied with an already existing UText. + // Verify that it really appears to be a UText. + if (ut->magic != UTEXT_MAGIC) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return ut; + } + // If the ut is already open and there's a provider supplied close + // function, call it. + if ((ut->flags & UTEXT_OPEN) && ut->pFuncs->close != NULL) { + ut->pFuncs->close(ut); + } + ut->flags &= ~UTEXT_OPEN; + + // If extra space was requested by our caller, check whether + // sufficient already exists, and allocate new if needed. + if (extraSpace > ut->extraSize) { + // Need more space. If there is existing separately allocated space, + // delete it first, then allocate new space. + if (ut->flags & UTEXT_EXTRA_HEAP_ALLOCATED) { + uprv_free(ut->pExtra); + ut->extraSize = 0; + } + ut->pExtra = uprv_malloc(extraSpace); + if (ut->pExtra == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + } else { + ut->extraSize = extraSpace; + ut->flags |= UTEXT_EXTRA_HEAP_ALLOCATED; + uprv_memset(ut->pExtra, 0, extraSpace); + } + } + } + if (U_SUCCESS(*status)) { + ut->flags |= UTEXT_OPEN; + + // Initialize all remaining fields of the UText. + // + ut->context = NULL; + ut->chunkContents = NULL; + ut->p = NULL; + ut->q = NULL; + ut->r = NULL; + ut->a = 0; + ut->b = 0; + ut->c = 0; + ut->chunkOffset = 0; + ut->chunkLength = 0; + ut->chunkNativeStart = 0; + ut->chunkNativeLimit = 0; + ut->nativeIndexingLimit = 0; + ut->providerProperties = 0; + ut->privA = 0; + ut->privB = 0; + ut->privC = 0; + ut->privP = NULL; + } + return ut; +} + + +U_DRAFT UText * U_EXPORT2 +utext_close(UText *ut) { + if (ut==NULL || + ut->magic != UTEXT_MAGIC || + (ut->flags & UTEXT_OPEN) == 0) + { + // The supplied ut is not an open UText. + // Do nothing. + return ut; + } + + // If the provider gave us a close function, call it now. + // This will clean up anything allocated specifically by the provider. + if (ut->pFuncs->close != NULL) { + ut->pFuncs->close(ut); + } + ut->flags &= ~UTEXT_OPEN; + + // If we (the framework) allocated the UText or subsidiary storage, + // delete it. + if (ut->flags & UTEXT_EXTRA_HEAP_ALLOCATED) { + uprv_free(ut->pExtra); + ut->pExtra = NULL; + ut->flags &= ~UTEXT_EXTRA_HEAP_ALLOCATED; + ut->extraSize = 0; + } + + // Zero out function table of the closed UText. This is a defensive move, + // inteded to cause applications that inadvertantly use a closed + // utext to crash with null pointer errors. + ut->pFuncs = NULL; + + if (ut->flags & UTEXT_HEAP_ALLOCATED) { + // This UText was allocated by UText setup. We need to free it. + // Clear magic, so we can detect if the user messes up and immediately + // tries to reopen another UText using the deleted storage. + ut->magic = 0; + uprv_free(ut); + ut = NULL; + } + return ut; +} + + + + +// +// invalidateChunk Reset a chunk to have no contents, so that the next call +// to access will cause new data to load. +// This is needed when copy/move/replace operate directly on the +// backing text, potentially putting it out of sync with the +// contents in the chunk. +// +static void +invalidateChunk(UText *ut) { + ut->chunkLength = 0; + ut->chunkNativeLimit = 0; + ut->chunkNativeStart = 0; + ut->chunkOffset = 0; + ut->nativeIndexingLimit = 0; +} + +// +// pinIndex Do range pinning on a native index parameter. +// 64 bit pinning is done in place. +// 32 bit truncated result is returned as a convenience for +// use in providers that don't need 64 bits. +static int32_t +pinIndex(int64_t &index, int64_t limit) { + if (index<0) { + index = 0; + } else if (index > limit) { + index = limit; + } + return (int32_t)index; +} + + +U_CDECL_BEGIN + +// +// Pointer relocation function, +// a utility used by shallow clone. +// Adjust a pointer that refers to something within one UText (the source) +// to refer to the same relative offset within a another UText (the target) +// +static void adjustPointer(UText *dest, const void **destPtr, const UText *src) { + // convert all pointers to (char *) so that byte address arithmetic will work. + char *dptr = (char *)*destPtr; + char *dUText = (char *)dest; + char *sUText = (char *)src; + + if (dptr >= (char *)src->pExtra && dptr < ((char*)src->pExtra)+src->extraSize) { + // target ptr was to something within the src UText's pExtra storage. + // relocate it into the target UText's pExtra region. + *destPtr = ((char *)dest->pExtra) + (dptr - (char *)src->pExtra); + } else if (dptr>=sUText && dptr < sUText+src->sizeOfStruct) { + // target ptr was pointing to somewhere within the source UText itself. + // Move it to the same offset within the target UText. + *destPtr = dUText + (dptr-sUText); + } +} + + +// +// Clone. This is a generic copy-the-utext-by-value clone function that can be +// used as-is with some utext types, and as a helper by other clones. +// +static UText * U_CALLCONV +shallowTextClone(UText * dest, const UText * src, UErrorCode * status) { + if (U_FAILURE(*status)) { + return NULL; + } + int32_t srcExtraSize = src->extraSize; + + // + // Use the generic text_setup to allocate storage if required. + // + dest = utext_setup(dest, srcExtraSize, status); + if (U_FAILURE(*status)) { + return dest; + } + + // + // flags (how the UText was allocated) and the pointer to the + // extra storage must retain the values in the cloned utext that + // were set up by utext_setup. Save them separately before + // copying the whole struct. + // + void *destExtra = dest->pExtra; + int32_t flags = dest->flags; + + + // + // Copy the whole UText struct by value. + // Any "Extra" storage is copied also. + // + int sizeToCopy = src->sizeOfStruct; + if (sizeToCopy > dest->sizeOfStruct) { + sizeToCopy = dest->sizeOfStruct; + } + uprv_memcpy(dest, src, sizeToCopy); + dest->pExtra = destExtra; + dest->flags = flags; + if (srcExtraSize > 0) { + uprv_memcpy(dest->pExtra, src->pExtra, srcExtraSize); + } + + // + // Relocate any pointers in the target that refer to the UText itself + // to point to the cloned copy rather than the original source. + // + adjustPointer(dest, &dest->context, src); + adjustPointer(dest, &dest->p, src); + adjustPointer(dest, &dest->q, src); + adjustPointer(dest, &dest->r, src); + + return dest; +} + + +U_CDECL_END + + + +//------------------------------------------------------------------------------ +// +// UText implementation for UTF-8 char * strings (read-only) +// Limitation: string length must be <= 0x7fffffff in length. +// (length must for in an int32_t variable) +// +// Use of UText data members: +// context pointer to UTF-8 string +// utext.b is the input string length (bytes). +// utext.c Length scanned so far in string +// (for optimizing finding length of zero terminated strings.) +// utext.p pointer to the current buffer +// utext.q pointer to the other buffer. +// +//------------------------------------------------------------------------------ + +// Chunk size. +// Must be less than 85, because of byte mapping from UChar indexes to native indexes. +// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes +// to two UChars.) +// +enum { UTF8_TEXT_CHUNK_SIZE=32 }; + +// +// UTF8Buf Two of these structs will be set up in the UText's extra allocated space. +// Each contains the UChar chunk buffer, the to and from native maps, and +// header info. +// +// because backwards iteration fills the buffers starting at the end and +// working towards the front, the filled part of the buffers may not begin +// at the start of the available storage for the buffers. +// +// Buffer size is one bigger than the specified UTF8_TEXT_CHUNK_SIZE to allow for +// the last character added being a supplementary, and thus requiring a surrogate +// pair. Doing this is simpler than checking for the edge case. +// + +struct UTF8Buf { + int32_t bufNativeStart; // Native index of first char in UChar buf + int32_t bufNativeLimit; // Native index following last char in buf. + int32_t bufStartIdx; // First filled position in buf. + int32_t bufLimitIdx; // Limit of filled range in buf. + int32_t bufNILimit; // Limit of native indexing part of buf + int32_t toUCharsMapStart; // Native index corresponding to + // mapToUChars[0]. + // Set to bufNativeStart when filling forwards. + // Set to computed value when filling backwards. + + UChar buf[UTF8_TEXT_CHUNK_SIZE+4]; // The UChar buffer. Requires one extra position beyond the + // the chunk size, to allow for surrogate at the end. + // Length must be identical to mapToNative array, below, + // because of the way indexing works when the array is + // filled backwards during a reverse iteration. Thus, + // the additional extra size. + uint8_t mapToNative[UTF8_TEXT_CHUNK_SIZE+4]; // map UChar index in buf to + // native offset from bufNativeStart. + // Requires two extra slots, + // one for a supplementary starting in the last normal position, + // and one for an entry for the buffer limit position. + uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to + // correspoding offset in filled part of buf. + int32_t align; +}; + +U_CDECL_BEGIN + +// +// utf8TextLength +// +// Get the length of the string. If we don't already know it, +// we'll need to scan for the trailing nul. +// +static int64_t U_CALLCONV +utf8TextLength(UText *ut) { + if (ut->b < 0) { + // Zero terminated string, and we haven't scanned to the end yet. + // Scan it now. + const char *r = (const char *)ut->context + ut->c; + while (*r != 0) { + r++; + } + if ((r - (const char *)ut->context) < 0x7fffffff) { + ut->b = (int32_t)(r - (const char *)ut->context); + } else { + // Actual string was bigger (more than 2 gig) than we + // can handle. Clip it to 2 GB. + ut->b = 0x7fffffff; + } + ut->providerProperties &= ~I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } + return ut->b; +} + + + + + + +static UBool U_CALLCONV +utf8TextAccess(UText *ut, int64_t index, UBool forward) { + // + // Apologies to those who are allergic to goto statements. + // Consider each goto to a labelled block to be the equivalent of + // call the named block as if it were a function(); + // return; + // + const uint8_t *s8=(const uint8_t *)ut->context; + UTF8Buf *u8b = NULL; + int32_t length = ut->b; // Length of original utf-8 + int32_t ix= (int32_t)index; // Requested index, trimmed to 32 bits. + int32_t mapIndex = 0; + if (index<0) { + ix=0; + } else if (index > 0x7fffffff) { + // Strings with 64 bit lengths not supported by this UTF-8 provider. + ix = 0x7fffffff; + } + + // Pin requested index to the string length. + if (ix>length) { + if (length>=0) { + ix=length; + } else if (ix>ut->c) { + // Zero terminated string, and requested index is beyond + // the region that has already been scanned. + // Scan up to either the end of the string or to the + // requested position, whichever comes first. + while (ut->cc]!=0) { + ut->c++; + } + // TODO: support for null terminated string length > 32 bits. + if (s8[ut->c] == 0) { + // We just found the actual length of the string. + // Trim the requested index back to that. + ix = ut->c; + ut->b = ut->c; + length = ut->c; + ut->providerProperties &= ~I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } + } + } + + // + // Dispatch to the appropriate action for a forward iteration request. + // + if (forward) { + if (ix==ut->chunkNativeLimit) { + // Check for normal sequential iteration cases first. + if (ix==length) { + // Just reached end of string + // Don't swap buffers, but do set the + // current buffer position. + ut->chunkOffset = ut->chunkLength; + return FALSE; + } else { + // End of current buffer. + // check whether other buffer already has what we need. + UTF8Buf *altB = (UTF8Buf *)ut->q; + if (ix>=altB->bufNativeStart && ixbufNativeLimit) { + goto swapBuffers; + } + } + } + + // A random access. Desired index could be in either or niether buf. + // For optimizing the order of testing, first check for the index + // being in the other buffer. This will be the case for uses that + // move back and forth over a fairly limited range + { + u8b = (UTF8Buf *)ut->q; // the alternate buffer + if (ix>=u8b->bufNativeStart && ixbufNativeLimit) { + // Requested index is in the other buffer. + goto swapBuffers; + } + if (ix == length) { + // Requested index is end-of-string. + // (this is the case of randomly seeking to the end. + // The case of iterating off the end is handled earlier.) + if (ix == ut->chunkNativeLimit) { + // Current buffer extends up to the end of the string. + // Leave it as the current buffer. + ut->chunkOffset = ut->chunkLength; + return FALSE; + } + if (ix == u8b->bufNativeLimit) { + // Alternate buffer extends to the end of string. + // Swap it in as the current buffer. + goto swapBuffersAndFail; + } + + // Neither existing buffer extends to the end of the string. + goto makeStubBuffer; + } + + if (ixchunkNativeStart || ix>=ut->chunkNativeLimit) { + // Requested index is in neither buffer. + goto fillForward; + } + + // Requested index is in this buffer. + u8b = (UTF8Buf *)ut->p; // the current buffer + mapIndex = ix - u8b->toUCharsMapStart; + ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; + return TRUE; + + } + } + + + // + // Dispatch to the appropriate action for a + // Backwards Diretion iteration request. + // + if (ix==ut->chunkNativeStart) { + // Check for normal sequential iteration cases first. + if (ix==0) { + // Just reached the start of string + // Don't swap buffers, but do set the + // current buffer position. + ut->chunkOffset = 0; + return FALSE; + } else { + // Start of current buffer. + // check whether other buffer already has what we need. + UTF8Buf *altB = (UTF8Buf *)ut->q; + if (ix>altB->bufNativeStart && ix<=altB->bufNativeLimit) { + goto swapBuffers; + } + } + } + + // A random access. Desired index could be in either or niether buf. + // For optimizing the order of testing, + // Most likely case: in the other buffer. + // Second most likely: in neither buffer. + // Unlikely, but must work: in the current buffer. + u8b = (UTF8Buf *)ut->q; // the alternate buffer + if (ix>u8b->bufNativeStart && ix<=u8b->bufNativeLimit) { + // Requested index is in the other buffer. + goto swapBuffers; + } + // Requested index is start-of-string. + // (this is the case of randomly seeking to the start. + // The case of iterating off the start is handled earlier.) + if (ix==0) { + if (u8b->bufNativeStart==0) { + // Alternate buffer contains the data for the start string. + // Make it be the current buffer. + goto swapBuffersAndFail; + } else { + // Request for data before the start of string, + // neither buffer is usable. + // set up a zero-length buffer. + goto makeStubBuffer; + } + } + + if (ix<=ut->chunkNativeStart || ix>ut->chunkNativeLimit) { + // Requested index is in neither buffer. + goto fillReverse; + } + + // Requested index is in this buffer. + // Set the utf16 buffer index. + u8b = (UTF8Buf *)ut->p; + mapIndex = ix - u8b->toUCharsMapStart; + ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; + if (ut->chunkOffset==0) { + // This occurs when the first character in the text is + // a multi-byte UTF-8 char, and the requested index is to + // one of the trailing bytes. Because there is no preceding , + // character, this access fails. We can't pick up on the + // situation sooner because the requested index is not zero. + return FALSE; + } else { + return TRUE; + } + + + +swapBuffers: + // The alternate buffer (ut->q) has the string data that was requested. + // Swap the primary and alternate buffers, and set the + // chunk index into the new primary buffer. + { + u8b = (UTF8Buf *)ut->q; + ut->q = ut->p; + ut->p = u8b; + ut->chunkContents = &u8b->buf[u8b->bufStartIdx]; + ut->chunkLength = u8b->bufLimitIdx - u8b->bufStartIdx; + ut->chunkNativeStart = u8b->bufNativeStart; + ut->chunkNativeLimit = u8b->bufNativeLimit; + ut->nativeIndexingLimit = u8b->bufNILimit; + + // Index into the (now current) chunk + // Use the map to set the chunk index. It's more trouble than it's worth + // to check whether native indexing can be used. + U_ASSERT(ix>=u8b->bufNativeStart); + U_ASSERT(ix<=u8b->bufNativeLimit); + mapIndex = ix - u8b->toUCharsMapStart; + U_ASSERT(mapIndex>=0); + U_ASSERT(mapIndex<(int32_t)sizeof(u8b->mapToUChars)); + ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; + + return TRUE; + } + + + swapBuffersAndFail: + // We got a request for either the start or end of the string, + // with iteration continuing in the out-of-bounds direction. + // The alternate buffer already contains the data up to the + // start/end. + // Swap the buffers, then return failure, indicating that we couldn't + // make things correct for continuing the iteration in the requested + // direction. The position & buffer are correct should the + // user decide to iterate in the opposite direction. + u8b = (UTF8Buf *)ut->q; + ut->q = ut->p; + ut->p = u8b; + ut->chunkContents = &u8b->buf[u8b->bufStartIdx]; + ut->chunkLength = u8b->bufLimitIdx - u8b->bufStartIdx; + ut->chunkNativeStart = u8b->bufNativeStart; + ut->chunkNativeLimit = u8b->bufNativeLimit; + ut->nativeIndexingLimit = u8b->bufNILimit; + + // Index into the (now current) chunk + // For this function (swapBuffersAndFail), the requested index + // will always be at either the start or end of the chunk. + if (ix==u8b->bufNativeLimit) { + ut->chunkOffset = ut->chunkLength; + } else { + ut->chunkOffset = 0; + U_ASSERT(ix == u8b->bufNativeStart); + } + return FALSE; + +makeStubBuffer: + // The user has done a seek/access past the start or end + // of the string. Rather than loading data that is likely + // to never be used, just set up a zero-length buffer at + // the position. + u8b = (UTF8Buf *)ut->q; + u8b->bufNativeStart = ix; + u8b->bufNativeLimit = ix; + u8b->bufStartIdx = 0; + u8b->bufLimitIdx = 0; + u8b->bufNILimit = 0; + u8b->toUCharsMapStart = ix; + u8b->mapToNative[0] = 0; + u8b->mapToUChars[0] = 0; + goto swapBuffersAndFail; + + + +fillForward: + { + // Move the incoming index to a code point boundary. + U8_SET_CP_START(s8, 0, ix); + + // Swap the UText buffers. + // We want to fill what was previously the alternate buffer, + // and make what was the current buffer be the new alternate. + UTF8Buf *u8b = (UTF8Buf *)ut->q; + ut->q = ut->p; + ut->p = u8b; + + int32_t strLen = ut->b; + UBool nulTerminated = FALSE; + if (strLen < 0) { + strLen = 0x7fffffff; + nulTerminated = TRUE; + } + + UChar *buf = u8b->buf; + uint8_t *mapToNative = u8b->mapToNative; + uint8_t *mapToUChars = u8b->mapToUChars; + int32_t destIx = 0; + int32_t srcIx = ix; + UBool seenNonAscii = FALSE; + UChar32 c; + + // Fill the chunk buffer and mapping arrays. + while (destIx0 && c<0x80) { + // Special case ASCII range for speed. + // zero is excluded to simplify bounds checking. + buf[destIx] = c; + mapToNative[destIx] = srcIx - ix; + mapToUChars[srcIx-ix] = destIx; + srcIx++; + destIx++; + } else { + // General case, handle everything. + if (seenNonAscii == FALSE) { + seenNonAscii = TRUE; + u8b->bufNILimit = destIx; + } + + int32_t cIx = srcIx; + int32_t dIx = destIx; + int32_t dIxSaved = destIx; + U8_NEXT(s8, srcIx, strLen, c); + if (c==0 && nulTerminated) { + srcIx--; + break; + } + if (c<0) { + // Illegal UTF-8. Replace with sub character. + c = 0x0fffd; + } + + U16_APPEND_UNSAFE(buf, destIx, c); + do { + mapToNative[dIx++] = cIx - ix; + } while (dIx < destIx); + + do { + mapToUChars[cIx++ - ix] = dIxSaved; + } while (cIx < srcIx); + } + if (srcIx>=strLen) { + break; + } + + } + + // store Native <--> Chunk Map entries for the end of the buffer. + // There is no actual character here, but the index position is valid. + mapToNative[destIx] = srcIx - ix; + mapToUChars[srcIx - ix] = destIx; + + // fill in Buffer descriptor + u8b->bufNativeStart = ix; + u8b->bufNativeLimit = srcIx; + u8b->bufStartIdx = 0; + u8b->bufLimitIdx = destIx; + if (seenNonAscii == FALSE) { + u8b->bufNILimit = destIx; + } + u8b->toUCharsMapStart = u8b->bufNativeStart; + + // Set UText chunk to refer to this buffer. + ut->chunkContents = buf; + ut->chunkOffset = 0; + ut->chunkLength = u8b->bufLimitIdx; + ut->chunkNativeStart = u8b->bufNativeStart; + ut->chunkNativeLimit = u8b->bufNativeLimit; + ut->nativeIndexingLimit = u8b->bufNILimit; + + // For zero terminated strings, keep track of the maximum point + // scanned so far. + if (nulTerminated && srcIx>ut->c) { + ut->c = srcIx; + if (c==0) { + // We scanned to the end. + // Remember the actual length. + ut->b = srcIx; + ut->providerProperties &= ~I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } + } + return TRUE; + } + + +fillReverse: + { + // Move the incoming index to a code point boundary. + // Can only do this if the incoming index is somewhere in the interior of the string. + // If index is at the end, there is no character there to look at. + if (ix != ut->b) { + U8_SET_CP_START(s8, 0, ix); + } + + // Swap the UText buffers. + // We want to fill what was previously the alternate buffer, + // and make what was the current buffer be the new alternate. + UTF8Buf *u8b = (UTF8Buf *)ut->q; + ut->q = ut->p; + ut->p = u8b; + + UChar *buf = u8b->buf; + uint8_t *mapToNative = u8b->mapToNative; + uint8_t *mapToUChars = u8b->mapToUChars; + int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1); + int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region + // at end of buffer to leave room + // for a surrogate pair at the + // buffer start. + int32_t srcIx = ix; + int32_t bufNILimit = destIx; + UChar32 c; + + // Map to/from Native Indexes, fill in for the position at the end of + // the buffer. + // + mapToNative[destIx] = srcIx - toUCharsMapStart; + mapToUChars[srcIx - toUCharsMapStart] = destIx; + + // Fill the chunk buffer + // Work backwards, filling from the end of the buffer towards the front. + // + while (destIx>2 && (srcIx - toUCharsMapStart > 5) && (srcIx > 0)) { + srcIx--; + destIx--; + + // Get last byte of the UTF-8 character + c = s8[srcIx]; + if (c<0x80) { + // Special case ASCII range for speed. + buf[destIx] = c; + mapToUChars[srcIx - toUCharsMapStart] = destIx; + mapToNative[destIx] = srcIx - toUCharsMapStart; + } else { + // General case, handle everything non-ASCII. + + int32_t sIx = srcIx; // ix of last byte of multi-byte u8 char + + // Get the full character from the UTF8 string. + // use code derived from tbe macros in utf.8 + // Leaves srcIx pointing at the first byte of the UTF-8 char. + // + if (c<=0xbf) { + c=utf8_prevCharSafeBody(s8, 0, &srcIx, c, -1); + // leaves srcIx at first byte of the multi-byte char. + } else { + c=0x0fffd; + } + + // Store the character in UTF-16 buffer. + if (c<0x10000) { + buf[destIx] = c; + mapToNative[destIx] = srcIx - toUCharsMapStart; + } else { + buf[destIx] = U16_TRAIL(c); + mapToNative[destIx] = srcIx - toUCharsMapStart; + buf[--destIx] = U16_LEAD(c); + mapToNative[destIx] = srcIx - toUCharsMapStart; + } + + // Fill in the map from native indexes to UChars buf index. + do { + mapToUChars[sIx-- - toUCharsMapStart] = destIx; + } while (sIx >= srcIx); + + // Set native indexing limit to be the current position. + // We are processing a non-ascii, non-native-indexing char now; + // the limit will be here if the rest of the chars to be + // added to this buffer are ascii. + bufNILimit = destIx; + } + } + u8b->bufNativeStart = srcIx; + u8b->bufNativeLimit = ix; + u8b->bufStartIdx = destIx; + u8b->bufLimitIdx = UTF8_TEXT_CHUNK_SIZE+2; + u8b->bufNILimit = bufNILimit - u8b->bufStartIdx; + u8b->toUCharsMapStart = toUCharsMapStart; + + ut->chunkContents = &buf[u8b->bufStartIdx]; + ut->chunkLength = u8b->bufLimitIdx - u8b->bufStartIdx; + ut->chunkOffset = ut->chunkLength; + ut->chunkNativeStart = u8b->bufNativeStart; + ut->chunkNativeLimit = u8b->bufNativeLimit; + ut->nativeIndexingLimit = u8b->bufNILimit; + return TRUE; + } + +} + + + +// +// This is a slightly modified copy of u_strFromUTF8, +// Inserts a Replacement Char rather than failing on invalid UTF-8 +// Removes unnecessary features. +// +static UChar* +utext_strFromUTF8(UChar *dest, + int32_t destCapacity, + int32_t *pDestLength, + const char* src, + int32_t srcLength, // required. NUL terminated not supported. + UErrorCode *pErrorCode + ) +{ + + UChar *pDest = dest; + UChar *pDestLimit = dest+destCapacity; + UChar32 ch=0; + int32_t index = 0; + int32_t reqLength = 0; + uint8_t* pSrc = (uint8_t*) src; + + + while((index < srcLength)&&(pDest0)) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + int32_t length = ut->b; + int32_t start32 = pinIndex(start, length); + int32_t limit32 = pinIndex(limit, length); + + if(start32>limit32) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + + // adjust the incoming indexes to land on code point boundaries if needed. + // adjust by no more than three, because that is the largest number of trail bytes + // in a well formed UTF8 character. + const uint8_t *buf = (const uint8_t *)ut->context; + int i; + if (start32 < ut->chunkNativeLimit) { + for (i=0; i<3; i++) { + if (U8_IS_LEAD(buf[start32]) || start32==0) { + break; + } + start32--; + } + } + + if (limit32 < ut->chunkNativeLimit) { + for (i=0; i<3; i++) { + if (U8_IS_LEAD(buf[limit32]) || limit32==0) { + break; + } + limit32--; + } + } + + // Do the actual extract. + int32_t destLength=0; + utext_strFromUTF8(dest, destCapacity, &destLength, + (const char *)ut->context+start32, limit32-start32, + pErrorCode); + return destLength; +} + +// +// utf8TextMapOffsetToNative +// +// Map a chunk (UTF-16) offset to a native index. +static int64_t U_CALLCONV +utf8TextMapOffsetToNative(const UText *ut) { + // + UTF8Buf *u8b = (UTF8Buf *)ut->p; + U_ASSERT(ut->chunkOffset>ut->nativeIndexingLimit && ut->chunkOffset<=ut->chunkLength); + int32_t nativeOffset = u8b->mapToNative[ut->chunkOffset + u8b->bufStartIdx] + u8b->toUCharsMapStart; + U_ASSERT(nativeOffset >= ut->chunkNativeStart && nativeOffset <= ut->chunkNativeLimit); + return nativeOffset; +} + +// +// Map a native index to the corrsponding chunk offset +// +static int32_t U_CALLCONV +utf8TextMapIndexToUTF16(const UText *ut, int64_t index64) { + U_ASSERT(index64 <= 0x7fffffff); + int32_t index = (int32_t)index64; + UTF8Buf *u8b = (UTF8Buf *)ut->p; + U_ASSERT(index>=ut->chunkNativeStart+ut->nativeIndexingLimit); + U_ASSERT(index<=ut->chunkNativeLimit); + int32_t mapIndex = index - u8b->toUCharsMapStart; + int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; + U_ASSERT(offset>=0 && offset<=ut->chunkLength); + return offset; +} + +static UText * U_CALLCONV +utf8TextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status) +{ + // First do a generic shallow clone. Does everything needed for the UText struct itself. + dest = shallowTextClone(dest, src, status); + + // For deep clones, make a copy of the string. + // The copied storage is owned by the newly created clone. + // + // TODO: There is an isssue with using utext_nativeLength(). + // That function is non-const in cases where the input was NUL terminated + // and the length has not yet been determined. + // This function (clone()) is const. + // There potentially a thread safety issue lurking here. + // + if (deep && U_SUCCESS(*status)) { + int32_t len = (int32_t)utext_nativeLength((UText *)src); + char *copyStr = (char *)uprv_malloc(len+1); + if (copyStr == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + } else { + uprv_memcpy(copyStr, src->context, len+1); + dest->context = copyStr; + dest->providerProperties |= I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT); + } + } + return dest; +} + + +static void U_CALLCONV +utf8TextClose(UText *ut) { + // Most of the work of close is done by the generic UText framework close. + // All that needs to be done here is to delete the UTF8 string if the UText + // owns it. This occurs if the UText was created by cloning. + if (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT)) { + char *s = (char *)ut->context; + uprv_free(s); + ut->context = NULL; + } +} + +U_CDECL_END + + +static struct UTextFuncs utf8Funcs = +{ + sizeof(UTextFuncs), + 0, 0, 0, // Reserved alignment padding + utf8TextClone, + utf8TextLength, + utf8TextAccess, + utf8TextExtract, + NULL, /* replace*/ + NULL, /* copy */ + utf8TextMapOffsetToNative, + utf8TextMapIndexToUTF16, + utf8TextClose, + NULL, // spare 1 + NULL, // spare 2 + NULL // spare 3 +}; + + +U_DRAFT UText * U_EXPORT2 +utext_openUTF8(UText *ut, const char *s, int64_t length, UErrorCode *status) { + if(U_FAILURE(*status)) { + return NULL; + } + if(s==NULL || length<-1 || length>INT32_MAX) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + ut = utext_setup(ut, sizeof(UTF8Buf) * 2, status); + if (U_FAILURE(*status)) { + return ut; + } + + ut->pFuncs = &utf8Funcs; + ut->context = s; + ut->b = (int32_t)length; + ut->c = (int32_t)length; + if (ut->c < 0) { + ut->c = 0; + ut->providerProperties |= I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } + ut->p = ut->pExtra; + ut->q = (char *)ut->pExtra + sizeof(UTF8Buf); + return ut; + +} + + + + + + + + +//------------------------------------------------------------------------------ +// +// UText implementation wrapper for Replaceable (read/write) +// +// Use of UText data members: +// context pointer to Replaceable. +// p pointer to Replaceable if it is owned by the UText. +// +//------------------------------------------------------------------------------ + + + +// minimum chunk size for this implementation: 3 +// to allow for possible trimming for code point boundaries +enum { REP_TEXT_CHUNK_SIZE=10 }; + +struct ReplExtra { + /* + * Chunk UChars. + * +1 to simplify filling with surrogate pair at the end. + */ + UChar s[REP_TEXT_CHUNK_SIZE+1]; +}; + + +U_CDECL_BEGIN + +static UText * U_CALLCONV +repTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status) { + // First do a generic shallow clone. Does everything needed for the UText struct itself. + dest = shallowTextClone(dest, src, status); + + // For deep clones, make a copy of the Replaceable. + // The copied Replaceable storage is owned by the newly created UText clone. + // A non-NULL pointer in UText.p is the signal to the close() function to delete + // it. + // + if (deep && U_SUCCESS(*status)) { + const Replaceable *replSrc = (const Replaceable *)src->context; + dest->context = replSrc->clone(); + dest->providerProperties |= I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT); + + // with deep clone, the copy is writable, even when the source is not. + dest->providerProperties |= I32_FLAG(UTEXT_PROVIDER_WRITABLE); + } + return dest; +} + + +static void U_CALLCONV +repTextClose(UText *ut) { + // Most of the work of close is done by the generic UText framework close. + // All that needs to be done here is delete the Replaceable if the UText + // owns it. This occurs if the UText was created by cloning. + if (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT)) { + Replaceable *rep = (Replaceable *)ut->context; + delete rep; + ut->context = NULL; + } +} + + +static int64_t U_CALLCONV +repTextLength(UText *ut) { + const Replaceable *replSrc = (const Replaceable *)ut->context; + int32_t len = replSrc->length(); + return len; +} + + +static UBool U_CALLCONV +repTextAccess(UText *ut, int64_t index, UBool forward) { + const Replaceable *rep=(const Replaceable *)ut->context; + int32_t length=rep->length(); // Full length of the input text (bigger than a chunk) + + // clip the requested index to the limits of the text. + int32_t index32 = pinIndex(index, length); + U_ASSERT(index<=INT32_MAX); + + + /* + * Compute start/limit boundaries around index, for a segment of text + * to be extracted. + * To allow for the possibility that our user gave an index to the trailing + * half of a surrogate pair, we must request one extra preceding UChar when + * going in the forward direction. This will ensure that the buffer has the + * entire code point at the specified index. + */ + if(forward) { + + if (index32>=ut->chunkNativeStart && index32chunkNativeLimit) { + // Buffer already contains the requested position. + ut->chunkOffset = (int32_t)(index - ut->chunkNativeStart); + return TRUE; + } + if (index32>=length && ut->chunkNativeLimit==length) { + // Request for end of string, and buffer already extends up to it. + // Can't get the data, but don't change the buffer. + ut->chunkOffset = length - (int32_t)ut->chunkNativeStart; + return FALSE; + } + + ut->chunkNativeLimit = index + REP_TEXT_CHUNK_SIZE - 1; + // Going forward, so we want to have the buffer with stuff at and beyond + // the requested index. The -1 gets us one code point before the + // requested index also, to handle the case of the index being on + // a trail surrogate of a surrogate pair. + if(ut->chunkNativeLimit > length) { + ut->chunkNativeLimit = length; + } + // unless buffer ran off end, start is index-1. + ut->chunkNativeStart = ut->chunkNativeLimit - REP_TEXT_CHUNK_SIZE; + if(ut->chunkNativeStart < 0) { + ut->chunkNativeStart = 0; + } + } else { + // Reverse iteration. Fill buffer with data preceding the requested index. + if (index32>ut->chunkNativeStart && index32<=ut->chunkNativeLimit) { + // Requested position already in buffer. + ut->chunkOffset = index32 - (int32_t)ut->chunkNativeStart; + return TRUE; + } + if (index32==0 && ut->chunkNativeStart==0) { + // Request for start, buffer already begins at start. + // No data, but keep the buffer as is. + ut->chunkOffset = 0; + return FALSE; + } + + // Figure out the bounds of the chunk to extract for reverse iteration. + // Need to worry about chunk not splitting surrogate pairs, and while still + // containing the data we need. + // Fix by requesting a chunk that includes an extra UChar at the end. + // If this turns out to be a lead surrogate, we can lop it off and still have + // the data we wanted. + ut->chunkNativeStart = index32 + 1 - REP_TEXT_CHUNK_SIZE; + if (ut->chunkNativeStart < 0) { + ut->chunkNativeStart = 0; + } + + ut->chunkNativeLimit = index32 + 1; + if (ut->chunkNativeLimit > length) { + ut->chunkNativeLimit = length; + } + } + + // Extract the new chunk of text from the Replaceable source. + ReplExtra *ex = (ReplExtra *)ut->pExtra; + // UnicodeString with its buffer a writable alias to the chunk buffer + UnicodeString buffer(ex->s, 0 /*buffer length*/, REP_TEXT_CHUNK_SIZE /*buffer capacity*/); + rep->extractBetween((int32_t)ut->chunkNativeStart, (int32_t)ut->chunkNativeLimit, buffer); + + ut->chunkContents = ex->s; + ut->chunkLength = (int32_t)(ut->chunkNativeLimit - ut->chunkNativeStart); + ut->chunkOffset = (int32_t)(index32 - ut->chunkNativeStart); + + // Surrogate pairs from the input text must not span chunk boundaries. + // If end of chunk could be the start of a surrogate, trim it off. + if (ut->chunkNativeLimit < length && + U16_IS_LEAD(ex->s[ut->chunkLength-1])) { + ut->chunkLength--; + ut->chunkNativeLimit--; + if (ut->chunkOffset > ut->chunkLength) { + ut->chunkOffset = ut->chunkLength; + } + } + + // if the first UChar in the chunk could be the trailing half of a surrogate pair, + // trim it off. + if(ut->chunkNativeStart>0 && U16_IS_TRAIL(ex->s[0])) { + ++(ut->chunkContents); + ++(ut->chunkNativeStart); + --(ut->chunkLength); + --(ut->chunkOffset); + } + + // adjust the index/chunkOffset to a code point boundary + U16_SET_CP_START(ut->chunkContents, 0, ut->chunkOffset); + + // Use fast indexing for get/setNativeIndex() + ut->nativeIndexingLimit = ut->chunkLength; + + return TRUE; +} + + + +static int32_t U_CALLCONV +repTextExtract(UText *ut, + int64_t start, int64_t limit, + UChar *dest, int32_t destCapacity, + UErrorCode *status) { + const Replaceable *rep=(const Replaceable *)ut->context; + int32_t length=rep->length(); + + if(U_FAILURE(*status)) { + return 0; + } + if(destCapacity<0 || (dest==NULL && destCapacity>0)) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + } + if(start>limit) { + *status=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + int32_t start32 = pinIndex(start, length); + int32_t limit32 = pinIndex(limit, length); + + // adjust start, limit if they point to trail half of surrogates + if (start32charAt(start32)) && + U_IS_SUPPLEMENTARY(rep->char32At(start32))){ + start32--; + } + if (limit32charAt(limit32)) && + U_IS_SUPPLEMENTARY(rep->char32At(limit32))){ + limit32--; + } + + length=limit32-start32; + if(length>destCapacity) { + limit32 = start32 + destCapacity; + } + UnicodeString buffer(dest, 0, destCapacity); // writable alias + rep->extractBetween(start32, limit32, buffer); + return u_terminateUChars(dest, destCapacity, length, status); +} + +static int32_t U_CALLCONV +repTextReplace(UText *ut, + int64_t start, int64_t limit, + const UChar *src, int32_t length, + UErrorCode *status) { + Replaceable *rep=(Replaceable *)ut->context; + int32_t oldLength; + + if(U_FAILURE(*status)) { + return 0; + } + if(src==NULL && length!=0) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + oldLength=rep->length(); // will subtract from new length + if(start>limit ) { + *status=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + int32_t start32 = pinIndex(start, oldLength); + int32_t limit32 = pinIndex(limit, oldLength); + + // Snap start & limit to code point boundaries. + if (start32charAt(start32)) && + start32>0 && U16_IS_LEAD(rep->charAt(start32-1))) + { + start32--; + } + if (limit32charAt(limit32-1)) && + U16_IS_TRAIL(rep->charAt(limit32))) + { + limit32++; + } + + // Do the actual replace operation using methods of the Replaceable class + UnicodeString replStr((UBool)(length<0), src, length); // read-only alias + rep->handleReplaceBetween(start32, limit32, replStr); + int32_t newLength = rep->length(); + int32_t lengthDelta = newLength - oldLength; + + // Is the UText chunk buffer OK? + if (ut->chunkNativeLimit > start32) { + // this replace operation may have impacted the current chunk. + // invalidate it, which will force a reload on the next access. + invalidateChunk(ut); + } + + // set the iteration position to the end of the newly inserted replacement text. + int32_t newIndexPos = limit32 + lengthDelta; + repTextAccess(ut, newIndexPos, TRUE); + + return lengthDelta; +} + + +static void U_CALLCONV +repTextCopy(UText *ut, + int64_t start, int64_t limit, + int64_t destIndex, + UBool move, + UErrorCode *status) +{ + Replaceable *rep=(Replaceable *)ut->context; + int32_t length=rep->length(); + + if(U_FAILURE(*status)) { + return; + } + if (start>limit || (startcopy(start32, limit32, destIndex32); + if(destIndex32handleReplaceBetween(start32, limit32, UnicodeString()); + } else { + // copy + rep->copy(start32, limit32, destIndex32); + } + + // If the change to the text touched the region in the chunk buffer, + // invalidate the buffer. + int32_t firstAffectedIndex = destIndex32; + if (move && start32chunkNativeLimit) { + // changes may have affected range covered by the chunk + invalidateChunk(ut); + } + + // Put iteration position at the newly inserted (moved) block, + int32_t nativeIterIndex = destIndex32 + limit32 - start32; + if (move && destIndex32>start32) { + // moved a block of text towards the end of the string. + nativeIterIndex = destIndex32; + } + + // Set position, reload chunk if needed. + repTextAccess(ut, nativeIterIndex, TRUE); +} + +static struct UTextFuncs repFuncs = +{ + sizeof(UTextFuncs), + 0, 0, 0, // Reserved alignment padding + repTextClone, + repTextLength, + repTextAccess, + repTextExtract, + repTextReplace, + repTextCopy, + NULL, // MapOffsetToNative, + NULL, // MapIndexToUTF16, + repTextClose, + NULL, // spare 1 + NULL, // spare 2 + NULL // spare 3 +}; + + +U_DRAFT UText * U_EXPORT2 +utext_openReplaceable(UText *ut, Replaceable *rep, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return NULL; + } + if(rep==NULL) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + ut = utext_setup(ut, sizeof(ReplExtra), status); + + ut->providerProperties = I32_FLAG(UTEXT_PROVIDER_WRITABLE); + if(rep->hasMetaData()) { + ut->providerProperties |=I32_FLAG(UTEXT_PROVIDER_HAS_META_DATA); + } + + ut->pFuncs = &repFuncs; + ut->context = rep; + return ut; +} + +U_CDECL_END + + + + + + + + +//------------------------------------------------------------------------------ +// +// UText implementation for UnicodeString (read/write) and +// for const UnicodeString (read only) +// (same implementation, only the flags are different) +// +// Use of UText data members: +// context pointer to UnicodeString +// p pointer to UnicodeString IF this UText owns the string +// and it must be deleted on close(). NULL otherwise. +// +//------------------------------------------------------------------------------ + +U_CDECL_BEGIN + + +static UText * U_CALLCONV +unistrTextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status) { + // First do a generic shallow clone. Does everything needed for the UText struct itself. + dest = shallowTextClone(dest, src, status); + + // For deep clones, make a copy of the UnicodeSring. + // The copied UnicodeString storage is owned by the newly created UText clone. + // A non-NULL pointer in UText.p is the signal to the close() function to delete + // the UText. + // + if (deep && U_SUCCESS(*status)) { + const UnicodeString *srcString = (const UnicodeString *)src->context; + dest->context = new UnicodeString(*srcString); + dest->providerProperties |= I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT); + + // with deep clone, the copy is writable, even when the source is not. + dest->providerProperties |= I32_FLAG(UTEXT_PROVIDER_WRITABLE); + } + return dest; +} + +static void U_CALLCONV +unistrTextClose(UText *ut) { + // Most of the work of close is done by the generic UText framework close. + // All that needs to be done here is delete the UnicodeString if the UText + // owns it. This occurs if the UText was created by cloning. + if (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT)) { + UnicodeString *str = (UnicodeString *)ut->context; + delete str; + ut->context = NULL; + } +} + + +static int64_t U_CALLCONV +unistrTextLength(UText *t) { + return ((const UnicodeString *)t->context)->length(); +} + + +static UBool U_CALLCONV +unistrTextAccess(UText *ut, int64_t index, UBool forward) { + int32_t length = ut->chunkLength; + ut->chunkOffset = pinIndex(index, length); + + // Check whether request is at the start or end + UBool retVal = (forward && index0); + return retVal; +} + + + +static int32_t U_CALLCONV +unistrTextExtract(UText *t, + int64_t start, int64_t limit, + UChar *dest, int32_t destCapacity, + UErrorCode *pErrorCode) { + const UnicodeString *us=(const UnicodeString *)t->context; + int32_t length=us->length(); + + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if(destCapacity<0 || (dest==NULL && destCapacity>0)) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + } + if(start<0 || start>limit) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + int32_t start32 = startgetChar32Start((int32_t)start) : length; + int32_t limit32 = limitgetChar32Start((int32_t)limit) : length; + + length=limit32-start32; + if (destCapacity>0 && dest!=NULL) { + int32_t trimmedLength = length; + if(trimmedLength>destCapacity) { + trimmedLength=destCapacity; + } + us->extract(start32, trimmedLength, dest); + } + u_terminateUChars(dest, destCapacity, length, pErrorCode); + return length; +} + +static int32_t U_CALLCONV +unistrTextReplace(UText *ut, + int64_t start, int64_t limit, + const UChar *src, int32_t length, + UErrorCode *pErrorCode) { + UnicodeString *us=(UnicodeString *)ut->context; + int32_t oldLength; + + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if(src==NULL && length!=0) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + } + if(start>limit) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + oldLength=us->length(); + int32_t start32 = pinIndex(start, oldLength); + int32_t limit32 = pinIndex(limit, oldLength); + if (start32 < oldLength) { + start32 = us->getChar32Start(start32); + } + if (limit32 < oldLength) { + limit32 = us->getChar32Start(limit32); + } + + // replace + us->replace(start32, limit32-start32, src, length); + int32_t newLength = us->length(); + + // Update the chunk description. + ut->chunkContents = us->getBuffer(); + ut->chunkLength = newLength; + ut->chunkNativeLimit = newLength; + ut->nativeIndexingLimit = newLength; + + // Set iteration position to the point just following the newly inserted text. + int32_t lengthDelta = newLength - oldLength; + ut->chunkOffset = limit32 + lengthDelta; + + return lengthDelta; +} + +static void U_CALLCONV +unistrTextCopy(UText *ut, + int64_t start, int64_t limit, + int64_t destIndex, + UBool move, + UErrorCode *pErrorCode) { + UnicodeString *us=(UnicodeString *)ut->context; + int32_t length=us->length(); + + if(U_FAILURE(*pErrorCode)) { + return; + } + int32_t start32 = pinIndex(start, length); + int32_t limit32 = pinIndex(limit, length); + int32_t destIndex32 = pinIndex(destIndex, length); + + if( start32>limit32 || (start32copy(start32, limit32, destIndex32); + if(destIndex32replace(start32, segLength, NULL, 0); + } else { + // copy + us->copy(start32, limit32, destIndex32); + } + + // update chunk description, set iteration position. + ut->chunkContents = us->getBuffer(); + if (move==FALSE) { + // copy operation, string length grows + ut->chunkLength += limit32-start32; + ut->chunkNativeLimit = ut->chunkLength; + ut->nativeIndexingLimit = ut->chunkLength; + } + + // Iteration position to end of the newly inserted text. + ut->chunkOffset = destIndex32+limit32-start32; + if (move && destIndex32>start32) { + ut->chunkOffset = destIndex32; + } + +} + +static struct UTextFuncs unistrFuncs = +{ + sizeof(UTextFuncs), + 0, 0, 0, // Reserved alignment padding + unistrTextClone, + unistrTextLength, + unistrTextAccess, + unistrTextExtract, + unistrTextReplace, + unistrTextCopy, + NULL, // MapOffsetToNative, + NULL, // MapIndexToUTF16, + unistrTextClose, + NULL, // spare 1 + NULL, // spare 2 + NULL // spare 3 +}; + + + +U_CDECL_END + + +U_DRAFT UText * U_EXPORT2 +utext_openUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status) { + // TODO: use openConstUnicodeString, then add in the differences. + // + ut = utext_setup(ut, 0, status); + if (U_SUCCESS(*status)) { + ut->pFuncs = &unistrFuncs; + ut->context = s; + ut->providerProperties = I32_FLAG(UTEXT_PROVIDER_STABLE_CHUNKS)| + I32_FLAG(UTEXT_PROVIDER_WRITABLE); + + ut->chunkContents = s->getBuffer(); + ut->chunkLength = s->length(); + ut->chunkNativeStart = 0; + ut->chunkNativeLimit = ut->chunkLength; + ut->nativeIndexingLimit = ut->chunkLength; + } + return ut; +} + + + +U_DRAFT UText * U_EXPORT2 +utext_openConstUnicodeString(UText *ut, const UnicodeString *s, UErrorCode *status) { + ut = utext_setup(ut, 0, status); + // note: use the standard (writable) function table for UnicodeString. + // The flag settings disable writing, so having the functions in + // the table is harmless. + if (U_SUCCESS(*status)) { + ut->pFuncs = &unistrFuncs; + ut->context = s; + ut->providerProperties = I32_FLAG(UTEXT_PROVIDER_STABLE_CHUNKS); + ut->chunkContents = s->getBuffer(); + ut->chunkLength = s->length(); + ut->chunkNativeStart = 0; + ut->chunkNativeLimit = ut->chunkLength; + ut->nativeIndexingLimit = ut->chunkLength; + } + return ut; +} + +//------------------------------------------------------------------------------ +// +// UText implementation for const UChar * strings +// +// Use of UText data members: +// context pointer to UnicodeString +// a length. -1 if not yet known. +// +// TODO: support 64 bit lengths. +// +//------------------------------------------------------------------------------ + +U_CDECL_BEGIN + + +static UText * U_CALLCONV +ucstrTextClone(UText *dest, const UText * src, UBool deep, UErrorCode * status) { + // First do a generic shallow clone. + dest = shallowTextClone(dest, src, status); + + // For deep clones, make a copy of the string. + // The copied storage is owned by the newly created clone. + // A non-NULL pointer in UText.p is the signal to the close() function to delete + // it. + // + if (deep && U_SUCCESS(*status)) { + U_ASSERT(utext_nativeLength(dest) < INT32_MAX); + int32_t len = (int32_t)utext_nativeLength(dest); + + // The cloned string IS going to be NUL terminated, whether or not the original was. + const UChar *srcStr = (const UChar *)src->context; + UChar *copyStr = (UChar *)uprv_malloc((len+1) * sizeof(UChar)); + if (copyStr == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + } else { + int64_t i; + for (i=0; icontext = copyStr; + dest->providerProperties |= I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT); + } + } + return dest; +} + + +static void U_CALLCONV +ucstrTextClose(UText *ut) { + // Most of the work of close is done by the generic UText framework close. + // All that needs to be done here is delete the string if the UText + // owns it. This occurs if the UText was created by cloning. + if (ut->providerProperties & I32_FLAG(UTEXT_PROVIDER_OWNS_TEXT)) { + UChar *s = (UChar *)ut->context; + uprv_free(s); + ut->context = NULL; + } +} + + + +static int64_t U_CALLCONV +ucstrTextLength(UText *ut) { + if (ut->a < 0) { + // null terminated, we don't yet know the length. Scan for it. + // Access is not convenient for doing this + // because the current interation postion can't be changed. + const UChar *str = (const UChar *)ut->context; + for (;;) { + if (str[ut->chunkNativeLimit] == 0) { + break; + } + ut->chunkNativeLimit++; + } + ut->a = ut->chunkNativeLimit; + ut->chunkLength = (int32_t)ut->chunkNativeLimit; + ut->nativeIndexingLimit = ut->chunkLength; + ut->providerProperties &= ~I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } + return ut->a; +} + + +static UBool U_CALLCONV +ucstrTextAccess(UText *ut, int64_t index, UBool forward) { + const UChar *str = (const UChar *)ut->context; + + // pin the requested index to the bounds of the string, + // and set current iteration position. + if (index<0) { + index = 0; + } else if (index < ut->chunkNativeLimit) { + // The request data is within the chunk as it is known so far. + // Put index on a code point boundary. + U16_SET_CP_START(str, 0, index); + } else if (ut->a >= 0) { + // We know the length of this string, and the user is requesting something + // at or beyond the length. Pin the requested index to the length. + index = ut->a; + } else { + // Null terminated string, length not yet known, and the requested index + // is beyond where we have scanned so far. + // Scan to 32 UChars beyond the requested index. The strategy here is + // to avoid fully scanning a long string when the caller only wants to + // see a few characters at its beginning. + int32_t scanLimit = (int32_t)index + 32; + if ((index + 32)>INT32_MAX || (index + 32)<0 ) { // note: int64 expression + scanLimit = INT32_MAX; + } + + int32_t chunkLimit = (int32_t)ut->chunkNativeLimit; + for (; chunkLimita = chunkLimit; + ut->chunkLength = chunkLimit; + ut->nativeIndexingLimit = chunkLimit; + if (index >= chunkLimit) { + index = chunkLimit; + } else { + U16_SET_CP_START(str, 0, index); + } + + ut->chunkNativeLimit = chunkLimit; + ut->providerProperties &= ~I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + goto breakout; + } + } + // We scanned through the next batch of UChars without finding the end. + U16_SET_CP_START(str, 0, index); + if (chunkLimit == INT32_MAX) { + // Scanned to the limit of a 32 bit length. + // Forceably trim the overlength string back so length fits in int32 + // TODO: add support for 64 bit strings. + ut->a = chunkLimit; + ut->chunkLength = chunkLimit; + ut->nativeIndexingLimit = chunkLimit; + if (index > chunkLimit) { + index = chunkLimit; + } + ut->chunkNativeLimit = chunkLimit; + ut->providerProperties &= ~I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } else { + // The endpoint of a chunk must not be left in the middle of a surrogate pair. + // If the current end is on a lead surrogate, back the end up by one. + // It doesn't matter if the end char happens to be an unpaired surrogate, + // and it's simpler not to worry about it. + if (U16_IS_LEAD(str[chunkLimit-1])) { + --chunkLimit; + } + ut->chunkNativeLimit = chunkLimit; + } + + } +breakout: + U_ASSERT(index<=INT32_MAX); + ut->chunkOffset = (int32_t)index; + + // Check whether request is at the start or end + UBool retVal = (forward && indexchunkNativeLimit) || (!forward && index>0); + return retVal; +} + + + +static int32_t U_CALLCONV +ucstrTextExtract(UText *ut, + int64_t start, int64_t limit, + UChar *dest, int32_t destCapacity, + UErrorCode *pErrorCode) +{ + if(U_FAILURE(*pErrorCode)) { + return 0; + } + if(destCapacity<0 || (dest==NULL && destCapacity>0) || start>limit) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + const UChar *s=(const UChar *)ut->context; + int32_t si, di; + + int32_t start32; + int32_t limit32; + + // Access the start. Does two things we need: + // Pins 'start' to the length of the string, if it came in out-of-bounds. + // Snaps 'start' to the beginning of a code point. + ucstrTextAccess(ut, start, TRUE); + U_ASSERT(start <= INT32_MAX); + start32 = (int32_t)start; + + int32_t strLength=(int32_t)ut->a; + if (strLength >= 0) { + limit32 = pinIndex(limit, strLength); + } else { + limit32 = pinIndex(limit, INT32_MAX); + } + + di = 0; + for (si=start32; sia = si; // set string length for this UText + ut->chunkNativeLimit = si; + ut->chunkLength = si; + ut->nativeIndexingLimit = si; + strLength = si; + break; + } + if (di=0) { + // We have filled the destination buffer, and the string length is known. + // Cut the loop short. There is no need to scan string termination. + di = strLength; + si = limit32; + break; + } + } + di++; + } + + // If the limit index points to a lead surrogate of a pair, + // add the corresponding trail surrogate to the destination. + if (si>0 && U16_IS_LEAD(s[si-1]) && + ((sichunkOffset = si; + + // Add a terminating NUL if space in the buffer permits, + // and set the error status as required. + u_terminateUChars(dest, destCapacity, di, pErrorCode); + return di; +} + +static struct UTextFuncs ucstrFuncs = +{ + sizeof(UTextFuncs), + 0, 0, 0, // Reserved alignment padding + ucstrTextClone, + ucstrTextLength, + ucstrTextAccess, + ucstrTextExtract, + NULL, // Replace + NULL, // Copy + NULL, // MapOffsetToNative, + NULL, // MapIndexToUTF16, + ucstrTextClose, + NULL, // spare 1 + NULL, // spare 2 + NULL, // spare 3 +}; + +U_CDECL_END + + +U_DRAFT UText * U_EXPORT2 +utext_openUChars(UText *ut, const UChar *s, int64_t length, UErrorCode *status) { + if (U_FAILURE(*status)) { + return NULL; + } + if (length < -1 || length>INT32_MAX) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + ut = utext_setup(ut, 0, status); + if (U_SUCCESS(*status)) { + ut->pFuncs = &ucstrFuncs; + ut->context = s; + ut->providerProperties = I32_FLAG(UTEXT_PROVIDER_STABLE_CHUNKS); + if (length==-1) { + ut->providerProperties |= I32_FLAG(UTEXT_PROVIDER_LENGTH_IS_EXPENSIVE); + } + ut->a = length; + ut->chunkContents = s; + ut->chunkNativeStart = 0; + ut->chunkNativeLimit = length>=0? length : 0; + ut->chunkLength = (int32_t)ut->chunkNativeLimit; + ut->chunkOffset = 0; + ut->nativeIndexingLimit = ut->chunkLength; + } + return ut; +} + + +//------------------------------------------------------------------------------ +// +// UText implementation for text from ICU CharacterIterators +// +// Use of UText data members: +// context pointer to the CharacterIterator +// a length of the full text. +// p pointer to buffer 1 +// b start index of local buffer 1 contents +// q pointer to buffer 2 +// c start index of local buffer 2 contents +// r pointer to the character iterator if the UText owns it. +// Null otherwise. +// +//------------------------------------------------------------------------------ +#define CIBufSize 16 + +U_CDECL_BEGIN +static void U_CALLCONV +charIterTextClose(UText *ut) { + // Most of the work of close is done by the generic UText framework close. + // All that needs to be done here is delete the CharacterIterator if the UText + // owns it. This occurs if the UText was created by cloning. + CharacterIterator *ci = (CharacterIterator *)ut->r; + delete ci; + ut->r = NULL; +} + +static int64_t U_CALLCONV +charIterTextLength(UText *ut) { + return (int32_t)ut->a; +} + +static UBool U_CALLCONV +charIterTextAccess(UText *ut, int64_t index, UBool forward) { + CharacterIterator *ci = (CharacterIterator *)ut->context; + + int32_t clippedIndex = (int32_t)index; + if (clippedIndex<0) { + clippedIndex=0; + } else if (clippedIndex>=ut->a) { + clippedIndex=(int32_t)ut->a; + } + int32_t neededIndex = clippedIndex; + if (!forward && neededIndex>0) { + // reverse iteration, want the position just before what was asked for. + neededIndex--; + } else if (forward && neededIndex==ut->a && neededIndex>0) { + // Forward iteration, don't ask for something past the end of the text. + neededIndex--; + } + + // Find the native index of the start of the buffer containing what we want. + neededIndex -= neededIndex % CIBufSize; + + UChar *buf = NULL; + UBool needChunkSetup = TRUE; + int i; + if (ut->chunkNativeStart == neededIndex) { + // The buffer we want is already the current chunk. + needChunkSetup = FALSE; + } else if (ut->b == neededIndex) { + // The first buffer (buffer p) has what we need. + buf = (UChar *)ut->p; + } else if (ut->c == neededIndex) { + // The second buffer (buffer q) has what we need. + buf = (UChar *)ut->q; + } else { + // Neither buffer already has what we need. + // Load new data from the character iterator. + // Use the buf that is not the current buffer. + buf = (UChar *)ut->p; + if (ut->p == ut->chunkContents) { + buf = (UChar *)ut->q; + } + ci->setIndex(neededIndex); + for (i=0; inextPostInc(); + if (i+neededIndex > ut->a) { + break; + } + } + } + + // We have a buffer with the data we need. + // Set it up as the current chunk, if it wasn't already. + if (needChunkSetup) { + ut->chunkContents = buf; + ut->chunkLength = CIBufSize; + ut->chunkNativeStart = neededIndex; + ut->chunkNativeLimit = neededIndex + CIBufSize; + if (ut->chunkNativeLimit > ut->a) { + ut->chunkNativeLimit = ut->a; + ut->chunkLength = (int32_t)(ut->chunkNativeLimit)-(int32_t)(ut->chunkNativeStart); + } + ut->nativeIndexingLimit = ut->chunkLength; + U_ASSERT(ut->chunkOffset>=0 && ut->chunkOffset<=CIBufSize); + } + ut->chunkOffset = clippedIndex - (int32_t)ut->chunkNativeStart; + UBool success = (forward? ut->chunkOffsetchunkLength : ut->chunkOffset>0); + return success; +} + +static UText * U_CALLCONV +charIterTextClone(UText *dest, const UText *src, UBool deep, UErrorCode * status) { + if (U_FAILURE(*status)) { + return NULL; + } + + if (deep) { + // There is no CharacterIterator API for cloning the underlying text storage. + *status = U_UNSUPPORTED_ERROR; + return NULL; + } else { + CharacterIterator *srcCI =(CharacterIterator *)src->context; + srcCI = srcCI->clone(); + dest = utext_openCharacterIterator(dest, srcCI, status); + // cast off const on getNativeIndex. + // For CharacterIterator based UTexts, this is safe, the operation is const. + int64_t ix = utext_getNativeIndex((UText *)src); + utext_setNativeIndex(dest, ix); + dest->r = srcCI; // flags that this UText owns the CharacterIterator + } + return dest; +} + +static int32_t U_CALLCONV +charIterTextExtract(UText *ut, + int64_t start, int64_t limit, + UChar *dest, int32_t destCapacity, + UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return 0; + } + if(destCapacity<0 || (dest==NULL && destCapacity>0) || start>limit) { + *status=U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + int32_t length = (int32_t)ut->a; + int32_t start32 = pinIndex(start, length); + int32_t limit32 = pinIndex(limit, length); + int32_t desti = 0; + int32_t srci; + + CharacterIterator *ci = (CharacterIterator *)ut->context; + ci->setIndex32(start32); // Moves ix to lead of surrogate pair, if needed. + srci = ci->getIndex(); + while (srcinext32PostInc(); + int32_t len = U16_LENGTH(c); + if (desti+len <= destCapacity) { + U16_APPEND_UNSAFE(dest, desti, c); + } else { + desti += len; + *status = U_BUFFER_OVERFLOW_ERROR; + } + srci += len; + } + + u_terminateUChars(dest, destCapacity, desti, status); + return desti; +} + +static struct UTextFuncs charIterFuncs = +{ + sizeof(UTextFuncs), + 0, 0, 0, // Reserved alignment padding + charIterTextClone, + charIterTextLength, + charIterTextAccess, + charIterTextExtract, + NULL, // Replace + NULL, // Copy + NULL, // MapOffsetToNative, + NULL, // MapIndexToUTF16, + charIterTextClose, + NULL, // spare 1 + NULL, // spare 2 + NULL // spare 3 +}; +U_CDECL_END + + +U_DRAFT UText * U_EXPORT2 +utext_openCharacterIterator(UText *ut, CharacterIterator *ci, UErrorCode *status) { + if (U_FAILURE(*status)) { + return NULL; + } + + if (ci->startIndex() > 0) { + // No support for CharacterIterators that do not start indexing from zero. + *status = U_UNSUPPORTED_ERROR; + return NULL; + } + + // Extra space in UText for 2 buffers of CIBufSize UChars each. + int32_t extraSpace = 2 * CIBufSize * sizeof(UChar); + ut = utext_setup(ut, extraSpace, status); + if (U_SUCCESS(*status)) { + ut->pFuncs = &charIterFuncs; + ut->context = ci; + ut->providerProperties = 0; + ut->a = ci->endIndex(); // Length of text + ut->p = ut->pExtra; // First buffer + ut->b = -1; // Native index of first buffer contents + ut->q = (UChar*)ut->pExtra+CIBufSize; // Second buffer + ut->c = -1; // Native index of second buffer contents + + // Initialize current chunk contents to be empty. + // First access will fault something in. + // Note: The initial nativeStart and chunkOffset must sum to zero + // so that getNativeIndex() will correctly compute to zero + // if no call to Access() has ever been made. They can't be both + // zero without Access() thinking that the chunk is valid. + ut->chunkContents = (UChar *)ut->p; + ut->chunkNativeStart = -1; + ut->chunkOffset = 1; + ut->chunkNativeLimit = 0; + ut->chunkLength = 0; + ut->nativeIndexingLimit = ut->chunkOffset; // enables native indexing + } + return ut; +} + + + diff --git a/icuSources/common/utf_impl.c b/icuSources/common/utf_impl.c index 431b0eb5..8f45546b 100644 --- a/icuSources/common/utf_impl.c +++ b/icuSources/common/utf_impl.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -82,6 +82,28 @@ utf8_errorValue[6]={ 0x3ffffff, 0x7fffffff }; +/* + * Handle the non-inline part of the U8_NEXT() macro and its obsolete sibling + * UTF8_NEXT_CHAR_SAFE(). + * + * The "strict" parameter controls the error behavior: + * <0 "Safe" behavior of U8_NEXT(): All illegal byte sequences yield a negative + * code point result. + * 0 Obsolete "safe" behavior of UTF8_NEXT_CHAR_SAFE(..., FALSE): + * All illegal byte sequences yield a positive code point such that this + * result code point would be encoded with the same number of bytes as + * the illegal sequence. + * >0 Obsolete "strict" behavior of UTF8_NEXT_CHAR_SAFE(..., TRUE): + * Same as the obsolete "safe" behavior, but non-characters are also treated + * like illegal sequences. + * + * The special negative (<0) value -2 is used for lenient treatment of surrogate + * code points as legal. Some implementations use this for roundtripping of + * Unicode 16-bit strings that are not well-formed UTF-16, that is, they + * contain unpaired surrogates. + * + * Note that a UBool is the same as an int8_t. + */ U_CAPI UChar32 U_EXPORT2 utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict) { int32_t i=*pi; @@ -139,7 +161,7 @@ utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, /* correct sequence - all trail bytes have (b7..b6)==(10)? */ /* illegal is also set if count>=4 */ - if(illegal || (c)=4 || c>0x10ffff || c0 && UTF_IS_UNICODE_NONCHAR(c))) { + if(count>=4 || c>0x10ffff || c0 && UTF_IS_UNICODE_NONCHAR(c))) { /* illegal sequence or (strict and non-character) */ if(count>=4) { count=3; diff --git a/icuSources/common/util.cpp b/icuSources/common/util.cpp index 203fde51..7a588b5a 100644 --- a/icuSources/common/util.cpp +++ b/icuSources/common/util.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -9,9 +9,7 @@ */ #include "util.h" -#include "unicode/uchar.h" #include "unicode/unimatch.h" -#include "uprops.h" // Define UChar constants using hex for EBCDIC compatibility @@ -29,6 +27,8 @@ static const UChar DIGITS[] = { 85,86,87,88,89,90 }; +U_NAMESPACE_BEGIN + UnicodeString& ICU_Utility::appendNumber(UnicodeString& result, int32_t n, int32_t radix, int32_t minDigits) { if (radix < 2 || radix > 36) { @@ -214,69 +214,6 @@ UBool ICU_Utility::parseChar(const UnicodeString& id, int32_t& pos, UChar ch) { return TRUE; } -/** - * Parse a pattern string starting at offset pos. Keywords are - * matched case-insensitively. Spaces may be skipped and may be - * optional or required. Integer values may be parsed, and if - * they are, they will be returned in the given array. If - * successful, the offset of the next non-space character is - * returned. On failure, -1 is returned. - * @param pattern must only contain lowercase characters, which - * will match their uppercase equivalents as well. A space - * character matches one or more required spaces. A '~' character - * matches zero or more optional spaces. A '#' character matches - * an integer and stores it in parsedInts, which the caller must - * ensure has enough capacity. - * @param parsedInts array to receive parsed integers. Caller - * must ensure that parsedInts.length is >= the number of '#' - * signs in 'pattern'. - * @return the position after the last character parsed, or -1 if - * the parse failed - */ -int32_t ICU_Utility::parsePattern(const UnicodeString& rule, int32_t pos, int32_t limit, - const UnicodeString& pattern, int32_t* parsedInts) { - // TODO Update this to handle surrogates - int32_t p; - int32_t intCount = 0; // number of integers parsed - for (int32_t i=0; i= limit) { - return -1; - } - c = rule.charAt(pos++); - if (!uprv_isRuleWhiteSpace(c)) { - return -1; - } - // FALL THROUGH to skipWhitespace - case 126 /*'~'*/: - pos = skipWhitespace(rule, pos); - break; - case 35 /*'#'*/: - p = pos; - parsedInts[intCount++] = parseInteger(rule, p, limit); - if (p == pos) { - // Syntax error; failed to parse integer - return -1; - } - pos = p; - break; - default: - if (pos >= limit) { - return -1; - } - c = (UChar) u_tolower(rule.charAt(pos++)); - if (c != cpat) { - return -1; - } - break; - } - } - return pos; -} - /** * Parse a pattern string within the given Replaceable and a parsing * pattern. Characters are matched literally and case-sensitively @@ -343,140 +280,6 @@ int32_t ICU_Utility::parsePattern(const UnicodeString& pat, return -1; // text ended before end of pat } -/** - * Parse an integer at pos, either of the form \d+ or of the form - * 0x[0-9A-Fa-f]+ or 0[0-7]+, that is, in standard decimal, hex, - * or octal format. - * @param pos INPUT-OUTPUT parameter. On input, the first - * character to parse. On output, the character after the last - * parsed character. - */ -int32_t ICU_Utility::parseInteger(const UnicodeString& rule, int32_t& pos, int32_t limit) { - int32_t count = 0; - int32_t value = 0; - int32_t p = pos; - int8_t radix = 10; - - if (p < limit && rule.charAt(p) == 48 /*0*/) { - if (p+1 < limit && (rule.charAt(p+1) == 0x78 /*x*/ || rule.charAt(p+1) == 0x58 /*X*/)) { - p += 2; - radix = 16; - } - else { - p++; - count = 1; - radix = 8; - } - } - - while (p < limit) { - int32_t d = u_digit(rule.charAt(p++), radix); - if (d < 0) { - --p; - break; - } - ++count; - int32_t v = (value * radix) + d; - if (v <= value) { - // If there are too many input digits, at some point - // the value will go negative, e.g., if we have seen - // "0x8000000" already and there is another '0', when - // we parse the next 0 the value will go negative. - return 0; - } - value = v; - } - if (count > 0) { - pos = p; - } - return value; -} - -/** - * Parse a Unicode identifier from the given string at the given - * position. Return the identifier, or an empty string if there - * is no identifier. - * @param str the string to parse - * @param pos INPUT-OUPUT parameter. On INPUT, pos is the - * first character to examine. It must be less than str.length(), - * and it must not point to a whitespace character. That is, must - * have pos < str.length() and - * !uprv_isRuleWhiteSpace(str.char32At(pos)). On - * OUTPUT, the position after the last parsed character. - * @return the Unicode identifier, or an empty string if there is - * no valid identifier at pos. - */ -UnicodeString ICU_Utility::parseUnicodeIdentifier(const UnicodeString& str, int32_t& pos) { - // assert(pos < str.length()); - // assert(!uprv_isRuleWhiteSpace(str.char32At(pos))); - UnicodeString buf; - int p = pos; - while (p < str.length()) { - UChar32 ch = str.char32At(p); - if (buf.length() == 0) { - if (u_isIDStart(ch)) { - buf.append(ch); - } else { - buf.truncate(0); - return buf; - } - } else { - if (u_isIDPart(ch)) { - buf.append(ch); - } else { - break; - } - } - p += UTF_CHAR_LENGTH(ch); - } - pos = p; - return buf; -} - -/** - * Parse an unsigned 31-bit integer at the given offset. Use - * UCharacter.digit() to parse individual characters into digits. - * @param text the text to be parsed - * @param pos INPUT-OUTPUT parameter. On entry, pos[0] is the - * offset within text at which to start parsing; it should point - * to a valid digit. On exit, pos[0] is the offset after the last - * parsed character. If the parse failed, it will be unchanged on - * exit. Must be >= 0 on entry. - * @param radix the radix in which to parse; must be >= 2 and <= - * 36. - * @return a non-negative parsed number, or -1 upon parse failure. - * Parse fails if there are no digits, that is, if pos[0] does not - * point to a valid digit on entry, or if the number to be parsed - * does not fit into a 31-bit unsigned integer. - */ -int32_t ICU_Utility::parseNumber(const UnicodeString& text, - int32_t& pos, int8_t radix) { - // assert(pos[0] >= 0); - // assert(radix >= 2); - // assert(radix <= 36); - int32_t n = 0; - int32_t p = pos; - while (p < text.length()) { - UChar32 ch = text.char32At(p); - int32_t d = u_digit(ch, radix); - if (d < 0) { - break; - } - n = radix*n + d; - // ASSUME that when a 32-bit integer overflows it becomes - // negative. E.g., 214748364 * 10 + 8 => negative value. - if (n < 0) { - return -1; - } - ++p; - } - if (p == pos) { - return -1; - } - pos = p; - return n; -} - /** * Append a character to a rule that is being built up. To flush * the quoteBuf to rule, make one final call with isLiteral == TRUE. @@ -609,12 +412,15 @@ void ICU_Utility::appendToRule(UnicodeString& rule, } } +U_NAMESPACE_END + U_CAPI UBool U_EXPORT2 uprv_isRuleWhiteSpace(UChar32 c) { /* "white space" in the sense of ICU rule parsers This is a FIXED LIST that is NOT DEPENDENT ON UNICODE PROPERTIES. - See UTR #31: http://www.unicode.org/reports/tr31/. + See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/ U+0009..U+000D, U+0020, U+0085, U+200E..U+200F, and U+2028..U+2029 + Equivalent to test for Pattern_White_Space Unicode property. */ return (c >= 0x0009 && c <= 0x2029 && (c <= 0x000D || c == 0x0020 || c == 0x0085 || diff --git a/icuSources/common/util.h b/icuSources/common/util.h index a5841dc9..6af528b0 100644 --- a/icuSources/common/util.h +++ b/icuSources/common/util.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -236,6 +236,9 @@ U_NAMESPACE_END /** * Is this character a "white space" in the sense of ICU rule parsers? + * Equivalent to test for Pattern_White_Space Unicode property. + * Stable set of characters, won't change. + * See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/ * @internal */ U_CAPI UBool U_EXPORT2 diff --git a/icuSources/common/util_props.cpp b/icuSources/common/util_props.cpp new file mode 100644 index 00000000..f91666b4 --- /dev/null +++ b/icuSources/common/util_props.cpp @@ -0,0 +1,214 @@ +/* +********************************************************************** +* Copyright (c) 2001-2006, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* Date Name Description +* 11/19/2001 aliu Creation. +********************************************************************** +*/ + +#include "util.h" +#include "unicode/uchar.h" + +U_NAMESPACE_BEGIN + +/** + * Parse an integer at pos, either of the form \d+ or of the form + * 0x[0-9A-Fa-f]+ or 0[0-7]+, that is, in standard decimal, hex, + * or octal format. + * @param pos INPUT-OUTPUT parameter. On input, the first + * character to parse. On output, the character after the last + * parsed character. + */ +int32_t ICU_Utility::parseInteger(const UnicodeString& rule, int32_t& pos, int32_t limit) { + int32_t count = 0; + int32_t value = 0; + int32_t p = pos; + int8_t radix = 10; + + if (p < limit && rule.charAt(p) == 48 /*0*/) { + if (p+1 < limit && (rule.charAt(p+1) == 0x78 /*x*/ || rule.charAt(p+1) == 0x58 /*X*/)) { + p += 2; + radix = 16; + } + else { + p++; + count = 1; + radix = 8; + } + } + + while (p < limit) { + int32_t d = u_digit(rule.charAt(p++), radix); + if (d < 0) { + --p; + break; + } + ++count; + int32_t v = (value * radix) + d; + if (v <= value) { + // If there are too many input digits, at some point + // the value will go negative, e.g., if we have seen + // "0x8000000" already and there is another '0', when + // we parse the next 0 the value will go negative. + return 0; + } + value = v; + } + if (count > 0) { + pos = p; + } + return value; +} + +/** + * Parse a pattern string starting at offset pos. Keywords are + * matched case-insensitively. Spaces may be skipped and may be + * optional or required. Integer values may be parsed, and if + * they are, they will be returned in the given array. If + * successful, the offset of the next non-space character is + * returned. On failure, -1 is returned. + * @param pattern must only contain lowercase characters, which + * will match their uppercase equivalents as well. A space + * character matches one or more required spaces. A '~' character + * matches zero or more optional spaces. A '#' character matches + * an integer and stores it in parsedInts, which the caller must + * ensure has enough capacity. + * @param parsedInts array to receive parsed integers. Caller + * must ensure that parsedInts.length is >= the number of '#' + * signs in 'pattern'. + * @return the position after the last character parsed, or -1 if + * the parse failed + */ +int32_t ICU_Utility::parsePattern(const UnicodeString& rule, int32_t pos, int32_t limit, + const UnicodeString& pattern, int32_t* parsedInts) { + // TODO Update this to handle surrogates + int32_t p; + int32_t intCount = 0; // number of integers parsed + for (int32_t i=0; i= limit) { + return -1; + } + c = rule.charAt(pos++); + if (!uprv_isRuleWhiteSpace(c)) { + return -1; + } + // FALL THROUGH to skipWhitespace + case 126 /*'~'*/: + pos = skipWhitespace(rule, pos); + break; + case 35 /*'#'*/: + p = pos; + parsedInts[intCount++] = parseInteger(rule, p, limit); + if (p == pos) { + // Syntax error; failed to parse integer + return -1; + } + pos = p; + break; + default: + if (pos >= limit) { + return -1; + } + c = (UChar) u_tolower(rule.charAt(pos++)); + if (c != cpat) { + return -1; + } + break; + } + } + return pos; +} + +/** + * Parse a Unicode identifier from the given string at the given + * position. Return the identifier, or an empty string if there + * is no identifier. + * @param str the string to parse + * @param pos INPUT-OUPUT parameter. On INPUT, pos is the + * first character to examine. It must be less than str.length(), + * and it must not point to a whitespace character. That is, must + * have pos < str.length() and + * !uprv_isRuleWhiteSpace(str.char32At(pos)). On + * OUTPUT, the position after the last parsed character. + * @return the Unicode identifier, or an empty string if there is + * no valid identifier at pos. + */ +UnicodeString ICU_Utility::parseUnicodeIdentifier(const UnicodeString& str, int32_t& pos) { + // assert(pos < str.length()); + // assert(!uprv_isRuleWhiteSpace(str.char32At(pos))); + UnicodeString buf; + int p = pos; + while (p < str.length()) { + UChar32 ch = str.char32At(p); + if (buf.length() == 0) { + if (u_isIDStart(ch)) { + buf.append(ch); + } else { + buf.truncate(0); + return buf; + } + } else { + if (u_isIDPart(ch)) { + buf.append(ch); + } else { + break; + } + } + p += UTF_CHAR_LENGTH(ch); + } + pos = p; + return buf; +} + +/** + * Parse an unsigned 31-bit integer at the given offset. Use + * UCharacter.digit() to parse individual characters into digits. + * @param text the text to be parsed + * @param pos INPUT-OUTPUT parameter. On entry, pos[0] is the + * offset within text at which to start parsing; it should point + * to a valid digit. On exit, pos[0] is the offset after the last + * parsed character. If the parse failed, it will be unchanged on + * exit. Must be >= 0 on entry. + * @param radix the radix in which to parse; must be >= 2 and <= + * 36. + * @return a non-negative parsed number, or -1 upon parse failure. + * Parse fails if there are no digits, that is, if pos[0] does not + * point to a valid digit on entry, or if the number to be parsed + * does not fit into a 31-bit unsigned integer. + */ +int32_t ICU_Utility::parseNumber(const UnicodeString& text, + int32_t& pos, int8_t radix) { + // assert(pos[0] >= 0); + // assert(radix >= 2); + // assert(radix <= 36); + int32_t n = 0; + int32_t p = pos; + while (p < text.length()) { + UChar32 ch = text.char32At(p); + int32_t d = u_digit(ch, radix); + if (d < 0) { + break; + } + n = radix*n + d; + // ASSUME that when a 32-bit integer overflows it becomes + // negative. E.g., 214748364 * 10 + 8 => negative value. + if (n < 0) { + return -1; + } + ++p; + } + if (p == pos) { + return -1; + } + pos = p; + return n; +} + +U_NAMESPACE_END + diff --git a/icuSources/common/utrace.c b/icuSources/common/utrace.c index eca15036..b2526bb2 100644 --- a/icuSources/common/utrace.c +++ b/icuSources/common/utrace.c @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: utrace.c @@ -230,7 +230,7 @@ utrace_vformat(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, /* UChar * string, with length, len==-1 for null terminated. */ ptrArg = va_arg(args, void *); /* Ptr */ intArg =(int32_t)va_arg(args, int32_t); /* Length */ - outputUString((const unsigned short *)ptrArg, intArg, outBuf, &outIx, capacity, indent); + outputUString((const UChar *)ptrArg, intArg, outBuf, &outIx, capacity, indent); break; case 'b': @@ -338,7 +338,7 @@ utrace_vformat(char *outBuf, int32_t capacity, int32_t indent, const char *fmt, case 'S': charsToOutput = 0; - outputUString((const unsigned short *)*ptrPtr, -1, outBuf, &outIx, capacity, indent); + outputUString((const UChar *)*ptrPtr, -1, outBuf, &outIx, capacity, indent); outputChar('\n', outBuf, &outIx, capacity, indent); longArg = *ptrPtr==NULL? 0: 1; /* for test for null term. array. */ ptrPtr++; diff --git a/icuSources/common/utrie.c b/icuSources/common/utrie.c index b6b72c88..812c89db 100644 --- a/icuSources/common/utrie.c +++ b/icuSources/common/utrie.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -23,13 +23,24 @@ #endif #include "unicode/utypes.h" -#include "udataswp.h" #include "cmemory.h" #include "utrie.h" +/* miscellaneous ------------------------------------------------------------ */ + #undef ABS #define ABS(x) ((x)>=0 ? (x) : -(x)) +static U_INLINE UBool +equal_uint32(const uint32_t *s, const uint32_t *t, int32_t length) { + while(length>0 && *s==*t) { + ++s; + ++t; + --length; + } + return (UBool)(length==0); +} + /* Building a trie ----------------------------------------------------------*/ U_CAPI UNewTrie * U_EXPORT2 @@ -539,18 +550,13 @@ _findUnusedBlocks(UNewTrie *trie) { static int32_t _findSameDataBlock(const uint32_t *data, int32_t dataLength, int32_t otherBlock, int32_t step) { - int32_t block, i; + int32_t block; /* ensure that we do not even partially get past dataLength */ dataLength-=UTRIE_DATA_BLOCK_LENGTH; for(block=0; block<=dataLength; block+=step) { - for(i=0; idataLength;) { /* * start: index of first entry of current block - * prevEnd: index to last entry of previous block * newStart: index where the current block is to be moved + * (right after current end of already-compacted data) */ /* skip blocks that are not used */ @@ -613,7 +617,7 @@ utrie_compact(UNewTrie *trie, UBool overlap, UErrorCode *pErrorCode) { /* advance start to the next block */ start+=UTRIE_DATA_BLOCK_LENGTH; - /* leave prevEnd and newStart with the previous block! */ + /* leave newStart with the previous block! */ continue; } @@ -629,19 +633,16 @@ utrie_compact(UNewTrie *trie, UBool overlap, UErrorCode *pErrorCode) { /* advance start to the next block */ start+=UTRIE_DATA_BLOCK_LENGTH; - /* leave prevEnd and newStart with the previous block! */ + /* leave newStart with the previous block! */ continue; } /* see if the beginning of this block can be overlapped with the end of the previous block */ - /* x: first value in the current block */ - x=trie->data[start]; - if(x==trie->data[prevEnd] && overlap && start>=overlapStart) { - /* overlap by at least one */ - for(i=1; idata[start+i] && x==trie->data[prevEnd-i]; ++i) {} - - /* overlap by i, rounded down for the data block granularity */ - i&=~(UTRIE_DATA_GRANULARITY-1); + if(overlap && start>=overlapStart) { + /* look for maximum overlap (modulo granularity) with the previous, adjacent block */ + for(i=UTRIE_DATA_BLOCK_LENGTH-UTRIE_DATA_GRANULARITY; + i>0 && !equal_uint32(trie->data+(newStart-i), trie->data+start, i); + i-=UTRIE_DATA_GRANULARITY) {} } else { i=0; } @@ -666,8 +667,6 @@ utrie_compact(UNewTrie *trie, UBool overlap, UErrorCode *pErrorCode) { newStart+=UTRIE_DATA_BLOCK_LENGTH; start=newStart; } - - prevEnd=newStart-1; } /* now adjust the index (stage 1) table */ @@ -686,55 +685,6 @@ utrie_compact(UNewTrie *trie, UBool overlap, UErrorCode *pErrorCode) { /* serialization ------------------------------------------------------------ */ -/** - * Trie data structure in serialized form: - * - * UTrieHeader header; - * uint16_t index[header.indexLength]; - * uint16_t data[header.dataLength]; - */ -struct UTrieHeader { - /** "Trie" in big-endian US-ASCII (0x54726965) */ - uint32_t signature; - - /** - * options bit field: - * 9 1=Latin-1 data is stored linearly at data+UTRIE_DATA_BLOCK_LENGTH - * 8 0=16-bit data, 1=32-bit data - * 7..4 UTRIE_INDEX_SHIFT // 0..UTRIE_SHIFT - * 3..0 UTRIE_SHIFT // 1..9 - */ - uint32_t options; - - /** indexLength is a multiple of UTRIE_SURROGATE_BLOCK_COUNT */ - int32_t indexLength; - - /** dataLength>=UTRIE_DATA_BLOCK_LENGTH */ - int32_t dataLength; -}; - -typedef struct UTrieHeader UTrieHeader; - -/** - * Constants for use with UTrieHeader.options. - */ -enum { - /** Mask to get the UTRIE_SHIFT value from options. */ - UTRIE_OPTIONS_SHIFT_MASK=0xf, - - /** Shift options right this much to get the UTRIE_INDEX_SHIFT value. */ - UTRIE_OPTIONS_INDEX_SHIFT=4, - - /** If set, then the data (stage 2) array is 32 bits wide. */ - UTRIE_OPTIONS_DATA_IS_32_BIT=0x100, - - /** - * If set, then Latin-1 data (for U+0000..U+00ff) is stored in the data (stage 2) array - * as a simple, linear array at data+UTRIE_DATA_BLOCK_LENGTH. - */ - UTRIE_OPTIONS_LATIN1_IS_LINEAR=0x200 -}; - /* * Default function for the folding value: * Just store the offset (16 bits) if there is any non-initial-value entry. @@ -882,15 +832,15 @@ utrie_serialize(UNewTrie *trie, void *dt, int32_t capacity, } /* inverse to defaultGetFoldedValue() */ -static int32_t U_CALLCONV -defaultGetFoldingOffset(uint32_t data) { +U_CAPI int32_t U_EXPORT2 +utrie_defaultGetFoldingOffset(uint32_t data) { return (int32_t)data; } U_CAPI int32_t U_EXPORT2 utrie_unserialize(UTrie *trie, const void *data, int32_t length, UErrorCode *pErrorCode) { - UTrieHeader *header; - uint16_t *p16; + const UTrieHeader *header; + const uint16_t *p16; uint32_t options; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { @@ -904,7 +854,7 @@ utrie_unserialize(UTrie *trie, const void *data, int32_t length, UErrorCode *pEr } /* check the signature */ - header=(UTrieHeader *)data; + header=(const UTrieHeader *)data; if(header->signature!=0x54726965) { *pErrorCode=U_INVALID_FORMAT_ERROR; return -1; @@ -931,7 +881,7 @@ utrie_unserialize(UTrie *trie, const void *data, int32_t length, UErrorCode *pEr *pErrorCode=U_INVALID_FORMAT_ERROR; return -1; } - p16=(uint16_t *)(header+1); + p16=(const uint16_t *)(header+1); trie->index=p16; p16+=trie->indexLength; length-=2*trie->indexLength; @@ -957,82 +907,124 @@ utrie_unserialize(UTrie *trie, const void *data, int32_t length, UErrorCode *pEr length=(int32_t)sizeof(UTrieHeader)+2*trie->indexLength+2*trie->dataLength; } - trie->getFoldingOffset=defaultGetFoldingOffset; + trie->getFoldingOffset=utrie_defaultGetFoldingOffset; return length; } -/* swapping ----------------------------------------------------------------- */ - U_CAPI int32_t U_EXPORT2 -utrie_swap(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - const UTrieHeader *inTrie; - UTrieHeader trie; - int32_t size; - UBool dataIs32; +utrie_unserializeDummy(UTrie *trie, + void *data, int32_t length, + uint32_t initialValue, uint32_t leadUnitValue, + UBool make16BitTrie, + UErrorCode *pErrorCode) { + uint16_t *p16; + int32_t actualLength, latin1Length, i, limit; + uint16_t block; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; + return -1; } - if(ds==NULL || inData==NULL || (length>=0 && outData==NULL)) { - *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; - return 0; + + /* calculate the actual size of the dummy trie data */ + + /* max(Latin-1, block 0) */ + latin1Length= UTRIE_SHIFT<=8 ? 256 : UTRIE_DATA_BLOCK_LENGTH; + + trie->indexLength=UTRIE_BMP_INDEX_LENGTH+UTRIE_SURROGATE_BLOCK_COUNT; + trie->dataLength=latin1Length; + if(leadUnitValue!=initialValue) { + trie->dataLength+=UTRIE_DATA_BLOCK_LENGTH; } - /* setup and swapping */ - if(length>=0 && lengthindexLength*2; + if(make16BitTrie) { + actualLength+=trie->dataLength*2; + } else { + actualLength+=trie->dataLength*4; } - inTrie=(const UTrieHeader *)inData; - trie.signature=ds->readUInt32(inTrie->signature); - trie.options=ds->readUInt32(inTrie->options); - trie.indexLength=udata_readInt32(ds, inTrie->indexLength); - trie.dataLength=udata_readInt32(ds, inTrie->dataLength); - - if( trie.signature!=0x54726965 || - (trie.options&UTRIE_OPTIONS_SHIFT_MASK)!=UTRIE_SHIFT || - ((trie.options>>UTRIE_OPTIONS_INDEX_SHIFT)&UTRIE_OPTIONS_SHIFT_MASK)!=UTRIE_INDEX_SHIFT || - trie.indexLengthisLatin1Linear=TRUE; + trie->initialValue=initialValue; - if(length>=0) { - UTrieHeader *outTrie; + /* fill the index and data arrays */ + p16=(uint16_t *)data; + trie->index=p16; - if(lengthindexLength>>UTRIE_INDEX_SHIFT); + limit=trie->indexLength; + for(i=0; i>UTRIE_INDEX_SHIFT); + i=0xd800>>UTRIE_SHIFT; + limit=0xdc00>>UTRIE_SHIFT; + for(; iswapArray32(ds, inTrie, sizeof(UTrieHeader), outTrie, pErrorCode); + trie->data32=NULL; - /* swap the index and the data */ - if(dataIs32) { - ds->swapArray16(ds, inTrie+1, trie.indexLength*2, outTrie+1, pErrorCode); - ds->swapArray32(ds, (const uint16_t *)(inTrie+1)+trie.indexLength, trie.dataLength*4, - (uint16_t *)(outTrie+1)+trie.indexLength, pErrorCode); - } else { - ds->swapArray16(ds, inTrie+1, (trie.indexLength+trie.dataLength)*2, outTrie+1, pErrorCode); + /* Latin-1 data */ + p16+=trie->indexLength; + for(i=0; iindexLength*2); + + if(leadUnitValue!=initialValue) { + /* indexes for lead surrogate code units to the block after Latin-1 */ + block=(uint16_t)(latin1Length>>UTRIE_INDEX_SHIFT); + i=0xd800>>UTRIE_SHIFT; + limit=0xdc00>>UTRIE_SHIFT; + for(; idata32=p32=(uint32_t *)(p16+trie->indexLength); + + /* Latin-1 data */ + for(i=0; igetFoldingOffset=utrie_defaultGetFoldingOffset; + + return actualLength; } /* enumeration -------------------------------------------------------------- */ diff --git a/icuSources/common/utrie.h b/icuSources/common/utrie.h index 0492f0f0..d8d77ac4 100644 --- a/icuSources/common/utrie.h +++ b/icuSources/common/utrie.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -110,6 +110,23 @@ enum { */ #define UTRIE_MAX_BUILD_TIME_DATA_LENGTH (0x110000+UTRIE_DATA_BLOCK_LENGTH+0x400) +/** + * Number of bytes for a dummy trie. + * A dummy trie is an empty runtime trie, used when a real data trie cannot + * be loaded. + * The number of bytes works for Latin-1-linear tries with 32-bit data + * (worst case). + * + * Calculation: + * BMP index + 1 index block for lead surrogate code points + + * Latin-1-linear array + 1 data block for lead surrogate code points + * + * Latin-1: if(UTRIE_SHIFT<=8) { 256 } else { included in first data block } + * + * @see utrie_unserializeDummy + */ +#define UTRIE_DUMMY_SIZE ((UTRIE_BMP_INDEX_LENGTH+UTRIE_SURROGATE_BLOCK_COUNT)*2+(UTRIE_SHIFT<=8?256:UTRIE_DATA_BLOCK_LENGTH)*4+UTRIE_DATA_BLOCK_LENGTH*4) + /** * Runtime UTrie callback function. * Extract from a lead surrogate's data the @@ -483,6 +500,45 @@ utrie_enum(const UTrie *trie, U_CAPI int32_t U_EXPORT2 utrie_unserialize(UTrie *trie, const void *data, int32_t length, UErrorCode *pErrorCode); +/** + * "Unserialize" a dummy trie. + * A dummy trie is an empty runtime trie, used when a real data trie cannot + * be loaded. + * + * The input memory is filled so that the trie always returns the initialValue, + * or the leadUnitValue for lead surrogate code points. + * The Latin-1 part is always set up to be linear. + * + * @param trie a pointer to the runtime trie structure + * @param data a pointer to 32-bit-aligned memory to be filled with the dummy trie data + * @param length the number of bytes available at data (recommended to use UTRIE_DUMMY_SIZE) + * @param initialValue the initial value that is set for all code points + * @param leadUnitValue the value for lead surrogate code _units_ that do not + * have associated supplementary data + * @param pErrorCode an in/out ICU UErrorCode + * + * @see UTRIE_DUMMY_SIZE + * @see utrie_open + */ +U_CAPI int32_t U_EXPORT2 +utrie_unserializeDummy(UTrie *trie, + void *data, int32_t length, + uint32_t initialValue, uint32_t leadUnitValue, + UBool make16BitTrie, + UErrorCode *pErrorCode); + +/** + * Default implementation for UTrie.getFoldingOffset, set automatically by + * utrie_unserialize(). + * Simply returns the lead surrogate's value itself - which is the inverse + * of the default folding function used by utrie_serialize(). + * Exported for static const UTrie structures. + * + * @see UTrieGetFoldingOffset + */ +U_CAPI int32_t U_EXPORT2 +utrie_defaultGetFoldingOffset(uint32_t data); + /* Building a trie ----------------------------------------------------------*/ /** @@ -680,6 +736,57 @@ utrie_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode); +/* serialization ------------------------------------------------------------ */ + +/** + * Trie data structure in serialized form: + * + * UTrieHeader header; + * uint16_t index[header.indexLength]; + * uint16_t data[header.dataLength]; + * @internal + */ +typedef struct UTrieHeader { + /** "Trie" in big-endian US-ASCII (0x54726965) */ + uint32_t signature; + + /** + * options bit field: + * 9 1=Latin-1 data is stored linearly at data+UTRIE_DATA_BLOCK_LENGTH + * 8 0=16-bit data, 1=32-bit data + * 7..4 UTRIE_INDEX_SHIFT // 0..UTRIE_SHIFT + * 3..0 UTRIE_SHIFT // 1..9 + */ + uint32_t options; + + /** indexLength is a multiple of UTRIE_SURROGATE_BLOCK_COUNT */ + int32_t indexLength; + + /** dataLength>=UTRIE_DATA_BLOCK_LENGTH */ + int32_t dataLength; +} UTrieHeader; + +/** + * Constants for use with UTrieHeader.options. + * @internal + */ +enum { + /** Mask to get the UTRIE_SHIFT value from options. */ + UTRIE_OPTIONS_SHIFT_MASK=0xf, + + /** Shift options right this much to get the UTRIE_INDEX_SHIFT value. */ + UTRIE_OPTIONS_INDEX_SHIFT=4, + + /** If set, then the data (stage 2) array is 32 bits wide. */ + UTRIE_OPTIONS_DATA_IS_32_BIT=0x100, + + /** + * If set, then Latin-1 data (for U+0000..U+00ff) is stored in the data (stage 2) array + * as a simple, linear array at data+UTRIE_DATA_BLOCK_LENGTH. + */ + UTRIE_OPTIONS_LATIN1_IS_LINEAR=0x200 +}; + U_CDECL_END #endif diff --git a/icuSources/common/utypes.c b/icuSources/common/utypes.c index 02f5f006..2255b0c1 100644 --- a/icuSources/common/utypes.c +++ b/icuSources/common/utypes.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -100,7 +100,8 @@ _uErrorName[U_STANDARD_ERROR_LIMIT]={ "U_INVARIANT_CONVERSION_ERROR", "U_INVALID_STATE_ERROR", "U_COLLATOR_VERSION_MISMATCH", - "U_USELESS_COLLATOR_ERROR" + "U_USELESS_COLLATOR_ERROR", + "U_NO_WRITE_PERMISSION" }; static const char * const _uFmtErrorName[U_FMT_PARSE_ERROR_LIMIT - U_FMT_PARSE_ERROR_START] = { @@ -120,7 +121,6 @@ _uFmtErrorName[U_FMT_PARSE_ERROR_LIMIT - U_FMT_PARSE_ERROR_START] = { static const char * const _uBrkErrorName[U_BRK_ERROR_LIMIT - U_BRK_ERROR_START] = { - "U_BRK_ERROR_START", "U_BRK_INTERNAL_ERROR", "U_BRK_HEX_DIGITS_EXPECTED", "U_BRK_SEMICOLON_EXPECTED", @@ -139,7 +139,6 @@ _uBrkErrorName[U_BRK_ERROR_LIMIT - U_BRK_ERROR_START] = { static const char * const _uRegexErrorName[U_REGEX_ERROR_LIMIT - U_REGEX_ERROR_START] = { - "U_REGEX_ERROR_START", "U_REGEX_INTERNAL_ERROR", "U_REGEX_RULE_SYNTAX", "U_REGEX_INVALID_STATE", @@ -158,14 +157,14 @@ _uRegexErrorName[U_REGEX_ERROR_LIMIT - U_REGEX_ERROR_START] = { static const char * const _uIDNAErrorName[U_IDNA_ERROR_LIMIT - U_IDNA_ERROR_START] = { - "U_IDNA_ERROR_START", - "U_IDNA_PROHIBITED_ERROR", - "U_IDNA_UNASSIGNED_ERROR", - "U_IDNA_CHECK_BIDI_ERROR", - "U_IDNA_STD3_ASCII_RULES_ERROR", - "U_IDNA_ACE_PREFIX_ERROR", - "U_IDNA_VERIFICATION_ERROR", - "U_IDNA_LABEL_TOO_LONG_ERROR" + "U_STRINGPREP_PROHIBITED_ERROR", + "U_STRINGPREP_UNASSIGNED_ERROR", + "U_STRINGPREP_CHECK_BIDI_ERROR", + "U_IDNA_STD3_ASCII_RULES_ERROR", + "U_IDNA_ACE_PREFIX_ERROR", + "U_IDNA_VERIFICATION_ERROR", + "U_IDNA_LABEL_TOO_LONG_ERROR", + "U_IDNA_ZERO_LENGTH_LABEL_ERROR" }; U_CAPI const char * U_EXPORT2 @@ -182,7 +181,7 @@ u_errorName(UErrorCode code) { return _uBrkErrorName[code - U_BRK_ERROR_START]; } else if (U_REGEX_ERROR_START <= code && code < U_REGEX_ERROR_LIMIT) { return _uRegexErrorName[code - U_REGEX_ERROR_START]; - } else if( U_IDNA_ERROR_START <= code && code <= U_IDNA_ERROR_LIMIT) { + } else if(U_IDNA_ERROR_START <= code && code < U_IDNA_ERROR_LIMIT) { return _uIDNAErrorName[code - U_IDNA_ERROR_START]; } else { return "[BOGUS UErrorCode]"; diff --git a/icuSources/common/uvector.cpp b/icuSources/common/uvector.cpp index ca76a709..028ef39f 100644 --- a/icuSources/common/uvector.cpp +++ b/icuSources/common/uvector.cpp @@ -468,52 +468,5 @@ void UVector::sortedInsert(UHashTok tok, USortComparator *compare, UErrorCode& e } } -UStack::UStack(UErrorCode &status) : - UVector(status) -{ -} - -UStack::UStack(int32_t initialCapacity, UErrorCode &status) : - UVector(initialCapacity, status) -{ -} - -UStack::UStack(UObjectDeleter *d, UKeyComparator *c, UErrorCode &status) : - UVector(d, c, status) -{ -} - -UStack::UStack(UObjectDeleter *d, UKeyComparator *c, int32_t initialCapacity, UErrorCode &status) : - UVector(d, c, initialCapacity, status) -{ -} - -UStack::~UStack() {} - -void* UStack::pop(void) { - int32_t n = size() - 1; - void* result = 0; - if (n >= 0) { - result = elementAt(n); - removeElementAt(n); - } - return result; -} - -int32_t UStack::popi(void) { - int32_t n = size() - 1; - int32_t result = 0; - if (n >= 0) { - result = elementAti(n); - removeElementAt(n); - } - return result; -} - -int32_t UStack::search(void* obj) const { - int32_t i = indexOf(obj); - return (i >= 0) ? size() - i : i; -} - U_NAMESPACE_END diff --git a/icuSources/common/uvector.h b/icuSources/common/uvector.h index 7cc8f916..710f0dbc 100644 --- a/icuSources/common/uvector.h +++ b/icuSources/common/uvector.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -247,15 +247,11 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; @@ -320,19 +316,19 @@ public: int32_t push(int32_t i, UErrorCode &status); + /* + If the object o occurs as an item in this stack, + this method returns the 1-based distance from the top of the stack. + */ int32_t search(void* obj) const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; diff --git a/icuSources/common/uvectr32.h b/icuSources/common/uvectr32.h index 7d73e220..68a3ee2e 100644 --- a/icuSources/common/uvectr32.h +++ b/icuSources/common/uvectr32.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -69,7 +69,7 @@ public: UVector32(int32_t initialCapacity, UErrorCode &status); - ~UVector32(); + virtual ~UVector32(); /** * Assign this object to another (make this a copy of 'other'). @@ -163,15 +163,11 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; @@ -264,7 +260,7 @@ inline UBool UVector32::operator!=(const UVector32& other) { inline int32_t *UVector32::getBuffer() const { return elements; -}; +} // UStack inlines diff --git a/icuSources/common/wintz.c b/icuSources/common/wintz.c new file mode 100644 index 00000000..136eba9e --- /dev/null +++ b/icuSources/common/wintz.c @@ -0,0 +1,581 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINTZ.CPP +* +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#include "wintz.h" + +#include "cmemory.h" +#include "cstring.h" + +#include "unicode/ustring.h" + +# define WIN32_LEAN_AND_MEAN +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +#include + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +#define ICUID_STACK_BUFFER_SIZE 32 + +/* The layout of the Tzi value in the registry */ +typedef struct +{ + int32_t bias; + int32_t standardBias; + int32_t daylightBias; + SYSTEMTIME standardDate; + SYSTEMTIME daylightDate; +} TZI; + +typedef struct +{ + const char *icuid; + const char *winid; +} WindowsICUMap; + +typedef struct { + const char* winid; + const char* altwinid; +} WindowsZoneRemap; + +/** + * Various registry keys and key fragments. + */ +static const char CURRENT_ZONE_REGKEY[] = "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\"; +static const char STANDARD_NAME_REGKEY[] = "StandardName"; +static const char STANDARD_TIME_REGKEY[] = " Standard Time"; +static const char TZI_REGKEY[] = "TZI"; +static const char STD_REGKEY[] = "Std"; + +/** + * HKLM subkeys used to probe for the flavor of Windows. Note that we + * specifically check for the "GMT" zone subkey; this is present on + * NT, but on XP has become "GMT Standard Time". We need to + * discriminate between these cases. + */ +static const char* const WIN_TYPE_PROBE_REGKEY[] = { + /* WIN_9X_ME_TYPE */ + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Time Zones", + + /* WIN_NT_TYPE */ + "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\GMT" + + /* otherwise: WIN_2K_XP_TYPE */ +}; + +/** + * The time zone root subkeys (under HKLM) for different flavors of + * Windows. + */ +static const char* const TZ_REGKEY[] = { + /* WIN_9X_ME_TYPE */ + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Time Zones\\", + + /* WIN_NT_TYPE | WIN_2K_XP_TYPE */ + "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\" +}; + +/** + * Flavor of Windows, from our perspective. Not a real OS version, + * but rather the flavor of the layout of the time zone information in + * the registry. + */ +enum { + WIN_9X_ME_TYPE = 0, + WIN_NT_TYPE = 1, + WIN_2K_XP_TYPE = 2 +}; + +/* + * TODO: Sort on ICU ID? + * TODO: This data should come from ICU/CLDR... + */ +static const WindowsICUMap ZONE_MAP[] = { + {"Etc/GMT+12", "Dateline"}, /* S (GMT-12:00) International Date Line West */ + + {"Pacific/Apia", "Samoa"}, /* S (GMT-11:00) Midway Island, Samoa */ + + {"Pacific/Honolulu", "Hawaiian"}, /* S (GMT-10:00) Hawaii */ + + {"America/Anchorage", "Alaskan"}, /* D (GMT-09:00) Alaska */ + + {"America/Los_Angeles", "Pacific"}, /* D (GMT-08:00) Pacific Time (US & Canada); Tijuana */ + + {"America/Phoenix", "US Mountain"}, /* S (GMT-07:00) Arizona */ + {"America/Denver", "Mountain"}, /* D (GMT-07:00) Mountain Time (US & Canada) */ + {"America/Chihuahua", "Mexico Standard Time 2"}, /* D (GMT-07:00) Chihuahua, La Paz, Mazatlan */ + + {"America/Managua", "Central America"}, /* S (GMT-06:00) Central America */ + {"America/Regina", "Canada Central"}, /* S (GMT-06:00) Saskatchewan */ + {"America/Mexico_City", "Mexico"}, /* D (GMT-06:00) Guadalajara, Mexico City, Monterrey */ + {"America/Chicago", "Central"}, /* D (GMT-06:00) Central Time (US & Canada) */ + + {"America/Indianapolis", "US Eastern"}, /* S (GMT-05:00) Indiana (East) */ + {"America/Bogota", "SA Pacific"}, /* S (GMT-05:00) Bogota, Lima, Quito */ + {"America/New_York", "Eastern"}, /* D (GMT-05:00) Eastern Time (US & Canada) */ + + {"America/Caracas", "SA Western"}, /* S (GMT-04:00) Caracas, La Paz */ + {"America/Santiago", "Pacific SA"}, /* D (GMT-04:00) Santiago */ + {"America/Halifax", "Atlantic"}, /* D (GMT-04:00) Atlantic Time (Canada) */ + + {"America/St_Johns", "Newfoundland"}, /* D (GMT-03:30) Newfoundland */ + + {"America/Buenos_Aires", "SA Eastern"}, /* S (GMT-03:00) Buenos Aires, Georgetown */ + {"America/Godthab", "Greenland"}, /* D (GMT-03:00) Greenland */ + {"America/Sao_Paulo", "E. South America"}, /* D (GMT-03:00) Brasilia */ + + {"America/Noronha", "Mid-Atlantic"}, /* D (GMT-02:00) Mid-Atlantic */ + + {"Atlantic/Cape_Verde", "Cape Verde"}, /* S (GMT-01:00) Cape Verde Is. */ + {"Atlantic/Azores", "Azores"}, /* D (GMT-01:00) Azores */ + + {"Africa/Casablanca", "Greenwich"}, /* S (GMT) Casablanca, Monrovia */ + {"Europe/London", "GMT"}, /* D (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London */ + + {"Africa/Lagos", "W. Central Africa"}, /* S (GMT+01:00) West Central Africa */ + {"Europe/Berlin", "W. Europe"}, /* D (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna */ + {"Europe/Paris", "Romance"}, /* D (GMT+01:00) Brussels, Copenhagen, Madrid, Paris */ + {"Europe/Sarajevo", "Central European"}, /* D (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb */ + {"Europe/Belgrade", "Central Europe"}, /* D (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague */ + + {"Africa/Johannesburg", "South Africa"}, /* S (GMT+02:00) Harare, Pretoria */ + {"Asia/Jerusalem", "Israel"}, /* S (GMT+02:00) Jerusalem */ + {"Europe/Istanbul", "GTB"}, /* D (GMT+02:00) Athens, Istanbul, Minsk */ + {"Europe/Helsinki", "FLE"}, /* D (GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius */ + {"Africa/Cairo", "Egypt"}, /* D (GMT+02:00) Cairo */ + {"Europe/Bucharest", "E. Europe"}, /* D (GMT+02:00) Bucharest */ + + {"Africa/Nairobi", "E. Africa"}, /* S (GMT+03:00) Nairobi */ + {"Asia/Riyadh", "Arab"}, /* S (GMT+03:00) Kuwait, Riyadh */ + {"Europe/Moscow", "Russian"}, /* D (GMT+03:00) Moscow, St. Petersburg, Volgograd */ + {"Asia/Baghdad", "Arabic"}, /* D (GMT+03:00) Baghdad */ + + {"Asia/Tehran", "Iran"}, /* D (GMT+03:30) Tehran */ + + {"Asia/Muscat", "Arabian"}, /* S (GMT+04:00) Abu Dhabi, Muscat */ + {"Asia/Tbilisi", "Caucasus"}, /* D (GMT+04:00) Baku, Tbilisi, Yerevan */ + + {"Asia/Kabul", "Afghanistan"}, /* S (GMT+04:30) Kabul */ + + {"Asia/Karachi", "West Asia"}, /* S (GMT+05:00) Islamabad, Karachi, Tashkent */ + {"Asia/Yekaterinburg", "Ekaterinburg"}, /* D (GMT+05:00) Ekaterinburg */ + + {"Asia/Calcutta", "India"}, /* S (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi */ + + {"Asia/Katmandu", "Nepal"}, /* S (GMT+05:45) Kathmandu */ + + {"Asia/Colombo", "Sri Lanka"}, /* S (GMT+06:00) Sri Jayawardenepura */ + {"Asia/Dhaka", "Central Asia"}, /* S (GMT+06:00) Astana, Dhaka */ + {"Asia/Novosibirsk", "N. Central Asia"}, /* D (GMT+06:00) Almaty, Novosibirsk */ + + {"Asia/Rangoon", "Myanmar"}, /* S (GMT+06:30) Rangoon */ + + {"Asia/Bangkok", "SE Asia"}, /* S (GMT+07:00) Bangkok, Hanoi, Jakarta */ + {"Asia/Krasnoyarsk", "North Asia"}, /* D (GMT+07:00) Krasnoyarsk */ + + {"Australia/Perth", "W. Australia"}, /* S (GMT+08:00) Perth */ + {"Asia/Taipei", "Taipei"}, /* S (GMT+08:00) Taipei */ + {"Asia/Singapore", "Singapore"}, /* S (GMT+08:00) Kuala Lumpur, Singapore */ + {"Asia/Hong_Kong", "China"}, /* S (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi */ + {"Asia/Irkutsk", "North Asia East"}, /* D (GMT+08:00) Irkutsk, Ulaan Bataar */ + + {"Asia/Tokyo", "Tokyo"}, /* S (GMT+09:00) Osaka, Sapporo, Tokyo */ + {"Asia/Seoul", "Korea"}, /* S (GMT+09:00) Seoul */ + {"Asia/Yakutsk", "Yakutsk"}, /* D (GMT+09:00) Yakutsk */ + + {"Australia/Darwin", "AUS Central"}, /* S (GMT+09:30) Darwin */ + {"Australia/Adelaide", "Cen. Australia"}, /* D (GMT+09:30) Adelaide */ + + {"Pacific/Guam", "West Pacific"}, /* S (GMT+10:00) Guam, Port Moresby */ + {"Australia/Brisbane", "E. Australia"}, /* S (GMT+10:00) Brisbane */ + {"Asia/Vladivostok", "Vladivostok"}, /* D (GMT+10:00) Vladivostok */ + {"Australia/Hobart", "Tasmania"}, /* D (GMT+10:00) Hobart */ + {"Australia/Sydney", "AUS Eastern"}, /* D (GMT+10:00) Canberra, Melbourne, Sydney */ + + {"Asia/Magadan", "Central Pacific"}, /* S (GMT+11:00) Magadan, Solomon Is., New Caledonia */ + + {"Pacific/Fiji", "Fiji"}, /* S (GMT+12:00) Fiji, Kamchatka, Marshall Is. */ + {"Pacific/Auckland", "New Zealand"}, /* D (GMT+12:00) Auckland, Wellington */ + + {"Pacific/Tongatapu", "Tonga"}, /* S (GMT+13:00) Nuku'alofa */ + NULL, NULL +}; + +/** + * If a lookup fails, we attempt to remap certain Windows ids to + * alternate Windows ids. If the alternate listed here begins with + * '-', we use it as is (without the '-'). If it begins with '+', we + * append a " Standard Time" if appropriate. + */ +static const WindowsZoneRemap ZONE_REMAP[] = { + "Central European", "-Warsaw", + "Central Europe", "-Prague Bratislava", + "China", "-Beijing", + + "Greenwich", "+GMT", + "GTB", "+GFT", + "Arab", "+Saudi Arabia", + "SE Asia", "+Bangkok", + "AUS Eastern", "+Sydney", + NULL, NULL, +}; + +static int32_t fWinType = -1; + +static int32_t detectWindowsType() +{ + int32_t winType; + LONG result; + HKEY hkey; + + /* Detect the version of windows by trying to open a sequence of + probe keys. We don't use the OS version API because what we + really want to know is how the registry is laid out. + Specifically, is it 9x/Me or not, and is it "GMT" or "GMT + Standard Time". */ + for (winType = 0; winType < 2; winType += 1) { + result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, + WIN_TYPE_PROBE_REGKEY[winType], + 0, + KEY_QUERY_VALUE, + &hkey); + RegCloseKey(hkey); + + if (result == ERROR_SUCCESS) { + break; + } + } + + return winType; +} + +/* + * TODO: Binary search sorted ZONE_MAP... + * (u_detectWindowsTimeZone() needs them sorted by offset...) + */ +static const char *findWindowsZoneID(const UChar *icuid, int32_t length) +{ + char stackBuffer[ICUID_STACK_BUFFER_SIZE]; + char *buffer = stackBuffer; + const char *result = NULL; + int i; + + /* + * NOTE: >= because length doesn't include + * trailing null. + */ + if (length >= ICUID_STACK_BUFFER_SIZE) { + buffer = NEW_ARRAY(char, length + 1); + } + + u_UCharsToChars(icuid, buffer, length); + buffer[length] = '\0'; + + for (i = 0; ZONE_MAP[i].icuid != NULL; i += 1) { + if (uprv_strcmp(buffer, ZONE_MAP[i].icuid) == 0) { + result = ZONE_MAP[i].winid; + break; + } + } + + if (buffer != stackBuffer) { + DELETE_ARRAY(buffer); + } + + return result; +} + +static LONG openTZRegKey(HKEY *hkey, const char *winid) +{ + char subKeyName[96]; /* TODO: why 96?? */ + char *name; + LONG result; + + /* TODO: This isn't thread safe, but it's probably good enough. */ + if (fWinType < 0) { + fWinType = detectWindowsType(); + } + + uprv_strcpy(subKeyName, TZ_REGKEY[(fWinType == WIN_9X_ME_TYPE) ? 0 : 1]); + name = &subKeyName[strlen(subKeyName)]; + uprv_strcat(subKeyName, winid); + + if (fWinType != WIN_9X_ME_TYPE && + (winid[strlen(winid) - 1] != '2') && + !(fWinType == WIN_NT_TYPE && strcmp(winid, "GMT") == 0)) { + uprv_strcat(subKeyName, STANDARD_TIME_REGKEY); + } + + result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, + subKeyName, + 0, + KEY_QUERY_VALUE, + hkey); + + if (result != ERROR_SUCCESS) { + int i; + + /* If the primary lookup fails, try to remap the Windows zone + ID, according to the remapping table. */ + for (i=0; ZONE_REMAP[i].winid; i++) { + if (uprv_strcmp(winid, ZONE_REMAP[i].winid) == 0) { + uprv_strcpy(name, ZONE_REMAP[i].altwinid + 1); + if (*(ZONE_REMAP[i].altwinid) == '+' && fWinType != WIN_9X_ME_TYPE) { + uprv_strcat(subKeyName, STANDARD_TIME_REGKEY); + } + return RegOpenKeyEx(HKEY_LOCAL_MACHINE, + subKeyName, + 0, + KEY_QUERY_VALUE, + hkey); + } + } + } + + return result; +} + +static LONG getTZI(const char *winid, TZI *tzi) +{ + DWORD cbData = sizeof(TZI); + LONG result; + HKEY hkey; + + result = openTZRegKey(&hkey, winid); + + if (result == ERROR_SUCCESS) { + result = RegQueryValueEx(hkey, + TZI_REGKEY, + NULL, + NULL, + (LPBYTE)tzi, + &cbData); + + } + + RegCloseKey(hkey); + + return result; +} + +U_CAPI UBool U_EXPORT2 +uprv_getWindowsTimeZoneInfo(TIME_ZONE_INFORMATION *zoneInfo, const UChar *icuid, int32_t length) +{ + const char *winid; + TZI tzi; + LONG result; + + winid = findWindowsZoneID(icuid, length); + + if (winid != NULL) { + result = getTZI(winid, &tzi); + + if (result == ERROR_SUCCESS) { + zoneInfo->Bias = tzi.bias; + zoneInfo->DaylightBias = tzi.daylightBias; + zoneInfo->StandardBias = tzi.standardBias; + zoneInfo->DaylightDate = tzi.daylightDate; + zoneInfo->StandardDate = tzi.standardDate; + + return TRUE; + } + } + + return FALSE; +} + +/* + This code attempts to detect the Windows time zone, as set in the + Windows Date and Time control panel. It attempts to work on + multiple flavors of Windows (9x, Me, NT, 2000, XP) and on localized + installs. It works by directly interrogating the registry and + comparing the data there with the data returned by the + GetTimeZoneInformation API, along with some other strategies. The + registry contains time zone data under one of two keys (depending on + the flavor of Windows): + + HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\ + HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\ + + Under this key are several subkeys, one for each time zone. These + subkeys are named "Pacific" on Win9x/Me and "Pacific Standard Time" + on WinNT/2k/XP. There are some other wrinkles; see the code for + details. The subkey name is NOT LOCALIZED, allowing us to support + localized installs. + + Under the subkey are data values. We care about: + + Std Standard time display name, localized + TZI Binary block of data + + The TZI data is of particular interest. It contains the offset, two + more offsets for standard and daylight time, and the start and end + rules. This is the same data returned by the GetTimeZoneInformation + API. The API may modify the data on the way out, so we have to be + careful, but essentially we do a binary comparison against the TZI + blocks of various registry keys. When we find a match, we know what + time zone Windows is set to. Since the registry key is not + localized, we can then translate the key through a simple table + lookup into the corresponding ICU time zone. + + This strategy doesn't always work because there are zones which + share an offset and rules, so more than one TZI block will match. + For example, both Tokyo and Seoul are at GMT+9 with no DST rules; + their TZI blocks are identical. For these cases, we fall back to a + name lookup. We attempt to match the display name as stored in the + registry for the current zone to the display name stored in the + registry for various Windows zones. By comparing the registry data + directly we avoid conversion complications. + + Author: Alan Liu + Since: ICU 2.6 + Based on original code by Carl Brown +*/ + +/** + * Main Windows time zone detection function. Returns the Windows + * time zone, translated to an ICU time zone, or NULL upon failure. + */ +U_CAPI const char* U_EXPORT2 +uprv_detectWindowsTimeZone() { + LONG result; + HKEY hkey; + TZI tziKey; + TZI tziReg; + TIME_ZONE_INFORMATION apiTZI; + int firstMatch, lastMatch; + int j; + + /* Obtain TIME_ZONE_INFORMATION from the API, and then convert it + to TZI. We could also interrogate the registry directly; we do + this below if needed. */ + uprv_memset(&apiTZI, 0, sizeof(apiTZI)); + uprv_memset(&tziKey, 0, sizeof(tziKey)); + uprv_memset(&tziReg, 0, sizeof(tziReg)); + GetTimeZoneInformation(&apiTZI); + tziKey.bias = apiTZI.Bias; + uprv_memcpy((char *)&tziKey.standardDate, (char*)&apiTZI.StandardDate, + sizeof(apiTZI.StandardDate)); + uprv_memcpy((char *)&tziKey.daylightDate, (char*)&apiTZI.DaylightDate, + sizeof(apiTZI.DaylightDate)); + + /* For each zone that can be identified by Offset+Rules, see if we + have a match. Continue scanning after finding a match, + recording the index of the first and the last match. We have + to do this because some zones are not unique under + Offset+Rules. */ + firstMatch = -1; + lastMatch = -1; + for (j=0; ZONE_MAP[j].icuid; j++) { + result = getTZI(ZONE_MAP[j].winid, &tziReg); + + if (result == ERROR_SUCCESS) { + /* Assume that offsets are grouped together, and bail out + when we've scanned everything with a matching + offset. */ + if (firstMatch >= 0 && tziKey.bias != tziReg.bias) { + break; + } + + /* Windows alters the DaylightBias in some situations. + Using the bias and the rules suffices, so overwrite + these unreliable fields. */ + tziKey.standardBias = tziReg.standardBias; + tziKey.daylightBias = tziReg.daylightBias; + + if (uprv_memcmp((char *)&tziKey, (char*)&tziReg, sizeof(tziKey)) == 0) { + if (firstMatch < 0) { + firstMatch = j; + } + + lastMatch = j; + } + } + } + + /* This should never happen; if it does it means our table doesn't + match Windows AT ALL, perhaps because this is post-XP? */ + if (firstMatch < 0) { + return NULL; + } + + if (firstMatch != lastMatch) { + char stdName[32]; + DWORD stdNameSize; + char stdRegName[64]; + DWORD stdRegNameSize; + + /* Offset+Rules lookup yielded >= 2 matches. Try to match the + localized display name. Get the name from the registry + (not the API). This avoids conversion issues. Use the + standard name, since Windows modifies the daylight name to + match the standard name if there is no DST. */ + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + CURRENT_ZONE_REGKEY, + 0, + KEY_QUERY_VALUE, + &hkey) == ERROR_SUCCESS) + { + stdNameSize = sizeof(stdName); + result = RegQueryValueEx(hkey, + (LPTSTR)STANDARD_NAME_REGKEY, + NULL, + NULL, + (LPBYTE)stdName, + &stdNameSize); + RegCloseKey(hkey); + + /* + * Scan through the Windows time zone data in the registry + * again (just the range of zones with matching TZIs) and + * look for a standard display name match. + */ + for (j = firstMatch; j <= lastMatch; j += 1) { + stdRegNameSize = sizeof(stdRegName); + result = openTZRegKey(&hkey, ZONE_MAP[j].winid); + + if (result == ERROR_SUCCESS) { + result = RegQueryValueEx(hkey, + (LPTSTR)STD_REGKEY, + NULL, + NULL, + (LPBYTE)stdRegName, + &stdRegNameSize); + } + + RegCloseKey(hkey); + + if (result == ERROR_SUCCESS && + stdRegNameSize == stdNameSize && + uprv_memcmp(stdName, stdRegName, stdNameSize) == 0) + { + firstMatch = j; /* record the match */ + break; + } + } + } else { + RegCloseKey(hkey); /* should never get here */ + } + } + + return ZONE_MAP[firstMatch].icuid; +} + +#endif /* #ifdef U_WINDOWS */ diff --git a/icuSources/common/wintz.h b/icuSources/common/wintz.h new file mode 100644 index 00000000..b8af862f --- /dev/null +++ b/icuSources/common/wintz.h @@ -0,0 +1,37 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINTZ.H +* +******************************************************************************** +*/ + +#ifndef __WINTZ +#define __WINTZ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +/** + * \file + * \brief C API: Utilities for dealing w/ Windows time zones. + */ + +U_CDECL_BEGIN +/* Forward declarations for Windows types... */ +typedef struct _TIME_ZONE_INFORMATION TIME_ZONE_INFORMATION; +U_CDECL_END + +U_CAPI UBool U_EXPORT2 +uprv_getWindowsTimeZoneInfo(TIME_ZONE_INFORMATION *zoneInfo, const UChar *icuid, int32_t length); + +U_CAPI const char* U_EXPORT2 +uprv_detectWindowsTimeZone(); + +#endif /* #ifdef U_WINDOWS */ + +#endif /* __WINTZ */ diff --git a/icuSources/config.guess b/icuSources/config.guess index dff9e481..7924ac07 100644 --- a/icuSources/config.guess +++ b/icuSources/config.guess @@ -1,9 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. -timestamp='2001-09-04' +timestamp='2006-06-06' # 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 @@ -17,15 +18,18 @@ timestamp='2001-09-04' # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# 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. -# Written by Per Bothner . -# Please send patches to . + +# Originally written by Per Bothner . +# Please send patches to . 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 @@ -52,7 +56,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +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 @@ -65,11 +69,11 @@ Try \`$me --help' for more information." while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; + echo "$timestamp" ; exit ;; --version | -v ) - echo "$version" ; exit 0 ;; + echo "$version" ; exit ;; --help | --h* | -h ) - echo "$usage"; exit 0 ;; + echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. @@ -87,30 +91,42 @@ if test $# != 0; then exit 1 fi +trap 'exit 1' 1 2 15 -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; 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. -# CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. -set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c ; - for c in cc gcc c89 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; - if test $? = 0 ; then +# 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 ; - rm -f $dummy.c $dummy.o $dummy.rel ; 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' +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) @@ -127,29 +143,30 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) - # Netbsd (nbsd) targets should (where applicable) match one or + # 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. - # Determine the machine/vendor (is the vendor relevant). - case "${UNAME_MACHINE}" in - amiga) machine=m68k-unknown ;; - arm32) machine=arm-unknown ;; - atari*) machine=m68k-atari ;; - sun3*) machine=m68k-sun ;; - mac68k) machine=m68k-apple ;; - macppc) machine=powerpc-apple ;; - hp3[0-9][05]) machine=m68k-hp ;; - ibmrt|romp-ibm) machine=romp-ibm ;; - *) machine=${UNAME_MACHINE}-unknown ;; + # + # 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}" in - i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) + 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 @@ -166,120 +183,128 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # 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 0 ;; + 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:*:*) - if test $UNAME_RELEASE = "V4.0"; then + case $UNAME_RELEASE in + *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi + ;; + *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. - cat <$dummy.s - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - eval $set_cc_for_build - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - 2-1307) - UNAME_MACHINE="alphaev68" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; + 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 0 ;; + exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 - exit 0 ;; + exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 - exit 0;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - arc64:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hkmips:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; *:OS/390:*:*) echo i370-ibm-openedition - exit 0 ;; + 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 0;; + 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 0;; + 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 @@ -287,25 +312,32 @@ EOF else echo pyramid-pyramid-bsd fi - exit 0 ;; + exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 - exit 0 ;; + 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 0 ;; + exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + 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 0 ;; + exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) @@ -314,12 +346,12 @@ EOF esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; + exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; + exit ;; sun*:*:4.2BSD:*) - UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + 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) @@ -329,16 +361,10 @@ EOF echo sparc-sun-sunos${UNAME_RELEASE} ;; esac - exit 0 ;; + exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - sparc*:NetBSD:*) - echo `uname -p`-unknown-netbsd${UNAME_RELEASE} - exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + 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 @@ -349,49 +375,40 @@ EOF # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; + exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 - exit 0 ;; + exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; + exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -415,27 +432,33 @@ EOF exit (-1); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + $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 0 ;; + exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax - exit 0 ;; + 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 0 ;; + exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 - exit 0 ;; + exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 - exit 0 ;; + exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` @@ -451,29 +474,29 @@ EOF else echo i586-dg-dgux${UNAME_RELEASE} fi - exit 0 ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 - exit 0 ;; + exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 - exit 0 ;; + exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd - exit 0 ;; + exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; + 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 0 ;; # Note that: echo "'`uname -s`'" gives '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 0 ;; + exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` @@ -481,7 +504,7 @@ EOF IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build @@ -496,17 +519,20 @@ EOF exit(0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 + 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 0 ;; + exit ;; *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + 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 @@ -518,38 +544,36 @@ EOF IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:*:*) echo rs6000-ibm-aix - exit 0 ;; + exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 - exit 0 ;; + exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 + exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx - exit 0 ;; + exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 - exit 0 ;; + exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd - exit 0 ;; + exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 - exit 0 ;; + 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]) - case "${HPUX_REV}" in - 11.[0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + 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 @@ -558,13 +582,13 @@ EOF 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 ;; - esac - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include @@ -597,17 +621,37 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi - rm -f $dummy.c $dummy - fi ;; + (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 0 ;; + exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -635,158 +679,234 @@ EOF exit (0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 - exit 0 ;; + exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd - exit 0 ;; + exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd - exit 0 ;; + exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix - exit 0 ;; + exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf - exit 0 ;; + exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf - exit 0 ;; + exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi - exit 0 ;; + exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites - exit 0 ;; - hppa*:OpenBSD:*:*) - echo hppa-unknown-openbsd - exit 0 ;; + exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit 0 ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit 0 ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit 0 ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + 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 0 ;; + exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; + 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 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + 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 0 ;; + exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-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 0 ;; + exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; + 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 i386-pc-interix - exit 0 ;; + echo i586-pc-interix + exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin - exit 0 ;; + exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; *:GNU:*:*) + # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; + 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 0 ;; + exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; + avr32*: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 - exit 0 ;; + 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 0 ;; + exit ;; mips:Linux:*:*) - case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in - big) echo mips-unknown-linux-gnu && exit 0 ;; - little) echo mipsel-unknown-linux-gnu && exit 0 ;; - esac + 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 0 ;; + exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu - exit 0 ;; + exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; @@ -800,7 +920,7 @@ EOF 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 0 ;; + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -808,27 +928,34 @@ EOF PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac - exit 0 ;; + exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu - exit 0 ;; + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu - exit 0 ;; + 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. - ld_supported_targets=`cd /; ld --help 2>&1 \ + # 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: *// @@ -840,52 +967,58 @@ EOF ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; + exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; + 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 0 ;; + exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build - cat >$dummy.c < -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __ELF__ -# ifdef __GLIBC__ -# if __GLIBC__ >= 2 - printf ("%s-pc-linux-gnu\n", argv[1]); -# else - printf ("%s-pc-linux-gnulibc1\n", argv[1]); -# endif -# else - printf ("%s-pc-linux-gnulibc1\n", argv[1]); -# endif -#else - printf ("%s-pc-linux-gnuaout\n", argv[1]); -#endif - return 0; -} + sed 's/^ //' << EOF >$dummy.c + #include + #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(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + 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 0 ;; + 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... @@ -893,7 +1026,27 @@ EOF # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; + 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 @@ -901,99 +1054,100 @@ EOF else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi - exit 0 ;; - i*86:*:5:[78]*) + 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 0 ;; + exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + 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|egrep '^Machine.*Pent ?II' >/dev/null) \ + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + (/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 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; + 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 0 ;; + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 - exit 0 ;; + exit ;; paragon:*:*:*) echo i860-intel-osf1 - exit 0 ;; + 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 0 ;; + exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + 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 0 + && { 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 0 ;; + && { 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 0 ;; + && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; + exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` @@ -1001,82 +1155,98 @@ EOF else echo ns32k-sni-sysv fi - exit 0 ;; + exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 - exit 0 ;; + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 - exit 0 ;; + exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 - exit 0 ;; + 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 0 ;; + exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; + exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 - exit 0 ;; + 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 0 ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos - exit 0 ;; + exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos - exit 0 ;; + exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos - exit 0 ;; + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; + 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]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx - exit 0 ;; + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; *:QNX:*:4*) echo i386-pc-qnx - exit 0 ;; - NSR-[KW]:NONSTOP_KERNEL:*:*) + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; + exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux - exit 0 ;; + exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv - exit 0 ;; + exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 @@ -1087,36 +1257,47 @@ EOF UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - 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 0 ;; + exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 - exit 0 ;; + exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex - exit 0 ;; + exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 - exit 0 ;; + exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 - exit 0 ;; + exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 - exit 0 ;; + exit ;; *:ITS:*:*) echo pdp10-unknown-its - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; + 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 @@ -1148,7 +1329,7 @@ main () #endif #if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); + printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) @@ -1237,12 +1418,12 @@ main () } EOF -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy +$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 0; } +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) @@ -1251,22 +1432,22 @@ then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd - exit 0 ;; + exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; c34*) echo c34-convex-bsd - exit 0 ;; + exit ;; c38*) echo c38-convex-bsd - exit 0 ;; + exit ;; c4*) echo c4-convex-bsd - exit 0 ;; + exit ;; esac fi @@ -1277,7 +1458,9 @@ 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 - ftp://ftp.gnu.org/pub/gnu/config/ + 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 diff --git a/icuSources/config.sub b/icuSources/config.sub index 0e77b384..70584b00 100644 --- a/icuSources/config.sub +++ b/icuSources/config.sub @@ -1,9 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. -timestamp='2001-09-07' +timestamp='2006-06-06' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -21,15 +22,17 @@ timestamp='2001-09-07' # # 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., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - +# 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 . + +# Please send patches to . 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. @@ -69,7 +72,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +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 @@ -82,11 +85,11 @@ Try \`$me --help' for more information." while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; + echo "$timestamp" ; exit ;; --version | -v ) - echo "$version" ; exit 0 ;; + echo "$version" ; exit ;; --help | --h* | -h ) - echo "$usage"; exit 0 ;; + echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. @@ -98,7 +101,7 @@ while test $# -gt 0 ; do *local*) # First pass through any local machine types. echo $1 - exit 0;; + exit ;; * ) break ;; @@ -117,7 +120,9 @@ esac # 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* | storm-chaos* | os2-emx* | windows32-*) + 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/'` ;; @@ -143,7 +148,7 @@ case $os in -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) + -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; @@ -168,6 +173,10 @@ case $os in -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/'` @@ -184,6 +193,10 @@ case $os in # 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/'` @@ -217,10 +230,6 @@ case $os in basic_machine=m68k-atari os=-mint ;; - -as400*) - os= - basic_machine=as400 - ;; esac # Decode aliases for certain CPU-COMPANY combinations. @@ -230,32 +239,52 @@ case $basic_machine in 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | 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 | avr32 \ + | bfin \ | c4x | clipper \ - | d10v | d30v | dsp16xx \ - | fr30 \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ - | m32r | m68000 | m68k | m88k | mcore \ - | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el | mips64vr4300 \ - | mips64vr4300el | mips64vr5000 | mips64vr5000el \ - | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ - | mipsisa32 \ + | ip2k | iq2000 \ + | m32c | 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 \ - | openrisc \ + | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ - | s390 | s390x | as400 \ - | sh | sh[34] | sh[34]eb | shbe | shle \ - | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ - | stormy16 | strongarm \ - | tahoe | thumb | tic80 | tron \ - | v850 \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ | we32k \ - | x86 | xscale \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; @@ -266,6 +295,9 @@ case $basic_machine in ;; 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 @@ -282,38 +314,61 @@ case $basic_machine in 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alphapca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armv*-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c54x-* \ - | clipper-* | cray2-* | cydra-* \ - | d10v-* | d30v-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | fx80-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ - | m32r-* \ - | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ - | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ - | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ - | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ + | ip2k-* | iq2000-* \ + | m32c-* | 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-* \ - | s390-* | s390x-* | os400-* \ - | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ - | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \ - | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ - | v850-* | vax-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ | we32k-* \ - | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; @@ -333,6 +388,9 @@ case $basic_machine in basic_machine=a29k-amd os=-udi ;; + abacus) + basic_machine=abacus-unknown + ;; adobe68k) basic_machine=m68010-adobe os=-scout @@ -347,6 +405,12 @@ case $basic_machine in 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 @@ -378,6 +442,10 @@ case $basic_machine in basic_machine=ns32k-sequent os=-dynix ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -398,30 +466,45 @@ case $basic_machine in basic_machine=c38-convex os=-bsd ;; - cray | ymp) - basic_machine=ymp-cray + cray | j90) + basic_machine=j90-cray os=-unicos ;; - cray2) - basic_machine=cray2-cray - os=-unicos + craynv) + basic_machine=craynv-cray + os=-unicosmp ;; - [cjt]90) - basic_machine=${basic_machine}-cray - os=-unicos + 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 @@ -430,6 +513,10 @@ case $basic_machine in basic_machine=m88k-motorola os=-sysv3 ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx @@ -602,32 +689,27 @@ case $basic_machine in basic_machine=m68k-atari os=-mint ;; - mipsel*-linux*) - basic_machine=mipsel-unknown - os=-linux-gnu - ;; - mips*-linux*) - basic_machine=mips-unknown - os=-linux-gnu - ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; 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 @@ -703,6 +785,13 @@ case $basic_machine in 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 @@ -725,49 +814,61 @@ case $basic_machine in pbb) basic_machine=m68k-tti ;; - pc532 | pc532-*) + pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5 | k5 | k6 | nexgen) + 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) + pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; - pentiumii | pentium2) + pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-*) + 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-*) + 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/^[^-]*-//'` ;; @@ -778,6 +879,10 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -788,10 +893,26 @@ case $basic_machine in 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 ;; @@ -799,7 +920,10 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; - sparclite-wrs) + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; @@ -866,22 +990,42 @@ case $basic_machine in os=-dynix ;; t3e) - basic_machine=t3e-cray + 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 @@ -903,8 +1047,8 @@ case $basic_machine in os=-vms ;; vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; + basic_machine=f301-fujitsu + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -925,25 +1069,21 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; - windows32) - basic_machine=i386-pc - os=-windows32-msvcrt - ;; - xmp) - basic_machine=xmp-cray - os=-unicos + xbox) + basic_machine=i686-pc + os=-mingw32 ;; - xps | xps100) + xps | xps100) basic_machine=xps100-honeywell ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; - as400) - basic_machine=as400 - os=-os400 - ;; none) basic_machine=none-none os=-none @@ -960,16 +1100,12 @@ case $basic_machine in op60c) basic_machine=hppa1.1-oki ;; - mips) - if [ x$os = x-linux-gnu ]; then - basic_machine=mips-unknown - else - basic_machine=mips-mips - fi - ;; romp) basic_machine=romp-ibm ;; + mmix) + basic_machine=mmix-knuth + ;; rs6000) basic_machine=rs6000-ibm ;; @@ -986,13 +1122,13 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sh3 | sh4 | sh3eb | sh4eb) + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; - cydra) + cydra) basic_machine=cydra-cydrome ;; orion) @@ -1007,14 +1143,6 @@ case $basic_machine in pmac | pmac-mpw) basic_machine=powerpc-apple ;; - c4x*) - basic_machine=c4x-none - os=-coff - ;; - as400*) - basic_machine=as400 - os=-os400 - ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; @@ -1070,17 +1198,23 @@ case $os in | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -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* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -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*) + | -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*) @@ -1092,16 +1226,21 @@ case $os in ;; esac ;; + -nto-qnx*) + ;; -nto*) - os=-nto-qnx + os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -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|'` ;; @@ -1114,6 +1253,9 @@ case $os in -opened*) os=-openedition ;; + -os400*) + os=-os400 + ;; -wince*) os=-wince ;; @@ -1123,9 +1265,6 @@ case $os in -osf*) os=-osf ;; - -os400*) - os=-os400 - ;; -utek*) os=-bsd ;; @@ -1135,14 +1274,23 @@ case $os in -acis*) os=-aos ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; + -nova*) + os=-rtmk-nova + ;; -ns2 ) - os=-nextstep2 + os=-nextstep2 ;; -nsk*) os=-nsk @@ -1154,6 +1302,9 @@ case $os in -sinix*) os=-sysv4 ;; + -tpf*) + os=-tpf + ;; -triton*) os=-sysv3 ;; @@ -1181,8 +1332,17 @@ case $os in -xenix) os=-xenix ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe ;; -none) ;; @@ -1206,6 +1366,9 @@ else # system, and we'll never get to this point. case $basic_machine in + spu-*) + os=-elf + ;; *-acorn) os=-riscix1.2 ;; @@ -1215,10 +1378,14 @@ case $basic_machine in arm*-semi) os=-aout ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; - pdp11-*) + pdp11-*) os=-none ;; *-dec | vax-*) @@ -1245,6 +1412,9 @@ case $basic_machine in mips*-*) os=-elf ;; + or32-*) + os=-coff + ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; @@ -1254,9 +1424,15 @@ case $basic_machine in *-be) os=-beos ;; + *-haiku) + os=-haiku + ;; *-ibm) os=-aix ;; + *-knuth) + os=-mmixware + ;; *-wec) os=-proelf ;; @@ -1308,19 +1484,19 @@ case $basic_machine in *-next) os=-nextstep3 ;; - *-gould) + *-gould) os=-sysv ;; - *-highlevel) + *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; - *-sgi) + *-sgi) os=-irix ;; - *-siemens) + *-siemens) os=-sysv4 ;; *-masscomp) @@ -1389,10 +1565,16 @@ case $basic_machine in -mvs* | -opened*) vendor=ibm ;; + -os400*) + vendor=ibm + ;; -ptx*) vendor=sequent ;; - -vxsim* | -vxworks*) + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) @@ -1416,7 +1598,7 @@ case $basic_machine in esac echo $basic_machine$os -exit 0 +exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) diff --git a/icuSources/config/Makefile.inc.in b/icuSources/config/Makefile.inc.in index b8ce6a53..172ff20e 100644 --- a/icuSources/config/Makefile.inc.in +++ b/icuSources/config/Makefile.inc.in @@ -1,6 +1,6 @@ ## -*-makefile-*- #****************************************************************************** -# Copyright (C) 1999-2004, International Business Machines +# Copyright (C) 1999-2005, International Business Machines # Corporation and others. All Rights Reserved. #****************************************************************************** # This Makefile.inc is designed to be included into projects which make use @@ -79,6 +79,18 @@ endif #SH# ;; #SH#esac +# Name flexibility for the library naming scheme. Any modifications should +# be made in the mh- file for the specific platform. +DATA_STUBNAME = data +COMMON_STUBNAME = uc +I18N_STUBNAME = i18n +LAYOUT_STUBNAME = le +LAYOUTEX_STUBNAME = lx +IO_STUBNAME = io +TOOLUTIL_STUBNAME = tu +CTESTFW_STUBNAME = test + + ### To link your application with ICU: # 1. use LDFLAGS, CFLAGS, etc from above @@ -89,8 +101,8 @@ endif # - $(ICULIBS_ICUIO) - ICU stdio equivalent library ICULIBS_COMMON = -l$(ICUPREFIX)uc$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) -ICULIBS_DATA = -l$(ICUPREFIX)data$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) -ICULIBS_I18N = -l$(ICUPREFIX)i18n$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) +ICULIBS_DATA = -l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) +ICULIBS_I18N = -l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) ICULIBS_TOOLUTIL = -l$(ICUPREFIX)tu$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) ICULIBS_CTESTFW = -l$(ICUPREFIX)ctestfw$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) ICULIBS_ICUIO = -l$(ICUPREFIX)io$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION) @@ -153,6 +165,9 @@ platform = @platform@ ################################################################## AIX_SHLIB = @AIX_SHLIB@ AR = @AR@ +# initial tab keeps it out of the shell version. + ARFLAGS := @ARFLAGS@ $(ARFLAGS) +#SH#ARFLAGS="@ARFLAGS@ ${ARFLAGS}" CC = @CC@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -203,6 +218,7 @@ pkgdatadir = $(datadir)/$(PACKAGE)$(ICULIBSUFFIX)/$(VERSION) pkglibdir = $(libdir)/$(PACKAGE)$(ICULIBSUFFIX)/$(VERSION) # The basename of the ICU data file (i.e. icudt21b ) +ICUDATA_CHAR = @ICUDATA_CHAR@ ICUDATA_NAME = icudt@LIB_VERSION_MAJOR@@ICUDATA_CHAR@ # Defaults for pkgdata's mode and directories diff --git a/icuSources/config/icu-config-bottom b/icuSources/config/icu-config-bottom index 2f88eab0..fa1dcd54 100644 --- a/icuSources/config/icu-config-bottom +++ b/icuSources/config/icu-config-bottom @@ -1,6 +1,6 @@ ## -*-sh-*- ## BEGIN of icu-config-bottom. -## Copyright (c) 2002-2004, International Business Machines Corporation and +## Copyright (c) 2002-2005, International Business Machines Corporation and ## others. All Rights Reserved. ICUUC_FILE=${libdir}/${ICULIBS_COMMON_LIB_NAME} @@ -14,7 +14,7 @@ fi ## The actual code of icu-config goes here. -ME=`basename $0` +ME=`basename "$0"` allflags() { diff --git a/icuSources/config/make2sh.sed b/icuSources/config/make2sh.sed index 92a9a833..b9cd370b 100644 --- a/icuSources/config/make2sh.sed +++ b/icuSources/config/make2sh.sed @@ -1,6 +1,7 @@ -# Copyright (C) 1999-2004, International Business Machines Corporation and others. All Rights Reserved. +# Copyright (C) 1999-2006, International Business Machines Corporation and others. All Rights Reserved. s%^\([a-zA-Z\._-]*\)[ ]*+=%\1=$(\1) % s%^[A-Z]*_SO_TARG*%## &% +s%^SHARED_OBJECT.*%## &% s%^LD_SONAME.*%## &% s%$(\([^\)]*\))%${\1}%g s%^ %#M# % diff --git a/icuSources/config/mh-aix b/icuSources/config/mh-aix index c09e2082..755a8a53 100644 --- a/icuSources/config/mh-aix +++ b/icuSources/config/mh-aix @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Aix-specific setup (for xlC) -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## ## Please note: AIX does NOT have library versioning per se (there is no 'SONAME' capability). @@ -109,7 +109,6 @@ STATIC_O = o ## BIR - bind with internal references [so app data and icu data doesn't collide] BIR_LDFLAGS= -E$(NAME).map -bnoexpall -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES BIR_DEPS= $(NAME).map diff --git a/icuSources/config/mh-aix-gcc b/icuSources/config/mh-aix-gcc index a5d4e911..79e68072 100644 --- a/icuSources/config/mh-aix-gcc +++ b/icuSources/config/mh-aix-gcc @@ -1,5 +1,5 @@ ## -*-makefile-*- -## Copyright (c) 2003-2004 IBM, Ken Foskey, and others. All rights reserved. +## Copyright (c) 2003-2006 IBM, Ken Foskey, and others. All rights reserved. ## ## Aix-specific setup (for gcc) ## @@ -29,6 +29,9 @@ LD_RPATH_PRE= ## enable the shared lib loader LDFLAGS += -Wl,-bbigtoc +## These are the library specific LDFLAGS +LDFLAGSICUDT=-nodefaultlibs -nostdlib + ## We need to delete things prior to linking, or else we'll get ## SEVERE ERROR: output file in use .. on AIX. ## But, shell script version should NOT delete target as we don't @@ -54,6 +57,9 @@ endif ## Compiler switch to embed a library name. Not present on AIX. LD_SONAME = +## The type of assembly needed when pkgdata is used for generating shared libraries. +GENCCODE_ASSEMBLY=-a xlc + ## Shared object suffix SO= a A= a @@ -108,9 +114,6 @@ STATIC_O = o # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-bE:$(NAME).map,-bnoexpall -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= $(NAME).map diff --git a/icuSources/config/mh-aix-va b/icuSources/config/mh-aix-va index c39ccee9..39faf459 100644 --- a/icuSources/config/mh-aix-va +++ b/icuSources/config/mh-aix-va @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Aix-specific setup (for Visual Age 5+) -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -43,10 +43,6 @@ LD_RPATH_PRE= ## Environment variable to set a runtime search path LDLIBRARYPATH_ENVVAR = LIBPATH -## Override Versioned target for a shared library. -FINAL_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO) -MIDDLE_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO) - # The following is for Makefile.inc's use. ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR) @@ -61,15 +57,22 @@ LD_SONAME = GENCCODE_ASSEMBLY=-a xlc ## Shared object suffix -#SO= so +SOBJ= so # without the -brtl option, the library names use .a. AIX is funny that way. SO= a ## Non-shared intermediate object suffix STATIC_O = o +## Override Versioned target for a shared library. +FINAL_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO) +MIDDLE_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO) +SHARED_OBJECT = $(notdir $(FINAL_SO_TARGET:.$(SO)=.$(SOBJ))) + ## Build archive from shared object %.a : %.so $(AR) $(ARFLAGS) $@ $< +$(LIBDIR)/%.a : %.so + $(AR) $(ARFLAGS) $@ $< ## Build import list from export list %.e : %.exp diff --git a/icuSources/config/mh-alpha-linux-cc b/icuSources/config/mh-alpha-linux-cc index 5020add6..f05632ed 100644 --- a/icuSources/config/mh-alpha-linux-cc +++ b/icuSources/config/mh-alpha-linux-cc @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Alpha-Linux-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -13,8 +13,8 @@ SHAREDLIBCXXFLAGS = -fPIC SHAREDLIBCPPFLAGS = -DPIC ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT +LIBCPPFLAGS = # The tests need complete IEEE floating point support CFLAGS += -ieee @@ -78,9 +78,6 @@ STATIC_O = ao # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-Bsymbolic -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= diff --git a/icuSources/config/mh-alpha-linux-gcc b/icuSources/config/mh-alpha-linux-gcc index b2133103..ee5f9094 100644 --- a/icuSources/config/mh-alpha-linux-gcc +++ b/icuSources/config/mh-alpha-linux-gcc @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Linux-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -13,8 +13,8 @@ SHAREDLIBCXXFLAGS = -fPIC SHAREDLIBCPPFLAGS = -DPIC ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT +LIBCPPFLAGS = # The tests need complete IEEE floating point support CFLAGS += -mieee @@ -72,9 +72,6 @@ GENCCODE_ASSEMBLY=-a gcc # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-Bsymbolic -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= diff --git a/icuSources/config/mh-alpha-osf b/icuSources/config/mh-alpha-osf index 5ec4c83c..bf632591 100644 --- a/icuSources/config/mh-alpha-osf +++ b/icuSources/config/mh-alpha-osf @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Alpha-OSF-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -13,8 +13,8 @@ SHAREDLIBCXXFLAGS = SHAREDLIBCPPFLAGS = ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT -pthread +LIBCPPFLAGS = # The tests need complete IEEE floating point support CFLAGS += -ieee @@ -78,9 +78,6 @@ STATIC_O = ao # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-Bsymbolic -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= diff --git a/icuSources/config/mh-beos b/icuSources/config/mh-beos index b32e2b3b..0e5691be 100644 --- a/icuSources/config/mh-beos +++ b/icuSources/config/mh-beos @@ -1,6 +1,6 @@ ## -*-makefile-*- ## BeOS-specific setup -## Copyright (c) 2003-2004, International Business Machines Corporation and +## Copyright (c) 2003-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## ## Original author: Andrew Bachmann @@ -96,9 +96,6 @@ STATIC_O = ao # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-Bsymbolic -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= diff --git a/icuSources/config/mh-bsd-gcc b/icuSources/config/mh-bsd-gcc index 10e55870..8745b115 100644 --- a/icuSources/config/mh-bsd-gcc +++ b/icuSources/config/mh-bsd-gcc @@ -1,6 +1,6 @@ ## -*-makefile-*- -## FreeBSD-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## BSD-specific setup (FreeBSD, OpenBSD, NetBSD, *BSD) +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -12,6 +12,10 @@ SHAREDLIBCFLAGS = -fPIC SHAREDLIBCXXFLAGS = -fPIC SHAREDLIBCPPFLAGS = -DPIC +## Additional flags when building libraries and with threads +THREADSCPPFLAGS = -D_REENTRANT +LIBCPPFLAGS = + ## Compiler switch to embed a runtime search path LD_RPATH= LD_RPATH_PRE= -Wl,-rpath, diff --git a/icuSources/config/mh-cygwin b/icuSources/config/mh-cygwin index c06b7974..aa58e0e9 100644 --- a/icuSources/config/mh-cygwin +++ b/icuSources/config/mh-cygwin @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Cygwin-specific setup -## Copyright (c) 2001-2004, International Business Machines Corporation and +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -22,8 +22,8 @@ SHAREDLIBCXXFLAGS = SHAREDLIBCPPFLAGS = -DPIC ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT +LIBCPPFLAGS = # Commands to link. Link with C++ in case static libraries are used. LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS) @@ -67,12 +67,12 @@ I18N_STUBNAME = in %.d: $(srcdir)/%.c @echo "generating dependency information for $<" @echo -n "$@ " > $@ - @$(SHELL) -ec '$(GEN_DEPS.c) $< >> $@; [ -s $@ ] || rm -f $@' + @$(GEN_DEPS.c) $< >> $@ || (rm -f $@ && FALSE) %.d: $(srcdir)/%.cpp @echo "generating dependency information for $<" @echo -n "$@ " > $@ - @$(SHELL) -ec '$(GEN_DEPS.cc) $< >> $@; [ -s $@ ] || rm -f $@' + @$(GEN_DEPS.cc) $< >> $@ || (rm -f $@ && FALSE) ## Versioned target for a shared library. ## Since symbolic links don't work the same way on Windows, @@ -81,20 +81,23 @@ I18N_STUBNAME = in FINAL_SO_TARGET=$(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO) MIDDLE_SO_TARGET=$(FINAL_SO_TARGET) +# The following is for Makefile.inc's use. +ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR) + ## Versioned libraries rules #%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO) # $(RM) $@ && cp ${ /dev/null @mv $@ $@~ - @echo -n "$@ " > $@ + @printf "%s" "$@ " > $@ @cat < $@~ >> $@ @-rm $@~ @@ -66,7 +66,7 @@ STATIC_O = ao @echo "generating dependency information for $<" @$(GEN_DEPS.cc) $< >/dev/null @mv $@ $@~ - @echo -n "$@ " > $@ + @printf "%s" "$@ " > $@ @cat < $@~ >> $@ @-rm $@~ diff --git a/icuSources/config/mh-hpux-acc b/icuSources/config/mh-hpux-acc index f4c3e02c..a2961602 100644 --- a/icuSources/config/mh-hpux-acc +++ b/icuSources/config/mh-hpux-acc @@ -1,6 +1,6 @@ ## -*-makefile-*- ## HP/UX-specific setup using aCC -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -34,7 +34,7 @@ COMPILE.cc= $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) -c ## Common 'default' path to ensure the sanity of users. Search the current ## directory, at least. -LD_DEFAULTPATH= -Wl,+b,.:'$$'ORIGIN/ +LD_DEFAULTPATH= -Wl,+b,'$$'ORIGIN/ # Use SHLIB_PATH and LD_LIBRARY_PATH to locate shared libraries LDFLAGS += -Wl,+s $(LD_DEFAULTPATH) diff --git a/icuSources/config/mh-irix b/icuSources/config/mh-irix index dff288c9..59d4aaf6 100644 --- a/icuSources/config/mh-irix +++ b/icuSources/config/mh-irix @@ -1,6 +1,6 @@ ## -*-makefile-*- ## IRIX-specific setup (for CC) -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Flags for position independent code @@ -24,8 +24,8 @@ SHLIB.c= $(CC) -shared $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) SHLIB.cc= $(CXX) -shared $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) ## Additional flags when building libraries with thread safety -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT -D_PTHREADS +LIBCPPFLAGS = ## Compiler switch to embed a runtime search path LD_RPATH= diff --git a/icuSources/config/mh-linux b/icuSources/config/mh-linux index 58d76f43..056789eb 100644 --- a/icuSources/config/mh-linux +++ b/icuSources/config/mh-linux @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Linux-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -13,13 +13,16 @@ SHAREDLIBCXXFLAGS = -fPIC SHAREDLIBCPPFLAGS = -DPIC ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT +LIBCPPFLAGS = ## Compiler switch to embed a runtime search path LD_RPATH= LD_RPATH_PRE = -Wl,-rpath, +## These are the library specific LDFLAGS +LDFLAGSICUDT=-nodefaultlibs -nostdlib + ## Compiler switch to embed a library name # The initial tab in the next line is to prevent icu-config from reading it. LD_SONAME = -Wl,-soname -Wl,$(notdir $(MIDDLE_SO_TARGET)) @@ -68,9 +71,6 @@ STATIC_O = ao # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-Bsymbolic -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= diff --git a/icuSources/config/mh-linux-va b/icuSources/config/mh-linux-va index 6d954c27..5d0730cb 100644 --- a/icuSources/config/mh-linux-va +++ b/icuSources/config/mh-linux-va @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Linux-specific setup for Visual Age -## Copyright (c) 2003-2004, International Business Machines Corporation and +## Copyright (c) 2003-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Commands to generate dependency files @@ -20,14 +20,18 @@ SHAREDLIBCXXFLAGS = -qpic=large SHAREDLIBCPPFLAGS = -DPIC ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT THREADSCPPFLAGS = -D_REENTRANT +LIBCPPFLAGS = ## Compiler switch to embed a runtime search path LD_RPATH= -I #LD_RPATH_PRE = -Wl,-rpath, -#LD_SONAME = +## Compiler switch to embed a library name +# The initial tab in the next line is to prevent icu-config from reading it. + LD_SONAME = -Wl,-soname -Wl,$(notdir $(MIDDLE_SO_TARGET)) +#SH# # We can't depend on MIDDLE_SO_TARGET being set. +#SH# LD_SONAME= ## The type of assembly needed when pkgdata is used for generating shared libraries. GENCCODE_ASSEMBLY=-a gcc diff --git a/icuSources/config/mh-mingw b/icuSources/config/mh-mingw index e8e46a87..18937e0e 100644 --- a/icuSources/config/mh-mingw +++ b/icuSources/config/mh-mingw @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Cygwin/MinGW specific setup -## Copyright (c) 2001-2004, International Business Machines Corporation and +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. # TODO: Finish the rest of this port. This platform port is incomplete. @@ -29,8 +29,9 @@ SHAREDLIBCXXFLAGS = SHAREDLIBCPPFLAGS = -DPIC ## Additional flags when building libraries and with threads -LIBCPPFLAGS = -D_REENTRANT -THREADSCPPFLAGS = -D_REENTRANT +THREADSCFLAGS = -mthreads +THREADSCXXFLAGS = -mthreads +LIBCPPFLAGS = # Commands to link. Link with C++ in case static libraries are used. LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS) @@ -58,7 +59,7 @@ LIBSICU = $(STATIC_PREFIX)$(ICUPREFIX) A = lib ## An import library is needed for z/OS and MSVC -IMPORT_LIB_EXT = .lib +#IMPORT_LIB_EXT = .lib LIBPREFIX= @@ -70,9 +71,9 @@ LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX) # The #M# is used to delete lines for icu-config # Current full path directory. -CURR_FULL_DIR=$(shell cygpath -dma .)#M# +CURR_FULL_DIR=$(shell pwd -W)#M# # Current full path directory for use in source code in a -D compiler option. -CURR_SRCCODE_FULL_DIR=$(subst \,\\\\,$(shell cygpath -da .))#M# +CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M# ## Compilation rules %.$(STATIC_O): $(srcdir)/%.c @@ -90,12 +91,12 @@ CURR_SRCCODE_FULL_DIR=$(subst \,\\\\,$(shell cygpath -da .))#M# %.d: $(srcdir)/%.c @echo "generating dependency information for $<" @echo -n "$@ " > $@ - @$(SHELL) -ec '$(GEN_DEPS.c) $< >> $@; [ -s $@ ] || rm -f $@' + @$(GEN_DEPS.c) $< >> $@ || (rm -f $@ && FALSE) %.d: $(srcdir)/%.cpp @echo "generating dependency information for $<" @echo -n "$@ " > $@ - @$(SHELL) -ec '$(GEN_DEPS.cc) $< >> $@; [ -s $@ ] || rm -f $@' + @$(GEN_DEPS.cc) $< >> $@ || (rm -f $@ && FALSE) ## Versioned target for a shared library. ## Since symbolic links don't work the same way on Windows, @@ -106,8 +107,8 @@ MIDDLE_SO_TARGET=$(FINAL_SO_TARGET) ## Special pkgdata information that is needed PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR) -ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M# -ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M# +#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M# +#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M# ## Versioned libraries rules #%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO) diff --git a/icuSources/config/mh-os390 b/icuSources/config/mh-os390 index c4a6913f..201e22e7 100644 --- a/icuSources/config/mh-os390 +++ b/icuSources/config/mh-os390 @@ -1,6 +1,6 @@ ## -*-makefile-*- -## 390-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## os/390, z/OS specific setup +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ################################################################### @@ -30,43 +30,53 @@ # # ################################################################### +# TODO: Fix this configuration so that icu-config will work! +# If statements don't work well when icu-config is generated. ifeq (${IEEE390},) -IEEE390=1 +IEEE390=1#M# endif ifeq (${IEEE390}, 1) -ICU_IEEE = -Wc,"float(ieee)" -DIEEE_754=1 +ICU_IEEE = -Wc,'float(ieee)' else -ICU_IEEE = -DIEEE_754=0 +ICU_IEEE = -DIEEE_754=0#M# endif +# For a dynamically called DLL module to share access to the POSIX external +# variables, with its caller, the DLL module must define these _SHR_* macros. +SHAREDLIBCPPFLAGS = -D_SHR_TZNAME -D_SHR_TIMEZONE + +## Additional flags when building libraries and with threads +THREADSCPPFLAGS = -D_OPEN_THREADS + +# -Wc,expo is used to export all functions +SHAREDLIBCFLAGS = -Wc,expo +SHAREDLIBCXXFLAGS = -Wc,expo + # TODO: Consider using -Wc,roc,ros for making the data and strings readonly # -Wc,"ros" seems to work, but not the "roc" -CFLAGS += -Wc,"langlvl(extended),spill(2000)" -Wc,"ros" $(ICU_BUILD_OPTIONS) $(ICU_IEEE) -Wc,dll,expo -CXXFLAGS += -Wc,"langlvl(extended),spill(2000)" -Wc,"ros" $(ICU_BUILD_OPTIONS) $(ICU_IEEE) -Wc,dll,expo -DEFS += -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -D_MSE_PROTOS -D_SHR_TZNAME -D_SHR_TIMEZONE -DU_LIBICUDATA_NAME=\"$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)\" +# -+ means accept any file extension as a C++ file. By default only .C is accepted. +CFLAGS += -Wc,'langlvl(extended),spill(2000),ros,dll' $(ICU_IEEE) +CXXFLAGS += -Wc,'langlvl(extended),spill(2000),ros,dll' $(ICU_IEEE) -+ +DEFS += -D_XOPEN_SOURCE_EXTENDED -D_MSE_PROTOS ARFLAGS = -cr -# TODO: Fix this configuration so that icu-config will work! -# This means we shouldn't be using so many of these special case defines. ifeq (${OS390_XPLINK}, 1) +#SH# if [ "x$OS390_XPLINK" = "x1" ]; then # Note: The following options require the PTF for PQ69418 on z/OS 1.2 # and later. # These lines must be the last options specified. -ICU_XPLINK_C = -Wc,"xplink(backchain,storeargs)" -Wc,"GOFF,NOCSECT,RENT,SSCOMM" -Wc,"inline(auto,noreport,500,2500)" -ICU_XPLINK_CPP = -Wc,"xplink(backchain,storeargs)" -Wc,"GOFF,NOCSECT,NOTEMPINC" -Wc,"inline(auto,noreport,300,2500)" +ICU_XPLINK_C = -Wc,'xplink(backchain,storeargs)' -Wc,'GOFF,NOCSECT,RENT' +ICU_XPLINK_CPP = -Wc,'xplink(backchain,storeargs)' -Wc,'GOFF,NOCSECT,NOTEMPINC' ICU_XPLINK_L = -Wl,dll,xplink -Wl,EDIT=NO +#SH# fi endif ## OS390BATCH ifeq (${OS390BATCH},1) -DEFS += -DOS390BATCH +DEFS += -DOS390BATCH#M# endif -# Uncomment this line or do "gmake OS390_STUBDATA=1" to enable dual common library support -#OS390_STUBDATA=1 - - ## Commands to generate dependency files GEN_DEPS.c= makedep GEN_DEPS.cc= makedep @@ -75,7 +85,7 @@ GEN_DEPS.cc= makedep # _CXX_STEPS="-1" is a prelink step when compiling C and C++, and # it's only needed for long function names COMPILE.c = $(COMPILE_LINK_ENVVAR) $(CXX) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(ICU_XPLINK_C) -c -COMPILE.cc = _CXX_CXXSUFFIX="cpp" $(COMPILE_LINK_ENVVAR) $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(ICU_XPLINK_CPP) -c +COMPILE.cc = $(COMPILE_LINK_ENVVAR) $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(ICU_XPLINK_CPP) -c # Commands to link LINK.c= $(COMPILE_LINK_ENVVAR) $(CC) $(CFLAGS) -Wl,dll $(LDFLAGS) $(ICU_XPLINK_L) @@ -99,19 +109,17 @@ FINAL_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO) MIDDLE_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO) ## Versioned import library names. -IMPORT_LIB = $(basename $(notdir $(SO_TARGET)))$(IMPORT_LIB_EXT) -MIDDLE_IMPORT_LIB = $(basename $(notdir $(MIDDLE_SO_TARGET)))$(IMPORT_LIB_EXT) -FINAL_IMPORT_LIB = $(basename $(notdir $(FINAL_SO_TARGET)))$(IMPORT_LIB_EXT) +IMPORT_LIB = $(basename $(notdir $(SO_TARGET)))$(IMPORT_LIB_EXT)#M# +MIDDLE_IMPORT_LIB = $(basename $(notdir $(MIDDLE_SO_TARGET)))$(IMPORT_LIB_EXT)#M# +FINAL_IMPORT_LIB = $(basename $(notdir $(FINAL_SO_TARGET)))$(IMPORT_LIB_EXT)#M# -## Shared object suffix (switch to dll for shared library build) -SO = dll ## Non-shared intermediate object suffix STATIC_O = o ifeq ($(OS390_STUBDATA),1) ## Suffix of the subset data library for dual common library support -STUB_SUFFIX=_stub -DEFS += -DOS390_STUBDATA +STUB_SUFFIX=_stub#M# +DEFS += -DOS390_STUBDATA -DU_LIBICUDATA_NAME=\"$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)\"#M# endif ifeq ($(OS390BATCH),1) @@ -121,6 +129,7 @@ BATCH_LIBICUDT= "//'${LOADEXP}(IXMI${SO_TARGET_VERSION_MAJOR}D1)'" else BATCH_STUB_TARGET= "//'${LOADMOD}(IXMI${SO_TARGET_VERSION_MAJOR}DA)'" BATCH_LIBICUDT= "//'${LOADEXP}(IXMI${SO_TARGET_VERSION_MAJOR}DA)'" +PKGDATA_DEFS += -DU_LIBICUDATA_NAME=\"$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)\" endif BATCH_COMMON_TARGET="//'${LOADMOD}(IXMI${SO_TARGET_VERSION_MAJOR}UC)'" @@ -146,6 +155,20 @@ LIBICUIO= $(top_builddir)/io/$(LIBICU)io$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x LIBCTESTFW= $(top_builddir)/tools/ctestfw/$(LIBICU)test$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x LIBICUTOOLUTIL= $(top_builddir)/tools/toolutil/$(LIBICU)tu$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x +ifneq (${ICUDATA_CHAR},e) +#SH# if [ "$ICUDATA_CHAR" != "e" ]; then +## We're in ASCII mode. +CFLAGS += -Wc,'ascii' +CXXFLAGS += -Wc,'ascii' +SO = so +else +#SH# else +## We're in EBCDIC mode. +## Shared object suffix +SO = dll +endif +#SH# fi + ## Special 390 rules ## Build archive from object diff --git a/icuSources/config/mh-os400 b/icuSources/config/mh-os400 index 8d25e420..b4a8e092 100644 --- a/icuSources/config/mh-os400 +++ b/icuSources/config/mh-os400 @@ -1,12 +1,11 @@ ## -*-makefile-*- ## OS400-specific setup (for cross build) -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. GEN_DEPS.c= $(CC1) -E -M $(DEFS) $(CPPFLAGS) GEN_DEPS.cc= $(CXX1) -E -M $(DEFS) $(CPPFLAGS) -DEFS+=-DOS400 THREADSCPPFLAGS = -D_MULTI_THREADED ## Commands to compile diff --git a/icuSources/config/mh-ptx b/icuSources/config/mh-ptx deleted file mode 100644 index 0cba7dd6..00000000 --- a/icuSources/config/mh-ptx +++ /dev/null @@ -1,65 +0,0 @@ -## -*-makefile-*- -## PTX-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and -## others. All Rights Reserved. - -## Flags for position independent code -SHAREDLIBCFLAGS = -KPIC -SHAREDLIBCXXFLAGS = -KPIC -SHAREDLIBCPPFLAGS = -DPIC - -## Commands to generate dependency files -GEN_DEPS.c= $(CC) -Kthread -DPTX -c $(DEFS) $(CPPFLAGS) -GEN_DEPS.cc= $(CXX) -M -DPTX $(DEFS) $(CPPFLAGS) - -## Commands to compile -COMPILE.c= $(CC) -Kthread -DPTX $(DEFS) $(CPPFLAGS) $(CFLAGS) -c -COMPILE.cc= $(CXX) -Kthread -DPTX $(DEFS) $(CPPFLAGS) $(CXXFLAGS) -c - -## Commands to link -#LINK.c= $(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -LINK.c= $(CXX) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -lm -lgen -LINK.cc= $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -lm -lgen - -## Commands to make a shared library -SHLIB.c= $(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -DPTX -G -SHLIB.cc= $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -DPTX -G - -## Compiler switch to embed a runtime search path -LD_RPATH= -R -LD_RPATH_PRE= - -## Versioned target for a shared library. -FINAL_SO_TARGET = $(SO_TARGET) -MIDDLE_SO_TARGET = - -## Shared object suffix -SO= so -## Non-shared intermediate object suffix -STATIC_O = ao - -## Compilation rules -%.$(STATIC_O): $(srcdir)/%.c - $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $< -%.o: $(srcdir)/%.c - $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< - -%.$(STATIC_O): $(srcdir)/%.cpp - $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< -%.o: $(srcdir)/%.cpp - $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< - -## Dependency rules -%.d : $(srcdir)/%.c - @echo "generating dependency information for $<" - @$(SHELL) -ec '$(GEN_DEPS.c) $< \ - | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \ - [ -s $@ ] || rm -f $@' - -%.d : $(srcdir)/%.cpp - @echo "generating dependency information for $<" - @$(SHELL) -ec '$(GEN_DEPS.cc) -o $@ $< \ - | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \ - [ -s $@ ] || rm -f $@' - -## End Ptx-specific setup diff --git a/icuSources/config/mh-qnx b/icuSources/config/mh-qnx index 213f9d25..3d2b350d 100644 --- a/icuSources/config/mh-qnx +++ b/icuSources/config/mh-qnx @@ -1,6 +1,6 @@ ## -*-makefile-*- ## QNX-specific setup -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## ## Provided By: Chris McKillop @@ -85,9 +85,6 @@ FINAL_SO_TARGET = $(MIDDLE_SO_TARGET) # LDflags that pkgdata will use BIR_LDFLAGS= -Wl,-Bsymbolic -# CPPflags for genccode/gencmn -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES - # Dependencies [i.e. map files] for the final library BIR_DEPS= diff --git a/icuSources/config/mh-solaris b/icuSources/config/mh-solaris index 8f5d3043..25bd8214 100644 --- a/icuSources/config/mh-solaris +++ b/icuSources/config/mh-solaris @@ -1,6 +1,6 @@ ## -*-makefile-*- -## Solaris-specific setup using Sun's workshop compilers -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Solaris-specific setup using Sun's compilers +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Flags for position independent code @@ -12,9 +12,6 @@ SHAREDLIBCPPFLAGS = -DPIC GEN_DEPS.c= $(CC) -xM $(DEFS) $(CPPFLAGS) GEN_DEPS.cc= $(CXX) -xM $(DEFS) $(CPPFLAGS) -# -libmil means use the intrinsic library functions like strlen -CPPFLAGS += -libmil - # -mt means 'compiles and links a multithreaded program' THREADSCFLAGS += -mt THREADSCXXFLAGS += -mt @@ -32,12 +29,11 @@ SHLIB.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -G LD_RPATH= -R LD_RPATH_PRE= +#LIBRARY_PATH_PREFIX=/usr/lib/lwp: + ## Compiler switch to embed a library name LD_SONAME = -h $(notdir $(MIDDLE_SO_TARGET)) -## The type of assembly needed when pkgdata is used for generating shared libraries. -GENCCODE_ASSEMBLY=-a sun - ## Shared object suffix SO= so ## Non-shared intermediate object suffix @@ -74,7 +70,6 @@ STATIC_O = o # ifeq (strip $(GENCCODE_ASSEMBLY),) BIR_LDFLAGS= -Wl,-M,$(NAME).map -Wl,-B,symbolic -Wl,-B,eliminate -BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES BIR_DEPS= $(NAME).map endif diff --git a/icuSources/config/mh-solaris-gcc b/icuSources/config/mh-solaris-gcc index 6b822b15..e59e5c58 100644 --- a/icuSources/config/mh-solaris-gcc +++ b/icuSources/config/mh-solaris-gcc @@ -1,6 +1,6 @@ ## -*-makefile-*- ## Solaris-specific setup using gcc -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Flags for position independent code @@ -12,6 +12,12 @@ SHAREDLIBCPPFLAGS = -DPIC GEN_DEPS.c= $(CC) -E -MM $(DEFS) $(CPPFLAGS) GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS) +## These are the library specific LDFLAGS +LDFLAGSICUDT=-nodefaultlibs -nostdlib + +## Additional flags when building libraries and with threads +THREADSCPPFLAGS = -D_REENTRANT + ## Compiler switch to embed a runtime search path LD_RPATH= -R LD_RPATH_PRE= @@ -20,7 +26,10 @@ LD_RPATH_PRE= LD_SONAME = -h $(notdir $(MIDDLE_SO_TARGET)) ## The type of assembly needed when pkgdata is used for generating shared libraries. +## Only use this when not on x86 Solaris. +ifeq (strip $(GENCCODE_ASSEMBLY),) GENCCODE_ASSEMBLY=-a sun +endif ## Shared object suffix SO= so diff --git a/icuSources/configure b/icuSources/configure index 932ed338..058d53a6 100755 --- a/icuSources/configure +++ b/icuSources/configure @@ -1,65 +1,325 @@ #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# Generated by GNU Autoconf 2.59. # +# Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -# Defaults: -ac_help= +exec 6>&1 + +# +# Initializations. +# ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_help="$ac_help - --enable-strict compile with strict compiler options [default=no]" -ac_help="$ac_help - --enable-64bit-libs build 64-bit libraries [default=yes]" -ac_help="$ac_help - --enable-shared build shared libraries [default=yes]" -ac_help="$ac_help - --enable-static build static libraries [default=no]" -ac_help="$ac_help - --enable-debug build debug libraries [default=no]" -ac_help="$ac_help - --enable-release build release libraries [default=yes]" -ac_help="$ac_help - --enable-renaming add a version suffix to symbols [default=yes]" -ac_help="$ac_help - --enable-tracing enable function and data tracing [default=yes]" -ac_help="$ac_help - --enable-rpath use rpath when linking [default is only if necessary]" -ac_help="$ac_help - --enable-threads build ICU with thread safety [default=yes]" -ac_help="$ac_help - --with-iostream=version specify the version of iostream to use (none, old, std, auto) [default=auto]" -ac_help="$ac_help - --enable-extras build ICU extras [default=yes]" -ac_help="$ac_help - --enable-icuio build ICU's icuio library [default=yes]" -ac_help="$ac_help - --enable-layout build ICU's layout library [default=yes]" -ac_help="$ac_help - --with-data-packaging=type specify how to package ICU data (files, archive, library, auto) [default=auto]" -ac_help="$ac_help -" -ac_help="$ac_help - --with-library-suffix=suffix tag a suffix to the library names [default=]" -ac_help="$ac_help - --enable-tests build ICU tests [default=yes]" -ac_help="$ac_help - --enable-samples build ICU samples [default=yes] -Additionally, the variable FORCE_LIBS may be set before calling configure. If set, it will REPLACE any automatic list of libraries." +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="common/unicode/utypes.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS PACKAGE VERSION LIB_VERSION LIB_VERSION_MAJOR UNICODE_VERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os CPPFLAGS CC CFLAGS LDFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA U_MAKE DOXYGEN ARFLAGS COMPILE_LINK_ENVVAR LIB_M ENABLE_SHARED ENABLE_STATIC ENABLE_DEBUG ENABLE_RELEASE U_DEFAULT_SHOW_DRAFT RANLIB ac_ct_RANLIB AR U_DISABLE_RENAMING U_ENABLE_TRACING ENABLE_RPATH U_INLINE THREADS_TRUE ICU_USE_THREADS HAVE_MMAP GENCCODE_ASSEMBLY CPP EGREP U_HAVE_INTTYPES_H U_IOSTREAM_SOURCE U_IS_BIG_ENDIAN U_HAVE_NL_LANGINFO U_HAVE_NL_LANGINFO_CODESET U_NL_LANGINFO_CODESET U_HAVE_NAMESPACE U_OVERRIDE_CXX_ALLOCATION U_HAVE_PLACEMENT_NEW U_HAVE_POPEN U_HAVE_TZSET U_TZSET U_HAVE_TZNAME U_TZNAME U_HAVE_TIMEZONE U_TIMEZONE HAVE_INT8_T HAVE_UINT8_T HAVE_INT16_T HAVE_UINT16_T HAVE_INT32_T HAVE_UINT32_T HAVE_INT64_T HAVE_UINT64_T U_HAVE_WCHAR_H U_HAVE_WCSCPY U_SIZEOF_WCHAR_T EXTRAS_TRUE ICUIO_TRUE LAYOUT_TRUE thedatadir pkgicudatadir thepkgicudatadir DATA_PACKAGING_MODE ICULIBSUFFIX U_HAVE_LIB_SUFFIX ICULIBSUFFIXCNAME TESTS_TRUE SAMPLES_TRUE ICUDATA_CHAR platform platform_make_fragment_name platform_make_fragment ld_rpath_suf AIX_SHLIB LIBOBJS LTLIBOBJS' +ac_subst_files='' # Initialize some variables set by options. +ac_init_help= +ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. -build=NONE -cache_file=./config.cache +cache_file=/dev/null exec_prefix=NONE -host=NONE no_create= -nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE @@ -68,10 +328,15 @@ program_transform_name=s,x,x, silent= site= srcdir= -target=NONE verbose= x_includes=NONE x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' @@ -85,17 +350,9 @@ oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - ac_prev= for ac_option do - # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" @@ -103,59 +360,59 @@ do continue fi - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. - case "$ac_option" in + case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; + bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) - ac_prev=build ;; + ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; + build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) - datadir="$ac_optarg" ;; + datadir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "enable_${ac_feature}='$ac_optarg'" ;; + eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -164,95 +421,47 @@ do -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; + exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; -host | --host | --hos | --ho) - ac_prev=host ;; + ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; + host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; + includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; + infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; + libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; + libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ @@ -261,19 +470,19 @@ EOF -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; + localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; + mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) + | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -287,26 +496,26 @@ EOF -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; + oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; + prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; + program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; + program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ @@ -323,7 +532,7 @@ EOF | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; + program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) @@ -333,7 +542,7 @@ EOF ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; + sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ @@ -344,58 +553,57 @@ EOF | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; + sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; + site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; + srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; + sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; + ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; + target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "with_${ac_package}='$ac_optarg'" ;; + eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. @@ -406,99 +614,110 @@ EOF ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; + x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; + x_libraries=$ac_optarg ;; - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } fi -exec 5>./config.log -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; esac done -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=common/unicode/utypes.h # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. @@ -508,13 +727,496 @@ else fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } fi fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CXX_set=${CXX+set} +ac_env_CXX_value=$CXX +ac_cv_env_CXX_set=${CXX+set} +ac_cv_env_CXX_value=$CXX +ac_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_env_CXXFLAGS_value=$CXXFLAGS +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_cv_env_CXXFLAGS_value=$CXXFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-strict compile with strict compiler options default=no + --enable-64bit-libs build 64-bit libraries default=yes + --enable-shared build shared libraries default=yes + --enable-static build static libraries default=no + --enable-debug build debug libraries default=no + --enable-release build release libraries default=yes + --enable-draft enable draft APIs default=yes + --enable-renaming add a version suffix to symbols default=yes + --enable-tracing enable function and data tracing default=yes + --enable-rpath use rpath when linking default is only if necessary + --enable-threads build ICU with thread safety default=yes + --enable-extras build ICU extras default=yes + --enable-icuio build ICU's icuio library default=yes + --enable-layout build ICU's layout library default=yes + --enable-tests build ICU tests default=yes + --enable-samples build ICU samples default=yes +Additionally, the variable FORCE_LIBS may be set before calling configure. If set, it will REPLACE any automatic list of libraries. + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-iostream=version specify the version of iostream to use (none, old, std, auto) default=auto + --with-data-packaging=type specify how to package ICU data (files, archive, library, auto) default=auto + --with-library-suffix=suffix tag a suffix to the library names default= + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +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 || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then @@ -525,48 +1227,113 @@ if test -z "$CONFIG_SITE"; then fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi else - echo "creating cache $cache_file" - > $cache_file + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } fi ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + ac_config_headers="$ac_config_headers common/icucfg.h" + PACKAGE="icu" -echo $ac_n "checking for ICU version numbers""... $ac_c" 1>&6 -echo "configure:570: checking for ICU version numbers" >&5 +echo "$as_me:$LINENO: checking for ICU version numbers" >&5 +echo $ECHO_N "checking for ICU version numbers... $ECHO_C" >&6 geticuversion() { sed -n 's/^[ ]*#[ ]*define[ ]*U_ICU_VERSION[ ]*"\([^"]*\)".*/\1/p' "$@" @@ -575,7 +1342,9 @@ VERSION=`geticuversion $srcdir/common/unicode/uversion.h` if test x"$VERSION" = x; then VERSION=`geticuversion $srcdir/common/unicode/*.h` if test x"$VERSION" = x; then - { echo "configure: error: Cannot determine ICU version number from header files" 1>&2; exit 1; } + { { echo "$as_me:$LINENO: error: Cannot determine ICU version number from header files" >&5 +echo "$as_me: error: Cannot determine ICU version number from header files" >&2;} + { (exit 1); exit 1; }; } fi fi LIB_VERSION=`echo $VERSION | sed -e 's/\.//' -e 's/^\([^.]*\)$/\1.0/'` @@ -583,222 +1352,749 @@ LIB_VERSION_MAJOR=`echo $LIB_VERSION | sed 's/\..*//'` -echo "$ac_t""release $VERSION, library $LIB_VERSION" 1>&6 +echo "$as_me:$LINENO: result: release $VERSION, library $LIB_VERSION" >&5 +echo "${ECHO_T}release $VERSION, library $LIB_VERSION" >&6 -UNICODE_VERSION="4.0.1" +UNICODE_VERSION="5.0" - -#AC_SUBST(CINTLTST_CPPFLAGS) - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:598: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + fi -CC="$ac_cv_prog_CC" +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + + + + +_CXX_CXXSUFFIX=cc +export _CXX_CXXSUFFIX +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:628: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift - if test $# -gt 0; then + if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - # Extract the first word of "cl", so it can be a program name with args. -set dummy cl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:679: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="cl" - break - fi - done - IFS="$ac_save_ifs" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi - ;; - esac + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +done +done + +fi fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:711: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext << EOF - -#line 722 "configure" -#include "confdefs.h" - -main(){return(0);} -EOF -if { (eval echo configure:727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no else - ac_cv_prog_cc_cross=yes + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:753: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:758: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done else - ac_cv_prog_gcc=no -fi + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ -if test $ac_cv_prog_gcc = yes; then - GCC=yes + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done else - GCC= + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:786: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else - ac_cv_prog_cc_g=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_prog_cc_g=no fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" + CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" @@ -812,136 +2108,500 @@ else CFLAGS= fi fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} -for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do -# Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:822: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CXX="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CXX="$ac_cv_prog_CXX" -if test -n "$CXX"; then - echo "$ac_t""$CXX" 1>&6 + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break else - echo "$ac_t""no" 1>&6 -fi + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -test -n "$CXX" && break +fi +rm -f conftest.err conftest.$ac_objext done -test -n "$CXX" || CXX="gcc" +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC +fi -echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:854: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac -ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross - -cat > conftest.$ac_ext << EOF - -#line 865 "configure" -#include "confdefs.h" - -int main(){return(0);} -EOF -if { (eval echo configure:870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cxx_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cxx_cross=no - else - ac_cv_prog_cxx_cross=yes - fi +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cxx_works=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h fi -rm -fr conftest* + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 -if test $ac_cv_prog_cxx_works = no; then - { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:896: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 -cross_compiling=$ac_cv_prog_cxx_cross - -echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 -echo "configure:901: checking whether we are using GNU C++" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gxx=yes +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_prog_gxx=no + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -echo "$ac_t""$ac_cv_prog_gxx" 1>&6 + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done -if test $ac_cv_prog_gxx = yes; then - GXX=yes +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6 else - GXX= + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -ac_test_CXXFLAGS="${CXXFLAGS+set}" -ac_save_CXXFLAGS="$CXXFLAGS" -CXXFLAGS= -echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 -echo "configure:929: checking whether ${CXX-g++} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.cc -if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then + test -n "$ac_ct_CXX" && break +done +test -n "$ac_ct_CXX" || ac_ct_CXX="g++" + + CXX=$ac_ct_CXX +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +CXXFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else - ac_cv_prog_cxx_g=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_prog_cxx_g=no fi - -echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS="$ac_save_CXXFLAGS" + CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" @@ -955,25 +2615,117 @@ else CXXFLAGS= fi fi - -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi +for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -982,60 +2734,75 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:991: checking for a BSD compatible install" >&5 +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 fi fi done - ;; - esac - done - IFS="$ac_save_IFS" + done + ;; +esac +done + fi if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" + INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. - INSTALL="$ac_install_sh" + INSTALL=$ac_install_sh fi fi -echo "$ac_t""$INSTALL" 1>&6 +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' @@ -1049,75 +2816,50 @@ if test "$srcdir" = "."; then fi #AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true) -# Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1056: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_STRIP="strip" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP="true" -fi -fi -STRIP="$ac_cv_prog_STRIP" -if test -n "$STRIP"; then - echo "$ac_t""$STRIP" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - +#AC_CHECK_PROG(STRIP, strip, strip, true) for ac_prog in gmake gnumake do -# Extract the first word of "$ac_prog", so it can be a program name with args. + # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1089: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_U_MAKE'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_U_MAKE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - case "$U_MAKE" in - /*) + case $U_MAKE in + [\\/]* | ?:[\\/]*) ac_cv_path_U_MAKE="$U_MAKE" # Let the user override the test with a path. ;; - ?:/*) - ac_cv_path_U_MAKE="$U_MAKE" # Let the user override the test with a dos path. - ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_U_MAKE="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_U_MAKE="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + ;; esac fi -U_MAKE="$ac_cv_path_U_MAKE" +U_MAKE=$ac_cv_path_U_MAKE + if test -n "$U_MAKE"; then - echo "$ac_t""$U_MAKE" 1>&6 + echo "$as_me:$LINENO: result: $U_MAKE" >&5 +echo "${ECHO_T}$U_MAKE" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -test -n "$U_MAKE" && break + test -n "$U_MAKE" && break done test -n "$U_MAKE" || U_MAKE="make" @@ -1125,188 +2867,94 @@ test -n "$U_MAKE" || U_MAKE="make" # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1130: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_DOXYGEN'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_DOXYGEN+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - case "$DOXYGEN" in - /*) + case $DOXYGEN in + [\\/]* | ?:[\\/]*) ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. ;; - ?:/*) - ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a dos path. - ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH:/usr/local/bin:/usr/bin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_DOXYGEN="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/usr/local/bin:/usr/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + ;; esac fi -DOXYGEN="$ac_cv_path_DOXYGEN" +DOXYGEN=$ac_cv_path_DOXYGEN + if test -n "$DOXYGEN"; then - echo "$ac_t""$DOXYGEN" 1>&6 + echo "$as_me:$LINENO: result: $DOXYGEN" >&5 +echo "${ECHO_T}$DOXYGEN" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -# Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1170: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; +case "${host}" in + *-*-cygwin*|*-*-mingw*) + if test "$GCC" != yes && test -n "`link --version 2>&1 | grep 'GNU coreutils'`"; then + { { echo "$as_me:$LINENO: error: link.exe is not a valid linker. Your PATH is incorrect. + Please follow the directions in ICU's readme." >&5 +echo "$as_me: error: link.exe is not a valid linker. Your PATH is incorrect. + Please follow the directions in ICU's readme." >&2;} + { (exit 1); exit 1; }; } + fi;; + *);; esac -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 - -echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 -echo "configure:1191: checking for Cygwin environment" >&5 -if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_cygwin=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_cygwin=no -fi -rm -f conftest* -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_cygwin" 1>&6 -CYGWIN= -test "$ac_cv_cygwin" = yes && CYGWIN=yes -echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 -echo "configure:1224: checking for mingw32 environment" >&5 -if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_mingw32=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_mingw32=no -fi -rm -f conftest* -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_mingw32" 1>&6 -MINGW32= -test "$ac_cv_mingw32" = yes && MINGW32=yes - - -echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:1255: checking for executable suffix" >&5 -if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$CYGWIN" = yes || test "$MINGW32" = yes; then - ac_cv_exeext=.exe -else - rm -f conftest* - echo 'int main () { return 0; }' > conftest.$ac_ext - ac_cv_exeext= - if { (eval echo configure:1265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - for file in conftest.*; do - case $file in - *.c | *.o | *.obj) ;; - *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; - esac - done - else - { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } - fi - rm -f conftest* - test x"${ac_cv_exeext}" = x && ac_cv_exeext=no -fi -fi - -EXEEXT="" -test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} -echo "$ac_t""${ac_cv_exeext}" 1>&6 +echo "$as_me:$LINENO: checking checking for executable suffix" >&5 +echo $ECHO_N "checking checking for executable suffix... $ECHO_C" >&6 +case "${host}" in + *-*-cygwin*|*-*-mingw*) EXEEXT=.exe ;; + *) EXEEXT="" ;; +esac ac_exeext=$EXEEXT +echo "$as_me:$LINENO: result: $EXEEXT" >&5 +echo "${ECHO_T}$EXEEXT" >&6 - echo $ac_n "checking whether strict compiling is on""... $ac_c" 1>&6 -echo "configure:1288: checking whether strict compiling is on" >&5 + echo "$as_me:$LINENO: checking whether strict compiling is on" >&5 +echo $ECHO_N "checking whether strict compiling is on... $ECHO_C" >&6 # Check whether --enable-strict or --disable-strict was given. if test "${enable_strict+set}" = set; then enableval="$enable_strict" - + if test "$enableval" = no then ac_use_strict_options=no else ac_use_strict_options=yes fi - + else ac_use_strict_options=no -fi - - echo "$ac_t""$ac_use_strict_options" 1>&6 +fi; + echo "$as_me:$LINENO: result: $ac_use_strict_options" >&5 +echo "${ECHO_T}$ac_use_strict_options" >&6 if test "$ac_use_strict_options" = yes then if test "$GCC" = yes then - CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Winline -Wno-long-long" + CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long" case "${host}" in *-*-solaris*) CFLAGS="$CFLAGS -D__STDC__=0";; @@ -1322,7 +2970,7 @@ fi fi if test "$GXX" = yes then - CXXFLAGS="$CXXFLAGS -W -Wall -ansi -pedantic -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Winline -Wno-long-long" + CXXFLAGS="$CXXFLAGS -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long" case "${host}" in *-*-solaris*) CXXFLAGS="$CXXFLAGS -D__STDC__=0";; @@ -1340,17 +2988,17 @@ fi + # Check whether --enable-64bit-libs or --disable-64bit-libs was given. if test "${enable_64bit_libs+set}" = set; then enableval="$enable_64bit_libs" ENABLE_64BIT_LIBS=${enableval} else ENABLE_64BIT_LIBS=yes - -fi - echo $ac_n "checking for 64-bit executable support""... $ac_c" 1>&6 -echo "configure:1354: checking for 64-bit executable support" >&5 +fi; + echo "$as_me:$LINENO: checking for 64-bit executable support" >&5 +echo $ECHO_N "checking for 64-bit executable support... $ECHO_C" >&6 if test "$ENABLE_64BIT_LIBS" != no; then case "${host}" in *-*-solaris*) @@ -1404,8 +3052,60 @@ echo "configure:1354: checking for 64-bit executable support" >&5 ENABLE_64BIT_LIBS=no fi ;; + x86_64-*-cygwin) + if test "$GCC" = yes; then + if test -n "`$CXX -dumpspecs 2>&1 && $CC -dumpspecs 2>&1 | grep -v __LP64__`"; then + ENABLE_64BIT_LIBS=yes + else + ENABLE_64BIT_LIBS=no + fi + else + ENABLE_64BIT_LIBS=no + OLD_CPPFLAGS="${CPPFLAGS}" + OLD_LDFLAGS="${LDFLAGS}" + CPPFLAGS="${CPPFLAGS} /DWIN64" + LDFLAGS="${LDFLAGS} /MACHINE:AMD64" + if test "$cross_compiling" = yes; then + ENABLE_64BIT_LIBS=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int main(void) {return 0;} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ENABLE_64BIT_LIBS=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ENABLE_64BIT_LIBS=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + if test "$ENABLE_64BIT_LIBS" = no; then + CPPFLAGS="${OLD_CPPFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + fi + fi + ;; *-*-aix*|powerpc64-*-linux*) - if test "$ac_cv_prog_gcc" = no; then + if test "$ac_cv_c_compiler_gnu" = no; then # Note: Have not tested 64-bitness with gcc. # Maybe the flag "-maix64" could be used with gcc? OLD_CFLAGS="${CFLAGS}" @@ -1417,23 +3117,36 @@ echo "configure:1354: checking for 64-bit executable support" >&5 if test "$cross_compiling" = yes; then ENABLE_64BIT_LIBS=no else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ int main(void) {return 0;} -EOF -if { (eval echo configure:1426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ENABLE_64BIT_LIBS=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ENABLE_64BIT_LIBS=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ENABLE_64BIT_LIBS=no fi -rm -fr conftest* +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - if test "$ENABLE_64BIT_LIBS" = no; then CFLAGS="${OLD_CFLAGS}" CXXFLAGS="${OLD_CXXFLAGS}" @@ -1447,7 +3160,7 @@ fi fi ;; *-*-hpux*) - + OLD_CFLAGS="${CFLAGS}" OLD_CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS} +DD64" @@ -1455,23 +3168,36 @@ fi if test "$cross_compiling" = yes; then ENABLE_64BIT_LIBS=no else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ int main(void) {return 0;} -EOF -if { (eval echo configure:1464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ENABLE_64BIT_LIBS=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ENABLE_64BIT_LIBS=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ENABLE_64BIT_LIBS=no fi -rm -fr conftest* +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - if test "$ENABLE_64BIT_LIBS" = no; then CFLAGS="${OLD_CFLAGS}" CXXFLAGS="${OLD_CXXFLAGS}" @@ -1480,57 +3206,161 @@ fi if test "$cross_compiling" = yes; then ENABLE_64BIT_LIBS=no else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ int main(void) {return 0;} -EOF -if { (eval echo configure:1489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ENABLE_64BIT_LIBS=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ENABLE_64BIT_LIBS=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ENABLE_64BIT_LIBS=no fi -rm -fr conftest* +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - if test "$ENABLE_64BIT_LIBS" = no; then CFLAGS="${OLD_CFLAGS}" CXXFLAGS="${OLD_CXXFLAGS}" fi fi ;; + *-*ibm-openedition*|*-*-os390*) + OLD_CFLAGS="${CFLAGS}" + OLD_CXXFLAGS="${CXXFLAGS}" + OLD_LDFLAGS="${LDFLAGS}" + CFLAGS="${CFLAGS} -Wc,lp64" + CXXFLAGS="${CXXFLAGS} -Wc,lp64" + LDFLAGS="${LDFLAGS} -Wl,lp64" + if test "$cross_compiling" = yes; then + ENABLE_64BIT_LIBS=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int main(void) {return 0;} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ENABLE_64BIT_LIBS=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ENABLE_64BIT_LIBS=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + if test "$ENABLE_64BIT_LIBS" = no; then + CFLAGS="${OLD_CFLAGS}" + CXXFLAGS="${OLD_CXXFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + fi + ;; *) ENABLE_64BIT_LIBS=no ;; esac + else + if test "$GCC" = yes; then + OLD_CFLAGS="${CFLAGS}" + OLD_CXXFLAGS="${CXXFLAGS}" + CFLAGS="${CFLAGS} -m32" + CXXFLAGS="${CXXFLAGS} -m32" + if test "$cross_compiling" = yes; then + ENABLE_64BIT_LIBS=yes +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int main(void) {return 0;} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ENABLE_64BIT_LIBS=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ENABLE_64BIT_LIBS=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + if test "$ENABLE_64BIT_LIBS" = yes; then + CFLAGS="${OLD_CFLAGS}" + CXXFLAGS="${OLD_CXXFLAGS}" + fi + fi fi - echo "$ac_t""$ENABLE_64BIT_LIBS" 1>&6 + echo "$as_me:$LINENO: result: $ENABLE_64BIT_LIBS" >&5 +echo "${ECHO_T}$ENABLE_64BIT_LIBS" >&6 - echo $ac_n "checking which Makefile fragment to use""... $ac_c" 1>&6 -echo "configure:1519: checking which Makefile fragment to use" >&5 -if eval "test \"`echo '$''{'icu_cv_host_frag'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + echo "$as_me:$LINENO: checking which Makefile fragment to use" >&5 +echo $ECHO_N "checking which Makefile fragment to use... $ECHO_C" >&6 +if test "${icu_cv_host_frag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - + case "${host}" in *-*-solaris*) - if test "$GCC" = yes; then - icu_cv_host_frag=mh-solaris-gcc + if test "$GCC" = yes; then + icu_cv_host_frag=mh-solaris-gcc else icu_cv_host_frag=mh-solaris fi ;; alpha*-*-linux-gnu) if test "$GCC" = yes; then icu_cv_host_frag=mh-alpha-linux-gcc - else + else icu_cv_host_frag=mh-alpha-linux-cc fi ;; powerpc*-*-linux*) @@ -1552,7 +3382,7 @@ powerpc*-*-linux*) else icu_cv_host_frag=mh-cygwin-msvc fi ;; -*-*-*bsd*) icu_cv_host_frag=mh-bsd-gcc ;; +*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;; *-*-aix*) if test "$GCC" = yes; then icu_cv_host_frag=mh-aix-gcc @@ -1581,111 +3411,165 @@ powerpc*-*-linux*) *-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;; *-*-nto*) icu_cv_host_frag=mh-qnx ;; *-ncr-*) icu_cv_host_frag=mh-mpras ;; -*-sequent-*) icu_cv_host_frag=mh-ptx ;; *) icu_cv_host_frag=mh-unknown ;; esac - - -fi -echo "$ac_t""$icu_cv_host_frag" 1>&6 + +fi +echo "$as_me:$LINENO: result: $icu_cv_host_frag" >&5 +echo "${ECHO_T}$icu_cv_host_frag" >&6 case "${host}" in - *-*-hpux*) echo $ac_n "checking for floor in -lm""... $ac_c" 1>&6 -echo "configure:1597: checking for floor in -lm" >&5 -ac_lib_var=`echo m'_'floor | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + *-*-hpux*) echo "$as_me:$LINENO: checking for floor in -lm" >&5 +echo $ECHO_N "checking for floor in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_floor+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_save_LIBS="$LIBS" + ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char floor(); - -int main() { -floor() -; return 0; } -EOF -if { (eval echo configure:1616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 + builtin and then its argument prototype would still apply. */ +char floor (); +int +main () +{ +floor (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_floor=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_floor=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_floor" >&5 +echo "${ECHO_T}$ac_cv_lib_m_floor" >&6 +if test $ac_cv_lib_m_floor = yes; then LIB_M="-lm" -else - echo "$ac_t""no" 1>&6 fi ;; - - *) echo $ac_n "checking for floor in -lm""... $ac_c" 1>&6 -echo "configure:1638: checking for floor in -lm" >&5 -ac_lib_var=`echo m'_'floor | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" + + *) +echo "$as_me:$LINENO: checking for floor in -lm" >&5 +echo $ECHO_N "checking for floor in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_floor+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char floor(); - -int main() { -floor() -; return 0; } -EOF -if { (eval echo configure:1657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_floor=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_floor=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_floor" >&5 +echo "${ECHO_T}$ac_cv_lib_m_floor" >&6 +if test $ac_cv_lib_m_floor = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF LIBS="-lm $LIBS" -else - echo "$ac_t""no" 1>&6 fi - + LIB_M="" ;; esac -echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6 -echo "configure:1689: checking whether to build shared libraries" >&5 +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 enabled=no # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then @@ -1698,13 +3582,13 @@ if test "${enable_shared+set}" = set; then else enabled=yes; ENABLE_SHARED=YES -fi - -echo "$ac_t""$enabled" 1>&6 +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 -echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6 -echo "configure:1708: checking whether to build static libraries" >&5 +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 enabled=no # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then @@ -1714,13 +3598,13 @@ if test "${enable_static+set}" = set; then no) ;; *) ;; esac -fi - -echo "$ac_t""$enabled" 1>&6 +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 -echo $ac_n "checking whether to build debug libraries""... $ac_c" 1>&6 -echo "configure:1724: checking whether to build debug libraries" >&5 +echo "$as_me:$LINENO: checking whether to build debug libraries" >&5 +echo $ECHO_N "checking whether to build debug libraries... $ECHO_C" >&6 enabled=no ENABLE_DEBUG=0 # Check whether --enable-debug or --disable-debug was given. @@ -1730,96 +3614,170 @@ if test "${enable_debug+set}" = set; then yes|"") enabled=yes; ENABLE_DEBUG=1 ;; *) ;; esac -fi +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 -echo "$ac_t""$enabled" 1>&6 - -echo $ac_n "checking whether to build release libraries""... $ac_c" 1>&6 -echo "configure:1740: checking whether to build release libraries" >&5 +echo "$as_me:$LINENO: checking whether to build release libraries" >&5 +echo $ECHO_N "checking whether to build release libraries... $ECHO_C" >&6 enabled=yes ENABLE_RELEASE=1 # Check whether --enable-release or --disable-release was given. if test "${enable_release+set}" = set; then enableval="$enable_release" case "${enableval}" in - no) enabled=no; ENABLE_RELEASE=0 ;; + no) enabled=no; ENABLE_RELEASE=0 ;; + *) ;; + esac +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 + + +echo "$as_me:$LINENO: checking whether to enable draft APIs" >&5 +echo $ECHO_N "checking whether to enable draft APIs... $ECHO_C" >&6 +enabled=yes +U_DEFAULT_SHOW_DRAFT=1 +# Check whether --enable-draft or --disable-draft was given. +if test "${enable_draft+set}" = set; then + enableval="$enable_draft" + case "${enableval}" in + no) enabled=no; U_DEFAULT_SHOW_DRAFT=0 ;; *) ;; esac +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 +if test "$U_DEFAULT_SHOW_DRAFT" = 0; then + CPPFLAGS="$CPPFLAGS -DU_SHOW_DRAFT_API" fi -echo "$ac_t""$enabled" 1>&6 - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1758: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + fi fi -RANLIB="$ac_cv_prog_RANLIB" +RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$ac_t""no" 1>&6 + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1788: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_AR'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - case "$AR" in - /*) + case $AR in + [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; - ?:/*) - ac_cv_path_AR="$AR" # Let the user override the test with a dos path. - ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH:/bin:/usr/bin:/usr/ccs/bin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_AR="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/bin:/usr/bin:/usr/ccs/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + test -z "$ac_cv_path_AR" && ac_cv_path_AR="echo archiver ar not found re-run configure ; false" ;; esac fi -AR="$ac_cv_path_AR" +AR=$ac_cv_path_AR + if test -n "$AR"; then - echo "$ac_t""$AR" 1>&6 + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -echo $ac_n "checking whether to enable renaming of symbols""... $ac_c" 1>&6 -echo "configure:1823: checking whether to enable renaming of symbols" >&5 +echo "$as_me:$LINENO: checking whether to enable renaming of symbols" >&5 +echo $ECHO_N "checking whether to enable renaming of symbols... $ECHO_C" >&6 enabled=yes U_DISABLE_RENAMING=0 # Check whether --enable-renaming or --disable-renaming was given. @@ -1830,13 +3788,13 @@ if test "${enable_renaming+set}" = set; then no) enabled=no; U_DISABLE_RENAMING=1 ;; *) ;; esac -fi +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 -echo "$ac_t""$enabled" 1>&6 - -echo $ac_n "checking whether to enable function and data tracing""... $ac_c" 1>&6 -echo "configure:1840: checking whether to enable function and data tracing" >&5 +echo "$as_me:$LINENO: checking whether to enable function and data tracing" >&5 +echo $ECHO_N "checking whether to enable function and data tracing... $ECHO_C" >&6 enabled=yes U_ENABLE_TRACING=1 # Check whether --enable-tracing or --disable-tracing was given. @@ -1847,9 +3805,9 @@ if test "${enable_tracing+set}" = set; then no) enabled=no; U_ENABLE_TRACING=0 ;; *) ;; esac -fi - -echo "$ac_t""$enabled" 1>&6 +fi; +echo "$as_me:$LINENO: result: $enabled" >&5 +echo "${ECHO_T}$enabled" >&6 # Check whether --enable-rpath or --disable-rpath was given. @@ -1863,39 +3821,66 @@ if test "${enable_rpath+set}" = set; then else ENABLE_RPATH=NO -fi - +fi; -echo $ac_n "checking for definition of U_INLINE for C""... $ac_c" 1>&6 -echo "configure:1873: checking for definition of U_INLINE for C" >&5 -if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for definition of U_INLINE for C" >&5 +echo $ECHO_N "checking for definition of U_INLINE for C... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ return 0;} $ac_kw int foo() { -; return 0; } -EOF -if { (eval echo configure:1887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_c_inline=$ac_kw; break else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done - -fi -echo "$ac_t""$ac_cv_c_inline" 1>&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 case "$ac_cv_c_inline" in yes) U_INLINE= "inline" ;; no ) U_INLINE= ;; @@ -1911,12 +3896,13 @@ if test "${enable_threads+set}" = set; then case "${enableval}" in yes) threads=true ;; no) threads=false ;; - *) { echo "configure: error: bad value ${enableval} for --enable-threads" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-threads" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-threads" >&2;} + { (exit 1); exit 1; }; } ;; esac else threads=true -fi - +fi; if test "$threads" = true; then THREADS_TRUE= @@ -1927,421 +3913,1140 @@ fi ICU_USE_THREADS=0 if test $threads = true; then - - echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6 -echo "configure:1933: checking for pthread_attr_init in -lpthread" >&5 -ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" + + +echo "$as_me:$LINENO: checking for pthread_attr_init in -lpthread" >&5 +echo $ECHO_N "checking for pthread_attr_init in -lpthread... $ECHO_C" >&6 +if test "${ac_cv_lib_pthread_pthread_attr_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char pthread_attr_init(); - -int main() { -pthread_attr_init() -; return 0; } -EOF -if { (eval echo configure:1952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo pthread | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_pthread_pthread_attr_init=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_pthread_pthread_attr_init=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_attr_init" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_attr_init" >&6 +if test $ac_cv_lib_pthread_pthread_attr_init = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF LIBS="-lpthread $LIBS" -else - echo "$ac_t""no" 1>&6 fi if test $ac_cv_lib_pthread_pthread_attr_init = yes; then - ICU_USE_THREADS=1 + ICU_USE_THREADS=1 else - - -echo $ac_n "checking for library containing pthread_mutex_destroy""... $ac_c" 1>&6 -echo "configure:1985: checking for library containing pthread_mutex_destroy" >&5 -if eval "test \"`echo '$''{'ac_cv_search_pthread_mutex_destroy'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + + +echo "$as_me:$LINENO: checking for library containing pthread_mutex_destroy" >&5 +echo $ECHO_N "checking for library containing pthread_mutex_destroy... $ECHO_C" >&6 +if test "${ac_cv_search_pthread_mutex_destroy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_pthread_mutex_destroy="no" for i in pthread pthreads c_r ; do LIBS="-l$i $ac_func_search_save_LIBS" -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char pthread_mutex_destroy(); - -int main() { -pthread_mutex_destroy() -; return 0; } -EOF -if { (eval echo configure:2005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + builtin and then its argument prototype would still apply. */ +char pthread_mutex_destroy (); +int +main () +{ +pthread_mutex_destroy (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_search_pthread_mutex_destroy="-l$i" break else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext done if test "$ac_cv_search_pthread_mutex_destroy" = "no"; then -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char pthread_mutex_destroy(); - -int main() { -pthread_mutex_destroy() -; return 0; } -EOF -if { (eval echo configure:2028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + builtin and then its argument prototype would still apply. */ +char pthread_mutex_destroy (); +int +main () +{ +pthread_mutex_destroy (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_search_pthread_mutex_destroy="none required" else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi LIBS="$ac_func_search_save_LIBS" fi - -echo "$ac_t""$ac_cv_search_pthread_mutex_destroy" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_search_pthread_mutex_destroy" >&5 +echo "${ECHO_T}$ac_cv_search_pthread_mutex_destroy" >&6 if test "$ac_cv_search_pthread_mutex_destroy" != "no"; then test "$ac_cv_search_pthread_mutex_destroy" = "none required" || LIBS="$ac_cv_search_pthread_mutex_destroy $LIBS" - + else : - + fi - if test "$ac_cv_search_pthread_mutex_destroy" != no; then - ICU_USE_THREADS=1 - else - echo $ac_n "checking for pthread_mutex_init in -lpthread""... $ac_c" 1>&6 -echo "configure:2052: checking for pthread_mutex_init in -lpthread" >&5 -ac_lib_var=`echo pthread'_'pthread_mutex_init | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" + if test "$ac_cv_search_pthread_mutex_destroy" != no; then + ICU_USE_THREADS=1 + else + +echo "$as_me:$LINENO: checking for pthread_mutex_init in -lpthread" >&5 +echo $ECHO_N "checking for pthread_mutex_init in -lpthread... $ECHO_C" >&6 +if test "${ac_cv_lib_pthread_pthread_mutex_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char pthread_mutex_init (); +int +main () +{ +pthread_mutex_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_pthread_pthread_mutex_init=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_pthread_pthread_mutex_init=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_mutex_init" >&6 +if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +fi + + if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then + ICU_USE_THREADS=1 + fi + fi + + echo "$as_me:$LINENO: checking for pthread_mutex_lock" >&5 +echo $ECHO_N "checking for pthread_mutex_lock... $ECHO_C" >&6 +if test "${ac_cv_func_pthread_mutex_lock+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define pthread_mutex_lock to an innocuous variant, in case declares pthread_mutex_lock. + For example, HP-UX 11i declares gettimeofday. */ +#define pthread_mutex_lock innocuous_pthread_mutex_lock + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char pthread_mutex_lock (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef pthread_mutex_lock + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char pthread_mutex_init(); - -int main() { -pthread_mutex_init() -; return 0; } -EOF -if { (eval echo configure:2071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" + builtin and then its argument prototype would still apply. */ +char pthread_mutex_lock (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_pthread_mutex_lock) || defined (__stub___pthread_mutex_lock) +choke me +#else +char (*f) () = pthread_mutex_lock; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != pthread_mutex_lock; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_pthread_mutex_lock=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_pthread_mutex_lock=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_pthread_mutex_lock" >&5 +echo "${ECHO_T}$ac_cv_func_pthread_mutex_lock" >&6 + + + if test $ac_cv_func_pthread_mutex_lock = yes; then + ICU_USE_THREADS=1 + fi + fi + case "${host}" in + *-pc-cygwin*|*-pc-mingw*) + ICU_USE_THREADS=1 + if test "$ac_cv_c_compiler_gnu" = no; then + ICU_USE_THREADS=1 + if test $ENABLE_DEBUG = 1; then + CFLAGS="${CFLAGS} /MDd" + CXXFLAGS="${CXXFLAGS} /MDd" + else + CFLAGS="${CFLAGS} /MD" + CXXFLAGS="${CXXFLAGS} /MD" + fi + fi ;; + *-*-hpux*) + case "${icu_cv_host_frag}" in + mh-hpux-acc) + OLD_CXXFLAGS="${CXXFLAGS}" + CXXFLAGS="${CXXFLAGS} -mt" + if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then + CXXFLAGS="${OLD_CXXFLAGS}" + fi + ;; + esac + ;; + esac +fi + + + + +# The AC_FUNC_MMAP macro doesn't work properly. It seems to be too specific. +# Do this check instead. +HAVE_MMAP=0 +echo "$as_me:$LINENO: checking for mmap" >&5 +echo $ECHO_N "checking for mmap... $ECHO_C" >&6 +if test "${ac_cv_func_mmap_ok+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include + +int +main () +{ + mmap((void *)0, 0, PROT_READ, 0, 0, 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_mmap_ok=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_mmap_ok=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + +echo "$as_me:$LINENO: result: $ac_cv_func_mmap_ok" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_ok" >&6 +if test $ac_cv_func_mmap_ok = yes +then + HAVE_MMAP=1 +fi + + +GENCCODE_ASSEMBLY= +case "${host}" in +i*86-*-linux*|x86_64-*-linux*|powerpc*-*-linux*|i*86-*-*bsd*|i*86-*-solaris*) + if test "$GCC" = yes; then + GENCCODE_ASSEMBLY="-a gcc" + fi ;; +sparc-*-solaris*) + GENCCODE_ASSEMBLY="-a sun" + ;; +esac + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no fi rm -f conftest* -LIBS="$ac_save_LIBS" fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo pthread | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : else - echo "$ac_t""no" 1>&6 + ac_cv_header_stdc=no fi +rm -f conftest* - if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then - ICU_USE_THREADS=1 - fi - fi +fi - echo $ac_n "checking for pthread_mutex_lock""... $ac_c" 1>&6 -echo "configure:2104: checking for pthread_mutex_lock" >&5 -if eval "test \"`echo '$''{'ac_cv_func_pthread_mutex_lock'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char pthread_mutex_lock(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_pthread_mutex_lock) || defined (__stub___pthread_mutex_lock) -choke me + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else -pthread_mutex_lock(); +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif -; return 0; } -EOF -if { (eval echo configure:2132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_pthread_mutex_lock=yes" +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_pthread_mutex_lock=no" + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest* fi - -if eval "test \"`echo '$ac_cv_func_'pthread_mutex_lock`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF - if test $ac_cv_func_pthread_mutex_lock = yes; then - ICU_USE_THREADS=1 - fi - case "${host}" in - *-pc-cygwin*|*-pc-mingw*) - if test "$ac_cv_prog_gcc" = no; then - ICU_USE_THREADS=1 - fi ;; - *-*-hpux*) - case "${icu_cv_host_frag}" in - mh-hpux-acc) - OLD_CXXFLAGS="${CXXFLAGS}" - CXXFLAGS="${CXXFLAGS} -mt" - if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then - CXXFLAGS="${OLD_CXXFLAGS}" - fi - ;; - esac - ;; - esac - fi fi +# On IRIX 5.3, sys/types and inttypes.h are conflicting. -# The AC_FUNC_MMAP macro doesn't work properly. It seems to be too specific. -# Do this check instead. -HAVE_MMAP=0 -echo $ac_n "checking for mmap""... $ac_c" 1>&6 -echo "configure:2182: checking for mmap" >&5 -if eval "test \"`echo '$''{'ac_cv_func_mmap_ok'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#include -#include -#include - -int main() { - mmap((void *)0, 0, PROT_READ, 0, 0, 0); -; return 0; } -EOF -if { (eval echo configure:2199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_func_mmap_ok=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_func_mmap_ok=no -fi -rm -f conftest* -fi -echo "$ac_t""$ac_cv_func_mmap_ok" 1>&6 -if test $ac_cv_func_mmap_ok = yes -then - HAVE_MMAP=1 -fi -GENCCODE_ASSEMBLY= -case "${host}" in -i*86-*-*bsd*|i*86-*-linux*|x86_64-*-linux*|powerpc*-*-linux*) - if test "$GCC" = yes; then - GENCCODE_ASSEMBLY="-a gcc" - fi ;; -esac -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:2229: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2250: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2267: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : + +done + + + +for ac_header in inttypes.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" + ac_cpp_err=yes fi - CPP="$ac_cv_prog_CPP" +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes else - ac_cv_prog_CPP="$CPP" + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no fi -echo "$ac_t""$CPP" 1>&6 +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 -for ac_hdr in inttypes.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2312: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" fi -rm -f conftest* +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + fi + done if test $ac_cv_header_inttypes_h = no; then @@ -2350,7 +5055,8 @@ else U_HAVE_INTTYPES_H=1 fi if test "$CC" = ccc; then - echo "$ac_t"""C compiler set to CCC ${CC}" " 1>&6 + echo "$as_me:$LINENO: result: \"C compiler set to CCC ${CC}\" " >&5 +echo "${ECHO_T}\"C compiler set to CCC ${CC}\" " >&6 case "${host}" in alpha*-*-*) U_HAVE_INTTYPES_H=0; esac @@ -2358,6 +5064,7 @@ fi + # Check whether --with-iostream or --without-iostream was given. if test "${with_iostream+set}" = set; then withval="$with_iostream" @@ -2366,23 +5073,24 @@ if test "${with_iostream+set}" = set; then old) streams=198506 ;; std) streams=199711 ;; auto) streams= ;; - *) { echo "configure: error: bad value ${withval} for --with-iostream" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${withval} for --with-iostream" >&5 +echo "$as_me: error: bad value ${withval} for --with-iostream" >&2;} + { (exit 1); exit 1; }; } ;; esac else streams= -fi - +fi; U_IOSTREAM_SOURCE=0 if test x$streams != xnone then - - ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + + + ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu OLD_CXXFLAGS="${CXXFLAGS}" case "${icu_cv_host_frag}" in @@ -2390,143 +5098,123 @@ cross_compiling=$ac_cv_prog_cxx_cross CXXFLAGS="${CXXFLAGS} -AA" ;; esac - echo $ac_n "checking iostream usability""... $ac_c" 1>&6 -echo "configure:2395: checking iostream usability" >&5 - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for iostream usability... $ECHO_C" >&6 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include -int main() { +int +main () +{ -; return 0; } -EOF -if { (eval echo configure:2404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_header_iostream=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_iostream=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_iostream=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $icu_cv_host_frag = mh-cygwin-msvc then ac_cv_header_iostream=yes fi - echo "$ac_t""$ac_cv_header_iostream" 1>&6 + echo "$as_me:$LINENO: result: $ac_cv_header_iostream" >&5 +echo "${ECHO_T}$ac_cv_header_iostream" >&6 if test $ac_cv_header_iostream = yes then U_IOSTREAM_SOURCE=199711 else CXXFLAGS="${OLD_CXXFLAGS}" - echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 -echo "configure:2425: checking how to run the C++ preprocessor" >&5 -if test -z "$CXXCPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross - CXXCPP="${CXX-g++} -E" - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2443: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CXXCPP=/lib/cpp -fi -rm -f conftest* - ac_cv_prog_CXXCPP="$CXXCPP" -ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross -fi -fi -CXXCPP="$ac_cv_prog_CXXCPP" -echo "$ac_t""$CXXCPP" 1>&6 - -ac_safe=`echo "iostream.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for iostream.h""... $ac_c" 1>&6 -echo "configure:2469: checking for iostream.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2479: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -fi - - if test $ac_cv_header_iostream_h = yes; then - echo $ac_n "checking whether ostream is really defined""... $ac_c" 1>&6 -echo "configure:2502: checking whether ostream is really defined" >&5 - if eval "test \"`echo '$''{'ac_cv_iostream_ok'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking whether ostream in iostream.h is really defined... $ECHO_C" >&6 + if test "${ac_cv_iostream_ok+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include -int main() { +int +main () +{ ostream &testout = cout; testout << "test" << endl; -; return 0; } -EOF -if { (eval echo configure:2514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_iostream_ok=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_iostream_ok=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_iostream_ok=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - echo "$ac_t""$ac_cv_iostream_ok" 1>&6 - if test $ac_cv_iostream_ok = yes - then - U_IOSTREAM_SOURCE=198506 - fi + echo "$as_me:$LINENO: result: $ac_cv_iostream_ok" >&5 +echo "${ECHO_T}$ac_cv_iostream_ok" >&6 + if test $ac_cv_iostream_ok = yes + then + U_IOSTREAM_SOURCE=198506 fi fi if test x$streams != x @@ -2542,76 +5230,196 @@ fi ;; esac else - { echo "configure: error: ${withval} iostream is not available" 1>&2; exit 1; } + { { echo "$as_me:$LINENO: error: ${withval} iostream is not available" >&5 +echo "$as_me: error: ${withval} iostream is not available" >&2;} + { (exit 1); exit 1; }; } fi fi fi ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - - -echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:2560: checking whether byte ordering is bigendian" >&5 -if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_cv_c_bigendian=unknown -# See if sys/param.h defines the BYTE_ORDER macro. -cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 +if test "${ac_cv_c_bigendian+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # See if sys/param.h defines the BYTE_ORDER macro. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include -int main() { +int +main () +{ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif -; return 0; } -EOF -if { (eval echo configure:2578: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then # It does; now see whether it defined to BIG_ENDIAN or not. -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include -int main() { +int +main () +{ #if BYTE_ORDER != BIG_ENDIAN not big endian #endif -; return 0; } -EOF -if { (eval echo configure:2593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_c_bigendian=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_bigendian=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_bigendian=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 -fi -rm -f conftest* -if test $ac_cv_c_bigendian = unknown; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +# It does not; compile a test program. if test "$cross_compiling" = yes; then - { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } + # try to guess the endianness by grepping values into an object file + ac_cv_c_bigendian=unknown + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; +short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; +void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } +short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; +short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; +void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +int +main () +{ + _ascii (); _ebcdic (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then + ac_cv_c_bigendian=yes +fi +if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int +main () +{ /* Are we little or big endian? From Harbison&Steele. */ union { @@ -2621,29 +5429,50 @@ main () { u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } -EOF -if { (eval echo configure:2626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_c_bigendian=no else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_c_bigendian=yes + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes fi -rm -fr conftest* +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi +echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +echo "${ECHO_T}$ac_cv_c_bigendian" >&6 +case $ac_cv_c_bigendian in + yes) -echo "$ac_t""$ac_cv_c_bigendian" 1>&6 -if test $ac_cv_c_bigendian = yes; then - cat >> confdefs.h <<\EOF +cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 -EOF - -fi +_ACEOF + ;; + no) + ;; + *) + { { echo "$as_me:$LINENO: error: unknown endianness +presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +echo "$as_me: error: unknown endianness +presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; +esac if test $ac_cv_c_bigendian = no; then U_IS_BIG_ENDIAN=0 @@ -2656,84 +5485,160 @@ fi U_HAVE_NL_LANGINFO_CODESET=0 U_NL_LANGINFO_CODESET=-1 -echo $ac_n "checking for nl_langinfo""... $ac_c" 1>&6 -echo "configure:2661: checking for nl_langinfo" >&5 -if eval "test \"`echo '$''{'ac_cv_func_nl_langinfo'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for nl_langinfo... $ECHO_C" >&6 +if test "${ac_cv_func_nl_langinfo+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define nl_langinfo to an innocuous variant, in case declares nl_langinfo. + For example, HP-UX 11i declares gettimeofday. */ +#define nl_langinfo innocuous_nl_langinfo + /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char nl_langinfo(); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char nl_langinfo(); + which can conflict with char nl_langinfo (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -int main() { +#undef nl_langinfo +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char nl_langinfo (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_nl_langinfo) || defined (__stub___nl_langinfo) choke me #else -nl_langinfo(); +char (*f) () = nl_langinfo; +#endif +#ifdef __cplusplus +} #endif -; return 0; } -EOF -if { (eval echo configure:2689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_nl_langinfo=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_nl_langinfo=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'nl_langinfo`\" = yes"; then - echo "$ac_t""yes" 1>&6 +int +main () +{ +return f != nl_langinfo; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_nl_langinfo=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_nl_langinfo=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_nl_langinfo" >&5 +echo "${ECHO_T}$ac_cv_func_nl_langinfo" >&6 +if test $ac_cv_func_nl_langinfo = yes; then U_HAVE_NL_LANGINFO=1 else - echo "$ac_t""no" 1>&6 -U_HAVE_NL_LANGINFO=0 + U_HAVE_NL_LANGINFO=0 fi if test $U_HAVE_NL_LANGINFO -eq 1; then - echo $ac_n "checking for nl_langinfo's argument to obtain the codeset""... $ac_c" 1>&6 -echo "configure:2712: checking for nl_langinfo's argument to obtain the codeset" >&5 -if eval "test \"`echo '$''{'ac_cv_nl_langinfo_codeset'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + echo "$as_me:$LINENO: checking for nl_langinfo's argument to obtain the codeset" >&5 +echo $ECHO_N "checking for nl_langinfo's argument to obtain the codeset... $ECHO_C" >&6 +if test "${ac_cv_nl_langinfo_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_nl_langinfo_codeset="unknown" for a in CODESET _NL_CTYPE_CODESET_NAME; do - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include -int main() { +int +main () +{ nl_langinfo($a); -; return 0; } -EOF -if { (eval echo configure:2726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_nl_langinfo_codeset="$a"; break else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext done fi - -echo "$ac_t""$ac_cv_nl_langinfo_codeset" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_nl_langinfo_codeset" >&5 +echo "${ECHO_T}$ac_cv_nl_langinfo_codeset" >&6 if test x$ac_cv_nl_langinfo_codeset != xunknown then U_HAVE_NL_LANGINFO_CODESET=1 @@ -2743,42 +5648,70 @@ fi -ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross - -echo $ac_n "checking for namespace support""... $ac_c" 1>&6 -echo "configure:2755: checking for namespace support" >&5 -if eval "test \"`echo '$''{'ac_cv_namespace_ok'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for namespace support... $ECHO_C" >&6 +if test "${ac_cv_namespace_ok+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + namespace x_version {void f(){}} namespace x = x_version; using namespace x_version; - -int main() { + +int +main () +{ f(); -; return 0; } -EOF -if { (eval echo configure:2770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_namespace_ok=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_namespace_ok=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_namespace_ok=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -echo "$ac_t""$ac_cv_namespace_ok" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_namespace_ok" >&5 +echo "${ECHO_T}$ac_cv_namespace_ok" >&6 U_HAVE_NAMESPACE=1 if test $ac_cv_namespace_ok = no then @@ -2786,16 +5719,19 @@ then fi -echo $ac_n "checking for properly overriding new and delete""... $ac_c" 1>&6 -echo "configure:2791: checking for properly overriding new and delete" >&5 +echo "$as_me:$LINENO: checking for properly overriding new and delete" >&5 +echo $ECHO_N "checking for properly overriding new and delete... $ECHO_C" >&6 U_OVERRIDE_CXX_ALLOCATION=0 U_HAVE_PLACEMENT_NEW=0 -if eval "test \"`echo '$''{'ac_cv_override_cxx_allocation_ok'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include class UMemory { public: @@ -2804,35 +5740,64 @@ else void operator delete(void *p) {free(p);} void operator delete[](void *p) {free(p);} }; - -int main() { - -; return 0; } -EOF -if { (eval echo configure:2813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_override_cxx_allocation_ok=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_override_cxx_allocation_ok=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_override_cxx_allocation_ok=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -echo "$ac_t""$ac_cv_override_cxx_allocation_ok" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_override_cxx_allocation_ok" >&5 +echo "${ECHO_T}$ac_cv_override_cxx_allocation_ok" >&6 if test $ac_cv_override_cxx_allocation_ok = yes then U_OVERRIDE_CXX_ALLOCATION=1 - echo $ac_n "checking for placement new and delete""... $ac_c" 1>&6 -echo "configure:2830: checking for placement new and delete" >&5 - if eval "test \"`echo '$''{'ac_cv_override_placement_new_ok'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for placement new and delete... $ECHO_C" >&6 + if test "${ac_cv_override_placement_new_ok+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include class UMemory { public: @@ -2843,24 +5808,50 @@ else void * operator new(size_t, void *ptr) { return ptr; } void operator delete(void *, void *) {} }; - -int main() { - -; return 0; } -EOF -if { (eval echo configure:2852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_override_placement_new_ok=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_override_placement_new_ok=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_override_placement_new_ok=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - echo "$ac_t""$ac_cv_override_placement_new_ok" 1>&6 + echo "$as_me:$LINENO: result: $ac_cv_override_placement_new_ok" >&5 +echo "${ECHO_T}$ac_cv_override_placement_new_ok" >&6 if test $ac_cv_override_placement_new_ok = yes then U_HAVE_PLACEMENT_NEW=1 @@ -2870,59 +5861,101 @@ fi ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking for popen""... $ac_c" 1>&6 -echo "configure:2881: checking for popen" >&5 -if eval "test \"`echo '$''{'ac_cv_func_popen'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for popen... $ECHO_C" >&6 +if test "${ac_cv_func_popen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define popen to an innocuous variant, in case declares popen. + For example, HP-UX 11i declares gettimeofday. */ +#define popen innocuous_popen + /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char popen(); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char popen(); + which can conflict with char popen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -int main() { +#undef popen +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char popen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_popen) || defined (__stub___popen) choke me #else -popen(); +char (*f) () = popen; +#endif +#ifdef __cplusplus +} #endif -; return 0; } -EOF -if { (eval echo configure:2909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_popen=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_popen=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'popen`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -fi +int +main () +{ +return f != popen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_popen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_popen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_popen" >&5 +echo "${ECHO_T}$ac_cv_func_popen" >&6 if test x$ac_cv_func_popen = xyes then @@ -2932,53 +5965,96 @@ else fi -echo $ac_n "checking for tzset""... $ac_c" 1>&6 -echo "configure:2937: checking for tzset" >&5 -if eval "test \"`echo '$''{'ac_cv_func_tzset'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for tzset" >&5 +echo $ECHO_N "checking for tzset... $ECHO_C" >&6 +if test "${ac_cv_func_tzset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define tzset to an innocuous variant, in case declares tzset. + For example, HP-UX 11i declares gettimeofday. */ +#define tzset innocuous_tzset + /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char tzset(); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char tzset(); + which can conflict with char tzset (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -int main() { +#undef tzset +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tzset (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_tzset) || defined (__stub___tzset) choke me #else -tzset(); +char (*f) () = tzset; +#endif +#ifdef __cplusplus +} #endif -; return 0; } -EOF -if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_tzset=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_tzset=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'tzset`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -fi +int +main () +{ +return f != tzset; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_tzset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_tzset=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_tzset" >&5 +echo "${ECHO_T}$ac_cv_func_tzset" >&6 U_HAVE_TZSET=0 if test x$ac_cv_func_tzset = xyes @@ -2986,53 +6062,96 @@ then U_TZSET=tzset U_HAVE_TZSET=1 else - echo $ac_n "checking for _tzset""... $ac_c" 1>&6 -echo "configure:2991: checking for _tzset" >&5 -if eval "test \"`echo '$''{'ac_cv_func__tzset'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for _tzset... $ECHO_C" >&6 +if test "${ac_cv_func__tzset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _tzset to an innocuous variant, in case declares _tzset. + For example, HP-UX 11i declares gettimeofday. */ +#define _tzset innocuous__tzset + /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _tzset(); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _tzset(); + which can conflict with char _tzset (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -int main() { +#undef _tzset +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char _tzset (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub__tzset) || defined (__stub____tzset) choke me #else -_tzset(); +char (*f) () = _tzset; +#endif +#ifdef __cplusplus +} #endif -; return 0; } -EOF -if { (eval echo configure:3019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func__tzset=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func__tzset=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'_tzset`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -fi +int +main () +{ +return f != _tzset; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func__tzset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func__tzset=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func__tzset" >&5 +echo "${ECHO_T}$ac_cv_func__tzset" >&6 if test x$ac_cv_func__tzset = xyes then @@ -3044,14 +6163,17 @@ fi U_HAVE_TZNAME=0 -echo $ac_n "checking for tzname""... $ac_c" 1>&6 -echo "configure:3049: checking for tzname" >&5 -if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for tzname... $ECHO_C" >&6 +if test "${ac_cv_var_tzname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #ifndef __USE_POSIX #define __USE_POSIX #endif @@ -3060,56 +6182,109 @@ else #ifndef tzname /* For SGI. */ extern char *tzname[]; /* RS6000 and others reject char **tzname. */ #endif -int main() { +int +main () +{ atoi(*tzname); -; return 0; } -EOF -if { (eval echo configure:3068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_var_tzname=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_var_tzname=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_var_tzname=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_var_tzname" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5 +echo "${ECHO_T}$ac_cv_var_tzname" >&6 if test $ac_cv_var_tzname = yes; then U_TZNAME=tzname U_HAVE_TZNAME=1 else - echo $ac_n "checking for _tzname""... $ac_c" 1>&6 -echo "configure:3086: checking for _tzname" >&5 -if eval "test \"`echo '$''{'ac_cv_var__tzname'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for _tzname... $ECHO_C" >&6 +if test "${ac_cv_var__tzname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include extern char *_tzname[]; - -int main() { + +int +main () +{ atoi(*_tzname); -; return 0; } -EOF -if { (eval echo configure:3101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_var__tzname=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_var__tzname=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_var__tzname=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_var__tzname" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_var__tzname" >&5 +echo "${ECHO_T}$ac_cv_var__tzname" >&6 if test $ac_cv_var__tzname = yes; then U_TZNAME=_tzname U_HAVE_TZNAME=1 @@ -3118,14 +6293,17 @@ fi -echo $ac_n "checking for timezone""... $ac_c" 1>&6 -echo "configure:3123: checking for timezone" >&5 -if eval "test \"`echo '$''{'ac_cv_var_timezone'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for timezone" >&5 +echo $ECHO_N "checking for timezone... $ECHO_C" >&6 +if test "${ac_cv_var_timezone+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #ifndef __USE_POSIX #define __USE_POSIX #endif @@ -3134,86 +6312,167 @@ else #endif #include -int main() { +int +main () +{ timezone = 1; -; return 0; } -EOF -if { (eval echo configure:3142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_var_timezone=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_var_timezone=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_var_timezone=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_var_timezone" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_var_timezone" >&5 +echo "${ECHO_T}$ac_cv_var_timezone" >&6 U_HAVE_TIMEZONE=0 if test $ac_cv_var_timezone = yes; then U_TIMEZONE=timezone U_HAVE_TIMEZONE=1 else - echo $ac_n "checking for __timezone""... $ac_c" 1>&6 -echo "configure:3161: checking for __timezone" >&5 -if eval "test \"`echo '$''{'ac_cv_var___timezone'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for __timezone... $ECHO_C" >&6 +if test "${ac_cv_var___timezone+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include - -int main() { + +int +main () +{ __timezone = 1; -; return 0; } -EOF -if { (eval echo configure:3174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_var___timezone=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_var___timezone=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_var___timezone=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_var___timezone" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_var___timezone" >&5 +echo "${ECHO_T}$ac_cv_var___timezone" >&6 if test $ac_cv_var___timezone = yes; then U_TIMEZONE=__timezone U_HAVE_TIMEZONE=1 else - echo $ac_n "checking for _timezone""... $ac_c" 1>&6 -echo "configure:3192: checking for _timezone" >&5 -if eval "test \"`echo '$''{'ac_cv_var__timezone'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for _timezone... $ECHO_C" >&6 +if test "${ac_cv_var__timezone+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include - -int main() { + +int +main () +{ _timezone = 1; -; return 0; } -EOF -if { (eval echo configure:3205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_var__timezone=yes else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_var__timezone=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_var__timezone=no fi -rm -f conftest* +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_var__timezone" 1>&6 +echo "$as_me:$LINENO: result: $ac_cv_var__timezone" >&5 +echo "${ECHO_T}$ac_cv_var__timezone" >&6 if test $ac_cv_var__timezone = yes; then U_TIMEZONE=_timezone U_HAVE_TIMEZONE=1 @@ -3223,371 +6482,531 @@ fi -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3228: checking for ANSI C header files" >&5 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#include -#include -#include -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes +echo "$as_me:$LINENO: checking for int8_t" >&5 +echo $ECHO_N "checking for int8_t... $ECHO_C" >&6 +if test "${ac_cv_type_int8_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int8_t *) 0) + return 0; +if (sizeof (int8_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int8_t=yes else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_int8_t=no fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -if { (eval echo configure:3308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then +echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5 +echo "${ECHO_T}$ac_cv_type_int8_t" >&6 +if test $ac_cv_type_int8_t = yes; then : else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* -fi -fi -fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF +cat >>confdefs.h <<_ACEOF +#define int8_t signed char +_ACEOF fi -echo $ac_n "checking for int8_t""... $ac_c" 1>&6 -echo "configure:3332: checking for int8_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_int8_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for uint8_t" >&5 +echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint8_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])int8_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_int8_t=yes + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((uint8_t *) 0) + return 0; +if (sizeof (uint8_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uint8_t=yes else - rm -rf conftest* - ac_cv_type_int8_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_uint8_t=no fi -echo "$ac_t""$ac_cv_type_int8_t" 1>&6 -if test $ac_cv_type_int8_t = no; then - cat >> confdefs.h <<\EOF -#define int8_t signed char -EOF - +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi - -echo $ac_n "checking for uint8_t""... $ac_c" 1>&6 -echo "configure:3365: checking for uint8_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_uint8_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])uint8_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_uint8_t=yes +echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint8_t" >&6 +if test $ac_cv_type_uint8_t = yes; then + : else - rm -rf conftest* - ac_cv_type_uint8_t=no -fi -rm -f conftest* -fi -echo "$ac_t""$ac_cv_type_uint8_t" 1>&6 -if test $ac_cv_type_uint8_t = no; then - cat >> confdefs.h <<\EOF +cat >>confdefs.h <<_ACEOF #define uint8_t unsigned char -EOF +_ACEOF fi -echo $ac_n "checking for int16_t""... $ac_c" 1>&6 -echo "configure:3398: checking for int16_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_int16_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for int16_t" >&5 +echo $ECHO_N "checking for int16_t... $ECHO_C" >&6 +if test "${ac_cv_type_int16_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])int16_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int16_t *) 0) + return 0; +if (sizeof (int16_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_type_int16_t=yes else - rm -rf conftest* - ac_cv_type_int16_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_int16_t=no fi -echo "$ac_t""$ac_cv_type_int16_t" 1>&6 -if test $ac_cv_type_int16_t = no; then - cat >> confdefs.h <<\EOF +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5 +echo "${ECHO_T}$ac_cv_type_int16_t" >&6 +if test $ac_cv_type_int16_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF #define int16_t signed short -EOF +_ACEOF fi -echo $ac_n "checking for uint16_t""... $ac_c" 1>&6 -echo "configure:3431: checking for uint16_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_uint16_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for uint16_t" >&5 +echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint16_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])uint16_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((uint16_t *) 0) + return 0; +if (sizeof (uint16_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_type_uint16_t=yes else - rm -rf conftest* - ac_cv_type_uint16_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_uint16_t=no fi -echo "$ac_t""$ac_cv_type_uint16_t" 1>&6 -if test $ac_cv_type_uint16_t = no; then - cat >> confdefs.h <<\EOF +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint16_t" >&6 +if test $ac_cv_type_uint16_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF #define uint16_t unsigned short -EOF +_ACEOF fi -echo $ac_n "checking for int32_t""... $ac_c" 1>&6 -echo "configure:3464: checking for int32_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_int32_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for int32_t" >&5 +echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 +if test "${ac_cv_type_int32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int32_t *) 0) + return 0; +if (sizeof (int32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_type_int32_t=yes else - rm -rf conftest* - ac_cv_type_int32_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_int32_t=no fi -echo "$ac_t""$ac_cv_type_int32_t" 1>&6 -if test $ac_cv_type_int32_t = no; then - cat >> confdefs.h <<\EOF +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 +echo "${ECHO_T}$ac_cv_type_int32_t" >&6 +if test $ac_cv_type_int32_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF #define int32_t signed long -EOF +_ACEOF fi -echo $ac_n "checking for uint32_t""... $ac_c" 1>&6 -echo "configure:3497: checking for uint32_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_uint32_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for uint32_t" >&5 +echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((uint32_t *) 0) + return 0; +if (sizeof (uint32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_type_uint32_t=yes else - rm -rf conftest* - ac_cv_type_uint32_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_uint32_t=no fi -echo "$ac_t""$ac_cv_type_uint32_t" 1>&6 -if test $ac_cv_type_uint32_t = no; then - cat >> confdefs.h <<\EOF +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 +if test $ac_cv_type_uint32_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF #define uint32_t unsigned long -EOF +_ACEOF fi -echo $ac_n "checking for int64_t""... $ac_c" 1>&6 -echo "configure:3530: checking for int64_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_int64_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for int64_t" >&5 +echo $ECHO_N "checking for int64_t... $ECHO_C" >&6 +if test "${ac_cv_type_int64_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])int64_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int64_t *) 0) + return 0; +if (sizeof (int64_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_type_int64_t=yes else - rm -rf conftest* - ac_cv_type_int64_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_int64_t=no fi -echo "$ac_t""$ac_cv_type_int64_t" 1>&6 -if test $ac_cv_type_int64_t = no; then - cat >> confdefs.h <<\EOF +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5 +echo "${ECHO_T}$ac_cv_type_int64_t" >&6 +if test $ac_cv_type_int64_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF #define int64_t signed long long -EOF +_ACEOF fi -echo $ac_n "checking for uint64_t""... $ac_c" 1>&6 -echo "configure:3563: checking for uint64_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_uint64_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking for uint64_t" >&5 +echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint64_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])uint64_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((uint64_t *) 0) + return 0; +if (sizeof (uint64_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_type_uint64_t=yes else - rm -rf conftest* - ac_cv_type_uint64_t=no -fi -rm -f conftest* + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_type_uint64_t=no fi -echo "$ac_t""$ac_cv_type_uint64_t" 1>&6 -if test $ac_cv_type_uint64_t = no; then - cat >> confdefs.h <<\EOF +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint64_t" >&6 +if test $ac_cv_type_uint64_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF #define uint64_t unsigned long long -EOF +_ACEOF fi @@ -3648,111 +7067,281 @@ HAVE_UINT64_T=1 fi -ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 -echo "configure:3654: checking for wchar.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +if test "${ac_cv_header_wchar_h+set}" = set; then + echo "$as_me:$LINENO: checking for wchar.h" >&5 +echo $ECHO_N "checking for wchar.h... $ECHO_C" >&6 +if test "${ac_cv_header_wchar_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_wchar_h" >&5 +echo "${ECHO_T}$ac_cv_header_wchar_h" >&6 else - cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking wchar.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default #include -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3664: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking wchar.h presence" >&5 +echo $ECHO_N "checking wchar.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes fi -rm -f conftest* +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: wchar.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: wchar.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: wchar.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: wchar.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: wchar.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: wchar.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: wchar.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: wchar.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: wchar.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: wchar.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: wchar.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: wchar.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: wchar.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: wchar.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: wchar.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: wchar.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for wchar.h" >&5 +echo $ECHO_N "checking for wchar.h... $ECHO_C" >&6 +if test "${ac_cv_header_wchar_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - echo "$ac_t""no" 1>&6 + ac_cv_header_wchar_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_wchar_h" >&5 +echo "${ECHO_T}$ac_cv_header_wchar_h" >&6 + fi + if test "$ac_cv_header_wchar_h" = no then U_HAVE_WCHAR_H=0 U_HAVE_WCSCPY=0 else - cat >> confdefs.h <<\EOF + cat >>confdefs.h <<\_ACEOF #define HAVE_WCHAR_H 1 -EOF +_ACEOF U_HAVE_WCHAR_H=1 - -echo $ac_n "checking for library containing wcscpy""... $ac_c" 1>&6 -echo "configure:3697: checking for library containing wcscpy" >&5 -if eval "test \"`echo '$''{'ac_cv_search_wcscpy'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_func_search_save_LIBS="$LIBS" -ac_cv_search_wcscpy="no" -cat > conftest.$ac_ext <&5 +echo $ECHO_N "checking for library containing wcscpy... $ECHO_C" >&6 +if test "${ac_cv_search_wcscpy+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_func_search_save_LIBS=$LIBS +ac_cv_search_wcscpy=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char wcscpy(); - -int main() { -wcscpy() -; return 0; } -EOF -if { (eval echo configure:3715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* + builtin and then its argument prototype would still apply. */ +char wcscpy (); +int +main () +{ +wcscpy (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_search_wcscpy="none required" else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi -rm -f conftest* -test "$ac_cv_search_wcscpy" = "no" && for i in wcs w; do -LIBS="-l$i $ac_func_search_save_LIBS" -cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + /* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif /* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char wcscpy(); - -int main() { -wcscpy() -; return 0; } -EOF -if { (eval echo configure:3737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_search_wcscpy="-l$i" + builtin and then its argument prototype would still apply. */ +char wcscpy (); +int +main () +{ +wcscpy (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_wcscpy="-l$ac_lib" break else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi -rm -f conftest* -done -LIBS="$ac_func_search_save_LIBS" +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done fi - -echo "$ac_t""$ac_cv_search_wcscpy" 1>&6 -if test "$ac_cv_search_wcscpy" != "no"; then +LIBS=$ac_func_search_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_search_wcscpy" >&5 +echo "${ECHO_T}$ac_cv_search_wcscpy" >&6 +if test "$ac_cv_search_wcscpy" != no; then test "$ac_cv_search_wcscpy" = "none required" || LIBS="$ac_cv_search_wcscpy $LIBS" - -else : - + fi + if test "$ac_cv_search_wcscpy" != no; then U_HAVE_WCSCPY=1 else @@ -3763,20 +7352,24 @@ fi ac_default_sizeof_wchar_t=4 -echo $ac_n "checking size of wchar_t""... $ac_c" 1>&6 -echo "configure:3768: checking size of wchar_t" >&5 -if eval "test \"`echo '$''{'ac_cv_sizeof_wchar_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:$LINENO: checking size of wchar_t" >&5 +echo $ECHO_N "checking size of wchar_t... $ECHO_C" >&6 +if test "${ac_cv_sizeof_wchar_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_wchar_t=$ac_default_sizeof_wchar_t else - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #if STDC_HEADERS #include #endif +#include #if HAVE_WCHAR_H #include #include @@ -3789,30 +7382,43 @@ main() fprintf(f, "%d\n", sizeof(wchar_t)); exit(0); } -EOF -if { (eval echo configure:3794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_sizeof_wchar_t=`cat conftestval` else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_wchar_t=0 + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_sizeof_wchar_t=0 fi -rm -fr conftest* +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - fi -echo "$ac_t""$ac_cv_sizeof_wchar_t" 1>&6 -cat >> confdefs.h <&5 +echo "${ECHO_T}$ac_cv_sizeof_wchar_t" >&6 +cat >>confdefs.h <<_ACEOF #define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t -EOF +_ACEOF U_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t if test $U_SIZEOF_WCHAR_T = 0; then if test $U_HAVE_WCHAR_H=1; then - { echo "configure: error: There is wchar.h but the size of wchar_t is 0" 1>&2; exit 1; } + { { echo "$as_me:$LINENO: error: There is wchar.h but the size of wchar_t is 0" >&5 +echo "$as_me: error: There is wchar.h but the size of wchar_t is 0" >&2;} + { (exit 1); exit 1; }; } fi fi @@ -3829,30 +7435,32 @@ if test "${enable_extras+set}" = set; then case "${enableval}" in yes) extras=true ;; no) extras=false ;; - *) { echo "configure: error: bad value ${enableval} for --enable-extras" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-extras" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-extras" >&2;} + { (exit 1); exit 1; }; } ;; esac else extras=true -fi - +fi; if test "$extras" = true; then EXTRAS_TRUE= else EXTRAS_TRUE='#' fi -# Check whether --enable-extras or --disable-extras was given. -if test "${enable_extras+set}" = set; then - enableval="$enable_extras" +# Check whether --enable-icuio or --disable-icuio was given. +if test "${enable_icuio+set}" = set; then + enableval="$enable_icuio" case "${enableval}" in yes) icuio=true ;; no) icuio=false ;; - *) { echo "configure: error: bad value ${enableval} for --enable-icuio" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-icuio" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-icuio" >&2;} + { (exit 1); exit 1; }; } ;; esac else icuio=true -fi - +fi; if test "$icuio" = true; then ICUIO_TRUE= @@ -3866,12 +7474,13 @@ if test "${enable_layout+set}" = set; then case "${enableval}" in yes) layout=true ;; no) layout=false ;; - *) { echo "configure: error: bad value ${enableval} for --enable-layout" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-layout" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-layout" >&2;} + { (exit 1); exit 1; }; } ;; esac else layout=true -fi - +fi; if test "$layout" = true; then LAYOUT_TRUE= @@ -3879,6 +7488,7 @@ else LAYOUT_TRUE='#' fi + # Check whether --with-data-packaging or --without-data-packaging was given. if test "${with_data_packaging+set}" = set; then withval="$with_data_packaging" @@ -3888,89 +7498,59 @@ if test "${with_data_packaging+set}" = set; then common) datapackaging=archive ;; dll) datapackaging=library ;; static) datapackaging=static ;; - *) { echo "configure: error: bad value ${withval} for --with-data-packaging" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${withval} for --with-data-packaging" >&5 +echo "$as_me: error: bad value ${withval} for --with-data-packaging" >&2;} + { (exit 1); exit 1; }; } ;; esac else datapackaging= -fi - - -thesysconfdir=`eval echo $sysconfdir` +fi; +#thesysconfdir=`eval echo $sysconfdir` +#AC_SUBST(thesysconfdir) +#thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir` +#AC_SUBST(thelibdir) thedatadir=`eval echo $datadir` -thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir` - pkgicudatadir=$datadir thepkgicudatadir=$thedatadir -# Check whether --enable-mapped or --disable-mapped was given. -if test "${enable_mapped+set}" = set; then - enableval="$enable_mapped" - case "${enableval}" in - yes) mapped=archive ;; - no) mapped=library ;; - *) { echo "configure: error: bad value ${enableval} for --enable-mapped; use --with-data-packaging now" 1>&2; exit 1; } ;; - esac -else - mapped= -fi - - -if test x"$mapped" != x; then - case $mapped in - archive) - echo "configure: warning: use --with-data-packaging=archive instead of --enable-mapped" 1>&2 - ;; - library) - echo "configure: warning: use --with-data-packaging=library instead of --disable-mapped" 1>&2 - ;; - esac - if test x"$datapackaging" != x -a x"$mapped" != x"$datapackaging"; then - { echo "configure: error: conflicting values used for --with-data-packaging and deprecated --enable-mapped" 1>&2; exit 1; } - fi - datapackaging=$mapped -fi - if test x"$datapackaging" = x -o x"$datapackaging" = xauto; then datapackaging=library fi case "$datapackaging" in files) - DATA_PACKAGING_CPPFLAGS=-DUDATA_FILES DATA_PACKAGING_MODE=files ;; archive) - DATA_PACKAGING_CPPFLAGS=-DUDATA_MAP DATA_PACKAGING_MODE=common ;; library) - DATA_PACKAGING_CPPFLAGS=-DUDATA_DLL DATA_PACKAGING_MODE=dll ;; esac +echo "$as_me:$LINENO: checking for a library suffix to use" >&5 +echo $ECHO_N "checking for a library suffix to use... $ECHO_C" >&6 -echo $ac_n "checking for a library suffix to use""... $ac_c" 1>&6 -echo "configure:3961: checking for a library suffix to use" >&5 # Check whether --with-library-suffix or --without-library-suffix was given. if test "${with_library_suffix+set}" = set; then withval="$with_library_suffix" ICULIBSUFFIX="${withval}" else ICULIBSUFFIX= -fi - +fi; msg=$ICULIBSUFFIX if test "$msg" = ""; then msg=none fi -echo "$ac_t""$msg" 1>&6 +echo "$as_me:$LINENO: result: $msg" >&5 +echo "${ECHO_T}$msg" >&6 if test "$ICULIBSUFFIX" != "" then @@ -3988,12 +7568,13 @@ if test "${enable_tests+set}" = set; then case "${enableval}" in yes) tests=true ;; no) tests=false ;; - *) { echo "configure: error: bad value ${enableval} for --enable-tests" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-tests" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-tests" >&2;} + { (exit 1); exit 1; }; } ;; esac else tests=true -fi - +fi; if test "$tests" = true; then TESTS_TRUE= @@ -4007,12 +7588,13 @@ if test "${enable_samples+set}" = set; then case "${enableval}" in yes) samples=true ;; no) samples=false ;; - *) { echo "configure: error: bad value ${enableval} for --enable-samples" 1>&2; exit 1; } ;; + *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-samples" >&5 +echo "$as_me: error: bad value ${enableval} for --enable-samples" >&2;} + { (exit 1); exit 1; }; } ;; esac else samples=true -fi - +fi; if test "$samples" = true; then SAMPLES_TRUE= @@ -4025,21 +7607,24 @@ ICUDATA_CHAR=$U_ENDIAN_CHAR case "${host}" in *-*-solaris*) platform=U_SOLARIS ;; *-*-linux*) platform=U_LINUX ;; - *-*-*bsd*) platform=U_BSD ;; + *-*-*bsd*|*-*-dragonfly*) platform=U_BSD ;; *-*-aix*) platform=U_AIX ;; *-*-hpux*) platform=U_HPUX ;; *-apple-darwin*|*-apple-rhapsody*) platform=U_DARWIN ;; *-*-cygwin*|*-*-mingw*) platform=U_CYGWIN ;; *-*ibm-openedition*|*-*-os390*) platform=OS390 - ICUDATA_CHAR="e" ;; + if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then + ICUDATA_CHAR="e" + fi ;; *-*-os400*) platform=OS400 - ICUDATA_CHAR="e" ;; + if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then + ICUDATA_CHAR="e" + fi ;; *-*-nto*) platform=U_QNX ;; *-dec-osf*) platform=U_OSF ;; *-*-beos) platform=U_BEOS ;; *-*-irix*) platform=U_IRIX ;; *-ncr-*) platform=U_MPRAS ;; - *-sequent-*) platform=PTX ;; *) platform=U_UNKNOWN_PLATFORM ;; esac @@ -4052,19 +7637,18 @@ platform_make_fragment='$(top_srcdir)/config/'"$platform_make_fragment_name" case "${host}" in *-*-solaris*) ld_rpath_suf=":" ;; *-*-linux*) ld_rpath_suf=" " ;; - *-*-*bsd*) ld_rpath_suf=" " ;; + *-*-*bsd*|*-*-dragonfly*) ld_rpath_suf=" " ;; *-*-aix*) ld_rpath_suf="" ;; *-*-hpux*) ld_rpath_suf=":" ;; *-*ibm-openedition*|*-*-os390*) ld_rpath_suf="" ;; *-*-os400*) ld_rpath_suf=" " ;; - *-sequent-*) ld_rpath_suf="" ;; *-*-irix*) ld_rpath_suf=" " ;; *) ld_rpath_suf="" ;; esac case "${host}" in - *-*-hpux*) + *-*-hpux*) if test "${icu_cv_host_frag}" = "mh-hpux-cc"; then for file in samples/date/date \ samples/cal/cal test/cintltst/cintltst \ @@ -4075,6 +7659,7 @@ case "${host}" in tools/gennames/gennames tools/gentest/gentest \ tools/pkgdata/pkgdata tools/genprops/genprops \ tools/gencase/gencase \ + tools/genbidi/genbidi \ tools/gensprep/gensprep do if test -f $file.c; then @@ -4110,537 +7695,1270 @@ then CXXFLAGS="$CXXFLAGS \$(THREADSCXXFLAGS)" fi -trap '' 1 2 15 -cat > confcache <<\EOF + ac_config_files="$ac_config_files icudefs.mk Makefile data/icupkg.inc config/Makefile.inc data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layout/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genuca/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/genctd/Makefile tools/gennames/Makefile tools/gentest/Makefile tools/gennorm/Makefile tools/genprops/Makefile tools/gencase/Makefile tools/genbidi/Makefile tools/genpname/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/dumpce/Makefile tools/tzcode/Makefile test/Makefile test/testdata/Makefile test/testdata/pkgdata.inc test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/thaitest/Makefile test/testmap/Makefile test/letest/Makefile test/threadtest/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/csdet/Makefile samples/layout/Makefile common/unicode/platform.h" +cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. # -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. # -EOF +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' fi -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - DEFS=-DHAVE_CONFIG_H -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. # Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# # Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. +# configure, is in config.log if it exists. -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.13" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi done -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "icudefs.mk \ - Makefile \ - data/icupkg.inc \ - config/Makefile.inc \ - data/Makefile \ - stubdata/Makefile \ - common/Makefile \ - i18n/Makefile \ - layout/Makefile \ - layoutex/Makefile \ - io/Makefile \ - extra/Makefile \ - extra/uconv/Makefile extra/scrptrun/Makefile \ - tools/Makefile tools/ctestfw/Makefile \ - tools/makeconv/Makefile \ - tools/genrb/Makefile \ - tools/genuca/Makefile \ - tools/genccode/Makefile \ - tools/gencmn/Makefile \ - tools/gencnval/Makefile \ - tools/gennames/Makefile \ - tools/gentest/Makefile \ - tools/gennorm/Makefile \ - tools/genprops/Makefile \ - tools/gencase/Makefile \ - tools/genpname/Makefile \ - tools/genbrk/Makefile \ - tools/gensprep/Makefile \ - tools/icuswap/Makefile \ - tools/pkgdata/Makefile \ - tools/toolutil/Makefile \ - tools/dumpce/Makefile \ - test/Makefile \ - test/testdata/Makefile \ - test/testdata/pkgdata.inc \ - test/hdrtst/Makefile \ - test/intltest/Makefile \ - test/cintltst/Makefile \ - test/iotest/Makefile \ - test/thaitest/Makefile \ - test/testmap/Makefile \ - test/letest/Makefile \ - test/threadtest/Makefile \ - samples/Makefile samples/date/Makefile \ - samples/cal/Makefile samples/layout/Makefile \ - common/unicode/platform.h common/icucfg.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@FFLAGS@%$FFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@PACKAGE@%$PACKAGE%g -s%@VERSION@%$VERSION%g -s%@LIB_VERSION@%$LIB_VERSION%g -s%@LIB_VERSION_MAJOR@%$LIB_VERSION_MAJOR%g -s%@UNICODE_VERSION@%$UNICODE_VERSION%g -s%@CC@%$CC%g -s%@CXX@%$CXX%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@STRIP@%$STRIP%g -s%@U_MAKE@%$U_MAKE%g -s%@DOXYGEN@%$DOXYGEN%g -s%@host@%$host%g -s%@host_alias@%$host_alias%g -s%@host_cpu@%$host_cpu%g -s%@host_vendor@%$host_vendor%g -s%@host_os@%$host_os%g -s%@EXEEXT@%$EXEEXT%g -s%@ARFLAGS@%$ARFLAGS%g -s%@COMPILE_LINK_ENVVAR@%$COMPILE_LINK_ENVVAR%g -s%@LIB_M@%$LIB_M%g -s%@ENABLE_SHARED@%$ENABLE_SHARED%g -s%@ENABLE_STATIC@%$ENABLE_STATIC%g -s%@ENABLE_DEBUG@%$ENABLE_DEBUG%g -s%@ENABLE_RELEASE@%$ENABLE_RELEASE%g -s%@RANLIB@%$RANLIB%g -s%@AR@%$AR%g -s%@U_DISABLE_RENAMING@%$U_DISABLE_RENAMING%g -s%@U_ENABLE_TRACING@%$U_ENABLE_TRACING%g -s%@ENABLE_RPATH@%$ENABLE_RPATH%g -s%@U_INLINE@%$U_INLINE%g -s%@THREADS_TRUE@%$THREADS_TRUE%g -s%@ICU_USE_THREADS@%$ICU_USE_THREADS%g -s%@HAVE_MMAP@%$HAVE_MMAP%g -s%@GENCCODE_ASSEMBLY@%$GENCCODE_ASSEMBLY%g -s%@CPP@%$CPP%g -s%@U_HAVE_INTTYPES_H@%$U_HAVE_INTTYPES_H%g -s%@CXXCPP@%$CXXCPP%g -s%@U_IOSTREAM_SOURCE@%$U_IOSTREAM_SOURCE%g -s%@U_IS_BIG_ENDIAN@%$U_IS_BIG_ENDIAN%g -s%@U_HAVE_NL_LANGINFO@%$U_HAVE_NL_LANGINFO%g -s%@U_HAVE_NL_LANGINFO_CODESET@%$U_HAVE_NL_LANGINFO_CODESET%g -s%@U_NL_LANGINFO_CODESET@%$U_NL_LANGINFO_CODESET%g -s%@U_HAVE_NAMESPACE@%$U_HAVE_NAMESPACE%g -s%@U_OVERRIDE_CXX_ALLOCATION@%$U_OVERRIDE_CXX_ALLOCATION%g -s%@U_HAVE_PLACEMENT_NEW@%$U_HAVE_PLACEMENT_NEW%g -s%@U_HAVE_POPEN@%$U_HAVE_POPEN%g -s%@U_HAVE_TZSET@%$U_HAVE_TZSET%g -s%@U_TZSET@%$U_TZSET%g -s%@U_HAVE_TZNAME@%$U_HAVE_TZNAME%g -s%@U_TZNAME@%$U_TZNAME%g -s%@U_HAVE_TIMEZONE@%$U_HAVE_TIMEZONE%g -s%@U_TIMEZONE@%$U_TIMEZONE%g -s%@HAVE_INT8_T@%$HAVE_INT8_T%g -s%@HAVE_UINT8_T@%$HAVE_UINT8_T%g -s%@HAVE_INT16_T@%$HAVE_INT16_T%g -s%@HAVE_UINT16_T@%$HAVE_UINT16_T%g -s%@HAVE_INT32_T@%$HAVE_INT32_T%g -s%@HAVE_UINT32_T@%$HAVE_UINT32_T%g -s%@HAVE_INT64_T@%$HAVE_INT64_T%g -s%@HAVE_UINT64_T@%$HAVE_UINT64_T%g -s%@U_HAVE_WCHAR_H@%$U_HAVE_WCHAR_H%g -s%@U_HAVE_WCSCPY@%$U_HAVE_WCSCPY%g -s%@U_SIZEOF_WCHAR_T@%$U_SIZEOF_WCHAR_T%g -s%@EXTRAS_TRUE@%$EXTRAS_TRUE%g -s%@ICUIO_TRUE@%$ICUIO_TRUE%g -s%@LAYOUT_TRUE@%$LAYOUT_TRUE%g -s%@thesysconfdir@%$thesysconfdir%g -s%@thedatadir@%$thedatadir%g -s%@thelibdir@%$thelibdir%g -s%@pkgicudatadir@%$pkgicudatadir%g -s%@thepkgicudatadir@%$thepkgicudatadir%g -s%@DATA_PACKAGING_CPPFLAGS@%$DATA_PACKAGING_CPPFLAGS%g -s%@DATA_PACKAGING_MODE@%$DATA_PACKAGING_MODE%g -s%@ICULIBSUFFIX@%$ICULIBSUFFIX%g -s%@U_HAVE_LIB_SUFFIX@%$U_HAVE_LIB_SUFFIX%g -s%@ICULIBSUFFIXCNAME@%$ICULIBSUFFIXCNAME%g -s%@TESTS_TRUE@%$TESTS_TRUE%g -s%@SAMPLES_TRUE@%$SAMPLES_TRUE%g -s%@ICUDATA_CHAR@%$ICUDATA_CHAR%g -s%@platform@%$platform%g -s%@platform_make_fragment_name@%$platform_make_fragment_name%g -s%@platform_make_fragment@%$platform_make_fragment%g -s%@ld_rpath_suf@%$ld_rpath_suf%g -s%@AIX_SHLIB@%$AIX_SHLIB%g +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file + PATH_SEPARATOR=: fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; +;; esac - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' else - ac_dir_suffix= ac_dots= + as_ln_s='ln -s' fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "icudefs.mk" ) CONFIG_FILES="$CONFIG_FILES icudefs.mk" ;; + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "data/icupkg.inc" ) CONFIG_FILES="$CONFIG_FILES data/icupkg.inc" ;; + "config/Makefile.inc" ) CONFIG_FILES="$CONFIG_FILES config/Makefile.inc" ;; + "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; + "stubdata/Makefile" ) CONFIG_FILES="$CONFIG_FILES stubdata/Makefile" ;; + "common/Makefile" ) CONFIG_FILES="$CONFIG_FILES common/Makefile" ;; + "i18n/Makefile" ) CONFIG_FILES="$CONFIG_FILES i18n/Makefile" ;; + "layout/Makefile" ) CONFIG_FILES="$CONFIG_FILES layout/Makefile" ;; + "layoutex/Makefile" ) CONFIG_FILES="$CONFIG_FILES layoutex/Makefile" ;; + "io/Makefile" ) CONFIG_FILES="$CONFIG_FILES io/Makefile" ;; + "extra/Makefile" ) CONFIG_FILES="$CONFIG_FILES extra/Makefile" ;; + "extra/uconv/Makefile" ) CONFIG_FILES="$CONFIG_FILES extra/uconv/Makefile" ;; + "extra/scrptrun/Makefile" ) CONFIG_FILES="$CONFIG_FILES extra/scrptrun/Makefile" ;; + "tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; + "tools/ctestfw/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/ctestfw/Makefile" ;; + "tools/toolutil/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/toolutil/Makefile" ;; + "tools/makeconv/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/makeconv/Makefile" ;; + "tools/genrb/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genrb/Makefile" ;; + "tools/genuca/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genuca/Makefile" ;; + "tools/genccode/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genccode/Makefile" ;; + "tools/gencmn/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gencmn/Makefile" ;; + "tools/gencnval/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gencnval/Makefile" ;; + "tools/genctd/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genctd/Makefile" ;; + "tools/gennames/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gennames/Makefile" ;; + "tools/gentest/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gentest/Makefile" ;; + "tools/gennorm/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gennorm/Makefile" ;; + "tools/genprops/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genprops/Makefile" ;; + "tools/gencase/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gencase/Makefile" ;; + "tools/genbidi/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genbidi/Makefile" ;; + "tools/genpname/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genpname/Makefile" ;; + "tools/genbrk/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/genbrk/Makefile" ;; + "tools/gensprep/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gensprep/Makefile" ;; + "tools/icupkg/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/icupkg/Makefile" ;; + "tools/icuswap/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/icuswap/Makefile" ;; + "tools/pkgdata/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/pkgdata/Makefile" ;; + "tools/dumpce/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/dumpce/Makefile" ;; + "tools/tzcode/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/tzcode/Makefile" ;; + "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; + "test/testdata/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/testdata/Makefile" ;; + "test/testdata/pkgdata.inc" ) CONFIG_FILES="$CONFIG_FILES test/testdata/pkgdata.inc" ;; + "test/hdrtst/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/hdrtst/Makefile" ;; + "test/intltest/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/intltest/Makefile" ;; + "test/cintltst/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/cintltst/Makefile" ;; + "test/iotest/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/iotest/Makefile" ;; + "test/thaitest/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/thaitest/Makefile" ;; + "test/testmap/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/testmap/Makefile" ;; + "test/letest/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/letest/Makefile" ;; + "test/threadtest/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/threadtest/Makefile" ;; + "samples/Makefile" ) CONFIG_FILES="$CONFIG_FILES samples/Makefile" ;; + "samples/date/Makefile" ) CONFIG_FILES="$CONFIG_FILES samples/date/Makefile" ;; + "samples/cal/Makefile" ) CONFIG_FILES="$CONFIG_FILES samples/cal/Makefile" ;; + "samples/csdet/Makefile" ) CONFIG_FILES="$CONFIG_FILES samples/csdet/Makefile" ;; + "samples/layout/Makefile" ) CONFIG_FILES="$CONFIG_FILES samples/layout/Makefile" ;; + "common/unicode/platform.h" ) CONFIG_FILES="$CONFIG_FILES common/unicode/platform.h" ;; + "common/icucfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS common/icucfg.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@LIB_VERSION@,$LIB_VERSION,;t t +s,@LIB_VERSION_MAJOR@,$LIB_VERSION_MAJOR,;t t +s,@UNICODE_VERSION@,$UNICODE_VERSION,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@CXX@,$CXX,;t t +s,@CXXFLAGS@,$CXXFLAGS,;t t +s,@ac_ct_CXX@,$ac_ct_CXX,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@U_MAKE@,$U_MAKE,;t t +s,@DOXYGEN@,$DOXYGEN,;t t +s,@ARFLAGS@,$ARFLAGS,;t t +s,@COMPILE_LINK_ENVVAR@,$COMPILE_LINK_ENVVAR,;t t +s,@LIB_M@,$LIB_M,;t t +s,@ENABLE_SHARED@,$ENABLE_SHARED,;t t +s,@ENABLE_STATIC@,$ENABLE_STATIC,;t t +s,@ENABLE_DEBUG@,$ENABLE_DEBUG,;t t +s,@ENABLE_RELEASE@,$ENABLE_RELEASE,;t t +s,@U_DEFAULT_SHOW_DRAFT@,$U_DEFAULT_SHOW_DRAFT,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@AR@,$AR,;t t +s,@U_DISABLE_RENAMING@,$U_DISABLE_RENAMING,;t t +s,@U_ENABLE_TRACING@,$U_ENABLE_TRACING,;t t +s,@ENABLE_RPATH@,$ENABLE_RPATH,;t t +s,@U_INLINE@,$U_INLINE,;t t +s,@THREADS_TRUE@,$THREADS_TRUE,;t t +s,@ICU_USE_THREADS@,$ICU_USE_THREADS,;t t +s,@HAVE_MMAP@,$HAVE_MMAP,;t t +s,@GENCCODE_ASSEMBLY@,$GENCCODE_ASSEMBLY,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@U_HAVE_INTTYPES_H@,$U_HAVE_INTTYPES_H,;t t +s,@U_IOSTREAM_SOURCE@,$U_IOSTREAM_SOURCE,;t t +s,@U_IS_BIG_ENDIAN@,$U_IS_BIG_ENDIAN,;t t +s,@U_HAVE_NL_LANGINFO@,$U_HAVE_NL_LANGINFO,;t t +s,@U_HAVE_NL_LANGINFO_CODESET@,$U_HAVE_NL_LANGINFO_CODESET,;t t +s,@U_NL_LANGINFO_CODESET@,$U_NL_LANGINFO_CODESET,;t t +s,@U_HAVE_NAMESPACE@,$U_HAVE_NAMESPACE,;t t +s,@U_OVERRIDE_CXX_ALLOCATION@,$U_OVERRIDE_CXX_ALLOCATION,;t t +s,@U_HAVE_PLACEMENT_NEW@,$U_HAVE_PLACEMENT_NEW,;t t +s,@U_HAVE_POPEN@,$U_HAVE_POPEN,;t t +s,@U_HAVE_TZSET@,$U_HAVE_TZSET,;t t +s,@U_TZSET@,$U_TZSET,;t t +s,@U_HAVE_TZNAME@,$U_HAVE_TZNAME,;t t +s,@U_TZNAME@,$U_TZNAME,;t t +s,@U_HAVE_TIMEZONE@,$U_HAVE_TIMEZONE,;t t +s,@U_TIMEZONE@,$U_TIMEZONE,;t t +s,@HAVE_INT8_T@,$HAVE_INT8_T,;t t +s,@HAVE_UINT8_T@,$HAVE_UINT8_T,;t t +s,@HAVE_INT16_T@,$HAVE_INT16_T,;t t +s,@HAVE_UINT16_T@,$HAVE_UINT16_T,;t t +s,@HAVE_INT32_T@,$HAVE_INT32_T,;t t +s,@HAVE_UINT32_T@,$HAVE_UINT32_T,;t t +s,@HAVE_INT64_T@,$HAVE_INT64_T,;t t +s,@HAVE_UINT64_T@,$HAVE_UINT64_T,;t t +s,@U_HAVE_WCHAR_H@,$U_HAVE_WCHAR_H,;t t +s,@U_HAVE_WCSCPY@,$U_HAVE_WCSCPY,;t t +s,@U_SIZEOF_WCHAR_T@,$U_SIZEOF_WCHAR_T,;t t +s,@EXTRAS_TRUE@,$EXTRAS_TRUE,;t t +s,@ICUIO_TRUE@,$ICUIO_TRUE,;t t +s,@LAYOUT_TRUE@,$LAYOUT_TRUE,;t t +s,@thedatadir@,$thedatadir,;t t +s,@pkgicudatadir@,$pkgicudatadir,;t t +s,@thepkgicudatadir@,$thepkgicudatadir,;t t +s,@DATA_PACKAGING_MODE@,$DATA_PACKAGING_MODE,;t t +s,@ICULIBSUFFIX@,$ICULIBSUFFIX,;t t +s,@U_HAVE_LIB_SUFFIX@,$U_HAVE_LIB_SUFFIX,;t t +s,@ICULIBSUFFIXCNAME@,$ICULIBSUFFIXCNAME,;t t +s,@TESTS_TRUE@,$TESTS_TRUE,;t t +s,@SAMPLES_TRUE@,$SAMPLES_TRUE,;t t +s,@ICUDATA_CHAR@,$ICUDATA_CHAR,;t t +s,@platform@,$platform,;t t +s,@platform_make_fragment_name@,$platform_make_fragment_name,;t t +s,@platform_make_fragment@,$platform_make_fragment,;t t +s,@ld_rpath_suf@,$ld_rpath_suf,;t t +s,@AIX_SHLIB@,$AIX_SHLIB,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; esac - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; esac - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail -while : +while grep . conftest.undefs >/dev/null do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi -fi; done + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +cat >>$CONFIG_STATUS <<\_ACEOF -exit 0 -EOF +{ (exit 0); exit 0; } +_ACEOF chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi if test $ICU_USE_THREADS = 0; then echo " *** Note: configuring the ICU without pthread support or testing. If this isn't what you want, then run configure with --enable-threads=yes or check the messages above to see why we couldn't find pthread_create()" 1>&6 fi +if test -n "`$U_MAKE -v 2>&1 | grep '^GNU Make'`"; then echo "You must use $U_MAKE to build ICU." +else +echo "WARNING: $U_MAKE may not be GNU make." +echo "This may cause ICU to fail to build. Please make sure that GNU make" +echo "is in your PATH so that this configure script can detect its location." +fi + +$as_unset _CXX_CXXSUFFIX diff --git a/icuSources/configure.in b/icuSources/configure.in index 33bb80ff..9dd94e93 100644 --- a/icuSources/configure.in +++ b/icuSources/configure.in @@ -1,6 +1,6 @@ dnl -*-m4-*- dnl configure.in for ICU -dnl Copyright (c) 1999-2004, International Business Machines Corporation and +dnl Copyright (c) 1999-2006, International Business Machines Corporation and dnl others. All Rights Reserved. dnl Stephen F. Booth, heavily modified by Yves and others @@ -34,12 +34,17 @@ AC_SUBST(LIB_VERSION) AC_SUBST(LIB_VERSION_MAJOR) AC_MSG_RESULT([release $VERSION, library $LIB_VERSION]) -UNICODE_VERSION="4.0.1" +UNICODE_VERSION="5.0" AC_SUBST(UNICODE_VERSION) +dnl Determine the host system +AC_CANONICAL_HOST + AC_SUBST(CPPFLAGS) -#AC_SUBST(CINTLTST_CPPFLAGS) +dnl This variable is needed on z/OS because the C++ compiler only recognizes .C +_CXX_CXXSUFFIX=cc +export _CXX_CXXSUFFIX dnl Checks for programs AC_PROG_CC AC_PROG_CXX @@ -54,7 +59,7 @@ if test "$srcdir" = "."; then fi #AC_CHECK_PROG(AUTOCONF, autoconf, autoconf, true) -AC_CHECK_PROG(STRIP, strip, strip, true) +#AC_CHECK_PROG(STRIP, strip, strip, true) dnl Check for the platform make AC_PATH_PROGS(U_MAKE, gmake gnumake, make) @@ -63,9 +68,20 @@ AC_SUBST(U_MAKE) dnl Check for doxygen to generate documentation AC_PATH_PROG(DOXYGEN,doxygen,,$PATH:/usr/local/bin:/usr/bin) -dnl Determine the host system and Makefile fragment -AC_CANONICAL_HOST -AC_EXEEXT +dnl Check that the linker is usable +ICU_PROG_LINK + +dnl Determine the executable suffix +dnl We don't use AC_EXEEXT because some compilers output separate debugging +dnl files, which confuses the AC_EXEEXT macro. +AC_MSG_CHECKING(checking for executable suffix) +case "${host}" in + *-*-cygwin*|*-*-mingw*) EXEEXT=.exe ;; + *) EXEEXT="" ;; +esac +ac_exeext=$EXEEXT +AC_MSG_RESULT($EXEEXT) +AC_SUBST(EXEEXT) dnl Determine how strict we want to be when compiling AC_CHECK_STRICT_COMPILE @@ -75,6 +91,7 @@ AC_CHECK_64BIT_LIBS AC_SUBST(ARFLAGS) AC_SUBST(COMPILE_LINK_ENVVAR) +dnl Determine the Makefile fragment ICU_CHECK_MH_FRAG dnl Checks for libraries and other host specific stuff @@ -145,6 +162,24 @@ AC_ARG_ENABLE(release, AC_MSG_RESULT($enabled) AC_SUBST(ENABLE_RELEASE) +dnl Check whether to enabled draft APIs +AC_MSG_CHECKING([whether to enable draft APIs]) +enabled=yes +U_DEFAULT_SHOW_DRAFT=1 +AC_ARG_ENABLE(draft, + [ --enable-draft enable draft APIs [default=yes]], + [ case "${enableval}" in + no) enabled=no; U_DEFAULT_SHOW_DRAFT=0 ;; + *) ;; + esac], +) +AC_MSG_RESULT($enabled) +dnl Make sure that we can use draft API in ICU. +if test "$U_DEFAULT_SHOW_DRAFT" = 0; then + CPPFLAGS="$CPPFLAGS -DU_SHOW_DRAFT_API" +fi +AC_SUBST(U_DEFAULT_SHOW_DRAFT) + AC_PROG_RANLIB AC_PATH_PROG(AR,ar,[echo archiver ar not found re-run configure ; false],$PATH:/bin:/usr/bin:/usr/ccs/bin) @@ -229,52 +264,63 @@ if test $threads = true; then AC_CHECK_LIB(pthread, pthread_attr_init) if test $ac_cv_lib_pthread_pthread_attr_init = yes; then - ICU_USE_THREADS=1 + ICU_USE_THREADS=1 else - dnl Locate the right library for POSIX threads. We look for the - dnl symbols in the libraries first, because on Solaris libc provides - dnl pthread_create but libpthread has the real code :( - dnl AIX uses libpthreads instead of libpthread, and HP/UX uses libpthread - dnl FreeBSD users may need libpthread if they do not have libc_r. + dnl Locate the right library for POSIX threads. We look for the + dnl symbols in the libraries first, because on Solaris libc provides + dnl pthread_create but libpthread has the real code :( + dnl AIX uses libpthreads instead of libpthread, and HP/UX uses libpthread + dnl FreeBSD users may need libpthread if they do not have libc_r. - AC_SEARCH_LIBS_FIRST(pthread_mutex_destroy, pthread pthreads c_r ) + AC_SEARCH_LIBS_FIRST(pthread_mutex_destroy, pthread pthreads c_r ) - if test "$ac_cv_search_pthread_mutex_destroy" != no; then - ICU_USE_THREADS=1 - else - dnl For HP 11 - AC_CHECK_LIB(pthread, pthread_mutex_init) - if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then + if test "$ac_cv_search_pthread_mutex_destroy" != no; then + ICU_USE_THREADS=1 + else + dnl For HP 11 + AC_CHECK_LIB(pthread, pthread_mutex_init) + if test $ac_cv_lib_pthread_pthread_mutex_init = yes; then + ICU_USE_THREADS=1 + fi + fi + + AC_CHECK_FUNC(pthread_mutex_lock) + + if test $ac_cv_func_pthread_mutex_lock = yes; then ICU_USE_THREADS=1 fi - fi - - AC_CHECK_FUNC(pthread_mutex_lock) - - if test $ac_cv_func_pthread_mutex_lock = yes; then - ICU_USE_THREADS=1 - fi - dnl Check to see if we are using CygWin with MSVC - case "${host}" in - *-pc-cygwin*|*-pc-mingw*) - if test "$ac_cv_prog_gcc" = no; then - dnl We're using normal windows compilers. Threading is available. - ICU_USE_THREADS=1 - fi ;; - *-*-hpux*) - dnl Add -mt because it does several nice things on newer compilers. - case "${icu_cv_host_frag}" in - mh-hpux-acc) - OLD_CXXFLAGS="${CXXFLAGS}" - CXXFLAGS="${CXXFLAGS} -mt" - if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then - CXXFLAGS="${OLD_CXXFLAGS}" - fi - ;; - esac - ;; - esac fi + dnl Check to see if we are using CygWin with MSVC + case "${host}" in + *-pc-cygwin*|*-pc-mingw*) + dnl For gcc, the thread options are set by mh-mingw/mh-cygwin + ICU_USE_THREADS=1 + if test "$ac_cv_prog_gcc" = no; then + dnl We're using normal windows compilers. Threading is available. + ICU_USE_THREADS=1 + if test $ENABLE_DEBUG = 1; then + dnl /MDd means 'compiles and links a debugable multithreaded program with DLL' + CFLAGS="${CFLAGS} /MDd" + CXXFLAGS="${CXXFLAGS} /MDd" + else + dnl /MD means 'compiles and links a multithreaded program with DLL' + CFLAGS="${CFLAGS} /MD" + CXXFLAGS="${CXXFLAGS} /MD" + fi + fi ;; + *-*-hpux*) + dnl Add -mt because it does several nice things on newer compilers. + case "${icu_cv_host_frag}" in + mh-hpux-acc) + OLD_CXXFLAGS="${CXXFLAGS}" + CXXFLAGS="${CXXFLAGS} -mt" + if test x"`${CXX} ${CXXFLAGS} 2>&1`" != x""; then + CXXFLAGS="${OLD_CXXFLAGS}" + fi + ;; + esac + ;; + esac fi AC_SUBST(ICU_USE_THREADS) @@ -308,11 +354,14 @@ AC_SUBST(HAVE_MMAP) dnl Check to see if genccode can generate simple assembly. GENCCODE_ASSEMBLY= case "${host}" in -i*86-*-*bsd*|i*86-*-linux*|x86_64-*-linux*|powerpc*-*-linux*) +i*86-*-linux*|x86_64-*-linux*|powerpc*-*-linux*|i*86-*-*bsd*|i*86-*-solaris*) if test "$GCC" = yes; then dnl We're using gcc, and the simple -a gcc command line works for genccode GENCCODE_ASSEMBLY="-a gcc" fi ;; +sparc-*-solaris*) + GENCCODE_ASSEMBLY="-a sun" + ;; esac AC_SUBST(GENCCODE_ASSEMBLY) @@ -355,7 +404,7 @@ then CXXFLAGS="${CXXFLAGS} -AA" ;; esac - AC_MSG_CHECKING([iostream usability]) + AC_MSG_CHECKING([for iostream usability]) AC_TRY_COMPILE([#include ],[], [ac_cv_header_iostream=yes],[ac_cv_header_iostream=no]) if test $icu_cv_host_frag = mh-cygwin-msvc @@ -371,16 +420,13 @@ then U_IOSTREAM_SOURCE=199711 else CXXFLAGS="${OLD_CXXFLAGS}" - AC_CHECK_HEADER(iostream.h) - if test $ac_cv_header_iostream_h = yes; then - AC_MSG_CHECKING([whether ostream is really defined]) - AC_CACHE_VAL(ac_cv_iostream_ok, - AC_TRY_LINK([#include ],[ostream &testout = cout; testout << "test" << endl;],ac_cv_iostream_ok=yes,ac_cv_iostream_ok=no)) - AC_MSG_RESULT($ac_cv_iostream_ok) - if test $ac_cv_iostream_ok = yes - then - U_IOSTREAM_SOURCE=198506 - fi + AC_MSG_CHECKING([whether ostream in iostream.h is really defined]) + AC_CACHE_VAL(ac_cv_iostream_ok, + AC_TRY_LINK([#include ],[ostream &testout = cout; testout << "test" << endl;],ac_cv_iostream_ok=yes,ac_cv_iostream_ok=no)) + AC_MSG_RESULT($ac_cv_iostream_ok) + if test $ac_cv_iostream_ok = yes + then + U_IOSTREAM_SOURCE=198506 fi fi if test x$streams != x @@ -441,7 +487,7 @@ AC_MSG_CHECKING([for namespace support]) AC_CACHE_VAL(ac_cv_namespace_ok, [AC_TRY_LINK( changequote(<<, >>)dnl - <>, @@ -700,6 +746,7 @@ AC_DO_CHECK_SIZEOF(wchar_t,$ac_default_sizeof_wchar_t,[ #if STDC_HEADERS #include #endif +#include #if HAVE_WCHAR_H #include #include @@ -731,7 +778,7 @@ AC_ARG_ENABLE(extras, esac], extras=true) ICU_CONDITIONAL(EXTRAS, test "$extras" = true) -AC_ARG_ENABLE(extras, +AC_ARG_ENABLE(icuio, [ --enable-icuio build ICU's icuio library [default=yes]], [case "${enableval}" in yes) icuio=true ;; @@ -765,12 +812,12 @@ AC_ARG_WITH(data-packaging, [datapackaging=]) dnl Note: 'thesysconfdir' is an evaluated version, for Man pages, so also for thedatadir, thelibdir, etc.. -thesysconfdir=`eval echo $sysconfdir` -AC_SUBST(thesysconfdir) +#thesysconfdir=`eval echo $sysconfdir` +#AC_SUBST(thesysconfdir) +#thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir` +#AC_SUBST(thelibdir) thedatadir=`eval echo $datadir` AC_SUBST(thedatadir) -thelibdir=`test "x$exec_prefix" = xNONE && exec_prefix="$prefix"; eval echo $libdir` -AC_SUBST(thelibdir) dnl Always put raw data files in share/icu/{version}, etc. Never use lib/icu/{version} for data files.. Actual shared libraries will go in {libdir}. pkgicudatadir=$datadir thepkgicudatadir=$thedatadir @@ -778,30 +825,6 @@ AC_SUBST(pkgicudatadir) AC_SUBST(thepkgicudatadir) dnl Shouldn't need the AC_SUBST -dnl Deprecated support for --enable-mapped - -AC_ARG_ENABLE(mapped,, - [case "${enableval}" in - yes) mapped=archive ;; - no) mapped=library ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-mapped; use --with-data-packaging now) ;; - esac], - [mapped=]) - -if test x"$mapped" != x; then - case $mapped in - archive) - AC_MSG_WARN(use --with-data-packaging=archive instead of --enable-mapped) - ;; - library) - AC_MSG_WARN(use --with-data-packaging=library instead of --disable-mapped) - ;; - esac - if test x"$datapackaging" != x -a x"$mapped" != x"$datapackaging"; then - AC_MSG_ERROR(conflicting values used for --with-data-packaging and deprecated --enable-mapped) - fi - datapackaging=$mapped -fi if test x"$datapackaging" = x -o x"$datapackaging" = xauto; then datapackaging=library @@ -809,19 +832,15 @@ fi case "$datapackaging" in files) - DATA_PACKAGING_CPPFLAGS=-DUDATA_FILES DATA_PACKAGING_MODE=files ;; archive) - DATA_PACKAGING_CPPFLAGS=-DUDATA_MAP DATA_PACKAGING_MODE=common ;; library) - DATA_PACKAGING_CPPFLAGS=-DUDATA_DLL DATA_PACKAGING_MODE=dll ;; esac -AC_SUBST(DATA_PACKAGING_CPPFLAGS) AC_SUBST(DATA_PACKAGING_MODE) dnl Sets a library suffix @@ -878,21 +897,24 @@ dnl set ICUDATA_CHAR to 'e' for any EBCDIC (which should be big endian) platform case "${host}" in *-*-solaris*) platform=U_SOLARIS ;; *-*-linux*) platform=U_LINUX ;; - *-*-*bsd*) platform=U_BSD ;; + *-*-*bsd*|*-*-dragonfly*) platform=U_BSD ;; *-*-aix*) platform=U_AIX ;; *-*-hpux*) platform=U_HPUX ;; *-apple-darwin*|*-apple-rhapsody*) platform=U_DARWIN ;; *-*-cygwin*|*-*-mingw*) platform=U_CYGWIN ;; *-*ibm-openedition*|*-*-os390*) platform=OS390 - ICUDATA_CHAR="e" ;; + if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then + ICUDATA_CHAR="e" + fi ;; *-*-os400*) platform=OS400 - ICUDATA_CHAR="e" ;; + if test "${ICU_ENABLE_ASCII_STRINGS}" != "1"; then + ICUDATA_CHAR="e" + fi ;; *-*-nto*) platform=U_QNX ;; *-dec-osf*) platform=U_OSF ;; *-*-beos) platform=U_BEOS ;; *-*-irix*) platform=U_IRIX ;; *-ncr-*) platform=U_MPRAS ;; - *-sequent-*) platform=PTX ;; *) platform=U_UNKNOWN_PLATFORM ;; esac AC_SUBST(ICUDATA_CHAR) @@ -906,12 +928,11 @@ dnl Handle -rpath options for shared library paths case "${host}" in *-*-solaris*) ld_rpath_suf=":" ;; *-*-linux*) ld_rpath_suf=" " ;; - *-*-*bsd*) ld_rpath_suf=" " ;; + *-*-*bsd*|*-*-dragonfly*) ld_rpath_suf=" " ;; *-*-aix*) ld_rpath_suf="" ;; *-*-hpux*) ld_rpath_suf=":" ;; *-*ibm-openedition*|*-*-os390*) ld_rpath_suf="" ;; *-*-os400*) ld_rpath_suf=" " ;; - *-sequent-*) ld_rpath_suf="" ;; *-*-irix*) ld_rpath_suf=" " ;; *) ld_rpath_suf="" ;; esac @@ -932,6 +953,7 @@ case "${host}" in tools/gennames/gennames tools/gentest/gentest \ tools/pkgdata/pkgdata tools/genprops/genprops \ tools/gencase/gencase \ + tools/genbidi/genbidi \ tools/gensprep/gensprep do if test -f $file.c; then @@ -982,26 +1004,32 @@ AC_OUTPUT([icudefs.mk \ layoutex/Makefile \ io/Makefile \ extra/Makefile \ - extra/uconv/Makefile extra/scrptrun/Makefile \ - tools/Makefile tools/ctestfw/Makefile \ + extra/uconv/Makefile \ + extra/scrptrun/Makefile \ + tools/Makefile \ + tools/ctestfw/Makefile \ + tools/toolutil/Makefile \ tools/makeconv/Makefile \ tools/genrb/Makefile \ tools/genuca/Makefile \ tools/genccode/Makefile \ tools/gencmn/Makefile \ tools/gencnval/Makefile \ + tools/genctd/Makefile \ tools/gennames/Makefile \ tools/gentest/Makefile \ tools/gennorm/Makefile \ tools/genprops/Makefile \ tools/gencase/Makefile \ + tools/genbidi/Makefile \ tools/genpname/Makefile \ tools/genbrk/Makefile \ tools/gensprep/Makefile \ + tools/icupkg/Makefile \ tools/icuswap/Makefile \ tools/pkgdata/Makefile \ - tools/toolutil/Makefile \ tools/dumpce/Makefile \ + tools/tzcode/Makefile \ test/Makefile \ test/testdata/Makefile \ test/testdata/pkgdata.inc \ @@ -1014,11 +1042,19 @@ AC_OUTPUT([icudefs.mk \ test/letest/Makefile \ test/threadtest/Makefile \ samples/Makefile samples/date/Makefile \ - samples/cal/Makefile samples/layout/Makefile \ + samples/cal/Makefile samples/csdet/Makefile samples/layout/Makefile \ common/unicode/platform.h]) if test $ICU_USE_THREADS = 0; then echo " *** Note: configuring the ICU without pthread support or testing. If this isn't what you want, then run configure with --enable-threads=yes or check the messages [above] to see why we couldn't find pthread_create()" 1>&6 fi +if test -n "`$U_MAKE -v 2>&1 | grep '^GNU Make'`"; then echo "You must use $U_MAKE to build ICU." +else +echo "WARNING: $U_MAKE may not be GNU make." +echo "This may cause ICU to fail to build. Please make sure that GNU make" +echo "is in your PATH so that this configure script can detect its location." +fi + +$as_unset _CXX_CXXSUFFIX diff --git a/icuSources/data/Makefile.in b/icuSources/data/Makefile.in index 461e37d8..b4a0322b 100644 --- a/icuSources/data/Makefile.in +++ b/icuSources/data/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU data -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -35,10 +35,17 @@ else ICUPKGDATA_OUTDIR = $(OUTDIR) endif -top_builddir_from_tmp = $(patsubst ..%,../..%,$(top_builddir)) CURDIR:=$(CURR_FULL_DIR) -PKGDATA = $(BINDIR)/pkgdata $(PKGDATA_OPTS) -q -c -s $(CURDIR)/out/build/$(ICUDATA_PLATFORM_NAME) -d $(ICUPKGDATA_OUTDIR) +PKGDATA = $(BINDIR)/pkgdata $(PKGDATA_OPTS) -q -c -s $(CURDIR)/out/build/$(ICUDATA_PLATFORM_NAME) -d $(ICUPKGDATA_OUTDIR) -M'PKGDATA_LDFLAGS="$(LDFLAGSICUDT)"' +ifeq ($(OS390_STUBDATA),1) +OS390PKG=package390 +OS390INSTALL=install390 + +# Additional data for 390 +OS390LIST=$(OUTTMPDIR)/icudata390.lst +OUTTMPDIR_390STUB=$(top_builddir)/data/out/tmp_390stub +endif # OBJDATADIR must be a short path (with ..'s) to the data. @@ -54,7 +61,8 @@ OUTDIR=$(top_builddir)/data/out endif OUTTMPDIR=$(OUTDIR)/tmp -BUILDDIR=$(OUTDIR)/build/$(ICUDATA_PLATFORM_NAME) +MAINBUILDDIR=$(OUTDIR)/build +BUILDDIR=$(MAINBUILDDIR)/$(ICUDATA_PLATFORM_NAME) UNICODEDATADIR=$(SRCDATADIR)/unidata LOCSRCDIR=$(SRCDATADIR)/locales COLSRCDIR=$(SRCDATADIR)/coll @@ -65,11 +73,12 @@ TRANSLITSRCDIR=$(SRCDATADIR)/translit TRANSLITBLDDIR=$(BUILDDIR)/translit MISCSRCDIR=$(SRCDATADIR)/misc BRKSRCDIR=$(SRCDATADIR)/brkitr +BRKBLDDIR=$(BUILDDIR)/brkitr MISCSRCDIR=$(SRCDATADIR)/misc UCMSRCDIR=$(SRCDATADIR)/mappings COMINCDIR=$(top_srcdir)/common/unicode SRCLISTDEPS=Makefile $(srcdir)/Makefile.in -BUILD_DIRS=$(OUTDIR) $(BUILDDIR) $(COLBLDDIR) $(RBNFBLDDIR) $(TRANSLITBLDDIR) $(TESTOUTDIR) $(TESTBUILDDIR) $(OUTTMPDIR) $(OUTTMPDIR_390STUB) $(OUTTMPDIR)/$(COLLATION_TREE) $(OUTTMPDIR)/$(RBNF_TREE) $(OUTTMPDIR)/$(TRANSLIT_TREE) +BUILD_DIRS=$(OUTDIR) $(BUILDDIR) $(BRKBLDDIR) $(COLBLDDIR) $(RBNFBLDDIR) $(TRANSLITBLDDIR) $(TESTOUTDIR) $(TESTBUILDDIR) $(OUTTMPDIR) $(OUTTMPDIR_390STUB) $(OUTTMPDIR)/$(COLLATION_TREE) $(OUTTMPDIR)/$(RBNF_TREE) $(OUTTMPDIR)/$(TRANSLIT_TREE) $(OUTTMPDIR)/$(BREAK_TREE) # relative lib links from pkgdata are the same as for tmp TOOLDIR=$(top_builddir)/tools @@ -95,17 +104,17 @@ check: all distclean-local: clean $(RMV) Makefile -ifeq ($(OS390_STUBDATA),1) -OS390PKG=package390 -OS390INSTALL=install390 - -# Additional data for 390 -OS390LIST=$(OUTTMPDIR)/icudata390.lst -OUTTMPDIR_390STUB=$(top_builddir)/data/out/tmp_390stub -endif - all-local: build-dir icupkg.inc build-local packagedata $(POST_DATA_BUILD) $(OS390PKG) +# Starting with ICU4C 3.4, the core Unicode properties files (uprops.icu, ucase.icu, ubidi.icu, unorm.icu) +# are hardcoded in the common DLL and therefore not included in the data package any more. +# They are not built by default but need to be built for ICU4J data and for getting the .c source files +# when updating the Unicode data. +# Changed in Makefile.in revision 1.147. See Jitterbug 4497. +uni-core-data: build-dir $(BUILDDIR)/uprops.icu $(BUILDDIR)/ucase.icu $(BUILDDIR)/ubidi.icu $(BUILDDIR)/unorm.icu + @echo Unicode .icu files built to $(BUILDDIR) + @echo Unicode .c source files built to $(OUTTMPDIR) + dist-local: clean-map: @@ -122,6 +131,29 @@ cleanpackage: check-local: +# Find out if we have a source archive. +# If we have that, then use that instead of building everything from scratch. +ICUDATA_SOURCE_ARCHIVE = $(wildcard $(srcdir)/in/$(ICUDATA_PLATFORM_NAME).dat) +ifeq ($(ICUDATA_SOURCE_ARCHIVE),) +ICUDATA_ARCHIVE = $(firstword $(wildcard $(srcdir)/in/$(ICUDATA_BASENAME_VERSION)*.dat)) +# We don't have the data in the current endianess or charset. +# See if we can find data of any archive type, +# and convert it to the current type. +ifneq ($(ICUDATA_ARCHIVE),) +ICUDATA_SOURCE_ARCHIVE = $(OUTDIR)/$(ICUDATA_PLATFORM_NAME).dat +$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE) $(OUTDIR) + $(INVOKE) $(BINDIR)/icupkg -t$(ICUDATA_CHAR) $(ICUDATA_ARCHIVE) $(ICUDATA_SOURCE_ARCHIVE) +endif +else +ifneq ($(ENABLE_STATIC),YES) +ifeq ($(PKGDATA_MODE),common) +# We have a source data common archive in the native endianess, +# and it's what we want to build. Try to not run any of ICU's tools. +ICUDATA_SOURCE_IS_NATIVE_TARGET=YES +endif +endif +endif + # During this INVOKE we only want to use stubdata. # We don't want to try to write over files that we are using. PKGDATA_INVOKE:=$(subst $(LIBDIR):$(top_builddir)/stubdata,$(top_builddir)/stubdata:$(LIBDIR),$(INVOKE)) $(PKGDATA_INVOKE_OPTS) @@ -130,7 +162,11 @@ packagedata: icupkg.inc $(OUTTMPDIR)/icudata.lst build-local ifneq ($(ENABLE_STATIC),) $(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) -m static $(OUTTMPDIR)/icudata.lst endif +ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES) $(PKGDATA_INVOKE) $(PKGDATA) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -p $(ICUDATA_NAME) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) $(PKGDATA_LIBNAME) $(OUTTMPDIR)/icudata.lst +else + $(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(OUTDIR) +endif ## Install ICU data. install-local: $(OUTTMPDIR)/icudata.lst ./icupkg.inc packagedata $(OS390INSTALL) @@ -138,7 +174,11 @@ install-local: $(OUTTMPDIR)/icudata.lst ./icupkg.inc packagedata $(OS390INSTALL) ifneq ($(ENABLE_STATIC),) $(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(OUTTMPDIR)/icudata.lst -I $(ICUPKGDATA_INSTALL_LIBDIR) endif +ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES) $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(OUTTMPDIR)/icudata.lst -I $(ICUPKGDATA_INSTALL_DIR) +else + $(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(DESTDIR)$(ICUPKGDATA_DIR) +endif #### @@ -163,15 +203,29 @@ package390: $(OUTTMPDIR)/icudata390.lst $(OUTTMPDIR)/icudata.lst ./icupkg.inc pa # X_FILES = full paths (for dependency) ## DAT files - Misc. data files. -DAT_FILES_SHORT=uprops.icu ucase.icu pnames.icu unames.icu unorm.icu cnvalias.icu ucadata.icu invuca.icu uidna.spp +# 2005-may-05 Removed Unicode properties files (unorm.icu, uprops.icu, ucase.icu, ubidi.icu) +# from data build. See Jitterbug 4497. (makedata.mak revision 1.117) +# +DAT_FILES_SHORT=pnames.icu unames.icu cnvalias.icu ucadata.icu invuca.icu uidna.spp DAT_FILES=$(DAT_FILES_SHORT:%=$(BUILDDIR)/%) ## BRK files +BREAK_TREE=brkitr -include $(BRKSRCDIR)/brkfiles.mk -include $(BRKSRCDIR)/brklocal.mk -ALL_BRK_SOURCE=char.txt title.txt word.txt $(BRK_SOURCE) $(BRK_SOURCE_LOCAL) -BRK_FILES_SHORT=$(ALL_BRK_SOURCE:%.txt=%.brk) -BRK_FILES=$(BRK_FILES_SHORT:%=$(BUILDDIR)/%) +ALL_BRK_SOURCE= $(BRK_SOURCE) $(BRK_SOURCE_LOCAL) +BRK_FILES_SHORT=$(ALL_BRK_SOURCE:%.txt=$(BREAK_TREE)/%.brk) +BRK_FILES=$(ALL_BRK_SOURCE:%.txt=$(BRKBLDDIR)/%.brk) +ifdef BRK_CTD_SOURCE +ALL_CTD_SOURCE=$(BRK_CTD_SOURCE) $(BRK_CTD_SOURCE_LOCAL) +CTD_FILES_SHORT=$(ALL_CTD_SOURCE:%.txt=$(BREAK_TREE)/%.ctd) +CTD_FILES=$(ALL_CTD_SOURCE:%.txt=$(BRKBLDDIR)/%.ctd) +endif +ifdef BRK_RES_SOURCE +BRS_SRC= root.txt $(BRK_RES_SOURCE) $(BRK_RES_SOURCE_LOCAL) +BRS_SRC_FILES = $(BRS_SRC:%=$(BRKSRCDIR)/%) +INSTALLED_BRS_FILES = $(BRK_RES_SOURCE:%.txt=%) $(BRK_RES_SOURCE_LOCAL:%.txt=%) +endif ## UCM files -include $(UCMSRCDIR)/ucmcore.mk @@ -190,21 +244,29 @@ CNV_FILES_SHORT = $(ALL_UCM_SOURCE:%.ucm=%.cnv) -include $(TRANSLITSRCDIR)/trnsfiles.mk -include $(LOCSRCDIR)/reslocal.mk -include $(COLSRCDIR)/collocal.mk +-include $(BRKSRCDIR)/brslocal.mk -include $(RBNFSRCDIR)/rbnflocal.mk --include $(TRANSLITSRCDIR)/translocal.mk +-include $(TRANSLITSRCDIR)/trnslocal.mk +ifdef GENRB_SOURCE RES_SRC= root.txt $(GENRB_SOURCE) $(GENRB_ALIAS_SOURCE) $(GENRB_SOURCE_LOCAL) RES_SRC_FILES = $(RES_SRC:%=$(LOCSRCDIR)/%) INSTALLED_RB_FILES = $(GENRB_SOURCE:%.txt=%) $(GENRB_SOURCE_LOCAL:%.txt=%) +endif +ifdef COLLATION_SOURCE COL_SRC= root.txt $(COLLATION_SOURCE) $(COLLATION_ALIAS_SOURCE) $(COLLATION_SOURCE_LOCAL) COL_SRC_FILES = $(COL_SRC:%=$(COLSRCDIR)/%) INSTALLED_COL_FILES = $(COLLATION_SOURCE:%.txt=%) $(COLLATION_SOURCE_LOCAL:%.txt=%) +endif +ifdef RBNF_SOURCE RBNF_SRC= root.txt $(RBNF_SOURCE) $(RBNF_ALIAS_SOURCE) $(RBNF_SOURCE_LOCAL) RBNF_SRC_FILES = $(RBNF_SRC:%=$(RBNFSRCDIR)/%) INSTALLED_RBNF_FILES = $(RBNF_SOURCE:%.txt=%) $(RBNF_SOURCE_LOCAL:%.txt=%) -INSTALLED_TRANSLIT_FILES = $(TRANSLIT_SOURCE:%.txt=%) $(TRANSLIT_SOURCE_LOCAL:%.txt=%) -TRANSLIT_SRC= root.txt $(TRANSLIT_SOURCE) $(TRANSLIT_ALIAS_SOURCE) $(TRANSLIT_SOURCE_LOCAL) +endif +ifdef TRANSLIT_SOURCE +TRANSLIT_SRC= $(TRANSLIT_SOURCE) $(TRANSLIT_ALIAS_SOURCE) $(TRANSLIT_SOURCE_LOCAL) TRANSLIT_SRC_FILES = $(TRANSLIT_SRC:%=$(TRANSLITSRCDIR)/%) INSTALLED_TRANSLIT_FILES = $(TRANSLIT_SOURCE:%.txt=%) $(TRANSLIT_SOURCE_LOCAL:%.txt=%) +endif GENRBOPTS=-k ## MISC files @@ -217,7 +279,7 @@ ifeq ($(ENABLE_SO_VERSION_DATA),1) ifeq ($(PKGDATA_MODE),dll) SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res $(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc - rc.exe /i$(srcdir)/../common /fo$@ $(SOURCE_FILE) + rc.exe /i$(srcdir)/../common /fo$@ $(CPPFLAGS) $(SOURCE_FILE) endif endif @@ -237,6 +299,12 @@ COLLATION_INDEX_RES_SHORT=$(COLLATION_TREE)/$(INDEX_NAME).res COLLATION_FILES = $(COL_SRC:%.txt=$(COLBLDDIR)/%.res) $(COLLATION_INDEX_RES) COLLATION_FILES_SHORT = $(COL_SRC:%.txt=$(COLLATION_TREE)/%.res) +BRK_RES_INDEX_FILE=$(OUTTMPDIR)/$(BREAK_TREE)/$(INDEX_NAME).txt +BRK_RES_INDEX_RES=$(BRKBLDDIR)/$(INDEX_NAME).res +BRK_RES_INDEX_RES_SHORT=$(BREAK_TREE)/$(INDEX_NAME).res +BRK_RES_FILES = $(BRS_SRC:%.txt=$(BRKBLDDIR)/%.res) $(BRK_RES_INDEX_RES) +BRK_RES_FILES_SHORT = $(BRS_SRC:%.txt=$(BREAK_TREE)/%.res) + RBNF_TREE=rbnf RBNF_INDEX_FILE=$(OUTTMPDIR)/$(RBNF_TREE)/$(INDEX_NAME).txt RBNF_INDEX_RES=$(RBNFBLDDIR)/$(INDEX_NAME).res @@ -252,9 +320,9 @@ TRANSLIT_FILES = $(TRANSLIT_SRC:%.txt=$(TRANSLITBLDDIR)/%.res) TRANSLIT_FILES_SHORT = $(TRANSLIT_SRC:%.txt=$(TRANSLIT_TREE)/%.res) ## All generated files -ALL_FILES = $(DAT_FILES) $(CNV_FILES) $(BRK_FILES) $(RES_FILES) $(INDEX_RES_FILE) $(COLLATION_FILES) $(RBNF_FILES) $(TRANSLIT_FILES) +ALL_FILES = $(DAT_FILES) $(CNV_FILES) $(BRK_FILES) $(CTD_FILES) $(RES_FILES) $(INDEX_RES_FILE) $(COLLATION_FILES) $(BRK_RES_FILES) $(RBNF_FILES) $(TRANSLIT_FILES) # a list to use in the .lst files (package-relative) -ALL_FILES_LIST = $(DAT_FILES_SHORT) $(CNV_FILES_SHORT) $(BRK_FILES_SHORT) $(RES_FILES_SHORT) $(INDEX_RES_FILE_SHORT) $(COLLATION_FILES_SHORT) $(COLLATION_INDEX_RES_SHORT) $(RBNF_FILES_SHORT) $(RBNF_INDEX_RES_SHORT) $(TRANSLIT_FILES_SHORT) +ALL_FILES_LIST = $(DAT_FILES_SHORT) $(CNV_FILES_SHORT) $(BRK_FILES_SHORT) $(CTD_FILES_SHORT) $(RES_FILES_SHORT) $(INDEX_RES_FILE_SHORT) $(COLLATION_FILES_SHORT) $(COLLATION_INDEX_RES_SHORT) $(BRK_RES_FILES_SHORT) $(BRK_RES_INDEX_RES_SHORT) $(RBNF_FILES_SHORT) $(RBNF_INDEX_RES_SHORT) $(TRANSLIT_FILES_SHORT) ##################################################### # General data build rules @@ -262,14 +330,26 @@ ALL_FILES_LIST = $(DAT_FILES_SHORT) $(CNV_FILES_SHORT) $(BRK_FILES_SHORT) $(RES_ ## Files to remove for 'make clean' CLEANFILES = *~ icupkg.inc +ifeq ($(ICUDATA_SOURCE_ARCHIVE),) +build-local: build-dir $(SO_VERSION_DATA) $(ALL_FILES) $(OUTTMPDIR)/icudata.lst $(OS390LIST) $(OUTTMPDIR)/icudata.lst: $(SRCLISTDEPS) @echo "generating $@ (list of data files)" @-$(RMV) $@ @for file in $(ALL_FILES_LIST); do \ echo $$file >> $@; \ done; +else +build-local: build-dir $(SO_VERSION_DATA) $(OUTTMPDIR)/icudata.lst $(OS390LIST) +$(OUTTMPDIR)/icudata.lst: $(SRCLISTDEPS) $(ICUDATA_SOURCE_ARCHIVE) $(MAINBUILDDIR) +ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES) + @echo "Unpacking $(ICUDATA_SOURCE_ARCHIVE) and generating $@ (list of data files)" + @-$(RMV) $@ + $(INVOKE) $(BINDIR)/icupkg -d $(BUILDDIR) --list -x \* $(ICUDATA_SOURCE_ARCHIVE) > $@ +else + @echo "$@" > $@ +endif +endif -build-local: build-dir $(SO_VERSION_DATA) $(ALL_FILES) $(OUTTMPDIR)/icudata.lst $(OS390LIST) build-dir: $(BUILD_DIRS) $(BUILD_DIRS): @@ -284,10 +364,17 @@ $(BUILD_DIRS): # uprops.icu $(BUILDDIR)/uprops.icu: $(UNICODEDATADIR)/UnicodeData.txt $(UNICODEDATADIR)/BidiMirroring.txt $(BINDIR)/genprops$(EXEEXT) $(BUILDDIR)/$(ICUDT)pnames.icu $(INVOKE) $(BINDIR)/genprops -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(BUILDDIR) -u $(UNICODE_VERSION) + $(INVOKE) $(BINDIR)/genprops --csource -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(OUTTMPDIR) -u $(UNICODE_VERSION) + +# ubidi.icu +$(BUILDDIR)/ubidi.icu: $(UNICODEDATADIR)/UnicodeData.txt $(BINDIR)/genbidi$(EXEEXT) + $(INVOKE) $(BINDIR)/genbidi -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(BUILDDIR) -u $(UNICODE_VERSION) + $(INVOKE) $(BINDIR)/genbidi --csource -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(OUTTMPDIR) -u $(UNICODE_VERSION) # ucase.icu $(BUILDDIR)/ucase.icu: $(UNICODEDATADIR)/UnicodeData.txt $(BINDIR)/gencase$(EXEEXT) $(INVOKE) $(BINDIR)/gencase -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(BUILDDIR) -u $(UNICODE_VERSION) + $(INVOKE) $(BINDIR)/gencase --csource -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(OUTTMPDIR) -u $(UNICODE_VERSION) # pnames.icu $(BUILDDIR)/pnames.icu: $(UNICODEDATADIR)/PropertyAliases.txt $(UNICODEDATADIR)/PropertyValueAliases.txt $(UNICODEDATADIR)/Blocks.txt $(COMINCDIR)/uscript.h $(COMINCDIR)/uchar.h $(BINDIR)/genpname$(EXEEXT) @@ -296,9 +383,12 @@ $(BUILDDIR)/pnames.icu: $(UNICODEDATADIR)/PropertyAliases.txt $(UNICODEDATADIR)/ # unorm.icu $(BUILDDIR)/unorm.icu: $(UNICODEDATADIR)/UnicodeData.txt $(UNICODEDATADIR)/DerivedNormalizationProps.txt $(UNICODEDATADIR)/BidiMirroring.txt $(BINDIR)/gennorm$(EXEEXT) $(BUILDDIR)/$(ICUDT)pnames.icu $(BUILDDIR)/$(ICUDT)uprops.icu $(BUILDDIR)/$(ICUDT)ucase.icu $(INVOKE) $(BINDIR)/gennorm -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(BUILDDIR) -u $(UNICODE_VERSION) + $(INVOKE) $(BINDIR)/gennorm --csource -s $(UNICODEDATADIR) -i $(BUILDDIR) -d $(OUTTMPDIR) -u $(UNICODE_VERSION) # ucadata.icu -$(BUILDDIR)/ucadata.icu $(BUILDDIR)/$(ICUDT)invuca.icu: $(UNICODEDATADIR)/FractionalUCA.txt $(BINDIR)/genuca$(EXEEXT) $(BUILDDIR)/$(ICUDT)unorm.icu $(BUILDDIR)/$(ICUDT)ucase.icu +# used to depend on $(BUILDDIR)/$(ICUDT)unorm.icu $(BUILDDIR)/$(ICUDT)ucase.icu +# see Jitterbug 4497 +$(BUILDDIR)/ucadata.icu $(BUILDDIR)/$(ICUDT)invuca.icu: $(UNICODEDATADIR)/FractionalUCA.txt $(BINDIR)/genuca$(EXEEXT) $(INVOKE) $(BINDIR)/genuca -s $(UNICODEDATADIR) -d $(BUILDDIR) -i $(BUILDDIR) # unames.icu @@ -310,18 +400,24 @@ $(BUILDDIR)/cnvalias.icu: $(UCMSRCDIR)/convrtrs.txt $(BINDIR)/gencnval$(EXEEXT) $(INVOKE) $(BINDIR)/gencnval -d $(BUILDDIR) $(UCMSRCDIR)/convrtrs.txt # uidna.spp -$(BUILDDIR)/uidna.spp: $(MISCSRCDIR)/NamePrepProfile.txt $(BINDIR)/gensprep$(EXEEXT) $(BUILDDIR)/uprops.icu $(BUILDDIR)/unames.icu $(BUILDDIR)/pnames.icu +$(BUILDDIR)/uidna.spp: $(MISCSRCDIR)/NamePrepProfile.txt $(BINDIR)/gensprep$(EXEEXT) $(BUILDDIR)/unames.icu $(BUILDDIR)/pnames.icu $(INVOKE) $(BINDIR)/gensprep -d $(BUILDDIR) -i $(BUILDDIR) -s $(MISCSRCDIR) -b uidna -n $(UNICODEDATADIR) -u 3.2.0 -k NamePrepProfile.txt #################################################### BRK # BRK FILES -thaidict.brk: $(SRCDATADIR)/thaidict.brk - $(RMV) $@ && ln -s $(BUILDDIR) $@ +#thaidict.brk: $(SRCDATADIR)/thaidict.brk +# $(RMV) $@ && ln -s $(BUILDDIR) $@ -$(BUILDDIR)/%.brk: $(BRKSRCDIR)/%.txt $(BINDIR)/genbrk$(EXEEXT) $(DAT_FILES) +$(BRKBLDDIR)/%.brk: $(BRKSRCDIR)/%.txt $(BINDIR)/genbrk$(EXEEXT) $(DAT_FILES) $(INVOKE) $(BINDIR)/genbrk -c -i $(BUILDDIR) -r $< -o $@ +#################################################### CTD +# CTD FILES + +$(BRKBLDDIR)/%.ctd: $(BRKSRCDIR)/%.txt $(BINDIR)/genctd$(EXEEXT) $(DAT_FILES) + $(INVOKE) $(BINDIR)/genctd -c -i $(BUILDDIR) -o $@ $< + #################################################### CNV # CNV FILES $(BUILDDIR)/%.cnv: $(UCMSRCDIR)/%.ucm $(BINDIR)/makeconv$(EXEEXT) @@ -341,7 +437,7 @@ $(OUTTMPDIR)/$(COLLATION_TREE)/$(INDEX_NAME).txt: $(SRCLISTDEPS) @echo "generating $@ (list of installed collation locales)"; \ $(RMV) $@; \ echo "// Warning this file is automatically generated" > $@; \ - echo "$(INDEX_NAME) {" >> $@; \ + echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ echo " InstalledLocales {" >> $@; \ for file in $(INSTALLED_COL_FILES); do \ echo " $$file {\"\"}" >> $@; \ @@ -349,6 +445,25 @@ $(OUTTMPDIR)/$(COLLATION_TREE)/$(INDEX_NAME).txt: $(SRCLISTDEPS) echo " }" >> $@; \ echo "}" >> $@; +### brk res +$(BRKBLDDIR)/%.res: $(BRKSRCDIR)/%.txt $(BINDIR)/genrb$(EXEEXT) $(DAT_FILES) + $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(BRKSRCDIR) -d $(BRKBLDDIR) $( $@; \ + echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ + echo " InstalledLocales {" >> $@; \ + for file in $(INSTALLED_BRS_FILES); do \ + echo " $$file {\"\"}" >> $@; \ + done; \ + echo " }" >> $@; \ + echo "}" >> $@; + ### RBNF res $(RBNFBLDDIR)/%.res: $(RBNFSRCDIR)/%.txt $(BINDIR)/genrb$(EXEEXT) $(DAT_FILES) $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(RBNFSRCDIR) -d $(RBNFBLDDIR) $( $@; \ - echo "$(INDEX_NAME) {" >> $@; \ + echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ echo " InstalledLocales {" >> $@; \ for file in $(INSTALLED_RBNF_FILES); do \ echo " $$file {\"\"}" >> $@; \ @@ -378,15 +493,39 @@ all-RES: $(RES_FILES) $(BUILDDIR)/%.res: $(LOCSRCDIR)/%.txt $(BINDIR)/genrb$(EXEEXT) $(DAT_FILES) $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(LOCSRCDIR) -d $(BUILDDIR) $( $@; \ - echo "$(INDEX_NAME) {" >> $@; \ + echo "$(INDEX_NAME):table(nofallback) {" >> $@; \ echo " InstalledLocales {" >> $@; \ for file in $(INSTALLED_RB_FILES); do \ echo " $$file {\"\"}" >> $@; \ @@ -412,7 +551,9 @@ icupkg.inc: $(srcdir)/icupkg.inc.in $(top_builddir)/config.status ########### ########### 390 (z/OS) support UCMFILES390=ebcdic-xml-us.ucm ibm-37_P100-1995.ucm ibm-1047_P100-1995.ucm ibm-4909_P100-1999.ucm -ALLFILES390=uprops.icu ucase.icu pnames.icu unorm.icu cnvalias.icu $(UCMFILES390:.ucm=.cnv) +# used to depend on uprops.icu ucase.icu ubidi.icu unorm.icu +# see Jitterbug 4497 +ALLFILES390=pnames.icu cnvalias.icu $(UCMFILES390:.ucm=.cnv) $(OUTTMPDIR)/icudata390.lst: $(SRCLISTDEPS) @echo "generating $@ (list of 390 data files)" diff --git a/icuSources/data/brkitr/brkfiles.mk b/icuSources/data/brkitr/brkfiles.mk index 84863aec..06f36002 100644 --- a/icuSources/data/brkitr/brkfiles.mk +++ b/icuSources/data/brkitr/brkfiles.mk @@ -1,4 +1,4 @@ -# * Copyright (C) 1997-2004, International Business Machines +# * Copyright (C) 1998-2006, International Business Machines # * Corporation and others. All Rights Reserved. # A list of txt's to build # Note: @@ -14,18 +14,32 @@ # # * To add an additional locale to the list: # _____________________________________________________ -# | BRK_SOURCE_LOCAL = myLocale.txt ... +# | BRK_RES_SOURCE_LOCAL = myLocale.txt ... # # * To REPLACE the default list and only build with a few # locale: # _____________________________________________________ -# | BRK_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt +# | BRK_RES_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt # # +# Generated by LDML2ICUConverter, from LDML source files. +# Aliases which do not have a corresponding xx.xml file (see icu-config.xml & build.xml) +BRK_RES_SYNTHETIC_ALIAS = + + +# All aliases (to not be included under 'installed'), but not including root. +BRK_RES_ALIAS_SOURCE = $(BRK_RES_SYNTHETIC_ALIAS) + + +# List of compact trie dictionary files (ctd). +BRK_CTD_SOURCE = thaidict.txt + + +# List of break iterator files (brk). +BRK_SOURCE = word_POSIX.txt word_ja.txt char.txt word.txt line.txt sent.txt title.txt + + +# Ordinary resources +BRK_RES_SOURCE = en.txt en_US.txt en_US_POSIX.txt ja.txt -# don't include thaidict.brk - it goes into a resource bundle - plus it isn't deleted. -# char.txt, title.txt and word.txt are not included so that more tests pass by default, -# and so that the makefile rules are simplier. -BRK_SOURCE = \ -line.txt sent.txt line_th.txt word_th.txt word_ja.txt word_POSIX.txt diff --git a/icuSources/data/brkitr/brklocal.mk b/icuSources/data/brkitr/brklocal.mk new file mode 100644 index 00000000..63843aca --- /dev/null +++ b/icuSources/data/brkitr/brklocal.mk @@ -0,0 +1,8 @@ +# +# Local Apple addition for locale resources +# Copyright (c) 2005, 2007 Apple Inc. All rights reserved. +# + +# ifeq "$(MINIMAL)" "YES" +# BRK_SOURCE = line.txt sent.txt +# endif diff --git a/icuSources/data/brkitr/char.txt b/icuSources/data/brkitr/char.txt index 9214e61e..58170ddf 100644 --- a/icuSources/data/brkitr/char.txt +++ b/icuSources/data/brkitr/char.txt @@ -1,33 +1,36 @@ # -# Copyright (C) 2002-2004, International Business Machines Corporation and others. +# Copyright (C) 2002-2006, International Business Machines Corporation and others. # All Rights Reserved. # # file: char.txt # # ICU Character Break Rules, also known as Grapheme Cluster Boundaries # See Unicode Standard Annex #29. -# These rules are based on TR29 Version 4.0.0 +# These rules are based on TR29 Version 5.0.0 +# Includes post-5.0 change to treat Japanese half width voicing marks +# as Grapheme Extend. # # # Character Class Definitions. -# The names are those from TR29. # -$CR = \r; -$LF = \n; -$Control = [[:Zl:] [:Zp:] [:Cc:] [:Cf:] - [:Grapheme_Extend = TRUE:]]; +$CR = [\p{Grapheme_Cluster_Break = CR}]; +$LF = [\p{Grapheme_Cluster_Break = LF}]; +$Control = [\p{Grapheme_Cluster_Break = Control}]; -$Extend = [[:Grapheme_Extend = TRUE:]]; +# add Japanese Half Width voicing marks to $Extend +$VoiceMarks = [\uff9e\uff9f]; +$Extend = [\p{Grapheme_Cluster_Break = Extend} $VoiceMarks]; # # Korean Syllable Definitions # -$L = [:Hangul_Syllable_Type = L:]; -$V = [:Hangul_Syllable_Type = V:]; -$T = [:Hangul_Syllable_Type = T:]; +$L = [\p{Grapheme_Cluster_Break = L}]; +$V = [\p{Grapheme_Cluster_Break = V}]; +$T = [\p{Grapheme_Cluster_Break = T}]; -$LV = [:Hangul_Syllable_Type = LV:]; -$LVT = [:Hangul_Syllable_Type = LVT:]; +$LV = [\p{Grapheme_Cluster_Break = LV}]; +$LVT = [\p{Grapheme_Cluster_Break = LVT}]; $HangulSyllable = $L+ | ($L* ($LV? $V+ | $LV | $LVT) $T*) | $T+; @@ -36,14 +39,14 @@ $HangulSyllable = $L+ | ($L* ($LV? $V+ | $LV | $LVT) $T*) | $T+; !!forward; $CR $LF; -([^$Control] | $HangulSyllable) $Extend*; +([^$Control $CR $LF] | $HangulSyllable) $Extend*; ## ------------------------------------------------- !!reverse; $BackHangulSyllable = $L+ | ($T* ($V+$LV? | $LV | $LVT) $L*) | $T+; -$BackOneCluster = ($LF $CR) | ($Extend* ([^$Control] | $BackHangulSyllable)); +$BackOneCluster = ($LF $CR) | ($Extend* ([^$Control $CR $LF] | $BackHangulSyllable)); $BackOneCluster; ## ------------------------------------------------- diff --git a/icuSources/data/brkitr/en.txt b/icuSources/data/brkitr/en.txt new file mode 100644 index 00000000..6b7b82a2 --- /dev/null +++ b/icuSources/data/brkitr/en.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/xml/brkitr/en.xml +// * +// *************************************************************************** +en{ + Version{"1.1"} +} diff --git a/icuSources/data/brkitr/en_US.txt b/icuSources/data/brkitr/en_US.txt new file mode 100644 index 00000000..ea1504f5 --- /dev/null +++ b/icuSources/data/brkitr/en_US.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/xml/brkitr/en_US.xml +// * +// *************************************************************************** +en_US{ + Version{"1.1"} +} diff --git a/icuSources/data/brkitr/en_US_POSIX.txt b/icuSources/data/brkitr/en_US_POSIX.txt new file mode 100644 index 00000000..6f5ebe8a --- /dev/null +++ b/icuSources/data/brkitr/en_US_POSIX.txt @@ -0,0 +1,14 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/xml/brkitr/en_US_POSIX.xml +// * +// *************************************************************************** +en_US_POSIX{ + Version{"1.1"} + boundaries{ + word:process(dependency){"word_POSIX.brk"} + } +} diff --git a/icuSources/data/brkitr/ja.txt b/icuSources/data/brkitr/ja.txt new file mode 100644 index 00000000..690f13d4 --- /dev/null +++ b/icuSources/data/brkitr/ja.txt @@ -0,0 +1,14 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/xml/brkitr/ja.xml +// * +// *************************************************************************** +ja{ + Version{"1.1"} + boundaries{ + word:process(dependency){"word_ja.brk"} + } +} diff --git a/icuSources/data/brkitr/line.txt b/icuSources/data/brkitr/line.txt index 944a1ced..c306279d 100644 --- a/icuSources/data/brkitr/line.txt +++ b/icuSources/data/brkitr/line.txt @@ -1,391 +1,628 @@ -# Copyright (c) 2002-2004 International Business Machines Corporation and -# others. All Rights Reserved. -# -# file: line.txt -# -# Line Breaking Rules -# Implement default line breaking as defined by Unicode TR 14. -# - - -# -# Character Classes defined by TR 14. -# - -!!chain; -!!LBCMNoChain; -!!lookAheadHardBreak; - -$AI = [:LineBreak = Ambiguous:]; -$AL = [:LineBreak = Alphabetic:]; -$BA = [:LineBreak = Break_After:]; -$BB = [:LineBreak = Break_Before:]; -$BK = [:LineBreak = Mandatory_Break:]; -$B2 = [:LineBreak = Break_Both:]; -$CB = [:LineBreak = Contingent_Break:]; -$CL = [:LineBreak = Close_Punctuation:]; -$CM = [:LineBreak = Combining_Mark:]; -$CR = [:LineBreak = Carriage_Return:]; -$EX = [:LineBreak = Exclamation:]; -$GL = [:LineBreak = Glue:]; -$HY = [:LineBreak = Hyphen:]; -$ID = [:LineBreak = Ideographic:]; -$IN = [:LineBreak = Inseperable:]; -$IS = [:LineBreak = Infix_Numeric:]; -$LF = [:LineBreak = Line_Feed:]; -$NL = [:LineBreak = Next_Line:]; -$NS = [:LineBreak = Nonstarter:]; -$NU = [:LineBreak = Numeric:]; -$OP = [:LineBreak = Open_Punctuation:]; -$PO = [:LineBreak = Postfix_Numeric:]; -$PR = [:LineBreak = Prefix_Numeric:]; -$QU = [:LineBreak = Quotation:]; -$SA = [:LineBreak = Complex_Context:]; -$SG = [:LineBreak = Surrogate:]; -$SP = [:LineBreak = Space:]; -$SY = [:LineBreak = Break_Symbols:]; -$WJ = [:LineBreak = Word_Joiner:]; -$XX = [:LineBreak = Unknown:]; -$ZW = [:LineBreak = ZWSpace:]; - - -# -# Korean Syllable Definitions -# -$L = [:Hangul_Syllable_Type = L:]; -$V = [:Hangul_Syllable_Type = V:]; -$T = [:Hangul_Syllable_Type = T:]; - -$LV = [:Hangul_Syllable_Type = LV:]; -$LVT = [:Hangul_Syllable_Type = LVT:]; - -$HangulSyllable = $L+ | ($L* ($LV? $V+ | $LV | $LVT) $T*) | $T+; - -# -# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), -# SA (South East Asian: Thai, Lao, Khmer) -# XX (Unknown, unassigned) -# as $AL (Alphabetic) -# -$ALPlus = $AL | $AI | $SA | $XX; - -# -# Combining Marks. X $CM* behaves as if it were X. Rule LB6. -# -$ALcm = $ALPlus $CM*; -$BAcm = $BA $CM*; -$BBcm = $BB $CM*; -$B2cm = $B2 $CM*; -$CLcm = $CL $CM*; -$EXcm = $EX $CM*; -$GLcm = $GL $CM*; -$HYcm = $HY $CM*; -$IDcm = ($ID | $HangulSyllable) $CM*; -$INcm = $IN $CM*; -$IScm = $IS $CM*; -$NScm = $NS $CM*; -$NUcm = $NU $CM*; -$OPcm = $OP $CM*; -$POcm = $PO $CM*; -$PRcm = $PR $CM*; -$QUcm = $QU $CM*; -$SPcm = $SP $CM*; -$SYcm = $SY $CM*; -$WJcm = $WJ $CM*; - -# -# Each class of character can stand by itself as an unbroken token, with trailing combining stuff -# -$ALPlus $CM+; -$BA $CM+; -$BB $CM+; -$B2 $CM+; -$CL $CM+; -$EX $CM+; -$GL $CM+; -$HY $CM+; -$ID $CM+; -$IN $CM+; -$IS $CM+; -$NS $CM+; -$NU $CM+; -$OP $CM+; -$PO $CM+; -$PR $CM+; -$QU $CM+; -$SP $CM+; -$SY $CM+; -$WJ $CM+; - -## ------------------------------------------------- - -!!forward; - -# -# Rule LB 3 -$LB3Breaks = [$BK $CR $LF $NL]; -$LB3NonBreaks = [^$BK $CR $LF $NL]; -$LB5NonBreaks = [[$LB3NonBreaks] - [$ZW]]; - -$LB3NonBreaks? $LB3Breaks {100}; -$LB5NonBreaks $CM* $LB3Breaks {100}; -$CR $LF {100}; - -# LB 4 x SP -# x ZW -$ZW [$SP $ZW]; -$LB5NonBreaks $CM* [$SP $ZW]; - -# LB 5 Break after zero width space -$LB5Breaks = [$LB3Breaks $ZW]; - -# LB 6 -# -# Korean Syllable Definitions -# - -($HangulSyllable) $CM*; - -# LB 7 Combining marks. $SP $CM needs to behave like $ID. -# X $CM needs to behave like X, where X is not $SP. -# $CM not covered by the above needs to behave like $AL -# -$LB5NonBreaks $CM+; # Stick together any combining sequences that don't match other rules. - -# LB 8 -$LB5NonBreaks $CM* $CL; -$LB5NonBreaks $CM* $EX; -$LB5NonBreaks $CM* $IS; -$LB5NonBreaks $CM* $SY; - -# LB 9 -$OPcm $SP* .?; -$OPcm $SP* $LB5NonBreaks $CM*; - -# LB 10 -$QUcm $SP* $OPcm; - -# LB 11 -$CLcm $SP* $NScm; - -# LB 11a -($B2cm)+; - -# LB 11b -$LB5NonBreaks $CM* ($GLcm | $WJcm); -($GLcm | $WJcm) .?; - -# LB 12 -$LB12NonBreaks = [$LB5NonBreaks - $SP]; - -# LB 14 -$LB12NonBreaks $CM* $QUcm+ .?; -$LB12NonBreaks $CM* $QUcm+ $LB5NonBreaks $CM*; -$SP $CM+ $QUcm+ .?; # LB7a SP CM+ behaves as ID -$SP $CM+ $QUcm+ $LB5NonBreaks $CM*; - -$QUcm $LB3NonBreaks?; -$QUcm $LB5NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. - -# LB 14a -$LB14NonBreaks = [$LB12NonBreaks - $CB]; -$LB14CanBreakAfter = $LB14NonBreaks $CM* | $SP $CM+; - -# LB 15 -$LB14CanBreakAfter ($BAcm | $HYcm | $NScm); -$BBcm [^$CB]; -$BBcm [^$CB $CR $LF $BK $NL $ZW] $CM*; - -# LB 16 -$ALcm $INcm; -$CM+ $INcm; # by rule 7c, any otherwise unattached CM behaves as AL -$IDcm $INcm; -$SP $CM+ $INcm; # by rule 7a, $SP $CM behaves like ID -$INcm $INcm; -$NUcm $INcm; - - -# $LB 17 -($IDcm | $SP $CM+) $POcm; -$ALcm+ $NUcm; # includes $LB19 -$CM+ $NUcm; # Rule 7c -$NUcm $ALcm+; - -# LB 18 -$PRcm? ($OPcm | $HYcm)? $NUcm ($NUcm | $IScm | $SYcm)* $CLcm? $POcm?; -$PRcm $ALcm; -$PRcm $IDcm; - -# LB 19 -$CM* $ALcm+; # The $CM* is from rule 7C, and unattached CM is treated as AL -$IScm $ALcm; - -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -$CM+ $ALPlus; -$CM+ $BA; -$CM+ $BB; -$CM+ $B2; -$CM+ $CL; -$CM+ $EX; -$CM+ $GL; -$CM+ $HY; -$CM+ $ID; -$CM+ $IN; -$CM+ $IS; -$CM+ $NS; -$CM+ $NU; -$CM+ $OP; -$CM+ $PO; -$CM+ $PR; -$CM+ $QU; -$CM+ $SP; -$CM+ $SY; -$CM+ $WJ; - -# LB 3 - -$LB3Breaks $LB3NonBreaks; -$LB3Breaks $CM* $LB5NonBreaks; -$LF $CR; - -# LB 4 x SP -# x ZW -[$SP $ZW] $LB3NonBreaks; -[$SP $ZW] $CM* $LB5NonBreaks; - -# LB 5 Break after zero width space - -# LB 6 Jamo is treated like an alphabet - -$BackHangulSyllable = $L+ | ($T* ($V+$LV? | $LV | $LVT) $L*) | $T+; -$CM* $BackHangulSyllable; - -# LB 7 Combining marks. -# $SP $CM needs to behave like $ID. -# X $CM needs to behave like X, where X is not $SP. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -$CM+ $LB5NonBreaks; - -# LB 8 -$CL $CM* $LB5NonBreaks; -$EX $CM* $LB5NonBreaks; -$IS $CM* $LB5NonBreaks; -$SY $CM* $LB5NonBreaks; - -# LB 9 -$LB5NonBreaks $SP* $CM* $OP; - -# LB 10 -$CM* $OP $SP* $CM* $QU; - -# LB 11 -$CM* $NS $SP* $CM* $CL; - -# LB 11a -($CM* $B2)+; - -# LB 11b -$CM* ($GL | $WJ) $CM* $LB5NonBreaks; -$CM* $LB5NonBreaks $CM* ($GL | $WJ); -. $CM* ($GL | $WJ); - -# LB 12 - -# LB 14 -$CM* $QU $CM* $LB12NonBreaks; -$CM* $QU $CM+ $SP; -$CM* $LB5NonBreaks $CM* $QU; - -# LB 14a -$BackLB14CanBreakAfter = ($CM* [$LB14NonBreaks - $CM]) | ($CM+ $SP); - -# LB 15 -$CM* ($BA | $HY | $NS) $BackLB14CanBreakAfter; -($CM* ($BA | $HY | $NS))+ $CM+ / $LB5Breaks; -[$CR $LF $BK $NL $ZW] $CM* $BB; -$CM* [^$CB $CR $LF $BK $NL $ZW] $CM* $BB; - -# LB 16 -$CM* $IN $CM* $ALPlus; -# by rule 7c, any otherwise unattached CM behaves as AL -$CM* $IN $CM+ / $LB5Breaks; - -$CM* $IN $CM* ($ID | $CM $SP); -$CM* $IN $CM* $IN; -$CM* $IN $CM* $NU; - -# $LB 17 -$CM* $PO $CM* ($ID | $CM $SP); -$CM* $NU ($CM* $ALPlus)+; # includes $LB19 -$CM* $NU $CM+ / $LB5Breaks; # Rule 7c - -$CM* $ALPlus $CM* $NU; - -# LB 18 -($CM* $PO)? ($CM* $CL)? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* $PR)?; -$CM* $ALPlus $CM* $PR; -$CM* ($ID | $BackHangulSyllable) $CM* $PR; - -# LB 19 -$CM* $ALPlus $CM* $ALPlus; -# The $CM* is from rule 7C, and unattached CM is treated as AL -$CM* $ALPlus $CM* $IS; -$CM* $ALPlus $CM+ / $LB5Breaks; - -## problem state table can't handle lookahead when it is at the -## start of the string, currently handled in the rbbi code -## todo fix this - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 6 -$V+ $L; - -# LB 7 -$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -$CM+ $SP / .; - -# LB 9 -$SP+ $CM* $OP; - -# LB 10 -$SP+ $CM* $QU; - -# LB 11 -$SP+ $CM* $CL; - -# LB 18 -($CM* ($IS | $SY))+ $CM* $NU; -$CL $CM* ($NU | $IS | $SY); - -## ------------------------------------------------- - -!!safe_forward; - -# LB 6 -$V+ $T; - -# LB 7 -[^$BK $CR $LF $NL $ZW $SP] $CM+; -$SP $CM+ / [^$CM]; - -# LB 9 -$OP $CM* $SP+; - -# LB 10 -$QU $CM* $SP+; - -# LB 11 -$CL $CM* $SP+; - -# LB 18 -$CM* $PRcm? ($OPcm | $HYcm)? $NU; +# Copyright (c) 2002-2006 International Business Machines Corporation and +# others. All Rights Reserved. +# +# file: line.txt +# +# Line Breaking Rules +# Implement default line breaking as defined by Unicode Standard Annex #14 version 5.0.0 +# http://www.unicode.org/reports/tr14/ + + + +# +# Character Classes defined by TR 14. +# + +!!chain; +!!LBCMNoChain; + + +!!lookAheadHardBreak; +# +# !!lookAheadHardBreak Described here because it is (as yet) undocumented elsewhere +# and only used for the line break rules. +# +# It is used in the implementation of the incredibly annoying rule LB 10 +# which says to treat any combining mark that is not attached to a base +# character as if it were of class AL (alphabetic). +# +# The problem occurs in the reverse rules. +# +# Consider a sequence like, with correct breaks as shown +# LF ID CM AL AL +# ^ ^ ^ +# Then consider the sequence without the initial ID (ideographic) +# LF CM AL AL +# ^ ^ +# Our CM, which in the first example was attached to the ideograph, +# is now unattached, becomes an alpha, and joins in with the other +# alphas. +# +# When iterating forwards, these sequences do not present any problems +# When iterating backwards, we need to look ahead when encountering +# a CM to see whether it attaches to something further on or not. +# (Look-ahead in a reverse rule is looking towards the start) +# +# If the CM is unattached, we need to force a break. +# +# !!lookAheadHardBreak forces the run time state machine to +# stop immediately when a look ahead rule ( '/' operator) matches, +# and set the match position to that of the look-ahead operator, +# no matter what other rules may be in play at the time. +# +# See rule LB 19 for an example. +# + +$AI = [:LineBreak = Ambiguous:]; +$AL = [:LineBreak = Alphabetic:]; +$BA = [:LineBreak = Break_After:]; +$BB = [:LineBreak = Break_Before:]; +$BK = [:LineBreak = Mandatory_Break:]; +$B2 = [:LineBreak = Break_Both:]; +$CB = [:LineBreak = Contingent_Break:]; +$CL = [:LineBreak = Close_Punctuation:]; +$CM = [:LineBreak = Combining_Mark:]; +$CR = [:LineBreak = Carriage_Return:]; +$EX = [:LineBreak = Exclamation:]; +$GL = [:LineBreak = Glue:]; +$HY = [:LineBreak = Hyphen:]; +$H2 = [:LineBreak = H2:]; +$H3 = [:LineBreak = H3:]; +$ID = [:LineBreak = Ideographic:]; +$IN = [:LineBreak = Inseperable:]; +$IS = [:LineBreak = Infix_Numeric:]; +$JL = [:LineBreak = JL:]; +$JV = [:LineBreak = JV:]; +$JT = [:LineBreak = JT:]; +$LF = [:LineBreak = Line_Feed:]; +$NL = [:LineBreak = Next_Line:]; +$NS = [:LineBreak = Nonstarter:]; +$NU = [:LineBreak = Numeric:]; +$OP = [:LineBreak = Open_Punctuation:]; +$PO = [:LineBreak = Postfix_Numeric:]; +$PR = [:LineBreak = Prefix_Numeric:]; +$QU = [:LineBreak = Quotation:]; +$SA = [:LineBreak = Complex_Context:]; +$SG = [:LineBreak = Surrogate:]; +$SP = [:LineBreak = Space:]; +$SY = [:LineBreak = Break_Symbols:]; +$WJ = [:LineBreak = Word_Joiner:]; +$XX = [:LineBreak = Unknown:]; +$ZW = [:LineBreak = ZWSpace:]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; + +# +# Rule LB1. By default, treat AI (characters with ambiguous east Asian width), +# SA (South East Asian: Thai, Lao, Khmer) +# SG (Unpaired Surrogates) +# XX (Unknown, unassigned) +# as $AL (Alphabetic) +# +$ALPlus = [$AL $AI $SA $SG $XX]; + +# +# Combining Marks. X $CM* behaves as if it were X. Rule LB6. +# +$ALcm = $ALPlus $CM*; +$BAcm = $BA $CM*; +$BBcm = $BB $CM*; +$B2cm = $B2 $CM*; +$CLcm = $CL $CM*; +$EXcm = $EX $CM*; +$GLcm = $GL $CM*; +$HYcm = $HY $CM*; +$H2cm = $H2 $CM*; +$H3cm = $H3 $CM*; +$IDcm = $ID $CM*; +$INcm = $IN $CM*; +$IScm = $IS $CM*; +$JLcm = $JL $CM*; +$JVcm = $JV $CM*; +$JTcm = $JT $CM*; +$NScm = $NS $CM*; +$NUcm = $NU $CM*; +$OPcm = $OP $CM*; +$POcm = $PO $CM*; +$PRcm = $PR $CM*; +$QUcm = $QU $CM*; +$SYcm = $SY $CM*; +$WJcm = $WJ $CM*; + +## ------------------------------------------------- + +!!forward; + +# +# Each class of character can stand by itself as an unbroken token, with trailing combining stuff +# +$ALPlus $CM+; +$BA $CM+; +$BB $CM+; +$B2 $CM+; +$CL $CM+; +$EX $CM+; +$GL $CM+; +$HY $CM+; +$H2 $CM+; +$H3 $CM+; +$ID $CM+; +$IN $CM+; +$IS $CM+; +$JL $CM+; +$JV $CM+; +$JT $CM+; +$NS $CM+; +$NU $CM+; +$OP $CM+; +$PO $CM+; +$PR $CM+; +$QU $CM+; +$SY $CM+; +$WJ $CM+; + +# +# CAN_CM is the set of characters that may combine with CM combining chars. +# Note that Linebreak UAX 14's concept of a combining char and the rules +# for what they can combine with are _very_ different from the rest of Unicode. +# +# Note that $CM itself is left out of this set. If CM is needed as a base +# it must be listed separately in the rule. +# +$CAN_CM = [^$SP $BK $CR $LF $NL $ZW $CM]; # Bases that can take CMs +$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM]; # Bases that can't take CMs + +# +# AL_FOLLOW set of chars that can unconditionally follow an AL +# Needed in rules where stand-alone $CM s are treated as AL. +# Chaining is disabled with CM because it causes other failures, +# so for this one case we need to manually list out longer sequences. +# +$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP]; +$AL_FOLLOW_CM = [$CL $EX $IS $SY $WJ $GL $QU $BA $HY $NS $IN $NU $ALPlus $OP]; +$AL_FOLLOW = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM]; + + +# +# Rule LB 4, 5 Mandatory (Hard) breaks. +# +$LB4Breaks = [$BK $CR $LF $NL]; +$LB4NonBreaks = [^$BK $CR $LF $NL]; +$CR $LF {100}; + +# +# LB 6 Do not break before hard line breaks. +# +$LB4NonBreaks? $LB4Breaks {100}; # LB 5 do not break before hard breaks. +$CAN_CM $CM* $LB4Breaks {100}; +$CM+ $LB4Breaks {100}; + +# LB 7 x SP +# x ZW +$LB4NonBreaks [$SP $ZW]; +$CAN_CM $CM* [$SP $ZW]; +$CM+ [$SP $ZW]; + +# +# LB 8 Break after zero width space +# +$LB8Breaks = [$LB4Breaks $ZW]; +$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; + + +# LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL +# $CM not covered by the above needs to behave like $AL +# See definition of $CAN_CM. + +$CAN_CM $CM+; # Stick together any combining sequences that don't match other rules. +$CM+; + +# +# LB 11 Do not break before or after WORD JOINER & related characters. +# +$CAN_CM $CM* $WJcm; +$LB8NonBreaks $WJcm; +$CM+ $WJcm; + +$WJcm [^$CAN_CM]; +$WJcm $CAN_CM $CM*; + +# +# LB 12 Do not break before or after NBSP and related characters. +# +# (!SP) x GL +[$LB8NonBreaks-$SP] $CM* $GLcm; +$CM+ $GLcm; + +# GL x +$GLcm ($LB8Breaks | $SP); +$GLcm [$LB8NonBreaks-$SP] $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think we need this rule. + # All but $CM will chain off of preceding rule. + # $GLcm will pick up the CM case by itself. + + + + +# +# LB 13 Don't break before ']' or '!' or ';' or '/', even after spaces. +# +$LB8NonBreaks $CL; +$CAN_CM $CM* $CL; +$CM+ $CL; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $EX; +$CAN_CM $CM* $EX; +$CM+ $EX; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $IS; +$CAN_CM $CM* $IS; +$CM+ $IS; # by rule 10, stand-alone CM behaves as AL + +$LB8NonBreaks $SY; +$CAN_CM $CM* $SY; +$CM+ $SY; # by rule 10, stand-alone CM behaves as AL + + +# +# LB 14 Do not break after OP, even after spaced +# +$OPcm $SP* $CAN_CM $CM*; +$OPcm $SP* $CANT_CM; + +$OPcm $SP+ $CM+ $AL_FOLLOW?; # by rule 10, stand-alone CM behaves as AL + +# LB 15 +$QUcm $SP* $OPcm; + +# LB 16 +$CLcm $SP* $NScm; + +# LB 17 +$B2cm $SP* $B2cm; + +# +# LB 18 Break after spaces. +# +$LB18NonBreaks = [$LB8NonBreaks - [$SP]]; +$LB18Breaks = [$LB8Breaks $SP]; + + +# LB 19 +# x QU +$LB18NonBreaks $CM* $QUcm; +$CM+ $QUcm; + +# QU x +$QUcm .?; +$QUcm $LB18NonBreaks $CM*; # Don't let a combining mark go onto $CR, $BK, etc. + # TODO: I don't think this rule is needed. + + +# LB 20 +# $CB +# $CB + +$LB20NonBreaks = [$LB18NonBreaks - $CB]; + +# LB 21 x (BA | HY | NS) +# BB x +# +$LB20NonBreaks $CM* ($BAcm | $HYcm | $NScm); + +$BBcm [^$CB]; # $BB x +$BBcm $LB20NonBreaks $CM*; + +# LB 22 +$ALcm $INcm; +$CM+ $INcm; # by rule 10, any otherwise unattached CM behaves as AL +$IDcm $INcm; +$INcm $INcm; +$NUcm $INcm; + + +# $LB 23 +$IDcm $POcm; +$ALcm $NUcm; # includes $LB19 +$CM+ $NUcm; # Rule 10, any otherwise unattached CM behaves as AL +$NUcm $ALcm; + +# +# LB 24 +# +$PRcm $IDcm; +$PRcm $ALcm; +$POcm $ALcm; + +# +# LB 25 Numbers. +# +($PRcm | $POcm)? ($OPcm | $HYcm)? $NUcm ($NUcm | $SYcm | $IScm)* $CLcm? ($PRcm | $POcm)?; + +# LB 26 Do not break a Korean syllable +# +$JLcm ($JLcm | $JVcm | $H2cm | $H3cm); +($JVcm | $H2cm) ($JVcm | $JTcm); +($JTcm | $H3cm) $JTcm; + +# LB 27 Treat korean Syllable Block the same as ID (don't break it) +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm; +($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm; +$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm); + + +# LB 28 Do not break between alphabetics +# +$ALcm $ALcm; +$CM+ $ALcm; # The $CM+ is from rule 10, and unattached CM is treated as AL + +# LB 29 +$IScm $ALcm; + +# +# Rule 30 Do not break between letters, numbers or ordinary symbols +# and opening or closing punctuation +# +($ALcm | $NUcm) $OPcm; +$CM+ $OPcm; +$CLcm ($ALcm | $NUcm); + + + +# +# Reverse Rules. +# +## ------------------------------------------------- + +!!reverse; + +$CM+ $ALPlus; +$CM+ $BA; +$CM+ $BB; +$CM+ $B2; +$CM+ $CL; +$CM+ $EX; +$CM+ $GL; +$CM+ $HY; +$CM+ $H2; +$CM+ $H3; +$CM+ $ID; +$CM+ $IN; +$CM+ $IS; +$CM+ $JL; +$CM+ $JV; +$CM+ $JT; +$CM+ $NS; +$CM+ $NU; +$CM+ $OP; +$CM+ $PO; +$CM+ $PR; +$CM+ $QU; +$CM+ $SY; +$CM+ $WJ; +$CM+; + + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [whatever] +# The CM needs to behave as an AL +# +$AL_FOLLOW $CM+ / ( + [$BK $CR $LF $NL $ZW {eof}] | + $SP+ $CM+ $SP | + $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. + # LB14 says OP SP* x . + # becomes OP SP* x AL + # becomes OP SP* x CM+ AL_FOLLOW + # + # Further note: the $AL in [$AL {eof}] is only to work around + # a rule compiler bug which complains about + # empty sets otherwise. + +# +# Sequences of the form (shown forwards) +# [CANT_CM] [CM] [PR] +# The CM needs to behave as an AL +# This rule is concerned about getting the second of the two in place. +# + +[$PR ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}]; + + + +# LB 4, 5, 5 + +$LB4Breaks [$LB4NonBreaks-$CM]; +$LB4Breaks $CM+ $CAN_CM; +$LF $CR; + + +# LB 7 x SP +# x ZW +[$SP $ZW] [$LB4NonBreaks-$CM]; +[$SP $ZW] $CM+ $CAN_CM; + +# LB 8 Break after zero width space + + +# LB 9,10 Combining marks. +# X $CM needs to behave like X, where X is not $SP or controls. +# $CM not covered by the above needs to behave like $AL +# Stick together any combining sequences that don't match other rules. +$CM+ $CAN_CM; + + +# LB 11 +$CM* $WJ $CM* $CAN_CM; +$CM* $WJ [$LB8NonBreaks-$CM]; + + $CANT_CM $CM* $WJ; +$CM* $CAN_CM $CM* $WJ; + +# LB 12 +# x GL +# +$CM* $GL $CM* [$LB8NonBreaks-$CM-$SP]; + +# +# GL x +# +$CANT_CM $CM* $GL; +$CM* $CAN_CM $CM* $GL; + + +# LB 13 +$CL $CM+ $CAN_CM; +$EX $CM+ $CAN_CM; +$IS $CM+ $CAN_CM; +$SY $CM+ $CAN_CM; + +$CL [$LB8NonBreaks-$CM]; +$EX [$LB8NonBreaks-$CM]; +$IS [$LB8NonBreaks-$CM]; +$SY [$LB8NonBreaks-$CM]; + +# Rule 13 & 14 taken together for an edge case. +# Match this, shown forward +# OP SP+ ($CM+ behaving as $AL) (CL | EX | IS | IY) +# This really wants to chain at the $CM+ (which is acting as an $AL) +# except for $CM chaining being disabled. +[$CL $EX $IS $SY] $CM+ $SP+ $CM* $OP; + +# LB 14 OP SP* x +# +$CM* $CAN_CM $SP* $CM* $OP; + $CANT_CM $SP* $CM* $OP; +$AL_FOLLOW? $CM+ $SP $SP* $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP + + $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP; +$CM* $AL_FOLLOW_CM $CM+ $SP+ $CM* $OP; +$SY $CM $SP+ $OP; # TODO: Experiment. Remove. + + + +# LB 15 +$CM* $OP $SP* $CM* $QU; + +# LB 16 +$CM* $NS $SP* $CM* $CL; + +# LB 17 +$CM* $B2 $SP* $CM* $B2; + +# LB 18 break after spaces +# Nothing explicit needed here. + + +# +# LB 19 +# +$CM* $QU $CM* $CAN_CM; # . x QU +$CM* $QU $LB18NonBreaks; + + +$CM* $CAN_CM $CM* $QU; # QU x . + $CANT_CM $CM* $QU; + +# +# LB 20 Break before and after CB. +# nothing needed here. +# + +# LB 21 +$CM* ($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) + +$CM* [$LB20NonBreaks-$CM] $CM* $BB; # BB x . +[^$CB] $CM* $BB; # + + + +# LB 22 +$CM* $IN $CM* $ALPlus; +$CM* $IN $CM* $ID; +$CM* $IN $CM* $IN; +$CM* $IN $CM* $NU; + +# LB 23 +$CM* $PO $CM* $ID; +$CM* $NU $CM* $ALPlus; +$CM* $ALPlus $CM* $NU; + +# LB 24 +$CM* $ID $CM* $PR; +$CM* $ALPlus $CM* $PR; +$CM* $ALPlus $CM* $PO; + + +# LB 25 +($CM* ($PR | $PO))? ($CM* $CL)? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; + +# LB 26 +$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL; +$CM* ($JT | $JV) $CM* ($H2 | $JV); +$CM* $JT $CM* ($H3 | $JT); + +# LB 27 +$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL); +$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; + +# LB 28 +$CM* $ALPlus $CM* $ALPlus; + + +# LB 29 +$CM* $ALPlus $CM* $IS; + +# LB 30 +$CM* $OP $CM* ($NU | $ALPlus); +$CM* ($NU | $ALPlus) $CM* $CL; + + +## ------------------------------------------------- + +!!safe_reverse; + +# LB 7 +$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; +$CM+ $SP / .; + +# LB 9 +$SP+ $CM* $OP; + +# LB 10 +$SP+ $CM* $QU; + +# LB 11 +$SP+ $CM* $CL; +$SP+ $CM* $B2; + +# LB 18 +($CM* ($IS | $SY))+ $CM* $NU; +$CL $CM* ($NU | $IS | $SY); + +# For dictionary-based break +$dictionary $dictionary; + +## ------------------------------------------------- + +!!safe_forward; + +# Skip forward over all character classes that are involved in +# rules containing patterns with possibly more than one char +# of context. +# +# It might be slightly more efficient to have specific rules +# instead of one generic one, but only if we could +# turn off rule chaining. We don't want to move more +# than necessary. +# +[$CM $OP $QU $CL $B2 $PR $HY $SP $dictionary]+ [^$CM $OP $QU $CL $B2 $PR $HY $dictionary]; +$dictionary $dictionary; + diff --git a/icuSources/data/brkitr/line_th.txt b/icuSources/data/brkitr/line_th.txt deleted file mode 100644 index 6a151836..00000000 --- a/icuSources/data/brkitr/line_th.txt +++ /dev/null @@ -1,393 +0,0 @@ -# Copyright (c) 2002-2003, International Business Machines Corporation and -# others. All Rights Reserved. -# -# file: line.txt -# -# Line Breaking Rules for ICU rules based break iteration. -# Implement default line breaking as defined by Unicode TR 14. -# - - -# -# Character Classes defined by Unicode TR 14. -# These are generated by a script from the Unicode LineBreak derived -# properties file. -# - -############ Start of Script-Generated Definitions ####################### - -$LF = [ \u000A]; - -$IN = [ \u2024-\u2026]; - -$SY = [ \u002F]; - -$EX = [ \u0021 \u003F \u2762-\u2763 \uFE56-\uFE57 \uFF01 \uFF1F]; - -$BA = [ \u0009 \u007C \u00AD \u058A \u0F0B \u1361 \u1680 \u17D5 \u2000-\u2006 - \u2008-\u200A \u2010 \u2012-\u2013 \u2027 \u205F]; - -$IS = [ \u002C \u002E \u003A-\u003B \u0589]; - -$BB = [ \u00B4 \u02C8 \u02CC \u1806]; - -$SA = [ \u0E01-\u0E30 \u0E32-\u0E33 \u0E40-\u0E46 \u0E81-\u0E82 \u0E84 \u0E87-\u0E88 - \u0E8A \u0E8D \u0E94-\u0E97 \u0E99-\u0E9F \u0EA1-\u0EA3 \u0EA5 - \u0EA7 \u0EAA-\u0EAB \u0EAD-\u0EB0 \u0EB2-\u0EB3 \u0EBD \u0EC0-\u0EC4 - \u0EC6 \u0EDC-\u0EDD \u1000-\u1021 \u1023-\u1027 \u1029-\u102A - \u1050-\u1055 \u1780-\u17B3]; - -$CB = [ \uFFFC]; - -$XX = [ \uE000-\uF8FF \U000F0000-\U000FFFFD \U00100000-\U0010FFFD]; - -$HY = [ \u002D]; - -$AI = [ \u00A1 \u00A7-\u00A8 \u00AA \u00B2-\u00B3 \u00B6-\u00BA \u00BC-\u00BF - \u00C6 \u00D0 \u00D7-\u00D8 \u00DE-\u00E1 \u00E6 \u00E8-\u00EA - \u00EC-\u00ED \u00F0 \u00F2-\u00F3 \u00F7-\u00FA \u00FC \u00FE - \u0101 \u0111 \u0113 \u011B \u0126-\u0127 \u012B \u0131-\u0133 - \u0138 \u013F-\u0142 \u0144 \u0148-\u014A \u014D \u0152-\u0153 - \u0166-\u0167 \u016B \u01CE \u01D0 \u01D2 \u01D4 \u01D6 \u01D8 - \u01DA \u01DC \u0251 \u0261 \u02C7 \u02C9-\u02CB \u02CD \u02D0 - \u02D8-\u02DB \u02DD \u0391-\u03A1 \u03A3-\u03A9 \u03B1-\u03C1 - \u03C3-\u03C9 \u0401 \u0410-\u044F \u0451 \u2015-\u2016 \u2020-\u2021 - \u203B \u2074 \u207F \u2081-\u2084 \u2105 \u2113 \u2121-\u2122 - \u212B \u2140 \u2154-\u2155 \u215B \u215E \u2160-\u216B \u2170-\u2179 - \u2190-\u2199 \u21D2 \u21D4 \u2200 \u2202-\u2203 \u2207-\u2208 - \u220B \u220F \u2211 \u2215 \u221A \u221D-\u2220 \u2223 \u2225 - \u2227-\u222C \u222E \u2234-\u2237 \u223C-\u223D \u2248 \u224C - \u2252 \u2260-\u2261 \u2264-\u2267 \u226A-\u226B \u226E-\u226F - \u2282-\u2283 \u2286-\u2287 \u2295 \u2299 \u22A5 \u22BF \u2312 - \u2460-\u24BF \u24D0-\u24E9 \u24EB-\u24FE \u2500-\u254B \u2550-\u2574 - \u2580-\u258F \u2592-\u2595 \u25A0-\u25A1 \u25A3-\u25A9 \u25B2-\u25B3 - \u25B6-\u25B7 \u25BC-\u25BD \u25C0-\u25C1 \u25C6-\u25C8 \u25CB - \u25CE-\u25D1 \u25E2-\u25E5 \u25EF \u2605-\u2606 \u2609 \u260E-\u260F - \u2616-\u2617 \u261C \u261E \u2640 \u2642 \u2660-\u2661 \u2663-\u2665 - \u2667-\u266A \u266C-\u266D \u266F \uFFFD]; - -$ZW = [ \u200B]; - -$SG = [ \uD800-\uDFFF]; - -$AL = [ \u0023 \u0026 \u002A \u003C-\u003E \u0040-\u005A \u005E-\u007A \u007E - \u00A6 \u00A9 \u00AC \u00AE-\u00AF \u00B5 \u00C0-\u00C5 \u00C7-\u00CF - \u00D1-\u00D6 \u00D9-\u00DD \u00E2-\u00E5 \u00E7 \u00EB \u00EE-\u00EF - \u00F1 \u00F4-\u00F6 \u00FB \u00FD \u00FF-\u0100 \u0102-\u0110 - \u0112 \u0114-\u011A \u011C-\u0125 \u0128-\u012A \u012C-\u0130 - \u0134-\u0137 \u0139-\u013E \u0143 \u0145-\u0147 \u014B-\u014C - \u014E-\u0151 \u0154-\u0165 \u0168-\u016A \u016C-\u01CD \u01CF - \u01D1 \u01D3 \u01D5 \u01D7 \u01D9 \u01DB \u01DD-\u0220 \u0222-\u0233 - \u0250 \u0252-\u0260 \u0262-\u02AD \u02B0-\u02C6 \u02CE-\u02CF - \u02D1-\u02D7 \u02DC \u02DE-\u02EE \u0374-\u0375 \u037A \u037E - \u0384-\u038A \u038C \u038E-\u0390 \u03AA-\u03B0 \u03C2 \u03CA-\u03CE - \u03D0-\u03F6 \u0400 \u0402-\u040F \u0450 \u0452-\u0482 \u048A-\u04CE - \u04D0-\u04F5 \u04F8-\u04F9 \u0500-\u050F \u0531-\u0556 \u0559-\u055F - \u0561-\u0587 \u05BE \u05C0 \u05C3 \u05D0-\u05EA \u05F0-\u05F4 - \u060C \u061B \u061F \u0621-\u063A \u0640-\u064A \u066A-\u066F - \u0671-\u06D5 \u06E5-\u06E6 \u06E9 \u06FA-\u06FE \u0700-\u070D - \u0710 \u0712-\u072C \u0780-\u07A5 \u07B1 \u0905-\u0939 \u093D - \u0950 \u0958-\u0961 \u0964-\u0965 \u0970 \u0985-\u098C \u098F-\u0990 - \u0993-\u09A8 \u09AA-\u09B0 \u09B2 \u09B6-\u09B9 \u09DC-\u09DD - \u09DF-\u09E1 \u09F0-\u09F1 \u09F4-\u09FA \u0A05-\u0A0A \u0A0F-\u0A10 - \u0A13-\u0A28 \u0A2A-\u0A30 \u0A32-\u0A33 \u0A35-\u0A36 \u0A38-\u0A39 - \u0A59-\u0A5C \u0A5E \u0A72-\u0A74 \u0A85-\u0A8B \u0A8D \u0A8F-\u0A91 - \u0A93-\u0AA8 \u0AAA-\u0AB0 \u0AB2-\u0AB3 \u0AB5-\u0AB9 \u0ABD - \u0AD0 \u0AE0 \u0B05-\u0B0C \u0B0F-\u0B10 \u0B13-\u0B28 \u0B2A-\u0B30 - \u0B32-\u0B33 \u0B36-\u0B39 \u0B3D \u0B5C-\u0B5D \u0B5F-\u0B61 - \u0B70 \u0B83 \u0B85-\u0B8A \u0B8E-\u0B90 \u0B92-\u0B95 \u0B99-\u0B9A - \u0B9C \u0B9E-\u0B9F \u0BA3-\u0BA4 \u0BA8-\u0BAA \u0BAE-\u0BB5 - \u0BB7-\u0BB9 \u0BF0-\u0BF2 \u0C05-\u0C0C \u0C0E-\u0C10 \u0C12-\u0C28 - \u0C2A-\u0C33 \u0C35-\u0C39 \u0C60-\u0C61 \u0C85-\u0C8C \u0C8E-\u0C90 - \u0C92-\u0CA8 \u0CAA-\u0CB3 \u0CB5-\u0CB9 \u0CDE \u0CE0-\u0CE1 - \u0D05-\u0D0C \u0D0E-\u0D10 \u0D12-\u0D28 \u0D2A-\u0D39 \u0D60-\u0D61 - \u0D85-\u0D96 \u0D9A-\u0DB1 \u0DB3-\u0DBB \u0DBD \u0DC0-\u0DC6 - \u0DF4 \u0E4F \u0F00-\u0F0A \u0F0D-\u0F17 \u0F1A-\u0F1F \u0F2A-\u0F34 - \u0F36 \u0F38 \u0F40-\u0F47 \u0F49-\u0F6A \u0F85 \u0F88-\u0F8B - \u0FBE-\u0FC5 \u0FC7-\u0FCC \u0FCF \u104A-\u104F \u10A0-\u10C5 - \u10D0-\u10F8 \u10FB \u1200-\u1206 \u1208-\u1246 \u1248 \u124A-\u124D - \u1250-\u1256 \u1258 \u125A-\u125D \u1260-\u1286 \u1288 \u128A-\u128D - \u1290-\u12AE \u12B0 \u12B2-\u12B5 \u12B8-\u12BE \u12C0 \u12C2-\u12C5 - \u12C8-\u12CE \u12D0-\u12D6 \u12D8-\u12EE \u12F0-\u130E \u1310 - \u1312-\u1315 \u1318-\u131E \u1320-\u1346 \u1348-\u135A \u1362-\u1368 - \u1372-\u137C \u13A0-\u13F4 \u1401-\u1676 \u1681-\u169A \u16A0-\u16F0 - \u1700-\u170C \u170E-\u1711 \u1720-\u1731 \u1735-\u1736 \u1740-\u1751 - \u1760-\u176C \u176E-\u1770 \u17DC \u1800-\u1805 \u1807-\u180A - \u1820-\u1877 \u1880-\u18A8 \u1E00-\u1E9B \u1EA0-\u1EF9 \u1F00-\u1F15 - \u1F18-\u1F1D \u1F20-\u1F45 \u1F48-\u1F4D \u1F50-\u1F57 \u1F59 - \u1F5B \u1F5D \u1F5F-\u1F7D \u1F80-\u1FB4 \u1FB6-\u1FC4 \u1FC6-\u1FD3 - \u1FD6-\u1FDB \u1FDD-\u1FEF \u1FF2-\u1FF4 \u1FF6-\u1FFE \u2017 - \u2022-\u2023 \u2038 \u203D-\u2043 \u2047-\u2052 \u2057 \u2061-\u2063 - \u2070-\u2071 \u2075-\u207C \u2080 \u2085-\u208C \u2100-\u2102 - \u2104 \u2106-\u2108 \u210A-\u2112 \u2114-\u2115 \u2117-\u2120 - \u2123-\u2125 \u2127-\u212A \u212C-\u213A \u213D-\u213F \u2141-\u214B - \u2153 \u2156-\u215A \u215C-\u215D \u215F \u216C-\u216F \u217A-\u2183 - \u219A-\u21D1 \u21D3 \u21D5-\u21FF \u2201 \u2204-\u2206 \u2209-\u220A - \u220C-\u220E \u2210 \u2214 \u2216-\u2219 \u221B-\u221C \u2221-\u2222 - \u2224 \u2226 \u222D \u222F-\u2233 \u2238-\u223B \u223E-\u2247 - \u2249-\u224B \u224D-\u2251 \u2253-\u225F \u2262-\u2263 \u2268-\u2269 - \u226C-\u226D \u2270-\u2281 \u2284-\u2285 \u2288-\u2294 \u2296-\u2298 - \u229A-\u22A4 \u22A6-\u22BE \u22C0-\u2311 \u2313-\u2328 \u232B-\u23B3 - \u23B7-\u23CE \u2400-\u2426 \u2440-\u244A \u24C0-\u24CF \u24EA - \u254C-\u254F \u2575-\u257F \u2590-\u2591 \u2596-\u259F \u25A2 - \u25AA-\u25B1 \u25B4-\u25B5 \u25B8-\u25BB \u25BE-\u25BF \u25C2-\u25C5 - \u25C9-\u25CA \u25CC-\u25CD \u25D2-\u25E1 \u25E6-\u25EE \u25F0-\u2604 - \u2607-\u2608 \u260A-\u260D \u2610-\u2613 \u2619-\u261B \u261D - \u261F-\u263F \u2641 \u2643-\u265F \u2662 \u2666 \u266B \u266E - \u2670-\u267D \u2680-\u2689 \u2701-\u2704 \u2706-\u2709 \u270C-\u2727 - \u2729-\u274B \u274D \u274F-\u2752 \u2756 \u2758-\u275A \u2761 - \u2764-\u2767 \u2776-\u2794 \u2798-\u27AF \u27B1-\u27BE \u27D0-\u27E5 - \u27F0-\u2982 \u2999-\u29D7 \u29DC-\u29FB \u29FE-\u2AFF \uFB00-\uFB06 - \uFB13-\uFB17 \uFB1D \uFB1F-\uFB36 \uFB38-\uFB3C \uFB3E \uFB40-\uFB41 - \uFB43-\uFB44 \uFB46-\uFBB1 \uFBD3-\uFD3D \uFD50-\uFD8F \uFD92-\uFDC7 - \uFDF0-\uFDFB \uFE70-\uFE74 \uFE76-\uFEFC \uFF66 \uFF71-\uFF9D - \uFFA0-\uFFBE \uFFC2-\uFFC7 \uFFCA-\uFFCF \uFFD2-\uFFD7 \uFFDA-\uFFDC - \uFFE8-\uFFEE \U00010300-\U0001031E \U00010320-\U00010323 \U00010330-\U0001034A - \U00010400-\U00010425 \U00010428-\U0001044D \U0001D000-\U0001D0F5 - \U0001D100-\U0001D126 \U0001D12A-\U0001D164 \U0001D16A-\U0001D16C - \U0001D183-\U0001D184 \U0001D18C-\U0001D1A9 \U0001D1AE-\U0001D1DD - \U0001D400-\U0001D454 \U0001D456-\U0001D49C \U0001D49E-\U0001D49F - \U0001D4A2 \U0001D4A5-\U0001D4A6 \U0001D4A9-\U0001D4AC \U0001D4AE-\U0001D4B9 - \U0001D4BB \U0001D4BD-\U0001D4C0 \U0001D4C2-\U0001D4C3 \U0001D4C5-\U0001D505 - \U0001D507-\U0001D50A \U0001D50D-\U0001D514 \U0001D516-\U0001D51C - \U0001D51E-\U0001D539 \U0001D53B-\U0001D53E \U0001D540-\U0001D544 - \U0001D546 \U0001D54A-\U0001D550 \U0001D552-\U0001D6A3 \U0001D6A8-\U0001D7C9]; - -$OP = [ \u0028 \u005B \u007B \u0F3A \u0F3C \u169B \u201A \u201E \u2045 \u207D - \u208D \u2329 \u23B4 \u2768 \u276A \u276C \u276E \u2770 \u2772 - \u2774 \u27E6 \u27E8 \u27EA \u2983 \u2985 \u2987 \u2989 \u298B - \u298D \u298F \u2991 \u2993 \u2995 \u2997 \u29D8 \u29DA \u29FC - \u3008 \u300A \u300C \u300E \u3010 \u3014 \u3016 \u3018 \u301A - \u301D \uFD3E \uFE35 \uFE37 \uFE39 \uFE3B \uFE3D \uFE3F \uFE41 - \uFE43 \uFE59 \uFE5B \uFE5D \uFF08 \uFF3B \uFF5B \uFF5F \uFF62]; - -$BK = [ \u000C \u2028-\u2029]; - -$PO = [ \u0025 \u00A2 \u00B0 \u2030-\u2037 \u20A7 \u2103 \u2109 \u2126 \uFDFC - \uFE6A \uFF05 \uFFE0]; - -$NS = [ \u0E5A-\u0E5B \u17D4 \u17D6-\u17DA \u203C \u2044 \u3005 \u301C \u303B-\u303C - \u3041 \u3043 \u3045 \u3047 \u3049 \u3063 \u3083 \u3085 \u3087 - \u308E \u3095-\u3096 \u309B-\u309E \u30A0-\u30A1 \u30A3 \u30A5 - \u30A7 \u30A9 \u30C3 \u30E3 \u30E5 \u30E7 \u30EE \u30F5-\u30F6 - \u30FB \u30FD \u31F0-\u31FF \uFE54-\uFE55 \uFF1A-\uFF1B \uFF65 - \uFF67-\uFF70 \uFF9E-\uFF9F]; - -$CL = [ \u0029 \u005D \u007D \u0F3B \u0F3D \u169C \u2046 \u207E \u208E \u232A - \u23B5 \u2769 \u276B \u276D \u276F \u2771 \u2773 \u2775 \u27E7 - \u27E9 \u27EB \u2984 \u2986 \u2988 \u298A \u298C \u298E \u2990 - \u2992 \u2994 \u2996 \u2998 \u29D9 \u29DB \u29FD \u3001-\u3002 - \u3009 \u300B \u300D \u300F \u3011 \u3015 \u3017 \u3019 \u301B - \u301E-\u301F \uFD3F \uFE36 \uFE38 \uFE3A \uFE3C \uFE3E \uFE40 - \uFE42 \uFE44 \uFE50 \uFE52 \uFE5A \uFE5C \uFE5E \uFF09 \uFF0C - \uFF0E \uFF3D \uFF5D \uFF60-\uFF61 \uFF63-\uFF64]; - -$NU = [ \u0030-\u0039 \u0660-\u0669 \u06F0-\u06F9 \u0966-\u096F \u09E6-\u09EF - \u0A66-\u0A6F \u0AE6-\u0AEF \u0B66-\u0B6F \u0BE7-\u0BEF \u0C66-\u0C6F - \u0CE6-\u0CEF \u0D66-\u0D6F \u0E50-\u0E59 \u0ED0-\u0ED9 \u0F20-\u0F29 - \u1040-\u1049 \u1369-\u1371 \u17E0-\u17E9 \u1810-\u1819 \U0001D7CE-\U0001D7FF]; - -$CM = [ \u0000-\u0008 \u000B \u000E-\u001F \u007F-\u009F \u0300-\u034F \u0360-\u036F - \u0483-\u0486 \u0488-\u0489 \u0591-\u05A1 \u05A3-\u05B9 \u05BB-\u05BD - \u05BF \u05C1-\u05C2 \u05C4 \u064B-\u0655 \u0670 \u06D6-\u06E4 - \u06E7-\u06E8 \u06EA-\u06ED \u070F \u0711 \u0730-\u074A \u07A6-\u07B0 - \u0901-\u0903 \u093C \u093E-\u094D \u0951-\u0954 \u0962-\u0963 - \u0981-\u0983 \u09BC \u09BE-\u09C4 \u09C7-\u09C8 \u09CB-\u09CD - \u09D7 \u09E2-\u09E3 \u0A02 \u0A3C \u0A3E-\u0A42 \u0A47-\u0A48 - \u0A4B-\u0A4D \u0A70-\u0A71 \u0A81-\u0A83 \u0ABC \u0ABE-\u0AC5 - \u0AC7-\u0AC9 \u0ACB-\u0ACD \u0B01-\u0B03 \u0B3C \u0B3E-\u0B43 - \u0B47-\u0B48 \u0B4B-\u0B4D \u0B56-\u0B57 \u0B82 \u0BBE-\u0BC2 - \u0BC6-\u0BC8 \u0BCA-\u0BCD \u0BD7 \u0C01-\u0C03 \u0C3E-\u0C44 - \u0C46-\u0C48 \u0C4A-\u0C4D \u0C55-\u0C56 \u0C82-\u0C83 \u0CBE-\u0CC4 - \u0CC6-\u0CC8 \u0CCA-\u0CCD \u0CD5-\u0CD6 \u0D02-\u0D03 \u0D3E-\u0D43 - \u0D46-\u0D48 \u0D4A-\u0D4D \u0D57 \u0D82-\u0D83 \u0DCA \u0DCF-\u0DD4 - \u0DD6 \u0DD8-\u0DDF \u0DF2-\u0DF3 \u0E31 \u0E34-\u0E3A \u0E47-\u0E4E - \u0EB1 \u0EB4-\u0EB9 \u0EBB-\u0EBC \u0EC8-\u0ECD \u0F18-\u0F19 - \u0F35 \u0F37 \u0F39 \u0F3E-\u0F3F \u0F71-\u0F84 \u0F86-\u0F87 - \u0F90-\u0F97 \u0F99-\u0FBC \u0FC6 \u102C-\u1032 \u1036-\u1039 - \u1056-\u1059 \u1160-\u11A2 \u11A8-\u11F9 \u1712-\u1714 \u1732-\u1734 - \u1752-\u1753 \u1772-\u1773 \u17B4-\u17D3 \u180B-\u180E \u18A9 - \u200C-\u200F \u202A-\u202E \u206A-\u206F \u20D0-\u20EA \u302A-\u302F - \u3099-\u309A \uFB1E \uFE00-\uFE0F \uFE20-\uFE23 \uFFF9-\uFFFB - \U0001D165-\U0001D169 \U0001D16D-\U0001D182 \U0001D185-\U0001D18B - \U0001D1AA-\U0001D1AD \U000E0001 \U000E0020-\U000E007F]; - -$PR = [ \u0024 \u002B \u005C \u00A3-\u00A5 \u00B1 \u09F2-\u09F3 \u0E3F \u17DB - \u20A0-\u20A6 \u20A8-\u20B1 \u2116 \u2212-\u2213 \uFE69 \uFF04 - \uFFE1 \uFFE5-\uFFE6]; - -$B2 = [ \u2014]; - -$ID = [ \u1100-\u1159 \u115F \u2E80-\u2E99 \u2E9B-\u2EF3 \u2F00-\u2FD5 \u2FF0-\u2FFB - \u3000 \u3003-\u3004 \u3006-\u3007 \u3012-\u3013 \u3020-\u3029 - \u3030-\u303A \u303D-\u303F \u3042 \u3044 \u3046 \u3048 \u304A-\u3062 - \u3064-\u3082 \u3084 \u3086 \u3088-\u308D \u308F-\u3094 \u309F - \u30A2 \u30A4 \u30A6 \u30A8 \u30AA-\u30C2 \u30C4-\u30E2 \u30E4 - \u30E6 \u30E8-\u30ED \u30EF-\u30F4 \u30F7-\u30FA \u30FC \u30FE-\u30FF - \u3105-\u312C \u3131-\u318E \u3190-\u31B7 \u3200-\u321C \u3220-\u3243 - \u3251-\u327B \u327F-\u32CB \u32D0-\u32FE \u3300-\u3376 \u337B-\u33DD - \u33E0-\u33FE \u3400-\u4DB5 \u4E00-\u9FA5 \uA000-\uA48C \uA490-\uA4C6 - \uAC00-\uD7A3 \uF900-\uFA2D \uFA30-\uFA6A \uFE30-\uFE34 \uFE45-\uFE46 - \uFE49-\uFE4F \uFE51 \uFE58 \uFE5F-\uFE66 \uFE68 \uFE6B \uFF02-\uFF03 - \uFF06-\uFF07 \uFF0A-\uFF0B \uFF0D \uFF0F-\uFF19 \uFF1C-\uFF1E - \uFF20-\uFF3A \uFF3C \uFF3E-\uFF5A \uFF5C \uFF5E \uFFE2-\uFFE4 - \U00020000-\U0002A6D6 \U0002F800-\U0002FA1D]; - -$SP = [ \u0020]; - -$QU = [ \u0022 \u0027 \u00AB \u00BB \u2018-\u2019 \u201B-\u201D \u201F \u2039-\u203A - \u23B6 \u275B-\u275E]; - -$CR = [ \u000D]; - -$GL = [ \u00A0 \u0F0C \u2007 \u2011 \u202F \u2060 \uFEFF]; - -############ End of Script-Generated Definitions ####################### - - - -# -# Thai Dictionary related definitions and rules -# - -$dictionary = [\u0e01-\u0e2e \u0e30-\u0e3a \u0e40-\u0e44 \u0e47-\u0e4e]; # this rule breaks the iterator with mixed Thai and English -$paiyannoi = [\u0e2f]; -$maiyamok = [\u0e46]; -$thai_etc = $paiyannoi \u0e25 $paiyannoi; - - - - -# -# Character classes from TR 29. Needed for finding characters. -# -# $Extend is all combining characters, and none of the other cruft that -# TR14 puts into $CM, which is its concept of combining marks. -# -$Extend = # From UNIDATA/DerivedCoreProperties.txt - [\u0300-\u034E \u0360-\u036F \u0483-\u0486 \u0488-\u0489 \u0591-\u05A1 \u05A3-\u05B9 - \u05BB-\u05BD \u05BF \u05C1-\u05C2 \u05C4 \u064B-\u0655 \u0670 \u06D6-\u06DC - \u06DE \u06DF-\u06E4 \u06E7-\u06E8 \u06EA-\u06ED \u0711 \u0730-\u074A - \u07A6-\u07B0 \u0901-\u0902 \u0903 \u093C \u093E-\u0940 \u0941-\u0948 - \u0949-\u094C \u0951-\u0954 \u0962-\u0963 \u0981 \u0982-\u0983 \u09BC - \u09BE-\u09C0 \u09C1-\u09C4 \u09C7-\u09C8 \u09CB-\u09CC \u09D7 \u09E2-\u09E3 - \u0A02 \u0A3C \u0A3E-\u0A40 \u0A41-\u0A42 \u0A47-\u0A48 \u0A4B-\u0A4C - \u0A70-\u0A71 \u0A81-\u0A82 \u0A83 \u0ABC \u0ABE-\u0AC0 \u0AC1-\u0AC5 - \u0AC7-\u0AC8 \u0AC9 \u0ACB-\u0ACC \u0B01 \u0B02-\u0B03 \u0B3C \u0B3E - \u0B3F \u0B40 \u0B41-\u0B43 \u0B47-\u0B48 \u0B4B-\u0B4C \u0B56 \u0B57 - \u0B82 \u0BBE-\u0BBF \u0BC0 \u0BC1-\u0BC2 \u0BC6-\u0BC8 \u0BCA-\u0BCC \u0BD7 - \u0C01-\u0C03 \u0C3E-\u0C40 \u0C41-\u0C44 \u0C46-\u0C48 \u0C4A-\u0C4C - \u0C55-\u0C56 \u0C82-\u0C83 \u0CBE \u0CBF \u0CC0-\u0CC4 \u0CC6 - \u0CC7-\u0CC8 \u0CCA-\u0CCB \u0CCC \u0CD5-\u0CD6 \u0D02-\u0D03 \u0D3E-\u0D40 - \u0D41-\u0D43 \u0D46-\u0D48 \u0D4A-\u0D4C \u0D57 \u0D82-\u0D83 \u0DCF-\u0DD1 - \u0DD2-\u0DD4 \u0DD6 \u0DD8-\u0DDF \u0DF2-\u0DF3 \u0E31 \u0E34-\u0E39 - \u0E47-\u0E4E \u0EB1 \u0EB4-\u0EB9 \u0EBB-\u0EBC \u0EC8-\u0ECD \u0F18-\u0F19 - \u0F35 \u0F37 \u0F39 \u0F3E-\u0F3F \u0F71-\u0F7E \u0F7F \u0F80-\u0F84 - \u0F86-\u0F87 \u0F90-\u0F97 \u0F99-\u0FBC \u0FC6 \u102C \u102D-\u1030 \u1031 - \u1032 \u1036-\u1037 \u1038 \u1056-\u1057 \u1058-\u1059 \u1712-\u1714 - \u1732-\u1734 \u1752-\u1753 \u1772-\u1773 \u17B4-\u17B6 \u17B7-\u17BD - \u17BE-\u17C5 \u17C6 \u17C7-\u17C8 \u17C9-\u17D1 \u17D3 \u180B-\u180D - \u18A9 \u20D0-\u20DC \u20DD-\u20E0 \u20E1 \u20E2-\u20E4 \u20E5-\u20EA - \u302A-\u302F \u3099-\u309A \uFB1E \uFE00-\uFE0F \uFE20-\uFE23 \uFF9E-\uFF9F - \U0001D165-\U0001D166 \U0001D167-\U0001D169 \U0001D16D-\U0001D172 - \U0001D17B-\U0001D182 \U0001D185-\U0001D18B \U0001D1AA-\U0001D1AD]; - - -# -# Rule LB1. By default, treat AI (characters with ambiguous east Asian width) and -# SA (South East Asian: Thai, Lao, Khmer) as $AL (Alphabetic) -# -$ALPlus = $AL | $AI | [$SA - $dictionary]; - -# -# Combining Marks. X $CM* behaves as if it were X. Rule LB6. -# TODO: This is going to produce some odd results, because of the non-combining -# chars that are included in $CM. Use $Extend instead, where possible. -# -$ALcm = $ALPlus $CM*; -$IDcm = $ID $CM*; -$NUcm = $NU $Extend*; -$HYcm = $HY $Extend*; -$SPcm = $SP $Extend*; -$QUcm = $QU $Extend*; -$POcm = $PO $Extend*; -$OPcm = $OP $Extend*; -$BAcm = $BA $Extend*; -$BBcm = $BB $Extend*; -$NScm = $NS $Extend*; -$GLcm = $GL $Extend*; -$B2cm = $B2 $Extend*; -$INcm = $IN $Extend*; - - -# New Lines. Always break after, never break before. -# Rule LB 3 -# -# Endings. NewLine or Zero Width Space, or both. Rules 4, 5 -# Because we never break before these things, $Endings -# appears at the end of line break rule. -# -$NLF = $BK | $CR | $LF | $CR $LF; -$Endings = $SPcm* $ZW* $NLF?; -$EndingsMandatory = $SPcm* $NLF | $SPcm* $ZW $NLF?; - - -# -# Openings Sequences that can precede Words, and that should not be separated from them. -# Rules LB 9, 10 -# -$Openings = (($QUcm $SPcm*)? $OPcm $SPcm*)*; - -# -# Closings Seqences that follow words, and that should not be separated from them, -# Rule LB 8, 11, 15 -$Closings = ($SPcm*( ($CL ($SPcm* $NScm)? | $EX | $IS | $SY) $Extend*) | $BAcm | $HYcm | $NScm | $maiyamok)*; - -# -# Words. Includes mixed Alpha-numerics. -# Rules 11a, 16, 17, 19, more or less. -# -$NumberInterior = $IDcm | ($NUcm | $ALcm | $IS $NUcm)+; -$Number = $PR? ($OPcm | $HYcm)? $NumberInterior $CL? $POcm?; # Fancy Number 18 -$Word = (($IDcm | ($ALcm | $NUcm)+) ($POcm? | $INcm?)); # Alpha-numeric. 16, 17 -$Dashes = (($B2cm $SPcm*)*); # Dashes 11a -$ThaiRange = $dictionary+ | $thai_etc; -$WordLikeThing = $Number | $Word | $Dashes | $ThaiRange; - - - - -$Word15 = ($BBcm* ($WordLikeThing)? ($BAcm | $HYcm | $NScm)*) | # Rule 15. Stuff sticks around words. - [^[:Cc:] $BK $CR $LF $ZW $SP $GL] $Extend* | # Allow characters that don't meet the - [^$BK $CR $LF $ZW $SP $GL ]; # more elaborate definitions for WORD to be glued. - - -$GluedWord = ($GLcm | $QUcm)? $Word15 (($GLcm | $QUcm) $Word15)*; # "Glue" will stick anything below it together. - # Rules 13, 14 - -# -# The actual rules, a combination of everything defined above. -# -$Openings $GluedWord $Closings $paiyannoi? $EndingsMandatory; -$Openings $GluedWord $Closings $Endings; - -$Openings $GluedWord $Closings $paiyannoi / - ([^\u0e25 $Extend] | \u0e25[^$paiyannoi $Extend]); - - - #"$word($nbsp+$word)*$paiyannoi/([^[\u0e25$_ignore_]]|" - # + "\u0e25[^$paiyannoi$_ignore_]);" - - -# -# Reverse Rules. -# -# Back up to a hard break or a space that will cause a boundary. -# Not all spaces cause line breaks. $SpaceGlue represents a sequence -# containing a space that may inhibit a break from occuring. -# -$SpaceGlue = ([$ZW $CL $IS $NS $OP] ($Extend* $SP)) | (($Extend* $SP)+ $OP); -$ClumpingChars = [^$SP $BK $CR $LF]; - -!. . $ClumpingChars* ($SpaceGlue $ClumpingChars*)* (. | $LF $CR); - diff --git a/icuSources/data/brkitr/root.txt b/icuSources/data/brkitr/root.txt new file mode 100644 index 00000000..817280e8 --- /dev/null +++ b/icuSources/data/brkitr/root.txt @@ -0,0 +1,21 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/xml/brkitr/root.xml +// * +// *************************************************************************** +root{ + Version{"1.1"} + boundaries{ + grapheme:process(dependency){"char.brk"} + line:process(dependency){"line.brk"} + sentence:process(dependency){"sent.brk"} + title:process(dependency){"title.brk"} + word:process(dependency){"word.brk"} + } + dictionaries{ + Thai:process(dependency){"thaidict.ctd"} + } +} diff --git a/icuSources/data/brkitr/sent.txt b/icuSources/data/brkitr/sent.txt index c13b22d7..0680525e 100644 --- a/icuSources/data/brkitr/sent.txt +++ b/icuSources/data/brkitr/sent.txt @@ -1,150 +1,124 @@ # -# Copyright (C) 2002-2004, International Business Machines Corporation and others. +# Copyright (C) 2002-2006, International Business Machines Corporation and others. # All Rights Reserved. # # file: sent.txt # # ICU Sentence Break Rules # See Unicode Standard Annex #29. -# These rules are based on TR 29 version 4.0.0 +# These rules are based on SA 29 version 5.0.0 +# Includes post 5.0 changes to treat Japanese half width voicing marks +# as Grapheme Extend. # +$VoiceMarks = [\uff9e\uff9f]; + # # Character categories as defined in TR 29 # -$Sep = [\u000a \u000d \u0085 \u2028 \u2029]; -$Format = [[:Format:] - [:Grapheme_Extend:]]; -$Sp = [[:Whitespace:] - $Sep]; -$Lower = [[:Lowercase:]]; -$Upper = [[:TitleCase_Letter:] [:Uppercase:]]; -$OLetter = [[:Alphabetic:] [:name = HEBREW PUNCTUATION GERESH:] - [$Lower $Upper]]; -$Numeric = [[:Nd:][:name = ARABIC DECIMAL SEPARATOR:][:name = ARABIC THOUSANDS SEPARATOR:]]; - -$ATerm = [.]; - -$Term = [:STerm:]; - -$Close = [[:Open_Punctuation:] [:Close_Punctuation:] [:Linebreak = Quotation:] - - [[:name = HEBREW PUNCTUATION GERESH:] $ATerm $Term]]; - - +$Sep = [\p{Sentence_Break = Sep}]; +$Format = [\p{Sentence_Break = Format}]; +$Sp = [\p{Sentence_Break = Sp}]; +$Lower = [\p{Sentence_Break = Lower}]; +$Upper = [\p{Sentence_Break = Upper}]; +$OLetter = [\p{Sentence_Break = OLetter}-$VoiceMarks]; +$Numeric = [\p{Sentence_Break = Numeric}]; +$ATerm = [\p{Sentence_Break = ATerm}]; +$STerm = [\p{Sentence_Break = STerm}]; +$Close = [\p{Sentence_Break = Close}]; +# # Define extended forms of the character classes, # incorporate grapheme cluster + format chars. +# Rules 4 and 5. -$Extend = [[:Grapheme_Extend = TRUE:]]; -$ATermEx = $ATerm $Extend* $Format*; -$NumericEx = $Numeric $Extend* $Format*; -$UpperEx = $Upper $Extend* $Format*; -$TermEx = $Term $Extend* $Format*; -# -# $SepSeq keeps together CRLF as a separator. (CRLF is a grapheme cluster) -# -$SepSeq = $Sep | \u000d\u000a; +$CR = \u000d; +$LF = \u000a; +$Extend = [[:Grapheme_Extend = TRUE:]$VoiceMarks]; -# $InteriorChars are those that never trigger a following break. -$InteriorChars = [^$Term $ATerm $Sep]; #Note: includes Extend and Format chars +$SpEx = $Sp ($Extend | $Format)*; +$LowerEx = $Lower ($Extend | $Format)*; +$UpperEx = $Upper ($Extend | $Format)*; +$OLetterEx = $OLetter ($Extend | $Format)*; +$NumericEx = $Numeric ($Extend | $Format)*; +$ATermEx = $ATerm ($Extend | $Format)*; +$STermEx = $STerm ($Extend | $Format)*; +$CloseEx = $Close ($Extend | $Format)*; -## ------------------------------------------------- - -!!forward; - -# Rule 6. Match an ATerm (.) that does not cause a break because a number immediately follows it. -$NumberFollows = $InteriorChars* $ATermEx $NumericEx; - - -# Rule 7. $UppersSurround Match a no-break sentence fragment containing a . surrounded by Uppers -$UppersSurround = $InteriorChars* $UpperEx $ATermEx $UpperEx; - -# Rule 8 Matches a sentence fragment containing "." that should not cause a sentence break, -# because a lower case word follows the period. -$LowerWordFollows = $InteriorChars* $ATermEx $Close* $Sp* [^$OLetter $Upper $Lower $Sep]* $Lower; - -# Rules 3, 9, 10, 11 -# Matches a simple sentence, or the trailing part of a complex sentence, -# where a simple sentence contains no interior "."s. -$TermEndSequence = $InteriorChars* ($TermEx | $ATermEx) $Close* $Sp* $SepSeq?; -$EndSequence = $InteriorChars* $SepSeq?; - -# Put them all together. -($NumberFollows | $UppersSurround | $LowerWordFollows)* $TermEndSequence{0}; # status = UBRK_SENTENCE_TERM -($NumberFollows | $UppersSurround | $LowerWordFollows)* $EndSequence{100}; # status = UBRK_SENTENCE_SEP ## ------------------------------------------------- -!!reverse; - -# rule 6 - -$RULE6 = $Numeric $Format* $Extend* $ATerm; - -# rule 7 - -$RULE7 = $Upper $Format* $Extend* $ATerm $Format* $Extend* $Upper; - -# rule 8 - -$RULE8 = $Lower ($Format* $Extend* [^$OLetter $Upper $Lower $Sep])* - ($Format* $Extend* $Sp)* ($Format* $Extend* $Close)* - $Format* $Extend* $ATerm; - -# rule 9, 10, 11 - -# $CR $LF -$End = $Sep | \u000a\u000d - | $Format* $Extend* $Sp* $Format* $Extend* $Close* $Format* - $Extend* ($Term | $ATerm) - | $Sep $Format* $Extend* $Sp* $Format* $Extend* $Close* $Format* - $Extend* ($Term | $ATerm); - -# rule 12 - -$RULE12 = [^$Sep $Term $ATerm]; - -$Join = ($RULE6 | $RULE7 | $RULE8 | $RULE12)*; +!!chain; +!!forward; -$End; +# Rule 3 - break after separators. Keep CR/LF together. +# +$CR $LF; -$End? $Join [$RULE12 - $Sp - $Close]; -# forces a break at the beginning of text "$Sp blah blah blah" -# remember the break iterators takes the longest match -$End? $Join $Sp / [^$Term $ATerm $Sp $Close]; +# Rule 4 - Break after $Sep. +# Rule 5 - Ignore $Format and $Extend +# +[^$Sep]? ($Extend | $Format)*; -# forces a break at the beginning of text "$Close blah blah blah" -$End? $Join $Close / [^$Term $ATerm $Close]; -## ------------------------------------------------- +# Rule 6 +$ATermEx $NumericEx; -!!safe_reverse; +# Rule 7 +$UpperEx $ATermEx $UpperEx; -# rule 4 -$Extend+ [^$Extend]; +#Rule 8 +# Note: follows errata for Unicode 5.0 boundary rules. +$NotLettersEx = [^$OLetter $Upper $Lower $Sep $ATerm $STerm] ($Extend | $Format)*; +$ATermEx $CloseEx* $SpEx* $NotLettersEx* $Lower; -# rule 7 -$Extend* $ATerm $Format* $Extend* $Upper; +# Rule 8a +($STermEx | $ATermEx) $CloseEx* $SpEx* ($STermEx | $ATermEx); -# rule 8 -($Extend* $Term)+ ($Extend* $Sp $Format*)* ($Extend* $Close $Format*)* $Extend* $ATerm; +#Rule 9, 10, 11 +($STermEx | $ATermEx) $CloseEx* $SpEx* $Sep?; -# rule 11 -($Extend* $Sp $Format*)* ($Extend* $Close $Format*)*; -($Extend* $Sp $Format*)* ($Extend* $Close $Format*)* $Extend* ($Term | $ATerm); +#Rule 12 +[[^$STerm $ATerm $Close $Sp $Sep $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* .; +[[^$STerm $ATerm $Close $Sp $Sep $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* ([$Sep{eof}] | $CR $LF){100}; ## ------------------------------------------------- -!!safe_forward; - -# rule 7 - -$ATerm $Extend* $Format* $Upper; +!!reverse; -# rule 8 +$SpEx_R = ($Extend | $Format)* $Sp; +$ATermEx_R = ($Extend | $Format)* $ATerm; +$STermEx_R = ($Extend | $Format)* $STerm; +$CloseEx_R = ($Extend | $Format)* $Close; -$Lower .; +# +# Reverse rules. +# For now, use the old style inexact reverse rules, which are easier +# to write, but less efficient. +# TODO: exact reverse rules. It appears that exact reverse rules +# may require improving support for look-ahead breaks in the +# builder. Needs more investigation. +# -# rule 11 +[{bof}] (.? | $LF $CR) [^$Sep]* [$Sep {eof}] ($SpEx_R* $CloseEx_R* ($STermEx_R | $ATermEx_R))*; +#.*; -($Close $Extend* $Format*)* ($Sp $Extend* $Format*)*; +# Explanation for this rule: +# +# It needs to back over +# The $Sep at which we probably begin +# All of the non $Sep chars leading to the preceding $Sep +# The preceding $Sep, which will be the second one that the rule matches. +# Any immediately preceding STerm or ATerm sequences. We need to see these +# to get the correct rule status when moving forwards again. +# +# [{bof}] inhibit rule chaining. Without this, rule would loop on itself and match +# the entire string. +# +# (.? | $LF $CR) Match one $Sep instance. Use .? rather than $Sep because position might be +# at the beginning of the string at this point, and we don't want to fail. +# Can only use {eof} once, and it is used later. +# diff --git a/icuSources/data/brkitr/thaidict.brk b/icuSources/data/brkitr/thaidict.brk deleted file mode 100644 index 9f8f77f44e3eb743362fa9f3b18e13ed17615834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93616 zcmeFad3;sX-9EbZaOQbJ9D5iPsv=g!p;SDPV4=t?#_%aqlEb z(U}aK|BW~PmwNx3wEmCI|EYohQv?4W)qpY_P6GdPhmrsPH)mSPR)JtB9Erx_iDW9B z$>#EfKD+hZeUCl&+Iyex75nucFi`Eg-=M+Y-~WIEha5EY;2#`v=wZVSKSEc;kw^V- z_>YcOBaSIm9Xs-WS2xvAvy|GS1F>JhjD7gKts3Cdo8{0dV+QP*9)}VY8LdH_R4rwq z0(^+n|Kx2?$AWYK&;N68OG-?Q`T0JJOc{~Z*B^#5Bv zB$h(z+dljqv~NrGq=Z#(ANmH~oBK^H0%<-yy^lx0iKwXXqADhGn)cmc46<=NaTKro+@h!@?WqMK)$dkqi{ZD-I zJEfB9Kl#*u(uutA@9*3#WQ<`BPfeLDOV0}GW0W{6&3;u3`X~Xi z^!tb`L+v$1!+XF=UwC57(Qe`y?*S@#`eC@c@N~GRz?7!;Zo*@%yJm%iB)L6UJ*3S*F4G$@M!&n(;pc90NA2zKf!z|DVo|} z4HStYLQ2v1SNrzD`U4x_aRvyF6s@VD{%SwiVOo^bwEY0llj3{I`1AqL_%==&c1u0N zfohP4S9pVkuj%`OyDzNjxHmKiy5INslcW z*dgGMtLcXVI#_rWc~UgB5+3H!H04leP^;n(`35`;sry_)8aqT{hKHy_J%6~shp5AV zSLla%_+e@oAkt~EqD4MAM?j03^hbh1+At3%jXcVJ+f(-2{_ryG2!Sg2Fm<^2Bar4W zbrj$uJPPUGgpVv!ekfAI)sG~mw(lu(G;;0Zz2hUnITGm{C466MxKK4mbG4i={UgYe zt{+l=DDY8;hr`p}57h{Sgnuab(GqG{(=^QRhn_#W43Y99X#1RF#IBDq4ed2u!y`n4 zFg1T9-k0;GHT9ce$&)7i7}VC$iWChUt*QWP8pESK`Urt5^bwFd7G?Iev@A}YkQ*Vs z*fLa&bbXB0Sqfi< zkbWrR`;mb7_~9szGg1-qIV06^fJdro2`e#a+E=R|gG;`C2ooA5e2o$Ip=veSgGm|n z-}vK%cN}uyOZ9{`?Kq^aA;x1wR?{e3@jr&#aq1^X`^R{C)5)P{tmQO5Mle#e7DFHQ zEfJ?b9uH~0A0tpD)X-?;@F(g7k2eNb#UBq2v7dPH7}(SpDfE=^y@rohCxUW}wnks`lj5Ysm_g_&5ED-$C(djD1+^orqLV?BzAyGwdmIvO2|+J_VY-ln-f1 zVkfDSCF~7p>}2pN{uIEc!m3ZvP$m4S@J@jYB~Iz(PZQ0aw4ZtuT0B)eWh$Qh-u^Uo zn)<1DP1h1XEmO(U622Vqv7$j;dW}(XtawTi^0|ahhxg?fpYHK{N|EM!!aeb^>I@I3 zCC#lsXNt7O&wwOleXnt!+7mlVoe6&yq#5@NiP4isI>WQQSaZ$>kNTQRh_aN?UQ>LS zvc3H|knKt7iJcAJw>>q^_2`6q`g7Dd>O7&Gqs|9>fd`X*j=E4n4S#odE-arbQaYry zb3EF)ut@HC68e%lz5vt;oiMTUpy9_Ch&C;da-nB~_=U(NY2y%Tjq^Y`U#Qf-01}kB zP^?krLOd6VEH%%EzX;kFz!TQG7kMzL6|e1Fs4j*)t@{2VK$jRUsTYga&?V~9GMy5dr^8FiSOp?SW0xSN_N5YQ>=JcZ5A1T` zX$fD7m`}L^(mqT}8q<8j8ovzjcl*md`sK=pddu~sQl_WBq8E0#s^C`uCU&Lx%hgo^ zlXj)R6-g~ay5?$4AHQ0tq+R9N(iXpoU8Sz>#i!KIprgI!5xx>~K9xFGiIkSS8u-sV zK4C4XA#$$q_!SBvYWy6$pY`$@_o;rYWv+qrHKOB7U88>CQ5aWzZ>&P6w(qYkLq0{v z*TJTS{Mg5S0nUH#uLb{lPloU}J!#kexBiAQ_c}#?tvtStrjdHRC#NMyzft6U2_0V# z8Xq6KL9pu~d;NF#n?R$4_JnRId!_4rPA{OPb?jw?UqCa!4blJ!#+e8piY=- zkv9R)JrZhJQt0myO-D@x?06XEDXn8t9l(zGUwN^kCY32ZjTZEyE&D0>7}Nh1yrwhl zZ~9*eWfDR{6X7YZrG6#&y+WBN668^aQuj*eQzjvIq%+hI`S$^)zfYv^1vFW3$`Ip2 zPwKrM=F_P|m^L(gALKMd&SZFoq~440yF9t%f0zHYP#OMOJY_0aPw0M6Ld*SU>;a{D z_apA@$+=%W0N(QJzmv?^7T2sKg({L;p|@SW~_oK3JBf7O|fG zw`xi+yf^j`QlK=$-%6}0nyT&mR!s$GDr9_~mYh~4e;9TMQ-TytC-hBEIqe@QLq4SvKL-21SC2~ghzCC^@|xq* z7}HboQAHl1Kj87hM?ukC@*e~I2cbNw9+#LDdL8SK5|q{c@iIjG4?Qq)H1`jnf7Ac5 zOnJNv`7)2IKSA>kcpg_;&X@La^8NrGCA25}M49r(GF0J{_D5K*gqreap=j9WYwS;u z{x1JSnfio!5~)^jN^6W%?f+bce99B*DfMT0e9Du+pTI-USU(jC<$MV(%kW8ftwWeL zHSJ0DwD8E+{;6+Ke2yPKB^DSy4NFg|XAsj0G3_f5t?_vpQshzgS@oR6q>$tL=RtiI z*fYW<^;wTXm{e*%qh1gT&mknAwq6v9mU><&!&wNCGlTF*h_dDwXlp1ALQ>?Pr9 zi5DO@O=MpbJ<2?%UcxgC&tD)(E5!eT=LJ}P4m3?=_!spuLY>}=;J+d|l<4i5%FEzu zDpP$C{w2gOAe@Fr!?eNtX#XOtO%qAVz69tm2>(*1ybMh9wFOFO$^QbKveV$HL2Y_p zj&}dz`IklNWnh$kSv<={oIFArXZW&uRYEPN!&iDxH2ex`qT>In2Tba#c>W8%622-p zY2Wmk^BU;ilI%miVjsYgzj>aQ~D4YnfAlUW4xc%)hSad&_>4 z@`fj&W#53bmY^P?H^ej6622ViKCI>b=E-V}{}fW{Z{oi#QK4%{hi`iFeq7;c%A4v< z^%fqV-V-9Px2NQHdD7n!udPw$E%kSg@+P3aiymdP1abXnJxaeVI@F@P*4D63A@yyK ztK)YB^J(M~CY4adztaP*P%BV{UxD6+9b%P`&^P@*zCqFWKh$^mf2x0eC;hu*znk`- z^l4f9cgv8*|Mef}IK}g7d zG~`RyfL`%6ioSxsr`{J#(|U8>^CaIF9UW@@|2~`!o0P6-Oc#t)`su3HgM7;SY6d8z ze&F$@L(1pQ5H9&Mg!-XyC`~E)TF(=vjHXOiGhvS~pBZH-ra@1;AC$un)rSI;TJaxv z5?Z!`QBPwZK#$M|>LUq>(Uzt%2eX7uh~DST6zC%l*VGS@V?qpP!hfV@OGvn<|41-~ zvpi@PWIqy&F*WNXCf(O0=bN7VSxCjF&jLn@_Om6{A*E)iIc1*4bvPTm-o6g$_omDh zici%srF=g}`12&BW*yS%$(tki95ufOy-rb{9N*9V21L9kZLVONG8fv^o2wS!nTJPv zLh}UI5UKN2y>J%_huofi{x`4%9!~mv@uU!9=+k`80^uw~3iFYZ`Km$i1%T=23%wpx z!kShO8l|;-qfi&Bg&w~ic)eOARKg3rX8~+zT*vj`G>Ro{k5uNOQ9@$Ar|ky#k41yn zB0QR^W6fu{2>K1+@zK=9LZN;m{9?o!Ca$4H9*^2hc*t1<|1lsw#6E^^RG$b$oVGMw zTW#_vnzk4c)LDe|2sa^I;$cjIUds@p?IsBceT-BVBjm%7Sd;K+Lrc;ssXF`wGK81n zS%zl`9%?KV`X|7fyl08T3g-0$+u9+lek%u7$-0&B!|Sm6-YJVMQ7Pg=8Z zeA>4ujLaiP}(|d=XsW#P)Qc;Gn<`Vx5emUYcPk#k?KA#Z1*46MgL#?|K+Vtd- zLi{teLU5+isy>HbA&{12ioTXlVcZVCs+SyTZE7{1HgE_LUju8**BXTMq_wFIq^|J_ zwH+zbYKMe`Dt@`Z%c14_HEL}c_Mz3PvrJo#beF4jLRkTLo$7*LkFwALdD?5JCr)Yl zmERe!gcWjGOIm6rBv+~p>I;cGCDb%O+z9E_YNN;R@FYG*EqyL9>wJ~^5;C8oo<3J! zp$;^cdgN;Vr5CS))M`liGMj`>>gF=70~TqYGMfZm+an}z6>R8Ohnsh&Mt?bGiiD0gM#(p!Ikt)2Y5j zt$u-!Flpw$I^t-^>Xc)a{UwPP26jTw?*aLF1JDTaqHa(L|e<>3f- zhTH14;@i1uXw1czUt`>6eD!p)`l;LLZpAk-XSv<#Tu5A?E`mg>yU49`cffv=y41sG zm*X9Hr+&5D)t7f;|gX&NZ3*1`ud*tykk2V{nX#@>7wd9p0R|9VDg*BBm zR;wo=tF5ncTTr*S3v}0)rB{?wT%n%#;Mr)87u_Y0(RxkbtVFK+dU%7}Q~4!Wirbvm zaRc!dq@rAC&XV+LVO>KDyNj?!a7ON=E=JErwFzb3f;MB#&X6?7 z*`{{5%hWD+0e<< zv&lHa(;1 z>fPmdI^DI#i|!oMLbvf3wbcqw3>UG`$+GrHTy{q=%z(;pgG9xHupD&pd}WV2b+hYPW0^XzIixmWS%?SJj(o$ zd5n3iIm#UE?!x$RBzzt<-)INKhus#jFHWXqeg%sJ+75zjXlnv0NHleyGvHd~>y z-25CfK6Kct%r&sqYIY)T>&=bEUYu9WP39JJJGk>8wbSjOr0H5F>@Kka?oumcMZsNR z#SykxDR--t#Yo&~oMsiQzG#~cYfp@?rPe;?1(@HF7JB41tDiN{8pIM>Y^_#!lpNR) z3-g0@C^+??)mVqS&DK$Xo2}uXp%0>@D_K+42&;rvZnQ?CPLXT$J+T1oKvEd{j; zajP}PIv(6w=ljGALVO8ImV%UORbBo%fv>V zb)|K+^>gbw@Ho@X#7xvAFjHOwd@)j6Z{29!VvVKOt;p&$phmp0S>HcUUi>-dJ}# zFv@pWFQZrNuwJ!Zx84N*ZR;7#?mJ|TYc_J$Kk>Y0O-IS*S|3;+q3+hBmk+nyd72caGs+;!>}`v>-6kY3;}v5!z^ z**~<8Hu}3O?UFsxU0@%F)q$FIqr0fZ_dSMA+1|b7w_9+)KvQf z`(#q=pQ06(ApO(rGwrkO^Xv=li^LYjrF|*VUTI%pU*$I1*VxzEH((~(=C;^3p+2#O zLhF~nZo?|qWZ!8`vG2ynnu|WzXy0Q`g63rV0kqRL`ysW>o@zgAKWaa2KjChL#2l-y z{SCjj*~{Dp`*oCRHR@rD-2#nW*yDAvX6!b1k-frRWpJ+E z3H=Ux9Y*&&dxQO@y-A&6e{FA*o;VA#JJ17iu(ZwI6;N(nz`_`0->8A@W_L>rR9w-I|1olHt zxy!2o51Lqcb_Tv5I1rS2BjYv%hPoYrLjs4nU4bJoi>yZ7f)@B;;OIcfT^~5s-5MAb z7>&7Q4fI?)Qb6|A=G?Sbt3^hTj@e*}uV0_>qBNvz&_K2kq02(qT`kt`58#s0q{tKD651n!qgBoE4}G%nK|CEDS6%4fNwKv}(887+8!x zNO)J^6Z0JGCFi1sIQwA-5?G2+JOt26cV6IAp|z-60-r$!?Gb3lC~7l5_bh#YaraPQ zWngt+ZGgG?0y+4~dJ}8&X)12dMvHf$-c}*a*@3SEvjW=!JFxzbM6PzB7M9=-AXt!? zhn0N@%7OL9eLom<7Y8Fab8rvV5ag=RD7oeAv&1+fm@?-Cv%vy(N~^I4>tf!6eT`gj zPxP6t;6849upjm?L$HJ9?r8`t4h#+o?(eP-4sknz2g7csJ3n}+yUyKVFAg3aJSzC3 z;4$WtuyCw3A~?$J402caN$_~pH+W+36x8c`pq++Y%-zVr>fjmZo%LwpW$vcn*}?OI z7osG~-DT#Y;Kjkq+~z>hUE$UQuMGYy_;cjD6E!(Icx~_os)&_2Ja32I`{xuq7(bicBIOFGdB28a4O*WC|!TIE%pMy`U{mh!+bEvWH#-+g*5o5##|ANuhsD{e?(&>I0{4eC8BQQSr*WllR ze-FMR`RD$u8&+EblM!;yu{`)L^gA$4W|S4*IB_8Zhi3cAXmOGVWB>_7Uf+V zTo>FB{4%&1Ihu$3Gz7P*bKKV84tGs(7yd|v1^R|iFmSQ)cR*X+1)+$$*`15^W(P)9 zXDA*@xtl^+j#_tVsKENNcZB+e_OOPB_6F958S+fGDOAL0u5+71148?uKF6acpbTzD z==&j@bwfklChSXAhYkr1gU(EME#}xZ^-s4xbYy6FXoPu;+Z`%F`q)slF6*>{NWF^6@wkC86EN~X%`D8Z2R(EIUG@1J_ibAIwBSUAopPGw8=d$#n z3qlt`Wg#H%#d*~hP zIEJ}PA-xgxu?P$KyP+D$t&v{T=B^6igoLk9E)9Jcngx2BJvcN6Ew>aUpO4yDh}76O zFr#7~Zbb`mzFHGn9Qq`*EYuQeb2o-our|SM39SlsU~e=(v@W#4Iu7moCG?h|Wj2Sl zq9ntR`yH^c%H0~;6a@)f}@Hzf)$_Yn84?z~| zR5-4tg;SvNKA;_?nGw#03n9eav=i-09(cP_`wI>Id7v%?rW< z!-Jr|!5A6dKYU<#DEdNk_>l0h@R6uz%yD6yRPkFX)50UdRTy{c!XtyHg^xqqb8p`O z8x6?M7c(g$`_F`MYSgXRPhQ~r;4Q#9npXt_z&kmo5KDIi1A$S*uFAHB8zB>GK z&eral@O4-XxKF@H3EvpLC44LT8TMPC%yzej?+D)wORK{ZU}d7a)*2qZ4>P>xV^iBA2R@-Nwiju)jKT zb>!zr<67*Fc!Pp-hkDF@IC2B}z^us4k@1n+BX`N{umrPsw>2>`0b1xik%^#U{Xnhq z9&9!CX|-$vcSCSqt&KdW&W+&fQ_KrfBM;;EnExlE|l#&oDpMA)o)2 zy1+<|tcKoYr&Q_f7*_)f7H3#V}u_vQHw4zjBnkTV+ zSR3k`$mYma&c@_1<~$t1{Z?dGRH^EyrN#vB#Ey46`r5g$wj6n1YE6s=-R5W{8pn9U zNjsXdo`GJAwK$5^Dq2tvMf+l!c{pIi&H-y9RbKw}OI`So8wKi9Q^C z6!MQ_w=pmJguO2MRPv2vVSgI(&Qo@K^cC<{L|;Se)S%59 zqi^W_T=XrhE$gH2peL_Jj#!u7(RZUY(OUFV-b+q5H^KG_cV6_v=n42%`WCd+ER?Y$ zIwv|Gb{0n2HXAu=qfMx}rD|9dH%-yj=N z(M_svbPGz?fU`m!;O%TZ)OvSxXS6$Jpcdx3n__k>mi4h)|S3m-s>>usm> z7wpfFPA72eGGjwyhoBc?7pKmO9VYo*0UqvaV@Je}Lfje~E;ps^&{_ly?Bxi8S zc&T+#414a_8PHu|W49PP8}`qO;rBano;@!7X6#~XMC>x$D-T2NQRk?GxoT+aN;Srs z61y661#V&7El6c6_K0Q{Fg8UE zlMxKNXsy=R!{+s|M`Mo%?~MHk`D(*SVn{5mj*OiLcpgqkq%DX&iN0_~>=}0pZUk_z zyrv*jH%1j@V|&^Oo55*v^=Xu{u=sjhm?F?ePHi zDcof)iicPV*yc_K>lgX~P8jiMJR!Z7_tvO&+9namP~H!4JKf)15+4)nXAd@Cik}caIedKl)Hv4i_?hu@ z*#JNWAirW3jNk9h zj6WER$EU;}jz7w|5Odv1cTW69^_bB={y3x?%-^c3w8E13XRy*0$Lted32UoSySyX9E<2396Iubc z38;Yxw3o6rJl)w%Jm;G^cC_!sdn<6K>Eb_iS&-x}W$-xYVQDUnyqnuG~@v;B1< zfZQ%kgw?P_lsQ&?6NyAx9ciz!2dnD%mx&yDLtUbeyTNP?{n%I%bP~HK_Qc7fXpKwk z9sDqgGnFwlQFI#;1K3jGp^5#%$6F(ChTfbQj5E%x!~t%5Vo2g(YlLxm;!t;WVi@;w zi6axkao3JJbM~xIb>e8ZB~gO)k)U8s4jjTf<0Lg4BbXxoe;{3$8#KnLvOI(T5cXQ%rsIRT4 z)47RXAcxl{Zc6+Tvvvd8U}@qu%oC_9jIJGtI}>+fJT61o?nz9-o#v(JS+aLaOinzI zcrY;~@i2A*+i@erfm@%Lp78f zw%`6XxWuP! zQ{pq8W-*&igSD>`?THmwwO1roxi#i}sIfJP&cu4`rbnO+cviqEGqEv&^&)|}Gk6Sl z=JqzcyY5VEOZ*#o+eHcZhNQyD`irEM44`dsGQ{08Pjz==3~-*4cVh@y=B>u#?xJKk z8N>RpE}2YblKJFrk(ALVxkq4fcrDj?XtXEy#@y8&n4B!4x9&_1z>fLqDBOazwIZ4~`X*Bi*I;0jh8EIHcd59FsgD zegt&*7K0-nvwQMnT_?~7uNS!4tqp#Xyj&eBSRL|qRq|)n#^f(N{_^DY z$(!7k#*64e!D&}D}HhEO`OWOOP-7Jv?kw{nT&6RmL&h_&Pl$9I>D_{&ucYc)K+z*#?OfcvdAllIzqo6ZhlxHq?ZySZqh6h0?~q3|yj$m_=Ko z>m#Wo=7!{#=u?}m@yI3Xej!$aO(@5r1hTG@kBd9*Ck=P8D3Z%3+6YWLtVsl8I) z1Bd5}?o|KOzF4z|rZA(rYq8T=i`k9z{p~Aw3xg6gfU`6;BtAAZG<+m>CD*E9sY6o3 zum{8FOdXjTo;n)k<(<}PZgZ-H8H;c9o`EKAS5qTXTxYp+;AyxGyVn^=d8y1RT)Vqc zW89Ug6Hunc)JgG@+nPGn_wQ;Ao4FPu-ZhC3UNDTIvqWj?&AGQ&IN2F`nA+t;&vY z7PZn~O-bF8nv|NHdLZ>sYO0DG8PxLcQ+R_8IqW}De@qTT53DmUOZ^$P+vMSSX9u~! zKS(_tADMbC^7eJnW@>SxoDjQ zsfN_Y0eSb7`ox``TIQ}xwFK7%4tH0lFrrc`%tfhHsgB4+hJ5>g)#XaJEwwJS!Cjo% z9j80qcJG<`GR0MtYk0l;CGMs8uDRa*G_^IgBee^)x)OP8!5!ls!L4ch@mx@vL+_-m zbTA!8A8f(SyFML*2H(#$q!a0MIxB6{nJyT8+^%%r^q%Q`P=CAdo@-UQUur9MKdarg z^uY8WoV=%DbYPZt+td4}4~$PiJT!hj#&1bxTfA*Z9|CT@yEz(hKgFr~^Tc3#Rbnvv z22M^9%-&1W!_r5_o5Lg1!||O!C#<)nN1zltjZ2|fgVl6ox(XwGvl?TJ#OllyVQYFM zQf=a>akr-)>h#I(+^E7Dh}+HdsT>pOvFS6B z7H+AmP3qG0Ifk9tL-JqtX&v(1i<4~SU(Chdu$u^t}_}$Sqd1j<9M~r=Y z`YQB}U3go9Q*rtlv^r~pHL#i%)JFIU} z)#}ucXOEyHk73m9O8+taXIS9(FT5?8lYTn=EcE9_?9l0G-xv60 z18W&A(}we0gK=7VS{l28^lQ?`=Ai9yL!Evj{Z^W9tvcLJ+`~1x8`JNmYY^jB6cWt_ z_wBr?mD>y{HEx~}f10j^tq;?)(sO|AOwU8Ew_=`Hjr`OZgOdBD7qAUb8n*pY<8hmc&2D|SEjcFKR1S?w_|s}9SLt<>W%5?o%Z0!Ce&MV z+Rd1d>$Kj)u5vlvC$Gx{up_NTzV^f#-H{37iDi|1&QW7B zdm;Tg+=s}zkojKhLCp3YnSRK@^2|V->T1x^+tIf$nlgj1dv3|>@6O2#aqBY&<1LSa zI@t<|4mB)PjauFj_yjrR9SLixJ##4SVppr*PQX^?@C;^Z@ag~!$9j1cP84;S5mK+b zE#U14+hdLURpio4mAfEQ4SU$BXO2UTMk5Vh(3+VH#Ud z*WCXy#NHJ>vJEAfi*Pnhk+ieG{Rn5)fk**!b_RE5@Z5Xyo0wgsaZCVW3~J`g%sH9! z`Nj^rlo^?EnM*R4Bd^OcSD|(B9RpIOebiOLM84-_u0g)8#lELLjFU@9p$>0|q(Tcb zH$%2DGd^>>H7;|P8WX=2n!IUQu8s^nfx9rQN|_0~?Er1H+nJfj9*=y(vfG@w7iGfi zo%uD&{{YI?guUrA94VQHK$!~dbs2nZn0X9uGE{gaS`qbQ4@RwYqb+gco%thrc4vm` z#!|H{^R)F(oRFF_&tdIta_8G;W?n>TyCa)fgPFge20Bm!b5NtR(59~ds|oR4K||&> z(AH<(fMwnWG-uv|^;yUbN0nGYeYzklN!Eqv3HnU$%_%v0}W>NAbT{%%{~wy4T1M#`$_f+wDlbWn+uhFW%P8Ng$i?eu z(ND8~OFfNry6kn?zq>QD?*QJ35;bSvMa|b_u{T9K@C_pFv(2XLhsewJ>@2*|Wy(Ac z%bbnTxHF4AHEMS~M%v0iF?gps61H#?$Fkz049Hf5J)Kh1t-#Io(2y~1Bv8?!6Xx}24_WLIa`W^hj%xXq|ChGe_Y%ehl;Nj>Dw z%YG5tY#x*S3Vm%=b~9|@o3QMb?Dp(V_ut&fWLib9=B?wRI;roKO)zsYROk?hNev!_ z2l+vdQ=4*U;;jwe?qJS=CcbeDS20KNk=avo=jX=dF3DZ4&dptwyC!!nzI?$uvD^*l zxPoo-^yC*j(eGXf~emyrC@8bqx2IP#_ zhFZklFSsH1K<+{N68Fm-zNO3I`^elQGFDr2f5`m_vs8QT$=uU9^vBrd+zYvBvQNT| zW$qQU4&Eo_UbD{3y@B{G@hf_aTnf}n=2y>J%lp31v$J&$31j2=E}xk9Vj1X7v(<5 zEn}+$4oZe`reB9K#9quVsn>?zz^&+ms9F8~Z~^SIx8i%Q9M9DJ=CBpt_;%-(=T_!c zV|=a5p?{)2+Cmo~x0ss)i!h_jb*Hlp%$IZceiOOm{Qz%!W}ruY!I>oY6>499HMuhP zHB--RL(S@)7fztL9oF=~#h`Q5UYy&NSLjnaJ&mpmMp@oMU%MQX1^GZeoR1lM<&*A; zd?tX^3byO5{nc6de15n59{IiU-^=&Mo5Gv(`(huoQQC<2{mj9Z{NVfnSod0xcbz)Q zijs2X-;qDaT$DdJe`x-2YaCWje5aQ`D*vPWhmMr{qt=7nV!|Usb^(XULBH8TqsG=eeDDAH)4i2TP25{?`13z*gih26S2e%0Myy zv-~e26IE;edaOriyZlYKf3C~_GJl)ovPN{q*b{{i**r~H$!`%M1% z{7dy5wS8y3#^-Ffadwqr+!dPbT%asFt@|HEz1znkZm^o!l5Ja2jN z&M^NW(rVA1nV-el!kAs-)p8wjIX^!qKVO}jUzlHnFAtXFo3QuA_kVbnTF>N{=9>dI z=UXA)5~#`JmJ9SP`OnoRloThl{2F&zzB7**6y2(zT?k+Y!@5{d2p3}bI*0GZ+Y3qXJ7t#X zC}fZ#ZnzMx#Fr-k0?S{K0pDJcq#=tmExhVvPD*h&yKV(83Qu<34mt;jqFHg&)d(1YbB5a0`qY z-4WxL?#=vmw@^ZwBZ2KK99O_C2FC2t!U;%~-&?HZS3QN3f|t1sg;Qa5EOgtjN5r?k z*o&`0TP$!J3ui$0?83Q$L!ze_F2Eb5)2!j{j>1I+{yqUuqss$h3s>MY7ARa@xCS)d zRCN{b{@>04!R{-m$*5_SLk@#6)oHb+jkZmyt$Z|Xe|87`e)%@q`Vxd z{krg*)W?P2!uFEF?-;r(3y&23;La-iNwDU^lTiiB*a0U$#_o;Z7&c;lYQWnAycb4o zVW;eViSMLKkZCPEQ+OUFsV%&O`DteUMBEuR2R|&lY*Mew{h;tFR>gSX^}?Hlw+sI) zyoWXRuEP5T?tt;u#cc{c6nLlbA@bJX&MeHrSKBQGoD2)NoeYh~ogYsh*ooln0b{QE z-AJ9^U*k5lu&}TQwSo5vg{6gNtP+jjwG}u%cH(`foSX~G-KN6l*d1(;9=9fvDs&ds zV^q#5Y{c(oz#_gwnO?xzs;~tZ=K8{R*k6HqTv6CraB(`{)W?K8-b(3J3ExU{Ux#-; zee6CVx1~=MdHDb{CGN)E#y)&6hMU7aY4pxccYU86;66+Tw)JjpO`qMB>a&--?WvvL zQ^W68aMt*zt7o*$sR0{f`+@=TI4z*VO17vFF0+W~OscYVat-`dK<#QP z1uEL6v76WymQmJFW}qzPQyt%|r%+DQ^ernhjK7rL!(K%LW%b;(;|I+Msn|OnYC9f) zjF&u+k?njmnK8>#O@I#eN&*np=}QfQ&KQxzCB)QIjw3dds?sq9JZE@1K5nb^Iz1>d zJ%x}>2Doe?lf&gZqv2Y$^^oQ|#;T_olxhdf;mVXuE(Ne-OjNTl#< zcXW>5TMS2Vb&;lv!Hn|zknMO0iDl|}dD?G$uol@4f~5R@g+5Xe96`yJJd1YeK%olk zR60_r)X$S1tYZ=IV6WsXk5Zmot(XLUmhC9~V=+3%OENf^1!2{}g)8lef>eVdrblY} z0E(1I)7GJ7Ryzv6N6G)M_v>;$GA&z;0-Z)#AAX%PQLzUaI9{fVa8YnuM}*OTj0w9Y z(=K(H56K|twxd*0F%QTSvLSTP=-6-kR?!LhX;@ww;QNyY>{d}nG<7U6yNnZYm~TE4 zJU;5i(IE0rp{Ww!qTuPWE#>tf$s42t!bcDc+oO<3AL9F+6*NN1%KJRTOwU#W9Yn~G z-)2N?2LYU28mIwDm%120V?TCrbf` z^MYX%0V)$VjZ!Vaupy}vgtPr#1z49u$Or;G+L7Z%v`U&QN`oc`C*_odsh-X$N@O_N zdQrJ1n`ova!6dI|JFFZpwk2a6(tD#)|mST`j^{RqRc z?7pk^2P*m@?Q0jVfFP70QzQd>hT4g4-4Ot_i7}1{Vw$Q_qa5EXVm%H)uZFCys-ox= zfzuhz`IC!`i8v?MF*49K{Dci}4HjJlwgUk=!id<5bb3rdTv+3tq8jV4{S@*gk!M3> zkgt*oI3Qup4X4X#qOXqvjdWHiVQmw0fG&|Ftb1^2GR2g&7i?)A%GzGhm1;0C#Ke?u z>rn9Ne4AueJ08wu6EGe5B?54O%iTg4j*vmsYl)W^Svxex2=^mEMMOFSx-azi=%Vbw zRfxq#QDn@ENQX20O`3I{dCClT?$M;-@pliv^bF!SeiGn%eOU|!N+3YY@rxx5=hroR zbr~)?Vq4@PU7nhdAk*}np2vY9MH_!mU?4!4H}TIG{jpq@M{Q!*cxxWyt9>JAS0tf| z)J5B)jg5Z7gLsd`Y_B!KUg?B|AOKy$d@3CWHoZR2v5h?GIt8)hk4?au1Hiev4k2m~ zeGCcV2hLl&FiTcD#NoiNLMT~af}UfCU>d%|i|w+r9q@orspKRa+NQki0HDKiMVd4b z=v6`_JuK%Dna4{gr|wu_NZDu-?i3v{EJ6iyhGqoHbmB5!`SoY_o=eCRJ_I@5buww4 zh&ION1>*#jceH&&l`3NZG~aQ+R|6@MU|p%IfDa-JM^i-tfchbn1dz=lNl1WwOy|=P zmMB0;)4&G+l$FR(I}i+fMb7$zq*G+%S0rJi!u<5ZV^}cYc=IpQ15KPRuuc=JcVMEH zF&qan6O3^pRI11aux7K5!)Y7VXc0k>@r^oqN6R_0+G(qk^ue$41(B~3U@?OJ9{?cP z0Bk!-6_s|(yTD)?fOS@Nd5KF`cC;NfNLj|}tEwlsb;BUS^#;}Kl}}{!a4w=M!P72` zed$NFhY_*8d_h##eY%oY zSZ{#$_2?52`!)@=S4qgoXSq{C5aTi`^C0v}IA{!{P?3S+G>8VM%pXjjV@zZK6EF8~ zz&fqIfINo``00~^d@^-$pzAhe*&UrE+qwjp&OliLj@4<;RM0v?d)yfI*Sv6d4ZPP^fS1*3e(x6cy7Dhj;M%T z7y<1{h>8S_zOwh$`y%|hKWT9Oh-X5TJz>BRrc)|Oyl+^Y3Q9j9#z5+5n=;uL2~`B{ z_jaAPp6!FIJ0c(r2*_(g-7f6I1`N}tc9rv#zLYBoS@>*MI+;s%O@{vbI4f&Kgkq&r^TevI~YD*fH?TY-IKf*w%@#92@5Gjt_K=M!gfw4Yb^5TTqn z6FZnmK0?(p2Z)zZknkhfEgSY!Dhd&&C^YFUWrNVG6$C&vK4#$>ASYsGQe2hfmsMN> zuG>QD!H~0<)z_?cbTh~qSLXutiTMQb@8D6zp1J0U7m2}z*?-IFfQmZx&%-5UI}j1k zvWQhQCOOJDjAWY7W>9j}FB-iF5*_m)&O7dEMAxr|EB!$^TG&AQPnw{NM<776NZ(hJ za)+PRbSWO-inEKlMM=?ffoQ@=iIV`yUOop9wgxNKGxy_YaulOyI&E^F3sz|y0_r)8 zJy(rbn?fsiMI;O7LCF?joL?Nqq?8~o3f) z=#`B?N^A^LYVX~Yd9VnVChOi+5=(wNXq|wcV{b!wsy6S)9gjE3dMQ4u@LyBCzJ^4~ zJ+{B}4@s68L7Bv{kd%?Wi8F4sqf`;N)UPju_9dwMEXsi!0BzTBC`-$u9Bn6re(05$ z^(o_=5*91n>o1gnyx2fGdVZx4@=`(sHefvlK!U^loCZKgUL0MQ1~^rCM4kx7bU%rD ztck!&ev4zw*v_sx&O0&&l8+EA|oxWe0{^ABJwgo_mL7|JUsO} zc)W~zL(47+iG`8!Xl$TYlrUCcZ4GoU9l5~ps-4nl_3P3 `zW^~)(9ZnT7cU`vZY z2F7>}6m_wO!qXMQ&UF(M{_372oMsW29nQv8l^m#kkO52T#db7oV7+<-^fN#vkL8r2 zpyMzdbTqR^(O}VQ8=QUE|B)Thql{$9!QqJx#%Pa^7wCD;L;HL5lA7(H%|w}JBZ5@W zfGv5@>0>2>*KpVjs6eSi(FwH-c}#`#CUY;tj?lazfRQa^E$DG{RZ3b#rSAyI@lGjT zT3-Ii(A9kyK{)VB0yvs3cAhJ#v6I?l?l$_Ntw5AHL@LLFp-5S+OgoO4VSu@WED>P+ zYed(Bzm)6wDJ|nsio-L8qo+s8M-bE^R=>Kk`gBavg9yWMuGM7%Y|hT-VukRGk`fUIfT zkcBHssQbL0i*>#A^XSGz-6&8tOO7T=X?$3d^t=HW#=VvR3?=+vQX7r>YpY|sa{L+o z4nvr1^(mC{TtN5N;t6U(K$*WI)hwbdOR7j1gM#_=%HW6zGi`dNC;>?yD=7!Kl>S+z z{v1%&^Avz1P1|7XLlcCjdzDf}VwN(i5lK6E>zCBizI&y|I?6a$M6mW$E}J?HNGew5BQ%E;8`uB4aPdaJ;mORP*|y<)sTjLe&leIOFnsx-e0h69Jl10+Sd*jIfe zqK;K$=sB3iJl<=~_qioBN|9pLHMKVGXYK?TLaSs@QjvMFl+9y+>p5VeS6;2{*+3I| zc~@e|feE-01BU@iA?-|1i#h}emvkgpkzv1*jH|(fMaxU2y#7MX@a$r+RZnu~^n)bp z6+aHOl+$BI^gAo|A0i!$!%MLaaxi5Q?%Mdzx&U844si5z=L;))Wa#dh+yOWYu%VWNk#> zEtAM`QzD>E`S*Bci6pxIXiNVPiu{!`FdH3s{@U>*o*vEF)#&Gm+5X%M+$i}c zy`q;kXeflvrw&V=-b62E#BzFb6mHr*XQj<*fK@~*R2bC!BBT4_=3*>Wvo)zircQ+> zZAZ~LMTtB$Ncb|8^r^>szy>{DVDFzL2~2+l+uAW@^gVAv^6RH_J=Ya+OwVV(uNtYK}z z9PiC#C6x&I*(#N&p+aY+XF6J#Ybef}k{|#35g7CresHTC1gwa1OQ5uLUScZk_{9#K zSBv*2ran8cA9`7HJoCLqy5@yd-(oe&b1V$9-|AZ!L=L7WL|&gLNn)5M0-#rc9`cI~ zn6BDksLP@uz~*2z3AUNtkP$WwM`s%QDRD)HFkC_;B*6IL@DPBjA(E7UX=<6UnpwMR zj=#UcbX}qdT)HHY1ikj*M(ML!&C=~#BodLLiAmm7RqT`LT>zkr)u@PmBtfPcQIRkk zh_UAYmo$hoF91KERe+1a(Dx&n4uZ35vW$cuo?3;|gyg;M2|s9~nl{`#pbNAfP|gH`2a5sD>E~cI?@XbuXl;OC(ep0Oj=Mk4mh)3DkqCE z23)s2Uqr}nI`pjhS(Z7}DlzR6Sz61#yF5}XNno_7Q2`a&&7+_R91Su@+Gx1s zLz-mxU0m2z;A%QTQ{d-54}M-yp(a7992v8^6OrO*p%TErWD+>49fT!3G{Ka`6%iU$ zUd@itMbOF~ZK9TAsFievi?CebpcGXKBse+CXc?)InU05uy^_eNAm;^|Bd-Kl%XqV# z(C4aApwr2A2*Nsf;(?N8U>rCC$@l?L-=~38g-6?jp0i%=)MV^|tnILRGzj2U z#;0M7X5Z6iXUqkVHVzh{iZ0ttIYN{?5MsLcwO+{^+lA-KNsgwgB3t4kXAtOwSc^Ir z(t-}DsyJ5C(#@coL^DJ~lksgSG>jKT0e57!*I{&_OG1W~fd73W=uD?b2KI2(h;+KT z-#VJkP#jW~bhJ5?WrD*0#e|!v%W(=})Rjye0zbjM>f8||D^{quB10(|s3K1SnB;3Z zY#Y_Et{v%Nc3*Fj4`aWBe&)5A*3lJ^_VlS&f_0r!e+X30UGgN;8Setax(+D_xw0&KJa^C?$35+5hevh*+>QA3Hl>?Ae zVH)a$lE5e<-`O53NW{@J{2t{5WgG&;Fi|y7lN8X-Y=3cVa|gH8sAynObW(ci8MN{$qoTZ>if8R z1k-!rFz$Lj0zQB=Y_zH!W%dKeOtNxyx}s}=EUwxqX+W1v>>B;gQm0Q;Y9Kf$PA^6D zM{)R*oMI?Q4E9Tt{C=wU9Fi6@sjSfq)qo$VnG@Z4mjKk2CKAA8&QvC4SU&U;$sF^{ z-tW;zkuC6Obu-?9A1(~PFF1}QB~6o7{mAq7Yej(>T;ZKt!qTjgo(k52!R*87Z%}k1 zisQj!=<+E4yivl2)8n0jxJcMK@^>>GWh@8Cz7xUY0LGXvYTJNOQGkt$NJs8U2zX#A z^SS5t=CSaAzS+}pf3%V^Dp8UMI+QIEK}7`cwy8g1IAlpX#}Ru)!G7Zrf%$w;GDf*K z%f3K_ATkxkb-(5I8V+s2+Mj^OzfGbA*{(`<- zt&^o*NgAB@pvao!19hF*O+|Hit0d2mi_#A2+cQoB{uxu3T@4tW9qXW=B4j`bbrEjiJ>a`#TQKau%rtV%FBDT7wzSwib+wk{Q0fex5oS)ubdPlvp7Yn8Aa2}=?p2%zt2 z#S-&gNk*NZ;g_~&7eAsxUyFh0SiGm}7K50%Gv$!^b8#c_mh0#txe8Z-G|svE-9^^bfXJwZ(1aEXCQ}M*DVNsx zNbBf>h$@0dhx?SCFUftzU`Z1+} z5HyNh^8wHmCG;^>0;<;shxIJ&3H-vMA(QT;vjme+gR_BNZ|LkJ{5;4LH& z3ko6r)R78;2P>LcFI)oC^H=FIf_x{@Vn|t2||KIGsd(WJi zIdkUBnKNf*?t2$BY3ls{vsYND@OEz&?F#U8^2UNzSx>(gKO|yft;Yk~W9vF7}Dv9qd8>fgQ6hT|!>NZ=F zrjf zNUIAfw|PWupJ<}AQvT130)~qm5R$Z#Z2}nP=o1@3;msC9HSUinSS5j+#WdhA(&}9b zWfv~){}fGyg@+$*-PvZ}YiXM>=19wLOQ~|w_9qlbQbm?fKp?6~bVfx3q z(+}KJcwgBo-CC!otoGQ=Q>E;HnReD`K(T6zru995|1m?@cPi#iS{0`3SbDB~$GL&} zx|IqcyAF+{lx@7z!cnUDRQ+yqtKc+Ak@M3EQsI+_lfA6O<>B(Y&X$r zBf|{#kSi1ph5zr8dtQRkm<3ertRET2|bNp0wYw}B*;aH z6v67(v`taicR|xu5-txZK*<`DlS{$r*VI)7MjzU6yUo*F8&kZ3mg;^hq_+8PPg;=0 z-?8?jEF3P_1HcOHj!*Us-%Z5X93cX4SjV8Vj>?c*qg~(o~z$*4?^j zp9lj~?1m~as(GjwV#Eih%bNQ@`k3sld}7}Lv}HeXDgVg?V`;lYbyD3~T3u&D%Hjz` zRe1}x)t1=p!8sFX6*H$SsYA!^oGq=!I#R8?cCNI|heat}%x3pbF@m|lt_GG-HMVIh z60J^INr-JI<{_z811&$Hb><}fH+JWN~>G3DpE`Z z#vYBcHLAHYW#zPW$Nv7kA<{~dcHx7Nw#ZnNY%;qPRs|KEV?ioQwG}UNleV&2g|?-O zSyJk5*KcK2QIW>wGJMn|q@Dw{{d#L>2#C$E?Sg;sj!Gv5Y)J_ybQ*|b&9&;Y zP^OjBAjRjaRi0{fITq}VR3)lZ5tqchNLq;y&&pvWBc# z!|<)u_*A~+tY1M1@<6|B(wHyPDyrszl&a1a72*n>&4W5EJk{z>zw76O-fiW#^>(&E z`V%EpWtpW1No2$}f;~Rd5O8r%#U{+G_8T=M zbF}3(WLNd8jY_5ar{kjtRpXPy2kJQ6?I|mc%6BQe3KTtFq^_dXv%V9aW0t#?ZFten zLX@RZJS$>p>yFE=N~>OwATmAI!YUZ_HrWx|FR4@!Y7ZHeZdF&k2ygvSpz=o+DXfi0 zajPxLPXQ{4kIIj|5d~R6q?Z|r7llgAvZZ`LI~fW19fw`Zj6Wc*Z^QonEM>%%R@iOa#FG=Xboy!b$Zl<2+QF&Ea>kbgQl)?>&|JxP< z-nIjcwjY~&)gVd%Hy0ljid9;G&6mQ?e#;UdzO1R*sB~CyBXB8dYH@l_18eI+3U@_g zR)m#+RiTuftQ1-cy}8WVM*z>q+Mu2(szx@Or-iCWS|zJuciI4SVA&>h9;Ngf>DGs! zEh?vqt6ETRaf$dpXe6qBoaLYR>{?U_B&CuHfWZB4EpuM3aEh2vNCZ3^LaAw015*UN zxy|Co9xQeqj4il#MIH!A0*jtiB1&0p{GT<38iy)Ws*BV`9 z+Y~^|!lY-%@hnG4D<7VZVA~)Mt6g>z?5?p2RTpWYO`oujikB7fc9T*nhRQeKmQ*l8 z^|5Cb?D1kDktYSf=D_gnvXJTmI;o|b6r^-Ree7_Ky4ih1hsd%wm!%$6h-0)>a#`Fr_Q%k`zuuz1ckF;$ZeyA!3BQ1@!GOaU!u~HL2;f^FzTwt-O8VwZ4eMe zn#gJs#JBb>m>;J zVa;!M@+ci4$X}`O z)Z!(TR50wr`L7jeGDEom*8YhO!W)raWwE|*sQ`rHswibg?0v0ca!wWL&=ho=q>A=k zl>)|A0GYOBpw=Y{hx!zsY(ueLr5j&Fy(?83VEkKRQULx*5+B0QH?P~;s_fxL)TPpt zO;fPSqWDaKPNjv9S#7cG0OG1H+${NQM4r_Et-5ZvuonGlg)2s9`%^`$k>A4OBL6?w z%6_Tx>4>SumX432n^Xzl`4~a12&Pp6l^M;mK6b)YP;(Y zF<1&$JE-$|k+NXq*|^Qds-E7Mwx4-GGs&@&YUnX!XRoc{Un|=<2Okwa`4$Xh2RfEr z0-rK%brE6IrmxzEE+*B`O*>d-F=fFj&z*RWi;C<>S?6}u3I?90t)Y*;IHpRrjj&Qx z9_yT+DnC^5tj+-JP&`jnwC^U>if4{zN~-U%yVK6KshD|ova?Hq*A!DA%7TxSvS$hw zX_5j2I4w3ZLL&;a&ry(S3tF|)ir~IMJ<_295K5nmU{Milyb?#TWmdX6AH4igdpBRv z!5meM8^WxmvshMJ9UxjPOVjLp2v6mw*iGEKjj%gZI>NSN+@Swd2dIFjCf?jePPg-) zolaWFw3V~62;-KrKq7Y8chFAT=Ll-ts|* zN-L}JZ1OB`_{mIUp~!%|OwIR{VT?nu&r~ozf}}|jcLbE09l+3Y6|;i9zPEX?%M=q5 zT~M;_7CIw_q%0qpDrFUT<<4nkJqOzzq`iOxUm=5zk^&bE*_^Ib44DqObcoLr5$^Jj z5>}EO?kX9YnLAg@jV^Jq{F=fkfe+|7(YxxU?jC4$w;qVk3`XlK=tRYM-oH5DXztV9 z0{Q4(7Hitm)JGQkW`?~Pec5qwPpq=KyKkz7U4;snIj*+t(y(vqb6ny_6&Jj+a0Bo?ga~TW0}m5 zTymU8wzk&3FCC3TEp4RJUs6*@j`!twF0ddsx?FdMW}Lyk4^KQLST|U&Ia})n$mmeE zd~$65f*emY<;KfTbXDcutdcbEs}zQO!d&w1Aacr z+SznxWV}!6(W&vWcq!3?AqVTqHnP625slHgQT51pbp z;xxx8@6)=RD|;(6iJ8(Fh!z-Gmv`}cDhyX8D_Q(j&Bqg? zydzIq8~Wb&?a40*k+?q6;r3CUHiWNo(0sn45oL>9X6{j`&*c?!G`XP$a}zBwyL zk1t6sa=7|RMv3&e&3K1jcaXl3C1YU&FXAaFp{C~jutxB4t*=mknU;x`U?4_o+H2Wx zou_Nr=qTopnRQYN@v+3(Q)_BRChA$V)Wh^fvQ(!PfCN;;D@np+AX5gu(F zoWgJZpOl|*cZJl_~qs@p@-Xj&8;xdy{)pRYQix( zkatn{iupcKRakeFb$eRcgR)Vpn;gOGD)PE>@pv;4`Y2f%;e0CS3KlBrNDiG|TJI(e z_*r~|Y0d%@aVIS|Mh#YbShSAzlfv;NTCtoSaeA|@{@xC*nd9*SbAXO%a*x*S%$e}C zk83=_=DF78eFNOfoh7h}dSl2Jqm%naT!%uHT1$R%g7m{9SnP3yn-A-?o_A<*yEsUtgYaH*5ij>^4LeIt^TwoFzo?WTqC3Qvi#W`U!yoKNFr-4mV$NoRR#kkIv7}8i386$jX-dvApH0vi?NT(dkYD|n*O>rY< zIvse6C113>;NRah=^JYegv&J2)m3o{b?~vmD#p5x5>I|OTkGlLz7A(;vzTO~2CTSa zdfXijtu;%#{P}z*uN})w&KzwGYn>gFiAFcq!fZjX;++m-q%Ipx%yeml)%NImf%>%) z?(+7};Mf0Kv#@3rSzlT= zHQ1ErVutij2RL2hnC~1IB6yE@i+@ULE%mMm)0oysqi=C{q@}I5ue6uXa}1k*+ zUfQS3oGH6I#^yNNW~%Z*FFVm~PR}b_N8LwF@7`ctLu+H^h@YazOB(&%q)GI*73K(U zg(K&P6NkCL^cha#UsN;NI~s3l_ZqBi!jwU=fXtyE4G+|3>3D0I%blAk8^D{^P07O} z)Qum7;GPP1B2^_DgOd~P_;TLwJSpPxclEV5PE9wp)z2L5^fLdX;mE{g#>ZFYv}|~; zr+kqp)>=Dr>uj4SK|omr6=+MIpfvA!c+ z{@$MEn!FL28Xa(Wb0u}Gw_9dh^R>nP;fdj%#tE;KW!Y)h=maMfOY}Vp-3`8~#U46P z;0aUojWkZ@YDu0NGCy$~?T9DL^5DwdgUn;*1{Sb|VRO79o+u-eCF^qyUY9ZMo2g(V zXzpo_&;~x9bF6T8WLq6m(+dapXTtt52#zhF-kD+MEih-$RYq41IJ2urCSa`cmJ}RE zee*p|>X=+kc$+8EwAkzRoR%GiUiVK<4Ht-!4^GnT5?#!n;}i{At9fY8fHTqB*F8?4 zrNSASDRs{Hd-09S>=+p$G|{Yi{3O>l#X1v1j_Ll;)NsIC)msq$3R13R@OJEmlN<9+ zmv9+Fm1XSc1e1Jxg3n)JL`VFtK*DtD+!LmHI5sFJR^w$@qRvgaVYUW`YFvHM!2uD< zE^-XJmy_kh=^b`Y^^k-&I$Aa{lc$c8X5O#wn4XvnvC5`52>-bENZ){uoAHs!nmn1N z6M3h@(>^u5ScY8fE&WcyOnumw;D%XV=d8`;d7^$Wi1)UQOP@x@7Lr8iU5tcOCXq8@87^h5l3_q!xt_?SMa|ax4 z-fUTuZ*bncgCFzSQRi^Oqq{JSYW8Iv{e$tT zu1;Q+D0pUQriAqHGE&y>9MYL{f+s@Zq+z_`VUYXSw?&=(xnhcIdR zCYN;gaBX7cXc;RviTfyT&IJ}{NhmblP+;9zJy*taZrvGWKCCQrOE#Q_b&c<^VI-WqP{43-PY3mA$=vyS+G`Rr;16oOq)$xZH6*^mj7N-(9M#;} zc-&K3>F(K+!*@7!t=-Y4?;n~u>?cii(=!Je@?_>jPu-!T10BO3H1F%}3k=}x!j*Fh zCVU`w0k7veQLI_*u53H5ulZ2RczwS%*s1q;2jXNg9);AYTa*5zUMf7UZo@^wWow-$ z$=YEu*yr;O`?3*leO}{9w{UXqndClKPh)JdyNve{mzJGZsyFMSRM6PSJcF5y#7&bm zQ+)&TdEV%+WfKlhe?H)YHxPuCru;b1!eAF^7KLnn$@CfKjsa0?C)pe6Ldyf#paQq9y&4TkY@Ru#wzb5rwz`-q~>sw^o}IrxrDbn+%ege z(+3J>zf&ut9;btc=qavb(sM%dUc$4y2Y!6FOVBAkBV#TZnK%IxiBXu}I7qt+2ckaG zGLo;abSV$9Hg=JZMpj8@a46g4n~Wz;;F{k{28U_E9Xz7#m%5g(9r6;- zI5CY;=j4c-zgWtK6URTCpn=?>36jG$pIH)jddtm3PI!(u9sMnivQZLBI^>inTS9ja zYSZ0Z@6?%#ul5^M>XfevCoo)_mJE4CV{bQWnA8&<*W$irQizvwuNW9(bI4FreW9fi zKk^ufR90jMs>bHTCi4+jrOR3Hm-o8M%N+AF;f!O(Y-%qF)gFu)#Ov92z}dLCU+@w$ z(zRrHy$k-7rccky1;~W6e}b~%mGcg+AL`2WRvS}^HqsL|`pTj?*McP^?BS8sA>YZQ zp|q6t7pQQKG#;Sgp|R<)pdpux4dY7{-jXs+%SB>-0W+ zGBep2X?FWEePm@@zsbi%W#Z(;CJE8j@u*|Euw=q8w3Nd+Og#a@!A7HDsT1<6xAQ+%tDj&20H3kQ@e0=5$}W<@mA7Iuw%F;*L0B6;G+JP@peAUGXb|5 zGIGmn54P>@KQ!IZT+`tj8TGoRW&*?&G>ti<6LXrTN*5IHrmdDGLk)eC1FbpDsX60h z$?6&Za@pYs!@2c!_DVfKhD%x<)1^mq3E_1Nm1tAmDoqbgIwxhwVJ<75APWQCYy>up6QpzJIK*-1S_mSA5mSy@}&f}hh&n2tOX^+S0C7lT-wBafq zOSn#3QZv=$l)?V)>DY{J61?X#KOL;a*=kf9+ut|tU=APoc)-~`%5$TGgxAyl5>M1W z6+AI3M_pdyqg-!a<&e)qNEhdwCOeKg!z?E&dXu_wVmtRaPW3wyUhS~2(g^lC3qzhs znfE3}r+bKNrgeUJ+)oOFg{gV-9gzXABNy`Pi&`qn^gxR{NrWS)HFX@_<6AtC4;5r| z+{1#U{n()~O7bzY%iZgpA!a^SN~cD8=_J>pd?q)?U4}g?=FWQhvv@=*V)ik!XPgV^ zHTWFp<)Gd-C_42%l8Mg^_LcPQ>ztU7 znT%s%ERi$w(@s}n%JdE`^N;Fez-Q3@T&^t1!r2nniF$o|OWoYPT1Q`?Q+mf8BU)m< zKF2dqnk}?V){`ks@VIU+uGM_b`6u-UtMmKES|=wm2aK_NzB?MwH7XZr^-F6+&NA~Trvah4-&XSB)`;%4bN%H|+@oBhC7n!~6EO?$#%| zds`<7Zy&B5Z5=z{X$|QeQLVd~l@7{*>4ju^B)}#-q2X}EEl%>C5-m%a`4(-jPFzl7 z^61_IDQoSYY3GxZp{~$GzHMBDyT)@zbZpJ`vdI9R`tZv>Cw3sq@CN2^dmf`NkXX7% zk1lpb4=gH8bn<@Dl9^k}-QL2GgXE`mbEU>h4ZiM#C5sAmqr9!7ty^R5fx7X*3>jLK zn=@rjmW0?8D?hT342~L`IGbkzvE(Y(13gXgI=jv(DlENb_P#IWx1queoPs zLxMH*J`z@qw^WtHuLiRRIn?3`@OF=^zcl4e<3WDa@139nNe$p>A1+7Jmf^u+PALs8xA zc)LzI-=A)u6d3g$G`^CXy*BD1$M7>IiFd1tJS^p}%p z$vokk?ij0Owf*hGy&+8_?QTcwm^V4o(;XQ-KJ3kjWrO5^ek9zTpPA75JqN4Ih{Gf& zpF)Cdy$yo{gX8f)=hUEcS}gcD-|Obh5IGZs~7$w+QPQcdU24rV}ZhWh?~hQPk4k|Vi@&=2J1%P1v+M2 z-8`3#>Ab#X+)e6fOTEbPOs1!9#(lJP)Sx{*8TTB$ZidM0kjcH%*aXP>9FG2G7HgGW zCo$GH=LWPAM`drLiH&)`zb?>G7z+t8Oj*TXXQ6poZ#UqS8E%Zx$|0w=#H6x5&>h}C z?a2lkMkCl^@@6FO^SJaWlg{Kz_RkD@GUdaX!586ym%Q{gbx^Z!GMg2XAB`G&d&;Jm zUt~$Mq)uaDe9~y{2-Ww_7&U?MJfThf%bPszz6lQ&gOs$nPB^i<$8oT4qN{chg=KEZ z@tS;qn1{y>=Xziwg^X@eJ4pNa%zPsA2CwKF9z1@86oQU1b6&ab zbn{RJ3)HuFFITl?I#IG^n+Xk9GP5bww=!TAbjPEqhp zEi$ApdXlRR=X&M%r6le&BThcmUy_{1N2-=OrABiZye&6BSG}yozt%9PeU8uwuSZ*j z$eBc%&WL|})GzpyyD&xcg#N)`)8M|5cAYrL%wRbk;S*)60udUGv7@rb@H*geJ9N&% zJ!XGCJ5s7)Q!eZ3G2=_}ELi69jUUXpjZCMrjl_(eOnIhf*cY2A@KyO9cb12ZrsIg| zV2#spp268;zdwYAPUI7Tj;fe!rFu5v(p_CV;V$=0m`oUpGD3(+uUoc{I>cdev=GMuz~Si{(Lv}(k~CAQr9ODUP^4B}m?q_<(e z$2ZI&n{-v0n`2i&3F@EqbvbP{i(6W0Jb&8HVg zC_FcIZhTqdYl(|-uJ0#7&l$u^A~;8nV(Xm68*q)o$w0}_%0dApafAXIyMt$wN{f<- z{4vjZk|1TFjFrPn7Mo3>)vkw01wDhFNx$M*Pp_ocxGxGmM!yXT2EB<+z^PfsKEtkL z-z2Nqx7a=SF1SW&eO-7cbZ(-P{e<1ee#xHD3o0Z!t=lo!JxNyjuVE{EU5QS)6CAE0 zCkG#m`U?g3U1Tj;N*3Y?u#?DXI0LQ5)6!?Ki2qvb;cO&lkriYUI5?AhD*grX8S+`c zXNOjk5>g%xk~xTd4$p5LM`~Gwe42a#@#D!FasoNmzZSI5B1zPBYHX`&H_|S^_XoaA zA0%G^{8jQb@^w-L=pwQuwl($;p!xV*f?q(qOgu%dz&Ew7BumIQ$T!(bs$eTXYAxkvsw1^`LtPxryA8*i9Zq{MY0+WCwWxPxStmyoyK2-zR&? zVRARAAxDwgM4Cw_p7rUC?qCm+^T6BfI4AxQeih-z(SSIGMqc^qx~GJb1Y z@%IaG`aAMl@_WEfl0T5A$R87({+q}%#wPM7@+^6pe3#rzc9QR*NB->H>{*ZY{Kd5& zocx_UNB-eXkiU5w*){k^{`2I*$iYOXwV=Itnm-8I7@^$hCdDHz6ey8GXcRhKByi49AyD_dlBp;BEQ0B_mR(2Ha{MfVJ zyE(QM<@RY`B?rhsvY#AswM8iT8F;EqbVBRv@i5`u(Bq`R8;=}x@1$3IHGE!NoqpukR=&58KE#F!1yCArt|cQlv>Wx8VwN5w<7npunT*aOJ&+m0 zR?>qwiqBvKVW|Yk)#2HSESVuWSgg}P1$&L8Aa_zfjZxy=9HDlq&T@75A!i2jI(Kxm@yfi^eXelkD z<>7tdAUK-m-JIwIrTKILT?naOO&75hg#ukhm&UK5tKEs{4sE{YQo5EdvB#|9$Ga0H zPPWQb(Yf+_Xw9h<+|v|=4bjrzbTQokp4O?{p7qXGJ?KMk2MMV--Do^xY2nperdjR8&yQmldQ&jE$kk(eq|w-p%xU1}(;j z_Rse-08Vgj$=fBT1i7up*Pd-(G%#!fNl}D(C^b9M9+06=&fu;@H~2= zgCsf~?}5tQs%G5N_}qh^rM-i0gS5e~?*V!*y_B3B+e&{z@1ysdFQ6r7(TC}F`ct}z zeu_RqKSMto+X`u(O+P12p^wUk>Cb2tJt?@6o=d+#f3D~j3cfCSm(q3m!j36n#Sf0bc-)qD$b zydwB0{X4yl{+a#_xaa6UoafL7(GSnl7ovXpZ~Ag{2m0$jvvUdZ{ENOsUr|<^zUtnI z_=^OM(`lkOw^h7OvhrUZ6gghUjN=nz#XX*9+ns6{2q#w`^ z>HG8}{%^Jdve`#Jrf;)rAlbc+Lv%kqKyRQ2=^^k_Ll4t>M}{7uwe%=$QZ0iA+z6VD z+V1F+w3U80v4%F&Hrhhl!!JW~8^S@?#dIs}qCccP@$2dB^iDcRhv);Sr=Jc$hQ9#x z8#+u!=qUXseGxT|(Q(J2LLs^xTuvFy#2c)Uc|0B<=pNcZJ435sZz*F;1{;`$_t5=HRce70k`N&KDsiEeMOwd^88D1qX>Ygfa}X9)s5K2SL%r zO6c#H$Ljq&yM|#;UR>e6%e zzDnskYF@*aE4^bF+iVNFIJzVDd3Fig;@ZwGSDGacuoKWftJxK>JPqucs0^*dJa9c~ zuC-c!4m&BlF|;zY8njRLZ*!gO$S5hfOW4)Q@9|%wnZfhe_fcjs{D)KACHz6xc5yB{ zmEF$HXQ#2#9U132$h|pI4-U>?8*#3`ge@x+0{1hFZAXUP%a*erL-%fF53sY?r`Us_ z^=Wn|yOeEbE7>;+1&3wX5}mGx*=N~L!N(&?PVCX>w-dYB;{x^=l;O4Dx`SCZjr|sF z`W?euYs_O$v9DNZf5a^KSMyHv%VX>@3-d60j@@KI|3JSz$o_*__iOAHc9G{&XvZt; zSN>nH%gA>;m$F|gS+J{YE2^&S{z5@33%t$+`@2d*>hlzKO7*g$X#b(dS42L8+&`Sf zvVU5X`3^{{DRGAzp}ms}G~svY51Sl)Asnuoc`-R?uSv;y}-G6$68p?5FaJtN1XJ1m*J z$X)`Se~E>xhPAPO&&rGY6~z9_cCpv+a8M~Y_>;n**B;_g&S6*D4Qs9pJ4Y`>zcz<8%0Y?Fx^VdpJ`wZtPW#5n=V~hc+LD0$*%HvtBb##v549 z>f8CwSHZ(I+`&GMHvl@sooHF5>tvL|EE74%*YHyKm!F6BKI6I6e+ze!^Aer$^Wo$E zCAJlGFw3xlnyI+KPfolU+Zv(D1Mx^TYulVCxhRh8D?gs#`8d{#aszCPtChwmN}q=I zzn|y~Hp|z;Xd6a(hWqTE;uY}*UgcTO1Fq+d2f$e<-T+JZ0o%_e!QqDJPskIzlW%f8 zkDZ?5_~#-oy6#V$#e=Rj#xR@WiwXs~pTQEMmQ$?j8T>@Rt3U~D0raV2J@8^;@A739 zP6uDtgs$YP`T2ILePt{7m%!PnDD@S-oNwV5^V7saekI^5LaU8U#wPIjP1uL!iQQi4 zJKxB!0#F3C-8N+p2SnUnxDx( zjb|?&;+ODWxGv?7@k_(){4@Ns9Aj6FTg3;5&!g_@&&F7FJ;8s)e}h!$g69(OQ?$GM zN#OpVYT{2}oWd)Fta0VH$DpJ9PBjy%KlIV#{Ez%;=Q+SW4Eg^>3jR0O_52_FpU!jm z^ZeiZ3(*~Nod1a5J6k))9LFz2-@Ib+bqlL5CyjQ_;d%A%;%j`LOix_3&! z>W{w~e3ZY--{K#l{8#zzzyQC7e+&3;t8vEn@DKQh{6G8+zKg%dUkg6YKXxbhwXrkd zY3~Gg-{)z*54G<{-nY4BNf0}z)zGVam+?Az8E^E!u7rciUr=iztIqEg3b28X^KSmT z@DBba-^TCb_w$eVBcT0z{to|H6re~b^|lx`%n+H)!YC4GWtj0bp* zKf_^rI98U>r1yD?DuenX+Le)mHY}c3nAof07XA`28~C3U2l8_MSKi0}jW{grmAw<#Yg2Xdc6C)eh*IT$pcaZJI-zZV z)`$~$2e(Fvb1=FixSh&Q}L>xcfX z5tSmK*2+E&{<4~`{^j{mv1RpgX5MRX)G@Wj>%M@-{`r|?0BUTEZ z2&>r?JyasTCS2m{A}Zosh>OHIVvF4up?k$zQ6e_;2gSwWl2Arm0T1X>b6A{9LKej` z@dfd11%a=X=AC#%`k=T%d{&1oQYH_2u zN8F42KNe4uT4Sx)AQp&)knESmGvZI;AL5_l`>GdI2)`_DQ91=$-+?!{6Ax3O<-{v) z6=#byS$b7s4div1_=|W>Tr0Li|Gp>w>rHqY1hht6?>tD(6YpTO zy)51i-6MV)do|u5c8mAL4be&emf$X}8M|#;#iQa$@qzfWcty?SHaB9YfXrv(LCW6k#FBHEpnw>j+jfu11>8%iN!Wv`tvGnIHjO6VC zyI1}Ti5Kg?&Ej#fL;OKBe$swb8)p0^pnX(vL@!e9wO0*@eL1v}22>vK1dA#CVy`<9 zS{XP~SrW+=9$MWlgJ}66_KP4Ne$}-IF*Xq~W>B^eQBQxP_m`mbpJV#b22wM8M-6!EQ zMXTZmb+41_LZ3q`&X8xSwVym4yllW{BTBXb|7AHBv3V%JL39AuFBggdF$UZ+xgX^} zBPQf$6Hka4oW?t(TZUwb7?+FXa=8j^ipk?bb3N?{p{RRie*{b+?3tRKb>v$k-5R zlvJW`bic@)=JXcvYiCGM14>w3AzvILzR!Neb>2O8;Qi`msmbb{W6ealu)OnfQ zDlb>_f&3!m_ru_`@_h5(>`jpqc~OuTs!@xacgS1u%+HJRPMZt&SuzZ4B)o$~Q19LH zp74&~`{LYiFp8dZVH7HTmDi|RTn_^(wdyMu3uRP6%HQ$qmviK&5}jtZyf3<0o-NaI zoBV~mS>7(cCqFNLj8eZ0t&W{M-@*(7UR{mK&tojx3H{t8uC?8QgxW0+_tB|jWy55vn-N`*zMOR7eaUpe5 zXY#jd-j_d<_sZXgR+76T6z5fU%T|lhPn0Ig`~7Qi-6IE_2jv42)&;Sj%3sN+!`IR(MOW1w!`_J;RS^Dm zE31R}3s$XT3jn-5v|O|V}C}3D^(77rqDnfdsZmj z)#k`|Q2$4ANK49na=%uB?*Uat4q{f^YuBpH4PU8t^R-3VVtGJYsx5OLg7<&99MfNr z2Z3K1#BK>_)S-?g&R1oOg4Al~X=}9e?RATtL)8TSAPwg^jtd+_?Ji?{ zWi;T4SGx#l7i(VxkCzzGStaXugLWyrpv$asmupvO8)ZQ|4Zp0jF1lSiDLkcJr(Lhc zxuUO8&7r|w+I>V8YTu3SP`eaX*=w~M$-~+=!&mwTm0Y5J&94Q>-6$0cJ_-%{GN2!7 zw`t|-EI_+SJ4>6V{aBrCTBSE>TX7n7mkaxs9Z6F>%-&d)M7U1uB_G>4jj%(0cw`ivT`j+;X(ivszt$yg#?$+)E{s*4* z?$_KqgV$o^ruwJTFk!pialRVcs>Yl42kno+#{(|yck)KSzf&M zS#?G?TeEwo_N0HU_N?}l!o<$B_r$b6s~!NYXB5`FUN;;UXeZmPj({JwLVM1HT~m;v z3OhL&-Qh)lp(Xce_q#4OHfev?-_c$Lja|X4_L?-+E}h~5`$Fd{c_?bJt?H`1sJ&(L zqrI&tx_1Tyu9)1f$|(Z6C02;!~r&qeFJ2Hu$(3 ztLgZy+FoFfTBQ$YbsBanHLQ*7KhLFhixe+f3-ax;xk9X&UZuUDVa03lcaGMsL1x+= zTBox&^emu$6B82Q`fIP`kC zcZGIDYts&4&ki1D=yC0*+9TQ*v@ZppQhVCkRMc7@sd+@LSvAPT{=)+=mAcZtT z-)m3D@57k9QI7Yq(m>(egOQrm z)T=`O(cyV%@HY~>_4(S*wO?wDTC2W5Ux?AtrTq#c=y7eQ`;hh*?VrJCwQih>tk#~_ z!}?0?W$ioXW-%laIj9tjvYosTv5 zqg)WNVGW+I`ipMYL+XyYKBceFPuAYhKF}uhPpgpzyYg;yM-X#B0GecJbUyg34j;g{ z&GQ@Ac4IK!pjSpWW0$8>oQu6mula=jdHuZLKK)DjsiKC|>T`Urdd~1~(LWbjt;4FJ z9hF+I28#M7@3s1u)reA*^$WED64Jk>4LXndF4Mp2>f`0WI!G;uI|mSsw^!!bY2HlJHJS(n1e?;}GJl*;Y(B{?3Ug$pztqk9w-(|HJYe5}nJkU+eq7_T* zb02cVP`(VGx#+n?NV`qHENY_U<@(k7&CYZ5pXm4LKhkdv*62S7t)^G$i``$oeS>?azE^)j|DAr1;xPK0{)b>z|G6=&Z`QxAU!-5G|HHpV|BilX zaHCokMqv*jHznPF>Cj7KlUl3mPb2rTwa`@LTR^_$Vk zXY?CUu1;BX{kw*#-=f3E)VJzs{dWBhB||=G$?9HSZa{YW{W`Q*e@Z_@zNi0MKdRU1 z_4+UMrf_@I)L&yO^cKBUf8F!4{-$aOZzz`7H1(JDkM$b;h+Z3+(HrzeQX8q)n{mFl z(6e6e3SSv7=xw14=FHvtE8g$w-LW5rr}W_>ADudEll}{9LA6LBq zIjq$u^E(f_Mve*L4!LA}F>IO~*`z%fS|Rfa2mqdub# zS*_fo=k;CfL9Y|>AO@eSkN~iy*J`NGED!4=JiT{uyWXf zu~VJE>;-#vo4OiH^@4#jT8!Mw^tYneLv>%I{3U}L$EkEt1Na2*X7h9UyMWdz4=ZvL zpp*3XjFWMnYplWb6e9&m*BaGgp{hskGlKC3-yVIyINiXmTqt9l;VvZwGx?S<1v`k%%C3@Carp~w3YC@cA zY>u7j+6o=WVT@LKHyaYCD4((9@ipTDLo+^aeBHRna2V$sbD|z&zULC7#2f|}uvO*< z#y9Y7Ech0XgO0Y+x1)evj}`FR=c=z z8KgX6;3NnBsuIC}^hmG44R~vUH&VszI4BYQM z%{a|~jldHyKhx&IBRESpj9=jCm1m4!89xs^X23dv!{5a5L>cZ+Myicp8h3=p}h1J`E8TN&6P|eiFKh+tD>LKGLV>fu*=l-Yh zwwW^aKpxN0tBkz{c5je+9csHCZGF~wSH&TpR}7qQ1fS)%SzLkwyT!9U@L2GtmL0)v z1~esYJZStS0ZWKq`$XSZIn|in;ob?Y4;Y7hml^+phkT)aK&9yiun)c8z*q8(-y2N^ zdB<8E;+a|n82X%NIK}X0D zc9c4nX#cP{Xwi3=)UnL5(y`8QvN|I)-oZ?^-gpBR{r`3L9bi@zOSotE?Abk&Lr(_D zIcLd9U_o*YA}mRA4uT*_P>|>XlGbHGCFiJ;L_jigww1>KcxVME4=*KcbLE6wbQh;e%dL~#AJMa%!S7?$!C6ed zonAy=MlX}}sJ+GR$fr3MWnuKDRtaXaTqZkBFVAJ>vN%(@99%}^ozsWyF3Ri8F)o*_ zae1&w(&v(#g_=C(9B34dbC`8vYu$dd{WESbhnD3gaVhb4xzD&%ZXWjqOW{d!D~es? z#i*6J5<&y6q)#8u@dRlQutf3K!kM_zTp6yc6{D5pFlus8PDx|s3S2&}2v^EX9qW%VrSbnZ62i+Cqy^>rv zt_RnX6S!VnUBZYmfzCnSf*m8;EBu73&ov4=Tx061p>sxYt`Eh)+LuR?8p86h#@qmP z8~3)oo9hnRtbtY@!gYx)%)Q4Ar8J=Eqg7uC33Sl^n7W#D3e?O+$}&$ zKy%5B#D7#s;jj)Ie}?;jaKp`~d6TpScc0UE8M-I_x3hFVcE*A0fs# zU^E`oHlF*Ko#9r*&&AkxLVCh|MUo7+#r<4Mk}`0RaKv(Phq*Lv0@6SuiCUG{GDZt= zM@b(@rNXZ72ZEmi7d9qvQ(;{+DrOSB^I`e~Z>HftomYaCequYwjChM*&{0g2t1%YuwKWgWVme}^!?^t%W5oHLBdA_zNdm{9 z50N*6R>66>owQmbCi4Oxkt^^#_tMn0B;ZE#Oz}Rqi`yM8#NFf_=)=(`!9zz6*DIr&_CZaxp67uvvl(BFD|0iy_ClrP4Y;7ck^*%iK&RsbVd3LoM@eP$As z&&LuxNFDa!Dog8hn7=^7h_FI@qF+KB|3(10|5VtIS(8He1PUR|nc0Y);USkGtRB`C zz?n!NLwQ&+dPwcZ{kNc7R7eLhk+=HMJV$+=v6=Mb zc)yE3Ppi262NV~(E);$>-J$G{`Dx)y{6zi`zX$Ip@mH*qN<4p+Pv$@4=ObhR|2e-H zl)A+2hn_kEZtQ;IPjb+-@=N)Z{B?}M*Ze$h@auRV^J)ZCeSp8k|H9wKOd$jRD?!9> z0IrMk8==K(hNo}%dpIBD(FQQ(&xOA97k`A-IrxYCW`4Unk^h!*wK0ky>;nHA|A;4z ze@vN&C(p_ki za6*v$cS+GwdW|ULH=&)-mO_l@I$Bpy1XZX&GK$bp=qTudWn2PpnBXb5Iz^cU4<{g z&q?CO-AsgjEG!aIgvG)_TNBU=gw@7o`B+fjKzA7K6Ur0FrNZ(s=9*$k5bo!&&WaJf z_V2y{j2DHC=v_kzLT9gl5kMFeQiOK}NNz+Q(kc60;eD|$q{Z)r3Bpuxtm#6kut%6D zqzOxCRzUM;5A=>2EE84`4r%4wZ~pFv9W=fGM^tmkZy+Yu(H zEWh`x64n?+(0|rK<}L!e*GK7Ax8 zqmb~ea6s50e8+YQzaZ>KVCJN7mn{^26%GogXf{D*hHnVJ2@m8^dIRdgQbDpZM(pbv z_>4G&FrfNtwZiYH#}mAHM(?GuVvOJ8?`gf!LQ$=lcSe+in>3~gf8zae@0b|Th6u-m z`@)$}R#5C&;e~KsOfZTF&*8rU`>RBFl@ev)p>T^om9QE6fH>hY{HNU!ned3p5DlDN z(ZZb_Iw!iqCDB8BB@3{L6*GtD;+#FQAYqSFU(BW@iMa)Ee>2V9E9N)G3&0F0gJUUj z2eF7VRV*qz7M=<(g}=nukRs*~i-}>mf|!xPGDyrL))YI7qs1}er_q|?Y;lhGrMOI* zDy~Fr{}79dCB%*5S7IjYi9CY-aZfrS76M&d#CVe|mK0wXAy?DtnwZb*3=R$|6Uzz> z#B$z#QJ^&fu~KXgv5Hs~E#DZi;>2oV_3$9*t1;GK=b0M4BGwj7(GlZCUJQvDfbnPI zn|w%VYryUgdfk&^Lt{LkZXz~CdCkNYG)AZe<6jf&iY-H1#n;4EuuO0R+e`6nu`O2j z8iOv%6BbcUvhX|#nHBqf(n3arx$6K^7VQum@N{y1CC-ogTw)L4vxC@Gglrg|;_t}B zzE!b*xIRJ$L|cjjX^(=bir^RM-7Sr5kxt?$q7N~zh&`mZ7NjTlqF6HEBxGR^D4vTS z@FB5Ogs~aohonCjON$@Le~4vpH&`qWY*i3PiWRXk(nb83-zI{yixb5+u=#mXD33T5 zBWA-$OSJ!VvX2tU3KtYACMJ{+ehK;xOA(0%r--$1t|QhL8;Fgt;{+HWc<>f78ff9R z*c|EJ0v=n7ZKw{;R91)H0D@0Q$BWk9D7HtOzTy{R$B@iN#aXlxq0dEYLPw=xtP$6M zL!?3b*fJav*NL##!~QB>d`E0&LU$X5#sM&N!TQg28S+=cC1omBe)5Q`#O)-F+1Ko= z;tH`F^65@ek#s@qCHBK^+pOYRJHNQt=EU{lAn{#eruZJg18N*9t`0_7ag+I!!o(kx z>!70JFMet?zkocJRnYf$eTZA68dx?pD zZsWx9cr#BtET(~;=8FsPbXB}5-VrB=#GfXM)8giee~2?er}6YT{?}0Y_qZO#npBik zk1iH}2c#{MVlJW>SLpaXRR zo{|5{Xle13xDfp09-bD7NQ3J`{BPrbS-b-Lh1@y7>v(1uovl{XF5(jLm_8|5iskTQ zFO_t zRtN%rEf8>E%(&z?5@v&#+d#6FpzpPF30_5~x(H zqhOA&?73qmaMhScu>2FAt#aj~E6d_e;#1QY&z0bMOE|MeOm-0yYr8lH%l0U}llca)D z4XK2mB2k~@x$aJ>kh@E&C;leYXLSI7JMlqui8WkmA~hp?P-)uhXvgAGoD`3duaK12 zPBx0i<&oL}qNXS%8Z9kx5-+t6!giRSE@PEdwTo0?NSDb);n@R z$ATUl(5lpv#$K$;y(U7#DP@v+OPQstv;rvgiOYuYUa=`sc6qbZU&l;#^ za6zd!^;xMTTCI)*+(_f3(m228w@gj3FPnjN^9E8w4tP%JElrlDpe~I_d&$lay-1Cv z=0-MY0M>Xirt>b&1EtkcZ3%N2ztvZI-K9YYT_p{XMpImA zOSCjv1~WcsEX{#~Bf1#+1KcD3CE)V!NOh$TfsK!(eV85X=cY=BC@qaB1WRbEbV9-k zDCRKe6~Pm(4(by_(I|asSEbxZD(x@mpcL5Gy>9_WB{Wut(|?PfX)$=1h&rKP5-yOF2|HXzdrJnl0FDrXRG3qtM`x5Xg3C{lbNaA+6`I_;(ytPD3p-}_lJinJl)M6E<&b@eRR;H!){vH8 zE-YP^i%3^Pvh8Nx`x+C3}p2?gn$+E1<8uBe00=&>`{~{Z*Eqiih?Fmt+ z40r;GC%}z5O|B7?NZ63GK#P4q)um(9LUJwS&={e7I!w|@J6W!ame@`qvVhW0V|IkG zhnan+**FyOOzfU{2^Mb2gx0Bez_$#Ms6!7#k7*!A!S3X zx%snbv@AFgR`Wrvaxdwz+(!B%rW>u{5#;fmqe}>{1c&rodJ!#!>r24WgYJZTa^rBO zglA@&4EmSLqr^Yu&d8@KtuIJ_IrZH~$fdjczWj>QlNM2~sMi49^^_|iO%r*r+(K-n zCCSC*K5_}72;n~Bgh-Z?!EG?om6YS<1bHAL_ysJBNe+=S%h}{Xa`u3)OIu0X zX*`$Tm2=aq%@{8il#9y6{^t6D=2R{zzmEDR%9GGS-Q?PGvOG*~6xiy^9p&LDb-H3i zOUpAATXBRw(o`jbJW_^SCXZJ#DVZ(8`DcGqhTJLa$nPMRE>ynUm9R#0P8qw^0Ap_% zIy||bJl9?;Pm~8>zFkMf*d~{jKa|TEGWZ~q7s&5{F3?u;P{6bV*J^TgIaU4$cMBQf zgPR@|8mJxFGOT5<#TwpPb}U#GqjrJZGXZq-DYcS3PaZ)w`9u#6FO9W(vFap8pzZsU zt{eG-Ys+I|AIM`7dmQdRrgZF>Jm0;@w~!~uliiCl#vOU1yjA{0o<{XaKcaQzDe^Yb zxkgLLtL0^g)k|K1T^g{)k!PT!OTwG-EP1xPPyT{nkQd9Vw6}oU#ok`5CM}hh8%5-m z@>+Slyj|WQAClL|2OtL>kxwH04069LUz6|3_vMF5j1rMI$l&YpSMpAh66C{(xmRl? zZ;=lw3Gxq$=nOZC(^`$92#3 zR)@`%!N25P@(KNO;`DMpnvu&FjK#q4T=}dFeTQ@p*F`ey8s+a0<9k}!m*>bSvDxJ` zd3SWO{Gv-BJAn=wSJ(;Wcjf=7vHox zC;y5!K3|tH|EEK~E$xu+dEKo~Wbiz@r_hw<8uHKVB0C`ergoJ7kT3c1Udj*TKjpvV z>+&x)C*M&*2|a1;NQv{`CX)_SiI>KN9qWQ3(5xjkg(OP%eX==X$HI=Hf?{;oRP9kD z#FZ6>wf~%aDB-AZPvJt4Dajf%x&kZ3HI*x#c$^zJ;fDUf zC!A1nD{ zYNfVP2K;5e)Ezc+iAsY6&Qf48=Xk`qZKUBu!9&0~DW9W6587N~F>~xU& zDqn_9tGY5d*h`?M#x{#ASC*UAl~st-g7!R+)C3Fgeq?K@q`|V&R#xL~tuo)3s;pC1 zD(k6Kg!EH3C~K6B$`ECf@)hXdYvr4mZnPIf*%HpAJr_19Bb8CgIAuEG&QMa7dHP)C zfU*xyUnq-}!^$z`n)0*qt8!2|1Phd~GEFs5-v+9wR#P{qw>4hN3E3c*mRlR7y{C=U zK13^iq%5-2v~k)*+y#nuv*sGNmo+Z#%M@-u`UaY1<>?f9*7jx7TX4hl5fYJcS?@wnfSH8H2@L{$fX`tdbt$`*r^@#}qz}+r4k(|-VP0h? z6CWdMH9Dk)M9s=eZHNMnqWIj#*Q^f1)65vGr7CljKb7A?XO+3iUkbFc(1=e`LkYV= zXN6DWN|8pN;2>!TpOSd4+(f@mzz7yq;q}a3OQlCgAg?7-TUD@=l^>K_$}(kzvKgMt zM1-GGwknu+E8A7@8C6TzsH(JM4{HFa$`R2(jysg^qMWi5akEJuE4#3QvPU_i>}2(#0{)K`l#rUoWNHqw zy^qaKmMqFiqEY2XO0Ozv7Uc!qQG2NQ5_&ts)cneM+{2oLba8&H!fI}{h_z3-q+C{u zQV8KgEv6P%LCe9RmIz&f9WUryEu)rI%Y`ciyN*MOni(ZeA!!^m=wfb=rdCm_3TPdC zTPsz$u2xVh#`aK_+R2s+x*P~B+)#dr%cI=JZYFrJP~ewG$NnF+vRxPTYM|WZyNQr= z6UJhF-68C&7XG$bRLY=&dt$^(B_6A`f?a$awOL$VymeHM%}_Ha;Ckw7WG}CbP_wDv zK`8CMnln0C&8rrQ?XT8SOA4?=QcICVr1DVt1JvAm?W-w|^wXRxEZD^B4<~+593hv2L)b6lrLAh!? zX*N|}9T=NkZK)3SAY-UQ6Rh|8Yc zv98Fsv?R4Hp4zL!g?noCXk+Xld9Eg^9n=riPP8tjzQa;jb)hw2dQa_*n0@dcAUszG zspC}meo{xNpCCmeb*7yw%F%30orD;T)%99!Xnf&simR+nRhy{oRKRSVGz7JuR}G_e zHEFCmL;W;%mpb0tMV85|DoZi@0S86k#Je;3JW}B;2pZqHDEl*DVP0%5_o8x9O;ZT0#8x=LN6u29#i>lkL0>K1h?u#rREq3%+5!)w9x1n5su{w#I2w-=lcd|F+iE`!Fb zTr6Z`Y6Dv9SLdkjszcQG)sbk;(du$_f^mR&mX>6|BGK%J+OI@ELQhurt7FxP>RdG? z?kn;-1RfK|Pb52Yt+#qcJ&PE7w9@KF_<;A1(g3*LhxS6fpk9>Gf61x_v^tG?4(fNw zgRMU4_^?jgoYq97zUr086L>CE)ME)4yHxajc+)9NJQbdkqS7h#SIF~e>OJ+odQD5> z`l`S2%^}&=La%$QZl?85-0f2#391M2->LqfK2b-ght#J?^}BjW1s5b)Ox=hwFs}GC z_%M{J{-HiY$cu1^xTDn8bYL&c6ZLEL8}&Q&d(w)dhM+p|k-h3+^$2pmtX{RRs(-3K ztKcg%u0{YkxH=2dTjo`2C)P1AIDk3LB=H48YvE&`fw(KxS( zkWnjWt`-j|?M;$>*clB@$YC{^iP}k%q8HSob}n}>NP0@;IC5-137aC|W zS}bR2VRChzoA;q=y?r%NQ=`r((^-V+oRRhYH8rFT0^Z7m84gJRV4Hj znh?f#3v6a*XY2_yl3~Iq?P` zTFf&cV`5IGb!K%@Mi;G+)>Z3iJ<`&Vw@>X;ZDe5SLlObz;Gb$kwOQJHKalWFsg=StT zaf9~(>?x~jkV@sv+V@zMfeuRS3(o@^w0&Bd_OS+j0j!`W)1e)teTkF{^2Cf=n?kiQ znRXiQX5;y5T+e7{U&UTeoJN}yJf)wtmD(oli1wp)NuwOkc}KJhprZTQW<33-JA_{6Xh+0s7dD1OfdJcP(I;N)n&;tM*9S4k*wkQNQQ3 z6EMIGo?W{Ig{D7)#$(eVlB*cl%|?=$c3ztrgogT){HT3G-afUH8fK){0qq-5&qe7= zuNwO6On)ziV)$?*TnSQXuu%@~bX7ET&0qVz5rV8m^EdFKPY5o%XAlRWkQUMpZFfxD z;9fVwH?+CvUubD9MN8G@iG8)twJ)rb+L!1x{@g{+r1g%L))s0@wB@w6L6k%Xl}~?a zU5qG)^@72E3Yyn*(w9hhC9P)1VhWadf`_kXQM0mVbIVQ>CjdsoY0G+q}AFQ zy;!Ujd4iP=OIsItLiuAYs)!ChPw)-1L4&6ncw%^<{TaXjtq|s9z;kK640d9Pq<;#7 zmYlbPoC8RJgDPx^28eZhlS(g1oSWs)j#8XZfAX{yE~p)gyR3bMo_-wgY}K}D-)cL6 zon_i7?K^Fco?Va8X6d!`dU|;ypLzqm zjtjX~m)ZLGppKK^#t$Qny7bC-E?GGK4q+QXj>aDb&v}^iXm{a|1GQG7i z0r8jXIrX-Bl6D=nDX&-6N73#aJ%c}sMF}XkE1Mg-1U^4m?`E$R?&*yKDO!iTs6Es{ z8^&lV7oI-4>P<0{g2&T3Hgvkh5#yaz*ViBo0VTsCmZ#M{Jq?j^18J+YpxIThK%ICCyvhOuc<{ zGHJ~ax0H@C5#kaiLIG5GS$)oj_WVeVN zmdMM_MZ4#8*u2wDK)nmsSFf%{tfo|NaOCQwgD{_A$1CJAeS}|k=#(M3w$eu_=9UdK32feyC&Y(uW$8)$O=q?9s>QqhKfdhW@cWNdJg> zvOYndsAn-7!4fPxo~G)bfF_f5Ss$;v`ZV3sv+C3J9PAj&s_HS_bjXD)hdx)&t>@7T znQ3|vy@XytAE*!3XKAhU_w>*7;d+|BP+y|Y(ZAOB*|+si^+WmiF7S49mc# zvK#DIqq^~~G29qo95fCaXN@2AdFpQcOYGdgVq7(TvHleM5{>GOPun(J_xrc&v}qe*j#g;Fo8uehh2xoPJV2rJshxUrQgYe-OQ*kEQv9eolz$^YwB1 z34OADL7$?}(3k2z>NE8P`WN~pudKdOg#McQO}~o$h`sfn^q=+B`gJ{3Ox8E*Hxkl} zRr+o3n3t&E;Y0dYT1EXZtcudK%EG5Q)|0WHG7UR|XOk7a{z$*8L%MS>>X%UCr$igT z)F1jK{Rn%ZA0;~0pVR(f{hEFmWAzNge5P;FkD~|tsUHBfZ`BX#7fDZ`Z`aR9Kh^(& zHOVp-igeN+>c5F)^_?t^MOZvb@Z04U;hb?Smhnu8E@qnk3sWKAN=#=mlb!AQJ*KcQ zdq)<=C4H z{fafhDp+pTo^`@~S5}x+VEu5Hiw$7ISSGax8;+;Z>_hf3D;B|c#j>$H$R!_fIrauC z3k@xFNGy?7!LS&{w1Caa+(0fL_LE!In(=eeX!gLb_y{I2w8@3O(vrUquVtTF4R?}vRv57xw9!-lZ; z*ih_#xXlK#_oH>gBUlSq(v)M6?jYfGVS}Pqq?N2sEP6kAB#LQ?r?=P`_|lrmK4Rn8 zcrTGni0dln60sv5nm&{3OI%d9Nt4Ukxo3hAmd#?bm8XnWAc) zUy()#Z@*_tL%G;;wvw$y=z6w+?W2*OZDgC+=13d1h3xnjK+h*(JF><`F~0 z4&aA-pt($B+x*tNz%C{{W|xr?dtUguY@zS%iu58b!+ZtyLs{7Y+QZL~JKF3!pT8f3 z^-no=h_t-yXSNf0o@3Y9ZnmGVNt_vc{yO!j-KjTosQ z`;*;4ikEmBZzMp2#v7a=u$$~D^8d?_*e&+N5ZP^ets%>p#~PXuYp8}{#2K!kdlfJ? zo9v`v8MYBIFz;cfj1cm>i@OH~Y(|ZGMn>Z`Ba4W>Ms*K}VoiaulD$zu*HQF1UjPlT0b~U;g-HjebPjHFeMjxZE z0X>Y--@q)_NVM}C1F*|=pfQMSf)N5yjG2_D zmuP%JG92WYUFov6fnJLCONm;>SfpEPOvNk(b9rN#F%HigjP=08Mt08l%Ge}VHNG*n zNT=Yh;604~U#pk=nvWD#haGqv*kgQv|9Im&W4p1{*lm0a%t#wT`9W0vt5 zT0Yg7k9;Bf8Y}T%h5xt4E+0F4jqjzeL*0=6NX!&twSgHB`sh647;1dZI31JOIBx9m zOk-bkKIRWajC0EMgaWV?Pj+e;KTs{~WYV<(Hw%!TYholoJ41KP7Yd~sN71AEl3yb> z*O+bWH%=N~8cS@=SZbV6;*DGWF19Jq0AL5Doy$OPFi!C$jQhrl&?;k&G1qvQ5H%hd z>*5|5;Hbvq*eu2kp%r;`+NO8Go4grnHDE#doCVNOpY8tCkP<3j-sUnP6(B zVOpkRz81}iIq(fLVwMG!b}%!US;>n|_*=+=$lZJse`da6)+M-VXd+bTBoej z)+6gLJI2mvV^(2TwUg}0W@~$zy~EjV-*l?V70fo2p8RW>Z<{p#=+8IDeLf1swFKa5 zNO!olAb--vc(Rx?I|SStcU59C#~nouHE>@j_NG}3-j7~4q5Xo5Ye};_sF=GJZ#ypC!dl#ZEfP0)(3n?kyQ6l!AbVGhE- zhw*GVV!rRcZD&`(iq~)xyLQMcq*>J*0ofHc(v&axF^6CMk;+`NF!^RM z`$@~AIn7FDvzV6V7;~&yRA>O(of>kyiFp+LOwa=KI!K4uADBbQV#yq7jz=GPVSYrR zbP&g};d>zND2=z~6xv&at6!#n2YNPVV=Wsai}`UhXG|+IHAra|S6Y~*gvur`#J|8> zaHfz#ez&j}JSFyqIfwMg;97mDulktBSc+CaPci$Trtig0!RUD0oN1!pnxoC7R#RMS zm>>G(jx#31`v@dcbAmY?p4gk2v&^|Z6cf!arLpEpvoCtw6LFtA(d_T1SYbjEHP@Q! zL(|Mj=3sM^xjI_YT$SD`gcG`l4@<~8;2iVKugrDehqKHbh_}-OPY1Wz4#--WZy~3> z=7PARwq_nO+nOEix~zcN1)7J<7;C^~q4U;Y>$lwKiTxNiOxWd{U2*MhUNA4B?ct@= z+>Un4VfM7YHG7$t@a{5|PLKw0Amn@eu@BWeg6jzrP|+Ln3crG4h3A^r48i`V} z-A@wUo}{%a)87S3;nqg;6Z58d-MnGm@@XW^oQC&EL%WHzB=e4WkGPi!`2+rIe-nq9 zm|+KSXrs)B=I`c{ba>$Lya!*=MD0QuBOT4p%z5U4*c1zV0_h`i7!Ik^yB{WhvAu2aeF(JcAt1M^dpfu_u*iEx?NGb#I1w)w1zC5Fzk! zVg3SJ)*X@MR#9pf^RD>-=ciT;OSN(%Mxs>{-qYHcf0!>!@aDLo7Wfq)!S`pZ1aZ1m zMk%ad52OX|hF(?Pst;}RE~|26Yxssc&OHsu{9{Xq9Jd9BX$G_>_`zyi5qHk zcBWcwtm>8~ls3O2{^4x5+D4mW=av?e-7>9;mILW|mK9?a;rd!#tnPrvvofI9PO&mt zRjAh@q_Ne6e1O?CqTmU9cB=zJF9-Li<|SI_dvuV`ChHxmGtJAa{#G;5;KopFJY^AX zJ5ysCSS`q6&B7RCWw+iYxx~I^O30u!2^Lm?DnM`fg9L^5HGR7A@~Bya%;SW)i~g#htR;9L{KBn6stD!nyTy8M4iD? zWN~YzRobdUs}+SI-~rdyTlt5#jBsy!WHb4j)*{la1?5}4kos$SQVOTzh9IX9yxC@?*3~QYQE=6l9 zw1djJYt6Qv__6=6KErdWl@|Zp!kB{l=hjwlhC0mJW9_xDFUneG?YDk3VF!$NAH;32 zj#!uIURqDIZilJI*byg@#v|(A(8jE@C7Rt?;~=#a0Y?7BEbgFI(ORvwKJMx?FKLT-h%uT8oDfn7eN4tV`fv|2DBxnMN&{q?&*AX%- zN&uHrZ$?_mx2!`1qg@leiZkF^m+T&K#j2WJ$T|$3R@C~z0-SaxgkEJ=tYe^k^nB}O zFuou(yLAHRCXl7$WW|QBDT3Pu-+*uYe0D>E;}sOuXiWoDa>lNN{NEz4Po%on%2D2IgM-o6I>=tePEcmsQQ?WrBQJa{ z0%x=f&XCSw+}=jKJGWiHJ7E{L2Wv_8Csq=1I=r6|eSsD#rkA&8B7Cep%kE*9 zup0y|Kt7h}00zKCk>gdGso14(w~)eNAKuGu9K=D7TI3D1KPJ0-dl^|}`FI*>Per^t z@K{j5zRI_-SKF`Kr4gf|-6QC=Vt1v!Vqz~C%^_^itKHlF!0wN>A7Ed$2ioxUXOBQ=GUcdDK$_9^ zI6Q06DP6%Rf7DxHf58^oU)mFqeiC@u$$+0qiQp7V> z;u##s-f!QJ9Je=EF*4wQ$xJMY$r* z_n~PvBqCrCdN}*Meb7E)A4B*l`=TQ`Hd?d>=?WY#XlLSMG1={(9M}HY-brhMq_1}z z10FWXWw!1IatSXGCBpF zLgFx9bV82i7*4U!IVY>1x@0($Q_9I{-}PMQb^BNQlD)<$9qGuoK&fTyL-rT;VL(yQ zeq=v(D%qPH-La4_FlYbn#HR04bMgexQ;xt#1%mF?PP=Lj_>ytXDH3hz)D$s_I@I@X zIJKRk=+8x*%1(a&xgO~vFdBev@wTPYiZQ37)0uDz+#Q9_+?}{9kKDUD*n8>}CR-M2 zS*N?x!zn@K+gNW1;6SXNvHnUN?pn(cr;F1M7TY)Mr}iH>zjOxJe>nri+Rh+pWu%h@ zuIiT>MsDvp9AXdkpTToUE_MWz41Vh9C~%ZOR>-SdbKF)Zo@kcl#oe!OH&IIeZvrdGDjyNS&X?HlEILXc&XD;G==`3>AIA1$koUP6eNPEor z*}0DJ+s-|zgLB_`%4)bFHyc3$940$^h!$b_171e!{8&fd>Fme%98e#8pQ8_ryv|{& zrPDXS2Biz`9DkfA&7gxG9pH%e?y0XhI>mGb)2Qk+7N0mxoYPJ-2QXuA)K_s0of8f$ zQypI>bovMII6tDC!OmICDpjY2sYg0FLxAbGoVT4e`lN)D1jpayBkmOkBMPoRAx}sr zEXDZ+rF|btb@n0jS1wh|sbTi%Ji>mM?0A#pw4)rHTTXipG~|2~F6hMYq8kqr8xAw_ec}MrXG&O2vqVGdPyh$9dm)?nVgruI7S5=}_thJQ7?@at$|2>=YMY zDu}j4oZQMFHxFdow3t?IUT1TF4L5@i4ZPXA`LI&;y5TAC5Skb+4XDu1gClr{65eu-U<3&HrPYin zPd2G;Ltvwgb2KK^ZRNHL{F_iJw;QNzk6SCUj-|Lgu^alfo68*#&FKztp-FbGajDL9 zXJ-2Mqkvb;wVfpd59RLHxg+rhdX6r3mP&`+_kCJlMH0NT0rrR=xSg=8ziYzV#PM9rec)EHxB7p3Snl_$xWf}deT8MH1fui+A(gPS zV!2D)&m$e(MeZ_pIiOo14s%z>#l#kN$GfeqO~A!4@f~Lq_z3bN82i{qK|$^){dinm2kRZq8Q=oa zInHO?gUDl;dk$@Ip7fsXk1l$$p5&Z|too^YozljXclWzLyEmyu#IF$R7XH-N;qQ>R zGJ4Qxw8|;cyjjo0&F&lYO$zs!+Y~z(@dZKWl5;J-N_x8l@Q9t<(Lr0en?m4He!j4< zqAMVK?!KUP7jC+9hcF};_aH5p??wv|Cqdr#$-5w|{aUzRd+{`md7OtHtX1?Rvg%+P zJq58wcxqf8y=t^2l<%p|P3La7kBMA^GSaV9o^VfqCI;blIFk$B#Pvn|-(cB+Z-Y1w zf>xv%W{}4D9sLEnGhxfwk#^e?ZMs_`ZO8`9%jaJ8c;9QaNpIjuKkB}8kGVg=zgj_G z_JAJ=E|n|`DK|Q!P5iM8c$^o6kX9j@;CA^ZD`@}O@M;9U>mUcG`5dvQSIb@LQ}9>bYhE3!8YH5g zsjff15TuZX9uX|TJ<6zy`vzFMx*E=cbOqut6O6RclIXqPtEnYg(-;L$LQlMIZch3t z9@b@n5!{6-9vy)X68}EpC3p_}R)}~i}44)T#V+AZXkb1S-a+C|y~-^b8RHhC7V=Wv5}>1L z-UeuFH+o;m&Alnui;{@ECU~ph*=L9G)NAUN^qRS4bVfbhE$i)sjovUS`EO{zgTM54 z0gvB%dteb>k;XBWKrO<eda4|+!N{BjfT4}euTft*)mB?eas<+jx5t7x8 z=%cQ;+uH`HPkYD6mk{*N1-&0xb*Db&HqE`O?wc`7y`Q{m#6dhGTGOrlHypq;xH!&9 z9(GH4m%X38>!hs;{p*L`6QX}8L?eQCCH)0qiFWOULf9D*a`qw?IGqRn5ybE=rN_kE zVRVl#O@+L-LLryFnZCwt@4eEGQTg5}x5=w?MgLCsuR8^)nx(_>?^m=`JK!kfcE-QC zcjjLy{>zQq#VnZq%Ejykbo=%zx`0O)-~s(26yjgH!@V{XkDk0vL5hFX?1tM5(jWM; zAERxgsM{MogSjIC!>DxV+>hKz^d9{=iLU?ohkg_yUv;DxCil$kUHqK58X8P z5k1j+Rma_?|2sc=>pqT_{`WWTe893M2yxf`{U*ri@8{r7z*kaW$?`RL!#D1F@br!D z?*RlpE|9-p#=Bmy3kv%lY1u=ihu3D#dLo~NoYHK(*r-E zQyiEf5F9=fPx1cGgrn#&_zb~6f8OFy2s>L2qy1mSqUZDy{8sM?-p@dgh3*LG||BjV@ z=k-Ud0p1v#$59xipt=MQ&>8xl|F2(ot~U{RB`1KI|6hOJ^dKf6n4AvBKXLJ&d&@ub z_m=$oGu8^zyrqzYmZ3NNYYhJP82`NYXslfkgaM9~1V_*=-najR<=@j$pH2V8bVEPz z+lNv@9`b+Qci!Ge(NM@_)OYEQe%_(r`k&6;zwyC;wo51!cl1A{_-9zaL+qFT4E2tB W$Ab{>Wcr)`ott+yJzjtddip;tPSvUa diff --git a/icuSources/data/brkitr/thaidict.txt b/icuSources/data/brkitr/thaidict.txt new file mode 100644 index 00000000..a53125f0 --- /dev/null +++ b/icuSources/data/brkitr/thaidict.txt @@ -0,0 +1,26359 @@ + Copyright (c) 2006 International Business Machines Corporation, + Apple Computer, Inc., and others. All Rights Reserved. +กก +กกขนาก +กกช้าง +กกธูป +กกหู +กกุธภัณฑ์ +กง +กงกอน +กงกาง +กงการ +กงค้าง +กงจักร +กงฉาก +กงพัด +กงล้อ +กงวาน +กงสี +กงสุล +กงหรา +กงเกวียน +กงเต็ก +กงเต๊ก +กงโก้ +กงไกรลาศ +กงไฉ่ +กช +กชกร +กฎ +กฎบัตร +กฎหมาย +กฎหมู่ +กฎุมพี +กฏิ +กฏุก +กฏุกผล +กฐิน +กฐินนัตถา +กณิการ์ +กด +กดขี่ +กดดัน +กดหัว +กดเหลือง +กตัญชลี +กตัญญุตา +กตัญญู +กตัญญูตา +กตาธิการ +กตาภินิหาร +กติกา +กติกาสัญญา +กตเวทิตา +กตเวที +กตเวทีตา +กถา +กถามัค +กถามัคเทสนา +กถามุข +กทลี +กน +กนก +กนิษฐ +กนิษฐภาดา +กนิษฐา +กบ +กบฎ +กบฏ +กบดาน +กบทู +กบาล +กบินทร์ +กบินทร์บุรี +กบิล +กบี่ +กบูร +กปิตัน +กม +กมณฑโลทก +กมล +กมลา +กมลาศ +กมุท +กมเลศ +กร +กรกช +กรกฎ +กรกฎาคม +กรกฏ +กรง +กรงขัง +กรชกาย +กรณฑ์ +กรณิการ์ +กรณี +กรณีย +กรณียกิจ +กรณีย์ +กรด +กรดเกลือ +กรดแก่ +กรน +กรนทา +กรบ +กรบูร +กรพันธ์ +กรพินธุ์ +กรภุม +กรม +กรมชลประทาน +กรมท่า +กรมธรรม์ +กรมนา +กรมวัง +กรร +กรรกง +กรรกฎ +กรรกศ +กรรชิง +กรรชิด +กรรฐา +กรรฐ์ +กรรณ +กรรณยุคล +กรรณา +กรรณิกา +กรรณิการ์ +กรรตุ +กรรบาสิก +กรรบิด +กรรบูร +กรรปุร +กรรปุระ +กรรพุม +กรรม +กรรมกร +กรรมกรณ์ +กรรมการ +กรรมชวาต +กรรมฐาน +กรรมบถ +กรรมพันธุ์ +กรรมวิธี +กรรมสิทธิ์ +กรรมาชีพ +กรรมาธิการ +กรรมาร +กรรมเวร +กรรลี +กรรลึง +กรรสะ +กรรหาย +กรรเกด +กรรเจียก +กรรเชอ +กรรเชียง +กรรเอา +กรรแซง +กรรแทก +กรรแทรก +กรรแสง +กรรโชก +กรรโหย +กรรไกร +กรรไตร +กรวด +กรวน +กรวบ +กรวม +กรวย +กรวยบ้าน +กรวยเชิง +กรวิก +กรสุทธิ์ +กรอ +กรอก +กรอกแกรก +กรอง +กรองกรอย +กรอด +กรอบ +กรอบแกรบ +กรอม +กรอสซูลาไรต์ +กระ +กระกร +กระกรี๊ด +กระกรุ่น +กระกวด +กระกอง +กระกัด +กระกี้ +กระกูล +กระคน +กระคาย +กระคุก +กระงกกระเงิ่น +กระงอด +กระง่องกระแง่ง +กระง่อนกระแง่น +กระจก +กระจกตา +กระจกนูน +กระจกเงา +กระจกเว้า +กระจง +กระจร +กระจอ +กระจอก +กระจองอแง +กระจอนหู +กระจะ +กระจัก +กระจัง +กระจัด +กระจัดกระจาย +กระจับ +กระจับบก +กระจับปิ้ง +กระจับปี่ +กระจาด +กระจาน +กระจาบ +กระจาม +กระจาย +กระจาว +กระจิก +กระจิด +กระจิบ +กระจิริด +กระจิ๋ว +กระจี้ +กระจี๋ +กระจุก +กระจุบ +กระจุบกระจิบ +กระจุย +กระจุ๋งกระจิ๋ง +กระจุ๋มกระจิ๋ม +กระจูด +กระจู้ +กระจู๋กระจี๋ +กระจ่า +กระจ่าง +กระจ้อน +กระฉง +กระฉอก +กระฉับกระเฉง +กระฉีก +กระฉูด +กระฉ่อน +กระชง +กระชวย +กระชอก +กระชอน +กระชอม +กระชัง +กระชับ +กระชั้น +กระชาก +กระชาย +กระชิง +กระชิด +กระชุ +กระชุก +กระชุ่มกระชวย +กระซวย +กระซับ +กระซาบ +กระซิก +กระซิบ +กระซี้ +กระซุง +กระซุบกระซิบ +กระซู่ +กระซ้อ +กระฎี +กระฎุมพี +กระดก +กระดวง +กระดวน +กระดอ +กระดอง +กระดอน +กระดอม +กระดังงา +กระดาก +กระดางลาง +กระดาด +กระดาน +กระดานพน +กระดานโต้คลื่น +กระดาษ +กระดิก +กระดิบ +กระดิ่ง +กระดี่ +กระดึง +กระดืบ +กระดุ +กระดุกกระดิก +กระดุบ +กระดุม +กระดูก +กระดูกกบ +กระดูกดำ +กระด้ง +กระด้าง +กระตรำ +กระตัก +กระตั้ว +กระตาก +กระติก +กระติบ +กระติ๊ด +กระตือรือร้น +กระตุก +กระตุ้งกระติ้ง +กระตุ้น +กระตูบ +กระต่องกระแต่ง +กระต่าย +กระต้วมกระเตี้ยม +กระต้อ +กระต๊อบ +กระถด +กระถอบ +กระถาง +กระถิก +กระถิน +กระทก +กระทง +กระทงลาย +กระทด +กระทบ +กระทรวง +กระทวย +กระทอก +กระทะ +กระทัน +กระทั่ง +กระทา +กระทาชาย +กระทาย +กระทายสี +กระทาหอง +กระทำ +กระทิง +กระทึง +กระทืบ +กระทุ +กระทุง +กระทุ่มเสือปลา +กระทุ่มแบน +กระทุ้ง +กระทู้ +กระท่อม +กระท้อน +กระท้อมกระแท้ม +กระนก +กระนวน +กระนั้น +กระนี้ +กระบก +กระบกคาย +กระบถ +กระบวน +กระบวนการ +กระบวย +กระบวร +กระบอก +กระบอง +กระบะ +กระบัด +กระบัท +กระบาก +กระบาย +กระบาล +กระบิ +กระบิด +กระบิล +กระบี่ +กระบือ +กระบุง +กระบุม +กระบุรี +กระบูน +กระบูร +กระบ่า +กระปรี้กระเปร่า +กระปั้วกระเปี้ย +กระปำ +กระปุก +กระป่ำ +กระป้อกระแป้ +กระป๋อง +กระผม +กระผลีกระผลาม +กระผาน +กระผีก +กระพรวน +กระพริ้ม +กระพอก +กระพอง +กระพัก +กระพัง +กระพังโหม +กระพัด +กระพัน +กระพา +กระพาก +กระพี้ +กระพือ +กระพุ่ม +กระพุ้ง +กระฟัดกระเฟียด +กระฟาย +กระฟูมกระฟาย +กระมล +กระมอบ +กระมอมกระแมม +กระมัง +กระมัน +กระมึน +กระมุท +กระยา +กระยาง +กระยาด +กระยาหงัน +กระยาหาร +กระยาเสวย +กระยิก +กระยึกกระยือ +กระย่อง +กระย่อน +กระรอก +กระลด +กระลบ +กระลอก +กระลอม +กระลัด +กระลับ +กระลัมพร +กระลา +กระลาการ +กระลำ +กระลำพัก +กระลำพุก +กระลิง +กระลี +กระลึง +กระลุมพู +กระลูน +กระลู่น์ +กระวน +กระวนกระวาย +กระวัด +กระวาด +กระวาน +กระวาย +กระวิน +กระวี +กระวีกระวาด +กระว่า +กระศก +กระศัย +กระษัตรี +กระษัย +กระษาปณ์ +กระษิร +กระสง +กระสน +กระสบ +กระสม +กระสร้อย +กระสวน +กระสวย +กระสอบ +กระสะ +กระสัง +กระสัน +กระสา +กระสานติ์ +กระสาบ +กระสาย +กระสินธุ +กระสือ +กระสุงกระสิง +กระสุน +กระสูบ +กระส่าย +กระหง่อง +กระหน +กระหนก +กระหนาบ +กระหน่อง +กระหน่ำ +กระหมั่ง +กระหมิบ +กระหมุ่น +กระหม่อม +กระหยด +กระหยบ +กระหยะ +กระหยิ่ม +กระหย่อน +กระหย่อม +กระหริ่ง +กระหริ่ม +กระหวน +กระหอง +กระหัง +กระหัด +กระหาง +กระหาย +กระหึม +กระหึ่ม +กระอวล +กระออบ +กระออม +กระอัก +กระอักกระอ่วน +กระอาน +กระอิด +กระอึก +กระอึด +กระอืด +กระอุ +กระอุก +กระอ้า +กระเกริก +กระเง้ากระงอด +กระเจา +กระเจิง +กระเจิดกระเจิง +กระเจียว +กระเจี๊ยบ +กระเจี๊ยว +กระเจ่า +กระเฉก +กระเฉง +กระเฉด +กระเชอ +กระเชา +กระเชียง +กระเช้า +กระเซ +กระเซอ +กระเซิง +กระเซ็น +กระเซ้า +กระเดก +กระเดิด +กระเดียด +กระเดียม +กระเดี้ย +กระเดือก +กระเดื่อง +กระเด็น +กระเด้ง +กระเด้า +กระเตง +กระเตาะ +กระเตื้อง +กระเต็น +กระเถิบ +กระเทียบ +กระเทียม +กระเทือน +กระเท่ +กระเบง +กระเบญ +กระเบน +กระเบา +กระเบียด +กระเบียน +กระเบี้ย +กระเบื้อง +กระเปา +กระเปาะ +กระเปี้ย +กระเป๋า +กระเพลิศ +กระเพาะ +กระเพื่อม +กระเฟียด +กระเย้อกระแหย่ง +กระเรียน +กระเลียด +กระเลือก +กระเวน +กระเษม +กระเษมสานต์ +กระเษียร +กระเสด +กระเสียน +กระเสียร +กระเสือก +กระเส็นกระสาย +กระเส่า +กระเหน็จ +กระเหม็ดกระแหม่ +กระเหม่น +กระเหม่า +กระเหว่า +กระเอบ +กระเอา +กระแจะ +กระแฉก +กระแชง +กระแชะ +กระแซ +กระแซะ +กระแดะ +กระแต +กระแตวับ +กระแตะ +กระแทก +กระแทะ +กระแบก +กระแบกงา +กระแบะ +กระแบ่ +กระแปด +กระแป้ +กระแพง +กระแมม +กระแวน +กระแส +กระแสง +กระแสตรง +กระแสสลับ +กระแสะ +กระแห +กระแหน +กระแหย่ง +กระแหร่ม +กระแหล่ง +กระแอก +กระแอด +กระแอบ +กระแอม +กระแอ้ +กระโงก +กระโจน +กระโจม +กระโจมทอง +กระโจมอก +กระโฉกกระเฉก +กระโฉม +กระโชก +กระโดก +กระโดกกระเดก +กระโดง +กระโดด +กระโดน +กระโตน +กระโถน +กระโบม +กระโปก +กระโปรง +กระโรก +กระโลง +กระโสง +กระโหม +กระโหย +กระโหย่ง +กระโห้ +กระใด +กระได +กระไดลิง +กระไตร +กระไทชาย +กระไน +กระไร +กระไส +กระไอ +กรัก +กรักขี +กรัง +กรัณฑ +กรัณฑ์ +กรัณย์ +กรัน +กรับ +กรัม +กราก +กราง +กราด +กราน +กราบ +กราบทูล +กราฟ +กราฟฟิก +กราฟิก +กราฟิค +กราม +กรามช้าง +กราย +กราล +กราว +กราวด่าง +กราสิก +กรำ +กริก +กริกกริว +กริงกริว +กริช +กริณี +กริด +กริตย +กริน +กรินี +กริบ +กริม +กริยา +กริว +กริ่ง +กริ่ม +กริ้ว +กริ๊ก +กริ๊ง +กรี +กรีก +กรีซ +กรีฑา +กรีด +กรีดกราด +กรีดกราย +กรีธา +กรีนแลนด์ +กรีษ +กรีส +กรี๊ด +กรึง +กรุ +กรุก +กรุกกรู๊ +กรุง +กรุงธน +กรุงธนบุรี +กรุงพาลี +กรุงเกษม +กรุงเขมา +กรุงเทพ +กรุงเทพกรีฑา +กรุงเทพคริสเตียน +กรุงเทพมหานคร +กรุงเทพวิลเลจ +กรุงเทพฯ +กรุณ +กรุณา +กรุณาธิคุณ +กรุณาพิทักษ์ +กรุน +กรุบ +กรุบกริบ +กรุย +กรุ่น +กรุ่ม +กรุ้มกริ่ม +กรุ๊ป +กรู +กรูด +กรูม +กรู่ม +กรเกษม +กร็อกกร๋อย +กร่อน +กร่อม +กร่อย +กร่าง +กร่าย +กร่ำ +กร้วม +กร้อ +กร้าน +กร้าว +กฤช +กฤด +กฤดา +กฤดาธ +กฤดิ +กฤดีกา +กฤตกา +กฤตย +กฤตยา +กฤติกา +กฤษฎา +กฤษฎาธาร +กฤษฎี +กฤษฎีกา +กฤษฏี +กฤษณะวิทยา +กฤษณา +กล +กลด +กลบ +กลม +กลมกลืน +กลมกล่อม +กลมดิก +กลยุทธ์ +กลวง +กลวม +กลวิธี +กลศาสตร์ +กลหาย +กลอก +กลอง +กลอน +กลอย +กลอุปกรณ์ +กลอโคดอต +กลอโคเฟน +กลอโคไนต์ +กลัก +กลัง +กลัด +กลัดกลุ้ม +กลันตัน +กลันท +กลับ +กลับกลอก +กลับวิทย์ +กลัมพก +กลัมพร +กลัว +กลั่น +กลั้น +กลั้ว +กลาก +กลาง +กลาด +กลาดเกลื่อน +กลาบาต +กลาป +กลาย +กลายกลอก +กลาโหม +กลิงค์ +กลิ่ง +กลิ่น +กลิ้ง +กลิ้งกลอก +กลิ้งเกลือก +กลิ้ม +กลี +กลีบ +กลียุค +กลี่ +กลึง +กลึงค์ +กลึ้ง +กลืน +กลุ่ม +กลุ้ม +กลุ้มรุม +กลูทาเมต +กลูน +กลูโคส +กลู่ +กลเม็ด +กลเหย +กลไก +กล่น +กล่อง +กล่อน +กล่อม +กล่อมจิตต์ +กล่าว +กล่ำ +กล้วย +กล้วยน้ำไท +กล้วยไม้ +กล้อ +กล้อง +กล้องจุลทรรศน์ +กล้องระดับ +กล้องวัดมุม +กล้องสำรวจ +กล้องโทรทรรศน์ +กล้อน +กล้อมแกล้ม +กล้า +กล้าม +กล้าย +กล้ำ +กล้ำกราย +กล้ำกลืน +กวด +กวดขัน +กวน +กวนอู +กวม +กวย +กวยจั๊บ +กวยจี๊ +กวะ +กวะแกว่ง +กวัก +กวัด +กวา +กวาง +กวางชะมด +กวางตุ้ง +กวางผา +กวาด +กวาดตา +กวาดต้อน +กวาดล้าง +กวาน +กวาวเครือ +กวิน +กวี +กว่า +กว่าง +กว้า +กว้าง +กว้าน +กว้าว +กว๊าน +กษณะ +กษมา +กษัตร +กษัตรา +กษัตริย์ +กษัตรี +กษัตรีย์ +กษัย +กษัยการ +กษาปณ์ +กษิดิ +กษีณาศรพ +กษีร +กษีรธารา +กษีระ +กษีรามพุ +กษีรารณพ +กสานติ์ +กสิ +กสิกร +กสิกรรม +กสิณ +กหังปายา +กหาปณะ +กอ +กอก +กอง +กองกอย +กองทัพ +กองทุน +กองพล +กองพัน +กองแก้ว +กอซ +กอด +กอดหอบ +กอดอก +กอตแลนด์ +กอบ +กอบนาง +กอบโกย +กอปร +กอมก้อ +กอย +กอริลลา +กอล์ฟ +กอเอี๊ยะ +กอแก +กอแหละ +กะ +กะกัง +กะกึก +กะก่อง +กะจัง +กะชะ +กะชัง +กะชิง +กะชึ่กกะชั่ก +กะซวก +กะซี่ +กะซ้าหอย +กะดก +กะดง +กะดอก +กะดะ +กะดังบาย +กะดัด +กะดี +กะดี่ +กะดุ้ง +กะด้าง +กะตรุด +กะตอก +กะตัก +กะตัง +กะตีบ +กะตุด +กะตุมู +กะตุ๊ก +กะต่อย +กะต่า +กะต้ำ +กะต๊าก +กะถัว +กะทกรก +กะทอ +กะทัง +กะทังหัน +กะทัดรัด +กะทัน +กะทันหัน +กะทับ +กะทำ +กะทิ +กะทือ +กะทุน +กะทู้ +กะนวล +กะนัด +กะบะ +กะบัง +กะบังลม +กะบั้ง +กะบิ +กะบิล +กะบิ้ง +กะบุด +กะปง +กะปริดกะปรอย +กะปริบ +กะปวกกะเปียก +กะปอม +กะปอมขาง +กะปะ +กะปั่น +กะปิ +กะปิตัน +กะปู +กะปูด +กะพง +กะพริบ +กะพรุน +กะพล่องกะแพล่ง +กะพล้อ +กะพัน +กะพ้อ +กะระตะ +กะรัง +กะรัต +กะราง +กะริง +กะรุน +กะรุ่งกะริ่ง +กะลวย +กะลอ +กะละปังหา +กะละมัง +กะละออม +กะละแม +กะลัน +กะลา +กะลาซอ +กะลาสี +กะลำพอ +กะลิง +กะลิอ่อง +กะลิ้มกะเหลี่ย +กะล่อน +กะล่อมกะแล่ม +กะล่อยกะหลิบ +กะวะ +กะส้าหอย +กะหนะ +กะหนุงกะหนิง +กะหน็องกะแหน็ง +กะหมอก +กะหรอด +กะหราน +กะหรี่ +กะหร็อมกะแหร็ม +กะหร่อง +กะหลาป๋า +กะหลี่ +กะหลุกกะหลิก +กะหล่ำ +กะหำ +กะหือ +กะหูด +กะอวม +กะออม +กะอาน +กะอาม +กะอิด +กะอุบ +กะเกาะ +กะเดก +กะเดี๋ยว +กะเตก +กะเตง +กะเตงเ +กะเตงเรง +กะเทย +กะเทาะ +กะเบือ +กะเบ้อ +กะเปอร์ +กะเปะ +กะเปิ๊บกะป๊าบ +กะเผลก +กะเผ่น +กะเพรา +กะเมีย +กะเม็ง +กะเร +กะเรี่ยกะราด +กะเร่อ +กะเลิด +กะเล็ง +กะเล่อกะล่า +กะเหรี่ยง +กะเหลาะเปาะ +กะเอว +กะแจะ +กะแช่ +กะแตว +กะแต่ว +กะแทน +กะแท่ง +กะแท้ +กะแปะ +กะแป้น +กะแล +กะแหยก +กะแหะ +กะแอ +กะแอน +กะโกระ +กะโซ่ +กะโซ้ +กะโตงกะเตง +กะโต้งโห่ง +กะโต๊ก +กะโบโล +กะโปรง +กะโปโล +กะโผลกกะเผลก +กะโรกะเร +กะโลง +กะโล่ +กะโหลก +กะโห้ +กะได +กะไหล่ +กัก +กักกรา +กักกัน +กักขฬะ +กักขัง +กักตัว +กักตุน +กัง +กังก้า +กังขา +กังฉิน +กังต็อก +กังฟู +กังวล +กังวาน +กังวาล +กังสดาล +กังหัน +กังเกียง +กังเฉิน +กังเวียน +กังไส +กัจฉปะ +กัจฉะ +กัจฉา +กัญ +กัญจุก +กัญจุกะ +กัญชา +กัญญา +กัฐ +กัณฏกะ +กัณฐ +กัณฐก +กัณฐชะ +กัณฐะ +กัณฐัศ +กัณฐา +กัณฐี +กัณฐ์ +กัณฑ์ +กัณณ์ +กัณห +กัณหธรรม +กัด +กัดกร่อน +กัดฟัน +กัดมันไดต์ +กัตติกมาส +กัตตุ +กัตตุวาจก +กัตตุสัญญา +กัตรา +กัทลี +กัน +กันกง +กันการ์ +กันชน +กันชิง +กันชีพ +กันดอง +กันดาร +กันดาล +กันตะยาราม +กันตัง +กันตัว +กันต์ +กันทร +กันทรลักษ์ +กันทรวิชัย +กันทรากร +กันทรารมย์ +กันทะ +กันท่า +กันพิรุณ +กันภัย +กันยา +กันยายน +กันย์ +กันลง +กันลอง +กันลึง +กันสาด +กันเชอ +กันเมียง +กันเอง +กันเอา +กันแซง +กันแดด +กันแสง +กันไกร +กันได +กันไตร +กับ +กับข้าว +กับบุเรศ +กับแกล้ม +กับแก้ +กัป +กัปตัน +กัปนก +กัปบาสิก +กัปประ +กัปปะระ +กัปปาสิก +กัปปิย +กัปปิยกัณฑ์ +กัปปิยการก +กัมบน +กัมปนะ +กัมปนาการ +กัมปนาท +กัมประโด +กัมปี +กัมพล +กัมพุช +กัมพุม +กัมพู +กัมพูชา +กัมมัชวาต +กัมมันตภาพรังสี +กัมมันตรังสี +กัมมาร +กัมลาศ +กัมโพช +กัยวิกัย +กัลชาญ +กัลบก +กัลป +กัลปนา +กัลปพฤกษ์ +กัลปังหา +กัลปาวสาน +กัลปิต +กัลป์ +กัลยา +กัลยาณ +กัลยาณมิตร +กัลยาณี +กัลยาณไมตรี +กัลหาย +กัลออม +กัลเอา +กัลโช +กัลโหย +กัวดัลคะแนล +กัวลาลัมเปอร์ +กัวเดอลูป +กัวเตมาลา +กัวเตมาลาซิตี +กัศมล +กัสสะ +กั่น +กั้ง +กั้น +กั้นหยั่น +กั๊ก +กา +กาก +กากณีก +กากบาท +กากะเยีย +กากี +กาง +กางของ +กางเกง +กางเกียง +กางเขน +กางเวียน +กาชาด +กาซะลอง +กาซันเรตโต +กาญจนดิษฐ์ +กาญจนบุรี +กาญจนา +กาญจนาคม +กาฐ +กาฐมัณฑุ +กาด +กาตมานดุ +กาน +กานดา +กานต์ +กานท์ +กานน +กานพลู +กานา +กาน้า +กาน้ำ +กาบ +กาบกี้ +กาบบัว +กาบหอย +กาบอง +กาบะ +กาบู +กาบูร +กาบเชิง +กาบเดียว +กาปุริส +กาฝาก +กาพย์ +กาม +กามคุณ +กามตัณหา +กามน +กามภพ +กามราค +กามวิตก +กามวิตถาร +กามัช +กามา +กามาทีนพ +กามาพจร +กามารมณ์ +กามินี +กามิศ +กามเทพ +กามโรค +กาย +กายกรรม +กายทวาร +กายพันธน์ +กายภาพ +กายภาพบำบัด +กายวิภาค +กายวิภาคศาสตร์ +กายสิทธิ์ +กายาพยพ +การ +การก +การกลั่นทำลาย +การขนส่งมวลชน +การณ์ +การนำ +การบินไทย +การบูร +การบ้าน +การพา +การย์ +การวิก +การะบุหนิง +การะเกด +การัญศึกษา +การัณย์ +การันต์ +การาจ +การุญ +การุณย์ +การเกษตร +การเต +การเปรียญ +การเมือง +การเรือน +การเวก +การแผ่รังสี +การโน้มถ่วง +การ์ด +การ์ดีเนีย +การ์ตูน +การ์เดน +การ์เนต +การ์เนียไรต์ +การ์เมนท์ +กาล +กาลกรรณี +กาลกิณี +กาลกิริยา +กาละมัง +กาละแม +กาลักน้ำ +กาลัญญุตา +กาลัญญู +กาลัด +กาลา +กาลาปัน +กาลาปากอส +กาลิก +กาลี +กาลีนา +กาลเทศะ +กาลโยค +กาว +กาววาว +กาวาง +กาศิก +กาษฐะ +กาษา +กาสร +กาสสัทโท +กาสะ +กาสัก +กาสัทโท +กาสา +กาสามปีก +กาสาร +กาสาว +กาสาวพัสตร์ +กาสิโน +กาหยู +กาหล +กาหลง +กาหลัง +กาหลา +กาหลิบ +กาหัก +กาห์ไนต์ +กาฬ +กาฬพฤกษ์ +กาฬสินธุ์ +กาฬาวก +กาฬโรค +กาฮัง +กาเปี้ยด +กาเฟอีน +กาเมศ +กาเมสุมิจฉาจาร +กาเยน +กาเหว่า +กาแฟ +กาแลกไซต์ +กาแล็กซี +กาแล็กโทส +กาแวน +กาโมทย +กาไหล่ +กำ +กำกวม +กำกัด +กำกับ +กำกูน +กำคูน +กำจร +กำจัด +กำจาย +กำชับ +กำชำ +กำซาบ +กำซำ +กำดัด +กำดาล +กำด้น +กำตัด +กำตาก +กำถั่ว +กำทวน +กำธร +กำนล +กำนัด +กำนัน +กำนัล +กำบด +กำบน +กำบัง +กำบัด +กำบิด +กำปอ +กำปั่น +กำปั้น +กำผลา +กำพง +กำพด +กำพต +กำพราก +กำพร้า +กำพวด +กำพอง +กำพืด +กำพู +กำภู +กำมพฤกษ์ +กำมลาศน์ +กำมะถัน +กำมะลอ +กำมะหยี่ +กำมะหริด +กำมังละการ +กำมังวิลิต +กำมา +กำมเลศ +กำยาน +กำยำ +กำรอ +กำราก +กำราบ +กำราล +กำรู +กำลอง +กำลัง +กำลังวังชา +กำลังเทียน +กำลุง +กำลูน +กำสรด +กำสรวล +กำหนด +กำหนดการ +กำหนัด +กำเกรียก +กำเดา +กำเดาะ +กำเนิด +กำเบ้อ +กำเริบ +กำเลา +กำเลาะ +กำเสาะ +กำเหน็จ +กำเหลิง +กำแพง +กำแพงขาว +กำแพงเพชร +กำแพงแสน +กำแสง +กำแหง +กำโชก +กำโบล +กำไร +กำไล +กิก +กิกะ +กิกะไบต์ +กิกไคต์ +กิงบุรุษ +กิจ +กิจกรรม +กิจการ +กิจจะ +กิจจะลักษณะ +กิจจา +กิจจานุกิจ +กิจวัตร +กิจสังคม +กิดาหยัน +กิตติ +กิตติกรรมประกาศ +กิตติคุณ +กิตติมศักดิ์ +กิตติวานิช +กิตติศัพท์ +กิติขจร +กิติพาณิชย์ +กิน +กินชัน +กินดิบ +กินนร +กินปลี +กินริน +กินรี +กินี +กิบบ์ไซต์ +กิฟท์ +กิมิชาติ +กิมิวิทยา +กิริณี +กิริยา +กิลเดอร์ +กิลเบอร์ต +กิอานา +กิเลน +กิเลส +กิเลสมาร +กิโซ +กิโมโน +กิโยตีน +กิโล +กิโลกรัม +กิโลมกะ +กิโลลิตร +กิโลเมตร +กิโลเฮิรตซ์ +กิโลไซเกิล +กิ่ง +กิ่งก้อย +กิ่งจันทร์ +กิ่งเพชร +กิ่ว +กิ้งกือ +กิ้งก่า +กิ้งโครง +กิ๊ก +กิ๊บ +กิ๋ว +กิ๋วๆ +กีฎวิทยา +กีฏ +กีฏวิทยา +กีด +กีดกัน +กีดกั้น +กีดขวาง +กีตาร์ +กีนีบิสซู +กีบ +กีบแรด +กีรติ +กีวี +กีฬา +กี่ +กี้ +กี๋ +กึก +กึกกัก +กึกกือ +กึกก้อง +กึกถอง +กึง +กึงกัง +กึ่ง +กึ่งกลาง +กึ๋น +กุ +กุก +กุกกัก +กุกกุฏ +กุกกุร +กุกรรม +กุกะ +กุก่อง +กุงอน +กุงาน +กุจี +กุฉินารายน์ +กุญชร +กุญธร +กุญแจ +กุญแจประจำหลัก +กุญแจมือ +กุญแจเสียง +กุฎ +กุฎิเจริญพาสน์ +กุฎี +กุฎุมพี +กุฏฐัง +กุฏรัง +กุฏิ +กุฏไต +กุณฑล +กุณฑี +กุณฑ์ +กุณาล +กุณิ +กุณโฑ +กุด +กุดข้าวปุ้น +กุดจับ +กุดชุม +กุดบาก +กุดัง +กุดั่น +กุดา +กุน +กุนซือ +กุนที +กุนเชียง +กุบ +กุบกับ +กุม +กุมฝอย +กุมภ +กุมภการ +กุมภนิยา +กุมภวาปี +กุมภัณฑ์ +กุมภา +กุมภาพันธ์ +กุมภิล +กุมภีล์ +กุมภ์ +กุมลัคน์ +กุมาร +กุมารา +กุมารี +กุมุท +กุมเหง +กุย +กุยช่าย +กุยบุรี +กุยเฮง +กุระ +กุรุง +กุรุพินท์ +กุล +กุลธิดา +กุลบดี +กุลบุตร +กุลสตรี +กุลา +กุลาดำ +กุลาตีอก +กุลาหล +กุลี +กุลีก +กุลีกุจอ +กุศราช +กุศล +กุศลิน +กุศโลบาย +กุสล +กุสุม +กุสุมา +กุสุมาลย์ +กุหนี +กุหนุง +กุหร่า +กุหลาบ +กุหล่า +กุเรปัน +กุเรา +กุเลา +กุเวร +กุแล +กุแหละ +กุโงก +กุโนกามอ +กุไล +กุ่ม +กุ้ง +กุ้งหลวง +กุ้งเต้น +กุ้งแห +กุ้งแห้ง +กุ๊ก +กุ๊กกิ๊ก +กุ๊น +กุ๊ย +กุ๋ย +กู +กูกวน +กูฎ +กูฎา +กูฏ +กูณฑ์ +กูด +กูน +กูบ +กูปรี +กูรม +กูรำ +กูล +กู่ +กู้ +กู้ภัย +กู๊ก +กเบนทร์ +กเรณุ +กเรณุกา +กเรนทร +กเลวระ +กเฬวราก +กโบร +กโบระ +กโบล +ก็ +ก็ตาม +ก็อปปี้ +ก็ได้ +ก่ง +ก่น +ก่อ +ก่อกวน +ก่อการ +ก่อง +ก่อน +ก่อสร้าง +ก่าน +ก่าย +ก่ำ +ก่ำต้น +ก้ง +ก้งโค้ง +ก้น +ก้นกบ +ก้นขบ +ก้นปล่อง +ก้นหอย +ก้ม +ก้อ +ก้อง +ก้อน +ก้อม +ก้อย +ก้อร่อ +ก้อร่อก้อติก +ก้าง +ก้าน +ก้านคอ +ก้าบ +ก้าบๆ +ก้าม +ก้ามกราม +ก้ามกุ้ง +ก้ามปู +ก้าว +ก้าวก่าย +ก้าวร้าว +ก้าวหน้า +ก้ำ +ก้ำกึ่ง +ก้ำเกิน +ก๊ก +ก๊ง +ก๊อ +ก๊อก +ก๊อบปี้ +ก๊อปปี้ +ก๊าช +ก๊าซ +ก๊าซน้ำตา +ก๊าซเฉื่อย +ก๊าซไข่เน่า +ก๊าด +ก๊าน +ก๋ง +ก๋วยเตี๋ยว +ก๋อย +ก๋า +ก๋ากั่น +ก๋าว +ขง +ขงจื๊อ +ขงเบ้ง +ขจร +ขจรจบ +ขจรศึกษา +ขจอก +ขจัด +ขจัดขจาย +ขจาย +ขจาว +ขจิต +ขจิริด +ขจี +ขจุย +ขจ่าง +ขณะ +ขด +ขดถวาย +ขดาน +ขทิง +ขทึง +ขน +ขนง +ขนงเนื้อ +ขนด +ขนตา +ขนน +ขนบ +ขนบธรรมเนียม +ขนบประเพณี +ขนม +ขนมครก +ขนมจีน +ขนมปัง +ขนมอบ +ขนมเปี๊ยะ +ขนลุก +ขนส่ง +ขนหนู +ขนหยอง +ขนอง +ขนอน +ขนอบ +ขนอม +ขนอุย +ขนัด +ขนัน +ขนาก +ขนาง +ขนาด +ขนาน +ขนานยนต์ +ขนาบ +ขนาย +ขนำ +ขนิษฐ +ขนิษฐภคินี +ขนิษฐภาตา +ขนิษฐา +ขนิษฐาธิราช +ขนุน +ขนุนนก +ขนเพชร +ขนแมว +ขบ +ขบขัน +ขบคิด +ขบฉัน +ขบถ +ขบวน +ขบวนการ +ขบูร +ขบเคี้ยว +ขบเผาะ +ขม +ขมขื่น +ขมวด +ขมวดยา +ขมวน +ขมหิน +ขมอง +ขมอย +ขมัง +ขมับ +ขมา +ขมิบ +ขมิ้น +ขมิ้นขาว +ขมีขมัน +ขมึง +ขมึงทึง +ขมุ +ขมุกขมอม +ขมุกขมัว +ขมุบ +ขมุบขมิบ +ขมุม +ขม่อม +ขม้ำ +ขยด +ขยอก +ขยอง +ขยะ +ขยะแขยง +ขยัก +ขยักขย้อน +ขยัน +ขยับ +ขยับเขยื้อน +ขยั้น +ขยาด +ขยาบ +ขยาย +ขยำ +ขยิก +ขยิบ +ขยิ่ม +ขยี้ +ขยุกขยิก +ขยุกขยุย +ขยุบ +ขยุบขยิบ +ขยุม +ขยุย +ขยุ้ม +ขย่ม +ขย่อน +ขย้อน +ขย้ำ +ขรม +ขรรค +ขรรค์ +ขรัว +ขริบ +ขรี +ขรึม +ขรุขระ +ขลบ +ขลม +ขลวน +ขลัง +ขลับ +ขลา +ขลาด +ขลาย +ขลิบ +ขลึง +ขลุก +ขลุกขลัก +ขลุกขลิก +ขลุง +ขลุบ +ขลุม +ขลุ่ย +ขลู +ขลู่ +ขล้ง +ขวง +ขวด +ขวดโหล +ขวน +ขวนขวาย +ขวนใจ +ขวบ +ขวย +ขวยเขิน +ขวยใจ +ขวักไขว่ +ขวัญ +ขวัญดี +ขวัญตา +ขวัญทิพย์ +ขวัญใจ +ขวัด +ขวับ +ขวับเขวียว +ขวั้น +ขวา +ขวาก +ขวาง +ขวาด +ขวาน +ขวายขวน +ขวาว +ขวิด +ขว้าง +ขว้าว +ขษณะ +ขษัย +ขษีร +ขอ +ขอก +ของ +ของกอง +ของกิน +ของคาว +ของชำ +ของดี +ของนอก +ของลับ +ของวัด +ของสด +ของเหลว +ของแข็ง +ของโจร +ของใช้ +ของไหล +ของ้อ +ของ้าว +ขอฉาย +ขอช้าง +ขอด +ขอตัว +ขอทอง +ขอทาน +ขอที +ขอน +ขอนดอก +ขอนสัก +ขอนแก่น +ขอบ +ขอบข่าย +ขอบคุณ +ขอบพระคุณ +ขอบพระทัย +ขอบเขต +ขอบใจ +ขอบไร +ขอม +ขอยืม +ขอรับ +ขอร้อง +ขอสับ +ขออภัย +ขอเดชะ +ขอเฝ้า +ขอแกว +ขอแรง +ขอโทษ +ขะข่ำ +ขะนาน +ขะมอมขะแมม +ขะมักเขม้น +ขะมุกขะมอม +ขะยิก +ขะยุก +ขะเน็ด +ขะเย้อแขย่ง +ขะแข่น +ขะแจะ +ขะแถก +ขะแมซอ +ขะแมธม +ขะแยะ +ขัค +ขัง +ขังขอก +ขังข้อ +ขัช +ขัชกะ +ขัณฑ +ขัณฑสกร +ขัณฑสีมา +ขัด +ขัดขืน +ขัดข้อง +ขัดคอ +ขัดจังหวะ +ขัดดอก +ขัดตา +ขัดบท +ขัดมอน +ขัดยอก +ขัดลาภ +ขัดสน +ขัดหู +ขัดเกลา +ขัดเคือง +ขัดเบา +ขัดแตะ +ขัดใจ +ขัตติย +ขัตติยมานะ +ขัตติยะ +ขัน +ขันชะเนาะ +ขันติ +ขันต่อ +ขันทอง +ขันที +ขันธสิทธิ์ +ขันธ์ +ขันสมอ +ขันสู้ +ขันหมาก +ขันเหม +ขันโตก +ขับ +ขับขัน +ขับขี่ +ขับซอ +ขับพล +ขับเคี่ยว +ขับไม้ +ขัย +ขัว +ขั้น +ขั้ว +ขั้วลบ +ขา +ขาก +ขากบ +ขากอม +ขาก๊วย +ขาง +ขางดัง +ขางแดง +ขาจร +ขาณุ +ขาณุวรลักษบุรี +ขาด +ขาดกัน +ขาดคำ +ขาดค่า +ขาดตอน +ขาดตัว +ขาดทุน +ขาดปาก +ขาดมือ +ขาดลอย +ขาดแคลน +ขาดใจ +ขาทนียะ +ขาทราย +ขาน +ขานนาค +ขานรับ +ขานาง +ขานไข +ขาบ +ขาพับ +ขาม +ขามทะเลสอ +ขามสะแกแสง +ขาม้า +ขาย +ขายขาด +ขายตัว +ขายส่ง +ขาล +ขาว +ขาวจีบ +ขาวพวง +ขาวม้า +ขาหมา +ขาหยั่ง +ขาอ่อน +ขาไก่ +ขำ +ขิก +ขิกๆ +ขิง +ขิณ +ขิปสัทโท +ขิม +ขิ่ง +ขีณะ +ขีณาสพ +ขีด +ขีปนาวุธ +ขีปนาวุธนำวิถี +ขีร +ขี่ +ขี้ +ขี้กบ +ขี้กา +ขี้ขม +ขี้ขวง +ขี้ขุย +ขี้ข้า +ขี้คุก +ขี้จาบ +ขี้ตด +ขี้ตืด +ขี้ถัง +ขี้ทา +ขี้ทูด +ขี้นก +ขี้ปาก +ขี้ผง +ขี้มอด +ขี้มูก +ขี้ม้า +ขี้ยอก +ขี้ยา +ขี้ลม +ขี้ลอก +ขี้ลีบ +ขี้สูด +ขี้หนู +ขี้หมา +ขี้อ้น +ขี้เซา +ขี้เทา +ขี้เป้ +ขี้เมฆ +ขี้เสือใหญ่ +ขี้เหร่ +ขี้แต้ +ขี้แมว +ขี้แย +ขี้แรด +ขี้โล้ +ขี้ไซ้ +ขี้ไต้ +ขี้ไถ +ขึง +ขึงขัง +ขึงตา +ขึงตึง +ขึงพืด +ขึงอูด +ขึ้ง +ขึ้น +ขึ้นฉ่าย +ขึ้นหา +ขึ้นใจ +ขืน +ขืนใจ +ขื่น +ขื่นขม +ขื่อ +ขื่อผี +ขุก +ขุขันธ์ +ขุด +ขุน +ขุนทอง +ขุนนาง +ขุนน้ำ +ขุนบาล +ขุนพล +ขุนยวม +ขุนวิจิตร +ขุนศาล +ขุนศึก +ขุนหาญ +ขุนเขา +ขุนแผน +ขุม +ขุมทรัพย์ +ขุมนรก +ขุย +ขุยอินทรีย์ +ขุยไผ่ +ขุหนุง +ขุ่น +ขุ่นใจ +ขู +ขูด +ขูดรีด +ขู่ +ขู่เข็ญ +ขเจา +ขโมย +ข่ม +ข่มขี่ +ข่มขืน +ข่มขู่ +ข่มนาม +ข่มหมู +ข่มเหง +ข่วง +ข่วน +ข่อ +ข่อน +ข่อย +ข่อยห +ข่า +ข่าง +ข่าต้น +ข่าน +ข่าม +ข่าย +ข่ายงาน +ข่าว +ข่าวดี +ข่าวสด +ข่าวสาร +ข่าแดง +ข้น +ข้อ +ข้อขอด +ข้อความ +ข้อคัดย่อ +ข้อคิด +ข้อง +ข้องใจ +ข้อดี +ข้อน +ข้อมูล +ข้อย +ข้อศอก +ข้อสอบ +ข้อหา +ข้อเสือ +ข้อแม้ +ข้อไข +ข้า +ข้าง +ข้างตก +ข้างๆ +ข้าพเจ้า +ข้าม +ข้าราชการ +ข้าว +ข้าวคำ +ข้าวตู +ข้าวต้ม +ข้าวนก +ข้าวยำ +ข้าวสาร +ข้าวหลาม +ข้าวเม่า +ข้าวโพด +ข้าศึก +ข้าหลวง +ข้าแผ่นดิน +ข้าไท +คคนัมพร +คคนางค์ +คคนานต์ +คง +คงกระพัน +คงขาด +คงคลัง +คงคา +คงจะ +คงตัว +คงทน +คงที่ +คงไคย +คช +คชกรรม +คชธาร +คชนาม +คชราช +คชสาร +คชสีห์ +คชส่าน +คชา +คชาชาติ +คชาชีพ +คชาธาร +คชาภรณ์ +คณนา +คณบดี +คณะ +คณาจารย์ +คณาธิการ +คณาธิปไตย +คณิกา +คณิต +คณิตศาสตร์ +คด +คดกริช +คดงอ +คดซ่าง +คดี +คดีดำ +คดีแดง +คดโกง +คติ +คติชน +คติชาวบ้าน +คติธรรม +คตินิยม +คติพจน์ +คทา +คธา +คน +คนกลาง +คนจน +คนจร +คนจริง +คนทรง +คนทา +คนทิสอ +คนที +คนทีสอ +คนธรรพ +คนธรรพ์ +คนธ์ +คนนอก +คนรวย +คนร้าย +คนละ +คนสวน +คนโท +คนใช้ +คนใน +คนไข้ +คบ +คบคิด +คบค้า +คบชู้ +คบหา +คบไฟ +คม +คมกริบ +คมขำ +คมคาย +คมน +คมนาการ +คมนาคม +คมบาง +คมสัน +ครก +ครบ +ครบมือ +ครบุรี +ครรชิต +ครรภ +ครรภมล +ครรภ์ +ครรลอง +ครรหิต +ครรโลง +ครรไล +ครวญ +ครวญหา +ครวัก +ครวี +ครหา +ครอก +ครอง +ครองแครง +ครอบ +ครอบครัว +ครอบคลุม +ครอบงำ +คระ +คระหน +คระหวน +คระหาย +คระหิว +คระแลง +คระแวง +คระโหย +คระไล +ครัดเคร่ง +ครัน +ครับ +ครัว +ครัวซองท์ +ครัวไฟ +ครั่ง +ครั่น +ครั้ง +ครั้น +ครา +คราก +คราง +คราญ +คราด +คราบ +คราฟท์ +คราม +คราว +คราส +ครำ +คริกเก็ท +คริปทอน +คริสตกาล +คริสตัง +คริสตัล +คริสต์ +คริสต์มาส +คริสเตียน +คริสโทบาไลต์ +คริโซเบริล +คริโซเพรส +คริโซไทล์ +คริโวคอลลา +ครีครอ +ครีต +ครีบ +ครีม +ครีษมายัน +ครีเอทีฟ +ครี้ +ครึ +ครึกครื้น +ครึกโครม +ครึน +ครึม +ครึ่ง +ครึ้ม +ครืด +ครืน +ครือ +ครื้น +ครื้นครึก +ครื้นเครง +ครุ +ครุก +ครุคระ +ครุฑ +ครุฑก +ครุฑจัดสรร +ครุฑย +ครุฑ่น +ครุภัณฑ์ +ครุมเครือ +ครุย +ครุวนา +ครุวาร +ครุศาสตร์ +ครุ่น +ครุ่นคิด +ครู +ครูด +ครูบา +ครูไทย +ครู่ +คร่ง +คร่อม +คร่า +คร่าว +คร่าวๆ +คร่ำ +คร่ำครวญ +คร้าน +คร้าม +คฤห +คฤหบดี +คฤหัสถ์ +คฤหา +คฤหาสน์ +คฤโฆษ +คลวง +คลอ +คลอก +คลอง +คลองขลุง +คลองจั่น +คลองตัน +คลองทรงกระเทียม +คลองท่อม +คลองภูมิ +คลองลาน +คลองลำปัก +คลองลำเจียก +คลองสาน +คลองหลวง +คลองเตย +คลองเตยวิทยา +คลองเตยใน +คลองเสือน้อย +คลองใหญ่ +คลองใหม่ +คลอด +คลอน +คลอนแคลน +คลอริทอยด์ +คลอรีน +คลอเคลีย +คลอแคล +คลอแอนไทต์ +คลอโรฟอร์ม +คลอโรฟีลล์ +คลอไรต์ +คละ +คละคล่ำ +คละปน +คลัก +คลัง +คลังมนตรี +คลังเลือด +คลัตช์ +คลับ +คลัสเตอร์ +คลั่ก +คลั่ง +คลา +คลางแคลง +คลาด +คลาน +คลาย +คลาศ +คลาส +คลาสสิค +คลาไคล +คลำ +คลิก +คลิง +คลิด +คลินิก +คลิป +คลิปบอร์ด +คลิปเปอร์ตัน +คลิ้ก +คลี +คลีนิค +คลีฟแลนไดต์ +คลี่ +คลี่คลาย +คลึง +คลื่น +คลื่นปานกลาง +คลื่นยาว +คลื่นวิทยุ +คลื่นสั้น +คลื่นเหียน +คลื่นแม่เหล็กไฟฟ้า +คลื่นใต้น้ำ +คลื่นไส้ +คลุก +คลุกคลี +คลุบ +คลุม +คลุมเครือ +คลุมโปง +คลุ่ม +คลุ้ง +คลุ้ม +คลุ้มคลั่ง +คล่อง +คล่องแคล่ว +คล่าว +คล่ำ +คล้อง +คล้องจอง +คล้อย +คล้อยอุทิศ +คล้า +คล้าย +คล้ายคลึง +คล้ายแก้ว +คล้ำ +ควง +ควงแขน +ควน +ควนกาหลง +ควนขนุน +ควนโดน +ควบ +ควบคุม +ควบคู่ +ควบแน่น +ควย +ควร +ควอตซ์ +ควอท +ควอรัม +ควอลิตี้ +ควอเตอร์ +ควัก +ควัน +ควันตัม +ควันติตี้ +ควั่น +ควาก +ควาญ +ควาน +ความ +ความคลาด +ความชื้น +ความชื้นสัมบูรณ์ +ความชื้นสัมพัทธ์ +ความถี่ +ความถี่วิทยุ +ความถ่วง +ความถ่วงจำเพาะ +ความยาวคลื่น +ความรู้สึกด้อย +ความรู้สึกเขื่อง +ความรู้สึกเด่น +ความหน่วง +ความเครียด +ความเค้น +ความเฉื่อย +ความเร็ว +ความเร่ง +ควาย +ควินิน +ควิวๆ +ควิโต +ควีน +ควีนชาร์ล็อต +ควีนสแลนด์ +คว่าว +คว่ำ +คว้า +คว้าง +คว้างๆ +คว้าน +คห +คหกรรม +คหกรรมศาสตร์ +คหบดี +คหปตานี +คหัฐ +คอ +คอก +คอกลม +คอคอด +คองคอร์ด +คองเกรส +คองโก +คอซอง +คอด +คอตก +คอตตอน +คอตั้ง +คอตีบ +คอต่อ +คอถ่วง +คอน +คอนกรีต +คอนกรีตอัดแรง +คอนกรีตเสริมเหล็ก +คอนจังชัน +คอนซูมเมอร์ +คอนดักเตอร์ +คอนดิชัน +คอนทรา +คอนทราสท์ +คอนฟลิคท์ +คอนฟิก +คอนฟิกูเรชัน +คอนยัค +คอนวอย +คอนสวรรค์ +คอนสาน +คอนาค +คอนเซ็ปท์ +คอนเดนเซอร์ +คอนเทนเนอร์ +คอนเทสท์ +คอนเนกติกัต +คอนเนอร์ +คอนเฟิร์ม +คอนเวนชัน +คอนเวิร์ท +คอนเวิร์ส +คอนเสิร์ต +คอนแทค +คอนแทคเลนส์ +คอนแทรค +คอนแวนต์ +คอนโซล +คอนโดมิเนียม +คอนโดรไดต์ +คอนโทรล +คอนโทรลเลอร์ +คอบ +คอบัว +คอปาด +คอปเปอร์ +คอพอก +คอพับ +คอม +คอมปาวด์ +คอมพลิเมนท์ +คอมพลีท +คอมพิวเตอร์ +คอมฟอร์ท +คอมมอนเซนส์ +คอมมา +คอมมาน +คอมมานเดอร์ +คอมมานโด +คอมมิชชั่น +คอมมิดิ +คอมมิดี้ +คอมมิวนิสต์ +คอมมูน +คอมเพรสเซอร์ +คอมเพล็กซ์ +คอมเมนท์ +คอมเมอร์ซ +คอมเมิซ +คอมแบ็ท +คอมแพค +คอมแพลน +คอมโบ +คอมโพรไมส์ +คอมโพเนนต์ +คอมโพเนนท์ +คอม้า +คอย +คอยท่า +คอยล์ +คอยส์ +คอรันดัม +คอรัปชั่น +คอรัล +คอรัส +คอร์ซิกา +คอร์ด +คอร์ต +คอร์น +คอร์ปอเรชั่น +คอร์ฟู +คอร์รัปชัน +คอร์ส +คอร์เดียไรต์ +คอลลอยด์ +คอลัมน์ +คอลเลคชัน +คอลเลจ +คอลเล็กชัน +คอลโลเฟน +คอส +คอสตาริกา +คอสติกโซดา +คอสท์ +คอสมิก +คอสอง +คอสูง +คอสเมติก +คอหอย +คอห่าน +คออ่อน +คอเคซอยด์ +คอเลสเตอรอล +คอแข็ง +คอแดง +คอแบะ +คอแร้ง +คอแลน +คอแหลม +คอแห้ง +คอไฟ +คะ +คะคาน +คะคึง +คะนอง +คะนึง +คะน้า +คะมำ +คะมึก +คะยั้นคะยอ +คะเน +คะเน็ด +คะเยอ +คะแนน +คะไขว่ +คัก +คัคนัมพร +คัคนางค์ +คัคนานต์ +คัคมัมพร +คังไคย +คัณฑสูตร +คัด +คัดค้าน +คัดฉาก +คัดชุน +คัดมอน +คัทลียา +คัน +คันขา +คันจาม +คันฉาย +คันชัก +คันชีพ +คันถ +คันทรง +คันธ +คันธกุฎี +คันธ์ +คันนา +คันนายาว +คันบวย +คันโดง +คันโพง +คับ +คับขัน +คับคั่ง +คับคา +คับแค +คับใจ +คัพภ +คัมปาลา +คัมภีร +คัมภีรภาพ +คัมภีร์ +คัมมินโทไนต์ +คัล +คัว +คั่ก +คั่ง +คั่น +คั่ว +คั้น +คา +คากรอง +คาง +คางคก +คางทูม +คางหมู +คางโทน +คาซาคสถาน +คาด +คาดค่า +คาถา +คาทอลิก +คาธ +คาน +คานหาม +คานารี +คาน้า +คาบ +คาบชุด +คาบสมุทร +คาบาร์เรต์ +คาบูล +คาปรี +คาพยุต +คาม +คามณี +คามณีย์ +คามภีร์ +คามวาสี +คามิคาเซ่ +คามิลเลียน +คามี +คาย +คายก +คายัน +คารพ +คารม +คารวะ +คารา +คารากัส +คาราวาน +คาราเต้ +คาราโอเกะ +คาริบบีส์ +คาร์ดินัล +คาร์ดิฟ +คาร์ทูม +คาร์นัลไลต์ +คาร์นิวัล +คาร์บอน +คาร์บอนมอนอกไซด์ +คาร์บอนไดออกไซด์ +คาร์บอลิก +คาร์บอเนต +คาร์บูเรเตอร์ +คาร์พ +คาร์สันซิตี +คาร์เนชั่น +คาร์เนเลียน +คาร์เพ็ท +คาร์เวียร์ +คาร์โก +คาร์โบรันดัม +คาร์โบไฮเดรต +คาลซิโดนี +คาลาไมน์ +คาลิมนอส +คาลีไบต์ +คาลแคนไทต์ +คาลโคโซต์ +คาลโคไพไรต์ +คาว +คาวตอง +คาวบอย +คาวปลา +คาวี +คาวุต +คาส +คาฮูลาเว +คาเดท +คาเธย์ +คาเบรรา +คาเฟ +คาเฟททีเรีย +คาเฟ่ +คาแรคเตอร์ +คาโรไลน์ +คาโลเมล +คำ +คำขวัญ +คำขอ +คำขาด +คำคม +คำชะอี +คำตั้ง +คำตากล้า +คำตาย +คำถาม +คำทาย +คำนวณ +คำนวร +คำนับ +คำนัล +คำนำ +คำนึง +คำนูณ +คำฝอย +คำฟ้อง +คำมั่น +คำมูล +คำม่วง +คำรน +คำรบ +คำราม +คำร้อง +คำหลวง +คำเขื่อนแก้ว +คำเติม +คำเปรม +คำเป็น +คำแถลง +คำแสด +คำแหง +คำโดด +คำโบล +คำโอง +คำใต้ +คิก +คิกาลี +คิกๆ +คิง +คิงสตัน +คิด +คิดคด +คิดค้น +คิดตก +คิดถึง +คิดมาก +คิทนอส +คิมห +คิมหันต์ +คิริ +คิลาน +คิลานปัจจัย +คิว +คิวชู +คิวบา +คิวบาไนต์ +คิวปิด +คิวไพรต์ +คิ้ว +คี +คีต +คีตศาสตร์ +คีตาจารย์ +คีนยา +คีบ +คีม +คีย์ +คีย์บอร์ด +คีย์เวิร์ด +คีรี +คีรีบูน +คีรีมาศ +คีรีรัฐนิคม +คีลลิง +คีเอฟ +คี่ +คึก +คึกคัก +คึกคาม +คึ่ก +คืน +คืนคำ +คืนชีพ +คืนดี +คืนตัว +คืนให้ +คืบ +คือ +คุ +คุก +คุกกี้ +คุกคาม +คุกเข่า +คุคะ +คุง +คุณ +คุณครู +คุณค่า +คุณชาย +คุณธรรม +คุณนาม +คุณนาย +คุณบท +คุณภาพ +คุณย่า +คุณลักษณะ +คุณวุฒิ +คุณศัพท์ +คุณสมบัติ +คุณา +คุณากร +คุณูปการ +คุณโทษ +คุด +คุดคู้ +คุดทะราด +คุต +คุตติ +คุนไซต์ +คุป +คุปติ +คุปต์ +คุม +คุมนุม +คุมฝอย +คุย +คุยห +คุยหฐาน +คุยหประเทศ +คุระบุรี +คุรุ +คุลา +คุหา +คุโณปการ +คุ่น +คุ่ม +คุ้ง +คุ้น +คุ้ม +คุ้มครอง +คุ้ย +คุ๊กกี้ +คู +คูซิง +คูณ +คูณร่วมน้อย +คูน +คูปอง +คูราเซา +คูริล +คูหา +คูหาสวรรค์ +คูเมือง +คูเรียม +คูเรียมูเรีย +คูเวต +คูไซเอ +คู่ +คู่ขา +คู่ควร +คู่คิด +คู่คี่ +คู่ฉีก +คู่ชัก +คู่ชีพ +คู่บุญ +คู่ผสม +คู่มือ +คู่ยาก +คู่รัก +คู่สวด +คู่หู +คู่อริ +คู่แห่ +คู่โค +คู่ใจ +คู้ +คู้บอน +คเณศ +คเนจร +ค็อกคัส +ค็อกเทล +ค็อฟฟี +ค่อน +ค่อนขอด +ค่อนแคะ +ค่อม +ค่อย +ค่ะ +ค่า +ค่าคบ +ค่าง +ค่าตัว +ค่าที่ +ค่าน้ำ +ค่าย +ค่ายบางระจัน +ค่าว +ค่าสัมบูรณ์ +ค่าหด +ค่าหัว +ค่าเผา +ค่าเสมอภาค +ค่าแรง +ค่ำ +ค่ำคืน +ค้น +ค้นคว้า +ค้นหา +ค้นหูก +ค้อ +ค้อน +ค้อม +ค้อย +ค้อวัง +ค้า +ค้าขาย +ค้าง +ค้างคาว +ค้างปี +ค้างเติ่ง +ค้าน +ค้าว +ค้ำ +ค้ำคอ +ค้ำจุน +ค้ำชู +ค้ำฟ้า +ค้ำหัว +ฆราวาส +ฆาฏ +ฆาต +ฆาตกร +ฆาตกรรม +ฆาน +ฆ่า +ฆ้อง +ฆ้องวง +งก +งง +งงงวย +งงงัน +งงิด +งด +งดงาม +งบ +งบดุล +งม +งมงาย +งมโข่ง +งวง +งวด +งวยงง +งอ +งอก +งอกงาม +งอกเงย +งอกแงก +งอด +งอดแงด +งอน +งอนง้อ +งอนหง่อ +งอนไถ +งอบ +งอม +งอมแงม +งอย +งอหาย +งอแง +งะ +งัก +งักๆ +งังๆ +งัด +งัดข้อ +งัน +งันงก +งับ +งับแง +งัว +งัวซัง +งัวเงีย +งั่ก +งั่ง +งั่ว +งั้น +งา +งาช้าง +งาตัด +งาน +งานการ +งาบ +งาบๆ +งาม +งามงอน +งามดูพลี +งามมานะ +งามวงศ์วาน +งาย +งาลั่ว +งาว +งาสาน +งาแซง +งาไซ +งำ +งิ้ว +งิ้ำ +งีบ +งึก +งึกๆ +งึน +งึม +งึมงำ +งุด +งุนงง +งุบ +งุบงิบ +งุย +งุ่นง่าน +งุ่มง่าม +งุ้ม +งู +งูบ +งูสวัด +งูเห่า +งู่หนี +ง่วง +ง่วงงุน +ง่วงเหงา +ง่วน +ง่อง +ง่อน +ง่อย +ง่า +ง่าน +ง่าม +ง่าย +ง่ายดาย +ง่ายๆ +ง่าเงย +ง่ำ +ง้วน +ง้อ +ง้องอน +ง้อม +ง้าง +ง้าว +ง้ำ +จก +จง +จงกรม +จงกล +จงกลนี +จงดี +จงถนอม +จงรัก +จงสุข +จงอร +จงอาง +จงเจริญ +จงใจ +จด +จดจำ +จดจ่อ +จดจ้อง +จดหมัด +จดหมาย +จดหมายเหตุ +จดุร +จดูร +จตุ +จตุจักร +จตุตถ +จตุบท +จตุปัจจัย +จตุปาริสิทธิศีล +จตุร +จตุรงค์ +จตุรถ +จตุรพักตร์ +จตุรพักตร์พิมาน +จตุรพิธ +จตุรภุช +จตุรภูมิ +จตุรมิตร +จตุสดมภ์ +จทึง +จน +จนกว่า +จนชั้น +จนถึง +จบ +จบเห่ +จม +จมปลัก +จมร +จมรี +จมูก +จมูกมด +จมเบ้า +จยุติ +จร +จรก +จรกลู่ +จรคั่ง +จรจรัล +จรจัด +จรณะ +จรด +จรดล +จรบน +จรบัน +จรบาท +จรมัน +จรมูก +จรรจา +จรรม +จรรยา +จรรโจษ +จรรโลง +จรลวง +จรลาด +จรลาย +จรลิ่ว +จรลี +จรลู่ +จรล่วง +จรล่ำ +จรวจ +จรวด +จรวดนำวิถี +จรวัก +จรส +จรอก +จระขาบ +จระทก +จระนำ +จระบาน +จระบี +จระเข้ +จระแคง +จรัญสนิทวงศ์ +จรัล +จรัส +จรัสเมือง +จราก +จราง +จราจร +จราญ +จราย +จราว +จราส +จริก +จริง +จริงจัง +จริงใจ +จริต +จริม +จริย +จริยธรรม +จริยวัตร +จริยศาสตร์ +จริยศึกษา +จริยา +จริว +จรี +จรึง +จรุก +จรุง +จรูญ +จรูส +จล +จลนพลศาสตร์ +จลนศาสตร์ +จลนี +จลา +จลาจล +จวก +จวง +จวด +จวดลาก +จวน +จวนตัว +จวนแจ +จวบ +จวบจวน +จวัก +จอ +จอก +จอกแหน +จอง +จองคช +จองจำ +จองหอง +จอด +จอน +จอนจ่อ +จอบ +จอภาพ +จอม +จอมทอง +จอมทัพ +จอมบึง +จอมพระ +จอมพล +จอมใจ +จอมไตร +จอร์เจีย +จอร์แดน +จอแจ +จอแส +จะ +จะกรุน +จะกละ +จะกลาม +จะกวด +จะกูด +จะขาบ +จะงอย +จะจะ +จะจ้า +จะนะ +จะบัน +จะปิ้ง +จะละหวั่น +จะละเม็ด +จะเกร็ง +จะเข็บ +จะเข้ +จะแจ่ม +จะแจ้ง +จะไจ้ +จัก +จักกาย +จักขุ +จักจั่น +จักจี้ +จักทรกานต์ +จักร +จักรพงษ์ +จักรพรรดิ +จักรพันธ์ +จักรภพ +จักรยาน +จักรยานยนต์ +จักรราศี +จักรวรรดิ +จักรวรรดินิยม +จักรวรรดิ์ +จักรวาล +จักรา +จักราช +จักริน +จักรี +จักรเพชร +จักษุ +จักสาน +จักแหล่น +จัง +จังกวด +จังกอบ +จังกา +จังกูด +จังก้า +จังงัง +จังมัง +จังลอน +จังหวะ +จังหวัด +จังหัน +จังออน +จังเก +จังไร +จัญไร +จัณฑ +จัณฑาล +จัณฑ์ +จัด +จัดการ +จัดจอง +จัดจ้า +จัดสรร +จัดหา +จัดเจน +จัดแจง +จัตวา +จัตุ +จัตุร +จัตุรัส +จัตุสดมภ์ +จัน +จันกลิ่น +จันทนา +จันทน์ +จันทน์เก่า +จันทบุรี +จันทร +จันทรคติ +จันทรคราส +จันทรัคคะ +จันทรา +จันทราราม +จันทรุปราคา +จันทร์ +จันทร์พริ้ง +จันทร์ม่วง +จันทร์ลอย +จันทร์สถิตย์ +จันทร์สุข +จันทร์หุ่นบำเพ็ญ +จันทร์เกษม +จันทร์เรือง +จันทร์เศรษฐี +จันทัน +จันทิมา +จันทิรา +จันท์ +จันลอง +จันอับ +จันเลา +จันโจษ +จับ +จับกัง +จับกุม +จับจด +จับจอง +จับจิต +จับฉ่าย +จับตา +จับตาย +จับบก +จับปิ้ง +จับผิด +จับยาม +จับยี่กี +จับสั่น +จับเจี๋ยว +จับเจ่า +จับโปง +จับใจ +จับไข้ +จัมกุม +จัมมะ +จั่น +จั่ว +จั้ง +จั๊กจี้ +จั๊กเดียม +จั๊กๆ +จั๊บ +จั๊วะ +จั๋ง +จา +จาก +จาการ์ตา +จากแดง +จาคอปไซต์ +จาคี +จาง +จางวาง +จาซินท์ +จาด +จาดตะกั่ว +จาตุ +จาตุกรณีย์ +จาตุทสี +จาตุมหาราช +จาตุร +จาตุรงคสันนิบาต +จาตุรันต์ +จาน +จานบิน +จานผี +จานเสียง +จาบ +จาบัล +จาบัลย์ +จาป +จาม +จามจุรี +จามร +จามรี +จามิกร +จามีกร +จาร +จารวาก +จาระบี +จาระไน +จาริก +จาริพิบูลย์ +จารี +จารีต +จารึก +จารุ +จารุกลัส +จารุเมือง +จาว +จาวา +จาเมกา +จาเมนา +จำ +จำกว่า +จำกัด +จำขื่อ +จำครบ +จำคา +จำงาย +จำจอง +จำทน +จำทวย +จำทับ +จำทาบ +จำนง +จำนงค์ +จำนน +จำนรรจา +จำนรรจ์ +จำนวน +จำนวนจริง +จำนวนจินตภาพ +จำนวนตรรกยะ +จำนวนนับ +จำนวนอตรรกยะ +จำนวนเชิงซ้อน +จำนวนเต็ม +จำนอง +จำนับ +จำนัล +จำนำ +จำบัง +จำบับ +จำบ่ม +จำปา +จำปาดะ +จำปี +จำปูน +จำพวก +จำยอม +จำรด +จำรัส +จำราญ +จำราย +จำรูญ +จำลอง +จำลาย +จำวัด +จำศีล +จำหนับ +จำหน่าย +จำหระ +จำหลอก +จำหลัก +จำหล่อ +จำหัน +จำหาย +จำหุด +จำอวด +จำอื่น +จำเจ +จำเดิม +จำเทิด +จำเนียร +จำเนียรสุข +จำเนียรเสริม +จำเบศ +จำเป็น +จำเพาะ +จำเริญ +จำเรียง +จำเลย +จำเลาะ +จำแทง +จำแนก +จำแบ +จำแพรก +จำแลง +จำแล่น +จิ +จิก +จิกปีก +จิกหัว +จิงจัง +จิงจ้อ +จิงโจ้ +จิต +จิตกึ่งสำนึก +จิตต +จิตตภาวนา +จิตต์ +จิตต์ภักดี +จิตต์ร่วม +จิตนิยม +จิตบำบัด +จิตประไพวิทยา +จิตภาพ +จิตร +จิตรกร +จิตรกรรม +จิตรจุล +จิตรลดา +จิตรวารี +จิตรา +จิตวิทยา +จิตวิสัย +จิตสำนึก +จิตเวช +จิตเวชศาสตร์ +จิตแพทย์ +จิตใจ +จิตใต้สำนึก +จิตไร้สำนึก +จินดา +จินดามณี +จินดาหรา +จินต +จินตกวี +จินตนา +จินตนาการ +จินตภาพ +จินต์ +จินต์จล +จินเจา +จิบ +จิปดำริห์ +จิปาถะ +จิร +จิรกาล +จิรัฐิติกาล +จิลโย +จิ่ง +จิ่ม +จิ้งจก +จิ้งจอก +จิ้งจัง +จิ้งหรีด +จิ้งเหลน +จิ้ม +จิ้มก้อง +จิ้มลิ้ม +จิ๊ป +จิ๋ว +จี +จีน +จีนัส +จีนแส +จีบ +จีบพลู +จีบูติ +จีบูตี +จีพร +จีม +จีรัง +จีวร +จีออกราฟี +จีออเมทรี +จีเนียส +จีเอ็มโอ +จีแจ๊ป +จีโนไทป์ +จีโบ +จี่ +จี้ +จี๊ +จี๊จู้ +จี๊ด +จี๋ +จี๋จ้อ +จึง +จึ่ง +จึ้ง +จืด +จืดจาง +จืดชืด +จืดตา +จุ +จุก +จุกจิก +จุกชี +จุกผาม +จุกยา +จุฑา +จุฑามณี +จุฑามาศ +จุณ +จุณณียบท +จุด +จุดจบ +จุดทศนิยม +จุดน้ำค้าง +จุดบอด +จุดยืน +จุดรวม +จุดศูนย์กลาง +จุดศูนย์ถ่วง +จุดสัมผัส +จุดหลอมเหลว +จุดอิ่มตัว +จุดเดือด +จุดเยือกแข็ง +จุดเหี่ยวเฉา +จุติ +จุตูปปาตญาณ +จุทส +จุน +จุนจู๋ +จุนสี +จุนเจือ +จุบ +จุบจิบ +จุปาก +จุมพฏ +จุมพล +จุมพิต +จุรณ +จุรี +จุล +จุลจอม +จุลจอมเกล้า +จุลชีพ +จุลชีวัน +จุลชีวิน +จุลทรรศน์ +จุลภาค +จุลภาพ +จุลวรรค +จุลศักราช +จุลสาร +จุลินทรีย์ +จุฬา +จุฬาราชมนตรี +จุฬาลงกรณ์ +จุฬาสัมพันธ์ +จุฬาเกษม +จุใจ +จุไร +จุ่ง +จุ่น +จุ่ม +จุ้น +จุ้นจู๊ +จุ้ม +จุ้ย +จุ๊กกรู๊ +จุ๊บ +จุ๊บแจง +จุ๋งจิ๋ง +จุ๋มจิ๋ม +จู +จูง +จูงมือ +จูงใจ +จูบ +จูโน +จู่ +จู่ลู่ +จู่โจม +จู่ๆ +จู้ +จู้จี้ +จู๊ด +จู๋ +จู๋จี๋ +จเร +จแจ้น +จ็อบ +จ่ง +จ่ม +จ่อ +จ่อง +จ่อม +จ่อย +จ่า +จ่าง +จ่าปี่ +จ่าย +จ่ารง +จ่าว +จ้น +จ้วง +จ้อ +จ้อก +จ้อกแจ้ก +จ้อง +จ้องเต +จ้อน +จ้อย +จ้ะ +จ้า +จ้าง +จ้าน +จ้าละหวั่น +จ้าว +จ้ำ +จ้ำจี้ +จ้ำบ๊ะ +จ้ำม่ำ +จ้ำเบ้า +จ๊วก +จ๊อก +จ๊อกแจ๊ก +จ๊อกๆ +จ๊ะ +จ๊ะเอ๋ +จ๋ง +จ๋วง +จ๋อ +จ๋อง +จ๋อย +จ๋อแจ๋ +จ๋ะ +จ๋า +ฉก +ฉกจวัก +ฉกฉวย +ฉกชิง +ฉกรรจ์ +ฉกษัตริย์ +ฉกาจ +ฉกามาพจร +ฉงน +ฉงาย +ฉทวาร +ฉทึง +ฉนวน +ฉนัง +ฉนาก +ฉนำ +ฉบัง +ฉบัด +ฉบับ +ฉบำ +ฉม +ฉมวก +ฉมวย +ฉมัง +ฉมัน +ฉมา +ฉมำ +ฉล +ฉลวย +ฉลอง +ฉลอม +ฉลัก +ฉลับ +ฉลาก +ฉลาง +ฉลาด +ฉลาม +ฉลาย +ฉลิว +ฉลีก +ฉลุ +ฉลุกฉลวย +ฉลุลาย +ฉลู +ฉวย +ฉวยฉาบ +ฉวะ +ฉวัดเฉวียน +ฉวาง +ฉวี +ฉวีวรรณ +ฉศก +ฉอก +ฉองได +ฉอด +ฉอดๆ +ฉอเลาะ +ฉะ +ฉะกะ +ฉะฉาด +ฉะฉาน +ฉะฉี่ +ฉะฉ่ำ +ฉะต้า +ฉะนั้น +ฉะนี้ +ฉะอ้อน +ฉะเชิงเทรา +ฉักกะ +ฉัฐ +ฉัด +ฉัตร +ฉัตรมงคล +ฉัตรเสรี +ฉัตรแก้ว +ฉัททันต์ +ฉัน +ฉันท +ฉันทลักษณ์ +ฉันทะ +ฉันทา +ฉันทาคติ +ฉันทานุมัติ +ฉันท์ +ฉันใด +ฉับ +ฉับไว +ฉัยยา +ฉาก +ฉาง +ฉาด +ฉาดฉาน +ฉาตกภัย +ฉาทน +ฉาน +ฉาบ +ฉาบฉวย +ฉาป +ฉาย +ฉายา +ฉายาลักษณ์ +ฉาว +ฉาวโฉ่ +ฉำฉา +ฉำเฉง +ฉำแฉะ +ฉิน +ฉินท +ฉินท์ +ฉิบ +ฉิบหาย +ฉิมทายิกาวาส +ฉิมพลี +ฉิว +ฉิ่ง +ฉีก +ฉีด +ฉีดยา +ฉี่ +ฉุ +ฉุก +ฉุกคิด +ฉุกเฉิน +ฉุกใจ +ฉุด +ฉุน +ฉุนเฉียว +ฉุป +ฉุย +ฉุยฉาย +ฉูด +ฉูดฉาด +ฉู่ +ฉู่ฉี่ +ฉ่อง +ฉ่อย +ฉ่า +ฉ่าง +ฉ่าฉาว +ฉ่ำ +ฉ้อ +ฉ้อฉล +ฉ้อโกง +ชก +ชกมวย +ชกา +ชคดี +ชง +ชงคา +ชงฆ +ชงฆ์ +ชงโค +ชงโลง +ชฎา +ชฎาพอก +ชฎิล +ชฏาธาร +ชด +ชดช้อย +ชดเชย +ชดใช้ +ชทึง +ชน +ชนก +ชนชั้น +ชนชาติ +ชนช้าง +ชนนี +ชนบท +ชนมพรรษา +ชนมายุ +ชนม์ +ชนวน +ชนหมู่น้อย +ชนะ +ชนะสงคราม +ชนัก +ชนา +ชนาง +ชนิด +ชนแดน +ชบา +ชบาหนู +ชปโยค +ชม +ชมชัว +ชมชาญ +ชมชื่น +ชมดชม้อย +ชมนาด +ชมพู +ชมพูนท +ชมพูนุท +ชมพู่ +ชมภูเวก +ชมรม +ชมัน +ชมา +ชมเชย +ชมเปาะ +ชมเลาะ +ชมไช +ชม้อย +ชม้าย +ชย +ชยา +ชร +ชรทึง +ชรราง +ชรริน +ชรออบ +ชรอัด +ชรอื้อ +ชรอุ่ม +ชรอ่ำ +ชระ +ชระงม +ชระงำ +ชระดัด +ชระบอบ +ชระบาบ +ชระมด +ชระมัว +ชระลอ +ชระลอง +ชระลัด +ชระลุ +ชระล้ำ +ชระอับ +ชระอาบ +ชระเอม +ชระแลง +ชรัด +ชรัว +ชรา +ชราบ +ชราภาพ +ชรายุ +ชริน +ชรุก +ชรูบ +ชรแรง +ชรแร่ง +ชรโมล +ชรโลง +ชรไม +ชล +ชลจร +ชลชาติ +ชลธาร +ชลธารก +ชลธิศ +ชลธี +ชลนา +ชลบุรี +ชลประทาน +ชลมารค +ชลสถาน +ชลัมพุ +ชลาธาร +ชลาพุช +ชลามพุช +ชลาลัย +ชลาศัย +ชลี +ชลูกา +ชลเนตร +ชว +ชวด +ชวน +ชวนชม +ชวนหัว +ชวย +ชวร +ชวลิต +ชวัก +ชวา +ชวาล +ชวาลา +ชอก +ชอกช้ำ +ชอง +ชอน +ชอบ +ชอบกล +ชอบพอ +ชอบใจ +ชอป +ชอปปิ้ง +ชอม +ชอร์ไลต์ +ชอล์ก +ชอื้อ +ชอุ่ม +ชอ่ำ +ชะ +ชะคราม +ชะงอก +ชะงัก +ชะงัด +ชะงาบ +ชะงุ้ม +ชะง่อน +ชะง้ำ +ชะฉ่า +ชะชิด +ชะช่อง +ชะช้า +ชะตา +ชะต้า +ชะนี +ชะนุง +ชะพลู +ชะมด +ชะมบ +ชะมวง +ชะมัง +ชะมัด +ชะรอย +ชะลอ +ชะลอม +ชะลาน +ชะลิน +ชะลูด +ชะล่า +ชะล้าง +ชะวัง +ชะวาก +ชะวากทะเล +ชะวาด +ชะวุ้ง +ชะอม +ชะอวด +ชะอำ +ชะอ้อน +ชะเง้อ +ชะเนาะ +ชะเลง +ชะเลย +ชะเอม +ชะแง้ +ชะแม่ +ชะแลง +ชะแล็ก +ชะแวง +ชะโงก +ชะโงกผา +ชะโด +ชะโอน +ชัก +ชักจูง +ชักชวน +ชักช้า +ชักนำ +ชักพระ +ชักศพ +ชักเงา +ชักเย่อ +ชักโครก +ชักใย +ชัค +ชัง +ชังคา +ชังฆ +ชัชวาล +ชัฏ +ชัด +ชัดช้า +ชัดเจน +ชัตเตอร์ +ชัน +ชันกาด +ชันคอ +ชันชี +ชันตุ +ชันนะตุ +ชันนุ +ชันพอน +ชันษา +ชันสน +ชันสูตร +ชันโรง +ชัปน +ชัพ +ชัย +ชัยชนะ +ชัยณรงค์ +ชัยนาท +ชัยบาดาล +ชัยบาน +ชัยพฤกษ์ +ชัยภูมิ +ชัยมงคล +ชัยวัฒน์ +ชัยวิวัฒน์ +ชัยศรี +ชัยสมรภูมิ +ชัลลุกะ +ชัวชม +ชัวร์ +ชั่ง +ชั่งใจ +ชั่ว +ชั่วคน +ชั่วคราว +ชั่วโมง +ชั้น +ชั้ว +ชา +ชากอส +ชาคร +ชาคริต +ชาญ +ชาญวิทย์วิทยา +ชาด +ชาดก +ชาต +ชาตรี +ชาตรูป +ชาตสระ +ชาตะ +ชาตา +ชาติ +ชาติตระการ +ชาตินิยม +ชาติพันธุ์ +ชาติพันธุ์วรรณนา +ชาติพันธุ์วิทยา +ชาติรส +ชาติรูป +ชาติสงเคราะห์ +ชาน +ชานุ +ชานุกะ +ชานุมณฑล +ชานุมาน +ชานเมือง +ชาม +ชามาดร +ชามาดา +ชามาตุ +ชาย +ชายคา +ชายตา +ชายทะเล +ชายธง +ชายฝั่ง +ชายหาด +ชายา +ชายแดน +ชายไหว +ชารี +ชาร์จ +ชาร์ท +ชาร์ป +ชาร์ลสตัน +ชาร์ล็อตอามาลี +ชาล +ชาลา +ชาลินี +ชาว +ชาวนอก +ชาวนา +ชาวน้ำ +ชาววัง +ชาวสวน +ชาวี +ชาวเล +ชาวไร่ +ชาห์ +ชาเยศ +ชำ +ชำงัด +ชำงาย +ชำงือ +ชำนน +ชำนรร +ชำนะ +ชำนัญ +ชำนัน +ชำนาญ +ชำนิ +ชำมะนาด +ชำมะเลียง +ชำระ +ชำรุด +ชำร่วย +ชำลา +ชำเนียน +ชำเนียร +ชำเรา +ชำเลือง +ชำแรก +ชำแระ +ชำแหละ +ชิ +ชิคาโก +ชิง +ชิงคม +ชิงชัง +ชิงชัน +ชิงชัย +ชิงชี่ +ชิงช้า +ชิงดวง +ชิงพลบ +ชิณณะ +ชิด +ชิดชน +ชิดลม +ชิต +ชิตินทรีย์ +ชิน +ชินเขต +ชินโต +ชิป +ชิพ +ชิม +ชิมลาง +ชิมแปนซี +ชิยา +ชิรณ +ชิระ +ชิลลิ่ง +ชิลี +ชิวหา +ชิสา +ชิโกกุ +ชิโนรส +ชิ่ง +ชิ่น +ชิ้น +ชี +ชีค +ชีช้ำ +ชีต้น +ชีท +ชีปะขาว +ชีป่า +ชีพ +ชีพจร +ชีพิต +ชีพิตักษัย +ชีพุก +ชีฟ +ชีฟอง +ชีมืด +ชีรณ +ชีระ +ชีลา +ชีลาว +ชีล้อม +ชีว +ชีวงคต +ชีวประวัติ +ชีวภาพ +ชีววิทยา +ชีวะ +ชีวัน +ชีวา +ชีวาตม์ +ชีวาลัย +ชีวิต +ชีวิตักษัย +ชีวิน +ชีวี +ชีวเคมี +ชีวโลก +ชีส +ชีอะห์ +ชีไลต์ +ชี่ +ชี้ +ชี้ขาด +ชี้ตัว +ชี้นำ +ชี้ฟ้า +ชี้แจง +ชี้แนะ +ชืด +ชื่น +ชื่นชม +ชื่นบาน +ชื่นมื่น +ชื่นฤดี +ชื่นวัฒนา +ชื่อ +ชื้น +ชื้อ +ชุ +ชุก +ชุกชี +ชุกชุม +ชุณห +ชุด +ชุติ +ชุติมา +ชุน +ชุบ +ชุบชู +ชุบตัว +ชุบสรง +ชุบอาบ +ชุม +ชุมชน +ชุมนุม +ชุมพร +ชุมพล +ชุมพลบุรี +ชุมพวง +ชุมพา +ชุมรุม +ชุมสาย +ชุมแพ +ชุมแสง +ชุลมุน +ชุลี +ชุลีพร +ชุษณ +ชุ่ง +ชุ่ม +ชุ่มใจ +ชุ่ย +ชุ้ง +ชู +ชูชาติ +ชูชีพ +ชูท +ชูรส +ชูส +ชูโรง +ชูใจ +ชู้ +ชู้รัก +ชู้สาว +ชเนตตี +ชเล +ชโย +ชโลง +ชโลทร +ชโลม +ชไม +ช็อก +ช็อกเกอร์ +ช็อกโกเลต +ช็อกโกแลต +ช็อค +ช็อคอัป +ช็อท +ช็อป +ช็อยซ์ +ช็อร์ท +ช่วง +ช่วย +ช่อ +ช่อง +ช่องนนทรีย์ +ช่องลม +ช่องเขา +ช่องแคบ +ช่องไฟ +ช่อน +ช่อฟ้า +ช่อย +ช่าง +ช่างกลปทุมวัน +ช่างฝีมือทหาร +ช่างอากาศบำรุง +ช่างเหล็ก +ช่างไฟ +ช่างไม้ +ช่ำ +ช่ำชอง +ช่ำช่า +ช่ำปอด +ช่ำใจ +ช้อง +ช้อน +ช้อย +ช้อยชด +ช้า +ช้าง +ช้างต้น +ช้าปี่ +ช้าพลู +ช้ำ +ช้ำชอก +ช้ำใจ +ซก +ซงดำ +ซง้า +ซด +ซน +ซบ +ซบเซา +ซม +ซมซาน +ซวด +ซวดทรง +ซวดเซ +ซวน +ซวนเซ +ซวย +ซอ +ซอก +ซอกซอน +ซอกซัง +ซอกแซก +ซอง +ซองพลู +ซองมือ +ซองหาง +ซองแมว +ซอน +ซอฟต์แวร์ +ซอม +ซอมซ่อ +ซอมบา +ซอมบี้ +ซอย +ซอยผม +ซอยไซต์ +ซอร์ส +ซอร์สโค้ด +ซอลต์เลกซิตี +ซอส +ซอสซูไรต์ +ซอสเบอรี +ซอแซ +ซะ +ซะซิบ +ซะซ่อง +ซะเซาะ +ซัก +ซักฟอก +ซักรีด +ซักแห้ง +ซักไซ้ +ซัคชัน +ซัง +ซังแซว +ซัด +ซัดทอด +ซัดน้ำ +ซัดยา +ซัดเซ +ซัน +ซันคริสโตวัล +ซันซัลวาดอร์ +ซันตาคลอส +ซันตามอรา +ซันตาเฟ +ซันติอาโก +ซันนี +ซันนี่ +ซันมาริโน +ซันมารีโน +ซันฮวน +ซันโตโดมิงโก +ซันโฮเซ +ซับ +ซับซาบ +ซับซี่ +ซับเวย์ +ซับใน +ซัปพลิเมนท์ +ซัพพลาย +ซัพพอร์ต +ซัพเปอร์ +ซัฟฟิกซ์ +ซัม +ซัมมิท +ซัมเมอร์ +ซัมเมอร์เซต +ซัลฟา +ซัลเฟต +ซัลเฟอร์ +ซัลโว +ซั้ง +ซั้น +ซั้ว +ซา +ซาก +ซากดึกดำบรรพ์ +ซากศพ +ซากุระ +ซาง +ซาด +ซาดิสม์ +ซาตาน +ซาติน +ซาทินสปาร์ +ซาน +ซานตาคลอส +ซานา +ซานิดีน +ซาบ +ซาบซึ้ง +ซาบซ่าน +ซาฟารี +ซามอส +ซามัว +ซามาร์ +ซามาร์สไกต์ +ซามูไร +ซาราวัก +ซาราเยโว +ซาร์ +ซาร์ด +ซาร์ดิเนีย +ซาร์ส +ซาร์โดนิกซ์ +ซาละวาตี +ซาลาม +ซาลาเปา +ซาลินา +ซาลูน +ซาว +ซาวด์ +ซาวน้ำ +ซาวน์ด +ซาวน์ดแท็รก +ซาอีร์ +ซาอุดิอาระเบีย +ซาอุดีอาระเบีย +ซาเกรบ +ซาแมเรียม +ซาโพไนต์ +ซาโยนาระ +ซาโว +ซาไก +ซาไลต์ +ซิ +ซิก +ซิกข์วิทยาลัย +ซิกซี้ +ซิกน์ +ซิการ์ +ซิการ์เรท +ซิกแซ็ก +ซิกแนล +ซิงกูล่าร์ +ซิงค์ +ซิงเกป +ซิงเกิล +ซิงโคนา +ซิงไคต์ +ซิซิลี +ซิซิเลียน +ซิดนีย์ +ซิติเซน +ซิตี้ +ซิทริน +ซินนาบาร์ +ซินนามิก +ซินยอร์ +ซินเกียง +ซินเซียร์ +ซินแท็ค +ซินแส +ซินโนนิม +ซิบ +ซิบซับ +ซิป +ซิฟนอส +ซิฟิลิส +ซิมบับเว +ซิมมิททรี +ซิมโบล +ซิมโพเซียม +ซิมโฟนี +ซิมโฟนี่ +ซิลค์ +ซิลลิมาไนต์ +ซิลวาไนต์ +ซิลิกา +ซิลิคอน +ซิลเวอร์ +ซิลไวต์ +ซิว +ซิวิค +ซิสเตม +ซิสเต็ม +ซิเดอไรต์ +ซิ่ง +ซิ่น +ซิ้งค์ +ซิ้ม +ซี +ซีก +ซีคอนสแควร์ +ซีด +ซีดี +ซีดเซียว +ซีน +ซีนอน +ซีป่าย +ซีพิโอไลต์ +ซีพียู +ซีรอกซ์ +ซีรี่ส์ +ซีล +ซีลีเนียม +ซีอิ๊ว +ซีเกมส์ +ซีเคร็ท +ซีเซียม +ซีเนท +ซีเนียร์ +ซีเมนต์ +ซีเมนต์ไทย +ซีเรีย +ซีเรียม +ซีเรียส +ซีเลคชัน +ซีแลนด์ +ซีโนไทม์ +ซีโอไลต์ +ซี่ +ซี่โครง +ซี้ +ซี้ซอน +ซี้ซั้ว +ซี้บ้องเซ็ก +ซึก +ซึง +ซึม +ซึมซับ +ซึมซาบ +ซึมเซา +ซึ่ง +ซึ้ง +ซื่อ +ซื่อตรง +ซื่อสัตย์ +ซื้อ +ซุก +ซุกซน +ซุกซิก +ซุกซ่อน +ซุง +ซุน +ซุนดาน้อย +ซุนดาใหญ่ +ซุบ +ซุบซิบ +ซุบซู่ +ซุป +ซุปเปอร์ +ซุปเปอร์มาร์เก็ต +ซุปเปอร์ไวเซอร์ +ซุมบา +ซุมบาวา +ซุมแซว +ซุย +ซุ่ม +ซุ่มคม +ซุ่มซ่าม +ซุ่มเสียง +ซุ้ม +ซู +ซูชิ +ซูซูกิ +ซูด +ซูดซาด +ซูดาน +ซูบ +ซูบซีด +ซูม +ซูลู +ซูวา +ซูเปอร์มาเก็ต +ซูเอี๋ย +ซูโครส +ซูโม +ซูโม่ +ซู่ +ซู่ซ่า +ซู้ด +ซ่ก +ซ่น +ซ่อง +ซ่องสุม +ซ่องโจร +ซ่อน +ซ่อนกลิ่น +ซ่อนงำ +ซ่อนหา +ซ่อม +ซ่อมแซม +ซ่า +ซ่าง +ซ่าน +ซ่าหริ่ม +ซ่าโบะ +ซ้น +ซ้อ +ซ้อง +ซ้อน +ซ้อนกล +ซ้อม +ซ้อส +ซ้อแซ้ +ซ้าย +ซ้ำ +ซ้ำซาก +ซ้ำสาม +ฌาน +ฌาปน +ฌาปนกิจ +ฌาปนสถาน +ญญ่าย +ญวน +ญัตติ +ญัตติกรรม +ญาณ +ญาณวิทยา +ญาณี +ญาติ +ญาติกา +ญาติมิตร +ญาติเภท +ญาติโยม +ญิบ +ญี่ +ญี่ปุ่น +ฎีกา +ฐกัด +ฐากูร +ฐาน +ฐานทัพ +ฐานนิยม +ฐานราก +ฐานะ +ฐานันดร +ฐานานุกรม +ฐานานุรูป +ฐานีย +ฐานียะ +ฐาปน +ฐาปนา +ฐายี +ฐิต +ฐิติ +ฑังส +ฑังสะ +ฑาก +ฑาฐิกะ +ฑาฒิกะ +ฑาหก +ฑาหะ +ณรงค์ +ณรงค์กิจ +ดก +ดกดื่น +ดง +ดงดาน +ดงดิบ +ดงดึก +ดงมูลเหล็ก +ดงวาย +ดงหลวง +ดนตรี +ดนัย +ดนุ +ดนุช +ดนู +ดนโด่ +ดม +ดมดอม +ดมไร +ดยุ๊ค +ดร +ดรงค์ +ดรณี +ดรธาน +ดรรชนี +ดรรชนีหักเห +ดรัก +ดรากอน +ดราฟต์ +ดราไวต์ +ดริ้งค์ +ดรุ +ดรุณ +ดรุณพิทยา +ดรุณศาสตร์ +ดรุณา +ดรุณี +ดร็อป +ดฤถี +ดล +ดลภาค +ดลศิริ +ดลใจ +ดวง +ดวงดาว +ดวงตะวัน +ดวงตา +ดวงมณี +ดวงสมร +ดวงแข +ดวงใจ +ดวจ +ดวด +ดวล +ดอก +ดอกคำใต้ +ดอกจอก +ดอกจัน +ดอกจิก +ดอกดิน +ดอกทอง +ดอกบัว +ดอกบุก +ดอกฟ้า +ดอกรัก +ดอกหิน +ดอกอาว +ดอกเตอร์ +ดอกเบี้ย +ดอกไม้ +ดอง +ดองฉาย +ดองดึง +ดองยา +ดอด +ดอน +ดอนตาล +ดอนตูม +ดอนพุด +ดอนสัก +ดอนเจดีย์ +ดอนเมือง +ดอม +ดอมดม +ดอย +ดอยช์ +ดอยลี่ +ดอยสะเก็ด +ดอยเต่า +ดอลดรัมส์ +ดอลลาร์ +ดอส +ดะ +ดะหมัง +ดัก +ดักคอ +ดักคิวเมนท์ +ดักดน +ดักดาน +ดักทริน +ดักฟัง +ดักลาส +ดักษก +ดักษณ +ดักษณี +ดักษัน +ดักแด้ +ดัง +ดังนี้ +ดังรือ +ดังฤา +ดังฤๅ +ดัชนี +ดัด +ดัดจริต +ดัดตน +ดัดสันดาน +ดัดแปลง +ดัตช์ +ดัตซ์ +ดัน +ดันทุรัง +ดับ +ดับจิต +ดับชีพ +ดับลม +ดับลิน +ดับเบิล +ดับเบิ้ล +ดัมพ์ +ดัสกร +ดัสกรี +ดั่ง +ดั้ง +ดั้งเดิม +ดั้น +ดา +ดาก +ดาการ์ +ดาด +ดาดฟ้า +ดาดาษ +ดาดำ +ดาต้า +ดาน +ดานซ์เซอร์ +ดาบ +ดาบลาว +ดาบส +ดาม +ดามพ +ดามพ์ +ดามร +ดามัสกัส +ดาย +ดายน์ +ดาร +ดารก +ดารณี +ดารดาษ +ดารา +ดาราบถ +ดาราศาสตร์ +ดาร์ +ดาร์ลิง +ดาร์เอสซาลาม +ดาล +ดาลัด +ดาลุ +ดาลุช +ดาว +ดาวคะนอง +ดาวดึงษาราม +ดาวดึงส์ +ดาวตก +ดาวตลก +ดาวน์ +ดาวน์โหลด +ดาวบส +ดาวฤกษ์ +ดาวหาง +ดาวเทียม +ดาวโจนส์ +ดาษ +ดาษดา +ดาษดื่น +ดาหงัน +ดาหลัง +ดาหา +ดาฬ +ดาโกตา +ดาโกตาเหนือ +ดาโกตาใต้ +ดาโฮเม +ดำ +ดำกล +ดำดง +ดำดิน +ดำนา +ดำนาณ +ดำนาน +ดำนู +ดำบล +ดำปืน +ดำพอง +ดำรง +ดำรงค์ +ดำรงรักษ์ +ดำรวจ +ดำรัส +ดำริ +ดำรี +ดำรู +ดำฤษณา +ดำหนัก +ดำหนิ +ดำหัว +ดำอวด +ดำเกิง +ดำเนิน +ดำเนินสะดวก +ดำเลิง +ดำแคง +ดำแดง +ดำแลง +ดำไร +ดิก +ดิกๆ +ดิง +ดิจิตอล +ดิจิทัล +ดิฉัน +ดิฐ +ดิตถ์ +ดิถี +ดิน +ดินกรด +ดินขาว +ดินดอน +ดินดอนสามเหลี่ยม +ดินดาน +ดินดำ +ดินนวล +ดินปืน +ดินสอ +ดินส้ม +ดินหู +ดินเนอร์ +ดินเบ +ดินแดง +ดิบ +ดิบดี +ดิพโพลม่า +ดิรัจฉาน +ดิลก +ดิวิชั่น +ดิษฐ์ +ดิษเย็น +ดิสก์ +ดิสคอฟเวอร์ +ดิสคัส +ดิสค์ +ดิสซ์ +ดิสนีย์ +ดิสเพลย์ +ดิสโพรเซียม +ดิเรก +ดิ่ง +ดิ่ว +ดิ้น +ดิ้นรน +ดิ้ว +ดี +ดี.ซี. +ดีกรี +ดีงู +ดีฉัน +ดีซ่าน +ดีด +ดีดขัน +ดีดวด +ดีดัก +ดีดีที +ดีบัก +ดีบัว +ดีบุก +ดีปลี +ดีผา +ดีฝ่อ +ดีพร +ดีพาร์ทเมนท์สโตร์ +ดีฟอลต์ +ดีฟอลท์ +ดีฟิวส์ +ดีม +ดีมอนสเตรท +ดีมันทอยด์ +ดีมานด์ +ดียา +ดีรักษา +ดีร้าย +ดีละ +ดีลีท +ดีวีดี +ดีหมี +ดีหลี +ดีเกลือฝรั่ง +ดีเซมเบอร์ +ดีเซล +ดีเทล +ดีเปรสชัน +ดีเปรสชั่น +ดีเลย์ +ดีเอ็นเอ +ดีแตก +ดีแล้ว +ดีโมเครซี +ดีใจ +ดีไซน์ +ดีไซเนอร์ +ดีๆ +ดี้ +ดึก +ดึกดำบรรพ์ +ดึกดื่น +ดึง +ดึงดัน +ดึงดูด +ดึงส +ดึงสะ +ดึ่ง +ดึ่ม +ดือ +ดื่น +ดื่นดาษ +ดื่ม +ดื่มด่ำ +ดื้อ +ดื้อยา +ดุ +ดุก +ดุกดิก +ดุจ +ดุจดัง +ดุชชานเบ +ดุด +ดุดัน +ดุน +ดุบ +ดุบๆ +ดุม +ดุรค +ดุรงคี +ดุรงค์ +ดุริย +ดุริยะ +ดุริยางคศาสตร์ +ดุริยางคศิลป์ +ดุริยางค์ +ดุร้าย +ดุล +ดุลการค้า +ดุลการชำระเงิน +ดุลพินิจ +ดุลภาค +ดุลย +ดุลยพินิจ +ดุลยภาพ +ดุลอำนาจ +ดุษฎี +ดุษฎีนิพนธ์ +ดุษฎีบันฑิต +ดุษณี +ดุษิต +ดุสิต +ดุสิตาราม +ดุเหว่า +ดุ่ม +ดุ่ย +ดุ้ง +ดุ้งดิ้ง +ดุ้น +ดู +ดูกร +ดูด +ดูดดึง +ดูดาย +ดูดู๋ +ดูถูก +ดูพลิเคท +ดูรา +ดูรึ +ดูหรู +ดูเถอะ +ดูเถิด +ดูเบา +ดูแคลน +ดูแล +ดูใจ +ด็อท +ด่วน +ด่องๆ +ด่อน +ด่อม +ด่า +ด่าง +ด่าทอ +ด่าน +ด่านขุนทด +ด่านช้าง +ด่านซ้าย +ด่านสำโรง +ด่าว +ด่ำ +ด้ง +ด้น +ด้วง +ด้วน +ด้วย +ด้อง +ด้อม +ด้อย +ด้าง +ด้าน +ด้าม +ด้าย +ด้าว +ด้ำ +ตก +ตกกระ +ตกขอบ +ตกขาว +ตกขุย +ตกข้าว +ตกคลัก +ตกค้าง +ตกงาน +ตกจั่น +ตกดิน +ตกต่ำ +ตกทอด +ตกปลอก +ตกปลัก +ตกผลึก +ตกฟาก +ตกมัน +ตกมูก +ตกยาก +ตกลง +ตกลูก +ตกว่า +ตกสนับ +ตกหนัก +ตกหมก +ตกหลุม +ตกหล่น +ตกอับ +ตกเบิก +ตกเบ็ด +ตกแต่ง +ตกแสก +ตกใจ +ตกใน +ตง +ตงฉิน +ตงิด +ตงุ่น +ตจสาร +ตจะ +ตจะเนตร +ตด +ตติย +ตถาคต +ตน +ตนัย +ตนุ +ตนเอง +ตบ +ตบตา +ตบมือ +ตบยุง +ตบะ +ตบเท้า +ตบแต่ง +ตบแผละ +ตปนียะ +ตม +ตมูก +ตยาค +ตยาคี +ตยุติ +ตรง +ตรณี +ตรม +ตรมตรอม +ตรมวล +ตรรก +ตรรกวิทยา +ตรรกศาสตร์ +ตรรกะ +ตรลบ +ตรลอด +ตรละ +ตรลา +ตรลาด +ตรวจ +ตรวจการณ์ +ตรวด +ตรวน +ตรวย +ตรอก +ตรอง +ตรอน +ตรอม +ตรอมตรม +ตรอมใจ +ตระ +ตระกรน +ตระกร้อ +ตระกล +ตระกวน +ตระกอง +ตระกัด +ตระการ +ตระการพืชผล +ตระกูล +ตระคัร +ตระจัก +ตระชัก +ตระดก +ตระดาษ +ตระนาว +ตระบก +ตระบอก +ตระบอง +ตระบะ +ตระบัด +ตระบัน +ตระพอง +ตระพัง +ตระวัน +ตระสัก +ตระหง่าน +ตระหนก +ตระหนัก +ตระหนี่ +ตระหลบ +ตระอร +ตระอาล +ตระเบ็ง +ตระเวน +ตระแบก +ตระแบง +ตระแบน +ตระแบ่ +ตระโบม +ตระโมจ +ตระโอม +ตระไน +ตรัง +ตรังค +ตรับ +ตรัย +ตรัยตรึงส์ +ตรัส +ตรัสรู้ +ตรัสสา +ตรา +ตรากตรำ +ตราจอง +ตราชู +ตราด +ตราบ +ตราบาป +ตรายาง +ตราสัง +ตราสาร +ตราสิน +ตราแดง +ตรำ +ตริ +ตริตรอง +ตรินิแดด +ตริว +ตริสตานดาคุนยา +ตริโกณมิติ +ตริโปลี +ตรี +ตรีกาล +ตรีกูฏ +ตรีคูณ +ตรีชาต +ตรีทศ +ตรีทิพ +ตรีทูต +ตรีบถ +ตรีบูร +ตรีปวาย +ตรีปิฎก +ตรีผลา +ตรีภพ +ตรีภูว +ตรีมิตร +ตรียมก +ตรียัมปวาย +ตรีศก +ตรีศูล +ตรีสมอ +ตรีสาร +ตรีเนตร +ตรีเพชร +ตรีโกณ +ตรีโกณมิติ +ตรีโทษ +ตรีโลก +ตรึก +ตรึง +ตรึงตรา +ตรึงศ +ตรุ +ตรุณ +ตรุย +ตรุษ +ตรุษจ +ตรู +ตรู่ +ตรเลิด +ตร่ำ +ตฤณ +ตฤณชาติ +ตฤณมัย +ตฤตีย +ตฤท +ตฤป +ตฤษณา +ตฤา +ตฤๅ +ตล +ตลก +ตลบ +ตลบตะแลง +ตลบนก +ตลบแตลง +ตลอด +ตละ +ตละแม่ +ตลับ +ตลาด +ตลาดพลู +ตลาดสด +ตลาดหลักทรัพย์ +ตลิ่ง +ตลิ่งชัน +ตลึง +ตวง +ตวัก +ตวัด +ตวาด +ตอ +ตอก +ตอกย้ำ +ตอง +ตองกา +ตองตอย +ตองแตก +ตอด +ตอดต่อ +ตอน +ตอบ +ตอบแทน +ตอบโต้ +ตอม +ตอม่อ +ตอร์ปิโด +ตอเบา +ตอแย +ตอแหล +ตะ +ตะกง +ตะกรน +ตะกรวย +ตะกรัน +ตะกรับ +ตะกราม +ตะกรุด +ตะกรุม +ตะกร้อ +ตะกร้า +ตะกละ +ตะกลาม +ตะกล่ำ +ตะกวด +ตะกอ +ตะกอน +ตะกัง +ตะกั่ว +ตะกั่วทุ่ง +ตะกั่วป่า +ตะกั่วแดง +ตะกาง +ตะกาด +ตะกาย +ตะกาว +ตะกี้ +ตะกุกตะกัก +ตะกุย +ตะกู +ตะกูด +ตะขบ +ตะขอ +ตะขาบ +ตะขิดตะขวง +ตะครอง +ตะคริว +ตะครุบ +ตะคร้อ +ตะคร้ำ +ตะคอก +ตะคัน +ตะคาก +ตะคาง +ตะคุ่ม +ตะค้า +ตะค้าน +ตะติน +ตะนอย +ตะนาว +ตะบม +ตะบอง +ตะบอย +ตะบัน +ตะบิด +ตะบิ้ง +ตะบึง +ตะบุ้ย +ตะบูน +ตะปบ +ตะปลิง +ตะปิ้ง +ตะปุ่มตะป่ำ +ตะปู +ตะพง +ตะพด +ตะพอง +ตะพัก +ตะพัง +ตะพัด +ตะพั้น +ตะพาก +ตะพาน +ตะพานหิน +ตะพาบ +ตะพาบน้ำ +ตะพาย +ตะพึด +ตะพึดตะพือ +ตะพุ่น +ตะมอย +ตะม่อ +ตะรัง +ตะราง +ตะลอง +ตะลอน +ตะละ +ตะลาน +ตะลิบ +ตะลีตะลาน +ตะลีตาเหลือก +ตะลึง +ตะลุง +ตะลุม +ตะลุมบอน +ตะลุมพุก +ตะลุย +ตะลุ่ม +ตะล่อม +ตะวัน +ตะวันออกกลาง +ตะวันออกใกล้ +ตะวันออกไกล +ตะวาง +ตะหงิด +ตะหลิว +ตะหลุก +ตะหลุง +ตะเกียกตะกาย +ตะเกียง +ตะเกียบ +ตะเขิง +ตะเข็บ +ตะเข้ +ตะเคียน +ตะเคียว +ตะเฆ่ +ตะเบ็ง +ตะเบ๊ะ +ตะเพรา +ตะเพิง +ตะเพิด +ตะเพิ่น +ตะเพียน +ตะเภา +ตะเลง +ตะเวน +ตะแก +ตะแกรง +ตะแคง +ตะแง้ +ตะแบก +ตะแบง +ตะโก +ตะโกก +ตะโกดำ +ตะโกน +ตะโกรง +ตะโกรม +ตะโก้ +ตะโขง +ตะโบม +ตะโพก +ตะโพง +ตะโพน +ตะโหงก +ตะใภ้ +ตะไกร +ตะไคร่ +ตะไคร้ +ตะไบ +ตะไล +ตัก +ตักกะ +ตักตวง +ตักบาตร +ตักษณ +ตักษณี +ตักษัย +ตัง +ตังค์ +ตังฉ่าย +ตังติด +ตังวาย +ตังสิว +ตังเก +ตังเม +ตังโอ๋ +ตัจฉก +ตัจฉนี +ตัณฑุล +ตัณหา +ตัด +ตัดขาด +ตัดตอน +ตัดถนน +ตัดทาง +ตัดบท +ตัดผม +ตัดพ้อ +ตัดรอน +ตัดสิน +ตัดใจ +ตัดไพ่ +ตัตว +ตัถย์ +ตัน +ตันตระ +ตันติ +ตันหยง +ตับ +ตัว +ตัวกลาง +ตัวการ +ตัวดี +ตัวตืด +ตัวนาง +ตัวนำ +ตัวประกอบ +ตัวผู้ +ตัวพระ +ตัวยง +ตัวยืน +ตัวลีน +ตัวอย่าง +ตัวเลข +ตัวเอก +ตัวแทน +ตัวแปร +ตัวไม้ +ตั่ง +ตั้ง +ตั้งฉ่าย +ตั้งอิ้ว +ตั้งแต่ +ตั้งใจ +ตั้วเฮีย +ตั้วโผ +ตั๊กแตน +ตั๋ว +ตา +ตาก +ตากตน +ตากบ +ตากฟ้า +ตากลม +ตากลับ +ตากลิ้ง +ตากล้า +ตากวาง +ตากสิน +ตากุ้ง +ตากใบ +ตาขวาง +ตาขอ +ตาขาว +ตาข่าย +ตาคม +ตาคลี +ตาค้าง +ตาง +ตางัว +ตาชั่ง +ตาช้าง +ตาด +ตาตั้ง +ตาตี่ +ตาตุ่ม +ตาถั่ว +ตาทวด +ตาทัพ +ตาน +ตานหก +ตานี +ตาน้ำ +ตาบ +ตาบทับ +ตาบทิศ +ตาบอด +ตาปลา +ตาปี +ตาปู +ตาฝั่ง +ตาฝาด +ตาพระยา +ตาพร่า +ตาพอง +ตาม +ตามที +ตามพ +ตามพะ +ตามะแน +ตามิน +ตามใจ +ตาย +ตายขาน +ตายขุย +ตายซาก +ตายตัว +ตายฝอย +ตายราบ +ตายลาภ +ตายห่า +ตายโคม +ตายโหง +ตายใจ +ตาราง +ตาราวา +ตาราไต +ตาริ้ว +ตาร้าย +ตาร์ท +ตาล +ตาลปัตร +ตาลม +ตาลอ +ตาลอย +ตาลาน +ตาลาย +ตาลีตาลาน +ตาลีตาเหลือก +ตาลุ +ตาลุก +ตาลุช +ตาว +ตาส่อน +ตาหนา +ตาหนู +ตาหยี +ตาหวาน +ตาฬ +ตาอ้อย +ตาฮิตี +ตาเข +ตาเต็ง +ตาเรือ +ตาเสือ +ตาเหลว +ตาเหลือก +ตาเหล่ +ตาเอก +ตาแข็ง +ตาแดง +ตาโก้ง +ตาโต +ตาโป่ง +ตาไก่ +ตำ +ตำตา +ตำนาน +ตำบล +ตำรวจ +ตำรวจนครบาล +ตำรับ +ตำรา +ตำรุ +ตำลึง +ตำส้ม +ตำหนัก +ตำหนักใต้ +ตำหนิ +ตำหระ +ตำหรับ +ตำเนิน +ตำเสา +ตำแบ +ตำแย +ตำแยแ +ตำแหน่ง +ตำแหน่งที่ตั้ง +ติ +ติก +ติกาหรัง +ติกาหลัง +ติง +ติงส +ติฉิน +ติณ +ติด +ติดขัด +ติดตลก +ติดตัว +ติดตา +ติดตาม +ติดต่อ +ติดบวก +ติดปาก +ติดพัน +ติดมือ +ติดลบ +ติดลม +ติดสัด +ติดใจ +ติดไฟ +ติดๆ +ติตติก +ติตติร +ติตถ +ติตรอง +ติถี +ตินอส +ติปา +ติปาถะ +ติมอร์ +ติมิ +ติรัจฉาน +ติรานา +ติร์เรเนียน +ติล +ติลก +ติลอส +ติว +ติวานนท์ +ติวเตอร์ +ติเนียน +ติ่ง +ติ่งหู +ติ้ง +ติ้ว +ติ๊ก +ติ๋ง +ตี +ตีกาก +ตีกิน +ตีขนาบ +ตีขลุม +ตีความ +ตีคอ +ตีคู่ +ตีจาก +ตีชิง +ตีตรวน +ตีตั๋ว +ตีตื้น +ตีต่าง +ตีทอง +ตีน +ตีนกา +ตีนคู้ +ตีนจก +ตีนจ้ำ +ตีนนก +ตีนผี +ตีนแรด +ตีบ +ตีปีก +ตีผี +ตีผึ้ง +ตีมอง +ตีรถะ +ตีระ +ตีรั้ง +ตีวง +ตีสนิท +ตีหน้า +ตีห่าง +ตีอวน +ตีเสมอ +ตีเส้น +ตีแตะ +ตีแปลง +ตีแผ่ +ตีโต้ +ตีไก่ +ตี่ +ตี่ใบ้ +ตี๋ +ตึ +ตึก +ตึกระฟ้า +ตึกแถว +ตึกๆ +ตึง +ตึงตัง +ตึงตัว +ตึงเครียด +ตึดตื๋อ +ตึตัง +ตึ้ก +ตึ้กตั้ก +ตึ้ง +ตึ๊ก +ตึ๊ดตื๋อ +ตืด +ตือ +ตือฮวน +ตื่น +ตื้น +ตื้อ +ตื๊อ +ตื๋อ +ตุ +ตุกติก +ตุง +ตุงไฮ +ตุตัง +ตุน +ตุนาหงัน +ตุบ +ตุบๆ +ตุปัดตุป่อง +ตุมกา +ตุมตัง +ตุมพ +ตุรกี +ตุรค +ตุรงค +ตุลสิ +ตุลา +ตุลาการ +ตุลาคม +ตุหรัดตุเหร่ +ตุ่น +ตุ่ม +ตุ่ย +ตุ่ยๆ +ตุ้ง +ตุ้งก่า +ตุ้งติ้ง +ตุ้บ +ตุ้บตั้บ +ตุ้ม +ตุ้มหู +ตุ้ย +ตุ้ยนุ้ย +ตุ๊ +ตุ๊ก +ตุ๊กตา +ตุ๊กตุ่น +ตุ๊กตุ๋ย +ตุ๊กแก +ตุ๊ด +ตุ๊ดตู่ +ตุ๊ต๊ะ +ตุ๊บป่อง +ตุ๊ย +ตุ๋น +ตุ๋ม +ตุ๋ยตุ่ย +ตู +ตูก +ตูข้า +ตูด +ตูดงอน +ตูนิส +ตูนิเซีย +ตูบ +ตูม +ตูมตาม +ตูหนา +ตูอาโมตู +ตู่ +ตู่ตัว +ตู้ +ตู้จดหมาย +ตโมนุท +ตโมหร +ตโมฬาร +ต่วน +ต่อ +ต่อกร +ต่อง +ต่องแต่ง +ต่อตา +ต่อตาม +ต่อตี +ต่อม +ต่อย +ต่อว่า +ต่อสู้ +ต่อไส้ +ต่าง +ต่างด้าว +ต่างๆ +ต่าน +ต่ำ +ต่ำช้า +ต่ำตน +ต่ำต้อย +ต่ำใจ +ต้น +ต้นกล +ต้นคอ +ต้นคิด +ต้นฉบับ +ต้นตอ +ต้นตาล +ต้นทาง +ต้นทุน +ต้นน้ำ +ต้นบท +ต้นมะขาม +ต้นมือ +ต้นสน +ต้นหน +ต้นแทน +ต้นแบบ +ต้นไทร +ต้นไม้ +ต้ม +ต้มข่า +ต้มยำ +ต้มสุก +ต้มส้ม +ต้วม +ต้วมเตี้ยม +ต้อ +ต้อกระจก +ต้อง +ต้องการ +ต้องตา +ต้องหา +ต้องเต +ต้องใจ +ต้อน +ต้อนรับ +ต้อย +ต้อยติ่ง +ต้อยตีวิด +ต้อลำไย +ต้อลิ้นหมา +ต้อหิน +ต้อเนื้อ +ต้าน +ต้านทาน +ต้าย +ต้ำปุก +ต้ำผาง +ต๊กโต +ต๊อก +ต๊อกต๋อย +ต๋ง +ต๋อม +ต๋อมแต๋ม +ถก +ถกล +ถกเขมร +ถงัน +ถงาด +ถด +ถดถอย +ถนน +ถนอม +ถนอมมิตร +ถนัด +ถนัดถนี่ +ถนัดใจ +ถนัน +ถนำ +ถนำทึก +ถนิม +ถบดี +ถม +ถมถืด +ถมทอง +ถมปัด +ถมอ +ถมึง +ถมึงทึง +ถมเงิน +ถมเถ +ถมไป +ถล +ถลก +ถลน +ถลม +ถลอก +ถลัน +ถลา +ถลาก +ถลาง +ถลาย +ถลำ +ถลำตัว +ถลำใจ +ถลีถลำ +ถลึง +ถลึงตา +ถลุง +ถลุน +ถล่ม +ถวัด +ถวัล +ถวัลย์ +ถวัลย์ศักดิ์ +ถวาย +ถวายกร +ถวิน +ถวิล +ถวิลหา +ถอก +ถอง +ถอด +ถอดถอน +ถอดรหัส +ถอดรูป +ถอดสี +ถอดไพ่ +ถอน +ถอนทุน +ถอนพิษ +ถอนยวง +ถอนสมอ +ถอบ +ถอบแถบ +ถอย +ถอยฉะ +ถอยฉาก +ถอยถด +ถอยทด +ถอยทัพ +ถะ +ถะกัด +ถะถับ +ถะถั่น +ถะเกิน +ถะโกน +ถัก +ถัง +ถังซำจั๋ง +ถัณฑิล +ถัด +ถัทธ +ถัน +ถับ +ถัมถ์ +ถัมภ์ +ถัว +ถั่ง +ถั่น +ถั่นๆ +ถั่ว +ถั่วข +ถั่วงอก +ถั่วดำ +ถั่วนา +ถั่วฝักยาว +ถั่วพู +ถั่วเพาะ +ถา +ถาก +ถากถาง +ถาง +ถาด +ถาน +ถาบ +ถาม +ถามติง +ถามะ +ถามไถ่ +ถาวร +ถาวรธวัช +ถาวรวัตถุ +ถาโถม +ถิร +ถิ่น +ถิ่นฐาน +ถีน +ถีบ +ถีบฉัด +ถีบตัว +ถีบทาง +ถีบรถ +ถี่ +ถี่ถ้วน +ถี่ยิบ +ถึก +ถึง +ถึงกัน +ถึงฆาต +ถึงที่ +ถึงผ้า +ถึงว่า +ถึงแก่ +ถึงใจ +ถือ +ถือดี +ถือตัว +ถือบวช +ถือปูน +ถือผิว +ถือพล +ถือยศ +ถือว่า +ถือศีล +ถือสา +ถือหาง +ถือใจ +ถุง +ถุงมือ +ถุงเท้า +ถุน +ถุย +ถุล +ถู +ถูก +ถูกกัน +ถูกขา +ถูกคอ +ถูกคู่ +ถูกตา +ถูกปาก +ถูกใจ +ถูป +ถูล +ถูไถ +ถ่ม +ถ่วง +ถ่อ +ถ่อง +ถ่องแท้ +ถ่อม +ถ่อย +ถ่าง +ถ่างตา +ถ่าน +ถ่านหิน +ถ่านโค้ก +ถ่าย +ถ่ายทอด +ถ่ายยา +ถ่ายเท +ถ่าว +ถ้วน +ถ้วย +ถ้อ +ถ้อง +ถ้อถอย +ถ้อย +ถ้อยคำ +ถ้อยแถลง +ถ้า +ถ้าว่า +ถ้ำ +ถ้ำชา +ถ้ำมอง +ทก +ทกล้า +ทงัน +ทชี +ทฐิกะ +ทด +ทดถอย +ทดรอง +ทดลอง +ทดสอบ +ทดเลข +ทดแทน +ทธิ +ทน +ทนดี +ทนตกาษ +ทนต์ +ทนทาน +ทนาย +ทนายความ +ทนโท่ +ทบ +ทบทวน +ทบวง +ทม +ทมิฬ +ทยอย +ทยา +ทยาลุ +ทยาลุก +ทร +ทรกรรม +ทรง +ทรงกลด +ทรงตัก +ทรงตัว +ทรงธรรม +ทรงมัน +ทรงวาด +ทรงสะอาดนิเวศน์ +ทรชน +ทรชาติ +ทรทึง +ทรธึก +ทรพล +ทรพิษ +ทรพี +ทรมาน +ทรมุก +ทรยศ +ทรยุค +ทรรทึง +ทรรป +ทรรปณ์ +ทรรศนะ +ทรรศนาการ +ทรราช +ทรลักษณ์ +ทรวง +ทรวงอก +ทรวด +ทรวดทรง +ทรวาร +ทรสาย +ทรสุม +ทรหด +ทรหน +ทรหวล +ทรหึง +ทรหู +ทรอ +ทรอมโบน +ทรอึง +ทรอุ้ม +ทระนง +ทระนาว +ทรัพย +ทรัพยากร +ทรัพยากรธรณี +ทรัพยากรธรรมชาติ +ทรัพย์ +ทรัพย์สิน +ทรัมเปต +ทรัมเป็ต +ทรัสต์ +ทรานซิสเตอร์ +ทรานสปอร์ต +ทรานสฟอร์เมอร์ +ทรานสเฟอร์ +ทรานสเลต +ทราบ +ทราม +ทรามชม +ทรามวัย +ทราย +ทรายมูล +ทริค +ทริทร +ทรีทเมนท์ +ทรุด +ทรุม +ทรู่ +ทรเหล +ทฤฆ +ทฤษฎี +ทฤษฎีบท +ทล +ทลาย +ทวง +ทวงถาม +ทวด +ทวน +ทวนทบ +ทวนสบถ +ทวย +ทวยะ +ทวยโถง +ทวอย +ทวัย +ทวา +ทวาทศ +ทวาทศม +ทวาทศี +ทวาบร +ทวาย +ทวาร +ทวารบถ +ทวาเรศ +ทวิ +ทวิช +ทวิชาติ +ทวิตีย +ทวิบถ +ทวิบท +ทวิบาท +ทวิป +ทวิภาค +ทวิภาคี +ทวิร +ทวี +ทวีคูณ +ทวีธาภิเษก +ทวีป +ทวีปี +ทวีมิตร +ทวีสิทธิ์ +ทวีเชิดชู +ทว่า +ทศ +ทศชาติ +ทศทิศ +ทศนิยม +ทศพร +ทศพล +ทศมาส +ทศมี +ทศวรรษ +ทศางค์ +ทสา +ทหาร +ทหารผ่านศึก +ทหารไทย +ทอ +ทอก +ทอง +ทองกร +ทองกวาว +ทองขาว +ทองคำ +ทองคำขาว +ทองชุบ +ทองดำ +ทองทศ +ทองทึบ +ทองนพคุณ +ทองนาปรัง +ทองบน +ทองบรอนซ์ +ทองผาภูมิ +ทองพลุ +ทองพิศ +ทองภู +ทองลิน +ทองศาลางาม +ทองสุทธาราม +ทองหลาง +ทองหล่อ +ทองอุไร +ทองเกษร +ทองเค +ทองเพลง +ทองเสน +ทองเอก +ทองแดง +ทองแป +ทองใน +ทองใบ +ทอด +ทอดตัว +ทอดตา +ทอดที่ +ทอดน้ำ +ทอดมัน +ทอดยอด +ทอดรวง +ทอดสกา +ทอดสมอ +ทอดแห +ทอน +ทอนซิล +ทอฟฟี่ +ทอม +ทอมซอไนต์ +ทอย +ทอยกอง +ทอร์นาโด +ทอร์เบอร์ไนต์ +ทอล์ค +ทอหูก +ทอเรียม +ทอเรียไนต์ +ทอแสง +ทอไรต์ +ทะ +ทะงัน +ทะทัด +ทะทา +ทะทาย +ทะทึก +ทะท่าว +ทะท้าว +ทะนง +ทะนงศักดิ์ +ทะนน +ทะนะ +ทะนาน +ทะนุ +ทะนุก +ทะนุถนอม +ทะนุบำรุง +ทะบู +ทะมัดทะแมง +ทะมึน +ทะมื่น +ทะยาน +ทะลวง +ทะลอก +ทะลัก +ทะลาย +ทะลิ่น +ทะลึ่ง +ทะลุ +ทะวาย +ทะเบียน +ทะเยอทะยาน +ทะเล +ทะเลขาว +ทะเลจีน +ทะเลจีนใต้ +ทะเลญี่ปุ่น +ทะเลดำ +ทะเลภายใน +ทะเลสาบ +ทะเลหลวง +ทะเลอาณาเขต +ทะเลาะ +ทะเลเหนือ +ทะเลเหลือง +ทะเลแดง +ทะเลใน +ทะเลไหล่ทวีป +ทะเล่อทะล่า +ทะเล้น +ทะเวน +ทะแม่ง +ทะแม่งๆ +ทะแย +ทัก +ทักขิญ +ทักขิณ +ทักขิณา +ทักขิณาวัฏ +ทักขิโณทก +ทักขิไณยบุคคล +ทักข์ +ทักซิโด +ทักทาย +ทักทิน +ทักท้วง +ทักษ +ทักษะ +ทักษา +ทักษิณ +ทักษิณา +ทักษิณาวรรต +ทักษิโณทก +ทัคธ์ +ทัง +ทังวล +ทังสเตน +ทัช +ทัณฑ +ทัณฑกรรม +ทัณฑฆาต +ทัณฑนิคม +ทัณฑวิทยา +ทัณฑสถาน +ทัณฑะ +ทัณฑ์ +ทัณฑ์บน +ทัด +ทัดทา +ทัดทาน +ทัดเทียม +ทัต +ทัน +ทันกิน +ทันต +ทันตชะ +ทันตา +ทันติน +ทันตแพทย์ +ทันต์ +ทันที +ทันธ์ +ทันน้ำ +ทันใจ +ทันใด +ทับ +ทับถม +ทับทรวง +ทับทอง +ทับทาง +ทับทิม +ทับที่ +ทับปุด +ทับสมิงคลา +ทับสะแก +ทับเจริญ +ทับแก้ว +ทับแพ +ทัป +ทัปน +ทัพ +ทัพทัน +ทัพพะ +ทัพพี +ทัลก์ +ทัวร์ +ทัวร์มาลีน +ทัศ +ทัศน +ทัศนคติ +ทัศนวิสัย +ทัศนศาสตร์ +ทัศนศึกษา +ทัศนะ +ทัศนา +ทัศนาการ +ทัศนาจร +ทัศนีย +ทัศนียภาพ +ทัศนีย์ +ทัศนูปกรณ์ +ทัศน์ +ทัศไนย +ทัฬห +ทั่ง +ทั่ว +ทั่วไป +ทั้ง +ทั้งคน +ทั้งที +ทั้งนี้ +ทั้งหมด +ทั้งเพ +ทา +ทาก +ทาง +ทางการ +ทางด่วน +ทางม้าลาย +ทางรถไฟเก่า +ทางหลวง +ทางออก +ทางเท้า +ทางเอก +ทางโท +ทางใน +ทาจิกีสถาน +ทาซอส +ทาฐะ +ทาฐิกะ +ทาฒะ +ทาฒิกะ +ทาน +ทานตะวัน +ทานต์ +ทานบดี +ทานบน +ทานบารมี +ทานพ +ทานมัย +ทานศีล +ทานสัมฤทธิ์พัฒนา +ทานาธิบดี +ทานานารีฟ +ทาบ +ทาบทาม +ทาม +ทาย +ทายก +ทายัช +ทายา +ทายาด +ทายาท +ทายิกา +ทาร +ทารก +ทารพี +ทาริกา +ทารุ +ทารุณ +ทาร์ซาน +ทาร์เกท +ทาลลิน +ทาว +ทาวน์ +ทาวเวอร์ +ทาษ +ทาส +ทาสทาน +ทาสปัญญา +ทาสี +ทำ +ทำกรรม +ทำการ +ทำขวัญ +ทำครัว +ทำคลอด +ทำความ +ทำคุณ +ทำงน +ทำงาน +ทำตัว +ทำตา +ทำท่า +ทำนบ +ทำนวย +ทำนอง +ทำนาย +ทำนุ +ทำนูล +ทำบาป +ทำบุญ +ทำพิษ +ทำฟัน +ทำมัง +ทำร้าย +ทำลาย +ทำลิง +ทำวน +ทำวัตร +ทำสาว +ทำหมัน +ทำเจ็บ +ทำเนา +ทำเนียบ +ทำเนียม +ทำเล +ทำเวร +ทำเวลา +ทำเหตุ +ทำเอา +ทำแท้ง +ทำโทษ +ทำใจ +ทำให้ +ทำได้ +ทำไพ่ +ทำไฟ +ทำไม +ทิคัมพร +ทิฆัมพร +ทิงเจอร์ +ทิช +ทิชชู +ทิชากร +ทิฏฐะ +ทิฏฐิ +ทิฐ +ทิฐธรรม +ทิฐิ +ทิด +ทิดอร์ +ทิต +ทิน +ทินกร +ทินาท +ทิป +ทิพ +ทิพย +ทิพยจักษุ +ทิพยญาณ +ทิพยรส +ทิพยเนตร +ทิพย์ +ทิพวัลย์ +ทิพา +ทิพากร +ทิพโสต +ทิม +ทิมดาบ +ทิมทอง +ทิมฟู +ทิมแลนด์ +ทิว +ทิวกาล +ทิวงคต +ทิวทัศน์ +ทิวส +ทิวา +ทิวากร +ทิวาทิพย์ +ทิศ +ทิศทาง +ทิศา +ทิศาดร +ทิศานุทิศ +ทิเบต +ทิ่ม +ทิ่มตำ +ทิ้ง +ที +ทีฆ +ทีฆชาติ +ทีฆายุ +ทีท่า +ทีนี้ +ทีนเอจ +ทีป +ทีม +ทีรฆ +ทีวี +ทีหลัง +ทีเด็ด +ทีเอนที +ที่ +ที่ดิน +ที่ทาง +ที่ทำการ +ที่นอน +ที่พัก +ที่มา +ที่รัก +ที่ราบ +ที่ราบสูง +ที่สุด +ที่แท้ +ที่ไหน +ทึก +ทึกทัก +ทึดทือ +ทึนทึก +ทึบ +ทึม +ทึ่ง +ทึ่ม +ทึ้ง +ทื่อ +ทุ +ทุก +ทุกข +ทุกขนิโรธ +ทุกขลาภ +ทุกขสมุทัย +ทุกขารมณ์ +ทุกขเวทนา +ทุกข์ +ทุกฎ +ทุกที +ทุกนิบาต +ทุกพาย +ทุกร +ทุกรกิริยา +ทุกษดร +ทุกหน +ทุกัง +ทุกูล +ทุคตะ +ทุคติ +ทุงเทง +ทุจริต +ทุด +ทุติย +ทุทรรศนนิยม +ทุน +ทุนนอน +ทุนนิมิต +ทุนนิยม +ทุนรอน +ทุนสำรอง +ทุนสำรองเงินตรา +ทุนหมุนเวียน +ทุนิยม +ทุบ +ทุบตี +ทุบทู +ทุพพล +ทุพพลภาพ +ทุพภิกขภัย +ทุม +ทุมโน +ทุย +ทุร +ทุรกันดาร +ทุรคม +ทุรชน +ทุรชาติ +ทุรน +ทุรนทุราย +ทุรพล +ทุรัศ +ทุราคม +ทุลักทุเล +ทุวิธ +ทุศีล +ทุษฐ +ทุส +ทุสสีล +ทุเรศ +ทุเรียน +ทุเลา +ทุ่ง +ทุ่งช้าง +ทุ่งตะโก +ทุ่งฝน +ทุ่งมหาเมฆ +ทุ่งยางแดง +ทุ่งลานนา +ทุ่งสง +ทุ่งสองห้อง +ทุ่งหว้า +ทุ่งหัวช้าง +ทุ่งเสรี +ทุ่งเสลี่ยม +ทุ่งใหญ่ +ทุ่น +ทุ่ม +ทุ่มเท +ทุ้ง +ทุ้ม +ทุ้ย +ทู +ทูกัง +ทูต +ทูตานุทูต +ทูน +ทูนหัว +ทูน่า +ทูบ +ทูม +ทูมทาม +ทูร +ทูล +ทูลเกล้าฯ +ทูษก +ทูเลียม +ทูโม่ง +ทูไลต์ +ทู่ +ทู่ซี้ +ทู้ +ทเมิน +ทแกล้ว +ทแยง +ทโมน +ทไวไลท์ +ท็อกซิน +ท็อยเล็ท +ท่ง +ท่วง +ท่วงทำนอง +ท่วงที +ท่วงท่า +ท่วม +ท่วมท้น +ท่วย +ท่อ +ท่อง +ท่องจำ +ท่องสือ +ท่อน +ท่อม +ท่อมๆ +ท่า +ท่าคันโท +ท่าฉาง +ท่าชนะ +ท่าช้าง +ท่าดินแดง +ท่าตะโก +ท่าตูม +ท่าทราย +ท่าทาง +ท่าที +ท่าน +ท่านผู้หญิง +ท่าน้ำ +ท่าน้ำนนทบุรี +ท่าบ่อ +ท่าปลา +ท่าพระ +ท่ามกลาง +ท่ามะกา +ท่าม่วง +ท่ายาง +ท่าลี่ +ท่าว +ท่าวังผา +ท่าวุ้ง +ท่าศาลา +ท่าสองยาง +ท่าอุเทน +ท่าเรือ +ท่าเรือวิทยา +ท่าแชะ +ท่าแพ +ท่าใหม่ +ท้น +ท้วง +ท้วน +ท้วม +ท้วย +ท้อ +ท้อง +ท้องคุ้ง +ท้องฟ้า +ท้อถอย +ท้อแท้ +ท้อใจ +ท้า +ท้าง +ท้าทาย +ท้าย +ท้ายทอย +ท้ายฝน +ท้ายวัง +ท้ายเมือง +ท้ายเหมือง +ท้าว +ธง +ธงก์ +ธงฉาน +ธงชัย +ธงชาติ +ธงชาย +ธชี +ธตรฐ +ธน +ธนธานี +ธนบดี +ธนบัตร +ธนบุรี +ธนบุรีวรเทพีพลารักษ์ +ธนสมบัติ +ธนสาร +ธนัง +ธนากร +ธนาคม +ธนาคาร +ธนาคารโลก +ธนาณัติ +ธนารักษ์ +ธนิต +ธนิยะ +ธนิษฐา +ธนุ +ธนู +ธนูทัย +ธม +ธร +ธรณิน +ธรณิศ +ธรณี +ธรณีนิคม +ธรณีวิทยา +ธรณีส +ธรมาน +ธรรม +ธรรมกถา +ธรรมกาย +ธรรมการ +ธรรมจรรยา +ธรรมจักร +ธรรมจารี +ธรรมชาติ +ธรรมดา +ธรรมธาตุ +ธรรมนูญ +ธรรมบท +ธรรมบาล +ธรรมมงคล +ธรรมมาราม +ธรรมวัตร +ธรรมศาสตร์ +ธรรมสภา +ธรรมสาโรช +ธรรมะ +ธรรมะธัมโม +ธรรมาทิตย์ +ธรรมาธรรม +ธรรมาธิปไตย +ธรรมาธิษฐาน +ธรรมานุสาน +ธรรมาภิมุข +ธรรมาภิสมัย +ธรรมายตนะ +ธรรมารมณ์ +ธรรมาสน์ +ธรรมิก +ธรรมเนียม +ธรา +ธราดล +ธราธร +ธราธาร +ธราธิบดี +ธราธิป +ธวัช +ธวัชบุรี +ธังก +ธัช +ธัญ +ธัญญาหาร +ธัญดัจ +ธัญบุรี +ธัญพืช +ธัญมาส +ธัญเขต +ธัญโกศ +ธันยา +ธันวา +ธันวาคม +ธันเดอร์ +ธัมมะ +ธากา +ธาดา +ธาตรี +ธาตวากร +ธาตุ +ธาตุทอง +ธาตุพนม +ธานิน +ธานินทร์ +ธานี +ธาร +ธารกำนัล +ธารณ +ธารณะ +ธารณา +ธารณามัย +ธารา +ธารโต +ธาษตรี +ธาษัตรี +ธำมรงค์ +ธำรง +ธิดา +ธิติ +ธิเบต +ธีซิส +ธีม +ธีร +ธีรภาพ +ธีรราช +ธุช +ธุดงค +ธุดงค์ +ธุต +ธุม +ธุมชาล +ธุมา +ธุรกรรม +ธุรการ +ธุรกิจ +ธุรกิจบัณฑิต +ธุระ +ธุรำ +ธุลี +ธุวดารา +ธุวภาค +ธุวมณฑล +ธูป +ธเนศ +ธเนศวร +ธเรศ +นก +นกคุ่ม +นกจาก +นกต่อ +นกรู้ +นกหก +นกหวีด +นกุล +นกเขา +นกเค้าแมว +นกแก้วน้อย +นข +นขา +นขเลขา +นคร +นครการศึกษา +นครชัยศรี +นครนายก +นครบาล +นครปฐม +นครป่าหมาก +นครพนม +นครรัฐ +นครรัฐวาติกัน +นครราชสีมา +นครวาสี +นครศรีธรรมราช +นครสวรรค์ +นครหลวง +นคราทร +นครินทร์ +นครเขื่อนขันธ์ +นครไชยศรี +นครไทย +นคสินธุ์ +นคินทร +นคเรศ +นง +นงคราญ +นงคุฐ +นงนุช +นงพะงา +นงพาล +นงพุธ +นงราม +นงลักษณ์ +นงเยาว์ +นงโพธ +นท +นที +นทีทิพย์ +นทีรัย +นนตรา +นนทบุรี +นนทรี +นนทรีวิทยา +นนทลี +นนทิ +นนทเวช +นนท์ +นบ +นบนอบ +นพ +นพกะ +นพคุณ +นพนิต +นพปฎล +นพพล +นพพวง +นพพัน +นพมาศ +นพรัตน์ +นพรัตน์ราชธานี +นพศก +นพศูล +นพเก้า +นภ +นภจร +นภดล +นภมณฑล +นภวิถี +นภศูล +นภา +นภากาศ +นภาลัย +นภาศัพท์ +นม +นมข้น +นมควาย +นมชะนี +นมช้าง +นมนาง +นมนาน +นมบอด +นมผง +นมผา +นมพวง +นมวัว +นมสาว +นมหนู +นมัสการ +นมาซ +นมแมว +นมไม้ +นยนะ +นยักษ์ +นร +นรก +นรกานต์ +นรการ +นรนาถ +นรนายก +นรบดี +นรบาล +นรพยัคฆ์ +นรราช +นรสิงห์ +นรสีห์ +นรา +นรากร +นราทร +นราธิป +นราธิวาส +นรินทร์ +นริย +นริศ +นริศร +นริศวร +นรี +นรีเวช +นรีเวชวิทยา +นรีแพทย์ +นรเทพ +นฤคหิต +นฤดม +นฤตย +นฤตย์ +นฤนาท +นฤบดี +นฤบาล +นฤป +นฤพาน +นฤมล +นฤมาณ +นฤมิต +นฤเทพ +นฤเบศ +นฤโฆษ +นลาฏ +นลิน +นลินี +นว +นวก +นวกรรม +นวกะ +นวการ +นวกิจ +นวครหะ +นวคุณ +นวชาต +นวด +นวทวาร +นวนิต +นวนิยาย +นวปฎล +นวพธู +นวม +นวมินทราชูทิศ +นวมี +นวมุข +นวย +นวยนาด +นวรัตน์ +นวล +นวลจันทร์ +นวลทอง +นวลนรดิศ +นวลลออ +นวลละออง +นวลหง +นววิธ +นวัตกรรม +นวาระ +นวโกวาท +นวโลหะ +นหาดก +นหาน +นหารุ +นหุต +นฬการ +นฬป +นอ +นอก +นอกครู +นอกคอก +นอกจาก +นอกชาน +นอกถนน +นอกรีต +นอกใจ +นอง +นอต +นอน +นอนกิน +นอนก้น +นอนนก +นอนวัน +นอนเวร +นอนโทรไนต์ +นอนโรง +นอนใจ +นอบ +นอบนบ +นอบน้อม +นอร์ม +นอร์มอล +นอร์รู +นอร์วีเจียน +นอร์เว +นอร์เวย์ +นะ +นะแน่ง +นะโปเลียน +นัก +นักกะ +นักการ +นักกีฬา +นักขัต +นักงาน +นักตะ +นักบวช +นักบิน +นักบุญ +นักพรต +นักร +นักรบ +นักศึกษา +นักษัตร +นักสนม +นักสวด +นักสืบ +นักหนา +นักเทศ +นักเรียน +นักเลง +นักโทษ +นัข +นัค +นังคัล +นัจ +นัฏ +นัฑ +นัด +นัดดา +นัดแนะ +นัตถุ์ +นัตถ์ +นันท +นันทนาการ +นันทน์ +นันทา +นันทิ +นับ +นับถือ +นัมเบอร์ +นัย +นัยนา +นัยน์ +นัยน์ตา +นัยว่า +นัว +นัวเนีย +นัสซอ +นั่ง +นั่น +นั่นซี +นั่นเอง +นั้น +นั้นแล +นา +นาก +นากบุด +นากลาง +นากาสาหรี +นาค +นาคนิวาส +นาคบาศ +นาคปรก +นาคปัก +นาคร +นาครวย +นาคราช +นาครุ่งโรจน์ +นาคลดา +นาคสุวรรณ +นาคา +นาคาว +นาคี +นาคเจริญ +นาง +นางงาม +นางจุม +นางชี +นางดำ +นางนวล +นางนอง +นางนูน +นางน้ำชน +นางพญา +นางฟ้า +นางรม +นางรอง +นางรำ +นางลอย +นางสาว +นางหงษ์ +นางอาย +นางเลิ้ง +นางเอก +นางแนบ +นางแอ +นางแอ่น +นางใน +นางไม้ +นาจะหลวย +นาซา +นาซี +นาฏ +นาฏก +นาฏกรรม +นาฏย +นาฏศิลป์ +นาฑิกา +นาด +นาดำ +นาดี +นาดูน +นาด้วง +นาตูนา +นาถ +นาท +นาทวี +นาทอง +นาที +นาน +นานนม +นานัตว +นานัปการ +นานา +นานาชาติ +นานาพรรณ +นานไฮ +นาน้อย +นาบ +นาบอน +นาปรัง +นาปี +นาภิ +นาภี +นาม +นามกร +นามธรรม +นามน +นามบัตร +นามปากกา +นามสกุล +นามสงเคราะห์ +นามานุกรม +นามาภิไธย +นามแฝง +นามไธย +นาย +นายก +นายงาน +นายจ้าง +นายทุน +นายท่า +นายธง +นายิกา +นายเวร +นายโรง +นารา +นารายณ์ +นารายณ์ภัณฑ์ +นารี +นารีผล +นาลี +นาว +นาวา +นาวิก +นาวิน +นาวี +นาศ +นาสวน +นาสา +นาสิก +นาหว้า +นาฬิกา +นาฬิเก +นาฬี +นาอูรู +นาเชือก +นาเนก +นาเรศ +นาเวศ +นาแก +นาแห้ว +นาโน +นำ +นำจับ +นำทาง +นำพา +นำร่อง +นำสมัย +นำสืบ +นำแสดง +นำไทย +นิ +นิกขะ +นิกร +นิกรอยด์ +นิกาย +นิการากัว +นิกาเรีย +นิกเกิล +นิกโคไลต์ +นิคม +นิคมคำสร้อย +นิคมที่ดิน +นิคมน้ำอูน +นิคมรถไฟ +นิคมสร้างตนเอง +นิครนถ์ +นิคส์ +นิคห +นิคหะ +นิคหิต +นิคาหก +นิง +นิจ +นิจจานุเคราะห์ +นิจศีล +นิซิรอส +นิด +นิด้า +นิต +นิตย +นิตยทาน +นิตยสาร +นิตย์ +นิติ +นิติกร +นิติกรณ์ +นิติกรรม +นิติการณ์ +นิติธรรม +นิตินัย +นิติบัญญัติ +นิติบุคคล +นิติภาวะ +นิติวิทยาศาสตร์ +นิติศาสตร์ +นิติเวชศาสตร์ +นิทร +นิทรรศ +นิทรรศการ +นิทรา +นิทัศน์ +นิทาฆ +นิทาน +นิธาน +นิธิ +นินจา +นินทา +นินนะ +นินนาท +นินหุต +นิบาต +นิปปอน +นิพจน์ +นิพนธ์ +นิพพาน +นิพัทธ +นิพัทธ์วิทยา +นิพิท +นิภา +นิมนต์ +นิมมาน +นิมมานรดี +นิมิต +นิมิตร +นิยต +นิยม +นิยยาน +นิยัตินิยม +นิยาม +นิยาย +นิยุต +นิรคุณ +นิรชร +นิรชรา +นิรทุกข์ +นิรนัย +นิรนาม +นิรภัย +นิรมล +นิรมาณ +นิรมาน +นิรมิต +นิรันดร +นิรา +นิรามัย +นิราศ +นิราศร +นิรุกติศาสตร์ +นิรุตติ +นิรุทก +นิรุทธ์ +นิรเทศ +นิรโฆษ +นิรโทษ +นิล +นิลุบล +นิวกินี +นิวคลิอิก +นิวคาลิโดเนีย +นิวจอร์เจีย +นิวซีแลนด์ +นิวตรอน +นิวบริเตน +นิวฟันด์แลนด์ +นิวมอเนีย +นิวยอร์ก +นิวยอร์ค +นิวรณ์ +นิวัต +นิวัตน์ +นิวาต +นิวาส +นิวเคลียร์ +นิวเคลียส +นิวเจอร์ซี +นิวเซาท์เวลส์ +นิวเดลฮี +นิวเมติค +นิวเม็กซิโก +นิวเวิลด์ +นิวแฮมป์เชียร์ +นิวแฮโนเวอร์ +นิวไซบีเรียน +นิวไอร์แลนด์ +นิศา +นิศากร +นิศาคม +นิศาชล +นิศาทิ +นิษกรม +นิษาท +นิสภ +นิสัช +นิสัย +นิสาท +นิสิต +นิสีทน +นิเคราะห์ +นิเทศ +นิเทศศาสตร์ +นิเพท +นิเวศ +นิเวศน์ +นิเวศวิทยา +นิเสธ +นิโกร +นิโกเซีย +นิโคติน +นิโคบาร์ +นิโครธ +นิโครม +นิโรช +นิโรธ +นิโลตบล +นิโลบล +นิโอ +นิ่ง +นิ่ม +นิ่ว +นิ้ม +นิ้ว +นี +นีติ +นีรจร +นีรช +นีรนาท +นีออน +นีอาเม +นีอีฮาอู +นีโอดิเนียม +นีโอดิเมียม +นีโอดีเมียม +นี่ +นี่นัน +นี่เอง +นี้ +นึก +นึกคิด +นึกดู +นึกถึง +นึกออก +นึง +นึ่ง +นุ +นุง +นุงถุง +นุงนัง +นุช +นุชเนตร +นุด +นุต +นุ่ง +นุ่น +นุ่ม +นุ้ย +นูกัวโลฟา +นูน +นูแอกชอต +นู่น +นู้น +นเคศวร +นเรศ +นเรศวร +นเรศูร +นโคทร +นโยบาย +นโรดม +น็อค +น็อต +น่วม +น่อง +น่า +น่าชัง +น่าน +น่านน้ำอาณาเขต +น่าย +น้อง +น้องๆ +น้อม +น้อมจิตร +น้อมนำ +น้อมเกล้าฯ +น้อย +น้อยนพคุณ +น้อยห +น้อยหน่า +น้อยโหน่ง +น้อยใจ +น้า +น้าว +น้ำ +น้ำกรด +น้ำกาม +น้ำขาว +น้ำครำ +น้ำคำ +น้ำค้าง +น้ำค้างแข็ง +น้ำชน +น้ำชุบ +น้ำซับ +น้ำซึม +น้ำดิบ +น้ำดี +น้ำตก +น้ำตับ +น้ำตา +น้ำตาย +น้ำตาล +น้ำทรง +น้ำท่า +น้ำนม +น้ำนวล +น้ำนอง +น้ำปลา +น้ำปาด +น้ำป่า +น้ำพอง +น้ำพุ +น้ำมนตร์ +น้ำมนต์ +น้ำมัน +น้ำมือ +น้ำมูก +น้ำยา +น้ำยืน +น้ำรัก +น้ำลง +น้ำลาย +น้ำวน +น้ำว้า +น้ำสุก +น้ำส้ม +น้ำหอม +น้ำอบ +น้ำเคย +น้ำเงิน +น้ำเมา +น้ำแข็งแห้ง +น้ำแร่ +น้ำโบย +น้ำโสม +น้ำใจ +น้ำไทย +น้ำไว +บก +บกพร่อง +บง +บงกช +บงกชกร +บงการ +บงก์ +บงสุ +บงสุ์ +บด +บดขยี้ +บดบัง +บดินทรเดชา +บดินทร์ +บดินทร์เดชา +บดี +บดีพรต +บดีศร +บท +บทกลอน +บทความ +บทคัดย่อ +บทจร +บทนำ +บทบงกช +บทบรรณาธิการ +บทบัญญัติ +บทบาท +บทรัช +บทร้อง +บทวาร +บทวเรศ +บทศรี +บทเฉพาะกาล +บทเพลง +บทเรศ +บน +บนบาน +บนม +บพิตร +บพิตรพิทยา +บพิตรพิมุข +บพิธ +บมิ +บร +บรทาร +บรบือ +บรม +บรมธาตุ +บรมอัฐิ +บรมัตถ์ +บรรกวด +บรรจง +บรรจถรณ์ +บรรจบ +บรรจวบ +บรรจุ +บรรณ +บรรณาการ +บรรณาคม +บรรณาธิการ +บรรณานุกรม +บรรณารักษศาสตร์ +บรรณารักษ์ +บรรดา +บรรดาก +บรรดาศักดิ์ +บรรถร +บรรทม +บรรทัด +บรรทัดฐาน +บรรทัดทอง +บรรทับ +บรรทาน +บรรทุก +บรรพ +บรรพชา +บรรพชิต +บรรพต +บรรพตพิสัย +บรรพบุรุษ +บรรพเภท +บรรพ์ +บรรยง +บรรยงก์ +บรรยากาศ +บรรยาย +บรรลัย +บรรลัยกัลป์ +บรรลาย +บรรลุ +บรรษัท +บรรสบ +บรรสพ +บรรสม +บรรสาน +บรรสาร +บรรหาน +บรรหาร +บรรเจิด +บรรเทา +บรรเลง +บรรโลม +บรอคเคอลิ +บรอดแบนด์ +บรอนซ์ +บรอนไซต์ +บรัด +บรัศว์ +บรัสเซลส์ +บรั่นดี +บรา +บรากรม +บราง +บราซิล +บราซิเลีย +บราลี +บราวอยต์ +บราวเซอร์ +บริกรม +บริกรรม +บริกัป +บริการ +บริขา +บริขาร +บริคณห์ +บริคณห์สนธิ +บริจาค +บริจารก +บริจาริกา +บริชน +บริดจ์ +บริดช์เทาน์ +บริติช +บริตเทิลไมกา +บริบท +บริบาล +บริบูรณ์ +บริพนธ์ +บริพัตร +บริพันธ์ +บริพาร +บริภัณฑ์ +บริภาษ +บริมาส +บริยาย +บริรม +บริรักษ์ +บริราช +บริวรรต +บริวาร +บริวาส +บริษัท +บริสชน +บริสุทธิ์ +บริสเบน +บริหาร +บริหารธุรกิจ +บริหาส +บริเฉท +บริเตน +บริเตนใหญ่ +บริเวณ +บริโภค +บรื๋อ +บรูไซต์ +บรูไน +บฤงคพ +บลัฟฟ์ +บลูเบอร์รี +บล็อก +บล็อค +บวก +บวง +บวงสรวง +บวช +บวชชี +บวน +บวบ +บวบขม +บวม +บวร +บวรนิเวศน์ +บวรมงคล +บหลิ่ม +บอ +บอก +บอกบท +บอกบุญ +บอกปัด +บอกแขก +บอกใบ้ +บอกไซต์ +บอง +บองหลา +บอด +บอดสี +บอดี้ +บอน +บอนด์ +บอนน์ +บอบ +บอบช้ำ +บอบบาง +บอบแบบ +บอมบ์ +บอยคอท +บอยซี +บอร์ด +บอร์นโฮล์ม +บอร์เนียว +บอร์โนไนต์ +บอร์ไนต์ +บอล +บอลติก +บอลลูน +บอส +บอสตัน +บอสเนีย +บอแรกซ์ +บอแร็กซ์ +บะฉ่อ +บะหมี่ +บัก +บักอาน +บักโกรก +บัคเตรี +บัง +บังกลาเทศ +บังกะโล +บังกัด +บังกา +บังกี +บังคน +บังคนหนัก +บังคนเบา +บังคม +บังคล +บังควร +บังความ +บังคับ +บังคับการ +บังคัล +บังตา +บังฟัน +บังมืด +บังลังก์ +บังวาย +บังสาด +บังสุกุล +บังสุกูล +บังสูรย์ +บังหน้า +บังอร +บังอวจ +บังอาจ +บังอิง +บังอูร +บังเกอร์ +บังเกิด +บังเงา +บังเวียน +บังเหิน +บังเหียน +บังเอิญ +บังแทรก +บังโกลน +บังโคลน +บังใบ +บังไพร +บัญจก +บัญจรงค์ +บัญชร +บัญชา +บัญชาการ +บัญชี +บัญญัติ +บัญญัติไตรยางศ์ +บัญฑิต +บัญหา +บัฏ +บัณฑร +บัณฑิต +บัณฑิตย์ +บัณฑุ +บัณฑูร +บัณณาส +บัณรส +บัณรสี +บัณเฑาะก์ +บัณเฑาะว์ +บัด +บัดกรี +บัดซบ +บัดดล +บัดดี้ +บัดนั้น +บัดนี้ +บัดบง +บัดสี +บัดเก็ต +บัตชาน +บัตร +บัทม์ +บัน +บันกวด +บันจวบ +บันจอย +บันดล +บันดา +บันดาล +บันทึก +บันทึง +บันนังสตา +บันยะบันยัง +บันลือ +บันเทิง +บันเบา +บันแถลง +บันโดย +บันได +บัปผาสะ +บัพ +บัพชา +บัพชิต +บัพพาช +บัฟเฟอร์ +บัฟเฟอร์สเตท +บัมพ์ +บัมเพอร์ +บัล +บัลกาเรีย +บัลตา +บัลลพ +บัลลังก์ +บัลลูน +บัลเลท์ +บัลแกเรีย +บัว +บัวขวัญ +บัวขาบ +บัวขาว +บัวตูม +บัวถลา +บัวนาง +บัวบก +บัวบาท +บัวผึ้งพัฒนา +บัวผุด +บัวลอย +บัวโนสไอเรส +บัวโรย +บัวใหญ่ +บัส +บัสเลน +บัสแตร์ +บัสไทต์ +บั่น +บั่นทอน +บั้ง +บั้งไฟ +บั้น +บั้นท้าย +บั้นปลาย +บั้นเอว +บั๊ก +บา +บาก +บากท่า +บาง +บางกรวย +บางกระทุ่ม +บางกระสอบ +บางกระเจ้า +บางกอก +บางกอกน้อย +บางกอกใหญ่ +บางกอบัว +บางกะปิ +บางขมิ้น +บางขุนนนท์ +บางขุนเทียน +บางคนที +บางคล้า +บางคอแหลม +บางจาก +บางชัน +บางซื่อ +บางซ้าย +บางตา +บางที +บางนา +บางน้ำชน +บางน้ำผึ้ง +บางน้ำเปรี้ยว +บางบัว +บางบัวทอง +บางบาล +บางบำหรุ +บางบ่อ +บางปลาม้า +บางปะกง +บางปะหัน +บางปะอิน +บางปู +บางพลัด +บางพลี +บางพึ่ง +บางมด +บางมูลนาก +บางยี่ขัน +บางยี่เรือ +บางระกำ +บางระจัน +บางรัก +บางละมุง +บางลำภู +บางวัว +บางศรีเมือง +บางสะพาน +บางสะแก +บางสุ +บางหญ้าแพรก +บางอ้อ +บางอ้อศึกษา +บางเขน +บางเตย +บางเบา +บางเลน +บางเสาธง +บางแก้ว +บางแค +บางแพ +บางแพรก +บางโพ +บางโพงพาง +บางใหญ่ +บางไทร +บางไผ่ +บางไส้ไก่ +บาจก +บาจิกา +บาซาร์ +บาซิลลัส +บาซิลัน +บาซูกา +บาด +บาดคอ +บาดตา +บาดทะยัก +บาดหมาง +บาดหู +บาดาล +บาดแผล +บาดใจ +บาดไหม +บาต +บาตร +บาท +บาทบ +บาทบงกช +บาทบงสุ์ +บาทบริจาริกา +บาทภัฏ +บาทภาค +บาทมูล +บาทยุคล +บาทรช +บาทรัช +บาทหลวง +บาทา +บาทาธึก +บาทุกา +บาธรรม +บาน +บานกบ +บานชื่น +บานบุรี +บานพับ +บานียะ +บานเกล็ด +บานเช้า +บานเย็น +บานแบะ +บาบาร์ +บาบิโลเนีย +บาบี +บาบูน +บาป +บาปกรรม +บาปหนา +บาปี +บาพก +บามาโก +บาย +บายพาส +บายศรี +บายโปรดักซ์ +บารนี +บารมี +บารอน +บารอมิเตอร์ +บาร์ +บาร์คีวิไคต์ +บาร์บีคิว +บาร์บูดา +บาร์เ +บาร์เบล +บาร์เบอร์ +บาร์เบโดส +บาร์เรน +บาร์เรล +บาร์เลย์ +บาร์แบเรียน +บาล +บาลานซ์ +บาลี +บาศ +บาศก์ +บาสติล +บาสเกตบอล +บาหลี +บาห์เรน +บาฮามาส +บาเจาะ +บาแดง +บาโบส +บำนาญ +บำบวง +บำบัด +บำราบ +บำราศ +บำราศนราดูร +บำรุง +บำรุงราษฎร์ +บำรุงวิชา +บำรุงศิลป์ +บำรุงสุข +บำรุงเมือง +บำรู +บำหยัด +บำเทิง +บำเพ็ญ +บำเรอ +บำเหน็จ +บำเหน็จณรงค์ +บำโบ +บิ +บิกินี +บิกู +บิงโก +บิชอป +บิซิเนส +บิฐ +บิณฑ +บิณฑบาต +บิด +บิดขวา +บิดพลิ้ว +บิดร +บิดา +บิดเบือน +บิดไส้ +บิต +บิตุ +บิตุจฉา +บิตุรงค์ +บิตุล +บิตุลา +บิตุเรศ +บิท +บิน +บินตัน +บินยา +บิล +บิลลิตัน +บิลิซี +บิลเลียด +บิวตี้ +บิวเรตต์ +บิศาจ +บิสคิต +บิสซู +บิสมัท +บิสมัทอิไนต์ +บิสมาร์ก +บิสเคค +บิ่น +บีฑา +บีตา +บีน +บีบ +บีบรัด +บีเยศ +บี้ +บี้แบน +บึก +บึกบึน +บึง +บึงกาฬ +บึงกุ่ม +บึงทองหลาง +บึงบาง +บึงสามพัน +บึ่ง +บึ้ง +บื่อ +บุ +บุก +บุกบัน +บุกบั่น +บุกรุก +บุกเบิก +บุคคล +บุคคโล +บุคลากร +บุคลาธิษฐาน +บุคลิก +บุคลิกภาพ +บุคลิกลักษณะ +บุง +บุญ +บุญชูศรี +บุญช่วย +บุญญานุภาพ +บุญญาภินิหาร +บุญญาภิสังขาร +บุญตาค +บุญตาเสนาะ +บุญถนอม +บุญทาย +บุญธรรม +บุญนาค +บุญน้อม +บุญพงษา +บุญรอด +บุญล้อม +บุญศิริ +บุญสม +บุญส่ง +บุญเขต +บุณฑริก +บุณมี +บุณย์ +บุตร +บุตรธรรม +บุตรา +บุตรี +บุตรีตระสุม +บุถุชน +บุทคล +บุนนาค +บุบ +บุบบิบ +บุปผ +บุปผชาติ +บุปผา +บุปผาราม +บุผิว +บุพ +บุพกรรม +บุพการี +บุพกิจ +บุพชาติ +บุพทักษิณ +บุพนิมิต +บุพบท +บุพพาจารย์ +บุพภาค +บุพเพสันนิวาส +บุพโพ +บุฟเฟต์ +บุฟเฟท์ +บุฟเฟ่ต์ +บุรณะ +บุรพ +บุรพทิศ +บุรพบท +บุรพาจารย์ +บุระ +บุราณ +บุริมทิศ +บุริมพรรษา +บุริมสิทธิ +บุรี +บุรีรัมย์ +บุรุนดี +บุรุษ +บุษกร +บุษบ +บุษบก +บุษบง +บุษบัน +บุษบา +บุษบามินตรา +บุษป +บุษย +บุษยมาส +บุษราคัม +บุหงง +บุหงัน +บุหงา +บุหงาประหงัน +บุหงารำไป +บุหรง +บุหรี่ +บุหลัน +บุโรทั่ง +บุ่ง +บุ่มบ่าม +บุ้ง +บุ้ย +บุ๊ค +บุ๊คกิ้ง +บุ๊คมาร์ก +บุ๊คเซ็นเตอร์ +บุ๋น +บุ๋ม +บูกา +บูคาเรสต์ +บูชนีย +บูชา +บูชายัญ +บูชิต +บูชิโด +บูซท์ +บูด +บูดาเปสต์ +บูดู +บูต +บูติค +บูตุง +บูท +บูธ +บูม +บูร +บูรณ +บูรณภาพ +บูรณมี +บูรณะ +บูรณะศึกษา +บูรณาการรวมหน่วย +บูรพ +บูรพา +บูรพาจารย์ +บูรไน +บูเกต์ +บูเช่ +บูเวต์ +บูแลนเจอไรต์ +บู่ +บู้ +บู้บี้ +บู๊ +บู๊ต +บ็อบ +บ่ +บ่ง +บ่น +บ่นถึง +บ่ม +บ่มผิว +บ่มมัน +บ่วง +บ่วน +บ่อ +บ่อง +บ่อน +บ่อน้ำ +บ่อพลอย +บ่อย +บ่อแร่ +บ่อไร่ +บ่ฮู้ +บ่า +บ่าง +บ่านี่ +บ่าย +บ่าว +บ้วน +บ้อ +บ้อง +บ้องหู +บ้องแบ๊ว +บ้องไฟ +บ้อม +บ้า +บ้าง +บ้าจี้ +บ้าน +บ้านกรวด +บ้านค่าย +บ้านจ +บ้านฉาง +บ้านดิศพงษ์ +บ้านดุง +บ้านด่านลานหอย +บ้านตาก +บ้านตาขุน +บ้านทรงไทย +บ้านนา +บ้านนาสาร +บ้านนาเดิม +บ้านบัวมล +บ้านบางกะปิ +บ้านบาตร +บ้านบึง +บ้านผื่อ +บ้านฝาง +บ้านม่วง +บ้านลาด +บ้านสมเด็จ +บ้านสร้าง +บ้านหนองระแหง +บ้านหนู +บ้านหมอ +บ้านหมี่ +บ้านหม้อ +บ้านหลวง +บ้านเขว้า +บ้านเหลื่อม +บ้านแท่น +บ้านแพง +บ้านแพรก +บ้านแพ้ว +บ้านแหลม +บ้านโป่ง +บ้านโพธิ์ +บ้านโฮ่ง +บ้านไผ่ +บ้านไร่ +บ้าบ่น +บ้าบ๋า +บ้าย +บ้าระห่ำ +บ้าหมู +บ้าๆ +บ๊งเบ๊ง +บ๊วย +บ๊อกซ์ +บ๊อง +บ๊ะ +บ๊าย +บ๋อม +บ๋อย +บ๋ำ +ปก +ปกกระหม่อม +ปกครอง +ปกคลุม +ปกติ +ปกปิด +ปกป้อง +ปกรณัม +ปกรณ์ +ปการ +ปกิณกะ +ปกเกล้า +ปกเกศ +ปง +ปงช้าง +ปฎล +ปฎิฐาน +ปฏัก +ปฏิ +ปฏิกรณ์ +ปฏิกรรม +ปฏิกรรมสงคราม +ปฏิการ +ปฏิกิริยา +ปฏิกูล +ปฏิคม +ปฏิฆะ +ปฏิชีวนะ +ปฏิญญา +ปฏิญาณ +ปฏิทิน +ปฏิบถ +ปฏิบัติ +ปฏิบัพ +ปฏิปทา +ปฏิปักษ์ +ปฏิปัน +ปฏิพัทธ์ +ปฏิพากย์ +ปฏิภาค +ปฏิภาณ +ปฏิมา +ปฏิมากร +ปฏิยุทธ์ +ปฏิรพ +ปฏิรูป +ปฏิวัติ +ปฏิวาต +ปฏิวาท +ปฏิวิติ +ปฏิสนธิ +ปฏิสวะ +ปฏิสังขรณ์ +ปฏิสันถาร +ปฏิสันถาวร +ปฏิสัมพันธ์ +ปฏิหาริย์ +ปฏิเวธ +ปฏิเสธ +ปฏิโลม +ปฐพี +ปฐพีวิทยา +ปฐม +ปฐมฌาน +ปฐมทัศน์ +ปฐมนิเทศ +ปฐมพยาบาล +ปฐมยาม +ปฐมฤกษ์ +ปฐมวัย +ปฐมสมโพธิ +ปฐมเทศนา +ปฐมโพธิกาล +ปฐวี +ปณต +ปณาม +ปณิธาน +ปณิธิ +ปณีต +ปด +ปติ +ปติยัต +ปถพี +ปถมัง +ปถวี +ปทานุกรม +ปทีป +ปทุม +ปทุมทิพย์ +ปทุมธานี +ปทุมรัตต์ +ปทุมวัน +ปน +ปนัดดา +ปนาค +ปนเป +ปบ +ปปัญจ +ปภัสสร +ปม +ปมจิต +ปมด้อย +ปมเขื่อง +ปมเด่น +ปมเปา +ปร +ปรก +ปรกติ +ปรง +ปรด +ปรตยาค +ปรตเยก +ปรน +ปรนนิบัติ +ปรนัย +ปรบ +ปรบไก่ +ปรปักษ์ +ปรม +ปรมัตถ์ +ปรมาจารย์ +ปรมาณู +ปรมาภิเษก +ปรมาภิไธย +ปรวด +ปรวนแปร +ปรวาที +ปรศุ +ปรสิต +ปรสิตวิทยา +ปรองดอง +ปรอด +ปรอดๆ +ปรอท +ปรอย +ประ +ประกบ +ประกฤต +ประกล +ประกวด +ประกอบ +ประกัน +ประกับ +ประกาย +ประกายพรึก +ประการ +ประกาศ +ประกาศนียบัตร +ประกาศิต +ประกำ +ประกิด +ประกิต +ประคด +ประคบ +ประคบประหงม +ประคอง +ประคำ +ประคุณ +ประจง +ประจญ +ประจบ +ประจวบ +ประจวบคีรีขันธ์ +ประจักษ์ +ประจักษ์วิทยา +ประจักษ์ศิลป์ +ประจัญ +ประจัญบาน +ประจัน +ประจันตคาม +ประจาก +ประจาค +ประจาน +ประจำ +ประจิม +ประจุ +ประจุไฟฟ้า +ประจ๋อประแจ๋ +ประชด +ประชน +ประชวม +ประชวร +ประชัน +ประชา +ประชากร +ประชากรศาสตร์ +ประชาคม +ประชาชน +ประชาชาติ +ประชาชื่น +ประชาทัณฑ์ +ประชาธิปก +ประชาธิปัตย์ +ประชาธิปไตย +ประชานฤมิตร +ประชานาถ +ประชาบดี +ประชาบาล +ประชาภิบาล +ประชามติ +ประชาระบือธรรม +ประชาราษฎร์ +ประชาราษฎร์อุปถัมภ์ +ประชาสงเคราะห์ +ประชาสรรค์ +ประชาสัมพันธ์ +ประชาสุข +ประชาอุทิศ +ประชิด +ประชี +ประชุม +ประชุมสุดยอด +ประณต +ประณม +ประณาม +ประณิธาน +ประณิธิ +ประณีต +ประณุท +ประดง +ประดน +ประดวน +ประดอน +ประดอย +ประดัก +ประดักประเดิด +ประดัง +ประดับ +ประดา +ประดาก +ประดาป +ประดาษ +ประดิ +ประดิดประดอย +ประดิทิน +ประดิพัทธ์ +ประดิษฐกรรม +ประดิษฐาน +ประดิษฐ์ +ประดุง +ประดุจ +ประดู่ +ประดู่ลาย +ประตง +ประตัก +ประติ +ประติมากรรม +ประตู +ประถม +ประทม +ประทยด +ประทวน +ประทวนสินค้า +ประทักษ์ +ประทัง +ประทัด +ประทับ +ประทาน +ประทานโทษ +ประทาย +ประทิน +ประทิ่น +ประทีป +ประทุก +ประทุฐ +ประทุน +ประทุม +ประทุษ +ประทุษร้าย +ประท่า +ประท้วง +ประธาน +ประธานาธิบดี +ประนม +ประนอ +ประนอม +ประนัง +ประนาม +ประนีประนอม +ประนี้ +ประบัด +ประบาต +ประปราย +ประปา +ประพจน์ +ประพนธ์ +ประพรม +ประพฤติ +ประพัด +ประพัทธ์ +ประพันธ์ +ประพันธ์ศักดิ์ +ประพาต +ประพาส +ประพาฬ +ประพิณ +ประพุทธ์ +ประภพ +ประภัสสร +ประภา +ประภากร +ประภาคาร +ประภาพ +ประภามนตรี +ประภาษ +ประภาส +ประมง +ประมวญ +ประมวล +ประมาณ +ประมาท +ประมุข +ประมุท +ประมูล +ประยงค์ +ประยุกต์ +ประยุทธ์ +ประยุร +ประยูร +ประลมพ์ +ประลอง +ประลัย +ประลาต +ประลาย +ประลึง +ประลุ +ประลุง +ประวรรต +ประวรรตน์ +ประวัติ +ประวัติการ +ประวัติการณ์ +ประวัติกาล +ประวัติศาสตร์ +ประวาต +ประวาล +ประวาส +ประวิง +ประวิช +ประวิตร +ประวิทย์ +ประวีณ +ประศม +ประศาสน์ +ประศุ +ประสก +ประสงค์ +ประสบ +ประสบการณ์ +ประสบการณ์นิยม +ประสพ +ประสพสุข +ประสม +ประสะ +ประสัก +ประสา +ประสาท +ประสาทพร +ประสาทหลอน +ประสาน +ประสานมิตร +ประสาร +ประสิทธิผล +ประสิทธิภาพ +ประสิทธิ์ +ประสูต +ประสูติ +ประหนึ่ง +ประหมันอาหยี +ประหม่า +ประหยัด +ประหลาด +ประหล่ำ +ประหวัด +ประหวั่น +ประหัด +ประหัต +ประหาณ +ประหาร +ประหาส +ประอบ +ประอร +ประอึง +ประอุก +ประฮาม +ประเคน +ประเจก +ประเจิด +ประเจิดประเจ้อ +ประเจียด +ประเชิญ +ประเด +ประเดิม +ประเดิมพร +ประเดียง +ประเดี๋ยว +ประเดี๋ยวประด๋าว +ประเด็น +ประเทศ +ประเทศกันชน +ประเทศราช +ประเทศไทย +ประเทา +ประเทียบ +ประเทือง +ประเปรียว +ประเพณี +ประเพ้อ +ประเภท +ประเมิน +ประเวณี +ประเวศ +ประเวศน์ +ประเสริฐ +ประเสริฐชัย +ประเสริฐอิสลาม +ประเสหรันอากง +ประเหล +ประเหส +ประแกก +ประแจ +ประแดง +ประแดะ +ประแอก +ประโคน +ประโคนชัน +ประโคม +ประโดย +ประโพธ +ประโมง +ประโมทย์ +ประโยค +ประโยชน์ +ประโลม +ประไพ +ปรัก +ปรักปรำ +ปรักมะ +ปรัง +ปรัชญา +ปรัด +ปรัตยุตบัน +ปรัตยุบัน +ปรัน +ปรับ +ปรับปรุง +ปรัมปรา +ปรัศนา +ปรัศนี +ปรัศว์ +ปรั่น +ปราก +ปรากฏ +ปรากฏการณ์ +ปรากรม +ปรากฤต +ปราการ +ปราคภาร +ปราคาร +ปราง +ปรางค์ +ปรางค์กู่ +ปราจีน +ปราจีนบุรี +ปราชญา +ปราชญ์ +ปราชัย +ปราชิต +ปราณ +ปราณบุรี +ปราณี +ปราด +ปราน +ปรานี +ปรานีปราศรัย +ปราบ +ปราบดาภิเษก +ปราปต์ +ปราภพ +ปราม +ปรามาส +ปราย +ปรารถ +ปรารถนา +ปรารภ +ปรารมภ์ +ปราศ +ปราศจาก +ปราศรัย +ปราษณี +ปราษาณ +ปราสัย +ปราสาท +ปราโมช +ปราโมทย์ +ปราโมทย์วิทยา +ปรำ +ปริ +ปริก +ปริกรรม +ปริกัป +ปริขา +ปริคณห์ +ปริจาค +ปริจาริกา +ปริชน +ปริซึม +ปริญญา +ปริณาม +ปริณายก +ปริต +ปริตตะ +ปริตร +ปริตอเรีย +ปริทรรศน์ +ปริทัศน์ +ปรินส์ออฟเวลส์ +ปรินายก +ปรินิพพาน +ปริบ +ปริปาก +ปริพัตร +ปริภาษ +ปริภูมิ +ปริมณฑล +ปริมัท +ปริมาณ +ปริมาตร +ปริย +ปริยรณ +ปริยัติ +ปริยาย +ปริวรรต +ปริวรรตกรรม +ปริวัตร +ปริวาร +ปริวาส +ปริศนา +ปริศนาอักษรไขว้ +ปริษัท +ปริหาน +ปริหาร +ปริหาส +ปริเฉท +ปริเทพ +ปริเยศ +ปริเวณ +ปริโภค +ปริ่ม +ปริ้นส์ +ปริ้นเตอร์ +ปรีชญา +ปรีชา +ปรีดา +ปรีดิ +ปรีดิ์ +ปรีดี +ปรีติ +ปรีย +ปรียา +ปรี่ +ปรี๊ด +ปรึก +ปรึกษา +ปรึง +ปรือ +ปรื๋อ +ปรุ +ปรุง +ปรุโปร่ง +ปรู +ปรูด +ปรู๊ดปร๊าด +ปรู๊ฟ +ปรู๋ +ปรเมนทร์ +ปรเมษฐ์ +ปรเมหะ +ปรโลก +ปร่า +ปร๋อ +ปฤงคพ +ปฤจฉา +ปฤษฎางค์ +ปฤษฏ์ +ปฤษฐ +ปลก +ปลง +ปลงตก +ปลงผม +ปลงศพ +ปลงใจ +ปลด +ปลดปลง +ปลดอาวุธ +ปลดเปลื้อง +ปลดแอก +ปลวก +ปลวกแดง +ปลวังค +ปลอก +ปลอกคอ +ปลอกหมอน +ปลอด +ปลอดทหาร +ปลอดภัย +ปลอบ +ปลอบโยน +ปลอม +ปลอมปน +ปละ +ปลัก +ปลัง +ปลัด +ปลัดขิก +ปลัดเปรียง +ปลัสมา +ปลั่ง +ปลั๊ก +ปลั๊กอิน +ปลา +ปลาก +ปลาจีน +ปลาชา +ปลาด +ปลาดาว +ปลาต +ปลาตู้ +ปลาทอง +ปลาบ +ปลาบปลื้ม +ปลาปาก +ปลาฝา +ปลาม้ำ +ปลาย +ปลายข +ปลายนา +ปลายพระยา +ปลายมาศ +ปลาร้า +ปลาวาฬ +ปลาสนาการ +ปลาสมา +ปลาสเตอร์ +ปลาส้ม +ปลาหมึก +ปลาเค้า +ปลาแดก +ปลาแดง +ปลาแนม +ปลิง +ปลิด +ปลิม +ปลิว +ปลิโพธ +ปลิ่ม +ปลิ้น +ปลิ้นปลอก +ปลิ้นปล้อน +ปลี +ปลีก +ปลื้ม +ปลื้มมณี +ปลุก +ปลุกปล้ำ +ปลุกผี +ปลุกใจ +ปลูก +ปลูกจิต +ปลูกจิตร +ปลูกฝี +ปล่ง +ปล่อง +ปล่อย +ปล้น +ปล้อง +ปล้อน +ปล้ำ +ปวกเปียก +ปวง +ปวด +ปวดมวน +ปวัตน +ปวารณา +ปวาล +ปวาส +ปวาฬ +ปวิช +ปวิตร +ปวิธ +ปวิเวก +ปวีณ +ปวุติ +ปศุ +ปศุสัตว์ +ปสพ +ปสันน +ปสัยห +ปสาท +ปสาน +ปสาสน์ +ปสุ +ปสุต +ปสูติ +ปหังส +ปหาน +ปหาร +ปหาส +ปอ +ปอก +ปอกลอก +ปอง +ปองรัก +ปอด +ปอดบวม +ปอดลอย +ปอดแปด +ปอดแหก +ปอน +ปอนซิน +ปอนด์ +ปอบ +ปอม +ปอมเปอี +ปอย +ปอร์ต +ปอร์ตหลุยส์ +ปอร์โตแปรงซ์ +ปอร์โตโนโว +ปอเนาะ +ปะ +ปะกน +ปะกบ +ปะกัง +ปะการัง +ปะกำ +ปะขาว +ปะตาปา +ปะตาระกาหรา +ปะทะ +ปะทิว +ปะทุ +ปะทุน +ปะนาเระ +ปะบุก +ปะปน +ปะปัง +ปะป๋า +ปะมง +ปะราลี +ปะรำ +ปะลอม +ปะลิส +ปะว่า +ปะหงับ +ปะหนัน +ปะหัง +ปะเตะ +ปะเลง +ปะเหลาะ +ปะเหลียน +ปะแล่ม +ปะโลง +ปัก +ปักกิ่ง +ปักข +ปักธงชัย +ปักปัน +ปักปำ +ปักษ +ปักษกษัย +ปักษคม +ปักษธร +ปักษา +ปักษาวสาน +ปักษิน +ปักษี +ปักษ์ +ปักเป้า +ปักใจ +ปัคหะ +ปัง +ปังตอ +ปังสุกุล +ปังสุ์ +ปัจจฉิม +ปัจจันตคาม +ปัจจันตชนบท +ปัจจันตประเทศ +ปัจจันต์ +ปัจจัย +ปัจจามิตร +ปัจจุบัน +ปัจจุส +ปัจจุสมัย +ปัจฉา +ปัจฉิม +ปัจฉิมลิขิต +ปัจฉิมวาจา +ปัจนึก +ปัจเจก +ปัจเจกบุคคล +ปัชชร +ปัชชุน +ปัญจ +ปัญจก +ปัญจทรัพย์ +ปัญจม +ปัญจมิตร +ปัญจมี +ปัญจวัคคีย์ +ปัญชา +ปัญญา +ปัญญาวุฒิกร +ปัญญาส +ปัญญาอินทรา +ปัญญาอ่อน +ปัญหา +ปัฏ +ปัฏนะ +ปัฐวิกรณ์ +ปัณณะ +ปัณณาส +ปัณรส +ปัณรสม +ปัณรสี +ปัณหิ +ปัด +ปัดขา +ปัดสวะ +ปัดเศษ +ปัดไถม +ปัดๆ +ปัตคาด +ปัตตะ +ปัตตานี +ปัตตาเวีย +ปัตติ +ปัตติก +ปัตถร +ปัตถะ +ปัตนิ +ปัตมอส +ปัตยัย +ปัถพี +ปัถวี +ปัทม +ปัทมะ +ปัทมา +ปัทม์ +ปัน +ปันจุเหร็จ +ปันตาร์ +ปันผล +ปันหยี +ปับ +ปัปผาสะ +ปัยกะ +ปัยกา +ปัยยิกา +ปัว +ปัศจิม +ปัศตัน +ปัศตู +ปัสสาวะ +ปัสสาสะ +ปั่น +ปั่นไฟ +ปั่ว +ปั้น +ปั้นจั่น +ปั้นยศ +ปั้นลม +ปั้นเหน่ง +ปั้นแม้น +ปั๊บ +ปั๊ม +ปั๋ง +ปา +ปาก +ปากกบ +ปากกา +ปากขม +ปากขอ +ปากคม +ปากคลองสาน +ปากคอก +ปากคัน +ปากคำ +ปากคีบ +ปากจอบ +ปากจัด +ปากชม +ปากช่อง +ปากท่อ +ปากนก +ปากน้ำ +ปากน้ำวิทยาคม +ปากบอน +ปากบ่อ +ปากปลา +ปากพนัง +ปากพลี +ปากพะยูน +ปากมาก +ปากราก +ปากวะ +ปากัน +ปากีสถาน +ปากเกร็ด +ปากเบา +ปากแตร +ปากแบะ +ปากใต้ +ปากไก่ +ปากไม้ +ปาง +ปาจนะ +ปาจิตตีย์ +ปาจีน +ปาฏลิ +ปาฏิบท +ปาฏิหาริย์ +ปาฐ +ปาฐก +ปาฐกถา +ปาณ +ปาณก +ปาณกชาติ +ปาณนาศ +ปาณภูต +ปาณสาร +ปาณะ +ปาณา +ปาณาติบาต +ปาณิ +ปาณิดล +ปาณี +ปาด +ปาดหาว +ปาติโมกข์ +ปาตี +ปาท +ปาทป +ปาทังกา +ปาทาน +ปาทุกา +ปาท่องโก๋ +ปาน +ปานจิตต์อุทิศ +ปานดง +ปานทิพย์ +ปานนี้ +ปานะ +ปานามา +ปานามาซิตี +ปานิเยน +ปานีย +ปาป +ปาปมุต +ปาปอหยีสังฆาตา +ปาปัว +ปาปิรุส +ปาปีติ +ปาพจน์ +ปาม +ปาย +ปายาส +ปาร +ปารคู +ปารมี +ปารษมี +ปารอส +ปารากวัย +ปาราชิก +ปารามาริโบ +ปาริฉัตร +ปาริชาต +ปาริชาติ +ปารีส +ปารเมศ +ปาร์ค +ปาร์ตี้ +ปาร์รี +ปาร์เกต์ +ปาล +ปาลาวัน +ปาลิไลยก์ +ปาลี +ปาล์ม +ปาว +ปาวก +ปาวจนะ +ปาวาร +ปาวๆ +ปาษาณ +ปาส +ปาสาณ +ปาหนัน +ปาหี่ +ปาหุณ +ปาเก้ +ปาเต๊ะ +ปาเลสไตน์ +ปาเสลไตน์ +ปาโมกข์ +ปาไน +ปำ +ปิกนิก +ปิกมี่ +ปิกอัพ +ปิคนิค +ปิคอัพ +ปิงคล +ปิงปอง +ปิฎก +ปิฏก +ปิฏฐะ +ปิฐิ +ปิณฑะ +ปิด +ปิดฉาก +ปิดตาย +ปิดบัง +ปิดปาก +ปิดเบา +ปิตตะ +ปิตา +ปิตามหัยกา +ปิติ +ปิตุ +ปิตุฆาต +ปิตุจฉา +ปิตุภูมิ +ปิตุล +ปิตุลา +ปินาสะ +ปิปผลี +ปิย +ปิยมิตร +ปิยะ +ปิยังคุ +ปิลันธน์ +ปิศาจ +ปิสัง +ปิหก +ปิหกะ +ปิแอร์ +ปิโตรเคมี +ปิโตรเลียม +ปิโยรส +ปิไส +ปิ่น +ปิ่นตอ +ปิ่นประภาคม +ปิ่นโต +ปิ่ม +ปิ้ง +ปิ้ม +ปิ๋ว +ปี +ปีก +ปีกกา +ปีกนก +ปีกลาย +ปีกหัก +ปีกไม้ +ปีงบประมาณ +ปีฐะ +ปีติ +ปีน +ปีนัง +ปีบ +ปีปฏิทิน +ปีมะโว้ +ปีลกะ +ปีศาจ +ปีฬ +ปีฬก +ปีฬกะ +ปีฬกา +ปีแสง +ปี่ +ปี่ไฉน +ปี้ +ปี๊ด +ปี๊บ +ปี๋ +ปึก +ปึง +ปึงปัง +ปึ่ง +ปึ่งชา +ปึ้ด +ปึ๋ง +ปืดปึง +ปืน +ปืนยา +ปือ +ปื้น +ปื้อ +ปื๋อ +ปุ +ปุก +ปุกปุย +ปุคละ +ปุงคพ +ปุจฉา +ปุชฉา +ปุฏ +ปุณฑริก +ปุด +ปุตตะ +ปุถุชน +ปุนนาค +ปุนภพ +ปุบ +ปุบปับ +ปุปผะ +ปุปะ +ปุพพะ +ปุม +ปุย +ปุร +ปุรณะ +ปุรพ +ปุราณ +ปุราณะ +ปุลู +ปุฬวะ +ปุแหละ +ปุโรหิต +ปุ่ม +ปุ้งกี๋ +ปุ้ม +ปุ้ย +ปุ๊ +ปุ๊บ +ปุ๋ม +ปุ๋ย +ปู +ปูขน +ปูจ๋า +ปูชกะ +ปูชนีย +ปูชนียบุคคล +ปูชนียวัตถุ +ปูชา +ปูชิต +ปูด +ปูดาว +ปูติ +ปูน +ปูนซีเมนต์ +ปูนปลาสเตอร์ +ปูนา +ปูนเปียก +ปูม +ปูม้า +ปูระ +ปูลาย +ปูลู +ปูลูกองดอร์ +ปูวา +ปูเล +ปู่ +ปู่ครู +ปู่ทวด +ปู่ทองใบ +ปู่ย่า +ปู่เจ้าสมิงพราย +ปู้ยี่ปู้ยำ +ปู้ยี้ปู้ยำ +ปเวณี +ปเวส +ปโกฏิ +ปโย +ปโยธร +ปโยธรา +ปโยราศ +ป็อป +ป็อปคอร์น +ป่ง +ป่น +ป่นปี้ +ป่วง +ป่วน +ป่วนปั่น +ป่วย +ป่อง +ป่า +ป่าง +ป่าช้า +ป่าซาง +ป่าดง +ป่าดิบ +ป่าติ้ว +ป่าน +ป่านคม +ป่าป่ง +ป่าย +ป่าว +ป่าสูง +ป่าเกด +ป่าแดง +ป่าแดด +ป่าแพะ +ป่าโมก +ป่าใส +ป้วน +ป้วนเปี้ยน +ป้อ +ป้อง +ป้องกัน +ป้อน +ป้อม +ป้อมปราบ +ป้อมปราบศัตรูพ่าย +ป้อย +ป้อยอ +ป้อแป้ +ป้า +ป้าง +ป้าน +ป้านบ +ป้านย +ป้านล +ป้านลม +ป้าบ +ป้าย +ป้ายสี +ป้ำ +ป๊อก +ป๊อกกี้ +ป๊อปปี้ +ป๊ะป๋า +ป๊าบ +ป๊าว +ป๋อ +ป๋อม +ป๋า +ผก +ผกผงก +ผกผัน +ผกผิน +ผกา +ผกาย +ผการาย +ผง +ผงก +ผงขาว +ผงคลี +ผงชูรส +ผงฟู +ผงอบ +ผงะ +ผงาด +ผง่าน +ผจง +ผจญ +ผจัญ +ผจาน +ผชุม +ผณิน +ผณินทร +ผณิศวร +ผด +ผดุง +ผดุงครรภ์ +ผทม +ผนวก +ผนวช +ผนัง +ผนิด +ผนึก +ผม +ผมซิงเกิล +ผมทัด +ผมนาง +ผมบ๊อบ +ผมปีก +ผมม้า +ผมเป๋ +ผมโป่ง +ผมไฟ +ผยอง +ผรณ +ผรสุ +ผริต +ผรุพก +ผรุส +ผรุสวาท +ผล +ผลก +ผลคุน +ผลคุนี +ผลง +ผลผลิต +ผลพลอยได้ +ผลพัฒนา +ผลลัพธ์ +ผลอ +ผละ +ผลัก +ผลักไส +ผลัด +ผลับ +ผลัวะ +ผลา +ผลาญ +ผลานิสงส์ +ผลาผล +ผลาหาร +ผลิ +ผลิก +ผลิต +ผลิตกรรม +ผลิตผล +ผลิตภัณฑ์ +ผลิน +ผลี +ผลีผลาม +ผลึก +ผลึ่ง +ผลือ +ผลุ +ผลุง +ผลุด +ผลุน +ผลุบ +ผลุย +ผลู +ผลูบด +ผลูแบก +ผล็อง +ผล็อย +ผวน +ผวนผัน +ผวย +ผวา +ผวากอด +ผสม +ผสมผเส +ผสมสุขราษฎร +ผสมเทียม +ผสมโรง +ผสาน +ผสาย +ผสาร +ผอก +ผอง +ผอด +ผอบ +ผอม +ผอมโซ +ผอวด +ผอูน +ผะ +ผะดา +ผะสา +ผะออบ +ผะแคง +ผัก +ผักขวง +ผักชี +ผักสาบ +ผักโฉม +ผักไก +ผักไผ่ +ผักไหม +ผักไห่ +ผัคคุณ +ผัง +ผังเมือง +ผัด +ผัดผัน +ผัดผ่อน +ผัน +ผันผวน +ผันผาด +ผันผาย +ผันวิชาญ +ผันแปร +ผับ +ผัว +ผัวะ +ผัสส +ผา +ผาก +ผาง +ผาณิต +ผาด +ผาดผัง +ผาดำ +ผาดโผน +ผาติ +ผาม +ผาย +ผายปอด +ผายผัง +ผายผัน +ผายลม +ผาล +ผาลคุน +ผาลา +ผาสุก +ผาสุข +ผาหอม +ผำ +ผิ +ผิง +ผิด +ผิดก +ผิดตา +ผิดท่า +ผิดนัก +ผิดนัด +ผิดน้ำ +ผิดผี +ผิดหู +ผิดแผก +ผิดใจ +ผิต +ผิน +ผิว +ผิวน้ำ +ผิวบาง +ผิวปาก +ผิวหนัง +ผิว่า +ผี +ผีดิบ +ผีต +ผีบุญ +ผีฟ้า +ผีหลอก +ผีอำ +ผีเสื้อ +ผี้ว์ +ผึง +ผึ่ง +ผึ่งผาย +ผึ้ง +ผืน +ผื่น +ผุ +ผุด +ผุดผาด +ผุดผาย +ผุดผ่อง +ผุยผง +ผูก +ผูกขาด +ผูกดวง +ผูกดอก +ผูกพัน +ผูกมัด +ผูกหู +ผู้ +ผู้คน +ผู้ชาย +ผู้ญาณ +ผู้ดี +ผู้ทรง +ผู้นำ +ผู้รับ +ผู้ร้าย +ผู้ใหญ่ +ผู้ไทย +ผเดิน +ผ็อย +ผ่อง +ผ่องพรรณ +ผ่องพลอย +ผ่องแผ้ว +ผ่องใส +ผ่อน +ผ่อย +ผ่า +ผ่าตัด +ผ่าน +ผ่าย +ผ่ายผอม +ผ่าว +ผ่าเผย +ผ่าแปด +ผ้อวโสภา +ผ้า +ผ้าดำ +ผ้าดิบ +ผ้าตา +ผ้าถุง +ผ้าปูที่นอน +ผ้าป่า +ผ้าผวย +ผ้าย +ผ้ายาง +ผ้าลาย +ผ้าห่ม +ผ้าอาบ +ผ้าฮาด +ผ้าเช็ดตัว +ผ้าเช็ดหน้า +ผ้าเทศ +ผ้าแดง +ผ้าแถบ +ผ้าแฝง +ผ้าใบ +ผ้ำๆ +ฝน +ฝนซู่ +ฝนทอง +ฝนทองนิเวศน์ +ฝนเทียม +ฝรั่ง +ฝรั่งเศส +ฝรั่น +ฝอย +ฝอยทอง +ฝัก +ฝักบัว +ฝักยาว +ฝักแค +ฝักใฝ่ +ฝัง +ฝังรอย +ฝังรูป +ฝังหัว +ฝังใจ +ฝัด +ฝัน +ฝั่ง +ฝั่งฝา +ฝั่งใต้ +ฝา +ฝาก +ฝากกอง +ฝากกาย +ฝากตัว +ฝากผี +ฝากฝัง +ฝากสู่ +ฝากไข้ +ฝาง +ฝาชี +ฝาด +ฝาน +ฝาย +ฝาละมี +ฝาแฝด +ฝาไหล +ฝิ่น +ฝี +ฝีก +ฝีกาฬ +ฝีจักร +ฝีดาษ +ฝีดิบ +ฝีปาก +ฝีพาย +ฝีมือ +ฝีหมอบ +ฝีเท้า +ฝีเย็บ +ฝี่ +ฝึก +ฝึกงาน +ฝึกฝน +ฝึกสอน +ฝึกหัด +ฝืด +ฝืน +ฝุ่น +ฝูง +ฝูงบิน +ฝ่อ +ฝ่า +ฝ่าฝืน +ฝ่าฟัน +ฝ่ามือ +ฝ่าย +ฝ่ายใน +ฝ่าเท้า +ฝ้า +ฝ้าย +ฝ้ายคำ +ฝ้ายผี +พก +พกจร +พกนุ่น +พกพ่าย +พกลม +พกหิน +พกา +พกุระ +พกุล +พง +พงพวย +พงพี +พงศ +พงศกร +พงศธร +พงศา +พงศาวดาร +พงศ์ +พงษ์สวัสดิ์ +พงษ์สังข์ +พงษ์เขต +พงษ์เพชรดำเนิน +พงษ์เพชรนิเวศน์ +พงษ์เวช +พงษ์เวชอนุสรณ์ +พงไพร +พจน +พจนา +พจนานุกรม +พจนารถ +พจนีย์ +พจน์ +พจมาน +พจี +พชระ +พญา +พญาณ +พญานาค +พญายา +พญาลอ +พญาโศก +พญาไท +พญาไทย +พญาไฟ +พญาไม้ +พณิช +พณิชยการ +พณิชย์ +พด +พดกริช +พดด้วง +พธู +พน +พนจร +พนจรก +พนชีวี +พนธารา +พนม +พนมทวน +พนมศก +พนมศพ +พนมสารคาม +พนมเปญ +พนมไทร +พนวาสี +พนสณฑ์ +พนอง +พนอม +พนัก +พนักงาน +พนัง +พนัน +พนันดร +พนัส +พนัสดม +พนัสนิคม +พนา +พนาด +พนาดร +พนาดอน +พนาธวา +พนานดร +พนาย +พนาราม +พนาลัย +พนาลี +พนาวา +พนาวาส +พนาศรม +พนาเวศ +พนิดา +พนิต +พนียก +พนโคจร +พบ +พบปะ +พบพระ +พบพาน +พบู +พบเห็น +พม่า +พยช +พยชน์ +พยนต์ +พยศ +พยัก +พยักพเยิด +พยัคฆ +พยัคฆภูมิพิสัย +พยัคฆา +พยัคฆิน +พยัคฆินทร์ +พยัคฆี +พยัคฆ์ +พยัชน์ +พยัญชนะ +พยัต +พยับ +พยับฝน +พยากรณ์ +พยาฆร์ +พยางค์ +พยาธิ +พยาน +พยาบาท +พยาบาล +พยาม +พยายาม +พยาล +พยุ +พยุง +พยุห +พยุหบาตร +พยุหยาตรา +พยุหร +พยุหะ +พยุหะคีรี +พยุหเสนา +พยุหแสนยากร +พยุหโยธา +พยู่ห์ +พร +พรก +พรต +พรพัฒนา +พรพิพัฒน์ +พรม +พรมคด +พรมแดน +พรรค +พรรคการเมือง +พรรค์ +พรรณ +พรรณนา +พรรณา +พรรณานิคม +พรรณี +พรรดึก +พรรลาย +พรรษ +พรรษา +พรรเหา +พรวด +พรวดพราด +พรวน +พรสวรรค์ +พรหม +พรหมคีรี +พรหมจรรย์ +พรหมจักร +พรหมจาริณี +พรหมจารี +พรหมบถ +พรหมบท +พรหมบุรี +พรหมพิราม +พรหมศร +พรหมา +พรอก +พรอด +พระ +พระกร +พระกลด +พระกัจฉะ +พระกำโบล +พระครู +พระคุณ +พระจอมเกล้า +พระจันทร์ +พระฉาย +พระชงฆ์ +พระชนมพรรษา +พระชนม์ +พระชานุ +พระฑาฐะ +พระฑาฒะ +พระทอง +พระทัย +พระที่นั่ง +พระนคร +พระนครศรีอยุธยา +พระนครเหนือ +พระนม +พระนอม +พระนาง +พระนาด +พระนาม +พระนาย +พระนาสิก +พระบฏ +พระบท +พระบรม +พระบาท +พระประแดง +พระปั้นเหน่ง +พระปิ่น +พระปีลกะ +พระพร +พระพาหา +พระพาหุ +พระพิพิธ +พระพิโรธ +พระพุทธ +พระพุทธบาท +พระพุทธเจ้า +พระภูมิ +พระมงกุฎเกล้า +พระมารดา +พระมุฐิ +พระยา +พระยาทำ +พระยาสุเรนทร์ +พระยืน +พระรอง +พระราชดำเนิน +พระราชทาน +พระราชวัง +พระราชวิริยาภรณ์ +พระราม +พระรูป +พระร่วง +พระร่วงประสิทธิ์ +พระลบ +พระลือ +พระล่วม +พระสุเมรุ +พระหนุ +พระหฤทัย +พระหัตถ์ +พระหา +พระหาม +พระหิด +พระองค์ +พระอังคาร +พระอัฐิ +พระอาทิตย์ +พระอินทร์ +พระอูรุ +พระเจ้า +พระเจ้าตากสิน +พระเจ้าอยู่หัว +พระเชตุพน +พระเนตร +พระเพลา +พระเมโท +พระเวท +พระเอก +พระแท่น +พระแผง +พระแม่มารี +พระแม่สงเคราะห์ +พระแวว +พระแสง +พระโขนง +พระโสต +พระโอษฐ์ +พรักพร้อม +พรังก์ +พรัด +พรับ +พรั่ง +พรั่น +พราก +พราง +พราด +พราน +พรานกระต่าย +พรานนก +พราย +พราว +พราหมณ์ +พราหมี +พรำ +พริก +พรินเตอร์ +พริบ +พริบิลอฟ +พริ้ง +พริ้ม +พริ้ว +พรีฟิกซ์ +พรีห์ไนต์ +พรีเซ็นเตอร์ +พรีเซ้นท์ +พรีเพด +พรีเมียม +พรีเมียร์ +พรีแพร +พรีโหลด +พรึง +พรึน +พรึบ +พรืด +พรุ +พรุก +พรุน +พรุ่ง +พรู +พรูด +พรูสไทต์ +พรเจริญ +พร็อบเบล็ม +พร็อมมิส +พร่อง +พร่อมพร้อ +พร่อย +พร่า +พร่าง +พร่ำ +พร่ำเพรื่อ +พร่ำเพ้อ +พร้อง +พร้อม +พร้อมพรรณ +พร้อมพรัก +พร้อมมิตร +พร้อมใจ +พร้อย +พร้า +พร้าว +พร้ำ +พฤกษ +พฤกษชาติ +พฤกษทล +พฤกษราช +พฤกษศาสตร์ +พฤกษา +พฤกษเทวดา +พฤกษ์ +พฤฒ +พฤฒา +พฤฒาจารย์ +พฤฒิ +พฤต +พฤติ +พฤติกรรม +พฤติการณ์ +พฤตินัย +พฤทธิ์ +พฤทธ์ +พฤนต์ +พฤนท์ +พฤภูษณ +พฤศจิก +พฤศจิกายน +พฤษภ +พฤษภา +พฤษภาคม +พฤหัส +พฤหัสบดี +พล +พลกาย +พลการ +พลความ +พลบ +พลบค่ำ +พลพรรค +พลร่ม +พลว +พลวก +พลวง +พลวัต +พลวัตร +พลวัติ +พลศาสตร์ +พลศึกษา +พลอ +พลอง +พลอด +พลอน +พลอมแพลม +พลอย +พละ +พละพลา +พลัง +พลังงาน +พลังงานจลน์ +พลังจิต +พลัด +พลัดพราก +พลัน +พลับ +พลับพลา +พลับพลาไชย +พลับพลึง +พลัส +พลั่ก +พลั่ง +พลั่ว +พลั้ง +พลากร +พลาง +พลาซ่า +พลาญ +พลาด +พลาธิการ +พลานามัย +พลานึก +พลาม +พลาย +พลายวู้ด +พลาสติก +พลาสมา +พลาหก +พลำ +พลำภัง +พลิ +พลิก +พลิกศพ +พลิพัท +พลิ้ว +พลี +พลีท +พลีมุข +พลีส +พลีโอนาสต์ +พลุ +พลุก +พลุกพล่าน +พลุ่ก +พลุ่ง +พลุ่ย +พลุ้น +พลุ้ย +พลู +พลูคาว +พลูต้น +พลูแก +พลูโต +พลูโทเนียม +พลเทพ +พลเมือง +พลเรือน +พลโลก +พล่อย +พล่า +พล่าน +พล่าม +พล้อ +พล้อต +พล้ำ +พวก +พวง +พวงทอง +พวงหยก +พวงหรีด +พวงแสด +พวน +พวย +พวยน้ำ +พสก +พสุ +พสุธา +พสุมดี +พหล +พหลฯ +พหลโยธิน +พหุ +พหุคูณ +พหุภาคี +พหุล +พหู +พหูพจน์ +พหูสูต +พอ +พอก +พอกพูน +พอกัน +พอการ +พอควร +พอคเกตบุ๊ค +พอคเกตมันนี +พอง +พอดี +พอดู +พอตัว +พอที +พอที่ +พอน +พอฟัด +พอยท์ +พอร์ต +พอร์ตเล็ต +พอร์ตแลนไดต์ +พอร์ทัล +พอแรง +พอแล้ว +พอโลเนียม +พอใจ +พอใช้ +พอได้ +พะ +พะงา +พะงาบ +พะจง +พะนอ +พะพาน +พะพิง +พะยอม +พะยูง +พะยูน +พะรุงพะรัง +พะวง +พะวักพะวน +พะวา +พะว้าพะวัง +พะอง +พะอืดพะอม +พะเนิน +พะเนียง +พะเนียด +พะเน้าพะนอ +พะเพิง +พะเยา +พะเยิบ +พะเยิบพะยาบ +พะเลย +พะแนง +พะโต๊ะ +พะโล้ +พะไล +พัก +พักตร +พักตรา +พักตร์ +พักตา +พักพิง +พักร +พักแพว +พัง +พังกะ +พังกา +พังคา +พังงา +พังผืด +พังพวย +พังพอน +พังพาน +พังพาบ +พังเพย +พังโคน +พัช +พัชนี +พัชร +พัชรา +พัญจก +พัญจน์ +พัฒกี +พัฒน +พัฒนบริหารศาสตร์ +พัฒนะ +พัฒนา +พัฒนากร +พัฒนาการ +พัฒนาที่ดิน +พัฒนานิคม +พัฒนาวิถี +พัฒนเวช +พัฒนเวศม์ +พัฒน์ +พัด +พัดชัก +พัดชา +พัดยศ +พัดลม +พัดแพว +พัดโบก +พัต +พัตร +พัทธ +พัทธยา +พัทธสีมา +พัทยา +พัทร +พัทลุง +พัน +พันงู +พันจำ +พันจ่า +พันซาด +พันตัน +พันตา +พันตู +พันทาง +พันธ +พันธกรณี +พันธทิพย์ +พันธน +พันธนาการ +พันธนาคาร +พันธนำ +พันธบัตร +พันธมิตร +พันธะ +พันธุ +พันธุกรรม +พันธุ์ +พันธ์ +พันธ์ทิพย์ +พันปี +พันพัว +พันลอก +พันลาย +พันลำ +พันลึก +พันลือ +พันเอกหาญ +พันแสง +พันไฉน +พับ +พับฐาน +พับผ่า +พับผ้า +พับลิก +พับลิช +พับลิเชอร์ +พัพพี +พัฟ +พัลลภ +พัลวัน +พัลโมนารี +พัว +พัวพัน +พัวะ +พัศดี +พัสดุ +พัสดุภัณฑ์ +พัสดุไปรษณีย์ +พัสตร์ +พัสถาน +พัสวี +พัสเดา +พั้นช์ +พา +พาก +พากย์ +พากเพียร +พาง +พาชี +พาซื่อ +พาณ +พาณวาร +พาณิช +พาณิชยการ +พาณิชย์ +พาณินี +พาณี +พาด +พาดพิง +พาดไฉน +พาต +พาต้า +พาท +พาทย์ +พาธ +พาธา +พาน +พานทอง +พานร +พานอรามา +พานิชกุล +พานิชอนันต์ +พานเรศ +พาพย์ +พาม +พาย +พายม้า +พายัพ +พายุ +พายแอปเปิล +พารณ +พารา +พารากราฟ +พาราฟิน +พารามิเตอร์ +พาราเซตามอล +พาราเมาท์ +พาราโกไนต์ +พาราโบลา +พาราไดซ์ +พาราไดส์ +พาราไทออน +พาร์ +พาร์ตเนอร์ +พาร์ทไทม์ +พาร์เซก +พาล +พาลี +พาลุก +พาวิเลียน +พาส +พาสนา +พาสน์ +พาสุกรี +พาสเซนเจอร์ +พาสเวิร์ด +พาสไทม์ +พาห +พาหนะ +พาหะ +พาหา +พาหุ +พาหุรัด +พาฬ +พาฬมฤค +พาฬหะ +พาเนล +พาเรด +พาเรียเม้นท์ +พาเหรด +พาเหียร +พาโล +พาไล +พำ +พำนัก +พำพวก +พำพึม +พำลา +พิกล +พิกสิต +พิกัด +พิกัติ +พิกัน +พิการ +พิกุล +พิกเฉย +พิกเซล +พิกเมนท์ +พิคเชอร์ +พิคโคโล +พิฆน์ +พิฆาต +พิฆเนศ +พิง +พิงค์ +พิจย +พิจล +พิจัย +พิจาร +พิจารณา +พิจารณ์ +พิจิก +พิจิต +พิจิตร +พิจิโอไนต์ +พิชญ์ +พิชย +พิชัย +พิชัยญาติ +พิชาน +พิชิต +พิซซ่า +พิณ +พิดทูล +พิดมอนไทต์ +พิดรก +พิดาน +พิตช์เบลนด์ +พิตร +พิถย +พิถี +พิถีพิถัน +พิทย +พิทยา +พิทยาคม +พิทยาคาร +พิทยาลัย +พิทย์ +พิทักษ์ +พิทักษ์ธรรม +พิทักษ์ปิ่นสุข +พิทูร +พิธาน +พิธี +พิธีกร +พิธีกรรม +พิธีการ +พิธีธรรม +พิธีรีตอง +พิธีสาร +พิธุ +พิธุร +พินทุ +พินพง +พินอบพิเทา +พินัย +พินัยกรรม +พินาศ +พินิจ +พินิต +พินิศ +พิบัติ +พิบาก +พิบุล +พิบูล +พิบูลมังสาหาร +พิบูลย์ +พิบูลย์สงคราม +พิปริต +พิปลาส +พิปัสสนา +พิปูน +พิพรรธ +พิพักพิพ่วน +พิพัฒ +พิพัฒนากร +พิพัฒน์ +พิพากษา +พิพากษ์ +พิพาท +พิพิธ +พิพิธภัณฑสถาน +พิพิธภัณฑ์ +พิภพ +พิภัช +พิภาค +พิมพา +พิมพ์ +พิมพ์เขียว +พิมล +พิมาน +พิมาย +พิมุข +พิมเสน +พิร +พิรอด +พิรากล +พิราบ +พิราม +พิราลัย +พิริย +พิริยะ +พิรี้พิไร +พิรุณ +พิรุธ +พิร์โรไทต์ +พิลาป +พิลาลส +พิลาส +พิลึก +พิลึกกึกกือ +พิลึกพิลั่น +พิศ +พิศวง +พิศวาส +พิศาล +พิศาลสงคราม +พิศุทธิ์ +พิศุทธ์ +พิษ +พิษฐาน +พิษณุโลก +พิษสง +พิสดาร +พิสมร +พิสมัย +พิสัง +พิสัช +พิสัย +พิสิฐ +พิสิษฐ์บรรณกร +พิสุทธิ์ +พิสูจน์ +พิหค +พิหาร +พิฬาร +พิเคราะห์ +พิเชฐ +พิเทศ +พิเนต +พิเภก +พิเรนทร์ +พิเราะ +พิเศษ +พิโคไทต์ +พิโดร +พิโมกข์ +พิโยกพิเกน +พิโยค +พิโรธ +พิโลน +พิโลล +พิไร +พิไล +พี +พีช +พีชคณิต +พีซ +พีซี +พีร +พีระมิด +พีรามิด +พีลิแกน +พีเจียน +พีเพิล +พีเรียด +พี่ +พี้ +พี้โพ้ +พึง +พึงตา +พึงใจ +พึม +พึมพำ +พึ่ง +พึ่งบุญ +พึ่งพา +พึ่บ +พืช +พืชคาม +พืชชั้นต่ำ +พืชชั้นสูง +พืชพันธุ์ +พืด +พื้น +พื้นดี +พื้นที่ +พื้นเพ +พื้นๆ +พุ +พุก +พุกาม +พุง +พุงจง +พุงดอ +พุงปลา +พุงพวง +พุงแก +พุงโร +พุซซี่ +พุฒ +พุฒิ +พุฒิโพธิ์ +พุด +พุดจีบ +พุดดิ้ง +พุดตาน +พุทธ +พุทธกาล +พุทธคุณ +พุทธจักร +พุทธชาด +พุทธปฏิมา +พุทธมามกะ +พุทธรักษา +พุทธศักราช +พุทธศาสนิกชน +พุทธสถาน +พุทธสมัย +พุทธะ +พุทธาวาส +พุทธิ +พุทธเจดีย์ +พุทธโอสถ +พุทรา +พุทโธ่ +พุทไธสง +พุธ +พุนพิน +พุพอง +พุมเรียง +พุ่ง +พุ่งหลาว +พุ่ม +พุ่มดอกไม้ +พุ่มพวง +พุ่มอุไร +พุ่มโพธิ์ +พุ้ย +พู +พูกาม +พูด +พูดจา +พูน +พูนทรัพย์สิน +พูนสุข +พูพอน +พูล +พูลิทเซอร์ +พู่ +พู่กัน +พู่ระหง +พู้น +พเนก +พเนจร +พเยีย +พ่น +พ่วง +พ่วงทรัพย์ +พ่วงพี +พ่อ +พ่อขุน +พ่อคุณ +พ่อค้า +พ่อตา +พ่ะ +พ่าง +พ่าน +พ่าย +พ่าห์ +พ้น +พ้อ +พ้อง +พ้องพาน +พ้อม +ฟก +ฟกช้ำ +ฟรอซ +ฟรอสท์ +ฟรักโทส +ฟริเซียน +ฟรี +ฟรีบาร์ +ฟรีส +ฟรีออน +ฟรีเกต +ฟรีเทาน์ +ฟรุ้ต +ฟร้อนท์ +ฟลอปปีดิสก์ +ฟลอราเทป +ฟลอริดา +ฟลอริสท์ +ฟลอร์ +ฟลอร์โชว์ +ฟลอเรนซ์ +ฟลอเรส +ฟลาย +ฟลินต์ +ฟลุ้ค +ฟลุ๊ค +ฟลูออรีน +ฟลูออไรต์ +ฟล็อปปี้ดิสก์ +ฟอก +ฟอกซัก +ฟอกซ์ทร็อต +ฟอกผ้า +ฟอง +ฟองกาม +ฟองน้ำ +ฟองมัน +ฟอด +ฟอดแฟด +ฟอน +ฟอนต์ +ฟอยล์ +ฟอร์จูน +ฟอร์ม +ฟอร์มาลดีไฮด์ +ฟอร์มาลิน +ฟอร์มูล่า +ฟอร์สเตอไรต์ +ฟอร์เวิร์ด +ฟอร์เอเวอร์ +ฟอร์แมต +ฟอร์แมนเตรา +ฟอร์โมซา +ฟอล์คแลนด์ +ฟอสซิล +ฟอสฟอรัส +ฟอสฟอไรต์ +ฟอสเฟต +ฟะฟัด +ฟะฟั่น +ฟะฟ่าย +ฟัก +ฟักข้าว +ฟักตัว +ฟักทอง +ฟักฟูม +ฟัง +ฟังก์ชัน +ฟังชั่น +ฟังออก +ฟังได้ +ฟัด +ฟัน +ฟันดาบ +ฟันปลา +ฟันฝ่า +ฟันม้า +ฟันหนู +ฟันแท้ +ฟัลครัม +ฟัลคอน +ฟั่น +ฟั้น +ฟาก +ฟากท่า +ฟาง +ฟางลอย +ฟาด +ฟาดหัว +ฟาทอม +ฟาน +ฟาย +ฟายมือ +ฟายาไลต์ +ฟาริงซ์ +ฟาร์ม +ฟาร์มวัฒนา +ฟาวล์ +ฟาสซิสต์ +ฟาสฟู้ด +ฟาเรนไฮต์ +ฟาโรห์ +ฟิก +ฟิกซ์ +ฟิจิ +ฟิชชั่น +ฟิด +ฟิดแบค +ฟิต +ฟิตเนส +ฟินิกซ์ +ฟินแลนด์ +ฟิบ +ฟิลด์ +ฟิลิปปินส์ +ฟิล์ม +ฟิวส์ +ฟิสิกส์ +ฟิโลโซพี +ฟีตัส +ฟีนิกซ์ +ฟีฟ่า +ฟีลิ่ง +ฟีลเตอร์ +ฟีเจอร์ +ฟีเมล +ฟีเวอร์ +ฟี่ +ฟี้ +ฟืน +ฟืม +ฟื้น +ฟื้นฟู +ฟุ +ฟุต +ฟุตบอล +ฟุตบาท +ฟุตโน้ต +ฟุน +ฟุบ +ฟุฟะ +ฟุลสแก๊ป +ฟุ่บ +ฟุ่มเฟือย +ฟุ้ง +ฟุ้งซ่าน +ฟุ้งเฟื่อง +ฟุ้งเฟ้อ +ฟู +ฟูก +ฟูจิ +ฟูด +ฟูดฟาด +ฟูฟ่อง +ฟูม +ฟูมน้ำ +ฟูมฟัก +ฟูมฟาย +ฟูแอร์เตเวนตุรา +ฟู่ +ฟู่ฟ่า +ฟ่อ +ฟ่อง +ฟ่องฟู +ฟ่อน +ฟ่าง +ฟ่าม +ฟ้ง +ฟ้อ +ฟ้อง +ฟ้อน +ฟ้า +ฟ้าผ่า +ฟ้าฝ่อ +ฟ้าร้อง +ฟ้าหลัว +ฟ้าแลบ +ภควดี +ภควัต +ภควันต์ +ภควัม +ภควา +ภคันทลา +ภคินี +ภณิดา +ภพ +ภมการ +ภมร +ภมริน +ภมรี +ภมุ +ภมู +ภยันตราย +ภยาคติ +ภรณี +ภรณีภู +ภรต +ภรรดร +ภรรดา +ภรรยา +ภระมร +ภระมรี +ภราดร +ภราดรภ +ภราดรภาพ +ภราดา +ภราตรภ +ภริยา +ภรู +ภฤงคาร +ภฤดก +ภฤดี +ภฤตย์ +ภฤศ +ภฤษฏ์ +ภวกษัย +ภวตัณหา +ภวนะ +ภวปาระ +ภวัคร +ภวังค +ภวังคจิต +ภวังค์ +ภวันดร +ภวาภพ +ภักขะ +ภักดี +ภักดีกุล +ภักต +ภักติ +ภักษ +ภักษา +ภักษาหาร +ภัค +ภัคน์ +ภังค +ภังคี +ภัจ +ภัญชะ +ภัณฑ +ภัณฑนะ +ภัณฑาคาร +ภัณฑู +ภัณฑ์ +ภัต +ภัตกิจ +ภัตตาคาร +ภัตตาหาร +ภัทร +ภัทรบท +ภัทรบิฐ +ภัพ +ภัย +ภัสดา +ภัสตรา +ภัสมะ +ภัสสร +ภา +ภากร +ภาค +ภาคตัดกรวย +ภาคทัณฑ์ +ภาคนิพนธ์ +ภาคยานุวัติ +ภาคย์ +ภาคินี +ภาคิไนย +ภาคี +ภาคียะ +ภาคเสธ +ภาชนะ +ภาชนีย +ภาชน์ +ภาชี +ภาณ +ภาณก +ภาณวาร +ภาณี +ภาณุ +ภาณุมาศ +ภาณุรังษี +ภาดร +ภาดา +ภาตร +ภาตา +ภาติกะ +ภาติกา +ภาติยะ +ภาตุ +ภาพ +ภาพกาก +ภาพจริง +ภาพถ่าย +ภาพพจน์ +ภาพยนตร์ +ภาพยนต์ +ภาพย์ +ภาพลวงตา +ภาพเสมือน +ภาม +ภาย +ภายนอก +ภายใน +ภาร +ภารกิจ +ภารดี +ภารต +ภารตี +ภารยา +ภาระ +ภารา +ภารโรง +ภาว +ภาวนา +ภาวะ +ภาวะฉุกเฉิน +ภาษ +ภาษก +ภาษณ์ +ภาษา +ภาษาศาสตร์ +ภาษิต +ภาษี +ภาษีเจริญ +ภาส +ภาสกร +ภาสน์ +ภาสวร +ภาสา +ภาสุร +ภิกขา +ภิกขาจาร +ภิกขุ +ภิกขุณี +ภิกขุนี +ภิกษา +ภิกษาจาร +ภิกษาหาร +ภิกษุ +ภิกษุณี +ภิงคาร +ภิงส +ภิงสนะ +ภิญโญ +ภิญโญภาพ +ภิตติ +ภิท +ภิน +ภินชาติ +ภินทน +ภินทนาการ +ภินท์ +ภิยโย +ภิรมย์ +ภิษัช +ภิส +ภิสัก +ภีตะ +ภีม +ภีรุ +ภุกต +ภุขัน +ภุช +ภุชค +ภุชงคม +ภุชงค์ +ภุชา +ภุญช +ภุต +ภุม +ภุมระ +ภุมรา +ภุมริน +ภุมรี +ภุมวาร +ภุมเรศ +ภุส +ภู +ภูกระดึง +ภูฏาน +ภูฐาน +ภูดล +ภูดาด +ภูต +ภูตคาม +ภูตบดี +ภูตผี +ภูตรูป +ภูติ +ภูตี +ภูธร +ภูธเรศ +ภูนาถ +ภูนายก +ภูบดี +ภูบาล +ภูป +ภูผา +ภูภุช +ภูม +ภูมิ +ภูมิคุ้มกัน +ภูมิฐาน +ภูมิธร +ภูมิธรรม +ภูมินทร์ +ภูมิบาล +ภูมิประเทศ +ภูมิปัญญา +ภูมิพล +ภูมิภาค +ภูมิรัฐศาสตร์ +ภูมิลำเนา +ภูมิศาสตร์ +ภูมิศาสตร์กายภาพ +ภูมิศาสตร์การเกษตร +ภูมิศาสตร์การเมือง +ภูมิศาสตร์ประชากร +ภูมิศาสตร์เศรษฐกิจ +ภูมิเวท +ภูมิแพ้ +ภูมิใจ +ภูมี +ภูริ +ภูรี +ภูรโลก +ภูว +ภูวดล +ภูวน +ภูวนาถ +ภูวเนตร +ภูวไนย +ภูษณ +ภูษนะ +ภูษา +ภูษามาลา +ภูษิต +ภูเก็ต +ภูเขา +ภูเขาทอง +ภูเขาน้ำแข็ง +ภูเขาไฟ +ภูเขียว +ภูเนตุ +ภูเบศ +ภูเรือ +ภูเวียง +ภูโช +ภู่ +ภู่สุวรรณ +มก +มกร +มกราคม +มกส +มกุฎ +มกุล +มคธ +มฆวัน +มงกุฎ +มงคล +มงคลทรัพย์ +มงคลวราราม +มงโกรย +มณฑก +มณฑนะ +มณฑป +มณฑล +มณฑา +มณฑารพ +มณฑิร +มณฑ์ +มณี +มณีการ +มณีพืช +มณีราค +มณเฑียร +มด +มดดำ +มดยอบ +มดลูก +มดาย +มดี +มดเท็จ +มดแดง +มตก +มตกภัต +มตกภัย +มติ +มติมหาชน +มทนะ +มทนียะ +มธุ +มธุกร +มธุกรี +มธุตฤณ +มธุป +มธุปฎล +มธุพรต +มธุร +มธุรส +มธุสร +มธุเศษ +มธุโกศ +มน +มนตรี +มนตร์ +มนต์ +มนท +มนทาทร +มนทิร +มนสิการ +มนัส +มนัสวี +มนิมนา +มนิลา +มนุ +มนุช +มนุญ +มนุษย +มนุษยชาติ +มนุษยธรรม +มนุษยศาสตร์ +มนุษยสัมพันธ์ +มนุษยเทพ +มนุษยโลก +มนุษย์ +มนุษย์อวกาศ +มนุสาร +มนู +มนูสาร +มนเทียร +มมังการ +มมาก +มยุร +มยุรฉัตร +มยุระ +มยุรา +มยุรี +มยุเรศ +มยูข +มยูร +มร +มรกต +มรคา +มรฑป +มรณ +มรณกรรม +มรณธรรม +มรณบัตร +มรณภัย +มรณภาพ +มรณะ +มรณ์ +มรดก +มรรค +มรรคนายก +มรรคผล +มรรคา +มรรตย +มรรทน +มรรยา +มรรยาท +มรรษ +มรสุม +มริจ +มริยาท +มรีจิ +มรุ +มรุต +มฤค +มฤคทายวัน +มฤคย์ +มฤคราช +มฤควัน +มฤคศิร +มฤจฉา +มฤดก +มฤต +มฤตก +มฤตยู +มฤทุ +มฤทุกะ +มฤธุ +มฤษา +มล +มลทิน +มลน +มลพิษ +มลภาวะ +มลรัฐ +มลละมั่ง +มลวก +มละ +มลัก +มลาก +มลาซอ +มลาน +มลาย +มลายา +มลายู +มลาว +มลาไสย +มลิน +มลิ้น +มลื่น +มลโค +มล่อน +มล่อย +มล่าน +มล้า +มล้าง +มวก +มวกผา +มวน +มวย +มวยล้ม +มวยวัด +มวยไทย +มวล +มวลชน +มวลสาร +มวลอากาศ +มสาร +มสิ +มหกรรม +มหภาค +มหภาพ +มหรณพ +มหรรฆ +มหรรณพ +มหรสพ +มหัคฆ +มหัณณพ +มหัต +มหันต +มหันตภัย +มหันตโทษ +มหันต์ +มหัยกา +มหัล +มหัศจรรย์ +มหา +มหากรุณาธิคุณ +มหากาฬ +มหาจักร +มหาชน +มหาชนะชัย +มหาชัย +มหาชาติ +มหาดเล็ก +มหาดเล็กหลวง +มหาดไทย +มหาตมะ +มหาทุน +มหาธาตุ +มหานคร +มหานครนิเวศน์ +มหานสะ +มหานาค +มหานิล +มหาบพิตร +มหาบุศย์ +มหาพน +มหาพรหม +มหาพฤฒาราม +มหาภูต +มหามงกุฎ +มหายาน +มหายุค +มหาราช +มหาลาภ +มหาวงศ์ +มหาวรรค +มหาวิทยาลัย +มหาศาล +มหาสดำ +มหาสมุทร +มหาสารคาม +มหาสิน +มหาหงส์ +มหาหิงคุ์ +มหาอำนาจ +มหาอุจ +มหาอุด +มหาอุปรากร +มหาเทพ +มหาเมฆ +มหาไชย +มหาไถ่ +มหิ +มหิงส์ +มหิดล +มหิทธิ +มหิธร +มหินท์ +มหิบ +มหิมา +มหิศร +มหิศวร +มหิษ +มหิษี +มหึมา +มหุรดี +มหู +มอ +มอคราม +มอง +มองคร่อ +มองซิเออร์ +มองต์บลังค์ +มองโกล +มองโกลอยด์ +มองโกเลีย +มอซอ +มอญ +มอด +มอดม้วย +มอทโต +มอน +มอนตานา +มอนตโกเมอริ +มอนต์มอริลโลไนต์ +มอนต์เปเลียร์ +มอนิเตอร์ +มอนไข่ +มอบ +มอบตัว +มอม +มอมยา +มอมเมา +มอมแมม +มอริเชียส +มอริเตเนีย +มอร์ฟีน +มอร์มอน +มอร์แกไนต์ +มอลตา +มอลล์ +มอลเดเวีย +มอลโทส +มอสโคว์ +มอหมึก +มอเตอร์ +มอเตอร์เวย์ +มอเตอร์ไซค์ +มอโรไต +มะ +มะกรูด +มะกล่ำ +มะกอก +มะกะโรนี +มะกา +มะกูด +มะก่อง +มะขวิด +มะขาม +มะข่วง +มะคะ +มะค่า +มะงัน +มะงั่ว +มะงุมมะงาหรา +มะซัก +มะซาง +มะซ่าน +มะดัน +มะดา +มะดูก +มะตอย +มะตะบะ +มะตา +มะตาด +มะตาหะรี +มะตี +มะตึ่ง +มะตื๋น +มะตูม +มะต้อง +มะนาว +มะนิลา +มะปราง +มะปริง +มะป่อง +มะฝ่อ +มะพร้าว +มะพลับ +มะพูด +มะมี่ +มะมื่น +มะมุด +มะม่วง +มะม่วงหิมพานต์ +มะม่าว +มะยง +มะยม +มะระ +มะริด +มะรืน +มะรุม +มะละกอ +มะละกา +มะลารอกัน +มะลำ +มะลิ +มะลิน +มะลิ่ม +มะลื่น +มะลุลี +มะวาร +มะสัง +มะหลิ่ม +มะหวด +มะหะหมัด +มะหัล +มะหาด +มะหิ่ง +มะอึก +มะฮอกกานี +มะเกลือ +มะเขือ +มะเดหวี +มะเดื่อ +มะเฟือง +มะเมอ +มะเมีย +มะเร็ง +มะเส็ง +มะเหงก +มะแข่น +มะแตก +มะแพน +มะแฟน +มะแม +มะแว้ง +มะโรง +มะโว้ +มะไฟ +มัก +มักกะ +มักกะสัน +มักขะ +มักขิกา +มักฏกะ +มักฏะ +มักมาก +มักได้ +มัค +มัคคะ +มัคคุเทศก์ +มัคนา +มัคนายก +มัฆวา +มัฆวาน +มังกง +มังกร +มังกุ +มังคละ +มังคละศึกษา +มังคลาราม +มังคุด +มังค่า +มังตาน +มังส +มังสวิรัติ +มังสะ +มังสา +มังสี +มัจจะ +มัจจุ +มัจจุราช +มัจฉระ +มัจฉริยะ +มัจฉรี +มัจฉะ +มัจฉา +มัจฉาชาติ +มัจฉานุ +มัช +มัชชาร +มัชชาร์ +มัชฌ +มัชฌิม +มัชฌิมยาม +มัชฌิมวัย +มัชฌิมา +มัชณิมา +มัญจก +มัญจาคีรี +มัญชีร +มัญชุ +มัฏฐะ +มัณฑ +มัณฑน +มัณฑนศิลป์ +มัณฑนา +มัณฑุก +มัด +มัดจำ +มัดหมู +มัตตะ +มัตตา +มัตถก +มัตถลงค์ +มัตถลุงค์ +มัตสยะ +มัตสยา +มัตสร +มัทนะ +มัทนา +มัทนียะ +มัทยะ +มัธย +มัธยฐาน +มัธยม +มัธยมศึกษา +มัธยมา +มัธยัสถ์ +มัน +มันดี +มันตา +มันถะ +มันทิร +มันนก +มันปลา +มันปู +มันส์ +มันเทศ +มันเสา +มันแกว +มันโรเวีย +มันไส้ +มับ +มับๆ +มัมมี่ +มัย +มัยลาภ +มัลก +มัลดิฟ +มัลดีฟ +มัลติ +มัลติมีเดีย +มัลละ +มัลลิกา +มัว +มัวซัว +มัวมอม +มัวเมา +มัศยา +มัสดก +มัสดุ +มัสตาร์ด +มัสตาร์ดแก๊ส +มัสมั่น +มัสยา +มัสยิด +มัสรู่ +มัสลิน +มัสสุ +มัสแกต +มัสโคไวต์ +มั่ง +มั่งคั่ง +มั่งมี +มั่น +มั่นคง +มั่นสิน +มั่นใจ +มั่ว +มั่วสุม +มั้ม +มา +มาก +มากกว่า +มากมาย +มากว่า +มาคสิร +มาคิน +มาฆ +มาฆบูชา +มาฆะ +มางสะ +มาจอร์กา +มาณพ +มาณวิกา +มาด +มาดมัวเสล +มาดริด +มาดอนนา +มาดา +มาดากัสการ์ +มาดาม +มาดูรา +มาตงค์ +มาตร +มาตรการ +มาตรฐาน +มาตรา +มาตราส่วน +มาตฤ +มาตฤกะ +มาตังค +มาตา +มาตานุสรณ์ +มาตามไหยกา +มาติก +มาติกา +มาตี +มาตุ +มาตุคาม +มาตุจฉา +มาตุภูมิ +มาตุรงค์ +มาตุราช +มาตุละ +มาตุลา +มาตุลานี +มาตุเรศ +มาท +มาทาดอร์ +มาธุร +มาธุสร +มาน +มานพ +มานะ +มานัต +มานัส +มานากัว +มานามา +มานิต +มานี +มานุษ +มานุษยวิทยา +มาบ +มาบตาพุด +มาบุญครอง +มาปก +มาพูโต +มาภา +มาย +มายด์ +มายอ +มายัง +มายา +มายากร +มายากล +มายาวี +มาร +มารค +มารชิ +มารชิต +มารดร +มารดา +มารผจญ +มารยา +มารยาท +มารศรี +มารษา +มาระ +มาราธอน +มาริ +มาริต +มารินา +มารุต +มาร์กอัพ +มาร์การีน +มาร์ค +มาร์ควิส +มาร์คัส +มาร์คาไซต์ +มาร์คเกอร์ +มาร์จิน +มาร์ช +มาร์ดิกราส์ +มาร์ตินิก +มาร์ตินี +มาร์ล +มาร์เก็ต +มาร์เคซัส +มาร์แชล +มาร์ไทต์ +มาลย์ +มาลัย +มาลา +มาลากาซี +มาลาตี +มาลาวี +มาลาเรีย +มาลาไคต์ +มาลินี +มาลี +มาลีนุสรณ์ +มาลุต +มาศ +มาส +มาสก +มาสคารา +มาสบาเต +มาสเตอร์ +มาหิส +มาห์ +มาฬก +มาเจสติค +มาเจสตี +มาเดียรา +มาเฟีย +มาเรียนา +มาเรียน่าส์ +มาเล +มาเลตา +มาเลเซีย +มาแขก +มาโคร +มาโนชญ์ +มาโปรด +มำเลือง +มิ +มิกซ์ +มิค +มิคลุท +มิคสัญญี +มิคสิร +มิคี +มิงโค +มิจฉา +มิจฉาชีพ +มิจฉาทิฐิ +มิจฉาบถ +มิชชั่น +มิชิแกน +มิญช +มิด +มิดชิด +มิดฟิลด์ +มิดหมี +มิดเดย์ +มิดเดิลแวร์ +มิดเทอม +มิดเมี้ยน +มิดเยียร์ +มิดเว +มิดไนท์ +มิต +มิตร +มิตรบำรุง +มิตรประชา +มิตรพันธ์ +มิตรภาพ +มิตรวิถี +มิตรอนันต์ +มิตรอุดม +มิตรเด็ก +มิตรแท้ +มิตรไมตรี +มิติ +มิถยา +มิถุน +มิถุนายน +มิทธะ +มิทธี +มินดาเนา +มินตรา +มินตา +มินท์ +มินนิโซตา +มินสก์ +มินอร์กา +มินิมัม +มินิสเกิร์ต +มินิสเตอร์ +มินเนอรัล +มินโดโร +มิน่า +มิยา +มิรันตี +มิราจ +มิลติ +มิลลิ +มิลลิกรัม +มิลลิบาร์ +มิลลิลิตร +มิลลิเมตร +มิลอส +มิลาต +มิวสิค +มิวสิควีดีโอ +มิวเซียม +มิศร +มิส +มิสกรี +มิสชันมารี +มิสชั่น +มิสซา +มิสซิส +มิสซิสซิปปี +มิสซูรี +มิสเตอร์ +มิเตอร์ +มิโซล +มิใช่ +มิได้ +มิไย +มิ่ง +มิ่งขวัญ +มิ่งมิตร +มิ้งค์ +มิ้ม +มี +มีชื่อ +มีชู้ +มีด +มีดตอก +มีดพร้า +มีดยับ +มีดหมอ +มีดโกน +มีทติ้ง +มีน +มีนนิ่ง +มีนบุรี +มีนาคม +มีสุวรรณ +มีหน้า +มีฬห +มีอายุ +มีเดีย +มีเดียม +มีเทน +มีเพียร +มี่ +มี่ฉาว +มี่สั้ว +มึก +มึกมวย +มึง +มึน +มึนงง +มึนชา +มึนซึม +มึนตึง +มึนเมา +มืด +มืดค่ำ +มืดมน +มืดมัว +มืน +มือ +มือกาว +มือขวา +มือดี +มือตก +มือบอน +มือปืน +มือผี +มือมืด +มือลิง +มือสี +มือเบา +มือไว +มื่น +มื้อ +มุ +มุก +มุกดา +มุกดาหาร +มุกุร +มุกุล +มุกเดน +มุข +มุขบาฐ +มุขย +มุขลด +มุคคะ +มุคธ์ +มุคร +มุง +มุจฉา +มุจน +มุจลินท์ +มุญจนะ +มุญช +มุฐ +มุฐิ +มุณฑ +มุด +มุดหัว +มุต +มุตกิด +มุตฆาต +มุตตะ +มุตตา +มุตติ +มุติ +มุติงค์ +มุทค +มุทคร +มุททา +มุทธชะ +มุทธา +มุทรา +มุทะลุ +มุทา +มุทิกา +มุทิตา +มุทิน +มุทุ +มุทุตา +มุนิ +มุนินทร์ +มุนี +มุบ +มุบมิบ +มุบๆ +มุม +มุมก้ม +มุมฉาก +มุมตรง +มุมมืด +มุมานะ +มุมเงย +มุมเท +มุมเห +มุรช +มุรธา +มุลุต +มุลู +มุลไลต์ +มุสละ +มุสลิม +มุสะ +มุสา +มุสิก +มุหงิด +มุหุต +มุ่ง +มุ่งมาด +à¸¡à¸¸à¹ˆà¸™ +มุ่นใจ +มุ่ม +มุ่ย +มุ้ง +มุ้ม +มูก +มูกมัน +มูค +มูซัง +มูตร +มูน +มูนมอง +มูนสโตน +มูนา +มูฟ +มูมมาม +มูรดี +มูรธ +มูรธาภิเษก +มูล +มูลค่า +มูลจิต +มูลฐาน +มูลนาย +มูลนิธิ +มูลฝอย +มูลภัณฑ์กันชน +มูลา +มูลโค +มูลไถ +มูวี่ +มูสัง +มูสิก +มูฬห +มูเซอ +มูเล่ +มู่ทู่ +มู่ลี่ +มู้ด +มู้ดดี้ +มเหศ +มเหศวร +มเหสักข์ +มเหสิ +มเหสี +มเหาษธ +มเหาฬาร +มโน +มโนกรรม +มโนคติ +มโนช +มโนชญ์ +มโนธรรม +มโนภาพ +มโนมัย +มโนรถ +มโนรม +มโนรมย์ +มโนราห์ +มโนสาเร่ +มโนหร +มโหฆ +มโหรสพ +มโหระทึก +มโหรี +มโหษธ +มโหฬาร +มไหสวรรค์ +ม็อบ +ม็อยซ์เจอร์ +ม่ง +ม่น +ม่วง +ม่วงสามสิบ +ม่วงแค +ม่วน +ม่วย +ม่อง +ม่อต้อ +ม่อน +ม่อม +ม่อย +ม่อฮ่อม +ม่าน +ม่านตา +ม่าย +ม้วน +ม้วย +ม้า +ม้าง +ม้าต้น +ม้าน +ม้าน้ำ +ม้าม +ม้ามืด +ม้ารำ +ม้าลาย +ม้าล่อ +ม้าเทศ +ม้าใช้ +ยก +ยกครู +ยกทรง +ยกน +ยกนะ +ยกนิ้ว +ยกพื้น +ยกฟ้อง +ยกมือ +ยกยอ +ยกยอด +ยกย่อง +ยกเค้า +ยกเมฆ +ยกเลิก +ยกเว้น +ยกใหญ่ +ยกไว้ +ยง +ยงโย่ +ยติ +ยติภังค์ +ยถา +ยถากรรม +ยนตร์ +ยนต์ +ยม +ยมก +ยมทูต +ยมนา +ยมบาล +ยมราช +ยมล +ยมโดย +ยมโลก +ยรรยง +ยล +ยวง +ยวด +ยวดยง +ยวดยาน +ยวดยิ่ง +ยวน +ยวนยี +ยวบ +ยวบยาบ +ยวบๆ +ยวาคุ +ยศ +ยศเส +ยอ +ยอก +ยอง +ยองใย +ยองไย่ +ยอชต์ +ยอด +ยอดจาก +ยอดดี +ยอดน้ำ +ยอน +ยอบ +ยอบแยบ +ยอม +ยอมรับ +ยอร์ชเทาน์ +ยอแสง +ยะ +ยะยอบ +ยะยัน +ยะยับ +ยะยาน +ยะย้าย +ยะย้าว +ยะรัง +ยะลา +ยะหริ่ง +ยะหา +ยะหิทา +ยะแย้ง +ยะโฮร์ +ยะโฮร์บารู +ยัก +ยักขินี +ยักข์ +ยักท่า +ยักยอก +ยักย้าย +ยักษิณี +ยักษี +ยักษ์ +ยักหยาว +ยักเยื้อง +ยัง +ยังชีพ +ยัชน +ยัชมาน +ยัญ +ยัฐิ +ยัด +ยัดเยียด +ยัติภังค์ +ยัน +ยันตร +ยันตรกรรม +ยันตร์ +ยันต์ +ยับ +ยับยง +ยับยั้ง +ยับยาน +ยับยาบ +ยัวร์ +ยัษฎิ +ยั่งยืน +ยั่น +ยั่ว +ยั่วยวน +ยั่วเย้า +ยั้ง +ยั้ว +ยั้วเยี้ย +ยา +ยาก +ยากจน +ยากนาน +ยากไร้ +ยาค +ยาคุ +ยาง +ยางชุมน้อย +ยางตลาด +ยางบอน +ยางพารา +ยางลบ +ยางสน +ยางอาย +ยาจก +ยาจน +ยาจืด +ยาฉุน +ยาชก +ยาด +ยาดา +ยาดำ +ยาตนา +ยาตร +ยาตรา +ยาตั้ง +ยาธาตุ +ยาน +ยานก +ยานคาง +ยานนาวา +ยานมาศ +ยานัตถุ์ +ยานาวา +ยานี +ยาบ +ยาบ้า +ยาปน +ยาฝอย +ยาม +ยามกาลิก +ยามพาด +ยามักการ +ยามิก +ยามเกา +ยามโยค +ยาย +ยายทวด +ยายนุ้ย +ยายร่ม +ยายี +ยายแป้น +ยาร์ด +ยาว +ยาวนาน +ยาวรี +ยาวัส +ยาสลบ +ยาสั่ง +ยาสีฟัน +ยาสูบ +ยาหมู่ +ยาหยัง +ยาหยี +ยาหัด +ยาอุนเด +ยาเยีย +ยาเส้น +ยาแดง +ยาแฝด +ยาใจ +ยาไฉน +ยาไส้ +ยำ +ยำยาม +ยำเกรง +ยำเยง +ยำเยีย +ยิก +ยิง +ยิงฟัน +ยิฏฐะ +ยิน +ยินดี +ยินยอม +ยินร้าย +ยินแคลน +ยินใจ +ยิบ +ยิบๆ +ยิปซัม +ยิปซี +ยิม +ยิมนาสติก +ยิมเนเซียม +ยิว +ยิวยิตสู +ยิหวา +ยิ่ง +ยิ่งยวด +ยิ่งอำนวย +ยิ้ม +ยิ้มประกอบ +ยิ้มประยูร +ยิ้มสยาม +ยี +ยีด +ยีน +ยียวน +ยีราฟ +ยีสต์ +ยี่ +ยี่ก่า +ยี่งอ +ยี่ภู่ +ยี่สก +ยี่สง +ยี่สน +ยี่สาน +ยี่สาย +ยี่สิบ +ยี่สุ่น +ยี่ส่าน +ยี่หระ +ยี่หร่า +ยี่หุบ +ยี่ห้อ +ยี่เก +ยี่เข่ง +ยี่โถ +ยี่โป้ +ยี้ +ยึกยือ +ยึด +ยึดต่อ +ยึดถือ +ยืด +ยืดยาด +ยืดหยุ่น +ยืน +ยืนต้น +ยืนนาน +ยืนยง +ยืนยัน +ยืนยาม +ยืนยาว +ยืนโรง +ยืม +ยื่น +ยื้อ +ยื้อยุด +ยุ +ยุกดิ +ยุกต์ +ยุค +ยุคนธร +ยุคล +ยุคลบาท +ยุคันต +ยุคันต์ +ยุง +ยุงปัด +ยุด +ยุต +ยุตติ +ยุติ +ยุติธรรม +ยุทธ +ยุทธการ +ยุทธนา +ยุทธนาการ +ยุทธภัณฑ์ +ยุทธภูมิ +ยุทธวิธี +ยุทธศาสตร์ +ยุทธหัตถี +ยุทธโยธา +ยุทธ์ +ยุทโธปกรณ์ +ยุบ +ยุบยอบ +ยุบยับ +ยุบยิบ +ยุบล +ยุพ +ยุพดี +ยุพยง +ยุพราช +ยุพา +ยุพาน +ยุพเยาว์ +ยุพเรศ +ยุยง +ยุรยาตร +ยุว +ยุวกนิษฐ +ยุวชน +ยุวดี +ยุวราช +ยุวา +ยุวาน +ยุแยง +ยุแหย่ +ยุโรป +ยุ่ง +ยุ่งเหยิง +ยุ่งใจ +ยุ่มย่าม +ยุ่ย +ยุ้ง +ยุ้ย +ยู +ยูกันดา +ยูง +ยูซิส +ยูตาห์ +ยูถะ +ยูถิกา +ยูทิลิตี +ยูนิกซ์ +ยูนิค +ยูนิคอน +ยูนิต +ยูนิตี้ +ยูนิฟอร์ม +ยูนิเซฟ +ยูนิเวอร์ซิตี้ +ยูนิเวิร์ส +ยูนิโค้ด +ยูปะ +ยูรยาตร +ยูริก +ยูลิซิส +ยูษะ +ยูสเซอร์ +ยูเครน +ยูเคลส +ยูเซด +ยูเนียน +ยูเนียนแจ็ค +ยูเรนัส +ยูเรนิไนต์ +ยูเรเนียม +ยูเอส +ยูเอ็น +ยูโกสลาเวีย +ยูโด +ยูโทเปีย +ยูโน +ยูโร +ยูโรเพียม +ยูไนเตด +ยูไนเต็ด +ยู่ +ยู่ยี่ +ยโส +ยโสธร +ย่น +ย่นย่อ +ย่อ +ย่อง +ย่องกริบ +ย่องแย่ง +ย่อท้อ +ย่อพล +ย่อม +ย่อมเยา +ย่อย +ย่อยยับ +ย่อย่น +ย่อหน้า +ย่อหย่อน +ย่อแย่ +ย่อแหยง +ย่ะ +ย่า +ย่าง +ย่างกุ้ง +ย่าทวด +ย่าน +ย่านตาขาว +ย่านลิเภา +ย่านาง +ย่าม +ย่ามใจ +ย่าหยา +ย่ำ +ย่ำยี +ย่ำเทือก +ย่ำแย่ +ย้วย +ย้อง +ย้อน +ย้อนยอก +ย้อม +ย้อมใจ +ย้อย +ย้อแย้ +ย้าย +ย้าว +ย้ำ +รก +รกชัฏ +รกช้าง +รกบิน +รกฟ้า +รกราก +รกร้าง +รง +รงกุ์ +รงควัตถุ +รงค์ +รงรอง +รจนา +รจิต +รจเรข +รจเลข +รชกะ +รชตะ +รชนิ +รชนีกร +รชะ +รณ +รณชัย +รณภู +รณภูมิ +รณรงค์ +รณสถาน +รณสิทธิ์พิชัย +รณัฐ +รด +รดน้ำ +รดี +รตน +รตนะ +รตะ +รติ +รถ +รถยนต์ +รถยา +รถเมล์ +รถไฟ +รถไฟฟ้า +รน +รบ +รบกวน +รบาญ +รบเร้า +รพ +รพิ +รพี +รม +รมณี +รมณีย +รมณีย์ +รมย์ +รมเยศ +รยะ +รยางค์ +รวก +รวง +รวด +รวดเร +รวดเร็ว +รวน +รวนเร +รวบ +รวบรวม +รวบรัด +รวม +รวมหัว +รวมโชค +รวมใจ +รวย +รวยริน +รวยลม +รวะ +รวันดา +รวิ +รวิวาร +รวี +รศนา +รส +รสชาติ +รสนา +รสนิยม +รสายนเวท +รสิก +รหัท +รหัส +รหิต +รอ +รอก +รอง +รองคอ +รองช้ำ +รองทรง +รองทุน +รองรัง +รองรับ +รองเง็ง +รองเท้า +รองเมือง +รอด +รอดตัว +รอดพ้น +รอน +รอนแรม +รอนๆ +รอบ +รอบคอบ +รอบรู้ +รอม +รอมชอม +รอมร่อ +รอย +รอยัล +รอลี +รอสซี +ระ +ระกะ +ระกา +ระกำ +ระกำนา +ระคน +ระคาง +ระคาย +ระฆัง +ระงม +ระงับ +ระงี่ +ระชวย +ระดม +ระดะ +ระดับ +ระดับทะเล +ระดับทะเลปานกลาง +ระดู +ระด่าว +ระตู +ระทก +ระทด +ระทม +ระทวย +ระทอด +ระทา +ระทึก +ระทึง +ระท้อ +ระนอง +ระนัม +ระนาด +ระนาบ +ระนาบเอียง +ระนาม +ระนาว +ระบบ +ระบม +ระบอบ +ระบัด +ระบับ +ระบาญ +ระบาด +ระบานี +ระบาย +ระบำ +ระบิ +ระบิล +ระบือ +ระบุ +ระฟ้า +ระมัดระวัง +ระมา +ระมาด +ระยอง +ระยะ +ระยัง +ระยัด +ระยับ +ระยั้ง +ระยาน +ระยาบ +ระยำ +ระยิบ +ระย่อ +ระย่อม +ระย้า +ระรวย +ระรอง +ระรัว +ระราน +ระราว +ระริก +ระรี่ +ระรึง +ระรื่น +ระร่อน +ระร่าย +ระลง +ระลวง +ระลอก +ระลอง +ระลัด +ระลึก +ระลุก +ระลุง +ระวัง +ระวาง +ระวาม +ระวาย +ระวิง +ระสาย +ระสี +ระส่ำระสาย +ระหง +ระหวย +ระหว่าง +ระหอบ +ระหัด +ระหาย +ระหุย +ระห่ำ +ระอา +ระอุ +ระเด่น +ระเนน +ระเนระนาด +ระเนียด +ระเบง +ระเบิด +ระเบิดไฮโดรเจน +ระเบียง +ระเบียน +ระเบียบ +ระเบียบวาระ +ระเบ็ง +ระเมียร +ระเร +ระเริง +ระเร็ว +ระเร้ง +ระเลิง +ระเหย +ระเหิด +ระเห็จ +ระแคะ +ระแงะ +ระแง้ +ระแด +ระแทะ +ระแนง +ระแนะ +ระแบบ +ระแรง +ระแร่ +ระแวง +ระแหก +ระแหง +ระโนด +ระโยง +ระโหย +ระใบ +ระไว +รัก +รักขสะ +รักขา +รักขิต +รักข์ +รักดป +รักดะ +รักบี้ +รักยม +รักษา +รักษ์ +รักษ์นาเวศน์ +รักหมู +รักเร่ +รักแร้ +รัง +รังกา +รังควาน +รังค์ +รังดุม +รังนก +รังนาน +รังบวบ +รังมด +รังรอง +รังวัด +รังสรร +รังสรรค์ +รังสฤษฎ์ +รังสิ +รังสิต +รังสิมา +รังสี +รังสีคอสมิก +รังสีวิทยา +รังสีแพทย์ +รังเกียจ +รังเพลิง +รังเรข +รังแก +รังแค +รังแตน +รังแรก +รังไข่ +รัจฉา +รัช +รัชกะ +รัชกาล +รัชชุ +รัชฎาภิเษก +รัชด +รัชดาภิเษก +รัชทายาท +รัชน +รัชนะ +รัชนี +รัญจวน +รัฐ +รัฐกรณ์ +รัฐทูต +รัฐธรรมนูญ +รัฐบาล +รัฐบุรุษ +รัฐประศาสนศาสตร์ +รัฐประศาสนศาสน์ +รัฐประศาสน์ +รัฐประหาร +รัฐมนตรี +รัฐวิสาหกิจ +รัฐศาสตร์ +รัฐสภา +รัด +รัดกุม +รัดตัว +รัดทึบ +รัดรึง +รัดรูป +รัดเกล้า +รัต +รัตกัมพล +รัตคน +รัตจันทน์ +รัตติ +รัตติกาล +รัตน +รัตนกรัณฑ์ +รัตนกวี +รัตนตรัย +รัตนบัลลังก์ +รัตนบุรี +รัตนมณี +รัตนะ +รัตนา +รัตนากร +รัตนาธิเบศร์ +รัตนาราม +รัตนโกสินทร์ +รัตนโกสินทร์สมโภช +รัตน์ +รัตพัสตร์ +รัตภูมิ +รัตมณี +รัตมา +รัถ +รัถยา +รัทเทอร์ฟอร์ด +รัทเทอร์ฟอร์เดียม +รัน +รันทด +รันทวย +รันทำ +รันธะ +รันนิงนัมเบอร์ +รันอิน +รันเวย์ +รันแทะ +รันไทม์ +รับ +รับคำ +รับจ้าง +รับปาก +รับมือ +รับรอง +รับสั่ง +รับแขก +รัม +รัมก +รัมณีย +รัมภา +รัมมี่ +รัมย์ +รัย +รัว +รัศมิมัต +รัศมิมาน +รัศมี +รัษฎากร +รัส +รัสสระ +รัสสะ +รัสเซลส์ +รัสเซีย +รั่ว +รั้ง +รั้งรอ +รั้น +รั้ว +รา +ราก +รากฐาน +รากดิน +รากฝอย +รากฟัน +รากษส +รากสาด +รากโษส +ราข้อ +ราค +ราคะ +ราคา +ราคิน +ราคี +ราง +รางจืด +รางชาง +รางดำ +รางนาน +รางน้ำ +รางวัล +รางแดง +ราช +ราชกรีฑา +ราชการ +ราชกิจจา +ราชครู +ราชคฤห์ +ราชญี +ราชฐาน +ราชดัด +ราชดำริ +ราชดำเนิน +ราชดำเนินกลาง +ราชดำเนินนอก +ราชดำเนินใน +ราชตฤณมัย +ราชติณมัย +ราชทัณฑ์ +ราชทินนาม +ราชทูต +ราชธรรม +ราชธานี +ราชนิกุล +ราชบพิธ +ราชบัณฑิตยสถาน +ราชบุตร +ราชบุรี +ราชบุรุษ +ราชปรารภ +ราชปะแตน +ราชพฤกษ์ +ราชพลี +ราชภักดี +ราชภัฎ +ราชภัฏ +ราชมัล +ราชมาษ +ราชมาส +ราชยาน +ราชย์ +ราชลัญจกร +ราชวงศ์ +ราชวรวิหาร +ราชวราราม +ราชวัง +ราชวัติ +ราชวิถี +ราชวินิต +ราชวโรงการ +ราชสกุล +ราชสาสน์ +ราชสิงขร +ราชสีมา +ราชสีห์ +ราชะ +ราชัน +ราชันย์ +ราชัย +ราชา +ราชาธิบดี +ราชาธิบาย +ราชาธิราช +ราชานุกูล +ราชาภิเษก +ราชาวดี +ราชาวลี +ราชาศัพท์ +ราชิ +ราชินิกุล +ราชินี +ราชินีนาถ +ราชินูปถัมภ์ +ราชูปถัมภ์ +ราชูปโภค +ราชเทวี +ราชโยค +ราชโองการ +ราชโอรส +ราญ +ราญรอน +ราด +ราต +ราตร +ราตรี +ราน +ราบ +ราบคาบ +ราบาต +ราปีก +ราพณาสูร +ราพณ์ +ราม +รามคำแหง +รามบุตรี +รามสูร +รามอินทรา +รามัญ +รามัน +รามา +รามาธิบดี +รามเกียรติ์ +ราย +รายการ +รายงาน +รายทาง +รายรับ +รายวิชา +ราว +ราวกะ +ราวกับ +ราวป่า +ราวี +ราศี +ราษฎร +ราษฎร์ +ราษฎร์บูรณะ +ราษฎร์พัฒนา +ราษฎร์รังสรรค์ +ราษฎร์ศรัทธา +ราษฎร์อุทิศ +ราษตรี +ราษีไศล +ราสี +ราหุ +ราหู +ราเชน +ราเชนทร์ +ราเริด +ราแรม +ราโชบาย +ราโชปถัมภ์ +ราโชวาท +ราโท +ราโรตองกา +รำ +รำคาญ +รำงับ +รำจวน +รำซุย +รำบาญ +รำผี +รำพัด +รำพัน +รำพาย +รำพึง +รำมะนา +รำมะแข +รำยวน +รำย้อย +รำรงค์ +รำราญ +รำรำ +รำลึก +รำวง +รำหัด +รำหัส +รำเขนง +รำเท้า +รำเพย +รำเร +รำแพน +รำแย้ +รำโคม +รำไพ +รำไร +ริ +ริก +ริกา +ริงโทน +ริชมอนด์ +ริดสีดวง +ริดเดอร์ไดเจสท์ +ริทัม +ริน +ริบ +ริบบิ้น +ริบรี่ +ริปอง +ริปุ +ริม +ริยาด +ริวกิว +ริษยา +ริอ่าน +ริเริ่ม +ริเว็ท +ริ้น +ริ้ว +รี +รีกิสเตอร์ +รีคอล +รีจอยซ์ +รีจิสทรี +รีซอร์ส +รีซิสเตอร์ +รีซีพท์ +รีซีฟ +รีด +รีดลูก +รีดักชัน +รีดิวซ์ +รีต +รีบ +รีบรุด +รีพอร์ต +รีพับลิก +รีพีท +รีฟิลล์ +รีฟิวส์ +รีม +รีมาร์ค +รีมิท +รีรอ +รีรีด +รีล +รีลีซ +รีวอร์ด +รีวิว +รีสอร์ท +รีอัลการ์ +รีเควซท์ +รีเจคชัน +รีเจคท์ +รีเจนซี +รีเจนท์ +รีเซพชัน +รีเซ็ต +รีเทล +รีเทอร์น +รีเนียม +รีเบกไคต์ +รีเฟรช +รีเฟลกซ์ +รีเฟลคท์ +รีเฟอร์ +รีเมมเบอร์ +รีเลย์ +รีเวอร์ส +รีเสิร์ช +รีเสิร์ท +รีแพร์ +รีแลกซ์ +รีแอคชั่น +รีโมต +รีโมท +รีโมทคอนโทรล +รีไซเคิล +รีไทร์ +รีไวส์ +รี่ +รี้ +รี้พล +รี้ริก +รึกต์ +รึง +รึ้ง +รือ +รือเสาะ +รื่น +รื่นรมย์ +รื่นเริง +รื้น +รื้อ +รื้อฟื้น +รุ +รุก +รุกข +รุกขกะ +รุกขชาติ +รุกขมูล +รุกขา +รุกขเทวดา +รุกข์ +รุกฆาต +รุกราน +รุกริก +รุกรุย +รุกร้น +รุกษะ +รุข้าว +รุงรัง +รุจ +รุจน +รุจน์ +รุจา +รุจิ +รุจิระ +รุจิรา +รุจิเสรี +รุจี +รุชา +รุด +รุต +รุทธ์ +รุทร +รุธิร +รุน +รุนแรง +รุบรู่ +รุม +รุมไข้ +รุมไฟ +รุย +รุรุ +รุษฏ์ +รุหะ +รุหาญ +รุ่ง +รุ่งประชา +รุ่งอรุณ +รุ่งเรือง +รุ่งโรจน์ +รุ่น +รุ่ม +รุ่มร่าม +รุ่ย +รุ่ยร่าย +รุ้ง +รุ้งกินน้ำ +รู +รูจ +รูจี +รูด +รูท +รูทีเนียม +รูทเบียร์ +รูบิเดียม +รูบี +รูป +รูปการ +รูปชี +รูปภาพ +รูปลอก +รูปิยะ +รูปี +รูสโซ +รูเบลไลต์ +รูเบีย +รูเมเนีย +รูเล็ตต์ +รูไทล์ +รู่ +รู้ +รู้คิด +รู้คุณ +รู้จัก +รู้ตัว +รู้ทัน +รู้ที +รู้มาก +รู้สึก +รู้ไส้ +รเถสภะ +รโห +รโหคต +รโหฐาน +ร็อกซอลท็ +ร่น +ร่ม +ร่มธง +ร่มผ้า +ร่มรื่น +ร่มเกศ +ร่มเย็น +ร่มโพธิ์ +ร่วง +ร่วน +ร่วม +ร่วมจิตต์ +ร่วมจิตร +ร่วมน้ำใจ +ร่วมพัฒนา +ร่วมมิตร +ร่วมฤดี +ร่วมวงศ์พัฒนา +ร่วมศิริมิตร +ร่วมสันติ +ร่วมสามัคคี +ร่วมใจ +ร่วมใจสามัคคี +ร่อ +ร่อง +ร่องคำ +ร่องมด +ร่อน +ร่อนพิบูลย์ +ร่อย +ร่อแร่ +ร่า +ร่าง +ร่างกาย +ร่างแห +ร่าน +ร่าย +ร่าเริง +ร่ำ +ร่ำรวย +ร่ำเรียน +ร่ำไป +ร่ำไร +ร่ำไห้ +ร้น +ร้อง +ร้องกวาง +ร้องขอ +ร้องไห้ +ร้อน +ร้อนต +ร้อนรน +ร้อย +ร้อยเอ็ด +ร้า +ร้าง +ร้าน +ร้าย +ร้ายก +ร้ายกาจ +ร้าว +ร้าวราน +ฤกษณะ +ฤกษ์ +ฤกษ์บน +ฤคเวท +ฤชา +ฤชากร +ฤชุ +ฤณ +ฤดี +ฤดียา +ฤดู +ฤดูกาล +ฤต +ฤทธา +ฤทธิณรงค์รอน +ฤทธิไกร +ฤทธิ์ +ฤทัย +ฤษภ +ฤษยา +ฤษี +ฤา +ฤาชุ +ฤาชุตา +ฤาดี +ฤาทัย +ฤาษี +ฤาสาย +ฤาเยา +ฤๅ +ฤๅชุ +ฤๅชุตา +ฤๅดี +ฤๅทัย +ฤๅษี +ฤๅสาย +ฤๅเยา +ลการ +ลกุจ +ลคุฑ +ลฆุ +ลฆุจิต +ลฆุภาพ +ลง +ลงกลอน +ลงกา +ลงขัน +ลงข่าว +ลงคอ +ลงชื่อ +ลงตัว +ลงทอง +ลงทุน +ลงท่า +ลงท้อง +ลงท้าย +ลงนา +ลงผี +ลงฝัก +ลงพื้น +ลงพุง +ลงมีด +ลงมือ +ลงยา +ลงรัก +ลงราก +ลงสรง +ลงหิน +ลงอาญา +ลงเงิน +ลงเอย +ลงแขก +ลงแดง +ลงแป้ง +ลงแรง +ลงโทษ +ลงโรง +ลด +ลดละ +ลดา +ลดาวัลย์ +ลน +ลนควัน +ลนลาน +ลบ +ลบม +ลบรอย +ลบล้าง +ลบหลู่ +ลบอง +ลบโลก +ลปก +ลปน +ลพบุรี +ลพุช +ลม +ลมกรด +ลมขึ้น +ลมค้า +ลมงวง +ลมจับ +ลมทวนลมค้า +ลมทะเล +ลมบก +ลมปราณ +ลมปาก +ลมพิษ +ลมล่อง +ลมว่าว +ลมาด +ลมเสีย +ลมแดง +ลมแล้ง +ลมๆ +ลรรลุง +ลลนา +ลลาฎ +ลลาฏ +ลลิต +ลวก +ลวง +ลวงค์ +ลวงตา +ลวณะ +ลวด +ลวดลาย +ลวนลาม +ลวนะ +ลวะ +ลวิตร +ลสิกา +ลหุ +ลหุก +ลหุโทษ +ลอก +ลอกลาย +ลอการิทึม +ลอกเลน +ลอกแลก +ลอง +ลองกอง +ลองจิจูด +ลองดี +ลองเพลย์ +ลองใจ +ลองใน +ลองไน +ลอจิค +ลอด +ลอด์จ +ลอตเตอรี่ +ลอน +ลอนดริ +ลอนดอน +ลอนทอง +ลอนเทนนิส +ลอบ +ลอบกัด +ลอม +ลอมชอม +ลอมบอก +ลอมพอก +ลอมเบลน +ลอย +ลอยคอ +ลอยชาย +ลอยดอก +ลอยตัว +ลอยนวล +ลอยบาป +ลอยฟ้า +ลอยลำ +ลอยสาย +ลอยเมฆ +ลอยแพ +ลอยๆ +ลอร์ด +ลอร์เรนเซียม +ลอว์ซอไนต์ +ลอว์เรนเซียม +ลออ +ลอแลนด์ +ละ +ละกล +ละคร +ละครยก +ละคิ +ละคึก +ละงาด +ละงิด +ละงู +ละติจูด +ละติน +ละทิ้ง +ละบม +ละบอง +ละบัด +ละบือ +ละพยศ +ละมั่ง +ละมา +ละมาน +ละมือ +ละมุ +ละมุด +ละมุน +ละม่อม +ละม้าย +ละรี +ละลด +ละลวย +ละลอก +ละลัง +ละลัด +ละลาน +ละลาบ +ละลาย +ละลิบ +ละลุง +ละลุม +ละล้วง +ละล้า +ละล้าว +ละวล +ละวาง +ละวาด +ละว้อ +ละว้า +ละหมาด +ละหลัด +ละหาน +ละหานทราย +ละหุ่ง +ละห้อย +ละอง +ละออง +ละอาย +ละอุ่น +ละเบ็ง +ละเมอ +ละเมาะ +ละเมิด +ละเมิน +ละเมียด +ละเม็ด +ละเลง +ละเลย +ละเลาะ +ละเลิง +ละเลียด +ละเล้า +ละเวง +ละเว้น +ละเหย +ละเหี่ย +ละเอียด +ละแม +ละแมะ +ละแวก +ละแอน +ละโบม +ละโมก +ละโมบ +ละโว้ +ละไม +ละไล้ +ละไว้ +ลัก +ลักกาดิฟ +ลักขณะ +ลักขณา +ลักขะ +ลักขี +ลักพา +ลักลอบ +ลักลาย +ลักศพ +ลักษณะ +ลักษณะเกียรติ +ลักษณ์ +ลักษมี +ลักษะ +ลักสี +ลักเซมเบอร์ก +ลักเพศ +ลักไก่ +ลัคกี้ +ลัคคะ +ลัคน +ลัคนา +ลัคน์ +ลัง +ลังกา +ลังคิ +ลังถึง +ลังลอง +ลังสาด +ลังเกแลนด์ +ลังเล +ลัชชา +ลัชชี +ลัญจกร +ลัญจ์ +ลัญฉ +ลัญฉกร +ลัญฉน์ +ลัญฉ์ +ลัฐิ +ลัด +ลัดคิว +ลัดวงจร +ลัดา +ลัดแลง +ลัทธิ +ลัทธ์ +ลัน +ลันช์ +ลันซาโรเต +ลันดา +ลันทวย +ลันเต +ลันเตา +ลันโทม +ลันไต +ลับ +ลับตา +ลับปาก +ลับลี้ +ลับล่อ +ลับหู +ลับแล +ลัพธิ +ลัพธ์ +ลัภนะ +ลัภย์ +ลัมพ์ +ลัย +ลัยกาล +ลัยคต +ลั่ง +ลั่น +ลั่นทม +ลั่นนก +ลั่นไก +ลา +ลาก +ลากลับ +ลากษา +ลากอส +ลาขา +ลาง +ลางคัล +ลางงิด +ลางที +ลางลิง +ลางสาด +ลางาด +ลาช +ลาซา +ลาซาล +ลาซูไรต์ +ลาซูไลต์ +ลาญ +ลาญทัก +ลาด +ลาดกระบัง +ลาดทวีป +ลาดบัวหลวง +ลาดพร้าว +ลาดยาง +ลาดยาว +ลาดหลุมแก้ว +ลาดเท +ลาดเลา +ลาตาย +ลาน +ลานนาบุญ +ลานสะกา +ลานสัก +ลาบ +ลาบวน +ลาป +ลาปาซ +ลาพอน +ลาพิสลาซูลี +ลาพุ +ลาภ +ลาม +ลามก +ลามปาม +ลามลวน +ลามะ +ลาย +ลายขัด +ลายตา +ลายน้ำ +ลายมือ +ลายสอ +ลายสอง +ลายสาบ +ลายสือ +ลายฮ่อ +ลายเทศ +ลายเท้า +ลายแทง +ลายไม้ +ลาลนะ +ลาลส +ลาลา +ลาว +ลาวก +ลาวัณย์ +ลาวา +ลาสนะ +ลาเง็ด +ลาเท็กซ์ +ลาเพ +ลาเวนเดอร์ +ลาโนลิน +ลาโรง +ลาโลก +ลาไน +ลำ +ลำคลอง +ลำงาด +ลำดวน +ลำดับ +ลำตัด +ลำต้น +ลำธาร +ลำนัก +ลำนำ +ลำน้ำ +ลำบอง +ลำบาก +ลำบุ +ลำปาง +ลำปำ +ลำพวน +ลำพอง +ลำพัง +ลำพู +ลำพูน +ลำภุขัน +ลำมาด +ลำมาบ +ลำยอง +ลำยา +ลำลอง +ลำลาบ +ลำลำ +ลำลึก +ลำลูกกา +ลำสาลี +ลำหนัก +ลำหิน +ลำห้วย +ลำอุด +ลำเข็ญ +ลำเค็ญ +ลำเจียก +ลำเจียกบุญช่วย +ลำเนา +ลำเพา +ลำเพ็ญ +ลำเมาะ +ลำเลาะ +ลำเลิก +ลำเลียง +ลำเสา +ลำเอียง +ลำแข +ลำแขน +ลำแข็ง +ลำแข้ง +ลำแพง +ลำแพน +ลำแสง +ลำโพง +ลำโอง +ลำไพ่ +ลำไย +ลำไส้ +ลำไส้เล็ก +ลำไส้ใหญ่ +ลิ +ลิกขา +ลิกษา +ลิกุจ +ลิกูเรียน +ลิกไนต์ +ลิขนะ +ลิขสิทธิ์ +ลิขิต +ลิควิด +ลิคเตนสไตน์ +ลิง +ลิงการ +ลิงก์ +ลิงค์ +ลิงปิ้ง +ลิงลม +ลิงโลด +ลิด +ลิดรอน +ลิต +ลิตมัส +ลิตร +ลิตเติลร็อก +ลิธัวเนีย +ลินคอล์น +ลินจง +ลินลา +ลินสีด +ลินิกซ์ +ลินิน +ลิบ +ลิบลับ +ลิปซิง +ลิปดา +ลิปต์ +ลิปสติก +ลิปิ +ลิปิกร +ลิปโซ +ลิฟต์ +ลิฟท์แบ็ค +ลิมปนะ +ลิมป์ +ลิมา +ลิมิท +ลิมิเตด +ลิลลี่ +ลิลิต +ลิว +ลิวแคส +ลิสง +ลิสท์ +ลิสบอน +ลิเก +ลิเทอร์เรเจอร์ +ลิเทียม +ลิเบรอะวิล +ลิเบอรัล +ลิเบอร์ตี้ +ลิเบีย +ลิเภา +ลิเวอร์พูล +ลิโนซา +ลิโมซีน +ลิ่น +ลิ่ม +ลิ่ว +ลิ้น +ลิ้นจี่ +ลิ้นลม +ลิ้ม +ลี +ลีก +ลีซอ +ลีดเดอร์ +ลีนุกซ์ +ลีบ +ลีลา +ลีลาศ +ลีลาส +ลีวาร์ด +ลีฬหา +ลี่ +ลี้ +ลี้ลับ +ลึก +ลึกลับ +ลึกล้ำ +ลึงค์ +ลืด +ลืบ +ลืม +ลืมตน +ลืมตัว +ลืมตา +ลืมต้น +ลือ +ลือชา +ลือนาม +ลือสาย +ลื่น +ลื่อ +ลื้น +ลื้อ +ลุ +ลุก +ลุกลน +ลุกลาม +ลุกฮือ +ลุง +ลุงพัง +ลุดวิไกต์ +ลุต +ลุท +ลุทกะ +ลุทธ์ +ลุปต์ +ลุพธกะ +ลุพธ์ +ลุมป์ +ลุมพี +ลุมพู +ลุย +ลุยเซียนา +ลุลาย +ลุล่วง +ลุสา +ลุสิกา +ลุ่น +ลุ่นๆ +ลุ่ม +ลุ่มพัฒนา +ลุ่ย +ลุ่ยหู +ลุ้ง +ลุ้น +ลุ้ย +ลูก +ลูกกก +ลูกกรง +ลูกกุญแจ +ลูกขัด +ลูกขุน +ลูกคอ +ลูกคอก +ลูกคัน +ลูกคำ +ลูกคิด +ลูกคู่ +ลูกค้า +ลูกจ้าง +ลูกชาย +ลูกชิด +ลูกซอง +ลูกดอก +ลูกทอย +ลูกนา +ลูกน้ำ +ลูกบท +ลูกบวบ +ลูกบอล +ลูกบาศก์ +ลูกบิด +ลูกปละ +ลูกปลา +ลูกปัด +ลูกปา +ลูกปืน +ลูกป่า +ลูกผสม +ลูกพลู +ลูกพี่ +ลูกฟัก +ลูกฟูก +ลูกมือ +ลูกยอ +ลูกรอก +ลูกรัง +ลูกลม +ลูกลอย +ลูกล่า +ลูกล้อ +ลูกวง +ลูกวัด +ลูกวัว +ลูกสาว +ลูกสูบ +ลูกหนู +ลูกหมด +ลูกหยี +ลูกหลง +ลูกหลวง +ลูกหาบ +ลูกหิน +ลูกหีบ +ลูกอม +ลูกเกด +ลูกเขย +ลูกเต๋า +ลูกเธอ +ลูกเห็บ +ลูกแตก +ลูกแถว +ลูกแป +ลูกแห +ลูกโซ่ +ลูกโดด +ลูกโป่ง +ลูกโม่ +ลูกโยน +ลูกโลก +ลูกไก่ +ลูกไผ่ +ลูกไฟ +ลูกไม้ +ลูกไล่ +ลูขะ +ลูชู +ลูซอน +ลูซากา +ลูตา +ลูทิเซียม +ลูทีเชียม +ลูนะ +ลูน่าร์ +ลูบ +ลูบคม +ลูบคลำ +ลูบตัว +ลูบไล้ +ลูอันดา +ลูเธอร์รัน +ลูโคซีน +ลูไซต์ +ลู่ +ลู่ทาง +ล็อก +ล็อกอิน +ล็อกเกต +ล็อค +ล็อคเกอร์ +ล็อบบี้ +ล็อบสเตอร์ +ล่ง +ล่น +ล่ม +ล่มจม +ล่มฟ้า +ล่วง +ล่วงคำ +ล่วงแป +ล่วม +ล่อ +ล่อง +ล่องหน +ล่อน +ล่อนจ้อน +ล่อยๆ +ล่อลวง +ล่อแล่ +ล่ะ +ล่า +ล่าง +ล่าช้า +ล่าน +ล่าม +ล่าสุด +ล่ำ +ล่ำลา +ล่ำสัน +ล้งเล้ง +ล้น +ล้นพ้น +ล้นหลาม +ล้นเกล้าฯ +ล้ม +ล้มลุก +ล้วง +ล้วน +ล้วนๆ +ล้อ +ล้อม +ล้อมป +ล้อมวง +ล้า +ล้าง +ล้างสมอง +ล้าต้า +ล้าน +ล้าย +ล้ำ +ล้ำค่า +ล้ำยุค +ล้ำแดน +วก +วกะ +วกุล +วง +วงกต +วงกบ +วงกลม +วงการ +วงก์ +วงจร +วงจรปิด +วงจรเปิด +วงนอก +วงพาด +วงรี +วงล้อม +วงวัง +วงศกร +วงศา +วงศ์ +วงศ์สว่าง +วงษ์ +วงษ์ขวัญอนุสรณ์ +วงเงิน +วงเล็บ +วงแหวน +วงใน +วจนะ +วจะ +วจี +วจีเภท +วชะ +วชิร +วชิรธรรม +วชิระ +วชิราวุธ +วฎะ +วฎากร +วฎุมะ +วณบัตร +วณพันธน์ +วณะ +วณิช +วณิชชา +วณิชยา +วณิชย์ +วณิพก +วดี +วตะ +วทนะ +วทะ +วทัญญุตา +วทัญญู +วทานิย +วธุกา +วธู +วน +วนจร +วนจรก +วนภู +วนภูมิ +วนศาสตร์ +วนสณฑ์ +วนอุทยาน +วนัปติ +วนัส +วนา +วนาดอน +วนานต์ +วนาราม +วนาลัย +วนาลี +วนาวาส +วนาศรม +วนิดา +วนิพก +วปนะ +วปุ +วยัคฆ์ +วยัมหะ +วยัสย์ +วยาฆร์ +วยาธิ +วรกาย +วรงค์ +วรจักร +วรณะ +วรดนู +วรทาน +วรพิม +วรมหาวิหาร +วรรค +วรรคย์ +วรรช +วรรชย์ +วรรณ +วรรณกรรม +วรรณคดี +วรรณนา +วรรณพฤติ +วรรณยุกต์ +วรรณยุต +วรรณศิลป์ +วรรณะ +วรรณี +วรรณึก +วรรธ +วรรธก +วรรธนะ +วรรษ +วรรษา +วรวิหาร +วรัญญู +วรากะ +วราหะ +วราห์ +วรุณ +วรุตดม +วรุตมะ +วรูถ +วฤก +วฤษภ +วฤษล +วลัช +วลัญชน์ +วลัญช์ +วลัย +วลาหก +วลี +วศะ +วศิน +วสนะ +วสภ +วสภะ +วสละ +วสลี +วสวัตตี +วสะ +วสันตดิลก +วสันตวิษุวัต +วสันต์ +วสา +วสี +วสุ +วสุธา +วสุนธรา +วสุมดี +วหะ +วหา +วอ +วอก +วอกแวก +วอชิงตัน +วอด +วอดวาย +วอน +วอฟเฟิล +วอยซ์ +วอรี่ +วอร์ซอ +วอร์ม +วอร์มซี +วอร์มอัพ +วอร์แรนท์ +วอลตา +วอลทซ์ +วอลล์สตรีท +วอลสตรีท +วอลุ่ม +วอลเปเปอร์ +วอลเลย์ +วอลเลย์บอล +วอล์คเอาท์ +วอเตอร์พรู๊ฟ +วอแว +วะ +วัก +วักกะ +วัค +วัคคิย +วัคคีย์ +วัคคุ +วัคซีน +วัง +วังก์ +วังชา +วังชิน +วังทรายพูน +วังทอง +วังทองหลาง +วังน้อย +วังน้ำเย็น +วังวน +วังศะ +วังสะพุง +วังสามหมอ +วังเดิม +วังเวง +วังเหนือ +วังใหญ่ +วังไผ่ +วัจจะ +วัจฉก +วัจฉละ +วัจฉ์ +วัจนะ +วัจน์ +วัช +วัชชะ +วัชฌ์ +วัชพืช +วัชร +วัชรพล +วัชระ +วัชรินทร์ +วัชรี +วัญจก +วัญจนะ +วัญฌ์ +วัฎ +วัฎกะ +วัฎฎิ +วัฏจักร +วัฏฏิ +วัฏสงสาร +วัฒกะ +วัฒกี +วัฒน +วัฒนธรรม +วัฒนวงศ์ +วัฒนะ +วัฒนะสุข +วัฒนา +วัฒนานคร +วัณ +วัณฏ์ +วัณณะ +วัณนา +วัณโรค +วัด +วัดกลาง +วัดกล้วย +วัดกันตยาราม +วัดกำแพง +วัดครุฑ +วัดคฤหบดี +วัดจากแดง +วัดชมภูเวก +วัดด่าน +วัดตะพาน +วัดทองนาปรัง +วัดทางหลวง +วัดทุ่งลานนา +วัดนครอินทร์ +วัดน้อยนอก +วัดบางกระสอบ +วัดบางน้ำผึ้งนอก +วัดบางวัว +วัดบางสะแก +วัดบางหญ้าแพรก +วัดบึงทองหลาง +วัดบุญรอด +วัดปรก +วัดปากท่อ +วัดผล +วัดพระร่วงประสิทธิ์ +วัดมัชฌันติการาม +วัดยาง +วัดรวก +วัดลาดปลาเค้า +วัดลาดพร้าว +วัดลานนาบุญ +วัดวา +วัดสมรโกฎิ +วัดสังข์กระจาย +วัดสังฆทาน +วัดสารอด +วัดสิงห์ +วัดสีสุก +วัดหนัง +วัดหลวง +วัดเฉลิม +วัดเชิงหวาย +วัดเทวสุนทร +วัดเพลง +วัดแดด +วัดโบสถ์ +วัดโปรดเกศ +วัดใต้ +วัต +วัตตา +วัตต์ +วัตถุ +วัตถุดิบ +วัตถุนิยม +วัตถุประสงค์ +วัตถุวิสัย +วัตถ์ +วัตนะ +วัตร +วัตสดร +วัตสะ +วัติ +วัทน์ +วัน +วันครู +วันจม +วันดับ +วันดัล +วันตัว +วันต์ +วันทน +วันทนา +วันทนีย์ +วันทย +วันทยหัตถ์ +วันทยาวุธ +วันทา +วันทิ +วันพระ +วันฟู +วันลอย +วันเดอฟุล +วันเนา +วันโกน +วับ +วับๆ +วัปปะ +วัมมิก +วัย +วัลก์ +วัลคุ +วัลย์ +วัลลภ +วัลลี +วัลเล็ตตา +วัว +วัส +วัสดุ +วัสตร์ +วัสนะ +วัสน์ +วัสสะ +วัสสานะ +วัสโสทก +วา +วาก +วากย +วากยสัมพันธ์ +วากยะ +วากรา +วาง +วางข้อ +วางตัว +วางตา +วางท่า +วางมวย +วางมาด +วางมือ +วางยา +วางวาย +วางแผน +วางโต +วางใจ +วางไข่ +วาจก +วาจา +วาจาล +วาจาไ +วาฎกะ +วาณิช +วาณิชย์ +วาณี +วาด +วาดุซ +วาต +วาตภัย +วาตะ +วาตา +วาติกัน +วาท +วาทก +วาทน +วาทย +วาทยกร +วาทย์ +วาทศาสตร์ +วาทศิลป์ +วาทิต +วาทิน +วาที +วาน +วานซืน +วานร +วานรนิวาส +วานรินทร์ +วานาดิไนต์ +วานิช +วานิลา +วาบ +วาบหวาม +วาบแวบ +วาปะ +วาปิตะ +วาปี +วาปีปทุม +วาม +วามน +วามะ +วามแวม +วาย +วายวอด +วายสะ +วายะ +วายามะ +วายุ +วาร +วารณ +วารณกร +วารสาร +วารสารศาสตร์ +วาระ +วาริ +วาริจร +วาริช +วาริชภูมิ +วาริท +วาริธร +วารินชำราบ +วารี +วารีช +วารุณ +วารุณประภา +วารุณี +วาล +วาลธิ +วาลวีชนี +วาลิกา +วาลุกา +วาล์ว +วาว +วาววับ +วาววาม +วาวแวว +วาสนะ +วาสนา +วาสพ +วาสะ +วาสิน +วาสี +วาหนะ +วาหะ +วาหินี +วาฬ +วาฬมิค +วาเนเดียม +วาเลนไทน์ +วาโมร +วาโย +วิ +วิก +วิกจะ +วิกตอรี่ +วิกตอเรีย +วิกรม +วิกรัย +วิกฤต +วิกฤตการณ์ +วิกฤตกาล +วิกฤติ +วิกฤติการณ์ +วิกฤติกาล +วิกล +วิกลจริต +วิกสิต +วิกัต +วิกัติ +วิกัป +วิกัย +วิการ +วิกาล +วิกเขป +วิคตอเรีย +วิคหะ +วิฆนะ +วิฆาต +วิฆาส +วิฆเนศ +วิง +วิงวอน +วิจฉิกะ +วิจตร +วิจยุต +วิจรณ +วิจรณะ +วิจล +วิจักขณ์ +วิจักษณ์ +วิจัย +วิจาร +วิจารณญาณ +วิจารณ์ +วิจิ +วิจิกิจฉา +วิจิต +วิจิตร +วิจิตรการ +วิจิตรชัย +วิจิน +วิจุณ +วิจุรณ +วิชชา +วิชชุ +วิชชุดา +วิชชุลดา +วิชญะ +วิชน +วิชนี +วิชย +วิชัย +วิชั่น +วิชา +วิชาการ +วิชาชีพ +วิชาธร +วิชานนะ +วิชาโท +วิชิต +วิญญัติ +วิญญาณ +วิญญู +วิญญูชน +วิฑูรย์ +วิณหุ +วิด +วิดีโอ +วิตก +วิตถาร +วิตามิน +วิถี +วิทธะ +วิทย +วิทยฐานะ +วิทยะ +วิทยา +วิทยากร +วิทยากล +วิทยาการ +วิทยาคม +วิทยาคาร +วิทยาทาน +วิทยานิพนธ์ +วิทยาลัย +วิทยาศาสตร์ +วิทยาศาสตร์กายภาพ +วิทยาศาสตร์ชีวภาพ +วิทยาศาสตร์ประยุกต์ +วิทยาสรรค์ +วิทยาเขต +วิทยุ +วิทยุต +วิทย์ +วิทวัส +วิทารณ์ +วิทาลน์ +วิทิต +วิทู +วิทูร +วิธ +วิธวา +วิธา +วิธาน +วิธี +วิธุระ +วิธู +วิธูปนะ +วิน +วินด์วาร์ด +วินย +วินันตู +วินัย +วินาที +วินายก +วินาศ +วินาศกรรม +วินาศภัย +วินิจ +วินิจฉัย +วินิจนยภาค +วินิต +วินิบาต +วินิปาติก +วินเนอร์ +วินโดวส์ +วินโดว์ +วินโดว์ส +วิบัติ +วิบาก +วิบุล +วิบุลย์ +วิบูล +วิบูลย์ +วิปการ +วิปฏิสาร +วิประการ +วิประติสาร +วิประลาป +วิประวาส +วิปริต +วิปลาป +วิปลาส +วิปวาส +วิปักษ์ +วิปัสสก +วิปัสสกะ +วิปัสสนา +วิปโยค +วิพากษ์ +วิพิธทัศนา +วิพุธ +วิภว +วิภวตัณหา +วิภังค์ +วิภัช +วิภัตติ +วิภา +วิภาค +วิภาช +วิภาดา +วิภาวดี +วิภาวดีรังสิต +วิภาวี +วิภาษ +วิภาส +วิภู +วิภูษา +วิมน +วิมล +วิมลัก +วิมลาก +วิมังสา +วิมัติ +วิมาน +วิมานสุข +วิมุข +วิมุต +วิมุตติ +วิมุตยาราม +วิมเบิลดัน +วิร +วิรตะ +วิรมณะ +วิรวะ +วิรัช +วิรัต +วิรัติ +วิราคะ +วิราม +วิริยภาพ +วิริยะ +วิรุธ +วิรุฬหก +วิรุฬห์ +วิรูป +วิลนิอัส +วิลย +วิลลา +วิลล่า +วิลันดา +วิลัย +วิลาด +วิลาป +วิลาวัณย์ +วิลาศ +วิลาส +วิลาสินี +วิลเลไมต์ +วิลเล็จ +วิว +วิวรณ์ +วิวระ +วิวัฏ +วิวัฒน +วิวัฒนาการ +วิวัฒน์ +วิวัน +วิวาท +วิวาห +วิวาหมงคล +วิวาหะ +วิวาห์ +วิวิจ +วิวิต +วิวิธ +วิศรุต +วิศว +วิศวกร +วิศวกรรม +วิศวกรรมศาสตร์ +วิศวะ +วิศวาส +วิศัลย์ +วิศาข +วิศาขะ +วิศาขา +วิศางค์ +วิศาล +วิศุทธิ์ +วิศุทธ์ +วิษณุ +วิษธร +วิษักต์ +วิษัย +วิษาณ +วิษุวัต +วิสกี้ +วิสคอนซิน +วิสดอม +วิสดาร +วิสม +วิสย +วิสรรชนีย์ +วิสฤต +วิสสุกรรม +วิสัชนา +วิสัญญี +วิสัญญีวิทยา +วิสัญญีแพทย์ +วิสัย +วิสาข +วิสาขบูชา +วิสาขะ +วิสาขา +วิสามัญ +วิสามานยนาม +วิสายัน +วิสาร +วิสารท +วิสาล +วิสาสะ +วิสาหกิจ +วิสิฐ +วิสุงคามสีมา +วิสุทธิจิต +วิสุทธิ์ +วิสุทธ์ +วิสุทธ์กษัตริย์ +วิสูตร +วิหค +วิหงค์ +วิหลั่น +วิหายสะ +วิหาร +วิหารแดง +วิหิงสะ +วิหิงสา +วิฬังค์ +วิฬาร +วิฬาร์ +วิเคราะห์ +วิเชียร +วิเชียรบุรี +วิเทวษ +วิเทศ +วิเทศสัมพันธ์ +วิเทอไรต์ +วิเทโศบาย +วิเนต +วิเยน +วิเรนทร์ +วิเลป +วิเวก +วิเวียไนต์ +วิเศษ +วิเศษการ +วิเศษชัยชาญ +วิเศษณ์ +วิเสท +วิเหสา +วิโนทก +วิโมกข์ +วิโยค +วิโรค +วิโรจ +วิโรจน์ +วิโรฒ +วิโรธ +วิโรธน์ +วิโลก +วิโลจนะ +วิโลม +วิไล +วิ่ง +วิ่งเปี้ยว +วิ่น +วี +วี.ดี. +วี.ไอ.พี. +วีค +วีจิ +วีชนี +วีซูเวียไนต์ +วีซ่า +วีณา +วีดีทัศน์ +วีดีโอ +วีต +วีนัส +วีร +วีรกรรม +วีรชน +วีรบุรุษ +วีรสตรี +วีระ +วีสะ +วีโต้ +วี่วัน +วี่แวว +วี้ด +วุฐิ +วุฒ +วุฒากาศ +วุฒิ +วุฒิบัตร +วุฒิสภา +วุฒิสมาชิก +วุด +วุบ +วุลคาโน +วุลฟีไนต์ +วุลแฟรม +วุลแฟรไมต์ +วุ่น +วุ่นวาย +วุ้ง +วุ้น +วุ้นชา +วุ้ย +วูดวาด +วูบ +วูบวาบ +วูสไทต์ +วู่วาม +วู้ +วเนจร +วโนทยาน +วโรกาส +วโรดม +วโรตมะ +ว่อง +ว่องไว +ว่อน +ว่า +ว่าการ +ว่าขาน +ว่าง +ว่าที่ +ว่าน +ว่าย +ว่ายตา +ว่ายาก +ว่าว +ว่าวอน +ว้า +ว้าง +ว้าย +ว้าวุ่น +ว้าเหว่ +ศก +ศกกันต์ +ศกฏ +ศกล +ศกุน +ศกุนต์ +ศกุนิ +ศกุนี +ศงกา +ศจี +ศดก +ศต +ศตก +ศตบาท +ศตปที +ศตพรรษ +ศตวรรษ +ศตัฆนี +ศนิ +ศนิวาร +ศพ +ศยนะ +ศยาม +ศยามล +ศร +ศรภ +ศรมณะ +ศรรกรา +ศรวณะ +ศรัณยู +ศรัณย์ +ศรัถนะ +ศรัท +ศรัทธา +ศรันย์ +ศรัย +ศราทธ +ศราพ +ศราพก +ศรายุทธ +ศรายุธ +ศราวณะ +ศราสน์ +ศรี +ศรีจันทร์ +ศรีตรัง +ศรีธัญญา +ศรีธาตุ +ศรีนคร +ศรีนครพัฒนา +ศรีนครินทรวิโรฒ +ศรีนครินทร์ +ศรีนวล +ศรีบุญยืน +ศรีบุญเรือง +ศรีปทุม +ศรีประจักษ์ +ศรีประจันต์ +ศรีพรสวรรค์ +ศรีพิชัย +ศรีมหาธาตุ +ศรีมหาโพธิ์ +ศรีรัตนศาสดาราม +ศรีราชา +ศรีวรา +ศรีวิจารณ์ +ศรีวิไล +ศรีศุภโชค +ศรีษะ +ศรีษะเกษ +ศรีสงคราม +ศรีสร้อยทอง +ศรีสวัสดิ์ +ศรีสะเกษ +ศรีสัชนาลัย +ศรีสาคร +ศรีสำโรง +ศรีสุข +ศรีสุดาราม +ศรีสุพรรณ +ศรีอยุธยา +ศรีอักษร +ศรีอัมพร +ศรีเชียงใหม่ +ศรีเทพ +ศรีเมืองวัฒน์ +ศรีเอี่ยม +ศรุต +ศรุติ +ศฤคาล +ศฤงคาร +ศฤงค์ +ศลภ +ศลัถ +ศลิษฎ์ +ศลิษา +ศว +ศวศุร +ศวัส +ศวัสน +ศวา +ศวาส +ศศธร +ศศิ +ศศิธร +ศศิน +ศสา +ศอ +ศอก +ศอกกำ +ศอกคู้ +ศักดา +ศักดานุภาพ +ศักดิ +ศักดินา +ศักดิ์ +ศักดิ์ศรี +ศักดิ์สิทธิ์ +ศักติ +ศักย +ศักยภาพ +ศักยะ +ศักย์ +ศักร +ศักราช +ศังกร +ศังกา +ศังกุ +ศัตรู +ศัทธนะ +ศันสนะ +ศันสนีย์ +ศัพทมูลวิทยา +ศัพท์ +ศัยยา +ศัล +ศัลกี +ศัลย +ศัลยกรรม +ศัลยศาสตร์ +ศัลยแพทย์ +ศัสดร +ศัสตร +ศัสตรา +ศาก +ศากตะ +ศากย +ศากยพุทธ +ศากยมุนี +ศากยะ +ศาฎก +ศาฐยะ +ศาณ +ศาต +ศาตราจารย์ +ศานต +ศานตรส +ศานติ +ศานติก +ศานต์ +ศาป +ศาพร +ศารท +ศารทวิษะวัต +ศารทูล +ศาริกา +ศาล +ศาลสูง +ศาลหลักเมือง +ศาลอุธรณ์ +ศาลา +ศาลาลอย +ศาลาแดง +ศาลเจ้าแป๊ะกง +ศาลโลก +ศาศวัต +ศาสก +ศาสดา +ศาสดาจารย์ +ศาสตร +ศาสตรา +ศาสตราจารย์ +ศาสตร์ +ศาสน +ศาสนจักร +ศาสนะ +ศาสนา +ศาสนาจารย์ +ศาสนีย +ศาสนูปถัมภก +ศาสน์ +ศาส์น +ศิกษก +ศิการ +ศิขร +ศิขริน +ศิขรี +ศิขา +ศิคาล +ศิงขร +ศิต +ศิถี +ศิพิระ +ศิร +ศิระ +ศิรา +ศิริ +ศิริชัย +ศิริถาวร +ศิรินันท์ +ศิริพงษ์ +ศิริพงษ์ธรรมนิมิตร +ศิริมงคล +ศิริราช +ศิริวัฒน์ +ศิริสัมพันธ์ +ศิริอักษร +ศิริโชติ +ศิลป +ศิลปกร +ศิลปกรรม +ศิลปการ +ศิลปกิจ +ศิลปวิทยา +ศิลปศาสตร์ +ศิลปศึกษา +ศิลปะ +ศิลปากร +ศิลปิน +ศิลปี +ศิลป์ +ศิลา +ศิลานนท์ +ศิว +ศิวลึงค์ +ศิวะ +ศิวิไลซ์ +ศิวเวท +ศิวโมกข์ +ศิศีระ +ศิศุ +ศิษฎิ +ศิษฏ์ +ศิษยานุศิษย์ +ศิษย์ +ศิโรราบ +ศีขร +ศีขรภูมิ +ศีขริน +ศีขรี +ศีต +ศีตกาล +ศีตล +ศีรษะ +ศีล +ศีลวัต +ศีลอด +ศึก +ศึกษา +ศึกษาธิการ +ศึกษานิเทศก์ +ศึกษาภัณฑ์ +ศึกษาวิทยา +ศึกษาสงเคราะห์ +ศุกร +ศุกร์ +ศุกล +ศุกลัม +ศุกะ +ศุจิ +ศุทธ +ศุน +ศุภ +ศุภกร +ศุภนิมิต +ศุภมงคล +ศุภมัสดุ +ศุภมาตรา +ศุภมาส +ศุภมิตร +ศุภร +ศุภวิทยา +ศุภอักษร +ศุภางค์ +ศุภเคราะห์ +ศุลก +ศุลกากร +ศุลการักษ์ +ศุลี +ศุษิร +ศูกร +ศูทร +ศูนย +ศูนย์ +ศูนย์กลาง +ศูนย์การค้า +ศูนย์ชุมชน +ศูนย์วิจัย +ศูนย์สัมบูรณ์ +ศูนย์สูตร +ศูนย์เยาวชน +ศูล +ศูลิน +ษมา +ษัฎกะ +ษัฏ +ษัฑ +ษัณ +ษัษ +ษัษฏี +ษัษฐ +ษัษฐี +ษิโณทก +ส.ธรนินทร์ +ส.ธรรมภักดี +ส.นิยม +สก +สกฏ +สกฏภาร +สกนธ์ +สกปรก +สกรรจ์ +สกรัม +สกริปท์ +สกรีน +สกล +สกลนคร +สกลโลก +สกวาที +สกอตแลนด์ +สกอร์ +สกอร์เปียน +สกังค์ +สกัด +สกา +สกาว +สกิน +สกิรอส +สกี +สกีน้ำ +สกุณ +สกุณา +สกุณี +สกุตเทอรูไดต์ +สกุน +สกุนต์ +สกุล +สกุลชัย +สกู้ตเตอร์ +สกู๊ตเตอร์ +สกู๊ป +สก๊อต +สขะ +สคริปต์ +สคอโรโดต์ +สคูล +สง +สงกร +สงกรานต์ +สงกา +สงขลา +สงคร +สงคราม +สงครามกลางเมือง +สงครามโลก +สงค์ +สงฆ์ +สงบ +สงบเสงี่ยม +สงวน +สงวนสุข +สงสัย +สงสาร +สงสารวัฏ +สงัด +สงเคราะห์ +สงเษป +สงโกจ +สง่า +สจ๊วต +สณฑ์ +สด +สดก +สดคาว +สดชื่น +สดน +สดมภ์ +สดับ +สดับปกรณ์ +สดำ +สดี +สดุดี +สดูป +สดใส +สตมาหะ +สตรอนเชียม +สตริกนิน +สตริง +สตรี +สตรีจำนงค์ +สตรีวิทยา +สตอก +สตอกโฮล์ม +สตอเรจ +สตอโรไลต์ +สตันท์แมน +สตันย์ +สตัพธ์ +สตัฟฟ์ +สตัมภ์ +สตางค์ +สตาฟฟ์ +สตาร์ท +สติ +สติบิโคไนต์ +สติบไนต์ +สติลไบต์ +สติสัมปชัญญะ +สติ๊ก +สติ๊กเกอร์ +สตี +สตีม +สตีเฟไนต์ +สตีไทต์ +สตึก +สตู +สตูป +สตูล +สต็อค +สต๊อก +สถน +สถบ +สถบดี +สถล +สถลทิน +สถลบถ +สถลมารค +สถวิร +สถาน +สถานการณ์ +สถานภาพ +สถานะ +สถานี +สถานเสาวภา +สถาบก +สถาบัน +สถาบันวิจัย +สถาปนา +สถาปนิก +สถาปัตยกรรม +สถาปัตยกรรมศาสตร์ +สถาพร +สถาล +สถาวร +สถาวะ +สถิต +สถิตยศาสตร์ +สถิตยุทธการ +สถิตย์ +สถิตย์พร +สถิติ +สถิติศาสตร์ +สถิร +สถุล +สถูป +สทิงพระ +สทึง +สทุม +สธน +สธุสะ +สน +สนกระ +สนทนา +สนทรรศ +สนทิศ +สนธยา +สนธิ +สนนราคา +สนม +สนมเอก +สนวน +สนอง +สนองไข +สนองได +สนอบ +สนอม +สนะ +สนัด +สนัดใจ +สนับ +สนับงา +สนับสนุน +สนับเพล +สนั่น +สนาดก +สนาน +สนาบก +สนาบัน +สนาม +สนามชัยเขต +สนามบินน้ำ +สนามยิงปืน +สนามรบ +สนามศุภชลาสัย +สนามไชย +สนายุ +สนิก +สนิท +สนิธ +สนิม +สนุก +สนุกสนาน +สนุกเกอร์ +สนุข +สนุต +สนุ่น +สนเดก +สนเทศ +สนเท่ห์ +สนแผง +สนใจ +สบ +สบง +สบจ +สบตา +สบถ +สบปราบ +สบัน +สบาย +สบายใจ +สบู่ +สบเสีย +สปริง +สปริงฟิลด์ +สปอดูมีน +สปอราดัส +สปอร์ต +สปาย +สปาเกตตี +สปิตสเบอร์เกน +สปิริต +สปิเนล +สปีช +สพัก +สพั้น +สพาบ +สฟาเลอไรต์ +สฟีน +สภา +สภากาชาดไทย +สภาค +สภาจาร +สภาบดี +สภาพ +สภาพัฒน์ +สภาว +สภาวการณ์ +สภาวะ +สม +สมการ +สมการเคมี +สมคบ +สมควร +สมคะเน +สมคิด +สมจร +สมจริง +สมจารี +สมจิต +สมชาย +สมญา +สมณ +สมณศักดิ์ +สมณะ +สมดุล +สมถ +สมถะ +สมทบ +สมนอก +สมนัย +สมนาคุณ +สมบัติ +สมบุญ +สมบูรณาญาสิทธิราชย์ +สมบูรณ์ +สมบูรณ์สุข +สมประดี +สมปรารถนา +สมปฤดี +สมปอง +สมปัก +สมผุส +สมพง +สมพงศ์ +สมพล +สมพาส +สมภพ +สมภาร +สมมต +สมมติ +สมมติฐาน +สมมาตร +สมมุติ +สมมุติฐาน +สมมูล +สมมูลเคมี +สมยศ +สมยอม +สมร +สมรด +สมรภูมิ +สมรรถ +สมรรถนะ +สมรรถภาพ +สมรส +สมรู้ +สมฤดี +สมฤติ +สมฤทัย +สมวัย +สมวายะ +สมวิภา +สมศรี +สมสัก +สมสุข +สมสู่ +สมส่วน +สมหวัง +สมอ +สมอง +สมอจีน +สมอลไทต์ +สมอ้าง +สมัค +สมัคร +สมังคี +สมัช +สมัชชา +สมัญญา +สมัต +สมัน +สมันต์ +สมัย +สมา +สมาคม +สมาจาร +สมาชิก +สมาทาน +สมาธิ +สมาน +สมานคติ +สมานฉันท์ +สมาบัติ +สมาพันธรัฐ +สมาส +สมิง +สมิต +สมิตสันต์ +สมิติ +สมิติเวช +สมิทซอไนต์ +สมิทธิโชติ +สมิทธิ์ +สมิทธ์ +สมี +สมีป +สมีร +สมุก +สมุฏฐาน +สมุด +สมุทร +สมุทรปราการ +สมุทรศาสตร์ +สมุทรสงคราม +สมุทรสาคร +สมุทัย +สมุน +สมุนไพร +สมุห +สมุหนาม +สมุหนายก +สมุห์ +สมเญศ +สมเด็จ +สมเด็จพระปิ่นเกล้า +สมเด็จเจ้าพระยา +สมเพช +สมเสร็จ +สมโพธน์ +สมโพธิ +สมโภค +สมโภช +สมโภชน์ +สมโมท +สมโยค +สมใจ +สมใน +สม่ำเสมอ +สยด +สยดสยอง +สยนะ +สยบ +สยมพร +สยมภู +สยอง +สยอน +สยัมพร +สยาม +สยามจัสโก้ +สยามฟิชชิ่ง +สยามสแควร์ +สยามเซ็นเตอร์ +สยาย +สยิว +สยิ้ว +สยุมพร +สยุมภู +สยุ่น +สรก +สรง +สรฏะ +สรณ +สรณคมน์ +สรณตรัย +สรณะ +สรณาคมน์ +สรดัก +สรดึ่น +สรดื่น +สรตะ +สรตัก +สรทะ +สรทึง +สรนุก +สรบบ +สรภะ +สรภัญญะ +สรภู +สรร +สรรคบุรี +สรรค์ +สรรพ +สรรพคุณ +สรรพนาม +สรรพยา +สรรพสามิตร +สรรพากร +สรรพางค์ +สรรพาวุธ +สรรวง +สรรหา +สรรเพชญ +สรรเสริญ +สรลน +สรลม +สรลอด +สรลอน +สรละ +สรลิด +สรล้าย +สรวง +สรวงเส +สรวป +สรวม +สรวล +สรวลเส +สระ +สระกอ +สระดะ +สระบุรี +สระอาด +สระแก้ว +สรั่ง +สราญ +สริต +สรีร +สรีรกิจ +สรีรธาตุ +สรีรวิทยา +สรีรศาสตร์ +สรีระ +สรีสฤบ +สรี้ +สรุก +สรุง +สรุป +สรุสระ +สรุโนก +สรเนาะ +สรเพชญ +สรเลข +สรแทบ +สรไน +สร่ง +สร่าง +สร้อย +สร้อยทอง +สร้าง +สร้างคอม +สร้างสรรค์ +สร้างสรรพ์ +สร้าวเสียว +สฤก +สฤคาล +สฤต +สฤษฎี +สฤษฏ์ +สล +สลด +สลบ +สลบไสล +สลวน +สลวย +สลอด +สลอน +สลอย +สละ +สลัก +สลักเกลียว +สลักเต้ +สลัด +สลัดได +สลับ +สลัม +สลัว +สลา +สลาก +สลาง +สลาด +สลาตัน +สลาบ +สลาย +สลิง +สลิด +สลิป +สลิม +สลิล +สลึก +สลึง +สลุด +สลุต +สลุบ +สลุมพร +สล็อต +สล้าง +สวก +สวกรรม +สวด +สวน +สวนจตุจักร +สวนดุสิต +สวนบัว +สวนผึ้ง +สวนพลู +สวนมะลิ +สวนรัฐ +สวนลุมพินี +สวนสยาม +สวนสราญรมย์ +สวนสัตว์ดุสิต +สวนสุนันทา +สวนหลวง +สวนะ +สวนาการ +สวนิต +สวนีย +สวนีย์ +สวนเงิน +สวนแทง +สวนแหลมทอง +สวบ +สวภาพ +สวม +สวมกอด +สวมรอย +สวมเขา +สวย +สวยงาม +สวยม +สวยมพร +สวยมภู +สวร +สวรรค +สวรรคต +สวรรคาลัย +สวรรคโลก +สวรรค์ +สวรรยา +สวอป +สวะ +สวัสดิการ +สวัสดิการทหาร +สวัสดิภาพ +สวัสดิ์ +สวัสดิ์อำนวยเวทย์ +สวัสดี +สวัสติกะ +สวา +สวาคต +สวาง +สวาซิแลนด์ +สวาด +สวาดิ +สวาท +สวาบ +สวาปาม +สวามิ +สวามิภักดิ์ +สวามี +สวาย +สวายสอ +สวาสดิ์ +สวาหะ +สวิง +สวิตช์ +สวิตซ์ +สวิสเซอร์แลนด์ +สวี +สวีเดน +สว่าง +สว่างอารมณ์ +สว่างแดนดิน +สว่างไสว +สว่าน +สว้าน +สสาร +สสารนิยม +สสุระ +สสุรี +สห +สหกรณ์ +สหการ +สหจร +สหชาต +สหชาติ +สหธรรม +สหบาน +สหประชาชาติ +สหพันธรัฐ +สหพันธ์ +สหภาพ +สหภาพแรงงาน +สหมิตร +สหรัฐ +สหรัฐอเมริกา +สหรัฐฯ +สหวิริยา +สหศึกษา +สหัช +สหัมบดี +สหัส +สหัสขันธ์ +สหัสนัยน์ +สหัสวรรษ +สหัสสะ +สหัสา +สหาย +สอ +สอง +สองผม +สองพระ +สองพี่น้อง +สองฤดู +สองใจ +สองไม้ +สอด +สอดคล้อง +สอดรู้ +สอดแนม +สอดใส่ +สอดไส้ +สอน +สอบ +สอบถาม +สอบสวน +สอบไล่ +สอพลอ +สอย +สอยดาว +สอยผม +สะ +สะกด +สะกอ +สะกา +สะกาง +สะการะ +สะกิด +สะคราญ +สะคร้อ +สะค้าน +สะดม +สะดวก +สะดัก +สะดิ้ง +สะดึง +สะดือ +สะดุด +สะดุ้ง +สะตอ +สะตึ +สะตือ +สะตุ +สะทก +สะทน +สะทึก +สะทึน +สะท้อน +สะท้าน +สะบะ +สะบัก +สะบักสะบอม +สะบัด +สะบัดสะบิ้ง +สะบั้น +สะบิ้ง +สะบู +สะบ้า +สะบ้าย้อย +สะพรัก +สะพรั่ง +สะพรึบ +สะพัก +สะพัง +สะพัด +สะพั้น +สะพาน +สะพานควาย +สะพานคู่ +สะพาย +สะระตะ +สะระแหน่ +สะลาง +สะลึมสะลือ +สะล้อ +สะวี้ดสะว้าด +สะสม +สะสวย +สะสาง +สะอาง +สะอาด +สะอิดสะเอียน +สะอิ้ง +สะอึก +สะอื้น +สะอ้าน +สะเกะ +สะเก็ด +สะเดา +สะเดาะ +สะเด็ด +สะเต๊ะ +สะเทิน +สะเทิ้น +สะเทือน +สะเทื้อน +สะเพร่า +สะเภา +สะเมิง +สะเอว +สะเออะ +สะเอ้ง +สะแก +สะแบง +สะและน้อย +สะโตก +สะโพก +สะโมง +สะโอดสะอง +สะใจ +สะใภ้ +สะไบ +สะไอ +สัก +สักกะ +สักกาย +สักการ +สักขรา +สักขี +สักฏะ +สักวา +สักว่า +สักหลาด +สัขยะ +สัค +สังกมทรัพย์ +สังกร +สังกรณี +สังกะตัง +สังกะสี +สังกัด +สังกัปปะ +สังกา +สังการ +สังกาศ +สังข +สังขกร +สังขต +สังขยา +สังขละบุรี +สังขลิก +สังขวัฒนะ +สังขะ +สังขาร +สังข์ +สังข์กระจาย +สังค +สังคญาติ +สังคม +สังคมนิยม +สังคมวิทยา +สังคมศาสตร์ +สังคมศึกษา +สังคมสงเคราะห์ +สังคห +สังคหะ +สังคัง +สังคาตา +สังคายนา +สังคายนาย +สังคีต +สังคีติ +สังค์ +สังฆ +สังฆกรรม +สังฆทาน +สังฆนายก +สังฆปาโมกข์ +สังฆมณฑล +สังฆมนตรี +สังฆราช +สังฆสภา +สังฆาฏิ +สังฆาทิเลส +สังฆานุสติ +สังฆาวาส +สังฆเถระ +สังฆเภท +สังวร +สังวัธยาย +สังวาล +สังวาส +สังสดมภ์ +สังสนทนา +สังสรรค์ +สังสาร +สังสารวัฏ +สังสิทธิ์ +สังหร +สังหรณ์ +สังหาร +สังหาริมทรัพย์ +สังหิต +สังเกต +สังเกตการณ์ +สังเขป +สังเคราะห์ +สังเวคะ +สังเวช +สังเวย +สังเวียน +สังโขภ +สังโยค +สังโยชน์ +สัจ +สัจกิริยา +สัจจะ +สัจญาณ +สัจธรรม +สัจนิยม +สัจพจน์ +สัชฌ +สัชฌกร +สัชฌุ +สัญจร +สัญจาร +สัญชาต +สัญชาตญาณ +สัญชาติ +สัญฌา +สัญญา +สัญญาณ +สัญญี +สัญประกาศ +สัญลักษณ์ +สัญเจตนา +สัญโยค +สัฐิ +สัณฐาน +สัณฑ์ +สัณห์ +สัด +สัดจอง +สัดส่วน +สัต +สัตการ +สัตตบงกช +สัตตบรรณ +สัตตะ +สัตตาห +สัตตู +สัตถ +สัตถา +สัตถิ +สัตถุ +สัตบถ +สัตบรรณ +สัตบุรุษ +สัตม +สัตมะ +สัตย +สัตยวาที +สัตยาธิษฐาน +สัตยาบัน +สัตย์ +สัตว +สัตวบาล +สัตววิทยา +สัตวา +สัตวาร +สัตวแพทย์ +สัตวโลก +สัตว์ +สัตสดก +สัตหีบ +สัทธรรม +สัทธา +สัทศาสตร์ +สัน +สันกำแพง +สันดอน +สันดาน +สันดาป +สันตติ +สันตะปาปา +สันติ +สันติภาพ +สันติภูมิ +สันติราษฎร์ +สันติสุข +สันติอโศก +สันต์ +สันถระ +สันถว +สันถวะ +สันถวไมตรี +สันถัต +สันถาร +สันทนะ +สันทนาการ +สันทราย +สันทะ +สันทัด +สันทาน +สันทิส +สันธาน +สันนิบาต +สันนิวาส +สันนิษฐาน +สันนิเวส +สันป่าตอง +สันรวง +สันลึก +สันสกฤต +สันเขา +สันเดก +สันเทส +สันเทห +สันโดษ +สับ +สับนก +สับปลับ +สับปะรด +สับสน +สับเงา +สับโขก +สัปคับ +สัปด +สัปดน +สัปดาห์ +สัปต +สัปตศก +สัปทน +สัปปะ +สัปปิ +สัประยุทธ์ +สัปหงก +สัปเหร่อ +สัพ +สัพพะ +สัพพัญญู +สัพยอก +สัพเพเหระ +สัมบูรณ์ +สัมปชัญญะ +สัมปทา +สัมปทาน +สัมปยุต +สัมประสิทธิ์ +สัมประหาร +สัมปรายภพ +สัมปรายิกภพ +สัมปัญญาวาส +สัมปโยค +สัมผัส +สัมพล +สัมพัทธ์ +สัมพันธน์ +สัมพันธภาพ +สัมพันธมิตร +สัมพันธวงศ์ +สัมพันธไมตรี +สัมพันธ์ +สัมพาธะ +สัมพุทธะ +สัมภวะ +สัมภัต +สัมภาร +สัมภาระ +สัมภาษณ์ +สัมมนา +สัมมัปธาน +สัมมา +สัมมาชีพ +สัมฤทธิ์ +สัมโพธิ +สัมโมทนียกถา +สัยน์ +สัลลาป +สัลเลข +สัสดี +สัสต +สัสสะ +สัสสุ +สัสสุระ +สั่ง +สั่งสม +สั่น +สั้น +สา +สาก +สากรรจ์ +สากล +สากลแลนด์ +สากษิน +สากัจฉา +สากิย +สาขา +สาคร +สาคู +สาคเรศ +สาง +สางห่า +สาฎก +สาฏิก +สาณ +สาณี +สาด +สาต +สาตรา +สาทร +สาทิส +สาทิสลักษณ์ +สาทุ +สาธก +สาธยา +สาธยาย +สาธร +สาธารณ +สาธารณชน +สาธารณประโยชน์ +สาธารณภัย +สาธารณรัฐ +สาธารณสุข +สาธารณะ +สาธารณูปการ +สาธารณูปโภค +สาธิต +สาธุ +สาธุการ +สาธุชน +สาธุประดิษฐ์ +สาน +สานตวะ +สานุ +สานุศิษย์ +สาบ +สาบสูญ +สาบาน +สาป +สาปไตย +สาม +สามขา +สามขุม +สามคาน +สามง่าม +สามชุก +สามตา +สามทหาร +สามนต +สามนต์ +สามพระยา +สามพราน +สามพี่น้อง +สามรส +สามล +สามล้อ +สามสกุล +สามสิบ +สามหลัง +สามหาบ +สามหาว +สามัคคี +สามัคคีธรรม +สามัญ +สามัญสำนึก +สามานย +สามานย์ +สามารถ +สามิก +สามิต +สามินี +สามิภักดิ์ +สามี +สามเงา +สามเณร +สามเมา +สามเวท +สามเสน +สามเหลี่ยม +สามแซ่ +สามโก้ +สามโคก +สามไชย +สาย +สายชู +สายซุง +สายดิน +สายตัว +สายตา +สายน้ำ +สายน้ำผึ้ง +สายบัว +สายบุรี +สายปากน้ำ +สายพาน +สายฟ้า +สายยู +สายรุ้ง +สายลม +สายลับ +สายสมร +สายสินบน +สายส่ง +สายอักษร +สายัญ +สายัญห์ +สายัณห์ +สายเนตร +สายเหา +สายเอก +สายโยก +สายใจ +สายใย +สายไหม +สาร +สารคดี +สารตรา +สารถี +สารท +สารทา +สารทิศ +สารนิเทศ +สารบบ +สารบรรณ +สารบัญ +สารบับ +สารบาญ +สารประกอบ +สารพัด +สารพัดช่าง +สารพัน +สารพางค์ +สารภาพ +สารภี +สารละลาย +สารวัด +สารวัตร +สารสนเทศ +สารสัม +สารสาสน์ +สารสิน +สารส้ม +สารหนู +สารอด +สาระ +สาระพา +สาระแน +สารัตถ +สารัตถสำคัญ +สารัตถะ +สารัทธ์ +สารัมภ์ +สาราณีย +สาราณียกร +สารานุกรม +สารีริกธาตุ +สารูป +สารเลว +สารไมย +สาร์ก +สาละ +สาละวน +สาลิ +สาลิกา +สาลินี +สาลี +สาลี่ +สาลู +สาว +สาวก +สาวนะ +สาวรส +สาวิกา +สาวิตร +สาวิตรี +สาวแก่ +สาวแส้ +สาวไส้ +สาสนา +สาสน์ +สาสม +สาส์น +สาหรี +สาหร่าย +สาหัตถ +สาหัส +สาฬุระ +สาเก +สาเหตุ +สาแหรก +สาโท +สาโรช +สาไถย +สำ +สำคัญ +สำซ่าง +สำทับ +สำนวด +สำนวน +สำนอง +สำนัก +สำนักงาน +สำนักสงฆ์ +สำนาน +สำนึก +สำนึง +สำบอก +สำบัดสำนวน +สำปะลอ +สำปะหลัง +สำปั้น +สำมะงา +สำมะลอ +สำมะหา +สำมะเลเทเมา +สำมะโน +สำมะโนครัว +สำรด +สำรวจ +สำรวม +สำรวย +สำรวล +สำรอก +สำรอง +สำรับ +สำราก +สำราญ +สำราญดีศรีตะ +สำราญราษฎร์ +สำริด +สำลัก +สำลาน +สำลี +สำสา +สำส่อน +สำหรวด +สำหรับ +สำหา +สำออย +สำอาง +สำเนา +สำเนียง +สำเภา +สำเรา +สำเริง +สำเร็จ +สำเร็จรูป +สำเส็ด +สำเหนียก +สำเหร่ +สำแดง +สำแลง +สำโรง +สำโรงทาบ +สิ +สิกขา +สิกขาบท +สิกขิม +สิกข์ +สิขร +สิขรี +สิขา +สิขานล +สิขี +สิขเรศ +สิคาล +สิง +สิงขร +สิงคลี +สิงคาร +สิงคาล +สิงคี +สิงคโปร์ +สิงค์ +สิงสาราสัตว์ +สิงสู่ +สิงห +สิงหนาท +สิงหบัญชร +สิงหรา +สิงหราช +สิงหล +สิงหลก +สิงหาคม +สิงหาสน์ +สิงห์ +สิงห์บุรี +สิงโต +สิชล +สิญจ +สิญจน์ +สิญจ์ +สิต +สิถิล +สิทธ +สิทธา +สิทธารถ +สิทธาราม +สิทธิ +สิทธิชัย +สิทธิสภาพนอกอาณาเขต +สิทธิ์ +สิธยะ +สิน +สินค้า +สินทรัพย์ +สินทวี +สินธพ +สินธุ +สินธุร +สินบน +สินสอด +สินสุข +สินะ +สินาด +สินี +สินเทา +สินเธาว์ +สินเหลือ +สินแร่ +สินใช้ +สินไถ่ +สินไหน +สินไหม +สิบ +สิปปะ +สิพนะ +สิมพลี +สิร +สิระ +สิริ +สิริก +สิริเทพ +สิลา +สิว +สิวิกา +สิหนา +สิเกา +สิเนรุ +สิเนหก +สิเนหะ +สิเนหา +สิเน่หา +สิโรดม +สิโลก +สิ่ง +สิ่งของ +สิ่ว +สิ้น +สิ้นชีพ +สิ้นชีพิตักษัย +สิ้นพระชนม์ +สิ้นลม +สิ้นใจ +สี +สีกรุด +สีกัน +สีกา +สีกุน +สีข้าง +สีคิ้ว +สีฆ +สีจัก +สีชมพู +สีด +สีดอ +สีต +สีตล +สีต้น +สีน้ำเงิน +สีผึ้ง +สีฝัด +สีมา +สีลม +สีวิกา +สีสอ +สีสะ +สีสัน +สีสา +สีสุก +สีห +สีหนาท +สีหน้า +สีหราช +สีห์ +สีโตทก +สีไฟ +สี่ +สี่บท +สี่พระยา +สี่เหลี่ยม +สี่ไชยทอง +สี้ +สึก +สึกหรอ +สึง +สืบ +สืบค้น +สืบทอด +สืบพันธุ์ +สืบสวน +สืบสาน +สืบสาย +สืบหา +สืบหูก +สืบไป +สื่อ +สื่อมวลชน +สื่อสาร +สุ +สุก +สุกข์ +สุกงอม +สุกดิบ +สุกร +สุกรม +สุกัญญกิจ +สุกำ +สุกี้ยากี้ +สุกแดด +สุกใส +สุข +สุขตา +สุขนาฏกรรม +สุขนิเวศน์ +สุขภัณฑ์ +สุขภาพ +สุขร่วมกัน +สุขลักษณะ +สุขวิทยา +สุขศึกษา +สุขสม +สุขสวัสดิ์ +สุขสันต์ +สุขสาคร +สุขา +สุขาภิบาล +สุขารมณ์ +สุขาวดี +สุขิน +สุขี +สุขุม +สุขุมวิท +สุขุมาล +สุขใจ +สุคต +สุคติ +สุคนธ +สุคนธรส +สุคนธสวัสดิ์ +สุคนธ์ +สุคันธาราม +สุคันธ์ +สุคิริน +สุงก +สุงกากร +สุงสิง +สุจริต +สุจหนี่ +สุจะ +สุจิ +สุจิต +สุจิตร +สุชน +สุชา +สุชาดา +สุญ +สุญญากาศ +สุญตา +สุญนิยม +สุณ +สุณหา +สุณิสา +สุด +สุดกู่ +สุดขีด +สุดคน +สุดคิด +สุดจิต +สุดท้าย +สุดนรี +สุดประเสริฐ +สุดภักดี +สุดวิสัย +สุดสาคร +สุดา +สุดแต่ +สุดใจ +สุต +สุตกวี +สุตตะ +สุตา +สุติ +สุทธ +สุทธาราม +สุทธาวาส +สุทธิ +สุทธิพร +สุทธิวราราม +สุทธิสาร +สุทธิสารวินิจฉัย +สุทธ์ +สุทัศน์ +สุธา +สุธารส +สุธารสชา +สุธาวาส +สุธาสี +สุธี +สุนทร +สุนทรพจน์ +สุนทรศิริ +สุนทรี +สุนทรีย +สุนทรียภาพ +สุนทรียศาสตร์ +สุนทรโกษา +สุนัข +สุนันท์ +สุนิภา +สุบดี +สุบรรณ +สุบิน +สุปาณี +สุพพัต +สุพรรณ +สุพรรณบัฏ +สุพรรณบุรี +สุพรรณภาชน์ +สุพรรณราช +สุพรรณศรี +สุพิตร +สุพิศมร +สุภ +สุภร +สุภัค +สุภา +สุภาพ +สุภาพงษ์ +สุภาร่วม +สุภาษิต +สุม +สุมขอน +สุมทุม +สุมน +สุมนะ +สุมนัส +สุมนา +สุมยุง +สุมหัว +สุมะ +สุมาตรา +สุมาลี +สุร +สุรคต +สุรงค์ +สุรบดี +สุรบถ +สุรภาพ +สุรภี +สุรวงศ์ +สุรศักดิ์ +สุรสีหนาท +สุรัติ +สุรัสวดี +สุรา +สุรางคนา +สุรางคนางค์ +สุรารักษ์ +สุราลัย +สุราษฎร์ธานี +สุรินทร์ +สุรินัม +สุริย +สุริยการ +สุริยกาล +สุริยคติ +สุริยคราส +สุริยง +สุริยน +สุริยมณฑล +สุริยะ +สุริยัน +สุริยา +สุริยุปราคา +สุริยเคราะห์ +สุริเยนทร์ +สุริเยศ +สุริโย +สุรีย์ +สุรุ่ยสุร่าย +สุรเสียง +สุรโลก +สุลต่าน +สุว +สุวภาพ +สุวรรณ +สุวรรณคีรี +สุวรรณคูหา +สุวรรณประสิทธิ์ +สุวรรณพฤกษ์ +สุวรรณภิงคาร +สุวรรณภูมิ +สุวรรณมณี +สุวรรณวาจก +สุวรรณสวัสดิ์ +สุวรรณาราม +สุวาน +สุวิชา +สุวิชานดำริห์ +สุวินัย +สุวิมล +สุษิร +สุสาน +สุหนัต +สุหนี่ +สุหร่ง +สุหร่าย +สุหฤท +สุเมธ +สุเมรุ +สุเรนทร์ +สุเหร่า +สุเหร่าวังใหญ่ +สุโขทัย +สุโนก +สุไหงปาดี +สุไหงโกลก +สุ่ม +สู +สูกษม +สูง +สูงค่า +สูงสุด +สูงส่ง +สูงเนิน +สูงเม่น +สูจกะ +สูจนะ +สูจิ +สูจิบัตร +สูญ +สูญหาย +สูด +สูต +สูตร +สูตรเคมี +สูติ +สูติกรรม +สูติบัตร +สูติศาสตร์ +สูติแพทย์ +สูท +สูน +สูนุ +สูบ +สูป +สูปการ +สูร +สูรย +สูรย์ +สูริ +สูสี +สูเจ้า +สู่ +สู่ขอ +สู่รู้ +สู่สม +สู่หา +สู้ +สเกต +สเกตน้ำแข็ง +สเกล +สเตย์ +สเตอริโอ +สเต็ก +สเปก +สเปกตรัม +สเปกโทรสโคป +สเปน +สเปรดชีต +สเปสซาร์ไทต์ +สแกน +สแกนเดียม +สแคโพไลต์ +สแตนดาร์ด +สแตนด์ +สแตนลีย์ +สแตนไนต์ +สแปม +สแลง +สโกปิลอส +สโคป +สโตรค +สโตร์ +สโมธาน +สโมสร +สโรช +สโลเวเนีย +สโลแกน +สไตล์ +สไตล์ชีต +สไบ +สไปริลลัม +สไลด์ +ส่ง +ส่งดอก +ส่งตัว +ส่งลำ +ส่งเดช +ส่วน +ส่วนลด +ส่วนสัด +ส่วย +ส่อ +ส่อง +ส่องดาว +ส่อน +ส่อแวว +ส่า +ส่าน +ส่าย +ส่าหรี +ส่าเหล้า +ส่าไข้ +ส่ำ +ส้น +ส้นตีน +ส้ม +ส้มตำ +ส้มทับ +ส้มป่อย +ส้มฟัก +ส้วง +ส้วม +ส้วย +ส้อง +ส้อม +ส้าง +ส้าย +หก +หกคว่ำ +หกบท +หกล้ม +หกหัน +หกโล่ +หง +หงก +หงกๆ +หงษ์อ่อน +หงส +หงสคติ +หงสบาท +หงสรถ +หงสราช +หงส์ +หงอ +หงอก +หงอด +หงอน +หงอย +หงอยเหงา +หงัก +หงักๆ +หงับๆ +หงาย +หงำ +หงิก +หงิง +หงิงๆ +หงิม +หงึก +หงึกๆ +หงุงหงิง +หงุดหงิด +หงุบ +หงุ่ย +หง่องๆ +หง่อม +หง่อย +หง่าง +หง่าว +หญิง +หญิบ +หญ้า +หญ้าฝรั่น +หด +หดหาย +หดหู่ +หตะ +หทย +หทัย +หน +หนทาง +หนวก +หนวกหู +หนวด +หนอ +หนอก +หนอง +หนองกี่ +หนองกุงศรี +หนองขาหย่าง +หนองคาย +หนองจอก +หนองจิก +หนองฉาง +หนองบัว +หนองบัวลำภู +หนองบัวแดง +หนองพอก +หนองวัวซอ +หนองสองห้อง +หนองหญ้าปล้อง +หนองหาน +หนองเรือ +หนองเสือ +หนองแขม +หนองแค +หนองแซง +หนองโดน +หนองใน +หนองใหญ่ +หนองไผ่ +หนอน +หนอนกอ +หนัก +หนักอก +หนักใจ +หนัง +หนังสือ +หนังสือพิมพ์ +หนังสือเดินทาง +หนับ +หนั่น +หนา +หนาด +หนาตา +หนาน +หนาบ +หนาม +หนาว +หนาวใจ +หนาหู +หนำ +หนำซ้ำ +หนำเลี้ยบ +หนำใจ +หนี +หนีบ +หนี้ +หนึก +หนึบ +หนึ่ง +หนืด +หนุ +หนุน +หนุบ +หนุมาน +หนุ่ม +หนุ่ย +หนู +หนูผี +หน็อยแน่ +หน่วง +หน่วย +หน่วยกิต +หน่วยดาราศาสตร์ +หน่อ +หน่อย +หน่าง +หน่าย +หน้า +หน้ากาก +หน้าขา +หน้างอ +หน้าตา +หน้าต่าง +หน้าที่ +หน้าผา +หน้าพระลาน +หน้าอก +หน้าแง +หน้าไฟ +หมก +หมกมุ่น +หมด +หมดกัน +หมดจด +หมดตัว +หมดตูด +หมดบุญ +หมดพก +หมดพุง +หมดรูป +หมดอาลัย +หมดเขต +หมวก +หมวกเหล็ก +หมวด +หมอ +หมอก +หมอง +หมองหมาง +หมองใจ +หมอชิต +หมอดู +หมอตาล +หมอน +หมอนข +หมอนข้าง +หมอบ +หมอผี +หมอย +หมอลำ +หมอเทศ +หมอเหล็ง +หมอไทย +หมัก +หมักหมม +หมัด +หมัน +หมับ +หมั่น +หมั้น +หมา +หมาก +หมากสง +หมากฮอส +หมาง +หมางใจ +หมาจิ้งจอก +หมาด +หมาบ้า +หมาป่า +หมาย +หมายก +หมายความ +หมายตา +หมายยา +หมายเลข +หมายเหตุ +หมายใจ +หมาร่า +หมาใน +หมาไม้ +หมิ่น +หมิ่นเหม่ +หมี +หมี่ +หมึก +หมืน +หมื่น +หมุด +หมุน +หมุนเวียน +หมุบ +หมุบหมิบ +หมุ่ย +หมู +หมูน้ำ +หมูป่า +หมูยอ +หมูสัง +หมูสี +หมูหยอง +หมูหัน +หมูแดง +หมูแนม +หมูแฮม +หมู่ +หมู่บ้าน +หม่น +หม่นหมอง +หม่อ +หม่อง +หม่อน +หม่อม +หม่อมแผ้ว +หม่า +หม่ำ +หม้อ +หม้อแปลง +หม้อแปลงไฟ +หม้า +หม้าย +หยก +หยกๆ +หยด +หยวก +หยวน +หยวนโล้ +หยวบ +หยอก +หยอกเอิน +หยอง +หยอด +หยอน +หยอย +หยัก +หยักศก +หยัง +หยัด +หยัน +หยับ +หยั่ง +หยากไย่ +หยาง +หยาด +หยาดน้ำฟ้า +หยาบ +หยาม +หยาว +หยำเป +หยิก +หยิน +หยิบ +หยิบยก +หยิม +หยิมๆ +หยิ่ง +หยี +หยี่ +หยุ +หยุกหยิก +หยุด +หยุบ +หยุบๆ +หยุมหยิม +หยุ่น +หยูกยา +หย็องแหย็ง +หย่ง +หย่วน +หย่อง +หย่องๆ +หย่อน +หย่อม +หย่อย +หย่า +หย่านม +หย้าว +หรคุณ +หรณ +หรดาล +หรดี +หรบๆ +หรรษา +หรอ +หรอก +หรอยๆ +หรับๆ +หรัสว +หรา +หริ +หริณะ +หริต +หริตกี +หริ่ง +หริ่งๆ +หรีด +หรี่ +หรือ +หรุบรู่ +หรุบหรู่ +หรุบๆ +หรุ่ม +หรู +หรูหรา +หร็อมแหร็ม +หฤทย +หฤทย์ +หฤทัย +หฤษฏ์ +หฤหรรษ์ +หฤโหด +หล +หลง +หลงกล +หลงตา +หลงลม +หลงลืม +หลงใหล +หลด +หลน +หลบ +หลบตา +หลบฝาก +หลบมุม +หลวง +หลวม +หลอ +หลอก +หลอด +หลอดลม +หลอดอาหาร +หลอน +หลอม +หลอมละลาย +หลอมเหลว +หละ +หลัก +หลักตอ +หลักสี่ +หลักสี่พลาซ่า +หลักสูตร +หลักเมือง +หลัง +หลังค +หลังคา +หลังสวน +หลัด +หลัดๆ +หลับ +หลับต +หลับตา +หลับนก +หลับใน +หลัว +หลั่ง +หลั่น +หลา +หลาก +หลากใจ +หลาท +หลาน +หลานหลวง +หลาบ +หลาบจำ +หลาม +หลาย +หลาว +หลาหล +หลิก +หลิท +หลิน +หลิม +หลิว +หลิ่ง +หลิ่ว +หลี +หลีก +หลีบ +หลีฮื้อ +หลีโก +หลืบ +หลุกหลิก +หลุด +หลุนๆ +หลุบ +หลุม +หลุมพอ +หลุมพี +หลู่ +หล็อน +หล่น +หล่ม +หล่มสัก +หล่มเก่า +หล่อ +หล่อน +หล้า +หวง +หวงแหน +หวด +หวน +หวย +หวอ +หวอด +หวะ +หวัง +หวัด +หวัว +หวัวร่อ +หวั่น +หวา +หวาก +หวาด +หวาดระแวง +หวาดหวั่น +หวาดเสียว +หวาดไหว +หวาน +หวาม +หวาย +หวำ +หวิด +หวิว +หวี +หวีด +หวี่ +หวือ +หวุดหวิด +หวุม +หวูด +หว็อย +หว็อยๆ +หว่า +หว่าง +หว่าน +หว้า +หสน +หอ +หอก +หอกซัด +หอการค้า +หอการค้าไทย +หอคอย +หอคำ +หอง +หอน +หอบ +หอพัก +หอม +หอมขาว +หอมยับ +หอมหวน +หอมแดง +หอย +หอวัง +หอสมุดแห่งชาติ +หอสุมด +หอไตร +หะ +หะยี +หะหาย +หะแรก +หะแห้น +หัก +หักคอ +หักมุก +หักลำ +หักหาญ +หักอก +หักเห +หักแรง +หักโหม +หักใจ +หังส +หัจญี +หัจญ์ +หัช +หัฏฐะ +หัด +หัต +หัตถ +หัตถกรรม +หัตถการ +หัตถกิจ +หัตถบาส +หัตถพันธ์ +หัตถศิลป์ +หัตถศึกษา +หัตถาจารย์ +หัตถาภรณ์ +หัตถาลังการ +หัตถินี +หัตถี +หัตถเลขา +หัตถ์ +หัน +หันคา +หันตรา +หันตา +หันเห +หับ +หับเผย +หัย +หัว +หัวขาด +หัวข้อ +หัวคิด +หัวค่ำ +หัวงอน +หัวงาน +หัวซุน +หัวตะพาน +หัวต่อ +หัวถอก +หัวที +หัวนม +หัวนอก +หัวนอน +หัวน้ำ +หัวบัว +หัวบุก +หัวปลี +หัวปาก +หัวปี +หัวป่า +หัวพัน +หัวมัน +หัวรอ +หัวร่อ +หัวลม +หัวลำโพง +หัวลิง +หัวสูง +หัวหด +หัวหน้า +หัวหมอ +หัวหมาก +หัวหมู +หัวหาด +หัวหิน +หัวอก +หัวออก +หัวเฉียว +หัวเราะ +หัวแรง +หัวโขน +หัวโจก +หัวใจ +หัวไทร +หัวไม้ +หัวไส้ +หัส +หัสดิน +หัสดินทร์ +หัสดิเสวี +หัสดี +หัสตะ +หัสต์ +หั่น +หั้น +หา +หาก +หากว่า +หากิน +หาความ +หาง +หางขอด +หางค้อ +หางดง +หางนาค +หางปลา +หางยาม +หางยาว +หางหนู +หางเลข +หางแถว +หางแพน +หางไก่ +หางไหล +หาญ +หาด +หาดก +หาดใหญ่ +หาน +หาบ +หาบเร่ +หาม +หามรอก +หามิได้ +หาย +หายกัน +หายขาด +หายตัว +หายนะ +หายหัว +หายใจ +หาร +หารร่วมมาก +หาริ +หาริน +หารือ +หาลิท +หาว +หาวนอน +หาส +หาสก +หาสยะ +หาสู่ +หาเงิน +หาเหตุ +หาไม่ +หำ +หิงคุ +หิงสา +หิงห้อย +หิด +หิต +หิตกร +หิน +หินงอก +หินชนวน +หินชั้น +หินดินดาน +หินตะกอน +หินทราย +หินน้ำมัน +หินปูน +หินยาน +หินย้อย +หินสบู่ +หินหนืด +หินอัคนี +หินเหล็กไฟ +หินแปร +หินแลง +หิม +หิมพาน +หิมพานต์ +หิมวัต +หิมวา +หิมวาต +หิมวาน +หิมวาส +หิมะ +หิมาลัย +หิมเวศ +หิรัญ +หิรัญบัฏ +หิริ +หิว +หิวโหย +หิ่งห้อย +หิ้ง +หิ้ว +หี +หีด +หีตา +หีน +หีนยาน +หีบ +หีบชัก +หีบสไบ +หีบห่อ +หีเต่า +หึ +หึง +หึงส +หึ่ง +หืด +หืน +หือ +หื่น +หื้อ +หุง +หุต +หุตายน +หุน +หุนหัน +หุบ +หุบปาก +หุบผา +หุบเขา +หุบเหว +หุยฮา +หุรัม +หุ่น +หุ้น +หุ้นลม +หุ้ม +หู +หูก +หูกวาง +หูฉลาม +หูฉี่ +หูชอง +หูช้าง +หูด +หูติ +หูตึง +หูตูบ +หูผึ่ง +หูรูด +หูหนู +หูเบา +หูเสือ +หูไว +หูไห +หู่ +หู่หี่ +หโยดม +ห่ม +ห่มดอง +ห่วง +ห่วงใย +ห่วย +ห่อ +ห่อตัว +ห่อน +ห่อหมก +ห่อแห +ห่า +ห่ากิน +ห่าง +ห่างเห +ห่าน +ห่าม +ห่าลง +ห้วง +ห้วน +ห้วนๆ +ห้วย +ห้วยขวาง +ห้วยทับทัน +ห้วยยอด +ห้วยเม็ก +ห้วยแถลง +ห้อ +ห้อง +ห้องน้ำ +ห้องเรียน +ห้อม +ห้อมล้อม +ห้อย +ห้า +ห้าง +ห้างฉัตร +ห้าม +ห้าว +ห้าวหาญ +ห้ำ +ห้ำหัก +อก +อกคราก +อกตัญญุตา +อกตัญญู +อกตั้ง +อกทะเล +อกนิษฐ์ +อกรณีย์ +อกรรมกริยา +อกรวบ +อกร่อง +อกหัก +อกัปปิยะ +อกุศล +อกเต่า +อกเลา +อกแตก +อกโรย +อกไก่ +อคติ +อคาธ +อคาร +อง +องก์ +องค +องคชาต +องคชาติ +องคพยพ +องคมนตรี +องคมรรษ +องครักษ์ +องควิทยา +องคาพยพ +องคุล +องคุลี +องคุลีบาท +องค์ +องค์กร +องค์การ +องศา +องศ์ +องอาจ +องุ่น +อจร +อจล +อจลา +อจิตติ +อจินตา +อจินไตย +อจิร +อจิระ +อช +อชา +อชิน +อชินี +อชิร +อฏวี +อณิ +อณุ +อณู +อด +อดทน +อดนม +อดสู +อดอยาก +อดออม +อดิ +อดิถี +อดิศร +อดิศวร +อดิศัย +อดิเทพ +อดิเรก +อดีต +อดีตกาล +อดีตภพ +อดุล +อดุลย +อดุลย์ +อดใจ +อติ +อติชาต +อติมานะ +อติราช +อติสาร +อติเรก +อทินนาทาน +อธรรม +อธิ +อธิก +อธิกมาส +อธิกรณ์ +อธิกวาร +อธิกสุรทิน +อธิการ +อธิการบดี +อธิคน +อธิคม +อธิฏฐาน +อธิบดี +อธิบาย +อธิป +อธิปไตย +อธิมาตร +อธิมุตติ +อธิราช +อธิวาส +อธิศีล +อธิษฐาน +อธึก +อนงคณะ +อนงคเลขา +อนงค์ +อนธการ +อนยะ +อนรรฆ +อนรรถ +อนล +อนวัช +อนัญ +อนัตตา +อนัตถ +อนันต +อนันตนาค +อนันตร +อนันต์ +อนันต์สุขสันต์ +อนัม +อนากูล +อนาคต +อนาคตกาล +อนาคามี +อนาจาร +อนาถ +อนาถา +อนาทร +อนาธิปไตย +อนามัย +อนามิกา +อนารย +อนารยชน +อนารยธรรม +อนารยะ +อนาลัย +อนาล็อก +อนำ +อนิจ +อนิจกรรม +อนิจจัง +อนิจจา +อนิยต +อนิยม +อนิล +อนิลบถ +อนิวรรต +อนิษฏ์ +อนีก +อนีกัฐ +อนีจ +อนึก +อนึ่ง +อนุ +อนุกร +อนุกรม +อนุกรรมการ +อนุกาชาด +อนุการ +อนุกูล +อนุจร +อนุช +อนุชน +อนุชา +อนุชาต +อนุชิต +อนุญาต +อนุญาโตตุลาการ +อนุตร +อนุทิน +อนุบท +อนุบาล +อนุปริญญา +อนุพงศ์ +อนุพันธ์ +อนุภรรยา +อนุภริยา +อนุภาค +อนุภาพ +อนุภาษ +อนุมัติ +อนุมาตรา +อนุมาน +อนุมานราชธน +อนุมูล +อนุมูลกรด +อนุรักษนิยม +อนุรักษ์ +อนุราช +อนุรูป +อนุวงศ์ +อนุวงษ์ +อนุวัต +อนุวาต +อนุศาสก +อนุศาสตราจารย์ +อนุศาสน์ +อนุศิษฏ์ +อนุสติ +อนุสนธิ +อนุสร +อนุสรณ์ +อนุสัญญา +อนุสัย +อนุสาวรีย์ +อนุสาสนี +อนุเคราะห์ +อนุเถระ +อนุโพธ +อนุโมทนา +อนุโยค +อนุโลม +อบ +อบรม +อบอวล +อบอุ่น +อบอ้าว +อบาย +อบายภูมิ +อบายมุข +อบเชย +อปการ +อปจายน +อปมงคล +อปมาน +อปยศ +อปร +อปรภาค +อปรมาณ +อปรัณ +อปรา +อปราธ +อปวาท +อปหาร +อปาจี +อปาจีน +อปิสซิเนีย +อพพะ +อพยพ +อพาร์ตเมนต์ +อภว +อภัพ +อภัพผล +อภัย +อภัยทาน +อภัยโทษ +อภิ +อภิฆาต +อภิจฉา +อภิชน +อภิชัย +อภิชัยสงคราม +อภิชาต +อภิชิต +อภิญญา +อภิณห +อภิธรรม +อภิธาน +อภินันทนาการ +อภินันท์ +อภินัย +อภินิหาร +อภิบาล +อภิปรัชญา +อภิปราย +อภิมหาอำนาจ +อภิมานะ +อภิมุข +อภิรดี +อภิรมย์ +อภิรักษ์ +อภิราม +อภิรุต +อภิรุม +อภิรูป +อภิลักขิตสมัย +อภิวันท์ +อภิวาท +อภิวาทน์ +อภิสมัย +อภิสมาจาร +อภิสมโพธิ +อภิสัมโพธิ +อภิสิต +อภิสิทธิ์ +อภิเนษกรรม +อภิเลปน์ +อภิเษก +อภิไธย +อภูต +อม +อมก๋อย +อมความ +อมต +อมตบท +อมตะ +อมนุษย์ +อมปาก +อมพะนำ +อมภูมิ +อมมือ +อมยิ้ม +อมร +อมรบดี +อมรพันธ์ +อมรรัตน์ +อมรราช +อมรวิวัฒน์ +อมรา +อมราวดี +อมรินทร์ +อมฤต +อมฤตบท +อมฤตยู +อมฤตรส +อมหนอง +อมัจจะ +อมัตร +อมาตย์ +อมาวสี +อมิตร +อมีบา +อมเรศ +อมโรค +อยาก +อยุทธ์ +อยุธยา +อยู่ +อยู่คง +อยู่ดี +อยู่เจริญ +อยู่เย็น +อยู่ไฟ +อย่า +อย่าง +อย่างไร +อร +อรช +อรชร +อรชุน +อรณ +อรดี +อรธาน +อรนุช +อรพิน +อรพิม +อรรค +อรรฆ +อรรฆย์ +อรรจน์ +อรรณพ +อรรถ +อรรถกร +อรรถกระวี +อรรถการประสิทธิ์ +อรรถนพนฤมิตร +อรรถบท +อรรถประโยชน์ +อรรถมิตร +อรรถรส +อรรถวิภัชน์ +อรรถาธิบาย +อรรธ +อรรธบท +อรสุม +อรหะ +อรหัง +อรหัต +อรหัน +อรหันต +อรหันต์ +อรัญ +อรัญประเทศ +อรัณย์ +อราดี +อริ +อริน +อริย +อริยกะ +อริยบุคคล +อริยผล +อริยมรรค +อริยสัจ +อริยะ +อริสโตเติล +อริเดียม +อรุ +อรุณ +อรุณอัมรินทร์ +อรุโณทัย +อรุ่ม +อรูป +อรไท +อร่อย +อร่าม +อร่ามดวงอุทิศ +อลงกต +อลงกรณ์ +อลงการ +อลวน +อลหม่าน +อลอร์สตาร์ +อลังการ +อลัชชี +อลิงค์ +อลึ่งฉึ่ง +อลเวง +อล่องฉ่อง +อล่างฉ่าง +อวก +อวกาศ +อวจร +อวชัย +อวชาต +อวด +อวดดี +อวตาร +อวน +อวนลอย +อวนลาก +อวบ +อวมงคล +อวมอำ +อวย +อวยพร +อวยวะ +อวล +อวสาน +อวหาร +อวัยวะ +อวัสดา +อวาจี +อวิจี +อวิชชา +อวิญญู +อวีจิ +อสงไขย +อสนีบาต +อสภ +อสมการ +อสมมตร +อสมมาตร +อสรพิษ +อสังกมทรัพย์ +อสังหาริมทรัพย์ +อสัญ +อสัญกรรม +อสัญญี +อสัญแดหวา +อสัตย์ +อสา +อสาธร +อสาธุ +อสิ +อสิต +อสีต +อสีติ +อสุ +อสุจิ +อสุนี +อสุนีบาต +อสุภ +อสุร +อสุรกาย +อสุรี +อสุเรศ +อสูญ +อสูร +อหังการ +อหิ +อหิงสา +อหิวา +อหิวาตกโรค +ออ +ออก +ออกงาน +ออกซิเจน +ออกซิเดชัน +ออกญา +ออกดอก +ออกดิบ +ออกตัว +ออกทุน +ออกท่า +ออกบวช +ออกปาก +ออกฝี +ออกรส +ออกรับ +ออกลาย +ออกลูก +ออกวัง +ออกัสตา +ออกแขก +ออกแบบ +ออกแรง +ออกโขน +ออกโรง +ออกไซด์ +ออกไฟ +ออด +ออดิโอ +ออดแอด +ออดๆ +ออตตาวา +ออตเทรไลต์ +ออนชอร์ +ออนซอน +ออนซ์ +ออนดีมานด์ +ออนไลน์ +ออปชัน +ออปติคัล +ออปเจ็กต์ +ออฟ +ออฟชอร์ +ออฟฟิศ +ออม +ออมชอม +ออมซอม +ออมฟาไซต์ +ออมสิน +ออมอด +ออมไบ +ออราเคิล +ออร์กนี +ออร์พิเมนต์ +ออร์เซไลต์ +ออร์แกน +ออร์โทเคลส +ออร์ไทต์ +ออลบานี +ออสซี่ +ออสตราล +ออสติน +ออสเตรีย +ออสเตรเลีย +ออสเมียม +ออสโล +ออเงิน +ออเซาะ +ออไจต์ +อะคร้าว +อะความารีน +อะจีน +อะซอร์ส +อะซุนซิโอน +อะซูไรต์ +อะดรีนาลิน +อะดัก +อะดุง +อะดูลาเรีย +อะตอม +อะทาคาไมต์ +อะนอร์โทเคลส +อะนอร์ไทต์ +อะนะ +อะนั้น +อะนาลไซต์ +อะนาลไซม์ +อะนาเทส +อะนี้ +อะพาไทต์ +อะมอร์กอส +อะมีบา +อะราโกไนต์ +อะร้าอร่าม +อะลอร์ +อะลัม +อะลาบาสเทอร์ +อะลาแบนไดต์ +อะลุ่มอล่วย +อะลุ้มอล่วย +อะลูมินัม +อะลูมิเนียม +อะลูไนต์ +อะสา +อะหม +อะอื้อ +อะเกต +อะเคื้อ +อะเซทิลีน +อะเธนส์ +อะเมริเซียม +อะเลกซานไดรต์ +อะเล็กซานเดอร์ +อะเวนจูรีน +อะแจ +อะแลสกา +อะไร +อะไหล่ +อัก +อักกะ +อักข +อักขร +อักขรวิธี +อักขรวิบัติ +อักขรสมัย +อักขระ +อักษร +อักษรโสภณ +อักษะ +อักอ่วน +อักเสบ +อักโข +อักโขภ +อัคคะ +อัคคิ +อัคคี +อัคนิ +อัคนี +อัคร +อัครชายา +อัครมเหสี +อัครราชทูต +อัครสมณทูต +อัง +อังกนะ +อังกฤษ +อังกวด +อังกะลุง +อังกา +อังกาบ +อังการา +อังกุร +อังกุศ +อังกูร +อังก์ +อังคณะ +อังคณา +อังคาร +อังคาส +อังคุฐ +อังฆาต +อังทราย +อังน้ำ +อังรีดูนังต์ +อังรึง +อังศุ +อังศุก +อังส +อังสกุฏ +อังสตรอม +อังสนา +อังสา +อังโกลา +อัจกลับ +อัจจันต์ +อัจจัย +อัจจิ +อัจจุต +อัจฉรา +อัจฉริยบุคคล +อัจฉริยะ +อัจนา +อัชฌา +อัชฌาสัย +อัญ +อัญขยม +อัญชนะ +อัญชลี +อัญชัน +อัญญะ +อัญประกาศ +อัญมณี +อัญรูป +อัญเชิญ +อัฏ +อัฏฐ +อัฏฐะ +อัฏนา +อัฐ +อัฐทิศ +อัฐม +อัฐศก +อัฐฬส +อัฐิ +อัฐิมิญชะ +อัฒ +อัฒจันทร์ +อัฒภาค +อัฒมณฑล +อัฒมาส +อัฒรัตติ +อัณฑ +อัณฑชะ +อัณฑะ +อัณฑาการ +อัณณพ +อัด +อัดฉีด +อัดรูป +อัดลม +อัดแจ +อัดแอ +อัต +อัตคัด +อัตชีวประวัติ +อัตตชีวประวัติ +อัตตะ +อัตตา +อัตตาธิปไตย +อัตถะ +อัตถ์ +อัตนัย +อัตภาพ +อัตรชะ +อัตรา +อัตราส่วน +อัตราเร็ว +อัตลัด +อัตวินิบาตกรรม +อัตหิต +อัตโนมัติ +อัททา +อัทธ +อัทธคต +อัทธคู +อัธยาย +อัธยาศัย +อัน +อันดก +อันดร +อันดรอส +อันดอร์รา +อันดับ +อันดามัน +อันต +อันตก +อันตกร +อันตกาล +อันตกิริยา +อันตคุณ +อันตคุณะ +อันตคู +อันตร +อันตรธาน +อันตรภาค +อันตรา +อันตราย +อันตะ +อันติก +อันติมะ +อันทุ +อันธ +อันธการ +อันธพาล +อันนะ +อันนา +อันวย +อันว่า +อันเดอร์ +อันเต +อันเวส +อันโทล +อับ +อับจน +อับปาง +อับอาย +อับเฉา +อัป +อัปกะ +อัปการ +อัปปะ +อัปภาคย์ +อัปมงคล +อัปยศ +อัประมาณ +อัปราชัย +อัปรีย์ +อัปลักษณ์ +อัปสร +อัปสรสวรรค์ +อัปเปหิ +อัปเปอร์ +อัปเปอร์วอลตา +อัพพุท +อัพภาน +อัพภาส +อัพเกรด +อัพเดต +อัพเดท +อัพโหลด +อัฟกานิสถาน +อัม +อัมพ +อัมพร +อัมพฤกษ์ +อัมพวัน +อัมพวา +อัมพา +อัมพาต +อัมพิล +อัมพุ +อัมพุช +อัมพุท +อัมมัน +อัมสเตอร์ดัม +อัยกะ +อัยกา +อัยการ +อัยกี +อัยยะ +อัยยิกา +อัลจีเรีย +อัลตรา +อัลตราไวโอเลต +อัลบั้ม +อัลบาเนีย +อัลมาอาตา +อัลลอย +อัศจรรย์ +อัศดร +อัศว +อัศวนึก +อัศวิน +อัศวินี +อัศเจรีย์ +อัษฎ +อัษฎมะ +อัษฎางค์ +อัษฎาวุธ +อัส +อัสชัมชัญ +อัสดง +อัสดงคต +อัสดร +อัสนี +อัสสะ +อัสสาสะ +อัสสุ +อัสสุชล +อัสสุธารา +อัสเซนชัน +อั่ว +อั้ก +อั้งยี่ +อั้งโล่ +อั้น +อั๊ก +อั๊ว +อั๋น +อา +อากร +อากรีฮัน +อากัป +อากัปกิริยา +อาการ +อากาศ +อากาศยาน +อากาศอำนวย +อากูล +อาก้า +อาขยาต +อาขยาน +อาคม +อาคันตุกะ +อาคาร +อาคารสงเคราะห์ +อาคเนย์ +อาฆาต +อางขนาง +อาจ +อาจกล่อม +อาจณรงค์ +อาจม +อาจมน +อาจริย +อาจริยวัตร +อาจสามารถ +อาจหาญ +อาจอง +อาจาด +อาจาร +อาจารย์ +อาจารี +อาจิณ +อาชญา +อาชญากร +อาชญากรรม +อาชญากรสงคราม +อาชญาศึก +อาชญาสิทธิ์ +อาชวะ +อาชา +อาชาน +อาชาไนย +อาชีพ +อาชีว +อาชีวก +อาชีวศึกษา +อาชีวะ +อาซอฟ +อาญา +อาญาสิทธิ์ +อาฏานา +อาณัติ +อาณัติสัญญาณ +อาณา +อาณาจักร +อาณานิคม +อาณาประโยชน์ +อาณาเขต +อาด +อาดุร +อาดุลย์ +อาดูร +อาตม +อาตมภาพ +อาตมัน +อาตมา +อาถรรพณ์ +อาถรรพ์ +อาทร +อาทรอุปถัมภ์ +อาทาตา +อาทาน +อาทิ +อาทิตย +อาทิตย์ +อาทีนพ +อาทึก +อาธรรม +อาธาน +อาธาร +อาน +อานก +อานน +อานนท์ +อานะ +อานันท์ +อานัม +อานำ +อานิสงส์ +อานุภาพ +อาบ +อาบัติ +อาบัน +อาบิดจัน +อาบแดด +อาปณกะ +อาปณะ +อาปะ +อาปาน +อาพัด +อาพาธ +อาพิล +อาฟกานิสถาน +อาฟต้า +อาฟริกา +อาภรณ์ +อาภัพ +อาภา +อาภากร +อาภาภิรมย์ +อาภาส +อาม +อามลก +อามัย +อามิษ +อามิส +อาย +อายต +อายตนะ +อายน +อายัด +อายัต +อายัน +อายาน +อายุ +อายุขัย +อายุธ +อายุร +อายุรศาสตร์ +อายุรเวช +อายุรเวท +อายุรแพทย์ +อารดี +อารทรา +อารบิค +อารมณ์ +อารย +อารยชน +อารยชาติ +อารยธรรม +อารยประเทศ +อารยะ +อารยะชาติ +อารยัน +อาระ +อารักขา +อารักษ์ +อารัญ +อารัติ +อารัมภ +อารัมภกถา +อารัมภบท +อารัล +อาราธนา +อาราม +อารามิก +อาราเบีย +อารี +อารีย์ +อารีย์สัมพันธ์ +อารุม +อารู +อาร์กติก +อาร์กอน +อาร์กิวเมนต์ +อาร์คติก +อาร์คันซอ +อาร์ต +อาร์ฟเวดโซไนต์ +อาร์ม +อาร์เจนตินา +อาร์เจนโทไพไรต์ +อาร์เจนไทต์ +อาร์เซนอล +อาร์เซนิก +อาร์เซนิค +อาร์เซโนไพไรต์ +อาร์เซโนไลต์ +อาร์เรย์ +อาลปนะ +อาลปน์ +อาละวาด +อาลักษณ์ +อาลัย +อาลัว +อาลิ +อาลิวเชียน +อาว +อาวรณ์ +อาวาส +อาวาหะ +อาวุต +อาวุธ +อาวุโส +อาศรม +อาศรมบท +อาศัย +อาศิร +อาศิรวาท +อาศุ +อาษา +อาษาฒ +อาสน +อาสนะ +อาสน์ +อาสัญ +อาสา +อาสาฬห +อาสาฬหบูชา +อาสาฬห์ +อาสิน +อาสูร +อาหนี +อาหนู +อาหม +อาหร +อาหรับ +อาหล่า +อาหาร +อาหุดี +อาฬหก +อาเขต +อาเขย +อาเจียน +อาเชี่ยน +อาเซียน +อาเด๊ะ +อาเทศ +อาเพศ +อาเมน +อาเวค +อาเวศ +อาเศียร +อาเศียรวาท +อาเหต +อาแคนไทต์ +อาแสะ +อาโลก +อาไบอาง +อำ +อำนด +อำนนต์ +อำนรรฆ +อำนวนสงคราม +อำนวย +อำนวยผล +อำนวยวิทย์ +อำนวยศิลป์ +อำนาจ +อำนาจเจริญ +อำนาถ +อำนิฐ +อำปลัง +อำพน +อำพราง +อำพะนำ +อำพัน +อำมร +อำมฤต +อำมหิต +อำมาตย์ +อำยวน +อำรุง +อำลา +อำอวม +อำเภอ +อำแดง +อำไพ +อิก +อิง +อิงค์ +อิงค์เจ็ต +อิงอร +อิงแอบ +อิจฉริย +อิจฉา +อิฉัน +อิชยา +อิฏฐ +อิฏฐารมณ์ +อิฐ +อิฐผล +อิณ +อิด +อิดดิงไซต์ +อิดออด +อิดโรย +อิตถี +อิตาลี +อิตาเลียน +อิตเทรียม +อิตเทอร์เบียม +อิทธิ +อิทธิพล +อิทธิฤทธิ์ +อิทะกะ +อิน +อินซูลิน +อินดิโคไลต์ +อินทนิล +อินทผลัม +อินทร +อินทรธนู +อินทรพิทักษ์ +อินทรวงศ์ +อินทรวิหาร +อินทรวิเชียร +อินทรา +อินทราราม +อินทราเน็ต +อินทรี +อินทรียสังวร +อินทรีย์ +อินทร์ +อินทร์บุรี +อินทามระ +อินทุ +อินท์ +อินธน์ +อินน์ +อินพุต +อินฟราเรด +อินฟอร์มิก +อินัง +อินเดีย +อินเดียนา +อินเดียนาโปลิส +อินเดียนแดง +อินเดียม +อินเตอร์ +อินเตอร์เน็ต +อินเตอร์เฟส +อินเทล +อินเทอร์เน็ต +อินเทอร์เบียม +อินเทอร์เฟส +อินโดนีเซีย +อิมบรอส +อิมพอร์ต +อิมพีเรียล +อิมัลชัน +อิมเมจ +อิยิปต์ +อิรัก +อิริยา +อิริยาบถ +อิริเดียม +อิลลินอยส์ +อิลู +อิลเมไนต์ +อิลไลต์ +อิวีซา +อิศร +อิศวร +อิษฏี +อิษฏ์ +อิส +อิสตรี +อิสร +อิสรภาพ +อิสระ +อิสราเอล +อิสริย +อิสริยยศ +อิสริยะ +อิสริยาภรณ์ +อิสลาม +อิสลามาบัด +อิสสา +อิสิ +อิสี +อิสเกีย +อิหม่าม +อิหร่าน +อิหลักอิเหลื่อ +อิเซตัน +อิเทอร์ +อิเล็กตรอน +อิเล็กทรอนิกส์ +อิเล็กโทน +อิเหนา +อิ่ม +อิ่มใจ +อี +อีก +อีกชุก +อีกา +อีก้อ +อีก๋อย +อีก๋า +อีคอมเมิร์ซ +อีจิไรต์ +อีจู้ +อีฉัน +อีตาล +อีถ่าง +อีทุก +อีนาร์ไจต์ +อีนุงตุงนัง +อีนูน +อีบึ้ง +อีมู +อียิปต์ +อีรม +อีริไทรต์ +อีรุ้ง +อีลอง +อีลิวเธอรา +อีลุ่ยฉุยแฉก +อีลุ้ม +อีศ +อีศวร +อีส +อีสป +อีสา +อีสาน +อีสุกอีใส +อีหรอบ +อีหลี +อีเก้ง +อีเจียน +อีเดไนต์ +อีเต้อ +อีเทอร์ +อีเป็ด +อีเป้า +อีเพา +อีเมล +อีเมล์ +อีเลกทรัม +อีเหละเขะขะ +อีเห็น +อีแก +อีแก่ +อีแก้ +อีแปะ +อีแล่ง +อีแอ่น +อีโก้ง +อีโก๊ะ +อีโต้ +อีโน +อีโปง +อีโลง +อีโหลกโขลกเขลก +อี่ +อี้ +อี๊ด +อี๋ +อี๋อ๋อ +อึ +อึก +อึกทึก +อึกอัก +อึง +อึงมี่ +อึงรึง +อึงอล +อึด +อึดอัด +อึดใจ +อึน +อึมบาบาน +อึ่ง +อึ้ง +อึ้ดทึ่ด +อึ๊ก +อืด +อืดอาด +อือ +อือออ +อื่น +อื้น +อื้อ +อุ +อุก +อุกกา +อุกกาบาต +อุกฉกรรจ์ +อุกฤษฏ์ +อุกลา +อุกอาจ +อุค +อุคห +อุจ +อุจจาร +อุจจาระ +อุจฉุ +อุจาด +อุจเฉท +อุชุ +อุซุมบูรา +อุซเบกีสถาน +อุฌากรรณ +อุฏฐาการ +อุณห +อุณหภูมิ +อุณหะ +อุณหาการ +อุณหิส +อุณา +อุณาโลม +อุด +อุดม +อุดมการณ์ +อุดมคติ +อุดมยศ +อุดมศึกษา +อุดมสุข +อุดมเกียรติ +อุดร +อุดรธานี +อุดหนุน +อุดอู้ +อุดเตา +อุตดม +อุตดร +อุตตมะ +อุตบล +อุตพิด +อุตรดิตถ์ +อุตรา +อุตริ +อุตลุด +อุตสาห +อุตสาหกรรม +อุตสาหกรรมศิลป์ +อุตสาหะ +อุตส่าห์ +อุตุ +อุตุนิยมวิทยา +อุท +อุทก +อุทกภัย +อุทกวิทยา +อุทกศาสตร์ +อุททาม +อุทธรณ์ +อุทธัจ +อุทบาตร +อุทบาน +อุทยาน +อุทร +อุทลุม +อุทัช +อุทัย +อุทัยธานี +อุทัยธาราม +อุทัยรัตน์ +อุทาน +อุทาร +อุทาหรณ์ +อุทิศ +อุทุมพร +อุทุมพรพิสัย +อุธัจ +อุบ +อุบล +อุบลรัตน์ +อุบลราชธานี +อุบอิบ +อุบะ +อุบัติ +อุบัติภัย +อุบัติเหตุ +อุบาท +อุบาทว์ +อุบาย +อุบาสก +อุบาสิกา +อุบ๊ะ +อุป +อุปกรณ์ +อุปกรม +อุปการ +อุปการะ +อุปการี +อุปกิเลส +อุปจาร +อุปถัมภก +อุปถัมภ์ +อุปทม +อุปทาน +อุปทูต +อุปธิ +อุปนัย +อุปนายก +อุปนิสัย +อุปบล +อุปมัย +อุปมา +อุปมาน +อุปรากร +อุปราช +อุปริ +อุปริม +อุปสงค์ +อุปสมบท +อุปสรรค +อุปสัมปทา +อุปฮาด +อุปัชฌายะ +อุปัชฌาย์ +อุปัฏฐาก +อุปัฏฐานะ +อุปัทว +อุปัทวันตราย +อุปาณ +อุปาทาน +อุปเทศ +อุปโภค +อุปโยค +อุปโลกน์ +อุปไมย +อุภัย +อุมงค์ +อุย +อุยยาน +อุยยาม +อุยโยค +อุร +อุรค +อุรณ +อุรพี +อุรส +อุระ +อุรังอุตัง +อุรา +อุรุ +อุลป +อุลปนะ +อุลามก +อุลิด +อุลูก +อุลโลจ +อุวะ +อุษณ +อุษณกร +อุษณีย์ +อุษม +อุษา +อุสภ +อุสวะ +อุสา +อุสุ +อุสุภ +อุสุม +อุหรับ +อุหลบ +อุฬาร +อุเทกะ +อุเทศ +อุเบกขา +อุเหตุ +อุเหม่ +อุแว้ +อุโฆษ +อุโบสถ +อุโมงค์ +อุโลก +อุไร +อุไรศิลป์ +อุ่น +อุ่นอนุสรณ์ +อุ่ย +อุ้ง +อุ้งมือ +อุ้งเท้า +อุ้ม +อุ้มชู +อุ้มผาง +อุ้มสม +อุ้ย +อุ้ยอ้าย +อุ๊ย +อู +อูฐ +อูด +อูนนิลควอเดียม +อูนนิลอูเนียม +อูนนิลเทรียม +อูนนิลเบียม +อูนนิลเพนเทียม +อูนนิลเฮกเซียม +อูม +อูย +อูราไลต์ +อูรุ +อูลานบาตอร์ +อูวาโรไวต์ +อูอากาดูกู +อู่ +อู่ทอง +อู่ทองนอก +อู่ทองใน +อู่น้ำ +อู่ลอย +อู้ +อู้อี้ +อู๋อี๋ +อเจลก +อเจละ +อเนก +อเนกคุณ +อเนกประสงค์ +อเนจอนาถ +อเปหิ +อเมริกัน +อเมริกา +อเมริกาเหนือ +อเมริกาใต้ +อเวจี +อเส +อเสกข +อเสกขะ +อเสข +อแดปเตอร์ +อโฆษะ +อโณทัย +อโนชา +อโนดาต +อโลภะ +อโลหะ +อโศก +อโหสิ +อโหสิกรรม +อ็อบเจ็กต์ +อ็อพชัน +อ่วม +อ่อง +อ่อน +อ่อนข +อ่อนนุช +อ่อนน้อม +อ่อนหัด +อ่อนหู +อ่อนอนุโลม +อ่อนเพลีย +อ่อนแอ +อ่อนใจ +อ่อม +อ่อย +อ่า +อ่าง +อ่างทอง +อ่างล้างหน้า +อ่างอาบน้ำ +อ่าน +อ่าว +อ่าวลึก +อ่ำ +อ้น +อ้ม +อ้วก +อ้วน +อ้วนพี +อ้อ +อ้อน +อ้อนวอน +อ้อนออด +อ้อนแอ้น +อ้อม +อ้อมค้อม +อ้อมอก +อ้อย +อ้อยส้อย +อ้อยอิ่ง +อ้อแอ้ +อ้า +อ้าง +อ้างว้าง +อ้างอิง +อ้าซ่า +อ้าย +อ้าว +อ้ำอึ้ง +อ๊อด +อ๊ะ +อ๋อ +อ๋อง +อ๋อย +ฮกเกี้ยน +ฮวงซุ้ย +ฮวงโห +ฮวงไฮ +ฮวน +ฮวนนั้ง +ฮวนเฟอร์นันเดซ +ฮวบ +ฮวบฮาบ +ฮอกกี้ +ฮอกไกโด +ฮองเฮา +ฮอด +ฮอต +ฮอตดอก +ฮอนชู +ฮอนดูรัส +ฮอนโด +ฮอนโนลูลู +ฮอยน์ +ฮอยไนต์ +ฮอร์นเบลนด์ +ฮอร์โมน +ฮอลลีวู้ด +ฮอลันดา +ฮอลิวีน +ฮอลแลนด์ +ฮอส +ฮะ +ฮะฮ้าย +ฮะไฮ้ +ฮัก +ฮังการี +ฮังเล +ฮัม +ฮัลโล่ +ฮั่น +ฮั่นแ +ฮั้ว +ฮา +ฮานอย +ฮาป่า +ฮาม +ฮาราคิรี +ฮาราเร +ฮาร์ด +ฮาร์ดดิสก์ +ฮาร์ดดิสค์ +ฮาร์ดแวร์ +ฮาร์ตฟอร์ด +ฮาลลอยไซต์ +ฮาล์ฟ +ฮาวานา +ฮาวาย +ฮาห์เนียม +ฮาเร็ม +ฮาโลวีน +ฮิ +ฮิดเดไนต์ +ฮิต +ฮินดู +ฮิปปี้ +ฮิปโป +ฮิปโปโปเตมัส +ฮิวมัส +ฮิวแลนไดต์ +ฮิสทีเรีย +ฮิสแปนิโอลา +ฮีบรู +ฮีมาไทต์ +ฮีลิโอโทรป +ฮีเลียม +ฮีโร่ +ฮึ +ฮึก +ฮึกหาญ +ฮึกห้าว +ฮึกฮัก +ฮึกเหิม +ฮึกโหม +ฮึด +ฮึดฮัด +ฮึม +ฮึย +ฮึ่ม +ฮึ่ย +ฮืด +ฮืดฮาด +ฮือ +ฮื่อ +ฮื้อ +ฮุด +ฮุบ +ฮุยเลฮุย +ฮูก +ฮูม +ฮูลา +ฮู้ +ฮ่วย +ฮ่อ +ฮ่องกง +ฮ่องเต้ +ฮ่อม +ฮ่อมดง +ฮ่ะฮ่า +ฮ่า +ฮ้อ +ฮ้า +ฮ้าไฮ้ +ฯพณฯ +ฯลฯ +เก +เกก +เกกมะเหรก +เกงกอย +เกงเขง +เกจิ +เกจิอาจารย์ +เกจ์ +เกชา +เกณฑ์ +เกด +เกตุ +เกตุนุติ +เกตเวย์ +เกทับ +เกน +เกนๆ +เกม +เกมส์ +เกย +เกยลา +เกยูร +เกย์ +เกรง +เกรงใจ +เกรด +เกรน +เกรนาดา +เกรอะ +เกราะ +เกริก +เกริน +เกริ่น +เกรียก +เกรียง +เกรียงศักดิ์ +เกรียด +เกรียน +เกรียบ +เกรียม +เกรียว +เกรี้ยว +เกรเฮานด์ +เกร็ง +เกร็ด +เกร่อ +เกลศ +เกลอ +เกลา +เกลาะ +เกลียง +เกลียด +เกลียว +เกลี่ย +เกลี้ย +เกลี้ยง +เกลือ +เกลือก +เกลือกรด +เกลือจืด +เกลือด่าง +เกลือปรกติ +เกลือหิน +เกลือเงิน +เกลือเบสิก +เกลือแกง +เกลื่อน +เกลื้อ +เกลื้อน +เกล็ด +เกล้า +เกล้ากระผม +เกล้าฯ +เกวัฎ +เกวียน +เกศ +เกศพ +เกศริน +เกศา +เกศากันต์ +เกศินิ +เกศินี +เกศี +เกษตร +เกษตรกร +เกษตรกรรม +เกษตรวิสัย +เกษตรศาสตร์ +เกษตรสมบูรณ์ +เกษม +เกษมศานต์ +เกษมสันต์ +เกษา +เกษี +เกษียณ +เกษียน +เกษียร +เกส +เกสร +เกสรี +เกสา +เกสี +เกอร์ +เกอร์นซี +เกอิชา +เกอไทต์ +เกะ +เกะกะ +เกา +เกาต์ +เกาทัณฑ์ +เกาบิน +เกาบิล +เกามาร +เกาลัด +เกาลิน +เกาหลี +เกาหลีเหนือ +เกาหลีใต้ +เกาะ +เกาะคา +เกาะตะ +เกาะพะงัน +เกาะยาว +เกาะลันตา +เกาะสมุย +เกาะสีชัง +เกาเหลา +เกาไศย +เกิง +เกิด +เกิดสุข +เกิน +เกิบ +เกิ้ง +เกีย +เกียง +เกียจ +เกียจคร้าน +เกียด +เกียน +เกียรติ +เกียรติคุณ +เกียรติชัย +เกียรตินิยม +เกียรติประวัติ +เกียรติภูมิ +เกียรติยศ +เกียรติศักดิ์ +เกียรติ์ +เกียร์ +เกี่ยง +เกี่ยว +เกี่ยวข้อง +เกี้ยมอี๋ +เกี้ยมไฉ่ +เกี้ยว +เกี๊ยว +เกี๊ยะ +เกี๋ยง +เกือก +เกือบ +เกื้อ +เกื้อกูล +เกุต +เกเร +เกไล +เก็ง +เก็งชวน +เก็จ +เก็ด +เก็บ +เก็บงำ +เก็บตก +เก่ +เก่ง +เก่งกาจ +เก่น +เก่า +เก้กัง +เก้ง +เก้งก้าง +เก้อ +เก้า +เก้าอี้ +เก้าเลี้ยว +เก๊ +เก๊ก +เก๊กฮวย +เก๊าท์ +เก๋ +เก๋ง +เก๋า +เข +เขก +เขจร +เขดา +เขต +เขตแดน +เขน +เขนง +เขนย +เขน็ด +เขบ็จขบวน +เขบ็ต +เขม +เขมทัต +เขมร +เขมราฐ +เขมะสิริอนุสรณ์ +เขมา +เขมือบ +เขม็ง +เขม็ดแขม่ +เขม่น +เขม่า +เขม้น +เขย +เขยก +เขยตาย +เขยิน +เขยิบ +เขยื้อน +เขย่ง +เขย่า +เขย้อแขย่ง +เขรอะ +เขลง +เขลอะ +เขละ +เขลา +เขลาะ +เขว +เขษตร +เขษม +เขษียร +เขฬะ +เขะขะ +เขา +เขาชัยสน +เขาดินวนา +เขาพนม +เขามอ +เขาย้อย +เขาวง +เขาสมิง +เขิน +เขียง +เขียด +เขียน +เขียม +เขียว +เขียวไข่กา +เขี่ย +เขี้ยว +เขี้ยวหนุมาน +เขือ +เขื่อง +เขื่องใน +เขื่อน +เข็ง +เข็ญ +เข็ญใจ +เข็ด +เข็น +เข็ม +เข็มขัด +เข่ง +เข่น +เข่า +เข่าลา +เข้ +เข้ม +เข้า +เข้าขา +เข้าคอ +เข้าที +เข้าปก +เข้าผี +เข้ายา +เข้าหา +เข้าหู +เข้าใจ +เข้าไป +เคคอส +เคจฉ +เคณฑะ +เคด +เคน +เคนทักกี +เคนยา +เคบิน +เคปเทาน์ +เคปเบรตัน +เคปเวอร์ด +เคมิคอล +เคมี +เคมีนินทรีย์ +เคมีภัณฑ์ +เคมีอินทรีย์ +เคย +เคยชิน +เคยตัว +เคยปาก +เคยมือ +เครง +เครดิต +เครดิตฟองซิเอร์ +เครน +เครา +เคราหณี +เคราะห์ +เครียด +เครียว +เครือ +เครือจักรภพ +เครือรัฐ +เครือวัลย์ +เครื่อง +เครื่องกล +เครื่องควบแน่น +เครื่องจักร +เครื่องตั้ง +เครื่องต้น +เครื่องปั้นดินเผา +เครื่องพิมพ์ +เครื่องยนต์ +เครื่องราง +เครื่องร่อน +เครื่องหมาย +เครื่องหมายการค้า +เครื่องเครา +เคร่ง +เคร่งขรึม +เคร่งครัด +เคร่งเครียด +เคร่า +เคลม +เคลิบเคลิ้ม +เคลิ้ม +เคลีย +เคลียร์ +เคลือบ +เคลือบฟัน +เคลื่อน +เคลื่อนที่ +เคลื่อนไหว +เคล็ด +เคล้ง +เคล้น +เคล้า +เคว้ง +เคว้งคว้าง +เคส +เคห +เคหวิตถ์ +เคหศาสตร์ +เคหสถาน +เคหะ +เคหะสถาน +เคหา +เคหเศรษฐศาสตร์ +เคอร์กิสถาน +เคอร์ซูไทต์ +เคอร์ฟิว +เคอร์เคนนา +เคอร์เซอร์ +เคอร์เนล +เคอะ +เคอะเ +เคอะเขิน +เคา +เคาน์เตอร์ +เคารพ +เคาะ +เคาไอ +เคิร์ฟ +เคียง +เคียด +เคียดแค้น +เคียน +เคียนชา +เคียม +เคียร +เคียว +เคียวรี +เคี่ยม +เคี่ยว +เคี่ยวเข็ญ +เคี้ย +เคี้ยว +เคือง +เคื้อ +เคเบิล +เคโอลิน +เคโอลิไนต์ +เค็นโด้ +เค็ม +เค้ก +เค้ง +เค้น +เค้า +เค้าโครง +เค้เก้ +เฆี่ยน +เงก +เงย +เงอะ +เงอะงะ +เงา +เงามัว +เงามืด +เงาะ +เงาๆ +เงิน +เงินปันผล +เงินปี +เงินผ่อน +เงินฝืด +เงินสด +เงินสเตอร์ลิง +เงินเฟ้อ +เงินเยอรมัน +เงินแป +เงินได้กำบัง +เงียบ +เงียบกริบ +เงียบเชียบ +เงียบเหงา +เงี่ย +เงี่ยง +เงี่ยน +เงี่ยหู +เงี้ยว +เงือก +เงือด +เงือน +เงือบ +เงื่อง +เงื่อน +เงื่อนงำ +เงื่อนไข +เงื้อ +เงื้อม +เง็น +เง่า +เง้ +เง้า +เจ +เจด +เจดียสถาน +เจดีย์ +เจต +เจตคติ +เจตจำนง +เจตนา +เจตนารมณ์ +เจตภูต +เจตสิก +เจติย +เจน +เจนจบ +เจนจัด +เจนเติลแมน +เจนเนอราล +เจนใจ +เจฟเฟอร์สันซิตี +เจม +เจมซอไนต์ +เจมส์ +เจรจา +เจราจา +เจริญ +เจริญกรุง +เจริญกรุงประชารักษ์ +เจริญทรัพย์ +เจริญนคร +เจริญผล +เจริญพร +เจริญพัฒนา +เจริญรัถ +เจริญวัย +เจริญศิลป์ +เจริญสุข +เจริญเมือง +เจริญใจ +เจริด +เจรียง +เจลียง +เจว็ด +เจษฎา +เจอ +เจอรัลด์ +เจอร์ +เจอร์ซี +เจอร์เมเนียม +เจอร์เรเนียม +เจอะ +เจา +เจาะ +เจาะจง +เจิด +เจิม +เจิร์ม +เจิ่ง +เจิ่น +เจียง +เจียด +เจียน +เจียม +เจียร +เจียระไน +เจียว +เจี๊ยบ +เจี๊ยว +เจี๊ยวจ๊าว +เจี๋ยน +เจี๋ยมเจี้ยม +เจือ +เจือปน +เจือสม +เจื่อน +เจื้อย +เจไดต์ +เจ็ด +เจ็บ +เจ็บใจ +เจ่ง +เจ่อ +เจ่า +เจ้า +เจ้ากู +เจ้าของ +เจ้าขา +เจ้าข้า +เจ้าค่ะ +เจ้าชู้ +เจ้าพระยา +เจ้าพระยาวิทยาคม +เจ้าพระยาสยาม +เจ้ามูล +เจ้ายศ +เจ้าอาม +เจ๊ +เจ๊ก +เจ๊ง +เจ๊ต +เจ๊สัว +เจ๊า +เจ๋ง +เจ๋อ +เฉ +เฉก +เฉด +เฉท +เฉนียน +เฉพาะ +เฉย +เฉยชา +เฉยพ่วง +เฉยเมย +เฉยๆ +เฉลย +เฉลว +เฉลา +เฉลิม +เฉลิมพระเกียรติ +เฉลียง +เฉลียบ +เฉลียว +เฉลี่ย +เฉวียง +เฉวียน +เฉอะ +เฉอะแฉะ +เฉา +เฉาก๊วย +เฉาะ +เฉาะๆ +เฉาโฉด +เฉิด +เฉิบ +เฉิ่ม +เฉียง +เฉียด +เฉียบ +เฉียบพลัน +เฉียว +เฉียวฉุน +เฉี่ยว +เฉือน +เฉื่อย +เฉื่อยๆ +เฉโก +เฉไฉ +เฉ่ง +เชงเลง +เชด +เชตแลนด์ +เชน +เชฟ +เชย +เชยชม +เชรา +เชราะ +เชริด +เชลง +เชลฟ์ +เชลย +เชลล์ +เชลียง +เชลแล็ก +เชวง +เชษฐ +เชษฐนี +เชษฐภคินี +เชษฐภาตา +เชษฐราช +เชษฐา +เชสซิไลต์ +เชอ +เชอราตัน +เชอร์บา +เชอร์มาไคต์ +เชอร์เบท +เชาวน์ +เชาวน์ดี +เชาว์ +เชิง +เชิงกราน +เชิงกล +เชิงซ้อน +เชิงมุม +เชิงอรรถ +เชิงเดียว +เชิงเดี่ยว +เชิงไพเราะ +เชิญ +เชิด +เชิดชู +เชิร์ต +เชิ้ต +เชีย +เชียง +เชียงกลาง +เชียงของ +เชียงคาน +เชียงคำ +เชียงดาว +เชียงม่วน +เชียงยืน +เชียงราย +เชียงแสน +เชียงใหม่ +เชียบ +เชียร +เชียรใหญ่ +เชียร์ +เชียว +เชี่ยน +เชี่ยม +เชี่ยว +เชี่ยวชาญ +เชี้ย +เชือก +เชือด +เชือน +เชื่อ +เชื่อง +เชื่อม +เชื่อมสัมพันธ์ +เชื่อเพลิง +เชื้อ +เชื้อหมัก +เช็กโกสโลวะเกีย +เช็ค +เช็ด +เช่น +เช่า +เช้ง +เช้งวับ +เช้า +เซ +เซกชัน +เซกซี่ +เซกซ์ +เซกา +เซกเมนท์ +เซงหลี +เซซัง +เซด +เซต +เซน +เซนจูรี +เซนติกรัม +เซนติลิตร +เซนติเกรด +เซนติเมตร +เซนต์ +เซนต์คริสโตเฟอร์ +เซนต์คาเบรียล +เซนต์จอห์น +เซนต์พอล +เซนต์ลูเซีย +เซนต์วินเซนต์ +เซนต์หลุยส์ +เซนต์เฮเลนา +เซนต์เฮเลียร์ +เซนต์แมตธิว +เซนต์โธมัส +เซนต์โยเซฟ +เซนทรัล +เซนท์ +เซนสิทิฟ +เซนส์ +เซนเซอร์ +เซนเตอร์ +เซนเตอร์ฮาล์ฟ +เซบู +เซปัก +เซปักตระกร้อ +เซฟ +เซฟตี้ +เซมิโคลอน +เซมิไฟนอล +เซรัสไซต์ +เซรา +เซรามิค +เซราร์จีไรต์ +เซราะ +เซริฟอส +เซรุ่ม +เซล +เซลลูลอยด์ +เซลลูโลส +เซลล์ +เซลล์ทุติยภูมิ +เซลล์ปฐมภูมิ +เซลส์ +เซลีเบส +เซลเซียส +เซสชัน +เซอ +เซอร์ +เซอร์คอน +เซอร์คิท +เซอร์ติฟิเกท +เซอร์ราวนด์ +เซอร์วิส +เซอร์เพนทีน +เซอร์เวย์ +เซอร์โคเนียม +เซอร์ไพรส์ +เซอะ +เซอะซะ +เซอูล +เซา +เซาวนา +เซาะ +เซาแธมป์ตัน +เซิง +เซิร์ฟเล็ต +เซิร์ฟเวอร์ +เซิ้ง +เซียน +เซียบ +เซียมซี +เซียราเลโอน +เซียว +เซี่ยงไฮ้ +เซี่ยน +เซี่ยว +เซื่อง +เซเชลส์ +เซเนกัล +เซเบิล +เซเลสไทต์ +เซเลไนต์ +เซแคนต์ +เซ็ก +เซ็กซี่ +เซ็กซ์ +เซ็กเมนต์ +เซ็ง +เซ็งลี้ +เซ็น +เซ็นต์ยอร์ช +เซ็นทรัล +เซ็นเซอร์ +เซ็นเตอร์ +เซ่ง +เซ่งจี๊ +เซ่น +เซ่อ +เซ้ง +เซ้าซี้ +เฌอ +เฌอเอม +เฒ่า +เณร +เดก +เดกซ์โทรส +เดคคอร์ +เดคา +เดคากรัม +เดคาลิตร +เดคาเมตร +เดคเคอร์เรท +เดช +เดชน์ +เดชอุดม +เดชะ +เดชา +เดชานุภาพ +เดซิ +เดซิกรัม +เดซิลิตร +เดซิเมตร +เดด +เดดซี +เดดไลน์ +เดต้า +เดท +เดน +เดนตาย +เดนทอล +เดนทิสต์ +เดนมาร์ก +เดนมาร์ค +เดนเวอร์ +เดบิต +เดมอยน์ +เดย์ +เดรน +เดรัจฉาน +เดลต้า +เดลล์ +เดลาแวร์ +เดลิ +เดวิด +เดสก์ทอป +เดอะ +เดอะมอลล์ +เดา +เดาสวด +เดาะ +เดิน +เดินนา +เดินรถ +เดินหน +เดิม +เดิมท +เดิมที +เดิมบางนางบวช +เดิ่น +เดีย +เดียง +เดียด +เดียร +เดียรดาษ +เดียรถีย์ +เดียรถ์ +เดียรัจฉาน +เดียว +เดียวกัน +เดียะ +เดี่ยว +เดี้ย +เดี๋ยว +เดือก +เดือด +เดือดดาล +เดือน +เดือย +เดื่อ +เดื่อง +เดโช +เดโชชัย +เดโชพล +เด็ก +เด็กชา +เด็จ +เด็ด +เด่ +เด่น +เด่นชัย +เด่า +เด้ง +เด้า +เด้าลม +เด๋อ +เด๋อด๋า +เต +เตก +เตกูซิกัลปา +เตช +เตชะวณิช +เตตรา +เตนิมบาร์ +เตย +เตรน +เตรนตัน +เตริง +เตรียด +เตรียบ +เตรียม +เตรียมทหาร +เตร็ด +เตร่ +เตละ +เตลิด +เตว็ด +เตหะราน +เตอร์ +เตอร์กี +เตอร์กเมนิสถาน +เตอะ +เตะ +เตะฉาก +เตะตา +เตา +เตาปูน +เตาผิง +เตาฟู่ +เตารีด +เตาสูบ +เตาะแตะ +เตาไฟ +เติบ +เติบโต +เติม +เติร์ก +เติ่ง +เตียง +เตียน +เตียบ +เตียว +เตี่ย +เตี่ยว +เตี้ย +เตี้ยม +เตี๊ยม +เตี๋ยม +เตือน +เตื้อ +เตเนรีฟ +เตโชธาตุ +เต็ง +เต็นท์ +เต็ม +เต็มตา +เต็มที +เต็มบาท +เต็มยศ +เต็มหู +เต็มอก +เต็มใจ +เต่ง +เต่อ +เต่า +เต่าดำ +เต่านา +เต่าหก +เต้น +เต้นรำ +เต้า +เต้าทึง +เต้ารับ +เต้าส่วน +เต้าหู้ +เต้าหู้ยี้ +เต้าฮวย +เต้าเจี้ยว +เต้าเสียบ +เต๊ก +เต๊ะ +เต๊าะ +เต๋า +เถกิง +เถน +เถมิน +เถย +เถยจิต +เถยยะ +เถยสังวาส +เถร +เถรตรง +เถรวาท +เถระ +เถรานุเถระ +เถรี +เถล +เถลิก +เถลิง +เถลิงฉัตร +เถลือกถลน +เถลไถล +เถอะ +เถะๆ +เถา +เถาคัน +เถาดาน +เถามวก +เถามุ้ย +เถาวัลย์ +เถาวัลลิ์ +เถาะ +เถิก +เถิง +เถิด +เถิดเทิง +เถิน +เถียง +เถียร +เถือ +เถือก +เถื่อน +เถ่อ +เถ้า +เถ้าแก่ +เท +เทกซัส +เทกซ์ +เทคนิค +เทคนิคกรุงเทพ +เทคนิควิทยา +เทคนิคสัจจะวัฒน์ +เทคนิคไทยสุริยะ +เทคนีเชียม +เทคนีเซียม +เทครัว +เทคโนฯ +เทคโนโลยี +เทคโอเวอร์ +เทง +เททราฮิไดรต์ +เทนนิส +เทนส์ +เทนอไรต์ +เทนเนสซี +เทนแนนไทต์ +เทป +เทปูน +เทพ +เทพดา +เทพทวี +เทพธารินทร์ +เทพธิดา +เทพนม +เทพนารี +เทพนิยม +เทพนิยาย +เทพนิยายวิทยา +เทพบดี +เทพประทาน +เทพพนม +เทพพนา +เทพพยากรณ์ +เทพย +เทพยดา +เทพยเจ้า +เทพลีลา +เทพวิทยา +เทพศิรินทร์ +เทพสถิต +เทพหัสดิน +เทพา +เทพากร +เทพารักษ์ +เทพิน +เทพินทร์ +เทพี +เทพเจ้า +เทพเสนานุสรณ์ +เทพไพเราะนิมิต +เทมปุระ +เทมเพลต +เทมเพลท +เทมโป +เทมโป้ +เทรด +เทรดจิดี้ +เทรดดิชัน +เทรดมาร์ค +เทรดเดอร์ +เทรน +เทรนเนอร์ +เทริด +เทรโมไลต์ +เทลคอม +เทลลูเรียม +เทว +เทวดา +เทวทัณฑ์ +เทวทูต +เทวธรรม +เทวธิดา +เทวนะ +เทวนิยม +เทวระ +เทวรัตน์ +เทวรูป +เทววิทยา +เทวศ +เทวษ +เทวสถาน +เทวสุนทร +เทวอ +เทวะ +เทวัญ +เทวัน +เทวารัณย์ +เทวาลัย +เทวี +เทวโลก +เทศ +เทศก +เทศกาล +เทศนา +เทศน์ +เทศบัญญัติ +เทศบาล +เทศมนตรี +เทศะ +เทศาภิบาล +เทสต์ +เทสท์ +เทห +เทหวัตถุ +เทห์ +เทห์ฟากฟ้า +เทอญ +เทอดไทย +เทอม +เทอร์คอยส์ +เทอร์เนต +เทอร์เบียม +เทอร์เรส +เทอร์โบ +เทอร์โมมิเตอร์ +เทอะทะ +เทา +เทาน์ +เทาะห์ +เทาเวอร์ +เทิก +เทิง +เทิด +เทิดทูน +เทิน +เทิบ +เทิ่ง +เทิ้ม +เทียง +เทียน +เทียนถวิล +เทียนฟ้ามูลนิธิ +เทียนเซี้ยง +เทียนไข +เทียบ +เทียม +เทียมร่วมมิตร +เทียร +เทียรฆ +เทียว +เที่ยง +เที่ยว +เที้ยน +เทือ +เทือก +เทือน +เทื่อ +เทื้อ +เทเบิล +เทเลกราฟ +เทเลคอม +เทเลวิชัน +เทเลสโคป +เทเลโฟน +เทเวศ +เทเวศร์ +เทเวศวร์ +เทโพ +เท็กซ์ +เท็จ +เท่ +เท่ห์ +เท่อ +เท่า +เท่ากับ +เท่านั้น +เท่าใด +เท่าไร +เท้ง +เท้งเต้ง +เท้อ +เท้า +เธนุ +เธรด +เธอ +เธียร +เธียรสวนนิเวศน์ +เธียเตอร์ +เนกขะ +เนกขัม +เนกรอส +เนกาทีฟ +เนคไท +เนชั่นแนล +เนต +เนตบอล +เนตร +เนตสเคป +เนติ +เนติศึกษา +เนตเวอร์ค +เนบิวลา +เนปจูน +เนปทูเนียม +เนปาล +เนฟิลีน +เนมิ +เนมิตก +เนมิตกะ +เนย +เนยใส +เนรคุณ +เนรนาด +เนรนาถ +เนรมิต +เนรมิตร +เนรเทศ +เนวาดา +เนษาท +เนสท์เล่ +เนอ +เนา +เนาว +เนิน +เนินมะปราง +เนิบ +เนิบๆ +เนิ่น +เนีย +เนียง +เนียน +เนียม +เนียมยันต์ +เนียร +เนือง +เนือย +เนื่อง +เนื่องจาก +เนื้อ +เนื้อที่ +เนื้อหา +เนื้อเยื่อ +เนื้อเยื่อกล้ามเนื้อ +เนื้อเยื่อบุผิว +เนื้อเยื่อประสาท +เนื้อเยื่อยืดต่อ +เนเจอร์ +เนเธอร์แลนด์ +เนแบรสกา +เนโทรไลต์ +เนไฟรต์ +เน็ต +เน็ตเวิร์ก +เน็ตเวิร์ค +เน่ง +เน่า +เน่าไฟ +เน้น +เน้อ +เบคกิ้งโซดา +เบคอน +เบงกอล +เบญจ +เบญจก +เบญจกัลยาณี +เบญจกามคุณ +เบญจคัพย์ +เบญจธรรม +เบญจบรรพต +เบญจพรรณ +เบญจพล +เบญจม +เบญจมบพิตร +เบญจมราชานุสรณ์ +เบญจมาศ +เบญจมิตร +เบญจมินทร์ +เบญจรงค์ +เบญจราช +เบญจวรรณ +เบญจศก +เบญจศีล +เบญจา +เบญจางคประดิษฐ์ +เบญจางค์ +เบญจเพส +เบญญา +เบญพาด +เบญวานี +เบณจ +เบตง +เบตา +เบต้า +เบน +เบนซิน +เบนซ์ +เบนทอไนต์ +เบบี้ +เบรก +เบรค +เบรลล์ +เบริง +เบริล +เบริลเลียม +เบรียน +เบรุต +เบลฟัสต์ +เบลอ +เบลิซ +เบลเกรด +เบลเยียม +เบลเยี่ยม +เบล็ม +เบส +เบสบอล +เบสิค +เบอร์ +เบอร์กามอท +เบอร์คีเลียม +เบอร์น +เบอร์มูดาส์ +เบอร์ลิน +เบอห์ไมต์ +เบอะ +เบอะบะ +เบะ +เบา +เบาตัว +เบาบาง +เบามือ +เบาราณ +เบาะ +เบาะล +เบาะลม +เบาะแส +เบาแรง +เบาใจ +เบาไม้ +เบิก +เบิกโลง +เบิร์ก +เบิร์ธเดย์ +เบิ่ง +เบิ้ม +เบียก +เบียด +เบียดเบียน +เบียน +เบียร์ +เบี่ยง +เบี้ย +เบี้ยว +เบือ +เบือน +เบื่อ +เบื้อ +เบื้อง +เบโลรุสเซีย +เบ็ด +เบ็ดเตล็ด +เบ็ดเสร็จ +เบ่ง +เบ้ +เบ้อ +เบ้อเริ่ม +เบ้อเริ่มเทิ่ม +เบ้อเร่อ +เบ้อเร่อเท่อ +เบ้า +เบ้าตา +เบ๊จี๋ +เปก +เปกข์ +เปต +เปตพลี +เปตอง +เปตา +เปตามไหยกา +เปยยาล +เปยี +เปย์ +เปร +เปรต +เปรม +เปรมฤดีศึกษา +เปรมฤทัย +เปรมสันต์ +เปรย +เปรอ +เปรอะ +เปรา +เปราะ +เปรียง +เปรียญ +เปรียบ +เปรียว +เปรียะ +เปรี้ยง +เปรี้ยว +เปรี๊ยะ +เปรื่อง +เปรื้อย +เปรู +เปร็ง +เปร่า +เปล +เปลญวน +เปลว +เปลา +เปลาะ +เปลี่ยน +เปลี่ยนแปลง +เปลี่ยว +เปลี้ย +เปลือก +เปลือง +เปลือย +เปลื้อง +เปล่ง +เปล่งปลั่ง +เปล่า +เปล้า +เปศ +เปศล +เปศัส +เปสการ +เปสล +เปสุญ +เปอร์ +เปอร์เซนต์ +เปอร์เซีย +เปอร์เซ็นต์ +เปอร์โตริโก +เปะ +เปะปะ +เปา +เปาะ +เปาะเปี๊ยะ +เปาเปา +เปาโรหิตย์ +เปาโล +เปิก +เปิง +เปิงๆ +เปิด +เปิดอก +เปิดโปง +เปิบ +เปิ่น +เปิ๊บ +เปีย +เปียก +เปียงยาง +เปียนโน +เปียว +เปียะ +เปี่ยม +เปี้ยว +เปี๊ยก +เปี๊ยะ +เปือก +เปือยน้อย +เปื่อย +เปื้อน +เปเปอร์ +เป็ด +เป็ดถบ +เป็ดผี +เป็น +เป็นก +เป็นการ +เป็นต้น +เป็นสุข +เป็นใจ +เป็นใด +เป็นไร +เป่ง +เป่า +เป่าก +เป่ากบ +เป่าหู +เป้ +เป้ง +เป้า +เป้าประสงค์ +เป๊ก +เป๊า +เป๋ +เป๋ง +เป๋อ +เป๋อเหลอ +เป๋า +เป๋าฮื้อ +เผ +เผง +เผชิญ +เผดิม +เผดียง +เผด็จ +เผด็จการ +เผน +เผนิก +เผย +เผยอ +เผยิบ +เผยแผ่ +เผล +เผลอ +เผลอไผล +เผละ +เผลาะ +เผลียง +เผล็ด +เผล่ +เผล้ +เผอิญ +เผอิล +เผอเรอ +เผะ +เผา +เผาขน +เผาหัว +เผาะ +เผิน +เผิ้ง +เผียน +เผือ +เผือก +เผือกจิตร +เผือกน้อย +เผือด +เผือน +เผื่อ +เผื่อน +เผ็ด +เผ่น +เผ่า +เผ้า +เผ้าผง +เฝือ +เฝือก +เฝือง +เฝื่อน +เฝ้า +เพ +เพกา +เพคะ +เพจ +เพชฌฆาต +เพชร +เพชรคล้าย +เพชรดา +เพชรบุรี +เพชรบูรณ์ +เพชรรัตน์ +เพชรหึงษ์ +เพชรานันท์ +เพชรายุธ +เพชรเกษม +เพชรเวช +เพณี +เพดาน +เพตร +เพท +เพทนา +เพทาย +เพทุบาย +เพนกวิน +เพนซิลวาเนีย +เพนต์แลนไดต์ +เพนนิซิลลิน +เพนนินซูล่า +เพนนิไนต์ +เพนนี +เพนียด +เพนเทียม +เพนเฟร็นด์ +เพรง +เพรซีโอดิเมียม +เพรส +เพรสทิจ +เพรสสิเดนท์ +เพรสิเดียม +เพรา +เพราะ +เพริด +เพริดอต +เพริศ +เพริเคลส +เพรียก +เพรียง +เพรียบ +เพรียว +เพรือง +เพรื่อ +เพล +เพลง +เพลท +เพลม +เพลย์บอย +เพลส +เพลา +เพลาะ +เพลิง +เพลิด +เพลิดเพลิน +เพลิน +เพลินจิต +เพลีย +เพลี่ยง +เพลี้ย +เพล็ด +เพศ +เพส +เพสลาด +เพอรอฟสไกต์ +เพอร์ฟูม +เพอร์มาเน้นท์ +เพอร์ริสโคป +เพอร์สเปคทีฟ +เพอร์เฟกท์ +เพอร์โซแนลลิตี้ +เพอร์ไทต์ +เพอิญ +เพะ +เพา +เพาพาล +เพาวเวอร์ +เพาะ +เพาเวลไลต์ +เพิก +เพิง +เพิล +เพิ่ง +เพิ่ม +เพิ่มทรัพย์ +เพิ่มปาน +เพิ่มพูน +เพิ่มสิน +เพียง +เพียน +เพียบ +เพียร +เพียว +เพี้ย +เพี้ยง +เพี้ยน +เพื่อ +เพื่อน +เพโท +เพไนย +เพ็ก +เพ็ง +เพ็จ +เพ็ญ +เพ็ดทูล +เพ่ง +เพ่นพ่าน +เพ่อ +เพ้นท์ +เพ้ย +เพ้อ +เฟด +เฟดเดอรัล +เฟมัส +เฟรช +เฟรนด์ชิพ +เฟรม +เฟรส +เฟร็นซ์ฟราย +เฟล +เฟลด์สปาทอยด์ +เฟลด์สปาร์ +เฟส +เฟสติวัล +เฟห์มาร์น +เฟอร์ +เฟอร์นันโดโป +เฟอร์นิเจอร์ +เฟอร์รี่ +เฟอร์เบอไรต์ +เฟอร์เมียม +เฟอะ +เฟอะฟะ +เฟะ +เฟะฟะ +เฟาว์เดชัน +เฟิน +เฟิร์น +เฟียด +เฟี้ยม +เฟี้ยว +เฟือ +เฟือง +เฟือน +เฟือย +เฟื่อ +เฟื่อง +เฟื่องนคร +เฟื้อ +เฟื้อง +เฟื้อย +เฟเวอร์ริท +เฟ็ด +เฟ้น +เฟ้ย +เฟ้อ +เภกะ +เภตรา +เภท +เภทภัย +เภทุบาย +เภรว +เภริ +เภรี +เภสัช +เภสัชกร +เภสัชกรรม +เภสัชพฤกษศาสตร์ +เภสัชวิทยา +เภสัชศาสตร์ +เภสัชอุตสาหกรรม +เภสัชเคมี +เภสัชเวช +เม +เมกกะ +เมกะ +เมกะเฮิรตซ์ +เมกะเฮิรต์ +เมกะไบต์ +เมขลา +เมค +เมคคานิค +เมคอัพ +เมฆ +เมฆฉาย +เมฆพัด +เมฆมาก +เมฆสวัสดิ์ +เมฆา +เมฆินทร์ +เมฆี +เมจิก +เมชัวร์ +เมด +เมดิเตอร์เรเนียน +เมดเลย์ +เมตตา +เมตร +เมตริก +เมตริกตัน +เมถุน +เมท +เมทนี +เมทินี +เมทิล +เมทิลแอลกอฮอล์ +เมธ +เมธอด +เมธา +เมธาวี +เมธี +เมน +เมนทอล +เมนบอร์ด +เมนส์ +เมนู +เมนเดลีเวียม +เมนเฟรม +เมมเบอร์ +เมมเบอร์คลับ +เมมโมรี +เมมโมเรียล +เมย +เมรย +เมรัย +เมรุ +เมรุมาศ +เมล +เมลก +เมลวิล +เมลาไนต์ +เมลือง +เมลื่อย +เมลื้อย +เมลเบอร์น +เมล็ด +เมล์ +เมษ +เมษายน +เมสเซ็นเจอร์ +เมห +เมหน +เมอริท +เมอริเดียน +เมอร์คิวรี +เมอร์รี่คิงส์ +เมอร์ลิน +เมอร์เมด +เมอแรง +เมะ +เมา +เมาดิบ +เมาท์ออร์แกน +เมามัน +เมามัว +เมามาย +เมายศ +เมารี +เมาลี +เมาส์ +เมาห์ +เมาอี +เมาะ +เมิง +เมิน +เมิล +เมีย +เมียง +เมียงมอง +เมียร์ม่าร์ +เมี่ยง +เมี้ยน +เมือ +เมือก +เมือง +เมืองทอง +เมืองท่าปลอดภาษี +เมืองนนทบุรี +เมืองสรวง +เมืองแก้ว +เมือบ +เมื่อ +เมื่อย +เมื่อไร +เมเจอร์ +เมโท +เมโทร +เมโทรโปลิส +เมโย +เมโลดี้ +เม็ก +เม็กซิโก +เม็กซิโกซิตี +เม็ง +เม็ด +เม็ดด +เม็ดดี +เม่น +เม่า +เม้น +เม้ม +เม้า +เม้าท์ +เม้าส์ +เยง +เยซู +เยน +เยภุย +เยรูซาเล็ม +เยล +เยลโล่สโตน +เยส +เยสเตอร์เดย์ +เยอ +เยอรมนี +เยอรมัน +เยอรมันนี +เยอว +เยอะ +เยา +เยาว +เยาวชน +เยาวน +เยาวพา +เยาวพาน +เยาวพานิช +เยาวมาลย์ +เยาวยอด +เยาวรักษ์ +เยาวราช +เยาวลักษณ์ +เยาวเรศ +เยาว์ +เยาฮัน +เยาะ +เยิง +เยิน +เยินยอ +เยิบ +เยิบๆ +เยิ่น +เยิ่นเย้อ +เยิ้ม +เยีย +เยียน +เยียบ +เยียว +เยียวยา +เยียใด +เยี่ยง +เยี่ยม +เยี่ยมนุช +เยี่ยมเยียน +เยี่ยว +เยือ +เยือก +เยือง +เยือน +เยื่อ +เยื่อง +เยื้อ +เยื้อง +เยื้องกราย +เยื้อน +เยเมน +เยๆ +เย็ด +เย็น +เย็นจิตร +เย็นตา +เย็นตาโฟ +เย็นหู +เย็นอากาศ +เย็นใจ +เย็บ +เย็บอก +เย่อ +เย้ +เย้ย +เย้า +เรข +เรขา +เรขาคณิต +เรขาคณิตบริสุทธิ์ +เรขาคณิตวิเคราะห์ +เรคคอร์ด +เรซิน +เรณุ +เรณุก +เรณู +เรณูนคร +เรดดิ +เรดอน +เรดาร์ +เรด้าร์ +เรตินา +เรท +เรทติ้ง +เรนโบว์ +เรฟเฟอร์เร้นซ์ +เรยอง +เรรวน +เรวดี +เรวัติ +เรสเตอรองก์ +เรสเตอร์รองต์ +เรอ +เรอุนยอง +เรา +เราะ +เริง +เริงทนา +เริงร่า +เริด +เริม +เริ่ม +เริ้ม +เรียก +เรียง +เรียงๆ +เรียด +เรียน +เรียบ +เรียบร้อย +เรียบวุธ +เรียบๆ +เรียม +เรียลลิ +เรียลลิซึม +เรียลลิตี้ +เรียลลิสติค +เรียลลิสต์ +เรียว +เรี่ย +เรี่ยม +เรี่ยราด +เรี่ยว +เรี่ยวแรง +เรี้ยวรก +เรี้ยๆ +เรือ +เรือก +เรือง +เรืองยศ +เรืองอุไร +เรือด +เรือน +เรือนแก้ว +เรือนไทย +เรือรบ +เรื่อ +เรื่อง +เรื่อย +เรื้อ +เรื้อง +เรื้อน +เรื้อย +เรื้อรัง +เรเดียน +เรเดียม +เรเดียล +เรโช +เรไร +เร็กคอร์ด +เร็ง +เร็ว +เร่ +เร่ง +เร่งรัด +เร่งร่าย +เร่งเร้า +เร่ร่อน +เร่ว +เร่อ +เร่า +เร่าร้อน +เร้ง +เร้น +เร้นท์ +เร้อ +เร้า +เร้าใจ +เลก +เลกวัด +เลข +เลขกะ +เลขคณิต +เลขจำนวน +เลขชี้กำลัง +เลขนะ +เลขผา +เลขยะ +เลขลำดับ +เลขา +เลขาธิการ +เลขาธิการี +เลขานข +เลขานุการ +เลขโดด +เลคเชอร์ +เลฑฑุ +เลณ +เลณฑุ +เลด +เลดี้ +เลต +เลตี +เลท +เลน +เลนจง +เลนซ์ +เลนส์ +เลนส์นูน +เลนส์สัมผัส +เลนส์เว้า +เลบง +เลบานอน +เลป +เลปกร +เลปน์ +เลพิโดโครไซต์ +เลพิโดไลต์ +เลมนอส +เลมอน +เลย +เลย์เอาท์ +เลรอส +เลว +เลวง +เลวูโลส +เลศ +เลศนัย +เลษฏุ +เลหยะ +เลหลัง +เลหลา +เลหะ +เลอ +เลอชาเทเลียไรต์ +เลอมาน +เลอะ +เลอะเทอะ +เลอโฉม +เละ +เละเทะ +เลา +เลากัย +เลาขวัญ +เลาน์จ +เลาะ +เลาๆ +เลิก +เลิกรา +เลิงนกทา +เลินเล่อ +เลิลลิงไกต์ +เลิศ +เลิศปัญญา +เลิศพัฒนา +เลิศอุบล +เลิ้ง +เลีย +เลียง +เลียงผา +เลียน +เลียบ +เลียบคลอง +เลียบเคียง +เลียบแม่น้ำ +เลียม +เลียว +เลี่ยง +เลี่ยน +เลี่ยม +เลี้ยง +เลี้ยว +เลือก +เลือกสรร +เลือง +เลือด +เลือน +เลื่อง +เลื่อน +เลื่อนลอย +เลื่อม +เลื่อมใส +เลื่อย +เลื้อย +เลเซอ +เลเซอร์ +เลเต +เลเบล +เลเบอร์ +เลเบิล +เลเป +เลเพ +เลเยอร์ +เลโซโธ +เลโอ +เลโอโปลด์วิล +เล็ก +เล็กดา +เล็ง +เล็ด +เล็ดลอด +เล็น +เล็บ +เล็ม +เล่น +เล่นกล +เล่นคำ +เล่นชู +เล่ม +เล่ห์ +เล่ห์เหลี่ยม +เล่อ +เล่า +เล่าล +เล้ง +เล้า +เล้าโลม +เวก +เวค +เวคิน +เวคี +เวคเตอร์ +เวจ +เวจมรรค +เวช +เวชกรรม +เวชภัณฑ์ +เวชศาสตร์ +เวฐนะ +เวฐน์ +เวฐิตะ +เวณะ +เวณิ +เวณิก +เวณุ +เวตน์ +เวตร +เวตาร์ +เวตาล +เวท +เวทคู +เวทนา +เวทมนตร์ +เวทย์ +เวทางคศาสตร์ +เวทางค์ +เวทานตะ +เวทานต์ +เวทิ +เวที +เวธะ +เวน +เวนคืน +เวนิส +เวนไตย +เวบสเตอร์ +เวฟ +เวมะ +เวมัต +เวมาติก +เวร +เวรมณี +เวรี +เวลลิงตัน +เวลส์ +เวลา +เวลเตอร์เวท +เวลโก +เววัณ +เวศม์ +เวศยา +เวศย์ +เวสน์ +เวสภู +เวสมะ +เวสม์ +เวสวัณ +เวสสะ +เวสสันดร +เวสสุกรรม +เวสสุวัณ +เวสารัช +เวสิ +เวสิยา +เวหน +เวหะ +เวหังค์ +เวหัปติ +เวหา +เวหาย +เวหายส +เวหายสมารค +เวหาส +เวฬุ +เวอร์ +เวอร์จิน +เวอร์จิล +เวอร์จิเนีย +เวอร์จิเนียตะวันตก +เวอร์ชัน +เวอร์ชั่น +เวอร์ติคอล +เวอร์มอนต์ +เวอร์มิคิวไลต์ +เวอร์เนียร์ +เวิก +เวิร์กสเตชัน +เวิร์กโฟลว์ +เวิร์ค +เวิร์ด +เวิร์ตไซต์ +เวิร์บ +เวิลด์ +เวิลด์เทรด +เวิ้ง +เวิ้งว้าง +เวียง +เวียงจันทน์ +เวียงชัย +เวียงป่าเป้า +เวียงสระ +เวียงเกตุ +เวียดนาม +เวียดนามเหนือ +เวียดนามใต้ +เวียน +เวียนนา +เวียร +เวี่ย +เวี่ยว +เวเนซุเอลา +เวเนเดียม +เวเฟอร์ +เวเลนซี +เวโรจน์ +เวโลโดรม +เวไนย +เว็บ +เว็บเซอร์วิส +เว็บเพจ +เว็บไซต์ +เว่อ +เว้ +เว้น +เว้ย +เว้า +เศรณี +เศรษฐ +เศรษฐกร +เศรษฐการ +เศรษฐกิจ +เศรษฐศาสตร์ +เศรษฐศิริ +เศรษฐี +เศรษฐีนี +เศรษฐ์ +เศร้า +เศลษ +เศวดีภ +เศวต +เศวตง +เศวตฉัตร +เศวตร +เศวติภ +เศวตีภ +เศวาล +เศวเตภ +เศษ +เศษสิบ +เศษส่วน +เศาจ +เศารยะ +เศาร์ +เศาไจย +เศิก +เศียร +เส +เสก +เสกข +เสกสรร +เสข +เสความ +เสงี่ยม +เสฉวน +เสฏฐี +เสณี +เสด +เสด็จ +เสต +เสตุ +เสถียร +เสถียรภาพ +เสท +เสน +เสนง +เสนห +เสนหา +เสนอ +เสนะ +เสนา +เสนางคนิคม +เสนาจันทร์ +เสนาทิพย์ +เสนาธิการ +เสนานิคม +เสนานี +เสนาบดี +เสนารักษ์ +เสนาร่วม +เสนาสนะ +เสนาสฤษดิ์เดช +เสนาสัมพันธ์ +เสนาะ +เสนี +เสนียด +เสนีย์ +เสน่ง +เสน่หา +เสน่ห์ +เสน่า +เสบย +เสบียง +เสพ +เสพย์ +เสภา +เสมหะ +เสมอ +เสมอใจ +เสมา +เสมียน +เสมียนนารี +เสมือน +เสมือนญาติ +เสม็ด +เสย +เสริด +เสริฟ +เสริฟ์ +เสริม +เสริมงาม +เสริมมิตร +เสริมสุข +เสรี +เสรีนิยม +เสรีภาพ +เสรีเซ็นเตอร์ +เสร็จ +เสล +เสลด +เสลภูมิ +เสลา +เสลี่ยง +เสลือกสลน +เสวก +เสวกามาตย์ +เสวตรเนตร +เสวนะ +เสวนา +เสวย +เสวยพ +เสวียน +เสสรวง +เสสรวล +เสสะเวช +เสา +เสาชี้ +เสารภย์ +เสารี +เสาร์ +เสาว +เสาวคนธ์ +เสาวณิต +เสาวณีย์ +เสาวนะ +เสาวนา +เสาวนีย์ +เสาวภา +เสาวภาคย์ +เสาวภาพ +เสาวรส +เสาวลักษณ์ +เสาหมอ +เสาหฤท +เสาหาน +เสาะ +เสาเอก +เสาไห้ +เสิงสาง +เสิร์จ +เสิร์ฟ +เสิศสิน +เสีย +เสียกล +เสียคน +เสียง +เสียจริต +เสียด +เสียดสี +เสียดาย +เสียที +เสียบ +เสียบน +เสียผี +เสียม +เสียว +เสียใจ +เสี่ย +เสี่ยง +เสี่ยงทาย +เสี่ยม +เสี่ยว +เสี้ยน +เสี้ยม +เสี้ยมสอน +เสี้ยว +เสือ +เสือก +เสือกระดาษ +เสือกไส +เสือดำ +เสือป่า +เสือใหญ่ +เสือไฟ +เสื่อ +เสื่อม +เสื่อมทราม +เสื่อมโทรม +เสื้อ +เสื้อผ้า +เสเพล +เสโท +เสโล +เส็ง +เส็งเคร็ง +เส็น +เส้ง +เส้น +เส้นผม +เส้นวันที่ +เส้นศูนย์สูตร +เส้นเลือด +เส้นใย +เส้นใยแก้ว +เส้า +เห +เหง +เหงา +เหงือก +เหงื่อ +เหง่ง +เหง้า +เหติ +เหตุ +เหตุก +เหตุการณ์ +เหตุผล +เหตุสุดวิสัย +เหนอะ +เหนอะหนะ +เหนาะ +เหนาะๆ +เหนียง +เหนียม +เหนียว +เหนี่ยว +เหนือ +เหนื่อย +เหน็ด +เหน็ดเหนื่อย +เหน็บ +เหน็บแนม +เหน่ง +เหน่อ +เหน้า +เหม +เหมวดี +เหมันต +เหมันต์ +เหมา +เหมายัน +เหมาะ +เหมียว +เหมี่ยว +เหมือง +เหมือด +เหมือน +เหม็ง +เหม็น +เหม่ +เหม่ง +เหม่อ +เหย +เหยง +เหยา +เหยาะ +เหยาะๆ +เหยิง +เหยิน +เหยิบ +เหยิบๆ +เหยียด +เหยียบ +เหยี่ยว +เหยือก +เหยื่อ +เหยเก +เหย่อย +เหย่า +เหย้า +เหรัญญิก +เหรา +เหราะๆ +เหรียญ +เหลน +เหลว +เหลวแหลก +เหลอ +เหลา +เหลาะ +เหลาะแหละ +เหลิง +เหลียน +เหลียว +เหลี่ยม +เหลือ +เหลือก +เหลือง +เหลือบ +เหลือม +เหลือเข็น +เหลือเฟือ +เหลือแหล่ +เหลื่อม +เหล็ก +เหล็กกล้า +เหล็กกล้าไม่เป็นสนิม +เหล็กพืด +เหล่ +เหล่า +เหล่ากอ +เหล่าลดา +เหล้า +เหว +เหวง +เหวทะเล +เหวย +เหวอะ +เหวอะหวะ +เหวี่ยง +เหว่ +เหอะ +เหะ +เหา +เหาน้ำ +เหาะ +เหาไม้ +เหิน +เหิม +เหิมหาญ +เหียง +เหียน +เหี่ยว +เหี่ยวแห้ง +เหี้ย +เหี้ยน +เหี้ยม +เหี้ยมโหด +เหือด +เหือดแห้ง +เหื่อ +เห็จ +เห็ด +เห็ดน +เห็ดบ +เห็ดโ +เห็น +เห็นจะ +เห็นดี +เห็นใจ +เห็บ +เห่ +เห่อ +เห่อเหิม +เห่า +เห้งเจีย +เอ +เอ.ยู.เอ. +เอก +เอกจิต +เอกฉันท์ +เอกชน +เอกชัย +เอกซเรย์ +เอกนัย +เอกพจน์ +เอกภพ +เอกภาคี +เอกภาพ +เอกม +เอกมัย +เอกรรถประโยค +เอกรส +เอกระ +เอกราช +เอกรูป +เอกลักษณ์ +เอกวาดอร์ +เอกศก +เอกส +เอกสาร +เอกสิทธิ์ +เอกอัครราชทูต +เอกอัครสมณทูต +เอกอุ +เอกัคตา +เอกา +เอกาธิปไตย +เอกเขนก +เอกเทศ +เอกโทษ +เอง +เอชพี +เอดส์ +เอดิชัน +เอดินบะระ +เอดิเตอร์ +เอตทัคคะ +เอทิล +เอทิลแอลกอฮอล์ +เอทีเอ็ม +เอธิโอเปีย +เอน +เอนก +เอนกประสงค์ +เอนกาย +เอนตัว +เอนทรานซ์ +เอนสตาไทต์ +เอนไซม์ +เอปซอไมต์ +เอปสัน +เอพิโดต +เอม +เอมอร +เอมโบไลต์ +เอมโอช +เอย +เอราวัณ +เอร็ดอร่อย +เอลซัลวาดอร์ +เอลบา +เอลลิซ +เอลสเมียร์ +เอลา +เอว +เอวัง +เอฬก +เอฬา +เออ +เออน่ะ +เออร์เบียม +เอออวย +เออออ +เออแลนด์ +เอะอะ +เอะใจ +เอา +เอาการ +เอางาน +เอาชนะ +เอาชัย +เอาตาย +เอาต์ซอร์ส +เอาต์พุต +เอาทาร +เอาท์พุต +เอาผิด +เอารส +เอาละ +เอาฬาร +เอาเลย +เอาแต่ +เอาใจ +เอาใช้ +เอิก +เอิกเกริก +เอิบ +เอิ้น +เอียง +เอียด +เอียน +เอี่ยน +เอี่ยม +เอี่ยมพานิช +เอี่ยว +เอี้ยง +เอี้ยมจุ๊น +เอี้ยมเฟี้ยม +เอี้ยว +เอี๊ยด +เอี๊ยม +เอี๊ยมจุ๊น +เอือด +เอือน +เอือม +เอื่อย +เอื้อ +เอื้อง +เอื้อน +เอื้อม +เอื้อย +เอื้อสุข +เอื้อเฟื้อ +เอื๊อก +เอเคอร์ +เอเชีย +เอเชี่ยนเกมส์ +เอเซีย +เอเดน +เอเดรียติก +เอเธนส์ +เอเมอรัลด์ +เอเมอรี +เอเย่นต์ +เอแบค +เอ็กซ์ +เอ็กซ์พลอเรอร์ +เอ็กซ์พอร์ต +เอ็กซ์เพรส +เอ็ง +เอ็ด +เอ็ดตะโร +เอ็ดอึง +เอ็น +เอ็นดู +เอ็นเตอร์เทน +เอ็นเตอร์ไพรซ์ +เอ็มบริโอ +เอ่ย +เอ่อ +เอ้ +เอ้กา +เอ้อ +เอ้อระเหย +เอ้อเฮอ +เอ้เต +เอ๊ก +เอ๊ย +เอ๊ว +เอ๊ะ +เอ๋ +เอ๋ง +เอ๋ย +เฮ +เฮกตาร์ +เฮกโตกรัม +เฮกโตลิตร +เฮกโตเมตร +เฮง +เฮงซวย +เฮมีมอร์ไฟต์ +เฮย +เฮลซิงกิ +เฮลิคอปเตอร์ +เฮสทิงไซต์ +เฮอ +เฮอร์ซิไนต์ +เฮอร์เซโกวินา +เฮอร์โมโปลิส +เฮฮา +เฮา +เฮิบเนอไรต์ +เฮิรตซ์ +เฮีย +เฮี้ยน +เฮี้ยบ +เฮี้ยว +เฮือก +เฮือน +เฮเดนเบอร์ไกต์ +เฮเลนา +เฮโมโกลบิน +เฮโรอีน +เฮโล +เฮไลต์ +เฮ้ย +เฮ้ว +เฮ้อ +แก +แกง +แกงขม +แกงจืด +แกงบวด +แกงส้ม +แกงแนง +แกงได +แกดำ +แกน +แกนะ +แกม +แกมมา +แกมเบีย +แกรก +แกรนด์คานารี +แกรนด์บาฮามา +แกรนิต +แกรบ +แกรมมา +แกระ +แกรไฟต์ +แกร็น +แกร่ง +แกร่ว +แกล +แกลง +แกลน +แกลบ +แกลลอน +แกละ +แกลิลี +แกลเลียม +แกล่ +แกล้ง +แกล้ม +แกล้ว +แกว +แกว่ง +แกว่น +แกะ +แกะดำ +แกะรอย +แกแน +แกแล +แกโดลิเนียม +แก็ต +แก่ +แก่ง +แก่งคอย +แก่งแย่ง +แก่น +แก่นจันทน์ +แก่นทองอุปถัมภ์ +แก่นแก้ว +แก่แดด +แก้ +แก้ขัด +แก้ง +แก้งคล้อ +แก้ตัว +แก้บน +แก้ฝัน +แก้ม +แก้มือ +แก้ลำ +แก้ว +แก้วตา +แก้วนพเกล้า +แก้วผลึก +แก้วมังกร +แก้วหู +แก้ไข +แก๊ง +แก๊ป +แก๊ส +แก๊สน้ำตา +แก๊สเฉื่อย +แก๊สไข่เน่า +แข +แขก +แขน +แขนง +แขม +แขม็บ +แขม่ว +แขยง +แขย่ง +แขลร์ +แขวก +แขวง +แขวน +แขวนลอย +แขวะ +แข็ง +แข็งกร้าว +แข็งแกร่ง +แข่ง +แข่งขัน +แข้ง +แข้น +แค +แคช +แคชเชียร์ +แคชเมียร์ +แคดเมียม +แคน +แคนซัส +แคนอก +แคนาดา +แคนเซิล +แคนเบอร์รา +แคบ +แคบหมู +แคบาไซต์ +แคปซูล +แคปปิตอล +แคฝอย +แคม +แคมปัส +แคมเปญ +แคมเปน +แครก +แครง +แครอท +แคระ +แคริบเบียน +แคร็ก +แคร่ +แคร์ +แคลคูรัส +แคลคูลัส +แคลง +แคลงใจ +แคลน +แคลริเนท +แคลอรี +แคลิฟอร์เนีย +แคลิฟอร์เนียม +แคลเซียม +แคลเซียมคาร์ไบด์ +แคลเซียมไซคลาเมต +แคลไซต์ +แคล่วคล่อง +แคล้ว +แคล้วคลาด +แคว +แควก +แคว้ง +แคว้น +แคสซิเทอร์ไรต์ +แคสเปียน +แคะ +แคะไค้ +แคเมอรูน +แคแกล +แคแตร +แคแสด +แคโทด +แคโรไลนา +แคโรไลนาเหนือ +แคโรไลนาใต้ +แค่ +แค่น +แค้ +แค้น +แค้นคอ +แค้มป์ +แค้มป์ไฟ +แง +แงะ +แง่ +แง่ง +แง่งอน +แง่น +แง่นๆ +แง้ม +แจ +แจก +แจกัน +แจกแจง +แจง +แจงรูป +แจงร้อน +แจงร้อนวิทยา +แจงลอน +แจจน +แจจัน +แจดแจ้ +แจตร +แจบ +แจร +แจรก +แจรง +แจลูอิต +แจว +แจสเพอร์ +แจะ +แจ็กสัน +แจ่ม +แจ่มจันทร์ +แจ่มบุตร +แจ่มใส +แจ่ว +แจ้ +แจ้ง +แจ้งวัฒนะ +แจ้งศิริสัมพันธ์ +แจ้น +แจ้ว +แจ้ห่ม +แจ๊ด +แจ๋ +แจ๋ว +แจ๋วแหวว +แฉ +แฉก +แฉง +แฉบล +แฉลบ +แฉละ +แฉล้ม +แฉล้มนิมิตร +แฉว +แฉะ +แฉะแบะ +แฉโพย +แฉ่ +แฉ่ง +แช +แชงกรีล่า +แชงมา +แชนแนล +แชบ๊วย +แชมป์ +แชมพู +แชมภู +แชมเปญ +แชมเปี้ยน +แชรง +แชร์ +แชลเนล +แชล่ม +แชสซีส์ +แชะ +แชแธม +แช่ +แช่ง +แช่ม +แช่มจิต +แซ +แซคราเมนโต +แซคาลีน +แซง +แซงชัน +แซงต์เดอนีส์ +แซงแซว +แซด +แซดๆ +แซทเทิน +แซนซีบาร์ +แซนด์วิช +แซนตาครูซ +แซนโตริน +แซบ +แซปไฟร์ +แซฟไฟร์ +แซม +แซมเบีย +แซมเปิล +แซยิด +แซลมอน +แซว +แซะ +แซ็กคาริน +แซ็กคารินโซเดียม +แซ่ +แซ่ว +แด +แดก +แดกงา +แดกดัน +แดกห่า +แดกแด้ +แดง +แดงน้ำ +แดด +แดดาล +แดดิ้น +แดน +แดนตะวัน +แดนเนรมิต +แดนไตร +แดยัน +แดหวา +แดะ +แดะแด๋ +แด็กๆ +แด่ +แด่น +แด่ว +แด่วๆ +แตก +แตกคอ +แตกฉาน +แตกดับ +แตกทัพ +แตกฝูง +แตกพาน +แตกมัน +แตกหัก +แตกแตน +แตกแยก +แตง +แตงกวา +แตงเม +แตงโม +แตงไทย +แตด +แตน +แตร +แตรงอน +แตรวง +แตระ +แตลลาแฮสซี +แตลลิน +แตะ +แต่ +แต่ง +แต่งงาน +แต่ละ +แต่ๆ +แต้ +แต้จิ๋ว +แต้ม +แต้มคู +แต้ว +แต๊ดแต๋ +แต๊ะเอีย +แถ +แถก +แถง +แถน +แถบ +แถบบันทึกภาพ +แถบบันทึกเสียง +แถม +แถมพก +แถลง +แถลงการณ์ +แถลงการณ์ร่วม +แถลงไข +แถลบ +แถว +แทคติก +แทคติคส์ +แทง +แทงทวย +แทงโก +แทงใจ +แทชเคนต์ +แทตย์ +แทน +แทนคุณ +แทนซาเนีย +แทนทาลัม +แทนทาไลต์ +แทนที่ +แทนเจนต์ +แทบ +แทรก +แทรกซอน +แทรกซึม +แทรกซ้อน +แทรกเตอร์ +แทรกแซง +แทรเวล +แทลเลียม +แทสมัน +แทสเมเนีย +แทะ +แทะโลม +แท็กซี่ +แท็กซ์ +แท็งก์น้ำ +แท็งค์ +แท่ +แท่ง +แท่น +แท่นลา +แท้ +แท้ง +แท้จริง +แท้ๆ +แนกซอส +แนชวิล +แนบ +แนม +แนว +แนวคิด +แนวทาง +แนวที่ห้า +แนวป่า +แนวรบ +แนะ +แนะนัด +แนะนำ +แนะแนว +แนะแหน +แน่ +แน่ง +แน่ชัด +แน่น +แน่นขนัด +แน่นอน +แน่นแฟ้น +แน่ว +แน่ะ +แน่แท้ +แน่ใจ +แบ +แบก +แบกแดด +แบค +แบคกราวนด์ +แบคทีเรีย +แบคอัพ +แบคแฮนด์ +แบคไลท์ +แบงก์ +แบงค์ +แบดมินตัน +แบตันรูช +แบตเตอรี่ +แบน +แบนด์วิธ +แบนเนอร์ +แบนโจ +แบบ +แบบข้อคำถาม +แบบบาง +แบบสอบถาม +แบบแผน +แบฟฟิน +แบมือ +แบรก +แบรนด์ +แบร์ +แบร์ฟุต +แบร์ริง +แบล็คเมล์ +แบหลา +แบะ +แบะท่า +แบะปาก +แบะอก +แบะแฉะ +แบเธอร์สต์ +แบเบาะ +แบเรียม +แบแรนต์ส +แบไต๋ +แบไรต์ +แบ็บ +แบ็พติส +แบ่ง +แบ้ +แป +แปซิฟิก +แปซิฟิค +แปด +แปดบท +แปดปน +แปดริ้ว +แปทู +แปบ +แปม +แปร +แปรก +แปรง +แปรงล +แปรงสีฟัน +แปรงะ +แปรง่ง +แปรง๊ด +แปรง๋ +แปรปรวน +แปรผัน +แปรผันแบบผกผัน +แปรผันโดยตรง +แปรรูป +แประ +แปรไข้ +แปร่ง +แปร้น +แปร๊ด +แปร๋ +แปล +แปลก +แปลง +แปลงนาม +แปลงผี +แปลน +แปลบ +แปล้ +แปะ +แป้ง +แป้งสด +แป้น +แป้ว +แป๊ด +แป๊บ +แป๊ว +แป๊ะ +แป๊ะกุ่ย +แป๊ะซะ +แป๊ะเจี๊ยะ +แป๋ง +แป๋ว +แผก +แผง +แผงคอ +แผงลอย +แผด +แผน +แผนก +แผนการ +แผนที่ +แผนผัง +แผนภาพ +แผนภูมิ +แผล +แผลง +แผลงศร +แผละ +แผล็บ +แผล็ว +แผ่ +แผ่ตน +แผ่น +แผ่นด +แผ่นดินทอง +แผ่นพก +แผ่นภพ +แผ่ว +แผ่หลา +แผ่แง่ +แผ้ว +แผ้วพาน +แฝก +แฝกหอม +แฝง +แฝด +แฝดน้ำ +แพ +แพค +แพคกิ้ง +แพง +แพงพวย +แพทย +แพทยศาสตร์ +แพทยสภา +แพทยา +แพทย์ +แพทย์ปัญญา +แพทย์ศาสตร์ +แพทเทิร์น +แพน +แพนก +แพนงเชิง +แพนงเชิญ +แพนซี่ +แพนด้า +แพนทรี +แพนเค็ก +แพนเตอร์ +แพร +แพรก +แพรคทิซ +แพรว +แพรวพราว +แพร่ +แพร่ง +แพร่งพราย +แพร่งสรรพศาสตร์ +แพร้ว +แพร์ +แพลง +แพลจิโอเคลส +แพลตฟอร์ม +แพลทินัม +แพลนนิง +แพลม +แพละ +แพลเลเดียม +แพว +แพศยา +แพศย์ +แพะ +แพะโลม +แพแตก +แพ็ก +แพ็คเกจ +แพ่ง +แพ่น +แพ้ +แพ้ผม +แพ้ผัว +แพ้ฟัน +แพ้รู้ +แพ้ว +แพ้แรง +แฟกซ์ +แฟกท์ +แฟกเตอร์ +แฟกโทรี +แฟง +แฟชั่น +แฟน +แฟนซี +แฟนตาซี +แฟนนิง +แฟบ +แฟมิเลียร์ +แฟรงก์ฟอร์ต +แฟรงคลิไนต์ +แฟรงค์ +แฟรนเซียม +แฟร์ +แฟลกซ์ +แฟลช +แฟลชไดร์ฟ +แฟลต +แฟลร์ +แฟะ +แฟ่ +แฟ้ม +แมก +แมกกาซีน +แมกนัม +แมกนีเซียม +แมกนีไซต์ +แมกนีไทต์ +แมกฮิไมต์ +แมคอินทอช +แมคเคอเรล +แมคโคร +แมง +แมงกะพรุน +แมงกานิน +แมงกานีส +แมงกาโนไซต์ +แมงกาไนต์ +แมงดา +แมงป่อง +แมงมุม +แมงลัก +แมชชีน +แมดิสัน +แมตซ์ +แมทช์ +แมทส์ +แมทเธอร์แมติค +แมน +แมนจูเรีย +แมนชั่น +แมนวล +แมนูแฟคเจอร์ +แมนเนจเม้นท์ +แมนเนอร์ +แมร +แมริแลนด์ +แมลง +แมลงดำ +แมลงปอ +แมลงวัน +แมลงวันสเปน +แมลงสาบ +แมลบ +แมว +แมวดาว +แมวน้ำ +แมวป่า +แมวมอง +แมวเซา +แมส +แมสซาซูเซตส์ +แมะ +แมโคร +แม็กซิมัม +แม็คโคร +แม่ +แม่กอง +แม่กุญแจ +แม่คุณ +แม่คู่ +แม่ค้า +แม่งาน +แม่จริม +แม่จัน +แม่ตาย +แม่ทะ +แม่ทัพ +แม่ทา +แม่ท่า +แม่น +แม่นม +แม่นยำ +แม่น้ำ +แม่บท +แม่ปะ +แม่พระฟาติมา +แม่พริก +แม่มด +แม่ยาย +แม่ระมาด +แม่ริม +แม่ร้า +แม่ลาน้อย +แม่ลาย +แม่วี +แม่สรวย +แม่สอด +แม่สะเรียง +แม่สาย +แม่สี +แม่หม้าย +แม่อาย +แม่ฮ่องสอน +แม่เนี้ยว +แม่เมาะ +แม่แจ่ม +แม่แตง +แม่แรง +แม่ใจ +แม้ +แม้น +แม้ว +แม้ว่า +แม้แต่ +แยก +แยกแยะ +แยง +แยงยล +แยงแย่ +แยงแย้ +แยบ +แยบคาย +แยบยล +แยม +แยะ +แยแส +แย็บ +แย่ +แย่ง +แย่แต้ +แย้ +แย้ง +แย้ม +แย้มจาดวิทยา +แย้มพ +แย้มพราย +แร +แรก +แรกนา +แรคคูน +แรง +แรงงาน +แรงงานสัมพันธ์ +แรงดึงดูด +แรงม้า +แรงสู่ศูนย์กลาง +แรงเทียน +แรซิ่ง +แรด +แรฟเฟิล +แรม +แรมรอน +แรมรา +แรมเมลส์เบอร์ไกต์ +แรมโรย +แรลลี +แระ +แรเงา +แร็กเกต +แร่ +แร่กลีบหิน +แร่กลีบหินขาว +แร่ง +แร่ดินขาว +แร่ดินสอดำ +แร่ดีบุก +แร่พลอยอ่อน +แร่ฟันม้า +แร่เกลือจืด +แร่เขี้ยวหนุมาน +แร่ใยหิน +แร้ง +แร้นแค้น +แร้ว +แล +แลก +แลกวาด +แลกโทส +แลคเกอร์ +แลง +แลตเวีย +แลน +แลนซิง +แลนด์ +แลนทานัม +แลบ +แลบราโดไรต์ +แลมโพรโบไลต์ +และ +แล็กโทส +แล็บ +แล่ +แล่ง +แล่น +แล้ +แล้ง +แล้ว +แล้วก +แล้วไป +แวกกอน +แวคคัม +แวง +แวงน้อย +แวงใหญ่ +แวด +แวดล้อม +แวดวง +แวตร +แวน +แวนคูเวอร์ +แวนดา +แวนโก๊ะห์ +แวบ +แวบวับ +แวม +แวมไพร์ +แวลู +แวว +แวววับ +แวววาม +แวววาว +แวะ +แวเลียนท์ +แว่น +แว่นตา +แว่นไว +แว่ว +แว้ +แว้ง +แส +แสก +แสง +แสงจันทร์ +แสงดาบ +แสงทอง +แสงมั่งมี +แสงศรี +แสงศึกษา +แสงอรุณ +แสงอุทัย +แสงแดด +แสด +แสดง +แสดงออก +แสตมป์ +แสน +แสนกล +แสนง +แสนงอน +แสนย +แสนยากร +แสนยานุภาพ +แสนย์ +แสนรู้ +แสนสุข +แสนา +แสบ +แสบก +แสม +แสมดำ +แสมสาร +แสยก +แสยง +แสยงขน +แสยะ +แสรก +แสร้ง +แสลง +แสลงใจ +แสวง +แสวงหา +แสอก +แสะ +แส่ +แส้ +แส้ม้า +แห +แหก +แหกคอก +แหกปาก +แหง +แหงน +แหงแก๋ +แหง่ +แหง่ง +แหน +แหนง +แหนงใจ +แหนบ +แหนม +แหบ +แหม +แหมะ +แหม่ +แหม่ม +แหย +แหยง +แหยม +แหยะ +แหย่ +แหย่ง +แหล +แหลก +แหลกลาญ +แหลงสิงห์ +แหลน +แหลม +แหลมคม +แหลมงอบ +แหลมทอง +แหละ +แหล่ +แหล่ง +แหล่งเสื่อมโทรม +แหล่ใน +แหว +แหวก +แหวด +แหวน +แหวะ +แหว่ง +แหะ +แห่ +แห่ง +แห่แหน +แห้ +แห้ง +แห้น +แห้ว +แอ +แอก +แอกซิไนต์ +แอกทิเนียม +แอกทิโนไลต์ +แอกไมต์ +แองกลีไซต์ +แองเกิลซี +แองเคอไรต์ +แอชกาแบด +แอด +แอดดิสอาบาบา +แอดมิรัลตี +แอดวานซ์ +แอดเดรส +แอดๆ +แอตทริบิวต์ +แอตแลนตา +แอตแลนติก +แอนดรอส +แอนดราไดต์ +แอนดาลูไซต์ +แอนดีซีน +แอนด์ +แอนตาร์กติก +แอนตาร์กติกา +แอนติบอดี +แอนติปารอส +แอนติลลิสน้อย +แอนติลลิสใหญ่ +แอนติอิเล็กตรอน +แอนติเจน +แอนติโมนี +แอนตีกัว +แอนตี้ +แอนทิโกไรต์ +แอนทิโมนี +แอนิเมชัน +แอนแนโปลิส +แอนโทฟิลไลต์ +แอนไฮไดรต์ +แอบ +แอบอิง +แอบาโก +แอบแฝง +แอปเปิล +แอพพลิเคชัน +แอพเพล็ต +แอฟริกา +แอฟริกากลาง +แอฟริกาใต้ +แอมบลิโกไนต์ +แอมฟิโบล +แอมมิเตอร์ +แอมะซอนสโตน +แอมะซอนไนต์ +แอมิแรนต์ +แอมแปร์ +แอมโมเนีย +แอริโซนา +แอร่ม +แอร์ +แอลกอฮอล์ +แอลจีเรีย +แอลฟา +แอลมันไดต์ +แอลลาไนต์ +แอละแบมา +แอลเจียร์ +แอลเบเนีย +แอลโลเฟน +แอลไบต์ +แอว +แอสทาทีน +แอสฟัลต์ +แอสเบสทอส +แอสไพริน +แอหนัง +แออวย +แออัด +แอเมทิสต์ +แอเรอ +แอโนด +แอโรบิค +แอ็กเซลไฮเบอร์ก +แอ็คทีฟ +แอ็ดแวนติส +แอ่ง +แอ่น +แอ่นลม +แอ่ว +แอ้ +แอ้งแม้ง +แอ้ด +แอ้ม +แอ๊คชั่น +แอ๊ด +แอ๋ +แฮ +แฮกเกอร์ +แฮนด์ +แฮนด์บอล +แฮปปี้ +แฮปปี้แลนด์ +แฮฟเนียม +แฮม +แฮมเบอร์เกอร์ +แฮร์ริสเบอร์ก +แฮะ +แฮ่ +แฮ่ก +แฮ่กึ๊น +โก +โกก +โกกนุท +โกกิล +โกกิลา +โกกเกก +โกง +โกงกาง +โกงกิน +โกงโก้ +โกญจ +โกญจน +โกญจา +โกฏิ +โกฐ +โกฐสอ +โกฐหอม +โกฐาส +โกณ +โกดัง +โกตาบารู +โกตไต +โกทัณฑ์ +โกธิค +โกน +โกปินำ +โกมล +โกมุท +โกย +โกรก +โกรกธาร +โกรกพระ +โกรง +โกรญจ +โกรด +โกรต๋น +โกรธ +โกรธข +โกรธา +โกรพ +โกรม +โกรย +โกรศ +โกร่ง +โกร้ +โกร๋น +โกลง +โกลด์ +โกลน +โกลบอล +โกลาหล +โกล์ +โกวิท +โกศ +โกศล +โกศลวิทยา +โกษ +โกษม +โกษย +โกษีย์ +โกส +โกสน +โกสัช +โกสินทร์ +โกสีย์ +โกสุม +โกสุมพิสัย +โกหก +โกหร่าน +โกหวา +โกเมน +โกเมรา +โกเมศ +โกโก้ +โกโซ +โกโรโกโส +โกไดแอก +โกไล +โกไสย +โก่ +โก่ง +โก่น +โก้ +โก้งโค้ง +โก้เก๋ +โก๋ +โก๋น +โข +โขก +โขง +โขงเจียม +โขด +โขน +โขนง +โขม +โขมง +โขมด +โขยก +โขยง +โขยด +โขย่ง +โขลก +โขลง +โขลน +โข่ง +โค +โคก +โคกปีบ +โคกม้า +โคกสำโรง +โคกโพธิ์ +โคคลาน +โคจร +โคช +โคซี่ +โคด +โคตร +โคตรภู +โคธา +โคน +โคนม +โคนสมอ +โคนอน +โคนากรี +โคบอลต์ +โคบอลไทต์ +โคบาล +โคบุตร +โคปผกะ +โคม +โคมลอย +โคมัย +โคมูตร +โคม่า +โครก +โครคอยต์ +โครง +โครงการ +โครงสร้าง +โครซิโดไลต์ +โครม +โครส +โครันดัม +โคราช +โครำ +โครเชท์ +โครเมียม +โครเอเชีย +โครโมโซม +โครไมต์ +โคร่ง +โคล +โคลง +โคลงเคลง +โคลน +โคลนนิ่ง +โคลอน +โคลอมเบีย +โคลัมบัส +โคลัมเบีย +โคลัมโบ +โคลัมไบต์ +โควตา +โควิถี +โคออพเพอร์เรชัน +โคออร์ดิเนต +โคเคน +โคเซแคนต์ +โคเปนเฮเกน +โคเลสเตอรอล +โคเวลไลต์ +โคแทนเจนต์ +โคแทนเจอร์ +โคโกส +โคโมโร +โคโรค +โคโรนา +โคโลราโด +โคไซน์ +โคไพร +โค่ง +โค่น +โค้ก +โค้ง +โค้ช +โค้ด +โฆรวิส +โฆษ +โฆษก +โฆษณา +โฆษณาชวนเชื่อ +โฆษะ +โฆษิต +โฆษิตาราม +โง +โงก +โงกเงก +โงง +โงงเงง +โงน +โงนเงน +โงเง +โง่ +โง่งเง่ง +โง่งๆ +โง้ง +โจ +โจก +โจง +โจงโคร่ง +โจท +โจทก์ +โจทนา +โจทน์ +โจทย์ +โจน +โจนร่ม +โจม +โจมตี +โจมทัพ +โจร +โจรกรรม +โจล +โจษ +โจษจน +โจษจัน +โจษแจ +โจ่งครึ่ม +โจ่งแจ้ง +โจ๊ก +โจ๋งครึ่ม +โฉ +โฉงเฉง +โฉด +โฉดเฉา +โฉนด +โฉบ +โฉม +โฉมงาม +โฉมฉาย +โฉมตรู +โฉมยง +โฉมศรี +โฉมหน้า +โฉลก +โฉเก +โฉเบ๊ +โฉ่ +โฉ่งฉ่าง +โฉ่ฉาว +โชก +โชกุน +โชกโชน +โชค +โชคชัย +โชคชัยจงจำเริญ +โชคชัยร่วมมิตร +โชคลาง +โชงโลง +โชดก +โชดึก +โชต +โชตก +โชติ +โชติก +โชติการ +โชติการาม +โชติรส +โชติวัฒน์ +โชติสหาย +โชน +โชบองต์ +โชมโรม +โชย +โชยติส +โชรม +โชว์ +โชว์รูม +โชเฟอร์ +โช้ค +โซ +โซก +โซดา +โซดาแผดเผา +โซดาไฟ +โซดาไลต์ +โซน +โซนา +โซนาร์ +โซนิค +โซนี่ +โซปราโน +โซปสโตน +โซฟา +โซม +โซมาลิแลนด์ +โซมาเลีย +โซรม +โซล +โซลา +โซลูชัน +โซลูชั่น +โซเซ +โซเดียม +โซเดียมคาร์บอเนต +โซเดียมซัลเฟต +โซเดียมไซคลาเมต +โซเฟีย +โซเวียต +โซโกตรา +โซโก้ +โซโลมอน +โซโล่ +โซไซเอตี +โซ่ +โซ่ง +โซ่พิสัย +โด +โดกเดก +โดด +โดดร่ม +โดน +โดนดี +โดนัต +โดนัท +โดป +โดม +โดมร +โดมินิกัน +โดมินิกา +โดมิโน +โดมไพร +โดย +โดยตรง +โดยที่ +โดยสาร +โดรณ +โดเมน +โดเวอร์ +โดโลไมต์ +โด่ +โด่ง +โด่เด่ +โด๊ป +โต +โตก +โตงเตง +โตจันทร์ +โตฎก +โตน +โตนด +โตปิกา +โตมร +โตมรธร +โตย +โตรก +โตรด +โตเกียว +โตเกเลา +โตเบโก +โตโก +โต่ง +โต้ +โต้ง +โต้งๆ +โต้ตอบ +โต้วาที +โต้หลง +โต้โผ +โต๊ด +โต๊ะ +โต๊ะอิหม่าม +โต๋เต๋ +โถ +โถง +โถงเถง +โถบ +โถปริก +โถม +โถมนาการ +โถส้วม +โท +โทกเทก +โทง +โทงเทง +โทงๆ +โทณะ +โททอล +โทธก +โทน +โทนิค +โทนเนอร์ +โทนโท่ +โทปาส +โทมนัส +โทร +โทรคมนาคม +โทรทรรศน์ +โทรทัศน์ +โทรพิมพ์ +โทรภาพ +โทรม +โทรศัพท์ +โทรสาร +โทรเลข +โทลา +โทศก +โทษ +โทษจำ +โทษทัณฑ์ +โทษา +โทษากร +โทษานุโทษ +โทษารมณ์ +โทษโพย +โทส +โทสะ +โทสาคติ +โทหฬะ +โทแพซ +โทโทษ +โทโส +โท่ +โธรน +โธวน +โธ่ +โน +โนซีไลต์ +โนน +โนนสะอาด +โนนสัง +โนนสูง +โนนไทย +โนมพรรณ +โนรา +โนรี +โนวายาซิมลียา +โนเกีย +โนเน +โนเบเลียม +โน่น +โน้ต +โน้ตบุ๊ก +โน้ตบุ๊ค +โน้ตส์ +โน้น +โน้ม +โบ +โบก +โบกขร +โบกขรณี +โบกมือ +โบกี้ +โบชุก +โบดก +โบต +โบตั๋น +โบนัส +โบนิน +โบฟอร์ต +โบย +โบยบิน +โบรกเกอร์ +โบรมีน +โบรอน +โบราณ +โบราณกาล +โบราณคดี +โบลิเวีย +โบล็คเกอร์ +โบว์ +โบว์ชัวร์ +โบว์ลินไจต์ +โบว์ลิ่ง +โบสถ์ +โบแดง +โบโกตา +โบโฮล +โบ้ +โบ๊เบ๊ +โบ๋ +โป +โปก +โปกขร +โปกขรณี +โปกฮา +โปกำ +โปง +โปงลาง +โปฐปท +โปดก +โปตถกะ +โปน +โปร +โปรง +โปรด +โปรดปราน +โปรดักซ์ +โปรดักซ์ชัน +โปรดิวเซอร์ +โปรตอน +โปรตีน +โปรตุเกส +โปรย +โปรยปราย +โปรวิเดนซ์ +โปรเกรส +โปรเจคท์ +โปรเจคเตอร์ +โปรเซสเซอร์ +โปรเตสแตนต์ +โปรแกรม +โปรแกรมเมอร์ +โปรโตคอล +โปรโฟสเซอร์ +โปรโมชัน +โปรโมต +โปรโมท +โปรโมเตอร์ +โปรไฟล์ +โปร่ง +โปร่งแสง +โปร่งใส +โปลิส +โปลิโอ +โปลี +โปลีเทคนิค +โปล่ง +โปสการ์ด +โปสเตอร์ +โปะ +โปเก +โปแลนด์ +โปโล +โป่ +โป่ง +โป่งข่าม +โป่งน้ำร้อน +โป้ +โป้ง +โป้ปด +โป๊ +โป๊ก +โป๊กเกอร์ +โป๊ป +โป๊ยเซียน +โป๊ะ +โผ +โผง +โผงผาง +โผงเผง +โผฏฐัพ +โผฏฐัพพะ +โผฐัพพะ +โผน +โผผิน +โผย +โผลกเผลก +โผลง +โผลน +โผละ +โผล่ +โผอน +โผะ +โผเผ +โพ +โพก +โพกพาย +โพง +โพงพาง +โพชฌงค์ +โพซิตรอน +โพด +โพทะเล +โพธ +โพธาราม +โพธิ +โพธิญาณ +โพธิบัลลังก์ +โพธิสมภาร +โพธิสัตว์ +โพธิ์ +โพธิ์ชัย +โพธิ์ทอง +โพธิ์นิมิตร +โพธิ์ประทับช้าง +โพธิ์ปั้น +โพธิ์สามต้น +โพธิ์หิรัญอุทิศ +โพธิ์แก้ว +โพน +โพนทราย +โพนทอง +โพนทะนา +โพนพิสัย +โพนเพน +โพบาย +โพผัน +โพย +โพยก๊วน +โพยม +โพยมัน +โพรก +โพรง +โพรซีเดอร์ +โพรมีเทียม +โพระ +โพระดก +โพรเซสเซอร์ +โพรแทกทิเนียม +โพรโตคอล +โพรโทแอกทิเนียม +โพลง +โพลน +โพลล์ +โพละ +โพลาริส +โพลาลอยด์ +โพลิเมอร์ +โพลีซี +โพลีเอสเตอร์ +โพลีเฮไลต์ +โพล่ +โพล่ง +โพล้ง +โพล้เพล้ +โพสท์ +โพสพ +โพสสิเบิล +โพสิทิฟ +โพแทช +โพแทสเซียม +โพ้น +โฟกัส +โฟน +โฟม +โฟร์แมน +โฟร์แฮนด์ +โฟร์โมสท์ +โฟลทติ้งมาร์เก็ต +โฟลเดอร์ +โฟลโกไพต์ +โฟล์ค +โฟล์คซอง +โฟล์คลอร์ +โฟล์เดอร์ +โฟเนติค +โฟโต้ +โฟโทกราฟ +โภค +โภคทรัพย์ +โภคภัณฑ์ +โภคยทรัพย์ +โภคิน +โภคี +โภชก +โภชน +โภชนะ +โภชนา +โภชนากร +โภชนาการ +โภชนาหาร +โภชน์ +โภไคย +โม +โมก +โมกข์ +โมกมัน +โมกาดิสชู +โมกโคก +โมฆ +โมฆกรรม +โมฆะ +โมฆีย +โมฆียกรรม +โมฆียะ +โมง +โมงครุ่ม +โมจน +โมซัมบิก +โมดิไฟ +โมดูล +โมดูลา +โมทนา +โมนลิซ่า +โมนาโก +โมนาไซต์ +โมบาย +โมบิล +โมมูห์ +โมรา +โมรี +โมร็อกโก +โมลด์ +โมลิบดีนัม +โมลิบดีไนต์ +โมลี +โมลุกกะ +โมสาร์ท +โมหะ +โมหันธ์ +โมหาคติ +โมฬี +โมฮัมหมัด +โมฮ็อว์ค +โมเดล +โมเดิล +โมเด็ม +โมเตล +โมเต็ล +โมเม +โมเมนตัม +โมเมนต์ +โมเรส +โมเลกุล +โมเสก +โมเสส +โมโน +โมโนแซ็กคาไรด์ +โมโนโครม +โมโนโพลิ +โมโลไค +โมโห +โมโหโ +โมโหโทโส +โมไนย +โมไบล์ +โม่ +โม่ง +โม่ห์ +โม้ +โย +โยก +โยกตร์ +โยกเยก +โยกโย้ +โยค +โยคยะ +โยคะ +โยคิน +โยคี +โยง +โยงโย่ +โยงใย +โยชก +โยชนา +โยชน์ +โยถิกะ +โยทะกา +โยธรา +โยธา +โยธิน +โยธินบูรณะ +โยธี +โยน +โยนก +โยนยาว +โยนิโส +โยนี +โยพนะ +โยม +โยเย +โยโส +โย่ง +โย่งๆ +โย้ +โย้เย้ +โร +โรค +โรคจิต +โรคจิตเภท +โรคประสาท +โรคระบบประสาท +โรคา +โรคาพาธ +โรง +โรงกะปิ +โรงคัล +โรงงาน +โรงงานยาสูบ +โรงถ่าน +โรงธาร +โรงนา +โรงน้ำแข็ง +โรงรถ +โรงหมู +โรงเตี๊ยม +โรงเรียน +โรงเรียนสาธิต +โรงแรม +โรงแสง +โรจ +โรจน์ +โรดส์ +โรดิเซีย +โรดโชว์ +โรดไอแลนด์ +โรตา +โรตารี่ +โรตี +โรท +โรทนะ +โรธ +โรธร +โรบอต +โรบินสัน +โรปนะ +โรม +โรมมัย +โรมรัน +โรมัน +โรมันคาทอลิก +โรมานซ์ +โรมาเนีย +โรย +โรยรา +โรล +โรษ +โรษณะ +โรส +โรหิณี +โรหิต +โรหิตสุข +โรเดียม +โรเตอร์ +โรเนียว +โรเมอร์ +โรเร +โรแมนติค +โรโกไนต์ +โรโดโครไซต์ +โรโดไลต์ +โร่ +โลก +โลกทะเล +โลกธรรม +โลกนาถ +โลกบาล +โลกยะ +โลกย์ +โลกวิทู +โลกันตร์ +โลกัย +โลกา +โลกาธิบดี +โลกาธิปไตย +โลกานุวัตร +โลกาภิวัฒน์ +โลกามิส +โลกาวินาศ +โลกิยะ +โลกีย +โลกียวัตร +โลกีย์ +โลกุตรธรรม +โลกุตระ +โลกเกศ +โลคัล +โลง +โลจนะ +โลชั่น +โลณะ +โลด +โลดโผน +โลตัส +โลน +โลนลิ +โลปะ +โลภ +โลม +โลมะ +โลมา +โลมเล้า +โลลุป +โลว์ +โลหการ +โลหกิจ +โลหะ +โลหะเจือ +โลหัช +โลหิต +โละ +โลเกศ +โลเคชั่น +โลเม +โลเล +โลโก้ +โลโต +โลโฟเตน +โลโล +โล่ +โล่ง +โล้ +โล้ง +โล้น +โล้เล้ +โว +โวการ +โวค +โวทาน +โวย +โวยวาย +โวลก้า +โวลท์ +โวลลาสโทไนต์ +โวลุม +โวลเคโน +โวสาน +โวหาร +โว่ +โว่ง +โว้ย +โว้เว้ +โศก +โศกนาฏกรรม +โศกศัลย์ +โศกา +โศกาดูร +โศกาลัย +โศกี +โศจนะ +โศจิ +โศถะ +โศธนะ +โศผะ +โศภ +โศภา +โศภิต +โศภิน +โศรณิ +โศรดา +โศรตร +โศลก +โษฑศ +โษฑศัน +โสก +โสกันต์ +โสกโดก +โสณ +โสณฑ์ +โสณมัย +โสณิ +โสณี +โสด +โสดก +โสดม +โสดา +โสดาบัน +โสต +โสตถิ +โสตทัศนอุปกรณ์ +โสทก +โสทร +โสธก +โสธนะ +โสน +โสพิศ +โสภ +โสภณ +โสภา +โสภิณี +โสภี +โสม +โสมนัส +โสมม +โสมย์ +โสมาภาณุสรณ์ +โสรจ +โสร่ง +โสวรรณ +โสหุ้ย +โสฬส +โสเภณี +โสโครก +โหง +โหด +โหน +โหนก +โหนด +โหน่ง +โหม +โหมด +โหมหัก +โหมฮึก +โหมโรง +โหม่ +โหม่ง +โหย +โหยกเหยก +โหยง +โหยหวน +โหยไห้ +โหย่ง +โหร +โหรงเหรง +โหระพา +โหรา +โหราจารย์ +โหราศาสตร์ +โหล +โหลงโจ้ง +โหลด +โหลน +โหล่ +โหว +โหวกเหวก +โหวง +โหวด +โหวต +โหว่ +โหว้ +โห่ +โอ +โอก +โอกลาโฮมา +โอกลาโฮมาซิตี +โอกาส +โอกินาวา +โอคอตสก์ +โอฆ +โอฆชล +โองการ +โองโขดง +โอชะ +โอชา +โอฐ +โอด +โอดโอย +โอตตัปปะ +โอน +โอนิกซ์ +โอนเอน +โอบ +โอบี +โอปอ +โอพอล +โอภา +โอภาส +โอม +โอมาน +โอย +โอรส +โอรสา +โอละพ่อ +โอลิมปิก +โอลิมปิค +โอลิมเปีย +โอลิโกเคลส +โอวาท +โอษฐ +โอษฐชะ +โอษฐภัย +โอษฐ์ +โอสถ +โอสถรูป +โอสาน +โอหนอ +โอหัง +โอห์ม +โอห์มมิเตอร์ +โอฬาร +โอฬาริก +โอฬารึก +โออาฮู +โอเปก +โอเปค +โอเพ่น +โอเพ่นซอร์ส +โอเลี้ยง +โอเวอร์ +โอเอซิส +โอเอส +โอโซน +โอไฮโอ +โอ่ +โอ่ง +โอ่อวด +โอ่อ่า +โอ่โถง +โอ้ +โอ้ก +โอ้อวด +โอ้เอ้ +โอ้โถง +โอ้โลม +โอ้โฮ +โอ๊ก +โอ๊ย +โอ๋ +โฮ +โฮก +โฮกอือ +โฮกฮาก +โฮบาร์ต +โฮม +โฮมเพจ +โฮลเมียม +โฮสต์ +โฮสเตส +โฮะ +โฮเต็ล +โฮโนลูลู +ใกล้ +ใคร +ใคร่ +ใคร่ครวญ +ใจ +ใจกลาง +ใจขุ่น +ใจความ +ใจคอ +ใจง่าย +ใจจืด +ใจชื้น +ใจดำ +ใจดี +ใจต่ำ +ใจถึง +ใจน้อย +ใจบาน +ใจบุญ +ใจป้ำ +ใจฝ่อ +ใจมา +ใจมือ +ใจร้อน +ใจร้าย +ใจลอย +ใจสูง +ใจหาย +ใจอ่อน +ใจเด็ด +ใจเติบ +ใจเบา +ใจเพชร +ใจเย็น +ใจเร็ว +ใจเสาะ +ใจเสีย +ใจแข็ง +ใจแคบ +ใจแตก +ใจแป้ว +ใจโต +ใช่ +ใช้ +ใช้บน +ใช้สอย +ใช้ใบ +ใช้ได้ +ใด +ใต้ +ใต้ดิน +ใต้ถุน +ใต้เท้า +ใน +ในกรม +ในหลวง +ในไส้ +ใบ +ใบขน +ใบขนุน +ใบจอง +ใบฎีกา +ใบดาล +ใบดำ +ใบตราส่ง +ใบตอง +ใบตาล +ใบทอง +ใบนาก +ใบบอก +ใบบุญ +ใบปก +ใบปรือ +ใบปลิว +ใบพัด +ใบระกา +ใบรับ +ใบลา +ใบสอ +ใบสัจ +ใบสั่ง +ใบหน้า +ใบหุ้น +ใบเงิน +ใบเบิก +ใบแข็ง +ใบแดง +ใบแทรก +ใบโพ +ใบไม้ +ใบ้ +ใฝ่ +ใฝ่ต่ำ +ใฝ่ฝัน +ใฝ่สูง +ใฝ่ใจ +ใย +ใยฟ้า +ใยยอง +ใยหิน +ใส +ใส่ +ใส่ยา +ใส่ใจ +ใส่ไฟ +ใส่ไส้ +ใหญ่ +ใหม่ +ใหลตาย +ให้ +ให้การ +ให้ท่า +ให้หา +ไก +ไกด์ +ไกพัล +ไกร +ไกรพ +ไกรลาส +ไกรศร +ไกรศรี +ไกรสร +ไกล +ไกลโคเจน +ไกล่ +ไกว +ไกวัล +ไกเกอร์เคาน์เตอร์ +ไก่ +ไก่กอม +ไก่ชน +ไก่นา +ไก่ป่า +ไก่ฟ้า +ไก่โห่ +ไก่ไห้ +ไก้ +ไก๊ +ไก๊ด์ +ไก๋ +ไก๋แดง +ไข +ไขกระดูก +ไขข้อ +ไขควง +ไขรา +ไขว่ +ไขว้ +ไขว้เ +ไขษย +ไขสันหลัง +ไขสือ +ไขหู +ไข่ +ไข่ดัน +ไข่น้ำ +ไข่ปลา +ไข่มุก +ไข่หิน +ไข่แหน +ไข้ +ไข้กาฬ +ไข้ปอดบวม +ไข้ป่า +ไข้พิษ +ไข้หัว +ไข้แดด +ไข้ใจ +ไค +ไคยาไนต์ +ไครโอไลต์ +ไคร้ +ไคล +ไคลคลา +ไคลเอ็นต์ +ไคลแมกซ์ +ไคลโนคลอร์ +ไคลโนซอยไซต์ +ไคลโนแอนสตาไทต์ +ไคล้ +ไควรี่ +ไคแอสโทไลต์ +ไคโร +ไค้ +ไง +ไง้ +ไจ +ไจร +ไจ้ +ไจ้ๆ +ไฉน +ไฉเฉ +ไฉไล +ไช +ไชนะ +ไชย +ไชยทิศ +ไชยวาน +ไชยา +ไชยเภท +ไชเอน +ไชโย +ไซ +ไซคลาดิส +ไซชู +ไซต์ +ไซนัส +ไซนาไนต์ +ไซน์ +ไซบีเรีย +ไซปรัส +ไซปัน +ไซยาไนด์ +ไซรอส +ไซรัป +ไซร้ +ไซส์ +ไซเกิล +ไซเบอร์ +ไซเรน +ไซโค +ไซโคลน +ไซโล +ไซโลมิเลน +ไซ่ง่อน +ไซ้ +ได +ไดนามิก +ไดนาโม +ไดนาไมต์ +ไดมอนด์ +ไดรว์ +ไดรเวอร์ +ไดร์ฟ +ไดออปเทส +ไดออปไซด์ +ไดอะทอไมต์ +ไดอะล็อก +ไดอะล็อกบ็อกซ์ +ไดอะล็อค +ไดอะแกรม +ไดอัล +ไดอาน่า +ไดอารี +ไดอารี่ +ไดเจสท์ +ไดเรกตริกซ์ +ไดเรกทอรี +ไดเรกทอรี่ +ไดเร็กทอรี +ไดเร็คเตอร์ +ไดเร็คโทรี +ไดเอ็ท +ไดแซ็กคาไรด์ +ไดแอลเลจ +ไดแอสพอร์ +ไดโนเสาร์ +ได้ +ได้การ +ได้ที +ได้ที่ +ได้ท่า +ได้ยิน +ได้สติ +ได้แก่ +ได้ใจ +ไต +ไตปลา +ไตร +ไตรกลีเซอไรด์ +ไตรตรา +ไตรทศ +ไตรทิพ +ไตรปิฎก +ไตรภพ +ไตรภาคี +ไตรภูมิ +ไตรมาส +ไตรมิตร +ไตรย +ไตรรงค์ +ไตรรัตน์ +ไตรรัตน์นาราม +ไตรลักษณ์ +ไตรวัฏ +ไตรสิกขา +ไตรเพท +ไตรโลก +ไตร่ตรอง +ไตเติล +ไต่ +ไต่คู้ +ไต่ถาม +ไต่ลวด +ไต่สวน +ไต่ไม้ +ไต้ +ไต้ก๋ง +ไต้ฝุ่น +ไต้หวัน +ไต้ไฟ +ไต๋ +ไถ +ไถกลบ +ไถง +ไถดะ +ไถนา +ไถย +ไถล +ไถแปร +ไถ่ +ไถ่ถอน +ไถ่บาป +ไถ้ +ไถ้ก๋ง +ไท +ไทกอ +ไททะโนแมกนีไทต์ +ไททะไนต์ +ไททันออไจต์ +ไทฟอยด์ +ไทย +ไทยดำ +ไทยทาน +ไทยธรรม +ไทยยานนท์ +ไทยรักไทย +ไทยรัฐ +ไทยร่มเย็น +ไทยวิจิตรศิลป์ +ไทยหลง +ไทยไดมารู +ไทร +ไทรงาม +ไทรดิไมต์ +ไทรทอง +ไทรน้อย +ไทรบุรี +ไทรอยด์ +ไทรอัมฟ์ +ไทรโยค +ไทร์ +ไทวะ +ไทเทรต +ไทเทเนียม +ไทเป +ไทแรนท์ +ไท้ +ไน +ไนจีเรีย +ไนต์คลับ +ไนลอน +ไนล์ +ไนเจอร์ +ไนโตรเจน +ไนโรบี +ไนโอเบียม +ไบต์ +ไบนารี +ไบรท์ +ไบออส +ไบเซกซ์ชัวล์ +ไบเซคชัน +ไบเบิล +ไบโทว์ไนต์ +ไบโอไทต์ +ไบ่ๆ +ไป +ไปทุ่ง +ไปป์ +ไปย +ไปยกา +ไปยาล +ไปยิกา +ไปรษณียบรรณ +ไปรษณียบัตร +ไปรษณียภัณฑ์ +ไปรษณียวัตถุ +ไปรษณียากร +ไปรษณีย์ +ไปรอา +ไปรเวท +ไปลาด +ไปล่ +ไปศาจ +ไปศาจี +ไป่ +ไป๋ +ไผ +ไผท +ไผทอุดมศึกษา +ไผ่ +ไผ่ผัง +ไผ่สิงห์โต +ไผ่เงิน +ไฝ +ไพ +ไพก้า +ไพคา +ไพจิตร +ไพชน +ไพฑูรย์ +ไพที +ไพนท์ +ไพบูลย์ +ไพป๊อก +ไพพรรณ +ไพมอก +ไพม้า +ไพร +ไพรจิตร +ไพรชน +ไพรฑูรย์ +ไพรที +ไพรบึง +ไพรมารี่ +ไพรวัน +ไพรสัณฑ์ +ไพรส์ +ไพรอกซีน +ไพรัช +ไพราร์จีไรต์ +ไพรำ +ไพริน +ไพรี +ไพรู +ไพรเวต +ไพร่ +ไพร่พล +ไพร่สม +ไพล +ไพลอต +ไพลิน +ไพลินสนธิ +ไพล่ +ไพศาข +ไพศาล +ไพศาลี +ไพสพ +ไพสิฐ +ไพหาร +ไพเพิด +ไพเรทรัม +ไพเราะ +ไพเศษ +ไพโดร +ไพโรคลอร์ +ไพโรจน์ +ไพโรป +ไพโรฟิลไลต์ +ไพโรมอร์ไฟต์ +ไพโรลูไซต์ +ไพไรต์ +ไพ่ +ไพ่ป๊อก +ไพ่ไฟ +ไฟ +ไฟฉาย +ไฟท์ +ไฟธาตุ +ไฟนัล +ไฟฟ้า +ไฟฟ้ากระแส +ไฟฟ้าสถิต +ไฟร์วอลล์ +ไฟลท์ +ไฟล์ +ไฟเบอร์ +ไฟแช็ก +ไฟแนนซ์ +ไฟโบรไลต์ +ไภริน +ไมกา +ไมครอน +ไมตรี +ไมตรีจิต +ไมตรีภาพ +ไมยราบ +ไมลิบดีนัม +ไมล์ +ไมเกรน +ไมเนอร์ +ไมโกนอส +ไมโคร +ไมโครกรัม +ไมโครซอฟต์ +ไมโครฟิล์ม +ไมโครมิเตอร์ +ไมโครลิตร +ไมโครเพอร์ไทต์ +ไมโครเมตร +ไมโครเวฟ +ไมโครโฟน +ไมโครไคลน์ +ไมโครไลต์ +ไม่ +ไม่ทัน +ไม่มี +ไม่รู้ +ไม่สู้ +ไม่ใช่ +ไม้ +ไม้กง +ไม้กวาด +ไม้ดัด +ไม้ดำ +ไม้ตรี +ไม้ตาย +ไม้นวม +ไม้บรรทัด +ไม้ผัด +ไม้มืด +ไม้มือ +ไม้ยมก +ไม้ยาว +ไม้ลอย +ไม้วา +ไม้สอย +ไม้สูง +ไม้อัด +ไม้เอก +ไม้แก่น +ไม้แดง +ไม้โท +ไม้โพ +ไม้โอ +ไม้ไผ่ +ไม้ไล่ +ไย +ไยดี +ไยไพ +ไยไย +ไย่ +ไร +ไรฟัน +ไรย์ +ไรเฟิล +ไร่ +ไร้ +ไลท์เตอร์ +ไลท์เวท +ไลน์ +ไลน์เฮฟวี่เวท +ไลน์แมน +ไลบรารี +ไลบีเรีย +ไลฟ์ +ไลมอไนต์ +ไลย +ไลลา +ไลออน +ไลเซนส์ +ไลเบรริ +ไลเลย +ไลแลค +ไลไล้ +ไล่ +ไล่กวด +ไล่น้ำ +ไล่เลียง +ไล่เลี่ย +ไล้ +ไว +ไวกิง +ไวกูณฐ์ +ไวฑูรย์ +ไวทย +ไวทย์ +ไวท์ +ไวนเตย +ไวน์ +ไวพจน์ +ไวยากรณ์ +ไวยาวัจกร +ไวยาวัจมัย +ไวรัส +ไววรรณ +ไวศย +ไวษณพ +ไวเบรชั่น +ไวโอมิง +ไวโอลิน +ไวโอเล็ต +ไวไฟ +ไว้ +ไว้ตัว +ไว้ยศ +ไว้ลาย +ไว้อาลัย +ไว้ใจ +ไศล +ไศวะ +ไส +ไสย +ไสยศาสตร์ +ไสยา +ไสยาสน์ +ไสยเวท +ไสร้ +ไสว +ไสวตาแตง +ไสวสุขสม +ไสวสุวรรณ +ไสหัว +ไส้ +ไส้กรอก +ไส้ตัน +ไส้ติ่ง +ไส้ศึก +ไส้อั่ว +ไส้เดือน +ไส้ไก่ +ไห +ไหซอง +ไหน +ไหปลาร้า +ไหม +ไหมทอง +ไหม้ +ไหรณย์ +ไหรัณย์ +ไหร่ +ไหล +ไหลน้ำ +ไหล่ +ไหล่ทวีป +ไหว +ไหว้ +ไหหลำ +ไห่ +ไห้ +ไอ +ไอคอน +ไอซแลนด์ +ไอดาโฮ +ไอที +ไอน์สไตเนียม +ไอบีเอ็ม +ไอพ่น +ไอยรา +ไอยเรศ +ไอรอน +ไอราวัณ +ไอริช +ไอร์แลนด์ +ไอร์แลนด์เหนือ +ไอร์แลนด์ใต้ +ไอวอรีโคสต์ +ไอศกรีม +ไอศวรรย์ +ไอศูรย์ +ไอษสวรรค์ +ไอออน +ไอออส +ไอโซโทป +ไอโดเครส +ไอโอดีน +ไอโอวา +ไอโอเนียน +ไอ้ +ไฮดรา +ไฮตี +ไฮยาซินท์ +ไฮยาไลต์ +ไฮเทค +ไฮเพอร์สทีน +ไฮโกรมิเตอร์ +ไฮโดรคาร์บอน +ไฮโดรซินไคต์ +ไฮโดรมิเตอร์ +ไฮโดรเจน +ไฮโดรเจนซัลไฟด์ +ไฮโดรเจนเพอร์ออกไซด์ +ไฮโล +ไฮไฟ diff --git a/icuSources/data/brkitr/word.txt b/icuSources/data/brkitr/word.txt index 1fdaa3a0..7257f94a 100644 --- a/icuSources/data/brkitr/word.txt +++ b/icuSources/data/brkitr/word.txt @@ -1,13 +1,17 @@ # -# Copyright (C) 2002-2004, International Business Machines Corporation +# Copyright (C) 2002-2006, International Business Machines Corporation # and others. All Rights Reserved. # # file: word.txt # # ICU Word Break Rules # See Unicode Standard Annex #29. -# These rules are based on Version 4.1 draft, dated 2004-11-11 +# These rules are based on Unicode Version 5.0 0 +# Includes post Unicode 5.0 change to treat Japanese half width voicing marks +# as Extend # +# Note: Updates to word.txt will usually need to be merged into +# word_POSIX.txt and word_ja.txt also. ############################################################################## # @@ -17,90 +21,85 @@ !!chain; -$Katakana = [[:Script = KATAKANA:] - [:name = VERTICAL KANA REPEAT MARK:] - [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK:] - [:name = VERTICAL KANA REPEAT MARK UPPER HALF:] - [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF:] - [:name = VERTICAL KANA REPEAT MARK LOWER HALF:] - [:name = KATAKANA-HIRAGANA VOICED SOUND MARK:] - [:name = KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK:] - [:name = KATAKANA-HIRAGANA DOUBLE HYPHEN:] - [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:] - [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]]; - - -$ALetter = [[:Alphabetic:] [:name= HEBREW PUNCTUATION GERESH:] - - [:Ideographic:] - - $Katakana - - [:Script = Hiragana:] - - [:Script = Lao:] - - [:Grapheme_Extend = TRUE:]]; - -$MidLetter = [[:name = APOSTROPHE:] [:name = MIDDLE DOT:] - [:name = HEBREW PUNCTUATION GERSHAYIM:] - [:name = RIGHT SINGLE QUOTATION MARK:] - [:name = HYPHENATION POINT:] - [:name = COLON:]]; - - -$MidNum = [[:LineBreak = Infix_Numeric:] - [:name = COLON:]]; -$Numeric = [[:Nd:][:name = ARABIC DECIMAL SEPARATOR:][:name = ARABIC THOUSANDS SEPARATOR:]]; -$ExtendNumLet = [[:Connector_Punctuation:] - - [:name = KATAKANA MIDDLE DOT:] - - [:name = HALFWIDTH KATAKANA MIDDLE DOT:]]; - - # # Character Class Definitions. -# The names are those from TR29. # +$VoiceMarks = [\uff9e\uff9f]; +$Format = [\p{Word_Break = Format}]; +$Katakana = [\p{Word_Break = Katakana}-$VoiceMarks]; +$ALetter = [\p{Word_Break = ALetter}]; +$MidLetter = [\p{Word_Break = MidLetter}]; +$MidNum = [\p{Word_Break = MidNum}]; +$Numeric = [\p{Word_Break = Numeric}]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; + + $CR = \u000d; $LF = \u000a; -$Extend = [[:Grapheme_Extend = TRUE:]]; -$Control = [[:Zl:] [:Zp:] [:Cc:] [:Cf:] - $Extend]; -$Format = [[:Cf:] - $Extend]; +$Extend = [\p{Grapheme_Cluster_Break = Extend}$VoiceMarks]; +$Control = [\p{Grapheme_Cluster_Break = Control}]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; +$ALetterPlus = [$ALetter [$dictionary-$Extend-$Control]]; + + +# +# Rules 3 Grapheme Clusters behave like their first char. +# Rule 4 Ignore trailing Format characters (Also see note in TR 29) +# +$KatakanaEx = $Katakana ($Extend | $Format)*; +$ALetterEx = $ALetterPlus ($Extend | $Format)*; +$MidLetterEx = $MidLetter ($Extend | $Format)*; +$MidNumEx = $MidNum ($Extend | $Format)*; +$NumericEx = $Numeric ($Extend | $Format)*; +$ExtendNumLetEx = $ExtendNumLet ($Extend | $Format)*; + $Hiragana = [:Hiragana:]; $Ideographic = [:IDEOGRAPHIC:]; - -$ALetterEx = $ALetter $Extend*; -$NumericEx = $Numeric $Extend*; -$MidNumEx = $MidNum $Extend*; -$MidLetterEx = $MidLetter $Extend*; -$KatakanaEx = $Katakana $Extend*; -$ExtendNumLetEx = $ExtendNumLet $Extend*; +$HiraganaEx = $Hiragana ($Extend | $Format)*; +$IdeographicEx = $Ideographic ($Extend | $Format)*; ## ------------------------------------------------- !!forward; -# Rule 3 - don't break grapheme clusters. -# see character breaks +# Rule 3 - CR x LF +# see character breaks. + +$CR $LF ($Extend | $Format)*; + +# Rule 4 - ignore Format and Extend characters, except when they appear at the beginning +# of a region of Text. The rule here comes into play when the start of text +# begins with a group of Format chars, or with a "word" consisting of a single +# char that is not in any of the listed word break categories followed by +# format char(s). +.? ($Extend | $Format)+; + -$CR $LF; -#[^$Control] $Extend*; -#$NumericEx $Extend* {100}; -#$ALetterEx $Extend* {200}; -[^$Control] $Extend+; $NumericEx {100}; $ALetterEx {200}; $KatakanaEx {300}; +$HiraganaEx {300}; +$IdeographicEx {400}; # rule 5 -$ALetterEx $Format* $ALetterEx {200}; +$ALetterEx $ALetterEx {200}; # rule 6 and 7 -$ALetterEx $Format* $MidLetterEx $Format* $ALetterEx {200}; +$ALetterEx $MidLetterEx $ALetterEx {200}; # rule 8 -$NumericEx $Format* $NumericEx {100}; +$NumericEx $NumericEx {100}; # rule 9 @@ -108,28 +107,26 @@ $ALetterEx $Format* $NumericEx {200}; # rule 10 -$NumericEx $Format* $ALetterEx {200}; +$NumericEx $ALetterEx {200}; # rule 11 and 12 -$NumericEx $Format* $MidNumEx $Format* $NumericEx {100}; +$NumericEx $MidNumEx $NumericEx {100}; # rule 13 -$KatakanaEx $Format* $KatakanaEx {300}; -$Hiragana $Extend* {300}; -$Ideographic $Extend* {400}; +$KatakanaEx $KatakanaEx {300}; # rule 13a/b -$ALetterEx $Format* $ExtendNumLetEx {200}; # (13a) -$NumericEx $Format* $ExtendNumLetEx {100}; # (13a) -$KatakanaEx $Format* $ExtendNumLetEx {300}; # (13a) -$ExtendNumLetEx $Format* $ExtendNumLetEx{200}; # (13a) +$ALetterEx $ExtendNumLetEx {200}; # (13a) +$NumericEx $ExtendNumLetEx {100}; # (13a) +$KatakanaEx $ExtendNumLetEx {300}; # (13a) +$ExtendNumLetEx $ExtendNumLetEx{200}; # (13a) -$ExtendNumLetEx $Format* $ALetterEx {200}; # (13b) -$ExtendNumLetEx $Format* $NumericEx {100}; # (13b) -$ExtendNumLetEx $Format* $KatakanaEx {300}; # (13b) +$ExtendNumLetEx $ALetterEx {200}; # (13b) +$ExtendNumLetEx $NumericEx {100}; # (13b) +$ExtendNumLetEx $KatakanaEx {300}; # (13b) @@ -137,100 +134,81 @@ $ExtendNumLetEx $Format* $KatakanaEx {300}; # (13b) !!reverse; -$BackALetterEx = $Extend* $ALetter; -$BackNumericEx = $Extend* $Numeric; -$BackMidNumEx = $Extend* $MidNum; -$BackMidLetterEx = $Extend* $MidLetter; -$BackKatakanaEx = $Extend* $Katakana; -$BackExtendNumLetEx= $Extend* $ExtendNumLet; - -$LF $CR; +$BackALetterEx = ($Format | $Extend)* $ALetterPlus; +$BackNumericEx = ($Format | $Extend)* $Numeric; +$BackMidNumEx = ($Format | $Extend)* $MidNum; +$BackMidLetterEx = ($Format | $Extend)* $MidLetter; +$BackKatakanaEx = ($Format | $Extend)* $Katakana; +$BackExtendNumLetEx= ($Format | $Extend)* $ExtendNumLet; -# see character breaks +# rule 3 +($Format | $Extend)* $LF $CR; -$Extend* [^$Control]; +# rule 4 +($Format | $Extend)* .?; # rule 5 -$BackALetterEx $Format* $BackALetterEx; +$BackALetterEx $BackALetterEx; # rule 6 and 7 -$BackALetterEx $Format* $BackMidLetterEx $Format* $BackALetterEx; +$BackALetterEx $BackMidLetterEx $BackALetterEx; # rule 8 -$BackNumericEx $Format* $BackNumericEx; +$BackNumericEx $BackNumericEx; # rule 9 -$BackNumericEx $Format* $BackALetterEx; +$BackNumericEx $BackALetterEx; # rule 10 -$BackALetterEx $Format* $BackNumericEx; +$BackALetterEx $BackNumericEx; # rule 11 and 12 -$BackNumericEx $Format* $BackMidNumEx $Format* $BackNumericEx; +$BackNumericEx $BackMidNumEx $BackNumericEx; # rule 13 -$BackKatakanaEx $Format* $BackKatakanaEx; +$BackKatakanaEx $BackKatakanaEx; # rules 13 a/b # -($BackALetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx) $Format* $BackExtendNumLetEx; -$BackExtendNumLetEx $Format* ($BackALetterEx | $BackNumericEx | $BackKatakanaEx); +($BackALetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx) $BackExtendNumLetEx; +$BackExtendNumLetEx ($BackALetterEx | $BackNumericEx | $BackKatakanaEx); ## ------------------------------------------------- !!safe_reverse; # rule 3 -$Extend+ [^$Extend]; -$Extend+; # comes into play when buffer _begins_ with an $Extend+. - -# rule 4 -$Format+ $BackALetterEx; -$Format+ $BackNumericEx; -$Format+ $BackMidLetterEx; -$Format+ $BackMidNumEx; -$Format+ $BackKatakanaEx; -$Format+ $BackExtendNumLetEx; - +($Extend | $Format)+ .?; # rule 6 -$MidLetter $Format* $BackALetterEx; +$MidLetter $BackALetterEx; # rule 11 -$MidNum $Format* $BackNumericEx; +$MidNum $BackNumericEx; + +# For dictionary-based break +$dictionary $dictionary; ## ------------------------------------------------- !!safe_forward; -# rule 3 -$Extend+; - # rule 4 -$Extend* $Format+ $ALetterEx; -$Extend* $Format+ $NumericEx; -$Extend* $Format+ $MidLetterEx; -$Extend* $Format+ $MidNumEx; -$Extend* $Format+ $KatakanaEx; -$Extend* $Format+ $ExtendNumLetEx; - -$Extend+ $Format* $ALetterEx; -$Extend+ $Format* $NumericEx; -$Extend+ $Format* $MidLetterEx; -$Extend+ $Format* $MidNumEx; -$Extend+ $Format* $KatakanaEx; -$Extend+ $Format* $ExtendNumLetEx; +($Extend | $Format)+ .?; # rule 6 -$MidLetterEx $Format* $ALetterEx; +$MidLetterEx $ALetterEx; # rule 11 -$MidNumEx $Format* $NumericEx; +$MidNumEx $NumericEx; + +# For dictionary-based break +$dictionary $dictionary; diff --git a/icuSources/data/brkitr/word_POSIX.txt b/icuSources/data/brkitr/word_POSIX.txt index dc58f9a2..c62ce5c9 100644 --- a/icuSources/data/brkitr/word_POSIX.txt +++ b/icuSources/data/brkitr/word_POSIX.txt @@ -1,13 +1,17 @@ # -# Copyright (C) 2002-2004, International Business Machines Corporation +# Copyright (C) 2002-2006, International Business Machines Corporation # and others. All Rights Reserved. # -# file: word_POSIX.txt +# file: word.txt # -# ICU Word Break Rules +# ICU Word Break Rules, POSIX locale. # See Unicode Standard Annex #29. -# These rules are based on Version 4.1 draft, dated 2004-11-11 +# These rules are based on Unicode Version 5.0 0 +# Includes post Unicode 5.0 change to treat Japanese half width voicing marks +# as Extend # +# Note: Updates to word.txt will usually need to be merged into +# word_POSIX.txt and word_ja.txt also. ############################################################################## # @@ -17,89 +21,85 @@ !!chain; -$Katakana = [[:Script = KATAKANA:] - [:name = VERTICAL KANA REPEAT MARK:] - [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK:] - [:name = VERTICAL KANA REPEAT MARK UPPER HALF:] - [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF:] - [:name = VERTICAL KANA REPEAT MARK LOWER HALF:] - [:name = KATAKANA-HIRAGANA VOICED SOUND MARK:] - [:name = KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK:] - [:name = KATAKANA-HIRAGANA DOUBLE HYPHEN:] - [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:] - [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]]; - - -$ALetter = [[:Alphabetic:] [:name= HEBREW PUNCTUATION GERESH:] - - [:Ideographic:] - - $Katakana - - [:Script = Hiragana:] - - [:Script = Lao:] - - [:Grapheme_Extend = TRUE:]]; - -$MidLetter = [[:name = APOSTROPHE:] [:name = MIDDLE DOT:] - [:name = HEBREW PUNCTUATION GERSHAYIM:] - [:name = RIGHT SINGLE QUOTATION MARK:] - [:name = HYPHENATION POINT:]]; - - -$MidNum = [[:LineBreak = Infix_Numeric:]]; -$Numeric = [[:Nd:][:name = ARABIC DECIMAL SEPARATOR:][:name = ARABIC THOUSANDS SEPARATOR:]]; -$ExtendNumLet = [[:Connector_Punctuation:] - - [:name = KATAKANA MIDDLE DOT:] - - [:name = HALFWIDTH KATAKANA MIDDLE DOT:]]; - - # # Character Class Definitions. -# The names are those from TR29. # +$VoiceMarks = [\uff9e\uff9f]; +$Format = [\p{Word_Break = Format}]; +$Katakana = [\p{Word_Break = Katakana}-$VoiceMarks]; +$ALetter = [\p{Word_Break = ALetter}]; +$MidLetter = [\p{Word_Break = MidLetter} - [ \:]]; +$MidNum = [\p{Word_Break = MidNum}]; +$Numeric = [\p{Word_Break = Numeric}]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; + + $CR = \u000d; $LF = \u000a; -$Extend = [[:Grapheme_Extend = TRUE:]]; -$Control = [[:Zl:] [:Zp:] [:Cc:] [:Cf:] - $Extend]; -$Format = [[:Cf:] - $Extend]; +$Extend = [\p{Grapheme_Cluster_Break = Extend}$VoiceMarks]; +$Control = [\p{Grapheme_Cluster_Break = Control}]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; +$ALetterPlus = [$ALetter [$dictionary-$Extend-$Control]]; + + +# +# Rules 3 Grapheme Clusters behave like their first char. +# Rule 4 Ignore trailing Format characters (Also see note in TR 29) +# +$KatakanaEx = $Katakana ($Extend | $Format)*; +$ALetterEx = $ALetterPlus ($Extend | $Format)*; +$MidLetterEx = $MidLetter ($Extend | $Format)*; +$MidNumEx = $MidNum ($Extend | $Format)*; +$NumericEx = $Numeric ($Extend | $Format)*; +$ExtendNumLetEx = $ExtendNumLet ($Extend | $Format)*; + $Hiragana = [:Hiragana:]; $Ideographic = [:IDEOGRAPHIC:]; - -$ALetterEx = $ALetter $Extend*; -$NumericEx = $Numeric $Extend*; -$MidNumEx = $MidNum $Extend*; -$MidLetterEx = $MidLetter $Extend*; -$KatakanaEx = $Katakana $Extend*; -$ExtendNumLetEx = $ExtendNumLet $Extend*; +$HiraganaEx = $Hiragana ($Extend | $Format)*; +$IdeographicEx = $Ideographic ($Extend | $Format)*; ## ------------------------------------------------- !!forward; -# Rule 3 - don't break grapheme clusters. -# see character breaks +# Rule 3 - CR x LF +# see character breaks. + +$CR $LF ($Extend | $Format)*; + +# Rule 4 - ignore Format and Extend characters, except when they appear at the beginning +# of a region of Text. The rule here comes into play when the start of text +# begins with a group of Format chars, or with a "word" consisting of a single +# char that is not in any of the listed word break categories followed by +# format char(s). +.? ($Extend | $Format)+; + -$CR $LF; -#[^$Control] $Extend*; -#$NumericEx $Extend* {100}; -#$ALetterEx $Extend* {200}; -[^$Control] $Extend+; $NumericEx {100}; $ALetterEx {200}; $KatakanaEx {300}; +$HiraganaEx {300}; +$IdeographicEx {400}; # rule 5 -$ALetterEx $Format* $ALetterEx {200}; +$ALetterEx $ALetterEx {200}; # rule 6 and 7 -$ALetterEx $Format* $MidLetterEx $Format* $ALetterEx {200}; +$ALetterEx $MidLetterEx $ALetterEx {200}; # rule 8 -$NumericEx $Format* $NumericEx {100}; +$NumericEx $NumericEx {100}; # rule 9 @@ -107,28 +107,26 @@ $ALetterEx $Format* $NumericEx {200}; # rule 10 -$NumericEx $Format* $ALetterEx {200}; +$NumericEx $ALetterEx {200}; # rule 11 and 12 -$NumericEx $Format* $MidNumEx $Format* $NumericEx {100}; +$NumericEx $MidNumEx $NumericEx {100}; # rule 13 -$KatakanaEx $Format* $KatakanaEx {300}; -$Hiragana $Extend* {300}; -$Ideographic $Extend* {400}; +$KatakanaEx $KatakanaEx {300}; # rule 13a/b -$ALetterEx $Format* $ExtendNumLetEx {200}; # (13a) -$NumericEx $Format* $ExtendNumLetEx {100}; # (13a) -$KatakanaEx $Format* $ExtendNumLetEx {300}; # (13a) -$ExtendNumLetEx $Format* $ExtendNumLetEx{200}; # (13a) +$ALetterEx $ExtendNumLetEx {200}; # (13a) +$NumericEx $ExtendNumLetEx {100}; # (13a) +$KatakanaEx $ExtendNumLetEx {300}; # (13a) +$ExtendNumLetEx $ExtendNumLetEx{200}; # (13a) -$ExtendNumLetEx $Format* $ALetterEx {200}; # (13b) -$ExtendNumLetEx $Format* $NumericEx {100}; # (13b) -$ExtendNumLetEx $Format* $KatakanaEx {300}; # (13b) +$ExtendNumLetEx $ALetterEx {200}; # (13b) +$ExtendNumLetEx $NumericEx {100}; # (13b) +$ExtendNumLetEx $KatakanaEx {300}; # (13b) @@ -136,100 +134,81 @@ $ExtendNumLetEx $Format* $KatakanaEx {300}; # (13b) !!reverse; -$BackALetterEx = $Extend* $ALetter; -$BackNumericEx = $Extend* $Numeric; -$BackMidNumEx = $Extend* $MidNum; -$BackMidLetterEx = $Extend* $MidLetter; -$BackKatakanaEx = $Extend* $Katakana; -$BackExtendNumLetEx= $Extend* $ExtendNumLet; - -$LF $CR; +$BackALetterEx = ($Format | $Extend)* $ALetterPlus; +$BackNumericEx = ($Format | $Extend)* $Numeric; +$BackMidNumEx = ($Format | $Extend)* $MidNum; +$BackMidLetterEx = ($Format | $Extend)* $MidLetter; +$BackKatakanaEx = ($Format | $Extend)* $Katakana; +$BackExtendNumLetEx= ($Format | $Extend)* $ExtendNumLet; -# see character breaks +# rule 3 +($Format | $Extend)* $LF $CR; -$Extend* [^$Control]; +# rule 4 +($Format | $Extend)* .?; # rule 5 -$BackALetterEx $Format* $BackALetterEx; +$BackALetterEx $BackALetterEx; # rule 6 and 7 -$BackALetterEx $Format* $BackMidLetterEx $Format* $BackALetterEx; +$BackALetterEx $BackMidLetterEx $BackALetterEx; # rule 8 -$BackNumericEx $Format* $BackNumericEx; +$BackNumericEx $BackNumericEx; # rule 9 -$BackNumericEx $Format* $BackALetterEx; +$BackNumericEx $BackALetterEx; # rule 10 -$BackALetterEx $Format* $BackNumericEx; +$BackALetterEx $BackNumericEx; # rule 11 and 12 -$BackNumericEx $Format* $BackMidNumEx $Format* $BackNumericEx; +$BackNumericEx $BackMidNumEx $BackNumericEx; # rule 13 -$BackKatakanaEx $Format* $BackKatakanaEx; +$BackKatakanaEx $BackKatakanaEx; # rules 13 a/b # -($BackALetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx) $Format* $BackExtendNumLetEx; -$BackExtendNumLetEx $Format* ($BackALetterEx | $BackNumericEx | $BackKatakanaEx); +($BackALetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx) $BackExtendNumLetEx; +$BackExtendNumLetEx ($BackALetterEx | $BackNumericEx | $BackKatakanaEx); ## ------------------------------------------------- !!safe_reverse; # rule 3 -$Extend+ [^$Extend]; -$Extend+; # comes into play when buffer _begins_ with an $Extend+. - -# rule 4 -$Format+ $BackALetterEx; -$Format+ $BackNumericEx; -$Format+ $BackMidLetterEx; -$Format+ $BackMidNumEx; -$Format+ $BackKatakanaEx; -$Format+ $BackExtendNumLetEx; - +($Extend | $Format)+ .?; # rule 6 -$MidLetter $Format* $BackALetterEx; +$MidLetter $BackALetterEx; # rule 11 -$MidNum $Format* $BackNumericEx; +$MidNum $BackNumericEx; + +# For dictionary-based break +$dictionary $dictionary; ## ------------------------------------------------- !!safe_forward; -# rule 3 -$Extend+; - # rule 4 -$Extend* $Format+ $ALetterEx; -$Extend* $Format+ $NumericEx; -$Extend* $Format+ $MidLetterEx; -$Extend* $Format+ $MidNumEx; -$Extend* $Format+ $KatakanaEx; -$Extend* $Format+ $ExtendNumLetEx; - -$Extend+ $Format* $ALetterEx; -$Extend+ $Format* $NumericEx; -$Extend+ $Format* $MidLetterEx; -$Extend+ $Format* $MidNumEx; -$Extend+ $Format* $KatakanaEx; -$Extend+ $Format* $ExtendNumLetEx; +($Extend | $Format)+ .?; # rule 6 -$MidLetterEx $Format* $ALetterEx; +$MidLetterEx $ALetterEx; # rule 11 -$MidNumEx $Format* $NumericEx; +$MidNumEx $NumericEx; + +# For dictionary-based break +$dictionary $dictionary; diff --git a/icuSources/data/brkitr/word_ja.txt b/icuSources/data/brkitr/word_ja.txt index d36b2492..a8bafa35 100644 --- a/icuSources/data/brkitr/word_ja.txt +++ b/icuSources/data/brkitr/word_ja.txt @@ -1,13 +1,17 @@ # -# Copyright (C) 2002-2004, International Business Machines Corporation +# Copyright (C) 2002-2006, International Business Machines Corporation # and others. All Rights Reserved. # # file: word_ja.txt # # ICU Word Break Rules # See Unicode Standard Annex #29. -# These rules are based on Version 4.1 draft, dated 2004-11-11 +# These rules are based on Unicode Version 5.0 0 +# Includes post Unicode 5.0 change to treat Japanese half width voicing marks +# as Extend # +# Note: Updates to word.txt will usually need to be merged into +# word_POSIX.txt and word_ja.txt also. ############################################################################## # @@ -17,78 +21,69 @@ !!chain; -$Katakana = [[:Script = KATAKANA:] - [:name = VERTICAL KANA REPEAT MARK:] - [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK:] - [:name = VERTICAL KANA REPEAT MARK UPPER HALF:] - [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF:] - [:name = VERTICAL KANA REPEAT MARK LOWER HALF:] - [:name = KATAKANA-HIRAGANA VOICED SOUND MARK:] - [:name = KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK:] - [:name = KATAKANA-HIRAGANA DOUBLE HYPHEN:] - [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:] - [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:] - [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]]; - - -$ALetter = [[:Alphabetic:] [:name= HEBREW PUNCTUATION GERESH:] - - [:Ideographic:] - - $Katakana - - [:Script = Hiragana:] - - [:Script = Lao:] - - [:Grapheme_Extend = TRUE:]]; - -$MidLetter = [[:name = APOSTROPHE:] [:name = MIDDLE DOT:] - [:name = HEBREW PUNCTUATION GERSHAYIM:] - [:name = RIGHT SINGLE QUOTATION MARK:] - [:name = HYPHENATION POINT:] - [:name = COLON:]]; - - -$MidNum = [[:LineBreak = Infix_Numeric:] - [:name = COLON:]]; -$Numeric = [[:Nd:][:name = ARABIC DECIMAL SEPARATOR:][:name = ARABIC THOUSANDS SEPARATOR:]]; -$ExtendNumLet = [[:Connector_Punctuation:] - - [:name = KATAKANA MIDDLE DOT:] - - [:name = HALFWIDTH KATAKANA MIDDLE DOT:]]; - - # # Character Class Definitions. -# The names are those from TR29. # +$VoiceMarks = [\uff9e\uff9f]; +$Format = [\p{Word_Break = Format}]; +$Katakana = [\p{Word_Break = Katakana}-$VoiceMarks]; +$ALetter = [\p{Word_Break = ALetter}]; +$MidLetter = [\p{Word_Break = MidLetter}]; +$MidNum = [\p{Word_Break = MidNum}]; +$Numeric = [\p{Word_Break = Numeric}]; +$ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; + + $CR = \u000d; $LF = \u000a; -$Extend = [[:Grapheme_Extend = TRUE:]]; -$Control = [[:Zl:] [:Zp:] [:Cc:] [:Cf:] - $Extend]; -$Format = [[:Cf:] - $Extend]; +$Extend = [\p{Grapheme_Cluster_Break = Extend}$VoiceMarks]; +$Control = [\p{Grapheme_Cluster_Break = Control}]; + +# Dictionary character set, for triggering language-based break engines. Currently +# limited to LineBreak=Complex_Context. Note that this set only works in Unicode +# 5.0 or later as the definition of Complex_Context was corrected to include all +# characters requiring dictionary break. + +$dictionary = [:LineBreak = Complex_Context:]; +$ALetterPlus = [$ALetter [$dictionary-$Extend-$Control]]; + + +# +# Rules 3 Grapheme Clusters behave like their first char. +# Rule 4 Ignore trailing Format characters (Also see note in TR 29) +# +$KatakanaEx = $Katakana ($Extend | $Format)*; +$ALetterEx = $ALetterPlus ($Extend | $Format)*; +$MidLetterEx = $MidLetter ($Extend | $Format)*; +$MidNumEx = $MidNum ($Extend | $Format)*; +$NumericEx = $Numeric ($Extend | $Format)*; +$ExtendNumLetEx = $ExtendNumLet ($Extend | $Format)*; + $Hiragana = [:Hiragana:]; $Ideographic = [:IDEOGRAPHIC:]; - -$ALetterEx = $ALetter $Extend*; -$NumericEx = $Numeric $Extend*; -$MidNumEx = $MidNum $Extend*; -$MidLetterEx = $MidLetter $Extend*; -$KatakanaEx = $Katakana $Extend*; -$HiraganaEx = $Hiragana $Extend*; -$IdeographicEx = $Ideographic $Extend*; -$ExtendNumLetEx = $ExtendNumLet $Extend*; +$HiraganaEx = $Hiragana ($Extend | $Format)*; +$IdeographicEx = $Ideographic ($Extend | $Format)*; ## ------------------------------------------------- !!forward; -# Rule 3 - don't break grapheme clusters. -# see character breaks +# Rule 3 - CR x LF +# see character breaks. + +$CR $LF ($Extend | $Format)*; + +# Rule 4 - ignore Format and Extend characters, except when they appear at the beginning +# of a region of Text. The rule here comes into play when the start of text +# begins with a group of Format chars, or with a "word" consisting of a single +# char that is not in any of the listed word break categories followed by +# format char(s). +.? ($Extend | $Format)+; + -$CR $LF; -#[^$Control] $Extend*; -#$NumericEx $Extend* {100}; -#$ALetterEx $Extend* {200}; -[^$Control] $Extend+; $NumericEx {100}; $ALetterEx {200}; $KatakanaEx {300}; @@ -97,14 +92,14 @@ $IdeographicEx {400}; # rule 5 -$ALetterEx $Format* $ALetterEx {200}; +$ALetterEx $ALetterEx {200}; # rule 6 and 7 -$ALetterEx $Format* $MidLetterEx $Format* $ALetterEx {200}; +$ALetterEx $MidLetterEx $ALetterEx {200}; # rule 8 -$NumericEx $Format* $NumericEx {100}; +$NumericEx $NumericEx {100}; # rule 9 @@ -112,28 +107,28 @@ $ALetterEx $Format* $NumericEx {200}; # rule 10 -$NumericEx $Format* $ALetterEx {200}; +$NumericEx $ALetterEx {200}; # rule 11 and 12 -$NumericEx $Format* $MidNumEx $Format* $NumericEx {100}; +$NumericEx $MidNumEx $NumericEx {100}; # rule 13 -$KatakanaEx $Format* $KatakanaEx {300}; -$HiraganaEx $Format* $HiraganaEx {300}; -$IdeographicEx $Format* $IdeographicEx {400}; +$KatakanaEx $KatakanaEx {300}; +$HiraganaEx $HiraganaEx {300}; +$IdeographicEx $IdeographicEx {400}; # rule 13a/b -$ALetterEx $Format* $ExtendNumLetEx {200}; # (13a) -$NumericEx $Format* $ExtendNumLetEx {100}; # (13a) -$KatakanaEx $Format* $ExtendNumLetEx {300}; # (13a) -$ExtendNumLetEx $Format* $ExtendNumLetEx{200}; # (13a) +$ALetterEx $ExtendNumLetEx {200}; # (13a) +$NumericEx $ExtendNumLetEx {100}; # (13a) +$KatakanaEx $ExtendNumLetEx {300}; # (13a) +$ExtendNumLetEx $ExtendNumLetEx{200}; # (13a) -$ExtendNumLetEx $Format* $ALetterEx {200}; # (13b) -$ExtendNumLetEx $Format* $NumericEx {100}; # (13b) -$ExtendNumLetEx $Format* $KatakanaEx {300}; # (13b) +$ExtendNumLetEx $ALetterEx {200}; # (13b) +$ExtendNumLetEx $NumericEx {100}; # (13b) +$ExtendNumLetEx $KatakanaEx {300}; # (13b) @@ -141,110 +136,85 @@ $ExtendNumLetEx $Format* $KatakanaEx {300}; # (13b) !!reverse; -$BackALetterEx = $Extend* $ALetter; -$BackNumericEx = $Extend* $Numeric; -$BackMidNumEx = $Extend* $MidNum; -$BackMidLetterEx = $Extend* $MidLetter; -$BackKatakanaEx = $Extend* $Katakana; -$BackHiraganaEx = $Extend* $Hiragana; -$BackIdeographicEx = $Extend* $Ideographic; -$BackExtendNumLetEx= $Extend* $ExtendNumLet; - -$LF $CR; +$BackALetterEx = ($Format | $Extend)* $ALetterPlus; +$BackNumericEx = ($Format | $Extend)* $Numeric; +$BackMidNumEx = ($Format | $Extend)* $MidNum; +$BackMidLetterEx = ($Format | $Extend)* $MidLetter; +$BackKatakanaEx = ($Format | $Extend)* $Katakana; +$BackHiraganaEx = ($Format | $Extend)* $Hiragana; +$BackIdeographicEx = ($Format | $Extend)* $Ideographic; +$BackExtendNumLetEx= ($Format | $Extend)* $ExtendNumLet; -# see character breaks +# rule 3 +($Format | $Extend)* $LF $CR; -$Extend* [^$Control]; +# rule 4 +($Format | $Extend)* .?; # rule 5 -$BackALetterEx $Format* $BackALetterEx; +$BackALetterEx $BackALetterEx; # rule 6 and 7 -$BackALetterEx $Format* $BackMidLetterEx $Format* $BackALetterEx; +$BackALetterEx $BackMidLetterEx $BackALetterEx; # rule 8 -$BackNumericEx $Format* $BackNumericEx; +$BackNumericEx $BackNumericEx; # rule 9 -$BackNumericEx $Format* $BackALetterEx; +$BackNumericEx $BackALetterEx; # rule 10 -$BackALetterEx $Format* $BackNumericEx; +$BackALetterEx $BackNumericEx; # rule 11 and 12 -$BackNumericEx $Format* $BackMidNumEx $Format* $BackNumericEx; +$BackNumericEx $BackMidNumEx $BackNumericEx; # rule 13 -$BackKatakanaEx $Format* $BackKatakanaEx; -$BackHiraganaEx $Format* $BackHiraganaEx; -$BackIdeographicEx $Format* $BackIdeographicEx; +$BackKatakanaEx $BackKatakanaEx; +$BackHiraganaEx $BackHiraganaEx; +$BackIdeographicEx $BackIdeographicEx; # rules 13 a/b # -($BackALetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx) $Format* $BackExtendNumLetEx; -$BackExtendNumLetEx $Format* ($BackALetterEx | $BackNumericEx | $BackKatakanaEx); +($BackALetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx) $BackExtendNumLetEx; +$BackExtendNumLetEx ($BackALetterEx | $BackNumericEx | $BackKatakanaEx); ## ------------------------------------------------- !!safe_reverse; # rule 3 -$Extend+ [^$Extend]; -$Extend+; # comes into play when buffer _begins_ with an $Extend+. - -# rule 4 -$Format+ $BackALetterEx; -$Format+ $BackNumericEx; -$Format+ $BackMidLetterEx; -$Format+ $BackMidNumEx; -$Format+ $BackKatakanaEx; -$Format+ $BackHiraganaEx; -$Format+ $BackIdeographicEx; -$Format+ $BackExtendNumLetEx; - +($Extend | $Format)+ .?; # rule 6 -$MidLetter $Format* $BackALetterEx; +$MidLetter $BackALetterEx; # rule 11 -$MidNum $Format* $BackNumericEx; +$MidNum $BackNumericEx; + +# For dictionary-based break +$dictionary $dictionary; ## ------------------------------------------------- !!safe_forward; -# rule 3 -$Extend+; - # rule 4 -$Extend* $Format+ $ALetterEx; -$Extend* $Format+ $NumericEx; -$Extend* $Format+ $MidLetterEx; -$Extend* $Format+ $MidNumEx; -$Extend* $Format+ $KatakanaEx; -$Extend* $Format+ $HiraganaEx; -$Extend* $Format+ $IdeographicEx; -$Extend* $Format+ $ExtendNumLetEx; - -$Extend+ $Format* $ALetterEx; -$Extend+ $Format* $NumericEx; -$Extend+ $Format* $MidLetterEx; -$Extend+ $Format* $MidNumEx; -$Extend+ $Format* $KatakanaEx; -$Extend+ $Format* $HiraganaEx; -$Extend+ $Format* $IdeographicEx; -$Extend+ $Format* $ExtendNumLetEx; +($Extend | $Format)+ .?; # rule 6 -$MidLetterEx $Format* $ALetterEx; +$MidLetterEx $ALetterEx; # rule 11 -$MidNumEx $Format* $NumericEx; \ No newline at end of file +$MidNumEx $NumericEx; + +# For dictionary-based break +$dictionary $dictionary; diff --git a/icuSources/data/brkitr/word_th.txt b/icuSources/data/brkitr/word_th.txt deleted file mode 100644 index d551d5db..00000000 --- a/icuSources/data/brkitr/word_th.txt +++ /dev/null @@ -1,178 +0,0 @@ -# Copyright (c) 2002-2003, International Business Machines Corporation and -# others. All Rights Reserved. -# -# word.txt Word Breaking Rules for ICU Rules Based Break Iterator. -# - - -$Hiragana = [[:L:] & [:Hira:]]; -$Katakana = [[:L:] & [:Kana:]]; - -# -# Definition of $Ideographic is from TR14, Line Breaking. -# -$Ideographic = - [ \u1100-\u1159 \u115F \u2E80-\u2E99 \u2E9B-\u2EF3 \u2F00-\u2FD5 \u2FF0-\u2FFB - \u3000 \u3003-\u3004 \u3006-\u3007 \u3012-\u3013 \u3020-\u3029 - \u3030-\u303A \u303D-\u303F \u3042 \u3044 \u3046 \u3048 \u304A-\u3062 - \u3064-\u3082 \u3084 \u3086 \u3088-\u308D \u308F-\u3094 \u309F - \u30A2 \u30A4 \u30A6 \u30A8 \u30AA-\u30C2 \u30C4-\u30E2 \u30E4 - \u30E6 \u30E8-\u30ED \u30EF-\u30F4 \u30F7-\u30FA \u30FC \u30FE-\u30FF - \u3105-\u312C \u3131-\u318E \u3190-\u31B7 \u3200-\u321C \u3220-\u3243 - \u3251-\u327B \u327F-\u32CB \u32D0-\u32FE \u3300-\u3376 \u337B-\u33DD - \u33E0-\u33FE \u3400-\u4DB5 \u4E00-\u9FA5 \uA000-\uA48C \uA490-\uA4C6 - \uAC00-\uD7A3 \uF900-\uFA2D \uFA30-\uFA6A \uFE30-\uFE34 \uFE45-\uFE46 - \uFE49-\uFE4F \uFE51 \uFE58 \uFE5F-\uFE66 \uFE68 \uFE6B \uFF02-\uFF03 - \uFF06-\uFF07 \uFF0A-\uFF0B \uFF0D \uFF0F-\uFF19 \uFF1C-\uFF1E - \uFF20-\uFF3A \uFF3C \uFF3E-\uFF5A \uFF5C \uFF5E \uFFE2-\uFFE4 - \U00020000-\U0002A6D6 \U0002F800-\U0002FA1D]; - -# -# These definitions are from the character break rules. -# -$CGJ = [\u034f]; #Combining Grapheme Joiner -$Link = [\u094D \u09CD \u0A4D \u0ACD \u0B4D \u0BCD \u0C4D \u0CCD \u0D4D \u0DCA \u0E3A \u1039 \u17D2]; -$NotControl = [^[:Zl:] [:Zp:] [:Cc:]]; #Line Separator, Paragraph Separtor, General Category == Control - -$Extend = # From UNIDATA/DerivedCoreProperties.txt - [\u0300-\u034E \u0360-\u036F \u0483-\u0486 \u0488-\u0489 \u0591-\u05A1 \u05A3-\u05B9 - \u05BB-\u05BD \u05BF \u05C1-\u05C2 \u05C4 \u064B-\u0655 \u0670 \u06D6-\u06DC - \u06DE \u06DF-\u06E4 \u06E7-\u06E8 \u06EA-\u06ED \u0711 \u0730-\u074A - \u07A6-\u07B0 \u0901-\u0902 \u0903 \u093C \u093E-\u0940 \u0941-\u0948 - \u0949-\u094C \u0951-\u0954 \u0962-\u0963 \u0981 \u0982-\u0983 \u09BC - \u09BE-\u09C0 \u09C1-\u09C4 \u09C7-\u09C8 \u09CB-\u09CC \u09D7 \u09E2-\u09E3 - \u0A02 \u0A3C \u0A3E-\u0A40 \u0A41-\u0A42 \u0A47-\u0A48 \u0A4B-\u0A4C - \u0A70-\u0A71 \u0A81-\u0A82 \u0A83 \u0ABC \u0ABE-\u0AC0 \u0AC1-\u0AC5 - \u0AC7-\u0AC8 \u0AC9 \u0ACB-\u0ACC \u0B01 \u0B02-\u0B03 \u0B3C \u0B3E - \u0B3F \u0B40 \u0B41-\u0B43 \u0B47-\u0B48 \u0B4B-\u0B4C \u0B56 \u0B57 - \u0B82 \u0BBE-\u0BBF \u0BC0 \u0BC1-\u0BC2 \u0BC6-\u0BC8 \u0BCA-\u0BCC \u0BD7 - \u0C01-\u0C03 \u0C3E-\u0C40 \u0C41-\u0C44 \u0C46-\u0C48 \u0C4A-\u0C4C - \u0C55-\u0C56 \u0C82-\u0C83 \u0CBE \u0CBF \u0CC0-\u0CC4 \u0CC6 - \u0CC7-\u0CC8 \u0CCA-\u0CCB \u0CCC \u0CD5-\u0CD6 \u0D02-\u0D03 \u0D3E-\u0D40 - \u0D41-\u0D43 \u0D46-\u0D48 \u0D4A-\u0D4C \u0D57 \u0D82-\u0D83 \u0DCF-\u0DD1 - \u0DD2-\u0DD4 \u0DD6 \u0DD8-\u0DDF \u0DF2-\u0DF3 \u0E31 \u0E34-\u0E39 - \u0E47-\u0E4E \u0EB1 \u0EB4-\u0EB9 \u0EBB-\u0EBC \u0EC8-\u0ECD \u0F18-\u0F19 - \u0F35 \u0F37 \u0F39 \u0F3E-\u0F3F \u0F71-\u0F7E \u0F7F \u0F80-\u0F84 - \u0F86-\u0F87 \u0F90-\u0F97 \u0F99-\u0FBC \u0FC6 \u102C \u102D-\u1030 \u1031 - \u1032 \u1036-\u1037 \u1038 \u1056-\u1057 \u1058-\u1059 \u1712-\u1714 - \u1732-\u1734 \u1752-\u1753 \u1772-\u1773 \u17B4-\u17B6 \u17B7-\u17BD - \u17BE-\u17C5 \u17C6 \u17C7-\u17C8 \u17C9-\u17D1 \u17D3 \u180B-\u180D - \u18A9 \u20D0-\u20DC \u20DD-\u20E0 \u20E1 \u20E2-\u20E4 \u20E5-\u20EA - \u302A-\u302F \u3099-\u309A \uFB1E \uFE00-\uFE0F \uFE20-\uFE23 \uFF9E-\uFF9F - \U0001D165-\U0001D166 \U0001D167-\U0001D169 \U0001D16D-\U0001D172 - \U0001D17B-\U0001D182 \U0001D185-\U0001D18B \U0001D1AA-\U0001D1AD]; - -# -# Korean, also taken from character break rules. -# -# -# Korean Syllable Sequences -# -$L = [\u1100-\u115f]; -$V = [\u1160-\u11a2]; -$T = [\u11a8-\u11f9]; -$LV = [ \uac00 \uac1c \uac38 \uac54 \uac70 \uac8c \uaca8 \uacc4 \uace0 \uacfc \uad18 \uad34 \uad50 \uad6c \uad88 \uada4 - \uadc0 \uaddc \uadf8 \uae14 \uae30 \uae4c \uae68 \uae84 \uaea0 \uaebc \uaed8 \uaef4 \uaf10 \uaf2c \uaf48 \uaf64 - \uaf80 \uaf9c \uafb8 \uafd4 \uaff0 \ub00c \ub028 \ub044 \ub060 \ub07c \ub098 \ub0b4 \ub0d0 \ub0ec \ub108 \ub124 - \ub140 \ub15c \ub178 \ub194 \ub1b0 \ub1cc \ub1e8 \ub204 \ub220 \ub23c \ub258 \ub274 \ub290 \ub2ac \ub2c8 \ub2e4 - \ub300 \ub31c \ub338 \ub354 \ub370 \ub38c \ub3a8 \ub3c4 \ub3e0 \ub3fc \ub418 \ub434 \ub450 \ub46c \ub488 \ub4a4 - \ub4c0 \ub4dc \ub4f8 \ub514 \ub530 \ub54c \ub568 \ub584 \ub5a0 \ub5bc \ub5d8 \ub5f4 \ub610 \ub62c \ub648 \ub664 - \ub680 \ub69c \ub6b8 \ub6d4 \ub6f0 \ub70c \ub728 \ub744 \ub760 \ub77c \ub798 \ub7b4 \ub7d0 \ub7ec \ub808 \ub824 - \ub840 \ub85c \ub878 \ub894 \ub8b0 \ub8cc \ub8e8 \ub904 \ub920 \ub93c \ub958 \ub974 \ub990 \ub9ac \ub9c8 \ub9e4 - \uba00 \uba1c \uba38 \uba54 \uba70 \uba8c \ubaa8 \ubac4 \ubae0 \ubafc \ubb18 \ubb34 \ubb50 \ubb6c \ubb88 \ubba4 - \ubbc0 \ubbdc \ubbf8 \ubc14 \ubc30 \ubc4c \ubc68 \ubc84 \ubca0 \ubcbc \ubcd8 \ubcf4 \ubd10 \ubd2c \ubd48 \ubd64 - \ubd80 \ubd9c \ubdb8 \ubdd4 \ubdf0 \ube0c \ube28 \ube44 \ube60 \ube7c \ube98 \ubeb4 \ubed0 \ubeec \ubf08 \ubf24 - \ubf40 \ubf5c \ubf78 \ubf94 \ubfb0 \ubfcc \ubfe8 \uc004 \uc020 \uc03c \uc058 \uc074 \uc090 \uc0ac \uc0c8 \uc0e4 - \uc100 \uc11c \uc138 \uc154 \uc170 \uc18c \uc1a8 \uc1c4 \uc1e0 \uc1fc \uc218 \uc234 \uc250 \uc26c \uc288 \uc2a4 - \uc2c0 \uc2dc \uc2f8 \uc314 \uc330 \uc34c \uc368 \uc384 \uc3a0 \uc3bc \uc3d8 \uc3f4 \uc410 \uc42c \uc448 \uc464 - \uc480 \uc49c \uc4b8 \uc4d4 \uc4f0 \uc50c \uc528 \uc544 \uc560 \uc57c \uc598 \uc5b4 \uc5d0 \uc5ec \uc608 \uc624 - \uc640 \uc65c \uc678 \uc694 \uc6b0 \uc6cc \uc6e8 \uc704 \uc720 \uc73c \uc758 \uc774 \uc790 \uc7ac \uc7c8 \uc7e4 - \uc800 \uc81c \uc838 \uc854 \uc870 \uc88c \uc8a8 \uc8c4 \uc8e0 \uc8fc \uc918 \uc934 \uc950 \uc96c \uc988 \uc9a4 - \uc9c0 \uc9dc \uc9f8 \uca14 \uca30 \uca4c \uca68 \uca84 \ucaa0 \ucabc \ucad8 \ucaf4 \ucb10 \ucb2c \ucb48 \ucb64 - \ucb80 \ucb9c \ucbb8 \ucbd4 \ucbf0 \ucc0c \ucc28 \ucc44 \ucc60 \ucc7c \ucc98 \uccb4 \uccd0 \uccec \ucd08 \ucd24 - \ucd40 \ucd5c \ucd78 \ucd94 \ucdb0 \ucdcc \ucde8 \uce04 \uce20 \uce3c \uce58 \uce74 \uce90 \uceac \ucec8 \ucee4 - \ucf00 \ucf1c \ucf38 \ucf54 \ucf70 \ucf8c \ucfa8 \ucfc4 \ucfe0 \ucffc \ud018 \ud034 \ud050 \ud06c \ud088 \ud0a4 - \ud0c0 \ud0dc \ud0f8 \ud114 \ud130 \ud14c \ud168 \ud184 \ud1a0 \ud1bc \ud1d8 \ud1f4 \ud210 \ud22c \ud248 \ud264 - \ud280 \ud29c \ud2b8 \ud2d4 \ud2f0 \ud30c \ud328 \ud344 \ud360 \ud37c \ud398 \ud3b4 \ud3d0 \ud3ec \ud408 \ud424 - \ud440 \ud45c \ud478 \ud494 \ud4b0 \ud4cc \ud4e8 \ud504 \ud520 \ud53c \ud558 \ud574 \ud590 \ud5ac \ud5c8 \ud5e4 - \ud600 \ud61c \ud638 \ud654 \ud670 \ud68c \ud6a8 \ud6c4 \ud6e0 \ud6fc \ud718 \ud734 \ud750 \ud76c \ud788 ]; -$LVT = [[\uac00-\ud7a3] - $LV]; -$Hangul_Sequence = ((($L+ $LV?) | ($L* $LV)) $V* $T* ) | ($L* $LVT $T*); - - -# -# Thai Dictionary Related Rules -# -$dictionary = [\u0e01-\u0e2e \u0e30-\u0e3a \u0e40-\u0e44 \u0e47-\u0e4e]; # this rule breaks the iterator with mixed Thai and English -$paiyannoi = [\u0e2f]; -$maiyamok = [\u0e46]; -$thai_etc = $paiyannoi \u0e25 $paiyannoi; - - -$dictionary+ ($paiyannoi? $maiyamok)?; -$dictionary+ $paiyannoi / ([^\u0e25 $maiyamok $Extend] | \u0e25[^$paiyannoi $Extend]); -$thai_etc; - - -# -# Definitions for building up Letters, so that breaks will not occur -# within a single letter (Grapheme Cluster). See the character break rules. -# -$LineBreak = [$Ideographic $Hiragana $Katakana]; -$Letter = [[[:L:] [:Sk:]] & [^$LineBreak $dictionary]]; -#$MidLetter = [\u0027 \u2019 \u0029 \u00ad \u05f3 \u05f4]; -$MidLetter = [\u0027 \u2019 \u003a \u0029 \u00ad \u05f3 \u05f4]; - -$Base = [^[:Cc:] [:Cf:] [:Cs:] [:Co:] [:Cn:] [:Zl:] [:Zp:] $Extend $Link $CGJ]; -$LetterBase = [:L:]; -$CGJSequence = $CGJ+ ($Base | $Hangul_Sequence); -$Join_Control = [\u200d-\u200e]; # Zero Width Joiner, Zero Width Non-Joiner -$LinkSequence = $Link+ $Extend* $Join_Control? $LetterBase; -$LetterEx = ($Letter | $Hangul_Sequence) $Extend* ((($LinkSequence | $CGJSequence) $Extend*)*); - - - -# -# Numeric Definitions -# TODO: More complete handling of $Extend combining chars. -# -$Numeric = [:Nd:]; #TODO remove FULL WIDTH -$NumericEx = $Numeric $Extend*; -$InfixNumeric = [\u002c \u002e \u003a \u003b \u0589]; -$PostfixNumeric = [\% \u00a2 \u00b0 \u2030 \u2031 \u2032-\u2037 \u20a7 - \u2103 \u2109 \u2126 \ufe6a \uff05 \uffe0]; -$PrefixNumeric = [[[:Sc:] \u002b \u005c \u00b1 \u2116 \u2212 \u2213 \-] - [$PostfixNumeric]]; - -$NumericPrefix = $PrefixNumeric $NumericEx ($InfixNumeric $NumericEx)?; -$NumericInterior = $NumericEx ($InfixNumeric? $NumericEx)*; - - -# -# The Big Rule. Gloms everything together. -# -$NumericPrefix? (($LetterEx ($MidLetter $LetterEx)*)? $NumericInterior?)* ($NumericInterior $PostfixNumeric)?; - -# -# Lesser rules -# -($Hiragana $Extend*)*; -($Katakana $Extend*)*; -$NotControl $Extend*; -\r\n; -.; - -# -# Reverse Rules. Back up over any of the chars that can group together. -# (Reverse rules do not need to be exact; they can back up a bit too far, -# but must back up at least enough.) -# -! ( $Letter | $MidLetter | $Numeric | $PrefixNumeric | $Join_Control | - $CGJ | $Link | $InfixNumeric | $PostfixNumeric | $Extend | - $T | $V | $L | $LV | $LVT)*; -! ($Hiragana | $Extend)*; -! ($Katakana | $Extend)*; -! $Extend* .; -! \n\r; -#!.*; - -! ($dictionary | $paiyannoi | $maiyamok | \u0e25)*; diff --git a/icuSources/data/build.xml b/icuSources/data/build.xml new file mode 100644 index 00000000..8677deb9 --- /dev/null +++ b/icuSources/data/build.xml @@ -0,0 +1,283 @@ + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + &icu-config; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + &icu-config; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icuSources/data/cldr-icu-readme.txt b/icuSources/data/cldr-icu-readme.txt new file mode 100644 index 00000000..f80107f2 --- /dev/null +++ b/icuSources/data/cldr-icu-readme.txt @@ -0,0 +1,58 @@ +# *************************************************************************** +# * +# * Copyright (C) 2005, International Business Machines +# * Corporation and others. All Rights Reserved. +# * +# *************************************************************************** + +Steps for building ICU data from CLDR: + +Users of CLDR: +1. Download cldrtools.zip from the CLDR website (http://www.unicode.org/cldr/repository_access.html) and unzip in a directory +2. Download cldr.zip from the CLDR website (same as above) and unzip in cldr directory +3. Check out ICU from ICU CVS repository http://www.ibm.com/software/globalization/icu/repository.jsp +4. Set the required environment variables + export JAVA_HOME=/java + export ANT_OPTS="-DCLDR_DTD_CACHE=/temp/cldrdtd" + export CLDR_DIR=/cldr + export CLDR_JAR=/cldr.jar + export ICU4C_DIR=/icu + export ICU4J_JAR=/icu4j.jar + export UTILITIES_JAR=/utilities.jar +5. Change directory to /icu/source/data/ +6. Enter command + /ant/bin/ant clean all + +Developers of CLDR: +1. Check out CLDR from the CVS repository http://www.unicode.org/cldr/repository_access.html and build the tools. +2. Check out ICU from ICU CVS repository http://www.ibm.com/software/globalization/icu/repository.jsp and build it. +3. Check out ICU4J from ICU CVS repository http://www.ibm.com/software/globalization/icu/repository.jsp and build it. +4. Set the required environment variables + export JAVA_HOME=/java + export ANT_OPTS="-DCLDR_DTD_CACHE=/temp/cldrdtd" + export CLDR_DIR=/cldr + export CLDR_CLASSES=/cldr/tools/java/classes + export ICU4C_DIR=/icu + export ICU4J_CLASSES=/icu4j/classes +5. Change directory to /icu/source/data/ +6. Enter command + /ant/bin/ant clean all + +Debugging in Eclipse: +1. From Eclipse select Run > Run from toolbar +2. Click New button +3. Go to Main tab and enter + Name: Ant_Launcher + Project: cldr + Main class: org.apache.tools.ant.launch.Launcher +4. Go to Arguments tab and enter + Program Arguments: -buildfile c:\work\cldr\tools\java\build.xml icu4c + VM Arguments: -classpath C:\work\apache-ant-1.6.1\lib\ant-launcher.jar + -Dant.home=C:\work\apache-ant-1.6.1 + -DCLDR_DTD_CACHE=/work/temp/cldrdtd/ +5. Go to Environment tag and create new variables + CLDR_DIR=/cldr + CLDR_CLASSES=/cldr/tools/java/classes + ICU4C_DIR=/work/icu + ICU4J_CLASSES=/icu4j/classes +6. Set a break point in CLDRBuild or the tool class that needs to be debugged. diff --git a/icuSources/data/coll/ar.txt b/icuSources/data/coll/ar.txt index d8961b14..4de339bd 100644 --- a/icuSources/data/coll/ar.txt +++ b/icuSources/data/coll/ar.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ar.xml +// * Source File:/common/collation/ar.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/ar.xml + * ICU source: /xml/collation/ar.xml */ ar{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{"&Ø©=ت"} - Version{"3.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/ar_AE.txt b/icuSources/data/coll/ar_AE.txt index 8a256685..f8c2b7e1 100644 --- a/icuSources/data/coll/ar_AE.txt +++ b/icuSources/data/coll/ar_AE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_BH.txt b/icuSources/data/coll/ar_BH.txt index 8ba84c54..e02ed7df 100644 --- a/icuSources/data/coll/ar_BH.txt +++ b/icuSources/data/coll/ar_BH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_DZ.txt b/icuSources/data/coll/ar_DZ.txt index a47fd0b2..fb4fa467 100644 --- a/icuSources/data/coll/ar_DZ.txt +++ b/icuSources/data/coll/ar_DZ.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_EG.txt b/icuSources/data/coll/ar_EG.txt index 3df7b395..e9f1f6c0 100644 --- a/icuSources/data/coll/ar_EG.txt +++ b/icuSources/data/coll/ar_EG.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_IQ.txt b/icuSources/data/coll/ar_IQ.txt index add1ed6e..9f87fa48 100644 --- a/icuSources/data/coll/ar_IQ.txt +++ b/icuSources/data/coll/ar_IQ.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_JO.txt b/icuSources/data/coll/ar_JO.txt index 12f2e2f6..631e859a 100644 --- a/icuSources/data/coll/ar_JO.txt +++ b/icuSources/data/coll/ar_JO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_KW.txt b/icuSources/data/coll/ar_KW.txt index 14ede807..d62e63c4 100644 --- a/icuSources/data/coll/ar_KW.txt +++ b/icuSources/data/coll/ar_KW.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_LB.txt b/icuSources/data/coll/ar_LB.txt index 1c9894ea..15cda346 100644 --- a/icuSources/data/coll/ar_LB.txt +++ b/icuSources/data/coll/ar_LB.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_LY.txt b/icuSources/data/coll/ar_LY.txt index 5e9c6393..260379a8 100644 --- a/icuSources/data/coll/ar_LY.txt +++ b/icuSources/data/coll/ar_LY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_MA.txt b/icuSources/data/coll/ar_MA.txt index e287ae85..44aed593 100644 --- a/icuSources/data/coll/ar_MA.txt +++ b/icuSources/data/coll/ar_MA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_OM.txt b/icuSources/data/coll/ar_OM.txt index 42f08ee3..3c2df553 100644 --- a/icuSources/data/coll/ar_OM.txt +++ b/icuSources/data/coll/ar_OM.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_QA.txt b/icuSources/data/coll/ar_QA.txt index d8efb9e1..a07f775f 100644 --- a/icuSources/data/coll/ar_QA.txt +++ b/icuSources/data/coll/ar_QA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_SA.txt b/icuSources/data/coll/ar_SA.txt index 4ba87355..3dd8b4ea 100644 --- a/icuSources/data/coll/ar_SA.txt +++ b/icuSources/data/coll/ar_SA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_SD.txt b/icuSources/data/coll/ar_SD.txt index e78f5ca9..3c90790b 100644 --- a/icuSources/data/coll/ar_SD.txt +++ b/icuSources/data/coll/ar_SD.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_SY.txt b/icuSources/data/coll/ar_SY.txt index b721c8ea..c335571f 100644 --- a/icuSources/data/coll/ar_SY.txt +++ b/icuSources/data/coll/ar_SY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_TN.txt b/icuSources/data/coll/ar_TN.txt index 6ab0dac6..59db8614 100644 --- a/icuSources/data/coll/ar_TN.txt +++ b/icuSources/data/coll/ar_TN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ar_YE.txt b/icuSources/data/coll/ar_YE.txt index 8b878e14..1e7a7ede 100644 --- a/icuSources/data/coll/ar_YE.txt +++ b/icuSources/data/coll/ar_YE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/as.txt b/icuSources/data/coll/as.txt new file mode 100644 index 00000000..a10628c7 --- /dev/null +++ b/icuSources/data/coll/as.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/as.xml +// * +// *************************************************************************** +as{ + Version{"1.1"} + collations{ + standard{ + Sequence{" [normalization on ]&ঔ<ং<ঁ<ঃ&[before 1]ত<ত্'\u200D'&হ<ক্ষ"} + Version{"1.4"} + } + } +} diff --git a/icuSources/data/coll/ar_IN.txt b/icuSources/data/coll/as_IN.txt similarity index 71% rename from icuSources/data/coll/ar_IN.txt rename to icuSources/data/coll/as_IN.txt index 463fd8bc..ddf7534c 100644 --- a/icuSources/data/coll/ar_IN.txt +++ b/icuSources/data/coll/as_IN.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** - * validSubLocale of "ar" + * validSubLocale of "as" */ -ar_IN{ +as_IN{ /** * so genrb doesn't issue warnings */ diff --git a/icuSources/data/coll/be.txt b/icuSources/data/coll/be.txt index aefcf90a..2eb255f3 100644 --- a/icuSources/data/coll/be.txt +++ b/icuSources/data/coll/be.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/be.xml +// * Source File:/common/collation/be.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/be.xml + * ICU source: /xml/collation/be.xml */ be{ - Version{"1.2"} + Version{"1.16"} collations:alias{"ru/collations"} } diff --git a/icuSources/data/coll/be_BY.txt b/icuSources/data/coll/be_BY.txt index 8a10293d..fa8216ff 100644 --- a/icuSources/data/coll/be_BY.txt +++ b/icuSources/data/coll/be_BY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/bg.txt b/icuSources/data/coll/bg.txt index 1bf7c4f0..e5d4a357 100644 --- a/icuSources/data/coll/bg.txt +++ b/icuSources/data/coll/bg.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/bg.xml +// * Source File:/common/collation/bg.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/bg.xml + * ICU source: /xml/collation/bg.xml */ bg{ - Version{"1.2"} + Version{"1.16"} collations:alias{"ru/collations"} } diff --git a/icuSources/data/coll/bg_BG.txt b/icuSources/data/coll/bg_BG.txt index d2e018c9..f8dcf783 100644 --- a/icuSources/data/coll/bg_BG.txt +++ b/icuSources/data/coll/bg_BG.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/bn.txt b/icuSources/data/coll/bn.txt new file mode 100644 index 00000000..c6d01c55 --- /dev/null +++ b/icuSources/data/coll/bn.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/bn.xml +// * +// *************************************************************************** +bn{ + Version{"1.1"} +} diff --git a/icuSources/data/coll/ca.txt b/icuSources/data/coll/ca.txt index ad5de732..c415045e 100644 --- a/icuSources/data/coll/ca.txt +++ b/icuSources/data/coll/ca.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ca.xml +// * Source File:/common/collation/ca.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/ca.xml + * ICU source: /xml/collation/ca.xml */ ca{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{" [backwards 2]&C/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/colfiles.mk b/icuSources/data/coll/colfiles.mk index f5554b0c..dd984530 100644 --- a/icuSources/data/coll/colfiles.mk +++ b/icuSources/data/coll/colfiles.mk @@ -1,4 +1,4 @@ -# * Copyright (C) 1997-2004, International Business Machines +# * Copyright (C) 1998-2006, International Business Machines # * Corporation and others. All Rights Reserved. # A list of txt's to build # Note: @@ -24,9 +24,10 @@ # # Generated by LDML2ICUConverter, from LDML source files. -# Aliases which do not have a corresponding xx.xml file (see deprecatedList.xml) -COLLATION_SYNTHETIC_ALIAS = de__PHONEBOOK.txt es__TRADITIONAL.txt hi__DIRECT.txt zh_TW_STROKE.txt\ - zh__PINYIN.txt +# Aliases which do not have a corresponding xx.xml file (see icu-config.xml & build.xml) +COLLATION_SYNTHETIC_ALIAS = de_.txt de__PHONEBOOK.txt es_.txt es__TRADITIONAL.txt\ + hi_.txt hi__DIRECT.txt in.txt in_ID.txt iw.txt\ + iw_IL.txt zh_.txt zh_TW_STROKE.txt zh__PINYIN.txt # All aliases (to not be included under 'installed'), but not including root. @@ -35,9 +36,9 @@ COLLATION_ALIAS_SOURCE = $(COLLATION_SYNTHETIC_ALIAS) # Empty locales, used for validSubLocale fallback. COLLATION_EMPTY_SOURCE = ar_AE.txt ar_BH.txt ar_DZ.txt ar_EG.txt\ - ar_IN.txt ar_IQ.txt ar_JO.txt ar_KW.txt ar_LB.txt\ - ar_LY.txt ar_MA.txt ar_OM.txt ar_QA.txt ar_SA.txt\ - ar_SD.txt ar_SY.txt ar_TN.txt ar_YE.txt be_BY.txt\ + ar_IQ.txt ar_JO.txt ar_KW.txt ar_LB.txt ar_LY.txt\ + ar_MA.txt ar_OM.txt ar_QA.txt ar_SA.txt ar_SD.txt\ + ar_SY.txt ar_TN.txt ar_YE.txt as_IN.txt be_BY.txt\ bg_BG.txt ca_ES.txt cs_CZ.txt da_DK.txt de_AT.txt\ de_BE.txt de_CH.txt de_DE.txt de_LU.txt el_GR.txt\ en_AU.txt en_BW.txt en_CA.txt en_GB.txt en_HK.txt\ @@ -57,24 +58,26 @@ COLLATION_EMPTY_SOURCE = ar_AE.txt ar_BH.txt ar_DZ.txt ar_EG.txt\ nb_NO.txt nl.txt nl_BE.txt nl_NL.txt nn_NO.txt\ om_ET.txt om_KE.txt pa_IN.txt pl_PL.txt ps_AF.txt\ pt.txt pt_BR.txt pt_PT.txt ro_RO.txt ru_RU.txt\ - ru_UA.txt sh_YU.txt sk_SK.txt sl_SI.txt sq_AL.txt\ + ru_UA.txt sh_BA.txt sh_YU.txt sk_SK.txt sl_SI.txt\ + sq_AL.txt sr_BA.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_YU.txt\ sr_YU.txt sv_FI.txt sv_SE.txt ta_IN.txt te_IN.txt\ th_TH.txt tr_TR.txt uk_UA.txt vi_VN.txt zh_CN.txt\ zh_SG.txt # Ordinary resources -COLLATION_SOURCE = $(COLLATION_EMPTY_SOURCE) ar.txt be.txt bg.txt ca.txt\ - cs.txt da.txt de.txt el.txt en.txt\ - en_BE.txt eo.txt es.txt et.txt fa.txt\ - fa_AF.txt fi.txt fo.txt fr.txt gu.txt\ - he.txt hi.txt hr.txt hu.txt is.txt\ - it.txt ja.txt kk.txt kl.txt kn.txt\ - ko.txt lt.txt lv.txt mk.txt ml.txt\ - mr.txt mt.txt nb.txt nn.txt om.txt\ - or.txt pa.txt pl.txt ps.txt ro.txt\ - ru.txt sh.txt sk.txt sl.txt sq.txt\ - sr.txt sv.txt ta.txt te.txt th.txt\ - tr.txt uk.txt vi.txt zh.txt zh_HK.txt\ - zh_Hant.txt zh_MO.txt zh_TW.txt +COLLATION_SOURCE = $(COLLATION_EMPTY_SOURCE) ar.txt as.txt be.txt bg.txt\ + bn.txt ca.txt cs.txt da.txt de.txt\ + el.txt en.txt en_BE.txt eo.txt es.txt\ + et.txt fa.txt fa_AF.txt fi.txt fo.txt\ + fr.txt gu.txt haw.txt he.txt hi.txt\ + hr.txt hu.txt is.txt it.txt ja.txt\ + kk.txt kl.txt kn.txt ko.txt kok.txt\ + lt.txt lv.txt mk.txt ml.txt mr.txt\ + mt.txt nb.txt nn.txt om.txt or.txt\ + pa.txt pl.txt ps.txt ro.txt ru.txt\ + sh.txt sk.txt sl.txt sq.txt sr.txt\ + sv.txt ta.txt te.txt th.txt tr.txt\ + uk.txt vi.txt zh.txt zh_HK.txt zh_Hant.txt\ + zh_MO.txt zh_TW.txt diff --git a/icuSources/data/coll/collocal.mk b/icuSources/data/coll/collocal.mk index eba76fb7..931a2ae5 100644 --- a/icuSources/data/coll/collocal.mk +++ b/icuSources/data/coll/collocal.mk @@ -1,6 +1,10 @@ # # Local Apple addition for locale resources -# Copyright (c) 2004 Apple Computer, Inc. All rights reserved. +# Copyright (c) 2004-2005, 2007 Apple Inc. All rights reserved. # -COLLATION_SOURCE_LOCAL = haw.txt +# ifeq "$(MINIMAL)" "YES" +# COLLATION_SOURCE = en.txt en_BE.txt es.txt fr.txt +# else +# COLLATION_SOURCE_LOCAL = +# endif diff --git a/icuSources/data/coll/cs.txt b/icuSources/data/coll/cs.txt index 3a3a3220..4bd9bf45 100644 --- a/icuSources/data/coll/cs.txt +++ b/icuSources/data/coll/cs.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/cs.xml +// * Source File:/common/collation/cs.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/cs.xml + * ICU source: /xml/collation/cs.xml */ cs{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{"&C<č<<<Č&H/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/da.txt b/icuSources/data/coll/da.txt index afa9ea7c..1448a708 100644 --- a/icuSources/data/coll/da.txt +++ b/icuSources/data/coll/da.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/da.xml +// * Source File:/common/collation/da.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/da.xml + * ICU source: /xml/collation/da.xml */ da{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -22,7 +22,7 @@ da{ "&[before 1]ʒ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<Ã¥<<<Å<<<" "aa<</icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/de.txt b/icuSources/data/coll/de.txt index 16c48a5e..9472fb3f 100644 --- a/icuSources/data/coll/de.txt +++ b/icuSources/data/coll/de.txt @@ -1,24 +1,24 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/de.xml +// * Source File:/common/collation/de.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/de.xml + * ICU source: /xml/collation/de.xml */ de{ - Version{"1.2"} + Version{"1.22"} collations{ phonebook{ Sequence{"&a<<æ/e<<ä/e&A<<Æ/E<<Ä/E&œ<<ö/e&Œ<<Ö/E&u<<ü/e&U<<Ü/E"} - Version{"2.0"} + Version{"1.4"} } standard{ Sequence{"&ae<<æ<<<Æ"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/de_.txt b/icuSources/data/coll/de_.txt new file mode 100644 index 00000000..b8f4ec07 --- /dev/null +++ b/icuSources/data/coll/de_.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * empty locale file for dependency checking + */ +de_{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/de_AT.txt b/icuSources/data/coll/de_AT.txt index 2d0189fe..6fb6c620 100644 --- a/icuSources/data/coll/de_AT.txt +++ b/icuSources/data/coll/de_AT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/de_BE.txt b/icuSources/data/coll/de_BE.txt index 19735aff..9dda8ab4 100644 --- a/icuSources/data/coll/de_BE.txt +++ b/icuSources/data/coll/de_BE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/de_CH.txt b/icuSources/data/coll/de_CH.txt index b6c1c6a1..4f1700a2 100644 --- a/icuSources/data/coll/de_CH.txt +++ b/icuSources/data/coll/de_CH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/de_DE.txt b/icuSources/data/coll/de_DE.txt index 1aac5eda..4bf93d85 100644 --- a/icuSources/data/coll/de_DE.txt +++ b/icuSources/data/coll/de_DE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/de_LU.txt b/icuSources/data/coll/de_LU.txt index a13ff303..bf74544a 100644 --- a/icuSources/data/coll/de_LU.txt +++ b/icuSources/data/coll/de_LU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/de__PHONEBOOK.txt b/icuSources/data/coll/de__PHONEBOOK.txt index f3a80ed7..ad8debce 100644 --- a/icuSources/data/coll/de__PHONEBOOK.txt +++ b/icuSources/data/coll/de__PHONEBOOK.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** de__PHONEBOOK{ diff --git a/icuSources/data/coll/el.txt b/icuSources/data/coll/el.txt index 3655f842..68e9cd65 100644 --- a/icuSources/data/coll/el.txt +++ b/icuSources/data/coll/el.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/el.xml +// * Source File:/common/collation/el.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/el.xml + * ICU source: /xml/collation/el.xml */ el{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{" [normalization on ]"} - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/el_GR.txt b/icuSources/data/coll/el_GR.txt index 68f4aae4..19b8b7c7 100644 --- a/icuSources/data/coll/el_GR.txt +++ b/icuSources/data/coll/el_GR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en.txt b/icuSources/data/coll/en.txt index 851a9231..7f2bc669 100644 --- a/icuSources/data/coll/en.txt +++ b/icuSources/data/coll/en.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/en.xml +// * Source File:/common/collation/en.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/en.xml + * ICU source: /xml/collation/en.xml */ en{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{"&ae<<æ<<<Æ"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/en_AU.txt b/icuSources/data/coll/en_AU.txt index fc21ff9f..f73251ff 100644 --- a/icuSources/data/coll/en_AU.txt +++ b/icuSources/data/coll/en_AU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_BE.txt b/icuSources/data/coll/en_BE.txt index 9908f0e8..93a44ba4 100644 --- a/icuSources/data/coll/en_BE.txt +++ b/icuSources/data/coll/en_BE.txt @@ -1,17 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/en_BE.xml +// * Source File:/common/collation/en_BE.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/en_BE.xml + */ en_BE{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{" [backwards 2]"} - Version{"1.0.1"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/en_BW.txt b/icuSources/data/coll/en_BW.txt index 1d8651b5..e82b34ae 100644 --- a/icuSources/data/coll/en_BW.txt +++ b/icuSources/data/coll/en_BW.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_CA.txt b/icuSources/data/coll/en_CA.txt index 9020b03a..ae18611a 100644 --- a/icuSources/data/coll/en_CA.txt +++ b/icuSources/data/coll/en_CA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_GB.txt b/icuSources/data/coll/en_GB.txt index ec7e32f8..4b07b65b 100644 --- a/icuSources/data/coll/en_GB.txt +++ b/icuSources/data/coll/en_GB.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_HK.txt b/icuSources/data/coll/en_HK.txt index 74e499e0..b8f22821 100644 --- a/icuSources/data/coll/en_HK.txt +++ b/icuSources/data/coll/en_HK.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_IE.txt b/icuSources/data/coll/en_IE.txt index dccb957e..131538a2 100644 --- a/icuSources/data/coll/en_IE.txt +++ b/icuSources/data/coll/en_IE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_IN.txt b/icuSources/data/coll/en_IN.txt index 7bef9550..35d69e24 100644 --- a/icuSources/data/coll/en_IN.txt +++ b/icuSources/data/coll/en_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_MT.txt b/icuSources/data/coll/en_MT.txt index 39b2ecf2..4def8502 100644 --- a/icuSources/data/coll/en_MT.txt +++ b/icuSources/data/coll/en_MT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_NZ.txt b/icuSources/data/coll/en_NZ.txt index fd349616..6ce1ae44 100644 --- a/icuSources/data/coll/en_NZ.txt +++ b/icuSources/data/coll/en_NZ.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_PH.txt b/icuSources/data/coll/en_PH.txt index d48337bb..204c8dc8 100644 --- a/icuSources/data/coll/en_PH.txt +++ b/icuSources/data/coll/en_PH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_SG.txt b/icuSources/data/coll/en_SG.txt index 9e1559dc..b2c9597a 100644 --- a/icuSources/data/coll/en_SG.txt +++ b/icuSources/data/coll/en_SG.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_US.txt b/icuSources/data/coll/en_US.txt index dbbf283c..7118d76f 100644 --- a/icuSources/data/coll/en_US.txt +++ b/icuSources/data/coll/en_US.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_US_POSIX.txt b/icuSources/data/coll/en_US_POSIX.txt index 2626c6a6..c4ddaa79 100644 --- a/icuSources/data/coll/en_US_POSIX.txt +++ b/icuSources/data/coll/en_US_POSIX.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_VI.txt b/icuSources/data/coll/en_VI.txt index fec55b7b..0f4344b0 100644 --- a/icuSources/data/coll/en_VI.txt +++ b/icuSources/data/coll/en_VI.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_ZA.txt b/icuSources/data/coll/en_ZA.txt index 0ac0b653..6617b49a 100644 --- a/icuSources/data/coll/en_ZA.txt +++ b/icuSources/data/coll/en_ZA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/en_ZW.txt b/icuSources/data/coll/en_ZW.txt index 45946e69..eaa411ce 100644 --- a/icuSources/data/coll/en_ZW.txt +++ b/icuSources/data/coll/en_ZW.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/eo.txt b/icuSources/data/coll/eo.txt index acb18cda..8ea360f9 100644 --- a/icuSources/data/coll/eo.txt +++ b/icuSources/data/coll/eo.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/eo.xml +// * Source File:/common/collation/eo.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/eo.xml + * ICU source: /xml/collation/eo.xml */ eo{ - Version{"1.2"} + Version{"1.18"} collations{ standard{ Sequence{"&C<ĉ<<<Ĉ&G<ĝ<<<Ĝ&H<Ä¥<<<Ĥ&J<ĵ<<<Ä´&S<ŝ<<<Ŝ&U<Å­<<<Ŭ"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/es.txt b/icuSources/data/coll/es.txt index 3ccdf234..aabc4e87 100644 --- a/icuSources/data/coll/es.txt +++ b/icuSources/data/coll/es.txt @@ -1,24 +1,24 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/es.xml +// * Source File:/common/collation/es.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/es.xml + * ICU source: /xml/collation/es.xml */ es{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{"&N<ñ<<<Ñ&ae<<æ<<<Æ"} - Version{"1.1"} + Version{"1.4"} } traditional{ Sequence{"&N<ñ<<<Ñ&C/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * empty locale file for dependency checking + */ +es_{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/es_AR.txt b/icuSources/data/coll/es_AR.txt index d4b2e442..4e8d0efa 100644 --- a/icuSources/data/coll/es_AR.txt +++ b/icuSources/data/coll/es_AR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_BO.txt b/icuSources/data/coll/es_BO.txt index 618ac07f..3774bf06 100644 --- a/icuSources/data/coll/es_BO.txt +++ b/icuSources/data/coll/es_BO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_CL.txt b/icuSources/data/coll/es_CL.txt index 600891c0..17045fe8 100644 --- a/icuSources/data/coll/es_CL.txt +++ b/icuSources/data/coll/es_CL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_CO.txt b/icuSources/data/coll/es_CO.txt index 7a539129..20312986 100644 --- a/icuSources/data/coll/es_CO.txt +++ b/icuSources/data/coll/es_CO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_CR.txt b/icuSources/data/coll/es_CR.txt index e11aaeb6..d90ab53e 100644 --- a/icuSources/data/coll/es_CR.txt +++ b/icuSources/data/coll/es_CR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_DO.txt b/icuSources/data/coll/es_DO.txt index d4da0f4a..56824862 100644 --- a/icuSources/data/coll/es_DO.txt +++ b/icuSources/data/coll/es_DO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_EC.txt b/icuSources/data/coll/es_EC.txt index ee65b77f..1330e4a9 100644 --- a/icuSources/data/coll/es_EC.txt +++ b/icuSources/data/coll/es_EC.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_ES.txt b/icuSources/data/coll/es_ES.txt index cf4a3613..4a77c736 100644 --- a/icuSources/data/coll/es_ES.txt +++ b/icuSources/data/coll/es_ES.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_GT.txt b/icuSources/data/coll/es_GT.txt index e415bf6c..67193d94 100644 --- a/icuSources/data/coll/es_GT.txt +++ b/icuSources/data/coll/es_GT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_HN.txt b/icuSources/data/coll/es_HN.txt index b75fe962..a3318f1a 100644 --- a/icuSources/data/coll/es_HN.txt +++ b/icuSources/data/coll/es_HN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_MX.txt b/icuSources/data/coll/es_MX.txt index de40cb68..0a066c26 100644 --- a/icuSources/data/coll/es_MX.txt +++ b/icuSources/data/coll/es_MX.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_NI.txt b/icuSources/data/coll/es_NI.txt index f7ca1999..d32dca87 100644 --- a/icuSources/data/coll/es_NI.txt +++ b/icuSources/data/coll/es_NI.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_PA.txt b/icuSources/data/coll/es_PA.txt index 06211bee..aab51391 100644 --- a/icuSources/data/coll/es_PA.txt +++ b/icuSources/data/coll/es_PA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_PE.txt b/icuSources/data/coll/es_PE.txt index 9bea6fc8..149cb972 100644 --- a/icuSources/data/coll/es_PE.txt +++ b/icuSources/data/coll/es_PE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_PR.txt b/icuSources/data/coll/es_PR.txt index 9137b081..56fa252b 100644 --- a/icuSources/data/coll/es_PR.txt +++ b/icuSources/data/coll/es_PR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_PY.txt b/icuSources/data/coll/es_PY.txt index 5ace4c23..5c5e0988 100644 --- a/icuSources/data/coll/es_PY.txt +++ b/icuSources/data/coll/es_PY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_SV.txt b/icuSources/data/coll/es_SV.txt index 98bfbded..3fa65144 100644 --- a/icuSources/data/coll/es_SV.txt +++ b/icuSources/data/coll/es_SV.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_US.txt b/icuSources/data/coll/es_US.txt index 07c56f69..08903176 100644 --- a/icuSources/data/coll/es_US.txt +++ b/icuSources/data/coll/es_US.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_UY.txt b/icuSources/data/coll/es_UY.txt index c6110e41..5173daa9 100644 --- a/icuSources/data/coll/es_UY.txt +++ b/icuSources/data/coll/es_UY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es_VE.txt b/icuSources/data/coll/es_VE.txt index 98c86653..c90e6746 100644 --- a/icuSources/data/coll/es_VE.txt +++ b/icuSources/data/coll/es_VE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/es__TRADITIONAL.txt b/icuSources/data/coll/es__TRADITIONAL.txt index a391baea..a624d063 100644 --- a/icuSources/data/coll/es__TRADITIONAL.txt +++ b/icuSources/data/coll/es__TRADITIONAL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** es__TRADITIONAL{ diff --git a/icuSources/data/coll/et.txt b/icuSources/data/coll/et.txt index b7a4126e..aa6c530f 100644 --- a/icuSources/data/coll/et.txt +++ b/icuSources/data/coll/et.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/et.xml +// * Source File:/common/collation/et.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/et.xml + * ICU source: /xml/collation/et.xml */ et{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -18,7 +18,7 @@ et{ "&v</icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fa.txt b/icuSources/data/coll/fa.txt index 5f53185e..15c963fa 100644 --- a/icuSources/data/coll/fa.txt +++ b/icuSources/data/coll/fa.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/fa.xml +// * Source File:/common/collation/fa.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/fa.xml + * ICU source: /xml/collation/fa.xml */ fa{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -22,7 +22,7 @@ fa{ "&ۏ<ه<<ە<<ہ<<Ø©<<ۃ<<ۀ<<Ú¾" "&ی<<ى<<ے<<ي<<ې<<ۑ<<ۍ<<ێ" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/fa_AF.txt b/icuSources/data/coll/fa_AF.txt index fc3a96bf..20923cd1 100644 --- a/icuSources/data/coll/fa_AF.txt +++ b/icuSources/data/coll/fa_AF.txt @@ -1,12 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/fa_AF.xml +// * Source File:/common/collation/fa_AF.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/fa_AF.xml + */ fa_AF{ - Version{"1.2"} + Version{"1.15"} collations:alias{"ps/collations"} } diff --git a/icuSources/data/coll/fa_IR.txt b/icuSources/data/coll/fa_IR.txt index d21c805e..61a4a84a 100644 --- a/icuSources/data/coll/fa_IR.txt +++ b/icuSources/data/coll/fa_IR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fi.txt b/icuSources/data/coll/fi.txt index eae63104..2b2cff2d 100644 --- a/icuSources/data/coll/fi.txt +++ b/icuSources/data/coll/fi.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/fi.xml +// * Source File:/common/collation/fi.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/fi.xml + * ICU source: /xml/collation/fi.xml */ fi{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{ @@ -21,7 +21,7 @@ fi{ "&Y<<ü<<<Ü<<ű<<<Å°" "&[before 1]ʒ<Ã¥<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø<<ő<<<Ő<<õ<<<Õ<<œ<<<Œ" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/fi_FI.txt b/icuSources/data/coll/fi_FI.txt index 9dbcdef3..c1e92591 100644 --- a/icuSources/data/coll/fi_FI.txt +++ b/icuSources/data/coll/fi_FI.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fo.txt b/icuSources/data/coll/fo.txt index 5ec13fea..0e73b3bf 100644 --- a/icuSources/data/coll/fo.txt +++ b/icuSources/data/coll/fo.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/fo.xml +// * Source File:/common/collation/fo.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/fo.xml + * ICU source: /xml/collation/fo.xml */ fo{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -21,7 +21,7 @@ fo{ "&[before 1]ʒ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<Ã¥<<<Å<<<" "aa<</icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fr.txt b/icuSources/data/coll/fr.txt index 017e4f13..886b23c9 100644 --- a/icuSources/data/coll/fr.txt +++ b/icuSources/data/coll/fr.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/fr.xml +// * Source File:/common/collation/fr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/fr.xml + * ICU source: /xml/collation/fr.xml */ fr{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{" [backwards 2]&ae<<æ<<<Æ"} - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/fr_BE.txt b/icuSources/data/coll/fr_BE.txt index 06173072..5ce5e9a4 100644 --- a/icuSources/data/coll/fr_BE.txt +++ b/icuSources/data/coll/fr_BE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fr_CA.txt b/icuSources/data/coll/fr_CA.txt index 0b7f8692..ea0e5b96 100644 --- a/icuSources/data/coll/fr_CA.txt +++ b/icuSources/data/coll/fr_CA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fr_CH.txt b/icuSources/data/coll/fr_CH.txt index d0b0cb1d..b6f881fc 100644 --- a/icuSources/data/coll/fr_CH.txt +++ b/icuSources/data/coll/fr_CH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fr_FR.txt b/icuSources/data/coll/fr_FR.txt index 3ae19af4..f36af69b 100644 --- a/icuSources/data/coll/fr_FR.txt +++ b/icuSources/data/coll/fr_FR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/fr_LU.txt b/icuSources/data/coll/fr_LU.txt index b3a86e91..5147af72 100644 --- a/icuSources/data/coll/fr_LU.txt +++ b/icuSources/data/coll/fr_LU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ga.txt b/icuSources/data/coll/ga.txt index 9c9af490..2234c95a 100644 --- a/icuSources/data/coll/ga.txt +++ b/icuSources/data/coll/ga.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ga_IE.txt b/icuSources/data/coll/ga_IE.txt index ae8d3853..18bbb1ac 100644 --- a/icuSources/data/coll/ga_IE.txt +++ b/icuSources/data/coll/ga_IE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/gu.txt b/icuSources/data/coll/gu.txt index 0a9f1b38..7e2c3965 100644 --- a/icuSources/data/coll/gu.txt +++ b/icuSources/data/coll/gu.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/gu.xml +// * Source File:/common/collation/gu.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/gu.xml + * ICU source: /xml/collation/gu.xml */ gu{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{" [normalization on ]&હ<઼<ઁ<ં<ઃ&ઽ<્"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/gu_IN.txt b/icuSources/data/coll/gu_IN.txt index 9fb65a7b..28375ac8 100644 --- a/icuSources/data/coll/gu_IN.txt +++ b/icuSources/data/coll/gu_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/haw.txt b/icuSources/data/coll/haw.txt index 6b6b3fb1..b80c5238 100644 --- a/icuSources/data/coll/haw.txt +++ b/icuSources/data/coll/haw.txt @@ -1,37 +1,31 @@ -// *************************************************************************** +// *************************************************************************** // * -// * Copyright (C) 2003-2004, International Business Machines -// * Corporation and others. All Rights Reserved. +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/haw.xml // * // *************************************************************************** -// Hawaiian language -// Based on data from Keola Donaghy, University of Hawaii -// Submitted by Deborah Goldsmith, Apple Computer, Inc. - -haw { - Version { "x0.2" } - collations { - standard { - Version { "1.1" } - Sequence { - "&a < e < i < o < u < h < k < l < m < n < p < w < \u02bb" - "&a <<< A" - "&e <<< E" - "&i <<< I" - "&o <<< O" - "&u <<< U" - "&h <<< H" - "&k <<< K" - "&l <<< L" - "&m <<< M" - "&n <<< N" - "&p <<< P" - "&w <<< W" - // This is the real alphabet - //"&a < e < i < o < u < h < k < l < m < n < p < w < \u02bb" - // or maybe - //"&u < h < k < l < m < n < p < w < \u02bb < b < c < d < f < g < j < q < r < s < t < v < x < y < z" +haw{ + Version{"1.4"} + collations{ + standard{ + Sequence{ + "&a/common/collation/he.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/he.xml + * ICU source: /xml/collation/he.xml */ he{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{" [normalization on ]"} - Version{"3.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/he_IL.txt b/icuSources/data/coll/he_IL.txt index 370471db..447ee728 100644 --- a/icuSources/data/coll/he_IL.txt +++ b/icuSources/data/coll/he_IL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/hi.txt b/icuSources/data/coll/hi.txt index fdd7e0eb..2b58187a 100644 --- a/icuSources/data/coll/hi.txt +++ b/icuSources/data/coll/hi.txt @@ -1,29 +1,29 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/hi.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/collation/hi.xml - */ -hi{ - Version{"1.2"} - collations{ - direct{ - Sequence{ - "&[last regular ]<ँ<ं<ः<अ<आ<इ<ई<उ<ऊ<ऋ<ऌ<ऍ<ऎ<ए<ऐ<ऑ<ऒ<ओ<औ<क<ख<ग<घ<ङ<च<छ" - "<ज<झ<ञ<ट<ठ<ड<ढ<ण<त<थ<द<ध<न<ऩ<प<फ<ब<भ<म<य<र<ऱ<ल<ळ<ऴ<व<श<ष<स<ह<़<ऽ<ा<ि" - "<ी<ु<ू<ृ<ॄ<ॅ<ॆ<े<ै<ॉ<ॊ<ो<ौ<्<ॐ<॑<॒<॓<॔<क़<ख़<ग़<ज़<ड़<ढ़<फ़<य़<ॠ<ॡ<ॢ" - "<ॣ<।<॥<०<१<२<३<४<५<६<७<८<९<॰" - } - Version{"1.0"} - } - standard{ - Sequence{" [normalization on ]&[before 1]0<ॐ<।<॥<॰&ह<़<ँ<ं<ः<॑<॒<॓<॔&ऽ<्"} - Version{"2.0"} - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/hi.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/collation/hi.xml + */ +hi{ + Version{"1.21"} + collations{ + direct{ + Sequence{ + "&[last regular ]<ँ<ं<ः<अ<आ<इ<ई<उ<ऊ<ऋ<ऌ<ऍ<ऎ<ए<ऐ<ऑ<ऒ<ओ<औ<क<ख<ग<घ<ङ<च<छ" + "<ज<झ<ञ<ट<ठ<ड<ढ<ण<त<थ<द<ध<न<ऩ<प<फ<ब<भ<म<य<र<ऱ<ल<ळ<ऴ<व<श<ष<स<ह<़<ऽ<ा<ि" + "<ी<ु<ू<ृ<ॄ<ॅ<ॆ<े<ै<ॉ<ॊ<ो<ौ<्<ॐ<॑<॒<॓<॔<क़<ख़<ग़<ज़<ड़<ढ़<फ़<य़<ॠ<ॡ<ॢ" + "<ॣ<।<॥<०<१<२<३<४<५<६<७<८<९<॰" + } + Version{"1.4"} + } + standard{ + Sequence{" [normalization on ]&[before 1]0<ॐ<।<॥<॰&ह<़<ँ<ं<ः<॑<॒<॓<॔&ऽ<्"} + Version{"1.4"} + } + } +} diff --git a/icuSources/data/coll/hi_.txt b/icuSources/data/coll/hi_.txt new file mode 100644 index 00000000..37afc8d8 --- /dev/null +++ b/icuSources/data/coll/hi_.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * empty locale file for dependency checking + */ +hi_{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/hi_IN.txt b/icuSources/data/coll/hi_IN.txt index c9fd7226..56e8a10d 100644 --- a/icuSources/data/coll/hi_IN.txt +++ b/icuSources/data/coll/hi_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/hi__DIRECT.txt b/icuSources/data/coll/hi__DIRECT.txt index 5f4b5221..0175139f 100644 --- a/icuSources/data/coll/hi__DIRECT.txt +++ b/icuSources/data/coll/hi__DIRECT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** hi__DIRECT{ diff --git a/icuSources/data/coll/hr.txt b/icuSources/data/coll/hr.txt index 0b732731..2d2e58d6 100644 --- a/icuSources/data/coll/hr.txt +++ b/icuSources/data/coll/hr.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/hr.xml +// * Source File:/common/collation/hr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/hr.xml + * ICU source: /xml/collation/hr.xml */ hr{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{ @@ -21,7 +21,7 @@ hr{ "&S<Å¡<<<Å " "&Z<ž<<<Ž" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/hr_HR.txt b/icuSources/data/coll/hr_HR.txt index 866b3016..5437e37d 100644 --- a/icuSources/data/coll/hr_HR.txt +++ b/icuSources/data/coll/hr_HR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/hu.txt b/icuSources/data/coll/hu.txt index b3b8bc98..793ba2a0 100644 --- a/icuSources/data/coll/hu.txt +++ b/icuSources/data/coll/hu.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/hu.xml +// * Source File:/common/collation/hu.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/hu.xml + * ICU source: /xml/collation/hu.xml */ hu{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -53,7 +53,7 @@ hu{ "&Zs<</icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/id.txt b/icuSources/data/coll/id.txt index 7db82db1..7de6a145 100644 --- a/icuSources/data/coll/id.txt +++ b/icuSources/data/coll/id.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/id_ID.txt b/icuSources/data/coll/id_ID.txt index 8db19050..770c0fb6 100644 --- a/icuSources/data/coll/id_ID.txt +++ b/icuSources/data/coll/id_ID.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/in.txt b/icuSources/data/coll/in.txt new file mode 100644 index 00000000..bd68a633 --- /dev/null +++ b/icuSources/data/coll/in.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +in{ + "%%ALIAS"{"id"} +} diff --git a/icuSources/data/coll/in_ID.txt b/icuSources/data/coll/in_ID.txt new file mode 100644 index 00000000..982d684d --- /dev/null +++ b/icuSources/data/coll/in_ID.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +in_ID{ + "%%ALIAS"{"id_ID"} +} diff --git a/icuSources/data/coll/is.txt b/icuSources/data/coll/is.txt index 113d6a9e..466b3487 100644 --- a/icuSources/data/coll/is.txt +++ b/icuSources/data/coll/is.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/is.xml +// * Source File:/common/collation/is.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/is.xml + * ICU source: /xml/collation/is.xml */ is{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -23,7 +23,7 @@ is{ "&[before 1]z<ý<<<Ý" "&[before 1]ʒ<þ<<<Þ<æ<<<Æ<<ä<<<Ä<ö<<<Ö<<ø<<<Ø<Ã¥<<<Å" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/is_IS.txt b/icuSources/data/coll/is_IS.txt index ec8fe7f2..0af8e990 100644 --- a/icuSources/data/coll/is_IS.txt +++ b/icuSources/data/coll/is_IS.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/it.txt b/icuSources/data/coll/it.txt index 9b58c5b8..aee8c17b 100644 --- a/icuSources/data/coll/it.txt +++ b/icuSources/data/coll/it.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/it.xml +// * Source File:/common/collation/it.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/it.xml + * ICU source: /xml/collation/it.xml */ it{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{"&ae<<æ<<<Æ"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/it_CH.txt b/icuSources/data/coll/it_CH.txt index 668fe59d..64e76dbf 100644 --- a/icuSources/data/coll/it_CH.txt +++ b/icuSources/data/coll/it_CH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/it_IT.txt b/icuSources/data/coll/it_IT.txt index 8941cdc9..e34b0f73 100644 --- a/icuSources/data/coll/it_IT.txt +++ b/icuSources/data/coll/it_IT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/iw.txt b/icuSources/data/coll/iw.txt new file mode 100644 index 00000000..0bbe22a3 --- /dev/null +++ b/icuSources/data/coll/iw.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +iw{ + "%%ALIAS"{"he"} +} diff --git a/icuSources/data/coll/iw_IL.txt b/icuSources/data/coll/iw_IL.txt new file mode 100644 index 00000000..4ebf97e6 --- /dev/null +++ b/icuSources/data/coll/iw_IL.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +iw_IL{ + "%%ALIAS"{"he_IL"} +} diff --git a/icuSources/data/coll/ja.txt b/icuSources/data/coll/ja.txt index f7f9689c..e83543e3 100644 --- a/icuSources/data/coll/ja.txt +++ b/icuSources/data/coll/ja.txt @@ -1,513 +1,513 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ja.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/collation/ja.xml - */ -ja{ - Version{"1.2"} - collations{ - standard{ - Sequence{ - " [strength 3 ] [hiraganaQ on ]" - "&ヽ=ヽ=ゝ" - "&[before 3]ァ<<<ァ|ー=ァ|ー=ぁ|ー=ア|ー=ï½±|ー=あ|ー=カ|ー=カ|ー=か|ー=ガ|ー=が|ー=サ|ー=ï½»|ー=さ" - "|ー=ザ|ー=ざ|ー=タ|ー=タ|ー=た|ー=ダ|ー=だ|ー=ナ|ー=ナ|ー=な|ー=ハ|ー=ハ|ー=は|ー=バ|ー=ば|ー=パ|ー=ぱ" - "|ー=マ|ー=マ|ー=ま|ー=ャ|ー=ャ|ー=ゃ|ー=ヤ|ー=ヤ|ー=や|ー=ラ|ー=ラ|ー=ら|ー=ヮ|ー=ゎ|ー=ワ|ー=ワ|ー=わ" - "|ー=ヵ|ー=ヷ|ー" - "&[before 3]ィ<<<ィ|ー=ィ|ー=ぃ|ー=イ|ー=ï½²|ー=い|ー=キ|ー=ï½·|ー=き|ー=ギ|ー=ぎ|ー=シ|ー=ï½¼|ー=し" - "|ー=ジ|ー=じ|ー=チ|ー=チ|ー=ち|ー=ヂ|ー=ぢ|ー=ニ|ー=ニ|ー=に|ー=ヒ|ー=ヒ|ー=ひ|ー=ビ|ー=び|ー=ピ|ー=ぴ" - "|ー=ミ|ー=ミ|ー=み|ー=リ|ー=リ|ー=り|ー=ヰ|ー=ゐ|ー=ヸ|ー" - "&[before 3]ゥ<<<ゥ|ー=ゥ|ー=ぅ|ー=ウ|ー=ï½³|ー=う|ー=ク|ー=ク|ー=く|ー=グ|ー=ぐ|ー=ス|ー=ï½½|ー=す" - "|ー=ズ|ー=ず|ー=ッ|ー=ッ|ー=っ|ー=ツ|ー=ツ|ー=つ|ー=ヅ|ー=づ|ー=ヌ|ー=ヌ|ー=ぬ|ー=フ|ー=フ|ー=ふ|ー=ブ" - "|ー=ぶ|ー=プ|ー=ぷ|ー=ム|ー=ム|ー=む|ー=ュ|ー=ï½­|ー=ゅ|ー=ユ|ー=ユ|ー=ゆ|ー=ル|ー=ル|ー=る|ー=ヴ|ー=ゔ" - "|ー" - "&[before 3]ェ<<<ェ|ー=ェ|ー=ぇ|ー=エ|ー=ï½´|ー=え|ー=ケ|ー=ï½¹|ー=け|ー=ゲ|ー=げ|ー=セ|ー=ï½¾|ー=せ" - "|ー=ゼ|ー=ぜ|ー=テ|ー=テ|ー=て|ー=デ|ー=で|ー=ネ|ー=ネ|ー=ね|ー=ヘ|ー=ヘ|ー=へ|ー=ベ|ー=べ|ー=ペ|ー=ぺ" - "|ー=メ|ー=メ|ー=め|ー=レ|ー=レ|ー=れ|ー=ヱ|ー=ゑ|ー=ヶ|ー=ヹ|ー" - "&[before 3]ォ<<<ォ|ー=ォ|ー=ぉ|ー=オ|ー=ï½µ|ー=お|ー=コ|ー=コ|ー=こ|ー=ゴ|ー=ご|ー=ソ|ー=ソ|ー=そ" - "|ー=ゾ|ー=ぞ|ー=ト|ー=ト|ー=と|ー=ド|ー=ど|ー=ノ|ー=ノ|ー=の|ー=ホ|ー=ホ|ー=ほ|ー=ボ|ー=ぼ|ー=ポ|ー=ぽ" - "|ー=モ|ー=モ|ー=も|ー=ョ|ー=ï½®|ー=ょ|ー=ヨ|ー=ヨ|ー=よ|ー=ロ|ー=ロ|ー=ろ|ー=ヲ|ー=ヲ|ー=を|ー=ヺ|ー" - "&[before 3]ア<<<ア|ヽ=ï½±|ヽ=あ|ゝ=ァ|ヽ=ァ|ヽ=ぁ|ゝ" - "&[before 3]イ<<<イ|ヽ=ï½²|ヽ=い|ゝ=ィ|ヽ=ィ|ヽ=ぃ|ゝ" - "&[before 3]ウ<<<ウ|ヽ=ï½³|ヽ=う|ゝ=ゥ|ヽ=ゥ|ヽ=ぅ|ゝ=ヴ|ヽ=ゔ|ゝ=ウ|ヾ/゙=ï½³|ヾ/゙=う|ゞ/゙=ゥ|ヾ" - "/゙=ゥ|ヾ/゙=ぅ|ゞ/゙=ヴ|ヾ/゙=ゔ|ゞ/゙" - "&[before 3]エ<<<エ|ヽ=ï½´|ヽ=え|ゝ=ェ|ヽ=ェ|ヽ=ぇ|ゝ" - "&[before 3]オ<<<オ|ヽ=ï½µ|ヽ=お|ゝ=ォ|ヽ=ォ|ヽ=ぉ|ゝ" - "&[before 3]カ<<<カ|ヽ=カ|ヽ=か|ゝ=ヵ|ヽ" - "&[before 3]ガ<<<ガ|ヽ=が|ゝ" - "&[before 3]キ<<<キ|ヽ=ï½·|ヽ=き|ゝ=ギ|ヽ=ぎ|ゝ=キ|ヾ/゙=ï½·|ヾ/゙=き|ゞ/゙=ギ|ヾ/゙=ぎ|ゞ/゙" - "&[before 3]ク<<<ク|ヽ=ク|ヽ=く|ゝ=グ|ヽ=ぐ|ゝ=ク|ヾ/゙=ク|ヾ/゙=く|ゞ/゙=グ|ヾ/゙=ぐ|ゞ/゙" - "&[before 3]ケ<<<ケ|ヽ=ï½¹|ヽ=け|ゝ=ヶ|ヽ" - "&[before 3]ゲ<<<ゲ|ヽ=げ|ゝ" - "&[before 3]コ<<<コ|ヽ=コ|ヽ=こ|ゝ=ゴ|ヽ=ご|ゝ=コ|ヾ/゙=コ|ヾ/゙=こ|ゞ/゙=ゴ|ヾ/゙=ご|ゞ/゙" - "&[before 3]サ<<<サ|ヽ=ï½»|ヽ=さ|ゝ=ザ|ヽ=ざ|ゝ=サ|ヾ/゙=ï½»|ヾ/゙=さ|ゞ/゙=ザ|ヾ/゙=ざ|ゞ/゙" - "&[before 3]シ<<<シ|ヽ=ï½¼|ヽ=し|ゝ=ジ|ヽ=じ|ゝ=シ|ヾ/゙=ï½¼|ヾ/゙=し|ゞ/゙=ジ|ヾ/゙=じ|ゞ/゙" - "&[before 3]ス<<<ス|ヽ=ï½½|ヽ=す|ゝ=ズ|ヽ=ず|ゝ=ス|ヾ/゙=ï½½|ヾ/゙=す|ゞ/゙=ズ|ヾ/゙=ず|ゞ/゙" - "&[before 3]セ<<<セ|ヽ=ï½¾|ヽ=せ|ゝ=ゼ|ヽ=ぜ|ゝ=セ|ヾ/゙=ï½¾|ヾ/゙=せ|ゞ/゙=ゼ|ヾ/゙=ぜ|ゞ/゙" - "&[before 3]ソ<<<ソ|ヽ=ソ|ヽ=そ|ゝ=ゾ|ヽ=ぞ|ゝ=ソ|ヾ/゙=ソ|ヾ/゙=そ|ゞ/゙=ゾ|ヾ/゙=ぞ|ゞ/゙" - "&[before 3]タ<<<タ|ヽ=タ|ヽ=た|ゝ=ダ|ヽ=だ|ゝ=タ|ヾ/゙=タ|ヾ/゙=た|ゞ/゙=ダ|ヾ/゙=だ|ゞ/゙" - "&[before 3]チ<<<チ|ヽ=チ|ヽ=ち|ゝ=ヂ|ヽ=ぢ|ゝ=チ|ヾ/゙=チ|ヾ/゙=ち|ゞ/゙=ヂ|ヾ/゙=ぢ|ゞ/゙" - "&[before 3]ツ<<<ツ|ヽ=ツ|ヽ=つ|ゝ=ッ|ヽ=ッ|ヽ=っ|ゝ=ヅ|ヽ=づ|ゝ=ツ|ヾ/゙=ツ|ヾ/゙=つ|ゞ/゙=ヅ|ヾ" - "/゙=づ|ゞ/゙=ツ|ヽ=ツ|ヽ=つ|ゝ=ッ|ヾ/゙=ッ|ヾ/゙=っ|ゞ/゙=ツ|ヾ/゙=ツ|ヾ/゙=つ|ゞ/゙" - "&[before 3]テ<<<テ|ヽ=テ|ヽ=て|ゝ=デ|ヽ=で|ゝ=テ|ヾ/゙=テ|ヾ/゙=て|ゞ/゙=デ|ヾ/゙=で|ゞ/゙" - "&[before 3]ト<<<ト|ヽ=ト|ヽ=と|ゝ=ド|ヽ=ど|ゝ=ト|ヾ/゙=ト|ヾ/゙=と|ゞ/゙=ド|ヾ/゙=ど|ゞ/゙" - "&[before 3]ナ<<<ナ|ヽ=ナ|ヽ=な|ゝ" - "&[before 3]ニ<<<ニ|ヽ=ニ|ヽ=に|ゝ" - "&[before 3]ヌ<<<ヌ|ヽ=ヌ|ヽ=ぬ|ゝ" - "&[before 3]ネ<<<ネ|ヽ=ネ|ヽ=ね|ゝ" - "&[before 3]ノ<<<ノ|ヽ=ノ|ヽ=の|ゝ" - "&[before 3]ハ<<<ハ|ヽ=ハ|ヽ=は|ゝ=バ|ヽ=ば|ゝ=ハ|ヾ/゙=ハ|ヾ/゙=は|ゞ/゙=バ|ヾ/゙=ば|ゞ/゙=パ|ヽ" - "=ぱ|ゝ=パ|ヾ/゙=ぱ|ゞ/゙" - "&[before 3]ヒ<<<ヒ|ヽ=ヒ|ヽ=ひ|ゝ=ビ|ヽ=び|ゝ=ヒ|ヾ/゙=ヒ|ヾ/゙=ひ|ゞ/゙=ビ|ヾ/゙=び|ゞ/゙=ピ|ヽ" - "=ぴ|ゝ=ピ|ヾ/゙=ぴ|ゞ/゙" - "&[before 3]フ<<<フ|ヽ=フ|ヽ=ふ|ゝ=ブ|ヽ=ぶ|ゝ=フ|ヾ/゙=フ|ヾ/゙=ふ|ゞ/゙=ブ|ヾ/゙=ぶ|ゞ/゙=プ|ヽ" - "=ぷ|ゝ=プ|ヾ/゙=ぷ|ゞ/゙" - "&[before 3]ヘ<<<ヘ|ヽ=ヘ|ヽ=へ|ゝ=ベ|ヽ=べ|ゝ=ヘ|ヾ/゙=ヘ|ヾ/゙=へ|ゞ/゙=ベ|ヾ/゙=べ|ゞ/゙=ペ|ヽ" - "=ぺ|ゝ=ペ|ヾ/゙=ぺ|ゞ/゙" - "&[before 3]ホ<<<ホ|ヽ=ホ|ヽ=ほ|ゝ=ボ|ヽ=ぼ|ゝ=ホ|ヾ/゙=ホ|ヾ/゙=ほ|ゞ/゙=ボ|ヾ/゙=ぼ|ゞ/゙=ポ|ヽ" - "=ぽ|ゝ=ポ|ヾ/゙=ぽ|ゞ/゙" - "&[before 3]マ<<<マ|ヽ=マ|ヽ=ま|ゝ" - "&[before 3]ミ<<<ミ|ヽ=ミ|ヽ=み|ゝ" - "&[before 3]ム<<<ム|ヽ=ム|ヽ=む|ゝ" - "&[before 3]メ<<<メ|ヽ=メ|ヽ=め|ゝ" - "&[before 3]モ<<<モ|ヽ=モ|ヽ=も|ゝ" - "&[before 3]ヤ<<<ヤ|ヽ=ヤ|ヽ=や|ゝ=ャ|ヽ=ャ|ヽ=ゃ|ゝ" - "&[before 3]ユ<<<ユ|ヽ=ユ|ヽ=ゆ|ゝ=ュ|ヽ=ï½­|ヽ=ゅ|ゝ" - "&[before 3]ヨ<<<ヨ|ヽ=ヨ|ヽ=よ|ゝ=ョ|ヽ=ï½®|ヽ=ょ|ゝ" - "&[before 3]ラ<<<ラ|ヽ=ラ|ヽ=ら|ゝ" - "&[before 3]リ<<<リ|ヽ=リ|ヽ=り|ゝ" - "&[before 3]ル<<<ル|ヽ=ル|ヽ=る|ゝ" - "&[before 3]レ<<<レ|ヽ=レ|ヽ=れ|ゝ" - "&[before 3]ロ<<<ロ|ヽ=ロ|ヽ=ろ|ゝ" - "&[before 3]ワ<<<ワ|ヽ=ワ|ヽ=わ|ゝ=ヮ|ヽ=ゎ|ゝ=ヷ|ヽ=ワ|ヾ/゙=ワ|ヾ/゙=わ|ゞ/゙=ヷ|ヾ/゙=ヮ|ヾ/゙" - "=ゎ|ゞ/゙" - "&[before 3]ヰ<<<ヰ|ヽ=ゐ|ゝ=ヸ|ヽ=ヰ|ヾ/゙=ゐ|ゞ/゙=ヸ|ヾ/゙" - "&[before 3]ヱ<<<ヱ|ヽ=ゑ|ゝ=ヹ|ヽ=ヱ|ヾ/゙=ゑ|ゞ/゙=ヹ|ヾ/゙" - "&[before 3]ヲ<<<ヲ|ヽ=ヲ|ヽ=を|ゝ=ヺ|ヽ=ヲ|ヾ/゙=ヲ|ヾ/゙=を|ゞ/゙=ヺ|ヾ/゙" - "&[before 3]ン<<<ン|ヽ=ン|ヽ=ん|ゝ" - "&ァ=ァ=ぁ=ァ" - "&ア=ア=あ=ï½±" - "&ィ=ィ=ぃ=ィ" - "&イ=イ=い=ï½²" - "&ゥ=ゥ=ぅ=ゥ" - "&ウ=ウ=う=ï½³" - "&ェ=ェ=ぇ=ェ" - "&エ=エ=え=ï½´" - "&ォ=ォ=ぉ=ォ" - "&オ=オ=お=ï½µ" - "&カ=カ=か=カ" - "&キ=キ=き=ï½·" - "&ク=ク=く=ク" - "&ケ=ケ=け=ï½¹" - "&コ=コ=こ=コ" - "&サ=サ=さ=ï½»" - "&シ=シ=し=ï½¼" - "&ス=ス=す=ï½½" - "&セ=セ=せ=ï½¾" - "&ソ=ソ=そ=ソ" - "&タ=タ=た=タ" - "&チ=チ=ち=チ" - "&ッ=ッ=っ=ッ" - "&ツ=ツ=つ=ツ" - "&テ=テ=て=テ" - "&ト=ト=と=ト" - "&ナ=ナ=な=ナ" - "&ニ=ニ=に=ニ" - "&ヌ=ヌ=ぬ=ヌ" - "&ネ=ネ=ね=ネ" - "&ノ=ノ=の=ノ" - "&ハ=ハ=は=ハ" - "&ヒ=ヒ=ひ=ヒ" - "&フ=フ=ふ=フ" - "&ヘ=ヘ=へ=ヘ" - "&ホ=ホ=ほ=ホ" - "&マ=マ=ま=マ" - "&ミ=ミ=み=ミ" - "&ム=ム=む=ム" - "&メ=メ=め=メ" - "&モ=モ=も=モ" - "&ャ=ャ=ゃ=ャ" - "&ヤ=ヤ=や=ヤ" - "&ュ=ュ=ゅ=ï½­" - "&ユ=ユ=ゆ=ユ" - "&ョ=ョ=ょ=ï½®" - "&ヨ=ヨ=よ=ヨ" - "&ラ=ラ=ら=ラ" - "&リ=リ=り=リ" - "&ル=ル=る=ル" - "&レ=レ=れ=レ" - "&ロ=ロ=ろ=ロ" - "&ヮ=ヮ=ゎ" - "&ワ=ワ=わ=ワ" - "&ヰ=ヰ=ゐ" - "&ヱ=ヱ=ゑ" - "&ヲ=ヲ=を=ヲ" - "&ン=ン=ん=ン" - "&ヵ=ヵ" - "&ヶ=ヶ" - "&ー=ー" - "&゙=゙" - "&゚=゚" - "&'\u0020'='\u3000'=ï¿£" - "&'!'=!" - "&'\"'="" - "&'#'=#" - "&'$'=$" - "&'%'=%" - "&'&'=&" - "&''='" - "&'('=(" - "&')'=)" - "&'*'=*" - "&'+'=+" - "&','=," - "&'-'=-" - "&'.'=." - "&'/'=/" - "&0=0" - "&1=1" - "&2=2" - "&3=3" - "&4=4" - "&5=5" - "&6=6" - "&7=7" - "&8=8" - "&9=9" - "&':'=:" - "&';'=;" - "&'<'=<" - "&'='==" - "&'>'=>" - "&'?'=?" - "&'@'=ï¼ " - "&A=A" - "&B=ï¼¢" - "&C=ï¼£" - "&D=D" - "&E=ï¼¥" - "&F=F" - "&G=G" - "&H=H" - "&I=I" - "&J=J" - "&K=K" - "&L=L" - "&M=ï¼­" - "&N=ï¼®" - "&O=O" - "&P=ï¼°" - "&Q=ï¼±" - "&R=ï¼²" - "&S=ï¼³" - "&T=ï¼´" - "&U=ï¼µ" - "&V=V" - "&W=ï¼·" - "&X=X" - "&Y=ï¼¹" - "&Z=Z" - "&'['=ï¼»" - "&''=ï¼¼" - "&']'=ï¼½" - "&'^'=ï¼¾" - "&'_'=_" - "&'`'=`" - "&a=a" - "&b=b" - "&c=c" - "&d=d" - "&e=e" - "&f=f" - "&g=g" - "&h=h" - "&i=i" - "&j=j" - "&k=k" - "&l=l" - "&m=m" - "&n=n" - "&o=o" - "&p=p" - "&q=q" - "&r=r" - "&s=s" - "&t=t" - "&u=u" - "&v=v" - "&w=w" - "&x=x" - "&y=y" - "&z=z" - "&'{'={" - "&'|'=|" - "&'}'=}" - "&'~'=~" - "&¢=ï¿ " - "&£=ï¿¡" - "&Â¥=ï¿¥" - "&¦=¦" - "&¬=ï¿¢" - "&ᄀ=ᄀ" - "&ᄁ=ï¾¢" - "&ᄂ=ᄂ" - "&ᄃ=ᄃ" - "&ᄄ=ᄄ" - "&ᄅ=ᄅ" - "&ᄆ=ï¾±" - "&ᄇ=ï¾²" - "&ᄈ=ï¾³" - "&ᄉ=ï¾µ" - "&ᄊ=ᄊ" - "&ᄋ=ï¾·" - "&ᄌ=ᄌ" - "&ᄍ=ï¾¹" - "&ᄎ=ᄎ" - "&ᄏ=ï¾»" - "&ᄐ=ï¾¼" - "&ᄑ=ï¾½" - "&ᄒ=ï¾¾" - "&ᄚ=ï¾°" - "&ᄡ=ï¾´" - "&ᅠ=ï¾ " - "&ᅡ=ᅡ" - "&ᅢ=ᅢ" - "&ᅣ=ᅣ" - "&ᅤ=ᅤ" - "&ᅥ=ᅥ" - "&ᅦ=ᅦ" - "&ᅧ=ᅧ" - "&ᅨ=ᅨ" - "&ᅩ=ᅩ" - "&ᅪ=ᅪ" - "&ᅫ=ᅫ" - "&ᅬ=ᅬ" - "&ᅭ=ᅭ" - "&ᅮ=ᅮ" - "&ᅯ=ᅯ" - "&ᅰ=ᅰ" - "&ᅱ=ᅱ" - "&ᅲ=ᅲ" - "&ᅳ=ᅳ" - "&ᅴ=ᅴ" - "&ᅵ=ᅵ" - "&ᆪ=ï¾£" - "&ᆬ=ï¾¥" - "&ᆭ=ᆭ" - "&ᆰ=ᆰ" - "&ᆱ=ᆱ" - "&ᆲ=ᆲ" - "&ᆳ=ï¾­" - "&ᆴ=ï¾®" - "&ᆵ=ᆵ" - "&₩=₩" - "&←=ï¿©" - "&↑=↑" - "&→=ï¿«" - "&↓=↓" - "&│=│" - "&■=ï¿­" - "&○=ï¿®" - "&、=、" - "&。=。" - "&「=ï½¢" - "&」=ï½£" - "&[last regular ]<亜<唖<娃<阿<哀<愛<挨<姶<逢<葵<茜<穐<悪<握<渥<旭<葦<芦<鯵<梓<圧<斡<扱<宛<姐<虻" - "<飴<çµ¢<綾<鮎<或<粟<袷<安<庵<按<暗<案<闇<鞍<杏<以<伊<位<依<偉<囲<夷<委<威<尉<惟<意<慰<易<椅<為<畏<異<移" - "<維<ç·¯<胃<萎<è¡£<謂<違<遺<医<井<亥<域<育<郁<磯<一<壱<溢<逸<稲<茨<芋<é°¯<允<印<咽<員<因<姻<引<飲<æ·«<胤<蔭" - "<院<陰<隠<韻<吋<右<宇<烏<ç¾½<迂<雨<卯<鵜<窺<丑<碓<臼<渦<嘘<唄<欝<蔚<é°»<姥<厩<浦<瓜<閏<噂<云<運<雲<荏<餌" - "<叡<営<嬰<å½±<映<曳<栄<æ°¸<æ³³<æ´©<瑛<盈<穎<é ´<英<衛<è© <鋭<液<疫<益<駅<悦<謁<越<閲<榎<厭<円<園<å °<奄<å®´<延" - "<怨<掩<援<沿<演<炎<焔<煙<燕<猿<縁<艶<苑<薗<遠<鉛<鴛<å¡©<於<汚<甥<凹<央<奥<往<応<押<旺<横<欧<æ®´<王<翁<襖" - "<é´¬<鴎<黄<岡<沖<荻<億<屋<憶<臆<桶<牡<乙<俺<卸<恩<温<穏<音<下<化<ä»®<何<ä¼½<価<ä½³<加<可<嘉<夏<嫁<家<寡<科" - "<暇<果<架<歌<æ²³<火<珂<禍<禾<稼<箇<花<苛<茄<荷<華<菓<蝦<課<嘩<貨<迦<過<霞<蚊<俄<峨<我<牙<画<臥<芽<蛾<賀" - "<雅<餓<駕<介<会<解<回<塊<壊<å»»<å¿«<怪<悔<恢<懐<戒<拐<改<魁<晦<械<æµ·<灰<界<皆<çµµ<芥<蟹<開<階<貝<凱<劾<外" - "<咳<害<崖<慨<概<涯<碍<蓋<街<該<鎧<骸<浬<馨<蛙<垣<柿<蛎<鈎<劃<嚇<各<廓<拡<撹<æ ¼<æ ¸<æ®»<獲<確<ç©«<覚<角<赫" - "<較<郭<閣<隔<革<å­¦<å²³<楽<額<顎<掛<笠<樫<æ©¿<梶<鰍<潟<割<喝<恰<括<æ´»<渇<滑<葛<褐<轄<且<é°¹<叶<椛<樺<鞄<æ ª" - "<兜<竃<蒲<釜<鎌<噛<é´¨<æ ¢<茅<萱<ç²¥<刈<苅<瓦<ä¹¾<侃<冠<寒<刊<勘<勧<å·»<喚<å ª<姦<完<官<寛<å¹²<å¹¹<患<感<慣<憾" - "<換<敢<柑<桓<棺<款<歓<汗<æ¼¢<澗<潅<環<甘<監<看<ç«¿<管<ç°¡<ç·©<缶<ç¿°<肝<艦<莞<観<諌<貫<還<鑑<間<閑<関<陥<韓" - "<館<舘<丸<含<岸<巌<玩<癌<眼<岩<ç¿«<贋<雁<頑<顔<願<企<伎<危<喜<器<基<奇<嬉<寄<岐<希<å¹¾<忌<揮<机<旗<既<期" - "<棋<棄<機<帰<毅<気<æ±½<畿<祈<å­£<稀<紀<å¾½<規<記<è²´<èµ·<軌<輝<飢<騎<鬼<亀<偽<儀<妓<宜<戯<技<擬<欺<犠<疑<祇" - "<義<蟻<誼<è­°<掬<菊<鞠<吉<吃<喫<桔<橘<è©°<ç §<杵<黍<却<客<脚<虐<逆<丘<久<仇<休<及<吸<å®®<弓<急<救<朽<求<æ±²" - "<æ³£<灸<球<究<窮<笈<級<ç³¾<給<旧<牛<去<居<å·¨<拒<拠<挙<渠<虚<許<距<鋸<漁<禦<魚<亨<享<京<供<ä¾ <僑<兇<競<共" - "<凶<協<匡<卿<叫<喬<境<峡<å¼·<彊<怯<恐<恭<挟<教<橋<況<狂<狭<矯<胸<脅<興<蕎<郷<鏡<響<饗<驚<ä»°<凝<å°­<暁<業" - "<局<曲<極<玉<桐<粁<僅<勤<均<å·¾<錦<斤<欣<欽<琴<禁<禽<筋<緊<芹<菌<è¡¿<襟<謹<近<金<吟<銀<九<倶<句<区<狗<玖" - "<矩<苦<躯<駆<駈<駒<具<愚<虞<喰<空<偶<寓<遇<隅<串<櫛<釧<屑<屈<掘<窟<沓<靴<轡<窪<熊<隈<粂<栗<ç¹°<桑<鍬<勲" - "<君<薫<訓<群<軍<郡<卦<袈<祁<係<傾<刑<兄<啓<圭<珪<型<契<å½¢<径<恵<慶<慧<憩<掲<携<敬<景<桂<渓<畦<稽<ç³»<経" - "<継<繋<罫<茎<荊<蛍<計<è©£<è­¦<軽<頚<鶏<芸<迎<鯨<劇<戟<撃<激<隙<桁<傑<欠<決<潔<ç©´<結<血<訣<月<件<倹<倦<健" - "<兼<券<剣<喧<圏<堅<嫌<建<憲<懸<拳<捲<検<権<牽<犬<献<研<硯<çµ¹<県<肩<見<謙<è³¢<軒<遣<鍵<険<顕<験<鹸<元<原" - "<厳<å¹»<弦<減<源<玄<現<絃<舷<言<諺<限<乎<個<古<呼<固<姑<å­¤<å·±<庫<弧<戸<故<枯<湖<狐<糊<袴<股<胡<菰<虎<誇" - "<è·¨<鈷<雇<顧<鼓<五<互<伍<午<呉<吾<娯<後<御<悟<梧<檎<瑚<碁<語<誤<è­·<醐<乞<鯉<交<ä½¼<侯<候<倖<光<公<功<効" - "<勾<厚<口<向<后<喉<坑<垢<好<孔<孝<宏<å·¥<å·§<å··<幸<広<庚<康<弘<恒<慌<抗<拘<控<攻<昂<晃<更<杭<æ ¡<梗<構<江" - "<æ´ª<浩<港<溝<甲<皇<硬<稿<ç³ <紅<紘<絞<綱<耕<考<肯<肱<腔<膏<航<荒<行<è¡¡<講<è²¢<è³¼<郊<酵<鉱<ç ¿<鋼<閤<降<項" - "<香<高<é´»<剛<劫<号<合<壕<拷<æ¿ <豪<轟<麹<克<刻<告<国<穀<酷<éµ <黒<獄<漉<腰<甑<忽<惚<骨<狛<è¾¼<æ­¤<頃<今<困" - "<坤<墾<婚<恨<懇<昏<昆<æ ¹<梱<æ··<痕<ç´º<艮<魂<些<佐<叉<唆<嵯<å·¦<å·®<査<沙<瑳<砂<詐<鎖<裟<坐<座<挫<債<催<再" - "<最<哉<塞<妻<å®°<彩<才<採<æ ½<æ­³<済<災<采<犀<砕<ç ¦<祭<斎<ç´°<菜<裁<載<際<剤<在<材<罪<財<冴<坂<阪<å º<榊<肴" - "<咲<崎<埼<碕<é·º<作<削<咋<搾<昨<朔<柵<窄<策<ç´¢<錯<桜<é®­<笹<匙<冊<刷<察<拶<撮<擦<札<殺<薩<雑<皐<鯖<捌<錆" - "<鮫<皿<晒<三<傘<参<å±±<惨<撒<散<桟<燦<珊<産<算<纂<蚕<讃<賛<酸<餐<斬<暫<残<仕<仔<伺<使<刺<司<史<嗣<四<士" - "<始<姉<姿<子<屍<市<師<志<思<指<支<孜<斯<施<旨<枝<æ­¢<æ­»<氏<獅<祉<私<糸<紙<ç´«<肢<脂<至<視<詞<è©©<試<誌<è«®" - "<資<賜<雌<飼<æ­¯<事<ä¼¼<侍<児<字<寺<慈<持<時<次<滋<æ²»<爾<璽<痔<磁<示<而<耳<自<蒔<辞<汐<鹿<式<識<é´«<竺<軸" - "<宍<雫<七<叱<執<失<嫉<室<悉<湿<漆<疾<質<実<蔀<篠<偲<柴<芝<屡<蕊<縞<舎<写<射<捨<赦<斜<煮<社<紗<者<謝<車" - "<遮<蛇<邪<借<勺<å°º<杓<灼<爵<酌<釈<錫<若<寂<å¼±<惹<主<取<守<手<朱<殊<狩<珠<種<腫<趣<酒<首<儒<受<呪<寿<授" - "<樹<綬<需<囚<収<周<宗<å°±<州<ä¿®<愁<拾<æ´²<秀<秋<終<繍<習<臭<舟<蒐<衆<襲<讐<è¹´<輯<週<酋<酬<集<醜<什<住<充" - "<十<従<戎<柔<汁<渋<獣<縦<重<銃<叔<夙<宿<淑<祝<縮<粛<塾<熟<出<術<è¿°<俊<å³»<春<瞬<ç«£<舜<駿<准<循<旬<楯<殉" - "<æ·³<準<潤<盾<純<å·¡<遵<醇<順<処<初<所<暑<曙<渚<庶<緒<ç½²<書<薯<藷<諸<助<叙<女<序<徐<恕<鋤<除<傷<償<勝<匠" - "<升<召<哨<商<唱<嘗<奨<妾<娼<宵<将<小<少<尚<庄<床<å» <å½°<承<抄<招<掌<捷<昇<昌<昭<晶<松<梢<樟<樵<æ²¼<消<渉" - "<湘<焼<焦<照<症<省<硝<礁<祥<称<ç« <笑<粧<ç´¹<肖<菖<蒋<蕉<衝<裳<訟<証<詔<詳<象<賞<醤<鉦<鍾<鐘<障<鞘<上<丈" - "<丞<乗<冗<剰<城<å ´<壌<嬢<常<情<擾<条<杖<浄<状<畳<ç©£<蒸<è­²<醸<錠<嘱<埴<飾<拭<植<殖<燭<織<職<色<触<食<蝕" - "<è¾±<å°»<伸<ä¿¡<ä¾µ<唇<娠<寝<審<心<慎<振<新<晋<森<榛<浸<æ·±<申<疹<真<神<秦<ç´³<臣<芯<薪<親<診<身<辛<進<針<震" - "<人<仁<刃<塵<壬<尋<甚<å°½<腎<訊<迅<陣<靭<笥<諏<須<酢<図<厨<逗<吹<垂<帥<推<æ°´<炊<睡<粋<ç¿ <è¡°<遂<酔<錐<錘" - "<随<瑞<髄<崇<嵩<数<枢<趨<雛<据<杉<椙<菅<頗<雀<裾<澄<摺<寸<世<瀬<畝<是<凄<制<勢<姓<征<性<成<政<整<星<晴" - "<棲<栖<æ­£<清<牲<生<盛<ç²¾<聖<声<製<西<誠<誓<請<逝<醒<青<静<斉<税<脆<隻<席<惜<戚<斥<昔<析<石<積<籍<績<脊" - "<責<赤<è·¡<蹟<碩<切<拙<接<摂<折<設<窃<節<説<雪<絶<舌<蝉<仙<先<千<占<宣<専<尖<川<戦<扇<撰<栓<æ ´<泉<浅<洗" - "<染<潜<煎<煽<旋<ç©¿<ç®­<線<繊<羨<腺<舛<船<薦<è©®<賎<è·µ<選<遷<銭<銑<閃<é®®<前<善<漸<然<全<禅<繕<膳<糎<噌<塑" - "<岨<措<曾<曽<楚<狙<疏<疎<礎<祖<租<粗<ç´ <組<蘇<訴<阻<遡<é¼ <僧<創<双<叢<倉<喪<壮<奏<爽<宋<層<匝<惣<想<捜" - "<掃<挿<掻<操<早<曹<å·£<槍<槽<漕<燥<争<痩<相<窓<糟<総<綜<聡<草<荘<葬<蒼<藻<装<èµ°<送<遭<鎗<霜<騒<像<増<憎" - "<臓<蔵<贈<造<促<側<則<即<息<捉<束<測<足<速<俗<属<賊<族<続<卒<袖<其<揃<存<å­«<尊<損<村<遜<他<多<太<æ±°<詑" - "<唾<堕<妥<惰<打<柁<舵<楕<陀<駄<騨<体<堆<対<耐<å²±<帯<待<怠<態<戴<替<æ³°<滞<胎<腿<苔<袋<貸<退<逮<隊<黛<鯛" - "<代<台<大<第<醍<題<é·¹<滝<瀧<卓<啄<宅<托<択<拓<æ²¢<濯<琢<託<鐸<濁<諾<茸<凧<蛸<只<叩<但<達<è¾°<奪<脱<å·½<竪" - "<辿<棚<è°·<狸<鱈<樽<誰<丹<単<嘆<坦<担<探<旦<歎<æ·¡<湛<炭<短<端<箪<綻<耽<胆<蛋<誕<鍛<団<壇<å¼¾<断<暖<檀<段" - "<男<談<値<知<地<弛<恥<智<æ± <痴<稚<ç½®<致<蜘<遅<馳<築<畜<竹<筑<蓄<逐<秩<窒<茶<å«¡<着<中<仲<宙<å¿ <抽<昼<柱" - "<注<虫<è¡·<註<酎<鋳<駐<樗<瀦<猪<苧<著<貯<丁<兆<凋<喋<寵<帖<帳<庁<弔<å¼µ<彫<å¾´<懲<挑<暢<朝<æ½®<牒<町<眺<聴" - "<脹<腸<蝶<調<諜<超<è·³<銚<長<頂<é³¥<勅<捗<直<朕<沈<珍<賃<鎮<陳<æ´¥<墜<椎<槌<追<鎚<痛<通<塚<栂<掴<槻<佃<漬" - "<柘<è¾»<蔦<綴<鍔<椿<æ½°<坪<壷<嬬<ç´¬<爪<吊<釣<鶴<亭<低<停<偵<剃<貞<呈<å ¤<定<帝<底<庭<å»·<弟<悌<抵<挺<提<梯" - "<汀<碇<禎<程<ç· <艇<訂<諦<蹄<逓<邸<鄭<釘<鼎<æ³¥<摘<擢<敵<æ»´<的<笛<適<鏑<溺<哲<å¾¹<撤<轍<è¿­<鉄<典<å¡«<天<展" - "<店<æ·»<纏<甜<è²¼<転<顛<点<伝<殿<æ¾±<田<電<兎<吐<å µ<塗<妬<å± <徒<斗<杜<渡<登<菟<è³­<途<都<鍍<ç ¥<ç º<努<度<土" - "<奴<怒<倒<党<冬<凍<刀<唐<塔<塘<套<宕<島<嶋<悼<投<搭<東<桃<梼<棟<盗<淘<湯<涛<灯<燈<当<痘<祷<等<答<筒<糖" - "<çµ±<到<董<蕩<藤<討<謄<豆<踏<逃<透<鐙<陶<é ­<騰<闘<働<動<同<堂<導<憧<撞<洞<瞳<ç«¥<胴<萄<道<銅<å³ <鴇<匿<得" - "<å¾³<涜<特<督<禿<篤<毒<独<読<栃<æ©¡<凸<突<椴<届<鳶<苫<寅<酉<瀞<噸<屯<惇<敦<沌<豚<遁<頓<呑<曇<鈍<奈<那<内" - "<乍<凪<薙<謎<灘<捺<鍋<楢<馴<縄<畷<南<楠<軟<難<汝<二<å°¼<弐<è¿©<匂<賑<肉<虹<廿<日<ä¹³<入<如<å°¿<韮<ä»»<妊<忍" - "<認<æ¿¡<禰<祢<寧<葱<猫<熱<å¹´<念<捻<撚<燃<粘<乃<廼<之<埜<嚢<悩<濃<納<能<脳<膿<è¾²<覗<蚤<å·´<把<播<覇<杷<æ³¢" - "<æ´¾<琶<ç ´<婆<ç½µ<芭<馬<俳<廃<拝<排<敗<杯<盃<牌<背<肺<輩<配<倍<培<媒<梅<楳<煤<狽<è²·<売<è³ <陪<這<蝿<秤<矧" - "<萩<伯<剥<博<拍<柏<泊<白<箔<粕<舶<薄<è¿«<曝<æ¼ <爆<縛<莫<駁<麦<函<ç®±<硲<箸<肇<筈<櫨<幡<肌<畑<畠<八<鉢<溌" - "<発<醗<髪<伐<ç½°<抜<筏<閥<鳩<噺<塙<蛤<隼<ä¼´<判<半<反<叛<帆<搬<斑<板<æ°¾<汎<版<犯<班<畔<繁<般<藩<販<範<釆" - "<煩<頒<飯<挽<晩<番<盤<磐<蕃<蛮<匪<卑<否<妃<庇<å½¼<悲<扉<批<披<斐<比<泌<疲<皮<碑<秘<緋<ç½·<肥<被<誹<è²»<避" - "<非<飛<樋<ç°¸<備<å°¾<å¾®<枇<毘<琵<眉<美<é¼»<柊<稗<匹<疋<é«­<彦<膝<菱<肘<å¼¼<必<畢<筆<逼<桧<姫<媛<紐<百<謬<俵" - "<彪<標<æ°·<漂<瓢<票<表<評<è±¹<廟<描<病<秒<苗<錨<鋲<蒜<蛭<é°­<品<彬<斌<浜<瀕<貧<賓<é »<敏<瓶<不<付<埠<夫<婦" - "<富<冨<布<府<怖<扶<敷<斧<普<æµ®<父<符<腐<膚<芙<譜<è² <賦<èµ´<阜<附<ä¾®<撫<æ­¦<舞<葡<蕪<部<封<楓<風<葺<蕗<伏" - "<副<復<幅<服<福<腹<複<覆<æ·µ<弗<払<沸<仏<物<鮒<分<吻<噴<墳<憤<扮<焚<奮<粉<糞<紛<雰<文<聞<丙<ä½µ<兵<塀<å¹£" - "<å¹³<弊<柄<並<蔽<閉<陛<ç±³<頁<僻<壁<癖<碧<別<瞥<蔑<箆<偏<変<片<篇<ç·¨<辺<返<遍<便<勉<娩<弁<鞭<保<舗<鋪<圃" - "<捕<æ­©<甫<補<輔<穂<募<墓<慕<戊<暮<母<ç°¿<菩<倣<俸<包<呆<å ±<奉<宝<å³°<峯<å´©<庖<抱<捧<放<方<朋<法<泡<烹<ç ²" - "<縫<胞<芳<萌<蓬<蜂<褒<訪<豊<邦<鋒<飽<é³³<鵬<乏<亡<傍<剖<坊<妨<帽<忘<忙<房<暴<望<某<棒<冒<ç´¡<肪<膨<謀<貌" - "<貿<鉾<防<吠<é ¬<北<僕<卜<墨<撲<朴<牧<睦<穆<釦<勃<没<殆<堀<幌<奔<本<ç¿»<凡<盆<摩<磨<魔<麻<埋<妹<昧<枚<毎" - "<哩<槙<幕<膜<枕<鮪<柾<鱒<桝<亦<ä¿£<又<抹<末<沫<迄<ä¾­<ç¹­<麿<万<慢<満<漫<蔓<味<未<魅<å·³<箕<岬<密<蜜<湊<蓑" - "<稔<脈<妙<粍<民<眠<務<夢<無<牟<矛<霧<鵡<椋<å©¿<娘<冥<名<命<明<盟<è¿·<銘<é³´<姪<牝<滅<免<棉<綿<ç·¬<面<麺<摸" - "<模<茂<妄<孟<毛<猛<盲<網<耗<蒙<儲<木<黙<目<杢<勿<餅<å°¤<戻<ç±¾<è²°<問<悶<紋<門<匁<也<冶<夜<爺<耶<野<å¼¥<矢" - "<厄<å½¹<約<薬<訳<躍<靖<柳<薮<鑓<愉<愈<æ²¹<癒<è«­<輸<唯<佑<優<勇<友<宥<å¹½<悠<憂<揖<有<柚<湧<涌<猶<猷<由<祐" - "<裕<誘<遊<邑<郵<雄<融<夕<予<余<与<誉<輿<預<傭<å¹¼<妖<容<庸<揚<揺<擁<曜<楊<様<洋<溶<熔<用<窯<羊<耀<葉<蓉" - "<要<謡<踊<遥<陽<養<慾<抑<欲<沃<æµ´<翌<翼<淀<羅<螺<裸<来<莱<é ¼<雷<洛<絡<落<酪<ä¹±<卵<嵐<欄<æ¿«<藍<蘭<覧<利" - "<吏<å±¥<李<梨<理<璃<痢<裏<裡<里<離<陸<律<率<立<葎<掠<略<劉<流<溜<琉<留<ç¡«<粒<隆<竜<龍<侶<慮<旅<虜<了<亮" - "<僚<両<凌<寮<料<梁<涼<猟<療<瞭<稜<糧<良<諒<遼<量<陵<領<力<緑<倫<厘<林<淋<燐<琳<臨<輪<隣<鱗<麟<瑠<塁<涙" - "<ç´¯<類<令<伶<例<冷<励<嶺<怜<玲<礼<苓<鈴<隷<零<霊<麗<é½¢<暦<æ­´<列<劣<烈<裂<廉<恋<憐<æ¼£<煉<ç°¾<ç·´<聯<蓮<連" - "<錬<呂<é­¯<櫓<炉<賂<è·¯<露<労<婁<廊<弄<朗<楼<榔<浪<漏<牢<狼<篭<老<聾<蝋<郎<六<麓<禄<肋<録<論<倭<和<話<æ­ª" - "<賄<脇<惑<枠<é·²<亙<亘<鰐<è©«<藁<蕨<椀<æ¹¾<碗<腕<弌<丐<丕<个<丱<丶<丼<丿<乂<乖<乘<亂<亅<豫<亊<舒<弍<于<亞" - "<亟<亠<亢<亰<亳<亶<从<仍<仄<仆<仂<仗<仞<ä»­<仟<ä»·<伉<佚<ä¼°<佛<佝<佗<佇<佶<侈<侏<侘<ä½»<佩<ä½°<侑<佯<來<侖" - "<儘<俔<俟<俎<俘<俛<俑<俚<俐<俤<ä¿¥<倚<倨<倔<倪<倥<倅<伜<俶<倡<倩<倬<俾<俯<們<倆<偃<假<會<偕<偐<偈<做<偖" - "<偬<偸<傀<傚<傅<傴<傲<僉<僊<傳<僂<僖<僞<僥<僭<僣<僮<價<僵<儉<儁<儂<儖<儕<儔<儚<儡<儺<儷<儼<儻<儿<兀<兒" - "<兌<兔<兢<竸<兩<兪<兮<冀<冂<囘<册<冉<冏<冑<冓<冕<冖<冤<冦<冢<冩<冪<冫<决<冱<冲<冰<况<冽<凅<凉<凛<几<處" - "<凩<凭<凰<凵<凾<刄<刋<刔<刎<刧<刪<刮<刳<刹<剏<剄<剋<剌<剞<剔<剪<剴<剩<剳<剿<剽<劍<劔<劒<剱<劈<劑<辨<辧" - "<劬<劭<劼<劵<勁<勍<勗<勞<勣<勦<飭<勠<勳<勵<勸<勹<匆<匈<甸<匍<匐<匏<匕<匚<匣<匯<匱<匳<匸<區<卆<卅<丗<卉" - "<卍<凖<卞<卩<卮<夘<卻<卷<厂<厖<厠<厦<厥<厮<厰<厶<參<簒<雙<叟<曼<燮<叮<叨<叭<叺<吁<吽<呀<听<吭<吼<吮<吶" - "<吩<吝<呎<咏<呵<咎<呟<呱<呷<呰<咒<呻<咀<呶<咄<咐<咆<哇<咢<咸<咥<咬<哄<哈<咨<咫<哂<咤<咾<咼<哘<哥<哦<唏" - "<唔<哽<哮<哭<哺<哢<唹<啀<啣<啌<售<啜<啅<啖<啗<唸<唳<啝<喙<喀<咯<喊<喟<啻<啾<喘<喞<單<啼<喃<喩<喇<喨<嗚" - "<嗅<嗟<嗄<嗜<嗤<嗔<嘔<嗷<嘖<嗾<嗽<嘛<嗹<噎<噐<營<嘴<嘶<嘲<嘸<噫<噤<嘯<噬<噪<嚆<嚀<嚊<嚠<嚔<嚏<嚥<嚮<嚶" - "<嚴<囂<嚼<囁<囃<囀<囈<囎<囑<囓<囗<囮<囹<圀<囿<圄<圉<圈<國<圍<圓<團<圖<嗇<圜<圦<圷<圸<坎<圻<址<坏<坩<埀" - "<垈<坡<坿<垉<垓<垠<垳<垤<垪<垰<埃<埆<埔<埒<埓<堊<埖<埣<堋<堙<堝<塲<å ¡<å¡¢<塋<å¡°<毀<塒<å ½<塹<墅<墹<墟<墫" - "<墺<壞<墻<墸<墮<壅<壓<壑<壗<壙<壘<壥<壜<壤<壟<壯<壺<壹<壻<壼<壽<夂<夊<夐<夛<梦<夥<夬<夭<夲<夸<夾<竒<奕" - "<奐<奎<奚<奘<奢<奠<奧<奬<奩<奸<妁<妝<佞<侫<妣<妲<姆<姨<姜<妍<姙<姚<娥<娟<娑<娜<娉<娚<婀<婬<婉<娵<娶<å©¢" - "<婪<媚<媼<媾<嫋<嫂<媽<å«£<嫗<嫦<å«©<嫖<嫺<å«»<嬌<嬋<嬖<嬲<嫐<嬪<嬶<嬾<孃<孅<孀<孑<孕<孚<孛<å­¥<å­©<å­°<å­³<å­µ" - "<å­¸<斈<å­º<宀<它<宦<宸<寃<寇<寉<寔<寐<寤<實<寢<寞<寥<寫<寰<寶<寳<尅<將<專<對<尓<å° <å°¢<å°¨<å°¸<å°¹<屁<屆<屎" - "<屓<屐<屏<å­±<屬<å±®<ä¹¢<屶<å±¹<岌<岑<岔<妛<岫<å²»<岶<å²¼<å²·<峅<å²¾<峇<峙<峩<å³½<峺<å³­<嶌<峪<崋<崕<崗<嵜<崟<崛" - "<崑<崔<å´¢<崚<崙<崘<嵌<嵒<嵎<嵋<嵬<åµ³<嵶<嶇<嶄<嶂<嶢<嶝<嶬<嶮<嶽<嶐<嶷<嶼<巉<巍<巓<巒<巖<巛<å·«<å·²<å·µ<帋" - "<帚<帙<帑<帛<帶<帷<幄<幃<幀<幎<幗<幔<幟<å¹¢<幤<幇<å¹µ<并<幺<麼<广<庠<廁<廂<廈<廐<廏<廖<廣<廝<廚<廛<廢<廡" - "<廨<廩<廬<å»±<廳<å»°<å»´<廸<廾<弃<弉<彝<彜<弋<弑<弖<弩<å¼­<弸<彁<彈<彌<彎<弯<彑<彖<彗<彙<彡<å½­<å½³<å½·<徃<徂" - "<彿<徊<很<徑<徇<從<徙<徘<å¾ <徨<å¾­<å¾¼<忖<å¿»<忤<忸<忱<忝<悳<å¿¿<怡<恠<怙<怐<怩<怎<怱<怛<怕<怫<怦<怏<怺<恚" - "<恁<恪<恷<恟<恊<恆<恍<恣<恃<恤<恂<恬<恫<恙<悁<悍<惧<悃<悚<悄<悛<悖<悗<悒<悧<悋<惡<悸<惠<惓<悴<å¿°<悽<惆" - "<悵<惘<慍<愕<愆<惶<惷<愀<惴<惺<愃<愡<惻<惱<愍<愎<慇<愾<愨<愧<慊<愿<愼<愬<愴<愽<慂<慄<慳<慷<慘<慙<慚<慫" - "<慴<慯<慥<慱<慟<慝<慓<慵<憙<憖<憇<憬<憔<憚<憊<憑<憫<憮<懌<懊<應<懷<懈<懃<懆<憺<懋<ç½¹<懍<懦<懣<懶<懺<懴" - "<懿<懽<懼<懾<戀<戈<戉<戍<戌<戔<戛<戞<戡<截<戮<戰<戲<戳<扁<扎<扞<扣<扛<扠<扨<扼<抂<抉<找<抒<抓<抖<拔<抃" - "<抔<拗<拑<抻<拏<拿<拆<擔<拈<拜<拌<拊<拂<拇<抛<拉<挌<拮<拱<挧<挂<挈<拯<拵<捐<挾<捍<搜<捏<掖<掎<掀<掫<捶" - "<掣<掏<掉<掟<掵<捫<捩<掾<揩<揀<揆<揣<揉<插<揶<揄<搖<搴<搆<搓<搦<搶<攝<搗<搨<搏<摧<摯<摶<摎<攪<撕<撓<撥" - "<撩<撈<撼<據<擒<擅<擇<撻<擘<擂<擱<擧<舉<擠<擡<抬<擣<擯<攬<擶<擴<擲<擺<攀<擽<攘<攜<攅<攤<攣<攫<攴<攵<攷" - "<收<攸<畋<效<敖<敕<敍<敘<敞<敝<敲<數<斂<斃<變<斛<斟<斫<斷<旃<旆<旁<旄<旌<旒<旛<旙<无<旡<旱<杲<昊<昃<旻" - "<杳<昵<昶<昴<昜<晏<晄<晉<晁<晞<晝<晤<晧<晨<晟<晢<晰<暃<暈<暎<暉<暄<暘<暝<曁<暹<曉<暾<暼<曄<暸<曖<曚<曠" - "<昿<曦<曩<曰<曵<曷<朏<朖<朞<朦<朧<霸<朮<朿<朶<杁<朸<朷<杆<杞<杠<杙<杣<杤<枉<杰<枩<杼<杪<枌<枋<枦<枡<枅" - "<枷<柯<枴<柬<枳<柩<枸<柤<柞<柝<柢<柮<枹<柎<柆<柧<檜<栞<框<æ ©<桀<桍<æ ²<桎<梳<æ «<桙<æ¡£<æ¡·<æ¡¿<梟<梏<梭<梔" - "<條<梛<梃<檮<梹<æ¡´<梵<梠<梺<椏<梍<桾<椁<棊<椈<棘<椢<椦<棡<椌<棍<棔<棧<棕<椶<椒<椄<棗<棣<椥<棹<棠<棯<椨" - "<椪<椚<椣<椡<棆<楹<楷<楜<楸<楫<楔<楾<楮<椹<楴<椽<楙<椰<楡<楞<楝<榁<楪<榲<榮<槐<榿<槁<槓<榾<槎<寨<槊<槝" - "<榻<槃<榧<樮<榑<榠<榜<榕<榴<槞<槨<樂<樛<槿<權<槹<槲<槧<樅<榱<樞<槭<樔<槫<樊<樒<櫁<樣<樓<橄<樌<橲<樶<橸" - "<橇<æ©¢<橙<橦<橈<樸<樢<檐<檍<檠<檄<檢<檣<檗<蘗<檻<櫃<櫂<檸<檳<檬<櫞<櫑<櫟<檪<櫚<櫪<æ«»<欅<蘖<櫺<欒<欖<鬱" - "<欟<欸<欷<盜<欹<飮<歇<歃<歉<歐<歙<歔<歛<歟<æ­¡<æ­¸<æ­¹<æ­¿<殀<殄<殃<殍<殘<殕<殞<殤<殪<殫<殯<殲<æ®±<殳<æ®·<殼" - "<毆<毋<毓<毟<毬<毫<毳<毯<麾<氈<氓<气<氛<æ°¤<æ°£<汞<汕<æ±¢<汪<沂<沍<沚<沁<沛<æ±¾<汨<æ±³<沒<沐<泄<æ³±<泓<æ²½<泗" - "<泅<泝<æ²®<æ²±<æ²¾<沺<泛<泯<泙<泪<洟<衍<æ´¶<æ´«<æ´½<æ´¸<洙<æ´µ<æ´³<洒<洌<æµ£<涓<浤<浚<æµ¹<浙<涎<涕<濤<涅<æ·¹<渕<渊" - "<涵<淇<æ·¦<涸<淆<æ·¬<淞<淌<æ·¨<淒<淅<æ·º<淙<æ·¤<淕<æ·ª<æ·®<渭<æ¹®<渮<渙<æ¹²<湟<渾<渣<湫<渫<湶<湍<渟<湃<渺<湎<渤" - "<滿<渝<游<溂<溪<溘<滉<溷<滓<溽<溯<滄<溲<滔<滕<溏<溥<滂<溟<潁<漑<灌<滬<滸<滾<漿<滲<æ¼±<滯<æ¼²<滌<æ¼¾<漓<æ»·" - "<澆<潺<潸<澁<澀<潯<潛<濳<æ½­<澂<æ½¼<潘<澎<澑<濂<潦<æ¾³<æ¾£<澡<澤<æ¾¹<濆<澪<濟<濕<濬<濔<濘<濱<æ¿®<濛<瀉<瀋<濺" - "<瀑<瀁<瀏<濾<瀛<瀚<æ½´<瀝<瀘<瀟<瀰<瀾<瀲<灑<灣<炙<炒<炯<烱<炬<炸<炳<炮<烟<烋<烝<烙<焉<烽<焜<焙<煥<煕<熈" - "<煦<煢<煌<煖<煬<熏<燻<熄<熕<熨<熬<燗<熹<熾<燒<燉<燔<燎<燠<燬<燧<燵<燼<燹<燿<爍<爐<爛<爨<爭<爬<爰<爲<爻" - "<爼<爿<牀<牆<牋<牘<牴<牾<犂<犁<犇<犒<犖<犢<犧<犹<犲<狃<狆<狄<狎<狒<狢<狠<狡<狹<狷<倏<猗<猊<猜<猖<猝<猴" - "<猯<猩<猥<猾<獎<獏<默<獗<獪<獨<獰<獸<獵<獻<獺<珈<玳<珎<玻<珀<珥<珮<珞<璢<琅<瑯<琥<珸<琲<琺<瑕<琿<瑟<瑙" - "<瑁<瑜<瑩<瑰<瑣<瑪<瑶<瑾<璋<璞<璧<瓊<瓏<瓔<珱<瓠<瓣<瓧<瓩<瓮<瓲<瓰<瓱<瓸<瓷<甄<甃<甅<甌<甎<甍<甕<甓<甞" - "<甦<甬<甼<畄<畍<畊<畉<畛<畆<畚<畩<畤<畧<畫<畭<畸<當<疆<疇<畴<疊<疉<疂<疔<疚<疝<疥<疣<痂<疳<痃<疵<疽<疸" - "<疼<疱<痍<痊<痒<痙<痣<痞<痾<痿<痼<瘁<痰<痺<痲<痳<瘋<瘍<瘉<瘟<瘧<瘠<瘡<瘢<瘤<瘴<瘰<瘻<癇<癈<癆<癜<癘<癡" - "<癢<癨<癩<癪<癧<癬<癰<癲<癶<癸<發<皀<皃<皈<皋<皎<皖<皓<皙<皚<皰<皴<皸<皹<皺<盂<盍<盖<盒<盞<盡<盥<盧<盪" - "<蘯<盻<眈<眇<眄<眩<眤<眞<眥<眦<眛<眷<眸<睇<睚<睨<睫<睛<睥<睿<睾<睹<瞎<瞋<瞑<瞠<瞞<瞰<瞶<瞹<瞿<瞼<瞽<瞻" - "<矇<矍<矗<矚<矜<矣<矮<矼<砌<砒<礦<ç  <礪<硅<碎<ç¡´<碆<硼<碚<碌<碣<碵<碪<碯<磑<磆<磋<磔<碾<碼<磅<磊<磬<磧" - "<磚<磽<磴<礇<礒<礑<礙<礬<礫<祀<祠<祗<祟<祚<祕<祓<祺<祿<禊<禝<禧<齋<禪<禮<禳<禹<禺<秉<秕<秧<秬<秡<秣<稈" - "<稍<稘<稙<稠<稟<禀<稱<稻<稾<稷<穃<穗<穉<ç©¡<ç©¢<ç©©<龝<ç©°<穹<穽<窈<窗<窕<窘<窖<窩<竈<窰<窶<竅<竄<窿<邃<竇" - "<竊<竍<竏<竕<竓<站<竚<竝<ç«¡<ç«¢<竦<ç«­<ç«°<笂<笏<笊<笆<笳<笘<笙<笞<笵<笨<笶<筐<ç­º<笄<筍<笋<筌<筅<ç­µ<ç­¥<ç­´" - "<ç­§<ç­°<ç­±<ç­¬<ç­®<箝<箘<箟<箍<箜<箚<箋<箒<箏<筝<箙<篋<篁<篌<篏<ç®´<篆<篝<篩<簑<簔<篦<篥<ç± <簀<簇<簓<篳<篷" - "<簗<簍<篶<ç°£<ç°§<ç°ª<簟<ç°·<ç°«<ç°½<籌<籃<籔<籏<籀<籐<籘<籟<籤<籖<ç±¥<籬<ç±µ<粃<粐<粤<ç²­<ç²¢<粫<粡<粨<ç²³<ç²²<ç²±" - "<ç²®<ç²¹<ç²½<糀<糅<糂<糘<糒<糜<ç³¢<鬻<糯<ç³²<ç³´<糶<糺<紆<紂<紜<紕<紊<絅<絋<ç´®<ç´²<ç´¿<ç´µ<絆<çµ³<絖<絎<çµ²<絨<çµ®" - "<絏<çµ£<經<綉<絛<綏<çµ½<綛<綺<綮<綣<綵<緇<綽<綫<總<綢<綯<緜<綸<綟<綰<緘<緝<ç·¤<緞<ç·»<ç·²<ç·¡<縅<縊<縣<縡<縒" - "<縱<縟<縉<縋<縢<繆<繦<縻<縵<縹<繃<縷<縲<縺<繧<繝<繖<繞<繙<繚<ç¹¹<繪<繩<ç¹¼<ç¹»<纃<緕<ç¹½<è¾®<繿<纈<纉<續<纒" - "<纐<纓<纔<纖<纎<纛<纜<缸<缺<罅<罌<罍<罎<罐<网<罕<罔<罘<罟<ç½ <罨<罩<罧<罸<羂<羆<羃<羈<羇<羌<羔<羞<羝<羚" - "<ç¾£<羯<ç¾²<ç¾¹<ç¾®<羶<羸<è­±<翅<翆<翊<翕<翔<ç¿¡<翦<ç¿©<翳<翹<飜<耆<耄<耋<耒<耘<耙<耜<耡<耨<耿<耻<聊<聆<聒<聘" - "<聚<聟<聢<聨<聳<聲<聰<聶<聹<聽<聿<肄<肆<肅<肛<肓<肚<肭<冐<肬<胛<胥<胙<胝<胄<胚<胖<脉<胯<胱<脛<脩<脣<脯" - "<腋<隋<腆<脾<腓<腑<胼<腱<腮<腥<腦<腴<膃<膈<膊<膀<膂<膠<膕<膤<膣<腟<膓<膩<膰<膵<膾<膸<膽<臀<臂<膺<臉<臍" - "<臑<臙<臘<臈<臚<臟<臠<臧<臺<臻<臾<舁<舂<舅<與<舊<舍<舐<舖<舩<舫<舸<舳<艀<艙<艘<艝<艚<艟<艤<艢<艨<艪<艫" - "<舮<艱<艷<艸<艾<芍<芒<芫<芟<芻<芬<苡<苣<苟<苒<苴<苳<苺<莓<范<苻<苹<苞<茆<苜<茉<苙<茵<茴<茖<茲<茱<荀<茹" - "<荐<荅<茯<茫<茗<茘<莅<莚<莪<莟<莢<莖<茣<莎<莇<莊<荼<莵<荳<荵<莠<莉<莨<菴<萓<菫<菎<菽<萃<菘<萋<菁<菷<萇" - "<菠<菲<萍<萢<萠<莽<萸<蔆<菻<葭<萪<萼<蕚<蒄<葷<葫<蒭<葮<蒂<葩<葆<萬<葯<葹<萵<蓊<葢<蒹<蒿<蒟<蓙<蓍<蒻<蓚" - "<蓐<蓁<蓆<蓖<蒡<蔡<蓿<蓴<蔗<蔘<蔬<蔟<蔕<蔔<蓼<蕀<蕣<蕘<蕈<蕁<蘂<蕋<蕕<薀<薤<薈<薑<薊<薨<蕭<薔<薛<藪<薇" - "<薜<蕷<蕾<薐<藉<薺<藏<薹<藐<藕<藝<藥<藜<藹<蘊<蘓<蘋<藾<藺<蘆<蘢<蘚<蘰<蘿<虍<乕<虔<號<虧<虱<蚓<蚣<蚩<蚪" - "<蚋<蚌<蚶<蚯<蛄<蛆<蚰<蛉<è £<蚫<蛔<蛞<蛩<蛬<蛟<蛛<蛯<蜒<蜆<蜈<蜀<蜃<蛻<蜑<蜉<蜍<蛹<蜊<蜴<蜿<蜷<蜻<蜥<蜩" - "<蜚<蝠<蝟<蝸<蝌<蝎<蝴<蝗<蝨<蝮<蝙<蝓<蝣<蝪<蠅<螢<螟<螂<螯<蟋<螽<蟀<蟐<雖<螫<蟄<螳<蟇<蟆<螻<蟯<蟲<蟠<蠏" - "<蠍<蟾<蟶<蟷<蠎<蟒<蠑<蠖<蠕<è ¢<è ¡<è ±<è ¶<è ¹<è §<è »<衄<衂<衒<衙<衞<è¡¢<è¡«<袁<衾<袞<衵<衽<袵<衲<袂<袗<袒<袮" - "<袙<袢<袍<袤<袰<袿<袱<裃<裄<裔<裘<裙<裝<裹<褂<裼<裴<裨<裲<褄<褌<褊<褓<襃<褞<褥<褪<褫<襁<襄<褻<褶<褸<襌" - "<褝<襠<襞<襦<襤<襭<襪<襯<襴<襷<襾<覃<覈<覊<覓<覘<覡<覩<覦<覬<覯<覲<覺<覽<覿<觀<觚<觜<觝<觧<觴<觸<訃<訖" - "<訐<訌<訛<訝<訥<訶<詁<詛<詒<詆<詈<詼<è©­<詬<è©¢<誅<誂<誄<誨<誡<誑<誥<誦<誚<誣<諄<諍<諂<諚<è««<諳<諧<諤<諱" - "<謔<è« <è«¢<è«·<諞<諛<謌<謇<謚<è«¡<謖<謐<謗<謠<謳<鞫<謦<謫<謾<謨<譁<譌<譏<譎<證<譖<譛<譚<è­«<譟<è­¬<è­¯<è­´<è­½" - "<讀<讌<讎<讒<讓<讖<讙<讚<è°º<豁<è°¿<豈<豌<豎<豐<豕<è±¢<豬<豸<豺<貂<貉<貅<貊<貍<貎<貔<è±¼<貘<戝<è²­<貪<è²½<è²²" - "<è²³<è²®<貶<賈<賁<賤<è³£<賚<è³½<賺<è³»<贄<贅<贊<贇<贏<贍<贐<齎<贓<賍<贔<贖<赧<èµ­<èµ±<èµ³<趁<趙<跂<趾<趺<跏<跚" - "<跖<跌<跛<跋<è·ª<è·«<跟<è·£<è·¼<踈<踉<è·¿<踝<踞<踐<踟<蹂<踵<踰<踴<蹊<蹇<蹉<蹌<蹐<蹈<蹙<蹤<è¹ <踪<è¹£<蹕<蹶<è¹²" - "<è¹¼<躁<躇<躅<躄<躋<躊<躓<躑<躔<躙<躪<躡<躬<躰<軆<躱<躾<軅<軈<軋<軛<軣<軼<è»»<軫<軾<輊<輅<輕<輒<輙<輓<輜" - "<輟<輛<輌<輦<è¼³<è¼»<è¼¹<轅<轂<è¼¾<轌<轉<轆<轎<轗<轜<è½¢<è½£<轤<辜<辟<è¾£<è¾­<辯<è¾·<迚<è¿¥<è¿¢<迪<迯<邇<è¿´<逅<迹" - "<迺<逑<逕<逡<逍<逞<逖<逋<逧<逶<逵<逹<迸<遏<遐<遑<遒<逎<遉<逾<遖<遘<遞<遨<遯<遶<隨<遲<邂<遽<邁<邀<邊<邉" - "<邏<邨<邯<邱<邵<郢<郤<扈<郛<鄂<鄒<鄙<鄲<鄰<酊<酖<酘<酣<酥<酩<酳<酲<醋<醉<醂<醢<醫<醯<醪<醵<醴<醺<釀<釁" - "<釉<釋<釐<釖<釟<釡<釛<釼<釵<釶<鈞<釿<鈔<鈬<鈕<鈑<鉞<鉗<鉅<鉉<鉤<鉈<銕<鈿<鉋<鉐<銜<銖<銓<銛<鉚<鋏<銹<銷" - "<鋩<錏<鋺<鍄<錮<錙<錢<錚<錣<錺<錵<錻<鍜<鍠<鍼<鍮<鍖<鎰<鎬<鎭<鎔<鎹<鏖<鏗<鏨<鏥<鏘<鏃<鏝<鏐<鏈<鏤<鐚<鐔" - "<鐓<鐃<鐇<鐐<鐶<鐫<鐵<鐡<鐺<鑁<鑒<鑄<鑛<鑠<鑢<鑞<鑪<鈩<鑰<鑵<鑷<鑽<鑚<鑼<鑾<钁<鑿<閂<閇<閊<閔<閖<閘<閙" - "<閠<閨<閧<閭<閼<閻<閹<閾<闊<濶<闃<闍<闌<闕<闔<闖<關<闡<闥<闢<阡<阨<阮<阯<陂<陌<陏<陋<陷<陜<陞<陝<陟<陦" - "<陲<陬<隍<隘<隕<隗<險<隧<隱<隲<隰<隴<隶<隸<隹<雎<雋<雉<雍<襍<雜<霍<雕<雹<霄<霆<霈<霓<霎<霑<霏<霖<霙<霤" - "<霪<霰<霹<霽<霾<靄<靆<靈<靂<靉<靜<靠<靤<靦<靨<勒<靫<靱<靹<鞅<靼<鞁<靺<鞆<鞋<鞏<鞐<鞜<鞨<鞦<鞣<鞳<鞴<韃" - "<韆<韈<韋<韜<韭<齏<韲<竟<韶<韵<頏<頌<é ¸<é ¤<é ¡<é ·<é ½<顆<顏<顋<é¡«<顯<é¡°<顱<é¡´<顳<颪<颯<颱<颶<飄<飃<飆<飩" - "<飫<餃<餉<餒<餔<餘<餡<餝<餞<餤<餠<餬<餮<餽<餾<饂<饉<饅<饐<饋<饑<饒<饌<饕<馗<馘<馥<馭<馮<馼<駟<駛<駝<駘" - "<駑<駭<駮<駱<駲<駻<駸<騁<騏<騅<駢<騙<騫<騷<驅<驂<驀<驃<騾<驕<驍<驛<驗<驟<é©¢<é©¥<驤<é©©<é©«<驪<骭<骰<骼<髀" - "<髏<髑<髓<體<髞<髟<é«¢<é«£<髦<髯<é««<é«®<é«´<髱<é«·<é«»<鬆<鬘<鬚<鬟<鬢<鬣<鬥<鬧<鬨<鬩<鬪<鬮<鬯<鬲<魄<魃<魏<魍" - "<魎<魑<魘<é­´<鮓<鮃<鮑<鮖<鮗<鮟<é® <鮨<é®´<鯀<鯊<鮹<鯆<鯏<鯑<鯒<鯣<鯢<鯤<鯔<鯡<é°º<鯲<鯱<鯰<鰕<鰔<鰉<鰓<鰌" - "<鰆<鰈<鰒<鰊<鰄<é°®<鰛<é°¥<é°¤<é°¡<é°°<鱇<é°²<鱆<é°¾<鱚<é± <鱧<鱶<鱸<鳧<鳬<é³°<鴉<鴈<鳫<鴃<鴆<é´ª<é´¦<鶯<é´£<鴟<鵄" - "<鴕<鴒<鵁<é´¿<é´¾<鵆<鵈<鵝<鵞<鵤<鵑<鵐<鵙<éµ²<鶉<鶇<鶫<鵯<鵺<鶚<鶤<鶩<鶲<鷄<鷁<鶻<鶸<鶺<鷆<鷏<鷂<鷙<鷓<é·¸" - "<é·¦<é·­<é·¯<é·½<鸚<鸛<鸞<é¹µ<é¹¹<é¹½<麁<麈<麋<麌<麒<麕<麑<麝<麥<麩<麸<麪<麭<靡<黌<黎<黏<黐<黔<黜<點<黝<é» <黥" - "<黨<黯<é»´<黶<é»·<黹<é»»<黼<黽<鼇<鼈<皷<鼕<鼡<鼬<é¼¾<齊<齒<齔<é½£<齟<é½ <齡<齦<齧<齬<齪<é½·<é½²<齶<龕<龜<é¾ <å ¯" - "<槇<遙<瑤<凜<熙" - } - Version{"4.0"} - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/ja.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/collation/ja.xml + */ +ja{ + Version{"1.21"} + collations{ + standard{ + Sequence{ + " [strength 3 ] [hiraganaQ on ]" + "&ヽ=ヽ=ゝ" + "&[before 3]ァ<<<ァ|ー=ァ|ー=ぁ|ー=ア|ー=ï½±|ー=あ|ー=カ|ー=カ|ー=か|ー=ガ|ー=が|ー=サ|ー=ï½»|ー=さ" + "|ー=ザ|ー=ざ|ー=タ|ー=タ|ー=た|ー=ダ|ー=だ|ー=ナ|ー=ナ|ー=な|ー=ハ|ー=ハ|ー=は|ー=バ|ー=ば|ー=パ|ー=ぱ" + "|ー=マ|ー=マ|ー=ま|ー=ャ|ー=ャ|ー=ゃ|ー=ヤ|ー=ヤ|ー=や|ー=ラ|ー=ラ|ー=ら|ー=ヮ|ー=ゎ|ー=ワ|ー=ワ|ー=わ" + "|ー=ヵ|ー=ヷ|ー" + "&[before 3]ィ<<<ィ|ー=ィ|ー=ぃ|ー=イ|ー=ï½²|ー=い|ー=キ|ー=ï½·|ー=き|ー=ギ|ー=ぎ|ー=シ|ー=ï½¼|ー=し" + "|ー=ジ|ー=じ|ー=チ|ー=チ|ー=ち|ー=ヂ|ー=ぢ|ー=ニ|ー=ニ|ー=に|ー=ヒ|ー=ヒ|ー=ひ|ー=ビ|ー=び|ー=ピ|ー=ぴ" + "|ー=ミ|ー=ミ|ー=み|ー=リ|ー=リ|ー=り|ー=ヰ|ー=ゐ|ー=ヸ|ー" + "&[before 3]ゥ<<<ゥ|ー=ゥ|ー=ぅ|ー=ウ|ー=ï½³|ー=う|ー=ク|ー=ク|ー=く|ー=グ|ー=ぐ|ー=ス|ー=ï½½|ー=す" + "|ー=ズ|ー=ず|ー=ッ|ー=ッ|ー=っ|ー=ツ|ー=ツ|ー=つ|ー=ヅ|ー=づ|ー=ヌ|ー=ヌ|ー=ぬ|ー=フ|ー=フ|ー=ふ|ー=ブ" + "|ー=ぶ|ー=プ|ー=ぷ|ー=ム|ー=ム|ー=む|ー=ュ|ー=ï½­|ー=ゅ|ー=ユ|ー=ユ|ー=ゆ|ー=ル|ー=ル|ー=る|ー=ヴ|ー=ゔ" + "|ー" + "&[before 3]ェ<<<ェ|ー=ェ|ー=ぇ|ー=エ|ー=ï½´|ー=え|ー=ケ|ー=ï½¹|ー=け|ー=ゲ|ー=げ|ー=セ|ー=ï½¾|ー=せ" + "|ー=ゼ|ー=ぜ|ー=テ|ー=テ|ー=て|ー=デ|ー=で|ー=ネ|ー=ネ|ー=ね|ー=ヘ|ー=ヘ|ー=へ|ー=ベ|ー=べ|ー=ペ|ー=ぺ" + "|ー=メ|ー=メ|ー=め|ー=レ|ー=レ|ー=れ|ー=ヱ|ー=ゑ|ー=ヶ|ー=ヹ|ー" + "&[before 3]ォ<<<ォ|ー=ォ|ー=ぉ|ー=オ|ー=ï½µ|ー=お|ー=コ|ー=コ|ー=こ|ー=ゴ|ー=ご|ー=ソ|ー=ソ|ー=そ" + "|ー=ゾ|ー=ぞ|ー=ト|ー=ト|ー=と|ー=ド|ー=ど|ー=ノ|ー=ノ|ー=の|ー=ホ|ー=ホ|ー=ほ|ー=ボ|ー=ぼ|ー=ポ|ー=ぽ" + "|ー=モ|ー=モ|ー=も|ー=ョ|ー=ï½®|ー=ょ|ー=ヨ|ー=ヨ|ー=よ|ー=ロ|ー=ロ|ー=ろ|ー=ヲ|ー=ヲ|ー=を|ー=ヺ|ー" + "&[before 3]ア<<<ア|ヽ=ï½±|ヽ=あ|ゝ=ァ|ヽ=ァ|ヽ=ぁ|ゝ" + "&[before 3]イ<<<イ|ヽ=ï½²|ヽ=い|ゝ=ィ|ヽ=ィ|ヽ=ぃ|ゝ" + "&[before 3]ウ<<<ウ|ヽ=ï½³|ヽ=う|ゝ=ゥ|ヽ=ゥ|ヽ=ぅ|ゝ=ヴ|ヽ=ゔ|ゝ=ウ|ヾ/゙=ï½³|ヾ/゙=う|ゞ/゙=ゥ|ヾ" + "/゙=ゥ|ヾ/゙=ぅ|ゞ/゙=ヴ|ヾ/゙=ゔ|ゞ/゙" + "&[before 3]エ<<<エ|ヽ=ï½´|ヽ=え|ゝ=ェ|ヽ=ェ|ヽ=ぇ|ゝ" + "&[before 3]オ<<<オ|ヽ=ï½µ|ヽ=お|ゝ=ォ|ヽ=ォ|ヽ=ぉ|ゝ" + "&[before 3]カ<<<カ|ヽ=カ|ヽ=か|ゝ=ヵ|ヽ" + "&[before 3]ガ<<<ガ|ヽ=が|ゝ" + "&[before 3]キ<<<キ|ヽ=ï½·|ヽ=き|ゝ=ギ|ヽ=ぎ|ゝ=キ|ヾ/゙=ï½·|ヾ/゙=き|ゞ/゙=ギ|ヾ/゙=ぎ|ゞ/゙" + "&[before 3]ク<<<ク|ヽ=ク|ヽ=く|ゝ=グ|ヽ=ぐ|ゝ=ク|ヾ/゙=ク|ヾ/゙=く|ゞ/゙=グ|ヾ/゙=ぐ|ゞ/゙" + "&[before 3]ケ<<<ケ|ヽ=ï½¹|ヽ=け|ゝ=ヶ|ヽ" + "&[before 3]ゲ<<<ゲ|ヽ=げ|ゝ" + "&[before 3]コ<<<コ|ヽ=コ|ヽ=こ|ゝ=ゴ|ヽ=ご|ゝ=コ|ヾ/゙=コ|ヾ/゙=こ|ゞ/゙=ゴ|ヾ/゙=ご|ゞ/゙" + "&[before 3]サ<<<サ|ヽ=ï½»|ヽ=さ|ゝ=ザ|ヽ=ざ|ゝ=サ|ヾ/゙=ï½»|ヾ/゙=さ|ゞ/゙=ザ|ヾ/゙=ざ|ゞ/゙" + "&[before 3]シ<<<シ|ヽ=ï½¼|ヽ=し|ゝ=ジ|ヽ=じ|ゝ=シ|ヾ/゙=ï½¼|ヾ/゙=し|ゞ/゙=ジ|ヾ/゙=じ|ゞ/゙" + "&[before 3]ス<<<ス|ヽ=ï½½|ヽ=す|ゝ=ズ|ヽ=ず|ゝ=ス|ヾ/゙=ï½½|ヾ/゙=す|ゞ/゙=ズ|ヾ/゙=ず|ゞ/゙" + "&[before 3]セ<<<セ|ヽ=ï½¾|ヽ=せ|ゝ=ゼ|ヽ=ぜ|ゝ=セ|ヾ/゙=ï½¾|ヾ/゙=せ|ゞ/゙=ゼ|ヾ/゙=ぜ|ゞ/゙" + "&[before 3]ソ<<<ソ|ヽ=ソ|ヽ=そ|ゝ=ゾ|ヽ=ぞ|ゝ=ソ|ヾ/゙=ソ|ヾ/゙=そ|ゞ/゙=ゾ|ヾ/゙=ぞ|ゞ/゙" + "&[before 3]タ<<<タ|ヽ=タ|ヽ=た|ゝ=ダ|ヽ=だ|ゝ=タ|ヾ/゙=タ|ヾ/゙=た|ゞ/゙=ダ|ヾ/゙=だ|ゞ/゙" + "&[before 3]チ<<<チ|ヽ=チ|ヽ=ち|ゝ=ヂ|ヽ=ぢ|ゝ=チ|ヾ/゙=チ|ヾ/゙=ち|ゞ/゙=ヂ|ヾ/゙=ぢ|ゞ/゙" + "&[before 3]ツ<<<ツ|ヽ=ツ|ヽ=つ|ゝ=ッ|ヽ=ッ|ヽ=っ|ゝ=ヅ|ヽ=づ|ゝ=ツ|ヾ/゙=ツ|ヾ/゙=つ|ゞ/゙=ヅ|ヾ" + "/゙=づ|ゞ/゙=ツ|ヽ=ツ|ヽ=つ|ゝ=ッ|ヾ/゙=ッ|ヾ/゙=っ|ゞ/゙=ツ|ヾ/゙=ツ|ヾ/゙=つ|ゞ/゙" + "&[before 3]テ<<<テ|ヽ=テ|ヽ=て|ゝ=デ|ヽ=で|ゝ=テ|ヾ/゙=テ|ヾ/゙=て|ゞ/゙=デ|ヾ/゙=で|ゞ/゙" + "&[before 3]ト<<<ト|ヽ=ト|ヽ=と|ゝ=ド|ヽ=ど|ゝ=ト|ヾ/゙=ト|ヾ/゙=と|ゞ/゙=ド|ヾ/゙=ど|ゞ/゙" + "&[before 3]ナ<<<ナ|ヽ=ナ|ヽ=な|ゝ" + "&[before 3]ニ<<<ニ|ヽ=ニ|ヽ=に|ゝ" + "&[before 3]ヌ<<<ヌ|ヽ=ヌ|ヽ=ぬ|ゝ" + "&[before 3]ネ<<<ネ|ヽ=ネ|ヽ=ね|ゝ" + "&[before 3]ノ<<<ノ|ヽ=ノ|ヽ=の|ゝ" + "&[before 3]ハ<<<ハ|ヽ=ハ|ヽ=は|ゝ=バ|ヽ=ば|ゝ=ハ|ヾ/゙=ハ|ヾ/゙=は|ゞ/゙=バ|ヾ/゙=ば|ゞ/゙=パ|ヽ" + "=ぱ|ゝ=パ|ヾ/゙=ぱ|ゞ/゙" + "&[before 3]ヒ<<<ヒ|ヽ=ヒ|ヽ=ひ|ゝ=ビ|ヽ=び|ゝ=ヒ|ヾ/゙=ヒ|ヾ/゙=ひ|ゞ/゙=ビ|ヾ/゙=び|ゞ/゙=ピ|ヽ" + "=ぴ|ゝ=ピ|ヾ/゙=ぴ|ゞ/゙" + "&[before 3]フ<<<フ|ヽ=フ|ヽ=ふ|ゝ=ブ|ヽ=ぶ|ゝ=フ|ヾ/゙=フ|ヾ/゙=ふ|ゞ/゙=ブ|ヾ/゙=ぶ|ゞ/゙=プ|ヽ" + "=ぷ|ゝ=プ|ヾ/゙=ぷ|ゞ/゙" + "&[before 3]ヘ<<<ヘ|ヽ=ヘ|ヽ=へ|ゝ=ベ|ヽ=べ|ゝ=ヘ|ヾ/゙=ヘ|ヾ/゙=へ|ゞ/゙=ベ|ヾ/゙=べ|ゞ/゙=ペ|ヽ" + "=ぺ|ゝ=ペ|ヾ/゙=ぺ|ゞ/゙" + "&[before 3]ホ<<<ホ|ヽ=ホ|ヽ=ほ|ゝ=ボ|ヽ=ぼ|ゝ=ホ|ヾ/゙=ホ|ヾ/゙=ほ|ゞ/゙=ボ|ヾ/゙=ぼ|ゞ/゙=ポ|ヽ" + "=ぽ|ゝ=ポ|ヾ/゙=ぽ|ゞ/゙" + "&[before 3]マ<<<マ|ヽ=マ|ヽ=ま|ゝ" + "&[before 3]ミ<<<ミ|ヽ=ミ|ヽ=み|ゝ" + "&[before 3]ム<<<ム|ヽ=ム|ヽ=む|ゝ" + "&[before 3]メ<<<メ|ヽ=メ|ヽ=め|ゝ" + "&[before 3]モ<<<モ|ヽ=モ|ヽ=も|ゝ" + "&[before 3]ヤ<<<ヤ|ヽ=ヤ|ヽ=や|ゝ=ャ|ヽ=ャ|ヽ=ゃ|ゝ" + "&[before 3]ユ<<<ユ|ヽ=ユ|ヽ=ゆ|ゝ=ュ|ヽ=ï½­|ヽ=ゅ|ゝ" + "&[before 3]ヨ<<<ヨ|ヽ=ヨ|ヽ=よ|ゝ=ョ|ヽ=ï½®|ヽ=ょ|ゝ" + "&[before 3]ラ<<<ラ|ヽ=ラ|ヽ=ら|ゝ" + "&[before 3]リ<<<リ|ヽ=リ|ヽ=り|ゝ" + "&[before 3]ル<<<ル|ヽ=ル|ヽ=る|ゝ" + "&[before 3]レ<<<レ|ヽ=レ|ヽ=れ|ゝ" + "&[before 3]ロ<<<ロ|ヽ=ロ|ヽ=ろ|ゝ" + "&[before 3]ワ<<<ワ|ヽ=ワ|ヽ=わ|ゝ=ヮ|ヽ=ゎ|ゝ=ヷ|ヽ=ワ|ヾ/゙=ワ|ヾ/゙=わ|ゞ/゙=ヷ|ヾ/゙=ヮ|ヾ/゙" + "=ゎ|ゞ/゙" + "&[before 3]ヰ<<<ヰ|ヽ=ゐ|ゝ=ヸ|ヽ=ヰ|ヾ/゙=ゐ|ゞ/゙=ヸ|ヾ/゙" + "&[before 3]ヱ<<<ヱ|ヽ=ゑ|ゝ=ヹ|ヽ=ヱ|ヾ/゙=ゑ|ゞ/゙=ヹ|ヾ/゙" + "&[before 3]ヲ<<<ヲ|ヽ=ヲ|ヽ=を|ゝ=ヺ|ヽ=ヲ|ヾ/゙=ヲ|ヾ/゙=を|ゞ/゙=ヺ|ヾ/゙" + "&[before 3]ン<<<ン|ヽ=ン|ヽ=ん|ゝ" + "&ァ=ァ=ぁ=ァ" + "&ア=ア=あ=ï½±" + "&ィ=ィ=ぃ=ィ" + "&イ=イ=い=ï½²" + "&ゥ=ゥ=ぅ=ゥ" + "&ウ=ウ=う=ï½³" + "&ェ=ェ=ぇ=ェ" + "&エ=エ=え=ï½´" + "&ォ=ォ=ぉ=ォ" + "&オ=オ=お=ï½µ" + "&カ=カ=か=カ" + "&キ=キ=き=ï½·" + "&ク=ク=く=ク" + "&ケ=ケ=け=ï½¹" + "&コ=コ=こ=コ" + "&サ=サ=さ=ï½»" + "&シ=シ=し=ï½¼" + "&ス=ス=す=ï½½" + "&セ=セ=せ=ï½¾" + "&ソ=ソ=そ=ソ" + "&タ=タ=た=タ" + "&チ=チ=ち=チ" + "&ッ=ッ=っ=ッ" + "&ツ=ツ=つ=ツ" + "&テ=テ=て=テ" + "&ト=ト=と=ト" + "&ナ=ナ=な=ナ" + "&ニ=ニ=に=ニ" + "&ヌ=ヌ=ぬ=ヌ" + "&ネ=ネ=ね=ネ" + "&ノ=ノ=の=ノ" + "&ハ=ハ=は=ハ" + "&ヒ=ヒ=ひ=ヒ" + "&フ=フ=ふ=フ" + "&ヘ=ヘ=へ=ヘ" + "&ホ=ホ=ほ=ホ" + "&マ=マ=ま=マ" + "&ミ=ミ=み=ミ" + "&ム=ム=む=ム" + "&メ=メ=め=メ" + "&モ=モ=も=モ" + "&ャ=ャ=ゃ=ャ" + "&ヤ=ヤ=や=ヤ" + "&ュ=ュ=ゅ=ï½­" + "&ユ=ユ=ゆ=ユ" + "&ョ=ョ=ょ=ï½®" + "&ヨ=ヨ=よ=ヨ" + "&ラ=ラ=ら=ラ" + "&リ=リ=り=リ" + "&ル=ル=る=ル" + "&レ=レ=れ=レ" + "&ロ=ロ=ろ=ロ" + "&ヮ=ヮ=ゎ" + "&ワ=ワ=わ=ワ" + "&ヰ=ヰ=ゐ" + "&ヱ=ヱ=ゑ" + "&ヲ=ヲ=を=ヲ" + "&ン=ン=ん=ン" + "&ヵ=ヵ" + "&ヶ=ヶ" + "&ー=ー" + "&゙=゙" + "&゚=゚" + "&'\u0020'='\u3000'=ï¿£" + "&'!'=!" + "&'\"'="" + "&'#'=#" + "&'$'=$" + "&'%'=%" + "&'&'=&" + "&''='" + "&'('=(" + "&')'=)" + "&'*'=*" + "&'+'=+" + "&','=," + "&'-'=-" + "&'.'=." + "&'/'=/" + "&0=0" + "&1=1" + "&2=2" + "&3=3" + "&4=4" + "&5=5" + "&6=6" + "&7=7" + "&8=8" + "&9=9" + "&':'=:" + "&';'=;" + "&'<'=<" + "&'='==" + "&'>'=>" + "&'?'=?" + "&'@'=ï¼ " + "&A=A" + "&B=ï¼¢" + "&C=ï¼£" + "&D=D" + "&E=ï¼¥" + "&F=F" + "&G=G" + "&H=H" + "&I=I" + "&J=J" + "&K=K" + "&L=L" + "&M=ï¼­" + "&N=ï¼®" + "&O=O" + "&P=ï¼°" + "&Q=ï¼±" + "&R=ï¼²" + "&S=ï¼³" + "&T=ï¼´" + "&U=ï¼µ" + "&V=V" + "&W=ï¼·" + "&X=X" + "&Y=ï¼¹" + "&Z=Z" + "&'['=ï¼»" + "&''=ï¼¼" + "&']'=ï¼½" + "&'^'=ï¼¾" + "&'_'=_" + "&'`'=`" + "&a=a" + "&b=b" + "&c=c" + "&d=d" + "&e=e" + "&f=f" + "&g=g" + "&h=h" + "&i=i" + "&j=j" + "&k=k" + "&l=l" + "&m=m" + "&n=n" + "&o=o" + "&p=p" + "&q=q" + "&r=r" + "&s=s" + "&t=t" + "&u=u" + "&v=v" + "&w=w" + "&x=x" + "&y=y" + "&z=z" + "&'{'={" + "&'|'=|" + "&'}'=}" + "&'~'=~" + "&¢=ï¿ " + "&£=ï¿¡" + "&Â¥=ï¿¥" + "&¦=¦" + "&¬=ï¿¢" + "&ᄀ=ᄀ=ㄱ" + "&ᄁ=ï¾¢=ㄲ" + "&ᄂ=ᄂ=ㄴ" + "&ᄃ=ᄃ=ㄷ" + "&ᄄ=ᄄ=ㄸ" + "&ᄅ=ᄅ=ㄹ" + "&ᄆ=ï¾±=ㅁ" + "&ᄇ=ï¾²=ㅂ" + "&ᄈ=ï¾³=ㅃ" + "&ᄉ=ï¾µ=ㅅ" + "&ᄊ=ᄊ=ㅆ" + "&ᄋ=ï¾·=ㅇ" + "&ᄌ=ᄌ=ㅈ" + "&ᄍ=ï¾¹=ㅉ" + "&ᄎ=ᄎ=ㅊ" + "&ᄏ=ï¾»=ㅋ" + "&ᄐ=ï¾¼=ㅌ" + "&ᄑ=ï¾½=ㅍ" + "&ᄒ=ï¾¾=ㅎ" + "&ᄚ=ï¾°=ㅀ" + "&ᄡ=ï¾´=ㅄ" + "&ᅠ=ï¾ =ㅤ" + "&ᅡ=ᅡ=ㅏ" + "&ᅢ=ᅢ=ㅐ" + "&ᅣ=ᅣ=ㅑ" + "&ᅤ=ᅤ=ㅒ" + "&ᅥ=ᅥ=ㅓ" + "&ᅦ=ᅦ=ㅔ" + "&ᅧ=ᅧ=ㅕ" + "&ᅨ=ᅨ=ㅖ" + "&ᅩ=ᅩ=ㅗ" + "&ᅪ=ᅪ=ㅘ" + "&ᅫ=ᅫ=ㅙ" + "&ᅬ=ᅬ=ㅚ" + "&ᅭ=ᅭ=ㅛ" + "&ᅮ=ᅮ=ㅜ" + "&ᅯ=ᅯ=ㅝ" + "&ᅰ=ᅰ=ㅞ" + "&ᅱ=ᅱ=ㅟ" + "&ᅲ=ᅲ=ㅠ" + "&ᅳ=ᅳ=ㅡ" + "&ᅴ=ᅴ=ㅢ" + "&ᅵ=ᅵ=ㅣ" + "&ᆪ=ï¾£=ㄳ" + "&ᆬ=ï¾¥=ㄵ" + "&ᆭ=ᆭ=ㄶ" + "&ᆰ=ᆰ=ㄺ" + "&ᆱ=ᆱ=ㄻ" + "&ᆲ=ᆲ=ㄼ" + "&ᆳ=ï¾­=ㄽ" + "&ᆴ=ï¾®=ㄾ" + "&ᆵ=ᆵ=ㄿ" + "&₩=₩" + "&←=ï¿©" + "&↑=↑" + "&→=ï¿«" + "&↓=↓" + "&│=│" + "&■=ï¿­" + "&○=ï¿®" + "&、=、" + "&。=。" + "&「=ï½¢" + "&」=ï½£" + "&[last regular ]<亜<唖<娃<阿<哀<愛<挨<姶<逢<葵<茜<穐<悪<握<渥<旭<葦<芦<鯵<梓<圧<斡<扱<宛<姐<虻" + "<飴<çµ¢<綾<鮎<或<粟<袷<安<庵<按<暗<案<闇<鞍<杏<以<伊<位<依<偉<囲<夷<委<威<尉<惟<意<慰<易<椅<為<畏<異<移" + "<維<ç·¯<胃<萎<è¡£<謂<違<遺<医<井<亥<域<育<郁<磯<一<壱<溢<逸<稲<茨<芋<é°¯<允<印<咽<員<因<姻<引<飲<æ·«<胤<蔭" + "<院<陰<隠<韻<吋<右<宇<烏<ç¾½<迂<雨<卯<鵜<窺<丑<碓<臼<渦<嘘<唄<欝<蔚<é°»<姥<厩<浦<瓜<閏<噂<云<運<雲<荏<餌" + "<叡<営<嬰<å½±<映<曳<栄<æ°¸<æ³³<æ´©<瑛<盈<穎<é ´<英<衛<è© <鋭<液<疫<益<駅<悦<謁<越<閲<榎<厭<円<園<å °<奄<å®´<延" + "<怨<掩<援<沿<演<炎<焔<煙<燕<猿<縁<艶<苑<薗<遠<鉛<鴛<å¡©<於<汚<甥<凹<央<奥<往<応<押<旺<横<欧<æ®´<王<翁<襖" + "<é´¬<鴎<黄<岡<沖<荻<億<屋<憶<臆<桶<牡<乙<俺<卸<恩<温<穏<音<下<化<ä»®<何<ä¼½<価<ä½³<加<可<嘉<夏<嫁<家<寡<科" + "<暇<果<架<歌<æ²³<火<珂<禍<禾<稼<箇<花<苛<茄<荷<華<菓<蝦<課<嘩<貨<迦<過<霞<蚊<俄<峨<我<牙<画<臥<芽<蛾<賀" + "<雅<餓<駕<介<会<解<回<塊<壊<å»»<å¿«<怪<悔<恢<懐<戒<拐<改<魁<晦<械<æµ·<灰<界<皆<çµµ<芥<蟹<開<階<貝<凱<劾<外" + "<咳<害<崖<慨<概<涯<碍<蓋<街<該<鎧<骸<浬<馨<蛙<垣<柿<蛎<鈎<劃<嚇<各<廓<拡<撹<æ ¼<æ ¸<æ®»<獲<確<ç©«<覚<角<赫" + "<較<郭<閣<隔<革<å­¦<å²³<楽<額<顎<掛<笠<樫<æ©¿<梶<鰍<潟<割<喝<恰<括<æ´»<渇<滑<葛<褐<轄<且<é°¹<叶<椛<樺<鞄<æ ª" + "<兜<竃<蒲<釜<鎌<噛<é´¨<æ ¢<茅<萱<ç²¥<刈<苅<瓦<ä¹¾<侃<冠<寒<刊<勘<勧<å·»<喚<å ª<姦<完<官<寛<å¹²<å¹¹<患<感<慣<憾" + "<換<敢<柑<桓<棺<款<歓<汗<æ¼¢<澗<潅<環<甘<監<看<ç«¿<管<ç°¡<ç·©<缶<ç¿°<肝<艦<莞<観<諌<貫<還<鑑<間<閑<関<陥<韓" + "<館<舘<丸<含<岸<巌<玩<癌<眼<岩<ç¿«<贋<雁<頑<顔<願<企<伎<危<喜<器<基<奇<嬉<寄<岐<希<å¹¾<忌<揮<机<旗<既<期" + "<棋<棄<機<帰<毅<気<æ±½<畿<祈<å­£<稀<紀<å¾½<規<記<è²´<èµ·<軌<輝<飢<騎<鬼<亀<偽<儀<妓<宜<戯<技<擬<欺<犠<疑<祇" + "<義<蟻<誼<è­°<掬<菊<鞠<吉<吃<喫<桔<橘<è©°<ç §<杵<黍<却<客<脚<虐<逆<丘<久<仇<休<及<吸<å®®<弓<急<救<朽<求<æ±²" + "<æ³£<灸<球<究<窮<笈<級<ç³¾<給<旧<牛<去<居<å·¨<拒<拠<挙<渠<虚<許<距<鋸<漁<禦<魚<亨<享<京<供<ä¾ <僑<兇<競<共" + "<凶<協<匡<卿<叫<喬<境<峡<å¼·<彊<怯<恐<恭<挟<教<橋<況<狂<狭<矯<胸<脅<興<蕎<郷<鏡<響<饗<驚<ä»°<凝<å°­<暁<業" + "<局<曲<極<玉<桐<粁<僅<勤<均<å·¾<錦<斤<欣<欽<琴<禁<禽<筋<緊<芹<菌<è¡¿<襟<謹<近<金<吟<銀<九<倶<句<区<狗<玖" + "<矩<苦<躯<駆<駈<駒<具<愚<虞<喰<空<偶<寓<遇<隅<串<櫛<釧<屑<屈<掘<窟<沓<靴<轡<窪<熊<隈<粂<栗<ç¹°<桑<鍬<勲" + "<君<薫<訓<群<軍<郡<卦<袈<祁<係<傾<刑<兄<啓<圭<珪<型<契<å½¢<径<恵<慶<慧<憩<掲<携<敬<景<桂<渓<畦<稽<ç³»<経" + "<継<繋<罫<茎<荊<蛍<計<è©£<è­¦<軽<頚<鶏<芸<迎<鯨<劇<戟<撃<激<隙<桁<傑<欠<決<潔<ç©´<結<血<訣<月<件<倹<倦<健" + "<兼<券<剣<喧<圏<堅<嫌<建<憲<懸<拳<捲<検<権<牽<犬<献<研<硯<çµ¹<県<肩<見<謙<è³¢<軒<遣<鍵<険<顕<験<鹸<元<原" + "<厳<å¹»<弦<減<源<玄<現<絃<舷<言<諺<限<乎<個<古<呼<固<姑<å­¤<å·±<庫<弧<戸<故<枯<湖<狐<糊<袴<股<胡<菰<虎<誇" + "<è·¨<鈷<雇<顧<鼓<五<互<伍<午<呉<吾<娯<後<御<悟<梧<檎<瑚<碁<語<誤<è­·<醐<乞<鯉<交<ä½¼<侯<候<倖<光<公<功<効" + "<勾<厚<口<向<后<喉<坑<垢<好<孔<孝<宏<å·¥<å·§<å··<幸<広<庚<康<弘<恒<慌<抗<拘<控<攻<昂<晃<更<杭<æ ¡<梗<構<江" + "<æ´ª<浩<港<溝<甲<皇<硬<稿<ç³ <紅<紘<絞<綱<耕<考<肯<肱<腔<膏<航<荒<行<è¡¡<講<è²¢<è³¼<郊<酵<鉱<ç ¿<鋼<閤<降<項" + "<香<高<é´»<剛<劫<号<合<壕<拷<æ¿ <豪<轟<麹<克<刻<告<国<穀<酷<éµ <黒<獄<漉<腰<甑<忽<惚<骨<狛<è¾¼<æ­¤<頃<今<困" + "<坤<墾<婚<恨<懇<昏<昆<æ ¹<梱<æ··<痕<ç´º<艮<魂<些<佐<叉<唆<嵯<å·¦<å·®<査<沙<瑳<砂<詐<鎖<裟<坐<座<挫<債<催<再" + "<最<哉<塞<妻<å®°<彩<才<採<æ ½<æ­³<済<災<采<犀<砕<ç ¦<祭<斎<ç´°<菜<裁<載<際<剤<在<材<罪<財<冴<坂<阪<å º<榊<肴" + "<咲<崎<埼<碕<é·º<作<削<咋<搾<昨<朔<柵<窄<策<ç´¢<錯<桜<é®­<笹<匙<冊<刷<察<拶<撮<擦<札<殺<薩<雑<皐<鯖<捌<錆" + "<鮫<皿<晒<三<傘<参<å±±<惨<撒<散<桟<燦<珊<産<算<纂<蚕<讃<賛<酸<餐<斬<暫<残<仕<仔<伺<使<刺<司<史<嗣<四<士" + "<始<姉<姿<子<屍<市<師<志<思<指<支<孜<斯<施<旨<枝<æ­¢<æ­»<氏<獅<祉<私<糸<紙<ç´«<肢<脂<至<視<詞<è©©<試<誌<è«®" + "<資<賜<雌<飼<æ­¯<事<ä¼¼<侍<児<字<寺<慈<持<時<次<滋<æ²»<爾<璽<痔<磁<示<而<耳<自<蒔<辞<汐<鹿<式<識<é´«<竺<軸" + "<宍<雫<七<叱<執<失<嫉<室<悉<湿<漆<疾<質<実<蔀<篠<偲<柴<芝<屡<蕊<縞<舎<写<射<捨<赦<斜<煮<社<紗<者<謝<車" + "<遮<蛇<邪<借<勺<å°º<杓<灼<爵<酌<釈<錫<若<寂<å¼±<惹<主<取<守<手<朱<殊<狩<珠<種<腫<趣<酒<首<儒<受<呪<寿<授" + "<樹<綬<需<囚<収<周<宗<å°±<州<ä¿®<愁<拾<æ´²<秀<秋<終<繍<習<臭<舟<蒐<衆<襲<讐<è¹´<輯<週<酋<酬<集<醜<什<住<充" + "<十<従<戎<柔<汁<渋<獣<縦<重<銃<叔<夙<宿<淑<祝<縮<粛<塾<熟<出<術<è¿°<俊<å³»<春<瞬<ç«£<舜<駿<准<循<旬<楯<殉" + "<æ·³<準<潤<盾<純<å·¡<遵<醇<順<処<初<所<暑<曙<渚<庶<緒<ç½²<書<薯<藷<諸<助<叙<女<序<徐<恕<鋤<除<傷<償<勝<匠" + "<升<召<哨<商<唱<嘗<奨<妾<娼<宵<将<小<少<尚<庄<床<å» <å½°<承<抄<招<掌<捷<昇<昌<昭<晶<松<梢<樟<樵<æ²¼<消<渉" + "<湘<焼<焦<照<症<省<硝<礁<祥<称<ç« <笑<粧<ç´¹<肖<菖<蒋<蕉<衝<裳<訟<証<詔<詳<象<賞<醤<鉦<鍾<鐘<障<鞘<上<丈" + "<丞<乗<冗<剰<城<å ´<壌<嬢<常<情<擾<条<杖<浄<状<畳<ç©£<蒸<è­²<醸<錠<嘱<埴<飾<拭<植<殖<燭<織<職<色<触<食<蝕" + "<è¾±<å°»<伸<ä¿¡<ä¾µ<唇<娠<寝<審<心<慎<振<新<晋<森<榛<浸<æ·±<申<疹<真<神<秦<ç´³<臣<芯<薪<親<診<身<辛<進<針<震" + "<人<仁<刃<塵<壬<尋<甚<å°½<腎<訊<迅<陣<靭<笥<諏<須<酢<図<厨<逗<吹<垂<帥<推<æ°´<炊<睡<粋<ç¿ <è¡°<遂<酔<錐<錘" + "<随<瑞<髄<崇<嵩<数<枢<趨<雛<据<杉<椙<菅<頗<雀<裾<澄<摺<寸<世<瀬<畝<是<凄<制<勢<姓<征<性<成<政<整<星<晴" + "<棲<栖<æ­£<清<牲<生<盛<ç²¾<聖<声<製<西<誠<誓<請<逝<醒<青<静<斉<税<脆<隻<席<惜<戚<斥<昔<析<石<積<籍<績<脊" + "<責<赤<è·¡<蹟<碩<切<拙<接<摂<折<設<窃<節<説<雪<絶<舌<蝉<仙<先<千<占<宣<専<尖<川<戦<扇<撰<栓<æ ´<泉<浅<洗" + "<染<潜<煎<煽<旋<ç©¿<ç®­<線<繊<羨<腺<舛<船<薦<è©®<賎<è·µ<選<遷<銭<銑<閃<é®®<前<善<漸<然<全<禅<繕<膳<糎<噌<塑" + "<岨<措<曾<曽<楚<狙<疏<疎<礎<祖<租<粗<ç´ <組<蘇<訴<阻<遡<é¼ <僧<創<双<叢<倉<喪<壮<奏<爽<宋<層<匝<惣<想<捜" + "<掃<挿<掻<操<早<曹<å·£<槍<槽<漕<燥<争<痩<相<窓<糟<総<綜<聡<草<荘<葬<蒼<藻<装<èµ°<送<遭<鎗<霜<騒<像<増<憎" + "<臓<蔵<贈<造<促<側<則<即<息<捉<束<測<足<速<俗<属<賊<族<続<卒<袖<其<揃<存<å­«<尊<損<村<遜<他<多<太<æ±°<詑" + "<唾<堕<妥<惰<打<柁<舵<楕<陀<駄<騨<体<堆<対<耐<å²±<帯<待<怠<態<戴<替<æ³°<滞<胎<腿<苔<袋<貸<退<逮<隊<黛<鯛" + "<代<台<大<第<醍<題<é·¹<滝<瀧<卓<啄<宅<托<択<拓<æ²¢<濯<琢<託<鐸<濁<諾<茸<凧<蛸<只<叩<但<達<è¾°<奪<脱<å·½<竪" + "<辿<棚<è°·<狸<鱈<樽<誰<丹<単<嘆<坦<担<探<旦<歎<æ·¡<湛<炭<短<端<箪<綻<耽<胆<蛋<誕<鍛<団<壇<å¼¾<断<暖<檀<段" + "<男<談<値<知<地<弛<恥<智<æ± <痴<稚<ç½®<致<蜘<遅<馳<築<畜<竹<筑<蓄<逐<秩<窒<茶<å«¡<着<中<仲<宙<å¿ <抽<昼<柱" + "<注<虫<è¡·<註<酎<鋳<駐<樗<瀦<猪<苧<著<貯<丁<兆<凋<喋<寵<帖<帳<庁<弔<å¼µ<彫<å¾´<懲<挑<暢<朝<æ½®<牒<町<眺<聴" + "<脹<腸<蝶<調<諜<超<è·³<銚<長<頂<é³¥<勅<捗<直<朕<沈<珍<賃<鎮<陳<æ´¥<墜<椎<槌<追<鎚<痛<通<塚<栂<掴<槻<佃<漬" + "<柘<è¾»<蔦<綴<鍔<椿<æ½°<坪<壷<嬬<ç´¬<爪<吊<釣<鶴<亭<低<停<偵<剃<貞<呈<å ¤<定<帝<底<庭<å»·<弟<悌<抵<挺<提<梯" + "<汀<碇<禎<程<ç· <艇<訂<諦<蹄<逓<邸<鄭<釘<鼎<æ³¥<摘<擢<敵<æ»´<的<笛<適<鏑<溺<哲<å¾¹<撤<轍<è¿­<鉄<典<å¡«<天<展" + "<店<æ·»<纏<甜<è²¼<転<顛<点<伝<殿<æ¾±<田<電<兎<吐<å µ<塗<妬<å± <徒<斗<杜<渡<登<菟<è³­<途<都<鍍<ç ¥<ç º<努<度<土" + "<奴<怒<倒<党<冬<凍<刀<唐<塔<塘<套<宕<島<嶋<悼<投<搭<東<桃<梼<棟<盗<淘<湯<涛<灯<燈<当<痘<祷<等<答<筒<糖" + "<çµ±<到<董<蕩<藤<討<謄<豆<踏<逃<透<鐙<陶<é ­<騰<闘<働<動<同<堂<導<憧<撞<洞<瞳<ç«¥<胴<萄<道<銅<å³ <鴇<匿<得" + "<å¾³<涜<特<督<禿<篤<毒<独<読<栃<æ©¡<凸<突<椴<届<鳶<苫<寅<酉<瀞<噸<屯<惇<敦<沌<豚<遁<頓<呑<曇<鈍<奈<那<内" + "<乍<凪<薙<謎<灘<捺<鍋<楢<馴<縄<畷<南<楠<軟<難<汝<二<å°¼<弐<è¿©<匂<賑<肉<虹<廿<日<ä¹³<入<如<å°¿<韮<ä»»<妊<忍" + "<認<æ¿¡<禰<祢<寧<葱<猫<熱<å¹´<念<捻<撚<燃<粘<乃<廼<之<埜<嚢<悩<濃<納<能<脳<膿<è¾²<覗<蚤<å·´<把<播<覇<杷<æ³¢" + "<æ´¾<琶<ç ´<婆<ç½µ<芭<馬<俳<廃<拝<排<敗<杯<盃<牌<背<肺<輩<配<倍<培<媒<梅<楳<煤<狽<è²·<売<è³ <陪<這<蝿<秤<矧" + "<萩<伯<剥<博<拍<柏<泊<白<箔<粕<舶<薄<è¿«<曝<æ¼ <爆<縛<莫<駁<麦<函<ç®±<硲<箸<肇<筈<櫨<幡<肌<畑<畠<八<鉢<溌" + "<発<醗<髪<伐<ç½°<抜<筏<閥<鳩<噺<塙<蛤<隼<ä¼´<判<半<反<叛<帆<搬<斑<板<æ°¾<汎<版<犯<班<畔<繁<般<藩<販<範<釆" + "<煩<頒<飯<挽<晩<番<盤<磐<蕃<蛮<匪<卑<否<妃<庇<å½¼<悲<扉<批<披<斐<比<泌<疲<皮<碑<秘<緋<ç½·<肥<被<誹<è²»<避" + "<非<飛<樋<ç°¸<備<å°¾<å¾®<枇<毘<琵<眉<美<é¼»<柊<稗<匹<疋<é«­<彦<膝<菱<肘<å¼¼<必<畢<筆<逼<桧<姫<媛<紐<百<謬<俵" + "<彪<標<æ°·<漂<瓢<票<表<評<è±¹<廟<描<病<秒<苗<錨<鋲<蒜<蛭<é°­<品<彬<斌<浜<瀕<貧<賓<é »<敏<瓶<不<付<埠<夫<婦" + "<富<冨<布<府<怖<扶<敷<斧<普<æµ®<父<符<腐<膚<芙<譜<è² <賦<èµ´<阜<附<ä¾®<撫<æ­¦<舞<葡<蕪<部<封<楓<風<葺<蕗<伏" + "<副<復<幅<服<福<腹<複<覆<æ·µ<弗<払<沸<仏<物<鮒<分<吻<噴<墳<憤<扮<焚<奮<粉<糞<紛<雰<文<聞<丙<ä½µ<兵<塀<å¹£" + "<å¹³<弊<柄<並<蔽<閉<陛<ç±³<頁<僻<壁<癖<碧<別<瞥<蔑<箆<偏<変<片<篇<ç·¨<辺<返<遍<便<勉<娩<弁<鞭<保<舗<鋪<圃" + "<捕<æ­©<甫<補<輔<穂<募<墓<慕<戊<暮<母<ç°¿<菩<倣<俸<包<呆<å ±<奉<宝<å³°<峯<å´©<庖<抱<捧<放<方<朋<法<泡<烹<ç ²" + "<縫<胞<芳<萌<蓬<蜂<褒<訪<豊<邦<鋒<飽<é³³<鵬<乏<亡<傍<剖<坊<妨<帽<忘<忙<房<暴<望<某<棒<冒<ç´¡<肪<膨<謀<貌" + "<貿<鉾<防<吠<é ¬<北<僕<卜<墨<撲<朴<牧<睦<穆<釦<勃<没<殆<堀<幌<奔<本<ç¿»<凡<盆<摩<磨<魔<麻<埋<妹<昧<枚<毎" + "<哩<槙<幕<膜<枕<鮪<柾<鱒<桝<亦<ä¿£<又<抹<末<沫<迄<ä¾­<ç¹­<麿<万<慢<満<漫<蔓<味<未<魅<å·³<箕<岬<密<蜜<湊<蓑" + "<稔<脈<妙<粍<民<眠<務<夢<無<牟<矛<霧<鵡<椋<å©¿<娘<冥<名<命<明<盟<è¿·<銘<é³´<姪<牝<滅<免<棉<綿<ç·¬<面<麺<摸" + "<模<茂<妄<孟<毛<猛<盲<網<耗<蒙<儲<木<黙<目<杢<勿<餅<å°¤<戻<ç±¾<è²°<問<悶<紋<門<匁<也<冶<夜<爺<耶<野<å¼¥<矢" + "<厄<å½¹<約<薬<訳<躍<靖<柳<薮<鑓<愉<愈<æ²¹<癒<è«­<輸<唯<佑<優<勇<友<宥<å¹½<悠<憂<揖<有<柚<湧<涌<猶<猷<由<祐" + "<裕<誘<遊<邑<郵<雄<融<夕<予<余<与<誉<輿<預<傭<å¹¼<妖<容<庸<揚<揺<擁<曜<楊<様<洋<溶<熔<用<窯<羊<耀<葉<蓉" + "<要<謡<踊<遥<陽<養<慾<抑<欲<沃<æµ´<翌<翼<淀<羅<螺<裸<来<莱<é ¼<雷<洛<絡<落<酪<ä¹±<卵<嵐<欄<æ¿«<藍<蘭<覧<利" + "<吏<å±¥<李<梨<理<璃<痢<裏<裡<里<離<陸<律<率<立<葎<掠<略<劉<流<溜<琉<留<ç¡«<粒<隆<竜<龍<侶<慮<旅<虜<了<亮" + "<僚<両<凌<寮<料<梁<涼<猟<療<瞭<稜<糧<良<諒<遼<量<陵<領<力<緑<倫<厘<林<淋<燐<琳<臨<輪<隣<鱗<麟<瑠<塁<涙" + "<ç´¯<類<令<伶<例<冷<励<嶺<怜<玲<礼<苓<鈴<隷<零<霊<麗<é½¢<暦<æ­´<列<劣<烈<裂<廉<恋<憐<æ¼£<煉<ç°¾<ç·´<聯<蓮<連" + "<錬<呂<é­¯<櫓<炉<賂<è·¯<露<労<婁<廊<弄<朗<楼<榔<浪<漏<牢<狼<篭<老<聾<蝋<郎<六<麓<禄<肋<録<論<倭<和<話<æ­ª" + "<賄<脇<惑<枠<é·²<亙<亘<鰐<è©«<藁<蕨<椀<æ¹¾<碗<腕<弌<丐<丕<个<丱<丶<丼<丿<乂<乖<乘<亂<亅<豫<亊<舒<弍<于<亞" + "<亟<亠<亢<亰<亳<亶<从<仍<仄<仆<仂<仗<仞<ä»­<仟<ä»·<伉<佚<ä¼°<佛<佝<佗<佇<佶<侈<侏<侘<ä½»<佩<ä½°<侑<佯<來<侖" + "<儘<俔<俟<俎<俘<俛<俑<俚<俐<俤<ä¿¥<倚<倨<倔<倪<倥<倅<伜<俶<倡<倩<倬<俾<俯<們<倆<偃<假<會<偕<偐<偈<做<偖" + "<偬<偸<傀<傚<傅<傴<傲<僉<僊<傳<僂<僖<僞<僥<僭<僣<僮<價<僵<儉<儁<儂<儖<儕<儔<儚<儡<儺<儷<儼<儻<儿<兀<兒" + "<兌<兔<兢<竸<兩<兪<兮<冀<冂<囘<册<冉<冏<冑<冓<冕<冖<冤<冦<冢<冩<冪<冫<决<冱<冲<冰<况<冽<凅<凉<凛<几<處" + "<凩<凭<凰<凵<凾<刄<刋<刔<刎<刧<刪<刮<刳<刹<剏<剄<剋<剌<剞<剔<剪<剴<剩<剳<剿<剽<劍<劔<劒<剱<劈<劑<辨<辧" + "<劬<劭<劼<劵<勁<勍<勗<勞<勣<勦<飭<勠<勳<勵<勸<勹<匆<匈<甸<匍<匐<匏<匕<匚<匣<匯<匱<匳<匸<區<卆<卅<丗<卉" + "<卍<凖<卞<卩<卮<夘<卻<卷<厂<厖<厠<厦<厥<厮<厰<厶<參<簒<雙<叟<曼<燮<叮<叨<叭<叺<吁<吽<呀<听<吭<吼<吮<吶" + "<吩<吝<呎<咏<呵<咎<呟<呱<呷<呰<咒<呻<咀<呶<咄<咐<咆<哇<咢<咸<咥<咬<哄<哈<咨<咫<哂<咤<咾<咼<哘<哥<哦<唏" + "<唔<哽<哮<哭<哺<哢<唹<啀<啣<啌<售<啜<啅<啖<啗<唸<唳<啝<喙<喀<咯<喊<喟<啻<啾<喘<喞<單<啼<喃<喩<喇<喨<嗚" + "<嗅<嗟<嗄<嗜<嗤<嗔<嘔<嗷<嘖<嗾<嗽<嘛<嗹<噎<噐<營<嘴<嘶<嘲<嘸<噫<噤<嘯<噬<噪<嚆<嚀<嚊<嚠<嚔<嚏<嚥<嚮<嚶" + "<嚴<囂<嚼<囁<囃<囀<囈<囎<囑<囓<囗<囮<囹<圀<囿<圄<圉<圈<國<圍<圓<團<圖<嗇<圜<圦<圷<圸<坎<圻<址<坏<坩<埀" + "<垈<坡<坿<垉<垓<垠<垳<垤<垪<垰<埃<埆<埔<埒<埓<堊<埖<埣<堋<堙<堝<塲<å ¡<å¡¢<塋<å¡°<毀<塒<å ½<塹<墅<墹<墟<墫" + "<墺<壞<墻<墸<墮<壅<壓<壑<壗<壙<壘<壥<壜<壤<壟<壯<壺<壹<壻<壼<壽<夂<夊<夐<夛<梦<夥<夬<夭<夲<夸<夾<竒<奕" + "<奐<奎<奚<奘<奢<奠<奧<奬<奩<奸<妁<妝<佞<侫<妣<妲<姆<姨<姜<妍<姙<姚<娥<娟<娑<娜<娉<娚<婀<婬<婉<娵<娶<å©¢" + "<婪<媚<媼<媾<嫋<嫂<媽<å«£<嫗<嫦<å«©<嫖<嫺<å«»<嬌<嬋<嬖<嬲<嫐<嬪<嬶<嬾<孃<孅<孀<孑<孕<孚<孛<å­¥<å­©<å­°<å­³<å­µ" + "<å­¸<斈<å­º<宀<它<宦<宸<寃<寇<寉<寔<寐<寤<實<寢<寞<寥<寫<寰<寶<寳<尅<將<專<對<尓<å° <å°¢<å°¨<å°¸<å°¹<屁<屆<屎" + "<屓<屐<屏<å­±<屬<å±®<ä¹¢<屶<å±¹<岌<岑<岔<妛<岫<å²»<岶<å²¼<å²·<峅<å²¾<峇<峙<峩<å³½<峺<å³­<嶌<峪<崋<崕<崗<嵜<崟<崛" + "<崑<崔<å´¢<崚<崙<崘<嵌<嵒<嵎<嵋<嵬<åµ³<嵶<嶇<嶄<嶂<嶢<嶝<嶬<嶮<嶽<嶐<嶷<嶼<巉<巍<巓<巒<巖<巛<å·«<å·²<å·µ<帋" + "<帚<帙<帑<帛<帶<帷<幄<幃<幀<幎<幗<幔<幟<å¹¢<幤<幇<å¹µ<并<幺<麼<广<庠<廁<廂<廈<廐<廏<廖<廣<廝<廚<廛<廢<廡" + "<廨<廩<廬<å»±<廳<å»°<å»´<廸<廾<弃<弉<彝<彜<弋<弑<弖<弩<å¼­<弸<彁<彈<彌<彎<弯<彑<彖<彗<彙<彡<å½­<å½³<å½·<徃<徂" + "<彿<徊<很<徑<徇<從<徙<徘<å¾ <徨<å¾­<å¾¼<忖<å¿»<忤<忸<忱<忝<悳<å¿¿<怡<恠<怙<怐<怩<怎<怱<怛<怕<怫<怦<怏<怺<恚" + "<恁<恪<恷<恟<恊<恆<恍<恣<恃<恤<恂<恬<恫<恙<悁<悍<惧<悃<悚<悄<悛<悖<悗<悒<悧<悋<惡<悸<惠<惓<悴<å¿°<悽<惆" + "<悵<惘<慍<愕<愆<惶<惷<愀<惴<惺<愃<愡<惻<惱<愍<愎<慇<愾<愨<愧<慊<愿<愼<愬<愴<愽<慂<慄<慳<慷<慘<慙<慚<慫" + "<慴<慯<慥<慱<慟<慝<慓<慵<憙<憖<憇<憬<憔<憚<憊<憑<憫<憮<懌<懊<應<懷<懈<懃<懆<憺<懋<ç½¹<懍<懦<懣<懶<懺<懴" + "<懿<懽<懼<懾<戀<戈<戉<戍<戌<戔<戛<戞<戡<截<戮<戰<戲<戳<扁<扎<扞<扣<扛<扠<扨<扼<抂<抉<找<抒<抓<抖<拔<抃" + "<抔<拗<拑<抻<拏<拿<拆<擔<拈<拜<拌<拊<拂<拇<抛<拉<挌<拮<拱<挧<挂<挈<拯<拵<捐<挾<捍<搜<捏<掖<掎<掀<掫<捶" + "<掣<掏<掉<掟<掵<捫<捩<掾<揩<揀<揆<揣<揉<插<揶<揄<搖<搴<搆<搓<搦<搶<攝<搗<搨<搏<摧<摯<摶<摎<攪<撕<撓<撥" + "<撩<撈<撼<據<擒<擅<擇<撻<擘<擂<擱<擧<舉<擠<擡<抬<擣<擯<攬<擶<擴<擲<擺<攀<擽<攘<攜<攅<攤<攣<攫<攴<攵<攷" + "<收<攸<畋<效<敖<敕<敍<敘<敞<敝<敲<數<斂<斃<變<斛<斟<斫<斷<旃<旆<旁<旄<旌<旒<旛<旙<无<旡<旱<杲<昊<昃<旻" + "<杳<昵<昶<昴<昜<晏<晄<晉<晁<晞<晝<晤<晧<晨<晟<晢<晰<暃<暈<暎<暉<暄<暘<暝<曁<暹<曉<暾<暼<曄<暸<曖<曚<曠" + "<昿<曦<曩<曰<曵<曷<朏<朖<朞<朦<朧<霸<朮<朿<朶<杁<朸<朷<杆<杞<杠<杙<杣<杤<枉<杰<枩<杼<杪<枌<枋<枦<枡<枅" + "<枷<柯<枴<柬<枳<柩<枸<柤<柞<柝<柢<柮<枹<柎<柆<柧<檜<栞<框<æ ©<桀<桍<æ ²<桎<梳<æ «<桙<æ¡£<æ¡·<æ¡¿<梟<梏<梭<梔" + "<條<梛<梃<檮<梹<æ¡´<梵<梠<梺<椏<梍<桾<椁<棊<椈<棘<椢<椦<棡<椌<棍<棔<棧<棕<椶<椒<椄<棗<棣<椥<棹<棠<棯<椨" + "<椪<椚<椣<椡<棆<楹<楷<楜<楸<楫<楔<楾<楮<椹<楴<椽<楙<椰<楡<楞<楝<榁<楪<榲<榮<槐<榿<槁<槓<榾<槎<寨<槊<槝" + "<榻<槃<榧<樮<榑<榠<榜<榕<榴<槞<槨<樂<樛<槿<權<槹<槲<槧<樅<榱<樞<槭<樔<槫<樊<樒<櫁<樣<樓<橄<樌<橲<樶<橸" + "<橇<æ©¢<橙<橦<橈<樸<樢<檐<檍<檠<檄<檢<檣<檗<蘗<檻<櫃<櫂<檸<檳<檬<櫞<櫑<櫟<檪<櫚<櫪<æ«»<欅<蘖<櫺<欒<欖<鬱" + "<欟<欸<欷<盜<欹<飮<歇<歃<歉<歐<歙<歔<歛<歟<æ­¡<æ­¸<æ­¹<æ­¿<殀<殄<殃<殍<殘<殕<殞<殤<殪<殫<殯<殲<æ®±<殳<æ®·<殼" + "<毆<毋<毓<毟<毬<毫<毳<毯<麾<氈<氓<气<氛<æ°¤<æ°£<汞<汕<æ±¢<汪<沂<沍<沚<沁<沛<æ±¾<汨<æ±³<沒<沐<泄<æ³±<泓<æ²½<泗" + "<泅<泝<æ²®<æ²±<æ²¾<沺<泛<泯<泙<泪<洟<衍<æ´¶<æ´«<æ´½<æ´¸<洙<æ´µ<æ´³<洒<洌<æµ£<涓<浤<浚<æµ¹<浙<涎<涕<濤<涅<æ·¹<渕<渊" + "<涵<淇<æ·¦<涸<淆<æ·¬<淞<淌<æ·¨<淒<淅<æ·º<淙<æ·¤<淕<æ·ª<æ·®<渭<æ¹®<渮<渙<æ¹²<湟<渾<渣<湫<渫<湶<湍<渟<湃<渺<湎<渤" + "<滿<渝<游<溂<溪<溘<滉<溷<滓<溽<溯<滄<溲<滔<滕<溏<溥<滂<溟<潁<漑<灌<滬<滸<滾<漿<滲<æ¼±<滯<æ¼²<滌<æ¼¾<漓<æ»·" + "<澆<潺<潸<澁<澀<潯<潛<濳<æ½­<澂<æ½¼<潘<澎<澑<濂<潦<æ¾³<æ¾£<澡<澤<æ¾¹<濆<澪<濟<濕<濬<濔<濘<濱<æ¿®<濛<瀉<瀋<濺" + "<瀑<瀁<瀏<濾<瀛<瀚<æ½´<瀝<瀘<瀟<瀰<瀾<瀲<灑<灣<炙<炒<炯<烱<炬<炸<炳<炮<烟<烋<烝<烙<焉<烽<焜<焙<煥<煕<熈" + "<煦<煢<煌<煖<煬<熏<燻<熄<熕<熨<熬<燗<熹<熾<燒<燉<燔<燎<燠<燬<燧<燵<燼<燹<燿<爍<爐<爛<爨<爭<爬<爰<爲<爻" + "<爼<爿<牀<牆<牋<牘<牴<牾<犂<犁<犇<犒<犖<犢<犧<犹<犲<狃<狆<狄<狎<狒<狢<狠<狡<狹<狷<倏<猗<猊<猜<猖<猝<猴" + "<猯<猩<猥<猾<獎<獏<默<獗<獪<獨<獰<獸<獵<獻<獺<珈<玳<珎<玻<珀<珥<珮<珞<璢<琅<瑯<琥<珸<琲<琺<瑕<琿<瑟<瑙" + "<瑁<瑜<瑩<瑰<瑣<瑪<瑶<瑾<璋<璞<璧<瓊<瓏<瓔<珱<瓠<瓣<瓧<瓩<瓮<瓲<瓰<瓱<瓸<瓷<甄<甃<甅<甌<甎<甍<甕<甓<甞" + "<甦<甬<甼<畄<畍<畊<畉<畛<畆<畚<畩<畤<畧<畫<畭<畸<當<疆<疇<畴<疊<疉<疂<疔<疚<疝<疥<疣<痂<疳<痃<疵<疽<疸" + "<疼<疱<痍<痊<痒<痙<痣<痞<痾<痿<痼<瘁<痰<痺<痲<痳<瘋<瘍<瘉<瘟<瘧<瘠<瘡<瘢<瘤<瘴<瘰<瘻<癇<癈<癆<癜<癘<癡" + "<癢<癨<癩<癪<癧<癬<癰<癲<癶<癸<發<皀<皃<皈<皋<皎<皖<皓<皙<皚<皰<皴<皸<皹<皺<盂<盍<盖<盒<盞<盡<盥<盧<盪" + "<蘯<盻<眈<眇<眄<眩<眤<眞<眥<眦<眛<眷<眸<睇<睚<睨<睫<睛<睥<睿<睾<睹<瞎<瞋<瞑<瞠<瞞<瞰<瞶<瞹<瞿<瞼<瞽<瞻" + "<矇<矍<矗<矚<矜<矣<矮<矼<砌<砒<礦<ç  <礪<硅<碎<ç¡´<碆<硼<碚<碌<碣<碵<碪<碯<磑<磆<磋<磔<碾<碼<磅<磊<磬<磧" + "<磚<磽<磴<礇<礒<礑<礙<礬<礫<祀<祠<祗<祟<祚<祕<祓<祺<祿<禊<禝<禧<齋<禪<禮<禳<禹<禺<秉<秕<秧<秬<秡<秣<稈" + "<稍<稘<稙<稠<稟<禀<稱<稻<稾<稷<穃<穗<穉<ç©¡<ç©¢<ç©©<龝<ç©°<穹<穽<窈<窗<窕<窘<窖<窩<竈<窰<窶<竅<竄<窿<邃<竇" + "<竊<竍<竏<竕<竓<站<竚<竝<ç«¡<ç«¢<竦<ç«­<ç«°<笂<笏<笊<笆<笳<笘<笙<笞<笵<笨<笶<筐<ç­º<笄<筍<笋<筌<筅<ç­µ<ç­¥<ç­´" + "<ç­§<ç­°<ç­±<ç­¬<ç­®<箝<箘<箟<箍<箜<箚<箋<箒<箏<筝<箙<篋<篁<篌<篏<ç®´<篆<篝<篩<簑<簔<篦<篥<ç± <簀<簇<簓<篳<篷" + "<簗<簍<篶<ç°£<ç°§<ç°ª<簟<ç°·<ç°«<ç°½<籌<籃<籔<籏<籀<籐<籘<籟<籤<籖<ç±¥<籬<ç±µ<粃<粐<粤<ç²­<ç²¢<粫<粡<粨<ç²³<ç²²<ç²±" + "<ç²®<ç²¹<ç²½<糀<糅<糂<糘<糒<糜<ç³¢<鬻<糯<ç³²<ç³´<糶<糺<紆<紂<紜<紕<紊<絅<絋<ç´®<ç´²<ç´¿<ç´µ<絆<çµ³<絖<絎<çµ²<絨<çµ®" + "<絏<çµ£<經<綉<絛<綏<çµ½<綛<綺<綮<綣<綵<緇<綽<綫<總<綢<綯<緜<綸<綟<綰<緘<緝<ç·¤<緞<ç·»<ç·²<ç·¡<縅<縊<縣<縡<縒" + "<縱<縟<縉<縋<縢<繆<繦<縻<縵<縹<繃<縷<縲<縺<繧<繝<繖<繞<繙<繚<ç¹¹<繪<繩<ç¹¼<ç¹»<纃<緕<ç¹½<è¾®<繿<纈<纉<續<纒" + "<纐<纓<纔<纖<纎<纛<纜<缸<缺<罅<罌<罍<罎<罐<网<罕<罔<罘<罟<ç½ <罨<罩<罧<罸<羂<羆<羃<羈<羇<羌<羔<羞<羝<羚" + "<ç¾£<羯<ç¾²<ç¾¹<ç¾®<羶<羸<è­±<翅<翆<翊<翕<翔<ç¿¡<翦<ç¿©<翳<翹<飜<耆<耄<耋<耒<耘<耙<耜<耡<耨<耿<耻<聊<聆<聒<聘" + "<聚<聟<聢<聨<聳<聲<聰<聶<聹<聽<聿<肄<肆<肅<肛<肓<肚<肭<冐<肬<胛<胥<胙<胝<胄<胚<胖<脉<胯<胱<脛<脩<脣<脯" + "<腋<隋<腆<脾<腓<腑<胼<腱<腮<腥<腦<腴<膃<膈<膊<膀<膂<膠<膕<膤<膣<腟<膓<膩<膰<膵<膾<膸<膽<臀<臂<膺<臉<臍" + "<臑<臙<臘<臈<臚<臟<臠<臧<臺<臻<臾<舁<舂<舅<與<舊<舍<舐<舖<舩<舫<舸<舳<艀<艙<艘<艝<艚<艟<艤<艢<艨<艪<艫" + "<舮<艱<艷<艸<艾<芍<芒<芫<芟<芻<芬<苡<苣<苟<苒<苴<苳<苺<莓<范<苻<苹<苞<茆<苜<茉<苙<茵<茴<茖<茲<茱<荀<茹" + "<荐<荅<茯<茫<茗<茘<莅<莚<莪<莟<莢<莖<茣<莎<莇<莊<荼<莵<荳<荵<莠<莉<莨<菴<萓<菫<菎<菽<萃<菘<萋<菁<菷<萇" + "<菠<菲<萍<萢<萠<莽<萸<蔆<菻<葭<萪<萼<蕚<蒄<葷<葫<蒭<葮<蒂<葩<葆<萬<葯<葹<萵<蓊<葢<蒹<蒿<蒟<蓙<蓍<蒻<蓚" + "<蓐<蓁<蓆<蓖<蒡<蔡<蓿<蓴<蔗<蔘<蔬<蔟<蔕<蔔<蓼<蕀<蕣<蕘<蕈<蕁<蘂<蕋<蕕<薀<薤<薈<薑<薊<薨<蕭<薔<薛<藪<薇" + "<薜<蕷<蕾<薐<藉<薺<藏<薹<藐<藕<藝<藥<藜<藹<蘊<蘓<蘋<藾<藺<蘆<蘢<蘚<蘰<蘿<虍<乕<虔<號<虧<虱<蚓<蚣<蚩<蚪" + "<蚋<蚌<蚶<蚯<蛄<蛆<蚰<蛉<è £<蚫<蛔<蛞<蛩<蛬<蛟<蛛<蛯<蜒<蜆<蜈<蜀<蜃<蛻<蜑<蜉<蜍<蛹<蜊<蜴<蜿<蜷<蜻<蜥<蜩" + "<蜚<蝠<蝟<蝸<蝌<蝎<蝴<蝗<蝨<蝮<蝙<蝓<蝣<蝪<蠅<螢<螟<螂<螯<蟋<螽<蟀<蟐<雖<螫<蟄<螳<蟇<蟆<螻<蟯<蟲<蟠<蠏" + "<蠍<蟾<蟶<蟷<蠎<蟒<蠑<蠖<蠕<è ¢<è ¡<è ±<è ¶<è ¹<è §<è »<衄<衂<衒<衙<衞<è¡¢<è¡«<袁<衾<袞<衵<衽<袵<衲<袂<袗<袒<袮" + "<袙<袢<袍<袤<袰<袿<袱<裃<裄<裔<裘<裙<裝<裹<褂<裼<裴<裨<裲<褄<褌<褊<褓<襃<褞<褥<褪<褫<襁<襄<褻<褶<褸<襌" + "<褝<襠<襞<襦<襤<襭<襪<襯<襴<襷<襾<覃<覈<覊<覓<覘<覡<覩<覦<覬<覯<覲<覺<覽<覿<觀<觚<觜<觝<觧<觴<觸<訃<訖" + "<訐<訌<訛<訝<訥<訶<詁<詛<詒<詆<詈<詼<è©­<詬<è©¢<誅<誂<誄<誨<誡<誑<誥<誦<誚<誣<諄<諍<諂<諚<è««<諳<諧<諤<諱" + "<謔<è« <è«¢<è«·<諞<諛<謌<謇<謚<è«¡<謖<謐<謗<謠<謳<鞫<謦<謫<謾<謨<譁<譌<譏<譎<證<譖<譛<譚<è­«<譟<è­¬<è­¯<è­´<è­½" + "<讀<讌<讎<讒<讓<讖<讙<讚<è°º<豁<è°¿<豈<豌<豎<豐<豕<è±¢<豬<豸<豺<貂<貉<貅<貊<貍<貎<貔<è±¼<貘<戝<è²­<貪<è²½<è²²" + "<è²³<è²®<貶<賈<賁<賤<è³£<賚<è³½<賺<è³»<贄<贅<贊<贇<贏<贍<贐<齎<贓<賍<贔<贖<赧<èµ­<èµ±<èµ³<趁<趙<跂<趾<趺<跏<跚" + "<跖<跌<跛<跋<è·ª<è·«<跟<è·£<è·¼<踈<踉<è·¿<踝<踞<踐<踟<蹂<踵<踰<踴<蹊<蹇<蹉<蹌<蹐<蹈<蹙<蹤<è¹ <踪<è¹£<蹕<蹶<è¹²" + "<è¹¼<躁<躇<躅<躄<躋<躊<躓<躑<躔<躙<躪<躡<躬<躰<軆<躱<躾<軅<軈<軋<軛<軣<軼<è»»<軫<軾<輊<輅<輕<輒<輙<輓<輜" + "<輟<輛<輌<輦<è¼³<è¼»<è¼¹<轅<轂<è¼¾<轌<轉<轆<轎<轗<轜<è½¢<è½£<轤<辜<辟<è¾£<è¾­<辯<è¾·<迚<è¿¥<è¿¢<迪<迯<邇<è¿´<逅<迹" + "<迺<逑<逕<逡<逍<逞<逖<逋<逧<逶<逵<逹<迸<遏<遐<遑<遒<逎<遉<逾<遖<遘<遞<遨<遯<遶<隨<遲<邂<遽<邁<邀<邊<邉" + "<邏<邨<邯<邱<邵<郢<郤<扈<郛<鄂<鄒<鄙<鄲<鄰<酊<酖<酘<酣<酥<酩<酳<酲<醋<醉<醂<醢<醫<醯<醪<醵<醴<醺<釀<釁" + "<釉<釋<釐<釖<釟<釡<釛<釼<釵<釶<鈞<釿<鈔<鈬<鈕<鈑<鉞<鉗<鉅<鉉<鉤<鉈<銕<鈿<鉋<鉐<銜<銖<銓<銛<鉚<鋏<銹<銷" + "<鋩<錏<鋺<鍄<錮<錙<錢<錚<錣<錺<錵<錻<鍜<鍠<鍼<鍮<鍖<鎰<鎬<鎭<鎔<鎹<鏖<鏗<鏨<鏥<鏘<鏃<鏝<鏐<鏈<鏤<鐚<鐔" + "<鐓<鐃<鐇<鐐<鐶<鐫<鐵<鐡<鐺<鑁<鑒<鑄<鑛<鑠<鑢<鑞<鑪<鈩<鑰<鑵<鑷<鑽<鑚<鑼<鑾<钁<鑿<閂<閇<閊<閔<閖<閘<閙" + "<閠<閨<閧<閭<閼<閻<閹<閾<闊<濶<闃<闍<闌<闕<闔<闖<關<闡<闥<闢<阡<阨<阮<阯<陂<陌<陏<陋<陷<陜<陞<陝<陟<陦" + "<陲<陬<隍<隘<隕<隗<險<隧<隱<隲<隰<隴<隶<隸<隹<雎<雋<雉<雍<襍<雜<霍<雕<雹<霄<霆<霈<霓<霎<霑<霏<霖<霙<霤" + "<霪<霰<霹<霽<霾<靄<靆<靈<靂<靉<靜<靠<靤<靦<靨<勒<靫<靱<靹<鞅<靼<鞁<靺<鞆<鞋<鞏<鞐<鞜<鞨<鞦<鞣<鞳<鞴<韃" + "<韆<韈<韋<韜<韭<齏<韲<竟<韶<韵<頏<頌<é ¸<é ¤<é ¡<é ·<é ½<顆<顏<顋<é¡«<顯<é¡°<顱<é¡´<顳<颪<颯<颱<颶<飄<飃<飆<飩" + "<飫<餃<餉<餒<餔<餘<餡<餝<餞<餤<餠<餬<餮<餽<餾<饂<饉<饅<饐<饋<饑<饒<饌<饕<馗<馘<馥<馭<馮<馼<駟<駛<駝<駘" + "<駑<駭<駮<駱<駲<駻<駸<騁<騏<騅<駢<騙<騫<騷<驅<驂<驀<驃<騾<驕<驍<驛<驗<驟<é©¢<é©¥<驤<é©©<é©«<驪<骭<骰<骼<髀" + "<髏<髑<髓<體<髞<髟<é«¢<é«£<髦<髯<é««<é«®<é«´<髱<é«·<é«»<鬆<鬘<鬚<鬟<鬢<鬣<鬥<鬧<鬨<鬩<鬪<鬮<鬯<鬲<魄<魃<魏<魍" + "<魎<魑<魘<é­´<鮓<鮃<鮑<鮖<鮗<鮟<é® <鮨<é®´<鯀<鯊<鮹<鯆<鯏<鯑<鯒<鯣<鯢<鯤<鯔<鯡<é°º<鯲<鯱<鯰<鰕<鰔<鰉<鰓<鰌" + "<鰆<鰈<鰒<鰊<鰄<é°®<鰛<é°¥<é°¤<é°¡<é°°<鱇<é°²<鱆<é°¾<鱚<é± <鱧<鱶<鱸<鳧<鳬<é³°<鴉<鴈<鳫<鴃<鴆<é´ª<é´¦<鶯<é´£<鴟<鵄" + "<鴕<鴒<鵁<é´¿<é´¾<鵆<鵈<鵝<鵞<鵤<鵑<鵐<鵙<éµ²<鶉<鶇<鶫<鵯<鵺<鶚<鶤<鶩<鶲<鷄<鷁<鶻<鶸<鶺<鷆<鷏<鷂<鷙<鷓<é·¸" + "<é·¦<é·­<é·¯<é·½<鸚<鸛<鸞<é¹µ<é¹¹<é¹½<麁<麈<麋<麌<麒<麕<麑<麝<麥<麩<麸<麪<麭<靡<黌<黎<黏<黐<黔<黜<點<黝<é» <黥" + "<黨<黯<é»´<黶<é»·<黹<é»»<黼<黽<鼇<鼈<皷<鼕<鼡<鼬<é¼¾<齊<齒<齔<é½£<齟<é½ <齡<齦<齧<齬<齪<é½·<é½²<齶<龕<龜<é¾ <å ¯" + "<槇<遙<瑤<凜<熙" + } + Version{"1.4"} + } + } +} diff --git a/icuSources/data/coll/ja_JP.txt b/icuSources/data/coll/ja_JP.txt index 5882e6b4..576cc91b 100644 --- a/icuSources/data/coll/ja_JP.txt +++ b/icuSources/data/coll/ja_JP.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/kk.txt b/icuSources/data/coll/kk.txt index 20f81dc1..8aadba92 100644 --- a/icuSources/data/coll/kk.txt +++ b/icuSources/data/coll/kk.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/kk.xml +// * Source File:/common/collation/kk.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/kk.xml + * ICU source: /xml/collation/kk.xml */ kk{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{" [normalization on ][suppressContractions [Ѐ-џ] ]&[before 1]Ò¯<Ò±<<<Ò°"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/kk_KZ.txt b/icuSources/data/coll/kk_KZ.txt index 8eee6c7f..29d3763d 100644 --- a/icuSources/data/coll/kk_KZ.txt +++ b/icuSources/data/coll/kk_KZ.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/kl.txt b/icuSources/data/coll/kl.txt index f3e04a93..97f5f032 100644 --- a/icuSources/data/coll/kl.txt +++ b/icuSources/data/coll/kl.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/kl.xml +// * Source File:/common/collation/kl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/kl.xml + * ICU source: /xml/collation/kl.xml */ kl{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -20,7 +20,7 @@ kl{ "&Y<<ü<<<Ü<<ű<<<Å°" "&[before 1]ʒ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<Ã¥<<<Å" } - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/kl_GL.txt b/icuSources/data/coll/kl_GL.txt index 598e92c4..51a3eb90 100644 --- a/icuSources/data/coll/kl_GL.txt +++ b/icuSources/data/coll/kl_GL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/kn.txt b/icuSources/data/coll/kn.txt index 46c8fc05..402e4d58 100644 --- a/icuSources/data/coll/kn.txt +++ b/icuSources/data/coll/kn.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/kn.xml +// * Source File:/common/collation/kn.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/kn.xml + * ICU source: /xml/collation/kn.xml */ kn{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{" [normalization on ]"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/kn_IN.txt b/icuSources/data/coll/kn_IN.txt index 6b997673..776fb0d3 100644 --- a/icuSources/data/coll/kn_IN.txt +++ b/icuSources/data/coll/kn_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ko.txt b/icuSources/data/coll/ko.txt index bd917b29..c26b4765 100644 --- a/icuSources/data/coll/ko.txt +++ b/icuSources/data/coll/ko.txt @@ -1,687 +1,687 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ko.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/collation/ko.xml - */ -ko{ - Version{"1.2"} - collations{ - standard{ - Sequence{ - "[optimize [가-각간갇-갊감-갗같-객갠갤갬-ê°­ê°¯-갱갸-갹갼걀걋걍걔걘걜거-걱건걷-걸걺검-겁것-겆겉-게겐겔겜-겝겟-겡겨" - "-겪견겯-결겸-겹겻-경곁계곈곌곕곗고-곡곤곧-골곪곬곯-곱곳공-곶과-곽관괄괆괌-괍괏광괘괜괠괩괬-ê´­ê´´-괵괸괼굄-굅굇굉교굔굘굡굣구" - "-êµ­êµ°êµ³-굶굻-굽굿궁-궂궈-궉권궐궜-궝궤궷귀-귁귄귈귐-귑귓규균귤그-극근귿-긁금-급긋긍긔기-긱긴긷-길긺김-깁깃깅-깆깊까-깎깐" - "깔깖깜-깝깟-깡깥깨-깩깬깰깸-깹깻-깽꺄-꺅꺌꺼-꺾껀껄껌-껍껏-껑께-껙껜껨껫껭껴껸껼꼇-꼈꼍꼐꼬-꼭꼰꼲꼴꼼-꼽꼿꽁-꽃꽈-꽉꽐꽜" - "-꽝꽤-꽥꽹꾀꾄꾈꾐-꾑꾕꾜꾸-꾹꾼꿀꿇-꿉꿋꿍-꿎꿔꿜꿨-ê¿©ê¿°-꿱꿴꿸뀀-뀁뀄뀌뀐뀔뀜-뀝뀨끄-끅끈끊끌끎끓-끕끗끙끝끼-끽낀낄낌-낍" - "낏낑나-낚난낟-낢남-납낫-낯낱낳-낵낸낼냄-냅냇-냉냐-냑냔냘냠냥너-넉넋-넌널넒-넓넘-넙넛-넝넣-넥넨넬넴-넵넷-넹녀-녁년녈념-" - "녑녔-녕녘녜녠노-녹논놀놂놈-놉놋농높-놔놘놜놨뇌뇐뇔뇜-뇝뇟뇨-뇩뇬뇰뇹뇻뇽누-눅눈눋-눌눔-눕눗눙눠눴눼뉘뉜뉠뉨-뉩뉴-뉵뉼늄-늅늉" - "느-늑는늘-늚늠-늡늣능-늦늪늬늰늴니-닉닌닐닖님-닙닛닝닢다-닦단닫-닯닳-답닷-닻닿-댁댄댈댐-댑댓-댕댜더-덖던덛-덜덞-덟덤-덥" - "덧덩덫덮데-덱덴델뎀-뎁뎃-뎅뎌뎐뎔뎠-뎡뎨뎬도-독돈돋-돌돎돐돔-돕돗동돛돝돠돤돨돼됐되된될됨-됩됫됴두-둑둔둘둠-둡둣둥둬뒀뒈뒝뒤뒨" - "뒬뒵뒷뒹듀듄듈듐듕드-득든듣-들듦듬-듭듯등듸디-딕딘딛-딜딤-딥딧-딪따-딱딴딸땀-땁땃-땅땋-땍땐땔땜-땝땟-땡떠-떡떤떨떪-떫떰-" - "떱떳-떵떻-떽뗀뗄뗌-뗍뗏-뗑뗘뗬또-똑똔똘똥똬똴뙈뙤뙨뚜-뚝뚠뚤뚫-뚬뚱뛔뛰뛴뛸뜀-뜁뜅뜨-뜩뜬뜯-뜰뜸-뜹뜻띄띈띌띔-띕띠띤띨띰-띱" - "띳띵라-락란랄람-랍랏-랒랖-랙랜랠램-랩랫-랭랴-략랸럇량러-럭런럴럼-럽럿-렁렇-렉렌렐렘-렙렛렝려-력련렬렴-렵렷-령례롄롑롓로-" - "록론롤롬-롭롯롱롸롼뢍뢨뢰뢴뢸룀-룁룃룅료룐룔룝룟룡루-룩룬룰룸-룹룻룽뤄뤘뤠뤼-뤽륀륄륌륏륑류-륙륜률륨-륩륫륭르-륵른를름-릅릇릉-" - "릊릍-릎리-릭린릴림-립릿링마-막만많-맒맘-맙맛망-맞맡맣-맥맨맬맴-맵맷-맺먀-먁먈먕머-먹먼멀멂멈-멉멋멍-멎멓-멕멘멜멤-멥멧-" - "ë©©ë©°-멱면멸몃-명몇몌모-목몫-몬몰몲몸-몹못몽뫄뫈뫘-뫙뫼묀묄묍묏묑묘묜묠묩묫무-묶문묻-묾뭄-뭅뭇뭉뭍뭏-뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴" - "뮷므믄믈믐믓미-믹민믿-밀밂밈-밉밋-밍및밑바-반받-밟밤-밥밧방밭배-백밴밸뱀-뱁뱃-뱅뱉뱌-뱍뱐뱝버-벅번벋-벌벎범-법벗벙-벚베-" - "벡벤벧-벨벰-벱벳-벵벼-벽변별볍볏-병볕볘볜보-볶본볼봄-봅봇봉봐봔봤봬뵀뵈-뵉뵌뵐뵘-뵙뵤뵨부-북분붇-붊붐-붑붓붕붙-붚붜붤붰붸뷔" - "-뷕뷘뷜뷩뷰뷴뷸븀븃븅브-븍븐블븜-븝븟비-빅빈빌빎빔-빕빗빙-빛빠-빡빤빨빪빰-빱빳-빵빻-빽뺀뺄뺌-뺍뺏-뺑뺘-뺙뺨뻐-뻑뻔뻗-뻘뻠" - "뻣-뻥뻬뼁뼈-뼉뼘-뼙뼛-뼝뽀-뽁뽄뽈뽐-뽑뽕뾔뾰뿅뿌-뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨-쁩삐-삑삔삘삠-삡삣삥사-삭삯-산삳-삶삼-삽삿-상샅" - "새-색샌샐샘-샙샛-생샤-샥샨샬샴-샵샷샹섀섄섈섐섕서-선섣-설섦-섧섬-섭섯-성섶세-섹센셀셈-셉셋-셍셔-셕션셜셤-셥셧-셩셰셴셸솅" - "소-솎손솔솖솜-솝솟송솥솨-솩솬솰솽쇄쇈쇌쇔쇗-쇘쇠쇤쇨쇰-쇱쇳쇼-쇽숀숄숌-숍숏숑수-숙순숟-술숨-숩숫숭숯숱-숲숴쉈쉐-쉑쉔쉘쉠쉥쉬" - "-쉭쉰쉴쉼-쉽쉿슁슈-슉슐슘슛슝스-슥슨슬-슭슴-습슷승시-식신싣-실싫-십싯싱싶싸-싹싻-싼쌀쌈-쌉쌌-쌍쌓-쌕쌘쌜쌤-쌥쌨-쌩썅써-" - "썩썬썰썲썸-썹썼-썽쎄쎈쎌쏀쏘-쏙쏜쏟-쏠쏢쏨-쏩쏭쏴-쏵쏸쐈쐐쐤쐬쐰쐴쐼-쐽쑈쑤-쑥쑨쑬쑴-쑵쑹쒀쒔쒜쒸쒼쓩쓰-쓱쓴쓸쓺쓿-씁씌씐씔씜" - "씨-씩씬씰씸-씹씻씽아-악안-않알-앎앓-압앗-앙앝-앞애-액앤앨앰-앱앳-앵야-약얀얄얇얌-얍얏양얕얗-얘얜얠얩어-억언-얹얻-얾엄-" - "엊엌엎에-엑엔엘엠-엡엣엥여-엮연열엶-엷염-영옅-예옌옐옘-옙옛-옜오-옥온올-옮옰옳-옵옷옹옻와-왁완왈왐-왑왓-왕왜-왝왠왬왯왱외" - "-왹왼욀욈-욉욋욍요-욕욘욜욤-욥욧용우-욱운울-욺움-웁웃웅워-웍원월웜-웝웠-웡웨-웩웬웰웸-웹웽위-윅윈윌윔-윕윗윙유-육윤율윰-" - "윱윳융윷으-윽은을읊음-읍읏응-의읜읠읨읫이-익인일-읾잃-입잇-잊잎자-작잔잖-잘잚잠-잡잣-잦재-잭잰잴잼-잽잿-쟁쟈-쟉쟌쟎쟐쟘쟝" - "쟤쟨쟬저-적전절젊점-접젓정-젖제-젝젠젤젬-젭젯젱져젼졀졈-졉졌-졍졔조-족존졸졺좀-좁좃종-좇좋-좍좔좝좟좡좨좼-좽죄죈죌죔-죕죗죙" - "죠-죡죤죵주-죽준줄-줆줌-줍줏중줘줬줴쥐-쥑쥔쥘쥠-쥡쥣쥬쥰쥴쥼즈-즉즌즐즘-즙즛증지-직진짇-질짊짐-집짓징-짖짙-짚짜-짝짠짢짤짧" - "짬-짭짯-짱째-짹짼쨀쨈-쨉쨋-쨍쨔쨘쨩쩌-쩍쩐쩔쩜-쩝쩟-쩡쩨쩽쪄쪘쪼-쪽쫀쫄쫌-쫍쫏쫑쫓쫘-쫙쫠쫬쫴쬈쬐쬔쬘쬠-쬡쭁쭈-쭉쭌쭐쭘-쭙" - "쭝쭤쭸-쭹쮜쮸쯔쯤쯧쯩찌-찍찐찔찜-찝찡-찢찧-착찬찮찰참-찹찻-찾채-책챈챌챔-챕챗-챙챠챤챦챨챰챵처-척천철첨-첩첫-ì²­ì²´-첵첸첼쳄" - "-쳅쳇쳉쳐쳔쳤쳬쳰촁초-촉촌촐촘-촙촛총촤촨촬촹최쵠쵤쵬-쵭쵯쵱쵸춈추-축춘출춤-춥춧충춰췄췌췐취췬췰췸-췹췻췽츄츈츌츔츙츠-측츤츨츰-" - "츱츳층치-칙친칟-칡침-칩칫칭카-칵칸칼캄-캅캇캉캐-캑캔캘캠-캡캣-캥캬-캭컁커-컥컨컫-컬컴-컵컷-컹케-켁켄켈켐-켑켓켕켜켠켤켬-" - "켭켯-켱켸코-콕콘콜콤-콥콧콩콰-콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠-쿡쿤쿨쿰-쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴-퀵퀸퀼큄-큅큇큉큐큔큘큠크-큭큰클큼-큽킁키-" - "킥킨킬킴-킵킷킹타-탁탄탈-탉탐-탑탓-탕태-택탠탤탬-탭탯-탱탸턍터-턱턴털턺텀-텁텃-텅테-텍텐텔템-텝텟텡텨텬텼톄톈토-톡톤톨톰-" - "톱톳통톺톼퇀퇘퇴퇸툇툉툐투-툭툰툴툼-툽툿퉁퉈퉜퉤튀-튁튄튈튐-튑튕튜튠튤튬튱트-특튼튿-틀틂틈-틉틋틔틘틜틤-틥티-틱틴틸팀-팁팃팅파" - "-팎판팔팖팜-팝팟-팡팥패-팩팬팰팸-팹팻-팽퍄-퍅퍼-퍽펀펄펌-펍펏-펑페-펙펜펠펨-펩펫펭펴편펼폄-폅폈-평폐폘폡폣포-폭폰폴폼-폽" - "폿퐁퐈퐝푀푄표푠푤푭푯푸-푹푼푿-풀풂품-풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔-픕픗피-픽핀필핌-핍핏핑하-학한할핥함-합핫항해-핵" - "핸핼햄-햅햇-행햐향허-헉헌헐헒험-헙헛헝헤-헥헨헬헴-헵헷헹혀-혁현혈혐-협혓-형혜혠혤혭호-혹혼홀홅홈-홉홋홍홑화-확환활홧황홰-홱" - "홴횃횅회-획횐횔횝횟횡효횬횰횹횻후-훅훈훌훑훔훗훙훠훤훨훰훵훼-훽휀휄휑휘-휙휜휠휨-휩휫휭휴-휵휸휼흄흇흉흐-흑흔흖-흙흠-흡흣흥흩희" - "흰흴흼-흽힁히-힉힌힐힘-힙힛힝] ]" - "&가<<ä¼½<<ä½³<<假<<價<<加<<可<<呵<<哥<<嘉<<嫁<<家<<暇<<架<<枷<<柯<<歌<<珂<<痂<<稼<<苛<<茄<<街" - "<<袈<<訶<<賈<<跏<<è»»<<迦<<駕<<ä»®<<傢<<咖<<哿<<坷<<宊<<斝<<榎<<檟<<珈<<笳<<耞<<舸<<葭<<謌" - "&각<<刻<<却<<各<<恪<<慤<<殼<<珏<<脚<<覺<<角<<閣<<卻<<咯<<埆<<搉<<擱<<æ¡·" - "&간<<侃<<刊<<墾<<奸<<姦<<å¹²<<å¹¹<<懇<<揀<<杆<<柬<<æ¡¿<<澗<<癎<<看<<磵<<稈<<ç«¿<<ç°¡<<肝<<艮<<艱" - "<<è««<<間<<偘<<慳<<栞<<榦<<玕<<秆<<茛<<衎<<赶<<迀<<齦" - "&갈<<乫<<喝<<曷<<渴<<碣<<ç«­<<葛<<褐<<蝎<<鞨<<噶<<楬<<秸<<羯<<蠍<<鶡" - "&감<<勘<<坎<<å ª<<嵌<<感<<憾<<戡<<敢<<柑<<橄<<減<<甘<<疳<<監<<瞰<<ç´º<<邯<<鑑<<鑒<<龕<<坩<<埳" - "<<嵁<<弇<<憨<<撼<<欿<<歛<<泔<<æ·¦<<澉<<矙<<轗<<酣<<é¹»" - "&갑<<匣<<岬<<甲<<胛<<鉀<<閘<<韐" - "&강<<剛<<堈<<姜<<岡<<崗<<康<<强<<彊<<慷<<江<<畺<<疆<<ç³ <<çµ³<<綱<<羌<<腔<<舡<<薑<<襁<<講<<鋼" - "<<降<<鱇<<傋<<僵<<壃<<忼<<扛<<杠<<æ©¿<<æ®­<<矼<<穅<<繈<<罡<<羗<<羫<<茳<<豇<<韁" - "&개<<介<<ä»·<<個<<凱<<塏<<愷<<愾<<慨<<改<<槪<<漑<<疥<<皆<<盖<<箇<<芥<<蓋<<鎧<<開<<剴<<匃<<揩" - "<<槩<<玠<<磕<<闓" - "&객<<喀<<客" - "&ê°±<<坑<<ç²³<<ç¾¹<<硜<<賡<<鏗" - "&ê°¹<<醵" - "&ê±°<<倨<<去<<居<<å·¨<<拒<<据<<據<<擧<<渠<<炬<<祛<<距<<踞<<遽<<鉅<<鋸<<呿<<昛<<秬<<ç­¥<<籧<<胠" - "<<腒<<苣<<莒<<蕖<<蘧<<袪<<裾<<駏" - "&ê±´<<ä¹¾<<件<<健<<å·¾<<建<<愆<<楗<<腱<<虔<<蹇<<鍵<<騫<<揵<<犍<<睷<<褰<<謇<<鞬" - "&걸<<乞<<傑<<杰<<桀<<乬<<朅<<榤" - "&검<<儉<<劍<<劒<<檢<<瞼<<鈐<<黔<<撿<<芡" - "&겁<<劫<<怯<<迲<<刦<<刧" - "&게<<偈<<憩<<揭" - "&격<<擊<<æ ¼<<檄<<激<<膈<<覡<<隔<<挌<<毄<<闃<<骼<<鬲<<鴃" - "&견<<堅<<牽<<犬<<甄<<çµ¹<<ç¹­<<肩<<見<<è­´<<遣<<鵑<<樫<<狷<<畎<<ç­§<<縳<<ç¹¾<<羂<<è ²<<é°¹" - "&ê²°<<抉<<決<<潔<<結<<缺<<訣<<玦<<觖<<闋" - "&겸<<兼<<慊<<箝<<謙<<鉗<<鎌<<傔<<嗛<<岒<<拑<<歉<<縑<<蒹<<黚<<鼸" - "&ê²½<<京<<俓<<倞<<傾<<儆<<勁<<勍<<卿<<坰<<境<<庚<<徑<<慶<<憬<<擎<<敬<<景<<暻<<更<<梗<<涇<<炅" - "<<烱<<璟<<璥<<瓊<<痙<<硬<<磬<<竟<<競<<絅<<經<<耕<<耿<<脛<<莖<<è­¦<<輕<<逕<<鏡<<頃<<é ¸<<驚<<" - "鯨<<冏<<剄<<哽<<惸<<憼<<扃<<檠<<煢<<焭<<熲<<畊<<竸<<綆<<顈<<罄<<褧<<謦<<駉<<鯁<<黥" - "&계<<係<<啓<<å º<<契<<å­£<<屆<<悸<<戒<<桂<<械<<棨<<溪<<界<<癸<<磎<<稽<<ç³»<<繫<<ç¹¼<<計<<誡<<è°¿" - "<<階<<鷄<<å ¦<<烓<<瘈<<禊<<筓<<綮<<縘<<ç½½<<葪<<薊<<雞<<é«»" - "&ê³ <<古<<叩<<告<<呱<<固<<姑<<å­¤<<å°»<<庫<<拷<<攷<<故<<敲<<暠<<枯<<槁<<æ²½<<痼<<皐<<睾<<稿<<羔" - "<<考<<股<<膏<<苦<<苽<<菰<<藁<<è ±<<袴<<誥<<辜<<錮<<雇<<顧<<高<<鼓<<ä¼°<<凅<<刳<<塙<<杲<<æ ²<<" - "槀<<槹<<櫜<<牯<<皋<<盬<<瞽<<稁<<箍<<篙<<糕<<罟<<羖<<翺<<胯<<觚<<詁<<郜<<酤<<鈷<<靠<<é´£<<é·±" - "&곡<<哭<<斛<<曲<<梏<<穀<<è°·<<éµ <<嚳<<槲<<縠<<觳<<轂" - "&곤<<困<<坤<<崑<<昆<<梱<<棍<<滾<<琨<<袞<<鯤<<堃<<崐<<悃<<捆<<緄<<è¡®<<裍<<褌<<錕<<閫<<é«¡<<éµ¾" - "<<鶤<<齫" - "&골<<汨<<骨<<搰<<榾<<矻<<鶻" - "&ê³µ<<供<<公<<共<<功<<孔<<å·¥<<恐<<恭<<拱<<控<<攻<<珙<<空<<蚣<<è²¢<<鞏<<倥<<崆<<悾<<æ ±<<槓<<箜" - "<<蛩<<蛬<<贛<<è·«<<釭<<龔" - "&곶<<串" - "&ê³¼<<寡<<戈<<果<<瓜<<科<<菓<<誇<<課<<è·¨<<過<<鍋<<顆<<侉<<堝<<夥<<夸<<撾<<猓<<稞<<窠<<蝌<<裹" - "<<踝<<銙<<騍" - "&ê³½<<廓<<槨<<藿<<郭<<椁<<癨<<躩<<霍<<鞹" - "&관<<冠<<官<<寬<<慣<<棺<<款<<灌<<琯<<瓘<<管<<罐<<菅<<觀<<貫<<關<<館<<丱<<涫<<爟<<盥<<祼<<窾" - "<<ç­¦<<綰<<輨<<錧<<鑵<<雚<<é¡´<<髖<<鸛" - "&괄<<刮<<恝<<括<<适<<佸<<栝<<筈<<聒<<髺<<é´°" - "&광<<侊<<光<<匡<<壙<<廣<<曠<<æ´¸<<炚<<狂<<珖<<筐<<胱<<鑛<<恇<<桄<<框<<爌<<獷<<磺<<絖<<纊<<茪" - "<<誆<<誑" - "&괘<<卦<<掛<<罫<<咼<<挂<<ç½£<<è©¿" - "&ê´´<<乖<<傀<<塊<<壞<<怪<<愧<<拐<<槐<<魁<<媿<<廥<<恠<<瑰<<璝<<蒯<<襘" - "&ê´µ<<馘" - "&굉<<宏<<紘<<肱<<轟<<浤<<觥<<訇<<閎" - "&교<<交<<僑<<咬<<喬<<嬌<<嶠<<å·§<<攪<<敎<<æ ¡<<橋<<狡<<皎<<矯<<絞<<翹<<膠<<蕎<<蛟<<較<<轎<<郊" - "<<餃<<驕<<鮫<<ä½¼<<嘄<<嘐<<噭<<嚙<<姣<<憍<<撟<<晈<<暞<<榷<<磽<<窖<<趫<<è¹»<<鉸<<骹<<鵁<<齩" - "&구<<丘<<久<<九<<仇<<俱<<具<<勾<<區<<口<<句<<咎<<嘔<<坵<<垢<<寇<<嶇<<廐<<懼<<拘<<救<<枸<<柩" - "<<構<<歐<<毆<<毬<<求<<溝<<灸<<狗<<玖<<球<<瞿<<矩<<究<<絿<<耉<<臼<<舅<<舊<<苟<<è¡¢<<謳<<è³¼<<" - "軀<<逑<<邱<<鉤<<銶<<駒<<驅<<鳩<<鷗<<龜<<佉<<佝<<俅<<傴<<冓<<劬<<匶<<厹<<叴<<坸<<姤<<媾<<嫗<" - "<屨<<å²£<<彀<<戵<<扣<<捄<<搆<<摳<<昫<<榘<<漚<<璆<<甌<<疚<<痀<<癯<<窛<<窶<<篝<<糗<<胊<<蒟<<蚯" - "<<裘<<覯<<詬<<遘<<釦<<韝<<韭<<韮<<颶<<駈<<鬮<<鷇<<鸜" - "&êµ­<<國<<局<<菊<<鞠<<鞫<<麴<<匊<<掬<<è·¼<<麯" - "&êµ°<<君<<窘<<群<<裙<<軍<<郡<<捃<<桾<<皸" - "&êµ´<<堀<<屈<<掘<<窟<<倔<<崛<<淈<<詘" - "&궁<<å®®<<弓<<穹<<窮<<芎<<躬<<躳" - "&권<<倦<<券<<勸<<卷<<圈<<拳<<捲<<權<<淃<<眷<<勌<<惓<<棬<<睠<<綣<<蜷" - "&궐<<厥<<獗<<蕨<<蹶<<闕" - "&궤<<机<<櫃<<æ½°<<è©­<<軌<<饋<<ä½¹<<几<<劂<<匱<<憒<<撅<<樻<<æ°¿<<簋<<ç¹¢<<è·ª<<闠<<餽<<麂" - "&귀<<晷<<æ­¸<<è²´<<鬼" - "&규<<叫<<圭<<奎<<揆<<槻<<珪<<硅<<窺<<竅<<ç³¾<<葵<<規<<èµ³<<逵<<閨<<刲<<å«¢<<嬀<<巋<<暌<<楏<<樛" - "<<潙<<睽<<糺<<虬<<虯<<è·¬<<邽<<闚<<頍<<馗" - "&ê· <<勻<<均<<畇<<ç­ <<菌<<鈞<<囷<<麏" - "&ê·¤<<橘" - "&ê·¹<<克<<剋<<劇<<戟<<棘<<極<<隙<<亟<<尅<<屐<<郄" - "&ê·¼<<僅<<劤<<勤<<懃<<斤<<æ ¹<<槿<<瑾<<筋<<芹<<菫<<覲<<謹<<近<<饉<<卺<<厪<<墐<<å·¹<<廑<<漌<<觔" - "<<跟<<釿<<靳" - "&금<<今<<妗<<擒<<昑<<檎<<琴<<禁<<禽<<芩<<衾<<è¡¿<<襟<<錦<<唫<<噤<<嶔<<笒<<黅" - "&급<<伋<<及<<急<<扱<<æ±²<<級<<給<<圾<<岌<<皀<<礏<<笈<<芨" - "&긍<<亘<<兢<<矜<<肯<<亙<<殑" - "&기<<企<<伎<<其<<冀<<嗜<<器<<圻<<基<<埼<<夔<<奇<<妓<<寄<<岐<<崎<<å·±<<å¹¾<<忌<<技<<旗<<旣<<朞" - "<<期<<杞<<棋<<棄<<機<<欺<<æ°£<<æ±½<<沂<<淇<<玘<<琦<<琪<<璂<<璣<<畸<<畿<<碁<<磯<<祁<<祇<<祈<<" - "祺<<箕<<紀<<綺<<羈<<耆<<耭<<肌<<記<<譏<<豈<<èµ·<<錡<<錤<<飢<<饑<<騎<<騏<<é©¥<<麒<<僛<<剞<<墍<" - "<屺<<庋<<弃<<å¿®<<愭<<掎<<攲<<旂<<暣<<曁<<棊<<æ­§<<炁<<猉<<禨<<綥<<綦<<羇<<肵<<芪<<芰<<蘄<<虁" - "<<蜝<<蟣<<覉<<覬<<跂<<隑<<頎<<鬐<<é°­<<黖" - "&긴<<緊" - "&길<<佶<<吉<<拮<<桔<<姞<<蛣" - "&김<<金" - "&끽<<喫" - "&나<<儺<<娜<<懦<<拏<<拿<<那<<挐<<挪<<梛<<ç³¥<<糯" - "&낙<<諾" - "&난<<暖<<煖<<難<<偄<<煗<<赧<<餪" - "&날<<捏<<捺" - "&남<<南<<枏<<楠<<æ¹³<<男<<喃<<柟" - "&납<<納<<衲" - "&낭<<囊<<娘<<曩" - "&내<<乃<<內<<奈<<柰<<耐<<匂<<奶<<嬭<<迺<<鼐" - "&녀<<女" - "&녁<<惄" - "&년<<å¹´<<撚<<秊<<碾" - "&념<<念<<恬<<拈<<捻" - "&녕<<寧<<寗<<佞<<儜<<嚀<<濘" - "&노<<努<<奴<<弩<<怒<<瑙<<駑<<呶<<å­¥<<å³±<<猱<<笯<<臑" - "&농<<濃<<膿<<è¾²<<儂<<噥<<ç© <<醲" - "&뇌<<惱<<腦<<餒" - "&뇨<<å°¿<<嫋<<嬲<<淖<<磠<<裊<<鐃" - "&누<<啂<<耨" - "&눈<<å«©" - "&눌<<訥<<吶<<肭" - "&뉴<<杻<<紐<<忸<<靵" - "&뉵<<衄" - "&능<<能" - "&니<<å°¼<<æ³¥<<呢<<怩<<柅<<祢<<禰<<膩" - "&닉<<匿<<溺<<昵<<暱" - "&다<<多<<茶<<爹" - "&단<<丹<<亶<<但<<單<<團<<壇<<彖<<斷<<旦<<檀<<段<<湍<<短<<端<<簞<<緞<<蛋<<袒<<鄲<<鍛<<慱<<担" - "<<椴<<漙<<癉<<耑<<胆<<腶<<蜑" - "&달<<撻<<æ¾¾<<獺<<疸<<達<<妲<<怛<<闥<<靼<<韃" - "&담<<啖<<坍<<憺<<擔<<曇<<æ·¡<<湛<<æ½­<<æ¾¹<<痰<<聃<<膽<<蕁<<覃<<談<<譚<<錟<<儋<<啗<<噉<<墰<<壜" - "<<毯<<禫<<罎<<薝<<郯<<é»®<<黵" - "&답<<沓<<畓<<答<<踏<<遝" - "&당<<唐<<堂<<塘<<å¹¢<<戇<<撞<<棠<<當<<糖<<螳<<黨<<倘<<儻<<党<<搪<<檔<<溏<<瑭<<璫<<瞠<<礑<<蟷" - "<<襠<<讜<<鏜<<鐺<<餳<<餹" - "&대<<代<<垈<<坮<<大<<對<<å²±<<帶<<待<<戴<<擡<<玳<<臺<<袋<<貸<<隊<<黛<<儓<<懟<<旲<<汏<<碓<<鐓" - "&댁<<宅" - "&덕<<å¾·<<悳" - "&도<<倒<<刀<<到<<圖<<å µ<<塗<<導<<å± <<島<<嶋<<度<<徒<<悼<<挑<<掉<<搗<<桃<<棹<<櫂<<淘<<渡<<滔" - "<<濤<<燾<<盜<<睹<<禱<<稻<<萄<<覩<<è³­<<è·³<<蹈<<逃<<途<<道<<都<<鍍<<陶<<韜<<叨<<壔<<å¼¢<<忉<<" - "慆<<掏<<搯<<擣<<檮<<æ´®<<涂<<稌<<菟<<酴<<闍<<鞀<<鞱<<饕<<鼗" - "&독<<毒<<瀆<<牘<<犢<<獨<<督<<禿<<篤<<纛<<讀<<櫝<<é»·" - "&돈<<墩<<惇<<敦<<旽<<暾<<沌<<焞<<燉<<豚<<頓<<å¼´<<潡<<躉" - "&돌<<ä¹­<<突<<咄<<堗" - "&동<<仝<<冬<<凍<<動<<同<<憧<<東<<桐<<棟<<洞<<æ½¼<<疼<<瞳<<ç«¥<<胴<<董<<銅<<侗<<僮<<哃<<垌<<峒" - "<<彤<<朣<<橦<<涷<<艟<<苳<<茼<<蕫<<蝀<<錬<<鮗" - "&두<<兜<<斗<<杜<<枓<<痘<<竇<<荳<<豆<<逗<<é ­<<抖<<斁<<肚<<脰<<蚪<<è ¹<<陡" - "&둔<<屯<<臀<<芚<<遁<<遯<<鈍<<窀<<迍" - "&둘<<乧" - "&득<<得" - "&등<<嶝<<橙<<燈<<登<<等<<藤<<謄<<鄧<<騰<<凳<<墱<<滕<<磴<<籐<<縢<<螣<<鐙" - "&라<<喇<<懶<<癩<<羅<<蘿<<螺<<裸<<邏<<倮<<囉<<曪<<瘰<<ç ¢<<臝<<鑼<<騾<<驘" - "&락<<洛<<烙<<珞<<絡<<落<<酪<<駱<<嗠<<犖" - "&란<<亂<<卵<<欄<<欒<<瀾<<爛<<蘭<<鸞<<嬾<<å¹±<<攔<<灓<<襴<<鑾<<闌" - "&랄<<剌<<è¾£<<埒<<è¾¢" - "&람<<嵐<<擥<<攬<<欖<<æ¿«<<籃<<纜<<藍<<襤<<覽<<婪<<惏" - "&랍<<拉<<臘<<蠟<<鑞" - "&랑<<廊<<朗<<浪<<狼<<琅<<瑯<<螂<<郞<<榔<<ç¡ <<稂<<莨<<蜋<<閬" - "&래<<來<<崍<<å¾ <<萊<<æ·¶<<騋" - "&랭<<冷" - "&략<<掠<<略<<畧" - "&량<<亮<<倆<<兩<<凉<<梁<<樑<<ç²®<<ç²±<<糧<<良<<諒<<輛<<量<<喨<<悢<<椋<<涼<<踉<<魎" - "&ë ¤<<侶<<儷<<勵<<呂<<廬<<慮<<戾<<旅<<櫚<<濾<<礪<<藜<<è £<<閭<<é©¢<<驪<<麗<<黎<<儢<<厲<<唳<<梠" - "<<癘<<ç³²<<膂<<臚<<è ¡<<邌<<鑢" - "&ë ¥<<力<<曆<<æ­·<<瀝<<礫<<è½¢<<靂<<攊<<櫟<<櫪<<癧<<è½£<<酈" - "&ë ¨<<憐<<戀<<攣<<æ¼£<<煉<<璉<<ç·´<<聯<<蓮<<輦<<連<<鍊<<孌<<楝<<湅<<臠<<鏈<<鰊<<é°±" - "&ë ¬<<冽<<列<<劣<<洌<<烈<<裂<<挒<<捩<<颲" - "&ë ´<<廉<<斂<<æ®®<<濂<<ç°¾<<奩<<瀲<<磏" - "&ë µ<<獵<<躐<<鬣" - "&ë ¹<<令<<伶<<囹<<岺<<嶺<<怜<<玲<<笭<<羚<<翎<<聆<<逞<<鈴<<零<<靈<<領<<齡<<另<<呤<<姈<<å²­<<昤" - "<<欞<<æ³ <<秢<<苓<<蛉<<軨<<鴒<<é¹·" - "&례<<例<<澧<<禮<<醴<<隷<<隸<<鱧" - "&로<<勞<<撈<<擄<<櫓<<潞<<瀘<<爐<<盧<<老<<蘆<<虜<<è·¯<<輅<<露<<é­¯<<é·º<<é¹µ<<壚<<æ»·<<玈<<癆<<窂" - "<<艪<<艫<<轤<<鐪<<鑪<<顱<<髗<<鱸<<鸕" - "&록<<碌<<祿<<綠<<菉<<錄<<鹿<<麓<<圥<<彔<<æ·¥<<漉<<簏<<轆<<騄" - "&ë¡ <<論" - "&롱<<壟<<弄<<朧<<瀧<<瓏<<ç± <<聾<<儱<<攏<<曨<<礱<<蘢<<隴<<龎" - "&뢰<<儡<<瀨<<牢<<磊<<賂<<賚<<è³´<<雷<<攂<<礌<<礧<<籟<<纇<<罍<<耒<<蕾<<誄<<酹<<顂" - "&료<<了<<僚<<寮<<廖<<料<<燎<<療<<瞭<<聊<<蓼<<遼<<鬧<<嘹<<嫽<<撩<<暸<<潦<<獠<<繚<<膋<<醪<<鐐" - "<<飂<<飉" - "&룡<<龍<<龒" - "&루<<壘<<婁<<å±¢<<樓<<淚<<漏<<瘻<<ç´¯<<縷<<蔞<<褸<<鏤<<陋<<僂<<嘍<<嶁<<慺<<耬<<螻<<髏" - "&류<<劉<<旒<<柳<<榴<<流<<溜<<瀏<<琉<<瑠<<留<<瘤<<ç¡«<<謬<<類<<橊<<縲<<纍<<遛<<鶹" - "&륙<<六<<戮<<陸<<勠" - "&륜<<侖<<倫<<崙<<æ·ª<<綸<<輪<<掄" - "&률<<律<<慄<<栗<<嵂<<溧" - "&륭<<隆<<癃<<窿" - "&륵<<勒<<肋<<泐" - "&름<<凜<<凛<<廩<<澟" - "&릉<<凌<<楞<<稜<<綾<<菱<<陵<<倰<<蔆" - "&리<<俚<<利<<厘<<吏<<唎<<å±¥<<悧<<李<<梨<<浬<<犁<<狸<<理<<璃<<痢<<籬<<ç½¹<<羸<<莉<<裏<<裡<<里" - "<<釐<<離<<鯉<<俐<<剺<<哩<<å« <<涖<<漓<<离<<莅<<蜊<<螭<<貍<<邐<<魑<<黐" - "&린<<吝<<æ½¾<<燐<<璘<<藺<<躪<<隣<<鱗<<麟<<嶙<<悋<<獜<<磷<<粦<<ç²¼<<繗<<躙<<轔<<鄰<<鏻<<驎" - "&림<<林<<淋<<琳<<臨<<霖<<痳" - "&립<<ç ¬<<立<<笠<<粒<<岦" - "&마<<摩<<瑪<<痲<<碼<<磨<<馬<<魔<<麻<<劘<<媽<<螞<<蟇<<麽<<麿" - "&막<<寞<<幕<<æ¼ <<膜<<莫<<邈<<瞙<<鏌" - "&만<<万<<卍<<娩<<巒<<彎<<慢<<挽<<晩<<曼<<滿<<漫<<灣<<瞞<<萬<<蔓<<è »<<輓<<饅<<é°»<<墁<<嫚<<幔" - "<<縵<<謾<<è¹£<<鏋<<鏝<<鬘" - "&말<<唜<<抹<<末<<沫<<茉<<襪<<靺<<帕<<秣" - "&망<<亡<<妄<<忘<<忙<<望<<網<<罔<<芒<<茫<<莽<<輞<<邙<<惘<<汒<<æ¼­<<莾<<蟒<<魍" - "&매<<埋<<妹<<媒<<寐<<昧<<枚<<梅<<每<<煤<<ç½µ<<è²·<<è³£<<邁<<魅<<呆<<楳<<沬<<玫<<眛<<苺<<莓<<酶" - "<<霉" - "&맥<<脈<<貊<<陌<<驀<<麥<<脉<<貃<<貘" - "&맹<<孟<<氓<<猛<<盲<<盟<<萌<<儚<<甍<<甿<<虻" - "&멱<<冪<<覓<<幎<<糸" - "&ë©´<<免<<冕<<勉<<棉<<沔<<眄<<眠<<綿<<ç·¬<<面<<麵<<俛<<湎<<糆<<緜<<麪" - "&멸<<滅<<蔑<<篾<<衊" - "&명<<冥<<名<<命<<明<<暝<<椧<<溟<<皿<<瞑<<茗<<蓂<<螟<<酩<<銘<<é³´<<æ´º" - "&몌<<袂" - "&모<<ä¾®<<冒<<募<<姆<<帽<<慕<<摸<<摹<<暮<<某<<模<<母<<毛<<牟<<牡<<瑁<<眸<<矛<<耗<<芼<<茅<<謀" - "<<謨<<貌<<侔<<姥<<媢<<å««<<恈<<旄<<皃<<眊<<粍<<ç³¢<<耄<<蝥<<蟊<<鉾<<髦" - "&목<<木<<沐<<牧<<目<<睦<<穆<<鶩<<凩<<苜" - "&몰<<æ­¿<<沒" - "&몽<<夢<<朦<<蒙<<幪<<懞<<曚<<溕<<濛<<瞢<<矇<<艨<<雺<<鸏" - "&묘<<卯<<墓<<妙<<廟<<描<<昴<<杳<<渺<<猫<<竗<<苗<<錨<<æ·¼<<眇<<藐<<貓" - "&무<<務<<å·«<<憮<<懋<<戊<<拇<<撫<<无<<楙<<æ­¦<<毋<<無<<珷<<畝<<繆<<舞<<茂<<蕪<<誣<<貿<<霧<<鵡" - "<<儛<<嘸<<廡<<膴<<騖" - "&묵<<墨<<默<<嘿" - "&문<<們<<刎<<吻<<問<<文<<汶<<紊<<紋<<聞<<蚊<<門<<雯<<匁<<悗<<懣<<抆<<捫<<炆<<璊" - "&물<<勿<<沕<<物" - "&미<<味<<媚<<å°¾<<嵋<<彌<<å¾®<<未<<梶<<楣<<渼<<湄<<眉<<ç±³<<美<<薇<<謎<<è¿·<<靡<<é»´<<亹<<娓<<媄" - "<<媺<<å¼¥<<å¼­<<敉<<瀰<<獼<<糜<<縻<<苿<<蘼<<麋" - "&민<<å²·<<悶<<愍<<憫<<敏<<旻<<旼<<民<<泯<<玟<<珉<<ç·¡<<閔<<忞<<忟<<暋<<æ¹£<<緍<<ç½ <<苠<<閩<<é°µ" - "<<黽" - "&밀<<密<<蜜<<謐<<樒<<滵" - "&박<<剝<<博<<拍<<搏<<撲<<朴<<樸<<泊<<珀<<璞<<箔<<粕<<縛<<膊<<舶<<薄<<è¿«<<雹<<駁<<亳<<欂<<牔" - "<<鎛<<駮<<髆" - "&반<<ä¼´<<半<<反<<叛<<拌<<搬<<攀<<斑<<槃<<æ³®<<潘<<班<<畔<<瘢<<盤<<盼<<磐<<磻<<礬<<絆<<般<<蟠" - "<<返<<頒<<飯<<媻<<扳<<搫<<攽<<朌<<胖<<螌<<頖" - "&발<<勃<<拔<<撥<<渤<<潑<<發<<跋<<醱<<鉢<<é«®<<魃<<哱<<浡<<脖<<鈸<<鵓" - "&ë°©<<倣<<傍<<坊<<妨<<å°¨<<幇<<å½·<<房<<放<<方<<旁<<昉<<枋<<榜<<滂<<磅<<ç´¡<<肪<<膀<<舫<<芳<<蒡" - "<<蚌<<訪<<謗<<邦<<防<<龐<<仿<<厖<<幫<<徬<<搒<<旊<<梆<<牓<<舽<<螃<<鎊<<é«£<<é­´" - "&ë°°<<倍<<俳<<培<<徘<<拜<<排<<杯<<湃<<焙<<盃<<背<<胚<<裴<<裵<<褙<<è³ <<輩<<配<<陪<<坏<<坯<<扒" - "<<琲<<蓓" - "&ë°±<<伯<<ä½°<<帛<<柏<<æ ¢<<白<<百<<魄<<粨" - "&번<<幡<<樊<<煩<<燔<<番<<繁<<蕃<<藩<<飜<<繙<<ç¿»<<膰<<蘩<<袢" - "&벌<<伐<<筏<<ç½°<<閥<<橃<<罸" - "&범<<凡<<帆<<梵<<æ°¾<<汎<<泛<<犯<<範<<范<<笵<<訉<<颿" - "&법<<法<<琺" - "&ë²½<<僻<<劈<<壁<<擘<<檗<<璧<<癖<<碧<<蘗<<闢<<霹<<擗<<甓<<疈<<襞<<é·¿<<鼊" - "&변<<卞<<弁<<變<<辨<<辯<<邊<<å¿­<<抃<<籩<<è¾®<<腁<<賆<<駢<<骿<<鴘" - "&별<<別<<瞥<<鱉<<鼈<<彆<<é·©" - "&병<<丙<<倂<<兵<<屛<<å¹·<<昞<<昺<<柄<<棅<<炳<<甁<<病<<秉<<竝<<輧<<餠<<騈<<並<<塀<<çµ£<<ç¼¾<<迸" - "<<鈵<<鋲<<鉼" - "&ë³´<<保<<å ¡<<å ±<<寶<<普<<æ­¥<<洑<<湺<<æ½½<<珤<<甫<<菩<<補<<褓<<譜<<輔<<俌<<盙<<ç° <<葆<<靌<<鴇" - "<<黼" - "&ë³µ<<伏<<僕<<匐<<卜<<宓<<復<<服<<福<<腹<<茯<<蔔<<複<<覆<<è¼¹<<è¼»<<馥<<鰒<<墣<<幞<<扑<<æ¿®<<箙" - "<<菔<<蝠<<蝮<<鵩" - "&본<<本" - "&ë³¼<<乶" - "&봉<<俸<<奉<<封<<峯<<å³°<<捧<<棒<<烽<<熢<<琫<<縫<<蓬<<蜂<<逢<<鋒<<é³³<<丰<<夆<<篷<<綘<<菶<<鴌" - "&부<<不<<付<<俯<<傅<<剖<<副<<否<<咐<<埠<<夫<<婦<<孚<<å­µ<<富<<府<<扶<<敷<<斧<<æµ®<<溥<<父<<符" - "<<ç°¿<<缶<<腐<<腑<<膚<<艀<<芙<<莩<<訃<<è² <<賦<<è³»<<èµ´<<趺<<部<<釜<<阜<<附<<駙<<鳧<<仆<<俘<<" - "媍<<抔<<拊<<掊<<æ¡´<<榑<<涪<<玞<<祔<<筟<<罘<<罦<<胕<<芣<<苻<<蔀<<蚨<<蜉<<袝<<裒<<跗<<鈇<<é «<" - "<鮒<<麩" - "&북<<北" - "&분<<分<<吩<<噴<<墳<<奔<<奮<<å¿¿<<憤<<扮<<昐<<æ±¾<<焚<<盆<<粉<<糞<<紛<<芬<<賁<<雰<<体<<坌<<帉" - "<<枌<<棻<<棼<<氛<<湓<<濆<<犇<<畚<<砏<<笨<<肦<<膹<<蕡<<轒<<黺<<é¼¢" - "&불<<佛<<弗<<彿<<拂<<岪<<祓<<ç´±<<艴<<茀<<韍<<é«´<<é»»" - "&붕<<å´©<<朋<<棚<<硼<<繃<<鵬<<堋<<æ¼°<<鬅" - "&비<<丕<<備<<匕<<匪<<卑<<妃<<å©¢<<庇<<悲<<憊<<扉<<批<<斐<<枇<<榧<<比<<毖<<毗<<毘<<沸<<琵<<痺" - "<<砒<<碑<<秕<<秘<<粃<<緋<<ç¿¡<<肥<<脾<<臂<<菲<<蜚<<裨<<誹<<è­¬<<è²»<<鄙<<非<<飛<<é¼»<<仳<<俾<<" - "剕<<圮<<埤<<妣<<屁<<庳<<悱<<棐<<椑<<沘<<淝<<æ· <<濞<<狉<<狒<<痞<<痹<<睥<<祕<<篦<<紕<<羆<<腓<" - "<芘<<芾<<萆<<蓖<<蚍<<貔<<贔<<轡<<邳<<郫<<閟<<陴<<霏<<鞴<<騑<<騛<<髀<<鼙" - "&빈<<嚬<<嬪<<彬<<斌<<檳<<殯<<浜<<濱<<瀕<<牝<<玭<<貧<<賓<<é »<<儐<<擯<<矉<<ç¹½<<臏<<蘋<<è±³<<邠" - "<<鑌<<霦<<é¡°<<鬂<<鬢" - "&빙<<憑<<æ°·<<聘<<騁<<冰<<凭<<凴<<娉" - "&사<<乍<<事<<些<<仕<<伺<<ä¼¼<<使<<俟<<僿<<史<<司<<唆<<嗣<<四<<士<<奢<<娑<<寫<<寺<<射<<å·³<<師" - "<<徙<<思<<捨<<斜<<斯<<柶<<査<<梭<<æ­»<<沙<<泗<<渣<<瀉<<獅<<砂<<社<<祀<<祠<<私<<篩<<紗<<çµ²<<" - "肆<<舍<<莎<<蓑<<蛇<<裟<<詐<<詞<<謝<<賜<<赦<<è¾­<<邪<<飼<<駟<<麝<<傞<<剚<<卸<<咋<<姒<<楂<<榭<" - "<汜<<痧<<皶<<ç«¢<<笥<<ç¼·<<蜡<<覗<<駛<<é­¦<<鯊<<é°¤" - "&삭<<削<<朔<<槊<<爍<<蒴<<鑠" - "&산<<傘<<刪<<å±±<<散<<汕<<珊<<産<<疝<<算<<蒜<<酸<<霰<<剷<<姍<<å­¿<<橵<<潸<<澘<<狻<<繖<<訕<<鏟" - "<<閊<<毿" - "&살<<ä¹·<<撒<<殺<<煞<<薩" - "&삼<<三<<杉<<森<<渗<<芟<<蔘<<è¡«<<糝<<釤<<鬖" - "&삽<<揷<<澁<<鈒<<颯<<卅<<唼<<歃<<ç¿£<<鍤<<霅<<霎" - "&상<<上<<傷<<像<<償<<商<<喪<<嘗<<孀<<尙<<å³ <<常<<床<<庠<<廂<<想<<桑<<æ©¡<<湘<<爽<<牀<<狀<<相" - "<<祥<<ç®±<<翔<<裳<<觴<<詳<<象<<賞<<霜<<塽<<徜<<晌<<殤<<甞<<緗<<鎟<<顙<<鬺" - "&새<<塞<<璽<<è³½<<鰓" - "&색<<嗇<<ç©¡<<ç´¢<<色<<槭<<濇<<瀒" - "&생<<牲<<生<<甥<<笙<<眚<<鉎" - "&서<<墅<<壻<<嶼<<序<<庶<<徐<<恕<<抒<<捿<<敍<<暑<<曙<<書<<栖<<棲<<犀<<瑞<<ç­®<<çµ®<<緖<<ç½²<<胥" - "<<舒<<薯<<西<<誓<<逝<<鋤<<黍<<é¼ <<噬<<å©¿<<揟<<撕<<湑<<澨<<紓<<耡<<芧<<鉏" - "&석<<夕<<奭<<席<<惜<<昔<<晳<<析<<汐<<淅<<潟<<石<<碩<<蓆<<釋<<錫<<晰<<矽<<腊<<舃<<蜥<<鉐<<鼫" - "&선<<仙<<僊<<先<<善<<嬋<<宣<<扇<<敾<<旋<<渲<<煽<<琁<<瑄<<璇<<璿<<癬<<禪<<線<<繕<<羨<<腺<<膳" - "<<船<<蘚<<蟬<<詵<<è·£<<選<<銑<<鐥<<饍<<é®®<<墡<<嫙<<尟<<å° <<å±³<<愃<<歚<<熯<<筅<<綫<<譔<<è­±<<" - "鏇<<騸<<鱓<<é±»" - "&설<<卨<<屑<<楔<<泄<<æ´©<<渫<<舌<<薛<<褻<<設<<說<<雪<<齧<<偰<<媟<<揲<<暬<<爇<<碟<<稧<<ç´²" - "&섬<<剡<<暹<<殲<<纖<<蟾<<贍<<閃<<陝<<孅<<憸<<摻<<睒<<è­«<<銛<<韱" - "&섭<<攝<<涉<<燮<<囁<<懾<<灄<<聶<<躡<<鑷<<顳" - "&성<<城<<姓<<宬<<性<<惺<<成<<星<<晟<<猩<<珹<<盛<<省<<ç­¬<<聖<<聲<<腥<<誠<<醒<<瑆<<騂" - "&세<<世<<勢<<æ­²<<洗<<稅<<笹<<ç´°<<è²°<<帨<<洒<<繐<<蛻" - "&소<<召<<嘯<<塑<<宵<<小<<少<<å·¢<<所<<掃<<搔<<昭<<梳<<æ²¼<<消<<溯<<瀟<<炤<<燒<<甦<<疏<<疎<<瘙" - "<<笑<<篠<<ç°«<<ç´ <<ç´¹<<蔬<<蕭<<蘇<<訴<<逍<<遡<<邵<<銷<<韶<<騷<<佋<<俏<<卲<<嗉<<埽<<塐<<愬<<" - "捎<<樔<<泝<<ç­±<<箾<<繅<<翛<<膆<<艘<<蛸<<踈<<酥<<霄<<魈<<鮹<<é°º" - "&속<<俗<<屬<<束<<涑<<粟<<續<<謖<<贖<<速<<æ´¬<<遬" - "&손<<å­«<<å·½<<損<<蓀<<遜<<飡<<飧<<飱" - "&솔<<率<<窣<<蟀" - "&송<<宋<<悚<<松<<淞<<訟<<誦<<送<<頌<<柗<<竦<<鬆" - "&쇄<<刷<<灑<<碎<<鎖<<惢<<曬<<瑣" - "&쇠<<è¡°<<釗" - "&수<<ä¿®<<受<<嗽<<囚<<垂<<壽<<嫂<<守<<岫<<峀<<帥<<愁<<戍<<手<<授<<搜<<收<<數<<樹<<殊<<æ°´<<洙" - "<<æ¼±<<燧<<狩<<獸<<琇<<璲<<瘦<<睡<<秀<<穗<<竪<<ç²¹<<綏<<綬<<繡<<羞<<脩<<茱<<蒐<<蓚<<藪<<袖<<" - "誰<<讐<<輸<<遂<<邃<<酬<<銖<<銹<<隋<<隧<<隨<<雖<<需<<須<<首<<髓<<鬚<<叟<<售<<廋<<晬<<殳<<泅<" - "<溲<<濉<<睟<<睢<<瞍<<祟<<籔<<脺<<膄<<膸<<讎<<豎<<陲<<颼<<饈" - "&숙<<叔<<塾<<夙<<å­°<<宿<<淑<<潚<<熟<<琡<<璹<<肅<<菽<<俶<<倏<<儵<<婌<<橚<<驌<<é·«" - "&순<<å·¡<<徇<<循<<恂<<旬<<栒<<楯<<橓<<殉<<æ´µ<<æ·³<<珣<<盾<<瞬<<筍<<純<<脣<<舜<<荀<<蓴<<蕣<<è©¢" - "<<諄<<醇<<錞<<順<<馴<<侚<<狥<<盹<<眴<<紃<<肫<<駨<<鬊<<鶉" - "&술<<戌<<術<<è¿°<<鉥<<絉" - "&숭<<崇<<å´§<<嵩<<菘" - "&쉬<<倅<<æ·¬<<焠" - "&슬<<瑟<<膝<<蝨<<虱" - "&습<<濕<<拾<<習<<褶<<襲<<慴<<熠<<隰" - "&승<<丞<<乘<<僧<<勝<<升<<承<<昇<<繩<<蠅<<陞<<塍<<鬙" - "&시<<侍<<匙<<嘶<<始<<媤<<å°¸<<屎<<屍<<市<<弑<<恃<<施<<是<<時<<枾<<柴<<猜<<矢<<示<<翅<<蒔<<蓍" - "<<視<<試<<è©©<<è«¡<<豕<<豺<<偲<<兕<<厮<<啻<<塒<<廝<<枲<<柹<<澌<<ç·¦<<翤<<諟<<è«°<<豉<<釃<<鍉<<" - "顋&식<<埴<<寔<<式<<息<<拭<<植<<殖<<湜<<熄<<篒<<蝕<<識<<軾<<食<<飾<<喰<<媳<<æ »" - "&신<<伸<<侁<<ä¿¡<<呻<<娠<<宸<<愼<<新<<晨<<燼<<申<<神<<ç´³<<腎<<臣<<莘<<薪<<藎<<蜃<<訊<<身<<辛" - "<<迅<<哂<<噺<<囟<<姺<<汛<<矧<<脤<<贐<<é £<<駪" - "&실<<失<<室<<實<<悉<<蟋<<飋" - "&심<<審<<尋<<心<<沁<<æ·±<<瀋<<甚<<芯<<諶<<梣<<潯<<燖<<葚<<鐔<<鱏" - "&십<<什<<十<<è¾»" - "&쌍<<雙" - "&씨<<氏" - "&아<<亞<<俄<<兒<<啞<<娥<<峨<<我<<牙<<芽<<莪<<蛾<<衙<<訝<<阿<<雅<<餓<<鴉<<鵝<<丫<<哦<<娿<<婀" - "<<峩<<疴<<砑<<笌<<迓<<錏<<鵞" - "&악<<堊<<å²³<<嶽<<幄<<惡<<愕<<握<<樂<<渥<<鄂<<鍔<<顎<<鰐<<é½·<<偓<<卾<<咢<<喔<<噩<<腭<<萼<<覨" - "<<諤<<鶚<<齶" - "&안<<安<<岸<<按<<晏<<案<<眼<<雁<<鞍<<顔<<鮟<<桉<<犴<<贋<<鴈" - "&알<<斡<<謁<<軋<<閼<<嘎<<戞<<揠<<穵<<訐<<遏<<頞<<é´¶" - "&암<<唵<<岩<<巖<<庵<<暗<<癌<<菴<<闇<<啽<<媕<<嵓<<晻<<腤<<葊<<蓭<<諳<<é ·<<馣<<黯" - "&압<<壓<<押<<狎<<é´¨" - "&앙<<ä»°<<央<<怏<<昻<<殃<<秧<<é´¦<<卬<<坱<<æ³±<<盎<<鞅" - "&애<<厓<<哀<<埃<<崖<<愛<<曖<<涯<<碍<<艾<<隘<<靄<<僾<<唉<<啀<<噯<<娭<<崕<<挨<<捱<<欸<<漄<<獃" - "<<皚<<睚<<瞹<<磑<<礙<<薆<<藹<<靉<<騃" - "&액<<厄<<扼<<掖<<液<<縊<<腋<<額<<呝<<戹<<搤<<阨" - "&앵<<æ«»<<罌<<鶯<<鸚<<嚶<<嫈<<罃<<é·ª" - "&야<<也<<倻<<冶<<夜<<惹<<揶<<椰<<爺<<耶<<野<<埜" - "&약<<å¼±<<約<<若<<葯<<蒻<<藥<<躍<<爚<<禴<<篛<<ç±¥<<鑰<<é°¯<<鶸<<é¾ " - "&양<<佯<<壤<<孃<<恙<<揚<<攘<<敭<<暘<<楊<<樣<<洋<<瀁<<煬<<痒<<瘍<<禳<<ç©°<<羊<<襄<<讓<<釀<<陽" - "<<養<<徉<<æ¼¾<<瀼<<烊<<癢<<眻<<蘘<<è¼°<<鑲<<颺<<驤" - "&어<<圄<<御<<於<<漁<<瘀<<禦<<語<<馭<<魚<<齬<<圉<<敔<<æ·¤<<飫" - "&억<<億<<憶<<抑<<檍<<臆<<繶" - "&언<<偃<<å °<<彦<<焉<<言<<諺<<傿<<匽<<å«£<<讞<<鄢<<é¼´<<é¼¹" - "&얼<<å­¼<<蘖<<臬" - "&엄<<俺<<儼<<嚴<<奄<<掩<<æ·¹<<å´¦<<广<<曮<<罨<<醃<<閹" - "&업<<嶪<<業<<嶫<<鄴" - "&에<<恚<<曀" - "&엔<<円" - "&여<<予<<余<<如<<歟<<汝<<璵<<礖<<與<<艅<<茹<<輿<<轝<<餘<<舁" - "&역<<亦<<域<<å½¹<<易<<疫<<ç¹¹<<è­¯<<逆<<驛<<嶧<<懌<<æ·¢<<閾" - "&연<<嚥<<å §<<姸<<娟<<å®´<<延<<捐<<挻<<椽<<沇<<沿<<涎<<涓<<æ·µ<<演<<烟<<然<<煙<<燃<<燕<<硏<<硯" - "<<ç­µ<<ç·£<<縯<<衍<<軟<<鉛<<鳶<<兗<<囦<<埏<<嬿<<悁<<掾<<曣<<櫞<<渷<<臙<<莚<<蜵<<蠕<<讌<<é·°" - "&열<<悅<<涅<<熱<<閱<<噎" - "&염<<厭<<染<<炎<<焰<<琰<<艶<<苒<<閻<<é«¥<<é¹½<<冉<<å¡©<<懕<<扊<<檿<<檶<<灎<<灩<<釅<<饜<<魘<<黶" - "&엽<<曄<<燁<<葉<<曅<<熀<<爗<<靨" - "&영<<塋<<嶸<<å½±<<映<<暎<<楹<<榮<<æ°¸<<æ³³<<渶<<潁<<濚<<瀛<<瀯<<煐<<營<<獰<<瑛<<瓔<<盈<<穎<<纓" - "<<英<<è© <<迎<<鍈<<霙<<咏<<嬴<<嬰<<浧<<æ¿´<<癭<<碤<<縈<<蠑<<贏<<郢<<韺" - "&예<<乂<<倪<<刈<<叡<<曳<<æ±­<<濊<<猊<<睿<<ç©¢<<芮<<藝<<蘂<<裔<<è©£<<è­½<<豫<<銳<<霓<<預<<囈<<嫛" - "<<拽<<掜<<枘<<獩<<睨<<瞖<<繄<<翳<<苅<<蕊<<蕋<<薉<<蚋<<蜺<<鯢<<鷖<<麑" - "&오<<五<<伍<<俉<<傲<<午<<吾<<吳<<嗚<<å¡¢<<墺<<奧<<娛<<寤<<悟<<懊<<敖<<旿<<晤<<梧<<汚<<æ¾³<<烏" - "<<熬<<獒<<ç­½<<蜈<<誤<<é°²<<鼇<<仵<<ä¿£<<唔<<嗷<<噁<<圬<<媪<<嫯<<忤<<慠<<捂<<汙<<窹<<聱<<茣<<" - "襖<<謷<<迃<<迕<<遨<<鏊<<鏖<<隩<<驁<<鼯" - "&옥<<屋<<沃<<獄<<玉<<鈺" - "&온<<溫<<瑥<<瘟<<ç©©<<縕<<蘊<<媼<<慍<<昷<<æ°³<<熅<<薀<<轀<<醞<<韞<<饂<<é°®" - "&올<<兀<<嗢<<膃" - "&옹<<壅<<擁<<瓮<<甕<<癰<<翁<<邕<<雍<<饔<<喁<<å»±<<滃<<癕<<禺<<罋<<蓊<<雝<<顒" - "&와<<渦<<瓦<<窩<<窪<<臥<<蛙<<蝸<<訛<<哇<<囮<<婐<<枙<<æ´¼<<猧<<窊<<萵<<譌" - "&완<<婉<<完<<宛<<梡<<椀<<æµ£<<玩<<琓<<琬<<碗<<ç·©<<ç¿«<<脘<<腕<<莞<<豌<<阮<<頑<<刓<<垸<<妧<<岏" - "<<忨<<惋<<涴<<盌" - "&왈<<曰" - "&왕<<往<<旺<<枉<<汪<<王<<å°«<<瀇<<迬" - "&왜<<倭<<娃<<æ­ª<<矮<<媧" - "&외<<外<<嵬<<巍<<猥<<畏<<偎<<å´´<<嵔<<渨<<煨<<碨<<磈<<聵<<隗" - "&요<<僥<<凹<<å ¯<<夭<<妖<<姚<<寥<<嶢<<拗<<搖<<撓<<擾<<曜<<橈<<燿<<瑤<<窈<<窯<<繇<<繞<<耀<<腰" - "<<蟯<<要<<謠<<遙<<邀<<饒<<偠<<喓<<坳<<墝<<嬈<<幺<<å¾­<<å¾¼<<殀<<澆<<祅<<穾<<窅<<蕘<<遶<<鷂" - "&욕<<慾<<欲<<æµ´<<縟<<褥<<è¾±<<溽<<蓐" - "&용<<俑<<傭<<冗<<勇<<埇<<墉<<容<<庸<<慂<<榕<<涌<<湧<<溶<<熔<<瑢<<用<<甬<<聳<<茸<<蓉<<踊<<鎔" - "<<鏞<<傛<<宂<<åµ±<<慵<<憃<<槦<<硧<<舂<<蛹<<踴" - "&우<<于<<佑<<偶<<優<<又<<友<<右<<宇<<寓<<å°¤<<愚<<憂<<旴<<牛<<玗<<瑀<<盂<<祐<<禑<<禹<<紆<<ç¾½" - "<<芋<<藕<<虞<<迂<<遇<<郵<<釪<<隅<<雨<<雩<<亏<<亴<<俁<<偊<<吁<<å £<<嵎<<庽<<杅<<疣<<盱<<竽<<" - "耦<<耰<<謣<<踽<<鍝<<麀<<麌<<é½²" - "&욱<<勖<<彧<<旭<<昱<<æ ¯<<煜<<稶<<郁<<頊<<燠" - "&운<<云<<橒<<殞<<澐<<熉<<耘<<芸<<蕓<<運<<隕<<雲<<韻<<惲<<沄<<篔<<紜<<霣<<韵" - "&울<<蔚<<鬱<<亐" - "&웅<<熊<<雄" - "&원<<元<<原<<員<<圓<<園<<垣<<媛<<嫄<<寃<<怨<<愿<<援<<沅<<æ´¹<<æ¹²<<源<<爰<<猿<<瑗<<苑<<袁<<轅" - "<<遠<<院<<願<<鴛<<冤<<圜<<杬<<楥<<猨<<綩<<芫<<薗<<蜿<<謜<<鋺<<騵<<éµ·<<黿" - "&월<<月<<越<<鉞<<刖<<粤" - "&위<<位<<偉<<僞<<危<<圍<<委<<威<<尉<<慰<<暐<<渭<<爲<<瑋<<ç·¯<<胃<<萎<<葦<<蔿<<蝟<<衛<<褘<<謂" - "<<違<<韋<<魏<<喟<<幃<<煒<<熨<<痿<<葳<<衞<<諉<<逶<<闈<<韙<<韡<<餧<<骪" - "&유<<ä¹³<<侑<<儒<<兪<<唯<<喩<<å­º<<宥<<å¹¼<<å¹½<<庾<<悠<<惟<<愈<<愉<<揄<<攸<<有<<柔<<柚<<楡<<楢" - "<<æ²¹<<æ´§<<游<<æ¿¡<<猶<<猷<<瑜<<由<<癒<<維<<臾<<萸<<裕<<誘<<諛<<è«­<<踰<<蹂<<遊<<逾<<遺<<酉<<" - "釉<<鍮<<冘<<呦<<囿<<壝<<帷<<揉<<斿<<泑<<牖<<瘉<<瘐<<窬<<窳<<ç±²<<糅<<緌<<腴<<莠<<蕕<<蕤<<蚰<" - "<蚴<<蝤<<褕<<讉<<逌<<鞣<<鮪<<黝<<鼬<<é¾¥" - "&육<<堉<<毓<<肉<<育<<儥" - "&윤<<允<<奫<<å°¹<<潤<<玧<<胤<<贇<<鈗<<閏<<昀<<鋆" - "&율<<聿<<潏<<矞" - "&융<<戎<<瀜<<絨<<融<<狨" - "&은<<垠<<恩<<慇<<æ®·<<誾<<銀<<隱<<听<<嚚<<圁<<垽<<憖<<檼<<溵<<狺<<珢<<癮<<訔<<鄞<<齗" - "&을<<乙<<鳦" - "&음<<吟<<æ·«<<蔭<<陰<<音<<飮<<喑<<崟<<廕<<愔<<霪" - "&읍<<揖<<æ³£<<邑<<悒<<挹<<æµ¥" - "&응<<凝<<應<<膺<<é·¹" - "&의<<依<<倚<<儀<<宜<<意<<懿<<擬<<椅<<毅<<疑<<矣<<義<<艤<<薏<<蟻<<è¡£<<誼<<è­°<<醫<<儗<<凒<<劓" - "<<嶷<<欹<<漪<<猗<<礒<<螘<<饐" - "&이<<二<<以<<伊<<夷<<姨<<å·²<<弛<<彛<<怡<<爾<<珥<<異<<痍<<移<<而<<耳<<肄<<苡<<荑<<è²½<<è²³<<邇" - "<<飴<<餌<<咿<<坨<<尔<<彝<<æ ®<<洟<<珆<<訑<<詑<<迤<<隶" - "&익<<瀷<<益<<翊<<翌<<翼<<謚<<弋<<熤<<鷁" - "&인<<人<<仁<<刃<<印<<咽<<因<<姻<<寅<<引<<忍<<æ¹®<<絪<<茵<<蚓<<認<<靭<<靷<<仞<<堙<<夤<<å©£<<扨" - "<<æ°¤<<洇<<禋<<ç±¾<<芢<<裀" - "&일<<一<<佚<<ä½¾<<壹<<日<<溢<<逸<<鎰<<馹<<泆<<軼" - "&임<<ä»»<<壬<<妊<<姙<<恁<<稔<<荏<<賃<<絍<<衽<<銋<<飪" - "&입<<入<<卄<<廿" - "&잉<<仍<<剩<<孕<<芿<<媵" - "&자<<仔<<刺<<咨<<姉<<姿<<子<<字<<孜<<恣<<慈<<滋<<炙<<煮<<玆<<瓷<<疵<<磁<<ç´«<<者<<自<<茨<<蔗" - "<<藉<<è«®<<資<<雌<<呰<<嬨<<孖<<å­¶<<柘<<泚<<牸<<眥<<眦<<ç²¢<<耔<<胾<<茈<<茲<<莿<<虸<<觜<<訾<<" - "è²²<<èµ­<<鎡<<é ¿<<é«­<<鮓<<鶿<<鷓" - "&작<<作<<勺<<嚼<<斫<<昨<<灼<<炸<<爵<<綽<<芍<<酌<<雀<<éµ²<<岝<<怍<<斱<<柞<<汋<<焯<<犳<<碏" - "&잔<<å­±<<棧<<殘<<潺<<盞<<剗<<戔<<驏" - "&잠<<岑<<暫<<潛<<ç®´<<ç°ª<<è ¶<<涔<<潜<<濳" - "&잡<<雜<<卡<<囃<<眨<<磼<<襍" - "&장<<丈<<仗<<匠<<å ´<<墻<<壯<<奬<<將<<帳<<庄<<å¼µ<<掌<<暲<<杖<<樟<<檣<<欌<<漿<<牆<<獐<<璋<<ç« " - "<<粧<<腸<<臟<<臧<<莊<<葬<<蔣<<薔<<藏<<裝<<贓<<醬<<長<<障<<傽<<奘<<妝<<嬙<<嶂<<廧<<戕<<æ¼³<<" - "牂<<瘴<<糚<<羘<<萇<<装<<賬<<鄣<<鏘<<餦<<麞" - "&재<<再<<哉<<在<<å®°<<才<<材<<æ ½<<梓<<渽<<滓<<災<<縡<<裁<<財<<載<<齋<<齎<<夈<<å´½<<扗<<榟<<灾" - "<<纔" - "&쟁<<爭<<箏<<諍<<錚<<å´¢<<猙<<琤<<鎗" - "&저<<佇<<低<<儲<<咀<<姐<<底<<抵<<杵<<楮<<樗<<æ²®<<渚<<狙<<猪<<疽<<箸<<ç´µ<<苧<<菹<<著<<藷<<詛" - "<<貯<<躇<<這<<邸<<雎<<齟<<宁<<岨<<杼<<柢<<氐<<æ½´<<瀦<<牴<<罝<<羝<<苴<<蛆<<袛<<褚<<觝<<詆<<" - "豬<<陼" - "&적<<勣<<吊<<å«¡<<寂<<摘<<敵<<æ»´<<狄<<的<<積<<笛<<籍<<績<<翟<<荻<<謫<<賊<<赤<<è·¡<<蹟<<迪<<迹" - "<<適<<鏑<<樀<<磧<<ç³´<<菂<<覿<<逖<<馰" - "&전<<佃<<佺<<傳<<全<<典<<前<<剪<<å¡¡<<塼<<奠<<專<<展<<廛<<悛<<戰<<栓<<殿<<氈<<æ¾±<<煎<<琠<<田" - "<<甸<<畑<<癲<<筌<<箋<<ç®­<<篆<<纏<<è©®<<è¼¾<<轉<<鈿<<銓<<錢<<鐫<<電<<顚<<é¡«<<餞<<吮<<囀<<å«¥<<" - "屇<<巓<<戩<<揃<<旃<<æ ´<<槇<<湔<<澶<<牋<<瑱<<甎<<畋<<畠<<痊<<癜<<磚<<籛<<羶<<翦<<腆<<膞<<荃<" - "<躔<<輇<<邅<<鄽<<鋑<<錪<<靛<<靦<<顓<<飦<<餰<<鬋<<é±£<<鸇" - "&절<<切<<截<<折<<浙<<癤<<竊<<節<<絶<<岊<<晢<<窃" - "&점<<占<<å²¾<<店<<漸<<点<<粘<<霑<<鮎<<點<<佔<<墊<<玷<<笘<<簟<<苫<<蔪<<蛅<<覘<<颭<<黏" - "&접<<接<<摺<<蝶<<椄<<楪<<蜨<<跕<<蹀<<鰈" - "&정<<丁<<井<<亭<<停<<偵<<呈<<姃<<定<<幀<<庭<<å»·<<征<<情<<挺<<政<<整<<旌<<晶<<晸<<柾<<楨<<檉" - "<<æ­£<<汀<<淀<<æ·¨<<渟<<湞<<瀞<<炡<<玎<<珽<<町<<睛<<碇<<禎<<程<<穽<<ç²¾<<綎<<艇<<訂<<諪<<貞<<" - "鄭<<酊<<釘<<鉦<<鋌<<錠<<霆<<靖<<靜<<頂<<鼎<<佂<<叮<<婧<<å©·<<怔<<掟<<桯<<梃<<棖<<灯<<珵<<疔<" - "<ç­³<<莛<<証<<遉<<酲<<鋥<<靚" - "&제<<制<<劑<<啼<<å ¤<<帝<<弟<<悌<<提<<梯<<濟<<祭<<第<<臍<<薺<<製<<諸<<蹄<<醍<<除<<際<<霽<<題" - "<<齊<<儕<<娣<<擠<<猘<<瑅<<睇<<禔<<稊<<ç·¹<<踶<<蹏<<躋<<鍗<<隄<<韲<<鮧<<鯷" - "&ì¡°<<俎<<兆<<凋<<助<<嘲<<弔<<彫<<措<<操<<早<<晁<<曺<<曹<<朝<<條<<棗<<槽<<漕<<æ½®<<照<<燥<<爪" - "<<璪<<眺<<祖<<祚<<租<<稠<<窕<<粗<<糟<<組<<ç¹°<<肇<<藻<<蚤<<詔<<調<<趙<<躁<<造<<遭<<釣<<阻<<" - "雕<<é³¥<<ä½»<<傮<<刁<<厝<<嘈<<噪<<嬥<<徂<<懆<<找<<殂<<澡<<琱<<皁<<祧<<竈<<笊<<糙<<糶<<絩<<絛<" - "<胙<<臊<<艚<<蔦<<蜩<<誂<<譟<<鈟<<銚<<鋽<<鯛<<éµ°<<鼂" - "&족<<族<<簇<<足<<鏃<<瘯" - "&ì¡´<<存<<尊<<拵" - "&졸<<卒<<拙<<猝" - "&종<<倧<<宗<<從<<悰<<慫<<棕<<淙<<琮<<種<<終<<綜<<縱<<腫<<踪<<踵<<鍾<<鐘<<伀<<慒<<柊<<椶<<樅" - "<<瑽<<瘇<<ç²½<<螽<<蹤" - "&좌<<佐<<坐<<å·¦<<座<<挫<<剉<<痤<<莝<<髽" - "&죄<<罪" - "&주<<主<<住<<侏<<做<<姝<<胄<<呪<<周<<嗾<<奏<<宙<<州<<廚<<晝<<朱<<柱<<æ ª<<注<<æ´²<<湊<<澍<<炷" - "<<珠<<疇<<籌<<紂<<ç´¬<<綢<<舟<<蛛<<註<<誅<<èµ°<<躊<<è¼³<<週<<酎<<酒<<鑄<<駐<<丟<<侜<<儔<<尌<<" - "幬<<拄<<硃<<籒<<肘<<腠<<蔟<<蛀<<裯<<詋<<賙<<趎<<輈<<遒<<鉒<<霌<<霔<<鼄" - "&죽<<竹<<ç²¥" - "&준<<俊<<儁<<准<<埈<<寯<<å³»<<晙<<樽<<浚<<準<<濬<<焌<<畯<<ç«£<<è ¢<<逡<<遵<<雋<<駿<<噂<<埻<<墫" - "<<惷<<撙<<皴<<綧<<罇<<踆<<è¹²<<鐏<<隼<<餕<<鱒<<鵔" - "&줄<<茁<<ä¹¼" - "&중<<中<<仲<<衆<<重<<眾" - "&즉<<卽<<即<<喞" - "&즐<<櫛<<騭" - "&즙<<楫<<汁<<葺<<檝<<蕺" - "&증<<增<<憎<<曾<<拯<<烝<<甑<<症<<繒<<蒸<<證<<贈<<嶒<<矰<<ç½¾" - "&지<<之<<只<<咫<<地<<址<<志<<持<<指<<摯<<支<<旨<<智<<枝<<枳<<æ­¢<<æ± <<沚<<漬<<知<<ç ¥<<祉<<祗" - "<<紙<<肢<<脂<<至<<芝<<芷<<蜘<<誌<<贄<<趾<<遲<<坻<<墀<<扺<<榰<<泜<<痣<<秪<<篪<<舐<<踟<<躓<<" - "軹<<阯<<鮨<<鷙" - "&직<<直<<稙<<稷<<織<<職<<禝" - "&진<<唇<<嗔<<塵<<振<<搢<<晉<<晋<<æ¡­<<榛<<殄<<æ´¥<<溱<<珍<<瑨<<璡<<畛<<疹<<盡<<眞<<瞋<<秦<<縉" - "<<縝<<臻<<蔯<<袗<<診<<賑<<軫<<è¾°<<進<<鎭<<陣<<陳<<震<<ä¾²<<儘<<珒<<稹<<蓁<<螴<<趁<<鉁<<鬒" - "&질<<侄<<叱<<姪<<嫉<<帙<<桎<<瓆<<疾<<秩<<窒<<膣<<蛭<<質<<跌<<è¿­<<垤<<çµ°<<蒺<<郅<<鑕" - "&짐<<斟<<朕<<鴆" - "&집<<執<<潗<<緝<<輯<<鏶<<集<<咠<<戢" - "&징<<å¾µ<<懲<<澄<<澂<<瀓<<癥<<瞪" - "&ì°¨<<且<<侘<<借<<叉<<嗟<<嵯<<å·®<<次<<æ­¤<<磋<<箚<<蹉<<車<<遮<<ä½½<<偖<<奓<<岔<<å¾£<<槎<<瑳<<硨" - "&ì°©<<捉<<搾<<着<<窄<<錯<<鑿<<齪<<戳<<擉<<斲" - "&ì°¬<<撰<<澯<<燦<<璨<<瓚<<竄<<簒<<纂<<ç²²<<纘<<讚<<贊<<鑽<<餐<<饌<<儧<<儹<<劗<<巑<<攢<<欑<<爨" - "<<趲" - "&ì°°<<刹<<察<<擦<<札<<ç´®<<扎<<拶" - "&ì°¸<<僭<<參<<塹<<慘<<慙<<懺<<斬<<站<<讒<<讖<<儳<<叅<<嶄<<巉<<慚<<憯<<攙<<槧<<欃<<毚<<譖<<鏨" - "<<鑱<<饞<<驂<<黲" - "&ì°½<<倉<<倡<<創<<唱<<娼<<å» <<å½°<<愴<<敞<<昌<<昶<<暢<<槍<<滄<<æ¼²<<猖<<瘡<<窓<<脹<<艙<<菖<<蒼" - "<<倀<<傖<<凔<<刱<<悵<<惝<<戧<<搶<<椙<<氅<<瑲<<窗<<窻<<蹌<<鋹<<錆<<閶<<鬯<<鶬" - "&채<<債<<埰<<寀<<寨<<彩<<採<<ç ¦<<綵<<菜<<蔡<<采<<釵<<棌<<茝" - "&책<<冊<<柵<<策<<責<<嘖<<幘<<磔<<笧<<簀<<蚱" - "&처<<凄<<妻<<悽<<處<<淒<<萋<<褄<<覷<<郪" - "&척<<倜<<剔<<å°º<<慽<<戚<<拓<<擲<<斥<<滌<<瘠<<脊<<è¹ <<陟<<隻<<呎<<坧<<塉<<惕<<捗<<摭<<蜴<<跖" - "<<躑" - "&천<<仟<<千<<喘<<天<<川<<擅<<泉<<æ·º<<玔<<ç©¿<<舛<<薦<<賤<<踐<<遷<<釧<<闡<<阡<<韆<<ä¿´<<倩<<僢" - "<<儃<<洊<<濺<<瓩<<祆<<粁<<臶<<芊<<茜<<荐<<蒨<<蕆<<蚕<<辿<<靝" - "&ì² <<凸<<哲<<喆<<å¾¹<<撤<<澈<<綴<<輟<<轍<<鐵<<剟<<啜<<埑<<惙<<掇<<æ­ <<銕<<錣<<飻<<餮" - "&첨<<僉<<尖<<æ²¾<<æ·»<<甛<<瞻<<ç°½<<籤<<詹<<諂<<幨<<忝<<惉<<檐<<櫼<<瀸<<ç°·<<襜" - "&첩<<堞<<妾<<帖<<捷<<牒<<疊<<睫<<諜<<è²¼<<輒<<倢<<呫<<喋<<怗<<褺" - "&ì²­<<廳<<晴<<æ·¸<<聽<<菁<<請<<靑<<鯖<<凊<<圊<<蜻<<鶄" - "&ì²´<<剃<<替<<涕<<滯<<ç· <<諦<<逮<<遞<<體<<嚏<<彘<<棣<<殢<<砌<<蒂<<蔕<<蕞<<軆<<靆<<é«°" - "&초<<初<<剿<<哨<<憔<<抄<<招<<梢<<椒<<楚<<樵<<炒<<焦<<硝<<礁<<礎<<秒<<稍<<肖<<艸<<苕<<草<<蕉" - "<<貂<<超<<酢<<醋<<醮<<偢<<僬<<劭<<勦<<噍<<嫶<<岧<<å³­<<嶕<<怊<<悄<<愀<<杪<<燋<<綃<<耖<<誚<<" - "譙<<趠<<軺<<è¿¢<<鈔<<鍫<<鍬<<鞘<<顦<<é««<<é·¦<<é½ " - "&촉<<促<<囑<<燭<<矗<<蜀<<觸<<曯<<爥<<矚<<薥<<躅<<髑" - "&촌<<寸<<忖<<村<<邨<<吋" - "&총<<叢<<塚<<寵<<悤<<憁<<摠<<總<<聰<<蔥<<銃<<葱<<蓯<<鏦<<騘<<驄" - "&ì´¬<<撮" - "&최<<催<<崔<<最<<嘬<<摧<<榱<<æ¼¼<<璀<<磪<<縗<<脧" - "&추<<墜<<抽<<推<<椎<<楸<<樞<<湫<<皺<<秋<<芻<<萩<<諏<<趨<<追<<鄒<<酋<<醜<<錐<<錘<<鎚<<雛<<騶" - "<<鰍<<僦<<啾<<娵<<帚<<惆<<捶<<揫<<搥<<甃<<瘳<<龝<<箒<<ç® <<簉<<縋<<縐<<蒭<<陬<<隹<<鞦<<騅<<" - "魋<<鰌<<éµ»<<鶖<<鶵<<麄<<麤" - "&축<<丑<<畜<<祝<<竺<<筑<<築<<縮<<蓄<<蹙<<è¹´<<軸<<逐<<妯<<舳<<豖<<蹜<<鼀" - "&춘<<春<<椿<<瑃" - "&출<<出<<朮<<黜<<秫" - "&충<<充<<å¿ <<沖<<蟲<<衝<<è¡·<<冲<<å¿¡<<珫" - "&췌<<悴<<膵<<萃<<贅<<惴<<揣<<疩<<瘁<<顇" - "&ì·¨<<取<<吹<<嘴<<娶<<å°±<<炊<<ç¿ <<聚<<脆<<臭<<趣<<醉<<驟<<é·²<<冣<<橇<<毳" - "&측<<側<<仄<<厠<<惻<<測<<廁<<昃" - "&층<<層" - "&치<<侈<<値<<嗤<<峙<<幟<<恥<<梔<<æ²»<<淄<<熾<<痔<<痴<<癡<<稚<<穉<<緇<<ç·»<<ç½®<<致<<蚩<<輜<<雉" - "<<馳<<齒<<卮<<哆<<寘<<å·µ<<畤<<痓<<絺<<菑<<薙<<褫<<豸<<è·±<<錙<<阤<<鯔<<鴙<<鴟<<鵄" - "&칙<<則<<勅<<飭<<敕" - "&친<<親<<櫬<<藽<<襯<<齔" - "&ì¹ <<七<<柒<<漆" - "&침<<ä¾µ<<寢<<枕<<沈<<浸<<琛<<ç §<<針<<鍼<<寖<<忱<<椹<<沉<<郴<<鋟<<駸" - "&칩<<蟄" - "&ì¹­<<秤<<稱" - "&쾌<<å¿«<<噲<<夬" - "&타<<他<<咤<<唾<<墮<<妥<<惰<<打<<拖<<朶<<楕<<舵<<陀<<馱<<駝<<佗<<垞<<拕<<柁<<æ©¢<<æ²±<<è©«<<跎" - "<<躱<<駞<<鮀<<鴕<<鼉" - "&탁<<倬<<卓<<啄<<坼<<托<<擢<<晫<<柝<<濁<<濯<<琢<<琸<<託<<鐸<<拆<<橐<<æ²°<<涿<<矺<<籜<<蘀<<踔" - "<<逴" - "&탄<<呑<<嘆<<坦<<彈<<憚<<歎<<灘<<炭<<綻<<誕<<憻<<攤<<殫<<癱<<驒" - "&탈<<奪<<脫<<ä¾»" - "&탐<<探<<眈<<耽<<貪<<嗿<<忐<<酖" - "&탑<<塔<<搭<<榻<<傝<<塌<<搨" - "&탕<<宕<<帑<<湯<<蕩<<燙<<盪<<碭<<蘯" - "&태<<兌<<台<<太<<怠<<態<<殆<<æ±°<<æ³°<<笞<<胎<<苔<<跆<<邰<<颱<<埭<<娧<<å­¡<<抬<<迨<<駄<<駘" - "&택<<擇<<澤" - "&탱<<撑<<撐<<牚" - "&터<<攄" - "&토<<兎<<吐<<土<<討" - "&톤<<噋<<噸<<瓲" - "&통<<慟<<桶<<痛<<筒<<çµ±<<通<<恫<<樋<<ç­©" - "&퇴<<堆<<槌<<腿<<褪<<退<<é ¹<<隤" - "&투<<偸<<套<<妬<<投<<透<<鬪<<妒<<渝<<骰" - "&퉁<<佟" - "&특<<慝<<特<<忒" - "&틈<<闖" - "&파<<坡<<婆<<å·´<<把<<播<<擺<<杷<<æ³¢<<æ´¾<<爬<<琶<<ç ´<<ç½·<<芭<<跛<<頗<<叵<<妑<<å²¥<<怕<<灞<<爸" - "<<玻<<皤<<笆<<ç°¸<<耙<<菠<<葩<<鄱" - "&판<<判<<坂<<板<<版<<瓣<<販<<辦<<鈑<<阪<<æ±´" - "&팔<<八<<叭<<捌<<朳<<汃" - "&패<<佩<<唄<<悖<<敗<<沛<<浿<<牌<<狽<<稗<<覇<<貝<<孛<<旆<<珮<<霈<<霸" - "&팽<<å½­<<澎<<烹<<膨<<ç °<<祊<<蟚<<蟛" - "&퍅<<愎" - "&편<<便<<偏<<扁<<片<<篇<<ç·¨<<ç¿©<<遍<<鞭<<騙<<匾<<徧<<惼<<ç·¶<<艑<<萹<<蝙<<褊<<諞" - "&폄<<貶<<ç ­<<窆" - "&평<<坪<<å¹³<<枰<<萍<<評<<怦<<抨<<泙<<苹<<蓱<<鮃" - "&폐<<吠<<嬖<<å¹£<<廢<<弊<<斃<<肺<<蔽<<閉<<陛<<敝<<狴<<獘<<癈" - "&포<<佈<<包<<匍<<匏<<咆<<哺<<圃<<布<<怖<<抛<<抱<<捕<<泡<<浦<<疱<<ç ²<<胞<<脯<<苞<<葡<<蒲<<袍" - "<<褒<<逋<<鋪<<飽<<鮑<<儤<<庖<<晡<<曓<<炮<<炰<<舖<<誧<<鉋<<鞄<<餔<<鯆" - "&폭<<幅<<暴<<曝<<瀑<<爆" - "&표<<俵<<剽<<彪<<慓<<杓<<標<<漂<<瓢<<票<<表<<è±¹<<飇<<飄<<驃<<僄<<勡<<嘌<<嫖<<摽<<殍<<熛<<縹" - "<<裱<<鏢<<鑣<<髟<<é°¾" - "&품<<品<<稟<<禀" - "&풍<<楓<<è«·<<豊<<風<<馮<<瘋<<葑" - "&피<<å½¼<<披<<疲<<皮<<被<<避<<陂<<詖<<辟<<鞁<<髲" - "&픽<<腷" - "&필<<匹<<å¼¼<<必<<泌<<珌<<畢<<疋<<筆<<苾<<馝<<佖<<咇<<æ»­<<篳<<ç½¼<<蓽<<觱<<蹕<<鞸<<韠<<駜<<鵯" - "&핍<<乏<<逼<<偪" - "&하<<下<<何<<厦<<夏<<廈<<昰<<æ²³<<瑕<<荷<<蝦<<賀<<遐<<霞<<鰕<<呀<<嚇<<岈<<懗<<煆<<瘕<<罅<<鍜" - "&학<<壑<<å­¸<<虐<<謔<<鶴<<狢<<瘧<<皬<<ç¡®<<郝<<é·½" - "&한<<寒<<恨<<悍<<旱<<汗<<æ¼¢<<æ¾£<<瀚<<罕<<ç¿°<<閑<<閒<<限<<韓<<僩<<嫺<<å«»<<捍<<暵<<閈<<駻<<é·³" - "<<é¼¾" - "&할<<割<<轄<<瞎" - "&함<<函<<含<<咸<<啣<<喊<<檻<<涵<<緘<<艦<<銜<<陷<<é¹¹<<莟<<菡<<è«´<<轞<<闞" - "&합<<合<<哈<<盒<<蛤<<閤<<闔<<陜<<匌<<嗑<<柙<<榼<<溘<<盍<<郃" - "&항<<亢<<伉<<姮<<嫦<<å··<<恒<<抗<<杭<<桁<<沆<<港<<缸<<肛<<航<<項<<夯<<恆<<炕<<缿<<頏" - "&해<<亥<<偕<<咳<<垓<<奚<<å­©<<害<<懈<<楷<<æµ·<<瀣<<蟹<<解<<該<<諧<<邂<<駭<<骸<<咍<<嶰<<廨<<欬" - "<<獬<<瑎<<痎<<薤<<醢<<é ¦<<é®­" - "&핵<<劾<<æ ¸<<ç¿®<<覈" - "&행<<倖<<幸<<杏<<荇<<行<<悻" - "&향<<享<<向<<嚮<<珦<<鄕<<響<<餉<<饗<<香<<薌" - "&허<<噓<<墟<<虛<<許<<歔" - "&헌<<憲<<櫶<<獻<<軒<<巚<<å¹°<<攇" - "&헐<<歇" - "&험<<險<<驗<<嶮<<獫<<玁" - "&혁<<奕<<爀<<赫<<革<<弈<<æ´«<<焱<<鬩" - "&현<<俔<<å³´<<弦<<懸<<晛<<泫<<炫<<玄<<玹<<現<<眩<<睍<<絃<<çµ¢<<縣<<舷<<衒<<è³¢<<鉉<<顯<<儇<<嬛" - "<<昡<<琄<<痃<<県<<繯<<翾<<蜆<<誢<<鋗<<駽" - "&혈<<孑<<ç©´<<血<<頁<<絜<<趐" - "&혐<<嫌" - "&협<<ä¿ <<協<<夾<<å³½<<挾<<æµ¹<<狹<<脅<<脇<<莢<<鋏<<é °<<匧<<叶<<埉<<恊<<悏<<愜<<篋" - "&형<<亨<<兄<<刑<<型<<å½¢<<泂<<滎<<瀅<<灐<<炯<<熒<<珩<<瑩<<荊<<螢<<è¡¡<<逈<<邢<<鎣<<馨<<夐<<娙" - "<<詗<<è¿¥<<陘" - "&혜<<兮<<彗<<惠<<慧<<暳<<蕙<<蹊<<醯<<鞋<<傒<<嘒<<寭<<徯<<槥<<盻<<謑<<è­¿" - "&호<<乎<<互<<呼<<壕<<壺<<好<<å²µ<<弧<<戶<<扈<<昊<<晧<<毫<<浩<<淏<<湖<<滸<<澔<<æ¿ <<æ¿©<<灝<<狐" - "<<琥<<瑚<<瓠<<皓<<祜<<糊<<縞<<胡<<芦<<葫<<蒿<<虎<<號<<蝴<<è­·<<豪<<鎬<<頀<<é¡¥<<儫<<冱<<嘷<<" - "å«­<<å«®<<怙<<沍<<滈<<滬<<犒<<猢<<皜<<皞<<箎<<聕<<醐<<餬<<鬍" - "&혹<<惑<<或<<酷" - "&혼<<婚<<昏<<æ··<<渾<<琿<<魂<<圂<<惛<<溷<<焜<<閽" - "&홀<<忽<<惚<<笏<<囫" - "&홍<<哄<<弘<<汞<<泓<<æ´ª<<烘<<紅<<虹<<訌<<é´»<<晎<<澒<<篊<<鉷<<鬨" - "&화<<化<<和<<嬅<<樺<<火<<畵<<禍<<禾<<花<<華<<話<<譁<<貨<<靴<<ä¿°<<嘩<<婲<<擭<<畫<<驊<<é¾¢" - "&확<<擴<<攫<<確<<碻<<ç©«<<矍<<矡<<礭<<鑊" - "&환<<丸<<喚<<奐<<宦<<å¹»<<患<<換<<æ­¡<<晥<<桓<<渙<<煥<<環<<紈<<還<<é©©<<é°¥<<寰<<懽<<擐<<瓛<<皖" - "<<睆<<絙<<è±¢<<轘<<鍰<<鐶<<鬟" - "&활<<æ´»<<滑<<猾<<豁<<闊<<蛞" - "&황<<凰<<幌<<徨<<恍<<惶<<愰<<慌<<晃<<晄<<榥<<況<<湟<<滉<<æ½¢<<煌<<璜<<皇<<篁<<ç°§<<荒<<蝗<<遑" - "<<隍<<黃<<喤<<媓<<怳<<瑝<<肓<<貺<<鎤" - "&회<<匯<<回<<å»»<<徊<<恢<<悔<<懷<<晦<<會<<檜<<æ·®<<æ¾®<<灰<<獪<<繪<<膾<<茴<<蛔<<誨<<賄<<佪<<栃" - "<<洄<<滙<<盔<<詼<<è¿´<<é ®<<é± " - "&획<<劃<<獲<<嚄" - "&횡<<宖<<æ©«<<鐄<<澋<<鈜<<黌" - "&효<<哮<<嚆<<孝<<效<<斅<<曉<<梟<<涍<<淆<<爻<<肴<<酵<<驍<<傚<<囂<<å´¤<<殽<<熇<<皛<<虓<<餚" - "&후<<侯<<候<<厚<<后<<吼<<喉<<嗅<<帿<<後<<朽<<煦<<珝<<逅<<吽<<喣<<垕<<å  <<涸<<猴<<篌<<è©¡<<譃" - "<<酗<<餱" - "&훈<<勛<<勳<<塤<<壎<<焄<<熏<<燻<<薰<<訓<<暈<<曛<<爋<<獯<<纁<<葷<<鑂" - "&훌<<欻" - "&훙<<薨" - "&훤<<喧<<暄<<煊<<萱<<烜<<è« <<諼" - "&훼<<卉<<喙<<毁<<燬<<芔<<虫<<虺" - "&휘<<彙<<å¾½<<揮<<暉<<煇<<諱<<輝<<麾<<撝<<翬" - "&휴<<休<<携<<烋<<畦<<虧<<咻<<擕<<隳<<髹<<鵂" - "&휼<<恤<<譎<<é·¸<<卹" - "&흉<<兇<<凶<<匈<<æ´¶<<胸<<恟<<胷" - "&흑<<黑" - "&흔<<昕<<欣<<炘<<痕<<很<<å¿»<<掀<<焮<<訢<<釁" - "&흘<<吃<<å±¹<<紇<<訖<<仡<<汔<<疙<<迄<<齕" - "&흠<<欠<<欽<<歆<<廞" - "&흡<<吸<<恰<<æ´½<<翕<<噏<<歙<<潝<<翖" - "&흥<<興" - "&희<<僖<<凞<<喜<<噫<<囍<<姬<<嬉<<希<<憙<<憘<<戱<<晞<<曦<<熙<<熹<<熺<<犧<<禧<<稀<<ç¾²<<咥<<唏" - "<<嘻<<悕<<戲<<暿<<欷<<燹<<爔<<豨<<餼" - "&힐<<è©°<<犵<<纈<<襭<<é ¡<<é» " - } - Version{"2.1"} - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/ko.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/collation/ko.xml + */ +ko{ + Version{"1.20"} + collations{ + standard{ + Sequence{ + "[optimize [가-각간갇-갊감-갗같-객갠갤갬-ê°­ê°¯-갱갸-갹갼걀걋걍걔걘걜거-걱건걷-걸걺검-겁것-겆겉-게겐겔겜-겝겟-겡겨" + "-겪견겯-결겸-겹겻-경곁계곈곌곕곗고-곡곤곧-골곪곬곯-곱곳공-곶과-곽관괄괆괌-괍괏광괘괜괠괩괬-ê´­ê´´-괵괸괼굄-굅굇굉교굔굘굡굣구" + "-êµ­êµ°êµ³-굶굻-굽굿궁-궂궈-궉권궐궜-궝궤궷귀-귁귄귈귐-귑귓규균귤그-극근귿-긁금-급긋긍긔기-긱긴긷-길긺김-깁깃깅-깆깊까-깎깐" + "깔깖깜-깝깟-깡깥깨-깩깬깰깸-깹깻-깽꺄-꺅꺌꺼-꺾껀껄껌-껍껏-껑께-껙껜껨껫껭껴껸껼꼇-꼈꼍꼐꼬-꼭꼰꼲꼴꼼-꼽꼿꽁-꽃꽈-꽉꽐꽜" + "-꽝꽤-꽥꽹꾀꾄꾈꾐-꾑꾕꾜꾸-꾹꾼꿀꿇-꿉꿋꿍-꿎꿔꿜꿨-ê¿©ê¿°-꿱꿴꿸뀀-뀁뀄뀌뀐뀔뀜-뀝뀨끄-끅끈끊끌끎끓-끕끗끙끝끼-끽낀낄낌-낍" + "낏낑나-낚난낟-낢남-납낫-낯낱낳-낵낸낼냄-냅냇-냉냐-냑냔냘냠냥너-넉넋-넌널넒-넓넘-넙넛-넝넣-넥넨넬넴-넵넷-넹녀-녁년녈념-" + "녑녔-녕녘녜녠노-녹논놀놂놈-놉놋농높-놔놘놜놨뇌뇐뇔뇜-뇝뇟뇨-뇩뇬뇰뇹뇻뇽누-눅눈눋-눌눔-눕눗눙눠눴눼뉘뉜뉠뉨-뉩뉴-뉵뉼늄-늅늉" + "느-늑는늘-늚늠-늡늣능-늦늪늬늰늴니-닉닌닐닖님-닙닛닝닢다-닦단닫-닯닳-답닷-닻닿-댁댄댈댐-댑댓-댕댜더-덖던덛-덜덞-덟덤-덥" + "덧덩덫덮데-덱덴델뎀-뎁뎃-뎅뎌뎐뎔뎠-뎡뎨뎬도-독돈돋-돌돎돐돔-돕돗동돛돝돠돤돨돼됐되된될됨-됩됫됴두-둑둔둘둠-둡둣둥둬뒀뒈뒝뒤뒨" + "뒬뒵뒷뒹듀듄듈듐듕드-득든듣-들듦듬-듭듯등듸디-딕딘딛-딜딤-딥딧-딪따-딱딴딸땀-땁땃-땅땋-땍땐땔땜-땝땟-땡떠-떡떤떨떪-떫떰-" + "떱떳-떵떻-떽뗀뗄뗌-뗍뗏-뗑뗘뗬또-똑똔똘똥똬똴뙈뙤뙨뚜-뚝뚠뚤뚫-뚬뚱뛔뛰뛴뛸뜀-뜁뜅뜨-뜩뜬뜯-뜰뜸-뜹뜻띄띈띌띔-띕띠띤띨띰-띱" + "띳띵라-락란랄람-랍랏-랒랖-랙랜랠램-랩랫-랭랴-략랸럇량러-럭런럴럼-럽럿-렁렇-렉렌렐렘-렙렛렝려-력련렬렴-렵렷-령례롄롑롓로-" + "록론롤롬-롭롯롱롸롼뢍뢨뢰뢴뢸룀-룁룃룅료룐룔룝룟룡루-룩룬룰룸-룹룻룽뤄뤘뤠뤼-뤽륀륄륌륏륑류-륙륜률륨-륩륫륭르-륵른를름-릅릇릉-" + "릊릍-릎리-릭린릴림-립릿링마-막만많-맒맘-맙맛망-맞맡맣-맥맨맬맴-맵맷-맺먀-먁먈먕머-먹먼멀멂멈-멉멋멍-멎멓-멕멘멜멤-멥멧-" + "ë©©ë©°-멱면멸몃-명몇몌모-목몫-몬몰몲몸-몹못몽뫄뫈뫘-뫙뫼묀묄묍묏묑묘묜묠묩묫무-묶문묻-묾뭄-뭅뭇뭉뭍뭏-뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴" + "뮷므믄믈믐믓미-믹민믿-밀밂밈-밉밋-밍및밑바-반받-밟밤-밥밧방밭배-백밴밸뱀-뱁뱃-뱅뱉뱌-뱍뱐뱝버-벅번벋-벌벎범-법벗벙-벚베-" + "벡벤벧-벨벰-벱벳-벵벼-벽변별볍볏-병볕볘볜보-볶본볼봄-봅봇봉봐봔봤봬뵀뵈-뵉뵌뵐뵘-뵙뵤뵨부-북분붇-붊붐-붑붓붕붙-붚붜붤붰붸뷔" + "-뷕뷘뷜뷩뷰뷴뷸븀븃븅브-븍븐블븜-븝븟비-빅빈빌빎빔-빕빗빙-빛빠-빡빤빨빪빰-빱빳-빵빻-빽뺀뺄뺌-뺍뺏-뺑뺘-뺙뺨뻐-뻑뻔뻗-뻘뻠" + "뻣-뻥뻬뼁뼈-뼉뼘-뼙뼛-뼝뽀-뽁뽄뽈뽐-뽑뽕뾔뾰뿅뿌-뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨-쁩삐-삑삔삘삠-삡삣삥사-삭삯-산삳-삶삼-삽삿-상샅" + "새-색샌샐샘-샙샛-생샤-샥샨샬샴-샵샷샹섀섄섈섐섕서-선섣-설섦-섧섬-섭섯-성섶세-섹센셀셈-셉셋-셍셔-셕션셜셤-셥셧-셩셰셴셸솅" + "소-솎손솔솖솜-솝솟송솥솨-솩솬솰솽쇄쇈쇌쇔쇗-쇘쇠쇤쇨쇰-쇱쇳쇼-쇽숀숄숌-숍숏숑수-숙순숟-술숨-숩숫숭숯숱-숲숴쉈쉐-쉑쉔쉘쉠쉥쉬" + "-쉭쉰쉴쉼-쉽쉿슁슈-슉슐슘슛슝스-슥슨슬-슭슴-습슷승시-식신싣-실싫-십싯싱싶싸-싹싻-싼쌀쌈-쌉쌌-쌍쌓-쌕쌘쌜쌤-쌥쌨-쌩썅써-" + "썩썬썰썲썸-썹썼-썽쎄쎈쎌쏀쏘-쏙쏜쏟-쏠쏢쏨-쏩쏭쏴-쏵쏸쐈쐐쐤쐬쐰쐴쐼-쐽쑈쑤-쑥쑨쑬쑴-쑵쑹쒀쒔쒜쒸쒼쓩쓰-쓱쓴쓸쓺쓿-씁씌씐씔씜" + "씨-씩씬씰씸-씹씻씽아-악안-않알-앎앓-압앗-앙앝-앞애-액앤앨앰-앱앳-앵야-약얀얄얇얌-얍얏양얕얗-얘얜얠얩어-억언-얹얻-얾엄-" + "엊엌엎에-엑엔엘엠-엡엣엥여-엮연열엶-엷염-영옅-예옌옐옘-옙옛-옜오-옥온올-옮옰옳-옵옷옹옻와-왁완왈왐-왑왓-왕왜-왝왠왬왯왱외" + "-왹왼욀욈-욉욋욍요-욕욘욜욤-욥욧용우-욱운울-욺움-웁웃웅워-웍원월웜-웝웠-웡웨-웩웬웰웸-웹웽위-윅윈윌윔-윕윗윙유-육윤율윰-" + "윱윳융윷으-윽은을읊음-읍읏응-의읜읠읨읫이-익인일-읾잃-입잇-잊잎자-작잔잖-잘잚잠-잡잣-잦재-잭잰잴잼-잽잿-쟁쟈-쟉쟌쟎쟐쟘쟝" + "쟤쟨쟬저-적전절젊점-접젓정-젖제-젝젠젤젬-젭젯젱져젼졀졈-졉졌-졍졔조-족존졸졺좀-좁좃종-좇좋-좍좔좝좟좡좨좼-좽죄죈죌죔-죕죗죙" + "죠-죡죤죵주-죽준줄-줆줌-줍줏중줘줬줴쥐-쥑쥔쥘쥠-쥡쥣쥬쥰쥴쥼즈-즉즌즐즘-즙즛증지-직진짇-질짊짐-집짓징-짖짙-짚짜-짝짠짢짤짧" + "짬-짭짯-짱째-짹짼쨀쨈-쨉쨋-쨍쨔쨘쨩쩌-쩍쩐쩔쩜-쩝쩟-쩡쩨쩽쪄쪘쪼-쪽쫀쫄쫌-쫍쫏쫑쫓쫘-쫙쫠쫬쫴쬈쬐쬔쬘쬠-쬡쭁쭈-쭉쭌쭐쭘-쭙" + "쭝쭤쭸-쭹쮜쮸쯔쯤쯧쯩찌-찍찐찔찜-찝찡-찢찧-착찬찮찰참-찹찻-찾채-책챈챌챔-챕챗-챙챠챤챦챨챰챵처-척천철첨-첩첫-ì²­ì²´-첵첸첼쳄" + "-쳅쳇쳉쳐쳔쳤쳬쳰촁초-촉촌촐촘-촙촛총촤촨촬촹최쵠쵤쵬-쵭쵯쵱쵸춈추-축춘출춤-춥춧충춰췄췌췐취췬췰췸-췹췻췽츄츈츌츔츙츠-측츤츨츰-" + "츱츳층치-칙친칟-칡침-칩칫칭카-칵칸칼캄-캅캇캉캐-캑캔캘캠-캡캣-캥캬-캭컁커-컥컨컫-컬컴-컵컷-컹케-켁켄켈켐-켑켓켕켜켠켤켬-" + "켭켯-켱켸코-콕콘콜콤-콥콧콩콰-콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠-쿡쿤쿨쿰-쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴-퀵퀸퀼큄-큅큇큉큐큔큘큠크-큭큰클큼-큽킁키-" + "킥킨킬킴-킵킷킹타-탁탄탈-탉탐-탑탓-탕태-택탠탤탬-탭탯-탱탸턍터-턱턴털턺텀-텁텃-텅테-텍텐텔템-텝텟텡텨텬텼톄톈토-톡톤톨톰-" + "톱톳통톺톼퇀퇘퇴퇸툇툉툐투-툭툰툴툼-툽툿퉁퉈퉜퉤튀-튁튄튈튐-튑튕튜튠튤튬튱트-특튼튿-틀틂틈-틉틋틔틘틜틤-틥티-틱틴틸팀-팁팃팅파" + "-팎판팔팖팜-팝팟-팡팥패-팩팬팰팸-팹팻-팽퍄-퍅퍼-퍽펀펄펌-펍펏-펑페-펙펜펠펨-펩펫펭펴편펼폄-폅폈-평폐폘폡폣포-폭폰폴폼-폽" + "폿퐁퐈퐝푀푄표푠푤푭푯푸-푹푼푿-풀풂품-풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔-픕픗피-픽핀필핌-핍핏핑하-학한할핥함-합핫항해-핵" + "핸핼햄-햅햇-행햐향허-헉헌헐헒험-헙헛헝헤-헥헨헬헴-헵헷헹혀-혁현혈혐-협혓-형혜혠혤혭호-혹혼홀홅홈-홉홋홍홑화-확환활홧황홰-홱" + "홴횃횅회-획횐횔횝횟횡효횬횰횹횻후-훅훈훌훑훔훗훙훠훤훨훰훵훼-훽휀휄휑휘-휙휜휠휨-휩휫휭휴-휵휸휼흄흇흉흐-흑흔흖-흙흠-흡흣흥흩희" + "흰흴흼-흽힁히-힉힌힐힘-힙힛힝] ]" + "&가<<ä¼½<<ä½³<<假<<價<<加<<可<<呵<<哥<<嘉<<嫁<<家<<暇<<架<<枷<<柯<<歌<<珂<<痂<<稼<<苛<<茄<<街" + "<<袈<<訶<<賈<<跏<<è»»<<迦<<駕<<ä»®<<傢<<咖<<哿<<坷<<宊<<斝<<榎<<檟<<珈<<笳<<耞<<舸<<葭<<謌" + "&각<<刻<<却<<各<<恪<<慤<<殼<<珏<<脚<<覺<<角<<閣<<卻<<咯<<埆<<搉<<擱<<æ¡·" + "&간<<侃<<刊<<墾<<奸<<姦<<å¹²<<å¹¹<<懇<<揀<<杆<<柬<<æ¡¿<<澗<<癎<<看<<磵<<稈<<ç«¿<<ç°¡<<肝<<艮<<艱" + "<<è««<<間<<偘<<慳<<栞<<榦<<玕<<秆<<茛<<衎<<赶<<迀<<齦" + "&갈<<乫<<喝<<曷<<渴<<碣<<ç«­<<葛<<褐<<蝎<<鞨<<噶<<楬<<秸<<羯<<蠍<<鶡" + "&감<<勘<<坎<<å ª<<嵌<<感<<憾<<戡<<敢<<柑<<橄<<減<<甘<<疳<<監<<瞰<<ç´º<<邯<<鑑<<鑒<<龕<<坩<<埳" + "<<嵁<<弇<<憨<<撼<<欿<<歛<<泔<<æ·¦<<澉<<矙<<轗<<酣<<é¹»" + "&갑<<匣<<岬<<甲<<胛<<鉀<<閘<<韐" + "&강<<剛<<堈<<姜<<岡<<崗<<康<<强<<彊<<慷<<江<<畺<<疆<<ç³ <<çµ³<<綱<<羌<<腔<<舡<<薑<<襁<<講<<鋼" + "<<降<<鱇<<傋<<僵<<壃<<忼<<扛<<杠<<æ©¿<<æ®­<<矼<<穅<<繈<<罡<<羗<<羫<<茳<<豇<<韁" + "&개<<介<<ä»·<<個<<凱<<塏<<愷<<愾<<慨<<改<<槪<<漑<<疥<<皆<<盖<<箇<<芥<<蓋<<鎧<<開<<剴<<匃<<揩" + "<<槩<<玠<<磕<<闓" + "&객<<喀<<客" + "&ê°±<<坑<<ç²³<<ç¾¹<<硜<<賡<<鏗" + "&ê°¹<<醵" + "&ê±°<<倨<<去<<居<<å·¨<<拒<<据<<據<<擧<<渠<<炬<<祛<<距<<踞<<遽<<鉅<<鋸<<呿<<昛<<秬<<ç­¥<<籧<<胠" + "<<腒<<苣<<莒<<蕖<<蘧<<袪<<裾<<駏" + "&ê±´<<ä¹¾<<件<<健<<å·¾<<建<<愆<<楗<<腱<<虔<<蹇<<鍵<<騫<<揵<<犍<<睷<<褰<<謇<<鞬" + "&걸<<乞<<傑<<杰<<桀<<乬<<朅<<榤" + "&검<<儉<<劍<<劒<<檢<<瞼<<鈐<<黔<<撿<<芡" + "&겁<<劫<<怯<<迲<<刦<<刧" + "&게<<偈<<憩<<揭" + "&격<<擊<<æ ¼<<檄<<激<<膈<<覡<<隔<<挌<<毄<<闃<<骼<<鬲<<鴃" + "&견<<堅<<牽<<犬<<甄<<çµ¹<<ç¹­<<肩<<見<<è­´<<遣<<鵑<<樫<<狷<<畎<<ç­§<<縳<<ç¹¾<<羂<<è ²<<é°¹" + "&ê²°<<抉<<決<<潔<<結<<缺<<訣<<玦<<觖<<闋" + "&겸<<兼<<慊<<箝<<謙<<鉗<<鎌<<傔<<嗛<<岒<<拑<<歉<<縑<<蒹<<黚<<鼸" + "&ê²½<<京<<俓<<倞<<傾<<儆<<勁<<勍<<卿<<坰<<境<<庚<<徑<<慶<<憬<<擎<<敬<<景<<暻<<更<<梗<<涇<<炅" + "<<烱<<璟<<璥<<瓊<<痙<<硬<<磬<<竟<<競<<絅<<經<<耕<<耿<<脛<<莖<<è­¦<<輕<<逕<<鏡<<頃<<é ¸<<驚<<" + "鯨<<冏<<剄<<哽<<惸<<憼<<扃<<檠<<煢<<焭<<熲<<畊<<竸<<綆<<顈<<罄<<褧<<謦<<駉<<鯁<<黥" + "&계<<係<<啓<<å º<<契<<å­£<<屆<<悸<<戒<<桂<<械<<棨<<溪<<界<<癸<<磎<<稽<<ç³»<<繫<<ç¹¼<<計<<誡<<è°¿" + "<<階<<鷄<<å ¦<<烓<<瘈<<禊<<筓<<綮<<縘<<ç½½<<葪<<薊<<雞<<é«»" + "&ê³ <<古<<叩<<告<<呱<<固<<姑<<å­¤<<å°»<<庫<<拷<<攷<<故<<敲<<暠<<枯<<槁<<æ²½<<痼<<皐<<睾<<稿<<羔" + "<<考<<股<<膏<<苦<<苽<<菰<<藁<<è ±<<袴<<誥<<辜<<錮<<雇<<顧<<高<<鼓<<ä¼°<<凅<<刳<<塙<<杲<<æ ²<<" + "槀<<槹<<櫜<<牯<<皋<<盬<<瞽<<稁<<箍<<篙<<糕<<罟<<羖<<翺<<胯<<觚<<詁<<郜<<酤<<鈷<<靠<<é´£<<é·±" + "&곡<<哭<<斛<<曲<<梏<<穀<<è°·<<éµ <<嚳<<槲<<縠<<觳<<轂" + "&곤<<困<<坤<<崑<<昆<<梱<<棍<<滾<<琨<<袞<<鯤<<堃<<崐<<悃<<捆<<緄<<è¡®<<裍<<褌<<錕<<閫<<é«¡<<éµ¾" + "<<鶤<<齫" + "&골<<汨<<骨<<搰<<榾<<矻<<鶻" + "&ê³µ<<供<<公<<共<<功<<孔<<å·¥<<恐<<恭<<拱<<控<<攻<<珙<<空<<蚣<<è²¢<<鞏<<倥<<崆<<悾<<æ ±<<槓<<箜" + "<<蛩<<蛬<<贛<<è·«<<釭<<龔" + "&곶<<串" + "&ê³¼<<寡<<戈<<果<<瓜<<科<<菓<<誇<<課<<è·¨<<過<<鍋<<顆<<侉<<堝<<夥<<夸<<撾<<猓<<稞<<窠<<蝌<<裹" + "<<踝<<銙<<騍" + "&ê³½<<廓<<槨<<藿<<郭<<椁<<癨<<躩<<霍<<鞹" + "&관<<冠<<官<<寬<<慣<<棺<<款<<灌<<琯<<瓘<<管<<罐<<菅<<觀<<貫<<關<<館<<丱<<涫<<爟<<盥<<祼<<窾" + "<<ç­¦<<綰<<輨<<錧<<鑵<<雚<<é¡´<<髖<<鸛" + "&괄<<刮<<恝<<括<<适<<佸<<栝<<筈<<聒<<髺<<é´°" + "&광<<侊<<光<<匡<<壙<<廣<<曠<<æ´¸<<炚<<狂<<珖<<筐<<胱<<鑛<<恇<<桄<<框<<爌<<獷<<磺<<絖<<纊<<茪" + "<<誆<<誑" + "&괘<<卦<<掛<<罫<<咼<<挂<<ç½£<<è©¿" + "&ê´´<<乖<<傀<<塊<<壞<<怪<<愧<<拐<<槐<<魁<<媿<<廥<<恠<<瑰<<璝<<蒯<<襘" + "&ê´µ<<馘" + "&굉<<宏<<紘<<肱<<轟<<浤<<觥<<訇<<閎" + "&교<<交<<僑<<咬<<喬<<嬌<<嶠<<å·§<<攪<<敎<<æ ¡<<橋<<狡<<皎<<矯<<絞<<翹<<膠<<蕎<<蛟<<較<<轎<<郊" + "<<餃<<驕<<鮫<<ä½¼<<嘄<<嘐<<噭<<嚙<<姣<<憍<<撟<<晈<<暞<<榷<<磽<<窖<<趫<<è¹»<<鉸<<骹<<鵁<<齩" + "&구<<丘<<久<<九<<仇<<俱<<具<<勾<<區<<口<<句<<咎<<嘔<<坵<<垢<<寇<<嶇<<廐<<懼<<拘<<救<<枸<<柩" + "<<構<<歐<<毆<<毬<<求<<溝<<灸<<狗<<玖<<球<<瞿<<矩<<究<<絿<<耉<<臼<<舅<<舊<<苟<<è¡¢<<謳<<è³¼<<" + "軀<<逑<<邱<<鉤<<銶<<駒<<驅<<鳩<<鷗<<龜<<佉<<佝<<俅<<傴<<冓<<劬<<匶<<厹<<叴<<坸<<姤<<媾<<嫗<" + "<屨<<å²£<<彀<<戵<<扣<<捄<<搆<<摳<<昫<<榘<<漚<<璆<<甌<<疚<<痀<<癯<<窛<<窶<<篝<<糗<<胊<<蒟<<蚯" + "<<裘<<覯<<詬<<遘<<釦<<韝<<韭<<韮<<颶<<駈<<鬮<<鷇<<鸜" + "&êµ­<<國<<局<<菊<<鞠<<鞫<<麴<<匊<<掬<<è·¼<<麯" + "&êµ°<<君<<窘<<群<<裙<<軍<<郡<<捃<<桾<<皸" + "&êµ´<<堀<<屈<<掘<<窟<<倔<<崛<<淈<<詘" + "&궁<<å®®<<弓<<穹<<窮<<芎<<躬<<躳" + "&권<<倦<<券<<勸<<卷<<圈<<拳<<捲<<權<<淃<<眷<<勌<<惓<<棬<<睠<<綣<<蜷" + "&궐<<厥<<獗<<蕨<<蹶<<闕" + "&궤<<机<<櫃<<æ½°<<è©­<<軌<<饋<<ä½¹<<几<<劂<<匱<<憒<<撅<<樻<<æ°¿<<簋<<ç¹¢<<è·ª<<闠<<餽<<麂" + "&귀<<晷<<æ­¸<<è²´<<鬼" + "&규<<叫<<圭<<奎<<揆<<槻<<珪<<硅<<窺<<竅<<ç³¾<<葵<<規<<èµ³<<逵<<閨<<刲<<å«¢<<嬀<<巋<<暌<<楏<<樛" + "<<潙<<睽<<糺<<虬<<虯<<è·¬<<邽<<闚<<頍<<馗" + "&ê· <<勻<<均<<畇<<ç­ <<菌<<鈞<<囷<<麏" + "&ê·¤<<橘" + "&ê·¹<<克<<剋<<劇<<戟<<棘<<極<<隙<<亟<<尅<<屐<<郄" + "&ê·¼<<僅<<劤<<勤<<懃<<斤<<æ ¹<<槿<<瑾<<筋<<芹<<菫<<覲<<謹<<近<<饉<<卺<<厪<<墐<<å·¹<<廑<<漌<<觔" + "<<跟<<釿<<靳" + "&금<<今<<妗<<擒<<昑<<檎<<琴<<禁<<禽<<芩<<衾<<è¡¿<<襟<<錦<<唫<<噤<<嶔<<笒<<黅" + "&급<<伋<<及<<急<<扱<<æ±²<<級<<給<<圾<<岌<<皀<<礏<<笈<<芨" + "&긍<<亘<<兢<<矜<<肯<<亙<<殑" + "&기<<企<<伎<<其<<冀<<嗜<<器<<圻<<基<<埼<<夔<<奇<<妓<<寄<<岐<<崎<<å·±<<å¹¾<<忌<<技<<旗<<旣<<朞" + "<<期<<杞<<棋<<棄<<機<<欺<<æ°£<<æ±½<<沂<<淇<<玘<<琦<<琪<<璂<<璣<<畸<<畿<<碁<<磯<<祁<<祇<<祈<<" + "祺<<箕<<紀<<綺<<羈<<耆<<耭<<肌<<記<<譏<<豈<<èµ·<<錡<<錤<<飢<<饑<<騎<<騏<<é©¥<<麒<<僛<<剞<<墍<" + "<屺<<庋<<弃<<å¿®<<愭<<掎<<攲<<旂<<暣<<曁<<棊<<æ­§<<炁<<猉<<禨<<綥<<綦<<羇<<肵<<芪<<芰<<蘄<<虁" + "<<蜝<<蟣<<覉<<覬<<跂<<隑<<頎<<鬐<<é°­<<黖" + "&긴<<緊" + "&길<<佶<<吉<<拮<<桔<<姞<<蛣" + "&김<<金" + "&끽<<喫" + "&나<<儺<<娜<<懦<<拏<<拿<<那<<挐<<挪<<梛<<ç³¥<<糯" + "&낙<<諾" + "&난<<暖<<煖<<難<<偄<<煗<<赧<<餪" + "&날<<捏<<捺" + "&남<<南<<枏<<楠<<æ¹³<<男<<喃<<柟" + "&납<<納<<衲" + "&낭<<囊<<娘<<曩" + "&내<<乃<<內<<奈<<柰<<耐<<匂<<奶<<嬭<<迺<<鼐" + "&녀<<女" + "&녁<<惄" + "&년<<å¹´<<撚<<秊<<碾" + "&념<<念<<恬<<拈<<捻" + "&녕<<寧<<寗<<佞<<儜<<嚀<<濘" + "&노<<努<<奴<<弩<<怒<<瑙<<駑<<呶<<å­¥<<å³±<<猱<<笯<<臑" + "&농<<濃<<膿<<è¾²<<儂<<噥<<ç© <<醲" + "&뇌<<惱<<腦<<餒" + "&뇨<<å°¿<<嫋<<嬲<<淖<<磠<<裊<<鐃" + "&누<<啂<<耨" + "&눈<<å«©" + "&눌<<訥<<吶<<肭" + "&뉴<<杻<<紐<<忸<<靵" + "&뉵<<衄" + "&능<<能" + "&니<<å°¼<<æ³¥<<呢<<怩<<柅<<祢<<禰<<膩" + "&닉<<匿<<溺<<昵<<暱" + "&다<<多<<茶<<爹" + "&단<<丹<<亶<<但<<單<<團<<壇<<彖<<斷<<旦<<檀<<段<<湍<<短<<端<<簞<<緞<<蛋<<袒<<鄲<<鍛<<慱<<担" + "<<椴<<漙<<癉<<耑<<胆<<腶<<蜑" + "&달<<撻<<æ¾¾<<獺<<疸<<達<<妲<<怛<<闥<<靼<<韃" + "&담<<啖<<坍<<憺<<擔<<曇<<æ·¡<<湛<<æ½­<<æ¾¹<<痰<<聃<<膽<<蕁<<覃<<談<<譚<<錟<<儋<<啗<<噉<<墰<<壜" + "<<毯<<禫<<罎<<薝<<郯<<é»®<<黵" + "&답<<沓<<畓<<答<<踏<<遝" + "&당<<唐<<堂<<塘<<å¹¢<<戇<<撞<<棠<<當<<糖<<螳<<黨<<倘<<儻<<党<<搪<<檔<<溏<<瑭<<璫<<瞠<<礑<<蟷" + "<<襠<<讜<<鏜<<鐺<<餳<<餹" + "&대<<代<<垈<<坮<<大<<對<<å²±<<帶<<待<<戴<<擡<<玳<<臺<<袋<<貸<<隊<<黛<<儓<<懟<<旲<<汏<<碓<<鐓" + "&댁<<宅" + "&덕<<å¾·<<悳" + "&도<<倒<<刀<<到<<圖<<å µ<<塗<<導<<å± <<島<<嶋<<度<<徒<<悼<<挑<<掉<<搗<<桃<<棹<<櫂<<淘<<渡<<滔" + "<<濤<<燾<<盜<<睹<<禱<<稻<<萄<<覩<<è³­<<è·³<<蹈<<逃<<途<<道<<都<<鍍<<陶<<韜<<叨<<壔<<å¼¢<<忉<<" + "慆<<掏<<搯<<擣<<檮<<æ´®<<涂<<稌<<菟<<酴<<闍<<鞀<<鞱<<饕<<鼗" + "&독<<毒<<瀆<<牘<<犢<<獨<<督<<禿<<篤<<纛<<讀<<櫝<<é»·" + "&돈<<墩<<惇<<敦<<旽<<暾<<沌<<焞<<燉<<豚<<頓<<å¼´<<潡<<躉" + "&돌<<ä¹­<<突<<咄<<堗" + "&동<<仝<<冬<<凍<<動<<同<<憧<<東<<桐<<棟<<洞<<æ½¼<<疼<<瞳<<ç«¥<<胴<<董<<銅<<侗<<僮<<哃<<垌<<峒" + "<<彤<<朣<<橦<<涷<<艟<<苳<<茼<<蕫<<蝀<<錬<<鮗" + "&두<<兜<<斗<<杜<<枓<<痘<<竇<<荳<<豆<<逗<<é ­<<抖<<斁<<肚<<脰<<蚪<<è ¹<<陡" + "&둔<<屯<<臀<<芚<<遁<<遯<<鈍<<窀<<迍" + "&둘<<乧" + "&득<<得" + "&등<<嶝<<橙<<燈<<登<<等<<藤<<謄<<鄧<<騰<<凳<<墱<<滕<<磴<<籐<<縢<<螣<<鐙" + "&라<<喇<<懶<<癩<<羅<<蘿<<螺<<裸<<邏<<倮<<囉<<曪<<瘰<<ç ¢<<臝<<鑼<<騾<<驘" + "&락<<洛<<烙<<珞<<絡<<落<<酪<<駱<<嗠<<犖" + "&란<<亂<<卵<<欄<<欒<<瀾<<爛<<蘭<<鸞<<嬾<<å¹±<<攔<<灓<<襴<<鑾<<闌" + "&랄<<剌<<è¾£<<埒<<è¾¢" + "&람<<嵐<<擥<<攬<<欖<<æ¿«<<籃<<纜<<藍<<襤<<覽<<婪<<惏" + "&랍<<拉<<臘<<蠟<<鑞" + "&랑<<廊<<朗<<浪<<狼<<琅<<瑯<<螂<<郞<<榔<<ç¡ <<稂<<莨<<蜋<<閬" + "&래<<來<<崍<<å¾ <<萊<<æ·¶<<騋" + "&랭<<冷" + "&략<<掠<<略<<畧" + "&량<<亮<<倆<<兩<<凉<<梁<<樑<<ç²®<<ç²±<<糧<<良<<諒<<輛<<量<<喨<<悢<<椋<<涼<<踉<<魎" + "&ë ¤<<侶<<儷<<勵<<呂<<廬<<慮<<戾<<旅<<櫚<<濾<<礪<<藜<<è £<<閭<<é©¢<<驪<<麗<<黎<<儢<<厲<<唳<<梠" + "<<癘<<ç³²<<膂<<臚<<è ¡<<邌<<鑢" + "&ë ¥<<力<<曆<<æ­·<<瀝<<礫<<è½¢<<靂<<攊<<櫟<<櫪<<癧<<è½£<<酈" + "&ë ¨<<憐<<戀<<攣<<æ¼£<<煉<<璉<<ç·´<<聯<<蓮<<輦<<連<<鍊<<孌<<楝<<湅<<臠<<鏈<<鰊<<é°±" + "&ë ¬<<冽<<列<<劣<<洌<<烈<<裂<<挒<<捩<<颲" + "&ë ´<<廉<<斂<<æ®®<<濂<<ç°¾<<奩<<瀲<<磏" + "&ë µ<<獵<<躐<<鬣" + "&ë ¹<<令<<伶<<囹<<岺<<嶺<<怜<<玲<<笭<<羚<<翎<<聆<<逞<<鈴<<零<<靈<<領<<齡<<另<<呤<<姈<<å²­<<昤" + "<<欞<<æ³ <<秢<<苓<<蛉<<軨<<鴒<<é¹·" + "&례<<例<<澧<<禮<<醴<<隷<<隸<<鱧" + "&로<<勞<<撈<<擄<<櫓<<潞<<瀘<<爐<<盧<<老<<蘆<<虜<<è·¯<<輅<<露<<é­¯<<é·º<<é¹µ<<壚<<æ»·<<玈<<癆<<窂" + "<<艪<<艫<<轤<<鐪<<鑪<<顱<<髗<<鱸<<鸕" + "&록<<碌<<祿<<綠<<菉<<錄<<鹿<<麓<<圥<<彔<<æ·¥<<漉<<簏<<轆<<騄" + "&ë¡ <<論" + "&롱<<壟<<弄<<朧<<瀧<<瓏<<ç± <<聾<<儱<<攏<<曨<<礱<<蘢<<隴<<龎" + "&뢰<<儡<<瀨<<牢<<磊<<賂<<賚<<è³´<<雷<<攂<<礌<<礧<<籟<<纇<<罍<<耒<<蕾<<誄<<酹<<顂" + "&료<<了<<僚<<寮<<廖<<料<<燎<<療<<瞭<<聊<<蓼<<遼<<鬧<<嘹<<嫽<<撩<<暸<<潦<<獠<<繚<<膋<<醪<<鐐" + "<<飂<<飉" + "&룡<<龍<<龒" + "&루<<壘<<婁<<å±¢<<樓<<淚<<漏<<瘻<<ç´¯<<縷<<蔞<<褸<<鏤<<陋<<僂<<嘍<<嶁<<慺<<耬<<螻<<髏" + "&류<<劉<<旒<<柳<<榴<<流<<溜<<瀏<<琉<<瑠<<留<<瘤<<ç¡«<<謬<<類<<橊<<縲<<纍<<遛<<鶹" + "&륙<<六<<戮<<陸<<勠" + "&륜<<侖<<倫<<崙<<æ·ª<<綸<<輪<<掄" + "&률<<律<<慄<<栗<<嵂<<溧" + "&륭<<隆<<癃<<窿" + "&륵<<勒<<肋<<泐" + "&름<<凜<<凛<<廩<<澟" + "&릉<<凌<<楞<<稜<<綾<<菱<<陵<<倰<<蔆" + "&리<<俚<<利<<厘<<吏<<唎<<å±¥<<悧<<李<<梨<<浬<<犁<<狸<<理<<璃<<痢<<籬<<ç½¹<<羸<<莉<<裏<<裡<<里" + "<<釐<<離<<鯉<<俐<<剺<<哩<<å« <<涖<<漓<<离<<莅<<蜊<<螭<<貍<<邐<<魑<<黐" + "&린<<吝<<æ½¾<<燐<<璘<<藺<<躪<<隣<<鱗<<麟<<嶙<<悋<<獜<<磷<<粦<<ç²¼<<繗<<躙<<轔<<鄰<<鏻<<驎" + "&림<<林<<淋<<琳<<臨<<霖<<痳" + "&립<<ç ¬<<立<<笠<<粒<<岦" + "&마<<摩<<瑪<<痲<<碼<<磨<<馬<<魔<<麻<<劘<<媽<<螞<<蟇<<麽<<麿" + "&막<<寞<<幕<<æ¼ <<膜<<莫<<邈<<瞙<<鏌" + "&만<<万<<卍<<娩<<巒<<彎<<慢<<挽<<晩<<曼<<滿<<漫<<灣<<瞞<<萬<<蔓<<è »<<輓<<饅<<é°»<<墁<<嫚<<幔" + "<<縵<<謾<<è¹£<<鏋<<鏝<<鬘" + "&말<<唜<<抹<<末<<沫<<茉<<襪<<靺<<帕<<秣" + "&망<<亡<<妄<<忘<<忙<<望<<網<<罔<<芒<<茫<<莽<<輞<<邙<<惘<<汒<<æ¼­<<莾<<蟒<<魍" + "&매<<埋<<妹<<媒<<寐<<昧<<枚<<梅<<每<<煤<<ç½µ<<è²·<<è³£<<邁<<魅<<呆<<楳<<沬<<玫<<眛<<苺<<莓<<酶" + "<<霉" + "&맥<<脈<<貊<<陌<<驀<<麥<<脉<<貃<<貘" + "&맹<<孟<<氓<<猛<<盲<<盟<<萌<<儚<<甍<<甿<<虻" + "&멱<<冪<<覓<<幎<<糸" + "&ë©´<<免<<冕<<勉<<棉<<沔<<眄<<眠<<綿<<ç·¬<<面<<麵<<俛<<湎<<糆<<緜<<麪" + "&멸<<滅<<蔑<<篾<<衊" + "&명<<冥<<名<<命<<明<<暝<<椧<<溟<<皿<<瞑<<茗<<蓂<<螟<<酩<<銘<<é³´<<æ´º" + "&몌<<袂" + "&모<<ä¾®<<冒<<募<<姆<<帽<<慕<<摸<<摹<<暮<<某<<模<<母<<毛<<牟<<牡<<瑁<<眸<<矛<<耗<<芼<<茅<<謀" + "<<謨<<貌<<侔<<姥<<媢<<å««<<恈<<旄<<皃<<眊<<粍<<ç³¢<<耄<<蝥<<蟊<<鉾<<髦" + "&목<<木<<沐<<牧<<目<<睦<<穆<<鶩<<凩<<苜" + "&몰<<æ­¿<<沒" + "&몽<<夢<<朦<<蒙<<幪<<懞<<曚<<溕<<濛<<瞢<<矇<<艨<<雺<<鸏" + "&묘<<卯<<墓<<妙<<廟<<描<<昴<<杳<<渺<<猫<<竗<<苗<<錨<<æ·¼<<眇<<藐<<貓" + "&무<<務<<å·«<<憮<<懋<<戊<<拇<<撫<<无<<楙<<æ­¦<<毋<<無<<珷<<畝<<繆<<舞<<茂<<蕪<<誣<<貿<<霧<<鵡" + "<<儛<<嘸<<廡<<膴<<騖" + "&묵<<墨<<默<<嘿" + "&문<<們<<刎<<吻<<問<<文<<汶<<紊<<紋<<聞<<蚊<<門<<雯<<匁<<悗<<懣<<抆<<捫<<炆<<璊" + "&물<<勿<<沕<<物" + "&미<<味<<媚<<å°¾<<嵋<<彌<<å¾®<<未<<梶<<楣<<渼<<湄<<眉<<ç±³<<美<<薇<<謎<<è¿·<<靡<<é»´<<亹<<娓<<媄" + "<<媺<<å¼¥<<å¼­<<敉<<瀰<<獼<<糜<<縻<<苿<<蘼<<麋" + "&민<<å²·<<悶<<愍<<憫<<敏<<旻<<旼<<民<<泯<<玟<<珉<<ç·¡<<閔<<忞<<忟<<暋<<æ¹£<<緍<<ç½ <<苠<<閩<<é°µ" + "<<黽" + "&밀<<密<<蜜<<謐<<樒<<滵" + "&박<<剝<<博<<拍<<搏<<撲<<朴<<樸<<泊<<珀<<璞<<箔<<粕<<縛<<膊<<舶<<薄<<è¿«<<雹<<駁<<亳<<欂<<牔" + "<<鎛<<駮<<髆" + "&반<<ä¼´<<半<<反<<叛<<拌<<搬<<攀<<斑<<槃<<æ³®<<潘<<班<<畔<<瘢<<盤<<盼<<磐<<磻<<礬<<絆<<般<<蟠" + "<<返<<頒<<飯<<媻<<扳<<搫<<攽<<朌<<胖<<螌<<頖" + "&발<<勃<<拔<<撥<<渤<<潑<<發<<跋<<醱<<鉢<<é«®<<魃<<哱<<浡<<脖<<鈸<<鵓" + "&ë°©<<倣<<傍<<坊<<妨<<å°¨<<幇<<å½·<<房<<放<<方<<旁<<昉<<枋<<榜<<滂<<磅<<ç´¡<<肪<<膀<<舫<<芳<<蒡" + "<<蚌<<訪<<謗<<邦<<防<<龐<<仿<<厖<<幫<<徬<<搒<<旊<<梆<<牓<<舽<<螃<<鎊<<é«£<<é­´" + "&ë°°<<倍<<俳<<培<<徘<<拜<<排<<杯<<湃<<焙<<盃<<背<<胚<<裴<<裵<<褙<<è³ <<輩<<配<<陪<<坏<<坯<<扒" + "<<琲<<蓓" + "&ë°±<<伯<<ä½°<<帛<<柏<<æ ¢<<白<<百<<魄<<粨" + "&번<<幡<<樊<<煩<<燔<<番<<繁<<蕃<<藩<<飜<<繙<<ç¿»<<膰<<蘩<<袢" + "&벌<<伐<<筏<<ç½°<<閥<<橃<<罸" + "&범<<凡<<帆<<梵<<æ°¾<<汎<<泛<<犯<<範<<范<<笵<<訉<<颿" + "&법<<法<<琺" + "&ë²½<<僻<<劈<<壁<<擘<<檗<<璧<<癖<<碧<<蘗<<闢<<霹<<擗<<甓<<疈<<襞<<é·¿<<鼊" + "&변<<卞<<弁<<變<<辨<<辯<<邊<<å¿­<<抃<<籩<<è¾®<<腁<<賆<<駢<<骿<<鴘" + "&별<<別<<瞥<<鱉<<鼈<<彆<<é·©" + "&병<<丙<<倂<<兵<<屛<<å¹·<<昞<<昺<<柄<<棅<<炳<<甁<<病<<秉<<竝<<輧<<餠<<騈<<並<<塀<<çµ£<<ç¼¾<<迸" + "<<鈵<<鋲<<鉼" + "&ë³´<<保<<å ¡<<å ±<<寶<<普<<æ­¥<<洑<<湺<<æ½½<<珤<<甫<<菩<<補<<褓<<譜<<輔<<俌<<盙<<ç° <<葆<<靌<<鴇" + "<<黼" + "&ë³µ<<伏<<僕<<匐<<卜<<宓<<復<<服<<福<<腹<<茯<<蔔<<複<<覆<<è¼¹<<è¼»<<馥<<鰒<<墣<<幞<<扑<<æ¿®<<箙" + "<<菔<<蝠<<蝮<<鵩" + "&본<<本" + "&ë³¼<<乶" + "&봉<<俸<<奉<<封<<峯<<å³°<<捧<<棒<<烽<<熢<<琫<<縫<<蓬<<蜂<<逢<<鋒<<é³³<<丰<<夆<<篷<<綘<<菶<<鴌" + "&부<<不<<付<<俯<<傅<<剖<<副<<否<<咐<<埠<<夫<<婦<<孚<<å­µ<<富<<府<<扶<<敷<<斧<<æµ®<<溥<<父<<符" + "<<ç°¿<<缶<<腐<<腑<<膚<<艀<<芙<<莩<<訃<<è² <<賦<<è³»<<èµ´<<趺<<部<<釜<<阜<<附<<駙<<鳧<<仆<<俘<<" + "媍<<抔<<拊<<掊<<æ¡´<<榑<<涪<<玞<<祔<<筟<<罘<<罦<<胕<<芣<<苻<<蔀<<蚨<<蜉<<袝<<裒<<跗<<鈇<<é «<" + "<鮒<<麩" + "&북<<北" + "&분<<分<<吩<<噴<<墳<<奔<<奮<<å¿¿<<憤<<扮<<昐<<æ±¾<<焚<<盆<<粉<<糞<<紛<<芬<<賁<<雰<<体<<坌<<帉" + "<<枌<<棻<<棼<<氛<<湓<<濆<<犇<<畚<<砏<<笨<<肦<<膹<<蕡<<轒<<黺<<é¼¢" + "&불<<佛<<弗<<彿<<拂<<岪<<祓<<ç´±<<艴<<茀<<韍<<é«´<<é»»" + "&붕<<å´©<<朋<<棚<<硼<<繃<<鵬<<堋<<æ¼°<<鬅" + "&비<<丕<<備<<匕<<匪<<卑<<妃<<å©¢<<庇<<悲<<憊<<扉<<批<<斐<<枇<<榧<<比<<毖<<毗<<毘<<沸<<琵<<痺" + "<<砒<<碑<<秕<<秘<<粃<<緋<<ç¿¡<<肥<<脾<<臂<<菲<<蜚<<裨<<誹<<è­¬<<è²»<<鄙<<非<<飛<<é¼»<<仳<<俾<<" + "剕<<圮<<埤<<妣<<屁<<庳<<悱<<棐<<椑<<沘<<淝<<æ· <<濞<<狉<<狒<<痞<<痹<<睥<<祕<<篦<<紕<<羆<<腓<" + "<芘<<芾<<萆<<蓖<<蚍<<貔<<贔<<轡<<邳<<郫<<閟<<陴<<霏<<鞴<<騑<<騛<<髀<<鼙" + "&빈<<嚬<<嬪<<彬<<斌<<檳<<殯<<浜<<濱<<瀕<<牝<<玭<<貧<<賓<<é »<<儐<<擯<<矉<<ç¹½<<臏<<蘋<<è±³<<邠" + "<<鑌<<霦<<é¡°<<鬂<<鬢" + "&빙<<憑<<æ°·<<聘<<騁<<冰<<凭<<凴<<娉" + "&사<<乍<<事<<些<<仕<<伺<<ä¼¼<<使<<俟<<僿<<史<<司<<唆<<嗣<<四<<士<<奢<<娑<<寫<<寺<<射<<å·³<<師" + "<<徙<<思<<捨<<斜<<斯<<柶<<査<<梭<<æ­»<<沙<<泗<<渣<<瀉<<獅<<砂<<社<<祀<<祠<<私<<篩<<紗<<çµ²<<" + "肆<<舍<<莎<<蓑<<蛇<<裟<<詐<<詞<<謝<<賜<<赦<<è¾­<<邪<<飼<<駟<<麝<<傞<<剚<<卸<<咋<<姒<<楂<<榭<" + "<汜<<痧<<皶<<ç«¢<<笥<<ç¼·<<蜡<<覗<<駛<<é­¦<<鯊<<é°¤" + "&삭<<削<<朔<<槊<<爍<<蒴<<鑠" + "&산<<傘<<刪<<å±±<<散<<汕<<珊<<産<<疝<<算<<蒜<<酸<<霰<<剷<<姍<<å­¿<<橵<<潸<<澘<<狻<<繖<<訕<<鏟" + "<<閊<<毿" + "&살<<ä¹·<<撒<<殺<<煞<<薩" + "&삼<<三<<杉<<森<<渗<<芟<<蔘<<è¡«<<糝<<釤<<鬖" + "&삽<<揷<<澁<<鈒<<颯<<卅<<唼<<歃<<ç¿£<<鍤<<霅<<霎" + "&상<<上<<傷<<像<<償<<商<<喪<<嘗<<孀<<尙<<å³ <<常<<床<<庠<<廂<<想<<桑<<æ©¡<<湘<<爽<<牀<<狀<<相" + "<<祥<<ç®±<<翔<<裳<<觴<<詳<<象<<賞<<霜<<塽<<徜<<晌<<殤<<甞<<緗<<鎟<<顙<<鬺" + "&새<<塞<<璽<<è³½<<鰓" + "&색<<嗇<<ç©¡<<ç´¢<<色<<槭<<濇<<瀒" + "&생<<牲<<生<<甥<<笙<<眚<<鉎" + "&서<<墅<<壻<<嶼<<序<<庶<<徐<<恕<<抒<<捿<<敍<<暑<<曙<<書<<栖<<棲<<犀<<瑞<<ç­®<<çµ®<<緖<<ç½²<<胥" + "<<舒<<薯<<西<<誓<<逝<<鋤<<黍<<é¼ <<噬<<å©¿<<揟<<撕<<湑<<澨<<紓<<耡<<芧<<鉏" + "&석<<夕<<奭<<席<<惜<<昔<<晳<<析<<汐<<淅<<潟<<石<<碩<<蓆<<釋<<錫<<晰<<矽<<腊<<舃<<蜥<<鉐<<鼫" + "&선<<仙<<僊<<先<<善<<嬋<<宣<<扇<<敾<<旋<<渲<<煽<<琁<<瑄<<璇<<璿<<癬<<禪<<線<<繕<<羨<<腺<<膳" + "<<船<<蘚<<蟬<<詵<<è·£<<選<<銑<<鐥<<饍<<é®®<<墡<<嫙<<尟<<å° <<å±³<<愃<<歚<<熯<<筅<<綫<<譔<<è­±<<" + "鏇<<騸<<鱓<<é±»" + "&설<<卨<<屑<<楔<<泄<<æ´©<<渫<<舌<<薛<<褻<<設<<說<<雪<<齧<<偰<<媟<<揲<<暬<<爇<<碟<<稧<<ç´²" + "&섬<<剡<<暹<<殲<<纖<<蟾<<贍<<閃<<陝<<孅<<憸<<摻<<睒<<è­«<<銛<<韱" + "&섭<<攝<<涉<<燮<<囁<<懾<<灄<<聶<<躡<<鑷<<顳" + "&성<<城<<姓<<宬<<性<<惺<<成<<星<<晟<<猩<<珹<<盛<<省<<ç­¬<<聖<<聲<<腥<<誠<<醒<<瑆<<騂" + "&세<<世<<勢<<æ­²<<洗<<稅<<笹<<ç´°<<è²°<<帨<<洒<<繐<<蛻" + "&소<<召<<嘯<<塑<<宵<<小<<少<<å·¢<<所<<掃<<搔<<昭<<梳<<æ²¼<<消<<溯<<瀟<<炤<<燒<<甦<<疏<<疎<<瘙" + "<<笑<<篠<<ç°«<<ç´ <<ç´¹<<蔬<<蕭<<蘇<<訴<<逍<<遡<<邵<<銷<<韶<<騷<<佋<<俏<<卲<<嗉<<埽<<塐<<愬<<" + "捎<<樔<<泝<<ç­±<<箾<<繅<<翛<<膆<<艘<<蛸<<踈<<酥<<霄<<魈<<鮹<<é°º" + "&속<<俗<<屬<<束<<涑<<粟<<續<<謖<<贖<<速<<æ´¬<<遬" + "&손<<å­«<<å·½<<損<<蓀<<遜<<飡<<飧<<飱" + "&솔<<率<<窣<<蟀" + "&송<<宋<<悚<<松<<淞<<訟<<誦<<送<<頌<<柗<<竦<<鬆" + "&쇄<<刷<<灑<<碎<<鎖<<惢<<曬<<瑣" + "&쇠<<è¡°<<釗" + "&수<<ä¿®<<受<<嗽<<囚<<垂<<壽<<嫂<<守<<岫<<峀<<帥<<愁<<戍<<手<<授<<搜<<收<<數<<樹<<殊<<æ°´<<洙" + "<<æ¼±<<燧<<狩<<獸<<琇<<璲<<瘦<<睡<<秀<<穗<<竪<<ç²¹<<綏<<綬<<繡<<羞<<脩<<茱<<蒐<<蓚<<藪<<袖<<" + "誰<<讐<<輸<<遂<<邃<<酬<<銖<<銹<<隋<<隧<<隨<<雖<<需<<須<<首<<髓<<鬚<<叟<<售<<廋<<晬<<殳<<泅<" + "<溲<<濉<<睟<<睢<<瞍<<祟<<籔<<脺<<膄<<膸<<讎<<豎<<陲<<颼<<饈" + "&숙<<叔<<塾<<夙<<å­°<<宿<<淑<<潚<<熟<<琡<<璹<<肅<<菽<<俶<<倏<<儵<<婌<<橚<<驌<<é·«" + "&순<<å·¡<<徇<<循<<恂<<旬<<栒<<楯<<橓<<殉<<æ´µ<<æ·³<<珣<<盾<<瞬<<筍<<純<<脣<<舜<<荀<<蓴<<蕣<<è©¢" + "<<諄<<醇<<錞<<順<<馴<<侚<<狥<<盹<<眴<<紃<<肫<<駨<<鬊<<鶉" + "&술<<戌<<術<<è¿°<<鉥<<絉" + "&숭<<崇<<å´§<<嵩<<菘" + "&쉬<<倅<<æ·¬<<焠" + "&슬<<瑟<<膝<<蝨<<虱" + "&습<<濕<<拾<<習<<褶<<襲<<慴<<熠<<隰" + "&승<<丞<<乘<<僧<<勝<<升<<承<<昇<<繩<<蠅<<陞<<塍<<鬙" + "&시<<侍<<匙<<嘶<<始<<媤<<å°¸<<屎<<屍<<市<<弑<<恃<<施<<是<<時<<枾<<柴<<猜<<矢<<示<<翅<<蒔<<蓍" + "<<視<<試<<è©©<<è«¡<<豕<<豺<<偲<<兕<<厮<<啻<<塒<<廝<<枲<<柹<<澌<<ç·¦<<翤<<諟<<è«°<<豉<<釃<<鍉<<" + "顋&식<<埴<<寔<<式<<息<<拭<<植<<殖<<湜<<熄<<篒<<蝕<<識<<軾<<食<<飾<<喰<<媳<<æ »" + "&신<<伸<<侁<<ä¿¡<<呻<<娠<<宸<<愼<<新<<晨<<燼<<申<<神<<ç´³<<腎<<臣<<莘<<薪<<藎<<蜃<<訊<<身<<辛" + "<<迅<<哂<<噺<<囟<<姺<<汛<<矧<<脤<<贐<<é £<<駪" + "&실<<失<<室<<實<<悉<<蟋<<飋" + "&심<<審<<尋<<心<<沁<<æ·±<<瀋<<甚<<芯<<諶<<梣<<潯<<燖<<葚<<鐔<<鱏" + "&십<<什<<十<<è¾»" + "&쌍<<雙" + "&씨<<氏" + "&아<<亞<<俄<<兒<<啞<<娥<<峨<<我<<牙<<芽<<莪<<蛾<<衙<<訝<<阿<<雅<<餓<<鴉<<鵝<<丫<<哦<<娿<<婀" + "<<峩<<疴<<砑<<笌<<迓<<錏<<鵞" + "&악<<堊<<å²³<<嶽<<幄<<惡<<愕<<握<<樂<<渥<<鄂<<鍔<<顎<<鰐<<é½·<<偓<<卾<<咢<<喔<<噩<<腭<<萼<<覨" + "<<諤<<鶚<<齶" + "&안<<安<<岸<<按<<晏<<案<<眼<<雁<<鞍<<顔<<鮟<<桉<<犴<<贋<<鴈" + "&알<<斡<<謁<<軋<<閼<<嘎<<戞<<揠<<穵<<訐<<遏<<頞<<é´¶" + "&암<<唵<<岩<<巖<<庵<<暗<<癌<<菴<<闇<<啽<<媕<<嵓<<晻<<腤<<葊<<蓭<<諳<<é ·<<馣<<黯" + "&압<<壓<<押<<狎<<é´¨" + "&앙<<ä»°<<央<<怏<<昻<<殃<<秧<<é´¦<<卬<<坱<<æ³±<<盎<<鞅" + "&애<<厓<<哀<<埃<<崖<<愛<<曖<<涯<<碍<<艾<<隘<<靄<<僾<<唉<<啀<<噯<<娭<<崕<<挨<<捱<<欸<<漄<<獃" + "<<皚<<睚<<瞹<<磑<<礙<<薆<<藹<<靉<<騃" + "&액<<厄<<扼<<掖<<液<<縊<<腋<<額<<呝<<戹<<搤<<阨" + "&앵<<æ«»<<罌<<鶯<<鸚<<嚶<<嫈<<罃<<é·ª" + "&야<<也<<倻<<冶<<夜<<惹<<揶<<椰<<爺<<耶<<野<<埜" + "&약<<å¼±<<約<<若<<葯<<蒻<<藥<<躍<<爚<<禴<<篛<<ç±¥<<鑰<<é°¯<<鶸<<é¾ " + "&양<<佯<<壤<<孃<<恙<<揚<<攘<<敭<<暘<<楊<<樣<<洋<<瀁<<煬<<痒<<瘍<<禳<<ç©°<<羊<<襄<<讓<<釀<<陽" + "<<養<<徉<<æ¼¾<<瀼<<烊<<癢<<眻<<蘘<<è¼°<<鑲<<颺<<驤" + "&어<<圄<<御<<於<<漁<<瘀<<禦<<語<<馭<<魚<<齬<<圉<<敔<<æ·¤<<飫" + "&억<<億<<憶<<抑<<檍<<臆<<繶" + "&언<<偃<<å °<<彦<<焉<<言<<諺<<傿<<匽<<å«£<<讞<<鄢<<é¼´<<é¼¹" + "&얼<<å­¼<<蘖<<臬" + "&엄<<俺<<儼<<嚴<<奄<<掩<<æ·¹<<å´¦<<广<<曮<<罨<<醃<<閹" + "&업<<嶪<<業<<嶫<<鄴" + "&에<<恚<<曀" + "&엔<<円" + "&여<<予<<余<<如<<歟<<汝<<璵<<礖<<與<<艅<<茹<<輿<<轝<<餘<<舁" + "&역<<亦<<域<<å½¹<<易<<疫<<ç¹¹<<è­¯<<逆<<驛<<嶧<<懌<<æ·¢<<閾" + "&연<<嚥<<å §<<姸<<娟<<å®´<<延<<捐<<挻<<椽<<沇<<沿<<涎<<涓<<æ·µ<<演<<烟<<然<<煙<<燃<<燕<<硏<<硯" + "<<ç­µ<<ç·£<<縯<<衍<<軟<<鉛<<鳶<<兗<<囦<<埏<<嬿<<悁<<掾<<曣<<櫞<<渷<<臙<<莚<<蜵<<蠕<<讌<<é·°" + "&열<<悅<<涅<<熱<<閱<<噎" + "&염<<厭<<染<<炎<<焰<<琰<<艶<<苒<<閻<<é«¥<<é¹½<<冉<<å¡©<<懕<<扊<<檿<<檶<<灎<<灩<<釅<<饜<<魘<<黶" + "&엽<<曄<<燁<<葉<<曅<<熀<<爗<<靨" + "&영<<塋<<嶸<<å½±<<映<<暎<<楹<<榮<<æ°¸<<æ³³<<渶<<潁<<濚<<瀛<<瀯<<煐<<營<<獰<<瑛<<瓔<<盈<<穎<<纓" + "<<英<<è© <<迎<<鍈<<霙<<咏<<嬴<<嬰<<浧<<æ¿´<<癭<<碤<<縈<<蠑<<贏<<郢<<韺" + "&예<<乂<<倪<<刈<<叡<<曳<<æ±­<<濊<<猊<<睿<<ç©¢<<芮<<藝<<蘂<<裔<<è©£<<è­½<<豫<<銳<<霓<<預<<囈<<嫛" + "<<拽<<掜<<枘<<獩<<睨<<瞖<<繄<<翳<<苅<<蕊<<蕋<<薉<<蚋<<蜺<<鯢<<鷖<<麑" + "&오<<五<<伍<<俉<<傲<<午<<吾<<吳<<嗚<<å¡¢<<墺<<奧<<娛<<寤<<悟<<懊<<敖<<旿<<晤<<梧<<汚<<æ¾³<<烏" + "<<熬<<獒<<ç­½<<蜈<<誤<<é°²<<鼇<<仵<<ä¿£<<唔<<嗷<<噁<<圬<<媪<<嫯<<忤<<慠<<捂<<汙<<窹<<聱<<茣<<" + "襖<<謷<<迃<<迕<<遨<<鏊<<鏖<<隩<<驁<<鼯" + "&옥<<屋<<沃<<獄<<玉<<鈺" + "&온<<溫<<瑥<<瘟<<ç©©<<縕<<蘊<<媼<<慍<<昷<<æ°³<<熅<<薀<<轀<<醞<<韞<<饂<<é°®" + "&올<<兀<<嗢<<膃" + "&옹<<壅<<擁<<瓮<<甕<<癰<<翁<<邕<<雍<<饔<<喁<<å»±<<滃<<癕<<禺<<罋<<蓊<<雝<<顒" + "&와<<渦<<瓦<<窩<<窪<<臥<<蛙<<蝸<<訛<<哇<<囮<<婐<<枙<<æ´¼<<猧<<窊<<萵<<譌" + "&완<<婉<<完<<宛<<梡<<椀<<æµ£<<玩<<琓<<琬<<碗<<ç·©<<ç¿«<<脘<<腕<<莞<<豌<<阮<<頑<<刓<<垸<<妧<<岏" + "<<忨<<惋<<涴<<盌" + "&왈<<曰" + "&왕<<往<<旺<<枉<<汪<<王<<å°«<<瀇<<迬" + "&왜<<倭<<娃<<æ­ª<<矮<<媧" + "&외<<外<<嵬<<巍<<猥<<畏<<偎<<å´´<<嵔<<渨<<煨<<碨<<磈<<聵<<隗" + "&요<<僥<<凹<<å ¯<<夭<<妖<<姚<<寥<<嶢<<拗<<搖<<撓<<擾<<曜<<橈<<燿<<瑤<<窈<<窯<<繇<<繞<<耀<<腰" + "<<蟯<<要<<謠<<遙<<邀<<饒<<偠<<喓<<坳<<墝<<嬈<<幺<<å¾­<<å¾¼<<殀<<澆<<祅<<穾<<窅<<蕘<<遶<<鷂" + "&욕<<慾<<欲<<æµ´<<縟<<褥<<è¾±<<溽<<蓐" + "&용<<俑<<傭<<冗<<勇<<埇<<墉<<容<<庸<<慂<<榕<<涌<<湧<<溶<<熔<<瑢<<用<<甬<<聳<<茸<<蓉<<踊<<鎔" + "<<鏞<<傛<<宂<<åµ±<<慵<<憃<<槦<<硧<<舂<<蛹<<踴" + "&우<<于<<佑<<偶<<優<<又<<友<<右<<宇<<寓<<å°¤<<愚<<憂<<旴<<牛<<玗<<瑀<<盂<<祐<<禑<<禹<<紆<<ç¾½" + "<<芋<<藕<<虞<<迂<<遇<<郵<<釪<<隅<<雨<<雩<<亏<<亴<<俁<<偊<<吁<<å £<<嵎<<庽<<杅<<疣<<盱<<竽<<" + "耦<<耰<<謣<<踽<<鍝<<麀<<麌<<é½²" + "&욱<<勖<<彧<<旭<<昱<<æ ¯<<煜<<稶<<郁<<頊<<燠" + "&운<<云<<橒<<殞<<澐<<熉<<耘<<芸<<蕓<<運<<隕<<雲<<韻<<惲<<沄<<篔<<紜<<霣<<韵" + "&울<<蔚<<鬱<<亐" + "&웅<<熊<<雄" + "&원<<元<<原<<員<<圓<<園<<垣<<媛<<嫄<<寃<<怨<<愿<<援<<沅<<æ´¹<<æ¹²<<源<<爰<<猿<<瑗<<苑<<袁<<轅" + "<<遠<<院<<願<<鴛<<冤<<圜<<杬<<楥<<猨<<綩<<芫<<薗<<蜿<<謜<<鋺<<騵<<éµ·<<黿" + "&월<<月<<越<<鉞<<刖<<粤" + "&위<<位<<偉<<僞<<危<<圍<<委<<威<<尉<<慰<<暐<<渭<<爲<<瑋<<ç·¯<<胃<<萎<<葦<<蔿<<蝟<<衛<<褘<<謂" + "<<違<<韋<<魏<<喟<<幃<<煒<<熨<<痿<<葳<<衞<<諉<<逶<<闈<<韙<<韡<<餧<<骪" + "&유<<ä¹³<<侑<<儒<<兪<<唯<<喩<<å­º<<宥<<å¹¼<<å¹½<<庾<<悠<<惟<<愈<<愉<<揄<<攸<<有<<柔<<柚<<楡<<楢" + "<<æ²¹<<æ´§<<游<<æ¿¡<<猶<<猷<<瑜<<由<<癒<<維<<臾<<萸<<裕<<誘<<諛<<è«­<<踰<<蹂<<遊<<逾<<遺<<酉<<" + "釉<<鍮<<冘<<呦<<囿<<壝<<帷<<揉<<斿<<泑<<牖<<瘉<<瘐<<窬<<窳<<ç±²<<糅<<緌<<腴<<莠<<蕕<<蕤<<蚰<" + "<蚴<<蝤<<褕<<讉<<逌<<鞣<<鮪<<黝<<鼬<<é¾¥" + "&육<<堉<<毓<<肉<<育<<儥" + "&윤<<允<<奫<<å°¹<<潤<<玧<<胤<<贇<<鈗<<閏<<昀<<鋆" + "&율<<聿<<潏<<矞" + "&융<<戎<<瀜<<絨<<融<<狨" + "&은<<垠<<恩<<慇<<æ®·<<誾<<銀<<隱<<听<<嚚<<圁<<垽<<憖<<檼<<溵<<狺<<珢<<癮<<訔<<鄞<<齗" + "&을<<乙<<鳦" + "&음<<吟<<æ·«<<蔭<<陰<<音<<飮<<喑<<崟<<廕<<愔<<霪" + "&읍<<揖<<æ³£<<邑<<悒<<挹<<æµ¥" + "&응<<凝<<應<<膺<<é·¹" + "&의<<依<<倚<<儀<<宜<<意<<懿<<擬<<椅<<毅<<疑<<矣<<義<<艤<<薏<<蟻<<è¡£<<誼<<è­°<<醫<<儗<<凒<<劓" + "<<嶷<<欹<<漪<<猗<<礒<<螘<<饐" + "&이<<二<<以<<伊<<夷<<姨<<å·²<<弛<<彛<<怡<<爾<<珥<<異<<痍<<移<<而<<耳<<肄<<苡<<荑<<è²½<<è²³<<邇" + "<<飴<<餌<<咿<<坨<<尔<<彝<<æ ®<<洟<<珆<<訑<<詑<<迤<<隶" + "&익<<瀷<<益<<翊<<翌<<翼<<謚<<弋<<熤<<鷁" + "&인<<人<<仁<<刃<<印<<咽<<因<<姻<<寅<<引<<忍<<æ¹®<<絪<<茵<<蚓<<認<<靭<<靷<<仞<<堙<<夤<<å©£<<扨" + "<<æ°¤<<洇<<禋<<ç±¾<<芢<<裀" + "&일<<一<<佚<<ä½¾<<壹<<日<<溢<<逸<<鎰<<馹<<泆<<軼" + "&임<<ä»»<<壬<<妊<<姙<<恁<<稔<<荏<<賃<<絍<<衽<<銋<<飪" + "&입<<入<<卄<<廿" + "&잉<<仍<<剩<<孕<<芿<<媵" + "&자<<仔<<刺<<咨<<姉<<姿<<子<<字<<孜<<恣<<慈<<滋<<炙<<煮<<玆<<瓷<<疵<<磁<<ç´«<<者<<自<<茨<<蔗" + "<<藉<<è«®<<資<<雌<<呰<<嬨<<孖<<å­¶<<柘<<泚<<牸<<眥<<眦<<ç²¢<<耔<<胾<<茈<<茲<<莿<<虸<<觜<<訾<<" + "è²²<<èµ­<<鎡<<é ¿<<é«­<<鮓<<鶿<<鷓" + "&작<<作<<勺<<嚼<<斫<<昨<<灼<<炸<<爵<<綽<<芍<<酌<<雀<<éµ²<<岝<<怍<<斱<<柞<<汋<<焯<<犳<<碏" + "&잔<<å­±<<棧<<殘<<潺<<盞<<剗<<戔<<驏" + "&잠<<岑<<暫<<潛<<ç®´<<ç°ª<<è ¶<<涔<<潜<<濳" + "&잡<<雜<<卡<<囃<<眨<<磼<<襍" + "&장<<丈<<仗<<匠<<å ´<<墻<<壯<<奬<<將<<帳<<庄<<å¼µ<<掌<<暲<<杖<<樟<<檣<<欌<<漿<<牆<<獐<<璋<<ç« " + "<<粧<<腸<<臟<<臧<<莊<<葬<<蔣<<薔<<藏<<裝<<贓<<醬<<長<<障<<傽<<奘<<妝<<嬙<<嶂<<廧<<戕<<æ¼³<<" + "牂<<瘴<<糚<<羘<<萇<<装<<賬<<鄣<<鏘<<餦<<麞" + "&재<<再<<哉<<在<<å®°<<才<<材<<æ ½<<梓<<渽<<滓<<災<<縡<<裁<<財<<載<<齋<<齎<<夈<<å´½<<扗<<榟<<灾" + "<<纔" + "&쟁<<爭<<箏<<諍<<錚<<å´¢<<猙<<琤<<鎗" + "&저<<佇<<低<<儲<<咀<<姐<<底<<抵<<杵<<楮<<樗<<æ²®<<渚<<狙<<猪<<疽<<箸<<ç´µ<<苧<<菹<<著<<藷<<詛" + "<<貯<<躇<<這<<邸<<雎<<齟<<宁<<岨<<杼<<柢<<氐<<æ½´<<瀦<<牴<<罝<<羝<<苴<<蛆<<袛<<褚<<觝<<詆<<" + "豬<<陼" + "&적<<勣<<吊<<å«¡<<寂<<摘<<敵<<æ»´<<狄<<的<<積<<笛<<籍<<績<<翟<<荻<<謫<<賊<<赤<<è·¡<<蹟<<迪<<迹" + "<<適<<鏑<<樀<<磧<<ç³´<<菂<<覿<<逖<<馰" + "&전<<佃<<佺<<傳<<全<<典<<前<<剪<<å¡¡<<塼<<奠<<專<<展<<廛<<悛<<戰<<栓<<殿<<氈<<æ¾±<<煎<<琠<<田" + "<<甸<<畑<<癲<<筌<<箋<<ç®­<<篆<<纏<<è©®<<è¼¾<<轉<<鈿<<銓<<錢<<鐫<<電<<顚<<é¡«<<餞<<吮<<囀<<å«¥<<" + "屇<<巓<<戩<<揃<<旃<<æ ´<<槇<<湔<<澶<<牋<<瑱<<甎<<畋<<畠<<痊<<癜<<磚<<籛<<羶<<翦<<腆<<膞<<荃<" + "<躔<<輇<<邅<<鄽<<鋑<<錪<<靛<<靦<<顓<<飦<<餰<<鬋<<é±£<<鸇" + "&절<<切<<截<<折<<浙<<癤<<竊<<節<<絶<<岊<<晢<<窃" + "&점<<占<<å²¾<<店<<漸<<点<<粘<<霑<<鮎<<點<<佔<<墊<<玷<<笘<<簟<<苫<<蔪<<蛅<<覘<<颭<<黏" + "&접<<接<<摺<<蝶<<椄<<楪<<蜨<<跕<<蹀<<鰈" + "&정<<丁<<井<<亭<<停<<偵<<呈<<姃<<定<<幀<<庭<<å»·<<征<<情<<挺<<政<<整<<旌<<晶<<晸<<柾<<楨<<檉" + "<<æ­£<<汀<<淀<<æ·¨<<渟<<湞<<瀞<<炡<<玎<<珽<<町<<睛<<碇<<禎<<程<<穽<<ç²¾<<綎<<艇<<訂<<諪<<貞<<" + "鄭<<酊<<釘<<鉦<<鋌<<錠<<霆<<靖<<靜<<頂<<鼎<<佂<<叮<<婧<<å©·<<怔<<掟<<桯<<梃<<棖<<灯<<珵<<疔<" + "<ç­³<<莛<<証<<遉<<酲<<鋥<<靚" + "&제<<制<<劑<<啼<<å ¤<<帝<<弟<<悌<<提<<梯<<濟<<祭<<第<<臍<<薺<<製<<諸<<蹄<<醍<<除<<際<<霽<<題" + "<<齊<<儕<<娣<<擠<<猘<<瑅<<睇<<禔<<稊<<ç·¹<<踶<<蹏<<躋<<鍗<<隄<<韲<<鮧<<鯷" + "&ì¡°<<俎<<兆<<凋<<助<<嘲<<弔<<彫<<措<<操<<早<<晁<<曺<<曹<<朝<<條<<棗<<槽<<漕<<æ½®<<照<<燥<<爪" + "<<璪<<眺<<祖<<祚<<租<<稠<<窕<<粗<<糟<<組<<ç¹°<<肇<<藻<<蚤<<詔<<調<<趙<<躁<<造<<遭<<釣<<阻<<" + "雕<<é³¥<<ä½»<<傮<<刁<<厝<<嘈<<噪<<嬥<<徂<<懆<<找<<殂<<澡<<琱<<皁<<祧<<竈<<笊<<糙<<糶<<絩<<絛<" + "<胙<<臊<<艚<<蔦<<蜩<<誂<<譟<<鈟<<銚<<鋽<<鯛<<éµ°<<鼂" + "&족<<族<<簇<<足<<鏃<<瘯" + "&ì¡´<<存<<尊<<拵" + "&졸<<卒<<拙<<猝" + "&종<<倧<<宗<<從<<悰<<慫<<棕<<淙<<琮<<種<<終<<綜<<縱<<腫<<踪<<踵<<鍾<<鐘<<伀<<慒<<柊<<椶<<樅" + "<<瑽<<瘇<<ç²½<<螽<<蹤" + "&좌<<佐<<坐<<å·¦<<座<<挫<<剉<<痤<<莝<<髽" + "&죄<<罪" + "&주<<主<<住<<侏<<做<<姝<<胄<<呪<<周<<嗾<<奏<<宙<<州<<廚<<晝<<朱<<柱<<æ ª<<注<<æ´²<<湊<<澍<<炷" + "<<珠<<疇<<籌<<紂<<ç´¬<<綢<<舟<<蛛<<註<<誅<<èµ°<<躊<<è¼³<<週<<酎<<酒<<鑄<<駐<<丟<<侜<<儔<<尌<<" + "幬<<拄<<硃<<籒<<肘<<腠<<蔟<<蛀<<裯<<詋<<賙<<趎<<輈<<遒<<鉒<<霌<<霔<<鼄" + "&죽<<竹<<ç²¥" + "&준<<俊<<儁<<准<<埈<<寯<<å³»<<晙<<樽<<浚<<準<<濬<<焌<<畯<<ç«£<<è ¢<<逡<<遵<<雋<<駿<<噂<<埻<<墫" + "<<惷<<撙<<皴<<綧<<罇<<踆<<è¹²<<鐏<<隼<<餕<<鱒<<鵔" + "&줄<<茁<<ä¹¼" + "&중<<中<<仲<<衆<<重<<眾" + "&즉<<卽<<即<<喞" + "&즐<<櫛<<騭" + "&즙<<楫<<汁<<葺<<檝<<蕺" + "&증<<增<<憎<<曾<<拯<<烝<<甑<<症<<繒<<蒸<<證<<贈<<嶒<<矰<<ç½¾" + "&지<<之<<只<<咫<<地<<址<<志<<持<<指<<摯<<支<<旨<<智<<枝<<枳<<æ­¢<<æ± <<沚<<漬<<知<<ç ¥<<祉<<祗" + "<<紙<<肢<<脂<<至<<芝<<芷<<蜘<<誌<<贄<<趾<<遲<<坻<<墀<<扺<<榰<<泜<<痣<<秪<<篪<<舐<<踟<<躓<<" + "軹<<阯<<鮨<<鷙" + "&직<<直<<稙<<稷<<織<<職<<禝" + "&진<<唇<<嗔<<塵<<振<<搢<<晉<<晋<<æ¡­<<榛<<殄<<æ´¥<<溱<<珍<<瑨<<璡<<畛<<疹<<盡<<眞<<瞋<<秦<<縉" + "<<縝<<臻<<蔯<<袗<<診<<賑<<軫<<è¾°<<進<<鎭<<陣<<陳<<震<<ä¾²<<儘<<珒<<稹<<蓁<<螴<<趁<<鉁<<鬒" + "&질<<侄<<叱<<姪<<嫉<<帙<<桎<<瓆<<疾<<秩<<窒<<膣<<蛭<<質<<跌<<è¿­<<垤<<çµ°<<蒺<<郅<<鑕" + "&짐<<斟<<朕<<鴆" + "&집<<執<<潗<<緝<<輯<<鏶<<集<<咠<<戢" + "&징<<å¾µ<<懲<<澄<<澂<<瀓<<癥<<瞪" + "&ì°¨<<且<<侘<<借<<叉<<嗟<<嵯<<å·®<<次<<æ­¤<<磋<<箚<<蹉<<車<<遮<<ä½½<<偖<<奓<<岔<<å¾£<<槎<<瑳<<硨" + "&ì°©<<捉<<搾<<着<<窄<<錯<<鑿<<齪<<戳<<擉<<斲" + "&ì°¬<<撰<<澯<<燦<<璨<<瓚<<竄<<簒<<纂<<ç²²<<纘<<讚<<贊<<鑽<<餐<<饌<<儧<<儹<<劗<<巑<<攢<<欑<<爨" + "<<趲" + "&ì°°<<刹<<察<<擦<<札<<ç´®<<扎<<拶" + "&ì°¸<<僭<<參<<塹<<慘<<慙<<懺<<斬<<站<<讒<<讖<<儳<<叅<<嶄<<巉<<慚<<憯<<攙<<槧<<欃<<毚<<譖<<鏨" + "<<鑱<<饞<<驂<<黲" + "&ì°½<<倉<<倡<<創<<唱<<娼<<å» <<å½°<<愴<<敞<<昌<<昶<<暢<<槍<<滄<<æ¼²<<猖<<瘡<<窓<<脹<<艙<<菖<<蒼" + "<<倀<<傖<<凔<<刱<<悵<<惝<<戧<<搶<<椙<<氅<<瑲<<窗<<窻<<蹌<<鋹<<錆<<閶<<鬯<<鶬" + "&채<<債<<埰<<寀<<寨<<彩<<採<<ç ¦<<綵<<菜<<蔡<<采<<釵<<棌<<茝" + "&책<<冊<<柵<<策<<責<<嘖<<幘<<磔<<笧<<簀<<蚱" + "&처<<凄<<妻<<悽<<處<<淒<<萋<<褄<<覷<<郪" + "&척<<倜<<剔<<å°º<<慽<<戚<<拓<<擲<<斥<<滌<<瘠<<脊<<è¹ <<陟<<隻<<呎<<坧<<塉<<惕<<捗<<摭<<蜴<<跖" + "<<躑" + "&천<<仟<<千<<喘<<天<<川<<擅<<泉<<æ·º<<玔<<ç©¿<<舛<<薦<<賤<<踐<<遷<<釧<<闡<<阡<<韆<<ä¿´<<倩<<僢" + "<<儃<<洊<<濺<<瓩<<祆<<粁<<臶<<芊<<茜<<荐<<蒨<<蕆<<蚕<<辿<<靝" + "&ì² <<凸<<哲<<喆<<å¾¹<<撤<<澈<<綴<<輟<<轍<<鐵<<剟<<啜<<埑<<惙<<掇<<æ­ <<銕<<錣<<飻<<餮" + "&첨<<僉<<尖<<æ²¾<<æ·»<<甛<<瞻<<ç°½<<籤<<詹<<諂<<幨<<忝<<惉<<檐<<櫼<<瀸<<ç°·<<襜" + "&첩<<堞<<妾<<帖<<捷<<牒<<疊<<睫<<諜<<è²¼<<輒<<倢<<呫<<喋<<怗<<褺" + "&ì²­<<廳<<晴<<æ·¸<<聽<<菁<<請<<靑<<鯖<<凊<<圊<<蜻<<鶄" + "&ì²´<<剃<<替<<涕<<滯<<ç· <<諦<<逮<<遞<<體<<嚏<<彘<<棣<<殢<<砌<<蒂<<蔕<<蕞<<軆<<靆<<é«°" + "&초<<初<<剿<<哨<<憔<<抄<<招<<梢<<椒<<楚<<樵<<炒<<焦<<硝<<礁<<礎<<秒<<稍<<肖<<艸<<苕<<草<<蕉" + "<<貂<<超<<酢<<醋<<醮<<偢<<僬<<劭<<勦<<噍<<嫶<<岧<<å³­<<嶕<<怊<<悄<<愀<<杪<<燋<<綃<<耖<<誚<<" + "譙<<趠<<軺<<è¿¢<<鈔<<鍫<<鍬<<鞘<<顦<<é««<<é·¦<<é½ " + "&촉<<促<<囑<<燭<<矗<<蜀<<觸<<曯<<爥<<矚<<薥<<躅<<髑" + "&촌<<寸<<忖<<村<<邨<<吋" + "&총<<叢<<塚<<寵<<悤<<憁<<摠<<總<<聰<<蔥<<銃<<葱<<蓯<<鏦<<騘<<驄" + "&ì´¬<<撮" + "&최<<催<<崔<<最<<嘬<<摧<<榱<<æ¼¼<<璀<<磪<<縗<<脧" + "&추<<墜<<抽<<推<<椎<<楸<<樞<<湫<<皺<<秋<<芻<<萩<<諏<<趨<<追<<鄒<<酋<<醜<<錐<<錘<<鎚<<雛<<騶" + "<<鰍<<僦<<啾<<娵<<帚<<惆<<捶<<揫<<搥<<甃<<瘳<<龝<<箒<<ç® <<簉<<縋<<縐<<蒭<<陬<<隹<<鞦<<騅<<" + "魋<<鰌<<éµ»<<鶖<<鶵<<麄<<麤" + "&축<<丑<<畜<<祝<<竺<<筑<<築<<縮<<蓄<<蹙<<è¹´<<軸<<逐<<妯<<舳<<豖<<蹜<<鼀" + "&춘<<春<<椿<<瑃" + "&출<<出<<朮<<黜<<秫" + "&충<<充<<å¿ <<沖<<蟲<<衝<<è¡·<<冲<<å¿¡<<珫" + "&췌<<悴<<膵<<萃<<贅<<惴<<揣<<疩<<瘁<<顇" + "&ì·¨<<取<<吹<<嘴<<娶<<å°±<<炊<<ç¿ <<聚<<脆<<臭<<趣<<醉<<驟<<é·²<<冣<<橇<<毳" + "&측<<側<<仄<<厠<<惻<<測<<廁<<昃" + "&층<<層" + "&치<<侈<<値<<嗤<<峙<<幟<<恥<<梔<<æ²»<<淄<<熾<<痔<<痴<<癡<<稚<<穉<<緇<<ç·»<<ç½®<<致<<蚩<<輜<<雉" + "<<馳<<齒<<卮<<哆<<寘<<å·µ<<畤<<痓<<絺<<菑<<薙<<褫<<豸<<è·±<<錙<<阤<<鯔<<鴙<<鴟<<鵄" + "&칙<<則<<勅<<飭<<敕" + "&친<<親<<櫬<<藽<<襯<<齔" + "&ì¹ <<七<<柒<<漆" + "&침<<ä¾µ<<寢<<枕<<沈<<浸<<琛<<ç §<<針<<鍼<<寖<<忱<<椹<<沉<<郴<<鋟<<駸" + "&칩<<蟄" + "&ì¹­<<秤<<稱" + "&쾌<<å¿«<<噲<<夬" + "&타<<他<<咤<<唾<<墮<<妥<<惰<<打<<拖<<朶<<楕<<舵<<陀<<馱<<駝<<佗<<垞<<拕<<柁<<æ©¢<<æ²±<<è©«<<跎" + "<<躱<<駞<<鮀<<鴕<<鼉" + "&탁<<倬<<卓<<啄<<坼<<托<<擢<<晫<<柝<<濁<<濯<<琢<<琸<<託<<鐸<<拆<<橐<<æ²°<<涿<<矺<<籜<<蘀<<踔" + "<<逴" + "&탄<<呑<<嘆<<坦<<彈<<憚<<歎<<灘<<炭<<綻<<誕<<憻<<攤<<殫<<癱<<驒" + "&탈<<奪<<脫<<ä¾»" + "&탐<<探<<眈<<耽<<貪<<嗿<<忐<<酖" + "&탑<<塔<<搭<<榻<<傝<<塌<<搨" + "&탕<<宕<<帑<<湯<<蕩<<燙<<盪<<碭<<蘯" + "&태<<兌<<台<<太<<怠<<態<<殆<<æ±°<<æ³°<<笞<<胎<<苔<<跆<<邰<<颱<<埭<<娧<<å­¡<<抬<<迨<<駄<<駘" + "&택<<擇<<澤" + "&탱<<撑<<撐<<牚" + "&터<<攄" + "&토<<兎<<吐<<土<<討" + "&톤<<噋<<噸<<瓲" + "&통<<慟<<桶<<痛<<筒<<çµ±<<通<<恫<<樋<<ç­©" + "&퇴<<堆<<槌<<腿<<褪<<退<<é ¹<<隤" + "&투<<偸<<套<<妬<<投<<透<<鬪<<妒<<渝<<骰" + "&퉁<<佟" + "&특<<慝<<特<<忒" + "&틈<<闖" + "&파<<坡<<婆<<å·´<<把<<播<<擺<<杷<<æ³¢<<æ´¾<<爬<<琶<<ç ´<<ç½·<<芭<<跛<<頗<<叵<<妑<<å²¥<<怕<<灞<<爸" + "<<玻<<皤<<笆<<ç°¸<<耙<<菠<<葩<<鄱" + "&판<<判<<坂<<板<<版<<瓣<<販<<辦<<鈑<<阪<<æ±´" + "&팔<<八<<叭<<捌<<朳<<汃" + "&패<<佩<<唄<<悖<<敗<<沛<<浿<<牌<<狽<<稗<<覇<<貝<<孛<<旆<<珮<<霈<<霸" + "&팽<<å½­<<澎<<烹<<膨<<ç °<<祊<<蟚<<蟛" + "&퍅<<愎" + "&편<<便<<偏<<扁<<片<<篇<<ç·¨<<ç¿©<<遍<<鞭<<騙<<匾<<徧<<惼<<ç·¶<<艑<<萹<<蝙<<褊<<諞" + "&폄<<貶<<ç ­<<窆" + "&평<<坪<<å¹³<<枰<<萍<<評<<怦<<抨<<泙<<苹<<蓱<<鮃" + "&폐<<吠<<嬖<<å¹£<<廢<<弊<<斃<<肺<<蔽<<閉<<陛<<敝<<狴<<獘<<癈" + "&포<<佈<<包<<匍<<匏<<咆<<哺<<圃<<布<<怖<<抛<<抱<<捕<<泡<<浦<<疱<<ç ²<<胞<<脯<<苞<<葡<<蒲<<袍" + "<<褒<<逋<<鋪<<飽<<鮑<<儤<<庖<<晡<<曓<<炮<<炰<<舖<<誧<<鉋<<鞄<<餔<<鯆" + "&폭<<幅<<暴<<曝<<瀑<<爆" + "&표<<俵<<剽<<彪<<慓<<杓<<標<<漂<<瓢<<票<<表<<è±¹<<飇<<飄<<驃<<僄<<勡<<嘌<<嫖<<摽<<殍<<熛<<縹" + "<<裱<<鏢<<鑣<<髟<<é°¾" + "&품<<品<<稟<<禀" + "&풍<<楓<<è«·<<豊<<風<<馮<<瘋<<葑" + "&피<<å½¼<<披<<疲<<皮<<被<<避<<陂<<詖<<辟<<鞁<<髲" + "&픽<<腷" + "&필<<匹<<å¼¼<<必<<泌<<珌<<畢<<疋<<筆<<苾<<馝<<佖<<咇<<æ»­<<篳<<ç½¼<<蓽<<觱<<蹕<<鞸<<韠<<駜<<鵯" + "&핍<<乏<<逼<<偪" + "&하<<下<<何<<厦<<夏<<廈<<昰<<æ²³<<瑕<<荷<<蝦<<賀<<遐<<霞<<鰕<<呀<<嚇<<岈<<懗<<煆<<瘕<<罅<<鍜" + "&학<<壑<<å­¸<<虐<<謔<<鶴<<狢<<瘧<<皬<<ç¡®<<郝<<é·½" + "&한<<寒<<恨<<悍<<旱<<汗<<æ¼¢<<æ¾£<<瀚<<罕<<ç¿°<<閑<<閒<<限<<韓<<僩<<嫺<<å«»<<捍<<暵<<閈<<駻<<é·³" + "<<é¼¾" + "&할<<割<<轄<<瞎" + "&함<<函<<含<<咸<<啣<<喊<<檻<<涵<<緘<<艦<<銜<<陷<<é¹¹<<莟<<菡<<è«´<<轞<<闞" + "&합<<合<<哈<<盒<<蛤<<閤<<闔<<陜<<匌<<嗑<<柙<<榼<<溘<<盍<<郃" + "&항<<亢<<伉<<姮<<嫦<<å··<<恒<<抗<<杭<<桁<<沆<<港<<缸<<肛<<航<<項<<夯<<恆<<炕<<缿<<頏" + "&해<<亥<<偕<<咳<<垓<<奚<<å­©<<害<<懈<<楷<<æµ·<<瀣<<蟹<<解<<該<<諧<<邂<<駭<<骸<<咍<<嶰<<廨<<欬" + "<<獬<<瑎<<痎<<薤<<醢<<é ¦<<é®­" + "&핵<<劾<<æ ¸<<ç¿®<<覈" + "&행<<倖<<幸<<杏<<荇<<行<<悻" + "&향<<享<<向<<嚮<<珦<<鄕<<響<<餉<<饗<<香<<薌" + "&허<<噓<<墟<<虛<<許<<歔" + "&헌<<憲<<櫶<<獻<<軒<<巚<<å¹°<<攇" + "&헐<<歇" + "&험<<險<<驗<<嶮<<獫<<玁" + "&혁<<奕<<爀<<赫<<革<<弈<<æ´«<<焱<<鬩" + "&현<<俔<<å³´<<弦<<懸<<晛<<泫<<炫<<玄<<玹<<現<<眩<<睍<<絃<<çµ¢<<縣<<舷<<衒<<è³¢<<鉉<<顯<<儇<<嬛" + "<<昡<<琄<<痃<<県<<繯<<翾<<蜆<<誢<<鋗<<駽" + "&혈<<孑<<ç©´<<血<<頁<<絜<<趐" + "&혐<<嫌" + "&협<<ä¿ <<協<<夾<<å³½<<挾<<æµ¹<<狹<<脅<<脇<<莢<<鋏<<é °<<匧<<叶<<埉<<恊<<悏<<愜<<篋" + "&형<<亨<<兄<<刑<<型<<å½¢<<泂<<滎<<瀅<<灐<<炯<<熒<<珩<<瑩<<荊<<螢<<è¡¡<<逈<<邢<<鎣<<馨<<夐<<娙" + "<<詗<<è¿¥<<陘" + "&혜<<兮<<彗<<惠<<慧<<暳<<蕙<<蹊<<醯<<鞋<<傒<<嘒<<寭<<徯<<槥<<盻<<謑<<è­¿" + "&호<<乎<<互<<呼<<壕<<壺<<好<<å²µ<<弧<<戶<<扈<<昊<<晧<<毫<<浩<<淏<<湖<<滸<<澔<<æ¿ <<æ¿©<<灝<<狐" + "<<琥<<瑚<<瓠<<皓<<祜<<糊<<縞<<胡<<芦<<葫<<蒿<<虎<<號<<蝴<<è­·<<豪<<鎬<<頀<<é¡¥<<儫<<冱<<嘷<<" + "å«­<<å«®<<怙<<沍<<滈<<滬<<犒<<猢<<皜<<皞<<箎<<聕<<醐<<餬<<鬍" + "&혹<<惑<<或<<酷" + "&혼<<婚<<昏<<æ··<<渾<<琿<<魂<<圂<<惛<<溷<<焜<<閽" + "&홀<<忽<<惚<<笏<<囫" + "&홍<<哄<<弘<<汞<<泓<<æ´ª<<烘<<紅<<虹<<訌<<é´»<<晎<<澒<<篊<<鉷<<鬨" + "&화<<化<<和<<嬅<<樺<<火<<畵<<禍<<禾<<花<<華<<話<<譁<<貨<<靴<<ä¿°<<嘩<<婲<<擭<<畫<<驊<<é¾¢" + "&확<<擴<<攫<<確<<碻<<ç©«<<矍<<矡<<礭<<鑊" + "&환<<丸<<喚<<奐<<宦<<å¹»<<患<<換<<æ­¡<<晥<<桓<<渙<<煥<<環<<紈<<還<<é©©<<é°¥<<寰<<懽<<擐<<瓛<<皖" + "<<睆<<絙<<è±¢<<轘<<鍰<<鐶<<鬟" + "&활<<æ´»<<滑<<猾<<豁<<闊<<蛞" + "&황<<凰<<幌<<徨<<恍<<惶<<愰<<慌<<晃<<晄<<榥<<況<<湟<<滉<<æ½¢<<煌<<璜<<皇<<篁<<ç°§<<荒<<蝗<<遑" + "<<隍<<黃<<喤<<媓<<怳<<瑝<<肓<<貺<<鎤" + "&회<<匯<<回<<å»»<<徊<<恢<<悔<<懷<<晦<<會<<檜<<æ·®<<æ¾®<<灰<<獪<<繪<<膾<<茴<<蛔<<誨<<賄<<佪<<栃" + "<<洄<<滙<<盔<<詼<<è¿´<<é ®<<é± " + "&획<<劃<<獲<<嚄" + "&횡<<宖<<æ©«<<鐄<<澋<<鈜<<黌" + "&효<<哮<<嚆<<孝<<效<<斅<<曉<<梟<<涍<<淆<<爻<<肴<<酵<<驍<<傚<<囂<<å´¤<<殽<<熇<<皛<<虓<<餚" + "&후<<侯<<候<<厚<<后<<吼<<喉<<嗅<<帿<<後<<朽<<煦<<珝<<逅<<吽<<喣<<垕<<å  <<涸<<猴<<篌<<è©¡<<譃" + "<<酗<<餱" + "&훈<<勛<<勳<<塤<<壎<<焄<<熏<<燻<<薰<<訓<<暈<<曛<<爋<<獯<<纁<<葷<<鑂" + "&훌<<欻" + "&훙<<薨" + "&훤<<喧<<暄<<煊<<萱<<烜<<è« <<諼" + "&훼<<卉<<喙<<毁<<燬<<芔<<虫<<虺" + "&휘<<彙<<å¾½<<揮<<暉<<煇<<諱<<輝<<麾<<撝<<翬" + "&휴<<休<<携<<烋<<畦<<虧<<咻<<擕<<隳<<髹<<鵂" + "&휼<<恤<<譎<<é·¸<<卹" + "&흉<<兇<<凶<<匈<<æ´¶<<胸<<恟<<胷" + "&흑<<黑" + "&흔<<昕<<欣<<炘<<痕<<很<<å¿»<<掀<<焮<<訢<<釁" + "&흘<<吃<<å±¹<<紇<<訖<<仡<<汔<<疙<<迄<<齕" + "&흠<<欠<<欽<<歆<<廞" + "&흡<<吸<<恰<<æ´½<<翕<<噏<<歙<<潝<<翖" + "&흥<<興" + "&희<<僖<<凞<<喜<<噫<<囍<<姬<<嬉<<希<<憙<<憘<<戱<<晞<<曦<<熙<<熹<<熺<<犧<<禧<<稀<<ç¾²<<咥<<唏" + "<<嘻<<悕<<戲<<暿<<欷<<燹<<爔<<豨<<餼" + "&힐<<è©°<<犵<<纈<<襭<<é ¡<<é» " + } + Version{"1.4"} + } + } +} diff --git a/icuSources/data/coll/ko_KR.txt b/icuSources/data/coll/ko_KR.txt index 14a97114..bc986bbf 100644 --- a/icuSources/data/coll/ko_KR.txt +++ b/icuSources/data/coll/ko_KR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/kok.txt b/icuSources/data/coll/kok.txt new file mode 100644 index 00000000..914a116f --- /dev/null +++ b/icuSources/data/coll/kok.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/kok.xml +// * +// *************************************************************************** +kok{ + Version{"1.1"} +} diff --git a/icuSources/data/coll/lt.txt b/icuSources/data/coll/lt.txt index f59270b2..e14dd25c 100644 --- a/icuSources/data/coll/lt.txt +++ b/icuSources/data/coll/lt.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/lt.xml +// * Source File:/common/collation/lt.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/lt.xml + * ICU source: /xml/collation/lt.xml */ lt{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{ @@ -20,7 +20,7 @@ lt{ "&[before 1]T<Å¡<<<Å " "&[before 1]Æ·<ž<<<Ž" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/lt_LT.txt b/icuSources/data/coll/lt_LT.txt index 4d06f5df..67958a46 100644 --- a/icuSources/data/coll/lt_LT.txt +++ b/icuSources/data/coll/lt_LT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/lv.txt b/icuSources/data/coll/lv.txt index 038a42cd..86a49f42 100644 --- a/icuSources/data/coll/lv.txt +++ b/icuSources/data/coll/lv.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/lv.xml +// * Source File:/common/collation/lv.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/lv.xml + * ICU source: /xml/collation/lv.xml */ lv{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -24,7 +24,7 @@ lv{ "&[before 1]T<Å¡<<<Å " "&[before 1]Æ·<ž<<<Ž" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/lv_LV.txt b/icuSources/data/coll/lv_LV.txt index 2f5822f7..f4532d7e 100644 --- a/icuSources/data/coll/lv_LV.txt +++ b/icuSources/data/coll/lv_LV.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/mk.txt b/icuSources/data/coll/mk.txt index f8f6762d..a53f3192 100644 --- a/icuSources/data/coll/mk.txt +++ b/icuSources/data/coll/mk.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/mk.xml +// * Source File:/common/collation/mk.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/mk.xml + * ICU source: /xml/collation/mk.xml */ mk{ - Version{"1.2"} + Version{"1.16"} collations:alias{"ru/collations"} } diff --git a/icuSources/data/coll/mk_MK.txt b/icuSources/data/coll/mk_MK.txt index 3aa7040f..bfdafe70 100644 --- a/icuSources/data/coll/mk_MK.txt +++ b/icuSources/data/coll/mk_MK.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ml.txt b/icuSources/data/coll/ml.txt index 64cffaf8..2510718a 100644 --- a/icuSources/data/coll/ml.txt +++ b/icuSources/data/coll/ml.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ml.xml +// * Source File:/common/collation/ml.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/ml.xml + */ ml{ - /** - * Draft - */ - Version{"1.2"} + Version{"1.7"} collations{ standard{ Sequence{" [normalization on ]&à´²<à´µ&à´´<à´±&à´¹<ഃ<ം"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/mr.txt b/icuSources/data/coll/mr.txt index 7e8f5eaa..d93cdc88 100644 --- a/icuSources/data/coll/mr.txt +++ b/icuSources/data/coll/mr.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/mr.xml +// * Source File:/common/collation/mr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/mr.xml + * ICU source: /xml/collation/mr.xml */ mr{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{" [normalization on ]"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/mr_IN.txt b/icuSources/data/coll/mr_IN.txt index c37f6cc1..dc468fb7 100644 --- a/icuSources/data/coll/mr_IN.txt +++ b/icuSources/data/coll/mr_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ms.txt b/icuSources/data/coll/ms.txt index 2ad39389..6309a99a 100644 --- a/icuSources/data/coll/ms.txt +++ b/icuSources/data/coll/ms.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ms_BN.txt b/icuSources/data/coll/ms_BN.txt index 857cc0ac..6153a32c 100644 --- a/icuSources/data/coll/ms_BN.txt +++ b/icuSources/data/coll/ms_BN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ms_MY.txt b/icuSources/data/coll/ms_MY.txt index e859feb9..e3ded766 100644 --- a/icuSources/data/coll/ms_MY.txt +++ b/icuSources/data/coll/ms_MY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/mt.txt b/icuSources/data/coll/mt.txt index 75038a3c..7784d4cc 100644 --- a/icuSources/data/coll/mt.txt +++ b/icuSources/data/coll/mt.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/mt.xml +// * Source File:/common/collation/mt.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/mt.xml + * ICU source: /xml/collation/mt.xml */ mt{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -21,7 +21,7 @@ mt{ "&[before 1]i<Ħ<<<ħ" "&[before 1]z<Å»<<<ż" } - Version{"1.2"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/mt_MT.txt b/icuSources/data/coll/mt_MT.txt index e09229fe..3563f0a9 100644 --- a/icuSources/data/coll/mt_MT.txt +++ b/icuSources/data/coll/mt_MT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/nb.txt b/icuSources/data/coll/nb.txt index 673b5877..5fbcf589 100644 --- a/icuSources/data/coll/nb.txt +++ b/icuSources/data/coll/nb.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/nb.xml +// * Source File:/common/collation/nb.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/nb.xml + * ICU source: /xml/collation/nb.xml */ nb{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -20,7 +20,7 @@ nb{ "&Y<<ü<<<Ü<<ű<<<Å°" "&[before 1]ʒ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<Ã¥<<<Å" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/nb_NO.txt b/icuSources/data/coll/nb_NO.txt index 66a1b2ca..6eacabfa 100644 --- a/icuSources/data/coll/nb_NO.txt +++ b/icuSources/data/coll/nb_NO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/nl.txt b/icuSources/data/coll/nl.txt index 993821d5..db2f7d06 100644 --- a/icuSources/data/coll/nl.txt +++ b/icuSources/data/coll/nl.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/nl_BE.txt b/icuSources/data/coll/nl_BE.txt index 2e2397fa..41de8ae7 100644 --- a/icuSources/data/coll/nl_BE.txt +++ b/icuSources/data/coll/nl_BE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/nl_NL.txt b/icuSources/data/coll/nl_NL.txt index 018be58f..78ac690d 100644 --- a/icuSources/data/coll/nl_NL.txt +++ b/icuSources/data/coll/nl_NL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/nn.txt b/icuSources/data/coll/nn.txt index 4cfb2aba..3237d0ab 100644 --- a/icuSources/data/coll/nn.txt +++ b/icuSources/data/coll/nn.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/nn.xml +// * Source File:/common/collation/nn.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/nn.xml + * ICU source: /xml/collation/nn.xml */ nn{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -20,7 +20,7 @@ nn{ "&Y<<ü<<<Ü<<ű<<<Å°" "&[before 1]ʒ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<Ã¥<<<Å" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/nn_NO.txt b/icuSources/data/coll/nn_NO.txt index 25ec816d..40f1cc7f 100644 --- a/icuSources/data/coll/nn_NO.txt +++ b/icuSources/data/coll/nn_NO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/om.txt b/icuSources/data/coll/om.txt index fbd29f7f..251d4283 100644 --- a/icuSources/data/coll/om.txt +++ b/icuSources/data/coll/om.txt @@ -1,23 +1,23 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/om.xml +// * Source File:/common/collation/om.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/om.xml + * ICU source: /xml/collation/om.xml */ om{ - Version{"1.2"} + Version{"1.12"} collations{ standard{ Sequence{ "&Z/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/om_KE.txt b/icuSources/data/coll/om_KE.txt index 0ba8911f..e9dc5a5b 100644 --- a/icuSources/data/coll/om_KE.txt +++ b/icuSources/data/coll/om_KE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/or.txt b/icuSources/data/coll/or.txt index 3052d590..1d39448d 100644 --- a/icuSources/data/coll/or.txt +++ b/icuSources/data/coll/or.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/or.xml +// * Source File:/common/collation/or.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/or.xml + */ or{ - /** - * Draft - */ - Version{"1.2"} + Version{"1.7"} collations{ standard{ Sequence{" [normalization on ]&ହ<କ୍ଷ<ଡ଼<ଢ଼<ୟ<à­±<ଵ<ଂ<ଃ<ଁ<୍<଼"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/pa.txt b/icuSources/data/coll/pa.txt index 3b331478..99a8995f 100644 --- a/icuSources/data/coll/pa.txt +++ b/icuSources/data/coll/pa.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/pa.xml +// * Source File:/common/collation/pa.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/pa.xml + * ICU source: /xml/collation/pa.xml */ pa{ - Version{"1.2"} + Version{"1.22"} collations{ standard{ Sequence{" [normalization on ]"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/pa_IN.txt b/icuSources/data/coll/pa_IN.txt index 9ed1da0c..5575c9de 100644 --- a/icuSources/data/coll/pa_IN.txt +++ b/icuSources/data/coll/pa_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/pl.txt b/icuSources/data/coll/pl.txt index c1ebb6c6..c018b34e 100644 --- a/icuSources/data/coll/pl.txt +++ b/icuSources/data/coll/pl.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/pl.xml +// * Source File:/common/collation/pl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/pl.xml + * ICU source: /xml/collation/pl.xml */ pl{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -23,7 +23,7 @@ pl{ "&S<ś<<<Ś" "&Z<ź<<<Ź<ż<<<Å»" } - Version{"2"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/pl_PL.txt b/icuSources/data/coll/pl_PL.txt index 30d083e6..352a77fa 100644 --- a/icuSources/data/coll/pl_PL.txt +++ b/icuSources/data/coll/pl_PL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ps.txt b/icuSources/data/coll/ps.txt index 8c647a89..8948d24a 100644 --- a/icuSources/data/coll/ps.txt +++ b/icuSources/data/coll/ps.txt @@ -1,38 +1,38 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ps.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/collation/ps.xml - */ -ps{ - Version{"1.2"} - collations{ - standard{ - Sequence{ - " [normalization on ]" - "&َ<<ِ<<ُ<<ً<<ٍ<<ٌ" - "&[before 1]ا<Ø¢" - "&ا<<Ø£<<Ù²<<Ù±<<Ø¥<<Ù³<Ø¡" - "&ت<Ù¼<<Ù¹" - "&ج<ځ<<حٔ" - "&چ<څ" - "&د<ډ<<ڈ" - "&ر<ړ<<ڑ" - "&ژ<ږ" - "&Ú©<<Úª<<ك" - "&Ú«<<Ú¯" - "&Ú¼<<Ú»" - "&و<<ؤ<<ۇ<<ۉ" - "&ه<<<ۀ<<<هٔ<<ە<<ہ<<Ú¾<<Ø©<<ۃ" - "&ی<<ى<<ے<<ي<<ې<<ۍ<<یٔ<<<ىٔ<<<ئ" - "&'\u00A0'<<'\u200C'<<'\u200D'" - } - Version{"1.0"} - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/collation/ps.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/collation/ps.xml + */ +ps{ + Version{"1.20"} + collations{ + standard{ + Sequence{ + " [normalization on ]" + "&َ<<ِ<<ُ<<ً<<ٍ<<ٌ" + "&[before 1]ا<Ø¢" + "&ا<<Ø£<<Ù²<<Ù±<<Ø¥<<Ù³<Ø¡" + "&ت<Ù¼<<Ù¹" + "&ج<ځ<<حٔ" + "&چ<څ" + "&د<ډ<<ڈ" + "&ر<ړ<<ڑ" + "&ژ<ږ" + "&Ú©<<Úª<<ك" + "&Ú«<<Ú¯" + "&Ú¼<<Ú»" + "&و<<ؤ<<ۇ<<ۉ" + "&ه<<<ۀ<<<هٔ<<ە<<ہ<<Ú¾<<Ø©<<ۃ" + "&ی<<ى<<ے<<ي<<ې<<ۍ<<یٔ<<<ىٔ<<<ئ" + "&'\u00A0'<<'\u200C'<<'\u200D'" + } + Version{"1.4"} + } + } +} diff --git a/icuSources/data/coll/ps_AF.txt b/icuSources/data/coll/ps_AF.txt index 69c13495..302e7117 100644 --- a/icuSources/data/coll/ps_AF.txt +++ b/icuSources/data/coll/ps_AF.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/pt.txt b/icuSources/data/coll/pt.txt index 9402fe9f..1d8dd93a 100644 --- a/icuSources/data/coll/pt.txt +++ b/icuSources/data/coll/pt.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/pt_BR.txt b/icuSources/data/coll/pt_BR.txt index 98d162d0..6eba47cd 100644 --- a/icuSources/data/coll/pt_BR.txt +++ b/icuSources/data/coll/pt_BR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/pt_PT.txt b/icuSources/data/coll/pt_PT.txt index 679d66f2..d335c676 100644 --- a/icuSources/data/coll/pt_PT.txt +++ b/icuSources/data/coll/pt_PT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ro.txt b/icuSources/data/coll/ro.txt index 0dd525e3..2c04f794 100644 --- a/icuSources/data/coll/ro.txt +++ b/icuSources/data/coll/ro.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ro.xml +// * Source File:/common/collation/ro.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/ro.xml + * ICU source: /xml/collation/ro.xml */ ro{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{"&A<ă<<<Ă<â<<<Â&D<đ<<<Đ&I<î<<<Î&S<ş=ș<<<Ş=Ș&T<Å£=ț<<<Å¢=Ț&Z<ż<<<Å»"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/ro_RO.txt b/icuSources/data/coll/ro_RO.txt index f78ac4a8..9bcacf87 100644 --- a/icuSources/data/coll/ro_RO.txt +++ b/icuSources/data/coll/ro_RO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/root.txt b/icuSources/data/coll/root.txt index e05f0b4c..2d7dae43 100644 --- a/icuSources/data/coll/root.txt +++ b/icuSources/data/coll/root.txt @@ -1,22 +1,2772 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/root.xml +// * Source File:/common/collation/root.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/root.xml + * ICU source: /xml/collation/root.xml */ root{ - "%%UCARULES":include{"../unidata/UCARules.txt"} - Version{"1.2"} + UCARules:process(uca_rules){"../unidata/UCARules.txt"} + Version{"1.24"} collations{ default{"standard"} standard{ Sequence{""} - Version{"0.0"} + Version{"1.4"} + } + unihan{ + Sequence{ + "&[before 2]a<<ā<<<Ā<<á<<<Á<<ǎ<<<Ǎ<<à<<<À" + "&[before 2]e<<ē<<<Ē<<é<<<É<<ě<<<Ě<<è<<<È" + "&e<<ê̄<<<Ê̄<<ế<<<Ế<<ê̌<<<Ê̌<<ề<<<Ề" + "&[before 2]i<<Ä«<<<Ī<<í<<<Í<<ǐ<<<Ǐ<<ì<<<Ì" + "&[before 2]m</common/collation/ru.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/ru.xml + * ICU source: /xml/collation/ru.xml */ ru{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{"[suppressContractions [Ѐ-џ] ]"} - Version{"1.1"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/ru_RU.txt b/icuSources/data/coll/ru_RU.txt index e768fd98..0fc3747f 100644 --- a/icuSources/data/coll/ru_RU.txt +++ b/icuSources/data/coll/ru_RU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ru_UA.txt b/icuSources/data/coll/ru_UA.txt index b8562158..ca43544d 100644 --- a/icuSources/data/coll/ru_UA.txt +++ b/icuSources/data/coll/ru_UA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sh.txt b/icuSources/data/coll/sh.txt index 01800599..e2d536cc 100644 --- a/icuSources/data/coll/sh.txt +++ b/icuSources/data/coll/sh.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/sh.xml +// * Source File:/common/collation/sh.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/sh.xml + * ICU source: /xml/collation/sh.xml */ sh{ - Version{"1.2"} + Version{"1.20"} collations:alias{"hr/collations"} } diff --git a/icuSources/data/coll/sh_BA.txt b/icuSources/data/coll/sh_BA.txt new file mode 100644 index 00000000..b530d38b --- /dev/null +++ b/icuSources/data/coll/sh_BA.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * validSubLocale of "sh" + */ +sh_BA{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/sh_YU.txt b/icuSources/data/coll/sh_YU.txt index 9d1d2705..ffe0b91c 100644 --- a/icuSources/data/coll/sh_YU.txt +++ b/icuSources/data/coll/sh_YU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sk.txt b/icuSources/data/coll/sk.txt index 4a97b905..2b1aa856 100644 --- a/icuSources/data/coll/sk.txt +++ b/icuSources/data/coll/sk.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/sk.xml +// * Source File:/common/collation/sk.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/sk.xml + * ICU source: /xml/collation/sk.xml */ sk{ - Version{"1.2"} + Version{"1.23"} collations{ standard{ Sequence{ @@ -24,7 +24,7 @@ sk{ "&S<Å¡<<<Å " "&Z<ž<<<Ž<ż<<<Å»" } - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/sk_SK.txt b/icuSources/data/coll/sk_SK.txt index c55525cc..ffe0da4b 100644 --- a/icuSources/data/coll/sk_SK.txt +++ b/icuSources/data/coll/sk_SK.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sl.txt b/icuSources/data/coll/sl.txt index 146f48ec..8038627b 100644 --- a/icuSources/data/coll/sl.txt +++ b/icuSources/data/coll/sl.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/sl.xml +// * Source File:/common/collation/sl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/sl.xml + * ICU source: /xml/collation/sl.xml */ sl{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{"&C<č<<<Č<ć<<<Ć&S<Å¡<<<Å &Z<ž<<<Ž"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/sl_SI.txt b/icuSources/data/coll/sl_SI.txt index 473121a3..1a820f20 100644 --- a/icuSources/data/coll/sl_SI.txt +++ b/icuSources/data/coll/sl_SI.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sq.txt b/icuSources/data/coll/sq.txt index b1516fca..4f65cd48 100644 --- a/icuSources/data/coll/sq.txt +++ b/icuSources/data/coll/sq.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/sq.xml +// * Source File:/common/collation/sq.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/sq.xml + * ICU source: /xml/collation/sq.xml */ sq{ - Version{"1.2"} + Version{"1.20"} collations{ standard{ Sequence{ @@ -26,7 +26,7 @@ sq{ "&[before 1]Y/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sr.txt b/icuSources/data/coll/sr.txt index 35bb7284..80323707 100644 --- a/icuSources/data/coll/sr.txt +++ b/icuSources/data/coll/sr.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/sr.xml +// * Source File:/common/collation/sr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/sr.xml + * ICU source: /xml/collation/sr.xml */ sr{ - Version{"1.2"} + Version{"1.17"} collations:alias{"ru/collations"} } diff --git a/icuSources/data/coll/sr_BA.txt b/icuSources/data/coll/sr_BA.txt new file mode 100644 index 00000000..b85af8aa --- /dev/null +++ b/icuSources/data/coll/sr_BA.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * validSubLocale of "sr" + */ +sr_BA{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/sr_Cyrl.txt b/icuSources/data/coll/sr_Cyrl.txt new file mode 100644 index 00000000..e273868d --- /dev/null +++ b/icuSources/data/coll/sr_Cyrl.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * validSubLocale of "sr" + */ +sr_Cyrl{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/sr_Cyrl_BA.txt b/icuSources/data/coll/sr_Cyrl_BA.txt new file mode 100644 index 00000000..7226aeb6 --- /dev/null +++ b/icuSources/data/coll/sr_Cyrl_BA.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * validSubLocale of "sr" + */ +sr_Cyrl_BA{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/sr_Cyrl_YU.txt b/icuSources/data/coll/sr_Cyrl_YU.txt new file mode 100644 index 00000000..ec71ace0 --- /dev/null +++ b/icuSources/data/coll/sr_Cyrl_YU.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * validSubLocale of "sr" + */ +sr_Cyrl_YU{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/sr_YU.txt b/icuSources/data/coll/sr_YU.txt index 43f0fdd2..b53ad022 100644 --- a/icuSources/data/coll/sr_YU.txt +++ b/icuSources/data/coll/sr_YU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sv.txt b/icuSources/data/coll/sv.txt index d347ea8a..4f67ce34 100644 --- a/icuSources/data/coll/sv.txt +++ b/icuSources/data/coll/sv.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/sv.xml +// * Source File:/common/collation/sv.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/sv.xml + * ICU source: /xml/collation/sv.xml */ sv{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{ @@ -23,7 +23,7 @@ sv{ "&[before 1]ʒ<Ã¥<<<Å<ä<<<Ä<<æ<<<Æ<<ę<<<Ę<ö<<<Ö<<ø<<<Ø<<ő<<<Ő<<œ<<<Œ<<ô" "<<<Ô" } - Version{"2.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/sv_FI.txt b/icuSources/data/coll/sv_FI.txt index 0eb4f4b1..466b14e6 100644 --- a/icuSources/data/coll/sv_FI.txt +++ b/icuSources/data/coll/sv_FI.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/sv_SE.txt b/icuSources/data/coll/sv_SE.txt index a3e2a4eb..42028fc5 100644 --- a/icuSources/data/coll/sv_SE.txt +++ b/icuSources/data/coll/sv_SE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/ta.txt b/icuSources/data/coll/ta.txt index 5bd83a83..018f34ba 100644 --- a/icuSources/data/coll/ta.txt +++ b/icuSources/data/coll/ta.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/ta.xml +// * Source File:/common/collation/ta.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/ta.xml + * ICU source: /xml/collation/ta.xml */ ta{ - Version{"1.2"} + Version{"1.22"} collations{ standard{ Sequence{" [normalization on ]"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/ta_IN.txt b/icuSources/data/coll/ta_IN.txt index 63afd17b..4aded378 100644 --- a/icuSources/data/coll/ta_IN.txt +++ b/icuSources/data/coll/ta_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/te.txt b/icuSources/data/coll/te.txt index 1438cac4..ed1b40de 100644 --- a/icuSources/data/coll/te.txt +++ b/icuSources/data/coll/te.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/te.xml +// * Source File:/common/collation/te.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/te.xml + * ICU source: /xml/collation/te.xml */ te{ - Version{"1.2"} + Version{"1.21"} collations{ standard{ Sequence{" [normalization on ]&à°¹<ఁ<ం<ః<్"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/te_IN.txt b/icuSources/data/coll/te_IN.txt index 04530cca..ed3c801e 100644 --- a/icuSources/data/coll/te_IN.txt +++ b/icuSources/data/coll/te_IN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/th.txt b/icuSources/data/coll/th.txt index f5acbd9d..a3f4cb37 100644 --- a/icuSources/data/coll/th.txt +++ b/icuSources/data/coll/th.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/th.xml +// * Source File:/common/collation/th.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/th.xml + * ICU source: /xml/collation/th.xml */ th{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -23,7 +23,7 @@ th{ "&[last secondary ignorable ]<<<'\u0020'<<<'-'<<<'.'<<<'...'<<<ฯ<<<ๆ<" "<<๏<<<๚<<<๛" } - Version{"3.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/th_TH.txt b/icuSources/data/coll/th_TH.txt index d6b10c0b..ae6e8552 100644 --- a/icuSources/data/coll/th_TH.txt +++ b/icuSources/data/coll/th_TH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/tr.txt b/icuSources/data/coll/tr.txt index e94d5f5c..78802d68 100644 --- a/icuSources/data/coll/tr.txt +++ b/icuSources/data/coll/tr.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/tr.xml +// * Source File:/common/collation/tr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/tr.xml + * ICU source: /xml/collation/tr.xml */ tr{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{"&C<ç<<<Ç&G<ğ<<<Ğ&[before 1]i<ı<</icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/uk.txt b/icuSources/data/coll/uk.txt index e32ea441..1c06e156 100644 --- a/icuSources/data/coll/uk.txt +++ b/icuSources/data/coll/uk.txt @@ -1,20 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/uk.xml +// * Source File:/common/collation/uk.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/uk.xml + * ICU source: /xml/collation/uk.xml */ uk{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{"&Г<ґ<<<Ґ"} - Version{"1.0"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/uk_UA.txt b/icuSources/data/coll/uk_UA.txt index f3906612..77757a32 100644 --- a/icuSources/data/coll/uk_UA.txt +++ b/icuSources/data/coll/uk_UA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/vi.txt b/icuSources/data/coll/vi.txt index c0d4e077..e47aa938 100644 --- a/icuSources/data/coll/vi.txt +++ b/icuSources/data/coll/vi.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/vi.xml +// * Source File:/common/collation/vi.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/vi.xml + * ICU source: /xml/collation/vi.xml */ vi{ - Version{"1.2"} + Version{"1.19"} collations{ standard{ Sequence{ @@ -22,7 +22,7 @@ vi{ "&o<ô<<<Ô<Æ¡<<<Æ " "&u<Æ°<<<Ư" } - Version{"3.1"} + Version{"1.4"} } } } diff --git a/icuSources/data/coll/vi_VN.txt b/icuSources/data/coll/vi_VN.txt index 74e97b7e..b901036a 100644 --- a/icuSources/data/coll/vi_VN.txt +++ b/icuSources/data/coll/vi_VN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/zh.txt b/icuSources/data/coll/zh.txt index 10de0215..91665531 100644 --- a/icuSources/data/coll/zh.txt +++ b/icuSources/data/coll/zh.txt @@ -1,1667 +1,1681 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/zh.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/collation/zh.xml - */ -zh{ - Version{"1.2"} - collations{ - big5han{ - Sequence{ - "&[before 2]a<<ā<<<Ā<<á<<<Á<<ǎ<<<Ǎ<<à<<<À" - "&[before 2]e<<ē<<<Ē<<é<<<É<<ě<<<Ě<<è<<<È" - "&e<<ê̄<<<Ê̄<<ế<<<Ế<<ê̌<<<Ê̌<<ề<<<Ề" - "&[before 2]i<<Ä«<<<Ī<<í<<<Í<<ǐ<<<Ǐ<<ì<<<Ì" - "&[before 2]m</common/collation/zh.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/collation/zh.xml + */ +zh{ + Version{"1.22"} + collations{ + big5han{ + Sequence{ + "&[before 2]a<<ā<<<Ā<<á<<<Á<<ǎ<<<Ǎ<<à<<<À" + "&[before 2]e<<ē<<<Ē<<é<<<É<<ě<<<Ě<<è<<<È" + "&e<<ê̄<<<Ê̄<<ế<<<Ế<<ê̌<<<Ê̌<<ề<<<Ề" + "&[before 2]i<<Ä«<<<Ī<<í<<<Í<<ǐ<<<Ǐ<<ì<<<Ì" + "&[before 2]m</icu-config.xml & build.xml +// * +// *************************************************************************** +/** + * empty locale file for dependency checking + */ +zh_{ + /** + * so genrb doesn't issue warnings + */ + ___{""} +} diff --git a/icuSources/data/coll/zh_CN.txt b/icuSources/data/coll/zh_CN.txt index c563263b..cfb78b02 100644 --- a/icuSources/data/coll/zh_CN.txt +++ b/icuSources/data/coll/zh_CN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/zh_HK.txt b/icuSources/data/coll/zh_HK.txt index 057782a6..6b3d5dc6 100644 --- a/icuSources/data/coll/zh_HK.txt +++ b/icuSources/data/coll/zh_HK.txt @@ -1,13 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/zh_HK.xml +// * Source File:/common/collation/zh_HK.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/zh_HK.xml + */ zh_HK{ - Version{"1.2"} + Version{"1.7"} collations{ default{"stroke"} } diff --git a/icuSources/data/coll/zh_Hant.txt b/icuSources/data/coll/zh_Hant.txt index cd7bc95b..b81fdc74 100644 --- a/icuSources/data/coll/zh_Hant.txt +++ b/icuSources/data/coll/zh_Hant.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/zh_Hant.xml +// * Source File:/common/collation/zh_Hant.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/collation/zh_Hant.xml + * ICU source: /xml/collation/zh_Hant.xml */ zh_Hant{ - Version{"1.2"} + Version{"1.7"} collations{ default{"stroke"} } diff --git a/icuSources/data/coll/zh_MO.txt b/icuSources/data/coll/zh_MO.txt index e0a705b0..6b726df1 100644 --- a/icuSources/data/coll/zh_MO.txt +++ b/icuSources/data/coll/zh_MO.txt @@ -1,13 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/zh_MO.xml +// * Source File:/common/collation/zh_MO.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/zh_MO.xml + */ zh_MO{ - Version{"1.2"} + Version{"1.7"} collations{ default{"stroke"} } diff --git a/icuSources/data/coll/zh_SG.txt b/icuSources/data/coll/zh_SG.txt index 5643361a..bcb34c18 100644 --- a/icuSources/data/coll/zh_SG.txt +++ b/icuSources/data/coll/zh_SG.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** /** diff --git a/icuSources/data/coll/zh_TW.txt b/icuSources/data/coll/zh_TW.txt index c2e7af1e..e5abeeb8 100644 --- a/icuSources/data/coll/zh_TW.txt +++ b/icuSources/data/coll/zh_TW.txt @@ -1,13 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/collation/zh_TW.xml +// * Source File:/common/collation/zh_TW.xml // * // *************************************************************************** +/** + * ICU source: /xml/collation/zh_TW.xml + */ zh_TW{ - Version{"1.2"} + Version{"1.7"} collations{ default{"stroke"} } diff --git a/icuSources/data/coll/zh_TW_STROKE.txt b/icuSources/data/coll/zh_TW_STROKE.txt index dff534fe..6347b073 100644 --- a/icuSources/data/coll/zh_TW_STROKE.txt +++ b/icuSources/data/coll/zh_TW_STROKE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** zh_TW_STROKE{ diff --git a/icuSources/data/coll/zh__PINYIN.txt b/icuSources/data/coll/zh__PINYIN.txt index a65cae15..1e5c45a2 100644 --- a/icuSources/data/coll/zh__PINYIN.txt +++ b/icuSources/data/coll/zh__PINYIN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** zh__PINYIN{ diff --git a/icuSources/data/icu-config.xml b/icuSources/data/icu-config.xml new file mode 100644 index 00000000..2700c5d8 --- /dev/null +++ b/icuSources/data/icu-config.xml @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icuSources/data/icupkg.inc.in b/icuSources/data/icupkg.inc.in index dbb4c218..7873d242 100644 --- a/icuSources/data/icupkg.inc.in +++ b/icuSources/data/icupkg.inc.in @@ -7,8 +7,6 @@ # This Makefile is used to build the ICU's data. # It is included with the -O option to pkgdata. -PLATFORM=@platform@ - top_srcdir=@top_srcdir@ srcdir=@srcdir@ top_builddir=.. @@ -16,11 +14,9 @@ top_builddir=.. include $(top_builddir)/icudefs.mk CPPFLAGS+= -I$(top_builddir)/common -I$(top_srcdir)/common -LDFLAGS=@LDFLAGS@ -LIBS=@LIBS@ +LDFLAGS=@LDFLAGS@ $(PKGDATA_LDFLAGS) exec_prefix=@exec_prefix@ prefix=@prefix@ -program_transform_name=@program_transform_name@ bindir=@bindir@ sbindir=@sbindir@ libexecdir=@libexecdir@ @@ -33,8 +29,6 @@ includedir=@includedir@ oldincludedir=@oldincludedir@ infodir=@infodir@ mandir=@mandir@ -PACKAGE=@PACKAGE@ -VERSION=@VERSION@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -49,12 +43,9 @@ host_alias=@host_alias@ host_cpu=@host_cpu@ host_vendor=@host_vendor@ host_os=@host_os@ -LIB_M=@LIB_M@ CPP=@CPP@ U_HAVE_INTTYPES_H=@U_HAVE_INTTYPES_H@ U_IS_BIG_ENDIAN=@U_IS_BIG_ENDIAN@ -platform=@platform@ - ld_rpath_suf=@ld_rpath_suf@ diff --git a/icuSources/data/locales/af.txt b/icuSources/data/locales/af.txt index da672be6..65b210f7 100644 --- a/icuSources/data/locales/af.txt +++ b/icuSources/data/locales/af.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/af.xml +// * Source File:/common/main/af.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/af.xml + * ICU source: /xml/main/af.xml */ af{ Countries{ @@ -75,6 +75,7 @@ af{ IT{"Italië"} JM{"Jamaika"} JO{"Jordanië"} + JP{"Japan"} KE{"Kenia"} KG{"Kirgisië"} KH{"Kambodja"} @@ -101,7 +102,6 @@ af{ MY{"Maleisië"} MZ{"Mosambiek"} NA{"Namibië"} - NE{"Nigerië"} NL{"Nederland"} NO{"Noorweë"} NR{"Naoeroe"} @@ -121,7 +121,6 @@ af{ SI{"Slowenië"} SK{"Slowakye"} SO{"Somalië"} - SP{"Serwië"} ST{"Sao Tome en Principe"} SV{"Salvador"} SY{"Sirië"} @@ -148,9 +147,19 @@ af{ "Rand", } } - ExemplarCharacters{"[a-záéèâêîôûëïöʼn]"} + ExemplarCharacters{"[a á â b-e é è ê ë f-i î ï j-o ô ö p-u û v-z ʼn]"} Languages{ af{"Afrikaans"} + de{"Duits"} + en{"Engels"} + es{"Spaans"} + fr{"Frans"} + he{"Hebreeus"} + it{"Italiaans"} + ja{"Japannees"} + pt{"Portugees"} + ru{"Russies"} + zh{"Sjinees"} } LocaleScript{ "Latn", @@ -166,16 +175,27 @@ af{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.48"} calendar{ gregorian{ AmPmMarkers{ "vm.", "nm.", } + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } dayNames{ format{ abbreviated{ @@ -204,6 +224,38 @@ af{ "n.C.", } } + fields{ + day{ + dn{"Dag"} + } + era{ + dn{"Tydperk"} + } + hour{ + dn{"Uur"} + } + minute{ + dn{"Minuut"} + } + month{ + dn{"Maand"} + } + second{ + dn{"Sekonde"} + } + week{ + dn{"Week"} + } + weekday{ + dn{"Dag van die week"} + } + year{ + dn{"Jaar"} + } + zone{ + dn{"Tydsone"} + } + } monthNames{ format{ abbreviated{ @@ -236,6 +288,22 @@ af{ } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "1ste kwartaal", + "2de kwartaal", + "3de kwartaal", + "4de kwartaal", + } + } + } } } } diff --git a/icuSources/data/locales/af_ZA.txt b/icuSources/data/locales/af_ZA.txt index 0f6d11f3..1a740e22 100644 --- a/icuSources/data/locales/af_ZA.txt +++ b/icuSources/data/locales/af_ZA.txt @@ -1,21 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/af_ZA.xml +// * Source File:/common/main/af_ZA.xml // * // *************************************************************************** af_ZA{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/am.txt b/icuSources/data/locales/am.txt index 2ab50a94..dd8faa64 100644 --- a/icuSources/data/locales/am.txt +++ b/icuSources/data/locales/am.txt @@ -1,360 +1,492 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/am.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/am.xml - */ -am{ - Countries{ - AD{"አንዶራ"} - AE{"የተባበሩት አረብ ኤምሬትስ"} - AL{"አልባኒያ"} - AM{"አርሜኒያ"} - AN{"ኔዘርላንድስ አንቲልስ"} - AR{"አርጀንቲና"} - AT{"ኦስትሪያ"} - AU{"አውስትሬሊያ"} - AZ{"አዘርባጃን"} - BA{"ቦስኒያ እና ሄርዞጎቪኒያ"} - BB{"ባርቤዶስ"} - BE{"ቤልጄም"} - BG{"ቡልጌሪያ"} - BH{"ባህሬን"} - BM{"ቤርሙዳ"} - BO{"ቦሊቪያ"} - BR{"ብራዚል"} - BT{"ቡህታን"} - BY{"ቤላሩስ"} - BZ{"ቤሊዘ"} - CD{"ኮንጎ"} - CF{"የመካከለኛው አፍሪካ ሪፐብሊክ"} - CH{"ስዊዘርላንድ"} - CL{"ቺሊ"} - CM{"ካሜሩን"} - CN{"ቻይና"} - CO{"ኮሎምቢያ"} - CV{"ኬፕ ቬርዴ"} - CY{"ሳይፕረስ"} - CZ{"ቼክ ሪፑብሊክ"} - DE{"ጀርመን"} - DK{"ዴንማርክ"} - DM{"ዶሚኒካ"} - DO{"ዶሚኒክ ሪፑብሊክ"} - DZ{"አልጄሪያ"} - EC{"ኢኳዶር"} - EE{"ኤስቶኒያ"} - EG{"ግብጽ"} - EH{"ምዕራባዊ ሳህራ"} - ER{"ኤርትራ"} - ES{"ስፔን"} - ET{"ኢትዮጵያ"} - FI{"ፊንላንድ"} - FJ{"ፊጂ"} - FM{"ሚክሮኔዢያ"} - GB{"እንግሊዝ"} - GE{"ጆርጂያ"} - GF{"የፈረንሳይ ጉዊአና"} - GM{"ጋምቢያ"} - GN{"ጊኒ"} - GQ{"ኢኳቶሪያል ጊኒ"} - GR{"ግሪክ"} - GW{"ቢሳዎ"} - GY{"ጉያና"} - HR{"ክሮኤሽያ"} - HT{"ሀይቲ"} - HU{"ሀንጋሪ"} - ID{"ኢንዶኔዢያ"} - IE{"አየርላንድ"} - IL{"እስራኤል"} - IN{"ህንድ"} - IQ{"ኢራቅ"} - IS{"አይስላንድ"} - IT{"ጣሊያን"} - JM{"ጃማይካ"} - JO{"ጆርዳን"} - JP{"ጃፓን"} - KH{"ካምቦዲያ"} - KM{"ኮሞሮስ"} - KP{"ደቡብ ኮሪያ"} - KR{"ሰሜን ኮሪያ"} - KW{"ክዌት"} - LB{"ሊባኖስ"} - LT{"ሊቱዌኒያ"} - LV{"ላትቪያ"} - LY{"ሊቢያ"} - MA{"ሞሮኮ"} - MD{"ሞልዶቫ"} - MK{"ማከዶኒያ"} - MN{"ሞንጎሊያ"} - MR{"ሞሪቴኒያ"} - MT{"ማልታ"} - MU{"ማሩሸስ"} - MX{"ሜክሲኮ"} - MY{"ማሌዢያ"} - NA{"ናሚቢያ"} - NC{"ኒው ካሌዶኒያ"} - NG{"ናይጄሪያ"} - NL{"ኔዘርላንድ"} - NO{"ኖርዌ"} - NP{"ኔፓል"} - NZ{"ኒው ዚላንድ"} - PE{"ፔሩ"} - PF{"የፈረንሳይ ፖሊኔዢያ"} - PG{"ፓፑዋ ኒው ጊኒ"} - PL{"ፖላንድ"} - PR{"ፖርታ ሪኮ"} - RO{"ሮሜኒያ"} - RU{"ራሺያ"} - SA{"ሳውድአረቢያ"} - SD{"ሱዳን"} - SE{"ስዊድን"} - SG{"ሲንጋፖር"} - SI{"ስሎቬኒያ"} - SK{"ስሎቫኪያ"} - SN{"ሴኔጋል"} - SO{"ሱማሌ"} - SP{"ሰርቢያ"} - SY{"ሲሪያ"} - TD{"ቻድ"} - TF{"የፈረንሳይ ደቡባዊ ግዛቶች"} - TH{"ታይላንድ"} - TJ{"ታጃኪስታን"} - TL{"ምስራቅ ቲሞር"} - TN{"ቱኒዚያ"} - TR{"ቱርክ"} - TT{"ትሪኒዳድ እና ቶባጎ"} - TZ{"ታንዛኒያ"} - UG{"ዩጋንዳ"} - US{"አሜሪካ"} - UZ{"ዩዝበኪስታን"} - VE{"ቬንዙዌላ"} - VG{"የእንግሊዝ ድንግል ደሴቶች"} - VI{"የአሜሪካ ቨርጂን ደሴቶች"} - YE{"የመን"} - YU{"ዩጎዝላቪያ"} - ZA{"ደቡብ አፍሪካ"} - ZM{"ዛምቢያ"} - } - ExemplarCharacters{"[:Ethi:]"} - Languages{ - aa{"አፋርኛ"} - ab{"አብሐዚኛ"} - af{"አፍሪቃንስኛ"} - am{"አማርኛ"} - ar{"ዐርቢኛ"} - as{"አሳሜዛዊ"} - ay{"አያማርኛ"} - az{"አዜርባይጃንኛ"} - ba{"ባስኪርኛ"} - be{"ቤላራሻኛ"} - bg{"ቡልጋሪኛ"} - bh{"ቢሃሪ"} - bi{"ቢስላምኛ"} - bn{"በንጋሊኛ"} - bo{"ትበትንኛ"} - br{"ብሬቶንኛ"} - byn{"ብሊን"} - ca{"ካታላንኛ"} - co{"ኮርሲካኛ"} - cs{"ቼክኛ"} - cy{"ወልሽ"} - da{"ዴኒሽ"} - de{"ጀርመን"} - dz{"ድዞንግኻኛ"} - el{"ግሪክኛ"} - en{"እንግሊዝኛ"} - eo{"ኤስፐራንቶ"} - es{"ስፓኒሽ"} - et{"ኤስቶኒአን"} - eu{"ባስክኛ"} - fa{"ፐርሲያኛ"} - fi{"ፊኒሽ"} - fj{"ፊጂኛ"} - fo{"ፋሮኛ"} - fr{"ፈረንሳይኛ"} - fy{"ፍሪስኛ"} - ga{"አይሪሽ"} - gd{"እስኮትስ ጌልክኛ"} - gez{"ግዕዝኛ"} - gl{"ጋለጋኛ"} - gn{"ጓራኒኛ"} - gu{"ጉጃርቲኛ"} - ha{"ሃውሳኛ"} - he{"ዕብራስጥ"} - hi{"ሐንድኛ"} - hr{"ክሮሽያንኛ"} - hu{"ሀንጋሪኛ"} - hy{"አርመናዊ"} - ia{"ኢንቴርሊንጓ"} - id{"እንዶኒሲኛ"} - ie{"እንተርሊንግወ"} - ik{"እኑፒያቅኛ"} - is{"አይስላንድኛ"} - it{"ጣሊያንኛ"} - iu{"እኑክቲቱትኛ"} - ja{"ጃፓንኛ"} - jv{"ጃቫንኛ"} - ka{"ጊዮርጊያን"} - kk{"ካዛክኛ"} - kl{"ካላሊሱትኛ"} - km{"ክመርኛ"} - kn{"ካናዳኛ"} - ko{"ኮሪያኛ"} - ks{"ካሽሚርኛ"} - ku{"ኩርድሽኛ"} - ky{"ኪርጊዝኛ"} - la{"ላቲንኛ"} - ln{"ሊንጋላኛ"} - lo{"ላውስኛ"} - lt{"ሊቱአኒያን"} - lv{"ላትቪያን"} - mg{"ማላጋስኛ"} - mi{"ማዮሪኛ"} - mk{"ማከዶኒኛ"} - ml{"ማላያላምኛ"} - mn{"ሞንጎላዊኛ"} - mo{"ሞልዳቫዊና"} - mr{"ማራዚኛ"} - ms{"ማላይኛ"} - mt{"ማልቲስኛ"} - my{"ቡርማኛ"} - na{"ናኡሩ"} - ne{"ኔፓሊኛ"} - nl{"ደች"} - no{"ኖርዌጂያን"} - oc{"ኦኪታንኛ"} - om{"ኦሮምኛ"} - or{"ኦሪያኛ"} - pa{"ፓንጃቢኛ"} - pl{"ፖሊሽ"} - ps{"ፑሽቶኛ"} - pt{"ፖርቱጋሊኛ"} - qu{"ኵቿኛ"} - rm{"ሮማንስ"} - rn{"ሩንዲኛ"} - ro{"ሮማኒያን"} - ru{"ራሽኛ"} - rw{"ኪንያርዋንድኛ"} - sa{"ሳንስክሪትኛ"} - sd{"ሲንድሂኛ"} - sg{"ሳንጎኛ"} - si{"ስንሃልኛ"} - sid{"ሲዳምኛ"} - sk{"ስሎቫክኛ"} - sl{"ስሎቪኛ"} - sm{"ሳሞአኛ"} - sn{"ሾናኛ"} - so{"ሱማልኛ"} - sq{"ልቤኒኛ"} - sr{"ሰርቢኛ"} - ss{"ስዋቲኛ"} - st{"ሶዞኛ"} - su{"ሱዳንኛ"} - sv{"ስዊድንኛ"} - sw{"ስዋሂሊኛ"} - ta{"ታሚልኛ"} - te{"ተሉጉኛ"} - tg{"ታጂኪኛ"} - th{"ታይኛ"} - ti{"ትግርኛ"} - tig{"ትግረ"} - tk{"ቱርክመንኛ"} - tl{"ታጋሎገኛ"} - tn{"ጽዋናዊኛ"} - to{"ቶንጋ"} - tr{"ቱርክኛ"} - ts{"ጾንጋኛ"} - tt{"ታታርኛ"} - tw{"ትዊኛ"} - ug{"ኡዊግሁርኛ"} - uk{"ዩክረኒኛ"} - ur{"ኡርዱኛ"} - uz{"ኡዝበክኛ"} - vi{"ቪትናምኛ"} - vo{"ቮላፑክኛ"} - wo{"ዎሎፍኛ"} - xh{"ዞሳኛ"} - yi{"ይዲሻዊኛ"} - yo{"ዮሩባዊኛ"} - za{"ዡዋንግኛ"} - zh{"ቻይንኛ"} - zu{"ዙሉኛ"} - } - LocaleScript{ - "Ethi", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 7, - 1, - } - dayNames{ - format{ - abbreviated{ - "እሑድ", - "ሰኞ", - "ማክሰ", - "ረቡዕ", - "ሐሙስ", - "ዓርብ", - "ቅዳሜ", - } - wide{ - "እሑድ", - "ሰኞ", - "ማክሰኞ", - "ረቡዕ", - "ሐሙስ", - "ዓርብ", - "ቅዳሜ", - } - } - } - eras{ - abbreviated{ - "ዓ/ዓ", - "ዓ/ም", - } - } - monthNames{ - format{ - abbreviated{ - "ጃንዩ", - "ፌብሩ", - "ማርች", - "ኤፕረ", - "ሜይ", - "ጁን", - "ጁላይ", - "ኦገስ", - "ሴፕቴ", - "ኦክተ", - "ኖቬም", - "ዲሴም", - } - wide{ - "ጃንዩወሪ", - "ፌብሩወሪ", - "ማርች", - "ኤፕረል", - "ሜይ", - "ጁን", - "ጁላይ", - "ኦገስት", - "ሴፕቴምበር", - "ኦክተውበር", - "ኖቬምበር", - "ዲሴምበር", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/am.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/am.xml + */ +am{ + Countries{ + AD{"አንዶራ"} + AE{"የተባበሩት አረብ ኤምሬትስ"} + AL{"አልባኒያ"} + AM{"አርሜኒያ"} + AN{"ኔዘርላንድስ አንቲልስ"} + AR{"አርጀንቲና"} + AT{"ኦስትሪያ"} + AU{"አውስትሬሊያ"} + AZ{"አዘርባጃን"} + BA{"ቦስኒያ እና ሄርዞጎቪኒያ"} + BB{"ባርቤዶስ"} + BE{"ቤልጄም"} + BG{"ቡልጌሪያ"} + BH{"ባህሬን"} + BM{"ቤርሙዳ"} + BO{"ቦሊቪያ"} + BR{"ብራዚል"} + BT{"ቡህታን"} + BY{"ቤላሩስ"} + BZ{"ቤሊዘ"} + CD{"ኮንጎ"} + CF{"የመካከለኛው አፍሪካ ሪፐብሊክ"} + CH{"ስዊዘርላንድ"} + CL{"ቺሊ"} + CM{"ካሜሩን"} + CN{"ቻይና"} + CO{"ኮሎምቢያ"} + CV{"ኬፕ ቬርዴ"} + CY{"ሳይፕረስ"} + CZ{"ቼክ ሪፑብሊክ"} + DE{"ጀርመን"} + DK{"ዴንማርክ"} + DM{"ዶሚኒካ"} + DO{"ዶሚኒክ ሪፑብሊክ"} + DZ{"አልጄሪያ"} + EC{"ኢኳዶር"} + EE{"ኤስቶኒያ"} + EG{"ግብጽ"} + EH{"ምዕራባዊ ሳህራ"} + ER{"ኤርትራ"} + ES{"ስፔን"} + ET{"ኢትዮጵያ"} + FI{"ፊንላንድ"} + FJ{"ፊጂ"} + FM{"ሚክሮኔዢያ"} + GB{"እንግሊዝ"} + GE{"ጆርጂያ"} + GF{"የፈረንሳይ ጉዊአና"} + GM{"ጋምቢያ"} + GN{"ጊኒ"} + GQ{"ኢኳቶሪያል ጊኒ"} + GR{"ግሪክ"} + GW{"ቢሳዎ"} + GY{"ጉያና"} + HR{"ክሮኤሽያ"} + HT{"ሀይቲ"} + HU{"ሀንጋሪ"} + ID{"ኢንዶኔዢያ"} + IE{"አየርላንድ"} + IL{"እስራኤል"} + IN{"ህንድ"} + IQ{"ኢራቅ"} + IS{"አይስላንድ"} + IT{"ጣሊያን"} + JM{"ጃማይካ"} + JO{"ጆርዳን"} + JP{"ጃፓን"} + KH{"ካምቦዲያ"} + KM{"ኮሞሮስ"} + KW{"ክዌት"} + LB{"ሊባኖስ"} + LT{"ሊቱዌኒያ"} + LV{"ላትቪያ"} + LY{"ሊቢያ"} + MA{"ሞሮኮ"} + MD{"ሞልዶቫ"} + MK{"ማከዶኒያ"} + MN{"ሞንጎሊያ"} + MR{"ሞሪቴኒያ"} + MT{"ማልታ"} + MU{"ማሩሸስ"} + MX{"ሜክሲኮ"} + MY{"ማሌዢያ"} + NA{"ናሚቢያ"} + NC{"ኒው ካሌዶኒያ"} + NG{"ናይጄሪያ"} + NL{"ኔዘርላንድ"} + NO{"ኖርዌ"} + NP{"ኔፓል"} + NZ{"ኒው ዚላንድ"} + PE{"ፔሩ"} + PF{"የፈረንሳይ ፖሊኔዢያ"} + PG{"ፓፑዋ ኒው ጊኒ"} + PL{"ፖላንድ"} + PR{"ፖርታ ሪኮ"} + RO{"ሮሜኒያ"} + RU{"ራሺያ"} + SA{"ሳውድአረቢያ"} + SD{"ሱዳን"} + SE{"ስዊድን"} + SG{"ሲንጋፖር"} + SI{"ስሎቬኒያ"} + SK{"ስሎቫኪያ"} + SN{"ሴኔጋል"} + SO{"ሱማሌ"} + SY{"ሲሪያ"} + TD{"ቻድ"} + TF{"የፈረንሳይ ደቡባዊ ግዛቶች"} + TH{"ታይላንድ"} + TJ{"ታጃኪስታን"} + TL{"ምስራቅ ቲሞር"} + TN{"ቱኒዚያ"} + TR{"ቱርክ"} + TT{"ትሪኒዳድ እና ቶባጎ"} + TZ{"ታንዛኒያ"} + UG{"ዩጋንዳ"} + US{"አሜሪካ"} + UZ{"ዩዝበኪስታን"} + VE{"ቬንዙዌላ"} + VG{"የእንግሊዝ ድንግል ደሴቶች"} + VI{"የአሜሪካ ቨርጂን ደሴቶች"} + YE{"የመን"} + ZA{"ደቡብ አፍሪካ"} + ZM{"ዛምቢያ"} + } + ExemplarCharacters{"[፟ ሀ-ሆ ለ-ቆ ቈ ቊ-ቍ በ-ኆ ኈ ኊ-ኍ ነ-ኮ ኰ ኲ-ኵ ኸ-ኾ ወ-ዎ ዐ-ዖ ዘ-ዷ ጀ-ጎ ጐ ጒ-ጕ ጠ-ፚ]"} + Languages{ + aa{"አፋርኛ"} + ab{"አብሐዚኛ"} + af{"አፍሪቃንስኛ"} + am{"አማርኛ"} + ar{"ዐርቢኛ"} + as{"አሳሜዛዊ"} + ay{"አያማርኛ"} + az{"አዜርባይጃንኛ"} + ba{"ባስኪርኛ"} + be{"ቤላራሻኛ"} + bg{"ቡልጋሪኛ"} + bh{"ቢሃሪ"} + bi{"ቢስላምኛ"} + bn{"በንጋሊኛ"} + bo{"ትበትንኛ"} + br{"ብሬቶንኛ"} + byn{"ብሊን"} + ca{"ካታላንኛ"} + co{"ኮርሲካኛ"} + cs{"ቼክኛ"} + cy{"ወልሽ"} + da{"ዴኒሽ"} + de{"ጀርመን"} + dz{"ድዞንግኻኛ"} + el{"ግሪክኛ"} + en{"እንግሊዝኛ"} + eo{"ኤስፐራንቶ"} + es{"ስፓኒሽ"} + et{"ኤስቶኒአን"} + eu{"ባስክኛ"} + fa{"ፐርሲያኛ"} + fi{"ፊኒሽ"} + fj{"ፊጂኛ"} + fo{"ፋሮኛ"} + fr{"ፈረንሳይኛ"} + fy{"ፍሪስኛ"} + ga{"አይሪሽ"} + gd{"እስኮትስ ጌልክኛ"} + gez{"ግዕዝኛ"} + gl{"ጋለጋኛ"} + gn{"ጓራኒኛ"} + gu{"ጉጃርቲኛ"} + ha{"ሃውሳኛ"} + he{"ዕብራስጥ"} + hi{"ሐንድኛ"} + hr{"ክሮሽያንኛ"} + hu{"ሀንጋሪኛ"} + hy{"አርመናዊ"} + ia{"ኢንቴርሊንጓ"} + id{"እንዶኒሲኛ"} + ie{"እንተርሊንግወ"} + ik{"እኑፒያቅኛ"} + is{"አይስላንድኛ"} + it{"ጣሊያንኛ"} + iu{"እኑክቲቱትኛ"} + ja{"ጃፓንኛ"} + jv{"ጃቫንኛ"} + ka{"ጊዮርጊያን"} + kk{"ካዛክኛ"} + kl{"ካላሊሱትኛ"} + km{"ክመርኛ"} + kn{"ካናዳኛ"} + ko{"ኮሪያኛ"} + ks{"ካሽሚርኛ"} + ku{"ኩርድሽኛ"} + ky{"ኪርጊዝኛ"} + la{"ላቲንኛ"} + ln{"ሊንጋላኛ"} + lo{"ላውስኛ"} + lt{"ሊቱአኒያን"} + lv{"ላትቪያን"} + mg{"ማላጋስኛ"} + mi{"ማዮሪኛ"} + mk{"ማከዶኒኛ"} + ml{"ማላያላምኛ"} + mn{"ሞንጎላዊኛ"} + mo{"ሞልዳቫዊና"} + mr{"ማራዚኛ"} + ms{"ማላይኛ"} + mt{"ማልቲስኛ"} + my{"ቡርማኛ"} + na{"ናኡሩ"} + ne{"ኔፓሊኛ"} + nl{"ደች"} + no{"ኖርዌጂያን"} + oc{"ኦኪታንኛ"} + om{"ኦሮምኛ"} + or{"ኦሪያኛ"} + pa{"ፓንጃቢኛ"} + pl{"ፖሊሽ"} + ps{"ፑሽቶኛ"} + pt{"ፖርቱጋሊኛ"} + qu{"ኵቿኛ"} + rm{"ሮማንስ"} + rn{"ሩንዲኛ"} + ro{"ሮማኒያን"} + ru{"ራሽኛ"} + rw{"ኪንያርዋንድኛ"} + sa{"ሳንስክሪትኛ"} + sd{"ሲንድሂኛ"} + sg{"ሳንጎኛ"} + si{"ስንሃልኛ"} + sid{"ሲዳምኛ"} + sk{"ስሎቫክኛ"} + sl{"ስሎቪኛ"} + sm{"ሳሞአኛ"} + sn{"ሾናኛ"} + so{"ሱማልኛ"} + sq{"ልቤኒኛ"} + sr{"ሰርቢኛ"} + ss{"ስዋቲኛ"} + st{"ሶዞኛ"} + su{"ሱዳንኛ"} + sv{"ስዊድንኛ"} + sw{"ስዋሂሊኛ"} + ta{"ታሚልኛ"} + te{"ተሉጉኛ"} + tg{"ታጂኪኛ"} + th{"ታይኛ"} + ti{"ትግርኛ"} + tig{"ትግረ"} + tk{"ቱርክመንኛ"} + tl{"ታጋሎገኛ"} + tn{"ጽዋናዊኛ"} + to{"ቶንጋ"} + tr{"ቱርክኛ"} + ts{"ጾንጋኛ"} + tt{"ታታርኛ"} + tw{"ትዊኛ"} + ug{"ኡዊግሁርኛ"} + uk{"ዩክረኒኛ"} + ur{"ኡርዱኛ"} + uz{"ኡዝበክኛ"} + vi{"ቪትናምኛ"} + vo{"ቮላፑክኛ"} + wo{"ዎሎፍኛ"} + xh{"ዞሳኛ"} + yi{"ይዲሻዊኛ"} + yo{"ዮሩባዊኛ"} + za{"ዡዋንግኛ"} + zh{"ቻይንኛ"} + zu{"ዙሉኛ"} + } + LocaleScript{ + "Ethi", + } + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + NumberPatterns{ + "#,##0.###", + "¤ #,##0.00", + "#,##0%", + "#E0", + } + Version{"1.56"} + calendar{ + ethiopic{ + monthNames{ + format{ + abbreviated{ + "መስከ", + "ጥቅምት", + "ኅዳር", + "ታኅሣሥ", + "ጥር", + "የካቲ", + "መጋቢት", + "ሚያዝያ", + "ግንቦ", + "ሰኔ", + "ሐምሌ", + "ነሐሴ", + "ጳጉሜን", + } + wide{ + "መስከረም", + "ጥቅምት", + "ኅዳር", + "ታኅሣሥ", + "ጥር", + "የካቲት", + "መጋቢት", + "ሚያዝያ", + "ግንቦት", + "ሰኔ", + "ሐምሌ", + "ነሐሴ", + "ጳጉሜን", + } + } + } + } + gregorian{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "እሑድ", + "ሰኞ", + "ማክሰ", + "ረቡዕ", + "ሐሙስ", + "ዓርብ", + "ቅዳሜ", + } + wide{ + "እሑድ", + "ሰኞ", + "ማክሰኞ", + "ረቡዕ", + "ሐሙስ", + "ዓርብ", + "ቅዳሜ", + } + } + stand-alone{ + narrow{ + "እ", + "ሰ", + "ማ", + "ረ", + "ሐ", + "ዓ", + "ቅ", + } + } + } + eras{ + abbreviated{ + "ዓ/ዓ", + "ዓ/ም", + } + } + fields{ + day{ + dn{"ቀን"} + } + era{ + dn{"ዘመን"} + } + hour{ + dn{"ሰዓት"} + } + minute{ + dn{"ደቂቃ"} + } + month{ + dn{"ወር"} + } + week{ + dn{"ሳምንት"} + } + year{ + dn{"ዓመት"} + } + } + monthNames{ + format{ + abbreviated{ + "ጃንዩ", + "ፌብሩ", + "ማርች", + "ኤፕረ", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስ", + "ሴፕቴ", + "ኦክተ", + "ኖቬም", + "ዲሴም", + } + wide{ + "ጃንዩወሪ", + "ፌብሩወሪ", + "ማርች", + "ኤፕረል", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስት", + "ሴፕቴምበር", + "ኦክተውበር", + "ኖቬምበር", + "ዲሴምበር", + } + } + stand-alone{ + narrow{ + "ጃ", + "ፌ", + "ማ", + "ኤ", + "ሜ", + "ጁ", + "ጁ", + "ኦ", + "ሴ", + "ኦ", + "ኖ", + "ዲ", + } + } + } + } + islamic{ + monthNames{ + format{ + wide{ + "ሙሀረም", + "ሳፈር", + "ረቢዑል አወል", + "ረቢዑል አኺር", + "ጀማደል አወል", + "ጀማደል አኺር", + "ረጀብ", + "ሻእባን", + "ረመዳን", + "ሸዋል", + "ዙልቂዳህ", + "ዙልሂጃህ", + } + } + } + } + } + zoneStrings{ + hourFormat{"+HHmm;-HHmm"} + } +} diff --git a/icuSources/data/locales/am_ET.txt b/icuSources/data/locales/am_ET.txt index 7a5e01a7..fb4f6d60 100644 --- a/icuSources/data/locales/am_ET.txt +++ b/icuSources/data/locales/am_ET.txt @@ -1,44 +1,44 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/am_ET.xml +// * Source File:/common/main/am_ET.xml // * // *************************************************************************** am_ET{ Currencies{ - ETB{ - "$", - "ETB", - } USD{ "US$", "USD", } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ AmPmMarkers{ - "ጡዋት", + "AM", "ከሳዓት", } + DateTimeElements:intvector{ + 7, + 1, + } DateTimePatterns{ - "hh:mm:ss a", - "hh:mm:ss a", - "h:mm:ss a", - "h:mm a", + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", "EEEE፣ dd MMMM ቀን yyyy G", "dd MMMM yyyy", "dd-MMM-yy", - "dd/MM/yy", + "yy/MM/dd", "{1} {0}", } } diff --git a/icuSources/data/locales/ar.txt b/icuSources/data/locales/ar.txt index 8cd7c964..9fc8201c 100644 --- a/icuSources/data/locales/ar.txt +++ b/icuSources/data/locales/ar.txt @@ -1,577 +1,2143 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ar.xml - */ -ar{ - Countries{ - AD{"اندورا"} - AE{"الامارات العربية المتحدة"} - AF{"افغانستان"} - AG{"انتيغوا وبربودا"} - AI{"البانيا"} - AM{"ارمينيا"} - AO{"انغولا"} - AR{"الارجنتين"} - AT{"النمسا"} - AU{"استراليا"} - AZ{"آذربيجان"} - BA{"البوسنة والهرسك"} - BB{"بربادوس"} - BD{"بنغلاديش"} - BE{"بلجيكا"} - BF{"بوركينا فاسو"} - BG{"بلغاريا"} - BH{"البحرين"} - BI{"بوروندي"} - BJ{"بنين"} - BN{"بروناي"} - BO{"بوليفيا"} - BR{"البرازيل"} - BS{"البهاما"} - BT{"بوتان"} - BW{"بوتسوانا"} - BY{"روسيا البيضاء"} - BZ{"بليز"} - CA{"كندا"} - CF{"جمهورية افريقيا الوسطى"} - CG{"الكونغو"} - CH{"سويسرا"} - CL{"تشيلي"} - CM{"الكاميرون"} - CN{"الصين"} - CO{"كولومبيا"} - CR{"كوستاريكا"} - CU{"كوبا"} - CV{"الرأس الاخضر"} - CY{"قبرص"} - CZ{"جمهورية التشيك"} - DE{"المانيا"} - DJ{"جيبوتي"} - DK{"الدانمرك"} - DM{"دومينيكا"} - DO{"الجمهورية الدومينيكية"} - DZ{"الجزائر"} - EC{"اكوادور"} - EE{"استونيا"} - EG{"مصر"} - EH{"الصحراء الغربية"} - ER{"ارتيريا"} - ES{"اسبانيا"} - ET{"اثيوبيا"} - FI{"فنلندا"} - FJ{"فيجي"} - FM{"ميكرونيزيا"} - FR{"فرنسا"} - GA{"غابون"} - GB{"المملكة المتحدة"} - GD{"غرينادا"} - GE{"جورجيا"} - GH{"غانا"} - GM{"غامبيا"} - GN{"غينيا"} - GQ{"غينيا الاستوائية"} - GR{"اليونان"} - GT{"غواتيمالا"} - GW{"غينيا بيساو"} - GY{"غوايانا"} - HN{"هندوراس"} - HR{"كرواتيا"} - HT{"هايتي"} - HU{"هنغاريا"} - ID{"اندونيسيا"} - IE{"ايرلندا"} - IL{"اسرائيل"} - IN{"الهند"} - IQ{"العراق"} - IR{"ايران"} - IS{"ايسلندا"} - IT{"ايطاليا"} - JM{"جامايكا"} - JO{"الاردن"} - JP{"اليابان"} - KE{"كينيا"} - KG{"قيرغيزستان"} - KH{"كمبوديا"} - KI{"كيريباتي"} - KM{"جزر القمر"} - KN{"سانت كيتس ونيفيس"} - KP{"كوريا الشمالية"} - KR{"كوريا الجنوبية"} - KW{"الكويت"} - KZ{"كازاخستان"} - LA{"لاوس"} - LB{"لبنان"} - LC{"سانت لوسيا"} - LI{"ليختنشتاين"} - LK{"سري لانكا"} - LR{"ليبيريا"} - LS{"ليسوتو"} - LT{"ليتوانيا"} - LU{"لوكسومبرغ"} - LV{"لاتفيا"} - LY{"ليبيا"} - MA{"المغرب"} - MC{"موناكو"} - MD{"مولدوفا"} - MG{"مدغشقر"} - MH{"جزر المارشال"} - MK{"مقدونيا"} - ML{"مالي"} - MM{"ميانمار"} - MN{"منغوليا"} - MR{"موريتانيا"} - MT{"مالطة"} - MU{"موريشوس"} - MV{"مالديف"} - MW{"ملاوي"} - MX{"المكسيك"} - MY{"ماليزيا"} - MZ{"موزمبيق"} - NA{"ناميبيا"} - NE{"النيجر"} - NG{"نيجيريا"} - NI{"نيكاراغوا"} - NL{"هولندا"} - NO{"النرويج"} - NP{"النيبال"} - NR{"ناورو"} - NZ{"زيلندا الجديدة"} - OM{"عمان"} - PA{"بنما"} - PE{"بيرو"} - PG{"بابوا غينيا الجديدة"} - PH{"الفيلبين"} - PK{"الباكستان"} - PL{"بولندا"} - PT{"البرتغال"} - PW{"بالاو"} - PY{"باراغواي"} - QA{"قطر"} - RO{"رومانيا"} - RU{"روسيا"} - RW{"رواندا"} - SA{"العربية السعودية"} - SB{"جزر سليمان"} - SC{"سيشل"} - SD{"السودان"} - SE{"السويد"} - SG{"سنغافورة"} - SI{"سلوفينيا"} - SK{"سلوفاكيا"} - SL{"سيراليون"} - SM{"سان مارينو"} - SN{"السنغال"} - SO{"الصومال"} - SR{"سورينام"} - ST{"سان تومي وبرينسيبي"} - SV{"السلفادور"} - SY{"سورية"} - SZ{"سوازيلاند"} - TD{"تشاد"} - TG{"توغو"} - TH{"تايلند"} - TJ{"تاجيكستان"} - TM{"تركمانستان"} - TN{"تونس"} - TO{"تونغا"} - TR{"تركيا"} - TT{"ترينيداد وتوباغو"} - TV{"توفالو"} - TW{"تايوان"} - TZ{"تانزانيا"} - UA{"اوكرانيا"} - UG{"اوغندا"} - US{"الاولايات المتحدة الامريكية"} - UY{"اروغواي"} - UZ{"ازبكستان"} - VA{"الفاتيكان"} - VC{"سانت فنسنت وجزر غرينادين"} - VE{"فنزويلا"} - VN{"فيتنام"} - VU{"فانوآتو"} - WS{"ساموا"} - YE{"اليمن"} - ZA{"جنوب افريقيا"} - ZM{"زامبيا"} - ZW{"زيمبابوي"} - } - Currencies{ - AED{ - "د.Ø¥.‏", - "AED", - } - BHD{ - "د.ب.‏", - "BHD", - } - DZD{ - "د.ج.‏", - "DZD", - } - EGP{ - "ج.م.‏", - "EGP", - } - IQD{ - "د.ع.‏", - "IQD", - } - JOD{ - "د.Ø£.‏", - "JOD", - } - KWD{ - "د.ك.‏", - "KWD", - } - LBP{ - "ل.ل.‏", - "LBP", - } - LYD{ - "د.ل.‏", - "LYD", - } - MAD{ - "د.م.‏", - "MAD", - } - OMR{ - "ر.ع.‏", - "OMR", - } - QAR{ - "ر.ق.‏", - "QAR", - } - SAR{ - "ر.س.‏", - "SAR", - } - SDP{ - "ج.س.‏", - "SDP", - } - SYP{ - "ل.س.‏", - "SYP", - } - TND{ - "د.ت.‏", - "TND", - } - TRY{ - "TRY", - "ليرة تركية جديدة", - } - YER{ - "ر.ي.‏", - "YER", - } - } - ExemplarCharacters{"[Ø¡-غـ-ْ‌‍‏‎]"} - Keys{ - calendar{"تقويم"} - collation{"الترتيب"} - currency{"العملات"} - } - Languages{ - aa{"الافارية"} - ab{"الابخازية"} - af{"الافريقية"} - afa{"افرو-اسيوية"} - ang{"انكليزية، قديم"} - ar{"العربية"} - arc{"الارامية"} - az{"اذرية"} - bal{"البلوشية"} - be{"البيلوروسية"} - ber{"البربرية"} - bg{"البلغارية"} - bn{"البنغالية"} - bo{"التبتية"} - bs{"البوسنية"} - ca{"الكاتالوينية"} - ce{"الشيشانية"} - cop{"قبطية"} - cs{"التشيكية"} - cy{"الولزية"} - da{"الدانماركية"} - de{"الالمانية"} - dv{"المالديفية"} - dz{"الزونخاية"} - egy{"مصرية، قديمة"} - el{"اليونانية"} - en{"الانجليزية"} - eo{"اسبرانتو"} - es{"الاسبانية"} - et{"استونية"} - fa{"الفارسية"} - fi{"الفنلندية"} - fj{"الفيجية"} - fr{"الفرنسية"} - gu{"الغوجاراتية"} - he{"العبرية"} - hi{"الهندية"} - hr{"الكرواتية"} - ht{"الهايتية"} - hu{"الهنغارية"} - hy{"الارمنية"} - id{"الاندونيسية"} - ira{"الايرانية"} - it{"الايطالية"} - ja{"اليابانية"} - km{"الخميرية"} - ko{"الكورية"} - ks{"الكاشميرية"} - ku{"الكردية"} - la{"اللاتينية"} - lt{"اللتوانية"} - lv{"اللاتفية"} - mn{"المنغولية"} - ms{"لغة الملايو"} - mt{"المالطية"} - my{"البورمية"} - ne{"النيبالية"} - nl{"الهولندية"} - pa{"البنجابية"} - pl{"البولونية"} - ps{"البشتونية"} - pt{"البرتغالية"} - ro{"الرومانية"} - ru{"الروسية"} - smi{"اللغات السامية"} - sq{"الالبانية"} - sr{"الصربية"} - sv{"السويدية"} - sw{"السواحلية"} - syr{"السريانية"} - th{"التايلاندية"} - tl{"التاغالوغية"} - tr{"التركية"} - tt{"التترية"} - ug{"الاغورية"} - uk{"الاوكرانية"} - ur{"الاردية"} - vi{"الفيتنامية"} - zh{"الصينية"} - } - LocaleScript{ - "Arab", - } - NumberElements{ - "Ù«", - "Ù¬", - ";", - "Ùª", - "Ù ", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - NumberPatterns{ - "#,##0.###;#,##0.###-", - "¤ #,##0.00;¤ #,##0.00-", - "#,##0%", - "#E0", - } - Scripts{ - Arab{"العربية"} - Armn{"الارمنية"} - Beng{"البنغالية"} - Brai{"برايل"} - Copt{"القبطية"} - Cprt{"القبرصية"} - Ethi{"الاثيوبية"} - Geor{"الجورجية"} - Grek{"اليونانية"} - Gujr{"تاغجراتية"} - Hebr{"العبرية"} - Khmr{"الخميرية"} - Latn{"اللاتنية"} - Mong{"المغولية"} - Syrc{"السريانية"} - Taml{"التاميل"} - Tglg{"التغالوغية"} - Thai{"التايلندية"} - Tibt{"التبتية"} - } - Types{ - calendar{ - buddhist{"تقويم بوني"} - chinese{"تقويم صيني"} - gregorian{"تقويم ميلادي"} - hebrew{"تقويم عبري"} - islamic{"تقويم اسلامي"} - islamic-civil{"تقويم اسلامي مدني"} - japanese{"تقويم ياباني"} - } - collation{ - direct{"ترتيب مباشر"} - phonebook{"ترتيب دليل الهاتف"} - traditional{"تقليدي"} - } - } - Version{"1.3"} - calendar{ - buddhist{ - eras{ - abbreviated{ - "التقويم البوذي", - } - } - } - gregorian{ - AmPmMarkers{ - "ص", - "م", - } - DateTimeElements:intvector{ - 7, - 1, - } - DateTimePatterns{ - "z h:mm:ss a", - "h:mm:ss a", - "h:mm:ss a", - "h:mm a", - "EEEE, d MMMM, yyyy", - "d MMMM, yyyy", - "dd/MM/yyyy", - "d/M/yyyy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "Ø­", - "ن", - "Ø«", - "ر", - "Ø®", - "ج", - "س", - } - narrow{ - "Ø­", - "ن", - "Ø«", - "ر", - "Ø®", - "ج", - "س", - } - wide{ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت", - } - } - } - eras{ - abbreviated{ - "ق.م", - "م", - } - } - monthNames{ - format{ - abbreviated{ - "يناير", - "فبراير", - "مارس", - "أبريل", - "مايو", - "يونيو", - "يوليو", - "أغسطس", - "سبتمبر", - "أكتوبر", - "نوفمبر", - "ديسمبر", - } - narrow{ - "ي", - "ف", - "م", - "Ø¢", - "و", - "ن", - "ل", - "غ", - "س", - "ك", - "ب", - "د", - } - wide{ - "يناير", - "فبراير", - "مارس", - "أبريل", - "مايو", - "يونيو", - "يوليو", - "أغسطس", - "سبتمبر", - "أكتوبر", - "نوفمبر", - "ديسمبر", - } - } - } - weekend:intvector{ - 5, - 0, - 6, - 86400000, - } - } - islamic{ - eras{ - abbreviated{ - "ه‍", - } - } - monthNames{ - format{ - abbreviated:alias{"ar/calendar/islamic/monthNames/format/wide"} - wide{ - "محرم", - "صفر", - "ربيع الأول", - "ربيع الآخر", - "جمادى الأولى", - "جمادى الآخرة", - "رجب", - "شعبان", - "رمضان", - "شوال", - "ذو القعدة", - "ذو الحجة", - } - } - } - } - islamic-civil{ - eras:alias{"ar/calendar/islamic/eras"} - monthNames:alias{"ar/calendar/islamic/monthNames"} - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ar.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ar.xml + */ +ar{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + 001{"العالم"} + 002{"افريقيا"} + 005{"أمريكا الجنوبية"} + 009{"أوقيانوسيا"} + 011{"غرب افريقيا"} + 013{"أمريكا الوسطى"} + 014{"شرق افريقيا"} + 015{"شمال افريقيا"} + 017{"وسط افريقيا"} + 018{"جنوب افريقيا"} + 019{"الأمريكتين"} + 021{"شمال أمريكا"} + 029{"الكاريبي"} + 030{"شرق آسيا"} + 034{"جنوب آسيا"} + 035{"جنوب شرق آسيا"} + 039{"جنوب أوروبا"} + 053{"أستراليا ونيوزيلندا"} + 054{"ميلانيزيا"} + 057{"الجزر الميكرونيزية"} + 061{"بولينيزيا"} + 142{"آسيا"} + 143{"وسط آسيا"} + 145{"غرب آسيا"} + 150{"أوروبا"} + 151{"شرق أوروبا"} + 154{"شمال أوروبا"} + 155{"غرب أوروبا"} + 172{"كومنولث الدول المستقلة"} + 419{"أمريكا اللاتينية و الكاريبي"} + AD{"أندورا"} + AE{"الامارات العربية المتحدة"} + AF{"أفغانستان"} + AG{"أنتيجوا وبربودا"} + AI{"أنجويلا"} + AL{"ألبانيا"} + AM{"أرمينيا"} + AN{"جزر الأنتيل الهولندية"} + AO{"أنجولا"} + AQ{"القطب الجنوبي"} + AR{"الأرجنتين"} + AS{"ساموا الأمريكية"} + AT{"النمسا"} + AU{"أستراليا"} + AW{"آروبا"} + AX{"جزر أولان"} + AZ{"أذربيجان"} + BA{"البوسنة والهرسك"} + BB{"بربادوس"} + BD{"بنجلاديش"} + BE{"بلجيكا"} + BF{"بوركينا فاسو"} + BG{"بلغاريا"} + BH{"البحرين"} + BI{"بوروندي"} + BJ{"بنين"} + BM{"برمودا"} + BN{"بروناي"} + BO{"بوليفيا"} + BR{"البرازيل"} + BS{"الباهاما"} + BT{"بوتان"} + BV{"جزيرة بوفيه"} + BW{"بتسوانا"} + BY{"روسيا البيضاء"} + BZ{"بليز"} + CA{"كندا"} + CC{"جزر كوكوس (كيلنج)"} + CD{"جمهورية الكونغو الديمقراطية"} + CF{"جمهورية افريقيا الوسطى"} + CG{"الكونغو - برازافيل"} + CH{"سويسرا"} + CI{"ساحل العاج"} + CK{"جزر كوك"} + CL{"شيلي"} + CM{"الكاميرون"} + CN{"الصين"} + CO{"كولومبيا"} + CR{"كوستاريكا"} + CS{"صربيا والجبل الأسود"} + CU{"كوبا"} + CV{"الرأس الأخضر"} + CX{"جزيرة الكريسماس"} + CY{"قبرص"} + CZ{"جمهورية التشيك"} + DE{"ألمانيا"} + DJ{"جيبوتي"} + DK{"الدانمرك"} + DM{"دومينيكا"} + DO{"جمهورية الدومينيك"} + DZ{"الجزائر"} + EC{"الاكوادور"} + EE{"استونيا"} + EG{"مصر"} + EH{"الصحراء الغربية"} + ER{"اريتريا"} + ES{"أسبانيا"} + ET{"اثيوبيا"} + FI{"فنلندا"} + FJ{"فيجي"} + FK{"جزر فوكلاند"} + FM{"ميكرونيزيا"} + FO{"جزر فارو"} + FR{"فرنسا"} + GA{"الجابون"} + GB{"المملكة المتحدة"} + GD{"جرينادا"} + GE{"جورجيا"} + GF{"غويانا"} + GH{"غانا"} + GI{"جبل طارق"} + GL{"جرينلاند"} + GM{"غامبيا"} + GN{"غينيا"} + GP{"جوادلوب"} + GQ{"غينيا الاستوائية"} + GR{"اليونان"} + GS{"جورجيا الجنوبية وجزر ساندويتش الجنوبية"} + GT{"جواتيمالا"} + GU{"جوام"} + GW{"غينيا بيساو"} + GY{"غيانا"} + HK{"هونج كونج الصينية"} + HM{"جزيرة هيرد وماكدونالد"} + HN{"هندوراس"} + HR{"كرواتيا"} + HT{"هايتي"} + HU{"المجر"} + ID{"اندونيسيا"} + IE{"أيرلاندا"} + IL{"اسرائيل"} + IN{"الهند"} + IO{"المحيط الهندي البريطاني"} + IQ{"العراق"} + IR{"ايران"} + IS{"أيسلندا"} + IT{"ايطاليا"} + JM{"جامايكا"} + JO{"الأردن"} + JP{"اليابان"} + KE{"كينيا"} + KG{"قرغيزستان"} + KH{"كمبوديا"} + KI{"كيريباتي"} + KM{"جزر القمر"} + KN{"سانت كيتس ونيفيس"} + KP{"كوريا الشمالية"} + KR{"كوريا الجنوبية"} + KW{"الكويت"} + KY{"جزر الكايمن"} + KZ{"كازاخستان"} + LA{"لاوس"} + LB{"لبنان"} + LC{"سانت لوسيا"} + LI{"ليختنشتاين"} + LK{"سريلانكا"} + LR{"ليبيريا"} + LS{"ليسوتو"} + LT{"ليتوانيا"} + LU{"لوكسمبورج"} + LV{"لاتفيا"} + LY{"ليبيا"} + MA{"المغرب"} + MC{"موناكو"} + MD{"مولدافيا"} + MG{"مدغشقر"} + MH{"جزر المارشال"} + MK{"مقدونيا"} + ML{"مالي"} + MM{"ميانمار"} + MN{"منغوليا"} + MO{"ماكاو الصينية"} + MP{"جزر ماريانا الشمالية"} + MQ{"مارتينيك"} + MR{"موريتانيا"} + MS{"مونتسرات"} + MT{"مالطا"} + MU{"موريشيوس"} + MV{"جزر الملديف"} + MW{"ملاوي"} + MX{"المكسيك"} + MY{"ماليزيا"} + MZ{"موزمبيق"} + NA{"ناميبيا"} + NC{"كاليدونيا الجديدة"} + NE{"النيجر"} + NF{"جزيرة نورفوك"} + NG{"نيجيريا"} + NI{"نيكاراجوا"} + NL{"هولندا"} + NO{"النرويج"} + NP{"نيبال"} + NR{"نورو"} + NU{"نيوي"} + NZ{"نيوزيلاندا"} + OM{"عمان"} + PA{"بنما"} + PE{"بيرو"} + PF{"بولينيزيا [PF]"} + PG{"بابوا غينيا الجديدة"} + PH{"الفيلبين"} + PK{"باكستان"} + PL{"بولندا"} + PM{"سانت بيير وميكولون"} + PN{"بتكايرن"} + PR{"بورتوريكو"} + PS{"فلسطين"} + PT{"البرتغال"} + PW{"بالاو"} + PY{"باراجواي"} + QA{"قطر"} + RE{"روينيون"} + RO{"رومانيا"} + RU{"روسيا"} + RW{"رواندا"} + SA{"المملكة العربية السعودية"} + SB{"جزر سليمان"} + SC{"سيشل"} + SD{"السودان"} + SE{"السويد"} + SG{"سنغافورة"} + SH{"سانت هيلنا"} + SI{"سلوفينيا"} + SJ{"سفالبارد وجان مايان"} + SK{"سلوفاكيا"} + SL{"سيراليون"} + SM{"سان مارينو"} + SN{"السنغال"} + SO{"الصومال"} + SR{"سورينام"} + ST{"ساو تومي وبرينسيبي"} + SV{"السلفادور"} + SY{"سوريا"} + SZ{"سوازيلاند"} + TC{"جزر الترك وجايكوس"} + TD{"تشاد"} + TF{"المقاطعات الجنوبية الفرنسية"} + TG{"توجو"} + TH{"تايلند"} + TJ{"طاجكستان"} + TK{"توكيلو"} + TL{"تيمور الشرقية"} + TM{"تركمانستان"} + TN{"تونس"} + TO{"تونجا"} + TR{"تركيا"} + TT{"ترينيداد وتوباغو"} + TV{"توفالو"} + TW{"تايوان"} + TZ{"تانزانيا"} + UA{"أوكرانيا"} + UG{"أوغندا"} + UM{"جزر الولايات المتحدة البعيدة الصغيرة"} + US{"الولايات المتحدة الأمريكية"} + UY{"أورجواي"} + UZ{"أوزبكستان"} + VA{"الفاتيكان"} + VC{"سانت فنسنت وغرنادين"} + VE{"فنزويلا"} + VG{"جزر فرجين البريطانية"} + VI{"جزر فرجين الأمريكية"} + VN{"فيتنام"} + VU{"فانواتو"} + WF{"جزر والس وفوتونا"} + WS{"ساموا"} + YE{"اليمن"} + YT{"مايوت"} + ZA{"جمهورية جنوب افريقيا"} + ZM{"زامبيا"} + ZW{"زيمبابوي"} + } + Currencies{ + ADP{ + "ADP", + "بيستا أندورى", + } + AED{ + "د.Ø¥.‏", + "درهم اماراتى", + } + AFA{ + "AFA", + "أفغاني - 1927-2002", + } + AFN{ + "AFN", + "أفغانى", + } + ALL{ + "ALL", + "ليك ألباني", + } + AMD{ + "AMD", + "درام أرمينى", + } + ANG{ + "ANG", + "جلدر هولندى [ANG]", + } + AOA{ + "AOA", + "كوانزا أنجولى", + } + AOK{ + "AOK", + "كوانزا أنجولى - 1977-1990", + } + AON{ + "AON", + "كوانزا أنجولى جديدة - 1990-2000", + } + AOR{ + "AOR", + "كوانزا أنجولى معدلة - 1995 - 1999", + } + ARA{ + "ARA", + "استرال ارجنتينى", + } + ARP{ + "ARP", + "بيزو أرجنتينى - 1983-1985", + } + ARS{ + "ARS", + "بيزو أرجنتينى", + } + ATS{ + "ATS", + "شلن نمساوى", + } + AUD{ + "AUD", + "دولار أسترالى", + } + AWG{ + "AWG", + "جلدر أروبى", + } + AZM{ + "AZM", + "مانات أذريبجانى", + } + BAD{ + "BAD", + "دينار البوسنة و الهرسك", + } + BAM{ + "BAM", + "مارك البوسنة و الهرسك قابل للتحويل", + } + BBD{ + "BBD", + "دولار بربادوسى", + } + BDT{ + "BDT", + "تاكا بنجلاديشى", + } + BEF{ + "BEF", + "فرنك بلجيكى", + } + BGL{ + "BGL", + "ليف بلغارى", + } + BHD{ + "د.ب.‏", + "دينار بحرينى", + } + BIF{ + "BIF", + "فرنك بروندى", + } + BMD{ + "BMD", + "دولار برمودى", + } + BND{ + "BND", + "دولار بروناى", + } + BOB{ + "BOB", + "بوليفاريو", + } + BOP{ + "BOP", + "بيزو بوليفى", + } + BOV{ + "BOV", + "مفدول بوليفى", + } + BRB{ + "BRB", + "نوفو كروزايرو برازيلى - 1967-1986", + } + BRC{ + "BRC", + "كروزادو برازيلى", + } + BRE{ + "BRE", + "كروزايرو برازيلى - 1990-1993", + } + BRL{ + ".‏ر.ب", + "ريال برازيلي", + } + BSD{ + "BSD", + "دولار باهامى", + } + BTN{ + "BTN", + "نولتوم بوتانى", + } + BUK{ + "BUK", + "كيات بورمى", + } + BWP{ + "BWP", + "بولا بتسوانى", + } + BYB{ + "BYB", + "روبل بيلاروسى جديد - 1994-1999", + } + BYR{ + "BYR", + "روبل بيلاروسى", + } + BZD{ + "BZD", + "دولار بليزى", + } + CAD{ + "CAD", + "دولار كندى", + } + CHF{ + "CHF", + "فرنك سويسرى", + } + CLP{ + "CLP", + "بيزو شيلى", + } + CNY{ + "CNY", + "يوان صيني", + } + COP{ + "COP", + "بيزو كولومبى", + } + CRC{ + "CRC", + "كولن كوستا ريكى", + } + CSD{ + "CSD", + "دينار صربى", + } + CSK{ + "CSK", + "كرونة تشيكوسلوفاكيا", + } + CUP{ + "CUP", + "بيزو كوبى", + } + CYP{ + "CYP", + "جنيه قبرصى", + } + CZK{ + "CZK", + "كرونة تشيكية", + } + DDM{ + "DDM", + "أوستمارك المانى شرقى", + } + DEM{ + "DEM", + "مارك المانى", + } + DJF{ + "DJF", + "فرنك جيبوتى", + } + DKK{ + "DKK", + "كرونة دانماركى", + } + DOP{ + "DOP", + "بيزو الدومنيكان", + } + DZD{ + "د.ج.‏", + "دينار جزائرى", + } + EEK{ + "EEK", + "كرونة استونية", + } + EGP{ + "ج.م.‏", + "جنيه مصرى", + } + ERN{ + "ERN", + "ناكفا أريترى", + } + ESP{ + "ESP", + "بيزيتا اسباني", + } + ETB{ + "ETB", + "بير أثيوبى", + } + EUR{ + "€", + "يورو", + } + FIM{ + "FIM", + "ماركا فنلندى", + } + FJD{ + "FJD", + "دولار فيجى", + } + FKP{ + "FKP", + "جنيه جزر فوكلاند", + } + FRF{ + "FRF", + "فرنك فرنسى", + } + GBP{ + "£", + "جنيه سترليني", + } + GEL{ + "GEL", + "لارى جورجى", + } + GHC{ + "GHC", + "سيدى غانى", + } + GIP{ + "GIP", + "جنيه جبل طارق", + } + GMD{ + "GMD", + "دلاسي جامبي", + } + GNF{ + "GNF", + "فرنك غينيا", + } + GNS{ + "GNS", + "سيلى غينيا", + } + GQE{ + "GQE", + "اكويل جونينا غينيا الاستوائيّة", + } + GRD{ + "GRD", + "دراخما يونانى", + } + GTQ{ + "GTQ", + "كوتزال جواتيمالا", + } + GWE{ + "GWE", + "اسكود برتغالى غينيا", + } + GWP{ + "GWP", + "بيزو غينيا بيساو", + } + GYD{ + "GYD", + "دولار غيانا", + } + HKD{ + "HKD", + "دولار هونج كونج", + } + HNL{ + "HNL", + "ليمبيرا هنداروس", + } + HRD{ + "HRD", + "دينار كرواتى", + } + HRK{ + "HRK", + "كونا كرواتى", + } + HTG{ + "HTG", + "جوردى هايتى", + } + HUF{ + "HUF", + "فورينت مجرى", + } + IDR{ + "IDR", + "روبية اندونيسية", + } + IEP{ + "IEP", + "جنيه ايرلندى", + } + ILP{ + "ILP", + "جنيه اسرائيلى", + } + ILS{ + "ILS", + "شيكل اسرائيلى جديد", + } + INR{ + ".‏ر.ه", + "روبيه هندي", + } + IQD{ + "د.ع.‏", + "دينار عراقى", + } + IRR{ + "IRR", + "ريال ايرانى", + } + ISK{ + "ISK", + "كرونه أيسلندى", + } + ITL{ + "₤", + "ليرة ايطالية", + } + JMD{ + "JMD", + "دولار جامايكى", + } + JOD{ + "د.Ø£.‏", + "دينار أردنى", + } + JPY{ + "Â¥", + "ين ياباني", + } + KES{ + "KES", + "شلن كينيي", + } + KGS{ + "KGS", + "سوم قيرغستانى", + } + KHR{ + "KHR", + "رييال كمبودى", + } + KMF{ + ".‏ف.ج.ق", + "فرنك جزر القمر", + } + KPW{ + "KPW", + "وون كوريا الشمالية", + } + KRW{ + "KRW", + "وون كوريا الجنوبية", + } + KWD{ + "د.ك.‏", + "دينار كويتى", + } + KYD{ + "KYD", + "دولار جزر كيمن", + } + KZT{ + "KZT", + "تينغ كازاخستانى", + } + LAK{ + "LAK", + "كيب لاوسى", + } + LBP{ + "ل.ل.‏", + "جنية لبنانى", + } + LKR{ + "LKR", + "روبية سريلانكية", + } + LRD{ + "LRD", + "دولار ليبيري", + } + LSL{ + "LSL", + "لوتى ليسوتو", + } + LSM{ + "LSM", + "مالوتى", + } + LTL{ + "LTL", + "الليتا الليتوانية", + } + LTT{ + "LTT", + "تالوناس ليتوانى", + } + LUC{ + "LUC", + "فرنك لوكسمبرج قابل للتحويل", + } + LUF{ + "LUF", + "فرنك لوكسمبرج", + } + LUL{ + "LUL", + "فرنك لوكسمبرج المالى", + } + LVL{ + "LVL", + "لاتس لاتفيا", + } + LVR{ + "LVR", + "روبل لاتفيا", + } + LYD{ + "د.ل.‏", + "دينار ليبى", + } + MAD{ + "د.م.‏", + "درهم مغربى", + } + MDL{ + "MDL", + "لاو مولدوفى", + } + MGA{ + "MGA", + "ارياري مدغشقر", + } + MGF{ + "MGF", + "فرنك مدغشقر", + } + MKD{ + "MKD", + "دينار مقدونى", + } + MLF{ + "MLF", + "فرنك مالى", + } + MMK{ + "MMK", + "كيات ميانمار", + } + MNT{ + "MNT", + "توغروغ منغولى", + } + MRO{ + ".‏أ.م", + "أوقية موريتانية", + } + MTL{ + "MTL", + "ليرة مالطية", + } + MTP{ + "MTP", + "جنيه مالطى", + } + MUR{ + "MUR", + "روبي موريشي", + } + MVR{ + "MVR", + "روفيه جزر المالديف", + } + MWK{ + "MWK", + "كواشا مالاوى", + } + MXN{ + "MXN", + "بيزو مكسيكى", + } + MXP{ + "MXP", + "بيزو فضى مكسيكى - 1861-1992", + } + MYR{ + "MYR", + "رينغيت ماليزى", + } + MZE{ + "MZE", + "اسكود موزمبيقى", + } + NAD{ + "NAD", + "دولار نامبيا", + } + NGN{ + "NGN", + "نايرا نيجيرى", + } + NIC{ + "NIC", + "كوردوبة نيكاراجوا", + } + NLG{ + "NLG", + "جلدر هولندى", + } + NOK{ + "NOK", + "كرونة نرويجية", + } + NPR{ + "NPR", + "روبية نيبالي", + } + NZD{ + "NZD", + "دولار نيوزيلندى", + } + OMR{ + "ر.ع.‏", + "ريال عمانى", + } + PAB{ + "PAB", + "بالبوا بنمى", + } + PGK{ + "PGK", + "كينا بابوا غينيا الجديدة", + } + PHP{ + "PHP", + "بيزو فلبينى", + } + PKR{ + "PKR", + "روبية باكستاني", + } + PLN{ + "PLN", + "زلوتى بولندى", + } + PLZ{ + "PLZ", + "زلوتى بولندى - 1950-1995", + } + PTE{ + "PTE", + "اسكود برتغالى", + } + PYG{ + "PYG", + "جواراني باراجواي", + } + QAR{ + "ر.ق.‏", + "ريال قطرى", + } + RHD{ + "RHD", + "دولار روديسى", + } + ROL{ + "ROL", + "ليو رومانى قديم", + } + RUB{ + "ر.ر.‏", + "روبل روسي", + } + RUR{ + "RUR", + "روبل روسى - 1991-1998", + } + RWF{ + "RWF", + "فرنك رواندى", + } + SAR{ + "ر.س.‏", + "ريال سعودى", + } + SBD{ + "SBD", + "دولار جزر سليمان", + } + SCR{ + "SCR", + "روبية سيشيلية", + } + SDD{ + ".‏د.س", + "دينار سوداني", + } + SDP{ + "ج.س.‏", + "جنيه سودانى", + } + SEK{ + "SEK", + "كرونة سويدية", + } + SGD{ + "SGD", + "دولار سنغافورى", + } + SHP{ + "SHP", + "جنيه سانت هيلين", + } + SIT{ + "SIT", + "تولار سلوفيني", + } + SKK{ + "SKK", + "كرونة سلوفاكية", + } + SLL{ + "SLL", + "ليون سيراليونى", + } + SOS{ + "SOS", + "شلن صومالى", + } + SRD{ + "SRD", + "دولار سورينامى", + } + SRG{ + "SRG", + "جلدر سورينامى", + } + STD{ + "STD", + "دوبرا ساو تومي وبرينسيبي", + } + SUR{ + "SUR", + "روبل سوفيتى", + } + SVC{ + "SVC", + "كولون سلفادورى", + } + SYP{ + "ل.س.‏", + "جنيه سورى", + } + SZL{ + "SZL", + "ليلانجيني سوازيلندى", + } + THB{ + "THB", + "باخت تايلاندى", + } + TJR{ + "TJR", + "روبل طاجيكستانى", + } + TJS{ + "TJS", + "سوموني طاجيكستانى", + } + TMM{ + "TMM", + "مانات تركمنستانى", + } + TND{ + "د.ت.‏", + "دينارتونسى", + } + TPE{ + "TPE", + "اسكود تيمورى", + } + TRL{ + "TRL", + "ليرة تركي", + } + TRY{ + "TRY", + "ليرة تركية جديدة", + } + TTD{ + "TTD", + "دولار ترينداد و توباجو", + } + TWD{ + "TWD", + "دولار تايوانى", + } + TZS{ + "TZS", + "شلن تنزانى", + } + UAH{ + "UAH", + "هريفنيا أوكرانى", + } + UGS{ + "UGS", + "شلن أوغندى - 1966-1987", + } + UGX{ + "UGX", + "شلن أوغندى", + } + USD{ + "$", + "دولار أمريكي", + } + UYP{ + "UYP", + "بيزو أوروجواى - 1975-1993", + } + UZS{ + "UZS", + "سوم أوزبكستانى", + } + VEB{ + "VEB", + "بوليفار فنزويلي", + } + VND{ + "VND", + "دونج فيتنامى", + } + XAF{ + ".‏ف.ا", + "فرنك افريقي", + } + XAG{ + "XAG", + "فضة", + } + XAU{ + "XAU", + "ذهب", + } + XBA{ + "XBA", + "الوحدة الأوروبية المركبة", + } + XBB{ + "XBB", + "الوحدة المالية الأوروبية", + } + XBC{ + "XBC", + "الوحدة الحسابية الأوروبية", + } + XCD{ + "XCD", + "دولار شرق الكاريبى", + } + XEU{ + "XEU", + "وحدة النقد الأوروبية", + } + XFO{ + "XFO", + "فرنك فرنسى ذهبى", + } + XPT{ + "XPT", + "البلاتين", + } + XTS{ + "XTS", + "كود اختبار العملة", + } + XXX{ + "XXX", + "بدون عملة", + } + YDD{ + "YDD", + "دينار يمنى", + } + YER{ + "ر.ي.‏", + "ريال يمنى", + } + YUD{ + "YUD", + "دينار يوغسلافى", + } + YUN{ + "YUN", + "دينار يوغسلافى قابل للتحويل", + } + ZAL{ + "ZAL", + "راند جنوب أفريقيا -مالى", + } + ZAR{ + "ZAR", + "راند جنوب أفريقيا", + } + ZMK{ + "ZMK", + "كواشا زامبى", + } + ZRN{ + "ZRN", + "زائير زائيرى جديد", + } + ZRZ{ + "ZRZ", + "زائير زائيرى", + } + ZWD{ + "ZWD", + "دولار زمبابوى", + } + } + ExemplarCharacters{"[ً-ْ ـ Ø¡-غ ف-ي]"} + Keys{ + calendar{"تقويم"} + collation{"الترتيب"} + currency{"العملات"} + } + Languages{ + aa{"الأفارية"} + ab{"الأبخازية"} + ace{"الأتشينيزية"} + ach{"الأكولية"} + ada{"الأدانجمية"} + ady{"الأديجه"} + ae{"الأفستية"} + af{"الأفريقية"} + afa{"الأفرو آسيوية - أخرى"} + afh{"الأفريهيلية"} + ain{"الآينوية"} + ak{"الأكانية"} + akk{"الأكادية"} + ale{"الأليوتية"} + alg{"اللغات الأمريكية الهندية"} + alt{"الألطائية الجنوبية"} + am{"الأمهرية"} + an{"الأراجونية"} + ang{"الانجليزية القديمة"} + apa{"اللغات الأباتشية"} + ar{"العربية"} + arc{"الآرامية"} + arn{"الأروكانية"} + arp{"الأراباهو"} + art{"الصناعية - أخرى"} + arw{"الأراواكية"} + as{"الأسامية"} + ast{"الأسترية"} + ath{"اللغات الأزباسكانية"} + aus{"اللغات الأسترالية"} + av{"الأفاريكية"} + awa{"الأوادية"} + ay{"الأيمارا"} + az{"الأذرية"} + ba{"الباشكيرية"} + bad{"الباندا"} + bai{"اللغات الباميليكية"} + bal{"البلوشية"} + ban{"اللغة البالية"} + bas{"الباسا"} + bat{"البلطيقية - أخرى"} + be{"البيلوروسية"} + bej{"البيجا"} + bem{"البيمبا"} + ber{"البربرية"} + bg{"البلغارية"} + bh{"البيهارية"} + bho{"البهوجبرية"} + bi{"البيسلامية"} + bik{"البيكولية"} + bin{"البينية"} + bla{"السيكسيكية"} + bm{"البامبارا"} + bn{"البنغالية"} + bnt{"البانتو"} + bo{"التبتية"} + br{"البريتونية"} + bra{"البراجية"} + bs{"البوسنية"} + btk{"الباتاكية"} + bua{"البرياتية"} + bug{"البجينيزية"} + byn{"البلينية"} + ca{"الكاتالوينية"} + cad{"الكادو"} + cai{"الهندية الأمريكية الوسطى - أخرى"} + car{"الكاريبية"} + cau{"القوقازية - أخرى"} + ce{"الشيشانية"} + ceb{"السيبيونو"} + cel{"السلتية - أخرى"} + ch{"التشامورو"} + chb{"التشيبشا"} + chg{"التشاجاتاى"} + chk{"التشكيزية"} + chn{"الشينوك جارجون"} + cho{"الشوكتو"} + chp{"الشيباوايان"} + chr{"الشيروكى"} + chy{"الشايان"} + cmc{"اللغات التشاميكية"} + co{"الكورسيكية"} + cop{"قبطية"} + cpe{"الكرييولى و اللغات المبسطة الأخرى للتفاهم بين الشعوب على أساس الأنجليزية"} + cpf{"الكرييولى و اللغات المبسطة الأخرى للتفاهم بين الشعوب على أساس الفرنسية"} + cpp{"الكرييولى و اللغات المبسطة الأخرى للتفاهم بين الشعوب على أساس البرتغالية"} + cr{"الكرى"} + crh{"تركى كريمين، لغة توركية كريمينية"} + crp{"الكرييولى و اللغات المبسطة الأخرى للتفاهم بين الشعوب - أخرى"} + cs{"التشيكية"} + csb{"الكاشبايان"} + cu{"سلافية كنسية"} + cus{"الكشيتيك - أخرى"} + cv{"التشفاش"} + cy{"الولزية"} + da{"الدانماركية"} + dak{"الداكوتا"} + dar{"الدارجوا"} + day{"الدياك"} + de{"الألمانية"} + del{"الديلوير"} + dgr{"الدوجريب"} + din{"الدنكا"} + doi{"الدوجرى"} + dra{"الدرافيدين - أخرى"} + dsb{"الصربية السفلى"} + dua{"الديولا"} + dum{"الهولندية الوسطى"} + dv{"المالديفية"} + dyu{"الدايلا"} + dz{"الزونخاية"} + efi{"الافيك"} + egy{"المصرية القديمة"} + eka{"الاكاجك"} + el{"اليونانية"} + elx{"الامايت"} + en{"الانجليزية"} + enm{"الانجليزية الوسطى"} + eo{"اسبرانتو"} + es{"الأسبانية"} + et{"الأستونية"} + eu{"لغة الباسك"} + ewo{"الايوندو"} + fa{"الفارسية"} + fan{"الفانج"} + fat{"الفانتى"} + ff{"الفلة"} + fi{"الفنلندية"} + fil{"الفلبينية"} + fiu{"فينو أجرايان - أخرى"} + fj{"الفيجية"} + fo{"الفارويز"} + fon{"الفون"} + fr{"الفرنسية"} + frm{"الفرنسية الوسطى"} + fro{"الفرنسية القديمة"} + fur{"الفريلايان"} + fy{"الفريزيان"} + ga{"الأيرلندية"} + gay{"الجايو"} + gba{"الجبيا"} + gd{"الغيلية الأسكتلندية"} + gem{"الجرمانية (أخرى)"} + gez{"الجيز"} + gil{"لغة أهل جبل طارق"} + gl{"الجاليكية"} + gmh{"الألمانية العليا الوسطى"} + gn{"الجوارانى"} + goh{"الألمانية العليا القديمة"} + gon{"الجندى"} + gor{"الجورونتالو"} + got{"الجرمانية"} + grb{"الجريبو"} + grc{"اليونانية القديمة"} + gu{"الغوجاراتية"} + gv{"المنكية"} + ha{"الهوسا"} + hai{"الهيدا"} + haw{"لغة أهل الهاواى"} + he{"العبرية"} + hi{"الهندية"} + hil{"الهيليجينون"} + him{"الهيماتشالى"} + hit{"الحثية"} + hmn{"الهمونجية"} + ho{"الهيرى موتو"} + hr{"الكرواتية"} + hsb{"الصربية العليا"} + ht{"الهايتية"} + hu{"الهنغارية"} + hup{"الهبا"} + hy{"الأرمينية"} + hz{"الهيريرو"} + ia{"اللّغة الوسيطة"} + iba{"الايبان"} + id{"الأندونيسية"} + ie{"الانترلينج"} + ig{"الايجبو"} + ii{"السيتشيون يى"} + ijo{"الايجو"} + ik{"الاينبياك"} + ilo{"الايلوكو"} + inc{"الهندية - أخرى"} + ine{"الهندية الأوروبية - أخرى"} + inh{"الانجوشية"} + io{"الايدو"} + ira{"الايرانية"} + iro{"اللغات الايروكويانية"} + is{"الأيسلاندية"} + it{"الايطالية"} + iu{"الاينكتيتت"} + ja{"اليابانية"} + jbo{"اللوجبان"} + jpr{"الجيدو الفارسى"} + jrb{"الجيدو العربى"} + jv{"الجاوية"} + ka{"الجورجية"} + kaa{"الكارا-كالباك"} + kab{"القبيلية"} + kac{"الكاتشين"} + kam{"الكامبا"} + kar{"الكاريين"} + kaw{"الكوى"} + kbd{"الكاباردايان"} + kg{"الكونغو"} + khi{"الخويسان - أخرى"} + kho{"الخوتانيز"} + ki{"الكيكيو"} + kj{"الكيونياما"} + kk{"الكازاخستانية"} + kl{"الكالاليست"} + km{"الخميرية"} + kmb{"الكيمبندو"} + kn{"الكانادا"} + ko{"الكورية"} + kok{"الكونكانية"} + kos{"الكوسراين"} + kpe{"الكبيل"} + kr{"الكانيورى"} + krc{"الكاراتشاى-بالكار"} + kro{"الكرو"} + ks{"الكاشميرية"} + ku{"الكردية"} + kum{"الكميك"} + kut{"الكتيناى"} + kv{"الكومى"} + kw{"الكورنية"} + ky{"القيرغستانية"} + la{"اللاتينية"} + lad{"الاسباعبرية"} + lah{"اللاهندا"} + lam{"اللامبا"} + lb{"اللوكسمبرجية"} + lez{"الليزجهايانية"} + lg{"الجاندا"} + li{"الليمبرجيشية"} + ln{"اللينجالا"} + lo{"اللاوية"} + lol{"المنغولية [lol]"} + loz{"اللوزى"} + lt{"اللتوانية"} + lu{"اللبا-كاتانجا"} + lua{"اللبا-لؤلؤ"} + lui{"اللوسينو"} + lun{"اللوندا"} + luo{"اللو"} + lus{"اللشاى"} + lv{"اللاتفية"} + mad{"المادريز"} + mag{"الماجا"} + mak{"الماكاسار"} + man{"الماندينغ"} + map{"الأوسترونيسيان"} + mas{"الماساي"} + mdf{"الموكشا"} + mdr{"الماندار"} + men{"الميند"} + mg{"المالاجاشية"} + mga{"الأيرلندية الوسطى"} + mh{"المارشالية"} + mi{"الماورية"} + mic{"الميكماكيونية"} + min{"المينانجكاباو"} + mis{"اللغات المتنوعة"} + mk{"المقدونية"} + mkh{"المون خمير- أخرى"} + ml{"الماليالام"} + mn{"المنغولية"} + mnc{"المانشو"} + mni{"المانيبرى"} + mno{"لغات مانوبو"} + mo{"المولدوفية"} + moh{"الموهوك"} + mr{"الماراثى"} + ms{"لغة الملايو"} + mt{"المالطية"} + mul{"اللغات المتعددة"} + mun{"لغات المندا"} + mwl{"الميرانديز"} + mwr{"الماروارى"} + my{"البورمية"} + myn{"لغات المايا"} + myv{"اللغة الارزية"} + na{"النورو"} + nah{"الناهيوتل"} + nai{"الهندية الأمريكية الشمالية - أخرى"} + nap{"اللغة النابولية"} + nb{"البوكمالية النرويجية"} + nd{"النديبيل الشمالى"} + nds{"الألمانية السفلى"} + ne{"النيبالية"} + new{"النيوارى"} + ng{"الندونجا"} + nia{"النياس"} + nic{"النيجر - كوردوفانايان"} + nl{"الهولندية"} + nn{"النينورسك النرويجي"} + no{"النرويجية"} + nog{"النوجاى"} + non{"النورس القديم"} + nr{"النديبيل الجنوبى"} + nub{"اللغات النوبية"} + nv{"النافاجو"} + nwc{"النوارية التقليدية"} + ny{"النيانجا، التشيتشوا، التشوا"} + nym{"النيامويزى"} + nyn{"النيانكول"} + nyo{"النيورو"} + nzi{"النزيما"} + oc{"الأوكيتان (بعد 1500)، بروفينسية"} + oj{"الأوجيبوا"} + om{"الأورومو"} + or{"الأورييا"} + os{"الأوسيتيك"} + osa{"الأوساج"} + ota{"التركية العثمانية"} + pa{"البنجابية"} + paa{"الغينية - أخرى"} + pag{"البانجاسينان"} + pal{"البهلوية"} + pam{"البامبانجا"} + pap{"البابيامينتو"} + pau{"البالوان"} + peo{"الفارسية القديمة"} + phi{"الفليبينية - أخرى"} + phn{"الفينيقية"} + pi{"البالية"} + pl{"البولندية"} + pon{"البوهنبيايان"} + pra{"اللغات البراقريطية"} + pro{"البروفانسية القديمة"} + ps{"البشتونية"} + pt{"البرتغالية"} + qu{"الكويتشوا"} + raj{"الراجاسثانية"} + rap{"الرابانى"} + rar{"الراروتونجانى"} + rm{"الرهايتو-رومانس"} + rn{"الرندى"} + ro{"الرومانية"} + roa{"الرومانسية - أخرى"} + rom{"الرومانية [rom]"} + ru{"الروسية"} + rup{"الأرومانيان"} + rw{"الكينيارواندا"} + sa{"السنسكريتية"} + sad{"السانداوى"} + sah{"الياكت"} + sai{"الهندية الأمريكية الجنوبية - أخرى"} + sal{"لغات ساليشان"} + sam{"الآرامية السومارية"} + sas{"الساساك"} + sat{"السانتالى"} + sc{"السردينية"} + scn{"الصقلية"} + sco{"الأسكتلندية"} + sd{"السيندى"} + se{"السامي الشمالى"} + sel{"السيلكب"} + sem{"السامية - أخرى"} + sg{"السانجو"} + sga{"الأيرلندية القديمة"} + sgn{"لغات الأشارة"} + shn{"الشانية"} + si{"السريلانكية"} + sid{"السيدامو"} + sio{"لغات السيويون"} + sit{"الصينية التيبتية - أخرى"} + sk{"السلوفاكية"} + sl{"السلوفانية"} + sla{"السلافية - أخرى"} + sm{"الساموائية"} + sma{"السامي الجنوبى"} + smi{"اللغات السامية - أخرى"} + smj{"اللول سامى"} + smn{"الاينارى سامى"} + sms{"السكولت سامى"} + sn{"الشونا"} + snk{"السونينك"} + so{"الصومالية"} + sog{"السوجدين"} + son{"السونجهاى"} + sq{"الألبانية"} + sr{"الصربية"} + srn{"السرانان تونجو"} + ss{"السواتى"} + ssa{"النيلية الصحراوية - أخرى"} + su{"السودانية"} + suk{"السوكوما"} + sus{"السوسو"} + sux{"السومارية"} + sv{"السويدية"} + sw{"السواحلية"} + syr{"السريانية"} + ta{"التاميلية"} + tai{"تاى - أخرى"} + te{"التيلجو"} + tem{"التيمن"} + ter{"التيرينو"} + tet{"التيتم"} + tg{"الطاجيكية"} + th{"التايلاندية"} + ti{"التيجرينيا"} + tig{"التيجر"} + tiv{"التيف"} + tk{"التركمانية"} + tkl{"التوكيلاو"} + tl{"التاغالوغية"} + tlh{"الكلينجون"} + tli{"التلينغيتية"} + tmh{"التاماشيك"} + tn{"التسوانية"} + to{"تونجا - جزر تونجا"} + tog{"تونجا - نياسا"} + tpi{"التوك بيسين"} + tr{"التركية"} + ts{"السونجا"} + tsi{"التسيمشيان"} + tt{"التتارية"} + tum{"التامبوكا"} + tup{"اللغات التوبية"} + tut{"الألطائية - أخرى"} + tvl{"التوفالو"} + tw{"التوى"} + ty{"التاهيتية"} + udm{"الأدمرت"} + ug{"الأغورية"} + uga{"اليجاريتيك"} + uk{"الأوكرانية"} + umb{"الأمبندو"} + und{"غير محدده"} + ur{"الأردية"} + uz{"الاوزباكية"} + vai{"الفاى"} + ve{"الفيندا"} + vi{"الفيتنامية"} + vot{"الفوتيك"} + wa{"الولونية"} + wak{"لغات الواكاشان"} + wal{"الوالامو"} + war{"الواراى"} + was{"الواشو"} + wen{"اللغات الصربية"} + wo{"الولوف"} + xal{"الكالميك"} + yao{"الياو"} + yap{"اليابيز"} + yi{"اليديشية"} + yo{"اليوروبية"} + ypk{"اللغات اليوبيكية"} + za{"الزهيونج"} + zap{"الزابوتيك"} + zen{"الزيناجا"} + zh{"الصينية"} + znd{"الزاند"} + zun{"الزونية"} + } + LocaleScript{ + "Arab", + } + NumberElements{ + "Ù«", + "Ù¬", + ";", + "Ùª", + "Ù ", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + NumberPatterns{ + "#,##0.###;#,##0.###-", + "¤ #,##0.00;¤ #,##0.00-", + "#,##0%", + "#E0", + } + Scripts{ + Arab{"العربية"} + Armn{"الأرمينية"} + Bali{"البالية"} + Batk{"الباتاك"} + Beng{"البنغالية"} + Blis{"رموز بليس"} + Bopo{"البوبوموفو"} + Brah{"الهندوسية"} + Brai{"البرايل"} + Bugi{"البجينيز"} + Buhd{"البهيدية"} + Cans{"رموز أصلية كندية موحدة"} + Cham{"التشامية"} + Cher{"الشيروكى"} + Cirt{"السيرث"} + Copt{"القبطية"} + Cprt{"القبرصية"} + Cyrl{"السيريلية"} + Cyrs{"السيريلية - متغير السلافية الكنسية القديمة"} + Deva{"الديفاناجارى"} + Dsrt{"الديسيريت"} + Egyd{"الديموطيقية"} + Egyh{"الهيراطيقية"} + Egyp{"الهيروغليفية"} + Ethi{"الاثيوبية"} + Geok{"الأبجدية الجورجية - أسومتافرلى و نسخرى"} + Geor{"الجورجية"} + Glag{"الجلاجوليتيك"} + Goth{"القوطية"} + Grek{"اليونانية"} + Gujr{"التاغجراتية"} + Guru{"الجرمخى"} + Hang{"الهانجل"} + Hani{"الهان"} + Hano{"الهانونو"} + Hans{"الهان المبسطة"} + Hant{"الهان التقليدية"} + Hebr{"العبرية"} + Hira{"الهيراجانا"} + Hmng{"الباهوه همونج"} + Hrkt{"الكتكانا أو الهيراجانا"} + Hung{"المجرية القديمة"} + Inds{"اندس - هارابان"} + Ital{"اللأيطالية القديمة"} + Java{"الجاوية"} + Kali{"الكياه لى"} + Kana{"الكتكانا"} + Khar{"الخاروشتى"} + Khmr{"الخميرية"} + Knda{"الكانادا"} + Laoo{"اللاو"} + Latf{"اللاتينية - متغير فراكتر"} + Latg{"اللاتينية - متغير غيلى"} + Latn{"اللاتينية"} + Lepc{"الليبتشا - رونج"} + Limb{"الليمبو"} + Lina{"الخطية Ø£"} + Linb{"الخطية ب"} + Mand{"المانداينية"} + Maya{"المايا الهيروغليفية"} + Mero{"الميرويتيك"} + Mlym{"الماليالام"} + Mong{"المغولية"} + Mymr{"الميانمار"} + Nkoo{"انكو"} + Ogam{"الأوجهام"} + Orkh{"الأورخون"} + Orya{"الأوريا"} + Osma{"الأوسمانيا"} + Perm{"البيرميكية القديمة"} + Phag{"الفاجسبا"} + Phnx{"الفينيقية"} + Plrd{"الصوتيات الجماء"} + Qaai{"الموروث"} + Roro{"رنجورنجو"} + Runr{"الرونى"} + Sara{"الساراتى"} + Shaw{"الشوانى"} + Sinh{"السينهالا"} + Sylo{"السيلوتى ناجرى"} + Syrc{"السريانية"} + Syre{"السريانية [Syre]"} + Syrj{"السريانية - متغير غربى"} + Syrn{"السريانية - متغير شرقى"} + Tagb{"التاجبانوا"} + Tale{"التاى لى"} + Talu{"التاى لى الجديد"} + Taml{"التاميلية"} + Telu{"التيلجو"} + Teng{"التينجوار"} + Tfng{"التيفيناغ - البربر"} + Tglg{"التغالوغية"} + Thaa{"الثعنة"} + Thai{"التايلاندية"} + Tibt{"التبتية"} + Ugar{"الأجاريتيكية"} + Vaii{"الفاى"} + Visp{"الكلام المرئى"} + Xpeo{"الفارسية القديمة"} + Xsux{"الكتابة المسمارية الأكادية السومارية"} + Yiii{"اليى"} + Zxxx{"شفرة للغات الغير مكتوبة"} + Zyyy{"عام"} + Zzzz{"شفرة للنصوص الغير مشفرة"} + } + Types{ + calendar{ + buddhist{"التقويم البوذي"} + chinese{"التقويم الصيني"} + gregorian{"التقويم الميلادي"} + hebrew{"التقويم العبري"} + islamic{"التقويم الهجري"} + islamic-civil{"تقويم اسلامي مدني"} + japanese{"التقويم الياباني"} + } + collation{ + big5han{"الصينية التقليدية (Big5)"} + direct{"ترتيب مباشر"} + gb2312han{"الصينية المبسطة (GB2312)"} + phonebook{"ترتيب دليل الهاتف"} + traditional{"تقليدي"} + } + } + Variants{ + NEDIS{"لهجة ناتيسون"} + } + Version{"1.68"} + calendar{ + buddhist{ + eras{ + abbreviated{ + "التقويم البوذي", + } + } + } + coptic{ + monthNames{ + format{ + abbreviated{ + "توت", + "Baba", + "هاتور", + "كياهك", + "Toba", + "أمشير", + "برامهات", + "Baramouda", + "بشنس", + "Paona", + "أبيب", + "Mesra", + "نسيئ", + } + wide{ + "توت", + "بابه", + "هاتور", + "كياهك", + "طوبة", + "أمشير", + "برامهات", + "برمودة", + "بشنس", + "بؤونة", + "أبيب", + "مسرى", + "نسيئ", + } + } + } + } + ethiopic{ + monthNames{ + format{ + abbreviated{ + "مسكريم", + "Tekemt", + "هدار", + "تهساس", + "Ter", + "يكتت", + "مجابيت", + "Miazia", + "جنبت", + "Sene", + "هامل", + "Nehasse", + "باجمن", + } + wide{ + "مسكريم", + "تكمت", + "هدار", + "تهساس", + "تر", + "يكتت", + "مجابيت", + "ميازيا", + "جنبت", + "سين", + "هامل", + "نهاس", + "باجمن", + } + } + } + } + gregorian{ + AmPmMarkers{ + "ص", + "م", + } + DateTimePatterns{ + "z h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE, d MMMM, yyyy", + "d MMMM, yyyy", + "dd/MM/yyyy", + "d/M/yyyy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Ø­", + "ن", + "Ø«", + "ر", + "Ø®", + "ج", + "س", + } + wide{ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت", + } + } + stand-alone{ + narrow{ + "Ø­", + "ن", + "Ø«", + "ر", + "Ø®", + "ج", + "س", + } + } + } + eras{ + abbreviated{ + "ق.م", + "م", + } + } + fields{ + day{ + dn{"اليوم"} + } + era{ + dn{"العصر"} + } + hour{ + dn{"الساعات"} + } + minute{ + dn{"الدقائق"} + } + month{ + dn{"الشهر"} + } + second{ + dn{"الثواني"} + } + week{ + dn{"الأسبوع"} + } + weekday{ + dn{"اليوم"} + } + year{ + dn{"السنة"} + } + zone{ + dn{"التوقيت"} + } + } + monthNames{ + format{ + abbreviated{ + "يناير", + "فبراير", + "مارس", + "أبريل", + "مايو", + "يونيو", + "يوليو", + "أغسطس", + "سبتمبر", + "أكتوبر", + "نوفمبر", + "ديسمبر", + } + wide{ + "يناير", + "فبراير", + "مارس", + "أبريل", + "مايو", + "يونيو", + "يوليو", + "أغسطس", + "سبتمبر", + "أكتوبر", + "نوفمبر", + "ديسمبر", + } + } + stand-alone{ + narrow{ + "ي", + "ف", + "م", + "Ø£", + "و", + "ن", + "ل", + "غ", + "س", + "ك", + "ب", + "د", + } + } + } + quarters{ + format{ + abbreviated{ + "الربع الأول", + "الربع الثاني", + "الربع الثالث", + "الربع الرابع", + } + wide{ + "الربع الأول", + "الربع الثاني", + "الربع الثالث", + "الربع الرابع", + } + } + } + } + hebrew{ + monthNames{ + format{ + abbreviated{ + "تشري", + "مرحشوان", + "كيسلو", + "طيست", + "شباط", + "آذار الأول", + "آذار الثاني", + "Nisan", + "Iyar", + "Sivan", + "تموز", + "Av", + "أيلول", + } + wide{ + "تشري", + "مرحشوان", + "كيسلو", + "طيست", + "شباط", + "آذار الأول", + "آذار الثاني", + "نيسان", + "أيار", + "سيوان", + "تموز", + "آب", + "Elul", + } + } + } + } + islamic{ + eras{ + abbreviated{ + "ه‍", + } + } + monthNames{ + format{ + wide{ + "محرم", + "صفر", + "ربيع الأول", + "ربيع الآخر", + "جمادى الأولى", + "جمادى الآخرة", + "رجب", + "شعبان", + "رمضان", + "شوال", + "ذو القعدة", + "ذو الحجة", + } + } + } + } + islamic-civil{ + eras:alias{"/LOCALE/calendar/islamic/eras"} + monthNames:alias{"/LOCALE/calendar/islamic/monthNames"} + } + persian{ + monthNames{ + format{ + abbreviated{ + "فروردین", + "أذربيهشت", + "خرداد", + "تیر", + "مرداد", + "شهریار", + "مهر", + "Aban", + "Azar", + "Dey", + "بهمن", + "Esfand", + } + wide{ + "فروردین", + "أذربيهشت", + "خرداد", + "تیر", + "مرداد", + "شهریار", + "مهر", + "آيان", + "آذر", + "دي", + "بهمن", + "اسفندار", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"‘"} + alternateQuotationStart{"’"} + quotationEnd{"“"} + quotationStart{"”"} + } + layout{ + characters{"right-to-left"} + lines{"top-to-bottom"} + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "America:Indiana:Petersburg"{ + ec{"بيترسبرج"} + } + } +} diff --git a/icuSources/data/locales/ar_AE.txt b/icuSources/data/locales/ar_AE.txt index 8d56e029..02068004 100644 --- a/icuSources/data/locales/ar_AE.txt +++ b/icuSources/data/locales/ar_AE.txt @@ -1,11 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_AE.xml +// * Source File:/common/main/ar_AE.xml // * // *************************************************************************** ar_AE{ - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } } diff --git a/icuSources/data/locales/ar_BH.txt b/icuSources/data/locales/ar_BH.txt index 98b32644..6b092c34 100644 --- a/icuSources/data/locales/ar_BH.txt +++ b/icuSources/data/locales/ar_BH.txt @@ -1,11 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_BH.xml +// * Source File:/common/main/ar_BH.xml // * // *************************************************************************** ar_BH{ - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } } diff --git a/icuSources/data/locales/ar_DZ.txt b/icuSources/data/locales/ar_DZ.txt index e6956883..975fedf7 100644 --- a/icuSources/data/locales/ar_DZ.txt +++ b/icuSources/data/locales/ar_DZ.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_DZ.xml +// * Source File:/common/main/ar_DZ.xml // * // *************************************************************************** ar_DZ{ @@ -18,8 +18,22 @@ ar_DZ{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } } diff --git a/icuSources/data/locales/ar_EG.txt b/icuSources/data/locales/ar_EG.txt index ffcc97c8..cd2c19c9 100644 --- a/icuSources/data/locales/ar_EG.txt +++ b/icuSources/data/locales/ar_EG.txt @@ -1,15 +1,28 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_EG.xml +// * Source File:/common/main/ar_EG.xml // * // *************************************************************************** ar_EG{ - Version{"1.2"} + Scripts{ + Ital{"الأيطالية القديمة"} + } + Version{"1.39"} calendar{ gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + eras{ + wide{ + "قبل الميلاد", + "ميلادي", + } + } weekend:intvector{ 6, 0, @@ -18,4 +31,10 @@ ar_EG{ } } } + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"’"} + quotationStart{"‘"} + } } diff --git a/icuSources/data/locales/ar_IQ.txt b/icuSources/data/locales/ar_IQ.txt index 5c2b3954..c79e0a28 100644 --- a/icuSources/data/locales/ar_IQ.txt +++ b/icuSources/data/locales/ar_IQ.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_IQ.xml +// * Source File:/common/main/ar_IQ.xml // * // *************************************************************************** ar_IQ{ - NumberPatterns{ - "#,##0.###;#,##0.###-", - "¤ #,##0.000;¤ #,##0.000-", - "#,##0%", - "#E0", + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } } - Version{"1.2"} } diff --git a/icuSources/data/locales/ar_JO.txt b/icuSources/data/locales/ar_JO.txt index e9fed2ed..c8ae7fa7 100644 --- a/icuSources/data/locales/ar_JO.txt +++ b/icuSources/data/locales/ar_JO.txt @@ -1,66 +1,70 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_JO.xml -// * -// *************************************************************************** -ar_JO{ - NumberPatterns{ - "#,##0.###;#,##0.###-", - "¤ #,##0.000;¤ #,##0.000-", - "#,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - dayNames{ - format{ - abbreviated{ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت", - } - } - } - monthNames{ - format{ - abbreviated{ - "كانون الثاني", - "شباط", - "آذار", - "نيسان", - "أيار", - "حزيران", - "تموز", - "آب", - "أيلول", - "تشرين الأول", - "تشرين الثاني", - "كانون الأول", - } - wide{ - "كانون الثاني", - "شباط", - "آذار", - "نيسان", - "أيار", - "حزيران", - "تموز", - "آب", - "أيلول", - "تشرين الأول", - "تشرين الثاني", - "كانون الأول", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ar_JO.xml +// * +// *************************************************************************** +ar_JO{ + Version{"1.38"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + dayNames{ + format{ + abbreviated{ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت", + } + } + } + monthNames{ + format{ + abbreviated{ + "كانون الثاني", + "شباط", + "آذار", + "نيسان", + "أيار", + "حزيران", + "تموز", + "آب", + "أيلول", + "تشرين الأول", + "تشرين الثاني", + "كانون الأول", + } + wide{ + "كانون الثاني", + "شباط", + "آذار", + "نيسان", + "أيار", + "حزيران", + "تموز", + "آب", + "أيلول", + "تشرين الأول", + "تشرين الثاني", + "كانون الأول", + } + } + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } +} diff --git a/icuSources/data/locales/ar_KW.txt b/icuSources/data/locales/ar_KW.txt index e6268160..32b710c4 100644 --- a/icuSources/data/locales/ar_KW.txt +++ b/icuSources/data/locales/ar_KW.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_KW.xml +// * Source File:/common/main/ar_KW.xml // * // *************************************************************************** ar_KW{ - NumberPatterns{ - "#,##0.###;#,##0.###-", - "¤ #,##0.000;¤ #,##0.000-", - "#,##0%", - "#E0", + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } } - Version{"1.2"} } diff --git a/icuSources/data/locales/ar_LB.txt b/icuSources/data/locales/ar_LB.txt index 56a960d4..052ad28a 100644 --- a/icuSources/data/locales/ar_LB.txt +++ b/icuSources/data/locales/ar_LB.txt @@ -1,60 +1,70 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_LB.xml -// * -// *************************************************************************** -ar_LB{ - Version{"1.2"} - calendar{ - gregorian{ - dayNames{ - format{ - abbreviated{ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت", - } - } - } - monthNames{ - format{ - abbreviated{ - "كانون الثاني", - "شباط", - "آذار", - "نيسان", - "نوار", - "حزيران", - "تموز", - "آب", - "أيلول", - "تشرين الأول", - "تشرين الثاني", - "كانون الأول", - } - wide{ - "كانون الثاني", - "شباط", - "آذار", - "نيسان", - "نوار", - "حزيران", - "تموز", - "آب", - "أيلول", - "تشرين الأول", - "تشرين الثاني", - "كانون الأول", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ar_LB.xml +// * +// *************************************************************************** +ar_LB{ + Version{"1.36"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + dayNames{ + format{ + abbreviated{ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت", + } + } + } + monthNames{ + format{ + abbreviated{ + "كانون الثاني", + "شباط", + "آذار", + "نيسان", + "نوار", + "حزيران", + "تموز", + "آب", + "أيلول", + "تشرين الأول", + "تشرين الثاني", + "كانون الأول", + } + wide{ + "كانون الثاني", + "شباط", + "آذار", + "نيسان", + "نوار", + "حزيران", + "تموز", + "آب", + "أيلول", + "تشرين الأول", + "تشرين الثاني", + "كانون الأول", + } + } + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } +} diff --git a/icuSources/data/locales/ar_LY.txt b/icuSources/data/locales/ar_LY.txt index f7c532a8..364a418d 100644 --- a/icuSources/data/locales/ar_LY.txt +++ b/icuSources/data/locales/ar_LY.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_LY.xml +// * Source File:/common/main/ar_LY.xml // * // *************************************************************************** ar_LY{ - NumberPatterns{ - "#,##0.###;#,##0.###-", - "¤ #,##0.000;¤ #,##0.000-", - "#,##0%", - "#E0", + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } } - Version{"1.2"} } diff --git a/icuSources/data/locales/ar_MA.txt b/icuSources/data/locales/ar_MA.txt index b5fabd6e..981ea0a0 100644 --- a/icuSources/data/locales/ar_MA.txt +++ b/icuSources/data/locales/ar_MA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_MA.xml +// * Source File:/common/main/ar_MA.xml // * // *************************************************************************** ar_MA{ @@ -18,8 +18,22 @@ ar_MA{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } } diff --git a/icuSources/data/locales/ar_OM.txt b/icuSources/data/locales/ar_OM.txt index 9ee04835..f2f24018 100644 --- a/icuSources/data/locales/ar_OM.txt +++ b/icuSources/data/locales/ar_OM.txt @@ -1,11 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_OM.xml +// * Source File:/common/main/ar_OM.xml // * // *************************************************************************** ar_OM{ - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } } diff --git a/icuSources/data/locales/ar_QA.txt b/icuSources/data/locales/ar_QA.txt index a471b44e..bd9ea12a 100644 --- a/icuSources/data/locales/ar_QA.txt +++ b/icuSources/data/locales/ar_QA.txt @@ -1,21 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_QA.xml +// * Source File:/common/main/ar_QA.xml // * // *************************************************************************** ar_QA{ NumberPatterns{ - "###0.###;###0.###-", - "¤###0.00;-¤###0.00", + "#0.###;#0.###-", + "¤#0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } dayNames{ format{ abbreviated{ @@ -29,6 +33,12 @@ ar_QA{ } } } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } } } } diff --git a/icuSources/data/locales/ar_SA.txt b/icuSources/data/locales/ar_SA.txt index f7530bd5..e4916f5c 100644 --- a/icuSources/data/locales/ar_SA.txt +++ b/icuSources/data/locales/ar_SA.txt @@ -1,21 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_SA.xml +// * Source File:/common/main/ar_SA.xml // * // *************************************************************************** ar_SA{ NumberPatterns{ - "###0.###;###0.###-", - "¤###0.00;-¤###0.00", + "#0.###;#0.###-", + "¤#0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } dayNames{ format{ abbreviated{ @@ -29,6 +33,12 @@ ar_SA{ } } } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } } } } diff --git a/icuSources/data/locales/ar_SD.txt b/icuSources/data/locales/ar_SD.txt index 43a27ec1..fdc3eb05 100644 --- a/icuSources/data/locales/ar_SD.txt +++ b/icuSources/data/locales/ar_SD.txt @@ -1,11 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_SD.xml +// * Source File:/common/main/ar_SD.xml // * // *************************************************************************** ar_SD{ - Version{"1.2"} + Version{"1.35"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } + } + } } diff --git a/icuSources/data/locales/ar_SY.txt b/icuSources/data/locales/ar_SY.txt index 32f06efe..69d23863 100644 --- a/icuSources/data/locales/ar_SY.txt +++ b/icuSources/data/locales/ar_SY.txt @@ -1,76 +1,76 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_SY.xml -// * -// *************************************************************************** -ar_SY{ - NumberPatterns{ - "###0.###;###0.###-", - "¤###0.00;-¤###0.00", - "#,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 5, - 1, - } - dayNames{ - format{ - abbreviated{ - "الأحد", - "الاثنين", - "الثلاثاء", - "الأربعاء", - "الخميس", - "الجمعة", - "السبت", - } - } - } - monthNames{ - format{ - abbreviated{ - "كانون الثاني", - "شباط", - "آذار", - "نيسان", - "نوار", - "حزيران", - "تموز", - "آب", - "أيلول", - "تشرين الأول", - "تشرين الثاني", - "كانون الأول", - } - wide{ - "كانون الثاني", - "شباط", - "آذار", - "نيسان", - "نوار", - "حزيران", - "تموز", - "آب", - "أيلول", - "تشرين الأول", - "تشرين الثاني", - "كانون الأول", - } - } - } - weekend:intvector{ - 6, - 0, - 7, - 86400000, - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ar_SY.xml +// * +// *************************************************************************** +ar_SY{ + NumberPatterns{ + "#0.###;#0.###-", + "¤#0.00", + "#,##0%", + "#E0", + } + Version{"1.40"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 5, + 1, + } + dayNames{ + format{ + abbreviated{ + "الأحد", + "الاثنين", + "الثلاثاء", + "الأربعاء", + "الخميس", + "الجمعة", + "السبت", + } + } + } + monthNames{ + format{ + abbreviated{ + "كانون الثاني", + "شباط", + "آذار", + "نيسان", + "نوار", + "حزيران", + "تموز", + "آب", + "أيلول", + "تشرين الأول", + "تشرين الثاني", + "كانون الأول", + } + wide{ + "كانون الثاني", + "شباط", + "آذار", + "نيسان", + "نوار", + "حزيران", + "تموز", + "آب", + "أيلول", + "تشرين الأول", + "تشرين الثاني", + "كانون الأول", + } + } + } + weekend:intvector{ + 6, + 0, + 7, + 86400000, + } + } + } +} diff --git a/icuSources/data/locales/ar_TN.txt b/icuSources/data/locales/ar_TN.txt index dfeac6df..85cac3d9 100644 --- a/icuSources/data/locales/ar_TN.txt +++ b/icuSources/data/locales/ar_TN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_TN.xml +// * Source File:/common/main/ar_TN.xml // * // *************************************************************************** ar_TN{ @@ -18,18 +18,22 @@ ar_TN{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "###0.###;###0.###-", - "¤###0.00;-¤###0.00", + "#0.###;#0.###-", + "¤#0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } dayNames{ format{ abbreviated{ @@ -43,6 +47,12 @@ ar_TN{ } } } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } } } } diff --git a/icuSources/data/locales/ar_YE.txt b/icuSources/data/locales/ar_YE.txt index 83784eac..e9861ca7 100644 --- a/icuSources/data/locales/ar_YE.txt +++ b/icuSources/data/locales/ar_YE.txt @@ -1,21 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_YE.xml +// * Source File:/common/main/ar_YE.xml // * // *************************************************************************** ar_YE{ NumberPatterns{ - "###0.###;###0.###-", - "¤###0.00;-¤###0.00", + "#0.###;#0.###-", + "¤#0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } dayNames{ format{ abbreviated{ @@ -29,6 +33,12 @@ ar_YE{ } } } + weekend:intvector{ + 5, + 0, + 6, + 86400000, + } } } } diff --git a/icuSources/data/locales/as.txt b/icuSources/data/locales/as.txt new file mode 100644 index 00000000..d616d135 --- /dev/null +++ b/icuSources/data/locales/as.txt @@ -0,0 +1,105 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/as.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/as.xml + */ +as{ + AuxExemplarCharacters{"[\u200C \u200D ৲]"} + Countries{ + IN{"ভাৰত"} + } + Currencies{ + INR{ + "টকা", + "INR", + } + } + ExemplarCharacters{ + "[় ঁ-ঃ অ-ঋ ৠ ঌ ৡ এ ঐ ও-ড {ড়} ঢ {ঢ়} ণ ত ৎ থ-ন প-য {য়} ৰ ল ৱ শ-হ ঽ-ৄ ৢ ৣ ে " + "ৈ ো-্ ৗ]" + } + Languages{ + as{"অসমীয়া"} + } + LocaleScript{ + "Beng", + } + Version{"1.31"} + calendar{ + gregorian{ + AmPmMarkers{ + "পূৰ্বা", + "অপ", + } + dayNames{ + format{ + abbreviated{ + "ৰবি", + "সোম", + "মঙ্গল", + "বুধ", + "বৃহষ্পতি", + "শুক্ৰ", + "শনি", + } + wide{ + "দেওবাৰ", + "সোমবাৰ", + "মঙ্গলবাৰ", + "বুধবাৰ", + "বৃহষ্পতিবাৰ", + "শুক্ৰবাৰ", + "শনিবাৰ", + } + } + } + monthNames{ + format{ + abbreviated{ + "জানু", + "ফেব্ৰু", + "মাৰ্চ", + "এপ্ৰিল", + "মে", + "জুন", + "জুলাই", + "আগ", + "সেপ্ট", + "অক্টো", + "নভে", + "ডিসে", + } + wide{ + "জানুয়াৰী", + "ফেব্ৰুয়াৰী", + "মাৰ্চ", + "এপ্ৰিল", + "মে", + "জুন", + "জুলাই", + "আগষ্ট", + "সেপ্টেম্বৰ", + "অক্টোবৰ", + "নভেম্বৰ", + "ডিসেম্বৰ", + } + } + } + } + } + zoneStrings{ + "Asia:Calcutta"{ + ec{"এলাহাৱাদ"} + ld{"ভাৰতীয় সময়"} + ls{"ভাৰতীয় সময়"} + sd{"ভা. স."} + ss{"ভা. স."} + } + } +} diff --git a/icuSources/data/locales/as_IN.txt b/icuSources/data/locales/as_IN.txt new file mode 100644 index 00000000..c2ebd5ff --- /dev/null +++ b/icuSources/data/locales/as_IN.txt @@ -0,0 +1,44 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/as_IN.xml +// * +// *************************************************************************** +as_IN{ + NumberPatterns{ + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", + "#E0", + } + Version{"1.29"} + calendar{ + gregorian{ + DateTimePatterns{ + "h.mm.ss a z", + "h.mm.ss a z", + "h.mm.ss a", + "h.mm. a", + "EEEE, d MMMM, yyyy", + "d MMMM, yyyy", + "dd-MM-yyyy", + "d-M-yyyy", + "{1} {0}", + } + availableFormats{ + MMMMd{"d MMMM"} + MMdd{"dd-MM"} + yyyyMM{"MM-yyyy"} + yyyyMMMM{"MMMM, yyyy"} + } + weekend:intvector{ + 1, + 0, + 1, + 86400000, + } + } + } +} diff --git a/icuSources/data/locales/az.txt b/icuSources/data/locales/az.txt new file mode 100644 index 00000000..c24e0541 --- /dev/null +++ b/icuSources/data/locales/az.txt @@ -0,0 +1,144 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/az.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/az.xml + */ +az{ + AuxExemplarCharacters{"[w]"} + Countries{ + AZ{"Azərbaycan"} + BR{"Braziliya"} + CN{"Çin"} + DE{"Almaniya"} + FR{"Fransa"} + IN{"Hindistan"} + IT{"Ä°taliya"} + JP{"Yaponiya"} + RU{"Rusiya"} + US{"Amerika Birləşmiş Ştatları"} + } + Currencies{ + AZM{ + "man.", + "Manat", + } + } + ExemplarCharacters{"[a-c ç d e ə f g ğ h i Ä° ı j-o ö p-s ş t u ü v x-z]"} + Languages{ + az{"azərbaycanca"} + } + LocaleScript{ + "Latn", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.39"} + calendar{ + gregorian{ + dayNames{ + format{ + abbreviated{ + "B.", + "B.e.", + "Ç.a.", + "Ç.", + "C.a.", + "C.", + "Ş.", + } + wide{ + "bazar", + "bazar ertəsi", + "çərşənbə axşam", + "çərşənbə", + "cümə axşamı", + "cümə axşamı", + "şənbə", + } + } + } + eras{ + abbreviated{ + "e.ə.", + "b.e.", + } + wide{ + "eramızdan əvvəl", + "bizim eramızın", + } + } + monthNames{ + format{ + abbreviated{ + "yan", + "fev", + "mar", + "apr", + "may", + "iyn", + "iyl", + "avq", + "sen", + "okt", + "noy", + "dek", + } + wide{ + "Yanvar", + "Fevral", + "Mart", + "Aprel", + "May", + "Ä°yun", + "Ä°yul", + "Avqust", + "Sentyabr", + "Oktyabr", + "Noyabr", + "Dekabr", + } + } + } + quarters{ + format{ + abbreviated{ + "1-ci kv.", + "2-ci kv.", + "3-cü kv.", + "4-cü kv.", + } + wide{ + "1-ci kvartal", + "2-ci kvartal", + "3-cü kvartal", + "4-cü kvartal", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } +} diff --git a/icuSources/data/locales/az_AZ.txt b/icuSources/data/locales/az_AZ.txt new file mode 100644 index 00000000..dc0888be --- /dev/null +++ b/icuSources/data/locales/az_AZ.txt @@ -0,0 +1,22 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/az_AZ.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/az_AZ.xml + */ +az_AZ{ + "%%ALIAS"{"az_Latn_AZ"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/az_Cyrl.txt b/icuSources/data/locales/az_Cyrl.txt new file mode 100644 index 00000000..b541a335 --- /dev/null +++ b/icuSources/data/locales/az_Cyrl.txt @@ -0,0 +1,84 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/az_Cyrl.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/az_Cyrl.xml + */ +az_Cyrl{ + AuxExemplarCharacters{"[ц щ ъ ь-я]"} + Countries{ + AZ{"Азәрбајҹан"} + BR{"Бразилија"} + CN{"Чин"} + DE{"Алманија"} + FR{"Франса"} + IN{"Һиндистан"} + IT{"Италија"} + JP{"Јапонија"} + RU{"Русија"} + US{"Америка Бирләшмиш Штатлары"} + } + Currencies{ + AZM{ + "ман.", + "манат", + } + } + ExemplarCharacters{"[а ә б-г ғ д-й ј к ҝ л-о Ó© п-у Ò¯ ф х Ò» ч Ò¹ ш ы]"} + Languages{ + az{"Азәрбајҹан"} + de{"алманҹа"} + en{"инҝилисҹә"} + es{"испанҹа"} + fr{"франсызҹа"} + it{"италјанҹа"} + ja{"јапонҹа"} + pt{"португалҹа"} + ru{"русҹа"} + zh{"чинҹә"} + } + LocaleScript{ + "Cyrl", + } + Version{"1.18"} + calendar{ + gregorian{ + dayNames{ + format{ + wide{ + "базар", + "базар ертәси", + "чәршәнбә ахшамы", + "чәршәнбә", + "ҹүмә ахшамы", + "ҹүмә", + "шәнбә", + } + } + } + monthNames{ + format{ + wide{ + "јанвар", + "феврал", + "март", + "апрел", + "май", + "ијун", + "ијул", + "август", + "сентјабр", + "октјабр", + "нојабр", + "декабр", + } + } + } + } + } +} diff --git a/icuSources/data/locales/az_Cyrl_AZ.txt b/icuSources/data/locales/az_Cyrl_AZ.txt new file mode 100644 index 00000000..4c70b221 --- /dev/null +++ b/icuSources/data/locales/az_Cyrl_AZ.txt @@ -0,0 +1,19 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/az_Cyrl_AZ.xml +// * +// *************************************************************************** +az_Cyrl_AZ{ + Version{"1.14"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/az_Latn.txt b/icuSources/data/locales/az_Latn.txt new file mode 100644 index 00000000..3a3a36ec --- /dev/null +++ b/icuSources/data/locales/az_Latn.txt @@ -0,0 +1,27 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/az_Latn.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/az_Latn.xml + */ +az_Latn{ + Languages{ + de{"almanca"} + en{"ingiliscə"} + es{"ispanca"} + fr{"fransızca"} + ja{"yaponca"} + pt{"portuqalca"} + ru{"rusca"} + zh{"çincə"} + } + LocaleScript{ + "Latn", + } + Version{"1.18"} +} diff --git a/icuSources/data/locales/az_Latn_AZ.txt b/icuSources/data/locales/az_Latn_AZ.txt new file mode 100644 index 00000000..e5d13c39 --- /dev/null +++ b/icuSources/data/locales/az_Latn_AZ.txt @@ -0,0 +1,19 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/az_Latn_AZ.xml +// * +// *************************************************************************** +az_Latn_AZ{ + Version{"1.17"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/be.txt b/icuSources/data/locales/be.txt index 69fd7333..e81da984 100644 --- a/icuSources/data/locales/be.txt +++ b/icuSources/data/locales/be.txt @@ -1,124 +1,224 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/be.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/be.xml - */ -be{ - Countries{ - BY{"Беларусь"} - } - Currencies{ - BYB{ - "Руб", - "BYB", - } - } - ExemplarCharacters{"[а-з й-ш ы-я ’ёіў {дж} {дз}]"} - Languages{ - be{"Беларускі"} - } - LocaleScript{ - "Cyrl", - } - NumberElements{ - ",", - " ", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH.mm.ss z", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - "EEEE, d MMMM yyyy", - "d MMMM yyyy", - "d.M.yyyy", - "d.M.yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "нд", - "пн", - "аў", - "ср", - "чц", - "пт", - "сб", - } - wide{ - "нядзеля", - "панядзелак", - "аўторак", - "серада", - "чацвер", - "пятніца", - "субота", - } - } - } - eras{ - abbreviated{ - "да н.е.", - "н.е.", - } - } - monthNames{ - format{ - abbreviated{ - "сту", - "лют", - "сак", - "кра", - "май", - "чэр", - "ліп", - "жні", - "вер", - "кас", - "ліс", - "сне", - } - wide{ - "студзень", - "люты", - "сакавік", - "красавік", - "май", - "чэрвень", - "ліпень", - "жнівень", - "верасень", - "кастрычнік", - "лістапад", - "снежань", - } - } - } - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/be.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/be.xml + */ +be{ + Countries{ + BR{"Бразілія"} + BY{"Беларусь"} + CN{"Кітай"} + DE{"Германія"} + FR{"Францыя"} + GB{"Велікабрытанія"} + IN{"Індыя"} + IT{"Італія"} + JP{"Японія"} + RU{"Расія"} + US{"Злучаныя Штаты"} + } + Currencies{ + BRL{ + "BRL", + "бразільскі рэал", + } + BYB{ + "Руб", + "BYB", + } + BYR{ + "BYR", + "беларускі рубель", + } + CNY{ + "CNY", + "кітайскі юань Renminbi", + } + EUR{ + "€", + "еўра", + } + GBP{ + "£", + "англійскі фунт", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/be_BY.xml // * // *************************************************************************** be_BY{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0;-¤#,##0", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} } diff --git a/icuSources/data/locales/bg.txt b/icuSources/data/locales/bg.txt index cb5313e8..efe09df5 100644 --- a/icuSources/data/locales/bg.txt +++ b/icuSources/data/locales/bg.txt @@ -1,1864 +1,2176 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/bg.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/bg.xml - */ -bg{ - Countries{ - AD{"Андора"} - AE{"Обединени Арабски Емирства"} - AF{"Афганистан"} - AG{"Антигуа и Барбуда"} - AI{"Ангуила"} - AL{"Албания"} - AM{"Армения"} - AN{"Холандски Антили"} - AO{"Ангола"} - AQ{"Антарктика"} - AR{"Аржентина"} - AS{"Американско Самоа"} - AT{"Австрия"} - AU{"Австралия"} - AW{"Аруба"} - AZ{"Азербайджан"} - BA{"Босна и Херцеговина"} - BB{"Барбадос"} - BD{"Бангладеш"} - BE{"Белгия"} - BF{"Буркина Фасо"} - BG{"България"} - BH{"Бахрейн"} - BI{"Бурунди"} - BJ{"Бенин"} - BM{"Бермуда"} - BN{"Бруней Дарусалам"} - BO{"Боливия"} - BR{"Бразилия"} - BS{"Бахами"} - BT{"Бутан"} - BV{"Остров Буве"} - BW{"Ботсуана"} - BY{"Беларус"} - BZ{"Белиз"} - CA{"Канада"} - CC{"Кокосови (Кийлинг) острови"} - CD{"Демократична Република Конго"} - CF{"Централноафриканска Република"} - CG{"Конго"} - CH{"Швейцария"} - CI{"Кот д’Ивоар"} - CK{"Острови Кук"} - CL{"Чили"} - CM{"Камерун"} - CN{"Китай"} - CO{"Колумбия"} - CR{"Коста Рика"} - CU{"Куба"} - CV{"Кабо Верде"} - CX{"Остров Кристмас"} - CY{"Кипър"} - CZ{"Чешка Република"} - DE{"Германия"} - DJ{"Джибути"} - DK{"Дания"} - DM{"Доминика"} - DO{"Доминиканска Република"} - DZ{"Алжир"} - EC{"Еквадор"} - EE{"Естония"} - EG{"Египет"} - EH{"Западна Сахара"} - ER{"Еритрея"} - ES{"Испания"} - ET{"Етиопия"} - FI{"Финландия"} - FJ{"Фиджи"} - FK{"Фолклендски острови"} - FM{"Микронезия, Обединени Щати"} - FO{"Фарьорски острови"} - FR{"Франция"} - GA{"Габон"} - GB{"Обединено кралство"} - GD{"Гренада"} - GE{"Грузия"} - GF{"Френска Гвиана"} - GH{"Гана"} - GI{"Гибралтар"} - GL{"Гренландия"} - GM{"Гамбия"} - GN{"Гвинея"} - GP{"Гваделупа"} - GQ{"Екваториална Гвинея"} - GR{"Гърция"} - GS{"Южна Джорджия и Южни Сандвичеви Острови"} - GT{"Гватемала"} - GU{"Гуам"} - GW{"Гвинея-Бисау"} - GY{"Гвиана"} - HK{"Хонг-Конг О.А.Р. на Китай"} - HM{"Остров Хърд и Острови Макдоналд"} - HN{"Хондурас"} - HR{"Хърватска"} - HT{"Хаити"} - HU{"Унгария"} - ID{"Индонезия"} - IE{"Ирландия"} - IL{"Израел"} - IN{"Индия"} - IO{"Британски територии в Индийския океан"} - IQ{"Ирак"} - IR{"Иран, Ислямска република"} - IS{"Исландия"} - IT{"Италия"} - JM{"Ямайка"} - JO{"Йордания"} - JP{"Япония"} - KE{"Кения"} - KG{"Киргизстан"} - KH{"Камбоджа"} - KI{"Кирибати"} - KM{"Комори"} - KN{"Сейнт Китс и Невис"} - KP{"Корея, Северна"} - KR{"Корея, Южна"} - KW{"Кувейт"} - KY{"Кайманови острови"} - KZ{"Казахстан"} - LA{"Народна Демократична Република Лаос"} - LB{"Ливан"} - LC{"Сейнт Лусия"} - LI{"Лихтенщайн"} - LK{"Шри Ланка"} - LR{"Либерия"} - LS{"Лесото"} - LT{"Литва"} - LU{"Люксембург"} - LV{"Латвия"} - LY{"Либийска Арабска Джамахирия"} - MA{"Мароко"} - MC{"Монако"} - MD{"Молдова, Република"} - MG{"Мадагаскар"} - MH{"Маршалови Острови"} - MK{"Македония, Република"} - ML{"Мали"} - MM{"Мианмар"} - MN{"Монголия"} - MO{"Макао О.А.Р. на Китай"} - MP{"Северни Мариански Острови"} - MQ{"Мартиника"} - MR{"Мавритания"} - MS{"Монсерат"} - MT{"Малта"} - MU{"Мавриций"} - MV{"Малдиви"} - MW{"Малави"} - MX{"Мексико"} - MY{"Малайзия"} - MZ{"Мозамбик"} - NA{"Намибия"} - NC{"Нова Каледония"} - NE{"Нигер"} - NF{"Остров Норфолк"} - NG{"Нигерия"} - NI{"Никарагуа"} - NL{"Холандия"} - NO{"Норвегия"} - NP{"Непал"} - NR{"Науру"} - NU{"Ниуе"} - NZ{"Нова Зеландия"} - OM{"Оман"} - PA{"Панама"} - PE{"Перу"} - PF{"Френска Полинезия"} - PG{"Папуа Нова Гвинея"} - PH{"Филипини"} - PK{"Пакистан"} - PL{"Полша"} - PM{"Сен Пиер и Мигелон"} - PN{"Питкайрн"} - PR{"Пуерто Рико"} - PS{"Палестински територии"} - PT{"Португалия"} - PW{"Палау"} - PY{"Парагвай"} - QA{"Катар"} - RE{"Реюниън"} - RO{"Румъния"} - RU{"Руска Федерация"} - RW{"Руанда"} - SA{"Саудитска Арабия"} - SB{"Соломонови Острови"} - SC{"Сейшели"} - SD{"Судан"} - SE{"Швеция"} - SG{"Сингапур"} - SH{"Света Елена"} - SI{"Словения"} - SJ{"Свалбард и Ян Майен"} - SK{"Словакия"} - SL{"Сиера Леоне"} - SM{"Сан Марино"} - SN{"Сенегал"} - SO{"Сомалия"} - SR{"Суринам"} - ST{"Сао Томе и Принципе"} - SV{"Ел Салвадор"} - SY{"Сирийска Арабска Република"} - SZ{"Суазиленд"} - TC{"Острови Туркс и Кайкос"} - TD{"Чад"} - TF{"Френски Южни Територии"} - TG{"Того"} - TH{"Тайланд"} - TJ{"Таджикистан"} - TK{"Токелау"} - TL{"Източен Тимор"} - TM{"Туркменистан"} - TN{"Тунис"} - TO{"Тонга"} - TR{"Турция"} - TT{"Тринидад и Тобаго"} - TV{"Тувалу"} - TW{"Тайван"} - TZ{"Танзания"} - UA{"Украйна"} - UG{"Уганда"} - UM{"САЩ - външни острови"} - US{"САЩ"} - UY{"Уругвай"} - UZ{"Узбекистан"} - VA{"Свещено море (Ватиканска държава)"} - VC{"Сейнт Винсънт и Гренадини"} - VE{"Венецуела"} - VG{"Британски Вирджински Острови"} - VI{"САЩ, Вирджински Острови"} - VN{"Виетнам"} - VU{"Вануату"} - WF{"Уолис и Футуна"} - WS{"Самоа"} - YE{"Йемен"} - YT{"Мейот"} - YU{"Югославия"} - ZA{"Южна Африка"} - ZM{"Замбия"} - ZW{"Зимбабве"} - } - Currencies{ - ADD{ - "ADD", - "Андорски динар", - } - ADP{ - "ADP", - "Андорска песета", - } - AED{ - "AED", - "Обединени арабски емирства-дирхам", - } - AFA{ - "AFA", - "Афганистански афган (1927-2002)", - } - AFN{ - "Af", - "Афганистански афган", - } - ALK{ - "ALK", - "Албански лек (1946-1961)", - } - ALL{ - "lek", - "Албански лек", - } - ALV{ - "ALV", - "Албански валутен лек", - } - ALX{ - "ALX", - "Албански конвертируем долар", - } - AMD{ - "dram", - "Арменски драм", - } - ANG{ - "NA f.", - "Антилски гулден", - } - AOA{ - "AOA", - "Анголска кванца", - } - AOK{ - "AOK", - "Анголска кванца (1977-1990)", - } - AON{ - "AON", - "Анголска нова кванца (1990-2000)", - } - AOR{ - "AOR", - "Анголска нова кванца (1995-1999)", - } - AOS{ - "AOS", - "Анголско ескудо", - } - ARP{ - "ARP", - "Аржентинско песо (1983-1985)", - } - ARS{ - "Arg$", - "Аржентинско песо", - } - ATS{ - "ATS", - "Австрийски шилинг", - } - AUD{ - "$A", - "Австралийски долар", - } - AUP{ - "AUP", - "Австралийска лира", - } - AWG{ - "AWG", - "Арубски гилдер - о. Аруба", - } - AZM{ - "AZM", - "Азербайджански манат", - } - BAD{ - "BAD", - "Босна и Херцеговина-динар", - } - BAM{ - "KM", - "Босненска конвертируема марка", - } - BAN{ - "BAN", - "Босна и Херцеговина-нов динар", - } - BBD{ - "BDS$", - "Барбейдоски долар", - } - BDT{ - "Tk", - "Бангладешка така", - } - BEC{ - "BEC", - "Белгийски франк (конвертируем)", - } - BEF{ - "BF", - "Белгийски франк", - } - BEL{ - "BEL", - "Белгийски франк (финансов)", - } - BGL{ - "лв", - "BGL", - } - BGM{ - "BGM", - "Български социалистически лев", - } - BGN{ - "лв.", - "BGN", - } - BGO{ - "BGO", - "Български лев (1879-1952)", - } - BGX{ - "BGX", - "Български конвертируем лев", - } - BHD{ - "BD", - "Бахрейнски динар", - } - BIF{ - "Fbu", - "Бурундийски франк", - } - BMD{ - "Ber$", - "Бермудски долар", - } - BMP{ - "BMP", - "Бермудска лира", - } - BND{ - "BND", - "Брунейски долар", - } - BOB{ - "Bs", - "Боливийско боливиано", - } - BOL{ - "BOL", - "Боливийско боливиано (1863-1962)", - } - BOP{ - "BOP", - "Боливийско песо", - } - BRL{ - "R$", - "Бразилски реал", - } - BSD{ - "BSD", - "Бахамски долар", - } - BSP{ - "BSP", - "Бахамска лира", - } - BTN{ - "Nu", - "Бутански нгултрум", - } - BTR{ - "BTR", - "Бутанска рупия", - } - BUR{ - "BUR", - "Бирманска рупия", - } - BWP{ - "BWP", - "Ботсуанска пула", - } - BYB{ - "BYB", - "Беларуска нова рубла (1994-1999)", - } - BYL{ - "BYL", - "Беларуска рубла (1992-1994)", - } - BYR{ - "Rbl", - "Беларуска рубла", - } - BZD{ - "BZ$", - "Белизийски долар", - } - BZH{ - "BZH", - "Британски хондураски долар", - } - CAD{ - "Can$", - "Канадски долар", - } - CDF{ - "CDF", - "Конгоански франк", - } - CHF{ - "SwF", - "Швейцарски франк", - } - CKD{ - "CKD", - "Острови Кук-долар", - } - CLE{ - "CLE", - "Чилийско ескудо", - } - CLP{ - "Ch$", - "Чилийско песо", - } - CNY{ - "Y", - "Китайски ренминби юан", - } - COP{ - "Col$", - "Колумбийско песо", - } - CRC{ - "C", - "Костарикански колон", - } - CSC{ - "CSC", - "Чехословашка крона", - } - CSK{ - "CSK", - "Чехословашка конвертируема крона", - } - CUP{ - "CUP", - "Кубинско песо", - } - CVE{ - "CVEsc", - "Кабо Верде ескудо", - } - CYP{ - "£C", - "Кипърска лира", - } - CZK{ - "CZK", - "Чешка крона", - } - DEM{ - "DEM", - "Германска марка", - } - DJF{ - "DF", - "Джибутски франк", - } - DKK{ - "DKr", - "Датска крона", - } - DOP{ - "RD$", - "Доминиканско песо", - } - DZD{ - "DA", - "Алжирски динар", - } - DZF{ - "DZF", - "Алжирски нов франк", - } - ECS{ - "ECS", - "Еквадорско сукре", - } - EEK{ - "EEK", - "Естонска крона", - } - EGP{ - "EGP", - "Египетска лира", - } - ERN{ - "ERN", - "Еритрейска накфа", - } - ESP{ - "ESP", - "Испанска песета", - } - ETB{ - "Br", - "Етиопски бир", - } - ETD{ - "ETD", - "Етиопски долар", - } - EUR{ - "€", - "Евро", - } - FIM{ - "FIM", - "Финландска марка", - } - FIN{ - "FIN", - "Финландска марка (1860-1962)", - } - FJD{ - "F$", - "Фиджи - долар", - } - FJP{ - "FJP", - "Фиджи - лира", - } - FKP{ - "FKP", - "Фолкландска лира", - } - FRF{ - "FRF", - "Френски франк", - } - GAF{ - "GAF", - "Габон - CFA франк", - } - GBP{ - "£", - "Британска лира", - } - GEL{ - "lari", - "Грузински лари", - } - GHC{ - "GHC", - "Ганайски седи", - } - GHO{ - "GHO", - "Ганайски стари седи", - } - GHP{ - "GHP", - "Ганайска лира", - } - GIP{ - "GIP", - "Гибралтарска лира", - } - GLK{ - "GLK", - "Гренландска крона", - } - GMD{ - "GMD", - "Гамбийски даласи", - } - GMP{ - "GMP", - "Гамбийска лира", - } - GNF{ - "GF", - "Гвинейски франк", - } - GNI{ - "GNI", - "Гвинейски франк (1960-1972)", - } - GPF{ - "GPF", - "Гваделупски франк", - } - GRD{ - "GRD", - "Гръцка драхма", - } - GRN{ - "GRN", - "Гръцка нова драхма", - } - GTQ{ - "Q", - "Гватемалски кветзал", - } - GWP{ - "GWP", - "Гвинея-Бисау песо", - } - GYD{ - "G$", - "Гаянски долар", - } - HKD{ - "HK$", - "Хонгконгски долар", - } - HNL{ - "L", - "Хондураска лемпира", - } - HRD{ - "HRD", - "Хърватски динар", - } - HRK{ - "HRK", - "Хърватска куна", - } - HTG{ - "HTG", - "Хаитски гурд", - } - HUF{ - "Ft", - "Унгарски форинт", - } - IDN{ - "IDN", - "Индонезийска нова рупия", - } - IDR{ - "Rp", - "Индонезийска рупия", - } - IEP{ - "IR£", - "Ирландска лира", - } - ILL{ - "ILL", - "Израелски шекел", - } - ILP{ - "ILP", - "Израелска лира", - } - ILS{ - "ILS", - "Израелски нов шекел", - } - INR{ - "INR", - "Индийска рупия", - } - IQD{ - "ID", - "Иракски динар", - } - IRR{ - "RI", - "Ирански риал", - } - ISK{ - "ISK", - "Исландска крона", - } - ITL{ - "₤", - "Италианска лира", - } - JMD{ - "J$", - "Ямайски долар", - } - JMP{ - "JMP", - "Ямайска лира", - } - JOD{ - "JD", - "Йордански динар", - } - JPY{ - "Â¥", - "Японска йена", - } - KES{ - "K Sh", - "Кенийски шилинг", - } - KGS{ - "som", - "Киргистански сом", - } - KHO{ - "KHO", - "Камбоджански стар риел", - } - KHR{ - "CR", - "Камбоджански риел", - } - KMF{ - "CF", - "Коморски франк", - } - KPW{ - "KPW", - "Севернокорейски вон", - } - KRW{ - "KRW", - "КНДР вон", - } - KWD{ - "KD", - "Кувейтски динар", - } - KYD{ - "KYD", - "Кайманови острови - долар", - } - KZR{ - "KZR", - "Казахстанска рубла", - } - KZT{ - "T", - "Казахстанско тенге", - } - LAK{ - "LAK", - "Лаоски кип", - } - LBP{ - "LL", - "Ливанска лира", - } - LIF{ - "LIF", - "Лихтенщайнски франк", - } - LKR{ - "SL Re", - "Шриланкска рупия", - } - LNR{ - "LNR", - "Сейлонска рупия", - } - LRD{ - "LRD", - "Либерийски долар", - } - LSL{ - "M", - "Лесотско лоти", - } - LTL{ - "LTL", - "Литовски литаз", - } - LUF{ - "LUF", - "Люксембургски франк", - } - LVL{ - "LVL", - "Латвийски лат", - } - LVR{ - "LVR", - "Латвийска рубла", - } - LYD{ - "LD", - "Либийски динар", - } - LYP{ - "LYP", - "Либийска лира", - } - MAD{ - "MAD", - "Марокански дирхам", - } - MAF{ - "MAF", - "Марокански франк", - } - MDL{ - "MDL", - "Молдовско леу", - } - MGF{ - "MGF", - "Малгашки франк - Мадагаскар", - } - MHD{ - "MHD", - "Маршалски острови-долар", - } - MKD{ - "MDen", - "Македонски денар", - } - MKN{ - "MKN", - "Македонски денар (1992-1993)", - } - MMK{ - "MMK", - "Миянмарски (Бирма) кият", - } - MMX{ - "MMX", - "Миянмарски конвертируем долар", - } - MNT{ - "Tug", - "Монголски тугрик", - } - MOP{ - "MOP", - "Макао - патака", - } - MQF{ - "MQF", - "Мартиника - франк", - } - MRO{ - "UM", - "Мавританска огия", - } - MTL{ - "Lm", - "Малтийска лира", - } - MUR{ - "MUR", - "Маврицийска рупия", - } - MVP{ - "MVP", - "Малдивска рупия - Малдиви", - } - MVR{ - "MVR", - "Малдивска руфия", - } - MWK{ - "MK", - "Малавийска квача", - } - MWP{ - "MWP", - "Малавийска лира", - } - MXN{ - "MEX$", - "Мексиканско ново песо", - } - MXP{ - "MXP", - "Мексиканско сребърно песо (1861-1992)", - } - MYR{ - "RM", - "Малайзийски рингит", - } - MZE{ - "MZE", - "Мозамбикско ескудо", - } - MZM{ - "Mt", - "Мозамбикски метикал", - } - NAD{ - "N$", - "Намибийски долар", - } - NGN{ - "NGN", - "Нигерийска найра", - } - NGP{ - "NGP", - "Нигерийска лира", - } - NIC{ - "NIC", - "Никарагуанска кордоба", - } - NIG{ - "NIG", - "Никарагуанска златна кордоба", - } - NLG{ - "NLG", - "Холандски гулден", - } - NOK{ - "NKr", - "Норвежка крона", - } - NPR{ - "Nrs", - "Непалска рупия", - } - NZD{ - "$NZ", - "Новозеландски долар", - } - NZP{ - "NZP", - "Новозеландска лира", - } - OMR{ - "RO", - "Омански риал", - } - PAB{ - "PAB", - "Панамски балбоа", - } - PEN{ - "PEN", - "Перуански нов сол", - } - PES{ - "PES", - "Перуански сол", - } - PGK{ - "PGK", - "Папуа-новогвинейска кина", - } - PHP{ - "PHP", - "Филипинско песо", - } - PKR{ - "Pra", - "Пакистанска рупия", - } - PLN{ - "Zl", - "Полска злота", - } - PLX{ - "PLX", - "Полски конвентируем долар", - } - PLZ{ - "PLZ", - "Полска злота (1950-1995)", - } - PSP{ - "PSP", - "Палестинска лира", - } - PTE{ - "PTE", - "Португалско ескудо", - } - PYG{ - "PYG", - "Парагвайско гуарани", - } - QAR{ - "QR", - "Катарски риал", - } - ROL{ - "leu", - "Румънска лея", - } - RON{ - "RON", - "Румънска нова лея", - } - RUB{ - "RUB", - "Руска рубла", - } - RUR{ - "RUR", - "Руска рубла (1991-1998)", - } - RWF{ - "RWF", - "Руандски франк", - } - SAR{ - "SRl", - "Саудитскоарабски риал", - } - SBD{ - "SI$", - "Соломонови острови - долар", - } - SCR{ - "SR", - "Сейшелска рупия", - } - SDD{ - "SDD", - "Судански динар", - } - SDP{ - "SDP", - "Суданска лира", - } - SEK{ - "SKr", - "Шведска крона", - } - SGD{ - "S$", - "Сингапурски долар", - } - SHP{ - "SHP", - "Света Елена лира", - } - SIT{ - "SIT", - "Словенски толар", - } - SKK{ - "Sk", - "Словашка крона", - } - SLL{ - "SLL", - "Сиералеонско леоне", - } - SML{ - "SML", - "Сан Марино - лира", - } - SOS{ - "So. Sh.", - "Сомалийски шилинг", - } - SRG{ - "Sf", - "Суринамски гилдер", - } - SSP{ - "SSP", - "Шотландска лира", - } - STD{ - "Db", - "Сао Томе и Принсипи - добра", - } - STE{ - "STE", - "Сао Томе и Принсипи - ескудо", - } - SUN{ - "SUN", - "Съветска нова рубла", - } - SUR{ - "SUR", - "Съветска рубла", - } - SVC{ - "SVC", - "Салвадорски колон", - } - SYP{ - "LS", - "Сирийска лира", - } - SZL{ - "E", - "Свазилендски лилангени", - } - THB{ - "THB", - "Тайландски бат", - } - TJR{ - "TJR", - "Таджикистанска рубла", - } - TJS{ - "TJS", - "Таджикистански сомони", - } - TMM{ - "TMM", - "Туркменистански манат", - } - TND{ - "TND", - "Тунизийски динар", - } - TOP{ - "T$", - "Тонга - па анга", - } - TPE{ - "TPE", - "Тиморско ескудо", - } - TPP{ - "TPP", - "Тиморска патака", - } - TRL{ - "TL", - "Турска лира", - } - TRY{ - "TRY", - "Нова турска лира", - } - TTD{ - "TT$", - "Тринидат и Тобаго - долар", - } - TTO{ - "TTO", - "Тринидат и Тобаго - стар долар", - } - TWD{ - "NT$", - "Тайвански долар", - } - TZS{ - "T Sh", - "Танзанийски шилинг", - } - UAH{ - "UAH", - "Украинска хривня", - } - UAK{ - "UAK", - "Украински карбованец", - } - UGS{ - "UGS", - "Угандийски шилинг (1966-1987)", - } - UGX{ - "U Sh", - "Угандийски нов шилинг", - } - USD{ - "US$", - "САЩ долар", - } - UYP{ - "UYP", - "Уругвайско песо (1975-1993)", - } - UYU{ - "Ur$", - "Уругвайско песо", - } - UZS{ - "UZS", - "Узбекистански сум", - } - VAL{ - "VAL", - "Ватикана - лира", - } - VEB{ - "Be", - "Венесуелски боливар", - } - VND{ - "VND", - "Виетнамски донг", - } - VNN{ - "VNN", - "Виетнамски нов донг", - } - VNS{ - "VNS", - "Виетнамски национален донг", - } - VUV{ - "VT", - "Вануату - вату", - } - WSP{ - "WSP", - "Самоа - лира", - } - WST{ - "WST", - "Самоа - тала", - } - XAF{ - "XAF", - "Буркина Фасо - CFA - франк", - } - XAU{ - "XAU", - "Злато", - } - XCD{ - "EC$", - "Източнокарибски долар - Антигуа", - } - XEU{ - "XEU", - "Еку на ЕИО", - } - XFO{ - "XFO", - "Френски златен франк", - } - XOF{ - "XOF", - "Бенин - CFA франк", - } - XPF{ - "CFPF", - "Френскополинезийски франк", - } - YDD{ - "YDD", - "Йеменски динар", - } - YER{ - "YRl", - "Йеменски риал", - } - YUM{ - "YUM", - "Югославски динар", - } - YUN{ - "YUN", - "Югославски конвертируем динар", - } - ZAL{ - "ZAL", - "Южноафрикански ранд (финансов)", - } - ZAP{ - "ZAP", - "Южноафриканска лира", - } - ZAR{ - "R", - "Южноафрикански ранд", - } - ZMK{ - "ZMK", - "Замбийска квача", - } - ZMP{ - "ZMP", - "Замбийска лира", - } - ZRN{ - "ZRN", - "Заирско ново зайре", - } - ZRZ{ - "ZRZ", - "Заирско зайре", - } - ZWD{ - "Z$", - "Зимбабвийски долар", - } - } - ExemplarCharacters{"[а-ь юяѣѫ]"} - Keys{ - calendar{"Календар"} - collation{"Сортиране"} - currency{"Валути"} - } - Languages{ - ab{"Абкхазски"} - af{"Африканс"} - afa{"Афро-азиатски (други)"} - afh{"Африхили"} - ale{"Алеутски"} - am{"Амхарски"} - ang{"Староанглийски (ca.450-1100)"} - apa{"Езици на апахите"} - ar{"Арабски"} - art{"Изкуствен (други)"} - aus{"Австралийски езици"} - av{"Аварски"} - ay{"Аймара"} - az{"Азербайджански"} - ba{"Башкирски"} - bat{"Прибалтийски (други)"} - be{"Беларуски"} - ber{"берберски"} - bg{"Български"} - bn{"Бенгалски"} - bnt{"Банту"} - bo{"Тибетски"} - br{"Бретонски"} - bs{"Босненски"} - ca{"Каталонски"} - cai{"Централноамерикански индиански (други)"} - car{"Карибски"} - cau{"Кавказски (други)"} - ce{"Чеченски"} - cel{"Келтски (други)"} - chr{"чероки"} - chy{"чейенски"} - co{"Корсикански"} - cpe{"Креолски, от английски (други)"} - cpf{"Креолски, от френски (други)"} - cpp{"Креолски, от португалски (други)"} - crp{"Креолски (други)"} - cs{"Чешки"} - cu{"Църковно славянски"} - cy{"Уелски"} - da{"Датски"} - de{"Немски"} - den{"Славянски"} - dum{"Холандски, средновековен (1050-1350)"} - dv{"Дивехи"} - egy{"Египетски (древен)"} - el{"Гръцки"} - en{"Английски"} - enm{"Английски (1100-1500)"} - eo{"Есперанто"} - es{"Испански"} - et{"Естонски"} - eu{"Баски"} - fa{"Персийски"} - fi{"Фински"} - fiu{"Угрофинска (други)"} - fr{"Френски"} - frm{"Френски (1400-1600)"} - fro{"Френски (842-1400)"} - ga{"Ирландски"} - gd{"Шотландски галски"} - gem{"Германски (други)"} - gmh{"Немски (1050-1500)"} - goh{"Немски (750-1050)"} - got{"Готически"} - grc{"Древногръцки (до 1453)"} - gu{"Гуджарати"} - haw{"Хавайски"} - he{"Иврит"} - hi{"Хинди"} - hit{"Хитски"} - hr{"Хърватски"} - ht{"Хаитянски"} - hu{"Унгарски"} - hy{"Арменски"} - id{"Индонезийски"} - inc{"Индийски (други)"} - ine{"Индо-европейски (други)"} - io{"Идо"} - ira{"Ирански"} - is{"Исландски"} - it{"Италиански"} - ja{"Японски"} - jpr{"еврейско-персийски"} - jrb{"еврейско-арабски"} - jv{"Явански"} - ka{"Грузински"} - kg{"Конгоански"} - ki{"кикуйу"} - kk{"Казахски"} - km{"Кхмерски"} - ko{"Корейски"} - ks{"Кашмирски"} - ku{"Кюрдски"} - ky{"Киргизски"} - la{"Латински"} - lb{"Люксембургски"} - lo{"Лаоски"} - lt{"Литовски"} - lv{"Латвийски"} - mas{"масайски"} - mg{"Малгашки"} - mga{"Ирландски (900-1200)"} - mi{"Маорски"} - mis{"Други езици"} - mk{"Македонски"} - ml{"Малайски"} - mn{"Монголски"} - mo{"Молдовски"} - ms{"Малайски"} - mt{"Малтийски"} - my{"Бирмански"} - nai{"Северноамерикански индиански (други)"} - nap{"Неаполитански"} - ne{"Непалски"} - nl{"Холандски"} - no{"Норвежки"} - nub{"Нубийски езици"} - ny{"Чинянджа"} - os{"Осетски"} - ota{"Турски, отомански (1500-1928)"} - oto{"Старотурски езици"} - pa{"Пенджабски"} - paa{"Папуаски (други)"} - peo{"Староперсийски (600-400 пр.н.е.)"} - phi{"Филипински (други)"} - phn{"Финикийски"} - pl{"Полски"} - pro{"Провансалски (to 1500)"} - ps{"Пущу"} - pt{"Португалски"} - qu{"Кечуа"} - raj{"Раджастански"} - rm{"Реторомански"} - rn{"Рунди"} - ro{"Румънски"} - roa{"Романски (други)"} - ru{"Руски"} - rw{"Киняруанда"} - sa{"Санкскритски"} - sah{"Якутски"} - sai{"Южноамерикански индиански (други)"} - sc{"Сардински"} - sem{"Семитски (други)"} - sg{"Санго"} - sga{"Староирландски (до 900)"} - sh{"Сърбохърватски"} - si{"Синхалски"} - sk{"Словашки"} - sl{"Словенски"} - sla{"Славянски (други)"} - sm{"Самоански"} - so{"Сомалийски"} - sq{"Албански"} - sr{"Сръбски"} - ss{"Суази"} - st{"Сесуто"} - sux{"Шумерски"} - sv{"Шведски"} - sw{"Суахили"} - syr{"Сирийски"} - ta{"Тамилски"} - tai{"Тайландски (други)"} - te{"Телугу"} - tg{"Таджикски"} - th{"Таи"} - tk{"Туркменски"} - tr{"Турски"} - tt{"Татарски"} - tut{"Алтайски (други)"} - ty{"Таитянски"} - uk{"Украински"} - und{"Неопределен"} - ur{"Урду"} - uz{"Узбекски"} - vi{"Виетнамски"} - zh{"Китайски"} - zu{"Зулуски"} - } - LocaleScript{ - "Cyrl", - } - NumberElements{ - ",", - " ", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Scripts{ - Arab{"Арабска"} - Armn{"Арменска"} - Beng{"Бенгалска"} - Brai{"Брайлова"} - Cher{"Чероки"} - Copt{"Коптска"} - Cyrl{"Кирилица"} - Deva{"Деванагари"} - Ethi{"Етиопска"} - Geor{"Грузинска"} - Goth{"Готическа"} - Grek{"Гръцка"} - Gujr{"Гуджарати"} - Hang{"Корейска"} - Hani{"Китайска"} - Hans{"Опростен китайски"} - Hant{"Традиционен китайски"} - Hebr{"Иврит"} - Hira{"Японски хирагана"} - Kana{"Японски катакана"} - Khmr{"Кхмерска"} - Laoo{"Лаоска"} - Latn{"Латинска"} - Mong{"Монголска"} - Mymr{"Бирманска"} - Runr{"Руническа"} - Taml{"Тамилска"} - Telu{"Телугу"} - Thai{"Таи"} - Tibt{"Тибетска"} - Zyyy{"Обща"} - } - Types{ - calendar{ - buddhist{"Будистки календар"} - chinese{"Китайски календар"} - gregorian{"Григориански календар"} - hebrew{"Еврейски календар"} - islamic{"Ислямски календар"} - islamic-civil{"Ислямски цивилен календар"} - japanese{"Японски календар"} - } - collation{ - direct{"Директно"} - phonebook{"Азбучен ред"} - pinyin{"Сортиране Pinyin"} - stroke{"Сортиране по щрих"} - traditional{"Традиционно"} - } - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm:ss", - "HH:mm", - "dd MMMM yyyy, EEEE", - "dd MMMM yyyy", - "dd.MM.yyyy", - "dd.MM.yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "нед.", - "пон.", - "вт.", - "ср.", - "четв.", - "пет.", - "съб.", - } - narrow{ - "н", - "п", - "в", - "с", - "ч", - "п", - "с", - } - wide{ - "неделя", - "понеделник", - "вторник", - "сряда", - "четвъртък", - "петък", - "събота", - } - } - } - eras{ - abbreviated{ - "пр.н.е.", - "н.е.", - } - } - monthNames{ - format{ - abbreviated{ - "ян.", - "фев.", - "март", - "апр.", - "май", - "юни", - "юли", - "авг.", - "сеп.", - "окт.", - "ноем.", - "дек.", - } - narrow{ - "я", - "ф", - "м", - "а", - "м", - "ю", - "ю", - "а", - "с", - "о", - "н", - "д", - } - wide{ - "януари", - "февруари", - "март", - "април", - "май", - "юни", - "юли", - "август", - "септември", - "октомври", - "ноември", - "декември", - } - } - } - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} - zoneStrings{ - { - "America/Los_Angeles", - "Тихоокеанска часова зона", - "PST", - "Тихоокеанска лятна часова зона", - "PDT", - "Лос Анжелис", - } - { - "America/Denver", - "Американска планинска часова зона", - "MST", - "Американска планинска лятна часова зона", - "MDT", - "Денвър", - } - { - "America/Phoenix", - "Американска планинска часова зона", - "MST", - "Американска планинска часова зона", - "MST", - "Финикс", - } - { - "America/Chicago", - "Американска централна часова зона", - "CST", - "Американска централна лятна часова зона", - "CDT", - "Чикаго", - } - { - "America/New_York", - "Американска източна часова зона", - "EST", - "Американска източна лятна часова зона", - "EDT", - "Ню Йорк", - } - { - "America/Indianapolis", - "Американска източна часова зона", - "EST", - "Американска източна часова зона", - "EST", - "Индианополис", - } - { - "Pacific/Honolulu", - "Часова зона Хавай", - "HST", - "Лятна часова зона Хавай", - "HST", - "Хонолулу", - } - { - "America/Anchorage", - "Часова зона Аляска", - "AST", - "Лятна часова зона Аляска", - "ADT", - "Anchorage", - } - { - "America/Halifax", - "Атлантическа часова зона", - "AST", - "Атлантическа лятна часова зона", - "ADT", - "Халифакс", - } - { - "America/St_Johns", - "Часова зона Нюфаундленд", - "CNT", - "Лятна часова зона Нюфаундленд", - "CDT", - "Сейнт Джоунс", - } - { - "Europe/Paris", - "Централноевропейска часова зона", - "CET", - "Централноевропеска лятна часова зона", - "CEST", - "Париж", - } - { - "Etc/GMT", - "Часова зона Гринуич", - "GMT", - "Часова зона Гринуич", - "GMT", - "Лондон", - } - { - "Africa/Casablanca", - "Часова зона Гринуич", - "GMT", - "Часова зона Гринуич", - "GMT", - "Казабланка", - } - { - "Asia/Jerusalem", - "Часова зона Израел", - "IST", - "Лятна часова зона Израел", - "IDT", - "Йерусалим", - } - { - "Asia/Tokyo", - "Японска часова зона", - "JST", - "Японска часова зона", - "JST", - "Токио", - } - { - "Europe/Bucharest", - "Източноевропейска часова зона", - "EET", - "Източноевропейска лятна часова зона", - "EEST", - "Букурещ", - } - { - "Asia/Shanghai", - "Китайска часова зона", - "CTT", - "Китайска часова зона", - "CDT", - "Шанхай", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/bg.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/bg.xml + */ +bg{ + AuxExemplarCharacters{"[i v x {а̀} ѐ ѝ {о̀} {у̀} {ъ̀} Ñ£ {ю̀} {я̀} Ñ«]"} + Countries{ + 001{"Земята"} + 002{"Африка"} + 005{"Южна Америка"} + 009{"Океания"} + 011{"Западна Афирка"} + 013{"Централна Америка"} + 014{"Източна Африка"} + 015{"Северна Африка"} + 017{"Централна Африка"} + 018{"Южноафрикански регион"} + 019{"Америка"} + 021{"Северна Америка"} + 029{"Карибски о-ви"} + 030{"Източна Азия"} + 034{"Южна Азия"} + 035{"Югоизточна Азия"} + 039{"Южна Европа"} + 053{"Австралия и Нова Зеландия"} + 054{"Меланезия"} + 057{"Микронезия"} + 061{"Полинезия"} + 062{"Южна Азия [062]"} + 142{"Азия"} + 143{"Централна Азия"} + 145{"Западна Азия"} + 150{"Европа"} + 151{"Източна Европа"} + 154{"Северна Европа"} + 155{"Западна Европа"} + 830{"Нормандски о-ви"} + 833{"о.Ман"} + AD{"Андора"} + AE{"Обединени Арабски Емирства"} + AF{"Афганистан"} + AG{"Антигуа и Барбуда"} + AI{"Ангуила"} + AL{"Албания"} + AM{"Армения"} + AN{"Холандски Антили"} + AO{"Ангола"} + AQ{"Антарктика"} + AR{"Аржентина"} + AS{"Американско Самоа"} + AT{"Австрия"} + AU{"Австралия"} + AW{"Аруба"} + AX{"Аландски о-ви"} + AZ{"Азербайджан"} + BA{"Босна и Херцеговина"} + BB{"Барбадос"} + BD{"Бангладеш"} + BE{"Белгия"} + BF{"Буркина Фасо"} + BG{"България"} + BH{"Бахрейн"} + BI{"Бурунди"} + BJ{"Бенин"} + BM{"Бермуда"} + BN{"Бруней Дарусалам"} + BO{"Боливия"} + BR{"Бразилия"} + BS{"Бахами"} + BT{"Бутан"} + BV{"Остров Буве"} + BW{"Ботсуана"} + BY{"Беларус"} + BZ{"Белиз"} + CA{"Канада"} + CC{"Кокосови (Кийлинг) острови"} + CD{"Демократична Република Конго"} + CF{"Централноафриканска Република"} + CG{"Конго"} + CH{"Швейцария"} + CI{"Бряг на Слоновата кост"} + CK{"Острови Кук"} + CL{"Чили"} + CM{"Камерун"} + CN{"Китай"} + CO{"Колумбия"} + CR{"Коста Рика"} + CS{"Сърбия и Черна Гора"} + CU{"Куба"} + CV{"Кабо Верде"} + CX{"Остров Кристмас"} + CY{"Кипър"} + CZ{"Чешка Република"} + DE{"Германия"} + DJ{"Джибути"} + DK{"Дания"} + DM{"Доминика"} + DO{"Доминиканска Република"} + DZ{"Алжир"} + EC{"Еквадор"} + EE{"Естония"} + EG{"Египет"} + EH{"Западна Сахара"} + ER{"Еритрея"} + ES{"Испания"} + ET{"Етиопия"} + FI{"Финландия"} + FJ{"Фиджи"} + FK{"Фолклендски острови"} + FM{"Микронезия, Обединени Щати"} + FO{"Фарьорски острови"} + FR{"Франция"} + GA{"Габон"} + GB{"Обединено кралство"} + GD{"Гренада"} + GE{"Грузия"} + GF{"Френска Гвиана"} + GH{"Гана"} + GI{"Гибралтар"} + GL{"Гренландия"} + GM{"Гамбия"} + GN{"Гвинея"} + GP{"Гваделупа"} + GQ{"Екваториална Гвинея"} + GR{"Гърция"} + GS{"Южна Джорджия и Южни Сандвичеви Острови"} + GT{"Гватемала"} + GU{"Гуам"} + GW{"Гвинея-Бисау"} + GY{"Гвиана"} + HK{"Хонг-Конг О.А.Р. на Китай"} + HM{"Остров Хърд и Острови Макдоналд"} + HN{"Хондурас"} + HR{"Хърватска"} + HT{"Хаити"} + HU{"Унгария"} + ID{"Индонезия"} + IE{"Ирландия"} + IL{"Израел"} + IN{"Индия"} + IO{"Британски територии в Индийския океан"} + IQ{"Ирак"} + IR{"Иран, Ислямска република"} + IS{"Исландия"} + IT{"Италия"} + JM{"Ямайка"} + JO{"Йордания"} + JP{"Япония"} + KE{"Кения"} + KG{"Киргизстан"} + KH{"Камбоджа"} + KI{"Кирибати"} + KM{"Комори"} + KN{"Сейнт Китс и Невис"} + KP{"Корея, Северна"} + KR{"Корея, Южна"} + KW{"Кувейт"} + KY{"Кайманови острови"} + KZ{"Казахстан"} + LA{"Народна Демократична Република Лаос"} + LB{"Ливан"} + LC{"Сейнт Лусия"} + LI{"Лихтенщайн"} + LK{"Шри Ланка"} + LR{"Либерия"} + LS{"Лесото"} + LT{"Литва"} + LU{"Люксембург"} + LV{"Латвия"} + LY{"Либийска Арабска Джамахирия"} + MA{"Мароко"} + MC{"Монако"} + MD{"Молдова, Република"} + MG{"Мадагаскар"} + MH{"Маршалови Острови"} + MK{"Македония, Република"} + ML{"Мали"} + MM{"Мианмар"} + MN{"Монголия"} + MO{"Макао О.А.Р. на Китай"} + MP{"Северни Мариански Острови"} + MQ{"Мартиника"} + MR{"Мавритания"} + MS{"Монсерат"} + MT{"Малта"} + MU{"Мавриций"} + MV{"Малдиви"} + MW{"Малави"} + MX{"Мексико"} + MY{"Малайзия"} + MZ{"Мозамбик"} + NA{"Намибия"} + NC{"Нова Каледония"} + NE{"Нигер"} + NF{"Остров Норфолк"} + NG{"Нигерия"} + NI{"Никарагуа"} + NL{"Холандия"} + NO{"Норвегия"} + NP{"Непал"} + NR{"Науру"} + NU{"Ниуе"} + NZ{"Нова Зеландия"} + OM{"Оман"} + PA{"Панама"} + PE{"Перу"} + PF{"Френска Полинезия"} + PG{"Папуа Нова Гвинея"} + PH{"Филипини"} + PK{"Пакистан"} + PL{"Полша"} + PM{"Сен Пиер и Мигелон"} + PN{"Питкайрн"} + PR{"Пуерто Рико"} + PS{"Палестински територии"} + PT{"Португалия"} + PW{"Палау"} + PY{"Парагвай"} + QA{"Катар"} + QO{"Океания [QO]"} + RE{"Реюниън"} + RO{"Румъния"} + RU{"Руска Федерация"} + RW{"Руанда"} + SA{"Саудитска Арабия"} + SB{"Соломонови Острови"} + SC{"Сейшели"} + SD{"Судан"} + SE{"Швеция"} + SG{"Сингапур"} + SH{"Света Елена"} + SI{"Словения"} + SJ{"Свалбард и Ян Майен"} + SK{"Словакия"} + SL{"Сиера Леоне"} + SM{"Сан Марино"} + SN{"Сенегал"} + SO{"Сомалия"} + SR{"Суринам"} + ST{"Сао Томе и Принципе"} + SV{"Ел Салвадор"} + SY{"Сирийска Арабска Република"} + SZ{"Суазиленд"} + TC{"Острови Туркс и Кайкос"} + TD{"Чад"} + TF{"Френски Южни Територии"} + TG{"Того"} + TH{"Тайланд"} + TJ{"Таджикистан"} + TK{"Токелау"} + TL{"Източен Тимор"} + TM{"Туркменистан"} + TN{"Тунис"} + TO{"Тонга"} + TR{"Турция"} + TT{"Тринидад и Тобаго"} + TV{"Тувалу"} + TW{"Тайван"} + TZ{"Танзания"} + UA{"Украйна"} + UG{"Уганда"} + UM{"САЩ - външни острови"} + US{"САЩ"} + UY{"Уругвай"} + UZ{"Узбекистан"} + VA{"Свещено море (Ватиканска държава)"} + VC{"Сейнт Винсънт и Гренадини"} + VE{"Венецуела"} + VG{"Британски Вирджински Острови"} + VI{"САЩ, Вирджински Острови"} + VN{"Виетнам"} + VU{"Вануату"} + WF{"Уолис и Футуна"} + WS{"Самоа"} + YE{"Йемен"} + YT{"Мейот"} + ZA{"Южна Африка"} + ZM{"Замбия"} + ZW{"Зимбабве"} + } + Currencies{ + ADP{ + "ADP", + "Андорска песета", + } + AED{ + "AED", + "Обединени арабски емирства-дирхам", + } + AFA{ + "AFA", + "Афганистански афган (1927-2002)", + } + AFN{ + "Af", + "Афганистански афган", + } + ALL{ + "lek", + "Албански лек", + } + AMD{ + "dram", + "Арменски драм", + } + ANG{ + "NA f.", + "Антилски гулден", + } + AOA{ + "AOA", + "Анголска кванца", + } + AOK{ + "AOK", + "Анголска кванца (1977-1990)", + } + AON{ + "AON", + "Анголска нова кванца (1990-2000)", + } + AOR{ + "AOR", + "Анголска нова кванца (1995-1999)", + } + ARP{ + "ARP", + "Аржентинско песо (1983-1985)", + } + ARS{ + "Arg$", + "Аржентинско песо", + } + ATS{ + "ATS", + "Австрийски шилинг", + } + AUD{ + "$A", + "Австралийски долар", + } + AWG{ + "AWG", + "Арубски гилдер - о. Аруба", + } + AZM{ + "AZM", + "Азербайджански манат", + } + BAD{ + "BAD", + "Босна и Херцеговина-динар", + } + BAM{ + "KM", + "Босненска конвертируема марка", + } + BBD{ + "BDS$", + "Барбейдоски долар", + } + BDT{ + "Tk", + "Бангладешка така", + } + BEC{ + "BEC", + "Белгийски франк (конвертируем)", + } + BEF{ + "BF", + "Белгийски франк", + } + BEL{ + "BEL", + "Белгийски франк (финансов)", + } + BGL{ + "лв", + "BGL", + } + BGN{ + "лв.", + "Български лев", + } + BHD{ + "BD", + "Бахрейнски динар", + } + BIF{ + "Fbu", + "Бурундийски франк", + } + BMD{ + "Ber$", + "Бермудски долар", + } + BND{ + "BND", + "Брунейски долар", + } + BOB{ + "Bs", + "Боливийско боливиано", + } + BOP{ + "BOP", + "Боливийско песо", + } + BRL{ + "R$", + "Бразилски реал", + } + BSD{ + "BSD", + "Бахамски долар", + } + BTN{ + "Nu", + "Бутански нгултрум", + } + BWP{ + "BWP", + "Ботсуанска пула", + } + BYB{ + "BYB", + "Беларуска нова рубла (1994-1999)", + } + BYR{ + "Rbl", + "Беларуска рубла", + } + BZD{ + "BZ$", + "Белизийски долар", + } + CAD{ + "Can$", + "Канадски долар", + } + CDF{ + "CDF", + "Конгоански франк", + } + CHF{ + "SwF", + "Швейцарски франк", + } + CLP{ + "Ch$", + "Чилийско песо", + } + CNY{ + "Y", + "Китайски ренминби юан", + } + COP{ + "Col$", + "Колумбийско песо", + } + CRC{ + "C", + "Костарикански колон", + } + CSK{ + "CSK", + "Чехословашка конвертируема крона", + } + CUP{ + "CUP", + "Кубинско песо", + } + CVE{ + "CVEsc", + "Кабо Верде ескудо", + } + CYP{ + "£C", + "Кипърска лира", + } + CZK{ + "CZK", + "Чешка крона", + } + DEM{ + "DEM", + "Германска марка", + } + DJF{ + "DF", + "Джибутски франк", + } + DKK{ + "DKr", + "Датска крона", + } + DOP{ + "RD$", + "Доминиканско песо", + } + DZD{ + "DA", + "Алжирски динар", + } + ECS{ + "ECS", + "Еквадорско сукре", + } + EEK{ + "EEK", + "Естонска крона", + } + EGP{ + "EGP", + "Египетска лира", + } + ERN{ + "ERN", + "Еритрейска накфа", + } + ESP{ + "ESP", + "Испанска песета", + } + ETB{ + "Br", + "Етиопски бир", + } + EUR{ + "€", + "Евро", + } + FIM{ + "FIM", + "Финландска марка", + } + FJD{ + "F$", + "Фиджи - долар", + } + FKP{ + "FKP", + "Фолкландска лира", + } + FRF{ + "FRF", + "Френски франк", + } + GBP{ + "£", + "Британска лира", + } + GEL{ + "lari", + "Грузински лари", + } + GHC{ + "GHC", + "Ганайски седи", + } + GIP{ + "GIP", + "Гибралтарска лира", + } + GMD{ + "GMD", + "Гамбийски даласи", + } + GNF{ + "GF", + "Гвинейски франк", + } + GRD{ + "GRD", + "Гръцка драхма", + } + GTQ{ + "Q", + "Гватемалски кветзал", + } + GWP{ + "GWP", + "Гвинея-Бисау песо", + } + GYD{ + "G$", + "Гаянски долар", + } + HKD{ + "HK$", + "Хонгконгски долар", + } + HNL{ + "L", + "Хондураска лемпира", + } + HRD{ + "HRD", + "Хърватски динар", + } + HRK{ + "HRK", + "Хърватска куна", + } + HTG{ + "HTG", + "Хаитски гурд", + } + HUF{ + "Ft", + "Унгарски форинт", + } + IDR{ + "Rp", + "Индонезийска рупия", + } + IEP{ + "IR£", + "Ирландска лира", + } + ILP{ + "ILP", + "Израелска лира", + } + ILS{ + "ILS", + "Израелски нов шекел", + } + INR{ + "INR", + "Индийска рупия", + } + IQD{ + "ID", + "Иракски динар", + } + IRR{ + "RI", + "Ирански риал", + } + ISK{ + "ISK", + "Исландска крона", + } + ITL{ + "₤", + "Италианска лира", + } + JMD{ + "J$", + "Ямайски долар", + } + JOD{ + "JD", + "Йордански динар", + } + JPY{ + "Â¥", + "Японска йена", + } + KES{ + "K Sh", + "Кенийски шилинг", + } + KGS{ + "som", + "Киргистански сом", + } + KHR{ + "CR", + "Камбоджански риел", + } + KMF{ + "CF", + "Коморски франк", + } + KPW{ + "KPW", + "Севернокорейски вон", + } + KRW{ + "KRW", + "КНДР вон", + } + KWD{ + "KD", + "Кувейтски динар", + } + KYD{ + "KYD", + "Кайманови острови - долар", + } + KZT{ + "T", + "Казахстанско тенге", + } + LAK{ + "LAK", + "Лаоски кип", + } + LBP{ + "LL", + "Ливанска лира", + } + LKR{ + "SL Re", + "Шриланкска рупия", + } + LRD{ + "LRD", + "Либерийски долар", + } + LSL{ + "M", + "Лесотско лоти", + } + LTL{ + "LTL", + "Литовски литаз", + } + LUF{ + "LUF", + "Люксембургски франк", + } + LVL{ + "LVL", + "Латвийски лат", + } + LVR{ + "LVR", + "Латвийска рубла", + } + LYD{ + "LD", + "Либийски динар", + } + MAD{ + "MAD", + "Марокански дирхам", + } + MAF{ + "MAF", + "Марокански франк", + } + MDL{ + "MDL", + "Молдовско леу", + } + MGF{ + "MGF", + "Малгашки франк - Мадагаскар", + } + MKD{ + "MDen", + "Македонски денар", + } + MMK{ + "MMK", + "Миянмарски (Бирма) кият", + } + MNT{ + "Tug", + "Монголски тугрик", + } + MOP{ + "MOP", + "Макао - патака", + } + MRO{ + "UM", + "Мавританска огия", + } + MTL{ + "Lm", + "Малтийска лира", + } + MUR{ + "MUR", + "Маврицийска рупия", + } + MVR{ + "MVR", + "Малдивска руфия", + } + MWK{ + "MK", + "Малавийска квача", + } + MXN{ + "MEX$", + "Мексиканско ново песо", + } + MXP{ + "MXP", + "Мексиканско сребърно песо (1861-1992)", + } + MYR{ + "RM", + "Малайзийски рингит", + } + MZE{ + "MZE", + "Мозамбикско ескудо", + } + MZM{ + "Mt", + "Мозамбикски метикал", + } + NAD{ + "N$", + "Намибийски долар", + } + NGN{ + "NGN", + "Нигерийска найра", + } + NIC{ + "NIC", + "Никарагуанска кордоба", + } + NLG{ + "NLG", + "Холандски гулден", + } + NOK{ + "NKr", + "Норвежка крона", + } + NPR{ + "Nrs", + "Непалска рупия", + } + NZD{ + "$NZ", + "Новозеландски долар", + } + OMR{ + "RO", + "Омански риал", + } + PAB{ + "PAB", + "Панамски балбоа", + } + PEN{ + "PEN", + "Перуански нов сол", + } + PES{ + "PES", + "Перуански сол", + } + PGK{ + "PGK", + "Папуа-новогвинейска кина", + } + PHP{ + "PHP", + "Филипинско песо", + } + PKR{ + "Pra", + "Пакистанска рупия", + } + PLN{ + "Zl", + "Полска злота", + } + PLZ{ + "PLZ", + "Полска злота (1950-1995)", + } + PTE{ + "PTE", + "Португалско ескудо", + } + PYG{ + "PYG", + "Парагвайско гуарани", + } + QAR{ + "QR", + "Катарски риал", + } + ROL{ + "leu", + "Румънска лея", + } + RUB{ + "Руб.", + "Руска рубла", + } + RUR{ + "RUR", + "Руска рубла (1991-1998)", + } + RWF{ + "RWF", + "Руандски франк", + } + SAR{ + "SRl", + "Саудитскоарабски риал", + } + SBD{ + "SI$", + "Соломонови острови - долар", + } + SCR{ + "SR", + "Сейшелска рупия", + } + SDD{ + "SDD", + "Судански динар", + } + SDP{ + "SDP", + "Суданска лира", + } + SEK{ + "SKr", + "Шведска крона", + } + SGD{ + "S$", + "Сингапурски долар", + } + SHP{ + "SHP", + "Света Елена лира", + } + SIT{ + "SIT", + "Словенски толар", + } + SKK{ + "Sk", + "Словашка крона", + } + SLL{ + "SLL", + "Сиералеонско леоне", + } + SOS{ + "So. Sh.", + "Сомалийски шилинг", + } + SRG{ + "Sf", + "Суринамски гилдер", + } + STD{ + "Db", + "Сао Томе и Принсипи - добра", + } + SUR{ + "SUR", + "Съветска рубла", + } + SVC{ + "SVC", + "Салвадорски колон", + } + SYP{ + "LS", + "Сирийска лира", + } + SZL{ + "E", + "Свазилендски лилангени", + } + THB{ + "THB", + "Тайландски бат", + } + TJR{ + "TJR", + "Таджикистанска рубла", + } + TJS{ + "TJS", + "Таджикистански сомони", + } + TMM{ + "TMM", + "Туркменистански манат", + } + TND{ + "TND", + "Тунизийски динар", + } + TOP{ + "T$", + "Тонга - па анга", + } + TPE{ + "TPE", + "Тиморско ескудо", + } + TRL{ + "TL", + "Турска лира", + } + TRY{ + "TRY", + "Нова турска лира", + } + TTD{ + "TT$", + "Тринидат и Тобаго - долар", + } + TWD{ + "NT$", + "Тайвански долар", + } + TZS{ + "T Sh", + "Танзанийски шилинг", + } + UAH{ + "UAH", + "Украинска хривня", + } + UAK{ + "UAK", + "Украински карбованец", + } + UGS{ + "UGS", + "Угандийски шилинг (1966-1987)", + } + UGX{ + "U Sh", + "Угандийски нов шилинг", + } + USD{ + "US$", + "САЩ долар", + } + UYP{ + "UYP", + "Уругвайско песо (1975-1993)", + } + UYU{ + "Ur$", + "Уругвайско песо", + } + UZS{ + "UZS", + "Узбекистански сум", + } + VEB{ + "Be", + "Венесуелски боливар", + } + VND{ + "VND", + "Виетнамски донг", + } + VUV{ + "VT", + "Вануату - вату", + } + WST{ + "WST", + "Самоа - тала", + } + XAF{ + "XAF", + "Буркина Фасо - CFA - франк", + } + XAU{ + "XAU", + "Злато", + } + XCD{ + "EC$", + "Източнокарибски долар - Антигуа", + } + XEU{ + "XEU", + "Еку на ЕИО", + } + XFO{ + "XFO", + "Френски златен франк", + } + XOF{ + "XOF", + "Бенин - CFA франк", + } + XPF{ + "CFPF", + "Френскополинезийски франк", + } + YDD{ + "YDD", + "Йеменски динар", + } + YER{ + "YRl", + "Йеменски риал", + } + YUM{ + "YUM", + "Югославски динар", + } + YUN{ + "YUN", + "Югославски конвертируем динар", + } + ZAL{ + "ZAL", + "Южноафрикански ранд (финансов)", + } + ZAR{ + "R", + "Южноафрикански ранд", + } + ZMK{ + "ZMK", + "Замбийска квача", + } + ZRN{ + "ZRN", + "Заирско ново зайре", + } + ZRZ{ + "ZRZ", + "Заирско зайре", + } + ZWD{ + "Z$", + "Зимбабвийски долар", + } + } + ExemplarCharacters{"[а-ъ ь ю я]"} + Keys{ + calendar{"Календар"} + collation{"Сортиране"} + currency{"Валута"} + } + Languages{ + ab{"Абхазски"} + ady{"Адиге"} + af{"Африканс"} + afa{"Афро-азиатски (други)"} + afh{"Африхили"} + ale{"Алеутски"} + am{"Амхарски"} + ang{"Староанглийски (ca.450-1100)"} + apa{"Езици на апахите"} + ar{"Арабски"} + art{"Изкуствен (други)"} + aus{"Австралийски езици"} + av{"Аварски"} + ay{"Аймара"} + az{"Азърбайджански"} + ba{"Башкирски"} + bal{"Балучи"} + bat{"Прибалтийски (други)"} + be{"Беларуски"} + ber{"берберски"} + bg{"Български"} + bho{"Божпури"} + bi{"Бислама"} + bn{"Бенгалски"} + bnt{"Банту"} + bo{"Тибетски"} + br{"Бретонски"} + bs{"Босненски"} + ca{"Каталонски"} + cai{"Централноамерикански индиански (други)"} + car{"Карибски"} + cau{"Кавказски (други)"} + ce{"Чеченски"} + cel{"Келтски (други)"} + chr{"чероки"} + chy{"чейенски"} + co{"Корсикански"} + cpe{"Креолски, от английски (други)"} + cpf{"Креолски, от френски (други)"} + cpp{"Креолски, от португалски (други)"} + crp{"Креолски (други)"} + cs{"Чешки"} + cu{"Църковно славянски"} + cy{"Уелски"} + da{"Датски"} + de{"Немски"} + den{"Славянски"} + dum{"Холандски, средновековен (1050-1350)"} + dv{"Дивехи"} + egy{"Египетски (древен)"} + el{"Гръцки"} + en{"Английски"} + enm{"Английски (1100-1500)"} + eo{"Есперанто"} + es{"Испански"} + et{"Естонски"} + eu{"Баски"} + fa{"Персийски"} + fi{"Фински"} + fiu{"Угрофинска (други)"} + fr{"Френски"} + frm{"Френски (1400-1600)"} + fro{"Френски (842-1400)"} + ga{"Ирландски"} + gd{"Шотландски галски"} + gem{"Германски (други)"} + gmh{"Немски (1050-1500)"} + goh{"Немски (750-1050)"} + got{"Готически"} + grc{"Древногръцки (до 1453)"} + gu{"Гуджарати"} + haw{"Хавайски"} + he{"Иврит"} + hi{"Хинди"} + hit{"Хитски"} + hr{"Хърватски"} + ht{"Хаитянски"} + hu{"Унгарски"} + hy{"Арменски"} + id{"Индонезийски"} + inc{"Индийски (други)"} + ine{"Индо-европейски (други)"} + io{"Идо"} + ira{"Ирански"} + is{"Исландски"} + it{"Италиански"} + ja{"Японски"} + jpr{"еврейско-персийски"} + jrb{"еврейско-арабски"} + jv{"Явански"} + ka{"Грузински"} + kg{"Конгоански"} + ki{"кикуйу"} + kk{"Казахски"} + km{"Кхмерски"} + ko{"Корейски"} + ks{"Кашмирски"} + ku{"Кюрдски"} + ky{"Киргизски"} + la{"Латински"} + lb{"Люксембургски"} + lo{"Лаоски"} + lt{"Литовски"} + lv{"Латвийски"} + mas{"масайски"} + mg{"Малгашки"} + mga{"Ирландски (900-1200)"} + mi{"Маорски"} + mis{"Други езици"} + mk{"Македонски"} + ml{"Малаялам"} + mn{"Монголски"} + mo{"Молдовски"} + ms{"Малайски"} + mt{"Малтийски"} + my{"Бирмански"} + nai{"Северноамерикански индиански (други)"} + nap{"Неаполитански"} + ne{"Непалски"} + nl{"Холандски"} + no{"Норвежки"} + nub{"Нубийски езици"} + ny{"Чинянджа"} + os{"Осетски"} + ota{"Турски, отомански (1500-1928)"} + oto{"Старотурски езици"} + pa{"Пенджабски"} + paa{"Папуаски (други)"} + peo{"Староперсийски (600-400 пр.н.е.)"} + phi{"Филипински (други)"} + phn{"Финикийски"} + pl{"Полски"} + pro{"Провансалски (to 1500)"} + ps{"Пущу"} + pt{"Португалски"} + qu{"Кечуа"} + raj{"Раджастански"} + rm{"Реторомански"} + rn{"Рунди"} + ro{"Румънски"} + roa{"Романски (други)"} + ru{"Руски"} + rw{"Киняруанда"} + sa{"Санкскритски"} + sah{"Якутски"} + sai{"Южноамерикански индиански (други)"} + sc{"Сардински"} + sem{"Семитски (други)"} + sg{"Санго"} + sga{"Староирландски (до 900)"} + sh{"Сърбохърватски"} + si{"Синхалски"} + sk{"Словашки"} + sl{"Словенски"} + sla{"Славянски (други)"} + sm{"Самоански"} + so{"Сомалийски"} + sq{"Албански"} + sr{"Сръбски"} + ss{"Суази"} + st{"Сесуто"} + sux{"Шумерски"} + sv{"Шведски"} + sw{"Суахили"} + syr{"Сирийски"} + ta{"Тамилски"} + tai{"Тайландски (други)"} + te{"Телугу"} + tg{"Таджикски"} + th{"Таи"} + tk{"Туркменски"} + tr{"Турски"} + tt{"Татарски"} + tut{"Алтайски (други)"} + ty{"Таитянски"} + uk{"Украински"} + und{"Неопределен"} + ur{"Урду"} + uz{"Узбекски"} + vi{"Виетнамски"} + zh{"Китайски"} + zu{"Зулуски"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Scripts{ + Arab{"Арабска"} + Armn{"Арменска"} + Bali{"Балийски"} + Beng{"Бенгалска"} + Brai{"Брайлова"} + Cher{"Чероки"} + Copt{"Коптска"} + Cyrl{"Кирилица"} + Deva{"Деванагари"} + Ethi{"Етиопска"} + Geor{"Грузинска"} + Goth{"Готическа"} + Grek{"Гръцка"} + Gujr{"Гуджарати"} + Hang{"Корейска"} + Hani{"Китайска"} + Hans{"Опростен китайски"} + Hant{"Традиционен китайски"} + Hebr{"Иврит"} + Hira{"Японски хирагана"} + Kana{"Японски катакана"} + Khmr{"Кхмерска"} + Laoo{"Лаоска"} + Latn{"Латинска"} + Mong{"Монголска"} + Mymr{"Бирманска"} + Runr{"Руническа"} + Taml{"Тамилска"} + Telu{"Телугу"} + Thai{"Таи"} + Tibt{"Тибетска"} + Zyyy{"Обща"} + } + Types{ + calendar{ + buddhist{"Будистки календар"} + chinese{"Китайски календар"} + gregorian{"Григориански календар"} + hebrew{"Еврейски календар"} + islamic{"Ислямски календар"} + islamic-civil{"Ислямски цивилен календар"} + japanese{"Японски календар"} + } + collation{ + big5han{"Традиционен китайски (Big5)"} + direct{"Директно"} + gb2312han{"Опростен китайски (GB2312)"} + phonebook{"Азбучен ред"} + pinyin{"Сортиране Пинин"} + stroke{"Сортиране по щрих"} + traditional{"Традиционно"} + } + } + Version{"1.71"} + calendar{ + gregorian{ + AmPmMarkers{ + "пр. об.", + "сл. об.", + } + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm:ss", + "HH:mm", + "dd MMMM yyyy, EEEE", + "dd MMMM yyyy", + "dd.MM.yyyy", + "dd.MM.yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "нд", + "пн", + "вт", + "ср", + "чт", + "пт", + "сб", + } + wide{ + "неделя", + "понеделник", + "вторник", + "сряда", + "четвъртък", + "петък", + "събота", + } + } + stand-alone{ + narrow{ + "н", + "п", + "в", + "с", + "ч", + "п", + "с", + } + } + } + eras{ + abbreviated{ + "пр. н. е.", + "от н. е.", + } + wide{ + "пр.н.е.", + "сл.н.е.", + } + } + fields{ + day{ + dn{"Ден"} + } + era{ + dn{"ера"} + } + hour{ + dn{"час"} + } + minute{ + dn{"минута"} + } + month{ + dn{"месец"} + } + second{ + dn{"секунда"} + } + week{ + dn{"седмица"} + } + weekday{ + dn{"Ден от седмицата"} + } + year{ + dn{"година"} + } + zone{ + dn{"зона"} + } + } + monthNames{ + format{ + abbreviated{ + "ян.", + "февр.", + "март", + "апр.", + "май", + "юни", + "юли", + "авг.", + "септ.", + "окт.", + "ноем.", + "дек.", + } + wide{ + "януари", + "февруари", + "март", + "април", + "май", + "юни", + "юли", + "август", + "септември", + "октомври", + "ноември", + "декември", + } + } + stand-alone{ + narrow{ + "я", + "ф", + "м", + "а", + "м", + "ю", + "ю", + "а", + "с", + "о", + "н", + "д", + } + } + } + quarters{ + format{ + abbreviated{ + "I трим.", + "II трим.", + "III трим.", + "IV трим.", + } + wide{ + "1-во тримесечие", + "2-ро тримесечие", + "3-то тримесечие", + "4-то тримесечие", + } + } + } + } + } + delimiters{ + quotationEnd{"“"} + quotationStart{"„"} + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + measurementSystemNames{ + US{"Американска"} + metric{"Метрична"} + } + zoneStrings{ + "Africa:Bamako"{ + ec{"Бамако"} + } + "Africa:Casablanca"{ + ec{"Казабланка"} + ld{"Часова зона Гринуич"} + ls{"Часова зона Гринуич"} + sd{"Гринуич часова зона"} + ss{"Гринуич часова зона"} + } + "Africa:Ceuta"{ + ec{"Сеута"} + } + "Africa:Kinshasa"{ + ec{"Киншаса"} + } + "Africa:Lubumbashi"{ + ec{"Лубумбаши"} + } + "Africa:Timbuktu"{ + ec{"Тимбукту"} + } + "America:Adak"{ + ec{"Адак"} + } + "America:Anchorage"{ + ec{"Анкоридж"} + ld{"Лятна часова зона Аляска"} + ls{"Часова зона Аляска"} + sd{"AKDT"} + ss{"AKST"} + } + "America:Araguaina"{ + ec{"Арагуайна"} + } + "America:Argentina:ComodRivadavia"{ + ec{"Комодоро Ривадавия"} + } + "America:Argentina:La_Rioja"{ + ec{"Ла Риоха"} + } + "America:Argentina:Rio_Gallegos"{ + ec{"Рио Галегос"} + } + "America:Argentina:San_Juan"{ + ec{"Сан Хуан"} + } + "America:Argentina:Tucuman"{ + ec{"Тукуман"} + } + "America:Argentina:Ushuaia"{ + ec{"Ушуая"} + } + "America:Bahia"{ + ec{"Бахиа"} + } + "America:Belem"{ + ec{"Белем"} + } + "America:Boa_Vista"{ + ec{"Буа Виста"} + } + "America:Boise"{ + ec{"Буаз"} + } + "America:Buenos_Aires"{ + ec{"Буенос Айрес"} + } + "America:Cambridge_Bay"{ + ec{"Кеймбридж Бей"} + } + "America:Campo_Grande"{ + ec{"Кампо Гранде"} + } + "America:Cancun"{ + ec{"Канкун"} + } + "America:Catamarca"{ + ec{"Катамарка"} + } + "America:Chicago"{ + ec{"Чикаго"} + ld{"Американска централна лятна часова зона"} + ls{"Американска централна часова зона"} + sd{"CDT"} + ss{"CST"} + } + "America:Chihuahua"{ + ec{"Чиуауа"} + } + "America:Cordoba"{ + ec{"Кордоба"} + } + "America:Cuiaba"{ + ec{"Чуяба"} + } + "America:Danmarkshavn"{ + ec{"Данмаркшавн"} + } + "America:Dawson"{ + ec{"Доусън"} + } + "America:Dawson_Creek"{ + ec{"Доусън Крийк"} + } + "America:Denver"{ + ec{"Денвър"} + ld{"Американска планинска лятна часова зона"} + ls{"Американска планинска часова зона"} + sd{"MDT"} + ss{"MST"} + } + "America:Detroit"{ + ec{"Детройт"} + } + "America:Edmonton"{ + ec{"Едмънтън"} + } + "America:Eirunepe"{ + ec{"Ейрунепе"} + } + "America:Fortaleza"{ + ec{"Фортацела"} + } + "America:Glace_Bay"{ + ec{"Глейс Бей"} + } + "America:Godthab"{ + ec{"Готхоб"} + } + "America:Goose_Bay"{ + ec{"Гус Бей"} + } + "America:Guayaquil"{ + ec{"Гуаякил"} + } + "America:Halifax"{ + ec{"Халифакс"} + ld{"Атлантическа лятна часова зона"} + ls{"Атлантическа часова зона"} + sd{"ADT"} + ss{"AST"} + } + "America:Hermosillo"{ + ec{"Хермосило"} + } + "America:Indiana:Knox"{ + ec{"Нокс"} + } + "America:Indiana:Marengo"{ + ec{"Маренго"} + } + "America:Indiana:Vevay"{ + ec{"Веве"} + } + "America:Indianapolis"{ + ec{"Индианополис"} + ld{"Американска източна часова зона (Индианополис)"} + } + "America:Inuvik"{ + ec{"Инувик"} + } + "America:Iqaluit"{ + ec{"Иквалуит"} + } + "America:Jujuy"{ + ec{"Джуджую"} + } + "America:Juneau"{ + ec{"Джуно"} + } + "America:Kentucky:Monticello"{ + ec{"Монтичело"} + } + "America:Los_Angeles"{ + ec{"Лос Анжелис"} + ld{"Тихоокеанска лятна часова зона"} + ls{"Тихоокеанска часова зона"} + sd{"PDT"} + ss{"PST"} + } + "America:Louisville"{ + ec{"Луизвил"} + } + "America:Maceio"{ + ec{"Масейо"} + } + "America:Manaus"{ + ec{"Мануас"} + } + "America:Mazatlan"{ + ec{"Мацатлан"} + } + "America:Mendoza"{ + ec{"Мендоса"} + } + "America:Menominee"{ + ec{"Меномнии"} + } + "America:Merida"{ + ec{"Мерида"} + } + "America:Mexico_City"{ + ec{"Мексико"} + } + "America:Monterrey"{ + ec{"Монтерей"} + } + "America:Montreal"{ + ec{"Монреал"} + } + "America:New_York"{ + ec{"Ню Йорк"} + ld{"Американска източна лятна часова зона"} + ls{"Американска източна часова зона"} + sd{"EDT"} + ss{"EST"} + } + "America:Nipigon"{ + ec{"Нипигон"} + } + "America:Nome"{ + ec{"Ноум"} + } + "America:Noronha"{ + ec{"Норонха"} + } + "America:North_Dakota:Center"{ + ec{"Сентър"} + } + "America:Pangnirtung"{ + ec{"Пангниртунг"} + } + "America:Phoenix"{ + ec{"Финикс"} + ld{"Американска планинска часова зона"} + ls{"Американска планинска часова зона"} + sd{"MST"} + ss{"MST"} + } + "America:Porto_Velho"{ + ec{"Порту Вельо"} + } + "America:Rainy_River"{ + ec{"Рейни Ривър"} + } + "America:Rankin_Inlet"{ + ec{"Ранкин Инлет"} + } + "America:Recife"{ + ec{"Ресифе"} + } + "America:Regina"{ + ec{"Регина"} + } + "America:Rio_Branco"{ + ec{"Рио Бранко"} + } + "America:Santiago"{ + ec{"Сантиаго"} + } + "America:Sao_Paulo"{ + ec{"Сао Пауло"} + } + "America:Scoresbysund"{ + ec{"Сгорсбисон"} + } + "America:Shiprock"{ + ec{"Шипрок"} + } + "America:St_Johns"{ + ec{"Сейнт Джоунс"} + ld{"Лятна часова зона Нюфаундленд"} + ls{"Часова зона Нюфаундленд"} + } + "America:Swift_Current"{ + ec{"Суифт Кърент"} + } + "America:Thule"{ + ec{"Туле"} + } + "America:Thunder_Bay"{ + ec{"Тъндър Бей"} + } + "America:Tijuana"{ + ec{"Тихуана"} + } + "America:Toronto"{ + ec{"Торонто"} + } + "America:Winnipeg"{ + ec{"Уинипег"} + } + "America:Yakutat"{ + ec{"Якутат"} + } + "America:Yellowknife"{ + ec{"Йелоунайф"} + } + "Antarctica:Casey"{ + ec{"Кейси"} + } + "Antarctica:Davis"{ + ec{"База Дейвис"} + } + "Antarctica:DumontDUrville"{ + ec{"Дюмон Дюрвил"} + } + "Antarctica:Mawson"{ + ec{"Моусън"} + } + "Antarctica:McMurdo"{ + ec{"Мак Мърдоу"} + } + "Antarctica:Palmer"{ + ec{"Палмър"} + } + "Antarctica:Rothera"{ + ec{"Ротера"} + } + "Antarctica:South_Pole"{ + ec{"Южен полюс"} + } + "Antarctica:Syowa"{ + ec{"Суова"} + } + "Antarctica:Vostok"{ + ec{"Восток"} + } + "Arctic:Longyearbyen"{ + ec{"Лонгирбюен"} + } + "Asia:Almaty"{ + ec{"Алма Ата"} + } + "Asia:Anadyr"{ + ec{"Анадир"} + } + "Asia:Aqtau"{ + ec{"Аятау"} + } + "Asia:Aqtobe"{ + ec{"Аятобе"} + } + "Asia:Choibalsan"{ + ec{"Чойбалсан"} + } + "Asia:Chongqing"{ + ec{"Чунцин"} + } + "Asia:Harbin"{ + ec{"Харбин"} + } + "Asia:Hovd"{ + ec{"Кобдо"} + } + "Asia:Irkutsk"{ + ec{"Иркутск"} + } + "Asia:Jakarta"{ + ec{"Джакарта"} + } + "Asia:Jayapura"{ + ec{"Джаяпура"} + } + "Asia:Jerusalem"{ + ec{"Йерусалим"} + ld{"Лятна часова зона Израел"} + ls{"Часова зона Израел"} + sd{"IDT"} + ss{"IST"} + } + "Asia:Kamchatka"{ + ec{"п-в Камчатка"} + } + "Asia:Kashgar"{ + ec{"Кашгар"} + } + "Asia:Krasnoyarsk"{ + ec{"Красноярск"} + } + "Asia:Kuala_Lumpur"{ + ec{"Куала Лумпур"} + } + "Asia:Kuching"{ + ec{"Кучин"} + } + "Asia:Magadan"{ + ec{"Магадан"} + } + "Asia:Makassar"{ + ec{"Макасарски проток"} + } + "Asia:Novosibirsk"{ + ec{"Новосибирск"} + } + "Asia:Omsk"{ + ec{"Омск"} + } + "Asia:Oral"{ + ec{"Арал"} + } + "Asia:Pontianak"{ + ec{"Понтианак"} + } + "Asia:Qyzylorda"{ + ec{"Язилорда"} + } + "Asia:Sakhalin"{ + ec{"Сахалин"} + } + "Asia:Samarkand"{ + ec{"Самарканд"} + } + "Asia:Shanghai"{ + ec{"Шанхай"} + ld{"Китайска часова зона"} + ls{"Китайска часова зона"} + } + "Asia:Tashkent"{ + ec{"Ташкент"} + } + "Asia:Tokyo"{ + ec{"Токио"} + ld{"Японска часова зона"} + ls{"Японска часова зона"} + sd{"JST"} + ss{"JST"} + } + "Asia:Ulaanbaatar"{ + ec{"Уланбатор"} + } + "Asia:Urumqi"{ + ec{"Урумчи"} + } + "Asia:Vladivostok"{ + ec{"Владивосток"} + } + "Asia:Yakutsk"{ + ec{"Якутск"} + } + "Asia:Yekaterinburg"{ + ec{"Екатерининбург"} + } + "Atlantic:Azores"{ + ec{"Азорски о-ви"} + } + "Atlantic:Canary"{ + ec{"Канарски о-ви"} + } + "Atlantic:Jan_Mayen"{ + ec{"Ян Майен"} + } + "Atlantic:Madeira"{ + ec{"Мадейра"} + } + "Australia:Adelaide"{ + ec{"Адълид"} + } + "Australia:Brisbane"{ + ec{"Бризбейн"} + } + "Australia:Broken_Hill"{ + ec{"Броукън Хил"} + } + "Australia:Darwin"{ + ec{"Даруин"} + } + "Australia:Hobart"{ + ec{"Хоубарт"} + } + "Australia:Lindeman"{ + ec{"Линдеман"} + } + "Australia:Lord_Howe"{ + ec{"Лорд Хов"} + } + "Australia:Melbourne"{ + ec{"Мелбърн"} + } + "Australia:Perth"{ + ec{"Пърт"} + } + "Australia:Sydney"{ + ec{"Сидни"} + } + "Europe:Belfast"{ + ec{"Белфастt"} + } + "Europe:Bucharest"{ + ec{"Букурещ"} + ld{"Източноевропейска лятна часова зона"} + ls{"Източноевропейска часова зона"} + sd{"EEST"} + ss{"EET"} + } + "Europe:Kaliningrad"{ + ec{"Калининград"} + } + "Europe:Kiev"{ + ec{"Киев"} + } + "Europe:Lisbon"{ + ec{"Лисабон"} + } + "Europe:London"{ + ec{"Лондон"} + } + "Europe:Madrid"{ + ec{"Мадрид"} + } + "Europe:Moscow"{ + ec{"Москва"} + } + "Europe:Paris"{ + ec{"Париж"} + ld{"Централноевропейска лятна часова зона"} + ls{"Централноевропейска часова зона"} + sd{"CEST"} + ss{"CET"} + } + "Europe:Samara"{ + ec{"Самара"} + } + "Europe:Simferopol"{ + ec{"Севастопол"} + } + "Europe:Uzhgorod"{ + ec{"Ужгород"} + } + "Europe:Zaporozhye"{ + ec{"Запорожие"} + } + "Pacific:Auckland"{ + ec{"Окланд"} + } + "Pacific:Chatham"{ + ec{"о-ви Чатам"} + } + "Pacific:Easter"{ + ec{"Великденски о-ви"} + } + "Pacific:Enderbury"{ + ec{"о. Ендърбъри"} + } + "Pacific:Galapagos"{ + ec{"о-ви Галапагос"} + } + "Pacific:Gambier"{ + ec{"Гамбиер"} + } + "Pacific:Honolulu"{ + ec{"Хонолулу"} + ld{"Лятна часова зона Хавай"} + ls{"Часова зона Хавай"} + sd{"HST"} + ss{"HST"} + } + "Pacific:Johnston"{ + ec{"о. Джонсън"} + } + "Pacific:Kiritimati"{ + ec{"о. Рождество"} + } + "Pacific:Kosrae"{ + ec{"о. Косрае"} + } + "Pacific:Kwajalein"{ + ec{"Квайджален"} + } + "Pacific:Majuro"{ + ec{"Мажуро"} + } + "Pacific:Marquesas"{ + ec{"Маркизки о-ви"} + } + "Pacific:Midway"{ + ec{"о. Мидуей"} + } + "Pacific:Ponape"{ + ec{"о. Понапе"} + } + "Pacific:Tahiti"{ + ec{"Таити"} + } + "Pacific:Tarawa"{ + ec{"о. Тарава"} + } + "Pacific:Truk"{ + ec{"о-ви Трук"} + } + "Pacific:Wake"{ + ec{"о. Уейк"} + } + "Pacific:Yap"{ + ec{"о. Яп"} + } + gmtFormat{"Гриинуич{0}"} + hourFormat{"+HHmm;-HHmm"} + } +} diff --git a/icuSources/data/locales/bg_BG.txt b/icuSources/data/locales/bg_BG.txt index 377f913f..25e2c732 100644 --- a/icuSources/data/locales/bg_BG.txt +++ b/icuSources/data/locales/bg_BG.txt @@ -1,17 +1,23 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/bg_BG.xml +// * Source File:/common/main/bg_BG.xml // * // *************************************************************************** bg_BG{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.42"} + delimiters{ + alternateQuotationEnd{"„"} + alternateQuotationStart{"“"} + quotationEnd{"»"} + quotationStart{"«"} + } } diff --git a/icuSources/data/locales/bn.txt b/icuSources/data/locales/bn.txt index 6c8ff63e..729b27bd 100644 --- a/icuSources/data/locales/bn.txt +++ b/icuSources/data/locales/bn.txt @@ -1,202 +1,206 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/bn.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/bn.xml - */ -bn{ - Countries{ - AF{"আফগানিস্তান"} - AL{"আলব্যানিয়া"} - AM{"আর্মেনিয়া"} - AR{"আর্জেণ্টাইনা"} - AT{"অস্ট্রিয়া"} - AU{"অস্ট্রেলিয়া"} - AZ{"আজারবাইজান"} - BD{"বাংলাদেশ"} - BE{"বেল্জিয়ম"} - BG{"বুলগেরিয়া"} - BO{"বোলিভিয়া"} - BR{"ব্রাজিল"} - BT{"ভুটান"} - BY{"বেলোরুশিয়া"} - CG{"কঙ্গো"} - CH{"সুইজর্লণ্ড"} - CL{"চিলি"} - CN{"চীন"} - CO{"কোলোম্বিয়া"} - CR{"কোস্টারিকা"} - CU{"কিউবা"} - CZ{"চেকিয়া"} - DE{"জার্মানি"} - DK{"ডেন্মার্ক"} - DZ{"এলজিরিয়া"} - EC{"ইকোয়াডর"} - EE{"এস্তোনিয়া"} - EG{"মিশর"} - EH{"পশ্চিমী সাহারা"} - ES{"স্পেন"} - ET{"ইফিওপিয়া"} - FI{"ফিন্ল্যাণ্ড"} - FR{"ফ্রান্স"} - GB{"গ্রেটবৃটেন"} - GE{"জর্জিয়া"} - GH{"গানা"} - GR{"গ্রীস্"} - GT{"গোয়াটিমালা"} - GY{"গিয়ানা"} - HN{"হণ্ডুরাস"} - HU{"হাঙ্গেরি"} - ID{"ইন্দোনেশিয়া"} - IE{"আয়ার্লণ্ড"} - IL{"ইস্রায়েল"} - IN{"ভারত"} - IQ{"ইরাক"} - IR{"ইরান"} - IS{"আইসলণ্ড"} - IT{"ইতালী"} - JM{"জ্যামেকা"} - JO{"জর্ডন"} - JP{"জাপান"} - KE{"কেনিয়া"} - KG{"কির্গিজিয়া"} - KH{"কাম্বোজ"} - KR{"দক্ষিণ কোরিয়া"} - KZ{"কাজাকস্থান"} - LA{"লাওস"} - LB{"লেবানন"} - LK{"শ্রীলঙ্কা"} - LR{"লাইবিরিয়া"} - LT{"লিত্ভা"} - LU{"লাক্সেমবার্গ"} - LV{"লাত্ভিয়া"} - LY{"লিবিয়া"} - MA{"মোরক্কো"} - MD{"মোল্দাভিয়া"} - MG{"মাদাগাস্কার"} - MN{"মঙ্গোলিয়া"} - MX{"মক্সিকো"} - MY{"মাল্যাশিয়া"} - NI{"নিকারাগোয়া"} - NL{"হলণ্ড"} - NO{"নরওয়ে"} - NP{"নেপাল"} - NZ{"নিউ জিলণ্ড"} - PA{"পানামা"} - PE{"পিরু"} - PH{"ফিলিপাইন"} - PK{"পাকিস্তান"} - PL{"পোল্যাণ্ড"} - PT{"পর্তুগাল"} - PY{"প্যারাগোয়ে"} - RO{"রুমানিয়া"} - RU{"রাশিয়া"} - SA{"সাউদি আরব"} - SD{"সুদান"} - SE{"সুইডেন"} - SG{"সিঙ্গাপুর"} - SK{"শ্লোভাকিয়া"} - SO{"সোমালি"} - SV{"সালভেডর"} - SY{"সিরিয়া"} - TH{"থাই"} - TJ{"তাজিকস্থান"} - TM{"তুর্কমেনিয়া"} - TN{"টিউনিস্"} - TR{"তুরস্ক"} - TW{"তাইওয়ান"} - UA{"ইউক্রেইন"} - US{"মার্কিন যুক্তরাষ্ট্র"} - UY{"উরুগোয়ে"} - UZ{"উজ্বেকিস্থান"} - VE{"ভেনেজুয়েলা"} - VN{"ভিয়েতনাম"} - YE{"ইমেন"} - ZA{"দক্ষিণ আফ্রিকা"} - } - Currencies{ - BDT{ - "৳", - "BDT", - } - INR{ - "টাকা", - "INR", - } - } - ExemplarCharacters{"[[:Beng:]‌‍]"} - Languages{ - bn{"বাংলা"} - } - LocaleScript{ - "Beng", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "পূর্বাহ্ণ", - "অপরাহ্ণ", - } - dayNames{ - format{ - abbreviated{ - "রবি", - "সোম", - "মঙ্গল", - "বুধ", - "বৃহস্পতি", - "শুক্র", - "শনি", - } - wide{ - "রবিবার", - "সোমবার", - "মঙ্গলবার", - "বুধবার", - "বৃহষ্পতিবার", - "শুক্রবার", - "শনিবার", - } - } - } - monthNames{ - format{ - abbreviated{ - "জানুয়ারী", - "ফেব্রুয়ারী", - "মার্চ", - "এপ্রিল", - "মে", - "জুন", - "জুলাই", - "আগস্ট", - "সেপ্টেম্বর", - "অক্টোবর", - "নভেম্বর", - "ডিসেম্বর", - } - wide{ - "জানুয়ারী", - "ফেব্রুয়ারী", - "মার্চ", - "এপ্রিল", - "মে", - "জুন", - "জুলাই", - "আগস্ট", - "সেপ্টেম্বর", - "অক্টোবর", - "নভেম্বর", - "ডিসেম্বর", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/bn.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/bn.xml + */ +bn{ + AuxExemplarCharacters{"[\u200C \u200D ৸ ৹ ৲ ৳ ০-৪ ৷ ৫-ৱ]"} + Countries{ + AF{"আফগানিস্তান"} + AL{"আলব্যানিয়া"} + AM{"আর্মেনিয়া"} + AR{"আর্জেণ্টাইনা"} + AT{"অস্ট্রিয়া"} + AU{"অস্ট্রেলিয়া"} + AZ{"আজারবাইজান"} + BD{"বাংলাদেশ"} + BE{"বেল্জিয়ম"} + BG{"বুলগেরিয়া"} + BO{"বোলিভিয়া"} + BR{"ব্রাজিল"} + BT{"ভুটান"} + BY{"বেলোরুশিয়া"} + CG{"কঙ্গো"} + CH{"সুইজর্লণ্ড"} + CL{"চিলি"} + CN{"চীন"} + CO{"কোলোম্বিয়া"} + CR{"কোস্টারিকা"} + CU{"কিউবা"} + CZ{"চেকিয়া"} + DE{"জার্মানি"} + DK{"ডেন্মার্ক"} + DZ{"এলজিরিয়া"} + EC{"ইকোয়াডর"} + EE{"এস্তোনিয়া"} + EG{"মিশর"} + EH{"পশ্চিমী সাহারা"} + ES{"স্পেন"} + ET{"ইফিওপিয়া"} + FI{"ফিন্ল্যাণ্ড"} + FR{"ফ্রান্স"} + GB{"গ্রেটবৃটেন"} + GE{"জর্জিয়া"} + GH{"গানা"} + GR{"গ্রীস্"} + GT{"গোয়াটিমালা"} + GY{"গিয়ানা"} + HN{"হণ্ডুরাস"} + HU{"হাঙ্গেরি"} + ID{"ইন্দোনেশিয়া"} + IE{"আয়ার্লণ্ড"} + IL{"ইস্রায়েল"} + IN{"ভারত"} + IQ{"ইরাক"} + IR{"ইরান"} + IS{"আইসলণ্ড"} + IT{"ইতালী"} + JM{"জ্যামেকা"} + JO{"জর্ডন"} + JP{"জাপান"} + KE{"কেনিয়া"} + KG{"কির্গিজিয়া"} + KH{"কাম্বোজ"} + KR{"দক্ষিণ কোরিয়া"} + KZ{"কাজাকস্থান"} + LA{"লাওস"} + LB{"লেবানন"} + LK{"শ্রীলঙ্কা"} + LR{"লাইবিরিয়া"} + LT{"লিত্ভা"} + LU{"লাক্সেমবার্গ"} + LV{"লাত্ভিয়া"} + LY{"লিবিয়া"} + MA{"মোরক্কো"} + MD{"মোল্দাভিয়া"} + MG{"মাদাগাস্কার"} + MN{"মঙ্গোলিয়া"} + MX{"মক্সিকো"} + MY{"মাল্যাশিয়া"} + NI{"নিকারাগোয়া"} + NL{"হলণ্ড"} + NO{"নরওয়ে"} + NP{"নেপাল"} + NZ{"নিউ জিলণ্ড"} + PA{"পানামা"} + PE{"পিরু"} + PH{"ফিলিপাইন"} + PK{"পাকিস্তান"} + PL{"পোল্যাণ্ড"} + PT{"পর্তুগাল"} + PY{"প্যারাগোয়ে"} + RO{"রুমানিয়া"} + RU{"রাশিয়া"} + SA{"সাউদি আরব"} + SD{"সুদান"} + SE{"সুইডেন"} + SG{"সিঙ্গাপুর"} + SK{"শ্লোভাকিয়া"} + SO{"সোমালি"} + SV{"সালভেডর"} + SY{"সিরিয়া"} + TH{"থাই"} + TJ{"তাজিকস্থান"} + TM{"তুর্কমেনিয়া"} + TN{"টিউনিস্"} + TR{"তুরস্ক"} + TW{"তাইওয়ান"} + UA{"ইউক্রেইন"} + US{"মার্কিন যুক্তরাষ্ট্র"} + UY{"উরুগোয়ে"} + UZ{"উজ্বেকিস্থান"} + VE{"ভেনেজুয়েলা"} + VN{"ভিয়েতনাম"} + YE{"ইমেন"} + ZA{"দক্ষিণ আফ্রিকা"} + } + Currencies{ + BDT{ + "৳", + "BDT", + } + INR{ + "টাকা", + "INR", + } + } + ExemplarCharacters{ + "[় ঁ-ঃ ৺ অ-ঋ ৠ ঌ ৡ এ ঐ ও-ড {ড়} ঢ {ঢ়} ণ ত ৎ থ-ন প-য {য়} র ল শ-হ ঽ-ৄ ৢ ৣ ে " + "ৈ ো-্ ৗ]" + } + Languages{ + bn{"বাংলা"} + } + LocaleScript{ + "Beng", + } + Version{"1.49"} + calendar{ + gregorian{ + AmPmMarkers{ + "পূর্বাহ্ণ", + "অপরাহ্ণ", + } + dayNames{ + format{ + abbreviated{ + "রবি", + "সোম", + "মঙ্গল", + "বুধ", + "বৃহস্পতি", + "শুক্র", + "শনি", + } + wide{ + "রবিবার", + "সোমবার", + "মঙ্গলবার", + "বুধবার", + "বৃহষ্পতিবার", + "শুক্রবার", + "শনিবার", + } + } + } + monthNames{ + format{ + abbreviated{ + "জানুয়ারী", + "ফেব্রুয়ারী", + "মার্চ", + "এপ্রিল", + "মে", + "জুন", + "জুলাই", + "আগস্ট", + "সেপ্টেম্বর", + "অক্টোবর", + "নভেম্বর", + "ডিসেম্বর", + } + wide{ + "জানুয়ারী", + "ফেব্রুয়ারী", + "মার্চ", + "এপ্রিল", + "মে", + "জুন", + "জুলাই", + "আগস্ট", + "সেপ্টেম্বর", + "অক্টোবর", + "নভেম্বর", + "ডিসেম্বর", + } + } + } + } + } +} diff --git a/icuSources/data/locales/bn_IN.txt b/icuSources/data/locales/bn_IN.txt index 655768fb..7bd88038 100644 --- a/icuSources/data/locales/bn_IN.txt +++ b/icuSources/data/locales/bn_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/bn_IN.xml +// * Source File:/common/main/bn_IN.xml // * // *************************************************************************** bn_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.45"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", diff --git a/icuSources/data/locales/ca.txt b/icuSources/data/locales/ca.txt index 744cb8df..96156169 100644 --- a/icuSources/data/locales/ca.txt +++ b/icuSources/data/locales/ca.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ca.xml +// * Source File:/common/main/ca.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/ca.xml + * ICU source: /xml/main/ca.xml */ ca{ Countries{ @@ -20,7 +20,7 @@ ca{ AN{"Antilles Holandeses"} AO{"Angola"} AR{"Argentina"} - AT{"Âustria"} + AT{"Àustria"} AU{"Austràlia"} AW{"Aruba"} AZ{"Azerbaidjan"} @@ -52,6 +52,7 @@ ca{ CN{"Xina"} CO{"Colòmbia"} CR{"Costa Rica"} + CS{"Sèrbia i Montenegro"} CU{"Cuba"} CV{"Cap Verd"} CY{"Xipre"} @@ -86,6 +87,7 @@ ca{ GT{"Guatemala"} GW{"Guinea Bissau"} GY{"Guyana"} + HK{"Hong Kong"} HN{"Hondures"} HR{"Croàcia"} HT{"Haití"} @@ -171,7 +173,6 @@ ca{ SL{"Sierra Leone"} SN{"Senegal"} SO{"Somàlia"} - SP{"Sèrbia"} SR{"Surinam"} SV{"El Salvador"} SY{"Síria"} @@ -203,12 +204,19 @@ ca{ VU{"Vanuatu"} YE{"Iemen"} YT{"Mayotte"} - YU{"Iugoslàvia"} ZA{"Sud-àfrica"} ZM{"Zàmbia"} ZW{"Zimbabwe"} } Currencies{ + BRL{ + "BRL", + "Real brasiler", + } + CNY{ + "CNY", + "Iuan renmimbi xinès", + } ESP{ "₧", "ESP", @@ -218,14 +226,38 @@ ca{ ".", } } + EUR{ + "€", + "Euro", + } + GBP{ + "£", + "Lliura esterlina britànica", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/ca_ES.xml // * // *************************************************************************** ca_ES{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } } diff --git a/icuSources/data/locales/cs.txt b/icuSources/data/locales/cs.txt index f468c07f..80dbd05b 100644 --- a/icuSources/data/locales/cs.txt +++ b/icuSources/data/locales/cs.txt @@ -1,16 +1,46 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/cs.xml +// * Source File:/common/main/cs.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/cs.xml + * ICU source: /xml/main/cs.xml */ cs{ Countries{ + 001{"Svět"} + 002{"Afrika"} + 005{"Jižní Amerika"} + 009{"Oceánie"} + 011{"Západní Afrika"} + 013{"Střední Amerika"} + 014{"Východní Afrika"} + 015{"Severní Afrika"} + 017{"Střední Afrika"} + 018{"Jižní Afrika"} + 019{"Amerika"} + 021{"Severní Amerika"} + 029{"Karibik"} + 030{"Východní Asie"} + 035{"Jihovýchodní Asie"} + 039{"Jižní Evropa"} + 053{"Austrálie a Nový Zéland"} + 054{"Melanésie"} + 057{"Mikronésie"} + 061{"Polynésie"} + 062{"Jižní a centrální Asie"} + 142{"Asie"} + 145{"Západní Asie"} + 150{"Evropa"} + 151{"Východní Evropa"} + 154{"Severní Evropa"} + 155{"Západní Evropa"} + 200{"Československo"} + 830{"Normanské ostrovy"} + 833{"Ostrov Man"} AD{"Andorra"} AE{"Spojené arabské emiráty"} AF{"Afghánistán"} @@ -26,6 +56,7 @@ cs{ AT{"Rakousko"} AU{"Austrálie"} AW{"Aruba"} + AX{"Alandy"} AZ{"Ázerbájdžán"} BA{"Bosna a Hercegovina"} BB{"Barbados"} @@ -59,6 +90,7 @@ cs{ CN{"Čína"} CO{"Kolumbie"} CR{"Kostarika"} + CS{"Srbsko a Černá Hora"} CU{"Kuba"} CV{"Kapverdy"} CX{"Vánoční ostrovy"} @@ -190,6 +222,7 @@ cs{ PW{"Palau"} PY{"Paraguay"} QA{"Katar"} + QO{"Vnější Oceánie"} RE{"Réunion"} RO{"Rumunsko"} RU{"Rusko"} @@ -208,7 +241,6 @@ cs{ SM{"San Marino"} SN{"Senegal"} SO{"Somálsko"} - SP{"Serbia"} SR{"Surinam"} ST{"Svatý Tomáš"} SV{"El Salvador"} @@ -247,16 +279,11 @@ cs{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoslávie"} - ZA{"Jižní Afrika"} + ZA{"Jihoafrická republika"} ZM{"Zambie"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Diner andorrský", - } ADP{ "ADP", "Peseta andorrská", @@ -273,22 +300,10 @@ cs{ "Af", "Afghán", } - AIF{ - "AIF", - "Affars and Issas Franc", - } - ALK{ - "ALK", - "Lek (1946-1961)", - } ALL{ "lek", "Lek", } - ALV{ - "ALV", - "Albanian Lek Valute", - } AMD{ "dram", "Dram arménský", @@ -313,18 +328,10 @@ cs{ "AOR", "Kwanza reajustado (1995-1999)", } - AOS{ - "AOS", - "Escudo angolské", - } ARA{ "ARA", "Austral", } - ARM{ - "ARM", - "Peso argentinské Moneda Nacional", - } ARP{ "ARP", "Peso argentinské (1983-1985)", @@ -341,10 +348,6 @@ cs{ "$A", "Dolar australský", } - AUP{ - "AUP", - "Libra australská", - } AWG{ "AWG", "Zlatý arubský", @@ -361,10 +364,6 @@ cs{ "KM", "Marka konvertibilní", } - BAN{ - "BAN", - "Nový Dinár Bosny a Hercegoviny", - } BBD{ "BDS$", "Dolar barbadoský", @@ -389,18 +388,10 @@ cs{ "lev", "Lev", } - BGM{ - "BGM", - "Lev Bulharský socialistický", - } BGN{ "BGN", "Lev Bulharský", } - BGO{ - "BGO", - "Lev Bulharský (1879-1952)", - } BHD{ "BD", "Dinár bahrajnský", @@ -413,10 +404,6 @@ cs{ "Ber$", "Dolar bermudský", } - BMP{ - "BMP", - "Libra bermudská", - } BND{ "BND", "Dolar brunejský", @@ -425,10 +412,6 @@ cs{ "Bs", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Peso", @@ -461,34 +444,18 @@ cs{ "BRR", "Cruzeiro real", } - BRZ{ - "BRZ", - "Cruzeiro (1942-1967)", - } BSD{ "BSD", "Dolar bahamský", } - BSP{ - "BSP", - "Libra bahamská", - } BTN{ "Nu", "Ngultrum", } - BTR{ - "BTR", - "Rupie bhútánská", - } BUK{ "BUK", "Kyat barmský", } - BUR{ - "BUR", - "Rupie barmská", - } BWP{ "BWP", "Pula", @@ -497,10 +464,6 @@ cs{ "BYB", "Rubl nový běloruský (1994-1999)", } - BYL{ - "BYL", - "Rubl běloruský (1992-1994)", - } BYR{ "Rbl", "Rubl běloruský", @@ -509,10 +472,6 @@ cs{ "BZ$", "Dolar belizský", } - BZH{ - "BZH", - "Dolar Britského Hondurasu", - } CAD{ "Can$", "Dolar kanadský", @@ -521,34 +480,10 @@ cs{ "CDF", "Frank konžský", } - CDG{ - "CDG", - "Frank Konžské republiky", - } - CDL{ - "CDL", - "Zaire konžský", - } - CFF{ - "CFF", - "Frank Středoafrické republiky CFA", - } CHF{ "SwF", "Frank Å¡výcarský", } - CKD{ - "CKD", - "Dolar Cookových ostrovů", - } - CLC{ - "CLC", - "Condor chilský", - } - CLE{ - "CLE", - "Escudo chilské", - } CLF{ "CLF", "Unidades de fomento", @@ -557,30 +492,10 @@ cs{ "Ch$", "Peso chilské", } - CMF{ - "CMF", - "Frank kamerunský CFA", - } - CNP{ - "CNP", - "Juan jen min piao", - } - CNX{ - "CNX", - "Dolar lidové banky", - } CNY{ "Y", "Juan renminbi", } - COB{ - "COB", - "Peso kolumbijské", - } - COF{ - "COF", - "Krank konžský CFA", - } COP{ "Col$", "Peso kolumbijské", @@ -589,10 +504,6 @@ cs{ "C", "Colón kostarický", } - CSC{ - "CSC", - "Koruna československá", - } CSK{ "CSK", "Koruna československá", @@ -605,12 +516,8 @@ cs{ "CVEsc", "Escudo kapverdské", } - CWG{ - "CWG", - "Zlatý Curacao", - } CYP{ - "£", + "CYP", "Libra kyperská", } CZK{ @@ -625,10 +532,6 @@ cs{ "DEM", "Marka německá", } - DES{ - "DES", - "Sperrmark německá", - } DJF{ "DF", "Frank džibutský", @@ -645,14 +548,6 @@ cs{ "DA", "Dinár alžírský", } - DZF{ - "DZF", - "Frank nový alžírský", - } - DZG{ - "DZG", - "Frank alžírský germinal", - } ECS{ "ECS", "Sucre ekvádorský", @@ -681,10 +576,6 @@ cs{ "Br", "Birr etiopský", } - ETD{ - "ETD", - "Dolar etiopský", - } EUR{ "€", "Euro", @@ -693,38 +584,18 @@ cs{ "FIM", "Markka", } - FIN{ - "FIN", - "Markka (1860-1962)", - } FJD{ "F$", "Dolar fidžijský", } - FJP{ - "FJP", - "Libra fidžijská", - } FKP{ "FKP", "Libra falklandská", } - FOK{ - "FOK", - "Koruna Faerských ostrovů", - } FRF{ "FRF", "Frank francouzský", } - FRG{ - "FRG", - "Frank francouzský germinal/Frank poincare", - } - GAF{ - "GAF", - "Frank gabonský CFA", - } GBP{ "£", "Libra Å¡terlinků", @@ -741,86 +612,38 @@ cs{ "GHC", "Cedi", } - GHO{ - "GHO", - "Ghana Old Cedi", - } - GHP{ - "GHP", - "Libra ghanská", - } - GHR{ - "GHR", - "Ghana Revalued Cedi", - } GIP{ "GIP", "Libra gibraltarská", } - GLK{ - "GLK", - "Greenland Krone", - } GMD{ "GMD", "Dalasi", } - GMP{ - "GMP", - "Libra gambijská", - } GNF{ "GF", "Frank guinejský", } - GNI{ - "GNI", - "Frank guinejský (1960-1972)", - } GNS{ "GNS", "Guinea Syli", } - GPF{ - "GPF", - "Frank guadeloupský", - } GQE{ "GQE", "Equatorial Guinea Ekwele Guineana", } - GQF{ - "GQF", - "Equatorial Guinea Franco", - } - GQP{ - "GQP", - "Equatorial Guinea Peseta Guineana", - } GRD{ "GRD", "Drachma", } - GRN{ - "GRN", - "Drachma nová řecká", - } GTQ{ "Q", "Quetzal", } - GUF{ - "GUF", - "French Guyana Franc Guiana", - } GWE{ "GWE", "Escudo guinejské", } - GWM{ - "GWM", - "Portuguese Guinea Mil Reis", - } GWP{ "GWP", "Peso Guinnea-Bissau", @@ -853,22 +676,6 @@ cs{ "Ft", "Forint", } - IBP{ - "IBP", - "Libra severoirská", - } - IDG{ - "IDG", - "Indonesian Nica Guilder", - } - IDJ{ - "IDJ", - "Indonesian Java Rupiah", - } - IDN{ - "IDN", - "Indonesian New Rupiah", - } IDR{ "Rp", "Rupie indonézská", @@ -877,10 +684,6 @@ cs{ "IR£", "Libra irská", } - ILL{ - "ILL", - "Å ekel izraelský", - } ILP{ "ILP", "Libra izraelská", @@ -889,10 +692,6 @@ cs{ "ILS", "Å ekel nový izraelský", } - IMP{ - "IMP", - "Libra Å¡terlinků Ostrov Man", - } INR{ "INR", "Rupie indická", @@ -913,18 +712,10 @@ cs{ "₤", "Lira italská", } - JEP{ - "JEP", - "Libra Å¡terlinků Jersey", - } JMD{ "J$", "Dolar jamajský", } - JMP{ - "JMP", - "Libra jamajská", - } JOD{ "JD", "Dinár jordánský", @@ -941,18 +732,10 @@ cs{ "som", "Som", } - KHO{ - "KHO", - "Riel starý", - } KHR{ "CR", "Riel", } - KID{ - "KID", - "Dolar kiribatský", - } KMF{ "CF", "Frank komorský", @@ -961,14 +744,6 @@ cs{ "KPW", "Won severokorejský", } - KRH{ - "KRH", - "Hwan jihokorejský", - } - KRO{ - "KRO", - "Won starý jihokorejský", - } KRW{ "KRW", "Won jihokorejský", @@ -981,10 +756,6 @@ cs{ "KYD", "Dolar Kajmanských ostrovů", } - KZR{ - "KZR", - "Rubl kazaÅ¡ský", - } KZT{ "T", "Tenge", @@ -997,18 +768,10 @@ cs{ "LL", "Libra libanonská", } - LIF{ - "LIF", - "Frank lichtenÅ¡tejnský", - } LKR{ "SL Re", "Rupie srílanská", } - LNR{ - "LNR", - "Rupie cejlonská", - } LRD{ "LRD", "Dolar liberijský", @@ -1041,10 +804,6 @@ cs{ "LD", "Dinár lybijský", } - LYP{ - "LYP", - "Libra lybijská", - } MAD{ "MAD", "Dirham marocký", @@ -1053,26 +812,10 @@ cs{ "MAF", "Frank marocký", } - MCF{ - "MCF", - "Frank nouveau monacký", - } - MCG{ - "MCG", - "Frank monacký germinal", - } - MDC{ - "MDC", - "Moldovan Leu Cupon", - } MDL{ "MDL", "Leu moldavský", } - MDR{ - "MDR", - "Moldovan Ruble Cupon", - } MGA{ "MGA", "Ariary madagaskarský", @@ -1081,18 +824,10 @@ cs{ "MGF", "Frank madagaskarský", } - MHD{ - "MHD", - "Dolar Marshallových ostrovů", - } MKD{ "MDen", "Denár", } - MKN{ - "MKN", - "Denár (1992-1993)", - } MLF{ "MLF", "Frank malijský", @@ -1109,10 +844,6 @@ cs{ "MOP", "Pataca", } - MQF{ - "MQF", - "Frank martinikský", - } MRO{ "UM", "Ouguiya", @@ -1129,21 +860,13 @@ cs{ "MUR", "Rupie mauricijská", } - MVP{ - "MVP", - "Rupie maledivská", - } MVR{ "MVR", "Rufiyaa", } MWK{ "MK", - "Kwacha", - } - MWP{ - "MWP", - "Libra malawijská", + "Kwacha malawská", } MXN{ "MEX$", @@ -1173,30 +896,14 @@ cs{ "N$", "Dolar namibijský", } - NCF{ - "NCF", - "Frank Nové Kaledonie germinal", - } NGN{ "NGN", "Naira", } - NGP{ - "NGP", - "Libra nigerijská", - } - NHF{ - "NHF", - "Frank Nových Hebrid CFP", - } NIC{ "NIC", "Cordoba", } - NIG{ - "NIG", - "Cordoba zlatá", - } NIO{ "NIO", "Cordoba oro", @@ -1217,34 +924,14 @@ cs{ "$NZ", "Dolar novozélandský", } - NZP{ - "NZP", - "Libra novozélandská", - } OMR{ "RO", "Rijál ománský", } - OMS{ - "OMS", - "Rijál ománský saidi", - } PAB{ "PAB", "Balboa", } - PDK{ - "PDK", - "Transdniestria Ruble Kupon", - } - PDN{ - "PDN", - "Transdniestria New Ruble", - } - PDR{ - "PDR", - "Transdniestria Ruble", - } PEI{ "PEI", "Inti", @@ -1277,14 +964,6 @@ cs{ "PLZ", "Zlotý (1950-1995)", } - PSP{ - "PSP", - "Libra palestinská", - } - PTC{ - "PTC", - "Conto portugalské", - } PTE{ "PTE", "Escudo portugalské", @@ -1297,18 +976,10 @@ cs{ "QR", "Rijál katarský", } - REF{ - "REF", - "Frank Reunion", - } ROL{ "leu", "Lei", } - RON{ - "RON", - "Lei nový", - } RUB{ "RUB", "Rubl ruský", @@ -1325,10 +996,6 @@ cs{ "SRl", "Rijál saudský", } - SAS{ - "SAS", - "Rijál saudský sovereign", - } SBD{ "SI$", "Dolar Å alamounových ostrovů", @@ -1357,10 +1024,6 @@ cs{ "SHP", "Libra Svaté Heleny", } - SIB{ - "SIB", - "Slovenia Tolar Bons", - } SIT{ "SIT", "Tolar", @@ -1369,38 +1032,18 @@ cs{ "Sk", "Koruna slovenská", } - SML{ - "SML", - "Lira San Marino", - } SOS{ "So. Sh.", "Å ilink somálský", } - SQS{ - "SQS", - "Somaliland Shilling", - } SRG{ "Sf", "Zlatý surinamský", } - SSP{ - "SSP", - "Libra skotská", - } STD{ "Db", "Dobra", } - STE{ - "STE", - "Escudo Svatého Tomáše", - } - SUN{ - "SUN", - "Rubl nový", - } SUR{ "SUR", "Rubl", @@ -1417,14 +1060,6 @@ cs{ "E", "Lilangeni", } - TCC{ - "TCC", - "Koruna Turks a Caicos", - } - TDF{ - "TDF", - "Frank čadský CFA", - } THB{ "THB", "Baht", @@ -1445,38 +1080,22 @@ cs{ "TND", "Dinár tuniský", } - TOS{ - "TOS", - "Libra Å¡terlinků tonžská", - } TPE{ "TPE", "Escudo timorské", } - TPP{ - "TPP", - "Pataca timorská", - } TRL{ "TL", "Lira turecká", } TRY{ "TRY", - "Nová turecká lira", + "Lira nová turecká", } TTD{ "TT$", "Dolar Trinidad a Tobago", } - TTO{ - "TTO", - "Dolar starý Trinidad a Tobago", - } - TVD{ - "TVD", - "Dolar tuvalský", - } TWD{ "NT$", "Dolar tchajvanský nový", @@ -1513,10 +1132,6 @@ cs{ "USS", "Dolar americký (týž den)", } - UYF{ - "UYF", - "Peso uruguayské fuerte", - } UYP{ "UYP", "Peso uruguayské (1975-1993)", @@ -1525,34 +1140,18 @@ cs{ "Ur$", "Peso uruguayské", } - UZC{ - "UZC", - "Uzbekistan Coupon Som", - } UZS{ "UZS", "Sum uzbecký", } - VAL{ - "VAL", - "Lira Vatikánu", - } VEB{ "Be", "Bolivar", } - VGD{ - "VGD", - "Dolar Britských Panenských ostrovů", - } VUV{ "VT", "Vatu", } - WSP{ - "WSP", - "Libra Západní Samoa", - } WST{ "WST", "Tala", @@ -1561,10 +1160,6 @@ cs{ "XAF", "Frank BEAC/CFA", } - XAM{ - "XAM", - "Asijská peněžní jednotka", - } XAU{ "XAU", "Zlato", @@ -1589,18 +1184,10 @@ cs{ "EC$", "Dolar východokaribský", } - XCF{ - "XCF", - "Frank Nouveau CFA", - } XDR{ "XDR", "SDR", } - XEF{ - "XEF", - "Frank BCEAEC/CFA", - } XEU{ "XEU", "Evropská měnová jednotka", @@ -1613,14 +1200,6 @@ cs{ "XFU", "Frank UIC", } - XID{ - "XID", - "Dinár islámský", - } - XNF{ - "XNF", - "Frank Francouzských Antil CFA", - } XOF{ "XOF", "Frank BCEAO/CFA", @@ -1633,57 +1212,33 @@ cs{ "YDD", "Dinár jemenský", } - YEI{ - "YEI", - "Rijál jemenský imadi", - } YER{ "YRl", "Rijál jemenský", } YUD{ "YUD", - "Dinár jugoslávský nový", - } - YUF{ - "YUF", - "Dinár jugoslávský federativní", - } - YUG{ - "YUG", - "Dinár jugoslávský 1994", + "Dinár jugoslávský nový [YUD]", } YUM{ "YUM", - "Dinár jugoslávský", + "Dinár jugoslávský nový [YUM]", } YUN{ "YUN", - "Dinár jugoslávský", - } - YUR{ - "YUR", - "Dinár jugoslávský reformovaný", + "Dinár jugoslávský konvertibilní", } ZAL{ "ZAL", "Rand finanční", } - ZAP{ - "ZAP", - "Libra jihoafrická", - } ZAR{ "R", "Rand", } ZMK{ "ZMK", - "Kwacha", - } - ZMP{ - "ZMP", - "Libra zambijská", + "Kwacha zambijská", } ZRN{ "ZRN", @@ -1698,7 +1253,7 @@ cs{ "Dolar zimbabwský", } } - ExemplarCharacters{"[a-z ý á é í ó ú ě ů č ď ň ř Å¡ Å¥ ž]"} + ExemplarCharacters{"[a á b c č d ď e é ě f-h {ch} i í j-n ň o ó p-r ř s Å¡ t Å¥ u ú ů v-y ý z ž]"} Keys{ calendar{"Kalendář"} collation{"Třídění"} @@ -1745,6 +1300,7 @@ cs{ gl{"Haličština"} gn{"GuaranÅ¡tina"} gu{"GujaratÅ¡tina"} + gv{"ManÅ¡tina"} ha{"Hausa"} he{"HebrejÅ¡tina"} hi{"HindÅ¡tina"} @@ -1786,7 +1342,6 @@ cs{ my{"BarmÅ¡tina"} na{"Nauru"} ne{"NepálÅ¡tina"} - nl{"HolandÅ¡tina"} no{"NorÅ¡tina"} oc{"Occitan"} om{"Oromo (Afan)"} @@ -1859,12 +1414,15 @@ cs{ "E", "‰", "∞", - "�", + "NaN", "+", } + Scripts{ + Latn{"Latinka"} + } Types{ calendar{ - buddhist{"Budhistický kalendář"} + buddhist{"Buddhistický kalendář"} chinese{"Čínský kalendář"} gregorian{"Gregoriánský kalendář"} hebrew{"Hebrejský kalendář"} @@ -1873,20 +1431,16 @@ cs{ japanese{"Japonský kalendář"} } } - Version{"1.3"} + Version{"1.83"} calendar{ gregorian{ AmPmMarkers{ "dop.", "odp.", } - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ - "H:mm:ss z", - "H:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss z", "H:mm:ss", "H:mm", "EEEE, d. MMMM yyyy", @@ -1916,6 +1470,17 @@ cs{ "sobota", } } + stand-alone{ + narrow{ + "N", + "P", + "Ú", + "S", + "Č", + "P", + "S", + } + } } eras{ abbreviated{ @@ -1926,18 +1491,18 @@ cs{ monthNames{ format{ abbreviated{ - "1.", - "2.", - "3.", - "4.", - "5.", - "6.", - "7.", - "8.", - "9.", - "10.", - "11.", - "12.", + "ledna", + "úno", + "bře", + "dub", + "května", + "června", + "července", + "srp", + "září", + "říj", + "lis", + "prosince", } narrow{ "l", @@ -1998,160 +1563,202 @@ cs{ "p", } wide{ - "Leden", - "Únor", - "Březen", - "Duben", - "Květen", - "Červen", - "Červenec", - "Srpen", - "Září", - "Říjen", - "Listopad", - "Prosinec", + "leden", + "únor", + "březen", + "duben", + "květen", + "červen", + "červenec", + "srpen", + "září", + "říjen", + "listopad", + "prosinec", + } + } + } + quarters{ + format{ + wide{ + "1. čtvrtletí", + "2. čtvrtletí", + "3. čtvrtletí", + "4. čtvrtletí", } } } } } - localPatternChars{"GuMtkHmsSEDFwWahKzUeygAZ"} + delimiters{ + alternateQuotationEnd{"‘"} + alternateQuotationStart{"‚"} + quotationEnd{"“"} + quotationStart{"„"} + } + layout{ + /** + * Used for figuring out the casing of characters in a list. + */ + casing{"titlecase-firstword"} + } + localPatternChars{"GuMtkHmsSEDFwWahKzUeygAZvcL"} zoneStrings{ - { - "America/Los_Angeles", - "Pacifický standardní čas", - "PST", - "Pacifický letní čas", - "PDT", - "Los Angeles", - } - { - "America/Denver", - "Horský standardní čas", - "MST", - "Horský letní čas", - "MDT", - "Denver", - } - { - "America/Phoenix", - "Horský standardní čas", - "MST", - "Horský standardní čas", - "MST", - "Phoenix", - } - { - "America/Chicago", - "Centrální standardní čas", - "CST", - "Centrální letní čas", - "CDT", - "Chicago", - } - { - "America/New_York", - "Východní standardní čas", - "EST", - "Východní letní čas", - "EDT", - "New York", - } - { - "America/Indianapolis", - "Východní standardní čas", - "EST", - "Východní standardní čas", - "EST", - "Indianapolis", - } - { - "Pacific/Honolulu", - "Havajský standardní čas", - "HST", - "Havajský standardní čas", - "HST", - "Honolulu", - } - { - "America/Anchorage", - "AljaÅ¡ský standardní čas", - "AST", - "AljaÅ¡ský letní čas", - "ADT", - "Anchorage", - } - { - "America/Halifax", - "Atlantický standardní čas", - "AST", - "Atlantický letní čas", - "ADT", - "Halifax", - } - { - "America/St_Johns", - "Newfoundlandský standardní čas", - "CNT", - "Newfoundlandský letní čas", - "CDT", - "St. Johns", - } - { - "Europe/Paris", - "Středoevropský standardní čas", - "CET", - "Středoevropský letní čas", - "CEST", - "Paříž", - } - { - "Etc/GMT", - "Greenwichský střední čas", - "GMT", - "Greenwichský střední čas", - "GMT", - "Londýn", - } - { - "Africa/Casablanca", - "Greenwichský střední čas", - "GMT", - "Greenwichský střední čas", - "GMT", - "Casablanca", - } - { - "Asia/Jerusalem", - "Izraelský standardní čas", - "IST", - "Izraelský letní čas", - "IDT", - "Jeruzalém", - } - { - "Asia/Tokyo", - "Japonský standardní čas", - "JST", - "Japonský standardní čas", - "JST", - "Tokio", - } - { - "Europe/Bucharest", - "Východoevropský standardní čas", - "EET", - "Východoevropský letní čas", - "EEST", - "BukureÅ¡Å¥", - } - { - "Asia/Shanghai", - "Čínský standardní čas", - "CTT", - "Čínský standardní čas", - "CDT", - "Å anghaj", + "Africa:Casablanca"{ + ec{"Casablanca"} + ld{"Greenwichský střední čas"} + ls{"Greenwichský střední čas"} + sd{"GMT"} + ss{"GMT"} + } + "America:Anchorage"{ + ec{"Anchorage"} + ld{"AljaÅ¡ský letní čas"} + ls{"AljaÅ¡ský standardní čas"} + sd{"AKDT"} + ss{"AKST"} + } + "America:Chicago"{ + ec{"Chicago"} + ld{"Centrální letní čas"} + ls{"Centrální standardní čas"} + sd{"CDT"} + ss{"CST"} + } + "America:Cordoba"{ + ec{"Kordoba"} + } + "America:Denver"{ + ec{"Denver"} + ld{"Horský letní čas"} + ls{"Horský standardní čas"} + sd{"MDT"} + ss{"MST"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"Atlantický letní čas"} + ls{"Atlantický standardní čas"} + sd{"ADT"} + ss{"AST"} + } + "America:Indianapolis"{ + ec{"Indianapolis"} + ld{"Východní letní čas (Indianapolis)"} + ls{"Východní standardní čas"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + ld{"Pacifický letní čas"} + ls{"Pacifický standardní čas"} + sd{"PDT"} + ss{"PST"} + } + "America:New_York"{ + ec{"New York"} + ld{"Východní letní čas (New York)"} + ls{"Východní standardní čas (New York)"} + sd{"EDT"} + ss{"EST"} + } + "America:Phoenix"{ + ec{"Phoenix"} + ld{"Horský standardní čas"} + ls{"Horský standardní čas"} + sd{"MST"} + ss{"MST"} + } + "America:Tijuana"{ + ec{"Tichuana"} + } + "Antarctica:South_Pole"{ + ec{"Jižní pól"} + } + "Asia:Jerusalem"{ + ec{"Jeruzalém"} + ld{"Izraelský letní čas"} + ls{"Izraelský standardní čas"} + sd{"IDT"} + ss{"IST"} + } + "Asia:Kamchatka"{ + ec{"Kamčatka"} + } + "Asia:Kashgar"{ + ec{"KaÅ¡ghar"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasnojarsk"} + } + "Asia:Sakhalin"{ + ec{"Sachalin"} + } + "Asia:Tashkent"{ + ec{"TaÅ¡kent"} + } + "Asia:Tokyo"{ + ec{"Tokio"} + ld{"Japonský letní čas"} + ls{"Japonský standardní čas"} + sd{"JST"} + ss{"JST"} + } + "Asia:Ulaanbaatar"{ + ec{"Ulánbátar"} + } + "Asia:Yakutsk"{ + ec{"Jakutsk"} + } + "Asia:Yekaterinburg"{ + ec{"Jekatěrinburg"} + } + "Atlantic:Azores"{ + ec{"Azorské ostrovy"} + } + "Atlantic:Canary"{ + ec{"Kanárské ostrovy"} + } + "Europe:Bucharest"{ + ec{"BukureÅ¡Å¥"} + ld{"Východoevropský letní čas"} + ls{"Východoevropský standardní čas"} + sd{"EEST"} + ss{"EET"} + } + "Europe:Kiev"{ + ec{"Kyjev"} + } + "Europe:Lisbon"{ + ec{"Lisabon"} + } + "Europe:London"{ + ec{"Londýn"} + } + "Europe:Moscow"{ + ec{"Moskva"} + } + "Europe:Paris"{ + ec{"Paříž"} + ld{"Středoevropský letní čas"} + ls{"Středoevropský standardní čas"} + sd{"CEST"} + ss{"CET"} + } + "Europe:Uzhgorod"{ + ec{"Užhorod"} + } + "Europe:Zaporozhye"{ + ec{"Záporoží"} + } + "Pacific:Galapagos"{ + ec{"Galapágy"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"Havajský letní čas"} + ls{"Havajský standardní čas"} + sd{"HST"} + ss{"HST"} } } } diff --git a/icuSources/data/locales/cs_CZ.txt b/icuSources/data/locales/cs_CZ.txt index e60ee7e2..e0c78fd7 100644 --- a/icuSources/data/locales/cs_CZ.txt +++ b/icuSources/data/locales/cs_CZ.txt @@ -1,17 +1,20 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/cs_CZ.xml +// * Source File:/common/main/cs_CZ.xml // * // *************************************************************************** cs_CZ{ + Languages{ + lb{"LucemburÅ¡tina"} + } NumberPatterns{ - "#,##0.##;-#,##0.##", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.40"} } diff --git a/icuSources/data/locales/cy.txt b/icuSources/data/locales/cy.txt index 76873129..a0c17da3 100644 --- a/icuSources/data/locales/cy.txt +++ b/icuSources/data/locales/cy.txt @@ -1,28 +1,97 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/cy.xml +// * Source File:/common/main/cy.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/cy.xml + * ICU source: /xml/main/cy.xml */ cy{ + AuxExemplarCharacters{"[j k q v x z]"} Countries{ GB{"Prydain Fawr"} } - ExemplarCharacters{"[a-z âäáàêëéèîïíìôöóòûüúùŵẅẃẁŷÿýỳ]"} + Currencies{ + BRL{ + "BRL", + "Real Brasil", + } + CNY{ + "CNY", + "Yuan Renminbi Tseina", + } + EUR{ + "EUR", + "Ewro", + } + GBP{ + "£", + "Punt Sterling Prydain", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/cy_GB.xml // * // *************************************************************************** cy_GB{ - NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", - "#,##0%", - "#E0", - } - Version{"1.2"} + Version{"1.33"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", diff --git a/icuSources/data/locales/da.txt b/icuSources/data/locales/da.txt index 7ed2c12a..de338fba 100644 --- a/icuSources/data/locales/da.txt +++ b/icuSources/data/locales/da.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/da.xml +// * Source File:/common/main/da.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/da.xml + * ICU source: /xml/main/da.xml */ da{ + AuxExemplarCharacters{"[á é í ó ú ý]"} Countries{ AD{"Andorra"} AE{"Forenede Arabiske Emirater"} @@ -59,6 +60,7 @@ da{ CN{"Kina"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbien og Montenegro"} CU{"Cuba"} CV{"Kap Verde"} CX{"Juleøen"} @@ -208,7 +210,6 @@ da{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbien"} SR{"Surinam"} ST{"São Tomé og Príncipe"} SV{"El Salvador"} @@ -247,16 +248,11 @@ da{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Jugoslavien"} ZA{"Sydafrika"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorransk diner", - } ADP{ "ADP", "Andorransk peseta", @@ -265,22 +261,10 @@ da{ "AED", "Dirham fra de Forenede Arabiske Emirater", } - AIF{ - "AIF", - "Affars og Issas franc", - } - ALK{ - "ALK", - "Albansk lek (1946-1961)", - } ALL{ "lek", "Albansk lek", } - ALV{ - "ALV", - "Albansk lek", - } AMD{ "dram", "Armensk dram", @@ -305,18 +289,10 @@ da{ "AOR", "Angolansk kwanza reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolansk escudo", - } ARA{ "ARA", "Argentinsk austral", } - ARM{ - "ARM", - "Argentinsk peso moneda nacional", - } ARP{ "ARP", "Argentinsk peso (1983-1985)", @@ -333,10 +309,6 @@ da{ "$A", "Australsk dollar", } - AUP{ - "AUP", - "Australsk pund", - } AWG{ "AWG", "Arubansk gylden", @@ -353,10 +325,6 @@ da{ "KM", "Bosnien-Hercegovinsk konvertibel mark", } - BAN{ - "BAN", - "Ny bosnien-hercegovinsk dinar", - } BBD{ "BDS$", "Barbadisk dollar", @@ -381,18 +349,10 @@ da{ "lev", "Bulgarsk hard lev", } - BGM{ - "BGM", - "Bulgarsk socialist lev", - } BGN{ "BGN", "Ny Bulgarsk lev", } - BGO{ - "BGO", - "Bulgarsk lev (1879-1952)", - } BHD{ "BD", "Bahrainsk dinar", @@ -405,10 +365,6 @@ da{ "Ber$", "Bermudansk dollar", } - BMP{ - "BMP", - "Bermudansk pund", - } BND{ "BND", "Bruneisk dollar", @@ -445,34 +401,18 @@ da{ "BRR", "Brasiliansk cruzeiro", } - BRZ{ - "BRZ", - "Brasiliansk cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahamansk dollar", } - BSP{ - "BSP", - "Bahamansk pund", - } BTN{ "Nu", "Bhutansk ngultrum", } - BTR{ - "BTR", - "Bhutansk rupee", - } BUK{ "BUK", "Burmesisk kyat", } - BUR{ - "BUR", - "Burmesisk rupee", - } BWP{ "BWP", "Botswansk pula", @@ -481,10 +421,6 @@ da{ "BYB", "Ny hviderussisk rubel (1994-1999)", } - BYL{ - "BYL", - "Hviderussisk rubel (1992-1994)", - } BYR{ "Rbl", "Hviderussisk rubel", @@ -493,10 +429,6 @@ da{ "BZ$", "Belizisk dollar", } - BZH{ - "BZH", - "Britisk Honduras dollar", - } CAD{ "Can$", "Canadisk dollar", @@ -505,34 +437,10 @@ da{ "CDF", "Congolesisk franc congolais", } - CDG{ - "CDG", - "Congolesisk franc", - } - CDL{ - "CDL", - "Congolesisk Zaire", - } - CFF{ - "CFF", - "CFA-franc fra den Centralafrikanske republik", - } CHF{ "SwF", "Schweizisk franc", } - CKD{ - "CKD", - "Dollar fra Cookøerne", - } - CLC{ - "CLC", - "Chilensk condor", - } - CLE{ - "CLE", - "Chilensk escudo", - } CLF{ "CLF", "Chilensk unidades de fomento", @@ -541,26 +449,10 @@ da{ "Ch$", "Chilensk peso", } - CMF{ - "CMF", - "Camerounsk CFA-franc", - } - CNP{ - "CNP", - "Kinesisk jen min piao yuan", - } CNY{ "Y", "Kinesisk yuan renminbi", } - COB{ - "COB", - "Colombiansk papirpeso", - } - COF{ - "COF", - "Congolesisk CFA-franc", - } COP{ "Col$", "Colombiansk peso", @@ -569,10 +461,6 @@ da{ "C", "Costaricansk colon", } - CSC{ - "CSC", - "Tjekkoslovakisk koruna", - } CSK{ "CSK", "Tjekkoslovakisk hard koruna", @@ -585,10 +473,6 @@ da{ "CVEsc", "Kapverdisk escudo", } - CWG{ - "CWG", - "Curacaosk gylden", - } CYP{ "£C", "Cypriotisk pund", @@ -605,10 +489,6 @@ da{ "DEM", "Tysk mark", } - DES{ - "DES", - "Tysk sperrmark", - } DJF{ "DF", "Djiboutisk franc", @@ -625,14 +505,6 @@ da{ "DA", "Algerisk dinar", } - DZF{ - "DZF", - "Ny algerisk franc", - } - DZG{ - "DZG", - "Algerisk franc germinal", - } ECS{ "ECS", "Ecuadoriansk sucre", @@ -657,10 +529,6 @@ da{ "Br", "Etiopisk birr", } - ETD{ - "ETD", - "Etiopisk dollar", - } EUR{ "€", "Euro", @@ -669,34 +537,18 @@ da{ "FIM", "Finsk mark", } - FIN{ - "FIN", - "Finsk mark (1860-1962)", - } FJD{ "F$", "Fijiansk dollar", } - FJP{ - "FJP", - "Fijiansk pund", - } FKP{ "FKP", "Pund fra Falklandsøerne", } - FOK{ - "FOK", - "Færøsk krone", - } FRF{ "FRF", "Fransk franc", } - GAF{ - "GAF", - "Gabonesisk CFA-franc", - } GBP{ "£", "Britisk pund", @@ -713,86 +565,38 @@ da{ "GHC", "Ghanesisk cedi", } - GHO{ - "GHO", - "Gammel ghanesisk cedi", - } - GHP{ - "GHP", - "Ghanesisk pund", - } - GHR{ - "GHR", - "Ghanesisk revalueret cedi", - } GIP{ "GIP", "Gibraltarisk pund", } - GLK{ - "GLK", - "Grønlandsk krone", - } GMD{ "GMD", "Gambisk dalasi", } - GMP{ - "GMP", - "Gambisk pund", - } GNF{ "GF", "Guineansk franc", } - GNI{ - "GNI", - "Guineansk franc (1960-1972)", - } GNS{ "GNS", "Guineansk syli", } - GPF{ - "GPF", - "Guadeloupsk franc", - } GQE{ "GQE", "Ækvatorialguineask ekwele guineana", } - GQF{ - "GQF", - "Ækvatorialguineask franco", - } - GQP{ - "GQP", - "Ækvatorialguineask peseta guineana", - } GRD{ "GRD", "Græsk drachma", } - GRN{ - "GRN", - "Ny græsk drachma", - } GTQ{ "Q", "Guatemalansk quetzal", } - GUF{ - "GUF", - "Fransk-guyansk franc guiana", - } GWE{ "GWE", "Portugisisk guinea escudo", } - GWM{ - "GWM", - "Portugisisk guinea mil reis", - } GWP{ "GWP", "Guineansk peso", @@ -821,22 +625,6 @@ da{ "Ft", "Ungarsk forint", } - IBP{ - "IBP", - "Nordirsk pund", - } - IDG{ - "IDG", - "Indonesisk nica guilder", - } - IDJ{ - "IDJ", - "Indonesisk java rupiah", - } - IDN{ - "IDN", - "Ny indonesisk rupiah", - } IDR{ "Rp", "Indonesisk pupiah", @@ -845,10 +633,6 @@ da{ "IR£", "Irsk pund", } - ILL{ - "ILL", - "Israelsk shekel", - } ILP{ "ILP", "Israelsk pund", @@ -858,7 +642,7 @@ da{ "Ny israelsk shekel", } INR{ - "=0#Rs.|1#Re.|1/common/main/da_DK.xml // * // *************************************************************************** da_DK{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤ #,##0.00;¤ -#,##0.00", - "#,##0%", + "#,##0 %", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/de.txt b/icuSources/data/locales/de.txt index 829a6f42..fddcb650 100644 --- a/icuSources/data/locales/de.txt +++ b/icuSources/data/locales/de.txt @@ -1,16 +1,46 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/de.xml +// * Source File:/common/main/de.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/de.xml + * ICU source: /xml/main/de.xml */ de{ Countries{ + 001{"Welt"} + 002{"Afrika"} + 005{"Südamerika"} + 009{"Ozeanien"} + 011{"Westafrika"} + 013{"Mittelamerika"} + 014{"Ostafrika"} + 015{"Nordafrika"} + 017{"Zentralafrika"} + 019{"Nord-, Mittel- und Südamerika"} + 021{"Nordamerika"} + 029{"Karibik"} + 030{"Ostasien"} + 034{"Südasien"} + 035{"Südostasien"} + 039{"Südeuropa"} + 053{"Australien und Neuseeland"} + 054{"Melanesien"} + 061{"Polynesien"} + 062{"Süd-Zentralasien"} + 142{"Asien"} + 143{"Zentralasien"} + 145{"Westasien"} + 150{"Europa"} + 151{"Osteuropa"} + 154{"Nordeuropa"} + 155{"Westeuropa"} + 419{"Lateinamerika und Karibik"} + 830{"Kanalinseln"} + 833{"Insel Man"} AD{"Andorra"} AE{"Vereinigte Arabische Emirate"} AF{"Afghanistan"} @@ -26,6 +56,7 @@ de{ AT{"Österreich"} AU{"Australien"} AW{"Aruba"} + AX{"Alandinseln"} AZ{"Aserbaidschan"} BA{"Bosnien und Herzegowina"} BB{"Barbados"} @@ -59,6 +90,7 @@ de{ CN{"China"} CO{"Kolumbien"} CR{"Costa Rica"} + CS{"Serbien und Montenegro"} CU{"Kuba"} CV{"Kap Verde"} CX{"Weihnachtsinsel"} @@ -190,6 +222,7 @@ de{ PW{"Palau"} PY{"Paraguay"} QA{"Katar"} + QO{"Äußeres Ozeanien"} RE{"Réunion"} RO{"Rumänien"} RU{"Russische Föderation"} @@ -208,7 +241,6 @@ de{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbien"} SR{"Suriname"} ST{"São Tomé und Príncipe"} SV{"El Salvador"} @@ -247,16 +279,11 @@ de{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoslawien"} ZA{"Südafrika"} ZM{"Sambia"} ZW{"Simbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorranischer Diner", - } ADP{ "ADP", "Andorranische Pesete", @@ -267,28 +294,16 @@ de{ } AFA{ "AFA", - "Afghani", + "Afghani (1927-2002)", } AFN{ "Af", "Afghani", } - AIF{ - "AIF", - "Afar und Issa Franc", - } - ALK{ - "ALK", - "Albanischer Lek (1946-1961)", - } ALL{ "ALL", "Lek", } - ALV{ - "ALV", - "Albanischer Lek Valute", - } AMD{ "AMD", "Dram", @@ -313,18 +328,10 @@ de{ "AOR", "Kwanza Reajustado", } - AOS{ - "AOS", - "Angolanischer Escudo", - } ARA{ "ARA", "Argentinischer Austral", } - ARM{ - "ARM", - "Argentinischer Peso Moneda Nacional", - } ARP{ "ARP", "Argentinischer Peso (1983-1985)", @@ -341,10 +348,6 @@ de{ "AUD", "Australischer Dollar", } - AUP{ - "AUP", - "Australisches Pfund", - } AWG{ "AWG", "Aruba Florin", @@ -361,10 +364,6 @@ de{ "BAM", "Konvertierbare Mark", } - BAN{ - "BAN", - "Bosnien und Herzegowina Neuer Dinar", - } BBD{ "BBD", "Barbados-Dollar", @@ -383,16 +382,12 @@ de{ } BGL{ "BGL", - "Lew", + "Lew (1962-1999)", } BGN{ "BGN", "Lew", } - BGO{ - "BGO", - "Lew (1879-1952)", - } BHD{ "BHD", "Bahrain-Dinar", @@ -405,10 +400,6 @@ de{ "BMD", "Bermuda-Dollar", } - BMP{ - "BMP", - "Bermuda-Pfund", - } BND{ "BND", "Brunei-Dollar", @@ -417,10 +408,6 @@ de{ "BOB", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Bolivianischer Peso", @@ -453,34 +440,18 @@ de{ "BRR", "Brasilianischer Cruzeiro", } - BRZ{ - "BRZ", - "Brasilianischer Cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahama-Dollar", } - BSP{ - "BSP", - "Bahama-Pfund", - } BTN{ "BTN", "Ngultrum", } - BTR{ - "BTR", - "Bhutan Rupie", - } BUK{ "BUK", "Birmanischer Kyat", } - BUR{ - "BUR", - "Birmanische Rupie", - } BWP{ "BWP", "Pula", @@ -489,10 +460,6 @@ de{ "BYB", "Belarus Rubel (alt)", } - BYL{ - "BYL", - "Belarus Rubel (1992-1994)", - } BYR{ "BYR", "Belarus Rubel (neu)", @@ -509,30 +476,10 @@ de{ "CDF", "Franc congolais", } - CDG{ - "CDG", - "Republik Kongo Franc", - } - CDL{ - "CDL", - "Kongolesische Zaire", - } - CFF{ - "CFF", - "Zentralafrikanische Republik CFA Franc", - } CHF{ "SFr.", "Schweizer Franken", } - CLC{ - "CLC", - "Chilenischer Condor", - } - CLE{ - "CLE", - "Chilenischer Escudo", - } CLF{ "CLF", "Unidades de Fomento", @@ -541,26 +488,10 @@ de{ "CLP", "Chilenischer Peso", } - CMF{ - "CMF", - "Kamerun CFA Franc", - } - CNP{ - "CNP", - "Chinesischer Jen Min Piao Yuan", - } CNY{ "CNY", "Renminbi Yuan", } - COB{ - "COB", - "Kolumbianischer Papier-Peso", - } - COF{ - "COF", - "Kongo CFA Franc", - } COP{ "COP", "Kolumbianischer Peso", @@ -569,10 +500,6 @@ de{ "CRC", "Costa Rica Colon", } - CSC{ - "CSC", - "Tschechoslowakische Krone", - } CUP{ "CUP", "Kubanischer Peso", @@ -593,10 +520,6 @@ de{ "DM", "Deutsche Mark", } - DES{ - "DES", - "Sperrmark", - } DJF{ "DJF", "Dschibuti-Franc", @@ -613,14 +536,6 @@ de{ "DZD", "Algerischer Dinar", } - DZF{ - "DZF", - "Algerischer Neuer Franc", - } - DZG{ - "DZG", - "Algerischer Franc Germinal", - } ECS{ "ECS", "Ecuadorianischer Sucre", @@ -649,10 +564,6 @@ de{ "ETB", "Birr", } - ETD{ - "ETD", - "Äthiopischer Dollar", - } EUR{ "€", "Euro", @@ -661,34 +572,18 @@ de{ "FIM", "Finnische Mark", } - FIN{ - "FIN", - "Finnische Mark (1860-1962)", - } FJD{ "FJD", "Fidschi Dollar", } - FJP{ - "FJP", - "Fidschi Pfund", - } FKP{ "FKP", "Falkland Pfund", } - FOK{ - "FOK", - "Färöer Inseln Krone", - } FRF{ "FF", "Französischer Franc", } - FRG{ - "FRG", - "Französischer Franc Germinal/Franc Poincare", - } GBP{ "£", "Pfund Sterling", @@ -705,30 +600,14 @@ de{ "GHC", "Cedi", } - GHO{ - "GHO", - "Ghana Cedi (alt)", - } - GHP{ - "GHP", - "Ghana Pfund", - } GIP{ "GIP", "Gibraltar Pfund", } - GLK{ - "GLK", - "Grönland Krone", - } GMD{ "GMD", "Dalasi", } - GMP{ - "GMP", - "Gambia Pfund", - } GNF{ "GNF", "Guinea Franc", @@ -737,38 +616,18 @@ de{ "GQE", "Äquatorialguinea Ekwele Guineana", } - GQF{ - "GQF", - "Äquatorialguinea Franco", - } - GQP{ - "GQP", - "Äquatorialguinea Peseta Guineana", - } GRD{ "GRD", "Griechische Drachme", } - GRN{ - "GRN", - "Neue Griechische Drachme", - } GTQ{ "GTQ", "Quetzal", } - GUF{ - "GUF", - "Französisch Guayana Franc Guiana", - } GWE{ "GWE", "Portugiesisch Guinea Escudo", } - GWM{ - "GWM", - "Portugiesisch Guinea Mil Reis", - } GWP{ "GWP", "Guinea Bissau Peso", @@ -801,22 +660,6 @@ de{ "HUF", "Forint", } - IBP{ - "IBP", - "Nordirisches Pfund", - } - IDG{ - "IDG", - "Indonesischer Nica Guilder", - } - IDJ{ - "IDJ", - "Indonesische Java Rupiah", - } - IDN{ - "IDN", - "Indonesische Neue Rupiah", - } IDR{ "IDR", "Rupiah", @@ -825,10 +668,6 @@ de{ "IEP", "Irisches Pfund", } - ILL{ - "ILL", - "Schekel", - } ILP{ "ILP", "Israelisches Pfund", @@ -857,18 +696,10 @@ de{ "₤", "Italienische Lire", } - JEP{ - "JEP", - "Jersey Pfund Sterling", - } JMD{ "JMD", "Jamaika Dollar", } - JMP{ - "JMP", - "Jamaika Pfund", - } JOD{ "JOD", "Jordanischer Dinar", @@ -885,10 +716,6 @@ de{ "som", "Som", } - KHO{ - "KHO", - "Riel (alt)", - } KHR{ "KHR", "Riel", @@ -897,22 +724,10 @@ de{ "KMF", "Komoren Franc", } - KPP{ - "KPP", - "Nordkoreanischer Won (alt)", - } KPW{ "KPW", "Nordkoreanischer Won", } - KRH{ - "KRH", - "Südkoreanischer Hwan", - } - KRO{ - "KRO", - "Südkoreanischer Won (alt)", - } KRW{ "KRW", "Südkoreanischer Won", @@ -925,10 +740,6 @@ de{ "KYD", "Kaiman-Dollar", } - KZR{ - "KZR", - "Kasachstan Rubel", - } KZT{ "KZT", "Tenge", @@ -941,18 +752,10 @@ de{ "LBP", "Libanesisches Pfund", } - LIF{ - "LIF", - "Liechtenstein Franken", - } LKR{ "LKR", "Sri Lanka Rupie", } - LNR{ - "LNR", - "Ceylon Rupie", - } LRD{ "LRD", "Liberianischer Dollar", @@ -985,10 +788,6 @@ de{ "LYD", "Libyscher Dinar", } - LYP{ - "LYP", - "Libysches Pfund", - } MAD{ "MAD", "Marokkanischer Dirham", @@ -997,26 +796,10 @@ de{ "MAF", "Marokkanischer Franc", } - MCF{ - "MCF", - "Monaco Franc Nouveau", - } - MCG{ - "MCG", - "Monaco Franc Germinal", - } - MDC{ - "MDC", - "Moldau Leu Cupon", - } MDL{ "MDL", "Moldau Leu", } - MDR{ - "MDR", - "Moldau Rubel Cupon", - } MGA{ "MGA", "Madagaskar Ariary", @@ -1025,10 +808,6 @@ de{ "MGF", "Madagaskar Franc", } - MHD{ - "MHD", - "Marshall Inseln Dollar", - } MKD{ "MKD", "Denar", @@ -1061,10 +840,6 @@ de{ "MUR", "Mauritius Rupie", } - MVP{ - "MVP", - "Malediven Rupie", - } MVR{ "MVR", "Rufiyaa", @@ -1073,10 +848,6 @@ de{ "MWK", "Malawi Kwacha", } - MWP{ - "MWP", - "Malawi Pfund", - } MXN{ "MXN", "Mexikanischer Peso", @@ -1101,30 +872,14 @@ de{ "NAD", "Namibia Dollar", } - NCF{ - "NCF", - "Neukaledonien Franc Germinal", - } NGN{ "NGN", "Naira", } - NGP{ - "NGP", - "Nigerianisches Pfund", - } - NHF{ - "NHF", - "Neue Hebriden CFP Franc", - } NIC{ "NIC", "Cordoba", } - NIG{ - "NIG", - "Gold-Cordoba", - } NIO{ "NIO", "Gold-Cordoba", @@ -1145,10 +900,6 @@ de{ "NZD", "Neuseeland Dollar", } - NZP{ - "NZP", - "Neuseeland Pfund", - } OMR{ "OMR", "Rial Omani", @@ -1157,18 +908,6 @@ de{ "PAB", "Balboa", } - PDK{ - "PDK", - "Dnjestr-Republik Rubel Kupon", - } - PDN{ - "PDN", - "Dnjestr-Republik Rubel (neu)", - } - PDR{ - "PDR", - "Dnjestr-Republik Rubel", - } PEI{ "PEI", "Peruanischer Inti", @@ -1201,14 +940,6 @@ de{ "PLZ", "Zloty (1950-1995)", } - PSP{ - "PSP", - "Palästina Pfund", - } - PTC{ - "PTC", - "Portugiesischer Conto", - } PTE{ "PTE", "Portugiesischer Escudo", @@ -1225,10 +956,6 @@ de{ "ROL", "Leu", } - RON{ - "RON", - "Neuer Leu", - } RUB{ "RUB", "Russischer Rubel (neu)", @@ -1273,10 +1000,6 @@ de{ "SHP", "St. Helena Pfund", } - SIB{ - "SIB", - "Tolar Bons", - } SIT{ "SIT", "Tolar", @@ -1289,38 +1012,18 @@ de{ "SLL", "Leone", } - SML{ - "SML", - "San Marino Lire", - } SOS{ "SOS", "Somalia Schilling", } - SQS{ - "SQS", - "Somaliland Schilling", - } SRG{ "SRG", "Suriname Gulden", } - SSP{ - "SSP", - "Schottisches Pfund", - } STD{ "STD", "Dobra", } - STE{ - "STE", - "Sao Tome und Principe Escudo", - } - SUN{ - "SUN", - "Sowjetischer Neuer Rubel", - } SUR{ "SUR", "Sowjetischer Rubel", @@ -1337,14 +1040,6 @@ de{ "SZL", "Lilangeni", } - TCC{ - "TCC", - "Turks und Caicos Krone", - } - TDF{ - "TDF", - "Tschad CFA Franc", - } THB{ "THB", "Baht", @@ -1369,18 +1064,10 @@ de{ "TOP", "PaÊ»anga", } - TOS{ - "TOS", - "Tonga Pfund Sterling", - } TPE{ "TPE", "Timor Escudo", } - TPP{ - "TPP", - "Timor Pataca", - } TRL{ "TRL", "Türkische Lira", @@ -1393,14 +1080,6 @@ de{ "TTD", "Trinidad und Tobago Dollar", } - TTO{ - "TTO", - "Trinidad und Tobago Dollar (alt)", - } - TVD{ - "TVD", - "Tuvalu Dollar", - } TWD{ "TWD", "Neuer Taiwan Dollar", @@ -1445,54 +1124,18 @@ de{ "UZS", "Usbekistan Sum", } - VAL{ - "VAL", - "Vatikanstadt Lire", - } - VDD{ - "VDD", - "Nordvietnam Piastre Dong Viet", - } - VDN{ - "VDN", - "Nordvietnam Neuer Dong", - } - VDP{ - "VDP", - "Nordvietnam Viet Minh Piastre Dong Viet", - } VEB{ "VEB", "Bolivar", } - VGD{ - "VGD", - "Britische Jungferninseln Dollar", - } VND{ "VND", "Dong", } - VNN{ - "VNN", - "Vietnamesischer Neuer Dong", - } - VNR{ - "VNR", - "Republik Vietnam Dong", - } - VNS{ - "VNS", - "Vietnamesischer Dong", - } VUV{ "VUV", "Vatu", } - WSP{ - "WSP", - "West-Samoa Pfund", - } WST{ "WST", "Tala", @@ -1533,14 +1176,6 @@ de{ "XFU", "Französischer UIC-Franc", } - XID{ - "XID", - "Islamischer Dinar", - } - XNF{ - "XNF", - "Französischer Antillen CFA Franc", - } XOF{ "XOF", "CFA Franc (West)", @@ -1549,18 +1184,10 @@ de{ "XPF", "CFP Franc", } - XTR{ - "XTR", - "COMECON Transferabler Rubel", - } YDD{ "YDD", "Jemen Dinar", } - YEI{ - "YEI", - "Jemen Imadi Riyal", - } YER{ "YER", "Jemen Rial", @@ -1569,14 +1196,6 @@ de{ "YUD", "Jugoslawischer Dinar (1966-1990)", } - YUF{ - "YUF", - "Jugoslawische Föderation Dinar", - } - YUG{ - "YUG", - "Jugoslawischer 1994-Dinar", - } YUM{ "YUM", "Neuer Dinar", @@ -1585,18 +1204,6 @@ de{ "YUN", "Jugoslawischer Dinar (konvertibel)", } - YUO{ - "YUO", - "Jugoslawischer Oktober-Dinar", - } - YUR{ - "YUR", - "Jugoslawischer Reformierter Dinar", - } - ZAP{ - "ZAP", - "Südafrikanisches Pfund", - } ZAR{ "ZAR", "Rand", @@ -1605,10 +1212,6 @@ de{ "ZMK", "Kwacha", } - ZMP{ - "ZMP", - "Sambisches Pfund", - } ZRN{ "ZRN", "Neuer Zaire", @@ -1622,7 +1225,7 @@ de{ "Simbabwe Dollar", } } - ExemplarCharacters{"[a-z ä ö ü ß]"} + ExemplarCharacters{"[a ä b-o ö p-s ß t u ü v-z]"} Keys{ calendar{"Kalender"} collation{"Sortierung"} @@ -1631,197 +1234,472 @@ de{ Languages{ aa{"Afar"} ab{"Abchasisch"} + ace{"Aceh-Sprache"} + ach{"Acholi-Sprache"} + ada{"Adangme"} + ady{"Adygai"} ae{"Avestisch"} af{"Afrikaans"} + afa{"Afro-Asiatische Sprachen (Andere)"} + afh{"Afrihili"} ak{"Akan"} + akk{"Akkadisch"} + ale{"Aleutisch"} + alg{"Algonkin-Sprachen"} am{"Amharisch"} an{"Aragonesisch"} + ang{"Altenglisch"} + apa{"Apachen-Sprache"} ar{"Arabisch"} + arc{"Aramäisch"} + arn{"Araukanisch"} + arp{"Arapaho-Sprache"} + art{"Kunstsprachen (Andere)"} + arw{"Arawak-Sprachen"} as{"Assamesisch"} + ast{"Asturianisch"} + ath{"Athapaskische Sprachen"} + aus{"Australische Sprachen"} av{"Awarisch"} + awa{"Awadhi"} ay{"Aymará-Sprache"} az{"Aserbaidschanisch"} ba{"Baschkirisch"} + bad{"Banda-Sprache"} + bai{"Bamileke-Sprache"} + bal{"Belutschisch"} + ban{"Balinesisch"} + bas{"Basaa-Sprache"} + bat{"Baltische Sprachen (Andere)"} be{"Weißrussisch"} + bej{"Bedauye"} + bem{"Bemba-Sprache"} + ber{"Berbersprachen (Andere)"} bg{"Bulgarisch"} bh{"Biharisch"} + bho{"Bhodschpuri"} bi{"Bislama"} + bik{"Bikol-Sprache"} + bin{"Bini-Sprache"} + bla{"Blackfoot-Sprache"} bm{"Bambara-Sprache"} bn{"Bengalisch"} + bnt{"Bantusprachen (Andere)"} bo{"Tibetisch"} br{"Bretonisch"} + bra{"Braj-Bhakha"} bs{"Bosnisch"} + btk{"Batak (Indonesien)"} + bua{"Burjatisch"} + bug{"Buginesisch"} + byn{"Blin"} ca{"Katalanisch"} + cad{"Caddo"} + cai{"Indianersprachen, Zentralamerika (Andere)"} + car{"Karibische Sprachen"} + cau{"Kaukasische Sprachen (Andere)"} ce{"Tschetschenisch"} + ceb{"Cebuano"} + cel{"Keltische Sprachen (Andere)"} ch{"Chamorro-Sprache"} + chb{"Chibcha-Sprachen"} + chg{"Tschagataisch"} + chk{"Trukesisch"} + chm{"Tscheremissisch"} + chn{"Chinook"} + cho{"Choctaw"} + chp{"Chipewyan"} chr{"Cherokee"} + chy{"Cheyenne"} + cmc{"Cham-Sprachen"} co{"Korsisch"} + cop{"Koptisch"} + cpe{"Kreolisch-Englisch (Andere)"} + cpf{"Kreolisch-Französisch (Andere)"} + cpp{"Kreolisch-Portugiesisch (Andere)"} cr{"Cree"} + crh{"Krimtatarisch"} + crp{"Kreolische Sprachen"} cs{"Tschechisch"} + csb{"Kaschubisch"} cu{"Kirchenslawisch"} + cus{"Kuschitische Sprachen (Andere)"} cv{"Tschuwaschisch"} cy{"Kymrisch"} da{"Dänisch"} + dak{"Dakota-Sprache"} + dar{"Darginisch"} + day{"Dajak"} de{"Deutsch"} + del{"Delaware-Sprache"} + den{"Slave (Athapaskische Sprachen)"} + dgr{"Dogrib"} + din{"Dinka-Sprache"} + doi{"Dogri"} + dra{"Drawidische Sprachen (Andere)"} + dsb{"Niedersorbisch"} + dua{"Duala"} + dum{"Mittelniederländisch"} dv{"Maledivisch"} + dyu{"Dyula-Sprache"} dz{"Bhutanisch"} ee{"Ewe-Sprache"} + efi{"Efik"} + egy{"Ägyptisch"} + eka{"Ekajuk"} el{"Griechisch"} + elx{"Elamisch"} en{"Englisch"} enm{"Mittelenglisch"} eo{"Esperanto"} es{"Spanisch"} et{"Estnisch"} eu{"Baskisch"} + ewo{"Ewondo"} fa{"Persisch"} + fan{"Pangwe-Sprache"} + fat{"Fanti-Sprache"} ff{"Ful"} fi{"Finnisch"} + fil{"Filipino"} + fiu{"Finnougrische Sprachen (Andere)"} fj{"Fidschianisch"} fo{"Färöisch"} + fon{"Fon-Sprache"} fr{"Französisch"} + frm{"Mittelfranzösisch"} + fro{"Altfranzösisch"} + fur{"Friulisch"} fy{"Friesisch"} ga{"Irisch"} + gaa{"Ga-Sprache"} + gay{"Gayo"} + gba{"Gbaya-Sprache"} gd{"Schottisch-Gälisch"} - gez{"Altäthiopisch"} + gem{"Germanische Sprachen (Andere)"} + gez{"Geez"} + gil{"Gilbertesisch"} gl{"Galizisch"} + gmh{"Mittelhochdeutsch"} gn{"Guarani"} + goh{"Althochdeutsch"} + gon{"Gondi-Sprache"} + gor{"Mongondou"} + got{"Gotisch"} + grb{"Grebo-Sprache"} + grc{"Griechisch (bis 1453)"} gu{"Gujarati"} gv{"Manx"} + gwi{"Kutchin-Sprache"} ha{"Hausa"} + hai{"Haida-Sprache"} haw{"Hawaiianisch"} he{"Hebräisch"} hi{"Hindi"} + hil{"Hiligaynon-Sprache"} + him{"Himachali"} + hit{"Hethitisch"} + hmn{"Miao-Sprachen"} ho{"Hiri-Motu"} hr{"Kroatisch"} + hsb{"Obersorbisch"} ht{"Kreolisch"} hu{"Ungarisch"} + hup{"Hupa"} hy{"Armenisch"} hz{"Herero-Sprache"} ia{"Interlingua"} + iba{"Iban"} id{"Indonesisch"} ie{"Interlingue"} ig{"Igbo-Sprache"} + ii{"Sichuan Yi"} + ijo{"Ijo-Sprache"} ik{"Inupiak"} + ilo{"Ilokano-Sprache"} + inc{"Indoarische Sprachen (Andere)"} + ine{"Indogermanische Sprachen (Andere)"} + inh{"Ingush"} + io{"Ido-Sprache"} + ira{"Iranische Sprachen (Andere)"} + iro{"Irokesische Sprachen"} is{"Isländisch"} it{"Italienisch"} iu{"Inukitut"} ja{"Japanisch"} + jbo{"Lojban"} + jpr{"Jüdisch-Persisch"} + jrb{"Jüdisch-Arabisch"} jv{"Javanisch"} ka{"Georgisch"} + kaa{"Karakalpakisch"} + kab{"Kabylisch"} + kac{"Kachin-Sprache"} + kam{"Kamba"} + kar{"Karenisch"} + kaw{"Kawi"} + kbd{"Kabardinisch"} kg{"Kongo"} + kha{"Khasi-Sprache"} + khi{"Khoisan-Sprachen (Andere)"} + kho{"Sakisch"} ki{"Kikuyu-Sprache"} kj{"Kwanyama"} kk{"Kasachisch"} kl{"Grönländisch"} km{"Kambodschanisch"} + kmb{"Kimbundu-Sprache"} kn{"Kannada"} ko{"Koreanisch"} kok{"Konkani"} + kos{"Kosraeanisch"} + kpe{"Kpelle-Sprache"} kr{"Kanuri-Sprache"} + krc{"Karatschaiisch-Balkarisch"} + kro{"Kru-Sprachen"} + kru{"Oraon-Sprache"} ks{"Kaschmirisch"} ku{"Kurdisch"} + kum{"Kumükisch"} + kut{"Kutenai-Sprache"} kv{"Komi-Sprache"} kw{"Kornisch"} ky{"Kirgisisch"} la{"Latein"} + lad{"Judenspanisch"} + lah{"Lahnda"} + lam{"Lamba-Sprache"} lb{"Luxemburgisch"} + lez{"Lesgisch"} lg{"Ganda-Sprache"} li{"Limburgisch"} ln{"Lingala"} lo{"Laotisch"} + lol{"Mongo"} + loz{"Rotse-Sprache"} lt{"Litauisch"} lu{"Luba"} + lua{"Luba-Lulua"} + lui{"Luiseno-Sprache"} + lun{"Lunda-Sprache"} + luo{"Luo-Sprache"} + lus{"Lushai-Sprache"} lv{"Lettisch"} + mad{"Maduresisch"} + mag{"Khotta"} + mai{"Maithili"} + mak{"Makassarisch"} + man{"Manding-Sprache"} + map{"Austronesische Sprachen (Andere)"} + mas{"Massai-Sprache"} + mdf{"Moksha"} + mdr{"Mandaresisch"} + men{"Mende-Sprache"} mg{"Madagassisch"} + mga{"Mittelirisch"} mh{"Marschallesisch"} mi{"Maori"} + mic{"Micmac-Sprache"} + min{"Minangkabau-Sprache"} + mis{"Verschiedene Sprachen"} mk{"Mazedonisch"} + mkh{"Mon-Khmer-Sprachen (Andere)"} ml{"Malayalam"} mn{"Mongolisch"} + mnc{"Mandschurisch"} + mni{"Meithei-Sprache"} + mno{"Manobo-Sprache"} mo{"Moldauisch"} + moh{"Mohawk-Sprache"} + mos{"Mossi-Sprache"} mr{"Marathi"} ms{"Malaiisch"} mt{"Maltesisch"} + mul{"Polyglott"} + mun{"Munda-Sprachen"} + mus{"Muskogee-Sprachen"} + mwr{"Marwari"} my{"Birmanisch"} + myn{"Maya-Sprachen"} + myv{"Erzya"} na{"Nauruisch"} + nah{"Nahuatl"} + nai{"Indianersprachen, Nordamerika (Andere)"} + nap{"Neapolitanisch"} nb{"Norwegisch BokmÃ¥l"} nd{"Ndebele-Sprache (Nord)"} + nds{"Niederdeutsch"} ne{"Nepalesisch"} + new{"Newari"} ng{"Ndonga"} + nia{"Nias-Sprache"} + nic{"Nigerkordofanische Sprachen (Andere)"} + niu{"Niue-Sprache"} nl{"Niederländisch"} nn{"Norwegisch Nynorsk"} no{"Norwegisch"} + nog{"Nogai"} + non{"Altnordisch"} nr{"Ndebele-Sprache (Süd)"} + nso{"Sotho-Sprache (Nord)"} + nub{"Nubische Sprachen"} nv{"Navajo-Sprache"} ny{"Chewa-Sprache"} + nym{"Nyamwezi-Sprache"} + nyn{"Nyankole"} + nyo{"Nyoro"} + nzi{"Nzima"} oc{"Okzitanisch"} oj{"Ojibwa-Sprache"} om{"Oromo"} or{"Orija"} os{"Ossetisch"} + osa{"Osage-Sprache"} + ota{"Osmanisch"} + oto{"Otomangue-Sprachen"} pa{"Pandschabisch"} + paa{"Papuasprachen (Andere)"} + pag{"Pangasinan-Sprache"} + pal{"Mittelpersisch"} + pam{"Pampanggan-Sprache"} + pap{"Papiamento"} + pau{"Palau"} + peo{"Altpersisch"} + phi{"Philippinen-Austronesisch (Andere)"} + phn{"Phönikisch"} pi{"Pali"} pl{"Polnisch"} + pon{"Ponapeanisch"} + pra{"Prakrit"} + pro{"Altprovenzalisch"} ps{"Afghanisch (Paschtu)"} pt{"Portugiesisch"} qu{"Quechua"} + raj{"Rajasthani"} + rap{"Osterinsel-Sprache"} + rar{"Rarotonganisch"} rm{"Rätoromanisch"} rn{"Rundi-Sprache"} ro{"Rumänisch"} + roa{"Romanische Sprachen (Andere)"} + rom{"Zigeunersprache"} ru{"Russisch"} - rw{"Rwanda-Sprache"} + rw{"Ruandisch"} sa{"Sanskrit"} + sad{"Sandawe-Sprache"} + sah{"Jakutisch"} + sai{"Indianersprachen, Südamerika (Andere)"} + sal{"Salish-Sprache"} + sam{"Samaritanisch"} + sas{"Sasak"} + sat{"Santali"} sc{"Sardisch"} + sco{"Schottisch"} sd{"Sindhi"} se{"Nord-Samisch"} + sel{"Selkupisch"} + sem{"Semitische Sprachen (Andere)"} sg{"Sango"} + sga{"Altirisch"} + sgn{"Gebärdensprache"} sh{"Serbo-Kroatisch"} + shn{"Schan-Sprache"} si{"Singhalesisch"} sid{"Sidamo"} + sio{"Sioux-Sprachen"} + sit{"Sinotibetische Sprachen (Andere)"} sk{"Slowakisch"} sl{"Slowenisch"} + sla{"Slawische Sprachen (Andere)"} sm{"Samoanisch"} + sma{"Süd-Samisch"} + smi{"Lappisch"} + smj{"Lule-Lappisch"} + smn{"Inari-Lappisch"} + sms{"Skolt-Lappisch"} sn{"Shona"} + snk{"Soninke-Sprache"} so{"Somali"} + sog{"Sogdisch"} + son{"Songhai-Sprache"} sq{"Albanisch"} sr{"Serbisch"} + srr{"Serer-Sprache"} ss{"Swazi"} + ssa{"Nilosaharanische Sprachen (Andere)"} st{"Süd-Sotho-Sprache"} su{"Sudanesisch"} + suk{"Sukuma-Sprache"} + sus{"Susu"} + sux{"Sumerisch"} sv{"Schwedisch"} sw{"Suaheli"} syr{"Syrisch"} ta{"Tamilisch"} + tai{"Thaisprachen (Andere)"} te{"Telugu"} + tem{"Temne"} + ter{"Tereno-Sprache"} + tet{"Tetum-Sprache"} tg{"Tadschikisch"} th{"Thai"} ti{"Tigrinja"} tig{"Tigre"} + tiv{"Tiv-Sprache"} tk{"Turkmenisch"} + tkl{"Tokelauanisch"} tl{"Tagalog"} + tli{"Tlingit-Sprache"} + tmh{"Tamaseq"} tn{"Tswana-Sprache"} to{"Tongaisch"} + tog{"Tonga (Nyasa)"} + tpi{"Neumelanesisch"} tr{"Türkisch"} ts{"Tsonga"} + tsi{"Tsimshian-Sprache"} tt{"Tatarisch"} + tum{"Tumbuka-Sprache"} + tup{"Tupi-Sprachen"} + tut{"Altaische Sprachen (Andere)"} + tvl{"Elliceanisch"} tw{"Twi"} ty{"Tahitisch"} + tyv{"Tuwinisch"} + udm{"Udmurtisch"} ug{"Uigurisch"} + uga{"Ugaritisch"} uk{"Ukrainisch"} + umb{"Mbundu-Sprache"} + und{"Sprache nicht ermittelt"} ur{"Urdu"} uz{"Usbekisch"} + vai{"Vai-Sprache"} ve{"Venda-Sprache"} vi{"Vietnamesisch"} vo{"Volapük"} + vot{"Wotisch"} wa{"Wallonisch"} + wak{"Wakashanisch"} + wal{"Walamo-Sprache"} + war{"Waray"} + was{"Washo-Sprache"} + wen{"Sorbisch"} wo{"Wolof"} + xal{"Kalmückisch"} xh{"Xhosa"} + yao{"Yao-Sprache"} + yap{"Yapesisch"} yi{"Jiddisch"} yo{"Joruba"} + ypk{"Yupik-Sprache"} za{"Zhuang"} zap{"Zapotekisch"} + zen{"Zenaga"} zh{"Chinesisch"} + znd{"Zande-Sprache"} zu{"Zulu"} + zun{"Zuni-Sprache"} } LocaleScript{ "Latn", @@ -1837,9 +1715,15 @@ de{ "E", "‰", "∞", - "�", + "NaN", "+", } + NumberPatterns{ + "#,##0.###", + "¤ #,##0.00", + "#,##0%", + "#E0", + } Scripts{ Arab{"Arabisch"} Armn{"Armenisch"} @@ -1911,17 +1795,13 @@ de{ POSIX{"Posix"} REVISED{"Revidiert"} } - Version{"1.3"} + Version{"1.77"} calendar{ gregorian{ AmPmMarkers{ "vorm.", "nachm.", } - DateTimeElements:intvector{ - 2, - 4, - } DateTimePatterns{ "H:mm' Uhr 'z", "HH:mm:ss z", @@ -1944,15 +1824,6 @@ de{ "Fr", "Sa", } - narrow{ - "S", - "M", - "D", - "M", - "D", - "F", - "S", - } wide{ "Sonntag", "Montag", @@ -1963,12 +1834,56 @@ de{ "Samstag", } } + stand-alone{ + narrow{ + "S", + "M", + "D", + "M", + "D", + "F", + "S", + } + } } eras{ abbreviated{ "v. Chr.", "n. Chr.", } + wide{ + "v. Chr.", + "n. Chr.", + } + } + fields{ + day{ + dn{"Tag"} + } + dayperiod{ + dn{"Tageshälfte"} + } + era{ + dn{"Epoche"} + } + hour{ + dn{"Stunde"} + } + month{ + dn{"Monat"} + } + second{ + dn{"Sekunde"} + } + week{ + dn{"Woche"} + } + weekday{ + dn{"Wochentag"} + } + year{ + dn{"Jahr"} + } } monthNames{ format{ @@ -1986,6 +1901,22 @@ de{ "Nov", "Dez", } + wide{ + "Januar", + "Februar", + "März", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember", + } + } + stand-alone{ narrow{ "J", "F", @@ -2000,33 +1931,97 @@ de{ "N", "D", } + } + } + quarters{ + format{ wide{ - "Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember", + "1. Quartal", + "2. Quartal", + "3. Quartal", + "4. Quartal", } } } } } - localPatternChars{"GjMtkHmsSEDFwWahKzJeugAZ"} + delimiters{ + alternateQuotationEnd{"“"} + alternateQuotationStart{"„"} + quotationEnd{"‘"} + quotationStart{"‚"} + } + localPatternChars{"GjMtkHmsSEDFwWahKzJeugAZvcL"} zoneStrings{ - { - "Europe/Berlin", - "Mitteleuropäische Zeit", - "MEZ", - "Mitteleuropäische Sommerzeit", - "MESZ", - "Berlin", + "America:Mexico_City"{ + ec{"Mexiko-Stadt"} + } + "America:St_Johns"{ + ec{"St. John's"} + } + "Antarctica:South_Pole"{ + ec{"Südpol"} + } + "Antarctica:Vostok"{ + ec{"Wostok"} + } + "Asia:Kamchatka"{ + ec{"Kamtschatka"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasnojarsk"} + } + "Asia:Novosibirsk"{ + ec{"Nowosibirsk"} + } + "Asia:Sakhalin"{ + ec{"Sachalin"} + } + "Asia:Tashkent"{ + ec{"Taschkent"} + } + "Asia:Ulaanbaatar"{ + ec{"Ulan-Bator"} + } + "Asia:Vladivostok"{ + ec{"Wladiwostok"} + } + "Asia:Yakutsk"{ + ec{"Jakutsk"} + } + "Asia:Yekaterinburg"{ + ec{"Jekaterinburg"} + } + "Atlantic:Azores"{ + ec{"Azoren"} + } + "Atlantic:Canary"{ + ec{"Kanaren"} + } + "Europe:Berlin"{ + ec{"Berlin"} + ld{"Mitteleuropäische Sommerzeit"} + ls{"Mitteleuropäische Zeit"} + sd{"MESZ"} + ss{"MEZ"} + } + "Europe:Kiev"{ + ec{"Kiew"} + } + "Europe:Lisbon"{ + ec{"Lissabon"} + } + "Europe:Moscow"{ + ec{"Moskau"} + } + "Europe:Uzhgorod"{ + ec{"Uschgorod"} + } + "Europe:Zaporozhye"{ + ec{"Saporischja"} + } + "Pacific:Easter"{ + ec{"Osterinsel"} } } } diff --git a/icuSources/data/locales/de_AT.txt b/icuSources/data/locales/de_AT.txt index 58987c59..6ed08926 100644 --- a/icuSources/data/locales/de_AT.txt +++ b/icuSources/data/locales/de_AT.txt @@ -1,15 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/de_AT.xml +// * Source File:/common/main/de_AT.xml // * // *************************************************************************** de_AT{ - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } DateTimePatterns{ "HH:mm' Uhr 'z", "HH:mm:ss z", @@ -25,17 +29,17 @@ de_AT{ format{ abbreviated{ "Jän", - "Feb", + "Februar", "Mär", "Apr", "Mai", "Jun", "Jul", - "Aug", - "Sep", - "Okt", - "Nov", - "Dez", + "August", + "September", + "Oktober", + "November", + "Dezember", } wide{ "Jänner", diff --git a/icuSources/data/locales/de_BE.txt b/icuSources/data/locales/de_BE.txt index 9b391cbd..5215123f 100644 --- a/icuSources/data/locales/de_BE.txt +++ b/icuSources/data/locales/de_BE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/de_BE.xml +// * Source File:/common/main/de_BE.xml // * // *************************************************************************** de_BE{ @@ -14,14 +14,18 @@ de_BE{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } DateTimePatterns{ "HH 'h' mm 'min' ss 's' z", "HH:mm:ss z", @@ -50,17 +54,17 @@ de_BE{ format{ abbreviated{ "Jan", - "Feb", + "Februar", "Mär", "Apr", "Mai", "Jun", "Jul", - "Aug", - "Sep", - "Okt", - "Nov", - "Dez", + "August", + "September", + "Oktober", + "November", + "Dezember", } } } diff --git a/icuSources/data/locales/de_CH.txt b/icuSources/data/locales/de_CH.txt index 4b644159..81e4696a 100644 --- a/icuSources/data/locales/de_CH.txt +++ b/icuSources/data/locales/de_CH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/de_CH.xml +// * Source File:/common/main/de_CH.xml // * // *************************************************************************** de_CH{ @@ -31,14 +31,33 @@ de_CH{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤ #,##0.00;¤-#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.45"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + DateTimePatterns{ + "H:mm' Uhr 'z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, d. MMMM yyyy", + "d. MMMM yyyy", + "dd.MM.yyyy", + "dd.MM.yy", + "{1} {0}", + } + } + } } diff --git a/icuSources/data/locales/de_DE.txt b/icuSources/data/locales/de_DE.txt index 5c73edd7..94dad181 100644 --- a/icuSources/data/locales/de_DE.txt +++ b/icuSources/data/locales/de_DE.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/de_DE.xml +// * Source File:/common/main/de_DE.xml // * // *************************************************************************** de_DE{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/de_LU.txt b/icuSources/data/locales/de_LU.txt index 4daa2c1f..111569af 100644 --- a/icuSources/data/locales/de_LU.txt +++ b/icuSources/data/locales/de_LU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/de_LU.xml +// * Source File:/common/main/de_LU.xml // * // *************************************************************************** de_LU{ @@ -12,17 +12,39 @@ de_LU{ "F", "Luxemburgischer Franc", { - "#,##0 ¤;-#,##0 ¤", + /** + * Duplicated from NumberPatterns resource + */ + "#,##0.00 ¤", ".", ",", } } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.43"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + DateTimePatterns{ + "H:mm' Uhr 'z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, d. MMMM yyyy", + "d. MMMM yyyy", + "dd.MM.yyyy", + "dd.MM.yy", + "{1} {0}", + } + } + } } diff --git a/icuSources/data/locales/el.txt b/icuSources/data/locales/el.txt index 08bdeda2..c31cbaf3 100644 --- a/icuSources/data/locales/el.txt +++ b/icuSources/data/locales/el.txt @@ -1,2001 +1,1668 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/el.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/el.xml - */ -el{ - Countries{ - AD{"Ανδόρα"} - AE{"Ηνωμένα Αραβικά Εμιράτα"} - AF{"Αφγανιστάν"} - AG{"Αντίγκουα και Μπαρμπούντα"} - AI{"Ανγκουίλα"} - AL{"Αλβανία"} - AM{"Αρμενία"} - AN{"Ολλανδικές Αντίλλες"} - AO{"Ανγκόλα"} - AQ{"Ανταρκτική"} - AR{"Αργεντινή"} - AS{"Αμερικανική Σαμόα"} - AT{"Αυστρία"} - AU{"Αυστραλία"} - AW{"Αρούμπα"} - AZ{"Αζερμπαϊτζάν"} - BA{"Βοσνία - Ερζεγοβίνη"} - BB{"Μπαρμπάντος"} - BD{"Μπανγκλαντές"} - BE{"Βέλγιο"} - BF{"Μπουρκίνα Φάσο"} - BG{"Βουλγαρία"} - BH{"Μπαχρέιν"} - BI{"Μπουρούντι"} - BJ{"Μπένιν"} - BM{"Βερμούδες"} - BN{"Μπρουνέι Νταρουσαλάμ"} - BO{"Βολιβία"} - BR{"Βραζιλία"} - BS{"Μπαχάμες"} - BT{"Μπουτάν"} - BV{"Νήσος Μπουβέ"} - BW{"Μποτσουάνα"} - BY{"Λευκορωσία"} - BZ{"Μπελίζ"} - CA{"Καναδάς"} - CC{"Νήσοι Κόκος (Κήλινγκ)"} - CD{"Κονγκό, Λαϊκή Δημοκρατία του"} - CF{"Κεντροαφρικανική Δημοκρατία"} - CG{"Κονγκό"} - CH{"Ελβετία"} - CI{"Ακτή Ελεφαντόδοντος"} - CK{"Νήσοι Κουκ"} - CL{"Χιλή"} - CM{"Καμερούν"} - CN{"Κίνα"} - CO{"Κολομβία"} - CR{"Κόστα Ρίκα"} - CU{"Κούβα"} - CV{"Νήσοι Πράσινου Ακρωτηρίου"} - CX{"Νήσος Χριστουγέννων"} - CY{"Κύπρος"} - CZ{"Τσεχία"} - DE{"Γερμανία"} - DJ{"Τζιμπουτί"} - DK{"Δανία"} - DM{"Ντομίνικα"} - DO{"Δομινικανή Δημοκρατία"} - DZ{"Αλγερία"} - EC{"Ισημερινός"} - EE{"Εσθονία"} - EG{"Αίγυπτος"} - EH{"Δυτική Σαχάρα"} - ER{"Ερυθραία"} - ES{"Ισπανία"} - ET{"Αιθιοπία"} - FI{"Φινλανδία"} - FJ{"Φίτζι"} - FK{"Νήσοι Φώκλαντ"} - FM{"Μικρονησία, Ομόσπονδες Πολιτείες της"} - FO{"Νήσοι Φερόες"} - FR{"Γαλλία"} - GA{"Γκαμπόν"} - GB{"Ηνωμένο Βασίλειο"} - GD{"Γρενάδα"} - GE{"Γεωργία"} - GF{"Γαλλική Γουιάνα"} - GH{"Γκάνα"} - GI{"Γιβραλτάρ"} - GL{"Γροιλανδία"} - GM{"Γκάμπια"} - GN{"Γουινέα"} - GP{"Γουαδελούπη"} - GQ{"Ισημερινή Γουινέα"} - GR{"Ελλάδα"} - GS{"Νότια Γεωργία και Νήσοι Νότιες Σάντουιτς"} - GT{"Γουατεμάλα"} - GU{"Γκουάμ"} - GW{"Γουινέα-Μπισάου"} - GY{"Γουιάνα"} - HK{"Χονγκ Κονγκ, Ειδική Διοικητική Περιφέρεια της Κίνας"} - HM{"Νήσοι Χερντ και Μακντόναλντ"} - HN{"Ονδούρα"} - HR{"Κροατία"} - HT{"Αϊτή"} - HU{"Ουγγαρία"} - ID{"Ινδονησία"} - IE{"Ιρλανδία"} - IL{"Ισραήλ"} - IN{"Ινδία"} - IO{"Βρετανικά Έδάφη Ινδικού Ωκεανού"} - IQ{"Ιράκ"} - IR{"Ιράν, Ισλαμική Δημοκρατία του"} - IS{"Ισλανδία"} - IT{"Ιταλία"} - JM{"Τζαμάικα"} - JO{"Ιορδανία"} - JP{"Ιαπωνία"} - KE{"Κένυα"} - KG{"Κιργιζία"} - KH{"Καμπότζη"} - KI{"Κιριμπάτι"} - KM{"Κομόρες"} - KN{"Σαιντ Κιτς και Νέβις"} - KP{"Κορέα, Βόρεια"} - KR{"Κορέα, Νότια"} - KW{"Κουβέιτ"} - KY{"Νήσοι Κέιμαν"} - KZ{"Καζακστάν"} - LA{"Λατινική Αμερική"} - LB{"Λίβανος"} - LC{"Αγία Λουκία"} - LI{"Λιχτενστάιν"} - LK{"Σρι Λάνκα"} - LR{"Λιβερία"} - LS{"Λεσότο"} - LT{"Λιθουανία"} - LU{"Λουξεμβούργο"} - LV{"Λετονία"} - MA{"Μαρόκο"} - MC{"Μονακό"} - MD{"Μολδαβία, Δημοκρατία της"} - MG{"Μαδαγασκάρη"} - MH{"Νήσοι Μάρσαλ"} - MK{"ΠΓΔ Μακεδονίας"} - ML{"Μάλι"} - MM{"Μιανμάρ"} - MN{"Μογγολία"} - MO{"Μακάο, Ειδική Διοικητική Περιφέρεια της Κίνας"} - MP{"Νήσοι Βόρειες Μαριάνες"} - MQ{"Μαρτινίκα"} - MR{"Μαυριτανία"} - MS{"Μονσεράτ"} - MT{"Μάλτα"} - MU{"Μαυρίκιος"} - MV{"Μαλδίβες"} - MW{"Μαλάουι"} - MX{"Μεξικό"} - MY{"Μαλαισία"} - MZ{"Μοζαμβίκη"} - NA{"Ναμίμπια"} - NC{"Νέα Καληδονία"} - NE{"Νίγηρ"} - NF{"Νήσος Νόρφολκ"} - NG{"Νιγηρία"} - NI{"Νικαράγουα"} - NL{"Ολλανδία"} - NO{"Νορβηγία"} - NP{"Νεπάλ"} - NR{"Ναούρου"} - NU{"Νιούε"} - NZ{"Νέα Ζηλανδία"} - OM{"Ομάν"} - PA{"Παναμάς"} - PE{"Περού"} - PF{"Γαλλική Πολυνησία"} - PG{"Παπούα - Νέα Γουινέα"} - PH{"Φιλιππίνες"} - PK{"Πακιστάν"} - PL{"Πολωνία"} - PM{"Σαιντ Πιέρ και Μικελόν"} - PN{"Πίτκερν"} - PR{"Πουέρτο Ρίκο"} - PS{"Παλαιστινιακά Εδάφη"} - PT{"Πορτογαλία"} - PW{"Παλάου"} - PY{"Παραγουάη"} - QA{"Κατάρ"} - RE{"Ρεϋνιόν"} - RO{"Ρουμανία"} - RU{"Ρωσία"} - RW{"Ρουάντα"} - SA{"Σαουδική Αραβία"} - SB{"Νήσοι Σολομώντος"} - SC{"Σεϋχέλλες"} - SD{"Σουδάν"} - SE{"Σουηδία"} - SG{"Σιγκαπούρη"} - SH{"Αγία Ελένη"} - SI{"Σλοβενία"} - SJ{"Νήσοι Σβάλμπαρ και Γιαν Μαγιέν"} - SK{"Σλοβακία"} - SL{"Σιέρα Λεόνε"} - SM{"Άγιος Μαρίνος"} - SN{"Σενεγάλη"} - SO{"Σομαλία"} - SP{"Σερβία"} - SR{"Σουρινάμ"} - ST{"Σάο Τομέ και Πρίνσιπε"} - SV{"Ελ Σαλβαδόρ"} - SY{"Συρία, Αραβική Δημοκρατία της"} - SZ{"Σουαζιλάνδη"} - TC{"Νήσοι Τερκς και Κάικος"} - TD{"Τσαντ"} - TF{"Γαλλικά Νότια Εδάφη"} - TG{"Τόγκο"} - TH{"Ταϊλάνδη"} - TJ{"Τατζικιστάν"} - TK{"Τοκελάου"} - TL{"Ανατολικό Τιμόρ"} - TM{"Τουρκμενιστάν"} - TN{"Τυνησία"} - TO{"Τόνγκα"} - TR{"Τουρκία"} - TT{"Τρινιδάδ και Τομπάγκο"} - TV{"Τουβαλού"} - TW{"Ταϊβάν"} - TZ{"Τανζανία"} - UA{"Ουκρανία"} - UG{"Ουγκάντα"} - UM{"Απομακρυσμένες Νησίδες των Ηνωμένων Πολιτειών"} - US{"Ηνωμένες Πολιτείες"} - UY{"Ουρουγουάη"} - UZ{"Ουζμπεκιστάν"} - VA{"Αγία Έδρα (Βατικανό)"} - VC{"Άγιος Βικέντιος και Γρεναδίνες"} - VE{"Βενεζουέλα"} - VG{"Βρετανικές Παρθένοι Νήσοι"} - VI{"Αμερικανικές Παρθένοι Νήσοι"} - VN{"Βιετνάμ"} - VU{"Βανουάτου"} - WF{"Νήσοι Ουαλλίς και Φουτουνά"} - WS{"Σαμόα"} - YE{"Υεμένη"} - YT{"Μαγιότ"} - YU{"Γιουγκοσλαβία"} - ZA{"Νότια Αφρική"} - ZM{"Ζάμπια"} - ZW{"Ζιμπάμπουε"} - } - Currencies{ - ADD{ - "ADD", - "Δηνάριο Ανδόρας", - } - ADP{ - "ADP", - "Πεσέτα Ανδόρας", - } - AED{ - "AED", - "Ντιράμ Ηνωμένων Αραβικών Εμιράτων", - } - AIF{ - "AIF", - "Φράγκο Affars και Issas", - } - ALK{ - "ALK", - "Λεκ Αλβανίας (1946-1961)", - } - ALL{ - "lek", - "Λεκ Αλβανίας", - } - ALV{ - "ALV", - "Λεκ Valute Αλβανίας", - } - ALX{ - "ALX", - "Αλβανικά Πιστοποιητικά Ξένου Συναλλάγματος σε Δολάρια", - } - AMD{ - "dram", - "Dram Αρμενίας", - } - ANG{ - "NA f.", - "Γκίλντα Ολλανδικών Αντιλλών", - } - AOA{ - "AOA", - "Kwanza Ανγκόλας", - } - AOK{ - "AOK", - "Kwanza Ανγκόλας (1977-1990)", - } - AON{ - "AON", - "Νέα Kwanza Ανγκόλας (1990-2000)", - } - AOR{ - "AOR", - "Kwanza Reajustado Ανγκόλας (1995-1999)", - } - AOS{ - "AOS", - "Εσκούδο Ανγκόλας", - } - ARA{ - "ARA", - "Austral Αργεντινής", - } - ARM{ - "ARM", - "Εθνικό Νόμισμα Πέσο Αργεντινής", - } - ARP{ - "ARP", - "Πέσο Αργεντινής (1983-1985)", - } - ARS{ - "Arg$", - "Πέσο Αργεντινής", - } - ATS{ - "ATS", - "Σελίνι Αυστρίας", - } - AUD{ - "$A", - "Δολάριο Αυστραλίας", - } - AUP{ - "AUP", - "Λίρα Αυστραλίας", - } - AWG{ - "AWG", - "Γκίλντα Αρούμπα", - } - AZM{ - "AZM", - "Μανάτ Αζερμπαϊτζάν", - } - BAD{ - "BAD", - "Δηνάριο Βοσνίας-Ερζεγοβίνης", - } - BAM{ - "KM", - "Μάρκο Βοσνίας-Ερζεγοβίνης", - } - BAN{ - "BAN", - "Νέο Δηνάριο Βοσνίας-Ερζεγοβίνης", - } - BBD{ - "BDS$", - "Δολάριο Μπαρμπάντος", - } - BDT{ - "Tk", - "Τάκα Μπαγκλαντές", - } - BEC{ - "BEC", - "Φράγκο Βελγίου (μετατρέψιμο)", - } - BEF{ - "BF", - "Φράγκο Βελγίου", - } - BEL{ - "BEL", - "Φράγκο Βελγίου (οικονομικό)", - } - BGL{ - "lev", - "Μεταλλικό Λεβ Βουλγαρίας", - } - BGM{ - "BGM", - "Σοσιαλιστικό Λεβ Βουλγαρίας", - } - BGN{ - "BGN", - "Νέο Λεβ Βουλγαρίας", - } - BGO{ - "BGO", - "Λεβ Βουλγαρίας (1879-1952)", - } - BGX{ - "BGX", - "Πιστοποιητικά Ξένου Συναλλάγματος σε Λεβ", - } - BHD{ - "BD", - "Δηνάριο Bahraini", - } - BIF{ - "Fbu", - "Φράγκο Burundi", - } - BMD{ - "Ber$", - "Δολάριο Βερμούδων", - } - BMP{ - "BMP", - "Λίρα Βερμούδων", - } - BND{ - "BND", - "Δολάριο Brunei", - } - BOP{ - "BOP", - "Πέσο Βολιβίας", - } - BOV{ - "BOV", - "Mvdol Βολιβίας", - } - BRB{ - "BRB", - "Νέο Cruzeiro Βραζιλίας (1967-1986)", - } - BRC{ - "BRC", - "Cruzado Βραζιλίας", - } - BRE{ - "BRE", - "Cruzeiro Βραζιλίας (1990-1993)", - } - BRL{ - "R$", - "Real Βραζιλίας", - } - BRN{ - "BRN", - "Νέο Cruzado Βραζιλίας", - } - BRR{ - "BRR", - "Cruzeiro Βραζιλίας", - } - BRZ{ - "BRZ", - "Cruzeiro Βραζιλίας (1942-1967)", - } - BSD{ - "BSD", - "Δολάριο Μπαχάμες", - } - BSP{ - "BSP", - "Λίρα Μπαχάμες", - } - BTN{ - "Nu", - "Ngultrum Μπουτάν", - } - BTR{ - "BTR", - "Ρούπια Μπουτάν", - } - BUK{ - "BUK", - "Kyat Βιρμανίας", - } - BUR{ - "BUR", - "Ρούπια Βιρμανίας", - } - BWP{ - "BWP", - "Pula Μποτσουάνα", - } - BYB{ - "BYB", - "Νέο Ρούβλι Λευκορωσίας (1994-1999)", - } - BYL{ - "BYL", - "Ρούβλι Λευκορωσίας (1992-1994)", - } - BYR{ - "Rbl", - "Ρούβλι Λευκορωσίας", - } - BZD{ - "BZ$", - "Δολάριο Belize", - } - BZH{ - "BZH", - "Δολάριο Βρετανικής Ονδούρας", - } - CAD{ - "Can$", - "Δολάριο Καναδά", - } - CDF{ - "CDF", - "Φράγκο Congolais Κονγκό", - } - CDG{ - "CDG", - "Φράγκο Δημοκρατίας Κονγκό", - } - CDL{ - "CDL", - "Congolese Ζαΐρ", - } - CFF{ - "CFF", - "Φράγκο Κεντρικής Αφρικανικής Δημοκρατίας CFA", - } - CHF{ - "SwF", - "Φράγκο Ελβετίας", - } - CKD{ - "CKD", - "Δολάριο Νήσων Κουκ", - } - CLC{ - "CLC", - "Condor Χιλής", - } - CLE{ - "CLE", - "Εσκούδο Χιλής", - } - CLF{ - "CLF", - "Unidades de Fomento Χιλής", - } - CLP{ - "Ch$", - "Πέσο Χιλής", - } - CMF{ - "CMF", - "Φράγκο Καμερούν CFA", - } - CNP{ - "CNP", - "Jen Min Piao Yuan Κίνας", - } - CNX{ - "CNX", - "Πιστοποιητικά Ξένου Συναλλάγματος σε Δολάρια ΗΠΑ, Κίνας", - } - CNY{ - "Y", - "Yuan Renminbi Κίνας", - } - COB{ - "COB", - "Χάρτινο Πέσο Κολομβίας", - } - COF{ - "COF", - "Φράγκο Κονγκό CFA", - } - COP{ - "Col$", - "Πέσο Κολομβίας", - } - CRC{ - "C", - "Colon Κόστα Ρίκα", - } - CSC{ - "CSC", - "Κορόνα Τσεχοσλοβακίας", - } - CSK{ - "CSK", - "Σκληρή Κορόνα Τσεχοσλοβακίας", - } - CUP{ - "CUP", - "Πέσο Κούβας", - } - CUX{ - "CUX", - "Πιστοποιητικά Ξένου Συναλλάγματος Κούβας", - } - CVE{ - "CVEsc", - "Εσκούδο Πράσινου Ακρωτηρίου", - } - CWG{ - "CWG", - "Γκίλντα Curacao", - } - CYP{ - "£", - "Λίρα Κύπρου", - } - CZK{ - "CZK", - "Κορόνα Τσέχικης Δημοκρατίας", - } - DDM{ - "DDM", - "Ostmark Ανατολικής Γερμανίας", - } - DEM{ - "DEM", - "Μάρκο Γερμανίας", - } - DES{ - "DES", - "Sperrmark Γερμανίας", - } - DJF{ - "DF", - "Φράγκο Τζιμπουτί", - } - DKK{ - "DKr", - "Κορόνα Δανίας", - } - DOP{ - "RD$", - "Πέσο Δομίνικου", - } - DZD{ - "DA", - "Δηνάριο Αλγερίας", - } - DZF{ - "DZF", - "Νέο Φράγκο Αλγερίας", - } - DZG{ - "DZG", - "Germinal Φράγκο Αλγερίας", - } - ECS{ - "ECS", - "Sucre Ισημερινού", - } - ECV{ - "ECV", - "Unidad de Valor Constante (UVC) Ισημερινού", - } - EEK{ - "EEK", - "Κορόνα Εσθονίας", - } - EGP{ - "EGP", - "Λίρα Αιγύπτου", - } - ERN{ - "ERN", - "Eritrean Nakfa", - } - ESP{ - "ESP", - "Πεσέτα Ισπανίας", - } - ETB{ - "Br", - "Birr Αιθιοπίας", - } - ETD{ - "ETD", - "Δολάριο Αιθιοπίας", - } - EUR{ - "€", - "Ευρώ", - } - FIM{ - "FIM", - "Μάρκο Φινλανδίας", - } - FIN{ - "FIN", - "Μάρκο Φινλανδίας (1860-1962)", - } - FJD{ - "F$", - "Δολάριο Φίτζι", - } - FJP{ - "FJP", - "Λίρα Φίτζι", - } - FKP{ - "FKP", - "Λίρα Νησιών Φώλκλαντ", - } - FOK{ - "FOK", - "Kronur Νήσων Faeroe", - } - FRF{ - "FRF", - "Φράγκο Γαλλίας", - } - FRG{ - "FRG", - "Φράγκο Germinal/Φράγκο Poincare Γαλλίας", - } - GAF{ - "GAF", - "Φράγκο Γκαμπόν CFA", - } - GBP{ - "£", - "Λίρα Στερλίνα Βρετανίας", - } - GEK{ - "GEK", - "Kupon Larit Γεωργίας", - } - GEL{ - "lari", - "Lari Γεωργίας", - } - GHC{ - "GHC", - "Cedi Γκάνας", - } - GHO{ - "GHO", - "Παλαιό Cedi Γκάνας", - } - GHP{ - "GHP", - "Λίρα Γκάνας", - } - GHR{ - "GHR", - "Ανατιμημένο Cedi Γκάνας", - } - GIP{ - "GIP", - "Λίρα Γιβραλτάρ", - } - GLK{ - "GLK", - "Κορόνα Γροιλανδίας", - } - GMD{ - "GMD", - "Dalasi Γκάμπια", - } - GMP{ - "GMP", - "Λίρα Γκάμπια", - } - GNF{ - "GF", - "Φράγκο Γουινέας", - } - GNI{ - "GNI", - "Φράγκο Γουινέας (1960-1972)", - } - GNS{ - "GNS", - "Syli Γουινέας", - } - GPF{ - "GPF", - "Φράγκο Γουαδελούπης", - } - GQE{ - "GQE", - "Ekwele Guineana Ισημερινής Γουινέας", - } - GQF{ - "GQF", - "Φράγκο Ισημερινής Γουινέας", - } - GQP{ - "GQP", - "Πεσέτα Guineana Ισημερινής Γουινέας", - } - GRD{ - "Δρχ", - "Δρχ", - } - GRN{ - "GRN", - "Νέα Δραχμή Ελλάδας", - } - GTQ{ - "Q", - "Quetzal Γουατεμάλα", - } - GUF{ - "GUF", - "Φράγκο Guiana Γαλλικής Γουιάνας", - } - GWE{ - "GWE", - "Γκινέα Εσκούδο Πορτογαλίας", - } - GWM{ - "GWM", - "Γκινέα Mil Reis Πορτογαλίας", - } - GWP{ - "GWP", - "Πέσο Guinea-Bissau", - } - GYD{ - "G$", - "Δολάριο Γουιάνας", - } - HKD{ - "HK$", - "Δολάριο Χονγκ Κονγκ", - } - HRD{ - "HRD", - "Δηνάριο Κροατίας", - } - HRK{ - "HRK", - "Kuna Δηνάριο", - } - HTG{ - "HTG", - "Gourde Αϊτής", - } - HUF{ - "Ft", - "Φιορίνι Ουγγαρίας", - } - IBP{ - "IBP", - "Λίρα Βόρειας Ιρλανδίας", - } - IDG{ - "IDG", - "Γκίλντα Nica Ινδονησίας", - } - IDJ{ - "IDJ", - "Ρούπια Ιάβας Ινδονησίας", - } - IDN{ - "IDN", - "Νέα Ρούπια Ινδονησίας", - } - IDR{ - "Rp", - "Ρούπια Ινδονησίας", - } - IEP{ - "IR£", - "Λίρα Ιρλανδίας", - } - ILL{ - "ILL", - "Sheqel Ισραήλ", - } - ILP{ - "ILP", - "Λίρα Ισραήλ", - } - ILS{ - "ILS", - "Νέο Sheqel Ισραήλ", - } - IMP{ - "IMP", - "Λίρα Στερλίνα Νήσου Man", - } - INR{ - "INR", - "Ρούπια Ινδίας", - } - IQD{ - "ID", - "Δηνάριο Ιράκ", - } - IRR{ - "RI", - "Rial Ιράκ", - } - ISK{ - "ISK", - "Κορόνα Ισλανδίας", - } - ITL{ - "₤", - "Λιρέτα Ιταλίας", - } - JEP{ - "JEP", - "Λίρα Στερλίνα Υερσέης", - } - JMD{ - "J$", - "Δολάριο Τζαμάικας", - } - JMP{ - "JMP", - "Λίρα Τζαμάικας", - } - JOD{ - "JD", - "Δηνάριο Ιορδανίας", - } - JPY{ - "Â¥", - "Γιεν Ιαπωνίας", - } - KES{ - "K Sh", - "Σελίνι Κένυας", - } - KHO{ - "KHO", - "Παλαιό Riel Καμπότζης", - } - KHR{ - "CR", - "Riel Καμπότζης", - } - KID{ - "KID", - "Δολάριο Kiribati", - } - KMF{ - "CF", - "Φράγκο Comoro", - } - KPP{ - "KPP", - "Won Δημοκρατίας Βόρειας Κορέας", - } - KPW{ - "KPW", - "Won Βόρειας Κορέας", - } - KRH{ - "KRH", - "Hwan Νότιας Κορέας", - } - KRO{ - "KRO", - "Παλαιό Won Νότιας Κορέας", - } - KRW{ - "KRW", - "Won Νότιας Κορέας", - } - KWD{ - "KD", - "Δηνάριο Κουβέιτ", - } - KYD{ - "KYD", - "Δολάριο Νήσων Κάιμαν", - } - KZR{ - "KZR", - "Ρούβλι Καζακστάν", - } - KZT{ - "T", - "Tenge Καζακστάν", - } - LAK{ - "LAK", - "Kip Λάος", - } - LBP{ - "LL", - "Λίρα Λιβάνου", - } - LIF{ - "LIF", - "Φράγκο Λιχτενστάιν", - } - LKR{ - "SL Re", - "Ρούπια Σρι Λάνκα", - } - LNR{ - "LNR", - "Ρούπια Ceylon", - } - LRD{ - "LRD", - "Δολάριο Λιβερίας", - } - LTL{ - "LTL", - "Lita Λιθουανίας", - } - LTT{ - "LTT", - "Talonas Λιθουανίας", - } - LUF{ - "LUF", - "Φράγκο Λουξεμβούργου", - } - LVL{ - "LVL", - "Lats Λετονίας", - } - LVR{ - "LVR", - "Ρούβλι Λετονίας", - } - LYB{ - "LYB", - "Λίρα Βρετανικής Στρατιωτικής Εξουσίας Λιβύης", - } - LYD{ - "LD", - "Δηνάριο Λιβύης", - } - LYP{ - "LYP", - "Λίρα Λιβύης", - } - MAD{ - "MAD", - "Ντιράμ Μαρόκου", - } - MAF{ - "MAF", - "Φράγκο Μαρόκου", - } - MCF{ - "MCF", - "Νέο Φράγκο Μονακό", - } - MCG{ - "MCG", - "Φράγκο Germinal Μονακό", - } - MDC{ - "MDC", - "Λέι Cupon Μολδαβίας", - } - MDL{ - "MDL", - "Λέι Μολδαβίας", - } - MDR{ - "MDR", - "Ρούβλι Cupon Μολδαβίας", - } - MGA{ - "MGA", - "Ariary Μαδαγασκάρης", - } - MGF{ - "MGF", - "Φράγκο Μαδαγασκάρης", - } - MHD{ - "MHD", - "Δολάριο Νήσων Marshall", - } - MKD{ - "MDen", - "Δηνάριο Π.Γ.Δ.Μ.", - } - MKN{ - "MKN", - "Δηνάριο Π.Γ.Δ.Μ. (1992-1993)", - } - MLF{ - "MLF", - "Φράγκο Μαλί", - } - MMK{ - "MMK", - "Kyat Μιανμάρ", - } - MMX{ - "MMX", - "Πιστοποιητικά Ξένου Συναλλάγματος σε Δολάρια, Μιανμάρ", - } - MNT{ - "Tug", - "Tugrik Μογγολίας", - } - MOP{ - "MOP", - "Pataca Μακάο", - } - MQF{ - "MQF", - "Φράγκο Μαρτινίκας", - } - MRO{ - "UM", - "Ouguiya Μαυριτανίας", - } - MTL{ - "Lm", - "Λιρέτα Μάλτας", - } - MTP{ - "MTP", - "Λίρα Μάλτας", - } - MUR{ - "MUR", - "Ρούπια Μαυρικίου", - } - MVP{ - "MVP", - "Ρούπια Νήσων Μαλδίβων", - } - MVR{ - "MVR", - "Rufiyaa Νήσων Μαλδίβων", - } - MWK{ - "MK", - "Kwacha Μαλάουι", - } - MWP{ - "MWP", - "Λίρα Μαλάουι", - } - MXN{ - "MEX$", - "Πέσο Μεξικού", - } - MXP{ - "MXP", - "Ασημένιο Πέσο Μεξικού (1861-1992)", - } - MXV{ - "MXV", - "Unidad de Inversion (UDI) Μεξικού", - } - MYR{ - "RM", - "Ringgit Μαλαισίας", - } - MZE{ - "MZE", - "Εσκούδο Μοζαμβίκης", - } - MZM{ - "Mt", - "Metical Μοζαμβίκης", - } - NAD{ - "N$", - "Δολάριο Ναμίμπια", - } - NCF{ - "NCF", - "Φράγκο Germinal Νέας Καληδονίας", - } - NGN{ - "NGN", - "Naira Νιγηρίας", - } - NGP{ - "NGP", - "Λίρα Νιγηρίας", - } - NHF{ - "NHF", - "Φράγκο Νέων Εβρίδων CFP", - } - NIC{ - "NIC", - "Κόρδοβα Νικαράγουας", - } - NIG{ - "NIG", - "Χρυσή Κόρδοβα Νικαράγουας", - } - NIO{ - "NIO", - "Χρυσή Κόρδοβα Νικαράγουας", - } - NLG{ - "NLG", - "Γκίλντα Ολλανδίας", - } - NOK{ - "NKr", - "Κορόνα Νορβηγίας", - } - NPR{ - "Nrs", - "Ρούπια Νεπάλ", - } - NZD{ - "$NZ", - "Δολάριο Νέας Ζηλανδίας", - } - NZP{ - "NZP", - "Λίρα Νέας Ζηλανδίας", - } - OMR{ - "RO", - "Rial Ομάν", - } - OMS{ - "OMS", - "Rial Saidi Ομάν", - } - PAB{ - "PAB", - "Μπαλμπόα Παναμά", - } - PEI{ - "PEI", - "Inti Περού", - } - PEN{ - "PEN", - "Sol Nuevo Περού", - } - PES{ - "PES", - "Sol Περού", - } - PGK{ - "PGK", - "Kina Παπούα Νέα Γουινέα", - } - PHP{ - "PHP", - "Πέσο Φιλιππίνων", - } - PKR{ - "Pra", - "Ρούπια Πακιστάν", - } - PLN{ - "Zl", - "Ζλότυ Πολωνίας", - } - PLX{ - "PLX", - "Πιστοποιητικά Ξένου Συναλλάγματος σε Δολάρια, Πολωνίας", - } - PLZ{ - "PLZ", - "Ζλότυ Πολωνίας (1950-1995)", - } - PSP{ - "PSP", - "Λίρα Παλαιστίνης", - } - PTC{ - "PTC", - "Conto Πορτογαλίας", - } - PTE{ - "PTE", - "Εσκούδο Πορτογαλίας", - } - PYG{ - "PYG", - "Γκουαρανί Παραγουάης", - } - QAR{ - "QR", - "Rial Κατάρ", - } - REF{ - "REF", - "Φράγκο Reunion", - } - ROL{ - "leu", - "Λέι Ρουμανίας", - } - RON{ - "RON", - "Νέο Λέι Ρουμανίας", - } - RUB{ - "RUB", - "Ρούβλι Ρωσίας", - } - RUR{ - "RUR", - "Ρούβλι Ρωσίας (1991-1998)", - } - RWF{ - "RWF", - "Φράγκο Ρουάντας", - } - SBD{ - "SI$", - "Δολάριο Νήσων Σολομώντος", - } - SCR{ - "SR", - "Ρούπια Σεϋχέλες", - } - SDD{ - "SDD", - "Δηνάριο Σουδάν", - } - SDP{ - "SDP", - "Λίρα Σουδάν", - } - SEK{ - "SKr", - "Κορόνα Σουηδίας", - } - SGD{ - "S$", - "Δολάριο Σιγκαπούρης", - } - SHP{ - "SHP", - "Λίρα Αγίας Ελένης", - } - SIB{ - "SIB", - "Tolar Bons Σλοβενίας", - } - SIT{ - "SIT", - "Tolar Σλοβενίας", - } - SKK{ - "Sk", - "Κορόνα Σλοβενίας", - } - SLL{ - "SLL", - "Leone Σιέρα Λεόνε", - } - SML{ - "SML", - "Λιρέτα Αγίου Μαρίνου", - } - SOS{ - "So. Sh.", - "Σελίνι Σομαλίας", - } - SQS{ - "SQS", - "Σελίνι Σομαλίας", - } - SRG{ - "Sf", - "Γκίλντα Σουρινάμ", - } - SSP{ - "SSP", - "Λίρα Σκωτίας", - } - SUN{ - "SUN", - "Νέο Σοβιετικό Ρούβλι", - } - SUR{ - "SUR", - "Σοβιετικό Ρούβλι", - } - SVC{ - "SVC", - "Colon Ελ Σαλβαδόρ", - } - SYP{ - "LS", - "Λίρα Συρίας", - } - SZL{ - "E", - "Lilangeni Ζουαζιλάνδη", - } - TCC{ - "TCC", - "Κορόνα Νήσων Τερκς και Κάικος", - } - TDF{ - "TDF", - "Φράγκο Τσαντ CFA", - } - THB{ - "THB", - "Μπατ Ταϊλάνδης", - } - TJR{ - "TJR", - "Ρούβλι Τατζικιστάν", - } - TJS{ - "TJS", - "Somoni Τατζικιστάν", - } - TMM{ - "TMM", - "Μανάτ Τουρκμενιστάν", - } - TND{ - "TND", - "Δηνάριο Τυνησίας", - } - TOS{ - "TOS", - "Λίρα Στερλίνα Τόνγκα", - } - TPE{ - "TPE", - "Εσκούδο Τιμόρ", - } - TPP{ - "TPP", - "Pataca Τιμόρ", - } - TRL{ - "TL", - "Λίρα Τουρκίας", - } - TRY{ - "TRY", - "Νέα Τουρκική Λίρα", - } - TTD{ - "TT$", - "Δολάριο Τρινιδάδ και Τομπάγκο", - } - TTO{ - "TTO", - "Παλαιό Δολάριο Τρινιδάδ και Τομπάγκο", - } - TVD{ - "TVD", - "Tuvalu Δολάριο", - } - TWD{ - "NT$", - "Νέο Δολάριο Ταϊβάν", - } - TZS{ - "T Sh", - "Σελίνι Τανζανίας", - } - UAH{ - "UAH", - "Hryvnia Ουκρανίας", - } - UAK{ - "UAK", - "Karbovanetz Ουκρανίας", - } - UGS{ - "UGS", - "Σελίνι Ουγκάντας (1966-1987)", - } - UGX{ - "U Sh", - "Σελίνι Ουγκάντας", - } - USD{ - "US$", - "Δολάριο ΗΠΑ", - } - USN{ - "USN", - "Δολάριο ΗΠΑ (Επόμενη Ημέρα)", - } - USS{ - "USS", - "Δολάριο ΗΠΑ (Ίδια Ημέρα)", - } - UYF{ - "UYF", - "Μεταλλικό Πέσο Ουρουγουάης", - } - UYP{ - "UYP", - "Πέσο Ουρουγουάης (1975-1993)", - } - UYU{ - "Ur$", - "Πέσο Uruguayo Ουρουγουάης", - } - UZC{ - "UZC", - "Coupon Som Ουζμπεκιστάν", - } - UZS{ - "UZS", - "Sum Ουζμπεκιστάν", - } - VAL{ - "VAL", - "Λιρέτα Βατικανού", - } - VDD{ - "VDD", - "Piastre Dong Viet Βορείου Βιετνάμ", - } - VDN{ - "VDN", - "Νέο Dong Βορείου Βιετνάμ", - } - VDP{ - "VDP", - "Viet Minh Piastre Dong Viet Βορείου Βιετνάμ", - } - VEB{ - "Be", - "Μπολιβάλ Βενεζουέλας", - } - VGD{ - "VGD", - "Δολάριο Βρετανικών Παρθένων Νήσων", - } - VND{ - "VND", - "Dong Βιετνάμ", - } - VNN{ - "VNN", - "Νέο Dong Βιετνάμ", - } - VNR{ - "VNR", - "Dong Δημοκρατίας Βιετνάμ", - } - VNS{ - "VNS", - "Εθνικό Dong Βιετνάμ", - } - WSP{ - "WSP", - "Λίρα Δυτικής Σαμόα", - } - WST{ - "WST", - "Tala Δυτικής Σαμόα", - } - XAD{ - "XAD", - "Μονάδα Λογαριασμού Ασιατικού Δηναρίου", - } - XAF{ - "XAF", - "Φράγκο BEAC CFA", - } - XAM{ - "XAM", - "Ασιατική Νομισματική Μονάδα", - } - XAU{ - "XAU", - "Χρυσός", - } - XBA{ - "XBA", - "Ευρωπαϊκή Σύνθετη Μονάδα", - } - XBB{ - "XBB", - "Ευρωπαϊκή Νομισματική Μονάδα", - } - XBC{ - "XBC", - "Ευρωπαϊκή Μονάδα Λογαριασμού (XBC)", - } - XBD{ - "XBD", - "Ευρωπαϊκή Μονάδα Λογαριασμού (XBD)", - } - XCD{ - "EC$", - "Δολάριο Ανατολικής Καραϊβικής", - } - XCF{ - "XCF", - "Νέο Φράγκο CFA", - } - XDR{ - "XDR", - "Ειδικά Δικαιώματα Ανάληψης", - } - XEF{ - "XEF", - "Φράγκο BCEAEC CFA", - } - XEU{ - "XEU", - "Ευρωπαϊκή Συναλλαγματική Μονάδα", - } - XFO{ - "XFO", - "Χρυσό Φράγκο Γαλλίας", - } - XFU{ - "XFU", - "UIC-Φράγκο Γαλλίας", - } - XID{ - "XID", - "Ισλαμικό Δηνάριο", - } - XMF{ - "XMF", - "Νέο Μητροπολιτικό Φράγκο Γαλλίας", - } - XNF{ - "XNF", - "Φράγκο Γαλλικών Αντιλλών CFA", - } - XOF{ - "XOF", - "Φράγκο BCEAO CFA", - } - XPF{ - "CFPF", - "Φράγκο CFP", - } - XTR{ - "XTR", - "Μεταβιβάσιμο Ρούβλι COMECON", - } - YDD{ - "YDD", - "Δηνάριο Υεμένης", - } - YEI{ - "YEI", - "Imadi Riyal Υεμένης", - } - YER{ - "YRl", - "Rial Υεμένης", - } - YUD{ - "YUD", - "Μεταλλικό Δηνάριο Γιουγκοσλαβίας", - } - YUF{ - "YUF", - "Δηνάριο Γιουγκοσλαβικής Ομοσπονδίας", - } - YUG{ - "YUG", - "Δηνάριο Γιουγκοσλαβίας", - } - YUM{ - "YUM", - "Νέο Δηνάριο Γιουγκοσλαβίας", - } - YUN{ - "YUN", - "Μετατρέψιμο Δηνάριο Γιουγκοσλαβίας", - } - YUO{ - "YUO", - "Οκτωβριανό Δηνάριο Γιουγκοσλαβίας", - } - YUR{ - "YUR", - "Ανανεωμένο Δηνάριο Γιουγκοσλαβίας", - } - ZAL{ - "ZAL", - "Ραντ Νότιας Αφρικής (οικονομικό)", - } - ZAP{ - "ZAP", - "Λίρα Νότιας Αφρικής", - } - ZAR{ - "R", - "Ραντ Νότιας Αφρικής", - } - ZMK{ - "ZMK", - "Kwacha Ζάμπιας", - } - ZMP{ - "ZMP", - "Λίρα Ζάμπιας", - } - ZRN{ - "ZRN", - "Νέο Zaire Ζαΐρ", - } - ZRZ{ - "ZRZ", - "Zaire Ζαΐρ", - } - ZWD{ - "Z$", - "Δολάριο Ζιμπάμπουε", - } - } - ExemplarCharacters{"[ΐά-ώ]"} - Keys{ - calendar{"Ημερολόγιο"} - collation{"Τακτοποίηση"} - currency{"Νόμισμα"} - } - Languages{ - ar{"Αραβικά"} - arc{"Αραμαϊκά"} - be{"Λευκορωσικά"} - bg{"Βουλγαρικά"} - bo{"Θιβετιανά"} - bs{"Βοσνιακά"} - ca{"Καταλανικά"} - co{"Κορσικανικά"} - cop{"Κοπτικά"} - cs{"Τσεχικά"} - cy{"Ουαλικά"} - da{"Δανικά"} - de{"Γερμανικά"} - egy{"Αιγυπτιακά (Αρχαία)"} - el{"Ελληνικά"} - en{"Αγγλικά"} - es{"Ισπανικά"} - et{"Εσθονικά"} - eu{"Βασκικά"} - fa{"Περσικά"} - fi{"Φινλανδικά"} - fr{"Γαλλικά"} - ga{"Ιρλανδικά"} - gd{"Σκωτικά Κελτικά"} - grc{"Ελληνικά, Αρχαία (έως 1453)"} - haw{"Χαβανεζικά"} - he{"Εβραϊκά"} - hr{"Κροατικά"} - hu{"Ουγγρικά"} - hy{"Αρμενικά"} - id{"Ινδονησιακά"} - ine{"Ινδοευρωπαϊκά (¨Αλλη)"} - ira{"Ιρανικά"} - is{"Ισλανδικά"} - it{"Ιταλικά"} - ja{"Ιαπωνικά"} - ka{"Γεωργιανά"} - ko{"Κορεατικά"} - la{"Λατινικά"} - lt{"Λιθουανικά"} - lv{"Λετονικά"} - mk{"Σλαβομακεδονικά"} - mn{"Μογγολικά"} - mo{"Μολδαβικά"} - mt{"Μαλτεζικά"} - mul{"Πολλαπλές Γλώσσες"} - nai{"Ινδιανικά Βόρειας Αμερικής (Άλλα)"} - nl{"Ολλανδικά"} - no{"Νορβηγικά"} - ota{"Τουρκικά, Οθωμανικά (1500-1928)"} - peo{"Αρχαία Περσικά (600-400 π.Χ.)"} - phi{"Φιλιππινέζικα (Άλλα)"} - phn{"Φοινικικά"} - pl{"Πολωνικά"} - pt{"Πορτογαλικά"} - ro{"Ρουμανικά"} - rom{"Ρωμανικά"} - ru{"Ρωσικά"} - sem{"Σημιτικά (Άλλα)"} - sh{"Σερβοκροατικά"} - sk{"Σλοβακικά"} - sl{"Σλοβενικά"} - sla{"Σλαβικά (Άλλα)"} - sq{"Αλβανικά"} - sr{"Σερβικά"} - sv{"Σουηδικά"} - tr{"Τουρκικά"} - uk{"Ουκρανικά"} - vi{"Βιετναμεζικά"} - yi{"Ιουδαϊκά"} - zh{"Κινεζικά"} - } - LocaleScript{ - "Grek", - } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Scripts{ - Arab{"Αραβικό"} - Armn{"Αρμενικό"} - Brai{"Μπράιγ"} - Copt{"Κοπτικό"} - Cprt{"Κυπριακό"} - Cyrl{"Κυριλλικό"} - Ethi{"Αιθιοπικό"} - Geor{"Γεωργιανό"} - Goth{"Γοτθικό"} - Grek{"Ελληνικό"} - Hebr{"Εβραϊκό"} - Latn{"Λατινικό"} - Mong{"Μογγολικό"} - Syrc{"Συριακό"} - Thai{"Ταϊλανδικό"} - Tibt{"Θιβετιανό"} - Zyyy{"Κοινό"} - } - Types{ - calendar{ - buddhist{"Βουδιστικό Ημερολόγιο"} - chinese{"Κινέζικο Ημερολόγιο"} - gregorian{"Γρηγοριανό Ημερολόγιο"} - hebrew{"Εβραϊκό Ημερολόγιο"} - islamic{"Ισλαμικό Ημερολόγιο"} - islamic-civil{"Ισλαμικό-Αστικό Ημερολόγιο"} - japanese{"Ιαπωνικό Ημερολόγιο"} - } - collation{ - direct{"Σειρά Direct"} - phonebook{"Σειρά Τηλεφωνικού Καταλόγου"} - pinyin{"Σειρά Pinyin"} - stroke{"Σειρά Stroke"} - traditional{"Παραδοσιακή"} - } - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "ΠΜ", - "ΜΜ", - } - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "h:mm:ss a z", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", - "EEEE, dd MMMM yyyy", - "dd MMMM yyyy", - "dd MMM yyyy", - "dd/MM/yyyy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "Κυρ", - "Δευ", - "Τρι", - "Τετ", - "Πεμ", - "Παρ", - "Σαβ", - } - narrow{ - "Κ", - "Δ", - "Τ", - "Τ", - "Π", - "Π", - "Σ", - } - wide{ - "Κυριακή", - "Δευτέρα", - "Τρίτη", - "Τετάρτη", - "Πέμπτη", - "Παρασκευή", - "Σάββατο", - } - } - } - eras{ - abbreviated{ - "π.Χ.", - "μ.Χ.", - } - } - monthNames{ - format{ - abbreviated{ - "Ιαν", - "Φεβ", - "Μαρ", - "Απρ", - "Μαϊ", - "Ιουν", - "Ιουλ", - "Αυγ", - "Σεπ", - "Οκτ", - "Νοε", - "Δεκ", - } - narrow{ - "Ι", - "Φ", - "Μ", - "Α", - "Μ", - "Ι", - "Ι", - "Α", - "Σ", - "Ο", - "Ν", - "Δ", - } - wide{ - "Ιανουαρίου", - "Φεβρουαρίου", - "Μαρτίου", - "Απριλίου", - "Μαΐου", - "Ιουνίου", - "Ιουλίου", - "Αυγούστου", - "Σεπτεμβρίου", - "Οκτωβρίου", - "Νοεμβρίου", - "Δεκεμβρίου", - } - } - stand-alone{ - abbreviated{ - "Ιαν", - "Φεβ", - "Μαρ", - "Απρ", - "Μαϊ", - "Ιουν", - "Ιουλ", - "Αυγ", - "Σεπ", - "Οκτ", - "Νοε", - "Δεκ", - } - narrow{ - "Ι", - "Φ", - "Μ", - "Α", - "Μ", - "Ι", - "Ι", - "Α", - "Σ", - "Ο", - "Ν", - "Δ", - } - wide{ - "Ιανουάριος", - "Φεβρουάριος", - "Μάρτιος", - "Απρίλιος", - "Μάιος", - "Ιούνιος", - "Ιούλιος", - "Αύγουστος", - "Σεπτέμβριος", - "Οκτώβριος", - "Νοέμβριος", - "Δεκέμβριος", - } - } - } - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/el.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/el.xml + */ +el{ + Countries{ + 001{"Κόσμος"} + 002{"Αφρική"} + 005{"Νότια Αμερική"} + 009{"Ωκεανία"} + 011{"Δυτική Αφρική"} + 013{"Κεντρική Αμερική"} + 014{"Ανατολική Αφρική"} + 015{"Βόρεια Αφρική"} + 017{"Μέση Αφρική"} + 018{"Νότια Αφρική [018]"} + 019{"Αμερική"} + 021{"Βόρεια Αμερική"} + 029{"Καραϊβική"} + 030{"Ανατολική Ασία"} + 035{"Νοτιοανατολική Ασία"} + 053{"Αυστραλία και Νέα Ζηλανδία"} + 054{"Μελανησία"} + 061{"Πολυνησία"} + 062{"Νότια Κεντρική Ασία"} + 142{"Ασία"} + 145{"Δυτική Ασία"} + 150{"Ευρώπη"} + 151{"Ανατολική Ευρώπη"} + 154{"Βόρεια Ευρώπη"} + 155{"Δυτική Ευρώπη"} + 830{"Νήσοι Καναλιού"} + 833{"Νήσος Μαν"} + AD{"Ανδόρα"} + AE{"Ηνωμένα Αραβικά Εμιράτα"} + AF{"Αφγανιστάν"} + AG{"Αντίγκουα και Μπαρμπούντα"} + AI{"Ανγκουίλα"} + AL{"Αλβανία"} + AM{"Αρμενία"} + AN{"Ολλανδικές Αντίλλες"} + AO{"Ανγκόλα"} + AQ{"Ανταρκτική"} + AR{"Αργεντινή"} + AS{"Αμερικανική Σαμόα"} + AT{"Αυστρία"} + AU{"Αυστραλία"} + AW{"Αρούμπα"} + AX{"Νήσοι Aland"} + AZ{"Αζερμπαϊτζάν"} + BA{"Βοσνία - Ερζεγοβίνη"} + BB{"Μπαρμπάντος"} + BD{"Μπανγκλαντές"} + BE{"Βέλγιο"} + BF{"Μπουρκίνα Φάσο"} + BG{"Βουλγαρία"} + BH{"Μπαχρέιν"} + BI{"Μπουρούντι"} + BJ{"Μπένιν"} + BM{"Βερμούδες"} + BN{"Μπρουνέι Νταρουσαλάμ"} + BO{"Βολιβία"} + BR{"Βραζιλία"} + BS{"Μπαχάμες"} + BT{"Μπουτάν"} + BV{"Νήσος Μπουβέ"} + BW{"Μποτσουάνα"} + BY{"Λευκορωσία"} + BZ{"Μπελίζ"} + CA{"Καναδάς"} + CC{"Νήσοι Κόκος (Κήλινγκ)"} + CD{"Κονγκό, Λαϊκή Δημοκρατία του"} + CF{"Κεντροαφρικανική Δημοκρατία"} + CG{"Κονγκό"} + CH{"Ελβετία"} + CI{"Ακτή Ελεφαντόδοντος"} + CK{"Νήσοι Κουκ"} + CL{"Χιλή"} + CM{"Καμερούν"} + CN{"Κίνα"} + CO{"Κολομβία"} + CR{"Κόστα Ρίκα"} + CS{"Σερβία και Μαυροβούνιο"} + CU{"Κούβα"} + CV{"Νήσοι Πράσινου Ακρωτηρίου"} + CX{"Νήσος Χριστουγέννων"} + CY{"Κύπρος"} + CZ{"Τσεχία"} + DE{"Γερμανία"} + DJ{"Τζιμπουτί"} + DK{"Δανία"} + DM{"Ντομίνικα"} + DO{"Δομινικανή Δημοκρατία"} + DZ{"Αλγερία"} + EC{"Ισημερινός"} + EE{"Εσθονία"} + EG{"Αίγυπτος"} + EH{"Δυτική Σαχάρα"} + ER{"Ερυθραία"} + ES{"Ισπανία"} + ET{"Αιθιοπία"} + FI{"Φινλανδία"} + FJ{"Φίτζι"} + FK{"Νήσοι Φώκλαντ"} + FM{"Μικρονησία, Ομόσπονδες Πολιτείες της"} + FO{"Νήσοι Φερόες"} + FR{"Γαλλία"} + GA{"Γκαμπόν"} + GB{"Ηνωμένο Βασίλειο"} + GD{"Γρενάδα"} + GE{"Γεωργία"} + GF{"Γαλλική Γουιάνα"} + GH{"Γκάνα"} + GI{"Γιβραλτάρ"} + GL{"Γροιλανδία"} + GM{"Γκάμπια"} + GN{"Γουινέα"} + GP{"Γουαδελούπη"} + GQ{"Ισημερινή Γουινέα"} + GR{"Ελλάδα"} + GS{"Νότια Γεωργία και Νήσοι Νότιες Σάντουιτς"} + GT{"Γουατεμάλα"} + GU{"Γκουάμ"} + GW{"Γουινέα-Μπισάου"} + GY{"Γουιάνα"} + HK{"Χονγκ Κονγκ, Ειδική Διοικητική Περιφέρεια της Κίνας"} + HM{"Νήσοι Χερντ και Μακντόναλντ"} + HN{"Ονδούρα"} + HR{"Κροατία"} + HT{"Αϊτή"} + HU{"Ουγγαρία"} + ID{"Ινδονησία"} + IE{"Ιρλανδία"} + IL{"Ισραήλ"} + IN{"Ινδία"} + IO{"Βρετανικά Έδάφη Ινδικού Ωκεανού"} + IQ{"Ιράκ"} + IR{"Ιράν, Ισλαμική Δημοκρατία του"} + IS{"Ισλανδία"} + IT{"Ιταλία"} + JM{"Τζαμάικα"} + JO{"Ιορδανία"} + JP{"Ιαπωνία"} + KE{"Κένυα"} + KG{"Κιργιζία"} + KH{"Καμπότζη"} + KI{"Κιριμπάτι"} + KM{"Κομόρες"} + KN{"Σαιντ Κιτς και Νέβις"} + KP{"Κορέα, Βόρεια"} + KR{"Κορέα, Νότια"} + KW{"Κουβέιτ"} + KY{"Νήσοι Κέιμαν"} + KZ{"Καζακστάν"} + LA{"Λατινική Αμερική"} + LB{"Λίβανος"} + LC{"Αγία Λουκία"} + LI{"Λιχτενστάιν"} + LK{"Σρι Λάνκα"} + LR{"Λιβερία"} + LS{"Λεσότο"} + LT{"Λιθουανία"} + LU{"Λουξεμβούργο"} + LV{"Λετονία"} + LY{"Λιβύη"} + MA{"Μαρόκο"} + MC{"Μονακό"} + MD{"Μολδαβία, Δημοκρατία της"} + MG{"Μαδαγασκάρη"} + MH{"Νήσοι Μάρσαλ"} + MK{"ΠΓΔ Μακεδονίας"} + ML{"Μάλι"} + MM{"Μιανμάρ"} + MN{"Μογγολία"} + MO{"Μακάο, Ειδική Διοικητική Περιφέρεια της Κίνας"} + MP{"Νήσοι Βόρειες Μαριάνες"} + MQ{"Μαρτινίκα"} + MR{"Μαυριτανία"} + MS{"Μονσεράτ"} + MT{"Μάλτα"} + MU{"Μαυρίκιος"} + MV{"Μαλδίβες"} + MW{"Μαλάουι"} + MX{"Μεξικό"} + MY{"Μαλαισία"} + MZ{"Μοζαμβίκη"} + NA{"Ναμίμπια"} + NC{"Νέα Καληδονία"} + NE{"Νίγηρ"} + NF{"Νήσος Νόρφολκ"} + NG{"Νιγηρία"} + NI{"Νικαράγουα"} + NL{"Ολλανδία"} + NO{"Νορβηγία"} + NP{"Νεπάλ"} + NR{"Ναούρου"} + NU{"Νιούε"} + NZ{"Νέα Ζηλανδία"} + OM{"Ομάν"} + PA{"Παναμάς"} + PE{"Περού"} + PF{"Γαλλική Πολυνησία"} + PG{"Παπούα - Νέα Γουινέα"} + PH{"Φιλιππίνες"} + PK{"Πακιστάν"} + PL{"Πολωνία"} + PM{"Σαιντ Πιέρ και Μικελόν"} + PN{"Πίτκερν"} + PR{"Πουέρτο Ρίκο"} + PS{"Παλαιστινιακά Εδάφη"} + PT{"Πορτογαλία"} + PW{"Παλάου"} + PY{"Παραγουάη"} + QA{"Κατάρ"} + QO{"Περιφερειακή Ωκεανία"} + RE{"Ρεϋνιόν"} + RO{"Ρουμανία"} + RU{"Ρωσία"} + RW{"Ρουάντα"} + SA{"Σαουδική Αραβία"} + SB{"Νήσοι Σολομώντος"} + SC{"Σεϋχέλλες"} + SD{"Σουδάν"} + SE{"Σουηδία"} + SG{"Σιγκαπούρη"} + SH{"Αγία Ελένη"} + SI{"Σλοβενία"} + SJ{"Νήσοι Σβάλμπαρ και Γιαν Μαγιέν"} + SK{"Σλοβακία"} + SL{"Σιέρα Λεόνε"} + SM{"Άγιος Μαρίνος"} + SN{"Σενεγάλη"} + SO{"Σομαλία"} + SR{"Σουρινάμ"} + ST{"Σάο Τομέ και Πρίνσιπε"} + SV{"Ελ Σαλβαδόρ"} + SY{"Συρία, Αραβική Δημοκρατία της"} + SZ{"Σουαζιλάνδη"} + TC{"Νήσοι Τερκς και Κάικος"} + TD{"Τσαντ"} + TF{"Γαλλικά Νότια Εδάφη"} + TG{"Τόγκο"} + TH{"Ταϊλάνδη"} + TJ{"Τατζικιστάν"} + TK{"Τοκελάου"} + TL{"Ανατολικό Τιμόρ"} + TM{"Τουρκμενιστάν"} + TN{"Τυνησία"} + TO{"Τόνγκα"} + TR{"Τουρκία"} + TT{"Τρινιδάδ και Τομπάγκο"} + TV{"Τουβαλού"} + TW{"Ταϊβάν"} + TZ{"Τανζανία"} + UA{"Ουκρανία"} + UG{"Ουγκάντα"} + UM{"Απομακρυσμένες Νησίδες των Ηνωμένων Πολιτειών"} + US{"Ηνωμένες Πολιτείες"} + UY{"Ουρουγουάη"} + UZ{"Ουζμπεκιστάν"} + VA{"Αγία Έδρα (Βατικανό)"} + VC{"Άγιος Βικέντιος και Γρεναδίνες"} + VE{"Βενεζουέλα"} + VG{"Βρετανικές Παρθένοι Νήσοι"} + VI{"Αμερικανικές Παρθένοι Νήσοι"} + VN{"Βιετνάμ"} + VU{"Βανουάτου"} + WF{"Νήσοι Ουαλλίς και Φουτουνά"} + WS{"Σαμόα"} + YE{"Υεμένη"} + YT{"Μαγιότ"} + ZA{"Νότια Αφρική"} + ZM{"Ζάμπια"} + ZW{"Ζιμπάμπουε"} + } + Currencies{ + ADP{ + "ADP", + "Πεσέτα Ανδόρας", + } + AED{ + "AED", + "Ντιράμ Ηνωμένων Αραβικών Εμιράτων", + } + ALL{ + "lek", + "Λεκ Αλβανίας", + } + AMD{ + "dram", + "Dram Αρμενίας", + } + ANG{ + "NA f.", + "Γκίλντα Ολλανδικών Αντιλλών", + } + AOA{ + "AOA", + "Kwanza Ανγκόλας", + } + AOK{ + "AOK", + "Kwanza Ανγκόλας (1977-1990)", + } + AON{ + "AON", + "Νέα Kwanza Ανγκόλας (1990-2000)", + } + AOR{ + "AOR", + "Kwanza Reajustado Ανγκόλας (1995-1999)", + } + ARA{ + "ARA", + "Austral Αργεντινής", + } + ARP{ + "ARP", + "Πέσο Αργεντινής (1983-1985)", + } + ARS{ + "Arg$", + "Πέσο Αργεντινής", + } + ATS{ + "ATS", + "Σελίνι Αυστρίας", + } + AUD{ + "$A", + "Δολάριο Αυστραλίας", + } + AWG{ + "AWG", + "Γκίλντα Αρούμπα", + } + AZM{ + "AZM", + "Μανάτ Αζερμπαϊτζάν", + } + BAD{ + "BAD", + "Δηνάριο Βοσνίας-Ερζεγοβίνης", + } + BAM{ + "KM", + "Μάρκο Βοσνίας-Ερζεγοβίνης", + } + BBD{ + "BDS$", + "Δολάριο Μπαρμπάντος", + } + BDT{ + "Tk", + "Τάκα Μπαγκλαντές", + } + BEC{ + "BEC", + "Φράγκο Βελγίου (μετατρέψιμο)", + } + BEF{ + "BF", + "Φράγκο Βελγίου", + } + BEL{ + "BEL", + "Φράγκο Βελγίου (οικονομικό)", + } + BGL{ + "lev", + "Μεταλλικό Λεβ Βουλγαρίας", + } + BGN{ + "BGN", + "Νέο Λεβ Βουλγαρίας", + } + BHD{ + "BD", + "Δηνάριο Bahraini", + } + BIF{ + "Fbu", + "Φράγκο Burundi", + } + BMD{ + "Ber$", + "Δολάριο Βερμούδων", + } + BND{ + "BND", + "Δολάριο Brunei", + } + BOP{ + "BOP", + "Πέσο Βολιβίας", + } + BOV{ + "BOV", + "Mvdol Βολιβίας", + } + BRB{ + "BRB", + "Νέο Cruzeiro Βραζιλίας (1967-1986)", + } + BRC{ + "BRC", + "Cruzado Βραζιλίας", + } + BRE{ + "BRE", + "Cruzeiro Βραζιλίας (1990-1993)", + } + BRL{ + "R$", + "Real Βραζιλίας", + } + BRN{ + "BRN", + "Νέο Cruzado Βραζιλίας", + } + BRR{ + "BRR", + "Cruzeiro Βραζιλίας", + } + BSD{ + "BSD", + "Δολάριο Μπαχάμες", + } + BTN{ + "Nu", + "Ngultrum Μπουτάν", + } + BUK{ + "BUK", + "Kyat Βιρμανίας", + } + BWP{ + "BWP", + "Pula Μποτσουάνα", + } + BYB{ + "BYB", + "Νέο Ρούβλι Λευκορωσίας (1994-1999)", + } + BYR{ + "Rbl", + "Ρούβλι Λευκορωσίας", + } + BZD{ + "BZ$", + "Δολάριο Belize", + } + CAD{ + "Can$", + "Δολάριο Καναδά", + } + CDF{ + "CDF", + "Φράγκο Congolais Κονγκό", + } + CHF{ + "SwF", + "Φράγκο Ελβετίας", + } + CLF{ + "CLF", + "Unidades de Fomento Χιλής", + } + CLP{ + "Ch$", + "Πέσο Χιλής", + } + CNY{ + "Y", + "Yuan Renminbi Κίνας", + } + COP{ + "Col$", + "Πέσο Κολομβίας", + } + CRC{ + "C", + "Colon Κόστα Ρίκα", + } + CSK{ + "CSK", + "Σκληρή Κορόνα Τσεχοσλοβακίας", + } + CUP{ + "CUP", + "Πέσο Κούβας", + } + CVE{ + "CVEsc", + "Εσκούδο Πράσινου Ακρωτηρίου", + } + CYP{ + "£", + "Λίρα Κύπρου", + } + CZK{ + "CZK", + "Κορόνα Τσέχικης Δημοκρατίας", + } + DDM{ + "DDM", + "Ostmark Ανατολικής Γερμανίας", + } + DEM{ + "DEM", + "Μάρκο Γερμανίας", + } + DJF{ + "DF", + "Φράγκο Τζιμπουτί", + } + DKK{ + "DKr", + "Κορόνα Δανίας", + } + DOP{ + "RD$", + "Πέσο Δομίνικου", + } + DZD{ + "DA", + "Δηνάριο Αλγερίας", + } + ECS{ + "ECS", + "Sucre Ισημερινού", + } + ECV{ + "ECV", + "Unidad de Valor Constante (UVC) Ισημερινού", + } + EEK{ + "EEK", + "Κορόνα Εσθονίας", + } + EGP{ + "EGP", + "Λίρα Αιγύπτου", + } + ERN{ + "ERN", + "Eritrean Nakfa", + } + ESP{ + "ESP", + "Πεσέτα Ισπανίας", + } + ETB{ + "Br", + "Birr Αιθιοπίας", + } + EUR{ + "€", + "Ευρώ", + } + FIM{ + "FIM", + "Μάρκο Φινλανδίας", + } + FJD{ + "F$", + "Δολάριο Φίτζι", + } + FKP{ + "FKP", + "Λίρα Νησιών Φώλκλαντ", + } + FRF{ + "FRF", + "Φράγκο Γαλλίας", + } + GBP{ + "GBP", + "Λίρα Στερλίνα Βρετανίας", + } + GEK{ + "GEK", + "Kupon Larit Γεωργίας", + } + GEL{ + "lari", + "Lari Γεωργίας", + } + GHC{ + "GHC", + "Cedi Γκάνας", + } + GIP{ + "GIP", + "Λίρα Γιβραλτάρ", + } + GMD{ + "GMD", + "Dalasi Γκάμπια", + } + GNF{ + "GF", + "Φράγκο Γουινέας", + } + GNS{ + "GNS", + "Syli Γουινέας", + } + GQE{ + "GQE", + "Ekwele Guineana Ισημερινής Γουινέας", + } + GRD{ + "Δρχ", + "Δραχμή Ελλάδας", + } + GTQ{ + "Q", + "Quetzal Γουατεμάλα", + } + GWE{ + "GWE", + "Γκινέα Εσκούδο Πορτογαλίας", + } + GWP{ + "GWP", + "Πέσο Guinea-Bissau", + } + GYD{ + "G$", + "Δολάριο Γουιάνας", + } + HKD{ + "HK$", + "Δολάριο Χονγκ Κονγκ", + } + HRD{ + "HRD", + "Δηνάριο Κροατίας", + } + HRK{ + "HRK", + "Kuna Δηνάριο", + } + HTG{ + "HTG", + "Gourde Αϊτής", + } + HUF{ + "Ft", + "Φιορίνι Ουγγαρίας", + } + IDR{ + "Rp", + "Ρούπια Ινδονησίας", + } + IEP{ + "IR£", + "Λίρα Ιρλανδίας", + } + ILP{ + "ILP", + "Λίρα Ισραήλ", + } + ILS{ + "ILS", + "Νέο Sheqel Ισραήλ", + } + INR{ + "INR", + "Ρούπια Ινδίας", + } + IQD{ + "ID", + "Δηνάριο Ιράκ", + } + IRR{ + "RI", + "Rial Ιράκ", + } + ISK{ + "ISK", + "Κορόνα Ισλανδίας", + } + ITL{ + "₤", + "Λιρέτα Ιταλίας", + } + JMD{ + "J$", + "Δολάριο Τζαμάικας", + } + JOD{ + "JD", + "Δηνάριο Ιορδανίας", + } + JPY{ + "Â¥", + "Γιεν Ιαπωνίας", + } + KES{ + "K Sh", + "Σελίνι Κένυας", + } + KHR{ + "CR", + "Riel Καμπότζης", + } + KMF{ + "CF", + "Φράγκο Comoro", + } + KPW{ + "KPW", + "Won Βόρειας Κορέας", + } + KRW{ + "KRW", + "Won Νότιας Κορέας", + } + KWD{ + "KD", + "Δηνάριο Κουβέιτ", + } + KYD{ + "KYD", + "Δολάριο Νήσων Κάιμαν", + } + KZT{ + "T", + "Tenge Καζακστάν", + } + LAK{ + "LAK", + "Kip Λάος", + } + LBP{ + "LL", + "Λίρα Λιβάνου", + } + LKR{ + "SL Re", + "Ρούπια Σρι Λάνκα", + } + LRD{ + "LRD", + "Δολάριο Λιβερίας", + } + LTL{ + "LTL", + "Lita Λιθουανίας", + } + LTT{ + "LTT", + "Talonas Λιθουανίας", + } + LUF{ + "LUF", + "Φράγκο Λουξεμβούργου", + } + LVL{ + "LVL", + "Lats Λετονίας", + } + LVR{ + "LVR", + "Ρούβλι Λετονίας", + } + LYD{ + "LD", + "Δηνάριο Λιβύης", + } + MAD{ + "MAD", + "Ντιράμ Μαρόκου", + } + MAF{ + "MAF", + "Φράγκο Μαρόκου", + } + MDL{ + "MDL", + "Λέι Μολδαβίας", + } + MGA{ + "MGA", + "Ariary Μαδαγασκάρης", + } + MGF{ + "MGF", + "Φράγκο Μαδαγασκάρης", + } + MKD{ + "MDen", + "Δηνάριο Π.Γ.Δ.Μ.", + } + MLF{ + "MLF", + "Φράγκο Μαλί", + } + MMK{ + "MMK", + "Kyat Μιανμάρ", + } + MNT{ + "Tug", + "Tugrik Μογγολίας", + } + MOP{ + "MOP", + "Pataca Μακάο", + } + MRO{ + "UM", + "Ouguiya Μαυριτανίας", + } + MTL{ + "Lm", + "Λιρέτα Μάλτας", + } + MTP{ + "MTP", + "Λίρα Μάλτας", + } + MUR{ + "MUR", + "Ρούπια Μαυρικίου", + } + MVR{ + "MVR", + "Rufiyaa Νήσων Μαλδίβων", + } + MWK{ + "MK", + "Kwacha Μαλάουι", + } + MXN{ + "MEX$", + "Πέσο Μεξικού", + } + MXP{ + "MXP", + "Ασημένιο Πέσο Μεξικού (1861-1992)", + } + MXV{ + "MXV", + "Unidad de Inversion (UDI) Μεξικού", + } + MYR{ + "RM", + "Ringgit Μαλαισίας", + } + MZE{ + "MZE", + "Εσκούδο Μοζαμβίκης", + } + MZM{ + "Mt", + "Metical Μοζαμβίκης", + } + NAD{ + "N$", + "Δολάριο Ναμίμπια", + } + NGN{ + "NGN", + "Naira Νιγηρίας", + } + NIC{ + "NIC", + "Κόρδοβα Νικαράγουας", + } + NIO{ + "NIO", + "Χρυσή Κόρδοβα Νικαράγουας", + } + NLG{ + "NLG", + "Γκίλντα Ολλανδίας", + } + NOK{ + "NKr", + "Κορόνα Νορβηγίας", + } + NPR{ + "Nrs", + "Ρούπια Νεπάλ", + } + NZD{ + "$NZ", + "Δολάριο Νέας Ζηλανδίας", + } + OMR{ + "RO", + "Rial Ομάν", + } + PAB{ + "PAB", + "Μπαλμπόα Παναμά", + } + PEI{ + "PEI", + "Inti Περού", + } + PEN{ + "PEN", + "Sol Nuevo Περού", + } + PES{ + "PES", + "Sol Περού", + } + PGK{ + "PGK", + "Kina Παπούα Νέα Γουινέα", + } + PHP{ + "PHP", + "Πέσο Φιλιππίνων", + } + PKR{ + "Pra", + "Ρούπια Πακιστάν", + } + PLN{ + "Zl", + "Ζλότυ Πολωνίας", + } + PLZ{ + "PLZ", + "Ζλότυ Πολωνίας (1950-1995)", + } + PTE{ + "PTE", + "Εσκούδο Πορτογαλίας", + } + PYG{ + "PYG", + "Γκουαρανί Παραγουάης", + } + QAR{ + "QR", + "Rial Κατάρ", + } + ROL{ + "leu", + "Λέι Ρουμανίας", + } + RUB{ + "RUB", + "Ρούβλι Ρωσίας", + } + RUR{ + "RUR", + "Ρούβλι Ρωσίας (1991-1998)", + } + RWF{ + "RWF", + "Φράγκο Ρουάντας", + } + SBD{ + "SI$", + "Δολάριο Νήσων Σολομώντος", + } + SCR{ + "SR", + "Ρούπια Σεϋχέλες", + } + SDD{ + "SDD", + "Δηνάριο Σουδάν", + } + SDP{ + "SDP", + "Λίρα Σουδάν", + } + SEK{ + "SKr", + "Κορόνα Σουηδίας", + } + SGD{ + "S$", + "Δολάριο Σιγκαπούρης", + } + SHP{ + "SHP", + "Λίρα Αγίας Ελένης", + } + SIT{ + "SIT", + "Tolar Σλοβενίας", + } + SKK{ + "Sk", + "Κορόνα Σλοβενίας", + } + SLL{ + "SLL", + "Leone Σιέρα Λεόνε", + } + SOS{ + "So. Sh.", + "Σελίνι Σομαλίας", + } + SRG{ + "Sf", + "Γκίλντα Σουρινάμ", + } + SUR{ + "SUR", + "Σοβιετικό Ρούβλι", + } + SVC{ + "SVC", + "Colon Ελ Σαλβαδόρ", + } + SYP{ + "LS", + "Λίρα Συρίας", + } + SZL{ + "E", + "Lilangeni Ζουαζιλάνδη", + } + THB{ + "THB", + "Μπατ Ταϊλάνδης", + } + TJR{ + "TJR", + "Ρούβλι Τατζικιστάν", + } + TJS{ + "TJS", + "Somoni Τατζικιστάν", + } + TMM{ + "TMM", + "Μανάτ Τουρκμενιστάν", + } + TND{ + "TND", + "Δηνάριο Τυνησίας", + } + TPE{ + "TPE", + "Εσκούδο Τιμόρ", + } + TRL{ + "TL", + "Λίρα Τουρκίας", + } + TRY{ + "TRY", + "Νέα Τουρκική Λίρα", + } + TTD{ + "TT$", + "Δολάριο Τρινιδάδ και Τομπάγκο", + } + TWD{ + "NT$", + "Νέο Δολάριο Ταϊβάν", + } + TZS{ + "T Sh", + "Σελίνι Τανζανίας", + } + UAH{ + "UAH", + "Hryvnia Ουκρανίας", + } + UAK{ + "UAK", + "Karbovanetz Ουκρανίας", + } + UGS{ + "UGS", + "Σελίνι Ουγκάντας (1966-1987)", + } + UGX{ + "U Sh", + "Σελίνι Ουγκάντας", + } + USD{ + "US$", + "Δολάριο ΗΠΑ", + } + USN{ + "USN", + "Δολάριο ΗΠΑ (Επόμενη Ημέρα)", + } + USS{ + "USS", + "Δολάριο ΗΠΑ (Ίδια Ημέρα)", + } + UYP{ + "UYP", + "Πέσο Ουρουγουάης (1975-1993)", + } + UYU{ + "Ur$", + "Πέσο Uruguayo Ουρουγουάης", + } + UZS{ + "UZS", + "Sum Ουζμπεκιστάν", + } + VEB{ + "Be", + "Μπολιβάλ Βενεζουέλας", + } + VND{ + "VND", + "Dong Βιετνάμ", + } + WST{ + "WST", + "Tala Δυτικής Σαμόα", + } + XAF{ + "XAF", + "Φράγκο BEAC CFA", + } + XAU{ + "XAU", + "Χρυσός", + } + XBA{ + "XBA", + "Ευρωπαϊκή Σύνθετη Μονάδα", + } + XBB{ + "XBB", + "Ευρωπαϊκή Νομισματική Μονάδα", + } + XBC{ + "XBC", + "Ευρωπαϊκή Μονάδα Λογαριασμού (XBC)", + } + XBD{ + "XBD", + "Ευρωπαϊκή Μονάδα Λογαριασμού (XBD)", + } + XCD{ + "EC$", + "Δολάριο Ανατολικής Καραϊβικής", + } + XDR{ + "XDR", + "Ειδικά Δικαιώματα Ανάληψης", + } + XEU{ + "XEU", + "Ευρωπαϊκή Συναλλαγματική Μονάδα", + } + XFO{ + "XFO", + "Χρυσό Φράγκο Γαλλίας", + } + XFU{ + "XFU", + "UIC-Φράγκο Γαλλίας", + } + XOF{ + "XOF", + "Φράγκο BCEAO CFA", + } + XPF{ + "CFPF", + "Φράγκο CFP", + } + YDD{ + "YDD", + "Δηνάριο Υεμένης", + } + YER{ + "YRl", + "Rial Υεμένης", + } + YUD{ + "YUD", + "Μεταλλικό Δηνάριο Γιουγκοσλαβίας", + } + YUM{ + "YUM", + "Νέο Δηνάριο Γιουγκοσλαβίας", + } + YUN{ + "YUN", + "Μετατρέψιμο Δηνάριο Γιουγκοσλαβίας", + } + ZAL{ + "ZAL", + "Ραντ Νότιας Αφρικής (οικονομικό)", + } + ZAR{ + "R", + "Ραντ Νότιας Αφρικής", + } + ZMK{ + "ZMK", + "Kwacha Ζάμπιας", + } + ZRN{ + "ZRN", + "Νέο Zaire Ζαΐρ", + } + ZRZ{ + "ZRZ", + "Zaire Ζαΐρ", + } + ZWD{ + "Z$", + "Δολάριο Ζιμπάμπουε", + } + } + ExemplarCharacters{"[α ά β-ε έ ζ η ή θ ι ί ϊ ΐ κ-ο ό π ρ σ ς τ υ ύ ϋ ΰ φ-ω ώ]"} + Keys{ + calendar{"Ημερολόγιο"} + collation{"Τακτοποίηση"} + currency{"Νόμισμα"} + } + Languages{ + ar{"Αραβικά"} + arc{"Αραμαϊκά"} + be{"Λευκορωσικά"} + bg{"Βουλγαρικά"} + bn{"Μπενγκάλι"} + bo{"Θιβετιανά"} + bs{"Βοσνιακά"} + ca{"Καταλανικά"} + co{"Κορσικανικά"} + cop{"Κοπτικά"} + cs{"Τσεχικά"} + cy{"Ουαλικά"} + da{"Δανικά"} + de{"Γερμανικά"} + egy{"Αιγυπτιακά (Αρχαία)"} + el{"Ελληνικά"} + en{"Αγγλικά"} + es{"Ισπανικά"} + et{"Εσθονικά"} + eu{"Βασκικά"} + fa{"Περσικά"} + fi{"Φινλανδικά"} + fr{"Γαλλικά"} + ga{"Ιρλανδικά"} + gd{"Σκωτικά Κελτικά"} + grc{"Ελληνικά, Αρχαία (έως 1453)"} + haw{"Χαβανεζικά"} + he{"Εβραϊκά"} + hi{"Χίντι"} + hr{"Κροατικά"} + hu{"Ουγγρικά"} + hy{"Αρμενικά"} + id{"Ινδονησιακά"} + ine{"Ινδοευρωπαϊκά (¨Αλλη)"} + ira{"Ιρανικά"} + is{"Ισλανδικά"} + it{"Ιταλικά"} + ja{"Ιαπωνικά"} + ka{"Γεωργιανά"} + ko{"Κορεατικά"} + la{"Λατινικά"} + lt{"Λιθουανικά"} + lv{"Λετονικά"} + mk{"Σλαβομακεδονικά"} + mn{"Μογγολικά"} + mo{"Μολδαβικά"} + mt{"Μαλτεζικά"} + mul{"Πολλαπλές Γλώσσες"} + nai{"Ινδιανικά Βόρειας Αμερικής (Άλλα)"} + nl{"Ολλανδικά"} + no{"Νορβηγικά"} + ota{"Τουρκικά, Οθωμανικά (1500-1928)"} + peo{"Αρχαία Περσικά (600-400 π.Χ.)"} + phi{"Φιλιππινέζικα (Άλλα)"} + phn{"Φοινικικά"} + pl{"Πολωνικά"} + pt{"Πορτογαλικά"} + ro{"Ρουμανικά"} + rom{"Ρωμανικά"} + ru{"Ρωσικά"} + sem{"Σημιτικά (Άλλα)"} + sh{"Σερβοκροατικά"} + sk{"Σλοβακικά"} + sl{"Σλοβενικά"} + sla{"Σλαβικά (Άλλα)"} + sq{"Αλβανικά"} + sr{"Σερβικά"} + sv{"Σουηδικά"} + th{"Ταϊλανδικά"} + tr{"Τουρκικά"} + uk{"Ουκρανικά"} + vi{"Βιετναμεζικά"} + yi{"Ιουδαϊκά"} + zh{"Κινεζικά"} + } + LocaleScript{ + "Grek", + } + NumberElements{ + ",", + ".", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Scripts{ + Arab{"Αραβικό"} + Armn{"Αρμενικό"} + Brai{"Μπράιγ"} + Copt{"Κοπτικό"} + Cprt{"Κυπριακό"} + Cyrl{"Κυριλλικό"} + Ethi{"Αιθιοπικό"} + Geor{"Γεωργιανό"} + Goth{"Γοτθικό"} + Grek{"Ελληνικό"} + Hebr{"Εβραϊκό"} + Latn{"Λατινικό"} + Mong{"Μογγολικό"} + Syrc{"Συριακό"} + Thai{"Ταϊλανδικό"} + Tibt{"Θιβετιανό"} + Zyyy{"Κοινό"} + } + Types{ + calendar{ + buddhist{"Βουδιστικό Ημερολόγιο"} + chinese{"Κινέζικο Ημερολόγιο"} + gregorian{"Γρηγοριανό Ημερολόγιο"} + hebrew{"Εβραϊκό Ημερολόγιο"} + islamic{"Ισλαμικό Ημερολόγιο"} + islamic-civil{"Ισλαμικό-Αστικό Ημερολόγιο"} + japanese{"Ιαπωνικό Ημερολόγιο"} + } + collation{ + direct{"Σειρά Direct"} + phonebook{"Σειρά Τηλεφωνικού Καταλόγου"} + pinyin{"Σειρά Pinyin"} + stroke{"Σειρά Stroke"} + traditional{"Παραδοσιακή"} + } + } + Version{"1.68"} + calendar{ + gregorian{ + AmPmMarkers{ + "ΠΜ", + "ΜΜ", + } + DateTimePatterns{ + "h:mm:ss a z", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + "EEEE, dd MMMM yyyy", + "dd MMMM yyyy", + "dd MMM yyyy", + "dd/MM/yyyy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Κυρ", + "Δευ", + "Τρι", + "Τετ", + "Πεμ", + "Παρ", + "Σαβ", + } + wide{ + "Κυριακή", + "Δευτέρα", + "Τρίτη", + "Τετάρτη", + "Πέμπτη", + "Παρασκευή", + "Σάββατο", + } + } + stand-alone{ + narrow{ + "Κ", + "Δ", + "Τ", + "Τ", + "Π", + "Π", + "Σ", + } + } + } + eras{ + abbreviated{ + "π.Χ.", + "μ.Χ.", + } + } + monthNames{ + format{ + abbreviated{ + "Ιαν", + "Φεβ", + "Μαρ", + "Απρ", + "Μαϊ", + "Ιουν", + "Ιουλ", + "Αυγ", + "Σεπ", + "Οκτ", + "Νοε", + "Δεκ", + } + narrow{ + "Ι", + "Φ", + "Μ", + "Α", + "Μ", + "Ι", + "Ι", + "Α", + "Σ", + "Ο", + "Ν", + "Δ", + } + wide{ + "Ιανουαρίου", + "Φεβρουαρίου", + "Μαρτίου", + "Απριλίου", + "Μαΐου", + "Ιουνίου", + "Ιουλίου", + "Αυγούστου", + "Σεπτεμβρίου", + "Οκτωβρίου", + "Νοεμβρίου", + "Δεκεμβρίου", + } + } + stand-alone{ + abbreviated{ + "Ιαν", + "Φεβ", + "Μαρ", + "Απρ", + "Μαϊ", + "Ιουν", + "Ιουλ", + "Αυγ", + "Σεπ", + "Οκτ", + "Νοε", + "Δεκ", + } + narrow{ + "Ι", + "Φ", + "Μ", + "Α", + "Μ", + "Ι", + "Ι", + "Α", + "Σ", + "Ο", + "Ν", + "Δ", + } + wide{ + "Ιανουάριος", + "Φεβρουάριος", + "Μάρτιος", + "Απρίλιος", + "Μάιος", + "Ιούνιος", + "Ιούλιος", + "Αύγουστος", + "Σεπτέμβριος", + "Οκτώβριος", + "Νοέμβριος", + "Δεκέμβριος", + } + } + } + quarters{ + format{ + wide{ + "1ο τρίμηνο", + "2ο τρίμηνο", + "3ο τρίμηνο", + "4ο τρίμηνο", + } + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Africa:Bamako"{ + ec{"Μπαμάκο"} + } + "Africa:Kinshasa"{ + ec{"Κινσάσα"} + } + "Africa:Timbuktu"{ + ec{"Τιμπουκτού"} + } + "America:Anchorage"{ + ec{"Άνκορατζ"} + } + "America:Buenos_Aires"{ + ec{"Μπουένος Άιρες"} + } + "America:Cancun"{ + ec{"Κανκούν"} + } + "America:Chicago"{ + ec{"Σικάγο"} + } + "America:Denver"{ + ec{"Ντένβερ"} + } + "America:Detroit"{ + ec{"Ντητρόιτ"} + } + "America:Indianapolis"{ + ec{"Ινδιανάπολη"} + } + "America:Los_Angeles"{ + ec{"Λος Άντζελες"} + } + "America:Manaus"{ + ec{"Μανάος"} + } + "America:Mexico_City"{ + ec{"Πόλη του Μεξικού"} + } + "America:Montreal"{ + ec{"Μόντρεαλ"} + } + "America:New_York"{ + ec{"Νέα Υόρκη"} + } + "America:Phoenix"{ + ec{"Φοίνιξ"} + } + "America:Santiago"{ + ec{"Σαντιάγκο"} + } + "America:Sao_Paulo"{ + ec{"Σάο Πάολο"} + } + "America:Tijuana"{ + ec{"Τιχουάνα"} + } + "America:Toronto"{ + ec{"Τορόντο"} + } + "America:Vancouver"{ + ec{"Βανκούβερ"} + } + "Asia:Irkutsk"{ + ec{"Ιρκούτσκ"} + } + "Asia:Jakarta"{ + ec{"Τζακάρτα"} + } + "Asia:Kuala_Lumpur"{ + ec{"Κουάλα Λουμπούρ"} + } + "Asia:Novosibirsk"{ + ec{"Νοβοσιμπίρσκ"} + } + "Asia:Omsk"{ + ec{"Ομσκ"} + } + "Asia:Samarkand"{ + ec{"Σαμαρκάνδη"} + } + "Asia:Shanghai"{ + ec{"Σανγκάη"} + } + "Asia:Ulaanbaatar"{ + ec{"Ουλάν Μπατόρ"} + } + "Asia:Vladivostok"{ + ec{"Βλαδιβοστόκ"} + } + "Atlantic:Azores"{ + ec{"Αζόρες"} + } + "Atlantic:Canary"{ + ec{"Κανάρια"} + } + "Atlantic:Madeira"{ + ec{"Μαδέρα"} + } + "Australia:Adelaide"{ + ec{"Αδελαΐδα"} + } + "Australia:Melbourne"{ + ec{"Μελβούρνη"} + } + "Australia:Sydney"{ + ec{"Σύδνεϊ"} + } + "Europe:Belfast"{ + ec{"Μπέλφαστ"} + } + "Europe:Kaliningrad"{ + ec{"Καλλίπολη"} + } + "Europe:Kiev"{ + ec{"Κίεβο"} + } + "Europe:Lisbon"{ + ec{"Λισσαβώνα"} + } + "Europe:London"{ + ec{"Λονδίνο"} + } + "Europe:Madrid"{ + ec{"Μαδρίτη"} + } + "Europe:Moscow"{ + ec{"Μόσχα"} + } + "Europe:Samara"{ + ec{"Σαμάρα"} + } + "Pacific:Auckland"{ + ec{"Όκλαντ"} + } + "Pacific:Galapagos"{ + ec{"Γκαλαπάγκος"} + } + "Pacific:Honolulu"{ + ec{"Χονολουλού"} + } + "Pacific:Tahiti"{ + ec{"Αϊτή"} + } + hourFormat{"+HHmm;-HHmm"} + } +} diff --git a/icuSources/data/locales/el_GR.txt b/icuSources/data/locales/el_GR.txt index dcc4b761..03e5e08a 100644 --- a/icuSources/data/locales/el_GR.txt +++ b/icuSources/data/locales/el_GR.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/el_GR.xml +// * Source File:/common/main/el_GR.xml // * // *************************************************************************** el_GR{ Currencies{ GRD{ "Δρχ", - "Δρχ", + "Δραχμή Ελλάδας", { "#,##0.00 ¤;-#,##0.00 ¤", ",", @@ -19,10 +19,16 @@ el_GR{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "#,##0.00¤;-¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.41"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } } diff --git a/icuSources/data/locales/en.txt b/icuSources/data/locales/en.txt index e4d7efd8..7341223b 100644 --- a/icuSources/data/locales/en.txt +++ b/icuSources/data/locales/en.txt @@ -1,16 +1,53 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en.xml +// * Source File:/common/main/en.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/en.xml + * ICU source: /xml/main/en.xml */ en{ + AuxExemplarCharacters{ + "[á à ă â Ã¥ ä ā æ ç é è ĕ ê ë ē í ì Ä­ î ï Ä« ñ ó ò ŏ ô ö ø ō œ ß ú ù Å­ û ü Å« ÿ" + "]" + } Countries{ + 001{"World"} + 002{"Africa"} + 003{"North America"} + 005{"South America"} + 009{"Oceania"} + 011{"Western Africa"} + 013{"Central America"} + 014{"Eastern Africa"} + 015{"Northern Africa"} + 017{"Middle Africa"} + 018{"Southern Africa"} + 019{"Americas"} + 021{"Northern America"} + 029{"Caribbean"} + 030{"Eastern Asia"} + 034{"Southern Asia"} + 035{"South-Eastern Asia"} + 039{"Southern Europe"} + 053{"Australia and New Zealand"} + 054{"Melanesia"} + 057{"Micronesian Region"} + 061{"Polynesia"} + 142{"Asia"} + 143{"Central Asia"} + 145{"Western Asia"} + 150{"Europe"} + 151{"Eastern Europe"} + 154{"Northern Europe"} + 155{"Western Europe"} + 172{"Commonwealth of Independent States"} + 200{"Czechoslovakia"} + 419{"Latin America and the Caribbean"} + 830{"Channel Islands"} AD{"Andorra"} AE{"United Arab Emirates"} AF{"Afghanistan"} @@ -26,6 +63,7 @@ en{ AT{"Austria"} AU{"Australia"} AW{"Aruba"} + AX{"Aland Islands"} AZ{"Azerbaijan"} BA{"Bosnia and Herzegovina"} BB{"Barbados"} @@ -48,17 +86,18 @@ en{ BZ{"Belize"} CA{"Canada"} CC{"Cocos (Keeling) Islands"} - CD{"Democratic Republic of the Congo"} + CD{"Congo (Kinshasa)"} CF{"Central African Republic"} - CG{"Congo"} + CG{"Congo (Brazzaville)"} CH{"Switzerland"} - CI{"Côte d’Ivoire"} + CI{"Ivory Coast"} CK{"Cook Islands"} CL{"Chile"} CM{"Cameroon"} CN{"China"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbia And Montenegro"} CU{"Cuba"} CV{"Cape Verde"} CX{"Christmas Island"} @@ -88,6 +127,7 @@ en{ GD{"Grenada"} GE{"Georgia"} GF{"French Guiana"} + GG{"Guernsey"} GH{"Ghana"} GI{"Gibraltar"} GL{"Greenland"} @@ -101,7 +141,7 @@ en{ GU{"Guam"} GW{"Guinea-Bissau"} GY{"Guyana"} - HK{"Hong Kong S.A.R., China"} + HK{"Hong Kong SAR China"} HM{"Heard Island and McDonald Islands"} HN{"Honduras"} HR{"Croatia"} @@ -110,12 +150,14 @@ en{ ID{"Indonesia"} IE{"Ireland"} IL{"Israel"} + IM{"Isle of Man"} IN{"India"} IO{"British Indian Ocean Territory"} IQ{"Iraq"} IR{"Iran"} IS{"Iceland"} IT{"Italy"} + JE{"Jersey"} JM{"Jamaica"} JO{"Jordan"} JP{"Japan"} @@ -150,7 +192,7 @@ en{ ML{"Mali"} MM{"Myanmar"} MN{"Mongolia"} - MO{"Macao S.A.R., China"} + MO{"Macao SAR China"} MP{"Northern Mariana Islands"} MQ{"Martinique"} MR{"Mauritania"} @@ -190,7 +232,9 @@ en{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} - RE{"Réunion"} + QO{"Outlying Oceania"} + QU{"European Union"} + RE{"Reunion"} RO{"Romania"} RU{"Russia"} RW{"Rwanda"} @@ -208,7 +252,6 @@ en{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Suriname"} ST{"Sao Tome and Principe"} SV{"El Salvador"} @@ -221,7 +264,7 @@ en{ TH{"Thailand"} TJ{"Tajikistan"} TK{"Tokelau"} - TL{"Timor-Leste"} + TL{"East Timor"} TM{"Turkmenistan"} TN{"Tunisia"} TO{"Tonga"} @@ -247,16 +290,12 @@ en{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Yugoslavia"} ZA{"South Africa"} ZM{"Zambia"} ZW{"Zimbabwe"} + ZZ{"Unknown or Invalid Region"} } Currencies{ - ADD{ - "ADD", - "Andorran Diner", - } ADP{ "ADP", "Andorran Peseta", @@ -273,26 +312,10 @@ en{ "Af", "Afghani", } - AIF{ - "AIF", - "Affars and Issas Franc", - } - ALK{ - "ALK", - "Albanian Lek (1946-1961)", - } ALL{ "lek", "Albanian Lek", } - ALV{ - "ALV", - "Albanian Lek Valute", - } - ALX{ - "ALX", - "Albanian Dollar Foreign Exchange Certificates", - } AMD{ "dram", "Armenian Dram", @@ -317,18 +340,10 @@ en{ "AOR", "Angolan Kwanza Reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolan Escudo", - } ARA{ "ARA", "Argentine Austral", } - ARM{ - "ARM", - "Argentine Peso Moneda Nacional", - } ARP{ "ARP", "Argentine Peso (1983-1985)", @@ -345,16 +360,16 @@ en{ "$A", "Australian Dollar", } - AUP{ - "AUP", - "Australian Pound", - } AWG{ "AWG", "Aruban Guilder", } AZM{ "AZM", + "Azerbaijanian Manat (1993-2006)", + } + AZN{ + "AZN", "Azerbaijanian Manat", } BAD{ @@ -365,10 +380,6 @@ en{ "KM", "Bosnia-Herzegovina Convertible Mark", } - BAN{ - "BAN", - "Bosnia-Herzegovina New Dinar", - } BBD{ "BDS$", "Barbados Dollar", @@ -393,22 +404,10 @@ en{ "lev", "Bulgarian Hard Lev", } - BGM{ - "BGM", - "Bulgarian Socialist Lev", - } BGN{ "BGN", "Bulgarian New Lev", } - BGO{ - "BGO", - "Bulgarian Lev (1879-1952)", - } - BGX{ - "BGX", - "Bulgarian Lev Foreign Exchange Certificates", - } BHD{ "BD", "Bahraini Dinar", @@ -421,10 +420,6 @@ en{ "Ber$", "Bermudan Dollar", } - BMP{ - "BMP", - "Bermudan Pound", - } BND{ "BND", "Brunei Dollar", @@ -433,10 +428,6 @@ en{ "Bs", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Bolivian Peso", @@ -469,34 +460,18 @@ en{ "BRR", "Brazilian Cruzeiro", } - BRZ{ - "BRZ", - "Brazilian Cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahamian Dollar", } - BSP{ - "BSP", - "Bahamian Pound", - } BTN{ "Nu", "Bhutan Ngultrum", } - BTR{ - "BTR", - "Bhutan Rupee", - } BUK{ "BUK", "Burmese Kyat", } - BUR{ - "BUR", - "Burmese Rupee", - } BWP{ "BWP", "Botswanan Pula", @@ -505,10 +480,6 @@ en{ "BYB", "Belarussian New Ruble (1994-1999)", } - BYL{ - "BYL", - "Belarussian Ruble (1992-1994)", - } BYR{ "Rbl", "Belarussian Ruble", @@ -517,10 +488,6 @@ en{ "BZ$", "Belize Dollar", } - BZH{ - "BZH", - "British Honduras Dollar", - } CAD{ "Can$", "Canadian Dollar", @@ -529,33 +496,17 @@ en{ "CDF", "Congolese Franc Congolais", } - CDG{ - "CDG", - "Congolese Republic Franc", - } - CDL{ - "CDL", - "Congolese Zaire", - } - CFF{ - "CFF", - "Central African Republic CFA Franc", + CHE{ + "CHE", + "WIR Euro", } CHF{ "SwF", "Swiss Franc", } - CKD{ - "CKD", - "Cook Islands Dollar", - } - CLC{ - "CLC", - "Chilean Condor", - } - CLE{ - "CLE", - "Chilean Escudo", + CHW{ + "CHW", + "WIR Franc", } CLF{ "CLF", @@ -565,41 +516,25 @@ en{ "Ch$", "Chilean Peso", } - CMF{ - "CMF", - "Cameroon CFA Franc", - } - CNP{ - "CNP", - "Chinese Jen Min Piao Yuan", - } - CNX{ - "CNX", - "Chinese US Dollar Foreign Exchange Certificates", - } CNY{ "Y", "Chinese Yuan Renminbi", } - COB{ - "COB", - "Colombian Paper Peso", - } - COF{ - "COF", - "Congo CFA Franc", - } COP{ "Col$", "Colombian Peso", } + COU{ + "COU", + "Unidad de Valor Real", + } CRC{ "C", "Costa Rican Colon", } - CSC{ - "CSC", - "Czechoslovak Koruna", + CSD{ + "CSD", + "Serbian Dinar", } CSK{ "CSK", @@ -609,18 +544,10 @@ en{ "CUP", "Cuban Peso", } - CUX{ - "CUX", - "Cuban Foreign Exchange Certificates", - } CVE{ "CVEsc", "Cape Verde Escudo", } - CWG{ - "CWG", - "Curacao Guilder", - } CYP{ "£C", "Cyprus Pound", @@ -637,10 +564,6 @@ en{ "DEM", "Deutsche Mark", } - DES{ - "DES", - "German Sperrmark", - } DJF{ "DF", "Djibouti Franc", @@ -657,14 +580,6 @@ en{ "DA", "Algerian Dinar", } - DZF{ - "DZF", - "Algerian New Franc", - } - DZG{ - "DZG", - "Algerian Franc Germinal", - } ECS{ "ECS", "Ecuador Sucre", @@ -681,10 +596,22 @@ en{ "EGP", "Egyptian Pound", } + EQE{ + "EQE", + "Ekwele", + } ERN{ "ERN", "Eritrean Nakfa", } + ESA{ + "ESA", + "Spanish Peseta (A account)", + } + ESB{ + "ESB", + "Spanish Peseta (convertible account)", + } ESP{ "₧", "Spanish Peseta", @@ -693,10 +620,6 @@ en{ "Br", "Ethiopian Birr", } - ETD{ - "ETD", - "Ethiopian Dollar", - } EUR{ "€", "Euro", @@ -705,38 +628,18 @@ en{ "FIM", "Finnish Markka", } - FIN{ - "FIN", - "Finnish Markka (1860-1962)", - } FJD{ "F$", "Fiji Dollar", } - FJP{ - "FJP", - "Fiji Pound", - } FKP{ "FKP", "Falkland Islands Pound", } - FOK{ - "FOK", - "Faeroe Islands Kronur", - } FRF{ "FRF", "French Franc", } - FRG{ - "FRG", - "French Franc Germinal/Franc Poincare", - } - GAF{ - "GAF", - "Gabon CFA Franc", - } GBP{ "£", "British Pound Sterling", @@ -753,86 +656,38 @@ en{ "GHC", "Ghana Cedi", } - GHO{ - "GHO", - "Ghana Old Cedi", - } - GHP{ - "GHP", - "Ghana Pound", - } - GHR{ - "GHR", - "Ghana Revalued Cedi", - } GIP{ "GIP", "Gibraltar Pound", } - GLK{ - "GLK", - "Greenland Krone", - } GMD{ "GMD", "Gambia Dalasi", } - GMP{ - "GMP", - "Gambia Pound", - } GNF{ "GF", "Guinea Franc", } - GNI{ - "GNI", - "Guinea Franc (1960-1972)", - } GNS{ "GNS", "Guinea Syli", } - GPF{ - "GPF", - "Guadeloupe Franc", - } GQE{ "GQE", "Equatorial Guinea Ekwele Guineana", } - GQF{ - "GQF", - "Equatorial Guinea Franco", - } - GQP{ - "GQP", - "Equatorial Guinea Peseta Guineana", - } GRD{ "GRD", "Greek Drachma", } - GRN{ - "GRN", - "Greek New Drachma", - } GTQ{ "Q", "Guatemala Quetzal", } - GUF{ - "GUF", - "French Guyana Franc Guiana", - } GWE{ "GWE", "Portuguese Guinea Escudo", } - GWM{ - "GWM", - "Portuguese Guinea Mil Reis", - } GWP{ "GWP", "Guinea-Bissau Peso", @@ -865,22 +720,6 @@ en{ "Ft", "Hungarian Forint", } - IBP{ - "IBP", - "Northern Irish Pound", - } - IDG{ - "IDG", - "Indonesian Nica Guilder", - } - IDJ{ - "IDJ", - "Indonesian Java Rupiah", - } - IDN{ - "IDN", - "Indonesian New Rupiah", - } IDR{ "Rp", "Indonesian Rupiah", @@ -889,10 +728,6 @@ en{ "IR£", "Irish Pound", } - ILL{ - "ILL", - "Israeli Sheqel", - } ILP{ "ILP", "Israeli Pound", @@ -901,10 +736,6 @@ en{ "ILS", "Israeli New Sheqel", } - IMP{ - "IMP", - "Isle of Man Pound Sterling", - } INR{ "=0#Rs.|1#Re.|1/common/main/en_AU.xml // * // *************************************************************************** en_AU{ @@ -13,11 +13,15 @@ en_AU{ "Australian Dollar", } } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a", "h:mm:ss a", "h:mm a", diff --git a/icuSources/data/locales/en_BE.txt b/icuSources/data/locales/en_BE.txt index 67a78d7e..0b1c4239 100644 --- a/icuSources/data/locales/en_BE.txt +++ b/icuSources/data/locales/en_BE.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_BE.xml +// * Source File:/common/main/en_BE.xml // * // *************************************************************************** en_BE{ @@ -29,16 +29,16 @@ en_BE{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.46"} calendar{ gregorian{ DateTimeElements:intvector{ diff --git a/icuSources/data/locales/en_BW.txt b/icuSources/data/locales/en_BW.txt index 95526a14..df32bad2 100644 --- a/icuSources/data/locales/en_BW.txt +++ b/icuSources/data/locales/en_BW.txt @@ -1,15 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_BW.xml +// * Source File:/common/main/en_BW.xml // * // *************************************************************************** en_BW{ - Version{"1.2"} + Version{"1.36"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/en_CA.txt b/icuSources/data/locales/en_CA.txt index c48536e0..1f0bfaf7 100644 --- a/icuSources/data/locales/en_CA.txt +++ b/icuSources/data/locales/en_CA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_CA.xml +// * Source File:/common/main/en_CA.xml // * // *************************************************************************** en_CA{ @@ -14,12 +14,12 @@ en_CA{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.46"} calendar{ gregorian{ DateTimeElements:intvector{ @@ -27,7 +27,7 @@ en_CA{ 4, } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a z", "h:mm:ss a", "h:mm a", diff --git a/icuSources/data/locales/en_GB.txt b/icuSources/data/locales/en_GB.txt index 32722dea..292f0cb4 100644 --- a/icuSources/data/locales/en_GB.txt +++ b/icuSources/data/locales/en_GB.txt @@ -1,19 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_GB.xml +// * Source File:/common/main/en_GB.xml // * // *************************************************************************** en_GB{ - Version{"1.2"} + Version{"1.47"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -27,14 +23,10 @@ en_GB{ } } } - zoneStrings{ - { - "Europe/London", - "Greenwich Mean Time", - "GMT", - "British Daylight Time", - "BDT", - "London", - } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} } } diff --git a/icuSources/data/locales/en_HK.txt b/icuSources/data/locales/en_HK.txt index d64826de..7d2d0cda 100644 --- a/icuSources/data/locales/en_HK.txt +++ b/icuSources/data/locales/en_HK.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_HK.xml +// * Source File:/common/main/en_HK.xml // * // *************************************************************************** en_HK{ @@ -18,16 +18,20 @@ en_HK{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a z", "h:mm:ss a", "h:mm a", diff --git a/icuSources/data/locales/en_IE.txt b/icuSources/data/locales/en_IE.txt index c805803e..4d0efc5e 100644 --- a/icuSources/data/locales/en_IE.txt +++ b/icuSources/data/locales/en_IE.txt @@ -1,25 +1,33 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_IE.xml +// * Source File:/common/main/en_IE.xml // * // *************************************************************************** en_IE{ Currencies{ + GBP{ + "GBP", + "British Pound Sterling", + } IEP{ "£", "Irish Pound", } } - Version{"1.2"} + Version{"1.45"} calendar{ gregorian{ AmPmMarkers{ "a.m.", "p.m.", } + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -33,14 +41,4 @@ en_IE{ } } } - zoneStrings{ - { - "Europe/Dublin", - "Greenwich Mean Time", - "GMT", - "Irish Summer Time", - "IST", - "Dublin", - } - } } diff --git a/icuSources/data/locales/en_IN.txt b/icuSources/data/locales/en_IN.txt index b1d21cc8..1eab5175 100644 --- a/icuSources/data/locales/en_IN.txt +++ b/icuSources/data/locales/en_IN.txt @@ -1,27 +1,23 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_IN.xml +// * Source File:/common/main/en_IN.xml // * // *************************************************************************** en_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.44"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a z", "h:mm:ss a", "h:mm a", diff --git a/icuSources/data/locales/en_MT.txt b/icuSources/data/locales/en_MT.txt index 02e9b00d..4a37427e 100644 --- a/icuSources/data/locales/en_MT.txt +++ b/icuSources/data/locales/en_MT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_MT.xml +// * Source File:/common/main/en_MT.xml // * // *************************************************************************** en_MT{ @@ -13,7 +13,7 @@ en_MT{ "British Pound Sterling", } } - Version{"1.2"} + Version{"1.43"} calendar{ gregorian{ DateTimeElements:intvector{ diff --git a/icuSources/data/locales/en_NZ.txt b/icuSources/data/locales/en_NZ.txt index cf36c0e3..97c5ec4f 100644 --- a/icuSources/data/locales/en_NZ.txt +++ b/icuSources/data/locales/en_NZ.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_NZ.xml +// * Source File:/common/main/en_NZ.xml // * // *************************************************************************** en_NZ{ @@ -13,11 +13,15 @@ en_NZ{ "New Zealand Dollar", } } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a", "h:mm:ss a", "h:mm a", diff --git a/icuSources/data/locales/en_PH.txt b/icuSources/data/locales/en_PH.txt index dfe2c92e..c68939a7 100644 --- a/icuSources/data/locales/en_PH.txt +++ b/icuSources/data/locales/en_PH.txt @@ -1,29 +1,33 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_PH.xml +// * Source File:/common/main/en_PH.xml // * // *************************************************************************** en_PH{ Currencies{ PHP{ - "PHP", + "Php", "Peso", } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.36"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a z", "h:mm:ss a", "h:mm a", diff --git a/icuSources/data/locales/en_PK.txt b/icuSources/data/locales/en_PK.txt index 4f86079a..d0628331 100644 --- a/icuSources/data/locales/en_PK.txt +++ b/icuSources/data/locales/en_PK.txt @@ -1,26 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_PK.xml +// * Source File:/common/main/en_PK.xml // * // *************************************************************************** en_PK{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - /** - * Draft - */ - Version{"1.2"} + Version{"1.21"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a z", "h:mm:ss a", "h:mm a", @@ -30,6 +31,11 @@ en_PK{ "dd/MM/yy", "{1} {0}", } + availableFormats{ + MMMMd{"d MMMM"} + MMdd{"dd/MM"} + yyyyMMMM{"MMMM yyyy"} + } } } } diff --git a/icuSources/data/locales/en_RH.txt b/icuSources/data/locales/en_RH.txt new file mode 100644 index 00000000..84bb7089 --- /dev/null +++ b/icuSources/data/locales/en_RH.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/icu-config.xml & build.xml +// * +// *************************************************************************** +en_RH{ + "%%ALIAS"{"en_ZW"} +} diff --git a/icuSources/data/locales/en_SG.txt b/icuSources/data/locales/en_SG.txt index 8f7863f6..f10fb5aa 100644 --- a/icuSources/data/locales/en_SG.txt +++ b/icuSources/data/locales/en_SG.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_SG.xml +// * Source File:/common/main/en_SG.xml // * // *************************************************************************** en_SG{ @@ -17,30 +17,24 @@ en_SG{ "USD", } } - Version{"1.2"} + Version{"1.43"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ - "h:mm:ss a z", + "h:mm:ss a v", "h:mm:ss a z", "h:mm:ss a", "h:mm a", - "EEEE, dd MMMM yyyy", - "dd MMMM yyyy", - "dd MMM yyyy", - "dd/MM/yyyy", + "EEEE, MMMM d, yyyy", + "MMMM d, yyyy", + "MMM d, yyyy", + "M/d/yy", "{1} {0}", } } } - zoneStrings{ - { - "Pacific/Guadalcanal", - "Singapore Standard Time", - "SST", - "Singapore Standard Time", - "SST", - "Singapore", - } - } } diff --git a/icuSources/data/locales/en_US.txt b/icuSources/data/locales/en_US.txt index 758febbe..f59312e7 100644 --- a/icuSources/data/locales/en_US.txt +++ b/icuSources/data/locales/en_US.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_US.xml +// * Source File:/common/main/en_US.xml // * // *************************************************************************** en_US{ @@ -15,7 +15,7 @@ en_US{ } MeasurementSystem:int{1} NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", @@ -24,5 +24,13 @@ en_US{ 279, 216, } - Version{"1.2"} + Version{"1.43"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/en_US_POSIX.txt b/icuSources/data/locales/en_US_POSIX.txt index 1f8ff776..ce7be0bc 100644 --- a/icuSources/data/locales/en_US_POSIX.txt +++ b/icuSources/data/locales/en_US_POSIX.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_US_POSIX.xml +// * Source File:/common/main/en_US_POSIX.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/en_US_POSIX.xml + * ICU source: /xml/main/en_US_POSIX.xml */ en_US_POSIX{ NumberElements{ @@ -25,13 +25,10 @@ en_US_POSIX{ "+", } NumberPatterns{ - "0.######;-0.######", - "¤ 0.00;-¤ 0.00", - "0%", + "#0.######", + "¤ #0.00", + "#0%", "0.000000E+000", } - Version{"1.2"} - boundaries{ - word{"word_POSIX"} - } + Version{"1.47"} } diff --git a/icuSources/data/locales/en_VI.txt b/icuSources/data/locales/en_VI.txt index 8cbaef39..3478694a 100644 --- a/icuSources/data/locales/en_VI.txt +++ b/icuSources/data/locales/en_VI.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_VI.xml +// * Source File:/common/main/en_VI.xml // * // *************************************************************************** en_VI{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.36"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/en_ZA.txt b/icuSources/data/locales/en_ZA.txt index a7001daf..16051fb4 100644 --- a/icuSources/data/locales/en_ZA.txt +++ b/icuSources/data/locales/en_ZA.txt @@ -1,15 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_ZA.xml +// * Source File:/common/main/en_ZA.xml // * // *************************************************************************** en_ZA{ - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/en_ZW.txt b/icuSources/data/locales/en_ZW.txt index adce5903..bffa3be4 100644 --- a/icuSources/data/locales/en_ZW.txt +++ b/icuSources/data/locales/en_ZW.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/en_ZW.xml +// * Source File:/common/main/en_ZW.xml // * // *************************************************************************** en_ZW{ @@ -13,9 +13,13 @@ en_ZW{ "Zimbabwean Dollar", } } - Version{"1.2"} + Version{"1.36"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/eo.txt b/icuSources/data/locales/eo.txt index fda34d00..fed2a9f7 100644 --- a/icuSources/data/locales/eo.txt +++ b/icuSources/data/locales/eo.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/eo.xml +// * Source File:/common/main/eo.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/eo.xml + * ICU source: /xml/main/eo.xml */ eo{ + AuxExemplarCharacters{"[q w-y]"} Countries{ AD{"Andoro"} AE{"Unuiĝintaj Arabaj Emirlandos"} @@ -198,7 +199,6 @@ eo{ SM{"San-Marino"} SN{"Senegalo"} SO{"Somalujo"} - SP{"Serbujo"} SR{"Surinamo"} ST{"Sao-Tomeo kaj Principeo"} SV{"Salvadoro"} @@ -237,7 +237,7 @@ eo{ ZM{"Zambio"} ZW{"Zimbabvo"} } - ExemplarCharacters{"[a-z ŭ ĉ ĝ ĥ ĵ ŝ]"} + ExemplarCharacters{"[a-c ĉ d-g ĝ h ĥ i j ĵ k-p r s ŝ t u ŭ v z]"} Languages{ aa{"afara"} ab{"abĥaza"} @@ -392,20 +392,16 @@ eo{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.52"} calendar{ gregorian{ AmPmMarkers{ "atm", "ptm", } - DateTimeElements:intvector{ - 2, - 4, - } DateTimePatterns{ "H'-a horo kaj 'm z", "HH:mm:ss z", @@ -477,7 +473,23 @@ eo{ } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "1a kvaronjaro", + "2a kvaronjaro", + "3a kvaronjaro", + "4a kvaronjaro", + } + } + } } } - localPatternChars{"GjMtkHmslTDUSnahKzJdugAZ"} + localPatternChars{"GjMtkHmslTDUSnahKzJdugAZvcL"} } diff --git a/icuSources/data/locales/es.txt b/icuSources/data/locales/es.txt index 9142d450..e7a03136 100644 --- a/icuSources/data/locales/es.txt +++ b/icuSources/data/locales/es.txt @@ -1,16 +1,46 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es.xml +// * Source File:/common/main/es.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/es.xml + * ICU source: /xml/main/es.xml */ es{ + AuxExemplarCharacters{"[ü]"} Countries{ + 001{"Mundo"} + 002{"África"} + 005{"Suramérica"} + 009{"Oceanía"} + 011{"África occidental"} + 013{"Centroamérica"} + 014{"África oriental"} + 015{"África septentrional"} + 017{"África central"} + 018{"África meridional"} + 019{"Américas"} + 021{"Norteamérica"} + 029{"Caribe"} + 030{"Asia oriental"} + 034{"Asia meridional"} + 035{"Sudeste asiático"} + 039{"Europa meridional"} + 053{"Australia y Nueva Zelanda"} + 054{"Melanesia"} + 057{"Micronesia [057]"} + 061{"Polinesia"} + 142{"Asia"} + 143{"Asia central"} + 145{"Asia occidental"} + 150{"Europa"} + 151{"Europa oriental"} + 154{"Europa septentrional"} + 155{"Europa occidental"} + 419{"Latinoamérica y el Caribe"} AD{"Andorra"} AE{"Emiratos Árabes Unidos"} AF{"Afganistán"} @@ -26,6 +56,7 @@ es{ AT{"Austria"} AU{"Australia"} AW{"Aruba"} + AX{"Islas Åland"} AZ{"Azerbaiyán"} BA{"Bosnia-Herzegovina"} BB{"Barbados"} @@ -33,7 +64,7 @@ es{ BE{"Bélgica"} BF{"Burkina Faso"} BG{"Bulgaria"} - BH{"Bahráin"} + BH{"Bahréin"} BI{"Burundi"} BJ{"Benín"} BM{"Bermudas"} @@ -59,6 +90,7 @@ es{ CN{"China"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbia y Montenegro"} CU{"Cuba"} CV{"Cabo Verde"} CX{"Isla Navidad"} @@ -111,7 +143,7 @@ es{ IE{"Irlanda"} IL{"Israel"} IN{"India"} - IO{"Territorios Británico del Océano Índico"} + IO{"Territorio Británico del Océano Índico"} IQ{"Iraq"} IR{"Irán"} IS{"Islandia"} @@ -120,7 +152,7 @@ es{ JO{"Jordania"} JP{"Japón"} KE{"Kenia"} - KG{"Kirguizistán"} + KG{"Kirguistán"} KH{"Camboya"} KI{"Kiribati"} KM{"Comoras"} @@ -143,7 +175,7 @@ es{ LY{"Libia"} MA{"Marruecos"} MC{"Mónaco"} - MD{"Moldova"} + MD{"Moldavia"} MG{"Madagascar"} MH{"Islas Marshall"} MK{"Macedonia"} @@ -190,7 +222,8 @@ es{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} - RE{"Réunion"} + QO{"Territorios alejados de Oceanía"} + RE{"Reunión"} RO{"Rumanía"} RU{"Rusia"} RW{"Ruanda"} @@ -208,8 +241,7 @@ es{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} - SR{"Suriname"} + SR{"Surinam"} ST{"Santo Tomé y Príncipe"} SV{"El Salvador"} SY{"Siria"} @@ -247,16 +279,11 @@ es{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Yugoslavia"} ZA{"Sudáfrica"} ZM{"Zambia"} ZW{"Zimbabue"} } Currencies{ - ADD{ - "ADD", - "diner andorrano", - } ADP{ "ADP", "peseta andorrana", @@ -273,26 +300,10 @@ es{ "Af", "afgani", } - AIF{ - "AIF", - "franco de Affars e Issas", - } - ALK{ - "ALK", - "lek albanés (1946-1961)", - } ALL{ "lek", "lek albanés", } - ALV{ - "ALV", - "lek valute albanés", - } - ALX{ - "ALX", - "certificados de cambio albaneses en dólares", - } AMD{ "dram", "dram armenio", @@ -317,18 +328,10 @@ es{ "AOR", "kwanza reajustado angoleño (1995-1999)", } - AOS{ - "AOS", - "escudo angoleño", - } ARA{ "ARA", "austral argentino", } - ARM{ - "ARM", - "peso moneda nacional argentino", - } ARP{ "ARP", "peso argentino (1983-1985)", @@ -345,10 +348,6 @@ es{ "$A", "dólar australiano", } - AUP{ - "AUP", - "libra australiana", - } AWG{ "AWG", "florín de Aruba", @@ -363,11 +362,7 @@ es{ } BAM{ "KM", - "marco bosnio convertible", - } - BAN{ - "BAN", - "nuevo dinar bosnio", + "marco convertible de Bosnia-Herzegovina", } BBD{ "BDS$", @@ -393,22 +388,10 @@ es{ "lev", "lev fuerte búlgaro", } - BGM{ - "BGM", - "lev socialista búlgaro", - } BGN{ "BGN", "nuevo lev búlgaro", } - BGO{ - "BGO", - "lev búlgaro (1879-1952)", - } - BGX{ - "BGX", - "certificados de cambio búlgaros en leva", - } BHD{ "BD", "dinar bahreiní", @@ -421,10 +404,6 @@ es{ "Ber$", "dólar de Bermudas", } - BMP{ - "BMP", - "libra de Bermudas", - } BND{ "BND", "dólar de Brunéi", @@ -433,10 +412,6 @@ es{ "Bs", "boliviano", } - BOL{ - "BOL", - "boliviano (1863-1962)", - } BOP{ "BOP", "peso boliviano", @@ -469,34 +444,18 @@ es{ "BRR", "cruceiro brasileño", } - BRZ{ - "BRZ", - "cruceiro brasileño (1942-1967)", - } BSD{ "BSD", "dólar de las Bahamas", } - BSP{ - "BSP", - "libra de las Bahamas", - } BTN{ "Nu", "ngultrum butanés", } - BTR{ - "BTR", - "rupia butanesa", - } BUK{ "BUK", "kyat birmano", } - BUR{ - "BUR", - "rupia birmana", - } BWP{ "BWP", "pula botsuano", @@ -505,10 +464,6 @@ es{ "BYB", "nuevo rublo bielorruso (1994-1999)", } - BYL{ - "BYL", - "rublo bielorruso (1992-1994)", - } BYR{ "Rbl", "rublo bielorruso", @@ -517,10 +472,6 @@ es{ "BZ$", "dólar de Belice", } - BZH{ - "BZH", - "dólar de Honduras Británica", - } CAD{ "Can$", "dólar canadiense", @@ -529,34 +480,10 @@ es{ "CDF", "franco congoleño", } - CDG{ - "CDG", - "franco de la República del Congo", - } - CDL{ - "CDL", - "zaire congoleño", - } - CFF{ - "CFF", - "franco CFA de la República Centroafricana", - } CHF{ "SwF", "franco suizo", } - CKD{ - "CKD", - "dólar de las Islas Cook", - } - CLC{ - "CLC", - "cóndor chileno", - } - CLE{ - "CLE", - "escudo chileno", - } CLF{ "CLF", "unidad de fomento chilena", @@ -565,41 +492,25 @@ es{ "Ch$", "peso chileno", } - CMF{ - "CMF", - "franco CFA de Camerún", - } - CNP{ - "CNP", - "jen min piao yuan chino", - } - CNX{ - "CNX", - "certificados de cambio chinos en dólares estadounidenses", - } CNY{ "Y", "yuan renminbi chino", } - COB{ - "COB", - "peso de papel colombiano", - } - COF{ - "COF", - "franco CFA del Congo", - } COP{ "Col$", "peso colombiano", } + COU{ + "COU", + "unidad de valor real colombiana", + } CRC{ "C", "colón costarricense", } - CSC{ - "CSC", - "corona checoslovaca", + CSD{ + "CSD", + "dinar serbio", } CSK{ "CSK", @@ -609,18 +520,10 @@ es{ "CUP", "peso cubano", } - CUX{ - "CUX", - "certificados de cambio cubanos", - } CVE{ "CVEsc", "escudo de Cabo Verde", } - CWG{ - "CWG", - "florín de Curazao", - } CYP{ "£C", "libra chipriota", @@ -637,10 +540,6 @@ es{ "DEM", "marco alemán", } - DES{ - "DES", - "sperrmark alemán", - } DJF{ "DF", "franco de Yibuti", @@ -657,14 +556,6 @@ es{ "DA", "dinar argelino", } - DZF{ - "DZF", - "nuevo franco argelino", - } - DZG{ - "DZG", - "franco germinal argelino", - } ECS{ "ECS", "sucre ecuatoriano", @@ -685,6 +576,14 @@ es{ "ERN", "nakfa eritreo", } + ESA{ + "ESA", + "peseta española (cuenta A)", + } + ESB{ + "ESB", + "peseta española (cuenta convertible)", + } ESP{ "₧", "peseta española", @@ -693,10 +592,6 @@ es{ "Br", "birr etíope", } - ETD{ - "ETD", - "dólar etíope", - } EUR{ "€", "euro", @@ -705,38 +600,18 @@ es{ "FIM", "marco finlandés", } - FIN{ - "FIN", - "marco finlandés (1860-1962)", - } FJD{ "F$", "dólar de las Islas Fiyi", } - FJP{ - "FJP", - "libra de las Islas Fiyi", - } FKP{ "FKP", "libra de las Islas Malvinas", } - FOK{ - "FOK", - "corona de las Islas Feroe", - } FRF{ "FRF", "franco francés", } - FRG{ - "FRG", - "franco germinal/franco Poincaré francés", - } - GAF{ - "GAF", - "franco CFA de Gabón", - } GBP{ "£", "libra esterlina británica", @@ -753,86 +628,38 @@ es{ "GHC", "cedi ghanés", } - GHO{ - "GHO", - "antiguo cedi ghanés", - } - GHP{ - "GHP", - "libra ghanesa", - } - GHR{ - "GHR", - "cedi revaluado ghanés", - } GIP{ "GIP", "libra de Gibraltar", } - GLK{ - "GLK", - "corona de Groenlandia", - } GMD{ "GMD", "dalasi gambiano", } - GMP{ - "GMP", - "libra gambiana", - } GNF{ "GF", - "franco guineo", - } - GNI{ - "GNI", - "franco guineo (1960-1972)", + "franco guineano", } GNS{ "GNS", "syli guineano", } - GPF{ - "GPF", - "franco de Guadalupe", - } GQE{ "GQE", "ekuele de Guinea Ecuatorial", } - GQF{ - "GQF", - "franco de Guinea Ecuatorial", - } - GQP{ - "GQP", - "peseta guineana de Guinea Ecuatorial", - } GRD{ "GRD", "dracma griego", } - GRN{ - "GRN", - "nuevo dracma griego", - } GTQ{ "Q", "quetzal guatemalteco", } - GUF{ - "GUF", - "franco guayanés de la Guayana Francesa", - } GWE{ "GWE", "escudo de Guinea Portuguesa", } - GWM{ - "GWM", - "mil reis de Guinea Portuguesa", - } GWP{ "GWP", "peso de Guinea-Bissáu", @@ -863,23 +690,7 @@ es{ } HUF{ "Ft", - "forinto húngaro", - } - IBP{ - "IBP", - "libra de Irlanda del Norte", - } - IDG{ - "IDG", - "florín Nica indonesio", - } - IDJ{ - "IDJ", - "rupia Java indonesia", - } - IDN{ - "IDN", - "nueva rupia indonesia", + "florín húngaro", } IDR{ "Rp", @@ -889,10 +700,6 @@ es{ "IR£", "libra irlandesa", } - ILL{ - "ILL", - "sheqel israelí", - } ILP{ "ILP", "libra israelí", @@ -901,10 +708,6 @@ es{ "ILS", "nuevo sheqel israelí", } - IMP{ - "IMP", - "libra esterlina de la Isla de Man", - } INR{ "=0#Rs.|1#Re.|1/common/main/es_AR.xml // * // *************************************************************************** es_AR{ @@ -17,21 +17,7 @@ es_AR{ "Dólar Americano", } } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_BO.txt b/icuSources/data/locales/es_BO.txt index f0c37ba0..e9618ea7 100644 --- a/icuSources/data/locales/es_BO.txt +++ b/icuSources/data/locales/es_BO.txt @@ -1,27 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_BO.xml +// * Source File:/common/main/es_BO.xml // * // *************************************************************************** es_BO{ - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_CL.txt b/icuSources/data/locales/es_CL.txt index 6ed7ff5a..378bfded 100644 --- a/icuSources/data/locales/es_CL.txt +++ b/icuSources/data/locales/es_CL.txt @@ -1,12 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_CL.xml +// * Source File:/common/main/es_CL.xml // * // *************************************************************************** es_CL{ + Countries{ + 005{"Sudamérica"} + EH{"Sahara Occidental"} + TT{"Trinidad y Tobago"} + } Currencies{ CLP{ "$", @@ -17,27 +22,24 @@ es_CL{ "Dólar Americano", } } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;¤-#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Scripts{ + Bali{"balinés"} + } + Types{ + collation{ + phonebook{"orden de directorio telefónico"} + } + } + Variants{ + 1996{"Ortografía alemana de 1996"} + } + Version{"1.43"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_CO.txt b/icuSources/data/locales/es_CO.txt index e1cc026e..5cbb8f91 100644 --- a/icuSources/data/locales/es_CO.txt +++ b/icuSources/data/locales/es_CO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_CO.xml +// * Source File:/common/main/es_CO.xml // * // *************************************************************************** es_CO{ @@ -17,21 +17,7 @@ es_CO{ "Dólar Americano", } } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_CR.txt b/icuSources/data/locales/es_CR.txt index f21f597d..2ea5721a 100644 --- a/icuSources/data/locales/es_CR.txt +++ b/icuSources/data/locales/es_CR.txt @@ -1,27 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_CR.xml +// * Source File:/common/main/es_CR.xml // * // *************************************************************************** es_CR{ - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_DO.txt b/icuSources/data/locales/es_DO.txt index a493f215..cb47d77a 100644 --- a/icuSources/data/locales/es_DO.txt +++ b/icuSources/data/locales/es_DO.txt @@ -1,13 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_DO.xml +// * Source File:/common/main/es_DO.xml // * // *************************************************************************** es_DO{ - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_EC.txt b/icuSources/data/locales/es_EC.txt index 09f60f0c..96993e3b 100644 --- a/icuSources/data/locales/es_EC.txt +++ b/icuSources/data/locales/es_EC.txt @@ -1,33 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_EC.xml +// * Source File:/common/main/es_EC.xml // * // *************************************************************************** es_EC{ - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", + Currencies{ + USD{ + "$", + "dólar estadounidense", + } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;¤-#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.43"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_ES.txt b/icuSources/data/locales/es_ES.txt index 8692ac86..afa2eced 100644 --- a/icuSources/data/locales/es_ES.txt +++ b/icuSources/data/locales/es_ES.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_ES.xml +// * Source File:/common/main/es_ES.xml // * // *************************************************************************** es_ES{ @@ -18,27 +18,16 @@ es_ES{ } } } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Scripts{ + Ethi{"etíope"} + } + Version{"1.40"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_GT.txt b/icuSources/data/locales/es_GT.txt index 5d8f84b8..84fa5681 100644 --- a/icuSources/data/locales/es_GT.txt +++ b/icuSources/data/locales/es_GT.txt @@ -1,13 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_GT.xml +// * Source File:/common/main/es_GT.xml // * // *************************************************************************** es_GT{ - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_HN.txt b/icuSources/data/locales/es_HN.txt index cf070c1d..4ec06bda 100644 --- a/icuSources/data/locales/es_HN.txt +++ b/icuSources/data/locales/es_HN.txt @@ -1,13 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_HN.xml +// * Source File:/common/main/es_HN.xml // * // *************************************************************************** es_HN{ - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_MX.txt b/icuSources/data/locales/es_MX.txt index a583edf0..babdd54e 100644 --- a/icuSources/data/locales/es_MX.txt +++ b/icuSources/data/locales/es_MX.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_MX.xml +// * Source File:/common/main/es_MX.xml // * // *************************************************************************** es_MX{ @@ -17,7 +17,21 @@ es_MX{ "Dólar Americano", } } - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_NI.txt b/icuSources/data/locales/es_NI.txt index c5c6fc4e..3d36c8c3 100644 --- a/icuSources/data/locales/es_NI.txt +++ b/icuSources/data/locales/es_NI.txt @@ -1,13 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_NI.xml +// * Source File:/common/main/es_NI.xml // * // *************************************************************************** es_NI{ - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_PA.txt b/icuSources/data/locales/es_PA.txt index 71cb9ac5..96a13019 100644 --- a/icuSources/data/locales/es_PA.txt +++ b/icuSources/data/locales/es_PA.txt @@ -1,13 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_PA.xml +// * Source File:/common/main/es_PA.xml // * // *************************************************************************** es_PA{ - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.42"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_PE.txt b/icuSources/data/locales/es_PE.txt index 0415030f..e9adac6a 100644 --- a/icuSources/data/locales/es_PE.txt +++ b/icuSources/data/locales/es_PE.txt @@ -1,32 +1,11 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_PE.xml +// * Source File:/common/main/es_PE.xml // * // *************************************************************************** es_PE{ - NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;¤-#,##0.00", - "#,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimePatterns{ - "hh:mm:ss a z", - "hh:mm:ss a z", - "hh:mm:ss a", - "hh:mm a", - "EEEE d' de 'MMMM' de 'yyyy", - "d' de 'MMMM' de 'yyyy", - "dd/MM/yyyy", - "dd/MM/yy", - "{1} {0}", - } - } - } + Version{"1.43"} } diff --git a/icuSources/data/locales/es_PR.txt b/icuSources/data/locales/es_PR.txt index 77c18168..90d6e28e 100644 --- a/icuSources/data/locales/es_PR.txt +++ b/icuSources/data/locales/es_PR.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_PR.xml +// * Source File:/common/main/es_PR.xml // * // *************************************************************************** es_PR{ @@ -13,7 +13,21 @@ es_PR{ "Dólar Americano", } } - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.43"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_PY.txt b/icuSources/data/locales/es_PY.txt index 4e5a947a..865873e8 100644 --- a/icuSources/data/locales/es_PY.txt +++ b/icuSources/data/locales/es_PY.txt @@ -1,33 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_PY.xml +// * Source File:/common/main/es_PY.xml // * // *************************************************************************** es_PY{ - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤ #,##0;¤ -#,##0", + "#,##0.###", + "¤ #,##0.00;¤ -#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_SV.txt b/icuSources/data/locales/es_SV.txt index 68373008..b458f2eb 100644 --- a/icuSources/data/locales/es_SV.txt +++ b/icuSources/data/locales/es_SV.txt @@ -1,13 +1,27 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_SV.xml +// * Source File:/common/main/es_SV.xml // * // *************************************************************************** es_SV{ - Version{"1.2"} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_US.txt b/icuSources/data/locales/es_US.txt index 7f0ac42a..33845946 100644 --- a/icuSources/data/locales/es_US.txt +++ b/icuSources/data/locales/es_US.txt @@ -1,18 +1,32 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_US.xml +// * Source File:/common/main/es_US.xml // * // *************************************************************************** es_US{ MeasurementSystem:int{1} + NumberElements{ + ".", + ",", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } PaperSize:intvector{ 279, 216, } - Version{"1.2"} + Version{"1.49"} calendar{ gregorian{ DateTimeElements:intvector{ @@ -30,12 +44,6 @@ es_US{ "M/d/yy", "{1} {0}", } - weekend:intvector{ - 7, - 0, - 1, - 86400000, - } } } } diff --git a/icuSources/data/locales/es_UY.txt b/icuSources/data/locales/es_UY.txt index 4224cf3a..cf2ebb88 100644 --- a/icuSources/data/locales/es_UY.txt +++ b/icuSources/data/locales/es_UY.txt @@ -1,33 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_UY.xml +// * Source File:/common/main/es_UY.xml // * // *************************************************************************** es_UY{ - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", + Currencies{ + UYU{ + "$U", + "peso uruguayo", + } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤ #,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/es_VE.txt b/icuSources/data/locales/es_VE.txt index 8dd02f7e..37cf557c 100644 --- a/icuSources/data/locales/es_VE.txt +++ b/icuSources/data/locales/es_VE.txt @@ -1,33 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/es_VE.xml +// * Source File:/common/main/es_VE.xml // * // *************************************************************************** es_VE{ - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;¤ -#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/et.txt b/icuSources/data/locales/et.txt index b4dcb9ed..5126bb45 100644 --- a/icuSources/data/locales/et.txt +++ b/icuSources/data/locales/et.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/et.xml +// * Source File:/common/main/et.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/et.xml + * ICU source: /xml/main/et.xml */ et{ Countries{ @@ -59,6 +59,7 @@ et{ CN{"Hiina"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbia ja Montenegro"} CU{"Kuuba"} CV{"Cabo Verde"} CX{"Jõulusaar"} @@ -208,7 +209,6 @@ et{ SM{"San Marino"} SN{"Senegal"} SO{"Somaalia"} - SP{"Serbia"} SR{"Suriname"} ST{"Sao Tomé ja Principe"} SV{"El Salvador"} @@ -247,7 +247,6 @@ et{ WS{"Samoa"} YE{"Jeemen"} YT{"Mayotte"} - YU{"Jugoslaavia"} ZA{"Lõuna-Aafrika Vabariik"} ZM{"Sambia"} ZW{"Zimbabwe"} @@ -256,9 +255,20 @@ et{ EEK{ "kr", "EEK", + { + /** + * Duplicated from NumberPatterns resource + */ + "¤ #,##0.00", + ".", + /** + * Duplicated from NumberElements resource + */ + " ", + } } } - ExemplarCharacters{"[a-z õ ä ö ü š ž]"} + ExemplarCharacters{"[a-s š z ž t-w õ ä ö ü x y]"} Languages{ ar{"Araabia"} bg{"Bulgaaria"} @@ -305,16 +315,12 @@ et{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.56"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "H:mm:ss z", "H:mm:ss z", @@ -386,7 +392,23 @@ et{ } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + } + } + } } } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} } diff --git a/icuSources/data/locales/et_EE.txt b/icuSources/data/locales/et_EE.txt index b726b0de..c12e2266 100644 --- a/icuSources/data/locales/et_EE.txt +++ b/icuSources/data/locales/et_EE.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/et_EE.xml +// * Source File:/common/main/et_EE.xml // * // *************************************************************************** et_EE{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} } diff --git a/icuSources/data/locales/eu.txt b/icuSources/data/locales/eu.txt index 8427338e..56fd597d 100644 --- a/icuSources/data/locales/eu.txt +++ b/icuSources/data/locales/eu.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/eu.xml +// * Source File:/common/main/eu.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/eu.xml + * ICU source: /xml/main/eu.xml */ eu{ Countries{ @@ -30,6 +30,7 @@ eu{ CM{"Kamerun"} CN{"Txina"} CO{"Kolonbia"} + CS{"Serbia eta Montenegro"} CU{"Kuba"} CV{"Cabo Verde"} CY{"Zipre"} @@ -55,6 +56,7 @@ eu{ HR{"Kroazia"} HU{"Hungaria"} IE{"Irlanda"} + IN{"India"} IQ{"Irak"} IS{"Islandia"} IT{"Italia"} @@ -104,7 +106,6 @@ eu{ SI{"Eslovenia"} SK{"Eslovakia"} SL{"Sierra Leona"} - SP{"Serbia"} SR{"Surinam"} ST{"Sao Tomé eta Principe"} SY{"Siria"} @@ -132,9 +133,18 @@ eu{ } } } - ExemplarCharacters{"[a-zñç]"} + ExemplarCharacters{"[a-c ç d-n ñ o-z]"} Languages{ + de{"alemanera"} + en{"ingelera"} + es{"espainiera"} eu{"euskara"} + fr{"frantsesera"} + it{"italiera"} + ja{"japoniera"} + pt{"portugalera"} + ru{"errusiera"} + zh{"txinera"} } LocaleScript{ "Latn", @@ -150,10 +160,10 @@ eu{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.51"} calendar{ gregorian{ dayNames{ @@ -210,6 +220,22 @@ eu{ } } } + quarters{ + format{ + abbreviated{ + "Hh1", + "Hh2", + "Hh3", + "Hh4", + } + wide{ + "1. hiruhilekoa", + "2. hiruhilekoa", + "3. hiruhilekoa", + "4. hiruhilekoa", + } + } + } } } } diff --git a/icuSources/data/locales/eu_ES.txt b/icuSources/data/locales/eu_ES.txt index 3f1510e2..299cb995 100644 --- a/icuSources/data/locales/eu_ES.txt +++ b/icuSources/data/locales/eu_ES.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/eu_ES.xml +// * Source File:/common/main/eu_ES.xml // * // *************************************************************************** eu_ES{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", diff --git a/icuSources/data/locales/fa.txt b/icuSources/data/locales/fa.txt index ec79380d..a8ca7e08 100644 --- a/icuSources/data/locales/fa.txt +++ b/icuSources/data/locales/fa.txt @@ -1,599 +1,1613 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fa.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/fa.xml - */ -fa{ - Countries{ - AD{"آندورا"} - AE{"امارات متحده‌ی عربی"} - AF{"افغانستان"} - AG{"آنتیگوا و باربودا"} - AI{"آنگیل"} - AL{"آلبانی"} - AM{"ارمنستان"} - AN{"آنتیل هلند"} - AO{"آنگولا"} - AQ{"جنوبگان"} - AR{"آرژانتین"} - AS{"ساموای امریکا"} - AT{"اتریش"} - AU{"استرالیا"} - AW{"آروبا"} - AZ{"آذربایجان"} - BA{"بوسنی و هرزگوین"} - BB{"باربادوس"} - BD{"بنگلادش"} - BE{"بلژیک"} - BF{"بورکینافاسو"} - BG{"بلغارستان"} - BH{"بحرین"} - BI{"بوروندی"} - BJ{"بنین"} - BM{"برمودا"} - BN{"برونئی"} - BO{"بولیوی"} - BR{"برزیل"} - BS{"باهاما"} - BT{"بوتان"} - BV{"جزیره‌ی بووت"} - BW{"بوتسوانا"} - BY{"بیلوروسی"} - BZ{"بلیز"} - CA{"کانادا"} - CC{"جزایر کوکوس"} - CD{"جمهوری دموکراتیک کنگو"} - CF{"جمهوری افریقای مرکزی"} - CG{"کونگو"} - CH{"سوئیس"} - CI{"ساحل عاج"} - CK{"جزایر کوک"} - CL{"شیلی"} - CM{"کامرون"} - CN{"چین"} - CO{"کلمبیا"} - CR{"کاستاریکا"} - CU{"کوبا"} - CV{"کیپ ورد"} - CX{"جزیره‌ی کریسمس"} - CY{"قبرس"} - CZ{"جمهوری چک"} - DE{"آلمان"} - DJ{"جیبوتی"} - DK{"دانمارک"} - DM{"دومینیکا"} - DO{"جمهوری دومینیکن"} - DZ{"الجزایر"} - EC{"اکوادر"} - EE{"استونی"} - EG{"مصر"} - EH{"صحرای غربی"} - ER{"اریتره"} - ES{"اسپانیا"} - ET{"اتیوپی"} - FI{"فنلاند"} - FJ{"فیجی"} - FK{"جزایر فالکلند"} - FM{"میکرونزی"} - FO{"جزایر فارو"} - FR{"فرانسه"} - GA{"گابون"} - GB{"انگلستان"} - GD{"گرانادا"} - GE{"گرجستان"} - GF{"گویان فرانسه"} - GH{"غنا"} - GI{"گیبرالتار"} - GL{"گروئنلند"} - GM{"گامبیا"} - GN{"گینه"} - GP{"گوادلوپ"} - GQ{"گینه‌ی استوایی"} - GR{"یونان"} - GS{"جورجیای جنوبی و جزایر ساندویچ جنوبی"} - GT{"گواتمالا"} - GU{"گوام"} - GW{"گینه‌ی بیسائو"} - GY{"گویان"} - HM{"جزیره‌ی هرد و جزایر مک‌دونالد"} - HN{"هندوراس"} - HR{"کرواسی"} - HT{"هاییتی"} - HU{"مجارستان"} - ID{"اندونزی"} - IE{"ایرلند"} - IL{"اسرائیل"} - IN{"هند"} - IO{"مستعمره‌های انگلستان در اقیانوس هند"} - IQ{"عراق"} - IR{"ایران"} - IS{"ایسلند"} - IT{"ایتالیا"} - JM{"جامائیکا"} - JO{"اردن"} - JP{"ژاپن"} - KE{"کنیا"} - KG{"قرقیزستان"} - KH{"کامبوج"} - KI{"کیریباتی"} - KM{"کومورو"} - KN{"سنت کیتس و نویس"} - KP{"کره‌ی شمالی"} - KR{"کره‌ی جنوبی"} - KW{"کویت"} - KY{"جزایر کِیمن"} - KZ{"قزاقستان"} - LA{"لائوس"} - LB{"لبنان"} - LC{"سنت لوسیا"} - LI{"لیختن‌اشتاین"} - LK{"سری‌لانکا"} - LR{"لیبریا"} - LS{"لسوتو"} - LT{"لیتوانی"} - LU{"لوکزامبورگ"} - LV{"لتونی"} - LY{"لیبی"} - MA{"مراکش"} - MC{"موناکو"} - MD{"مولدووا"} - MG{"ماداگاسکار"} - MH{"جزایر مارشال"} - MK{"مقدونیه"} - ML{"مالی"} - MM{"میانمار"} - MN{"مغولستان"} - MP{"جزایر ماریانای شمالی"} - MQ{"مارتینیک"} - MR{"موریتانی"} - MS{"مونت‌سرات"} - MT{"مالت"} - MU{"موریتیوس"} - MV{"مالدیو"} - MW{"مالاوی"} - MX{"مکزیک"} - MY{"مالزی"} - MZ{"موزامبیک"} - NA{"نامیبیا"} - NC{"کالدونیای جدید"} - NE{"نیجر"} - NF{"جزیره‌ی نورفولک"} - NG{"نیجریه"} - NI{"نیکاراگوئه"} - NL{"هلند"} - NO{"نروژ"} - NP{"نپال"} - NR{"نائورو"} - NU{"نیوئه"} - NZ{"زلاند نو"} - OM{"عمان"} - PA{"پاناما"} - PE{"پرو"} - PF{"پلی‌نزی فرانسه"} - PG{"پاپوا گینه‌ی نو"} - PH{"فیلیپین"} - PK{"پاکستان"} - PL{"لهستان"} - PM{"سنت پیر و میکلون"} - PN{"پیتکایرن"} - PR{"پورتو ریکو"} - PT{"پرتغال"} - PW{"پالائو"} - PY{"پاراگوئه"} - QA{"قطر"} - RE{"ریونیون"} - RO{"رومانی"} - RU{"روسیه"} - RW{"رواندا"} - SA{"عربستان سعودی"} - SB{"جزایر سلیمان"} - SC{"سیشل"} - SD{"سودان"} - SE{"سوئد"} - SG{"سنگاپور"} - SH{"سنت هلن"} - SI{"اسلوونی"} - SJ{"اسوالبارد و جان ماین"} - SK{"اسلواکی"} - SL{"سیرالئون"} - SM{"سان مارینو"} - SN{"سنگال"} - SO{"سومالی"} - SP{"صربستان"} - SR{"سورینام"} - ST{"سائو تومه و پرینسیپه"} - SV{"السالوادور"} - SY{"سوریه"} - SZ{"سوازیلند"} - TC{"جزایر ترک و کایکوس"} - TD{"چاد"} - TF{"مستعمره‌های جنوبی فرانسه"} - TG{"توگو"} - TH{"تایلند"} - TJ{"تاجیکستان"} - TK{"توکلائو"} - TL{"تیمور شرقی"} - TM{"ترکمنستان"} - TN{"تونس"} - TO{"تونگا"} - TR{"ترکیه"} - TT{"ترینیداد و توباگو"} - TV{"تووالو"} - TW{"تایوان"} - TZ{"تانزانیا"} - UA{"اوکراین"} - UG{"اوگاندا"} - UM{"جزایر کوچک دورافتاده‌ی ایالات متحده"} - US{"ایالات متحده‌ی امریکا"} - UY{"اوروگوئه"} - UZ{"ازبکستان"} - VA{"واتیکان"} - VC{"سنت وینسنت و گرنادین"} - VE{"ونزوئلا"} - VG{"جزایر ویرجین انگلستان"} - VI{"جزایر ویرجین ایالات متحده"} - VN{"ویتنام"} - VU{"وانواتو"} - WF{"والیس و فیوتونا"} - WS{"ساموا"} - YE{"یمن"} - YT{"مایوت"} - YU{"یوگسلاوی"} - ZA{"افریقای جنوبی"} - ZM{"زامبیا"} - ZW{"زیمبابوه"} - } - Currencies{ - AFA{ - "افغانی", - "افغانی", - } - IRR{ - "﷼", - "IRR", - } - } - ExemplarCharacters{"[ء-ؤئ-غفقل-وً-ْٰٔپچژکگی‌‍‏‎]"} - Languages{ - aa{"آفاری"} - ab{"آبخازی"} - ae{"اوستایی"} - af{"آفریکانس"} - afa{"افریقا و آسیایی (غیره)"} - am{"امهری"} - ang{"انگلیسی باستان (حدود ۴۵۰-۱۱۰۰ م.)"} - apa{"زبان‌های آپاچیایی"} - ar{"عربی"} - arc{"آرامی"} - art{"ساخته‌گی (غیره)"} - as{"آسامی"} - aus{"زبان‌های استرالیایی"} - ay{"آیمارایی"} - az{"آذربایجانی"} - ba{"باشکیر"} - bal{"بلوچی"} - bat{"بالتیکی (غیره)"} - be{"بلوروسی"} - bg{"بلغاری"} - bh{"بیهاری"} - bho{"بوجپوری"} - bi{"بیسلاما"} - bn{"بنگالی"} - bo{"تبتی"} - bs{"بوسنیایی"} - ca{"کاتالونیایی"} - cai{"سرخ‌پوستی امریکای مرکزی (غیره)"} - ce{"چچنی"} - cel{"سلتی (غیره)"} - ch{"چامورویی"} - chr{"چروکی"} - cop{"قبطی"} - cs{"چکی"} - cu{"اسلاوی کلیسایی"} - cv{"چوواشی"} - cy{"ویلزی"} - da{"دانمارکی"} - dak{"داکوتایی"} - de{"آلمانی"} - dra{"دراویدی (غیره)"} - dum{"هلندی میانه (حدود ۱۰۵۰-۱۳۵۰ م.)"} - dz{"بوتانی"} - egy{"مصری (باستانی)"} - el{"یونانی"} - en{"انگلیسی"} - enm{"انگلیسی میانه (۱۱۰۰ -۱۵۰۰ م.)"} - eo{"اسپرانتو"} - es{"اسپانیایی"} - et{"استونیایی"} - eu{"باسکی"} - fa{"فارسی"} - fi{"فنلاندی"} - fj{"فیجیایی"} - fo{"فارویی"} - fr{"فرانسوی"} - frm{"فرانسوی میانه (حدود ۱۴۰۰-۱۶۰۰ م.)"} - fro{"فرانسوی قدیم (۸۴۲-حدود ۱۴۰۰ م.)"} - ga{"ایرلندی"} - gaa{"گا"} - gem{"ژرمنی (غیره)"} - gmh{"آلمانی علیای میانه (حدود ۱۰۵۰-۱۵۰۰)"} - gn{"گوارانی"} - goh{"آلمانی علیای باستان (حدود ۷۵۰-۱۰۵۰)"} - got{"گوتیک"} - grc{"یونانی کهن (تا ۱۴۵۳ م.)"} - gu{"گجراتی"} - gv{"مانی"} - ha{"هوسیایی"} - haw{"هاوائیایی"} - he{"عبری"} - hi{"هندی"} - hit{"هیتی"} - hr{"کرواتی"} - hu{"مجاری"} - hy{"ارمنی"} - hz{"هریرویی"} - ia{"میان‌زبان"} - id{"اندونزیایی"} - ik{"اینوپیک"} - inc{"هندیک (غیره)"} - ine{"هندوارودپایی"} - ira{"ایرانی"} - is{"ایسلندی"} - it{"ایتالیایی"} - iu{"اینوکیتوت"} - ja{"ژاپنی"} - jpr{"فارسی یهودی"} - jrb{"عربی یهودی"} - jv{"جاوه‌ای"} - ka{"گرجی"} - kk{"قزاقی"} - km{"خمری"} - kn{"کاناده‌ای"} - ko{"کره‌ای"} - kok{"کنکانی"} - ks{"کشمیری"} - ku{"کردی"} - kv{"کومیایی"} - kw{"کرنوالی"} - ky{"قرقیزی"} - la{"لاتینی"} - lb{"لتسه‌بورگیش"} - ln{"لینگالا"} - lo{"لائوسی"} - lt{"لیتوانیایی"} - lv{"لتونیایی"} - map{"آسترونیزیایی"} - mg{"مالاگاسیایی"} - mga{"ایرلندی میانه (۹۰۰-۱۲۰۰ م.)"} - mh{"مارشالی"} - mi{"مائوریایی"} - mis{"زبان‌های متفرقه"} - mk{"مقدونی"} - ml{"مالایالامی"} - mn{"مغولی"} - mo{"مولداویایی"} - moh{"موهاکی"} - mr{"مراتی"} - ms{"مالزیایی"} - mt{"مالتی"} - mul{"چندین زبان"} - my{"برمه‌ای"} - myn{"مایاییک"} - na{"نائورویی"} - nai{"سرخ‌پوستی امریکای شمالی (غیره)"} - nb{"بوکسمال نروژی"} - nd{"انده‌بله‌ای شمالی"} - nds{"آلمانی سفلی؛ ساکسون سفلب"} - ne{"نپالی"} - nl{"هلندی"} - nn{"نینورسک نروژی"} - no{"نروژی"} - nr{"انده‌بله‌ای جنوبی"} - nv{"ناواهویی"} - or{"اوریه‌ای"} - ota{"ترکی (امپراتوری عثمانی)"} - pa{"پنجابی"} - paa{"پاپوایی (غیره)"} - pal{"پهلوی"} - peo{"فارسی قدیم (حدود ۶۰۰-۴۰۰ ق.م.)"} - phi{"فیایپینی (غیره)"} - phn{"فنیقی"} - pi{"پالی"} - pl{"لهستانی"} - ps{"پشتو"} - pt{"پرتغالی"} - qu{"کچوایی"} - ro{"رومانیایی"} - root{"ریشه"} - ru{"روسی"} - rw{"کینیارواندایی"} - sa{"سنسکریت"} - sai{"سرخ‌پوستی امریکای جنوبی (غیره)"} - sc{"ساردینیایی"} - sco{"اسکاتلندی"} - sd{"سندی"} - sem{"سامی"} - sg{"سانگویی"} - sga{"ایرلندی باستان (تا ۹۰۰ م.)"} - sgn{"زبان‌های نشانه‌ای"} - sh{"صرب و کرواتی"} - si{"سینهالی"} - sit{"چین و تبتی (غیره)"} - sk{"اسلواکی"} - sl{"اسلووینیایی"} - sm{"ساموآیی"} - sn{"شونایی"} - so{"سومالیایی"} - sq{"آلبانیایی"} - sr{"صربی"} - st{"سوتویی جنوبی"} - su{"سوندایی"} - sux{"سومری"} - sv{"سوئدی"} - sw{"سواحلی"} - syr{"سریانی"} - ta{"تامیلی"} - te{"تلوگویی"} - tg{"تاجیکی"} - th{"تایلندی"} - ti{"تیگرینیایی"} - tk{"ترکمتی"} - tl{"تاگالوگی"} - tn{"تسوانایی"} - to{"تونگایی (جزایر تونگا)"} - tr{"ترکی"} - ts{"تسونگایی"} - tt{"تاتاری"} - tw{"توی‌یایی"} - ty{"تاهیتیایی"} - ug{"اویغوری"} - uk{"اوکراینی"} - und{"نامشخص"} - ur{"اردو"} - uz{"ازبکی"} - vi{"ویتنامی"} - vo{"ولاپوک"} - wo{"ولوفی"} - xh{"خوسایی"} - yi{"یدی"} - yo{"یوروبایی"} - zh{"چینی"} - zu{"زولویی"} - } - LocaleScript{ - "Arab", - } - Scripts{ - Arab{"عربی"} - Armn{"ارمنی"} - Beng{"بنگالی"} - Bopo{"بوپوموفو"} - Cher{"چروکیایی"} - Copt{"قبطی"} - Cyrl{"سیریلی"} - Deva{"دوناگری"} - Ethi{"اتیوپیایی"} - Geor{"گرجی"} - Goth{"گوتیک"} - Grek{"یونانی"} - Gujr{"گجراتی"} - Hang{"هانگول"} - Hani{"هان"} - Hebr{"عبری"} - Hira{"هیراگانا"} - Kana{"کاتاکانا"} - Khmr{"خمری"} - Knda{"کاناده‌ای"} - Laoo{"لائوسی"} - Latn{"لاتین"} - Mlym{"مالایالامی"} - Mong{"مغولی"} - Mymr{"میانمار"} - Orya{"اوریه‌ای"} - Qaai{"موروثی"} - Runr{"رونی"} - Syrc{"آسوری"} - Taml{"تامیل"} - Telu{"تلوگویی"} - Thai{"تایلندی"} - Tibt{"تبتی"} - Yiii{"یی"} - Zyyy{"مشترک"} - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "ق.ظ.", - "ب.ظ.", - } - DateTimePatterns{ - "HH:mm:ss (z)", - "HH:mm:ss (z)", - "HH:mm:ss", - "HH:mm", - "EEEE، d MMMM yyyy", - "d MMMM yyyy", - "yyyy/MM/d", - "yyyy/MM/d", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "ی.", - "د.", - "س.", - "چ.", - "پ.", - "ج.", - "ش.", - } - wide{ - "یک‌شنبه", - "دوشنبه", - "سه‌شنبه", - "چهارشنبه", - "پنج‌شنبه", - "جمعه", - "شنبه", - } - } - } - eras{ - abbreviated{ - "ق.م.", - "م.", - } - } - monthNames{ - format{ - abbreviated{ - "ژان", - "فور", - "مار", - "آور", - "مـه", - "ژون", - "ژوی", - "اوت", - "سپت", - "اکت", - "نوا", - "دسا", - } - wide{ - "ژانویه", - "فوریه", - "مارس", - "آوریل", - "مه", - "ژوئن", - "ژوئیه", - "اوت", - "سپتامبر", - "اکتبر", - "نوامبر", - "دسامبر", - } - } - } - } - } - zoneStrings{ - { - "Asia/Tehran", - "وقت استاندارد تهران", - "IRST", - "وقت تابستانی تهران", - "IRDT", - "تهران", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/fa.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/fa.xml + */ +fa{ + AuxExemplarCharacters{"[\u200C \u200D ٖ ٰ]"} + Countries{ + 001{"جهان"} + 002{"افریقا"} + 003{"امریکای شمالی"} + 005{"امریکای جنوبی"} + 009{"اقیانوسیه"} + 011{"غرب افریقا"} + 013{"امریکای مرکزی"} + 014{"شرق افریقا"} + 015{"شمال افریقا"} + 017{"مرکز افریقا"} + 018{"جنوب افریقا"} + 019{"امریکا"} + 021{"شمال امریکا"} + 029{"کارائیب"} + 030{"شرق آسیا"} + 034{"جنوب آسیا"} + 035{"جنوب شرقی آسیا"} + 039{"جنوب اروپا"} + 053{"استرالیا و زلاند نو"} + 061{"پلی‌نزی"} + 142{"آسیا"} + 143{"آسیای مرکزی"} + 145{"غرب آسیا"} + 150{"اروپا"} + 151{"شرق اروپا"} + 154{"شمال اروپا"} + 155{"غرب اروپا"} + 172{"کشورهای مستقل مشترک‌المنافع"} + 419{"امریکای لاتین و کارائیب"} + AD{"آندورا"} + AE{"امارات متحدهٔ عربی"} + AF{"افغانستان"} + AG{"آنتیگوا و باربودا"} + AI{"آنگیل"} + AL{"آلبانی"} + AM{"ارمنستان"} + AN{"آنتیل هلند"} + AO{"آنگولا"} + AQ{"جنوبگان"} + AR{"آرژانتین"} + AS{"ساموای امریکا"} + AT{"اتریش"} + AU{"استرالیا"} + AW{"آروبا"} + AZ{"جمهوری آذربایجان"} + BA{"بوسنی و هرزگوین"} + BB{"باربادوس"} + BD{"بنگلادش"} + BE{"بلژیک"} + BF{"بورکینافاسو"} + BG{"بلغارستان"} + BH{"بحرین"} + BI{"بوروندی"} + BJ{"بنین"} + BM{"برمودا"} + BN{"برونئی"} + BO{"بولیوی"} + BR{"برزیل"} + BS{"باهاما"} + BT{"بوتان"} + BV{"جزیرهٔ بووت"} + BW{"بوتسوانا"} + BY{"بیلوروسی"} + BZ{"بلیز"} + CA{"کانادا"} + CC{"جزایر کوکوس"} + CD{"جمهوری دموکراتیک کنگو"} + CF{"جمهوری افریقای مرکزی"} + CG{"کونگو"} + CH{"سوئیس"} + CI{"ساحل عاج"} + CK{"جزایر کوک"} + CL{"شیلی"} + CM{"کامرون"} + CN{"چین"} + CO{"کلمبیا"} + CR{"کاستاریکا"} + CS{"صربستان و مونته‌نگرو"} + CU{"کوبا"} + CV{"کیپ ورد"} + CX{"جزیرهٔ کریسمس"} + CY{"قبرس"} + CZ{"جمهوری چک"} + DE{"آلمان"} + DJ{"جیبوتی"} + DK{"دانمارک"} + DM{"دومینیکا"} + DO{"جمهوری دومینیکن"} + DZ{"الجزایر"} + EC{"اکوادر"} + EE{"استونی"} + EG{"مصر"} + EH{"صحرای غربی"} + ER{"اریتره"} + ES{"اسپانیا"} + ET{"اتیوپی"} + FI{"فنلاند"} + FJ{"فیجی"} + FK{"جزایر فالکلند"} + FM{"میکرونزی"} + FO{"جزایر فارو"} + FR{"فرانسه"} + GA{"گابون"} + GB{"بریتانیا"} + GD{"گرانادا"} + GE{"گرجستان"} + GF{"گویان فرانسه"} + GH{"غنا"} + GI{"گیبرالتار"} + GL{"گروئنلند"} + GM{"گامبیا"} + GN{"گینه"} + GP{"گوادلوپ"} + GQ{"گینهٔ استوایی"} + GR{"یونان"} + GS{"جورجیای جنوبی و جزایر ساندویچ جنوبی"} + GT{"گواتمالا"} + GU{"گوام"} + GW{"گینهٔ بیسائو"} + GY{"گویان"} + HK{"هنگ‌کنگ، ناحیهٔ ویژهٔ حکومتی چین"} + HM{"جزیرهٔ هرد و جزایر مک‌دونالد"} + HN{"هندوراس"} + HR{"کرواسی"} + HT{"هاییتی"} + HU{"مجارستان"} + ID{"اندونزی"} + IE{"ایرلند"} + IL{"اسرائیل"} + IN{"هند"} + IO{"مستعمره‌های انگلستان در اقیانوس هند"} + IQ{"عراق"} + IR{"ایران"} + IS{"ایسلند"} + IT{"ایتالیا"} + JM{"جامائیکا"} + JO{"اردن"} + JP{"ژاپن"} + KE{"کنیا"} + KG{"قرقیزستان"} + KH{"کامبوج"} + KI{"کیریباتی"} + KM{"کومورو"} + KN{"سنت کیتس و نویس"} + KP{"کرهٔ شمالی"} + KR{"کرهٔ جنوبی"} + KW{"کویت"} + KY{"جزایر کِیمن"} + KZ{"قزاقستان"} + LA{"لائوس"} + LB{"لبنان"} + LC{"سنت لوسیا"} + LI{"لیختن‌اشتاین"} + LK{"سری‌لانکا"} + LR{"لیبریا"} + LS{"لسوتو"} + LT{"لیتوانی"} + LU{"لوکزامبورگ"} + LV{"لتونی"} + LY{"لیبی"} + MA{"مراکش"} + MC{"موناکو"} + MD{"مولدووا"} + MG{"ماداگاسکار"} + MH{"جزایر مارشال"} + MK{"مقدونیه"} + ML{"مالی"} + MM{"میانمار"} + MN{"مغولستان"} + MO{"ماکائو، ناحیهٔ ویژهٔ حکومتی چین"} + MP{"جزایر ماریانای شمالی"} + MQ{"مارتینیک"} + MR{"موریتانی"} + MS{"مونت‌سرات"} + MT{"مالت"} + MU{"موریتیوس"} + MV{"مالدیو"} + MW{"مالاوی"} + MX{"مکزیک"} + MY{"مالزی"} + MZ{"موزامبیک"} + NA{"نامیبیا"} + NC{"کالدونیای جدید"} + NE{"نیجر"} + NF{"جزیرهٔ نورفولک"} + NG{"نیجریه"} + NI{"نیکاراگوئه"} + NL{"هلند"} + NO{"نروژ"} + NP{"نپال"} + NR{"نائورو"} + NU{"نیوئه"} + NZ{"زلاند نو"} + OM{"عمان"} + PA{"پاناما"} + PE{"پرو"} + PF{"پلی‌نزی فرانسه"} + PG{"پاپوا گینهٔ نو"} + PH{"فیلیپین"} + PK{"پاکستان"} + PL{"لهستان"} + PM{"سنت پیر و میکلون"} + PN{"پیتکایرن"} + PR{"پورتو ریکو"} + PS{"فلسطین"} + PT{"پرتغال"} + PW{"پالائو"} + PY{"پاراگوئه"} + QA{"قطر"} + RE{"ریونیون"} + RO{"رومانی"} + RU{"روسیه"} + RW{"رواندا"} + SA{"عربستان سعودی"} + SB{"جزایر سلیمان"} + SC{"سیشل"} + SD{"سودان"} + SE{"سوئد"} + SG{"سنگاپور"} + SH{"سنت هلن"} + SI{"اسلوونی"} + SJ{"اسوالبارد و جان ماین"} + SK{"اسلواکی"} + SL{"سیرالئون"} + SM{"سان مارینو"} + SN{"سنگال"} + SO{"سومالی"} + SR{"سورینام"} + ST{"سائو تومه و پرینسیپه"} + SV{"السالوادور"} + SY{"سوریه"} + SZ{"سوازیلند"} + TC{"جزایر ترک و کایکوس"} + TD{"چاد"} + TF{"مستعمره‌های جنوبی فرانسه"} + TG{"توگو"} + TH{"تایلند"} + TJ{"تاجیکستان"} + TK{"توکلائو"} + TL{"تیمور شرقی"} + TM{"ترکمنستان"} + TN{"تونس"} + TO{"تونگا"} + TR{"ترکیه"} + TT{"ترینیداد و توباگو"} + TV{"تووالو"} + TW{"تایوان"} + TZ{"تانزانیا"} + UA{"اوکراین"} + UG{"اوگاندا"} + UM{"جزایر کوچک دورافتادهٔ ایالات متحده"} + US{"ایالات متحدهٔ امریکا"} + UY{"اوروگوئه"} + UZ{"ازبکستان"} + VA{"واتیکان"} + VC{"سنت وینسنت و گرنادین"} + VE{"ونزوئلا"} + VG{"جزایر ویرجین انگلستان"} + VI{"جزایر ویرجین ایالات متحده"} + VN{"ویتنام"} + VU{"وانواتو"} + WF{"والیس و فیوتونا"} + WS{"ساموا"} + YE{"یمن"} + YT{"مایوت"} + ZA{"افریقای جنوبی"} + ZM{"زامبیا"} + ZW{"زیمبابوه"} + } + Currencies{ + AED{ + "AED", + "درهم امارات متحدهٔ عربی", + } + AFA{ + "AFA", + "افغانی قدیم", + } + AFN{ + "؋", + "افغانی", + } + ALL{ + "ALL", + "لک آلبانی", + } + ARS{ + "ARS", + "پزوی آرژانتین", + } + ATS{ + "ATS", + "شیلینگ اتریش", + } + AUD{ + "AUD", + "دلار استرالیا", + } + AZM{ + "AZM", + "منات جمهوری آذربایجان", + } + BAD{ + "BAD", + "دینار بوسنی و هرزگوین", + } + BBD{ + "BBD", + "دلار باربادوس", + } + BEF{ + "BEF", + "فرانک بلژیک", + } + BHD{ + "BHD", + "دینار بحرین", + } + BIF{ + "BIF", + "فرانک بوروندی", + } + BMD{ + "BMD", + "دلار برمودا", + } + BND{ + "BND", + "دلار برونئی", + } + BOP{ + "BOP", + "پزوی بولیوی", + } + BRL{ + "BRL", + "رئال برزیل", + } + BSD{ + "BSD", + "دلار باهاما", + } + BYR{ + "BYR", + "روبل بیلوروسی", + } + BZD{ + "BZD", + "دلار بلیز", + } + CAD{ + "CAD", + "دلار کانادا", + } + CHF{ + "CHF", + "فرانک سوئیس", + } + CLP{ + "CLP", + "پزوی شیلی", + } + CNY{ + "CNY", + "رنمینبی یوآن چین", + } + COP{ + "COP", + "پزوی کلمبیا", + } + CSD{ + "CSD", + "دینار صربستان", + } + CUP{ + "CUP", + "پزوی کوبا", + } + DEM{ + "DEM", + "مارک آلمان", + } + DKK{ + "DKK", + "کرون دانمارک", + } + DOP{ + "DOP", + "پزوی دومینیکا", + } + EUR{ + "€", + "یورو", + } + FJD{ + "FJD", + "دلار فیجی", + } + FRF{ + "FRF", + "فرانک فرانسه", + } + GBP{ + "£", + "پوند استرلینگ بریتانیا", + } + HUF{ + "HUF", + "فورینت مجارستان", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/fa_AF.xml +// * +// *************************************************************************** +fa_AF{ + AuxExemplarCharacters{"[ٖ ٰ \u200C \u200D ټ ځ څ ډ ړ ږ ښ ګ ڼ ي]"} + Countries{ + AD{"اندورا"} + AE{"امارات متحدهٔ عربی"} + AG{"انتیگوا و باربودا"} + AL{"البانیا"} + AO{"انگولا"} + AR{"ارجنتاین"} + AU{"آسترالیا"} + BA{"بوسنیا و هرزه‌گوینا"} + BD{"بنگله‌دیش"} + BE{"بلجیم"} + BG{"بلغاریا"} + BN{"برونی"} + BO{"بولیویا"} + BR{"برازیل"} + BS{"بهاماس"} + BY{"روسیهٔ سفید"} + CD{"جمهوری دموکراتیک کانگو"} + CF{"افریقای مرکزی"} + CG{"کانگو"} + CH{"سویس"} + CL{"چلی"} + CO{"کولمبیا"} + CR{"کاستریکا"} + CU{"کیوبا"} + DK{"دنمارک"} + EC{"اکوادور"} + EE{"استونیا"} + ER{"اریتریا"} + ES{"هسپانیه"} + ET{"ایتوپیا"} + FI{"فنلند"} + FM{"میکرونزیا"} + GD{"گرینادا"} + GN{"گینیا"} + GQ{"گینیا استوایی"} + GT{"گواتیمالا"} + GW{"گینیا بیسائو"} + GY{"گیانا"} + HN{"هاندوراس"} + HR{"کروشیا"} + HT{"هایتی"} + ID{"اندونیزیا"} + IE{"آیرلند"} + IS{"آیسلند"} + JP{"جاپان"} + KE{"کینیا"} + KG{"قرغزستان"} + KH{"کمپوچیا"} + KM{"کومور"} + KN{"سنت کیتس و نیویس"} + KP{"کوریای شمالی"} + KR{"کوریای جنوبی"} + LK{"سریلانکا"} + LS{"لیسوتو"} + LT{"لتوانیا"} + LV{"لاتویا"} + LY{"لیبیا"} + MG{"مادغاسکر"} + MN{"منگولیا"} + MR{"موریتانیا"} + MT{"مالتا"} + MX{"مکسیکو"} + MY{"مالیزیا"} + MZ{"موزمبیق"} + NG{"نیجریا"} + NI{"نیکاراگوا"} + NL{"هالند"} + NO{"ناروی"} + NP{"نیپال"} + NZ{"زیلاند جدید"} + PA{"پانامه"} + PE{"پیرو"} + PG{"پاپوا نیو گینیا"} + PL{"پولند"} + PT{"پرتگال"} + PY{"پاراگوای"} + RO{"رومانیا"} + RW{"روآندا"} + SB{"جزایر سلومون"} + SE{"سویدن"} + SG{"سینگاپور"} + SI{"سلونیا"} + SK{"سلواکیا"} + SL{"سیرالیون"} + SN{"سینیگال"} + SO{"سومالیه"} + ST{"سائو تومه و پرینسیپ"} + SV{"السلوادور"} + TJ{"تاجکستان"} + UA{"اکراین"} + US{"ایالات متحدهٔ امریکا"} + UY{"یوروگوای"} + VC{"سنت وینسنت و گرینادین"} + VE{"ونزویلا"} + WS{"ساموآی غربی"} + ZW{"زیمبابوی"} + } + Currencies{ + AUD{ + "AUD", + "دالر آسترالیا", + } + BND{ + "BND", + "دالر برونی", + } + BYR{ + "BYR", + "روبل روسیهٔ سفید", + } + CAD{ + "CAD", + "دالر کانادا", + } + CHF{ + "CHF", + "فرانک سویس", + } + DKK{ + "DKK", + "کرون دنمارک", + } + JPY{ + "¥", + "ین جاپان", + } + MXN{ + "MXN", + "پزوی مکسیکو", + } + NLG{ + "NLG", + "گیلدر هالند", + } + NOK{ + "NOK", + "کرون ناروی", + } + SEK{ + "SEK", + "کرون سویدن", + } + SGD{ + "SGD", + "دالر سینگاپور", + } + TJS{ + "TJS", + "سامانی تاجکستان", + } + USD{ + "$", + "دالر امریکا", + } + } + Languages{ + es{"هسپانوی"} + fa{"دری"} + fi{"فنلندی"} + ga{"آیرلندی"} + hr{"کروشیایی"} + id{"اندونیزیایی"} + is{"آیسلندی"} + it{"ایتالوی"} + ja{"جاپانی"} + ko{"کوریایی"} + ky{"قرغزی"} + mn{"مغلی"} + ne{"نیپالی"} + nl{"هالندی"} + no{"نارویژی"} + pl{"پولندی"} + pt{"پرتگالی"} + sv{"سویدنی"} + tg{"تاجکی"} + } + NumberElements{ + "٫", + "٬", + "؛", + "٪", + "۰", + "#", + "−", + "×۱۰^", + "‰", + "∞", + "NaN", + "+", + } + NumberPatterns{ + "#,##0.###;'‪'-#,##0.###'‬'", + "#,##0.00 ¤;'‪'-#,##0.00'‬' ¤", + "'‪'#,##0%'‬'", + "#E0", + } + Scripts{ + Mong{"مغلی"} + } + Version{"1.48"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + monthNames{ + format{ + abbreviated{ + "جنوری", + "فبروری", + "مارچ", + "اپریل", + "می", + "جون", + "جول", + "اگست", + "سپتمبر", + "اکتوبر", + "نومبر", + "دسمبر", + } + wide{ + "جنوری", + "فبروری", + "مارچ", + "اپریل", + "می", + "جون", + "جولای", + "اگست", + "سپتمبر", + "اکتوبر", + "نومبر", + "دسمبر", + } + } + stand-alone{ + narrow{ + "ج", + "ف", + "م", + "ا", + "م", + "ج", + "ج", + "ا", + "س", + "ا", + "ن", + "د", + } + } + } + weekend:intvector{ + 7, + 0, + 6, + 86400000, + } + } + persian{ + monthNames{ + format{ + wide{ + "حمل", + "ثور", + "جوزا", + "سرطان", + "اسد", + "سنبلهٔ", + "میزان", + "عقرب", + "قوس", + "جدی", + "دلو", + "حوت", + } + } + stand-alone{ + narrow{ + "ح", + "ث", + "ج", + "س", + "ا", + "س", + "م", + "ع", + "ق", + "ج", + "د", + "ح", + } + } + } + } + } +} diff --git a/icuSources/data/locales/fa_IR.txt b/icuSources/data/locales/fa_IR.txt index 5452c219..96b48f96 100644 --- a/icuSources/data/locales/fa_IR.txt +++ b/icuSources/data/locales/fa_IR.txt @@ -1,39 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fa_IR.xml +// * Source File:/common/main/fa_IR.xml // * // *************************************************************************** fa_IR{ - NumberElements{ - "٫", - "٬", - ";", - "٪", - "۰", - "#", - "-", - "×۱۰^", - "‰", - "∞", - "�", - "+", - } - NumberPatterns{ - "#,##0.###;−#,##0.###", - "#,##0 ¤;−#,##0 ¤", - "%#,##0", - "#E0", - } - Version{"1.2"} + Version{"1.45"} calendar{ gregorian{ DateTimeElements:intvector{ 7, 1, } + weekend:intvector{ + 7, + 0, + 6, + 86400000, + } } } } diff --git a/icuSources/data/locales/fi.txt b/icuSources/data/locales/fi.txt index c4062a4c..c908c925 100644 --- a/icuSources/data/locales/fi.txt +++ b/icuSources/data/locales/fi.txt @@ -1,16 +1,49 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fi.xml +// * Source File:/common/main/fi.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/fi.xml + * ICU source: /xml/main/fi.xml */ fi{ + AuxExemplarCharacters{"[á à ã č ç é è ë í ï ñ ô ř ú ü æ ø õ œ]"} Countries{ + 001{"maailma"} + 002{"Afrikka"} + 005{"Etelä-Amerikka"} + 009{"Oseania"} + 011{"Länsi-Afrikka"} + 013{"Väli-Amerikka"} + 014{"Itä-Afrikka"} + 015{"Pohjois-Afrikka"} + 017{"Keski-Afrikka"} + 018{"eteläinen Afrikka"} + 019{"Amerikka"} + 021{"Pohjois-Amerikka"} + 029{"Karibia"} + 030{"Itä-Aasia"} + 034{"Etelä-Aasia"} + 035{"Kaakkois-Aasia"} + 039{"Etelä-Eurooppa"} + 053{"Australia ja Uusi-Seelanti"} + 054{"Melanesia"} + 057{"Mikronesia"} + 061{"Polynesia"} + 142{"Aasia"} + 143{"Keski-Aasia"} + 145{"Länsi-Aasia"} + 150{"Eurooppa"} + 151{"Itä-Eurooppa"} + 154{"Pohjois-Eurooppa"} + 155{"Länsi-Eurooppa"} + 172{"Itsenäisten valtioiden yhteisö"} + 419{"Latinalainen Amerikka ja Karibia"} + 830{"Kanaalisaaret"} + 833{"Mansaari"} AD{"Andorra"} AE{"Arabiemiirikunnat"} AF{"Afganistan"} @@ -26,7 +59,8 @@ fi{ AT{"Itävalta"} AU{"Australia"} AW{"Aruba"} - AZ{"Azerbaidzan"} + AX{"Ahvenanmaa"} + AZ{"Azerbaidžan"} BA{"Bosnia ja Hertsegovina"} BB{"Barbados"} BD{"Bangladesh"} @@ -48,9 +82,9 @@ fi{ BZ{"Belize"} CA{"Kanada"} CC{"Kookossaaret"} - CD{"Kongon demokraattinen tasavalta"} + CD{"Kongo (Kinshasa)"} CF{"Keski-Afrikan tasavalta"} - CG{"Kongo"} + CG{"Kongo (Brazzaville)"} CH{"Sveitsi"} CI{"Norsunluurannikko"} CK{"Cookinsaaret"} @@ -59,11 +93,12 @@ fi{ CN{"Kiina"} CO{"Kolumbia"} CR{"Costa Rica"} + CS{"Serbia ja Montenegro"} CU{"Kuuba"} CV{"Kap Verde"} CX{"Joulusaari"} CY{"Kypros"} - CZ{"Tsekin tasavalta"} + CZ{"Tšekki"} DE{"Saksa"} DJ{"Djibouti"} DK{"Tanska"} @@ -78,13 +113,13 @@ fi{ ES{"Espanja"} ET{"Etiopia"} FI{"Suomi"} - FJ{"Fidzi"} + FJ{"Fidži"} FK{"Falklandinsaaret"} - FM{"Mikronesia"} + FM{"Mikronesian liittovaltio"} FO{"Färsaaret"} FR{"Ranska"} GA{"Gabon"} - GB{"Iso-Britannia"} + GB{"Britannia"} GD{"Grenada"} GE{"Georgia"} GF{"Ranskan Guayana"} @@ -101,8 +136,8 @@ fi{ GU{"Guam"} GW{"Guinea-Bissau"} GY{"Guyana"} - HK{"Hongkongin erityishallintoalue"} - HM{"Heard ja McDonaldinsaaret"} + HK{"Hongkong, Kiinan erityishallintoalue"} + HM{"Heard- ja McDonaldinsaaret"} HN{"Honduras"} HR{"Kroatia"} HT{"Haiti"} @@ -121,12 +156,12 @@ fi{ JP{"Japani"} KE{"Kenia"} KG{"Kirgisia"} - KH{"Kambodza"} + KH{"Kambodža"} KI{"Kiribati"} KM{"Komorit"} KN{"Saint Kitts ja Nevis"} KP{"Pohjois-Korea"} - KR{"Korean tasavalta"} + KR{"Etelä-Korea"} KW{"Kuwait"} KY{"Caymansaaret"} KZ{"Kazakstan"} @@ -150,7 +185,7 @@ fi{ ML{"Mali"} MM{"Myanmar"} MN{"Mongolia"} - MO{"Macaon erityishallintoalue"} + MO{"Macao, Kiinan erityishallintoalue"} MP{"Pohjois-Mariaanit"} MQ{"Martinique"} MR{"Mauritania"} @@ -190,6 +225,7 @@ fi{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"ulkomeri"} RE{"Réunion"} RO{"Romania"} RU{"Venäjä"} @@ -208,20 +244,19 @@ fi{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} - SR{"Suriname"} - ST{"Sao Tome ja Principe"} + SR{"Surinam"} + ST{"São Tomé ja Príncipe"} SV{"El Salvador"} SY{"Syyria"} SZ{"Swazimaa"} TC{"Turks- ja Caicossaaret"} - TD{"Tsad"} - TF{"Ranskan eteläiset alueet"} + TD{"Tšad"} + TF{"Ranskan ulkopuoliset eteläiset alueet"} TG{"Togo"} TH{"Thaimaa"} - TJ{"Tadzikistan"} + TJ{"Tadžikistan"} TK{"Tokelau"} - TL{"Timor-Leste"} + TL{"Itä-Timor"} TM{"Turkmenistan"} TN{"Tunisia"} TO{"Tonga"} @@ -247,16 +282,11 @@ fi{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoslavia"} ZA{"Etelä-Afrikka"} ZM{"Sambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorran dinaari", - } ADP{ "ADP", "Andorran peseta", @@ -267,38 +297,22 @@ fi{ } AFA{ "AFA", - "Afgaani (1927-2002)", + "Afganistanin afgaani (1927-2002)", } AFN{ - "Af", - "Afgaani", - } - AIF{ - "AIF", - "Affarsin ja Issasin frangi", - } - ALK{ - "ALK", - "Albanian lek (1946-1961)", + "AFN", + "Afganistanin afgaani", } ALL{ - "lek", + "ALL", "Albanian lek", } - ALV{ - "ALV", - "Albanian lek valute", - } - ALX{ - "ALX", - "Albanian dollarin FEC", - } AMD{ - "dram", + "AMD", "Armenian dram", } ANG{ - "NA f.", + "ANG", "Alankomaiden Antillien guldeni", } AOA{ @@ -317,38 +331,26 @@ fi{ "AOR", "Angolan kwanza reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolan escudo", - } ARA{ "ARA", "Argentiinan austral", } - ARM{ - "ARM", - "Argentiinan peso moneda nacional", - } ARP{ "ARP", "Argentiinan peso (1983-1985)", } ARS{ - "Arg$", + "ARS", "Argentiinan peso", } ATS{ "ATS", - "Itävallan shillinki", + "Itävallan šillinki", } AUD{ - "$A", + "AUD", "Australian dollari", } - AUP{ - "AUP", - "Australian punta", - } AWG{ "AWG", "Aruban guldeni", @@ -362,19 +364,15 @@ fi{ "Bosnia-Hertsegovinan dinaari", } BAM{ - "KM", + "BAM", "Bosnia-Hertsegovinan vaihdettava markka", } - BAN{ - "BAN", - "Bosnia-Hertsegovinan uusi dinaari", - } BBD{ - "BDS$", + "BBD", "Barbadosin dollari", } BDT{ - "Tk", + "BDT", "Bangladeshin taka", } BEC{ @@ -382,7 +380,7 @@ fi{ "Belgian frangi (vaihdettava)", } BEF{ - "BF", + "BEF", "Belgian frangi", } BEL{ @@ -390,52 +388,32 @@ fi{ "Belgian frangi (rahoitus)", } BGL{ - "lev", - "Bulgarian kova leva", - } - BGM{ - "BGM", - "Bulgarian sosialistinen lev", + "BGL", + "Bulgarian kova lev", } BGN{ "BGN", "Bulgarian uusi lev", } - BGO{ - "BGO", - "Bulgarian lev (1879-1952)", - } - BGX{ - "BGX", - "Bulgarian lev FEC", - } BHD{ - "BD", + "BHD", "Bahrainin dinaari", } BIF{ - "Fbu", + "BIF", "Burundin frangi", } BMD{ - "Ber$", + "BMD", "Bermudan dollari", } - BMP{ - "BMP", - "Bermudan punta", - } BND{ "BND", "Brunein dollari", } BOB{ - "Bs", - "Boliviano", - } - BOL{ - "BOL", - "Boliviano (1863-1962)", + "BOB", + "Bolivian boliviano", } BOP{ "BOP", @@ -443,7 +421,7 @@ fi{ } BOV{ "BOV", - "Bolivian mvdol", + "Bolivian MVDOL", } BRB{ "BRB", @@ -458,7 +436,7 @@ fi{ "Brasilian cruzeiro (1990-1993)", } BRL{ - "R$", + "BRL", "Brasilian real", } BRN{ @@ -469,34 +447,18 @@ fi{ "BRR", "Brasilian cruzeiro", } - BRZ{ - "BRZ", - "Brazilian cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahaman dollari", } - BSP{ - "BSP", - "Bahaman punta", - } BTN{ - "Nu", + "BTN", "Bhutanin ngultrum", } - BTR{ - "BTR", - "Bhutanin rupia", - } BUK{ "BUK", "Burman kyat", } - BUR{ - "BUR", - "Burman rupia", - } BWP{ "BWP", "Botswanan pula", @@ -505,101 +467,61 @@ fi{ "BYB", "Valko-Venäjän uusi rupla (1994-1999)", } - BYL{ - "BYL", - "Valko-Venäjän rupla (1992-1994)", - } BYR{ - "Rbl", + "BYR", "Valko-Venäjän rupla", } BZD{ - "BZ$", + "BZD", "Belizen dollari", } - BZH{ - "BZH", - "Brittiläisen Hondurasin dollari", - } CAD{ - "Can$", + "CAD", "Kanadan dollari", } CDF{ "CDF", - "Kongon kongolainen frangi", - } - CDG{ - "CDG", - "Kongon tasavallan frangi", + "Kongon frangi", } - CDL{ - "CDL", - "Kongon zaire", - } - CFF{ - "CFF", - "Keski-Afrikan tasavallan CFA-frangi", + CHE{ + "CHE", + "Sveitsin WIR-euro", } CHF{ - "SwF", + "CHF", "Sveitsin frangi", } - CKD{ - "CKD", - "Cookinsaarten dollari", - } - CLC{ - "CLC", - "Chilen condor", - } - CLE{ - "CLE", - "Chilen escudo", + CHW{ + "CHW", + "Sveitsin WIR-frangi", } CLF{ "CLF", "Chilen unidades de fomento", } CLP{ - "Ch$", + "CLP", "Chilen peso", } - CMF{ - "CMF", - "Kamerunin CFA-frangi", - } - CNP{ - "CNP", - "Kiinan jen min piao yuan", - } - CNX{ - "CNX", - "Kiinan US-dollarin FEC", - } CNY{ - "Y", - "Kiinan yuan renminbi", - } - COB{ - "COB", - "Kolumbian paperipeso", - } - COF{ - "COF", - "Kongon CFA-frangi", + "CNY", + "Kiinan yuan", } COP{ - "Col$", + "COP", "Kolumbian peso", } + COU{ + "COU", + "Kolumbian unidad de valor real", + } CRC{ - "C", + "CRC", "Costa Rican colon", } - CSC{ - "CSC", - "Tšekkoslovakian koruna", + CSD{ + "CSD", + "Serbian dinaari", } CSK{ "CSK", @@ -609,20 +531,12 @@ fi{ "CUP", "Kuuban peso", } - CUX{ - "CUX", - "Kuuban FEC", - } CVE{ - "CVEsc", + "CVE", "Kap Verden escudo", } - CWG{ - "CWG", - "Curacaon guldeni", - } CYP{ - "£C", + "CYP", "Kyproksen punta", } CZK{ @@ -631,40 +545,28 @@ fi{ } DDM{ "DDM", - "Itä-Saksan ostmark", + "Itä-Saksan markka", } DEM{ "DEM", "Saksan markka", } - DES{ - "DES", - "Saksan sperrmark", - } DJF{ - "DF", + "DJF", "Djiboutin frangi", } DKK{ - "DKr", + "Tkr", "Tanskan kruunu", } DOP{ - "RD$", + "DOP", "Dominikaanisen tasavallan peso", } DZD{ - "DA", + "DZD", "Algerian dinaari", } - DZF{ - "DZF", - "Algerian uusi frangi", - } - DZG{ - "DZG", - "Algerian franc germinal", - } ECS{ "ECS", "Ecuadorin sucre", @@ -681,22 +583,30 @@ fi{ "EGP", "Egyptin punta", } + EQE{ + "EQE", + "Päiväntasaajan Guinean ekwele (1986-1989)", + } ERN{ "ERN", "Eritrean nakfa", } + ESA{ + "ESA", + "Espanjan peseta (A-tili)", + } + ESB{ + "ESB", + "Espanjan peseta (vaihdettava tili)", + } ESP{ "ESP", "Espanjan peseta", } ETB{ - "Br", + "ETB", "Etiopian birr", } - ETD{ - "ETD", - "Etiopian dollari", - } EUR{ "€", "euro", @@ -705,148 +615,80 @@ fi{ "mk", "Suomen markka", } - FIN{ - "FIN", - "Suomen markka (1860-1962)", - } FJD{ - "F$", + "FJD", "Fidžin dollari", } - FJP{ - "FJP", - "Fidžin punta", - } FKP{ "FKP", "Falklandinsaarten punta", } - FOK{ - "FOK", - "Färsaarten kruunu", - } FRF{ "FRF", "Ranskan frangi", } - FRG{ - "FRG", - "Ranskan franc germinal/franc poincare", - } - GAF{ - "GAF", - "Gabonin CFA-frangi", - } GBP{ "£", - "Iso-Britannian sterling-punta", + "Englannin punta", } GEK{ "GEK", "Georgian kuponkilari", } GEL{ - "lari", + "GEL", "Georgian lari", } GHC{ "GHC", "Ghanan cedi", } - GHO{ - "GHO", - "Ghanan vanha cedi", - } - GHP{ - "GHP", - "Ghanan punta", - } - GHR{ - "GHR", - "Ghanan revalvoitu cedi", - } GIP{ "GIP", "Gibraltarin punta", } - GLK{ - "GLK", - "Grönlannin kruunu", - } GMD{ "GMD", "Gambian dalasi", } - GMP{ - "GMP", - "Gambian punta", - } GNF{ - "GF", + "GNF", "Guinean frangi", } - GNI{ - "GNI", - "Guinean frangi (1960-1972)", - } GNS{ "GNS", "Guinean syli", } - GPF{ - "GPF", - "Guadeloupen frangi", - } GQE{ "GQE", - "Päiväntasaajan Guinean ekwele guineana", - } - GQF{ - "GQF", - "Päiväntasaajan Guinean frangi", - } - GQP{ - "GQP", - "Päiväntasaajan Guinean peseta guineana", + "Päiväntasaajan Guinean ekwele (-1986)", } GRD{ "GRD", - "Kreikan drakhma", - } - GRN{ - "GRN", - "Kreikan uusi drakhma", + "Kreikan drakma", } GTQ{ - "Q", + "GTQ", "Guatemalan quetzal", } - GUF{ - "GUF", - "Ranskan Guyanan franc guiana", - } GWE{ "GWE", "Portugalin Guinean escudo", } - GWM{ - "GWM", - "Portugalin Guinean mil reis", - } GWP{ "GWP", "Guinea-Bissaun peso", } GYD{ - "G$", + "GYD", "Guyanan dollari", } HKD{ - "HK$", - "Hong Kongin dollari", + "HKD", + "Hongkongin dollari", } HNL{ - "L", + "HNL", "Hondurasin lempira", } HRD{ @@ -862,37 +704,17 @@ fi{ "Haitin gourde", } HUF{ - "Ft", + "HUF", "Unkarin forintti", } - IBP{ - "IBP", - "Pohjois-Irlannin punta", - } - IDG{ - "IDG", - "Indonesian nica guldeni", - } - IDJ{ - "IDJ", - "Indonesian java rupia", - } - IDN{ - "IDN", - "Indonesian uusi rupia", - } IDR{ - "Rp", + "IDR", "Indonesian rupia", } IEP{ - "IR£", + "IEP", "Irlannin punta", } - ILL{ - "ILL", - "Israelin sekeli", - } ILP{ "ILP", "Israelin punta", @@ -901,20 +723,16 @@ fi{ "ILS", "Israelin uusi sekeli", } - IMP{ - "IMP", - "Mansaaren sterling-punta", - } INR{ - "=0#Rs.|1#Re.|1/common/main/fi_FI.xml // * // *************************************************************************** fi_FI{ + AuxExemplarCharacters{"[á à â ã č ç đ é è ë ǧ ǥ ȟ í ï ǩ ń ñ ŋ ô ř ŧ ú ü æ ø õ œ ʒ ǯ]"} NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", - "#,##0%", + "#,##0.###", + "#,##0.00 ¤", + "#,##0 %", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/fo.txt b/icuSources/data/locales/fo.txt index 077bb9d3..05215b99 100644 --- a/icuSources/data/locales/fo.txt +++ b/icuSources/data/locales/fo.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fo.xml +// * Source File:/common/main/fo.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/fo.xml + * ICU source: /xml/main/fo.xml */ fo{ + AuxExemplarCharacters{"[c q w z]"} Countries{ AE{"Sameindu Emirríkini"} AF{"Afganistan"} @@ -61,10 +62,12 @@ fo{ HU{"Ungarn"} IE{"Írland"} IL{"Ísrael"} + IN{"India"} IQ{"Irak"} IS{"Ísland"} IT{"Italia"} JM{"Jameika"} + JP{"Japan"} KE{"Kenja"} KG{"Kirgisia"} KH{"Kambodja"} @@ -140,7 +143,7 @@ fo{ "DKK", } } - ExemplarCharacters{"[a-záæíðóøúý]"} + ExemplarCharacters{"[a á b d ð e-i í j-o ó p r-u ú v x y ý æ ø]"} Languages{ fo{"føroyskt"} } @@ -158,10 +161,10 @@ fo{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.43"} calendar{ gregorian{ DateTimePatterns{ @@ -229,6 +232,22 @@ fo{ } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + } + } + } } } } diff --git a/icuSources/data/locales/fo_FO.txt b/icuSources/data/locales/fo_FO.txt index 4a9de690..9a406d14 100644 --- a/icuSources/data/locales/fo_FO.txt +++ b/icuSources/data/locales/fo_FO.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fo_FO.xml +// * Source File:/common/main/fo_FO.xml // * // *************************************************************************** fo_FO{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;¤ -#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/fr.txt b/icuSources/data/locales/fr.txt index 20241bb8..33252a3e 100644 --- a/icuSources/data/locales/fr.txt +++ b/icuSources/data/locales/fr.txt @@ -1,16 +1,51 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fr.xml +// * Source File:/common/main/fr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/fr.xml + * ICU source: /xml/main/fr.xml */ fr{ + AuxExemplarCharacters{"[å ñ ó]"} Countries{ + 001{"Monde"} + 002{"Afrique"} + 003{"Amérique du Nord continentale"} + 005{"Amérique du Sud"} + 009{"Océanie"} + 011{"Afrique occidentale"} + 013{"Amérique centrale"} + 014{"Afrique orientale"} + 015{"Afrique septentrionale"} + 017{"Afrique centrale"} + 018{"Afrique australe"} + 019{"Amériques"} + 021{"Amérique du Nord"} + 029{"Caraïbes"} + 030{"Asie orientale"} + 034{"Asie du Sud"} + 035{"Asie du Sud-Est"} + 039{"Europe méridionale"} + 053{"Australie et Nouvelle-Zélande"} + 054{"Mélanésie"} + 057{"région micronésienne"} + 061{"Polynésie"} + 062{"Asie centrale et du Sud"} + 142{"Asie"} + 143{"Asie centrale"} + 145{"Asie occidentale"} + 150{"Europe"} + 151{"Europe orientale"} + 154{"Europe septentrionale"} + 155{"Europe occidentale"} + 172{"Communauté des États indépendants"} + 419{"Amérique latine et Caraïbes"} + 830{"anglo-normandes, îles"} + 833{"Île de Man"} AD{"Andorre"} AE{"Émirats arabes unis"} AF{"Afghanistan"} @@ -26,6 +61,7 @@ fr{ AT{"Autriche"} AU{"Australie"} AW{"Aruba"} + AX{"Åland, îles"} AZ{"Azerbaïdjan"} BA{"Bosnie-Herzégovine"} BB{"Barbade"} @@ -35,40 +71,38 @@ fr{ BG{"Bulgarie"} BH{"Bahreïn"} BI{"Burundi"} - BJ{"Benin"} + BJ{"Bénin"} BM{"Bermudes"} - BN{"Brunei"} + BN{"Brunéi Darussalam"} BO{"Bolivie"} BR{"Brésil"} BS{"Bahamas"} BT{"Bhoutan"} - BV{"Île Bouvet"} + BV{"Bouvet, île"} BW{"Botswana"} BY{"Bélarus"} BZ{"Belize"} CA{"Canada"} - CC{"Îles Cocos"} - CD{"République démocratique du Congo"} - CF{"République centrafricaine"} + CC{"Cocos (Keeling), îles"} CG{"Congo"} CH{"Suisse"} CI{"Côte d’Ivoire"} - CK{"Îles Cook"} + CK{"Cook, îles"} CL{"Chili"} CM{"Cameroun"} CN{"Chine"} CO{"Colombie"} CR{"Costa Rica"} + CS{"Serbie-et-Monténégro"} CU{"Cuba"} CV{"Cap Vert"} - CX{"Île Christmas"} + CX{"Christmas, île"} CY{"Chypre"} - CZ{"République tchèque"} DE{"Allemagne"} DJ{"Djibouti"} DK{"Danemark"} DM{"Dominique"} - DO{"République dominicaine"} + DO{"Dominicaine, république"} DZ{"Algérie"} EC{"Équateur"} EE{"Estonie"} @@ -79,9 +113,9 @@ fr{ ET{"Éthiopie"} FI{"Finlande"} FJ{"Fidji"} - FK{"Îles Falkland (Malvinas)"} - FM{"Micronésie"} - FO{"Îles Féroé"} + FK{"Falkland, îles (Malvinas)"} + FM{"Micronésie, états fédérés de"} + FO{"Féroé, îles"} FR{"France"} GA{"Gabon"} GB{"Royaume-Uni"} @@ -96,12 +130,12 @@ fr{ GP{"Guadeloupe"} GQ{"Guinée équatoriale"} GR{"Grèce"} - GS{"Géorgie du Sud, Îles Sandwich du Sud"} + GS{"Géorgie du Sud et les îles Sandwich du Sud"} GT{"Guatemala"} GU{"Guam"} GW{"Guinée-Bissau"} GY{"Guyana"} - HM{"Îles Heard et MacDonald"} + HM{"Heard, île et McDonald, îles"} HN{"Honduras"} HR{"Croatie"} HT{"Haïti"} @@ -110,7 +144,6 @@ fr{ IE{"Irlande"} IL{"Israël"} IN{"Inde"} - IO{"Territoire britannique de l’océan indien"} IQ{"Iraq"} IR{"Iran"} IS{"Islande"} @@ -123,11 +156,11 @@ fr{ KH{"Cambodge"} KI{"Kiribati"} KM{"Comores"} - KN{"Saint Kitts et Nevis"} + KN{"Saint-Kitts-et-Nevis"} KP{"Corée du Nord"} KR{"Corée du Sud"} KW{"Koweït"} - KY{"Îles Caïmanes"} + KY{"Caïmanes, îles"} KZ{"Kazakhstan"} LA{"Laos"} LB{"Liban"} @@ -136,21 +169,20 @@ fr{ LK{"Sri Lanka"} LR{"Libéria"} LS{"Lesotho"} - LT{"Lithuanie"} + LT{"Lituanie"} LU{"Luxembourg"} LV{"Lettonie"} LY{"Libye"} MA{"Maroc"} MC{"Monaco"} - MD{"Moldova"} + MD{"Moldavie"} MG{"Madagascar"} - MH{"Îles Marshall"} + MH{"Marshall, îles"} MK{"Macédoine"} ML{"Mali"} MM{"Myanmar"} MN{"Mongolie"} - MO{"Macao R.A.S. de Chine"} - MP{"Îles Mariannes du Nord"} + MP{"Mariannes du Nord, îles"} MQ{"Martinique"} MR{"Mauritanie"} MS{"Montserrat"} @@ -164,14 +196,14 @@ fr{ NA{"Namibie"} NC{"Nouvelle-Calédonie"} NE{"Niger"} - NF{"Île Norfolk"} + NF{"Norfolk, île"} NG{"Nigéria"} NI{"Nicaragua"} NL{"Pays-Bas"} NO{"Norvège"} NP{"Népal"} NR{"Nauru"} - NU{"Niué"} + NU{"Nioué"} NZ{"Nouvelle-Zélande"} OM{"Oman"} PA{"Panama"} @@ -194,7 +226,7 @@ fr{ RU{"Russie"} RW{"Rwanda"} SA{"Arabie saoudite"} - SB{"Îles Salomon"} + SB{"Salomon, îles"} SC{"Seychelles"} SD{"Soudan"} SE{"Suède"} @@ -207,13 +239,12 @@ fr{ SM{"Saint-Marin"} SN{"Sénégal"} SO{"Somalie"} - SP{"Serbie"} SR{"Suriname"} ST{"Sao Tomé-et-Principe"} SV{"El Salvador"} SY{"Syrie"} SZ{"Swaziland"} - TC{"Îles Turks et Caïques"} + TC{"Turks et Caïques, îles"} TD{"Tchad"} TF{"Terres australes françaises"} TG{"Togo"} @@ -221,7 +252,7 @@ fr{ TJ{"Tadjikistan"} TK{"Tokelau"} TL{"Timor-Leste"} - TM{"Turkmenistan"} + TM{"Turkménistan"} TN{"Tunisie"} TO{"Tonga"} TR{"Turquie"} @@ -237,25 +268,19 @@ fr{ UZ{"Ouzbékistan"} VA{"Saint-Siège (Etat de la Cité du Vatican)"} VC{"Saint-Vincent-et-les Grenadines"} - VE{"Vénézuela"} - VG{"Îles Vierges Britanniques"} + VG{"Îles Vierges britanniques"} VI{"Îles Vierges des États-Unis"} - VN{"Viet Nam"} + VN{"Viêt Nam"} VU{"Vanuatu"} - WF{"Wallis et Futuna"} + WF{"Wallis-et-Futuna"} WS{"Samoa"} YE{"Yémen"} YT{"Mayotte"} - YU{"Yougoslavie"} ZA{"Afrique du Sud"} ZM{"Zambie"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "diner andorran", - } ADP{ "ADP", "peseta andorrane", @@ -266,31 +291,15 @@ fr{ } AFA{ "AFA", - "afghani", + "afghani [AFA]", } AFN{ "Af", "afghani", } - AIF{ - "AIF", - "franc Affars et Issas", - } - ALK{ - "ALK", - "lek albanais (1946-1961)", - } ALL{ "lek", - "lek albanais", - } - ALV{ - "ALV", - "Albanian Lek Valute", - } - ALX{ - "ALX", - "dollar albanais (certificat de devises étrangères)", + "lek", } AMD{ "dram", @@ -298,7 +307,7 @@ fr{ } ANG{ "ANG", - "florin des Antilles néerl.", + "florin des Antilles", } AOA{ "AOA", @@ -316,17 +325,9 @@ fr{ "AOR", "kwanza angolais réajusté (1995-1999)", } - AOS{ - "AOS", - "escudo angolais", - } ARA{ "ARA", - "austral", - } - ARM{ - "ARM", - "Argentine Peso Moneda Nacional", + "austral argentin", } ARP{ "ARP", @@ -344,17 +345,13 @@ fr{ "AUD", "dollar australien", } - AUP{ - "AUP", - "livre australienne", - } AWG{ "AWG", "florin d’Aruba", } AZM{ "AZM", - "Azerbaijanian Manat", + "manat azéri", } BAD{ "BAD", @@ -362,11 +359,7 @@ fr{ } BAM{ "KM", - "mark convertible de Bosnie-Herzegovine", - } - BAN{ - "BAN", - "nouveau dinar de Bosnie-Herzegovine", + "mark bosniaque convertible", } BBD{ "BBD", @@ -392,25 +385,13 @@ fr{ "BGL", "lev", } - BGM{ - "BGM", - "lev de Bulgarie socialiste", - } BGN{ "BGN", - "nouveau lef", - } - BGO{ - "BGO", - "lev (1879-1952)", - } - BGX{ - "BGX", - "lev (certificat de devises étrangères)", + "nouveau lev", } BHD{ "BHD", - "dinar de Bahrein", + "dinar de Bahreïn", } BIF{ "BIF", @@ -420,10 +401,6 @@ fr{ "BMD", "dollar des Bermudes", } - BMP{ - "BMP", - "livre des Bermudes", - } BND{ "BND", "dollar de Brunei", @@ -432,17 +409,13 @@ fr{ "Bs", "boliviano", } - BOL{ - "BOL", - "boliviano (1863-1962)", - } BOP{ "BOP", "peso bolivien", } BOV{ "BOV", - "Bolivian Mvdol", + "mvdol", } BRB{ "BRB", @@ -450,7 +423,7 @@ fr{ } BRC{ "BRC", - "cruzeiro", + "cruzado", } BRE{ "BRE", @@ -468,33 +441,17 @@ fr{ "BRR", "cruzeiro", } - BRZ{ - "BRZ", - "cruzeiro (1942-1967)", - } BSD{ "BSD", "dollar des Bahamas", } - BSP{ - "BSP", - "livre des Bahamas", - } BTN{ "Nu", "ngultrum", } - BTR{ - "BTR", - "roupie de Bhoutan", - } BUK{ "BUK", - "kyat", - } - BUR{ - "BUR", - "roupie de Birmanie", + "kyat [BUK]", } BWP{ "BWP", @@ -504,21 +461,13 @@ fr{ "BYB", "nouveau rouble biélorusse (1994-1999)", } - BYL{ - "BYL", - "rouble biélorusse (1992-1994)", - } BYR{ "Rbl", "rouble biélorusse", } BZD{ "BZD", - "dollar de Bélize", - } - BZH{ - "BZH", - "dollar du Honduras britannique", + "dollar de Belize", } CAD{ "CAD", @@ -528,98 +477,54 @@ fr{ "CDF", "franc congolais", } - CDG{ - "CDG", - "franc de la République Congolaise", - } - CDL{ - "CDL", - "Congolese Zaire", - } - CFF{ - "CFF", - "franc CFA de la République du Centre Afrique", + CHE{ + "CHE", + "euro WIR", } CHF{ "sFr.", "franc suisse", } - CKD{ - "CKD", - "dollar des îles Cook", - } - CLC{ - "CLC", - "condor chilien", - } - CLE{ - "CLE", - "escudo chilien", + CHW{ + "CHW", + "franc WIR", } CLF{ "CLF", - "Chilean Unidades de Fomento", + "unité d’investissement chilienne", } CLP{ "CLP", "peso chilien", } - CMF{ - "CMF", - "franc CFA camerounais", - } - CNP{ - "CNP", - "Chinese Jen Min Piao Yuan", - } - CNX{ - "CNX", - "dollar US chinois (certificat de devises étrangères)", - } CNY{ "CNY", "Yuan Ren-min-bi", } - COB{ - "COB", - "Colombian Paper Peso", - } - COF{ - "COF", - "franc CFA congolais", - } COP{ "COP", "peso colombien", } CRC{ "CRC", - "colon", + "colon de Costa Rica", } - CSC{ - "CSC", - "couronne tchèque", + CSD{ + "CSD", + "dinar serbe", } CSK{ "CSK", - "couronne tchèque", + "couronne tchèque [CSK]", } CUP{ "CUP", "peso cubain", } - CUX{ - "CUX", - "certificat de devises étrangères de Cuba", - } CVE{ "CVE", "escudo du Cap-Vert", } - CWG{ - "CWG", - "florin de Curacao", - } CYP{ "CYP", "livre cypriote", @@ -636,10 +541,6 @@ fr{ "DEM", "deutsche mark", } - DES{ - "DES", - "sperrmark allemand", - } DJF{ "DF", "franc de Djibouti", @@ -656,14 +557,6 @@ fr{ "DZD", "dinar algérien", } - DZF{ - "DZF", - "nouveau franc algérien", - } - DZG{ - "DZG", - "franc germinal algérien", - } ECS{ "ECS", "sucre", @@ -684,6 +577,14 @@ fr{ "ERN", "Eritrean Nakfa", } + ESA{ + "ESA", + "peseta espagnole (compte A)", + } + ESB{ + "ESB", + "peseta espagnole (compte convertible)", + } ESP{ "ESP", "peseta espagnole", @@ -692,10 +593,6 @@ fr{ "ETB", "birr", } - ETD{ - "ETD", - "dollar éthiopien", - } EUR{ "€", "euro", @@ -704,38 +601,18 @@ fr{ "FIM", "mark finlandais", } - FIN{ - "FIN", - "mark finlandais (1860-1962)", - } FJD{ "FJD", "dollar de Fidji", } - FJP{ - "FJP", - "livre de Fiji", - } FKP{ "FKP", "livre des Falkland (Malvinas)", } - FOK{ - "FOK", - "Faeroe Islands Kronur", - } FRF{ "F", "franc français", } - FRG{ - "FRG", - "franc germinal/franc Poincaré", - } - GAF{ - "GAF", - "franc CFA gabonnais", - } GBP{ "£", "livre sterling", @@ -752,85 +629,37 @@ fr{ "GHC", "cédi", } - GHO{ - "GHO", - "ancien cedi", - } - GHP{ - "GHP", - "livre ghanéenne", - } - GHR{ - "GHR", - "cedi revalorisé", - } GIP{ "GIP", "livre de Gibraltar", } - GLK{ - "GLK", - "couronne du Groenland", - } GMD{ "GMD", "dalasie", } - GMP{ - "GMP", - "livre de Gambie", - } GNF{ "GF", "franc guinéen", } - GNI{ - "GNI", - "franc guinéen (1960-1972)", - } GNS{ "GNS", "syli", } - GPF{ - "GPF", - "franc guadeloupéen", - } GQE{ "GQE", "ekwélé", } - GQF{ - "GQF", - "franco de Guinée Equatoriale", - } - GQP{ - "GQP", - "peseta de Guinée Equatoriale", - } GRD{ "GRD", "drachme", } - GRN{ - "GRN", - "nouveau drachme", - } GTQ{ "GTQ", "quetzal", } - GUF{ - "GUF", - "franc guyanais", - } GWE{ "GWE", - "Escudo de Guinée Portugaise", - } - GWM{ - "GWM", - "Portuguese Guinea Mil Reis", + "escudo de Guinée portugaise", } GWP{ "GWP", @@ -838,7 +667,7 @@ fr{ } GYD{ "G$", - "dollar de Guyane", + "dollar du Guyana", } HKD{ "HKD", @@ -864,22 +693,6 @@ fr{ "HUF", "forint", } - IBP{ - "IBP", - "livre d’Irlande du Nord", - } - IDG{ - "IDG", - "florin de Nica", - } - IDJ{ - "IDJ", - "roupie de Java", - } - IDN{ - "IDN", - "nouvelle roupie indonésienne", - } IDR{ "IDR", "rupiah", @@ -888,30 +701,14 @@ fr{ "IEP", "livre irlandaise", } - ILL{ - "ILL", - "shékel", - } ILP{ "ILP", "livre israélienne", } - ILS{ - "ILS", - "shékel", - } - IMP{ - "IMP", - "livre sterling de l’Ile de Man", - } INR{ "=0#Rs.|1#Re.|1/common/main/fr_BE.xml // * // *************************************************************************** fr_BE{ @@ -18,12 +18,16 @@ fr_BE{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } DateTimePatterns{ "H' h 'mm' min 'ss' s 'z", "HH:mm:ss z", diff --git a/icuSources/data/locales/fr_CA.txt b/icuSources/data/locales/fr_CA.txt index 45dc3cbe..9bbc87f2 100644 --- a/icuSources/data/locales/fr_CA.txt +++ b/icuSources/data/locales/fr_CA.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fr_CA.xml +// * Source File:/common/main/fr_CA.xml // * // *************************************************************************** fr_CA{ @@ -18,12 +18,12 @@ fr_CA{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "#,##0.00 ¤;(#,##0.00¤)", - "#,##0%", + "#,##0 %", "#E0", } - Version{"1.2"} + Version{"1.43"} calendar{ gregorian{ DateTimeElements:intvector{ @@ -41,12 +41,6 @@ fr_CA{ "yy-MM-dd", "{1} {0}", } - weekend:intvector{ - 7, - 0, - 1, - 86400000, - } } } } diff --git a/icuSources/data/locales/fr_CH.txt b/icuSources/data/locales/fr_CH.txt index 557f590d..1962eff1 100644 --- a/icuSources/data/locales/fr_CH.txt +++ b/icuSources/data/locales/fr_CH.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fr_CH.xml +// * Source File:/common/main/fr_CH.xml // * // *************************************************************************** fr_CH{ @@ -18,18 +18,22 @@ fr_CH{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤ #,##0.00;¤-#,##0.00", - "#,##0%", + "#,##0 %", "#E0", } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } DateTimePatterns{ "HH.mm:ss' h' z", "HH:mm:ss z", diff --git a/icuSources/data/locales/fr_FR.txt b/icuSources/data/locales/fr_FR.txt index 4293b893..84f4816d 100644 --- a/icuSources/data/locales/fr_FR.txt +++ b/icuSources/data/locales/fr_FR.txt @@ -1,11 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fr_FR.xml +// * Source File:/common/main/fr_FR.xml // * // *************************************************************************** fr_FR{ - Version{"1.2"} + Version{"1.36"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/fr_LU.txt b/icuSources/data/locales/fr_LU.txt index e63aaf35..86e9fd8f 100644 --- a/icuSources/data/locales/fr_LU.txt +++ b/icuSources/data/locales/fr_LU.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/fr_LU.xml +// * Source File:/common/main/fr_LU.xml // * // *************************************************************************** fr_LU{ @@ -28,8 +28,16 @@ fr_LU{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/ga.txt b/icuSources/data/locales/ga.txt index 0fde947f..32190adc 100644 --- a/icuSources/data/locales/ga.txt +++ b/icuSources/data/locales/ga.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ga.xml +// * Source File:/common/main/ga.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/ga.xml + * ICU source: /xml/main/ga.xml */ ga{ + AuxExemplarCharacters{"[ḃ ċ ḋ ḟ ġ ṁ ṗ ṡ ṫ]"} Countries{ AD{"Andóra"} AE{"Aontas na nÉimíríochtaí Arabacha"} @@ -206,7 +207,6 @@ ga{ SM{"San Mairíne"} SN{"An tSeineagáil"} SO{"An tSomáil"} - SP{"An tSeirbia"} SR{"Suranam"} ST{"Sao Tome agus Principe"} SV{"An tSalvadóir"} @@ -245,16 +245,11 @@ ga{ WS{"Samó"} YE{"Éimin"} YT{"Mayotte"} - YU{"An Iúgslaiv"} ZA{"An Afraic Theas"} ZM{"An tSaimbia"} ZW{"An tSiombáib"} } Currencies{ - ADD{ - "ADD", - "Dínear Andóra", - } ADP{ "ADP", "Peseta Andóra", @@ -271,26 +266,10 @@ ga{ "Af", "Afgainí", } - AIF{ - "AIF", - "Franc Affars agus Issas", - } - ALK{ - "ALK", - "Lek Albánach (1946-1961)", - } ALL{ "lek", "Lek Albánach", } - ALV{ - "ALV", - "Lek Valute Albánach", - } - ALX{ - "ALX", - "Teastais Airgeadraí Dollar na hAlbáine", - } AMD{ "dram", "Dram Airméanach", @@ -315,18 +294,10 @@ ga{ "AOR", "Kwanza Reajustado Angólach (1995-1999)", } - AOS{ - "AOS", - "Escudo Angólach", - } ARA{ "ARA", "Austral Airgintíneach", } - ARM{ - "ARM", - "Peso Moneda Nacional Airgintíneach", - } ARP{ "ARP", "Peso na Airgintíne (1983-1985)", @@ -343,10 +314,6 @@ ga{ "A$", "Dollar Astrálach", } - AUP{ - "AUP", - "Punt Astrálach", - } AWG{ "AWG", "Guilder Aruba", @@ -363,10 +330,6 @@ ga{ "KM", "Marc Inathraithe Bhoisnia-Heirseagaivéin", } - BAN{ - "BAN", - "Dínear Nua Bhoisnia-Heirseagaivéin", - } BBD{ "BDS$", "Dollar Bharbadóis", @@ -391,22 +354,10 @@ ga{ "lev", "Lev Bulgárach Crua", } - BGM{ - "BGM", - "Lev Bulgárach Sóisialaíoch", - } BGN{ "BGN", "Lev Nua Bulgárach", } - BGO{ - "BGO", - "Lev Bulgárach (1879-1952)", - } - BGX{ - "BGX", - "Teastais Airgeadraí Lev Bulgárach", - } BHD{ "BD", "Dínear na Bairéine", @@ -419,10 +370,6 @@ ga{ "Ber$", "Dollar Bheirmiúda", } - BMP{ - "BMP", - "Punt Bheirmiúda", - } BND{ "BND", "Dollar Bhrúiné", @@ -431,10 +378,6 @@ ga{ "Bs", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Peso na Bolaive", @@ -467,34 +410,18 @@ ga{ "BRR", "Cruzeiro Brasaíleach", } - BRZ{ - "BRZ", - "Cruzeiro Brasaíleach (1942-1967)", - } BSD{ "BSD", "Dollar na mBahámaí", } - BSP{ - "BSP", - "Punt na mBahámaí", - } BTN{ "Nu", "Ngultrum Bútánach", } - BTR{ - "BTR", - "Rúipí na Bútáine", - } BUK{ "BUK", "Kyat Burmach", } - BUR{ - "BUR", - "Rúipí Bhurma", - } BWP{ "BWP", "Pula Botsuánach", @@ -503,10 +430,6 @@ ga{ "BYB", "Rúbal Nua Béalarúiseach (1994-1999)", } - BYL{ - "BYL", - "Rúbal Béalarúiseach (1992-1994)", - } BYR{ "Rbl", "Rúbal Béalarúiseach", @@ -515,10 +438,6 @@ ga{ "BZ$", "Dollar na Beilíse", } - BZH{ - "BZH", - "Dollar Hondúrais Bhriotanaigh", - } CAD{ "Can$", "Dollar Ceanada", @@ -527,34 +446,10 @@ ga{ "CDF", "Franc Congolais an Chongó", } - CDG{ - "CDG", - "Franc Phoblacht an Chongó", - } - CDL{ - "CDL", - "Zaire an Chongó", - } - CFF{ - "CFF", - "CFA Franc Phoblacht na hAfraice Láir", - } CHF{ "CHF", "Franc na hEilvéise", } - CKD{ - "CKD", - "Dollar Oileáin Cook", - } - CLC{ - "CLC", - "Condor na Sile", - } - CLE{ - "CLE", - "Escudo na Sile", - } CLF{ "CLF", "Unidades de Fomento na Sile", @@ -563,30 +458,10 @@ ga{ "Ch$", "Peso na Sile", } - CMF{ - "CMF", - "CFA Franc Chamarúin", - } - CNP{ - "CNP", - "Jen Min Piao Yuan Síneach", - } - CNX{ - "CNX", - "Teastais Airgeadraí Dollar SAM Síneach", - } CNY{ "Y", "Yuan Renminbi Síneach", } - COB{ - "COB", - "Peso Páipéir na Colóime", - } - COF{ - "COF", - "CFA Franc Chongó", - } COP{ "Col$", "Peso na Colóime", @@ -595,10 +470,6 @@ ga{ "C", "Colon Chósta Ríce", } - CSC{ - "CSC", - "Koruna na Seicslóvaice", - } CSK{ "CSK", "Koruna Crua na Seicslóvaice", @@ -607,18 +478,10 @@ ga{ "CUP", "Peso Cúba", } - CUX{ - "CUX", - "Teastais Airgeadraí Chúba", - } CVE{ "CVEsc", "Escudo na Rinne Verde", } - CWG{ - "CWG", - "Guilder Curacao", - } CYP{ "£C", "Punt na Cipire", @@ -635,10 +498,6 @@ ga{ "DEM", "Deutsche Mark", } - DES{ - "DES", - "Sperrmark Gearmánach", - } DJF{ "DF", "Franc Djibouti", @@ -655,14 +514,6 @@ ga{ "DA", "Dínear na hAilgéire", } - DZF{ - "DZF", - "Franc Nua Ailgérach", - } - DZG{ - "DZG", - "Franc Germinal Ailgérach", - } ECS{ "ECS", "Sucre Eacuadóir", @@ -687,10 +538,6 @@ ga{ "Br", "Birr na hAetóipe", } - ETD{ - "ETD", - "Dollar na hAetóipe", - } EUR{ "€", "Euro", @@ -699,38 +546,18 @@ ga{ "FIM", "Markka Fionnlannach", } - FIN{ - "FIN", - "Markka Fionnlannach (1860-1962)", - } FJD{ "F$", "Dollar Fhidsí", } - FJP{ - "FJP", - "Punt Fhidsí", - } FKP{ "FKP", "Punt Oileáin Fháclainne", } - FOK{ - "FOK", - "Kronur Oileáin Fharó", - } FRF{ "FRF", "Franc Francach", } - FRG{ - "FRG", - "Franc Germinal Francach/Franc Poincare", - } - GAF{ - "GAF", - "CFA Franc na Gabúine", - } GBP{ "£", "Punt Steirling", @@ -747,86 +574,38 @@ ga{ "GHC", "Cedi Ghána", } - GHO{ - "GHO", - "Sean-Cedi Ghána", - } - GHP{ - "GHP", - "Punt Ghána", - } - GHR{ - "GHR", - "Cedi Athluachtha Ghána", - } GIP{ "GIP", "Punt Ghiobráltair", } - GLK{ - "GLK", - "Krone na Graonlainne", - } GMD{ "GMD", "Dalasi Gaimbia", } - GMP{ - "GMP", - "Punt Gaimbia", - } GNF{ "GF", "Franc Guine", } - GNI{ - "GNI", - "Franc Guine (1960-1972)", - } GNS{ "GNS", "Syli Guine", } - GPF{ - "GPF", - "Franc Guadeloupe", - } GQE{ "GQE", "Ekwele Guineana na Guine Meánchriosaí", } - GQF{ - "GQF", - "Franco na Guine Meánchriosaí", - } - GQP{ - "GQP", - "Peseta Guineana na Guine Meánchriosaí", - } GRD{ "GRD", "Drachma Gréagach", } - GRN{ - "GRN", - "Drachma Nua Gréagach", - } GTQ{ "Q", "Quetzal Guatamala", } - GUF{ - "GUF", - "Franc Guiana na Guáine Francaí", - } GWE{ "GWE", "Escudo na Guine Portaingéalaí", } - GWM{ - "GWM", - "Mil Reis na Guine Portaingéalaí", - } GWP{ "GWP", "Peso Guine-Bhissau", @@ -859,22 +638,6 @@ ga{ "Ft", "Forint Ungárach", } - IBP{ - "IBP", - "Punt Thuaisceart Éireann", - } - IDG{ - "IDG", - "Nica Guilder Indinéiseach", - } - IDJ{ - "IDJ", - "Java Rupiah Indinéiseach", - } - IDN{ - "IDN", - "Rupiah Nua Indinéiseach", - } IDR{ "Rp", "Rupiah Indinéiseach", @@ -883,10 +646,6 @@ ga{ "IR£", "Punt Éireannach", } - ILL{ - "ILL", - "Sheqel Iosraelach", - } ILP{ "ILP", "Punt Iosraelach", @@ -895,10 +654,6 @@ ga{ "ILS", "Sheqel Nua Iosraelach", } - IMP{ - "IMP", - "Punt Steirling Oileán Mhanann", - } INR{ "=0#Rs.|1#Re.|1/common/main/ga_IE.xml // * // *************************************************************************** ga_IE{ @@ -14,14 +14,18 @@ ga_IE{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", diff --git a/icuSources/data/locales/gl.txt b/icuSources/data/locales/gl.txt index 57f8bc4a..b2ea1862 100644 --- a/icuSources/data/locales/gl.txt +++ b/icuSources/data/locales/gl.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/gl.xml +// * Source File:/common/main/gl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/gl.xml + * ICU source: /xml/main/gl.xml */ gl{ Countries{ @@ -24,7 +24,7 @@ gl{ } } } - ExemplarCharacters{"[a-záéíóúüñ]"} + ExemplarCharacters{"[a á b-e é f-i í j-n ñ o ó p-u ú ü v-z]"} Languages{ gl{"galego"} } @@ -42,10 +42,10 @@ gl{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ dayNames{ @@ -102,6 +102,22 @@ gl{ } } } + quarters{ + format{ + abbreviated{ + "T1", + "T2", + "T3", + "T4", + } + wide{ + "1er trimestre", + "2on trimestre", + "3er trimestre", + "4rt trimestre", + } + } + } } } } diff --git a/icuSources/data/locales/gl_ES.txt b/icuSources/data/locales/gl_ES.txt index aff974f5..2e94fab5 100644 --- a/icuSources/data/locales/gl_ES.txt +++ b/icuSources/data/locales/gl_ES.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/gl_ES.xml +// * Source File:/common/main/gl_ES.xml // * // *************************************************************************** gl_ES{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.40"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", diff --git a/icuSources/data/locales/gu.txt b/icuSources/data/locales/gu.txt index a649e7e0..1c68d722 100644 --- a/icuSources/data/locales/gu.txt +++ b/icuSources/data/locales/gu.txt @@ -1,115 +1,126 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/gu.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/gu.xml - */ -gu{ - Countries{ - CN{"ચીન"} - DE{"જમિની"} - EG{"મિસર"} - GE{"જ્યોર્જીયા"} - IN{"ભારત"} - NP{"નેપાળ"} - PK{"કરાંચી"} - TM{"તુર્ક્મનિસ્તાન"} - TR{"તુર્કસ્તાન"} - US{"સંયુકત રાજ્ય અમેરિકા"} - } - Currencies{ - INR{ - "રુ", - "INR", - } - } - ExemplarCharacters{"[[:Gujr:]‌‍]"} - Languages{ - gu{"ગુજરાતી"} - } - LocaleScript{ - "Gujr", - } - NumberElements{ - ".", - ",", - ";", - "%", - "૦", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "પૂર્વ મધ્યાહ્ન", - "ઉત્તર મધ્યાહ્ન", - } - dayNames{ - format{ - abbreviated{ - "રવિ", - "સોમ", - "મંગળ", - "બુધ", - "ગુરુ", - "શુક્ર", - "શનિ", - } - wide{ - "રવિવાર", - "સોમવાર", - "મંગળવાર", - "બુધવાર", - "ગુરુવાર", - "શુક્રવાર", - "શનિવાર", - } - } - } - monthNames{ - format{ - abbreviated{ - "જાન્યુ", - "ફેબ્રુ", - "માર્ચ", - "એપ્રિલ", - "મે", - "જૂન", - "જુલાઈ", - "ઑગસ્ટ", - "સપ્ટે", - "ઑક્ટો", - "નવે", - "ડિસે", - } - wide{ - "જાન્યુઆરી", - "ફેબ્રુઆરી", - "માર્ચ", - "એપ્રિલ", - "મે", - "જૂન", - "જુલાઈ", - "ઑગસ્ટ", - "સપ્ટેમ્બર", - "ઑક્ટ્બર", - "નવેમ્બર", - "ડિસેમ્બર", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/gu.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/gu.xml + */ +gu{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + CN{"ચીન"} + DE{"જમિની"} + EG{"મિસર"} + GE{"જ્યોર્જીયા"} + IN{"ભારત"} + NP{"નેપાળ"} + PK{"કરાંચી"} + TM{"તુર્ક્મનિસ્તાન"} + TR{"તુર્કસ્તાન"} + US{"સંયુકત રાજ્ય અમેરિકા"} + } + Currencies{ + INR{ + "રુ", + "INR", + } + } + ExemplarCharacters{"[૦-૯ ૐ અ-ઋ ૠ ઍ એ-ઑ ઓ-ન પ-ર લ ળ વ-હ ઼ ઁ-ઃ ઽ ્ ા-ૅ ે-ૉ ો ૌ]"} + Languages{ + gu{"ગુજરાતી"} + } + LocaleScript{ + "Gujr", + } + NumberElements{ + ".", + ",", + ";", + "%", + "૦", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.44"} + calendar{ + gregorian{ + AmPmMarkers{ + "પૂર્વ મધ્યાહ્ન", + "ઉત્તર મધ્યાહ્ન", + } + dayNames{ + format{ + abbreviated{ + "રવિ", + "સોમ", + "મંગળ", + "બુધ", + "ગુરુ", + "શુક્ર", + "શનિ", + } + wide{ + "રવિવાર", + "સોમવાર", + "મંગળવાર", + "બુધવાર", + "ગુરુવાર", + "શુક્રવાર", + "શનિવાર", + } + } + } + monthNames{ + format{ + abbreviated{ + "જાન્યુ", + "ફેબ્રુ", + "માર્ચ", + "એપ્રિલ", + "મે", + "જૂન", + "જુલાઈ", + "ઑગસ્ટ", + "સપ્ટે", + "ઑક્ટો", + "નવે", + "ડિસે", + } + wide{ + "જાન્યુઆરી", + "ફેબ્રુઆરી", + "માર્ચ", + "એપ્રિલ", + "મે", + "જૂન", + "જુલાઈ", + "ઑગસ્ટ", + "સપ્ટેમ્બર", + "ઑક્ટ્બર", + "નવેમ્બર", + "ડિસેમ્બર", + } + } + } + quarters{ + format{ + wide{ + "પેહલા હંત 1", + "ડૂસઋા હંત 2", + "તીસઋા હંત 3", + "ચૌતા હંત 4", + } + } + } + } + } +} diff --git a/icuSources/data/locales/gu_IN.txt b/icuSources/data/locales/gu_IN.txt index 868a4476..e27c637a 100644 --- a/icuSources/data/locales/gu_IN.txt +++ b/icuSources/data/locales/gu_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/gu_IN.xml +// * Source File:/common/main/gu_IN.xml // * // *************************************************************************** gu_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.46"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "hh:mm:ss a z", "hh:mm:ss a z", @@ -39,4 +35,10 @@ gu_IN{ } } } + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"'"} + quotationStart{"'"} + } } diff --git a/icuSources/data/locales/gv.txt b/icuSources/data/locales/gv.txt index 943e77c0..d0943bbd 100644 --- a/icuSources/data/locales/gv.txt +++ b/icuSources/data/locales/gv.txt @@ -1,26 +1,26 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/gv.xml +// * Source File:/common/main/gv.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/gv.xml + * ICU source: /xml/main/gv.xml */ gv{ Countries{ GB{"Rywvaneth Unys"} } - ExemplarCharacters{"[a-zç]"} + ExemplarCharacters{"[a-c ç d-z]"} Languages{ gv{"Gaelg"} } LocaleScript{ "Latn", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ AmPmMarkers{ diff --git a/icuSources/data/locales/gv_GB.txt b/icuSources/data/locales/gv_GB.txt index c6148760..0a8974c9 100644 --- a/icuSources/data/locales/gv_GB.txt +++ b/icuSources/data/locales/gv_GB.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/gv_GB.xml +// * Source File:/common/main/gv_GB.xml // * // *************************************************************************** gv_GB{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss", diff --git a/icuSources/data/locales/haw.txt b/icuSources/data/locales/haw.txt index 34c62af6..33208b58 100644 --- a/icuSources/data/locales/haw.txt +++ b/icuSources/data/locales/haw.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: /Users/deglocal/Desktop/Totoro/icucvs/locale/common/main/haw.xml +// * Source File:/common/main/haw.xml // * // *************************************************************************** /** - * ICU source: /Users/deglocal/Desktop/Totoro/icucvs/locale/icu/main/haw.xml + * ICU source: /xml/main/haw.xml */ haw{ + AuxExemplarCharacters{"[b-d f g j q-t v x-z]"} Countries{ AU{"Nūhōlani"} CA{"Kanakā"} @@ -32,17 +33,14 @@ haw{ RU{"Lūkia"} US{"ʻAmelika Hui Pū ʻIa"} } - ExemplarCharacters{"[āēīōūaeiouhklmnpwʻ]"} + ExemplarCharacters{"[a ā e ē h ʻ i ī k-o ō p u ū w]"} Languages{ haw{"ʻōlelo Hawaiʻi"} } LocaleScript{ "Latn", } - /** - * Draft - */ - Version{"x1.2"} + Version{"1.26"} calendar{ gregorian{ dayNames{ diff --git a/icuSources/data/locales/haw_US.txt b/icuSources/data/locales/haw_US.txt index eb438a3b..085ae96b 100644 --- a/icuSources/data/locales/haw_US.txt +++ b/icuSources/data/locales/haw_US.txt @@ -1,15 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: /Users/deglocal/Desktop/Totoro/icucvs/locale/common/main/haw_US.xml +// * Source File:/common/main/haw_US.xml // * // *************************************************************************** haw_US{ MeasurementSystem:int{1} NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", @@ -18,12 +18,13 @@ haw_US{ 279, 216, } - /** - * Draft - */ - Version{"x1.2"} + Version{"1.27"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", diff --git a/icuSources/data/locales/he.txt b/icuSources/data/locales/he.txt index 3276cd3b..405ef562 100644 --- a/icuSources/data/locales/he.txt +++ b/icuSources/data/locales/he.txt @@ -1,503 +1,1271 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/he.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/he.xml - */ -he{ - Countries{ - AD{"אנדורה"} - AE{"איחוד האמירויות הערביות"} - AF{"אפגניסטן"} - AG{"אנטיגואה וברבודה"} - AI{"אנגילה"} - AL{"אלבניה"} - AM{"ארמניה"} - AN{"האינטילים ההולנדיים"} - AO{"אנגולה"} - AQ{"אנטארקטיקה"} - AR{"ארגנטינה"} - AS{"סמואה האמריקנית"} - AT{"אוסטריה"} - AU{"אוסטרליה"} - AW{"ארובה"} - AZ{"אזרבייג׳ן"} - BA{"בוסניה הרצגובינה"} - BB{"ברבדוס"} - BD{"בנגלדש"} - BE{"בלגיה"} - BF{"בורקינה פאסו"} - BG{"בולגריה"} - BH{"בחריין"} - BI{"בורונדי"} - BJ{"בנין"} - BM{"ברמודה"} - BN{"ברוניי דארסלאם"} - BO{"בוליביה"} - BR{"ברזיל"} - BS{"בהאמה"} - BT{"בוטאן"} - BV{"האי בובה"} - BW{"בוטסוואנה"} - BY{"בלרוס"} - BZ{"בליז"} - CA{"קנדה"} - CC{"איי קוקוס (קילינג)"} - CD{"קונגו, הרפובליקה הדמוקרטית של"} - CF{"הרפובליקה של מרכז אפריקה"} - CG{"קונגו"} - CH{"שווייץ"} - CI{"חוף השנהב"} - CK{"איי קוק"} - CL{"צ׳ילה"} - CM{"קמרון"} - CN{"סין"} - CO{"קולומביה"} - CR{"קוסטה ריקה"} - CU{"קובה"} - CV{"קייפ ורדה"} - CX{"איי כריסטמס"} - CY{"קפריסין"} - CZ{"הרפובליקה הצ׳כית"} - DE{"גרמניה"} - DJ{"ג׳יבוטי"} - DK{"דנמרק"} - DM{"דומיניקה"} - DO{"הרפובליקה הדומיניקנית"} - DZ{"אלג׳יריה"} - EC{"אקוואדור"} - EE{"אסטוניה"} - EG{"מצרים"} - EH{"סהרה המערבית"} - ER{"אריתריאה"} - ES{"ספרד"} - ET{"אתיופיה"} - FI{"פינלנד"} - FJ{"פיג׳י"} - FK{"איי פוקלנד"} - FM{"מאוריציוס, המדינות המאוגדות של"} - FO{"איי פארו"} - FR{"צרפת"} - GA{"גבון"} - GB{"בריטניה"} - GD{"גרנדה"} - GE{"גרוזיה"} - GF{"גיאנה הצרפתית"} - GH{"גאנה"} - GI{"גיברלטר"} - GL{"גרינלנד"} - GM{"גמביה"} - GN{"גיניאה"} - GP{"גוואדלופ"} - GQ{"גיניאה המשוונית"} - GR{"יוון"} - GS{"האי ג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומיים"} - GT{"גווטמאלה"} - GU{"גואם"} - GW{"גיניאה-ביסאו"} - GY{"גיאנה"} - HK{"הונג קונג S.A.R. של סין"} - HM{"איי הרד ואיי מקדונלנד"} - HN{"הונדורס"} - HR{"קרואטיה"} - HT{"האיטי"} - HU{"הונגריה"} - ID{"אינדונזיה"} - IE{"אירלנד"} - IL{"ישראל"} - IN{"הודו"} - IO{"הטריטוריה הבריטית באוקינוס ההודי"} - IQ{"עירק"} - IR{"איראן, הרפובליקה האיסלמית"} - IS{"איסלנד"} - IT{"איטליה"} - JM{"ג׳מייקה"} - JO{"ירדן"} - JP{"יפן"} - KE{"קניה"} - KG{"קירגיזסטן"} - KH{"קמבודיה"} - KI{"קיריבאטי"} - KM{"קומורוס"} - KN{"סנט קיטס וניבס"} - KP{"קוריאה, צפון"} - KR{"קוריאה, דרום"} - KW{"כווית"} - KY{"איי קיימאן"} - KZ{"קזחסטן"} - LA{"לאוס, הרפובליקה הדמקורטית העממית"} - LB{"לבנון"} - LC{"סנט לושיה"} - LI{"ליכטנשטיין"} - LK{"סרי לנקה"} - LR{"ליבריה"} - LS{"לסוטו"} - LT{"ליטא"} - LU{"לוקסמבורג"} - LV{"לטביה"} - LY{"לוב"} - MA{"מרוקו"} - MC{"מונקו"} - MD{"מולדובה, הרפובליקה"} - MG{"מדגסקר"} - MH{"איי מרשל"} - MK{"מקדוניה, הרפובליקה של"} - ML{"מאלי"} - MM{"מינמאר"} - MN{"מונגוליה"} - MO{"מקאו S.A.R. של סין"} - MP{"איי מריאנה הצפוניים"} - MQ{"מרטיניק"} - MR{"מאוריטניה"} - MS{"מונטסראט"} - MT{"מלטה"} - MU{"מאוריציוס"} - MV{"מלדיבאס"} - MW{"מלאווי"} - MX{"מכסיקו"} - MY{"מלזיה"} - MZ{"מוזמביק"} - NA{"נמיביה"} - NC{"קלדוניה החדשה"} - NE{"ניז׳ר"} - NF{"איי נורפק"} - NG{"ניגריה"} - NI{"ניקראגווה"} - NL{"הולנד"} - NO{"נורווגיה"} - NP{"נפאל"} - NR{"נאורו"} - NU{"ניווה"} - NZ{"ניו זילנד"} - OM{"עומן"} - PA{"פנמה"} - PE{"פרו"} - PF{"פולינזיה הצרפתית"} - PG{"פפואה גיניאה החדשה"} - PH{"פיליפינים"} - PK{"פקיסטן"} - PL{"פולין"} - PM{"סנט פייר ומיקלון"} - PN{"פיטקיירן"} - PR{"פורטו ריקו"} - PS{"הרשות הפלשתינית"} - PT{"פורטוגל"} - PW{"פלאו"} - PY{"פראגוואי"} - QA{"קטר"} - RE{"ראוניון"} - RO{"רומניה"} - RU{"חבר המדינות הרוסיות"} - RW{"רואנדה"} - SA{"ערב הסעודית"} - SB{"איי שלמה"} - SC{"איי סיישל"} - SD{"סודן"} - SE{"שוודיה"} - SG{"סינגפור"} - SH{"סיינט הלנה"} - SI{"סלובניה"} - SJ{"סוולבארד וז׳אן מאיין"} - SK{"סלובקיה"} - SL{"סיירה לאונה"} - SM{"סן מרינו"} - SN{"סנגל"} - SO{"סומליה"} - SR{"סורינאם"} - ST{"סן תומה ופרינסיפה"} - SV{"אל סלבאדור"} - SY{"הרפובליקה הערבית הסורית"} - SZ{"סווזילנד"} - TC{"איי טורקס וקאיקוס"} - TD{"צ׳אד"} - TF{"טריטוריות דרומיות של צרפת"} - TG{"טוגו"} - TH{"תאילנד"} - TJ{"טג׳יקיסטן"} - TK{"טוקלאו"} - TL{"מזרח טימור"} - TM{"טורקמניסטן"} - TN{"טוניסיה"} - TO{"טונגה"} - TR{"טורקיה"} - TT{"טרינידד וטובגו"} - TV{"טובאלו"} - TW{"טיוואן"} - TZ{"טנזניה"} - UA{"אוקראינה"} - UG{"אוגנדה"} - UM{"איים קטנים שלחוף ארצות הברית"} - US{"ארצות הברית"} - UY{"אורוגוואי"} - UZ{"אוזבקיסטן"} - VA{"הוותיקן"} - VC{"סנט וינסנט והגרנדינים"} - VE{"ונצואלה"} - VG{"איי הבתולה הבריטיים"} - VI{"איי הבתולה האמריקניים"} - VN{"וייטנאם"} - VU{"ואנואטו"} - WF{"ואליס ופוטונה"} - WS{"סמואה"} - YE{"תימן"} - YT{"מיוטה"} - YU{"יוגוסלביה"} - ZA{"דרום אפריקה"} - ZM{"זמביה"} - ZW{"זימבבווה"} - } - Currencies{ - ILS{ - "₪", - "ש\"ח", - } - TRY{ - "TRY", - "לירה טורקית חדשה", - } - } - ExemplarCharacters{"[ְ-ֹֻ-ֽֿׁ-ׂׄא-ת]"} - Keys{ - calendar{"לוח שנה"} - collation{"מיון"} - currency{"מטבע"} - } - Languages{ - aa{"אתיופית"} - af{"אפריקנית"} - ar{"ערבית"} - arc{"ארמית"} - ast{"אוסטרית"} - aus{"שפות אוסטרליות"} - bg{"בולגרית"} - bn{"בנגלית"} - bo{"טיבטית"} - bs{"בוסנית"} - ca{"קטלונית"} - cad{"קאדו"} - cs{"צ׳כית"} - cy{"וולשית"} - da{"דנית"} - de{"גרמנית"} - egy{"מצרית (עתיקה)"} - el{"יוונית"} - en{"אנגלית"} - eo{"אספרנטו"} - es{"ספרדית"} - et{"אסטונית"} - eu{"בסקית"} - fa{"פרסית"} - fi{"פינית"} - fr{"צרפתית"} - ga{"אירית"} - gd{"סקוטית גאלית"} - he{"עברית"} - hi{"הינדית"} - hr{"קרואטית"} - hu{"הונגרית"} - hy{"ארמנית"} - id{"אינדונזית"} - is{"איסלנדית"} - it{"איטלקית"} - ja{"יפנית"} - ka{"גרוזינית"} - ko{"קוריאנית"} - la{"לטינית"} - lad{"לדינו"} - lt{"ליטאית"} - lv{"לטבית"} - mas{"מאסאית"} - mi{"מאורית"} - mk{"מקדונית"} - mn{"מונגולית"} - mo{"מולדבית"} - mt{"מלטזית"} - mul{"מספר שפות"} - myn{"מאיה"} - nap{"נפוליטנית"} - ne{"נפאלית"} - nl{"הולנדית"} - no{"נורווגית"} - pl{"פולנית"} - pt{"פורטוגזית"} - ro{"רומנית"} - ru{"רוסית"} - sa{"סנסקרית"} - sgn{"שפת סימנים"} - sh{"סרבו-קרואטית"} - sk{"סלובקית"} - sl{"סלובנית"} - sr{"סרבית"} - sv{"שוודית"} - sw{"סווהילית"} - th{"תאי"} - tk{"טורקמנית"} - tr{"טורקית"} - uk{"אוקראינית"} - yi{"יידיש"} - zh{"סינית"} - zu{"זולו"} - } - LocaleScript{ - "Hebr", - } - Scripts{ - Hebr{"עברית"} - } - Types{ - calendar{ - hebrew{"לוח שנה עברי"} - } - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimePatterns{ - "HH:mm:ss z", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - "EEEE d MMMM yyyy", - "d MMMM yyyy", - "dd/MM/yyyy", - "dd/MM/yy", - "{0} {1}", - } - dayNames{ - format{ - abbreviated{ - "א", - "ב", - "ג", - "ד", - "ה", - "ו", - "ש", - } - narrow{ - "א", - "ב", - "ג", - "ד", - "ה", - "ו", - "ש", - } - wide{ - "יום ראשון", - "יום שני", - "יום שלישי", - "יום רביעי", - "יום חמישי", - "יום שישי", - "שבת", - } - } - } - eras{ - abbreviated{ - "לפנה״ס", - "לסה״נ", - } - } - monthNames{ - format{ - abbreviated{ - "ינו", - "פבר", - "מרץ", - "אפר", - "מאי", - "יונ", - "יול", - "אוג", - "ספט", - "אוק", - "נוב", - "דצמ", - } - wide{ - "ינואר", - "פברואר", - "מרץ", - "אפריל", - "מאי", - "יוני", - "יולי", - "אוגוסט", - "ספטמבר", - "אוקטובר", - "נובמבר", - "דצמבר", - } - } - } - weekend:intvector{ - 6, - 0, - 7, - 86400000, - } - } - hebrew{ - eras{ - abbreviated{ - "לבה\"ע", - } - } - monthNames{ - format{ - abbreviated:alias{"he/calendar/hebrew/monthNames/format/wide"} - wide{ - "תשרי", - "חשון", - "כסלו", - "טבת", - "שבט", - "אדר ראשון", - "אדר שני", - "ניסן", - "אייר", - "סיון", - "תמוז", - "אב", - "אלול", - } - } - } - } - islamic{ - eras{ - abbreviated{ - "שנת היג׳רה", - } - } - monthNames{ - format{ - abbreviated:alias{"he/calendar/islamic/monthNames/format/wide"} - wide{ - "מוחרם", - "ספר", - "רביע אל-אוואל", - "רביע אל-תני", - "ג׳ומדה אל-אוואל", - "ג׳ומדה אל-תני", - "רג׳אב", - "שעבאן", - "ראמדן", - "שוואל", - "זו אל-QI'DAH", - "זו אל-חיג׳ה", - } - } - } - } - islamic-civil:alias{"he/calendar/islamic"} - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/he.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/he.xml + */ +he{ + AuxExemplarCharacters{"[ֽ ׄ ְ-ֹ ֻ ׂ ׁ ּ ֿ ׳ ״ a-z]"} + Countries{ + 001{"עולם"} + 002{"אפריקה"} + 005{"דרום אמריקה"} + 009{"אוקיניה"} + 011{"מערב אפריקה"} + 013{"מרכז אמריקה"} + 014{"מזרח אפריקה"} + 015{"צפון אפריקה"} + 017{"מרכז אפריקה"} + 019{"אמריקות"} + 021{"צפון אמריקה"} + 029{"קריביים"} + 030{"מזרח אסיה"} + 035{"דרום-מזרח אסיה"} + 039{"דרום אירופה"} + 053{"אוסטרליה וניו-זילנד"} + 054{"מלנסיה"} + 061{"פולינזיה"} + 142{"אסיה"} + 150{"אירופה"} + 151{"מזרח אירופה"} + 154{"צפון אירופה"} + 155{"מערב אירופה"} + 830{"איי קנל"} + AD{"אנדורה"} + AE{"איחוד האמירויות הערביות"} + AG{"אנטיגואה וברבודה"} + AL{"אלבניה"} + AM{"ארמניה"} + AN{"אנטילים הולנדיים"} + AO{"אנגולה"} + AQ{"אנטארקטיקה"} + AR{"ארגנטינה"} + AS{"סמואה האמריקנית"} + AT{"אוסטריה"} + AU{"אוסטרליה"} + AW{"ארובה"} + AX{"איי אלנד"} + AZ{"אזרבייג׳אן"} + BA{"בוסניה והרצגובינה"} + BB{"ברבדוס"} + BD{"בנגלאדש"} + BE{"בלגיה"} + BF{"בורקינה פאסו"} + BG{"בולגריה"} + BH{"בחריין"} + BI{"בורונדי"} + BJ{"בנין"} + BM{"ברמודה"} + BN{"ברוניי דארסלאם"} + BO{"בוליביה"} + BR{"ברזיל"} + BS{"באהאמה, איי"} + BV{"בובה, אי"} + BW{"בוטסוואנה"} + BY{"בלארוס"} + BZ{"בליז"} + CA{"קנדה"} + CD{"קונגו, הרפובליקה הדמוקרטית של"} + CF{"הרפובליקה של מרכז אפריקה"} + CG{"קונגו"} + CH{"שווייץ"} + CI{"חוף השנהב"} + CL{"צ׳ילה"} + CN{"סין"} + CO{"קולומביה"} + CR{"קוסטה ריקה"} + CS{"סרביה ומונטנגרו"} + CU{"קובה"} + CY{"קפריסין"} + DE{"גרמניה"} + DJ{"ג׳יבוטי"} + DK{"דנמרק"} + DM{"דומיניקה"} + DO{"הרפובליקה הדומיניקנית"} + DZ{"אלג׳יריה"} + EC{"אקוואדור"} + EE{"אסטוניה"} + EG{"מצרים"} + EH{"סהרה המערבית"} + ER{"אריטראה"} + ES{"ספרד"} + ET{"אתיופיה"} + FI{"פינלנד"} + FJ{"פיג׳י"} + FM{"מיקרונזיה"} + FR{"צרפת"} + GA{"גאבון"} + GB{"בריטניה"} + GE{"גרוזיה"} + GF{"גיאנה הצרפתית"} + GH{"גאנה"} + GI{"גיברלטר"} + GL{"גרינלנד"} + GM{"גמביה"} + GN{"גיניאה"} + GP{"גוואדלופ"} + GQ{"גיניאה המשוונית"} + GR{"יוון"} + GS{"ג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומיים"} + GT{"גוואטמאלה"} + GU{"גואם"} + GW{"גיניאה-ביסאו"} + GY{"גיאנה"} + HK{"הונג קונג S.A.R. של סין"} + HN{"הונדורס"} + HR{"קרואטיה"} + HT{"האיטי"} + HU{"הונגריה"} + ID{"אינדונזיה"} + IE{"אירלנד"} + IL{"ישראל"} + IN{"הודו"} + IO{"טריטוריה בריטית באוקיאנוס ההודי"} + IQ{"עירק"} + IR{"איראן"} + IS{"איסלנד"} + IT{"איטליה"} + JO{"ירדן"} + JP{"יפן"} + KE{"קניה"} + KH{"קמבודיה"} + KI{"קיריבאטי"} + KM{"קומורוס"} + KN{"סנט קיטס ונוויס"} + KP{"קוריאה, צפון"} + KR{"קוריאה, דרום"} + LA{"לאוס"} + LB{"לבנון"} + LC{"סנט לוסיה"} + LI{"ליכטנשטיין"} + LK{"סרי לנקה"} + LR{"ליבריה"} + LT{"ליטא"} + LU{"לוקסמבורג"} + LV{"לטביה"} + LY{"לוב"} + MA{"מרוקו"} + MD{"מולדובה"} + MG{"מדגסקר"} + MK{"מקדוניה"} + ML{"מאלי"} + MM{"מייאנמאר"} + MN{"מונגוליה"} + MO{"מקאו S.A.R. של סין"} + MQ{"מרטיניק"} + MR{"מאוריטניה"} + MT{"מלטה"} + MU{"מאוריציוס"} + MV{"מלדיבים"} + MW{"מלאווי"} + MX{"מקסיקו"} + MY{"מלזיה"} + MZ{"מוזמביק"} + NC{"קלדוניה החדשה"} + NE{"ניז׳ר"} + NF{"איי נורפק"} + NG{"ניגריה"} + NI{"ניקאראגואה"} + NL{"הולנד"} + NO{"נורווגיה"} + NP{"נפאל"} + NR{"נאורו"} + NU{"ניווה"} + NZ{"ניו זילנד"} + OM{"עומאן"} + PA{"פנמה"} + PE{"פרו"} + PF{"פולינזיה הצרפתית"} + PG{"פפואה גיניאה החדשה"} + PH{"פיליפינים"} + PL{"פולין"} + PM{"סנט פייר ומיקלון"} + PN{"פיטקרן"} + PS{"הרשות הפלשתינית"} + PT{"פורטוגל"} + PW{"פאלאו"} + QA{"קאטאר"} + RE{"ראוניון"} + RO{"רומניה"} + RU{"חבר המדינות הרוסיות"} + RW{"רואנדה"} + SA{"ערב הסעודית"} + SE{"שוודיה"} + SG{"סינגפור"} + SH{"סנט הלנה"} + SI{"סלובניה"} + SJ{"סוולבארד וז׳אן מאיין"} + SK{"סלובקיה"} + SL{"סיירה לאונה"} + SM{"סאן מארינו"} + SO{"סומאליה"} + SR{"סורינאם"} + ST{"סאו טומה ופרינסיפה"} + SV{"אל סלבאדור"} + SY{"סוריה"} + TD{"צ׳אד"} + TF{"טריטוריות דרומיות של צרפת"} + TG{"טוגו"} + TH{"תאילנד"} + TK{"טוקלאו"} + TL{"טימור המזרחית"} + TN{"טוניסיה"} + TO{"טונגה"} + TR{"טורקיה"} + TV{"טובאלו"} + TZ{"טנזניה"} + UA{"אוקראינה"} + UG{"אוגנדה"} + UM{"איים קטנים שלחוף ארצות הברית"} + US{"ארצות הברית"} + UY{"אורוגוואי"} + VC{"סנט וינסנט והגרנדינים"} + VE{"ונצואלה"} + VN{"וייטנאם"} + VU{"ואנואטו"} + WF{"ואליס ופוטונה"} + WS{"סמואה"} + YE{"תימן"} + YT{"מאיוט"} + ZA{"דרום אפריקה"} + ZM{"זמביה"} + ZW{"זימבאבווה"} + } + Currencies{ + ADP{ + "ADP", + "פזו אנדורי", + } + AFN{ + "AFN", + "אפגני", + } + ARS{ + "ARS", + "פזו ארגנטינאי", + } + ATS{ + "ATS", + "שילינג אוסטרי", + } + AUD{ + "AUD", + "דולר אוסטרלי", + } + BEF{ + "BEF", + "פרנק בלגי", + } + BHD{ + "BHD", + "דינר בחרייני", + } + BIF{ + "BIF", + "פרנק בורונדי", + } + BMD{ + "BMD", + "דולר ברמודה", + } + BOB{ + "BOB", + "בוליביאנו", + } + BOP{ + "BOP", + "פזו בוליבי", + } + BRL{ + "BRL", + "ריאל ברזילאי", + } + BSD{ + "BSD", + "דולר בהאמי", + } + BZD{ + "BZD", + "דולר בליזאי", + } + CAD{ + "CAD", + "דולר קנדי", + } + CHF{ + "CHF", + "פרנק שוויצרי", + } + CLP{ + "CLP", + "פזו צ'ילאני", + } + CSD{ + "CSD", + "דינר סרבי", + } + CUP{ + "CUP", + "פזו קובני", + } + CYP{ + "CYP", + "לירה קפריסאית", + } + DDM{ + "DDM", + "מרק מזרח גרמני", + } + DEM{ + "DEM", + "מרק גרמני", + } + DKK{ + "DKK", + "כתר דני", + } + DZD{ + "DZD", + "דינר אלג'ירי", + } + EEK{ + "EEK", + "קרון אסטוני", + } + EGP{ + "EGP", + "לירה מצרית", + } + EQE{ + "EQE", + "אקוולה", + } + ESP{ + "ESP", + "פסטה ספרדי", + } + EUR{ + "€", + "יורו", + } + FIM{ + "FIM", + "מרק פיני", + } + FRF{ + "FRF", + "פרנק צרפתי", + } + GBP{ + "£", + "לירה שטרלינג", + } + GIP{ + "GIP", + "פאונד גיברלטר", + } + GNF{ + "GNF", + "פרנק גינאי", + } + GWP{ + "GWP", + "פזו גינאי", + } + GYD{ + "GYD", + "דולר גיאני", + } + HKD{ + "HKD", + "דולר הונג קונגי", + } + IEP{ + "IEP", + "לירה אירית", + } + ILP{ + "ILP", + "לירה ישראלית", + } + ILS{ + "₪", + "ש\"ח", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/he_IL.xml // * // *************************************************************************** he_IL{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.40"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + weekend:intvector{ + 6, + 0, + 7, + 86400000, + } + } + } + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + } } diff --git a/icuSources/data/locales/hi.txt b/icuSources/data/locales/hi.txt index 35e054e9..1344df33 100644 --- a/icuSources/data/locales/hi.txt +++ b/icuSources/data/locales/hi.txt @@ -1,429 +1,500 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hi.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/hi.xml - */ -hi{ - Countries{ - AD{"अन्डोरा"} - AE{"संयुक्त अरब अमीरात"} - AF{"अफगानिस्तान"} - AG{"एन्टिगुवा और बारबूडा"} - AL{"अल्बानिया"} - AM{"आर्मेनिया"} - AO{"अंगोला"} - AR{"अर्जेन्टीना"} - AT{"ऑस्ट्रिया"} - AU{"ऑस्ट्रेलिया"} - AZ{"अजरबैजान"} - BA{"बोसनिया हर्जिगोविना"} - BB{"बारबाडोस"} - BD{"बंगलादेश"} - BE{"बेल्जियम"} - BF{"बर्किना फासो"} - BG{"बुल्गारिया"} - BH{"बहरैन"} - BI{"बुरुंडी"} - BJ{"बेनिन"} - BN{"ब्रूनइ"} - BO{"बोलीविया"} - BR{"ब्राजील"} - BS{"बहामा"} - BT{"भूटान"} - BW{"बोत्स्वाना"} - BY{"बेलारूस"} - BZ{"बेलिज"} - CA{"कनाडा"} - CC{"किंशासा"} - CF{"सेंट्रल अफ्रीकन रिपब्लिक"} - CG{"कांगो"} - CH{"स्विस"} - CI{"आईवरी कोस्ट"} - CL{"चिली"} - CM{"कामेरान"} - CN{"चीन"} - CO{"कोलम्बिया"} - CR{"कोस्टारीका"} - CU{"क्यूबा"} - CV{"कैप वर्त"} - CY{"साइप्रस"} - CZ{"चेक गणराज्य"} - DE{"जर्मनी"} - DJ{"जिबूती"} - DK{"डेनमार्क"} - DM{"डोमिनिका"} - DO{"डोमिनिकन गणराज्य"} - DZ{"अल्जीरिया"} - EC{"इक्वाडोर"} - EE{"एस्टोनिया"} - EG{"मिस्र"} - EH{"पश्चिमी सहारा"} - ER{"इरिट्रिया"} - ES{"स्पेन"} - ET{"इथियोपिया"} - FI{"फिनलैंड"} - FJ{"फिजी"} - FR{"फ्रांस"} - GR{"ग्रीस"} - GT{"गोतेदाला"} - GW{"गीनी-बिसाउ"} - GY{"गुयाना"} - HN{"हाण्डूरस"} - HR{"क्रोशिया"} - HT{"हाइती"} - HU{"हंगरी"} - ID{"इंडोनेशिया"} - IE{"आयरलैंड"} - IL{"इसराइल"} - IN{"भारत"} - IQ{"इराक"} - IR{"ईरान"} - IS{"आइसलैंड"} - IT{"इटली"} - JM{"जमाइका"} - JO{"जोर्डन"} - JP{"जापान"} - KE{"केन्या"} - KG{"किर्गिज"} - KH{"कम्बोडिया"} - KM{"कोमोरस"} - KN{"सेंट किट्स और नेविस"} - KP{"उत्तर कोरिया"} - KR{"दक्षिण कोरिया"} - KW{"कुवैत"} - KZ{"कजाखस्तान"} - LA{"लाओस"} - LB{"लेबनान"} - LC{"सेंट लूसिया"} - LI{"लिकटेंस्टीन"} - LK{"श्रीलंका"} - LR{"लाइबेरिया"} - LS{"लेसोथो"} - LT{"लिथुआनिया"} - LU{"लक्समबर्ग"} - LV{"लात्विया"} - LY{"लीबिया"} - MA{"मोरक्को"} - MC{"मोनाको"} - MD{"मोल्डाविया"} - MG{"मदागास्कर"} - MK{"मैसेडोनिया"} - ML{"माली"} - MM{"म्यानमार"} - MN{"मंगोलिया"} - MR{"मॉरिटानिया"} - MT{"माल्टा"} - MU{"मौरिस"} - MV{"मालदीव"} - MW{"मलावी"} - MX{"मेक्सिको"} - MY{"मलेशिया"} - MZ{"मोजाम्बिक"} - PA{"पनामा"} - PE{"पेरू"} - PG{"पापुआ न्यू गिनी"} - PH{"फिलीपिंस"} - PK{"पाकिस्तान"} - PL{"पोलैंड"} - PT{"पुर्तगाल"} - PY{"पारागुए"} - QA{"कतर"} - RO{"रोमानिया"} - RU{"रूस"} - RW{"रूआण्डा"} - SA{"सऊदी अरब"} - SD{"सूडान"} - SE{"स्वीडन"} - SG{"सिंगापुर"} - SI{"स्लोवेनिया"} - SK{"स्लोवाकिया"} - SL{"सियरालेओन"} - SM{"सैन मेरीनो"} - SN{"सेनेगल"} - SO{"सोमालिया"} - SR{"सुरिनाम"} - ST{"साउ-तोम-प्रिंसिप"} - SV{"अल साल्वाडोर"} - SY{"सीरिया"} - SZ{"सुआजीलैंड"} - TD{"चाड"} - TG{"टोगो"} - TH{"थाइलैंड"} - TJ{"ताजिकिस्तान"} - TM{"तुर्कमेनिस्तान"} - TN{"तुनिशिया"} - TO{"टोंगा"} - TR{"तुर्की"} - TT{"ट्रिनिडाड और टोबैगो"} - TV{"तुवालु"} - TW{"ताइवान"} - TZ{"तंजानिया"} - UA{"यूक्रेन"} - UG{"युगांडा"} - US{"संयुक्त राज्य अमरिका"} - UY{"युरूगुए"} - UZ{"उजबेकिस्तान"} - VA{"वैटिकन"} - VE{"वेनेजुएला"} - VG{"ब्रिटिश वर्जीन ऌईलैंडस्"} - VI{"ईउ, एस वर्जीन आईलैंडस्"} - VN{"वियतनाम"} - VU{"वानुअतु"} - YE{"यमन"} - ZA{"दक्षिण अफ्रीका"} - ZM{"जाम्बिया"} - ZW{"जिम्बाब्वे"} - } - Currencies{ - INR{ - "रु", - "INR", - } - } - ExemplarCharacters{"[ँ-ह़-्ॐॠ-ॣ]"} - Languages{ - aa{"अफ़ार"} - ab{"अब्खाज़ियन्"} - af{"अफ्रीकी"} - am{"अम्हारिक्"} - ar{"अरबी"} - as{"असामी"} - ay{"आयमारा"} - az{"अज़रबैंजानी"} - ba{"बशख़िर"} - be{"बैलोरूशियन्"} - bg{"बल्गेरियन्"} - bh{"बिहारी"} - bi{"बिस्लामा"} - bn{"बँगाली"} - bo{"तिब्बती"} - br{"ब्रेटन"} - ca{"कातालान"} - co{"कोर्सीकन"} - cs{"चेक"} - cy{"वेल्श"} - da{"डैनीश"} - de{"ज़र्मन"} - dz{"भुटानी"} - el{"ग्रीक"} - en{"अंग्रेजी"} - eo{"एस्पेरान्तो"} - es{"स्पेनिश"} - et{"ऐस्तोनियन्"} - eu{"बास्क्"} - fa{"पर्शियन्"} - fi{"फिनिश"} - fj{"फ़ीजी"} - fo{"फिरोज़ी"} - fr{"फ्रेंच"} - fy{"फ्रीज़न्"} - ga{"आईरिश"} - gd{"स्काट्स् गायेलिक्"} - gl{"गैलिशियन्"} - gn{"गुआरानी"} - gu{"गुज़राती"} - ha{"होउसा"} - he{"हिब्रीऊ"} - hi{"हिंदी"} - hr{"क्रोएशन्"} - hu{"हंगेरी"} - hy{"अरमेनियन्"} - ia{"ईन्टरलिंगुआ"} - id{"इन्डोनेशियन्"} - ie{"ईन्टरलिंगुइ"} - ik{"इनुपियाक्"} - is{"आईस्लैंडिक्"} - it{"ईटालियन्"} - iu{"इनूकीटूत्"} - ja{"जापानी"} - jv{"जावानीस"} - ka{"जॉर्जीयन्"} - kk{"कज़ाख"} - kl{"ग्रीनलैंडिक"} - km{"कैम्बोडियन्"} - kn{"कन्नड़"} - ko{"कोरीयन्"} - kok{"कोंकणी"} - ks{"काश्मिरी"} - ku{"कुरदीश"} - ky{"किरघिज़"} - la{"लैटीन"} - ln{"लिंगाला"} - lo{"लाओथीयन्"} - lt{"लिथुनियन्"} - lv{"लाटवियन् (लेट्टीश)"} - mg{"मालागासी"} - mi{"मेओरी"} - mk{"मैसेडोनियन्"} - ml{"मलयालम"} - mn{"मोंगोलियन"} - mo{"मोलडावियन्"} - mr{"मराठी"} - ms{"मलय"} - mt{"मालटिस्"} - my{"बर्लिस"} - na{"नायरू"} - ne{"नेपाली"} - nl{"डच्"} - no{"नार्वेजीयन्"} - oc{"ओसीटान"} - om{"ओरोमो (अफ़ान)"} - or{"उड़िया"} - pa{"पंजाबी"} - pl{"पॉलिश"} - ps{"पॉशतो (पुशतो)"} - pt{"पुर्तुगी"} - qu{"क्वेशुआ"} - raj{"राजेस्थानी"} - rm{"रहेय्टो-रोमान्स"} - rn{"किरून्दी"} - ro{"रूमानीयन्"} - root{"शिखर"} - ru{"रुसी"} - rw{"किन्यारवाण्डा"} - sa{"संस्कृत"} - sd{"सिन्धी"} - sg{"साँग्रो"} - sh{"सेर्बो-क्रोएशन्"} - si{"शिंघालीस्"} - sk{"स्लोवाक्"} - sl{"स्लोवेनियन्"} - sm{"सामोन"} - sn{"सोणा"} - so{"सोमाली"} - sq{"अल्बेनियन्"} - sr{"सर्बियन्"} - ss{"सीस्वाटि"} - st{"सेसोथो"} - su{"सुन्दानीस"} - sv{"स्विडिश"} - sw{"स्वाहिली"} - ta{"तमिल"} - te{"तेलेगु"} - tg{"ताजिक्"} - th{"थाई"} - ti{"तिग्रीन्या"} - tk{"तुक्रमेन"} - tl{"तागालोग"} - tn{"सेत्स्वाना"} - to{"टोंगा"} - tr{"तुक्रीश"} - ts{"सोंगा"} - tt{"टाटर"} - tw{"ट्वी"} - ug{"उईघुर"} - uk{"यूक्रेनियन्"} - ur{"ऊर्दु"} - uz{"उज़बेक्"} - vi{"वियेतनामी"} - vo{"वोलापुक"} - wo{"वोलोफ"} - xh{"षोसा"} - yi{"येहुदी"} - yo{"योरूबा"} - za{"ज़ुआंग"} - zh{"चीनी"} - zu{"ज़ुलू"} - } - LocaleScript{ - "Deva", - } - NumberElements{ - ".", - ",", - ";", - "%", - "०", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "पूर्वाह्न", - "अपराह्न", - } - dayNames{ - format{ - abbreviated{ - "रवि", - "सोम", - "मंगल", - "बुध", - "गुरु", - "शुक्र", - "शनि", - } - wide{ - "रविवार", - "सोमवार", - "मंगलवार", - "बुधवार", - "गुरुवार", - "शुक्रवार", - "शनिवार", - } - } - } - eras{ - abbreviated{ - "ईसापूर्व", - "सन", - } - } - monthNames{ - format{ - abbreviated{ - "जनवरी", - "फरवरी", - "मार्च", - "अप्रैल", - "मई", - "जून", - "जुलाई", - "अगस्त", - "सितम्बर", - "अक्तूबर", - "नवम्बर", - "दिसम्बर", - } - wide{ - "जनवरी", - "फरवरी", - "मार्च", - "अप्रैल", - "मई", - "जून", - "जुलाई", - "अगस्त", - "सितम्बर", - "अक्तूबर", - "नवम्बर", - "दिसम्बर", - } - } - } - } - } - zoneStrings{ - { - "Asia/Calcutta", - "भारतीय समय", - "IST", - "भारतीय समय", - "IST", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/hi.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/hi.xml + */ +hi{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + AD{"अन्डोरा"} + AE{"संयुक्त अरब अमीरात"} + AF{"अफगानिस्तान"} + AG{"एन्टिगुवा और बारबूडा"} + AL{"अल्बानिया"} + AM{"आर्मेनिया"} + AO{"अंगोला"} + AR{"अर्जेन्टीना"} + AT{"ऑस्ट्रिया"} + AU{"ऑस्ट्रेलिया"} + AZ{"अजरबैजान"} + BA{"बोसनिया हर्जिगोविना"} + BB{"बारबाडोस"} + BD{"बंगलादेश"} + BE{"बेल्जियम"} + BF{"बर्किना फासो"} + BG{"बुल्गारिया"} + BH{"बहरैन"} + BI{"बुरुंडी"} + BJ{"बेनिन"} + BN{"ब्रूनइ"} + BO{"बोलीविया"} + BR{"ब्राजील"} + BS{"बहामा"} + BT{"भूटान"} + BW{"बोत्स्वाना"} + BY{"बेलारूस"} + BZ{"बेलिज"} + CA{"कनाडा"} + CC{"किंशासा"} + CF{"सेंट्रल अफ्रीकन रिपब्लिक"} + CG{"कांगो"} + CH{"स्विस"} + CI{"आईवरी कोस्ट"} + CL{"चिली"} + CM{"कामेरान"} + CN{"चीन"} + CO{"कोलम्बिया"} + CR{"कोस्टारीका"} + CU{"क्यूबा"} + CV{"कैप वर्त"} + CY{"साइप्रस"} + CZ{"चेक गणराज्य"} + DE{"जर्मनी"} + DJ{"जिबूती"} + DK{"डेनमार्क"} + DM{"डोमिनिका"} + DO{"डोमिनिकन गणराज्य"} + DZ{"अल्जीरिया"} + EC{"इक्वाडोर"} + EE{"एस्टोनिया"} + EG{"मिस्र"} + EH{"पश्चिमी सहारा"} + ER{"इरिट्रिया"} + ES{"स्पेन"} + ET{"इथियोपिया"} + FI{"फिनलैंड"} + FJ{"फिजी"} + FR{"फ्रांस"} + GB{"ब्रितन"} + GR{"ग्रीस"} + GT{"गोतेदाला"} + GW{"गीनी-बिसाउ"} + GY{"गुयाना"} + HN{"हाण्डूरस"} + HR{"क्रोशिया"} + HT{"हाइती"} + HU{"हंगरी"} + ID{"इंडोनेशिया"} + IE{"आयरलैंड"} + IL{"इसराइल"} + IN{"भारत"} + IQ{"इराक"} + IR{"ईरान"} + IS{"आइसलैंड"} + IT{"इटली"} + JM{"जमाइका"} + JO{"जोर्डन"} + JP{"जापान"} + KE{"केन्या"} + KG{"किर्गिज"} + KH{"कम्बोडिया"} + KM{"कोमोरस"} + KN{"सेंट किट्स और नेविस"} + KP{"उत्तर कोरिया"} + KR{"दक्षिण कोरिया"} + KW{"कुवैत"} + KZ{"कजाखस्तान"} + LA{"लाओस"} + LB{"लेबनान"} + LC{"सेंट लूसिया"} + LI{"लिकटेंस्टीन"} + LK{"श्रीलंका"} + LR{"लाइबेरिया"} + LS{"लेसोथो"} + LT{"लिथुआनिया"} + LU{"लक्समबर्ग"} + LV{"लात्विया"} + LY{"लीबिया"} + MA{"मोरक्को"} + MC{"मोनाको"} + MD{"मोल्डाविया"} + MG{"मदागास्कर"} + MK{"मैसेडोनिया"} + ML{"माली"} + MM{"म्यानमार"} + MN{"मंगोलिया"} + MR{"मॉरिटानिया"} + MT{"माल्टा"} + MU{"मौरिस"} + MV{"मालदीव"} + MW{"मलावी"} + MX{"मेक्सिको"} + MY{"मलेशिया"} + MZ{"मोजाम्बिक"} + PA{"पनामा"} + PE{"पेरू"} + PG{"पापुआ न्यू गिनी"} + PH{"फिलीपिंस"} + PK{"पाकिस्तान"} + PL{"पोलैंड"} + PT{"पुर्तगाल"} + PY{"पारागुए"} + QA{"कतर"} + RO{"रोमानिया"} + RU{"रूस"} + RW{"रूआण्डा"} + SA{"सऊदी अरब"} + SD{"सूडान"} + SE{"स्वीडन"} + SG{"सिंगापुर"} + SI{"स्लोवेनिया"} + SK{"स्लोवाकिया"} + SL{"सियरालेओन"} + SM{"सैन मेरीनो"} + SN{"सेनेगल"} + SO{"सोमालिया"} + SR{"सुरिनाम"} + ST{"साउ-तोम-प्रिंसिप"} + SV{"अल साल्वाडोर"} + SY{"सीरिया"} + SZ{"सुआजीलैंड"} + TD{"चाड"} + TG{"टोगो"} + TH{"थाइलैंड"} + TJ{"ताजिकिस्तान"} + TM{"तुर्कमेनिस्तान"} + TN{"तुनिशिया"} + TO{"टोंगा"} + TR{"तुर्की"} + TT{"ट्रिनिडाड और टोबैगो"} + TV{"तुवालु"} + TW{"ताइवान"} + TZ{"तंजानिया"} + UA{"यूक्रेन"} + UG{"युगांडा"} + US{"संयुक्त राज्य अमरिका"} + UY{"युरूगुए"} + UZ{"उजबेकिस्तान"} + VA{"वैटिकन"} + VE{"वेनेजुएला"} + VG{"ब्रिटिश वर्जीन ऌईलैंडस्"} + VI{"ईउ, एस वर्जीन आईलैंडस्"} + VN{"वियतनाम"} + VU{"वानुअतु"} + YE{"यमन"} + ZA{"दक्षिण अफ्रीका"} + ZM{"जाम्बिया"} + ZW{"जिम्बाब्वे"} + } + Currencies{ + BRL{ + "रीयाल", + "रीयाल", + } + CNY{ + "युवान", + "युवान", + } + CSD{ + "स. ढीनार", + "सर्बिय का ढीनार", + } + EUR{ + "€", + "युरो", + } + FJD{ + "फ़िजी का डालर", + "फ़िजी का डालर", + } + GBP{ + "£", + "ब्रितन का पौन्ड स्टर्लिग", + } + INR{ + "रु.", + "भारतीय रूपया", + } + ITL{ + "₤", + "इतली का लीरा", + } + JPY{ + "¥", + "जापानी येन", + } + RUB{ + "रूबल", + "रूसी रूबल", + } + USD{ + "$", + "अमरीकी डालर", + } + } + ExemplarCharacters{"[ॐ ०-९ अ-ऍ ए-ऑ ओ-न प-र ल ळ व-ह ़ ँ-ः ऽ ् ा-ॅ े-ॉ ो ौ]"} + Languages{ + aa{"अफ़ार"} + ab{"अब्खाज़ियन्"} + af{"अफ्रीकी"} + am{"अम्हारिक्"} + ar{"अरबी"} + as{"असामी"} + ay{"आयमारा"} + az{"अज़रबैंजानी"} + ba{"बशख़िर"} + be{"बैलोरूशियन्"} + bg{"बल्गेरियन्"} + bh{"बिहारी"} + bi{"बिस्लामा"} + bn{"बँगाली"} + bo{"तिब्बती"} + br{"ब्रेटन"} + ca{"कातालान"} + co{"कोर्सीकन"} + cs{"चेक"} + cy{"वेल्श"} + da{"डैनीश"} + de{"ज़र्मन"} + dz{"भुटानी"} + el{"ग्रीक"} + en{"अंग्रेजी"} + eo{"एस्पेरान्तो"} + es{"स्पेनिश"} + et{"ऐस्तोनियन्"} + eu{"बास्क्"} + fa{"पर्शियन्"} + fi{"फिनिश"} + fj{"फ़ीजी"} + fo{"फिरोज़ी"} + fr{"फ्रेंच"} + fy{"फ्रीज़न्"} + ga{"आईरिश"} + gd{"स्काट्स् गायेलिक्"} + gl{"गैलिशियन्"} + gn{"गुआरानी"} + gu{"गुज़राती"} + ha{"होउसा"} + he{"हिब्रीऊ"} + hi{"हिंदी"} + hr{"क्रोएशन्"} + hu{"हंगेरी"} + hy{"अरमेनियन्"} + ia{"ईन्टरलिंगुआ"} + id{"इन्डोनेशियन्"} + ie{"ईन्टरलिंगुइ"} + ik{"इनुपियाक्"} + is{"आईस्लैंडिक्"} + it{"ईटालियन्"} + iu{"इनूकीटूत्"} + ja{"जापानी"} + jv{"जावानीस"} + ka{"जॉर्जीयन्"} + kk{"कज़ाख"} + kl{"ग्रीनलैंडिक"} + km{"कैम्बोडियन्"} + kn{"कन्नड़"} + ko{"कोरीयन्"} + kok{"कोंकणी"} + ks{"काश्मिरी"} + ku{"कुरदीश"} + ky{"किरघिज़"} + la{"लैटीन"} + ln{"लिंगाला"} + lo{"लाओथीयन्"} + lt{"लिथुनियन्"} + lv{"लाटवियन् (लेट्टीश)"} + mg{"मालागासी"} + mi{"मेओरी"} + mk{"मैसेडोनियन्"} + ml{"मलयालम"} + mn{"मोंगोलियन"} + mo{"मोलडावियन्"} + mr{"मराठी"} + ms{"मलय"} + mt{"मालटिस्"} + my{"बर्लिस"} + na{"नायरू"} + ne{"नेपाली"} + nl{"डच्"} + no{"नार्वेजीयन्"} + oc{"ओसीटान"} + om{"ओरोमो (अफ़ान)"} + or{"उड़िया"} + pa{"पंजाबी"} + pl{"पॉलिश"} + ps{"पॉशतो (पुशतो)"} + pt{"पुर्तुगी"} + qu{"क्वेशुआ"} + raj{"राजेस्थानी"} + rm{"रहेय्टो-रोमान्स"} + rn{"किरून्दी"} + ro{"रूमानीयन्"} + root{"शिखर"} + ru{"रुसी"} + rw{"किन्यारवाण्डा"} + sa{"संस्कृत"} + sd{"सिन्धी"} + sg{"साँग्रो"} + sh{"सेर्बो-क्रोएशन्"} + si{"शिंघालीस्"} + sk{"स्लोवाक्"} + sl{"स्लोवेनियन्"} + sm{"सामोन"} + sn{"सोणा"} + so{"सोमाली"} + sq{"अल्बेनियन्"} + sr{"सर्बियन्"} + ss{"सीस्वाटि"} + st{"सेसोथो"} + su{"सुन्दानीस"} + sv{"स्विडिश"} + sw{"स्वाहिली"} + ta{"तमिल"} + te{"तेलेगु"} + tg{"ताजिक्"} + th{"थाई"} + ti{"तिग्रीन्या"} + tk{"तुक्रमेन"} + tl{"तागालोग"} + tn{"सेत्स्वाना"} + to{"टोंगा"} + tr{"तुक्रीश"} + ts{"सोंगा"} + tt{"टाटर"} + tw{"ट्वी"} + ug{"उईघुर"} + uk{"यूक्रेनियन्"} + ur{"ऊर्दु"} + uz{"उज़बेक्"} + vi{"वियेतनामी"} + vo{"वोलापुक"} + wo{"वोलोफ"} + xh{"षोसा"} + yi{"येहुदी"} + yo{"योरूबा"} + za{"ज़ुआंग"} + zh{"चीनी"} + zu{"ज़ुलू"} + } + LocaleScript{ + "Deva", + } + NumberElements{ + ".", + ",", + ";", + "%", + "०", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Scripts{ + Arab{"अरबिक"} + Cyrl{"सिरिलिक"} + Deva{"देवनगरि"} + Hans{"चीनी सरल लिपि"} + Hant{"चीनी प्राचीन लिपि"} + Latn{"लाटिन"} + } + Version{"1.56"} + calendar{ + gregorian{ + AmPmMarkers{ + "पूर्वाह्न", + "अपराह्न", + } + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "रवि", + "सोम", + "मंगल", + "बुध", + "गुरु", + "शुक्र", + "शनि", + } + wide{ + "रविवार", + "सोमवार", + "मंगलवार", + "बुधवार", + "गुरुवार", + "शुक्रवार", + "शनिवार", + } + } + } + eras{ + abbreviated{ + "ईसापूर्व", + "सन", + } + } + monthNames{ + format{ + abbreviated{ + "जनवरी", + "फरवरी", + "मार्च", + "अप्रैल", + "मई", + "जून", + "जुलाई", + "अगस्त", + "सितम्बर", + "अक्तूबर", + "नवम्बर", + "दिसम्बर", + } + wide{ + "जनवरी", + "फरवरी", + "मार्च", + "अप्रैल", + "मई", + "जून", + "जुलाई", + "अगस्त", + "सितम्बर", + "अक्तूबर", + "नवम्बर", + "दिसम्बर", + } + } + } + quarters{ + format{ + wide{ + "पॆहला हंत 1", + "दूसरा हंत 2", + "तीसरा हंत 3", + "चौता हंत 4", + } + } + } + } + } + zoneStrings{ + "Asia:Calcutta"{ + ec{"Calcutta"} + ld{"भारतीय समय"} + ls{"भारतीय समय"} + sd{"IST"} + ss{"IST"} + } + } +} diff --git a/icuSources/data/locales/hi_IN.txt b/icuSources/data/locales/hi_IN.txt index 53ae5892..66b57c16 100644 --- a/icuSources/data/locales/hi_IN.txt +++ b/icuSources/data/locales/hi_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hi_IN.xml +// * Source File:/common/main/hi_IN.xml // * // *************************************************************************** hi_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.45"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", @@ -39,4 +35,10 @@ hi_IN{ } } } + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"'"} + quotationStart{"'"} + } } diff --git a/icuSources/data/locales/hr.txt b/icuSources/data/locales/hr.txt index 9cd731b7..f2934c0f 100644 --- a/icuSources/data/locales/hr.txt +++ b/icuSources/data/locales/hr.txt @@ -1,16 +1,45 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hr.xml +// * Source File:/common/main/hr.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/hr.xml + * ICU source: /xml/main/hr.xml */ hr{ Countries{ + 001{"Svijet"} + 002{"Afrika"} + 005{"Južna Amerika"} + 009{"Oceanija"} + 011{"Zapadna Afrika"} + 013{"Centralna Amerika"} + 014{"Istočna Afrika"} + 015{"Sjeverna Afrika"} + 017{"Središnja Afrika"} + 018{"Južna Afrika"} + 019{"Amerike"} + 021{"Sjeverna Amerika"} + 029{"Karibi"} + 030{"Istočna Azija"} + 035{"Jugoistočna Azija"} + 039{"Južna Europa"} + 053{"Australija i Novi Zeland"} + 054{"Melanezija"} + 057{"Micronezija"} + 061{"Polinezija"} + 062{"Južna Azija"} + 142{"Azija"} + 145{"Zapadna Azija"} + 150{"Europa"} + 151{"Istočna Europa"} + 154{"Sjeverna Europa"} + 155{"Zapadna Europa"} + 830{"Kanalski otoci"} + 833{"Otok Man"} AD{"Andora"} AE{"Ujedinjeni Arapski Emirati"} AF{"Afganistan"} @@ -26,6 +55,7 @@ hr{ AT{"Austrija"} AU{"Australija"} AW{"Aruba"} + AX{"Alandski otoci"} AZ{"Azerbajdžan"} BA{"Bosna i Hercegovina"} BB{"Barbados"} @@ -37,7 +67,7 @@ hr{ BI{"Burundi"} BJ{"Benin"} BM{"Bermuda"} - BN{"Brunei Darussalam"} + BN{"Brunei"} BO{"Bolivija"} BR{"Brazil"} BS{"Bahami"} @@ -59,6 +89,7 @@ hr{ CN{"Kina"} CO{"Kolumbija"} CR{"Kostarika"} + CS{"Srbija i Crna Gora"} CU{"Kuba"} CV{"Zeleni Rt"} CX{"Božićni Otoci"} @@ -190,6 +221,7 @@ hr{ PW{"Palau"} PY{"Paragvaj"} QA{"Katar"} + QO{"Ostala oceanija"} RE{"Reunion"} RO{"Rumunjska"} RU{"Ruska Federacija"} @@ -208,7 +240,6 @@ hr{ SM{"San Marino"} SN{"Senegal"} SO{"Somalija"} - SP{"Serbia"} SR{"Surinam"} ST{"Sveti Toma i Prinsipe"} SV{"El Salvador"} @@ -247,24 +278,15 @@ hr{ WS{"Samoa"} YE{"Jemen"} YT{"Majote"} - YU{"Jugoslavija"} - ZA{"Južna Afrika"} + ZA{"Južnoafrička Republika"} ZM{"Zambija"} ZW{"Zimbabve"} } Currencies{ - ALK{ - "ALK", - "Albanski lek (1946-1961)", - } ALL{ "lek", "Albanski lek", } - ALV{ - "ALV", - "Albanian Lek Valute", - } AMD{ "dram", "Armenian Dram", @@ -317,14 +339,14 @@ hr{ "Ber$", "Bermudski dolar", } - BMP{ - "BMP", - "Bermudska funta", - } BND{ "BND", "Brunejski dolar", } + BRL{ + "BRL", + "Brazilski Real", + } CAD{ "Can$", "Kanadski dolar", @@ -341,9 +363,9 @@ hr{ "Ch$", "Čileanski pezo", } - CNP{ - "CNP", - "Chinese Jen Min Piao Yuan", + CNY{ + "CNY", + "Kineski Yuan Renminbi", } COP{ "Col$", @@ -353,10 +375,6 @@ hr{ "C", "Kostarikanski kolon", } - CSC{ - "CSC", - "Češka kruna", - } CSK{ "CSK", "Czechoslovak Hard Koruna", @@ -369,10 +387,6 @@ hr{ "CVEsc", "Zelenortski eskudo", } - CWG{ - "CWG", - "Curacao Guilder", - } CYP{ "£C", "Ciparska funta", @@ -389,10 +403,6 @@ hr{ "DEM", "Njemačka marka", } - DES{ - "DES", - "German Sperrmark", - } DJF{ "DF", "Djibouti Franc", @@ -409,14 +419,6 @@ hr{ "DA", "Alžirski dinar", } - DZF{ - "DZF", - "Algerian New Franc", - } - DZG{ - "DZG", - "Algerian Franc Germinal", - } ECS{ "ECS", "Ecuador Sucre", @@ -445,10 +447,6 @@ hr{ "Br", "Etiopski bir", } - ETD{ - "ETD", - "Etiopski dolar", - } EUR{ "€", "Euro", @@ -457,34 +455,18 @@ hr{ "FIM", "Finska marka", } - FIN{ - "FIN", - "Finska marka (1860-1962)", - } FJD{ "F$", "Fidžijski dolar", } - FJP{ - "FJP", - "Fidžijska funta", - } FKP{ "FKP", "Falklandska funta", } - FOK{ - "FOK", - "Faeroe Islands Kronur", - } FRF{ "FRF", "Francuski franak", } - FRG{ - "FRG", - "French Franc Germinal/Franc Poincare", - } GBP{ "£", "Britanska funta", @@ -501,46 +483,22 @@ hr{ "GIP", "Gibraltarska funta", } - GLK{ - "GLK", - "Grenlandska kruna", - } GMD{ "GMD", "Gambia Dalasi", } - GMP{ - "GMP", - "Gambijska funta", - } GNF{ "GF", "Gvinejski franak", } - GNI{ - "GNI", - "Gvinejski franak (1960-1972)", - } GNS{ "GNS", "Guinea Syli", } - GPF{ - "GPF", - "Guadeloupe Franc", - } GQE{ "GQE", "Equatorial Guinea Ekwele Guineana", } - GQF{ - "GQF", - "Equatorial Guinea Franco", - } - GQP{ - "GQP", - "Equatorial Guinea Peseta Guineana", - } GRD{ "GRD", "Grčka drahma", @@ -549,18 +507,10 @@ hr{ "Q", "Kvecal", } - GUF{ - "GUF", - "French Guyana Franc Guiana", - } GWE{ "GWE", "Portuguese Guinea Escudo", } - GWM{ - "GWM", - "Portuguese Guinea Mil Reis", - } GWP{ "GWP", "Gvinejskobisauski pezo", @@ -582,7 +532,7 @@ hr{ "Hrvatski dinar", } HRK{ - "HRK", + "Kn", "Kuna", } HTG{ @@ -601,10 +551,6 @@ hr{ "IR£", "Irska funta", } - ILL{ - "ILL", - "Israelski šekel", - } ILP{ "ILP", "Israelska funta", @@ -637,10 +583,6 @@ hr{ "J$", "Jamaičanski dolar", } - JMP{ - "JMP", - "Jamaičanska funta", - } JOD{ "JD", "Jordanski dinar", @@ -657,18 +599,10 @@ hr{ "som", "Kyrgystan Som", } - KHO{ - "KHO", - "Cambodian Old Riel", - } KHR{ "CR", "Cambodian Riel", } - KID{ - "KID", - "Kiribati Dollar", - } KMF{ "CF", "Comoro Franc", @@ -681,10 +615,6 @@ hr{ "KYD", "Kajmanski dolar", } - KZR{ - "KZR", - "Kazakhstan Ruble", - } KZT{ "T", "Kazakhstan Tenge", @@ -693,18 +623,10 @@ hr{ "LAK", "Laotian Kip", } - LIF{ - "LIF", - "Lihtenštajnski franak", - } LKR{ "SL Re", "Sri Lanka Rupee", } - LNR{ - "LNR", - "Ceylon Rupee", - } LRD{ "LRD", "Liberijski dolar", @@ -737,10 +659,6 @@ hr{ "LD", "Libijski dinar", } - LYP{ - "LYP", - "Libijska funta", - } MAD{ "MAD", "Morokanski dirham", @@ -749,38 +667,14 @@ hr{ "MAF", "Morokanski franak", } - MCF{ - "MCF", - "Monaco Franc Nouveau", - } - MCG{ - "MCG", - "Monaco Franc Germinal", - } - MDC{ - "MDC", - "Moldovan Leu Cupon", - } MDL{ "MDL", "Moldovski lej", } - MDR{ - "MDR", - "Moldovan Ruble Cupon", - } - MHD{ - "MHD", - "Marshall Islands Dollar", - } MKD{ "MDen", "Makedonski denar", } - MKN{ - "MKN", - "Makedonski denar (1992-1993)", - } MLF{ "MLF", "Mali Franc", @@ -797,10 +691,6 @@ hr{ "MOP", "Macao Pataca", } - MQF{ - "MQF", - "Martinique Franc", - } MRO{ "UM", "Mauritanska ouguja", @@ -821,10 +711,6 @@ hr{ "MK", "Malawi Kwacha", } - MWP{ - "MWP", - "Malawi Pound", - } MXN{ "MEX$", "Meksički pezo", @@ -853,10 +739,6 @@ hr{ "NGN", "Nigerijska naira", } - NGP{ - "NGP", - "Nigerijska funta", - } NLG{ "NLG", "Nizozemski gulden", @@ -873,10 +755,6 @@ hr{ "$NZ", "Novozelandski dolar", } - NZP{ - "NZP", - "Novozelandska funta", - } OMR{ "RO", "Omanski rijal", @@ -885,14 +763,6 @@ hr{ "PAB", "Panamska balboa", } - PDK{ - "PDK", - "Transdniestria Ruble Kupon", - } - PDR{ - "PDR", - "Transdniestria Ruble", - } PEI{ "PEI", "Peruanski inti", @@ -921,14 +791,6 @@ hr{ "PLZ", "Poljska zlota (1950-1995)", } - PSP{ - "PSP", - "Palestinska funta", - } - PTC{ - "PTC", - "Portugalski konto", - } PTE{ "PTE", "Portugalski eskudo", @@ -941,10 +803,6 @@ hr{ "leu", "Rumunjski lej", } - RON{ - "RON", - "Rumunjski novi lej", - } RUB{ "RUB", "Ruska rublja", @@ -977,10 +835,6 @@ hr{ "S$", "Singapurski dolar", } - SIB{ - "SIB", - "Slovenia Tolar Bons", - } SIT{ "SIT", "Slovenski tolar", @@ -997,10 +851,6 @@ hr{ "Sf", "Surinamski gulden", } - SSP{ - "SSP", - "Škotska funta", - } SYP{ "LS", "Sirijska funta", @@ -1025,10 +875,6 @@ hr{ "TPE", "Timorski eskudo", } - TPP{ - "TPP", - "Timor Pataca", - } TRL{ "TL", "Turska lira", @@ -1041,10 +887,6 @@ hr{ "TT$", "Trinidadtobaški dolar", } - TTO{ - "TTO", - "Trinidadtobaški stari dolar", - } TWD{ "NT$", "Novotajvanski dolar", @@ -1105,10 +947,6 @@ hr{ "YDD", "jemenski dinar", } - YEI{ - "YEI", - "Yemeni Imadi Riyal", - } YER{ "YRl", "Jemenski rial", @@ -1117,14 +955,6 @@ hr{ "YUD", "Jugoslavenski čvrsti dinar", } - YUF{ - "YUF", - "Jugoslavenski federalni dinar", - } - YUG{ - "YUG", - "Jugoslavenski dinar 1994", - } YUM{ "YUM", "Jugoslavenski novi dinar", @@ -1133,22 +963,10 @@ hr{ "YUN", "Jugoslavenski konvertibilni dinar", } - YUO{ - "YUO", - "Jugoslavenski oktobarski dinar", - } - YUR{ - "YUR", - "Jugoslavenski reformirani dinar", - } ZAL{ "ZAL", "Južnoafrički rand (financijski)", } - ZAP{ - "ZAP", - "Južnoafrička funta", - } ZAR{ "R", "Južnoafrički rand", @@ -1157,10 +975,6 @@ hr{ "ZMK", "Zambijska kvača", } - ZMP{ - "ZMP", - "Zambijska funta", - } ZRN{ "ZRN", "Zairski novi zair", @@ -1174,7 +988,7 @@ hr{ "Zimbabveanski dolar", } } - ExemplarCharacters{"[a-p r-v z đ ć č ž š {lj} {nj} {dž}]"} + ExemplarCharacters{"[a-c č ć d đ {dž} e-l {lj} m n {nj} o p r s š t-v z ž]"} Keys{ calendar{"Kalendar"} collation{"Poredavanje"} @@ -1267,9 +1081,12 @@ hr{ "E", "‰", "∞", - "�", + "NaN", "+", } + Scripts{ + Latn{"Latinski"} + } Types{ calendar{ buddhist{"Budistički kalendar"} @@ -1288,13 +1105,9 @@ hr{ traditional{"Tradicionano poredavanje"} } } - Version{"1.2"} + Version{"1.67"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -1317,15 +1130,6 @@ hr{ "pet", "sub", } - narrow{ - "n", - "p", - "u", - "s", - "č", - "p", - "s", - } wide{ "nedjelja", "ponedjeljak", @@ -1336,6 +1140,27 @@ hr{ "subota", } } + stand-alone{ + narrow{ + "n", + "p", + "u", + "s", + "č", + "p", + "s", + } + } + } + eras{ + abbreviated{ + "pr.n.e.", + "AD", + } + wide{ + "Prije Krista", + "Poslije Krista", + } } monthNames{ format{ @@ -1427,7 +1252,62 @@ hr{ } } } + quarters{ + format{ + abbreviated{ + "1kv", + "2kv", + "3kv", + "4kv", + } + wide{ + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + } + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Africa:Kinshasa"{ + ec{"Kinšasa"} + } + "Africa:Lubumbashi"{ + ec{"Lubumbaši"} + } + "Antarctica:South_Pole"{ + ec{"Južni pol"} + } + "Asia:Anadyr"{ + ec{"Anadir"} + } + "Asia:Kamchatka"{ + ec{"Kamčatka"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasnojarsk"} + } + "Asia:Shanghai"{ + ec{"Šangaj"} + } + "Asia:Tashkent"{ + ec{"Taškent"} + } + "Europe:Kiev"{ + ec{"Kijev"} + } + "Europe:Moscow"{ + ec{"Moskva"} + } + "Europe:Uzhgorod"{ + ec{"Uzgorod"} + } + "Europe:Zaporozhye"{ + ec{"Zaporožje"} } + hourFormat{"+HHmm;-HHmm"} } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} } diff --git a/icuSources/data/locales/hr_HR.txt b/icuSources/data/locales/hr_HR.txt index b064f2a8..6d7bc587 100644 --- a/icuSources/data/locales/hr_HR.txt +++ b/icuSources/data/locales/hr_HR.txt @@ -1,11 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hr_HR.xml +// * Source File:/common/main/hr_HR.xml // * // *************************************************************************** hr_HR{ - Version{"1.2"} + Version{"1.40"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } } diff --git a/icuSources/data/locales/hu.txt b/icuSources/data/locales/hu.txt index d6f6fd4a..73e7859a 100644 --- a/icuSources/data/locales/hu.txt +++ b/icuSources/data/locales/hu.txt @@ -1,16 +1,42 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hu.xml +// * Source File:/common/main/hu.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/hu.xml + * ICU source: /xml/main/hu.xml */ hu{ + AuxExemplarCharacters{"[q w-y]"} Countries{ + 001{"Világ"} + 002{"Afrika"} + 005{"Dél-Amerika"} + 009{"Óceánia"} + 011{"Nyugat-Afrika"} + 013{"Közép-Amerika"} + 014{"Kelet-Afrika"} + 015{"Észak-Afrika"} + 017{"Közép-Afrika"} + 019{"Amerika"} + 021{"Észak-Amerika"} + 030{"Kelet-Ázsia"} + 035{"Délkelet-Ázsia"} + 039{"Dél-Európa"} + 053{"Ausztrália és Új-Zéland"} + 054{"Melanézia"} + 061{"Polinézia"} + 142{"Ázsia"} + 145{"Nyugat-Ázsia"} + 150{"Európa"} + 151{"Kelet-Európa"} + 154{"Észak-Európa"} + 155{"Nyugat-Európa"} + 830{"Csatorna-szigetek"} + 833{"Man-sziget"} AD{"Andorra"} AE{"Egyesült Arab Emirátus"} AF{"Afganisztán"} @@ -26,6 +52,7 @@ hu{ AT{"Ausztria"} AU{"Ausztrália"} AW{"Aruba"} + AX{"Aland-szigetek"} AZ{"Azerbajdzsán"} BA{"Bosznia-Hercegovina"} BB{"Barbados"} @@ -190,6 +217,7 @@ hu{ PW{"Palau"} PY{"Paraguay"} QA{"Katar"} + QO{"Külső-Óceánia"} RE{"Reunion (francia)"} RO{"Románia"} RU{"Orosz Köztársaság"} @@ -208,7 +236,6 @@ hu{ SM{"San Marino"} SN{"Szenegál"} SO{"Szomália"} - SP{"Serbia"} SR{"Suriname"} ST{"Saint Tome és Principe"} SV{"El Salvador"} @@ -247,16 +274,11 @@ hu{ WS{"Szamoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoszlávia"} ZA{"Dél-Afrika"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorrai dínár", - } ADP{ "ADP", "Andorrai peseta", @@ -273,26 +295,10 @@ hu{ "Af", "Afghani", } - AIF{ - "AIF", - "Affars and Issas Franc", - } - ALK{ - "ALK", - "Albán lek (1946-1961)", - } ALL{ "lek", "Albán lek", } - ALV{ - "ALV", - "Albán lek valuta", - } - ALX{ - "ALX", - "Albán dollár konvertibilis valuta", - } AMD{ "dram", "Dram", @@ -317,18 +323,10 @@ hu{ "AOR", "Angolai kwanza reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolai escudo", - } ARA{ "ARA", "Argentín austral", } - ARM{ - "ARM", - "Argentín peso moneda nacional", - } ARP{ "ARP", "Argentín peso (1983-1985)", @@ -345,10 +343,6 @@ hu{ "$A", "Ausztrál dollár", } - AUP{ - "AUP", - "Ausztrál font", - } AWG{ "AWG", "Arubai forint", @@ -365,10 +359,6 @@ hu{ "KM", "Bozsnia-hercegovinai konvertibilis márka", } - BAN{ - "BAN", - "Bosznia-hercegovinai új dínár", - } BBD{ "BDS$", "Barbadosi dollár", @@ -393,22 +383,10 @@ hu{ "lev", "Bolgár kemény leva", } - BGM{ - "BGM", - "Bolgár szocialista leva", - } BGN{ "BGN", "Bolgár új leva", } - BGO{ - "BGO", - "Bolgár leva (1879-1952)", - } - BGX{ - "BGX", - "Bolgár leva konvertibilis valuta", - } BHD{ "BD", "Bahreini dinár", @@ -421,10 +399,6 @@ hu{ "Ber$", "Bermudai dollár", } - BMP{ - "BMP", - "Bermudai font", - } BND{ "BND", "Brunei dollár", @@ -433,10 +407,6 @@ hu{ "Bs", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Bolíviai peso", @@ -469,34 +439,18 @@ hu{ "BRR", "Brazil cruzeiro", } - BRZ{ - "BRZ", - "Brazil cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahamai dollár", } - BSP{ - "BSP", - "Bahamai font", - } BTN{ "Nu", "Bhutáni ngultrum", } - BTR{ - "BTR", - "Bhutáni rúpia", - } BUK{ "BUK", "Burmai kyat", } - BUR{ - "BUR", - "Burmai rúpia", - } BWP{ "BWP", "Botswanai pula", @@ -505,10 +459,6 @@ hu{ "BYB", "Fehérorosz új rubel (1994-1999)", } - BYL{ - "BYL", - "Fehérorosz rubel (1992-1994)", - } BYR{ "Rbl", "Fehérorosz rubel", @@ -517,10 +467,6 @@ hu{ "BZ$", "Belizei dollár", } - BZH{ - "BZH", - "Brit-hondurasi dollár", - } CAD{ "Can$", "Kanadai dollár", @@ -529,34 +475,10 @@ hu{ "CDF", "Kongói frank", } - CDG{ - "CDG", - "Kongói köztársasági frank", - } - CDL{ - "CDL", - "Kongói zaire", - } - CFF{ - "CFF", - "Közép-afrikai CFA frank", - } CHF{ "SwF", "Svájci frank", } - CKD{ - "CKD", - "Cook-szigeteki dollár", - } - CLC{ - "CLC", - "Chilei condor", - } - CLE{ - "CLE", - "Chilei escudo", - } CLF{ "CLF", "Chilei unidades de fomento", @@ -565,30 +487,10 @@ hu{ "Ch$", "Chilei peso", } - CMF{ - "CMF", - "Cameruni CFA frank", - } - CNP{ - "CNP", - "Kínai jen min piao jüan", - } - CNX{ - "CNX", - "Kínai USA dollár konvertibilis valuta", - } CNY{ "Y", "Kínai jüan renminbi", } - COB{ - "COB", - "Kolumbiai papír peso", - } - COF{ - "COF", - "Kongói CFA frank", - } COP{ "Col$", "Kolumbiai peso", @@ -597,10 +499,6 @@ hu{ "C", "Costa Ricai colon", } - CSC{ - "CSC", - "Csehszlovák korona", - } CSK{ "CSK", "Csehszlovák kemény korona", @@ -609,18 +507,10 @@ hu{ "CUP", "Kubai peso", } - CUX{ - "CUX", - "Kubai konvertibilis valuta", - } CVE{ "CVEsc", "Cape Verdei escudo", } - CWG{ - "CWG", - "Curacaoi forint", - } CYP{ "£C", "Ciprusi font", @@ -637,10 +527,6 @@ hu{ "DEM", "Német márka", } - DES{ - "DES", - "German Sperrmark", - } DJF{ "DF", "Dzsibuti frank", @@ -657,14 +543,6 @@ hu{ "DA", "Algériai dínár", } - DZF{ - "DZF", - "Algériai új frank", - } - DZG{ - "DZG", - "Algériai kezdeti frank", - } ECS{ "ECS", "Ecuadori sucre", @@ -693,52 +571,28 @@ hu{ "Br", "Etiópiai birr", } - ETD{ - "ETD", - "Etiópiai dollár", - } EUR{ - "€", + "EUR", "Euro", } FIM{ "FIM", "Finn markka", } - FIN{ - "FIN", - "Finn markka (1860-1962)", - } FJD{ "F$", "Fidzsi dollár", } - FJP{ - "FJP", - "Fidzsi font", - } FKP{ "FKP", "Falkland-szigeteki font", } - FOK{ - "FOK", - "Feröer-szigeteki korona", - } FRF{ "FRF", "Francia frank", } - FRG{ - "FRG", - "Francia frank kezdeti/Frank poincare", - } - GAF{ - "GAF", - "Gaboni CFA frank", - } GBP{ - "£", + "GBP", "Brit font sterling", } GEK{ @@ -753,86 +607,38 @@ hu{ "GHC", "Ghánai cedi", } - GHO{ - "GHO", - "Ghánai régi cedi", - } - GHP{ - "GHP", - "Ghánai font", - } - GHR{ - "GHR", - "Ghánai újraértékelt cedi", - } GIP{ "GIP", "Gibraltári font", } - GLK{ - "GLK", - "Grönlandi korona", - } GMD{ "GMD", "Gambiai dalasi", } - GMP{ - "GMP", - "Gambiai font", - } GNF{ "GF", "Guineai frank", } - GNI{ - "GNI", - "Guineai frank (1960-1972)", - } GNS{ "GNS", "Guineai syli", } - GPF{ - "GPF", - "Guadeloupei frank", - } GQE{ "GQE", "Egyenlítői-guineai ekwele guineana", } - GQF{ - "GQF", - "Egyenlítői-guineai franco", - } - GQP{ - "GQP", - "Egyenlítői-guineai peseta guineana", - } GRD{ "GRD", "Görög drachma", } - GRN{ - "GRN", - "Görög új drachma", - } GTQ{ "Q", "Guatemalai quetzal", } - GUF{ - "GUF", - "Francia Guyanai frank guiana", - } GWE{ "GWE", "Portugál guinea escudo", } - GWM{ - "GWM", - "Portugál guinea mil reis", - } GWP{ "GWP", "Guinea-Bissaui peso", @@ -865,22 +671,6 @@ hu{ "Ft", "Magyar forint", } - IBP{ - "IBP", - "Északír font", - } - IDG{ - "IDG", - "Indonéz nica guilder", - } - IDJ{ - "IDJ", - "Indonéz jáva rúpia", - } - IDN{ - "IDN", - "Indonéz új rúpia", - } IDR{ "Rp", "Indonéz rúpia", @@ -889,10 +679,6 @@ hu{ "IR£", "Ír font", } - ILL{ - "ILL", - "Izraeli sékel", - } ILP{ "ILP", "Izraeli font", @@ -901,10 +687,6 @@ hu{ "ILS", "Izraeli új sékel", } - IMP{ - "IMP", - "Man-szigeti font sterling", - } IQD{ "ID", "Iraki dínár", @@ -918,27 +700,19 @@ hu{ "Izlandi korona", } ITL{ - "₤", + "ITL", "Olasz líra", } - JEP{ - "JEP", - "Jersey font sterling", - } JMD{ "J$", "Jamaikai dollár", } - JMP{ - "JMP", - "Jamaikai font", - } JOD{ "JD", "Jordániai dínár", } JPY{ - "¥", + "JPY", "Japán jen", } KES{ @@ -949,38 +723,18 @@ hu{ "som", "Kirgizisztáni szom", } - KHO{ - "KHO", - "Kambodzsai régi riel", - } KHR{ "CR", "Kambodzsai riel", } - KID{ - "KID", - "Kiribati dollár", - } KMF{ "CF", "Comorei frank", } - KPP{ - "KPP", - "Észak-koreai népi won", - } KPW{ "KPW", "Észak-koreai won", } - KRH{ - "KRH", - "Dél-koreai hwan", - } - KRO{ - "KRO", - "Dél-koreai régi won", - } KRW{ "KRW", "Dél-koreai won", @@ -993,10 +747,6 @@ hu{ "KYD", "Kajmán-szigeteki dollár", } - KZR{ - "KZR", - "Kazahsztáni rubel", - } KZT{ "T", "Kazahsztáni tenge", @@ -1009,18 +759,10 @@ hu{ "LL", "Libanoni font", } - LIF{ - "LIF", - "Liechtensteini frank", - } LKR{ "SL Re", "Sri Lankai rúpia", } - LNR{ - "LNR", - "Ceyloni rúpia", - } LRD{ "LRD", "Libériai dollár", @@ -1049,18 +791,10 @@ hu{ "LVR", "Lett rubel", } - LYB{ - "LYB", - "Líbiai brit katonai fennhatósági líra", - } LYD{ "LD", "Líbiai dínár", } - LYP{ - "LYP", - "Líbiai font", - } MAD{ "MAD", "Marokkói dirham", @@ -1069,26 +803,10 @@ hu{ "MAF", "Marokkói frank", } - MCF{ - "MCF", - "Monacoi frank új", - } - MCG{ - "MCG", - "Monacoi frank kezdeti", - } - MDC{ - "MDC", - "Moldován lei kupon", - } MDL{ "MDL", "Moldován lei", } - MDR{ - "MDR", - "Moldován rubel kupon", - } MGA{ "MGA", "Madagaszkári ariary", @@ -1097,18 +815,10 @@ hu{ "MGF", "Madagaszkári frank", } - MHD{ - "MHD", - "Marshall-szigeteki dollár", - } MKD{ "MDen", "Macedon dínár", } - MKN{ - "MKN", - "Macedon dínár (1992-1993)", - } MLF{ "MLF", "Mali frank", @@ -1117,10 +827,6 @@ hu{ "MMK", "Mianmari kyat", } - MMX{ - "MMX", - "Mianmari dollár konvertibilis valuta", - } MNT{ "Tug", "Mongóliai tugrik", @@ -1129,10 +835,6 @@ hu{ "MOP", "Macaoi pataca", } - MQF{ - "MQF", - "Martiniquei frank", - } MRO{ "UM", "Mauritániai ouguiya", @@ -1149,10 +851,6 @@ hu{ "MUR", "Mauritiusi rúpia", } - MVP{ - "MVP", - "Maldív-szigeteki rúpia", - } MVR{ "MVR", "Maldív-szigeteki rufiyaa", @@ -1161,10 +859,6 @@ hu{ "MK", "Malawi kwacha", } - MWP{ - "MWP", - "Malawi font", - } MXN{ "MEX$", "Mexikói peso", @@ -1193,30 +887,14 @@ hu{ "N$", "Namíbiai dollár", } - NCF{ - "NCF", - "Új-kaledóniai frank kezdeti", - } NGN{ "NGN", "Nigériai naira", } - NGP{ - "NGP", - "Nigériai font", - } - NHF{ - "NHF", - "Új-hebridáki CFP frank", - } NIC{ "NIC", "Nikaraguai cordoba", } - NIG{ - "NIG", - "Nikaraguai arany cordoba", - } NIO{ "NIO", "Nikaraguai cordoba oro", @@ -1237,34 +915,14 @@ hu{ "$NZ", "Új-zélandi dollár", } - NZP{ - "NZP", - "Új-zélandi font", - } OMR{ "RO", "Ománi rial", } - OMS{ - "OMS", - "Ománi rial saidi", - } PAB{ "PAB", "Panamai balboa", } - PDK{ - "PDK", - "Transzdnyeszteri rubel kupon", - } - PDN{ - "PDN", - "Transzdnyeszteri új rubel", - } - PDR{ - "PDR", - "Transzdnyeszteri rubel", - } PEI{ "PEI", "Perui inti", @@ -1293,22 +951,10 @@ hu{ "Zl", "Lengyel zloty", } - PLX{ - "PLX", - "Lengyel USA dollár konvertibilis valuta", - } PLZ{ "PLZ", "Lengyel zloty (1950-1995)", } - PSP{ - "PSP", - "Palesztin font", - } - PTC{ - "PTC", - "Portugál conto", - } PTE{ "PTE", "Portugál escudo", @@ -1321,18 +967,10 @@ hu{ "QR", "Katari rial", } - REF{ - "REF", - "Réunioni frank", - } ROL{ "leu", "Román lej", } - RON{ - "RON", - "Román új lej", - } RUB{ "RUB", "Orosz rubel", @@ -1349,10 +987,6 @@ hu{ "SRl", "Szaúdi riyal", } - SAS{ - "SAS", - "Szaúdi szuverén riyal", - } SBD{ "SI$", "Salamon-szigeteki dollár", @@ -1381,10 +1015,6 @@ hu{ "SHP", "Saint Helena font", } - SIB{ - "SIB", - "Szlovén tolar bons", - } SIT{ "SIT", "Szlovén tolar", @@ -1397,38 +1027,18 @@ hu{ "SLL", "Sierra Leonei leone", } - SML{ - "SML", - "San Marinoi líra", - } SOS{ "So. Sh.", "Szomáli shilling", } - SQS{ - "SQS", - "Szomálföldi shilling", - } SRG{ "Sf", "Suriname-i gulden", } - SSP{ - "SSP", - "Skót font", - } STD{ "Db", "Sao tome-i és principe-i dobra", } - STE{ - "STE", - "Sao tome-i és principe-i escudo", - } - SUN{ - "SUN", - "Szovjet új rubel", - } SUR{ "SUR", "Szovjet rubel", @@ -1445,14 +1055,6 @@ hu{ "E", "Szváziföldi lilangeni", } - TCC{ - "TCC", - "Turks és caicosi korona", - } - TDF{ - "TDF", - "Csádi CFA frank", - } THB{ "THB", "Thai baht", @@ -1473,38 +1075,18 @@ hu{ "TND", "Tunéziai dínár", } - TOS{ - "TOS", - "Tongai font sterling", - } TPE{ "TPE", "Timori escudo", } - TPP{ - "TPP", - "Timori pataca", - } TRL{ "TL", "Török líra", } - TRY{ - "TRY", - "Új török líra", - } TTD{ "TT$", "Trinidad és tobagoi dollár", } - TTO{ - "TTO", - "Trinidad és tobagoi régi dollár", - } - TVD{ - "TVD", - "Tuvalui dollár", - } TWD{ "NT$", "Tajvani új dollár", @@ -1541,10 +1123,6 @@ hu{ "USS", "USA dollár (aznapi)", } - UYF{ - "UYF", - "Uruguay-i peso fuerte", - } UYP{ "UYP", "Uruguay-i peso (1975-1993)", @@ -1553,78 +1131,30 @@ hu{ "Ur$", "Uruguay-i peso uruguayo", } - UZC{ - "UZC", - "Üzbegisztáni kupon som", - } UZS{ "UZS", "Üzbegisztáni szum", } - VAL{ - "VAL", - "Vatikáni líra", - } - VDD{ - "VDD", - "Észak-vietnámi piastre dong viet", - } - VDN{ - "VDN", - "Észak-vietnámi új dong", - } - VDP{ - "VDP", - "Észak-vietnámi viet minh piastre dong viet", - } VEB{ "Be", "Venezuelai bolívar", } - VGD{ - "VGD", - "Brit virgin-szigeteki dollár", - } VND{ "VND", "Vietnámi dong", } - VNN{ - "VNN", - "Vietnámi új dong", - } - VNR{ - "VNR", - "Vietnámi köztársasági dong", - } - VNS{ - "VNS", - "Vietnámi nemzeti dong", - } VUV{ "VT", "Vanuatui vatu", } - WSP{ - "WSP", - "Nyugat-szamoai font", - } WST{ "WST", "Nyugat-szamoai tala", } - XAD{ - "XAD", - "Asian Dinar Unit of Account", - } XAF{ "XAF", "CFA frank BEAC", } - XAM{ - "XAM", - "Asian Monetary Unit", - } XAU{ "XAU", "Arany", @@ -1649,18 +1179,10 @@ hu{ "EC$", "Kelet-karibi dollár", } - XCF{ - "XCF", - "CFA új frank", - } XDR{ "XDR", "Special Drawing Rights", } - XEF{ - "XEF", - "CFA frank BCEAEC", - } XEU{ "XEU", "European Currency Unit", @@ -1673,18 +1195,6 @@ hu{ "XFU", "Francia UIC-frank", } - XID{ - "XID", - "Iszlám dínár", - } - XMF{ - "XMF", - "French Metropolitan Nouveau Franc", - } - XNF{ - "XNF", - "French Antilles CFA Franc", - } XOF{ "XOF", "CFA frank BCEAO", @@ -1693,18 +1203,10 @@ hu{ "CFPF", "CFP frank", } - XTR{ - "XTR", - "COMECON Transferable Ruble", - } YDD{ "YDD", "Jemeni dínár", } - YEI{ - "YEI", - "Jemeni imadi riyal", - } YER{ "YRl", "Jemeni rial", @@ -1713,14 +1215,6 @@ hu{ "YUD", "Jugoszláv kemény dínár", } - YUF{ - "YUF", - "Jugoszláv szövetségi dínár", - } - YUG{ - "YUG", - "Jugoszláv 1994-es dínár", - } YUM{ "YUM", "Jugoszláv új dínár", @@ -1729,22 +1223,10 @@ hu{ "YUN", "Jugoszláv konvertibilis dínár", } - YUO{ - "YUO", - "Jugoszláv októberi dínár", - } - YUR{ - "YUR", - "Jugoszláv reform dínár", - } ZAL{ "ZAL", "Dél-afrikai rand (pénzügyi)", } - ZAP{ - "ZAP", - "Dél-afrikai font", - } ZAR{ "R", "Dél-afrikai rand", @@ -1753,10 +1235,6 @@ hu{ "ZMK", "Zambiai kwacha", } - ZMP{ - "ZMP", - "Zambiai font", - } ZRN{ "ZRN", "Zairei új zaire", @@ -1771,8 +1249,9 @@ hu{ } } ExemplarCharacters{ - "[a-z á é í ó ú ö ü ő ű {cs} {dz} {dzs} {gy} {ly} {ny} {sz} {ty} {zs} {ccs} {" - "ddz} {ddzs} {ggy} {lly} {nny} {ssz} {tty} {zzs}]" + "[a á b c {cs} {ccs} d {dz} {ddz} {dzs} {ddzs} e é f g {gy} {ggy} h i í j-l {" + "ly} {lly} m n {ny} {nny} o ó ö ő p r s {sz} {ssz} t {ty} {tty} u ú ü ű v z {" + "zs} {zzs}]" } Keys{ calendar{"Naptár"} @@ -1934,9 +1413,15 @@ hu{ "E", "‰", "∞", - "�", + "NaN", "+", } + NumberPatterns{ + "#,##0.###", + "¤ #,##0.00", + "#,##0%", + "#E0", + } Scripts{ Armn{"Örmény"} Beng{"Bengáli"} @@ -1989,7 +1474,7 @@ hu{ traditional{"Hagyományos"} } } - Version{"1.3"} + Version{"1.69"} calendar{ buddhist{ eras{ @@ -2003,10 +1488,6 @@ hu{ "DE", "DU", } - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "H:mm:ss z", "H:mm:ss z", @@ -2029,15 +1510,6 @@ hu{ "P", "Szo", } - narrow{ - "V", - "H", - "K", - "S", - "C", - "P", - "S", - } wide{ "vasárnap", "hétfő", @@ -2048,11 +1520,57 @@ hu{ "szombat", } } + stand-alone{ + narrow{ + "V", + "H", + "K", + "S", + "C", + "P", + "S", + } + } } eras{ abbreviated{ - "i.e.", - "i.u.", + "i. e.", + "i. sz.", + } + } + fields{ + day{ + dn{"nap"} + } + dayperiod{ + dn{"napszak"} + } + era{ + dn{"éra"} + } + hour{ + dn{"óra"} + } + minute{ + dn{"perc"} + } + month{ + dn{"hónap"} + } + second{ + dn{"másodperc"} + } + week{ + dn{"hét"} + } + weekday{ + dn{"hét napja"} + } + year{ + dn{"év"} + } + zone{ + dn{"zóna"} } } monthNames{ @@ -2071,6 +1589,22 @@ hu{ "nov.", "dec.", } + wide{ + "január", + "február", + "március", + "április", + "május", + "június", + "július", + "augusztus", + "szeptember", + "október", + "november", + "december", + } + } + stand-alone{ narrow{ "J", "F", @@ -2085,19 +1619,21 @@ hu{ "N", "D", } + } + } + quarters{ + format{ + abbreviated{ + "N1", + "N2", + "N3", + "N4", + } wide{ - "január", - "február", - "március", - "április", - "május", - "június", - "július", - "augusztus", - "szeptember", - "október", - "november", - "december", + "I. negyedév", + "II. negyedév", + "III. negyedév", + "IV. negyedév", } } } @@ -2110,7 +1646,6 @@ hu{ } monthNames{ format{ - abbreviated:alias{"hu/calendar/hebrew/monthNames/format/wide"} wide{ "Tisri", "Hesván", @@ -2137,7 +1672,6 @@ hu{ } monthNames{ format{ - abbreviated:alias{"hu/calendar/islamic/monthNames/format/wide"} wide{ "Moharrem", "Safar", @@ -2155,7 +1689,226 @@ hu{ } } } - islamic-civil:alias{"hu/calendar/islamic"} } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "America:Araguaina"{ + ec{"Araguaína"} + } + "America:Argentina:ComodRivadavia"{ + ec{"Comodoro Rivadavia"} + } + "America:Argentina:Rio_Gallegos"{ + ec{"Río Gallegos"} + } + "America:Argentina:Tucuman"{ + ec{"Tucumán"} + } + "America:Belem"{ + ec{"Belém"} + } + "America:Cancun"{ + ec{"Cancún"} + } + "America:Cordoba"{ + ec{"Córdoba"} + } + "America:Cuiaba"{ + ec{"Cuiabá"} + } + "America:Danmarkshavn"{ + ec{"Danmarks Havn"} + } + "America:Eirunepe"{ + ec{"Eirunepé"} + } + "America:Godthab"{ + ec{"Godthåb"} + } + "America:Maceio"{ + ec{"Maceió"} + } + "America:Mazatlan"{ + ec{"Mazatlán"} + } + "America:Merida"{ + ec{"Mérida"} + } + "America:Mexico_City"{ + ec{"Mexikóváros"} + } + "America:Montreal"{ + ec{"Montréal"} + } + "America:Porto_Velho"{ + ec{"Pôrto Velho"} + } + "America:Rio_Branco"{ + ec{"Río Branco"} + } + "America:Sao_Paulo"{ + ec{"São Paulo"} + } + "America:Scoresbysund"{ + ec{"Scoresby Sound"} + } + "America:St_Johns"{ + ec{"St. John's"} + } + "Antarctica:DumontDUrville"{ + ec{"Dumont d'Urville"} + } + "Antarctica:South_Pole"{ + ec{"Déli-sark"} + } + "Antarctica:Vostok"{ + ec{"Vosztok"} + } + "Asia:Almaty"{ + ec{"Alma-Ata"} + } + "Asia:Anadyr"{ + ec{"Anadir"} + } + "Asia:Aqtau"{ + ec{"Aktau"} + } + "Asia:Aqtobe"{ + ec{"Aktöbe"} + } + "Asia:Choibalsan"{ + ec{"Csojbalszan"} + } + "Asia:Chongqing"{ + ec{"Csungking"} + } + "Asia:Irkutsk"{ + ec{"Irkutszk"} + } + "Asia:Jakarta"{ + ec{"Dzsakarta"} + } + "Asia:Kamchatka"{ + ec{"Kamcsatka"} + } + "Asia:Kashgar"{ + ec{"Kasgár"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasznojarszk"} + } + "Asia:Magadan"{ + ec{"Magadán"} + } + "Asia:Makassar"{ + ec{"Makasar"} + } + "Asia:Novosibirsk"{ + ec{"Novoszibirszk"} + } + "Asia:Omsk"{ + ec{"Omszk"} + } + "Asia:Qyzylorda"{ + ec{"Kizilorda"} + } + "Asia:Sakhalin"{ + ec{"Szahalin"} + } + "Asia:Samarkand"{ + ec{"Szamarkand"} + } + "Asia:Shanghai"{ + ec{"Sanghaj"} + } + "Asia:Tashkent"{ + ec{"Taskent"} + } + "Asia:Urumqi"{ + ec{"Ürümqi"} + } + "Asia:Vladivostok"{ + ec{"Vlagyivosztok"} + } + "Asia:Yakutsk"{ + ec{"Jakutszk"} + } + "Asia:Yekaterinburg"{ + ec{"Jekatyerinburg"} + } + "Atlantic:Canary"{ + ec{"Kanári-szigetek"} + } + "Europe:Kaliningrad"{ + ec{"Kalinyingrád"} + } + "Europe:Kiev"{ + ec{"Kijev"} + } + "Europe:Lisbon"{ + ec{"Lisszabon"} + } + "Europe:Moscow"{ + ec{"Moszkva"} + } + "Europe:Paris"{ + ec{"Paris"} + ld{"közép-európai nyári idő"} + ls{"közép-európai idő"} + } + "Europe:Samara"{ + ec{"Szamara"} + } + "Europe:Simferopol"{ + ec{"Szimferopol"} + } + "Europe:Uzhgorod"{ + ec{"Ungvár"} + } + "Europe:Zaporozhye"{ + ec{"Zaporozsje"} + } + "Pacific:Chatham"{ + ec{"Chatham-szigetek"} + } + "Pacific:Easter"{ + ec{"Húsvét-szigetek"} + } + "Pacific:Galapagos"{ + ec{"Galapagos-szigetek"} + } + "Pacific:Gambier"{ + ec{"Gambier-szigetek"} + } + "Pacific:Kiritimati"{ + ec{"Kiritimati-sziget"} + } + "Pacific:Kosrae"{ + ec{"Kosrae-szigetek"} + } + "Pacific:Kwajalein"{ + ec{"Kwajalein-zátony"} + } + "Pacific:Majuro"{ + ec{"Majuro-zátony"} + } + "Pacific:Marquesas"{ + ec{"Marquesas-szigetek"} + } + "Pacific:Midway"{ + ec{"Midway-szigetek"} + } + "Pacific:Ponape"{ + ec{"Ponape-szigetek"} + } + "Pacific:Truk"{ + ec{"Truk-szigetek"} + } + "Pacific:Wake"{ + ec{"Wake-sziget"} + } + "Pacific:Yap"{ + ec{"Yap-szigetek"} + } + } } diff --git a/icuSources/data/locales/hu_HU.txt b/icuSources/data/locales/hu_HU.txt index f2fc3a32..6560de8c 100644 --- a/icuSources/data/locales/hu_HU.txt +++ b/icuSources/data/locales/hu_HU.txt @@ -1,17 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hu_HU.xml +// * Source File:/common/main/hu_HU.xml // * // *************************************************************************** hu_HU{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"„"} + } } diff --git a/icuSources/data/locales/hy.txt b/icuSources/data/locales/hy.txt index 3cbe4515..bbac4ad8 100644 --- a/icuSources/data/locales/hy.txt +++ b/icuSources/data/locales/hy.txt @@ -1,318 +1,313 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hy.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/hy.xml - */ -hy{ - Countries{ - AD{"Անդորա"} - AE{"Միացյալ Արաբական Էմիրաթներ"} - AF{"Աֆղանստան"} - AG{"Անտիգուա-Բարբուդա"} - AL{"Ալբանիա"} - AM{"Հայաստանի Հանրապետութիւն"} - AO{"Անգոլա"} - AR{"Արգենտինա"} - AT{"Ավստրիա"} - AU{"Ավստրալիա"} - AZ{"Ադրբեջան"} - BA{"Բոսնիա-Հերցեգովինա"} - BB{"Բարբադոս"} - BD{"Բանգլադեշ"} - BE{"Բելգիա"} - BF{"Բուրկինա Ֆասո"} - BG{"Բուլղարիա"} - BH{"Բահրեյն"} - BI{"Բուրունդի"} - BJ{"Բենին"} - BN{"Բրունեյ"} - BO{"Բոլիվիա"} - BR{"Բրազիլիա"} - BS{"Բահամներ"} - BT{"Բուտան"} - BW{"Բոտսվանա"} - BY{"Բելոռուս"} - BZ{"Բելիզ"} - CA{"Կանադա"} - CF{"Կենտրոնական Աֆրիկյան Հանրապետություն"} - CG{"Կոնգո"} - CH{"Շվեյցարիա"} - CI{"Փղոսկրի Ափ"} - CL{"Չիլի"} - CM{"Կամերուն"} - CN{"Չինաստան"} - CO{"Կոլումբիա"} - CR{"Կոստա-Ռիկա"} - CU{"Կուբա"} - CV{"Կաբո-Վերդե"} - CY{"Կիպրոս"} - CZ{"Չեխիայի Հանրապետություն"} - DE{"Գերմանիա"} - DJ{"Ջիբուտի"} - DK{"Դանիա"} - DM{"Դոմինիկա"} - DO{"Դոմինիկյան Հանրապետություն"} - DZ{"Ալժիր"} - EC{"Էկվադոր"} - EE{"Էստոնիա"} - EG{"Եգիպտոս"} - EH{"Արեվմտյան Սահարա"} - ER{"Էրիտրեա"} - ES{"Իսպանիա"} - ET{"Եթովպիա"} - FI{"Ֆինլանդիա"} - FJ{"Ֆիջի"} - FM{"Միկրոնեզիա"} - FR{"Ֆրանսիա"} - GA{"Գաբոն"} - GB{"Մեծ Բրիտանիա"} - GD{"Գրենադա"} - GE{"Վրաստան"} - GH{"Գանա"} - GM{"Գամբիա"} - GN{"Գվինեա"} - GQ{"Հասարակածային Գվինեա"} - GR{"Հունաստան"} - GT{"Գվատեմալա"} - GW{"Գվինեա-Բիսաու"} - GY{"Գայանա"} - HN{"Հոնդուրաս"} - HR{"Հորվաթիա"} - HT{"Հաիթի"} - HU{"Հունգարիա"} - ID{"Ինդոնեզիա"} - IE{"Իռլանդիա"} - IL{"Իսրայել"} - IN{"Հնդկաստան"} - IQ{"Իրաք"} - IR{"Իրան"} - IS{"Իսլանդիա"} - IT{"Իտալիա"} - JM{"Ջամայկա"} - JO{"Հորդանան"} - JP{"Ճապոնիա"} - KE{"Քենիա"} - KG{"Կիրգիզստան"} - KH{"Կամբոջա"} - KI{"Կիրիբատի"} - KM{"Կոմորոս"} - KN{"Սենտ Կիտս-Նեվիս"} - KP{"Հյուսիսային Կորեա"} - KR{"Հարավային Կորեա"} - KW{"Քուվեյթ"} - KZ{"Ղազախստան"} - LA{"Լաոս"} - LB{"Լիբանան"} - LC{"Սանտա Լուչիա"} - LI{"Լիխտենշտեյն"} - LK{"Շրի Լանկա"} - LR{"Լիբերիա"} - LS{"Լեսոտո"} - LT{"Լիտվա"} - LU{"Լյուքսեմբուրգ"} - LV{"Լատվիա"} - LY{"Լիբիա"} - MA{"Մարոկո"} - MC{"Մոնակո"} - MD{"Մոլդովա"} - MG{"Մադագասկար"} - MH{"Մարշալյան կղզիներ"} - MK{"Մակեդոնիա"} - ML{"Մալի"} - MM{"Մյանմա"} - MN{"Մոնղոլիա"} - MR{"Մավրիտանիա"} - MT{"Մալթա"} - MU{"Մավրիտոս"} - MV{"Մալդիվներ"} - MW{"Մալավի"} - MX{"Մեքսիկա"} - MY{"Մալայզիա"} - MZ{"Մոզամբիկ"} - NA{"Նամիբիա"} - NE{"Նիգեր"} - NG{"Նիգերիա"} - NI{"Նիկարագուա"} - NL{"Նիդերլանդեր"} - NO{"Նորվեգիա"} - NP{"Նեպալ"} - NR{"Նաուրու"} - NZ{"Նոր Զելանդիա"} - OM{"Օման"} - PA{"Պանամա"} - PE{"Պերու"} - PG{"Պապուա Նոր Գվինեա"} - PH{"Ֆիլիպիններ"} - PK{"Պակիստան"} - PL{"Լեհաստան"} - PT{"Պորտուգալիա"} - PW{"Պալաու"} - PY{"Պարագվայ"} - QA{"Կատար"} - RO{"Ռումինիա"} - RU{"Ռուսաստան"} - RW{"Ռուանդա"} - SA{"Սաուդիան Արաբիա"} - SB{"Սոլոմոնյան կղզիներ"} - SC{"Սեյշելներ"} - SD{"Սուդան"} - SE{"Շվեդիա"} - SG{"Սինգապուր"} - SI{"Սլովենիա"} - SK{"Սլովակիա"} - SL{"Սյերա-Լեոնե"} - SM{"Սան Մարինո"} - SN{"Սենեգալ"} - SO{"Սոմալի"} - SP{"Սերբիա"} - SR{"Սուրինամ"} - ST{"Սան-Թոմե-Փրինսիպի"} - SV{"Սալվադոր"} - SY{"Սիրիա"} - SZ{"Սվազիլենդ"} - TD{"Չադ"} - TG{"Տոգո"} - TH{"Թաիլանդ"} - TJ{"Տաճիկստան"} - TM{"Թուրքմենստան"} - TN{"Թունիս"} - TO{"Տոնգա"} - TR{"Թուրքիա"} - TT{"Տրինիդադ-Տոբագո"} - TV{"Տուվալու"} - TW{"Թայվան"} - TZ{"Տանզանիա"} - UA{"Ուկրաինա"} - UG{"Ուգանդա"} - US{"Ամէրիկայի Միացյալ Նահանգնէր"} - UY{"Ուրուգվայ"} - UZ{"Ուզբեկստան"} - VA{"Վատիկան"} - VC{"Սենտ Վիսենտ-Գրենադիններ"} - VE{"Վենեսուելա"} - VN{"Վիետնամ"} - VU{"Վանուատու"} - WS{"Սամոա"} - YE{"Եմեն"} - ZA{"Հարավային Աֆրիկա"} - ZM{"Զամբիա"} - ZW{"Զիմբաբվե"} - } - ExemplarCharacters{"[:Armn:]"} - Languages{ - hy{"Հայերէն"} - } - LocaleScript{ - "Armn", - } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - NumberPatterns{ - "#0.###;-#0.###", - "#0.00 ¤;-#0.00 ¤", - "#0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "Առ․", - "Եր․", - } - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH:mm:ss z", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - "EEEE, MMMM d, yyyy", - "MMMM dd, yyyy", - "MMM d, yyyy", - "MM/dd/yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "Կիր", - "Երկ", - "Երք", - "Չոր", - "Հնգ", - "Ուր", - "Շաբ", - } - wide{ - "Կիրակի", - "Երկուշաբթի", - "Երեքշաբթի", - "Չորեքշաբթի", - "Հինգշաբթի", - "Ուրբաթ", - "Շաբաթ", - } - } - } - eras{ - abbreviated{ - "Յ․Տ․", - "Ն․Ք․", - } - } - monthNames{ - format{ - abbreviated{ - "Յնր", - "Փտր", - "Մրտ", - "Ապր", - "Մյս", - "Յնս", - "Յլս", - "Օգս", - "Սեպ", - "Հոկ", - "Նոյ", - "Դեկ", - } - wide{ - "Յունուար", - "Փետրուար", - "Մարտ", - "Ապրիլ", - "Մայիս", - "Յունիս", - "Յուլիս", - "Օգոստոս", - "Սեպտեմբեր", - "Հոկտեմբեր", - "Նոյեմբեր", - "Դեկտեմբեր", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/hy.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/hy.xml + */ +hy{ + Countries{ + AD{"Անդորա"} + AE{"Միացյալ Արաբական Էմիրաթներ"} + AF{"Աֆղանստան"} + AG{"Անտիգուա-Բարբուդա"} + AL{"Ալբանիա"} + AM{"Հայաստանի Հանրապետութիւն"} + AO{"Անգոլա"} + AR{"Արգենտինա"} + AT{"Ավստրիա"} + AU{"Ավստրալիա"} + AZ{"Ադրբեջան"} + BA{"Բոսնիա-Հերցեգովինա"} + BB{"Բարբադոս"} + BD{"Բանգլադեշ"} + BE{"Բելգիա"} + BF{"Բուրկինա Ֆասո"} + BG{"Բուլղարիա"} + BH{"Բահրեյն"} + BI{"Բուրունդի"} + BJ{"Բենին"} + BN{"Բրունեյ"} + BO{"Բոլիվիա"} + BR{"Բրազիլիա"} + BS{"Բահամներ"} + BT{"Բուտան"} + BW{"Բոտսվանա"} + BY{"Բելոռուս"} + BZ{"Բելիզ"} + CA{"Կանադա"} + CF{"Կենտրոնական Աֆրիկյան Հանրապետություն"} + CG{"Կոնգո"} + CH{"Շվեյցարիա"} + CI{"Փղոսկրի Ափ"} + CL{"Չիլի"} + CM{"Կամերուն"} + CN{"Չինաստան"} + CO{"Կոլումբիա"} + CR{"Կոստա-Ռիկա"} + CU{"Կուբա"} + CV{"Կաբո-Վերդե"} + CY{"Կիպրոս"} + CZ{"Չեխիայի Հանրապետություն"} + DE{"Գերմանիա"} + DJ{"Ջիբուտի"} + DK{"Դանիա"} + DM{"Դոմինիկա"} + DO{"Դոմինիկյան Հանրապետություն"} + DZ{"Ալժիր"} + EC{"Էկվադոր"} + EE{"Էստոնիա"} + EG{"Եգիպտոս"} + EH{"Արեվմտյան Սահարա"} + ER{"Էրիտրեա"} + ES{"Իսպանիա"} + ET{"Եթովպիա"} + FI{"Ֆինլանդիա"} + FJ{"Ֆիջի"} + FM{"Միկրոնեզիա"} + FR{"Ֆրանսիա"} + GA{"Գաբոն"} + GB{"Մեծ Բրիտանիա"} + GD{"Գրենադա"} + GE{"Վրաստան"} + GH{"Գանա"} + GM{"Գամբիա"} + GN{"Գվինեա"} + GQ{"Հասարակածային Գվինեա"} + GR{"Հունաստան"} + GT{"Գվատեմալա"} + GW{"Գվինեա-Բիսաու"} + GY{"Գայանա"} + HN{"Հոնդուրաս"} + HR{"Հորվաթիա"} + HT{"Հաիթի"} + HU{"Հունգարիա"} + ID{"Ինդոնեզիա"} + IE{"Իռլանդիա"} + IL{"Իսրայել"} + IN{"Հնդկաստան"} + IQ{"Իրաք"} + IR{"Իրան"} + IS{"Իսլանդիա"} + IT{"Իտալիա"} + JM{"Ջամայկա"} + JO{"Հորդանան"} + JP{"Ճապոնիա"} + KE{"Քենիա"} + KG{"Կիրգիզստան"} + KH{"Կամբոջա"} + KI{"Կիրիբատի"} + KM{"Կոմորոս"} + KN{"Սենտ Կիտս-Նեվիս"} + KP{"Հյուսիսային Կորեա"} + KR{"Հարավային Կորեա"} + KW{"Քուվեյթ"} + KZ{"Ղազախստան"} + LA{"Լաոս"} + LB{"Լիբանան"} + LC{"Սանտա Լուչիա"} + LI{"Լիխտենշտեյն"} + LK{"Շրի Լանկա"} + LR{"Լիբերիա"} + LS{"Լեսոտո"} + LT{"Լիտվա"} + LU{"Լյուքսեմբուրգ"} + LV{"Լատվիա"} + LY{"Լիբիա"} + MA{"Մարոկո"} + MC{"Մոնակո"} + MD{"Մոլդովա"} + MG{"Մադագասկար"} + MH{"Մարշալյան կղզիներ"} + MK{"Մակեդոնիա"} + ML{"Մալի"} + MM{"Մյանմա"} + MN{"Մոնղոլիա"} + MR{"Մավրիտանիա"} + MT{"Մալթա"} + MU{"Մավրիտոս"} + MV{"Մալդիվներ"} + MW{"Մալավի"} + MX{"Մեքսիկա"} + MY{"Մալայզիա"} + MZ{"Մոզամբիկ"} + NA{"Նամիբիա"} + NE{"Նիգեր"} + NG{"Նիգերիա"} + NI{"Նիկարագուա"} + NL{"Նիդերլանդեր"} + NO{"Նորվեգիա"} + NP{"Նեպալ"} + NR{"Նաուրու"} + NZ{"Նոր Զելանդիա"} + OM{"Օման"} + PA{"Պանամա"} + PE{"Պերու"} + PG{"Պապուա Նոր Գվինեա"} + PH{"Ֆիլիպիններ"} + PK{"Պակիստան"} + PL{"Լեհաստան"} + PT{"Պորտուգալիա"} + PW{"Պալաու"} + PY{"Պարագվայ"} + QA{"Կատար"} + RO{"Ռումինիա"} + RU{"Ռուսաստան"} + RW{"Ռուանդա"} + SA{"Սաուդիան Արաբիա"} + SB{"Սոլոմոնյան կղզիներ"} + SC{"Սեյշելներ"} + SD{"Սուդան"} + SE{"Շվեդիա"} + SG{"Սինգապուր"} + SI{"Սլովենիա"} + SK{"Սլովակիա"} + SL{"Սյերա-Լեոնե"} + SM{"Սան Մարինո"} + SN{"Սենեգալ"} + SO{"Սոմալի"} + SR{"Սուրինամ"} + ST{"Սան-Թոմե-Փրինսիպի"} + SV{"Սալվադոր"} + SY{"Սիրիա"} + SZ{"Սվազիլենդ"} + TD{"Չադ"} + TG{"Տոգո"} + TH{"Թաիլանդ"} + TJ{"Տաճիկստան"} + TM{"Թուրքմենստան"} + TN{"Թունիս"} + TO{"Տոնգա"} + TR{"Թուրքիա"} + TT{"Տրինիդադ-Տոբագո"} + TV{"Տուվալու"} + TW{"Թայվան"} + TZ{"Տանզանիա"} + UA{"Ուկրաինա"} + UG{"Ուգանդա"} + US{"Ամէրիկայի Միացյալ Նահանգնէր"} + UY{"Ուրուգվայ"} + UZ{"Ուզբեկստան"} + VA{"Վատիկան"} + VC{"Սենտ Վիսենտ-Գրենադիններ"} + VE{"Վենեսուելա"} + VN{"Վիետնամ"} + VU{"Վանուատու"} + WS{"Սամոա"} + YE{"Եմեն"} + ZA{"Հարավային Աֆրիկա"} + ZM{"Զամբիա"} + ZW{"Զիմբաբվե"} + } + ExemplarCharacters{"[֊ ՝ ՜ ՞ ՚ ՛ ՟ ա-ե և զ-ֆ]"} + Languages{ + hy{"Հայերէն"} + } + LocaleScript{ + "Armn", + } + NumberElements{ + ",", + ".", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + NumberPatterns{ + "#0.###", + "#0.00 ¤", + "#0%", + "#E0", + } + Version{"1.49"} + calendar{ + gregorian{ + AmPmMarkers{ + "Առ․", + "Եր․", + } + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, MMMM d, yyyy", + "MMMM dd, yyyy", + "MMM d, yyyy", + "MM/dd/yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Կիր", + "Երկ", + "Երք", + "Չոր", + "Հնգ", + "Ուր", + "Շաբ", + } + wide{ + "Կիրակի", + "Երկուշաբթի", + "Երեքշաբթի", + "Չորեքշաբթի", + "Հինգշաբթի", + "Ուրբաթ", + "Շաբաթ", + } + } + } + eras{ + abbreviated{ + "Յ․Տ․", + "Ն․Ք․", + } + } + monthNames{ + format{ + abbreviated{ + "Յնր", + "Փտր", + "Մրտ", + "Ապր", + "Մյս", + "Յնս", + "Յլս", + "Օգս", + "Սեպ", + "Հոկ", + "Նոյ", + "Դեկ", + } + wide{ + "Յունուար", + "Փետրուար", + "Մարտ", + "Ապրիլ", + "Մայիս", + "Յունիս", + "Յուլիս", + "Օգոստոս", + "Սեպտեմբեր", + "Հոկտեմբեր", + "Նոյեմբեր", + "Դեկտեմբեր", + } + } + } + } + } +} diff --git a/icuSources/data/locales/hy_AM.txt b/icuSources/data/locales/hy_AM.txt index 314c8d25..fb028c40 100644 --- a/icuSources/data/locales/hy_AM.txt +++ b/icuSources/data/locales/hy_AM.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hy_AM.xml +// * Source File:/common/main/hy_AM.xml // * // *************************************************************************** hy_AM{ - Version{"1.2"} + Version{"1.37"} calendar{ gregorian{ eras{ diff --git a/icuSources/data/locales/hy_AM_REVISED.txt b/icuSources/data/locales/hy_AM_REVISED.txt index 3a5c3c43..22291e62 100644 --- a/icuSources/data/locales/hy_AM_REVISED.txt +++ b/icuSources/data/locales/hy_AM_REVISED.txt @@ -1,57 +1,57 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/hy_AM_REVISED.xml -// * -// *************************************************************************** -hy_AM_REVISED{ - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "Առ․", - "Կե․", - } - eras{ - abbreviated{ - "Մ․Թ․Ա․", - "Մ․Թ․", - } - } - monthNames{ - format{ - abbreviated{ - "Հնվ", - "Փտվ", - "Մրտ", - "Ապր", - "Մյս", - "Հնս", - "Հլս", - "Օգս", - "Սեպ", - "Հոկ", - "Նոյ", - "Դեկ", - } - wide{ - "Հունվար", - "Փետրվար", - "Մարտ", - "Ապրիլ", - "Մայիս", - "Հունիս", - "Հուլիս", - "Օգոստոս", - "Սեպտեմբեր", - "Հոկտեմբեր", - "Նոյեմբեր", - "Դեկտեմբեր", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/hy_AM_REVISED.xml +// * +// *************************************************************************** +hy_AM_REVISED{ + Version{"1.38"} + calendar{ + gregorian{ + AmPmMarkers{ + "Առ․", + "Կե․", + } + eras{ + abbreviated{ + "Մ․Թ․Ա․", + "Մ․Թ․", + } + } + monthNames{ + format{ + abbreviated{ + "Հունվար", + "Փտվ", + "Մրտ", + "Ապրիլ", + "Մայիս", + "Հունիս", + "Հլս", + "Օգս", + "Սեպտեմբեր", + "Հոկտեմբեր", + "Նոյեմբեր", + "Դեկտեմբեր", + } + wide{ + "Հունվար", + "Փետրվար", + "Մարտ", + "Ապրիլ", + "Մայիս", + "Հունիս", + "Հուլիս", + "Օգոստոս", + "Սեպտեմբեր", + "Հոկտեմբեր", + "Նոյեմբեր", + "Դեկտեմբեր", + } + } + } + } + } +} diff --git a/icuSources/data/locales/id.txt b/icuSources/data/locales/id.txt index 1e61f058..dbf2cff1 100644 --- a/icuSources/data/locales/id.txt +++ b/icuSources/data/locales/id.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/id.xml +// * Source File:/common/main/id.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/id.xml + * ICU source: /xml/main/id.xml */ id{ Countries{ @@ -207,7 +207,6 @@ id{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Suriname"} ST{"Sao Tome dan Principe"} SV{"El Salvador"} @@ -242,7 +241,6 @@ id{ WS{"Samoa"} YE{"Yaman"} YT{"Mayotte"} - YU{"Yugoslavia"} ZA{"Afrika Selatan"} ZM{"Zambia"} ZW{"Zimbabwe"} @@ -253,7 +251,7 @@ id{ "IDR", } } - ExemplarCharacters{"[a-z]"} + ExemplarCharacters{"[a-n {ng} {ny} o p r-w y]"} Languages{ aa{"Afar"} ab{"Abkhaz"} @@ -497,22 +495,18 @@ id{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.52"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } dayNames{ format{ abbreviated{ @@ -567,6 +561,22 @@ id{ } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "kuartal pertama", + "kuartal kedua", + "kuartal ketiga", + "kuartal keempat", + } + } + } } } } diff --git a/icuSources/data/locales/id_ID.txt b/icuSources/data/locales/id_ID.txt index 68a270f8..a292e952 100644 --- a/icuSources/data/locales/id_ID.txt +++ b/icuSources/data/locales/id_ID.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/id_ID.xml +// * Source File:/common/main/id_ID.xml // * // *************************************************************************** id_ID{ - Version{"1.2"} + Version{"1.36"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/in.txt b/icuSources/data/locales/in.txt index 8a0d1d50..bd68a633 100644 --- a/icuSources/data/locales/in.txt +++ b/icuSources/data/locales/in.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** in{ diff --git a/icuSources/data/locales/in_ID.txt b/icuSources/data/locales/in_ID.txt index bfa30ab1..982d684d 100644 --- a/icuSources/data/locales/in_ID.txt +++ b/icuSources/data/locales/in_ID.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** in_ID{ diff --git a/icuSources/data/locales/is.txt b/icuSources/data/locales/is.txt index c5a58bfe..0273009f 100644 --- a/icuSources/data/locales/is.txt +++ b/icuSources/data/locales/is.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/is.xml +// * Source File:/common/main/is.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/is.xml + * ICU source: /xml/main/is.xml */ is{ + AuxExemplarCharacters{"[c q w z]"} Countries{ AD{"Andorra"} AE{"Sameinuðu arabísku furstadæmin"} @@ -206,7 +207,6 @@ is{ SM{"San Marínó"} SN{"Senegal"} SO{"Sómalía"} - SP{"Serbía"} SR{"Súrínam"} ST{"Saó Tóme og Prinsípe"} SV{"El Salvador"} @@ -245,15 +245,10 @@ is{ WS{"Samóa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Júgóslavía"} ZA{"Suður-Afríka"} ZM{"Sambía"} } Currencies{ - ADD{ - "ADD", - "Andorrskur denari", - } ADP{ "ADP", "Andorrskur peseti", @@ -262,22 +257,10 @@ is{ "AED", "Arabískt dírham", } - ALK{ - "ALK", - "Lek (1946-1961)", - } ALL{ "lek", "Lek", } - ALV{ - "ALV", - "Lek Valute (1992-1993)", - } - ALX{ - "ALX", - "Albanskt gjaldeyrisskírteini í Bandaríkjadölum", - } AMD{ "dram", "Dramm", @@ -286,18 +269,10 @@ is{ "NA f.", "Hollenskt Antillugyllini", } - AOS{ - "AOS", - "Angólskur skúti", - } ARA{ "ARA", "Argentine Austral", } - ARM{ - "ARM", - "Argentískur pesi (1899-1970)", - } ARP{ "ARP", "Argentískur pesi (1983-1985)", @@ -314,10 +289,6 @@ is{ "$A", "Ástralskur dalur", } - AUP{ - "AUP", - "Ástralskt pund", - } BBD{ "BDS$", "Barbadoskur dalur", @@ -330,30 +301,14 @@ is{ "lev", "Lef", } - BGM{ - "BGM", - "Lef (1952-1962)", - } BGN{ "BGN", "Lef, nýtt", } - BGO{ - "BGO", - "Lef (1879-1952)", - } - BGX{ - "BGX", - "Búlgarskt gjaldeyrisskírteini í lef", - } BMD{ "Ber$", "Bermúdeyskur dalur", } - BMP{ - "BMP", - "Bermúdeyskt pund", - } BND{ "BND", "Brúneiskur dalur", @@ -374,10 +329,6 @@ is{ "BSD", "Bahameyskur dalur", } - BSP{ - "BSP", - "Bahameyskt pund", - } BUK{ "BUK", "Búrmverskt kjat", @@ -386,30 +337,14 @@ is{ "BZ$", "Belískur dalur", } - BZH{ - "BZH", - "Hondúrskur dalur", - } CAD{ "Can$", "Kanadískur dalur", } - CFF{ - "CFF", - "Miðafrískur franki", - } CHF{ "SwF", "Svissneskur franki", } - CKD{ - "CKD", - "Cookseyskur dalur", - } - CLE{ - "CLE", - "Chileskur skúti", - } CLF{ "CLF", "Chilean Unidades de Fomento", @@ -418,34 +353,14 @@ is{ "Ch$", "Chileskur pesi", } - CMF{ - "CMF", - "Miðafrískur franki, Kamerún", - } - CNX{ - "CNX", - "Kínverskt gjaldeyrisskírteini í Bandaríkjadölum", - } CNY{ "Y", "Júan", } - COB{ - "COB", - "Kólumbískur pappírspesi", - } - COF{ - "COF", - "Miðafrískur franki, Kongó", - } COP{ "Col$", "Kólumbískur pesi", } - CSC{ - "CSC", - "Tékknesk króna (1945-1953)", - } CSK{ "CSK", "Tékknesk króna, eldri", @@ -454,10 +369,6 @@ is{ "CUP", "Kúbverskur pesi", } - CUX{ - "CUX", - "Kúbverskt gjaldeyrisskírteini", - } CVE{ "CVEsc", "Grænhöfðeyskur skúti", @@ -478,10 +389,6 @@ is{ "DEM", "Þýskt mark", } - DES{ - "DES", - "German Sperrmark", - } DJF{ "DF", "Djibouti Franc", @@ -510,10 +417,6 @@ is{ "ESP", "Spænskur peseti", } - ETD{ - "ETD", - "Eþíópískur dalur", - } EUR{ "€", "Euro", @@ -526,62 +429,30 @@ is{ "F$", "Fídjeyskur dalur", } - FJP{ - "FJP", - "Fídjeyskt pund", - } FKP{ "FKP", "Falklenskt pund", } - FOK{ - "FOK", - "Færeysk króna", - } FRF{ "FRF", "Franskur franki", } - GAF{ - "GAF", - "Miðafrískur franki, Gabon", - } GBP{ "£", "Sterlingspund", } - GHP{ - "GHP", - "Ganverskt pund", - } GIP{ "GIP", "Gíbraltarspund", } - GLK{ - "GLK", - "Grænlensk króna", - } - GMP{ - "GMP", - "Gambískt pund", - } GNF{ "GF", "Gíneufranki", } - GNI{ - "GNI", - "Gíneufranki (1960-1972)", - } GRD{ "GRD", "Drakma", } - GRN{ - "GRN", - "Drakma, Ný", - } GTQ{ "Q", "Guatemala Quetzal", @@ -590,10 +461,6 @@ is{ "GWE", "Portúgalskur, gíneskur skúti", } - GWM{ - "GWM", - "Portuguese Guinea Mil Reis", - } GYD{ "G$", "Gvæjanskur dalur", @@ -614,10 +481,6 @@ is{ "Ft", "Fórinta", } - IBP{ - "IBP", - "Norðurírskt pund", - } IDR{ "Rp", "Indónesísk rúpía", @@ -626,10 +489,6 @@ is{ "IR£", "Írskt pund", } - ILL{ - "ILL", - "Israeli Sheqel", - } ILP{ "ILP", "Ísraelskt pund", @@ -658,46 +517,22 @@ is{ "₤", "Ítölsk líra", } - JEP{ - "JEP", - "Jerseyskt pund", - } JMD{ "J$", "Jamaískur dalur", } - JMP{ - "JMP", - "Jamaískt pund", - } JPY{ "¥", "Jen", } - KID{ - "KID", - "Kíribatískur dalur", - } KMF{ "CF", "Kómoreyskur franki", } - KPP{ - "KPP", - "Norðurkóreskt vonn (1947-1959)", - } KPW{ "KPW", "Norðurkóreskt vonn", } - KRH{ - "KRH", - "South Korean Hwan", - } - KRO{ - "KRO", - "Suðurkóreskt vonn (1947-1953)", - } KRW{ "KRW", "Suðurkóreskt vonn", @@ -710,10 +545,6 @@ is{ "KYD", "Caymaneyskur dalur", } - KZR{ - "KZR", - "Kazakhstan Ruble", - } KZT{ "T", "Kazakhstan Tenge", @@ -726,10 +557,6 @@ is{ "SL Re", "Srílönsk rúpía", } - LNR{ - "LNR", - "Ceylon Rupee", - } LRD{ "LRD", "Líberískur dalur", @@ -762,10 +589,6 @@ is{ "LD", "Líbískur denari", } - LYP{ - "LYP", - "Líbískt pund", - } MAD{ "MAD", "Marokkóskt dírham", @@ -782,18 +605,10 @@ is{ "MGF", "Madagaskur franki", } - MHD{ - "MHD", - "Marshalleyskur dalur", - } MKD{ "MDen", "Makedónskur denari", } - MKN{ - "MKN", - "Makedónskur denari (1992-1993)", - } MLF{ "MLF", "Malískur franki", @@ -802,10 +617,6 @@ is{ "MMK", "Mjanmarskt kjat", } - MMX{ - "MMX", - "Mjanmarskt gjaldeyrisskírteini í Bandaríkjadölum", - } MNT{ "Tug", "Túríkur", @@ -826,10 +637,6 @@ is{ "MTP", "Maltneskt pund", } - MWP{ - "MWP", - "Malavískt pund", - } MXN{ "MEX$", "Mexíkóskur pesi", @@ -858,10 +665,6 @@ is{ "NGN", "Nigerian Naira", } - NGP{ - "NGP", - "Nígerískt pund", - } NLG{ "NLG", "Hollenskt gyllini", @@ -874,10 +677,6 @@ is{ "$NZ", "Nýsjálenskur dalur", } - NZP{ - "NZP", - "Nýsjálenskt pund", - } OMR{ "RO", "Ómanskt ríal", @@ -890,18 +689,10 @@ is{ "Pra", "Pakistönsk rúpía", } - PLX{ - "PLX", - "Pólskt gjaldeyrisskírteini í Bandaríkjadölum", - } PLZ{ "PLZ", "Slot", } - PSP{ - "PSP", - "Palestínskt pund", - } PTE{ "PTE", "Portúgalskur skúti", @@ -912,7 +703,7 @@ is{ } RUR{ "RUR", - "Rússnesk rúbla", + "Rússnesk rúbla (1991-1998)", } RWF{ "RWF", @@ -962,18 +753,10 @@ is{ "Sf", "Suriname Guilder", } - SSP{ - "SSP", - "Skoskt pund", - } STD{ "Db", "Sao Tome and Principe Dobra", } - STE{ - "STE", - "Saó Tóme og Prinsípe skúti", - } SUR{ "SUR", "Soviet Rouble", @@ -986,14 +769,6 @@ is{ "LS", "Sýrlenskt pund", } - TCC{ - "TCC", - "Turk- og Caicoseysk króna", - } - TDF{ - "TDF", - "Miðafrískur franki, Tsjad", - } THB{ "THB", "Bat", @@ -1010,38 +785,18 @@ is{ "TMM", "Túrkmenskt manat", } - TOS{ - "TOS", - "Tongverskt sterlingspund", - } TPE{ "TPE", "Tímorskur skúti", } - TPP{ - "TPP", - "Timor Pataca", - } TRL{ "TL", "Tyrknesk líra", } - TRY{ - "TRY", - "Ný, tyrknesk líra", - } TTD{ "TT$", "Trínidad og Tóbagó-dalur", } - TTO{ - "TTO", - "Trínidad og Tóbagó-dalur, eldri", - } - TVD{ - "TVD", - "Túvalúskur dalur", - } TWD{ "NT$", "Taívanskur dalur", @@ -1074,18 +829,10 @@ is{ "Be", "Venezuelan Bolivar", } - VGD{ - "VGD", - "Jómfrúaeyjadalur", - } VUV{ "VT", "Vanuatu Vatu", } - WSP{ - "WSP", - "Samóskt pund", - } XAF{ "XAF", "Miðafrískur franki, BEAC", @@ -1094,18 +841,10 @@ is{ "EC$", "Austur-Karíbahafsdalur", } - XCF{ - "XCF", - "Miðafrískur franki, nýr", - } XDR{ "XDR", "Sérstök dráttarréttindi", } - XEF{ - "XEF", - "Miðafrískur franki, BCEAEC", - } XFO{ "XFO", "Franskur gullfranki", @@ -1114,18 +853,6 @@ is{ "XFU", "Franskur franki, UIC", } - XID{ - "XID", - "Íslamskur denari", - } - XMF{ - "XMF", - "Kómoreyskur franki, CFA", - } - XNF{ - "XNF", - "Miðafrískur franki, Antillur", - } XOF{ "XOF", "Miðafrískur franki, BCEAO", @@ -1138,10 +865,6 @@ is{ "YDD", "Jemenskur denari", } - YEI{ - "YEI", - "Jemenskt ríal (1904-1964)", - } YER{ "YRl", "Jemenskt ríal", @@ -1154,24 +877,16 @@ is{ "ZAL", "Rand (viðskipta)", } - ZAP{ - "ZAP", - "Suðurafrískt pund", - } ZMK{ "ZMK", "Zambian Kwacha", } - ZMP{ - "ZMP", - "Sambískt pund", - } ZWD{ "Z$", "Simbabveskur dalur", } } - ExemplarCharacters{"[a-záéíóúýöæðþ]"} + ExemplarCharacters{"[a á b d ð e é f-i í j-o ó p r-u ú v y ý þ æ ö]"} Keys{ calendar{"Dagatal"} collation{"Röðun"} @@ -1355,7 +1070,7 @@ is{ ia{"Interlingva"} iba{"Íban"} id{"Indónesíska"} - ie{"Interlingva"} + ie{"Interlingve"} ig{"Ígbó"} ii{"Sísúanjí"} ijo{"Íjó"} @@ -1561,7 +1276,7 @@ is{ smj{"Lúlesamíska"} smn{"Enaresamíska"} sms{"Skoltesamíska"} - sn{"Sínótíbesk mál (önnur)"} + sn{"Shona"} snk{"Sóninke"} so{"Sómalska"} sog{"Sogdíen"} @@ -1596,8 +1311,8 @@ is{ tli{"Tlingit"} tmh{"Tamasjek"} tn{"Tsúana"} - to{"Tongverska"} - tog{"Tongverska"} + to{"Tongverska (Tongaeyjar)"} + tog{"Tongverska (Nyasa)"} tpi{"Tokpisin"} tr{"Tyrkneska"} ts{"Tsonga"} @@ -1659,7 +1374,7 @@ is{ "E", "‰", "∞", - "�", + "NaN", "+", } Types{ @@ -1680,7 +1395,7 @@ is{ traditional{"Hefðbundin"} } } - Version{"1.2"} + Version{"1.61"} calendar{ gregorian{ DateTimePatterns{ @@ -1705,15 +1420,6 @@ is{ "fös", "lau", } - narrow{ - "s", - "m", - "þ", - "m", - "f", - "f", - "l", - } wide{ "sunnudagur", "mánudagur", @@ -1724,6 +1430,17 @@ is{ "laugardagur", } } + stand-alone{ + narrow{ + "s", + "m", + "þ", + "m", + "f", + "f", + "l", + } + } } monthNames{ format{ @@ -1741,6 +1458,22 @@ is{ "nóv", "des", } + wide{ + "janúar", + "febrúar", + "mars", + "apríl", + "maí", + "júní", + "júlí", + "ágúst", + "september", + "október", + "nóvember", + "desember", + } + } + stand-alone{ narrow{ "j", "f", @@ -1755,19 +1488,21 @@ is{ "n", "d", } + } + } + quarters{ + format{ + abbreviated{ + "F1", + "F2", + "F3", + "F4", + } wide{ - "janúar", - "febrúar", - "mars", - "apríl", - "maí", - "júní", - "júlí", - "ágúst", - "september", - "október", - "nóvember", - "desember", + "1st fjórðungur", + "2nd fjórðungur", + "3rd fjórðungur", + "4th fjórðungur", } } } diff --git a/icuSources/data/locales/is_IS.txt b/icuSources/data/locales/is_IS.txt index 696b2dec..1ac978d9 100644 --- a/icuSources/data/locales/is_IS.txt +++ b/icuSources/data/locales/is_IS.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/is_IS.xml +// * Source File:/common/main/is_IS.xml // * // *************************************************************************** is_IS{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/it.txt b/icuSources/data/locales/it.txt index 67236381..cf747039 100644 --- a/icuSources/data/locales/it.txt +++ b/icuSources/data/locales/it.txt @@ -1,16 +1,47 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/it.xml +// * Source File:/common/main/it.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/it.xml + * ICU source: /xml/main/it.xml */ it{ + AuxExemplarCharacters{"[í ï ú]"} Countries{ + 001{"Mondo"} + 002{"Africa"} + 005{"America del Sud"} + 009{"Oceania"} + 011{"Africa occidentale"} + 013{"America centrale"} + 014{"Africa orientale"} + 015{"Africa del Nord"} + 017{"Africa centrale"} + 018{"Africa del Sud"} + 019{"Americhe"} + 021{"America del Nord"} + 029{"Caraibi"} + 030{"Asia orientale"} + 034{"Asia del Sud"} + 035{"Asia sudorientale"} + 039{"Europa del Sud"} + 053{"Australia e Nuova Zelanda"} + 054{"Melanesia"} + 057{"Regione Micronesiana"} + 061{"Polinesia"} + 142{"Asia"} + 143{"Asia centrale"} + 145{"Asia occidentale"} + 150{"Europa"} + 151{"Europa orientale"} + 154{"Europa del Nord"} + 155{"Europa occidentale"} + 172{"Comunità di Stati Indipendenti"} + 419{"America Latina e Caraibi"} AD{"Andorra"} AE{"Emirati Arabi Uniti"} AF{"Afghanistan"} @@ -59,9 +90,10 @@ it{ CN{"Cina"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbia e Montenegro"} CU{"Cuba"} CV{"Capo Verde"} - CX{"Isola Christmas"} + CX{"Isola di Christmas"} CY{"Cipro"} CZ{"Repubblica Ceca"} DE{"Germania"} @@ -78,7 +110,7 @@ it{ ES{"Spagna"} ET{"Etiopia"} FI{"Finlandia"} - FJ{"Fiji"} + FJ{"Figi"} FK{"Isole Falkland"} FM{"Micronesia"} FO{"Isole Faroe"} @@ -190,6 +222,7 @@ it{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"Oceania lontana"} RE{"Réunion"} RO{"Romania"} RU{"Federazione Russa"} @@ -208,9 +241,8 @@ it{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Suriname"} - ST{"São Tomé e Príncipe"} + ST{"Sao Tomé e Príncipe"} SV{"El Salvador"} SY{"Siria"} SZ{"Swaziland"} @@ -228,6 +260,7 @@ it{ TR{"Turchia"} TT{"Trinidad e Tobago"} TV{"Tuvalu"} + TW{"Taiwan"} TZ{"Tanzania"} UA{"Ucraina"} UG{"Uganda"} @@ -246,16 +279,11 @@ it{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Yugoslavia"} - ZA{"Sud Africa"} + ZA{"Sudafrica"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Diner Andorrano", - } ADP{ "ADP", "Peseta Andorrana", @@ -272,32 +300,16 @@ it{ "Af", "Afgani", } - AIF{ - "AIF", - "Franco di Affars e Issas", - } - ALK{ - "ALK", - "Lek Albanese (1946-1961)", - } ALL{ "lek", "Lek Albanese", } - ALV{ - "ALV", - "Lek Valute Albanese", - } - ALX{ - "ALX", - "Certificati di cambio esteri albanesi in dollari", - } AMD{ "dram", "Dram Armeno", } ANG{ - "NA f.", + "ANG", "Fiorino delle Antille Olandesi", } AOA{ @@ -316,18 +328,10 @@ it{ "AOR", "Kwanza Reajustado Angolano (1995-1999)", } - AOS{ - "AOS", - "Escudo Angolano", - } ARA{ "ARA", "Austral Argentino", } - ARM{ - "ARM", - "Peso Moneda Nacional argentino", - } ARP{ "ARP", "Peso Argentino (vecchio Cod.)", @@ -344,10 +348,6 @@ it{ "AUD", "Dollaro Australiano", } - AUP{ - "AUP", - "Sterlina Australiana", - } AWG{ "AWG", "Fiorino di Aruba", @@ -364,10 +364,6 @@ it{ "KM", "Marco Conv. Bosnia-Erzegovina", } - BAN{ - "BAN", - "Nuovo Dinar Bosnia-Herzegovina", - } BBD{ "BDS$", "Dollaro di Barbados", @@ -392,22 +388,10 @@ it{ "BGL", "Lev Bulgaro", } - BGM{ - "BGM", - "Lev Bulgaro Socialista", - } BGN{ "lev", "Nuovo Lev Bulgaro", } - BGO{ - "BGO", - "Lev Bulgaro (1879-1952)", - } - BGX{ - "BGX", - "Certificati di cambio esteri in Lev bulgari", - } BHD{ "BD", "Dinaro del Bahraini", @@ -420,10 +404,6 @@ it{ "Ber$", "Dollaro delle Bermuda", } - BMP{ - "BMP", - "Sterlina delle Bermuda", - } BND{ "BND", "Dollaro del Brunei", @@ -432,10 +412,6 @@ it{ "BOB", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Peso Boliviano", @@ -468,34 +444,18 @@ it{ "BRR", "Cruzeiro Brasiliano", } - BRZ{ - "BRZ", - "Cruzeiro Brasiliano (1942-1967)", - } BSD{ "BSD", "Dollaro delle Bahamas", } - BSP{ - "BSP", - "Libra delle Bahamas", - } BTN{ "Nu", "Ngultrum Butanese", } - BTR{ - "BTR", - "Rupia Butanese", - } BUK{ "BUK", "Kyat Birmano", } - BUR{ - "BUR", - "Rupia Birmana", - } BWP{ "BWP", "Pula del Botswana", @@ -504,10 +464,6 @@ it{ "BYB", "Nuovo Rublo Bielorussia (1994-1999)", } - BYL{ - "BYL", - "Rublo Bielorussia (1992-1994)", - } BYR{ "Rbl", "Rublo Bielorussia", @@ -516,10 +472,6 @@ it{ "BZ$", "Dollaro Belize", } - BZH{ - "BZH", - "Dollaro Honduras Britannico", - } CAD{ "CAD", "Dollaro Canadese", @@ -528,34 +480,10 @@ it{ "CDF", "Franco Congolese", } - CDG{ - "CDG", - "Franco della Repubblica Congolese", - } - CDL{ - "CDL", - "Zaire Congolese", - } - CFF{ - "CFF", - "Franco CFA della Repubblica dell’Africa Centrale", - } CHF{ "SFr.", "Franco Svizzero", } - CKD{ - "CKD", - "Dollaro delle Isole Cook", - } - CLC{ - "CLC", - "Condor Cileno", - } - CLE{ - "CLE", - "Escudo Cileno", - } CLF{ "CLF", "Unidades de Fomento Chilene", @@ -564,30 +492,10 @@ it{ "CLP", "Peso Cileno", } - CMF{ - "CMF", - "Franco CFA del Camerun", - } - CNP{ - "CNP", - "Jen Min Piao Yuan Cinese", - } - CNX{ - "CNX", - "Certificati di cambio esteri cinesi in dollari statunitensi", - } CNY{ "CNY", "Renmimbi Cinese", } - COB{ - "COB", - "Peso in banconote colombiano", - } - COF{ - "COF", - "Franco CFA del Congo", - } COP{ "Col$", "Peso Colombiano", @@ -596,9 +504,9 @@ it{ "C", "Colón Costaricano", } - CSC{ - "CSC", - "Corona Cecoslovacca", + CSD{ + "CSD", + "Dinaro serbo", } CSK{ "CSK", @@ -608,18 +516,10 @@ it{ "CUP", "Peso Cubano", } - CUX{ - "CUX", - "Certificati di cambio esteri cubani", - } CVE{ "CVEsc", "Escudo del Capo Verde", } - CWG{ - "CWG", - "Guilder del Curacao", - } CYP{ "CYP", "Sterlina Cipriota", @@ -636,10 +536,6 @@ it{ "DEM", "Marco Tedesco", } - DES{ - "DES", - "Sperrmark Tedesco", - } DJF{ "DF", "Franco Gibutiano", @@ -656,14 +552,6 @@ it{ "DA", "Dinaro Algerino", } - DZF{ - "DZF", - "Nuovo franco algerino", - } - DZG{ - "DZG", - "Franco germinale algerino", - } ECS{ "ECS", "Sucre dell’Ecuador", @@ -692,10 +580,6 @@ it{ "Br", "Birr Etiopico", } - ETD{ - "ETD", - "Dollaro Etiopico", - } EUR{ "€", "Euro", @@ -704,38 +588,18 @@ it{ "FIM", "Markka Finlandese", } - FIN{ - "FIN", - "Markka Finlandese (1860-1962)", - } FJD{ "F$", "Dollaro delle Figi", } - FJP{ - "FJP", - "Sterlina delle Figi", - } FKP{ "FKP", "Sterlina delle Falkland", } - FOK{ - "FOK", - "Kronur delle Isole Faeroe", - } FRF{ "FRF", "Franco Francese", } - FRG{ - "FRG", - "Franco germinale/franco Poincare francese", - } - GAF{ - "GAF", - "Franco CFA Gabon", - } GBP{ "£", "Sterlina Inglese", @@ -752,86 +616,38 @@ it{ "GHC", "Cedi del Ghana", } - GHO{ - "GHO", - "Vecchi cedi del Ghana", - } - GHP{ - "GHP", - "Sterlina del Ghana", - } - GHR{ - "GHR", - "Cedi rivalutato del Ghana", - } GIP{ "GIP", "Sterlina di Gibilterra", } - GLK{ - "GLK", - "Corona della Groenlandia", - } GMD{ "GMD", "Dalasi del Gambia", } - GMP{ - "GMP", - "Sterlina del Gambia", - } GNF{ "GF", "Franco della Guinea", } - GNI{ - "GNI", - "Franco della Guinea (1960-1972)", - } GNS{ "GNS", "Syli della Guinea", } - GPF{ - "GPF", - "Franco della Guadalupa", - } GQE{ "GQE", "Ekwele della Guinea Equatoriale", } - GQF{ - "GQF", - "Franco della Guinea Equatoriale", - } - GQP{ - "GQP", - "Peseta Guineana della Guinea Equatoriale", - } GRD{ "GRD", "Dracma Greca", } - GRN{ - "GRN", - "Nuova dracma greca", - } GTQ{ "Q", "Quetzal Guatemalteco", } - GUF{ - "GUF", - "Franco Guiana della Guyana francese", - } GWE{ "GWE", "Escudo della Guinea portoghese", } - GWM{ - "GWM", - "Mil Reis della Guinea portoghese", - } GWP{ "GWP", "Peso della Guinea-Bissau", @@ -864,34 +680,14 @@ it{ "HUF", "Fiorino Ungherese", } - IBP{ - "IBP", - "Sterlina dell’Irlanda del Nord", - } - IDG{ - "IDG", - "Fiorino Nica indonesiano", - } - IDJ{ - "IDJ", - "Rupia indonesiana di Java", - } - IDN{ - "IDN", - "Nuova rupia indonesiana", - } IDR{ "Rp", - "Rupia Indiana", + "Rupia Indonesiana", } IEP{ "IR£", "Lira Irlandese", } - ILL{ - "ILL", - "Sheqel Israeliano", - } ILP{ "ILP", "Sterlina Israeliana", @@ -900,10 +696,6 @@ it{ "ILS", "Nuovo sheqel israeliano", } - IMP{ - "IMP", - "Lira Sterlina dell’Isola di Man", - } INR{ "=0#Rs.|1#Re.|1/common/main/it_CH.xml // * // *************************************************************************** it_CH{ @@ -18,18 +18,22 @@ it_CH{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤ #,##0.00;¤-#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } DateTimePatterns{ "HH.mm:ss' h' z", "HH:mm:ss z", diff --git a/icuSources/data/locales/it_IT.txt b/icuSources/data/locales/it_IT.txt index 06a1fc40..32299df9 100644 --- a/icuSources/data/locales/it_IT.txt +++ b/icuSources/data/locales/it_IT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/it_IT.xml +// * Source File:/common/main/it_IT.xml // * // *************************************************************************** it_IT{ @@ -18,9 +18,13 @@ it_IT{ } } } - Version{"1.2"} + Version{"1.37"} calendar{ gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } DateTimePatterns{ "HH:mm:ss z", "H:mm:ss z", diff --git a/icuSources/data/locales/iw.txt b/icuSources/data/locales/iw.txt index 4ce502c3..0bbe22a3 100644 --- a/icuSources/data/locales/iw.txt +++ b/icuSources/data/locales/iw.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** iw{ diff --git a/icuSources/data/locales/iw_IL.txt b/icuSources/data/locales/iw_IL.txt index 0539cb40..4ebf97e6 100644 --- a/icuSources/data/locales/iw_IL.txt +++ b/icuSources/data/locales/iw_IL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** iw_IL{ diff --git a/icuSources/data/locales/ja.txt b/icuSources/data/locales/ja.txt index 88c832c2..a27649ae 100644 --- a/icuSources/data/locales/ja.txt +++ b/icuSources/data/locales/ja.txt @@ -1,2553 +1,2933 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ja.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ja.xml - */ -ja{ - Countries{ - AD{"アンドラ"} - AE{"アラブ首長国連邦"} - AF{"アフガニスタン"} - AG{"アンティグア・バーブーダ"} - AI{"アンギラ"} - AL{"アルバニア"} - AM{"アルメニア"} - AN{"オランダ領アンティル諸島"} - AO{"アンゴラ"} - AQ{"南極大陸"} - AR{"アルゼンチン"} - AS{"米領サモア"} - AT{"オーストリア"} - AU{"オーストラリア"} - AW{"アルバ島"} - AZ{"アゼルバイジャン"} - BA{"ボスニア・ヘルツェゴビナ"} - BB{"バルバドス"} - BD{"バングラデシュ"} - BE{"ベルギー"} - BF{"ブルキナファソ"} - BG{"ブルガリア"} - BH{"バーレーン"} - BI{"ブルンジ"} - BJ{"ベニン"} - BM{"バーミューダ"} - BN{"ブルネイ"} - BO{"ボリビア"} - BR{"ブラジル"} - BS{"バハマ"} - BT{"ブータン"} - BV{"ブーベ島"} - BW{"ボツワナ"} - BY{"ベラルーシ"} - BZ{"ベリーズ"} - CA{"カナダ"} - CC{"ココス (キーリング) 諸島"} - CD{"コンゴ民主共和国"} - CF{"中央アフリカ共和国"} - CG{"コンゴ"} - CH{"スイス"} - CI{"コートジボアール"} - CK{"クック諸島"} - CL{"チリ"} - CM{"カメルーン"} - CN{"中国"} - CO{"コロンビア"} - CR{"コスタリカ"} - CU{"キューバ"} - CV{"カーボベルデ"} - CX{"クリスマス島"} - CY{"キプロス"} - CZ{"チェコ"} - DE{"ドイツ"} - DJ{"ジブチ"} - DK{"デンマーク"} - DM{"ドミニカ国"} - DO{"ドミニカ共和国"} - DZ{"アルジェリア"} - EC{"エクアドル"} - EE{"エストニア"} - EG{"エジプト"} - EH{"西サハラ"} - ER{"エリトリア"} - ES{"スペイン"} - ET{"エチオピア"} - FI{"フィンランド"} - FJ{"フィジー"} - FK{"フォークランド諸島"} - FM{"ミクロネシア"} - FO{"フェロー諸島"} - FR{"フランス"} - GA{"ガボン"} - GB{"イギリス"} - GD{"グレナダ"} - GE{"グルジア"} - GF{"仏領ギアナ"} - GH{"ガーナ"} - GI{"ジブラルタル"} - GL{"グリーンランド"} - GM{"ガンビア"} - GN{"ギニア"} - GP{"グアドループ"} - GQ{"赤道ギニア"} - GR{"ギリシア"} - GS{"南ジョージア島・南サンドイッチ諸島"} - GT{"グアテマラ"} - GU{"グアム島"} - GW{"ギニアビサウ"} - GY{"ガイアナ"} - HK{"中華人民共和国香港特別行政区"} - HM{"ハード・アンド・マクドナルド・アイランズ"} - HN{"ホンジュラス"} - HR{"クロアチア"} - HT{"ハイチ"} - HU{"ハンガリー"} - ID{"インドネシア"} - IE{"アイルランド"} - IL{"イスラエル"} - IN{"インド"} - IO{"英領インド洋植民地"} - IQ{"イラク"} - IR{"イラン"} - IS{"アイスランド"} - IT{"イタリア"} - JM{"ジャマイカ"} - JO{"ヨルダン"} - JP{"日本"} - KE{"ケニア"} - KG{"キルギスタン"} - KH{"カンボジア"} - KI{"キリバス"} - KM{"コモロ"} - KN{"セントクリストファー・ネイビス"} - KP{"朝鮮民主主義人民共和国"} - KR{"大韓民国"} - KW{"クウェート"} - KY{"ケイマン諸島"} - KZ{"カザフスタン"} - LA{"ラオス"} - LB{"レバノン"} - LC{"セントルシア"} - LI{"リヒテンシュタイン"} - LK{"スリランカ"} - LR{"リベリア"} - LS{"レソト"} - LT{"リトアニア"} - LU{"ルクセンブルグ"} - LV{"ラトビア"} - LY{"リビア"} - MA{"モロッコ"} - MC{"モナコ"} - MD{"モルドバ"} - MG{"マダガスカル"} - MH{"マーシャル諸島共和国"} - MK{"マケドニア"} - ML{"マリ"} - MM{"ミャンマー"} - MN{"モンゴル"} - MO{"中華人民共和国マカオ特別行政区"} - MP{"北マリアナ諸島"} - MQ{"マルティニーク島"} - MR{"モーリタニア"} - MS{"モントセラト島"} - MT{"マルタ"} - MU{"モーリシャス"} - MV{"モルジブ"} - MW{"マラウィ"} - MX{"メキシコ"} - MY{"マレーシア"} - MZ{"モザンビーク"} - NA{"ナミビア"} - NC{"ニューカレドニア"} - NE{"ニジェール"} - NF{"ノーフォーク島"} - NG{"ナイジェリア"} - NI{"ニカラグア"} - NL{"オランダ"} - NO{"ノルウェー"} - NP{"ネパール"} - NR{"ナウル"} - NU{"ニウエ島"} - NZ{"ニュージーランド"} - OM{"オマーン"} - PA{"パナマ"} - PE{"ペルー"} - PF{"仏領ポリネシア"} - PG{"パプアニューギニア"} - PH{"フィリピン"} - PK{"パキスタン"} - PL{"ポーランド"} - PM{"サンピエール・エ・ミクロン島"} - PN{"ピトケアン島"} - PR{"プエルトリコ"} - PS{"パレスチナ"} - PT{"ポルトガル"} - PW{"パラオ"} - PY{"パラグアイ"} - QA{"カタール"} - RE{"レユニオン島"} - RO{"ルーマニア"} - RU{"ロシア"} - RW{"ルワンダ"} - SA{"サウジアラビア"} - SB{"ソロモン諸島"} - SC{"セイシェル"} - SD{"スーダン"} - SE{"スウェーデン"} - SG{"シンガポール"} - SH{"セントヘレナ島"} - SI{"スロベニア"} - SJ{"スバールバル諸島・ヤンマイエン島"} - SK{"スロバキア"} - SL{"シエラレオネ"} - SM{"サンマリノ"} - SN{"セネガル"} - SO{"ソマリア"} - SP{"セルビア"} - SR{"スリナム"} - ST{"サントメ・プリンシペ"} - SV{"エルサルバドル"} - SY{"シリア"} - SZ{"スワジランド"} - TC{"タークス諸島・カイコス諸島"} - TD{"チャド"} - TF{"仏南方領"} - TG{"トーゴ"} - TH{"タイ"} - TJ{"タジキスタン"} - TK{"トケラウ諸島"} - TL{"東ティモール"} - TM{"トルクメニスタン"} - TN{"チュニジア"} - TO{"トンガ"} - TR{"トルコ"} - TT{"トリニダード・トバゴ"} - TV{"ツバル"} - TW{"台湾"} - TZ{"タンザニア"} - UA{"ウクライナ"} - UG{"ウガンダ"} - UM{"米領太平洋諸島"} - US{"アメリカ合衆国"} - UY{"ウルグアイ"} - UZ{"ウズベキスタン"} - VA{"ローマ教皇庁 (バチカン市国)"} - VC{"セントビンセント・グレナディーン諸島"} - VE{"ベネズエラ"} - VG{"英領バージン諸島"} - VI{"米領バージン諸島"} - VN{"ベトナム"} - VU{"バヌアツ"} - WF{"ウォリス・フトーナ"} - WS{"西サモア"} - YE{"イエメン"} - YT{"マヨット島"} - YU{"ユーゴスラビア"} - ZA{"南アフリカ"} - ZM{"ザンビア"} - ZW{"ジンバブエ"} - } - Currencies{ - ADD{ - "ADD", - "アンドラ ディナール", - } - ADP{ - "ADP", - "アンドラ ペセタ", - } - AED{ - "AED", - "UAE ディルハム", - } - AFA{ - "AFA", - "アフガニー (1927-2002)", - } - AFN{ - "Af", - "アフガニー", - } - AIF{ - "AIF", - "アファールおよびイサス フラン", - } - ALK{ - "ALK", - "アルバニア レク (1946-1961)", - } - ALL{ - "ALL", - "アルバニア レク", - } - ALV{ - "ALV", - "アルバニア レク (Valute)", - } - ALX{ - "ALX", - "アルバニア レク (f)", - } - AMD{ - "AMD", - "アルメニア ドラム", - } - ANG{ - "ANG", - "オランダ領アンティル ギルダー", - } - AOA{ - "AOA", - "クワンザ (AOA)", - } - AOK{ - "AOK", - "クワンザ (1977-1990)", - } - AON{ - "AON", - "アンゴラ 新クワンザ (1990-2000)", - } - AOR{ - "AOR", - "アンゴラ 旧クワンザ (1995-1999)", - } - AOS{ - "AOS", - "アンゴラ エスクード", - } - ARA{ - "ARA", - "アルゼンチン アゥストラール", - } - ARM{ - "ARM", - "アルゼンチン ペソ (MN)", - } - ARP{ - "ARP", - "アルゼンチン ペソ (1983-1985)", - } - ARS{ - "ARS", - "アルゼンチン ペソ", - } - AUD{ - "AUD", - "オーストラリア ドル", - } - AUP{ - "AUP", - "オーストラリア ポンド", - } - AWG{ - "AWG", - "アルバ ギルダー", - } - AZM{ - "AZM", - "アゼルバイジャン マナト", - } - BAD{ - "BAD", - "ボスニア ディナール", - } - BAM{ - "BAM", - "ボスニア マルク (BAM)", - } - BAN{ - "BAN", - "ボスニア 新ディナール", - } - BBD{ - "BBD", - "バルバドス ドル", - } - BDT{ - "BDT", - "バングラデシュ タカ", - } - BEC{ - "BEC", - "ベルギー フラン (BEC)", - } - BEF{ - "BEF", - "ベルギー フラン", - } - BEL{ - "BEL", - "ベルギー フラン (BEL)", - } - BGL{ - "BGL", - "ブルガリア レフ (BGL)", - } - BGM{ - "BGM", - "ブルガリア レフ (BGM)", - } - BGN{ - "BGN", - "ブルガリア 新レフ", - } - BGO{ - "BGO", - "ブルガリア レフ (1879-1952)", - } - BGX{ - "BGX", - "ブルガリア レフ (FEC)", - } - BHD{ - "BHD", - "バーレーン ディナール", - } - BIF{ - "BIF", - "ブルンジ フラン", - } - BMD{ - "BMD", - "バミューダ ドル", - } - BMP{ - "BMP", - "バミューダ ポンド", - } - BND{ - "BND", - "ブルネイ ドル", - } - BOB{ - "BOB", - "ボリビアノ", - } - BOL{ - "BOL", - "ボリビア ボリビアノ (1863-1962)", - } - BOP{ - "BOP", - "ボリビア ペソ", - } - BOV{ - "BOV", - "ボリビア Mvdol", - } - BRB{ - "BRB", - "ブラジル 新クルゼイロ (BRB、1967-1986)", - } - BRC{ - "BRC", - "ブラジル クルゼイロ (BRC)", - } - BRE{ - "BRE", - "ブラジル クルゼイロ (BRE、1990-1993)", - } - BRL{ - "BRL", - "ブラジル レアル", - } - BRN{ - "BRN", - "ブラジル 新クルゼイロ (BRN)", - } - BRR{ - "BRR", - "ブラジル クルゼイロ レアル", - } - BRZ{ - "BRZ", - "ブラジル クルゼイロ (BRZ、1942-1967)", - } - BSD{ - "BSD", - "バハマ ドル", - } - BSP{ - "BSP", - "バハマ ポンド", - } - BTN{ - "BTN", - "ブータン ニュルタム", - } - BTR{ - "BTR", - "ブータン ルピー", - } - BUK{ - "BUK", - "ビルマ チャット", - } - BUR{ - "BUR", - "ビルマ ルピー", - } - BWP{ - "BWP", - "ボツワナ プラ", - } - BYB{ - "BYB", - "ベラルーシ ルーブル (BYB、1994-1999)", - } - BYL{ - "BYL", - "ベラルーシ ルーブル (BYL、1992-1994)", - } - BYR{ - "BYR", - "ベラルーシ ルーブル", - } - BZD{ - "BZD", - "ベリーズ ドル", - } - BZH{ - "BZH", - "英領ホンジュラス ドル", - } - CAD{ - "CAD", - "カナダ ドル", - } - CDF{ - "CDF", - "コンゴ フラン", - } - CDG{ - "CDG", - "コンゴ共和国 フラン", - } - CDL{ - "CDL", - "コンゴ ザイール", - } - CFF{ - "CFF", - "中央アフリカ共和国 CFA フラン", - } - CHF{ - "CHF", - "スイス フラン", - } - CKD{ - "CKD", - "クック諸島 ドル", - } - CLC{ - "CLC", - "チリ ペソ (CLC)", - } - CLE{ - "CLE", - "チリ エスクード", - } - CLF{ - "CLF", - "チリ ウニダ デ フォメント", - } - CLP{ - "CLP", - "チリ ペソ", - } - CMF{ - "CMF", - "カメルーン CFA フラン", - } - CNP{ - "CNP", - "中国人民元", - } - CNX{ - "CNX", - "中国 米ドル (FEC)", - } - CNY{ - "CNY", - "中国人民元", - } - COB{ - "COB", - "コロンビア ペソ (COB)", - } - COF{ - "COF", - "コンゴ CFA フラン", - } - COP{ - "COP", - "コロンビア ペソ", - } - CRC{ - "CRC", - "コスタリカ コロン", - } - CSC{ - "CSC", - "チェコスロバキア コルナ (CSC)", - } - CSK{ - "CSK", - "チェコスロバキア コルナ (CSK)", - } - CUP{ - "CUP", - "キューバ ペソ", - } - CUX{ - "CUX", - "キューバ (FEC)", - } - CVE{ - "CVE", - "カーボベルデ エスクード", - } - CWG{ - "CWG", - "キュラソー島 ギルダー", - } - CYP{ - "CYP", - "キプロス ポンド", - } - CZK{ - "CZK", - "チェコ コルナ", - } - DDM{ - "DDM", - "東ドイツ マルク", - } - DEM{ - "DEM", - "ドイツ マルク", - } - DES{ - "DES", - "ドイツ マルク (Sperrmark)", - } - DJF{ - "DJF", - "ジブチ フラン", - } - DKK{ - "DKK", - "デンマーク クローネ", - } - DOP{ - "DOP", - "ドミニカ ペソ", - } - DZD{ - "DZD", - "アルジェリア ディナール", - } - DZF{ - "DZF", - "アルジェリア 新フラン", - } - DZG{ - "DZG", - "アルジェリア フラン (DZG)", - } - ECS{ - "ECS", - "エクアドル スクレ", - } - ECV{ - "ECV", - "エクアドル UVC", - } - EEK{ - "EEK", - "エストニア クルーン", - } - EGP{ - "EGP", - "エジプト ポンド", - } - ERN{ - "ERN", - "エリトリア ナクファ", - } - ESP{ - "ESP", - "スペイン ペセタ", - } - ETB{ - "ETB", - "エチオピア ブル", - } - ETD{ - "ETD", - "エチオピア ドル", - } - EUR{ - "€", - "ユーロ", - } - FIM{ - "FIM", - "フィンランド マルカ", - } - FIN{ - "FIN", - "フィンランド マルカ (1860-1962)", - } - FJD{ - "FJD", - "フィジー諸島 ドル", - } - FJP{ - "FJP", - "フィジー諸島 ポンド", - } - FKP{ - "FKP", - "フォークランド(マルビナス)諸島 ポンド", - } - FOK{ - "FOK", - "フェロー諸島 クローナ", - } - FRF{ - "FRF", - "フランス フラン", - } - FRG{ - "FRG", - "フランス フラン (Franc Germinal/Franc Poincare)", - } - GAF{ - "GAF", - "ガボン CFA フラン", - } - GBP{ - "£", - "英国ポンド", - } - GEK{ - "GEK", - "グルジア クーポン ラリ", - } - GEL{ - "GEL", - "グルジア ラリ", - } - GHC{ - "GHC", - "ガーナ セディ", - } - GHO{ - "GHO", - "ガーナ 旧セディ", - } - GHP{ - "GHP", - "ガーナ ポンド", - } - GHR{ - "GHR", - "ガーナ 新セディ", - } - GIP{ - "GIP", - "ジブラルタル ポンド", - } - GLK{ - "GLK", - "グリーンランド クローネ", - } - GMD{ - "GMD", - "ガンビア ダラシ", - } - GMP{ - "GMP", - "ガンビア ポンド", - } - GNF{ - "GNF", - "ギニア フラン", - } - GNI{ - "GNI", - "ギニア フラン (1960-1972)", - } - GNS{ - "GNS", - "ギニア シリー", - } - GPF{ - "GPF", - "グアドループ フラン", - } - GQE{ - "GQE", - "赤道ギニア ギニー", - } - GQF{ - "GQF", - "赤道ギニア フラン", - } - GQP{ - "GQP", - "赤道ギニア ペセタ", - } - GRD{ - "GRD", - "ギリシャ ドラクマ", - } - GRN{ - "GRN", - "ギリシャ 新ドラクマ", - } - GTQ{ - "GTQ", - "グアテマラ ケツァル", - } - GUF{ - "GUF", - "仏領ギアナ フラン", - } - GWE{ - "GWE", - "ポルトガル領ギニア エスクード", - } - GWM{ - "GWM", - "ポルトガル領ギニア ミルレイス", - } - GWP{ - "GWP", - "ギニアビサウ ペソ", - } - GYD{ - "GYD", - "ガイアナ ドル", - } - HKD{ - "HKD", - "香港ドル", - } - HNL{ - "HNL", - "ホンジュラス レンピラ", - } - HRD{ - "HRD", - "クロアチア ディナール", - } - HRK{ - "HRK", - "クロアチア クーナ", - } - HTG{ - "HTG", - "ハイチ グールド", - } - HUF{ - "HUF", - "ハンガリー フォリント", - } - IBP{ - "IBP", - "北アイルランド ポンド", - } - IDG{ - "IDG", - "インドネシア ニカギルダー", - } - IDJ{ - "IDJ", - "インドネシア ジャワ ルピア", - } - IDN{ - "IDN", - "インドネシア 新ルピア", - } - IDR{ - "IDR", - "インドネシア ルピア", - } - IEP{ - "IEP", - "アイリッシュ ポンド", - } - ILL{ - "ILL", - "イスラエル シェケル", - } - ILP{ - "ILP", - "イスラエル ポンド", - } - ILS{ - "ILS", - "イスラエル新シェケル", - } - IMP{ - "IMP", - "マン島 ポンド", - } - INR{ - "=0#Rs.|1#Re.|1/common/main/ja.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ja.xml + */ +ja{ + Countries{ + 001{"世界"} + 002{"アフリカ"} + 005{"南アメリカ"} + 009{"オセアニア"} + 011{"西アフリカ"} + 013{"中央アメリカ"} + 014{"東アフリカ"} + 015{"北アフリカ"} + 017{"中部アフリカ"} + 018{"南部アフリカ"} + 019{"アメリカ大陸"} + 021{"北アメリカ"} + 029{"カリブ海"} + 030{"東アジア"} + 034{"南アジア"} + 035{"東南アジア"} + 039{"南ヨーロッパ"} + 053{"オーストラリア・ニュージーランド"} + 054{"メラネシア"} + 057{"ミクロネシア地域"} + 061{"ポリネシア"} + 062{"南中央アジア"} + 142{"アジア"} + 143{"中央アジア"} + 145{"西アジア"} + 150{"ヨーロッパ"} + 151{"東ヨーロッパ"} + 154{"北ヨーロッパ"} + 155{"西ヨーロッパ"} + 172{"独立国家共同体"} + 419{"ラテンアメリカ・カリブ地域"} + 830{"チャネル諸島"} + 833{"マン島"} + AD{"アンドラ"} + AE{"アラブ首長国連邦"} + AF{"アフガニスタン"} + AG{"アンティグア・バーブーダ"} + AI{"アンギラ"} + AL{"アルバニア"} + AM{"アルメニア"} + AN{"オランダ領アンティル諸島"} + AO{"アンゴラ"} + AQ{"南極大陸"} + AR{"アルゼンチン"} + AS{"米領サモア"} + AT{"オーストリア"} + AU{"オーストラリア"} + AW{"アルバ島"} + AX{"オーランド諸島"} + AZ{"アゼルバイジャン"} + BA{"ボスニア・ヘルツェゴビナ"} + BB{"バルバドス"} + BD{"バングラデシュ"} + BE{"ベルギー"} + BF{"ブルキナファソ"} + BG{"ブルガリア"} + BH{"バーレーン"} + BI{"ブルンジ"} + BJ{"ベニン"} + BM{"バミューダ"} + BN{"ブルネイ"} + BO{"ボリビア"} + BR{"ブラジル"} + BS{"バハマ"} + BT{"ブータン"} + BV{"ブーベ島"} + BW{"ボツワナ"} + BY{"ベラルーシ"} + BZ{"ベリーズ"} + CA{"カナダ"} + CC{"ココス (キーリング) 諸島"} + CD{"コンゴ民主共和国 (キンシャサ)"} + CF{"中央アフリカ共和国"} + CG{"コンゴ共和国 (ブラザビル)"} + CH{"スイス"} + CI{"コートジボワール"} + CK{"クック諸島"} + CL{"チリ"} + CM{"カメルーン"} + CN{"中国"} + CO{"コロンビア"} + CR{"コスタリカ"} + CS{"セルビア・モンテネグロ"} + CU{"キューバ"} + CV{"カーボベルデ"} + CX{"クリスマス島"} + CY{"キプロス"} + CZ{"チェコ共和国"} + DE{"ドイツ"} + DJ{"ジブチ"} + DK{"デンマーク"} + DM{"ドミニカ国"} + DO{"ドミニカ共和国"} + DZ{"アルジェリア"} + EC{"エクアドル"} + EE{"エストニア"} + EG{"エジプト"} + EH{"西サハラ"} + ER{"エリトリア"} + ES{"スペイン"} + ET{"エチオピア"} + FI{"フィンランド"} + FJ{"フィジー"} + FK{"フォークランド諸島"} + FM{"ミクロネシア"} + FO{"フェロー諸島"} + FR{"フランス"} + GA{"ガボン"} + GB{"イギリス"} + GD{"グレナダ"} + GE{"グルジア"} + GF{"仏領ギアナ"} + GH{"ガーナ"} + GI{"ジブラルタル"} + GL{"グリーンランド"} + GM{"ガンビア"} + GN{"ギニア"} + GP{"グアドループ"} + GQ{"赤道ギニア"} + GR{"ギリシャ"} + GS{"南ジョージア島・南サンドイッチ諸島"} + GT{"グアテマラ"} + GU{"グアム"} + GW{"ギニアビサウ"} + GY{"ガイアナ"} + HK{"中華人民共和国香港特別行政区"} + HM{"ハード島・マクドナルド諸島"} + HN{"ホンジュラス"} + HR{"クロアチア"} + HT{"ハイチ"} + HU{"ハンガリー"} + ID{"インドネシア"} + IE{"アイルランド"} + IL{"イスラエル"} + IN{"インド"} + IO{"英領インド洋植民地"} + IQ{"イラク"} + IR{"イラン"} + IS{"アイスランド"} + IT{"イタリア"} + JM{"ジャマイカ"} + JO{"ヨルダン"} + JP{"日本"} + KE{"ケニア"} + KG{"キルギスタン"} + KH{"カンボジア"} + KI{"キリバス"} + KM{"コモロ"} + KN{"セントクリストファー・ネイビス"} + KP{"朝鮮民主主義人民共和国"} + KR{"大韓民国"} + KW{"クウェート"} + KY{"ケイマン諸島"} + KZ{"カザフスタン"} + LA{"ラオス"} + LB{"レバノン"} + LC{"セントルシア"} + LI{"リヒテンシュタイン"} + LK{"スリランカ"} + LR{"リベリア"} + LS{"レソト"} + LT{"リトアニア"} + LU{"ルクセンブルグ"} + LV{"ラトビア"} + LY{"リビア"} + MA{"モロッコ"} + MC{"モナコ"} + MD{"モルドバ"} + MG{"マダガスカル"} + MH{"マーシャル諸島共和国"} + MK{"マケドニア"} + ML{"マリ"} + MM{"ミャンマー"} + MN{"モンゴル"} + MO{"中華人民共和国マカオ特別行政区"} + MP{"北マリアナ諸島"} + MQ{"マルティニーク島"} + MR{"モーリタニア"} + MS{"モントセラト島"} + MT{"マルタ"} + MU{"モーリシャス"} + MV{"モルジブ"} + MW{"マラウィ"} + MX{"メキシコ"} + MY{"マレーシア"} + MZ{"モザンビーク"} + NA{"ナミビア"} + NC{"ニューカレドニア"} + NE{"ニジェール"} + NF{"ノーフォーク島"} + NG{"ナイジェリア"} + NI{"ニカラグア"} + NL{"オランダ"} + NO{"ノルウェー"} + NP{"ネパール"} + NR{"ナウル"} + NU{"ニウエ島"} + NZ{"ニュージーランド"} + OM{"オマーン"} + PA{"パナマ"} + PE{"ペルー"} + PF{"仏領ポリネシア"} + PG{"パプアニューギニア"} + PH{"フィリピン"} + PK{"パキスタン"} + PL{"ポーランド"} + PM{"サンピエール島・ミクロン島"} + PN{"ピトケアン島"} + PR{"プエルトリコ"} + PS{"パレスチナ領土"} + PT{"ポルトガル"} + PW{"パラオ"} + PY{"パラグアイ"} + QA{"カタール"} + QO{"その他のオセアニア"} + RE{"レユニオン島"} + RO{"ルーマニア"} + RU{"ロシア"} + RW{"ルワンダ"} + SA{"サウジアラビア"} + SB{"ソロモン諸島"} + SC{"セーシェル"} + SD{"スーダン"} + SE{"スウェーデン"} + SG{"シンガポール"} + SH{"セントヘレナ"} + SI{"スロベニア"} + SJ{"スバールバル諸島・ヤンマイエン島"} + SK{"スロバキア"} + SL{"シエラレオネ"} + SM{"サンマリノ"} + SN{"セネガル"} + SO{"ソマリア"} + SR{"スリナム"} + ST{"サントメ・プリンシペ"} + SV{"エルサルバドル"} + SY{"シリア"} + SZ{"スワジランド"} + TC{"タークス諸島・カイコス諸島"} + TD{"チャド"} + TF{"フランス領極南諸島"} + TG{"トーゴ"} + TH{"タイ"} + TJ{"タジキスタン"} + TK{"トケラウ諸島"} + TL{"東ティモール"} + TM{"トルクメニスタン"} + TN{"チュニジア"} + TO{"トンガ"} + TR{"トルコ"} + TT{"トリニダード・トバゴ"} + TV{"ツバル"} + TW{"台湾"} + TZ{"タンザニア"} + UA{"ウクライナ"} + UG{"ウガンダ"} + UM{"米領太平洋諸島"} + US{"アメリカ合衆国"} + UY{"ウルグアイ"} + UZ{"ウズベキスタン"} + VA{"バチカン市国"} + VC{"セントビンセント・グレナディーン諸島"} + VE{"ベネズエラ"} + VG{"イギリス領ヴァージン諸島"} + VI{"アメリカ領ヴァージン諸島"} + VN{"ベトナム"} + VU{"バヌアツ"} + WF{"ウォリス・フツナ"} + WS{"サモア"} + YE{"イエメン"} + YT{"マヨット島"} + ZA{"南アフリカ"} + ZM{"ザンビア"} + ZW{"ジンバブエ"} + } + Currencies{ + ADP{ + "ADP", + "アンドラ ペセタ", + } + AED{ + "AED", + "UAE ディルハム", + } + AFA{ + "AFA", + "アフガニー (1927-2002)", + } + AFN{ + "Af", + "アフガニー", + } + ALL{ + "ALL", + "アルバニア レク", + } + AMD{ + "AMD", + "アルメニア ドラム", + } + ANG{ + "ANG", + "オランダ領アンティル ギルダー", + } + AOA{ + "AOA", + "クワンザ", + } + AOK{ + "AOK", + "クワンザ (1977-1990)", + } + AON{ + "AON", + "アンゴラ 新クワンザ (1990-2000)", + } + AOR{ + "AOR", + "アンゴラ 旧クワンザ (1995-1999)", + } + ARA{ + "ARA", + "アルゼンチン アゥストラール", + } + ARP{ + "ARP", + "アルゼンチン ペソ (1983-1985)", + } + ARS{ + "ARS", + "アルゼンチン ペソ", + } + ATS{ + "ATS", + "オーストリア シリング", + } + AUD{ + "AUD", + "オーストラリア ドル", + } + AWG{ + "AWG", + "アルバ ギルダー", + } + AZM{ + "AZM", + "アゼルバイジャン マナト", + } + BAD{ + "BAD", + "ボスニア ディナール", + } + BAM{ + "BAM", + "ボスニア マルク (BAM)", + } + BBD{ + "BBD", + "バルバドス ドル", + } + BDT{ + "BDT", + "バングラデシュ タカ", + } + BEC{ + "BEC", + "ベルギー フラン (BEC)", + } + BEF{ + "BEF", + "ベルギー フラン", + } + BEL{ + "BEL", + "ベルギー フラン (BEL)", + } + BGL{ + "BGL", + "ブルガリア レフ", + } + BGN{ + "BGN", + "ブルガリア 新レフ", + } + BHD{ + "BHD", + "バーレーン ディナール", + } + BIF{ + "BIF", + "ブルンジ フラン", + } + BMD{ + "BMD", + "バミューダ ドル", + } + BND{ + "BND", + "ブルネイ ドル", + } + BOB{ + "BOB", + "ボリビアーノ", + } + BOP{ + "BOP", + "ボリビア ペソ", + } + BOV{ + "BOV", + "ボリビア Mvdol", + } + BRB{ + "BRB", + "ブラジル 新クルゼイロ (1967-1986)", + } + BRC{ + "BRC", + "ブラジル クルゼイロ", + } + BRE{ + "BRE", + "ブラジル クルゼイロ (1990-1993)", + } + BRL{ + "BRL", + "ブラジル レアル", + } + BRN{ + "BRN", + "ブラジル 新クルゼイロ", + } + BRR{ + "BRR", + "ブラジル クルゼイロ レアル", + } + BSD{ + "BSD", + "バハマ ドル", + } + BTN{ + "BTN", + "ブータン ニュルタム", + } + BUK{ + "BUK", + "ビルマ チャット", + } + BWP{ + "BWP", + "ボツワナ プラ", + } + BYB{ + "BYB", + "ベラルーシ ルーブル (1994-1999)", + } + BYR{ + "BYR", + "ベラルーシ ルーブル", + } + BZD{ + "BZD", + "ベリーズ ドル", + } + CAD{ + "CAD", + "カナダ ドル", + } + CDF{ + "CDF", + "コンゴ フラン", + } + CHE{ + "CHE", + "WIR ユーロ", + } + CHF{ + "CHF", + "スイス フラン", + } + CHW{ + "CHW", + "WIR フラン", + } + CLF{ + "CLF", + "チリ ウニダ デ フォメント", + } + CLP{ + "CLP", + "チリ ペソ", + } + CNY{ + "元", + "中国人民元", + } + COP{ + "COP", + "コロンビア ペソ", + } + COU{ + "COU", + "レアル (UVR)", + } + CRC{ + "CRC", + "コスタリカ コロン", + } + CSD{ + "CSD", + "セルビアン ディナール", + } + CSK{ + "CSK", + "チェコスロバキア コルナ", + } + CUP{ + "CUP", + "キューバ ペソ", + } + CVE{ + "CVE", + "カーボベルデ エスクード", + } + CYP{ + "CYP", + "キプロス ポンド", + } + CZK{ + "CZK", + "チェコ コルナ", + } + DDM{ + "DDM", + "東ドイツ マルク", + } + DEM{ + "DEM", + "ドイツ マルク", + } + DJF{ + "DJF", + "ジブチ フラン", + } + DKK{ + "DKK", + "デンマーク クローネ", + } + DOP{ + "DOP", + "ドミニカ ペソ", + } + DZD{ + "DZD", + "アルジェリア ディナール", + } + ECS{ + "ECS", + "エクアドル スクレ", + } + ECV{ + "ECV", + "エクアドル UVC", + } + EEK{ + "EEK", + "エストニア クルーン", + } + EGP{ + "EGP", + "エジプト ポンド", + } + EQE{ + "EQE", + "エクウェレ", + } + ERN{ + "ERN", + "エリトリア ナクファ", + } + ESP{ + "ESP", + "スペイン ペセタ", + } + ETB{ + "ETB", + "エチオピア ブル", + } + EUR{ + "€", + "ユーロ", + } + FIM{ + "FIM", + "フィンランド マルカ", + } + FJD{ + "FJD", + "フィジー諸島 ドル", + } + FKP{ + "FKP", + "フォークランド(マルビナス)諸島 ポンド", + } + FRF{ + "FRF", + "フランス フラン", + } + GBP{ + "£", + "英国ポンド", + } + GEK{ + "GEK", + "グルジア クーポン ラリ", + } + GEL{ + "GEL", + "グルジア ラリ", + } + GHC{ + "GHC", + "ガーナ セディ", + } + GIP{ + "GIP", + "ジブラルタル ポンド", + } + GMD{ + "GMD", + "ガンビア ダラシ", + } + GNF{ + "GNF", + "ギニア フラン", + } + GNS{ + "GNS", + "ギニア シリー", + } + GQE{ + "GQE", + "赤道ギニア ギニー", + } + GRD{ + "GRD", + "ギリシャ ドラクマ", + } + GTQ{ + "GTQ", + "グアテマラ ケツァル", + } + GWE{ + "GWE", + "ポルトガル領ギニア エスクード", + } + GWP{ + "GWP", + "ギニアビサウ ペソ", + } + GYD{ + "GYD", + "ガイアナ ドル", + } + HKD{ + "HKD", + "香港ドル", + } + HNL{ + "HNL", + "ホンジュラス レンピラ", + } + HRD{ + "HRD", + "クロアチア ディナール", + } + HRK{ + "HRK", + "クロアチア クーナ", + } + HTG{ + "HTG", + "ハイチ グールド", + } + HUF{ + "HUF", + "ハンガリー フォリント", + } + IDR{ + "IDR", + "インドネシア ルピア", + } + IEP{ + "IEP", + "アイリッシュ ポンド", + } + ILP{ + "ILP", + "イスラエル ポンド", + } + ILS{ + "ILS", + "イスラエル新シェケル", + } + INR{ + "INR", + "インド ルピー", + } + IQD{ + "IQD", + "イラク ディナール", + } + IRR{ + "IRR", + "イラン リアル", + } + ISK{ + "ISK", + "アイスランド クローナ", + } + ITL{ + "₤", + "イタリア リラ", + } + JMD{ + "JMD", + "ジャマイカ ドル", + } + JOD{ + "JOD", + "ヨルダン ディナール", + } + JPY{ + "¥", + "日本円", + } + KES{ + "KES", + "ケニア シリング", + } + KGS{ + "KGS", + "キルギスタン ソム", + } + KHR{ + "KHR", + "カンボジア リエル", + } + KMF{ + "KMF", + "コモロ フラン", + } + KPW{ + "KPW", + "北朝鮮 ウォン", + } + KRW{ + "₩", + "韓国 ウォン", + } + KWD{ + "KWD", + "クウェート ディナール", + } + KYD{ + "KYD", + "ケイマン諸島 ドル", + } + KZT{ + "KZT", + "カザフスタン テンゲ", + } + LAK{ + "LAK", + "ラオス キープ", + } + LBP{ + "LBP", + "レバノン ポンド", + } + LKR{ + "LKR", + "スリランカ ルピー", + } + LRD{ + "LRD", + "リベリア ドル", + } + LSL{ + "LSL", + "レソト ロティ", + } + LSM{ + "LSM", + "マロティ", + } + LTL{ + "LTL", + "リトアニア リタス", + } + LTT{ + "LTT", + "リトアニア タロナ", + } + LUF{ + "LUF", + "ルクセンブルグ フラン", + } + LVL{ + "LVL", + "ラトビア ラッツ", + } + LVR{ + "LVR", + "ラトビア ルーブル", + } + LYD{ + "LYD", + "リビア ディナール", + } + MAD{ + "MAD", + "モロッコ ディルハム", + } + MAF{ + "MAF", + "モロッコ フラン", + } + MDL{ + "MDL", + "モルドバ レイ", + } + MGA{ + "MGA", + "マダガスカル アリアリ", + } + MGF{ + "MGF", + "マダガスカル フラン", + } + MKD{ + "MKD", + "マケドニア デナル", + } + MLF{ + "MLF", + "マリ フラン", + } + MMK{ + "MMK", + "ミャンマー チャット", + } + MNT{ + "MNT", + "モンゴル トグログ", + } + MOP{ + "MOP", + "マカオ パタカ", + } + MRO{ + "MRO", + "モーリタニア ウギア", + } + MTL{ + "MTL", + "マルタ リラ", + } + MTP{ + "MTP", + "マルタ ポンド", + } + MUR{ + "MUR", + "モーリシャス ルピー", + } + MVR{ + "MVR", + "モルディブ諸島 ルフィア", + } + MWK{ + "MWK", + "マラウィ クワチャ", + } + MXN{ + "MXN", + "メキシコ ペソ", + } + MXP{ + "MXP", + "メキシコ ペソ (1861-1992)", + } + MXV{ + "MXV", + "メキシコ UDI", + } + MYR{ + "MYR", + "マレーシア リンギット", + } + MZE{ + "MZE", + "モザンピーク エスクード", + } + MZM{ + "MZM", + "モザンピーク メティカル", + } + NAD{ + "NAD", + "ナミビア ドル", + } + NGN{ + "NGN", + "ナイジェリア ナイラ", + } + NIC{ + "NIC", + "ニカラグア コルドバ", + } + NIO{ + "NIO", + "ニカラグア コルドバ オロ", + } + NLG{ + "NLG", + "オランダ ギルダー", + } + NOK{ + "NOK", + "ノルウェー クローネ", + } + NPR{ + "NPR", + "ネパール ルピー", + } + NZD{ + "NZD", + "ニュージーランド ドル", + } + OMR{ + "OMR", + "オマーン リアル", + } + PAB{ + "PAB", + "パナマ バルボア", + } + PEI{ + "PEI", + "ペルー インティ", + } + PEN{ + "PEN", + "ペルー 新ソル", + } + PES{ + "PES", + "ペルー ソル", + } + PGK{ + "PGK", + "パプアニューギニア キナ", + } + PHP{ + "PHP", + "フィリピン ペソ", + } + PKR{ + "PKR", + "パキスタン ルピー", + } + PLN{ + "PLN", + "ポーランド ズウォティ", + } + PLZ{ + "PLZ", + "ポーランド ズウォティ (1950-1995)", + } + PTE{ + "PTE", + "ポルトガル エスクード", + } + PYG{ + "PYG", + "パラグアイ グアラニ", + } + QAR{ + "QAR", + "カタール リアル", + } + RHD{ + "RHD", + "ローデシア ドル", + } + ROL{ + "ROL", + "ルーマニア レイ", + } + RUB{ + "RUB", + "ロシア ルーブル", + } + RUR{ + "RUR", + "ロシア ルーブル (1991-1998)", + } + RWF{ + "RWF", + "ルワンダ フラン", + } + SAR{ + "SAR", + "サウジ リヤル", + } + SBD{ + "SBD", + "ソロモン諸島 ドル", + } + SCR{ + "SCR", + "セイシェル ルピー", + } + SDD{ + "SDD", + "スーダン ディナール", + } + SDP{ + "SDP", + "スーダン ポンド", + } + SEK{ + "SEK", + "スウェーデン クローナ", + } + SGD{ + "SGD", + "シンガポール ドル", + } + SHP{ + "SHP", + "セントヘレナ島 ポンド", + } + SIT{ + "SIT", + "スロベニア トラール", + } + SKK{ + "SKK", + "スロバキア コルナ", + } + SLL{ + "SLL", + "シエラレオネ レオン", + } + SOS{ + "SOS", + "ソマリア シリング", + } + SRG{ + "SRG", + "スリナム ギルダー", + } + STD{ + "STD", + "サントメ・プリンシペ ドブラ", + } + SUR{ + "SUR", + "ソ連 ルーブル", + } + SVC{ + "SVC", + "エルサルバドル コロン", + } + SYP{ + "SYP", + "シリア ポンド", + } + SZL{ + "SZL", + "スワジランド リランゲニ", + } + THB{ + "THB", + "タイ バーツ", + } + TJR{ + "TJR", + "タジキスタン ルーブル", + } + TJS{ + "TJS", + "タジキスタン ソモニ", + } + TMM{ + "TMM", + "トルクメニスタン マナト", + } + TND{ + "TND", + "チュニジア ディナール", + } + TOP{ + "TOP", + "トンガ パ・アンガ", + } + TPE{ + "TPE", + "ティモール エスクード", + } + TRL{ + "TRL", + "トルコ リラ", + } + TRY{ + "TRY", + "新トルコリラ", + } + TTD{ + "TTD", + "トリニダードトバゴ ドル", + } + TWD{ + "TWD", + "新台湾ドル", + } + TZS{ + "TZS", + "タンザニア シリング", + } + UAH{ + "UAH", + "ウクライナ グリブナ", + } + UAK{ + "UAK", + "ウクライナ カルボバネツ", + } + UGS{ + "UGS", + "ウガンダ シリング (1966-1987)", + } + UGX{ + "UGX", + "ウガンダ シリング", + } + USD{ + "$", + "米ドル", + } + USN{ + "USN", + "米ドル (翌日)", + } + USS{ + "USS", + "米ドル (当日)", + } + UYP{ + "UYP", + "ウルグアイ ペソ (1975-1993)", + } + UYU{ + "UYU", + "ウルグアイ ペソ", + } + UZS{ + "UZS", + "ウズベキスタン スム", + } + VEB{ + "VEB", + "ベネズエラ ボリバル", + } + VND{ + "đ", + "ベトナム ドン", + } + VUV{ + "VUV", + "バヌアツ バツ", + } + WST{ + "WST", + "西サモア タラ", + } + XAF{ + "XAF", + "CFA フラン BEAC", + } + XAU{ + "XAU", + "金", + } + XBA{ + "XBA", + "ヨーロッパ混合単位 (EURCO)", + } + XBB{ + "XBB", + "ヨーロッパ通貨単位 (EMU-6)", + } + XBC{ + "XBC", + "ヨーロッパ勘定単位 (EUA-9)", + } + XBD{ + "XBD", + "ヨーロッパ勘定単位 (EUA-17)", + } + XCD{ + "EC$", + "東カリブ ドル", + } + XDR{ + "XDR", + "特別引き出し権", + } + XEU{ + "XEU", + "ヨーロッパ通貨単位", + } + XFO{ + "XFO", + "フランス金フラン", + } + XFU{ + "XFU", + "フランス UIC フラン", + } + XOF{ + "XOF", + "CFA フラン BCEAO", + } + XPF{ + "XPF", + "CFP フラン", + } + YDD{ + "YDD", + "イエメン ディナール", + } + YER{ + "YER", + "イエメン リアル", + } + YUD{ + "YUD", + "ユーゴスラビア ディナール", + } + YUM{ + "YUM", + "ユーゴスラビア スーパー ディナール", + } + YUN{ + "YUN", + "ユーゴスラビア 新ディナール (YUN)", + } + ZAL{ + "ZAL", + "南アフリカ ランド (ZAL)", + } + ZAR{ + "ZAR", + "南アフリカ ランド", + } + ZRN{ + "ZRN", + "ザイール 新ザイール", + } + ZRZ{ + "ZRZ", + "ザイール ザイール", + } + ZWD{ + "ZWD", + "ジンバブエ ドル", + } + } + AuxExemplarCharacters{ + "[拼 錄 鳯]" + } + ExemplarCharacters{ + "[ゝ ゞ ヽ ヾ ぁァ あア ぃィ いイ ぅゥ うウ ヴ ぇェ えエ ぉォ おオ ヵ かカ がガ きキ ぎギ くク ぐグ ヶ けケ げゲ こコ ごゴ さ" + "サ ざザ しシ じジ すス ずズ せセ ぜゼ そソ ぞゾ たタ だダ ちチ ぢヂ っッ つツ づヅ てテ でデ とト どド なナ にニ ぬヌ ねネ のノ" + " はハ ばバ ぱパ ひヒ びビ ぴピ ふフ ぶブ ぷプ へヘ べベ ぺペ ほホ ぼボ ぽポ まマ みミ むム めメ もモ ゃャ やヤ ゅュ ゆユ ょョ " + "よヨ らラ りリ るル れレ ろロ ゎヮ わワ ゐヰ ゑヱ をヲ んン 亜 哀 愛 悪 握 圧 扱 安 暗 案 以 位 依 偉 囲 委 威 尉 意 慰 " + "易 為 異 移 維 緯 胃 衣 違 遺 医 井 域 育 一 壱 逸 稲 芋 印 員 因 姻 引 飲 院 陰 隠 韻 右 宇 羽 雨 渦 浦 運 雲 営 " + "影 映 栄 永 泳 英 衛 詠 鋭 液 疫 益 駅 悦 謁 越 閲 円 園 宴 延 援 沿 演 炎 煙 猿 縁 遠 鉛 塩 汚 凹 央 奥 往 応 押 " + "横 欧 殴 王 翁 黄 沖 億 屋 憶 乙 卸 恩 温 穏 音 下 化 仮 何 価 佳 加 可 嘉 夏 嫁 家 寡 科 暇 果 架 歌 河 火 禍 稼 " + "箇 花 荷 華 菓 課 貨 過 蚊 我 画 芽 賀 雅 餓 介 会 解 回 塊 壊 快 怪 悔 懐 戒 拐 改 械 海 灰 界 皆 絵 開 階 貝 劾 " + "外 害 慨 概 涯 街 該 垣 嚇 各 拡 格 核 殻 獲 確 穫 覚 角 較 郭 閣 隔 革 学 岳 楽 額 掛 潟 割 喝 括 活 渇 滑 褐 轄 " + "且 株 刈 乾 冠 寒 刊 勘 勧 巻 喚 堪 完 官 寛 干 幹 患 感 慣 憾 換 敢 棺 款 歓 汗 漢 環 甘 監 看 管 簡 緩 缶 肝 艦 " + "観 貫 還 鑑 間 閑 関 陥 韓 館 丸 含 岸 眼 岩 頑 顔 願 企 危 喜 器 基 奇 寄 岐 希 幾 忌 揮 机 旗 既 期 棋 棄 機 帰 " + "気 汽 祈 季 紀 規 記 貴 起 軌 輝 飢 騎 鬼 亀 偽 儀 宜 戯 技 擬 欺 犠 疑 義 議 菊 吉 喫 詰 却 客 脚 虐 逆 丘 久 休 " + "及 吸 宮 弓 急 救 朽 求 泣 球 究 窮 級 糾 給 旧 牛 去 居 巨 拒 拠 挙 虚 許 距 漁 魚 亨 享 京 供 競 共 凶 協 叫 境 " + "峡 強 恐 恭 挟 教 橋 況 狂 狭 矯 胸 脅 興 郷 鏡 響 驚 仰 凝 暁 業 局 曲 極 玉 勤 均 斤 琴 禁 筋 緊 菌 襟 謹 近 金 " + "吟 銀 九 句 区 苦 駆 具 愚 虞 空 偶 遇 隅 屈 掘 靴 繰 桑 勲 君 薫 訓 群 軍 郡 係 傾 刑 兄 啓 型 契 形 径 恵 慶 憩 " + "掲 携 敬 景 渓 系 経 継 茎 蛍 計 警 軽 鶏 芸 迎 鯨 劇 撃 激 傑 欠 決 潔 穴 結 血 月 件 倹 健 兼 券 剣 圏 堅 嫌 建 " + "憲 懸 検 権 犬 献 研 絹 県 肩 見 謙 賢 軒 遣 険 顕 験 元 原 厳 幻 弦 減 源 玄 現 言 限 個 古 呼 固 孤 己 庫 弧 戸 " + "故 枯 湖 誇 雇 顧 鼓 五 互 午 呉 娯 後 御 悟 碁 語 誤 護 交 侯 候 光 公 功 効 厚 口 向 后 坑 好 孔 孝 工 巧 幸 広 " + "康 弘 恒 慌 抗 拘 控 攻 更 校 構 江 洪 港 溝 甲 皇 硬 稿 紅 絞 綱 耕 考 肯 航 荒 行 衡 講 貢 購 郊 酵 鉱 鋼 降 項 " + "香 高 剛 号 合 拷 豪 克 刻 告 国 穀 酷 黒 獄 腰 骨 込 今 困 墾 婚 恨 懇 昆 根 混 紺 魂 佐 唆 左 差 査 砂 詐 鎖 座 " + "債 催 再 最 妻 宰 彩 才 採 栽 歳 済 災 砕 祭 斎 細 菜 裁 載 際 剤 在 材 罪 財 坂 咲 崎 作 削 搾 昨 策 索 錯 桜 冊 " + "刷 察 撮 擦 札 殺 雑 皿 三 傘 参 山 惨 散 桟 産 算 蚕 賛 酸 暫 残 仕 伺 使 刺 司 史 嗣 四 士 始 姉 姿 子 市 師 志 " + "思 指 支 施 旨 枝 止 死 氏 祉 私 糸 紙 紫 肢 脂 至 視 詞 詩 試 誌 諮 資 賜 雌 飼 歯 事 似 侍 児 字 寺 慈 持 時 次 " + "滋 治 璽 磁 示 耳 自 辞 式 識 軸 七 執 失 室 湿 漆 疾 質 実 芝 舎 写 射 捨 赦 斜 煮 社 者 謝 車 遮 蛇 邪 借 勺 尺 " + "爵 酌 釈 若 寂 弱 主 取 守 手 朱 殊 狩 珠 種 趣 酒 首 儒 受 寿 授 樹 需 囚 収 周 宗 就 州 修 愁 拾 秀 秋 終 習 臭 " + "舟 衆 襲 週 酬 集 醜 住 充 十 従 柔 汁 渋 獣 縦 重 銃 叔 宿 淑 祝 縮 粛 塾 熟 出 術 述 俊 春 瞬 准 循 旬 殉 準 潤 " + "盾 純 巡 遵 順 処 初 所 暑 庶 緒 署 書 諸 助 叙 女 序 徐 除 傷 償 勝 匠 升 召 商 唱 奨 宵 将 小 少 尚 床 彰 承 抄 " + "招 掌 昇 昌 昭 晶 松 沼 消 渉 焼 焦 照 症 省 硝 礁 祥 称 章 笑 粧 紹 肖 衝 訟 証 詔 詳 象 賞 鐘 障 上 丈 乗 冗 剰 " + "城 場 壌 嬢 常 情 条 浄 状 畳 蒸 譲 醸 錠 嘱 飾 植 殖 織 職 色 触 食 辱 伸 信 侵 唇 娠 寝 審 心 慎 振 新 森 浸 深 " + "申 真 神 紳 臣 薪 親 診 身 辛 進 針 震 人 仁 刃 尋 甚 尽 迅 陣 酢 図 吹 垂 帥 推 水 炊 睡 粋 衰 遂 酔 錘 随 髄 崇 " + "数 枢 据 杉 澄 寸 世 瀬 畝 是 制 勢 姓 征 性 成 政 整 星 晴 正 清 牲 生 盛 精 聖 声 製 西 誠 誓 請 逝 青 静 斉 税 " + "隻 席 惜 斥 昔 析 石 積 籍 績 責 赤 跡 切 拙 接 摂 折 設 窃 節 説 雪 絶 舌 仙 先 千 占 宣 専 川 戦 扇 栓 泉 浅 洗 " + "染 潜 旋 線 繊 船 薦 践 選 遷 銭 銑 鮮 前 善 漸 然 全 禅 繕 塑 措 疎 礎 祖 租 粗 素 組 訴 阻 僧 創 双 倉 喪 壮 奏 " + "層 想 捜 掃 挿 操 早 曹 巣 槽 燥 争 相 窓 総 草 荘 葬 藻 装 走 送 遭 霜 騒 像 増 憎 臓 蔵 贈 造 促 側 則 即 息 束 " + "測 足 速 俗 属 賊 族 続 卒 存 孫 尊 損 村 他 多 太 堕 妥 惰 打 駄 体 対 耐 帯 待 怠 態 替 泰 滞 胎 袋 貸 退 逮 隊 " + "代 台 大 第 題 滝 卓 宅 択 拓 沢 濯 託 濁 諾 但 達 奪 脱 棚 谷 丹 単 嘆 担 探 淡 炭 短 端 胆 誕 鍛 団 壇 弾 断 暖 " + "段 男 談 値 知 地 恥 池 痴 稚 置 致 遅 築 畜 竹 蓄 逐 秩 窒 茶 嫡 着 中 仲 宙 忠 抽 昼 柱 注 虫 衷 鋳 駐 著 貯 丁 " + "兆 帳 庁 弔 張 彫 徴 懲 挑 朝 潮 町 眺 聴 脹 腸 調 超 跳 長 頂 鳥 勅 直 朕 沈 珍 賃 鎮 陳 津 墜 追 痛 通 塚 漬 坪 " + "釣 亭 低 停 偵 貞 呈 堤 定 帝 底 庭 廷 弟 抵 提 禎 程 締 艇 訂 逓 邸 泥 摘 敵 滴 的 笛 適 哲 徹 撤 迭 鉄 典 天 展 " + "店 添 転 点 伝 殿 田 電 吐 塗 徒 斗 渡 登 途 都 努 度 土 奴 怒 倒 党 冬 凍 刀 唐 塔 島 悼 投 搭 東 桃 棟 盗 湯 灯 " + "当 痘 等 答 筒 糖 統 到 討 謄 豆 踏 逃 透 陶 頭 騰 闘 働 動 同 堂 導 洞 童 胴 道 銅 峠 匿 得 徳 特 督 篤 毒 独 読 " + "凸 突 届 屯 豚 曇 鈍 内 縄 南 軟 難 二 尼 弐 肉 日 乳 入 如 尿 任 妊 忍 認 寧 猫 熱 年 念 燃 粘 悩 濃 納 能 脳 農 " + "把 覇 波 派 破 婆 馬 俳 廃 拝 排 敗 杯 背 肺 輩 配 倍 培 媒 梅 買 売 賠 陪 伯 博 拍 泊 白 舶 薄 迫 漠 爆 縛 麦 箱 " + "肌 畑 八 鉢 発 髪 伐 罰 抜 閥 伴 判 半 反 帆 搬 板 版 犯 班 畔 繁 般 藩 販 範 煩 頒 飯 晩 番 盤 蛮 卑 否 妃 彼 悲 " + "扉 批 披 比 泌 疲 皮 碑 秘 罷 肥 被 費 避 非 飛 備 尾 微 美 鼻 匹 必 筆 姫 百 俵 標 氷 漂 票 表 評 描 病 秒 苗 品 " + "浜 貧 賓 頻 敏 瓶 不 付 夫 婦 富 布 府 怖 扶 敷 普 浮 父 符 腐 膚 譜 負 賦 赴 附 侮 武 舞 部 封 風 伏 副 復 幅 服 " + "福 腹 複 覆 払 沸 仏 物 分 噴 墳 憤 奮 粉 紛 雰 文 聞 丙 併 兵 塀 幣 平 弊 柄 並 閉 陛 米 壁 癖 別 偏 変 片 編 辺 " + "返 遍 便 勉 弁 保 舗 捕 歩 補 穂 募 墓 慕 暮 母 簿 倣 俸 包 報 奉 宝 峰 崩 抱 放 方 法 泡 砲 縫 胞 芳 褒 訪 豊 邦 " + "飽 乏 亡 傍 剖 坊 妨 帽 忘 忙 房 暴 望 某 棒 冒 紡 肪 膨 謀 貿 防 北 僕 墨 撲 朴 牧 没 堀 奔 本 翻 凡 盆 摩 磨 魔 " + "麻 埋 妹 枚 毎 幕 膜 又 抹 末 繭 万 慢 満 漫 味 未 魅 岬 密 脈 妙 民 眠 務 夢 無 矛 霧 婿 娘 名 命 明 盟 迷 銘 鳴 " + "滅 免 綿 面 模 茂 妄 毛 猛 盲 網 耗 木 黙 目 戻 問 紋 門 匁 夜 野 矢 厄 役 約 薬 訳 躍 柳 愉 油 癒 諭 輸 唯 優 勇 " + "友 幽 悠 憂 有 猶 由 裕 誘 遊 郵 雄 融 夕 予 余 与 誉 預 幼 容 庸 揚 揺 擁 曜 様 洋 溶 用 窯 羊 葉 要 謡 踊 陽 養 " + "抑 欲 浴 翌 翼 羅 裸 来 頼 雷 絡 落 酪 乱 卵 欄 濫 覧 利 吏 履 理 痢 裏 里 離 陸 律 率 立 略 流 留 硫 粒 隆 竜 慮 " + "旅 虜 了 僚 両 寮 料 涼 猟 療 糧 良 量 陵 領 力 緑 倫 厘 林 臨 輪 隣 塁 涙 累 類 令 例 冷 励 礼 鈴 隷 零 霊 麗 齢 " + "暦 歴 列 劣 烈 裂 廉 恋 練 連 錬 炉 路 露 労 廊 朗 楼 浪 漏 老 郎 六 禄 録 論 和 話 賄 惑 枠 湾 腕 祚 雉]" + } + Keys{ + calendar{"暦法"} + collation{"照合"} + currency{"通貨"} + } + Languages{ + aa{"アファル語"} + ab{"アブハズ語"} + ace{"アチェー語"} + ach{"アチョリ語"} + ada{"アダングメ語"} + ady{"アディゲ語"} + ae{"アヴェスタ語"} + af{"アフリカーンス語"} + afa{"セム・ハム諸語"} + afh{"アフリヒリ語"} + ain{"アイヌ語"} + ak{"アカン語"} + akk{"アッカド語"} + ale{"アレウト語"} + alg{"アルゴンキアン語族"} + alt{"南アルタイ語"} + am{"アムハラ語"} + an{"アラゴン語"} + ang{"古代英語"} + apa{"アパッチ語族"} + ar{"アラビア語"} + arc{"アラム語"} + arn{"アラウカン語"} + arp{"アラパホー語"} + art{"人工諸語"} + arw{"アラワク語"} + as{"アッサム語"} + ast{"アストゥリアス語"} + ath{"アサパスカン語族"} + aus{"オーストラリア語族"} + av{"アヴァル語"} + awa{"アワディー語"} + ay{"アイマラ語"} + az{"アゼルバイジャン語"} + ba{"バシキール語"} + bad{"バンダ語"} + bai{"バミレケ語族"} + bal{"バルーチー語"} + ban{"バリ語"} + bas{"バサ語"} + bat{"バルト諸語"} + be{"ベラルーシ語"} + bej{"ベジャ語"} + bem{"ベンバ語"} + ber{"ベルベル諸語"} + bg{"ブルガリア語"} + bh{"ビハール語"} + bho{"ボージプリー語"} + bi{"ビスラマ語"} + bik{"ビコル語"} + bin{"ビニ語"} + bla{"シクシカ語"} + bm{"バンバラ語"} + bn{"ベンガル語"} + bnt{"バントゥ諸語"} + bo{"チベット語"} + br{"ブルトン語"} + bra{"ブラジ語"} + bs{"ボスニア語"} + btk{"バタク語"} + bua{"ブリヤート語"} + bug{"ブギ語"} + byn{"ビリン語"} + ca{"カタロニア語"} + cad{"カドー語"} + cai{"中米インディアン諸語"} + car{"カリブ語"} + cau{"コーカサス諸語"} + ce{"チェチェン語"} + ceb{"セブアノ語"} + cel{"ケルト諸語"} + ch{"チャモロ語"} + chb{"チブチャ語"} + chg{"チャガタイ語"} + chk{"チューク語"} + chm{"マリ語"} + chn{"ビーチ・ラ・マー 等"} + cho{"チョクトー語"} + chp{"チペワイアン語"} + chr{"チェロキー語"} + chy{"シャイアン語"} + cmc{"チャム語族"} + co{"コルシカ語"} + cop{"コプト語"} + cpe{"英語が基盤の混成語・混合語"} + cpf{"フランス語が基盤の混成語・混合語"} + cpp{"ポルトガル語が基盤の混成語・混合語"} + cr{"クリー語"} + crh{"クリミア・タタール語"} + crp{"その他の混成語・混合語"} + cs{"チェコ語"} + csb{"カシューブ語"} + cu{"教会スラブ語"} + cus{"クシュ諸語"} + cv{"チュヴァシュ語"} + cy{"ウェールズ語"} + da{"デンマーク語"} + dak{"ダコタ語"} + dar{"ダルガン語"} + day{"ダヤク語"} + de{"ドイツ語"} + del{"デラウェア語"} + den{"スレイビー語"} + dgr{"ドグリブ語"} + din{"ディンカ語"} + doi{"ドグリ語"} + dra{"ドラヴィダ諸語"} + dsb{"低ソルビア語"} + dua{"ドゥアラ語"} + dum{"中世オランダ語"} + dv{"ディベヒ語"} + dyu{"デゥウラ語"} + dz{"ゾンカ語"} + ee{"エウェ語"} + efi{"エフィック語"} + egy{"古代エジプト語"} + eka{"エカジュク語"} + el{"ギリシャ語"} + elx{"エラム語"} + en{"英語"} + enm{"中世英語"} + eo{"エスペラント語"} + es{"スペイン語"} + et{"エストニア語"} + eu{"バスク語"} + ewo{"エウォンド語"} + fa{"ペルシア語"} + fan{"ファング語"} + fat{"ファンティー語"} + ff{"フラニ語"} + fi{"フィンランド語"} + fil{"フィリピノ語"} + fiu{"フィン・ウゴル諸語"} + fj{"フィジー語"} + fo{"フェロー語"} + fon{"フォン語"} + fr{"フランス語"} + frm{"中期フランス語"} + fro{"古フランス語"} + fur{"フリウリ語"} + fy{"フリジア語"} + ga{"アイルランド語"} + gaa{"ガ語"} + gay{"ガヨ語"} + gba{"バヤ語"} + gd{"スコットランド・ゲール語"} + gem{"ゲルマン諸語"} + gez{"ゲエズ語"} + gil{"キリバス語"} + gl{"ガリシア語"} + gmh{"中高ドイツ語"} + gn{"グアラニー語"} + goh{"古高ドイツ語"} + gon{"ゴーンディー語"} + gor{"ゴロンタロ語"} + got{"ゴート語"} + grb{"グレボ語"} + grc{"古代ギリシャ語"} + gu{"グジャラート語"} + gv{"マン島語"} + gwi{"グウィッチン語"} + ha{"ハウサ語"} + hai{"ハイダ語"} + haw{"ハワイ語"} + he{"ヘブライ語"} + hi{"ヒンディー語"} + hil{"ヒリガイノン語"} + him{"ヒマチャル語"} + hit{"ヒッタイト語"} + hmn{"フモン語"} + ho{"ヒリモトゥ語"} + hr{"クロアチア語"} + hsb{"上ソルビア語"} + ht{"ハイチ語"} + hu{"ハンガリー語"} + hup{"アタパスカ語"} + hy{"アルメニア語"} + hz{"ヘレロ語"} + ia{"インターリングア語"} + iba{"イバン語"} + id{"インドネシア語"} + ie{"インターリング語"} + ig{"イボ語"} + ii{"四川イ語"} + ijo{"イジョー語"} + ik{"イヌピアック語"} + ilo{"イロカノ語"} + inc{"インド諸語"} + ine{"印欧諸語"} + inh{"イングシ語"} + io{"イド語"} + ira{"イラン語"} + iro{"イロコイ語族"} + is{"アイスランド語"} + it{"イタリア語"} + iu{"イヌクウティトット語"} + ja{"日本語"} + jpr{"ユダヤ・ペルシア語"} + jrb{"ユダヤ・アラビア語"} + jv{"ジャワ語"} + ka{"グルジア語"} + kaa{"カラ・カルパク語"} + kab{"カビル語"} + kac{"カチン語"} + kam{"カンバ語"} + kar{"カレン語"} + kaw{"カウィ語"} + kbd{"カバルド語"} + kg{"コンゴ語"} + kha{"カシ語"} + khi{"コイサン諸語"} + kho{"コータン語"} + ki{"キクユ語"} + kj{"クアニャマ語"} + kk{"カザフ語"} + kl{"グリーンランド語"} + km{"クメール語"} + kmb{"キンブンドゥ語"} + kn{"カンナダ語"} + ko{"韓国語"} + kok{"コンカニ語"} + kos{"コシャエ語"} + kpe{"クペレ語"} + kr{"カヌリ語"} + krc{"カラチャイ語"} + kro{"クルー語"} + kru{"クルク語"} + ks{"カシミール語"} + ku{"クルド語"} + kum{"クムク語"} + kut{"クテナイ語"} + kv{"コミ語"} + kw{"コーンウォール語"} + ky{"キルギス語"} + la{"ラテン語"} + lad{"ラジノ語"} + lah{"ラフンダー語"} + lam{"ランバ語"} + lb{"ルクセンブルク語"} + lez{"レズギ語"} + lg{"ガンダ語"} + li{"リンブルフ語"} + ln{"リンガラ語"} + lo{"ラオ語"} + lol{"モンゴ語"} + loz{"ロズィ語"} + lt{"リトアニア語"} + lu{"ルバ・カタンガ語"} + lua{"ルバ・ルルア語"} + lui{"ルイセーニョ語"} + lun{"ルンダ語"} + luo{"ルオ語"} + lus{"ルシャイ語"} + lv{"ラトビア語"} + mad{"マドゥラ語"} + mag{"マガヒー語"} + mai{"マイティリー語"} + mak{"マカッサル語"} + man{"マンディンゴ語"} + map{"オーストロネシア諸語"} + mas{"マサイ語"} + mdf{"モクシャ語"} + mdr{"マンダル語"} + men{"メンデ語"} + mg{"マダガスカル語"} + mga{"中期アイルランド語"} + mh{"マーシャル語"} + mi{"マオリ語"} + mic{"ミクマク語"} + min{"ミナンカバウ語"} + mis{"その他の言語"} + mk{"マケドニア語"} + mkh{"モン・クメール諸語"} + ml{"マラヤーラム語"} + mn{"モンゴル語"} + mnc{"満州語"} + mni{"マニプル語"} + mno{"マノボ語族"} + mo{"モルダビア語"} + moh{"モーホーク語"} + mos{"モシ語"} + mr{"マラーティー語"} + ms{"マレー語"} + mt{"マルタ語"} + mun{"ムンダ語族"} + mus{"クリーク語"} + mwl{"ミランダ語"} + mwr{"マールワーリー語"} + my{"ビルマ語"} + myn{"マヤ語族"} + myv{"エルジャ語"} + na{"ナウル語"} + nah{"ナワトル語"} + nai{"北米インディアン諸語"} + nap{"ナポリ語"} + nb{"ノルウェー語 (ブークモール)"} + nd{"北ンデベレ語"} + nds{"低地ドイツ語、低地サクソン語"} + ne{"ネパール語"} + new{"ネワール語"} + ng{"ンドンガ語"} + nia{"ニアス語"} + nic{"ニジェール・コルドファン諸語"} + niu{"ニウーエイ語"} + nl{"オランダ語"} + nn{"ノルウェー語 (ニーノシュク)"} + no{"ノルウェー語"} + nog{"ノガイ語"} + non{"古ノルド語"} + nr{"南ンデベレ語"} + nso{"北部ソト語"} + nub{"ヌビア語族"} + nv{"ナバホ語"} + nwc{"古典ネワール語"} + ny{"ニャンジャ語、チチェワ語、チェワ語"} + nym{"ニャムウェジ語"} + nyn{"ニャンコレ語"} + nyo{"ニョロ語"} + nzi{"ンゼマ語"} + oc{"オック語 (1500以降)、プロバンス語"} + oj{"オブジワ語"} + om{"オロモ語"} + or{"オリヤー語"} + os{"オセト語"} + osa{"オセージ語"} + ota{"オスマントルコ語"} + oto{"オトミ語族"} + pa{"パンジャブ語"} + paa{"パプア諸語"} + pag{"パンガシナン語"} + pal{"パフラヴィ語"} + pam{"パンパンガ語"} + pap{"パピアメント語"} + pau{"パラオ語"} + peo{"古代ペルシア語"} + phi{"フィリピン諸語"} + phn{"フェニキア語"} + pi{"パーリ語"} + pl{"ポーランド語"} + pon{"ポンペイ語"} + pra{"プラークリット語族"} + pro{"古期プロバンス語"} + ps{"パシュトゥー語"} + pt{"ポルトガル語"} + qu{"ケチュア語"} + raj{"ラージャスターン語"} + rap{"ラパヌイ語"} + rar{"ラロトガ語"} + rm{"レト=ロマン語"} + rn{"ルンディ語"} + ro{"ルーマニア語"} + roa{"ロマンス諸語"} + rom{"ロマーニー語"} + ru{"ロシア語"} + rup{"アルーマニア語"} + rw{"ルワンダ語"} + sa{"サンスクリット語"} + sad{"サンダウェ語"} + sah{"ヤクート語"} + sai{"南米インディアン諸語"} + sal{"セイリッシュ語族"} + sam{"サマリア・アラム語"} + sas{"ササク語"} + sat{"サンターリー語"} + sc{"サルデーニャ語"} + scn{"シチリア語"} + sco{"スコットランド語"} + sd{"シンド語"} + se{"北サーミ語"} + sel{"セリクプ語"} + sem{"セム諸語"} + sg{"サンゴ語"} + sga{"古期アイルランド語"} + sgn{"手まね言語"} + sh{"セルボ=クロアチア語"} + shn{"シャン語"} + si{"シンハラ語"} + sid{"シダモ語"} + sio{"スー語族"} + sit{"シナ・チベット諸語"} + sk{"スロバキア語"} + sl{"スロベニア語"} + sla{"スラブ諸語"} + sm{"サモア語"} + sma{"南サーミ語"} + smi{"サーミ諸語"} + smj{"ルレ・サーミ語"} + smn{"イナリ・サーミ語"} + sms{"スコルト・サーミ語"} + sn{"ショナ語"} + snk{"ソニンケ語"} + so{"ソマリ語"} + sog{"ソグド語"} + son{"ソンガイ語"} + sq{"アルバニア語"} + sr{"セルビア語"} + srn{"スリナム語"} + srr{"セレル語"} + ss{"シスワティ語"} + ssa{"ナイル・サハラ諸語"} + st{"南部ソト語"} + su{"スンダ語"} + suk{"スクマ語"} + sus{"スス語"} + sux{"シュメール語"} + sv{"スウェーデン語"} + sw{"スワヒリ語"} + syr{"シリア語"} + ta{"タミール語"} + tai{"タイ諸語"} + te{"テルグ語"} + tem{"テムネ語"} + ter{"テレーノ語"} + tet{"テトゥン語"} + tg{"タジク語"} + th{"タイ語"} + ti{"ティグリニア語"} + tig{"ティグレ語"} + tk{"トルクメン語"} + tkl{"トケラウ語"} + tl{"タガログ語"} + tlh{"クリンゴン語"} + tli{"トリンギット語"} + tmh{"タマシェク語"} + tn{"ツワナ語"} + to{"トンガ語"} + tog{"トンガ語 (ニアサ)"} + tpi{"トク・ピシン語"} + tr{"トルコ語"} + ts{"ツォンガ語"} + tsi{"チムシュ語"} + tt{"タタール語"} + tum{"トゥンブカ語"} + tup{"トゥピ語族"} + tut{"アルタイ諸語"} + tvl{"ツバル語"} + tw{"トウィ語"} + ty{"タヒチ語"} + tyv{"トゥヴァ語"} + udm{"ウドムルト語"} + ug{"ウイグル語"} + uga{"ウガリト語"} + uk{"ウクライナ語"} + umb{"ウンブンドゥ語"} + ur{"ウルドゥー語"} + uz{"ウズベク語"} + vai{"ヴァイ語"} + ve{"ベンダ語"} + vi{"ベトナム語"} + vo{"ボラピュク語"} + vot{"ボート語"} + wa{"ワロン語"} + wak{"ワカシ語族"} + wal{"ワッラモ語"} + war{"ワライ語"} + was{"ワショ語"} + wen{"ソルビア語族"} + wo{"ウォロフ語"} + xal{"カルムイク語"} + xh{"コサ語"} + yao{"ヤオ語"} + yap{"ヤップ語"} + yi{"イディッシュ語"} + yo{"ヨルバ語"} + ypk{"ユピック語族"} + za{"チワン語"} + zap{"ザポテック語"} + zen{"ゼナガ語"} + zh{"中国語"} + znd{"ザンデ語"} + zu{"ズールー語"} + zun{"ズニ語"} + } + LocaleScript{ + "Kana", + "Hira", + "Hani", + } + Scripts{ + Arab{"アラビア文字"} + Armn{"アルメニア文字"} + Bali{"バリ文字"} + Batk{"バタク文字"} + Beng{"ベンガル文字"} + Blis{"ブリスシンボル"} + Bopo{"注音字母"} + Brah{"ブラーフミー文字"} + Brai{"ブライユ点字"} + Bugi{"ブギス文字"} + Buhd{"ブヒッド文字"} + Cans{"統合カナダ先住民記号"} + Cham{"チャム文字"} + Cher{"チェロキー文字"} + Cirt{"キアス文字"} + Copt{"コプト文字"} + Cprt{"キプロス文字"} + Cyrl{"キリル文字"} + Cyrs{"キリル文字 (古代教会スラブ語の文字)"} + Deva{"デーバナーガリー文字"} + Dsrt{"デセレット文字"} + Egyd{"エジプト民衆文字"} + Egyh{"エジプト神官文字"} + Egyp{"エジプト聖刻文字"} + Ethi{"エチオピア文字"} + Geor{"グルジア文字"} + Glag{"グラゴール文字"} + Goth{"ゴート文字"} + Grek{"ギリシャ文字"} + Gujr{"グジャラート文字"} + Guru{"グルムキー文字"} + Hang{"ハングル"} + Hani{"漢字"} + Hano{"ハヌノオ文字"} + Hans{"簡体字"} + Hant{"繁体字"} + Hebr{"ヘブライ文字"} + Hira{"ひらがな"} + Hmng{"パハウ・フモン文字"} + Hrkt{"カタカナとひらがな"} + Hung{"古代ハンガリー文字"} + Inds{"インダス文字 (ハラッパ文字)"} + Java{"ジャワ文字"} + Kana{"カタカナ"} + Khar{"カローシュティー文字"} + Khmr{"クメール文字"} + Knda{"カンナダ文字"} + Laoo{"ラオ文字"} + Latn{"ラテン文字"} + Lepc{"レプチャ文字 (ロン文字)"} + Limb{"リンブ文字"} + Linb{"線文字B"} + Mand{"マンダ文字"} + Maya{"マヤ象形文字"} + Mero{"メロエ文字"} + Mlym{"マラヤーラム文字"} + Mong{"モンゴル文字"} + Mymr{"ミャンマー文字"} + Ogam{"オガム文字"} + Orkh{"オルホン文字"} + Orya{"オリヤー文字"} + Osma{"オスマニア文字"} + Phag{"パスパ文字"} + Phnx{"フェニキア文字"} + Roro{"ロンゴロンゴ文字"} + Runr{"ルーン文字"} + Sara{"サラティ文字"} + Shaw{"ショー文字"} + Sinh{"シンハラ文字"} + Sylo{"シロティ・ナグリ文字"} + Syrc{"シリア文字"} + Syre{"シリア文字 (エストランゲロ文字)"} + Syrj{"シリア文字 (東方シリア文字)"} + Syrn{"シリア文字 (西方シリア文字)"} + Tagb{"タグバンワ文字"} + Tale{"タイレ文字"} + Talu{"新タイ・ルー文字"} + Taml{"タミール文字"} + Telu{"テルグ文字"} + Teng{"テングワール文字"} + Tfng{"ティフナグ文字 (ベルベル文字)"} + Tglg{"タガログ文字"} + Thaa{"ターナ文字"} + Thai{"タイ文字"} + Tibt{"チベット文字"} + Ugar{"ウガリト文字"} + Vaii{"ヴァイ文字"} + Xpeo{"古代ペルシア文字"} + Yiii{"イ文字"} + Zxxx{"口承言語のコード"} + Zyyy{"共通コード"} + } + Types{ + calendar{ + buddhist{"タイ仏教暦"} + chinese{"中国暦"} + gregorian{"西暦 (グレゴリオ暦)"} + hebrew{"ユダヤ暦"} + islamic{"イスラム暦"} + islamic-civil{"太陽イスラム暦"} + japanese{"和暦"} + } + collation{ + big5han{"繁体字中国語 (Big5)"} + gb2312han{"簡体字中国語 (GB2312)"} + phonebook{"電話帳方式"} + stroke{"画数順"} + traditional{"旧式"} + } + } + Variants{ + NEDIS{"ナティゾーネ方言"} + POLYTONI{"ポリトニック"} + POSIX{"コンピュータ"} + REVISED{"改訂版"} + } + Version{"1.89"} + calendar{ + gregorian{ + AmPmMarkers{ + "午前", + "午後", + } + DateTimePatterns{ + "H'時'mm'分'ss'秒'z", + "H:mm:ss:z", + "H:mm:ss", + "H:mm", + "yyyy'年'M'月'd'日'EEEE", + "yyyy'年'M'月'd'日'", + "yyyy/MM/dd", + "yy/MM/dd", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "日", + "月", + "火", + "水", + "木", + "金", + "土", + } + wide{ + "日曜日", + "月曜日", + "火曜日", + "水曜日", + "木曜日", + "金曜日", + "土曜日", + } + } + stand-alone{ + narrow{ + "日", + "月", + "火", + "水", + "木", + "金", + "土", + } + } + } + eras{ + abbreviated{ + "紀元前", + "西暦", + } + wide{ + "紀元前", + "西暦", + } + } + monthNames{ + format{ + abbreviated{ + "1 月", + "2 月", + "3 月", + "4 月", + "5 月", + "6 月", + "7 月", + "8 月", + "9 月", + "10 月", + "11 月", + "12 月", + } + wide{ + "1 月", + "2 月", + "3 月", + "4 月", + "5 月", + "6 月", + "7 月", + "8 月", + "9 月", + "10 月", + "11 月", + "12 月", + } + } + } + quarters{ + format{ + wide{ + "第 1 四半期", + "第 2 四半期", + "第 3 四半期", + "第 4 四半期", + } + } + } + } + japanese{ + DateTimePatterns{ + "H'時'mm'分'ss'秒'z", + "H:mm:ss:z", + "H:mm:ss", + "H:mm", + "Gy'年'M'月'd'日'EEEE", + "Gy'年'M'月'd'日'", + "G yy/MM/dd", + "G yy/MM/dd", + "{1} {0}", + } + eras{ + abbreviated{ + "大化", + "白雉", + "白鳯", + "朱鳥", + "大宝", + "慶雲", + "和銅", + "霊亀", + "養老", + "神亀", + "天平", + "天平感宝", + "天平勝宝", + "天平宝字", + "天平神護", + "神護景雲", + "宝亀", + "天応", + "延暦", + "大同", + "弘仁", + "天長", + "承和", + "嘉祥", + "仁寿", + "斉衡", + "天安", + "貞観", + "元慶", + "仁和", + "寛平", + "昌泰", + "延喜", + "延長", + "承平", + "天慶", + "天暦", + "天徳", + "応和", + "康保", + "安和", + "天禄", + "天延", + "貞元", + "天元", + "永観", + "寛和", + "永延", + "永祚", + "正暦", + "長徳", + "長保", + "寛弘", + "長和", + "寛仁", + "治安", + "万寿", + "長元", + "長暦", + "長久", + "寛徳", + "永承", + "天喜", + "康平", + "治暦", + "延久", + "承保", + "承暦", + "永保", + "応徳", + "寛治", + "嘉保", + "永長", + "承徳", + "康和", + "長治", + "嘉承", + "天仁", + "天永", + "永久", + "元永", + "保安", + "天治", + "大治", + "天承", + "長承", + "保延", + "永治", + "康治", + "天養", + "久安", + "仁平", + "久寿", + "保元", + "平治", + "永暦", + "応保", + "長寛", + "永万", + "仁安", + "嘉応", + "承安", + "安元", + "治承", + "養和", + "寿永", + "元暦", + "文治", + "建久", + "正治", + "建仁", + "元久", + "建永", + "承元", + "建暦", + "建保", + "承久", + "貞応", + "元仁", + "嘉禄", + "安貞", + "寛喜", + "貞永", + "天福", + "文暦", + "嘉禎", + "暦仁", + "延応", + "仁治", + "寛元", + "宝治", + "建長", + "康元", + "正嘉", + "正元", + "文応", + "弘長", + "文永", + "建治", + "弘安", + "正応", + "永仁", + "正安", + "乾元", + "嘉元", + "徳治", + "延慶", + "応長", + "正和", + "文保", + "元応", + "元亨", + "正中", + "嘉暦", + "元徳", + "元弘", + "建武", + "延元", + "興国", + "正平", + "建徳", + "文中", + "天授", + "康暦", + "弘和", + "元中", + "至徳", + "嘉慶", + "康応", + "明徳", + "応永", + "正長", + "永享", + "嘉吉", + "文安", + "宝徳", + "享徳", + "康正", + "長禄", + "寛正", + "文正", + "応仁", + "文明", + "長享", + "延徳", + "明応", + "文亀", + "永正", + "大永", + "享禄", + "天文", + "弘治", + "永禄", + "元亀", + "天正", + "文禄", + "慶長", + "元和", + "寛永", + "正保", + "慶安", + "承応", + "明暦", + "万治", + "寛文", + "延宝", + "天和", + "貞享", + "元禄", + "宝永", + "正徳", + "享保", + "元文", + "寛保", + "延享", + "寛延", + "宝暦", + "明和", + "安永", + "天明", + "寛政", + "享和", + "文化", + "文政", + "天保", + "弘化", + "嘉永", + "安政", + "万延", + "文久", + "元治", + "慶応", + "明治", + "大正", + "昭和", + "平成", + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Africa:Bamako"{ + ec{"アフリカ/バマコ"} + } + "Africa:Casablanca"{ + ec{"カサブランカ"} + ld{"グリニッジ標準時"} + ls{"グリニッジ標準時"} + sd{"GMT"} + ss{"GMT"} + } + "Africa:Ceuta"{ + ec{"アフリカ/セウタ"} + } + "Africa:Kinshasa"{ + ec{"アフリカ/キンシャサ"} + } + "Africa:Lubumbashi"{ + ec{"アフリカ/ルブンバシ"} + } + "Africa:Timbuktu"{ + ec{"アフリカ/ティンブクトゥ"} + } + "America:Adak"{ + ec{"アメリカ/アダック"} + } + "America:Anchorage"{ + ec{"アンカレッジ"} + ld{"アラスカ夏時間"} + ls{"アラスカ標準時"} + sd{"AKDT"} + ss{"AKST"} + } + "America:Araguaina"{ + ec{"アメリカ/アラグァイナ"} + } + "America:Argentina:ComodRivadavia"{ + ec{"アメリカ/アルゼンチン/コモドロリバダビア"} + } + "America:Argentina:La_Rioja"{ + ec{"アメリカ/アルゼンチン/ラリオハ"} + } + "America:Argentina:Rio_Gallegos"{ + ec{"アメリカ/アルゼンチン/リオガイェゴス"} + } + "America:Argentina:San_Juan"{ + ec{"アメリカ/アルゼンチン/サンファン"} + } + "America:Argentina:Tucuman"{ + ec{"アメリカ/アルゼンチン/トゥクマン"} + } + "America:Argentina:Ushuaia"{ + ec{"アメリカ/アルゼンチン/ウスアイア"} + } + "America:Bahia"{ + ec{"アメリカ/バイア"} + } + "America:Belem"{ + ec{"アメリカ/ベレム"} + } + "America:Boa_Vista"{ + ec{"アメリカ/ボアビスタ"} + } + "America:Boise"{ + ec{"アメリカ/ボイシ"} + } + "America:Buenos_Aires"{ + ec{"アメリカ/ブエノスアイレス"} + } + "America:Cambridge_Bay"{ + ec{"アメリカ/ケンブリッジベイ"} + } + "America:Campo_Grande"{ + ec{"アメリカ/カンポグランデ"} + } + "America:Cancun"{ + ec{"アメリカ/カンクン"} + } + "America:Catamarca"{ + ec{"アメリカ/カタマルカ"} + } + "America:Chicago"{ + ec{"シカゴ"} + ld{"中部夏時間"} + ls{"中部標準時"} + sd{"CDT"} + ss{"CST"} + } + "America:Chihuahua"{ + ec{"アメリカ/チワワ"} + } + "America:Coral_Harbour"{ + ec{"コーラルハーバー"} + } + "America:Cordoba"{ + ec{"アメリカ/コルドバ"} + } + "America:Cuiaba"{ + ec{"アメリカ/クイアバ"} + } + "America:Danmarkshavn"{ + ec{"アメリカ/デンマークシャウン"} + } + "America:Dawson"{ + ec{"アメリカ/ドーソン"} + } + "America:Dawson_Creek"{ + ec{"アメリカ/ドーソンクリーク"} + } + "America:Denver"{ + ec{"デンバー"} + ld{"山地夏時間"} + ls{"山地標準時"} + sd{"MDT"} + ss{"MST"} + } + "America:Detroit"{ + ec{"アメリカ/デトロイト"} + } + "America:Edmonton"{ + ec{"アメリカ/エドモントン"} + } + "America:Eirunepe"{ + ec{"アメリカ/エイルネペ"} + } + "America:Fortaleza"{ + ec{"アメリカ/フォルタレザ"} + } + "America:Glace_Bay"{ + ec{"アメリカ/グレースベイ"} + } + "America:Godthab"{ + ec{"アメリカ/ゴッドホープ"} + } + "America:Goose_Bay"{ + ec{"アメリカ/グースベイ"} + } + "America:Guayaquil"{ + ec{"アメリカ/グアヤキル"} + } + "America:Halifax"{ + ec{"ハリファクス"} + ld{"大西洋夏時間"} + ls{"大西洋標準時"} + sd{"ADT"} + ss{"AST"} + } + "America:Hermosillo"{ + ec{"アメリカ/エルモシヨ"} + } + "America:Indiana:Knox"{ + ec{"アメリカ/ノクス"} + } + "America:Indiana:Marengo"{ + ec{"アメリカ/インディアナ/マレンゴ"} + } + "America:Indiana:Petersburg"{ + ec{"ピーターズバーグ"} + } + "America:Indiana:Vevay"{ + ec{"アメリカ/インディアナ/ビベー"} + } + "America:Indiana:Vincennes"{ + ec{"ビンセンス"} + } + "America:Indianapolis"{ + ec{"インディアナポリス"} + } + "America:Inuvik"{ + ec{"アメリカ/イヌヴィク"} + } + "America:Iqaluit"{ + ec{"アメリカ/イカルイット"} + } + "America:Jujuy"{ + ec{"アメリカ/フフイ"} + } + "America:Juneau"{ + ec{"アメリカ/ジュノー"} + } + "America:Kentucky:Monticello"{ + ec{"アメリカ/モンティチェロ"} + } + "America:Los_Angeles"{ + ec{"ロサンゼルス"} + ld{"太平洋夏時間"} + ls{"太平洋標準時"} + sd{"PDT"} + ss{"PST"} + } + "America:Louisville"{ + ec{"アメリカ/ルイスビル"} + } + "America:Maceio"{ + ec{"アメリカ/マセイオ"} + } + "America:Manaus"{ + ec{"アメリカ/マナウス"} + } + "America:Mazatlan"{ + ec{"アメリカ/マサトラン"} + } + "America:Mendoza"{ + ec{"アメリカ/メンドーサ"} + } + "America:Menominee"{ + ec{"アメリカ/メノミニー"} + } + "America:Merida"{ + ec{"アメリカ/メリダ"} + } + "America:Mexico_City"{ + ec{"アメリカ/メキシコシティー"} + } + "America:Moncton"{ + ec{"モンクトン"} + } + "America:Monterrey"{ + ec{"アメリカ/モンテレイ"} + } + "America:Montreal"{ + ec{"アメリカ/モントリオール"} + } + "America:New_York"{ + ec{"ニューヨーク"} + ld{"東部夏時間"} + ls{"東部標準時"} + sd{"EDT"} + ss{"EST"} + } + "America:Nipigon"{ + ec{"アメリカ/ニピゴン"} + } + "America:Nome"{ + ec{"アメリカ/ノーメ"} + } + "America:Noronha"{ + ec{"アメリカ/ノロニャ"} + } + "America:North_Dakota:Center"{ + ec{"アメリカ/ノースダコタ/センター"} + } + "America:Pangnirtung"{ + ec{"アメリカ/パンナータング"} + } + "America:Phoenix"{ + ec{"フェニックス"} + } + "America:Porto_Velho"{ + ec{"アメリカ/ポルトベリョ"} + } + "America:Rainy_River"{ + ec{"アメリカ/レイニーリバー"} + } + "America:Rankin_Inlet"{ + ec{"アメリカ/ランキン湾"} + } + "America:Recife"{ + ec{"アメリカ/レシフェ"} + } + "America:Regina"{ + ec{"アメリカ/レジャイナ"} + } + "America:Rio_Branco"{ + ec{"アメリカ/リオブランコ"} + } + "America:Santiago"{ + ec{"アメリカ/サンチアゴ"} + } + "America:Sao_Paulo"{ + ec{"アメリカ/サンパウロ"} + } + "America:Scoresbysund"{ + ec{"アメリカ/スコレスビスン"} + } + "America:Shiprock"{ + ec{"アメリカ/シップロック"} + } + "America:St_Johns"{ + ec{"セントジョンズ"} + ld{"ニューファンドランド島夏時間"} + ls{"ニューファンドランド島標準時"} + sd{"NDT"} + ss{"NST"} + } + "America:Swift_Current"{ + ec{"アメリカ/スウィフトカレント"} + } + "America:Thule"{ + ec{"アメリカ/チューレ"} + } + "America:Thunder_Bay"{ + ec{"アメリカ/サンダーベイ"} + } + "America:Tijuana"{ + ec{"アメリカ/ティフアナ"} + } + "America:Toronto"{ + ec{"アメリカ/トロント"} + } + "America:Vancouver"{ + ec{"アメリカ/バンクーバー"} + } + "America:Whitehorse"{ + ec{"アメリカ/ホワイトホース"} + } + "America:Winnipeg"{ + ec{"アメリカ/ウィニペグ"} + } + "America:Yakutat"{ + ec{"アメリカ/ヤクタット"} + } + "America:Yellowknife"{ + ec{"アメリカ/イエローナイフ"} + } + "Antarctica:Casey"{ + ec{"南極/ケーシー"} + } + "Antarctica:Davis"{ + ec{"南極/デービス"} + } + "Antarctica:DumontDUrville"{ + ec{"南極/デュモンデュルビル"} + } + "Antarctica:Mawson"{ + ec{"南極/モーソン"} + } + "Antarctica:McMurdo"{ + ec{"南極/マクムード"} + } + "Antarctica:Palmer"{ + ec{"南極/パーマー"} + } + "Antarctica:Rothera"{ + ec{"南極/ロデラ"} + } + "Antarctica:South_Pole"{ + ec{"南極/南極点"} + } + "Antarctica:Syowa"{ + ec{"南極/昭和基地"} + } + "Antarctica:Vostok"{ + ec{"南極/ボストーク"} + } + "Arctic:Longyearbyen"{ + ec{"北極/ロングイヤービーエン"} + } + "Asia:Almaty"{ + ec{"アジア/アルマトイ"} + } + "Asia:Anadyr"{ + ec{"アジア/アナジル"} + } + "Asia:Aqtau"{ + ec{"アジア/アクタウ"} + } + "Asia:Aqtobe"{ + ec{"アジア/アクトベ"} + } + "Asia:Choibalsan"{ + ec{"アジア/チョイバルサン"} + } + "Asia:Chongqing"{ + ec{"アジア/重慶"} + } + "Asia:Harbin"{ + ec{"アジア/ハルビン"} + } + "Asia:Hovd"{ + ec{"アジア/ホブド"} + } + "Asia:Irkutsk"{ + ec{"アジア/イルクーツク"} + } + "Asia:Jakarta"{ + ec{"アジア/ジャカルタ"} + } + "Asia:Jayapura"{ + ec{"アジア/ジャヤプラ"} + } + "Asia:Jerusalem"{ + ec{"エルサレム"} + ld{"イスラエル夏時間"} + ls{"イスラエル標準時"} + sd{"IDT"} + ss{"IST"} + } + "Asia:Kamchatka"{ + ec{"アジア/カムチャッカ"} + } + "Asia:Kashgar"{ + ec{"アジア/カシガル"} + } + "Asia:Krasnoyarsk"{ + ec{"アジア/クラスノヤルスク"} + } + "Asia:Kuala_Lumpur"{ + ec{"アジア/クアラルンプール"} + } + "Asia:Kuching"{ + ec{"アジア/クチン"} + } + "Asia:Magadan"{ + ec{"アジア/マガダン"} + } + "Asia:Makassar"{ + ec{"アジア/マカッサル"} + } + "Asia:Novosibirsk"{ + ec{"アジア/ノボシビルスク"} + } + "Asia:Omsk"{ + ec{"アジア/オムスク"} + } + "Asia:Oral"{ + ec{"アジア/オラル"} + } + "Asia:Pontianak"{ + ec{"アジア/ポンティアナク"} + } + "Asia:Qyzylorda"{ + ec{"アジア/キジルオルダ"} + } + "Asia:Sakhalin"{ + ec{"アジア/サハリン"} + } + "Asia:Shanghai"{ + ec{"上海"} + ld{"中国夏時間"} + ls{"中国標準時"} + ss{"CTT"} + } + "Asia:Tashkent"{ + ec{"アジア/タシケント"} + } + "Asia:Tokyo"{ + ec{"東京"} + ld{"日本夏時間"} + ls{"日本標準時"} + sd{"JDT"} + ss{"JST"} + } + "Asia:Ulaanbaatar"{ + ec{"アジア/ウランバートル"} + } + "Asia:Urumqi"{ + ec{"アジア/ウルムチ"} + } + "Asia:Vladivostok"{ + ec{"アジア/ウラジオストク"} + } + "Asia:Yakutsk"{ + ec{"アジア/ヤクーツク"} + } + "Asia:Yekaterinburg"{ + ec{"アジア/エカテリンブルグ"} + } + "Atlantic:Azores"{ + ec{"大西洋/アゾレス"} + } + "Atlantic:Canary"{ + ec{"大西洋/カナリー"} + } + "Atlantic:Jan_Mayen"{ + ec{"大西洋/ヤンマイエン"} + } + "Atlantic:Madeira"{ + ec{"大西洋/マデイラ"} + } + "Australia:Adelaide"{ + ec{"オーストラリア/アデレード"} + } + "Australia:Brisbane"{ + ec{"オーストラリア/ブリスベン"} + } + "Australia:Broken_Hill"{ + ec{"オーストラリア/ブロークンヒル"} + } + "Australia:Currie"{ + ec{"カリー"} + } + "Australia:Darwin"{ + ec{"オーストラリア/ダーウィン"} + } + "Australia:Hobart"{ + ec{"オーストラリア/ホバート"} + } + "Australia:Lindeman"{ + ec{"オーストラリア/リンデマン"} + } + "Australia:Lord_Howe"{ + ec{"オーストラリア/ロードハウ"} + } + "Australia:Melbourne"{ + ec{"オーストラリア/メルボルン"} + } + "Australia:Perth"{ + ec{"オーストラリア/パース"} + } + "Australia:Sydney"{ + ec{"オーストラリア/シドニー"} + } + "Europe:Belfast"{ + ec{"ヨーロッパ/ベルファスト"} + } + "Europe:Bucharest"{ + ec{"ブカレスト"} + ld{"東欧夏時間"} + ls{"東欧標準時"} + sd{"EEST"} + ss{"EET"} + } + "Europe:Kaliningrad"{ + ec{"ヨーロッパ/カリーニングラード"} + } + "Europe:Kiev"{ + ec{"ヨーロッパ/キエフ"} + } + "Europe:Lisbon"{ + ec{"ヨーロッパ/リスボン"} + } + "Europe:London"{ + ec{"ヨーロッパ/ロンドン"} + } + "Europe:Madrid"{ + ec{"ヨーロッパ/マドリード"} + } + "Europe:Moscow"{ + ec{"ヨーロッパ/モスクワ"} + } + "Europe:Paris"{ + ec{"パリ"} + ld{"中欧夏時間"} + ls{"中欧標準時"} + sd{"CEST"} + ss{"CET"} + } + "Europe:Samara"{ + ec{"ヨーロッパ/サマラ"} + } + "Europe:Simferopol"{ + ec{"ヨーロッパ/シンフェローポリ"} + } + "Europe:Uzhgorod"{ + ec{"ヨーロッパ/ウジゴロド"} + } + "Europe:Zaporozhye"{ + ec{"ヨーロッパ/ザポロージェ"} + } + "Pacific:Auckland"{ + ec{"太平洋/オークランド"} + } + "Pacific:Chatham"{ + ec{"太平洋/チャタム"} + } + "Pacific:Easter"{ + ec{"太平洋/イースター"} + } + "Pacific:Enderbury"{ + ec{"太平洋/エンダベリー"} + } + "Pacific:Galapagos"{ + ec{"太平洋/ガラパゴス"} + } + "Pacific:Gambier"{ + ec{"太平洋/ガンビア"} + } + "Pacific:Honolulu"{ + ec{"ホノルル"} + ld{"ハワイ夏時間"} + ls{"ハワイ標準時"} + sd{"HDT"} + ss{"HST"} + } + "Pacific:Johnston"{ + ec{"太平洋/ジョンストン"} + } + "Pacific:Kiritimati"{ + ec{"太平洋/キリティマティ"} + } + "Pacific:Kosrae"{ + ec{"太平洋/コシャエ"} + } + "Pacific:Kwajalein"{ + ec{"太平洋/クワゼリン"} + } + "Pacific:Majuro"{ + ec{"太平洋/マジュロ"} + } + "Pacific:Marquesas"{ + ec{"太平洋/マルケサス"} + } + "Pacific:Midway"{ + ec{"太平洋/ミッドウェー"} + } + "Pacific:Ponape"{ + ec{"太平洋/ポナペ"} + } + "Pacific:Tahiti"{ + ec{"太平洋/タヒチ"} + } + "Pacific:Tarawa"{ + ec{"太平洋/タラワ"} + } + "Pacific:Truk"{ + ec{"太平洋/トラック"} + } + "Pacific:Wake"{ + ec{"太平洋/ウェイク"} + } + "Pacific:Yap"{ + ec{"太平洋/ヤップ"} + } + fallbackFormat{"{0} ({1})時間"} + hourFormat{"+HHmm;-HHmm"} + regionFormat{"{0}時間"} + } +} diff --git a/icuSources/data/locales/ja_JP.txt b/icuSources/data/locales/ja_JP.txt index 7106c676..403438e9 100644 --- a/icuSources/data/locales/ja_JP.txt +++ b/icuSources/data/locales/ja_JP.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ja_JP.xml +// * Source File:/common/main/ja_JP.xml // * // *************************************************************************** ja_JP{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0;-¤#,##0", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/ja_JP_TRADITIONAL.txt b/icuSources/data/locales/ja_JP_TRADITIONAL.txt index 56b5102a..0a1b515b 100644 --- a/icuSources/data/locales/ja_JP_TRADITIONAL.txt +++ b/icuSources/data/locales/ja_JP_TRADITIONAL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** ja_JP_TRADITIONAL{ diff --git a/icuSources/data/locales/kk.txt b/icuSources/data/locales/kk.txt index c238ce76..cc171b9b 100644 --- a/icuSources/data/locales/kk.txt +++ b/icuSources/data/locales/kk.txt @@ -1,117 +1,114 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kk.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/kk.xml - */ -kk{ - Countries{ - KZ{"Қазақстан"} - } - Currencies{ - KZT{ - "тңг.", - "KZT", - } - } - ExemplarCharacters{"[а-яыэёіқңүұә]"} - Languages{ - kk{"Қазақ"} - } - LocaleScript{ - "Cyrl", - } - NumberElements{ - ",", - " ", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH:mm:ss z", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - "EEEE, d MMMM yyyy 'ж.'", - "d MMMM yyyy 'ж.'", - "dd.MM.yyyy", - "dd.MM.yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "жс.", - "дс.", - "сс.", - "ср.", - "бс.", - "жм.", - "сһ.", - } - wide{ - "жексені", - "дуйсенбі", - "сейсенбі", - "сәренбі", - "бейсенбі", - "жұма", - "сенбі", - } - } - } - monthNames{ - format{ - abbreviated{ - "қаң.", - "ақп.", - "нау.", - "сәу.", - "мам.", - "мау.", - "шіл.", - "там.", - "қыр.", - "қаз.", - "қар.", - "желт.", - } - wide{ - "қаңтар", - "ақпан", - "наурыз", - "сәуір", - "мамыр", - "маусым", - "шілде", - "тамыз", - "қыркүйек", - "қазан", - "қараша", - "желтоқсан", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/kk.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/kk.xml + */ +kk{ + AuxExemplarCharacters{"[һ]"} + Countries{ + KZ{"Қазақстан"} + } + Currencies{ + KZT{ + "тңг.", + "KZT", + } + } + ExemplarCharacters{"[а ә б-е ё ж-й і к қ л-н ң о-у ұ ү ф-я]"} + Languages{ + kk{"Қазақ"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.39"} + calendar{ + gregorian{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, d MMMM yyyy 'ж.'", + "d MMMM yyyy 'ж.'", + "dd.MM.yyyy", + "dd.MM.yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "жс.", + "дс.", + "сс.", + "ср.", + "бс.", + "жм.", + "сһ.", + } + wide{ + "жексені", + "дуйсенбі", + "сейсенбі", + "сәренбі", + "бейсенбі", + "жұма", + "сенбі", + } + } + } + monthNames{ + format{ + abbreviated{ + "қаң.", + "ақп.", + "нау.", + "сәу.", + "мам.", + "мау.", + "шіл.", + "там.", + "қыр.", + "қаз.", + "қар.", + "желт.", + } + wide{ + "қаңтар", + "ақпан", + "наурыз", + "сәуір", + "мамыр", + "маусым", + "шілде", + "тамыз", + "қыркүйек", + "қазан", + "қараша", + "желтоқсан", + } + } + } + } + } +} diff --git a/icuSources/data/locales/kk_KZ.txt b/icuSources/data/locales/kk_KZ.txt index 1b22761b..99e89884 100644 --- a/icuSources/data/locales/kk_KZ.txt +++ b/icuSources/data/locales/kk_KZ.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kk_KZ.xml +// * Source File:/common/main/kk_KZ.xml // * // *************************************************************************** kk_KZ{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "#,##0.00 ¤;-¤ #,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.31"} } diff --git a/icuSources/data/locales/kl.txt b/icuSources/data/locales/kl.txt index f550825d..e0da1052 100644 --- a/icuSources/data/locales/kl.txt +++ b/icuSources/data/locales/kl.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kl.xml +// * Source File:/common/main/kl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/kl.xml + * ICU source: /xml/main/kl.xml */ kl{ Countries{ @@ -19,7 +19,7 @@ kl{ "DKK", } } - ExemplarCharacters{"[a-záéíúâêîôûæåøãĩũĸ]"} + ExemplarCharacters{"[a á-ã b-e é ê f-i í î ĩ j-o ô p q ĸ r-u ú û ũ v-z æ ø å]"} Languages{ kl{"kalaallisut"} } @@ -37,10 +37,10 @@ kl{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.33"} calendar{ gregorian{ dayNames{ diff --git a/icuSources/data/locales/kl_GL.txt b/icuSources/data/locales/kl_GL.txt index 3a5baa4f..80d943dd 100644 --- a/icuSources/data/locales/kl_GL.txt +++ b/icuSources/data/locales/kl_GL.txt @@ -1,21 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kl_GL.xml +// * Source File:/common/main/kl_GL.xml // * // *************************************************************************** kl_GL{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;¤ -#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.34"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/kn.txt b/icuSources/data/locales/kn.txt index 6d48059d..eefadb66 100644 --- a/icuSources/data/locales/kn.txt +++ b/icuSources/data/locales/kn.txt @@ -1,99 +1,103 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kn.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/kn.xml - */ -kn{ - Countries{ - AU{"ಆಸ್ಟ್ರೆಲಿಯ"} - CN{"ಚೀನ"} - EE{"ಎಸ್ತೊನಿಯ"} - IN{"ಭಾರತ"} - MV{"ಮಾಲ್ಡಿವ ದ್ವೀಪಗಳು"} - NP{"ನೆಪಾಳ"} - SG{"ಸಿಂಗಪುರ"} - TR{"ತುರ್ಕಿ"} - } - Currencies{ - INR{ - "रु", - "INR", - } - } - ExemplarCharacters{"[:Knda:]"} - Languages{ - kn{"ಕನ್ನಡ"} - } - LocaleScript{ - "Knda", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "ಪೂರ್ವಾಹ್ನ", - "ಅಪರಾಹ್ನ", - } - dayNames{ - format{ - abbreviated{ - "ರ.", - "ಸೋ.", - "ಮಂ.", - "ಬು.", - "ಗು.", - "ಶು.", - "ಶನಿ.", - } - wide{ - "ರವಿವಾರ", - "ಸೋಮವಾರ", - "ಮಂಗಳವಾರ", - "ಬುಧವಾರ", - "ಗುರುವಾರ", - "ಶುಕ್ರವಾರ", - "ಶನಿವಾರ", - } - } - } - monthNames{ - format{ - abbreviated{ - "ಜನವರೀ", - "ಫೆಬ್ರವರೀ", - "ಮಾರ್ಚ್", - "ಎಪ್ರಿಲ್", - "ಮೆ", - "ಜೂನ್", - "ಜುಲೈ", - "ಆಗಸ್ಟ್", - "ಸಪ್ಟೆಂಬರ್", - "ಅಕ್ಟೋಬರ್", - "ನವೆಂಬರ್", - "ಡಿಸೆಂಬರ್", - } - wide{ - "ಜನವರೀ", - "ಫೆಬ್ರವರೀ", - "ಮಾರ್ಚ್", - "ಎಪ್ರಿಲ್", - "ಮೆ", - "ಜೂನ್", - "ಜುಲೈ", - "ಆಗಸ್ಟ್", - "ಸಪ್ಟೆಂಬರ್", - "ಅಕ್ಟೋಬರ್", - "ನವೆಂಬರ್", - "ಡಿಸೆಂಬರ್", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/kn.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/kn.xml + */ +kn{ + Countries{ + AU{"ಆಸ್ಟ್ರೆಲಿಯ"} + CN{"ಚೀನ"} + EE{"ಎಸ್ತೊನಿಯ"} + IN{"ಭಾರತ"} + MV{"ಮಾಲ್ಡಿವ ದ್ವೀಪಗಳು"} + NP{"ನೆಪಾಳ"} + SG{"ಸಿಂಗಪುರ"} + TR{"ತುರ್ಕಿ"} + } + ExemplarCharacters{"[಼ ಂ ಃ ೦-೯ ಅ-ಋ ೠ ಌ ೡ ಎ-ಐ ಒ-ನ ಪ-ಲ ವ-ಹ ಳ ೞ ಽ-ೄ ೆ-ೈ ೊ-್ ೕ ೖ]"} + Languages{ + kn{"ಕನ್ನಡ"} + } + LocaleScript{ + "Knda", + } + Version{"1.46"} + calendar{ + gregorian{ + AmPmMarkers{ + "ಪೂರ್ವಾಹ್ನ", + "ಅಪರಾಹ್ನ", + } + dayNames{ + format{ + abbreviated{ + "ರ.", + "ಸೋ.", + "ಮಂ.", + "ಬು.", + "ಗು.", + "ಶು.", + "ಶನಿ.", + } + wide{ + "ರವಿವಾರ", + "ಸೋಮವಾರ", + "ಮಂಗಳವಾರ", + "ಬುಧವಾರ", + "ಗುರುವಾರ", + "ಶುಕ್ರವಾರ", + "ಶನಿವಾರ", + } + } + } + monthNames{ + format{ + abbreviated{ + "ಜನವರೀ", + "ಫೆಬ್ರವರೀ", + "ಮಾರ್ಚ್", + "ಎಪ್ರಿಲ್", + "ಮೆ", + "ಜೂನ್", + "ಜುಲೈ", + "ಆಗಸ್ಟ್", + "ಸಪ್ಟೆಂಬರ್", + "ಅಕ್ಟೋಬರ್", + "ನವೆಂಬರ್", + "ಡಿಸೆಂಬರ್", + } + wide{ + "ಜನವರೀ", + "ಫೆಬ್ರವರೀ", + "ಮಾರ್ಚ್", + "ಎಪ್ರಿಲ್", + "ಮೆ", + "ಜೂನ್", + "ಜುಲೈ", + "ಆಗಸ್ಟ್", + "ಸಪ್ಟೆಂಬರ್", + "ಅಕ್ಟೋಬರ್", + "ನವೆಂಬರ್", + "ಡಿಸೆಂಬರ್", + } + } + } + quarters{ + format{ + wide{ + "ಒಂದು 1", + "ಎರಡು 2", + "ಮೂರು 3", + "ನಾಲೃಕ 4", + } + } + } + } + } +} diff --git a/icuSources/data/locales/kn_IN.txt b/icuSources/data/locales/kn_IN.txt index c66a0356..00c1976c 100644 --- a/icuSources/data/locales/kn_IN.txt +++ b/icuSources/data/locales/kn_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kn_IN.xml +// * Source File:/common/main/kn_IN.xml // * // *************************************************************************** kn_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.47"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "hh:mm:ss a z", "hh:mm:ss a z", diff --git a/icuSources/data/locales/ko.txt b/icuSources/data/locales/ko.txt index 930ea99d..bb1623ed 100644 --- a/icuSources/data/locales/ko.txt +++ b/icuSources/data/locales/ko.txt @@ -1,2669 +1,2034 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ko.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ko.xml - */ -ko{ - Countries{ - AD{"안도라"} - AE{"아랍에미리트"} - AF{"아프가니스탄"} - AG{"앤티가 바부다"} - AI{"안길라"} - AL{"알바니아"} - AM{"아르메니아"} - AN{"네덜란드령 안틸레스"} - AO{"앙골라"} - AQ{"남극 대륙"} - AR{"아르헨티나"} - AS{"아메리칸 사모아"} - AT{"오스트리아"} - AU{"오스트레일리아"} - AW{"아루바"} - AZ{"아제르바이잔"} - BA{"보스니아 헤르체고비나"} - BB{"바베이도스"} - BD{"방글라데시"} - BE{"벨기에"} - BF{"부르키나파소"} - BG{"불가리아"} - BH{"바레인"} - BI{"부룬디"} - BJ{"베넹"} - BM{"버뮤다"} - BN{"브루나이"} - BO{"볼리비아"} - BR{"브라질"} - BS{"바하마"} - BT{"부탄"} - BV{"부베"} - BW{"보츠와나"} - BY{"벨라루스"} - BZ{"벨리즈"} - CA{"캐나다"} - CC{"코코스제도"} - CD{"콩고민주공화국"} - CF{"중앙 아프리카"} - CG{"콩고"} - CH{"스위스"} - CI{"코트디부와르"} - CK{"쿡제도"} - CL{"칠레"} - CM{"카메룬"} - CN{"중국"} - CO{"콜롬비아"} - CR{"코스타리카"} - CU{"쿠바"} - CV{"까뽀베르데"} - CX{"크리스마스섬"} - CY{"사이프러스"} - CZ{"체코"} - DE{"독일"} - DJ{"지부티"} - DK{"덴마크"} - DM{"도미니카"} - DO{"도미니카 공화국"} - DZ{"알제리"} - EC{"에쿠아도르"} - EE{"에스토니아"} - EG{"이집트"} - EH{"서사하라"} - ER{"에리트리아"} - ES{"스페인"} - ET{"이디오피아"} - FI{"핀란드"} - FJ{"피지"} - FK{"포클랜드제도"} - FM{"마이크로네시아"} - FO{"페로제도"} - FR{"프랑스"} - GA{"가봉"} - GB{"영국"} - GD{"그레나다"} - GE{"그루지야"} - GF{"프랑스령 기아나"} - GH{"가나"} - GI{"지브롤터"} - GL{"그린란드"} - GM{"감비아"} - GN{"기니"} - GP{"과달로프"} - GQ{"적도 기니"} - GR{"그리스"} - GS{"사우스조지아-사우스샌드위치제도"} - GT{"과테말라"} - GU{"괌"} - GW{"기네비쏘"} - GY{"가이아나"} - HK{"홍콩, 중국 특별행정구"} - HM{"허드섬-맥도널드제도"} - HN{"온두라스"} - HR{"크로아티아"} - HT{"하이티"} - HU{"헝가리"} - ID{"인도네시아"} - IE{"아일랜드"} - IL{"이스라엘"} - IN{"인도"} - IO{"영국령인도양식민지"} - IQ{"이라크"} - IR{"이란"} - IS{"아이슬란드"} - IT{"이탈리아"} - JM{"자메이카"} - JO{"요르단"} - JP{"일본"} - KE{"케냐"} - KG{"키르기스스탄"} - KH{"캄보디아"} - KI{"키리바시"} - KM{"코모르"} - KN{"세인트크리스토퍼 네비스"} - KP{"조선 민주주의 인민 공화국"} - KR{"대한민국"} - KW{"쿠웨이트"} - KY{"케이맨제도"} - KZ{"카자흐스탄"} - LA{"라오스"} - LB{"레바논"} - LC{"세인트루시아"} - LI{"리히텐슈타인"} - LK{"스리랑카"} - LR{"라이베리아"} - LS{"레소토"} - LT{"리투아니아"} - LU{"룩셈부르크"} - LV{"라트비아"} - LY{"리비아"} - MA{"모로코"} - MC{"모나코"} - MD{"몰도바"} - MG{"마다가스카르"} - MH{"마샬 군도"} - MK{"마케도니아어"} - ML{"말리"} - MM{"미얀마"} - MN{"몽골"} - MO{"마카오, 중국 특별행정구"} - MP{"북마리아나제도"} - MQ{"말티니크"} - MR{"모리타니"} - MS{"몬트세라트"} - MT{"몰타"} - MU{"모리셔스"} - MV{"몰디브"} - MW{"말라위"} - MX{"멕시코"} - MY{"말레이지아"} - MZ{"모잠비크"} - NA{"나미비아"} - NC{"뉴 칼레도니아"} - NE{"니제르"} - NF{"노퍽섬"} - NG{"나이지리아"} - NI{"니카라과"} - NL{"네덜란드"} - NO{"노르웨이"} - NP{"네팔"} - NR{"나우루"} - NU{"니우에"} - NZ{"뉴질랜드"} - OM{"오만"} - PA{"파나마"} - PE{"페루"} - PF{"프랑스령 폴리네시아"} - PG{"파푸아뉴기니"} - PH{"필리핀"} - PK{"파키스탄"} - PL{"폴란드"} - PM{"세인트피에르-미케롱"} - PN{"핏케언섬"} - PR{"푸에르토리코"} - PS{"팔레스타인 지구"} - PT{"포르트칼"} - PW{"팔라우"} - PY{"파라과이"} - QA{"카타르"} - RE{"리유니온"} - RO{"루마니아"} - RU{"러시아"} - RW{"르완다"} - SA{"사우디아라비아"} - SB{"솔로몬"} - SC{"쉐이쉘"} - SD{"수단"} - SE{"스웨덴"} - SG{"싱가포르"} - SH{"세인트헬레나"} - SI{"슬로베니아"} - SJ{"스발바르제도-얀마웬섬"} - SK{"슬로바키아"} - SL{"시에라리온"} - SM{"산마리노"} - SN{"세네갈"} - SO{"소말리아"} - SP{"세르비아"} - SR{"수리남"} - ST{"상투메 프린시페"} - SV{"엘살바도르"} - SY{"시리아"} - SZ{"스와질랜드"} - TC{"터크스케이커스제도"} - TD{"차드"} - TF{"프랑스 남부 지방"} - TG{"토고"} - TH{"태국"} - TJ{"타지키스탄"} - TK{"토켈라우"} - TL{"동티모르"} - TM{"투르크메니스탄"} - TN{"튀니지"} - TO{"통가"} - TR{"터키"} - TT{"트리니다드 토바고"} - TV{"투발루"} - TW{"대만"} - TZ{"탄자니아"} - UA{"우크라이나"} - UG{"우간다"} - UM{"미국령 해외 제도"} - US{"미국"} - UY{"우루과이"} - UZ{"우즈베키스탄"} - VA{"바티칸"} - VC{"세인트빈센트그레나딘"} - VE{"베네수엘라"} - VG{"영국령 버진 아일랜드"} - VI{"미국령 버진 아일랜드"} - VN{"베트남"} - VU{"바누아투"} - WF{"왈리스-푸투나 제도"} - WS{"사모아"} - YE{"예멘"} - YT{"마요티"} - YU{"유고슬라비아"} - ZA{"남아프리카"} - ZM{"잠비아"} - ZW{"짐바브웨"} - } - Currencies{ - ADD{ - "ADD", - "안도라 디네르", - } - ADP{ - "ADP", - "안도라 페세타", - } - AED{ - "AED", - "아랍에미레이트 디나르", - } - AFA{ - "AFA", - "아프가니 (1927-2002)", - } - AFN{ - "AFN", - "아프가니", - } - AIF{ - "AIF", - "아파르와 이사스의 프랑", - } - ALK{ - "ALK", - "알바니아 레크 (1946-1961)", - } - ALL{ - "ALL", - "알바니아 레크", - } - ALV{ - "ALV", - "알바니아 레크 발루트", - } - ALX{ - "ALX", - "알바니아 달러 태환권", - } - AMD{ - "AMD", - "아르메니아 드람", - } - ANG{ - "ANG", - "네델란드 안틸레스 굴덴", - } - AOA{ - "AOA", - "앙골라 콴자", - } - AOK{ - "AOK", - "앙골라 콴자 (1977-1990)", - } - AON{ - "AON", - "앙골라 신귄 콴자 (1990-2000)", - } - AOR{ - "AOR", - "앙골라 콴자 Reajustado (1995-1999)", - } - AOS{ - "AOS", - "앙골라 에스쿠도", - } - ARA{ - "ARA", - "아르헨티나 오스트랄", - } - ARM{ - "ARM", - "아르헨티나 페소 모네다 국영", - } - ARP{ - "ARP", - "아르헨티나 페소 (1983-1985)", - } - ARS{ - "ARS", - "아르헨티나 페소", - } - ATS{ - "ATS", - "호주 실링", - } - AUD{ - "AUD", - "호주 달러", - } - AUP{ - "AUP", - "호주 파운드", - } - AWG{ - "AWG", - "아루바 길더", - } - AZM{ - "AZM", - "아제르바이젠 마나트", - } - BAD{ - "BAD", - "보스니아-헤르체고비나 디나르", - } - BAM{ - "BAM", - "보스니아-헤르체고비나 태환 마르크", - } - BAN{ - "BAN", - "보스니아-헤르체고비나 신 디나르", - } - BBD{ - "BBD", - "바베이도스 달러", - } - BDT{ - "BDT", - "방글라데시 타카", - } - BEC{ - "BEC", - "벨기에 프랑 (태환)", - } - BEF{ - "BEF", - "벨기에 프랑", - } - BEL{ - "BEL", - "벨기에 프랑 (금융)", - } - BGL{ - "BGL", - "불가리아 동전 렛", - } - BGM{ - "BGM", - "불가리아 사회주의 렛", - } - BGN{ - "BGN", - "불가리아 신권 렛", - } - BGO{ - "BGO", - "불가리아 렛 (1879-1952)", - } - BGX{ - "BGX", - "불가리아 렛 태환권", - } - BHD{ - "BHD", - "바레인 디나르", - } - BIF{ - "BIF", - "부룬디 프랑", - } - BMD{ - "BMD", - "버뮤다 달러", - } - BMP{ - "BMP", - "버뮤다 파운드", - } - BND{ - "BND", - "부루나이 달러", - } - BOB{ - "BOB", - "볼리비아노", - } - BOL{ - "BOL", - "볼리비아노 (1863-1962)", - } - BOP{ - "BOP", - "볼리비아노 페소", - } - BRB{ - "BRB", - "볼리비아노 크루제이루 노보 (1967-1986)", - } - BRC{ - "BRC", - "브라질 크루자두", - } - BRE{ - "BRE", - "브라질 크루제이루 (1990-1993)", - } - BRL{ - "BRL", - "브라질 레알", - } - BRN{ - "BRN", - "브라질 크루자두 노보", - } - BRR{ - "BRR", - "브라질 크루제이루", - } - BRZ{ - "BRZ", - "브라질 크루제이루 (1942-1967)", - } - BSD{ - "BSD", - "바하마 달러", - } - BSP{ - "BSP", - "바하마 달러 파운드", - } - BTN{ - "BTN", - "부탄 눌투눔", - } - BTR{ - "BTR", - "부탄 루피", - } - BUK{ - "BUK", - "버마 차트", - } - BUR{ - "BUR", - "버마 루피", - } - BWP{ - "BWP", - "보츠와나 폴라", - } - BYB{ - "BYB", - "벨라루스 신권 루블 (1994-1999)", - } - BYL{ - "BYL", - "벨라루스 루블 (1992-1994)", - } - BYR{ - "BYR", - "벨라루스 루블", - } - BZD{ - "BZD", - "벨리즈 달러", - } - BZH{ - "BZH", - "영국령 혼두라스 달러", - } - CAD{ - "CAD", - "캐나다 달러", - } - CDF{ - "CDF", - "콩고 프랑 콩골라스", - } - CDG{ - "CDG", - "콩고 공화국 프랑", - } - CDL{ - "CDL", - "콩고 자이르", - } - CHF{ - "CHF", - "스위스 프랑달러", - } - CKD{ - "CKD", - "쿡 제도 달러", - } - CLC{ - "CLC", - "칠레 콘도르", - } - CLE{ - "CLE", - "칠레 에스쿠도", - } - CLP{ - "CLP", - "칠레 페소", - } - CNY{ - "CNY", - "중국 위안 인민폐", - } - COB{ - "COB", - "콜롬비아 지폐 페소", - } - COF{ - "COF", - "콩고 CFA 프랑", - } - COP{ - "COP", - "콜롬비아 페소", - } - CRC{ - "CRC", - "코스타리카 콜론", - } - CSC{ - "CSC", - "체코슬로바키아 코루나", - } - CSK{ - "CSK", - "체코슬로바키아 동전 코루나", - } - CUP{ - "CUP", - "쿠바 페소", - } - CUX{ - "CUX", - "쿠바 태환권 마르크", - } - CVE{ - "CVE", - "카보베르데 에스쿠도", - } - CWG{ - "CWG", - "쿠라카오 길더", - } - CYP{ - "CYP", - "싸이프러스 파운드", - } - CZK{ - "CZK", - "체코 공화국 코루나", - } - DDM{ - "DDM", - "동독 오스트마르크", - } - DEM{ - "DEM", - "독일 마르크", - } - DES{ - "DES", - "독일 스퍼마르크", - } - DJF{ - "DJF", - "지부티 프랑", - } - DKK{ - "DKK", - "덴마크 크로네", - } - DOP{ - "DOP", - "도미니카 페소", - } - DZD{ - "DZD", - "알제리 디나르", - } - DZF{ - "DZF", - "알제리 신권 프랑", - } - DZG{ - "DZG", - "알제리 프랑 제르미날", - } - ECS{ - "ECS", - "에쿠아도르 수크레", - } - EEK{ - "EEK", - "에스토니아 크룬", - } - EGP{ - "EGP", - "이집트 파운드", - } - ERN{ - "ERN", - "에리트리아 나크파", - } - ESP{ - "ESP", - "스페인 페세타", - } - ETB{ - "ETB", - "이디오피아 비르", - } - ETD{ - "ETD", - "이디오피아 달러", - } - EUR{ - "€", - "유로화", - } - FIM{ - "FIM", - "핀란드 마르카", - } - FIN{ - "FIN", - "핀란드 마르카 (1860-1962)", - } - FJD{ - "FJD", - "피지 달러", - } - FJP{ - "FJP", - "피지 파운드", - } - FKP{ - "FKP", - "포클랜드제도 파운드", - } - FOK{ - "FOK", - "페로제도 크로너", - } - FRF{ - "FRF", - "프랑스 프랑", - } - FRG{ - "FRG", - "프랑스 프랑 제르미날/프랑 포앙카레", - } - GAF{ - "GAF", - "가봉 CFA 프랑", - } - GBP{ - "£", - "영국령 파운드 스털링", - } - GEK{ - "GEK", - "그루지야 지폐 라리트", - } - GEL{ - "GEL", - "그루지야 라리", - } - GHC{ - "GHC", - "가나 시디", - } - GHO{ - "GHO", - "가나 구권 시디", - } - GHP{ - "GHP", - "가나 파운드", - } - GHR{ - "GHR", - "가나 재평가 시디", - } - GIP{ - "GIP", - "지브롤터 파운드", - } - GLK{ - "GLK", - "그린란드 크로네", - } - GMD{ - "GMD", - "감비아 달라시", - } - GMP{ - "GMP", - "감비아 파운드", - } - GNF{ - "GNF", - "기니 프랑", - } - GNI{ - "GNI", - "기니 프랑 (1960-1972)", - } - GNS{ - "GNS", - "기니 시리", - } - GPF{ - "GPF", - "과달로프 프랑", - } - GQF{ - "GQF", - "적도 기니 프랑", - } - GQP{ - "GQP", - "적도 기니 페세타 기니아나", - } - GRD{ - "GRD", - "그리스 드라크마", - } - GRN{ - "GRN", - "그리스 신권 드라크마", - } - GTQ{ - "GTQ", - "과테말라 케트살", - } - GUF{ - "GUF", - "프랑스령 가이아나 프랑 기아나", - } - GWE{ - "GWE", - "포르투갈령 기니 에스쿠도", - } - GWM{ - "GWM", - "포르투갈령 기니 밀 레이스", - } - GWP{ - "GWP", - "기네비쏘 페소", - } - GYD{ - "GYD", - "가이아나 달러", - } - HKD{ - "HKD", - "홍콩 달러", - } - HNL{ - "HNL", - "온두라스 렘피라", - } - HRD{ - "HRD", - "크로아티아 디나르", - } - HRK{ - "HRK", - "크로아티아 쿠나", - } - HTG{ - "HTG", - "하이티 구르드", - } - HUF{ - "HUF", - "헝가리 포린트", - } - IBP{ - "IBP", - "북부 아일랜드 파운드", - } - IDG{ - "IDG", - "인도네시아 니카 길더", - } - IDJ{ - "IDJ", - "인도네시아 자바 루피아", - } - IDN{ - "IDN", - "인도네시아 신권 루피아", - } - IDR{ - "IDR", - "인도네시아 루피아", - } - IEP{ - "IR£", - "아일랜드 파운드", - } - ILL{ - "ILL", - "이스라엘 세켈", - } - ILP{ - "ILP", - "이스라엘 파운드", - } - ILS{ - "ILS", - "이스라엘 신권 세켈", - } - IMP{ - "IMP", - "맨도 파운드 스털링", - } - INR{ - "=0#Rs.|1#Re.|1/common/main/ko.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ko.xml + */ +ko{ + Countries{ + AD{"안도라"} + AE{"아랍에미리트"} + AF{"아프가니스탄"} + AG{"앤티가 바부다"} + AI{"안길라"} + AL{"알바니아"} + AM{"아르메니아"} + AN{"네덜란드령 안틸레스"} + AO{"앙골라"} + AQ{"남극 대륙"} + AR{"아르헨티나"} + AS{"아메리칸 사모아"} + AT{"오스트리아"} + AU{"오스트레일리아"} + AW{"아루바"} + AX{"올란드 제도"} + AZ{"아제르바이잔"} + BA{"보스니아 헤르체고비나"} + BB{"바베이도스"} + BD{"방글라데시"} + BE{"벨기에"} + BF{"부르키나파소"} + BG{"불가리아"} + BH{"바레인"} + BI{"부룬디"} + BJ{"베넹"} + BM{"버뮤다"} + BN{"브루나이"} + BO{"볼리비아"} + BR{"브라질"} + BS{"바하마"} + BT{"부탄"} + BV{"부베"} + BW{"보츠와나"} + BY{"벨라루스"} + BZ{"벨리즈"} + CA{"캐나다"} + CC{"코코스제도"} + CD{"콩고민주공화국"} + CF{"중앙 아프리카"} + CG{"콩고"} + CH{"스위스"} + CI{"코트디부와르"} + CK{"쿡제도"} + CL{"칠레"} + CM{"카메룬"} + CN{"중국"} + CO{"콜롬비아"} + CR{"코스타리카"} + CS{"세르비아 및 몬테네그로"} + CU{"쿠바"} + CV{"까뽀베르데"} + CX{"크리스마스섬"} + CY{"사이프러스"} + CZ{"체코"} + DE{"독일"} + DJ{"지부티"} + DK{"덴마크"} + DM{"도미니카"} + DO{"도미니카 공화국"} + DZ{"알제리"} + EC{"에쿠아도르"} + EE{"에스토니아"} + EG{"이집트"} + EH{"서사하라"} + ER{"에리트리아"} + ES{"스페인"} + ET{"이디오피아"} + FI{"핀란드"} + FJ{"피지"} + FK{"포클랜드제도"} + FM{"마이크로네시아"} + FO{"페로제도"} + FR{"프랑스"} + GA{"가봉"} + GB{"영국"} + GD{"그레나다"} + GE{"그루지야"} + GF{"프랑스령 기아나"} + GH{"가나"} + GI{"지브롤터"} + GL{"그린란드"} + GM{"감비아"} + GN{"기니"} + GP{"과달로프"} + GQ{"적도 기니"} + GR{"그리스"} + GS{"사우스조지아-사우스샌드위치제도"} + GT{"과테말라"} + GU{"괌"} + GW{"기네비쏘"} + GY{"가이아나"} + HK{"홍콩, 중국 특별행정구"} + HM{"허드섬-맥도널드제도"} + HN{"온두라스"} + HR{"크로아티아"} + HT{"하이티"} + HU{"헝가리"} + ID{"인도네시아"} + IE{"아일랜드"} + IL{"이스라엘"} + IN{"인도"} + IO{"영국령인도양식민지"} + IQ{"이라크"} + IR{"이란"} + IS{"아이슬란드"} + IT{"이탈리아"} + JM{"자메이카"} + JO{"요르단"} + JP{"일본"} + KE{"케냐"} + KG{"키르기스스탄"} + KH{"캄보디아"} + KI{"키리바시"} + KM{"코모르"} + KN{"세인트크리스토퍼 네비스"} + KP{"조선 민주주의 인민 공화국"} + KR{"대한민국"} + KW{"쿠웨이트"} + KY{"케이맨제도"} + KZ{"카자흐스탄"} + LA{"라오스"} + LB{"레바논"} + LC{"세인트루시아"} + LI{"리히텐슈타인"} + LK{"스리랑카"} + LR{"라이베리아"} + LS{"레소토"} + LT{"리투아니아"} + LU{"룩셈부르크"} + LV{"라트비아"} + LY{"리비아"} + MA{"모로코"} + MC{"모나코"} + MD{"몰도바"} + MG{"마다가스카르"} + MH{"마샬 군도"} + MK{"마케도니아어"} + ML{"말리"} + MM{"미얀마"} + MN{"몽골"} + MO{"마카오, 중국 특별행정구"} + MP{"북마리아나제도"} + MQ{"말티니크"} + MR{"모리타니"} + MS{"몬트세라트"} + MT{"몰타"} + MU{"모리셔스"} + MV{"몰디브"} + MW{"말라위"} + MX{"멕시코"} + MY{"말레이지아"} + MZ{"모잠비크"} + NA{"나미비아"} + NC{"뉴 칼레도니아"} + NE{"니제르"} + NF{"노퍽섬"} + NG{"나이지리아"} + NI{"니카라과"} + NL{"네덜란드"} + NO{"노르웨이"} + NP{"네팔"} + NR{"나우루"} + NU{"니우에"} + NZ{"뉴질랜드"} + OM{"오만"} + PA{"파나마"} + PE{"페루"} + PF{"프랑스령 폴리네시아"} + PG{"파푸아뉴기니"} + PH{"필리핀"} + PK{"파키스탄"} + PL{"폴란드"} + PM{"세인트피에르-미케롱"} + PN{"핏케언섬"} + PR{"푸에르토리코"} + PS{"팔레스타인 지구"} + PT{"포르트칼"} + PW{"팔라우"} + PY{"파라과이"} + QA{"카타르"} + RE{"리유니온"} + RO{"루마니아"} + RU{"러시아"} + RW{"르완다"} + SA{"사우디아라비아"} + SB{"솔로몬"} + SC{"쉐이쉘"} + SD{"수단"} + SE{"스웨덴"} + SG{"싱가포르"} + SH{"세인트헬레나"} + SI{"슬로베니아"} + SJ{"스발바르제도-얀마웬섬"} + SK{"슬로바키아"} + SL{"시에라리온"} + SM{"산마리노"} + SN{"세네갈"} + SO{"소말리아"} + SR{"수리남"} + ST{"상투메 프린시페"} + SV{"엘살바도르"} + SY{"시리아"} + SZ{"스와질랜드"} + TC{"터크스케이커스제도"} + TD{"차드"} + TF{"프랑스 남부 지방"} + TG{"토고"} + TH{"태국"} + TJ{"타지키스탄"} + TK{"토켈라우"} + TL{"동티모르"} + TM{"투르크메니스탄"} + TN{"튀니지"} + TO{"통가"} + TR{"터키"} + TT{"트리니다드 토바고"} + TV{"투발루"} + TW{"대만"} + TZ{"탄자니아"} + UA{"우크라이나"} + UG{"우간다"} + UM{"미국령 해외 제도"} + US{"미국"} + UY{"우루과이"} + UZ{"우즈베키스탄"} + VA{"바티칸"} + VC{"세인트빈센트그레나딘"} + VE{"베네수엘라"} + VG{"영국령 버진 아일랜드"} + VI{"미국령 버진 아일랜드"} + VN{"베트남"} + VU{"바누아투"} + WF{"왈리스-푸투나 제도"} + WS{"사모아"} + YE{"예멘"} + YT{"마요티"} + ZA{"남아프리카"} + ZM{"잠비아"} + ZW{"짐바브웨"} + } + Currencies{ + ADP{ + "ADP", + "안도라 페세타", + } + AED{ + "AED", + "아랍에미레이트 디나르", + } + AFA{ + "AFA", + "아프가니 (1927-2002)", + } + AFN{ + "AFN", + "아프가니", + } + ALL{ + "ALL", + "알바니아 레크", + } + AMD{ + "AMD", + "아르메니아 드람", + } + ANG{ + "ANG", + "네델란드 안틸레스 굴덴", + } + AOA{ + "AOA", + "앙골라 콴자", + } + AOK{ + "AOK", + "앙골라 콴자 (1977-1990)", + } + AON{ + "AON", + "앙골라 신귄 콴자 (1990-2000)", + } + AOR{ + "AOR", + "앙골라 콴자 Reajustado (1995-1999)", + } + ARA{ + "ARA", + "아르헨티나 오스트랄", + } + ARP{ + "ARP", + "아르헨티나 페소 (1983-1985)", + } + ARS{ + "ARS", + "아르헨티나 페소", + } + ATS{ + "ATS", + "호주 실링", + } + AUD{ + "AUD", + "호주 달러", + } + AWG{ + "AWG", + "아루바 길더", + } + AZM{ + "AZM", + "아제르바이젠 마나트", + } + BAD{ + "BAD", + "보스니아-헤르체고비나 디나르", + } + BAM{ + "BAM", + "보스니아-헤르체고비나 태환 마르크", + } + BBD{ + "BBD", + "바베이도스 달러", + } + BDT{ + "BDT", + "방글라데시 타카", + } + BEC{ + "BEC", + "벨기에 프랑 (태환)", + } + BEF{ + "BEF", + "벨기에 프랑", + } + BEL{ + "BEL", + "벨기에 프랑 (금융)", + } + BGL{ + "BGL", + "불가리아 동전 렛", + } + BGN{ + "BGN", + "불가리아 신권 렛", + } + BHD{ + "BHD", + "바레인 디나르", + } + BIF{ + "BIF", + "부룬디 프랑", + } + BMD{ + "BMD", + "버뮤다 달러", + } + BND{ + "BND", + "부루나이 달러", + } + BOB{ + "BOB", + "볼리비아노", + } + BOP{ + "BOP", + "볼리비아노 페소", + } + BRB{ + "BRB", + "볼리비아노 크루제이루 노보 (1967-1986)", + } + BRC{ + "BRC", + "브라질 크루자두", + } + BRE{ + "BRE", + "브라질 크루제이루 (1990-1993)", + } + BRL{ + "BRL", + "브라질 레알", + } + BRN{ + "BRN", + "브라질 크루자두 노보", + } + BRR{ + "BRR", + "브라질 크루제이루", + } + BSD{ + "BSD", + "바하마 달러", + } + BTN{ + "BTN", + "부탄 눌투눔", + } + BUK{ + "BUK", + "버마 차트", + } + BWP{ + "BWP", + "보츠와나 폴라", + } + BYB{ + "BYB", + "벨라루스 신권 루블 (1994-1999)", + } + BYR{ + "BYR", + "벨라루스 루블", + } + BZD{ + "BZD", + "벨리즈 달러", + } + CAD{ + "CAD", + "캐나다 달러", + } + CDF{ + "CDF", + "콩고 프랑 콩골라스", + } + CHF{ + "CHF", + "스위스 프랑달러", + } + CLP{ + "CLP", + "칠레 페소", + } + CNY{ + "CNY", + "중국 위안 인민폐", + } + COP{ + "COP", + "콜롬비아 페소", + } + CRC{ + "CRC", + "코스타리카 콜론", + } + CSK{ + "CSK", + "체코슬로바키아 동전 코루나", + } + CUP{ + "CUP", + "쿠바 페소", + } + CVE{ + "CVE", + "카보베르데 에스쿠도", + } + CYP{ + "CYP", + "싸이프러스 파운드", + } + CZK{ + "CZK", + "체코 공화국 코루나", + } + DDM{ + "DDM", + "동독 오스트마르크", + } + DEM{ + "DEM", + "독일 마르크", + } + DJF{ + "DJF", + "지부티 프랑", + } + DKK{ + "DKK", + "덴마크 크로네", + } + DOP{ + "DOP", + "도미니카 페소", + } + DZD{ + "DZD", + "알제리 디나르", + } + ECS{ + "ECS", + "에쿠아도르 수크레", + } + EEK{ + "EEK", + "에스토니아 크룬", + } + EGP{ + "EGP", + "이집트 파운드", + } + ERN{ + "ERN", + "에리트리아 나크파", + } + ESP{ + "ESP", + "스페인 페세타", + } + ETB{ + "ETB", + "이디오피아 비르", + } + EUR{ + "€", + "유로화", + } + FIM{ + "FIM", + "핀란드 마르카", + } + FJD{ + "FJD", + "피지 달러", + } + FKP{ + "FKP", + "포클랜드제도 파운드", + } + FRF{ + "FRF", + "프랑스 프랑", + } + GBP{ + "£", + "영국령 파운드 스털링", + } + GEK{ + "GEK", + "그루지야 지폐 라리트", + } + GEL{ + "GEL", + "그루지야 라리", + } + GHC{ + "GHC", + "가나 시디", + } + GIP{ + "GIP", + "지브롤터 파운드", + } + GMD{ + "GMD", + "감비아 달라시", + } + GNF{ + "GNF", + "기니 프랑", + } + GNS{ + "GNS", + "기니 시리", + } + GRD{ + "GRD", + "그리스 드라크마", + } + GTQ{ + "GTQ", + "과테말라 케트살", + } + GWE{ + "GWE", + "포르투갈령 기니 에스쿠도", + } + GWP{ + "GWP", + "기네비쏘 페소", + } + GYD{ + "GYD", + "가이아나 달러", + } + HKD{ + "HKD", + "홍콩 달러", + } + HNL{ + "HNL", + "온두라스 렘피라", + } + HRD{ + "HRD", + "크로아티아 디나르", + } + HRK{ + "HRK", + "크로아티아 쿠나", + } + HTG{ + "HTG", + "하이티 구르드", + } + HUF{ + "HUF", + "헝가리 포린트", + } + IDR{ + "IDR", + "인도네시아 루피아", + } + IEP{ + "IR£", + "아일랜드 파운드", + } + ILP{ + "ILP", + "이스라엘 파운드", + } + ILS{ + "ILS", + "이스라엘 신권 세켈", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/ko_KR.xml // * // *************************************************************************** ko_KR{ + Countries{ + 001{"세계"} + 002{"아프리카"} + 005{"남아메리카[남미]"} + 009{"오세아니아, 대양주"} + 142{"아시아"} + 150{"유럽"} + } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.45"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "a hh'시' mm'분' ss'초' z", "a hh'시' mm'분' ss'초'", @@ -29,4 +41,81 @@ ko_KR{ } } } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } + zoneStrings{ + "Africa:Casablanca"{ + ec{"Casablanca"} + ld{"그리니치 서머타임"} + } + "America:Anchorage"{ + ec{"Anchorage"} + ld{"알래스카 서머타임"} + sd{"AKDT"} + ss{"AKST"} + } + "America:Chicago"{ + ec{"Chicago"} + ld{"중부 서머타임"} + } + "America:Denver"{ + ec{"Denver"} + ld{"산악 서머타임"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"대서양 서머타임"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + ld{"태평양 서머타임"} + } + "America:New_York"{ + ec{"New York"} + ld{"동부 서머타임"} + } + "America:St_Johns"{ + ec{"St Johns"} + ld{"뉴펀들랜드 서머타임"} + sd{"NDT"} + ss{"NST"} + } + "Asia:Jerusalem"{ + ec{"Jerusalem"} + ld{"이스라엘 서머타임"} + } + "Asia:Seoul"{ + ec{"Seoul"} + ld{"한국 서머타임"} + ls{"한국 표준시"} + sd{"KDT"} + } + "Asia:Shanghai"{ + ec{"Shanghai"} + ld{"중국 서머타임"} + } + "Asia:Tokyo"{ + ec{"Tokyo"} + ld{"일본 서머타임"} + sd{"JDT"} + } + "Europe:Bucharest"{ + ec{"Bucharest"} + ld{"동부유럽 서머타임"} + } + "Europe:Paris"{ + ec{"Paris"} + ld{"중부유럽 서머타임"} + sd{"CEDT"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"하와이 서머타임"} + sd{"HDT"} + } + } } diff --git a/icuSources/data/locales/kok.txt b/icuSources/data/locales/kok.txt index 8b3370c1..d3870834 100644 --- a/icuSources/data/locales/kok.txt +++ b/icuSources/data/locales/kok.txt @@ -1,246 +1,250 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kok.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/kok.xml - */ -kok{ - Countries{ - IN{"भारत"} - } - Currencies{ - INR{ - "रु", - "INR", - } - } - ExemplarCharacters{"[[:Deva:]‌‍]"} - Languages{ - aa{"अफार"} - ab{"अबखेज़ियन"} - af{"अफ्रिकान्स"} - am{"अमहारिक्"} - ar{"अरेबिक्"} - as{"असामी"} - ay{"ऐमरा"} - az{"अज़रबैजानी"} - ba{"बष्किर"} - be{"बैलोरुसियन्"} - bg{"बल्गेरियन"} - bh{"बीहारी"} - bi{"बिसलमा"} - bn{"बंगाली"} - bo{"तिबेतियन"} - br{"ब्रेटन"} - ca{"कटलान"} - co{"कोर्शियन"} - cs{"ज़ेक्"} - cy{"वेळ्ष्"} - da{"डानिष"} - de{"जर्मन"} - dz{"भूटानी"} - el{"ग्रीक्"} - en{"आंग्ल"} - eo{"इस्परान्टो"} - es{"स्पानिष"} - et{"इस्टोनियन्"} - eu{"बास्क"} - fa{"पर्षियन्"} - fi{"फिन्निष्"} - fj{"फिजी"} - fo{"फेरोस्"} - fr{"फ्रेन्च"} - fy{"फ्रिशियन्"} - ga{"ऐरिष"} - gd{"स्काटस् गेलिक्"} - gl{"गेलीशियन"} - gn{"गौरानी"} - gu{"गुजराती"} - ha{"हौसा"} - he{"हेब्रु"} - hi{"हिन्दी"} - hr{"क्रोयेषियन्"} - hu{"हंगेरियन्"} - hy{"आर्मीनियन्"} - ia{"इन्टरलिंग्वा"} - id{"इन्डोनेषियन"} - ie{"इन्टरलिंग्"} - ik{"इनूपेयाक्"} - is{"आईस्लान्डिक"} - it{"इटालियन"} - iu{"इन्युकट्ट"} - ja{"जापनीस्"} - jv{"जावनीस्"} - ka{"जार्जियन्"} - kk{"कज़ख्"} - kl{"ग्रीनलान्डिक"} - km{"कंबोडियन"} - kn{"कन्नडा"} - ko{"कोरियन्"} - kok{"कोंकणी"} - ks{"कश्मीरी"} - ku{"कुर्दिष"} - ky{"किर्गिज़"} - la{"लाटिन"} - ln{"लिंगाला"} - lo{"लाओतियन्"} - lt{"लिथुआनियन्"} - lv{"लाट्वियन् (लेट्टिष्)"} - mg{"मलागसी"} - mi{"माओरी"} - mk{"मसीडोनियन्"} - ml{"मळियाळम"} - mn{"मंगोलियन्"} - mo{"मोल्डावियन्"} - mr{"मराठी"} - ms{"मलय"} - mt{"मालतीस्"} - my{"बर्मीज़्"} - na{"नौरो"} - ne{"नेपाळी"} - nl{"डच्"} - no{"नोर्वेजियन"} - oc{"ओसिटान्"} - om{"ओरोमो (अफान)"} - or{"ओरिया"} - pa{"पंजाबी"} - pl{"पोलिष"} - ps{"पाष्टो (पुष्टो)"} - pt{"पोर्चुगीज़्"} - qu{"क्वेच्वा"} - rm{"रहटो-रोमान्स्"} - rn{"किरुन्दी"} - ro{"रोमानियन्"} - ru{"रष्यन्"} - rw{"किन्यार्वान्डा"} - sa{"संस्कृत"} - sd{"सिंधी"} - sg{"सांग्रो"} - sh{"सेर्बो-क्रोयेषियन्"} - si{"सिन्हलीस्"} - sk{"स्लोवाक"} - sl{"स्लोवेनियन्"} - sm{"समोन"} - sn{"शोना"} - so{"सोमाळी"} - sq{"आल्बेनियन्"} - sr{"सेर्बियन्"} - ss{"सिस्वाती"} - st{"सेसोथो"} - su{"सुंदनीस"} - sv{"स्वीदीष"} - sw{"स्वाहिली"} - ta{"तमिळ"} - te{"तेलुगू"} - tg{"तजिक"} - th{"थाई"} - ti{"तिग्रिन्या"} - tk{"तुर्कमन"} - tl{"तगालोग"} - tn{"सेत्स्वाना"} - to{"तोंगा"} - tr{"तुर्किष"} - ts{"त्सोगा"} - tt{"तटार"} - tw{"त्वि"} - ug{"उधूर"} - uk{"युक्रेनियन्"} - ur{"उर्दू"} - uz{"उज़बेक"} - vi{"वियत्नामीज़"} - vo{"ओलापुक"} - wo{"उलोफ़"} - xh{"झ़ौसा"} - yi{"इद्दिष्"} - yo{"यूरुबा"} - za{"झ्हुन्ग"} - zh{"चीनीस्"} - zu{"जुलू"} - } - LocaleScript{ - "Deva", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "म.पू.", - "म.नं.", - } - dayNames{ - format{ - abbreviated{ - "रवि", - "सोम", - "मंगळ", - "बुध", - "गुरु", - "शुक्र", - "शनि", - } - wide{ - "आदित्यवार", - "सोमवार", - "मंगळार", - "बुधवार", - "गुरुवार", - "शुक्रवार", - "शनिवार", - } - } - } - eras{ - abbreviated{ - "क्रिस्तपूर्व", - "क्रिस्तशखा", - } - } - monthNames{ - format{ - abbreviated{ - "जानेवारी", - "फेबृवारी", - "मार्च", - "एप्रिल", - "मे", - "जून", - "जुलै", - "ओगस्ट", - "सेप्टेंबर", - "ओक्टोबर", - "नोव्हेंबर", - "डिसेंबर", - } - wide{ - "जानेवारी", - "फेब्रुवारी", - "मार्च", - "एप्रिल", - "मे", - "जून", - "जुलै", - "ओगस्ट", - "सेप्टेंबर", - "ओक्टोबर", - "नोव्हेंबर", - "डिसेंबर", - } - } - } - } - } - zoneStrings{ - { - "Asia/Calcutta", - "भारतीय समय", - "IST", - "भारतीय समय", - "IST", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/kok.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/kok.xml + */ +kok{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + IN{"भारत"} + } + Currencies{ + INR{ + "रु", + "INR", + } + } + ExemplarCharacters{ + "[़ ँ-ः ०-९ ॐ अ-ऍ ए-ऑ ओ-क {क़} ख {ख़} ग {ग़} घ-ज {ज़} झ-ड {ड़} ढ {ढ़} ण-न प फ" + " {फ़} ब-य {य़} र ल ळ व-ह ऽ-ॅ े-ॉ ो-्]" + } + Languages{ + aa{"अफार"} + ab{"अबखेज़ियन"} + af{"अफ्रिकान्स"} + am{"अमहारिक्"} + ar{"अरेबिक्"} + as{"असामी"} + ay{"ऐमरा"} + az{"अज़रबैजानी"} + ba{"बष्किर"} + be{"बैलोरुसियन्"} + bg{"बल्गेरियन"} + bh{"बीहारी"} + bi{"बिसलमा"} + bn{"बंगाली"} + bo{"तिबेतियन"} + br{"ब्रेटन"} + ca{"कटलान"} + co{"कोर्शियन"} + cs{"ज़ेक्"} + cy{"वेळ्ष्"} + da{"डानिष"} + de{"जर्मन"} + dz{"भूटानी"} + el{"ग्रीक्"} + en{"आंग्ल"} + eo{"इस्परान्टो"} + es{"स्पानिष"} + et{"इस्टोनियन्"} + eu{"बास्क"} + fa{"पर्षियन्"} + fi{"फिन्निष्"} + fj{"फिजी"} + fo{"फेरोस्"} + fr{"फ्रेन्च"} + fy{"फ्रिशियन्"} + ga{"ऐरिष"} + gd{"स्काटस् गेलिक्"} + gl{"गेलीशियन"} + gn{"गौरानी"} + gu{"गुजराती"} + ha{"हौसा"} + he{"हेब्रु"} + hi{"हिन्दी"} + hr{"क्रोयेषियन्"} + hu{"हंगेरियन्"} + hy{"आर्मीनियन्"} + ia{"इन्टरलिंग्वा"} + id{"इन्डोनेषियन"} + ie{"इन्टरलिंग्"} + ik{"इनूपेयाक्"} + is{"आईस्लान्डिक"} + it{"इटालियन"} + iu{"इन्युकट्ट"} + ja{"जापनीस्"} + jv{"जावनीस्"} + ka{"जार्जियन्"} + kk{"कज़ख्"} + kl{"ग्रीनलान्डिक"} + km{"कंबोडियन"} + kn{"कन्नडा"} + ko{"कोरियन्"} + kok{"कोंकणी"} + ks{"कश्मीरी"} + ku{"कुर्दिष"} + ky{"किर्गिज़"} + la{"लाटिन"} + ln{"लिंगाला"} + lo{"लाओतियन्"} + lt{"लिथुआनियन्"} + lv{"लाट्वियन् (लेट्टिष्)"} + mg{"मलागसी"} + mi{"माओरी"} + mk{"मसीडोनियन्"} + ml{"मळियाळम"} + mn{"मंगोलियन्"} + mo{"मोल्डावियन्"} + mr{"मराठी"} + ms{"मलय"} + mt{"मालतीस्"} + my{"बर्मीज़्"} + na{"नौरो"} + ne{"नेपाळी"} + nl{"डच्"} + no{"नोर्वेजियन"} + oc{"ओसिटान्"} + om{"ओरोमो (अफान)"} + or{"ओरिया"} + pa{"पंजाबी"} + pl{"पोलिष"} + ps{"पाष्टो (पुष्टो)"} + pt{"पोर्चुगीज़्"} + qu{"क्वेच्वा"} + rm{"रहटो-रोमान्स्"} + rn{"किरुन्दी"} + ro{"रोमानियन्"} + ru{"रष्यन्"} + rw{"किन्यार्वान्डा"} + sa{"संस्कृत"} + sd{"सिंधी"} + sg{"सांग्रो"} + sh{"सेर्बो-क्रोयेषियन्"} + si{"सिन्हलीस्"} + sk{"स्लोवाक"} + sl{"स्लोवेनियन्"} + sm{"समोन"} + sn{"शोना"} + so{"सोमाळी"} + sq{"आल्बेनियन्"} + sr{"सेर्बियन्"} + ss{"सिस्वाती"} + st{"सेसोथो"} + su{"सुंदनीस"} + sv{"स्वीदीष"} + sw{"स्वाहिली"} + ta{"तमिळ"} + te{"तेलुगू"} + tg{"तजिक"} + th{"थाई"} + ti{"तिग्रिन्या"} + tk{"तुर्कमन"} + tl{"तगालोग"} + tn{"सेत्स्वाना"} + to{"तोंगा"} + tr{"तुर्किष"} + ts{"त्सोगा"} + tt{"तटार"} + tw{"त्वि"} + ug{"उधूर"} + uk{"युक्रेनियन्"} + ur{"उर्दू"} + uz{"उज़बेक"} + vi{"वियत्नामीज़"} + vo{"ओलापुक"} + wo{"उलोफ़"} + xh{"झ़ौसा"} + yi{"इद्दिष्"} + yo{"यूरुबा"} + za{"झ्हुन्ग"} + zh{"चीनीस्"} + zu{"जुलू"} + } + LocaleScript{ + "Deva", + } + Version{"1.42"} + calendar{ + gregorian{ + AmPmMarkers{ + "म.पू.", + "म.नं.", + } + dayNames{ + format{ + abbreviated{ + "रवि", + "सोम", + "मंगळ", + "बुध", + "गुरु", + "शुक्र", + "शनि", + } + wide{ + "आदित्यवार", + "सोमवार", + "मंगळार", + "बुधवार", + "गुरुवार", + "शुक्रवार", + "शनिवार", + } + } + } + eras{ + abbreviated{ + "क्रिस्तपूर्व", + "क्रिस्तशखा", + } + } + monthNames{ + format{ + abbreviated{ + "जानेवारी", + "फेबृवारी", + "मार्च", + "एप्रिल", + "मे", + "जून", + "जुलै", + "ओगस्ट", + "सेप्टेंबर", + "ओक्टोबर", + "नोव्हेंबर", + "डिसेंबर", + } + wide{ + "जानेवारी", + "फेब्रुवारी", + "मार्च", + "एप्रिल", + "मे", + "जून", + "जुलै", + "ओगस्ट", + "सेप्टेंबर", + "ओक्टोबर", + "नोव्हेंबर", + "डिसेंबर", + } + } + } + } + } + zoneStrings{ + "Asia:Calcutta"{ + ec{"Calcutta"} + ld{"भारतीय समय"} + ls{"भारतीय समय"} + sd{"IST"} + ss{"IST"} + } + } +} diff --git a/icuSources/data/locales/kok_IN.txt b/icuSources/data/locales/kok_IN.txt index 6a7d29ac..4bf463c0 100644 --- a/icuSources/data/locales/kok_IN.txt +++ b/icuSources/data/locales/kok_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kok_IN.xml +// * Source File:/common/main/kok_IN.xml // * // *************************************************************************** kok_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.43"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", diff --git a/icuSources/data/locales/kw.txt b/icuSources/data/locales/kw.txt index 1ab3cc94..291f460a 100644 --- a/icuSources/data/locales/kw.txt +++ b/icuSources/data/locales/kw.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kw.xml +// * Source File:/common/main/kw.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/kw.xml + * ICU source: /xml/main/kw.xml */ kw{ Countries{ @@ -20,7 +20,7 @@ kw{ LocaleScript{ "Latn", } - Version{"1.2"} + Version{"1.37"} calendar{ gregorian{ AmPmMarkers{ diff --git a/icuSources/data/locales/kw_GB.txt b/icuSources/data/locales/kw_GB.txt index 69eb6d03..20994546 100644 --- a/icuSources/data/locales/kw_GB.txt +++ b/icuSources/data/locales/kw_GB.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/kw_GB.xml +// * Source File:/common/main/kw_GB.xml // * // *************************************************************************** kw_GB{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss", diff --git a/icuSources/data/locales/lt.txt b/icuSources/data/locales/lt.txt index afed6af9..6110a726 100644 --- a/icuSources/data/locales/lt.txt +++ b/icuSources/data/locales/lt.txt @@ -1,26 +1,55 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/lt.xml +// * Source File:/common/main/lt.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/lt.xml + * ICU source: /xml/main/lt.xml */ lt{ + AuxExemplarCharacters{"[q w x]"} Countries{ + 001{"Pasaulis"} + 002{"Afrika"} + 005{"Pietų Amerika"} + 011{"Vakarų Afrika"} + 013{"Centrinė Amerika"} + 014{"Rytų Afrika"} + 015{"Šiaurės Afrika"} + 017{"Vidurio Afrika"} + 018{"Pietų Afrika [018]"} + 019{"Amerika"} + 029{"Karibai"} + 030{"Rytų Azija"} + 034{"Pietų Azija"} + 035{"Pietryčių Azija"} + 039{"Pietų Europa"} + 053{"Australija ir Naujoji Zelandija"} + 054{"Melanezija"} + 057{"Mikronezija [057]"} + 061{"Polinezija"} + 142{"Azija"} + 143{"Centrinė Azija"} + 145{"Vakarų Azija"} + 150{"Europa"} + 151{"Rytų Europa"} + 154{"Šiaurės Europa"} + 155{"Vakarų Europa"} + 200{"Čekoslovakija"} + 419{"Lotynų Amerika ir Karibai"} AD{"Andora"} AE{"Jungtiniai Arabų Emyratai"} AF{"Afganistanas"} AG{"Antigva ir Barbuda"} - AI{"Angvila"} + AI{"Angilija"} AL{"Albanija"} AM{"Armėnija"} - AN{"Nyderlandų Antilai"} + AN{"Olandijos Antilai"} AO{"Angola"} - AQ{"Antarktika"} + AQ{"Antarktis"} AR{"Argentina"} AS{"Amerikos Samoa"} AT{"Austrija"} @@ -36,11 +65,11 @@ lt{ BH{"Bahreinas"} BI{"Burundis"} BJ{"Beninas"} - BM{"Bermudai"} + BM{"Bermuda"} BN{"Brunėjus"} BO{"Bolivija"} BR{"Brazilija"} - BS{"Bahamai"} + BS{"Bahamos"} BT{"Butanas"} BV{"Bouvet sala"} BW{"Botsvana"} @@ -52,18 +81,19 @@ lt{ CF{"Centrinės Afrikos Respublika"} CG{"Kongas"} CH{"Šveicarija"} - CI{"Kot d’Ivuar"} + CI{"Dramblio Kaulo Krantas"} CK{"Kuko salos"} CL{"Čilė"} CM{"Kamerūnas"} CN{"Kinija"} CO{"Kolumbija"} CR{"Kosta Rika"} + CS{"Serbija ir Juodkalnija"} CU{"Kuba"} - CV{"Žaliojo Kyšulio salos"} + CV{"Žaliasis Kyšulys"} CX{"Kalėdų sala"} CY{"Kipras"} - CZ{"Čekijos respublika"} + CZ{"Čekija"} DE{"Vokietija"} DJ{"Džibutis"} DK{"Danija"} @@ -79,8 +109,8 @@ lt{ ET{"Etiopija"} FI{"Suomija"} FJ{"Fidžis"} - FK{"Folklendo salos (Malvinai)"} - FM{"Mikronezijos Federacinės Valstijos"} + FK{"Falklando salos"} + FM{"Mikronezija"} FO{"Farerų salos"} FR{"Prancūzija"} GA{"Gabonas"} @@ -94,15 +124,15 @@ lt{ GM{"Gambija"} GN{"Gvinėja"} GP{"Gvadelupė"} - GQ{"Ekvatorinė Gvinėja"} + GQ{"Pusiaujo Gvinėja"} GR{"Graikija"} GS{"Rytų Džordžija ir Rytų Sandwich salos"} GT{"Gvatemala"} GU{"Guamas"} - GW{"Gvinėja-Bisau"} - GY{"Gviana"} + GW{"Bisau Gvinėja"} + GY{"Gajana"} HK{"Kinijos S.A.R.Honkongas"} - HM{"Heard ir McDonald salos"} + HM{"Heardo ir McDonaldo Salų Sritis"} HN{"Hondūras"} HR{"Kroatija"} HT{"Haitis"} @@ -111,9 +141,9 @@ lt{ IE{"Airija"} IL{"Izraelis"} IN{"Indija"} - IO{"Britų Indijos vandenyno teritorija"} + IO{"Indijos vandenyno britų sritis"} IQ{"Irakas"} - IR{"Irano"} + IR{"Iranas"} IS{"Islandija"} IT{"Italija"} JM{"Jamaika"} @@ -130,7 +160,7 @@ lt{ KW{"Kuveitas"} KY{"Kaimanų salos"} KZ{"Kazachstanas"} - LA{"Laoso Liaudies Demokratinė Respublika"} + LA{"Laosas"} LB{"Libanas"} LC{"Šventoji Liucija"} LI{"Lichtenšteinas"} @@ -140,21 +170,21 @@ lt{ LT{"Lietuva"} LU{"Liuksemburgas"} LV{"Latvija"} - LY{"Libijos Arabų Džamahirija"} + LY{"Libija"} MA{"Marokas"} MC{"Monakas"} - MD{"Moldovos Respublika"} + MD{"Moldova"} MG{"Madagaskaras"} - MH{"Maršalo salos"} - MK{"Makedonijos Respublika"} + MH{"Maršalo Salos"} + MK{"Makedonija"} ML{"Malis"} - MM{"Mjanma"} + MM{"Mianmaras"} MN{"Mongolija"} - MO{"Kinijos S.A.R. Makao"} - MP{"Šiaurinės Marianos salos"} + MO{"Macao"} + MP{"Marianos šiaurinės salos"} MQ{"Martinika"} MR{"Mauritanija"} - MS{"Montserat"} + MS{"Montserratas"} MT{"Malta"} MU{"Mauricijus"} MV{"Maldivai"} @@ -172,7 +202,7 @@ lt{ NO{"Norvegija"} NP{"Nepalas"} NR{"Nauru"} - NU{"Niujė"} + NU{"Niue"} NZ{"Naujoji Zelandija"} OM{"Omanas"} PA{"Panama"} @@ -190,7 +220,6 @@ lt{ PW{"Palau"} PY{"Paragvajus"} QA{"Kataras"} - RE{"Rejunjonas"} RO{"Rumunija"} RU{"Rusijos Federacija"} RW{"Ruanda"} @@ -208,18 +237,17 @@ lt{ SM{"San Marinas"} SN{"Senegalas"} SO{"Somalis"} - SP{"Serbia"} SR{"Surinamas"} ST{"San Tomė ir Principė"} - SV{"El Salvadoras"} + SV{"Salvadoras"} SY{"Sirija"} SZ{"Svazilendas"} - TC{"Turks ir Kaikos salos"} + TC{"Turkso ir Caicoso salos"} TD{"Čadas"} - TF{"Prancūzų pietinės teritorijos"} + TF{"Prancūzijos Pietų sritys"} TG{"Togas"} TH{"Tailandas"} - TJ{"Tadžikija"} + TJ{"Tadžikistanas"} TK{"Tokelau"} TL{"Rytų Timoras"} TM{"Turkmėnistanas"} @@ -228,40 +256,77 @@ lt{ TR{"Turkija"} TT{"Trinidadas ir Tobagas"} TV{"Tuvalu"} + TW{"Taivanas"} TZ{"Tanzanija"} UA{"Ukraina"} UG{"Uganda"} - UM{"JAV antraeilės teritorijos salos"} - US{"United States"} + UM{"Jungtinių Valstijų mažosios aplinkinės salos"} + US{"Jungtinės Valstijos"} UY{"Urugvajus"} - UZ{"Uzbekija"} - VA{"Vatikano Miesto Valstija"} + UZ{"Uzbekistanas"} + VA{"Vatikanas"} VC{"Šventasis Vincentas ir Grenadinai"} VE{"Venesuela"} - VG{"Britų Virginijos salos"} - VI{"JAV Virginijos salos"} + VG{"Didžiosios Britanijos Mergelių salos"} + VI{"Mergelių salos (JAV)"} VN{"Vietnamas"} VU{"Vanuatu"} - WF{"Valiso ir Futuna salos"} + WF{"Wallisas ir Futuna"} WS{"Samoa"} YE{"Jemenas"} - YT{"Majotė"} - YU{"Jugoslavija"} + YT{"Mayotte’as"} ZA{"Pietų Afrika"} ZM{"Zambija"} ZW{"Zimbabvė"} } Currencies{ + BRL{ + "BRL", + "Brazilijos realas", + } + CNY{ + "CNY", + "Ženminbi juanis", + } + EUR{ + "€", + "Euras", + } + GBP{ + "£", + "Svaras sterlingų", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/lt_LT.xml // * // *************************************************************************** lt_LT{ + Countries{ + 172{"Nepriklausomų Valstybių Sandrauga"} + } + Languages{ + ab{"Abchazų"} + ady{"Adygėjų"} + ale{"Aleutų"} + ang{"Senoji anglų (450-1100)"} + art{"Dirbtinė (kita)"} + aus{"Australų kalbos"} + az{"Azerbaidžaniečių"} + ba{"Baškirų"} + bat{"Baltų (kita)"} + be{"Baltarusių"} + ber{"Berberų"} + bnt{"Bantų"} + bo{"Tibetiečių"} + br{"Bretonų"} + bs{"Bosnių"} + bua{"Buriatų"} + ca{"Katalonų"} + cai{"Centrinės Amerikos indėnų (kita)"} + cau{"Kaukaziečių (kita)"} + ce{"Čečėnų"} + cel{"Keltų (kita)"} + co{"Korsikiečių"} + crh{"Krymo turkų; Krymo totorių"} + cu{"Bažnytinė slavų"} + cv{"Čiuvašų"} + cy{"Valų"} + eu{"Baskų"} + fa{"Persų"} + fiu{"Finougrų (kita)"} + fro{"Senoji prancūzų"} + fy{"Fryzų"} + ga{"Airių"} + gem{"Germanų (kita)"} + got{"Gotų"} + grc{"Senovės graikų"} + hy{"Armėnų"} + id{"Indoneziečių"} + ine{"Indoeuropiečių (kita)"} + inh{"Ingušų"} + ira{"Iraniečių"} + is{"Islandų"} + ka{"Gruzinų"} + kaa{"Karakalpakų"} + kbd{"Kabardinų"} + kk{"Kazachų"} + km{"Khmerų"} + ku{"Kurdų"} + ky{"Kirgizų"} + la{"Lotynų"} + lb{"Liuksemburgiečių"} + lez{"Lezginų"} + mis{"Įvairios kalbos"} + mk{"Makedonų"} + mn{"Mongolų"} + mo{"Moldavų"} + ms{"Malajų"} + mul{"Kelios kalbos"} + nai{"Šiaurės Amerikos indėnų (kita)"} + nap{"Neapoliečių"} + os{"Osetinų"} + paa{"Papuasų (kita)"} + peo{"Senoji persų"} + sa{"Sanskritas"} + sah{"Jakutų"} + sc{"Sardiniečių"} + scn{"Siciliečių"} + sco{"Škotų"} + sga{"Senoji airių"} + sla{"Slavų (kita)"} + sq{"Albanų"} + sr{"Serbų"} + sux{"Šumerų"} + ta{"Tamilų"} + tk{"Turkmėnų"} + tt{"Totorių"} + tyv{"Tuvių"} + udm{"Udmurtų"} + uk{"Ukrainiečių"} + und{"Nenustatyta"} + uz{"Uzbekų"} + vi{"Vietnamiečių"} + vo{"Volapiuk"} + wa{"Valonų"} + xal{"Kalmukų"} + yi{"Jidiš"} + } NumberPatterns{ - "##,##0.##;-##,##0.##", - "#,##0.00 ¤;-#,##0.00 ¤", - "#,##%", + "#,##0.###", + "#,##0.00 ¤", + "#,##0%", "#E0", } - Version{"1.2"} + Scripts{ + Arab{"Arabų"} + Armn{"Armėnų"} + Beng{"Bengalų"} + Cyrl{"Kirilica"} + Cyrs{"Kirilica (senasis bažnytinis variantas)"} + Egyp{"Egipto hieroglifai"} + Ethi{"Etiopų"} + Geor{"Gruzinų"} + Goth{"Gotų"} + Grek{"Graikų"} + Hebr{"Hebrajų"} + Hung{"Senasis vengrų"} + Ital{"Senasis italų"} + Kana{"Katakana"} + Khmr{"Khmerų"} + Latn{"Lotynų"} + Mong{"Mongolų"} + Runr{"Runų"} + } + Version{"1.40"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } + delimiters{ + alternateQuotationEnd{"“"} + alternateQuotationStart{"„"} + } } diff --git a/icuSources/data/locales/lv.txt b/icuSources/data/locales/lv.txt index 98deaec8..6eda10af 100644 --- a/icuSources/data/locales/lv.txt +++ b/icuSources/data/locales/lv.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/lv.xml +// * Source File:/common/main/lv.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/lv.xml + * ICU source: /xml/main/lv.xml */ lv{ + AuxExemplarCharacters{"[y q w x]"} Countries{ AD{"Andora"} AE{"Apvienotie Arābu Emirāti"} @@ -59,6 +60,7 @@ lv{ CN{"Ķīna"} CO{"Kolumbija"} CR{"Kostarika"} + CS{"Serbija un Melnkalne"} CU{"Kuba"} CV{"Kaboverde"} CX{"Ziemsvētku sala"} @@ -208,7 +210,6 @@ lv{ SM{"Sanmarīno"} SN{"Senegāla"} SO{"Somālija"} - SP{"Serbia"} SR{"Surinama"} ST{"Santome un Prinsipi"} SV{"Salvadora"} @@ -228,6 +229,7 @@ lv{ TR{"Turcija"} TT{"Trinidāda un Tobāgo"} TV{"Tuvalu"} + TW{"Taivāna"} TZ{"Tanzānija"} UA{"Ukraina"} UG{"Uganda"} @@ -246,7 +248,6 @@ lv{ WS{"Samoa"} YE{"Jemena"} YT{"Majota"} - YU{"Dienvidslāvija"} ZA{"Dienvidāfrika"} ZM{"Zambija"} ZW{"Zimbabve"} @@ -257,7 +258,7 @@ lv{ "LVL", } } - ExemplarCharacters{"[a-z ā ē ī ō ū ģ ķ ļ ņ ŗ č š ž]"} + ExemplarCharacters{"[a ā b c č d e ē f g ģ h i ī j k ķ l ļ m n ņ o p r s š t u ū v z ž]"} Languages{ ar{"arābu"} bg{"bulgāru"} @@ -304,16 +305,12 @@ lv{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.57"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -385,7 +382,23 @@ lv{ } } } + quarters{ + format{ + abbreviated{ + "C1", + "C2", + "C3", + "C4", + } + wide{ + "1. ceturksnis", + "2. ceturksnis", + "3. ceturksnis", + "4. ceturksnis", + } + } + } } } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} } diff --git a/icuSources/data/locales/lv_LV.txt b/icuSources/data/locales/lv_LV.txt index 3f4ce914..2f4c855e 100644 --- a/icuSources/data/locales/lv_LV.txt +++ b/icuSources/data/locales/lv_LV.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/lv_LV.xml +// * Source File:/common/main/lv_LV.xml // * // *************************************************************************** lv_LV{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} } diff --git a/icuSources/data/locales/mk.txt b/icuSources/data/locales/mk.txt index f9dcae9f..59247d22 100644 --- a/icuSources/data/locales/mk.txt +++ b/icuSources/data/locales/mk.txt @@ -1,1364 +1,1133 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/mk.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/mk.xml - */ -mk{ - Countries{ - AD{"Андора"} - AE{"Обединети Арапски Емирати"} - AF{"Авганистан"} - AG{"Антигуа и Барбуда"} - AI{"Ангвила"} - AL{"Албанија"} - AM{"Ерменија"} - AN{"Холандски Антили"} - AO{"Ангола"} - AQ{"Антарктик"} - AR{"Аргентина"} - AS{"Американска Самоа"} - AT{"Австрија"} - AU{"Австралија"} - AW{"Аруба"} - AZ{"Азејберџан"} - BA{"Босна и Херцеговина"} - BB{"Барбадос"} - BD{"Бангладеш"} - BE{"Белгија"} - BF{"Буркина Фасо"} - BG{"Бугарија"} - BH{"Бахреин"} - BI{"Бурунди"} - BJ{"Бенин"} - BM{"Бермуди"} - BN{"Брунеи"} - BO{"Боливија"} - BR{"Бразил"} - BS{"Бахами"} - BT{"Бутан"} - BV{"Боувитови острови"} - BW{"Боцвана"} - BY{"Белорусија"} - BZ{"Белизе"} - CA{"Канада"} - CC{"Кокосови острови"} - CD{"Демократска Република Конго"} - CF{"Централан Афричка република"} - CG{"Конго"} - CH{"Швајцарија"} - CI{"Брегот на Слоновата Коска"} - CK{"Кукови Острови"} - CL{"Чиле"} - CM{"Камерун"} - CN{"Кина"} - CO{"Колумбија"} - CR{"Костарика"} - CU{"Куба"} - CV{"Зеленортски Острови"} - CX{"Божиќни Острови"} - CY{"Кипар"} - CZ{"Чешка Република"} - DE{"Германија"} - DJ{"Џибути"} - DK{"Данска"} - DM{"Доминика"} - DO{"Доминиканска Република"} - DZ{"Алжир"} - EC{"Еквадор"} - EE{"Естонија"} - EG{"Египет"} - EH{"Западна Сахара"} - ER{"Еритреја"} - ES{"Шпанија"} - ET{"Етиопија"} - FI{"Финска"} - FJ{"Фиџи"} - FK{"Фокландски Острови"} - FM{"Микронезија"} - FO{"Фарски Острови"} - FR{"Франција"} - GA{"Габон"} - GB{"Велика Британија"} - GD{"Гренада"} - GE{"Џорџија"} - GF{"Француска Гуана"} - GH{"Гана"} - GI{"Гилбартар"} - GL{"Гренланд"} - GM{"Гамбија"} - GN{"Гвинеја"} - GP{"Гвадалупе"} - GQ{"Екваторска Гвинеја"} - GR{"Грција"} - GS{"Јужна Џорџија и Јужни Сендвич Острови"} - GT{"Гватемала"} - GU{"Гвам"} - GW{"Гвинеа-Биса"} - GY{"Гвајана"} - HK{"Хон Конг С.А.Р Кина"} - HM{"Хардови острови и Мекдоналд Острови"} - HN{"Хондурас"} - HR{"Хрватска"} - HT{"Хаити"} - HU{"Унгарија"} - ID{"Индонезија"} - IE{"Ирска"} - IL{"Израел"} - IN{"Индија"} - IO{"Британско Индиско Океанска територија"} - IQ{"Ирак"} - IR{"Иран"} - IS{"Исланд"} - IT{"Италија"} - JM{"Јамајка"} - JO{"Јордан"} - JP{"Јапонија"} - KE{"Кенија"} - KG{"Кургистан"} - KH{"Камбоџа"} - KI{"Кирибати"} - KM{"Коморос"} - KN{"Сент Кристофер и Невис"} - KP{"Северна Кореа"} - KR{"Јужна Кореа"} - KW{"Кувајт"} - KY{"Кајманови Острови"} - KZ{"Казаџстан"} - LA{"Лаос"} - LB{"Либанон"} - LC{"Света Лучија"} - LI{"Лихтенштајн"} - LK{"Шри Ланка"} - LR{"Либериа"} - LS{"Лешото"} - LT{"Литванија"} - LU{"Луксембург"} - LV{"Латвија"} - LY{"Либија"} - MA{"Мароко"} - MC{"Монако"} - MD{"Молдова"} - MG{"Мадагаскар"} - MH{"Маршалови ОСтрови"} - MK{"Македонија"} - ML{"Мали"} - MM{"Муанмар"} - MN{"Монголија"} - MO{"Макао С.А.Р Кина"} - MP{"Северни Маријанини Острови"} - MQ{"Мартиник"} - MR{"Мавританија"} - MS{"Монсерат"} - MT{"Малта"} - MU{"Мауритус"} - MV{"Малдиви"} - MW{"Малави"} - MX{"Мексико"} - MY{"Малезија"} - MZ{"Мозамбе"} - NA{"Намибија"} - NC{"Нова Каледонија"} - NE{"Нигер"} - NF{"Нофролк Остров"} - NG{"Нигерија"} - NI{"Никараква"} - NL{"Холандија"} - NO{"Норвешка"} - NP{"Непал"} - NR{"Науру"} - NU{"Ние"} - NZ{"Нов Зеланд"} - OM{"Оман"} - PA{"Панама"} - PE{"Перу"} - PF{"Француска Полинезија"} - PG{"Папуа Нова Гвинеја"} - PH{"Филипини"} - PK{"Пакистан"} - PL{"Полска"} - PM{"Сент Пјер и Микелан"} - PN{"Питкарн"} - PR{"Порторико"} - PS{"Палестинска Територија"} - PT{"Португалија"} - PW{"Палау"} - PY{"Парагвај"} - QA{"Кватар"} - RE{"Рејунион"} - RO{"Романија"} - RU{"Русија"} - RW{"Руанда"} - SA{"Саудиска Арабија"} - SB{"Соломоновите Острови"} - SC{"Сејшели"} - SD{"Судан"} - SE{"Шведска"} - SG{"Сингапур"} - SH{"Света Елена"} - SI{"Словенија"} - SJ{"Свалбард и Жан Мијен Острови"} - SK{"Словачка"} - SL{"Сиера Леоне"} - SM{"Сан Марино"} - SN{"Сенегал"} - SO{"Сомалија"} - SP{"Србија"} - SR{"Суринам"} - ST{"Сао Томе и Принципе"} - SV{"Ел Салвадор"} - SY{"Сирија"} - SZ{"Свазиленд"} - TC{"Турк и Каикос Острови"} - TD{"Чад"} - TF{"Француски Јужни територии"} - TG{"Того"} - TH{"Тајланд"} - TJ{"Таџикистан"} - TK{"Токелау"} - TL{"Источен Тимор"} - TM{"Туркменистан"} - TN{"Тунис"} - TO{"Тонга"} - TR{"Турција"} - TT{"Тринидад и Тобаго"} - TV{"Тувалу"} - TW{"Тајван"} - TZ{"Танзанија"} - UA{"Украина"} - UG{"Уганда"} - US{"Обединети Држави"} - UY{"Уругвај"} - UZ{"Узбекистан"} - VA{"Ватикан"} - VC{"Сент Винцент и Гренадините"} - VE{"Венецуела"} - VG{"Британски Девствени Острови"} - VI{"Девствени Острови на САД"} - VN{"Виетнам"} - VU{"Ванату"} - WF{"Волис и Футуна острови"} - WS{"Самоа"} - YE{"Јемен"} - YT{"Мајоте"} - YU{"Југославија"} - ZA{"Јужна Африка"} - ZM{"Замбија"} - ZW{"Зимбабве"} - } - Currencies{ - ADD{ - "ADD", - "Андорски Динер", - } - ADP{ - "ADP", - "Андорска Пезета", - } - AED{ - "AED", - "Дирхам", - } - AFA{ - "AFA", - "Авгани (1927-2002)", - } - AFN{ - "Af", - "Авгани", - } - ALK{ - "ALK", - "Албански лек (1946-1961)", - } - ALL{ - "lek", - "Албански Лек", - } - ALV{ - "ALV", - "Албанска Лек Валута", - } - AMD{ - "dram", - "Ермениски Драм", - } - AOA{ - "AOA", - "Анголска Кванза", - } - AOK{ - "AOK", - "Анголска Кванза (1977-1990)", - } - AON{ - "AON", - "Анголска нова Кванза (1990-2000)", - } - AOS{ - "AOS", - "Анголско ескудо", - } - ARP{ - "ARP", - "Аргентински Пезос (1983-1985)", - } - ARS{ - "Arg$", - "Аргентински Пезос", - } - ATS{ - "ATS", - "Австралиски Шилинг", - } - AUD{ - "$A", - "Австралиски Долар", - } - AUP{ - "AUP", - "Австралиска Фунта", - } - BAD{ - "BAD", - "Босанско-Херцеговски Динар", - } - BAM{ - "KM", - "Босанско-Херцеговски Динар конвертабилна марка", - } - BAN{ - "BAN", - "Босанско-Херцеговски нов Динар", - } - BBD{ - "BDS$", - "Барбадоски Долар", - } - BEC{ - "BEC", - "Белгиски Франк (конвертибилен)", - } - BEF{ - "BF", - "Белгиски Франк", - } - BEL{ - "BEL", - "Белгиски Франк (финансиски)", - } - BGL{ - "lev", - "Бугарски цврст лев", - } - BGM{ - "BGM", - "Бугарски социјалистички лев", - } - BGN{ - "BGN", - "Бугарски нов лев", - } - BGO{ - "BGO", - "Бугарски лев(1879-1952)", - } - BHD{ - "BD", - "Бахраински Динар", - } - BIF{ - "Fbu", - "Буриндиски Франк", - } - BMD{ - "Ber$", - "Бермудски Долар", - } - BMP{ - "BMP", - "Бермудски фунта", - } - BND{ - "BND", - "Брунејски долар", - } - BSD{ - "BSD", - "Бахамски Долар", - } - BSP{ - "BSP", - "Бахамска Фунта", - } - BTR{ - "BTR", - "Бутански Рупии", - } - BUR{ - "BUR", - "Бурмезиски рупии", - } - BWP{ - "BWP", - "Боцвантска Пула", - } - BYB{ - "BYB", - "Белоруска нова рубља (1994-1999)", - } - BYL{ - "BYL", - "Белоруска Рубља (1992-1994)", - } - BYR{ - "Rbl", - "Белоруска Рубља", - } - BZD{ - "BZ$", - "Белизиски Долар", - } - BZH{ - "BZH", - "Британско Хондурски Долар", - } - CAD{ - "Can$", - "Канадски Долар", - } - CHF{ - "SwF", - "Швајцарски Франк", - } - COP{ - "Col$", - "Колумбиски Пезос", - } - CRC{ - "C", - "Костарикански Колон", - } - CSC{ - "CSC", - "Чехословачка корона", - } - CSK{ - "CSK", - "Чехословачка цврста корона", - } - CUP{ - "CUP", - "Кубански пезос", - } - CYP{ - "£C", - "Кипарска фунта", - } - CZK{ - "CZK", - "Чешка корона", - } - DEM{ - "DEM", - "Германска Марка", - } - DOP{ - "RD$", - "Доминикански Пезос", - } - DZD{ - "DA", - "Алгериски Динар", - } - DZF{ - "DZF", - "Алгериски нов Франк", - } - EGP{ - "EGP", - "Египетска Фунта", - } - ESP{ - "ESP", - "Шпанска Пезета", - } - ETB{ - "Br", - "Етиописки Бир", - } - ETD{ - "ETD", - "Етиописки Долар", - } - EUR{ - "€", - "Евро", - } - FIM{ - "FIM", - "Финска марка", - } - FIN{ - "FIN", - "Финска Марка (1860-1962)", - } - FJD{ - "F$", - "Фиџи долар", - } - FJP{ - "FJP", - "Фиџи фунта", - } - FKP{ - "FKP", - "Факландска фунта", - } - FRF{ - "FRF", - "Француски франк", - } - GAF{ - "GAF", - "Габон CFA Франк", - } - GBP{ - "£", - "Британска Фунта", - } - GEL{ - "lari", - "Грузиски лари", - } - GHC{ - "GHC", - "Ганајски Седи", - } - GHO{ - "GHO", - "Ганајски стари Седи", - } - GHP{ - "GHP", - "Ганајски фунта", - } - GIP{ - "GIP", - "Гибралтарска фунта", - } - GLK{ - "GLK", - "Гренландск круна", - } - GMD{ - "GMD", - "Гамбиски Даласи", - } - GMP{ - "GMP", - "Гамбиска Фунта", - } - GNF{ - "GF", - "Гвинејски франк", - } - GNI{ - "GNI", - "Гвинејски франк (1960-1972)", - } - GRD{ - "GRD", - "Грчка драхма", - } - GRN{ - "GRN", - "Грчка драхма", - } - GTQ{ - "Q", - "Гватемалски кветцал", - } - GWP{ - "GWP", - "Гвинејски Бисау пезос", - } - GYD{ - "G$", - "Гвијански Долар", - } - HKD{ - "HK$", - "Хонгкошки долар", - } - HNL{ - "L", - "Хондурска лемпира", - } - HRD{ - "HRD", - "Хрватски динар", - } - HRK{ - "HRK", - "Хрватска Куна", - } - HTG{ - "HTG", - "Хаитски гурд", - } - HUF{ - "Ft", - "Унгарска форинта", - } - IBP{ - "IBP", - "Северноирска фунта", - } - IEP{ - "IR£", - "Ирска фунта", - } - ILL{ - "ILL", - "Израелски шекел", - } - ILP{ - "ILP", - "Изрелска фунта", - } - ILS{ - "ILS", - "Израелски нов шекел", - } - INR{ - "INR", - "Индиска рупија", - } - IQD{ - "ID", - "Ирачки динар", - } - IRR{ - "RI", - "Ирански риал", - } - ISK{ - "ISK", - "Исландска крона", - } - ITL{ - "₤", - "Италијанкса лира", - } - JMD{ - "J$", - "Јамајкански долар", - } - JMP{ - "JMP", - "Јамајканска фунта", - } - JOD{ - "JD", - "Јордански динар", - } - JPY{ - "¥", - "Јапонски јен", - } - KES{ - "K Sh", - "Кениски шилинг", - } - KGS{ - "som", - "Киргистански сом", - } - KHO{ - "KHO", - "Камбоџиски стар рел", - } - KHR{ - "CR", - "Камбоџиски рел", - } - KID{ - "KID", - "Кирбатски долар", - } - KMF{ - "CF", - "Коморски долар", - } - KPW{ - "KPW", - "Северно корејски вон", - } - KRH{ - "KRH", - "Јужно корески хван", - } - KRO{ - "KRO", - "Јужно корејски стар вон", - } - KRW{ - "KRW", - "Јужно корејски вон", - } - KWD{ - "KD", - "Кувајтски динар", - } - KZR{ - "KZR", - "Казакстанска рубља", - } - KZT{ - "T", - "Казакстантска тенга", - } - LAK{ - "LAK", - "Лаоски кип", - } - LBP{ - "LL", - "Либиска фунта", - } - LIF{ - "LIF", - "Лихнтенштајнски франк", - } - LKR{ - "SL Re", - "Шриланканска рупија", - } - LNR{ - "LNR", - "Цејлонска рупија", - } - LRD{ - "LRD", - "Либериски долар", - } - LSL{ - "M", - "Лесотско лоти", - } - LTL{ - "LTL", - "Литваниска лита", - } - LTT{ - "LTT", - "Литваниски литаз", - } - LUF{ - "LUF", - "Луксембуршки франк", - } - LVL{ - "LVL", - "Латвијски лат", - } - LVR{ - "LVR", - "Латвијска рубља", - } - LYD{ - "LD", - "Либијски динар", - } - LYP{ - "LYP", - "Либијска фунта", - } - MAD{ - "MAD", - "Марокански Дирхам", - } - MAF{ - "MAF", - "Марконски франк", - } - MDL{ - "MDL", - "Молдавски леу", - } - MKD{ - "MDen", - "Македонски денар", - } - MKN{ - "MKN", - "Македонски денар (1992-1993)", - } - MLF{ - "MLF", - "Малски франк", - } - MNT{ - "Tug", - "Монголиски тугрик", - } - MOP{ - "MOP", - "Макао патака", - } - MTL{ - "Lm", - "Малтиска лира", - } - MTP{ - "MTP", - "Малтиска финта", - } - MWP{ - "MWP", - "Малависка фунта", - } - MXN{ - "MEX$", - "Мексикански пезос", - } - MXP{ - "MXP", - "Мексикански сребрен пезос (1861-1992)", - } - MYR{ - "RM", - "Малазиски рингит", - } - MZE{ - "MZE", - "Мозамбиско ескудо", - } - MZM{ - "Mt", - "Мозамбиски метикал", - } - NAD{ - "N$", - "Намибиски долар", - } - NGN{ - "NGN", - "Нигериска наира", - } - NGP{ - "NGP", - "Нигериска фунта", - } - NIC{ - "NIC", - "Никарагванска кордоба", - } - NIG{ - "NIG", - "Никарагванска златна кордоба", - } - NLG{ - "NLG", - "Холандски гилдер", - } - NOK{ - "NKr", - "Норвешка круна", - } - NPR{ - "Nrs", - "Непалска рупија", - } - NZD{ - "$NZ", - "Новозелански долар", - } - NZP{ - "NZP", - "Новозеландка фунта", - } - OMR{ - "RO", - "Омански Риал", - } - PAB{ - "PAB", - "Панамска балбоа", - } - PEN{ - "PEN", - "Перуански нов сол", - } - PES{ - "PES", - "Перуански сол", - } - PGK{ - "PGK", - "Папуа новогвинејскиа кина", - } - PHP{ - "PHP", - "Филипински пезос", - } - PKR{ - "Pra", - "Пакистанска рупија", - } - PLN{ - "Zl", - "Полска злота", - } - PLZ{ - "PLZ", - "Полска злота (1950-1995)", - } - PSP{ - "PSP", - "Палестинска фунта", - } - PTC{ - "PTC", - "Португалско конто", - } - PTE{ - "PTE", - "Португалско ескудо", - } - PYG{ - "PYG", - "Парагвајска гуарана", - } - QAR{ - "QR", - "Кватарски риал", - } - ROL{ - "leu", - "Романска леа", - } - RON{ - "RON", - "Романска нова леа", - } - RUB{ - "RUB", - "Руска рубља", - } - RUR{ - "RUR", - "Руска рубља (1991-1998)", - } - RWF{ - "RWF", - "Руандски франк", - } - SAR{ - "SRl", - "Саудиски риал", - } - SBD{ - "SI$", - "Соломонски долар", - } - SCR{ - "SR", - "Сејшелска рупија", - } - SDD{ - "SDD", - "Судански динар", - } - SDP{ - "SDP", - "Суданска фунта", - } - SEK{ - "SKr", - "Шведска круна", - } - SGD{ - "S$", - "Сингапурски доалр", - } - SIB{ - "SIB", - "Словенски толар бон", - } - SIT{ - "SIT", - "Словенски толар", - } - SKK{ - "Sk", - "Словачка круна", - } - SLL{ - "SLL", - "Сиералеонско леоне", - } - SML{ - "SML", - "Санмаринска лира", - } - SOS{ - "So. Sh.", - "Сомалијски шилинг", - } - SRG{ - "Sf", - "Суринамски гилдер", - } - SSP{ - "SSP", - "Шкотска фунта", - } - SUN{ - "SUN", - "Советска нова рубља", - } - SUR{ - "SUR", - "Советска рубља", - } - SVC{ - "SVC", - "Елсавадорски колон", - } - SYP{ - "LS", - "Сириска фунта", - } - SZL{ - "E", - "Свазилендски лилаген", - } - TDF{ - "TDF", - "‘адски франк", - } - THB{ - "THB", - "Таи бат", - } - TJR{ - "TJR", - "таџикистанска рубља", - } - TJS{ - "TJS", - "Таџикистантски сомони", - } - TMM{ - "TMM", - "Турментистантски матат", - } - TND{ - "TND", - "Тунезиски динар", - } - TPE{ - "TPE", - "Тиморски ескудо", - } - TPP{ - "TPP", - "Тиморска патака", - } - TRL{ - "TL", - "Турска лира", - } - TVD{ - "TVD", - "Тувалски долар", - } - TWD{ - "NT$", - "Тајвански нов долар", - } - TZS{ - "T Sh", - "Танзаниски шилинг", - } - UAH{ - "UAH", - "Украинска хривнија", - } - UGS{ - "UGS", - "Угандиски шилинг (1966-1987)", - } - UGX{ - "U Sh", - "Угандиски шилинг", - } - USD{ - "US$", - "САД долар", - } - USN{ - "USN", - "САД долар (Next day)", - } - USS{ - "USS", - "САД долар (Same day)", - } - UYP{ - "UYP", - "Уругвајско песо (1975-1993)", - } - UZS{ - "UZS", - "УЗбекистански Сум", - } - VAL{ - "VAL", - "Ватиканска лира", - } - VEB{ - "Be", - "Венецуелски боливар", - } - VND{ - "VND", - "Виетнамски донг", - } - VNN{ - "VNN", - "Виетнамски нов донг", - } - VNR{ - "VNR", - "Виетнамски републички донг", - } - VNS{ - "VNS", - "Виетнамски национален донг", - } - VUV{ - "VT", - "Ванатски вату", - } - WSP{ - "WSP", - "Самоа фунта", - } - WST{ - "WST", - "Самоа тала", - } - XCD{ - "EC$", - "Источно карибиски долар", - } - XID{ - "XID", - "Исламски динар", - } - YDD{ - "YDD", - "Јеменски дианр", - } - YER{ - "YRl", - "Јеменски риал", - } - YUD{ - "YUD", - "Југословенски динар", - } - YUN{ - "YUN", - "Југословенски конвертибилен динар", - } - ZAL{ - "ZAL", - "Јужно афрички ранд(финансиски)", - } - ZAP{ - "ZAP", - "Јужно африча фунта", - } - ZAR{ - "R", - "Јужно афрички ранд", - } - ZMK{ - "ZMK", - "Замбиска кванча", - } - ZMP{ - "ZMP", - "Замбиска фунта", - } - ZRN{ - "ZRN", - "Заирско новозаире", - } - ZRZ{ - "ZRZ", - "Зирско заире", - } - ZWD{ - "Z$", - "Зимбабвиски долар", - } - } - ExemplarCharacters{"[а-и к-ш ѐ ѓ ѕ ј љ њ ќ ѝ џ]"} - Keys{ - calendar{"Календар"} - collation{"Сортирање"} - currency{"Валута"} - } - Languages{ - mk{"македонски"} - } - LocaleScript{ - "Cyrl", - } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Types{ - calendar{ - buddhist{"Будистички календар"} - chinese{"Кинески Календар"} - gregorian{"Грегориански Календар"} - hebrew{"Еврејски Календар"} - islamic{"Исламски Календар"} - islamic-civil{"Исламско граѓански Календар"} - japanese{"Јапонски Календар"} - } - collation{ - direct{"Директно"} - phonebook{"Азбучен редослед"} - pinyin{"Сортирање Pinyin"} - stroke{"Ритмички редослед"} - traditional{"Традиционално"} - } - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH:mm:ss z", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - "EEEE, dd MMMM yyyy", - "dd MMMM yyyy", - "dd.M.yyyy", - "dd.M.yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "нед.", - "пон.", - "вт.", - "сре.", - "чет.", - "пет.", - "саб.", - } - narrow{ - "н", - "п", - "в", - "с", - "ч", - "п", - "с", - } - wide{ - "недела", - "понеделник", - "вторник", - "среда", - "четврток", - "петок", - "сабота", - } - } - } - eras{ - abbreviated{ - "пр.н.е.", - "ае.", - } - } - monthNames{ - format{ - abbreviated{ - "јан.", - "фев.", - "мар.", - "апр.", - "мај.", - "јун.", - "јул.", - "авг.", - "септ.", - "окт.", - "ноем.", - "декем.", - } - narrow{ - "ј", - "ф", - "м", - "а", - "м", - "ј", - "ј", - "а", - "се", - "о", - "но", - "д", - } - wide{ - "јануари", - "февруари", - "март", - "април", - "мај", - "јуни", - "јули", - "август", - "септември", - "октомври", - "ноември", - "декември", - } - } - } - } - } - localPatternChars{"GuMtkHmsSEDFwWahKzUeygAZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/mk.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/mk.xml + */ +mk{ + AuxExemplarCharacters{"[ѐ ѝ]"} + Countries{ + AD{"Андора"} + AE{"Обединети Арапски Емирати"} + AF{"Авганистан"} + AG{"Антигуа и Барбуда"} + AI{"Ангвила"} + AL{"Албанија"} + AM{"Ерменија"} + AN{"Холандски Антили"} + AO{"Ангола"} + AQ{"Антарктик"} + AR{"Аргентина"} + AS{"Американска Самоа"} + AT{"Австрија"} + AU{"Австралија"} + AW{"Аруба"} + AZ{"Азејберџан"} + BA{"Босна и Херцеговина"} + BB{"Барбадос"} + BD{"Бангладеш"} + BE{"Белгија"} + BF{"Буркина Фасо"} + BG{"Бугарија"} + BH{"Бахреин"} + BI{"Бурунди"} + BJ{"Бенин"} + BM{"Бермуди"} + BN{"Брунеи"} + BO{"Боливија"} + BR{"Бразил"} + BS{"Бахами"} + BT{"Бутан"} + BV{"Боувитови острови"} + BW{"Боцвана"} + BY{"Белорусија"} + BZ{"Белизе"} + CA{"Канада"} + CC{"Кокосови острови"} + CD{"Демократска Република Конго"} + CF{"Централан Афричка република"} + CG{"Конго"} + CH{"Швајцарија"} + CI{"Брегот на Слоновата Коска"} + CK{"Кукови Острови"} + CL{"Чиле"} + CM{"Камерун"} + CN{"Кина"} + CO{"Колумбија"} + CR{"Костарика"} + CS{"Србија и Црна Гора"} + CU{"Куба"} + CV{"Зеленортски Острови"} + CX{"Божиќни Острови"} + CY{"Кипар"} + CZ{"Чешка Република"} + DE{"Германија"} + DJ{"Џибути"} + DK{"Данска"} + DM{"Доминика"} + DO{"Доминиканска Република"} + DZ{"Алжир"} + EC{"Еквадор"} + EE{"Естонија"} + EG{"Египет"} + EH{"Западна Сахара"} + ER{"Еритреја"} + ES{"Шпанија"} + ET{"Етиопија"} + FI{"Финска"} + FJ{"Фиџи"} + FK{"Фокландски Острови"} + FM{"Микронезија"} + FO{"Фарски Острови"} + FR{"Франција"} + GA{"Габон"} + GB{"Велика Британија"} + GD{"Гренада"} + GE{"Џорџија"} + GF{"Француска Гуана"} + GH{"Гана"} + GI{"Гилбартар"} + GL{"Гренланд"} + GM{"Гамбија"} + GN{"Гвинеја"} + GP{"Гвадалупе"} + GQ{"Екваторска Гвинеја"} + GR{"Грција"} + GS{"Јужна Џорџија и Јужни Сендвич Острови"} + GT{"Гватемала"} + GU{"Гвам"} + GW{"Гвинеа-Биса"} + GY{"Гвајана"} + HK{"Хон Конг С.А.Р Кина"} + HM{"Хардови острови и Мекдоналд Острови"} + HN{"Хондурас"} + HR{"Хрватска"} + HT{"Хаити"} + HU{"Унгарија"} + ID{"Индонезија"} + IE{"Ирска"} + IL{"Израел"} + IN{"Индија"} + IO{"Британско Индиско Океанска територија"} + IQ{"Ирак"} + IR{"Иран"} + IS{"Исланд"} + IT{"Италија"} + JM{"Јамајка"} + JO{"Јордан"} + JP{"Јапонија"} + KE{"Кенија"} + KG{"Кургистан"} + KH{"Камбоџа"} + KI{"Кирибати"} + KM{"Коморос"} + KN{"Сент Кристофер и Невис"} + KP{"Северна Кореа"} + KR{"Јужна Кореа"} + KW{"Кувајт"} + KY{"Кајманови Острови"} + KZ{"Казаџстан"} + LA{"Лаос"} + LB{"Либанон"} + LC{"Света Лучија"} + LI{"Лихтенштајн"} + LK{"Шри Ланка"} + LR{"Либериа"} + LS{"Лешото"} + LT{"Литванија"} + LU{"Луксембург"} + LV{"Латвија"} + LY{"Либија"} + MA{"Мароко"} + MC{"Монако"} + MD{"Молдова"} + MG{"Мадагаскар"} + MH{"Маршалови ОСтрови"} + MK{"Македонија"} + ML{"Мали"} + MM{"Муанмар"} + MN{"Монголија"} + MO{"Макао С.А.Р Кина"} + MP{"Северни Маријанини Острови"} + MQ{"Мартиник"} + MR{"Мавританија"} + MS{"Монсерат"} + MT{"Малта"} + MU{"Мауритус"} + MV{"Малдиви"} + MW{"Малави"} + MX{"Мексико"} + MY{"Малезија"} + MZ{"Мозамбе"} + NA{"Намибија"} + NC{"Нова Каледонија"} + NE{"Нигер"} + NF{"Нофролк Остров"} + NG{"Нигерија"} + NI{"Никараква"} + NL{"Холандија"} + NO{"Норвешка"} + NP{"Непал"} + NR{"Науру"} + NU{"Ние"} + NZ{"Нов Зеланд"} + OM{"Оман"} + PA{"Панама"} + PE{"Перу"} + PF{"Француска Полинезија"} + PG{"Папуа Нова Гвинеја"} + PH{"Филипини"} + PK{"Пакистан"} + PL{"Полска"} + PM{"Сент Пјер и Микелан"} + PN{"Питкарн"} + PR{"Порторико"} + PS{"Палестинска Територија"} + PT{"Португалија"} + PW{"Палау"} + PY{"Парагвај"} + QA{"Кватар"} + RE{"Рејунион"} + RO{"Романија"} + RU{"Русија"} + RW{"Руанда"} + SA{"Саудиска Арабија"} + SB{"Соломоновите Острови"} + SC{"Сејшели"} + SD{"Судан"} + SE{"Шведска"} + SG{"Сингапур"} + SH{"Света Елена"} + SI{"Словенија"} + SJ{"Свалбард и Жан Мијен Острови"} + SK{"Словачка"} + SL{"Сиера Леоне"} + SM{"Сан Марино"} + SN{"Сенегал"} + SO{"Сомалија"} + SR{"Суринам"} + ST{"Сао Томе и Принципе"} + SV{"Ел Салвадор"} + SY{"Сирија"} + SZ{"Свазиленд"} + TC{"Турк и Каикос Острови"} + TD{"Чад"} + TF{"Француски Јужни територии"} + TG{"Того"} + TH{"Тајланд"} + TJ{"Таџикистан"} + TK{"Токелау"} + TL{"Источен Тимор"} + TM{"Туркменистан"} + TN{"Тунис"} + TO{"Тонга"} + TR{"Турција"} + TT{"Тринидад и Тобаго"} + TV{"Тувалу"} + TW{"Тајван"} + TZ{"Танзанија"} + UA{"Украина"} + UG{"Уганда"} + US{"Обединети Држави"} + UY{"Уругвај"} + UZ{"Узбекистан"} + VA{"Ватикан"} + VC{"Сент Винцент и Гренадините"} + VE{"Венецуела"} + VG{"Британски Девствени Острови"} + VI{"Девствени Острови на САД"} + VN{"Виетнам"} + VU{"Ванату"} + WF{"Волис и Футуна острови"} + WS{"Самоа"} + YE{"Јемен"} + YT{"Мајоте"} + ZA{"Јужна Африка"} + ZM{"Замбија"} + ZW{"Зимбабве"} + } + Currencies{ + ADP{ + "ADP", + "Андорска Пезета", + } + AED{ + "AED", + "Дирхам", + } + AFA{ + "AFA", + "Авгани (1927-2002)", + } + AFN{ + "Af", + "Авгани", + } + ALL{ + "lek", + "Албански Лек", + } + AMD{ + "dram", + "Ермениски Драм", + } + AOA{ + "AOA", + "Анголска Кванза", + } + AOK{ + "AOK", + "Анголска Кванза (1977-1990)", + } + AON{ + "AON", + "Анголска нова Кванза (1990-2000)", + } + ARP{ + "ARP", + "Аргентински Пезос (1983-1985)", + } + ARS{ + "Arg$", + "Аргентински Пезос", + } + ATS{ + "ATS", + "Австралиски Шилинг", + } + AUD{ + "$A", + "Австралиски Долар", + } + BAD{ + "BAD", + "Босанско-Херцеговски Динар", + } + BAM{ + "KM", + "Босанско-Херцеговски Динар конвертабилна марка", + } + BBD{ + "BDS$", + "Барбадоски Долар", + } + BEC{ + "BEC", + "Белгиски Франк (конвертибилен)", + } + BEF{ + "BF", + "Белгиски Франк", + } + BEL{ + "BEL", + "Белгиски Франк (финансиски)", + } + BGL{ + "lev", + "Бугарски цврст лев", + } + BGN{ + "BGN", + "Бугарски нов лев", + } + BHD{ + "BD", + "Бахраински Динар", + } + BIF{ + "Fbu", + "Буриндиски Франк", + } + BMD{ + "Ber$", + "Бермудски Долар", + } + BND{ + "BND", + "Брунејски долар", + } + BSD{ + "BSD", + "Бахамски Долар", + } + BWP{ + "BWP", + "Боцвантска Пула", + } + BYB{ + "BYB", + "Белоруска нова рубља (1994-1999)", + } + BYR{ + "Rbl", + "Белоруска Рубља", + } + BZD{ + "BZ$", + "Белизиски Долар", + } + CAD{ + "Can$", + "Канадски Долар", + } + CHF{ + "SwF", + "Швајцарски Франк", + } + COP{ + "Col$", + "Колумбиски Пезос", + } + CRC{ + "C", + "Костарикански Колон", + } + CSK{ + "CSK", + "Чехословачка цврста корона", + } + CUP{ + "CUP", + "Кубански пезос", + } + CYP{ + "£C", + "Кипарска фунта", + } + CZK{ + "CZK", + "Чешка корона", + } + DEM{ + "DEM", + "Германска Марка", + } + DOP{ + "RD$", + "Доминикански Пезос", + } + DZD{ + "DA", + "Алгериски Динар", + } + EGP{ + "EGP", + "Египетска Фунта", + } + ESP{ + "ESP", + "Шпанска Пезета", + } + ETB{ + "Br", + "Етиописки Бир", + } + EUR{ + "€", + "Евро", + } + FIM{ + "FIM", + "Финска марка", + } + FJD{ + "F$", + "Фиџи долар", + } + FKP{ + "FKP", + "Факландска фунта", + } + FRF{ + "FRF", + "Француски франк", + } + GBP{ + "£", + "Британска Фунта", + } + GEL{ + "lari", + "Грузиски лари", + } + GHC{ + "GHC", + "Ганајски Седи", + } + GIP{ + "GIP", + "Гибралтарска фунта", + } + GMD{ + "GMD", + "Гамбиски Даласи", + } + GNF{ + "GF", + "Гвинејски франк", + } + GRD{ + "GRD", + "Грчка драхма", + } + GTQ{ + "Q", + "Гватемалски кветцал", + } + GWP{ + "GWP", + "Гвинејски Бисау пезос", + } + GYD{ + "G$", + "Гвијански Долар", + } + HKD{ + "HK$", + "Хонгкошки долар", + } + HNL{ + "L", + "Хондурска лемпира", + } + HRD{ + "HRD", + "Хрватски динар", + } + HRK{ + "HRK", + "Хрватска Куна", + } + HTG{ + "HTG", + "Хаитски гурд", + } + HUF{ + "Ft", + "Унгарска форинта", + } + IEP{ + "IR£", + "Ирска фунта", + } + ILP{ + "ILP", + "Изрелска фунта", + } + ILS{ + "ILS", + "Израелски нов шекел", + } + INR{ + "INR", + "Индиска рупија", + } + IQD{ + "ID", + "Ирачки динар", + } + IRR{ + "RI", + "Ирански риал", + } + ISK{ + "ISK", + "Исландска крона", + } + ITL{ + "₤", + "Италијанкса лира", + } + JMD{ + "J$", + "Јамајкански долар", + } + JOD{ + "JD", + "Јордански динар", + } + JPY{ + "¥", + "Јапонски јен", + } + KES{ + "K Sh", + "Кениски шилинг", + } + KGS{ + "som", + "Киргистански сом", + } + KHR{ + "CR", + "Камбоџиски рел", + } + KMF{ + "CF", + "Коморски долар", + } + KPW{ + "KPW", + "Северно корејски вон", + } + KRW{ + "KRW", + "Јужно корејски вон", + } + KWD{ + "KD", + "Кувајтски динар", + } + KZT{ + "T", + "Казакстантска тенга", + } + LAK{ + "LAK", + "Лаоски кип", + } + LBP{ + "LL", + "Либиска фунта", + } + LKR{ + "SL Re", + "Шриланканска рупија", + } + LRD{ + "LRD", + "Либериски долар", + } + LSL{ + "M", + "Лесотско лоти", + } + LTL{ + "LTL", + "Литваниска лита", + } + LTT{ + "LTT", + "Литваниски литаз", + } + LUF{ + "LUF", + "Луксембуршки франк", + } + LVL{ + "LVL", + "Латвијски лат", + } + LVR{ + "LVR", + "Латвијска рубља", + } + LYD{ + "LD", + "Либијски динар", + } + MAD{ + "MAD", + "Марокански Дирхам", + } + MAF{ + "MAF", + "Марконски франк", + } + MDL{ + "MDL", + "Молдавски леу", + } + MKD{ + "MDen", + "Македонски денар", + } + MLF{ + "MLF", + "Малски франк", + } + MNT{ + "Tug", + "Монголиски тугрик", + } + MOP{ + "MOP", + "Макао патака", + } + MTL{ + "Lm", + "Малтиска лира", + } + MTP{ + "MTP", + "Малтиска финта", + } + MXN{ + "MEX$", + "Мексикански пезос", + } + MXP{ + "MXP", + "Мексикански сребрен пезос (1861-1992)", + } + MYR{ + "RM", + "Малазиски рингит", + } + MZE{ + "MZE", + "Мозамбиско ескудо", + } + MZM{ + "Mt", + "Мозамбиски метикал", + } + NAD{ + "N$", + "Намибиски долар", + } + NGN{ + "NGN", + "Нигериска наира", + } + NIC{ + "NIC", + "Никарагванска кордоба", + } + NLG{ + "NLG", + "Холандски гилдер", + } + NOK{ + "NKr", + "Норвешка круна", + } + NPR{ + "Nrs", + "Непалска рупија", + } + NZD{ + "$NZ", + "Новозелански долар", + } + OMR{ + "RO", + "Омански Риал", + } + PAB{ + "PAB", + "Панамска балбоа", + } + PEN{ + "PEN", + "Перуански нов сол", + } + PES{ + "PES", + "Перуански сол", + } + PGK{ + "PGK", + "Папуа новогвинејскиа кина", + } + PHP{ + "PHP", + "Филипински пезос", + } + PKR{ + "Pra", + "Пакистанска рупија", + } + PLN{ + "Zl", + "Полска злота", + } + PLZ{ + "PLZ", + "Полска злота (1950-1995)", + } + PTE{ + "PTE", + "Португалско ескудо", + } + PYG{ + "PYG", + "Парагвајска гуарана", + } + QAR{ + "QR", + "Кватарски риал", + } + ROL{ + "leu", + "Романска леа", + } + RUB{ + "RUB", + "Руска рубља", + } + RUR{ + "RUR", + "Руска рубља (1991-1998)", + } + RWF{ + "RWF", + "Руандски франк", + } + SAR{ + "SRl", + "Саудиски риал", + } + SBD{ + "SI$", + "Соломонски долар", + } + SCR{ + "SR", + "Сејшелска рупија", + } + SDD{ + "SDD", + "Судански динар", + } + SDP{ + "SDP", + "Суданска фунта", + } + SEK{ + "SKr", + "Шведска круна", + } + SGD{ + "S$", + "Сингапурски доалр", + } + SIT{ + "SIT", + "Словенски толар", + } + SKK{ + "Sk", + "Словачка круна", + } + SLL{ + "SLL", + "Сиералеонско леоне", + } + SOS{ + "So. Sh.", + "Сомалијски шилинг", + } + SRG{ + "Sf", + "Суринамски гилдер", + } + SUR{ + "SUR", + "Советска рубља", + } + SVC{ + "SVC", + "Елсавадорски колон", + } + SYP{ + "LS", + "Сириска фунта", + } + SZL{ + "E", + "Свазилендски лилаген", + } + THB{ + "THB", + "Таи бат", + } + TJR{ + "TJR", + "таџикистанска рубља", + } + TJS{ + "TJS", + "Таџикистантски сомони", + } + TMM{ + "TMM", + "Турментистантски матат", + } + TND{ + "TND", + "Тунезиски динар", + } + TPE{ + "TPE", + "Тиморски ескудо", + } + TRL{ + "TL", + "Турска лира", + } + TWD{ + "NT$", + "Тајвански нов долар", + } + TZS{ + "T Sh", + "Танзаниски шилинг", + } + UAH{ + "UAH", + "Украинска хривнија", + } + UGS{ + "UGS", + "Угандиски шилинг (1966-1987)", + } + UGX{ + "U Sh", + "Угандиски шилинг", + } + USD{ + "US$", + "САД долар", + } + USN{ + "USN", + "САД долар (Next day)", + } + USS{ + "USS", + "САД долар (Same day)", + } + UYP{ + "UYP", + "Уругвајско песо (1975-1993)", + } + UZS{ + "UZS", + "УЗбекистански Сум", + } + VEB{ + "Be", + "Венецуелски боливар", + } + VND{ + "VND", + "Виетнамски донг", + } + VUV{ + "VT", + "Ванатски вату", + } + WST{ + "WST", + "Самоа тала", + } + XCD{ + "EC$", + "Источно карибиски долар", + } + YDD{ + "YDD", + "Јеменски дианр", + } + YER{ + "YRl", + "Јеменски риал", + } + YUD{ + "YUD", + "Југословенски динар", + } + YUN{ + "YUN", + "Југословенски конвертибилен динар", + } + ZAL{ + "ZAL", + "Јужно афрички ранд(финансиски)", + } + ZAR{ + "R", + "Јужно афрички ранд", + } + ZMK{ + "ZMK", + "Замбиска кванча", + } + ZRN{ + "ZRN", + "Заирско новозаире", + } + ZRZ{ + "ZRZ", + "Зирско заире", + } + ZWD{ + "Z$", + "Зимбабвиски долар", + } + } + ExemplarCharacters{"[а-г ѓ д-з ѕ и ј к ќ л љ м н њ о-ч џ ш]"} + Keys{ + calendar{"Календар"} + collation{"Сортирање"} + currency{"Валута"} + } + Languages{ + de{"германски"} + en{"англиски"} + es{"шпански"} + fr{"француски"} + it{"италијански"} + ja{"јапонски"} + mk{"македонски"} + pt{"португалски"} + ru{"руски"} + zh{"кинески"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + ".", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Types{ + calendar{ + buddhist{"Будистички календар"} + chinese{"Кинески Календар"} + gregorian{"Грегориански Календар"} + hebrew{"Еврејски Календар"} + islamic{"Исламски Календар"} + islamic-civil{"Исламско граѓански Календар"} + japanese{"Јапонски Календар"} + } + collation{ + direct{"Директно"} + phonebook{"Азбучен редослед"} + pinyin{"Сортирање Pinyin"} + stroke{"Ритмички редослед"} + traditional{"Традиционално"} + } + } + Version{"1.58"} + calendar{ + gregorian{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, dd MMMM yyyy", + "dd MMMM yyyy", + "dd.M.yyyy", + "dd.M.yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "нед.", + "пон.", + "вт.", + "сре.", + "чет.", + "пет.", + "саб.", + } + wide{ + "недела", + "понеделник", + "вторник", + "среда", + "четврток", + "петок", + "сабота", + } + } + stand-alone{ + narrow{ + "н", + "п", + "в", + "с", + "ч", + "п", + "с", + } + } + } + eras{ + abbreviated{ + "пр.н.е.", + "ае.", + } + } + monthNames{ + format{ + abbreviated{ + "јан.", + "фев.", + "мар.", + "апр.", + "мај.", + "јун.", + "јул.", + "авг.", + "септ.", + "окт.", + "ноем.", + "декем.", + } + wide{ + "јануари", + "февруари", + "март", + "април", + "мај", + "јуни", + "јули", + "август", + "септември", + "октомври", + "ноември", + "декември", + } + } + stand-alone{ + narrow{ + "ј", + "ф", + "м", + "а", + "м", + "ј", + "ј", + "а", + "се", + "о", + "но", + "д", + } + } + } + } + } + localPatternChars{"GuMtkHmsSEDFwWahKzUeygAZvcL"} +} diff --git a/icuSources/data/locales/mk_MK.txt b/icuSources/data/locales/mk_MK.txt index 39b30c5a..58ac8c53 100644 --- a/icuSources/data/locales/mk_MK.txt +++ b/icuSources/data/locales/mk_MK.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/mk_MK.xml +// * Source File:/common/main/mk_MK.xml // * // *************************************************************************** mk_MK{ NumberPatterns{ "#,##0.###;(#,##0.###)", - "¤ #,##0.00;-¤ #,##0.00", + "¤ #,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.34"} } diff --git a/icuSources/data/locales/ml.txt b/icuSources/data/locales/ml.txt index ddbf4bd4..8d615fae 100644 --- a/icuSources/data/locales/ml.txt +++ b/icuSources/data/locales/ml.txt @@ -1,103 +1,449 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ml.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ml.xml - */ -ml{ - Countries{ - IN{"ഇന്ത്യ"} - } - ExemplarCharacters{"[ംഃഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹാിീുൂൃെേൈൊോൌ്ൗൠൡ]"} - Languages{ - ml{"മലയാളം"} - } - LocaleScript{ - "Mlym", - } - NumberElements{ - ".", - ",", - ";", - "%", - "൦", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - /** - * Draft - */ - Version{"1.0"} - calendar{ - gregorian{ - AmPmMarkers{ - "രാവിലെ", - "വൈകു", - } - dayNames{ - format{ - abbreviated{ - "ഞാ", - "തി", - "ചൊ", - "ബു", - "വ്യ", - "വെ", - "ശ", - } - wide{ - "ഞായറ്അ", - "തിങ്കള്അ", - "ചൊവ്വ", - "ബുനഭ്അ", - "വ്യാഴം", - "വെള്ളി", - "ശനി", - } - } - } - monthNames{ - format{ - abbreviated{ - "ജനു", - "ഫിബ്", - "മാറ്അ", - "ഏപ്റില്അ", - "മെയ്", - "ജൂണ്അ", - "ജൂൈല", - "ആഗ", - "സെപ്തം", - "ഒക്ട", - "നവം", - "ഡിസം", - } - wide{ - "ജനുവരി", - "ഫിബ്റവരി", - "മാറ്അച്അച്", - "ഏപ്റില്അ", - "മെയ്", - "ജൂണ്അ", - "ജൂൈല", - "ആഗസ്ത്അ", - "സെപ്തംബറ്അ", - "ഒക്ടൈബറ്അ", - "നവംബറ്അ", - "ഡിസംബറ്അ", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ml.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ml.xml + */ +ml{ + Countries{ + 002{"ആഫ്രിക്ക"} + 005{"ദക്ഷിണ അമേരിക്ക"} + 011{"പശ്ചിമആഫ്രിക്ക"} + 013{"മദ്ധ്യഅമേരിക്ക"} + 015{"ഉത്തരആഫ്രിക്ക"} + 017{"മദ്ധ്യആഫ്രിക്ക"} + 019{"അമേരിക്കസ്"} + 029{"കരീബിയന്‍"} + 142{"ഏഷ്യ"} + 150{"യൂറോപ്പ്"} + AD{"അന്‍ടോറ"} + AE{"സംയുക്ത അറബ് രാഷ്ട്രം"} + AF{"അഫ്ഗാനിസ്ഥാന്‍"} + AG{"ആന്‍റിഗ്വ ആന്‍റ് ബര്‍ബുഡ"} + AL{"അല്‍ബേനിയ"} + AM{"അര്‍മേനിയ"} + AO{"അംഗോള"} + AQ{"അന്‍റാര്‍ട്ടിക്ക"} + AR{"അര്‍ജന്‍റീന"} + AT{"ഓസ്ട്രിയ"} + AU{"ഓസ്ട്രേലിയ"} + AZ{"അസര്‍ബൈജാന്‍"} + BA{"ബോസ്നിയ ഹെര്‍സഗോവിന"} + BB{"ബാര്‍ബഡോസ്"} + BD{"ബംഗ്ലാദേശ്"} + BE{"ബെല്‍ജിയം"} + BF{"ബുര്‍ക്കിനാ ഫാസോ"} + BG{"ബള്‍ഗേറിയ"} + BH{"ബഹ്റൈന്‍"} + BI{"ബുറുണ്ടി"} + BJ{"ബെനിന്‍"} + BM{"ബര്‍മുഡ"} + BN{"ബ്രൂണയ്"} + BO{"ബൊളീവിയ"} + BR{"ബ്രസീല്‍"} + BS{"ബഹാമാസ്"} + BT{"ഭൂട്ടാന്‍"} + BW{"ബോട്സ്വാന"} + BY{"ബെലറൂസ്"} + BZ{"ബെലീസ്"} + CA{"കനഡ"} + CC{"കോക്കസ്"} + CF{"സെന്‍ട്രല്‍ ആഫ്രിക്കന്‍ റിപ്പബ്ലിക്"} + CG{"കോംഗോ"} + CH{"സ്വിറ്റ്സര്‍ലന്‍ഡ്"} + CI{"ഐവറി കോസ്റ്റ്"} + CL{"ചിലി"} + CM{"കാമറൂണ്‍"} + CN{"ചൈന"} + CO{"കൊളംബിയ"} + CR{"കോസ്റ്ററിക്ക"} + CU{"ക്യൂബ"} + CV{"കേപ്പ് വെര്‍ഡെ"} + CY{"സൈപ്രസ്സ്"} + CZ{"ചെക്ക് റിപ്പബ്ലിക്"} + DE{"ജര്‍മനി"} + DJ{"ജിബൂട്ടി"} + DK{"ഡെന്മാര്‍ക്ക്"} + DM{"ഡൊമിനിക്ക"} + DO{"ഡൊമിനിക്കന്‍ റിപ്പബ്ലിക്"} + DZ{"അല്‍ജീറിയ"} + EC{"ഇക്വഡോര്‍"} + EE{"എസ്റ്റോണിയ‍"} + EG{"ഈജിപ്ത്"} + EH{"പശ്ചിമ സഹാറ"} + ER{"എരിട്രിയ"} + ES{"സ്പെയ്ന്‍"} + ET{"എത്യോപ്യ"} + FI{"ഫിന്‍ലാന്‍ഡ്"} + FJ{"ഫിജി"} + FR{"ഫ്രാന്‍സ്"} + GB{"ബ്രിട്ടന്‍"} + GD{"ഗ്രനേഡ"} + GE{"ജോര്‍ജിയ"} + GI{"ജിബ്രിള്‍ട്ടര്‍"} + GL{"ഗ്രീന്‍ലാന്‍റ്"} + GM{"ഗാംബിയ"} + GR{"ഗ്രീസ്"} + GT{"ഗ്വാട്ടിമാലാ"} + GW{"ഗിനി-ബിസോ"} + GY{"ഗയാന"} + HR{"ക്രൊയേഷ്യ"} + HT{"ഹൈയ്തി"} + HU{"ഹംഗറി"} + IE{"ഐയര്‍ലാന്‍റ്"} + IL{"ഇസ്രായേല്‍"} + IN{"ഇന്ത്യ"} + IQ{"ഇറാക്ക്"} + IR{"ഇറാന്‍"} + IT{"ഇറ്റലി"} + JM{"ജമൈക്ക"} + JO{"ജോര്‍ദ്ദാന്‍"} + JP{"ജപ്പാന്‍"} + KE{"കെനിയ"} + KG{"കിര്‍ഗിസ്ഥാന്‍"} + KH{"കംബോഡിയ"} + KI{"കിരിബാത്തി"} + KP{"ഉത്തരകൊറിയ"} + KR{"ദക്ഷിണകൊറിയ"} + KW{"കുവൈറ്റ്"} + KZ{"കസാഖ്സ്ഥാന്‍"} + LA{"ലാവോസ്"} + LB{"ലബനന്‍"} + LK{"ശ്രീലങ്ക"} + LR{"ലൈബീരിയ"} + LS{"ലെസോത്തോ"} + LT{"ലിത്വാനിയ"} + LU{"ലക്സംബര്‍ഗ്"} + LY{"ലിബിയ"} + MA{"മൊറോക്കൊ"} + MC{"മൊണോക്കൊ"} + MG{"മഡഗാസ്കര്‍"} + ML{"മാലി"} + MM{"മ്യാന്‍മാര്‍"} + MN{"മംഗോളിയ"} + MT{"മാള്‍ട്ട"} + MX{"മേക്സിക്കോ"} + MY{"മലേഷ്യ"} + MZ{"മൊസാംബിക്ക്"} + NA{"നമീബിയ"} + NE{"നൈഗര്‍"} + NG{"നൈജീരിയ"} + NP{"നേപ്പാള്‍"} + PA{"പനാമ"} + PE{"പെറു"} + PH{"ഫിലിപ്പൈന്‍സ്"} + PK{"പാക്കിസ്ഥാന്‍"} + PT{"പോര്‍ച്ചുഗല്‍"} + QA{"ഖത്തര്‍"} + RU{"റഷ്യ"} + SD{"സുഡാന്‍"} + SE{"സ്വീഡന്‍"} + SG{"സിംഗപ്പുര്‍"} + SN{"സെനഗല്‍"} + SO{"സോമാലിയ"} + SY{"സിറിയ"} + TL{"കിഴക്കന്‍ തിമുര്‍"} + TV{"തുവാലു"} + US{"യുണൈറ്റഡ് സ്റ്റേറ്റ്സ് ഓഫ് അമേരിക്ക"} + VA{"വത്തിക്കാന്‍"} + VN{"വിയറ്റ്നാം"} + ZM{"സാംബിയ"} + ZW{"സിംബാവെ"} + } + Currencies{ + AED{ + "AED", + "യുഎഇ ദിര്‍ഹം", + } + AUD{ + "AUD", + "ആസ്ട്രേലിയന്‍ ഡോളര്‍", + } + BBD{ + "BBD", + "ബാര്‍ബഡോസ് ഡോളര്‍", + } + BEL{ + "ബല്‍ജിയന്‍ ഫ്രാങ്ക്", + "BEL", + } + BGN{ + "BGN", + "ബള്‍ഗേറിയന്‍ ന്യൂലവ്", + } + BRL{ + "BRL", + "ബ്രസീലിയന്‍ റിയാല്‍", + } + EUR{ + "€", + "യൂറോ", + } + FJD{ + "FJD", + "ഫിജി ഡോളര്‍", + } + GBP{ + "£", + "ബ്രിട്ടീഷ് പൌണ്ട് സ്റ്റെര്‍ലിംങ്", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/ml_IN.xml // * // *************************************************************************** ml_IN{ + Languages{ + de{"ജര്‍മ്മന്"} + } NumberPatterns{ - "#,##,##0.###;-#,##,##0.###", - "¤ #,##,##0.00;-¤ #,##,##0.00", + "#,##,##0.###", + "¤ #,##,##0.00", "#,##,##0%", "#E0", } - /** - * Draft - */ - Version{"1.0"} + Version{"1.27"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", @@ -34,6 +30,12 @@ ml_IN{ "dd-MM-yy", "{1} {0}", } + availableFormats{ + MMMMd{"d MMMM"} + MMdd{"dd-MM"} + yyyyMM{"MM-yyyy"} + yyyyMMMM{"MMMM yyyy"} + } weekend:intvector{ 1, 0, diff --git a/icuSources/data/locales/mr.txt b/icuSources/data/locales/mr.txt index 2e1d8e0f..d3eded60 100644 --- a/icuSources/data/locales/mr.txt +++ b/icuSources/data/locales/mr.txt @@ -1,241 +1,250 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/mr.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/mr.xml - */ -mr{ - Countries{ - IN{"भारत"} - } - Currencies{ - INR{ - "रु", - "INR", - } - } - ExemplarCharacters{"[[:Deva:]-[क़-य़]‌‍]"} - Languages{ - aa{"अफार"} - ab{"अबखेजियन"} - af{"अफ्रिकान्स"} - am{"अमहारिक"} - ar{"अरेबिक"} - as{"असामी"} - ay{"ऐमरा"} - az{"अज़रबाइजानी"} - ba{"बष्किर"} - be{"बैलोरुसियन"} - bg{"बल्गेरियन"} - bh{"बीहारी"} - bi{"बिसलमा"} - bn{"बंगाली"} - bo{"तिबेटियन"} - br{"ब्रेटन"} - ca{"कटलन"} - co{"कोर्सिकन"} - cs{"ज़ेक"} - cy{"वेल्ष"} - da{"डानिष"} - de{"जर्मन"} - dz{"भूटानी"} - el{"ग्रीक"} - en{"इंग्रेजी"} - eo{"इस्परान्टो"} - es{"स्पानिष"} - et{"इस्टोनियन्"} - eu{"बास्क"} - fa{"पर्षियन्"} - fi{"फिन्निष"} - fj{"फिजी"} - fo{"फेरोस्"} - fr{"फ्रेन्च"} - fy{"फ्रिसियन्"} - ga{"ऐरिष"} - gd{"स्काटस् गेलिक"} - gl{"गेलीशियन"} - gn{"गौरानी"} - gu{"गुजराती"} - ha{"हौसा"} - he{"हेबृ"} - hi{"हिन्दी"} - hr{"क्रोयेषियन्"} - hu{"हंगेरियन्"} - hy{"आर्मीनियन्"} - ia{"इन्टरलिंग्वा"} - id{"इन्डोनेषियन"} - ie{"इन्टरलिंग"} - ik{"इनूपियाक"} - is{"आईसलान्डिक"} - it{"इटालियन"} - iu{"इनुकिटुट्"} - ja{"जापनीस्"} - jv{"जावनीस्"} - ka{"जार्जियन्"} - kk{"कज़क"} - kl{"ग्रीनलान्डिक"} - km{"कंबोडियन"} - kn{"कन्नड"} - ko{"कोरियन्"} - kok{"कोंकणी"} - ks{"कश्मीरी"} - ku{"कुर्दिष"} - ky{"किर्गिज़"} - la{"लाटिन"} - ln{"लिंगाला"} - lo{"लाओतियन्"} - lt{"लिथुआनियन्"} - lv{"लाट्वियन् (लेट्टिष)"} - mg{"मलागसी"} - mi{"माओरी"} - mk{"मसीडोनियन्"} - ml{"मलियालम"} - mn{"मंगोलियन्"} - mo{"मोल्डावियन्"} - mr{"मराठी"} - ms{"मलय"} - mt{"मालतीस्"} - my{"बर्मीस्"} - na{"नौरो"} - ne{"नेपाली"} - nl{"डच"} - no{"नोर्वेजियन"} - oc{"ओसिटान्"} - om{"ओरोमो (अफान)"} - or{"ओरिया"} - pa{"पंजाबी"} - pl{"पोलिष"} - ps{"पष्टो (पुष्टो)"} - pt{"पोर्चुगीस्"} - qu{"क्वेचओ"} - rm{"रहटो-रोमान्स्"} - rn{"किरुन्दी"} - ro{"रोमानियन्"} - root{"मराठी"} - ru{"रष्यन्"} - rw{"किन्यार्वान्डा"} - sa{"संस्कृत"} - sd{"सिंधी"} - sg{"सांग्रो"} - sh{"सेर्बो-क्रोयेषियन्"} - si{"सिन्हलीस्"} - sk{"स्लोवाक"} - sl{"स्लोवेनियन्"} - sm{"समोन"} - sn{"शोना"} - so{"सोमाली"} - sq{"आल्बेनियन्"} - sr{"सेर्बियन्"} - ss{"सिस्वती"} - st{"सेसोथो"} - su{"सुंदनीस्"} - sv{"स्वीडिष"} - sw{"स्वाहिली"} - ta{"तमिळ"} - te{"तेलंगू"} - tg{"तजिक"} - th{"थाई"} - ti{"तिग्रिन्या"} - tk{"तुर्कमेन"} - tl{"तगालोग"} - tn{"सेत्स्वाना"} - to{"तोंगा"} - tr{"तुर्किष"} - ts{"त्सोगा"} - tt{"टटार"} - tw{"त्वि"} - ug{"उधूर"} - uk{"युक्रेनियन्"} - ur{"उर्दू"} - uz{"उज़बेक"} - vi{"वियत्नामीज़"} - vo{"ओलापुक"} - wo{"उलोफ"} - xh{"क्स्होसा"} - yi{"इद्दिष"} - yo{"यूरुबा"} - za{"झ्हुन्ग"} - zh{"चिनीस्"} - zu{"जुलू"} - } - LocaleScript{ - "Deva", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "म.पू.", - "म.नं.", - } - dayNames{ - format{ - abbreviated{ - "रवि", - "सोम", - "मंगळ", - "बुध", - "गुरु", - "शुक्र", - "शनि", - } - wide{ - "रविवार", - "सोमवार", - "मंगळवार", - "बुधवार", - "गुरुवार", - "शुक्रवार", - "शनिवार", - } - } - } - monthNames{ - format{ - abbreviated{ - "जानेवारी", - "फेबृवारी", - "मार्च", - "एप्रिल", - "मे", - "जून", - "जुलै", - "ओगस्ट", - "सेप्टेंबर", - "ओक्टोबर", - "नोव्हेंबर", - "डिसेंबर", - } - wide{ - "जानेवारी", - "फेबृवारी", - "मार्च", - "एप्रिल", - "मे", - "जून", - "जुलै", - "ओगस्ट", - "सेप्टेंबर", - "ओक्टोबर", - "नोव्हेंबर", - "डिसेंबर", - } - } - } - } - } - zoneStrings{ - { - "Asia/Calcutta", - "भारतीय समय", - "IST", - "भारतीय समय", - "IST", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/mr.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/mr.xml + */ +mr{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + BR{"ब्राजील"} + DE{"जमिन"} + IN{"भारत"} + } + Currencies{ + INR{ + "रु", + "INR", + } + } + ExemplarCharacters{"[़ ँ-ः ०-९ ॐ अ-ऍ ए-ऑ ओ-न प-र ल ळ व-ह ऽ-ॅ े-ॉ ो-्]"} + Languages{ + aa{"अफार"} + ab{"अबखेजियन"} + af{"अफ्रिकान्स"} + am{"अमहारिक"} + ar{"अरेबिक"} + as{"असामी"} + ay{"ऐमरा"} + az{"अज़रबाइजानी"} + ba{"बष्किर"} + be{"बैलोरुसियन"} + bg{"बल्गेरियन"} + bh{"बीहारी"} + bi{"बिसलमा"} + bn{"बंगाली"} + bo{"तिबेटियन"} + br{"ब्रेटन"} + ca{"कटलन"} + co{"कोर्सिकन"} + cs{"ज़ेक"} + cy{"वेल्ष"} + da{"डानिष"} + de{"जर्मन"} + dz{"भूटानी"} + el{"ग्रीक"} + en{"इंग्रेजी"} + eo{"इस्परान्टो"} + es{"स्पानिष"} + et{"इस्टोनियन्"} + eu{"बास्क"} + fa{"पर्षियन्"} + fi{"फिन्निष"} + fj{"फिजी"} + fo{"फेरोस्"} + fr{"फ्रेन्च"} + fy{"फ्रिसियन्"} + ga{"ऐरिष"} + gd{"स्काटस् गेलिक"} + gl{"गेलीशियन"} + gn{"गौरानी"} + gu{"गुजराती"} + ha{"हौसा"} + he{"हेबृ"} + hi{"हिन्दी"} + hr{"क्रोयेषियन्"} + hu{"हंगेरियन्"} + hy{"आर्मीनियन्"} + ia{"इन्टरलिंग्वा"} + id{"इन्डोनेषियन"} + ie{"इन्टरलिंग"} + ik{"इनूपियाक"} + is{"आईसलान्डिक"} + it{"इटालियन"} + iu{"इनुकिटुट्"} + ja{"जापनीस्"} + jv{"जावनीस्"} + ka{"जार्जियन्"} + kk{"कज़क"} + kl{"ग्रीनलान्डिक"} + km{"कंबोडियन"} + kn{"कन्नड"} + ko{"कोरियन्"} + kok{"कोंकणी"} + ks{"कश्मीरी"} + ku{"कुर्दिष"} + ky{"किर्गिज़"} + la{"लाटिन"} + ln{"लिंगाला"} + lo{"लाओतियन्"} + lt{"लिथुआनियन्"} + lv{"लाट्वियन् (लेट्टिष)"} + mg{"मलागसी"} + mi{"माओरी"} + mk{"मसीडोनियन्"} + ml{"मलियालम"} + mn{"मंगोलियन्"} + mo{"मोल्डावियन्"} + mr{"मराठी"} + ms{"मलय"} + mt{"मालतीस्"} + my{"बर्मीस्"} + na{"नौरो"} + ne{"नेपाली"} + nl{"डच"} + no{"नोर्वेजियन"} + oc{"ओसिटान्"} + om{"ओरोमो (अफान)"} + or{"ओरिया"} + pa{"पंजाबी"} + pl{"पोलिष"} + ps{"पष्टो (पुष्टो)"} + pt{"पोर्चुगीस्"} + qu{"क्वेचओ"} + rm{"रहटो-रोमान्स्"} + rn{"किरुन्दी"} + ro{"रोमानियन्"} + root{"शिखर"} + ru{"रष्यन्"} + rw{"किन्यार्वान्डा"} + sa{"संस्कृत"} + sd{"सिंधी"} + sg{"सांग्रो"} + sh{"सेर्बो-क्रोयेषियन्"} + si{"सिन्हलीस्"} + sk{"स्लोवाक"} + sl{"स्लोवेनियन्"} + sm{"समोन"} + sn{"शोना"} + so{"सोमाली"} + sq{"आल्बेनियन्"} + sr{"सेर्बियन्"} + ss{"सिस्वती"} + st{"सेसोथो"} + su{"सुंदनीस्"} + sv{"स्वीडिष"} + sw{"स्वाहिली"} + ta{"तमिळ"} + te{"तेलंगू"} + tg{"तजिक"} + th{"थाई"} + ti{"तिग्रिन्या"} + tk{"तुर्कमेन"} + tl{"तगालोग"} + tn{"सेत्स्वाना"} + to{"तोंगा"} + tr{"तुर्किष"} + ts{"त्सोगा"} + tt{"टटार"} + tw{"त्वि"} + ug{"उधूर"} + uk{"युक्रेनियन्"} + ur{"उर्दू"} + uz{"उज़बेक"} + vi{"वियत्नामीज़"} + vo{"ओलापुक"} + wo{"उलोफ"} + xh{"क्स्होसा"} + yi{"इद्दिष"} + yo{"यूरुबा"} + za{"झ्हुन्ग"} + zh{"चिनीस्"} + zu{"जुलू"} + } + LocaleScript{ + "Deva", + } + Version{"1.50"} + calendar{ + gregorian{ + AmPmMarkers{ + "म.पू.", + "म.नं.", + } + dayNames{ + format{ + abbreviated{ + "रवि", + "सोम", + "मंगळ", + "बुध", + "गुरु", + "शुक्र", + "शनि", + } + wide{ + "रविवार", + "सोमवार", + "मंगळवार", + "बुधवार", + "गुरुवार", + "शुक्रवार", + "शनिवार", + } + } + } + eras{ + abbreviated{ + "ईसापूर्व", + "सन", + } + } + monthNames{ + format{ + abbreviated{ + "जानेवारी", + "फेबृवारी", + "मार्च", + "एप्रिल", + "मे", + "जून", + "जुलै", + "ओगस्ट", + "सेप्टेंबर", + "ओक्टोबर", + "नोव्हेंबर", + "डिसेंबर", + } + wide{ + "जानेवारी", + "फेबृवारी", + "मार्च", + "एप्रिल", + "मे", + "जून", + "जुलै", + "ओगस्ट", + "सेप्टेंबर", + "ओक्टोबर", + "नोव्हेंबर", + "डिसेंबर", + } + } + } + } + } + zoneStrings{ + "Asia:Calcutta"{ + ec{"Calcutta"} + ld{"भारतीय समय"} + ls{"भारतीय समय"} + sd{"IST"} + ss{"IST"} + } + } +} diff --git a/icuSources/data/locales/mr_IN.txt b/icuSources/data/locales/mr_IN.txt index 406cdd77..92f6d172 100644 --- a/icuSources/data/locales/mr_IN.txt +++ b/icuSources/data/locales/mr_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/mr_IN.xml +// * Source File:/common/main/mr_IN.xml // * // *************************************************************************** mr_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.47"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", @@ -39,4 +35,10 @@ mr_IN{ } } } + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"'"} + quotationStart{"'"} + } } diff --git a/icuSources/data/locales/ms.txt b/icuSources/data/locales/ms.txt index 879910a1..63d786b0 100644 --- a/icuSources/data/locales/ms.txt +++ b/icuSources/data/locales/ms.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ms.xml +// * Source File:/common/main/ms.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/ms.xml + * ICU source: /xml/main/ms.xml */ ms{ Countries{ @@ -208,7 +208,6 @@ ms{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Surinam"} ST{"Sao Tome dan Principe"} SV{"El Salvador"} @@ -247,7 +246,6 @@ ms{ WS{"Samoa"} YE{"Yaman"} YT{"Mayotte"} - YU{"Yugoslavia"} ZA{"Afrika Selatan"} ZM{"Zambia"} ZW{"Zimbabwe"} @@ -258,20 +256,19 @@ ms{ "Ringgit Malaysia", } } - ExemplarCharacters{"[a-z]"} + ExemplarCharacters{ + "[a {ai} {au} b-d {dz} e-k {kh} l-n {ng} {ngg} {ny} o-s {sy} t {ts} u {ua} v-" + "z]" + } Languages{ ms{"Bahasa Melayu"} } LocaleScript{ "Latn", } - Version{"1.2"} + Version{"1.44"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } dayNames{ format{ abbreviated{ @@ -326,6 +323,22 @@ ms{ } } } + quarters{ + format{ + abbreviated{ + "S1", + "S2", + "S3", + "S4", + } + wide{ + "suku pertama", + "suku kedua", + "suku ketiga", + "suku keempat", + } + } + } } } } diff --git a/icuSources/data/locales/ms_BN.txt b/icuSources/data/locales/ms_BN.txt index 914cc9d2..53d949c3 100644 --- a/icuSources/data/locales/ms_BN.txt +++ b/icuSources/data/locales/ms_BN.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ms_BN.xml +// * Source File:/common/main/ms_BN.xml // * // *************************************************************************** ms_BN{ @@ -28,10 +28,10 @@ ms_BN{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.31"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/ms_MY.txt b/icuSources/data/locales/ms_MY.txt index 63bfa6d4..74dddf4b 100644 --- a/icuSources/data/locales/ms_MY.txt +++ b/icuSources/data/locales/ms_MY.txt @@ -1,19 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ms_MY.xml +// * Source File:/common/main/ms_MY.xml // * // *************************************************************************** ms_MY{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.35"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/mt.txt b/icuSources/data/locales/mt.txt index dda5080c..a5d2c79e 100644 --- a/icuSources/data/locales/mt.txt +++ b/icuSources/data/locales/mt.txt @@ -1,16 +1,45 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/mt.xml +// * Source File:/common/main/mt.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/mt.xml + * ICU source: /xml/main/mt.xml */ mt{ + AuxExemplarCharacters{"[c y]"} Countries{ + 001{"Dinja"} + 002{"Affrika"} + 005{"Amerika t’Isfel"} + 009{"Oċejanja"} + 011{"Affrika tal-Punent"} + 013{"Amerika Ċentrali"} + 014{"Affrika tal-Lvant"} + 015{"Affrika ta’ Fuq"} + 017{"Affrika Nofsani"} + 018{"Affrika t’Isfel"} + 019{"Amerika"} + 029{"Karibew"} + 030{"Asja tal-Lvant"} + 034{"Asja t’Isfel Ċentrali"} + 035{"Asja tax-Xlokk"} + 039{"Ewropa t’Isfel"} + 053{"Awstralja u New Zealand"} + 054{"Melanesja"} + 061{"Polinesja"} + 142{"Asja"} + 145{"Asja tal-Punent"} + 150{"Ewropa"} + 151{"Ewropa tal-Lvant"} + 154{"Ewropa ta’ Fuq"} + 155{"Ewropa tal-Punent"} + 172{"Commonwealth tal-Istati Independenti"} + 419{"Amerika Latina u l-Karibew"} + 833{"Isle of Man"} AD{"Andorra"} AE{"Emirati Għarab Maqgħuda"} AF{"Afganistan"} @@ -20,7 +49,7 @@ mt{ AM{"Armenja"} AN{"Antilles Olandiżi"} AO{"Angola"} - AQ{"Antarctica"} + AQ{"Antartika"} AR{"Arġentina"} AS{"Samoa Amerikana"} AT{"Awstrija"} @@ -52,13 +81,14 @@ mt{ CF{"Repubblika Afrikana Ċentrali"} CG{"Kongo"} CH{"Svizzera"} - CI{"Kosta ta' l-Avorju"} + CI{"Kosta ta’ l-Avorju"} CK{"Cook Islands"} CL{"Ċili"} CM{"Kamerun"} CN{"Ċina"} CO{"Kolumbja"} CR{"Kosta Rika"} + CS{"Serbja u Montenegro"} CU{"Kuba"} CV{"Kape Verde"} CX{"Christmas Island"} @@ -125,14 +155,14 @@ mt{ KI{"Kiribati"} KM{"Komoros"} KN{"Saint Kitts and Nevis"} - KP{"Koreja ta' Fuq"} - KR{"Koreja t'Isfel"} + KP{"Koreja ta’ Fuq"} + KR{"Koreja t’Isfel"} KW{"Kuwajt"} KY{"Cayman Islands"} KZ{"Każakstan"} LA{"Laos"} LB{"Libanu"} - LC{"Saint Lucia"} + LC{"Santa Luċija"} LI{"Liechtenstein"} LK{"Sri Lanka"} LR{"Liberja"} @@ -145,13 +175,13 @@ mt{ MC{"Monako"} MD{"Maldova"} MG{"Madagaskar"} - MH{"Gżejjer ta' Marshall"} + MH{"Gżejjer ta’ Marshall"} MK{"Maċedonja"} ML{"Mali"} MM{"Mjanmar"} MN{"Mongolja"} MO{"Macao S.A.R., China"} - MP{"Gżejjer Marjana ta' Fuq"} + MP{"Gżejjer Marjana ta’ Fuq"} MQ{"Martinik"} MR{"Mawritanja"} MS{"Montserrat"} @@ -208,7 +238,6 @@ mt{ SM{"San Marino"} SN{"Senegal"} SO{"Somalja"} - SP{"Serbja"} SR{"Surinam"} ST{"Sao Tome and Principe"} SV{"El Salvador"} @@ -216,7 +245,7 @@ mt{ SZ{"Sważiland"} TC{"Turks and Caicos Islands"} TD{"Ċad"} - TF{"Territorji Franċiżi ta' Nofsinhar"} + TF{"Territorji Franċiżi ta’ Nofsinhar"} TG{"Togo"} TH{"Tajlandja"} TJ{"Taġikistan"} @@ -247,18 +276,26 @@ mt{ WS{"Samoa"} YE{"Jemen"} YT{"Majotte"} - YU{"Jugoslavja"} - ZA{"Afrika t'Isfel"} + ZA{"Afrika t’Isfel"} ZM{"Żambja"} ZW{"Żimbabwe"} } Currencies{ + EUR{ + "€", + "Ewro", + } MTL{ "Lm", "Lira Maltija", } } - ExemplarCharacters{"[[a-z à ì ù è ò ċ ġ ħ {għ} ż]-[cy]]"} + ExemplarCharacters{"[a à b ċ d e è f ġ g {għ} h ħ i ì j-o ò p-u ù v-x ż z]"} + Keys{ + calendar{"Kalendarju"} + collation{"Kollazjoni"} + currency{"Munita"} + } Languages{ aa{"Afar"} ab{"Abkażjan"} @@ -270,13 +307,14 @@ mt{ af{"Afrikans"} afa{"Afro-Asjatiku (Oħra)"} afh{"Afriħili"} + ain{"Ajnu"} ak{"Akan"} akk{"Akkadjen"} ale{"Aleut"} alg{"Lingwi Algonqwinjani"} am{"Amħariku"} an{"Aragonese"} - ang{"Ingliż, Antik (ca.450-1100)"} + ang{"Ingliż, Antik"} apa{"Lingwi Apaċi"} ar{"Għarbi"} arc{"Aramajk"} @@ -344,7 +382,7 @@ mt{ cop{"Koptiku"} cpe{"Kreoli u Piġini, Bbażat fuq l-Ingliż (Oħra)"} cpf{"Kreoli u Piġini, Bbażat fuq il-Franċiż (Oħra)"} - cpp{"Creoles and pidgins, Portuguese-based (Other)"} + cpp{"Kreoli u Piġini, Bbażat fuq il-Portugiż (Oħra)"} cr{"Krij"} crh{"Crimean Turkish; Crimean Tatar"} crp{"Kreoli u Piġini (Oħra)"} @@ -367,7 +405,7 @@ mt{ dra{"Dravidjan (Oħra)"} dsb{"Lower Sorbian"} dua{"Dwala"} - dum{"Olandiż, Medjevali (ca. 1050-1350)"} + dum{"Olandiż, Medjevali"} dv{"Diveħi"} dyu{"Djula"} dz{"Dżongka"} @@ -394,8 +432,8 @@ mt{ fo{"Fawriż"} fon{"Fon"} fr{"Franċiż"} - frm{"Franċiż, Medjevali (ca. 1400-1600)"} - fro{"Franċiż, Antik (842-ca. 1400)"} + frm{"Franċiż, Medjevali"} + fro{"Franċiż, Antik"} fur{"Frijuljan"} fy{"Friżjan"} ga{"Irlandiż"} @@ -407,9 +445,9 @@ mt{ gez{"Geez"} gil{"Gilbertjan"} gl{"Gallegjan"} - gmh{"Ġermaniku, Medjevali Pulit (ca. 1050-1500)"} + gmh{"Ġermaniku, Medjevali Pulit"} gn{"Gwarani"} - goh{"Ġermaniku, Antik Pulit (ca. 750-1050)"} + goh{"Ġermaniku, Antik Pulit"} gon{"Gondi"} gor{"Gorontalo"} got{"Gotiku"} @@ -545,16 +583,17 @@ mt{ mul{"Lingwi Diversi"} mun{"Lingwi tal-Munda"} mus{"Kriek"} + mwl{"Mirandiż"} mwr{"Marwari"} my{"Burmiż"} myn{"Majan"} myv{"Erzya"} na{"Nawuru"} nah{"Naħwatil"} - nai{"Indjan tal-Amerika ta' Fuq (Oħra)"} + nai{"Indjan tal-Amerika ta’ Fuq (Oħra)"} nap{"Neapolitan"} nb{"Bokmahal Norveġiż"} - nd{"Ndebele, ta' Fuq"} + nd{"Ndebele, ta’ Fuq"} nds{"Ġermaniż Komuni; Sassonu Komuni"} ne{"Nepaliż"} new{"Newari"} @@ -567,8 +606,8 @@ mt{ no{"Norveġiż"} nog{"Nogai"} non{"Skandinav, Antik"} - nr{"Ndebele, t'Isfel"} - nso{"Soto, ta' Fuq"} + nr{"Ndebele, t’Isfel"} + nso{"Soto, ta’ Fuq"} nub{"Lingwi Nubjani"} nv{"Navaħo"} nwc{"Classical Newari"} @@ -592,7 +631,7 @@ mt{ pam{"Pampamga"} pap{"Papjamento"} pau{"Palawjan"} - peo{"Persjan Antik (ca. 600-400 Q.K.)"} + peo{"Persjan Antik"} phi{"Filippin (Oħra)"} phn{"Feniċju"} pi{"Pali"} @@ -613,11 +652,12 @@ mt{ rom{"Żingaru"} root{"Għerq"} ru{"Russu"} + rup{"Aromanijan"} rw{"Kinjarwanda"} sa{"Sanskrit"} sad{"Sandawe"} sah{"Jakut"} - sai{"Indjan tal-Amerika t'Isfel (Oħra)"} + sai{"Indjan tal-Amerika t’Isfel (Oħra)"} sal{"Salixan"} sam{"Samritan"} sas{"Saska"} @@ -625,7 +665,7 @@ mt{ sc{"Sardinjan"} sco{"Skoċċiż"} sd{"Sindi"} - se{"Sami ta' Fuq"} + se{"Sami ta’ Fuq"} sel{"Selkup"} sem{"Semitiku"} sg{"Sango"} @@ -638,7 +678,7 @@ mt{ sio{"Lingwi Suwjani"} sit{"Sino-Tibetjani (Oħra)"} sk{"Slovakk"} - sl{"Slav"} + sl{"Sloven"} sla{"Slavic (Other)"} sm{"Samojan"} sma{"Southern Sami"} @@ -656,7 +696,7 @@ mt{ srr{"Serer"} ss{"Swati"} ssa{"Nilo-Saħaram"} - st{"Soto, t'Isfel"} + st{"Soto, t’Isfel"} su{"Sundaniż"} suk{"Sukuma"} sus{"Susu"} @@ -682,7 +722,7 @@ mt{ tli{"Tlingit"} tmh{"Tamaxek"} tn{"Zwana"} - to{"Tongan (Gżejjer ta' Tonga)"} + to{"Tongan (Gżejjer ta’ Tonga)"} tog{"Tonga (Njasa)"} tpi{"Tok Pisin"} tr{"Tork"} @@ -734,20 +774,51 @@ mt{ LocaleScript{ "Latn", } - Version{"1.2"} + Scripts{ + Arab{"Għarbi"} + Hans{"Ħan Sempliċi"} + Hant{"Ħan Tradizzjonali"} + Latn{"Latin"} + Xpeo{"Persjan Antik"} + Zyyy{"Komuni"} + } + Types{ + calendar{ + buddhist{"Kalendarju Buddist"} + chinese{"Kalendarju Ċiniż"} + gregorian{"Kalendarju Gregorjan"} + hebrew{"Kalendarju Ebrajk"} + islamic{"Kalendarju Islamiku"} + islamic-civil{"Kalendarju Islamiku-Ċivili"} + japanese{"Kalendarju Ġappuniż"} + } + collation{ + big5han{"Ordni Ċiniż Tradizzjonali (Big5)"} + direct{"Ordni Diretta"} + gb2312han{"Ordni Ċiniż Sempliċi (GB2312)"} + phonebook{"Ordni Telefonika"} + pinyin{"Ordni tal-Pinjin"} + stroke{"Ordni Maħżuża"} + traditional{"Tradizzjonali"} + } + } + Variants{ + REVISED{"Ortografija Irriveda"} + } + Version{"1.54"} calendar{ gregorian{ - DateTimeElements:intvector{ - 1, - 4, + AmPmMarkers{ + "QN", + "WN", } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", "HH:mm:ss", "HH:mm", - "EEEE, d 'ta''' MMMM yyyy", - "d 'ta''' MMMM yyyy", + "EEEE, d 'ta’' MMMM yyyy", + "d 'ta’' MMMM yyyy", "dd MMM yyyy", "dd/MM/yyyy", "{1} {0}", @@ -773,6 +844,17 @@ mt{ "Is-Sibt", } } + stand-alone{ + narrow{ + "Ħ", + "T", + "T", + "E", + "Ħ", + "Ġ", + "S", + } + } } eras{ abbreviated{ @@ -780,6 +862,32 @@ mt{ "WK", } } + fields{ + day{ + dn{"Jum"} + } + era{ + dn{"Epoka"} + } + hour{ + dn{"Siegħa"} + } + minute{ + dn{"Minuta"} + } + month{ + dn{"Xahar"} + } + second{ + dn{"Sekonda"} + } + week{ + dn{"Ġimgħa"} + } + year{ + dn{"Sena"} + } + } monthNames{ format{ abbreviated{ @@ -812,16 +920,31 @@ mt{ } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + } + } } } + measurementSystemNames{ + metric{"Metriku"} + } zoneStrings{ - { - "Europe/Malta", - "Ħin Ċentrali Ewropew", - "CET", - "Ħin Ċentrali Ewropew tas-Sajf", - "CEST", - "Valletta", + "Europe:London"{ + ec{"Londra"} + } + "Europe:Malta"{ + ec{"Valletta"} + ld{"Ħin Ċentrali Ewropew tas-Sajf"} + ls{"Ħin Ċentrali Ewropew"} + sd{"CEST"} + ss{"CET"} } } } diff --git a/icuSources/data/locales/mt_MT.txt b/icuSources/data/locales/mt_MT.txt index 89481c6e..0895a3df 100644 --- a/icuSources/data/locales/mt_MT.txt +++ b/icuSources/data/locales/mt_MT.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/mt_MT.xml +// * Source File:/common/main/mt_MT.xml // * // *************************************************************************** mt_MT{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 4, + } + } + } } diff --git a/icuSources/data/locales/nb.txt b/icuSources/data/locales/nb.txt index cc49464d..9d42653a 100644 --- a/icuSources/data/locales/nb.txt +++ b/icuSources/data/locales/nb.txt @@ -1,18 +1,49 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/nb.xml +// * Source File:/common/main/nb.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/nb.xml + * ICU source: /xml/main/nb.xml */ nb{ + AuxExemplarCharacters{"[á ǎ č ç đ è ê ń ñ ŋ š ŧ ü ž ä ö]"} Countries{ + 001{"verden"} + 002{"Afrika"} + 005{"Sør-Amerika"} + 009{"Oseania"} + 011{"Vest-Afrika"} + 013{"Sentral-Amerika"} + 014{"Øst-Afrika"} + 015{"Nord-Afrika"} + 017{"Sentral-Afrika"} + 018{"Sørlige Afrika"} + 019{"Amerika"} + 021{"Nord-Amerika"} + 029{"Karibia"} + 030{"Øst-Asia"} + 034{"Sør-Asia"} + 035{"Sørøst-Asia"} + 039{"Sør-Europa"} + 053{"Australia og New Zealand"} + 054{"Melanesia"} + 057{"Mikronesia"} + 061{"Polynesia"} + 142{"Asia"} + 143{"Sentral-Asia"} + 145{"Vest-Asia"} + 150{"Europa"} + 151{"Øst-Europa"} + 154{"Nord-Europa"} + 155{"Vest-Europa"} + 172{"Samveldet av uavhengige stater"} + 419{"Latin-Amerika og Karibia"} AD{"Andorra"} - AE{"De forente arabiske emiratene"} + AE{"De forente arabiske emirater"} AF{"Afghanistan"} AG{"Antigua og Barbuda"} AI{"Anguilla"} @@ -26,6 +57,7 @@ nb{ AT{"Østerrike"} AU{"Australia"} AW{"Aruba"} + AX{"Åland"} AZ{"Aserbajdsjan"} BA{"Bosnia og Hercegovina"} BB{"Barbados"} @@ -48,9 +80,9 @@ nb{ BZ{"Belize"} CA{"Canada"} CC{"Kokosøyene (Keelingøyene)"} - CD{"Kongo, Den demokratiske republikken"} + CD{"Kongo-Kinshasa"} CF{"Den sentralafrikanske republikk"} - CG{"Kongo"} + CG{"Kongo-Brazzaville"} CH{"Sveits"} CI{"Elfenbenskysten"} CK{"Cookøyene"} @@ -59,6 +91,7 @@ nb{ CN{"Kina"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbia og Montenegro"} CU{"Cuba"} CV{"Kapp Verde"} CX{"Christmasøya"} @@ -130,7 +163,7 @@ nb{ KW{"Kuwait"} KY{"Caymanøyene"} KZ{"Kasakhstan"} - LA{"Laos, Den folkedemokratiske republikken"} + LA{"Laos"} LB{"Libanon"} LC{"St. Lucia"} LI{"Liechtenstein"} @@ -190,6 +223,7 @@ nb{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"avsidesliggende Oceania"} RE{"Reunion"} RO{"Romania"} RU{"Den russiske føderasjon"} @@ -208,7 +242,6 @@ nb{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Surinam"} ST{"Sao Tome og Principe"} SV{"El Salvador"} @@ -245,21 +278,16 @@ nb{ VU{"Vanuatu"} WF{"Wallis og Futuna"} WS{"Samoa"} - YE{"Yemen"} + YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoslavia"} ZA{"Sør-Afrika"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorranske dinarer", - } ADP{ "ADP", - "Andorranske pesetas", + "andorranske pesetas", } AED{ "AED", @@ -267,571 +295,375 @@ nb{ } AFA{ "AFA", - "Afghani (1927-2002)", + "afghani (1927-2002)", } AFN{ "Af", - "Afghani", - } - AIF{ - "AIF", - "Affar og Issa franc", - } - ALK{ - "ALK", - "Albanske lek (1946-1961)", + "afghani", } ALL{ "lek", - "Albanske lek", - } - ALV{ - "ALV", - "Albanske lek valute", - } - ALX{ - "ALX", - "Albanske dollar (FEC)", + "albanske lek", } AMD{ "dram", - "Armenske dram", + "armenske dram", } ANG{ "NA f.", - "Nederlandske antillegylden", + "nederlandske antillegylden", } AOA{ "AOA", - "Angolanske kwanza", + "angolanske kwanza", } AOK{ "AOK", - "Angolanske kwanza (1977-1990)", + "angolanske kwanza (1977-1990)", } AON{ "AON", - "Angolanske ny kwanza (1990-2000)", + "angolanske nye kwanza (1990-2000)", } AOR{ "AOR", - "Angolan Kwanza Reajustado (1995-1999)", - } - AOS{ - "AOS", - "Angolanske escudo", + "angolanske kwanza reajustado (1995-1999)", } ARA{ "ARA", - "Argentinske australer", - } - ARM{ - "ARM", - "Argentinske Peso Moneda Nacional", + "argentinske australer", } ARP{ "ARP", - "Argentinske pesos (1983-1985)", + "argentinske pesos (1983-1985)", } ARS{ "Arg$", - "Argentinske pesos", + "argentinske pesos", } ATS{ "ATS", - "Østerrikske shilling", + "østerrikske shilling", } AUD{ "$A", - "Australske dollar", - } - AUP{ - "AUP", - "Australske pund", + "australske dollar", } AWG{ "AWG", - "Arubiske gylden", + "arubiske gylden", } AZM{ "AZM", - "Aserbajdsjanske Manat", + "aserbajdsjanske manat", } BAD{ "BAD", - "Bosnia-Hercegovina dinarer", + "bosnisk-hercegovinske dinarer", } BAM{ "KM", - "Bosnia-Hercegovina mark (konvertible)", - } - BAN{ - "BAN", - "Bosnia-Hercegovina nye dinarer", + "bosnisk-hercegovinske mark (konvertible)", } BBD{ "BDS$", - "Barbadisk dollar", + "barbadiske dollar", } BDT{ "Tk", - "Bangladeshiske taka", + "bangladeshiske taka", } BEC{ "BEC", - "Belgiske franc (konvertible)", + "belgiske franc (konvertible)", } BEF{ "BF", - "Belgiske franc", + "belgiske franc", } BEL{ "BEL", - "Belgiske franc (økonomiske)", + "belgiske franc (finansielle)", } BGL{ "lev", - "Bulgarske lev (hard)", - } - BGM{ - "BGM", - "Bulgarske sosialist-lev", + "bulgarske lev (hard)", } BGN{ "BGN", - "Bulgarske lev", - } - BGO{ - "BGO", - "Bulgarske lev (1879-1952)", - } - BGX{ - "BGX", - "Bulgarske lev (FEC)", + "bulgarske lev", } BHD{ "BD", - "Bahrainske dinarer", + "bahrainske dinarer", } BIF{ "Fbu", - "Burundiske franc", + "burundiske franc", } BMD{ "Ber$", - "Bermudiske dollar", - } - BMP{ - "BMP", - "Bermudiske pund", + "bermudiske dollar", } BND{ "BND", - "Bruneiske dollar", + "bruneiske dollar", } BOB{ "Bs", - "Boliviano", - } - BOL{ - "BOL", - "Boliviano (1863-1962)", + "boliviano", } BOP{ "BOP", - "Boliviansk pesos", + "bolivianske pesos", } BOV{ "BOV", - "Boliviansk mvdol", + "bolivianske mvdol", } BRB{ "BRB", - "Brasiliansk cruzeiro novo (1967-1986)", + "brasilianske cruzeiro novo (1967-1986)", } BRC{ "BRC", - "Brasilianske cruzado", + "brasilianske cruzado", } BRE{ "BRE", - "Brasilianske cruzeiro (1990-1993)", + "brasilianske cruzeiro (1990-1993)", } BRL{ "R$", - "Brasilianske realer", + "brasilianske realer", } BRN{ "BRN", - "Brasilianske cruzado novo", + "brasilianske cruzado novo", } BRR{ "BRR", - "Brasilianske cruzeiro", - } - BRZ{ - "BRZ", - "Brasilianske cruzeiro (1942-1967)", + "brasilianske cruzeiro", } BSD{ "BSD", - "Bahamske dollar", - } - BSP{ - "BSP", - "Bahamske pund", + "bahamske dollar", } BTN{ "Nu", - "Bhutanske ngultrum", - } - BTR{ - "BTR", - "Bhutanske rupier", + "bhutanske ngultrum", } BUK{ "BUK", - "Burmesiske kyat", - } - BUR{ - "BUR", - "Burmesiske rupier", + "burmesiske kyat", } BWP{ "BWP", - "Botswanske pula", + "botswanske pula", } BYB{ "BYB", - "Hviterussiske nye rubler (1994-1999)", - } - BYL{ - "BYL", - "Hviterussiske rubler (1992-1994)", + "hviterussiske nye rubler (1994-1999)", } BYR{ "Rbl", - "Hviterussiske rubler", + "hviterussiske rubler", } BZD{ "BZ$", - "Beliziske dollar", - } - BZH{ - "BZH", - "Britisk Honduras-dollar", + "beliziske dollar", } CAD{ "Can$", - "Kanadiske dollar", + "kanadiske dollar", } CDF{ "CDF", - "Kongolesiske franc (congolais)", - } - CDG{ - "CDG", - "Kongolesiske republikk-franc", + "kongolesiske franc (congolais)", } - CDL{ - "CDL", - "Congolesiske zaire", - } - CFF{ - "CFF", - "Sentralafrikanske franc (CFA)", + CHE{ + "CHE", + "WIR euro", } CHF{ "SwF", - "Sveitsiske franc", - } - CKD{ - "CKD", - "Cookøyene dollar", - } - CLC{ - "CLC", - "Chilenske condor", + "sveitsiske franc", } - CLE{ - "CLE", - "Chilenske escudo", + CHW{ + "CHW", + "WIR franc", } CLF{ "CLF", - "Chilenske Unidades de Fomento", + "chilenske unidades de fomento", } CLP{ "Ch$", - "Chilenske pesos", - } - CMF{ - "CMF", - "Kamerunske franc (CFA)", - } - CNP{ - "CNP", - "Kinesiske Jen Min Piao Yuan", - } - CNX{ - "CNX", - "Kinesiske US dollar (FEC)", + "chilenske pesos", } CNY{ "Y", - "Kinesiske Yuan Renminbi", - } - COB{ - "COB", - "Colombianske papir-pesos", - } - COF{ - "COF", - "Kongolesiske franc (CFA)", + "kinesiske yuan renminbi", } COP{ "Col$", - "Colombianske pesos", + "colombianske pesos", + } + COU{ + "COU", + "unidad de valor real", } CRC{ "C", - "Costaricanske colon", + "costaricanske colon", } - CSC{ - "CSC", - "Tsjekkoslovakiske koruna", + CSD{ + "CSD", + "serbiske dinarer", } CSK{ "CSK", - "Tsjekkoslovakiske koruna (hard)", + "tsjekkoslovakiske koruna (hard)", } CUP{ "CUP", - "Kubanske pesos", - } - CUX{ - "CUX", - "Kubanske Foreign Exchange Certificates", + "kubanske pesos", } CVE{ "CVEsc", - "Kappverdiske escudo", - } - CWG{ - "CWG", - "Curacao-gylden", + "kappverdiske escudo", } CYP{ "£C", - "Kypriotiske pund", + "kypriotiske pund", } CZK{ "CZK", - "Tsjekkiske koruna", + "tsjekkiske koruna", } DDM{ "DDM", - "Østtyske ostmark", + "østtyske ostmark", } DEM{ "DEM", - "Tyske mark", - } - DES{ - "DES", - "Tyske sperrmark", + "tyske mark", } DJF{ "DF", - "Djiboutiske franc", + "djiboutiske franc", } DKK{ - "DKr", - "Danske kroner", + "Dkr", + "danske kroner", } DOP{ "RD$", - "Dominikanske pesos", + "dominikanske pesos", } DZD{ "DA", - "Algeriske dinarer", - } - DZF{ - "DZF", - "Algeriske nye franc", - } - DZG{ - "DZG", - "Algeriske franc germinal", + "algeriske dinarer", } ECS{ "ECS", - "Ecuadorianske sucre", + "ecuadorianske sucre", } ECV{ "ECV", - "Ecuadorianske Unidad de Valor Constante (UVC)", + "ecuadorianske unidad de valor constante (UVC)", } EEK{ "EEK", - "Estiske kroon", + "estiske kroon", } EGP{ "EGP", - "Egyptiske pund", + "egyptiske pund", } ERN{ "ERN", - "Eritreiske nakfa", + "eritreiske nakfa", + } + ESB{ + "ESB", + "spanske peseta (konvertibel konto)", } ESP{ "ESP", - "Spanske peseta", + "spanske peseta", } ETB{ "Br", - "Etiopiske birr", - } - ETD{ - "ETD", - "Etiopiske dollar", + "etiopiske birr", } EUR{ "€", - "Euro", + "euro", } FIM{ "FIM", - "Finske mark", - } - FIN{ - "FIN", - "Finske mark (1860-1962)", + "finske mark", } FJD{ "F$", - "Fijianske dollar", - } - FJP{ - "FJP", - "Fijianske pund", + "fijianske dollar", } FKP{ "FKP", "Falklandsøyene-pund", } - FOK{ - "FOK", - "Færøyske kronur", - } FRF{ "FRF", - "Franske franc", - } - FRG{ - "FRG", - "Franske franc (Germinal/Franc Poincare)", - } - GAF{ - "GAF", - "Gabonske franc (CFA)", + "franske franc", } GBP{ "£", - "Britiske pund sterling", + "britiske pund sterling", } GEK{ "GEK", - "Georgiske kupon larit", + "georgiske kupon larit", } GEL{ "lari", - "Georgiske lari", + "georgiske lari", } GHC{ "GHC", - "Ghanesiske cedi", - } - GHO{ - "GHO", - "Ghanesiske gamle cedi", - } - GHP{ - "GHP", - "Ghanesiske pund", - } - GHR{ - "GHR", - "Ghanesiske revaluerte cedi", + "ghanesiske cedi", } GIP{ "GIP", - "Gibraltarske pund", - } - GLK{ - "GLK", - "Grønlandske kroner", + "gibraltarske pund", } GMD{ "GMD", - "Gambiske dalasi", - } - GMP{ - "GMP", - "Gambiske pund", + "gambiske dalasi", } GNF{ "GF", - "Guineanske franc", - } - GNI{ - "GNI", - "Guineanske franc (1960-1972)", + "guineanske franc", } GNS{ "GNS", - "Guineanske syli", - } - GPF{ - "GPF", - "Guadeloupe-franc", + "guineanske syli", } GQE{ "GQE", - "Ekvatorialguineanske ekwele guineana", - } - GQF{ - "GQF", - "Ekvatorialguineanske franco", - } - GQP{ - "GQP", - "Ekvatorialguineanske peseta guineana", + "ekvatorialguineanske ekwele guineana", } GRD{ "GRD", - "Greske drakmer", - } - GRN{ - "GRN", - "Greske nye drakmer", + "greske drakmer", } GTQ{ "Q", - "Guatemalanske quetzal", - } - GUF{ - "GUF", - "Fransk Guyana-franc guiana", + "guatemalanske quetzal", } GWE{ "GWE", - "Portugisiske guinea escudo", - } - GWM{ - "GWM", - "Portugisiske Guinea Mil Reis", + "portugisiske guinea escudo", } GWP{ "GWP", @@ -839,7 +671,7 @@ nb{ } GYD{ "G$", - "Guyanske dollar", + "guyanske dollar", } HKD{ "HK$", @@ -851,1133 +683,1111 @@ nb{ } HRD{ "HRD", - "Kroatiske dinarer", + "kroatiske dinarer", } HRK{ "HRK", - "Kroatiske kuna", + "kroatiske kuna", } HTG{ "HTG", - "Haitiske gourde", + "haitiske gourde", } HUF{ "Ft", - "Ungarske forinter", - } - IBP{ - "IBP", - "Nordirske pund", - } - IDG{ - "IDG", - "Indonesiske nica-gylden", - } - IDJ{ - "IDJ", - "Indonesiske Java-rupier", - } - IDN{ - "IDN", - "Indonesiske nye rupier", + "ungarske forinter", } IDR{ "Rp", - "Indonesiske rupier", + "indonesiske rupier", } IEP{ "IR£", - "Irske pund", - } - ILL{ - "ILL", - "Israelske shekler", + "irske pund", } ILP{ "ILP", - "Israelske pund", + "israelske pund", } ILS{ "ILS", - "Israelske nye shekler", - } - IMP{ - "IMP", - "Manske pund sterling", + "israelske nye shekler", } INR{ "=0#Rs.|1#Re.|1/common/main/nb_NO.xml // * // *************************************************************************** nb_NO{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0 %", "#E0", } - Version{"1.2"} + Version{"1.38"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + DateTimePatterns{ + "'kl. 'HH.mm.ss z", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + "EEEE d. MMMM yyyy", + "d. MMMM yyyy", + "d. MMM. yyyy", + "dd.MM.yy", + "{1} {0}", + } + } + } } diff --git a/icuSources/data/locales/nl.txt b/icuSources/data/locales/nl.txt index c5b7d13c..7b2cd806 100644 --- a/icuSources/data/locales/nl.txt +++ b/icuSources/data/locales/nl.txt @@ -1,16 +1,49 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/nl.xml +// * Source File:/common/main/nl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/nl.xml + * ICU source: /xml/main/nl.xml */ nl{ + AuxExemplarCharacters{"[å ã ç ñ ô]"} Countries{ + 001{"Wereld"} + 002{"Afrika"} + 005{"Zuid-Amerika"} + 009{"Oceanië"} + 011{"West-Afrika"} + 013{"Midden-Amerika"} + 014{"Oost-Afrika"} + 015{"Noord-Afrika"} + 017{"Centraal-Afrika"} + 018{"Zuidelijk Afrika"} + 019{"Amerika"} + 021{"Noord-Amerika"} + 029{"Caribisch gebied"} + 030{"Oost-Azië"} + 034{"Zuid-Azië"} + 035{"Zuidoost-Azië"} + 039{"Zuid-Europa"} + 053{"Australië en Nieuw-Zeeland"} + 054{"Melanesië"} + 057{"Micronesië"} + 061{"Polynesië"} + 062{"Zuidelijk Centraal-Azië"} + 142{"Azië"} + 143{"Centraal-Azië"} + 145{"West-Azië"} + 150{"Europa"} + 151{"Oost-Europa"} + 154{"Noord-Europa"} + 155{"West-Europa"} + 419{"Latijns-Amerika en het Caribisch gebied"} + 830{"Kanaaleilanden"} + 833{"Isle of Man"} AD{"Andorra"} AE{"Verenigde Arabische Emiraten"} AF{"Afghanistan"} @@ -26,6 +59,7 @@ nl{ AT{"Oostenrijk"} AU{"Australië"} AW{"Aruba"} + AX{"Alandeilanden"} AZ{"Azerbeidzjan"} BA{"Bosnië Herzegovina"} BB{"Barbados"} @@ -59,6 +93,7 @@ nl{ CN{"China"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Servië en Montenegro"} CU{"Cuba"} CV{"Kaapverdië"} CX{"Christmaseiland"} @@ -80,7 +115,7 @@ nl{ FI{"Finland"} FJ{"Fiji"} FK{"Falklandeilanden"} - FM{"Micronesia, Federale Staten van"} + FM{"Micronesia"} FO{"Faeröer"} FR{"Frankrijk"} GA{"Gabon"} @@ -102,7 +137,7 @@ nl{ GW{"Guinee-Bissau"} GY{"Guyana"} HK{"Hongkong S.A.R. van China"} - HM{"Heardeiland en McDonaldeiland"} + HM{"Heard- en McDonaldeilanden"} HN{"Honduras"} HR{"Kroatië"} HT{"Haïti"} @@ -111,7 +146,7 @@ nl{ IE{"Ierland"} IL{"Israël"} IN{"India"} - IO{"Brits Territorium in de Indische Oceaan"} + IO{"Britse Gebieden in de Indische Oceaan"} IQ{"Irak"} IR{"Iran"} IS{"IJsland"} @@ -143,10 +178,10 @@ nl{ LY{"Libië"} MA{"Marokko"} MC{"Monaco"} - MD{"Republiek Moldavië"} + MD{"Moldavië"} MG{"Madagaskar"} MH{"Marshalleilanden"} - MK{"Macedonië, Republiek"} + MK{"Macedonië"} ML{"Mali"} MM{"Myanmar"} MN{"Mongolië"} @@ -190,9 +225,10 @@ nl{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"Oceanië (overige)"} RE{"Réunion"} RO{"Roemenië"} - RU{"Russische Federatie"} + RU{"Rusland"} RW{"Rwanda"} SA{"Saoedi-Arabië"} SB{"Salomonseilanden"} @@ -208,7 +244,6 @@ nl{ SM{"San Marino"} SN{"Senegal"} SO{"Somalië"} - SP{"Servië"} SR{"Suriname"} ST{"Sao Tomé en Principe"} SV{"El Salvador"} @@ -247,16 +282,11 @@ nl{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Joegoslavië"} ZA{"Zuid-Afrika"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorrese diner", - } ADP{ "ADP", "Andorrese peseta", @@ -273,26 +303,10 @@ nl{ "Af", "Afghani", } - AIF{ - "AIF", - "Affars en Issas-franc", - } - ALK{ - "ALK", - "Albanese lek (1946-1961)", - } ALL{ "lek", "Albanese lek", } - ALV{ - "ALV", - "Albanese lek valute", - } - ALX{ - "ALX", - "Albanese dollarwisselcertificaten", - } AMD{ "dram", "Armeense dram", @@ -317,18 +331,10 @@ nl{ "AOR", "Angolese kwanza reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolese escudo", - } ARA{ "ARA", "Argentijnse austral", } - ARM{ - "ARM", - "Argentijnse peso moneda nacional", - } ARP{ "ARP", "Argentijnse peso (1983-1985)", @@ -345,10 +351,6 @@ nl{ "$A", "Australische dollar", } - AUP{ - "AUP", - "Australisch pond", - } AWG{ "AWG", "Arubaanse gulden", @@ -365,10 +367,6 @@ nl{ "KM", "Bosnische convertibele mark", } - BAN{ - "BAN", - "Bosnische nieuwe dinar", - } BBD{ "BDS$", "Barbadaanse dollar", @@ -393,22 +391,10 @@ nl{ "lev", "Bulgaarse harde lev", } - BGM{ - "BGM", - "Bulgaarse socialistische lev", - } BGN{ "BGN", "Bulgaarse nieuwe lev", } - BGO{ - "BGO", - "Bulgaarse lev (1879-1952)", - } - BGX{ - "BGX", - "Bulgaarse levwisselcertificaten", - } BHD{ "BD", "Bahreinse dinar", @@ -421,10 +407,6 @@ nl{ "Ber$", "Bermuda-dollar", } - BMP{ - "BMP", - "Bermuda-pond", - } BND{ "BND", "Bruneise dollar", @@ -433,10 +415,6 @@ nl{ "Bs", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Boliviaanse peso", @@ -469,34 +447,18 @@ nl{ "BRR", "Braziliaanse cruzeiro", } - BRZ{ - "BRZ", - "Braziliaanse cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahamaanse dollar", } - BSP{ - "BSP", - "Bahamaans pond", - } BTN{ "Nu", "Bhutaanse ngultrum", } - BTR{ - "BTR", - "Bhutaanse rupee", - } BUK{ "BUK", "Birmese kyat", } - BUR{ - "BUR", - "Birmese rupee", - } BWP{ "BWP", "Botswaanse pula", @@ -505,10 +467,6 @@ nl{ "BYB", "Wit-Russische nieuwe roebel (1994-1999)", } - BYL{ - "BYL", - "Wit-Russische roebel (1992-1994)", - } BYR{ "Rbl", "Wit-Russische roebel", @@ -517,45 +475,25 @@ nl{ "BZ$", "Belizaanse dollar", } - BZH{ - "BZH", - "Brits-Hondurese dollar", - } CAD{ "Can$", "Canadese dollar", } CDF{ "CDF", - "Congolese franc congolais", - } - CDG{ - "CDG", "Congolese franc", } - CDL{ - "CDL", - "Congolese zaïre", - } - CFF{ - "CFF", - "Centraal-Afrikaanse CFA-franc", + CHE{ + "CHE", + "WIR euro", } CHF{ "SwF", "Zwitserse franc", } - CKD{ - "CKD", - "Cookeilandse dollar", - } - CLC{ - "CLC", - "Chileense condor", - } - CLE{ - "CLE", - "Chileense escudo", + CHW{ + "CHW", + "WIR franc", } CLF{ "CLF", @@ -565,41 +503,25 @@ nl{ "Ch$", "Chileense peso", } - CMF{ - "CMF", - "Kameroense CFA-franc", - } - CNP{ - "CNP", - "Chinese jen min piao yuan", - } - CNX{ - "CNX", - "Chinese Amerikaanse-dollarwisselcertificaten", - } CNY{ "Y", "Chinese yuan renminbi", } - COB{ - "COB", - "Colombiaanse papieren peso", - } - COF{ - "COF", - "Congolese CFA-franc", - } COP{ "Col$", "Colombiaanse peso", } + COU{ + "COU", + "Unidad de Valor Real", + } CRC{ "C", "Costaricaanse colón", } - CSC{ - "CSC", - "Tsjechoslowaakse koruna", + CSD{ + "CSD", + "Servische dinar", } CSK{ "CSK", @@ -609,18 +531,10 @@ nl{ "CUP", "Cubaanse peso", } - CUX{ - "CUX", - "Cubaanse wisselcertificaten", - } CVE{ "CVEsc", "Kaapverdische escudo", } - CWG{ - "CWG", - "Curaçao-gulden", - } CYP{ "£C", "Cyprisch pond", @@ -637,10 +551,6 @@ nl{ "DEM", "Duitse mark", } - DES{ - "DES", - "Duitse sperrmark", - } DJF{ "DF", "Djiboutiaanse franc", @@ -657,14 +567,6 @@ nl{ "DA", "Algerijnse dinar", } - DZF{ - "DZF", - "Algerijnse nieuwe franc", - } - DZG{ - "DZG", - "Algerijnse franc germinal", - } ECS{ "ECS", "Ecuadoraanse sucre", @@ -685,6 +587,14 @@ nl{ "ERN", "Eritrese nakfa", } + ESA{ + "ESA", + "Spaanse peseta (account A)", + } + ESB{ + "ESB", + "Spaanse peseta (convertibele account)", + } ESP{ "ESP", "Spaanse peseta", @@ -693,50 +603,26 @@ nl{ "Br", "Ethiopische birr", } - ETD{ - "ETD", - "Ethiopische dollar", - } EUR{ "€", - "Euro", + "euro", } FIM{ "FIM", "Finse markka", } - FIN{ - "FIN", - "Finse markka (1860-1962)", - } FJD{ "F$", "Fijische dollar", } - FJP{ - "FJP", - "Fijisch pond", - } FKP{ "FKP", "Falklandeilands pond", } - FOK{ - "FOK", - "Faeröerse kroon", - } FRF{ "FRF", "Franse franc", } - FRG{ - "FRG", - "Franse franc germinal/franc poincare", - } - GAF{ - "GAF", - "Gabonese CFA-franc", - } GBP{ "£", "Brits pond sterling", @@ -753,85 +639,37 @@ nl{ "GHC", "Ghanese cedi", } - GHO{ - "GHO", - "Ghanese oude cedi", - } - GHP{ - "GHP", - "Ghanees pond", - } - GHR{ - "GHR", - "Ghanese hergewaardeerde cedi", - } GIP{ "GIP", "Gibraltarees pond", } - GLK{ - "GLK", - "Groenlandse kroon", - } GMD{ "GMD", "Gambiaanse dalasi", } - GMP{ - "GMP", - "Gambiaans pond", - } GNF{ "GF", "Guinese franc", } - GNI{ - "GNI", - "Guinese franc (1960-1972)", - } GNS{ "GNS", "Guinese syli", } - GPF{ - "GPF", - "Guadeloupse franc", - } GQE{ "GQE", "Equatoriaal-Guinese ekwele guineana", } - GQF{ - "GQF", - "Equatoriaal-Guinese franco", - } - GQP{ - "GQP", - "Equatoriaal-Guinese peseta puineana", - } GRD{ "GRD", "Griekse drachme", } - GRN{ - "GRN", - "Griekse nieuwe drachme", - } GTQ{ "Q", "Guatemalteekse quetzal", } - GUF{ - "GUF", - "Frans-Guyaanse franc guiana", - } GWE{ "GWE", - "Portuguees-Guinese escudo", - } - GWM{ - "GWM", - "Portuguees-Guinese mil reis", + "Portugees-Guinese escudo", } GWP{ "GWP", @@ -847,7 +685,7 @@ nl{ } HNL{ "L", - "Hodurese lempira", + "Hondurese lempira", } HRD{ "HRD", @@ -865,22 +703,6 @@ nl{ "Ft", "Hongaarse forint", } - IBP{ - "IBP", - "Noord-Iers pond", - } - IDG{ - "IDG", - "Indonesische nica-gulden", - } - IDJ{ - "IDJ", - "Indonesische Java-rupiah", - } - IDN{ - "IDN", - "Indonesische nieuwe rupiah", - } IDR{ "Rp", "Indonesische rupiah", @@ -889,10 +711,6 @@ nl{ "IR£", "Iers pond", } - ILL{ - "ILL", - "Israëlische shekel", - } ILP{ "ILP", "Israëlisch pond", @@ -901,10 +719,6 @@ nl{ "ILS", "Israëlische nieuwe shekel", } - IMP{ - "IMP", - "Isle of Man pond sterling", - } INR{ "=0#Rs.|1#Re.|1/common/main/nl_BE.xml // * // *************************************************************************** nl_BE{ + Countries{ + 172{"Gemenebest van Onafhankelijke Staten"} + 833{"Het Eiland Man"} + } + Languages{ + lv{"Lets"} + oc{"Occitaans (na 1500); Provençaals"} + sa{"Sanskriet"} + sh{"Servo-Kroatisch"} + } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Types{ + collation{ + traditional{"Traditioneel"} + } + } + Version{"1.49"} calendar{ gregorian{ DateTimeElements:intvector{ @@ -21,7 +36,7 @@ nl_BE{ 4, } DateTimePatterns{ - "HH.mm' u. 'z", + "HH:mm:ss v", "HH:mm:ss z", "HH:mm:ss", "HH:mm", diff --git a/icuSources/data/locales/nl_NL.txt b/icuSources/data/locales/nl_NL.txt index 4c30e78f..b9e48897 100644 --- a/icuSources/data/locales/nl_NL.txt +++ b/icuSources/data/locales/nl_NL.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/nl_NL.xml +// * Source File:/common/main/nl_NL.xml // * // *************************************************************************** nl_NL{ NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤ #,##0.00;¤ #,##0.00-", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/nn.txt b/icuSources/data/locales/nn.txt index 2098e420..22bf59c8 100644 --- a/icuSources/data/locales/nn.txt +++ b/icuSources/data/locales/nn.txt @@ -1,31 +1,65 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/nn.xml +// * Source File:/common/main/nn.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/nn.xml + * ICU source: /xml/main/nn.xml */ nn{ + AuxExemplarCharacters{"[á ǎ č ç đ è ê ń ñ ŋ š ŧ ü ž ä ö]"} Countries{ + 002{"Afrika"} + 005{"Sør-Amerika"} + 009{"Oseania"} + 011{"Vest-Afrika"} + 013{"Sentral-Amerika"} + 014{"Aust-Afrika"} + 015{"Nord-Afrika"} + 017{"Sentral-Afrika"} + 018{"Sørlege Afrika"} + 019{"Amerika"} + 021{"Nord-Amerika"} + 029{"Karibiske hav"} + 030{"Aust-Asia"} + 034{"Sør-Asia"} + 035{"Søraust-Asia"} + 039{"Sør-Europa"} + 053{"Australia og New Zealand"} + 054{"Melanesia"} + 057{"Mikronesia"} + 061{"Polynesia"} + 062{"Sørlege Sentral-Asia"} + 142{"Asia"} + 143{"Sentral-Asia"} + 145{"Vest-Asia"} + 150{"Europa"} + 151{"Aust-Europa"} + 154{"Nord-Europa"} + 155{"Vest-Europa"} + 172{"Samveldet av uavhengige statar"} + 419{"Latin-Amerika og Karibia"} + 830{"Kanaløyane"} + 833{"Man"} AD{"Andorra"} - AE{"De forente arabiske emiratene"} + AE{"Dei sameinte arabiske emirata"} AF{"Afghanistan"} AG{"Antigua og Barbuda"} AI{"Anguilla"} AL{"Albania"} AM{"Armenia"} - AN{"De nederlandske antiller"} + AN{"Dei nederlandske Antillane"} AO{"Angola"} AQ{"Antarktis"} AR{"Argentina"} AS{"Amerikansk Samoa"} - AT{"Østerrike"} + AT{"Austerrike"} AU{"Australia"} AW{"Aruba"} + AX{"Åland"} AZ{"Aserbajdsjan"} BA{"Bosnia og Hercegovina"} BB{"Barbados"} @@ -44,21 +78,22 @@ nn{ BT{"Bhutan"} BV{"Bouvetøya"} BW{"Botswana"} - BY{"Hviterussland"} + BY{"Kviterussland"} BZ{"Belize"} CA{"Canada"} - CC{"Kokosøyene (Keelingøyene)"} + CC{"Kokosøyane (Keelingøyane)"} CD{"Kongo, Den demokratiske republikken"} CF{"Den sentralafrikanske republikk"} CG{"Kongo"} CH{"Sveits"} - CI{"Elfenbenskysten"} - CK{"Cookøyene"} + CI{"Elfenbeinskysten"} + CK{"Cookøyane"} CL{"Chile"} CM{"Kamerun"} CN{"Kina"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbia Montenegro"} CU{"Cuba"} CV{"Kapp Verde"} CX{"Christmasøya"} @@ -79,9 +114,9 @@ nn{ ET{"Etiopia"} FI{"Finland"} FJ{"Fiji"} - FK{"Falklandsøyene (Malvinas)"} + FK{"Falklandsøyane"} FM{"Mikronesiaføderasjonen"} - FO{"Færøyene"} + FO{"Færøyane"} FR{"Frankrike"} GA{"Gabon"} GB{"Storbritannia"} @@ -96,13 +131,13 @@ nn{ GP{"Guadeloupe"} GQ{"Ekvatorial-Guinea"} GR{"Hellas"} - GS{"Sør-Georgia og Sør-Sandwich-øyene"} + GS{"Sør-Georgia og Sør-Sandwich-øyane"} GT{"Guatemala"} GU{"Guam"} GW{"Guinea-Bissau"} GY{"Guyana"} HK{"Hong Kong S.A.R. (Kina)"} - HM{"Heard- og McDonaldsøyene"} + HM{"Heard- og McDonaldsøyane"} HN{"Honduras"} HR{"Kroatia"} HT{"Haiti"} @@ -128,7 +163,7 @@ nn{ KP{"Nord-Korea"} KR{"Sør-Korea"} KW{"Kuwait"} - KY{"Caymanøyene"} + KY{"Caymanøyane"} KZ{"Kasakhstan"} LA{"Laos, Den folkedemokratiske republikken"} LB{"Libanon"} @@ -145,13 +180,13 @@ nn{ MC{"Monaco"} MD{"Moldova"} MG{"Madagaskar"} - MH{"Marshalløyene"} + MH{"Marshalløyane"} MK{"Makedonia, Republikken"} ML{"Mali"} MM{"Myanmar"} MN{"Mongolia"} MO{"Macao S.A.R. (Kina)"} - MP{"Nord-Marianene"} + MP{"Nord-Marianane"} MQ{"Martinique"} MR{"Mauritania"} MS{"Montserrat"} @@ -165,7 +200,7 @@ nn{ NA{"Namibia"} NC{"Ny-Caledonia"} NE{"Niger"} - NF{"Norfolkøyene"} + NF{"Norfolkøyane"} NG{"Nigeria"} NI{"Nicaragua"} NL{"Nederland"} @@ -179,7 +214,7 @@ nn{ PE{"Peru"} PF{"Fransk Polynesia"} PG{"Papua Ny-Guinea"} - PH{"Filippinene"} + PH{"Filippinane"} PK{"Pakistan"} PL{"Polen"} PM{"St. Pierre og Miquelon"} @@ -190,13 +225,14 @@ nn{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"Ytre Oseania"} RE{"Reunion"} RO{"Romania"} RU{"Den russiske føderasjon"} RW{"Rwanda"} SA{"Saudi Arabia"} - SB{"Salomonøyene"} - SC{"Seychellene"} + SB{"Salomonøyane"} + SC{"Seychellane"} SD{"Sudan"} SE{"Sverige"} SG{"Singapore"} @@ -208,20 +244,19 @@ nn{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Surinam"} ST{"Sao Tome og Principe"} SV{"El Salvador"} SY{"Syria"} SZ{"Swaziland"} - TC{"Turks- og Caicosøyene"} + TC{"Turks- og Caicosøyane"} TD{"Tchad"} TF{"Franske sørområder"} TG{"Togo"} TH{"Thailand"} TJ{"Tadsjikistan"} TK{"Tokelau"} - TL{"Øst-Timor"} + TL{"Aust-Timor"} TM{"Turkmenistan"} TN{"Tunisia"} TO{"Tonga"} @@ -232,14 +267,14 @@ nn{ TZ{"Tanzania"} UA{"Ukraina"} UG{"Uganda"} - UM{"USAs mindre øyer"} + UM{"USAs ytre småøyar"} US{"USA"} UY{"Uruguay"} UZ{"Usbekistan"} VA{"Vatikanstaten"} - VC{"St. Vincent og Grenadinene"} + VC{"St. Vincent og Grenadinane"} VE{"Venezuela"} - VG{"Jomfruøyene (britisk)"} + VG{"Jomfruøyane (britisk)"} VI{"Jomfruøyene (USA)"} VN{"Vietnam"} VU{"Vanuatu"} @@ -247,7 +282,6 @@ nn{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Jugoslavia"} ZA{"Sør-Afrika"} ZM{"Zambia"} ZW{"Zimbabwe"} @@ -258,11 +292,495 @@ nn{ "NOK", } } - ExemplarCharacters{"[a-zæåøéóôàüǎ]"} + ExemplarCharacters{"[a à b-e é f-o ó ò ô p-z æ ø å]"} + Keys{ + calendar{"kalender"} + collation{"kollasjon"} + currency{"valuta"} + } Languages{ - nb{"norsk bokmål"} - nn{"norsk nynorsk"} + aa{"afar"} + ab{"abkhasisk"} + ace{"achinesisk"} + ach{"acoli"} + ada{"adangme"} + ady{"adyghe"} + ae{"avestisk"} + af{"afrikaans"} + afa{"afroasiatisk språk (anna)"} + afh{"afrihili"} + ain{"ainu"} + ak{"akan"} + akk{"akkadisk"} + ale{"aleutisk"} + alg{"algonkinsk språk"} + alt{"sør-altai"} + am{"amharisk"} + an{"aragonsk"} + ang{"gammalengelsk (ca. 450-1100)"} + anp{"angika"} + apa{"apache-språk"} + ar{"arabisk"} + arc{"arameisk"} + arn{"araukansk"} + arp{"arapaho"} + art{"kunstig (anna)"} + arw{"arawak"} + as{"assamisk"} + ast{"asturisk"} + ath{"athapaskansk språk"} + aus{"australsk språk"} + av{"avarisk"} + awa{"awadhi"} + ay{"aymara"} + az{"aserbajdsjansk"} + ba{"basjkirsk"} + bad{"banda"} + bai{"bamilekisk språk"} + bal{"baluchi"} + ban{"balinesisk"} + bas{"basa"} + bat{"baltisk (anna)"} + be{"kviterussisk"} + bej{"beja"} + bem{"bemba"} + ber{"berbisk"} + bg{"bulgarsk"} + bh{"bihari"} + bho{"bhojpuri"} + bi{"bislama"} + bik{"bikol"} + bin{"bini"} + bla{"siksika"} + bm{"bambara"} + bn{"bengali"} + bnt{"bantu"} + bo{"tibetansk"} + br{"bretonsk"} + bra{"braj"} + bs{"bosnisk"} + btk{"batak (Indonesia)"} + bua{"buriat"} + bug{"buginesisk"} + byn{"blin"} + ca{"katalansk"} + cad{"caddo"} + cai{"sentralamerikansk indiansk (anna)"} + car{"karibisk"} + cau{"kaukasisk (anna)"} + ce{"tsjetsjensk"} + ceb{"cebuansk"} + cel{"keltisk (anna)"} + ch{"chamorro"} + chb{"chibcha"} + chg{"chagatai"} + chk{"chuukesisk"} + chm{"mari"} + chn{"chinook"} + cho{"choctaw"} + chp{"chipewiansk"} + chr{"cherokee"} + chy{"cheyenne"} + cmc{"kamisk språk"} + co{"korsikansk"} + cop{"koptisk"} + cpe{"kreolsk og pidgin, engelskbasert (anna)"} + cpf{"kreolsk og pidgin, franskbasert (anna)"} + cpp{"kreolsk og pidgin, portugisiskbasert (anna)"} + cr{"cree"} + crh{"krimtatarisk"} + crp{"kreolsk og pidgin (anna)"} + cs{"tsjekkisk"} + csb{"kasjubisk"} + cu{"kyrkjeslavisk"} + cus{"kusjitisk språk (anna)"} + cv{"tsjuvansk"} + cy{"walisisk"} + da{"dansk"} + dak{"dakota"} + dar{"dargwa"} + day{"dayak"} + de{"tysk"} + del{"delaware"} + den{"slavej"} + dgr{"dogrib"} + din{"dinka"} + doi{"dogri"} + dra{"dravidisk språk (anna)"} + dsb{"lågsorbisk"} + dua{"duala"} + dum{"mellumnederlandsk"} + dv{"divehi"} + dyu{"dyula"} + dz{"dzongkha"} + ee{"ewe"} + efi{"efik"} + egy{"egyptisk (historisk)"} + eka{"ekajuk"} + el{"gresk"} + elx{"elamittisk"} + en{"engelsk"} + enm{"mellomengelsk (1100-1500)"} + eo{"esperanto"} + es{"spansk"} + et{"estisk"} + eu{"baskisk"} + ewo{"ewondo"} + fa{"persisk"} + fan{"fang"} + fat{"fanti"} + ff{"fulani"} + fi{"finsk"} + fil{"filippinsk"} + fiu{"finsk-ugrisk språk (anna)"} + fj{"fijiansk"} + fo{"færøysk"} + fon{"fon"} + fr{"fransk"} + frm{"mellomfransk (ca.1400-1600)"} + fro{"gammalfransk (842 til ca.1400)"} + frr{"nordfrisisk"} + frs{"austfrisisk"} + fur{"friuliansk"} + fy{"vestfrisisk"} + ga{"irsk"} + gaa{"ga"} + gay{"gayo"} + gba{"gbaya"} + gd{"skotsk-gælisk"} + gem{"germansk språk (anna)"} + gez{"ges"} + gil{"kiribatisk; gilbertesisk"} + gl{"galicisk"} + gmh{"mellomhøgtysk (ca.1050-1500)"} + gn{"guarani"} + goh{"gammalhøgtysk (ca.750-1050)"} + gon{"gondi"} + gor{"gorontalo"} + got{"gotisk"} + grb{"grebo"} + grc{"gammalgresk (til 1453)"} + gsw{"sveitsertysk"} + gu{"gujarati"} + gv{"manx"} + gwi{"gwichin"} + ha{"hausa"} + hai{"haida"} + haw{"hawaiisk"} + he{"hebraisk"} + hi{"hindi"} + hil{"hiligaynon"} + him{"himachali"} + hit{"hettittisk"} + hmn{"hmong"} + ho{"hiri motu"} + hr{"kroatisk"} + hsb{"høgsorbisk"} + ht{"haitisk"} + hu{"ungarsk"} + hup{"hupa"} + hy{"armensk"} + hz{"herero"} + ia{"interlingua"} + iba{"iban"} + id{"indonesisk"} + ie{"interlingue"} + ig{"ibo"} + ii{"sichuan-yi"} + ijo{"ijo"} + ik{"inupiak"} + ilo{"iloko"} + inc{"indisk språk (anna)"} + ine{"indo-europeisk språk (anna)"} + inh{"ingusjisk"} + io{"ido"} + ira{"iransk"} + iro{"irokansk språk"} + is{"islandsk"} + it{"italiensk"} + iu{"inuktitut"} + ja{"japansk"} + jbo{"lojban"} + jpr{"jødepersisk"} + jrb{"jødearabisk"} + jv{"javanesisk"} + ka{"georgisk"} + kaa{"karakalpakisk"} + kab{"kabylsk"} + kac{"kachin"} + kam{"kamba"} + kar{"karensk"} + kaw{"kawi"} + kbd{"kabardisk"} + kg{"kikongo"} + kha{"khasi"} + khi{"khoisanspråk (anna)"} + kho{"khotanesisk"} + ki{"kikuyu"} + kj{"kuanyama"} + kk{"kasakhisk"} + kl{"kalaallisut; grønlandsk"} + km{"khmer"} + kmb{"kimbundu"} + kn{"kannada"} + ko{"koreansk"} + kok{"konkani"} + kos{"kosraeansk"} + kpe{"kpelle"} + kr{"kanuri"} + krc{"karachay-balkar"} + krl{"karelsk"} + kro{"kru"} + kru{"kurukh"} + ks{"kasjmiri"} + ku{"kurdisk"} + kum{"kumyk"} + kut{"kutenai"} + kv{"komi"} + kw{"kornisk"} + ky{"kirgisisk"} + la{"latin"} + lad{"ladinsk"} + lah{"lahnda"} + lam{"lamba"} + lb{"luxemburgsk"} + lez{"lezghian"} + lg{"ganda"} + li{"limburgisk"} + ln{"lingala"} + lo{"laotisk"} + lol{"mongo"} + loz{"lozi"} + lt{"litauisk"} + lu{"luba-katanga"} + lua{"luba-lulua"} + lui{"luiseno"} + lun{"lunda"} + luo{"luo"} + lus{"lushai"} + lv{"latvisk"} + mad{"maduresisk"} + mag{"magahi"} + mai{"maithili"} + mak{"makasar"} + man{"mandingo"} + map{"austronesisk"} + mas{"masai"} + mdf{"moksha"} + mdr{"mandar"} + men{"mende"} + mg{"madagassisk"} + mga{"mellomirsk (900-1200)"} + mh{"marshallesisk"} + mi{"maori"} + mic{"micmac"} + min{"minangkabau"} + mis{"ulike språk"} + mk{"makedonsk"} + mkh{"mon-khmerspråk (anna)"} + ml{"malayalam"} + mn{"mongolsk"} + mnc{"mandsju"} + mni{"manipuri"} + mno{"manobospråk"} + mo{"moldavisk"} + moh{"mohawk"} + mos{"mossi"} + mr{"marathi"} + ms{"malayisk"} + mt{"maltesisk"} + mul{"fleire språk"} + mun{"mundaspråk"} + mus{"creek"} + mwl{"mirandesisk"} + mwr{"marwari"} + my{"burmesisk"} + myn{"mayaspråk"} + myv{"erzya"} + na{"nauru"} + nah{"nahuatl"} + nai{"nordamerikansk indiansk språk (anna)"} + nap{"napolitansk"} + nb{"bokmål"} + nd{"nord-ndebele"} + nds{"lågtysk; lågsaksisk"} + ne{"nepalsk"} + new{"newari"} + ng{"ndonga"} + nia{"nias"} + nic{"niger-kordofaniansk språk (anna)"} + niu{"niueansk"} + nl{"nederlandsk"} + nn{"nynorsk"} no{"norsk"} + nog{"nogai"} + non{"gammalnorsk"} + nr{"sør-ndebele"} + nso{"nordsotho"} + nub{"nubisk språk"} + nv{"navajo"} + nwc{"klassisk newarisk"} + ny{"nyanja"} + nym{"nyamwezi"} + nyn{"nyankole"} + nyo{"nyoro"} + nzi{"nzima"} + oc{"oksitansk (etter 1500)"} + oj{"ojibwa"} + om{"oromo"} + or{"oriya"} + os{"ossetisk"} + osa{"osage"} + ota{"ottomansk tyrkisk"} + oto{"otomisk språk"} + pa{"panjabi"} + paa{"papuisk språk (anna)"} + pag{"pangasinan"} + pal{"pahlavi"} + pam{"pampanga"} + pap{"papiamento"} + pau{"palauisk"} + peo{"gammalpersisk (ca. 600-400 f. kr.)"} + phi{"filippinsk språk (anna)"} + phn{"fønikisk"} + pi{"pali"} + pl{"polsk"} + pon{"ponapisk"} + pra{"prakrit-språk"} + pro{"gammalprovençalsk"} + ps{"pashto"} + pt{"portugisisk"} + qu{"quechua"} + raj{"rajasthani"} + rap{"rapanui"} + rar{"rarotongansk"} + rm{"retoromansk"} + rn{"rundi"} + ro{"rumensk"} + roa{"romansk språk (anna)"} + rom{"romani"} + root{"rot"} + ru{"russisk"} + rup{"aromansk"} + rw{"kinjarwanda"} + sa{"sanskrit"} + sad{"sandawe"} + sah{"jakutsk"} + sai{"søramerikansk indiansk språk (anna)"} + sal{"salishansk språk"} + sam{"samaritansk arameisk"} + sas{"sasak"} + sat{"santali"} + sc{"sardinsk"} + scn{"siciliansk"} + sco{"skotsk"} + sd{"sindhi"} + se{"nordsamisk"} + sel{"selkupisk"} + sem{"semittisk språk (anna)"} + sg{"sango"} + sga{"gammalirsk (til 900)"} + sgn{"teiknspråk"} + shn{"shan"} + si{"singalesisk"} + sid{"sidamo"} + sio{"sioux-språk"} + sit{"sino-tibetansk språk (anna)"} + sk{"slovakisk"} + sl{"slovensk"} + sla{"slavisk språk (anna)"} + sm{"samoansk"} + sma{"sørsamisk"} + smi{"samisk språk (anna)"} + smj{"lulesamisk"} + smn{"enaresamisk"} + sms{"skoltesamisk"} + sn{"shona"} + snk{"soninke"} + so{"somali"} + sog{"sogdisk"} + son{"songhai"} + sq{"albansk"} + sr{"serbisk"} + srn{"sranan tongo"} + srr{"serer"} + ss{"swati"} + ssa{"nilo-saharaspråk (anna)"} + st{"sørsotho"} + su{"sundanesisk"} + suk{"sukuma"} + sus{"susu"} + sux{"sumerisk"} + sv{"svensk"} + sw{"swahili"} + syr{"syrisk"} + ta{"tamil"} + tai{"taispråk (anna)"} + te{"telugu"} + tem{"temne"} + ter{"tereno"} + tet{"tetum"} + tg{"tatsjikisk"} + th{"thai"} + ti{"tigrinja"} + tig{"tigré"} + tiv{"tivi"} + tk{"turkmensk"} + tkl{"tokelau"} + tl{"tagalog"} + tlh{"klingon"} + tli{"tlingit"} + tmh{"tamasjek"} + tn{"tswana"} + to{"tonga (Tonga-øyane)"} + tog{"tonga (Nyasa)"} + tpi{"tok pisin"} + tr{"tyrkisk"} + ts{"tsonga"} + tsi{"tsimshian"} + tt{"tatarisk"} + tum{"tumbuka"} + tup{"tupi-språk"} + tut{"altaisk (anna)"} + tvl{"tuvalu"} + tw{"twi"} + ty{"tahitisk"} + tyv{"tuvinisk"} + udm{"udmurt"} + ug{"uigurisk"} + uga{"ugaritisk"} + uk{"ukrainsk"} + umb{"umbundu"} + und{"ikkje bestemt"} + ur{"urdu"} + uz{"usbekisk"} + vai{"vai"} + ve{"venda"} + vi{"vietnamesisk"} + vo{"volapyk"} + vot{"votisk"} + wa{"vallonsk"} + wak{"wakasjansk språk"} + wal{"walamo"} + war{"waray"} + was{"washo"} + wen{"sorbisk språk"} + wo{"wolof"} + xal{"kalmyk"} + xh{"xhosa"} + yao{"yao"} + yap{"yapesisk"} + yi{"jiddisk"} + yo{"joruba"} + ypk{"jupisk språk"} + za{"zhuang"} + zap{"zapotec"} + zen{"zenaga"} + zh{"kinesisk"} + znd{"zande"} + zu{"zulu"} + zun{"zuni"} + zxx{"utan språkleg innhald"} } LocaleScript{ "Latn", @@ -278,16 +796,150 @@ nn{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + NumberPatterns{ + "#,##0.###", + "¤ #,##0.00", + "#,##0 %", + "#E0", + } + Scripts{ + Arab{"arabisk"} + Armn{"armensk"} + Bali{"balinesisk"} + Batk{"batak"} + Beng{"bengali"} + Blis{"blissymbol"} + Bopo{"bopomofo"} + Brah{"brahmi"} + Brai{"braille"} + Bugi{"buginesisk"} + Buhd{"buhid"} + Cans{"felles kanadiske urspråksstavingar"} + Cham{"cham"} + Cher{"cherokee"} + Cirt{"cirth"} + Copt{"koptisk"} + Cprt{"kypriotisk"} + Cyrl{"kyrillisk"} + Cyrs{"kyrillisk (kyrkjeslavisk variant)"} + Deva{"devanagari"} + Dsrt{"deseret"} + Egyd{"egyptisk demotisk"} + Egyh{"egyptisk hieratisk"} + Egyp{"egyptiske hieroglyfar"} + Ethi{"etiopisk"} + Geok{"khutsuri (asomtavruli og nuskhuri)"} + Geor{"georgisk"} + Glag{"glagolittisk"} + Goth{"gotisk"} + Grek{"gresk"} + Gujr{"gujarati"} + Guru{"gurmukhi"} + Hang{"hangul"} + Hani{"han"} + Hano{"hanunoo"} + Hans{"forenkla han"} + Hant{"tradisjonell han"} + Hebr{"hebraisk"} + Hira{"hiragana"} + Hmng{"pahawk hmong"} + Hrkt{"katakana eller hiragana"} + Hung{"gammalungarsk"} + Inds{"indus (Harappan)"} + Ital{"gammalitalisk"} + Java{"javanesisk"} + Kali{"kayah li"} + Kana{"katakana"} + Khar{"kharoshthi"} + Khmr{"khmer"} + Knda{"kannada"} + Laoo{"laotisk"} + Latf{"latinsk (frakturvariant)"} + Latg{"latinsk (gælisk variant)"} + Latn{"latinsk"} + Lepc{"lepcha (róng)"} + Limb{"lumbu"} + Lina{"lineær A"} + Linb{"lineær B"} + Mand{"mandaisk"} + Maya{"maya-hieroglyfar"} + Mero{"meroitisk"} + Mlym{"malayalam"} + Mong{"mongolsk"} + Mymr{"myanmar"} + Nkoo{"n'ko"} + Ogam{"ogham"} + Orkh{"orkhon"} + Orya{"oriya"} + Osma{"osmanya"} + Perm{"gammalpermisk"} + Phag{"phags-pa"} + Phnx{"fønikisk"} + Plrd{"pollard-fonetisk"} + Qaai{"nedarva"} + Roro{"rongorongo"} + Runr{"runer"} + Sara{"sarati"} + Shaw{"shavisk"} + Sinh{"sinhala"} + Sylo{"syloti nagri"} + Syrc{"syriakisk"} + Syre{"syriakisk (estrangelo-variant)"} + Syrj{"syriakisk (vestleg variant)"} + Syrn{"syriakisk (austleg variant)"} + Tagb{"tagbanwa"} + Tale{"tai le"} + Talu{"ny tai lue"} + Taml{"tamilsk"} + Telu{"telugu"} + Teng{"tengwar"} + Tfng{"tifinagh (berber)"} + Tglg{"tagalog"} + Thaa{"thaana"} + Thai{"thai"} + Tibt{"tibetansk"} + Ugar{"ugaritisk"} + Vaii{"vai"} + Visp{"synleg tale"} + Xpeo{"gammalpersisk"} + Xsux{"sumero-akkadisk kileskrift"} + Yiii{"yi"} + Zxxx{"kode for språk utan skrift"} + Zyyy{"felles"} + Zzzz{"kode for ukoda skrift"} + } + Types{ + calendar{ + buddhist{"buddhistisk kalender"} + chinese{"kinesisk kalender"} + gregorian{"gregoriansk kalender"} + hebrew{"hebraisk kalender"} + islamic{"islamsk kalender"} + islamic-civil{"islamsk sivil kalender"} + japanese{"japansk kalender"} + } + collation{ + big5han{"tradisjonell kinesisk (Big5)"} + direct{"direkte sortering"} + gb2312han{"forenkla kinesisk"} + phonebook{"telefonkatalogsortering"} + pinyin{"pinyin-sortering"} + stroke{"streksortering"} + traditional{"tradisjonell sortering"} + } + } + Variants{ + 1901{"tradisjonell tysk ortografi"} + 1996{"tysk ortografi frå 1996"} + POLYTONI{"polytonisk"} + REVISED{"revidert ortografi"} + } + Version{"1.60"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 4, - } DateTimePatterns{ "'kl. 'HH.mm.ss z", "HH.mm.ss z", @@ -320,6 +972,17 @@ nn{ "laurdag", } } + stand-alone{ + narrow{ + "S", + "M", + "T", + "O", + "T", + "F", + "L", + } + } } eras{ abbreviated{ @@ -327,6 +990,41 @@ nn{ "e.Kr.", } } + fields{ + day{ + dn{"dag"} + } + dayperiod{ + dn{"f.m./e.m.-val"} + } + era{ + dn{"æra"} + } + hour{ + dn{"time"} + } + minute{ + dn{"minutt"} + } + month{ + dn{"månad"} + } + second{ + dn{"sekund"} + } + week{ + dn{"veke"} + } + weekday{ + dn{"vekedag"} + } + year{ + dn{"år"} + } + zone{ + dn{"sone"} + } + } monthNames{ format{ abbreviated{ @@ -358,7 +1056,70 @@ nn{ "desember", } } + stand-alone{ + narrow{ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D", + } + } + } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "1. kvartal", + "2. kvartal", + "3. kvartal", + "4. kvartal", + } + } } } } + measurementSystemNames{ + US{"amerikansk"} + metric{"metrisk"} + } + zoneStrings{ + "America:Godthab"{ + ec{"Godthåb"} + } + "America:Mexico_City"{ + ec{"Mexico by"} + } + "Antarctica:South_Pole"{ + ec{"Sørpolen"} + } + "Asia:Tashkent"{ + ec{"Tasjkent"} + } + "Asia:Ulaanbaatar"{ + ec{"Ulan Bator"} + } + "Europe:Lisbon"{ + ec{"Lisboa"} + } + "Europe:Moscow"{ + ec{"Moskva"} + } + "Pacific:Easter"{ + ec{"Påskeøya"} + } + hourFormat{"+HH.mm;-HH.mm"} + } } diff --git a/icuSources/data/locales/nn_NO.txt b/icuSources/data/locales/nn_NO.txt index 9ecf9a0a..6969a3a2 100644 --- a/icuSources/data/locales/nn_NO.txt +++ b/icuSources/data/locales/nn_NO.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/nn_NO.xml +// * Source File:/common/main/nn_NO.xml // * // *************************************************************************** nn_NO{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", - "#,##0%", + "#,##0.###", + "#,##0.00 ¤", + "#,##0 %", "#E0", } - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } } diff --git a/icuSources/data/locales/no.txt b/icuSources/data/locales/no.txt index a5c9f534..5c9ef745 100644 --- a/icuSources/data/locales/no.txt +++ b/icuSources/data/locales/no.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** no{ diff --git a/icuSources/data/locales/no_NO.txt b/icuSources/data/locales/no_NO.txt index 454d1162..c934eb7c 100644 --- a/icuSources/data/locales/no_NO.txt +++ b/icuSources/data/locales/no_NO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** no_NO{ diff --git a/icuSources/data/locales/no_NO_NY.txt b/icuSources/data/locales/no_NO_NY.txt index 85ef60b0..b0c7c5d8 100644 --- a/icuSources/data/locales/no_NO_NY.txt +++ b/icuSources/data/locales/no_NO_NY.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** no_NO_NY{ diff --git a/icuSources/data/locales/om.txt b/icuSources/data/locales/om.txt index 98aba800..2d4427dc 100644 --- a/icuSources/data/locales/om.txt +++ b/icuSources/data/locales/om.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/om.xml +// * Source File:/common/main/om.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/om.xml + * ICU source: /xml/main/om.xml */ om{ Countries{ @@ -27,13 +27,9 @@ om{ LocaleScript{ "Latn", } - Version{"1.2"} + Version{"1.40"} calendar{ gregorian{ - DateTimeElements:intvector{ - 7, - 1, - } dayNames{ format{ abbreviated{ @@ -55,6 +51,17 @@ om{ "Sanbata", } } + stand-alone{ + narrow{ + "S", + "M", + "T", + "W", + "T", + "F", + "S", + } + } } eras{ abbreviated{ @@ -93,6 +100,22 @@ om{ "Muddee", } } + stand-alone{ + narrow{ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D", + } + } } } } diff --git a/icuSources/data/locales/om_ET.txt b/icuSources/data/locales/om_ET.txt index b794da16..063793ee 100644 --- a/icuSources/data/locales/om_ET.txt +++ b/icuSources/data/locales/om_ET.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/om_ET.xml +// * Source File:/common/main/om_ET.xml // * // *************************************************************************** om_ET{ Currencies{ ETB{ "$", - "ETB", + "Itoophiyaa Birrii", } USD{ "US$", @@ -18,18 +18,22 @@ om_ET{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ AmPmMarkers{ "WD", "WB", } + DateTimeElements:intvector{ + 7, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/om_KE.txt b/icuSources/data/locales/om_KE.txt index 3e5425c8..d83928f6 100644 --- a/icuSources/data/locales/om_KE.txt +++ b/icuSources/data/locales/om_KE.txt @@ -1,25 +1,29 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/om_KE.xml +// * Source File:/common/main/om_KE.xml // * // *************************************************************************** om_KE{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ AmPmMarkers{ "WD", "WB", } + DateTimeElements:intvector{ + 7, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/or.txt b/icuSources/data/locales/or.txt index 01a5adc9..fc3b8edf 100644 --- a/icuSources/data/locales/or.txt +++ b/icuSources/data/locales/or.txt @@ -1,85 +1,83 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/or.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/or.xml - */ -or{ - Countries{ - IN{"ଭାରତ"} - } - ExemplarCharacters{"[ଁଂଃଅଆଇଈଉଊଋଌଏଐଓଔକଖଗଘଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନପଫବଭମଯରଲଳଵଶଷସହ଼ଽାିୀୁୂୃେୈୋୌ୍ୖୗଡ଼ଢ଼ୟୠୡ୰ୱ]"} - Languages{ - or{"ଓଡ଼ିଆ"} - } - LocaleScript{ - "Orya", - } - NumberElements{ - ".", - ",", - ";", - "%", - "୦", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - /** - * Draft - */ - Version{"1.0"} - calendar{ - gregorian{ - dayNames{ - format{ - abbreviated{ - "ରବି", - "ସୋମ", - "ମଙ୍ଗଳ", - "ବୁଧ", - "ଗୁରୁ", - "ଶୁକ୍ର", - "ଶନି", - } - wide{ - "ରବିବାର", - "ସୋମବାର", - "ମଙ୍ଗଳବାର", - "ବୁଧବାର", - "ଗୁରୁବାର", - "ଶୁକ୍ରବାର", - "ଶନିବାର", - } - } - } - monthNames{ - format{ - wide{ - "ଜାନୁଆରୀ", - "ଫେବ୍ରୁୟାରୀ", - "ମାର୍ଚ୍ଚ", - "ଅପ୍ରେଲ", - "ମେ", - "ଜୁନ", - "ଜୁଲାଇ", - "ଅଗଷ୍ଟ", - "ସେପ୍ଟେମ୍ବର", - "ଅକ୍ଟୋବର", - "ନଭେମ୍ବର", - "ଡିସେମ୍ବର", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/or.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/or.xml + */ +or{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + IN{"ଭାରତ"} + } + ExemplarCharacters{"[ଅ-ଋ ଏ ଐ ଓ-ନ ପ-ର ଲ ଳ ଶ-ହ ୟ ୱ ଵ ଂ ଃ ଁ ୍ ଼ ା-ୃ େ ୈ ୋ ୌ]"} + Languages{ + or{"ଓଡ଼ିଆ"} + } + LocaleScript{ + "Orya", + } + NumberElements{ + ".", + ",", + ";", + "%", + "୦", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Version{"1.27"} + calendar{ + gregorian{ + dayNames{ + format{ + abbreviated{ + "ରବି", + "ସୋମ", + "ମଙ୍ଗଳ", + "ବୁଧ", + "ଗୁରୁ", + "ଶୁକ୍ର", + "ଶନି", + } + wide{ + "ରବିବାର", + "ସୋମବାର", + "ମଙ୍ଗଳବାର", + "ବୁଧବାର", + "ଗୁରୁବାର", + "ଶୁକ୍ରବାର", + "ଶନିବାର", + } + } + } + monthNames{ + format{ + wide{ + "ଜାନୁଆରୀ", + "ଫେବ୍ରୁୟାରୀ", + "ମାର୍ଚ୍ଚ", + "ଅପ୍ରେଲ", + "ମେ", + "ଜୁନ", + "ଜୁଲାଇ", + "ଅଗଷ୍ଟ", + "ସେପ୍ଟେମ୍ବର", + "ଅକ୍ଟୋବର", + "ନଭେମ୍ବର", + "ଡିସେମ୍ବର", + } + } + } + } + } +} diff --git a/icuSources/data/locales/or_IN.txt b/icuSources/data/locales/or_IN.txt index ebd83312..b4c14bd2 100644 --- a/icuSources/data/locales/or_IN.txt +++ b/icuSources/data/locales/or_IN.txt @@ -1,28 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/or_IN.xml +// * Source File:/common/main/or_IN.xml // * // *************************************************************************** or_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - /** - * Draft - */ - Version{"1.0"} + Version{"1.29"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", @@ -34,6 +27,12 @@ or_IN{ "dd-MM-yy", "{1} {0}", } + availableFormats{ + MMMMd{"d MMMM"} + MMdd{"dd-MM"} + yyyyMM{"MM-yyyy"} + yyyyMMMM{"MMMM yyyy"} + } weekend:intvector{ 1, 0, diff --git a/icuSources/data/locales/pa.txt b/icuSources/data/locales/pa.txt index dbe8b756..61ba1f14 100644 --- a/icuSources/data/locales/pa.txt +++ b/icuSources/data/locales/pa.txt @@ -1,112 +1,152 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/pa.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/pa.xml - */ -pa{ - Countries{ - IN{"ਭਾਰਤ"} - } - Currencies{ - INR{ - "ਰੁ.", - "ਰੁਪਿਯ", - } - } - ExemplarCharacters{"[ਂ-ਃਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ਼ਾ-ੂੇ-ੈੋ-੍ਖ਼-ੜਫ਼ੰ-ੴ]"} - Languages{ - pa{"ਪੰਜਾਬੀ"} - } - LocaleScript{ - "Guru", - } - NumberElements{ - ".", - ",", - ";", - "%", - "੦", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "ਸਵੇਰੇ", - "ਸ਼ਾਮ", - } - dayNames{ - format{ - abbreviated{ - "ਐਤ.", - "ਸੋਮ.", - "ਮੰਗਲ.", - "ਬੁਧ.", - "ਵੀਰ.", - "ਸ਼ੁਕਰ.", - "ਸ਼ਨੀ.", - } - wide{ - "ਐਤਵਾਰ", - "ਸੋਮਵਾਰ", - "ਮੰਗਲਵਾਰ", - "ਬੁਧਵਾਰ", - "ਵੀਰਵਾਰ", - "ਸ਼ੁੱਕਰਵਾਰ", - "ਸ਼ਨੀਚਰਵਾਰ", - } - } - } - monthNames{ - format{ - abbreviated{ - "ਜਨਵਰੀ", - "ਫ਼ਰਵਰੀ", - "ਮਾਰਚ", - "ਅਪ੍ਰੈਲ", - "ਮਈ", - "ਜੂਨ", - "ਜੁਲਾਈ", - "ਅਗਸਤ", - "ਸਤੰਬਰ", - "ਅਕਤੂਬਰ", - "ਨਵੰਬਰ", - "ਦਸੰਬਰ", - } - wide{ - "ਜਨਵਰੀ", - "ਫ਼ਰਵਰੀ", - "ਮਾਰਚ", - "ਅਪ੍ਰੈਲ", - "ਮਈ", - "ਜੂਨ", - "ਜੁਲਾਈ", - "ਅਗਸਤ", - "ਸਤੰਬਰ", - "ਅਕਤੂਬਰ", - "ਨਵੰਬਰ", - "ਦਸੰਬਰ", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/pa.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/pa.xml + */ +pa{ + AuxExemplarCharacters{"[\u200C \u200D ਁ-ਃ {ਲ਼}]"} + Countries{ + IN{"ਭਾਰਤ"} + } + Currencies{ + INR{ + "ਰੁ.", + "ਰੁਪਿਯ", + } + } + ExemplarCharacters{ + "[਼ ੰ ੱ ੦-੯ ੴ ੳ ਉ ਊ ਓ ਅ ਆ ਐ ਔ ੲ ਇ ਈ ਏ ਸ {ਸ਼} ਹ ਕ ਖ {ਖ਼} ਗ {ਗ਼} ਘ-ਜ {ਜ਼} ਝ-ਨ ਪ" + " ਫ {ਫ਼} ਬ-ਰ ਲ ਵ ੜ ਾ-ੂ ੇ ੈ ੋ-੍]" + } + Languages{ + pa{"ਪੰਜਾਬੀ"} + } + LocaleScript{ + "Guru", + } + NumberElements{ + ".", + ",", + ";", + "%", + "੦", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + NumberPatterns{ + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", + "#E0", + } + Version{"1.45"} + calendar{ + gregorian{ + AmPmMarkers{ + "ਸਵੇਰੇ", + "ਸ਼ਾਮ", + } + dayNames{ + format{ + abbreviated{ + "ਐਤ.", + "ਸੋਮ.", + "ਮੰਗਲ.", + "ਬੁਧ.", + "ਵੀਰ.", + "ਸ਼ੁਕਰ.", + "ਸ਼ਨੀ.", + } + wide{ + "ਐਤਵਾਰ", + "ਸੋਮਵਾਰ", + "ਮੰਗਲਵਾਰ", + "ਬੁਧਵਾਰ", + "ਵੀਰਵਾਰ", + "ਸ਼ੁੱਕਰਵਾਰ", + "ਸ਼ਨੀਚਰਵਾਰ", + } + } + } + fields{ + day{ + dn{"ਦਿਨ"} + } + hour{ + dn{"ਘੰਟਾ"} + } + minute{ + dn{"ਮਿੰਟ"} + } + month{ + dn{"ਮਹੀਨਾ"} + } + week{ + dn{"ਹਫ਼ਤਾ"} + } + weekday{ + dn{"ਹਫ਼ਤੇ ਦਾ ਦਿਨ"} + } + year{ + dn{"ਸਾਲ"} + } + zone{ + dn{"ਖੇਤਰ"} + } + } + monthNames{ + format{ + abbreviated{ + "ਜਨਵਰੀ", + "ਫ਼ਰਵਰੀ", + "ਮਾਰਚ", + "ਅਪ੍ਰੈਲ", + "ਮਈ", + "ਜੂਨ", + "ਜੁਲਾਈ", + "ਅਗਸਤ", + "ਸਤੰਬਰ", + "ਅਕਤੂਬਰ", + "ਨਵੰਬਰ", + "ਦਸੰਬਰ", + } + wide{ + "ਜਨਵਰੀ", + "ਫ਼ਰਵਰੀ", + "ਮਾਰਚ", + "ਅਪ੍ਰੈਲ", + "ਮਈ", + "ਜੂਨ", + "ਜੁਲਾਈ", + "ਅਗਸਤ", + "ਸਤੰਬਰ", + "ਅਕਤੂਬਰ", + "ਨਵੰਬਰ", + "ਦਸੰਬਰ", + } + } + } + quarters{ + format{ + wide{ + "ਪਹਿਲਾਂ ਚੌਥਾਈ", + "ਦੂਜਾ ਚੌਥਾਈ", + "ਤੀਜਾ ਚੌਥਾਈ", + "ਚੌਥਾ ਚੌਥਾਈ", + } + } + } + } + } +} diff --git a/icuSources/data/locales/pa_IN.txt b/icuSources/data/locales/pa_IN.txt index 0bbaa539..32086c4a 100644 --- a/icuSources/data/locales/pa_IN.txt +++ b/icuSources/data/locales/pa_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/pa_IN.xml +// * Source File:/common/main/pa_IN.xml // * // *************************************************************************** pa_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤##,##,##0.00;-¤##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤#,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "hh:mm:ss a z", "hh:mm:ss a z", diff --git a/icuSources/data/locales/pl.txt b/icuSources/data/locales/pl.txt index c392e0ac..b71ab92d 100644 --- a/icuSources/data/locales/pl.txt +++ b/icuSources/data/locales/pl.txt @@ -1,16 +1,43 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/pl.xml +// * Source File:/common/main/pl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/pl.xml + * ICU source: /xml/main/pl.xml */ pl{ + AuxExemplarCharacters{"[q v x]"} Countries{ + 001{"Świat"} + 002{"Afryka"} + 005{"Ameryka Południowa"} + 009{"Oceania"} + 011{"Afryka Zachodnia"} + 013{"Ameryka Środkowa"} + 014{"Afryka Wschodnia"} + 015{"Afryka Północna"} + 017{"Afryka Środkowa"} + 019{"Ameryka"} + 021{"Ameryka Północna"} + 030{"Azja Wschodnia"} + 035{"Azja Południowo-Wschodnia"} + 039{"Europa Południowa"} + 053{"Australia i Nowa Zelandia"} + 054{"Melanezja"} + 057{"Mikronezja"} + 061{"Polinezja"} + 142{"Azja"} + 145{"Azja Zachodnia"} + 150{"Europa"} + 151{"Europa Wschodnia"} + 154{"Europa Północna"} + 155{"Europa Zachodnia"} + 830{"Wyspy Normandzkie"} + 833{"Wyspa Man"} AD{"Andora"} AE{"Zjednoczone Emiraty Arabskie"} AF{"Afganistan"} @@ -26,6 +53,7 @@ pl{ AT{"Austria"} AU{"Australia"} AW{"Aruba"} + AX{"Wyspy Alandzkie"} AZ{"Azerbejdżan"} BA{"Bośnia i Hercegowina"} BB{"Barbados"} @@ -59,6 +87,7 @@ pl{ CN{"Chiny"} CO{"Kolumbia"} CR{"Kostaryka"} + CS{"Serbia i Czarnogóra"} CU{"Kuba"} CV{"Wyspy Zielonego Przylądka"} CX{"Wyspa Bożego Narodzenia"} @@ -190,6 +219,7 @@ pl{ PW{"Palau"} PY{"Paragwaj"} QA{"Katar"} + QO{"Oceania inne"} RE{"Reunion"} RO{"Rumunia"} RU{"Federacja Rosyjska"} @@ -208,7 +238,6 @@ pl{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Surinam"} ST{"Wyspy Świętego Tomasza i Książęca"} SV{"Salwador"} @@ -247,16 +276,11 @@ pl{ WS{"Samoa"} YE{"Jemen"} YT{"Majotta"} - YU{"Jugosławia"} ZA{"Afryka Południowa"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "diner andorski", - } ADP{ "ADP", "peseta andorska", @@ -273,26 +297,10 @@ pl{ "Af", "afgani", } - AIF{ - "AIF", - "frank Affars and Issas Franc", - } - ALK{ - "ALK", - "lek albański (1946-1961)", - } ALL{ "lek", "lek albański", } - ALV{ - "ALV", - "lek waluta albańska", - } - ALX{ - "ALX", - "dolar albański dewizowy dla transakcji zagranicznych", - } AMD{ "dram", "dram armeński", @@ -317,18 +325,10 @@ pl{ "AOR", "kwanza angolańska Reajustado (1995-1999)", } - AOS{ - "AOS", - "escudo angolańskie", - } ARA{ "ARA", "austral argentyński", } - ARM{ - "ARM", - "peso argentyńskie Moneda Nacional", - } ARP{ "ARP", "peso argentyńskie (1983-1985)", @@ -345,10 +345,6 @@ pl{ "$A", "dolar australijski", } - AUP{ - "AUP", - "funt australijski", - } AWG{ "AWG", "gulden arubski", @@ -365,10 +361,6 @@ pl{ "KM", "marka konwertybilna Bośni i Hercegowiny", } - BAN{ - "BAN", - "nowy dinar Bośni i Hercegowinyr", - } BBD{ "BDS$", "dolar Barbadosu", @@ -389,6 +381,14 @@ pl{ "BEL", "frank belgijski (finansowy)", } + BGL{ + "lev", + "lew bułgarski", + } + BGN{ + "BGN", + "nowy lew bułgarski", + } BHD{ "BD", "dinar bahrański", @@ -401,10 +401,6 @@ pl{ "Ber$", "dolar bermudzki", } - BMP{ - "BMP", - "funt bermudzki", - } BND{ "BND", "dolar brunejski", @@ -413,10 +409,6 @@ pl{ "Bs", "boliviano", } - BOL{ - "BOL", - "boliviano (1863-1962)", - } BOP{ "BOP", "peso boliwijskie", @@ -441,42 +433,22 @@ pl{ "R$", "real brazylijski", } - BRN{ - "BRN", - "cruzado brazylijskie", - } BRR{ "BRR", "cruzeiro brazylijskie", } - BRZ{ - "BRZ", - "cruzeiro brazylijskie (1942-1967)", - } BSD{ "BSD", "dolar bahamski", } - BSP{ - "BSP", - "funt bahamski", - } BTN{ "Nu", "ngultrum Bhutan", } - BTR{ - "BTR", - "rupia Bhutan", - } BUK{ "BUK", "kyat birmański", } - BUR{ - "BUR", - "rupia birmańska", - } BWP{ "BWP", "pula", @@ -485,10 +457,6 @@ pl{ "BYB", "rubel białoruski (1994-1999)", } - BYL{ - "BYL", - "rubel białoruski (1992-1994)", - } BYR{ "Rbl", "rubel białoruski", @@ -497,10 +465,6 @@ pl{ "BZ$", "dolar belizeński", } - BZH{ - "BZH", - "dolar Hondurasu Brytyjskiego", - } CAD{ "Can$", "dolar kanadyjski", @@ -509,62 +473,18 @@ pl{ "CDF", "frank kongijski", } - CDG{ - "CDG", - "frank Republiki Konga", - } - CDL{ - "CDL", - "zair kongijski", - } - CFF{ - "CFF", - "frank CFA Republiki Środkowoafrykańskiej", - } CHF{ "SwF", "frank szwajcarski", } - CKD{ - "CKD", - "dolar Wysp Cooka", - } - CLC{ - "CLC", - "condor chilijski", - } - CLE{ - "CLE", - "escudo chilijskie", - } CLP{ "Ch$", "peso chilijskie", } - CMF{ - "CMF", - "frank CFA Kamerunu", - } - CNP{ - "CNP", - "Jen Min Piao juan Jen Min Piao chiński", - } - CNX{ - "CNX", - "dolar chiński dla transakcji zagranicznych", - } CNY{ "Y", "juan renminbi", } - COB{ - "COB", - "peso kolumbijskie papierowe", - } - COF{ - "COF", - "frank CFA Konga", - } COP{ "Col$", "peso kolumbijskie", @@ -573,10 +493,6 @@ pl{ "C", "colon kostarykański", } - CSC{ - "CSC", - "korona czechosłowacka", - } CSK{ "CSK", "korona czechosłowacka", @@ -585,18 +501,10 @@ pl{ "CUP", "peso kubańskie", } - CUX{ - "CUX", - "certyfikaty kubańskie dla transakcji zagranicznych", - } CVE{ "CVEsc", "escudo Zielonego Przylądka", } - CWG{ - "CWG", - "gulden Curacao", - } CYP{ "£C", "funt cypryjski", @@ -629,10 +537,6 @@ pl{ "DA", "dinar algierski", } - DZF{ - "DZF", - "nowy frank algierski", - } ECS{ "ECS", "sucre ekwadorski", @@ -657,10 +561,6 @@ pl{ "Br", "birr etiopski", } - ETD{ - "ETD", - "dolar etiopski", - } EUR{ "€", "euro", @@ -669,34 +569,18 @@ pl{ "FIM", "marka fińska", } - FIN{ - "FIN", - "marka fińska (1860-1962)", - } FJD{ "F$", "dolar fidżijski", } - FJP{ - "FJP", - "funt fidżijski", - } FKP{ "FKP", "funt Wysp Falklandzkich", } - FOK{ - "FOK", - "korona Wysp Owczych", - } FRF{ "FRF", "frank francuski ", } - GAF{ - "GAF", - "frank CFA Gabonu", - } GBP{ "£", "funt szterling", @@ -713,70 +597,30 @@ pl{ "GHC", "cedi ghańskie", } - GHO{ - "GHO", - "stare cedi ghańskie", - } - GHP{ - "GHP", - "funt ghański", - } - GHR{ - "GHR", - "cedi zrewaloryzowane ghańskie", - } GIP{ "GIP", "funt gibraltarski", } - GLK{ - "GLK", - "korona grenlandzka", - } GMD{ "GMD", "dalasi gambijskie", } - GMP{ - "GMP", - "funt gambijski", - } GNF{ "GF", "frank gwinejski", } - GNI{ - "GNI", - "frank gwinejski (1960-1972)", - } GNS{ "GNS", "syli gwinejskie", } - GPF{ - "GPF", - "frank Gwadelupy", - } GQE{ "GQE", "ekwele gwinejskie Gwinei Równikowej", } - GQF{ - "GQF", - "frank Gwinei Równikowej", - } - GQP{ - "GQP", - "peseta gujańska Gwinei Równikowej", - } GRD{ "GRD", "drachma grecka", } - GRN{ - "GRN", - "nowa drachma grecka", - } GTQ{ "Q", "quetzal gwatemalski", @@ -817,22 +661,6 @@ pl{ "Ft", "forint węgierski ", } - IBP{ - "IBP", - "fund północnoirlandzki", - } - IDG{ - "IDG", - "gulden indonezyjski Nica", - } - IDJ{ - "IDJ", - "rupia indonezyjska Java", - } - IDN{ - "IDN", - "nowa rupia indonezyjska", - } IDR{ "Rp", "rupia indonezyjska", @@ -841,10 +669,6 @@ pl{ "IR£", "funt irlandzki", } - ILL{ - "ILL", - "szekel izraelski", - } ILP{ "ILP", "funt izraelski", @@ -853,10 +677,6 @@ pl{ "ILS", "nowy szekel izraelski", } - IMP{ - "IMP", - "funt szterling Wyspa Man", - } INR{ "INR", "rupia indyjska", @@ -877,18 +697,10 @@ pl{ "₤", "lir włoski", } - JEP{ - "JEP", - "funt szterling Jersey", - } JMD{ "J$", "dolar jamajski", } - JMP{ - "JMP", - "funt jamajski", - } JOD{ "JD", "dinar jordański", @@ -905,38 +717,18 @@ pl{ "som", "som kirgiski", } - KHO{ - "KHO", - "stary riel kambodżański", - } KHR{ "CR", "riel kambodżański", } - KID{ - "KID", - "dolar Kiribati", - } KMF{ "CF", "frank komoryjski", } - KPP{ - "KPP", - "won ludowopółnocnokoreański", - } KPW{ "KPW", "won północnokoreański", } - KRH{ - "KRH", - "hwan południowokoreański", - } - KRO{ - "KRO", - "stary won południowokoreański", - } KRW{ "KRW", "won południowokoreański", @@ -949,10 +741,6 @@ pl{ "KYD", "dolar kajmański", } - KZR{ - "KZR", - "rubel kazachski", - } KZT{ "T", "Tenge kazachskie", @@ -965,18 +753,10 @@ pl{ "LL", "funt libański", } - LIF{ - "LIF", - "frank Liechtenstein", - } LKR{ "SL Re", "rupia lankijska", } - LNR{ - "LNR", - "rupia cejlońska", - } LRD{ "LRD", "dolar liberyjski", @@ -1005,18 +785,10 @@ pl{ "LVR", "rubel łotewski", } - LYB{ - "LYB", - "lir brytyjskich władz wojskowych w Libii", - } LYD{ "LD", "dinar libijski", } - LYP{ - "LYP", - "funt libijski", - } MAD{ "MAD", "dirham marokański", @@ -1025,26 +797,10 @@ pl{ "MAF", "frank marokański", } - MCF{ - "MCF", - "nowy frank Monaco", - } - MCG{ - "MCG", - "frank Monaco Germinal", - } - MDC{ - "MDC", - "lej kuponowy mołdawski", - } MDL{ "MDL", "lej mołdawski", } - MDR{ - "MDR", - "rubel kuponowy mołdawski", - } MGA{ "MGA", "ariar malgaski", @@ -1053,18 +809,10 @@ pl{ "MGF", "frank malgaski", } - MHD{ - "MHD", - "dolar Wysp Marshalla", - } MKD{ "MDen", "denar macedoński", } - MKN{ - "MKN", - "denar macedoński (1992-1993)", - } MLF{ "MLF", "frank malijski", @@ -1073,10 +821,6 @@ pl{ "MMK", "kyat Myanmar", } - MMX{ - "MMX", - "dolarowy certyfikat Myanmar dla transakcji zagranicznych", - } MNT{ "Tug", "tugrik mongolski", @@ -1085,10 +829,6 @@ pl{ "MOP", "pataka Macao", } - MQF{ - "MQF", - "frank Martynika", - } MRO{ "UM", "ouguiya mauterańska", @@ -1105,10 +845,6 @@ pl{ "MUR", "rupia Mauritius", } - MVP{ - "MVP", - "rupia malediwska", - } MVR{ "MVR", "rufiyaa malediwska", @@ -1117,10 +853,6 @@ pl{ "MK", "kwacha malawska", } - MWP{ - "MWP", - "funt malawski", - } MXN{ "MEX$", "peso meksykańskie", @@ -1145,26 +877,14 @@ pl{ "N$", "dolar namibijski", } - NCF{ - "NCF", - "franc germinal Nowa Kaledonia", - } NGN{ "NGN", "naira nigeryjska", } - NGP{ - "NGP", - "funt nigeryjski", - } NIC{ "NIC", "cordoba nikaraguańska", } - NIG{ - "NIG", - "cordoba Gold nikaraguańska", - } NIO{ "NIO", "cordoba oro nikaraguańska", @@ -1185,34 +905,14 @@ pl{ "$NZ", "dolar nowozelandzki", } - NZP{ - "NZP", - "funt nowozelandzki", - } OMR{ "RO", "rial Omanu", } - OMS{ - "OMS", - "rial saidi omański", - } PAB{ "PAB", "balboa panamski", } - PDK{ - "PDK", - "rubel kuponowy naddniestrzański", - } - PDN{ - "PDN", - "nowy rubel naddniestrzański", - } - PDR{ - "PDR", - "rubel naddniestrzański", - } PEI{ "PEI", "inti peruwiański", @@ -1241,22 +941,10 @@ pl{ "zł", "złoty polski", } - PLX{ - "PLX", - "złoty polski dewizowy dla transakcji zagranicznych", - } PLZ{ "PLZ", "złoty polski (1950-1995)", } - PSP{ - "PSP", - "funt palestyński", - } - PTC{ - "PTC", - "conto portugalskie", - } PTE{ "PTE", "escudo portugalskie", @@ -1269,18 +957,10 @@ pl{ "QR", "rial katarski", } - REF{ - "REF", - "frank Reunion", - } ROL{ "leu", "lej rumuński", } - RON{ - "RON", - "nowy lej rumuński", - } RUB{ "RUB", "rubel rosyjski", @@ -1297,10 +977,6 @@ pl{ "SRl", "rial saudyjski", } - SAS{ - "SAS", - "riyal sovereign saudyjski", - } SBD{ "SI$", "dolar Wysp Salomona", @@ -1329,10 +1005,6 @@ pl{ "SHP", "funt Wyspy Świętej Heleny", } - SIB{ - "SIB", - "tolar słoweński bonowy", - } SIT{ "SIT", "tolar słoweński", @@ -1345,38 +1017,18 @@ pl{ "SLL", "leone Sierra Leone", } - SML{ - "SML", - "lir San Marino", - } SOS{ "So. Sh.", "szyling somalijski", } - SQS{ - "SQS", - "szyling somalijski", - } SRG{ "Sf", "gulden surinamski", } - SSP{ - "SSP", - "funt szkocki", - } STD{ "Db", "dobra Wysp Świętego Tomasza i Książęcej", } - STE{ - "STE", - "escudo Wysp Świętego Tomasza i Książęcej", - } - SUN{ - "SUN", - "nowy rubel radziecki", - } SUR{ "SUR", "rubel radziecki", @@ -1393,14 +1045,6 @@ pl{ "E", "lilangeni Suazi", } - TCC{ - "TCC", - "korona Turks i Caicos", - } - TDF{ - "TDF", - "frank CFA Czadu", - } THB{ "THB", "baht tajski", @@ -1425,34 +1069,22 @@ pl{ "T$", "paʻanga Tonga", } - TOS{ - "TOS", - "funt szterling Tonga", - } TPE{ "TPE", "escudo timorskie", } - TPP{ - "TPP", - "pataca timorskie", - } TRL{ "TL", "lir turecki", } + TRY{ + "TRY", + "nowa lira turecka", + } TTD{ "TT$", "dolar Trynidadu i Tobago", } - TTO{ - "TTO", - "stary dolar Trynidadu i Tobago", - } - TVD{ - "TVD", - "dolar Tuvalu", - } TWD{ "NT$", "nowy dolar tajwański", @@ -1481,10 +1113,6 @@ pl{ "US$", "dolar amerykański ", } - UYF{ - "UYF", - "peso urugwajskie Fuerte", - } UYP{ "UYP", "peso urugwajskie (1975-1993)", @@ -1493,78 +1121,30 @@ pl{ "Ur$", "peso urugwajskie", } - UZC{ - "UZC", - "som kuponowy uzbecki", - } UZS{ "UZS", "som uzbecki", } - VAL{ - "VAL", - "lir Miasta Watykan", - } - VDD{ - "VDD", - "piastre dong viet północnowietnamski", - } - VDN{ - "VDN", - "nowy dong północnowietnamski", - } - VDP{ - "VDP", - "viet minh piastre dong viet północnowietnamski", - } VEB{ "Be", "boliwar wenezuelski", } - VGD{ - "VGD", - "dolar Brytyjskich Wysp Dziewiczych", - } VND{ "VND", "dong wietnamski", } - VNN{ - "VNN", - "nowy dong wietnamski", - } - VNR{ - "VNR", - "dong Republiki Wietnamskiej", - } - VNS{ - "VNS", - "dong narodowy wietnamski", - } VUV{ "VT", "vatu Vanuatu", } - WSP{ - "WSP", - "funt samoański", - } WST{ "WST", "tala samoańska", } - XAD{ - "XAD", - "jednostla dinar rozliczeniowy azjatycki", - } XAF{ "XAF", "frank CFA BEAC", } - XAM{ - "XAM", - "jednostka monetarna azjatycka", - } XAU{ "XAU", "złoto", @@ -1573,18 +1153,10 @@ pl{ "EC$", "dolar wschodniokaraibski", } - XCF{ - "XCF", - "nowy frank CFA", - } XDR{ "XDR", "specjalne prawa ciągnienia", } - XEF{ - "XEF", - "frank CFA BCEAEC", - } XFO{ "XFO", "frank złoty francuski", @@ -1593,18 +1165,6 @@ pl{ "XFU", "UIC-frank francuski", } - XID{ - "XID", - "dinar islamski", - } - XMF{ - "XMF", - "nowy frank Metropolii Francuskiej", - } - XNF{ - "XNF", - "frank CFA Antyli Francuskich", - } XOF{ "XOF", "frank CFA", @@ -1613,34 +1173,14 @@ pl{ "CFPF", "frank CFP", } - XTR{ - "XTR", - "rubel transferowy COMECON", - } YDD{ "YDD", "dinar jemeński", } - YEI{ - "YEI", - "riyal Imadi jemeński", - } YER{ "YRl", "rial jemeński", } - YUD{ - "YUD", - "dinar jugosławiański wymienny", - } - YUF{ - "YUF", - "dinar Federacji jugosławiańskiej", - } - YUG{ - "YUG", - "dinar jugosławiański 1994", - } YUM{ "YUM", "nowy dinar jugosławiański", @@ -1649,22 +1189,10 @@ pl{ "YUN", "dinar jugosławiański wymienny", } - YUO{ - "YUO", - "dinar październikowy jugosławiański", - } - YUR{ - "YUR", - "dinar reformowany jugosławiański", - } ZAL{ "ZAL", "rand południowoafrykański (finansowy)", } - ZAP{ - "ZAP", - "funt południowoafrykański", - } ZAR{ "R", "rand południowoafrykański", @@ -1673,10 +1201,6 @@ pl{ "ZMK", "kwacha zambijska", } - ZMP{ - "ZMP", - "funt zambijski", - } ZRN{ "ZRN", "nowy zair zairski", @@ -1690,7 +1214,7 @@ pl{ "dolar Zimbabwe", } } - ExemplarCharacters{"[a-z ó ą ę ć ń ś ź ł ż]"} + ExemplarCharacters{"[a ą b c ć d e ę f-l ł m n ń o ó p r s ś t u w-z ź ż]"} Keys{ calendar{"Kalendarz"} collation{"Sortowanie"} @@ -1699,16 +1223,21 @@ pl{ Languages{ ar{"arabski"} bg{"bułgarski"} + bn{"bengalski"} + ca{"kataloński"} cs{"czeski"} + cy{"walijski"} da{"duński"} de{"niemiecki"} el{"grecki"} en{"angielski"} es{"hiszpański"} et{"estoński"} + eu{"baskijski"} fi{"fiński"} fr{"francuski"} he{"hebrajski"} + hi{"hindi"} hr{"chorwacki"} hu{"węgierski"} it{"włoski"} @@ -1716,7 +1245,8 @@ pl{ ko{"koreański"} lt{"litewski"} lv{"łotewski"} - nl{"holenderski"} + mt{"maltański"} + nl{"niderlandzki"} no{"norweski"} pl{"polski"} pt{"portugalski"} @@ -1725,6 +1255,7 @@ pl{ sk{"słowacki"} sl{"słoweński"} sv{"szwedzki"} + th{"tajski"} tr{"turecki"} zh{"chiński"} } @@ -1742,7 +1273,7 @@ pl{ "E", "‰", "∞", - "�", + "NaN", "+", } Scripts{ @@ -1794,6 +1325,8 @@ pl{ chinese{"Kalendarz chiński"} gregorian{"Kalendarz gregoriański"} hebrew{"Kalendarz żydowski"} + islamic{"Kalendarz muzułmański"} + islamic-civil{"Kalendarz muzułmański cywilny"} japanese{"Kalendarz japoński"} } collation{ @@ -1804,13 +1337,9 @@ pl{ traditional{"tradycyjny"} } } - Version{"1.2"} + Version{"1.71"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -1825,22 +1354,13 @@ pl{ dayNames{ format{ abbreviated{ - "N", - "Pn", - "Wt", - "Śr", - "Cz", - "Pt", - "So", - } - narrow{ - "N", - "P", - "W", - "Ś", - "C", - "P", - "S", + "niedz.", + "pon.", + "wt.", + "śr.", + "czw.", + "pt.", + "sob.", } wide{ "niedziela", @@ -1852,6 +1372,17 @@ pl{ "sobota", } } + stand-alone{ + narrow{ + "N", + "P", + "W", + "Ś", + "C", + "P", + "S", + } + } } eras{ abbreviated{ @@ -1934,21 +1465,192 @@ pl{ "g", } wide{ - "Styczeń", - "Luty", - "Marzec", - "Kwiecień", - "Maj", - "Czerwiec", - "Lipiec", - "Sierpień", - "Wrzesień", - "Październik", - "Listopad", - "Grudzień", + "styczeń", + "luty", + "marzec", + "kwiecień", + "maj", + "czerwiec", + "lipiec", + "sierpień", + "wrzesień", + "październik", + "listopad", + "grudzień", } } } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } + wide{ + "I kwartał", + "II kwartał", + "III kwartał", + "IV kwartał", + } + } + } + } + } + zoneStrings{ + "Africa:Kinshasa"{ + ec{"Kinszasa"} + } + "Africa:Lubumbashi"{ + ec{"Lubumbaszi"} + } + "America:Argentina:ComodRivadavia"{ + ec{"Comodoro Rivadavia"} + } + "America:Mexico_City"{ + ec{"Meksyk"} + } + "America:New_York"{ + ec{"Nowy Jork"} + } + "America:St_Johns"{ + ec{"St. John's"} + } + "Antarctica:DumontDUrville"{ + ec{"Dumont d'Urville"} + } + "Antarctica:Mawson"{ + ec{"Wybrzeże Mawsona"} + } + "Antarctica:McMurdo"{ + ec{"Mc Murdo"} + } + "Antarctica:Palmer"{ + ec{"Archipelag Palmera"} + } + "Antarctica:Rothera"{ + ec{"Stacja Naukowa Rothera"} + } + "Antarctica:South_Pole"{ + ec{"Biegun południowy"} + } + "Antarctica:Syowa"{ + ec{"Stacja Syowa"} + } + "Antarctica:Vostok"{ + ec{"Wostok"} + } + "Asia:Almaty"{ + ec{"Ałma Ata"} + } + "Asia:Aqtau"{ + ec{"Aktau"} + } + "Asia:Aqtobe"{ + ec{"Aktiubińsk"} + } + "Asia:Choibalsan"{ + ec{"Czojbalsan"} + } + "Asia:Chongqing"{ + ec{"Czunking"} + } + "Asia:Hovd"{ + ec{"Howd"} + } + "Asia:Irkutsk"{ + ec{"Irkuck"} + } + "Asia:Jakarta"{ + ec{"Dżakarta"} + } + "Asia:Kamchatka"{ + ec{"Kamczatka"} + } + "Asia:Kashgar"{ + ec{"Kaszgar"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasnojarsk"} + } + "Asia:Kuching"{ + ec{"Kuczing"} + } + "Asia:Novosibirsk"{ + ec{"Nowosybirsk"} + } + "Asia:Oral"{ + ec{"Uralsk"} + } + "Asia:Qyzylorda"{ + ec{"Kyzył Orda"} + } + "Asia:Sakhalin"{ + ec{"Sachalin"} + } + "Asia:Samarkand"{ + ec{"Samarkanda"} + } + "Asia:Shanghai"{ + ec{"Szanghaj"} + } + "Asia:Tashkent"{ + ec{"Taszkient"} + } + "Asia:Ulaanbaatar"{ + ec{"Ułan Bator"} + } + "Asia:Urumqi"{ + ec{"Urumczi"} + } + "Asia:Vladivostok"{ + ec{"Władywostok"} + } + "Asia:Yakutsk"{ + ec{"Jakuck"} + } + "Asia:Yekaterinburg"{ + ec{"Jekaterynburg"} + } + "Atlantic:Azores"{ + ec{"Azory"} + } + "Atlantic:Canary"{ + ec{"Wyspy Kanaryjskie"} + } + "Atlantic:Madeira"{ + ec{"Madera"} + } + "Australia:Lord_Howe"{ + ec{"Wyspa Lord Howe"} + } + "Europe:Kiev"{ + ec{"Kijów"} + } + "Europe:Lisbon"{ + ec{"Lizbona"} + } + "Europe:London"{ + ec{"Londyn"} + } + "Europe:Madrid"{ + ec{"Madryt"} + } + "Europe:Moscow"{ + ec{"Moskwa"} + } + "Europe:Simferopol"{ + ec{"Symferopol"} + } + "Europe:Uzhgorod"{ + ec{"Użgorod"} + } + "Europe:Zaporozhye"{ + ec{"Zaporoże"} + } + "Pacific:Easter"{ + ec{"Wyspy Wielkanocne"} } } } diff --git a/icuSources/data/locales/pl_PL.txt b/icuSources/data/locales/pl_PL.txt index 9387922a..0584b4fc 100644 --- a/icuSources/data/locales/pl_PL.txt +++ b/icuSources/data/locales/pl_PL.txt @@ -1,17 +1,504 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/pl_PL.xml +// * Source File:/common/main/pl_PL.xml // * // *************************************************************************** pl_PL{ + Countries{ + 001{"świat"} + 034{"Azja Południowa"} + 143{"Azja Środkowa"} + 172{"Wspólnota Niezależnych Państw"} + 419{"Ameryka Łacińska i Karaiby"} + LA{"Laos"} + LY{"Libia"} + MD{"Mołdawia"} + MK{"Macedonia"} + MP{"Mariany Północne"} + PM{"Saint-Pierre i Miquelon"} + PR{"Portoryko"} + SH{"Święta Helena"} + TF{"Francuskie Terytoria Południowe i Antarktyczne"} + UM{"Dalekie Wyspy Mniejsze Stanów Zjednoczonych"} + VA{"Watykan"} + VC{"Saint Vincent i Grenadyny"} + VI{"Wyspy Dziewicze Stanów Zjednoczonych"} + ZA{"Republika Południowej Afryki"} + } + Currencies{ + BRE{ + "BRE", + "cruzeiro brazylijskie (1990-1993)", + } + BRN{ + "BRN", + "nowe cruzado brazylijskie", + } + BTN{ + "Nu", + "ngultrum Bhutanu", + } + ESA{ + "ESA", + "peseta hiszpańska (Konto A)", + } + ESB{ + "ESB", + "peseta hiszpańska (konto wymienne)", + } + GEK{ + "GEK", + "kupon gruziński larit", + } + } + Languages{ + aa{"afar"} + ab{"abchaski"} + ach{"aczoli"} + ady{"adygejski"} + ae{"awestyjski"} + af{"afrikaans"} + afa{"afro-azjatycki (inne)"} + ain{"ajnu"} + ak{"akan"} + akk{"akadyjski"} + ale{"aleucki"} + alg{"języki algonkin"} + am{"amharski"} + an{"aragoński"} + ang{"staroangielski (450-1100)"} + apa{"języki Apaczów"} + arc{"aramejski"} + art{"sztuczny (inne)"} + arw{"arawak"} + as{"asamski"} + ast{"asturyjski"} + ath{"języki Atapasków"} + aus{"języki australijskie"} + av{"awarski"} + awa{"awadhi"} + ay{"ajmara"} + az{"azerski"} + ba{"baszkirski"} + bal{"beludżi"} + ban{"balijski"} + bat{"bałtycki (inne)"} + be{"białoruski"} + bej{"bedża"} + bem{"bemba"} + ber{"berberski"} + bh{"biharski"} + bho{"bhodźpuri"} + bi{"bislama"} + bik{"bikol"} + bm{"bambara"} + bnt{"bantu"} + bo{"tybetański"} + br{"bretoński"} + bra{"bradź"} + bs{"bośniacki"} + btk{"batak"} + bua{"buriacki"} + cad{"kaddo"} + cai{"język Indian środkowoamerykańskich (inne)"} + car{"karibi"} + cau{"kaukaski (inne)"} + ce{"czeczeński"} + cel{"celtycki (inne)"} + ch{"chamorro"} + chb{"czibcza"} + chg{"czagatajski"} + chk{"truk"} + chm{"maryjski"} + chn{"żargon Chinook"} + chy{"język Czejenów"} + cmc{"czam"} + co{"korsykański"} + cop{"koptyjski"} + cpe{"kreolski i pidżynowy, angielskie (inne)"} + cpf{"kreolski i pidżynowy, francuskie (inne)"} + cpp{"kreolski i pidżynowy, portugalskie (inne)"} + cr{"kri"} + crh{"karaimski turecki; karaimski tatarski"} + crp{"kreolski i pidżynowy (inne)"} + csb{"kaszubski"} + cu{"staro-cerkiewno-słowiański"} + cus{"kuszycki (inne)"} + cv{"czuwaski"} + dar{"dargwijski"} + day{"dajak"} + dgr{"dogrib"} + din{"dinka"} + doi{"dogri"} + dra{"drawidyjski (inne)"} + dsb{"dolnołużycki"} + dum{"niderlandzki, średniowiecze (ok. 1050-1350)"} + dv{"malediwski"} + dz{"dzongkha"} + ee{"ewe"} + efi{"efik"} + egy{"egipski (starożytny)"} + enm{"średnioangielski"} + eo{"esperanto"} + fa{"perski"} + fan{"fang"} + fat{"fanti"} + ff{"fulani"} + fiu{"ugrofiński (inne)"} + fj{"fidżijski"} + fo{"farerski"} + frm{"średniofrancuski"} + fro{"starofrancuski"} + fur{"friulijski"} + fy{"fryzyjski"} + ga{"irlandzki"} + gd{"szkocki gaelicki"} + gem{"germański (inne)"} + gez{"gyyz"} + gil{"gilbertański"} + gmh{"średnio-wysoko-niemiecki"} + gn{"guarani"} + goh{"staro-wysoko-niemiecki"} + gon{"gondi"} + got{"gocki"} + grb{"grebo"} + grc{"starogrecki"} + gu{"gudźaracki"} + gv{"manx"} + ha{"hausa"} + hai{"haida"} + haw{"hawajski"} + hit{"hetycki"} + ho{"hiri motu"} + hsb{"górnołużycki"} + hy{"ormiański"} + hz{"herero"} + ia{"interlingua"} + iba{"ibanag"} + id{"indonezyjski"} + ie{"interlingue"} + ig{"igbo"} + ii{"syczuański"} + ik{"inupiak"} + ilo{"ilokano"} + ine{"indoeuropejskie (pozostałe)"} + inh{"inguski"} + io{"ido"} + ira{"irański"} + is{"islandzki"} + iu{"inuktitut"} + jv{"jawajski"} + ka{"gruziński"} + kaa{"karakałpacki"} + kar{"kareński"} + kbd{"kabardyjski"} + kg{"kongo"} + kha{"khasi"} + khi{"khoisan (inne)"} + ki{"kikuju"} + kj{"kwanyama"} + kk{"kazaski"} + km{"khmerski"} + kn{"kannada"} + kok{"konkani"} + kos{"kosrae"} + kpe{"kpelle"} + kr{"kanuri"} + krc{"karaczajsko-bałkarski"} + kru{"kurukh"} + ks{"kaszmirski"} + ku{"kurdyjski"} + kum{"kumycki"} + kv{"komi"} + kw{"kornijski"} + ky{"kirgiski"} + la{"łaciński"} + lb{"luksemburski"} + lg{"ganda"} + li{"limburgijski"} + ln{"lingala"} + lo{"laotański"} + lu{"luba-katanga"} + lua{"luba-lulua"} + mad{"madurajski"} + map{"austronezyjski"} + mas{"masajski"} + mg{"malgaski"} + mga{"średnioirlandzki"} + mh{"marshall"} + mi{"maoryjski"} + mis{"języki różne"} + mk{"macedoński"} + mkh{"mon-khmer (pozostałe)"} + ml{"malajalam"} + mn{"mongolski"} + mo{"mołdawski"} + mr{"marathijski"} + ms{"malajski"} + mun{"języki mundajskie"} + my{"birmański"} + na{"nauru"} + nah{"nahuatl"} + nai{"języki Indian północnoamerykańskich (pozostałe)"} + nap{"neapolitański"} + nb{"norweski Bokmål"} + nd{"ndebele północny"} + nds{"dolnoniemiecki, dolnosaksoński"} + ne{"nepalski"} + new{"newarski"} + nic{"niger-kordofańskie (pozostałe)"} + niu{"niue"} + nn{"norweski Nynorsk"} + nr{"ndebele południowy"} + nso{"sotho północny"} + nub{"języki nubijskie"} + nv{"nawaho"} + nwc{"newarski klasyczny"} + ny{"njandża"} + oc{"oksytański (po 1500); prowansalski"} + oj{"odżibwa"} + om{"oromo"} + or{"orija"} + os{"osetyjski"} + ota{"osmańsko-turecki"} + oto{"języki Otomi"} + pa{"pendżabski"} + paa{"papuaski (inne)"} + pau{"palau"} + peo{"staroperski"} + phn{"fenicki"} + pi{"palijski"} + pra{"prakryty"} + pro{"staroprowansalski"} + ps{"paszto"} + qu{"keczua"} + raj{"radźasthani"} + rap{"rapanui"} + rar{"rarotonga"} + rm{"retoromański"} + rn{"rundi"} + roa{"romański (inne)"} + rom{"cygański"} + rup{"arumuński"} + rw{"kinya-ruanda"} + sa{"sanskryt"} + sah{"jakucki"} + sai{"języki Indian południowoamerykańskich (pozostałe)"} + sal{"języki salisz"} + sam{"samarytański aramejski"} + sas{"sasak"} + sat{"santali"} + sc{"sardyński"} + scn{"sycylijski"} + sco{"szkocki"} + sd{"sindhi"} + se{"lapoński północny"} + sem{"semickie (pozostałe)"} + sg{"sango"} + sga{"staroirlandzki"} + sgn{"migowy"} + si{"syngaleski"} + sid{"sidamo"} + sit{"chińsko-tybetańskie (pozostałe)"} + sla{"słowiańskie (pozostałe)"} + sm{"samoański"} + sma{"lapoński południowy"} + smi{"lapońskie (pozostałe)"} + smj{"lapoński Lule"} + smn{"lapoński Inari"} + sms{"lapoński Skolt"} + sn{"szona"} + so{"somali"} + sq{"albański"} + sr{"serbski"} + ss{"suazi"} + ssa{"nilo-saharyjskie (pozostałe)"} + st{"sotho południowy"} + su{"sundajski"} + suk{"sukuma"} + sux{"sumeryjski"} + sw{"suahili"} + syr{"syryjski"} + ta{"tamilski"} + tai{"taj (pozostałe)"} + te{"telugu"} + tet{"tetum"} + tg{"tadżycki"} + ti{"tigrinia"} + tig{"tigre"} + tk{"turkmeński"} + tkl{"tokelau"} + tl{"tagalski"} + tlh{"klingoński"} + tli{"tlingit"} + tmh{"tamaszek"} + tn{"tswana"} + to{"tonga (wyspy Tonga)"} + tog{"tonga (Niasa)"} + ts{"tsonga"} + tt{"tatarski"} + tup{"języki tupi"} + tut{"ałtajski (pozostałe)"} + tw{"twi"} + ty{"tahitański"} + tyv{"tuwiński"} + udm{"udmurcki"} + ug{"ujgurski"} + uga{"ugarycki"} + uk{"ukraiński"} + und{"nieokreślony"} + ur{"urdu"} + uz{"uzbecki"} + vai{"wai"} + ve{"venda"} + vi{"wietnamski"} + vo{"volapuk"} + vot{"wotiacki"} + wa{"waloński"} + wak{"języki wakasz"} + wen{"języki łużyckie"} + wo{"wolof"} + xal{"kałmucki"} + xh{"khosa"} + yap{"japski"} + yi{"jidysz"} + yo{"joruba"} + za{"czuang"} + zen{"zenaga"} + znd{"azande"} + zu{"zulu"} + zun{"zuni"} + } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Scripts{ + Armn{"Ormiański"} + Batk{"Batak"} + Cher{"Irokeski"} + Cyrs{"Cyrylicki (odmiana staro-cerkiewno-słowiańska)"} + Deva{"Devanagari"} + Dsrt{"Deseret"} + Egyd{"Egipski demotyczny"} + Egyh{"Egipski hieratyczny"} + Egyp{"Hieroglify egipskie"} + Glag{"Głagolicki"} + Gujr{"Gudźaracki"} + Guru{"Gurmukhi"} + Hang{"Hangul"} + Hani{"Han"} + Hira{"Hiragana"} + Hmng{"Pahawh Hmong"} + Hrkt{"Katakana lub Hiragana"} + Hung{"Starowęgierski"} + Inds{"Indus (Harappan)"} + Kana{"Katakana"} + Khar{"Kharoshthi"} + Knda{"Kannada"} + Latg{"Łaciński (odmiana gaelicka)"} + Lepc{"Lepcha (Róng)"} + Lina{"Linearny A"} + Osma{"Osmanya"} + Perm{"Staropermski"} + Phnx{"Fenicki"} + Sara{"Sarati"} + Syrj{"Syryjski (odmiana zachodnia)"} + Syrn{"Syryjski (odmiana wschodnia)"} + Tfng{"Tifinagh (berberski)"} + Xpeo{"Staroperski"} + } + Types{ + collation{ + big5han{"Tradycyjny chiński (Big5)"} + gb2312han{"Uproszczony chiński (GB2312)"} + } + } + Variants{ + 1901{"Tradycyjna ortografia niemiecka"} + 1996{"Ortografia niemiecka z 1996 r."} + } + Version{"1.40"} + calendar{ + gregorian{ + fields{ + day{ + dn{"Dzień"} + } + hour{ + dn{"Godzina"} + } + minute{ + dn{"Minuta"} + } + month{ + dn{"Miesiąc"} + } + second{ + dn{"Sekunda"} + } + week{ + dn{"Tydzień"} + } + weekday{ + dn{"Dzień tygodnia"} + } + year{ + dn{"Rok"} + } + zone{ + dn{"Strefa"} + } + } + monthNames{ + format{ + abbreviated{ + "stycznia", + "lut", + "mar", + "kwietnia", + "maja", + "czerwca", + "lip", + "sie", + "września", + "października", + "listopada", + "grudnia", + } + } + stand-alone{ + abbreviated{ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "paź", + "lis", + "gru", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"„"} + quotationEnd{"’"} + quotationStart{"‘"} + } + measurementSystemNames{ + US{"USA"} + metric{"metryczny"} + } } diff --git a/icuSources/data/locales/ps.txt b/icuSources/data/locales/ps.txt index 2be4358b..5a05af05 100644 --- a/icuSources/data/locales/ps.txt +++ b/icuSources/data/locales/ps.txt @@ -1,212 +1,244 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ps.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ps.xml - */ -ps{ - Countries{ - AF{"افغانستان"} - AL{"البانیه"} - AO{"انګولا"} - AQ{"انتارکتیکا"} - AT{"اتریش"} - BD{"بنګله‌دیش"} - BG{"بلغاریه"} - CA{"کاناډا"} - CH{"سویس"} - CN{"چین"} - CO{"کولمبیا"} - CU{"کیوبا"} - DE{"المان"} - DK{"ډنمارک"} - DZ{"الجزایر"} - EG{"مصر"} - ES{"هسپانیه"} - ET{"حبشه"} - FI{"فنلینډ"} - FR{"فرانسه"} - GB{"برتانیه"} - GH{"ګانا"} - GN{"ګیانا"} - GR{"یونان"} - GT{"ګواتیمالا"} - HN{"هانډوراس"} - HU{"مجارستان"} - ID{"اندونیزیا"} - IN{"هند"} - IQ{"عراق"} - IS{"آیسلینډ"} - IT{"ایټالیه"} - JM{"جمیکا"} - JP{"جاپان"} - KH{"کمبودیا"} - KW{"کویټ"} - LA{"لاوس"} - LB{"لبنان"} - LR{"لایبریا"} - LY{"لیبیا"} - MA{"مراکش"} - MN{"مغولستان"} - MY{"مالیزیا"} - NG{"نایجیریا"} - NI{"نکاراګوا"} - NL{"هالېنډ"} - NO{"ناروې"} - NP{"نیپال"} - NZ{"نیوزیلنډ"} - PK{"پاکستان"} - PL{"پولنډ"} - PS{"فلسطین"} - PT{"پورتګال"} - RU{"روسیه"} - RW{"روندا"} - SA{"سعودی عربستان"} - SE{"سویډن"} - SV{"سالوېډور"} - SY{"سوریه"} - TJ{"تاجکستان"} - TZ{"تنزانیا"} - UY{"یوروګوای"} - YE{"یمن"} - } - Currencies{ - AFA{ - "افغانۍ", - "افغانۍ", - } - } - ExemplarCharacters{"[ء-ؤئ-غفقل-وي-ْٰٔټپځڅ-چډړږژښکګڼی-ۍې ‌‍‏‎]"} - Languages{ - ar{"عربي"} - bal{"بلوڅي"} - de{"الماني"} - el{"یوناني"} - en{"انګلیسي"} - et{"حبشي"} - fa{"فارسي"} - fi{"فینلنډي"} - fr{"فرانسوي"} - he{"عبري"} - hi{"هندي"} - hy{"ارمني"} - ine{"هند و اروپایي"} - it{"ایټالوي"} - ja{"جاپانی"} - ku{"کردي"} - la{"لاتیني"} - mg{"ملغاسي"} - mk{"مقدوني"} - mn{"مغولي"} - ms{"ملایا"} - pl{"پولنډي"} - ps{"پښتو"} - pt{"پورتګالي"} - ru{"روسي"} - sa{"سنسکریټ"} - sv{"سویډنی"} - tg{"تاجک"} - tk{"ترکمني"} - tt{"تاتار"} - uz{"ازبکي"} - zh{"چیني"} - } - LocaleScript{ - "Arab", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "غ.م.", - "غ.و.", - } - DateTimePatterns{ - "H:mm:ss (z)", - "H:mm:ss (z)", - "H:mm:ss", - "H:mm", - "EEEE د yyyy د MMMM d", - "د yyyy د MMMM d", - "d MMMM yyyy", - "yyyy/M/d", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "ی.", - "د.", - "س.", - "چ.", - "پ.", - "ج.", - "ش.", - } - wide{ - "یکشنبه", - "دوشنبه", - "سه‌شنبه", - "چهارشنبه", - "پنجشنبه", - "جمعه", - "شنبه", - } - } - } - eras{ - abbreviated{ - "ق.م.", - "م.", - } - } - monthNames{ - format{ - abbreviated{ - "جنو", - "فبر", - "مار", - "اپر", - "مـی", - "جون", - "جول", - "اګس", - "سپت", - "اکت", - "نوم", - "دسم", - } - wide{ - "جنوري", - "فبروري", - "مارچ", - "اپریل", - "می", - "جون", - "جولای", - "اګست", - "سپتمبر", - "اکتوبر", - "نومبر", - "دسمبر", - } - } - } - } - } - zoneStrings{ - { - "Asia/Kabul", - "د افغانستان په وخت", - "AFT", - "د افغانستان په وخت", - "AFT", - "کابل", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ps.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ps.xml + */ +ps{ + AuxExemplarCharacters{"[\u200C \u200D]"} + Countries{ + AF{"افغانستان"} + AL{"البانیه"} + AO{"انګولا"} + AQ{"انتارکتیکا"} + AT{"اتریش"} + BD{"بنګله‌دیش"} + BG{"بلغاریه"} + CA{"کاناډا"} + CH{"سویس"} + CN{"چین"} + CO{"کولمبیا"} + CU{"کیوبا"} + DE{"المان"} + DK{"ډنمارک"} + DZ{"الجزایر"} + EG{"مصر"} + ES{"هسپانیه"} + ET{"حبشه"} + FI{"فنلینډ"} + FR{"فرانسه"} + GB{"برتانیه"} + GH{"ګانا"} + GN{"ګیانا"} + GR{"یونان"} + GT{"ګواتیمالا"} + HN{"هانډوراس"} + HU{"مجارستان"} + ID{"اندونیزیا"} + IN{"هند"} + IQ{"عراق"} + IS{"آیسلینډ"} + IT{"ایټالیه"} + JM{"جمیکا"} + JP{"جاپان"} + KH{"کمبودیا"} + KW{"کویټ"} + LA{"لاوس"} + LB{"لبنان"} + LR{"لایبریا"} + LY{"لیبیا"} + MA{"مراکش"} + MN{"مغولستان"} + MY{"مالیزیا"} + NG{"نایجیریا"} + NI{"نکاراګوا"} + NL{"هالېنډ"} + NO{"ناروې"} + NP{"نیپال"} + NZ{"نیوزیلنډ"} + PK{"پاکستان"} + PL{"پولنډ"} + PS{"فلسطین"} + PT{"پورتګال"} + RU{"روسیه"} + RW{"روندا"} + SA{"سعودی عربستان"} + SE{"سویډن"} + SV{"سالوېډور"} + SY{"سوریه"} + TJ{"تاجکستان"} + TZ{"تنزانیا"} + UY{"یوروګوای"} + YE{"یمن"} + } + Currencies{ + AFN{ + "؋", + "افغانۍ", + } + } + ExemplarCharacters{ + "[َ ِ ُ ً ٍ ٌ ّ ْ ٔ ٰ آ ا أ ء ب پ ت ټ ث ج ځ چ څ ح-د ډ ذ ر ړ ز ژ ږ س ش ښ ص-غ ف" + " ق ک ګ ل-ن ڼ ه ة و ؤ ی ي ې ۍ ئ]" + } + Languages{ + ar{"عربي"} + bal{"بلوڅي"} + de{"الماني"} + el{"یوناني"} + en{"انګلیسي"} + et{"حبشي"} + fa{"فارسي"} + fi{"فینلنډي"} + fr{"فرانسوي"} + he{"عبري"} + hi{"هندي"} + hy{"ارمني"} + ine{"هند و اروپایي"} + it{"ایټالوي"} + ja{"جاپانی"} + ku{"کردي"} + la{"لاتیني"} + mg{"ملغاسي"} + mk{"مقدوني"} + mn{"مغولي"} + ms{"ملایا"} + pl{"پولنډي"} + ps{"پښتو"} + pt{"پورتګالي"} + ru{"روسي"} + sa{"سنسکریټ"} + sv{"سویډنی"} + tg{"تاجک"} + tk{"ترکمني"} + tt{"تاتار"} + uz{"ازبکي"} + zh{"چیني"} + } + LocaleScript{ + "Arab", + } + Scripts{ + Arab{"عربي"} + } + Version{"1.39"} + calendar{ + gregorian{ + AmPmMarkers{ + "غ.م.", + "غ.و.", + } + DateTimePatterns{ + "H:mm:ss (z)", + "H:mm:ss (z)", + "H:mm:ss", + "H:mm", + "EEEE د yyyy د MMMM d", + "د yyyy د MMMM d", + "d MMMM yyyy", + "yyyy/M/d", + "{1} {0}", + } + dayNames{ + format{ + wide{ + "یکشنبه", + "دوشنبه", + "سه‌شنبه", + "چهارشنبه", + "پنجشنبه", + "جمعه", + "شنبه", + } + } + } + eras{ + abbreviated{ + "ق.م.", + "م.", + } + } + monthNames{ + format{ + abbreviated{ + "جنوري", + "فبروري", + "مارچ", + "اپریل", + "می", + "جون", + "جولای", + "اګست", + "سپتمبر", + "اکتوبر", + "نومبر", + "دسمبر", + } + wide{ + "جنوري", + "فبروري", + "مارچ", + "اپریل", + "می", + "جون", + "جولای", + "اګست", + "سپتمبر", + "اکتوبر", + "نومبر", + "دسمبر", + } + } + } + } + persian{ + monthNames{ + format{ + abbreviated{ + "وری", + "غویی", + "غبرګولی", + "چنګاښ", + "زمری", + "وږی", + "تله", + "لړم", + "لیندۍ", + "مرغومی", + "سلواغه", + "کب", + } + wide{ + "وری", + "غویی", + "غبرګولی", + "چنګاښ", + "زمری", + "وږی", + "تله", + "لړم", + "لیندۍ", + "مرغومی", + "سلواغه", + "کب", + } + } + } + } + } + layout{ + characters{"right-to-left"} + lines{"top-to-bottom"} + } + zoneStrings{ + "Asia:Kabul"{ + ec{"کابل"} + } + regionFormat{"د {0} په وخت"} + } +} diff --git a/icuSources/data/locales/ps_AF.txt b/icuSources/data/locales/ps_AF.txt index dd83db2f..9b390f53 100644 --- a/icuSources/data/locales/ps_AF.txt +++ b/icuSources/data/locales/ps_AF.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ps_AF.xml +// * Source File:/common/main/ps_AF.xml // * // *************************************************************************** ps_AF{ @@ -18,22 +18,28 @@ ps_AF{ "×۱۰^", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0 ¤;-#,##0 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ DateTimeElements:intvector{ 7, 1, } + weekend:intvector{ + 7, + 0, + 6, + 86400000, + } } } } diff --git a/icuSources/data/locales/pt.txt b/icuSources/data/locales/pt.txt index 19cd2c06..5931dcda 100644 --- a/icuSources/data/locales/pt.txt +++ b/icuSources/data/locales/pt.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/pt.xml +// * Source File:/common/main/pt.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/pt.xml + * ICU source: /xml/main/pt.xml */ pt{ Countries{ @@ -59,6 +59,7 @@ pt{ CN{"China"} CO{"Colômbia"} CR{"Costa Rica"} + CS{"Sérvia e Montenegro"} CU{"Cuba"} CV{"Cabo Verde"} CX{"Ilhas Natal"} @@ -208,7 +209,6 @@ pt{ SM{"San Marino"} SN{"Senegal"} SO{"Somália"} - SP{"Sérvia"} SR{"Suriname"} ST{"São Tomé e Príncipe"} SV{"El Salvador"} @@ -247,16 +247,11 @@ pt{ WS{"Samoa"} YE{"Iêmen"} YT{"Mayotte"} - YU{"Iugoslávia"} ZA{"África do Sul"} ZM{"Zâmbia"} ZW{"Zimbábwe"} } Currencies{ - ADD{ - "ADD", - "Diner de Andorra", - } ADP{ "ADP", "Peseta de Andorra", @@ -270,25 +265,13 @@ pt{ "Afegane (1927-2002)", } AFN{ - "AFA", + "AFN", "Afegane", } - AIF{ - "AIF", - "Franco de Affars e Issas", - } ALL{ "ALL", "Lek Albanês", } - ALV{ - "ALV", - "Lek Valute Albanês", - } - ALX{ - "ALX", - "Certificados de câmbio albaneses em dólares", - } AMD{ "AMD", "Dram Arménio", @@ -313,18 +296,10 @@ pt{ "AOR", "Cuanza angolano reajustado (1995-1999)", } - AOS{ - "AOS", - "Escudo angolano", - } ARA{ "ARA", "Austral argentino", } - ARM{ - "ARM", - "Peso moneda nacional argentino", - } ARP{ "ARP", "Peso argentino (1983-1985)", @@ -341,10 +316,6 @@ pt{ "AUD", "Dólar australiano", } - AUP{ - "AUP", - "Libra australiana", - } AWG{ "AWG", "Guilder de Aruba", @@ -361,10 +332,6 @@ pt{ "BAM", "Marco bósnio-herzegóvino conversível", } - BAN{ - "BAN", - "Dinar novo da Bósnia-Herzegóvina", - } BBD{ "BBD", "Dólar de Barbados", @@ -389,22 +356,10 @@ pt{ "BGL", "Lev forte búlgaro", } - BGM{ - "BGM", - "Lev socialista búlgaro", - } BGN{ "BGN", "Lev novo búlgaro", } - BGO{ - "BGO", - "Lev búlgaro (1879-1952)", - } - BGX{ - "BGX", - "Certificados de câmbio búlgaros em leva", - } BHD{ "BHD", "Dinar bareinita", @@ -417,10 +372,6 @@ pt{ "BMD", "Dólar das Bermudas", } - BMP{ - "BMP", - "Libra das Bermudas", - } BND{ "BND", "Dólar do Brunei", @@ -429,10 +380,6 @@ pt{ "BOB", "Boliviano", } - BOL{ - "BOL", - "Boliviano (1863-1962)", - } BOP{ "BOP", "Peso boliviano", @@ -465,34 +412,18 @@ pt{ "BRR", "Cruzeiro brasileiro", } - BRZ{ - "BRZ", - "Cruzeiro brasileiro (1942-1967)", - } BSD{ "BSD", "Dólar das Bahamas", } - BSP{ - "BSP", - "Libra das Bahamas", - } BTN{ "BTN", "Ngultrum do Butão", } - BTR{ - "BTR", - "Rupia do Butão", - } BUK{ "BUK", "Kyat birmanês", } - BUR{ - "BUR", - "Rupia birmanesa", - } BWP{ "BWP", "Pula botsuanesa", @@ -501,10 +432,6 @@ pt{ "BYB", "Rublo novo bielo-russo (1994-1999)", } - BYL{ - "BYL", - "Rublo bielo-russo (1992-1994)", - } BYR{ "BYR", "Rublo bielo-russo", @@ -513,10 +440,6 @@ pt{ "BZD", "Dólar do Belize", } - BZH{ - "BZH", - "Dólar de Honduras Britânica", - } CAD{ "CAD", "Dólar canadense", @@ -525,34 +448,10 @@ pt{ "CDF", "Franco congolês", } - CDG{ - "CDG", - "Franco da República do Congo", - } - CDL{ - "CDL", - "Zaire congolês", - } - CFF{ - "CFF", - "Franco da República Centro-Africana CFA", - } CHF{ "CHF", "Franco suíço", } - CKD{ - "CKD", - "Dólar das Ilhas Cook", - } - CLC{ - "CLC", - "Condor chileno", - } - CLE{ - "CLE", - "Escudo chileno", - } CLF{ "CLF", "Unidades de Fomento chilenas", @@ -561,30 +460,10 @@ pt{ "CLP", "Peso chileno", } - CMF{ - "CMF", - "Franco dos Camarões CFA", - } - CNP{ - "CNP", - "Jen Min Piao Yuan chinês", - } - CNX{ - "CNX", - "Certificados de câmbio chineses em dólares dos EUA", - } CNY{ "CNY", "Yuan Renminbi chinês", } - COB{ - "COB", - "Peso de Papel colombiano", - } - COF{ - "COF", - "Franco do Congo CFA", - } COP{ "COP", "Peso colombiano", @@ -593,10 +472,6 @@ pt{ "CRC", "Colon da Costa Rica", } - CSC{ - "CSC", - "Coroa checoslovaca", - } CSK{ "CSK", "Coroa Forte checoslovaca", @@ -605,18 +480,10 @@ pt{ "CUP", "Peso cubano", } - CUX{ - "CUX", - "Certificados de câmbio cubanos", - } CVE{ "CVE", "Escudo cabo-verdiano", } - CWG{ - "CWG", - "Guilder de Curaçau", - } CYP{ "CYP", "Libra de Chipre", @@ -633,10 +500,6 @@ pt{ "DEM", "Marco alemão", } - DES{ - "DES", - "Sperrmark alemão", - } DJF{ "DJF", "Franco do Djibuti", @@ -653,14 +516,6 @@ pt{ "DZD", "Dinar argelino", } - DZF{ - "DZF", - "Franco Novo argelino", - } - DZG{ - "DZG", - "Franco Germinal argelino", - } ECS{ "ECS", "Sucre equatoriano", @@ -689,10 +544,6 @@ pt{ "ETB", "Birr etíope", } - ETD{ - "ETD", - "Dólar etíope", - } EUR{ "€", "Euro", @@ -701,38 +552,18 @@ pt{ "FIM", "Marca finlandesa", } - FIN{ - "FIN", - "Marca finlandesa (1860-1962)", - } FJD{ "FJD", "Dólar de Fiji", } - FJP{ - "FJP", - "Libra de Fiji", - } FKP{ "FKP", "Libra das Malvinas", } - FOK{ - "FOK", - "Coroa das Ilhas Feroé", - } FRF{ "FRF", "Franco francês", } - FRG{ - "FRG", - "Franco Germinal francês/Franco Poincaré", - } - GAF{ - "GAF", - "Franco do Gabão CFA", - } GBP{ "£", "Libra esterlina britânica", @@ -749,86 +580,38 @@ pt{ "GHC", "Cedi de Gana", } - GHO{ - "GHO", - "Cedi Antigo de Gana", - } - GHP{ - "GHP", - "Libra de Gana", - } - GHR{ - "GHR", - "Cedi reajustado de Gana", - } GIP{ "GIP", "Libra de Gibraltar", } - GLK{ - "GLK", - "Coroa de Groenlândia", - } GMD{ "GMD", "Dalasi de Gâmbia", } - GMP{ - "GMP", - "Libra de Gâmbia", - } GNF{ "GNF", "Franco de Guiné", } - GNI{ - "GNI", - "Franco de Guiné (1960-1972)", - } GNS{ "GNS", "Syli de Guiné", } - GPF{ - "GPF", - "Franco de Guadalupe", - } GQE{ "GQE", "Ekwele de Guiné Equatorial", } - GQF{ - "GQF", - "Franco de Guiné Equatorial", - } - GQP{ - "GQP", - "Peseta Guineana de Guiné Equatorial", - } GRD{ "GRD", "Dracma grego", } - GRN{ - "GRN", - "Dracma Novo grego", - } GTQ{ "GTQ", "Quetçal da Guatemala", } - GUF{ - "GUF", - "Franco da Guiana Francesa", - } GWE{ "GWE", "Escudo da Guiné Portuguesa", } - GWM{ - "GWM", - "Mil-réis da Guiné Portuguesa", - } GWP{ "GWP", "Peso da Guiné-Bissau", @@ -861,22 +644,6 @@ pt{ "HUF", "Forinte húngaro", } - IBP{ - "IBP", - "Libra da Irlanda do Norte", - } - IDG{ - "IDG", - "Guilder Nica indonésio", - } - IDJ{ - "IDJ", - "Rupia Java indonésia", - } - IDN{ - "IDN", - "Rupia Nova indonésia", - } IDR{ "IDR", "Rupia indonésia", @@ -885,10 +652,6 @@ pt{ "IEP", "Libra irlandesa", } - ILL{ - "ILL", - "Sheqel israelita", - } ILP{ "ILP", "Libra israelita", @@ -897,10 +660,6 @@ pt{ "ILS", "Sheqel Novo israelita", } - IMP{ - "IMP", - "Libra esterlina da Ilha de Man", - } INR{ "=0#Rs.|1#Re.|1/common/main/pt_BR.xml // * // *************************************************************************** pt_BR{ - Version{"1.2"} + Countries{ + 172{"Comunidade dos Estados Independentes"} + AX{"Ilhas Aland"} + BA{"Bósnia-Herzegovina"} + BH{"Bahrain"} + KP{"Coréia do Norte"} + MK{"Macedônia"} + ZW{"Zimbábue"} + } + Languages{ + ang{"inglês arcaico (aprox. 450-1100)"} + awa{"awadhi"} + bai{"idiomas bamileke"} + bug{"buguinês"} + ce{"checheno"} + crh{"turco da criméia; tártaro da criméia"} + dsb{"sérvio baixo"} + dum{"holandês medieval"} + enm{"inglês medieval"} + frm{"francês medieval"} + fro{"francês arcaico"} + gmh{"alemão medieval alto"} + goh{"alemão arcaico alto"} + grc{"grego arcaico"} + iba{"ibã"} + ik{"inupiaque"} + jv{"javanês"} + kbd{"kabardiano"} + khi{"khoisan (outros)"} + mga{"irlandês medieval"} + mkh{"mon-khmer (outros)"} + nd{"ndebele do norte"} + nic{"Cordofano-nigeriano (outros)"} + non{"nórdico arcaico"} + nr{"ndebele do sul"} + nso{"soto setentrional"} + ota{"turco otomano"} + peo{"persa arcaico"} + pro{"provençal arcaico"} + sal{"idiomas salisanos"} + sgn{"linguagem de sinais"} + st{"soto do sul"} + wak{"idiomas wakashan"} + wen{"idiomas sórbios"} + } + Version{"1.42"} calendar{ + buddhist{ + DateTimePatterns{ + "HH'h'mm'min'ss's' z", + "H'h'm'min's's' z", + "HH:mm:ss", + "HH:mm", + "EEEE, MMMM d, yyyy G", + "MMMM d, yyyy G", + "MMM d, yyyy G", + "M/d/yyyy", + "{1} {0}", + } + } gregorian{ DateTimePatterns{ "HH'h'mm'min'ss's' z", @@ -21,6 +79,83 @@ pt_BR{ "dd/MM/yy", "{1} {0}", } + fields{ + day{ + dn{"Dia"} + } + dayperiod{ + dn{"Período do dia"} + } + hour{ + dn{"Hora"} + } + minute{ + dn{"Minuto"} + } + month{ + dn{"Mês"} + } + second{ + dn{"Segundo"} + } + week{ + dn{"Semana"} + } + weekday{ + dn{"Dia da semana"} + } + year{ + dn{"Ano"} + } + zone{ + dn{"Fuso"} + } + } + } + japanese{ + DateTimePatterns{ + "HH'h'mm'min'ss's' z", + "H'h'm'min's's' z", + "HH:mm:ss", + "HH:mm", + "EEEE, MMMM d, y G", + "MMMM d, y G", + "MMM d, y G", + "M/d/yy", + "{1} {0}", + } + } + } + zoneStrings{ + "America:Denver"{ + ec{"Denver"} + ld{"Horário de Verão da Montanha"} + ls{"Horário Padrão da Montanha"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"Horário de Verão do Atlântico"} + ls{"Horário Padrão do Atlântico"} + } + "America:Phoenix"{ + ls{"Horário Padrão da Montanha"} + } + "Asia:Shanghai"{ + ec{"Shanghai"} + ld{"Horário de Verão da China"} + } + "Asia:Tokyo"{ + ec{"Tokyo"} + ld{"Horário de Verão do Japão"} + } + "Europe:Paris"{ + ec{"Paris"} + ld{"Horário de Verão da Europa Central"} + ls{"Horário Padrão da Europa Central"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"Horário de Verão do Havaí"} } } } diff --git a/icuSources/data/locales/pt_PT.txt b/icuSources/data/locales/pt_PT.txt index 2cf060eb..43f5bf97 100644 --- a/icuSources/data/locales/pt_PT.txt +++ b/icuSources/data/locales/pt_PT.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/pt_PT.xml +// * Source File:/common/main/pt_PT.xml // * // *************************************************************************** pt_PT{ @@ -66,9 +66,16 @@ pt_PT{ VI{"Ilhas Virgin E.U.A."} VN{"Vietname"} YE{"Iémen"} - YU{"Jugoslávia"} } Currencies{ + AFA{ + "AFA", + "Afeghani (1927-2002)", + } + BRB{ + "BRB", + "Cruzeiro novo brasileiro (1967-1986)", + } PTE{ "Esc.", "Escudo português", @@ -86,12 +93,12 @@ pt_PT{ sl{"esloveno"} } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.53"} calendar{ gregorian{ DateTimePatterns{ @@ -105,6 +112,73 @@ pt_PT{ "yy/MM/dd", "{1} {0}", } + fields{ + day{ + dn{"Dia"} + } + dayperiod{ + dn{"Período do dia"} + } + hour{ + dn{"Hora"} + } + minute{ + dn{"Minuto"} + } + month{ + dn{"Mês"} + } + week{ + dn{"Semana"} + } + weekday{ + dn{"Dia da semana"} + } + year{ + dn{"Ano"} + } + zone{ + dn{"Zona"} + } + } + } + } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } + zoneStrings{ + "America:Araguaina"{ + ec{"Araguaina"} + } + "America:Bahia"{ + ec{"Baía"} + } + "America:Cancun"{ + ec{"Cancun"} + } + "America:Cuiaba"{ + ec{"Cuibá"} + } + "America:North_Dakota:Center"{ + ec{"Center"} + } + "Asia:Sakhalin"{ + ec{"Sacalina"} + } + "Asia:Ulaanbaatar"{ + ec{"Ulan Bator"} + } + "Europe:Kaliningrad"{ + ec{"Kaliningrado"} + } + "Europe:Madrid"{ + ec{"Madrid"} + } + "Europe:Moscow"{ + ec{"Moscovo"} } } } diff --git a/icuSources/data/locales/resfiles.mk b/icuSources/data/locales/resfiles.mk index 2c22560c..f3824fac 100644 --- a/icuSources/data/locales/resfiles.mk +++ b/icuSources/data/locales/resfiles.mk @@ -1,4 +1,4 @@ -# * Copyright (C) 1997-2004, International Business Machines +# * Copyright (C) 1998-2006, International Business Machines # * Corporation and others. All Rights Reserved. # A list of txt's to build # Note: @@ -24,62 +24,67 @@ # # Generated by LDML2ICUConverter, from LDML source files. -# Aliases which do not have a corresponding xx.xml file (see deprecatedList.xml) -GENRB_SYNTHETIC_ALIAS = in.txt in_ID.txt iw.txt iw_IL.txt\ - ja_JP_TRADITIONAL.txt no.txt no_NO.txt no_NO_NY.txt th_TH_TRADITIONAL.txt +# Aliases which do not have a corresponding xx.xml file (see icu-config.xml & build.xml) +GENRB_SYNTHETIC_ALIAS = en_RH.txt in.txt in_ID.txt iw.txt\ + iw_IL.txt ja_JP_TRADITIONAL.txt no.txt no_NO.txt no_NO_NY.txt\ + th_TH_TRADITIONAL.txt # All aliases (to not be included under 'installed'), but not including root. -GENRB_ALIAS_SOURCE = $(GENRB_SYNTHETIC_ALIAS) sh.txt sh_YU.txt zh_CN.txt zh_HK.txt\ - zh_MO.txt zh_SG.txt zh_TW.txt +GENRB_ALIAS_SOURCE = $(GENRB_SYNTHETIC_ALIAS) az_AZ.txt sh.txt sh_CS.txt sh_YU.txt\ + sr_CS.txt sr_Cyrl_YU.txt sr_Latn_YU.txt sr_YU.txt uz_UZ.txt\ + zh_CN.txt zh_HK.txt zh_MO.txt zh_SG.txt zh_TW.txt # Ordinary resources GENRB_SOURCE = af.txt af_ZA.txt am.txt am_ET.txt\ ar.txt ar_AE.txt ar_BH.txt ar_DZ.txt ar_EG.txt\ - ar_IN.txt ar_IQ.txt ar_JO.txt ar_KW.txt ar_LB.txt\ - ar_LY.txt ar_MA.txt ar_OM.txt ar_QA.txt ar_SA.txt\ - ar_SD.txt ar_SY.txt ar_TN.txt ar_YE.txt be.txt\ - be_BY.txt bg.txt bg_BG.txt bn.txt bn_IN.txt\ - ca.txt ca_ES.txt cs.txt cs_CZ.txt cy.txt\ - cy_GB.txt da.txt da_DK.txt de.txt de_AT.txt\ - de_BE.txt de_CH.txt de_DE.txt de_LU.txt el.txt\ - el_GR.txt en.txt en_AU.txt en_BE.txt en_BW.txt\ - en_CA.txt en_GB.txt en_HK.txt en_IE.txt en_IN.txt\ - en_MT.txt en_NZ.txt en_PH.txt en_PK.txt en_SG.txt\ - en_US.txt en_US_POSIX.txt en_VI.txt en_ZA.txt en_ZW.txt\ - eo.txt es.txt es_AR.txt es_BO.txt es_CL.txt\ - es_CO.txt es_CR.txt es_DO.txt es_EC.txt es_ES.txt\ - es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\ - es_PE.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\ - es_UY.txt es_VE.txt et.txt et_EE.txt eu.txt\ - eu_ES.txt fa.txt fa_AF.txt fa_IR.txt fi.txt\ - fi_FI.txt fo.txt fo_FO.txt fr.txt fr_BE.txt\ - fr_CA.txt fr_CH.txt fr_FR.txt fr_LU.txt ga.txt\ - ga_IE.txt gl.txt gl_ES.txt gu.txt gu_IN.txt\ - gv.txt gv_GB.txt he.txt he_IL.txt hi.txt\ - hi_IN.txt hr.txt hr_HR.txt hu.txt hu_HU.txt\ - hy.txt hy_AM.txt hy_AM_REVISED.txt id.txt id_ID.txt\ - is.txt is_IS.txt it.txt it_CH.txt it_IT.txt\ - ja.txt ja_JP.txt kk.txt kk_KZ.txt kl.txt\ - kl_GL.txt kn.txt kn_IN.txt ko.txt ko_KR.txt\ - kok.txt kok_IN.txt kw.txt kw_GB.txt lt.txt\ - lt_LT.txt lv.txt lv_LV.txt mk.txt mk_MK.txt\ - ml.txt ml_IN.txt mr.txt mr_IN.txt ms.txt\ - ms_BN.txt ms_MY.txt mt.txt mt_MT.txt nb.txt\ - nb_NO.txt nl.txt nl_BE.txt nl_NL.txt nn.txt\ - nn_NO.txt om.txt om_ET.txt om_KE.txt or.txt\ - or_IN.txt pa.txt pa_IN.txt pl.txt pl_PL.txt\ - ps.txt ps_AF.txt pt.txt pt_BR.txt pt_PT.txt\ - ro.txt ro_RO.txt ru.txt ru_RU.txt ru_UA.txt\ - sk.txt sk_SK.txt sl.txt sl_SI.txt so.txt\ - so_DJ.txt so_ET.txt so_KE.txt so_SO.txt sq.txt\ - sq_AL.txt sr.txt sr_Cyrl.txt sr_Cyrl_YU.txt sr_Latn.txt\ - sr_Latn_YU.txt sr_YU.txt sv.txt sv_FI.txt sv_SE.txt\ - sw.txt sw_KE.txt sw_TZ.txt ta.txt ta_IN.txt\ - te.txt te_IN.txt th.txt th_TH.txt ti.txt\ - ti_ER.txt ti_ET.txt tr.txt tr_TR.txt uk.txt\ - uk_UA.txt vi.txt vi_VN.txt zh.txt zh_Hans.txt\ + ar_IQ.txt ar_JO.txt ar_KW.txt ar_LB.txt ar_LY.txt\ + ar_MA.txt ar_OM.txt ar_QA.txt ar_SA.txt ar_SD.txt\ + ar_SY.txt ar_TN.txt ar_YE.txt as.txt as_IN.txt\ + az.txt az_Cyrl.txt az_Cyrl_AZ.txt az_Latn.txt az_Latn_AZ.txt\ + be.txt be_BY.txt bg.txt bg_BG.txt bn.txt\ + bn_IN.txt ca.txt ca_ES.txt cs.txt cs_CZ.txt\ + cy.txt cy_GB.txt da.txt da_DK.txt de.txt\ + de_AT.txt de_BE.txt de_CH.txt de_DE.txt de_LU.txt\ + el.txt el_GR.txt en.txt en_AU.txt en_BE.txt\ + en_BW.txt en_CA.txt en_GB.txt en_HK.txt en_IE.txt\ + en_IN.txt en_MT.txt en_NZ.txt en_PH.txt en_PK.txt\ + en_SG.txt en_US.txt en_US_POSIX.txt en_VI.txt en_ZA.txt\ + en_ZW.txt eo.txt es.txt es_AR.txt es_BO.txt\ + es_CL.txt es_CO.txt es_CR.txt es_DO.txt es_EC.txt\ + es_ES.txt es_GT.txt es_HN.txt es_MX.txt es_NI.txt\ + es_PA.txt es_PE.txt es_PR.txt es_PY.txt es_SV.txt\ + es_US.txt es_UY.txt es_VE.txt et.txt et_EE.txt\ + eu.txt eu_ES.txt fa.txt fa_AF.txt fa_IR.txt\ + fi.txt fi_FI.txt fo.txt fo_FO.txt fr.txt\ + fr_BE.txt fr_CA.txt fr_CH.txt fr_FR.txt fr_LU.txt\ + ga.txt ga_IE.txt gl.txt gl_ES.txt gu.txt\ + gu_IN.txt gv.txt gv_GB.txt haw.txt haw_US.txt\ + he.txt he_IL.txt hi.txt hi_IN.txt hr.txt\ + hr_HR.txt hu.txt hu_HU.txt hy.txt hy_AM.txt\ + hy_AM_REVISED.txt id.txt id_ID.txt is.txt is_IS.txt\ + it.txt it_CH.txt it_IT.txt ja.txt ja_JP.txt\ + kk.txt kk_KZ.txt kl.txt kl_GL.txt kn.txt\ + kn_IN.txt ko.txt ko_KR.txt kok.txt kok_IN.txt\ + kw.txt kw_GB.txt lt.txt lt_LT.txt lv.txt\ + lv_LV.txt mk.txt mk_MK.txt ml.txt ml_IN.txt\ + mr.txt mr_IN.txt ms.txt ms_BN.txt ms_MY.txt\ + mt.txt mt_MT.txt nb.txt nb_NO.txt nl.txt\ + nl_BE.txt nl_NL.txt nn.txt nn_NO.txt om.txt\ + om_ET.txt om_KE.txt or.txt or_IN.txt pa.txt\ + pa_IN.txt pl.txt pl_PL.txt ps.txt ps_AF.txt\ + pt.txt pt_BR.txt pt_PT.txt ro.txt ro_RO.txt\ + ru.txt ru_RU.txt ru_UA.txt sk.txt sk_SK.txt\ + sl.txt sl_SI.txt so.txt so_DJ.txt so_ET.txt\ + so_KE.txt so_SO.txt sq.txt sq_AL.txt sr.txt\ + sr_Cyrl.txt sr_Cyrl_CS.txt sr_Latn.txt sr_Latn_CS.txt sv.txt\ + sv_FI.txt sv_SE.txt sw.txt sw_KE.txt sw_TZ.txt\ + ta.txt ta_IN.txt te.txt te_IN.txt th.txt\ + th_TH.txt ti.txt ti_ER.txt ti_ET.txt tr.txt\ + tr_TR.txt uk.txt uk_UA.txt ur.txt ur_IN.txt\ + ur_PK.txt uz.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt\ + uz_Latn_UZ.txt vi.txt vi_VN.txt zh.txt zh_Hans.txt\ zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt\ zh_Hant_TW.txt diff --git a/icuSources/data/locales/reslocal.mk b/icuSources/data/locales/reslocal.mk index cda515d5..d92fae77 100644 --- a/icuSources/data/locales/reslocal.mk +++ b/icuSources/data/locales/reslocal.mk @@ -1,6 +1,19 @@ # # Local Apple addition for locale resources -# Copyright (c) 2004 Apple Computer, Inc. All rights reserved. +# Copyright (c) 2004-2005, 2007 Apple Inc. All rights reserved. # -GENRB_SOURCE_LOCAL = haw.txt haw_US.txt +# ifeq "$(MINIMAL)" "YES" +# GENRB_SOURCE = en.txt en_AU.txt en_BE.txt\ +# en_BW.txt en_CA.txt en_GB.txt en_HK.txt en_IE.txt\ +# en_IN.txt en_MT.txt en_NZ.txt en_PH.txt en_PK.txt\ +# en_SG.txt en_US.txt en_US_POSIX.txt en_VI.txt en_ZA.txt\ +# en_ZW.txt es.txt es_AR.txt es_BO.txt\ +# es_CL.txt es_CO.txt es_CR.txt es_DO.txt es_EC.txt\ +# es_ES.txt es_GT.txt es_HN.txt es_MX.txt es_NI.txt\ +# es_PA.txt es_PE.txt es_PR.txt es_PY.txt es_SV.txt\ +# es_US.txt es_UY.txt es_VE.txt fr.txt\ +# fr_BE.txt fr_CA.txt fr_CH.txt fr_FR.txt fr_LU.txt +# else +# GENRB_SOURCE_LOCAL = +# endif diff --git a/icuSources/data/locales/ro.txt b/icuSources/data/locales/ro.txt index 7cf1f82f..5a1bdf3e 100644 --- a/icuSources/data/locales/ro.txt +++ b/icuSources/data/locales/ro.txt @@ -1,20 +1,46 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ro.xml +// * Source File:/common/main/ro.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/ro.xml + * ICU source: /xml/main/ro.xml */ ro{ + AuxExemplarCharacters{"[q w y]"} Countries{ - AD{"Andorra"} + 001{"Lume"} + 005{"America de Sud"} + 011{"Africa occidentală"} + 013{"America centrală"} + 014{"Africa orientală"} + 015{"Africa septentrională"} + 017{"Africa centrală"} + 018{"Africa australă"} + 019{"Americi"} + 021{"America de Nord"} + 029{"Caraibe"} + 030{"Asia orientală"} + 035{"Asia de Sud-Est"} + 039{"Europa meridională"} + 053{"Australia și Noua Zeelandă"} + 054{"Melanezia"} + 057{"Micronezia"} + 061{"Polinezia"} + 062{"Asia centrala și de Sud"} + 145{"Asia occidentală"} + 150{"Europa"} + 151{"Europa de Est"} + 154{"Europa septentrională"} + 155{"Europa occidentală"} + 830{"Insulele Anglo-Normande"} + AD{"Andora"} AE{"Emiratele Arabe Unite"} AF{"Afganistan"} - AG{"Antigua şi Barbuda"} + AG{"Antigua și Barbuda"} AI{"Anguilla"} AL{"Albania"} AM{"Armenia"} @@ -26,8 +52,9 @@ ro{ AT{"Austria"} AU{"Australia"} AW{"Aruba"} + AX{"Insulele Aland"} AZ{"Azerbaidjan"} - BA{"Bosnia şi Herzegovina"} + BA{"Bosnia și Herzegovina"} BB{"Barbados"} BD{"Bangladesh"} BE{"Belgia"} @@ -51,14 +78,15 @@ ro{ CD{"Congo, Republica Democratică"} CF{"Republica Central Africană"} CG{"Congo"} - CH{"Eleveţia"} - CI{"Coasta de Fildeş"} + CH{"Eleveția"} + CI{"Coasta de Fildeș"} CK{"Insulele Cook"} CL{"Chile"} CM{"Camerun"} CN{"China"} CO{"Columbia"} CR{"Costa Rica"} + CS{"Serbia și Muntenegru"} CU{"Cuba"} CV{"Capul Verde"} CX{"Insula Christmas"} @@ -82,9 +110,8 @@ ro{ FK{"Insulele Falkland"} FM{"Micronezia, Statele Federate"} FO{"Insulele Feroe"} - FR{"Franţa"} + FR{"Franța"} GA{"Gabon"} - GB{"Regatul Unit"} GD{"Grenada"} GE{"Georgia"} GF{"Guyana Franceză"} @@ -96,15 +123,15 @@ ro{ GP{"Guadeloupe"} GQ{"Guineea Ecuatorială"} GR{"Grecia"} - GS{"Insulele South Georgia şi South Sandwich"} + GS{"Insulele South Georgia și South Sandwich"} GT{"Guatemala"} GU{"Guam"} GW{"Guineea-Bissau"} GY{"Guyana"} HK{"R.A.S. Hong Kong a Chinei"} - HM{"Insula Heard şi Insulele McDonald"} + HM{"Insula Heard și Insulele McDonald"} HN{"Honduras"} - HR{"Croaţia"} + HR{"Croația"} HT{"Haiti"} HU{"Ungaria"} ID{"Indonezia"} @@ -124,7 +151,7 @@ ro{ KH{"Cambodgia"} KI{"Kiribati"} KM{"Comoros"} - KN{"Saint Kitts şi Nevis"} + KN{"Saint Kitts și Nevis"} KP{"Coreea de Nord"} KR{"Coreea de Sud"} KW{"Kuweit"} @@ -182,7 +209,7 @@ ro{ PH{"Filipine"} PK{"Pakistan"} PL{"Polonia"} - PM{"Saint Pierre şi Miquelon"} + PM{"Saint Pierre și Miquelon"} PN{"Pitcairn"} PR{"Porto Rico"} PS{"Teritoriul Palestinian"} @@ -190,9 +217,10 @@ ro{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"Altă Oceania"} RE{"Reunion"} RO{"România"} - RU{"Federaţia Rusă"} + RU{"Federația Rusă"} RW{"Rwanda"} SA{"Arabia Saudită"} SB{"Insulele Solomon"} @@ -202,19 +230,18 @@ ro{ SG{"Singapore"} SH{"Saint Helena"} SI{"Slovenia"} - SJ{"Svalbard şi Jan Mayen"} + SJ{"Svalbard și Jan Mayen"} SK{"Slovacia"} SL{"Sierra Leone"} SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbia"} SR{"Surinam"} - ST{"Sao Tome şi Principe"} + ST{"Sao Tome și Principe"} SV{"El Salvador"} SY{"Siria"} SZ{"Swaziland"} - TC{"Insulele Turks şi Caicos"} + TC{"Insulele Turks și Caicos"} TD{"Ciad"} TF{"Teritoriile Franceze de Sud"} TG{"Togo"} @@ -228,6 +255,7 @@ ro{ TR{"Turcia"} TT{"Trinidad şi Tobago"} TV{"Tuvalu"} + TW{"Taiwan"} TZ{"Tanzania"} UA{"Ucraina"} UG{"Uganda"} @@ -246,22 +274,11 @@ ro{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Iugoslavia"} ZA{"Africa de Sud"} ZM{"Zambia"} ZW{"Zimbabwe"} } - Currencies{ - ROL{ - "lei", - "ROL", - } - TRY{ - "TRY", - "Noua liră turcească", - } - } - ExemplarCharacters{"[a-z â î ă ş ţ]"} + ExemplarCharacters{"[a ă â b-i î j-p r s ș t ț u-x z]"} Languages{ ar{"Arabă"} bg{"Bulgară"} @@ -308,16 +325,12 @@ ro{ "E", "‰", "∞", - "�", + "NaN", "+", } - Version{"1.2"} + Version{"1.66"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -343,13 +356,24 @@ ro{ wide{ "duminică", "luni", - "marţi", + "marți", "miercuri", "joi", "vineri", "sîmbătă", } } + stand-alone{ + narrow{ + "D", + "L", + "M", + "M", + "J", + "V", + "S", + } + } } eras{ abbreviated{ @@ -388,8 +412,78 @@ ro{ "decembrie", } } + stand-alone{ + narrow{ + "I", + "F", + "M", + "A", + "M", + "I", + "I", + "A", + "S", + "O", + "N", + "D", + } + } } + quarters{ + format{ + abbreviated{ + "T1", + "T2", + "T3", + "T4", + } + wide{ + "trimestrul 1", + "trimestrul 2", + "trimestrul 3", + "trimestrul 4", + } + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Antarctica:South_Pole"{ + ec{"Polul Sud"} + } + "Asia:Irkutsk"{ + ec{"Irkuțk"} + } + "Asia:Kamchatka"{ + ec{"Kamciatka"} + } + "Asia:Sakhalin"{ + ec{"Sahalin"} + } + "Asia:Yakutsk"{ + ec{"Yakuțk"} + } + "Asia:Yekaterinburg"{ + ec{"Ekaterinburg"} + } + "Atlantic:Azores"{ + ec{"Azore"} + } + "Atlantic:Canary"{ + ec{"Canare"} + } + "Europe:Lisbon"{ + ec{"Lisabona"} + } + "Europe:London"{ + ec{"Londra"} + } + "Europe:Moscow"{ + ec{"Moscova"} + } + "Europe:Zaporozhye"{ + ec{"Zaporoje"} } } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} } diff --git a/icuSources/data/locales/ro_RO.txt b/icuSources/data/locales/ro_RO.txt index 51030c9b..5bb22714 100644 --- a/icuSources/data/locales/ro_RO.txt +++ b/icuSources/data/locales/ro_RO.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ro_RO.xml +// * Source File:/common/main/ro_RO.xml // * // *************************************************************************** ro_RO{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} } diff --git a/icuSources/data/locales/root.txt b/icuSources/data/locales/root.txt index cffd5547..bf98291b 100644 --- a/icuSources/data/locales/root.txt +++ b/icuSources/data/locales/root.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/root.xml +// * Source File:/common/main/root.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/root.xml + * ICU source: /xml/main/root.xml */ root{ + AuxExemplarCharacters{"[]"} Currencies{ EUR{ "€", @@ -52,12 +53,12 @@ root{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤ #,##0.00;-¤ #,##0.00", + "#,##0.###", + "¤ #,##0.00", "#,##0%", "#E0", } @@ -65,21 +66,14 @@ root{ 297, 210, } - Version{"1.2"} - boundaries{ - grapheme{"char"} - line{"line"} - sentence{"sent"} - title{"title"} - word{"word"} - } + Version{"1.84"} calendar{ buddhist{ DateTimePatterns{ - "h:mm:ss a z", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", "EEEE, MMMM d, yyyy G", "MMMM d, yyyy G", "MMM d, yyyy G", @@ -94,10 +88,10 @@ root{ } chinese{ DateTimePatterns{ - "h:mm:ss a z", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", "EEEE y'x'G-Ml-d", "y'x'G-Ml-d", "y'x'G-Ml-d", @@ -109,14 +103,82 @@ root{ "*", } } + coptic{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } + monthNames{ + default{"format"} + format{ + default{"wide"} + wide{ + "Tout", + "Baba", + "Hator", + "Kiahk", + "Toba", + "Amshir", + "Baramhat", + "Baramouda", + "Bashans", + "Paona", + "Epep", + "Mesra", + "Nasie", + } + } + } + } default{"gregorian"} + ethiopic{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } + monthNames{ + default{"format"} + format{ + default{"wide"} + wide{ + "Meskerem", + "Tekemt", + "Hedar", + "Tahsas", + "Ter", + "Yekatit", + "Megabit", + "Miazia", + "Genbot", + "Sene", + "Hamle", + "Nehasse", + "Pagumen", + } + } + } + } gregorian{ AmPmMarkers{ "AM", "PM", } DateTimeElements:intvector{ - 1, + 2, 1, } DateTimePatterns{ @@ -130,6 +192,19 @@ root{ "yy/MM/dd", "{1} {0}", } + appendItems{ + Day{"{0} ({2}: {1})"} + Day-Of-Week{"{0} {1}"} + Era{"{0} {1}"} + Hour{"{0} ({2}: {1})"} + Minute{"{0} ({2}: {1})"} + Month{"{0} ({2}: {1})"} + Quarter{"{0} ({2}: {1})"} + Second{"{0} ({2}: {1})"} + Timezone{"{0} {1}"} + Week{"{0} ({2}: {1})"} + Year{"{0} {1}"} + } dayNames{ default{"format"} format{ @@ -143,15 +218,6 @@ root{ "7", } default{"wide"} - narrow{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - } wide{ "1", "2", @@ -163,16 +229,6 @@ root{ } } stand-alone{ - abbreviated{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - } - default{"wide"} narrow{ "1", "2", @@ -182,15 +238,6 @@ root{ "6", "7", } - wide{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - } } } eras{ @@ -198,39 +245,48 @@ root{ "BCE", "CE", } + wide:alias{"/LOCALE/calendar/gregorian/eras/abbreviated"} + } + fields{ + day{ + dn{"Day"} + } + dayperiod{ + dn{"Dayperiod"} + } + era{ + dn{"Era"} + } + hour{ + dn{"Hour"} + } + minute{ + dn{"Minute"} + } + month{ + dn{"Month"} + } + second{ + dn{"Second"} + } + week{ + dn{"Week"} + } + weekday{ + dn{"Day of the Week"} + } + year{ + dn{"Year"} + } + zone{ + dn{"Zone"} + } } monthNames{ default{"format"} format{ - abbreviated{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - } + abbreviated:alias{"/LOCALE/calendar/gregorian/monthNames/format/wide"} default{"wide"} - narrow{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - } wide{ "1", "2", @@ -247,21 +303,6 @@ root{ } } stand-alone{ - abbreviated{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - } - default{"wide"} narrow{ "1", "2", @@ -276,19 +317,21 @@ root{ "11", "12", } + } + } + quarters{ + format{ + abbreviated{ + "Q1", + "Q2", + "Q3", + "Q4", + } wide{ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", + "Q1", + "Q2", + "Q3", + "Q4", } } } @@ -308,7 +351,7 @@ root{ monthNames{ default{"format"} format{ - abbreviated:alias{"root/calendar/hebrew/monthNames/format/wide"} + abbreviated:alias{"/LOCALE/calendar/hebrew/monthNames/format/wide"} default{"wide"} wide{ "Tishri", @@ -329,6 +372,17 @@ root{ } } islamic{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } eras{ abbreviated{ "AH", @@ -337,7 +391,7 @@ root{ monthNames{ default{"format"} format{ - abbreviated:alias{"root/calendar/islamic/monthNames/format/wide"} + abbreviated:alias{"/LOCALE/calendar/islamic/monthNames/format/wide"} default{"wide"} wide{ "Muharram", @@ -356,13 +410,13 @@ root{ } } } - islamic-civil:alias{"root/calendar/islamic"} + islamic-civil:alias{"/LOCALE/calendar/islamic"} japanese{ DateTimePatterns{ - "h:mm:ss a z", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", "EEEE, MMMM d, y G", "MMMM d, y G", "MMM d, y G", @@ -610,16 +664,85 @@ root{ } } } + persian{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, yyyy MMMM dd", + "yyyy MMMM d", + "yyyy MMM d", + "yy/MM/dd", + "{1} {0}", + } + eras{ + abbreviated{ + "AP", + } + } + monthNames{ + default{"format"} + format{ + default{"wide"} + wide{ + "Farvardin", + "Ordibehesht", + "Khordad", + "Tir", + "Mordad", + "Shahrivar", + "Mehr", + "Aban", + "Azar", + "Dey", + "Bahman", + "Esfand", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"’"} + alternateQuotationStart{"‘"} + quotationEnd{"”"} + quotationStart{"“"} + } + localPatternChars{"GyMdkHmsSEDFwWahKzYeugAZvcL"} + measurementSystemNames{ + US{"US"} + metric{"Metric"} } - localPatternChars{"GyMdkHmsSEDFwWahKzYeugAZ"} zoneStrings{ - { - "", - "", - "", - "", - "", + ""{ + ec{""} + ld{""} + ls{""} + sd{""} + ss{""} + } + fallbackFormat{"{0} ({1})"} + gmtFormat{"GMT{0}"} + hourFormat{"+HH:mm;-HH:mm"} + hoursFormat{"{0}/{1}"} + preferenceOrdering{ "", } + regionFormat{"{0}"} + singleCountries{ + "Africa/Bamako", + "America/Godthab", + "America/Santiago", + "America/Guayaquil", + "Asia/Shanghai", + "Asia/Tashkent", + "Asia/Kuala_Lumpur", + "Europe/Madrid", + "Europe/Lisbon", + "Europe/London", + "Pacific/Auckland", + "Pacific/Tahiti", + } } } diff --git a/icuSources/data/locales/ru.txt b/icuSources/data/locales/ru.txt index 3413801b..cd9b901f 100644 --- a/icuSources/data/locales/ru.txt +++ b/icuSources/data/locales/ru.txt @@ -1,1401 +1,2479 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ru.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ru.xml - */ -ru{ - Countries{ - AD{"Андорра"} - AE{"Объединенные Арабские Эмираты"} - AF{"Афганистан"} - AG{"Антигуа и Барбуда"} - AI{"Ангуилла"} - AL{"Албания"} - AM{"Армения"} - AN{"Голландские Антильские Острова"} - AO{"Ангола"} - AQ{"Антарктида"} - AR{"Аргентина"} - AS{"Американское Самоа"} - AT{"Австрия"} - AU{"Австралия"} - AW{"Аруба"} - AZ{"Азербайджан"} - BA{"Босния"} - BB{"Барбадос"} - BD{"Бангладеш"} - BE{"Бельгия"} - BF{"Буркина Фасо"} - BG{"Болгария"} - BH{"Бахрейн"} - BI{"Бурунди"} - BJ{"Бенин"} - BM{"Бермудские Острова"} - BN{"Бруней Даруссалам"} - BO{"Боливия"} - BR{"Бразилия"} - BS{"Багамские острова"} - BT{"Бутан"} - BV{"Остров Буве"} - BW{"Ботсвана"} - BY{"Беларусь"} - BZ{"Белиз"} - CA{"Канада"} - CC{"Кокосовые Острова (Киилинг)"} - CD{"Конго, Демократическая Республика"} - CF{"Центрально-Африканская Республика"} - CG{"Конго"} - CH{"Швейцария"} - CI{"Кот д’Ивуар"} - CK{"Острова Кука"} - CL{"Чили"} - CM{"Камерун"} - CN{"Китай"} - CO{"Колумбия"} - CR{"Коста-Рика"} - CU{"Куба"} - CV{"Острова Зеленого Мыса"} - CX{"Остров Рождества"} - CY{"Кипр"} - CZ{"Чешская Республика"} - DE{"Германия"} - DJ{"Джибути"} - DK{"Дания"} - DM{"Остров Доминика"} - DO{"Доминиканская Республика"} - DZ{"Алжир"} - EC{"Эквадор"} - EE{"Эстония"} - EG{"Египет"} - EH{"Западная Сахара"} - ER{"Эритрея"} - ES{"Испания"} - ET{"Эфиопия"} - FI{"Финляндия"} - FJ{"Фиджи"} - FK{"Фольклендские Острова"} - FM{"Федеративное Государство Микронезия"} - FO{"Фарерские острова"} - FR{"Франция"} - GA{"Габон"} - GB{"Великобритания"} - GD{"Гренада"} - GE{"Грузия"} - GF{"Французская Гвиана"} - GH{"Гана"} - GI{"Гибралтар"} - GL{"Гренландия"} - GM{"Гамбия"} - GN{"Гвинея"} - GP{"Гваделупа"} - GQ{"Экваториальная Гвинея"} - GR{"Греция"} - GS{"Южная Джорджия и Южные Сандвичевы Острова"} - GT{"Гватемала"} - GU{"Гуам"} - GW{"Гвинея-Биссау"} - GY{"Гайана"} - HK{"Гонконг (Область с Особым Административным Управлением, Китай)"} - HM{"Острова Херд и Мак-Дональд"} - HN{"Гондурас"} - HR{"Хорватия"} - HT{"Гаити"} - HU{"Венгрия"} - ID{"Индонезия"} - IE{"Ирландия"} - IL{"Израиль"} - IN{"Индия"} - IO{"Британские Территории в Индийском Океане"} - IQ{"Ирак"} - IR{"Иран"} - IS{"Исландия"} - IT{"Италия"} - JM{"Ямайка"} - JO{"Иордания"} - JP{"Япония"} - KE{"Кения"} - KG{"Кыргызстан"} - KH{"Камбоджа"} - KI{"Кирибати"} - KM{"Коморские Острова"} - KN{"Сент-Киттс и Невис"} - KP{"Северная Корея"} - KR{"Южная Корея"} - KW{"Кувейт"} - KY{"Каймановы Острова"} - KZ{"Казахстан"} - LA{"Лаос"} - LB{"Ливан"} - LC{"Сент-Люсия"} - LI{"Лихтенштейн"} - LK{"Шри-Ланка"} - LR{"Либерия"} - LS{"Лесото"} - LT{"Литва"} - LU{"Люксембург"} - LV{"Латвия"} - LY{"Ливия"} - MA{"Марокко"} - MC{"Монако"} - MD{"Молдова"} - MG{"Мадагаскар"} - MH{"Маршалловы Острова"} - MK{"Македония"} - ML{"Мали"} - MM{"Майанмар"} - MN{"Монголия"} - MO{"Макао (Область с Особым Административным Управлением, Китай)"} - MP{"Северные Марианские Острова"} - MQ{"Мартиник"} - MR{"Мавритания"} - MS{"Монсеррат"} - MT{"Мальта"} - MU{"Маврикий"} - MV{"Мальдивы"} - MW{"Малави"} - MX{"Мексика"} - MY{"Малайзия"} - MZ{"Мозамбик"} - NA{"Намибия"} - NC{"Новая Каледония"} - NE{"Нигер"} - NF{"Остров Норфолк"} - NG{"Нигерия"} - NI{"Никарагуа"} - NL{"Нидерланды"} - NO{"Норвегия"} - NP{"Непал"} - NR{"Науру"} - NU{"Ниуе"} - NZ{"Новая Зеландия"} - OM{"Оман"} - PA{"Панама"} - PE{"Перу"} - PF{"Французская Полинезия"} - PG{"Папуа-Новая Гвинея"} - PH{"Филиппины"} - PK{"Пакистан"} - PL{"Польша"} - PM{"Сен-Пьер и Микелон"} - PN{"Остров Питкэрн"} - PR{"Пуэрто-Рико"} - PS{"Палестинская автономия"} - PT{"Португалия"} - PW{"Палау"} - PY{"Парагвай"} - QA{"Катар"} - RE{"Реюньон"} - RO{"Румыния"} - RU{"Россия"} - RW{"Руанда"} - SA{"Саудовская Аравия"} - SB{"Соломоновы Острова"} - SC{"Сейшельские Острова"} - SD{"Судан"} - SE{"Швеция"} - SG{"Сингапур"} - SH{"Остров Святой Елены"} - SI{"Словения"} - SJ{"Острова Свалбард и Жан Майен"} - SK{"Словакия"} - SL{"Сьерра-Леоне"} - SM{"Сан-Марино"} - SN{"Сенегал"} - SO{"Сомали"} - SP{"Сербия"} - SR{"Суринам"} - ST{"Сан-Томе и Принсипи"} - SV{"Сальвадор"} - SY{"Сирийская Арабская Республика"} - SZ{"Свазиленд"} - TC{"Острова Туркс и Кайкос"} - TD{"Чад"} - TF{"Французские Южные Территории"} - TG{"Того"} - TH{"Таиланд"} - TJ{"Таджикистан"} - TK{"Токелау"} - TL{"Восточный Тимор"} - TM{"Туркменистан"} - TN{"Тунис"} - TO{"Тонга"} - TR{"Турция"} - TT{"Тринидад и Тобаго"} - TV{"Тувалу"} - TW{"Тайвань"} - TZ{"Танзания"} - UA{"Украина"} - UG{"Уганда"} - UM{"Внешние малые острова (США)"} - US{"Соединенные Штаты"} - UY{"Уругвай"} - UZ{"Узбекистан"} - VA{"Государство-город Ватикан"} - VC{"Сент-Винсент и Гренадины"} - VE{"Венесуэла"} - VG{"Британские Виргинские Острова"} - VI{"Американские Виргинские Острова"} - VN{"Вьетнам"} - VU{"Вануату"} - WF{"Эллис и Футуна"} - WS{"Самоа"} - YE{"Йемен"} - YT{"Майотта"} - YU{"Югославия"} - ZA{"Южная Африка"} - ZM{"Замбия"} - ZW{"Зимбабве"} - } - Currencies{ - ADP{ - "ADP", - "Андоррская песета", - } - AED{ - "AED", - "Дирхам (ОАЭ)", - } - AFA{ - "AFA", - "Афгани (1927-2002)", - } - AMD{ - "dram", - "Армянский драм", - } - ANG{ - "NA f.", - "Нидерландский антильский гульден", - } - AON{ - "AON", - "Новая кванза", - } - ARS{ - "Arg$", - "Аргентинское песо", - } - AUD{ - "$A", - "Австралийский доллар", - } - AWG{ - "AWG", - "Арубанский гульден", - } - AZM{ - "AZM", - "Азербайджанский манат", - } - BBD{ - "BDS$", - "Барбадосский доллар", - } - BEF{ - "BF", - "Бельгийский франк", - } - BGL{ - "lev", - "Лев", - } - BGN{ - "BGN", - "Болгарский лев", - } - BHD{ - "BD", - "Бахрейнский динар", - } - BIF{ - "Fbu", - "Бурундийский франк", - } - BMD{ - "Ber$", - "Бермудский доллар", - } - BND{ - "BND", - "Брунейский доллар", - } - BOB{ - "Bs", - "Боливиано", - } - BRL{ - "R$", - "Бразильский реал", - } - BRR{ - "BRR", - "Крузейро реал", - } - BSD{ - "BSD", - "Багамский доллар", - } - BTN{ - "Nu", - "Нгултрум", - } - BYB{ - "BYB", - "Белорусский рубль (1994-1999)", - } - BYL{ - "BYL", - "Белорусский рубль (1992-1994)", - } - BYR{ - "Rbl", - "Белорусский рубль", - } - BZD{ - "BZ$", - "Белизский доллар", - } - CAD{ - "Can$", - "Канадский доллар", - } - CDF{ - "CDF", - "Конголезский франк", - } - CHF{ - "SwF", - "Швейцарский франк", - } - CLP{ - "Ch$", - "Чилийское песо", - } - CNY{ - "Y", - "Китайский юань", - } - COP{ - "Col$", - "Колумбийское песо", - } - CRC{ - "C", - "Костариканский колон", - } - CUP{ - "CUP", - "Кубинское песо", - } - CYP{ - "£C", - "Кипрский фунт", - } - CZK{ - "CZK", - "Чешская крона", - } - DEM{ - "DEM", - "Немецкая марка", - } - DJF{ - "DF", - "Франк Джибути", - } - DKK{ - "DKr", - "Датская крона", - } - DOP{ - "RD$", - "Доминиканское песо", - } - DZD{ - "DA", - "Алжирский динар", - } - EGP{ - "EGP", - "Египетский фунт", - } - ERN{ - "ERN", - "Накфа", - } - ETB{ - "Br", - "Эфиопский быр", - } - EUR{ - "€", - "Евро", - } - FJD{ - "F$", - "Доллар Фиджи", - } - FKP{ - "FKP", - "Фунт Фолклендских островов", - } - FRF{ - "FRF", - "Французский франк", - } - GEK{ - "GEK", - "Грузинский купон", - } - GEL{ - "lari", - "Грузинский лари", - } - GIP{ - "GIP", - "Гибралтарский фунт", - } - GNF{ - "GF", - "Гвинейский франк", - } - GYD{ - "G$", - "Гайанский доллар", - } - HKD{ - "HK$", - "Гонконгский доллар", - } - HRD{ - "HRD", - "Хорватский динар", - } - IEP{ - "IR£", - "Ирландский фунт", - } - IQD{ - "ID", - "Иракский динар", - } - IRR{ - "RI", - "Иранский риал", - } - ISK{ - "ISK", - "Исландская крона", - } - ITL{ - "₤", - "Итальянская лира", - } - JMD{ - "J$", - "Ямайский доллар", - } - JOD{ - "JD", - "Иорданский динар", - } - KES{ - "K Sh", - "Кенийский шиллинг", - } - KMF{ - "CF", - "Франк Коморских островов", - } - KWD{ - "KD", - "Кувейтский динар", - } - KYD{ - "KYD", - "Доллар Каймановых островов", - } - LBP{ - "LL", - "Ливанский фунт", - } - LRD{ - "LRD", - "Либерийский доллар", - } - LSL{ - "M", - "Лоти", - } - LTL{ - "LTL", - "Литовский лит", - } - LUF{ - "LUF", - "Люксембургский франк", - } - LVL{ - "LVL", - "Латвийский лат", - } - LYD{ - "LD", - "Ливийский динар", - } - MAD{ - "MAD", - "Марокканский дирхам", - } - MDL{ - "MDL", - "Молдавский лей", - } - MGF{ - "MGF", - "Малагасийский франк", - } - MTL{ - "Lm", - "Мальтийская лира", - } - MUR{ - "MUR", - "Маврикийская рупия", - } - MWK{ - "MK", - "Квача (малавийская)", - } - MXN{ - "MEX$", - "Мексиканское новое песо", - } - NAD{ - "N$", - "Доллар Намибии", - } - NIO{ - "NIO", - "Золотая кордоба", - } - NLG{ - "NLG", - "Нидерландский гульден", - } - NOK{ - "NKr", - "Норвежская крона", - } - NPR{ - "Nrs", - "Непальская рупия", - } - NZD{ - "$NZ", - "Новозеландский доллар", - } - OMR{ - "RO", - "Оманский риал", - } - PGK{ - "PGK", - "Кина", - } - PHP{ - "PHP", - "Филиппинское песо", - } - PKR{ - "Pra", - "Пакистанская рупия", - } - PLN{ - "Zl", - "Польский злотый", - } - PLZ{ - "PLZ", - "Злотый", - } - PTE{ - "PTE", - "Португальское эскудо", - } - QAR{ - "QR", - "Катарский риал", - } - RUB{ - "RUB", - "Российский рубль", - } - RUR{ - "р.", - "Российский рубль (1991-1998)", - } - RWF{ - "RWF", - "Франк Руанды", - } - SAR{ - "SRl", - "Саудовский риал", - } - SBD{ - "SI$", - "Доллар Соломоновых островов", - } - SCR{ - "SR", - "Сейшельская рупия", - } - SDD{ - "SDD", - "Суданский динар", - } - SEK{ - "SKr", - "Шведская крона", - } - SGD{ - "S$", - "Сингапурский доллар", - } - SHP{ - "SHP", - "Фунт острова Святой Елены", - } - SKK{ - "Sk", - "Словацкая крона", - } - SLL{ - "SLL", - "Леоне", - } - SOS{ - "So. Sh.", - "Сомалийский шиллинг", - } - SRG{ - "Sf", - "Суринамский гульден", - } - STD{ - "Db", - "Добра", - } - SVC{ - "SVC", - "Сальвадорский колон", - } - SYP{ - "LS", - "Сирийский фунт", - } - TJR{ - "TJR", - "Таджикский рубль", - } - TJS{ - "TJS", - "Таджикский сомони", - } - TND{ - "TND", - "Тунисский динар", - } - TOP{ - "T$", - "Паанга", - } - TPE{ - "TPE", - "Тиморское эскудо", - } - TRL{ - "TL", - "Турецкая лира", - } - TRY{ - "TRY", - "Новая турецкая лира", - } - TTD{ - "TT$", - "Доллар Тринидада и Тобаго", - } - TWD{ - "NT$", - "Новый тайваньский доллар", - } - TZS{ - "T Sh", - "Танзанийский шиллинг", - } - UAH{ - "грн.", - "Украинская гривна", - } - UAK{ - "UAK", - "Карбованец (украинский)", - } - UGS{ - "UGS", - "Угандийский шиллинг", - } - USD{ - "US$", - "Доллар США", - } - UYP{ - "UYP", - "Уругвайское песо", - } - UZS{ - "UZS", - "Узбекский сум", - } - VUV{ - "VT", - "Вату", - } - WST{ - "WST", - "Тала", - } - XAF{ - "XAF", - "Франк КФА ВЕАС", - } - XAU{ - "XAU", - "Золото", - } - XDR{ - "XDR", - "СДР (специальные права заимствования)", - } - XEU{ - "XEU", - "ЭКЮ (единица европейской валюты)", - } - XOF{ - "XOF", - "Франк КФА ВСЕАО", - } - XPF{ - "CFPF", - "Франк КФП", - } - YER{ - "YRl", - "Йеменский риал", - } - YUN{ - "YUN", - "Югославский динар", - } - ZAR{ - "R", - "Рэнд", - } - ZMK{ - "ZMK", - "Квача (замбийская)", - } - ZRN{ - "ZRN", - "Новый заир", - } - ZWD{ - "Z$", - "Доллар Зимбабве", - } - } - ExemplarCharacters{"[а-я ё і ѣ ѳ ѵ]"} - Keys{ - calendar{"Календарь"} - collation{"Сортировка"} - currency{"Валюта"} - } - Languages{ - aa{"Афар"} - ab{"Абхазский"} - ace{"Ачехский"} - ach{"Ачоли"} - ada{"Адангме"} - ady{"Адыгейский"} - af{"Африкаанс"} - afa{"Афразийские (другие)"} - afh{"Африхили"} - akk{"Аккадский"} - ale{"Алеутский"} - alg{"Алгонкинские языки"} - am{"Амхарский"} - ang{"Староанглийский"} - ar{"Арабский"} - arc{"Арамейский"} - art{"Искусственные (другие)"} - arw{"Аравакский"} - as{"Ассамский"} - ath{"Атапачские языки"} - awa{"Авадхи"} - ay{"Аямара"} - az{"Азербайджанский"} - ba{"Башкирский"} - bad{"Банда"} - bai{"Бамилеке языки"} - bal{"Белуджский"} - ban{"Балийский"} - bas{"Баса"} - bat{"Балтийские (другие)"} - be{"Белорусский"} - bej{"Беджа"} - bem{"Бемба"} - bg{"Болгарский"} - bh{"Бихарский"} - bho{"Бходжпури"} - bi{"Бислама"} - bik{"Бикольский"} - bin{"Бини"} - bla{"Сиксика"} - bn{"Бенгальский"} - bnt{"Банту (другие)"} - bo{"Тибетский"} - br{"Бретонский"} - bra{"Брауи"} - bua{"Бурятский"} - bug{"Бугийский"} - ca{"Каталанский"} - cad{"Каддо"} - cai{"Центральной Америки индейцев (другие)"} - car{"Кариб"} - cau{"Кавказские (другие)"} - chb{"Чибча"} - chg{"Чагатайский"} - chk{"Чукотский"} - chm{"Марийский (Черемисский)"} - chn{"Чинук жаргон"} - cho{"Чоктав"} - chr{"Чероки"} - chy{"Чейенн"} - co{"Корсиканский"} - cop{"Коптский"} - cpe{"Англо-креольские и пиджины (другие)"} - cpf{"Франко-креольские и пиджины (другие)"} - crp{"Креольские и пиджины (другие)"} - cs{"Чешский"} - cus{"Кушитские (другие)"} - cv{"Чувашский"} - cy{"Валлийский"} - da{"Датский"} - dak{"Дакота"} - de{"Немецкий"} - del{"Делаварский"} - din{"Динка"} - doi{"Догри"} - dra{"Дравидийские (другие)"} - dua{"Дуала"} - dum{"Нидерландский средневековый"} - dyu{"Диула (Дьюла)"} - dz{"Бутанский"} - efi{"Эфик"} - egy{"Древнеегипетский"} - eka{"Экаджук"} - el{"Греческий"} - elx{"Эламский"} - en{"Английский"} - enm{"Среднеанглийский"} - eo{"Эсперанто"} - es{"Испанский"} - et{"Эстонский"} - eu{"Баскский"} - ewo{"Эвондо"} - fa{"Персидский"} - fan{"Фанг"} - fat{"Фанти"} - fi{"Финский"} - fiu{"Финно-угорские (другие)"} - fj{"Фиджи"} - fo{"Фарерский"} - fon{"Фон"} - fr{"Французский"} - frm{"Среднефранцузский"} - fro{"Старофранцузский"} - fy{"Фризский"} - ga{"Ирландский"} - gaa{"Га"} - gay{"Гайо"} - gd{"Гаэльский"} - gem{"Германские (другие)"} - gez{"Геэз"} - gil{"Гильбертский"} - gl{"Галицийский"} - gmh{"Средневерхненемецкий"} - gn{"Гуарани"} - goh{"Староверхненемецкий"} - gon{"Гонди"} - got{"Готский"} - grc{"Древнегреческий"} - gu{"Гуярати"} - ha{"Хоса"} - hai{"Хайда"} - haw{"Гавайский"} - he{"Иврит"} - hi{"Хинди"} - hil{"Хилигайнон"} - him{"Химачали"} - hr{"Хорватский"} - hu{"Венгерский"} - hy{"Армянский"} - ia{"Смешанный язык"} - iba{"Ибанский"} - id{"Индонезийский"} - ie{"Смешанный язык"} - ijo{"Иджо"} - ik{"Инапиак"} - ilo{"Илоко"} - inc{"Индийские (другие)"} - ira{"Иранские (другие)"} - iro{"Ирокезские языки"} - is{"Исландский"} - it{"Итальянский"} - iu{"Инактитут"} - ja{"Японский"} - jpr{"Еврейско-персидский"} - jrb{"Еврейско-арабский"} - jv{"Яванский"} - ka{"Грузинский"} - kaa{"Каракалпакский"} - kab{"Кабильский"} - kam{"Камба"} - kar{"Каренский"} - kaw{"Кави"} - kha{"Кхаси"} - khi{"Койсанские (другие)"} - kho{"Хотанский"} - kk{"Казахский"} - kl{"Гренландский"} - km{"Камбоджийский"} - kn{"Канада"} - ko{"Корейский"} - kok{"Конкани"} - kpe{"Кпелле"} - kro{"Кру"} - ks{"Кашмирский"} - ku{"Курдиш"} - kum{"Кумыкский"} - kut{"Кутенаи"} - ky{"Киргизский"} - la{"Латинский"} - lad{"Ладино"} - lah{"Лахнда"} - lam{"Ламба"} - lez{"Лезгинский"} - ln{"Лингала"} - lo{"Лаосский"} - lol{"Монго"} - loz{"Лози"} - lt{"Литовский"} - lu{"Луба-Катанга"} - lui{"Луисеньо"} - lun{"Лунда"} - luo{"Луо (Кения и Танзания)"} - lv{"Латвийский"} - mad{"Мадурский"} - mag{"Магахи"} - mai{"Майтхили"} - mak{"Макассарский"} - man{"Мандинго"} - map{"Австронезийские (другие)"} - mas{"Масаи"} - men{"Менде"} - mg{"Малагасийский"} - mga{"Среднеирландский"} - mi{"Маори"} - mic{"Микмак"} - min{"Минангкабау"} - mis{"Смешанные (другие)"} - mk{"Македонский"} - mkh{"Монкхмерские (другие)"} - ml{"Малаялам"} - mn{"Монгольский"} - mni{"Манипурский"} - mno{"Манобо языки"} - mo{"Молдавский"} - moh{"Мохаук"} - mos{"Моей"} - mr{"Маратийский"} - ms{"Малайский"} - mt{"Мальтийский"} - mul{"Разных семей языки"} - mun{"Мунда языки"} - mus{"Крик"} - mwr{"Марвари"} - my{"Бирманский"} - myn{"Майя языки"} - na{"Науру"} - nah{"Ацтекский"} - nai{"Северной Америки индейцев (другие)"} - ne{"Непальский"} - new{"Неварский"} - nic{"Нигер-кордофанские (другие)"} - niu{"Ниуэ"} - nl{"Голландский"} - no{"Норвежский"} - nog{"Ногайский"} - non{"Старонорвежский"} - nso{"Сото Северный"} - nub{"Нубийские языки"} - nym{"Ньямвези"} - nyn{"Ньянколе"} - nyo{"Ньоро"} - nzi{"Нзима"} - oc{"Окитан"} - oj{"Оджибва"} - om{"Оромо (Афан)"} - or{"Ория"} - os{"Осетинский"} - osa{"Оседжи"} - ota{"Старотурецкий"} - oto{"Отомангские языки"} - pa{"Панджабский"} - paa{"Папуасско-австралийские (другие)"} - pag{"Пангасинан"} - pal{"Пехлевийский"} - pam{"Пампанга"} - pap{"Папьяменто"} - pau{"Палау"} - peo{"Староперсидский"} - phn{"Финикийский"} - pi{"Пали"} - pl{"Польский"} - pon{"Понапе"} - pra{"Пракриты языки"} - pro{"Старопровансальский"} - ps{"Пашто (Пушто)"} - pt{"Португальский"} - qu{"Кечуа"} - raj{"Раджастхани"} - rm{"Раето-романский"} - rn{"Кирундийский"} - ro{"Румынский"} - roa{"Романские (другие)"} - rom{"Цыганский"} - ru{"Русский"} - rw{"Кинярванда"} - sa{"Санскрит"} - sad{"Сандаве"} - sah{"Якутский"} - sai{"Южной Америки индейцев (другие)"} - sal{"Салишские языки"} - sam{"Самаритянский арамейский"} - sd{"Синди"} - sel{"Селькупский"} - sem{"Семитские (другие)"} - sg{"Санго"} - sga{"Староирландский"} - sh{"Сербско-хорватский"} - shn{"Шанский"} - si{"Сингальский"} - sid{"Сидама"} - sio{"Сиу языки"} - sit{"Синотибетские (другие)"} - sk{"Словацкий"} - sl{"Словенский"} - sla{"Славянские (другие)"} - sm{"Самоа"} - smi{"Саамские языки"} - sn{"Шона"} - so{"Сомали"} - sog{"Согдийский"} - sq{"Албанский"} - sr{"Сербский"} - ss{"Сисвати"} - ssa{"Нило-сахарские (другие)"} - st{"Сесото"} - su{"Санданизский"} - suk{"Сукума"} - sus{"Сусу"} - sux{"Шумерский"} - sv{"Шведский"} - sw{"Суахили"} - ta{"Тамильский"} - tai{"Татский"} - te{"Телугу"} - ter{"Терено"} - tg{"Таджикский"} - th{"Тайский"} - ti{"Тигриниа"} - tig{"Тигре"} - tiv{"Тиви"} - tk{"Туркменский"} - tl{"Тагалог"} - tli{"Тлингит"} - tmh{"Тамашек"} - tn{"Сетсвана"} - to{"Тонга"} - tog{"Тонга (Ньяса)"} - tr{"Турецкий"} - ts{"Тсонга"} - tsi{"Цимшиан"} - tt{"Татарский"} - tut{"Алтайские (другие)"} - tw{"Тви"} - tyv{"Тувинский"} - ug{"Уйгурский"} - uga{"Угаритский"} - uk{"Украинский"} - umb{"Умбунду"} - und{"Неидентифицированный"} - ur{"Урду"} - uz{"Узбекский"} - vai{"Ваи"} - vi{"Вьетнамский"} - vo{"Волапак"} - vot{"Удмуртский (Вотяцкий)"} - wak{"Вакашские языки"} - wal{"Воламо"} - war{"Варай"} - was{"Вашо"} - wen{"Лужицкие языки"} - wo{"Волоф"} - xh{"Хоза"} - yao{"Яо"} - yap{"Яп"} - yi{"Идиш"} - yo{"Йоруба"} - za{"Зуанг"} - zap{"Сапотекский"} - zen{"Зенагский"} - zh{"Китайский"} - zu{"Зулусский"} - zun{"Зуньи"} - } - LocaleScript{ - "Cyrl", - } - Scripts{ - Arab{"Арабская"} - Armn{"Армянская"} - Beng{"Бенгальская"} - Bopo{"Бопомофо"} - Brai{"Брайля"} - Buhd{"Бухид"} - Cans{"Унифицированные Символы Канадских Аборигенов"} - Cher{"Чероки"} - Copt{"Коптская"} - Cprt{"Кипрская"} - Cyrl{"Кириллица"} - Deva{"Деванагари"} - Dsrt{"Дезерет"} - Ethi{"Эфиопская"} - Geor{"Грузинская"} - Goth{"Готская"} - Grek{"Греческая"} - Gujr{"Гуджарати"} - Guru{"Гурмукхи"} - Hang{"Хангул"} - Hano{"Хануну"} - Hebr{"Иврит"} - Hira{"Хирагана"} - Ital{"Староитальянская"} - Kana{"Катакана"} - Khmr{"Кхмерская"} - Knda{"Каннада"} - Laoo{"Лаосская"} - Latn{"Латиница"} - Limb{"Лимбу"} - Linb{"Линейная Б"} - Mlym{"Малаяльская"} - Mong{"Монгольская"} - Mymr{"Майанмарская"} - Ogam{"Огамическая"} - Orya{"Ория"} - Osma{"Османская"} - Qaai{"Унаследованная"} - Runr{"Руническая"} - Shaw{"Алфавит Шоу"} - Sinh{"Сингальская"} - Syrc{"Сирийская"} - Tagb{"Тагбанва"} - Taml{"Тамильская"} - Telu{"Телугу"} - Tglg{"Тагалог"} - Thaa{"Таана"} - Thai{"Тайская"} - Tibt{"Тибетская"} - Ugar{"Угаритская"} - Yiii{"Йи (ицзу)"} - Zyyy{"Неопределенная"} - } - Types{ - calendar{ - buddhist{"Буддистский календарь"} - chinese{"Китайский календарь"} - gregorian{"Григорианский календарь"} - hebrew{"Еврейский календарь"} - islamic{"Исламский календарь"} - islamic-civil{"Исламский гражданский календарь"} - japanese{"Японский календарь"} - } - } - Version{"1.3"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "H:mm:ss z", - "H:mm:ss z", - "H:mm:ss", - "H:mm", - "d MMMM yyyy 'г.'", - "d MMMM yyyy 'г.'", - "dd.MM.yyyy", - "dd.MM.yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "Вс", - "Пн", - "Вт", - "Ср", - "Чт", - "Пт", - "Сб", - } - narrow{ - "В", - "П", - "В", - "С", - "Ч", - "П", - "С", - } - wide{ - "воскресенье", - "понедельник", - "вторник", - "среда", - "четверг", - "пятница", - "суббота", - } - } - } - eras{ - abbreviated{ - "до н.э.", - "н.э.", - } - } - monthNames{ - format{ - abbreviated{ - "янв.", - "февр.", - "марта", - "апр.", - "мая", - "июня", - "июля", - "авг.", - "сент.", - "окт.", - "нояб.", - "дек.", - } - narrow{ - "Я", - "Ф", - "М", - "А", - "М", - "И", - "И", - "А", - "С", - "О", - "Н", - "Д", - } - wide{ - "января", - "февраля", - "марта", - "апреля", - "мая", - "июня", - "июля", - "августа", - "сентября", - "октября", - "ноября", - "декабря", - } - } - stand-alone{ - abbreviated{ - "янв.", - "февр.", - "март", - "апр.", - "май", - "июнь", - "июль", - "авг.", - "сент.", - "окт.", - "нояб.", - "дек.", - } - narrow{ - "Я", - "Ф", - "М", - "А", - "М", - "И", - "И", - "А", - "С", - "О", - "Н", - "Д", - } - wide{ - "Январь", - "Февраль", - "Март", - "Апрель", - "Май", - "Июнь", - "Июль", - "Август", - "Сентябрь", - "Октябрь", - "Ноябрь", - "Декабрь", - } - } - } - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ru.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ru.xml + */ +ru{ + AuxExemplarCharacters{"[i v x]"} + Countries{ + 001{"Всемирное"} + 002{"Африка"} + 005{"Южная Америка"} + 009{"Океания"} + 011{"Западная Африка"} + 013{"Центральная Америка"} + 014{"Восточная Африка"} + 015{"Северная Африка"} + 017{"Центральная Африка"} + 018{"Южная Африка [018]"} + 019{"Центральная и Южная Америка"} + 021{"Северная Америка"} + 029{"Карибы"} + 030{"Восточная Азия"} + 035{"Юго-Восточная Азия"} + 039{"Южная Европа"} + 053{"Австралия и Новая Зеландия"} + 054{"Меланезия"} + 057{"Микронезия"} + 061{"Полинезия"} + 062{"Юг Средней Азии"} + 142{"Азия"} + 145{"Ближний и Средний Восток"} + 150{"Европа"} + 151{"Восточная Европа"} + 154{"Северная Европа"} + 155{"Западная Европа"} + 830{"Нормандские острова"} + 833{"Мэн, остров"} + AD{"Андорра"} + AE{"Объединенные Арабские Эмираты"} + AF{"Афганистан"} + AG{"Антигуа и Барбуда"} + AI{"Ангуилла"} + AL{"Албания"} + AM{"Армения"} + AN{"Голландские Антильские Острова"} + AO{"Ангола"} + AQ{"Антарктида"} + AR{"Аргентина"} + AS{"Американское Самоа"} + AT{"Австрия"} + AU{"Австралия"} + AW{"Аруба"} + AX{"Аландские острова"} + AZ{"Азербайджан"} + BA{"Босния"} + BB{"Барбадос"} + BD{"Бангладеш"} + BE{"Бельгия"} + BF{"Буркина Фасо"} + BG{"Болгария"} + BH{"Бахрейн"} + BI{"Бурунди"} + BJ{"Бенин"} + BM{"Бермудские Острова"} + BN{"Бруней Даруссалам"} + BO{"Боливия"} + BR{"Бразилия"} + BS{"Багамские острова"} + BT{"Бутан"} + BV{"Остров Буве"} + BW{"Ботсвана"} + BY{"Беларусь"} + BZ{"Белиз"} + CA{"Канада"} + CC{"Кокосовые Острова (Киилинг)"} + CD{"Конго, Демократическая Республика"} + CF{"Центрально-Африканская Республика"} + CG{"Конго"} + CH{"Швейцария"} + CI{"Кот д’Ивуар"} + CK{"Острова Кука"} + CL{"Чили"} + CM{"Камерун"} + CN{"Китай"} + CO{"Колумбия"} + CR{"Коста-Рика"} + CS{"Сербия и Черногория"} + CU{"Куба"} + CV{"Острова Зеленого Мыса"} + CX{"Остров Рождества"} + CY{"Кипр"} + CZ{"Чешская Республика"} + DE{"Германия"} + DJ{"Джибути"} + DK{"Дания"} + DM{"Остров Доминика"} + DO{"Доминиканская Республика"} + DZ{"Алжир"} + EC{"Эквадор"} + EE{"Эстония"} + EG{"Египет"} + EH{"Западная Сахара"} + ER{"Эритрея"} + ES{"Испания"} + ET{"Эфиопия"} + FI{"Финляндия"} + FJ{"Фиджи"} + FK{"Фолклендские острова"} + FM{"Федеративное Государство Микронезия"} + FO{"Фарерские острова"} + FR{"Франция"} + GA{"Габон"} + GB{"Великобритания"} + GD{"Гренада"} + GE{"Грузия"} + GF{"Французская Гвиана"} + GH{"Гана"} + GI{"Гибралтар"} + GL{"Гренландия"} + GM{"Гамбия"} + GN{"Гвинея"} + GP{"Гваделупа"} + GQ{"Экваториальная Гвинея"} + GR{"Греция"} + GS{"Южная Джорджия и Южные Сандвичевы Острова"} + GT{"Гватемала"} + GU{"Гуам"} + GW{"Гвинея-Биссау"} + GY{"Гайана"} + HK{"Гонконг (Область с Особым Административным Управлением, Китай)"} + HM{"Острова Херд и Мак-Дональд"} + HN{"Гондурас"} + HR{"Хорватия"} + HT{"Гаити"} + HU{"Венгрия"} + ID{"Индонезия"} + IE{"Ирландия"} + IL{"Израиль"} + IN{"Индия"} + IO{"Британские Территории в Индийском Океане"} + IQ{"Ирак"} + IR{"Иран"} + IS{"Исландия"} + IT{"Италия"} + JM{"Ямайка"} + JO{"Иордания"} + JP{"Япония"} + KE{"Кения"} + KG{"Кыргызстан"} + KH{"Камбоджа"} + KI{"Кирибати"} + KM{"Коморские Острова"} + KN{"Сент-Киттс и Невис"} + KP{"Северная Корея"} + KR{"Южная Корея"} + KW{"Кувейт"} + KY{"Каймановы Острова"} + KZ{"Казахстан"} + LA{"Лаос"} + LB{"Ливан"} + LC{"Сент-Люсия"} + LI{"Лихтенштейн"} + LK{"Шри-Ланка"} + LR{"Либерия"} + LS{"Лесото"} + LT{"Литва"} + LU{"Люксембург"} + LV{"Латвия"} + LY{"Ливия"} + MA{"Марокко"} + MC{"Монако"} + MD{"Молдова"} + MG{"Мадагаскар"} + MH{"Маршалловы Острова"} + MK{"Македония"} + ML{"Мали"} + MM{"Мьянма"} + MN{"Монголия"} + MO{"Макао (Область с Особым Административным Управлением, Китай)"} + MP{"Северные Марианские Острова"} + MQ{"Мартиник"} + MR{"Мавритания"} + MS{"Монсеррат"} + MT{"Мальта"} + MU{"Маврикий"} + MV{"Мальдивы"} + MW{"Малави"} + MX{"Мексика"} + MY{"Малайзия"} + MZ{"Мозамбик"} + NA{"Намибия"} + NC{"Новая Каледония"} + NE{"Нигер"} + NF{"Остров Норфолк"} + NG{"Нигерия"} + NI{"Никарагуа"} + NL{"Нидерланды"} + NO{"Норвегия"} + NP{"Непал"} + NR{"Науру"} + NU{"Ниуе"} + NZ{"Новая Зеландия"} + OM{"Оман"} + PA{"Панама"} + PE{"Перу"} + PF{"Французская Полинезия"} + PG{"Папуа-Новая Гвинея"} + PH{"Филиппины"} + PK{"Пакистан"} + PL{"Польша"} + PM{"Сен-Пьер и Микелон"} + PN{"Питкерн"} + PR{"Пуэрто-Рико"} + PS{"Палестинская автономия"} + PT{"Португалия"} + PW{"Палау"} + PY{"Парагвай"} + QA{"Катар"} + QO{"Внешняя Океания"} + RE{"Реюньон"} + RO{"Румыния"} + RU{"Россия"} + RW{"Руанда"} + SA{"Саудовская Аравия"} + SB{"Соломоновы Острова"} + SC{"Сейшельские Острова"} + SD{"Судан"} + SE{"Швеция"} + SG{"Сингапур"} + SH{"Остров Святой Елены"} + SI{"Словения"} + SJ{"Свальбард и Ян-Майен"} + SK{"Словакия"} + SL{"Сьерра-Леоне"} + SM{"Сан-Марино"} + SN{"Сенегал"} + SO{"Сомали"} + SR{"Суринам"} + ST{"Сан-Томе и Принсипи"} + SV{"Сальвадор"} + SY{"Сирийская Арабская Республика"} + SZ{"Свазиленд"} + TC{"Острова Тёркс и Кайкос"} + TD{"Чад"} + TF{"Французские Южные Территории"} + TG{"Того"} + TH{"Таиланд"} + TJ{"Таджикистан"} + TK{"Токелау"} + TL{"Восточный Тимор"} + TM{"Туркменистан"} + TN{"Тунис"} + TO{"Тонга"} + TR{"Турция"} + TT{"Тринидад и Тобаго"} + TV{"Тувалу"} + TW{"Тайвань"} + TZ{"Танзания"} + UA{"Украина"} + UG{"Уганда"} + UM{"Внешние малые острова (США)"} + US{"Соединенные Штаты"} + UY{"Уругвай"} + UZ{"Узбекистан"} + VA{"Ватикан"} + VC{"Сент-Винсент и Гренадины"} + VE{"Венесуэла"} + VG{"Британские Виргинские Острова"} + VI{"Американские Виргинские Острова"} + VN{"Вьетнам"} + VU{"Вануату"} + WF{"Эллис и Футуна"} + WS{"Самоа"} + YE{"Йемен"} + YT{"Майотта"} + ZA{"Южная Африка"} + ZM{"Замбия"} + ZW{"Зимбабве"} + } + Currencies{ + ADP{ + "ADP", + "Андоррская песета", + } + AED{ + "AED", + "Дирхам (ОАЭ)", + } + AFA{ + "AFA", + "Афгани (1927-2002)", + } + AFN{ + "AFN", + "Афгани", + } + ALL{ + "lek", + "Албанский лек", + } + AMD{ + "dram", + "Армянский драм", + } + ANG{ + "NA f.", + "Нидерландский антильский гульден", + } + AOA{ + "AOA", + "Кванза", + } + AOK{ + "AOK", + "Кванза (1977-1990)", + } + AON{ + "AON", + "Новая кванза", + } + ARP{ + "ARP", + "Аргентинское песо (1983-1985)", + } + ARS{ + "Arg$", + "Аргентинское песо", + } + ATS{ + "ATS", + "Австрийский шиллинг", + } + AUD{ + "$A", + "Австралийский доллар", + } + AWG{ + "AWG", + "Арубанский гульден", + } + AZM{ + "AZM", + "Азербайджанский манат", + } + BAM{ + "BAM", + "Конвертируемая марка Боснии и Герцеговины", + } + BBD{ + "BDS$", + "Барбадосский доллар", + } + BDT{ + "Tk", + "Бангладешская така", + } + BEC{ + "BEC", + "Бельгийский франк (конвертируемый)", + } + BEF{ + "BF", + "Бельгийский франк", + } + BGL{ + "lev", + "Лев", + } + BGN{ + "BGN", + "Болгарский лев", + } + BHD{ + "BD", + "Бахрейнский динар", + } + BIF{ + "Fbu", + "Бурундийский франк", + } + BMD{ + "Ber$", + "Бермудский доллар", + } + BND{ + "BND", + "Брунейский доллар", + } + BOB{ + "Bs", + "Боливиано", + } + BOP{ + "BOP", + "Боливийское песо", + } + BRL{ + "R$", + "Бразильский реал", + } + BRR{ + "BRR", + "Крузейро реал", + } + BSD{ + "BSD", + "Багамский доллар", + } + BTN{ + "Nu", + "Нгултрум", + } + BUK{ + "BUK", + "Джа", + } + BWP{ + "BWP", + "Ботсванская пула", + } + BYB{ + "BYB", + "Белорусский рубль (1994-1999)", + } + BYR{ + "Rbl", + "Белорусский рубль", + } + BZD{ + "BZ$", + "Белизский доллар", + } + CAD{ + "Can$", + "Канадский доллар", + } + CDF{ + "CDF", + "Конголезский франк", + } + CHF{ + "SwF", + "Швейцарский франк", + } + CLP{ + "Ch$", + "Чилийское песо", + } + CNY{ + "Y", + "Китайский юань", + } + COP{ + "Col$", + "Колумбийское песо", + } + CRC{ + "C", + "Костариканский колон", + } + CSD{ + "CSD", + "Сербский динар", + } + CUP{ + "CUP", + "Кубинское песо", + } + CVE{ + "CVEsc", + "Эскудо Кабо-Верде", + } + CYP{ + "£C", + "Кипрский фунт", + } + CZK{ + "CZK", + "Чешская крона", + } + DEM{ + "DEM", + "Немецкая марка", + } + DJF{ + "DF", + "Франк Джибути", + } + DKK{ + "DKr", + "Датская крона", + } + DOP{ + "RD$", + "Доминиканское песо", + } + DZD{ + "DA", + "Алжирский динар", + } + ECS{ + "ECS", + "Эквадорский сукре", + } + EEK{ + "EEK", + "Эстонская крона", + } + EGP{ + "EGP", + "Египетский фунт", + } + EQE{ + "EQE", + "Эквеле", + } + ERN{ + "ERN", + "Накфа", + } + ESA{ + "ESA", + "Испанская песета (А)", + } + ESP{ + "ESP", + "Испанская песета", + } + ETB{ + "Br", + "Эфиопский быр", + } + EUR{ + "€", + "Евро", + } + FIM{ + "FIM", + "Финская марка", + } + FJD{ + "F$", + "Доллар Фиджи", + } + FKP{ + "FKP", + "Фунт Фолклендских островов", + } + FRF{ + "FRF", + "Французский франк", + } + GBP{ + "£", + "Английский фунт стерлингов", + } + GEK{ + "GEK", + "Грузинский купон", + } + GEL{ + "lari", + "Грузинский лари", + } + GHC{ + "GHC", + "Ганский седи", + } + GIP{ + "GIP", + "Гибралтарский фунт", + } + GMD{ + "GMD", + "Гамбийский даласи", + } + GNF{ + "GF", + "Гвинейский франк", + } + GRD{ + "GRD", + "Греческая драхма", + } + GTQ{ + "Q", + "Гватемальский кетсаль", + } + GWP{ + "GWP", + "Песо Гвинеи-Бисау", + } + GYD{ + "G$", + "Гайанский доллар", + } + HKD{ + "HK$", + "Гонконгский доллар", + } + HNL{ + "L", + "Гондурасская лемпира", + } + HRD{ + "HRD", + "Хорватский динар", + } + HRK{ + "HRK", + "Хорватская куна", + } + HTG{ + "HTG", + "Гаитянский гурд", + } + HUF{ + "Ft", + "Венгерский форинт", + } + IDR{ + "Rp", + "Индонезийская рупия", + } + IEP{ + "IR£", + "Ирландский фунт", + } + ILS{ + "ILS", + "Новый израильский шекель", + } + INR{ + "INR", + "Индийская рупия", + } + IQD{ + "ID", + "Иракский динар", + } + IRR{ + "RI", + "Иранский риал", + } + ISK{ + "ISK", + "Исландская крона", + } + ITL{ + "₤", + "Итальянская лира", + } + JMD{ + "J$", + "Ямайский доллар", + } + JOD{ + "JD", + "Иорданский динар", + } + JPY{ + "¥", + "Японская иена", + } + KES{ + "K Sh", + "Кенийский шиллинг", + } + KGS{ + "som", + "Сом (киргизский)", + } + KHR{ + "CR", + "Камбоджийский риель", + } + KMF{ + "CF", + "Франк Коморских островов", + } + KPW{ + "KPW", + "Северо-корейская вона", + } + KRW{ + "KRW", + "Вона Республики Кореи", + } + KWD{ + "KD", + "Кувейтский динар", + } + KYD{ + "KYD", + "Доллар Каймановых островов", + } + KZT{ + "T", + "Тенге (казахский)", + } + LAK{ + "LAK", + "Кип ЛНДР", + } + LBP{ + "LL", + "Ливанский фунт", + } + LKR{ + "SL Re", + "Шри-Ланкийская рупия", + } + LRD{ + "LRD", + "Либерийский доллар", + } + LSL{ + "M", + "Лоти", + } + LTL{ + "LTL", + "Литовский лит", + } + LUF{ + "LUF", + "Люксембургский франк", + } + LVL{ + "LVL", + "Латвийский лат", + } + LYD{ + "LD", + "Ливийский динар", + } + MAD{ + "MAD", + "Марокканский дирхам", + } + MDL{ + "MDL", + "Молдавский лей", + } + MGF{ + "MGF", + "Малагасийский франк", + } + MKD{ + "MDen", + "Македонский динар", + } + MNT{ + "Tug", + "Монгольский тугрик", + } + MRO{ + "UM", + "Мавританская угия", + } + MTL{ + "Lm", + "Мальтийская лира", + } + MUR{ + "MUR", + "Маврикийская рупия", + } + MVR{ + "MVR", + "Мальдивская руфия", + } + MWK{ + "MK", + "Квача (малавийская)", + } + MXN{ + "MEX$", + "Мексиканское новое песо", + } + MYR{ + "RM", + "Малайзийский ринггит", + } + MZM{ + "Mt", + "Мозамбикский метикал", + } + NAD{ + "N$", + "Доллар Намибии", + } + NGN{ + "NGN", + "Нигерийская найра", + } + NIO{ + "NIO", + "Золотая кордоба", + } + NLG{ + "NLG", + "Нидерландский гульден", + } + NOK{ + "NKr", + "Норвежская крона", + } + NPR{ + "Nrs", + "Непальская рупия", + } + NZD{ + "$NZ", + "Новозеландский доллар", + } + OMR{ + "RO", + "Оманский риал", + } + PAB{ + "PAB", + "Панамское бальбоа", + } + PEN{ + "PEN", + "Перуанский новый соль", + } + PGK{ + "PGK", + "Кина", + } + PHP{ + "PHP", + "Филиппинское песо", + } + PKR{ + "Pra", + "Пакистанская рупия", + } + PLN{ + "Zl", + "Польский злотый", + } + PLZ{ + "PLZ", + "Злотый", + } + PTE{ + "PTE", + "Португальское эскудо", + } + PYG{ + "PYG", + "Парагвайский гуарани", + } + QAR{ + "QR", + "Катарский риал", + } + ROL{ + "leu", + "Румынский лей", + } + RUB{ + "руб.", + "Российский рубль", + } + RUR{ + "р.", + "Российский рубль (1991-1998)", + } + RWF{ + "RWF", + "Франк Руанды", + } + SAR{ + "SRl", + "Саудовский риал", + } + SBD{ + "SI$", + "Доллар Соломоновых островов", + } + SCR{ + "SR", + "Сейшельская рупия", + } + SDD{ + "SDD", + "Суданский динар", + } + SEK{ + "SKr", + "Шведская крона", + } + SGD{ + "S$", + "Сингапурский доллар", + } + SHP{ + "SHP", + "Фунт острова Святой Елены", + } + SIT{ + "SIT", + "Словенский толар", + } + SKK{ + "Sk", + "Словацкая крона", + } + SLL{ + "SLL", + "Леоне", + } + SOS{ + "So. Sh.", + "Сомалийский шиллинг", + } + SRG{ + "Sf", + "Суринамский гульден", + } + STD{ + "Db", + "Добра", + } + SVC{ + "SVC", + "Сальвадорский колон", + } + SYP{ + "LS", + "Сирийский фунт", + } + SZL{ + "E", + "Свазилендский лилангени", + } + THB{ + "THB", + "Таиландский бат", + } + TJR{ + "TJR", + "Таджикский рубль", + } + TJS{ + "TJS", + "Таджикский сомони", + } + TMM{ + "TMM", + "Туркменский манат", + } + TND{ + "TND", + "Тунисский динар", + } + TOP{ + "T$", + "Паанга", + } + TPE{ + "TPE", + "Тиморское эскудо", + } + TRL{ + "TL", + "Турецкая лира", + } + TRY{ + "TRY", + "Новая турецкая лира", + } + TTD{ + "TT$", + "Доллар Тринидада и Тобаго", + } + TWD{ + "NT$", + "Новый тайваньский доллар", + } + TZS{ + "T Sh", + "Танзанийский шиллинг", + } + UAH{ + "грн.", + "Украинская гривна", + } + UAK{ + "UAK", + "Карбованец (украинский)", + } + UGS{ + "UGS", + "Угандийский шиллинг", + } + USD{ + "US$", + "Доллар США", + } + UYP{ + "UYP", + "Уругвайское песо", + } + UZS{ + "UZS", + "Узбекский сум", + } + VEB{ + "Be", + "Венесуэльский боливар", + } + VND{ + "VND", + "Вьетнамский донг", + } + VUV{ + "VT", + "Вату", + } + WST{ + "WST", + "Тала", + } + XAF{ + "XAF", + "Франк КФА ВЕАС", + } + XAG{ + "XAG", + "Серебро", + } + XAU{ + "XAU", + "Золото", + } + XCD{ + "EC$", + "Восточно-карибский доллар", + } + XDR{ + "XDR", + "СДР (специальные права заимствования)", + } + XEU{ + "XEU", + "ЭКЮ (единица европейской валюты)", + } + XOF{ + "XOF", + "Франк КФА ВСЕАО", + } + XPD{ + "XPD", + "Палладий", + } + XPF{ + "CFPF", + "Франк КФП", + } + XPT{ + "XPT", + "Платина", + } + YDD{ + "YDD", + "Йеменский динар", + } + YER{ + "YRl", + "Йеменский риал", + } + YUN{ + "YUN", + "Югославский динар", + } + ZAR{ + "R", + "Южноафриканский рэнд", + } + ZMK{ + "ZMK", + "Квача (замбийская)", + } + ZRN{ + "ZRN", + "Новый заир", + } + ZRZ{ + "ZRZ", + "Заир", + } + ZWD{ + "Z$", + "Доллар Зимбабве", + } + } + ExemplarCharacters{"[а-е ё ж-я]"} + Keys{ + calendar{"Календарь"} + collation{"Сортировка"} + currency{"Валюта"} + } + Languages{ + aa{"афар"} + ab{"абхазский"} + ace{"ачехский"} + ach{"ачоли"} + ada{"адангме"} + ady{"адыгейский"} + ae{"авестийский"} + af{"африкаанс"} + afa{"афразийские (другие)"} + afh{"африхили"} + akk{"аккадский"} + ale{"алеутский"} + alg{"алгонкинские языки"} + alt{"южноалтайский"} + am{"амхарский"} + an{"арагонский"} + ang{"староанглийский"} + apa{"апачский"} + ar{"арабский"} + arc{"арамейский"} + arn{"арауканский"} + art{"искусственные (другие)"} + arw{"аравакский"} + as{"ассамский"} + ast{"астурийский"} + ath{"атапачские языки"} + aus{"австралийские языки"} + av{"аварский"} + awa{"авадхи"} + ay{"аймара"} + az{"азербайджанский"} + ba{"башкирский"} + bad{"банда"} + bai{"бамилеке языки"} + bal{"белуджский"} + ban{"балийский"} + bas{"баса"} + bat{"балтийские (другие)"} + be{"белорусский"} + bej{"беджа"} + bem{"бемба"} + ber{"берберский"} + bg{"болгарский"} + bh{"бихари"} + bho{"бходжпури"} + bi{"бислама"} + bik{"бикольский"} + bin{"бини"} + bla{"сиксика"} + bm{"бамбарийский"} + bn{"бенгальский"} + bnt{"банту (другие)"} + bo{"тибетский"} + br{"бретонский"} + bra{"брауи"} + bs{"боснийский"} + btk{"батакский"} + bua{"бурятский"} + bug{"бугийский"} + ca{"каталанский"} + cad{"каддо"} + cai{"Центральной Америки индейцев (другие)"} + car{"кариб"} + cau{"кавказские (другие)"} + ce{"чеченский"} + ceb{"кебуано"} + ch{"чаморро"} + chb{"чибча"} + chg{"чагатайский"} + chk{"чукотский"} + chm{"марийский (черемисский)"} + chn{"чинук жаргон"} + cho{"чоктав"} + chp{"чипеваян"} + chr{"чероки"} + chy{"чейенн"} + co{"корсиканский"} + cop{"коптский"} + cpe{"англо-креольские и пиджины (другие)"} + cpf{"франко-креольские и пиджины (другие)"} + cpp{"португало-креольские и пиджины (другие)"} + cr{"криийский"} + crp{"креольские и пиджины (другие)"} + cs{"чешский"} + csb{"кашубианский"} + cu{"церковнославянский"} + cus{"кушитские (другие)"} + cv{"чувашский"} + cy{"валлийский"} + da{"датский"} + dak{"дакота"} + de{"немецкий"} + del{"делаварский"} + den{"слэйви"} + din{"динка"} + doi{"догри"} + dra{"дравидийские (другие)"} + dua{"дуала"} + dum{"нидерландский средневековый"} + dyu{"диула (дьюла)"} + dz{"дзонг-кэ"} + ee{"эве"} + efi{"эфик"} + egy{"древнеегипетский"} + eka{"экаджук"} + el{"греческий"} + elx{"эламский"} + en{"английский"} + enm{"среднеанглийский"} + eo{"эсперанто"} + es{"испанский"} + et{"эстонский"} + eu{"баскский"} + ewo{"эвондо"} + fa{"персидский"} + fan{"фанг"} + fat{"фанти"} + fi{"финский"} + fil{"филиппинский"} + fiu{"финно-угорские (другие)"} + fj{"фиджи"} + fo{"фарерский"} + fon{"фон"} + fr{"французский"} + frm{"среднефранцузский"} + fro{"старофранцузский"} + fur{"фриуланский"} + fy{"фризский"} + ga{"ирландский"} + gaa{"га"} + gay{"гайо"} + gba{"гбая"} + gd{"гэльский"} + gem{"германские (другие)"} + gez{"геэз"} + gil{"гильбертский"} + gl{"галисийский"} + gmh{"средневерхненемецкий"} + gn{"гуарани"} + goh{"староверхненемецкий"} + gon{"гонди"} + got{"готский"} + grb{"гребо"} + grc{"древнегреческий"} + gu{"гуджарати"} + gv{"мэнский"} + gwi{"гвичин"} + ha{"хауса"} + hai{"хайда"} + haw{"гавайский"} + he{"иврит"} + hi{"хинди"} + hil{"хилигайнон"} + him{"химачали"} + hit{"хетский"} + hmn{"хмонг"} + hr{"хорватский"} + ht{"гаитянский"} + hu{"венгерский"} + hup{"Хупа"} + hy{"армянский"} + hz{"гереро"} + ia{"интерлингва"} + iba{"ибанский"} + id{"индонезийский"} + ie{"интерлингве"} + ig{"игбо"} + ijo{"иджо"} + ik{"инупиак"} + ilo{"илоко"} + inc{"индийские (другие)"} + ine{"индоевропейские (другие)"} + inh{"ингушский"} + ira{"иранские (другие)"} + iro{"ирокезские языки"} + is{"исландский"} + it{"итальянский"} + iu{"инуктитут"} + ja{"японский"} + jbo{"ложбан"} + jpr{"еврейско-персидский"} + jrb{"еврейско-арабский"} + jv{"яванский"} + ka{"грузинский"} + kaa{"каракалпакский"} + kab{"кабильский"} + kac{"качин"} + kam{"камба"} + kar{"каренский"} + kaw{"кави"} + kbd{"кабардинский"} + kg{"конго"} + kha{"кхаси"} + khi{"койсанские (другие)"} + kho{"хотанский"} + ki{"кикуйю"} + kj{"кунама"} + kk{"казахский"} + kl{"эскимосский (гренландский)"} + km{"кхмерский"} + kmb{"кимбундийский"} + kn{"каннада"} + ko{"корейский"} + kok{"конкани"} + kpe{"кпелле"} + kr{"канури"} + krc{"карачаево-балкарский"} + kro{"кру"} + kru{"курух"} + ks{"кашмири"} + ku{"курдский"} + kum{"кумыкский"} + kut{"кутенаи"} + kv{"коми"} + kw{"корнийский"} + ky{"киргизский"} + la{"латинский"} + lad{"ладино"} + lah{"лахнда"} + lam{"ламба"} + lb{"люксембургский"} + lez{"лезгинский"} + lg{"ганда"} + ln{"лингала"} + lo{"лаосский"} + lol{"монго"} + loz{"лози"} + lt{"литовский"} + lu{"луба-катанга"} + lua{"луба-лулуа"} + lui{"луисеньо"} + lun{"лунда"} + luo{"луо (Кения и Танзания)"} + lv{"латышский"} + mad{"мадурский"} + mag{"магахи"} + mai{"майтхили"} + mak{"макассарский"} + man{"мандинго"} + map{"австронезийские (другие)"} + mas{"масаи"} + mdf{"мокша"} + mdr{"мандарский"} + men{"менде"} + mg{"малагасийский"} + mga{"среднеирландский"} + mh{"маршальский"} + mi{"маори"} + mic{"микмак"} + min{"минангкабау"} + mis{"смешанные (другие)"} + mk{"македонский"} + mkh{"монкхмерские (другие)"} + ml{"малаялам"} + mn{"монгольский"} + mnc{"маньчжурский"} + mni{"манипурский"} + mno{"манобо языки"} + mo{"молдавский"} + moh{"мохаук"} + mos{"моей"} + mr{"маратхи"} + ms{"малайский"} + mt{"мальтийский"} + mul{"разных семей языки"} + mun{"мунда языки"} + mus{"крик"} + mwr{"марвари"} + my{"бирманский"} + myn{"майя языки"} + myv{"эрзя"} + na{"науру"} + nah{"ацтекский"} + nai{"Северной Америки индейцев (другие)"} + nap{"неаполитанский"} + nd{"ндебели (северный)"} + nds{"нижнегерманский; нижнесаксонский"} + ne{"непальский"} + new{"неварский"} + nic{"нигер-кордофанские (другие)"} + niu{"ниуэ"} + nl{"голландский"} + nn{"новонорвежский"} + no{"норвежский"} + nog{"ногайский"} + non{"старонорвежский"} + nr{"ндебели (южный)"} + nso{"сото северный"} + nub{"нубийские языки"} + nv{"навахо"} + nwc{"невари (классический)"} + ny{"ньянджа"} + nym{"ньямвези"} + nyn{"ньянколе"} + nyo{"ньоро"} + nzi{"нзима"} + oc{"окситанский"} + oj{"оджибва"} + om{"оромо"} + or{"ория"} + os{"осетинский"} + osa{"оседжи"} + ota{"старотурецкий"} + oto{"отомангские языки"} + pa{"панджаби (пенджаби)"} + paa{"папуасско-австралийские (другие)"} + pag{"пангасинан"} + pal{"пехлевийский"} + pam{"пампанга"} + pap{"папьяменто"} + pau{"палау"} + peo{"староперсидский"} + phi{"филиппинские (другие)"} + phn{"финикийский"} + pi{"пали"} + pl{"польский"} + pon{"понапе"} + pra{"пракриты языки"} + pro{"старопровансальский"} + ps{"пашто (пушту)"} + pt{"португальский"} + qu{"кечуа"} + raj{"раджастхани"} + rar{"раротонганский"} + rm{"ретороманский"} + rn{"рунди"} + ro{"румынский"} + roa{"романские (другие)"} + rom{"цыганский"} + ru{"русский"} + rw{"киньяруанда"} + sa{"санскрит"} + sad{"сандаве"} + sah{"якутский"} + sai{"южной америки индейцев (другие)"} + sal{"салишские языки"} + sam{"самаритянский арамейский"} + sc{"сардинский"} + sd{"синдхи"} + se{"саамский (северный)"} + sel{"селькупский"} + sem{"семитские (другие)"} + sg{"санго"} + sga{"староирландский"} + sh{"сербскохорватский"} + shn{"шанский"} + si{"сингальский"} + sid{"сидама"} + sio{"сиу языки"} + sit{"синотибетские (другие)"} + sk{"словацкий"} + sl{"словенский"} + sla{"славянские (другие)"} + sm{"самоанский"} + sma{"саамский (южный)"} + smi{"саамские языки"} + sn{"шона"} + snk{"сонинкийский"} + so{"сомали"} + sog{"согдийский"} + son{"cонгаи"} + sq{"албанский"} + sr{"сербский"} + srr{"серер"} + ss{"свази"} + ssa{"нило-сахарские (другие)"} + st{"сото южный"} + su{"сунданский"} + suk{"сукума"} + sus{"сусу"} + sux{"шумерский"} + sv{"шведский"} + sw{"суахили"} + syr{"сирийский"} + ta{"тамильский"} + tai{"тайские (другие)"} + te{"телугу"} + ter{"терено"} + tg{"таджикский"} + th{"тайский"} + ti{"тигринья"} + tig{"тигре"} + tiv{"тиви"} + tk{"туркменский"} + tkl{"токелайский"} + tl{"тагалог"} + tlh{"клингон"} + tli{"тлингит"} + tmh{"тамашек"} + tn{"тсвана"} + to{"тонга"} + tog{"тонга (ньяса)"} + tr{"турецкий"} + ts{"тсонга"} + tsi{"цимшиан"} + tt{"татарский"} + tum{"тумбука"} + tup{"тупи"} + tut{"алтайские (другие)"} + tw{"тви"} + ty{"таитянский"} + tyv{"тувинский"} + udm{"удмуртский"} + ug{"уйгурский"} + uga{"угаритский"} + uk{"украинский"} + umb{"умбунду"} + und{"неидентифицированный"} + ur{"урду"} + uz{"узбекский"} + vai{"ваи"} + ve{"венда"} + vi{"вьетнамский"} + vo{"волапюк"} + vot{"удмуртский (вотяцкий)"} + wak{"вакашские языки"} + wal{"воламо"} + war{"варай"} + was{"вашо"} + wen{"лужицкие языки"} + wo{"волоф"} + xal{"калмыцкий"} + xh{"ксоза"} + yao{"яо"} + yap{"яп"} + yi{"идиш"} + yo{"йоруба"} + za{"чжуань"} + zap{"сапотекский"} + zen{"зенагский"} + zh{"китайский"} + znd{"занди"} + zu{"зулу"} + zun{"зуньи"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + NumberPatterns{ + "#,##0.###", + "#,##0.00¤", + "#,##0%", + "#E0", + } + Scripts{ + Arab{"Арабская"} + Armn{"Армянская"} + Beng{"Бенгальская"} + Bopo{"Бопомофо"} + Brai{"Брайля"} + Buhd{"Бухид"} + Cans{"Унифицированные Символы Канадских Аборигенов"} + Cher{"Чероки"} + Copt{"Коптская"} + Cprt{"Кипрская"} + Cyrl{"Кириллица"} + Deva{"Деванагари"} + Dsrt{"Дезерет"} + Ethi{"Эфиопская"} + Geor{"Грузинская"} + Goth{"Готская"} + Grek{"Греческая"} + Gujr{"Гуджарати"} + Guru{"Гурмукхи"} + Hang{"Хангул"} + Hano{"Хануну"} + Hebr{"Иврит"} + Hira{"Хирагана"} + Ital{"Староитальянская"} + Kana{"Катакана"} + Khmr{"Кхмерская"} + Knda{"Каннада"} + Laoo{"Лаосская"} + Latn{"Латиница"} + Limb{"Лимбу"} + Linb{"Линейная Б"} + Mlym{"Малаяльская"} + Mong{"Монгольская"} + Mymr{"Майанмарская"} + Ogam{"Огамическая"} + Orya{"Ория"} + Osma{"Османская"} + Qaai{"Унаследованная"} + Runr{"Руническая"} + Shaw{"Алфавит Шоу"} + Sinh{"Сингальская"} + Syrc{"Сирийская"} + Tagb{"Тагбанва"} + Taml{"Тамильская"} + Telu{"Телугу"} + Tglg{"Тагалог"} + Thaa{"Таана"} + Thai{"Тайская"} + Tibt{"Тибетская"} + Ugar{"Угаритская"} + Xpeo{"Староперсидская"} + Xsux{"Шумеро-аккадская клинопись"} + Yiii{"Йи (ицзу)"} + Zyyy{"Неопределенная"} + } + Types{ + calendar{ + buddhist{"Буддийский календарь"} + chinese{"Китайский календарь"} + gregorian{"Григорианский календарь"} + hebrew{"Еврейский календарь"} + islamic{"Исламский календарь"} + islamic-civil{"Исламский гражданский календарь"} + japanese{"Японский календарь"} + } + } + Version{"1.90"} + calendar{ + gregorian{ + DateTimePatterns{ + "H:mm:ss z", + "H:mm:ss z", + "H:mm:ss", + "H:mm", + "d MMMM yyyy\u00a0'г.'", + "d MMMM yyyy\u00a0'г.'", + "dd.MM.yyyy", + "dd.MM.yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Вс", + "Пн", + "Вт", + "Ср", + "Чт", + "Пт", + "Сб", + } + wide{ + "воскресенье", + "понедельник", + "вторник", + "среда", + "четверг", + "пятница", + "суббота", + } + } + stand-alone{ + narrow{ + "В", + "П", + "В", + "С", + "Ч", + "П", + "С", + } + } + } + eras{ + abbreviated{ + "до н.э.", + "н.э.", + } + } + fields{ + day{ + dn{"День"} + } + weekday{ + dn{"День недели"} + } + } + monthNames{ + format{ + abbreviated{ + "янв.", + "февр.", + "марта", + "апр.", + "мая", + "июня", + "июля", + "авг.", + "сент.", + "окт.", + "нояб.", + "дек.", + } + narrow{ + "Я", + "Ф", + "М", + "А", + "М", + "И", + "И", + "А", + "С", + "О", + "Н", + "Д", + } + wide{ + "января", + "февраля", + "марта", + "апреля", + "мая", + "июня", + "июля", + "августа", + "сентября", + "октября", + "ноября", + "декабря", + } + } + stand-alone{ + abbreviated{ + "янв.", + "февр.", + "март", + "апр.", + "май", + "июнь", + "июль", + "авг.", + "сент.", + "окт.", + "нояб.", + "дек.", + } + narrow{ + "Я", + "Ф", + "М", + "А", + "М", + "И", + "И", + "А", + "С", + "О", + "Н", + "Д", + } + wide{ + "Январь", + "Февраль", + "Март", + "Апрель", + "Май", + "Июнь", + "Июль", + "Август", + "Сентябрь", + "Октябрь", + "Ноябрь", + "Декабрь", + } + } + } + quarters{ + format{ + abbreviated{ + "1-й кв.", + "2-й кв.", + "3-й кв.", + "4-й кв.", + } + wide{ + "1-й квартал", + "2-й квартал", + "3-й квартал", + "4-й квартал", + } + } + } + } + hebrew{ + monthNames{ + format{ + abbreviated{ + "Тишрей", + "Хешван", + "Кислев", + "Тевет", + "Шеват", + "Adar I", + "Адар", + "Нисан", + "Ияр", + "Сиван", + "Таммуз", + "Ав", + "Элул", + } + wide{ + "Тишрей", + "Хешван", + "Кислев", + "Тевет", + "Шеват", + "Adar I", + "Адар", + "Нисан", + "Ияр", + "Сиван", + "Таммуз", + "Ав", + "Элул", + } + } + } + } + islamic{ + monthNames{ + format{ + abbreviated{ + "Мухаррам", + "Сафар", + "Раби-уль-авваль", + "Раби-уль-ахир", + "Джумад-уль-авваль", + "Джумад-уль-ахир", + "Раджаб", + "Шаабан", + "Рамадан", + "Шавваль", + "Зуль-Каада", + "Зуль-Хиджжа", + } + wide{ + "Мухаррам", + "Сафар", + "Раби-уль-авваль", + "Раби-уль-ахир", + "Джумад-уль-авваль", + "Джумад-уль-ахир", + "Раджаб", + "Шаабан", + "Рамадан", + "Шавваль", + "Зуль-Каада", + "Зуль-Хиджжа", + } + } + } + } + persian{ + DateTimePatterns{ + "H:mm:ss z", + "H:mm:ss z", + "H:mm:ss", + "Эсфанд", + "d MMMM yyyy\u00a0'г.'", + "d MMMM yyyy\u00a0'г.'", + "dd.MM.yyyy", + "dd.MM.yy", + "{1} {0}", + } + monthNames{ + format{ + abbreviated{ + "Фарвардин", + "Ордибехешт", + "Хордад", + "Тир", + "Мордад", + "Шахривер", + "Мехр", + "Абан", + "Азер", + "Дей", + "Бахман", + "Эсфанд", + } + wide{ + "Фарвардин", + "Ордибехешт", + "Хордад", + "Тир", + "Мордад", + "Шахривер", + "Мехр", + "Абан", + "Азер", + "Дей", + "Бахман", + "Эсфанд", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"“"} + alternateQuotationStart{"„"} + quotationEnd{"»"} + quotationStart{"«"} + } + layout{ + /** + * Used for figuring out the casing of characters in a list. + */ + casing{"titlecase-firstword"} + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Africa:Bamako"{ + ec{"Бамако"} + } + "Africa:Ceuta"{ + ec{"Сеута"} + } + "Africa:Kinshasa"{ + ec{"Киншаса"} + } + "Africa:Lubumbashi"{ + ec{"Лубумбаши"} + } + "Africa:Timbuktu"{ + ec{"Тимбукту"} + } + "America:Adak"{ + ec{"Адак, о-в"} + } + "America:Anchorage"{ + ec{"Анкоридж"} + } + "America:Araguaina"{ + ec{"Арагуаина"} + } + "America:Argentina:ComodRivadavia"{ + ec{"Комодоро-Ривадавия"} + } + "America:Argentina:La_Rioja"{ + ec{"Ла-Риоха"} + } + "America:Argentina:Rio_Gallegos"{ + ec{"Рио-Гальегос"} + } + "America:Argentina:San_Juan"{ + ec{"Сан-Хуан"} + } + "America:Argentina:Tucuman"{ + ec{"Тукуман"} + } + "America:Argentina:Ushuaia"{ + ec{"Ушуая"} + } + "America:Bahia"{ + ec{"Баия"} + } + "America:Belem"{ + ec{"Белен"} + } + "America:Boa_Vista"{ + ec{"Боа-Виста"} + } + "America:Boise"{ + ec{"Бойсе"} + } + "America:Buenos_Aires"{ + ec{"Буэнос-Айрес"} + } + "America:Cambridge_Bay"{ + ec{"Кеймбридж-Бей"} + } + "America:Campo_Grande"{ + ec{"Кампу-Гранди"} + } + "America:Cancun"{ + ec{"Канкун"} + } + "America:Catamarca"{ + ec{"Катамарка"} + } + "America:Chicago"{ + ec{"Чикаго"} + } + "America:Chihuahua"{ + ec{"Чиуауа"} + } + "America:Coral_Harbour"{ + ec{"Корал-Харбор"} + } + "America:Cordoba"{ + ec{"Кордова"} + } + "America:Cuiaba"{ + ec{"Куяба"} + } + "America:Danmarkshavn"{ + ec{"Денмарксхавн"} + } + "America:Dawson"{ + ec{"Доусон"} + } + "America:Dawson_Creek"{ + ec{"Досон-Крик"} + } + "America:Denver"{ + ec{"Денвер"} + } + "America:Detroit"{ + ec{"Детройт"} + } + "America:Edmonton"{ + ec{"Эдмонтон"} + } + "America:Eirunepe"{ + ec{"Эйрунепе"} + } + "America:Fortaleza"{ + ec{"Форталеза"} + } + "America:Glace_Bay"{ + ec{"Глейс-Бей"} + } + "America:Godthab"{ + ec{"Готхоб"} + } + "America:Goose_Bay"{ + ec{"Гус-Бей"} + } + "America:Guayaquil"{ + ec{"Гуаякиль"} + } + "America:Halifax"{ + ec{"Галифакс"} + } + "America:Hermosillo"{ + ec{"Эрмосильо"} + } + "America:Indiana:Knox"{ + ec{"Нокс"} + } + "America:Indiana:Marengo"{ + ec{"Маренго"} + } + "America:Indiana:Petersburg"{ + ec{"Петерсбург"} + } + "America:Indiana:Vevay"{ + ec{"Вивэй"} + } + "America:Indiana:Vincennes"{ + ec{"Винсенс"} + } + "America:Indianapolis"{ + ec{"Индианаполис"} + } + "America:Inuvik"{ + ec{"Инувик"} + } + "America:Iqaluit"{ + ec{"Икалуит"} + } + "America:Jujuy"{ + ec{"Жужуй"} + } + "America:Juneau"{ + ec{"Джуно"} + } + "America:Kentucky:Monticello"{ + ec{"Монтиселло"} + } + "America:Los_Angeles"{ + ec{"Лос-Анджелес"} + } + "America:Louisville"{ + ec{"Луисвилл"} + } + "America:Maceio"{ + ec{"Масейо"} + } + "America:Manaus"{ + ec{"Манаус"} + } + "America:Mazatlan"{ + ec{"Масатлан"} + } + "America:Mendoza"{ + ec{"Мендоса"} + } + "America:Menominee"{ + ec{"Меномини"} + } + "America:Merida"{ + ec{"Мерида"} + } + "America:Mexico_City"{ + ec{"Мехико"} + } + "America:Monterrey"{ + ec{"Монтеррей"} + } + "America:Montreal"{ + ec{"Монреаль"} + } + "America:New_York"{ + ec{"Нью-Йорк"} + } + "America:Nipigon"{ + ec{"Нипигон"} + } + "America:Nome"{ + ec{"Ном"} + } + "America:Noronha"{ + ec{"Норонха"} + } + "America:North_Dakota:Center"{ + ec{"Северная Дакота - Центр"} + } + "America:Pangnirtung"{ + ec{"Пангниртанг"} + } + "America:Phoenix"{ + ec{"Финикс"} + } + "America:Porto_Velho"{ + ec{"Порту-Велью"} + } + "America:Rainy_River"{ + ec{"Рейни-Ривер"} + } + "America:Rankin_Inlet"{ + ec{"Ранкин-Инлет"} + } + "America:Recife"{ + ec{"Ресифи"} + } + "America:Regina"{ + ec{"Реджайна"} + } + "America:Rio_Branco"{ + ec{"Риу-Бранку"} + } + "America:Santiago"{ + ec{"Сантьяго"} + } + "America:Sao_Paulo"{ + ec{"Сан-Паулу"} + } + "America:Scoresbysund"{ + ec{"Скорсбисунн"} + } + "America:Shiprock"{ + ec{"Шипрок"} + } + "America:St_Johns"{ + ec{"Сент-Джонс"} + } + "America:Swift_Current"{ + ec{"Свифт-Карент"} + } + "America:Thule"{ + ec{"Туле"} + } + "America:Thunder_Bay"{ + ec{"Тандер-Бей"} + } + "America:Tijuana"{ + ec{"Тихуана"} + } + "America:Toronto"{ + ec{"Торонто"} + } + "America:Vancouver"{ + ec{"Ванкувер"} + } + "America:Whitehorse"{ + ec{"Уайтхорс"} + } + "America:Winnipeg"{ + ec{"Виннипег"} + } + "America:Yakutat"{ + ec{"Якутат"} + } + "America:Yellowknife"{ + ec{"Йеллоунайф"} + } + "Antarctica:Casey"{ + ec{"Кейси"} + } + "Antarctica:Davis"{ + ec{"Дейвис"} + } + "Antarctica:DumontDUrville"{ + ec{"Дюмон-д'Юрвиль"} + } + "Antarctica:Mawson"{ + ec{"Моусон"} + } + "Antarctica:McMurdo"{ + ec{"Мак-Мердо"} + } + "Antarctica:Palmer"{ + ec{"Палмер"} + } + "Antarctica:Rothera"{ + ec{"Ротера"} + } + "Antarctica:South_Pole"{ + ec{"Южный полюс"} + } + "Antarctica:Syowa"{ + ec{"Сева"} + } + "Antarctica:Vostok"{ + ec{"Восток"} + } + "Arctic:Longyearbyen"{ + ec{"Лонгйир"} + } + "Asia:Almaty"{ + ec{"Алматы"} + } + "Asia:Anadyr"{ + ec{"Анадырь"} + } + "Asia:Aqtau"{ + ec{"Актау"} + } + "Asia:Aqtobe"{ + ec{"Актобе (Актюбинск)"} + } + "Asia:Choibalsan"{ + ec{"Чойбалсан"} + } + "Asia:Chongqing"{ + ec{"Чунцин"} + } + "Asia:Harbin"{ + ec{"Харбин"} + } + "Asia:Hovd"{ + ec{"Ховд"} + } + "Asia:Irkutsk"{ + ec{"Иркутск"} + } + "Asia:Jakarta"{ + ec{"Джакарта"} + } + "Asia:Jayapura"{ + ec{"Джайпур"} + } + "Asia:Kamchatka"{ + ec{"Камчатка, п-ов"} + } + "Asia:Kashgar"{ + ec{"Кашгар"} + } + "Asia:Krasnoyarsk"{ + ec{"Красноярск"} + } + "Asia:Kuala_Lumpur"{ + ec{"Куала-Лумпур"} + } + "Asia:Kuching"{ + ec{"Кучинг"} + } + "Asia:Magadan"{ + ec{"Магадан"} + } + "Asia:Makassar"{ + ec{"Макасар"} + } + "Asia:Novosibirsk"{ + ec{"Новосибирск"} + } + "Asia:Omsk"{ + ec{"Омск"} + } + "Asia:Oral"{ + ec{"Орал (Уральск)"} + } + "Asia:Pontianak"{ + ec{"Понтианак"} + } + "Asia:Qyzylorda"{ + ec{"Кызылорда"} + } + "Asia:Sakhalin"{ + ec{"Сахалин, о-в"} + } + "Asia:Samarkand"{ + ec{"Самарканд"} + } + "Asia:Shanghai"{ + ec{"Шанхай"} + } + "Asia:Tashkent"{ + ec{"Ташкент"} + } + "Asia:Ulaanbaatar"{ + ec{"Улан-Батор"} + } + "Asia:Urumqi"{ + ec{"Урумчи"} + } + "Asia:Vladivostok"{ + ec{"Владивосток"} + } + "Asia:Yakutsk"{ + ec{"Якутск"} + } + "Asia:Yekaterinburg"{ + ec{"Екатеринбург"} + } + "Atlantic:Azores"{ + ec{"Азорские о-ва"} + } + "Atlantic:Canary"{ + ec{"Канарские о-ва"} + } + "Atlantic:Jan_Mayen"{ + ec{"Ян-Майен, о-в"} + } + "Atlantic:Madeira"{ + ec{"Мадейра, о-в"} + } + "Australia:Adelaide"{ + ec{"Аделаида"} + } + "Australia:Brisbane"{ + ec{"Брисбен"} + } + "Australia:Broken_Hill"{ + ec{"Брокен-Хилл"} + } + "Australia:Darwin"{ + ec{"Дарвин"} + } + "Australia:Hobart"{ + ec{"Хобарт"} + } + "Australia:Lindeman"{ + ec{"Линдеман"} + } + "Australia:Lord_Howe"{ + ec{"Лорд-Хау, о-в"} + } + "Australia:Melbourne"{ + ec{"Мельбурн"} + } + "Australia:Perth"{ + ec{"Перт"} + } + "Australia:Sydney"{ + ec{"Сидней"} + } + "Europe:Belfast"{ + ec{"Белфаст"} + } + "Europe:Kaliningrad"{ + ec{"Калининград"} + } + "Europe:Kiev"{ + ec{"Киев"} + } + "Europe:Lisbon"{ + ec{"Лиссабон"} + } + "Europe:London"{ + ec{"Лондон"} + } + "Europe:Madrid"{ + ec{"Мадрид"} + } + "Europe:Moscow"{ + ec{"Москва"} + } + "Europe:Samara"{ + ec{"Самара"} + } + "Europe:Simferopol"{ + ec{"Симферополь"} + } + "Europe:Uzhgorod"{ + ec{"Ужгород"} + } + "Europe:Zaporozhye"{ + ec{"Запорожье"} + } + "Pacific:Auckland"{ + ec{"Окленд"} + } + "Pacific:Chatham"{ + ec{"Чатем, о-в"} + } + "Pacific:Easter"{ + ec{"Пасхи, о-в"} + } + "Pacific:Enderbury"{ + ec{"Эндербери, о-в"} + } + "Pacific:Galapagos"{ + ec{"Галапагос, о-ва"} + } + "Pacific:Gambier"{ + ec{"Гамбье, о-ва"} + } + "Pacific:Honolulu"{ + ec{"Гонолулу"} + } + "Pacific:Johnston"{ + ec{"Джонстон, ат."} + } + "Pacific:Kiritimati"{ + ec{"Киритимати"} + } + "Pacific:Kosrae"{ + ec{"Косрае"} + } + "Pacific:Kwajalein"{ + ec{"Кваджалейн"} + } + "Pacific:Majuro"{ + ec{"Маджуро"} + } + "Pacific:Marquesas"{ + ec{"Маркизские о-ва"} + } + "Pacific:Midway"{ + ec{"Мидуэй, о-ва"} + } + "Pacific:Ponape"{ + ec{"Понапе, о-в"} + } + "Pacific:Tahiti"{ + ec{"Таити, о-в"} + } + "Pacific:Tarawa"{ + ec{"Тарава"} + } + "Pacific:Truk"{ + ec{"Трук, о-ва"} + } + "Pacific:Wake"{ + ec{"Уэйк, о-в"} + } + "Pacific:Yap"{ + ec{"Яп, о-ва"} + } + } +} diff --git a/icuSources/data/locales/ru_RU.txt b/icuSources/data/locales/ru_RU.txt index 2a3f451f..85d205e1 100644 --- a/icuSources/data/locales/ru_RU.txt +++ b/icuSources/data/locales/ru_RU.txt @@ -1,31 +1,38 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ru_RU.xml +// * Source File:/common/main/ru_RU.xml // * // *************************************************************************** ru_RU{ - NumberElements{ - ",", - " ", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", + Currencies{ + ESB{ + "ESB", + "Испанская песета (А) ()", + } + RHD{ + "RHD", + "Родезийский доллар", + } + YUM{ + "YUM", + "Югославский новый динар", + } } - NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00¤;-#,##0.00¤", - "#,##0%", - "#E0", + Languages{ + apa{"апачские языки"} + tlh{"клингонский"} + } + Types{ + calendar{ + buddhist{"Буддийский кадендарь"} + } + } + Version{"1.43"} + measurementSystemNames{ + US{"Англо-американская"} + metric{"Метрическая"} } - Version{"1.2"} } diff --git a/icuSources/data/locales/ru_UA.txt b/icuSources/data/locales/ru_UA.txt index 1d7d5818..a3452b55 100644 --- a/icuSources/data/locales/ru_UA.txt +++ b/icuSources/data/locales/ru_UA.txt @@ -1,33 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ru_UA.xml +// * Source File:/common/main/ru_UA.xml // * // *************************************************************************** ru_UA{ - NumberElements{ - ",", - " ", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} calendar{ gregorian{ DateTimePatterns{ diff --git a/icuSources/data/locales/sh.txt b/icuSources/data/locales/sh.txt index 2df802c6..8bf1ee31 100644 --- a/icuSources/data/locales/sh.txt +++ b/icuSources/data/locales/sh.txt @@ -1,11 +1,14 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sh.xml +// * Source File:/common/main/sh.xml // * // *************************************************************************** +/** + * ICU source: /xml/main/sh.xml + */ sh{ "%%ALIAS"{"sr_Latn"} } diff --git a/icuSources/data/locales/sh_CS.txt b/icuSources/data/locales/sh_CS.txt new file mode 100644 index 00000000..490d86c9 --- /dev/null +++ b/icuSources/data/locales/sh_CS.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/sh_CS.xml +// * +// *************************************************************************** +sh_CS{ + "%%ALIAS"{"sr_Latn_CS"} +} diff --git a/icuSources/data/locales/sh_YU.txt b/icuSources/data/locales/sh_YU.txt index 71f7b127..d9b48d03 100644 --- a/icuSources/data/locales/sh_YU.txt +++ b/icuSources/data/locales/sh_YU.txt @@ -1,11 +1,11 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sh_YU.xml +// * Source File:/common/main/sh_YU.xml // * // *************************************************************************** sh_YU{ - "%%ALIAS"{"sr_Latn_YU"} + "%%ALIAS"{"sr_Latn_CS"} } diff --git a/icuSources/data/locales/sk.txt b/icuSources/data/locales/sk.txt index aa2fad49..0393fded 100644 --- a/icuSources/data/locales/sk.txt +++ b/icuSources/data/locales/sk.txt @@ -1,16 +1,45 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sk.xml +// * Source File:/common/main/sk.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/sk.xml + * ICU source: /xml/main/sk.xml */ sk{ Countries{ + 001{"Svet"} + 002{"Afrika"} + 005{"Južná Amerika"} + 011{"Západná Afrika"} + 013{"Stredná Amerika"} + 014{"Východná Afrika"} + 015{"Severná Afrika"} + 017{"Stredná Afrika"} + 018{"Južná Afrika [018]"} + 019{"Americký kontinent"} + 021{"Severná Amerika"} + 029{"Karibik"} + 030{"Východná Ázia"} + 035{"Juhovýchodná Ázia"} + 039{"Južná Európa"} + 053{"Austrália a Nový Zéland"} + 054{"Melanézia"} + 057{"Mikronésia"} + 061{"Polynézia"} + 062{"Južná Ázia"} + 142{"Ázia"} + 145{"Západná Ázia"} + 150{"Európa"} + 151{"Východná Európa"} + 154{"Severná Európa"} + 155{"Západná Európa"} + 200{"Československo"} + 830{"Kanál La Manche"} + 833{"Ostrov Man"} AD{"Andorra"} AE{"Spojené arabské emiráty"} AF{"Afganistan"} @@ -26,6 +55,7 @@ sk{ AT{"Rakúsko"} AU{"Austrália"} AW{"Aruba"} + AX{"Alandské ostrovy"} AZ{"Azerbajdžan"} BA{"Bosna a Hercegovina"} BB{"Barbados"} @@ -59,6 +89,7 @@ sk{ CN{"Čína"} CO{"Kolumbia"} CR{"Kostarika"} + CS{"Srbsko a Čierna Hora"} CU{"Kuba"} CV{"Kapverdy"} CX{"Vianočný ostrov"} @@ -190,6 +221,7 @@ sk{ PW{"Palau"} PY{"Paraguaj"} QA{"Katar"} + QO{"Tichomorie - ostatné"} RE{"Reunion"} RO{"Rumunsko"} RU{"Ruská federácia"} @@ -208,7 +240,6 @@ sk{ SM{"San Maríno"} SN{"Senegal"} SO{"Somálsko"} - SP{"Serbia"} SR{"Surinam"} ST{"Svätý Tomáš a Princove ostrovy"} SV{"Salvador"} @@ -247,16 +278,11 @@ sk{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Juhoslávia"} ZA{"Južná Afrika"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorský diner", - } ADP{ "ADP", "Andorská peseta", @@ -265,26 +291,10 @@ sk{ "AED", "UAE dirham", } - AIF{ - "AIF", - "Affars a Issas frank", - } - ALK{ - "ALK", - "Albánsky lek (1946-1961)", - } ALL{ "lek", "Albánsky lek", } - ALV{ - "ALV", - "Albánsky valutový lek", - } - ALX{ - "ALX", - "Albánske dolárové certifikáty", - } AMD{ "dram", "Armenský dram", @@ -309,18 +319,10 @@ sk{ "AOR", "Angolská kwanza Reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolské eskudo", - } ARA{ "ARA", "Argentinský austral", } - ARM{ - "ARM", - "Argentinské peso Moneda Nacional", - } ARP{ "ARP", "Argentinské peso (1983-1985)", @@ -337,10 +339,6 @@ sk{ "$A", "Austrálsky dolár", } - AUP{ - "AUP", - "Austrálska libra", - } AWG{ "AWG", "Arubský guilder", @@ -357,10 +355,6 @@ sk{ "KM", "Bosnianský konvertibilná marka", } - BAN{ - "BAN", - "Bosnianský nový dinár", - } BBD{ "BDS$", "Barbadoský dolár", @@ -385,22 +379,10 @@ sk{ "lev", "Bulharský leva", } - BGM{ - "BGM", - "Bulharský socialistický leva", - } BGN{ "BGN", "Bulharský leva nový", } - BGO{ - "BGO", - "Bulharský leva (1879-1952)", - } - BGX{ - "BGX", - "Bulharské certifikáty v leva", - } BHD{ "BD", "Bahraiský dinár", @@ -413,10 +395,6 @@ sk{ "Ber$", "Bermudský dolár", } - BMP{ - "BMP", - "Bermudská libra", - } BND{ "BND", "Bruneiský dolár", @@ -453,34 +431,18 @@ sk{ "BRR", "Brazílske cruzeiro", } - BRZ{ - "BRZ", - "Brazílske cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahamský dolár", } - BSP{ - "BSP", - "Bahamská libra", - } BTN{ "Nu", "Bhutansky ngultrum", } - BTR{ - "BTR", - "Bhutan rupia", - } BUK{ "BUK", "Burmese Kyat", } - BUR{ - "BUR", - "Burmese rupia", - } BWP{ "BWP", "Botswanan Pula", @@ -489,10 +451,6 @@ sk{ "BYB", "Belarussian nový rubeľ (1994-1999)", } - BYL{ - "BYL", - "Belarussian rubeľ (1992-1994)", - } BYR{ "Rbl", "Belarussian rubeľ", @@ -501,10 +459,6 @@ sk{ "BZ$", "Belize dolár", } - BZH{ - "BZH", - "Britiský Honduraský dolár", - } CAD{ "Can$", "Kanadský dolár", @@ -513,34 +467,10 @@ sk{ "CDF", "Konžský frank Congolais", } - CDG{ - "CDG", - "Konžský frank", - } - CDL{ - "CDL", - "Konžský zaire", - } - CFF{ - "CFF", - "CAR CFA frank", - } CHF{ "SwF", "Švajčiarský frank", } - CKD{ - "CKD", - "Cook Islands dolár", - } - CLC{ - "CLC", - "Čílsky condor", - } - CLE{ - "CLE", - "Čílske eskudo", - } CLF{ "CLF", "Čílske Unidades de Fomento", @@ -549,30 +479,10 @@ sk{ "Ch$", "Čílske peso", } - CMF{ - "CMF", - "Camerunský CFA frank", - } - CNP{ - "CNP", - "Čínsky Jen Min Piao Yuan", - } - CNX{ - "CNX", - "Čínsky certifikáty v US dolároch", - } CNY{ "Y", "Čínsky Yuan Renminbi", } - COB{ - "COB", - "Colombijské papierové peso", - } - COF{ - "COF", - "Konžský CFA frank", - } COP{ "Col$", "Colombijské peso", @@ -581,10 +491,6 @@ sk{ "C", "Kostarikský colon", } - CSC{ - "CSC", - "Československá koruna", - } CSK{ "CSK", "Československá koruna", @@ -593,18 +499,10 @@ sk{ "CUP", "Kubánske peso", } - CUX{ - "CUX", - "Kubánske certifikáty", - } CVE{ "CVEsc", "Cape Verde eskudo", } - CWG{ - "CWG", - "Curacao guilder", - } CYP{ "£C", "Cypruská libra", @@ -621,10 +519,6 @@ sk{ "DEM", "Nemecká marka", } - DES{ - "DES", - "Nemecká sperrmarka", - } DJF{ "DF", "Džibutský frank", @@ -641,14 +535,6 @@ sk{ "DA", "Alžírsky dinár", } - DZF{ - "DZF", - "Alžírsky nový frank", - } - DZG{ - "DZG", - "Alžírsky frank Germinal", - } ECS{ "ECS", "Ekuadorský sucre", @@ -677,10 +563,6 @@ sk{ "Br", "Ethiopský birr", } - ETD{ - "ETD", - "Ethiopský dolár", - } EUR{ "€", "Euro", @@ -689,38 +571,18 @@ sk{ "FIM", "Finská marka", } - FIN{ - "FIN", - "Finská marka (1860-1962)", - } FJD{ "F$", "Fiji dolár", } - FJP{ - "FJP", - "Fiji libra", - } FKP{ "FKP", "Falklandská libra", } - FOK{ - "FOK", - "Faeroe Islands Kronur", - } FRF{ "FRF", "Francúzsky frank", } - FRG{ - "FRG", - "Francúzsky frank Germinal/frank Poincare", - } - GAF{ - "GAF", - "Gabúnsky CFA frank", - } GBP{ "£", "Britská libra", @@ -737,86 +599,38 @@ sk{ "GHC", "Ghanský cedi", } - GHO{ - "GHO", - "Ghanský starý cedi", - } - GHP{ - "GHP", - "Ghanská libra", - } - GHR{ - "GHR", - "Ghanský prehodnotený cedi", - } GIP{ "GIP", "Gibraltarská libra", } - GLK{ - "GLK", - "Grónsky krone", - } GMD{ "GMD", "Gambský dalasi", } - GMP{ - "GMP", - "Gambská libra", - } GNF{ "GF", "Guinejský frank", } - GNI{ - "GNI", - "Guinejský frank (1960-1972)", - } GNS{ "GNS", "Guinejský syli", } - GPF{ - "GPF", - "Guadeloupský frank", - } GQE{ "GQE", "Rovníková Guinea Ekwele Guineana", } - GQF{ - "GQF", - "Rovníková Guinea franko", - } - GQP{ - "GQP", - "Rovníková Guinea Peseta Guineana", - } GRD{ "GRD", "Grécka drachma", } - GRN{ - "GRN", - "Grécka nová drachma", - } GTQ{ "Q", "Guatemalský quetzal", } - GUF{ - "GUF", - "Francúzska Guyana frank Guiana", - } GWE{ "GWE", "Portugalská Guinea eskudo", } - GWM{ - "GWM", - "Portugalské Guinea Mil Reis", - } GWP{ "GWP", "Guinea-Bissau peso", @@ -849,22 +663,6 @@ sk{ "Ft", "Maďarský forint", } - IBP{ - "IBP", - "Severoírska libra", - } - IDG{ - "IDG", - "Indonézsky nica guilder", - } - IDJ{ - "IDJ", - "Indonézska Java rupia", - } - IDN{ - "IDN", - "Indonézska nová rupia", - } IDR{ "Rp", "Indonézska rupia", @@ -873,10 +671,6 @@ sk{ "IR£", "Írska libra", } - ILL{ - "ILL", - "Izraelský šekel", - } ILP{ "ILP", "Izraelská libra", @@ -885,10 +679,6 @@ sk{ "ILS", "Izraelský šekel", } - IMP{ - "IMP", - "Libra Isle of Man", - } INR{ "INR", "Indijská rupia", @@ -909,18 +699,10 @@ sk{ "₤", "Talianská lira", } - JEP{ - "JEP", - "Jersey libra", - } JMD{ "J$", "Jamajský dolár", } - JMP{ - "JMP", - "Jamajská libra", - } JOD{ "JD", "Jordánsky dinár", @@ -937,38 +719,18 @@ sk{ "som", "Kyrgyský som", } - KHO{ - "KHO", - "Kambodžský starý riel", - } KHR{ "CR", "Kambodžský riel", } - KID{ - "KID", - "Kiribati dolár", - } KMF{ "CF", "Comoro frank", } - KPP{ - "KPP", - "Severokórejský won", - } KPW{ "KPW", "Severokórejský won", } - KRH{ - "KRH", - "Juhokórejský hwan", - } - KRO{ - "KRO", - "Juhokórejský starý won", - } KRW{ "KRW", "Juhokórejský won", @@ -981,10 +743,6 @@ sk{ "KYD", "Kajmanský dolár", } - KZR{ - "KZR", - "Kazažský rubeľ", - } KZT{ "T", "Kazažský tenge", @@ -997,18 +755,10 @@ sk{ "LL", "Libanonská libra", } - LIF{ - "LIF", - "Lichtenšteinský frank", - } LKR{ "SL Re", "Šrilanská rupia", } - LNR{ - "LNR", - "Ceylonská rupia", - } LRD{ "LRD", "Libérský dolár", @@ -1037,18 +787,10 @@ sk{ "LVR", "Lotyšský rubeľ", } - LYB{ - "LYB", - "Libyjská BMA lira", - } LYD{ "LD", "Libyjský dinár", } - LYP{ - "LYP", - "Libyjská libra", - } MAD{ "MAD", "Marocký dirham", @@ -1057,26 +799,10 @@ sk{ "MAF", "Marocký frank", } - MCF{ - "MCF", - "Monacký frank Nouveau", - } - MCG{ - "MCG", - "Monacký frank Germinal", - } - MDC{ - "MDC", - "Moldavský Leu Cupon", - } MDL{ "MDL", "Moldavský leu", } - MDR{ - "MDR", - "Moldavský rubeľ", - } MGA{ "MGA", "Madagaskarský ariary", @@ -1085,18 +811,10 @@ sk{ "MGF", "Madagaskarský frank", } - MHD{ - "MHD", - "Marshall Islands dolár", - } MKD{ "MDen", "Macedónsky denár", } - MKN{ - "MKN", - "Macedónsky denár (1992-1993)", - } MLF{ "MLF", "Malský frank", @@ -1105,10 +823,6 @@ sk{ "MMK", "Myanmarský kyat", } - MMX{ - "MMX", - "Myanmarské dolárové certifikáty", - } MNT{ "Tug", "Mongolský tugrik", @@ -1117,10 +831,6 @@ sk{ "MOP", "Macao Pataca", } - MQF{ - "MQF", - "Martinique frank", - } MRO{ "UM", "Mauritania Ouguiya", @@ -1137,10 +847,6 @@ sk{ "MUR", "Mauritská rupia", } - MVP{ - "MVP", - "Maldivská rupia", - } MVR{ "MVR", "Maldivská rufiyaa", @@ -1149,10 +855,6 @@ sk{ "MK", "Malavská kwacha", } - MWP{ - "MWP", - "Malavská libra", - } MXN{ "MEX$", "Mexické peso", @@ -1181,30 +883,14 @@ sk{ "N$", "Namibský dolár", } - NCF{ - "NCF", - "New Caledonia frank Germinal", - } NGN{ "NGN", "Nigerská naira", } - NGP{ - "NGP", - "Nigerská libra", - } - NHF{ - "NHF", - "New Hebrides CFP frank", - } NIC{ "NIC", "Nikaragujská cordoba", } - NIG{ - "NIG", - "Nikaragujská zlatá Cordoba", - } NIO{ "NIO", "Nikaragujská Cordoba Oro", @@ -1225,34 +911,14 @@ sk{ "$NZ", "Novozélandský dolár", } - NZP{ - "NZP", - "Nikaragujská libra", - } OMR{ "RO", "Ománský rial", } - OMS{ - "OMS", - "Ománský rial Saidi", - } PAB{ "PAB", "Panamská balboa", } - PDK{ - "PDK", - "Transdniestria rubeľ Kupon", - } - PDN{ - "PDN", - "Transdniestria nový rubeľ", - } - PDR{ - "PDR", - "Transdniestria rubeľ", - } PEI{ "PEI", "Peruvský inti", @@ -1281,22 +947,10 @@ sk{ "Zl", "Polský zloty", } - PLX{ - "PLX", - "Polské certifikáty v US dolároch", - } PLZ{ "PLZ", "Polský zloty (1950-1995)", } - PSP{ - "PSP", - "Palestínska libra", - } - PTC{ - "PTC", - "Portugalské conto", - } PTE{ "PTE", "Portugalské eskudo", @@ -1309,18 +963,10 @@ sk{ "QR", "Qatarský rial", } - REF{ - "REF", - "Reunion frank", - } ROL{ "leu", "Rumunský leu", } - RON{ - "RON", - "Rumunský nový leu", - } RUB{ "RUB", "Ruský rubeľ", @@ -1337,10 +983,6 @@ sk{ "SRl", "Saudský riyal", } - SAS{ - "SAS", - "Saudský Riyal", - } SBD{ "SI$", "Solomon Islands dolár", @@ -1369,10 +1011,6 @@ sk{ "SHP", "Libra", } - SIB{ - "SIB", - "Slovinský tolar Bons", - } SIT{ "SIT", "Slovinský Tolar", @@ -1385,38 +1023,18 @@ sk{ "SLL", "Sierra Leone Leone", } - SML{ - "SML", - "San Marino lira", - } SOS{ "So. Sh.", "Somálsky šiling", } - SQS{ - "SQS", - "Somálsky šiling", - } SRG{ "Sf", "Surinamský guilder", } - SSP{ - "SSP", - "Škótska libra", - } STD{ "Db", "Sao Tome a Principe dobra", } - STE{ - "STE", - "Sao Tome a Principe eskudo", - } - SUN{ - "SUN", - "Sovietský nový rubeľ", - } SUR{ "SUR", "Sovietský rubeľ", @@ -1433,14 +1051,6 @@ sk{ "E", "Swaziland lilangeni", } - TCC{ - "TCC", - "Turks a Caicos Crown", - } - TDF{ - "TDF", - "Chadský CFA frank", - } THB{ "THB", "Thajský bát", @@ -1465,18 +1075,10 @@ sk{ "T$", "Tonga Paʻanga", } - TOS{ - "TOS", - "Tonga libra", - } TPE{ "TPE", "Timorské eskudo", } - TPP{ - "TPP", - "Timorská pataca", - } TRL{ "TL", "Turecká lira", @@ -1485,14 +1087,6 @@ sk{ "TT$", "Trinidad a Tobago dolár", } - TTO{ - "TTO", - "Trinidad a Tobago starý dolár", - } - TVD{ - "TVD", - "Tuvalu dolár", - } TWD{ "NT$", "Taiwanský nový dolár", @@ -1529,10 +1123,6 @@ sk{ "USS", "US dolár (Same day)", } - UYF{ - "UYF", - "Uruguajské peso Fuerte", - } UYP{ "UYP", "Uruguajské peso (1975-1993)", @@ -1541,62 +1131,22 @@ sk{ "Ur$", "Uruguajské peso Uruguayo", } - UZC{ - "UZC", - "Uzbekistanský Coupon Som", - } UZS{ "UZS", "Uzbekistanský sum", } - VAL{ - "VAL", - "Vatikánska lira", - } - VDD{ - "VDD", - "Severovietnamský Piastre Dong Viet", - } - VDN{ - "VDN", - "Severovietnamský nový Dong", - } - VDP{ - "VDP", - "Severovietnamský Viet Minh Piastre Dong Viet", - } VEB{ "Be", "Venezuelský bolivar", } - VGD{ - "VGD", - "British Virgin Islands dolár", - } VND{ "VND", "Vietnamský dong", } - VNN{ - "VNN", - "Vietnamský nový dong", - } - VNR{ - "VNR", - "Vietnamský dong", - } - VNS{ - "VNS", - "Vietnamský národný dong", - } VUV{ "VT", "Vanuatu vatu", } - WSP{ - "WSP", - "Západná Samoa libra", - } WST{ "WST", "Západná Samoa tala", @@ -1613,18 +1163,10 @@ sk{ "EC$", "East Caribbean dolár", } - XCF{ - "XCF", - "CFA Nouveau frank", - } XDR{ "XDR", "Špeciálne práva čerpania", } - XEF{ - "XEF", - "CFA frank BCEAEC", - } XFO{ "XFO", "Francúzsky zlatý frank", @@ -1633,18 +1175,6 @@ sk{ "XFU", "Francúzsky UIC-frank", } - XID{ - "XID", - "Islamský dinár", - } - XMF{ - "XMF", - "Francúzsky Metropolitan Nouveau frank", - } - XNF{ - "XNF", - "Francúzske Antilly CFA frank", - } XOF{ "XOF", "CFA frank BCEAO", @@ -1653,33 +1183,17 @@ sk{ "CFPF", "CFP frank", } - XTR{ - "XTR", - "COMECON rubeľ", - } YDD{ "YDD", "Jemenský dinár", } - YEI{ - "YEI", - "Jemenský Imadi Riyal", - } YER{ "YRl", "Jemenský rial", } YUD{ "YUD", - "Juhoslávsky dinár", - } - YUF{ - "YUF", - "Juhoslávsky dinár", - } - YUG{ - "YUG", - "Juhoslávsky dinár", + "Juhoslávsky dinár [YUD]", } YUM{ "YUM", @@ -1689,22 +1203,10 @@ sk{ "YUN", "Juhoslávsky dinár", } - YUO{ - "YUO", - "Juhoslávsky októbrový dinár", - } - YUR{ - "YUR", - "Juhoslávsky dinár", - } ZAL{ "ZAL", "Juhoafrický rand (financial)", } - ZAP{ - "ZAP", - "Juhoafrická libra", - } ZAR{ "R", "Juhoafrický rand", @@ -1713,10 +1215,6 @@ sk{ "ZMK", "Zambská kwacha", } - ZMP{ - "ZMP", - "Zambská libra", - } ZRN{ "ZRN", "Zairský nový zaire", @@ -1730,7 +1228,10 @@ sk{ "Zimbabský dolár", } } - ExemplarCharacters{"[a-z ý á é í ó ú ä ô ĺ ŕ č ď ľ ň š ť ž]"} + ExemplarCharacters{ + "[a á ä b c č d ď e é f-h {ch} i í j-l ĺ ľ m n ň o ó ô p-r ŕ s š t ť u ú v-y " + "ý z ž]" + } Keys{ calendar{"Kalendár"} collation{"Triedenie"} @@ -1782,7 +1283,7 @@ sk{ "E", "‰", "∞", - "�", + "NaN", "+", } Scripts{ @@ -1810,13 +1311,9 @@ sk{ traditional{"Tradičné"} } } - Version{"1.2"} + Version{"1.65"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 4, - } DateTimePatterns{ "H:mm:ss z", "H:mm:ss z", @@ -1839,15 +1336,6 @@ sk{ "Pi", "So", } - narrow{ - "N", - "P", - "U", - "S", - "Š", - "P", - "S", - } wide{ "Nedeľa", "Pondelok", @@ -1858,6 +1346,17 @@ sk{ "Sobota", } } + stand-alone{ + narrow{ + "N", + "P", + "U", + "S", + "Š", + "P", + "S", + } + } } eras{ abbreviated{ @@ -1881,6 +1380,22 @@ sk{ "nov", "dec", } + wide{ + "január", + "február", + "marec", + "apríl", + "máj", + "jún", + "júl", + "august", + "september", + "október", + "november", + "december", + } + } + stand-alone{ narrow{ "j", "f", @@ -1895,23 +1410,79 @@ sk{ "n", "d", } + } + } + quarters{ + format{ wide{ - "január", - "február", - "marec", - "apríl", - "máj", - "jún", - "júl", - "august", - "september", - "október", - "november", - "december", + "1. štvrťrok", + "2. štvrťrok", + "3. štvrťrok", + "4. štvrťrok", } } } } } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Antarctica:South_Pole"{ + ec{"Južný pól"} + } + "Asia:Irkutsk"{ + ec{"Irkutsko"} + } + "Asia:Kamchatka"{ + ec{"Kamčatka"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasnojarsko"} + } + "Asia:Sakhalin"{ + ec{"Sachalin"} + } + "Asia:Shanghai"{ + ec{"Šanghaj"} + } + "Asia:Tashkent"{ + ec{"Taškent"} + } + "Asia:Ulaanbaatar"{ + ec{"Ulanbátar"} + } + "Asia:Yakutsk"{ + ec{"Jakutsko"} + } + "Asia:Yekaterinburg"{ + ec{"Jekaterinburg"} + } + "Atlantic:Azores"{ + ec{"Azorské ostrovy"} + } + "Atlantic:Canary"{ + ec{"Kanárske ostrovy"} + } + "Europe:Kiev"{ + ec{"Kyjev"} + } + "Europe:Lisbon"{ + ec{"Lisabon"} + } + "Europe:London"{ + ec{"Londýn"} + } + "Europe:Moscow"{ + ec{"Moskva"} + } + "Europe:Uzhgorod"{ + ec{"Užhorod"} + } + "Europe:Zaporozhye"{ + ec{"Záporožie"} + } + "Pacific:Galapagos"{ + ec{"Galapágy"} + } + hourFormat{"+HHmm;-HHmm"} + } } diff --git a/icuSources/data/locales/sk_SK.txt b/icuSources/data/locales/sk_SK.txt index 7ce83f8b..d8a88f9b 100644 --- a/icuSources/data/locales/sk_SK.txt +++ b/icuSources/data/locales/sk_SK.txt @@ -1,17 +1,31 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sk_SK.xml +// * Source File:/common/main/sk_SK.xml // * // *************************************************************************** sk_SK{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + } + delimiters{ + alternateQuotationEnd{"“"} + alternateQuotationStart{"„"} + quotationEnd{"‘"} + quotationStart{"‚"} + } } diff --git a/icuSources/data/locales/sl.txt b/icuSources/data/locales/sl.txt index caff42a1..adbd152f 100644 --- a/icuSources/data/locales/sl.txt +++ b/icuSources/data/locales/sl.txt @@ -1,16 +1,46 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sl.xml +// * Source File:/common/main/sl.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/sl.xml + * ICU source: /xml/main/sl.xml */ sl{ + AuxExemplarCharacters{"[q w-y]"} Countries{ + 001{"Svet"} + 002{"Afrika"} + 005{"Južna Amerika"} + 009{"Oceanija"} + 011{"Zahodna Afrika"} + 013{"Centralna Amerika"} + 014{"Vzhodna Afrika"} + 015{"Severna Afrika"} + 017{"Centralna Afrika"} + 018{"Južna Afrika [018]"} + 019{"Amerike"} + 021{"Severna Amerika"} + 029{"Karibi"} + 030{"Vzhodna Azija"} + 035{"Jugovzhodna Azija"} + 039{"Južna Evropa"} + 053{"Avstralija i Nova Zelandija"} + 054{"Melanezija"} + 057{"Micronezija"} + 061{"Polinezija"} + 062{"Južno-centralna Azija"} + 142{"Azija"} + 145{"Zahodna Azija"} + 150{"Evropa"} + 151{"Vzhodna Evropa"} + 154{"Severna Evropa"} + 155{"Zapadna Evropa"} + 830{"Kanalski otoki"} + 833{"Otok Man"} AD{"Andora"} AE{"Združeni arabski emirati"} AF{"Afganistan"} @@ -26,6 +56,7 @@ sl{ AT{"Avstrija"} AU{"Avstralija"} AW{"Aruba"} + AX{"Alandski otoki"} AZ{"Azerbajdžan"} BA{"Bosna in Hercegovina"} BB{"Barbados"} @@ -59,6 +90,7 @@ sl{ CN{"Kitajska"} CO{"Kolumbija"} CR{"Kostarika"} + CS{"Srbija in Črna gora"} CU{"Kuba"} CV{"Kapverdski otoki"} CX{"Božični otok"} @@ -190,6 +222,7 @@ sl{ PW{"Palau"} PY{"Paragvaj"} QA{"Katar"} + QO{"Ostala oceanija"} RE{"Reunion"} RO{"Romunija"} RU{"Ruska federacija"} @@ -208,7 +241,6 @@ sl{ SM{"San Marino"} SN{"Senegal"} SO{"Somalija"} - SP{"Serbia"} SR{"Surinam"} ST{"Sao Tome in Principe"} SV{"Salvador"} @@ -247,18 +279,49 @@ sl{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoslavija"} ZA{"Južna Afrika"} ZM{"Zambija"} ZW{"Zimbabve"} } Currencies{ + BRL{ + "BRL", + "Brazilski Real", + } + CNY{ + "CNY", + "Kitajski Yuan Renminbi", + } + EUR{ + "€", + "Evro", + } + GBP{ + "£", + "Britanski Funt Sterling", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/sl_SI.xml // * // *************************************************************************** sl_SI{ - Version{"1.2"} + NumberPatterns{ + "#,##0.###", + "#,##0.00 ¤", + "#,##0%", + "#E0", + } + Version{"1.41"} + delimiters{ + alternateQuotationEnd{"“"} + alternateQuotationStart{"„"} + quotationEnd{"’"} + quotationStart{"‘"} + } } diff --git a/icuSources/data/locales/so.txt b/icuSources/data/locales/so.txt index 4eb2f7ab..34b8f7c7 100644 --- a/icuSources/data/locales/so.txt +++ b/icuSources/data/locales/so.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/so.xml +// * Source File:/common/main/so.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/so.xml + * ICU source: /xml/main/so.xml */ so{ Countries{ @@ -45,7 +45,6 @@ so{ HU{"Hangeri"} ID{"Indoneesiya"} IE{"Ayrlaanda"} - IL{"Israa'iil"} IN{"Hindiya"} IQ{"Ciraaq"} IR{"Iiraan"} @@ -125,17 +124,13 @@ so{ LocaleScript{ "Latn", } - Version{"1.2"} + Version{"1.42"} calendar{ gregorian{ AmPmMarkers{ "sn", "gn", } - DateTimeElements:intvector{ - 7, - 1, - } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", @@ -168,6 +163,17 @@ so{ "Sabti", } } + stand-alone{ + narrow{ + "A", + "I", + "S", + "A", + "K", + "J", + "S", + } + } } eras{ abbreviated{ @@ -206,6 +212,22 @@ so{ "Bisha Laba iyo Tobnaad", } } + stand-alone{ + narrow{ + "K", + "L", + "S", + "A", + "S", + "L", + "T", + "S", + "S", + "T", + "K", + "L", + } + } } } } diff --git a/icuSources/data/locales/so_DJ.txt b/icuSources/data/locales/so_DJ.txt index 6a022dd3..8067d6a2 100644 --- a/icuSources/data/locales/so_DJ.txt +++ b/icuSources/data/locales/so_DJ.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/so_DJ.xml +// * Source File:/common/main/so_DJ.xml // * // *************************************************************************** so_DJ{ Currencies{ DJF{ "$", - "DJF", + "Jabuuti Faran", } USD{ "US$", @@ -18,10 +18,18 @@ so_DJ{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + } + } } diff --git a/icuSources/data/locales/so_ET.txt b/icuSources/data/locales/so_ET.txt index 0867f6b5..da75f3ec 100644 --- a/icuSources/data/locales/so_ET.txt +++ b/icuSources/data/locales/so_ET.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/so_ET.xml +// * Source File:/common/main/so_ET.xml // * // *************************************************************************** so_ET{ Currencies{ ETB{ "$", - "ETB", + "Itoobiya Bir", } USD{ "US$", @@ -18,10 +18,18 @@ so_ET{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + } + } } diff --git a/icuSources/data/locales/so_KE.txt b/icuSources/data/locales/so_KE.txt index 49f9b1bb..2c24adb7 100644 --- a/icuSources/data/locales/so_KE.txt +++ b/icuSources/data/locales/so_KE.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/so_KE.xml +// * Source File:/common/main/so_KE.xml // * // *************************************************************************** so_KE{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + } + } } diff --git a/icuSources/data/locales/so_SO.txt b/icuSources/data/locales/so_SO.txt index 1bd6ec87..3be2144e 100644 --- a/icuSources/data/locales/so_SO.txt +++ b/icuSources/data/locales/so_SO.txt @@ -1,16 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/so_SO.xml +// * Source File:/common/main/so_SO.xml // * // *************************************************************************** so_SO{ Currencies{ SOS{ "$", - "SOS", + "Somalia Schilling", } USD{ "US$", @@ -18,10 +18,18 @@ so_SO{ } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + } + } } diff --git a/icuSources/data/locales/sq.txt b/icuSources/data/locales/sq.txt index b97b92f6..375c0689 100644 --- a/icuSources/data/locales/sq.txt +++ b/icuSources/data/locales/sq.txt @@ -1,15 +1,16 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sq.xml +// * Source File:/common/main/sq.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/sq.xml + * ICU source: /xml/main/sq.xml */ sq{ + AuxExemplarCharacters{"[w]"} Countries{ AD{"Andorrë"} AE{"Emiratet Arabe te Bashkuara"} @@ -28,6 +29,7 @@ sq{ BH{"Bahrein"} BN{"Brunej"} BO{"Bolivi"} + BR{"Brazili"} BT{"Butan"} BW{"Botsvana"} BY{"Bjellorusi"} @@ -41,6 +43,7 @@ sq{ CN{"Kinë"} CO{"Kolumbi"} CR{"Kosta Rika"} + CS{"Serbië en Montenegro"} CU{"Kubë"} CV{"Kap Verde"} CY{"Qipro"} @@ -63,6 +66,7 @@ sq{ FM{"Mikronezi"} FR{"Francë"} GA{"Gjabon"} + GB{"Mbretëria e Bashkuar"} GE{"Gjeorgji"} GH{"Ganë"} GM{"Gambi"} @@ -140,7 +144,6 @@ sq{ SK{"Sllovaki"} SL{"Siera Leone"} SO{"Somali"} - SP{"Serbië"} ST{"Sao Tome e Prinsipe"} SY{"Siri"} SZ{"Svazilandë"} @@ -169,10 +172,56 @@ sq{ "Lek", "ALL", } + BRL{ + "BRL", + "Real Brazilian", + } + CNY{ + "CNY", + "Renminbi(Yuan) Kinez", + } + EUR{ + "€", + "Euro", + } + GBP{ + "£", + "Paund Sterlina Britanike", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/sq_AL.xml // * // *************************************************************************** sq_AL{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.35"} } diff --git a/icuSources/data/locales/sr.txt b/icuSources/data/locales/sr.txt index d6be31b2..fbcb22ae 100644 --- a/icuSources/data/locales/sr.txt +++ b/icuSources/data/locales/sr.txt @@ -1,610 +1,701 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sr.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/sr.xml - */ -sr{ - Countries{ - AD{"Андора"} - AE{"Уједињени Арапски Емирати"} - AF{"Авганистан"} - AL{"Албанија"} - AM{"Арменија"} - AN{"Холандски Антили"} - AO{"Ангола"} - AR{"Аргентина"} - AT{"Аустрија"} - AU{"Аустралија"} - AW{"Аруба"} - AZ{"Азербејџан"} - BA{"Босна и Херцеговина"} - BB{"Барбадос"} - BD{"Бангладеш"} - BE{"Белгија"} - BF{"Буркина Фасо"} - BG{"Бугарска"} - BH{"Бахреин"} - BI{"Бурунди"} - BJ{"Бенин"} - BM{"Бермуда"} - BN{"Брунеј"} - BO{"Боливија"} - BR{"Браѕил"} - BS{"Бахами"} - BT{"Бутан"} - BV{"Буве"} - BW{"Боцвана"} - BY{"Белорусија"} - BZ{"Белисе"} - CA{"Канада"} - CC{"Кокосова Острва"} - CD{"Демократска република Конго"} - CF{"Централно Афричка Република"} - CG{"Конго"} - CH{"Швајцарска"} - CI{"Обала Слоноваче"} - CL{"Чиле"} - CM{"Камерун"} - CN{"Кина"} - CO{"Колумбија"} - CR{"Костарика"} - CU{"Куба"} - CV{"Капе Верде"} - CX{"Божићно Острво"} - CY{"Кипар"} - CZ{"Чешка"} - DE{"Немачка"} - DJ{"Џибути"} - DK{"Данска"} - DM{"Доминика"} - DO{"Доминиканска Република"} - DZ{"Алжир"} - EC{"Еквадор"} - EE{"Естонија"} - EG{"Египат"} - EH{"Западна Сахара"} - ER{"Еритреја"} - ES{"Шпанија"} - ET{"Етиопија"} - FI{"Финска"} - FJ{"Фиџи"} - FK{"Фолкландска Острва"} - FM{"Микронезија"} - FO{"Фарска Острва"} - FR{"Француска"} - GA{"Габон"} - GB{"Велика Британија"} - GD{"Гренада"} - GE{"Грузија"} - GF{"Француска Гвајана"} - GH{"Гана"} - GI{"Гибралтар"} - GL{"Гренланд"} - GM{"Гамбија"} - GN{"Гвинеја"} - GP{"Гваделупе"} - GQ{"Екваторијална Гвинеја"} - GR{"Грчка"} - GS{"Јужна Џорџија и Јужна Сендвич Острва"} - GT{"Гватемала"} - GU{"Гуам"} - GW{"Гвинеја-Бисао"} - GY{"Гвајана"} - HK{"Хонг Конг (С. А. Р. Кина)"} - HM{"Херд и Мекдоналд Острва"} - HN{"Хондурас"} - HR{"Хрватска"} - HT{"Хаити"} - HU{"Мађарска"} - ID{"Индонезија"} - IE{"Ирска"} - IL{"Израел"} - IN{"Индија"} - IQ{"Ирак"} - IR{"Иран"} - IS{"Исланд"} - IT{"Италија"} - JM{"Јамајка"} - JO{"Јордан"} - JP{"Јапан"} - KE{"Кенија"} - KG{"Киргизстан"} - KH{"Камбоџа"} - KI{"Кирибати"} - KM{"Коморска Острва"} - KN{"Сент Китс и Невис"} - KP{"Северна Кореја"} - KR{"Јужна Кореја"} - KW{"Кувајт"} - KY{"Кајманска Острва"} - KZ{"Казахстан"} - LA{"Лаос"} - LB{"Либан"} - LC{"Сент Луција"} - LI{"Лихтенштајн"} - LK{"Шри Ланка"} - LR{"Либерија"} - LS{"Лесото"} - LT{"Литванија"} - LU{"Луксембург"} - LV{"Летонија"} - LY{"Либија"} - MA{"Мароко"} - MC{"Монако"} - MD{"Молдавија"} - MG{"Мадагаскар"} - MH{"Маршалска Острва"} - MK{"Македонија"} - ML{"Мали"} - MM{"Мијанмар"} - MN{"Монголија"} - MO{"Макао (С. А. Р. Кина)"} - MP{"Северна Маријанска Острва"} - MQ{"Мартиник"} - MR{"Мауританија"} - MS{"Монсерат"} - MT{"Малта"} - MU{"Маурицијус"} - MV{"Малдиви"} - MW{"Малави"} - MX{"Мексико"} - MY{"Малезија"} - MZ{"Мозамбик"} - NA{"Намибија"} - NC{"Нова Каледонија"} - NE{"Нигер"} - NF{"Норфолк Острво"} - NG{"Нигерија"} - NI{"Никарагва"} - NL{"Холандија"} - NO{"Норвешка"} - NP{"Непал"} - NR{"Науру"} - NU{"Ниуе"} - NZ{"Нови Зеланд"} - OM{"Оман"} - PA{"Панама"} - PE{"Перу"} - PF{"Француска Полинезија"} - PG{"Папуа Нова Гвинеја"} - PH{"Филипини"} - PK{"Пакистан"} - PL{"Пољска"} - PM{"Сен Пјер и Микелон"} - PN{"Питкерн"} - PR{"Порто Рико"} - PS{"Палестинска територија"} - PT{"Португал"} - PW{"Палау"} - PY{"Парагвај"} - QA{"Катар"} - RE{"Реинион"} - RO{"Румунија"} - RU{"Русија"} - RW{"Руанда"} - SA{"Саудијска Арабија"} - SB{"Соломонска Острва"} - SC{"Сејшели"} - SD{"Судан"} - SE{"Шведска"} - SG{"Сингапур"} - SH{"Света Јелена"} - SI{"Словенија"} - SJ{"Свалбард и Јанмајен Острва"} - SK{"Словачка"} - SL{"Сијера Леоне"} - SM{"Сан Марино"} - SN{"Сенегал"} - SO{"Сомалија"} - SR{"Суринам"} - ST{"Сао Томе и Принципи"} - SV{"Салвадор"} - SY{"Сирија"} - SZ{"Свазиленд"} - TC{"Туркс и Кајкос Острва"} - TD{"Чад"} - TF{"Француске Јужне Територије"} - TG{"Того"} - TH{"Тајланд"} - TJ{"Таџикистан"} - TK{"Токелау"} - TL{"Тимор-Лесте"} - TM{"Туркменистан"} - TN{"Тунис"} - TO{"Тонга"} - TR{"Турска"} - TT{"Тринидад и Тобаго"} - TV{"Тувалу"} - TW{"Тајван"} - TZ{"Танзанија"} - UA{"Украјина"} - UG{"Уганда"} - UM{"Мања удаљена острва САД"} - US{"Сједињене Америчке Државе"} - UY{"Уругвај"} - UZ{"Узбекистан"} - VA{"Ватикан"} - VC{"Сент Винсент и Гренадини"} - VE{"Венецуела"} - VG{"Британска Девичанска Острва"} - VI{"С.А.Д. Девичанска Острва"} - VN{"Вијетнам"} - VU{"Вануату"} - WF{"Валис и Футуна Острва"} - WS{"Самоа"} - YE{"Јемен"} - YT{"Мајоте"} - YU{"Југославија"} - ZA{"Јужна Африка"} - ZM{"Замбија"} - ZW{"Зимбабве"} - } - Currencies{ - ATS{ - "ATS", - "Аустријски шилинг", - } - AUD{ - "$A", - "Аустралијски долар", - } - BAM{ - "KM", - "Конвертибилна марка", - } - BEF{ - "BF", - "Белгијски франак", - } - CAD{ - "Can$", - "Канадски долар", - } - CHF{ - "SwF", - "Швајцарски франак", - } - DEM{ - "DEM", - "Немачка марка", - } - DKK{ - "DKr", - "Данска круна", - } - ESP{ - "ESP", - "Шпанска пезета", - } - EUR{ - "€", - "ЕВРО", - } - FIM{ - "FIM", - "Финска марка", - } - FIN{ - "FIN", - "Финска марка (1860-1962)", - } - FRF{ - "FRF", - "Француски франак", - } - GBP{ - "£", - "Фунта стерлинга", - } - GRD{ - "GRD", - "Драхма", - } - HRD{ - "HRD", - "Хрватски динар", - } - HRK{ - "HRK", - "Куна", - } - IEP{ - "IR£", - "Ирска фунта", - } - ITL{ - "₤", - "Италијанска лира", - } - JPY{ - "¥", - "Јен", - } - KWD{ - "KD", - "Кувајтски динар", - } - LUF{ - "LUF", - "Луксембуршки франак", - } - NLG{ - "NLG", - "Холандски гулден", - } - NOK{ - "NKr", - "Норвешка круна", - } - PTE{ - "PTE", - "Португалски ескудо", - } - RUB{ - "RUB", - "Руска рубља", - } - RUR{ - "RUR", - "Руска рубља (1991-1998)", - } - SEK{ - "SKr", - "Шведска круна", - } - SIT{ - "SIT", - "Толар", - } - USD{ - "US$", - "Амерички долар", - } - YUN{ - "Дин", - "YUN", - } - } - ExemplarCharacters{"[а-и к-ш ђ ј љ њ ћ џ]"} - Keys{ - calendar{"Календар"} - collation{"Сортирање"} - currency{"Валута"} - } - Languages{ - af{"Африканерски"} - ar{"Арапски"} - be{"Белоруски"} - bg{"Бугарски"} - br{"Бретонски"} - ca{"Каталонски"} - co{"Корзикански"} - cs{"Чешки"} - da{"Дански"} - de{"Немачки"} - el{"Грчки"} - en{"Енглески"} - eo{"Есперанто"} - es{"Шпански"} - et{"Естонски"} - eu{"Баскијски"} - fa{"Персијски"} - fi{"Фински"} - fr{"Француски"} - ga{"Ирски"} - he{"Хебрејски"} - hr{"Хрватски"} - hu{"Мађарски"} - hy{"Арменски"} - id{"Индонезијски"} - is{"Исландски"} - it{"Италијански"} - ja{"Јапански"} - ka{"Грузијски"} - km{"Кмерски"} - ko{"Корејски"} - ku{"Курдски"} - ky{"Киргиски"} - la{"Латински"} - lt{"Литвански"} - lv{"Летонски"} - mk{"Македонски"} - mn{"Монголски"} - mo{"Молдавски"} - my{"Бурмански"} - nl{"Холандски"} - no{"Норвешки"} - pl{"Пољски"} - pt{"Португалски"} - rm{"Рето-Романски"} - ro{"Румунски"} - ru{"Руски"} - sa{"Санскрит"} - sh{"Српско-Хрватски"} - sk{"Словачки"} - sl{"Словеначки"} - sq{"Албански"} - sr{"Српски"} - sv{"Шведски"} - sw{"Свахили"} - tr{"Турски"} - uk{"Украјински"} - vi{"Вијетнамски"} - yi{"Јидиш"} - zh{"Кинески"} - } - LocaleScript{ - "Cyrl", - } - NumberElements{ - ",", - ".", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Scripts{ - Arab{"арапско писмо"} - Armn{"јерменско писмо"} - Beng{"бенгалско писмо"} - Brai{"Брајево писмо"} - Cher{"Чероки"} - Copt{"коптичко писмо"} - Cyrl{"Ћирилица"} - Deva{"Деванагари"} - Dsrt{"Дезерет"} - Ethi{"етиопско писмо"} - Geor{"грузијско писмо"} - Goth{"Готика"} - Grek{"грчко писмо"} - Hebr{"хебрејско писмо"} - Hira{"Хирагана"} - Hrkt{"Катакана или Хирагана"} - Kana{"Катакана"} - Latn{"Латиница"} - } - Types{ - calendar{ - buddhist{"Будистички календар"} - chinese{"Кинески календар"} - gregorian{"Грегоријански календар"} - hebrew{"Хебрејски календар"} - islamic{"Исламски календар"} - islamic-civil{"Исламски цивилни календар"} - japanese{"Јапански календар"} - } - collation{ - direct{"Директно сортирање"} - phonebook{"Сортирање по азбуци"} - pinyin{"Пињин сортирање"} - stroke{"Сортирање по броју црта"} - traditional{"Традиционално сортирање"} - } - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH.mm.ss z", - "HH.mm.ss z", - "HH.mm.ss", - "HH.mm", - "EEEE, dd.MMMM.yyyy.", - "dd.MM.yyyy.", - "dd.MM.yyyy.", - "d.M.yy.", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "нед", - "пон", - "уто", - "сре", - "чет", - "пет", - "суб", - } - narrow{ - "н", - "п", - "у", - "с", - "ч", - "п", - "с", - } - wide{ - "недеља", - "понедељак", - "уторак", - "среда", - "четвртак", - "петак", - "субота", - } - } - } - eras{ - abbreviated{ - "п. н. е.", - "н. е", - } - } - monthNames{ - format{ - abbreviated{ - "јан", - "феб", - "мар", - "апр", - "мај", - "јун", - "јул", - "авг", - "сеп", - "окт", - "нов", - "дец", - } - narrow{ - "ј", - "ф", - "м", - "а", - "м", - "ј", - "ј", - "а", - "с", - "о", - "н", - "д", - } - wide{ - "јануар", - "фебруар", - "март", - "април", - "мај", - "јун", - "јул", - "август", - "септембар", - "октобар", - "новембар", - "децембар", - } - } - } - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} - zoneStrings{ - { - "Europe/Belgrade", - "Централно Европско Време", - "CET", - "Централно Европско Време", - "CET", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/sr.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/sr.xml + */ +sr{ + Countries{ + 001{"Свет"} + 002{"Африка"} + 005{"Јужна Америка"} + 009{"Океанија"} + 011{"Западна Африка"} + 013{"Централна Америка"} + 014{"Источна Африка"} + 015{"Северна Африка"} + 017{"Централна Африка"} + 018{"Јужна Африка"} + 019{"Америке"} + 021{"Северна Америка"} + 029{"Кариби"} + 030{"Источна Азија"} + 035{"Југоисточна Азија"} + 039{"Јужна Европа"} + 053{"Аустралија и Нови Зеланд"} + 054{"Меланезија"} + 057{"Микронезијски регион"} + 061{"Полинезија"} + 062{"Јужно-централна Азија"} + 142{"Азија"} + 145{"Западна Азија"} + 150{"Европа"} + 151{"Источна Европа"} + 155{"Западна Европа"} + 830{"Каналска острва"} + 833{"Острво Ман"} + AD{"Андора"} + AE{"Уједињени Арапски Емирати"} + AF{"Авганистан"} + AL{"Албанија"} + AM{"Арменија"} + AN{"Холандски Антили"} + AO{"Ангола"} + AR{"Аргентина"} + AT{"Аустрија"} + AU{"Аустралија"} + AW{"Аруба"} + AX{"Аландска острва"} + AZ{"Азербејџан"} + BA{"Босна и Херцеговина"} + BB{"Барбадос"} + BD{"Бангладеш"} + BE{"Белгија"} + BF{"Буркина Фасо"} + BG{"Бугарска"} + BH{"Бахреин"} + BI{"Бурунди"} + BJ{"Бенин"} + BM{"Бермуда"} + BN{"Брунеј"} + BO{"Боливија"} + BR{"Браѕил"} + BS{"Бахами"} + BT{"Бутан"} + BV{"Буве"} + BW{"Боцвана"} + BY{"Белорусија"} + BZ{"Белисе"} + CA{"Канада"} + CC{"Кокосова Острва"} + CD{"Демократска република Конго"} + CF{"Централно Афричка Република"} + CG{"Конго"} + CH{"Швајцарска"} + CI{"Обала Слоноваче"} + CL{"Чиле"} + CM{"Камерун"} + CN{"Кина"} + CO{"Колумбија"} + CR{"Костарика"} + CS{"Србија и Црна Гора"} + CU{"Куба"} + CV{"Капе Верде"} + CX{"Божићно Острво"} + CY{"Кипар"} + CZ{"Чешка"} + DE{"Немачка"} + DJ{"Џибути"} + DK{"Данска"} + DM{"Доминика"} + DO{"Доминиканска Република"} + DZ{"Алжир"} + EC{"Еквадор"} + EE{"Естонија"} + EG{"Египат"} + EH{"Западна Сахара"} + ER{"Еритреја"} + ES{"Шпанија"} + ET{"Етиопија"} + FI{"Финска"} + FJ{"Фиџи"} + FK{"Фолкландска Острва"} + FM{"Микронезија"} + FO{"Фарска Острва"} + FR{"Француска"} + GA{"Габон"} + GB{"Велика Британија"} + GD{"Гренада"} + GE{"Грузија"} + GF{"Француска Гвајана"} + GH{"Гана"} + GI{"Гибралтар"} + GL{"Гренланд"} + GM{"Гамбија"} + GN{"Гвинеја"} + GP{"Гваделупе"} + GQ{"Екваторијална Гвинеја"} + GR{"Грчка"} + GS{"Јужна Џорџија и Јужна Сендвич Острва"} + GT{"Гватемала"} + GU{"Гуам"} + GW{"Гвинеја-Бисао"} + GY{"Гвајана"} + HK{"Хонг Конг (С. А. Р. Кина)"} + HM{"Херд и Мекдоналд Острва"} + HN{"Хондурас"} + HR{"Хрватска"} + HT{"Хаити"} + HU{"Мађарска"} + ID{"Индонезија"} + IE{"Ирска"} + IL{"Израел"} + IN{"Индија"} + IQ{"Ирак"} + IR{"Иран"} + IS{"Исланд"} + IT{"Италија"} + JM{"Јамајка"} + JO{"Јордан"} + JP{"Јапан"} + KE{"Кенија"} + KG{"Киргизстан"} + KH{"Камбоџа"} + KI{"Кирибати"} + KM{"Коморска Острва"} + KN{"Сент Китс и Невис"} + KP{"Северна Кореја"} + KR{"Јужна Кореја"} + KW{"Кувајт"} + KY{"Кајманска Острва"} + KZ{"Казахстан"} + LA{"Лаос"} + LB{"Либан"} + LC{"Сент Луција"} + LI{"Лихтенштајн"} + LK{"Шри Ланка"} + LR{"Либерија"} + LS{"Лесото"} + LT{"Литванија"} + LU{"Луксембург"} + LV{"Летонија"} + LY{"Либија"} + MA{"Мароко"} + MC{"Монако"} + MD{"Молдавија"} + MG{"Мадагаскар"} + MH{"Маршалска Острва"} + MK{"Македонија"} + ML{"Мали"} + MM{"Мијанмар"} + MN{"Монголија"} + MO{"Макао (С. А. Р. Кина)"} + MP{"Северна Маријанска Острва"} + MQ{"Мартиник"} + MR{"Мауританија"} + MS{"Монсерат"} + MT{"Малта"} + MU{"Маурицијус"} + MV{"Малдиви"} + MW{"Малави"} + MX{"Мексико"} + MY{"Малезија"} + MZ{"Мозамбик"} + NA{"Намибија"} + NC{"Нова Каледонија"} + NE{"Нигер"} + NF{"Норфолк Острво"} + NG{"Нигерија"} + NI{"Никарагва"} + NL{"Холандија"} + NO{"Норвешка"} + NP{"Непал"} + NR{"Науру"} + NU{"Ниуе"} + NZ{"Нови Зеланд"} + OM{"Оман"} + PA{"Панама"} + PE{"Перу"} + PF{"Француска Полинезија"} + PG{"Папуа Нова Гвинеја"} + PH{"Филипини"} + PK{"Пакистан"} + PL{"Пољска"} + PM{"Сен Пјер и Микелон"} + PN{"Питкерн"} + PR{"Порто Рико"} + PS{"Палестинска територија"} + PT{"Португал"} + PW{"Палау"} + PY{"Парагвај"} + QA{"Катар"} + QO{"Остала океанија"} + RE{"Реинион"} + RO{"Румунија"} + RU{"Русија"} + RW{"Руанда"} + SA{"Саудијска Арабија"} + SB{"Соломонска Острва"} + SC{"Сејшели"} + SD{"Судан"} + SE{"Шведска"} + SG{"Сингапур"} + SH{"Света Јелена"} + SI{"Словенија"} + SJ{"Свалбард и Јанмајен Острва"} + SK{"Словачка"} + SL{"Сијера Леоне"} + SM{"Сан Марино"} + SN{"Сенегал"} + SO{"Сомалија"} + SR{"Суринам"} + ST{"Сао Томе и Принципи"} + SV{"Салвадор"} + SY{"Сирија"} + SZ{"Свазиленд"} + TC{"Туркс и Кајкос Острва"} + TD{"Чад"} + TF{"Француске Јужне Територије"} + TG{"Того"} + TH{"Тајланд"} + TJ{"Таџикистан"} + TK{"Токелау"} + TL{"Тимор-Лесте"} + TM{"Туркменистан"} + TN{"Тунис"} + TO{"Тонга"} + TR{"Турска"} + TT{"Тринидад и Тобаго"} + TV{"Тувалу"} + TW{"Тајван"} + TZ{"Танзанија"} + UA{"Украјина"} + UG{"Уганда"} + UM{"Мања удаљена острва САД"} + US{"Сједињене Америчке Државе"} + UY{"Уругвај"} + UZ{"Узбекистан"} + VA{"Ватикан"} + VC{"Сент Винсент и Гренадини"} + VE{"Венецуела"} + VG{"Британска Девичанска Острва"} + VI{"С.А.Д. Девичанска Острва"} + VN{"Вијетнам"} + VU{"Вануату"} + WF{"Валис и Футуна Острва"} + WS{"Самоа"} + YE{"Јемен"} + YT{"Мајоте"} + ZA{"Јужноафричка Република"} + ZM{"Замбија"} + ZW{"Зимбабве"} + } + Currencies{ + ATS{ + "ATS", + "Аустријски шилинг", + } + AUD{ + "$A", + "Аустралијски долар", + } + BAM{ + "KM", + "Конвертибилна марка", + } + BEF{ + "BF", + "Белгијски франак", + } + BRL{ + "BRL", + "Бразилски Реал", + } + CAD{ + "Can$", + "Канадски долар", + } + CHF{ + "SwF", + "Швајцарски франак", + } + CNY{ + "CNY", + "Кинески Јуан Ренминби", + } + CSD{ + "CSD", + "Српски Динар", + } + DEM{ + "DEM", + "Немачка марка", + } + DKK{ + "DKr", + "Данска круна", + } + ESP{ + "ESP", + "Шпанска пезета", + } + EUR{ + "€", + "ЕВРО", + } + FIM{ + "FIM", + "Финска марка", + } + FRF{ + "FRF", + "Француски франак", + } + GBP{ + "£", + "Фунта стерлинга", + } + GRD{ + "GRD", + "Драхма", + } + HRD{ + "HRD", + "Хрватски динар", + } + HRK{ + "HRK", + "Куна", + } + IEP{ + "IR£", + "Ирска фунта", + } + INR{ + "INR", + "Индијски Рупи", + } + ITL{ + "₤", + "Италијанска лира", + } + JPY{ + "¥", + "Јен", + } + KWD{ + "KD", + "Кувајтски динар", + } + LUF{ + "LUF", + "Луксембуршки франак", + } + NLG{ + "NLG", + "Холандски гулден", + } + NOK{ + "NKr", + "Норвешка круна", + } + PTE{ + "PTE", + "Португалски ескудо", + } + RUB{ + "RUB", + "Руска рубља", + } + RUR{ + "RUR", + "Руска рубља (1991-1998)", + } + SEK{ + "SKr", + "Шведска круна", + } + SIT{ + "SIT", + "Толар", + } + USD{ + "US$", + "Амерички долар", + } + YUN{ + "Дин", + "YUN", + } + } + ExemplarCharacters{"[а-д ђ е-и ј к л љ м н њ о-т ћ у-ч џ ш]"} + Keys{ + calendar{"Календар"} + collation{"Сортирање"} + currency{"Валута"} + } + Languages{ + af{"Африканерски"} + ar{"Арапски"} + be{"Белоруски"} + bg{"Бугарски"} + br{"Бретонски"} + ca{"Каталонски"} + co{"Корзикански"} + cs{"Чешки"} + da{"Дански"} + de{"Немачки"} + el{"Грчки"} + en{"Енглески"} + eo{"Есперанто"} + es{"Шпански"} + et{"Естонски"} + eu{"Баскијски"} + fa{"Персијски"} + fi{"Фински"} + fr{"Француски"} + ga{"Ирски"} + he{"Хебрејски"} + hi{"Хинди"} + hr{"Хрватски"} + hu{"Мађарски"} + hy{"Арменски"} + id{"Индонезијски"} + is{"Исландски"} + it{"Италијански"} + ja{"Јапански"} + ka{"Грузијски"} + km{"Кмерски"} + ko{"Корејски"} + ku{"Курдски"} + ky{"Киргиски"} + la{"Латински"} + lt{"Литвански"} + lv{"Летонски"} + mk{"Македонски"} + mn{"Монголски"} + mo{"Молдавски"} + my{"Бурмански"} + nl{"Холандски"} + no{"Норвешки"} + pl{"Пољски"} + pt{"Португалски"} + rm{"Рето-Романски"} + ro{"Румунски"} + ru{"Руски"} + sa{"Санскрит"} + sh{"Српско-Хрватски"} + sk{"Словачки"} + sl{"Словеначки"} + sq{"Албански"} + sr{"Српски"} + sv{"Шведски"} + sw{"Свахили"} + tr{"Турски"} + uk{"Украјински"} + vi{"Вијетнамски"} + yi{"Јидиш"} + zh{"Кинески"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + ".", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Scripts{ + Arab{"арапско писмо"} + Armn{"јерменско писмо"} + Beng{"бенгалско писмо"} + Brai{"Брајево писмо"} + Cher{"Чероки"} + Copt{"коптичко писмо"} + Cyrl{"Ћирилица"} + Deva{"Деванагари"} + Dsrt{"Дезерет"} + Ethi{"етиопско писмо"} + Geor{"грузијско писмо"} + Goth{"Готика"} + Grek{"грчко писмо"} + Hebr{"хебрејско писмо"} + Hira{"Хирагана"} + Hrkt{"Катакана или Хирагана"} + Kana{"Катакана"} + Latn{"Латиница"} + } + Types{ + calendar{ + buddhist{"Будистички календар"} + chinese{"Кинески календар"} + gregorian{"Грегоријански календар"} + hebrew{"Хебрејски календар"} + islamic{"Исламски календар"} + islamic-civil{"Исламски цивилни календар"} + japanese{"Јапански календар"} + } + collation{ + direct{"Директно сортирање"} + phonebook{"Сортирање по азбуци"} + pinyin{"Пињин сортирање"} + stroke{"Сортирање по броју црта"} + traditional{"Традиционално сортирање"} + } + } + Version{"1.69"} + calendar{ + gregorian{ + DateTimePatterns{ + "HH.mm.ss z", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + "EEEE, dd.MMMM.yyyy.", + "dd.MM.yyyy.", + "dd.MM.yyyy.", + "d.M.yy.", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "нед", + "пон", + "уто", + "сре", + "чет", + "пет", + "суб", + } + wide{ + "недеља", + "понедељак", + "уторак", + "среда", + "четвртак", + "петак", + "субота", + } + } + stand-alone{ + narrow{ + "н", + "п", + "у", + "с", + "ч", + "п", + "с", + } + } + } + eras{ + abbreviated{ + "п. н. е.", + "н. е", + } + } + monthNames{ + format{ + abbreviated{ + "јан", + "феб", + "мар", + "апр", + "мај", + "јун", + "јул", + "авг", + "сеп", + "окт", + "нов", + "дец", + } + wide{ + "јануар", + "фебруар", + "март", + "април", + "мај", + "јун", + "јул", + "август", + "септембар", + "октобар", + "новембар", + "децембар", + } + } + stand-alone{ + narrow{ + "ј", + "ф", + "м", + "а", + "м", + "ј", + "ј", + "а", + "с", + "о", + "н", + "д", + } + } + } + quarters{ + format{ + abbreviated{ + "К1", + "К2", + "К3", + "К4", + } + wide{ + "Први квартал", + "Други квартал", + "Трећи квартал", + "Четврти квартал", + } + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Africa:Lubumbashi"{ + ec{"Лумумбаши"} + } + "Antarctica:South_Pole"{ + ec{"Јужни пол"} + } + "Asia:Anadyr"{ + ec{"Анадир"} + } + "Asia:Kamchatka"{ + ec{"Камчатка"} + } + "Asia:Krasnoyarsk"{ + ec{"Краснојарск"} + } + "Asia:Shanghai"{ + ec{"Шангај"} + } + "Asia:Tashkent"{ + ec{"Ташкент"} + } + "Europe:Belgrade"{ + ec{"Belgrade"} + ld{"Централно Европско Летње Време"} + ls{"Централно Европско Време"} + } + "Europe:Kiev"{ + ec{"Кијев"} + } + "Europe:Moscow"{ + ec{"Москва"} + } + "Europe:Uzhgorod"{ + ec{"Ужгород"} + } + "Europe:Zaporozhye"{ + ec{"Запорожје"} + } + hourFormat{"+HHmm;-HHmm"} + } +} diff --git a/icuSources/data/locales/sr_CS.txt b/icuSources/data/locales/sr_CS.txt new file mode 100644 index 00000000..7e471ffc --- /dev/null +++ b/icuSources/data/locales/sr_CS.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/sr_CS.xml +// * +// *************************************************************************** +sr_CS{ + "%%ALIAS"{"sr_Cyrl_CS"} +} diff --git a/icuSources/data/locales/sr_Cyrl.txt b/icuSources/data/locales/sr_Cyrl.txt index 0ca879d0..65c85803 100644 --- a/icuSources/data/locales/sr_Cyrl.txt +++ b/icuSources/data/locales/sr_Cyrl.txt @@ -1,11 +1,39 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sr_Cyrl.xml +// * Source File:/common/main/sr_Cyrl.xml // * // *************************************************************************** +/** + * ICU source: /xml/main/sr_Cyrl.xml + */ sr_Cyrl{ - Version{"1.2"} + Currencies{ + BRL{ + "R$", + "Бразилски Реал", + } + } + LocaleScript{ + "Cyrl", + } + Version{"1.26"} + calendar{ + gregorian{ + eras{ + wide{ + "Прије нове ере", + "Нове ере", + } + } + } + } + zoneStrings{ + "Europe:Sarajevo"{ + ec{"Sarajevo"} + ls{"Средње Европско Вријеме"} + } + } } diff --git a/icuSources/data/locales/sr_Cyrl_CS.txt b/icuSources/data/locales/sr_Cyrl_CS.txt new file mode 100644 index 00000000..b55cd62b --- /dev/null +++ b/icuSources/data/locales/sr_Cyrl_CS.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/sr_Cyrl_CS.xml +// * +// *************************************************************************** +sr_Cyrl_CS{ + Version{"1.23"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } +} diff --git a/icuSources/data/locales/sr_Cyrl_YU.txt b/icuSources/data/locales/sr_Cyrl_YU.txt index a15c1f80..d16dc16f 100644 --- a/icuSources/data/locales/sr_Cyrl_YU.txt +++ b/icuSources/data/locales/sr_Cyrl_YU.txt @@ -1,11 +1,11 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sr_Cyrl_YU.xml +// * Source File:/common/main/sr_Cyrl_YU.xml // * // *************************************************************************** sr_Cyrl_YU{ - Version{"1.2"} + "%%ALIAS"{"sr_Cyrl_CS"} } diff --git a/icuSources/data/locales/sr_Latn.txt b/icuSources/data/locales/sr_Latn.txt index dc2cd4b6..2db5b093 100644 --- a/icuSources/data/locales/sr_Latn.txt +++ b/icuSources/data/locales/sr_Latn.txt @@ -1,16 +1,46 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sr_Latn.xml +// * Source File:/common/main/sr_Latn.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/sr_Latn.xml + * ICU source: /xml/main/sr_Latn.xml */ sr_Latn{ + AuxExemplarCharacters{"[q w-y]"} Countries{ + 001{"Svet"} + 002{"Afrika"} + 005{"Južna Amerika"} + 009{"Okeanija"} + 011{"Zapadna Afrika"} + 013{"Centralna Amerika"} + 014{"Istočna Afrika"} + 015{"Severna Afrika"} + 017{"Centralna Afrika"} + 018{"Južna Afrika"} + 019{"Amerike"} + 021{"Severna Amerika"} + 029{"Karibi"} + 030{"Istočna Azija"} + 035{"Jugoistočna Azija"} + 039{"Južna Evropa"} + 053{"Australija i Novi Zeland"} + 054{"Melanezija"} + 057{"Micronezija"} + 061{"Polinezija"} + 062{"Južno-centralna Azija"} + 142{"Azija"} + 145{"Zapadna Azija"} + 150{"Evropa"} + 151{"Istočna Evropa"} + 154{"Severna Evropa"} + 155{"Zapadna Evropa"} + 830{"Kanalska ostrva"} + 833{"Ostrvo Man"} AD{"Andora"} AE{"Ujedinjeni Arapski Emirati"} AF{"Avganistan"} @@ -26,6 +56,7 @@ sr_Latn{ AT{"Austrija"} AU{"Australija"} AW{"Aruba"} + AX{"Alandska ostrva"} AZ{"Azerbejdžan"} BA{"Bosna i Hercegovina"} BB{"Barbados"} @@ -59,6 +90,7 @@ sr_Latn{ CN{"Kina"} CO{"Kolumbija"} CR{"Kostarika"} + CS{"Srbija i Crna Gora"} CU{"Kuba"} CV{"Kape Verde"} CX{"Uskršnja Ostrva"} @@ -79,7 +111,7 @@ sr_Latn{ ET{"Etiopija"} FI{"Finska"} FJ{"Fidži"} - FK{"Folklendska Ostrva"} + FK{"Folklandska Ostrva"} FM{"Mikronezija"} FO{"Farska Ostrva"} FR{"Francuska"} @@ -120,7 +152,7 @@ sr_Latn{ JO{"Jordan"} JP{"Japan"} KE{"Kenija"} - KG{"Kirgistan"} + KG{"Kirgizstan"} KH{"Kambodža"} KI{"Kiribati"} KM{"Komorska Ostrva"} @@ -134,7 +166,7 @@ sr_Latn{ LB{"Liban"} LC{"Sent Lucija"} LI{"Lihtenštajn"} - LK{"Šrilanka"} + LK{"Šri Lanka"} LR{"Liberija"} LS{"Lesoto"} LT{"Litvanija"} @@ -154,7 +186,7 @@ sr_Latn{ MP{"Severna Marijanska Ostrva"} MQ{"Martinik"} MR{"Mauritanija"} - MS{"Montserrat"} + MS{"Monserat"} MT{"Malta"} MU{"Mauricius"} MV{"Maldivi"} @@ -190,19 +222,20 @@ sr_Latn{ PW{"Palau"} PY{"Paragvaj"} QA{"Katar"} + QO{"Ostala okeanija"} RE{"Rejunion"} RO{"Rumunija"} RU{"Rusija"} RW{"Ruanda"} SA{"Saudijska Arabija"} - SB{"Solomon Islands"} + SB{"Solomonska Ostrva"} SC{"Sejšeli"} SD{"Sudan"} SE{"Švedska"} SG{"Singapur"} - SH{"Saint Helena"} + SH{"Sveta Jelena"} SI{"Slovenija"} - SJ{"Svalbard i Jan Majen"} + SJ{"Svalbard i Janmajen Ostrva"} SK{"Slovačka"} SL{"Sijera Leone"} SM{"San Marino"} @@ -242,22 +275,158 @@ sr_Latn{ VI{"S.A.D. Devičanska Ostrva"} VN{"Vijetnam"} VU{"Vanuatu"} - WF{"Valis i Futuna"} + WF{"Valis i Futuna Ostrva"} WS{"Samoa"} YE{"Jemen"} - YT{"Mayotte"} - YU{"Jugoslavija"} - ZA{"Južna Afrika"} + YT{"Majote"} + ZA{"Južnoafrička Republika"} ZM{"Zambija"} ZW{"Zimbabve"} } Currencies{ + ATS{ + "ATS", + "Austrijski šiling", + } + AUD{ + "$A", + "Australijski dolar", + } + BAM{ + "KM", + "Konvertibilna marka", + } + BEF{ + "BF", + "Belgijski franak", + } + BRL{ + "BRL", + "Brazilski Real", + } + CAD{ + "Can$", + "Kanadski dolar", + } + CHF{ + "SwF", + "Švajcarski franak", + } + CNY{ + "U", + "Kineski Juan Renminbi", + } + CSD{ + "CSD", + "Srpski Dinar", + } + DEM{ + "DEM", + "Nemačka marka", + } + DKK{ + "DKr", + "Danska kruna", + } + ESP{ + "ESP", + "Španska pezeta", + } + EUR{ + "€", + "EVRO", + } + FIM{ + "FIM", + "Finska marka", + } + FRF{ + "FRF", + "Francuski franak", + } + GBP{ + "£", + "Funta sterlinga", + } + GRD{ + "GRD", + "Drahma", + } + HRD{ + "HRD", + "Hrvatski dinar", + } + HRK{ + "HRK", + "Kuna", + } + IEP{ + "IR£", + "Irska funta", + } + INR{ + "INR", + "Indijski Rupi", + } + ITL{ + "₤", + "Italijanska lira", + } + JPY{ + "¥", + "Jen", + } + KWD{ + "KD", + "Kuvajtski dinar", + } + LUF{ + "LUF", + "Luksemburški franak", + } + NLG{ + "NLG", + "Holandski gulden", + } + NOK{ + "NKr", + "Norveška kruna", + } + PTE{ + "PTE", + "Portugalski eskudo", + } + RUB{ + "RUB", + "Ruska rublja", + } + RUR{ + "RUR", + "Ruska rublja (1991-1998)", + } + SEK{ + "SKr", + "Švedska kruna", + } + SIT{ + "SIT", + "Tolar", + } + USD{ + "US$", + "Američki dolar", + } YUN{ "Din", "YUN", } } - ExemplarCharacters{"[a-p r-v z đ ć č ž š {lj} {nj} {dž}]"} + ExemplarCharacters{"[a-c ć č d đ {dž} e-l {lj} m n {nj} o p r s š t-v z ž]"} + Keys{ + calendar{"Kalendar"} + collation{"Sortiranje"} + currency{"Valuta"} + } Languages{ af{"Afrikanerski"} ar{"Arapski"} @@ -271,6 +440,7 @@ sr_Latn{ de{"Nemački"} el{"Grčki"} en{"Engleski"} + eo{"Esperanto"} es{"Španski"} et{"Estonski"} eu{"Baskijski"} @@ -279,6 +449,7 @@ sr_Latn{ fr{"Francuski"} ga{"Irski"} he{"Hebrejski"} + hi{"Hindi"} hr{"Hrvatski"} hu{"Mađarski"} hy{"Armenski"} @@ -305,6 +476,7 @@ sr_Latn{ rm{"Reto-Romanski"} ro{"Rumunski"} ru{"Ruski"} + sa{"Sanskrit"} sh{"Srpsko-Hrvatski"} sk{"Slovački"} sl{"Slovenački"} @@ -313,7 +485,7 @@ sr_Latn{ sv{"Švedski"} sw{"Svahili"} tr{"Turski"} - uk{"Ukrajnski"} + uk{"Ukrajinski"} vi{"Vijetnamski"} yi{"Jidiš"} zh{"Kineski"} @@ -329,19 +501,44 @@ sr_Latn{ Cher{"Čeroki"} Copt{"koptičko pismo"} Cyrl{"Ćirilica"} + Cyrs{"ćirilica (crkveno slovenska varijanta)"} Deva{"Devanagari"} Dsrt{"Dezeret"} Ethi{"etiopsko pismo"} Geor{"gruzijsko pismo"} + Glag{"glagoljica"} Goth{"Gotika"} Grek{"grčko pismo"} Hebr{"hebrejsko pismo"} Hira{"Hiragana"} Hrkt{"Katakana ili Hiragana"} Kana{"Katakana"} + Khmr{"kmersko pismo"} + Latf{"Latinica (Fraktur varijanta)"} Latn{"Latinica"} + Runr{"runsko pismo"} + } + Types{ + calendar{ + buddhist{"Budistički kalendar"} + chinese{"Kineski kalendar"} + gregorian{"Gregorijanski kalendar"} + hebrew{"Hebrejski kalendar"} + islamic{"Islamski kalendar"} + islamic-civil{"Islamski civilni kalendar"} + japanese{"Japanski kalendar"} + } + collation{ + big5han{"Tradicionalni kineski"} + direct{"Direktno sortiranje"} + gb2312han{"Pojednostavljeni kineski"} + phonebook{"Sortiranje po azbuci"} + pinyin{"Pinjin sortiranje"} + stroke{"Sortiranje po broju crta"} + traditional{"Tradicionalno sortiranje"} + } } - Version{"1.2"} + Version{"1.52"} calendar{ gregorian{ DateTimePatterns{ @@ -366,15 +563,6 @@ sr_Latn{ "pet", "sub", } - narrow{ - "n", - "p", - "u", - "s", - "č", - "p", - "s", - } wide{ "nedelja", "ponedeljak", @@ -385,6 +573,17 @@ sr_Latn{ "subota", } } + stand-alone{ + narrow{ + "n", + "p", + "u", + "s", + "č", + "p", + "s", + } + } } eras{ abbreviated{ @@ -408,6 +607,22 @@ sr_Latn{ "nov", "dec", } + wide{ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar", + } + } + stand-alone{ narrow{ "j", "f", @@ -422,22 +637,71 @@ sr_Latn{ "n", "d", } + } + } + quarters{ + format{ + abbreviated{ + "K1", + "K2", + "K3", + "K4", + } wide{ - "januar", - "februar", - "mart", - "april", - "maj", - "jun", - "jul", - "avgust", - "septembar", - "oktobar", - "novembar", - "decembar", + "Prvi kvartal", + "Drugi kvartal", + "Treći kvartal", + "Četvrti kvartal", } } } } } + zoneStrings{ + "Africa:Kinshasa"{ + ec{"Kinšasa"} + } + "Africa:Lubumbashi"{ + ec{"Lumumbaši"} + } + "Antarctica:South_Pole"{ + ec{"Južni pol"} + } + "Asia:Anadyr"{ + ec{"Anadir"} + } + "Asia:Kamchatka"{ + ec{"Kamčatka"} + } + "Asia:Krasnoyarsk"{ + ec{"Krasnojarsk"} + } + "Asia:Shanghai"{ + ec{"Šangaj"} + } + "Asia:Tashkent"{ + ec{"Taškent"} + } + "Europe:Belgrade"{ + ec{"Belgrade"} + ld{"Centralno Evropsko Letnje Vreme"} + ls{"Centralno Evropsko Vreme"} + } + "Europe:Kiev"{ + ec{"Kijev"} + } + "Europe:Moscow"{ + ec{"Moskva"} + } + "Europe:Sarajevo"{ + ec{"Sarajevo"} + ls{"Srednje Evropsko Vrijeme"} + } + "Europe:Uzhgorod"{ + ec{"Užgorod"} + } + "Europe:Zaporozhye"{ + ec{"Zaporožje"} + } + } } diff --git a/icuSources/data/locales/sr_Latn_CS.txt b/icuSources/data/locales/sr_Latn_CS.txt new file mode 100644 index 00000000..48eca5c0 --- /dev/null +++ b/icuSources/data/locales/sr_Latn_CS.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/sr_Latn_CS.xml +// * +// *************************************************************************** +sr_Latn_CS{ + Version{"1.22"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } +} diff --git a/icuSources/data/locales/sr_Latn_YU.txt b/icuSources/data/locales/sr_Latn_YU.txt index 7a74969c..ddd641d8 100644 --- a/icuSources/data/locales/sr_Latn_YU.txt +++ b/icuSources/data/locales/sr_Latn_YU.txt @@ -1,11 +1,11 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sr_Latn_YU.xml +// * Source File:/common/main/sr_Latn_YU.xml // * // *************************************************************************** sr_Latn_YU{ - Version{"1.2"} + "%%ALIAS"{"sr_Latn_CS"} } diff --git a/icuSources/data/locales/sr_YU.txt b/icuSources/data/locales/sr_YU.txt index d52b6962..a74cfe2b 100644 --- a/icuSources/data/locales/sr_YU.txt +++ b/icuSources/data/locales/sr_YU.txt @@ -1,11 +1,11 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sr_YU.xml +// * Source File:/common/main/sr_YU.xml // * // *************************************************************************** sr_YU{ - "%%ALIAS"{"sr_Cyrl_YU"} + "%%ALIAS"{"sr_Cyrl_CS"} } diff --git a/icuSources/data/locales/sv.txt b/icuSources/data/locales/sv.txt index 6fae926a..70cef567 100644 --- a/icuSources/data/locales/sv.txt +++ b/icuSources/data/locales/sv.txt @@ -1,16 +1,49 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sv.xml +// * Source File:/common/main/sv.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/sv.xml + * ICU source: /xml/main/sv.xml */ sv{ + AuxExemplarCharacters{"[à ã ç é ë í ñ ó w ÿ ü]"} Countries{ + 001{"världen"} + 002{"Afrika"} + 005{"Sydamerika"} + 009{"Oceanien"} + 011{"Västafrika"} + 013{"Centralamerika"} + 014{"Östafrika"} + 015{"Nordafrika"} + 017{"Centralafrika"} + 018{"Södra Afrika"} + 019{"Nord- och Sydamerika"} + 021{"Nordamerika"} + 029{"Karibien"} + 030{"Ostasien"} + 034{"Södra Asien"} + 035{"Sydostasien"} + 039{"Sydeuropa"} + 053{"Australien och Nya Zeeland"} + 054{"Melanesien"} + 057{"Mikronesiska öarna"} + 061{"Polynesien"} + 142{"Asien"} + 143{"Centralasien"} + 145{"Västasien"} + 150{"Europa"} + 151{"Östeuropa"} + 154{"Nordeuropa"} + 155{"Västeuropa"} + 172{"Samväldet av oberoende stater"} + 419{"Latinamerika och Karibien"} + 830{"Kanalöarna"} + 833{"Isle of Man"} AD{"Andorra"} AE{"Förenade Arabemiraten"} AF{"Afghanistan"} @@ -26,6 +59,7 @@ sv{ AT{"Österrike"} AU{"Australien"} AW{"Aruba"} + AX{"Åland"} AZ{"Azerbajdzjan"} BA{"Bosnien och Hercegovina"} BB{"Barbados"} @@ -48,9 +82,7 @@ sv{ BZ{"Belize"} CA{"Kanada"} CC{"Kokosöarna (Keelingöarna)"} - CD{"Demokratiska republiken Kongo"} CF{"Centralafrikanska republiken"} - CG{"Kongo"} CH{"Schweiz"} CI{"Elfenbenskusten"} CK{"Cooköarna"} @@ -59,6 +91,7 @@ sv{ CN{"Kina"} CO{"Colombia"} CR{"Costa Rica"} + CS{"Serbien och Montenegro"} CU{"Kuba"} CV{"Kap Verde"} CX{"Julön"} @@ -73,7 +106,6 @@ sv{ EC{"Ecuador"} EE{"Estland"} EG{"Egypten"} - EH{"Västra Sahara"} ER{"Eritrea"} ES{"Spanien"} ET{"Etiopien"} @@ -172,7 +204,7 @@ sv{ NO{"Norge"} NP{"Nepal"} NR{"Nauru"} - NU{"Niueön"} + NU{"Niue"} NZ{"Nya Zeeland"} OM{"Oman"} PA{"Panama"} @@ -190,6 +222,7 @@ sv{ PW{"Palau"} PY{"Paraguay"} QA{"Qatar"} + QO{"Yttre öar i Oceanien"} RE{"Réunion"} RO{"Rumänien"} RU{"Ryssland"} @@ -208,7 +241,6 @@ sv{ SM{"San Marino"} SN{"Senegal"} SO{"Somalia"} - SP{"Serbien"} SR{"Surinam"} ST{"São Tomé och Príncipe"} SV{"El Salvador"} @@ -220,7 +252,7 @@ sv{ TG{"Togo"} TH{"Thailand"} TJ{"Tadzjikistan"} - TK{"Tokelauöarna"} + TK{"Tokelau"} TL{"Östtimor"} TM{"Turkmenistan"} TN{"Tunisien"} @@ -247,16 +279,11 @@ sv{ WS{"Samoa"} YE{"Jemen"} YT{"Mayotte"} - YU{"Jugoslavien"} ZA{"Sydafrika"} ZM{"Zambia"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andorransk diner", - } ADP{ "ADP", "Andorransk peseta", @@ -265,26 +292,10 @@ sv{ "AED", "Förenade arabemiratens dirham", } - AIF{ - "AIF", - "Affars och Issas-franc", - } - ALK{ - "ALK", - "Albansk lek (1946-1961)", - } ALL{ "lek", "Albansk lek", } - ALV{ - "ALV", - "Albansk lek – Valute)", - } - ALX{ - "ALX", - "Albansk dollar – Foreign Exchange Certificates)", - } AMD{ "dram", "Armenisk dram", @@ -309,18 +320,10 @@ sv{ "AOR", "Angolansk kwanza – Reajustado (1995-1999)", } - AOS{ - "AOS", - "Angolansk escudo", - } ARA{ "ARA", "Argentinsk austral", } - ARM{ - "ARM", - "Argentinsk peso – Moneda nacional", - } ARP{ "ARP", "Argentinsk peso (1983-1985)", @@ -337,10 +340,6 @@ sv{ "$A", "Australisk dollar", } - AUP{ - "AUP", - "Australiskt pund", - } AWG{ "AWG", "Aruba-florin", @@ -357,10 +356,6 @@ sv{ "KM", "Konvertibel bosnisk-hercegovinsk mark", } - BAN{ - "BAN", - "Bosnisk-hercegovinsk ny dinar", - } BBD{ "BDS$", "Barbadisk dollar", @@ -385,22 +380,10 @@ sv{ "lev", "Bulgarisk hård lev", } - BGM{ - "BGM", - "Bulgarisk socialistisk lev", - } BGN{ "BGN", "Bulgarisk ny lev", } - BGO{ - "BGO", - "Bulgarisk lev (1879-1952)", - } - BGX{ - "BGX", - "Bulgarisk lev – Foreign Exchange Certificates", - } BHD{ "BD", "Bahrainsk dinar", @@ -413,10 +396,6 @@ sv{ "Ber$", "Bermuda-dollar", } - BMP{ - "BMP", - "Bermuda-pund", - } BND{ "BND", "Bruneisk dollar", @@ -453,34 +432,18 @@ sv{ "BRR", "Brasiliansk cruzeiro", } - BRZ{ - "BRZ", - "Brasiliansk cruzeiro (1942-1967)", - } BSD{ "BSD", "Bahamansk dollar", } - BSP{ - "BSP", - "Bahamanskt pund", - } BTN{ "Nu", "Bhutanesisk ngultrum", } - BTR{ - "BTR", - "Bhutanesisk rupie", - } BUK{ "BUK", "Burmesisk kyat", } - BUR{ - "BUR", - "Burmesisk rupee", - } BWP{ "BWP", "Botswansk pula", @@ -489,10 +452,6 @@ sv{ "BYB", "Vitrysk ny rubel (1994-1999)", } - BYL{ - "BYL", - "Vitrysk rubel (1992-1994)", - } BYR{ "Rbl", "Vitrysk rubel", @@ -501,10 +460,6 @@ sv{ "BZ$", "Belizisk dollar", } - BZH{ - "BZH", - "Brittiska Honduras-dollar", - } CAD{ "Can$", "Kanadensisk dollar", @@ -513,34 +468,10 @@ sv{ "CDF", "Kongolesisk franc congolais", } - CDG{ - "CDG", - "Kongolesisk franc", - } - CDL{ - "CDL", - "Kongolesisk zaire", - } - CFF{ - "CFF", - "Centralafrikansk CFA-franc", - } CHF{ "SwF", "Schweizisk franc", } - CKD{ - "CKD", - "Cook-dollar", - } - CLC{ - "CLC", - "Chilensk condor", - } - CLE{ - "CLE", - "Chilensk escudo", - } CLF{ "CLF", "Chilensk unidad de fomento", @@ -549,30 +480,10 @@ sv{ "Ch$", "Chilensk peso", } - CMF{ - "CMF", - "Kamerunsk CFA-franc", - } - CNP{ - "CNP", - "Kinesisk jen min piao yuan", - } - CNX{ - "CNX", - "Kinesisk USA-dollar Foreign Exchange Certificates", - } CNY{ "Y", "Kinesisk yuan renminbi", } - COB{ - "COB", - "Colombiansk papperspeso", - } - COF{ - "COF", - "Kongolesisk CFA-franc", - } COP{ "Col$", "Colombiansk peso", @@ -581,10 +492,6 @@ sv{ "C", "Costarikansk colón", } - CSC{ - "CSC", - "Tjeckisk koruna", - } CSK{ "CSK", "Tjeckisk hård koruna", @@ -593,18 +500,10 @@ sv{ "CUP", "Kubansk peso", } - CUX{ - "CUX", - "Kubansk Foreign Exchange Certificates", - } CVE{ "CVEsc", "Kapverdisk escudo", } - CWG{ - "CWG", - "Curaçao-gulden", - } CYP{ "£C", "Cypriotiskt pund", @@ -621,10 +520,6 @@ sv{ "DEM", "Tysk mark", } - DES{ - "DES", - "Tysk sperrmark", - } DJF{ "DF", "Djiboutisk franc", @@ -641,14 +536,6 @@ sv{ "DA", "Algerisk dinar", } - DZF{ - "DZF", - "Algerisk ny franc", - } - DZG{ - "DZG", - "Algerisk franc germinal", - } ECS{ "ECS", "Ecuadoriansk sucre", @@ -677,50 +564,26 @@ sv{ "Br", "Etiopisk birr", } - ETD{ - "ETD", - "Etiopisk dollar", - } EUR{ "€", "Euro", } FIM{ - "FIM", + "mk", "Finsk mark", } - FIN{ - "FIN", - "Finsk mark (1860-1962)", - } FJD{ "F$", "Fijiansk dollar", } - FJP{ - "FJP", - "Fijianskt pund", - } FKP{ "FKP", "Falklandsöarnas pund", } - FOK{ - "FOK", - "Färöisk krona", - } FRF{ "FRF", "Fransk franc", } - FRG{ - "FRG", - "Fransk Franc Germinal/Franc Poincare", - } - GAF{ - "GAF", - "Gabonesisk CFA-franc", - } GBP{ "£", "Brittiskt pund sterling", @@ -737,86 +600,38 @@ sv{ "GHC", "Ghanansk cedi", } - GHO{ - "GHO", - "Ghanansk gammal cedi", - } - GHP{ - "GHP", - "Ghananskt pund", - } - GHR{ - "GHR", - "Ghanansk omvärderad cedi", - } GIP{ "GIP", "Gibraltiskt pund", } - GLK{ - "GLK", - "Grönländsk krona", - } GMD{ "GMD", "Gambisk dalasi", } - GMP{ - "GMP", - "Gambiskt pund", - } GNF{ "GF", "Guineansk franc", } - GNI{ - "GNI", - "Guineansk franc (1960-1972)", - } GNS{ "GNS", "Guineansk syli", } - GPF{ - "GPF", - "Guadeloupisk franc", - } GQE{ "GQE", "Ekvatorialguineansk ekwele guineana", } - GQF{ - "GQF", - "Ekvatorialguineansk franco", - } - GQP{ - "GQP", - "Ekvatorialguineansk peseta guineana", - } GRD{ "GRD", "Grekisk drachma", } - GRN{ - "GRN", - "Grekisk ny drachma", - } GTQ{ "Q", "Guatemalansk quetzal", } - GUF{ - "GUF", - "Franska Guyanas Franc Guiana", - } GWE{ "GWE", "Portugisiska Guinea-escudo", } - GWM{ - "GWM", - "Portugisiska Guinea-mil reis", - } GWP{ "GWP", "Guinea-Bissau-peso", @@ -849,22 +664,6 @@ sv{ "Ft", "Ungersk forint", } - IBP{ - "IBP", - "Nordirländskt pund", - } - IDG{ - "IDG", - "Indonesisk nica gulden", - } - IDJ{ - "IDJ", - "Indonesisk java rupiah", - } - IDN{ - "IDN", - "Indonesisk ny rupiah", - } IDR{ "Rp", "Indonesisk rupiah", @@ -873,10 +672,6 @@ sv{ "IR£", "Irländskt pund", } - ILL{ - "ILL", - "Israelisk shekel", - } ILP{ "ILP", "Israeliskt pund", @@ -885,10 +680,6 @@ sv{ "ILS", "Israelisk ny shekel", } - IMP{ - "IMP", - "Isle of Man-pund sterling", - } INR{ "=0#Rs.|1#Re.|1/common/main/sv_FI.xml // * // *************************************************************************** sv_FI{ - NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", - "#,##0%", - "#E0", + Version{"1.41"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + } + hebrew{ + monthNames{ + format{ + abbreviated{ + "tishrí", + "heshván", + "kislév", + "tevét", + "shevát", + "adár", + "adár II", + "nisán", + "ijjár", + "siván", + "tammúz", + "ab", + "elúl", + } + wide{ + "tishrí", + "heshván", + "kislév", + "tevét", + "shevát", + "adár", + "adár II", + "nisán", + "ijjár", + "siván", + "tammúz", + "ab", + "elúl", + } + } + } + } + islamic{ + monthNames{ + format{ + abbreviated{ + "muharram", + "safar", + "rabi’ al-awwal", + "rabi’ al-akhir", + "jumada-l-ula", + "jumada-l-akhira", + "rajab", + "sha’ban", + "ramadan", + "shawwal", + "dhu-l-ga’da", + "dhu-l-hijja", + } + wide{ + "muharram", + "safar", + "rabi’ al-awwal", + "rabi’ al-akhir", + "jumada-l-ula", + "jumada-l-akhira", + "rajab", + "sha’ban", + "ramadan", + "shawwal", + "dhu-l-ga’da", + "dhu-l-hijja", + } + } + } + } + islamic-civil{ + monthNames{ + format{ + wide{ + "muharram", + "safar", + "rabi’ al-awwal", + "rabi’ al-akhir", + "jumada-l-ula", + "jumada-l-akhira", + "rajab", + "sha’ban", + "ramadan", + "shawwal", + "dhu-l-ga’da", + "dhu-l-hijja", + } + } + } + } } - Version{"1.2"} } diff --git a/icuSources/data/locales/sv_SE.txt b/icuSources/data/locales/sv_SE.txt index 069a8f1d..ee9e51b7 100644 --- a/icuSources/data/locales/sv_SE.txt +++ b/icuSources/data/locales/sv_SE.txt @@ -1,17 +1,86 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sv_SE.xml +// * Source File:/common/main/sv_SE.xml // * // *************************************************************************** sv_SE{ + Countries{ + UM{"USA:s yttre öar"} + } + Languages{ + afa{"afroasiatiskt (annat)"} + cpe{"kreol- och pidginspråk, engelskbaserade (övriga)"} + cpf{"kreol- och pidginspråk, franskbaserade (övriga)"} + cpp{"kreol- och pidginspråk, portugisiskbaserade (övriga)"} + crh{"krimturkiska, krimtatariska"} + crp{"kreol- och pidginspråk (annat)"} + enm{"medelengelska (ca 1100-1500)"} + gil{"gilbertesiska, kiribati"} + gn{"guarani"} + iro{"irokesiska språk"} + khi{"khoisanska (annat)"} + km{"kambodjanska, khmeriska"} + kn{"kanaresiska, kannada"} + lol{"lolo, mongo"} + mga{"medeliriska (ca 900-1200)"} + nah{"nahuatl, aztekiska"} + nds{"lågtyska, lågsaxiska"} + oc{"provensalska (efter 1500), occitanska"} + oj{"odjibwa, chippewa"} + phn{"kananeiska, feniciska"} + ps{"pashto, afghanska"} + rw{"rwanda, kinjarwanda"} + sit{"sinotibetanskt (annat)"} + smi{"samiska språk (övriga)"} + sn{"shona, manshona"} + } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "¤ #,##0.00", "#,##0 %", "#E0", } - Version{"1.2"} + Types{ + collation{ + stroke{"streckordning"} + } + } + Version{"1.44"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 4, + } + DateTimePatterns{ + "'kl. 'HH.mm.ss z", + "HH.mm.ss z", + "HH.mm.ss", + "HH.mm", + "EEEE, yyyy MMMM dd", + "EEE d MMM yyyy", + "d MMM yyyy", + "yyyy-MM-dd", + "{1} {0}", + } + fields{ + dayperiod{ + dn{"tidsvisning"} + } + } + } + } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"”"} + quotationEnd{"’"} + quotationStart{"’"} + } + measurementSystemNames{ + US{"Tumsystem"} + metric{"Metriskt system"} + } } diff --git a/icuSources/data/locales/sw.txt b/icuSources/data/locales/sw.txt index c1a26543..d512bd73 100644 --- a/icuSources/data/locales/sw.txt +++ b/icuSources/data/locales/sw.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sw.xml +// * Source File:/common/main/sw.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/sw.xml + * ICU source: /xml/main/sw.xml */ sw{ Countries{ @@ -26,6 +26,7 @@ sw{ CM{"Kamerun"} CN{"Uchina"} CO{"Kolombia"} + CS{"Serbiya da Montenegro"} CV{"Rasi Verde"} CZ{"Jamhuri ya Czech"} DE{"Udachi"} @@ -100,20 +101,25 @@ sw{ "TZS", } } - ExemplarCharacters{"[a-z]"} + ExemplarCharacters{"[a-d {dh} e-n {ng} {ng'} {ny} o p r s {sh} t {th} u-w y z]"} Languages{ + de{"kijerumani"} + en{"kiingereza"} + es{"kihispania"} + fr{"kifaransa"} + it{"kiitaliano"} + ja{"kijapani"} + pt{"kireno"} + ru{"kirusi"} sw{"Kiswahili"} + zh{"kichina"} } LocaleScript{ "Latn", } - Version{"1.2"} + Version{"1.47"} calendar{ gregorian{ - DateTimeElements:intvector{ - 7, - 1, - } dayNames{ format{ abbreviated{ @@ -145,18 +151,18 @@ sw{ monthNames{ format{ abbreviated{ - "Jan", + "Januari", "Feb", "Mar", - "Apr", + "Aprili", "Mei", - "Jun", + "Juni", "Jul", "Ago", - "Sep", - "Okt", - "Nov", - "Des", + "Septemba", + "Oktoba", + "Novemba", + "Desemba", } wide{ "Januari", @@ -174,16 +180,31 @@ sw{ } } } + quarters{ + format{ + abbreviated{ + "R1", + "R2", + "R3", + "R4", + } + wide{ + "robo ya kwanza", + "robo ya pili", + "robo ya tatu", + "robo ya nne", + } + } + } } } zoneStrings{ - { - "Africa/Nairobi", - "Saa za Africa Mashariki", - "EAT", - "Saa za Africa Mashariki", - "EAT", - "Nairobi", + "Africa:Nairobi"{ + ec{"Nairobi"} + ld{"Saa za Africa Mashariki"} + ls{"Saa za Africa Mashariki"} + sd{"EAT"} + ss{"EAT"} } } } diff --git a/icuSources/data/locales/sw_KE.txt b/icuSources/data/locales/sw_KE.txt index cd325440..67281a04 100644 --- a/icuSources/data/locales/sw_KE.txt +++ b/icuSources/data/locales/sw_KE.txt @@ -1,17 +1,25 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sw_KE.xml +// * Source File:/common/main/sw_KE.xml // * // *************************************************************************** sw_KE{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.38"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + } + } } diff --git a/icuSources/data/locales/sw_TZ.txt b/icuSources/data/locales/sw_TZ.txt index 594238df..66539cc0 100644 --- a/icuSources/data/locales/sw_TZ.txt +++ b/icuSources/data/locales/sw_TZ.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/sw_TZ.xml +// * Source File:/common/main/sw_TZ.xml // * // *************************************************************************** sw_TZ{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.42"} } diff --git a/icuSources/data/locales/ta.txt b/icuSources/data/locales/ta.txt index 31a585af..52d1aa69 100644 --- a/icuSources/data/locales/ta.txt +++ b/icuSources/data/locales/ta.txt @@ -1,417 +1,426 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ta.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ta.xml - */ -ta{ - Countries{ - AD{"அன்டோரா"} - AE{"ஐக்கிய அரபு கூட்டாட்சி"} - AF{"ஆப்கானிஸ்தான்"} - AG{"ஆன்டிகுவா பார்புடா"} - AL{"அல்பேனியா"} - AM{"ஆர்மீனியா"} - AO{"அங்கோலா"} - AR{"அர்ஜெண்டினா"} - AT{"ஆஸ்திரியா"} - AU{"ஆஸ்திரேலியா"} - AZ{"அஜர்பைஜான்"} - BA{"போஸ்னியா ஹெர்ஸிகோவினா"} - BB{"பார்படோஸ்"} - BD{"பங்களாதேஷ்"} - BE{"பெல்ஜியம்"} - BF{"பர்கினோ பாஸோ"} - BG{"பல்கேரியா"} - BH{"பஹ்ரைன்"} - BI{"புருண்டி"} - BJ{"பெனின்"} - BN{"புரூனேய்"} - BO{"பொலிவியா"} - BR{"பிரேஸில்"} - BS{"பஹாமாஸ்"} - BT{"பூடான்"} - BW{"போட்ஸ்வானா"} - BY{"பெலாரூஸ்"} - BZ{"பெலிஸ்"} - CA{"கனடா"} - CF{"மத்திய ஆப்ரிக்கக் குடியரசு"} - CG{"காங்கோ"} - CH{"ஸ்விட்சர்லாந்து"} - CI{"ஐவரி கோஸ்ட்"} - CL{"சிலி"} - CM{"கேமரூன்"} - CN{"சீன"} - CO{"கொலம்பியா"} - CR{"கோஸ்டாரிகா"} - CU{"கியூபா"} - CV{"கேப் வெர்டே"} - CY{"சைப்ரஸ்"} - CZ{"செக் குடியரசு"} - DE{"ஜெர்மன்"} - DJ{"ஜிபௌடி"} - DK{"டென்மார்க்"} - DM{"டொமினிகா"} - DO{"டொமினிகன் குடியரசு"} - DZ{"அல்ஜீரியா"} - EC{"ஈக்வடார்"} - EE{"எஸ்டோனியா"} - EG{"எகிப்து"} - ES{"ஸ்பெயின்"} - ET{"எதியோப்பியா"} - FI{"பின்லாந்து"} - FJ{"பிஜி"} - FR{"பிரான்ஸ்"} - GA{"காபோன்"} - GB{"பிரிடிஷ் கூட்டரசு"} - GD{"கிரனெடா"} - GE{"ஜார்ஜியா"} - GH{"கானா"} - GM{"காம்பியா"} - GN{"கினி"} - GQ{"ஈக்குவிடோரியல் கினி"} - GR{"கிரீஸ்"} - GT{"குவாத்தாமாலா"} - GW{"கினி-பிஸ்ஸாவ்"} - GY{"கயானா"} - HN{"ஹாண்டுராஸ்"} - HR{"குரோசியா"} - HT{"ஹெய்தி"} - HU{"ஹங்கேரி"} - ID{"இந்தோனேஷியா"} - IE{"அயர்லாந்து"} - IL{"இஸ்ரேல்"} - IN{"இந்தியா"} - IQ{"இராக்"} - IR{"ஈரான்"} - IS{"ஐஸ்லாந்து"} - IT{"இத்தாலி"} - JM{"ஜமாய்க்கா"} - JO{"ஜொர்டான்"} - JP{"ஜப்பான்"} - KE{"கென்யா"} - KG{"கிர்கிஸ்தான்"} - KH{"கம்போடியா"} - KI{"கிரிபடி"} - KM{"கோமரோஸ்"} - KP{"வட கொரியா"} - KR{"தென் கொரியா"} - KW{"குவைத்து"} - KZ{"கஜகஸ்தான்"} - LA{"லாவோஸ்"} - LB{"லெபனான்"} - LI{"லிச்டெண்ஸ்டீன்"} - LK{"இலங்கை"} - LR{"லைபீரியா"} - LS{"லெசோதோ"} - LT{"லிதுவேனியா"} - LU{"லக்ஸ்சம்பர்க்"} - LV{"லாட்வியா"} - LY{"லிப்யா"} - MA{"மொரோக்கோ"} - MC{"மொனாக்கோ"} - MD{"மால்டோவா"} - MK{"மசெடோணியா"} - ML{"மாலீ"} - MM{"மியான்மார்"} - MN{"மங்கோலியா"} - MT{"மால்டா"} - MV{"மாலத்தீவு"} - MW{"மலாவீ"} - MX{"மெக்சிகோ"} - MY{"மலேஷியா"} - NA{"னாமீபியா"} - NI{"நிகாராகுவா"} - NL{"நெதர்லாந்து"} - NO{"நார்வே"} - NP{"நேபாளம்"} - NR{"நௌரு"} - NZ{"நியூசிலாந்து"} - OM{"ஓமான்"} - PA{"பணாமா"} - PE{"பெரு"} - PG{"பாப்புவா-நியூகினி"} - PH{"பிலிப்பைன்ஸ்"} - PK{"பாகிஸ்தான்"} - PL{"போலந்து"} - PT{"போர்ச்சுக்கல்"} - PY{"பாரகுவே"} - QA{"காடார்"} - RO{"ருமேனியா"} - RU{"ரஷ்யா"} - SA{"சவூதி அரேபியா"} - SB{"சாலமன் தீவுகள்"} - SE{"ஸ்வீடன்"} - SG{"சிங்கப்பூர்"} - SI{"ஸ்லோவேனியா"} - SK{"ஸ்லோவாகியா"} - SM{"சான்மெரினோ"} - SR{"சூரினாம்"} - SV{"எல் சால்வடார்"} - SY{"சிரியா"} - TD{"சாட்"} - TH{"தாய்லாந்து"} - TJ{"தாஜிகிஸ்தான்"} - TM{"துர்க்மெனிஸ்தான்"} - TN{"துனிசியா"} - TO{"தொங்கா"} - TR{"துருக்கி"} - TT{"திரினிடாட் தொபாகோ"} - TV{"துவாலூ"} - TW{"தைவான்"} - UA{"உக்ரைன்"} - US{"ஐக்கிய அமெரிக்கா குடியரசு"} - UY{"உருகுவே"} - UZ{"உஸ்பெகிஸ்தான்"} - VA{"வாடிகன்"} - VE{"வெனஜுவேலா"} - VN{"வியட்நாம்"} - VU{"வனுவாட்டு"} - WS{"சமோவா"} - YE{"யேமன்"} - ZA{"தென் ஆப்ரிக்கா"} - ZW{"ஜிம்பாப்வே"} - } - Currencies{ - INR{ - "ரூ", - "INR", - } - } - ExemplarCharacters{"[ஂ-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-்]"} - Languages{ - aa{"அபார்"} - ab{"அப்காஸின்"} - af{"ஆப்ரிகன்ஸ்"} - am{"அம்ஹாரிக்"} - ar{"அரபு"} - as{"அஸ்ஸாமி"} - ay{"அயமரா"} - az{"அசர்பாய்ஜானி"} - ba{"பாஷ்கிர்0"} - be{"பைலோருஷ்ன்"} - bg{"பல்கேரியன்"} - bh{"பிஹாரி"} - bi{"பிஸ்லாமா"} - bn{"வங்காளம்"} - bo{"திபெத்து"} - br{"பிரிடன்"} - ca{"காடலான்"} - co{"கார்சியன்"} - cs{"செக்"} - cy{"வெல்ஷ்"} - da{"டானிஷ்"} - de{"ஜெர்மன்"} - dz{"புடானி"} - el{"கிரேக்கம்"} - en{"ஆங்கிலம்"} - eo{"எஸ்பரேன்டோ"} - es{"ஸ்பேனிஷ்"} - et{"எஸ்டோனியன்"} - eu{"பஸ்க்"} - fa{"பர்ஸியன்"} - fi{"பின்னிஷ்"} - fj{"பிஜி"} - fo{"பைரோஸி"} - fr{"பிரெஞ்சு"} - fy{"பிரிஷியன்"} - ga{"ஐரிஷ்"} - gd{"ஸ்காட்ஸ் காலெக்"} - gl{"கெலிஸியன்"} - gn{"குரானி"} - gu{"குஜராத்தி"} - ha{"ஹொஸா"} - he{"ஹுப்ரு"} - hi{"இந்தி"} - hr{"கரோஷியன்"} - hu{"ஹங்கேரியன்"} - hy{"ஆர்மேனியன்"} - ia{"இன்டர்லிங்குவா"} - id{"இந்தோனேஷியன்"} - ie{"இன்டர்லிங்குவா"} - ik{"இனுபெக்"} - is{"ஐஸ்லென்டிக்"} - it{"இத்தாலியன்"} - iu{"இனுகிடட்"} - ja{"ஜப்பானீஸ்"} - jv{"ஜாவானீஸ்"} - ka{"கன்னடம்"} - kk{"கசாக்"} - kl{"கிரின்லென்டிக்"} - km{"கம்போடியன்"} - kn{"கன்னடா"} - ko{"கொரியன்"} - kok{"கொங்கனி"} - ks{"காஷ்மிரி"} - ku{"குர்திஷ்"} - ky{"கிர்கிஷ்"} - la{"லாதின்"} - ln{"லிங்காலா"} - lo{"லோத்தியன்"} - lt{"லுத்தேனியன்"} - lv{"லேட்வியன் (லேட்டிஷ்)"} - mg{"மலகெஸி"} - mi{"மோரி"} - mk{"மெக்கடோனியன்"} - ml{"மலையாளம்"} - mn{"மங்கோலியன்"} - mo{"மோல்டேவியன்"} - mr{"மராத்தி"} - ms{"மலாய்"} - mt{"மால்டிஸ்"} - my{"பர்மிஸ்"} - na{"நாரூ"} - ne{"நேப்பாலி"} - nl{"டச்சு"} - no{"நார்வேகியன்"} - oc{"ஆகிடியன்"} - om{"ஒரோம (அபன்)"} - or{"ஒரியா"} - pa{"பஞ்சாபி"} - pl{"போலிஷ்"} - ps{"பேஷ்டோ (புஷ்டோ)"} - pt{"போர்த்துகீஸ்"} - qu{"கியுசா"} - rm{"ரைட்டோ-ரோமென்ஸ்"} - rn{"கிருந்தி"} - ro{"ரோமேனியன்"} - root{"தமிழ்"} - ru{"ரஷியன்"} - rw{"கின்யர்வென்டா"} - sa{"சமஸ்கிருதம்"} - sd{"சிந்தி"} - sg{"சென்க்ரோ"} - sh{"செர்போ-க்ரோஷியன்"} - si{"சிங்களம்"} - sk{"ஸ்லோவெக்"} - sl{"ஸ்லோவினேயின்"} - sm{"ஸெமோன்"} - sn{"ஷோனா"} - so{"சோமாலி"} - sq{"அல்பெனியன்"} - sr{"சர்பியன்"} - ss{"ஷிஸ்வாதி"} - st{"ஷெஸ்ஸோதோ"} - su{"சுடானீஸ்"} - sv{"ஷீவிடிஸ்"} - sw{"சுவாஹிலி"} - ta{"தமிழ்"} - te{"தெலுங்கு"} - tg{"தாஜிக்"} - th{"தாய்"} - ti{"டிக்ரின்யா"} - tk{"டர்க்மென்"} - tl{"டாகாலோக்"} - tn{"ஸெட்ஸ்வானா"} - to{"டோங்கா"} - tr{"டர்கிஷ்"} - ts{"ஸோங்கா"} - tt{"டாடர்"} - tw{"த்திவி"} - ug{"யுகுர்"} - uk{"உக்ரேனியன்"} - ur{"உருது"} - uz{"உஸ்பெக்"} - vi{"வியட்நாமிஸ்"} - vo{"ஒலபுக்"} - wo{"ஒலோப்"} - xh{"ஹோஷா"} - yi{"ஈத்திஷ"} - yo{"யோருப்பா"} - za{"ஜுவாங்"} - zh{"சீனம்"} - zu{"ஜூலூ"} - } - LocaleScript{ - "Taml", - } - NumberPatterns{ - "#,##,##0.###;-#,##,##0.###", - "¤ #,##,##0.00;-¤ #,##,##0.00", - "#,##,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "காலை", - "மாலை", - } - dayNames{ - format{ - abbreviated{ - "ஞா", - "தி", - "செ", - "பு", - "வி", - "வெ", - "ச", - } - wide{ - "ஞாயிறு", - "திங்கள்", - "செவ்வாய்", - "புதன்", - "வியாழன்", - "வெள்ளி", - "சனி", - } - } - } - eras{ - abbreviated{ - "கிமு", - "கிபி", - } - } - monthNames{ - format{ - abbreviated{ - "ஜன.", - "பிப்.", - "மார்.", - "ஏப்.", - "மே", - "ஜூன்", - "ஜூலை", - "ஆக.", - "செப்.", - "அக்.", - "நவ.", - "டிச.", - } - wide{ - "ஜனவரி", - "பிப்ரவரி", - "மார்ச்", - "ஏப்ரல்", - "மே", - "ஜூன்", - "ஜூலை", - "ஆகஸ்ட்", - "செப்டம்பர்", - "அக்டோபர்", - "நவம்பர்", - "டிசம்பர்", - } - } - } - } - } - zoneStrings{ - { - "Asia/Calcutta", - "இந்திய நேரப்படி", - "IST", - "இந்திய நேரப்படி", - "IST", - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ta.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ta.xml + */ +ta{ + Countries{ + AD{"அன்டோரா"} + AE{"ஐக்கிய அரபு கூட்டாட்சி"} + AF{"ஆப்கானிஸ்தான்"} + AG{"ஆன்டிகுவா பார்புடா"} + AL{"அல்பேனியா"} + AM{"ஆர்மீனியா"} + AO{"அங்கோலா"} + AR{"அர்ஜெண்டினா"} + AT{"ஆஸ்திரியா"} + AU{"ஆஸ்திரேலியா"} + AZ{"அஜர்பைஜான்"} + BA{"போஸ்னியா ஹெர்ஸிகோவினா"} + BB{"பார்படோஸ்"} + BD{"பங்களாதேஷ்"} + BE{"பெல்ஜியம்"} + BF{"பர்கினோ பாஸோ"} + BG{"பல்கேரியா"} + BH{"பஹ்ரைன்"} + BI{"புருண்டி"} + BJ{"பெனின்"} + BN{"புரூனேய்"} + BO{"பொலிவியா"} + BR{"பிரேஸில்"} + BS{"பஹாமாஸ்"} + BT{"பூடான்"} + BW{"போட்ஸ்வானா"} + BY{"பெலாரூஸ்"} + BZ{"பெலிஸ்"} + CA{"கனடா"} + CF{"மத்திய ஆப்ரிக்கக் குடியரசு"} + CG{"காங்கோ"} + CH{"ஸ்விட்சர்லாந்து"} + CI{"ஐவரி கோஸ்ட்"} + CL{"சிலி"} + CM{"கேமரூன்"} + CN{"சீன"} + CO{"கொலம்பியா"} + CR{"கோஸ்டாரிகா"} + CU{"கியூபா"} + CV{"கேப் வெர்டே"} + CY{"சைப்ரஸ்"} + CZ{"செக் குடியரசு"} + DE{"ஜெர்மன்"} + DJ{"ஜிபௌடி"} + DK{"டென்மார்க்"} + DM{"டொமினிகா"} + DO{"டொமினிகன் குடியரசு"} + DZ{"அல்ஜீரியா"} + EC{"ஈக்வடார்"} + EE{"எஸ்டோனியா"} + EG{"எகிப்து"} + ES{"ஸ்பெயின்"} + ET{"எதியோப்பியா"} + FI{"பின்லாந்து"} + FJ{"பிஜி"} + FR{"பிரான்ஸ்"} + GA{"காபோன்"} + GB{"பிரிடிஷ் கூட்டரசு"} + GD{"கிரனெடா"} + GE{"ஜார்ஜியா"} + GH{"கானா"} + GM{"காம்பியா"} + GN{"கினி"} + GQ{"ஈக்குவிடோரியல் கினி"} + GR{"கிரீஸ்"} + GT{"குவாத்தாமாலா"} + GW{"கினி-பிஸ்ஸாவ்"} + GY{"கயானா"} + HN{"ஹாண்டுராஸ்"} + HR{"குரோசியா"} + HT{"ஹெய்தி"} + HU{"ஹங்கேரி"} + ID{"இந்தோனேஷியா"} + IE{"அயர்லாந்து"} + IL{"இஸ்ரேல்"} + IN{"இந்தியா"} + IQ{"இராக்"} + IR{"ஈரான்"} + IS{"ஐஸ்லாந்து"} + IT{"இத்தாலி"} + JM{"ஜமாய்க்கா"} + JO{"ஜொர்டான்"} + JP{"ஜப்பான்"} + KE{"கென்யா"} + KG{"கிர்கிஸ்தான்"} + KH{"கம்போடியா"} + KI{"கிரிபடி"} + KM{"கோமரோஸ்"} + KP{"வட கொரியா"} + KR{"தென் கொரியா"} + KW{"குவைத்து"} + KZ{"கஜகஸ்தான்"} + LA{"லாவோஸ்"} + LB{"லெபனான்"} + LI{"லிச்டெண்ஸ்டீன்"} + LK{"இலங்கை"} + LR{"லைபீரியா"} + LS{"லெசோதோ"} + LT{"லிதுவேனியா"} + LU{"லக்ஸ்சம்பர்க்"} + LV{"லாட்வியா"} + LY{"லிப்யா"} + MA{"மொரோக்கோ"} + MC{"மொனாக்கோ"} + MD{"மால்டோவா"} + MK{"மசெடோணியா"} + ML{"மாலீ"} + MM{"மியான்மார்"} + MN{"மங்கோலியா"} + MT{"மால்டா"} + MV{"மாலத்தீவு"} + MW{"மலாவீ"} + MX{"மெக்சிகோ"} + MY{"மலேஷியா"} + NA{"னாமீபியா"} + NI{"நிகாராகுவா"} + NL{"நெதர்லாந்து"} + NO{"நார்வே"} + NP{"நேபாளம்"} + NR{"நௌரு"} + NZ{"நியூசிலாந்து"} + OM{"ஓமான்"} + PA{"பணாமா"} + PE{"பெரு"} + PG{"பாப்புவா-நியூகினி"} + PH{"பிலிப்பைன்ஸ்"} + PK{"பாகிஸ்தான்"} + PL{"போலந்து"} + PT{"போர்ச்சுக்கல்"} + PY{"பாரகுவே"} + QA{"காடார்"} + RO{"ருமேனியா"} + RU{"ரஷ்யா"} + SA{"சவூதி அரேபியா"} + SB{"சாலமன் தீவுகள்"} + SE{"ஸ்வீடன்"} + SG{"சிங்கப்பூர்"} + SI{"ஸ்லோவேனியா"} + SK{"ஸ்லோவாகியா"} + SM{"சான்மெரினோ"} + SR{"சூரினாம்"} + SV{"எல் சால்வடார்"} + SY{"சிரியா"} + TD{"சாட்"} + TH{"தாய்லாந்து"} + TJ{"தாஜிகிஸ்தான்"} + TM{"துர்க்மெனிஸ்தான்"} + TN{"துனிசியா"} + TO{"தொங்கா"} + TR{"துருக்கி"} + TT{"திரினிடாட் தொபாகோ"} + TV{"துவாலூ"} + TW{"தைவான்"} + UA{"உக்ரைன்"} + US{"ஐக்கிய அமெரிக்கா குடியரசு"} + UY{"உருகுவே"} + UZ{"உஸ்பெகிஸ்தான்"} + VA{"வாடிகன்"} + VE{"வெனஜுவேலா"} + VN{"வியட்நாம்"} + VU{"வனுவாட்டு"} + WS{"சமோவா"} + YE{"யேமன்"} + ZA{"தென் ஆப்ரிக்கா"} + ZW{"ஜிம்பாப்வே"} + } + Currencies{ + INR{ + "ரூ", + "INR", + } + } + ExemplarCharacters{"[ஃ அ-ஊ எ-ஐ ஒ-க ங ச ஜ ஞ ட ண த ந-ப ம-வ ஷ-ஹ ா-ூ ெ-ை ொ-்]"} + Languages{ + aa{"அபார்"} + ab{"அப்காஸின்"} + af{"ஆப்ரிகன்ஸ்"} + am{"அம்ஹாரிக்"} + ar{"அரபு"} + as{"அஸ்ஸாமி"} + ay{"அயமரா"} + az{"அசர்பாய்ஜானி"} + ba{"பாஷ்கிர்0"} + be{"பைலோருஷ்ன்"} + bg{"பல்கேரியன்"} + bh{"பிஹாரி"} + bi{"பிஸ்லாமா"} + bn{"வங்காளம்"} + bo{"திபெத்து"} + br{"பிரிடன்"} + ca{"காடலான்"} + co{"கார்சியன்"} + cs{"செக்"} + cy{"வெல்ஷ்"} + da{"டானிஷ்"} + de{"ஜெர்மன்"} + dz{"புடானி"} + el{"கிரேக்கம்"} + en{"ஆங்கிலம்"} + eo{"எஸ்பரேன்டோ"} + es{"ஸ்பேனிஷ்"} + et{"எஸ்டோனியன்"} + eu{"பஸ்க்"} + fa{"பர்ஸியன்"} + fi{"பின்னிஷ்"} + fj{"பிஜி"} + fo{"பைரோஸி"} + fr{"பிரெஞ்சு"} + fy{"பிரிஷியன்"} + ga{"ஐரிஷ்"} + gd{"ஸ்காட்ஸ் காலெக்"} + gl{"கெலிஸியன்"} + gn{"குரானி"} + gu{"குஜராத்தி"} + ha{"ஹொஸா"} + he{"ஹுப்ரு"} + hi{"இந்தி"} + hr{"கரோஷியன்"} + hu{"ஹங்கேரியன்"} + hy{"ஆர்மேனியன்"} + ia{"இன்டர்லிங்குவா [ia]"} + id{"இந்தோனேஷியன்"} + ie{"இன்டர்லிங்குவா"} + ik{"இனுபெக்"} + is{"ஐஸ்லென்டிக்"} + it{"இத்தாலியன்"} + iu{"இனுகிடட்"} + ja{"ஜப்பானீஸ்"} + jv{"ஜாவானீஸ்"} + ka{"கன்னடம்"} + kk{"கசாக்"} + kl{"கிரின்லென்டிக்"} + km{"கம்போடியன்"} + kn{"கன்னடா"} + ko{"கொரியன்"} + kok{"கொங்கனி"} + ks{"காஷ்மிரி"} + ku{"குர்திஷ்"} + ky{"கிர்கிஷ்"} + la{"லாதின்"} + ln{"லிங்காலா"} + lo{"லோத்தியன்"} + lt{"லுத்தேனியன்"} + lv{"லேட்வியன் (லேட்டிஷ்)"} + mg{"மலகெஸி"} + mi{"மோரி"} + mk{"மெக்கடோனியன்"} + ml{"மலையாளம்"} + mn{"மங்கோலியன்"} + mo{"மோல்டேவியன்"} + mr{"மராத்தி"} + ms{"மலாய்"} + mt{"மால்டிஸ்"} + my{"பர்மிஸ்"} + na{"நாரூ"} + ne{"நேப்பாலி"} + nl{"டச்சு"} + no{"நார்வேகியன்"} + oc{"ஆகிடியன்"} + om{"ஒரோம (அபன்)"} + or{"ஒரியா"} + pa{"பஞ்சாபி"} + pl{"போலிஷ்"} + ps{"பேஷ்டோ (புஷ்டோ)"} + pt{"போர்த்துகீஸ்"} + qu{"கியுசா"} + rm{"ரைட்டோ-ரோமென்ஸ்"} + rn{"கிருந்தி"} + ro{"ரோமேனியன்"} + ru{"ரஷியன்"} + rw{"கின்யர்வென்டா"} + sa{"சமஸ்கிருதம்"} + sd{"சிந்தி"} + sg{"சென்க்ரோ"} + sh{"செர்போ-க்ரோஷியன்"} + si{"சிங்களம்"} + sk{"ஸ்லோவெக்"} + sl{"ஸ்லோவினேயின்"} + sm{"ஸெமோன்"} + sn{"ஷோனா"} + so{"சோமாலி"} + sq{"அல்பெனியன்"} + sr{"சர்பியன்"} + ss{"ஷிஸ்வாதி"} + st{"ஷெஸ்ஸோதோ"} + su{"சுடானீஸ்"} + sv{"ஷீவிடிஸ்"} + sw{"சுவாஹிலி"} + ta{"தமிழ்"} + te{"தெலுங்கு"} + tg{"தாஜிக்"} + th{"தாய்"} + ti{"டிக்ரின்யா"} + tk{"டர்க்மென்"} + tl{"டாகாலோக்"} + tn{"ஸெட்ஸ்வானா"} + to{"டோங்கா"} + tr{"டர்கிஷ்"} + ts{"ஸோங்கா"} + tt{"டாடர்"} + tw{"த்திவி"} + ug{"யுகுர்"} + uk{"உக்ரேனியன்"} + ur{"உருது"} + uz{"உஸ்பெக்"} + vi{"வியட்நாமிஸ்"} + vo{"ஒலபுக்"} + wo{"ஒலோப்"} + xh{"ஹோஷா"} + yi{"ஈத்திஷ"} + yo{"யோருப்பா"} + za{"ஜுவாங்"} + zh{"சீனம்"} + zu{"ஜூலூ"} + } + LocaleScript{ + "Taml", + } + NumberPatterns{ + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", + "#E0", + } + Version{"1.52"} + calendar{ + gregorian{ + AmPmMarkers{ + "காலை", + "மாலை", + } + dayNames{ + format{ + abbreviated{ + "ஞா", + "தி", + "செ", + "பு", + "வி", + "வெ", + "ச", + } + wide{ + "ஞாயிறு", + "திங்கள்", + "செவ்வாய்", + "புதன்", + "வியாழன்", + "வெள்ளி", + "சனி", + } + } + } + eras{ + abbreviated{ + "கிமு", + "கிபி", + } + } + monthNames{ + format{ + abbreviated{ + "ஜன.", + "பிப்.", + "மார்.", + "ஏப்.", + "மே", + "ஜூன்", + "ஜூலை", + "ஆக.", + "செப்.", + "அக்.", + "நவ.", + "டிச.", + } + wide{ + "ஜனவரி", + "பிப்ரவரி", + "மார்ச்", + "ஏப்ரல்", + "மே", + "ஜூன்", + "ஜூலை", + "ஆகஸ்ட்", + "செப்டம்பர்", + "அக்டோபர்", + "நவம்பர்", + "டிசம்பர்", + } + } + } + quarters{ + format{ + wide{ + "வந்ந௧ 1", + "ரெஂட௨ 2", + "மூடு௩ 3", + "நால்௪ 4", + } + } + } + } + } + zoneStrings{ + "Asia:Calcutta"{ + ec{"Calcutta"} + ld{"இந்திய நேரப்படி"} + ls{"இந்திய நேரப்படி"} + sd{"IST"} + ss{"IST"} + } + } +} diff --git a/icuSources/data/locales/ta_IN.txt b/icuSources/data/locales/ta_IN.txt index da8b1433..d00e6b5b 100644 --- a/icuSources/data/locales/ta_IN.txt +++ b/icuSources/data/locales/ta_IN.txt @@ -1,25 +1,15 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ta_IN.xml +// * Source File:/common/main/ta_IN.xml // * // *************************************************************************** ta_IN{ - NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", - "#E0", - } - Version{"1.2"} + Version{"1.47"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", diff --git a/icuSources/data/locales/te.txt b/icuSources/data/locales/te.txt index 54dfe1f8..3b4dc575 100644 --- a/icuSources/data/locales/te.txt +++ b/icuSources/data/locales/te.txt @@ -1,106 +1,205 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/te.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/te.xml - */ -te{ - Countries{ - IN{"భారత దేళ౦"} - } - Currencies{ - INR{ - "రూ.", - "INR", - } - } - ExemplarCharacters{"[[:Telu:]‌‍]"} - Languages{ - te{"తెలుగు"} - } - LocaleScript{ - "Telu", - } - NumberElements{ - ".", - ",", - ";", - "%", - "౦", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "పూర్వాహ్న", - "అపరాహ్న", - } - dayNames{ - format{ - abbreviated{ - "ఆది", - "సోమ", - "మంగళ", - "బుధ", - "గురు", - "శుక్ర", - "శని", - } - wide{ - "ఆదివారం", - "సోమవారం", - "మంగళవారం", - "బుధవారం", - "గురువారం", - "శుక్రవారం", - "శనివారం", - } - } - } - monthNames{ - format{ - abbreviated{ - "జనవరి", - "ఫిబ్రవరి", - "మార్చి", - "ఏప్రిల్", - "మే", - "జూన్", - "జూలై", - "ఆగస్టు", - "సెప్టెంబర్", - "అక్టోబర్", - "నవంబర్", - "డిసెంబర్", - } - wide{ - "జనవరి", - "ఫిబ్రవరి", - "మార్చి", - "ఏప్రిల్", - "మే", - "జూన్", - "జూలై", - "ఆగస్టు", - "సెప్టెంబర్", - "అక్టోబర్", - "నవంబర్", - "డిసెంబర్", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/te.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/te.xml + */ +te{ + AuxExemplarCharacters{"[\u200C \u200D ౦-౯]"} + Countries{ + BR{"బ్రజిల్"} + CN{"చైనా"} + DE{"ఙర్మని"} + FR{"ఫ్రాన్స్‌"} + GB{"బ్రిటన్"} + IN{"భారత దేళం"} + IT{"ఇటలి"} + JP{"జపాసు"} + RU{"రష్య"} + US{"ఐక్య రాష్ట్ర అమెరిక"} + } + Currencies{ + BRL{ + "రి$", + "బ్రజిల్ దేశ రియాల్", + } + CNY{ + "యు", + "చైనా దేశ యువాన్ రెన్‌మిన్‌బి", + } + EUR{ + "€", + "యురొ", + } + GBP{ + "£", + "బ్ిటిష్ పౌన్డ స్టెర్లిగ్", + } + INR{ + "రూ.", + "రూపాయి", + } + JPY{ + "¥", + "జపాను దేశ యెస్", + } + RUB{ + "రూబల్", + "రష్య దేశ రూబల్", + } + USD{ + "$", + "ఐక్య రాష్ట్ర అమెరిక డాలర్", + } + } + ExemplarCharacters{"[అ-ఋ ౠ ఌ ౡ ఎ-ఐ ఒ-న ప-ళ వ-హ ఁ-ః ్ ా-ౄ ె-ై ొ-ౌ ౕ ౖ]"} + Languages{ + ar{"అరబిక్"} + de{"ఙర్మన్"} + en{"ఆంగ్లం"} + es{"స్పానిష్"} + fr{"ఫ్రెంచ్"} + hi{"హిందీ"} + it{"ఇటాలియన్ భాష"} + ja{"జపాను భాష"} + pt{"పొర్చుగల్ భాష"} + ru{"రష్యన్ భాష"} + te{"తెలుగు"} + zh{"చైనా భాష"} + } + LocaleScript{ + "Telu", + } + NumberElements{ + ".", + ",", + ";", + "%", + "౦", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Scripts{ + Arab{"అరబ్బి లిపి"} + Cyrl{"సిరిలిక్ లిపి"} + Hans{"సరళమైన చైనా లిపి"} + Hant{"ప్రాచీన చైనా లిపి"} + Latn{"లాటిన్"} + Telu{"తెలుగు"} + } + Variants{ + 1901{"ప్రాచీన ఙర్మన వర్ణక్రమం"} + 1996{"1996 ఙర్మన వర్ణక్రమం"} + REVISED{"సవరించబడిన వర్ణక్రమం"} + } + Version{"1.52"} + calendar{ + gregorian{ + AmPmMarkers{ + "పూర్వాహ్నం", + "అపరాహ్నం", + } + dayNames{ + format{ + abbreviated{ + "ఆది", + "సోమ", + "మంగళ", + "బుధ", + "గురు", + "శుక్ర", + "శని", + } + wide{ + "ఆదివారం", + "సోమవారం", + "మంగళవారం", + "బుధవారం", + "గురువారం", + "శుక్రవారం", + "శనివారం", + } + } + stand-alone{ + narrow{ + "ఆ", + "2", + "సొ", + "భు", + "గు", + "శు", + "శ", + } + } + } + monthNames{ + format{ + abbreviated{ + "జనవరి", + "ఫిబ్రవరి", + "మార్చి", + "ఏప్రిల్", + "మే", + "జూన్", + "జూలై", + "ఆగస్టు", + "సెప్టెంబర్", + "అక్టోబర్", + "నవంబర్", + "డిసెంబర్", + } + wide{ + "జనవరి", + "ఫిబ్రవరి", + "మార్చి", + "ఏప్రిల్", + "మే", + "జూన్", + "జూలై", + "ఆగస్టు", + "సెప్టెంబర్", + "అక్టోబర్", + "నవంబర్", + "డిసెంబర్", + } + } + stand-alone{ + narrow{ + "జ", + "ఫి", + "మ", + "ఎ", + "మె", + "జు", + "జు", + "ఆ", + "సె", + "అ", + "న", + "డి", + } + } + } + quarters{ + format{ + wide{ + "ఒకటి 1", + "రెండు 2", + "మూడు 3", + "నాలుగు 4", + } + } + } + } + } +} diff --git a/icuSources/data/locales/te_IN.txt b/icuSources/data/locales/te_IN.txt index 646c6cfc..a2a37e59 100644 --- a/icuSources/data/locales/te_IN.txt +++ b/icuSources/data/locales/te_IN.txt @@ -1,25 +1,21 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/te_IN.xml +// * Source File:/common/main/te_IN.xml // * // *************************************************************************** te_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.46"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "h:mm:ss a z", "h:mm:ss a z", diff --git a/icuSources/data/locales/th.txt b/icuSources/data/locales/th.txt index a42ddd2d..993be640 100644 --- a/icuSources/data/locales/th.txt +++ b/icuSources/data/locales/th.txt @@ -1,17 +1,50 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: /Users/deglocal/Desktop/Totoro/icucvs/locale/common/main//th.xml +// * Source File:/common/main/th.xml // * // *************************************************************************** /** - * ICU source: /Users/deglocal/Desktop/Totoro/icucvs/locale/icu/main//th.xml + * ICU source: /xml/main/th.xml */ th{ - BreakDictionaryData:import{"../brkitr/thaidict.brk"} + AuxExemplarCharacters{"[\u200B]"} Countries{ + 001{"โลก"} + 002{"แอฟริกา"} + 005{"อเมริกาใต้"} + 009{"โอเชียเนีย"} + 011{"แอฟริกาตะวันตก"} + 013{"อเมริกากลาง"} + 014{"แอฟริกาตะวันออก"} + 015{"แอฟริกาเหนือ"} + 017{"แอฟริกากลาง"} + 018{"แอฟริกาใต้ [018]"} + 019{"อเมริกา"} + 021{"อเมริกาเหนือ"} + 029{"แคริเบียน"} + 030{"เอเชียตะวันออก"} + 034{"เอเชียใต้"} + 035{"เอเชียตะวันออกเฉียงใต้"} + 039{"ยุโรปใต้"} + 053{"ออสเตรเลียและนิวซีแลนด์"} + 054{"เมลานีเซีย"} + 057{"ไมโครนีเซีย [057]"} + 061{"โปลินีเซีย"} + 062{"เอเชียกลางตอนใต้"} + 142{"เอเชีย"} + 143{"เอเชียกลาง"} + 145{"เอเชียตะวันตก"} + 150{"ยุโรป"} + 151{"ยุโรปตะวันออก"} + 154{"ยุโรปเหนือ"} + 155{"ยุโรปตะวันตก"} + 172{"เครือรัฐอิสระ"} + 419{"ละตินอเมริกาและคาริบเบียน"} + 830{"หมู่เกาะแชนเนล"} + 833{"เกาะแมน"} AD{"อันดอร์รา"} AE{"สหรัฐอาหรับเอมิเรตส์"} AF{"อัฟกานิสถาน"} @@ -23,9 +56,11 @@ th{ AO{"แองโกลา"} AQ{"แอนตาร์กติกา"} AR{"อาร์เจนตินา"} + AS{"อเมริกันซามัว"} AT{"ออสเตรีย"} AU{"ออสเตรเลีย"} AW{"อารูบา"} + AX{"หมู่เกาะอแลนด์"} AZ{"อาเซอร์ไบจาน"} BA{"บอสเนียและเฮอร์เซโกวีนา"} BB{"บาร์เบโดส"} @@ -41,22 +76,28 @@ th{ BO{"โบลิเวีย"} BR{"บราซิล"} BS{"บาฮามาส"} - BT{"ภูฐาน"} + BT{"ภูฏาน"} + BV{"เกาะบูเวต์"} BW{"บอตสวานา"} BY{"เบลารุส"} BZ{"เบลีช"} CA{"แคนาดา"} + CC{"หมู่เกาะโคโคส (คีลิง)"} + CD{"สาธารณรัฐประชาธิปไตยคองโก"} CF{"สาธารณรัฐแอฟริกากลาง"} CG{"คองโก"} CH{"สวิตเซอร์แลนด์"} CI{"โกตดิวัวร์"} + CK{"หมู่เกาะคุก"} CL{"ชิลี"} CM{"แคเมอรูน"} CN{"จีน"} CO{"โคลัมเบีย"} CR{"คอสตาริกา"} + CS{"เซอร์เบีย"} CU{"คิวบา"} CV{"เคปเวิร์ด"} + CX{"เกาะคริสมาสต์"} CY{"ไซปรัส"} CZ{"สาธารณรัฐเช็ก"} DE{"เยอรมนี"} @@ -76,22 +117,28 @@ th{ FJ{"ฟิจิ"} FK{"หมู่เกาะฟอล์คแลนด์"} FM{"ไมโครนีเซีย"} + FO{"หมู่เกาะฟาโร"} FR{"ฝรั่งเศส"} GA{"กาบอง"} + GB{"สหราชอาณาจักร"} GD{"เกรนาดา"} GE{"จอร์เจีย"} GF{"เฟรนช์กีอานา"} GH{"กาน่า"} + GI{"ยิบรอลตาร์"} GL{"กรีนแลนด์"} GM{"แกมเบีย"} GN{"กินี"} GP{"กัวเดอลูป"} GQ{"อิเควทอเรียลกินี"} GR{"กรีซ"} + GS{"เกาะเซาท์จอร์เจียและหมู่เกาะเซาท์แซนด์วิช"} GT{"กัวเตมาลา"} + GU{"กวม"} GW{"กินี-บิสเซา"} GY{"กายานา"} HK{"ฮ่องกง เขตปกครองพิเศษประเทศจีน"} + HM{"เกาะเฮิร์ดและหมู่เกาะแมกดอนัลด์"} HN{"ฮอนดูรัส"} HR{"โครเอเชีย"} HT{"เฮติ"} @@ -100,6 +147,7 @@ th{ IE{"ไอร์แลนด์"} IL{"อิสราเอล"} IN{"อินเดีย"} + IO{"บริติสอินเดียโอเชียนเทร์ริทอรี"} IQ{"อิรัก"} IR{"อิหร่าน"} IS{"ไอซ์แลนด์"} @@ -112,6 +160,7 @@ th{ KH{"กัมพูชา"} KI{"คิริบาส"} KM{"คอโมโรส"} + KN{"เซนต์คิตส์และเนวิส"} KP{"เกาหลีเหนือ"} KR{"เกาหลีใต้"} KW{"คูเวต"} @@ -119,6 +168,7 @@ th{ KZ{"คาซัคสถาน"} LA{"ลาว"} LB{"เลบานอน"} + LC{"เซนต์ลูเซีย"} LI{"ลิกเตนสไตน์"} LK{"ศรีลังกา"} LR{"ไลบีเรีย"} @@ -131,16 +181,19 @@ th{ MC{"โมนาโก"} MD{"มอลโดวา"} MG{"มาดากัสการ์"} + MH{"หมู่เกาะมาร์แชล"} MK{"มาซิโดเนีย"} ML{"มาลี"} MM{"พม่า"} MN{"มองโกเลีย"} MO{"มาเก๊า เขตปกครองพิเศษประเทศจีน"} + MP{"หมู่เกาะนอร์ทเทิร์นมาเรียนา"} MQ{"มาร์ตินีก"} MR{"มอริเตเนีย"} MS{"มอนต์เซร์แร็ต"} MT{"มอลตา"} MU{"มอริเชียส"} + MV{"มัลดีฟส์"} MW{"มาลาวี"} MX{"เม็กซิโก"} MY{"มาเลเซีย"} @@ -148,11 +201,13 @@ th{ NA{"นามิเบีย"} NC{"นิวแคลีโดเนีย"} NE{"ไนเจอร์"} + NF{"เกาะนอร์ฟอล์ก"} NG{"ไนจีเรีย"} NI{"นิคารากัว"} NL{"เนเธอร์แลนด์"} NO{"นอร์เวย์"} NP{"เนปาล"} + NR{"นาอูรู"} NU{"นียู"} NZ{"นิวซีแลนด์"} OM{"โอมาน"} @@ -163,29 +218,39 @@ th{ PH{"ฟิลิปปินส์"} PK{"ปากีสถาน"} PL{"โปแลนด์"} + PM{"แซงปีแยร์และมีเกอลง"} + PN{"พิตแคร์น"} PR{"เปอร์โตริโก"} + PS{"ปาเลซติเนียนเทร์ริทอรี"} PT{"โปรตุเกส"} + PW{"ปาเลา"} PY{"ปารากวัย"} QA{"กาตาร์"} + QO{"เอาต์ไลอิงโอเชียเนีย"} + RE{"เรอูเนียง"} RO{"โรมาเนีย"} RU{"รัสเซีย"} RW{"รวันดา"} + SA{"ซาอุดีอาระเบีย"} SB{"หมู่เกาะโซโลมอน"} SC{"เซเชลส์"} SD{"ซูดาน"} SE{"สวีเดน"} SG{"สิงคโปร์"} + SH{"เซนต์เฮเลนา"} SI{"สโลวีเนีย"} + SJ{"สฟาลบาร์และแจนมาเยน"} SK{"สโลวาเกีย"} SL{"เซียร์ราลีโอน"} SM{"ซานมารีโน"} SN{"เซเนกัล"} SO{"โซมาเลีย"} - SP{"เซอร์เบีย"} SR{"สุรินัม"} + ST{"เซาโตเมและปรินซิเป"} SV{"เอลซัลวาดอร์"} SY{"ซีเรีย"} SZ{"สวาซิแลนด์"} + TC{"หมู่เกาะเติกส์และหมู่เกาะเคคอส"} TD{"ชาด"} TF{"อาณาเขตทางใต้ของฝรั่งเศส"} TG{"โตโก"} @@ -198,28 +263,79 @@ th{ TO{"ตองกา"} TR{"ตุรกี"} TT{"ตรินิแดดและโตเบโก"} + TV{"ตูวาลู"} TW{"ไต้หวัน"} TZ{"ทานซาเนีย"} UA{"ยูเครน"} UG{"อูกานดา"} + UM{"หมู่เกาะสหรัฐไมเนอร์เอาต์ไลอิง"} US{"สหรัฐอเมริกา"} UY{"อุรุกวัย"} UZ{"อุซเบกิสถาน"} + VA{"วาติกัน"} VC{"เซนต์วินเซนต์และเกรนาดีนส์"} VE{"เวเนซุเอลา"} VG{"บริทิชเวอร์จินไอส์แลนด์"} VI{"ยูเอสเวอร์จินไอส์แลนด์"} VN{"เวียดนาม"} VU{"วานูอาตู"} + WF{"วาลลิสและฟุตูนา"} WS{"ซามัว"} YE{"เยเมน"} YT{"มายอต"} - YU{"ยูโกสลาเวีย"} ZA{"แอฟริกาใต้"} ZM{"แซมเบีย"} ZW{"ซิมบาบเว"} } Currencies{ + ADP{ + "ADP", + "เปเซตาอันดอร์รา", + } + AED{ + "AED", + "ดีแรห์มสหรัฐอาหรับเอมิเรตส์", + } + AFA{ + "AFA", + "อัฟกานี (1927-2002)", + } + AFN{ + "AFN", + "อัฟกานี", + } + ALL{ + "ALL", + "เลกอัลบาเนีย", + } + AMD{ + "AMD", + "ดรัมอาเมเนีย", + } + ANG{ + "ANG", + "แอนทิลลันกิลเดอร์เนเธอร์แลนด์", + } + AOA{ + "AOA", + "กวานซาแองโกลา", + } + AOK{ + "AOK", + "กวานซาแองโกลา (1977-1990)", + } + AON{ + "AON", + "นิวกวานซาแองโกลา (1990-2000)", + } + AOR{ + "AOR", + "กวานซารีจัสทาโดแองโกลา (1995-1999)", + } + ARA{ + "ARA", + "ออสตรัลอาเจนตินา", + } ARP{ "ARP", "เปโซอาร์เจนติน่า (1983-1985)", @@ -236,33 +352,277 @@ th{ "$A", "เหรียญออสเตรเลีย", } - AUP{ - "AUP", - "ปอนด์ออสเตรเลีย", + AWG{ + "AWG", + "กิลเดอร์อารูบา", + } + AZM{ + "AZM", + "มานัตอาเซอร์ไบจัน", + } + BAD{ + "BAD", + "ดีนาร์บอสเนีย-เฮอร์เซโกวีนา", + } + BAM{ + "BAM", + "มาร​์กบอสเนีย-เฮอร์เซโกวีนา", + } + BBD{ + "BBD", + "ดอลลาร์บาร์เบดอส", + } + BDT{ + "BDT", + "ตากาบังกลาเทศ", + } + BEC{ + "BEC", + "ฟรังก์เบลเยียม (เปลี่ยนแปลงได้)", + } + BEF{ + "BEF", + "ฟรังก์เบลเยียม", + } + BEL{ + "BEL", + "ฟรังก์เบลเยียม (การเงิน)", + } + BGL{ + "BGL", + "ฮาร์ดลีฟบัลแกเรีย", + } + BGN{ + "BGN", + "นิวลีฟบัลแกเรีย", + } + BHD{ + "BHD", + "ดีนาร์บาห์เรน", + } + BIF{ + "BIF", + "ฟรังก์บุรุนดี", + } + BMD{ + "BMD", + "ดอลลาร์เบอร์มิวดา", + } + BND{ + "BND", + "ดอลลาร์บรูไน", + } + BOB{ + "BOB", + "โบลิเวียโน", + } + BOP{ + "BOP", + "เปโซโบลิเวีย", + } + BOV{ + "BOV", + "มฟดอลโบลิเวีย", + } + BRB{ + "BRB", + "ครูเซโรโนโวบราซิล (1967-1986)", + } + BRC{ + "BRC", + "ครูซาโดบราซิล", + } + BRE{ + "BRE", + "ครูเซโรบราซิล (1990-1993)", + } + BRL{ + "BRL", + "รีล", + } + BRN{ + "BRN", + "ครูซาโดโนโวบราซิล", + } + BRR{ + "BRR", + "ครูเซโรบราซิล", + } + BSD{ + "BSD", + "ดอลลาร์บาฮามาส", + } + BTN{ + "BTN", + "กัลทรัมภูฏาน", + } + BUK{ + "BUK", + "จัคพม่า [BUK]", + } + BWP{ + "BWP", + "พูลาบอตสวานา", + } + BYB{ + "BYB", + "นิวรูเบิลเบลารัสเซีย (1994-1999)", + } + BYR{ + "BYR", + "รูเบิลเบลารัสเซีย", + } + BZD{ + "BZD", + "ดอลลาร์เบลีซ", } CAD{ "Can$", "เหรียญคานาดา", } + CDF{ + "CDF", + "ฟรังก์คองโก", + } + CHE{ + "CHE", + "ยูโรดับเบิลยูไออาร์", + } + CHF{ + "CHF", + "ฟรังก์สวิส", + } + CHW{ + "CHW", + "ฟรังก์ดับเบิลยูไออาร์", + } + CLF{ + "CLF", + "ฟูเมนโตชิลี", + } CLP{ "Ch$", "เปโซชิลี", } - ETD{ - "ETD", - "เหรียญเอธิโอเปีย", + CNY{ + "¥", + "หยวนเหรินเหมินบี้", + } + COP{ + "COP", + "เปโซโคลัมเบีย", + } + COU{ + "COU", + "วาเลอร์รีล", + } + CRC{ + "CRC", + "โคลอนคอสตาริกา", + } + CSD{ + "CSD", + "ไดนาร์เซอร์เบีย", + } + CSK{ + "CSK", + "ฮาร์ดโครูนาเช็กโกสโลวัก", + } + CUP{ + "CUP", + "เปโซคิวบา", + } + CVE{ + "CVE", + "เคปเวอร์เดอร์เอสคูโด", + } + CYP{ + "CYP", + "ปอนด์ไซปรัส", + } + CZK{ + "CZK", + "โครูนาสาธารณรัฐเช็ก", + } + DDM{ + "DDM", + "ออสต์มาร์กเยอรมันตะวันออก", + } + DEM{ + "DEM", + "มาร์กเยอรมนี", + } + DJF{ + "DJF", + "ฟรังก์จิบูตี", + } + DKK{ + "DKK", + "โครนเดนมาร์ก", + } + DOP{ + "DOP", + "เปโซโดมินิกา", + } + DZD{ + "DZD", + "ดีนาร์แอลจีเรีย", + } + ECS{ + "ECS", + "ซูเกรเอกวาดอร์", + } + ECV{ + "ECV", + "วาเลอร์คอนสแตนต์เอกวาดอร์", + } + EEK{ + "EEK", + "ครูนเอสโตเนีย", + } + EGP{ + "EGP", + "ปอนด์อียิปต์", + } + EQE{ + "EQE", + "เอ็กเวเล", + } + ERN{ + "ERN", + "นากฟาเอริเทรีย", + } + ESA{ + "ESA", + "เปเซตาสเปน (บัญชี)", + } + ESB{ + "ESB", + "เปเซตาสเปน (บัญชีที่เปลี่ยนแปลงได้)", + } + ESP{ + "ESP", + "เปเซตาสเปน", + } + ETB{ + "ETB", + "เบอรร์เอธิโอเปีย", } EUR{ - "\u20AC", + "€", "ยูโร", } + FIM{ + "FIM", + "มาร์กกาฟินแลนด์", + } FJD{ "F$", "เหรียญฟิจิ", } - FJP{ - "FJP", - "ปอนด์ฟิจิ", + FKP{ + "FKP", + "ปอนด์เกาะฟอล์กแลนด์", } FRF{ "FRF", @@ -272,13 +632,77 @@ th{ "\u00A3", "ปอนด์สเตอร์ลิงอังกฤษ", } + GEK{ + "GEK", + "คูปอนลาริตจอร์เจีย", + } + GEL{ + "GEL", + "ลารีจอร์เจีย", + } + GHC{ + "GHC", + "เซดีกานา", + } + GIP{ + "GIP", + "ปอนด์ยิบรอลตาร์", + } + GMD{ + "GMD", + "ดาลาซีแกมเบีย", + } + GNF{ + "GNF", + "ฟรังก์กินี", + } + GNS{ + "GNS", + "ไซลีกินี", + } + GQE{ + "GQE", + "เอ็กเวเลกินีนาอิเควทอเรียลกินี", + } + GRD{ + "GRD", + "ดรัชมากรีก", + } + GTQ{ + "GTQ", + "เควตซัลกัวเตมาลา", + } + GWP{ + "GWP", + "เปโซกีนีบิสเซา", + } + GYD{ + "GYD", + "ดอลลาร์กายอานา", + } HKD{ "HK$", "เหรียญฮ่องกง", } - IBP{ - "IBP", - "ปอนด์ไอริชเหนือ", + HNL{ + "HNL", + "เลมปิราฮอดูรัส", + } + HRD{ + "HRD", + "ดีนาร์โครเอเชีย", + } + HRK{ + "HRK", + "คูนาโครเอเชีย", + } + HTG{ + "HTG", + "กอร์ดเฮติ", + } + HUF{ + "HUF", + "ฟอรินต์ฮังการี", } IDR{ "Rp", @@ -292,25 +716,277 @@ th{ "ILP", "ปอนด์อิสราเอล", } + ILS{ + "ILS", + "เชเกลอิสราเอล", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/th_TH.xml // * // *************************************************************************** th_TH{ + Countries{ + AN{"เนเธอร์แลนด์แอนทิลลิส"} + } + Keys{ + collation{"ตรวจเทียบ"} + } + Languages{ + ae{"อาเวสทาน"} + ch{"ชามอร์โร"} + dsb{"ซอร์เบียนต่ำ"} + eka{"อีกาจุก"} + ewo{"อีวันโด"} + fat{"ฟันติ"} + grb{"เกรโบ"} + hz{"เฮเรโร"} + ii{"ชิชวนยี่"} + inh{"อิงกุช"} + mk{"มาซิโดเนีย"} + mwl{"มิรันดีส"} + nap{"เนียโพลิแทน"} + nr{"เอ็นเดเบเลใต้"} + ro{"โรมาเนีย"} + ss{"สวาติ"} + ter{"เทเรโน"} + tk{"เติร์ก"} + tn{"สวานา"} + ty{"ตาฮิเตียน"} + ur{"อูรดู"} + } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;¤-#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Scripts{ + Geor{"จอร์เจียน"} + Hung{"ฮังการีโบราณ"} + Ital{"อิตาลีโบราณ"} + Mlym{"มาลายาลัม"} + } + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"'"} + quotationStart{"'"} + } } diff --git a/icuSources/data/locales/th_TH_TRADITIONAL.txt b/icuSources/data/locales/th_TH_TRADITIONAL.txt index b250d87f..5b591240 100644 --- a/icuSources/data/locales/th_TH_TRADITIONAL.txt +++ b/icuSources/data/locales/th_TH_TRADITIONAL.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: deprecatedList.xml +// * Source File:/icu-config.xml & build.xml // * // *************************************************************************** th_TH_TRADITIONAL{ diff --git a/icuSources/data/locales/ti.txt b/icuSources/data/locales/ti.txt index 2201440a..d6458286 100644 --- a/icuSources/data/locales/ti.txt +++ b/icuSources/data/locales/ti.txt @@ -1,92 +1,120 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ti.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/ti.xml - */ -ti{ - Countries:alias{"am"} - ExemplarCharacters{"[:Ethi:]"} - Languages:alias{"am"} - LocaleScript{ - "Ethi", - } - Version{"1.2"} - calendar{ - gregorian{ - AmPmMarkers{ - "ንጉሆ ሰዓተ", - "ድሕር ሰዓት", - } - DateTimeElements:intvector{ - 7, - 1, - } - dayNames{ - format{ - abbreviated{ - "ሰንበ", - "ሰኑይ", - "ሠሉስ", - "ረቡዕ", - "ኃሙስ", - "ዓርቢ", - "ቀዳም", - } - wide{ - "ሰንበት", - "ሰኑይ", - "ሠሉስ", - "ረቡዕ", - "ኃሙስ", - "ዓርቢ", - "ቀዳም", - } - } - } - eras{ - abbreviated{ - "ዓ/ዓ", - "ዓ/ም", - } - } - monthNames{ - format{ - abbreviated{ - "ጃንዩ", - "ፌብሩ", - "ማርች", - "ኤፕረ", - "ሜይ", - "ጁን", - "ጁላይ", - "ኦገስ", - "ሴፕቴ", - "ኦክተ", - "ኖቬም", - "ዲሴም", - } - wide{ - "ጃንዩወሪ", - "ፌብሩወሪ", - "ማርች", - "ኤፕረል", - "ሜይ", - "ጁን", - "ጁላይ", - "ኦገስት", - "ሴፕቴምበር", - "ኦክተውበር", - "ኖቬምበር", - "ዲሴምበር", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ti.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ti.xml + */ +ti{ + Countries:alias{"am"} + ExemplarCharacters{ + "[፟ ፡ ፣-፧ ። ፠ ፨ ᎐-᎙ ፲-፼ ፩-፱ ሀ-ሏ ⶀ ሐ-ሟ ᎀ-ᎃ ⶁ ሠ-ሯ ⶂ ሰ-ሷ ⶃ ሸ-ሿ ⶄ ቀ-ቈ ቊ-ቍ ቐ-ቖ ቘ ቚ" + "-ቝ በ-ቧ ᎄ-ᎇ ⶅ ቨ-ቷ ⶆ ቸ-ቿ ⶇ ኀ-ኈ ኊ-ኍ ነ-ኗ ⶈ ኘ-ኟ ⶉ አ-ኧ ⶊ ከ-ኰ ኲ-ኵ ኸ-ኾ ዀ ዂ-ዅ ወ-ዖ ዘ-ዟ" + " ⶋ ዠ-ዷ ⶌ ዸ-ዿ ⶍ ጀ-ጇ ⶎ ገ-ጐ ጒ-ጕ ጘ-ጟ ⶓ-ⶖ ጠ-ጧ ⶏ ጨ-ጯ ⶐ ጰ-ጷ ⶑ ጸ-ፏ ᎈ-ᎋ ፐ-ፗ ᎌ-ᎏ ⶒ ፘ-ፚ" + " ⶠ-ⶦ ⶨ-ⶮ ⶰ-ⶶ ⶸ-ⶾ ⷀ-ⷆ ⷈ-ⷎ ⷐ-ⷖ ⷘ-ⷞ]" + } + Languages:alias{"am"} + LocaleScript{ + "Ethi", + } + Version{"1.43"} + calendar{ + gregorian{ + AmPmMarkers{ + "ንጉሆ ሰዓተ", + "ድሕር ሰዓት", + } + dayNames{ + format{ + abbreviated{ + "ሰንበ", + "ሰኑይ", + "ሠሉስ", + "ረቡዕ", + "ኃሙስ", + "ዓርቢ", + "ቀዳም", + } + wide{ + "ሰንበት", + "ሰኑይ", + "ሠሉስ", + "ረቡዕ", + "ኃሙስ", + "ዓርቢ", + "ቀዳም", + } + } + stand-alone{ + narrow{ + "ሰ", + "ሰ", + "ሠ", + "ረ", + "ኃ", + "ዓ", + "ቀ", + } + } + } + eras{ + abbreviated{ + "ዓ/ዓ", + "ዓ/ም", + } + } + monthNames{ + format{ + abbreviated{ + "ጃንዩ", + "ፌብሩ", + "ማርች", + "ኤፕረ", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስ", + "ሴፕቴ", + "ኦክተ", + "ኖቬም", + "ዲሴም", + } + wide{ + "ጃንዩወሪ", + "ፌብሩወሪ", + "ማርች", + "ኤፕረል", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስት", + "ሴፕቴምበር", + "ኦክተውበር", + "ኖቬምበር", + "ዲሴምበር", + } + } + stand-alone{ + narrow{ + "ጃ", + "ፌ", + "ማ", + "ኤ", + "ሜ", + "ጁ", + "ጁ", + "ኦ", + "ሴ", + "ኦ", + "ኖ", + "ዲ", + } + } + } + } + } +} diff --git a/icuSources/data/locales/ti_ER.txt b/icuSources/data/locales/ti_ER.txt index d7a992a9..9d96410c 100644 --- a/icuSources/data/locales/ti_ER.txt +++ b/icuSources/data/locales/ti_ER.txt @@ -1,96 +1,100 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ti_ER.xml -// * -// *************************************************************************** -ti_ER{ - Currencies{ - ERN{ - "$", - "ERN", - } - USD{ - "US$", - "USD", - } - } - NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", - "#,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimePatterns{ - "h:mm:ss a", - "h:mm:ss a", - "h:mm:ss a", - "h:mm a", - "EEEE፡ dd MMMM መዓልቲ yyyy G", - "dd MMMM yyyy", - "dd-MMM-yy", - "dd/MM/yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "ሰንበ", - "ሰኑይ", - "ሰሉስ", - "ረቡዕ", - "ሓሙስ", - "ዓርቢ", - "ቀዳም", - } - wide{ - "ሰንበት", - "ሰኑይ", - "ሰሉስ", - "ረቡዕ", - "ሓሙስ", - "ዓርቢ", - "ቀዳም", - } - } - } - monthNames{ - format{ - abbreviated{ - "ጥሪ", - "ለካቲ", - "መጋቢ", - "ሚያዝ", - "ግንቦ", - "ሰነ", - "ሓምለ", - "ነሓሰ", - "መስከ", - "ጥቅም", - "ሕዳር", - "ታሕሳ", - } - wide{ - "ጥሪ", - "ለካቲት", - "መጋቢት", - "ሚያዝያ", - "ግንቦት", - "ሰነ", - "ሓምለ", - "ነሓሰ", - "መስከረም", - "ጥቅምቲ", - "ሕዳር", - "ታሕሳስ", - } - } - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ti_ER.xml +// * +// *************************************************************************** +ti_ER{ + Currencies{ + ERN{ + "$", + "ERN", + } + USD{ + "US$", + "USD", + } + } + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.39"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE፡ dd MMMM መዓልቲ yyyy G", + "dd MMMM yyyy", + "dd-MMM-yy", + "dd/MM/yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "ሰንበ", + "ሰኑይ", + "ሰሉስ", + "ረቡዕ", + "ሓሙስ", + "ዓርቢ", + "ቀዳም", + } + wide{ + "ሰንበት", + "ሰኑይ", + "ሰሉስ", + "ረቡዕ", + "ሓሙስ", + "ዓርቢ", + "ቀዳም", + } + } + } + monthNames{ + format{ + abbreviated{ + "ጥሪ", + "ለካቲ", + "መጋቢ", + "ሚያዝ", + "ግንቦ", + "ሰነ", + "ሓምለ", + "ነሓሰ", + "መስከ", + "ጥቅም", + "ሕዳር", + "ታሕሳ", + } + wide{ + "ጥሪ", + "ለካቲት", + "መጋቢት", + "ሚያዝያ", + "ግንቦት", + "ሰነ", + "ሓምለ", + "ነሓሰ", + "መስከረም", + "ጥቅምቲ", + "ሕዳር", + "ታሕሳስ", + } + } + } + } + } +} diff --git a/icuSources/data/locales/ti_ET.txt b/icuSources/data/locales/ti_ET.txt index c3676107..6650c434 100644 --- a/icuSources/data/locales/ti_ET.txt +++ b/icuSources/data/locales/ti_ET.txt @@ -1,31 +1,31 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ti_ET.xml +// * Source File:/common/main/ti_ET.xml // * // *************************************************************************** ti_ET{ Currencies{ - ETB{ - "$", - "ETB", - } USD{ "US$", "USD", } } NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.41"} calendar{ gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } DateTimePatterns{ "h:mm:ss a", "h:mm:ss a", diff --git a/icuSources/data/locales/tr.txt b/icuSources/data/locales/tr.txt index b977cc9f..cc76c690 100644 --- a/icuSources/data/locales/tr.txt +++ b/icuSources/data/locales/tr.txt @@ -1,16 +1,49 @@ // *************************************************************************** // * -// * Copyright (C) 2005 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: /Users/deglocal/Desktop/Totoro/icucvs/locale/common/main//tr.xml +// * Source File:/common/main/tr.xml // * // *************************************************************************** /** - * ICU source: /Users/deglocal/Desktop/Totoro/icucvs/icu/source/data/xml/main/tr.xml + * ICU source: /xml/main/tr.xml */ tr{ + AuxExemplarCharacters{ + "[á à ă â å ä ā æ é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ø ō œ q ß ú ù ŭ û ū w x ÿ" + "]" + } Countries{ + 001{"Dünya"} + 002{"Afrika"} + 005{"Güney Amerika"} + 009{"Okyanusya"} + 011{"Batı Afrika"} + 013{"Orta Amerika"} + 014{"Doğu Afrika"} + 015{"Kuzey Afrika"} + 017{"Orta Afrika"} + 018{"Güney Afrika [018]"} + 019{"Amerika"} + 021{"Kuzey Amerika"} + 029{"Karayipler"} + 030{"Doğu Asya"} + 035{"Güney Doğu Asya"} + 039{"Güney Avrupa"} + 053{"Avustralya ve Yeni Zelanda"} + 054{"Melanezya"} + 057{"Mikronezya"} + 061{"Polinezya"} + 062{"Güney Orta Asya"} + 142{"Asya"} + 145{"Batı Asya"} + 150{"Avrupa"} + 151{"Doğu Avrupa"} + 154{"Kuzey Avrupa"} + 155{"Batı Avrupa"} + 830{"Kanal Adaları"} + 833{"Man Adası"} AD{"Andora"} AE{"Birleşik Arap Emirlikleri"} AF{"Afganistan"} @@ -26,6 +59,7 @@ tr{ AT{"Avusturya"} AU{"Avustralya"} AW{"Aruba"} + AX{"Aland Adaları"} AZ{"Azerbaycan"} BA{"Bosna Hersek"} BB{"Barbados"} @@ -59,6 +93,7 @@ tr{ CN{"Çin"} CO{"Kolombiya"} CR{"Kosta Rika"} + CS{"Sırbistan-Karadağ"} CU{"Küba"} CV{"Cape Verde"} CX{"Christmas Adası"} @@ -190,6 +225,7 @@ tr{ PW{"Palau"} PY{"Paraguay"} QA{"Katar"} + QO{"Uzak Okyanusya"} RE{"Reunion"} RO{"Romanya"} RU{"Rusya Federasyonu"} @@ -208,7 +244,6 @@ tr{ SM{"San Marino"} SN{"Senegal"} SO{"Somali"} - SP{"Sırbistan"} SR{"Surinam"} ST{"Sao Tome ve Principe"} SV{"El Salvador"} @@ -247,16 +282,11 @@ tr{ WS{"Samoa"} YE{"Yemen"} YT{"Mayotte"} - YU{"Yugoslavya"} ZA{"Güney Afrika"} ZM{"Zambiya"} ZW{"Zimbabwe"} } Currencies{ - ADD{ - "ADD", - "Andora Dinarı", - } ADP{ "ADP", "Andora Pezetası", @@ -273,26 +303,10 @@ tr{ "Af", "Afganistan Afganisi", } - AIF{ - "AIF", - "Afarlar ve İssalar Frangı", - } - ALK{ - "ALK", - "Arnavutluk Leki (1946-1961)", - } ALL{ "lek", "Arnavutluk Leki", } - ALV{ - "ALV", - "Arnavutluk Leki Valute", - } - ALX{ - "ALX", - "Arnavut Doları FEC", - } AMD{ "dram", "Ermenistan Dramı", @@ -317,18 +331,10 @@ tr{ "AOR", "Angola Kvanzası Reajustado (1995-1999)", } - AOS{ - "AOS", - "Angola Esküdosu", - } ARA{ "ARA", "Arjantin Australi", } - ARM{ - "ARM", - "Arjantin Pezosu Moneda Nacional", - } ARP{ "ARP", "Arjantin Pezosu (1983-1985)", @@ -345,10 +351,6 @@ tr{ "$A", "Avustralya Doları", } - AUP{ - "AUP", - "Avustralya Lirası", - } AWG{ "AWG", "Aruba Florini", @@ -365,10 +367,6 @@ tr{ "KM", "Konvertibl Bosna Hersek Markı", } - BAN{ - "BAN", - "Yeni Bosna Hersek Dinarı", - } BBD{ "BDS$", "Barbados Doları", @@ -393,22 +391,10 @@ tr{ "lev", "Bulgar Levası (Hard)", } - BGM{ - "BGM", - "Sosyalist Bulgar Levası", - } BGN{ "BGN", "Yeni Bulgar Levası", } - BGO{ - "BGO", - "Bulgar Levası (1879-1952)", - } - BGX{ - "BGX", - "Bulgar Levası FEC", - } BHD{ "BD", "Bahreyn Dinarı", @@ -421,10 +407,6 @@ tr{ "Ber$", "Bermuda Doları", } - BMP{ - "BMP", - "Bermuda Lirası", - } BND{ "BND", "Brunei Doları", @@ -433,10 +415,6 @@ tr{ "Bs", "Bolivya Bolivyanosu", } - BOL{ - "BOL", - "Bolivya Bolivyanosu (1863-1962)", - } BOP{ "BOP", "Bolivya Pezosu", @@ -469,34 +447,18 @@ tr{ "BRR", "Brezilya Kruzeirosu", } - BRZ{ - "BRZ", - "Brezilya Kruzeirosu (1942-1967)", - } BSD{ "BSD", "Bahama Doları", } - BSP{ - "BSP", - "Bahama Lirası", - } BTN{ "Nu", "Bhutan Ngultrumu", } - BTR{ - "BTR", - "Bhutan Rupisi", - } BUK{ "BUK", "Burma Kyatı", } - BUR{ - "BUR", - "Burma Rupisi", - } BWP{ "BWP", "Botsvana Pulası", @@ -505,10 +467,6 @@ tr{ "BYB", "Yeni Beyaz Rusya Rublesi (1994-1999)", } - BYL{ - "BYL", - "Beyaz Rusya Rublesi (1992-1994)", - } BYR{ "Rbl", "Beyaz Rusya Rublesi", @@ -517,10 +475,6 @@ tr{ "BZ$", "Belize Doları", } - BZH{ - "BZH", - "İngiliz Hondurası Doları", - } CAD{ "Can$", "Kanada Doları", @@ -529,34 +483,10 @@ tr{ "CDF", "Kongo Frangı", } - CDG{ - "CDG", - "Kongo Cumhuriyeti Frangı", - } - CDL{ - "CDL", - "Kongo Zairesi", - } - CFF{ - "CFF", - "Orta Afrika Cumhuriyeti Frangı", - } CHF{ "SwF", "İsviçre Frangı", } - CKD{ - "CKD", - "Cook Adaları Doları", - } - CLC{ - "CLC", - "Şili Condor", - } - CLE{ - "CLE", - "Şili Esküdosu", - } CLF{ "CLF", "Şili Unidades de Fomento", @@ -565,30 +495,10 @@ tr{ "Ch$", "Şili Pezosu", } - CMF{ - "CMF", - "Kamerun CFA Frangı", - } - CNP{ - "CNP", - "Çin Jen Min Piao Yuanı", - } - CNX{ - "CNX", - "Çin ABD Doları FEC", - } CNY{ "Y", "Çin Yuanı Renminbi", } - COB{ - "COB", - "Kolombiya Kağıt Pezosu", - } - COF{ - "COF", - "Kongo CFA Frangı", - } COP{ "Col$", "Kolombiya Pezosu", @@ -597,10 +507,6 @@ tr{ "C", "Kosta Rika Kolonu", } - CSC{ - "CSC", - "Çekoslavak Korunası", - } CSK{ "CSK", "Çekoslavak Korunası (Hard)", @@ -609,18 +515,10 @@ tr{ "CUP", "Küba Pezosu", } - CUX{ - "CUX", - "Küba FEC", - } CVE{ "CVEsc", "Cape Verde Esküdosu", } - CWG{ - "CWG", - "Kurasao Florini", - } CYP{ "£C", "Güney Kıbrıs Lirası", @@ -637,10 +535,6 @@ tr{ "DEM", "Alman Markı", } - DES{ - "DES", - "Alman Sperrmark", - } DJF{ "DF", "Cibuti Frangı", @@ -657,14 +551,6 @@ tr{ "DA", "Cezayir Dinarı", } - DZF{ - "DZF", - "Yeni Cezayir Frangı", - } - DZG{ - "DZG", - "Cezayir Frangı (Germinal)", - } ECS{ "ECS", "Ekvator Sukresi", @@ -693,10 +579,6 @@ tr{ "Br", "Etiyopya Birri", } - ETD{ - "ETD", - "Etiyopya Doları", - } EUR{ "€", "Euro", @@ -705,38 +587,18 @@ tr{ "FIM", "Fin Markkası", } - FIN{ - "FIN", - "Fin Markkası (1860-1962)", - } FJD{ "F$", "Fiji Doları", } - FJP{ - "FJP", - "Fiji Lirası", - } FKP{ "FKP", "Falkland Adaları Lirası", } - FOK{ - "FOK", - "Faroe Adaları Kronu", - } FRF{ "FRF", "Fransız Frangı", } - FRG{ - "FRG", - "Fransız Frangı (Germinal/Franc Poincare)", - } - GAF{ - "GAF", - "Gabon CFA Frangı", - } GBP{ "£", "İngiliz Sterlini", @@ -753,86 +615,38 @@ tr{ "GHC", "Gana Sedisi", } - GHO{ - "GHO", - "Eski Gana Sedisi", - } - GHP{ - "GHP", - "Gana Lirası", - } - GHR{ - "GHR", - "Yeni Gana Sedisi", - } GIP{ "GIP", "Cebelitarık Lirası", } - GLK{ - "GLK", - "Grönland Kronu", - } GMD{ "GMD", "Gambiya Dalasisi", } - GMP{ - "GMP", - "Gambiya Lirası", - } GNF{ "GF", "Gine Frangı", } - GNI{ - "GNI", - "Gine Frangı (1960-1972)", - } GNS{ "GNS", "Gine Syli", } - GPF{ - "GPF", - "Guadeloupe Frangı", - } GQE{ "GQE", "Ekvator Ginesi Ekuelesi", } - GQF{ - "GQF", - "Ekvator Ginesi Frangı", - } - GQP{ - "GQP", - "Ekvator Ginesi Pezetası", - } GRD{ "GRD", "Yunan Drahmisi", } - GRN{ - "GRN", - "Yeni Yunan Drahmisi", - } GTQ{ "Q", "Guatemala Ketzali", } - GUF{ - "GUF", - "Fransız Guyanası Frangı", - } GWE{ "GWE", "Portekiz Ginesi Esküdosu", } - GWM{ - "GWM", - "Portekiz Ginesi Mil Reis", - } GWP{ "GWP", "Gine-Bissau Pezosu", @@ -865,22 +679,6 @@ tr{ "Ft", "Macar Forinti", } - IBP{ - "IBP", - "Kuzey İrlanda Lirası", - } - IDG{ - "IDG", - "Endonezya Nica Florini", - } - IDJ{ - "IDJ", - "Endonezya Java Rupiahı", - } - IDN{ - "IDN", - "Yeni Endonezya Rupiahı", - } IDR{ "Rp", "Endonezya Rupiahı", @@ -889,10 +687,6 @@ tr{ "IR£", "İrlanda Lirası", } - ILL{ - "ILL", - "İsrail Şekeli", - } ILP{ "ILP", "İsrail Lirası", @@ -901,10 +695,6 @@ tr{ "ILS", "Yeni İsrail Şekeli", } - IMP{ - "IMP", - "Man Adası Sterlini", - } INR{ "INR", "Hindistan Rupisi", @@ -925,18 +715,10 @@ tr{ "₤", "İtalyan Lireti", } - JEP{ - "JEP", - "Jersey Sterlini", - } JMD{ "J$", "Jamaika Doları", } - JMP{ - "JMP", - "Jamaika Lirası", - } JOD{ "JD", "Ürdün Dinarı", @@ -953,38 +735,18 @@ tr{ "som", "Kırgız Somu", } - KHO{ - "KHO", - "Eski Kamboçya Rieli", - } KHR{ "CR", "Kamboçya Rieli", } - KID{ - "KID", - "Kiribati Doları", - } KMF{ "CF", "Komorlar Frangı", } - KPP{ - "KPP", - "Kuzey Kore Halk Cumhuriyeti Wonu", - } KPW{ "KPW", "Kuzey Kore Wonu", } - KRH{ - "KRH", - "Güney Kore Hwanı", - } - KRO{ - "KRO", - "Eski Güney Kore Wonu", - } KRW{ "KRW", "Güney Kore Wonu", @@ -997,10 +759,6 @@ tr{ "KYD", "Kayman Adaları Doları", } - KZR{ - "KZR", - "Kazakistan Rublesi", - } KZT{ "T", "Kazakistan Tengesi", @@ -1013,18 +771,10 @@ tr{ "LL", "Lübnan Lirası", } - LIF{ - "LIF", - "Liechtenstein Frangı", - } LKR{ "SL Re", "Sri Lanka Rupisi", } - LNR{ - "LNR", - "Seylan Rupisi", - } LRD{ "LRD", "Liberya Doları", @@ -1053,18 +803,10 @@ tr{ "LVR", "Letonya Rublesi", } - LYB{ - "LYB", - "Libya İngiliz Askeri Yönetimi Lirası", - } LYD{ "LD", "Libya Dinarı", } - LYP{ - "LYP", - "Libya Lirası", - } MAD{ "MAD", "Fas Dirhemi", @@ -1073,26 +815,10 @@ tr{ "MAF", "Fas Frangı", } - MCF{ - "MCF", - "Yeni Fas Frangı", - } - MCG{ - "MCG", - "Fas Frangı (Germinal)", - } - MDC{ - "MDC", - "Moldova Leyi (Cupon)", - } MDL{ "MDL", "Moldova Leyi", } - MDR{ - "MDR", - "Moldova Rublesi (Cupon)", - } MGA{ "MGA", "Madagaskar Ariary", @@ -1101,18 +827,10 @@ tr{ "MGF", "Madagaskar Frangı", } - MHD{ - "MHD", - "Marshall Adaları Doları", - } MKD{ "MDen", "Makedonya Dinarı", } - MKN{ - "MKN", - "Makedonya Dinarı (1992-1993)", - } MLF{ "MLF", "Mali Frangı", @@ -1121,10 +839,6 @@ tr{ "MMK", "Myanmar Kyatı", } - MMX{ - "MMX", - "Myanmar Doları FEC", - } MNT{ "Tug", "Moğol Tugriki", @@ -1133,10 +847,6 @@ tr{ "MOP", "Makao Patacası", } - MQF{ - "MQF", - "Martinik Frangı", - } MRO{ "UM", "Moritanya Ouguiyası", @@ -1145,18 +855,10 @@ tr{ "Lm", "Malta Lirası", } - MTP{ - "MTP", - "Malta Lirası", - } MUR{ "MUR", "Mauritius Rupisi", } - MVP{ - "MVP", - "Maldiv Adaları Rupisi", - } MVR{ "MVR", "Maldiv Adaları Rufiyaa", @@ -1165,10 +867,6 @@ tr{ "MK", "Malavi Kvaçası", } - MWP{ - "MWP", - "Malavi Lirası", - } MXN{ "MEX$", "Meksika Pezosu", @@ -1197,30 +895,14 @@ tr{ "N$", "Namibya Doları", } - NCF{ - "NCF", - "Yeni Kaledonya Frangı (Germinal)", - } NGN{ "NGN", "Nijerya Nairası", } - NGP{ - "NGP", - "Nijerya Lirası", - } - NHF{ - "NHF", - "Yeni Hebridler CFP Frangı", - } NIC{ "NIC", "Nikaragua Kordobası", } - NIG{ - "NIG", - "Altın Nikaragua Kordobası", - } NIO{ "NIO", "Nikaragua Kordobası (Oro)", @@ -1241,34 +923,14 @@ tr{ "$NZ", "Yeni Zelanda Doları", } - NZP{ - "NZP", - "Yeni Zelanda Lirası", - } OMR{ "RO", "Umman Riyali", } - OMS{ - "OMS", - "Umman Riyali (Saidi)", - } PAB{ "PAB", "Panama Balboası", } - PDK{ - "PDK", - "Transdniestria Rublesi (Kupon)", - } - PDN{ - "PDN", - "Yeni Transdniestria Rublesi", - } - PDR{ - "PDR", - "Transdniestria Rublesi", - } PEI{ "PEI", "Peru İnti", @@ -1297,22 +959,10 @@ tr{ "Zl", "Polonya Zlotisi", } - PLX{ - "PLX", - "Polonya ABD Doları FEC", - } PLZ{ "PLZ", "Polonya Zlotisi (1950-1995)", } - PSP{ - "PSP", - "Filistin Lirası", - } - PTC{ - "PTC", - "Portekiz Conto", - } PTE{ "PTE", "Portekiz Esküdosu", @@ -1325,18 +975,10 @@ tr{ "QR", "Katar Riyali", } - REF{ - "REF", - "Reunion Frangı", - } ROL{ "leu", "Romen Leyi", } - RON{ - "RON", - "Yeni Romen Leyi", - } RUB{ "RUB", "Rus Rublesi", @@ -1353,10 +995,6 @@ tr{ "SRl", "Suudi Arabistan Riyali", } - SAS{ - "SAS", - "Suudi Arabistan Riyali (Sovereign)", - } SBD{ "SI$", "Solomon Adaları Doları", @@ -1385,10 +1023,6 @@ tr{ "SHP", "Saint Helena Lirası", } - SIB{ - "SIB", - "Slovenya Toları (Bons)", - } SIT{ "SIT", "Slovenya Toları", @@ -1401,38 +1035,18 @@ tr{ "SLL", "Sierra Leone Leonesi", } - SML{ - "SML", - "San Marino Lirası", - } SOS{ "So. Sh.", "Somali Şilini", } - SQS{ - "SQS", - "Somaliland Şilini", - } SRG{ "Sf", "Surinam Guldeni", } - SSP{ - "SSP", - "İskoçya Lirası", - } STD{ "Db", "Sao Tome ve Principe Dobrası", } - STE{ - "STE", - "Sao Tome ve Principe Esküdosu", - } - SUN{ - "SUN", - "Yeni Sovyet Rublesi", - } SUR{ "SUR", "Sovyet Rublesi", @@ -1449,14 +1063,6 @@ tr{ "E", "Swaziland Lilangenisi", } - TCC{ - "TCC", - "Turks ve Caicos Adaları Crownu", - } - TDF{ - "TDF", - "Çad CFA Frangı", - } THB{ "THB", "Tayland Bahtı", @@ -1481,38 +1087,22 @@ tr{ "T$", "Tonga Paʻangası", } - TOS{ - "TOS", - "Tonga Sterlini", - } TPE{ "TPE", "Timor Esküdosu", } - TPP{ - "TPP", - "Timor Patacası", - } TRL{ "TL", "Türk Lirası", } TRY{ - "YTL", + "TRY", "Yeni Türk Lirası", } TTD{ "TT$", "Trinidad ve Tobago Doları", } - TTO{ - "TTO", - "Eski Trinidad ve Tobago Doları", - } - TVD{ - "TVD", - "Tuvalu Doları", - } TWD{ "NT$", "Yeni Tayvan Doları", @@ -1549,10 +1139,6 @@ tr{ "USS", "ABD Doları (Aynı gün)", } - UYF{ - "UYF", - "Uruguay Pezosu (Fuerte)", - } UYP{ "UYP", "Uruguay Pezosu (1975-1993)", @@ -1561,78 +1147,30 @@ tr{ "Ur$", "Uruguay Pezosu (Uruguayo)", } - UZC{ - "UZC", - "Özbekistan Sumu (Coupon)", - } UZS{ "UZS", "Özbekistan Sumu", } - VAL{ - "VAL", - "Vatikan Şehir Devleti Lirası", - } - VDD{ - "VDD", - "Kuzey Vietnam Piastre Dong Viet", - } - VDN{ - "VDN", - "Yeni Kuzey Vietnam Dongu", - } - VDP{ - "VDP", - "Kuzey Vietnam Viet Minh Piastre Dong Viet", - } VEB{ "Be", "Venezuela Bolivarı", } - VGD{ - "VGD", - "İngiliz Virgin Adaları Doları", - } VND{ "VND", "Vietnam Dongu", } - VNN{ - "VNN", - "Yeni Vietnam Dongu", - } - VNR{ - "VNR", - "Vietnam Cumhuriyeti Dongu", - } - VNS{ - "VNS", - "Vietnam Ulusal Dongu", - } VUV{ "VT", "Vanuatu Vatusu", } - WSP{ - "WSP", - "Batı Samoa Lirası", - } WST{ "WST", "Batı Samoa Talası", } - XAD{ - "XAD", - "Asya Hesap Birimi Dinarı", - } XAF{ "XAF", "CFA Frangı BEAC", } - XAM{ - "XAM", - "Asya Para Birimi", - } XAU{ "XAU", "Altın", @@ -1641,10 +1179,6 @@ tr{ "XBA", "Birleşik Avrupa Birimi", } - XBB{ - "XBB", - "Avrupa Para Birimi", - } XBC{ "XBC", "Avrupa Hesap Birimi (XBC)", @@ -1657,18 +1191,10 @@ tr{ "EC$", "Doğu Karayip Doları", } - XCF{ - "XCF", - "CFA Yeni Frank", - } XDR{ "XDR", "Özel Çekme Hakkı (SDR)", } - XEF{ - "XEF", - "CFA Frank BCEAEC", - } XEU{ "XEU", "Avrupa Para Birimi", @@ -1681,18 +1207,6 @@ tr{ "XFU", "Fransız UIC-Frangı", } - XID{ - "XID", - "İslam Dinarı", - } - XMF{ - "XMF", - "Ana Fransa yeni Frangı", - } - XNF{ - "XNF", - "Fransız Antilleri CFA Frangı", - } XOF{ "XOF", "CFA Frangı BCEAO", @@ -1701,18 +1215,10 @@ tr{ "CFPF", "CFP Frangı", } - XTR{ - "XTR", - "COMECON Transfer Edilebilir Rublesi", - } YDD{ "YDD", "Yemen Dinarı", } - YEI{ - "YEI", - "Yemen Riyali (Imadi)", - } YER{ "YRl", "Yemen Riyali", @@ -1721,14 +1227,6 @@ tr{ "YUD", "Yugoslav Dinarı (Hard)", } - YUF{ - "YUF", - "Yugoslav Federasyonu Dinarı", - } - YUG{ - "YUG", - "Yugoslav 1994 Dinarı", - } YUM{ "YUM", "Yeni Yugoslav Dinarı", @@ -1737,22 +1235,10 @@ tr{ "YUN", "Konvertibl Yugoslav Dinarı", } - YUO{ - "YUO", - "Yugoslav Ekim Dinarı", - } - YUR{ - "YUR", - "Yugoslav Dinarı (Reformed)", - } ZAL{ "ZAL", "Güney Afrika Randı (finansal)", } - ZAP{ - "ZAP", - "Güney Afrika Lirası", - } ZAR{ "R", "Güney Afrika Randı", @@ -1761,10 +1247,6 @@ tr{ "ZMK", "Zambiya Kvaçası", } - ZMP{ - "ZMP", - "Zambiya Lirası", - } ZRN{ "ZRN", "Yeni Zaire Zairesi", @@ -1778,7 +1260,7 @@ tr{ "Zimbabwe Doları", } } - ExemplarCharacters{"[a-zâûöüıçşğ]"} + ExemplarCharacters{"[a-c ç d-g ğ h ı i İ j-o ö p r s ş t u ü v y z]"} Keys{ calendar{"Takvim"} collation{"Sıralama"} @@ -1834,7 +1316,7 @@ tr{ crh{"Kırım Türkçesi; Kırım Tatarcası"} crp{"Creoles ve Pidgins (Diğer)"} cs{"Çekçe"} - cu{"Slav Kilisesi"} + cu{"Kilise Slavcası"} cus{"Cushitic (Diğer)"} cv{"Çuvaş"} cy{"Gal Dili"} @@ -1882,6 +1364,7 @@ tr{ ht{"Haiti Dili"} hu{"Macarca"} hy{"Ermenice"} + ia{"Interlingua"} id{"Endonezya Dili"} ie{"Interlingue"} ik{"Inupiak"} @@ -1937,7 +1420,7 @@ tr{ nai{"Kuzey Amerika Yerlileri Dili (Diğer)"} nb{"Norveç Kitap Dili"} nd{"Kuzey Ndebele"} - nds{"Alçak Almanca; Alçak Sakson"} + nds{"Aşağı Almanca; Aşağı Sakson"} ne{"Nepal Dili"} nic{"Nijer - Kordofanian (Diğer)"} nl{"Hollanda Dili"} @@ -1945,7 +1428,7 @@ tr{ no{"Norveççe"} nr{"Güney Ndebele"} nub{"Nubian Dilleri"} - oc{"Occitan"} + oc{"Occitan (1500 sonrası); Provençal"} oj{"Ojibwa"} om{"Oromo (Afan)"} or{"Oriya"} @@ -2016,7 +1499,7 @@ tr{ tk{"Türkmence"} tl{"Tagalog"} tn{"Setswana"} - to{"Tonga"} + to{"Tonga (Tonga Adaları)"} tr{"Türkçe"} ts{"Tsonga"} tt{"Tatarca"} @@ -2056,9 +1539,15 @@ tr{ "E", "‰", "∞", - "�", + "NaN", "+", } + NumberPatterns{ + "#,##0.###", + "¤ #,##0.00", + "#,##0%", + "#E0", + } Scripts{ Arab{"Arapça"} Armn{"Ermenice"} @@ -2100,13 +1589,9 @@ tr{ traditional{"Geleneksel"} } } - Version{"1.3"} + Version{"1.70"} calendar{ gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", @@ -2129,15 +1614,6 @@ tr{ "Cum", "Cmt", } - narrow{ - "P", - "P", - "S", - "Ç", - "P", - "C", - "C", - } wide{ "Pazar", "Pazartesi", @@ -2148,6 +1624,17 @@ tr{ "Cumartesi", } } + stand-alone{ + narrow{ + "P", + "P", + "S", + "Ç", + "P", + "C", + "C", + } + } } eras{ abbreviated{ @@ -2155,6 +1642,41 @@ tr{ "MS", } } + fields{ + day{ + dn{"Gün"} + } + dayperiod{ + dn{"Günün Bölümü"} + } + era{ + dn{"Miladi Dönem"} + } + hour{ + dn{"Saat"} + } + minute{ + dn{"Dakika"} + } + month{ + dn{"Ay"} + } + second{ + dn{"Saniye"} + } + week{ + dn{"Hafta"} + } + weekday{ + dn{"Haftanın Günü"} + } + year{ + dn{"Yıl"} + } + zone{ + dn{"Saat Dilimi"} + } + } monthNames{ format{ abbreviated{ @@ -2171,6 +1693,22 @@ tr{ "Kas", "Ara", } + wide{ + "Ocak", + "Şubat", + "Mart", + "Nisan", + "Mayıs", + "Haziran", + "Temmuz", + "Ağustos", + "Eylül", + "Ekim", + "Kasım", + "Aralık", + } + } + stand-alone{ narrow{ "O", "Ş", @@ -2185,153 +1723,296 @@ tr{ "K", "A", } + } + } + quarters{ + format{ + abbreviated{ + "Ç1", + "Ç2", + "Ç3", + "Ç4", + } wide{ - "Ocak", - "Şubat", - "Mart", + "1. çeyrek", + "2. çeyrek", + "3. çeyrek", + "4. çeyrek", + } + } + } + } + hebrew{ + monthNames{ + format{ + abbreviated{ + "Tişri", + "Heşvan", + "Kislev", + "Tevet", + "Şevat", + "Veadar", + "Adar", "Nisan", - "Mayıs", - "Haziran", - "Temmuz", - "Ağustos", - "Eylül", - "Ekim", - "Kasım", - "Aralık", + "Iyar", + "Sivan", + "Tamuz", + "Av", + "Ellul", + } + wide{ + "Tişri", + "Heşvan", + "Kislev", + "Tevet", + "Şevat", + "Veadar", + "Adar", + "Nisan", + "İyar", + "Sivan", + "Tamuz", + "Av", + "Ellul", + } + } + } + } + islamic{ + monthNames{ + format{ + abbreviated{ + "Muharrem", + "Safer", + "Rebiülevvel", + "Rebiülahir", + "Cemaziyelevvel", + "Cemaziyelahir", + "Recep", + "Shaʻban", + "Ramadan", + "Shawwal", + "Zilkade", + "Dhuʻl-Hijjah", + } + wide{ + "Muharrem", + "Safer", + "Rebiülevvel", + "Rebiülahir", + "Cemaziyelevvel", + "Cemaziyelahir", + "Recep", + "Şaban", + "Ramazan", + "Şevval", + "Zilkade", + "Zilhicce", + } + } + } + } + islamic-civil{ + monthNames{ + format{ + wide{ + "Muharrem", + "Safer", + "Rebiülevvel", + "Rebiülahir", + "Cemaziyelevvel", + "Cemaziyelahir", + "Recep", + "Şaban", + "Ramazan", + "Şevval", + "Zilkade", + "Zilhicce", + } + } + } + } + persian{ + monthNames{ + format{ + abbreviated{ + "Ferwerdin", + "Ordibeheşt", + "Hordâd", + "Tir", + "Mordâd", + "Şehrivar", + "Mehr", + "Aban", + "Azar", + "Dey", + "Behman", + "Esfand", + } + wide{ + "Ferwerdin", + "Ordibeheşt", + "Hordâd", + "Tir", + "Mordâd", + "Şehrivar", + "Mehr", + "Âbân", + "Âzar", + "Daî", + "Behman", + "İsfand", } } } } } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} zoneStrings{ - { - "America/Los_Angeles", - "Pasifik Standart Saati", - "PST", - "Pasifik Yaz Saati", - "PDT", - "Los Angeles", - } - { - "America/Denver", - "ABD Sıradağlar Standart Saati", - "MST", - "ABD Sıradağlar Yaz Saati", - "MDT", - "Denver", - } - { - "America/Phoenix", - "ABD Sıradağlar Standart Saati", - "MST", - "ABD Sıradağlar Standart Saati", - "MST", - "Phoenix", - } - { - "America/Chicago", - "Merkezi Standart Saati", - "CST", - "Merkezi Yaz Saati", - "CDT", - "Şikago", - } - { - "America/New_York", - "Doğu Standart Saati", - "EST", - "Doğu Yaz Saati", - "EDT", - "New York", - } - { - "America/Indianapolis", - "Doğu Standart Saati", - "EST", - "Doğu Standart Saati", - "EST", - "Indianapolis", - } - { - "Pacific/Honolulu", - "Hawaii Standart Saati", - "HST", - "Hawaii Standart Saati", - "HST", - "Honolulu", - } - { - "America/Anchorage", - "Alaska Standart Saati", - "AST", - "Alaska Yaz Saati", - "ADT", - "Anchorage", - } - { - "America/Halifax", - "Atlantik Standart Saati", - "AST", - "Atlantik Yaz Saati", - "ADT", - "Halifax", - } - { - "America/St_Johns", - "Newfoundland Standart Saati", - "CNT", - "Newfoundland Yaz Saati", - "CDT", - "St. Johns", - } - { - "Europe/Paris", - "Orta Avrupa Standart Saati", - "CET", - "Orta Avrupa Yaz Saati", - "CEST", - "Paris", - } - { - "Africa/Casablanca", - "Greenwich Saati", - "GMT", - "Greenwich Saati", - "GMT", - "Kasablanka", - } - { - "Asia/Jerusalem", - "İsrail Standart Saati", - "IST", - "İsrail Standart Saati", - "IDT", - "Kudüs", - } - { - "Asia/Tokyo", - "Japonya Standart Saati", - "JST", - "Japonya Standart Saati", - "JST", - "Tokyo", - } - { - "Europe/Bucharest", - "Doğu Avrupa Standart Saati", - "EET", - "Doğu Avrupa Yaz Saati", - "EEST", - "Bükreş", - } - { - "Asia/Shanghai", - "Çin Standart Saati", - "CTT", - "Çin Standart Saati", - "CDT", - "Şangay", + "Africa:Ceuta"{ + ec{"Septe"} + } + "Africa:Kinshasa"{ + ec{"Kinşasa"} + } + "Africa:Lubumbashi"{ + ec{"Lubumbaşi"} + } + "America:Anchorage"{ + ec{"Anchorage"} + ld{"Alaska Yaz Saati"} + ls{"Alaska Standart Saati"} + } + "America:Cancun"{ + ec{"Kankun"} + } + "America:Chicago"{ + ec{"Şikago"} + ld{"Merkezi Yaz Saati"} + ls{"Merkezi Standart Saati"} + } + "America:Denver"{ + ec{"Denver"} + ld{"ABD Sıradağlar Yaz Saati"} + ls{"ABD Sıradağlar Standart Saati"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"Atlantik Yaz Saati"} + ls{"Atlantik Standart Saati"} + } + "America:Indianapolis"{ + ec{"Indianapolis"} + ld{"Doğu (Indianapolis) Yaz Saati"} + ls{"Doğu Standart Saati"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + ld{"Pasifik Yaz Saati"} + ls{"Pasifik Standart Saati"} + } + "America:Mexico_City"{ + ec{"Meksiko City"} + } + "America:New_York"{ + ec{"New York"} + ld{"Doğu Yaz Saati"} + ls{"Doğu Standart Saati"} + } + "America:Phoenix"{ + ec{"Phoenix"} + ld{"ABD Sıradağlar Standart Saati"} + ls{"ABD Sıradağlar Standart Saati"} + } + "America:St_Johns"{ + ec{"St Johns"} + ld{"Newfoundland Yaz Saati"} + ls{"Newfoundland Standart Saati"} + } + "Antarctica:South_Pole"{ + ec{"Güney Kutbu"} + } + "Asia:Almaty"{ + ec{"Almatı"} + } + "Asia:Aqtau"{ + ec{"Şevçenko"} + } + "Asia:Aqtobe"{ + ec{"Aktyubinsk"} + } + "Asia:Choibalsan"{ + ec{"Çoybalsan"} + } + "Asia:Chongqing"{ + ec{"Çunking"} + } + "Asia:Hovd"{ + ec{"Kobdo"} + } + "Asia:Jakarta"{ + ec{"Cakarta"} + } + "Asia:Kamchatka"{ + ec{"Kamçatka"} + } + "Asia:Kashgar"{ + ec{"Kaşgar"} + } + "Asia:Kuching"{ + ec{"Kuçing"} + } + "Asia:Oral"{ + ec{"Uralsk"} + } + "Asia:Qyzylorda"{ + ec{"Kızıl-Orda"} + } + "Asia:Samarkand"{ + ec{"Semerkand"} + } + "Asia:Shanghai"{ + ec{"Şangay"} + ld{"Çin Standart Saati"} + ls{"Çin Standart Saati"} + } + "Asia:Tashkent"{ + ec{"Taşkent"} + } + "Asia:Ulaanbaatar"{ + ec{"Ulanbator"} + } + "Asia:Urumqi"{ + ec{"Urumçi"} + } + "Atlantic:Azores"{ + ec{"Azor Adaları"} + } + "Atlantic:Canary"{ + ec{"Kanarya"} + } + "Australia:Melbourne"{ + ec{"Melborn"} + } + "Australia:Sydney"{ + ec{"Sidney"} + } + "Europe:Lisbon"{ + ec{"Lizbon"} + } + "Europe:London"{ + ec{"Londra"} + } + "Europe:Moscow"{ + ec{"Moskova"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"Hawaii Standart Saati"} + ls{"Hawaii Standart Saati"} + } + "Pacific:Marquesas"{ + ec{"Markiz"} } } } diff --git a/icuSources/data/locales/tr_TR.txt b/icuSources/data/locales/tr_TR.txt index 47725d82..6060bd68 100644 --- a/icuSources/data/locales/tr_TR.txt +++ b/icuSources/data/locales/tr_TR.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/tr_TR.xml +// * Source File:/common/main/tr_TR.xml // * // *************************************************************************** tr_TR{ - NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", - "#,##0%", - "#E0", + Version{"1.39"} + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} } - Version{"1.2"} } diff --git a/icuSources/data/locales/uk.txt b/icuSources/data/locales/uk.txt index 3c4b962a..5b250ec3 100644 --- a/icuSources/data/locales/uk.txt +++ b/icuSources/data/locales/uk.txt @@ -1,2035 +1,2310 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/uk.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/uk.xml - */ -uk{ - Countries{ - AD{"Андорра"} - AE{"Обʼєднані Арабські Емірати"} - AF{"Афганістан"} - AG{"Антигуа і Барбуда"} - AI{"Ангілья"} - AL{"Албанія"} - AM{"Вірменія"} - AN{"Нідерландські Антільські Острови"} - AO{"Ангола"} - AQ{"Антарктика"} - AR{"Аргентина"} - AS{"Американське Самоа"} - AT{"Австрія"} - AU{"Австралія"} - AW{"Аруба"} - AZ{"Азербайджан"} - BA{"Боснія і Герцоговина"} - BB{"Барбадос"} - BD{"Бангладеш"} - BE{"Бельгія"} - BF{"Буркіна-Фасо"} - BG{"Болгарія"} - BH{"Бахрейн"} - BI{"Бурунді"} - BJ{"Бенін"} - BM{"Бермуди"} - BN{"Бруней"} - BO{"Болівія"} - BR{"Бразилія"} - BS{"Багами"} - BT{"Бутан"} - BV{"Буве, острів"} - BW{"Ботсвана"} - BY{"Білорусь"} - BZ{"Беліз"} - CA{"Канада"} - CC{"Кокосові острови"} - CD{"Конго, Демократична Республіка"} - CF{"Центрально-Африканська Республіка"} - CG{"Конго"} - CH{"Швейцарія"} - CI{"Кот-д’Івуар"} - CK{"Острови Кука"} - CL{"Чилі"} - CM{"Камерун"} - CN{"Китай"} - CO{"Колумбія"} - CR{"Коста-Рика"} - CU{"Куба"} - CV{"Кабо-Верде"} - CX{"Острів Різдва"} - CY{"Кіпр"} - CZ{"Чеська республіка"} - DE{"Німеччина"} - DJ{"Джібуті"} - DK{"Данія"} - DM{"Домінік"} - DO{"Домініканська Республіка"} - DZ{"Алжир"} - EC{"Еквадор"} - EE{"Естонія"} - EG{"Єгипет"} - EH{"Західна Сахара"} - ER{"Еритрея"} - ES{"Іспанія"} - ET{"Ефіопія"} - FI{"Фінляндія"} - FJ{"Фіджі"} - FK{"Фолклендські Острови (Мальвіни)"} - FM{"Мікронезія"} - FO{"Фарерські острови"} - FR{"Франція"} - GA{"Габон"} - GB{"Великобританія"} - GD{"Гренада"} - GE{"Грузія"} - GF{"Французька Гвіана"} - GH{"Гана"} - GI{"Гібралтар"} - GL{"Гренландія"} - GM{"Гамбія"} - GN{"Гвінея"} - GP{"Гваделупа"} - GQ{"Екваторіальна Гвінея"} - GR{"Греція"} - GS{"Південна Джорджія та Південні Сандвічеві Острови"} - GT{"Гватемала"} - GU{"Гуам"} - GW{"Гвінея-Біссау"} - GY{"Гайана"} - HK{"Гонконг, С.А.Р. Китаю"} - HM{"Острови Херд і Мак-Дональд"} - HN{"Гондурас"} - HR{"Хорватія"} - HT{"Гаїті"} - HU{"Угорщина"} - ID{"Індонезія"} - IE{"Ірландія"} - IL{"Ізраїль"} - IN{"Індія"} - IO{"Британські території Індійського океану"} - IQ{"Ірак"} - IR{"Іран"} - IS{"Ісландія"} - IT{"Італія"} - JM{"Ямайка"} - JO{"Йорданія"} - JP{"Японія"} - KE{"Кенія"} - KG{"Киргизстан"} - KH{"Камбоджа"} - KI{"Кірибаті"} - KM{"Коморські Острови"} - KN{"Сент-Кітс і Невіс"} - KP{"Північна Корея"} - KR{"Південна Корея"} - KW{"Кувейт"} - KY{"Кайманові острови"} - KZ{"Казахстан"} - LA{"Лаос"} - LB{"Ліван"} - LC{"Сент-Люсія"} - LI{"Ліхтенштейн"} - LK{"Шрі-Ланка"} - LR{"Ліберія"} - LS{"Лесото"} - LT{"Литва"} - LU{"Люксембург"} - LV{"Латвія"} - LY{"Лівія"} - MA{"Марокко"} - MC{"Монако"} - MD{"Молдова"} - MG{"Мадагаскар"} - MH{"Маршаллові Острови"} - MK{"Македонія"} - ML{"Малі"} - MM{"Мʼянма"} - MN{"Монголія"} - MO{"Макао, С.А.Р. Китаю"} - MP{"Північні Маріанські Острови"} - MQ{"Мартиніка"} - MR{"Мавританія"} - MS{"Монсеррат"} - MT{"Мальта"} - MU{"Маврикій"} - MV{"Мальдіви"} - MW{"Малаві"} - MX{"Мексика"} - MY{"Малайзія"} - MZ{"Мозамбік"} - NA{"Намібія"} - NC{"Нова Каледонія"} - NE{"Нігер"} - NF{"Острів Норфолк"} - NG{"Нігерія"} - NI{"Нікарагуа"} - NL{"Нідерланди"} - NO{"Норвегія"} - NP{"Непал"} - NR{"Науру"} - NU{"Нія"} - NZ{"Нова Зеландія"} - OM{"Оман"} - PA{"Панама"} - PE{"Перу"} - PF{"Французька Полінезія"} - PG{"Папуа Нова Гвінея"} - PH{"Філіппіни"} - PK{"Пакистан"} - PL{"Польща"} - PM{"Сен-Пʼєр і Мікелон"} - PN{"Піткерн"} - PR{"Пуерто-Ріко"} - PS{"Палестина"} - PT{"Португалія"} - PW{"Палау"} - PY{"Парагвай"} - QA{"Катар"} - RE{"Реюньйон"} - RO{"Румунія"} - RU{"Росія"} - RW{"Руанда"} - SA{"Саудівська Аравія"} - SB{"Соломонові Острови"} - SC{"Сейшели"} - SD{"Судан"} - SE{"Швеція"} - SG{"Сінгапур"} - SH{"Св. Єлена"} - SI{"Словенія"} - SJ{"Свалбард і Ян Майєн, острови"} - SK{"Словакія"} - SL{"Сьєрра-Леоне"} - SM{"Сан-Маріно"} - SN{"Сенегал"} - SO{"Сомалі"} - SR{"Суринам"} - ST{"Сан-Томе і Прінсіпі"} - SV{"Сальвадор"} - SY{"Сирійська Арабська Республіка"} - SZ{"Свазіленд"} - TC{"Теркс і Кайкос"} - TD{"Чад"} - TF{"Французькі Південні Території"} - TG{"Того"} - TH{"Таїланд"} - TJ{"Таджикистан"} - TK{"Токелау"} - TL{"Східний Тимор"} - TM{"Туркменистан"} - TN{"Туніс"} - TO{"Тонга"} - TR{"Туреччина"} - TT{"Тринідад і Тобаго"} - TV{"Тувалу"} - TW{"Тайвань"} - TZ{"Танзанія, Обʼєднана Республіка"} - UA{"Україна"} - UG{"Уганда"} - UM{"Віддалені Острови США"} - US{"США"} - UY{"Уругвай"} - UZ{"Узбекистан"} - VA{"Ватикан"} - VC{"Сент-Вінсент і Гренадини"} - VE{"Венесуела"} - VG{"Віргінські острови (Британія)"} - VI{"Віргінські острови (США)"} - VN{"Вʼєтнам"} - VU{"Вануату"} - WF{"Валліс і Футуна, острови"} - WS{"Самоа"} - YE{"Ємен"} - YT{"Майот"} - YU{"Югославія"} - ZA{"ПАР"} - ZM{"Замбія"} - ZW{"Зімбабве"} - } - Currencies{ - ADD{ - "ADD", - "Андоррський динар", - } - ADP{ - "ADP", - "Андоррська песета", - } - AED{ - "AED", - "Дирхем ОАЕ", - } - AFA{ - "AFA", - "Афгані (1927-2002)", - } - AFN{ - "Af", - "Афгані", - } - AIF{ - "AIF", - "Франк Аффарсу та Ісаасу", - } - ALK{ - "ALK", - "Албанський лек (1946-1961)", - } - ALL{ - "lek", - "Албанський лек", - } - ALV{ - "ALV", - "Албанський лек", - } - AMD{ - "dram", - "Вірменський драм", - } - ANG{ - "NA f.", - "Гульден Нідерландських Антіл", - } - AOA{ - "AOA", - "Ангольська кванза", - } - AOK{ - "AOK", - "Ангольська кванза (1977-1990)", - } - AON{ - "AON", - "Ангольська нова кванза (1990-2000)", - } - AOS{ - "AOS", - "Ангольський ескудо", - } - ARA{ - "ARA", - "Аргентинський австрал", - } - ARP{ - "ARP", - "Аргентинське песо (1983-1985)", - } - ARS{ - "Arg$", - "Аргентинське песо", - } - ATS{ - "ATS", - "Австрійський шилінг", - } - AUD{ - "$A", - "Австралійський долар", - } - AUP{ - "AUP", - "Австралійський фунт", - } - AWG{ - "AWG", - "Арубський гульден", - } - AZM{ - "AZM", - "Азербайджанський манат", - } - BAD{ - "BAD", - "Динар Боснії і Гецоговини", - } - BAM{ - "KM", - "Конвертована марка Боснії і Герцоговини", - } - BAN{ - "BAN", - "Новий динар Боснії і Герцоговини", - } - BBD{ - "BDS$", - "Барбадоський долар", - } - BDT{ - "Tk", - "Бангладеська така", - } - BEC{ - "BEC", - "Бельгійський франк (конвертований)", - } - BEF{ - "BF", - "Бельгійський франк", - } - BEL{ - "BEL", - "Бельгійський франк (фінансовий)", - } - BGL{ - "lev", - "Болгарський твердий лев", - } - BGM{ - "BGM", - "Болгарський соціалістичний лев", - } - BGN{ - "BGN", - "Болгарський новий лев", - } - BGO{ - "BGO", - "Болгарський лев (1879-1952)", - } - BHD{ - "BD", - "Бахрейнський динар", - } - BIF{ - "Fbu", - "Бурундійський франк", - } - BMD{ - "Ber$", - "Бермудський долар", - } - BMP{ - "BMP", - "Бермудський фунт", - } - BND{ - "BND", - "Брунейський доларr", - } - BOB{ - "Bs", - "Болівіано", - } - BOL{ - "BOL", - "Болівіано (1863-1962)", - } - BOP{ - "BOP", - "Болівійське песо", - } - BOV{ - "BOV", - "Болівійський мвдол", - } - BRB{ - "BRB", - "Бразильське нове крузейро (1967-1986)", - } - BRC{ - "BRC", - "Бразильське крузадо", - } - BRE{ - "BRE", - "Бразильське крузейро (1990-1993)", - } - BRL{ - "R$", - "Бразильський реал", - } - BRN{ - "BRN", - "Бразильське нове крузадо", - } - BRR{ - "BRR", - "Бразильське крузейро", - } - BRZ{ - "BRZ", - "Бразильське крузейро (1942-1967)", - } - BSD{ - "BSD", - "Багамський долар", - } - BSP{ - "BSP", - "Багамський фунт", - } - BTN{ - "Nu", - "Бутанський нгултрум", - } - BTR{ - "BTR", - "Бутанська рупія", - } - BUK{ - "BUK", - "Бірманський кіат", - } - BUR{ - "BUR", - "Бірманська рупія", - } - BWP{ - "BWP", - "Ботсванська пула", - } - BYB{ - "BYB", - "Білоруський новий рубль (1994-1999)", - } - BYL{ - "BYL", - "Білоруський рубль (1992-1994)", - } - BYR{ - "Rbl", - "Білоруський рубль", - } - BZD{ - "BZ$", - "Белізький долар", - } - BZH{ - "BZH", - "Долар Британського Гондурасу", - } - CAD{ - "Can$", - "Канадський долар", - } - CDF{ - "CDF", - "Конголезький франк", - } - CDG{ - "CDG", - "Франк Конголезької Республіки", - } - CDL{ - "CDL", - "Конголезький заїр", - } - CFF{ - "CFF", - "Франк Центральноафриканської Республіки", - } - CHF{ - "SwF", - "Швейцарський франк", - } - CKD{ - "CKD", - "Долар Островів Кука", - } - CLC{ - "CLC", - "Чилійський кондор", - } - CLE{ - "CLE", - "Чилійський ескудо", - } - CLF{ - "CLF", - "Чилійський UF", - } - CLP{ - "Ch$", - "Чилійське песо", - } - CMF{ - "CMF", - "Камерунський франк", - } - CNY{ - "Y", - "Китайський юань", - } - COB{ - "COB", - "Колумбійське паперове песо", - } - COF{ - "COF", - "Конголезький франк", - } - COP{ - "Col$", - "Колумбійське песо", - } - CRC{ - "C", - "Коста-риканський колон", - } - CSC{ - "CSC", - "Чехословацька крона", - } - CSK{ - "CSK", - "Чехословацька тверда крона", - } - CUP{ - "CUP", - "Кубинське песо", - } - CUX{ - "CUX", - "Кубинські валютні сертифікати", - } - CVE{ - "CVEsc", - "Ескудо Кабо-Верде", - } - CWG{ - "CWG", - "Гульден Курасю", - } - CYP{ - "£C", - "Кіпрський фунт", - } - CZK{ - "CZK", - "Чеська крона", - } - DEM{ - "DEM", - "Німецька марка", - } - DJF{ - "DF", - "Франк Джібуті", - } - DKK{ - "DKr", - "Датська крона", - } - DOP{ - "RD$", - "Домініканське песо", - } - DZD{ - "DA", - "Алжирський динар", - } - DZF{ - "DZF", - "Алжирський новий франк", - } - ECS{ - "ECS", - "Еквадорське сукре", - } - ECV{ - "ECV", - "Еквадорський UVС", - } - EEK{ - "EEK", - "Естонська крона", - } - EGP{ - "EGP", - "Єгипетський фунт", - } - ERN{ - "ERN", - "Еритрейська накфа", - } - ESP{ - "ESP", - "Іспанська песета", - } - ETB{ - "Br", - "Ефіопський бир", - } - ETD{ - "ETD", - "Ефіопський долар", - } - EUR{ - "€", - "Євро", - } - FIM{ - "FIM", - "Фінляндська марка", - } - FIN{ - "FIN", - "Фінляндська марка (1860-1962)", - } - FJD{ - "F$", - "Фіджійський долар", - } - FJP{ - "FJP", - "Фіджійський фунт", - } - FKP{ - "FKP", - "Фолклендський фунт", - } - FOK{ - "FOK", - "Фарерська крона", - } - FRF{ - "FRF", - "Французький франк", - } - GAF{ - "GAF", - "Габонський франк", - } - GBP{ - "£", - "Англійський фунт стерлінгів", - } - GEL{ - "lari", - "Грузинський ларі", - } - GHC{ - "GHC", - "Ганський седі", - } - GHO{ - "GHO", - "Ганський старий седі", - } - GHP{ - "GHP", - "Ганський фунт", - } - GHR{ - "GHR", - "Ганський переоцінений седі", - } - GIP{ - "GIP", - "Гібралтарський фунт", - } - GLK{ - "GLK", - "Гренландська крона", - } - GMD{ - "GMD", - "Гамбійська даласі", - } - GMP{ - "GMP", - "Гамбійський фунт", - } - GNF{ - "GF", - "Гвійнейський франк", - } - GNI{ - "GNI", - "Гвінейський франк (1960-1972)", - } - GNS{ - "GNS", - "Гвінейське сілі", - } - GPF{ - "GPF", - "Гваделупський франк", - } - GQF{ - "GQF", - "Франк Екваторіальної Гвінеї", - } - GRD{ - "GRD", - "Грецька драхма", - } - GRN{ - "GRN", - "Грецька нова драхма", - } - GTQ{ - "Q", - "Гватемальський кетсаль", - } - GUF{ - "GUF", - "Франк Французької Гвіани", - } - GWE{ - "GWE", - "Ескудо Португальської Гвінеї", - } - GWM{ - "GWM", - "Мільрейс Португальської Гвінеї", - } - GWP{ - "GWP", - "Песо Гвінеї-Бісау", - } - GYD{ - "G$", - "Гайянський долар", - } - HKD{ - "HK$", - "Гонконгівський долар", - } - HNL{ - "L", - "Гондураська лемпіра", - } - HRD{ - "HRD", - "Хорватський динар", - } - HRK{ - "HRK", - "Хорватська куна", - } - HTG{ - "HTG", - "Гаїтянський гурд", - } - HUF{ - "Ft", - "Угорський форинт", - } - IBP{ - "IBP", - "Північноірланський фунт", - } - IDN{ - "IDN", - "Індонезійська нова рупія", - } - IDR{ - "Rp", - "Індонезійська рупія", - } - IEP{ - "IR£", - "Ірландський фунт", - } - ILL{ - "ILL", - "Ізраїльський шекель", - } - ILP{ - "ILP", - "Ізраїльський фунт", - } - ILS{ - "ILS", - "Ізраїльський новий шекель", - } - IMP{ - "IMP", - "Фунт стерлінгів Острова Мен", - } - INR{ - "INR", - "Індійська рупія", - } - IQD{ - "ID", - "Іракський динар", - } - IRR{ - "RI", - "Іранський ріал", - } - ISK{ - "ISK", - "Ісландська крона", - } - ITL{ - "₤", - "Італійська ліра", - } - JEP{ - "JEP", - "Фунт стерлінгів Джерсі", - } - JMD{ - "J$", - "Ямайський долар", - } - JMP{ - "JMP", - "Ямайський фунт", - } - JOD{ - "JD", - "Йорданський динар", - } - JPY{ - "¥", - "Японська єна", - } - KES{ - "K Sh", - "Кенійський шилінг", - } - KGS{ - "som", - "Киргизький сом", - } - KHO{ - "KHO", - "Камбоджійський старий рієль", - } - KHR{ - "CR", - "Камбоджійський рієль", - } - KID{ - "KID", - "Долар Кірибаті", - } - KMF{ - "CF", - "Коморський франк", - } - KPW{ - "KPW", - "Вона Північної Кореї", - } - KRO{ - "KRO", - "Стара вона Південної Кореї", - } - KRW{ - "KRW", - "Вона Південної Кореї", - } - KWD{ - "KD", - "Кувейтський динар", - } - KYD{ - "KYD", - "Долар Кайманових островів", - } - KZR{ - "KZR", - "Казахстанський рубль", - } - KZT{ - "T", - "Казахстанський тенге", - } - LAK{ - "LAK", - "Лаоський кіп", - } - LBP{ - "LL", - "Ліванський фунт", - } - LIF{ - "LIF", - "Ліхтенштейнський франк", - } - LKR{ - "SL Re", - "Шрі-ланкійська рупія", - } - LNR{ - "LNR", - "Цейлонська рупія", - } - LRD{ - "LRD", - "Ліберійський долар", - } - LSL{ - "M", - "Лесотський лоті", - } - LTL{ - "LTL", - "Литовський літ", - } - LTT{ - "LTT", - "Литовський талон", - } - LUF{ - "LUF", - "Люксембурзький франк", - } - LVL{ - "LVL", - "Латвійський лат", - } - LVR{ - "LVR", - "Латвійський рубль", - } - LYD{ - "LD", - "Лівійський динар", - } - LYP{ - "LYP", - "Лівійський фунт", - } - MAD{ - "MAD", - "Марокканський дирхем", - } - MAF{ - "MAF", - "Марокканський франк", - } - MCF{ - "MCF", - "Монакський новий франк", - } - MDL{ - "MDL", - "Молдовський лей", - } - MDR{ - "MDR", - "Молдовський рублевий купон", - } - MGA{ - "MGA", - "Мадагаскарський аріарі", - } - MGF{ - "MGF", - "Мадагаскарський франк", - } - MHD{ - "MHD", - "Долар Маршаллових островівr", - } - MKD{ - "MDen", - "Македонський динар", - } - MKN{ - "MKN", - "Македонський динар (1992-1993)", - } - MLF{ - "MLF", - "Малійський франк", - } - MMK{ - "MMK", - "Кʼят Мʼянми", - } - MNT{ - "Tug", - "Монгольський тугрик", - } - MOP{ - "MOP", - "Макао патака", - } - MQF{ - "MQF", - "Мартинікський франк", - } - MRO{ - "UM", - "Мавританська угія", - } - MTL{ - "Lm", - "Мальтійська ліра", - } - MTP{ - "MTP", - "Мальтійський фунт", - } - MUR{ - "MUR", - "Маврикійська рупія", - } - MVP{ - "MVP", - "Мальдівська рупія", - } - MVR{ - "MVR", - "Мальдівська руфія", - } - MWK{ - "MK", - "Малавійська квача", - } - MWP{ - "MWP", - "Малавійський фунт", - } - MXN{ - "MEX$", - "Мексиканське песо", - } - MXP{ - "MXP", - "Мексиканське срібне песо (1861-1992)", - } - MXV{ - "MXV", - "Мексиканський UDI", - } - MYR{ - "RM", - "Малайзійський рингіт", - } - MZE{ - "MZE", - "Мозамбіцький ескудо", - } - MZM{ - "Mt", - "Мозамбіцький метикал", - } - NAD{ - "N$", - "Намібійський долар", - } - NCF{ - "NCF", - "Франк Нової Каледонії", - } - NGN{ - "NGN", - "Нігерійська найра", - } - NGP{ - "NGP", - "Нігерійський фунт", - } - NHF{ - "NHF", - "Франк Гебрідських островів", - } - NIC{ - "NIC", - "Нікарагуанська кордоба", - } - NIG{ - "NIG", - "Нікарагуанська золота кордоба", - } - NIO{ - "NIO", - "Нікарагуанська кордоба оро", - } - NLG{ - "NLG", - "Нідерландський гульден", - } - NOK{ - "NKr", - "Норвезька крона", - } - NPR{ - "Nrs", - "Непальська рупія", - } - NZD{ - "$NZ", - "Новозеландський доларr", - } - NZP{ - "NZP", - "Новозеландський фунт", - } - OMR{ - "RO", - "Оманський ріал", - } - OMS{ - "OMS", - "Оманський ріал саїді", - } - PAB{ - "PAB", - "Панамська бальбоа", - } - PDK{ - "PDK", - "Придністровський рублевий купон", - } - PDN{ - "PDN", - "Придністровський новий рубль", - } - PDR{ - "PDR", - "Придністровський рубль", - } - PEI{ - "PEI", - "Перуанський інті", - } - PEN{ - "PEN", - "Перуанський новий сол", - } - PES{ - "PES", - "Перуанський сол", - } - PGK{ - "PGK", - "Кіна Папуа Нової Гвінеї", - } - PHP{ - "PHP", - "Філіппінське песо", - } - PKR{ - "Pra", - "Пакистанська рупія", - } - PLN{ - "Zl", - "Польський злотий", - } - PLZ{ - "PLZ", - "Польський злотий (1950-1995)", - } - PSP{ - "PSP", - "Палестинський фунт", - } - PTC{ - "PTC", - "Португальський конто", - } - PTE{ - "PTE", - "Португальський ескудо", - } - PYG{ - "PYG", - "Парагвайський гуарані", - } - QAR{ - "QR", - "Катарський ріал", - } - REF{ - "REF", - "Реюньйонський франк", - } - ROL{ - "leu", - "Румунський лей", - } - RON{ - "RON", - "Румунський новий лей", - } - RUB{ - "RUB", - "Російський рубль", - } - RUR{ - "RUR", - "Російський рубль (1991-1998)", - } - RWF{ - "RWF", - "Руандійський франк", - } - SAR{ - "SRl", - "Саудівський ріал", - } - SBD{ - "SI$", - "Долар Соломонових Островів", - } - SCR{ - "SR", - "Сейшельська рупія", - } - SDD{ - "SDD", - "Суданський динар", - } - SDP{ - "SDP", - "Суданський фунт", - } - SEK{ - "SKr", - "Шведська крона", - } - SGD{ - "S$", - "Сінгапурський долар", - } - SHP{ - "SHP", - "Фунт Святої Єлени", - } - SIT{ - "SIT", - "Словенський толар", - } - SKK{ - "Sk", - "Словацька крона", - } - SLL{ - "SLL", - "Леоне Сьєрра-Леоне", - } - SML{ - "SML", - "Ліра Сан-Марино", - } - SOS{ - "So. Sh.", - "Сомалійський шилінг", - } - SQS{ - "SQS", - "Сомалійський шилінг", - } - SRG{ - "Sf", - "Суринамський гульден", - } - SSP{ - "SSP", - "Шотландський фунт", - } - STD{ - "Db", - "Добра Сан-Томе і Прінсіпі", - } - STE{ - "STE", - "Ескудо Сан-Томе і Прінсіпі", - } - SUN{ - "SUN", - "Радянський новий рубль", - } - SUR{ - "SUR", - "Радянський рубль", - } - SVC{ - "SVC", - "Ель-Сальвадорський колон", - } - SYP{ - "LS", - "Сирійський фунт", - } - SZL{ - "E", - "Свазілендські лілангені", - } - TCC{ - "TCC", - "Крона Теркса і Кайкоса", - } - TDF{ - "TDF", - "Франк Чаду", - } - THB{ - "THB", - "Таїландський бат", - } - TJR{ - "TJR", - "Таджицький рубль", - } - TJS{ - "TJS", - "Таджицький сомоні", - } - TMM{ - "TMM", - "Туркменський манат", - } - TND{ - "TND", - "Туніський динар", - } - TOP{ - "T$", - "Паанга Тонго", - } - TOS{ - "TOS", - "Фунт стерлінгів Тонго", - } - TPE{ - "TPE", - "Тіморський ескудо", - } - TPP{ - "TPP", - "Тіморська патака", - } - TRL{ - "TL", - "Турецька ліра", - } - TRY{ - "TRY", - "Нова турецька ліра", - } - TTD{ - "TT$", - "Долар Тринідаду і Тобаго", - } - TTO{ - "TTO", - "Старий долар Тринідаду і Тобаго", - } - TVD{ - "TVD", - "Долар Тувалу", - } - TWD{ - "NT$", - "Новий тайванський долар", - } - TZS{ - "T Sh", - "Танзанійський шилінг", - } - UAH{ - "грн.", - "UAH", - } - UAK{ - "UAK", - "Український карбованець", - } - UGS{ - "UGS", - "Угандійський шилінг (1966-1987)", - } - UGX{ - "U Sh", - "Угандійський шилінг", - } - USD{ - "$", - "Долар США", - } - UYF{ - "UYF", - "Уругвайське сильне песо", - } - UYP{ - "UYP", - "Уругвайське песо (1975-1993)", - } - UYU{ - "Ur$", - "Уругвайське песо", - } - UZS{ - "UZS", - "Узбецький сум", - } - VAL{ - "VAL", - "Ватиканська ліра", - } - VDN{ - "VDN", - "Новий донг Північного Вʼєтнаму", - } - VEB{ - "Be", - "Венесуельський болівар", - } - VGD{ - "VGD", - "Долар Британських Віргінських Островів", - } - VND{ - "VND", - "Вʼєтнамський донг", - } - VNN{ - "VNN", - "Вʼєтнамський новий донг", - } - VNR{ - "VNR", - "Донг Вʼєтнамської Республіки", - } - VNS{ - "VNS", - "Вʼєтнамський національний донг", - } - VUV{ - "VT", - "Вануатська вату", - } - WSP{ - "WSP", - "Фунт Західного Самоа", - } - WST{ - "WST", - "Тала Західного Самоа", - } - XAF{ - "XAF", - "Франк Центральноафриканського фінансового товариства", - } - XAM{ - "XAM", - "Азіатська валютна одиниця", - } - XAU{ - "XAU", - "Золото", - } - XBB{ - "XBB", - "Європейська грошова одиниця", - } - XBC{ - "XBC", - "Європейська розрахункова одиниця (XBC)", - } - XBD{ - "XBD", - "Європейська розрахункова одиниця (XBD)", - } - XCD{ - "EC$", - "Долар Східних Кирибів", - } - XCF{ - "XCF", - "Новий франк КФА", - } - XDR{ - "XDR", - "Спеціальні права запозичення", - } - XEF{ - "XEF", - "Франк КФА BCEAEC", - } - XEU{ - "XEU", - "Європейська валютна одиниця", - } - XFO{ - "XFO", - "Французький золотий франк", - } - XFU{ - "XFU", - "Французький франк UIC", - } - XID{ - "XID", - "Ісламський динар", - } - XMF{ - "XMF", - "Франк французьких метрополій", - } - XNF{ - "XNF", - "Франк Французьких Антильських Островів", - } - XOF{ - "XOF", - "Франк Західноафриканського фінансового товариства", - } - XPF{ - "CFPF", - "Французький тихоокеанський франк", - } - XTR{ - "XTR", - "Рубль РЕВ", - } - YDD{ - "YDD", - "Єменський динар", - } - YER{ - "YRl", - "Єменський ріал", - } - YUD{ - "YUD", - "Югославський твердий динар", - } - YUF{ - "YUF", - "Динар Югославської Федерації", - } - YUG{ - "YUG", - "Югославський динар 1994", - } - YUM{ - "YUM", - "Югославський новий динар", - } - YUN{ - "YUN", - "Югославський конвертований динар", - } - YUO{ - "YUO", - "Югославський жовтневий динар", - } - YUR{ - "YUR", - "Югославський реформований динар", - } - ZAL{ - "ZAL", - "Південноафриканський ранд", - } - ZAP{ - "ZAP", - "Південноафриканський фунт", - } - ZAR{ - "R", - "Південноафриканський ранд", - } - ZMK{ - "ZMK", - "Замбійська квача", - } - ZMP{ - "ZMP", - "Замбійський фунт", - } - ZRN{ - "ZRN", - "Заїрський новий заїр", - } - ZRZ{ - "ZRZ", - "Заїрський заїр", - } - ZWD{ - "Z$", - "Зімбабвійський долар", - } - } - ExemplarCharacters{"[а-щюьяєіїґ ʼ]"} - Keys{ - calendar{"Календар"} - collation{"Сортування"} - currency{"Валюта"} - } - Languages{ - aa{"Афарська"} - ab{"Абхазька"} - af{"Африканс"} - am{"Амхарік"} - ar{"Арабська"} - as{"Ассамська"} - ay{"Аймара"} - az{"Азербайджанська"} - ba{"Башкирська"} - be{"Білоруська"} - bg{"Болгарська"} - bh{"Біхарійська"} - bi{"Бісламійська"} - bn{"Бенгальська"} - bo{"Тибетська"} - br{"Бретонська"} - ca{"Каталонська"} - co{"Корсиканська"} - cs{"Чеська"} - cy{"Валлійська"} - da{"Датська"} - de{"Німецька"} - dz{"Дзонг-ке"} - el{"Грецька"} - en{"Англійська"} - eo{"Есперанто"} - es{"Іспанська"} - et{"Естонська"} - eu{"Басків"} - fa{"Перська"} - fi{"Фінська"} - fj{"Фіджі"} - fo{"Фарерська"} - fr{"Французька"} - fy{"Фризька"} - ga{"Ірландська"} - gd{"Гаельська"} - gl{"Галісійська"} - gn{"Гуарані"} - gu{"Гуяраті"} - ha{"Хауса"} - he{"Іврит"} - hi{"Гінді"} - hr{"Хорватська"} - hu{"Угорська"} - hy{"Вірменська"} - ia{"Інтерлінгва"} - id{"Індонезійська"} - ie{"Інтерлінгва"} - ik{"Інупіак"} - is{"Ісландська"} - it{"Італійська"} - ja{"Японська"} - jv{"Яванська"} - ka{"Грузинська"} - kk{"Казахська"} - kl{"Калааллісут"} - km{"Кхмерська"} - kn{"Каннада"} - ko{"Корейська"} - ks{"Кашмірська"} - ku{"Курдська"} - ky{"Киргизька"} - la{"Латинська"} - ln{"Лінгала"} - lo{"Лаоська"} - lt{"Литовська"} - lv{"Латвійська"} - mg{"Малагасійська"} - mi{"Маорі"} - mk{"Македонська"} - ml{"Малайялам"} - mn{"Монгольська"} - mo{"Молдавська"} - mr{"Маратхі"} - ms{"Малайська"} - mt{"Мальтійська"} - my{"Бірманська"} - na{"Науру"} - ne{"Непальська"} - nl{"Голландська"} - no{"Норвезька"} - oc{"Окитан"} - om{"Оромо"} - or{"Орія"} - pa{"Панджабі"} - pl{"Польська"} - ps{"Пашто"} - pt{"Португальська"} - qu{"Кечуа"} - rm{"Ретророманські діалекти"} - rn{"Кірундійська"} - ro{"Румунська"} - ru{"Російська"} - rw{"Кінаруанда"} - sa{"Санскрит"} - sd{"Сіндтхі"} - sg{"Сангро"} - sh{"Сербсько-хорватська"} - si{"Сингальська"} - sk{"Словацька"} - sl{"Словенська"} - sm{"Самоанська"} - sn{"Шона"} - so{"Сомалі"} - sq{"Албанська"} - sr{"Сербська"} - ss{"Сісваті"} - st{"Сото, південний діалект"} - su{"Суданська"} - sv{"Шведська"} - sw{"Суахілі"} - ta{"Тамільська"} - te{"Телугу"} - tg{"Таджицька"} - th{"Тайська"} - ti{"Тигріні"} - tk{"Туркменська"} - tl{"Тагальська"} - tn{"Сетсванська"} - to{"Тонга (острови Тонга)"} - tr{"Турецька"} - ts{"Тсонго"} - tt{"Татарська"} - tw{"Тві"} - ug{"Уйгурська"} - uk{"Українська"} - ur{"Урду"} - uz{"Узбецька"} - vi{"Вʼєтнамська"} - vo{"Волапак"} - wo{"Волоф"} - xh{"Кхоса"} - yi{"Ідиш"} - yo{"Йоруба"} - za{"Зуанг"} - zh{"Китайська"} - zu{"Зулуська"} - } - LocaleScript{ - "Cyrl", - } - NumberElements{ - ",", - " ", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - "+", - } - Scripts{ - Arab{"Арабський"} - Armn{"Вірменський"} - Beng{"Бенгальський"} - Bopo{"Бопомофо"} - Brai{"Брайля"} - Buhd{"Бухід"} - Cans{"Уніфіковані символи канадських туземців"} - Cher{"Черокі"} - Copt{"Коптський"} - Cprt{"Кіпрський"} - Cyrl{"Кириличний"} - Deva{"Деванагарі"} - Dsrt{"Дезерет"} - Ethi{"Ефіопський"} - Geor{"Грузинський"} - Goth{"Готський"} - Grek{"Грецький"} - Gujr{"Гуяраті"} - Guru{"Гурмукхі"} - Hang{"Хангул"} - Hano{"Хануну"} - Hebr{"Єврейський"} - Hira{"Хірагана"} - Ital{"Давньоіталійський"} - Kana{"Катакана"} - Khmr{"Кхмерський"} - Knda{"Каннада"} - Laoo{"Лаоський"} - Latn{"Латинський"} - Limb{"Limbu"} - Linb{"Лінійний В"} - Mlym{"Малайялам"} - Mong{"Монгольський"} - Mymr{"Мʼянмар"} - Ogam{"Давньоірландський"} - Orya{"Орія"} - Osma{"Османський"} - Qaai{"Успадкований"} - Runr{"Руни"} - Shaw{"Шоу"} - Sinh{"Сингальський"} - Syrc{"Сирійський"} - Tagb{"Тагбанва"} - Tale{"Тай-лі"} - Taml{"Тамільський"} - Telu{"Телугу"} - Tglg{"Тагальський"} - Thaa{"Таана"} - Thai{"Тайський"} - Tibt{"Тибетський"} - Yiii{"Йї"} - Zyyy{"Невизначений"} - } - Types{ - calendar{ - buddhist{"Буддійський календар"} - chinese{"Китайський календар"} - gregorian{"Григоріанський календар"} - hebrew{"Єврейський календар"} - islamic{"Мусульманський календар"} - islamic-civil{"Мусульманський друкований календар"} - japanese{"Японський календар"} - } - collation{ - direct{"Прямий порядок"} - phonebook{"Телефонна книга"} - pinyin{"Порядок Pinyin"} - stroke{"Штриховий порядок"} - traditional{"Традиційний"} - } - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimeElements:intvector{ - 2, - 1, - } - DateTimePatterns{ - "HH:mm:ss z", - "HH:mm:ss z", - "HH:mm:ss", - "HH:mm", - "EEEE, d MMMM yyyy 'р.'", - "d MMMM yyyy", - "d MMM yyyy", - "dd.MM.yy", - "{1} {0}", - } - dayNames{ - format{ - abbreviated{ - "Нд", - "Пн", - "Вт", - "Ср", - "Чт", - "Пт", - "Сб", - } - narrow{ - "Н", - "П", - "В", - "С", - "Ч", - "П", - "С", - } - wide{ - "Неділя", - "Понеділок", - "Вівторок", - "Середа", - "Четвер", - "Пʼятниця", - "Субота", - } - } - } - eras{ - abbreviated{ - "до н.е.", - "н.е.", - } - } - monthNames{ - format{ - abbreviated{ - "Січ", - "Лют", - "Бер", - "Кві", - "Тра", - "Чер", - "Лип", - "Сер", - "Вер", - "Жов", - "Лис", - "Гру", - } - narrow{ - "С", - "Л", - "Б", - "К", - "Т", - "Ч", - "Л", - "С", - "В", - "Ж", - "Л", - "Г", - } - wide{ - "січня", - "лютого", - "березня", - "квітня", - "травня", - "червня", - "липня", - "серпня", - "вересня", - "жовтня", - "листопада", - "грудня", - } - } - stand-alone{ - abbreviated{ - "Січ", - "Лют", - "Бер", - "Кві", - "Тра", - "Чер", - "Лип", - "Сер", - "Вер", - "Жов", - "Лис", - "Гру", - } - narrow{ - "С", - "Л", - "Б", - "К", - "Т", - "Ч", - "Л", - "С", - "В", - "Ж", - "Л", - "Г", - } - wide{ - "Січень", - "Лютий", - "Березень", - "Квітень", - "Травень", - "Червень", - "Липень", - "Серпень", - "Вересень", - "Жовтень", - "Листопад", - "Грудень", - } - } - } - } - } - localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/uk.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/uk.xml + */ +uk{ + AuxExemplarCharacters{"[i v x]"} + Countries{ + 001{"Світ"} + 002{"Африка"} + 005{"Південна Америка"} + 009{"Океанія"} + 011{"Західна Африка"} + 013{"Центральна Америка"} + 014{"Східна Африка"} + 015{"Північна Африка"} + 017{"Центральна Африка"} + 018{"Південна Африка"} + 019{"Америки"} + 021{"Північна Америка"} + 029{"Кариби"} + 030{"Східна Азія"} + 035{"Південно-Східна Азія"} + 039{"Південна Європа"} + 053{"Австралія та Нова Зеландія"} + 054{"Меланезія"} + 061{"Полінезія"} + 062{"Південно-Центральна Азія"} + 142{"Азія"} + 145{"Західна Азія"} + 150{"Європа"} + 151{"Східна Європа"} + 154{"Північна Європа"} + 155{"Західна Європа"} + 833{"Острів Мен"} + AD{"Андорра"} + AE{"Обʼєднані Арабські Емірати"} + AF{"Афганістан"} + AG{"Антигуа і Барбуда"} + AI{"Ангілья"} + AL{"Албанія"} + AM{"Вірменія"} + AN{"Нідерландські Антільські Острови"} + AO{"Ангола"} + AQ{"Антарктика"} + AR{"Аргентина"} + AS{"Американське Самоа"} + AT{"Австрія"} + AU{"Австралія"} + AW{"Аруба"} + AX{"Аландські острови"} + AZ{"Азербайджан"} + BA{"Боснія і Герцоговина"} + BB{"Барбадос"} + BD{"Бангладеш"} + BE{"Бельгія"} + BF{"Буркіна-Фасо"} + BG{"Болгарія"} + BH{"Бахрейн"} + BI{"Бурунді"} + BJ{"Бенін"} + BM{"Бермуди"} + BN{"Бруней"} + BO{"Болівія"} + BR{"Бразилія"} + BS{"Багами"} + BT{"Бутан"} + BV{"Буве, острів"} + BW{"Ботсвана"} + BY{"Білорусь"} + BZ{"Беліз"} + CA{"Канада"} + CC{"Кокосові острови"} + CD{"Конго, Демократична Республіка"} + CF{"Центрально-Африканська Республіка"} + CG{"Конго"} + CH{"Швейцарія"} + CI{"Кот-д’Івуар"} + CK{"Острови Кука"} + CL{"Чилі"} + CM{"Камерун"} + CN{"Китай"} + CO{"Колумбія"} + CR{"Коста-Рика"} + CU{"Куба"} + CV{"Кабо-Верде"} + CX{"Острів Різдва"} + CY{"Кіпр"} + CZ{"Чеська республіка"} + DE{"Німеччина"} + DJ{"Джібуті"} + DK{"Данія"} + DM{"Домінік"} + DO{"Домініканська Республіка"} + DZ{"Алжир"} + EC{"Еквадор"} + EE{"Естонія"} + EG{"Єгипет"} + EH{"Західна Сахара"} + ER{"Еритрея"} + ES{"Іспанія"} + ET{"Ефіопія"} + FI{"Фінляндія"} + FJ{"Фіджі"} + FK{"Фолклендські Острови (Мальвіни)"} + FM{"Мікронезія"} + FO{"Фарерські острови"} + FR{"Франція"} + GA{"Габон"} + GB{"Великобританія"} + GD{"Гренада"} + GE{"Грузія"} + GF{"Французька Гвіана"} + GH{"Гана"} + GI{"Гібралтар"} + GL{"Гренландія"} + GM{"Гамбія"} + GN{"Гвінея"} + GP{"Гваделупа"} + GQ{"Екваторіальна Гвінея"} + GR{"Греція"} + GS{"Південна Джорджія та Південні Сандвічеві Острови"} + GT{"Гватемала"} + GU{"Гуам"} + GW{"Гвінея-Біссау"} + GY{"Гайана"} + HK{"Гонконг, С.А.Р. Китаю"} + HM{"Острови Херд і Мак-Дональд"} + HN{"Гондурас"} + HR{"Хорватія"} + HT{"Гаїті"} + HU{"Угорщина"} + ID{"Індонезія"} + IE{"Ірландія"} + IL{"Ізраїль"} + IN{"Індія"} + IO{"Британські території Індійського океану"} + IQ{"Ірак"} + IR{"Іран"} + IS{"Ісландія"} + IT{"Італія"} + JM{"Ямайка"} + JO{"Йорданія"} + JP{"Японія"} + KE{"Кенія"} + KG{"Киргизстан"} + KH{"Камбоджа"} + KI{"Кірибаті"} + KM{"Коморські Острови"} + KN{"Сент-Кітс і Невіс"} + KP{"Північна Корея"} + KR{"Південна Корея"} + KW{"Кувейт"} + KY{"Кайманові острови"} + KZ{"Казахстан"} + LA{"Лаос"} + LB{"Ліван"} + LC{"Сент-Люсія"} + LI{"Ліхтенштейн"} + LK{"Шрі-Ланка"} + LR{"Ліберія"} + LS{"Лесото"} + LT{"Литва"} + LU{"Люксембург"} + LV{"Латвія"} + LY{"Лівія"} + MA{"Марокко"} + MC{"Монако"} + MD{"Молдова"} + MG{"Мадагаскар"} + MH{"Маршаллові Острови"} + MK{"Македонія"} + ML{"Малі"} + MM{"Мʼянма"} + MN{"Монголія"} + MO{"Макао, С.А.Р. Китаю"} + MP{"Північні Маріанські Острови"} + MQ{"Мартиніка"} + MR{"Мавританія"} + MS{"Монсеррат"} + MT{"Мальта"} + MU{"Маврикій"} + MV{"Мальдіви"} + MW{"Малаві"} + MX{"Мексика"} + MY{"Малайзія"} + MZ{"Мозамбік"} + NA{"Намібія"} + NC{"Нова Каледонія"} + NE{"Нігер"} + NF{"Острів Норфолк"} + NG{"Нігерія"} + NI{"Нікарагуа"} + NL{"Нідерланди"} + NO{"Норвегія"} + NP{"Непал"} + NR{"Науру"} + NU{"Нія"} + NZ{"Нова Зеландія"} + OM{"Оман"} + PA{"Панама"} + PE{"Перу"} + PF{"Французька Полінезія"} + PG{"Папуа Нова Гвінея"} + PH{"Філіппіни"} + PK{"Пакистан"} + PL{"Польща"} + PM{"Сен-Пʼєр і Мікелон"} + PN{"Піткерн"} + PR{"Пуерто-Ріко"} + PS{"Палестина"} + PT{"Португалія"} + PW{"Палау"} + PY{"Парагвай"} + QA{"Катар"} + QO{"Інша Океанія"} + RE{"Реюньйон"} + RO{"Румунія"} + RU{"Росія"} + RW{"Руанда"} + SA{"Саудівська Аравія"} + SB{"Соломонові Острови"} + SC{"Сейшели"} + SD{"Судан"} + SE{"Швеція"} + SG{"Сінгапур"} + SH{"Св. Єлена"} + SI{"Словенія"} + SJ{"Свалбард і Ян Майєн, острови"} + SK{"Словакія"} + SL{"Сьєрра-Леоне"} + SM{"Сан-Маріно"} + SN{"Сенегал"} + SO{"Сомалі"} + SR{"Суринам"} + ST{"Сан-Томе і Прінсіпі"} + SV{"Сальвадор"} + SY{"Сирійська Арабська Республіка"} + SZ{"Свазіленд"} + TC{"Теркс і Кайкос"} + TD{"Чад"} + TF{"Французькі Південні Території"} + TG{"Того"} + TH{"Таїланд"} + TJ{"Таджикистан"} + TK{"Токелау"} + TL{"Східний Тимор"} + TM{"Туркменистан"} + TN{"Туніс"} + TO{"Тонга"} + TR{"Туреччина"} + TT{"Тринідад і Тобаго"} + TV{"Тувалу"} + TW{"Тайвань"} + TZ{"Танзанія, Обʼєднана Республіка"} + UA{"Україна"} + UG{"Уганда"} + UM{"Віддалені Острови США"} + US{"США"} + UY{"Уругвай"} + UZ{"Узбекистан"} + VA{"Ватикан"} + VC{"Сент-Вінсент і Гренадини"} + VE{"Венесуела"} + VG{"Віргінські острови (Британія)"} + VI{"Віргінські острови (США)"} + VN{"Вʼєтнам"} + VU{"Вануату"} + WF{"Валліс і Футуна, острови"} + WS{"Самоа"} + YE{"Ємен"} + YT{"Майот"} + ZA{"ПАР"} + ZM{"Замбія"} + ZW{"Зімбабве"} + } + Currencies{ + ADP{ + "ADP", + "Андоррська песета", + } + AED{ + "AED", + "Дирхем ОАЕ", + } + AFA{ + "AFA", + "Афгані (1927-2002)", + } + AFN{ + "Af", + "Афгані", + } + ALL{ + "lek", + "Албанський лек", + } + AMD{ + "dram", + "Вірменський драм", + } + ANG{ + "NA f.", + "Гульден Нідерландських Антіл", + } + AOA{ + "AOA", + "Ангольська кванза", + } + AOK{ + "AOK", + "Ангольська кванза (1977-1990)", + } + AON{ + "AON", + "Ангольська нова кванза (1990-2000)", + } + ARA{ + "ARA", + "Аргентинський австрал", + } + ARP{ + "ARP", + "Аргентинське песо (1983-1985)", + } + ARS{ + "Arg$", + "Аргентинське песо", + } + ATS{ + "ATS", + "Австрійський шилінг", + } + AUD{ + "$A", + "Австралійський долар", + } + AWG{ + "AWG", + "Арубський гульден", + } + AZM{ + "AZM", + "Азербайджанський манат", + } + BAD{ + "BAD", + "Динар (Боснія і Герцеговина)", + } + BAM{ + "KM", + "Конвертована марка Боснії і Герцоговини", + } + BBD{ + "BDS$", + "Барбадоський долар", + } + BDT{ + "Tk", + "Бангладеська така", + } + BEC{ + "BEC", + "Бельгійський франк (конвертований)", + } + BEF{ + "BF", + "Бельгійський франк", + } + BEL{ + "BEL", + "Бельгійський франк (фінансовий)", + } + BGL{ + "lev", + "Болгарський твердий лев", + } + BGN{ + "BGN", + "Болгарський новий лев", + } + BHD{ + "BD", + "Бахрейнський динар", + } + BIF{ + "Fbu", + "Бурундійський франк", + } + BMD{ + "Ber$", + "Бермудський долар", + } + BND{ + "BND", + "Брунейський доларr", + } + BOB{ + "Bs", + "Болівіано", + } + BOP{ + "BOP", + "Болівійське песо", + } + BOV{ + "BOV", + "Болівійський мвдол", + } + BRB{ + "BRB", + "Бразильське нове крузейро (1967-1986)", + } + BRC{ + "BRC", + "Бразильське крузадо", + } + BRE{ + "BRE", + "Бразильське крузейро (1990-1993)", + } + BRL{ + "R$", + "Бразильський реал", + } + BRN{ + "BRN", + "Бразильське нове крузадо", + } + BRR{ + "BRR", + "Бразильське крузейро", + } + BSD{ + "BSD", + "Багамський долар", + } + BTN{ + "Nu", + "Бутанський нгултрум", + } + BUK{ + "BUK", + "Бірманський кіат", + } + BWP{ + "BWP", + "Ботсванська пула", + } + BYB{ + "BYB", + "Білоруський новий рубль (1994-1999)", + } + BYR{ + "Rbl", + "Білоруський рубль", + } + BZD{ + "BZ$", + "Белізький долар", + } + CAD{ + "Can$", + "Канадський долар", + } + CDF{ + "CDF", + "Конголезький франк", + } + CHF{ + "SwF", + "Швейцарський франк", + } + CLF{ + "CLF", + "Чилійський UF", + } + CLP{ + "Ch$", + "Чилійське песо", + } + CNY{ + "Y", + "Китайський юань", + } + COP{ + "Col$", + "Колумбійське песо", + } + CRC{ + "C", + "Коста-риканський колон", + } + CSK{ + "CSK", + "Чехословацька тверда крона", + } + CUP{ + "CUP", + "Кубинське песо", + } + CVE{ + "CVEsc", + "Ескудо Кабо-Верде", + } + CYP{ + "£C", + "Кіпрський фунт", + } + CZK{ + "CZK", + "Чеська крона", + } + DEM{ + "DEM", + "Німецька марка", + } + DJF{ + "DF", + "Франк Джібуті", + } + DKK{ + "DKr", + "Датська крона", + } + DOP{ + "RD$", + "Домініканське песо", + } + DZD{ + "DA", + "Алжирський динар", + } + ECS{ + "ECS", + "Еквадорське сукре", + } + ECV{ + "ECV", + "Еквадорський UVС", + } + EEK{ + "EEK", + "Естонська крона", + } + EGP{ + "EGP", + "Єгипетський фунт", + } + ERN{ + "ERN", + "Еритрейська накфа", + } + ESP{ + "ESP", + "Іспанська песета", + } + ETB{ + "Br", + "Ефіопський бир", + } + EUR{ + "€", + "Євро", + } + FIM{ + "FIM", + "Фінляндська марка", + } + FJD{ + "F$", + "Фіджійський долар", + } + FKP{ + "FKP", + "Фолклендський фунт", + } + FRF{ + "FRF", + "Французький франк", + } + GBP{ + "£", + "Англійський фунт стерлінгів", + } + GEL{ + "lari", + "Грузинський ларі", + } + GHC{ + "GHC", + "Ганський седі", + } + GIP{ + "GIP", + "Гібралтарський фунт", + } + GMD{ + "GMD", + "Гамбійська даласі", + } + GNF{ + "GF", + "Гвійнейський франк", + } + GNS{ + "GNS", + "Гвінейське сілі", + } + GQE{ + "GQE", + "Еквеле (Екваторіальна Ґвінея)", + } + GRD{ + "GRD", + "Грецька драхма", + } + GTQ{ + "Q", + "Гватемальський кетсаль", + } + GWE{ + "GWE", + "Ескудо Португальської Гвінеї", + } + GWP{ + "GWP", + "Песо Гвінеї-Бісау", + } + GYD{ + "G$", + "Гайянський долар", + } + HKD{ + "HK$", + "Гонконгівський долар", + } + HNL{ + "L", + "Гондураська лемпіра", + } + HRD{ + "HRD", + "Хорватський динар", + } + HRK{ + "HRK", + "Хорватська куна", + } + HTG{ + "HTG", + "Гаїтянський гурд", + } + HUF{ + "Ft", + "Угорський форинт", + } + IDR{ + "Rp", + "Індонезійська рупія", + } + IEP{ + "IR£", + "Ірландський фунт", + } + ILP{ + "ILP", + "Ізраїльський фунт", + } + ILS{ + "ILS", + "Ізраїльський новий шекель", + } + INR{ + "INR", + "Індійська рупія", + } + IQD{ + "ID", + "Іракський динар", + } + IRR{ + "RI", + "Іранський ріал", + } + ISK{ + "ISK", + "Ісландська крона", + } + ITL{ + "₤", + "Італійська ліра", + } + JMD{ + "J$", + "Ямайський долар", + } + JOD{ + "JD", + "Йорданський динар", + } + JPY{ + "¥", + "Японська єна", + } + KES{ + "K Sh", + "Кенійський шилінг", + } + KGS{ + "som", + "Киргизький сом", + } + KHR{ + "CR", + "Камбоджійський рієль", + } + KMF{ + "CF", + "Коморський франк", + } + KPW{ + "KPW", + "Вона Північної Кореї", + } + KRW{ + "KRW", + "Вона Південної Кореї", + } + KWD{ + "KD", + "Кувейтський динар", + } + KYD{ + "KYD", + "Долар Кайманових островів", + } + KZT{ + "T", + "Казахстанський тенге", + } + LAK{ + "LAK", + "Лаоський кіп", + } + LBP{ + "LL", + "Ліванський фунт", + } + LKR{ + "SL Re", + "Шрі-ланкійська рупія", + } + LRD{ + "LRD", + "Ліберійський долар", + } + LSL{ + "M", + "Лесотський лоті", + } + LTL{ + "LTL", + "Литовський літ", + } + LTT{ + "LTT", + "Литовський талон", + } + LUC{ + "LUC", + "Люксембурґський франк (Конвертований)", + } + LUF{ + "LUF", + "Люксембурзький франк", + } + LUL{ + "LUL", + "Люксембурґський франк (Фінансовий)", + } + LVL{ + "LVL", + "Латвійський лат", + } + LVR{ + "LVR", + "Латвійський рубль", + } + LYD{ + "LD", + "Лівійський динар", + } + MAD{ + "MAD", + "Марокканський дирхем", + } + MAF{ + "MAF", + "Марокканський франк", + } + MDL{ + "MDL", + "Молдовський лей", + } + MGA{ + "MGA", + "Мадагаскарський аріарі", + } + MGF{ + "MGF", + "Мадагаскарський франк", + } + MKD{ + "MDen", + "Македонський динар", + } + MLF{ + "MLF", + "Малійський франк", + } + MMK{ + "MMK", + "Кʼят Мʼянми", + } + MNT{ + "Tug", + "Монгольський тугрик", + } + MOP{ + "MOP", + "Макао патака", + } + MRO{ + "UM", + "Мавританська угія", + } + MTL{ + "Lm", + "Мальтійська ліра", + } + MTP{ + "MTP", + "Мальтійський фунт", + } + MUR{ + "MUR", + "Маврикійська рупія", + } + MVR{ + "MVR", + "Мальдівська руфія", + } + MWK{ + "MK", + "Квача (Малаві)", + } + MXN{ + "MEX$", + "Мексиканське песо", + } + MXP{ + "MXP", + "Мексиканське срібне песо (1861-1992)", + } + MXV{ + "MXV", + "Мексиканський UDI", + } + MYR{ + "RM", + "Малайзійський рингіт", + } + MZE{ + "MZE", + "Мозамбіцький ескудо", + } + MZM{ + "Mt", + "Мозамбіцький метикал", + } + NAD{ + "N$", + "Намібійський долар", + } + NGN{ + "NGN", + "Нігерійська найра", + } + NIC{ + "NIC", + "Нікарагуанська кордоба", + } + NIO{ + "NIO", + "Нікарагуанська кордоба оро", + } + NLG{ + "NLG", + "Нідерландський гульден", + } + NOK{ + "NKr", + "Норвезька крона", + } + NPR{ + "Nrs", + "Непальська рупія", + } + NZD{ + "$NZ", + "NZD", + } + OMR{ + "RO", + "Оманський ріал", + } + PAB{ + "PAB", + "Панамська бальбоа", + } + PEI{ + "PEI", + "Перуанський інті", + } + PEN{ + "PEN", + "Перуанський новий сол", + } + PES{ + "PES", + "Перуанський сол", + } + PGK{ + "PGK", + "Кіна Папуа Нової Гвінеї", + } + PHP{ + "PHP", + "Філіппінське песо", + } + PKR{ + "Pra", + "Пакистанська рупія", + } + PLN{ + "Zl", + "Польський злотий", + } + PLZ{ + "PLZ", + "Польський злотий (1950-1995)", + } + PTE{ + "PTE", + "Португальський ескудо", + } + PYG{ + "PYG", + "Парагвайський гуарані", + } + QAR{ + "QR", + "Катарський ріал", + } + ROL{ + "leu", + "Румунський лей", + } + RUB{ + "руб.", + "Російський рубль", + } + RUR{ + "RUR", + "Російський рубль (1991-1998)", + } + RWF{ + "RWF", + "Руандійський франк", + } + SAR{ + "SRl", + "Саудівський ріал", + } + SBD{ + "SI$", + "Долар Соломонових Островів", + } + SCR{ + "SR", + "Сейшельська рупія", + } + SDD{ + "SDD", + "Суданський динар", + } + SDP{ + "SDP", + "Суданський фунт", + } + SEK{ + "SKr", + "Шведська крона", + } + SGD{ + "S$", + "Сінгапурський долар", + } + SHP{ + "SHP", + "Фунт Святої Єлени", + } + SIT{ + "SIT", + "Словенський толар", + } + SKK{ + "Sk", + "Словацька крона", + } + SLL{ + "SLL", + "Леоне Сьєрра-Леоне", + } + SOS{ + "So. Sh.", + "Сомалійський шилінг", + } + SRG{ + "Sf", + "Суринамський гульден", + } + STD{ + "Db", + "Добра Сан-Томе і Прінсіпі", + } + SUR{ + "SUR", + "Радянський рубль", + } + SVC{ + "SVC", + "Ель-Сальвадорський колон", + } + SYP{ + "LS", + "Сирійський фунт", + } + SZL{ + "E", + "Свазілендські лілангені", + } + THB{ + "THB", + "Таїландський бат", + } + TJR{ + "TJR", + "Таджицький рубль", + } + TJS{ + "TJS", + "Таджицький сомоні", + } + TMM{ + "TMM", + "Туркменський манат", + } + TND{ + "TND", + "Туніський динар", + } + TOP{ + "T$", + "Паанга Тонго", + } + TPE{ + "TPE", + "Тіморський ескудо", + } + TRL{ + "TL", + "Турецька ліра", + } + TRY{ + "TRY", + "Нова турецька ліра", + } + TTD{ + "TT$", + "Долар Тринідаду і Тобаго", + } + TWD{ + "NT$", + "Новий тайванський долар", + } + TZS{ + "T Sh", + "Танзанійський шилінг", + } + UAH{ + "грн.", + "Українська гривня", + } + UAK{ + "UAK", + "Український карбованець", + } + UGS{ + "UGS", + "Угандійський шилінг (1966-1987)", + } + UGX{ + "U Sh", + "Угандійський шилінг", + } + USD{ + "$", + "Долар США", + } + UYP{ + "UYP", + "Уругвайське песо (1975-1993)", + } + UYU{ + "Ur$", + "Уругвайське песо", + } + UZS{ + "UZS", + "Узбецький сум", + } + VEB{ + "Be", + "Венесуельський болівар", + } + VND{ + "VND", + "Вʼєтнамський донг", + } + VUV{ + "VT", + "Вануатська вату", + } + WST{ + "WST", + "Тала Західного Самоа", + } + XAF{ + "XAF", + "Франк Центральноафриканського фінансового товариства", + } + XAU{ + "XAU", + "Золото", + } + XBB{ + "XBB", + "Європейська грошова одиниця", + } + XBC{ + "XBC", + "Європейська розрахункова одиниця (XBC)", + } + XBD{ + "XBD", + "Європейська розрахункова одиниця (XBD)", + } + XCD{ + "EC$", + "Долар Східних Кирибів", + } + XDR{ + "XDR", + "Спеціальні права запозичення", + } + XEU{ + "XEU", + "Європейська валютна одиниця", + } + XFO{ + "XFO", + "Французький золотий франк", + } + XFU{ + "XFU", + "Французький франк UIC", + } + XOF{ + "XOF", + "Франк Західноафриканського фінансового товариства", + } + XPF{ + "CFPF", + "Французький тихоокеанський франк", + } + YDD{ + "YDD", + "Єменський динар", + } + YER{ + "YRl", + "Єменський ріал", + } + YUD{ + "YUD", + "Югославський твердий динар", + } + YUM{ + "YUM", + "Югославський новий динар", + } + YUN{ + "YUN", + "Югославський конвертований динар", + } + ZAL{ + "ZAL", + "Південноафриканський ранд [ZAL]", + } + ZAR{ + "R", + "Південноафриканський ранд", + } + ZMK{ + "ZMK", + "Квача (Замбія)", + } + ZRN{ + "ZRN", + "Заїрський новий заїр", + } + ZRZ{ + "ZRZ", + "Заїрський заїр", + } + ZWD{ + "Z$", + "Зімбабвійський долар", + } + } + ExemplarCharacters{"[ʼ а-г ґ д е є ж-и і ї й-щ ь ю я]"} + Keys{ + calendar{"Календар"} + collation{"Сортування"} + currency{"Валюта"} + } + Languages{ + aa{"Афарська"} + ab{"Абхазька"} + ace{"Ачехська"} + ada{"Адангме"} + ady{"Адигейська"} + af{"Африканс"} + afh{"Африхілі"} + am{"Амхарік"} + ar{"Арабська"} + as{"Ассамська"} + ay{"Аймара"} + az{"Азербайджанська"} + ba{"Башкирська"} + be{"Білоруська"} + bg{"Болгарська"} + bh{"Біхарійська"} + bi{"Бісламійська"} + bn{"Бенгальська"} + bo{"Тибетська"} + br{"Бретонська"} + ca{"Каталонська"} + co{"Корсиканська"} + cs{"Чеська"} + cy{"Валлійська"} + da{"Датська"} + de{"Німецька"} + dz{"Дзонг-ке"} + el{"Грецька"} + en{"Англійська"} + eo{"Есперанто"} + es{"Іспанська"} + et{"Естонська"} + eu{"Басків"} + fa{"Перська"} + fi{"Фінська"} + fj{"Фіджі"} + fo{"Фарерська"} + fr{"Французька"} + fy{"Фризька"} + ga{"Ірландська"} + gd{"Гаельська"} + gl{"Галісійська"} + gn{"Гуарані"} + gu{"Гуяраті"} + ha{"Хауса"} + he{"Іврит"} + hi{"Гінді"} + hr{"Хорватська"} + hu{"Угорська"} + hy{"Вірменська"} + ia{"Інтерлінгва"} + id{"Індонезійська"} + ie{"Інтерлінгве"} + ik{"Інупіак"} + is{"Ісландська"} + it{"Італійська"} + ja{"Японська"} + jv{"Яванська"} + ka{"Грузинська"} + kk{"Казахська"} + kl{"Калааллісут"} + km{"Кхмерська"} + kn{"Каннада"} + ko{"Корейська"} + ks{"Кашмірська"} + ku{"Курдська"} + ky{"Киргизька"} + la{"Латинська"} + ln{"Лінгала"} + lo{"Лаоська"} + lt{"Литовська"} + lv{"Латвійська"} + mg{"Малагасійська"} + mi{"Маорі"} + mk{"Македонська"} + ml{"Малайялам"} + mn{"Монгольська"} + mo{"Молдавська"} + mr{"Маратхі"} + ms{"Малайська"} + mt{"Мальтійська"} + my{"Бірманська"} + na{"Науру"} + ne{"Непальська"} + nl{"Голландська"} + no{"Норвезька"} + oc{"Окитан"} + om{"Оромо"} + or{"Орія"} + pa{"Панджабі"} + pl{"Польська"} + ps{"Пашто"} + pt{"Португальська"} + qu{"Кечуа"} + rm{"Ретророманські діалекти"} + rn{"Кірундійська"} + ro{"Румунська"} + ru{"Російська"} + rw{"Кінаруанда"} + sa{"Санскрит"} + sd{"Сіндтхі"} + sg{"Сангро"} + sh{"Сербсько-хорватська"} + si{"Сингальська"} + sk{"Словацька"} + sl{"Словенська"} + sm{"Самоанська"} + sn{"Шона"} + so{"Сомалі"} + sq{"Албанська"} + sr{"Сербська"} + ss{"Сісваті"} + st{"Сото, південний діалект"} + su{"Суданська"} + sv{"Шведська"} + sw{"Суахілі"} + ta{"Тамільська"} + te{"Телугу"} + tg{"Таджицька"} + th{"Тайська"} + ti{"Тигріні"} + tk{"Туркменська"} + tl{"Тагальська"} + tn{"Сетсванська"} + to{"Тонга (острови Тонга)"} + tr{"Турецька"} + ts{"Тсонго"} + tt{"Татарська"} + tw{"Тві"} + ug{"Уйгурська"} + uk{"Українська"} + ur{"Урду"} + uz{"Узбецька"} + vi{"Вʼєтнамська"} + vo{"Волапак"} + wo{"Волоф"} + xh{"Кхоса"} + yi{"Ідиш"} + yo{"Йоруба"} + za{"Зуанг"} + zh{"Китайська"} + zu{"Зулуська"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "NaN", + "+", + } + Scripts{ + Arab{"Арабський"} + Armn{"Вірменський"} + Beng{"Бенгальський"} + Bopo{"Бопомофо"} + Brai{"Брайля"} + Buhd{"Бухід"} + Cans{"Уніфіковані символи канадських туземців"} + Cher{"Черокі"} + Copt{"Коптський"} + Cprt{"Кіпрський"} + Cyrl{"Кириличний"} + Deva{"Деванагарі"} + Dsrt{"Дезерет"} + Ethi{"Ефіопський"} + Geor{"Грузинський"} + Goth{"Готський"} + Grek{"Грецький"} + Gujr{"Гуяраті"} + Guru{"Гурмукхі"} + Hang{"Хангул"} + Hano{"Хануну"} + Hebr{"Єврейський"} + Hira{"Хірагана"} + Ital{"Давньоіталійський"} + Kana{"Катакана"} + Khmr{"Кхмерський"} + Knda{"Каннада"} + Laoo{"Лаоський"} + Latn{"Латинський"} + Limb{"Limbu"} + Linb{"Лінійний В"} + Mlym{"Малайялам"} + Mong{"Монгольський"} + Mymr{"Мʼянмар"} + Ogam{"Давньоірландський"} + Orya{"Орія"} + Osma{"Османський"} + Qaai{"Успадкований"} + Runr{"Руни"} + Shaw{"Шоу"} + Sinh{"Сингальський"} + Syrc{"Сирійський"} + Tagb{"Тагбанва"} + Tale{"Тай-лі"} + Taml{"Тамільський"} + Telu{"Телугу"} + Tglg{"Тагальський"} + Thaa{"Таана"} + Thai{"Тайський"} + Tibt{"Тибетський"} + Yiii{"Йї"} + Zyyy{"Невизначений"} + } + Types{ + calendar{ + buddhist{"Буддійський календар"} + chinese{"Китайський календар"} + gregorian{"Григоріанський календар"} + hebrew{"Єврейський календар"} + islamic{"Мусульманський календар"} + islamic-civil{"Мусульманський друкований календар"} + japanese{"Японський календар"} + } + collation{ + direct{"Прямий порядок"} + phonebook{"Телефонна книга"} + pinyin{"Порядок Pinyin"} + stroke{"Штриховий порядок"} + traditional{"Традиційний"} + } + } + Version{"1.74"} + calendar{ + coptic{ + monthNames{ + format{ + abbreviated{ + "Тот", + "Baba", + "Хатур", + "Кіхак", + "Toba", + "Амшир", + "Барамхат", + "Baramouda", + "Башнас", + "Paona", + "Абіб", + "Mesra", + "Насі", + } + wide{ + "Тот", + "Бабе", + "Хатур", + "Кіхак", + "Тобе", + "Амшир", + "Барамхат", + "Бармуда", + "Башнас", + "Бауна", + "Абіб", + "Мисра", + "Насі", + } + } + } + } + gregorian{ + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, d MMMM yyyy 'р.'", + "d MMMM yyyy", + "d MMM yyyy", + "dd.MM.yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Нд", + "Пн", + "Вт", + "Ср", + "Чт", + "Пт", + "Сб", + } + wide{ + "Неділя", + "Понеділок", + "Вівторок", + "Середа", + "Четвер", + "Пʼятниця", + "Субота", + } + } + stand-alone{ + narrow{ + "Н", + "П", + "В", + "С", + "Ч", + "П", + "С", + } + } + } + eras{ + abbreviated{ + "до н.е.", + "н.е.", + } + } + fields{ + day{ + dn{"День"} + } + dayperiod{ + dn{"Частина доби"} + } + hour{ + dn{"Година"} + } + minute{ + dn{"Хвилина"} + } + month{ + dn{"Місяць"} + } + second{ + dn{"Секунда"} + } + week{ + dn{"Тиждень"} + } + weekday{ + dn{"День тижня"} + } + year{ + dn{"Рік"} + } + } + monthNames{ + format{ + abbreviated{ + "Січ", + "Лют", + "Бер", + "Кві", + "Тра", + "Чер", + "Лип", + "Сер", + "Вер", + "Жов", + "Лис", + "Гру", + } + narrow{ + "С", + "Л", + "Б", + "К", + "Т", + "Ч", + "Л", + "С", + "В", + "Ж", + "Л", + "Г", + } + wide{ + "січня", + "лютого", + "березня", + "квітня", + "травня", + "червня", + "липня", + "серпня", + "вересня", + "жовтня", + "листопада", + "грудня", + } + } + stand-alone{ + abbreviated{ + "Січ", + "Лют", + "Бер", + "Кві", + "Тра", + "Чер", + "Лип", + "Сер", + "Вер", + "Жов", + "Лис", + "Гру", + } + narrow{ + "С", + "Л", + "Б", + "К", + "Т", + "Ч", + "Л", + "С", + "В", + "Ж", + "Л", + "Г", + } + wide{ + "Січень", + "Лютий", + "Березень", + "Квітень", + "Травень", + "Червень", + "Липень", + "Серпень", + "Вересень", + "Жовтень", + "Листопад", + "Грудень", + } + } + } + quarters{ + format{ + wide{ + "I квартал", + "II квартал", + "III квартал", + "IV квартал", + } + } + } + } + hebrew{ + monthNames{ + format{ + abbreviated{ + "Тішри", + "Марчешван", + "Числьов", + "Тебет", + "Шеват", + "Адар Ⅰ", + "Адар", + "Nisan", + "Iyar", + "Sivan", + "Таммуз", + "Av", + "Елул", + } + wide{ + "Тішри", + "Марчешван", + "Числьов", + "Тебет", + "Шеват", + "Адар Ⅰ", + "Адар", + "Нісан", + "Іар", + "Сиван", + "Таммуз", + "Аб", + "Елул", + } + } + } + } + islamic{ + monthNames{ + format{ + wide{ + "Мухаррам", + "Сафар", + "Рабі I", + "Рабі II", + "Джумада I", + "Джумада II", + "Раджаб", + "Шаабан", + "Рамадан", + "Даввал", + "Зу-ль-каада", + "Зу-ль-хіджа", + } + } + } + } + persian{ + monthNames{ + format{ + wide{ + "Фарвардін", + "Ордібехешт", + "Хордад", + "Тір", + "Мордад", + "Шахрівер", + "Мехр", + "Абан", + "Азер", + "Дей", + "Бахман", + "Есфанд", + } + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZvcL"} + zoneStrings{ + "Africa:Bamako"{ + ec{"Бамако"} + } + "Africa:Ceuta"{ + ec{"Сеута"} + } + "Africa:Kinshasa"{ + ec{"Кіншаса"} + } + "Africa:Lubumbashi"{ + ec{"Лубумбаші"} + } + "Africa:Timbuktu"{ + ec{"Тимбукту"} + } + "America:Adak"{ + ec{"Адак"} + } + "America:Araguaina"{ + ec{"Арагуайна"} + } + "America:Argentina:ComodRivadavia"{ + ec{"Комодоро-Ривадавія"} + } + "America:Argentina:La_Rioja"{ + ec{"Ла-Ріоха"} + } + "America:Argentina:Rio_Gallegos"{ + ec{"Ріо-Ґалеґос"} + } + "America:Argentina:San_Juan"{ + ec{"Сан-Хуан"} + } + "America:Argentina:Tucuman"{ + ec{"Тукуман"} + } + "America:Argentina:Ushuaia"{ + ec{"Ушуая"} + } + "America:Bahia"{ + ec{"Байя"} + } + "America:Belem"{ + ec{"Белен"} + } + "America:Boa_Vista"{ + ec{"Боа-Віста"} + } + "America:Boise"{ + ec{"Бойсе"} + } + "America:Buenos_Aires"{ + ec{"Буенос-Айрес"} + } + "America:Campo_Grande"{ + ec{"Кампу-Гранді"} + } + "America:Cancun"{ + ec{"Канкун"} + } + "America:Catamarca"{ + ec{"Катамарка"} + } + "America:Chicago"{ + ec{"Чикаго"} + } + "America:Chihuahua"{ + ec{"Чіуауа"} + } + "America:Cordoba"{ + ec{"Кордоба"} + } + "America:Cuiaba"{ + ec{"Куяба"} + } + "America:Danmarkshavn"{ + ec{"Денмарксхавн"} + } + "America:Dawson"{ + ec{"Доусон"} + } + "America:Dawson_Creek"{ + ec{"Доусон-Крік"} + } + "America:Denver"{ + ec{"Денвер"} + } + "America:Detroit"{ + ec{"Детройт"} + } + "America:Edmonton"{ + ec{"Едмонтон"} + } + "America:Eirunepe"{ + ec{"Ейрунепе"} + } + "America:Fortaleza"{ + ec{"Форталеза"} + } + "America:Glace_Bay"{ + ec{"Глейс-Бей"} + } + "America:Godthab"{ + ec{"Готхоб"} + } + "America:Goose_Bay"{ + ec{"Гуз-Бей"} + } + "America:Guayaquil"{ + ec{"Гуаякіль"} + } + "America:Halifax"{ + ec{"Галіфакс"} + } + "America:Hermosillo"{ + ec{"Ермосільйо"} + } + "America:Indiana:Knox"{ + ec{"Нокс"} + } + "America:Indiana:Marengo"{ + ec{"Маренго"} + } + "America:Indiana:Vevay"{ + ec{"Вівей"} + } + "America:Indianapolis"{ + ec{"Індіанаполіс"} + } + "America:Inuvik"{ + ec{"Інувік"} + } + "America:Iqaluit"{ + ec{"Ікалуіт"} + } + "America:Jujuy"{ + ec{"Жужуй"} + } + "America:Juneau"{ + ec{"Джуно"} + } + "America:Kentucky:Monticello"{ + ec{"Монтичелло"} + } + "America:Los_Angeles"{ + ec{"Лос-Анджелес"} + } + "America:Louisville"{ + ec{"Луїсвілль"} + } + "America:Maceio"{ + ec{"Масейо"} + } + "America:Manaus"{ + ec{"Манаус"} + } + "America:Mazatlan"{ + ec{"Масатлан"} + } + "America:Mendoza"{ + ec{"Мендоса"} + } + "America:Menominee"{ + ec{"Меноміні"} + } + "America:Merida"{ + ec{"Меріда"} + } + "America:Mexico_City"{ + ec{"Мехіко"} + } + "America:Monterrey"{ + ec{"Монтерей"} + } + "America:Montreal"{ + ec{"Монреаль"} + } + "America:New_York"{ + ec{"Нью-Йорк"} + } + "America:Nipigon"{ + ec{"Ніпігон"} + } + "America:Nome"{ + ec{"Ном"} + } + "America:Noronha"{ + ec{"Норонья"} + } + "America:North_Dakota:Center"{ + ec{"Центр"} + } + "America:Pangnirtung"{ + ec{"Панґніртунґ"} + } + "America:Phoenix"{ + ec{"Фінікс"} + } + "America:Porto_Velho"{ + ec{"Порто-Велью"} + } + "America:Rainy_River"{ + ec{"Рейні-Рівер"} + } + "America:Rankin_Inlet"{ + ec{"Ренкін-Інлет"} + } + "America:Recife"{ + ec{"Ресіфі"} + } + "America:Regina"{ + ec{"Реджайна"} + } + "America:Rio_Branco"{ + ec{"Ріо-Бранко"} + } + "America:Santiago"{ + ec{"Сантьяго"} + } + "America:Sao_Paulo"{ + ec{"Сан-Паулу"} + } + "America:Scoresbysund"{ + ec{"Скорсбисун"} + } + "America:Shiprock"{ + ec{"Шипрок"} + } + "America:St_Johns"{ + ec{"Сент-Джонс"} + } + "America:Swift_Current"{ + ec{"Свіфт-Каррент"} + } + "America:Thule"{ + ec{"Туле"} + } + "America:Thunder_Bay"{ + ec{"Тандер-Бей"} + } + "America:Tijuana"{ + ec{"Тіхуана"} + } + "America:Toronto"{ + ec{"Торонто"} + } + "America:Vancouver"{ + ec{"Ванкувер"} + } + "America:Whitehorse"{ + ec{"Вайтгорс"} + } + "America:Winnipeg"{ + ec{"Вінніпеґ"} + } + "America:Yakutat"{ + ec{"Якутат"} + } + "America:Yellowknife"{ + ec{"Єллоунайф"} + } + "Antarctica:Casey"{ + ec{"Кейсі"} + } + "Antarctica:Davis"{ + ec{"Дейвіс"} + } + "Antarctica:DumontDUrville"{ + ec{"Дюмон-д'Юрвіль"} + } + "Antarctica:Mawson"{ + ec{"Моусон"} + } + "Antarctica:McMurdo"{ + ec{"Мак-Мердо"} + } + "Antarctica:Palmer"{ + ec{"Палмер"} + } + "Antarctica:Rothera"{ + ec{"Ротера"} + } + "Antarctica:South_Pole"{ + ec{"Південний полюс"} + } + "Antarctica:Syowa"{ + ec{"Сьова"} + } + "Antarctica:Vostok"{ + ec{"Восток"} + } + "Arctic:Longyearbyen"{ + ec{"Лонгербюйн"} + } + "Asia:Almaty"{ + ec{"Алмати"} + } + "Asia:Anadyr"{ + ec{"Анадир"} + } + "Asia:Aqtau"{ + ec{"Актау"} + } + "Asia:Aqtobe"{ + ec{"Актобе"} + } + "Asia:Choibalsan"{ + ec{"Чойбалсан"} + } + "Asia:Chongqing"{ + ec{"Чунцин"} + } + "Asia:Harbin"{ + ec{"Харбін"} + } + "Asia:Hovd"{ + ec{"Говд"} + } + "Asia:Irkutsk"{ + ec{"Іркутськ"} + } + "Asia:Jakarta"{ + ec{"Джакарта"} + } + "Asia:Jayapura"{ + ec{"Джайпур"} + } + "Asia:Kamchatka"{ + ec{"Камчатка"} + } + "Asia:Kashgar"{ + ec{"Кашгар"} + } + "Asia:Krasnoyarsk"{ + ec{"Красноярськ"} + } + "Asia:Kuala_Lumpur"{ + ec{"Куала-Лумпур"} + } + "Asia:Kuching"{ + ec{"Кучінґ"} + } + "Asia:Magadan"{ + ec{"Магадан"} + } + "Asia:Makassar"{ + ec{"Макасар"} + } + "Asia:Novosibirsk"{ + ec{"Новосибірськ"} + } + "Asia:Omsk"{ + ec{"Омськ"} + } + "Asia:Oral"{ + ec{"Орал"} + } + "Asia:Pontianak"{ + ec{"Понтіанак"} + } + "Asia:Qyzylorda"{ + ec{"Кзил-Орда"} + } + "Asia:Sakhalin"{ + ec{"Сахалін"} + } + "Asia:Samarkand"{ + ec{"Самарканд"} + } + "Asia:Shanghai"{ + ec{"Шанхай"} + } + "Asia:Tashkent"{ + ec{"Ташкент"} + } + "Asia:Ulaanbaatar"{ + ec{"Улан-Батор"} + } + "Asia:Urumqi"{ + ec{"Урумчі"} + } + "Asia:Vladivostok"{ + ec{"Владивосток"} + } + "Asia:Yakutsk"{ + ec{"Якутськ"} + } + "Asia:Yekaterinburg"{ + ec{"Єкатеринбург"} + } + "Atlantic:Azores"{ + ec{"Азорські о-ви"} + } + "Atlantic:Canary"{ + ec{"Канари"} + } + "Atlantic:Jan_Mayen"{ + ec{"Ян-Майєн"} + } + "Atlantic:Madeira"{ + ec{"Мадейра"} + } + "Australia:Adelaide"{ + ec{"Аделаїда"} + } + "Australia:Brisbane"{ + ec{"Брисбен"} + } + "Australia:Broken_Hill"{ + ec{"Брокен-Гіл"} + } + "Australia:Darwin"{ + ec{"Дарвін"} + } + "Australia:Hobart"{ + ec{"Хобарт"} + } + "Australia:Lindeman"{ + ec{"Ліндеман"} + } + "Australia:Lord_Howe"{ + ec{"Лорд-Хау"} + } + "Australia:Melbourne"{ + ec{"Мельбурн"} + } + "Australia:Perth"{ + ec{"Перт"} + } + "Australia:Sydney"{ + ec{"Сідней"} + } + "Europe:Belfast"{ + ec{"Белфаст"} + } + "Europe:Kaliningrad"{ + ec{"Калінінград"} + } + "Europe:Kiev"{ + ec{"Київ"} + } + "Europe:Lisbon"{ + ec{"Лісабон"} + } + "Europe:London"{ + ec{"Лондон"} + } + "Europe:Madrid"{ + ec{"Мадрид"} + } + "Europe:Moscow"{ + ec{"Москва"} + } + "Europe:Samara"{ + ec{"Самара"} + } + "Europe:Simferopol"{ + ec{"Сімферополь"} + } + "Europe:Uzhgorod"{ + ec{"Ужгород"} + } + "Europe:Zaporozhye"{ + ec{"Запоріжжя"} + } + "Pacific:Auckland"{ + ec{"Окленд"} + } + "Pacific:Chatham"{ + ec{"Чатем"} + } + "Pacific:Easter"{ + ec{"Пасхи, острів"} + } + "Pacific:Enderbury"{ + ec{"Ендербері"} + } + "Pacific:Galapagos"{ + ec{"Ґалапагос"} + } + "Pacific:Gambier"{ + ec{"Гамбер"} + } + "Pacific:Honolulu"{ + ec{"Гонолулу"} + } + "Pacific:Johnston"{ + ec{"Джонстон"} + } + "Pacific:Kiritimati"{ + ec{"Кіритиматі"} + } + "Pacific:Kosrae"{ + ec{"Косрае"} + } + "Pacific:Kwajalein"{ + ec{"Кваджалейн"} + } + "Pacific:Majuro"{ + ec{"Маджуро"} + } + "Pacific:Midway"{ + ec{"Мідуей"} + } + "Pacific:Ponape"{ + ec{"Понапе"} + } + "Pacific:Tahiti"{ + ec{"Таїті"} + } + "Pacific:Tarawa"{ + ec{"Тарава"} + } + "Pacific:Truk"{ + ec{"Трук"} + } + "Pacific:Wake"{ + ec{"Вейк"} + } + "Pacific:Yap"{ + ec{"Яп"} + } + hourFormat{"+HHmm;-HHmm"} + } +} diff --git a/icuSources/data/locales/uk_UA.txt b/icuSources/data/locales/uk_UA.txt index 3bdd9a86..dd01c2cb 100644 --- a/icuSources/data/locales/uk_UA.txt +++ b/icuSources/data/locales/uk_UA.txt @@ -1,17 +1,17 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/uk_UA.xml +// * Source File:/common/main/uk_UA.xml // * // *************************************************************************** uk_UA{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.37"} } diff --git a/icuSources/data/locales/ur.txt b/icuSources/data/locales/ur.txt new file mode 100644 index 00000000..65ebc2cd --- /dev/null +++ b/icuSources/data/locales/ur.txt @@ -0,0 +1,25 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ur.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ur.xml + */ +ur{ + Countries{ + IN{"بھارت"} + PK{"پاکستان"} + } + ExemplarCharacters{"[ء-ؤ ئ-ب ٻ پ ة-ث ٹ ٺ ټ ٽ ج چ ح-ذ ڈ ر ز ڑ ژ س-غ ف ق ک گ ل-ن ں ه ھ و ی ے]"} + Languages{ + ur{"اردو"} + } + LocaleScript{ + "Arab", + } + Version{"1.31"} +} diff --git a/icuSources/data/locales/ur_IN.txt b/icuSources/data/locales/ur_IN.txt new file mode 100644 index 00000000..7cff1e19 --- /dev/null +++ b/icuSources/data/locales/ur_IN.txt @@ -0,0 +1,24 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ur_IN.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/ur_IN.xml + */ +ur_IN{ + Version{"1.7"} + calendar{ + gregorian{ + weekend:intvector{ + 1, + 0, + 1, + 86400000, + } + } + } +} diff --git a/icuSources/data/locales/ur_PK.txt b/icuSources/data/locales/ur_PK.txt new file mode 100644 index 00000000..8c2bb946 --- /dev/null +++ b/icuSources/data/locales/ur_PK.txt @@ -0,0 +1,19 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/ur_PK.xml +// * +// *************************************************************************** +ur_PK{ + Version{"1.27"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/uz.txt b/icuSources/data/locales/uz.txt new file mode 100644 index 00000000..722f7d29 --- /dev/null +++ b/icuSources/data/locales/uz.txt @@ -0,0 +1,198 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/uz.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/uz.xml + */ +uz{ + AuxExemplarCharacters{"[ц щ ы ь]"} + Countries{ + AF{"Афғонистон"} + BR{"Бразилия"} + CN{"Хитой"} + DE{"Олмония"} + FR{"Франция"} + GB{"Бирлашган Қироллик"} + IN{"Ҳиндистон"} + IT{"Италия"} + JP{"Япония"} + RU{"Россия"} + US{"Қўшма Штатлар"} + UZ{"Ўзбекистон"} + } + Currencies{ + BRL{ + "BRL", + "Бразил реали", + } + CNY{ + "CNY", + "Хитой юани", + } + EUR{ + "€", + "Евро", + } + GBP{ + "£", + "Инглиз фунт стерлинги", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/uz_Cyrl.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/uz_Cyrl.xml + */ +uz_Cyrl{ + LocaleScript{ + "Cyrl", + } + Version{"1.14"} +} diff --git a/icuSources/data/locales/uz_Cyrl_UZ.txt b/icuSources/data/locales/uz_Cyrl_UZ.txt new file mode 100644 index 00000000..3392f95a --- /dev/null +++ b/icuSources/data/locales/uz_Cyrl_UZ.txt @@ -0,0 +1,19 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/uz_Cyrl_UZ.xml +// * +// *************************************************************************** +uz_Cyrl_UZ{ + Version{"1.13"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/uz_Latn.txt b/icuSources/data/locales/uz_Latn.txt new file mode 100644 index 00000000..1e8ce0ea --- /dev/null +++ b/icuSources/data/locales/uz_Latn.txt @@ -0,0 +1,173 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/uz_Latn.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/uz_Latn.xml + */ +uz_Latn{ + Countries{ + AF{"Afgʿoniston"} + BR{"Braziliya"} + CN{"Xitoy"} + DE{"Olmoniya"} + FR{"Frantsiya"} + GB{"Birlashgan Qirollik"} + IN{"Hindiston"} + IT{"Italiya"} + JP{"Yaponiya"} + RU{"Rossiya"} + US{"Qo'shma Shtatlar"} + UZ{"Oʿzbekiston"} + } + Currencies{ + BRL{ + "BRL", + "Brazil reali", + } + CNY{ + "CNY", + "Xitoy yuani", + } + EUR{ + "€", + "Evro", + } + GBP{ + "£", + "Ingliz funt sterlingi", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/uz_Latn_UZ.xml +// * +// *************************************************************************** +uz_Latn_UZ{ + Version{"1.13"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/uz_UZ.txt b/icuSources/data/locales/uz_UZ.txt new file mode 100644 index 00000000..9e8a201f --- /dev/null +++ b/icuSources/data/locales/uz_UZ.txt @@ -0,0 +1,22 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/uz_UZ.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/uz_UZ.xml + */ +uz_UZ{ + "%%ALIAS"{"uz_Cyrl_UZ"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } +} diff --git a/icuSources/data/locales/vi.txt b/icuSources/data/locales/vi.txt index 771745be..8aca6e69 100644 --- a/icuSources/data/locales/vi.txt +++ b/icuSources/data/locales/vi.txt @@ -1,13 +1,13 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/vi.xml +// * Source File:/common/main/vi.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/vi.xml + * ICU source: /xml/main/vi.xml */ vi{ Countries{ @@ -47,6 +47,7 @@ vi{ CN{"Trung Quốc"} CO{"Cô-lôm-bi-a"} CR{"Cốt-xta Ri-ca"} + CS{"Séc-bia"} CU{"Cu Ba"} CV{"Cáp-ve"} CY{"Síp"} @@ -164,7 +165,6 @@ vi{ SM{"Xan Ma-ri-nô"} SN{"Xê-nê-gan"} SO{"Xô-ma-li"} - SP{"Séc-bia"} SR{"Xu-ri-nam"} ST{"Xao Tô-mê và Prin-xi-pê"} SV{"En-san-va-đo"} @@ -194,7 +194,6 @@ vi{ VU{"Va-nu-a-tu"} WS{"Xa-moa"} YE{"Y-ê-men"} - YU{"Nam Tư"} ZA{"Nam Phi"} ZM{"Dăm-bi-a"} ZW{"Dim-ba-bu-ê"} @@ -205,7 +204,11 @@ vi{ "đồng", } } - ExemplarCharacters{"[a-zẠ-ỹđơà-ãè-êìíò-õùúýăĩũư]"} + ExemplarCharacters{ + "[a à ả ã á ạ ă ằ ẳ ẵ ắ ặ â ầ ẩ ẫ ấ ậ b-d đ e è ẻ ẽ é ẹ ê ề ể ễ ế ệ f-i ì ỉ ĩ" + " í ị j-o ò ỏ õ ó ọ ô ồ ổ ỗ ố ộ ơ ờ ở ỡ ớ ợ p-u ù ủ ũ ú ụ ư ừ ử ữ ứ ự v-y ỳ ỷ" + " ỹ ý ỵ z]" + } Languages{ ar{"Tiếng A-rập"} az{"Tiếng Ai-déc-bai-gian"} @@ -282,26 +285,22 @@ vi{ "E", "‰", "∞", - "�", + "NaN", "+", } NumberPatterns{ - "#,##0.###;-#,##0.###", - "#,##0.00 ¤;-#,##0.00 ¤", + "#,##0.###", + "#,##0.00 ¤", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.50"} calendar{ gregorian{ AmPmMarkers{ "SA", "CH", } - DateTimeElements:intvector{ - 2, - 1, - } DateTimePatterns{ "HH:mm:ss z", "HH:mm:ss z", diff --git a/icuSources/data/locales/vi_VN.txt b/icuSources/data/locales/vi_VN.txt index e6b4715e..31f2c862 100644 --- a/icuSources/data/locales/vi_VN.txt +++ b/icuSources/data/locales/vi_VN.txt @@ -1,11 +1,11 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/vi_VN.xml +// * Source File:/common/main/vi_VN.xml // * // *************************************************************************** vi_VN{ - Version{"1.2"} + Version{"1.33"} } diff --git a/icuSources/data/locales/zh.txt b/icuSources/data/locales/zh.txt index 56b64eeb..1de82837 100644 --- a/icuSources/data/locales/zh.txt +++ b/icuSources/data/locales/zh.txt @@ -1,2530 +1,2502 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/zh.xml - */ -zh{ - Countries{ - AD{"安道尔"} - AE{"阿拉伯联合酋长国"} - AF{"阿富汗"} - AG{"安提瓜和巴布达"} - AI{"安圭拉"} - AL{"阿尔巴尼亚"} - AM{"亚美尼亚"} - AN{"荷属安的列斯群岛"} - AO{"安哥拉"} - AQ{"南极洲"} - AR{"阿根廷"} - AS{"美属萨摩亚"} - AT{"奥地利"} - AU{"澳大利亚"} - AW{"阿鲁巴"} - AZ{"阿塞拜疆"} - BA{"波斯尼亚和黑山共和国"} - BB{"巴巴多斯"} - BD{"孟加拉国"} - BE{"比利时"} - BF{"布基纳法索"} - BG{"保加利亚"} - BH{"巴林"} - BI{"布隆迪"} - BJ{"贝宁"} - BM{"百慕大"} - BN{"文莱"} - BO{"玻利维亚"} - BR{"巴西"} - BS{"巴哈马"} - BT{"不丹"} - BV{"布维特岛"} - BW{"博茨瓦纳"} - BY{"白俄罗斯"} - BZ{"伯利兹"} - CA{"加拿大"} - CC{"科科斯群岛"} - CD{"刚果民主共和国"} - CF{"中非共和国"} - CG{"刚果"} - CH{"瑞士"} - CI{"象牙海岸"} - CK{"库克群岛"} - CL{"智利"} - CM{"喀麦隆"} - CN{"中国"} - CO{"哥伦比亚"} - CR{"哥斯达黎加"} - CU{"古巴"} - CV{"佛得角"} - CX{"圣诞岛"} - CY{"塞浦路斯"} - CZ{"捷克共和国"} - DE{"德国"} - DJ{"吉布提"} - DK{"丹麦"} - DM{"多米尼加岘"} - DO{"多米尼加共和国"} - DZ{"阿尔及利亚"} - EC{"厄瓜多尔"} - EE{"爱沙尼亚"} - EG{"埃及"} - EH{"西撒哈拉"} - ER{"厄立特里亚"} - ES{"西班牙"} - ET{"埃塞俄比亚"} - FI{"芬兰"} - FJ{"斐济"} - FK{"福克兰群岛"} - FM{"密克罗尼西亚联邦"} - FO{"法罗群岛"} - FR{"法国"} - GA{"加蓬"} - GB{"英国"} - GD{"格林纳达"} - GE{"格鲁吉亚"} - GF{"法属圭亚那"} - GH{"加纳"} - GI{"直布罗陀"} - GL{"格陵兰"} - GM{"冈比亚"} - GN{"几内亚"} - GP{"瓜德罗普岛"} - GQ{"赤道几内亚"} - GR{"希腊"} - GS{"南佐治亚和南三明治群岛"} - GT{"危地马拉"} - GU{"关岛"} - GW{"几内亚比绍"} - GY{"圭亚那"} - HK{"中国香港特别行政区"} - HM{"赫德与麦克唐纳群岛"} - HN{"洪都拉斯"} - HR{"克罗地亚"} - HT{"海地"} - HU{"匈牙利"} - ID{"印度尼西亚"} - IE{"爱尔兰"} - IL{"以色列"} - IN{"印度"} - IO{"英属印度洋领地"} - IQ{"伊拉克"} - IR{"伊朗"} - IS{"冰岛"} - IT{"意大利"} - JM{"牙买加"} - JO{"约旦"} - JP{"日本"} - KE{"肯尼亚"} - KG{"吉尔吉克斯坦"} - KH{"柬埔寨"} - KI{"基里巴斯"} - KM{"科摩罗"} - KN{"圣基茨和尼维斯"} - KP{"北朝鲜"} - KR{"韩国"} - KW{"科威特"} - KY{"开曼群岛"} - KZ{"哈萨克斯坦"} - LA{"老挝人民民主共和国"} - LB{"黎巴嫩"} - LC{"圣卢西亚"} - LI{"列支敦士登"} - LK{"斯里兰卡"} - LR{"利比里亚"} - LS{"莱索托"} - LT{"立陶宛"} - LU{"卢森堡"} - LV{"拉脱维亚"} - LY{"利比亚"} - MA{"摩洛哥"} - MC{"摩纳哥"} - MD{"摩尔多瓦共和国"} - MG{"马达加斯加"} - MH{"马绍尔群岛"} - MK{"马其顿王国"} - ML{"马里"} - MM{"缅甸"} - MN{"蒙古"} - MO{"中国澳门特别行政区"} - MP{"北马里亚纳群岛"} - MQ{"马提尼克岛"} - MR{"毛里塔尼亚"} - MS{"蒙特塞拉群岛"} - MT{"马耳他"} - MU{"毛里求斯"} - MV{"马尔代夫"} - MW{"马拉维"} - MX{"墨西哥"} - MY{"马来西亚"} - MZ{"莫桑比克"} - NA{"纳米比亚"} - NC{"新喀里多尼亚"} - NE{"尼日尔"} - NF{"诺福克岛"} - NG{"尼日利亚"} - NI{"尼加拉瓜"} - NL{"荷兰"} - NO{"挪威"} - NP{"尼泊尔"} - NR{"瑙鲁"} - NU{"纽埃"} - NZ{"新西兰"} - OM{"阿曼"} - PA{"巴拿马"} - PE{"秘鲁"} - PF{"法属波利尼西亚"} - PG{"巴布亚新几内亚"} - PH{"菲律宾"} - PK{"巴基斯坦"} - PL{"波兰"} - PM{"圣皮埃尔和密克隆"} - PN{"皮特凯恩"} - PR{"波多黎各"} - PS{"巴勒斯坦领土"} - PT{"葡萄牙"} - PW{"帕劳"} - PY{"巴拉圭"} - QA{"卡塔尔"} - RE{"留尼汪"} - RO{"罗马尼亚"} - RU{"俄罗斯联邦"} - RW{"卢旺达"} - SA{"沙特阿拉伯"} - SB{"所罗门群岛"} - SC{"塞舌尔"} - SD{"苏丹"} - SE{"瑞典"} - SG{"新加坡"} - SH{"圣赫勒拿"} - SI{"斯洛文尼亚"} - SJ{"斯瓦尔巴特和扬马延"} - SK{"斯洛伐克"} - SL{"塞拉利昂"} - SM{"圣马力诺"} - SN{"塞内加尔"} - SO{"索马里"} - SP{"塞尔维亚"} - SR{"苏里南"} - ST{"圣多美和普林西比"} - SV{"萨尔瓦多"} - SY{"叙利亚"} - SZ{"斯威士兰"} - TC{"特克斯和凯科斯群岛"} - TD{"乍得"} - TF{"法属南半球领地"} - TG{"多哥"} - TH{"泰国"} - TJ{"塔吉克斯坦"} - TK{"托克劳"} - TL{"东帝汶"} - TM{"土库曼斯坦"} - TN{"突尼斯"} - TO{"汤加"} - TR{"土耳其"} - TT{"特立尼达和多巴哥"} - TV{"图瓦卢"} - TW{"台湾"} - TZ{"坦桑尼亚"} - UA{"乌克兰"} - UG{"乌干达"} - UM{"美国边远小岛"} - US{"美国"} - UY{"乌拉圭"} - UZ{"乌兹别克斯坦"} - VA{"梵蒂冈"} - VC{"圣文森特和格林纳丁斯"} - VE{"委内瑞拉"} - VG{"英属维京群岛"} - VI{"美属维京群岛"} - VN{"越南"} - VU{"瓦努阿图"} - WF{"瓦利斯和富图纳"} - WS{"萨摩亚"} - YE{"也门"} - YT{"马约特"} - YU{"南斯拉夫"} - ZA{"南非"} - ZM{"赞比亚"} - ZW{"津巴布韦"} - } - Currencies{ - ADD{ - "ADD", - "安道尔第纳尔元", - } - ADP{ - "ADP", - "安道尔比塞塔元", - } - AED{ - "AED", - "阿联酋迪拉姆", - } - AFA{ - "AFA", - "阿富汗尼 (1927-2002)", - } - AFN{ - "AFN", - "阿富汗尼", - } - AIF{ - "AIF", - "阿发和伊萨法郎", - } - ALK{ - "ALK", - "阿尔巴尼亚列克 (1946-1961)", - } - ALL{ - "ALL", - "阿尔巴尼亚列克", - } - ALV{ - "ALV", - "阿尔巴尼亚列克币", - } - ALX{ - "ALX", - "阿尔巴尼亚元外汇券", - } - AMD{ - "AMD", - "亚美尼亚德拉姆", - } - ANG{ - "ANG", - "荷兰安替兰盾", - } - AOA{ - "AOA", - "安戈拉宽扎", - } - AOK{ - "AOK", - "安戈拉宽扎 (1977-1990)", - } - AON{ - "AON", - "安戈拉新宽扎 (1990-2000)", - } - AOR{ - "AOR", - "安戈拉宽扎 Reajustado (1995-1999)", - } - AOS{ - "AOS", - "安哥拉埃斯库多", - } - ARA{ - "ARA", - "阿根廷奥斯特", - } - ARM{ - "ARM", - "阿根廷比索标准局", - } - ARP{ - "ARP", - "阿根廷比索 (1983-1985)", - } - ARS{ - "ARS", - "阿根廷比索", - } - ATS{ - "ATS", - "奥地利西令", - } - AUD{ - "AUD", - "澳大利亚元", - } - AUP{ - "AUP", - "澳大利亚磅", - } - AWG{ - "AWG", - "阿鲁巴基尔德元", - } - BAD{ - "BAD", - "波士尼亚-赫塞哥维纳第纳尔元", - } - BAM{ - "BAM", - "波士尼亚-赫塞哥维纳兑换券", - } - BAN{ - "BAN", - "波士尼亚-赫塞哥维纳新第纳尔元", - } - BBD{ - "BBD", - "巴巴多斯元", - } - BDT{ - "BDT", - "孟加拉达卡", - } - BEC{ - "BEC", - "比利时法郎兑换券", - } - BEF{ - "BEF", - "比利时法郎", - } - BEL{ - "BEL", - "比利时法郎(金融)", - } - BGL{ - "BGL", - "保加利亚硬列克", - } - BGM{ - "BGM", - "保加利亚社会主义列克", - } - BGN{ - "BGN", - "保加利亚新列克", - } - BGO{ - "BGO", - "保加利亚列克 (1879-1952)", - } - BGX{ - "BGX", - "保加利亚列克外汇券", - } - BHD{ - "BHD", - "巴林第纳尔元", - } - BIF{ - "BIF", - "布隆迪法郎", - } - BMD{ - "BMD", - "百慕大元", - } - BMP{ - "BMP", - "百慕大磅", - } - BND{ - "BND", - "汶莱元", - } - BOB{ - "BOB", - "玻利维亚", - } - BOL{ - "BOL", - "玻利维亚 (1863-1962)", - } - BOP{ - "BOP", - "玻利维亚比索", - } - BRB{ - "BRB", - "巴西克鲁赛罗 (1967-1986)", - } - BRC{ - "BRC", - "巴西克鲁塞罗", - } - BRE{ - "BRE", - "巴西克鲁塞罗 (1990-1993)", - } - BRL{ - "BRL", - "巴西里尔", - } - BRN{ - "BRN", - "巴西克鲁塞罗 Cruzado Novo", - } - BRR{ - "BRR", - "巴西克鲁塞罗", - } - BRZ{ - "BRZ", - "巴西克鲁塞罗 (1942-1967)", - } - BSD{ - "BSD", - "巴哈马元", - } - BSP{ - "BSP", - "巴哈马磅", - } - BTN{ - "BTN", - "不丹努扎姆", - } - BTR{ - "BTR", - "不丹卢比", - } - BUK{ - "BUK", - "缅元", - } - BUR{ - "BUR", - "缅甸卢比", - } - BWP{ - "BWP", - "波渣那扑拉", - } - BYB{ - "BYB", - "白俄罗斯新卢布 (1994-1999)", - } - BYL{ - "BYL", - "白俄罗斯卢布 (1992-1994)", - } - BYR{ - "BYR", - "白俄罗斯卢布", - } - BZD{ - "BZD", - "伯利兹元", - } - BZH{ - "BZH", - "属洪都拉斯元", - } - CAD{ - "CAD", - "加拿大元", - } - CDF{ - "CDF", - "刚果法郎", - } - CDG{ - "CDG", - "刚果共和国法郎", - } - CDL{ - "CDL", - "刚果扎伊尔", - } - CFF{ - "CFF", - "中非共和国 CFA 法郎", - } - CHF{ - "CHF", - "瑞士法郎", - } - CKD{ - "CKD", - "库克群岛元", - } - CLC{ - "CLC", - "智利肯杜", - } - CLE{ - "CLE", - "智利埃斯库多", - } - CLF{ - "CLF", - "智利 Unidades de Fomento", - } - CLP{ - "CLP", - "智利 比索", - } - CMF{ - "CMF", - "喀麦隆 CFA 法郎", - } - CNP{ - "CNP", - "中国人民票元", - } - CNX{ - "CNX", - "中国美元外汇券", - } - CNY{ - "¥", - "人民币", - } - COB{ - "COB", - "哥伦比亚纸比索", - } - COF{ - "COF", - "刚果 CFA 法郎", - } - COP{ - "COP", - "哥伦比亚比索", - } - CRC{ - "CRC", - "哥斯达黎加科隆", - } - CSC{ - "CSC", - "捷克克郎", - } - CSK{ - "CSK", - "捷克硬克郎", - } - CUP{ - "CUP", - "古巴比索", - } - CUX{ - "CUX", - "古巴外汇券", - } - CVE{ - "CVE", - "佛得角埃斯库多", - } - CWG{ - "CWG", - "库拉盾", - } - CYP{ - "CYP", - "塞浦路斯磅", - } - CZK{ - "CZK", - "捷克克郎", - } - DDM{ - "DDM", - "东德奥斯特马克", - } - DEM{ - "DEM", - "德国马克", - } - DES{ - "DES", - "德国司萡马克", - } - DJF{ - "DJF", - "吉布提法郎", - } - DKK{ - "DKK", - "丹麦克朗", - } - DOP{ - "DOP", - "多米尼加比索", - } - DZD{ - "DZD", - "阿尔及利亚第纳尔元", - } - DZF{ - "DZF", - "阿尔及利亚新法郎", - } - DZG{ - "DZG", - "阿尔及利亚法郎比斯查", - } - ECS{ - "ECS", - "厄瓜多尔苏克雷", - } - EEK{ - "EEK", - "爱沙尼亚克朗", - } - EGP{ - "EGP", - "埃及磅", - } - ERN{ - "ERN", - "厄立特里亚纳福卡", - } - ESP{ - "ESP", - "西班牙马赛塔", - } - ETB{ - "ETB", - "埃塞俄比亚比尔", - } - ETD{ - "ETD", - "埃塞俄比亚元", - } - EUR{ - "€", - "欧元", - } - FIM{ - "FIM", - "芬兰玛卡", - } - FIN{ - "FIN", - "芬兰玛卡 (1860-1962)", - } - FJD{ - "FJD", - "斐济元", - } - FJP{ - "FJP", - "斐济磅", - } - FKP{ - "FKP", - "福克兰群岛磅", - } - FOK{ - "FOK", - "法罗群岛克朗", - } - FRF{ - "FRF", - "法国法郎", - } - FRG{ - "FRG", - "法国法郎比斯查/法郎庞加莱", - } - GBP{ - "£", - "英磅", - } - GEK{ - "GEK", - "乔治亚库蓬拉瑞特", - } - GEL{ - "GEL", - "乔治亚库蓬拉瑞", - } - GHC{ - "GHC", - "加纳塞第", - } - GHO{ - "GHO", - "加纳旧塞第", - } - GHP{ - "GHP", - "加纳磅", - } - GHR{ - "GHR", - "加纳重评估塞第", - } - GIP{ - "GIP", - "直布罗陀磅", - } - GLK{ - "GLK", - "格陵兰克朗", - } - GMD{ - "GMD", - "冈比亚达拉西", - } - GMP{ - "GMP", - "冈比亚磅", - } - GNF{ - "GNF", - "几内亚法郎", - } - GNI{ - "GNI", - "几内亚法郎 (1960-1972)", - } - GNS{ - "GNS", - "几内亚Syli", - } - GPF{ - "GPF", - "瓜德罗普岛法郎", - } - GQE{ - "GQE", - "赤道几内亚爱克威乐", - } - GQF{ - "GQF", - "赤道几内亚法郎", - } - GQP{ - "GQP", - "赤道几内亚匹塞塔", - } - GRD{ - "GRD", - "希腊德拉克马", - } - GRN{ - "GRN", - "希腊新德拉克马", - } - GTQ{ - "GTQ", - "危地马拉", - } - GUF{ - "GUF", - "法国属圭亚那法郎", - } - GWE{ - "GWE", - "葡萄牙几内亚埃斯库多", - } - GWM{ - "GWM", - "葡萄牙几内亚迷洱瑞", - } - GWP{ - "GWP", - "几内亚比索", - } - GYD{ - "GYD", - "圭亚那元", - } - HKD{ - "HK$", - "港元", - } - HNL{ - "HNL", - "洪都拉斯勒皮拉", - } - HRD{ - "HRD", - "克罗地亚第纳尔元", - } - HRK{ - "HRK", - "克罗地亚库娜元", - } - HTG{ - "HTG", - "海地古德", - } - HUF{ - "HUF", - "匈牙利缶瑞特", - } - IBP{ - "IBP", - "北爱尔兰磅", - } - IDG{ - "IDG", - "印度尼西亚尼卡盾", - } - IDJ{ - "IDJ", - "印度尼西亚爪哇盾", - } - IDN{ - "IDN", - "印度尼西亚新盾", - } - IDR{ - "IDR", - "印度尼西亚盾", - } - IEP{ - "IEP", - "爱尔兰磅", - } - ILL{ - "ILL", - "以色列谢客尔", - } - ILP{ - "ILP", - "以色列磅", - } - ILS{ - "ILS", - "以色列新谢客尔", - } - IMP{ - "IMP", - "曼岛磅", - } - INR{ - "=0#Rs.|1#Re.|1/common/main/zh.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/zh.xml + */ +zh{ + Countries{ + 002{"非洲"} + 013{"中美洲"} + 014{"东非"} + 015{"北非"} + 017{"中非"} + 019{"美洲"} + 021{"北美洲"} + 029{"加勒比海"} + 030{"东亚"} + 053{"澳大利亚和新西兰"} + 054{"美拉尼西亚"} + 057{"密克罗尼西亚"} + 142{"亚洲"} + 150{"欧洲"} + 151{"东欧"} + 154{"北欧"} + 830{"海峡群岛"} + 833{"曼岛"} + AD{"安道尔"} + AE{"阿拉伯联合酋长国"} + AF{"阿富汗"} + AG{"安提瓜和巴布达"} + AI{"安圭拉"} + AL{"阿尔巴尼亚"} + AM{"亚美尼亚"} + AN{"荷属安的列斯群岛"} + AO{"安哥拉"} + AQ{"南极洲"} + AR{"阿根廷"} + AS{"美属萨摩亚"} + AT{"奥地利"} + AU{"澳大利亚"} + AW{"阿鲁巴"} + AX{"奥兰群岛"} + AZ{"阿塞拜疆"} + BA{"波斯尼亚和黑山共和国"} + BB{"巴巴多斯"} + BD{"孟加拉国"} + BE{"比利时"} + BF{"布基纳法索"} + BG{"保加利亚"} + BH{"巴林"} + BI{"布隆迪"} + BJ{"贝宁"} + BM{"百慕大"} + BN{"文莱"} + BO{"玻利维亚"} + BR{"巴西"} + BS{"巴哈马"} + BT{"不丹"} + BV{"布维特岛"} + BW{"博茨瓦纳"} + BY{"白俄罗斯"} + BZ{"伯利兹"} + CA{"加拿大"} + CC{"科科斯群岛"} + CD{"刚果民主共和国"} + CF{"中非共和国"} + CG{"刚果"} + CH{"瑞士"} + CI{"象牙海岸"} + CK{"库克群岛"} + CL{"智利"} + CM{"喀麦隆"} + CN{"中国"} + CO{"哥伦比亚"} + CR{"哥斯达黎加"} + CU{"古巴"} + CV{"佛得角"} + CX{"圣诞岛"} + CY{"塞浦路斯"} + CZ{"捷克共和国"} + DE{"德国"} + DJ{"吉布提"} + DK{"丹麦"} + DM{"多米尼加岘"} + DO{"多米尼加共和国"} + DZ{"阿尔及利亚"} + EC{"厄瓜多尔"} + EE{"爱沙尼亚"} + EG{"埃及"} + EH{"西撒哈拉"} + ER{"厄立特里亚"} + ES{"西班牙"} + ET{"埃塞俄比亚"} + FI{"芬兰"} + FJ{"斐济"} + FK{"福克兰群岛"} + FM{"密克罗尼西亚联邦"} + FO{"法罗群岛"} + FR{"法国"} + GA{"加蓬"} + GB{"英国"} + GD{"格林纳达"} + GE{"格鲁吉亚"} + GF{"法属圭亚那"} + GH{"加纳"} + GI{"直布罗陀"} + GL{"格陵兰"} + GM{"冈比亚"} + GN{"几内亚"} + GP{"瓜德罗普岛"} + GQ{"赤道几内亚"} + GR{"希腊"} + GS{"南佐治亚和南三明治群岛"} + GT{"危地马拉"} + GU{"关岛"} + GW{"几内亚比绍"} + GY{"圭亚那"} + HK{"中国香港特别行政区"} + HM{"赫德与麦克唐纳群岛"} + HN{"洪都拉斯"} + HR{"克罗地亚"} + HT{"海地"} + HU{"匈牙利"} + ID{"印度尼西亚"} + IE{"爱尔兰"} + IL{"以色列"} + IN{"印度"} + IO{"英属印度洋领地"} + IQ{"伊拉克"} + IR{"伊朗"} + IS{"冰岛"} + IT{"意大利"} + JM{"牙买加"} + JO{"约旦"} + JP{"日本"} + KE{"肯尼亚"} + KG{"吉尔吉克斯坦"} + KH{"柬埔寨"} + KI{"基里巴斯"} + KM{"科摩罗"} + KN{"圣基茨和尼维斯"} + KP{"北朝鲜"} + KR{"韩国"} + KW{"科威特"} + KY{"开曼群岛"} + KZ{"哈萨克斯坦"} + LA{"老挝人民民主共和国"} + LB{"黎巴嫩"} + LC{"圣卢西亚"} + LI{"列支敦士登"} + LK{"斯里兰卡"} + LR{"利比里亚"} + LS{"莱索托"} + LT{"立陶宛"} + LU{"卢森堡"} + LV{"拉脱维亚"} + LY{"利比亚"} + MA{"摩洛哥"} + MC{"摩纳哥"} + MD{"摩尔多瓦共和国"} + MG{"马达加斯加"} + MH{"马绍尔群岛"} + MK{"马其顿王国"} + ML{"马里"} + MM{"缅甸"} + MN{"蒙古"} + MO{"中国澳门特别行政区"} + MP{"北马里亚纳群岛"} + MQ{"马提尼克岛"} + MR{"毛里塔尼亚"} + MS{"蒙特塞拉群岛"} + MT{"马耳他"} + MU{"毛里求斯"} + MV{"马尔代夫"} + MW{"马拉维"} + MX{"墨西哥"} + MY{"马来西亚"} + MZ{"莫桑比克"} + NA{"纳米比亚"} + NC{"新喀里多尼亚"} + NE{"尼日尔"} + NF{"诺福克岛"} + NG{"尼日利亚"} + NI{"尼加拉瓜"} + NL{"荷兰"} + NO{"挪威"} + NP{"尼泊尔"} + NR{"瑙鲁"} + NU{"纽埃"} + NZ{"新西兰"} + OM{"阿曼"} + PA{"巴拿马"} + PE{"秘鲁"} + PF{"法属波利尼西亚"} + PG{"巴布亚新几内亚"} + PH{"菲律宾"} + PK{"巴基斯坦"} + PL{"波兰"} + PM{"圣皮埃尔和密克隆"} + PN{"皮特凯恩"} + PR{"波多黎各"} + PS{"巴勒斯坦领土"} + PT{"葡萄牙"} + PW{"帕劳"} + PY{"巴拉圭"} + QA{"卡塔尔"} + RE{"留尼汪"} + RO{"罗马尼亚"} + RU{"俄罗斯联邦"} + RW{"卢旺达"} + SA{"沙特阿拉伯"} + SB{"所罗门群岛"} + SC{"塞舌尔"} + SD{"苏丹"} + SE{"瑞典"} + SG{"新加坡"} + SH{"圣赫勒拿"} + SI{"斯洛文尼亚"} + SJ{"斯瓦尔巴特和扬马延"} + SK{"斯洛伐克"} + SL{"塞拉利昂"} + SM{"圣马力诺"} + SN{"塞内加尔"} + SO{"索马里"} + SR{"苏里南"} + ST{"圣多美和普林西比"} + SV{"萨尔瓦多"} + SY{"叙利亚"} + SZ{"斯威士兰"} + TC{"特克斯和凯科斯群岛"} + TD{"乍得"} + TF{"法属南半球领地"} + TG{"多哥"} + TH{"泰国"} + TJ{"塔吉克斯坦"} + TK{"托克劳"} + TL{"东帝汶"} + TM{"土库曼斯坦"} + TN{"突尼斯"} + TO{"汤加"} + TR{"土耳其"} + TT{"特立尼达和多巴哥"} + TV{"图瓦卢"} + TW{"台湾"} + TZ{"坦桑尼亚"} + UA{"乌克兰"} + UG{"乌干达"} + UM{"美国边远小岛"} + US{"美国"} + UY{"乌拉圭"} + UZ{"乌兹别克斯坦"} + VA{"梵蒂冈"} + VC{"圣文森特和格林纳丁斯"} + VE{"委内瑞拉"} + VG{"英属维京群岛"} + VI{"美属维京群岛"} + VN{"越南"} + VU{"瓦努阿图"} + WF{"瓦利斯和富图纳"} + WS{"萨摩亚"} + YE{"也门"} + YT{"马约特"} + ZA{"南非"} + ZM{"赞比亚"} + ZW{"津巴布韦"} + } + Currencies{ + ADP{ + "ADP", + "安道尔比塞塔元", + } + AED{ + "AED", + "阿联酋迪拉姆", + } + AFA{ + "AFA", + "阿富汗尼 (1927-2002)", + } + AFN{ + "AFN", + "阿富汗尼", + } + ALL{ + "ALL", + "阿尔巴尼亚列克", + } + AMD{ + "AMD", + "亚美尼亚德拉姆", + } + ANG{ + "ANG", + "荷兰安替兰盾", + } + AOA{ + "AOA", + "安戈拉宽扎", + } + AOK{ + "AOK", + "安戈拉宽扎 (1977-1990)", + } + AON{ + "AON", + "安戈拉新宽扎 (1990-2000)", + } + AOR{ + "AOR", + "安戈拉宽扎 Reajustado (1995-1999)", + } + ARA{ + "ARA", + "阿根廷奥斯特", + } + ARP{ + "ARP", + "阿根廷比索 (1983-1985)", + } + ARS{ + "ARS", + "阿根廷比索", + } + ATS{ + "ATS", + "奥地利西令", + } + AUD{ + "AUD", + "澳大利亚元", + } + AWG{ + "AWG", + "阿鲁巴基尔德元", + } + BAD{ + "BAD", + "波士尼亚-赫塞哥维纳第纳尔元", + } + BAM{ + "BAM", + "波士尼亚-赫塞哥维纳兑换券", + } + BBD{ + "BBD", + "巴巴多斯元", + } + BDT{ + "BDT", + "孟加拉达卡", + } + BEC{ + "BEC", + "比利时法郎兑换券", + } + BEF{ + "BEF", + "比利时法郎", + } + BEL{ + "BEL", + "比利时法郎(金融)", + } + BGL{ + "BGL", + "保加利亚硬列克", + } + BGN{ + "BGN", + "保加利亚新列克", + } + BHD{ + "BHD", + "巴林第纳尔元", + } + BIF{ + "BIF", + "布隆迪法郎", + } + BMD{ + "BMD", + "百慕大元", + } + BND{ + "BND", + "汶莱元", + } + BOB{ + "BOB", + "玻利维亚", + } + BOP{ + "BOP", + "玻利维亚比索", + } + BRB{ + "BRB", + "巴西克鲁赛罗 (1967-1986)", + } + BRC{ + "BRC", + "巴西克鲁塞罗 Brazilian Cruzado", + } + BRE{ + "BRE", + "巴西克鲁塞罗 (1990-1993)", + } + BRL{ + "BRL", + "巴西里尔", + } + BRN{ + "BRN", + "巴西克鲁塞罗 Cruzado Novo", + } + BRR{ + "BRR", + "巴西克鲁塞罗", + } + BSD{ + "BSD", + "巴哈马元", + } + BTN{ + "BTN", + "不丹努扎姆", + } + BUK{ + "BUK", + "缅元", + } + BWP{ + "BWP", + "波渣那扑拉", + } + BYB{ + "BYB", + "白俄罗斯新卢布 (1994-1999)", + } + BYR{ + "BYR", + "白俄罗斯卢布", + } + BZD{ + "BZD", + "伯利兹元", + } + CAD{ + "CAD", + "加拿大元", + } + CDF{ + "CDF", + "刚果法郎", + } + CHF{ + "CHF", + "瑞士法郎", + } + CLF{ + "CLF", + "智利 Unidades de Fomento", + } + CLP{ + "CLP", + "智利 比索", + } + CNY{ + "¥", + "人民币", + } + COP{ + "COP", + "哥伦比亚比索", + } + CRC{ + "CRC", + "哥斯达黎加科隆", + } + CSK{ + "CSK", + "捷克硬克郎", + } + CUP{ + "CUP", + "古巴比索", + } + CVE{ + "CVE", + "佛得角埃斯库多", + } + CYP{ + "CYP", + "塞浦路斯磅", + } + CZK{ + "CZK", + "捷克克郎", + } + DDM{ + "DDM", + "东德奥斯特马克", + } + DEM{ + "DEM", + "德国马克", + } + DJF{ + "DJF", + "吉布提法郎", + } + DKK{ + "DKK", + "丹麦克朗", + } + DOP{ + "DOP", + "多米尼加比索", + } + DZD{ + "DZD", + "阿尔及利亚第纳尔元", + } + ECS{ + "ECS", + "厄瓜多尔苏克雷", + } + EEK{ + "EEK", + "爱沙尼亚克朗", + } + EGP{ + "EGP", + "埃及磅", + } + ERN{ + "ERN", + "厄立特里亚纳福卡", + } + ESP{ + "ESP", + "西班牙马赛塔", + } + ETB{ + "ETB", + "埃塞俄比亚比尔", + } + EUR{ + "€", + "欧元", + } + FIM{ + "FIM", + "芬兰玛卡", + } + FJD{ + "FJD", + "斐济元", + } + FKP{ + "FKP", + "福克兰群岛磅", + } + FRF{ + "FRF", + "法国法郎", + } + GBP{ + "£", + "英磅", + } + GEK{ + "GEK", + "乔治亚库蓬拉瑞特", + } + GEL{ + "GEL", + "乔治亚库蓬拉瑞", + } + GHC{ + "GHC", + "加纳塞第", + } + GIP{ + "GIP", + "直布罗陀磅", + } + GMD{ + "GMD", + "冈比亚达拉西", + } + GNF{ + "GNF", + "几内亚法郎", + } + GNS{ + "GNS", + "几内亚Syli", + } + GQE{ + "GQE", + "赤道几内亚爱克威乐", + } + GRD{ + "GRD", + "希腊德拉克马", + } + GTQ{ + "GTQ", + "危地马拉", + } + GWE{ + "GWE", + "葡萄牙几内亚埃斯库多", + } + GWP{ + "GWP", + "几内亚比索", + } + GYD{ + "GYD", + "圭亚那元", + } + HKD{ + "HK$", + "港元", + } + HNL{ + "HNL", + "洪都拉斯勒皮拉", + } + HRD{ + "HRD", + "克罗地亚第纳尔元", + } + HRK{ + "HRK", + "克罗地亚库娜元", + } + HTG{ + "HTG", + "海地古德", + } + HUF{ + "HUF", + "匈牙利缶瑞特", + } + IDR{ + "IDR", + "印度尼西亚盾", + } + IEP{ + "IEP", + "爱尔兰磅", + } + ILP{ + "ILP", + "以色列磅", + } + ILS{ + "ILS", + "以色列新谢客尔", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/zh_CN.xml // * // *************************************************************************** zh_CN{ "%%ALIAS"{"zh_Hans_CN"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/zh_HK.txt b/icuSources/data/locales/zh_HK.txt index b15f2d81..34a55622 100644 --- a/icuSources/data/locales/zh_HK.txt +++ b/icuSources/data/locales/zh_HK.txt @@ -1,11 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_HK.xml +// * Source File:/common/main/zh_HK.xml // * // *************************************************************************** zh_HK{ "%%ALIAS"{"zh_Hant_HK"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/zh_Hans.txt b/icuSources/data/locales/zh_Hans.txt index 031f2ac5..7b3a6ce4 100644 --- a/icuSources/data/locales/zh_Hans.txt +++ b/icuSources/data/locales/zh_Hans.txt @@ -1,14 +1,895 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_Hans.xml +// * Source File:/common/main/zh_Hans.xml // * // *************************************************************************** /** - * ICU source: ../../../locale/icu/main/zh_Hans.xml + * ICU source: /xml/main/zh_Hans.xml */ zh_Hans{ - Version{"1.2"} + Countries{ + 034{"南亚"} + 061{"玻利尼西亚"} + 143{"中亚"} + 172{"独联体"} + 419{"拉丁美洲和加勒比海"} + BA{"波斯尼亚和黑塞哥维那"} + CC{"科科斯(基林)群岛"} + CD{"刚果(金)"} + CG{"刚果(布)"} + DM{"多米尼加"} + KG{"吉尔吉斯斯坦"} + MD{"摩尔多瓦"} + MK{"马其顿"} + MQ{"马提尼克群岛"} + MS{"蒙塞拉特群岛"} + NC{"新卡里多尼亚"} + RU{"俄罗斯"} + SC{"塞舌尔群岛"} + TF{"法属南部领土"} + } + Currencies{ + ADP{ + "ADP", + "安道尔比塞塔", + } + AFA{ + "AFA (1927-2002)", + "阿富汗尼 (1927-2002)", + } + AFN{ + "AFA", + "阿富汗尼", + } + AOA{ + "AOA", + "安哥拉宽扎", + } + AOK{ + "AOK", + "安哥拉宽扎 (1977-1990)", + } + AON{ + "AON", + "安哥拉新宽扎 (1990-2000)", + } + AOR{ + "AOR", + "安哥拉宽扎 Reajustado (1995-1999)", + } + ATS{ + "ATS", + "奥地利先令", + } + AZM{ + "AZM", + "阿塞拜疆马纳特", + } + BAD{ + "BAD", + "波士尼亚-赫塞哥维纳第纳尔", + } + BDT{ + "BDT", + "孟加拉塔卡", + } + BGL{ + "BGL", + "保加利亚硬列弗", + } + BGN{ + "BGN", + "保加利亚新列弗", + } + BHD{ + "BHD", + "巴林第纳尔", + } + BND{ + "BND", + "文莱元", + } + BOB{ + "BOB", + "玻利维亚诺", + } + BOV{ + "BOV", + "玻利维亚 Mvdol(资金)", + } + BRB{ + "BRB (1967-1986)", + "巴西克鲁赛罗 Novo (1967-1986)", + } + BRC{ + "BRC", + "巴西克鲁扎多", + } + BRE{ + "BRE (1990-1993)", + "巴西克鲁塞罗 (1990-1993)", + } + BRL{ + "BRL", + "巴西雷亚尔", + } + BRN{ + "BRN", + "巴西克鲁扎多 Novo", + } + BWP{ + "BWP", + "博茨瓦纳普拉", + } + CLF{ + "CLF", + "智利 Unidades de Fomento(资金)", + } + CLP{ + "CLP", + "智利比索", + } + COU{ + "COU", + "Unidad de Valor Real", + } + CRC{ + "CRC", + "哥斯达黎加科朗", + } + CSD{ + "CSD", + "塞尔维亚第纳尔", + } + CYP{ + "CYP", + "塞浦路斯镑", + } + DZD{ + "DZD", + "阿尔及利亚第纳尔", + } + ECV{ + "ECV", + "厄瓜多尔 Unidad de Valor Constante (UVC)", + } + EGP{ + "EGP", + "埃及镑", + } + EQE{ + "EQE", + "埃奎勒", + } + ERN{ + "ERN", + "厄立特里亚纳克法", + } + ESA{ + "ESA", + "西班牙比塞塔(帐户 A)", + } + ESB{ + "ESB", + "西班牙比塞塔(兑换帐户)", + } + ESP{ + "ESP", + "西班牙比塞塔", + } + FIM{ + "FIM", + "芬兰马克", + } + FKP{ + "FKP", + "福克兰镑", + } + GBP{ + "£", + "英镑", + } + GEL{ + "GEL", + "乔治亚拉瑞", + } + GIP{ + "GIP", + "直布罗陀镑", + } + GNS{ + "GNS", + "几内亚西里", + } + GQE{ + "GQE", + "赤道几内亚埃奎勒", + } + GTQ{ + "GTQ", + "危地马拉格查尔", + } + GWP{ + "GWP", + "几内亚比绍比索", + } + HNL{ + "HNL", + "洪都拉斯拉伦皮拉", + } + HRD{ + "HRD", + "克罗地亚第纳尔", + } + HRK{ + "HRK", + "克罗地亚库纳", + } + HUF{ + "HUF", + "匈牙利福林", + } + IEP{ + "IEP", + "爱尔兰镑", + } + ILP{ + "ILP", + "以色列镑", + } + ILS{ + "ILS", + "以色列新谢克尔", + } + INR{ + "INR", + "印度卢比", + } + IQD{ + "IQD", + "伊拉克第纳尔", + } + IRR{ + "IRR", + "伊朗里亚尔", + } + JOD{ + "JOD", + "约旦第纳尔", + } + KGS{ + "KGS", + "吉尔吉斯斯坦索姆", + } + KHR{ + "KHR", + "柬埔寨瑞尔", + } + KPW{ + "KPW", + "朝鲜圆", + } + KRW{ + "₩", + "韩圆", + } + KWD{ + "KWD", + "科威特第纳尔", + } + KYD{ + "KYD", + "开曼元", + } + KZT{ + "KZT", + "哈萨克斯坦坚戈", + } + LBP{ + "LBP", + "黎巴嫩镑", + } + LSL{ + "LSL", + "莱索托洛蒂", + } + LSM{ + "LSM", + "马洛蒂", + } + LTL{ + "LTL", + "立陶宛立特", + } + LUC{ + "LUC", + "卢森堡可兑换法郎", + } + LUL{ + "LUL", + "卢森堡金融法郎", + } + LYD{ + "LYD", + "利比亚第纳尔", + } + MDL{ + "MDL", + "摩尔多瓦列伊", + } + MGA{ + "MGA", + "马达加斯加阿里亚里", + } + MKD{ + "MKD", + "马其顿戴代纳尔", + } + MOP{ + "MOP", + "澳门元", + } + MRO{ + "MRO", + "毛里塔尼亚乌吉亚", + } + MTL{ + "MTL", + "马耳他里拉", + } + MTP{ + "MTP", + "马耳他镑", + } + MVR{ + "MVR", + "马尔代夫拉菲亚", + } + MWK{ + "MWK", + "马拉维克瓦查", + } + MXP{ + "MXP (1861-1992)", + "墨西哥银比索 (1861-1992)", + } + MXV{ + "MXV", + "墨西哥 Unidad de Inversion (UDI)(资金)", + } + MYR{ + "MYR", + "马来西亚林吉特", + } + MZM{ + "MZM", + "莫桑比克梅蒂卡尔", + } + NGN{ + "NGN", + "尼日利亚奈拉", + } + NIO{ + "NIO", + "尼加拉瓜金科多巴", + } + OMR{ + "OMR", + "阿曼里亚尔", + } + PEI{ + "PEI", + "秘鲁印锑", + } + PEN{ + "PEN", + "秘鲁新索尔", + } + PES{ + "PES", + "秘鲁索尔", + } + PTE{ + "PTE", + "葡萄牙埃斯库多", + } + PYG{ + "PYG", + "巴拉圭瓜拉尼", + } + RHD{ + "RHD", + "罗得西亚元", + } + ROL{ + "ROL", + "旧罗马尼亚列伊", + } + SAR{ + "SAR", + "沙特里亚尔", + } + SDD{ + "SDD", + "苏丹第纳尔", + } + SDP{ + "SDP", + "苏丹镑", + } + SEK{ + "SEK", + "瑞典克朗", + } + SHP{ + "SHP", + "圣赫勒拿镑", + } + SIT{ + "SIT", + "斯洛文尼亚托拉尔", + } + SKK{ + "SKK", + "斯洛伐克克朗", + } + SLL{ + "SLL", + "塞拉利昂利昂", + } + SRD{ + "SRD", + "苏里南元", + } + SRG{ + "SRG", + "苏里南盾", + } + STD{ + "STD", + "圣多美和普林西比多布拉", + } + SVC{ + "SVC", + "萨尔瓦多科朗", + } + SYP{ + "SYP", + "叙利亚镑", + } + SZL{ + "SZL", + "斯威士兰里兰吉尼", + } + TMM{ + "TMM", + "土库曼斯坦马纳特", + } + TND{ + "TND", + "突尼斯第纳尔", + } + TOP{ + "TOP", + "汤加潘加", + } + TWD{ + "NT$", + "新台币元", + } + UAH{ + "UAH", + "乌克兰格里夫尼亚", + } + UGS{ + "UGS (1966-1987)", + "乌干达先令 (1966-1987)", + } + USN{ + "USN", + "美元(次日)", + } + USS{ + "USS", + "美元(当日)", + } + UYP{ + "UYP (1975-1993)", + "乌拉圭新比索 (1975-1993)", + } + UZS{ + "UZS", + "乌兹别克斯苏姆", + } + VEB{ + "VEB", + "委内瑞拉博利瓦", + } + VUV{ + "VUV", + "瓦努阿图瓦图", + } + XAF{ + "XAF", + "中非金融合作法郎", + } + XAG{ + "XAG", + "银", + } + XBB{ + "XBB", + "欧洲货币联盟", + } + XBC{ + "XBC", + "欧洲计算单位 (XBC)", + } + XBD{ + "XBD", + "欧洲计算单位 (XBD)", + } + XFU{ + "XFU", + "法国 UIC 法郎", + } + XOF{ + "XOF", + "非洲金融共同体法郎", + } + XPD{ + "XPD", + "钯", + } + XPF{ + "XPF", + "太平洋法郎", + } + XPT{ + "XPT", + "铂", + } + XTS{ + "XTS", + "为测试保留的代码", + } + XXX{ + "XXX", + "没有货币的交易", + } + YDD{ + "YDD", + "也门第纳尔", + } + YER{ + "YER", + "也门里亚尔", + } + YUD{ + "YUD", + "南斯拉夫硬第纳尔", + } + YUM{ + "YUM", + "南斯拉夫偌威第纳尔", + } + YUN{ + "YUN", + "南斯拉夫可兑换第纳尔", + } + ZMK{ + "ZMK", + "赞比亚克瓦查", + } + ZRN{ + "ZRN", + "新扎伊尔", + } + ZRZ{ + "ZRZ", + "扎伊尔", + } + } + Languages{ + ain{"阿伊努文"} + ale{"阿留申文"} + alt{"南阿尔泰文"} + an{"阿拉贡文"} + ang{"古英文"} + art{"其他人工语系"} + ast{"阿斯图里亚思特文"} + ath{"阿萨帕斯坎语系"} + bai{"巴米累克语系"} + bat{"其他波罗的语系"} + ber{"柏柏尔文"} + bo{"藏文"} + cpe{"其他以英文为基础的克里奥尔混合语系"} + cpf{"其他以法文为基础的克里奥尔混合语系"} + cpp{"其他以葡萄牙文为基础的克里奥尔混合语系"} + crp{"其他克里奥尔混合语系"} + del{"特拉华文"} + dgr{"多格里布文"} + doi{"多格拉文"} + dsb{"下索布文"} + ee{"埃维文"} + efi{"埃菲克文"} + egy{"古埃及文"} + eka{"埃克丘克文"} + fil{"菲律宾文"} + fiu{"其他芬兰乌戈尔语系"} + gd{"苏格兰盖尔文"} + gem{"其他日尔曼语系"} + goh{"古高地德文"} + got{"哥特文"} + hit{"赫梯文"} + ho{"希里莫图文"} + ht{"海地文"} + ia{"国际文 A"} + ie{"国际文 E"} + inc{"其他印度语系"} + io{"伊多文"} + iro{"伊洛魁语系"} + iu{"伊努伊特文"} + jbo{"逻辑文"} + jpr{"犹太波斯文"} + jrb{"犹太阿拉伯文"} + khi{"其他科伊桑语系"} + kj{"宽亚玛文"} + kn{"坎纳达文"} + kos{"科斯拉伊文"} + krc{"卡拉恰伊巴尔卡尔文"} + lol{"芒戈文"} + lv{"拉脱维亚文"} + map{"澳斯特罗尼西亚语系"} + mis{"各种不同语系"} + mkh{"其他孟高棉语系"} + mno{"马诺博语系"} + mul{"多种语系"} + mun{"蒙达语系"} + mus{"克里克文"} + mwl{"米兰德斯文"} + mwr{"马尔瓦利文"} + myn{"玛雅语系"} + nds{"低地德文;低地撒克逊文"} + nia{"尼亚斯文"} + nic{"其他尼日尔科尔多凡语系"} + nub{"努比亚语系"} + nwc{"尼瓦尔文 Classical Newari"} + ny{"尼扬贾文;齐切瓦文;切瓦文"} + nyo{"尼约罗文"} + nzi{"恩济马文"} + oc{"奥克西唐文(1500以后)"} + oj{"奥吉布瓦文"} + om{"奥洛莫文"} + os{"奥塞梯文"} + osa{"奥萨格文"} + pag{"邦阿西楠文"} + pap{"帕皮亚门托文"} + phn{"腓尼基文"} + pi{"巴利文"} + pon{"波纳佩文"} + pra{"普拉克里特诸语言"} + rap{"拉帕努伊文"} + rm{"列托-罗曼文"} + rup{"亚美尼亚语"} + sas{"萨萨克文"} + sat{"桑塔利文"} + scn{"西西里文"} + sd{"信德文"} + se{"北萨米文"} + sh{"塞尔维亚-克罗地亚文"} + sma{"南萨米文"} + smi{"其他萨米文"} + smj{"Lule 萨米语"} + smn{"伊纳里萨米语"} + sms{"斯科特萨米文"} + sn{"绍纳文"} + sog{"古粟特文"} + srn{"Sranan Tongo(源于克里奥尔语)"} + ss{"斯瓦特文"} + ssa{"非洲撒哈拉沙漠边缘地带语言"} + su{"巽他文"} + tai{"傣语诸语言(其他)"} + tem{"滕内文"} + ter{"特列纳文"} + tet{"特塔姆文"} + tkl{"托克劳文"} + tl{"他加禄文"} + tlh{"克林贡文"} + tmh{"塔马奇克文"} + tn{"塞茨瓦纳文"} + ts{"宗加文"} + tt{"塔塔尔文"} + tup{"图皮语系"} + tut{"阿尔泰诸语言(其他)"} + tw{"特威文"} + umb{"翁本杜文"} + wa{"瓦隆文"} + wak{"瓦卡什诸语言"} + war{"瓦赖文"} + wo{"沃洛夫文"} + xal{"卡尔梅克文"} + xh{"科萨文"} + ypk{"尤皮克诸语言"} + za{"壮语"} + } + LocaleScript{ + "Hani", + "Bopo", + } + Scripts{ + Bali{"巴厘语"} + Batk{"巴塔克语"} + Blis{"布列斯符号"} + Brah{"婆罗米文字"} + Brai{"布莱叶盲文"} + Bugi{"布吉语"} + Cham{"占语"} + Cirt{"色斯文"} + Cyrs{"西里尔文字(古教会斯拉夫语的变体)"} + Dsrt{"德塞莱特文"} + Egyd{"后期埃及语"} + Egyh{"古埃及僧侣书写体"} + Egyp{"古埃及象形文"} + Geok{"格鲁吉亚语文字 (Asomtavruli and Nuskhuri)"} + Geor{"格鲁吉亚语"} + Glag{"格拉哥里语"} + Hans{"简体中文"} + Hant{"繁体中文"} + Hmng{"杨松录苗文"} + Hrkt{"片假名或平假名"} + Hung{"古匈牙利语"} + Inds{"古希腊哈拉潘"} + Java{"爪哇语"} + Kali{"克耶李文字"} + Khar{"卡罗须提文"} + Latf{"拉丁文(哥特式字体变体)"} + Latg{"拉丁文(盖尔语变体)"} + Lepc{"雷布查语"} + Lina{"线形文字 A"} + Linb{"线形文字 B"} + Mand{"阿拉米语"} + Maya{"玛雅圣符文"} + Mero{"麦若提克文"} + Nkoo{"N’Ko(西非书面语言)"} + Orkh{"鄂尔浑文"} + Perm{"古彼尔姆诸语"} + Phag{"八思巴文"} + Phnx{"腓尼基语"} + Plrd{"波拉德音标文字"} + Qaai{"遗传学术语"} + Roro{"朗格朗格文"} + Runr{"古代北欧文"} + Sara{"沙拉堤文"} + Sylo{"Syloti Nagri 书写体"} + } + Variants{ + 1901{"传统德语拼字学"} + 1996{"1996 年的德语拼字学"} + POLYTONI{"多音"} + REVISED{"已修订的拼字学"} + SAAHO{"萨霍"} + } + Version{"1.35"} + calendar{ + gregorian{ + fields{ + day{ + dn{"日"} + } + dayperiod{ + dn{"上午/下午"} + } + era{ + dn{"时期"} + } + hour{ + dn{"小时"} + } + minute{ + dn{"分钟"} + } + month{ + dn{"月"} + } + second{ + dn{"秒钟"} + } + week{ + dn{"周"} + } + weekday{ + dn{"周天"} + } + year{ + dn{"年"} + } + zone{ + dn{"区域"} + } + } + } + } + zoneStrings{ + "Africa:Casablanca"{ + ec{"Casablanca"} + ld{"格林尼治夏令时间"} + ls{"格林尼治标准时间"} + sd{"GDT"} + ss{"格林尼治标准时间"} + } + "America:Adak"{ + ec{"艾德克"} + } + "America:Chicago"{ + ec{"Chicago"} + ld{"中部夏令时间"} + ls{"中部标准时间"} + } + "America:Coral_Harbour"{ + ec{"珊瑚港"} + } + "America:Danmarkshavn"{ + ec{"Danmarkshavn(格陵兰东北城市)"} + } + "America:Eirunepe"{ + ec{"依伦尼贝"} + } + "America:Godthab"{ + ec{"戈特霍布"} + } + "America:Indiana:Petersburg"{ + ec{"彼得斯堡"} + } + "America:Indiana:Vevay"{ + ec{"维维市(印第安纳州)"} + } + "America:Indiana:Vincennes"{ + ec{"温森斯"} + } + "America:Indianapolis"{ + ec{"Indianapolis"} + ld{"东部夏令时间"} + sd{"EDT"} + ss{"东部标准时间"} + } + "America:Iqaluit"{ + ec{"伊魁鲁伊特"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + sd{"太平洋夏令时间"} + ss{"太平洋标准时间"} + } + "America:Louisville"{ + ec{"路易斯维尔"} + } + "America:Moncton"{ + ec{"蒙克顿"} + } + "America:Nome"{ + ec{"诺姆"} + } + "America:Noronha"{ + ec{"洛(诺)罗尼亚"} + } + "America:North_Dakota:Center"{ + ec{"北达科他"} + } + "America:Pangnirtung"{ + ec{"潘尼尔东"} + } + "America:Rainy_River"{ + ec{"雨河"} + } + "Antarctica:Casey"{ + ec{"卡塞"} + } + "Australia:Currie"{ + ec{"库利"} + } + } } diff --git a/icuSources/data/locales/zh_Hans_CN.txt b/icuSources/data/locales/zh_Hans_CN.txt index 8045609a..956e2344 100644 --- a/icuSources/data/locales/zh_Hans_CN.txt +++ b/icuSources/data/locales/zh_Hans_CN.txt @@ -1,32 +1,66 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_Hans_CN.xml +// * Source File:/common/main/zh_Hans_CN.xml // * // *************************************************************************** zh_Hans_CN{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.27"} calendar{ gregorian{ - DateTimePatterns{ - "ahh'时'mm'分'ss'秒' z", - "ahh'时'mm'分'ss'秒'", - "ahh:mm:ss", - "ah:mm", - "yyyy'年'M'月'd'日'EEEE", - "yyyy'年'M'月'd'日'", - "yyyy-M-d", - "yy-M-d", - "{1} {0}", + DateTimeElements:intvector{ + 1, + 1, } } } + zoneStrings{ + "Asia:Kamchatka"{ + ec{"堪察加"} + } + "Asia:Novosibirsk"{ + ec{"诺沃西比尔斯克"} + } + "Asia:Oral"{ + ec{"乌拉尔"} + } + "Asia:Sakhalin"{ + ec{"萨哈林"} + } + "Asia:Shanghai"{ + ec{"Shanghai"} + ld{"中国夏令时间"} + } + "Asia:Tokyo"{ + ec{"Tokyo"} + ld{"日本夏令时间"} + } + "Atlantic:Canary"{ + ec{"加那利"} + } + "Atlantic:Madeira"{ + ec{"马德拉"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"夏威夷夏令时间"} + } + "Pacific:Kiritimati"{ + ec{"基里巴斯(圣诞岛)"} + } + "Pacific:Kosrae"{ + ec{"库赛埃"} + } + "Pacific:Kwajalein"{ + ec{"夸贾林"} + } + } } diff --git a/icuSources/data/locales/zh_Hans_SG.txt b/icuSources/data/locales/zh_Hans_SG.txt index 89a46c25..014b5a77 100644 --- a/icuSources/data/locales/zh_Hans_SG.txt +++ b/icuSources/data/locales/zh_Hans_SG.txt @@ -1,45 +1,48 @@ -// *************************************************************************** -// * -// * Copyright (C) 2004 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_Hans_SG.xml -// * -// *************************************************************************** -zh_Hans_SG{ - Countries{ - AU{"澳洲"} - CZ{"捷克"} - ID{"印尼"} - KR{"南韩"} - MK{"马其顿"} - NZ{"纽西兰"} - SA{"沙地阿拉伯"} - } - Languages{ - root{"根 源"} - sh{"塞尔维亚克罗地亚文"} - } - NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", - "#,##0%", - "#E0", - } - Version{"1.2"} - calendar{ - gregorian{ - DateTimePatterns{ - "a hh:mm:ss", - "a hh:mm:ss", - "a hh:mm", - "a hh:mm", - "dd MMMM yyyy", - "dd MMM yyyy", - "dd-MMM-yy", - "dd/MM/yy", - "{1} {0}", - } - } - } -} +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/common/main/zh_Hans_SG.xml +// * +// *************************************************************************** +zh_Hans_SG{ + Countries{ + AU{"澳洲"} + CZ{"捷克"} + ID{"印尼"} + KR{"南韩"} + NZ{"纽西兰"} + SA{"沙地阿拉伯"} + } + Languages{ + root{"根 源"} + sh{"塞尔维亚克罗地亚文"} + } + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.32"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + DateTimePatterns{ + "a hh:mm:ss", + "a hh:mm:ss", + "a hh:mm", + "a hh:mm", + "dd MMMM yyyy", + "dd MMM yyyy", + "dd-MMM-yy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/locales/zh_Hant.txt b/icuSources/data/locales/zh_Hant.txt index 39072a1c..37d7b185 100644 --- a/icuSources/data/locales/zh_Hant.txt +++ b/icuSources/data/locales/zh_Hant.txt @@ -1,2186 +1,2294 @@ -// *************************************************************************** -// * -// * Copyright (C) 2005 International Business Machines -// * Corporation and others. All Rights Reserved. -// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_Hant.xml -// * -// *************************************************************************** -/** - * ICU source: ../../../locale/icu/main/zh_Hant.xml - */ -zh_Hant{ - Countries{ - AD{"安道爾"} - AE{"阿拉伯聯合大公國"} - AG{"安地卡及巴布達"} - AI{"安圭拉島"} - AL{"阿爾巴尼亞"} - AM{"亞美尼亞"} - AN{"荷屬安地列斯"} - AQ{"南極洲"} - AS{"美屬薩摩亞群島"} - AT{"奧地利"} - AU{"澳洲"} - AW{"阿路巴"} - AZ{"亞塞拜然"} - BA{"波士尼亞與赫塞格維納"} - BB{"巴貝多"} - BD{"孟加拉"} - BE{"比利時"} - BF{"布基納法索"} - BG{"保加利亞"} - BI{"浦隆地"} - BJ{"貝南"} - BM{"百慕達"} - BN{"汶萊"} - BO{"玻利維亞"} - BS{"巴哈馬"} - BV{"布威島"} - BW{"波札那"} - BY{"白俄羅斯"} - BZ{"貝里斯"} - CC{"可可斯群島"} - CD{"剛果民主共和國"} - CF{"中非共和國"} - CG{"剛果"} - CI{"科特迪瓦"} - CK{"庫克群島"} - CM{"喀麥隆"} - CN{"中華人民共和國"} - CO{"哥倫比亞"} - CR{"哥斯大黎加"} - CV{"維德角"} - CX{"聖誕島"} - CY{"賽普勒斯"} - CZ{"捷克共和國"} - DE{"德國"} - DJ{"吉布地"} - DK{"丹麥"} - DM{"多明尼加"} - DO{"多明尼加共和國"} - DZ{"阿爾及利亞"} - EC{"厄瓜多爾"} - EE{"愛沙尼亞"} - ER{"厄利垂亞"} - ET{"衣索比亞"} - FI{"芬蘭"} - FJ{"斐濟"} - FK{"福克蘭群島"} - FM{"密克羅尼西亞群島"} - FO{"法羅群島"} - FR{"法國"} - GA{"加彭"} - GB{"英國"} - GD{"格瑞納達"} - GE{"喬治亞共和國"} - GF{"法屬圭亞那"} - GH{"迦納"} - GI{"直布羅陀"} - GL{"格陵蘭"} - GM{"甘比亞"} - GN{"幾內亞"} - GP{"哥德普洛"} - GQ{"赤道幾內亞"} - GR{"希臘"} - GS{"南喬治亞與南三明治群島"} - GT{"瓜地馬拉"} - GU{"關島"} - GW{"幾內亞比索"} - GY{"蓋亞納"} - HK{"中華人民共和國香港特別行政區"} - HM{"赫德與麥克當諾群島"} - HN{"宏都拉斯"} - HR{"克羅埃西亞"} - ID{"印尼"} - IE{"愛爾蘭"} - IO{"英屬印度洋領土"} - IS{"冰島"} - IT{"義大利"} - JM{"牙買加"} - JO{"約旦"} - KE{"肯亞"} - KG{"吉爾吉斯"} - KH{"高棉"} - KI{"吉里巴斯"} - KM{"科摩羅群島"} - KN{"聖克里斯多福及尼維斯"} - KP{"北韓"} - KR{"南韓"} - KY{"開曼群島"} - KZ{"哈薩克"} - LA{"寮國"} - LC{"聖露西亞"} - LI{"列支敦斯登"} - LK{"斯里蘭卡"} - LR{"賴比瑞亞"} - LS{"賴索扥"} - LU{"盧森堡"} - LV{"拉脫維亞"} - LY{"利比亞"} - MC{"摩納哥"} - MD{"摩爾多瓦"} - MG{"馬達加斯加"} - MH{"馬紹爾群島"} - MK{"馬其頓"} - ML{"馬利"} - MM{"緬甸"} - MO{"中華人民共和國澳門特別行政區"} - MP{"北馬里安納"} - MQ{"馬丁尼克島"} - MR{"茅利塔尼亞"} - MS{"蒙特色拉特島"} - MT{"馬爾他"} - MU{"模里西斯"} - MV{"馬爾地夫"} - MW{"馬拉威"} - MY{"馬來西亞"} - MZ{"莫三比克"} - NA{"納米比亞"} - NC{"新喀里多尼亞群島"} - NE{"尼日"} - NF{"諾福克島"} - NG{"奈及利亞"} - NL{"荷蘭"} - NP{"尼泊爾"} - NR{"諾魯"} - NU{"紐威島"} - NZ{"紐西蘭"} - OM{"阿曼王國"} - PA{"巴拿馬"} - PE{"秘魯"} - PF{"法屬玻里尼西亞"} - PG{"巴布亞紐幾內亞"} - PH{"菲律賓"} - PL{"波蘭"} - PM{"聖彼德與密啟崙"} - PN{"皮特康"} - PR{"玻多黎克"} - PS{"巴勒斯坦"} - PW{"帛琉"} - QA{"卡達"} - RE{"留尼旺"} - RO{"羅馬尼亞"} - RU{"俄羅斯"} - RW{"盧安達"} - SA{"沙烏地阿拉伯"} - SB{"索羅門群島"} - SC{"塞席爾"} - SD{"蘇丹"} - SH{"聖赫勒拿島"} - SI{"斯洛維尼亞"} - SJ{"冷岸及央麥恩群島"} - SL{"獅子山"} - SM{"聖馬利諾"} - SN{"塞內加爾"} - SO{"索馬利亞"} - SP{"塞爾維亞"} - SR{"蘇利南"} - ST{"聖多美及普林西比"} - SV{"薩爾瓦多"} - SY{"敘利亞"} - SZ{"史瓦濟蘭"} - TC{"土克斯及開科斯群島"} - TD{"查德"} - TF{"法國南屬地"} - TG{"多哥共和國"} - TH{"泰國"} - TJ{"塔吉克"} - TK{"托克勞群島"} - TL{"東帝文"} - TM{"土庫曼"} - TN{"突尼西亞"} - TO{"東加"} - TT{"千里達及托巴哥"} - TV{"吐瓦魯"} - TW{"臺灣"} - TZ{"坦尚尼亞"} - UA{"烏克蘭"} - UG{"烏干達"} - UM{"美屬邊疆群島"} - US{"美國"} - UY{"烏拉圭"} - UZ{"烏茲別克"} - VA{"梵帝岡"} - VC{"聖文森及格瑞那丁"} - VE{"委內瑞拉"} - VG{"英屬維爾京群島"} - VI{"美屬維爾京群島"} - VU{"萬那杜"} - WF{"瓦利斯和福杜納群島"} - WS{"薩摩亞群島"} - YE{"葉門"} - YT{"馬約特"} - ZM{"尚比亞"} - ZW{"辛巴威"} - } - Currencies{ - ADD{ - "ADD", - "安道爾第納爾", - } - ADP{ - "ADP", - "安道爾陪士特", - } - AED{ - "AED", - "阿拉伯聯合大公國迪爾汗", - } - AIF{ - "AIF", - "阿法爾和伊薩法郎", - } - ALK{ - "ALK", - "阿爾巴尼亞列克 (1946-1961)", - } - ALL{ - "ALL", - "阿爾巴尼亞列克", - } - ALV{ - "ALV", - "阿爾巴尼亞列克幣", - } - ALX{ - "ALX", - "阿爾巴尼亞元外匯券", - } - AMD{ - "AMD", - "亞美尼亞德拉姆", - } - ANG{ - "ANG", - "荷蘭 安梯蘭 盾", - } - AOA{ - "AOA", - "安哥拉寬扎", - } - AOK{ - "AOK", - "安哥拉寬扎(1977-1990)", - } - AON{ - "AON", - "安哥拉新寬扎 (1990-2000)", - } - AOR{ - "AOR", - "安哥拉新寬扎 Reajustado (1995-1999)", - } - AOS{ - "AOS", - "安哥拉埃斯庫多", - } - ARA{ - "ARA", - "阿根廷奧斯特納爾", - } - ARM{ - "ARM", - "阿根廷披索 Moneda Nacional", - } - ARP{ - "ARP", - "阿根廷披索(1983-1985)", - } - ARS{ - "ARS", - "阿根廷披索", - } - ATS{ - "ATS", - "奧地利先令", - } - AUD{ - "AUD", - "澳幣", - } - AUP{ - "AUP", - "澳大利亞鎊", - } - AWG{ - "AWG", - "阿魯巴盾", - } - AZM{ - "AZM", - "阿塞拜彊馬特納", - } - BAD{ - "BAD", - "波士尼亞-黑塞哥維那第納爾", - } - BAM{ - "BAM", - "波士尼亞-黑塞哥維那可轉換馬克", - } - BAN{ - "BAN", - "波士尼亞-黑塞哥維那新第納爾", - } - BBD{ - "BBD", - "巴貝多元", - } - BDT{ - "BDT", - "孟加拉塔卡", - } - BEC{ - "BEC", - "比利時法郎 (可轉換)", - } - BEF{ - "BEF", - "比利時法郎", - } - BEL{ - "BEL", - "比利時法郎 (金融)", - } - BGL{ - "BGL", - "保加利亞硬列弗", - } - BGM{ - "BGM", - "保加利亞 社會主義列弗", - } - BGN{ - "BGN", - "保加利亞新列弗", - } - BGO{ - "BGO", - "保加利亞列弗 (1879-1952)", - } - BGX{ - "BGX", - "保加利亞列弗外匯券", - } - BHD{ - "BHD", - "巴林第納爾", - } - BIF{ - "BIF", - "蒲隆地法郎", - } - BMD{ - "BMD", - "百慕達幣", - } - BMP{ - "BMP", - "百慕達鎊", - } - BND{ - "BND", - "汶萊元", - } - BOB{ - "BOB", - "玻利維亞貨幣單位", - } - BOL{ - "BOL", - "玻利維亞舊貨幣單位 (1863-1962)", - } - BOP{ - "BOP", - "玻利維亞披索", - } - BOV{ - "BOV", - "玻利維亞 幕多", - } - BRB{ - "BRB", - "巴西克魯薩多 農瓦 (1967-1986)", - } - BRC{ - "BRC", - "巴西克魯賽羅 (1986-1989)", - } - BRE{ - "BRE", - "巴西克魯賽羅 (1990-1993)", - } - BRL{ - "BRL", - "巴西里拉", - } - BRN{ - "BRN", - "巴西 克如爾達 農瓦", - } - BRR{ - "BRR", - "巴西克魯賽羅", - } - BRZ{ - "BRZ", - "巴西克魯賽羅 (1942-1967)", - } - BSD{ - "BSD", - "巴哈馬元", - } - BSP{ - "BSP", - "巴哈馬鎊", - } - BTR{ - "BTR", - "不丹盧布", - } - BUK{ - "BUK", - "緬甸元", - } - BUR{ - "BUR", - "緬甸盧布", - } - BWP{ - "BWP", - "波札那 - 普拉", - } - BYB{ - "BYB", - "白俄羅斯新盧布 (1994-1999)", - } - BYL{ - "BYL", - "白俄羅斯盧布 (1992-1994)", - } - BYR{ - "BYR", - "白俄羅斯盧布", - } - BZD{ - "BZD", - "伯利茲元", - } - BZH{ - "BZH", - "英國的洪都拉斯元r", - } - CAD{ - "CAD", - "加幣", - } - CDF{ - "CDF", - "剛果法郎", - } - CDG{ - "CDG", - "剛果共和國法郎", - } - CDL{ - "CDL", - "剛果扎伊爾", - } - CFF{ - "CFF", - "中非共和國西非法郎", - } - CKD{ - "CKD", - "庫克群島元", - } - CLC{ - "CLC", - "智利 康導", - } - CLE{ - "CLE", - "智利埃斯庫多", - } - CLF{ - "CLF", - "卡林油達佛曼跎", - } - CLP{ - "CLP", - "智利披索", - } - CMF{ - "CMF", - "卡麥隆西非法郎", - } - CNP{ - "CNP", - "中國人民幣元", - } - CNX{ - "CNX", - "中國美元外匯券", - } - CNY{ - "CNY", - "人民幣", - } - COB{ - "COB", - "哥倫比亞披索鈔", - } - COF{ - "COF", - "剛果西非法郎", - } - COP{ - "COP", - "哥倫比亞披索", - } - CRC{ - "CRC", - "哥斯大黎加科郎", - } - CSC{ - "CSC", - "捷克克朗", - } - CSK{ - "CSK", - "捷克斯洛伐克硬克朗", - } - CUP{ - "CUP", - "古巴披索", - } - CUX{ - "CUX", - "古巴人外匯券", - } - CVE{ - "CVE", - "維德角埃斯庫多", - } - CWG{ - "CWG", - "庫拉克 盾", - } - CYP{ - "CYP", - "賽浦路斯鎊", - } - CZK{ - "CZK", - "捷克克朗", - } - DDM{ - "DDM", - "東德東德馬克", - } - DEM{ - "DEM", - "德國馬克", - } - DES{ - "DES", - "德國 蘇馬克Sperrmark", - } - DJF{ - "DJF", - "吉布地法郎", - } - DKK{ - "DKK", - "丹麥克羅納", - } - DOP{ - "DOP", - "多明尼加披索", - } - DZD{ - "DZD", - "阿爾及利亞第納爾", - } - DZF{ - "DZF", - "阿爾及利亞新法郎", - } - DZG{ - "DZG", - "阿爾及利亞法郎 Germinal", - } - ECS{ - "ECS", - "厄瓜多蘇克雷", - } - ECV{ - "ECV", - "厄瓜多爾由里達瓦康斯坦 (UVC)", - } - EEK{ - "EEK", - "愛沙尼亞克朗", - } - EGP{ - "EGP", - "埃及鎊", - } - ERN{ - "ERN", - "厄立特里亞納克法", - } - ESP{ - "ESP", - "西班牙陪士特", - } - ETB{ - "ETB", - "衣索比亞比爾", - } - ETD{ - "ETD", - "埃賽俄比亞元", - } - EUR{ - "EUR", - "歐元", - } - FIM{ - "FIM", - "芬蘭馬克", - } - FIN{ - "FIN", - "芬蘭馬克 (1860-1962)", - } - FJD{ - "FJD", - "斐濟元", - } - FJP{ - "FJP", - "斐濟鎊", - } - FKP{ - "FKP", - "福克蘭群島鎊", - } - FOK{ - "FOK", - "法羅島克朗", - } - FRF{ - "FRF", - "法國法郎", - } - FRG{ - "FRG", - "法國法郎 捷米那/龐加萊法郎", - } - GAF{ - "GAF", - "加蓬西非法郎", - } - GBP{ - "GBP", - "英鎊", - } - GEK{ - "GEK", - "喬治 庫旁 拉里", - } - GEL{ - "GEL", - "喬治拉里", - } - GHC{ - "GHC", - "迦納仙蔕", - } - GHO{ - "GHO", - "迦納舊仙蔕", - } - GHP{ - "GHP", - "迦納鎊", - } - GHR{ - "GHR", - "迦納重新估价後的仙蔕", - } - GIP{ - "GIP", - "直布羅陀鎊", - } - GLK{ - "GLK", - "格陵蘭克羅鈉", - } - GMD{ - "GMD", - "甘比亞達拉西", - } - GMP{ - "GMP", - "岡比亞鎊", - } - GNF{ - "GNF", - "幾內亞法郎", - } - GNI{ - "GNI", - "幾內亞法郎 (1960-1972)", - } - GNS{ - "GNS", - "幾內亞西里", - } - GPF{ - "GPF", - "瓜德羅普島法郎", - } - GQE{ - "GQE", - "赤道幾內亞埃奎勒", - } - GQF{ - "GQF", - "赤道幾內亞佛朗哥", - } - GQP{ - "GQP", - "赤道幾內亞比塞塔", - } - GRD{ - "GRD", - "希臘德拉克馬", - } - GRN{ - "GRN", - "希臘新德拉克馬", - } - GTQ{ - "GTQ", - "瓜地馬拉格查爾", - } - GUF{ - "GUF", - "法屬圭亞那法郎圭亞那", - } - GWE{ - "GWE", - "葡屬幾內亞埃斯庫多", - } - GWM{ - "GWM", - "葡屬幾內亞米爾里斯", - } - GWP{ - "GWP", - "幾內亞披索披索", - } - GYD{ - "GYD", - "圭亞那元", - } - HNL{ - "HNL", - "洪都拉斯倫皮拉", - } - HRD{ - "HRD", - "克羅地亞第納爾", - } - HRK{ - "HRK", - "克羅地亞庫納", - } - HUF{ - "HUF", - "匈牙利 - 福林", - } - IBP{ - "IBP", - "北愛爾蘭鎊", - } - IDG{ - "IDG", - "印度尼西亞尼可盾", - } - IDJ{ - "IDJ", - "印度尼西亞爪哇盧布", - } - IDN{ - "IDN", - "印度尼西亞新盧布", - } - IDR{ - "IDR", - "印尼 - 盧布", - } - IEP{ - "IEP", - "愛爾蘭鎊", - } - ILL{ - "ILL", - "以色列謝客爾", - } - ILP{ - "ILP", - "以色列鎊", - } - ILS{ - "ILS", - "以色列新謝克爾", - } - IMP{ - "IMP", - "曼城島英鎊", - } - INR{ - "=0#Rs.|1#Re.|1/common/main/zh_Hant.xml +// * +// *************************************************************************** +/** + * ICU source: /xml/main/zh_Hant.xml + */ +zh_Hant{ + Countries{ + 014{"東非"} + 030{"東亞"} + 035{"東南亞"} + 039{"南歐"} + 053{"澳洲與紐西蘭"} + 054{"美拉尼西亞"} + 057{"密克羅尼西亞"} + 061{"玻里尼西亞"} + 142{"亞洲"} + 145{"西亞"} + 150{"歐洲"} + 151{"東歐"} + 154{"北歐"} + 155{"西歐"} + 830{"海峽群島"} + 833{"曼島"} + AD{"安道爾"} + AE{"阿拉伯聯合大公國"} + AG{"安地卡及巴布達"} + AI{"安圭拉島"} + AL{"阿爾巴尼亞"} + AM{"亞美尼亞"} + AN{"荷屬安地列斯"} + AQ{"南極洲"} + AS{"美屬薩摩亞群島"} + AT{"奧地利"} + AU{"澳洲"} + AW{"阿路巴"} + AX{"亞蘭群島"} + AZ{"亞塞拜然"} + BA{"波士尼亞與赫塞格維納"} + BB{"巴貝多"} + BD{"孟加拉"} + BE{"比利時"} + BF{"布基納法索"} + BG{"保加利亞"} + BI{"浦隆地"} + BJ{"貝南"} + BM{"百慕達"} + BN{"汶萊"} + BO{"玻利維亞"} + BS{"巴哈馬"} + BV{"布威島"} + BW{"波札那"} + BY{"白俄羅斯"} + BZ{"貝里斯"} + CC{"可可斯群島"} + CD{"剛果民主共和國"} + CF{"中非共和國"} + CG{"剛果"} + CI{"科特迪瓦"} + CK{"庫克群島"} + CM{"喀麥隆"} + CN{"中華人民共和國"} + CO{"哥倫比亞"} + CR{"哥斯大黎加"} + CS{"塞爾維亞和蒙特尼哥羅"} + CV{"維德角"} + CX{"聖誕島"} + CY{"賽普勒斯"} + CZ{"捷克共和國"} + DE{"德國"} + DJ{"吉布地"} + DK{"丹麥"} + DM{"多明尼加"} + DO{"多明尼加共和國"} + DZ{"阿爾及利亞"} + EC{"厄瓜多爾"} + EE{"愛沙尼亞"} + ER{"厄利垂亞"} + ET{"衣索比亞"} + FI{"芬蘭"} + FJ{"斐濟"} + FK{"福克蘭群島"} + FM{"密克羅尼西亞群島"} + FO{"法羅群島"} + FR{"法國"} + GA{"加彭"} + GB{"英國"} + GD{"格瑞納達"} + GE{"喬治亞共和國"} + GF{"法屬圭亞那"} + GH{"迦納"} + GI{"直布羅陀"} + GL{"格陵蘭"} + GM{"甘比亞"} + GN{"幾內亞"} + GP{"哥德普洛"} + GQ{"赤道幾內亞"} + GR{"希臘"} + GS{"南喬治亞與南三明治群島"} + GT{"瓜地馬拉"} + GU{"關島"} + GW{"幾內亞比索"} + GY{"蓋亞納"} + HK{"中華人民共和國香港特別行政區"} + HM{"赫德與麥克當諾群島"} + HN{"宏都拉斯"} + HR{"克羅埃西亞"} + ID{"印尼"} + IE{"愛爾蘭"} + IO{"英屬印度洋領土"} + IS{"冰島"} + IT{"義大利"} + JM{"牙買加"} + JO{"約旦"} + KE{"肯亞"} + KG{"吉爾吉斯"} + KH{"高棉"} + KI{"吉里巴斯"} + KM{"科摩羅群島"} + KN{"聖克里斯多福及尼維斯"} + KP{"北韓"} + KR{"南韓"} + KY{"開曼群島"} + KZ{"哈薩克"} + LA{"寮國"} + LC{"聖露西亞"} + LI{"列支敦斯登"} + LK{"斯里蘭卡"} + LR{"賴比瑞亞"} + LS{"賴索扥"} + LU{"盧森堡"} + LV{"拉脫維亞"} + LY{"利比亞"} + MC{"摩納哥"} + MD{"摩爾多瓦"} + MG{"馬達加斯加"} + MH{"馬紹爾群島"} + MK{"馬其頓"} + ML{"馬利"} + MM{"緬甸"} + MO{"中華人民共和國澳門特別行政區"} + MP{"北馬里安納"} + MQ{"馬丁尼克島"} + MR{"茅利塔尼亞"} + MS{"蒙特色拉特島"} + MT{"馬爾他"} + MU{"模里西斯"} + MV{"馬爾地夫"} + MW{"馬拉威"} + MY{"馬來西亞"} + MZ{"莫三比克"} + NA{"納米比亞"} + NC{"新喀里多尼亞群島"} + NE{"尼日"} + NF{"諾福克島"} + NG{"奈及利亞"} + NL{"荷蘭"} + NP{"尼泊爾"} + NR{"諾魯"} + NU{"紐威島"} + NZ{"紐西蘭"} + OM{"阿曼王國"} + PA{"巴拿馬"} + PE{"秘魯"} + PF{"法屬玻里尼西亞"} + PG{"巴布亞紐幾內亞"} + PH{"菲律賓"} + PL{"波蘭"} + PM{"聖彼德與密啟崙"} + PN{"皮特康"} + PR{"玻多黎克"} + PS{"巴勒斯坦"} + PW{"帛琉"} + QA{"卡達"} + QO{"大洋洲邊疆群島"} + RE{"留尼旺"} + RO{"羅馬尼亞"} + RU{"俄羅斯"} + RW{"盧安達"} + SA{"沙烏地阿拉伯"} + SB{"索羅門群島"} + SC{"塞席爾"} + SD{"蘇丹"} + SH{"聖赫勒拿島"} + SI{"斯洛維尼亞"} + SJ{"冷岸及央麥恩群島"} + SL{"獅子山"} + SM{"聖馬利諾"} + SN{"塞內加爾"} + SO{"索馬利亞"} + SR{"蘇利南"} + ST{"聖多美及普林西比"} + SV{"薩爾瓦多"} + SY{"敘利亞"} + SZ{"史瓦濟蘭"} + TC{"土克斯及開科斯群島"} + TD{"查德"} + TF{"法國南屬地"} + TG{"多哥共和國"} + TH{"泰國"} + TJ{"塔吉克"} + TK{"托克勞群島"} + TL{"東帝文"} + TM{"土庫曼"} + TN{"突尼西亞"} + TO{"東加"} + TT{"千里達及托巴哥"} + TV{"吐瓦魯"} + TW{"臺灣"} + TZ{"坦尚尼亞"} + UA{"烏克蘭"} + UG{"烏干達"} + UM{"美屬邊疆群島"} + US{"美國"} + UY{"烏拉圭"} + UZ{"烏茲別克"} + VA{"梵帝岡"} + VC{"聖文森及格瑞那丁"} + VE{"委內瑞拉"} + VG{"英屬維爾京群島"} + VI{"美屬維爾京群島"} + VU{"萬那杜"} + WF{"瓦利斯和福杜納群島"} + WS{"薩摩亞群島"} + YE{"葉門"} + YT{"馬約特"} + ZM{"尚比亞"} + ZW{"辛巴威"} + } + Currencies{ + ADP{ + "ADP", + "安道爾陪士特", + } + AED{ + "AED", + "阿拉伯聯合大公國迪爾汗", + } + ALL{ + "ALL", + "阿爾巴尼亞列克", + } + AMD{ + "AMD", + "亞美尼亞德拉姆", + } + ANG{ + "ANG", + "荷蘭 安梯蘭 盾", + } + AOA{ + "AOA", + "安哥拉寬扎", + } + AOK{ + "AOK", + "安哥拉寬扎(1977-1990)", + } + AON{ + "AON", + "安哥拉新寬扎 (1990-2000)", + } + AOR{ + "AOR", + "安哥拉新寬扎 Reajustado (1995-1999)", + } + ARA{ + "ARA", + "阿根廷奧斯特納爾", + } + ARP{ + "ARP", + "阿根廷披索(1983-1985)", + } + ARS{ + "ARS", + "阿根廷披索", + } + ATS{ + "ATS", + "奧地利先令", + } + AUD{ + "AUD", + "澳幣", + } + AWG{ + "AWG", + "阿魯巴盾", + } + AZM{ + "AZM", + "阿塞拜彊馬特納", + } + BAD{ + "BAD", + "波士尼亞-黑塞哥維那第納爾", + } + BAM{ + "BAM", + "波士尼亞-黑塞哥維那可轉換馬克", + } + BBD{ + "BBD", + "巴貝多元", + } + BDT{ + "BDT", + "孟加拉塔卡", + } + BEC{ + "BEC", + "比利時法郎 (可轉換)", + } + BEF{ + "BEF", + "比利時法郎", + } + BEL{ + "BEL", + "比利時法郎 (金融)", + } + BGL{ + "BGL", + "保加利亞硬列弗", + } + BGN{ + "BGN", + "保加利亞新列弗", + } + BHD{ + "BHD", + "巴林第納爾", + } + BIF{ + "BIF", + "蒲隆地法郎", + } + BMD{ + "BMD", + "百慕達幣", + } + BND{ + "BND", + "汶萊元", + } + BOB{ + "BOB", + "玻利維亞貨幣單位", + } + BOP{ + "BOP", + "玻利維亞披索", + } + BOV{ + "BOV", + "玻利維亞 幕多", + } + BRB{ + "BRB", + "巴西克魯薩多 農瓦 (1967-1986)", + } + BRC{ + "BRC", + "巴西克魯賽羅 (1986-1989)", + } + BRE{ + "BRE", + "巴西克魯賽羅 (1990-1993)", + } + BRL{ + "BRL", + "巴西里拉", + } + BRN{ + "BRN", + "巴西 克如爾達 農瓦", + } + BRR{ + "BRR", + "巴西克魯賽羅", + } + BSD{ + "BSD", + "巴哈馬元", + } + BUK{ + "BUK", + "緬甸元 BUK", + } + BWP{ + "BWP", + "波札那 - 普拉", + } + BYB{ + "BYB", + "白俄羅斯新盧布 (1994-1999)", + } + BYR{ + "BYR", + "白俄羅斯盧布", + } + BZD{ + "BZD", + "伯利茲元", + } + CAD{ + "CAD", + "加幣", + } + CDF{ + "CDF", + "剛果法郎", + } + CLF{ + "CLF", + "卡林油達佛曼跎", + } + CLP{ + "CLP", + "智利披索", + } + CNY{ + "ï¿¥", + "人民幣", + } + COP{ + "COP", + "哥倫比亞披索", + } + CRC{ + "CRC", + "哥斯大黎加科郎", + } + CSK{ + "CSK", + "捷克斯洛伐克硬克朗", + } + CUP{ + "CUP", + "古巴披索", + } + CVE{ + "CVE", + "維德角埃斯庫多", + } + CYP{ + "CYP", + "賽浦路斯鎊", + } + CZK{ + "CZK", + "捷克克朗", + } + DDM{ + "DDM", + "東德東德馬克", + } + DEM{ + "DEM", + "德國馬克", + } + DJF{ + "DJF", + "吉布地法郎", + } + DKK{ + "DKK", + "丹麥克羅納", + } + DOP{ + "DOP", + "多明尼加披索", + } + DZD{ + "DZD", + "阿爾及利亞第納爾", + } + ECS{ + "ECS", + "厄瓜多蘇克雷", + } + ECV{ + "ECV", + "厄瓜多爾由里達瓦康斯坦 (UVC)", + } + EEK{ + "EEK", + "愛沙尼亞克朗", + } + EGP{ + "EGP", + "埃及鎊", + } + ERN{ + "ERN", + "厄立特里亞納克法", + } + ESP{ + "ESP", + "西班牙陪士特", + } + ETB{ + "ETB", + "衣索比亞比爾", + } + EUR{ + "EUR", + "歐元", + } + FIM{ + "FIM", + "芬蘭馬克", + } + FJD{ + "FJD", + "斐濟元", + } + FKP{ + "FKP", + "福克蘭群島鎊", + } + FRF{ + "FRF", + "法國法郎", + } + GBP{ + "GBP", + "英鎊", + } + GEK{ + "GEK", + "喬治 庫旁 拉里", + } + GEL{ + "GEL", + "喬治拉里", + } + GHC{ + "GHC", + "迦納仙蔕", + } + GIP{ + "GIP", + "直布羅陀鎊", + } + GMD{ + "GMD", + "甘比亞達拉西", + } + GNF{ + "GNF", + "幾內亞法郎", + } + GNS{ + "GNS", + "幾內亞西里", + } + GQE{ + "GQE", + "赤道幾內亞埃奎勒", + } + GRD{ + "GRD", + "希臘德拉克馬", + } + GTQ{ + "GTQ", + "瓜地馬拉格查爾", + } + GWE{ + "GWE", + "葡屬幾內亞埃斯庫多", + } + GWP{ + "GWP", + "幾內亞披索披索", + } + GYD{ + "GYD", + "圭亞那元", + } + HNL{ + "HNL", + "洪都拉斯倫皮拉", + } + HRD{ + "HRD", + "克羅地亞第納爾", + } + HRK{ + "HRK", + "克羅地亞庫納", + } + HUF{ + "HUF", + "匈牙利 - 福林", + } + IDR{ + "IDR", + "印尼 - 盧布", + } + IEP{ + "IEP", + "愛爾蘭鎊", + } + ILP{ + "ILP", + "以色列鎊", + } + ILS{ + "ILS", + "以色列新謝克爾", + } + INR{ + "=0#Rs.|1#Re.|1/common/main/zh_Hant_HK.xml // * // *************************************************************************** zh_Hant_HK{ @@ -11,14 +11,18 @@ zh_Hant_HK{ MO{"澳門特別行政區"} } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.40"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "ahh'時'mm'分'ss'秒' z", "ahh'時'mm'分'ss'秒'", @@ -50,4 +54,68 @@ zh_Hant_HK{ } } } + delimiters{ + alternateQuotationEnd{"』"} + alternateQuotationStart{"『"} + quotationEnd{"」"} + quotationStart{"「"} + } + zoneStrings{ + "Africa:Casablanca"{ + ec{"Casablanca"} + ld{"格林威治夏令時間"} + } + "America:Anchorage"{ + ec{"Anchorage"} + ld{"阿拉斯加夏令時間"} + } + "America:Chicago"{ + ec{"Chicago"} + ld{"中部夏令時間"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"大西洋夏令時間"} + } + "America:Indianapolis"{ + ec{"Indianapolis"} + ld{"東部夏令時間"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + ld{"太平洋夏令時間"} + } + "America:New_York"{ + ec{"New York"} + ld{"東部夏令時間"} + } + "America:St_Johns"{ + ec{"St Johns"} + ld{"紐芬蘭夏令時間"} + } + "Asia:Jerusalem"{ + ec{"Jerusalem"} + ld{"以色列夏令時間"} + } + "Asia:Shanghai"{ + ec{"Shanghai"} + ld{"中國夏令時間"} + } + "Asia:Tokyo"{ + ec{"Tokyo"} + ld{"日本夏令時間"} + } + "Europe:Bucharest"{ + ec{"Bucharest"} + ld{"東歐夏令時間"} + } + "Europe:Paris"{ + ec{"Paris"} + ld{"中歐夏令時間"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"夏威夷夏令時間"} + } + } } diff --git a/icuSources/data/locales/zh_Hant_MO.txt b/icuSources/data/locales/zh_Hant_MO.txt index 43f0e1b8..f70929d0 100644 --- a/icuSources/data/locales/zh_Hant_MO.txt +++ b/icuSources/data/locales/zh_Hant_MO.txt @@ -1,9 +1,9 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_Hant_MO.xml +// * Source File:/common/main/zh_Hant_MO.xml // * // *************************************************************************** zh_Hant_MO{ @@ -11,14 +11,18 @@ zh_Hant_MO{ MO{"澳門特別行政區"} } NumberPatterns{ - "#,##0.###;-#,##0.###", + "#,##0.###", "¤#,##0.00;(¤#,##0.00)", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.36"} calendar{ gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } DateTimePatterns{ "ahh'時'mm'分'ss'秒' z", "ahh'時'mm'分'ss'秒'", @@ -50,4 +54,68 @@ zh_Hant_MO{ } } } + delimiters{ + alternateQuotationEnd{"』"} + alternateQuotationStart{"『"} + quotationEnd{"」"} + quotationStart{"「"} + } + zoneStrings{ + "Africa:Casablanca"{ + ec{"Casablanca"} + ld{"格林威治夏令時間"} + } + "America:Anchorage"{ + ec{"Anchorage"} + ld{"阿拉斯加夏令時間"} + } + "America:Chicago"{ + ec{"Chicago"} + ld{"中部夏令時間"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"大西洋夏令時間"} + } + "America:Indianapolis"{ + ec{"Indianapolis"} + ld{"東部夏令時間"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + ld{"太平洋夏令時間"} + } + "America:New_York"{ + ec{"New York"} + ld{"東部夏令時間"} + } + "America:St_Johns"{ + ec{"St Johns"} + ld{"紐芬蘭夏令時間"} + } + "Asia:Jerusalem"{ + ec{"Jerusalem"} + ld{"以色列夏令時間"} + } + "Asia:Shanghai"{ + ec{"Shanghai"} + ld{"中國夏令時間"} + } + "Asia:Tokyo"{ + ec{"Tokyo"} + ld{"日本夏令時間"} + } + "Europe:Bucharest"{ + ec{"Bucharest"} + ld{"東歐夏令時間"} + } + "Europe:Paris"{ + ec{"Paris"} + ld{"中歐夏令時間"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"夏威夷夏令時間"} + } + } } diff --git a/icuSources/data/locales/zh_Hant_TW.txt b/icuSources/data/locales/zh_Hant_TW.txt index 7a49c7ca..fbfad6c7 100644 --- a/icuSources/data/locales/zh_Hant_TW.txt +++ b/icuSources/data/locales/zh_Hant_TW.txt @@ -1,17 +1,89 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_Hant_TW.xml +// * Source File:/common/main/zh_Hant_TW.xml // * // *************************************************************************** zh_Hant_TW{ NumberPatterns{ - "#,##0.###;-#,##0.###", - "¤#,##0.00;-¤#,##0.00", + "#,##0.###", + "¤#,##0.00", "#,##0%", "#E0", } - Version{"1.2"} + Version{"1.28"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } + delimiters{ + alternateQuotationEnd{"』"} + alternateQuotationStart{"『"} + quotationEnd{"」"} + quotationStart{"「"} + } + zoneStrings{ + "Africa:Casablanca"{ + ec{"Casablanca"} + ld{"格林威治夏令時間"} + } + "America:Anchorage"{ + ec{"Anchorage"} + ld{"阿拉斯加夏令時間"} + } + "America:Chicago"{ + ec{"Chicago"} + ld{"中部夏令時間"} + } + "America:Halifax"{ + ec{"Halifax"} + ld{"大西洋夏令時間"} + } + "America:Indianapolis"{ + ec{"Indianapolis"} + ld{"東部夏令時間"} + } + "America:Los_Angeles"{ + ec{"Los Angeles"} + ld{"太平洋夏令時間"} + } + "America:New_York"{ + ec{"New York"} + ld{"東部夏令時間"} + } + "America:St_Johns"{ + ec{"St Johns"} + ld{"紐芬蘭夏令時間"} + } + "Asia:Jerusalem"{ + ec{"Jerusalem"} + ld{"以色列夏令時間"} + } + "Asia:Shanghai"{ + ec{"Shanghai"} + ld{"中國夏令時間"} + } + "Asia:Tokyo"{ + ec{"Tokyo"} + ld{"日本夏令時間"} + } + "Europe:Bucharest"{ + ec{"Bucharest"} + ld{"東歐夏令時間"} + } + "Europe:Paris"{ + ec{"Paris"} + ld{"中歐夏令時間"} + } + "Pacific:Honolulu"{ + ec{"Honolulu"} + ld{"夏威夷夏令時間"} + } + } } diff --git a/icuSources/data/locales/zh_MO.txt b/icuSources/data/locales/zh_MO.txt index cd13f566..c79fc068 100644 --- a/icuSources/data/locales/zh_MO.txt +++ b/icuSources/data/locales/zh_MO.txt @@ -1,11 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_MO.xml +// * Source File:/common/main/zh_MO.xml // * // *************************************************************************** zh_MO{ "%%ALIAS"{"zh_Hant_MO"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/zh_SG.txt b/icuSources/data/locales/zh_SG.txt index 3ce0475b..11802181 100644 --- a/icuSources/data/locales/zh_SG.txt +++ b/icuSources/data/locales/zh_SG.txt @@ -1,11 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_SG.xml +// * Source File:/common/main/zh_SG.xml // * // *************************************************************************** zh_SG{ "%%ALIAS"{"zh_Hans_SG"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/locales/zh_TW.txt b/icuSources/data/locales/zh_TW.txt index 889c85d7..efd280c9 100644 --- a/icuSources/data/locales/zh_TW.txt +++ b/icuSources/data/locales/zh_TW.txt @@ -1,11 +1,19 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2006 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/zh_TW.xml +// * Source File:/common/main/zh_TW.xml // * // *************************************************************************** zh_TW{ "%%ALIAS"{"zh_Hant_TW"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 1, + 1, + } + } + } } diff --git a/icuSources/data/makedata.dsp b/icuSources/data/makedata.dsp deleted file mode 100644 index 9fe2ce25..00000000 --- a/icuSources/data/makedata.dsp +++ /dev/null @@ -1,178 +0,0 @@ -# Microsoft Developer Studio Project File - Name="makedata" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) External Target" 0x0106 - -CFG=makedata - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "makedata.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "makedata.mak" CFG="makedata - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "makedata - Win32 Release" (based on "Win32 (x86) External Target") -!MESSAGE "makedata - Win32 Debug" (based on "Win32 (x86) External Target") -!MESSAGE "makedata - Win64 Release" (based on "Win32 (x86) External Target") -!MESSAGE "makedata - Win64 Debug" (based on "Win32 (x86) External Target") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" - -!IF "$(CFG)" == "makedata - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Cmd_Line "NMAKE /f makedata.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "makedata.exe" -# PROP BASE Bsc_Name "makedata.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Cmd_Line "NMAKE /f makedata.mak icumake=$(MAKEDIR)$(ProjectDir) cfg=release" -# PROP Rebuild_Opt "clean all" -# PROP Target_File "makedata.exe" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "makedata - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Cmd_Line "NMAKE /f makedata.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "makedata.exe" -# PROP BASE Bsc_Name "makedata.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Cmd_Line "NMAKE /f makedata.mak icumake=$(MAKEDIR)$(ProjectDir) cfg=debug" -# PROP Rebuild_Opt "clean all" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "makedata - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Cmd_Line "NMAKE /f makedata.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "makedata.exe" -# PROP BASE Bsc_Name "makedata.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Cmd_Line "NMAKE /f makedata.mak icumake=$(MAKEDIR)$(ProjectDir) cfg=release" -# PROP Rebuild_Opt "clean all" -# PROP Target_File "makedata.exe" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "makedata - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Cmd_Line "NMAKE /f makedata.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "makedata.exe" -# PROP BASE Bsc_Name "makedata.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Cmd_Line "NMAKE /f makedata.mak icumake=$(MAKEDIR)$(ProjectDir) cfg=debug" -# PROP Rebuild_Opt "clean all" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "makedata - Win32 Release" -# Name "makedata - Win32 Debug" -# Name "makedata - Win64 Release" -# Name "makedata - Win64 Debug" - -!IF "$(CFG)" == "makedata - Win32 Release" - -!ELSEIF "$(CFG)" == "makedata - Win32 Debug" - -!ELSEIF "$(CFG)" == "makedata - Win64 Release" - -!ELSEIF "$(CFG)" == "makedata - Win64 Debug" - -!ENDIF - -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\makedata.mak -# PROP Intermediate_Dir ".\out\build" -# End Source File -# Begin Source File - -SOURCE=.\misc\miscfiles.mk -# End Source File -# Begin Source File - -SOURCE=.\locales\resfiles.mk -# End Source File -# Begin Source File - -SOURCE=..\test\testdata\testdata.mak -# End Source File -# Begin Source File - -SOURCE=.\translit\trnsfiles.mk -# End Source File -# Begin Source File - -SOURCE=.\mappings\ucmcore.mk -# End Source File -# Begin Source File - -SOURCE=.\mappings\ucmebcdic.mk -# End Source File -# Begin Source File - -SOURCE=.\mappings\ucmfiles.mk -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/data/makedata.mak b/icuSources/data/makedata.mak index d936d8ee..32bbc43c 100644 --- a/icuSources/data/makedata.mak +++ b/icuSources/data/makedata.mak @@ -1,5 +1,5 @@ #********************************************************************** -#* Copyright (C) 1999-2004, International Business Machines Corporation +#* Copyright (C) 1999-2006, International Business Machines Corporation #* and others. All Rights Reserved. #********************************************************************** # nmake file for creating data files on win32 @@ -10,10 +10,11 @@ ############################################################################## # Keep the following in sync with the version - see common/unicode/uversion.h -U_ICUDATA_NAME=icudt32 +U_ICUDATA_NAME=icudt36 ############################################################################## U_ICUDATA_ENDIAN_SUFFIX=l -UNICODE_VERSION=4.0.1 +UNICODE_VERSION=5.0 +ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll # ICUMAKE # Must be provided by whoever runs this makefile. @@ -26,6 +27,9 @@ UNICODE_VERSION=4.0.1 !ENDIF !MESSAGE ICU data make path is $(ICUMAKE) +# Suffixes for data files +.SUFFIXES : .ucm .cnv .dll .dat .res .txt .c + ICUOUT=$(ICUMAKE)\out # the prefix "icudt21_" for use in filenames @@ -34,7 +38,8 @@ ICUPKG=$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX) # need to nuke \\ for .NET... ICUOUT=$(ICUOUT:\\=\) -ICUBLD=$(ICUOUT)\build\$(ICUPKG) +ICUBLD=$(ICUOUT)\build +ICUBLD_PKG=$(ICUBLD)\$(ICUPKG) ICUTMP=$(ICUOUT)\tmp # ICUP @@ -51,7 +56,7 @@ ICUP=$(ICUP:\source\data\\..\..=) # The data directory in source # ICUSRCDATA=$(ICUP)\source\data -ICUSRCDATA_RELATIVE_PATH=..\..\..\ +ICUSRCDATA_RELATIVE_PATH=..\..\.. # ICUUCM # The directory that contains ucmcore.mk files along with *.ucm files @@ -117,7 +122,7 @@ TESTDATA=$(ICUP)\source\test\testdata # # TESTDATAOUT # The destination directory for the built test data .dat file -TESTDATAOUT=$(ICUP)\source\test\testdata\out\ +TESTDATAOUT=$(ICUP)\source\test\testdata\out # # TESTDATABLD @@ -141,10 +146,23 @@ PATH = $(ICUP)\bin;$(PATH) ICU_PACKAGE_MODE=-m dll !ENDIF +# If this archive exists, build from that +# instead of building everything from scratch. +ICUDATA_SOURCE_ARCHIVE=$(ICUSRCDATA)\in\$(ICUPKG).dat +!IF !EXISTS("$(ICUDATA_SOURCE_ARCHIVE)") +# Does a big endian version exist either? +ICUDATA_ARCHIVE=$(ICUSRCDATA)\in\$(U_ICUDATA_NAME)b.dat +!IF EXISTS("$(ICUDATA_ARCHIVE)") +ICUDATA_SOURCE_ARCHIVE=$(ICUTMP)\$(ICUPKG).dat +!ELSE +# Nothing was usable for input +!UNDEF ICUDATA_SOURCE_ARCHIVE +!ENDIF +!ENDIF -# Suffixes for data files -.SUFFIXES : .ucm .cnv .dll .dat .res .txt .c - +!IFDEF ICUDATA_SOURCE_ARCHIVE +!MESSAGE ICU data source archive is $(ICUDATA_SOURCE_ARCHIVE) +!ELSE # We're including a list of .ucm files. # There are several lists, they are all optional. @@ -189,18 +207,34 @@ CNV_FILES=$(UCM_SOURCE:.ucm=.cnv) !IF EXISTS("$(ICUSRCDATA)\$(ICUBRK)\brklocal.mk") !INCLUDE "$(ICUSRCDATA)\$(ICUBRK)\brklocal.mk" BRK_SOURCE=$(BRK_SOURCE) $(BRK_SOURCE_LOCAL) +BRK_CTD_SOURCE=$(BRK_CTD_SOURCE) $(BRK_CTD_SOURCE_LOCAL) +BRK_RES_SOURCE=$(BRK_RES_SOURCE) $(BRK_RES_SOURCE_LOCAL) !ELSE !MESSAGE Information: cannot find "brklocal.mk". Not building user-additional break iterator files. !ENDIF !ELSE !MESSAGE Warning: cannot find "brkfiles.mk" !ENDIF -BRK_SOURCE=char.txt title.txt word.txt $(BRK_SOURCE) # # Break iterator data files. # -BRK_FILES=$(BRK_SOURCE:.txt=.brk) +BRK_FILES=$(ICUBRK)\$(BRK_SOURCE:.txt =.brk brkitr\) +BRK_FILES=$(BRK_FILES:.txt=.brk) +BRK_FILES=$(BRK_FILES:brkitr\ =brkitr\) + +!IFDEF BRK_CTD_SOURCE +BRK_CTD_FILES = $(ICUBRK)\$(BRK_CTD_SOURCE:.txt =.ctd brkitr\) +BRK_CTD_FILES = $(BRK_CTD_FILES:.txt=.ctd) +BRK_CTD_FILES = $(BRK_CTD_FILES:brkitr\ =) +!ENDIF + +!IFDEF BRK_RES_SOURCE +BRK_RES_FILES = $(BRK_RES_SOURCE:.txt =.res brkitr\) +BRK_RES_FILES = $(BRK_RES_FILES:.txt=.res) +BRK_RES_FILES = $(ICUBRK)\root.res $(ICUBRK)\$(BRK_RES_FILES:brkitr\ =) +ALL_RES = $(ALL_RES) $(ICUBRK)\res_index.res +!ENDIF # Read list of locale resource bundle files !IF EXISTS("$(ICUSRCDATA)\$(ICULOC)\resfiles.mk") @@ -215,7 +249,11 @@ GENRB_SOURCE=$(GENRB_SOURCE) $(GENRB_SOURCE_LOCAL) !MESSAGE Warning: cannot find "resfiles.mk" !ENDIF +!IFDEF GENRB_SOURCE RB_FILES = root.res $(GENRB_ALIAS_SOURCE:.txt=.res) $(GENRB_SOURCE:.txt=.res) +ALL_RES = $(ALL_RES) res_index.res +!ENDIF + # Read list of locale resource bundle files !IF EXISTS("$(ICUSRCDATA)\$(ICUCOL)\colfiles.mk") @@ -230,10 +268,13 @@ COLLATION_SOURCE=$(COLLATION_SOURCE) $(COLLATION_SOURCE_LOCAL) !MESSAGE Warning: cannot find "colfiles.mk" !ENDIF +!IFDEF COLLATION_SOURCE COL_FILES = $(ICUCOL)\root.txt $(COLLATION_ALIAS_SOURCE) $(COLLATION_SOURCE) COL_COL_FILES = $(COL_FILES:.txt =.res coll\) COL_COL_FILES = $(COL_COL_FILES:.txt=.res) COL_COL_FILES = $(COL_COL_FILES:coll\ =) +ALL_RES = $(ALL_RES) $(ICUCOL)\res_index.res +!ENDIF # Read list of RBNF resource bundle files !IF EXISTS("$(ICUSRCDATA)\$(ICURBNF)\rbnffiles.mk") @@ -248,10 +289,13 @@ RBNF_SOURCE=$(RBNF_SOURCE) $(RBNF_SOURCE_LOCAL) !MESSAGE Warning: cannot find "rbnffiles.mk" !ENDIF +!IFDEF RBNF_SOURCE RBNF_FILES = $(ICURBNF)\root.txt $(RBNF_ALIAS_SOURCE) $(RBNF_SOURCE) RBNF_RES_FILES = $(RBNF_FILES:.txt =.res rbnf\) RBNF_RES_FILES = $(RBNF_RES_FILES:.txt=.res) RBNF_RES_FILES = $(RBNF_RES_FILES:rbnf\ =rbnf\) +ALL_RES = $(ALL_RES) $(ICURBNF)\res_index.res +!ENDIF # Read list of transliterator resource bundle files !IF EXISTS("$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk") @@ -266,10 +310,13 @@ TRANSLIT_SOURCE=$(TRANSLIT_SOURCE) $(TRANSLIT_SOURCE_LOCAL) !MESSAGE Warning: cannot find "trnsfiles.mk" !ENDIF -TRANSLIT_FILES = $(ICUTRNS)\root.txt $(TRANSLIT_ALIAS_SOURCE) $(TRANSLIT_SOURCE) +!IFDEF TRANSLIT_SOURCE +TRANSLIT_FILES = $(ICUTRNS)\$(TRANSLIT_ALIAS_SOURCE) $(TRANSLIT_SOURCE) TRANSLIT_RES_FILES = $(TRANSLIT_FILES:.txt =.res translit\) TRANSLIT_RES_FILES = $(TRANSLIT_RES_FILES:.txt=.res) TRANSLIT_RES_FILES = $(TRANSLIT_RES_FILES:translit\ =translit\) +#ALL_RES = $(ALL_RES) $(ICUTRNS)\res_index.res +!ENDIF # Read list of miscellaneous resource bundle files !IF EXISTS("$(ICUSRCDATA)\$(ICUMISC2)\miscfiles.mk") @@ -286,46 +333,66 @@ MISC_SOURCE=$(MISC_SOURCE) $(MISC_SOURCE_LOCAL) MISC_FILES = $(MISC_SOURCE:.txt=.res) -INDEX_RES_FILES = res_index.res -INDEX_COL_FILES = $(ICUCOL)\res_index.res -INDEX_RBNF_FILES = $(ICURBNF)\res_index.res -#INDEX_TRANSLIT_FILES = $(ICUTRNS)\res_index.res - # don't include COL_FILES -ALL_RES = $(INDEX_RES_FILES) $(RB_FILES) $(MISC_FILES) +ALL_RES = $(ALL_RES) $(RB_FILES) $(MISC_FILES) +!ENDIF + +# Common defines for both ways of building ICU's data library. +COMMON_ICUDATA_DEPENDENCIES="$(ICUP)\bin\pkgdata.exe" "$(ICUTMP)\icudata.res" "$(ICUP)\source\stubdata\stubdatabuilt.txt" +COMMON_ICUDATA_ARGUMENTS=-f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -M"PKGDATA_LDFLAGS=/base:0x4ad00000" -c -p $(ICUPKG) -T "$(ICUTMP)" -L $(U_ICUDATA_NAME) -d "$(ICUBLD_PKG)" -s . ############################################################################# # # ALL # This target builds all the data files. The world starts here. -# Note: we really want the common data dll to go to $(DLL_OUTPUT), not $(ICUBLD). But specifying +# Note: we really want the common data dll to go to $(DLL_OUTPUT), not $(ICUBLD_PKG). But specifying # that here seems to cause confusion with the building of the stub library of the same name. -# Building the common dll in $(ICUBLD) unconditionally copies it to $(DLL_OUTPUT) too. +# Building the common dll in $(ICUBLD_PKG) unconditionally copies it to $(DLL_OUTPUT) too. # ############################################################################# -ALL : GODATA "$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll" "$(TESTDATAOUT)\testdata.dat" +ALL : GODATA "$(ICU_LIB_TARGET)" "$(TESTDATAOUT)\testdata.dat" @echo All targets are up to date +# Starting with ICU4C 3.4, the core Unicode properties files (uprops.icu, ucase.icu, ubidi.icu, unorm.icu) +# are hardcoded in the common DLL and therefore not included in the data package any more. +# They are not built by default but need to be built for ICU4J data and for getting the .c source files +# when updating the Unicode data. +# Changed in makedata.mak revision 1.117. See Jitterbug 4497. +uni-core-data: GODATA "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu" "$(ICUBLD_PKG)\unorm.icu" + @echo Unicode .icu files built to "$(ICUBLD_PKG)" + @echo Unicode .c source files built to "$(ICUTMP)" + # # testdata - nmake will invoke pkgdata, which will create testdata.dat # -"$(TESTDATAOUT)\testdata.dat": "$(ICUBLD)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe +"$(TESTDATAOUT)\testdata.dat": "$(ICUBLD_PKG)\ucadata.icu" $(TRANSLIT_RES_FILES) $(MISC_FILES) $(RB_FILES) {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe @cd "$(TESTDATA)" @echo building testdata... nmake /nologo /f "$(TESTDATA)\testdata.mak" TESTDATA=. ICUTOOLS="$(ICUTOOLS)" ICUP="$(ICUP)" CFG=$(CFG) TESTDATAOUT="$(TESTDATAOUT)" ICUDATA="$(ICUDATA)" TESTDATABLD="$(TESTDATABLD)" #invoke pkgdata for ICU common data -# pkgdata will drop all output files (.dat, .dll, .lib) into the target (ICUBLD) directory. +# pkgdata will drop all output files (.dat, .dll, .lib) into the target (ICUBLD_PKG) directory. # move the .dll and .lib files to their final destination afterwards. # The $(U_ICUDATA_NAME).lib and $(U_ICUDATA_NAME).exp should already be in the right place due to stubdata. # -"$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll" : "$(ICUP)\bin\pkgdata.exe" $(CNV_FILES) "$(ICUBLD)\uprops.icu" "$(ICUBLD)\ucase.icu" "$(ICUBLD)\unames.icu" "$(ICUBLD)\pnames.icu" "$(ICUBLD)\unorm.icu" "$(ICUBLD)\cnvalias.icu" "$(ICUBLD)\ucadata.icu" "$(ICUBLD)\invuca.icu" "$(ICUBLD)\uidna.spp" $(BRK_FILES) $(INDEX_COL_FILES) $(COL_COL_FILES) $(INDEX_RBNF_FILES) $(RBNF_RES_FILES) $(TRANSLIT_RES_FILES) $(ALL_RES) "$(ICUTMP)\icudata.res" "$(ICUP)\source\stubdata\stubdatabuilt.txt" +# 2005-may-05 Removed Unicode properties files (unorm.icu, uprops.icu, ucase.icu, ubidi.icu) +# from data build. See Jitterbug 4497. (makedata.mak revision 1.117) +# +!IFDEF ICUDATA_SOURCE_ARCHIVE +"$(ICU_LIB_TARGET)" : $(COMMON_ICUDATA_DEPENDENCIES) "$(ICUDATA_SOURCE_ARCHIVE)" + @echo Building icu data from $(ICUDATA_SOURCE_ARCHIVE) + cd "$(ICUBLD_PKG)" + "$(ICUP)\bin\icupkg" -x * --list "$(ICUDATA_SOURCE_ARCHIVE)" > "$(ICUTMP)\icudata.lst" + "$(ICUP)\bin\pkgdata" $(COMMON_ICUDATA_ARGUMENTS) "$(ICUTMP)\icudata.lst" + copy "$(U_ICUDATA_NAME).dll" "$(DLL_OUTPUT)" + -@erase "$(U_ICUDATA_NAME).dll" + copy "$(ICUPKG).dat" "$(ICUOUT)\$(U_ICUDATA_NAME)$(U_ICUDATA_ENDIAN_SUFFIX).dat" + -@erase "$(ICUPKG).dat" +!ELSE +"$(ICU_LIB_TARGET)" : $(COMMON_ICUDATA_DEPENDENCIES) $(CNV_FILES) "$(ICUBLD_PKG)\unames.icu" "$(ICUBLD_PKG)\pnames.icu" "$(ICUBLD_PKG)\cnvalias.icu" "$(ICUBLD_PKG)\ucadata.icu" "$(ICUBLD_PKG)\invuca.icu" "$(ICUBLD_PKG)\uidna.spp" $(BRK_FILES) $(BRK_CTD_FILES) $(BRK_RES_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(TRANSLIT_RES_FILES) $(ALL_RES) @echo Building icu data - cd "$(ICUBLD)" - @"$(ICUP)\bin\pkgdata" -f -e $(U_ICUDATA_NAME) -v $(ICU_PACKAGE_MODE) -c -p $(ICUPKG) -T "$(ICUTMP)" -L $(U_ICUDATA_NAME) -d "$(ICUBLD)" -s . <<"$(ICUTMP)\pkgdatain.txt" -unorm.icu -uprops.icu -ucase.icu + cd "$(ICUBLD_PKG)" + "$(ICUP)\bin\pkgdata" $(COMMON_ICUDATA_ARGUMENTS) <<"$(ICUTMP)\icudata.lst" pnames.icu unames.icu ucadata.icu @@ -338,39 +405,46 @@ $(ALL_RES:.res =.res ) $(COL_COL_FILES:.res =.res ) -$(ICUCOL)\res_index.res $(RBNF_RES_FILES:.res =.res ) -$(ICURBNF)\res_index.res $(TRANSLIT_RES_FILES:.res =.res ) $(BRK_FILES:.brk =.brk ) +$(BRK_CTD_FILES:.ctd =.ctd +) +$(BRK_RES_FILES:.res =.res +) <> Depends on the Unicode data as well as uchar.h and uscript.h << -"$(ICUBLD)\pnames.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\genpname\$(CFG)\genpname.exe" "$(ICUP)\source\common\unicode\uchar.h" "$(ICUP)\source\common\unicode\uscript.h" +"$(ICUBLD_PKG)\pnames.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\genpname\$(CFG)\genpname.exe" "$(ICUP)\source\common\unicode\uchar.h" "$(ICUP)\source\common\unicode\uscript.h" @echo Creating data file for Unicode Property Names - @"$(ICUTOOLS)\genpname\$(CFG)\genpname" -d "$(ICUBLD)" + @"$(ICUTOOLS)\genpname\$(CFG)\genpname" -d "$(ICUBLD_PKG)" # Targets for uprops.icu -"$(ICUBLD)\uprops.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\genprops\$(CFG)\genprops.exe" "$(ICUBLD)\pnames.icu" +"$(ICUBLD_PKG)\uprops.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\genprops\$(CFG)\genprops.exe" "$(ICUBLD_PKG)\pnames.icu" @echo Creating data file for Unicode Character Properties - @"$(ICUTOOLS)\genprops\$(CFG)\genprops" -u $(UNICODE_VERSION) -i "$(ICUBLD)" -s "$(ICUUNIDATA)" -d "$(ICUBLD)" + @"$(ICUTOOLS)\genprops\$(CFG)\genprops" -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUBLD_PKG)" + @"$(ICUTOOLS)\genprops\$(CFG)\genprops" --csource -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUTMP)" + +# Targets for ubidi.icu +"$(ICUBLD_PKG)\ubidi.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\genbidi\$(CFG)\genbidi.exe" + @echo Creating data file for Unicode BiDi/Shaping Properties + @"$(ICUTOOLS)\genbidi\$(CFG)\genbidi" -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUBLD_PKG)" + @"$(ICUTOOLS)\genbidi\$(CFG)\genbidi" --csource -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUTMP)" # Targets for ucase.icu -"$(ICUBLD)\ucase.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\gencase\$(CFG)\gencase.exe" +"$(ICUBLD_PKG)\ucase.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\gencase\$(CFG)\gencase.exe" @echo Creating data file for Unicode Case Mapping Properties - @"$(ICUTOOLS)\gencase\$(CFG)\gencase" -u $(UNICODE_VERSION) -i "$(ICUBLD)" -s "$(ICUUNIDATA)" -d "$(ICUBLD)" + @"$(ICUTOOLS)\gencase\$(CFG)\gencase" -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUBLD_PKG)" + @"$(ICUTOOLS)\gencase\$(CFG)\gencase" --csource -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUTMP)" # Targets for unorm.icu -"$(ICUBLD)\unorm.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\gennorm\$(CFG)\gennorm.exe" "$(ICUBLD)\pnames.icu" "$(ICUBLD)\uprops.icu" "$(ICUBLD)\ucase.icu" +"$(ICUBLD_PKG)\unorm.icu": "$(ICUUNIDATA)\*.txt" "$(ICUTOOLS)\gennorm\$(CFG)\gennorm.exe" "$(ICUBLD_PKG)\pnames.icu" "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" @echo Creating data file for Unicode Normalization - @"$(ICUTOOLS)\gennorm\$(CFG)\gennorm" -u $(UNICODE_VERSION) -d "$(ICUBLD)" -i "$(ICUBLD)" -s "$(ICUUNIDATA)" + @"$(ICUTOOLS)\gennorm\$(CFG)\gennorm" -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUBLD_PKG)" + @"$(ICUTOOLS)\gennorm\$(CFG)\gennorm" --csource -u $(UNICODE_VERSION) -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" -d "$(ICUTMP)" # Targets for converters -"$(ICUBLD)\cnvalias.icu" : {"$(ICUSRCDATA)\$(ICUUCM)"}\convrtrs.txt "$(ICUTOOLS)\gencnval\$(CFG)\gencnval.exe" +"$(ICUBLD_PKG)\cnvalias.icu" : {"$(ICUSRCDATA)\$(ICUUCM)"}\convrtrs.txt "$(ICUTOOLS)\gencnval\$(CFG)\gencnval.exe" @echo Creating data file for Converter Aliases - @"$(ICUTOOLS)\gencnval\$(CFG)\gencnval" -d "$(ICUBLD)" "$(ICUSRCDATA)\$(ICUUCM)\convrtrs.txt" + @"$(ICUTOOLS)\gencnval\$(CFG)\gencnval" -d "$(ICUBLD_PKG)" "$(ICUSRCDATA)\$(ICUUCM)\convrtrs.txt" # Targets for ucadata.icu & invuca.icu -"$(ICUBLD)\invuca.icu" "$(ICUBLD)\ucadata.icu": "$(ICUUNIDATA)\FractionalUCA.txt" "$(ICUTOOLS)\genuca\$(CFG)\genuca.exe" "$(ICUBLD)\uprops.icu" "$(ICUBLD)\ucase.icu" "$(ICUBLD)\unorm.icu" +# used to depend on "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\unorm.icu" +# see Jitterbug 4497 +"$(ICUBLD_PKG)\invuca.icu" "$(ICUBLD_PKG)\ucadata.icu": "$(ICUUNIDATA)\FractionalUCA.txt" "$(ICUTOOLS)\genuca\$(CFG)\genuca.exe" @echo Creating UCA data files - @"$(ICUTOOLS)\genuca\$(CFG)\genuca" -d "$(ICUBLD)" -i "$(ICUBLD)" -s "$(ICUUNIDATA)" + @"$(ICUTOOLS)\genuca\$(CFG)\genuca" -d "$(ICUBLD_PKG)" -i "$(ICUBLD_PKG)" -s "$(ICUUNIDATA)" # Targets for uidna.spp -"$(ICUBLD)\uidna.spp" : "$(ICUUNIDATA)\*.txt" "$(ICUMISC)\NamePrepProfile.txt" - gensprep -s "$(ICUMISC)" -d "$(ICUBLD)\\" -b uidna -n "$(ICUUNIDATA)" -k -u 3.2.0 NamePrepProfile.txt +"$(ICUBLD_PKG)\uidna.spp" : "$(ICUUNIDATA)\*.txt" "$(ICUMISC)\NamePrepProfile.txt" + "$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(ICUMISC)" -d "$(ICUBLD_PKG)\\" -b uidna -n "$(ICUUNIDATA)" -k -u 3.2.0 NamePrepProfile.txt + +!IFDEF ICUDATA_ARCHIVE +"$(ICUDATA_SOURCE_ARCHIVE)": CREATE_DIRS $(ICUDATA_ARCHIVE) "$(ICUTOOLS)\icupkg\$(CFG)\icupkg.exe" + "$(ICUTOOLS)\icupkg\$(CFG)\icupkg" -t$(U_ICUDATA_ENDIAN_SUFFIX) "$(ICUDATA_ARCHIVE)" "$(ICUDATA_SOURCE_ARCHIVE)" +!ENDIF # Dependencies on the tools for the batch inference rules +!IFNDEF ICUDATA_SOURCE_ARCHIVE $(UCM_SOURCE) : {"$(ICUTOOLS)\makeconv\$(CFG)"}makeconv.exe -$(MISC_SOURCE) $(RB_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(TRANSLIT_RES_FILES): {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe "$(ICUBLD)\ucadata.icu" "$(ICUBLD)\uprops.icu" "$(ICUBLD)\ucase.icu" "$(ICUBLD)\unorm.icu" +# This used to depend on "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu" "$(ICUBLD_PKG)\unorm.icu" +# This data is now hard coded as a part of the library. +# See Jitterbug 4497 for details. +$(MISC_SOURCE) $(RB_FILES) $(COL_COL_FILES) $(RBNF_RES_FILES) $(BRK_RES_FILES) $(TRANSLIT_RES_FILES): {"$(ICUTOOLS)\genrb\$(CFG)"}genrb.exe "$(ICUBLD_PKG)\ucadata.icu" + +# This used to depend on "$(ICUBLD_PKG)\uprops.icu" "$(ICUBLD_PKG)\ucase.icu" "$(ICUBLD_PKG)\ubidi.icu" "$(ICUBLD_PKG)\unorm.icu" +# This data is now hard coded as a part of the library. +# See Jitterbug 4497 for details. +$(BRK_SOURCE) : "$(ICUBLD_PKG)\unames.icu" "$(ICUBLD_PKG)\pnames.icu" +!ENDIF -$(BRK_SOURCE) : "$(ICUBLD)\uprops.icu" "$(ICUBLD)\ucase.icu" "$(ICUBLD)\unames.icu" "$(ICUBLD)\pnames.icu" "$(ICUBLD)\unorm.icu" diff --git a/icuSources/data/makedata.vcproj b/icuSources/data/makedata.vcproj index 4dbb697c..25a2f0e2 100644 --- a/icuSources/data/makedata.vcproj +++ b/icuSources/data/makedata.vcproj @@ -51,9 +51,15 @@ + + + + diff --git a/icuSources/data/mappings/convrtrs.txt b/icuSources/data/mappings/convrtrs.txt index f56fd359..e174a1d1 100644 --- a/icuSources/data/mappings/convrtrs.txt +++ b/icuSources/data/mappings/convrtrs.txt @@ -1,13 +1,13 @@ # ****************************************************************************** # * -# * Copyright (C) 1995-2004, International Business Machines +# * Copyright (C) 1995-2006, International Business Machines # * Corporation and others. All Rights Reserved. # * # ****************************************************************************** # If this converter alias table looks very confusing, a much easier to # understand view can be found at this demo: -# http://oss.software.ibm.com/cgi-bin/icu/convexp +# http://www.ibm.com/software/globalization/icu/demo/converters # IMPORTANT NOTE # @@ -134,36 +134,74 @@ # Fully algorithmic converters UTF-8 { IANA* MIME* JAVA* WINDOWS } - ibm-1208 { IBM* } - ibm-1209 { IBM } - ibm-5304 { IBM } - ibm-5305 { IBM } + ibm-1208 { IBM* } # UTF-8 with IBM PUA + ibm-1209 { IBM } # UTF-8 + ibm-5304 { IBM } # Unicode 2.0, UTF-8 with IBM PUA + ibm-5305 { IBM } # Unicode 2.0, UTF-8 + ibm-13496 { IBM } # Unicode 3.0, UTF-8 with IBM PUA + ibm-13497 { IBM } # Unicode 3.0, UTF-8 + ibm-17592 { IBM } # Unicode 4.0, UTF-8 with IBM PUA + ibm-17593 { IBM } # Unicode 4.0, UTF-8 windows-65001 { WINDOWS* } cp1208 # The ICU 2.2 UTF-16/32 converters detect and write a BOM. -UTF-16 { IANA* MIME* JAVA* } ISO-10646-UCS-2 { IANA } unicode csUnicode ucs-2 +UTF-16 { IANA* MIME* JAVA* } ISO-10646-UCS-2 { IANA } + ibm-1204 { IBM* } # UTF-16 with IBM PUA and BOM sensitive + ibm-1205 { IBM } # UTF-16 BOM sensitive + unicode + csUnicode + ucs-2 +# The following Unicode CCSIDs (IBM) are not valid in ICU because they are +# considered pure DBCS (exactly 2 bytes) of Unicode, +# and they are a subset of Unicode. ICU does not support their encoding structures. +# 1400 1401 1402 1410 1414 1415 1446 1447 1448 1449 64770 64771 65520 5496 5497 5498 9592 13688 UTF-16BE { IANA* MIME* JAVA* } x-utf-16be { JAVA } - # iso-10646-ucs-2 { JAVA } # This is ambiguous - ibm-1200 { IBM* } - ibm-1201 { IBM } - ibm-5297 { IBM } - ibm-13488 { IBM } - ibm-17584 { IBM } + ibm-1200 { IBM* } # UTF-16 BE with IBM PUA + ibm-1201 { IBM } # UTF-16 BE + ibm-13488 { IBM } # Unicode 2.0, UTF-16 BE with IBM PUA + ibm-13489 { IBM } # Unicode 2.0, UTF-16 BE + ibm-17584 { IBM } # Unicode 3.0, UTF-16 BE with IBM PUA + ibm-17585 { IBM } # Unicode 3.0, UTF-16 BE + ibm-21680 { IBM } # Unicode 4.0, UTF-16 BE with IBM PUA + ibm-21681 { IBM } # Unicode 4.0, UTF-16 BE + ibm-25776 { IBM } # Unicode 4.1, UTF-16 BE with IBM PUA + ibm-25777 { IBM } # Unicode 4.1, UTF-16 BE + ibm-61955 { IBM } # UTF-16BE with Gaidai University (Japan) PUA + ibm-61956 { IBM } # UTF-16BE with HKSCS-Big 5 PUA windows-1201 { WINDOWS* } cp1200 cp1201 UTF16_BigEndian + # ibm-5297 { IBM } # Unicode 2.0, UTF-16 (BE) (reserved, never used) + # iso-10646-ucs-2 { JAVA } # This is ambiguous + # ibm-61952 is not a valid CCSID because it's Unicode 1.1 + # ibm-61953 is not a valid CCSID because it's Unicode 1.0 UTF-16LE { IANA* MIME* JAVA* } x-utf-16le { JAVA } - ibm-1202 { IBM* } - ibm-13490 { IBM } - ibm-17586 { IBM } + ibm-1202 { IBM* } # UTF-16 LE with IBM PUA + ibm-1203 { IBM } # UTF-16 LE + ibm-13490 { IBM } # Unicode 2.0, UTF-16 LE with IBM PUA + ibm-13491 { IBM } # Unicode 2.0, UTF-16 LE + ibm-17586 { IBM } # Unicode 3.0, UTF-16 LE with IBM PUA + ibm-17587 { IBM } # Unicode 3.0, UTF-16 LE + ibm-21682 { IBM } # Unicode 4.0, UTF-16 LE with IBM PUA + ibm-21683 { IBM } # Unicode 4.0, UTF-16 LE + ibm-25778 { IBM } # Unicode 4.1, UTF-16 LE with IBM PUA + ibm-25779 { IBM } # Unicode 4.1, UTF-16 LE UTF16_LittleEndian windows-1200 { WINDOWS* } -UTF-32 { IANA* MIME* } ISO-10646-UCS-4 { IANA } csUCS4 ucs-4 -UTF-32BE { IANA* } UTF32_BigEndian ibm-1232 { IBM* } ibm-1233 { IBM } -UTF-32LE { IANA* } UTF32_LittleEndian ibm-1234 { IBM* } +UTF-32 { IANA* MIME* } ISO-10646-UCS-4 { IANA } + ibm-1236 { IBM* } # UTF-32 with IBM PUA and BOM sensitive + ibm-1237 { IBM } # UTF-32 BOM sensitive + csUCS4 + ucs-4 +UTF-32BE { IANA* } UTF32_BigEndian + ibm-1232 { IBM* } # UTF-32 BE with IBM PUA + ibm-1233 { IBM } # UTF-32 BE +UTF-32LE { IANA* } UTF32_LittleEndian + ibm-1234 { IBM* } # UTF-32 LE, with IBM PUA + ibm-1235 { IBM } # UTF-32 LE # ICU-specific names for special uses UTF16_PlatformEndian @@ -185,6 +223,9 @@ UTF32_OppositeEndian # For details about email headers see RFC 2047. UTF-7 { IANA* MIME* WINDOWS } windows-65000 { WINDOWS* } +# UTF-EBCDIC doesn't exist in ICU, but the aliases are here for reference. +#UTF-EBCDIC ibm-1210 { IBM* } ibm-1211 { IBM } + # IMAP-mailbox-name is an ICU-specific name for the encoding of IMAP mailbox names. # It is a substantially modified UTF-7 encoding. See the specification in: # @@ -194,11 +235,16 @@ UTF-7 { IANA* MIME* WINDOWS } windows-65000 { WINDOWS* } IMAP-mailbox-name SCSU { IANA* } -BOCU-1 { IANA* } csBOCU-1 { IANA } + ibm-1212 { IBM* } # SCSU with IBM PUA + ibm-1213 { IBM } # SCSU +BOCU-1 { IANA* } + csBOCU-1 { IANA } + ibm-1214 { IBM* } # BOCU-1 with IBM PUA + ibm-1215 { IBM } # BOCU-1 # See http://www.unicode.org/unicode/reports/tr26 for this Compatibility Encoding Scheme for UTF-16 # The Unicode Consortium does not encourage the use of CESU-8 -CESU-8 { IANA* } +CESU-8 { IANA* } ibm-9400 { IBM* } # Standard iso-8859-1, which does not have the Euro update. # See iso-8859-15 (latin9) for the Euro update @@ -243,7 +289,7 @@ ibm-367_P100-1995 { UTR22* } ibm-367 { IBM* } IBM367 { IANA* } # This is AS # Central Europe ibm-912_P100-1995 { UTR22* } ibm-912 { IBM* JAVA } - iso-8859-2 { MIME* IANA JAVA* WINDOWS } + ISO-8859-2 { MIME* IANA JAVA* WINDOWS } ISO_8859-2:1987 { IANA* WINDOWS JAVA } latin2 { IANA WINDOWS JAVA } csISOLatin2 { IANA WINDOWS JAVA } @@ -257,7 +303,7 @@ ibm-912_P100-1995 { UTR22* } # Maltese Esperanto ibm-913_P100-2000 { UTR22* } ibm-913 { IBM* JAVA } - iso-8859-3 { MIME* IANA WINDOWS JAVA* } + ISO-8859-3 { MIME* IANA WINDOWS JAVA* } ISO_8859-3:1988 { IANA* WINDOWS JAVA } latin3 { IANA JAVA WINDOWS } csISOLatin3 { IANA WINDOWS } @@ -271,7 +317,7 @@ ibm-913_P100-2000 { UTR22* } # Baltic ibm-914_P100-1995 { UTR22* } ibm-914 { IBM* JAVA } - iso-8859-4 { MIME* IANA WINDOWS JAVA* } + ISO-8859-4 { MIME* IANA WINDOWS JAVA* } latin4 { IANA WINDOWS JAVA } csISOLatin4 { IANA WINDOWS JAVA } iso-ir-110 { IANA WINDOWS JAVA } @@ -285,7 +331,7 @@ ibm-914_P100-1995 { UTR22* } # Cyrillic ibm-915_P100-1995 { UTR22* } ibm-915 { IBM* JAVA } - iso-8859-5 { MIME* IANA WINDOWS JAVA* } + ISO-8859-5 { MIME* IANA WINDOWS JAVA* } cyrillic { IANA WINDOWS JAVA } csISOLatinCyrillic { IANA WINDOWS JAVA } iso-ir-144 { IANA WINDOWS JAVA } @@ -302,7 +348,7 @@ ibm-915_P100-1995 { UTR22* } # -E requires the client to handle the ISO 6429 bidirectional controls ibm-1089_P100-1995 { UTR22* } ibm-1089 { IBM* JAVA } - iso-8859-6 { MIME* IANA WINDOWS JAVA* } + ISO-8859-6 { MIME* IANA WINDOWS JAVA* } arabic { IANA WINDOWS JAVA } csISOLatinArabic { IANA WINDOWS JAVA } iso-ir-127 { IANA WINDOWS JAVA } @@ -316,21 +362,34 @@ ibm-1089_P100-1995 { UTR22* } ISO-8859-6-I { IANA MIME } # IANA considers this alias different and BiDi needs to be applied. ISO-8859-6-E { IANA MIME } # IANA considers this alias different and BiDi needs to be applied. +# ISO Greek (with euro update). This is really ISO_8859-7:2003 +ibm-9005_X100-2005 { UTR22* } + ibm-9005 { IBM* } + ISO-8859-7 { MIME* IANA WINDOWS } + greek { IANA WINDOWS } + greek8 { IANA WINDOWS } + ELOT_928 { IANA WINDOWS } + ECMA-118 { IANA WINDOWS } + csISOLatinGreek { IANA WINDOWS } + iso-ir-126 { IANA WINDOWS } + ISO_8859-7:1987 { IANA* WINDOWS } + windows-28597 { WINDOWS* } + # ISO Greek (w/o euro update) +# JDK 1.5 has these aliases. ibm-813_P100-1995 { UTR22* } ibm-813 { IBM* JAVA } - iso-8859-7 { MIME* IANA WINDOWS JAVA* } - greek { IANA WINDOWS JAVA } - greek8 { IANA WINDOWS JAVA } - ELOT_928 { IANA WINDOWS JAVA } - ECMA-118 { IANA WINDOWS JAVA } - csISOLatinGreek { IANA WINDOWS JAVA } - iso-ir-126 { IANA WINDOWS JAVA } - ISO_8859-7:1987 { IANA* WINDOWS JAVA } + ISO-8859-7 { JAVA* } + greek { JAVA } + greek8 { JAVA } + ELOT_928 { JAVA } + ECMA-118 { JAVA } + csISOLatinGreek { JAVA } + iso-ir-126 { JAVA } + ISO_8859-7:1987 { JAVA } 8859_7 { JAVA } cp813 { JAVA } 813 { JAVA } - windows-28597 { WINDOWS* } # hebrew # ISO_8859-8-E and ISO_8859-8-I are similar to this charset, but BiDi is done differently @@ -339,7 +398,7 @@ ibm-813_P100-1995 { UTR22* } # -E requires the client to handle the ISO 6429 bidirectional controls ibm-916_P100-1995 { UTR22* } ibm-916 { IBM* JAVA } - iso-8859-8 { MIME* IANA WINDOWS JAVA* } + ISO-8859-8 { MIME* IANA WINDOWS JAVA* } hebrew { IANA WINDOWS JAVA } csISOLatinHebrew { IANA WINDOWS JAVA } iso-ir-138 { IANA WINDOWS JAVA } @@ -354,7 +413,7 @@ ibm-916_P100-1995 { UTR22* } # Turkish ibm-920_P100-1995 { UTR22* } ibm-920 { IBM* JAVA } - iso-8859-9 { MIME* IANA WINDOWS JAVA* } + ISO-8859-9 { MIME* IANA WINDOWS JAVA* } latin5 { IANA WINDOWS JAVA } csISOLatin5 { IANA JAVA } iso-ir-148 { IANA WINDOWS JAVA } @@ -366,18 +425,40 @@ ibm-920_P100-1995 { UTR22* } windows-28599 { WINDOWS* } ECMA-128 # IANA doesn't have this alias 6/24/2002 +# Nordic languages +iso-8859_10-1998 { UTR22* } ISO-8859-10 { MIME* IANA* } + iso-ir-157 { IANA } + l6 { IANA } + ISO_8859-10:1992 { IANA } + csISOLatin6 { IANA } + latin6 { IANA } + +# Thai +# Be warned. There several iso-8859-11 codepage variants, and they are all incompatible. +# ISO-8859-11 is a superset of TIS-620. The difference is that ISO-8859-11 contains the C1 control codes. +iso-8859_11-2001 { UTR22* } ISO-8859-11 + thai8 # HP-UX alias. HP-UX says TIS-620, but it's closer to ISO-8859-11. + # iso-8859-13, PC Baltic (w/o euro update) ibm-921_P100-1995 { UTR22* } ibm-921 { IBM* } - iso-8859-13 { IANA* MIME* JAVA* } + ISO-8859-13 { IANA* MIME* JAVA* } 8859_13 { JAVA } cp921 921 +# Celtic +iso-8859_14-1998 { UTR22* } ISO-8859-14 { IANA* } + iso-ir-199 { IANA } + ISO_8859-14:1998 { IANA } + latin8 { IANA } + iso-celtic { IANA } + l8 { IANA } + # Latin 9 ibm-923_P100-1998 { UTR22* } ibm-923 { IBM* JAVA } - iso-8859-15 { IANA* MIME* WINDOWS JAVA* } + ISO-8859-15 { IANA* MIME* WINDOWS JAVA* } Latin-9 { IANA WINDOWS } l9 { WINDOWS } 8859_15 { JAVA } @@ -439,6 +520,7 @@ ibm-33722_P12A-1999 { UTR22* } X-EUC-JP { WINDOWS JAVA } # Japan EUC. x-euc-jp is a MIME name eucjis { JAVA } windows-51932 { WINDOWS* } + ujis # Linux sometimes uses this name. This is an unfortunate generic and rarely used name. Its use is discouraged. ibm-33722_VPUA IBM-eucJP ibm-33722_P120-1999 { UTR22* } # Japan EUC with \ <-> Yen mapping @@ -473,31 +555,33 @@ macos-2566-10.2 { UTR22* } # This uses supplementary characters. ibm-1375_P100-2003 { UTR22* } # IBM's interpretation of Windows' Taiwan Big-5 w/ HKSCS extensions ibm-1375 { IBM* } Big5-HKSCS + MS950_HKSCS { JAVA* } + hkbig5 # from HP-UX 11i, which can't handle supplementary characters. # windows-950 # Windows-950 can be w/ or w/o HKSCS extensions. By default it's not. # windows-950_hkscs ibm-1386_P100-2002 { UTR22* } - ibm-1386 { IBM* JAVA } - cp1386 { JAVA* } + ibm-1386 { IBM* } + cp1386 windows-936 # Alternate mapping. Leave untagged. This is the IBM interpretation of a Windows codepage. ibm-1386_VSUB_VPUA - # zh_cn windows-936-2000 { UTR22* } - GBK { IANA* WINDOWS } - CP936 { IANA } - MS936 { IANA } - windows-936 { IANA WINDOWS* } + GBK { IANA* WINDOWS JAVA* } + CP936 { IANA JAVA } + MS936 { IANA } # In JDK 1.5, this goes to x-mswin-936. This is an IANA name split. + windows-936 { IANA WINDOWS* JAVA } +# Java has two different tables for ibm-1383 and gb2312. We pick closest set for tagging. ibm-1383_P110-1999 { UTR22* } # China EUC. - ibm-1383 { IBM* } + ibm-1383 { IBM* JAVA } GB2312 { IANA* MIME* } csGB2312 { IANA } + cp1383 { JAVA* } + 1383 { JAVA } EUC-CN # According to other platforms, windows-20936 looks more like euc-cn. x-euc-cn is also a MIME name ibm-eucCN hp15CN # From HP-UX? - cp1383 - 1383 ibm-1383_VPUA # gb # This is not an IANA name. gb in IANA means Great Britain. @@ -552,15 +636,18 @@ ibm-949_P11A-1999 { UTR22* } # # ibm-970 is almost a subset of ibm-1363. # Java, Solaris and AIX use euc-kr to also mean ksc5601. +# Java has both ibm-970 and EUC-KR as separate converters. ibm-970_P110-1995 { UTR22* } ibm-970 { IBM* JAVA } - EUC-KR { IANA* MIME* WINDOWS JAVA* } + EUC-KR { IANA* MIME* WINDOWS JAVA } KS_C_5601-1987 { JAVA } windows-51949 { WINDOWS* } csEUCKR { IANA WINDOWS } # x-euc-kr is also a MIME name ibm-eucKR { JAVA } KSC_5601 { JAVA } # Needed by iso-2022 5601 { JAVA } + cp970 { JAVA* } + 970 { JAVA } ibm-970_VPUA # ibm-971 is almost the set of DBCS mappings of ibm-970 @@ -598,33 +685,35 @@ windows-949-2000 { UTR22* } iso-ir-149 { WINDOWS } ms949 { JAVA } -ibm-1162_P100-1999 { UTR22* } # Thai (w/ euro update) - ibm-1162 { IBM* } +windows-874-2000 { UTR22* } # Thai (w/ euro update) + TIS-620 { WINDOWS } + windows-874 { JAVA* WINDOWS* } + MS874 { JAVA } + # iso-8859-11 { WINDOWS } # iso-8859-11 is similar to TIS-620. ibm-13162 is a closer match. ibm-874_P100-1995 { UTR22* } # Thai PC (w/o euro update). ibm-874 { IBM* JAVA } ibm-9066 { IBM } # Yes ibm-874 == ibm-9066. ibm-1161 has the euro update. cp874 { JAVA* } - TIS-620 { IANA* JAVA } # This actually separate from ibm-874, which is similar to this table - tis620.2533 { JAVA } # This actually separate from ibm-874, which is similar to this table + TIS-620 { IANA* JAVA } # This is actually separate from ibm-874, which is similar to this table + tis620.2533 { JAVA } # This is actually separate from ibm-874, which is similar to this table eucTH # eucTH is an unusual alias from Solaris. eucTH has fewer mappings than TIS620 - cp9066 -windows-874-2000 { UTR22* } # Thai (w/ euro update) - TIS-620 { WINDOWS } - windows-874 { JAVA* WINDOWS* } - MS874 { JAVA } - # iso-8859-11 { WINDOWS } # iso-8859-11 is similar to TIS-620. ibm-13162 is a closer match. +ibm-1162_P100-1999 { UTR22* } # Thai (w/ euro update) + ibm-1162 { IBM* } # Platform codepages +# If Java supports the IBM prefix, it should also support the ibm- prefix too. ibm-437_P100-1995 { UTR22* } ibm-437 { IBM* } IBM437 { IANA* WINDOWS JAVA } cp437 { IANA WINDOWS JAVA* } 437 { IANA WINDOWS JAVA } csPC8CodePage437 { IANA JAVA } windows-437 { WINDOWS* } # PC US +ibm-737_P100-1997 { UTR22* } ibm-737 { IBM* } IBM737 { WINDOWS JAVA } cp737 { JAVA* } windows-737 { WINDOWS* } 737 { JAVA } # PC Greek +ibm-775_P100-1996 { UTR22* } ibm-775 { IBM* } IBM775 { IANA* WINDOWS JAVA } cp775 { IANA WINDOWS JAVA* } csPC775Baltic { IANA } windows-775 { WINDOWS* } 775 { JAVA } # PC Baltic ibm-850_P100-1995 { UTR22* } ibm-850 { IBM* } IBM850 { IANA* WINDOWS JAVA } cp850 { IANA MIME* WINDOWS JAVA* } 850 { IANA JAVA } csPC850Multilingual { IANA JAVA } windows-850 { WINDOWS* } # PC latin1 ibm-851_P100-1995 { UTR22* } ibm-851 { IBM* } IBM851 { IANA* } cp851 { IANA MIME* } 851 { IANA } csPC851 { IANA } # PC DOS Greek (w/o euro) ibm-852_P100-1995 { UTR22* } ibm-852 { IBM* } IBM852 { IANA* WINDOWS JAVA } cp852 { IANA WINDOWS JAVA* } 852 { IANA WINDOWS JAVA } csPCp852 { IANA JAVA } windows-852 { WINDOWS* } # PC latin2 (w/o euro update) -ibm-855_P100-1995 { UTR22* } ibm-855 { IBM* } IBM855 { IANA* } cp855 { IANA } 855 { IANA } csIBM855 { IANA } csPCp855 # PC cyrillic (w/o euro update) -ibm-856_P100-1995 { UTR22* } ibm-856 { IBM* JAVA } cp856 { MIME* JAVA* } 856 { JAVA } # PC Hebrew (old) +ibm-855_P100-1995 { UTR22* } ibm-855 { IBM* } IBM855 { IANA* JAVA } cp855 { IANA JAVA* } 855 { IANA } csIBM855 { IANA } csPCp855 { JAVA } # PC cyrillic (w/o euro update) +ibm-856_P100-1995 { UTR22* } ibm-856 { IBM* } IBM856 { JAVA } cp856 { MIME* JAVA* } 856 { JAVA } # PC Hebrew (old) ibm-857_P100-1995 { UTR22* } ibm-857 { IBM* } IBM857 { IANA* WINDOWS JAVA } cp857 { IANA MIME* JAVA* } 857 { IANA JAVA } csIBM857 { IANA JAVA } windows-857 { WINDOWS* } # PC Latin 5 (w/o euro update) -ibm-858_P100-1997 { UTR22* } ibm-858 { IBM* JAVA* } IBM00858 { IANA* } CCSID00858 { IANA } CP00858 { IANA } PC-Multilingual-850+euro { IANA } cp858 { MIME* } # PC latin1 with Euro +ibm-858_P100-1997 { UTR22* } ibm-858 { IBM* } IBM00858 { IANA* JAVA } CCSID00858 { IANA JAVA } CP00858 { IANA JAVA } PC-Multilingual-850+euro { IANA } cp858 { MIME* JAVA* } # PC latin1 with Euro ibm-860_P100-1995 { UTR22* } ibm-860 { IBM* } IBM860 { IANA* JAVA } cp860 { IANA MIME* JAVA* } 860 { IANA JAVA } csIBM860 { IANA JAVA } # PC Portugal ibm-861_P100-1995 { UTR22* } ibm-861 { IBM* } IBM861 { IANA* WINDOWS JAVA } cp861 { IANA MIME* JAVA* } 861 { IANA JAVA } cp-is { IANA JAVA } csIBM861 { IANA JAVA } windows-861 { WINDOWS* } # PC Iceland ibm-862_P100-1995 { UTR22* } ibm-862 { IBM* } IBM862 { IANA* JAVA } cp862 { IANA MIME* JAVA* } 862 { IANA JAVA } csPC862LatinHebrew { IANA JAVA } DOS-862 { WINDOWS } windows-862 { WINDOWS* } # PC Hebrew (w/o euro update) @@ -632,27 +721,28 @@ ibm-863_P100-1995 { UTR22* } ibm-863 { IBM* } IBM863 { IANA* JAVA } cp863 { I ibm-864_X110-1999 { UTR22* } ibm-864 { IBM* } IBM864 { IANA* JAVA } cp864 { IANA MIME* JAVA* } csIBM864 { IANA JAVA } # PC Arabic (w/o euro update) ibm-865_P100-1995 { UTR22* } ibm-865 { IBM* } IBM865 { IANA* JAVA } cp865 { IANA MIME* JAVA* } 865 { IANA JAVA } csIBM865 { IANA JAVA } # PC Nordic ibm-866_P100-1995 { UTR22* } ibm-866 { IBM* } IBM866 { IANA* JAVA } cp866 { IANA MIME* WINDOWS JAVA* } 866 { IANA JAVA } csIBM866 { IANA JAVA } windows-866 { WINDOWS* } # PC Russian (w/o euro update) -ibm-867_P100-1998 { UTR22* } ibm-867 { IBM* } cp867 # PC Hebrew (w/ euro update) Updated version of ibm-862 +ibm-867_P100-1998 { UTR22* } ibm-867 { IBM* } # PC Hebrew (w/ euro update) Updated version of ibm-862 ibm-868_P100-1995 { UTR22* } ibm-868 { IBM* } IBM868 { IANA* JAVA } CP868 { IANA MIME* JAVA* } 868 { JAVA } csIBM868 { IANA } cp-ar { IANA } # PC Urdu ibm-869_P100-1995 { UTR22* } ibm-869 { IBM* } IBM869 { IANA* WINDOWS JAVA } cp869 { IANA MIME* JAVA* } 869 { IANA JAVA } cp-gr { IANA JAVA } csIBM869 { IANA JAVA } windows-869 { WINDOWS* } # PC Greek (w/o euro update) -ibm-878_P100-1996 { UTR22* } ibm-878 { IBM* } KOI8-R { IANA* MIME* JAVA* } koi8 { JAVA } csKOI8R { IANA JAVA } cp878 # Russian internet +ibm-878_P100-1996 { UTR22* } ibm-878 { IBM* } KOI8-R { IANA* MIME* WINDOWS JAVA* } koi8 { WINDOWS JAVA } csKOI8R { IANA WINDOWS JAVA } windows-20866 { WINDOWS* } cp878 # Russian internet ibm-901_P100-1999 { UTR22* } ibm-901 { IBM* } # PC Baltic (w/ euro update), update of ibm-921 ibm-902_P100-1999 { UTR22* } ibm-902 { IBM* } # PC Estonian (w/ euro update), update of ibm-922 -ibm-922_P100-1999 { UTR22* } ibm-922 { IBM* JAVA } cp922 { MIME* JAVA* } 922 { JAVA } # PC Estonian (w/o euro update) +ibm-922_P100-1999 { UTR22* } ibm-922 { IBM* } IBM922 { JAVA } cp922 { MIME* JAVA* } 922 { JAVA } # PC Estonian (w/o euro update) +ibm-1168_P100-2002 { UTR22* } ibm-1168 { IBM* } KOI8-U { IANA* WINDOWS } windows-21866 { WINDOWS* } koi8-ru { WINDOWS } # Ukrainian KOI8. koi8-ru is an unusual alias, but Microsoft states that it is an alias. ibm-4909_P100-1999 { UTR22* } ibm-4909 { IBM* } # ISO Greek (w/ euro update), update of ibm-813 # The cp aliases in this section aren't really windows aliases, but it was used by ICU for Windows. -# cp is used to denote IBM in Java, and that is why we don't do that anymore. +# cp is usually used to denote IBM in Java, and that is why we don't do that anymore. # The windows-* aliases mean windows codepages. -ibm-5346_P100-1998 { UTR22* } ibm-5346 { IBM* } windows-1250 { IANA* JAVA* WINDOWS* } cp1250 { WINDOWS } # Windows Latin2 (w/ euro update) -ibm-5347_P100-1998 { UTR22* } ibm-5347 { IBM* } windows-1251 { IANA* JAVA* WINDOWS* } cp1251 { WINDOWS } # Windows Cyrillic (w/ euro update) -ibm-5348_P100-1997 { UTR22* } ibm-5348 { IBM* } windows-1252 { IANA* JAVA* WINDOWS* } cp1252 { WINDOWS } # Windows Latin1 (w/ euro update) -ibm-5349_P100-1998 { UTR22* } ibm-5349 { IBM* } windows-1253 { IANA* JAVA* WINDOWS* } cp1253 { WINDOWS } # Windows Greek (w/ euro update) -ibm-5350_P100-1998 { UTR22* } ibm-5350 { IBM* } windows-1254 { IANA* JAVA* WINDOWS* } cp1254 { WINDOWS } # Windows Turkish (w/ euro update) -ibm-9447_P100-2002 { UTR22* } ibm-9447 { IBM* } windows-1255 { IANA* JAVA* WINDOWS* } cp1255 { WINDOWS } # Windows Hebrew (w/ euro update) -windows-1256-2000 { UTR22* } windows-1256 { IANA* JAVA* WINDOWS* } cp1256 { WINDOWS } # Windows Arabic (w/ euro update) -ibm-9449_P100-2002 { UTR22* } ibm-9449 { IBM* } windows-1257 { IANA* JAVA* WINDOWS* } cp1257 { WINDOWS } # Windows Baltic (w/ euro update) -ibm-5354_P100-1998 { UTR22* } ibm-5354 { IBM* } windows-1258 { IANA* JAVA* WINDOWS* } cp1258 { WINDOWS } # Windows Vietnamese (w/ euro update) +ibm-5346_P100-1998 { UTR22* } ibm-5346 { IBM* } windows-1250 { IANA* JAVA* WINDOWS* } cp1250 { WINDOWS JAVA } # Windows Latin2 (w/ euro update) +ibm-5347_P100-1998 { UTR22* } ibm-5347 { IBM* } windows-1251 { IANA* JAVA* WINDOWS* } cp1251 { WINDOWS JAVA } ANSI1251 # Windows Cyrillic (w/ euro update). ANSI1251 is from Solaris +ibm-5348_P100-1997 { UTR22* } ibm-5348 { IBM* } windows-1252 { IANA* JAVA* WINDOWS* } cp1252 { JAVA } # Windows Latin1 (w/ euro update) +ibm-5349_P100-1998 { UTR22* } ibm-5349 { IBM* } windows-1253 { IANA* JAVA* WINDOWS* } cp1253 { JAVA } # Windows Greek (w/ euro update) +ibm-5350_P100-1998 { UTR22* } ibm-5350 { IBM* } windows-1254 { IANA* JAVA* WINDOWS* } cp1254 { JAVA } # Windows Turkish (w/ euro update) +ibm-9447_P100-2002 { UTR22* } ibm-9447 { IBM* } windows-1255 { IANA* JAVA* WINDOWS* } cp1255 { JAVA } # Windows Hebrew (w/ euro update) +ibm-9448_X100-2005 { UTR22* } ibm-9448 { IBM* } windows-1256 { IANA* JAVA* WINDOWS* } cp1256 { WINDOWS JAVA } # Windows Arabic (w/ euro update) +ibm-9449_P100-2002 { UTR22* } ibm-9449 { IBM* } windows-1257 { IANA* JAVA* WINDOWS* } cp1257 { JAVA } # Windows Baltic (w/ euro update) +ibm-5354_P100-1998 { UTR22* } ibm-5354 { IBM* } windows-1258 { IANA* JAVA* WINDOWS* } cp1258 { JAVA } # Windows Vietnamese (w/ euro update) # These tables are out of date, and most don't have the Euro # Leave the windows- variants untagged. They are alternate tables of the newer ones above. @@ -670,23 +760,21 @@ ibm-5353_P100-1998 { UTR22* } ibm-5353 { IBM* } windows-1257 # Somewhat old W ibm-1258_P100-1997 { UTR22* } ibm-1258 { IBM* } windows-1258 # Old Windows Vietnamese (w/o euro update) macos-0_2-10.2 { UTR22* } macintosh { IANA* MIME* WINDOWS } mac { IANA } csMacintosh { IANA } windows-10000 { WINDOWS* } # Apple latin 1 -macos-6-10.2 { UTR22* } x-mac-greek { MIME* WINDOWS } windows-10006 { WINDOWS* } macgr # Apple Greek -macos-7_3-10.2 { UTR22* } x-mac-cyrillic { MIME* WINDOWS } windows-10007 { WINDOWS* } maccy # Apple Cyrillic +macos-6_2-10.4 { UTR22* } x-mac-greek { MIME* WINDOWS } windows-10006 { WINDOWS* } macgr # Apple Greek +macos-7_3-10.2 { UTR22* } x-mac-cyrillic { MIME* WINDOWS } windows-10007 { WINDOWS* } mac-cyrillic maccy # Apple Cyrillic macos-29-10.2 { UTR22* } x-mac-centraleurroman { MIME* } windows-10029 { WINDOWS* } x-mac-ce { WINDOWS } macce # Apple Central Europe macos-35-10.2 { UTR22* } x-mac-turkish { MIME* WINDOWS } windows-10081 { WINDOWS* } mactr # Apple Turkish ibm-1051_P100-1995 { UTR22* } ibm-1051 { IBM* } hp-roman8 { IANA* } roman8 { IANA } r8 { IANA } csHPRoman8 { IANA } # HP Latin1 ibm-1276_P100-1995 { UTR22* } ibm-1276 { IBM* } Adobe-Standard-Encoding { IANA* } csAdobeStandardEncoding { IANA } # Different from ISO-Unicode-IBM-1276 (GCSGID: 1276) -ibm-1277_P100-1995 { UTR22* } ibm-1277 { IBM* } Adobe-Latin1-Encoding -ibm-1006_P100-1995 { UTR22* } ibm-1006 { IBM* JAVA } cp1006 { JAVA* } 1006 { JAVA } # Urdu -ibm-1098_P100-1995 { UTR22* } ibm-1098 { IBM* JAVA } cp1098 { JAVA* } 1098 { JAVA } # PC Farsi +ibm-1006_P100-1995 { UTR22* } ibm-1006 { IBM* } IBM1006 { JAVA } cp1006 { JAVA* } 1006 { JAVA } # Urdu +ibm-1098_P100-1995 { UTR22* } ibm-1098 { IBM* } IBM1098 { JAVA } cp1098 { JAVA* } 1098 { JAVA } # PC Farsi ibm-1124_P100-1996 { UTR22* } ibm-1124 { IBM* JAVA } cp1124 { JAVA* } 1124 { JAVA } # ISO Cyrillic Ukraine -ibm-1125_P100-1997 { UTR22* } ibm-1125 { IBM* JAVA } cp1125 { JAVA* } # Cyrillic Ukraine PC +ibm-1125_P100-1997 { UTR22* } ibm-1125 { IBM* } cp1125 # Cyrillic Ukraine PC ibm-1129_P100-1997 { UTR22* } ibm-1129 { IBM* } # ISO Vietnamese -ibm-1131_P100-1997 { UTR22* } ibm-1131 { IBM* JAVA } cp1131 { JAVA* } # Cyrillic Belarus PC +ibm-1131_P100-1997 { UTR22* } ibm-1131 { IBM* } cp1131 # Cyrillic Belarus PC ibm-1133_P100-1997 { UTR22* } ibm-1133 { IBM* } # ISO Lao -ibm-1381_P110-1999 { UTR22* } ibm-1381 { IBM* JAVA } cp1381 { JAVA* } 1381 { JAVA } # S-Ch PC Data mixed (IBM GB) # Partially algorithmic converters @@ -695,18 +783,18 @@ ibm-1381_P110-1999 { UTR22* } ibm-1381 { IBM* JAVA } cp1381 { JAVA* } 1381 { J # The _generic_ ISO-2022 converter is disabled starting 2003-dec-03 (ICU 2.8). # For details see the icu mailing list from 2003-dec-01 and the ucnv2022.c file. # Language-specific variants of ISO-2022 continue to be available as listed below. -# ISO_2022 ISO-2022 { MIME* } 2022 cp2022 +# ISO_2022 ISO-2022 -ISO_2022,locale=ja,version=0 ISO-2022-JP { IANA* MIME* JAVA* } csISO2022JP { JAVA } -ISO_2022,locale=ja,version=1 ISO-2022-JP-1 JIS JIS_Encoding { IANA* } -ISO_2022,locale=ja,version=2 ISO-2022-JP-2 { IANA* MIME* } csISO2022JP2 -ISO_2022,locale=ja,version=3 JIS7 csJISEncoding +ISO_2022,locale=ja,version=0 ISO-2022-JP { IANA* MIME* JAVA* } csISO2022JP { IANA JAVA } +ISO_2022,locale=ja,version=1 ISO-2022-JP-1 JIS_Encoding { IANA* } csJISEncoding { IANA } ibm-5054 { IBM* } JIS +ISO_2022,locale=ja,version=2 ISO-2022-JP-2 { IANA* MIME* } csISO2022JP2 { IANA } +ISO_2022,locale=ja,version=3 JIS7 ISO_2022,locale=ja,version=4 JIS8 -ISO_2022,locale=ko,version=0 ISO-2022-KR { IANA* MIME* } csISO2022KR # This uses ibm-949 -ISO_2022,locale=ko,version=1 ibm-25546 -ISO_2022,locale=zh,version=0 ISO-2022-CN { IANA* MIME* } # csISO2022CN -ISO_2022,locale=zh,version=1 ISO-2022-CN-EXT { IANA* MIME* } -HZ HZ-GB-2312 { IANA* MIME* } +ISO_2022,locale=ko,version=0 ISO-2022-KR { IANA* MIME* JAVA* } csISO2022KR { IANA JAVA } # This uses ibm-949 +ISO_2022,locale=ko,version=1 ibm-25546 { IBM* } +ISO_2022,locale=zh,version=0 ISO-2022-CN { IANA* JAVA* } csISO2022CN { JAVA } +ISO_2022,locale=zh,version=1 ISO-2022-CN-EXT { IANA* } +HZ HZ-GB-2312 { IANA* } # Part of iso-2022 ibm-897_P100-1995 { UTR22* } ibm-897 { IBM* } JIS_X0201 { IANA* } X0201 { IANA } csHalfWidthKatakana { IANA } @@ -723,113 +811,115 @@ ISCII,version=7 x-iscii-ka { WINDOWS } windows-57008 { WINDOWS* } iscii- ISCII,version=8 x-iscii-ma { WINDOWS } windows-57009 { WINDOWS* } iscii-mlm # Lotus specific -LMBCS-1 lmbcs -LMBCS-2 -LMBCS-3 -LMBCS-4 -LMBCS-5 -LMBCS-6 -LMBCS-8 -LMBCS-11 -LMBCS-16 -LMBCS-17 -LMBCS-18 -LMBCS-19 +LMBCS-1 lmbcs ibm-65025 { IBM* } + +# These Lotus specific converters still work, but they aren't advertised in this alias table. +# These are almost never used outside of Lotus software, and they take a lot of time when creating the available converter list. +#LMBCS-2 +#LMBCS-3 +#LMBCS-4 +#LMBCS-5 +#LMBCS-6 +#LMBCS-8 +#LMBCS-11 +#LMBCS-16 +#LMBCS-17 +#LMBCS-18 +#LMBCS-19 # EBCDIC codepages according to the CDRA # without Euro ibm-37_P100-1995 { UTR22* } # EBCDIC US ibm-37 { IBM* } - IBM037 { IANA* } - ibm-037 { JAVA } - ebcdic-cp-us { IANA } - ebcdic-cp-ca { IANA } - ebcdic-cp-wt { IANA } - ebcdic-cp-nl { IANA } - csIBM037 { IANA } + IBM037 { IANA* JAVA } + ibm-037 # { JAVA } + ebcdic-cp-us { IANA JAVA } + ebcdic-cp-ca { IANA JAVA } + ebcdic-cp-wt { IANA JAVA } + ebcdic-cp-nl { IANA JAVA } + csIBM037 { IANA JAVA } cp037 { JAVA* } 037 { JAVA } - cpibm37 + cpibm37 { JAVA } cp37 -ibm-273_P100-1995 { UTR22* } ibm-273 { IBM* } IBM273 { IANA* JAVA } CP273 { IANA JAVA* } csIBM273 { IANA } ebcdic-de cpibm273 273 # EBCDIC Germanay, Austria -ibm-277_P100-1995 { UTR22* } ibm-277 { IBM* } IBM277 { IANA* JAVA } cp277 { JAVA* } EBCDIC-CP-DK { IANA } EBCDIC-CP-NO { IANA } csIBM277 { IANA } ebcdic-dk cpibm277 277 # EBCDIC Denmark -ibm-278_P100-1995 { UTR22* } ibm-278 { IBM* } IBM278 { IANA* JAVA } cp278 { JAVA* } ebcdic-cp-fi { IANA } ebcdic-cp-se { IANA } csIBM278 { IANA } ebcdic-sv cpibm278 278 # EBCDIC Sweden -ibm-280_P100-1995 { UTR22* } ibm-280 { IBM* } IBM280 { IANA* JAVA } CP280 { IANA JAVA* } ebcdic-cp-it { IANA } csIBM280 { IANA } cpibm280 280 # EBCDIC Italy -ibm-284_P100-1995 { UTR22* } ibm-284 { IBM* } IBM284 { IANA* JAVA } CP284 { IANA JAVA* } ebcdic-cp-es { IANA } csIBM284 { IANA } cpibm284 284 # EBCDIC Spain -ibm-285_P100-1995 { UTR22* } ibm-285 { IBM* } IBM285 { IANA* JAVA } CP285 { IANA JAVA* } ebcdic-cp-gb { IANA } csIBM285 { IANA } ebcdic-gb cpibm285 285 # EBCDIC UK Ireland +ibm-273_P100-1995 { UTR22* } ibm-273 { IBM* } IBM273 { IANA* JAVA } CP273 { IANA JAVA* } csIBM273 { IANA } ebcdic-de 273 { JAVA } # EBCDIC Germanay, Austria +ibm-277_P100-1995 { UTR22* } ibm-277 { IBM* } IBM277 { IANA* JAVA } cp277 { JAVA* } EBCDIC-CP-DK { IANA } EBCDIC-CP-NO { IANA } csIBM277 { IANA } ebcdic-dk 277 { JAVA } # EBCDIC Denmark +ibm-278_P100-1995 { UTR22* } ibm-278 { IBM* } IBM278 { IANA* JAVA } cp278 { JAVA* } ebcdic-cp-fi { IANA } ebcdic-cp-se { IANA } csIBM278 { IANA } ebcdic-sv { JAVA } 278 { JAVA } # EBCDIC Sweden +ibm-280_P100-1995 { UTR22* } ibm-280 { IBM* } IBM280 { IANA* JAVA } CP280 { IANA JAVA* } ebcdic-cp-it { IANA } csIBM280 { IANA } 280 { JAVA } # EBCDIC Italy +ibm-284_P100-1995 { UTR22* } ibm-284 { IBM* } IBM284 { IANA* JAVA } CP284 { IANA JAVA* } ebcdic-cp-es { IANA } csIBM284 { IANA } cpibm284 { JAVA } 284 { JAVA } # EBCDIC Spain +ibm-285_P100-1995 { UTR22* } ibm-285 { IBM* } IBM285 { IANA* JAVA } CP285 { IANA JAVA* } ebcdic-cp-gb { IANA } csIBM285 { IANA } cpibm285 { JAVA } ebcdic-gb { JAVA } 285 { JAVA } # EBCDIC UK Ireland ibm-290_P100-1995 { UTR22* } ibm-290 { IBM* } IBM290 { IANA* } cp290 { IANA } EBCDIC-JP-kana { IANA } csIBM290 { IANA } # host SBCS (Katakana) -ibm-297_P100-1995 { UTR22* } ibm-297 { IBM* } IBM297 { IANA* JAVA } cp297 { IANA JAVA* } ebcdic-cp-fr { IANA } csIBM297 { IANA } cpibm297 297 # EBCDIC France -ibm-420_X120-1999 { UTR22* } ibm-420 { IBM* } IBM420 { IANA* JAVA } cp420 { IANA JAVA* } ebcdic-cp-ar1 { IANA } csIBM420 { IANA } 420 # EBCDIC Arabic (all presentation shapes) -ibm-424_P100-1995 { UTR22* } ibm-424 { IBM* } IBM424 { IANA* JAVA } cp424 { IANA JAVA* } ebcdic-cp-he { IANA } csIBM424 { IANA } 424 # EBCDIC Hebrew -ibm-500_P100-1995 { UTR22* } ibm-500 { IBM* } IBM500 { IANA* JAVA } CP500 { IANA JAVA* } ebcdic-cp-be { IANA } csIBM500 { IANA } ebcdic-cp-ch { IANA } cpibm500 500 # EBCDIC International Latin1 +ibm-297_P100-1995 { UTR22* } ibm-297 { IBM* } IBM297 { IANA* JAVA } cp297 { IANA JAVA* } ebcdic-cp-fr { IANA } csIBM297 { IANA } cpibm297 { JAVA } 297 { JAVA } # EBCDIC France +ibm-420_X120-1999 { UTR22* } ibm-420 { IBM* } IBM420 { IANA* JAVA } cp420 { IANA JAVA* } ebcdic-cp-ar1 { IANA } csIBM420 { IANA } 420 { JAVA } # EBCDIC Arabic (all presentation shapes) +ibm-424_P100-1995 { UTR22* } ibm-424 { IBM* } IBM424 { IANA* JAVA } cp424 { IANA JAVA* } ebcdic-cp-he { IANA } csIBM424 { IANA } 424 { JAVA } # EBCDIC Hebrew +ibm-500_P100-1995 { UTR22* } ibm-500 { IBM* } IBM500 { IANA* JAVA } CP500 { IANA JAVA* } ebcdic-cp-be { IANA } csIBM500 { IANA } ebcdic-cp-ch { IANA } 500 # EBCDIC International Latin1 ibm-803_P100-1999 { UTR22* } ibm-803 { IBM* } cp803 # Old EBCDIC Hebrew -ibm-838_P100-1995 { UTR22* } ibm-838 { IBM* JAVA } IBM-Thai { IANA* } csIBMThai { IANA } cp838 { JAVA* } 838 { JAVA } ibm-9030 { IBM } # EBCDIC Thai. Yes ibm-9030 is an alias. +ibm-838_P100-1995 { UTR22* } ibm-838 { IBM* } IBM838 { JAVA } IBM-Thai { IANA* JAVA } csIBMThai { IANA } cp838 { JAVA* } 838 { JAVA } ibm-9030 { IBM } # EBCDIC Thai. Yes ibm-9030 is an alias. ibm-870_P100-1995 { UTR22* } ibm-870 { IBM* } IBM870 { IANA* JAVA } CP870 { IANA JAVA* } ebcdic-cp-roece { IANA } ebcdic-cp-yu { IANA } csIBM870 { IANA } # EBCDIC Latin 2 -ibm-871_P100-1995 { UTR22* } ibm-871 { IBM* } IBM871 { IANA* } ebcdic-cp-is { IANA } csIBM871 { IANA } CP871 { IANA } ebcdic-is cpibm871 871 # EBCDIC Iceland -ibm-875_P100-1995 { UTR22* } ibm-875 { IBM* } IBM875 { JAVA } cp875 { JAVA* } 875 # EBCDIC Greek -ibm-918_P100-1995 { UTR22* } ibm-918 { IBM* } IBM918 { IANA* JAVA } CP918 { IANA JAVA* } ebcdic-cp-ar2 { IANA } csIBM918 { IANA } # EBCDIC Urdu +ibm-871_P100-1995 { UTR22* } ibm-871 { IBM* } IBM871 { IANA* JAVA } ebcdic-cp-is { IANA JAVA } csIBM871 { IANA JAVA } CP871 { IANA JAVA* } ebcdic-is { JAVA } 871 { JAVA } # EBCDIC Iceland +ibm-875_P100-1995 { UTR22* } ibm-875 { IBM* } IBM875 { JAVA } cp875 { JAVA* } 875 { JAVA } # EBCDIC Greek +ibm-918_P100-1995 { UTR22* } ibm-918 { IBM* } IBM918 { IANA* JAVA } CP918 { IANA JAVA* } ebcdic-cp-ar2 { IANA } csIBM918 { IANA } # EBCDIC Urdu ibm-930_P120-1999 { UTR22* } # EBCDIC_STATEFUL Katakana-Kanji Host Mixed. - ibm-930 { IBM* JAVA } + ibm-930 { IBM* } ibm-5026 { IBM } # Yes this is correct + IBM930 { JAVA } cp930 { JAVA* } - cpibm930 930 { JAVA } -ibm-933_P110-1995 { UTR22* } ibm-933 { IBM* JAVA } cp933 { JAVA* } cpibm933 933 { JAVA } # Korea EBCDIC MIXED -ibm-935_P110-1999 { UTR22* } ibm-935 { IBM* JAVA } cp935 { JAVA* } cpibm935 935 { JAVA } # China EBCDIC MIXED. Need to use Unicode, ibm-1388 or gb18030 instead because it is required by the government of China. -ibm-937_P110-1999 { UTR22* } ibm-937 { IBM* JAVA } cp937 { JAVA* } cpibm937 937 { JAVA } # Taiwan EBCDIC MIXED +ibm-933_P110-1995 { UTR22* } ibm-933 { IBM* JAVA } cp933 { JAVA* } 933 { JAVA } # Korea EBCDIC MIXED +ibm-935_P110-1999 { UTR22* } ibm-935 { IBM* JAVA } cp935 { JAVA* } 935 { JAVA } # China EBCDIC MIXED. Need to use Unicode, ibm-1388 or gb18030 instead because it is required by the government of China. +ibm-937_P110-1999 { UTR22* } ibm-937 { IBM* JAVA } cp937 { JAVA* } 937 { JAVA } # Taiwan EBCDIC MIXED ibm-939_P120-1999 { UTR22* } # EBCDIC_STATEFUL Latin-Kanji Host Mixed. - ibm-939 { IBM* JAVA } + ibm-939 { IBM* } ibm-931 { IBM } # Yes this is correct ibm-5035 { IBM } # Yes this is also correct + IBM939 { JAVA } cp939 { JAVA* } 939 { JAVA } -ibm-1025_P100-1995 { UTR22* } ibm-1025 { IBM* JAVA } cp1025 { JAVA* } 1025 { JAVA } # EBCDIC Cyrillic -ibm-1026_P100-1995 { UTR22* } ibm-1026 { IBM* JAVA } IBM1026 { IANA* } CP1026 { IANA JAVA* } csIBM1026 { IANA } 1026 { JAVA } # EBCDIC Turkey -ibm-1047_P100-1995 { UTR22* } ibm-1047 { IBM* } IBM1047 { IANA* } cpibm1047 # EBCDIC Open systems Latin1 -ibm-1097_P100-1995 { UTR22* } ibm-1097 { IBM* JAVA } cp1097 { JAVA* } 1097 { JAVA } # EBCDIC Farsi -ibm-1112_P100-1995 { UTR22* } ibm-1112 { IBM* JAVA } cp1112 { JAVA* } 1112 { JAVA } # EBCDIC Baltic -ibm-1122_P100-1999 { UTR22* } ibm-1122 { IBM* JAVA } cp1122 { JAVA* } 1122 { JAVA } # EBCDIC Estonia -ibm-1123_P100-1995 { UTR22* } ibm-1123 { IBM* JAVA } cp1123 { JAVA* } 1123 { JAVA } cpibm1123 # EBCDIC Cyrillic Ukraine +ibm-1025_P100-1995 { UTR22* } ibm-1025 { IBM* JAVA } cp1025 { JAVA* } 1025 { JAVA } # EBCDIC Cyrillic +ibm-1026_P100-1995 { UTR22* } ibm-1026 { IBM* } IBM1026 { IANA* JAVA } CP1026 { IANA JAVA* } csIBM1026 { IANA } 1026 { JAVA } # EBCDIC Turkey +ibm-1047_P100-1995 { UTR22* } ibm-1047 { IBM* } IBM1047 { IANA* JAVA } cp1047 { JAVA* } 1047 { JAVA } # EBCDIC Open systems Latin1 +ibm-1097_P100-1995 { UTR22* } ibm-1097 { IBM* JAVA } cp1097 { JAVA* } 1097 { JAVA } # EBCDIC Farsi +ibm-1112_P100-1995 { UTR22* } ibm-1112 { IBM* JAVA } cp1112 { JAVA* } 1112 { JAVA } # EBCDIC Baltic +ibm-1122_P100-1999 { UTR22* } ibm-1122 { IBM* JAVA } cp1122 { JAVA* } 1122 { JAVA } # EBCDIC Estonia +ibm-1123_P100-1995 { UTR22* } ibm-1123 { IBM* JAVA } cp1123 { JAVA* } 1123 { JAVA } # EBCDIC Cyrillic Ukraine ibm-1130_P100-1997 { UTR22* } ibm-1130 { IBM* } # EBCDIC Vietnamese ibm-1132_P100-1998 { UTR22* } ibm-1132 { IBM* } # EBCDIC Lao +ibm-1137_P100-1999 { UTR22* } ibm-1137 { IBM* } # Devanagari EBCDIC (based on Unicode character set) +ibm-4517_P100-2005 { UTR22* } ibm-4517 { IBM* } # EBCDIC Arabic. Update of ibm-421 # with Euro -ibm-1140_P100-1997 { UTR22* } ibm-1140 { IBM* JAVA } IBM01140 { IANA* } CCSID01140 { IANA } CP01140 { IANA } cp1140 { JAVA* } cpibm1140 ebcdic-us-37+euro { IANA } # EBCDIC US -ibm-1141_P100-1997 { UTR22* } ibm-1141 { IBM* JAVA } IBM01141 { IANA* } CCSID01141 { IANA } CP01141 { IANA } cp1141 { JAVA* } cpibm1141 ebcdic-de-273+euro { IANA } # EBCDIC Germanay, Austria -ibm-1142_P100-1997 { UTR22* } ibm-1142 { IBM* JAVA } IBM01142 { IANA* } CCSID01142 { IANA } CP01142 { IANA } cp1142 { JAVA* } cpibm1142 ebcdic-dk-277+euro { IANA } ebcdic-no-277+euro { IANA } # EBCDIC Denmark -ibm-1143_P100-1997 { UTR22* } ibm-1143 { IBM* JAVA } IBM01143 { IANA* } CCSID01143 { IANA } CP01143 { IANA } cp1143 { JAVA* } cpibm1143 ebcdic-fi-278+euro { IANA } ebcdic-se-278+euro { IANA } # EBCDIC Sweden -ibm-1144_P100-1997 { UTR22* } ibm-1144 { IBM* JAVA } IBM01144 { IANA* } CCSID01144 { IANA } CP01144 { IANA } cp1144 { JAVA* } cpibm1144 ebcdic-it-280+euro { IANA } # EBCDIC Italy -ibm-1145_P100-1997 { UTR22* } ibm-1145 { IBM* JAVA } IBM01145 { IANA* } CCSID01145 { IANA } CP01145 { IANA } cp1145 { JAVA* } cpibm1145 ebcdic-es-284+euro { IANA } # EBCDIC Spain -ibm-1146_P100-1997 { UTR22* } ibm-1146 { IBM* JAVA } IBM01146 { IANA* } CCSID01146 { IANA } CP01146 { IANA } cp1146 { JAVA* } cpibm1146 ebcdic-gb-285+euro { IANA } # EBCDIC UK Ireland -ibm-1147_P100-1997 { UTR22* } ibm-1147 { IBM* JAVA } IBM01147 { IANA* } CCSID01147 { IANA } CP01147 { IANA } cp1147 { JAVA* } cpibm1147 ebcdic-fr-297+euro { IANA } # EBCDIC France -ibm-1148_P100-1997 { UTR22* } ibm-1148 { IBM* JAVA } IBM01148 { IANA* } CCSID01148 { IANA } CP01148 { IANA } cp1148 { JAVA* } cpibm1148 ebcdic-international-500+euro { IANA } # EBCDIC International Latin1 -ibm-1149_P100-1997 { UTR22* } ibm-1149 { IBM* JAVA } IBM01149 { IANA* } CCSID01149 { IANA } CP01149 { IANA } cp1149 { JAVA* } cpibm1149 ebcdic-is-871+euro { IANA } # EBCDIC Iceland -ibm-1153_P100-1999 { UTR22* } ibm-1153 { IBM* } cpibm1153 # EBCDIC latin 2 -ibm-1154_P100-1999 { UTR22* } ibm-1154 { IBM* } cpibm1154 # EBCDIC Cyrillic Multilingual -ibm-1155_P100-1999 { UTR22* } ibm-1155 { IBM* } cpibm1155 # EBCDIC Turkey -ibm-1156_P100-1999 { UTR22* } ibm-1156 { IBM* } cpibm1156 # EBCDIC Baltic Multilingual -ibm-1157_P100-1999 { UTR22* } ibm-1157 { IBM* } cpibm1157 # EBCDIC Estonia -ibm-1158_P100-1999 { UTR22* } ibm-1158 { IBM* } cpibm1158 # EBCDIC Cyrillic Ukraine -ibm-1160_P100-1999 { UTR22* } ibm-1160 { IBM* } cpibm1160 # EBCDIC Thailand -ibm-1164_P100-1999 { UTR22* } ibm-1164 { IBM* } cpibm1164 # EBCDIC Viet Nam -ibm-1364_P110-1997 { UTR22* } ibm-1364 { IBM* } cp1364 # Korean Host Mixed -ibm-1371_P100-1999 { UTR22* } ibm-1371 { IBM* } cpibm1371 # Taiwan EBCDIC MIXED -ibm-1388_P103-2001 { UTR22* } ibm-1388 { IBM* } ibm-9580 { IBM } # S-Ch DBCS-Host Data GBK EBCDIC_STATEFUL. Yes ibm-9580 is an alias. -ibm-1390_P110-2003 { UTR22* } ibm-1390 { IBM* } cpibm1390 # Japan EBCDIC MIXED (JIS X 0213) -ibm-1399_P110-2003 { UTR22* } ibm-1399 { IBM* } # Host MBCS (Latin-Kanji) (JIS X 0213) -ibm-16684_P110-2003 { UTR22* } ibm-16684 { IBM* } # DBCS Jis + Roman Jis Host. This is the DBCS portion of ibm-1390 and ibm-1399 (JIS X 0213) -ibm-4899_P100-1998 { UTR22* } ibm-4899 { IBM* } cpibm4899 # Old EBCDIC Hebrew -ibm-4971_P100-1999 { UTR22* } ibm-4971 { IBM* } cpibm4971 # EBCDIC Greek -ibm-12712_P100-1998 { UTR22* } ibm-12712 { IBM* } cpibm12712 ebcdic-he # EBCDIC Hebrew (new sheqel, control charaters update) -ibm-16804_X110-1999 { UTR22* } ibm-16804 { IBM* } cpibm16804 ebcdic-ar # EBCDIC Arabic - - -# TODO: Consider removing the mappings in this section -ibm-1137_P100-1999 { UTR22* } ibm-1137 { IBM* } # Devanagari EBCDIC (based on Unicode character set) -ibm-5123_P100-1999 { UTR22* } ibm-5123 { IBM* } # Host Roman Jis. Euro update of ibm-1027 -ibm-8482_P100-1999 { UTR22* } ibm-8482 { IBM* } # host SBCS (Katakana). Euro update of ibm-290 +ibm-1140_P100-1997 { UTR22* } ibm-1140 { IBM* } IBM01140 { IANA* JAVA } CCSID01140 { IANA JAVA } CP01140 { IANA JAVA } cp1140 { JAVA* } ebcdic-us-37+euro { IANA } # EBCDIC US +ibm-1141_P100-1997 { UTR22* } ibm-1141 { IBM* } IBM01141 { IANA* JAVA } CCSID01141 { IANA JAVA } CP01141 { IANA JAVA } cp1141 { JAVA* } ebcdic-de-273+euro { IANA } # EBCDIC Germanay, Austria +ibm-1142_P100-1997 { UTR22* } ibm-1142 { IBM* } IBM01142 { IANA* JAVA } CCSID01142 { IANA JAVA } CP01142 { IANA JAVA } cp1142 { JAVA* } ebcdic-dk-277+euro { IANA } ebcdic-no-277+euro { IANA } # EBCDIC Denmark +ibm-1143_P100-1997 { UTR22* } ibm-1143 { IBM* } IBM01143 { IANA* JAVA } CCSID01143 { IANA JAVA } CP01143 { IANA JAVA } cp1143 { JAVA* } ebcdic-fi-278+euro { IANA } ebcdic-se-278+euro { IANA } # EBCDIC Sweden +ibm-1144_P100-1997 { UTR22* } ibm-1144 { IBM* } IBM01144 { IANA* JAVA } CCSID01144 { IANA JAVA } CP01144 { IANA JAVA } cp1144 { JAVA* } ebcdic-it-280+euro { IANA } # EBCDIC Italy +ibm-1145_P100-1997 { UTR22* } ibm-1145 { IBM* } IBM01145 { IANA* JAVA } CCSID01145 { IANA JAVA } CP01145 { IANA JAVA } cp1145 { JAVA* } ebcdic-es-284+euro { IANA } # EBCDIC Spain +ibm-1146_P100-1997 { UTR22* } ibm-1146 { IBM* } IBM01146 { IANA* JAVA } CCSID01146 { IANA JAVA } CP01146 { IANA JAVA } cp1146 { JAVA* } ebcdic-gb-285+euro { IANA } # EBCDIC UK Ireland +ibm-1147_P100-1997 { UTR22* } ibm-1147 { IBM* } IBM01147 { IANA* JAVA } CCSID01147 { IANA JAVA } CP01147 { IANA JAVA } cp1147 { JAVA* } ebcdic-fr-297+euro { IANA } # EBCDIC France +ibm-1148_P100-1997 { UTR22* } ibm-1148 { IBM* } IBM01148 { IANA* JAVA } CCSID01148 { IANA JAVA } CP01148 { IANA JAVA } cp1148 { JAVA* } ebcdic-international-500+euro { IANA } # EBCDIC International Latin1 +ibm-1149_P100-1997 { UTR22* } ibm-1149 { IBM* } IBM01149 { IANA* JAVA } CCSID01149 { IANA JAVA } CP01149 { IANA JAVA } cp1149 { JAVA* } ebcdic-is-871+euro { IANA } # EBCDIC Iceland +ibm-1153_P100-1999 { UTR22* } ibm-1153 { IBM* } # EBCDIC latin 2 +ibm-1154_P100-1999 { UTR22* } ibm-1154 { IBM* } # EBCDIC Cyrillic Multilingual +ibm-1155_P100-1999 { UTR22* } ibm-1155 { IBM* } # EBCDIC Turkey +ibm-1156_P100-1999 { UTR22* } ibm-1156 { IBM* } # EBCDIC Baltic Multilingual +ibm-1157_P100-1999 { UTR22* } ibm-1157 { IBM* } # EBCDIC Estonia +ibm-1158_P100-1999 { UTR22* } ibm-1158 { IBM* } # EBCDIC Cyrillic Ukraine +ibm-1160_P100-1999 { UTR22* } ibm-1160 { IBM* } # EBCDIC Thailand +ibm-1164_P100-1999 { UTR22* } ibm-1164 { IBM* } # EBCDIC Viet Nam +ibm-1364_P110-1997 { UTR22* } ibm-1364 { IBM* } # Korean Host Mixed +ibm-1371_P100-1999 { UTR22* } ibm-1371 { IBM* } # Taiwan EBCDIC MIXED +ibm-1388_P103-2001 { UTR22* } ibm-1388 { IBM* } ibm-9580 { IBM } # S-Ch DBCS-Host Data GBK EBCDIC_STATEFUL. Yes ibm-9580 is an alias. +ibm-1390_P110-2003 { UTR22* } ibm-1390 { IBM* } # Japan EBCDIC MIXED (JIS X 0213) +ibm-1399_P110-2003 { UTR22* } ibm-1399 { IBM* } # Host MBCS (Latin-Kanji) (JIS X 0213) +ibm-5123_P100-1999 { UTR22* } ibm-5123 { IBM* } # Host Roman Jis. Euro update of ibm-1027. SBCS portion of ibm-1390. +ibm-8482_P100-1999 { UTR22* } ibm-8482 { IBM* } # host SBCS (Katakana). Euro update of ibm-290. SBCS portion of ibm-1399. +ibm-16684_P110-2003 { UTR22* } ibm-16684 { IBM* } # DBCS Jis + Roman Jis Host. This is the DBCS portion of ibm-1390 and ibm-1399 (JIS X 0213) +ibm-4899_P100-1998 { UTR22* } ibm-4899 { IBM* } # Old EBCDIC Hebrew. Update of ibm-803 +ibm-9067_X100-2005 { UTR22* } ibm-9067 { IBM* } # EBCDIC Greek. Update of ibm-875 and ibm-4971 +ibm-12712_P100-1998 { UTR22* } ibm-12712 { IBM* } ebcdic-he # EBCDIC Hebrew (new sheqel, control charaters update). Update of ibm-424 +ibm-16804_X110-1999 { UTR22* } ibm-16804 { IBM* } ebcdic-ar # EBCDIC Arabic. Update of ibm-420 # EBCDIC codepages for S/390, with LF and NL codes swapped @@ -881,6 +971,8 @@ ibm-16804_X110-1999,swaplfnl ibm-16804-s390 ebcdic-xml-us +# TODO Consider removing this table +ibm-4971_P100-1999 { UTR22* } ibm-4971 { IBM* } # EBCDIC Greek. Update of ibm-875 and superceded by ibm-9067 # These were removed due to age, and they are rarely used. @@ -904,4 +996,5 @@ ebcdic-xml-us #ibm-1159_P100-1999 { UTR22* } ibm-1159 { IBM* } # SBCS T-Ch Host. Euro update of ibm-28709. This is used in combination with another CCSID mapping. #ibm-9027_P100-1999 { UTR22* } ibm-9027 { IBM* } # DBCS T-Ch Host. Euro update of ibm-835. DBCS portion of ibm-1371. +#ibm-1381_P110-1999 { UTR22* } ibm-1381 { IBM* JAVA } cp1381 { JAVA* } 1381 { JAVA } # S-Ch PC Data mixed (IBM GB) diff --git a/icuSources/data/mappings/gb18030.ucm b/icuSources/data/mappings/gb18030.ucm index a6d7cbd7..b4616635 100644 --- a/icuSources/data/mappings/gb18030.ucm +++ b/icuSources/data/mappings/gb18030.ucm @@ -1,4 +1,4 @@ -# Copyright (C) 2000, International Business Machines Corporation and others. +# Copyright (C) 2000-2005, International Business Machines Corporation and others. # All Rights Reserved. # ICU codepage data for GB 18030 @@ -36,7 +36,7 @@ # GB 18030 BMP mappings that are not handled algorithmically are # generated using gbmake4 and gbtoucm tools. Please see charset/source/gb18030/gb18030.html -# or http://oss.software.ibm.com/cvs/icu/~checkout~/charset/source/gb18030/gb18030.html +# or http://dev.icu-project.org/cgi-bin/viewcvs.cgi/*checkout*/charset/source/gb18030/gb18030.html # for more information. CHARMAP diff --git a/icuSources/data/mappings/ibm-1375_P100-2003.ucm b/icuSources/data/mappings/ibm-1375_P100-2003.ucm index 1be44837..51c2940b 100644 --- a/icuSources/data/mappings/ibm-1375_P100-2003.ucm +++ b/icuSources/data/mappings/ibm-1375_P100-2003.ucm @@ -1,11 +1,11 @@ # *************************************************************************** # * -# * Copyright (C) 1995-2004, International Business Machines +# * Copyright (C) 1995-2005, International Business Machines # * Corporation and others. All Rights Reserved. # * # *************************************************************************** # -# File created by rptp2ucm (compiled on Apr 13 2004) +# File created by rptp2ucm (compiled on Jun 21 2005) # from source files F204055F.RPMAP100 and 055FF204.TPMAP100 # "ibm-1375_P100-2003" @@ -150,132 +150,34 @@ CHARMAP \x7D |0 \x7E |0 \x7F |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \xA1\xB1 |0 \xC6\xD8 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \xA1\xC2 |0 \xA2\x58 |0 \xA1\xD3 |0 - \x1A |2 - \x1A |2 - \x1A |2 \xA1\x50 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x59 |0 \x88\x57 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x5D |0 \x88\x5B |0 \x88\x66 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x61 |0 \x88\x5F |0 - \x1A |2 - \x1A |2 - \x1A |2 \xA1\xD1 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x6A |0 \x88\x68 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x6F |0 \x88\x6D |0 \x88\xA7 |0 - \x1A |2 \x88\x73 |0 \x88\x71 |0 - \x1A |2 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x77 |0 \x88\x75 |0 - \x1A |2 - \x1A |2 - \x1A |2 \xA1\xD2 |0 \xC8\xFB |0 \x88\x7B |0 \x88\x79 |0 - \x1A |2 \x88\xA2 |0 - \x1A |2 - \x1A |2 - \x1A |2 \x88\x56 |0 \x88\x67 |0 \x88\x5A |0 @@ -303,8 +205,7 @@ CHARMAP \xC8\xF8 |0 \xC8\xF7 |0 \x88\xA8 |0 - \xA1\x48 |2 - \xC8\xFE |3 + \xC8\xFE |0 \xC8\xF9 |0 \xC8\xF5 |0 \xC8\xFD |0 diff --git a/icuSources/data/mappings/ibm-1381_P110-1999.ucm b/icuSources/data/mappings/ibm-1381_P110-1999.ucm deleted file mode 100644 index 9c5d0268..00000000 --- a/icuSources/data/mappings/ibm-1381_P110-1999.ucm +++ /dev/null @@ -1,9649 +0,0 @@ -# *************************************************************************** -# * -# * Copyright (C) 1995-2003, International Business Machines -# * Corporation and others. All Rights Reserved. -# * -# *************************************************************************** -# -# File created by rptp2ucm (compiled on Dec 3 2002) -# from source files 34B00565.RPMAP110 and 056534B0.TPMAP100 -# - "ibm-1381_P110-1999" - "AXXXX" - 2 - 1 - "MBCS" - \xFE\xFE - \x7F - "ASCII" - "ibm-1381_VSUB_VPUA" - - 0-84, 8c-fe:1 - a1-fe - -CHARMAP - \x00 |0 - \x01 |0 - \x02 |0 - \x03 |0 - \x04 |0 - \x05 |0 - \x06 |0 - \x07 |0 - \x08 |0 - \x09 |0 - \x0A |0 - \x0B |0 - \x0C |0 - \x0D |0 - \x0E |0 - \x0F |0 - \x10 |0 - \x11 |0 - \x12 |0 - \x13 |0 - \x14 |0 - \x15 |0 - \x16 |0 - \x17 |0 - \x18 |0 - \x19 |0 - \x7F |0 - \x1B |0 - \x1A |0 - \x1D |0 - \x1E |0 - \x1F |0 - \x20 |0 - \x21 |0 - \x22 |0 - \x23 |0 - \x24 |0 - \x25 |0 - \x26 |0 - \x27 |0 - \x28 |0 - \x29 |0 - \x2A |0 - \x2B |0 - \x2C |0 - \x2D |0 - \x2E |0 - \x2F |0 - \x30 |0 - \x31 |0 - \x32 |0 - \x33 |0 - \x34 |0 - \x35 |0 - \x36 |0 - \x37 |0 - \x38 |0 - \x39 |0 - \x3A |0 - \x3B |0 - \x3C |0 - \x3D |0 - \x3E |0 - \x3F |0 - \x40 |0 - \x41 |0 - \x42 |0 - \x43 |0 - \x44 |0 - \x45 |0 - \x46 |0 - \x47 |0 - \x48 |0 - \x49 |0 - \x4A |0 - \x4B |0 - \x4C |0 - \x4D |0 - \x4E |0 - \x4F |0 - \x50 |0 - \x51 |0 - \x52 |0 - \x53 |0 - \x54 |0 - \x55 |0 - \x56 |0 - \x57 |0 - \x58 |0 - \x59 |0 - \x5A |0 - \x5B |0 - \x5C |0 - \x5D |0 - \x5E |0 - \x5F |0 - \x60 |0 - \x61 |0 - \x62 |0 - \x63 |0 - \x64 |0 - \x65 |0 - \x66 |0 - \x67 |0 - \x68 |0 - \x69 |0 - \x6A |0 - \x6B |0 - \x6C |0 - \x6D |0 - \x6E |0 - \x6F |0 - \x70 |0 - \x71 |0 - \x72 |0 - \x73 |0 - \x74 |0 - \x75 |0 - \x76 |0 - \x77 |0 - \x78 |0 - \x79 |0 - \x7A |0 - \x7B |0 - \x7C |0 - \x7D |0 - \x7E |0 - \x1C |0 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x80 |0 - \xA1\xE8 |0 - \x82 |0 - \x84 |0 - \xA1\xEC |0 - \xA1\xA7 |0 - \x7F |2 - \x7F |2 - \x7F |2 - \x81 |0 - \x7F |2 - \x7F |2 - \x7F |2 - \xA1\xE3 |0 - \xA1\xC0 |0 - \x7F |2 - \x7F |2 - \xA3\xA7 |0 - \x7F |2 - \x7F |2 - \xA1\xA4 |1 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \xA1\xC1 |0 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \xA8\xA4 |0 - \xA8\xA2 |0 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \xA8\xA8 |0 - \xA8\xA6 |0 - \xA8\xBA |0 - \x7F |2 - \xA8\xAC |0 - \xA8\xAA |0 - \x7F |2 - \x7F |2 - \x7F |2 - \x7F |2 - \xA8\xB0 |0 - \xA8\xAE |0 - \x7F |2 - \x7F |2 - \x7F |2 - \xA1\xC2 |0 - \x7F |2 - \xA8\xB4 |0 - \xA8\xB2 |0 - \x7F |2 - \xA8\xB9 |0 - \x7F |2 - \x7F |2 - \x7F |2 - \xA8\xA1 |0 - \xA8\xA5 |0 - \xA8\xA7 |0 - \xA8\xA9 |0 - \xA8\xAD |0 - \xA8\xB1 |0 - \xA8\xA3 |0 - \xA8\xAB |0 - \xA8\xAF |0 - \xA8\xB3 |0 - \xA8\xB5 |0 - \xA8\xB6 |0 - \xA8\xB7 |0 - \xA8\xB8 |0 - \xA1\xA6 |0 - \xA1\xA5 |0 - \xA6\xA1 |0 - \xA6\xA2 |0 - \xA6\xA3 |0 - \xA6\xA4 |0 - \xA6\xA5 |0 - \xA6\xA6 |0 - \xA6\xA7 |0 - \xA6\xA8 |0 - \xA6\xA9 |0 - \xA6\xAA |0 - \xA6\xAB |0 - \xA6\xAC |0 - \xA6\xAD |0 - \xA6\xAE |0 - \xA6\xAF |0 - \xA6\xB0 |0 - \xA6\xB1 |0 - \xA6\xB2 |0 - \xA6\xB3 |0 - \xA6\xB4 |0 - \xA6\xB5 |0 - \xA6\xB6 |0 - \xA6\xB7 |0 - \xA6\xB8 |0 - \xA6\xC1 |0 - \xA6\xC2 |0 - \xA6\xC3 |0 - \xA6\xC4 |0 - \xA6\xC5 |0 - \xA6\xC6 |0 - \xA6\xC7 |0 - \xA6\xC8 |0 - \xA6\xC9 |0 - \xA6\xCA |0 - \xA6\xCB |0 - \xA6\xCC |0 - \xA6\xCD |0 - \xA6\xCE |0 - \xA6\xCF |0 - \xA6\xD0 |0 - \xA6\xD1 |0 - \xA6\xD2 |0 - \xA6\xD3 |0 - \xA6\xD4 |0 - \xA6\xD5 |0 - \xA6\xD6 |0 - \xA6\xD7 |0 - \xA6\xD8 |0 - \xA7\xA7 |0 - \xA7\xA1 |0 - \xA7\xA2 |0 - \xA7\xA3 |0 - \xA7\xA4 |0 - \xA7\xA5 |0 - \xA7\xA6 |0 - \xA7\xA8 |0 - \xA7\xA9 |0 - \xA7\xAA |0 - \xA7\xAB |0 - \xA7\xAC |0 - \xA7\xAD |0 - \xA7\xAE |0 - \xA7\xAF |0 - \xA7\xB0 |0 - \xA7\xB1 |0 - \xA7\xB2 |0 - \xA7\xB3 |0 - \xA7\xB4 |0 - \xA7\xB5 |0 - \xA7\xB6 |0 - \xA7\xB7 |0 - \xA7\xB8 |0 - \xA7\xB9 |0 - \xA7\xBA |0 - \xA7\xBB |0 - \xA7\xBC |0 - \xA7\xBD |0 - \xA7\xBE |0 - \xA7\xBF |0 - \xA7\xC0 |0 - \xA7\xC1 |0 - \xA7\xD1 |0 - \xA7\xD2 |0 - \xA7\xD3 |0 - \xA7\xD4 |0 - \xA7\xD5 |0 - \xA7\xD6 |0 - \xA7\xD8 |0 - \xA7\xD9 |0 - \xA7\xDA |0 - \xA7\xDB |0 - \xA7\xDC |0 - \xA7\xDD |0 - \xA7\xDE |0 - \xA7\xDF |0 - \xA7\xE0 |0 - \xA7\xE1 |0 - \xA7\xE2 |0 - \xA7\xE3 |0 - \xA7\xE4 |0 - \xA7\xE5 |0 - \xA7\xE6 |0 - \xA7\xE7 |0 - \xA7\xE8 |0 - \xA7\xE9 |0 - \xA7\xEA |0 - \xA7\xEB |0 - \xA7\xEC |0 - \xA7\xED |0 - \xA7\xEE |0 - \xA7\xEF |0 - \xA7\xF0 |0 - \xA7\xF1 |0 - \xA7\xD7 |0 - \x8C\xF3 |0 - \xA1\xAA |1 - \xA1\xAA |0 - \xA1\xAC |0 - \xA1\xAE |0 - \xA1\xAF |0 - \xA1\xB0 |0 - \xA1\xB1 |0 - \x8C\xFA |0 - \xA1\xAD |0 - \xA1\xEB |0 - \xA1\xE4 |0 - \xA1\xE5 |0 - \xA1\xF9 |0 - \x13 |1 - \x83 |0 - \xA1\xE6 |0 - \xA1\xED |0 - \x8C\xF9 |0 - \xA2\xF1 |0 - \xA2\xF2 |0 - \xA2\xF3 |0 - \xA2\xF4 |0 - \xA2\xF5 |0 - \xA2\xF6 |0 - \xA2\xF7 |0 - \xA2\xF8 |0 - \xA2\xF9 |0 - \xA2\xFA |0 - \xA2\xFB |0 - \xA2\xFC |0 - \x8C\xE0 |0 - \x8C\xE1 |0 - \x8C\xE2 |0 - \x8C\xE3 |0 - \x8C\xE4 |0 - \x8C\xE5 |0 - \x8C\xE6 |0 - \x8C\xE7 |0 - \x8C\xE8 |0 - \x8C\xE9 |0 - \xA1\xFB |0 - \xA1\xFC |0 - \xA1\xFA |0 - \xA1\xFD |0 - \x12 |1 - \x1B |1 - \xA1\xCA |0 - \xA1\xC7 |0 - \xA1\xC6 |0 - \xA1\xCC |0 - \xA1\xD8 |0 - \xA1\xDE |0 - \xA1\xCF |0 - \xA1\xCE |0 - \xA1\xC4 |0 - \xA1\xC5 |0 - \xA1\xC9 |0 - \xA1\xC8 |0 - \xA1\xD2 |0 - \xA1\xD3 |0 - \xA1\xE0 |0 - \xA1\xDF |0 - \xA1\xC3 |0 - \xA1\xCB |0 - \xA1\xD7 |0 - \xA1\xD6 |0 - \xA1\xD5 |0 - \xA1\xD9 |0 - \xA1\xD4 |0 - \xA1\xDC |0 - \xA1\xDD |0 - \xA1\xDA |0 - \xA1\xDB |0 - \xA1\xD1 |0 - \xA1\xCD |0 - \xA1\xD0 |0 - \xA2\xD9 |0 - \xA2\xDA |0 - \xA2\xDB |0 - \xA2\xDC |0 - \xA2\xDD |0 - \xA2\xDE |0 - \xA2\xDF |0 - \xA2\xE0 |0 - \xA2\xE1 |0 - \xA2\xE2 |0 - \xA2\xC5 |0 - \xA2\xC6 |0 - \xA2\xC7 |0 - \xA2\xC8 |0 - \xA2\xC9 |0 - \xA2\xCA |0 - \xA2\xCB |0 - \xA2\xCC |0 - \xA2\xCD |0 - \xA2\xCE |0 - \xA2\xCF |0 - \xA2\xD0 |0 - \xA2\xD1 |0 - \xA2\xD2 |0 - \xA2\xD3 |0 - \xA2\xD4 |0 - \xA2\xD5 |0 - \xA2\xD6 |0 - \xA2\xD7 |0 - \xA2\xD8 |0 - \xA2\xB1 |0 - \xA2\xB2 |0 - \xA2\xB3 |0 - \xA2\xB4 |0 - \xA2\xB5 |0 - \xA2\xB6 |0 - \xA2\xB7 |0 - \xA2\xB8 |0 - \xA2\xB9 |0 - \xA2\xBA |0 - \xA2\xBB |0 - \xA2\xBC |0 - \xA2\xBD |0 - \xA2\xBE |0 - \xA2\xBF |0 - \xA2\xC0 |0 - \xA2\xC1 |0 - \xA2\xC2 |0 - \xA2\xC3 |0 - \xA2\xC4 |0 - \xA9\xA4 |0 - \xA9\xA5 |0 - \xA9\xA6 |0 - \xA9\xA7 |0 - \xA9\xA8 |0 - \xA9\xA9 |0 - \xA9\xAA |0 - \xA9\xAB |0 - \xA9\xAC |0 - \xA9\xAD |0 - \xA9\xAE |0 - \xA9\xAF |0 - \xA9\xB0 |0 - \xA9\xB1 |0 - \xA9\xB2 |0 - \xA9\xB3 |0 - \xA9\xB4 |0 - \xA9\xB5 |0 - \xA9\xB6 |0 - \xA9\xB7 |0 - \xA9\xB8 |0 - \xA9\xB9 |0 - \xA9\xBA |0 - \xA9\xBB |0 - \xA9\xBC |0 - \xA9\xBD |0 - \xA9\xBE |0 - \xA9\xBF |0 - \xA9\xC0 |0 - \xA9\xC1 |0 - \xA9\xC2 |0 - \xA9\xC3 |0 - \xA9\xC4 |0 - \xA9\xC5 |0 - \xA9\xC6 |0 - \xA9\xC7 |0 - \xA9\xC8 |0 - \xA9\xC9 |0 - \xA9\xCA |0 - \xA9\xCB |0 - \xA9\xCC |0 - \xA9\xCD |0 - \xA9\xCE |0 - \xA9\xCF |0 - \xA9\xD0 |0 - \xA9\xD1 |0 - \xA9\xD2 |0 - \xA9\xD3 |0 - \xA9\xD4 |0 - \xA9\xD5 |0 - \xA9\xD6 |0 - \xA9\xD7 |0 - \xA9\xD8 |0 - \xA9\xD9 |0 - \xA9\xDA |0 - \xA9\xDB |0 - \xA9\xDC |0 - \xA9\xDD |0 - \xA9\xDE |0 - \xA9\xDF |0 - \xA9\xE0 |0 - \xA9\xE1 |0 - \xA9\xE2 |0 - \xA9\xE3 |0 - \xA9\xE4 |0 - \xA9\xE5 |0 - \xA9\xE6 |0 - \xA9\xE7 |0 - \xA9\xE8 |0 - \xA9\xE9 |0 - \xA9\xEA |0 - \xA9\xEB |0 - \xA9\xEC |0 - \xA9\xED |0 - \xA9\xEE |0 - \xA9\xEF |0 - \x06 |1 - \x05 |1 - \x01 |1 - \x02 |1 - \x03 |1 - \x04 |1 - \x19 |1 - \x17 |1 - \x16 |1 - \x15 |1 - \x10 |1 - \x11 |1 - \x0C |1 - \x1A |1 - \x0D |1 - \x14 |1 - \xA1\xF6 |0 - \xA1\xF5 |0 - \xA1\xF8 |0 - \xA1\xF7 |0 - \x8C\xFE |0 - \x8C\xFD |0 - \xA1\xF4 |0 - \xA1\xF3 |0 - \xA1\xF0 |0 - \xA1\xF2 |0 - \xA1\xF1 |0 - \x08 |1 - \x0A |1 - \xA1\xEF |0 - \xA1\xEE |0 - \x0F |1 - \xA1\xE2 |0 - \xA1\xE1 |0 - \xA1\xA1 |0 - \xA1\xA2 |0 - \xA1\xA3 |0 - \xA1\xA8 |0 - \xA1\xA9 |0 - \x8C\xF5 |0 - \x8C\xF6 |0 - \xA1\xB4 |0 - \xA1\xB5 |0 - \xA1\xB6 |0 - \xA1\xB7 |0 - \xA1\xB8 |0 - \xA1\xB9 |0 - \xA1\xBA |0 - \xA1\xBB |0 - \xA1\xBE |0 - \xA1\xBF |0 - \x8C\xF7 |0 - \xA1\xFE |0 - \xA1\xB2 |0 - \xA1\xB3 |0 - \xA1\xBC |0 - \xA1\xBD |0 - \x0B |1 - \xA4\xA1 |0 - \xA4\xA2 |0 - \xA4\xA3 |0 - \xA4\xA4 |0 - \xA4\xA5 |0 - \xA4\xA6 |0 - \xA4\xA7 |0 - \xA4\xA8 |0 - \xA4\xA9 |0 - \xA4\xAA |0 - \xA4\xAB |0 - \xA4\xAC |0 - \xA4\xAD |0 - \xA4\xAE |0 - \xA4\xAF |0 - \xA4\xB0 |0 - \xA4\xB1 |0 - \xA4\xB2 |0 - \xA4\xB3 |0 - \xA4\xB4 |0 - \xA4\xB5 |0 - \xA4\xB6 |0 - \xA4\xB7 |0 - \xA4\xB8 |0 - \xA4\xB9 |0 - \xA4\xBA |0 - \xA4\xBB |0 - \xA4\xBC |0 - \xA4\xBD |0 - \xA4\xBE |0 - \xA4\xBF |0 - \xA4\xC0 |0 - \xA4\xC1 |0 - \xA4\xC2 |0 - \xA4\xC3 |0 - \xA4\xC4 |0 - \xA4\xC5 |0 - \xA4\xC6 |0 - \xA4\xC7 |0 - \xA4\xC8 |0 - \xA4\xC9 |0 - \xA4\xCA |0 - \xA4\xCB |0 - \xA4\xCC |0 - \xA4\xCD |0 - \xA4\xCE |0 - \xA4\xCF |0 - \xA4\xD0 |0 - \xA4\xD1 |0 - \xA4\xD2 |0 - \xA4\xD3 |0 - \xA4\xD4 |0 - \xA4\xD5 |0 - \xA4\xD6 |0 - \xA4\xD7 |0 - \xA4\xD8 |0 - \xA4\xD9 |0 - \xA4\xDA |0 - \xA4\xDB |0 - \xA4\xDC |0 - \xA4\xDD |0 - \xA4\xDE |0 - \xA4\xDF |0 - \xA4\xE0 |0 - \xA4\xE1 |0 - \xA4\xE2 |0 - \xA4\xE3 |0 - \xA4\xE4 |0 - \xA4\xE5 |0 - \xA4\xE6 |0 - \xA4\xE7 |0 - \xA4\xE8 |0 - \xA4\xE9 |0 - \xA4\xEA |0 - \xA4\xEB |0 - \xA4\xEC |0 - \xA4\xED |0 - \xA4\xEE |0 - \xA4\xEF |0 - \xA4\xF0 |0 - \xA4\xF1 |0 - \xA4\xF2 |0 - \xA4\xF3 |0 - \x8C\xEF |0 - \x8C\xF0 |0 - \x8C\xFB |0 - \x8C\xFC |0 - \xA5\xA1 |0 - \xA5\xA2 |0 - \xA5\xA3 |0 - \xA5\xA4 |0 - \xA5\xA5 |0 - \xA5\xA6 |0 - \xA5\xA7 |0 - \xA5\xA8 |0 - \xA5\xA9 |0 - \xA5\xAA |0 - \xA5\xAB |0 - \xA5\xAC |0 - \xA5\xAD |0 - \xA5\xAE |0 - \xA5\xAF |0 - \xA5\xB0 |0 - \xA5\xB1 |0 - \xA5\xB2 |0 - \xA5\xB3 |0 - \xA5\xB4 |0 - \xA5\xB5 |0 - \xA5\xB6 |0 - \xA5\xB7 |0 - \xA5\xB8 |0 - \xA5\xB9 |0 - \xA5\xBA |0 - \xA5\xBB |0 - \xA5\xBC |0 - \xA5\xBD |0 - \xA5\xBE |0 - \xA5\xBF |0 - \xA5\xC0 |0 - \xA5\xC1 |0 - \xA5\xC2 |0 - \xA5\xC3 |0 - \xA5\xC4 |0 - \xA5\xC5 |0 - \xA5\xC6 |0 - \xA5\xC7 |0 - \xA5\xC8 |0 - \xA5\xC9 |0 - \xA5\xCA |0 - \xA5\xCB |0 - \xA5\xCC |0 - \xA5\xCD |0 - \xA5\xCE |0 - \xA5\xCF |0 - \xA5\xD0 |0 - \xA5\xD1 |0 - \xA5\xD2 |0 - \xA5\xD3 |0 - \xA5\xD4 |0 - \xA5\xD5 |0 - \xA5\xD6 |0 - \xA5\xD7 |0 - \xA5\xD8 |0 - \xA5\xD9 |0 - \xA5\xDA |0 - \xA5\xDB |0 - \xA5\xDC |0 - \xA5\xDD |0 - \xA5\xDE |0 - \xA5\xDF |0 - \xA5\xE0 |0 - \xA5\xE1 |0 - \xA5\xE2 |0 - \xA5\xE3 |0 - \xA5\xE4 |0 - \xA5\xE5 |0 - \xA5\xE6 |0 - \xA5\xE7 |0 - \xA5\xE8 |0 - \xA5\xE9 |0 - \xA5\xEA |0 - \xA5\xEB |0 - \xA5\xEC |0 - \xA5\xED |0 - \xA5\xEE |0 - \xA5\xEF |0 - \xA5\xF0 |0 - \xA5\xF1 |0 - \xA5\xF2 |0 - \xA5\xF3 |0 - \xA5\xF4 |0 - \xA5\xF5 |0 - \xA5\xF6 |0 - \xA1\xA4 |0 - \x8C\xED |0 - \x8C\xF1 |0 - \x8C\xF2 |0 - \xA8\xC5 |0 - \xA8\xC6 |0 - \xA8\xC7 |0 - \xA8\xC8 |0 - \xA8\xC9 |0 - \xA8\xCA |0 - \xA8\xCB |0 - \xA8\xCC |0 - \xA8\xCD |0 - \xA8\xCE |0 - \xA8\xCF |0 - \xA8\xD0 |0 - \xA8\xD1 |0 - \xA8\xD2 |0 - \xA8\xD3 |0 - \xA8\xD4 |0 - \xA8\xD5 |0 - \xA8\xD6 |0 - \xA8\xD7 |0 - \xA8\xD8 |0 - \xA8\xD9 |0 - \xA8\xDA |0 - \xA8\xDB |0 - \xA8\xDC |0 - \xA8\xDD |0 - \xA8\xDE |0 - \xA8\xDF |0 - \xA8\xE0 |0 - \xA8\xE1 |0 - \xA8\xE2 |0 - \xA8\xE3 |0 - \xA8\xE4 |0 - \xA8\xE5 |0 - \xA8\xE6 |0 - \xA8\xE7 |0 - \xA8\xE8 |0 - \xA8\xE9 |0 - \xA2\xE5 |0 - \xA2\xE6 |0 - \xA2\xE7 |0 - \xA2\xE8 |0 - \xA2\xE9 |0 - \xA2\xEA |0 - \xA2\xEB |0 - \xA2\xEC |0 - \xA2\xED |0 - \xA2\xEE |0 - \x8C\xF8 |0 - \xD2\xBB |0 - \xB6\xA1 |0 - \xC6\xDF |0 - \xCD\xF2 |0 - \xD5\xC9 |0 - \xC8\xFD |0 - \xC9\xCF |0 - \xCF\xC2 |0 - \xD8\xA2 |0 - \xB2\xBB |0 - \xD3\xEB |0 - \xD8\xA4 |0 - \xB3\xF3 |0 - \xD7\xA8 |0 - \xC7\xD2 |0 - \xD8\xA7 |0 - \xCA\xC0 |0 - \xC7\xF0 |0 - \xB1\xFB |0 - \xD2\xB5 |0 - \xB4\xD4 |0 - \xB6\xAB |0 - \xCB\xBF |0 - \xD8\xA9 |0 - \xB6\xAA |0 - \xC1\xBD |0 - \xD1\xCF |0 - \xC9\xA5 |0 - \xD8\xAD |0 - \xB8\xF6 |0 - \xD1\xBE |0 - \xE3\xDC |0 - \xD6\xD0 |0 - \xB7\xE1 |0 - \xB4\xAE |0 - \xC1\xD9 |0 - \xD8\xBC |0 - \xCD\xE8 |0 - \xB5\xA4 |0 - \xCE\xAA |0 - \xD6\xF7 |0 - \xC0\xF6 |0 - \xBE\xD9 |0 - \xD8\xAF |0 - \xC4\xCB |0 - \xBE\xC3 |0 - \xD8\xB1 |0 - \xC3\xB4 |0 - \xD2\xE5 |0 - \xD6\xAE |0 - \xCE\xDA |0 - \xD5\xA7 |0 - \xBA\xF5 |0 - \xB7\xA6 |0 - \xC0\xD6 |0 - \xC6\xB9 |0 - \xC5\xD2 |0 - \xC7\xC7 |0 - \xB9\xD4 |0 - \xB3\xCB |0 - \xD2\xD2 |0 - \xD8\xBF |0 - \xBE\xC5 |0 - \xC6\xF2 |0 - \xD2\xB2 |0 - \xCF\xB0 |0 - \xCF\xE7 |0 - \xCA\xE9 |0 - \xD8\xC0 |0 - \xC2\xF2 |0 - \xC2\xD2 |0 - \xC8\xE9 |0 - \xC7\xAC |0 - \xC1\xCB |0 - \xD3\xE8 |0 - \xD5\xF9 |0 - \xCA\xC2 |0 - \xB6\xFE |0 - \xD8\xA1 |0 - \xD3\xDA |0 - \xBF\xF7 |0 - \xD4\xC6 |0 - \xBB\xA5 |0 - \xD8\xC1 |0 - \xCE\xE5 |0 - \xBE\xAE |0 - \xD8\xA8 |0 - \xD1\xC7 |0 - \xD0\xA9 |0 - \xD8\xBD |0 - \xD9\xEF |0 - \xCD\xF6 |0 - \xBF\xBA |0 - \xBD\xBB |0 - \xBA\xA5 |0 - \xD2\xE0 |0 - \xB2\xFA |0 - \xBA\xE0 |0 - \xC4\xB6 |0 - \xCF\xED |0 - \xBE\xA9 |0 - \xCD\xA4 |0 - \xC1\xC1 |0 - \xC7\xD7 |0 - \xD9\xF1 |0 - \xD9\xF4 |0 - \xC8\xCB |0 - \xD8\xE9 |0 - \xD2\xDA |0 - \xCA\xB2 |0 - \xC8\xCA |0 - \xD8\xEC |0 - \xD8\xEA |0 - \xD8\xC6 |0 - \xBD\xF6 |0 - \xC6\xCD |0 - \xB3\xF0 |0 - \xD8\xEB |0 - \xBD\xF1 |0 - \xBD\xE9 |0 - \xC8\xD4 |0 - \xB4\xD3 |0 - \xC2\xD8 |0 - \xB2\xD6 |0 - \xD7\xD0 |0 - \xCA\xCB |0 - \xCB\xFB |0 - \xD5\xCC |0 - \xB8\xB6 |0 - \xCF\xC9 |0 - \xD9\xDA |0 - \xD8\xF0 |0 - \xC7\xAA |0 - \xD8\xEE |0 - \xB4\xFA |0 - \xC1\xEE |0 - \xD2\xD4 |0 - \xD8\xED |0 - \xD2\xC7 |0 - \xD8\xEF |0 - \xC3\xC7 |0 - \xD1\xF6 |0 - \xD6\xD9 |0 - \xD8\xF2 |0 - \xD8\xF5 |0 - \xBC\xFE |0 - \xBC\xDB |0 - \xC8\xCE |0 - \xB7\xDD |0 - \xB7\xC2 |0 - \xC6\xF3 |0 - \xD8\xF8 |0 - \xD2\xC1 |0 - \xCE\xE9 |0 - \xBC\xBF |0 - \xB7\xFC |0 - \xB7\xA5 |0 - \xD0\xDD |0 - \xD6\xDA |0 - \xD3\xC5 |0 - \xBB\xEF |0 - \xBB\xE1 |0 - \xD8\xF1 |0 - \xC9\xA1 |0 - \xCE\xB0 |0 - \xB4\xAB |0 - \xD8\xF3 |0 - \xC9\xCB |0 - \xD8\xF6 |0 - \xC2\xD7 |0 - \xD8\xF7 |0 - \xCE\xB1 |0 - \xD8\xF9 |0 - \xB2\xAE |0 - \xB9\xC0 |0 - \xD9\xA3 |0 - \xB0\xE9 |0 - \xC1\xE6 |0 - \xC9\xEC |0 - \xCB\xC5 |0 - \xCB\xC6 |0 - \xD9\xA4 |0 - \xB5\xE8 |0 - \xB5\xAB |0 - \xCE\xBB |0 - \xB5\xCD |0 - \xD7\xA1 |0 - \xD7\xF4 |0 - \xD3\xD3 |0 - \xCC\xE5 |0 - \xBA\xCE |0 - \xD9\xA2 |0 - \xD9\xDC |0 - \xD3\xE0 |0 - \xD8\xFD |0 - \xB7\xF0 |0 - \xD7\xF7 |0 - \xD8\xFE |0 - \xD8\xFA |0 - \xD9\xA1 |0 - \xC4\xE3 |0 - \xD3\xB6 |0 - \xD8\xF4 |0 - \xD9\xDD |0 - \xD8\xFB |0 - \xC5\xE5 |0 - \xC0\xD0 |0 - \xD1\xF0 |0 - \xB0\xDB |0 - \xBC\xD1 |0 - \xD9\xA6 |0 - \xD9\xA5 |0 - \xD9\xAC |0 - \xD9\xAE |0 - \xD9\xAB |0 - \xCA\xB9 |0 - \xD9\xA9 |0 - \xD6\xB6 |0 - \xB3\xDE |0 - \xD9\xA8 |0 - \xC0\xFD |0 - \xCA\xCC |0 - \xD9\xAA |0 - \xD9\xA7 |0 - \xD9\xB0 |0 - \xB6\xB1 |0 - \xB9\xA9 |0 - \xD2\xC0 |0 - \xCF\xC0 |0 - \xC2\xC2 |0 - \xBD\xC4 |0 - \xD5\xEC |0 - \xB2\xE0 |0 - \xC7\xC8 |0 - \xBF\xEB |0 - \xD9\xAD |0 - \xD9\xAF |0 - \xCE\xEA |0 - \xBA\xEE |0 - \xC7\xD6 |0 - \xB1\xE3 |0 - \xB4\xD9 |0 - \xB6\xED |0 - \xD9\xB4 |0 - \xBF\xA1 |0 - \xD9\xDE |0 - \xC7\xCE |0 - \xC0\xFE |0 - \xD9\xB8 |0 - \xCB\xD7 |0 - \xB7\xFD |0 - \xD9\xB5 |0 - \xD9\xB7 |0 - \xB1\xA3 |0 - \xD3\xE1 |0 - \xD9\xB9 |0 - \xD0\xC5 |0 - \xD9\xB6 |0 - \xD9\xB1 |0 - \xD9\xB2 |0 - \xC1\xA9 |0 - \xD9\xB3 |0 - \xBC\xF3 |0 - \xD0\xDE |0 - \xB8\xA9 |0 - \xBE\xE3 |0 - \xD9\xBD |0 - \xD9\xBA |0 - \xB0\xB3 |0 - \xD9\xC2 |0 - \xD9\xC4 |0 - \xB1\xB6 |0 - \xD9\xBF |0 - \xB5\xB9 |0 - \xBE\xF3 |0 - \xCC\xC8 |0 - \xBA\xF2 |0 - \xD2\xD0 |0 - \xD9\xC3 |0 - \xBD\xE8 |0 - \xB3\xAB |0 - \xD9\xC5 |0 - \xBE\xEB |0 - \xD9\xC6 |0 - \xD9\xBB |0 - \xC4\xDF |0 - \xD9\xBE |0 - \xD9\xC1 |0 - \xD9\xC0 |0 - \xD5\xAE |0 - \xD6\xB5 |0 - \xC7\xE3 |0 - \xD9\xC8 |0 - \xBC\xD9 |0 - \xD9\xCA |0 - \xD9\xBC |0 - \xD9\xCB |0 - \xC6\xAB |0 - \xD9\xC9 |0 - \xD7\xF6 |0 - \xCD\xA3 |0 - \xBD\xA1 |0 - \xD9\xCC |0 - \xC5\xBC |0 - \xCD\xB5 |0 - \xD9\xCD |0 - \xD9\xC7 |0 - \xB3\xA5 |0 - \xBF\xFE |0 - \xB8\xB5 |0 - \xC0\xFC |0 - \xB0\xF8 |0 - \xB4\xF6 |0 - \xD9\xCE |0 - \xD9\xCF |0 - \xB4\xA2 |0 - \xD9\xD0 |0 - \xB4\xDF |0 - \xB0\xC1 |0 - \xD9\xD1 |0 - \xC9\xB5 |0 - \xCF\xF1 |0 - \xD9\xD2 |0 - \xC1\xC5 |0 - \xD9\xD6 |0 - \xC9\xAE |0 - \xD9\xD5 |0 - \xD9\xD4 |0 - \xD9\xD7 |0 - \xCB\xDB |0 - \xBD\xA9 |0 - \xC6\xA7 |0 - \xD9\xD3 |0 - \xD9\xD8 |0 - \xD9\xD9 |0 - \xC8\xE5 |0 - \xC0\xDC |0 - \xB6\xF9 |0 - \xD8\xA3 |0 - \xD4\xCA |0 - \xD4\xAA |0 - \xD0\xD6 |0 - \xB3\xE4 |0 - \xD5\xD7 |0 - \xCF\xC8 |0 - \xB9\xE2 |0 - \xBF\xCB |0 - \xC3\xE2 |0 - \xB6\xD2 |0 - \xCD\xC3 |0 - \xD9\xEE |0 - \xD9\xF0 |0 - \xB5\xB3 |0 - \xB6\xB5 |0 - \xBE\xA4 |0 - \xC8\xEB |0 - \xC8\xAB |0 - \xB0\xCB |0 - \xB9\xAB |0 - \xC1\xF9 |0 - \xD9\xE2 |0 - \xC0\xBC |0 - \xB9\xB2 |0 - \xB9\xD8 |0 - \xD0\xCB |0 - \xB1\xF8 |0 - \xC6\xE4 |0 - \xBE\xDF |0 - \xB5\xE4 |0 - \xD7\xC8 |0 - \xD1\xF8 |0 - \xBC\xE6 |0 - \xCA\xDE |0 - \xBC\xBD |0 - \xD9\xE6 |0 - \xD8\xE7 |0 - \xC4\xDA |0 - \xB8\xD4 |0 - \xC8\xBD |0 - \xB2\xE1 |0 - \xD4\xD9 |0 - \xC3\xB0 |0 - \xC3\xE1 |0 - \xDA\xA2 |0 - \xC8\xDF |0 - \xD0\xB4 |0 - \xBE\xFC |0 - \xC5\xA9 |0 - \xB9\xDA |0 - \xDA\xA3 |0 - \xD4\xA9 |0 - \xDA\xA4 |0 - \xD9\xFB |0 - \xB6\xAC |0 - \xB7\xEB |0 - \xB1\xF9 |0 - \xD9\xFC |0 - \xB3\xE5 |0 - \xBE\xF6 |0 - \xBF\xF6 |0 - \xD2\xB1 |0 - \xC0\xE4 |0 - \xB6\xB3 |0 - \xD9\xFE |0 - \xD9\xFD |0 - \xBE\xBB |0 - \xC6\xE0 |0 - \xD7\xBC |0 - \xDA\xA1 |0 - \xC1\xB9 |0 - \xB5\xF2 |0 - \xC1\xE8 |0 - \xBC\xF5 |0 - \xB4\xD5 |0 - \xC1\xDD |0 - \xC4\xFD |0 - \xBC\xB8 |0 - \xB7\xB2 |0 - \xB7\xEF |0 - \xD9\xEC |0 - \xC6\xBE |0 - \xBF\xAD |0 - \xBB\xCB |0 - \xB5\xCA |0 - \xDB\xC9 |0 - \xD0\xD7 |0 - \xCD\xB9 |0 - \xB0\xBC |0 - \xB3\xF6 |0 - \xBB\xF7 |0 - \xDB\xCA |0 - \xBA\xAF |0 - \xD4\xE4 |0 - \xB5\xB6 |0 - \xB5\xF3 |0 - \xD8\xD6 |0 - \xC8\xD0 |0 - \xB7\xD6 |0 - \xC7\xD0 |0 - \xD8\xD7 |0 - \xBF\xAF |0 - \xDB\xBB |0 - \xD8\xD8 |0 - \xD0\xCC |0 - \xBB\xAE |0 - \xEB\xBE |0 - \xC1\xD0 |0 - \xC1\xF5 |0 - \xD4\xF2 |0 - \xB8\xD5 |0 - \xB4\xB4 |0 - \xB3\xF5 |0 - \xC9\xBE |0 - \xC5\xD0 |0 - \xC5\xD9 |0 - \xC0\xFB |0 - \xB1\xF0 |0 - \xD8\xD9 |0 - \xB9\xCE |0 - \xB5\xBD |0 - \xD8\xDA |0 - \xD6\xC6 |0 - \xCB\xA2 |0 - \xC8\xAF |0 - \xC9\xB2 |0 - \xB4\xCC |0 - \xBF\xCC |0 - \xB9\xF4 |0 - \xD8\xDB |0 - \xD8\xDC |0 - \xB6\xE7 |0 - \xBC\xC1 |0 - \xCC\xEA |0 - \xCF\xF7 |0 - \xD8\xDD |0 - \xC7\xB0 |0 - \xB9\xD0 |0 - \xBD\xA3 |0 - \xCC\xDE |0 - \xC6\xCA |0 - \xD8\xE0 |0 - \xD8\xDE |0 - \xD8\xDF |0 - \xB0\xFE |0 - \xBE\xE7 |0 - \xCA\xA3 |0 - \xBC\xF4 |0 - \xB8\xB1 |0 - \xB8\xEE |0 - \xD8\xE2 |0 - \xBD\xCB |0 - \xD8\xE4 |0 - \xD8\xE3 |0 - \xC5\xFC |0 - \xD8\xE5 |0 - \xD8\xE6 |0 - \xC1\xA6 |0 - \xC8\xB0 |0 - \xB0\xEC |0 - \xB9\xA6 |0 - \xBC\xD3 |0 - \xCE\xF1 |0 - \xDB\xBD |0 - \xC1\xD3 |0 - \xB6\xAF |0 - \xD6\xFA |0 - \xC5\xAC |0 - \xBD\xD9 |0 - \xDB\xBE |0 - \xDB\xBF |0 - \xC0\xF8 |0 - \xBE\xA2 |0 - \xC0\xCD |0 - \xDB\xC0 |0 - \xCA\xC6 |0 - \xB2\xAA |0 - \xD3\xC2 |0 - \xC3\xE3 |0 - \xD1\xAB |0 - \xDB\xC2 |0 - \xC0\xD5 |0 - \xDB\xC3 |0 - \xBF\xB1 |0 - \xC4\xBC |0 - \xC7\xDA |0 - \xDB\xC4 |0 - \xD9\xE8 |0 - \xC9\xD7 |0 - \xB9\xB4 |0 - \xCE\xF0 |0 - \xD4\xC8 |0 - \xB0\xFC |0 - \xB4\xD2 |0 - \xD0\xD9 |0 - \xD9\xE9 |0 - \xDE\xCB |0 - \xD9\xEB |0 - \xD8\xB0 |0 - \xBB\xAF |0 - \xB1\xB1 |0 - \xB3\xD7 |0 - \xD8\xCE |0 - \xD4\xD1 |0 - \xBD\xB3 |0 - \xBF\xEF |0 - \xCF\xBB |0 - \xD8\xD0 |0 - \xB7\xCB |0 - \xD8\xD1 |0 - \xC6\xA5 |0 - \xC7\xF8 |0 - \xD2\xBD |0 - \xD8\xD2 |0 - \xC4\xE4 |0 - \xCA\xAE |0 - \xC7\xA7 |0 - \xD8\xA6 |0 - \xC9\xFD |0 - \xCE\xE7 |0 - \xBB\xDC |0 - \xB0\xEB |0 - \xBB\xAA |0 - \xD0\xAD |0 - \xB1\xB0 |0 - \xD7\xE4 |0 - \xD7\xBF |0 - \xB5\xA5 |0 - \xC2\xF4 |0 - \xC4\xCF |0 - \xB2\xA9 |0 - \xB2\xB7 |0 - \xB1\xE5 |0 - \xDF\xB2 |0 - \xD5\xBC |0 - \xBF\xA8 |0 - \xC2\xAC |0 - \xD8\xD5 |0 - \xC2\xB1 |0 - \xD8\xD4 |0 - \xCE\xD4 |0 - \xDA\xE0 |0 - \xCE\xC0 |0 - \xD8\xB4 |0 - \xC3\xAE |0 - \xD3\xA1 |0 - \xCE\xA3 |0 - \xBC\xB4 |0 - \xC8\xB4 |0 - \xC2\xD1 |0 - \xBE\xED |0 - \xD0\xB6 |0 - \xDA\xE1 |0 - \xC7\xE4 |0 - \xB3\xA7 |0 - \xB6\xF2 |0 - \xCC\xFC |0 - \xC0\xFA |0 - \xC0\xF7 |0 - \xD1\xB9 |0 - \xD1\xE1 |0 - \xD8\xC7 |0 - \xB2\xDE |0 - \xC0\xE5 |0 - \xBA\xF1 |0 - \xD8\xC8 |0 - \xD4\xAD |0 - \xCF\xE1 |0 - \xD8\xC9 |0 - \xD8\xCA |0 - \xCF\xC3 |0 - \xB3\xF8 |0 - \xBE\xC7 |0 - \xD8\xCB |0 - \xDB\xCC |0 - \xC8\xA5 |0 - \xCF\xD8 |0 - \xC8\xFE |0 - \xB2\xCE |0 - \xD3\xD6 |0 - \xB2\xE6 |0 - \xBC\xB0 |0 - \xD3\xD1 |0 - \xCB\xAB |0 - \xB7\xB4 |0 - \xB7\xA2 |0 - \xCA\xE5 |0 - \xC8\xA1 |0 - \xCA\xDC |0 - \xB1\xE4 |0 - \xD0\xF0 |0 - \xC5\xD1 |0 - \xDB\xC5 |0 - \xB5\xFE |0 - \xBF\xDA |0 - \xB9\xC5 |0 - \xBE\xE4 |0 - \xC1\xED |0 - \xDF\xB6 |0 - \xDF\xB5 |0 - \xD6\xBB |0 - \xBD\xD0 |0 - \xD5\xD9 |0 - \xB0\xC8 |0 - \xB6\xA3 |0 - \xBF\xC9 |0 - \xCC\xA8 |0 - \xDF\xB3 |0 - \xCA\xB7 |0 - \xD3\xD2 |0 - \xD8\xCF |0 - \xD2\xB6 |0 - \xBA\xC5 |0 - \xCB\xBE |0 - \xCC\xBE |0 - \xDF\xB7 |0 - \xB5\xF0 |0 - \xDF\xB4 |0 - \xD3\xF5 |0 - \xB3\xD4 |0 - \xB8\xF7 |0 - \xDF\xBA |0 - \xBA\xCF |0 - \xBC\xAA |0 - \xB5\xF5 |0 - \xCD\xAC |0 - \xC3\xFB |0 - \xBA\xF3 |0 - \xC0\xF4 |0 - \xCD\xC2 |0 - \xCF\xF2 |0 - \xDF\xB8 |0 - \xCF\xC5 |0 - \xC2\xC0 |0 - \xDF\xB9 |0 - \xC2\xF0 |0 - \xBE\xFD |0 - \xC1\xDF |0 - \xCD\xCC |0 - \xD2\xF7 |0 - \xB7\xCD |0 - \xDF\xC1 |0 - \xDF\xC4 |0 - \xB7\xF1 |0 - \xB0\xC9 |0 - \xB6\xD6 |0 - \xB7\xD4 |0 - \xBA\xAC |0 - \xCC\xFD |0 - \xBF\xD4 |0 - \xCB\xB1 |0 - \xC6\xF4 |0 - \xD6\xA8 |0 - \xDF\xC5 |0 - \xCE\xE2 |0 - \xB3\xB3 |0 - \xCE\xFC |0 - \xB4\xB5 |0 - \xCE\xC7 |0 - \xBA\xF0 |0 - \xCE\xE1 |0 - \xD1\xBD |0 - \xDF\xC0 |0 - \xB4\xF4 |0 - \xB3\xCA |0 - \xB8\xE6 |0 - \xDF\xBB |0 - \xC4\xC5 |0 - \xDF\xBC |0 - \xDF\xBD |0 - \xDF\xBE |0 - \xC5\xBB |0 - \xDF\xBF |0 - \xDF\xC2 |0 - \xD4\xB1 |0 - \xDF\xC3 |0 - \xC7\xBA |0 - \xCE\xD8 |0 - \xC4\xD8 |0 - \xDF\xCA |0 - \xDF\xCF |0 - \xD6\xDC |0 - \xDF\xC9 |0 - \xDF\xDA |0 - \xCE\xB6 |0 - \xBA\xC7 |0 - \xDF\xCE |0 - \xDF\xC8 |0 - \xC5\xDE |0 - \xC9\xEB |0 - \xBA\xF4 |0 - \xC3\xFC |0 - \xBE\xD7 |0 - \xDF\xC6 |0 - \xDF\xCD |0 - \xC5\xD8 |0 - \xD5\xA6 |0 - \xBA\xCD |0 - \xBE\xCC |0 - \xD3\xBD |0 - \xB8\xC0 |0 - \xD6\xE4 |0 - \xDF\xC7 |0 - \xB9\xBE |0 - \xBF\xA7 |0 - \xC1\xFC |0 - \xDF\xCB |0 - \xDF\xCC |0 - \xDF\xD0 |0 - \xDF\xDB |0 - \xDF\xE5 |0 - \xDF\xD7 |0 - \xDF\xD6 |0 - \xD7\xC9 |0 - \xDF\xE3 |0 - \xDF\xE4 |0 - \xE5\xEB |0 - \xD2\xA7 |0 - \xDF\xD2 |0 - \xBF\xA9 |0 - \xD4\xDB |0 - \xBF\xC8 |0 - \xDF\xD4 |0 - \xCF\xCC |0 - \xDF\xDD |0 - \xD1\xCA |0 - \xDF\xDE |0 - \xB0\xA7 |0 - \xC6\xB7 |0 - \xDF\xD3 |0 - \xBA\xE5 |0 - \xB6\xDF |0 - \xCD\xDB |0 - \xB9\xFE |0 - \xD4\xD5 |0 - \xDF\xDF |0 - \xCF\xEC |0 - \xB0\xA5 |0 - \xDF\xE7 |0 - \xDF\xD1 |0 - \xD1\xC6 |0 - \xDF\xD5 |0 - \xDF\xD8 |0 - \xDF\xD9 |0 - \xDF\xDC |0 - \xBB\xA9 |0 - \xDF\xE0 |0 - \xDF\xE1 |0 - \xDF\xE2 |0 - \xDF\xE6 |0 - \xDF\xE8 |0 - \xD3\xB4 |0 - \xB8\xE7 |0 - \xC5\xB6 |0 - \xDF\xEA |0 - \xC9\xDA |0 - \xC1\xA8 |0 - \xC4\xC4 |0 - \xBF\xDE |0 - \xCF\xF8 |0 - \xD5\xDC |0 - \xDF\xEE |0 - \xB2\xB8 |0 - \xBA\xDF |0 - \xDF\xEC |0 - \xDB\xC1 |0 - \xD1\xE4 |0 - \xCB\xF4 |0 - \xB4\xBD |0 - \xB0\xA6 |0 - \xDF\xF1 |0 - \xCC\xC6 |0 - \xDF\xF2 |0 - \xDF\xED |0 - \xDF\xE9 |0 - \xDF\xEB |0 - \xDF\xEF |0 - \xDF\xF0 |0 - \xBB\xBD |0 - \xDF\xF3 |0 - \xDF\xF4 |0 - \xBB\xA3 |0 - \xCA\xDB |0 - \xCE\xA8 |0 - \xE0\xA7 |0 - \xB3\xAA |0 - \xE0\xA6 |0 - \xE0\xA1 |0 - \xDF\xFE |0 - \xCD\xD9 |0 - \xDF\xFC |0 - \xDF\xFA |0 - \xBF\xD0 |0 - \xD7\xC4 |0 - \xC9\xCC |0 - \xDF\xF8 |0 - \xB0\xA1 |0 - \xDF\xFD |0 - \xDF\xFB |0 - \xE0\xA2 |0 - \xE0\xA8 |0 - \xB7\xC8 |0 - \xC6\xA1 |0 - \xC9\xB6 |0 - \xC0\xB2 |0 - \xDF\xF5 |0 - \xC5\xBE |0 - \xD8\xC4 |0 - \xDF\xF9 |0 - \xC4\xF6 |0 - \xE0\xA3 |0 - \xE0\xA4 |0 - \xE0\xA5 |0 - \xD0\xA5 |0 - \xE0\xB4 |0 - \xCC\xE4 |0 - \xE0\xB1 |0 - \xBF\xA6 |0 - \xE0\xAF |0 - \xCE\xB9 |0 - \xE0\xAB |0 - \xC9\xC6 |0 - \xC0\xAE |0 - \xE0\xAE |0 - \xBA\xED |0 - \xBA\xB0 |0 - \xE0\xA9 |0 - \xDF\xF6 |0 - \xE0\xB3 |0 - \xE0\xB8 |0 - \xB4\xAD |0 - \xE0\xB9 |0 - \xCF\xB2 |0 - \xBA\xC8 |0 - \xE0\xB0 |0 - \xD0\xFA |0 - \xE0\xAC |0 - \xD4\xFB |0 - \xDF\xF7 |0 - \xC5\xE7 |0 - \xE0\xAD |0 - \xD3\xF7 |0 - \xE0\xB6 |0 - \xE0\xB7 |0 - \xE0\xC4 |0 - \xD0\xE1 |0 - \xE0\xBC |0 - \xE0\xC9 |0 - \xE0\xCA |0 - \xE0\xBE |0 - \xE0\xAA |0 - \xC9\xA4 |0 - \xE0\xC1 |0 - \xE0\xB2 |0 - \xCA\xC8 |0 - \xE0\xC3 |0 - \xE0\xB5 |0 - \xCE\xCB |0 - \xCB\xC3 |0 - \xE0\xCD |0 - \xE0\xC6 |0 - \xE0\xC2 |0 - \xE0\xCB |0 - \xE0\xBA |0 - \xE0\xBF |0 - \xE0\xC0 |0 - \xE0\xC5 |0 - \xE0\xC7 |0 - \xE0\xC8 |0 - \xE0\xCC |0 - \xE0\xBB |0 - \xCB\xD4 |0 - \xE0\xD5 |0 - \xE0\xD6 |0 - \xE0\xD2 |0 - \xE0\xD0 |0 - \xBC\xCE |0 - \xE0\xD1 |0 - \xB8\xC2 |0 - \xD8\xC5 |0 - \xD0\xEA |0 - \xC2\xEF |0 - \xE0\xCF |0 - \xE0\xBD |0 - \xE0\xD4 |0 - \xE0\xD3 |0 - \xE0\xD7 |0 - \xE0\xDC |0 - \xE0\xD8 |0 - \xD6\xF6 |0 - \xB3\xB0 |0 - \xD7\xEC |0 - \xCB\xBB |0 - \xE0\xDA |0 - \xCE\xFB |0 - \xBA\xD9 |0 - \xE0\xE1 |0 - \xE0\xDD |0 - \xD2\xAD |0 - \xE0\xE2 |0 - \xE0\xDB |0 - \xE0\xD9 |0 - \xE0\xDF |0 - \xE0\xE0 |0 - \xE0\xDE |0 - \xE0\xE4 |0 - \xC6\xF7 |0 - \xD8\xAC |0 - \xD4\xEB |0 - \xE0\xE6 |0 - \xCA\xC9 |0 - \xE0\xE5 |0 - \xB8\xC1 |0 - \xE0\xE7 |0 - \xE0\xE8 |0 - \xE0\xE9 |0 - \xE0\xE3 |0 - \xBA\xBF |0 - \xCC\xE7 |0 - \xE0\xEA |0 - \xCF\xF9 |0 - \xE0\xEB |0 - \xC8\xC2 |0 - \xBD\xC0 |0 - \xC4\xD2 |0 - \xE0\xEC |0 - \xE0\xED |0 - \xC7\xF4 |0 - \xCB\xC4 |0 - \xE0\xEE |0 - \xBB\xD8 |0 - \xD8\xB6 |0 - \xD2\xF2 |0 - \xE0\xEF |0 - \xCD\xC5 |0 - \xB6\xDA |0 - \xE0\xF1 |0 - \xD4\xB0 |0 - \xC0\xA7 |0 - \xB4\xD1 |0 - \xCE\xA7 |0 - \xE0\xF0 |0 - \xE0\xF2 |0 - \xB9\xCC |0 - \xB9\xFA |0 - \xCD\xBC |0 - \xE0\xF3 |0 - \xC6\xD4 |0 - \xE0\xF4 |0 - \xD4\xB2 |0 - \xC8\xA6 |0 - \xE0\xF6 |0 - \xE0\xF5 |0 - \xE0\xF7 |0 - \xCD\xC1 |0 - \xCA\xA5 |0 - \xD4\xDA |0 - \xDB\xD7 |0 - \xDB\xD9 |0 - \xDB\xD8 |0 - \xB9\xE7 |0 - \xDB\xDC |0 - \xDB\xDD |0 - \xB5\xD8 |0 - \xDB\xDA |0 - \xDB\xDB |0 - \xB3\xA1 |0 - \xDB\xDF |0 - \xBB\xF8 |0 - \xD6\xB7 |0 - \xDB\xE0 |0 - \xBE\xF9 |0 - \xB7\xBB |0 - \xDB\xD0 |0 - \xCC\xAE |0 - \xBF\xB2 |0 - \xBB\xB5 |0 - \xD7\xF8 |0 - \xBF\xD3 |0 - \xBF\xE9 |0 - \xBC\xE1 |0 - \xCC\xB3 |0 - \xDB\xDE |0 - \xB0\xD3 |0 - \xCE\xEB |0 - \xB7\xD8 |0 - \xD7\xB9 |0 - \xC6\xC2 |0 - \xC0\xA4 |0 - \xCC\xB9 |0 - \xDB\xE7 |0 - \xDB\xE1 |0 - \xC6\xBA |0 - \xDB\xE3 |0 - \xDB\xE8 |0 - \xC5\xF7 |0 - \xDB\xEA |0 - \xDB\xE9 |0 - \xBF\xC0 |0 - \xDB\xE6 |0 - \xDB\xE5 |0 - \xB4\xB9 |0 - \xC0\xAC |0 - \xC2\xA2 |0 - \xDB\xE2 |0 - \xDB\xE4 |0 - \xD0\xCD |0 - \xDB\xED |0 - \xC0\xDD |0 - \xDB\xF2 |0 - \xB6\xE2 |0 - \xDB\xF3 |0 - \xDB\xD2 |0 - \xB9\xB8 |0 - \xD4\xAB |0 - \xDB\xEC |0 - \xBF\xD1 |0 - \xDB\xF0 |0 - \xDB\xD1 |0 - \xB5\xE6 |0 - \xDB\xEB |0 - \xBF\xE5 |0 - \xDB\xEE |0 - \xDB\xF1 |0 - \xDB\xF9 |0 - \xB9\xA1 |0 - \xB0\xA3 |0 - \xC2\xF1 |0 - \xB3\xC7 |0 - \xDB\xEF |0 - \xDB\xF8 |0 - \xC6\xD2 |0 - \xDB\xF4 |0 - \xDB\xF5 |0 - \xDB\xF7 |0 - \xDB\xF6 |0 - \xDB\xFE |0 - \xD3\xF2 |0 - \xB2\xBA |0 - \xDB\xFD |0 - \xDC\xA4 |0 - \xDB\xFB |0 - \xDB\xFA |0 - \xDB\xFC |0 - \xC5\xE0 |0 - \xBB\xF9 |0 - \xDC\xA3 |0 - \xDC\xA5 |0 - \xCC\xC3 |0 - \xB6\xD1 |0 - \xDD\xC0 |0 - \xDC\xA1 |0 - \xDC\xA2 |0 - \xC7\xB5 |0 - \xB6\xE9 |0 - \xDC\xA7 |0 - \xDC\xA6 |0 - \xDC\xA9 |0 - \xB1\xA4 |0 - \xB5\xCC |0 - \xBF\xB0 |0 - \xD1\xDF |0 - \xB6\xC2 |0 - \xDC\xA8 |0 - \xCB\xFA |0 - \xEB\xF3 |0 - \xCB\xDC |0 - \xCB\xFE |0 - \xCC\xC1 |0 - \xC8\xFB |0 - \xDC\xAA |0 - \xCC\xEE |0 - \xDC\xAB |0 - \xDB\xD3 |0 - \xDC\xAF |0 - \xDC\xAC |0 - \xBE\xB3 |0 - \xCA\xFB |0 - \xDC\xAD |0 - \xC9\xCA |0 - \xC4\xB9 |0 - \xC7\xBD |0 - \xDC\xAE |0 - \xD4\xF6 |0 - \xD0\xE6 |0 - \xC4\xAB |0 - \xB6\xD5 |0 - \xDB\xD4 |0 - \xB1\xDA |0 - \xDB\xD5 |0 - \xDB\xD6 |0 - \xBA\xBE |0 - \xC8\xC0 |0 - \xCA\xBF |0 - \xC8\xC9 |0 - \xD7\xB3 |0 - \xC9\xF9 |0 - \xBF\xC7 |0 - \xBA\xF8 |0 - \xD2\xBC |0 - \xE2\xBA |0 - \xB4\xA6 |0 - \xB1\xB8 |0 - \xB8\xB4 |0 - \xCF\xC4 |0 - \xD9\xE7 |0 - \xCF\xA6 |0 - \xCD\xE2 |0 - \xD9\xED |0 - \xB6\xE0 |0 - \xD2\xB9 |0 - \xB9\xBB |0 - \xE2\xB9 |0 - \xE2\xB7 |0 - \xB4\xF3 |0 - \xCC\xEC |0 - \xCC\xAB |0 - \xB7\xF2 |0 - \xD8\xB2 |0 - \xD1\xEB |0 - \xBA\xBB |0 - \xCA\xA7 |0 - \xCD\xB7 |0 - \xD2\xC4 |0 - \xBF\xE4 |0 - \xBC\xD0 |0 - \xB6\xE1 |0 - \xDE\xC5 |0 - \xDE\xC6 |0 - \xDB\xBC |0 - \xD1\xD9 |0 - \xC6\xE6 |0 - \xC4\xCE |0 - \xB7\xEE |0 - \xB7\xDC |0 - \xBF\xFC |0 - \xD7\xE0 |0 - \xC6\xF5 |0 - \xB1\xBC |0 - \xDE\xC8 |0 - \xBD\xB1 |0 - \xCC\xD7 |0 - \xDE\xCA |0 - \xDE\xC9 |0 - \xB5\xEC |0 - \xC9\xDD |0 - \xB0\xC2 |0 - \xC5\xAE |0 - \xC5\xAB |0 - \xC4\xCC |0 - \xBC\xE9 |0 - \xCB\xFD |0 - \xBA\xC3 |0 - \xE5\xF9 |0 - \xC8\xE7 |0 - \xE5\xFA |0 - \xCD\xFD |0 - \xD7\xB1 |0 - \xB8\xBE |0 - \xC2\xE8 |0 - \xC8\xD1 |0 - \xE5\xFB |0 - \xB6\xCA |0 - \xBC\xCB |0 - \xD1\xFD |0 - \xE6\xA1 |0 - \xC3\xEE |0 - \xE6\xA4 |0 - \xE5\xFE |0 - \xE6\xA5 |0 - \xCD\xD7 |0 - \xB7\xC1 |0 - \xE5\xFC |0 - \xE5\xFD |0 - \xE6\xA3 |0 - \xC4\xDD |0 - \xE6\xA8 |0 - \xE6\xA7 |0 - \xC3\xC3 |0 - \xC6\xDE |0 - \xE6\xAA |0 - \xC4\xB7 |0 - \xE6\xA2 |0 - \xCA\xBC |0 - \xBD\xE3 |0 - \xB9\xC3 |0 - \xE6\xA6 |0 - \xD0\xD5 |0 - \xCE\xAF |0 - \xE6\xA9 |0 - \xE6\xB0 |0 - \xD2\xA6 |0 - \xBD\xAA |0 - \xE6\xAD |0 - \xE6\xAF |0 - \xC0\xD1 |0 - \xD2\xCC |0 - \xBC\xA7 |0 - \xE6\xB1 |0 - \xD2\xF6 |0 - \xD7\xCB |0 - \xCD\xFE |0 - \xCD\xDE |0 - \xC2\xA6 |0 - \xE6\xAB |0 - \xE6\xAC |0 - \xBD\xBF |0 - \xE6\xAE |0 - \xE6\xB3 |0 - \xE6\xB2 |0 - \xE6\xB6 |0 - \xE6\xB8 |0 - \xC4\xEF |0 - \xC4\xC8 |0 - \xBE\xEA |0 - \xC9\xEF |0 - \xE6\xB7 |0 - \xB6\xF0 |0 - \xC3\xE4 |0 - \xD3\xE9 |0 - \xE6\xB4 |0 - \xE6\xB5 |0 - \xC8\xA2 |0 - \xE6\xBD |0 - \xE6\xB9 |0 - \xC6\xC5 |0 - \xCD\xF1 |0 - \xE6\xBB |0 - \xE6\xBC |0 - \xBB\xE9 |0 - \xE6\xBE |0 - \xE6\xBA |0 - \xC0\xB7 |0 - \xD3\xA4 |0 - \xE6\xBF |0 - \xC9\xF4 |0 - \xE6\xC3 |0 - \xE6\xC4 |0 - \xD0\xF6 |0 - \xC3\xBD |0 - \xC3\xC4 |0 - \xE6\xC2 |0 - \xE6\xC1 |0 - \xE6\xC7 |0 - \xCF\xB1 |0 - \xEB\xF4 |0 - \xE6\xCA |0 - \xE6\xC5 |0 - \xBC\xDE |0 - \xC9\xA9 |0 - \xBC\xB5 |0 - \xCF\xD3 |0 - \xE6\xC8 |0 - \xE6\xC9 |0 - \xE6\xCE |0 - \xE6\xD0 |0 - \xE6\xD1 |0 - \xE6\xCB |0 - \xB5\xD5 |0 - \xE6\xCC |0 - \xE6\xCF |0 - \xC4\xDB |0 - \xE6\xC6 |0 - \xE6\xCD |0 - \xE6\xD2 |0 - \xE6\xD4 |0 - \xE6\xD3 |0 - \xE6\xD5 |0 - \xD9\xF8 |0 - \xE6\xD6 |0 - \xE6\xD7 |0 - \xD7\xD3 |0 - \xE6\xDD |0 - \xE6\xDE |0 - \xBF\xD7 |0 - \xD4\xD0 |0 - \xD7\xD6 |0 - \xB4\xE6 |0 - \xCB\xEF |0 - \xE6\xDA |0 - \xD8\xC3 |0 - \xD7\xCE |0 - \xD0\xA2 |0 - \xC3\xCF |0 - \xE6\xDF |0 - \xBC\xBE |0 - \xB9\xC2 |0 - \xE6\xDB |0 - \xD1\xA7 |0 - \xBA\xA2 |0 - \xC2\xCF |0 - \xD8\xAB |0 - \xCA\xEB |0 - \xE5\xEE |0 - \xE6\xDC |0 - \xB7\xF5 |0 - \xC8\xE6 |0 - \xC4\xF5 |0 - \xE5\xB2 |0 - \xC4\xFE |0 - \xCB\xFC |0 - \xE5\xB3 |0 - \xD5\xAC |0 - \xD3\xEE |0 - \xCA\xD8 |0 - \xB0\xB2 |0 - \xCB\xCE |0 - \xCD\xEA |0 - \xBA\xEA |0 - \xE5\xB5 |0 - \xE5\xB4 |0 - \xD7\xDA |0 - \xB9\xD9 |0 - \xD6\xE6 |0 - \xB6\xA8 |0 - \xCD\xF0 |0 - \xD2\xCB |0 - \xB1\xA6 |0 - \xCA\xB5 |0 - \xB3\xE8 |0 - \xC9\xF3 |0 - \xBF\xCD |0 - \xD0\xFB |0 - \xCA\xD2 |0 - \xE5\xB6 |0 - \xBB\xC2 |0 - \xCF\xDC |0 - \xB9\xAC |0 - \xD4\xD7 |0 - \xBA\xA6 |0 - \xD1\xE7 |0 - \xCF\xFC |0 - \xBC\xD2 |0 - \xE5\xB7 |0 - \xC8\xDD |0 - \xBF\xED |0 - \xB1\xF6 |0 - \xCB\xDE |0 - \xBC\xC5 |0 - \xBC\xC4 |0 - \xD2\xFA |0 - \xC3\xDC |0 - \xBF\xDC |0 - \xB8\xBB |0 - \xC3\xC2 |0 - \xBA\xAE |0 - \xD4\xA2 |0 - \xC7\xDE |0 - \xC4\xAF |0 - \xB2\xEC |0 - \xB9\xD1 |0 - \xE5\xBB |0 - \xC1\xC8 |0 - \xD5\xAF |0 - \xE5\xBC |0 - \xE5\xBE |0 - \xB4\xE7 |0 - \xB6\xD4 |0 - \xCB\xC2 |0 - \xD1\xB0 |0 - \xB5\xBC |0 - \xCA\xD9 |0 - \xB7\xE2 |0 - \xC9\xE4 |0 - \xBD\xAB |0 - \xCE\xBE |0 - \xD7\xF0 |0 - \xD0\xA1 |0 - \xC9\xD9 |0 - \xB6\xFB |0 - \xE6\xD8 |0 - \xBC\xE2 |0 - \xB3\xBE |0 - \xC9\xD0 |0 - \xE6\xD9 |0 - \xB3\xA2 |0 - \xDE\xCC |0 - \xD3\xC8 |0 - \xDE\xCD |0 - \xD2\xA2 |0 - \xDE\xCE |0 - \xBE\xCD |0 - \xDE\xCF |0 - \xCA\xAC |0 - \xD2\xFC |0 - \xB3\xDF |0 - \xE5\xEA |0 - \xC4\xE1 |0 - \xBE\xA1 |0 - \xCE\xB2 |0 - \xC4\xF2 |0 - \xBE\xD6 |0 - \xC6\xA8 |0 - \xB2\xE3 |0 - \xBE\xD3 |0 - \xC7\xFC |0 - \xCC\xEB |0 - \xBD\xEC |0 - \xCE\xDD |0 - \xCA\xBA |0 - \xC6\xC1 |0 - \xE5\xEC |0 - \xD0\xBC |0 - \xD5\xB9 |0 - \xE5\xED |0 - \xCA\xF4 |0 - \xCD\xC0 |0 - \xC2\xC5 |0 - \xE5\xEF |0 - \xC2\xC4 |0 - \xE5\xF0 |0 - \xE5\xF8 |0 - \xCD\xCD |0 - \xC9\xBD |0 - \xD2\xD9 |0 - \xE1\xA8 |0 - \xD3\xEC |0 - \xCB\xEA |0 - \xC6\xF1 |0 - \xE1\xAC |0 - \xE1\xA7 |0 - \xE1\xA9 |0 - \xE1\xAA |0 - \xE1\xAF |0 - \xB2\xED |0 - \xE1\xAB |0 - \xB8\xDA |0 - \xE1\xAD |0 - \xE1\xAE |0 - \xE1\xB0 |0 - \xB5\xBA |0 - \xE1\xB1 |0 - \xE1\xB3 |0 - \xE1\xB8 |0 - \xD1\xD2 |0 - \xE1\xB6 |0 - \xE1\xB5 |0 - \xC1\xEB |0 - \xE1\xB7 |0 - \xD4\xC0 |0 - \xE1\xB2 |0 - \xE1\xBA |0 - \xB0\xB6 |0 - \xE1\xB4 |0 - \xBF\xF9 |0 - \xE1\xB9 |0 - \xE1\xBB |0 - \xE1\xBE |0 - \xE1\xBC |0 - \xD6\xC5 |0 - \xCF\xBF |0 - \xE1\xBD |0 - \xE1\xBF |0 - \xC2\xCD |0 - \xB6\xEB |0 - \xD3\xF8 |0 - \xC7\xCD |0 - \xB7\xE5 |0 - \xBE\xFE |0 - \xE1\xC0 |0 - \xE1\xC1 |0 - \xE1\xC7 |0 - \xB3\xE7 |0 - \xC6\xE9 |0 - \xB4\xDE |0 - \xD1\xC2 |0 - \xE1\xC8 |0 - \xE1\xC6 |0 - \xE1\xC5 |0 - \xE1\xC3 |0 - \xE1\xC2 |0 - \xB1\xC0 |0 - \xD5\xB8 |0 - \xE1\xC4 |0 - \xE1\xCB |0 - \xE1\xCC |0 - \xE1\xCA |0 - \xEF\xFA |0 - \xE1\xD3 |0 - \xE1\xD2 |0 - \xC7\xB6 |0 - \xE1\xC9 |0 - \xE1\xCE |0 - \xE1\xD0 |0 - \xE1\xD4 |0 - \xE1\xD1 |0 - \xE1\xCD |0 - \xE1\xCF |0 - \xE1\xD5 |0 - \xE1\xD6 |0 - \xE1\xD7 |0 - \xE1\xD8 |0 - \xE1\xDA |0 - \xE1\xDB |0 - \xCE\xA1 |0 - \xE7\xDD |0 - \xB4\xA8 |0 - \xD6\xDD |0 - \xD1\xB2 |0 - \xB3\xB2 |0 - \xB9\xA4 |0 - \xD7\xF3 |0 - \xC7\xC9 |0 - \xBE\xDE |0 - \xB9\xAE |0 - \xCE\xD7 |0 - \xB2\xEE |0 - \xDB\xCF |0 - \xBC\xBA |0 - \xD2\xD1 |0 - \xCB\xC8 |0 - \xB0\xCD |0 - \xCF\xEF |0 - \xD9\xE3 |0 - \xBD\xED |0 - \xB1\xD2 |0 - \xCA\xD0 |0 - \xB2\xBC |0 - \xCB\xA7 |0 - \xB7\xAB |0 - \xCA\xA6 |0 - \xCF\xA3 |0 - \xE0\xF8 |0 - \xD5\xCA |0 - \xE0\xFB |0 - \xE0\xFA |0 - \xC5\xC1 |0 - \xCC\xFB |0 - \xC1\xB1 |0 - \xE0\xF9 |0 - \xD6\xE3 |0 - \xB2\xAF |0 - \xD6\xC4 |0 - \xB5\xDB |0 - \xB4\xF8 |0 - \xD6\xA1 |0 - \xCF\xAF |0 - \xB0\xEF |0 - \xE0\xFC |0 - \xE1\xA1 |0 - \xB3\xA3 |0 - \xE0\xFD |0 - \xE0\xFE |0 - \xC3\xB1 |0 - \xC3\xDD |0 - \xE1\xA2 |0 - \xB7\xF9 |0 - \xBB\xCF |0 - \xE1\xA3 |0 - \xC4\xBB |0 - \xE1\xA4 |0 - \xE1\xA5 |0 - \xE1\xA6 |0 - \xB4\xB1 |0 - \xB8\xC9 |0 - \xC6\xBD |0 - \xC4\xEA |0 - \xB2\xA2 |0 - \xD0\xD2 |0 - \xE7\xDB |0 - \xBB\xC3 |0 - \xD3\xD7 |0 - \xD3\xC4 |0 - \xB9\xE3 |0 - \xE2\xCF |0 - \xD7\xAF |0 - \xC7\xEC |0 - \xB1\xD3 |0 - \xB4\xB2 |0 - \xE2\xD1 |0 - \xD0\xF2 |0 - \xC2\xAE |0 - \xE2\xD0 |0 - \xBF\xE2 |0 - \xD3\xA6 |0 - \xB5\xD7 |0 - \xE2\xD2 |0 - \xB5\xEA |0 - \xC3\xED |0 - \xB8\xFD |0 - \xB8\xAE |0 - \xC5\xD3 |0 - \xB7\xCF |0 - \xE2\xD4 |0 - \xE2\xD3 |0 - \xB6\xC8 |0 - \xD7\xF9 |0 - \xCD\xA5 |0 - \xE2\xD8 |0 - \xE2\xD6 |0 - \xCA\xFC |0 - \xBF\xB5 |0 - \xD3\xB9 |0 - \xE2\xD5 |0 - \xE2\xD7 |0 - \xC1\xAE |0 - \xC0\xC8 |0 - \xE2\xDB |0 - \xE2\xDA |0 - \xC0\xAA |0 - \xC1\xCE |0 - \xE2\xDC |0 - \xE2\xDD |0 - \xE2\xDE |0 - \xDB\xC8 |0 - \xD1\xD3 |0 - \xCD\xA2 |0 - \xBD\xA8 |0 - \xDE\xC3 |0 - \xD8\xA5 |0 - \xBF\xAA |0 - \xDB\xCD |0 - \xD2\xEC |0 - \xC6\xFA |0 - \xC5\xAA |0 - \xDE\xC4 |0 - \xB1\xD7 |0 - \xDF\xAE |0 - \xCA\xBD |0 - \xDF\xB1 |0 - \xB9\xAD |0 - \xD2\xFD |0 - \xB8\xA5 |0 - \xBA\xEB |0 - \xB3\xDA |0 - \xB5\xDC |0 - \xD5\xC5 |0 - \xC3\xD6 |0 - \xCF\xD2 |0 - \xBB\xA1 |0 - \xE5\xF3 |0 - \xE5\xF2 |0 - \xE5\xF4 |0 - \xCD\xE4 |0 - \xC8\xF5 |0 - \xB5\xAF |0 - \xC7\xBF |0 - \xE5\xF6 |0 - \xEC\xB0 |0 - \xE5\xE6 |0 - \xB9\xE9 |0 - \xB5\xB1 |0 - \xC2\xBC |0 - \xE5\xE8 |0 - \xE5\xE7 |0 - \xE5\xE9 |0 - \xD2\xCD |0 - \xE1\xEA |0 - \xD0\xCE |0 - \xCD\xAE |0 - \xD1\xE5 |0 - \xB2\xCA |0 - \xB1\xEB |0 - \xB1\xF2 |0 - \xC5\xED |0 - \xD5\xC3 |0 - \xD3\xB0 |0 - \xE1\xDC |0 - \xE1\xDD |0 - \xD2\xDB |0 - \xB3\xB9 |0 - \xB1\xCB |0 - \xCD\xF9 |0 - \xD5\xF7 |0 - \xE1\xDE |0 - \xBE\xB6 |0 - \xB4\xFD |0 - \xE1\xDF |0 - \xBA\xDC |0 - \xE1\xE0 |0 - \xBB\xB2 |0 - \xC2\xC9 |0 - \xE1\xE1 |0 - \xD0\xEC |0 - \xCD\xBD |0 - \xE1\xE2 |0 - \xB5\xC3 |0 - \xC5\xC7 |0 - \xE1\xE3 |0 - \xE1\xE4 |0 - \xD3\xF9 |0 - \xE1\xE5 |0 - \xD1\xAD |0 - \xE1\xE6 |0 - \xCE\xA2 |0 - \xE1\xE7 |0 - \xB5\xC2 |0 - \xE1\xE8 |0 - \xBB\xD5 |0 - \xD0\xC4 |0 - \xE2\xE0 |0 - \xB1\xD8 |0 - \xD2\xE4 |0 - \xE2\xE1 |0 - \xBC\xC9 |0 - \xC8\xCC |0 - \xE2\xE3 |0 - \xEC\xFE |0 - \xEC\xFD |0 - \xDF\xAF |0 - \xE2\xE2 |0 - \xD6\xBE |0 - \xCD\xFC |0 - \xC3\xA6 |0 - \xE3\xC3 |0 - \xD6\xD2 |0 - \xE2\xE7 |0 - \xE2\xE8 |0 - \xD3\xC7 |0 - \xE2\xEC |0 - \xBF\xEC |0 - \xE2\xED |0 - \xE2\xE5 |0 - \xB3\xC0 |0 - \xC4\xEE |0 - \xE2\xEE |0 - \xD0\xC3 |0 - \xBA\xF6 |0 - \xE2\xE9 |0 - \xB7\xDE |0 - \xBB\xB3 |0 - \xCC\xAC |0 - \xCB\xCB |0 - \xE2\xE4 |0 - \xE2\xE6 |0 - \xE2\xEA |0 - \xE2\xEB |0 - \xE2\xF7 |0 - \xE2\xF4 |0 - \xD4\xF5 |0 - \xE2\xF3 |0 - \xC5\xAD |0 - \xD5\xFA |0 - \xC5\xC2 |0 - \xB2\xC0 |0 - \xE2\xEF |0 - \xE2\xF2 |0 - \xC1\xAF |0 - \xCB\xBC |0 - \xB5\xA1 |0 - \xE2\xF9 |0 - \xBC\xB1 |0 - \xE2\xF1 |0 - \xD0\xD4 |0 - \xD4\xB9 |0 - \xE2\xF5 |0 - \xB9\xD6 |0 - \xE2\xF6 |0 - \xC7\xD3 |0 - \xE2\xF0 |0 - \xD7\xDC |0 - \xED\xA1 |0 - \xE2\xF8 |0 - \xED\xA5 |0 - \xE2\xFE |0 - \xCA\xD1 |0 - \xC1\xB5 |0 - \xBB\xD0 |0 - \xBF\xD6 |0 - \xBA\xE3 |0 - \xCB\xA1 |0 - \xED\xA6 |0 - \xED\xA3 |0 - \xED\xA2 |0 - \xBB\xD6 |0 - \xED\xA7 |0 - \xD0\xF4 |0 - \xED\xA4 |0 - \xBA\xDE |0 - \xB6\xF7 |0 - \xE3\xA1 |0 - \xB6\xB2 |0 - \xCC\xF1 |0 - \xB9\xA7 |0 - \xCF\xA2 |0 - \xC7\xA1 |0 - \xBF\xD2 |0 - \xB6\xF1 |0 - \xE2\xFA |0 - \xE2\xFB |0 - \xE2\xFD |0 - \xE2\xFC |0 - \xC4\xD5 |0 - \xE3\xA2 |0 - \xD3\xC1 |0 - \xE3\xA7 |0 - \xC7\xC4 |0 - \xCF\xA4 |0 - \xE3\xA9 |0 - \xBA\xB7 |0 - \xE3\xA8 |0 - \xBB\xDA |0 - \xE3\xA3 |0 - \xE3\xA4 |0 - \xE3\xAA |0 - \xE3\xA6 |0 - \xCE\xF2 |0 - \xD3\xC6 |0 - \xBB\xBC |0 - \xD4\xC3 |0 - \xC4\xFA |0 - \xED\xA8 |0 - \xD0\xFC |0 - \xE3\xA5 |0 - \xC3\xF5 |0 - \xE3\xAD |0 - \xB1\xAF |0 - \xE3\xB2 |0 - \xBC\xC2 |0 - \xE3\xAC |0 - \xB5\xBF |0 - \xC7\xE9 |0 - \xE3\xB0 |0 - \xBE\xAA |0 - \xCD\xEF |0 - \xBB\xF3 |0 - \xCC\xE8 |0 - \xE3\xAF |0 - \xE3\xB1 |0 - \xCF\xA7 |0 - \xE3\xAE |0 - \xCE\xA9 |0 - \xBB\xDD |0 - \xB5\xEB |0 - \xBE\xE5 |0 - \xB2\xD2 |0 - \xB3\xCD |0 - \xB1\xB9 |0 - \xE3\xAB |0 - \xB2\xD1 |0 - \xB5\xAC |0 - \xB9\xDF |0 - \xB6\xE8 |0 - \xCF\xEB |0 - \xE3\xB7 |0 - \xBB\xCC |0 - \xC8\xC7 |0 - \xD0\xCA |0 - \xE3\xB8 |0 - \xB3\xEE |0 - \xED\xA9 |0 - \xD3\xFA |0 - \xD3\xE4 |0 - \xED\xAA |0 - \xE3\xB9 |0 - \xD2\xE2 |0 - \xE3\xB5 |0 - \xD3\xDE |0 - \xB8\xD0 |0 - \xE3\xB3 |0 - \xE3\xB6 |0 - \xB7\xDF |0 - \xE3\xB4 |0 - \xC0\xA2 |0 - \xE3\xBA |0 - \xD4\xB8 |0 - \xB4\xC8 |0 - \xE3\xBB |0 - \xBB\xC5 |0 - \xC9\xF7 |0 - \xC9\xE5 |0 - \xC4\xBD |0 - \xED\xAB |0 - \xC2\xFD |0 - \xBB\xDB |0 - \xBF\xAE |0 - \xCE\xBF |0 - \xE3\xBC |0 - \xBF\xB6 |0 - \xB1\xEF |0 - \xD4\xF7 |0 - \xE3\xBE |0 - \xED\xAD |0 - \xE3\xBF |0 - \xBA\xA9 |0 - \xED\xAC |0 - \xE3\xBD |0 - \xE3\xC0 |0 - \xBA\xB6 |0 - \xB6\xAE |0 - \xD0\xB8 |0 - \xB0\xC3 |0 - \xED\xAE |0 - \xED\xAF |0 - \xC0\xC1 |0 - \xE3\xC1 |0 - \xC5\xB3 |0 - \xE3\xC2 |0 - \xDC\xB2 |0 - \xED\xB0 |0 - \xB8\xEA |0 - \xCE\xEC |0 - \xEA\xA7 |0 - \xD0\xE7 |0 - \xCA\xF9 |0 - \xC8\xD6 |0 - \xCF\xB7 |0 - \xB3\xC9 |0 - \xCE\xD2 |0 - \xBD\xE4 |0 - \xE3\xDE |0 - \xBB\xF2 |0 - \xEA\xA8 |0 - \xD5\xBD |0 - \xC6\xDD |0 - \xEA\xA9 |0 - \xEA\xAA |0 - \xEA\xAC |0 - \xEA\xAB |0 - \xEA\xAE |0 - \xEA\xAD |0 - \xBD\xD8 |0 - \xEA\xAF |0 - \xC2\xBE |0 - \xB4\xC1 |0 - \xB4\xF7 |0 - \xBB\xA7 |0 - \xEC\xE6 |0 - \xEC\xE5 |0 - \xB7\xBF |0 - \xCB\xF9 |0 - \xB1\xE2 |0 - \xEC\xE7 |0 - \xC9\xC8 |0 - \xEC\xE8 |0 - \xEC\xE9 |0 - \xCA\xD6 |0 - \xDE\xD0 |0 - \xB2\xC5 |0 - \xD4\xFA |0 - \xC6\xCB |0 - \xB0\xC7 |0 - \xB4\xF2 |0 - \xC8\xD3 |0 - \xCD\xD0 |0 - \xBF\xB8 |0 - \xBF\xDB |0 - \xC7\xA4 |0 - \xD6\xB4 |0 - \xC0\xA9 |0 - \xDE\xD1 |0 - \xC9\xA8 |0 - \xD1\xEF |0 - \xC5\xA4 |0 - \xB0\xE7 |0 - \xB3\xB6 |0 - \xC8\xC5 |0 - \xB0\xE2 |0 - \xB7\xF6 |0 - \xC5\xFA |0 - \xB6\xF3 |0 - \xD5\xD2 |0 - \xB3\xD0 |0 - \xBC\xBC |0 - \xB3\xAD |0 - \xBE\xF1 |0 - \xB0\xD1 |0 - \xD2\xD6 |0 - \xCA\xE3 |0 - \xD7\xA5 |0 - \xCD\xB6 |0 - \xB6\xB6 |0 - \xBF\xB9 |0 - \xD5\xDB |0 - \xB8\xA7 |0 - \xC5\xD7 |0 - \xDE\xD2 |0 - \xBF\xD9 |0 - \xC2\xD5 |0 - \xC7\xC0 |0 - \xBB\xA4 |0 - \xB1\xA8 |0 - \xC5\xEA |0 - \xC5\xFB |0 - \xCC\xA7 |0 - \xB1\xA7 |0 - \xB5\xD6 |0 - \xC4\xA8 |0 - \xDE\xD3 |0 - \xD1\xBA |0 - \xB3\xE9 |0 - \xC3\xF2 |0 - \xB7\xF7 |0 - \xD6\xF4 |0 - \xB5\xA3 |0 - \xB2\xF0 |0 - \xC4\xB4 |0 - \xC4\xE9 |0 - \xC0\xAD |0 - \xDE\xD4 |0 - \xB0\xE8 |0 - \xC5\xC4 |0 - \xC1\xE0 |0 - \xB9\xD5 |0 - \xBE\xDC |0 - \xCD\xD8 |0 - \xB0\xCE |0 - \xCD\xCF |0 - \xDE\xD6 |0 - \xBE\xD0 |0 - \xD7\xBE |0 - \xDE\xD5 |0 - \xD5\xD0 |0 - \xB0\xDD |0 - \xC4\xE2 |0 - \xC2\xA3 |0 - \xBC\xF0 |0 - \xD3\xB5 |0 - \xC0\xB9 |0 - \xC5\xA1 |0 - \xB2\xA6 |0 - \xD4\xF1 |0 - \xC0\xA8 |0 - \xCA\xC3 |0 - \xDE\xD7 |0 - \xD5\xFC |0 - \xB9\xB0 |0 - \xC8\xAD |0 - \xCB\xA9 |0 - \xDE\xD9 |0 - \xBF\xBD |0 - \xC6\xB4 |0 - \xD7\xA7 |0 - \xCA\xB0 |0 - \xC4\xC3 |0 - \xB3\xD6 |0 - \xB9\xD2 |0 - \xD6\xB8 |0 - \xEA\xFC |0 - \xB0\xB4 |0 - \xBF\xE6 |0 - \xCC\xF4 |0 - \xCD\xDA |0 - \xD6\xBF |0 - \xC2\xCE |0 - \xCE\xCE |0 - \xCC\xA2 |0 - \xD0\xAE |0 - \xC4\xD3 |0 - \xB5\xB2 |0 - \xDE\xD8 |0 - \xD5\xF5 |0 - \xBC\xB7 |0 - \xBB\xD3 |0 - \xB0\xA4 |0 - \xC5\xB2 |0 - \xB4\xEC |0 - \xD5\xF1 |0 - \xEA\xFD |0 - \xDE\xDA |0 - \xCD\xA6 |0 - \xCD\xEC |0 - \xCE\xE6 |0 - \xDE\xDC |0 - \xCD\xB1 |0 - \xC0\xA6 |0 - \xD7\xBD |0 - \xDE\xDB |0 - \xB0\xC6 |0 - \xBA\xB4 |0 - \xC9\xD3 |0 - \xC4\xF3 |0 - \xBE\xE8 |0 - \xB2\xB6 |0 - \xC0\xCC |0 - \xCB\xF0 |0 - \xBC\xF1 |0 - \xBB\xBB |0 - \xB5\xB7 |0 - \xC5\xF5 |0 - \xDE\xE6 |0 - \xDE\xE3 |0 - \xBE\xDD |0 - \xDE\xDF |0 - \xB4\xB7 |0 - \xBD\xDD |0 - \xDE\xE0 |0 - \xC4\xED |0 - \xCF\xC6 |0 - \xB5\xE0 |0 - \xB6\xDE |0 - \xCA\xDA |0 - \xB5\xF4 |0 - \xDE\xE5 |0 - \xD5\xC6 |0 - \xDE\xE1 |0 - \xCC\xCD |0 - \xC6\xFE |0 - \xC5\xC5 |0 - \xD2\xB4 |0 - \xBE\xF2 |0 - \xC2\xD3 |0 - \xCC\xBD |0 - \xB3\xB8 |0 - \xBD\xD3 |0 - \xBF\xD8 |0 - \xCD\xC6 |0 - \xD1\xDA |0 - \xB4\xEB |0 - \xDE\xE4 |0 - \xDE\xDD |0 - \xDE\xE7 |0 - \xEA\xFE |0 - \xC2\xB0 |0 - \xDE\xE2 |0 - \xD6\xC0 |0 - \xB5\xA7 |0 - \xB2\xF4 |0 - \xDE\xE8 |0 - \xDE\xF2 |0 - \xDE\xED |0 - \xDE\xF1 |0 - \xC8\xE0 |0 - \xD7\xE1 |0 - \xDE\xEF |0 - \xC3\xE8 |0 - \xCC\xE1 |0 - \xB2\xE5 |0 - \xD2\xBE |0 - \xDE\xEE |0 - \xDE\xEB |0 - \xCE\xD5 |0 - \xB4\xA7 |0 - \xBF\xAB |0 - \xBE\xBE |0 - \xBD\xD2 |0 - \xDE\xE9 |0 - \xD4\xAE |0 - \xDE\xDE |0 - \xDE\xEA |0 - \xC0\xBF |0 - \xDE\xEC |0 - \xB2\xF3 |0 - \xB8\xE9 |0 - \xC2\xA7 |0 - \xBD\xC1 |0 - \xDE\xF5 |0 - \xDE\xF8 |0 - \xB2\xAB |0 - \xB4\xA4 |0 - \xB4\xEA |0 - \xC9\xA6 |0 - \xDE\xF6 |0 - \xCB\xD1 |0 - \xB8\xE3 |0 - \xDE\xF7 |0 - \xDE\xFA |0 - \xDE\xF9 |0 - \xCC\xC2 |0 - \xB0\xE1 |0 - \xB4\xEE |0 - \xE5\xBA |0 - \xD0\xAF |0 - \xB2\xEB |0 - \xEB\xA1 |0 - \xDE\xF4 |0 - \xC9\xE3 |0 - \xDE\xF3 |0 - \xB0\xDA |0 - \xD2\xA1 |0 - \xB1\xF7 |0 - \xCC\xAF |0 - \xDE\xF0 |0 - \xCB\xA4 |0 - \xD5\xAA |0 - \xDE\xFB |0 - \xB4\xDD |0 - \xC4\xA6 |0 - \xDE\xFD |0 - \xC3\xFE |0 - \xC4\xA1 |0 - \xDF\xA1 |0 - \xC1\xCC |0 - \xDE\xFC |0 - \xBE\xEF |0 - \xC6\xB2 |0 - \xB3\xC5 |0 - \xC8\xF6 |0 - \xCB\xBA |0 - \xDE\xFE |0 - \xDF\xA4 |0 - \xD7\xB2 |0 - \xB3\xB7 |0 - \xC1\xC3 |0 - \xC7\xCB |0 - \xB2\xA5 |0 - \xB4\xE9 |0 - \xD7\xAB |0 - \xC4\xEC |0 - \xDF\xA2 |0 - \xDF\xA3 |0 - \xDF\xA5 |0 - \xBA\xB3 |0 - \xDF\xA6 |0 - \xC0\xDE |0 - \xC9\xC3 |0 - \xB2\xD9 |0 - \xC7\xE6 |0 - \xDF\xA7 |0 - \xC7\xDC |0 - \xDF\xA8 |0 - \xEB\xA2 |0 - \xCB\xD3 |0 - \xDF\xAA |0 - \xDF\xA9 |0 - \xB2\xC1 |0 - \xC5\xCA |0 - \xDF\xAB |0 - \xD4\xDC |0 - \xC8\xC1 |0 - \xDF\xAC |0 - \xBE\xF0 |0 - \xDF\xAD |0 - \xD6\xA7 |0 - \xEA\xB7 |0 - \xEB\xB6 |0 - \xCA\xD5 |0 - \xD8\xFC |0 - \xB8\xC4 |0 - \xB9\xA5 |0 - \xB7\xC5 |0 - \xD5\xFE |0 - \xB9\xCA |0 - \xD0\xA7 |0 - \xF4\xCD |0 - \xB5\xD0 |0 - \xC3\xF4 |0 - \xBE\xC8 |0 - \xEB\xB7 |0 - \xB0\xBD |0 - \xBD\xCC |0 - \xC1\xB2 |0 - \xB1\xD6 |0 - \xB3\xA8 |0 - \xB8\xD2 |0 - \xC9\xA2 |0 - \xB6\xD8 |0 - \xEB\xB8 |0 - \xBE\xB4 |0 - \xCA\xFD |0 - \xC7\xC3 |0 - \xD5\xFB |0 - \xB7\xF3 |0 - \xCE\xC4 |0 - \xD5\xAB |0 - \xB1\xF3 |0 - \xEC\xB3 |0 - \xB0\xDF |0 - \xEC\xB5 |0 - \xB6\xB7 |0 - \xC1\xCF |0 - \xF5\xFA |0 - \xD0\xB1 |0 - \xD5\xE5 |0 - \xCE\xD3 |0 - \xBD\xEF |0 - \xB3\xE2 |0 - \xB8\xAB |0 - \xD5\xB6 |0 - \xED\xBD |0 - \xB6\xCF |0 - \xCB\xB9 |0 - \xD0\xC2 |0 - \xB7\xBD |0 - \xEC\xB6 |0 - \xCA\xA9 |0 - \xC5\xD4 |0 - \xEC\xB9 |0 - \xEC\xB8 |0 - \xC2\xC3 |0 - \xEC\xB7 |0 - \xD0\xFD |0 - \xEC\xBA |0 - \xEC\xBB |0 - \xD7\xE5 |0 - \xEC\xBC |0 - \xEC\xBD |0 - \xC6\xEC |0 - \xCE\xDE |0 - \xBC\xC8 |0 - \xC8\xD5 |0 - \xB5\xA9 |0 - \xBE\xC9 |0 - \xD6\xBC |0 - \xD4\xE7 |0 - \xD1\xAE |0 - \xD0\xF1 |0 - \xEA\xB8 |0 - \xEA\xB9 |0 - \xEA\xBA |0 - \xBA\xB5 |0 - \xCA\xB1 |0 - \xBF\xF5 |0 - \xCD\xFA |0 - \xEA\xC0 |0 - \xB0\xBA |0 - \xEA\xBE |0 - \xC0\xA5 |0 - \xEA\xBB |0 - \xB2\xFD |0 - \xC3\xF7 |0 - \xBB\xE8 |0 - \xD2\xD7 |0 - \xCE\xF4 |0 - \xEA\xBF |0 - \xEA\xBC |0 - \xEA\xC3 |0 - \xD0\xC7 |0 - \xD3\xB3 |0 - \xB4\xBA |0 - \xC3\xC1 |0 - \xD7\xF2 |0 - \xD5\xD1 |0 - \xCA\xC7 |0 - \xEA\xC5 |0 - \xEA\xC4 |0 - \xEA\xC7 |0 - \xEA\xC6 |0 - \xD6\xE7 |0 - \xCF\xD4 |0 - \xEA\xCB |0 - \xBB\xCE |0 - \xBD\xFA |0 - \xC9\xCE |0 - \xEA\xCC |0 - \xC9\xB9 |0 - \xCF\xFE |0 - \xEA\xCA |0 - \xD4\xCE |0 - \xEA\xCD |0 - \xEA\xCF |0 - \xCD\xED |0 - \xEA\xC9 |0 - \xEA\xCE |0 - \xCE\xEE |0 - \xBB\xDE |0 - \xB3\xBF |0 - \xC6\xD5 |0 - \xBE\xB0 |0 - \xCE\xFA |0 - \xC7\xE7 |0 - \xBE\xA7 |0 - \xEA\xD0 |0 - \xD6\xC7 |0 - \xC1\xC0 |0 - \xD4\xDD |0 - \xEA\xD1 |0 - \xCF\xBE |0 - \xEA\xD2 |0 - \xCA\xEE |0 - \xC5\xAF |0 - \xB0\xB5 |0 - \xEA\xD4 |0 - \xEA\xD3 |0 - \xF4\xDF |0 - \xC4\xBA |0 - \xB1\xA9 |0 - \xE5\xDF |0 - \xEA\xD5 |0 - \xCA\xEF |0 - \xEA\xD6 |0 - \xEA\xD7 |0 - \xC6\xD8 |0 - \xEA\xD8 |0 - \xEA\xD9 |0 - \xD4\xBB |0 - \xC7\xFA |0 - \xD2\xB7 |0 - \xB8\xFC |0 - \xEA\xC2 |0 - \xB2\xDC |0 - \xC2\xFC |0 - \xD4\xF8 |0 - \xCC\xE6 |0 - \xD7\xEE |0 - \xD4\xC2 |0 - \xD3\xD0 |0 - \xEB\xC3 |0 - \xC5\xF3 |0 - \xB7\xFE |0 - \xEB\xD4 |0 - \xCB\xB7 |0 - \xEB\xDE |0 - \xC0\xCA |0 - \xCD\xFB |0 - \xB3\xAF |0 - \xC6\xDA |0 - \xEB\xFC |0 - \xC4\xBE |0 - \xCE\xB4 |0 - \xC4\xA9 |0 - \xB1\xBE |0 - \xD4\xFD |0 - \xCA\xF5 |0 - \xD6\xEC |0 - \xC6\xD3 |0 - \xB6\xE4 |0 - \xBB\xFA |0 - \xD0\xE0 |0 - \xC9\xB1 |0 - \xD4\xD3 |0 - \xC8\xA8 |0 - \xB8\xCB |0 - \xE8\xBE |0 - \xC9\xBC |0 - \xE8\xBB |0 - \xC0\xEE |0 - \xD0\xD3 |0 - \xB2\xC4 |0 - \xB4\xE5 |0 - \xE8\xBC |0 - \xD5\xC8 |0 - \xB6\xC5 |0 - \xE8\xBD |0 - \xCA\xF8 |0 - \xB8\xDC |0 - \xCC\xF5 |0 - \xC0\xB4 |0 - \xD1\xEE |0 - \xE8\xBF |0 - \xE8\xC2 |0 - \xBA\xBC |0 - \xB1\xAD |0 - \xBD\xDC |0 - \xEA\xBD |0 - \xE8\xC3 |0 - \xE8\xC6 |0 - \xE8\xCB |0 - \xE8\xCC |0 - \xCB\xC9 |0 - \xB0\xE5 |0 - \xBC\xAB |0 - \xB9\xB9 |0 - \xE8\xC1 |0 - \xCD\xF7 |0 - \xE8\xCA |0 - \xCE\xF6 |0 - \xD5\xED |0 - \xC1\xD6 |0 - \xE8\xC4 |0 - \xC3\xB6 |0 - \xB9\xFB |0 - \xD6\xA6 |0 - \xE8\xC8 |0 - \xCA\xE0 |0 - \xD4\xE6 |0 - \xE8\xC0 |0 - \xE8\xC5 |0 - \xE8\xC7 |0 - \xC7\xB9 |0 - \xB7\xE3 |0 - \xE8\xC9 |0 - \xBF\xDD |0 - \xE8\xD2 |0 - \xE8\xD7 |0 - \xE8\xD5 |0 - \xBC\xDC |0 - \xBC\xCF |0 - \xE8\xDB |0 - \xE8\xDE |0 - \xE8\xDA |0 - \xB1\xFA |0 - \xB0\xD8 |0 - \xC4\xB3 |0 - \xB8\xCC |0 - \xC6\xE2 |0 - \xC8\xBE |0 - \xC8\xE1 |0 - \xE8\xCF |0 - \xE8\xD4 |0 - \xE8\xD6 |0 - \xB9\xF1 |0 - \xE8\xD8 |0 - \xD7\xF5 |0 - \xC4\xFB |0 - \xE8\xDC |0 - \xB2\xE9 |0 - \xE8\xD1 |0 - \xBC\xED |0 - \xBF\xC2 |0 - \xE8\xCD |0 - \xD6\xF9 |0 - \xC1\xF8 |0 - \xB2\xF1 |0 - \xE8\xDF |0 - \xCA\xC1 |0 - \xE8\xD9 |0 - \xD5\xA4 |0 - \xB1\xEA |0 - \xD5\xBB |0 - \xE8\xCE |0 - \xE8\xD0 |0 - \xB6\xB0 |0 - \xE8\xD3 |0 - \xE8\xDD |0 - \xC0\xB8 |0 - \xCA\xF7 |0 - \xCB\xA8 |0 - \xC6\xDC |0 - \xC0\xF5 |0 - \xE8\xE9 |0 - \xD0\xA3 |0 - \xE8\xF2 |0 - \xD6\xEA |0 - \xE8\xE0 |0 - \xE8\xE1 |0 - \xD1\xF9 |0 - \xBA\xCB |0 - \xB8\xF9 |0 - \xB8\xF1 |0 - \xD4\xD4 |0 - \xE8\xEF |0 - \xE8\xEE |0 - \xE8\xEC |0 - \xB9\xF0 |0 - \xCC\xD2 |0 - \xE8\xE6 |0 - \xCE\xA6 |0 - \xBF\xF2 |0 - \xB0\xB8 |0 - \xE8\xF1 |0 - \xE8\xF0 |0 - \xD7\xC0 |0 - \xE8\xE4 |0 - \xCD\xA9 |0 - \xC9\xA3 |0 - \xBB\xB8 |0 - \xBD\xDB |0 - \xE8\xEA |0 - \xE8\xE2 |0 - \xE8\xE3 |0 - \xE8\xE5 |0 - \xB5\xB5 |0 - \xE8\xE7 |0 - \xC7\xC5 |0 - \xE8\xEB |0 - \xE8\xED |0 - \xBD\xB0 |0 - \xD7\xAE |0 - \xE8\xF8 |0 - \xE8\xF5 |0 - \xCD\xB0 |0 - \xE8\xF6 |0 - \xC1\xBA |0 - \xE8\xE8 |0 - \xC3\xB7 |0 - \xB0\xF0 |0 - \xE8\xF4 |0 - \xE8\xF7 |0 - \xB9\xA3 |0 - \xC9\xD2 |0 - \xC3\xCE |0 - \xCE\xE0 |0 - \xC0\xE6 |0 - \xCB\xF3 |0 - \xCC\xDD |0 - \xD0\xB5 |0 - \xCA\xE1 |0 - \xE8\xF3 |0 - \xBC\xEC |0 - \xE8\xF9 |0 - \xC3\xDE |0 - \xC6\xE5 |0 - \xB9\xF7 |0 - \xB0\xF4 |0 - \xD7\xD8 |0 - \xBC\xAC |0 - \xC5\xEF |0 - \xCC\xC4 |0 - \xE9\xA6 |0 - \xC9\xAD |0 - \xE9\xA2 |0 - \xC0\xE2 |0 - \xBF\xC3 |0 - \xE8\xFE |0 - \xB9\xD7 |0 - \xE8\xFB |0 - \xE9\xA4 |0 - \xD2\xCE |0 - \xE9\xA3 |0 - \xD6\xB2 |0 - \xD7\xB5 |0 - \xE9\xA7 |0 - \xBD\xB7 |0 - \xE8\xFC |0 - \xE8\xFD |0 - \xE9\xA1 |0 - \xCD\xD6 |0 - \xD2\xAC |0 - \xE9\xB2 |0 - \xE9\xA9 |0 - \xB4\xAA |0 - \xB4\xBB |0 - \xE9\xAB |0 - \xD0\xA8 |0 - \xE9\xA5 |0 - \xB3\xFE |0 - \xE9\xAC |0 - \xC0\xE3 |0 - \xE9\xAA |0 - \xE9\xB9 |0 - \xE9\xB8 |0 - \xE9\xAE |0 - \xE8\xFA |0 - \xE9\xA8 |0 - \xBF\xAC |0 - \xE9\xB1 |0 - \xE9\xBA |0 - \xC2\xA5 |0 - \xE9\xAF |0 - \xB8\xC5 |0 - \xE9\xAD |0 - \xD3\xDC |0 - \xE9\xB4 |0 - \xE9\xB5 |0 - \xE9\xB7 |0 - \xE9\xC7 |0 - \xC0\xC6 |0 - \xE9\xC5 |0 - \xE9\xB0 |0 - \xE9\xBB |0 - \xB0\xF1 |0 - \xE9\xBC |0 - \xD5\xA5 |0 - \xE9\xBE |0 - \xE9\xBF |0 - \xE9\xC1 |0 - \xC1\xF1 |0 - \xC8\xB6 |0 - \xE9\xBD |0 - \xE9\xC2 |0 - \xE9\xC3 |0 - \xE9\xB3 |0 - \xE9\xB6 |0 - \xBB\xB1 |0 - \xE9\xC0 |0 - \xBC\xF7 |0 - \xE9\xC4 |0 - \xE9\xC6 |0 - \xE9\xCA |0 - \xE9\xCE |0 - \xB2\xDB |0 - \xE9\xC8 |0 - \xB7\xAE |0 - \xE9\xCB |0 - \xE9\xCC |0 - \xD5\xC1 |0 - \xC4\xA3 |0 - \xE9\xD8 |0 - \xBA\xE1 |0 - \xE9\xC9 |0 - \xD3\xA3 |0 - \xE9\xD4 |0 - \xE9\xD7 |0 - \xE9\xD0 |0 - \xE9\xCF |0 - \xC7\xC1 |0 - \xE9\xD2 |0 - \xE9\xD9 |0 - \xB3\xC8 |0 - \xE9\xD3 |0 - \xCF\xF0 |0 - \xE9\xCD |0 - \xB3\xF7 |0 - \xE9\xD6 |0 - \xE9\xDA |0 - \xCC\xB4 |0 - \xCF\xAD |0 - \xE9\xD5 |0 - \xE9\xDC |0 - \xE9\xDB |0 - \xE9\xDE |0 - \xE9\xD1 |0 - \xE9\xDD |0 - \xE9\xDF |0 - \xC3\xCA |0 - \xC7\xB7 |0 - \xB4\xCE |0 - \xBB\xB6 |0 - \xD0\xC0 |0 - \xEC\xA3 |0 - \xC5\xB7 |0 - \xD3\xFB |0 - \xEC\xA4 |0 - \xEC\xA5 |0 - \xC6\xDB |0 - \xBF\xEE |0 - \xEC\xA6 |0 - \xEC\xA7 |0 - \xD0\xAA |0 - \xC7\xB8 |0 - \xB8\xE8 |0 - \xEC\xA8 |0 - \xD6\xB9 |0 - \xD5\xFD |0 - \xB4\xCB |0 - \xB2\xBD |0 - \xCE\xE4 |0 - \xC6\xE7 |0 - \xCD\xE1 |0 - \xB4\xF5 |0 - \xCB\xC0 |0 - \xBC\xDF |0 - \xE9\xE2 |0 - \xE9\xE3 |0 - \xD1\xEA |0 - \xE9\xE5 |0 - \xB4\xF9 |0 - \xE9\xE4 |0 - \xD1\xB3 |0 - \xCA\xE2 |0 - \xB2\xD0 |0 - \xE9\xE8 |0 - \xE9\xE6 |0 - \xE9\xE7 |0 - \xD6\xB3 |0 - \xE9\xE9 |0 - \xE9\xEA |0 - \xE9\xEB |0 - \xE9\xEC |0 - \xEC\xAF |0 - \xC5\xB9 |0 - \xB6\xCE |0 - \xD2\xF3 |0 - \xB5\xEE |0 - \xBB\xD9 |0 - \xEC\xB1 |0 - \xD2\xE3 |0 - \xCE\xE3 |0 - \xC4\xB8 |0 - \xC3\xBF |0 - \xB6\xBE |0 - \xD8\xB9 |0 - \xB1\xC8 |0 - \xB1\xCF |0 - \xB1\xD1 |0 - \xC5\xFE |0 - \xB1\xD0 |0 - \xC3\xAB |0 - \xD5\xB1 |0 - \xEB\xA4 |0 - \xBA\xC1 |0 - \xCC\xBA |0 - \xEB\xA5 |0 - \xEB\xA7 |0 - \xEB\xA8 |0 - \xEB\xA6 |0 - \xEB\xA9 |0 - \xEB\xAB |0 - \xEB\xAA |0 - \xEB\xAC |0 - \xCA\xCF |0 - \xD8\xB5 |0 - \xC3\xF1 |0 - \xC3\xA5 |0 - \xC6\xF8 |0 - \xEB\xAD |0 - \xC4\xCA |0 - \xEB\xAE |0 - \xEB\xAF |0 - \xEB\xB0 |0 - \xB7\xD5 |0 - \xB7\xFA |0 - \xEB\xB1 |0 - \xC7\xE2 |0 - \xEB\xB3 |0 - \xBA\xA4 |0 - \xD1\xF5 |0 - \xB0\xB1 |0 - \xEB\xB2 |0 - \xEB\xB4 |0 - \xB5\xAA |0 - \xC2\xC8 |0 - \xC7\xE8 |0 - \xEB\xB5 |0 - \xCB\xAE |0 - \xE3\xDF |0 - \xD3\xC0 |0 - \xD9\xDB |0 - \xCD\xA1 |0 - \xD6\xAD |0 - \xC7\xF3 |0 - \xD9\xE0 |0 - \xBB\xE3 |0 - \xBA\xBA |0 - \xE3\xE2 |0 - \xCF\xAB |0 - \xE3\xE0 |0 - \xC9\xC7 |0 - \xBA\xB9 |0 - \xD1\xB4 |0 - \xE3\xE1 |0 - \xC8\xEA |0 - \xB9\xAF |0 - \xBD\xAD |0 - \xB3\xD8 |0 - \xCE\xDB |0 - \xCC\xC0 |0 - \xE3\xE8 |0 - \xE3\xE9 |0 - \xCD\xF4 |0 - \xCC\xAD |0 - \xBC\xB3 |0 - \xE3\xEA |0 - \xE3\xEB |0 - \xD0\xDA |0 - \xC6\xFB |0 - \xB7\xDA |0 - \xC7\xDF |0 - \xD2\xCA |0 - \xCE\xD6 |0 - \xE3\xE4 |0 - \xE3\xEC |0 - \xC9\xF2 |0 - \xB3\xC1 |0 - \xE3\xE7 |0 - \xC6\xE3 |0 - \xE3\xE5 |0 - \xED\xB3 |0 - \xE3\xE6 |0 - \xC9\xB3 |0 - \xC5\xE6 |0 - \xB9\xB5 |0 - \xC3\xBB |0 - \xE3\xE3 |0 - \xC5\xBD |0 - \xC1\xA4 |0 - \xC2\xD9 |0 - \xB2\xD7 |0 - \xE3\xED |0 - \xBB\xA6 |0 - \xC4\xAD |0 - \xE3\xF0 |0 - \xBE\xDA |0 - \xE3\xFB |0 - \xE3\xF5 |0 - \xBA\xD3 |0 - \xB7\xD0 |0 - \xD3\xCD |0 - \xD6\xCE |0 - \xD5\xD3 |0 - \xB9\xC1 |0 - \xD5\xB4 |0 - \xD1\xD8 |0 - \xD0\xB9 |0 - \xC7\xF6 |0 - \xC8\xAA |0 - \xB2\xB4 |0 - \xC3\xDA |0 - \xE3\xEE |0 - \xE3\xFC |0 - \xE3\xEF |0 - \xB7\xA8 |0 - \xE3\xF7 |0 - \xE3\xF4 |0 - \xB7\xBA |0 - \xC5\xA2 |0 - \xE3\xF6 |0 - \xC5\xDD |0 - \xB2\xA8 |0 - \xC6\xFC |0 - \xC4\xE0 |0 - \xD7\xA2 |0 - \xC0\xE1 |0 - \xE3\xF9 |0 - \xE3\xFA |0 - \xE3\xFD |0 - \xCC\xA9 |0 - \xE3\xF3 |0 - \xD3\xBE |0 - \xB1\xC3 |0 - \xED\xB4 |0 - \xE3\xF1 |0 - \xE3\xF2 |0 - \xE3\xF8 |0 - \xD0\xBA |0 - \xC6\xC3 |0 - \xD4\xF3 |0 - \xE3\xFE |0 - \xBD\xE0 |0 - \xE4\xA7 |0 - \xE4\xA6 |0 - \xD1\xF3 |0 - \xE4\xA3 |0 - \xE4\xA9 |0 - \xC8\xF7 |0 - \xCF\xB4 |0 - \xE4\xA8 |0 - \xE4\xAE |0 - \xC2\xE5 |0 - \xB6\xB4 |0 - \xBD\xF2 |0 - \xE4\xA2 |0 - \xBA\xE9 |0 - \xE4\xAA |0 - \xE4\xAC |0 - \xB6\xFD |0 - \xD6\xDE |0 - \xE4\xB2 |0 - \xE4\xAD |0 - \xE4\xA1 |0 - \xBB\xEE |0 - \xCD\xDD |0 - \xC7\xA2 |0 - \xC5\xC9 |0 - \xC1\xF7 |0 - \xE4\xA4 |0 - \xC7\xB3 |0 - \xBD\xAC |0 - \xBD\xBD |0 - \xE4\xA5 |0 - \xD7\xC7 |0 - \xB2\xE2 |0 - \xE4\xAB |0 - \xBC\xC3 |0 - \xE4\xAF |0 - \xBB\xEB |0 - \xE4\xB0 |0 - \xC5\xA8 |0 - \xE4\xB1 |0 - \xD5\xE3 |0 - \xBF\xA3 |0 - \xE4\xBA |0 - \xE4\xB7 |0 - \xE4\xBB |0 - \xE4\xBD |0 - \xC6\xD6 |0 - \xBA\xC6 |0 - \xC0\xCB |0 - \xB8\xA1 |0 - \xE4\xB4 |0 - \xD4\xA1 |0 - \xBA\xA3 |0 - \xBD\xFE |0 - \xE4\xBC |0 - \xCD\xBF |0 - \xC4\xF9 |0 - \xCF\xFB |0 - \xC9\xE6 |0 - \xD3\xBF |0 - \xCF\xD1 |0 - \xE4\xB3 |0 - \xE4\xB8 |0 - \xE4\xB9 |0 - \xCC\xE9 |0 - \xCC\xCE |0 - \xC0\xD4 |0 - \xE4\xB5 |0 - \xC1\xB0 |0 - \xE4\xB6 |0 - \xCE\xD0 |0 - \xBB\xC1 |0 - \xB5\xD3 |0 - \xC8\xF3 |0 - \xBD\xA7 |0 - \xD5\xC7 |0 - \xC9\xAC |0 - \xB8\xA2 |0 - \xE4\xCA |0 - \xE4\xCC |0 - \xD1\xC4 |0 - \xD2\xBA |0 - \xBA\xAD |0 - \xBA\xD4 |0 - \xE4\xC3 |0 - \xB5\xED |0 - \xD7\xCD |0 - \xE4\xC0 |0 - \xCF\xFD |0 - \xE4\xBF |0 - \xC1\xDC |0 - \xCC\xCA |0 - \xCA\xE7 |0 - \xC4\xD7 |0 - \xCC\xD4 |0 - \xE4\xC8 |0 - \xE4\xC7 |0 - \xE4\xC1 |0 - \xE4\xC4 |0 - \xB5\xAD |0 - \xD3\xD9 |0 - \xE4\xC6 |0 - \xD2\xF9 |0 - \xB4\xE3 |0 - \xBB\xB4 |0 - \xC9\xEE |0 - \xB4\xBE |0 - \xBB\xEC |0 - \xD1\xCD |0 - \xCC\xED |0 - \xED\xB5 |0 - \xC7\xE5 |0 - \xD4\xA8 |0 - \xE4\xCB |0 - \xD7\xD5 |0 - \xE4\xC2 |0 - \xBD\xA5 |0 - \xE4\xC5 |0 - \xD3\xE6 |0 - \xE4\xC9 |0 - \xC9\xF8 |0 - \xE4\xBE |0 - \xD3\xE5 |0 - \xC7\xFE |0 - \xB6\xC9 |0 - \xD4\xFC |0 - \xB2\xB3 |0 - \xE4\xD7 |0 - \xCE\xC2 |0 - \xE4\xCD |0 - \xCE\xBC |0 - \xB8\xDB |0 - \xE4\xD6 |0 - \xBF\xCA |0 - \xD3\xCE |0 - \xC3\xEC |0 - \xC5\xC8 |0 - \xE4\xD8 |0 - \xCD\xC4 |0 - \xE4\xCF |0 - \xE4\xD4 |0 - \xE4\xD5 |0 - \xBA\xFE |0 - \xCF\xE6 |0 - \xD5\xBF |0 - \xE4\xD2 |0 - \xE4\xD0 |0 - \xE4\xCE |0 - \xCD\xE5 |0 - \xCA\xAA |0 - \xC0\xA3 |0 - \xBD\xA6 |0 - \xE4\xD3 |0 - \xB8\xC8 |0 - \xE4\xE7 |0 - \xD4\xB4 |0 - \xE4\xDB |0 - \xC1\xEF |0 - \xE4\xE9 |0 - \xD2\xE7 |0 - \xE4\xDF |0 - \xE4\xE0 |0 - \xCF\xAA |0 - \xCB\xDD |0 - \xE4\xDA |0 - \xE4\xD1 |0 - \xE4\xE5 |0 - \xC8\xDC |0 - \xE4\xE3 |0 - \xC4\xE7 |0 - \xE4\xE2 |0 - \xE4\xE1 |0 - \xB3\xFC |0 - \xE4\xE8 |0 - \xB5\xE1 |0 - \xD7\xCC |0 - \xE4\xE6 |0 - \xBB\xAC |0 - \xD7\xD2 |0 - \xCC\xCF |0 - \xEB\xF8 |0 - \xE4\xE4 |0 - \xB9\xF6 |0 - \xD6\xCD |0 - \xE4\xD9 |0 - \xE4\xDC |0 - \xC2\xFA |0 - \xE4\xDE |0 - \xC2\xCB |0 - \xC0\xC4 |0 - \xC2\xD0 |0 - \xB1\xF5 |0 - \xCC\xB2 |0 - \xB5\xCE |0 - \xE4\xEF |0 - \xC6\xAF |0 - \xC6\xE1 |0 - \xE4\xF5 |0 - \xC2\xA9 |0 - \xC0\xEC |0 - \xD1\xDD |0 - \xE4\xEE |0 - \xC4\xAE |0 - \xE4\xED |0 - \xE4\xF6 |0 - \xE4\xF4 |0 - \xC2\xFE |0 - \xE4\xDD |0 - \xE4\xF0 |0 - \xCA\xFE |0 - \xD5\xC4 |0 - \xE4\xF1 |0 - \xD1\xFA |0 - \xE4\xEB |0 - \xE4\xEC |0 - \xE4\xF2 |0 - \xCE\xAB |0 - \xC5\xCB |0 - \xC7\xB1 |0 - \xC2\xBA |0 - \xE4\xEA |0 - \xC1\xCA |0 - \xCC\xB6 |0 - \xB3\xB1 |0 - \xE4\xFB |0 - \xE4\xF3 |0 - \xE4\xFA |0 - \xE4\xFD |0 - \xE4\xFC |0 - \xB3\xCE |0 - \xB3\xBA |0 - \xE4\xF7 |0 - \xE4\xF9 |0 - \xE4\xF8 |0 - \xC5\xEC |0 - \xC0\xBD |0 - \xD4\xE8 |0 - \xE5\xA2 |0 - \xB0\xC4 |0 - \xE5\xA4 |0 - \xE5\xA3 |0 - \xBC\xA4 |0 - \xE5\xA5 |0 - \xE5\xA1 |0 - \xE4\xFE |0 - \xB1\xF4 |0 - \xE5\xA8 |0 - \xE5\xA9 |0 - \xE5\xA6 |0 - \xE5\xA7 |0 - \xE5\xAA |0 - \xC6\xD9 |0 - \xE5\xAB |0 - \xE5\xAD |0 - \xE5\xAC |0 - \xE5\xAF |0 - \xE5\xAE |0 - \xB9\xE0 |0 - \xE5\xB0 |0 - \xE5\xB1 |0 - \xBB\xF0 |0 - \xEC\xE1 |0 - \xC3\xF0 |0 - \xB5\xC6 |0 - \xBB\xD2 |0 - \xC1\xE9 |0 - \xD4\xEE |0 - \xBE\xC4 |0 - \xD7\xC6 |0 - \xD4\xD6 |0 - \xB2\xD3 |0 - \xEC\xBE |0 - \xEA\xC1 |0 - \xC2\xAF |0 - \xB4\xB6 |0 - \xD1\xD7 |0 - \xB3\xB4 |0 - \xC8\xB2 |0 - \xBF\xBB |0 - \xEC\xC0 |0 - \xD6\xCB |0 - \xEC\xBF |0 - \xEC\xC1 |0 - \xEC\xC5 |0 - \xBE\xE6 |0 - \xCC\xBF |0 - \xC5\xDA |0 - \xBE\xBC |0 - \xEC\xC6 |0 - \xB1\xFE |0 - \xEC\xC4 |0 - \xD5\xA8 |0 - \xB5\xE3 |0 - \xEC\xC2 |0 - \xC1\xB6 |0 - \xB3\xE3 |0 - \xEC\xC3 |0 - \xCB\xB8 |0 - \xC0\xC3 |0 - \xCC\xFE |0 - \xC1\xD2 |0 - \xEC\xC8 |0 - \xBA\xE6 |0 - \xC0\xD3 |0 - \xD6\xF2 |0 - \xD1\xCC |0 - \xBF\xBE |0 - \xB7\xB3 |0 - \xC9\xD5 |0 - \xEC\xC7 |0 - \xBB\xE2 |0 - \xCC\xCC |0 - \xBD\xFD |0 - \xC8\xC8 |0 - \xCF\xA9 |0 - \xCD\xE9 |0 - \xC5\xEB |0 - \xB7\xE9 |0 - \xD1\xC9 |0 - \xBA\xB8 |0 - \xEC\xC9 |0 - \xEC\xCA |0 - \xBB\xC0 |0 - \xEC\xCB |0 - \xEC\xE2 |0 - \xB1\xBA |0 - \xB7\xD9 |0 - \xBD\xB9 |0 - \xEC\xCC |0 - \xD1\xE6 |0 - \xEC\xCD |0 - \xC8\xBB |0 - \xEC\xD1 |0 - \xEC\xD3 |0 - \xBB\xCD |0 - \xBC\xE5 |0 - \xEC\xCF |0 - \xC9\xB7 |0 - \xC3\xBA |0 - \xEC\xE3 |0 - \xD5\xD5 |0 - \xEC\xD0 |0 - \xD6\xF3 |0 - \xEC\xD2 |0 - \xEC\xCE |0 - \xEC\xD4 |0 - \xEC\xD5 |0 - \xC9\xBF |0 - \xCF\xA8 |0 - \xD0\xDC |0 - \xD1\xAC |0 - \xC8\xDB |0 - \xEC\xD6 |0 - \xCE\xF5 |0 - \xCA\xEC |0 - \xEC\xDA |0 - \xEC\xD9 |0 - \xB0\xBE |0 - \xEC\xD7 |0 - \xEC\xD8 |0 - \xEC\xE4 |0 - \xC8\xBC |0 - \xC1\xC7 |0 - \xEC\xDC |0 - \xD1\xE0 |0 - \xEC\xDB |0 - \xD4\xEF |0 - \xEC\xDD |0 - \xDB\xC6 |0 - \xEC\xDE |0 - \xB1\xAC |0 - \xEC\xDF |0 - \xEC\xE0 |0 - \xD7\xA6 |0 - \xC5\xC0 |0 - \xEB\xBC |0 - \xB0\xAE |0 - \xBE\xF4 |0 - \xB8\xB8 |0 - \xD2\xAF |0 - \xB0\xD6 |0 - \xB5\xF9 |0 - \xD8\xB3 |0 - \xCB\xAC |0 - \xE3\xDD |0 - \xC6\xAC |0 - \xB0\xE6 |0 - \xC5\xC6 |0 - \xEB\xB9 |0 - \xEB\xBA |0 - \xEB\xBB |0 - \xD1\xC0 |0 - \xC5\xA3 |0 - \xEA\xF2 |0 - \xC4\xB2 |0 - \xC4\xB5 |0 - \xC0\xCE |0 - \xEA\xF3 |0 - \xC4\xC1 |0 - \xCE\xEF |0 - \xEA\xF0 |0 - \xEA\xF4 |0 - \xC9\xFC |0 - \xC7\xA3 |0 - \xCC\xD8 |0 - \xCE\xFE |0 - \xEA\xF5 |0 - \xEA\xF6 |0 - \xCF\xAC |0 - \xC0\xE7 |0 - \xEA\xF7 |0 - \xB6\xBF |0 - \xEA\xF8 |0 - \xEA\xF9 |0 - \xEA\xFA |0 - \xEA\xFB |0 - \xEA\xF1 |0 - \xC8\xAE |0 - \xE1\xEB |0 - \xB7\xB8 |0 - \xE1\xEC |0 - \xE1\xED |0 - \xD7\xB4 |0 - \xE1\xEE |0 - \xE1\xEF |0 - \xD3\xCC |0 - \xE1\xF1 |0 - \xBF\xF1 |0 - \xE1\xF0 |0 - \xB5\xD2 |0 - \xB1\xB7 |0 - \xE1\xF3 |0 - \xE1\xF2 |0 - \xBA\xFC |0 - \xE1\xF4 |0 - \xB9\xB7 |0 - \xBE\xD1 |0 - \xC4\xFC |0 - \xBA\xDD |0 - \xBD\xC6 |0 - \xE1\xF5 |0 - \xE1\xF7 |0 - \xB6\xC0 |0 - \xCF\xC1 |0 - \xCA\xA8 |0 - \xE1\xF6 |0 - \xD5\xF8 |0 - \xD3\xFC |0 - \xE1\xF8 |0 - \xE1\xFC |0 - \xE1\xF9 |0 - \xE1\xFA |0 - \xC0\xEA |0 - \xE1\xFE |0 - \xE2\xA1 |0 - \xC0\xC7 |0 - \xE1\xFB |0 - \xE1\xFD |0 - \xE2\xA5 |0 - \xC1\xD4 |0 - \xE2\xA3 |0 - \xE2\xA8 |0 - \xB2\xFE |0 - \xE2\xA2 |0 - \xC3\xCD |0 - \xB2\xC2 |0 - \xE2\xA7 |0 - \xE2\xA6 |0 - \xE2\xA4 |0 - \xE2\xA9 |0 - \xE2\xAB |0 - \xD0\xC9 |0 - \xD6\xED |0 - \xC3\xA8 |0 - \xE2\xAC |0 - \xCF\xD7 |0 - \xE2\xAE |0 - \xBA\xEF |0 - \xE9\xE0 |0 - \xE2\xAD |0 - \xE2\xAA |0 - \xBB\xAB |0 - \xD4\xB3 |0 - \xE2\xB0 |0 - \xE2\xAF |0 - \xE9\xE1 |0 - \xE2\xB1 |0 - \xE2\xB2 |0 - \xE2\xB3 |0 - \xCC\xA1 |0 - \xE2\xB4 |0 - \xE2\xB5 |0 - \xD0\xFE |0 - \xC2\xCA |0 - \xD3\xF1 |0 - \xCD\xF5 |0 - \xE7\xE0 |0 - \xE7\xE1 |0 - \xBE\xC1 |0 - \xC2\xEA |0 - \xE7\xE4 |0 - \xE7\xE3 |0 - \xCD\xE6 |0 - \xC3\xB5 |0 - \xE7\xE2 |0 - \xBB\xB7 |0 - \xCF\xD6 |0 - \xC1\xE1 |0 - \xE7\xE9 |0 - \xE7\xE8 |0 - \xE7\xF4 |0 - \xB2\xA3 |0 - \xE7\xEA |0 - \xE7\xE6 |0 - \xE7\xEC |0 - \xE7\xEB |0 - \xC9\xBA |0 - \xD5\xE4 |0 - \xE7\xE5 |0 - \xB7\xA9 |0 - \xE7\xE7 |0 - \xE7\xEE |0 - \xE7\xF3 |0 - \xD6\xE9 |0 - \xE7\xED |0 - \xE7\xF2 |0 - \xE7\xF1 |0 - \xB0\xE0 |0 - \xE7\xF5 |0 - \xC7\xF2 |0 - \xC0\xC5 |0 - \xC0\xED |0 - \xC1\xF0 |0 - \xE7\xF0 |0 - \xE7\xF6 |0 - \xCB\xF6 |0 - \xE8\xA2 |0 - \xE8\xA1 |0 - \xD7\xC1 |0 - \xE7\xFA |0 - \xE7\xF9 |0 - \xE7\xFB |0 - \xE7\xF7 |0 - \xE7\xFE |0 - \xE7\xFD |0 - \xE7\xFC |0 - \xC1\xD5 |0 - \xC7\xD9 |0 - \xC5\xFD |0 - \xC5\xC3 |0 - \xC7\xED |0 - \xE8\xA3 |0 - \xE8\xA6 |0 - \xE8\xA5 |0 - \xE8\xA7 |0 - \xBA\xF7 |0 - \xE7\xF8 |0 - \xE8\xA4 |0 - \xC8\xF0 |0 - \xC9\xAA |0 - \xE8\xA9 |0 - \xB9\xE5 |0 - \xD1\xFE |0 - \xE8\xA8 |0 - \xE8\xAA |0 - \xE8\xAD |0 - \xE8\xAE |0 - \xC1\xA7 |0 - \xE8\xAF |0 - \xE8\xB0 |0 - \xE8\xAC |0 - \xE8\xB4 |0 - \xE8\xAB |0 - \xE8\xB1 |0 - \xE8\xB5 |0 - \xE8\xB2 |0 - \xE8\xB3 |0 - \xE8\xB7 |0 - \xE8\xB6 |0 - \xB9\xCF |0 - \xF0\xAC |0 - \xF0\xAD |0 - \xC6\xB0 |0 - \xB0\xEA |0 - \xC8\xBF |0 - \xCD\xDF |0 - \xCE\xCD |0 - \xEA\xB1 |0 - \xEA\xB2 |0 - \xC6\xBF |0 - \xB4\xC9 |0 - \xEA\xB3 |0 - \xD5\xE7 |0 - \xDD\xF9 |0 - \xEA\xB4 |0 - \xEA\xB5 |0 - \xEA\xB6 |0 - \xB8\xCA |0 - \xDF\xB0 |0 - \xC9\xF5 |0 - \xCC\xF0 |0 - \xC9\xFA |0 - \xC9\xFB |0 - \xD3\xC3 |0 - \xCB\xA6 |0 - \xB8\xA6 |0 - \xF0\xAE |0 - \xB1\xC2 |0 - \xE5\xB8 |0 - \xCC\xEF |0 - \xD3\xC9 |0 - \xBC\xD7 |0 - \xC9\xEA |0 - \xB5\xE7 |0 - \xC4\xD0 |0 - \xB5\xE9 |0 - \xEE\xAE |0 - \xBB\xAD |0 - \xE7\xDE |0 - \xEE\xAF |0 - \xB3\xA9 |0 - \xEE\xB2 |0 - \xEE\xB1 |0 - \xBD\xE7 |0 - \xEE\xB0 |0 - \xCE\xB7 |0 - \xC5\xCF |0 - \xC1\xF4 |0 - \xDB\xCE |0 - \xEE\xB3 |0 - \xD0\xF3 |0 - \xC2\xD4 |0 - \xC6\xE8 |0 - \xB7\xAC |0 - \xEE\xB4 |0 - \xB3\xEB |0 - \xBB\xFB |0 - \xEE\xB5 |0 - \xE7\xDC |0 - \xEE\xB6 |0 - \xBD\xAE |0 - \xF1\xE2 |0 - \xCA\xE8 |0 - \xD2\xC9 |0 - \xF0\xDA |0 - \xF0\xDB |0 - \xF0\xDC |0 - \xC1\xC6 |0 - \xB8\xED |0 - \xBE\xCE |0 - \xF0\xDE |0 - \xC5\xB1 |0 - \xF0\xDD |0 - \xD1\xF1 |0 - \xF0\xE0 |0 - \xB0\xCC |0 - \xBD\xEA |0 - \xD2\xDF |0 - \xF0\xDF |0 - \xB4\xAF |0 - \xB7\xE8 |0 - \xF0\xE6 |0 - \xF0\xE5 |0 - \xC6\xA3 |0 - \xF0\xE1 |0 - \xF0\xE2 |0 - \xB4\xC3 |0 - \xF0\xE3 |0 - \xD5\xEE |0 - \xCC\xDB |0 - \xBE\xD2 |0 - \xBC\xB2 |0 - \xF0\xE8 |0 - \xF0\xE7 |0 - \xF0\xE4 |0 - \xB2\xA1 |0 - \xD6\xA2 |0 - \xD3\xB8 |0 - \xBE\xB7 |0 - \xC8\xAC |0 - \xF0\xEA |0 - \xD1\xF7 |0 - \xD6\xCC |0 - \xBA\xDB |0 - \xF0\xE9 |0 - \xB6\xBB |0 - \xCD\xB4 |0 - \xC6\xA6 |0 - \xC1\xA1 |0 - \xF0\xEB |0 - \xF0\xEE |0 - \xF0\xED |0 - \xF0\xF0 |0 - \xF0\xEC |0 - \xBB\xBE |0 - \xF0\xEF |0 - \xCC\xB5 |0 - \xF0\xF2 |0 - \xB3\xD5 |0 - \xB1\xD4 |0 - \xF0\xF3 |0 - \xF0\xF4 |0 - \xF0\xF6 |0 - \xB4\xE1 |0 - \xF0\xF1 |0 - \xF0\xF7 |0 - \xF0\xFA |0 - \xF0\xF8 |0 - \xF0\xF5 |0 - \xF0\xFD |0 - \xF0\xF9 |0 - \xF0\xFC |0 - \xF0\xFE |0 - \xF1\xA1 |0 - \xCE\xC1 |0 - \xF1\xA4 |0 - \xF1\xA3 |0 - \xC1\xF6 |0 - \xF0\xFB |0 - \xCA\xDD |0 - \xB4\xF1 |0 - \xB1\xF1 |0 - \xCC\xB1 |0 - \xF1\xA6 |0 - \xF1\xA7 |0 - \xF1\xAC |0 - \xD5\xCE |0 - \xF1\xA9 |0 - \xC8\xB3 |0 - \xF1\xA2 |0 - \xF1\xAB |0 - \xF1\xA8 |0 - \xF1\xA5 |0 - \xF1\xAA |0 - \xB0\xA9 |0 - \xF1\xAD |0 - \xF1\xAF |0 - \xF1\xB1 |0 - \xF1\xB0 |0 - \xF1\xAE |0 - \xD1\xA2 |0 - \xF1\xB2 |0 - \xF1\xB3 |0 - \xB9\xEF |0 - \xB5\xC7 |0 - \xB0\xD7 |0 - \xB0\xD9 |0 - \xD4\xED |0 - \xB5\xC4 |0 - \xBD\xD4 |0 - \xBB\xCA |0 - \xF0\xA7 |0 - \xB8\xDE |0 - \xF0\xA8 |0 - \xB0\xA8 |0 - \xF0\xA9 |0 - \xCD\xEE |0 - \xF0\xAA |0 - \xF0\xAB |0 - \xC6\xA4 |0 - \xD6\xE5 |0 - \xF1\xE4 |0 - \xF1\xE5 |0 - \xC3\xF3 |0 - \xD3\xDB |0 - \xD6\xD1 |0 - \xC5\xE8 |0 - \xD3\xAF |0 - \xD2\xE6 |0 - \xEE\xC1 |0 - \xB0\xBB |0 - \xD5\xB5 |0 - \xD1\xCE |0 - \xBC\xE0 |0 - \xBA\xD0 |0 - \xBF\xF8 |0 - \xB8\xC7 |0 - \xB5\xC1 |0 - \xC5\xCC |0 - \xCA\xA2 |0 - \xC3\xCB |0 - \xEE\xC2 |0 - \xC4\xBF |0 - \xB6\xA2 |0 - \xED\xEC |0 - \xC3\xA4 |0 - \xD6\xB1 |0 - \xCF\xE0 |0 - \xED\xEF |0 - \xC5\xCE |0 - \xB6\xDC |0 - \xCA\xA1 |0 - \xED\xED |0 - \xED\xF0 |0 - \xED\xF1 |0 - \xC3\xBC |0 - \xBF\xB4 |0 - \xED\xEE |0 - \xED\xF4 |0 - \xED\xF2 |0 - \xD5\xE6 |0 - \xC3\xDF |0 - \xED\xF3 |0 - \xED\xF6 |0 - \xD5\xA3 |0 - \xD1\xA3 |0 - \xED\xF5 |0 - \xC3\xD0 |0 - \xED\xF7 |0 - \xBF\xF4 |0 - \xBE\xEC |0 - \xED\xF8 |0 - \xCC\xF7 |0 - \xD1\xDB |0 - \xD7\xC5 |0 - \xD5\xF6 |0 - \xED\xFC |0 - \xED\xFB |0 - \xED\xF9 |0 - \xED\xFA |0 - \xED\xFD |0 - \xBE\xA6 |0 - \xCB\xAF |0 - \xEE\xA1 |0 - \xB6\xBD |0 - \xEE\xA2 |0 - \xC4\xC0 |0 - \xED\xFE |0 - \xBD\xDE |0 - \xB2\xC7 |0 - \xB6\xC3 |0 - \xEE\xA5 |0 - \xD8\xBA |0 - \xEE\xA3 |0 - \xEE\xA6 |0 - \xC3\xE9 |0 - \xB3\xF2 |0 - \xEE\xA7 |0 - \xEE\xA4 |0 - \xCF\xB9 |0 - \xEE\xA8 |0 - \xC2\xF7 |0 - \xEE\xA9 |0 - \xEE\xAA |0 - \xDE\xAB |0 - \xC6\xB3 |0 - \xC7\xC6 |0 - \xD6\xF5 |0 - \xB5\xC9 |0 - \xCB\xB2 |0 - \xEE\xAB |0 - \xCD\xAB |0 - \xEE\xAC |0 - \xD5\xB0 |0 - \xEE\xAD |0 - \xF6\xC4 |0 - \xDB\xC7 |0 - \xB4\xA3 |0 - \xC3\xAC |0 - \xF1\xE6 |0 - \xCA\xB8 |0 - \xD2\xD3 |0 - \xD6\xAA |0 - \xEF\xF2 |0 - \xBE\xD8 |0 - \xBD\xC3 |0 - \xEF\xF3 |0 - \xB6\xCC |0 - \xB0\xAB |0 - \xCA\xAF |0 - \xED\xB6 |0 - \xED\xB7 |0 - \xCE\xF9 |0 - \xB7\xAF |0 - \xBF\xF3 |0 - \xED\xB8 |0 - \xC2\xEB |0 - \xC9\xB0 |0 - \xED\xB9 |0 - \xC6\xF6 |0 - \xBF\xB3 |0 - \xED\xBC |0 - \xC5\xF8 |0 - \xD1\xD0 |0 - \xD7\xA9 |0 - \xED\xBA |0 - \xED\xBB |0 - \xD1\xE2 |0 - \xED\xBF |0 - \xED\xC0 |0 - \xED\xC4 |0 - \xED\xC8 |0 - \xED\xC6 |0 - \xED\xCE |0 - \xD5\xE8 |0 - \xED\xC9 |0 - \xED\xC7 |0 - \xED\xBE |0 - \xC5\xE9 |0 - \xC6\xC6 |0 - \xC9\xE9 |0 - \xD4\xD2 |0 - \xED\xC1 |0 - \xED\xC2 |0 - \xED\xC3 |0 - \xED\xC5 |0 - \xC0\xF9 |0 - \xB4\xA1 |0 - \xB9\xE8 |0 - \xED\xD0 |0 - \xED\xD1 |0 - \xED\xCA |0 - \xED\xCF |0 - \xCE\xF8 |0 - \xCB\xB6 |0 - \xED\xCC |0 - \xED\xCD |0 - \xCF\xF5 |0 - \xED\xD2 |0 - \xC1\xF2 |0 - \xD3\xB2 |0 - \xED\xCB |0 - \xC8\xB7 |0 - \xBC\xEF |0 - \xC5\xF0 |0 - \xED\xD6 |0 - \xB5\xEF |0 - \xC2\xB5 |0 - \xB0\xAD |0 - \xCB\xE9 |0 - \xB1\xAE |0 - \xED\xD4 |0 - \xCD\xEB |0 - \xB5\xE2 |0 - \xED\xD5 |0 - \xED\xD3 |0 - \xED\xD7 |0 - \xB5\xFA |0 - \xED\xD8 |0 - \xED\xD9 |0 - \xED\xDC |0 - \xB1\xCC |0 - \xC5\xF6 |0 - \xBC\xEE |0 - \xED\xDA |0 - \xCC\xBC |0 - \xB2\xEA |0 - \xED\xDB |0 - \xC4\xEB |0 - \xB4\xC5 |0 - \xB0\xF5 |0 - \xED\xDF |0 - \xC0\xDA |0 - \xB4\xE8 |0 - \xC5\xCD |0 - \xED\xDD |0 - \xBF\xC4 |0 - \xED\xDE |0 - \xC4\xA5 |0 - \xED\xE0 |0 - \xED\xE1 |0 - \xED\xE3 |0 - \xC1\xD7 |0 - \xBB\xC7 |0 - \xBD\xB8 |0 - \xED\xE2 |0 - \xED\xE4 |0 - \xED\xE6 |0 - \xED\xE5 |0 - \xED\xE7 |0 - \xCA\xBE |0 - \xEC\xEA |0 - \xC0\xF1 |0 - \xC9\xE7 |0 - \xEC\xEB |0 - \xC6\xEE |0 - \xEC\xEC |0 - \xC6\xED |0 - \xEC\xED |0 - \xEC\xF0 |0 - \xD7\xE6 |0 - \xEC\xF3 |0 - \xEC\xF1 |0 - \xEC\xEE |0 - \xEC\xEF |0 - \xD7\xA3 |0 - \xC9\xF1 |0 - \xCB\xEE |0 - \xEC\xF4 |0 - \xEC\xF2 |0 - \xCF\xE9 |0 - \xEC\xF6 |0 - \xC6\xB1 |0 - \xBC\xC0 |0 - \xEC\xF5 |0 - \xB5\xBB |0 - \xBB\xF6 |0 - \xEC\xF7 |0 - \xD9\xF7 |0 - \xBD\xFB |0 - \xC2\xBB |0 - \xEC\xF8 |0 - \xEC\xF9 |0 - \xB8\xA3 |0 - \xEC\xFA |0 - \xEC\xFB |0 - \xEC\xFC |0 - \xD3\xED |0 - \xD8\xAE |0 - \xC0\xEB |0 - \xC7\xDD |0 - \xBA\xCC |0 - \xD0\xE3 |0 - \xCB\xBD |0 - \xCD\xBA |0 - \xB8\xD1 |0 - \xB1\xFC |0 - \xC7\xEF |0 - \xD6\xD6 |0 - \xBF\xC6 |0 - \xC3\xEB |0 - \xEF\xF5 |0 - \xC3\xD8 |0 - \xD7\xE2 |0 - \xEF\xF7 |0 - \xB3\xD3 |0 - \xC7\xD8 |0 - \xD1\xED |0 - \xD6\xC8 |0 - \xEF\xF8 |0 - \xEF\xF6 |0 - \xBB\xFD |0 - \xB3\xC6 |0 - \xBD\xD5 |0 - \xD2\xC6 |0 - \xBB\xE0 |0 - \xCF\xA1 |0 - \xEF\xFC |0 - \xEF\xFB |0 - \xEF\xF9 |0 - \xB3\xCC |0 - \xC9\xD4 |0 - \xCB\xB0 |0 - \xEF\xFE |0 - \xB0\xDE |0 - \xD6\xC9 |0 - \xEF\xFD |0 - \xB3\xED |0 - \xF6\xD5 |0 - \xCE\xC8 |0 - \xF0\xA2 |0 - \xF0\xA1 |0 - \xB5\xBE |0 - \xBC\xDA |0 - \xBB\xFC |0 - \xB8\xE5 |0 - \xC4\xC2 |0 - \xF0\xA3 |0 - \xCB\xEB |0 - \xF0\xA6 |0 - \xD1\xA8 |0 - \xBE\xBF |0 - \xC7\xEE |0 - \xF1\xB6 |0 - \xF1\xB7 |0 - \xBF\xD5 |0 - \xB4\xA9 |0 - \xF1\xB8 |0 - \xCD\xBB |0 - \xC7\xD4 |0 - \xD5\xAD |0 - \xF1\xB9 |0 - \xF1\xBA |0 - \xC7\xCF |0 - \xD2\xA4 |0 - \xD6\xCF |0 - \xF1\xBB |0 - \xBD\xD1 |0 - \xB4\xB0 |0 - \xBE\xBD |0 - \xB4\xDC |0 - \xCE\xD1 |0 - \xBF\xDF |0 - \xF1\xBD |0 - \xBF\xFA |0 - \xF1\xBC |0 - \xF1\xBF |0 - \xF1\xBE |0 - \xF1\xC0 |0 - \xF1\xC1 |0 - \xC1\xFE |0 - \xC1\xA2 |0 - \xCA\xFA |0 - \xD5\xBE |0 - \xBE\xBA |0 - \xBE\xB9 |0 - \xD5\xC2 |0 - \xBF\xA2 |0 - \xCD\xAF |0 - \xF1\xB5 |0 - \xBD\xDF |0 - \xB6\xCB |0 - \xD6\xF1 |0 - \xF3\xC3 |0 - \xF3\xC4 |0 - \xB8\xCD |0 - \xF3\xC6 |0 - \xF3\xC7 |0 - \xB0\xCA |0 - \xF3\xC5 |0 - \xF3\xC9 |0 - \xCB\xF1 |0 - \xF3\xCB |0 - \xD0\xA6 |0 - \xB1\xCA |0 - \xF3\xC8 |0 - \xF3\xCF |0 - \xB5\xD1 |0 - \xF3\xD7 |0 - \xF3\xD2 |0 - \xF3\xD4 |0 - \xF3\xD3 |0 - \xB7\xFB |0 - \xB1\xBF |0 - \xF3\xCE |0 - \xF3\xCA |0 - \xB5\xDA |0 - \xF3\xD0 |0 - \xF3\xD1 |0 - \xF3\xD5 |0 - \xF3\xCD |0 - \xBC\xE3 |0 - \xC1\xFD |0 - \xF3\xD6 |0 - \xF3\xDA |0 - \xF3\xCC |0 - \xB5\xC8 |0 - \xBD\xEE |0 - \xF3\xDC |0 - \xB7\xA4 |0 - \xBF\xF0 |0 - \xD6\xFE |0 - \xCD\xB2 |0 - \xB4\xF0 |0 - \xB2\xDF |0 - \xF3\xD8 |0 - \xF3\xD9 |0 - \xC9\xB8 |0 - \xF3\xDD |0 - \xF3\xDE |0 - \xF3\xE1 |0 - \xF3\xDF |0 - \xF3\xE3 |0 - \xF3\xE2 |0 - \xF3\xDB |0 - \xBF\xEA |0 - \xB3\xEF |0 - \xF3\xE0 |0 - \xC7\xA9 |0 - \xBC\xF2 |0 - \xF3\xEB |0 - \xB9\xBF |0 - \xF3\xE4 |0 - \xB2\xAD |0 - \xBB\xFE |0 - \xCB\xE3 |0 - \xF3\xED |0 - \xF3\xE9 |0 - \xB9\xDC |0 - \xF3\xEE |0 - \xF3\xE5 |0 - \xF3\xE6 |0 - \xF3\xEA |0 - \xC2\xE1 |0 - \xF3\xEC |0 - \xF3\xEF |0 - \xF3\xE8 |0 - \xBC\xFD |0 - \xCF\xE4 |0 - \xF3\xF0 |0 - \xF3\xE7 |0 - \xF3\xF2 |0 - \xD7\xAD |0 - \xC6\xAA |0 - \xF3\xF3 |0 - \xF3\xF1 |0 - \xC2\xA8 |0 - \xB8\xDD |0 - \xF3\xF5 |0 - \xF3\xF4 |0 - \xB4\xDB |0 - \xF3\xF6 |0 - \xF3\xF7 |0 - \xF3\xF8 |0 - \xC0\xBA |0 - \xC0\xE9 |0 - \xC5\xF1 |0 - \xF3\xFB |0 - \xF3\xFA |0 - \xB4\xD8 |0 - \xF3\xFE |0 - \xF3\xF9 |0 - \xF3\xFC |0 - \xF3\xFD |0 - \xF4\xA1 |0 - \xF4\xA3 |0 - \xBB\xC9 |0 - \xF4\xA2 |0 - \xF4\xA4 |0 - \xB2\xBE |0 - \xF4\xA6 |0 - \xF4\xA5 |0 - \xBC\xAE |0 - \xC3\xD7 |0 - \xD9\xE1 |0 - \xC0\xE0 |0 - \xF4\xCC |0 - \xD7\xD1 |0 - \xB7\xDB |0 - \xF4\xCE |0 - \xC1\xA3 |0 - \xC6\xC9 |0 - \xB4\xD6 |0 - \xD5\xB3 |0 - \xF4\xD0 |0 - \xF4\xCF |0 - \xF4\xD1 |0 - \xCB\xDA |0 - \xF4\xD2 |0 - \xD4\xC1 |0 - \xD6\xE0 |0 - \xB7\xE0 |0 - \xC1\xB8 |0 - \xC1\xBB |0 - \xF4\xD3 |0 - \xBE\xAC |0 - \xB4\xE2 |0 - \xF4\xD4 |0 - \xF4\xD5 |0 - \xBE\xAB |0 - \xF4\xD6 |0 - \xF4\xDB |0 - \xF4\xD7 |0 - \xF4\xDA |0 - \xBA\xFD |0 - \xF4\xD8 |0 - \xF4\xD9 |0 - \xB8\xE2 |0 - \xCC\xC7 |0 - \xF4\xDC |0 - \xB2\xDA |0 - \xC3\xD3 |0 - \xD4\xE3 |0 - \xBF\xB7 |0 - \xF4\xDD |0 - \xC5\xB4 |0 - \xF4\xE9 |0 - \xCF\xB5 |0 - \xCE\xC9 |0 - \xCB\xD8 |0 - \xCB\xF7 |0 - \xBD\xF4 |0 - \xD7\xCF |0 - \xC0\xDB |0 - \xD0\xF5 |0 - \xF4\xEA |0 - \xF4\xEB |0 - \xF4\xEC |0 - \xF7\xE3 |0 - \xB7\xB1 |0 - \xF4\xED |0 - \xD7\xEB |0 - \xF4\xEE |0 - \xE6\xF9 |0 - \xBE\xC0 |0 - \xE6\xFA |0 - \xBA\xEC |0 - \xE6\xFB |0 - \xCF\xCB |0 - \xE6\xFC |0 - \xD4\xBC |0 - \xBC\xB6 |0 - \xE6\xFD |0 - \xE6\xFE |0 - \xBC\xCD |0 - \xC8\xD2 |0 - \xCE\xB3 |0 - \xE7\xA1 |0 - \xB4\xBF |0 - \xE7\xA2 |0 - \xC9\xB4 |0 - \xB8\xD9 |0 - \xC4\xC9 |0 - \xD7\xDD |0 - \xC2\xDA |0 - \xB7\xD7 |0 - \xD6\xBD |0 - \xCE\xC6 |0 - \xB7\xC4 |0 - \xC5\xA6 |0 - \xE7\xA3 |0 - \xCF\xDF |0 - \xE7\xA4 |0 - \xE7\xA5 |0 - \xE7\xA6 |0 - \xC1\xB7 |0 - \xD7\xE9 |0 - \xC9\xF0 |0 - \xCF\xB8 |0 - \xD6\xAF |0 - \xD6\xD5 |0 - \xE7\xA7 |0 - \xB0\xED |0 - \xE7\xA8 |0 - \xE7\xA9 |0 - \xC9\xDC |0 - \xD2\xEF |0 - \xBE\xAD |0 - \xE7\xAA |0 - \xB0\xF3 |0 - \xC8\xDE |0 - \xBD\xE1 |0 - \xE7\xAB |0 - \xC8\xC6 |0 - \xE7\xAC |0 - \xBB\xE6 |0 - \xB8\xF8 |0 - \xD1\xA4 |0 - \xE7\xAD |0 - \xC2\xE7 |0 - \xBE\xF8 |0 - \xBD\xCA |0 - \xCD\xB3 |0 - \xE7\xAE |0 - \xE7\xAF |0 - \xBE\xEE |0 - \xD0\xE5 |0 - \xCB\xE7 |0 - \xCC\xD0 |0 - \xBC\xCC |0 - \xE7\xB0 |0 - \xBC\xA8 |0 - \xD0\xF7 |0 - \xE7\xB1 |0 - \xD0\xF8 |0 - \xE7\xB2 |0 - \xE7\xB3 |0 - \xB4\xC2 |0 - \xE7\xB4 |0 - \xE7\xB5 |0 - \xC9\xFE |0 - \xCE\xAC |0 - \xC3\xE0 |0 - \xE7\xB7 |0 - \xB1\xC1 |0 - \xB3\xF1 |0 - \xE7\xB8 |0 - \xE7\xB9 |0 - \xD7\xDB |0 - \xD5\xC0 |0 - \xE7\xBA |0 - \xC2\xCC |0 - \xD7\xBA |0 - \xE7\xBB |0 - \xE7\xBC |0 - \xE7\xBD |0 - \xBC\xEA |0 - \xC3\xE5 |0 - \xC0\xC2 |0 - \xE7\xBE |0 - \xE7\xBF |0 - \xBC\xA9 |0 - \xE7\xC0 |0 - \xE7\xC1 |0 - \xE7\xB6 |0 - \xB6\xD0 |0 - \xE7\xC2 |0 - \xE7\xC3 |0 - \xE7\xC4 |0 - \xBB\xBA |0 - \xB5\xDE |0 - \xC2\xC6 |0 - \xB1\xE0 |0 - \xE7\xC5 |0 - \xD4\xB5 |0 - \xE7\xC6 |0 - \xB8\xBF |0 - \xE7\xC8 |0 - \xE7\xC7 |0 - \xB7\xEC |0 - \xE7\xC9 |0 - \xB2\xF8 |0 - \xE7\xCA |0 - \xE7\xCB |0 - \xE7\xCC |0 - \xE7\xCD |0 - \xE7\xCE |0 - \xE7\xCF |0 - \xE7\xD0 |0 - \xD3\xA7 |0 - \xCB\xF5 |0 - \xE7\xD1 |0 - \xE7\xD2 |0 - \xE7\xD3 |0 - \xE7\xD4 |0 - \xC9\xC9 |0 - \xE7\xD5 |0 - \xE7\xD6 |0 - \xE7\xD7 |0 - \xE7\xD8 |0 - \xE7\xD9 |0 - \xBD\xC9 |0 - \xE7\xDA |0 - \xF3\xBE |0 - \xB8\xD7 |0 - \xC8\xB1 |0 - \xF3\xBF |0 - \xF3\xC0 |0 - \xF3\xC1 |0 - \xB9\xDE |0 - \xCD\xF8 |0 - \xD8\xE8 |0 - \xBA\xB1 |0 - \xC2\xDE |0 - \xEE\xB7 |0 - \xB7\xA3 |0 - \xEE\xB9 |0 - \xEE\xB8 |0 - \xB0\xD5 |0 - \xEE\xBB |0 - \xD5\xD6 |0 - \xD7\xEF |0 - \xD6\xC3 |0 - \xEE\xBD |0 - \xCA\xF0 |0 - \xEE\xBC |0 - \xEE\xBE |0 - \xEE\xC0 |0 - \xEE\xBF |0 - \xD1\xF2 |0 - \xC7\xBC |0 - \xC3\xC0 |0 - \xB8\xE1 |0 - \xC1\xE7 |0 - \xF4\xC6 |0 - \xD0\xDF |0 - \xF4\xC7 |0 - \xCF\xDB |0 - \xC8\xBA |0 - \xF4\xC8 |0 - \xF4\xC9 |0 - \xF4\xCA |0 - \xF4\xCB |0 - \xD9\xFA |0 - \xB8\xFE |0 - \xE5\xF1 |0 - \xD3\xF0 |0 - \xF4\xE0 |0 - \xCE\xCC |0 - \xB3\xE1 |0 - \xF1\xB4 |0 - \xD2\xEE |0 - \xF4\xE1 |0 - \xCF\xE8 |0 - \xF4\xE2 |0 - \xC7\xCC |0 - \xB5\xD4 |0 - \xB4\xE4 |0 - \xF4\xE4 |0 - \xF4\xE3 |0 - \xF4\xE5 |0 - \xF4\xE6 |0 - \xF4\xE7 |0 - \xBA\xB2 |0 - \xB0\xBF |0 - \xF4\xE8 |0 - \xB7\xAD |0 - \xD2\xED |0 - \xD2\xAB |0 - \xC0\xCF |0 - \xBF\xBC |0 - \xEB\xA3 |0 - \xD5\xDF |0 - \xEA\xC8 |0 - \xF1\xF3 |0 - \xB6\xF8 |0 - \xCB\xA3 |0 - \xC4\xCD |0 - \xF1\xE7 |0 - \xF1\xE8 |0 - \xB8\xFB |0 - \xF1\xE9 |0 - \xBA\xC4 |0 - \xD4\xC5 |0 - \xB0\xD2 |0 - \xF1\xEA |0 - \xF1\xEB |0 - \xF1\xEC |0 - \xF1\xED |0 - \xF1\xEE |0 - \xF1\xEF |0 - \xF1\xF1 |0 - \xF1\xF0 |0 - \xC5\xD5 |0 - \xF1\xF2 |0 - \xB6\xFA |0 - \xF1\xF4 |0 - \xD2\xAE |0 - \xDE\xC7 |0 - \xCB\xCA |0 - \xB3\xDC |0 - \xB5\xA2 |0 - \xB9\xA2 |0 - \xC4\xF4 |0 - \xF1\xF5 |0 - \xF1\xF6 |0 - \xC1\xC4 |0 - \xC1\xFB |0 - \xD6\xB0 |0 - \xF1\xF7 |0 - \xF1\xF8 |0 - \xC1\xAA |0 - \xC6\xB8 |0 - \xBE\xDB |0 - \xF1\xF9 |0 - \xB4\xCF |0 - \xF1\xFA |0 - \xED\xB2 |0 - \xED\xB1 |0 - \xCB\xE0 |0 - \xD2\xDE |0 - \xCB\xC1 |0 - \xD5\xD8 |0 - \xC8\xE2 |0 - \xC0\xDF |0 - \xBC\xA1 |0 - \xEB\xC1 |0 - \xD0\xA4 |0 - \xD6\xE2 |0 - \xB6\xC7 |0 - \xB8\xD8 |0 - \xEB\xC0 |0 - \xB8\xCE |0 - \xEB\xBF |0 - \xB3\xA6 |0 - \xB9\xC9 |0 - \xD6\xAB |0 - \xB7\xF4 |0 - \xB7\xCA |0 - \xBC\xE7 |0 - \xB7\xBE |0 - \xEB\xC6 |0 - \xEB\xC7 |0 - \xB0\xB9 |0 - \xBF\xCF |0 - \xEB\xC5 |0 - \xD3\xFD |0 - \xEB\xC8 |0 - \xEB\xC9 |0 - \xB7\xCE |0 - \xEB\xC2 |0 - \xEB\xC4 |0 - \xC9\xF6 |0 - \xD6\xD7 |0 - \xD5\xCD |0 - \xD0\xB2 |0 - \xEB\xCF |0 - \xCE\xB8 |0 - \xEB\xD0 |0 - \xB5\xA8 |0 - \xB1\xB3 |0 - \xEB\xD2 |0 - \xCC\xA5 |0 - \xC5\xD6 |0 - \xEB\xD3 |0 - \xEB\xD1 |0 - \xC5\xDF |0 - \xEB\xCE |0 - \xCA\xA4 |0 - \xEB\xD5 |0 - \xB0\xFB |0 - \xBA\xFA |0 - \xD8\xB7 |0 - \xF1\xE3 |0 - \xEB\xCA |0 - \xEB\xCB |0 - \xEB\xCC |0 - \xEB\xCD |0 - \xEB\xD6 |0 - \xE6\xC0 |0 - \xEB\xD9 |0 - \xBF\xE8 |0 - \xD2\xC8 |0 - \xEB\xD7 |0 - \xEB\xDC |0 - \xB8\xEC |0 - \xEB\xD8 |0 - \xBD\xBA |0 - \xD0\xD8 |0 - \xB0\xB7 |0 - \xEB\xDD |0 - \xC4\xDC |0 - \xD6\xAC |0 - \xB4\xE0 |0 - \xC2\xF6 |0 - \xBC\xB9 |0 - \xEB\xDA |0 - \xEB\xDB |0 - \xD4\xE0 |0 - \xC6\xEA |0 - \xC4\xD4 |0 - \xEB\xDF |0 - \xC5\xA7 |0 - \xD9\xF5 |0 - \xB2\xB1 |0 - \xEB\xE4 |0 - \xBD\xC5 |0 - \xEB\xE2 |0 - \xEB\xE3 |0 - \xB8\xAC |0 - \xCD\xD1 |0 - \xEB\xE5 |0 - \xEB\xE1 |0 - \xC1\xB3 |0 - \xC6\xA2 |0 - \xCC\xF3 |0 - \xEB\xE6 |0 - \xC0\xB0 |0 - \xD2\xB8 |0 - \xEB\xE7 |0 - \xB8\xAF |0 - \xB8\xAD |0 - \xEB\xE8 |0 - \xC7\xBB |0 - \xCD\xF3 |0 - \xEB\xEA |0 - \xEB\xEB |0 - \xEB\xED |0 - \xD0\xC8 |0 - \xEB\xF2 |0 - \xEB\xEE |0 - \xEB\xF1 |0 - \xC8\xF9 |0 - \xD1\xFC |0 - \xEB\xEC |0 - \xEB\xE9 |0 - \xB8\xB9 |0 - \xCF\xD9 |0 - \xC4\xE5 |0 - \xEB\xEF |0 - \xEB\xF0 |0 - \xCC\xDA |0 - \xCD\xC8 |0 - \xB0\xF2 |0 - \xEB\xF6 |0 - \xEB\xF5 |0 - \xB2\xB2 |0 - \xB8\xE0 |0 - \xEB\xF7 |0 - \xB1\xEC |0 - \xCC\xC5 |0 - \xC4\xA4 |0 - \xCF\xA5 |0 - \xEB\xF9 |0 - \xEC\xA2 |0 - \xC5\xF2 |0 - \xEB\xFA |0 - \xC9\xC5 |0 - \xE2\xDF |0 - \xEB\xFE |0 - \xCD\xCE |0 - \xEC\xA1 |0 - \xB1\xDB |0 - \xD3\xB7 |0 - \xD2\xDC |0 - \xEB\xFD |0 - \xEB\xFB |0 - \xB3\xBC |0 - \xEA\xB0 |0 - \xD7\xD4 |0 - \xF4\xAB |0 - \xB3\xF4 |0 - \xD6\xC1 |0 - \xD6\xC2 |0 - \xD5\xE9 |0 - \xBE\xCA |0 - \xF4\xA7 |0 - \xD2\xA8 |0 - \xF4\xA8 |0 - \xF4\xA9 |0 - \xF4\xAA |0 - \xBE\xCB |0 - \xD3\xDF |0 - \xC9\xE0 |0 - \xC9\xE1 |0 - \xF3\xC2 |0 - \xCA\xE6 |0 - \xCC\xF2 |0 - \xE2\xB6 |0 - \xCB\xB4 |0 - \xCE\xE8 |0 - \xD6\xDB |0 - \xF4\xAD |0 - \xF4\xAE |0 - \xF4\xAF |0 - \xF4\xB2 |0 - \xBA\xBD |0 - \xF4\xB3 |0 - \xB0\xE3 |0 - \xF4\xB0 |0 - \xF4\xB1 |0 - \xBD\xA2 |0 - \xB2\xD5 |0 - \xF4\xB6 |0 - \xF4\xB7 |0 - \xB6\xE6 |0 - \xB2\xB0 |0 - \xCF\xCF |0 - \xF4\xB4 |0 - \xB4\xAC |0 - \xF4\xB5 |0 - \xF4\xB8 |0 - \xF4\xB9 |0 - \xCD\xA7 |0 - \xF4\xBA |0 - \xF4\xBB |0 - \xF4\xBC |0 - \xCB\xD2 |0 - \xF4\xBD |0 - \xF4\xBE |0 - \xF4\xBF |0 - \xF4\xDE |0 - \xC1\xBC |0 - \xBC\xE8 |0 - \xC9\xAB |0 - \xD1\xDE |0 - \xE5\xF5 |0 - \xDC\xB3 |0 - \xD2\xD5 |0 - \xDC\xB4 |0 - \xB0\xAC |0 - \xDC\xB5 |0 - \xBD\xDA |0 - \xDC\xB9 |0 - \xD8\xC2 |0 - \xDC\xB7 |0 - \xD3\xF3 |0 - \xC9\xD6 |0 - \xDC\xBA |0 - \xDC\xB6 |0 - \xDC\xBB |0 - \xC3\xA2 |0 - \xDC\xBC |0 - \xDC\xC5 |0 - \xDC\xBD |0 - \xCE\xDF |0 - \xD6\xA5 |0 - \xDC\xCF |0 - \xDC\xCD |0 - \xDC\xD2 |0 - \xBD\xE6 |0 - \xC2\xAB |0 - \xDC\xB8 |0 - \xDC\xCB |0 - \xDC\xCE |0 - \xDC\xBE |0 - \xB7\xD2 |0 - \xB0\xC5 |0 - \xDC\xC7 |0 - \xD0\xBE |0 - \xDC\xC1 |0 - \xBB\xA8 |0 - \xB7\xBC |0 - \xDC\xCC |0 - \xDC\xC6 |0 - \xDC\xBF |0 - \xC7\xDB |0 - \xD1\xBF |0 - \xDC\xC0 |0 - \xDC\xCA |0 - \xDC\xD0 |0 - \xCE\xAD |0 - \xDC\xC2 |0 - \xDC\xC3 |0 - \xDC\xC8 |0 - \xDC\xC9 |0 - \xB2\xD4 |0 - \xDC\xD1 |0 - \xCB\xD5 |0 - \xD4\xB7 |0 - \xDC\xDB |0 - \xDC\xDF |0 - \xCC\xA6 |0 - \xDC\xE6 |0 - \xC3\xE7 |0 - \xDC\xDC |0 - \xBF\xC1 |0 - \xDC\xD9 |0 - \xB0\xFA |0 - \xB9\xB6 |0 - \xDC\xE5 |0 - \xDC\xD3 |0 - \xDC\xC4 |0 - \xDC\xD6 |0 - \xC8\xF4 |0 - \xBF\xE0 |0 - \xC9\xBB |0 - \xB1\xBD |0 - \xD3\xA2 |0 - \xDC\xDA |0 - \xDC\xD5 |0 - \xC6\xBB |0 - \xDC\xDE |0 - \xD7\xC2 |0 - \xC3\xAF |0 - \xB7\xB6 |0 - \xC7\xD1 |0 - \xC3\xA9 |0 - \xDC\xE2 |0 - \xDC\xD8 |0 - \xDC\xEB |0 - \xDC\xD4 |0 - \xDC\xDD |0 - \xBE\xA5 |0 - \xDC\xD7 |0 - \xDC\xE0 |0 - \xDC\xE3 |0 - \xDC\xE4 |0 - \xDC\xF8 |0 - \xDC\xE1 |0 - \xDD\xA2 |0 - \xDC\xE7 |0 - \xBC\xEB |0 - \xB4\xC4 |0 - \xC3\xA3 |0 - \xB2\xE7 |0 - \xDC\xFA |0 - \xDC\xF2 |0 - \xDC\xEF |0 - \xDC\xFC |0 - \xDC\xEE |0 - \xD2\xF0 |0 - \xB2\xE8 |0 - \xC8\xD7 |0 - \xC8\xE3 |0 - \xDC\xFB |0 - \xDC\xED |0 - \xDC\xF7 |0 - \xDC\xF5 |0 - \xBE\xA3 |0 - \xDC\xF4 |0 - \xB2\xDD |0 - \xDC\xF3 |0 - \xBC\xF6 |0 - \xDC\xE8 |0 - \xBB\xC4 |0 - \xC0\xF3 |0 - \xBC\xD4 |0 - \xDC\xE9 |0 - \xDC\xEA |0 - \xDC\xF1 |0 - \xDC\xF6 |0 - \xDC\xF9 |0 - \xB5\xB4 |0 - \xC8\xD9 |0 - \xBB\xE7 |0 - \xDC\xFE |0 - \xDC\xFD |0 - \xD3\xAB |0 - \xDD\xA1 |0 - \xDD\xA3 |0 - \xDD\xA5 |0 - \xD2\xF1 |0 - \xDD\xA4 |0 - \xDD\xA6 |0 - \xDD\xA7 |0 - \xD2\xA9 |0 - \xBA\xC9 |0 - \xDD\xA9 |0 - \xDD\xB6 |0 - \xDD\xB1 |0 - \xDD\xB4 |0 - \xDD\xB0 |0 - \xC6\xCE |0 - \xC0\xF2 |0 - \xC9\xAF |0 - \xDC\xEC |0 - \xDD\xAE |0 - \xDD\xB7 |0 - \xDC\xF0 |0 - \xDD\xAF |0 - \xDD\xB8 |0 - \xDD\xAC |0 - \xDD\xB9 |0 - \xDD\xB3 |0 - \xDD\xAD |0 - \xC4\xAA |0 - \xDD\xA8 |0 - \xC0\xB3 |0 - \xC1\xAB |0 - \xDD\xAA |0 - \xDD\xAB |0 - \xDD\xB2 |0 - \xBB\xF1 |0 - \xDD\xB5 |0 - \xD3\xA8 |0 - \xDD\xBA |0 - \xDD\xBB |0 - \xC3\xA7 |0 - \xDD\xD2 |0 - \xDD\xBC |0 - \xDD\xD1 |0 - \xB9\xBD |0 - \xBE\xD5 |0 - \xBE\xFA |0 - \xBA\xCA |0 - \xDD\xCA |0 - \xDD\xC5 |0 - \xDD\xBF |0 - \xB2\xCB |0 - \xDD\xC3 |0 - \xDD\xCB |0 - \xB2\xA4 |0 - \xDD\xD5 |0 - \xDD\xBE |0 - \xC6\xD0 |0 - \xDD\xD0 |0 - \xDD\xD4 |0 - \xC1\xE2 |0 - \xB7\xC6 |0 - \xDD\xCE |0 - \xDD\xCF |0 - \xDD\xC4 |0 - \xDD\xBD |0 - \xDD\xCD |0 - \xCC\xD1 |0 - \xDD\xC9 |0 - \xDD\xC2 |0 - \xC3\xC8 |0 - \xC6\xBC |0 - \xCE\xAE |0 - \xDD\xCC |0 - \xDD\xC8 |0 - \xDD\xC1 |0 - \xDD\xC6 |0 - \xC2\xDC |0 - \xD3\xA9 |0 - \xD3\xAA |0 - \xDD\xD3 |0 - \xCF\xF4 |0 - \xC8\xF8 |0 - \xDD\xE6 |0 - \xDD\xC7 |0 - \xDD\xE0 |0 - \xC2\xE4 |0 - \xDD\xE1 |0 - \xDD\xD7 |0 - \xD6\xF8 |0 - \xDD\xD9 |0 - \xDD\xD8 |0 - \xB8\xF0 |0 - \xDD\xD6 |0 - \xC6\xCF |0 - \xB6\xAD |0 - \xDD\xE2 |0 - \xBA\xF9 |0 - \xD4\xE1 |0 - \xDD\xE7 |0 - \xB4\xD0 |0 - \xDD\xDA |0 - \xBF\xFB |0 - \xDD\xE3 |0 - \xDD\xDF |0 - \xDD\xDD |0 - \xB5\xD9 |0 - \xDD\xDB |0 - \xDD\xDC |0 - \xDD\xDE |0 - \xBD\xAF |0 - \xDD\xE4 |0 - \xDD\xE5 |0 - \xDD\xF5 |0 - \xC3\xC9 |0 - \xCB\xE2 |0 - \xDD\xF2 |0 - \xD8\xE1 |0 - \xC6\xD1 |0 - \xDD\xF4 |0 - \xD5\xF4 |0 - \xDD\xF3 |0 - \xDD\xF0 |0 - \xDD\xEC |0 - \xDD\xEF |0 - \xDD\xE8 |0 - \xD0\xEE |0 - \xC8\xD8 |0 - \xDD\xEE |0 - \xDD\xE9 |0 - \xDD\xEA |0 - \xCB\xF2 |0 - \xDD\xED |0 - \xB1\xCD |0 - \xC0\xB6 |0 - \xBC\xBB |0 - \xDD\xF1 |0 - \xDD\xF7 |0 - \xDD\xF6 |0 - \xDD\xEB |0 - \xC5\xEE |0 - \xDD\xFB |0 - \xDE\xA4 |0 - \xDE\xA3 |0 - \xDD\xF8 |0 - \xC3\xEF |0 - \xC2\xFB |0 - \xD5\xE1 |0 - \xCE\xB5 |0 - \xDD\xFD |0 - \xB2\xCC |0 - \xC4\xE8 |0 - \xCA\xDF |0 - \xC7\xBE |0 - \xDD\xFA |0 - \xDD\xFC |0 - \xDD\xFE |0 - \xDE\xA2 |0 - \xB0\xAA |0 - \xB1\xCE |0 - \xDE\xAC |0 - \xDE\xA6 |0 - \xBD\xB6 |0 - \xC8\xEF |0 - \xDE\xA1 |0 - \xDE\xA5 |0 - \xDE\xA9 |0 - \xDE\xA8 |0 - \xDE\xA7 |0 - \xDE\xAD |0 - \xD4\xCC |0 - \xDE\xB3 |0 - \xDE\xAA |0 - \xDE\xAE |0 - \xC0\xD9 |0 - \xB1\xA1 |0 - \xDE\xB6 |0 - \xDE\xB1 |0 - \xDE\xB2 |0 - \xD1\xA6 |0 - \xDE\xB5 |0 - \xDE\xAF |0 - \xDE\xB0 |0 - \xD0\xBD |0 - \xDE\xB4 |0 - \xCA\xED |0 - \xDE\xB9 |0 - \xDE\xB8 |0 - \xDE\xB7 |0 - \xDE\xBB |0 - \xBD\xE5 |0 - \xB2\xD8 |0 - \xC3\xEA |0 - \xDE\xBA |0 - \xC5\xBA |0 - \xDE\xBC |0 - \xCC\xD9 |0 - \xB7\xAA |0 - \xD4\xE5 |0 - \xDE\xBD |0 - \xDE\xBF |0 - \xC4\xA2 |0 - \xDE\xC1 |0 - \xDE\xBE |0 - \xDE\xC0 |0 - \xD5\xBA |0 - \xDE\xC2 |0 - \xF2\xAE |0 - \xBB\xA2 |0 - \xC2\xB2 |0 - \xC5\xB0 |0 - \xC2\xC7 |0 - \xF2\xAF |0 - \xD0\xE9 |0 - \xD3\xDD |0 - \xEB\xBD |0 - \xB3\xE6 |0 - \xF2\xB0 |0 - \xF2\xB1 |0 - \xCA\xAD |0 - \xBA\xE7 |0 - \xF2\xB3 |0 - \xF2\xB5 |0 - \xF2\xB4 |0 - \xCB\xE4 |0 - \xCF\xBA |0 - \xF2\xB2 |0 - \xCA\xB4 |0 - \xD2\xCF |0 - \xC2\xEC |0 - \xCE\xC3 |0 - \xF2\xB8 |0 - \xB0\xF6 |0 - \xF2\xB7 |0 - \xF2\xBE |0 - \xB2\xCF |0 - \xD1\xC1 |0 - \xF2\xBA |0 - \xF2\xBC |0 - \xD4\xE9 |0 - \xF2\xBB |0 - \xF2\xB6 |0 - \xF2\xBF |0 - \xF2\xBD |0 - \xF2\xB9 |0 - \xF2\xC7 |0 - \xF2\xC4 |0 - \xF2\xC6 |0 - \xF2\xCA |0 - \xF2\xC2 |0 - \xF2\xC0 |0 - \xF2\xC5 |0 - \xD6\xFB |0 - \xF2\xC1 |0 - \xC7\xF9 |0 - \xC9\xDF |0 - \xF2\xC8 |0 - \xB9\xC6 |0 - \xB5\xB0 |0 - \xF2\xC3 |0 - \xF2\xC9 |0 - \xF2\xD0 |0 - \xF2\xD6 |0 - \xBB\xD7 |0 - \xF2\xD5 |0 - \xCD\xDC |0 - \xD6\xEB |0 - \xF2\xD2 |0 - \xF2\xD4 |0 - \xB8\xF2 |0 - \xF2\xCB |0 - \xF2\xCE |0 - \xC2\xF9 |0 - \xD5\xDD |0 - \xF2\xCC |0 - \xF2\xCD |0 - \xF2\xCF |0 - \xF2\xD3 |0 - \xF2\xD9 |0 - \xD3\xBC |0 - \xB6\xEA |0 - \xCA\xF1 |0 - \xB7\xE4 |0 - \xF2\xD7 |0 - \xF2\xD8 |0 - \xF2\xDA |0 - \xF2\xDD |0 - \xF2\xDB |0 - \xF2\xDC |0 - \xD1\xD1 |0 - \xF2\xD1 |0 - \xCD\xC9 |0 - \xCE\xCF |0 - \xD6\xA9 |0 - \xF2\xE3 |0 - \xC3\xDB |0 - \xF2\xE0 |0 - \xC0\xAF |0 - \xF2\xEC |0 - \xF2\xDE |0 - \xF2\xE1 |0 - \xF2\xE8 |0 - \xF2\xE2 |0 - \xF2\xE7 |0 - \xF2\xE6 |0 - \xF2\xE9 |0 - \xF2\xDF |0 - \xF2\xE4 |0 - \xF2\xEA |0 - \xD3\xAC |0 - \xF2\xE5 |0 - \xB2\xF5 |0 - \xF2\xF2 |0 - \xD0\xAB |0 - \xF2\xF5 |0 - \xBB\xC8 |0 - \xF2\xF9 |0 - \xF2\xF0 |0 - \xF2\xF6 |0 - \xF2\xF8 |0 - \xF2\xFA |0 - \xF2\xF3 |0 - \xF2\xF1 |0 - \xBA\xFB |0 - \xB5\xFB |0 - \xF2\xEF |0 - \xF2\xF7 |0 - \xF2\xED |0 - \xF2\xEE |0 - \xF2\xEB |0 - \xF3\xA6 |0 - \xF3\xA3 |0 - \xF3\xA2 |0 - \xF2\xF4 |0 - \xC8\xDA |0 - \xF2\xFB |0 - \xF3\xA5 |0 - \xC3\xF8 |0 - \xF2\xFD |0 - \xF3\xA7 |0 - \xF3\xA9 |0 - \xF3\xA4 |0 - \xF2\xFC |0 - \xF3\xAB |0 - \xF3\xAA |0 - \xC2\xDD |0 - \xF3\xAE |0 - \xF3\xB0 |0 - \xF3\xA1 |0 - \xF3\xB1 |0 - \xF3\xAC |0 - \xF3\xAF |0 - \xF2\xFE |0 - \xF3\xAD |0 - \xF3\xB2 |0 - \xF3\xB4 |0 - \xF3\xA8 |0 - \xF3\xB3 |0 - \xF3\xB5 |0 - \xD0\xB7 |0 - \xF3\xB8 |0 - \xD9\xF9 |0 - \xF3\xB9 |0 - \xF3\xB7 |0 - \xC8\xE4 |0 - \xF3\xB6 |0 - \xF3\xBA |0 - \xF3\xBB |0 - \xB4\xC0 |0 - \xEE\xC3 |0 - \xF3\xBC |0 - \xF3\xBD |0 - \xD1\xAA |0 - \xF4\xAC |0 - \xD0\xC6 |0 - \xD0\xD0 |0 - \xD1\xDC |0 - \xCF\xCE |0 - \xBD\xD6 |0 - \xD1\xC3 |0 - \xBA\xE2 |0 - \xE1\xE9 |0 - \xD2\xC2 |0 - \xF1\xC2 |0 - \xB2\xB9 |0 - \xB1\xED |0 - \xF1\xC3 |0 - \xC9\xC0 |0 - \xB3\xC4 |0 - \xD9\xF2 |0 - \xCB\xA5 |0 - \xF1\xC4 |0 - \xD6\xD4 |0 - \xF1\xC5 |0 - \xF4\xC0 |0 - \xF1\xC6 |0 - \xD4\xAC |0 - \xF1\xC7 |0 - \xB0\xC0 |0 - \xF4\xC1 |0 - \xF4\xC2 |0 - \xB4\xFC |0 - \xC5\xDB |0 - \xCC\xBB |0 - \xD0\xE4 |0 - \xCD\xE0 |0 - \xF1\xC8 |0 - \xD9\xF3 |0 - \xB1\xBB |0 - \xCF\xAE |0 - \xB8\xA4 |0 - \xF1\xCA |0 - \xF1\xCB |0 - \xB2\xC3 |0 - \xC1\xD1 |0 - \xD7\xB0 |0 - \xF1\xC9 |0 - \xF1\xCC |0 - \xF1\xCE |0 - \xD9\xF6 |0 - \xD2\xE1 |0 - \xD4\xA3 |0 - \xF4\xC3 |0 - \xC8\xB9 |0 - \xF4\xC4 |0 - \xF1\xCD |0 - \xF1\xCF |0 - \xBF\xE3 |0 - \xF1\xD0 |0 - \xF1\xD4 |0 - \xF1\xD6 |0 - \xF1\xD1 |0 - \xC9\xD1 |0 - \xC5\xE1 |0 - \xC2\xE3 |0 - \xB9\xFC |0 - \xF1\xD3 |0 - \xF1\xD5 |0 - \xB9\xD3 |0 - \xF1\xDB |0 - \xBA\xD6 |0 - \xB0\xFD |0 - \xF1\xD9 |0 - \xF1\xD8 |0 - \xF1\xD2 |0 - \xF1\xDA |0 - \xF1\xD7 |0 - \xC8\xEC |0 - \xCD\xCA |0 - \xF1\xDD |0 - \xE5\xBD |0 - \xF1\xDC |0 - \xF1\xDE |0 - \xF1\xDF |0 - \xCF\xE5 |0 - \xF4\xC5 |0 - \xBD\xF3 |0 - \xF1\xE0 |0 - \xF1\xE1 |0 - \xCE\xF7 |0 - \xD2\xAA |0 - \xF1\xFB |0 - \xB8\xB2 |0 - \xBC\xFB |0 - \xB9\xDB |0 - \xB9\xE6 |0 - \xC3\xD9 |0 - \xCA\xD3 |0 - \xEA\xE8 |0 - \xC0\xC0 |0 - \xBE\xF5 |0 - \xEA\xE9 |0 - \xEA\xEA |0 - \xEA\xEB |0 - \xEA\xEC |0 - \xEA\xED |0 - \xEA\xEE |0 - \xEA\xEF |0 - \xBD\xC7 |0 - \xF5\xFB |0 - \xF5\xFD |0 - \xF5\xFE |0 - \xF5\xFC |0 - \xBD\xE2 |0 - \xF6\xA1 |0 - \xB4\xA5 |0 - \xF6\xA2 |0 - \xF6\xA3 |0 - \xEC\xB2 |0 - \xD1\xD4 |0 - \xD9\xEA |0 - \xF6\xA4 |0 - \xEE\xBA |0 - \xD5\xB2 |0 - \xD3\xFE |0 - \xCC\xDC |0 - \xCA\xC4 |0 - \xE5\xC0 |0 - \xF6\xA5 |0 - \xBE\xAF |0 - \xC6\xA9 |0 - \xDA\xA5 |0 - \xBC\xC6 |0 - \xB6\xA9 |0 - \xB8\xBC |0 - \xC8\xCF |0 - \xBC\xA5 |0 - \xDA\xA6 |0 - \xDA\xA7 |0 - \xCC\xD6 |0 - \xC8\xC3 |0 - \xDA\xA8 |0 - \xC6\xFD |0 - \xD1\xB5 |0 - \xD2\xE9 |0 - \xD1\xB6 |0 - \xBC\xC7 |0 - \xBD\xB2 |0 - \xBB\xE4 |0 - \xDA\xA9 |0 - \xDA\xAA |0 - \xD1\xC8 |0 - \xDA\xAB |0 - \xD0\xED |0 - \xB6\xEF |0 - \xC2\xDB |0 - \xCB\xCF |0 - \xB7\xED |0 - \xC9\xE8 |0 - \xB7\xC3 |0 - \xBE\xF7 |0 - \xD6\xA4 |0 - \xDA\xAC |0 - \xDA\xAD |0 - \xC6\xC0 |0 - \xD7\xE7 |0 - \xCA\xB6 |0 - \xD5\xA9 |0 - \xCB\xDF |0 - \xD5\xEF |0 - \xDA\xAE |0 - \xD6\xDF |0 - \xB4\xCA |0 - \xDA\xB0 |0 - \xDA\xAF |0 - \xD2\xEB |0 - \xDA\xB1 |0 - \xDA\xB2 |0 - \xDA\xB3 |0 - \xCA\xD4 |0 - \xDA\xB4 |0 - \xCA\xAB |0 - \xDA\xB5 |0 - \xDA\xB6 |0 - \xB3\xCF |0 - \xD6\xEF |0 - \xDA\xB7 |0 - \xBB\xB0 |0 - \xB5\xAE |0 - \xDA\xB8 |0 - \xDA\xB9 |0 - \xB9\xEE |0 - \xD1\xAF |0 - \xD2\xE8 |0 - \xDA\xBA |0 - \xB8\xC3 |0 - \xCF\xEA |0 - \xB2\xEF |0 - \xDA\xBB |0 - \xDA\xBC |0 - \xBD\xEB |0 - \xCE\xDC |0 - \xD3\xEF |0 - \xDA\xBD |0 - \xCE\xF3 |0 - \xDA\xBE |0 - \xD3\xD5 |0 - \xBB\xE5 |0 - \xDA\xBF |0 - \xCB\xB5 |0 - \xCB\xD0 |0 - \xDA\xC0 |0 - \xC7\xEB |0 - \xD6\xEE |0 - \xDA\xC1 |0 - \xC5\xB5 |0 - \xB6\xC1 |0 - \xDA\xC2 |0 - \xB7\xCC |0 - \xBF\xCE |0 - \xDA\xC3 |0 - \xDA\xC4 |0 - \xCB\xAD |0 - \xDA\xC5 |0 - \xB5\xF7 |0 - \xDA\xC6 |0 - \xC1\xC2 |0 - \xD7\xBB |0 - \xDA\xC7 |0 - \xCC\xB8 |0 - \xD2\xEA |0 - \xC4\xB1 |0 - \xDA\xC8 |0 - \xB5\xFD |0 - \xBB\xD1 |0 - \xDA\xC9 |0 - \xD0\xB3 |0 - \xDA\xCA |0 - \xDA\xCB |0 - \xCE\xBD |0 - \xDA\xCC |0 - \xDA\xCD |0 - \xDA\xCE |0 - \xB2\xF7 |0 - \xDA\xD1 |0 - \xDA\xCF |0 - \xD1\xE8 |0 - \xDA\xD0 |0 - \xC3\xD5 |0 - \xDA\xD2 |0 - \xDA\xD3 |0 - \xDA\xD4 |0 - \xDA\xD5 |0 - \xD0\xBB |0 - \xD2\xA5 |0 - \xB0\xF9 |0 - \xDA\xD6 |0 - \xC7\xAB |0 - \xDA\xD7 |0 - \xBD\xF7 |0 - \xC3\xA1 |0 - \xDA\xD8 |0 - \xDA\xD9 |0 - \xC3\xFD |0 - \xCC\xB7 |0 - \xDA\xDA |0 - \xDA\xDB |0 - \xC0\xBE |0 - \xC6\xD7 |0 - \xDA\xDC |0 - \xDA\xDD |0 - \xC7\xB4 |0 - \xDA\xDE |0 - \xDA\xDF |0 - \xB9\xC8 |0 - \xBB\xED |0 - \xB6\xB9 |0 - \xF4\xF8 |0 - \xF4\xF9 |0 - \xCD\xE3 |0 - \xF5\xB9 |0 - \xEB\xE0 |0 - \xCF\xF3 |0 - \xBB\xBF |0 - \xBA\xC0 |0 - \xD4\xA5 |0 - \xE1\xD9 |0 - \xF5\xF4 |0 - \xB1\xAA |0 - \xB2\xF2 |0 - \xF5\xF5 |0 - \xF5\xF7 |0 - \xBA\xD1 |0 - \xF5\xF6 |0 - \xC3\xB2 |0 - \xF5\xF9 |0 - \xF5\xF8 |0 - \xB1\xB4 |0 - \xD5\xEA |0 - \xB8\xBA |0 - \xB9\xB1 |0 - \xB2\xC6 |0 - \xD4\xF0 |0 - \xCF\xCD |0 - \xB0\xDC |0 - \xD5\xCB |0 - \xBB\xF5 |0 - \xD6\xCA |0 - \xB7\xB7 |0 - \xCC\xB0 |0 - \xC6\xB6 |0 - \xB1\xE1 |0 - \xB9\xBA |0 - \xD6\xFC |0 - \xB9\xE1 |0 - \xB7\xA1 |0 - \xBC\xFA |0 - \xEA\xDA |0 - \xEA\xDB |0 - \xCC\xF9 |0 - \xB9\xF3 |0 - \xEA\xDC |0 - \xB4\xFB |0 - \xC3\xB3 |0 - \xB7\xD1 |0 - \xBA\xD8 |0 - \xEA\xDD |0 - \xD4\xF4 |0 - \xEA\xDE |0 - \xBC\xD6 |0 - \xBB\xDF |0 - \xEA\xDF |0 - \xC1\xDE |0 - \xC2\xB8 |0 - \xD4\xDF |0 - \xD7\xCA |0 - \xEA\xE0 |0 - \xEA\xE1 |0 - \xEA\xE4 |0 - \xEA\xE2 |0 - \xEA\xE3 |0 - \xC9\xDE |0 - \xB8\xB3 |0 - \xB6\xC4 |0 - \xEA\xE5 |0 - \xCA\xEA |0 - \xC9\xCD |0 - \xB4\xCD |0 - \xE2\xD9 |0 - \xC5\xE2 |0 - \xEA\xE6 |0 - \xC0\xB5 |0 - \xD7\xB8 |0 - \xEA\xE7 |0 - \xD7\xAC |0 - \xC8\xFC |0 - \xD8\xD3 |0 - \xD8\xCD |0 - \xD4\xDE |0 - \xD4\xF9 |0 - \xC9\xC4 |0 - \xD3\xAE |0 - \xB8\xD3 |0 - \xB3\xE0 |0 - \xC9\xE2 |0 - \xF4\xF6 |0 - \xBA\xD5 |0 - \xF4\xF7 |0 - \xD7\xDF |0 - \xF4\xF1 |0 - \xB8\xB0 |0 - \xD5\xD4 |0 - \xB8\xCF |0 - \xC6\xF0 |0 - \xB3\xC3 |0 - \xF4\xF2 |0 - \xB3\xAC |0 - \xD4\xBD |0 - \xC7\xF7 |0 - \xF4\xF4 |0 - \xF4\xF3 |0 - \xCC\xCB |0 - \xC8\xA4 |0 - \xF4\xF5 |0 - \xD7\xE3 |0 - \xC5\xBF |0 - \xF5\xC0 |0 - \xF5\xBB |0 - \xF5\xC3 |0 - \xF5\xC2 |0 - \xD6\xBA |0 - \xF5\xC1 |0 - \xD4\xBE |0 - \xF5\xC4 |0 - \xF5\xCC |0 - \xB0\xCF |0 - \xB5\xF8 |0 - \xF5\xC9 |0 - \xF5\xCA |0 - \xC5\xDC |0 - \xF5\xC5 |0 - \xF5\xC6 |0 - \xF5\xC7 |0 - \xF5\xCB |0 - \xBE\xE0 |0 - \xF5\xC8 |0 - \xB8\xFA |0 - \xF5\xD0 |0 - \xF5\xD3 |0 - \xBF\xE7 |0 - \xB9\xF2 |0 - \xF5\xBC |0 - \xF5\xCD |0 - \xC2\xB7 |0 - \xCC\xF8 |0 - \xBC\xF9 |0 - \xF5\xCE |0 - \xF5\xCF |0 - \xF5\xD1 |0 - \xB6\xE5 |0 - \xF5\xD2 |0 - \xF5\xD5 |0 - \xF5\xBD |0 - \xF5\xD4 |0 - \xD3\xBB |0 - \xB3\xEC |0 - \xCC\xA4 |0 - \xF5\xD6 |0 - \xF5\xD7 |0 - \xBE\xE1 |0 - \xF5\xD8 |0 - \xCC\xDF |0 - \xF5\xDB |0 - \xB2\xC8 |0 - \xD7\xD9 |0 - \xF5\xD9 |0 - \xF5\xDA |0 - \xF5\xDC |0 - \xF5\xE2 |0 - \xF5\xE0 |0 - \xF5\xDF |0 - \xF5\xDD |0 - \xF5\xE1 |0 - \xF5\xDE |0 - \xF5\xE4 |0 - \xF5\xE5 |0 - \xCC\xE3 |0 - \xE5\xBF |0 - \xB5\xB8 |0 - \xF5\xE3 |0 - \xF5\xE8 |0 - \xCC\xA3 |0 - \xF5\xE6 |0 - \xF5\xE7 |0 - \xF5\xBE |0 - \xB1\xC4 |0 - \xF5\xBF |0 - \xB5\xC5 |0 - \xB2\xE4 |0 - \xF5\xEC |0 - \xF5\xE9 |0 - \xB6\xD7 |0 - \xF5\xED |0 - \xF5\xEA |0 - \xF5\xEB |0 - \xB4\xDA |0 - \xD4\xEA |0 - \xF5\xEE |0 - \xB3\xF9 |0 - \xF5\xEF |0 - \xF5\xF1 |0 - \xF5\xF0 |0 - \xF5\xF2 |0 - \xF5\xF3 |0 - \xC9\xED |0 - \xB9\xAA |0 - \xC7\xFB |0 - \xB6\xE3 |0 - \xCC\xC9 |0 - \xEA\xA6 |0 - \xB3\xB5 |0 - \xD4\xFE |0 - \xB9\xEC |0 - \xD0\xF9 |0 - \xE9\xED |0 - \xD7\xAA |0 - \xE9\xEE |0 - \xC2\xD6 |0 - \xC8\xED |0 - \xBA\xE4 |0 - \xE9\xEF |0 - \xE9\xF0 |0 - \xE9\xF1 |0 - \xD6\xE1 |0 - \xE9\xF2 |0 - \xE9\xF3 |0 - \xE9\xF5 |0 - \xE9\xF4 |0 - \xE9\xF6 |0 - \xE9\xF7 |0 - \xC7\xE1 |0 - \xE9\xF8 |0 - \xD4\xD8 |0 - \xE9\xF9 |0 - \xBD\xCE |0 - \xE9\xFA |0 - \xE9\xFB |0 - \xBD\xCF |0 - \xE9\xFC |0 - \xB8\xA8 |0 - \xC1\xBE |0 - \xE9\xFD |0 - \xB1\xB2 |0 - \xBB\xD4 |0 - \xB9\xF5 |0 - \xE9\xFE |0 - \xEA\xA1 |0 - \xEA\xA2 |0 - \xEA\xA3 |0 - \xB7\xF8 |0 - \xBC\xAD |0 - \xCA\xE4 |0 - \xE0\xCE |0 - \xD4\xAF |0 - \xCF\xBD |0 - \xD5\xB7 |0 - \xEA\xA4 |0 - \xD5\xDE |0 - \xEA\xA5 |0 - \xD0\xC1 |0 - \xB9\xBC |0 - \xB4\xC7 |0 - \xB1\xD9 |0 - \xC0\xB1 |0 - \xB1\xE6 |0 - \xB1\xE7 |0 - \xB1\xE8 |0 - \xB3\xBD |0 - \xC8\xE8 |0 - \xE5\xC1 |0 - \xB1\xDF |0 - \xC1\xC9 |0 - \xB4\xEF |0 - \xC7\xA8 |0 - \xD3\xD8 |0 - \xC6\xF9 |0 - \xD1\xB8 |0 - \xB9\xFD |0 - \xC2\xF5 |0 - \xD3\xAD |0 - \xD4\xCB |0 - \xBD\xFC |0 - \xE5\xC2 |0 - \xB7\xB5 |0 - \xE5\xC3 |0 - \xBB\xB9 |0 - \xD5\xE2 |0 - \xBD\xF8 |0 - \xD4\xB6 |0 - \xCE\xA5 |0 - \xC1\xAC |0 - \xB3\xD9 |0 - \xCC\xF6 |0 - \xE5\xC6 |0 - \xE5\xC4 |0 - \xE5\xC8 |0 - \xE5\xCA |0 - \xE5\xC7 |0 - \xB5\xCF |0 - \xC6\xC8 |0 - \xB5\xFC |0 - \xE5\xC5 |0 - \xCA\xF6 |0 - \xE5\xC9 |0 - \xC3\xD4 |0 - \xB1\xC5 |0 - \xBC\xA3 |0 - \xD7\xB7 |0 - \xCD\xCB |0 - \xCB\xCD |0 - \xCA\xCA |0 - \xCC\xD3 |0 - \xE5\xCC |0 - \xE5\xCB |0 - \xC4\xE6 |0 - \xD1\xA1 |0 - \xD1\xB7 |0 - \xE5\xCD |0 - \xE5\xD0 |0 - \xCD\xB8 |0 - \xD6\xF0 |0 - \xE5\xCF |0 - \xB5\xDD |0 - \xCD\xBE |0 - \xE5\xD1 |0 - \xB6\xBA |0 - \xCD\xA8 |0 - \xB9\xE4 |0 - \xCA\xC5 |0 - \xB3\xD1 |0 - \xCB\xD9 |0 - \xD4\xEC |0 - \xE5\xD2 |0 - \xB7\xEA |0 - \xE5\xCE |0 - \xE5\xD5 |0 - \xB4\xFE |0 - \xE5\xD6 |0 - \xE5\xD3 |0 - \xE5\xD4 |0 - \xD2\xDD |0 - \xC2\xDF |0 - \xB1\xC6 |0 - \xD3\xE2 |0 - \xB6\xDD |0 - \xCB\xEC |0 - \xE5\xD7 |0 - \xD3\xF6 |0 - \xB1\xE9 |0 - \xB6\xF4 |0 - \xE5\xDA |0 - \xE5\xD8 |0 - \xE5\xD9 |0 - \xB5\xC0 |0 - \xD2\xC5 |0 - \xE5\xDC |0 - \xE5\xDE |0 - \xE5\xDD |0 - \xC7\xB2 |0 - \xD2\xA3 |0 - \xE5\xDB |0 - \xD4\xE2 |0 - \xD5\xDA |0 - \xE5\xE0 |0 - \xD7\xF1 |0 - \xE5\xE1 |0 - \xB1\xDC |0 - \xD1\xFB |0 - \xE5\xE2 |0 - \xE5\xE4 |0 - \xE5\xE3 |0 - \xE5\xE5 |0 - \xD2\xD8 |0 - \xB5\xCB |0 - \xE7\xDF |0 - \xDA\xF5 |0 - \xDA\xF8 |0 - \xDA\xF6 |0 - \xDA\xF7 |0 - \xDA\xFA |0 - \xD0\xCF |0 - \xC4\xC7 |0 - \xB0\xEE |0 - \xD0\xB0 |0 - \xDA\xF9 |0 - \xD3\xCA |0 - \xBA\xAA |0 - \xDB\xA2 |0 - \xC7\xF1 |0 - \xDA\xFC |0 - \xDA\xFB |0 - \xC9\xDB |0 - \xDA\xFD |0 - \xDB\xA1 |0 - \xD7\xDE |0 - \xDA\xFE |0 - \xC1\xDA |0 - \xDB\xA5 |0 - \xD3\xF4 |0 - \xDB\xA7 |0 - \xDB\xA4 |0 - \xDB\xA8 |0 - \xBD\xBC |0 - \xC0\xC9 |0 - \xDB\xA3 |0 - \xDB\xA6 |0 - \xD6\xA3 |0 - \xDB\xA9 |0 - \xDB\xAD |0 - \xDB\xAE |0 - \xDB\xAC |0 - \xBA\xC2 |0 - \xBF\xA4 |0 - \xDB\xAB |0 - \xDB\xAA |0 - \xD4\xC7 |0 - \xB2\xBF |0 - \xDB\xAF |0 - \xB9\xF9 |0 - \xDB\xB0 |0 - \xB3\xBB |0 - \xB5\xA6 |0 - \xB6\xBC |0 - \xDB\xB1 |0 - \xB6\xF5 |0 - \xDB\xB2 |0 - \xB1\xC9 |0 - \xDB\xB4 |0 - \xDB\xB3 |0 - \xDB\xB5 |0 - \xDB\xB7 |0 - \xDB\xB6 |0 - \xDB\xB8 |0 - \xDB\xB9 |0 - \xDB\xBA |0 - \xD3\xCF |0 - \xF4\xFA |0 - \xC7\xF5 |0 - \xD7\xC3 |0 - \xC5\xE4 |0 - \xF4\xFC |0 - \xF4\xFD |0 - \xF4\xFB |0 - \xBE\xC6 |0 - \xD0\xEF |0 - \xB7\xD3 |0 - \xD4\xCD |0 - \xCC\xAA |0 - \xF5\xA2 |0 - \xF5\xA1 |0 - \xBA\xA8 |0 - \xF4\xFE |0 - \xCB\xD6 |0 - \xF5\xA4 |0 - \xC0\xD2 |0 - \xB3\xEA |0 - \xCD\xAA |0 - \xF5\xA5 |0 - \xF5\xA3 |0 - \xBD\xB4 |0 - \xF5\xA8 |0 - \xF5\xA9 |0 - \xBD\xCD |0 - \xC3\xB8 |0 - \xBF\xE1 |0 - \xCB\xE1 |0 - \xF5\xAA |0 - \xF5\xA6 |0 - \xF5\xA7 |0 - \xC4\xF0 |0 - \xF5\xAC |0 - \xB4\xBC |0 - \xD7\xED |0 - \xB4\xD7 |0 - \xF5\xAB |0 - \xF5\xAE |0 - \xF5\xAD |0 - \xF5\xAF |0 - \xD0\xD1 |0 - \xC3\xD1 |0 - \xC8\xA9 |0 - \xF5\xB0 |0 - \xF5\xB1 |0 - \xF5\xB2 |0 - \xF5\xB3 |0 - \xF5\xB4 |0 - \xF5\xB5 |0 - \xF5\xB7 |0 - \xF5\xB6 |0 - \xF5\xB8 |0 - \xB2\xC9 |0 - \xD3\xD4 |0 - \xCA\xCD |0 - \xC0\xEF |0 - \xD6\xD8 |0 - \xD2\xB0 |0 - \xC1\xBF |0 - \xBD\xF0 |0 - \xB8\xAA |0 - \xBC\xF8 |0 - \xF6\xC6 |0 - \xF6\xC7 |0 - \xF6\xC8 |0 - \xF6\xC9 |0 - \xF6\xCA |0 - \xF6\xCC |0 - \xF6\xCB |0 - \xF7\xE9 |0 - \xF6\xCD |0 - \xF6\xCE |0 - \xEE\xC4 |0 - \xEE\xC5 |0 - \xEE\xC6 |0 - \xD5\xEB |0 - \xB6\xA4 |0 - \xEE\xC8 |0 - \xEE\xC7 |0 - \xEE\xC9 |0 - \xEE\xCA |0 - \xC7\xA5 |0 - \xEE\xCB |0 - \xEE\xCC |0 - \xB7\xB0 |0 - \xB5\xF6 |0 - \xEE\xCD |0 - \xEE\xCF |0 - \xEE\xCE |0 - \xB8\xC6 |0 - \xEE\xD0 |0 - \xEE\xD1 |0 - \xEE\xD2 |0 - \xB6\xDB |0 - \xB3\xAE |0 - \xD6\xD3 |0 - \xC4\xC6 |0 - \xB1\xB5 |0 - \xB8\xD6 |0 - \xEE\xD3 |0 - \xEE\xD4 |0 - \xD4\xBF |0 - \xC7\xD5 |0 - \xBE\xFB |0 - \xCE\xD9 |0 - \xB9\xB3 |0 - \xEE\xD6 |0 - \xEE\xD5 |0 - \xEE\xD8 |0 - \xEE\xD7 |0 - \xC5\xA5 |0 - \xEE\xD9 |0 - \xEE\xDA |0 - \xC7\xAE |0 - \xEE\xDB |0 - \xC7\xAF |0 - \xEE\xDC |0 - \xB2\xA7 |0 - \xEE\xDD |0 - \xEE\xDE |0 - \xEE\xDF |0 - \xEE\xE0 |0 - \xEE\xE1 |0 - \xD7\xEA |0 - \xEE\xE2 |0 - \xEE\xE3 |0 - \xBC\xD8 |0 - \xEE\xE4 |0 - \xD3\xCB |0 - \xCC\xFA |0 - \xB2\xAC |0 - \xC1\xE5 |0 - \xEE\xE5 |0 - \xC7\xA6 |0 - \xC3\xAD |0 - \xEE\xE6 |0 - \xEE\xE7 |0 - \xEE\xE8 |0 - \xEE\xE9 |0 - \xEE\xEA |0 - \xEE\xEB |0 - \xEE\xEC |0 - \xEE\xED |0 - \xEE\xEE |0 - \xEE\xEF |0 - \xEE\xF0 |0 - \xEE\xF1 |0 - \xEE\xF2 |0 - \xEE\xF4 |0 - \xEE\xF3 |0 - \xEE\xF5 |0 - \xCD\xAD |0 - \xC2\xC1 |0 - \xEE\xF6 |0 - \xEE\xF7 |0 - \xEE\xF8 |0 - \xD5\xA1 |0 - \xEE\xF9 |0 - \xCF\xB3 |0 - \xEE\xFA |0 - \xEE\xFB |0 - \xEE\xFC |0 - \xEE\xFD |0 - \xEF\xA1 |0 - \xEE\xFE |0 - \xEF\xA2 |0 - \xB8\xF5 |0 - \xC3\xFA |0 - \xEF\xA3 |0 - \xEF\xA4 |0 - \xBD\xC2 |0 - \xD2\xBF |0 - \xB2\xF9 |0 - \xEF\xA5 |0 - \xEF\xA6 |0 - \xEF\xA7 |0 - \xD2\xF8 |0 - \xEF\xA8 |0 - \xD6\xFD |0 - \xEF\xA9 |0 - \xC6\xCC |0 - \xEF\xAA |0 - \xEF\xAB |0 - \xC1\xB4 |0 - \xEF\xAC |0 - \xCF\xFA |0 - \xCB\xF8 |0 - \xEF\xAE |0 - \xEF\xAD |0 - \xB3\xFA |0 - \xB9\xF8 |0 - \xEF\xAF |0 - \xEF\xB0 |0 - \xD0\xE2 |0 - \xEF\xB1 |0 - \xEF\xB2 |0 - \xB7\xE6 |0 - \xD0\xBF |0 - \xEF\xB3 |0 - \xEF\xB4 |0 - \xEF\xB5 |0 - \xC8\xF1 |0 - \xCC\xE0 |0 - \xEF\xB6 |0 - \xEF\xB7 |0 - \xEF\xB8 |0 - \xEF\xB9 |0 - \xEF\xBA |0 - \xD5\xE0 |0 - \xEF\xBB |0 - \xB4\xED |0 - \xC3\xAA |0 - \xEF\xBC |0 - \xEF\xBD |0 - \xEF\xBE |0 - \xEF\xBF |0 - \xCE\xFD |0 - \xEF\xC0 |0 - \xC2\xE0 |0 - \xB4\xB8 |0 - \xD7\xB6 |0 - \xBD\xF5 |0 - \xCF\xC7 |0 - \xEF\xC3 |0 - \xEF\xC1 |0 - \xEF\xC2 |0 - \xEF\xC4 |0 - \xB6\xA7 |0 - \xBC\xFC |0 - \xBE\xE2 |0 - \xC3\xCC |0 - \xEF\xC5 |0 - \xEF\xC6 |0 - \xEF\xC7 |0 - \xEF\xCF |0 - \xEF\xC8 |0 - \xEF\xC9 |0 - \xEF\xCA |0 - \xC7\xC2 |0 - \xEF\xF1 |0 - \xB6\xCD |0 - \xEF\xCB |0 - \xEF\xCC |0 - \xEF\xCD |0 - \xB6\xC6 |0 - \xC3\xBE |0 - \xEF\xCE |0 - \xEF\xD0 |0 - \xEF\xD1 |0 - \xEF\xD2 |0 - \xD5\xF2 |0 - \xEF\xD3 |0 - \xC4\xF7 |0 - \xEF\xD4 |0 - \xC4\xF8 |0 - \xEF\xD5 |0 - \xEF\xD6 |0 - \xB8\xE4 |0 - \xB0\xF7 |0 - \xEF\xD7 |0 - \xEF\xD8 |0 - \xEF\xD9 |0 - \xEF\xDA |0 - \xEF\xDB |0 - \xEF\xDC |0 - \xEF\xDD |0 - \xEF\xDE |0 - \xBE\xB5 |0 - \xEF\xE1 |0 - \xEF\xDF |0 - \xEF\xE0 |0 - \xEF\xE2 |0 - \xEF\xE3 |0 - \xC1\xCD |0 - \xEF\xE4 |0 - \xEF\xE5 |0 - \xEF\xE6 |0 - \xEF\xE7 |0 - \xEF\xE8 |0 - \xEF\xE9 |0 - \xEF\xEA |0 - \xEF\xEB |0 - \xEF\xEC |0 - \xC0\xD8 |0 - \xEF\xED |0 - \xC1\xAD |0 - \xEF\xEE |0 - \xEF\xEF |0 - \xEF\xF0 |0 - \xCF\xE2 |0 - \xB3\xA4 |0 - \xC3\xC5 |0 - \xE3\xC5 |0 - \xC9\xC1 |0 - \xE3\xC6 |0 - \xB1\xD5 |0 - \xCE\xCA |0 - \xB4\xB3 |0 - \xC8\xF2 |0 - \xE3\xC7 |0 - \xCF\xD0 |0 - \xE3\xC8 |0 - \xBC\xE4 |0 - \xE3\xC9 |0 - \xE3\xCA |0 - \xC3\xC6 |0 - \xD5\xA2 |0 - \xC4\xD6 |0 - \xB9\xEB |0 - \xCE\xC5 |0 - \xE3\xCB |0 - \xC3\xF6 |0 - \xE3\xCC |0 - \xB7\xA7 |0 - \xB8\xF3 |0 - \xBA\xD2 |0 - \xE3\xCD |0 - \xE3\xCE |0 - \xD4\xC4 |0 - \xE3\xCF |0 - \xE3\xD0 |0 - \xD1\xCB |0 - \xE3\xD1 |0 - \xE3\xD2 |0 - \xE3\xD3 |0 - \xE3\xD4 |0 - \xD1\xD6 |0 - \xE3\xD5 |0 - \xB2\xFB |0 - \xC0\xBB |0 - \xE3\xD6 |0 - \xC0\xAB |0 - \xE3\xD7 |0 - \xE3\xD8 |0 - \xE3\xD9 |0 - \xE3\xDA |0 - \xE3\xDB |0 - \xB8\xB7 |0 - \xDA\xE2 |0 - \xB6\xD3 |0 - \xDA\xE4 |0 - \xDA\xE3 |0 - \xDA\xE6 |0 - \xC8\xEE |0 - \xDA\xE5 |0 - \xB7\xC0 |0 - \xD1\xF4 |0 - \xD2\xF5 |0 - \xD5\xF3 |0 - \xBD\xD7 |0 - \xD7\xE8 |0 - \xDA\xE8 |0 - \xDA\xE7 |0 - \xB0\xA2 |0 - \xCD\xD3 |0 - \xDA\xE9 |0 - \xB8\xBD |0 - \xBC\xCA |0 - \xC2\xBD |0 - \xC2\xA4 |0 - \xB3\xC2 |0 - \xDA\xEA |0 - \xC2\xAA |0 - \xC4\xB0 |0 - \xBD\xB5 |0 - \xCF\xDE |0 - \xDA\xEB |0 - \xC9\xC2 |0 - \xB1\xDD |0 - \xDA\xEC |0 - \xB6\xB8 |0 - \xD4\xBA |0 - \xB3\xFD |0 - \xDA\xED |0 - \xD4\xC9 |0 - \xCF\xD5 |0 - \xC5\xE3 |0 - \xDA\xEE |0 - \xDA\xEF |0 - \xDA\xF0 |0 - \xC1\xEA |0 - \xCC\xD5 |0 - \xCF\xDD |0 - \xD3\xE7 |0 - \xC2\xA1 |0 - \xDA\xF1 |0 - \xCB\xE5 |0 - \xDA\xF2 |0 - \xCB\xE6 |0 - \xD2\xFE |0 - \xB8\xF4 |0 - \xDA\xF3 |0 - \xB0\xAF |0 - \xCF\xB6 |0 - \xD5\xCF |0 - \xCB\xED |0 - \xDA\xF4 |0 - \xE3\xC4 |0 - \xC1\xA5 |0 - \xF6\xBF |0 - \xF6\xC0 |0 - \xF6\xC1 |0 - \xC4\xD1 |0 - \xC8\xB8 |0 - \xD1\xE3 |0 - \xD0\xDB |0 - \xD1\xC5 |0 - \xBC\xAF |0 - \xB9\xCD |0 - \xEF\xF4 |0 - \xB4\xC6 |0 - \xD3\xBA |0 - \xF6\xC2 |0 - \xB3\xFB |0 - \xF6\xC3 |0 - \xB5\xF1 |0 - \xF6\xC5 |0 - \xD3\xEA |0 - \xF6\xA7 |0 - \xD1\xA9 |0 - \xF6\xA9 |0 - \xF6\xA8 |0 - \xC1\xE3 |0 - \xC0\xD7 |0 - \xB1\xA2 |0 - \xCE\xED |0 - \xD0\xE8 |0 - \xF6\xAB |0 - \xCF\xF6 |0 - \xF6\xAA |0 - \xD5\xF0 |0 - \xF6\xAC |0 - \xC3\xB9 |0 - \xBB\xF4 |0 - \xF6\xAE |0 - \xF6\xAD |0 - \xC4\xDE |0 - \xC1\xD8 |0 - \xCB\xAA |0 - \xCF\xBC |0 - \xF6\xAF |0 - \xF6\xB0 |0 - \xF6\xB1 |0 - \xC2\xB6 |0 - \xB0\xD4 |0 - \xC5\xF9 |0 - \xF6\xB2 |0 - \xC7\xE0 |0 - \xF6\xA6 |0 - \xBE\xB8 |0 - \xBE\xB2 |0 - \xB5\xE5 |0 - \xB7\xC7 |0 - \xBF\xBF |0 - \xC3\xD2 |0 - \xC3\xE6 |0 - \xD8\xCC |0 - \xB8\xEF |0 - \xBD\xF9 |0 - \xD1\xA5 |0 - \xB0\xD0 |0 - \xF7\xB0 |0 - \xF7\xB1 |0 - \xD0\xAC |0 - \xB0\xB0 |0 - \xF7\xB2 |0 - \xF7\xB3 |0 - \xF7\xB4 |0 - \xC7\xCA |0 - \xBE\xCF |0 - \xF7\xB7 |0 - \xF7\xB6 |0 - \xB1\xDE |0 - \xF7\xB5 |0 - \xF7\xB8 |0 - \xF7\xB9 |0 - \xCE\xA4 |0 - \xC8\xCD |0 - \xBA\xAB |0 - \xE8\xB8 |0 - \xE8\xB9 |0 - \xE8\xBA |0 - \xBE\xC2 |0 - \xD2\xF4 |0 - \xD4\xCF |0 - \xC9\xD8 |0 - \xD2\xB3 |0 - \xB6\xA5 |0 - \xC7\xEA |0 - \xF1\xFC |0 - \xCF\xEE |0 - \xCB\xB3 |0 - \xD0\xEB |0 - \xE7\xEF |0 - \xCD\xE7 |0 - \xB9\xCB |0 - \xB6\xD9 |0 - \xF1\xFD |0 - \xB0\xE4 |0 - \xCB\xCC |0 - \xF1\xFE |0 - \xD4\xA4 |0 - \xC2\xAD |0 - \xC1\xEC |0 - \xC6\xC4 |0 - \xBE\xB1 |0 - \xF2\xA1 |0 - \xBC\xD5 |0 - \xF2\xA2 |0 - \xF2\xA3 |0 - \xF2\xA4 |0 - \xD2\xC3 |0 - \xC6\xB5 |0 - \xCD\xC7 |0 - \xF2\xA5 |0 - \xD3\xB1 |0 - \xBF\xC5 |0 - \xCC\xE2 |0 - \xF2\xA6 |0 - \xF2\xA7 |0 - \xD1\xD5 |0 - \xB6\xEE |0 - \xF2\xA8 |0 - \xF2\xA9 |0 - \xB5\xDF |0 - \xF2\xAA |0 - \xF2\xAB |0 - \xB2\xFC |0 - \xF2\xAC |0 - \xF2\xAD |0 - \xC8\xA7 |0 - \xB7\xE7 |0 - \xEC\xA9 |0 - \xEC\xAA |0 - \xEC\xAB |0 - \xEC\xAC |0 - \xC6\xAE |0 - \xEC\xAD |0 - \xEC\xAE |0 - \xB7\xC9 |0 - \xCA\xB3 |0 - \xE2\xB8 |0 - \xF7\xCF |0 - \xF7\xD0 |0 - \xB2\xCD |0 - \xF7\xD1 |0 - \xF7\xD3 |0 - \xF7\xD2 |0 - \xE2\xBB |0 - \xBC\xA2 |0 - \xE2\xBC |0 - \xE2\xBD |0 - \xE2\xBE |0 - \xE2\xBF |0 - \xE2\xC0 |0 - \xE2\xC1 |0 - \xB7\xB9 |0 - \xD2\xFB |0 - \xBD\xA4 |0 - \xCA\xCE |0 - \xB1\xA5 |0 - \xCB\xC7 |0 - \xE2\xC2 |0 - \xB6\xFC |0 - \xC8\xC4 |0 - \xE2\xC3 |0 - \xBD\xC8 |0 - \xB1\xFD |0 - \xE2\xC4 |0 - \xB6\xF6 |0 - \xE2\xC5 |0 - \xC4\xD9 |0 - \xE2\xC6 |0 - \xCF\xDA |0 - \xB9\xDD |0 - \xE2\xC7 |0 - \xC0\xA1 |0 - \xE2\xC8 |0 - \xB2\xF6 |0 - \xE2\xC9 |0 - \xC1\xF3 |0 - \xE2\xCA |0 - \xE2\xCB |0 - \xC2\xF8 |0 - \xE2\xCC |0 - \xE2\xCD |0 - \xE2\xCE |0 - \xCA\xD7 |0 - \xD8\xB8 |0 - \xD9\xE5 |0 - \xCF\xE3 |0 - \xF0\xA5 |0 - \xDC\xB0 |0 - \xC2\xED |0 - \xD4\xA6 |0 - \xCD\xD4 |0 - \xD1\xB1 |0 - \xB3\xDB |0 - \xC7\xFD |0 - \xB2\xB5 |0 - \xC2\xBF |0 - \xE6\xE0 |0 - \xCA\xBB |0 - \xE6\xE1 |0 - \xE6\xE2 |0 - \xBE\xD4 |0 - \xE6\xE3 |0 - \xD7\xA4 |0 - \xCD\xD5 |0 - \xE6\xE5 |0 - \xBC\xDD |0 - \xE6\xE4 |0 - \xE6\xE6 |0 - \xE6\xE7 |0 - \xC2\xEE |0 - \xBD\xBE |0 - \xE6\xE8 |0 - \xC2\xE6 |0 - \xBA\xA7 |0 - \xE6\xE9 |0 - \xE6\xEA |0 - \xB3\xD2 |0 - \xD1\xE9 |0 - \xBF\xA5 |0 - \xE6\xEB |0 - \xC6\xEF |0 - \xE6\xEC |0 - \xE6\xED |0 - \xE6\xEE |0 - \xC6\xAD |0 - \xE6\xEF |0 - \xC9\xA7 |0 - \xE6\xF0 |0 - \xE6\xF1 |0 - \xE6\xF2 |0 - \xE5\xB9 |0 - \xE6\xF3 |0 - \xE6\xF4 |0 - \xC2\xE2 |0 - \xE6\xF5 |0 - \xE6\xF6 |0 - \xD6\xE8 |0 - \xE6\xF7 |0 - \xE6\xF8 |0 - \xB9\xC7 |0 - \xF7\xBB |0 - \xF7\xBA |0 - \xF7\xBE |0 - \xF7\xBC |0 - \xBA\xA1 |0 - \xF7\xBF |0 - \xF7\xC0 |0 - \xF7\xC2 |0 - \xF7\xC1 |0 - \xF7\xC4 |0 - \xF7\xC3 |0 - \xF7\xC5 |0 - \xF7\xC6 |0 - \xF7\xC7 |0 - \xCB\xE8 |0 - \xB8\xDF |0 - \xF7\xD4 |0 - \xF7\xD5 |0 - \xF7\xD6 |0 - \xF7\xD8 |0 - \xF7\xDA |0 - \xF7\xD7 |0 - \xF7\xDB |0 - \xF7\xD9 |0 - \xD7\xD7 |0 - \xF7\xDC |0 - \xF7\xDD |0 - \xF7\xDE |0 - \xF7\xDF |0 - \xF7\xE0 |0 - \xDB\xCB |0 - \xD8\xAA |0 - \xE5\xF7 |0 - \xB9\xED |0 - \xBF\xFD |0 - \xBB\xEA |0 - \xF7\xC9 |0 - \xC6\xC7 |0 - \xF7\xC8 |0 - \xF7\xCA |0 - \xF7\xCC |0 - \xF7\xCB |0 - \xF7\xCD |0 - \xCE\xBA |0 - \xF7\xCE |0 - \xC4\xA7 |0 - \xD3\xE3 |0 - \xF6\xCF |0 - \xC2\xB3 |0 - \xF6\xD0 |0 - \xF6\xD1 |0 - \xF6\xD2 |0 - \xF6\xD3 |0 - \xF6\xD4 |0 - \xF6\xD6 |0 - \xB1\xAB |0 - \xF6\xD7 |0 - \xF6\xD8 |0 - \xF6\xD9 |0 - \xF6\xDA |0 - \xF6\xDB |0 - \xF6\xDC |0 - \xF6\xDD |0 - \xF6\xDE |0 - \xCF\xCA |0 - \xF6\xDF |0 - \xF6\xE0 |0 - \xF6\xE1 |0 - \xF6\xE2 |0 - \xF6\xE3 |0 - \xF6\xE4 |0 - \xC0\xF0 |0 - \xF6\xE5 |0 - \xF6\xE6 |0 - \xF6\xE7 |0 - \xF6\xE8 |0 - \xF6\xE9 |0 - \xF6\xEA |0 - \xF6\xEB |0 - \xF6\xEC |0 - \xF6\xED |0 - \xF6\xEE |0 - \xF6\xEF |0 - \xF6\xF0 |0 - \xF6\xF1 |0 - \xF6\xF2 |0 - \xF6\xF3 |0 - \xF6\xF4 |0 - \xBE\xA8 |0 - \xF6\xF5 |0 - \xF6\xF6 |0 - \xF6\xF7 |0 - \xF6\xF8 |0 - \xC8\xFA |0 - \xF6\xF9 |0 - \xF6\xFA |0 - \xF6\xFB |0 - \xF6\xFC |0 - \xF6\xFD |0 - \xF6\xFE |0 - \xF7\xA1 |0 - \xF7\xA2 |0 - \xF7\xA3 |0 - \xF7\xA4 |0 - \xF7\xA5 |0 - \xF7\xA6 |0 - \xF7\xA7 |0 - \xF7\xA8 |0 - \xB1\xEE |0 - \xF7\xA9 |0 - \xF7\xAA |0 - \xF7\xAB |0 - \xF7\xAC |0 - \xF7\xAD |0 - \xC1\xDB |0 - \xF7\xAE |0 - \xF7\xAF |0 - \xC4\xF1 |0 - \xF0\xAF |0 - \xBC\xA6 |0 - \xF0\xB0 |0 - \xC3\xF9 |0 - \xC5\xB8 |0 - \xD1\xBB |0 - \xF0\xB1 |0 - \xF0\xB2 |0 - \xF0\xB3 |0 - \xF0\xB4 |0 - \xF0\xB5 |0 - \xD1\xBC |0 - \xD1\xEC |0 - \xF0\xB7 |0 - \xF0\xB6 |0 - \xD4\xA7 |0 - \xCD\xD2 |0 - \xF0\xB8 |0 - \xF0\xBA |0 - \xF0\xB9 |0 - \xF0\xBB |0 - \xF0\xBC |0 - \xB8\xEB |0 - \xF0\xBD |0 - \xBA\xE8 |0 - \xF0\xBE |0 - \xF0\xBF |0 - \xBE\xE9 |0 - \xF0\xC0 |0 - \xB6\xEC |0 - \xF0\xC1 |0 - \xF0\xC2 |0 - \xF0\xC3 |0 - \xF0\xC4 |0 - \xC8\xB5 |0 - \xF0\xC5 |0 - \xF0\xC6 |0 - \xF0\xC7 |0 - \xC5\xF4 |0 - \xF0\xC8 |0 - \xF0\xC9 |0 - \xF0\xCA |0 - \xF7\xBD |0 - \xF0\xCB |0 - \xF0\xCC |0 - \xF0\xCD |0 - \xF0\xCE |0 - \xF0\xCF |0 - \xBA\xD7 |0 - \xF0\xD0 |0 - \xF0\xD1 |0 - \xF0\xD2 |0 - \xF0\xD3 |0 - \xF0\xD4 |0 - \xF0\xD5 |0 - \xF0\xD6 |0 - \xF0\xD8 |0 - \xD3\xA5 |0 - \xF0\xD7 |0 - \xF0\xD9 |0 - \xF5\xBA |0 - \xC2\xB9 |0 - \xF7\xE4 |0 - \xF7\xE5 |0 - \xF7\xE6 |0 - \xF7\xE7 |0 - \xF7\xE8 |0 - \xC2\xB4 |0 - \xF7\xEA |0 - \xF7\xEB |0 - \xC2\xF3 |0 - \xF4\xF0 |0 - \xF4\xEF |0 - \xC2\xE9 |0 - \xF7\xE1 |0 - \xF7\xE2 |0 - \xBB\xC6 |0 - \xD9\xE4 |0 - \xCA\xF2 |0 - \xC0\xE8 |0 - \xF0\xA4 |0 - \xBA\xDA |0 - \xC7\xAD |0 - \xC4\xAC |0 - \xF7\xEC |0 - \xF7\xED |0 - \xF7\xEE |0 - \xF7\xF0 |0 - \xF7\xEF |0 - \xF7\xF1 |0 - \xF7\xF4 |0 - \xF7\xF3 |0 - \xF7\xF2 |0 - \xF7\xF5 |0 - \xF7\xF6 |0 - \xED\xE9 |0 - \xED\xEA |0 - \xED\xEB |0 - \xF6\xBC |0 - \xF6\xBD |0 - \xF6\xBE |0 - \xB6\xA6 |0 - \xD8\xBE |0 - \xB9\xC4 |0 - \xD8\xBB |0 - \xDC\xB1 |0 - \xCA\xF3 |0 - \xF7\xF7 |0 - \xF7\xF8 |0 - \xF7\xF9 |0 - \xF7\xFB |0 - \xF7\xFA |0 - \xB1\xC7 |0 - \xF7\xFC |0 - \xF7\xFD |0 - \xF7\xFE |0 - \xC6\xEB |0 - \xEC\xB4 |0 - \xB3\xDD |0 - \xF6\xB3 |0 - \xF6\xB4 |0 - \xC1\xE4 |0 - \xF6\xB5 |0 - \xF6\xB6 |0 - \xF6\xB7 |0 - \xF6\xB8 |0 - \xF6\xB9 |0 - \xF6\xBA |0 - \xC8\xA3 |0 - \xF6\xBB |0 - \xC1\xFA |0 - \xB9\xA8 |0 - \xED\xE8 |0 - \xB9\xEA |0 - \xD9\xDF |0 - \x8D\xA1 |0 - \x8D\xA2 |0 - \x8D\xA3 |0 - \x8D\xA4 |0 - \x8D\xA5 |0 - \x8D\xA6 |0 - \x8D\xA7 |0 - \x8D\xA8 |0 - \x8D\xA9 |0 - \x8D\xAA |0 - \x8D\xAB |0 - \x8D\xAC |0 - \x8D\xAD |0 - \x8D\xAE |0 - \x8D\xAF |0 - \x8D\xB0 |0 - \x8D\xB1 |0 - \x8D\xB2 |0 - \x8D\xB3 |0 - \x8D\xB4 |0 - \x8D\xB5 |0 - \x8D\xB6 |0 - \x8D\xB7 |0 - \x8D\xB8 |0 - \x8D\xB9 |0 - \x8D\xBA |0 - \x8D\xBB |0 - \x8D\xBC |0 - \x8D\xBD |0 - \x8D\xBE |0 - \x8D\xBF |0 - \x8D\xC0 |0 - \x8D\xC1 |0 - \x8D\xC2 |0 - \x8D\xC3 |0 - \x8D\xC4 |0 - \x8D\xC5 |0 - \x8D\xC6 |0 - \x8D\xC7 |0 - \x8D\xC8 |0 - \x8D\xC9 |0 - \x8D\xCA |0 - \x8D\xCB |0 - \x8D\xCC |0 - \x8D\xCD |0 - \x8D\xCE |0 - \x8D\xCF |0 - \x8D\xD0 |0 - \x8D\xD1 |0 - \x8D\xD2 |0 - \x8D\xD3 |0 - \x8D\xD4 |0 - \x8D\xD5 |0 - \x8D\xD6 |0 - \x8D\xD7 |0 - \x8D\xD8 |0 - \x8D\xD9 |0 - \x8D\xDA |0 - \x8D\xDB |0 - \x8D\xDC |0 - \x8D\xDD |0 - \x8D\xDE |0 - \x8D\xDF |0 - \x8D\xE0 |0 - \x8D\xE1 |0 - \x8D\xE2 |0 - \x8D\xE3 |0 - \x8D\xE4 |0 - \x8D\xE5 |0 - \x8D\xE6 |0 - \x8D\xE7 |0 - \x8D\xE8 |0 - \x8D\xE9 |0 - \x8D\xEA |0 - \x8D\xEB |0 - \x8D\xEC |0 - \x8D\xED |0 - \x8D\xEE |0 - \x8D\xEF |0 - \x8D\xF0 |0 - \x8D\xF1 |0 - \x8D\xF2 |0 - \x8D\xF3 |0 - \x8D\xF4 |0 - \x8D\xF5 |0 - \x8D\xF6 |0 - \x8D\xF7 |0 - \x8D\xF8 |0 - \x8D\xF9 |0 - \x8D\xFA |0 - \x8D\xFB |0 - \x8D\xFC |0 - \x8D\xFD |0 - \x8D\xFE |0 - \x8E\xA1 |0 - \x8E\xA2 |0 - \x8E\xA3 |0 - \x8E\xA4 |0 - \x8E\xA5 |0 - \x8E\xA6 |0 - \x8E\xA7 |0 - \x8E\xA8 |0 - \x8E\xA9 |0 - \x8E\xAA |0 - \x8E\xAB |0 - \x8E\xAC |0 - \x8E\xAD |0 - \x8E\xAE |0 - \x8E\xAF |0 - \x8E\xB0 |0 - \x8E\xB1 |0 - \x8E\xB2 |0 - \x8E\xB3 |0 - \x8E\xB4 |0 - \x8E\xB5 |0 - \x8E\xB6 |0 - \x8E\xB7 |0 - \x8E\xB8 |0 - \x8E\xB9 |0 - \x8E\xBA |0 - \x8E\xBB |0 - \x8E\xBC |0 - \x8E\xBD |0 - \x8E\xBE |0 - \x8E\xBF |0 - \x8E\xC0 |0 - \x8E\xC1 |0 - \x8E\xC2 |0 - \x8E\xC3 |0 - \x8E\xC4 |0 - \x8E\xC5 |0 - \x8E\xC6 |0 - \x8E\xC7 |0 - \x8E\xC8 |0 - \x8E\xC9 |0 - \x8E\xCA |0 - \x8E\xCB |0 - \x8E\xCC |0 - \x8E\xCD |0 - \x8E\xCE |0 - \x8E\xCF |0 - \x8E\xD0 |0 - \x8E\xD1 |0 - \x8E\xD2 |0 - \x8E\xD3 |0 - \x8E\xD4 |0 - \x8E\xD5 |0 - \x8E\xD6 |0 - \x8E\xD7 |0 - \x8E\xD8 |0 - \x8E\xD9 |0 - \x8E\xDA |0 - \x8E\xDB |0 - \x8E\xDC |0 - \x8E\xDD |0 - \x8E\xDE |0 - \x8E\xDF |0 - \x8E\xE0 |0 - \x8E\xE1 |0 - \x8E\xE2 |0 - \x8E\xE3 |0 - \x8E\xE4 |0 - \x8E\xE5 |0 - \x8E\xE6 |0 - \x8E\xE7 |0 - \x8E\xE8 |0 - \x8E\xE9 |0 - \x8E\xEA |0 - \x8E\xEB |0 - \x8E\xEC |0 - \x8E\xED |0 - \x8E\xEE |0 - \x8E\xEF |0 - \x8E\xF0 |0 - \x8E\xF1 |0 - \x8E\xF2 |0 - \x8E\xF3 |0 - \x8E\xF4 |0 - \x8E\xF5 |0 - \x8E\xF6 |0 - \x8E\xF7 |0 - \x8E\xF8 |0 - \x8E\xF9 |0 - \x8E\xFA |0 - \x8E\xFB |0 - \x8E\xFC |0 - \x8E\xFD |0 - \x8E\xFE |0 - \x8F\xA1 |0 - \x8F\xA2 |0 - \x8F\xA3 |0 - \x8F\xA4 |0 - \x8F\xA5 |0 - \x8F\xA6 |0 - \x8F\xA7 |0 - \x8F\xA8 |0 - \x8F\xA9 |0 - \x8F\xAA |0 - \x8F\xAB |0 - \x8F\xAC |0 - \x8F\xAD |0 - \x8F\xAE |0 - \x8F\xAF |0 - \x8F\xB0 |0 - \x8F\xB1 |0 - \x8F\xB2 |0 - \x8F\xB3 |0 - \x8F\xB4 |0 - \x8F\xB5 |0 - \x8F\xB6 |0 - \x8F\xB7 |0 - \x8F\xB8 |0 - \x8F\xB9 |0 - \x8F\xBA |0 - \x8F\xBB |0 - \x8F\xBC |0 - \x8F\xBD |0 - \x8F\xBE |0 - \x8F\xBF |0 - \x8F\xC0 |0 - \x8F\xC1 |0 - \x8F\xC2 |0 - \x8F\xC3 |0 - \x8F\xC4 |0 - \x8F\xC5 |0 - \x8F\xC6 |0 - \x8F\xC7 |0 - \x8F\xC8 |0 - \x8F\xC9 |0 - \x8F\xCA |0 - \x8F\xCB |0 - \x8F\xCC |0 - \x8F\xCD |0 - \x8F\xCE |0 - \x8F\xCF |0 - \x8F\xD0 |0 - \x8F\xD1 |0 - \x8F\xD2 |0 - \x8F\xD3 |0 - \x8F\xD4 |0 - \x8F\xD5 |0 - \x8F\xD6 |0 - \x8F\xD7 |0 - \x8F\xD8 |0 - \x8F\xD9 |0 - \x8F\xDA |0 - \x8F\xDB |0 - \x8F\xDC |0 - \x8F\xDD |0 - \x8F\xDE |0 - \x8F\xDF |0 - \x8F\xE0 |0 - \x8F\xE1 |0 - \x8F\xE2 |0 - \x8F\xE3 |0 - \x8F\xE4 |0 - \x8F\xE5 |0 - \x8F\xE6 |0 - \x8F\xE7 |0 - \x8F\xE8 |0 - \x8F\xE9 |0 - \x8F\xEA |0 - \x8F\xEB |0 - \x8F\xEC |0 - \x8F\xED |0 - \x8F\xEE |0 - \x8F\xEF |0 - \x8F\xF0 |0 - \x8F\xF1 |0 - \x8F\xF2 |0 - \x8F\xF3 |0 - \x8F\xF4 |0 - \x8F\xF5 |0 - \x8F\xF6 |0 - \x8F\xF7 |0 - \x8F\xF8 |0 - \x8F\xF9 |0 - \x8F\xFA |0 - \x8F\xFB |0 - \x8F\xFC |0 - \x8F\xFD |0 - \x8F\xFE |0 - \x90\xA1 |0 - \x90\xA2 |0 - \x90\xA3 |0 - \x90\xA4 |0 - \x90\xA5 |0 - \x90\xA6 |0 - \x90\xA7 |0 - \x90\xA8 |0 - \x90\xA9 |0 - \x90\xAA |0 - \x90\xAB |0 - \x90\xAC |0 - \x90\xAD |0 - \x90\xAE |0 - \x90\xAF |0 - \x90\xB0 |0 - \x90\xB1 |0 - \x90\xB2 |0 - \x90\xB3 |0 - \x90\xB4 |0 - \x90\xB5 |0 - \x90\xB6 |0 - \x90\xB7 |0 - \x90\xB8 |0 - \x90\xB9 |0 - \x90\xBA |0 - \x90\xBB |0 - \x90\xBC |0 - \x90\xBD |0 - \x90\xBE |0 - \x90\xBF |0 - \x90\xC0 |0 - \x90\xC1 |0 - \x90\xC2 |0 - \x90\xC3 |0 - \x90\xC4 |0 - \x90\xC5 |0 - \x90\xC6 |0 - \x90\xC7 |0 - \x90\xC8 |0 - \x90\xC9 |0 - \x90\xCA |0 - \x90\xCB |0 - \x90\xCC |0 - \x90\xCD |0 - \x90\xCE |0 - \x90\xCF |0 - \x90\xD0 |0 - \x90\xD1 |0 - \x90\xD2 |0 - \x90\xD3 |0 - \x90\xD4 |0 - \x90\xD5 |0 - \x90\xD6 |0 - \x90\xD7 |0 - \x90\xD8 |0 - \x90\xD9 |0 - \x90\xDA |0 - \x90\xDB |0 - \x90\xDC |0 - \x90\xDD |0 - \x90\xDE |0 - \x90\xDF |0 - \x90\xE0 |0 - \x90\xE1 |0 - \x90\xE2 |0 - \x90\xE3 |0 - \x90\xE4 |0 - \x90\xE5 |0 - \x90\xE6 |0 - \x90\xE7 |0 - \x90\xE8 |0 - \x90\xE9 |0 - \x90\xEA |0 - \x90\xEB |0 - \x90\xEC |0 - \x90\xED |0 - \x90\xEE |0 - \x90\xEF |0 - \x90\xF0 |0 - \x90\xF1 |0 - \x90\xF2 |0 - \x90\xF3 |0 - \x90\xF4 |0 - \x90\xF5 |0 - \x90\xF6 |0 - \x90\xF7 |0 - \x90\xF8 |0 - \x90\xF9 |0 - \x90\xFA |0 - \x90\xFB |0 - \x90\xFC |0 - \x90\xFD |0 - \x90\xFE |0 - \x91\xA1 |0 - \x91\xA2 |0 - \x91\xA3 |0 - \x91\xA4 |0 - \x91\xA5 |0 - \x91\xA6 |0 - \x91\xA7 |0 - \x91\xA8 |0 - \x91\xA9 |0 - \x91\xAA |0 - \x91\xAB |0 - \x91\xAC |0 - \x91\xAD |0 - \x91\xAE |0 - \x91\xAF |0 - \x91\xB0 |0 - \x91\xB1 |0 - \x91\xB2 |0 - \x91\xB3 |0 - \x91\xB4 |0 - \x91\xB5 |0 - \x91\xB6 |0 - \x91\xB7 |0 - \x91\xB8 |0 - \x91\xB9 |0 - \x91\xBA |0 - \x91\xBB |0 - \x91\xBC |0 - \x91\xBD |0 - \x91\xBE |0 - \x91\xBF |0 - \x91\xC0 |0 - \x91\xC1 |0 - \x91\xC2 |0 - \x91\xC3 |0 - \x91\xC4 |0 - \x91\xC5 |0 - \x91\xC6 |0 - \x91\xC7 |0 - \x91\xC8 |0 - \x91\xC9 |0 - \x91\xCA |0 - \x91\xCB |0 - \x91\xCC |0 - \x91\xCD |0 - \x91\xCE |0 - \x91\xCF |0 - \x91\xD0 |0 - \x91\xD1 |0 - \x91\xD2 |0 - \x91\xD3 |0 - \x91\xD4 |0 - \x91\xD5 |0 - \x91\xD6 |0 - \x91\xD7 |0 - \x91\xD8 |0 - \x91\xD9 |0 - \x91\xDA |0 - \x91\xDB |0 - \x91\xDC |0 - \x91\xDD |0 - \x91\xDE |0 - \x91\xDF |0 - \x91\xE0 |0 - \x91\xE1 |0 - \x91\xE2 |0 - \x91\xE3 |0 - \x91\xE4 |0 - \x91\xE5 |0 - \x91\xE6 |0 - \x91\xE7 |0 - \x91\xE8 |0 - \x91\xE9 |0 - \x91\xEA |0 - \x91\xEB |0 - \x91\xEC |0 - \x91\xED |0 - \x91\xEE |0 - \x91\xEF |0 - \x91\xF0 |0 - \x91\xF1 |0 - \x91\xF2 |0 - \x91\xF3 |0 - \x91\xF4 |0 - \x91\xF5 |0 - \x91\xF6 |0 - \x91\xF7 |0 - \x91\xF8 |0 - \x91\xF9 |0 - \x91\xFA |0 - \x91\xFB |0 - \x91\xFC |0 - \x91\xFD |0 - \x91\xFE |0 - \x92\xA1 |0 - \x92\xA2 |0 - \x92\xA3 |0 - \x92\xA4 |0 - \x92\xA5 |0 - \x92\xA6 |0 - \x92\xA7 |0 - \x92\xA8 |0 - \x92\xA9 |0 - \x92\xAA |0 - \x92\xAB |0 - \x92\xAC |0 - \x92\xAD |0 - \x92\xAE |0 - \x92\xAF |0 - \x92\xB0 |0 - \x92\xB1 |0 - \x92\xB2 |0 - \x92\xB3 |0 - \x92\xB4 |0 - \x92\xB5 |0 - \x92\xB6 |0 - \x92\xB7 |0 - \x92\xB8 |0 - \x92\xB9 |0 - \x92\xBA |0 - \x92\xBB |0 - \x92\xBC |0 - \x92\xBD |0 - \x92\xBE |0 - \x92\xBF |0 - \x92\xC0 |0 - \x92\xC1 |0 - \x92\xC2 |0 - \x92\xC3 |0 - \x92\xC4 |0 - \x92\xC5 |0 - \x92\xC6 |0 - \x92\xC7 |0 - \x92\xC8 |0 - \x92\xC9 |0 - \x92\xCA |0 - \x92\xCB |0 - \x92\xCC |0 - \x92\xCD |0 - \x92\xCE |0 - \x92\xCF |0 - \x92\xD0 |0 - \x92\xD1 |0 - \x92\xD2 |0 - \x92\xD3 |0 - \x92\xD4 |0 - \x92\xD5 |0 - \x92\xD6 |0 - \x92\xD7 |0 - \x92\xD8 |0 - \x92\xD9 |0 - \x92\xDA |0 - \x92\xDB |0 - \x92\xDC |0 - \x92\xDD |0 - \x92\xDE |0 - \x92\xDF |0 - \x92\xE0 |0 - \x92\xE1 |0 - \x92\xE2 |0 - \x92\xE3 |0 - \x92\xE4 |0 - \x92\xE5 |0 - \x92\xE6 |0 - \x92\xE7 |0 - \x92\xE8 |0 - \x92\xE9 |0 - \x92\xEA |0 - \x92\xEB |0 - \x92\xEC |0 - \x92\xED |0 - \x92\xEE |0 - \x92\xEF |0 - \x92\xF0 |0 - \x92\xF1 |0 - \x92\xF2 |0 - \x92\xF3 |0 - \x92\xF4 |0 - \x92\xF5 |0 - \x92\xF6 |0 - \x92\xF7 |0 - \x92\xF8 |0 - \x92\xF9 |0 - \x92\xFA |0 - \x92\xFB |0 - \x92\xFC |0 - \x92\xFD |0 - \x92\xFE |0 - \x93\xA1 |0 - \x93\xA2 |0 - \x93\xA3 |0 - \x93\xA4 |0 - \x93\xA5 |0 - \x93\xA6 |0 - \x93\xA7 |0 - \x93\xA8 |0 - \x93\xA9 |0 - \x93\xAA |0 - \x93\xAB |0 - \x93\xAC |0 - \x93\xAD |0 - \x93\xAE |0 - \x93\xAF |0 - \x93\xB0 |0 - \x93\xB1 |0 - \x93\xB2 |0 - \x93\xB3 |0 - \x93\xB4 |0 - \x93\xB5 |0 - \x93\xB6 |0 - \x93\xB7 |0 - \x93\xB8 |0 - \x93\xB9 |0 - \x93\xBA |0 - \x93\xBB |0 - \x93\xBC |0 - \x93\xBD |0 - \x93\xBE |0 - \x93\xBF |0 - \x93\xC0 |0 - \x93\xC1 |0 - \x93\xC2 |0 - \x93\xC3 |0 - \x93\xC4 |0 - \x93\xC5 |0 - \x93\xC6 |0 - \x93\xC7 |0 - \x93\xC8 |0 - \x93\xC9 |0 - \x93\xCA |0 - \x93\xCB |0 - \x93\xCC |0 - \x93\xCD |0 - \x93\xCE |0 - \x93\xCF |0 - \x93\xD0 |0 - \x93\xD1 |0 - \x93\xD2 |0 - \x93\xD3 |0 - \x93\xD4 |0 - \x93\xD5 |0 - \x93\xD6 |0 - \x93\xD7 |0 - \x93\xD8 |0 - \x93\xD9 |0 - \x93\xDA |0 - \x93\xDB |0 - \x93\xDC |0 - \x93\xDD |0 - \x93\xDE |0 - \x93\xDF |0 - \x93\xE0 |0 - \x93\xE1 |0 - \x93\xE2 |0 - \x93\xE3 |0 - \x93\xE4 |0 - \x93\xE5 |0 - \x93\xE6 |0 - \x93\xE7 |0 - \x93\xE8 |0 - \x93\xE9 |0 - \x93\xEA |0 - \x93\xEB |0 - \x93\xEC |0 - \x93\xED |0 - \x93\xEE |0 - \x93\xEF |0 - \x93\xF0 |0 - \x93\xF1 |0 - \x93\xF2 |0 - \x93\xF3 |0 - \x93\xF4 |0 - \x93\xF5 |0 - \x93\xF6 |0 - \x93\xF7 |0 - \x93\xF8 |0 - \x93\xF9 |0 - \x93\xFA |0 - \x93\xFB |0 - \x93\xFC |0 - \x93\xFD |0 - \x93\xFE |0 - \x94\xA1 |0 - \x94\xA2 |0 - \x94\xA3 |0 - \x94\xA4 |0 - \x94\xA5 |0 - \x94\xA6 |0 - \x94\xA7 |0 - \x94\xA8 |0 - \x94\xA9 |0 - \x94\xAA |0 - \x94\xAB |0 - \x94\xAC |0 - \x94\xAD |0 - \x94\xAE |0 - \x94\xAF |0 - \x94\xB0 |0 - \x94\xB1 |0 - \x94\xB2 |0 - \x94\xB3 |0 - \x94\xB4 |0 - \x94\xB5 |0 - \x94\xB6 |0 - \x94\xB7 |0 - \x94\xB8 |0 - \x94\xB9 |0 - \x94\xBA |0 - \x94\xBB |0 - \x94\xBC |0 - \x94\xBD |0 - \x94\xBE |0 - \x94\xBF |0 - \x94\xC0 |0 - \x94\xC1 |0 - \x94\xC2 |0 - \x94\xC3 |0 - \x94\xC4 |0 - \x94\xC5 |0 - \x94\xC6 |0 - \x94\xC7 |0 - \x94\xC8 |0 - \x94\xC9 |0 - \x94\xCA |0 - \x94\xCB |0 - \x94\xCC |0 - \x94\xCD |0 - \x94\xCE |0 - \x94\xCF |0 - \x94\xD0 |0 - \x94\xD1 |0 - \x94\xD2 |0 - \x94\xD3 |0 - \x94\xD4 |0 - \x94\xD5 |0 - \x94\xD6 |0 - \x94\xD7 |0 - \x94\xD8 |0 - \x94\xD9 |0 - \x94\xDA |0 - \x94\xDB |0 - \x94\xDC |0 - \x94\xDD |0 - \x94\xDE |0 - \x94\xDF |0 - \x94\xE0 |0 - \x94\xE1 |0 - \x94\xE2 |0 - \x94\xE3 |0 - \x94\xE4 |0 - \x94\xE5 |0 - \x94\xE6 |0 - \x94\xE7 |0 - \x94\xE8 |0 - \x94\xE9 |0 - \x94\xEA |0 - \x94\xEB |0 - \x94\xEC |0 - \x94\xED |0 - \x94\xEE |0 - \x94\xEF |0 - \x94\xF0 |0 - \x94\xF1 |0 - \x94\xF2 |0 - \x94\xF3 |0 - \x94\xF4 |0 - \x94\xF5 |0 - \x94\xF6 |0 - \x94\xF7 |0 - \x94\xF8 |0 - \x94\xF9 |0 - \x94\xFA |0 - \x94\xFB |0 - \x94\xFC |0 - \x94\xFD |0 - \x94\xFE |0 - \x95\xA1 |0 - \x95\xA2 |0 - \x95\xA3 |0 - \x95\xA4 |0 - \x95\xA5 |0 - \x95\xA6 |0 - \x95\xA7 |0 - \x95\xA8 |0 - \x95\xA9 |0 - \x95\xAA |0 - \x95\xAB |0 - \x95\xAC |0 - \x95\xAD |0 - \x95\xAE |0 - \x95\xAF |0 - \x95\xB0 |0 - \x95\xB1 |0 - \x95\xB2 |0 - \x95\xB3 |0 - \x95\xB4 |0 - \x95\xB5 |0 - \x95\xB6 |0 - \x95\xB7 |0 - \x95\xB8 |0 - \x95\xB9 |0 - \x95\xBA |0 - \x95\xBB |0 - \x95\xBC |0 - \x95\xBD |0 - \x95\xBE |0 - \x95\xBF |0 - \x95\xC0 |0 - \x95\xC1 |0 - \x95\xC2 |0 - \x95\xC3 |0 - \x95\xC4 |0 - \x95\xC5 |0 - \x95\xC6 |0 - \x95\xC7 |0 - \x95\xC8 |0 - \x95\xC9 |0 - \x95\xCA |0 - \x95\xCB |0 - \x95\xCC |0 - \x95\xCD |0 - \x95\xCE |0 - \x95\xCF |0 - \x95\xD0 |0 - \x95\xD1 |0 - \x95\xD2 |0 - \x95\xD3 |0 - \x95\xD4 |0 - \x95\xD5 |0 - \x95\xD6 |0 - \x95\xD7 |0 - \x95\xD8 |0 - \x95\xD9 |0 - \x95\xDA |0 - \x95\xDB |0 - \x95\xDC |0 - \x95\xDD |0 - \x95\xDE |0 - \x95\xDF |0 - \x95\xE0 |0 - \x95\xE1 |0 - \x95\xE2 |0 - \x95\xE3 |0 - \x95\xE4 |0 - \x95\xE5 |0 - \x95\xE6 |0 - \x95\xE7 |0 - \x95\xE8 |0 - \x95\xE9 |0 - \x95\xEA |0 - \x95\xEB |0 - \x95\xEC |0 - \x95\xED |0 - \x95\xEE |0 - \x95\xEF |0 - \x95\xF0 |0 - \x95\xF1 |0 - \x95\xF2 |0 - \x95\xF3 |0 - \x95\xF4 |0 - \x95\xF5 |0 - \x95\xF6 |0 - \x95\xF7 |0 - \x95\xF8 |0 - \x95\xF9 |0 - \x95\xFA |0 - \x95\xFB |0 - \x95\xFC |0 - \x95\xFD |0 - \x95\xFE |0 - \x96\xA1 |0 - \x96\xA2 |0 - \x96\xA3 |0 - \x96\xA4 |0 - \x96\xA5 |0 - \x96\xA6 |0 - \x96\xA7 |0 - \x96\xA8 |0 - \x96\xA9 |0 - \x96\xAA |0 - \x96\xAB |0 - \x96\xAC |0 - \x96\xAD |0 - \x96\xAE |0 - \x96\xAF |0 - \x96\xB0 |0 - \x96\xB1 |0 - \x96\xB2 |0 - \x96\xB3 |0 - \x96\xB4 |0 - \x96\xB5 |0 - \x96\xB6 |0 - \x96\xB7 |0 - \x96\xB8 |0 - \x96\xB9 |0 - \x96\xBA |0 - \x96\xBB |0 - \x96\xBC |0 - \x96\xBD |0 - \x96\xBE |0 - \x96\xBF |0 - \x96\xC0 |0 - \x96\xC1 |0 - \x96\xC2 |0 - \x96\xC3 |0 - \x96\xC4 |0 - \x96\xC5 |0 - \x96\xC6 |0 - \x96\xC7 |0 - \x96\xC8 |0 - \x96\xC9 |0 - \x96\xCA |0 - \x96\xCB |0 - \x96\xCC |0 - \x96\xCD |0 - \x96\xCE |0 - \x96\xCF |0 - \x96\xD0 |0 - \x96\xD1 |0 - \x96\xD2 |0 - \x96\xD3 |0 - \x96\xD4 |0 - \x96\xD5 |0 - \x96\xD6 |0 - \x96\xD7 |0 - \x96\xD8 |0 - \x96\xD9 |0 - \x96\xDA |0 - \x96\xDB |0 - \x96\xDC |0 - \x96\xDD |0 - \x96\xDE |0 - \x96\xDF |0 - \x96\xE0 |0 - \x96\xE1 |0 - \x96\xE2 |0 - \x96\xE3 |0 - \x96\xE4 |0 - \x96\xE5 |0 - \x96\xE6 |0 - \x96\xE7 |0 - \x96\xE8 |0 - \x96\xE9 |0 - \x96\xEA |0 - \x96\xEB |0 - \x96\xEC |0 - \x96\xED |0 - \x96\xEE |0 - \x96\xEF |0 - \x96\xF0 |0 - \x96\xF1 |0 - \x96\xF2 |0 - \x96\xF3 |0 - \x96\xF4 |0 - \x96\xF5 |0 - \x96\xF6 |0 - \x96\xF7 |0 - \x96\xF8 |0 - \x96\xF9 |0 - \x96\xFA |0 - \x96\xFB |0 - \x96\xFC |0 - \x96\xFD |0 - \x96\xFE |0 - \x97\xA1 |0 - \x97\xA2 |0 - \x97\xA3 |0 - \x97\xA4 |0 - \x97\xA5 |0 - \x97\xA6 |0 - \x97\xA7 |0 - \x97\xA8 |0 - \x97\xA9 |0 - \x97\xAA |0 - \x97\xAB |0 - \x97\xAC |0 - \x97\xAD |0 - \x97\xAE |0 - \x97\xAF |0 - \x97\xB0 |0 - \x97\xB1 |0 - \x97\xB2 |0 - \x97\xB3 |0 - \x97\xB4 |0 - \x97\xB5 |0 - \x97\xB6 |0 - \x97\xB7 |0 - \x97\xB8 |0 - \x97\xB9 |0 - \x97\xBA |0 - \x97\xBB |0 - \x97\xBC |0 - \x97\xBD |0 - \x97\xBE |0 - \x97\xBF |0 - \x97\xC0 |0 - \x97\xC1 |0 - \x97\xC2 |0 - \x97\xC3 |0 - \x97\xC4 |0 - \x97\xC5 |0 - \x97\xC6 |0 - \x97\xC7 |0 - \x97\xC8 |0 - \x97\xC9 |0 - \x97\xCA |0 - \x97\xCB |0 - \x97\xCC |0 - \x97\xCD |0 - \x97\xCE |0 - \x97\xCF |0 - \x97\xD0 |0 - \x97\xD1 |0 - \x97\xD2 |0 - \x97\xD3 |0 - \x97\xD4 |0 - \x97\xD5 |0 - \x97\xD6 |0 - \x97\xD7 |0 - \x97\xD8 |0 - \x97\xD9 |0 - \x97\xDA |0 - \x97\xDB |0 - \x97\xDC |0 - \x97\xDD |0 - \x97\xDE |0 - \x97\xDF |0 - \x97\xE0 |0 - \x97\xE1 |0 - \x97\xE2 |0 - \x97\xE3 |0 - \x97\xE4 |0 - \x97\xE5 |0 - \x97\xE6 |0 - \x97\xE7 |0 - \x97\xE8 |0 - \x97\xE9 |0 - \x97\xEA |0 - \x97\xEB |0 - \x97\xEC |0 - \x97\xED |0 - \x97\xEE |0 - \x97\xEF |0 - \x97\xF0 |0 - \x97\xF1 |0 - \x97\xF2 |0 - \x97\xF3 |0 - \x97\xF4 |0 - \x97\xF5 |0 - \x97\xF6 |0 - \x97\xF7 |0 - \x97\xF8 |0 - \x97\xF9 |0 - \x97\xFA |0 - \x97\xFB |0 - \x97\xFC |0 - \x97\xFD |0 - \x97\xFE |0 - \x98\xA1 |0 - \x98\xA2 |0 - \x98\xA3 |0 - \x98\xA4 |0 - \x98\xA5 |0 - \x98\xA6 |0 - \x98\xA7 |0 - \x98\xA8 |0 - \x98\xA9 |0 - \x98\xAA |0 - \x98\xAB |0 - \x98\xAC |0 - \x98\xAD |0 - \x98\xAE |0 - \x98\xAF |0 - \x98\xB0 |0 - \x98\xB1 |0 - \x98\xB2 |0 - \x98\xB3 |0 - \x98\xB4 |0 - \x98\xB5 |0 - \x98\xB6 |0 - \x98\xB7 |0 - \x98\xB8 |0 - \x98\xB9 |0 - \x98\xBA |0 - \x98\xBB |0 - \x98\xBC |0 - \x98\xBD |0 - \x98\xBE |0 - \x98\xBF |0 - \x98\xC0 |0 - \x98\xC1 |0 - \x98\xC2 |0 - \x98\xC3 |0 - \x98\xC4 |0 - \x98\xC5 |0 - \x98\xC6 |0 - \x98\xC7 |0 - \x98\xC8 |0 - \x98\xC9 |0 - \x98\xCA |0 - \x98\xCB |0 - \x98\xCC |0 - \x98\xCD |0 - \x98\xCE |0 - \x98\xCF |0 - \x98\xD0 |0 - \x98\xD1 |0 - \x98\xD2 |0 - \x98\xD3 |0 - \x98\xD4 |0 - \x98\xD5 |0 - \x98\xD6 |0 - \x98\xD7 |0 - \x98\xD8 |0 - \x98\xD9 |0 - \x98\xDA |0 - \x98\xDB |0 - \x98\xDC |0 - \x98\xDD |0 - \x98\xDE |0 - \x98\xDF |0 - \x98\xE0 |0 - \x98\xE1 |0 - \x98\xE2 |0 - \x98\xE3 |0 - \x98\xE4 |0 - \x98\xE5 |0 - \x98\xE6 |0 - \x98\xE7 |0 - \x98\xE8 |0 - \x98\xE9 |0 - \x98\xEA |0 - \x98\xEB |0 - \x98\xEC |0 - \x98\xED |0 - \x98\xEE |0 - \x98\xEF |0 - \x98\xF0 |0 - \x98\xF1 |0 - \x98\xF2 |0 - \x98\xF3 |0 - \x98\xF4 |0 - \x98\xF5 |0 - \x98\xF6 |0 - \x98\xF7 |0 - \x98\xF8 |0 - \x98\xF9 |0 - \x98\xFA |0 - \x98\xFB |0 - \x98\xFC |0 - \x98\xFD |0 - \x98\xFE |0 - \x99\xA1 |0 - \x99\xA2 |0 - \x99\xA3 |0 - \x99\xA4 |0 - \x99\xA5 |0 - \x99\xA6 |0 - \x99\xA7 |0 - \x99\xA8 |0 - \x99\xA9 |0 - \x99\xAA |0 - \x99\xAB |0 - \x99\xAC |0 - \x99\xAD |0 - \x99\xAE |0 - \x99\xAF |0 - \x99\xB0 |0 - \x99\xB1 |0 - \x99\xB2 |0 - \x99\xB3 |0 - \x99\xB4 |0 - \x99\xB5 |0 - \x99\xB6 |0 - \x99\xB7 |0 - \x99\xB8 |0 - \x99\xB9 |0 - \x99\xBA |0 - \x99\xBB |0 - \x99\xBC |0 - \x99\xBD |0 - \x99\xBE |0 - \x99\xBF |0 - \x99\xC0 |0 - \x99\xC1 |0 - \x99\xC2 |0 - \x99\xC3 |0 - \x99\xC4 |0 - \x99\xC5 |0 - \x99\xC6 |0 - \x99\xC7 |0 - \x99\xC8 |0 - \x99\xC9 |0 - \x99\xCA |0 - \x99\xCB |0 - \x99\xCC |0 - \x99\xCD |0 - \x99\xCE |0 - \x99\xCF |0 - \x99\xD0 |0 - \x99\xD1 |0 - \x99\xD2 |0 - \x99\xD3 |0 - \x99\xD4 |0 - \x99\xD5 |0 - \x99\xD6 |0 - \x99\xD7 |0 - \x99\xD8 |0 - \x99\xD9 |0 - \x99\xDA |0 - \x99\xDB |0 - \x99\xDC |0 - \x99\xDD |0 - \x99\xDE |0 - \x99\xDF |0 - \x99\xE0 |0 - \x99\xE1 |0 - \x99\xE2 |0 - \x99\xE3 |0 - \x99\xE4 |0 - \x99\xE5 |0 - \x99\xE6 |0 - \x99\xE7 |0 - \x99\xE8 |0 - \x99\xE9 |0 - \x99\xEA |0 - \x99\xEB |0 - \x99\xEC |0 - \x99\xED |0 - \x99\xEE |0 - \x99\xEF |0 - \x99\xF0 |0 - \x99\xF1 |0 - \x99\xF2 |0 - \x99\xF3 |0 - \x99\xF4 |0 - \x99\xF5 |0 - \x99\xF6 |0 - \x99\xF7 |0 - \x99\xF8 |0 - \x99\xF9 |0 - \x99\xFA |0 - \x99\xFB |0 - \x99\xFC |0 - \x99\xFD |0 - \x99\xFE |0 - \x9A\xA1 |0 - \x9A\xA2 |0 - \x9A\xA3 |0 - \x9A\xA4 |0 - \x9A\xA5 |0 - \x9A\xA6 |0 - \x9A\xA7 |0 - \x9A\xA8 |0 - \x9A\xA9 |0 - \x9A\xAA |0 - \x9A\xAB |0 - \x9A\xAC |0 - \x9A\xAD |0 - \x9A\xAE |0 - \x9A\xAF |0 - \x9A\xB0 |0 - \x9A\xB1 |0 - \x9A\xB2 |0 - \x9A\xB3 |0 - \x9A\xB4 |0 - \x9A\xB5 |0 - \x9A\xB6 |0 - \x9A\xB7 |0 - \x9A\xB8 |0 - \x9A\xB9 |0 - \x9A\xBA |0 - \x9A\xBB |0 - \x9A\xBC |0 - \x9A\xBD |0 - \x9A\xBE |0 - \x9A\xBF |0 - \x9A\xC0 |0 - \x9A\xC1 |0 - \x9A\xC2 |0 - \x9A\xC3 |0 - \x9A\xC4 |0 - \x9A\xC5 |0 - \x9A\xC6 |0 - \x9A\xC7 |0 - \x9A\xC8 |0 - \x9A\xC9 |0 - \x9A\xCA |0 - \x9A\xCB |0 - \x9A\xCC |0 - \x9A\xCD |0 - \x9A\xCE |0 - \x9A\xCF |0 - \x9A\xD0 |0 - \x9A\xD1 |0 - \x9A\xD2 |0 - \x9A\xD3 |0 - \x9A\xD4 |0 - \x9A\xD5 |0 - \x9A\xD6 |0 - \x9A\xD7 |0 - \x9A\xD8 |0 - \x9A\xD9 |0 - \x9A\xDA |0 - \x9A\xDB |0 - \x9A\xDC |0 - \x9A\xDD |0 - \x9A\xDE |0 - \x9A\xDF |0 - \x9A\xE0 |0 - \x9A\xE1 |0 - \x9A\xE2 |0 - \x9A\xE3 |0 - \x9A\xE4 |0 - \x9A\xE5 |0 - \x9A\xE6 |0 - \x9A\xE7 |0 - \x9A\xE8 |0 - \x9A\xE9 |0 - \x9A\xEA |0 - \x9A\xEB |0 - \x9A\xEC |0 - \x9A\xED |0 - \x9A\xEE |0 - \x9A\xEF |0 - \x9A\xF0 |0 - \x9A\xF1 |0 - \x9A\xF2 |0 - \x9A\xF3 |0 - \x9A\xF4 |0 - \x9A\xF5 |0 - \x9A\xF6 |0 - \x9A\xF7 |0 - \x9A\xF8 |0 - \x9A\xF9 |0 - \x9A\xFA |0 - \x9A\xFB |0 - \x9A\xFC |0 - \x9A\xFD |0 - \x9A\xFE |0 - \x9B\xA1 |0 - \x9B\xA2 |0 - \x9B\xA3 |0 - \x9B\xA4 |0 - \x9B\xA5 |0 - \x9B\xA6 |0 - \x9B\xA7 |0 - \x9B\xA8 |0 - \x9B\xA9 |0 - \x9B\xAA |0 - \x9B\xAB |0 - \x9B\xAC |0 - \x9B\xAD |0 - \x9B\xAE |0 - \x9B\xAF |0 - \x9B\xB0 |0 - \x9B\xB1 |0 - \x9B\xB2 |0 - \x9B\xB3 |0 - \x9B\xB4 |0 - \x9B\xB5 |0 - \x9B\xB6 |0 - \x9B\xB7 |0 - \x9B\xB8 |0 - \x9B\xB9 |0 - \x9B\xBA |0 - \x9B\xBB |0 - \x9B\xBC |0 - \x9B\xBD |0 - \x9B\xBE |0 - \x9B\xBF |0 - \x9B\xC0 |0 - \x9B\xC1 |0 - \x9B\xC2 |0 - \x9B\xC3 |0 - \x9B\xC4 |0 - \x9B\xC5 |0 - \x9B\xC6 |0 - \x9B\xC7 |0 - \x9B\xC8 |0 - \x9B\xC9 |0 - \x9B\xCA |0 - \x9B\xCB |0 - \x9B\xCC |0 - \x9B\xCD |0 - \x9B\xCE |0 - \x9B\xCF |0 - \x9B\xD0 |0 - \x9B\xD1 |0 - \x9B\xD2 |0 - \x9B\xD3 |0 - \x9B\xD4 |0 - \x9B\xD5 |0 - \x9B\xD6 |0 - \x9B\xD7 |0 - \x9B\xD8 |0 - \x9B\xD9 |0 - \x9B\xDA |0 - \x9B\xDB |0 - \x9B\xDC |0 - \x9B\xDD |0 - \x9B\xDE |0 - \x9B\xDF |0 - \x9B\xE0 |0 - \x9B\xE1 |0 - \x9B\xE2 |0 - \x9B\xE3 |0 - \x9B\xE4 |0 - \x9B\xE5 |0 - \x9B\xE6 |0 - \x9B\xE7 |0 - \x9B\xE8 |0 - \x9B\xE9 |0 - \x9B\xEA |0 - \x9B\xEB |0 - \x9B\xEC |0 - \x9B\xED |0 - \x9B\xEE |0 - \x9B\xEF |0 - \x9B\xF0 |0 - \x9B\xF1 |0 - \x9B\xF2 |0 - \x9B\xF3 |0 - \x9B\xF4 |0 - \x9B\xF5 |0 - \x9B\xF6 |0 - \x9B\xF7 |0 - \x9B\xF8 |0 - \x9B\xF9 |0 - \x9B\xFA |0 - \x9B\xFB |0 - \x9B\xFC |0 - \x9B\xFD |0 - \x9B\xFE |0 - \x9C\xA1 |0 - \x9C\xA2 |0 - \x9C\xA3 |0 - \x9C\xA4 |0 - \x9C\xA5 |0 - \x9C\xA6 |0 - \x9C\xA7 |0 - \x9C\xA8 |0 - \x9C\xA9 |0 - \x9C\xAA |0 - \x9C\xAB |0 - \x9C\xAC |0 - \x9C\xAD |0 - \x9C\xAE |0 - \x9C\xAF |0 - \x9C\xB0 |0 - \x9C\xB1 |0 - \x9C\xB2 |0 - \x9C\xB3 |0 - \x9C\xB4 |0 - \x9C\xB5 |0 - \x9C\xB6 |0 - \x9C\xB7 |0 - \x9C\xB8 |0 - \x9C\xB9 |0 - \x9C\xBA |0 - \x9C\xBB |0 - \x9C\xBC |0 - \x9C\xBD |0 - \x9C\xBE |0 - \x9C\xBF |0 - \x9C\xC0 |0 - \x9C\xC1 |0 - \x9C\xC2 |0 - \x9C\xC3 |0 - \x9C\xC4 |0 - \x9C\xC5 |0 - \x9C\xC6 |0 - \x9C\xC7 |0 - \x9C\xC8 |0 - \x9C\xC9 |0 - \x9C\xCA |0 - \x9C\xCB |0 - \x9C\xCC |0 - \x9C\xCD |0 - \x9C\xCE |0 - \x9C\xCF |0 - \x9C\xD0 |0 - \x9C\xD1 |0 - \x9C\xD2 |0 - \x9C\xD3 |0 - \x9C\xD4 |0 - \x9C\xD5 |0 - \x9C\xD6 |0 - \x9C\xD7 |0 - \x9C\xD8 |0 - \x9C\xD9 |0 - \x9C\xDA |0 - \x9C\xDB |0 - \x9C\xDC |0 - \x9C\xDD |0 - \x9C\xDE |0 - \x9C\xDF |0 - \x9C\xE0 |0 - \x9C\xE1 |0 - \x9C\xE2 |0 - \x9C\xE3 |0 - \x9C\xE4 |0 - \x9C\xE5 |0 - \x9C\xE6 |0 - \x9C\xE7 |0 - \x9C\xE8 |0 - \x9C\xE9 |0 - \x9C\xEA |0 - \x9C\xEB |0 - \x9C\xEC |0 - \x9C\xED |0 - \x9C\xEE |0 - \x9C\xEF |0 - \x9C\xF0 |0 - \x9C\xF1 |0 - \x9C\xF2 |0 - \x9C\xF3 |0 - \x9C\xF4 |0 - \x9C\xF5 |0 - \x9C\xF6 |0 - \x9C\xF7 |0 - \x9C\xF8 |0 - \x9C\xF9 |0 - \x9C\xFA |0 - \x9C\xFB |0 - \x9C\xFC |0 - \x9C\xFD |0 - \x9C\xFE |0 - \x9D\xA1 |0 - \x9D\xA2 |0 - \x9D\xA3 |0 - \x9D\xA4 |0 - \x9D\xA5 |0 - \x9D\xA6 |0 - \x9D\xA7 |0 - \x9D\xA8 |0 - \x9D\xA9 |0 - \x9D\xAA |0 - \x9D\xAB |0 - \x9D\xAC |0 - \x9D\xAD |0 - \x9D\xAE |0 - \x9D\xAF |0 - \x9D\xB0 |0 - \x9D\xB1 |0 - \x9D\xB2 |0 - \x9D\xB3 |0 - \x9D\xB4 |0 - \x9D\xB5 |0 - \x9D\xB6 |0 - \x9D\xB7 |0 - \x9D\xB8 |0 - \x9D\xB9 |0 - \x9D\xBA |0 - \x9D\xBB |0 - \x9D\xBC |0 - \x9D\xBD |0 - \x9D\xBE |0 - \x9D\xBF |0 - \x9D\xC0 |0 - \x9D\xC1 |0 - \x9D\xC2 |0 - \x9D\xC3 |0 - \x9D\xC4 |0 - \x9D\xC5 |0 - \x9D\xC6 |0 - \x9D\xC7 |0 - \x9D\xC8 |0 - \x9D\xC9 |0 - \x9D\xCA |0 - \x9D\xCB |0 - \x9D\xCC |0 - \x9D\xCD |0 - \x9D\xCE |0 - \x9D\xCF |0 - \x9D\xD0 |0 - \x9D\xD1 |0 - \x9D\xD2 |0 - \x9D\xD3 |0 - \x9D\xD4 |0 - \x9D\xD5 |0 - \x9D\xD6 |0 - \x9D\xD7 |0 - \x9D\xD8 |0 - \x9D\xD9 |0 - \x9D\xDA |0 - \x9D\xDB |0 - \x9D\xDC |0 - \x9D\xDD |0 - \x9D\xDE |0 - \x9D\xDF |0 - \x9D\xE0 |0 - \x9D\xE1 |0 - \x9D\xE2 |0 - \x9D\xE3 |0 - \x9D\xE4 |0 - \x9D\xE5 |0 - \x9D\xE6 |0 - \x9D\xE7 |0 - \x9D\xE8 |0 - \x9D\xE9 |0 - \x9D\xEA |0 - \x9D\xEB |0 - \x9D\xEC |0 - \x9D\xED |0 - \x9D\xEE |0 - \x9D\xEF |0 - \x9D\xF0 |0 - \x9D\xF1 |0 - \x9D\xF2 |0 - \x9D\xF3 |0 - \x9D\xF4 |0 - \x9D\xF5 |0 - \x9D\xF6 |0 - \x9D\xF7 |0 - \x9D\xF8 |0 - \x9D\xF9 |0 - \x9D\xFA |0 - \x9D\xFB |0 - \x9D\xFC |0 - \x9D\xFD |0 - \x9D\xFE |0 - \x9E\xA1 |0 - \x9E\xA2 |0 - \x9E\xA3 |0 - \x9E\xA4 |0 - \x9E\xA5 |0 - \x9E\xA6 |0 - \x9E\xA7 |0 - \x9E\xA8 |0 - \x9E\xA9 |0 - \x9E\xAA |0 - \x9E\xAB |0 - \x9E\xAC |0 - \x9E\xAD |0 - \x9E\xAE |0 - \x9E\xAF |0 - \x9E\xB0 |0 - \x9E\xB1 |0 - \x9E\xB2 |0 - \x9E\xB3 |0 - \x9E\xB4 |0 - \x9E\xB5 |0 - \x9E\xB6 |0 - \x9E\xB7 |0 - \x9E\xB8 |0 - \x9E\xB9 |0 - \x9E\xBA |0 - \x9E\xBB |0 - \x9E\xBC |0 - \x9E\xBD |0 - \x9E\xBE |0 - \x9E\xBF |0 - \x9E\xC0 |0 - \x9E\xC1 |0 - \x9E\xC2 |0 - \x9E\xC3 |0 - \x9E\xC4 |0 - \x9E\xC5 |0 - \x9E\xC6 |0 - \x9E\xC7 |0 - \x9E\xC8 |0 - \x9E\xC9 |0 - \x9E\xCA |0 - \x9E\xCB |0 - \x9E\xCC |0 - \x9E\xCD |0 - \x9E\xCE |0 - \x9E\xCF |0 - \x9E\xD0 |0 - \x9E\xD1 |0 - \x9E\xD2 |0 - \x9E\xD3 |0 - \x9E\xD4 |0 - \x9E\xD5 |0 - \x9E\xD6 |0 - \x9E\xD7 |0 - \x9E\xD8 |0 - \x9E\xD9 |0 - \x9E\xDA |0 - \x9E\xDB |0 - \x9E\xDC |0 - \x9E\xDD |0 - \x9E\xDE |0 - \x9E\xDF |0 - \x9E\xE0 |0 - \x9E\xE1 |0 - \x9E\xE2 |0 - \x9E\xE3 |0 - \x9E\xE4 |0 - \x9E\xE5 |0 - \x9E\xE6 |0 - \x9E\xE7 |0 - \x9E\xE8 |0 - \x9E\xE9 |0 - \x9E\xEA |0 - \x9E\xEB |0 - \x9E\xEC |0 - \x9E\xED |0 - \x9E\xEE |0 - \x9E\xEF |0 - \x9E\xF0 |0 - \x9E\xF1 |0 - \x9E\xF2 |0 - \x9E\xF3 |0 - \x9E\xF4 |0 - \x9E\xF5 |0 - \x9E\xF6 |0 - \x9E\xF7 |0 - \x9E\xF8 |0 - \x9E\xF9 |0 - \x9E\xFA |0 - \x9E\xFB |0 - \x9E\xFC |0 - \x9E\xFD |0 - \x9E\xFE |0 - \x9F\xA1 |0 - \x9F\xA2 |0 - \x9F\xA3 |0 - \x9F\xA4 |0 - \x9F\xA5 |0 - \x9F\xA6 |0 - \x9F\xA7 |0 - \x9F\xA8 |0 - \x9F\xA9 |0 - \x9F\xAA |0 - \x9F\xAB |0 - \x9F\xAC |0 - \x9F\xAD |0 - \x9F\xAE |0 - \x9F\xAF |0 - \x9F\xB0 |0 - \x9F\xB1 |0 - \x9F\xB2 |0 - \x9F\xB3 |0 - \x9F\xB4 |0 - \x9F\xB5 |0 - \x9F\xB6 |0 - \x9F\xB7 |0 - \x9F\xB8 |0 - \x9F\xB9 |0 - \x9F\xBA |0 - \x9F\xBB |0 - \x9F\xBC |0 - \x9F\xBD |0 - \x9F\xBE |0 - \x9F\xBF |0 - \x9F\xC0 |0 - \x9F\xC1 |0 - \x9F\xC2 |0 - \x9F\xC3 |0 - \x9F\xC4 |0 - \x9F\xC5 |0 - \x9F\xC6 |0 - \x9F\xC7 |0 - \x9F\xC8 |0 - \x9F\xC9 |0 - \x9F\xCA |0 - \x9F\xCB |0 - \x9F\xCC |0 - \x9F\xCD |0 - \x9F\xCE |0 - \x9F\xCF |0 - \x9F\xD0 |0 - \x9F\xD1 |0 - \x9F\xD2 |0 - \x9F\xD3 |0 - \x9F\xD4 |0 - \x9F\xD5 |0 - \x9F\xD6 |0 - \x9F\xD7 |0 - \x9F\xD8 |0 - \x9F\xD9 |0 - \x9F\xDA |0 - \x9F\xDB |0 - \x9F\xDC |0 - \x9F\xDD |0 - \x9F\xDE |0 - \x9F\xDF |0 - \x9F\xE0 |0 - \x9F\xE1 |0 - \x9F\xE2 |0 - \x9F\xE3 |0 - \x9F\xE4 |0 - \x9F\xE5 |0 - \x9F\xE6 |0 - \x9F\xE7 |0 - \x9F\xE8 |0 - \x9F\xE9 |0 - \x9F\xEA |0 - \x9F\xEB |0 - \x9F\xEC |0 - \x9F\xED |0 - \x9F\xEE |0 - \x9F\xEF |0 - \x9F\xF0 |0 - \x9F\xF1 |0 - \x9F\xF2 |0 - \x9F\xF3 |0 - \x9F\xF4 |0 - \x9F\xF5 |0 - \x9F\xF6 |0 - \x9F\xF7 |0 - \x9F\xF8 |0 - \x9F\xF9 |0 - \x9F\xFA |0 - \x9F\xFB |0 - \x9F\xFC |0 - \x9F\xFD |0 - \x9F\xFE |0 - \xA0\xA1 |0 - \xA0\xA2 |0 - \xA0\xA3 |0 - \xA0\xA4 |0 - \xA0\xA5 |0 - \xA0\xA6 |0 - \xA0\xA7 |0 - \xA0\xA8 |0 - \xA0\xA9 |0 - \xA0\xAA |0 - \xA0\xAB |0 - \xA0\xAC |0 - \xA0\xAD |0 - \xA0\xAE |0 - \xA0\xAF |0 - \xA0\xB0 |0 - \xA0\xB1 |0 - \xA0\xB2 |0 - \xA0\xB3 |0 - \xA0\xB4 |0 - \xA0\xB5 |0 - \xA0\xB6 |0 - \xA0\xB7 |0 - \xA0\xB8 |0 - \xA0\xB9 |0 - \xA0\xBA |0 - \xA0\xBB |0 - \xA0\xBC |0 - \xA0\xBD |0 - \xA0\xBE |0 - \xA0\xBF |0 - \xA0\xC0 |0 - \xA0\xC1 |0 - \xA0\xC2 |0 - \xA0\xC3 |0 - \xA0\xC4 |0 - \xA0\xC5 |0 - \xA0\xC6 |0 - \xA0\xC7 |0 - \xA0\xC8 |0 - \xA0\xC9 |0 - \xA0\xCA |0 - \xA0\xCB |0 - \xA0\xCC |0 - \xA0\xCD |0 - \xA0\xCE |0 - \xA0\xCF |0 - \xA0\xD0 |0 - \xA0\xD1 |0 - \xA0\xD2 |0 - \xA0\xD3 |0 - \xA0\xD4 |0 - \xA0\xD5 |0 - \xA0\xD6 |0 - \xA0\xD7 |0 - \xA0\xD8 |0 - \xA0\xD9 |0 - \xA0\xDA |0 - \xA0\xDB |0 - \xA0\xDC |0 - \xA0\xDD |0 - \xA0\xDE |0 - \xA0\xDF |0 - \xA0\xE0 |0 - \xA0\xE1 |0 - \xA0\xE2 |0 - \xA0\xE3 |0 - \xA0\xE4 |0 - \xA0\xE5 |0 - \xA0\xE6 |0 - \xA0\xE7 |0 - \xA0\xE8 |0 - \xA0\xE9 |0 - \xA0\xEA |0 - \xA0\xEB |0 - \xA0\xEC |0 - \xA0\xED |0 - \xA0\xEE |0 - \xA0\xEF |0 - \xA0\xF0 |0 - \xA0\xF1 |0 - \xA0\xF2 |0 - \xA0\xF3 |0 - \xA0\xF4 |0 - \xA0\xF5 |0 - \xA0\xF6 |0 - \xA0\xF7 |0 - \xA0\xF8 |0 - \xA0\xF9 |0 - \xA0\xFA |0 - \xA0\xFB |0 - \xA0\xFC |0 - \xA0\xFD |0 - \xA0\xFE |0 - \x8C\xEE |0 - \x8C\xF4 |0 - \xA3\xA1 |0 - \xA3\xA2 |0 - \xA3\xA3 |0 - \xA1\xE7 |0 - \xA3\xA5 |0 - \xA3\xA6 |0 - \x8C\xEC |0 - \xA3\xA8 |0 - \xA3\xA9 |0 - \xA3\xAA |0 - \xA3\xAB |0 - \xA3\xAC |0 - \xA3\xAD |0 - \xA3\xAE |0 - \xA3\xAF |0 - \xA3\xB0 |0 - \xA3\xB1 |0 - \xA3\xB2 |0 - \xA3\xB3 |0 - \xA3\xB4 |0 - \xA3\xB5 |0 - \xA3\xB6 |0 - \xA3\xB7 |0 - \xA3\xB8 |0 - \xA3\xB9 |0 - \xA3\xBA |0 - \xA3\xBB |0 - \xA3\xBC |0 - \xA3\xBD |0 - \xA3\xBE |0 - \xA3\xBF |0 - \xA3\xC0 |0 - \xA3\xC1 |0 - \xA3\xC2 |0 - \xA3\xC3 |0 - \xA3\xC4 |0 - \xA3\xC5 |0 - \xA3\xC6 |0 - \xA3\xC7 |0 - \xA3\xC8 |0 - \xA3\xC9 |0 - \xA3\xCA |0 - \xA3\xCB |0 - \xA3\xCC |0 - \xA3\xCD |0 - \xA3\xCE |0 - \xA3\xCF |0 - \xA3\xD0 |0 - \xA3\xD1 |0 - \xA3\xD2 |0 - \xA3\xD3 |0 - \xA3\xD4 |0 - \xA3\xD5 |0 - \xA3\xD6 |0 - \xA3\xD7 |0 - \xA3\xD8 |0 - \xA3\xD9 |0 - \xA3\xDA |0 - \xA3\xDB |0 - \xA3\xDC |0 - \xA3\xDD |0 - \xA3\xDE |0 - \xA3\xDF |0 - \xA3\xE0 |0 - \xA3\xE1 |0 - \xA3\xE2 |0 - \xA3\xE3 |0 - \xA3\xE4 |0 - \xA3\xE5 |0 - \xA3\xE6 |0 - \xA3\xE7 |0 - \xA3\xE8 |0 - \xA3\xE9 |0 - \xA3\xEA |0 - \xA3\xEB |0 - \xA3\xEC |0 - \xA3\xED |0 - \xA3\xEE |0 - \xA3\xEF |0 - \xA3\xF0 |0 - \xA3\xF1 |0 - \xA3\xF2 |0 - \xA3\xF3 |0 - \xA3\xF4 |0 - \xA3\xF5 |0 - \xA3\xF6 |0 - \xA3\xF7 |0 - \xA3\xF8 |0 - \xA3\xF9 |0 - \xA3\xFA |0 - \xA3\xFB |0 - \xA3\xFC |0 - \xA3\xFD |0 - \xA1\xAB |0 - \xA1\xE9 |0 - \xA1\xEA |0 - \x8C\xEA |0 - \xA3\xFE |0 - \x8C\xEB |0 - \xA3\xA4 |0 - \x1D |1 - \x1F |1 - \x1C |1 - \x1E |1 - \x07 |1 - \x0E |1 - \x09 |1 -END CHARMAP diff --git a/icuSources/data/mappings/ibm-4517_P100-2005.ucm b/icuSources/data/mappings/ibm-4517_P100-2005.ucm new file mode 100644 index 00000000..c7a03c89 --- /dev/null +++ b/icuSources/data/mappings/ibm-4517_P100-2005.ucm @@ -0,0 +1,470 @@ +# *************************************************************************** +# * +# * Copyright (C) 1995-2005, International Business Machines +# * Corporation and others. All Rights Reserved. +# * +# *************************************************************************** +# +# File created by rptp2ucm (compiled on Nov 15 2005) +# from source files 54B011A5.RPMAP100 and 11A554B0.TPMAP100 +# + "ibm-4517_P100-2005" + "AXXXX" + 1 + 1 + "SBCS" + \x3F + "EBCDIC" + "ibm-4517_VPUA" + +CHARMAP + \x00 |0 + \x01 |0 + \x02 |0 + \x03 |0 + \x37 |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x16 |0 + \x05 |0 + \x25 |0 + \x0B |0 + \x0C |0 + \x0D |0 + \x0E |0 + \x0F |0 + \x10 |0 + \x11 |0 + \x12 |0 + \x13 |0 + \x3C |0 + \x3D |0 + \x32 |0 + \x26 |0 + \x18 |0 + \x19 |0 + \x3F |0 + \x27 |0 + \x1C |0 + \x1D |0 + \x1E |0 + \x1F |0 + \x40 |0 + \x4F |0 + \x7F |0 + \x5B |0 + \x6C |0 + \x50 |0 + \x7D |0 + \x4D |0 + \x5D |0 + \x5C |0 + \x4E |0 + \x6B |0 + \x60 |0 + \x4B |0 + \x61 |0 + \xF0 |0 + \xF1 |0 + \xF2 |0 + \xF3 |0 + \xF4 |0 + \xF5 |0 + \xF6 |0 + \xF7 |0 + \xF8 |0 + \xF9 |0 + \x7A |0 + \x5E |0 + \x4C |0 + \x7E |0 + \x6E |0 + \x6F |0 + \xC1 |0 + \xC2 |0 + \xC3 |0 + \xC4 |0 + \xC5 |0 + \xC6 |0 + \xC7 |0 + \xC8 |0 + \xC9 |0 + \xD1 |0 + \xD2 |0 + \xD3 |0 + \xD4 |0 + \xD5 |0 + \xD6 |0 + \xD7 |0 + \xD8 |0 + \xD9 |0 + \xE2 |0 + \xE3 |0 + \xE4 |0 + \xE5 |0 + \xE6 |0 + \xE7 |0 + \xE8 |0 + \xE9 |0 + \x5F |0 + \x6D |0 + \x81 |0 + \x82 |0 + \x83 |0 + \x84 |0 + \x85 |0 + \x86 |0 + \x87 |0 + \x88 |0 + \x89 |0 + \x91 |0 + \x92 |0 + \x93 |0 + \x94 |0 + \x95 |0 + \x96 |0 + \x97 |0 + \x98 |0 + \x99 |0 + \xA2 |0 + \xA3 |0 + \xA4 |0 + \xA5 |0 + \xA6 |0 + \xA7 |0 + \xA8 |0 + \xA9 |0 + \x07 |0 + \x20 |0 + \x21 |0 + \x22 |0 + \x23 |0 + \x24 |0 + \x15 |0 + \x06 |0 + \x17 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x09 |0 + \x0A |0 + \x1B |0 + \x30 |0 + \x31 |0 + \x1A |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x08 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x04 |0 + \x14 |0 + \x3E |0 + \xFF |0 + \x41 |0 + \x79 |0 + \x5A |0 + \xA1 |0 + \xCA |0 + \x4A |0 + \x7B |0 + \xED |0 + \x7C |0 + \xE0 |0 + \xD0 |0 + \xC0 |0 + \xEA |0 + \x6A |0 + \xEB |0 + \xEF |0 + \xEE |0 + \x46 |1 + \x47 |1 + \x49 |1 + \x52 |1 + \x56 |1 + \x55 |1 + \x56 |1 + \x58 |1 + \x62 |1 + \x63 |1 + \x65 |1 + \x67 |1 + \x69 |1 + \x71 |1 + \x73 |1 + \x74 |1 + \x75 |1 + \x76 |1 + \x77 |1 + \x80 |1 + \x8B |1 + \x8D |1 + \x8F |1 + \x90 |1 + \x9A |1 + \x9E |1 + \x44 |0 + \xAB |1 + \xAD |1 + \xAF |1 + \xB1 |1 + \xBB |1 + \xBD |1 + \xBF |1 + \xCF |1 + \xDA |1 + \xDC |1 + \x42 |1 + \xF0 |1 + \xF1 |1 + \xF2 |1 + \xF3 |1 + \xF4 |1 + \xF5 |1 + \xF6 |1 + \xF7 |1 + \xF8 |1 + \xF9 |1 + \x6C |1 + \x6B |1 + \x4B |1 + \x5C |1 + \xE1 |0 + \x45 |0 + \x8B |1 + \x80 |1 + \x77 |1 + \x8D |1 + \x40 |1 + \x44 |1 + \x40 |1 + \x45 |1 + \x40 |1 + \x40 |1 + \x44 |1 + \x40 |1 + \x44 |1 + \x40 |1 + \x44 |1 + \x42 |0 + \x43 |0 + \x40 |1 + \x44 |1 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x51 |0 + \x52 |0 + \x52 |1 + \x56 |1 + \x57 |1 + \x55 |1 + \x55 |1 + \x55 |0 + \x55 |1 + \x56 |0 + \x57 |0 + \x58 |0 + \x58 |1 + \x59 |0 + \x59 |1 + \x62 |0 + \x62 |1 + \x63 |0 + \x63 |1 + \x64 |0 + \x64 |1 + \x65 |0 + \x65 |1 + \x66 |0 + \x66 |1 + \x67 |0 + \x67 |1 + \x68 |0 + \x68 |1 + \x69 |0 + \x69 |1 + \x70 |0 + \x70 |1 + \x71 |0 + \x71 |1 + \x72 |0 + \x72 |1 + \x73 |0 + \x73 |1 + \x74 |0 + \x74 |1 + \x75 |0 + \x75 |1 + \x76 |0 + \x76 |1 + \x77 |0 + \x77 |1 + \x78 |0 + \x78 |1 + \x80 |0 + \x80 |1 + \x8A |0 + \x8A |1 + \x8B |0 + \x8B |1 + \x8C |0 + \x8C |1 + \x8D |0 + \x8D |1 + \x8E |0 + \x8E |1 + \x8F |1 + \x8F |1 + \x8F |0 + \x8F |1 + \x90 |1 + \x90 |1 + \x90 |0 + \x90 |1 + \x9A |0 + \x9B |0 + \x9C |0 + \x9D |0 + \x9E |0 + \x9F |0 + \xA0 |0 + \xAA |0 + \xAB |0 + \xAB |1 + \xAC |0 + \xAC |1 + \xAD |0 + \xAD |1 + \xAE |0 + \xAE |1 + \xAF |0 + \xAF |1 + \xB0 |0 + \xB0 |1 + \xB1 |0 + \xB1 |1 + \xBA |0 + \xBA |1 + \xBB |0 + \xBB |1 + \xBC |0 + \xBC |1 + \xBD |0 + \xBD |1 + \xBE |0 + \xBE |1 + \xBF |0 + \xBF |1 + \xCB |0 + \xCD |0 + \xCF |0 + \xCF |1 + \xDA |0 + \xDB |0 + \xDC |0 + \xDD |0 + \xDE |0 + \xDE |1 + \xB2 |0 + \xB3 |0 + \xB4 |0 + \xB5 |0 + \xB8 |1 + \xB9 |1 + \xB8 |0 + \xB9 |0 + \x4F |1 + \x7F |1 + \x5B |1 + \x6C |1 + \x50 |1 + \x7D |1 + \x4D |1 + \x5D |1 + \x5C |1 + \x4E |1 + \x6B |1 + \x60 |1 + \x4B |1 + \x61 |1 + \xF0 |1 + \xF1 |1 + \xF2 |1 + \xF3 |1 + \xF4 |1 + \xF5 |1 + \xF6 |1 + \xF7 |1 + \xF8 |1 + \xF9 |1 + \x7A |1 + \x5E |1 + \x4C |1 + \x7E |1 + \x6E |1 + \x6F |1 + \xC1 |1 + \xC2 |1 + \xC3 |1 + \xC4 |1 + \xC5 |1 + \xC6 |1 + \xC7 |1 + \xC8 |1 + \xC9 |1 + \xD1 |1 + \xD2 |1 + \xD3 |1 + \xD4 |1 + \xD5 |1 + \xD6 |1 + \xD7 |1 + \xD8 |1 + \xD9 |1 + \xE2 |1 + \xE3 |1 + \xE4 |1 + \xE5 |1 + \xE6 |1 + \xE7 |1 + \xE8 |1 + \xE9 |1 + \x5F |1 + \x6D |1 + \x81 |1 + \x82 |1 + \x83 |1 + \x84 |1 + \x85 |1 + \x86 |1 + \x87 |1 + \x88 |1 + \x89 |1 + \x91 |1 + \x92 |1 + \x93 |1 + \x94 |1 + \x95 |1 + \x96 |1 + \x97 |1 + \x98 |1 + \x99 |1 + \xA2 |1 + \xA3 |1 + \xA4 |1 + \xA5 |1 + \xA6 |1 + \xA7 |1 + \xA8 |1 + \xA9 |1 +END CHARMAP diff --git a/icuSources/data/mappings/ibm-737_P100-1997.ucm b/icuSources/data/mappings/ibm-737_P100-1997.ucm index 40ef5b94..60d5529b 100644 --- a/icuSources/data/mappings/ibm-737_P100-1997.ucm +++ b/icuSources/data/mappings/ibm-737_P100-1997.ucm @@ -1,6 +1,6 @@ # *************************************************************************** # * -# * Copyright (C) 1995-2002, International Business Machines +# * Copyright (C) 1995-2005, International Business Machines # * Corporation and others. All Rights Reserved. # * # *************************************************************************** diff --git a/icuSources/data/mappings/ibm-775_P100-1996.ucm b/icuSources/data/mappings/ibm-775_P100-1996.ucm index 3124e9b8..08fe6a2d 100644 --- a/icuSources/data/mappings/ibm-775_P100-1996.ucm +++ b/icuSources/data/mappings/ibm-775_P100-1996.ucm @@ -1,6 +1,6 @@ # *************************************************************************** # * -# * Copyright (C) 1995-2004, International Business Machines +# * Copyright (C) 1995-2005, International Business Machines # * Corporation and others. All Rights Reserved. # * # *************************************************************************** diff --git a/icuSources/data/mappings/ibm-1277_P100-1995.ucm b/icuSources/data/mappings/ibm-9005_X100-2005.ucm similarity index 71% rename from icuSources/data/mappings/ibm-1277_P100-1995.ucm rename to icuSources/data/mappings/ibm-9005_X100-2005.ucm index d0571f3b..9c25fbb3 100644 --- a/icuSources/data/mappings/ibm-1277_P100-1995.ucm +++ b/icuSources/data/mappings/ibm-9005_X100-2005.ucm @@ -1,21 +1,21 @@ # *************************************************************************** # * -# * Copyright (C) 1995-2002, International Business Machines +# * Copyright (C) 1995-2005, International Business Machines # * Corporation and others. All Rights Reserved. # * # *************************************************************************** # -# File created by rptp2ucm (compiled on Dec 3 2002) -# from source files 34B004FD.RPMAP100 and 04FD34B0.TPMAP100 +# File created by rptp2ucm (compiled on Apr 5 2005) +# from source files 54B0232D.RXMAP100 and 232D54B0.TXMAP100 # - "ibm-1277_P100-1995" + "ibm-9005_X100-2005" "AXXXX" 1 1 "SBCS" \x1A "ASCII" - "ibm-1277_VASCII" + "ibm-9005_STD" CHARMAP \x00 |0 @@ -57,6 +57,7 @@ CHARMAP \x24 |0 \x25 |0 \x26 |0 + \x27 |0 \x28 |0 \x29 |0 \x2A |0 @@ -113,7 +114,7 @@ CHARMAP \x5D |0 \x5E |0 \x5F |0 - \x91 |0 + \x60 |0 \x61 |0 \x62 |0 \x63 |0 @@ -161,125 +162,124 @@ CHARMAP \x8D |0 \x8E |0 \x8F |0 + \x90 |0 + \x91 |0 + \x92 |0 + \x93 |0 + \x94 |0 + \x95 |0 + \x96 |0 + \x97 |0 + \x98 |0 \x99 |0 + \x9A |0 + \x9B |0 \x9C |0 + \x9D |0 + \x9E |0 + \x9F |0 \xA0 |0 - \xA1 |0 - \xA2 |0 \xA3 |0 - \xA4 |0 - \xA5 |0 \xA6 |0 \xA7 |0 - \x98 |3 \xA8 |0 \xA9 |0 - \xAA |0 \xAB |0 \xAC |0 \xAD |0 - \xAE |0 - \x95 |3 - \xAF |0 \xB0 |0 \xB1 |0 \xB2 |0 \xB3 |0 - \x92 |3 \xB4 |0 - \xB5 |0 - \xB6 |0 - \xB7 |0 - \x9B |3 - \xB8 |0 - \xB9 |0 - \xBA |0 + \xB7 |1 \xBB |0 - \xBC |0 \xBD |0 - \xBE |0 - \xBF |0 - \xC0 |0 - \xC1 |0 - \xC2 |0 - \xC3 |0 - \xC4 |0 - \xC5 |0 - \xC6 |0 - \xC7 |0 - \xC8 |0 - \xC9 |0 - \xCA |0 - \xCB |0 - \xCC |0 - \xCD |0 - \xCE |0 - \xCF |0 - \xD0 |0 - \xD1 |0 - \xD2 |0 - \xD3 |0 - \xD4 |0 - \xD5 |0 - \xD6 |0 - \xD7 |0 - \xD8 |0 - \xD9 |0 - \xDA |0 - \xDB |0 - \xDC |0 - \xDD |0 - \xDE |0 - \xDF |0 - \xE0 |0 - \xE1 |0 - \xE2 |0 - \xE3 |0 - \xE4 |0 - \xE5 |0 - \xE6 |0 - \xE7 |0 - \xE8 |0 - \xE9 |0 - \xEA |0 - \xEB |0 - \xEC |0 - \xED |0 - \xEE |0 - \xEF |0 - \xF0 |0 - \xF1 |0 - \xF2 |0 - \xF3 |0 - \xF4 |0 - \xF5 |0 - \xF6 |0 - \xF7 |0 - \xF8 |0 - \xF9 |0 - \xFA |0 - \xFB |0 - \xFC |0 - \xFD |0 - \xFE |0 - \xFF |0 - \x90 |0 - \x93 |0 - \x9F |0 - \x96 |0 - \x97 |0 - \x9A |0 - \x9E |0 - \x94 |0 - \x9D |0 - \x60 |0 - \x27 |0 + \xAA |0 + \xB5 |0 + \xB6 |0 + \xB7 |0 + \xB8 |0 + \xB9 |0 + \xBA |0 + \xBC |0 + \xBE |0 + \xBF |0 + \xC0 |0 + \xC1 |0 + \xC2 |0 + \xC3 |0 + \xC4 |0 + \xC5 |0 + \xC6 |0 + \xC7 |0 + \xC8 |0 + \xC9 |0 + \xCA |0 + \xCB |0 + \xCC |0 + \xCD |0 + \xCE |0 + \xCF |0 + \xD0 |0 + \xD1 |0 + \xD3 |0 + \xD4 |0 + \xD5 |0 + \xD6 |0 + \xD7 |0 + \xD8 |0 + \xD9 |0 + \xDA |0 + \xDB |0 + \xDC |0 + \xDD |0 + \xDE |0 + \xDF |0 + \xE0 |0 + \xE1 |0 + \xE2 |0 + \xE3 |0 + \xE4 |0 + \xE5 |0 + \xE6 |0 + \xE7 |0 + \xE8 |0 + \xE9 |0 + \xEA |0 + \xEB |0 + \xEC |0 + \xED |0 + \xEE |0 + \xEF |0 + \xF0 |0 + \xF1 |0 + \xF2 |0 + \xF3 |0 + \xF4 |0 + \xF5 |0 + \xF6 |0 + \xF7 |0 + \xF8 |0 + \xF9 |0 + \xFA |0 + \xFB |0 + \xFC |0 + \xFD |0 + \xFE |0 + \xF6 |1 + \xAF |0 + \xA1 |0 + \xA2 |0 + \xA4 |0 + \xA5 |0 \x21 |1 \x22 |1 \x23 |1 \x24 |1 \x25 |1 \x26 |1 + \x27 |1 \x28 |1 \x29 |1 \x2A |1 @@ -336,7 +336,7 @@ CHARMAP \x5D |1 \x5E |1 \x5F |1 - \x91 |1 + \x60 |1 \x61 |1 \x62 |1 \x63 |1 diff --git a/icuSources/data/mappings/ibm-9067_X100-2005.ucm b/icuSources/data/mappings/ibm-9067_X100-2005.ucm new file mode 100644 index 00000000..e58eceec --- /dev/null +++ b/icuSources/data/mappings/ibm-9067_X100-2005.ucm @@ -0,0 +1,370 @@ +# *************************************************************************** +# * +# * Copyright (C) 1995-2006, International Business Machines +# * Corporation and others. All Rights Reserved. +# * +# *************************************************************************** +# +# File created by rptp2ucm (compiled on Aug 1 2006) +# from source files 54B0236B.RXMAP100 and 236B54B0.TXMAP100 +# + "ibm-9067_X100-2005" + "AXXXX" + 1 + 1 + "SBCS" + \x3F + "EBCDIC" + "ibm-9067_STD" + +CHARMAP + \x00 |0 + \x01 |0 + \x02 |0 + \x03 |0 + \x37 |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x16 |0 + \x05 |0 + \x25 |0 + \x0B |0 + \x0C |0 + \x0D |0 + \x0E |0 + \x0F |0 + \x10 |0 + \x11 |0 + \x12 |0 + \x13 |0 + \x3C |0 + \x3D |0 + \x32 |0 + \x26 |0 + \x18 |0 + \x19 |0 + \x3F |0 + \x27 |0 + \x1C |0 + \x1D |0 + \x1E |0 + \x1F |0 + \x40 |0 + \x4F |0 + \x7F |0 + \x7B |0 + \x5B |0 + \x6C |0 + \x50 |0 + \x7D |0 + \x4D |0 + \x5D |0 + \x5C |0 + \x4E |0 + \x6B |0 + \x60 |0 + \x4B |0 + \x61 |0 + \xF0 |0 + \xF1 |0 + \xF2 |0 + \xF3 |0 + \xF4 |0 + \xF5 |0 + \xF6 |0 + \xF7 |0 + \xF8 |0 + \xF9 |0 + \x7A |0 + \x5E |0 + \x4C |0 + \x7E |0 + \x6E |0 + \x6F |0 + \x7C |0 + \xC1 |0 + \xC2 |0 + \xC3 |0 + \xC4 |0 + \xC5 |0 + \xC6 |0 + \xC7 |0 + \xC8 |0 + \xC9 |0 + \xD1 |0 + \xD2 |0 + \xD3 |0 + \xD4 |0 + \xD5 |0 + \xD6 |0 + \xD7 |0 + \xD8 |0 + \xD9 |0 + \xE2 |0 + \xE3 |0 + \xE4 |0 + \xE5 |0 + \xE6 |0 + \xE7 |0 + \xE8 |0 + \xE9 |0 + \x4A |0 + \xE0 |0 + \x5A |0 + \x5F |0 + \x6D |0 + \x79 |0 + \x81 |0 + \x82 |0 + \x83 |0 + \x84 |0 + \x85 |0 + \x86 |0 + \x87 |0 + \x88 |0 + \x89 |0 + \x91 |0 + \x92 |0 + \x93 |0 + \x94 |0 + \x95 |0 + \x96 |0 + \x97 |0 + \x98 |0 + \x99 |0 + \xA2 |0 + \xA3 |0 + \xA4 |0 + \xA5 |0 + \xA6 |0 + \xA7 |0 + \xA8 |0 + \xA9 |0 + \xC0 |0 + \x6A |0 + \xD0 |0 + \xA1 |0 + \x07 |0 + \x20 |0 + \x21 |0 + \x22 |0 + \x23 |0 + \x24 |0 + \x15 |0 + \x06 |0 + \x17 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x09 |0 + \x0A |0 + \x1B |0 + \x30 |0 + \x31 |0 + \x1A |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x08 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x04 |0 + \x14 |0 + \x3E |0 + \xFF |0 + \x74 |0 + \xB0 |0 + \xDF |0 + \xEB |0 + \x70 |0 + \xFB |0 + \xEE |0 + \xEF |0 + \xCA |0 + \x90 |0 + \xDA |0 + \xEA |0 + \xFA |0 + \xA0 |0 + \xDD |1 + \xFE |0 + \xDB |0 + \xEC |0 + \x80 |0 + \x71 |0 + \xDD |0 + \x72 |0 + \x73 |0 + \x75 |0 + \x76 |0 + \x77 |0 + \x78 |0 + \xCC |0 + \x41 |0 + \x42 |0 + \x43 |0 + \x44 |0 + \x45 |0 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x51 |0 + \x52 |0 + \x53 |0 + \x54 |0 + \x55 |0 + \x56 |0 + \x57 |0 + \x58 |0 + \x59 |0 + \x62 |0 + \x63 |0 + \x64 |0 + \x65 |0 + \x66 |0 + \x67 |0 + \x68 |0 + \x69 |0 + \xB1 |0 + \xB2 |0 + \xB3 |0 + \xB5 |0 + \xCD |0 + \x8A |0 + \x8B |0 + \x8C |0 + \x8D |0 + \x8E |0 + \x8F |0 + \x9A |0 + \x9B |0 + \x9C |0 + \x9D |0 + \x9E |0 + \x9F |0 + \xAA |0 + \xAB |0 + \xAC |0 + \xAD |0 + \xAE |0 + \xBA |0 + \xAF |0 + \xBB |0 + \xBC |0 + \xBD |0 + \xBE |0 + \xBF |0 + \xCB |0 + \xB4 |0 + \xB8 |0 + \xB6 |0 + \xB7 |0 + \xB9 |0 + \xBD |1 + \xCF |0 + \xCE |0 + \xDE |0 + \xFC |0 + \xE1 |0 + \x4F |1 + \x7F |1 + \x7B |1 + \x5B |1 + \x6C |1 + \x50 |1 + \x7D |1 + \x4D |1 + \x5D |1 + \x5C |1 + \x4E |1 + \x6B |1 + \x60 |1 + \x4B |1 + \x61 |1 + \xF0 |1 + \xF1 |1 + \xF2 |1 + \xF3 |1 + \xF4 |1 + \xF5 |1 + \xF6 |1 + \xF7 |1 + \xF8 |1 + \xF9 |1 + \x7A |1 + \x5E |1 + \x4C |1 + \x7E |1 + \x6E |1 + \x6F |1 + \x7C |1 + \xC1 |1 + \xC2 |1 + \xC3 |1 + \xC4 |1 + \xC5 |1 + \xC6 |1 + \xC7 |1 + \xC8 |1 + \xC9 |1 + \xD1 |1 + \xD2 |1 + \xD3 |1 + \xD4 |1 + \xD5 |1 + \xD6 |1 + \xD7 |1 + \xD8 |1 + \xD9 |1 + \xE2 |1 + \xE3 |1 + \xE4 |1 + \xE5 |1 + \xE6 |1 + \xE7 |1 + \xE8 |1 + \xE9 |1 + \x4A |1 + \xE0 |1 + \x5A |1 + \x5F |1 + \x6D |1 + \x79 |1 + \x81 |1 + \x82 |1 + \x83 |1 + \x84 |1 + \x85 |1 + \x86 |1 + \x87 |1 + \x88 |1 + \x89 |1 + \x91 |1 + \x92 |1 + \x93 |1 + \x94 |1 + \x95 |1 + \x96 |1 + \x97 |1 + \x98 |1 + \x99 |1 + \xA2 |1 + \xA3 |1 + \xA4 |1 + \xA5 |1 + \xA6 |1 + \xA7 |1 + \xA8 |1 + \xA9 |1 + \xC0 |1 + \x6A |1 + \xD0 |1 + \xA1 |1 +END CHARMAP diff --git a/icuSources/data/mappings/ibm-9448_X100-2005.ucm b/icuSources/data/mappings/ibm-9448_X100-2005.ucm new file mode 100644 index 00000000..25d74cf2 --- /dev/null +++ b/icuSources/data/mappings/ibm-9448_X100-2005.ucm @@ -0,0 +1,567 @@ +# *************************************************************************** +# * +# * Copyright (C) 1995-2005, International Business Machines +# * Corporation and others. All Rights Reserved. +# * +# *************************************************************************** +# +# File created by rptp2ucm (compiled on Nov 15 2005) +# from source files 54B024E8.RXMAP100 and 24E854B0.TXMAP100 +# + "ibm-9448_X100-2005" + "AXXXX" + 1 + 1 + "SBCS" + \x1A + "ASCII" + "ibm-9448_STD" + +CHARMAP + \x00 |0 + \x01 |0 + \x02 |0 + \x03 |0 + \x04 |0 + \x05 |0 + \x06 |0 + \x07 |0 + \x08 |0 + \x09 |0 + \x0A |0 + \x0B |0 + \x0C |0 + \x0D |0 + \x0E |0 + \x0F |0 + \x10 |0 + \x11 |0 + \x12 |0 + \x13 |0 + \x14 |0 + \x15 |0 + \x16 |0 + \x17 |0 + \x18 |0 + \x19 |0 + \x1A |0 + \x1B |0 + \x1C |0 + \x1D |0 + \x1E |0 + \x1F |0 + \x20 |0 + \x21 |0 + \x22 |0 + \x23 |0 + \x24 |0 + \x25 |0 + \x26 |0 + \x27 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x30 |0 + \x31 |0 + \x32 |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x37 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x3C |0 + \x3D |0 + \x3E |0 + \x3F |0 + \x40 |0 + \x41 |0 + \x42 |0 + \x43 |0 + \x44 |0 + \x45 |0 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x4A |0 + \x4B |0 + \x4C |0 + \x4D |0 + \x4E |0 + \x4F |0 + \x50 |0 + \x51 |0 + \x52 |0 + \x53 |0 + \x54 |0 + \x55 |0 + \x56 |0 + \x57 |0 + \x58 |0 + \x59 |0 + \x5A |0 + \x5B |0 + \x5C |0 + \x5D |0 + \x5E |0 + \x5F |0 + \x60 |0 + \x61 |0 + \x62 |0 + \x63 |0 + \x64 |0 + \x65 |0 + \x66 |0 + \x67 |0 + \x68 |0 + \x69 |0 + \x6A |0 + \x6B |0 + \x6C |0 + \x6D |0 + \x6E |0 + \x6F |0 + \x70 |0 + \x71 |0 + \x72 |0 + \x73 |0 + \x74 |0 + \x75 |0 + \x76 |0 + \x77 |0 + \x78 |0 + \x79 |0 + \x7A |0 + \x7B |0 + \x7C |0 + \x7D |0 + \x7E |0 + \x7F |0 + \xA0 |0 + \xA2 |0 + \xA3 |0 + \xA4 |0 + \xA5 |0 + \xA6 |0 + \xA7 |0 + \xA8 |0 + \xA9 |0 + \xAB |0 + \xAC |0 + \xAD |0 + \xAE |0 + \xAF |0 + \xB0 |0 + \xB1 |0 + \xB2 |0 + \xB3 |0 + \xB4 |0 + \xB5 |0 + \xB6 |0 + \xB7 |0 + \xB8 |0 + \xB9 |0 + \xBB |0 + \xBC |0 + \xBD |0 + \xBE |0 + \xD7 |0 + \xE0 |0 + \xE2 |0 + \xE7 |0 + \xE8 |0 + \xE9 |0 + \xEA |0 + \xEB |0 + \xEE |0 + \xEF |0 + \xF4 |0 + \xF7 |0 + \xF9 |0 + \xFB |0 + \xFC |0 + \x8C |0 + \x9C |0 + \x46 |1 + \x83 |0 + \x88 |0 + \x60 |1 + \xA1 |0 + \xBA |0 + \xBF |0 + \xC1 |0 + \xC2 |0 + \xC3 |0 + \xC4 |0 + \xC5 |0 + \xC6 |0 + \xC7 |0 + \xC8 |0 + \xC9 |0 + \xCA |0 + \xCB |0 + \xCC |0 + \xCD |0 + \xCE |0 + \xCF |0 + \xD0 |0 + \xD1 |0 + \xD2 |0 + \xD3 |0 + \xD4 |0 + \xD5 |0 + \xD6 |0 + \xD8 |0 + \xD9 |0 + \xDA |0 + \xDB |0 + \xDC |0 + \xDD |0 + \xDE |0 + \xDF |0 + \xE1 |0 + \xE3 |0 + \xE4 |0 + \xE5 |0 + \xE6 |0 + \xEC |0 + \xED |0 + \xF0 |0 + \xF1 |0 + \xF2 |0 + \xF3 |0 + \xF5 |0 + \xF6 |0 + \xF8 |0 + \xFA |0 + \x30 |1 + \x31 |1 + \x32 |1 + \x33 |1 + \x34 |1 + \x35 |1 + \x36 |1 + \x37 |1 + \x38 |1 + \x39 |1 + \x2C |1 + \x2E |1 + \x8A |0 + \x81 |0 + \x8D |0 + \x8F |0 + \x9A |0 + \x8E |0 + \x98 |0 + \x90 |0 + \x9F |0 + \xAA |0 + \xC0 |0 + \xED |1 + \xFF |0 + \x30 |1 + \x31 |1 + \x32 |1 + \x33 |1 + \x34 |1 + \x35 |1 + \x36 |1 + \x37 |1 + \x38 |1 + \x39 |1 + \x9D |0 + \x9E |0 + \xFD |0 + \xFE |0 + \x96 |0 + \x97 |0 + \x91 |0 + \x92 |0 + \x82 |0 + \x93 |0 + \x94 |0 + \x84 |0 + \x86 |0 + \x87 |0 + \x95 |0 + \x85 |0 + \x89 |0 + \x8B |0 + \x9B |0 + \xAF |1 + \x80 |0 + \x99 |0 + \x81 |1 + \x81 |1 + \x81 |1 + \x81 |1 + \x8A |1 + \x8A |1 + \x8A |1 + \x8A |1 + \x8D |1 + \x8D |1 + \x8D |1 + \x8D |1 + \x8F |1 + \x8F |1 + \x8E |1 + \x8E |1 + \x9A |1 + \x9A |1 + \x98 |1 + \x98 |1 + \x98 |1 + \x98 |1 + \x90 |1 + \x90 |1 + \x90 |1 + \x90 |1 + \x9F |1 + \x9F |1 + \xC0 |1 + \xC0 |1 + \xC0 |1 + \xC0 |1 + \xAA |1 + \xAA |1 + \xAA |1 + \xAA |1 + \xFF |1 + \xFF |1 + \xF0 |1 + \xF0 |1 + \xF1 |1 + \x20 |1 + \xF2 |1 + \xF3 |1 + \xF3 |1 + \xF5 |1 + \xF5 |1 + \xF6 |1 + \xF6 |1 + \xF8 |1 + \xF8 |1 + \xFA |1 + \xFA |1 + \xC1 |1 + \xC2 |1 + \xC2 |1 + \xC3 |1 + \xC3 |1 + \xC4 |1 + \xC4 |1 + \xC5 |1 + \xC5 |1 + \xC6 |1 + \xC6 |1 + \xC6 |1 + \xC6 |1 + \xC7 |1 + \xC7 |1 + \xC8 |1 + \xC8 |1 + \xC8 |1 + \xC8 |1 + \xC9 |1 + \xC9 |1 + \xCA |1 + \xCA |1 + \xCA |1 + \xCA |1 + \xCB |1 + \xCB |1 + \xCB |1 + \xCB |1 + \xCC |1 + \xCC |1 + \xCC |1 + \xCC |1 + \xCD |1 + \xCD |1 + \xCD |1 + \xCD |1 + \xCE |1 + \xCE |1 + \xCE |1 + \xCE |1 + \xCF |1 + \xCF |1 + \xD0 |1 + \xD0 |1 + \xD1 |1 + \xD1 |1 + \xD2 |1 + \xD2 |1 + \xD3 |1 + \xD3 |1 + \xD3 |1 + \xD3 |1 + \xD4 |1 + \xD4 |1 + \xD4 |1 + \xD4 |1 + \xD5 |1 + \xD5 |1 + \xD5 |1 + \xD5 |1 + \xD6 |1 + \xD6 |1 + \xD6 |1 + \xD6 |1 + \xD8 |1 + \xD8 |1 + \xD8 |1 + \xD8 |1 + \xD9 |1 + \xD9 |1 + \xD9 |1 + \xD9 |1 + \xDA |1 + \xDA |1 + \xDA |1 + \xDA |1 + \xDB |1 + \xDB |1 + \xDB |1 + \xDB |1 + \xDD |1 + \xDD |1 + \xDD |1 + \xDD |1 + \xDE |1 + \xDE |1 + \xDE |1 + \xDE |1 + \xDF |1 + \xDF |1 + \xDF |1 + \xDF |1 + \xE1 |1 + \xE1 |1 + \xE1 |1 + \xE1 |1 + \xE3 |1 + \xE3 |1 + \xE3 |1 + \xE3 |1 + \xE4 |1 + \xE4 |1 + \xE4 |1 + \xE4 |1 + \xE5 |1 + \xE5 |1 + \xE5 |1 + \xE5 |1 + \xE6 |1 + \xE6 |1 + \xEC |1 + \xEC |1 + \xED |1 + \xED |1 + \xED |1 + \xED |1 + \x21 |1 + \x22 |1 + \x23 |1 + \x24 |1 + \x25 |1 + \x26 |1 + \x27 |1 + \x28 |1 + \x29 |1 + \x2A |1 + \x2B |1 + \x2C |1 + \x2D |1 + \x2E |1 + \x2F |1 + \x30 |1 + \x31 |1 + \x32 |1 + \x33 |1 + \x34 |1 + \x35 |1 + \x36 |1 + \x37 |1 + \x38 |1 + \x39 |1 + \x3A |1 + \x3B |1 + \x3C |1 + \x3D |1 + \x3E |1 + \x3F |1 + \x40 |1 + \x41 |1 + \x42 |1 + \x43 |1 + \x44 |1 + \x45 |1 + \x46 |1 + \x47 |1 + \x48 |1 + \x49 |1 + \x4A |1 + \x4B |1 + \x4C |1 + \x4D |1 + \x4E |1 + \x4F |1 + \x50 |1 + \x51 |1 + \x52 |1 + \x53 |1 + \x54 |1 + \x55 |1 + \x56 |1 + \x57 |1 + \x58 |1 + \x59 |1 + \x5A |1 + \x5B |1 + \x5C |1 + \x5D |1 + \x5E |1 + \x5F |1 + \x60 |1 + \x61 |1 + \x62 |1 + \x63 |1 + \x64 |1 + \x65 |1 + \x66 |1 + \x67 |1 + \x68 |1 + \x69 |1 + \x6A |1 + \x6B |1 + \x6C |1 + \x6D |1 + \x6E |1 + \x6F |1 + \x70 |1 + \x71 |1 + \x72 |1 + \x73 |1 + \x74 |1 + \x75 |1 + \x76 |1 + \x77 |1 + \x78 |1 + \x79 |1 + \x7A |1 + \x7B |1 + \x7C |1 + \x7D |1 + \x7E |1 +END CHARMAP diff --git a/icuSources/data/mappings/icu-internal-25546.ucm b/icuSources/data/mappings/icu-internal-25546.ucm index 90bc0e20..a7a87c33 100644 --- a/icuSources/data/mappings/icu-internal-25546.ucm +++ b/icuSources/data/mappings/icu-internal-25546.ucm @@ -1,6 +1,6 @@ # ******************************************************************************* # * -# * Copyright (C) 1995-2001, International Business Machines +# * Copyright (C) 1995-2005, International Business Machines # * Corporation and others. All Rights Reserved. # * # ******************************************************************************* @@ -38,6 +38,12 @@ CHARMAP \x0B |0 \x0C |0 \x0D |0 + +# an ISO-2022 converter must not convert SO/SI/ESC (Jitterbug 4268) +# use + \x1A |2 + \x1A |2 + \x10 |0 \x11 |0 \x12 |0 @@ -49,7 +55,12 @@ CHARMAP \x18 |0 \x19 |0 \x1A |0 - \x1B |0 + +# an ISO-2022 converter must not convert SO/SI/ESC (Jitterbug 4268) +# \x1B |0 +# use + \x1A |2 + \x1C |0 \x1D |0 \x1E |0 diff --git a/icuSources/data/mappings/iso-8859_10-1998.ucm b/icuSources/data/mappings/iso-8859_10-1998.ucm index 4c607ec5..4d4c3f81 100644 --- a/icuSources/data/mappings/iso-8859_10-1998.ucm +++ b/icuSources/data/mappings/iso-8859_10-1998.ucm @@ -7,6 +7,8 @@ # Authors: Ken Whistler # # Copyright (c) 1999 Unicode, Inc. All Rights reserved. +# Copyright (C) 2002-2005, International Business Machines +# Corporation and others. All Rights Reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). # No claims are made as to fitness for any particular purpose. No diff --git a/icuSources/data/mappings/iso-8859_11-2001.ucm b/icuSources/data/mappings/iso-8859_11-2001.ucm new file mode 100644 index 00000000..2108f19c --- /dev/null +++ b/icuSources/data/mappings/iso-8859_11-2001.ucm @@ -0,0 +1,301 @@ +# +# Name: ISO/IEC 8859-11:2001 to Unicode +# Unicode version: 3.2 +# Table version: 1.0 +# Table format: Format A +# Date: 2002 October 7 +# Authors: Ken Whistler +# +# Copyright (c) 2002 Unicode, Inc. All Rights reserved. +# Copyright (C) 2002-2005, International Business Machines +# Corporation and others. All Rights Reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-11:2001 characters map into Unicode. +# +# ISO/IEC 8859-11:2001 is equivalent to TIS 620-2533 (1990) with +# the addition of 0xA0 NO-BREAK SPACE. +# +# Format: The ICU UCM format +# +# Version history: +# 2002 October 7 Created +# +# Updated versions of this file may be found in: +# +# +# For any comments or problems, please use the Unicode +# web contact form at: +# http://www.unicode.org/unicode/reporting.html +# + "iso-8859_11-2001" + 1 + 1 + "SBCS" + \x1A +CHARMAP + \x00 |0 + \x01 |0 + \x02 |0 + \x03 |0 + \x04 |0 + \x05 |0 + \x06 |0 + \x07 |0 + \x08 |0 + \x09 |0 + \x0A |0 + \x0B |0 + \x0C |0 + \x0D |0 + \x0E |0 + \x0F |0 + \x10 |0 + \x11 |0 + \x12 |0 + \x13 |0 + \x14 |0 + \x15 |0 + \x16 |0 + \x17 |0 + \x18 |0 + \x19 |0 + \x1A |0 + \x1B |0 + \x1C |0 + \x1D |0 + \x1E |0 + \x1F |0 + \x20 |0 + \x21 |0 + \x22 |0 + \x23 |0 + \x24 |0 + \x25 |0 + \x26 |0 + \x27 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x30 |0 + \x31 |0 + \x32 |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x37 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x3C |0 + \x3D |0 + \x3E |0 + \x3F |0 + \x40 |0 + \x41 |0 + \x42 |0 + \x43 |0 + \x44 |0 + \x45 |0 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x4A |0 + \x4B |0 + \x4C |0 + \x4D |0 + \x4E |0 + \x4F |0 + \x50 |0 + \x51 |0 + \x52 |0 + \x53 |0 + \x54 |0 + \x55 |0 + \x56 |0 + \x57 |0 + \x58 |0 + \x59 |0 + \x5A |0 + \x5B |0 + \x5C |0 + \x5D |0 + \x5E |0 + \x5F |0 + \x60 |0 + \x61 |0 + \x62 |0 + \x63 |0 + \x64 |0 + \x65 |0 + \x66 |0 + \x67 |0 + \x68 |0 + \x69 |0 + \x6A |0 + \x6B |0 + \x6C |0 + \x6D |0 + \x6E |0 + \x6F |0 + \x70 |0 + \x71 |0 + \x72 |0 + \x73 |0 + \x74 |0 + \x75 |0 + \x76 |0 + \x77 |0 + \x78 |0 + \x79 |0 + \x7A |0 + \x7B |0 + \x7C |0 + \x7D |0 + \x7E |0 + \x7F |0 + \x80 |0 + \x81 |0 + \x82 |0 + \x83 |0 + \x84 |0 + \x85 |0 + \x86 |0 + \x87 |0 + \x88 |0 + \x89 |0 + \x8A |0 + \x8B |0 + \x8C |0 + \x8D |0 + \x8E |0 + \x8F |0 + \x90 |0 + \x91 |0 + \x92 |0 + \x93 |0 + \x94 |0 + \x95 |0 + \x96 |0 + \x97 |0 + \x98 |0 + \x99 |0 + \x9A |0 + \x9B |0 + \x9C |0 + \x9D |0 + \x9E |0 + \x9F |0 + \xA0 |0 + \xA1 |0 + \xA2 |0 + \xA3 |0 + \xA4 |0 + \xA5 |0 + \xA6 |0 + \xA7 |0 + \xA8 |0 + \xA9 |0 + \xAA |0 + \xAB |0 + \xAC |0 + \xAD |0 + \xAE |0 + \xAF |0 + \xB0 |0 + \xB1 |0 + \xB2 |0 + \xB3 |0 + \xB4 |0 + \xB5 |0 + \xB6 |0 + \xB7 |0 + \xB8 |0 + \xB9 |0 + \xBA |0 + \xBB |0 + \xBC |0 + \xBD |0 + \xBE |0 + \xBF |0 + \xC0 |0 + \xC1 |0 + \xC2 |0 + \xC3 |0 + \xC4 |0 + \xC5 |0 + \xC6 |0 + \xC7 |0 + \xC8 |0 + \xC9 |0 + \xCA |0 + \xCB |0 + \xCC |0 + \xCD |0 + \xCE |0 + \xCF |0 + \xD0 |0 + \xD1 |0 + \xD2 |0 + \xD3 |0 + \xD4 |0 + \xD5 |0 + \xD6 |0 + \xD7 |0 + \xD8 |0 + \xD9 |0 + \xDA |0 + \xDF |0 + \xE0 |0 + \xE1 |0 + \xE2 |0 + \xE3 |0 + \xE4 |0 + \xE5 |0 + \xE6 |0 + \xE7 |0 + \xE8 |0 + \xE9 |0 + \xEA |0 + \xEB |0 + \xEC |0 + \xED |0 + \xEE |0 + \xEF |0 + \xF0 |0 + \xF1 |0 + \xF2 |0 + \xF3 |0 + \xF4 |0 + \xF5 |0 + \xF6 |0 + \xF7 |0 + \xF8 |0 + \xF9 |0 + \xFA |0 + \xFB |0 +END CHARMAP diff --git a/icuSources/data/mappings/iso-8859_14-1998.ucm b/icuSources/data/mappings/iso-8859_14-1998.ucm new file mode 100644 index 00000000..5bb5ca4b --- /dev/null +++ b/icuSources/data/mappings/iso-8859_14-1998.ucm @@ -0,0 +1,304 @@ +# +# Name: ISO/IEC 8859-14:1998 to Unicode +# Unicode version: 3.0 +# Table version: 1.0 +# Table format: Format A +# Date: 1999 July 27 +# Authors: Markus Kuhn +# Ken Whistler +# +# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. +# Copyright (C) 2002-2005, International Business Machines +# Corporation and others. All Rights Reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-14:1998 characters map into Unicode. +# +# Format: The ICU UCM format +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# + "iso-8859_14-1998" + 1 + 1 + "SBCS" + \x1A +CHARMAP + \x00 |0 + \x01 |0 + \x02 |0 + \x03 |0 + \x04 |0 + \x05 |0 + \x06 |0 + \x07 |0 + \x08 |0 + \x09 |0 + \x0A |0 + \x0B |0 + \x0C |0 + \x0D |0 + \x0E |0 + \x0F |0 + \x10 |0 + \x11 |0 + \x12 |0 + \x13 |0 + \x14 |0 + \x15 |0 + \x16 |0 + \x17 |0 + \x18 |0 + \x19 |0 + \x1A |0 + \x1B |0 + \x1C |0 + \x1D |0 + \x1E |0 + \x1F |0 + \x20 |0 + \x21 |0 + \x22 |0 + \x23 |0 + \x24 |0 + \x25 |0 + \x26 |0 + \x27 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x30 |0 + \x31 |0 + \x32 |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x37 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x3C |0 + \x3D |0 + \x3E |0 + \x3F |0 + \x40 |0 + \x41 |0 + \x42 |0 + \x43 |0 + \x44 |0 + \x45 |0 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x4A |0 + \x4B |0 + \x4C |0 + \x4D |0 + \x4E |0 + \x4F |0 + \x50 |0 + \x51 |0 + \x52 |0 + \x53 |0 + \x54 |0 + \x55 |0 + \x56 |0 + \x57 |0 + \x58 |0 + \x59 |0 + \x5A |0 + \x5B |0 + \x5C |0 + \x5D |0 + \x5E |0 + \x5F |0 + \x60 |0 + \x61 |0 + \x62 |0 + \x63 |0 + \x64 |0 + \x65 |0 + \x66 |0 + \x67 |0 + \x68 |0 + \x69 |0 + \x6A |0 + \x6B |0 + \x6C |0 + \x6D |0 + \x6E |0 + \x6F |0 + \x70 |0 + \x71 |0 + \x72 |0 + \x73 |0 + \x74 |0 + \x75 |0 + \x76 |0 + \x77 |0 + \x78 |0 + \x79 |0 + \x7A |0 + \x7B |0 + \x7C |0 + \x7D |0 + \x7E |0 + \x7F |0 + \x80 |0 + \x81 |0 + \x82 |0 + \x83 |0 + \x84 |0 + \x85 |0 + \x86 |0 + \x87 |0 + \x88 |0 + \x89 |0 + \x8A |0 + \x8B |0 + \x8C |0 + \x8D |0 + \x8E |0 + \x8F |0 + \x90 |0 + \x91 |0 + \x92 |0 + \x93 |0 + \x94 |0 + \x95 |0 + \x96 |0 + \x97 |0 + \x98 |0 + \x99 |0 + \x9A |0 + \x9B |0 + \x9C |0 + \x9D |0 + \x9E |0 + \x9F |0 + \xA0 |0 + \xA3 |0 + \xA7 |0 + \xA9 |0 + \xAD |0 + \xAE |0 + \xB6 |0 + \xC0 |0 + \xC1 |0 + \xC2 |0 + \xC3 |0 + \xC4 |0 + \xC5 |0 + \xC6 |0 + \xC7 |0 + \xC8 |0 + \xC9 |0 + \xCA |0 + \xCB |0 + \xCC |0 + \xCD |0 + \xCE |0 + \xCF |0 + \xD1 |0 + \xD2 |0 + \xD3 |0 + \xD4 |0 + \xD5 |0 + \xD6 |0 + \xD8 |0 + \xD9 |0 + \xDA |0 + \xDB |0 + \xDC |0 + \xDD |0 + \xDF |0 + \xE0 |0 + \xE1 |0 + \xE2 |0 + \xE3 |0 + \xE4 |0 + \xE5 |0 + \xE6 |0 + \xE7 |0 + \xE8 |0 + \xE9 |0 + \xEA |0 + \xEB |0 + \xEC |0 + \xED |0 + \xEE |0 + \xEF |0 + \xF1 |0 + \xF2 |0 + \xF3 |0 + \xF4 |0 + \xF5 |0 + \xF6 |0 + \xF8 |0 + \xF9 |0 + \xFA |0 + \xFB |0 + \xFC |0 + \xFD |0 + \xFF |0 + \xA4 |0 + \xA5 |0 + \xB2 |0 + \xB3 |0 + \xD0 |0 + \xF0 |0 + \xDE |0 + \xFE |0 + \xAF |0 + \xA1 |0 + \xA2 |0 + \xA6 |0 + \xAB |0 + \xB0 |0 + \xB1 |0 + \xB4 |0 + \xB5 |0 + \xB7 |0 + \xB9 |0 + \xBB |0 + \xBF |0 + \xD7 |0 + \xF7 |0 + \xA8 |0 + \xB8 |0 + \xAA |0 + \xBA |0 + \xBD |0 + \xBE |0 + \xAC |0 + \xBC |0 +END CHARMAP diff --git a/icuSources/data/mappings/macos-6_2-10.4.ucm b/icuSources/data/mappings/macos-6_2-10.4.ucm new file mode 100644 index 00000000..7bce2491 --- /dev/null +++ b/icuSources/data/mappings/macos-6_2-10.4.ucm @@ -0,0 +1,338 @@ +# *************************************************************************** +# * +# * Copyright (C) 2001-2005, International Business Machines +# * Corporation and others. All Rights Reserved. +# * +# *************************************************************************** +# +# File created on Sep 26 17:33 PDT 2005 +# +# File created by genucm tool. +# from macos 10.4 using TECCreateConverter +# +# Table Version : 1.0 +# The 1st column is the Unicode scalar value. +# The 2nd column is the codepage byte sequence. +# The 3rd column is the fallback indicator. +# The fallback indicator can have one of the following values: +# |0 for exact 1-1 roundtrip mapping +# |1 for the best fallback codepage byte sequence. +# |2 for the substitution character +# |3 for the best reverse fallback Unicode scaler value +# +# Encoding description: +# Encoding name: X-MAC-GREEK +# + "macos-6_2-10.4" + 1 + 1 + "SBCS" + \x3F + "ASCII" +# Suggested ICU specific alias information +# "macos-6_2_VPUA" + +# +CHARMAP +# +#UNICODE 6_2 +#_______ _________ + \x00 |0 + \x01 |0 + \x02 |0 + \x03 |0 + \x04 |0 + \x05 |0 + \x06 |0 + \x07 |0 + \x08 |0 + \x09 |0 + \x0A |0 + \x0B |0 + \x0C |0 + \x0D |0 + \x0E |0 + \x0F |0 + \x10 |0 + \x11 |0 + \x12 |0 + \x13 |0 + \x14 |0 + \x15 |0 + \x16 |0 + \x17 |0 + \x18 |0 + \x19 |0 + \x1A |0 + \x1B |0 + \x1C |0 + \x1D |0 + \x1E |0 + \x1F |0 + \x20 |0 + \x21 |0 + \x22 |0 + \x23 |0 + \x24 |0 + \x25 |0 + \x26 |0 + \x27 |0 + \x28 |0 + \x29 |0 + \x2A |0 + \x2B |0 + \x2C |0 + \x2D |0 + \x2E |0 + \x2F |0 + \x30 |0 + \x31 |0 + \x32 |0 + \x33 |0 + \x34 |0 + \x35 |0 + \x36 |0 + \x37 |0 + \x38 |0 + \x39 |0 + \x3A |0 + \x3B |0 + \x3C |0 + \x3D |0 + \x3E |0 + \x3F |0 + \x40 |0 + \x41 |0 + \x42 |0 + \x43 |0 + \x44 |0 + \x45 |0 + \x46 |0 + \x47 |0 + \x48 |0 + \x49 |0 + \x4A |0 + \x4B |0 + \x4C |0 + \x4D |0 + \x4E |0 + \x4F |0 + \x50 |0 + \x51 |0 + \x52 |0 + \x53 |0 + \x54 |0 + \x55 |0 + \x56 |0 + \x57 |0 + \x58 |0 + \x59 |0 + \x5A |0 + \x5B |0 + \x5C |0 + \x5D |0 + \x5E |0 + \x5F |0 + \x60 |0 + \x61 |0 + \x62 |0 + \x63 |0 + \x64 |0 + \x65 |0 + \x66 |0 + \x67 |0 + \x68 |0 + \x69 |0 + \x6A |0 + \x6B |0 + \x6C |0 + \x6D |0 + \x6E |0 + \x6F |0 + \x70 |0 + \x71 |0 + \x72 |0 + \x73 |0 + \x74 |0 + \x75 |0 + \x76 |0 + \x77 |0 + \x78 |0 + \x79 |0 + \x7A |0 + \x7B |0 + \x7C |0 + \x7D |0 + \x7E |0 + \x7F |0 + \xCA |0 + \x92 |0 + \xB4 |0 + \x9B |0 + \xAC |0 + \x8C |0 + \xA9 |0 + \xC7 |0 + \xC2 |0 + \xFF |0 + \xA8 |0 + \xAE |0 + \xB1 |0 + \x82 |0 + \x84 |0 + \x8B |1 + \xAF |0 + \x81 |0 + \xC8 |0 + \x97 |0 + \x80 |0 + \x83 |0 + \x85 |0 + \x2A |1 + \x86 |0 + \xA7 |0 + \x88 |0 + \x89 |0 + \x8A |0 + \x8D |0 + \x8F |0 + \x8E |0 + \x90 |0 + \x91 |0 + \x94 |0 + \x95 |0 + \x99 |0 + \x9A |0 + \xD6 |0 + \x9D |0 + \x9E |0 + \x9F |0 + \xCF |0 + \xD4 |1 + \xD5 |1 + \x8B |1 + \x60 |1 + \x60 |1 + \x8B |1 + \x7E |1 + \x8C |1 + \x8B |1 + \xD5 |1 + \xD4 |1 + \x2F |1 + \xD5 |1 + \x87 |1 + \x8B |0 + \x87 |0 + \xCD |0 + \xAF |1 + \xCE |0 + \xD7 |0 + \xD8 |0 + \xD9 |0 + \xDA |0 + \xDF |0 + \xFD |0 + \xB0 |0 + \xB5 |0 + \xA1 |0 + \xA2 |0 + \xB6 |0 + \xB7 |0 + \xB8 |0 + \xA3 |0 + \xB9 |0 + \xBA |0 + \xA4 |0 + \xBB |0 + \xC1 |0 + \xA5 |0 + \xC3 |0 + \xA6 |0 + \xC4 |0 + \xAA |0 + \xC6 |0 + \xCB |0 + \xBC |0 + \xCC |0 + \xBE |0 + \xBF |0 + \xAB |0 + \xBD |0 + \xC0 |0 + \xDB |0 + \xDC |0 + \xDD |0 + \xFE |0 + \xE1 |0 + \xE2 |0 + \xE7 |0 + \xE4 |0 + \xE5 |0 + \xFA |0 + \xE8 |0 + \xF5 |0 + \xE9 |0 + \xEB |0 + \xEC |0 + \xED |0 + \xEE |0 + \xEA |0 + \xEF |0 + \xF0 |0 + \xF2 |0 + \xF7 |0 + \xF3 |0 + \xF4 |0 + \xF9 |0 + \xE6 |0 + \xF8 |0 + \xE3 |0 + \xF6 |0 + \xFB |0 + \xFC |0 + \xDE |0 + \xE0 |0 + \xF1 |0 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x20 |1 + \x2D |1 + \x2D |1 + \xD0 |1 + \xD0 |0 + \xD1 |1 + \xD1 |0 + \xD4 |0 + \xD5 |0 + \xD2 |0 + \xD3 |0 + \xA0 |0 + \x96 |0 + \xC9 |0 + \x0D |1 + \x0D |1 + \x98 |0 + \x9C |0 + \x93 |0 + \x2D |1 + \x2F |1 + \x2A |1 + \x3A |1 + \x7E |1 + \xC5 |0 + \xAD |0 + \xB2 |0 + \xB3 |0 + \xAF |1 + \x9C |1 +# +END CHARMAP +# diff --git a/icuSources/data/mappings/ucmebcdic.mk b/icuSources/data/mappings/ucmebcdic.mk index dbf07944..3976182a 100644 --- a/icuSources/data/mappings/ucmebcdic.mk +++ b/icuSources/data/mappings/ucmebcdic.mk @@ -1,4 +1,4 @@ -# Copyright (c) 1999-2003, International Business Machines Corporation and +# Copyright (c) 1999-2006, International Business Machines Corporation and # others. All Rights Reserved. # A list of EBCDIC UCM's to build # ibm-37 and ibm-1047 are already mentioned in makedata.mak and Makefile.in @@ -22,6 +22,6 @@ ibm-12712_P100-1998.ucm ibm-16804_X110-1999.ucm ibm-273_P100-1995.ucm\ ibm-277_P100-1995.ucm ibm-278_P100-1995.ucm ibm-280_P100-1995.ucm\ ibm-284_P100-1995.ucm ibm-285_P100-1995.ucm ibm-290_P100-1995.ucm\ ibm-297_P100-1995.ucm ibm-420_X120-1999.ucm ibm-424_P100-1995.ucm\ -ibm-4899_P100-1998.ucm ibm-4971_P100-1999.ucm ibm-500_P100-1995.ucm\ -ibm-5123_P100-1999.ucm ibm-803_P100-1999.ucm ibm-8482_P100-1999.ucm\ -ibm-16684_P110-2003.ucm +ibm-4517_P100-2005.ucm ibm-4899_P100-1998.ucm ibm-4971_P100-1999.ucm\ +ibm-500_P100-1995.ucm ibm-5123_P100-1999.ucm ibm-803_P100-1999.ucm\ +ibm-8482_P100-1999.ucm ibm-9067_X100-2005.ucm ibm-16684_P110-2003.ucm diff --git a/icuSources/data/mappings/ucmfiles.mk b/icuSources/data/mappings/ucmfiles.mk index 4be9d860..923411d0 100644 --- a/icuSources/data/mappings/ucmfiles.mk +++ b/icuSources/data/mappings/ucmfiles.mk @@ -1,4 +1,4 @@ -# Copyright (c) 1999-2004, International Business Machines Corporation and +# Copyright (c) 1999-2005, International Business Machines Corporation and # others. All Rights Reserved. # A list of UCM's to build # Note: @@ -27,6 +27,8 @@ UCM_SOURCE_FILES = ibm-367_P100-1995.ucm\ ibm-437_P100-1995.ucm\ +ibm-737_P100-1997.ucm\ +ibm-775_P100-1996.ucm\ ibm-813_P100-1995.ucm\ ibm-850_P100-1995.ucm\ ibm-851_P100-1995.ucm\ @@ -60,6 +62,7 @@ ibm-1129_P100-1997.ucm\ ibm-1131_P100-1997.ucm\ ibm-1133_P100-1997.ucm\ ibm-1162_P100-1999.ucm\ +ibm-1168_P100-2002.ucm\ ibm-1250_P100-1995.ucm\ ibm-1251_P100-1995.ucm\ ibm-1252_P100-2000.ucm\ @@ -70,7 +73,6 @@ ibm-1256_P110-1997.ucm\ ibm-1257_P100-1995.ucm\ ibm-1258_P100-1997.ucm\ ibm-1276_P100-1995.ucm\ -ibm-1277_P100-1995.ucm\ ibm-5351_P100-1998.ucm\ ibm-5353_P100-1998.ucm\ ibm-942_P12A-1999.ucm\ @@ -82,10 +84,14 @@ ibm-964_P110-1999.ucm\ ibm-971_P100-1995.ucm\ ibm-1363_P110-1997.ucm\ ibm-1375_P100-2003.ucm\ -ibm-1381_P110-1999.ucm\ +ibm-9005_X100-2005.ucm\ +ibm-9448_X100-2005.ucm\ ibm-33722_P120-1999.ucm\ +iso-8859_10-1998.ucm\ +iso-8859_11-2001.ucm\ +iso-8859_14-1998.ucm\ macos-0_2-10.2.ucm\ -macos-6-10.2.ucm\ +macos-6_2-10.4.ucm\ macos-7_3-10.2.ucm\ macos-29-10.2.ucm\ macos-35-10.2.ucm\ @@ -94,7 +100,6 @@ windows-874-2000.ucm\ windows-936-2000.ucm\ windows-949-2000.ucm\ windows-950-2000.ucm\ -windows-1256-2000.ucm\ ibm-897_P100-1995.ucm jisx-208.ucm jisx-212.ucm\ iso-ir-165.ucm cns-11643-1992.ucm\ ibm-5478_P100-1995.ucm\ diff --git a/icuSources/data/mappings/ucmlocal.mk b/icuSources/data/mappings/ucmlocal.mk index a1d75973..65d1839b 100644 --- a/icuSources/data/mappings/ucmlocal.mk +++ b/icuSources/data/mappings/ucmlocal.mk @@ -1,11 +1,7 @@ # # Local Apple addition for mapping resources -# Copyright (c) 2004 Apple Computer, Inc. All rights reserved. +# Copyright (c) 2004-2007 Apple Inc. All rights reserved. # -UCM_SOURCE_LOCAL = ibm-1168_P100-2002.ucm\ -ibm-737_P100-1997.ucm\ -ibm-775_P100-1996.ucm\ -iso-8859_10-1998.ucm\ -iso-8859_16-2001.ucm - +UCM_SOURCE_LOCAL = iso-8859_10-1998.ucm\ + iso-8859_16-2001.ucm diff --git a/icuSources/data/misc/CurrencyData.txt b/icuSources/data/misc/CurrencyData.txt index 3d715ea3..e30fbf19 100644 --- a/icuSources/data/misc/CurrencyData.txt +++ b/icuSources/data/misc/CurrencyData.txt @@ -1,10 +1,10 @@ // *************************************************************************** // * -// * Copyright (C) 1997-2004, International Business Machines +// * Copyright (C) 1997-2006, International Business Machines // * Corporation and others. All Rights Reserved. // * // *************************************************************************** -CurrencyData{ +CurrencyData:table(nofallback){ // Currency metadata. Unlike the "Currencies" element, this is // NOT true locale data. It exists only in root. The two // integers are the fraction digits for each currency, and the @@ -23,6 +23,7 @@ CurrencyData{ CLF:intvector { 0, 0 } // Unidades de fomento: CHILE (CL) CLP:intvector { 0, 0 } // Chilean Peso: CHILE (CL) DJF:intvector { 0, 0 } // Djibouti Franc: DJIBOUTI (DJ) + ESP:intvector { 0, 0 } // Spanish Pesenta: Spain (ES) GNF:intvector { 0, 0 } // Guinea Franc: GUINEA (GN) IQD:intvector { 3, 0 } // Iraqi Dinar: IRAQ (IQ) ITL:intvector { 0, 0 } // Italian Lira: ITALY (IT) @@ -31,7 +32,9 @@ CurrencyData{ KMF:intvector { 0, 0 } // Comoro Franc: COMOROS (KM) KRW:intvector { 0, 0 } // Won: KOREA, REPUBLIC OF (KR) KWD:intvector { 3, 0 } // Kuwaiti Dinar: KUWAIT (KW) + LUF:intvector { 0, 0 } // LUXEMBOURG Franc: LUXEMBOURG (LU) LYD:intvector { 3, 0 } // Lybian Dinar: LIBYAN ARAB JAMAHIRIYA (LY) + MGA:intvector { 0, 0 } // Malagascy Ariary: MADAGASCAR (MG) MGF:intvector { 0, 0 } // Malagasy Franc: MADAGASCAR (MG) OMR:intvector { 3, 0 } // Rial Omani: OMAN (OM) PYG:intvector { 0, 0 } // Guarani: PARAGUAY (PY) @@ -49,6 +52,7 @@ CurrencyData{ // Last update: Tue Apr 8 16:57:42 2003 CurrencyMap { _EURO { "EUR" } // : Euro + AD { "EUR" } // ANDORRA: UAE Euro AE { "AED" } // UNITED ARAB EMIRATES: UAE Dirham AF { "AFN" } // AFGHANISTAN: Afghani AG { "XCD" } // ANTIGUA AND BARBUDA: East Caribbean Dollar @@ -63,7 +67,8 @@ CurrencyData{ AT_PREEURO { "ATS" } AU { "AUD" } // AUSTRALIA: Australian Dollar AW { "AWG" } // ARUBA: Aruban Guilder - AZ { "AZM" } // AZERBAIJAN: Azerbaijanian Manat + AX { "EUR" } // Aland Islands: Euro + AZ { "AZN" } // AZERBAIJAN: Azerbaijanian Manat BA { "BAM" } // BOSNIA AND HERZEGOVINA: Convertible Marks BB { "BBD" } // BARBADOS: Barbados Dollar BD { "BDT" } // BANGLADESH: Taka @@ -96,6 +101,8 @@ CurrencyData{ CN { "CNY" } // CHINA: Yuan Renminbi CO { "COP" } // COLOMBIA: Colombian Peso CR { "CRC" } // COSTA RICA: Costa Rican Colon + CS { "EUR" } // MONTENEGRO: Euro + CS_PREEURO { "CSD" } // SERBIA: Serbian Dinar CU { "CUP" } // CUBA: Cuban Peso CV { "CVE" } // CAPE VERDE: Cape Verde Escudo CX { "AUD" } // CHRISTMAS ISLAND: Australian Dollar @@ -129,6 +136,7 @@ CurrencyData{ GD { "XCD" } // GRENADA: East Caribbean Dollar GE { "GEL" } // GEORGIA: Lari GF { "EUR" } // FRENCH GUIANA: Euro + GG { "GBP" } // GUERNSEY: Pound Sterling GH { "GHC" } // GHANA: Cedi GI { "GIP" } // GIBRALTAR: Gibraltar Pound GL { "DKK" } // GREENLAND: Danish Krone @@ -138,18 +146,22 @@ CurrencyData{ GQ { "XAF" } // EQUATORIAL GUINEA: CFA Franc BEAC GR { "EUR" } // GREECE: Euro GR_PREEURO { "GRD" } + GS { "GBP" } // SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS: British Pound GT { "GTQ" } // GUATEMALA: Quetzal GU { "USD" } // GUAM: US Dollar + GW { "GWP" } // GUINEA-BISSAU: Guinea-Bissau Peso GY { "GYD" } // GUYANA: Guyana Dollar HK { "HKD" } // HONG KONG: Hong Kong Dollar HM { "AUD" } // HEARD ISLAND AND MCDONALD ISLANDS: Australian Dollar HN { "HNL" } // HONDURAS: Lempira HR { "HRK" } // CROATIA: Croatian kuna + HT { "HTG" } // HAITI: Gourde HU { "HUF" } // HUNGARY: Forint ID { "IDR" } // INDONESIA: Rupiah IE { "EUR" } // IRELAND: Euro IE_PREEURO { "IEP" } IL { "ILS" } // ISRAEL: New Israeli Sheqel + IM { "GBP" } // ISLE OF MAN: Pound Sterling IN { "INR" } // INDIA: Indian Rupee IO { "USD" } // BRITISH INDIAN OCEAN TERRITORY: US Dollar IQ { "IQD" } // IRAQ: Iraqi Dinar @@ -157,6 +169,7 @@ CurrencyData{ IS { "ISK" } // ICELAND: Iceland Krona IT { "EUR" } // ITALY: Euro IT_PREEURO { "ITL" } + JE { "GBP" } // JERSEY: Pound Sterling JM { "JMD" } // JAMAICA: Jamaican Dollar JO { "JOD" } // JORDAN: Jordanian Dinar JP { "JPY" } // JAPAN: Yen @@ -177,6 +190,7 @@ CurrencyData{ LI { "CHF" } // LIECHTENSTEIN: Swiss Franc LK { "LKR" } // SRI LANKA: Sri Lanka Rupee LR { "LRD" } // LIBERIA: Liberian Dollar + LS { "ZAR" } // LESOTHO: Rand LT { "LTL" } // LITHUANIA: Lithuanian Litas LU { "EUR" } // LUXEMBOURG: Euro LU_PREEURO { "LUF" } @@ -185,7 +199,7 @@ CurrencyData{ MA { "MAD" } // MOROCCO: Moroccan Dirham MC { "EUR" } // MONACO: Euro MD { "MDL" } // MOLDOVA, REPUBLIC OF: Moldovan Leu - MG { "MGF" } // MADAGASCAR: Malagasy Franc + MG { "MGA" } // MADAGASCAR: Malagasy Ariary MH { "USD" } // MARSHALL ISLANDS: US Dollar MK { "MKD" } // MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF: Denar ML { "XOF" } // MALI: CFA Franc BCEAO @@ -202,7 +216,8 @@ CurrencyData{ MW { "MWK" } // MALAWI: Kwacha MX { "MXN" } // MEXICO: Mexican Peso MY { "MYR" } // MALAYSIA: Malaysian Ringgit - MZ { "MZM" } // MOZAMBIQUE: Metical + MZ { "MZN" } // MOZAMBIQUE: Metical + NA { "ZAR" } // NAMIBIA: Rand NC { "XPF" } // NEW CALEDONIA: CFP Franc NE { "XOF" } // NIGER: CFA Franc BCEAO NF { "AUD" } // NORFOLK ISLAND: Australian Dollar @@ -232,7 +247,7 @@ CurrencyData{ PY { "PYG" } // PARAGUAY: Guarani QA { "QAR" } // QATAR: Qatari Rial RE { "EUR" } // REUNION: Euro - RO { "ROL" } // ROMANIA: Leu + RO { "RON" } // ROMANIA: Leu RU { "RUB" } // RUSSIAN FEDERATION: Russian Ruble RW { "RWF" } // RWANDA: Rwanda Franc SA { "SAR" } // SAUDI ARABIA: Saudi Riyal @@ -242,14 +257,15 @@ CurrencyData{ SE { "SEK" } // SWEDEN: Swedish Krona SG { "SGD" } // SINGAPORE: Singapore Dollar SH { "SHP" } // SAINT HELENA: Saint Helena Pound - SI { "SIT" } // SLOVENIA: Tolar + SI { "EUR" } // SLOVENIA: Euro + SI_PREEURO { "SIT" } // SLOVENIA: Tolar SJ { "NOK" } // SVALBARD AND JAN MAYEN: Norwegian Krone SK { "SKK" } // SLOVAKIA: Slovak Koruna SL { "SLL" } // SIERRA LEONE: Leone SM { "EUR" } // SAN MARINO: Euro SN { "XOF" } // SENEGAL: CFA Franc BCEAO SO { "SOS" } // SOMALIA: Somali Shilling - SR { "SRG" } // SURINAME: Suriname Guilder + SR { "SRD" } // SURINAME: Surinam Dollar ST { "STD" } // SAO TOME AND PRINCIPE: Dobra SV { "SVC" } // EL SALVADOR: El Salvador Colon SY { "SYP" } // SYRIAN ARAB REPUBLIC: Syrian Pound @@ -265,7 +281,7 @@ CurrencyData{ TM { "TMM" } // TURKMENISTAN: Manat TN { "TND" } // TUNISIA: Tunisian Dinar TO { "TOP" } // TONGA: Pa'anga - TR { "TRY" } // TURKEY: New Turkish Lira + TR { "TRY" } // TURKEY: Turkish Lira TT { "TTD" } // TRINIDAD AND TOBAGO: Trinidad and Tobago Dollar TV { "AUD" } // TUVALU: Australian Dollar TW { "TWD" } // TAIWAN, PROVINCE OF CHINA: New Taiwan Dollar diff --git a/icuSources/data/misc/icudata.rc b/icuSources/data/misc/icudata.rc index 2e88fc79..ffc840cc 100644 --- a/icuSources/data/misc/icudata.rc +++ b/icuSources/data/misc/icudata.rc @@ -1,6 +1,6 @@ //Do not edit with Microsoft Developer Studio because it will modify this //script in the wrong way. -// Copyright (c) 2001-2004 International Business Machines +// Copyright (c) 2001-2005 International Business Machines // Corporation and others. All Rights Reserved. // #define APSTUDIO_READONLY_SYMBOLS @@ -19,7 +19,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #pragma code_page(1252) -#include "unicode\utypes.h" +#include "msvcres.h" ///////////////////////////////////////////////////////////////////////////// // @@ -29,8 +29,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 + FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM + PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -45,15 +45,15 @@ BEGIN BEGIN BLOCK "00000000" BEGIN - VALUE "Comments", "http://oss.software.ibm.com/icu/\0" + VALUE "Comments", ICU_WEBSITE "\0" VALUE "CompanyName", "IBM Corporation and others\0" VALUE "FileDescription", "ICU Data DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" VALUE "OriginalFilename", "icudt" U_ICU_VERSION_SHORT ".dll\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "SpecialBuild", "\0" END END diff --git a/icuSources/data/misc/supplementalData.txt b/icuSources/data/misc/supplementalData.txt new file mode 100644 index 00000000..fc8d8b38 --- /dev/null +++ b/icuSources/data/misc/supplementalData.txt @@ -0,0 +1,8028 @@ +// *************************************************************************** +// * +// * Copyright (C) 2006 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File:/supplementalData.xml +// * +// *************************************************************************** +supplementalData:table(nofallback){ + /** + * Map from ISO 3166 country codes to ISO 4217 currency codes + * NOTE: This is not true locale data; it exists only in ROOT + */ + CurrencyMap{ + 830{ + { + id{"GBP"} + from:intvector{ + -2028, + -1467671008, + } + } + } + 833{ + { + id{"GBP"} + from:intvector{ + -2028, + -1467671008, + } + } + } + AD{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"ESP"} + from:intvector{ + -713, + 1357682048, + } + to:intvector{ + 235, + -1407361856, + } + } + { + id{"FRF"} + from:intvector{ + -74, + -2057727392, + } + to:intvector{ + 235, + 1937205440, + } + } + { + id{"ADP"} + from:intvector{ + -250, + 769024000, + } + to:intvector{ + 228, + 1676176512, + } + } + } + AE{ + { + id{"AED"} + from:intvector{ + 22, + 1789419488, + } + } + } + AF{ + { + id{"AFN"} + from:intvector{ + 235, + 1073685440, + } + } + { + id{"AFA"} + from:intvector{ + -316, + 1363445536, + } + to:intvector{ + 235, + -1147561856, + } + } + } + AG{ + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + } + } + AI{ + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + } + } + AL{ + { + id{"ALL"} + from:intvector{ + -37, + -1822297344, + } + } + } + AM{ + { + id{"AMD"} + from:intvector{ + 169, + 1840786976, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 169, + 1840786976, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + AN{ + { + id{"ANG"} + from:intvector{ + -221, + -1071694880, + } + } + } + AO{ + { + id{"AOA"} + from:intvector{ + 213, + 1387085952, + } + } + { + id{"AOR"} + from:intvector{ + 183, + -1326362464, + } + to:intvector{ + 220, + 1820914880, + } + } + { + id{"AON"} + from:intvector{ + 147, + 1894747488, + } + to:intvector{ + 220, + 1820914880, + } + } + { + id{"AOK"} + from:intvector{ + 51, + -1779839392, + } + to:intvector{ + 154, + 1292016416, + } + } + } + AQ{ + { + } + } + AR{ + { + id{"ARS"} + from:intvector{ + 161, + -1531841952, + } + } + { + id{"ARA"} + from:intvector{ + 110, + 2091557440, + } + to:intvector{ + 161, + -1531841952, + } + } + { + id{"ARP"} + from:intvector{ + 95, + -2060500416, + } + to:intvector{ + 110, + 2091557440, + } + } + } + AS{ + { + id{"USD"} + from:intvector{ + -485, + 1535958560, + } + } + } + AT{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"ATS"} + from:intvector{ + -169, + 291793024, + } + to:intvector{ + 235, + -1407361856, + } + } + } + AU{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + AW{ + { + id{"AWG"} + from:intvector{ + 117, + -1855680928, + } + } + { + id{"ANG"} + from:intvector{ + -221, + -1071694880, + } + to:intvector{ + 117, + -1855680928, + } + } + } + AX{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + } + AZ{ + { + id{"AZN"} + from:intvector{ + 264, + -2063873440, + } + } + { + id{"AZM"} + from:intvector{ + 169, + 1840786976, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 176, + 1497015904, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + BA{ + { + id{"BAM"} + from:intvector{ + 183, + -1326722464, + } + } + { + id{"BAD"} + from:intvector{ + 161, + -1531481952, + } + to:intvector{ + 198, + 1702495392, + } + } + { + id{"YUN"} + from:intvector{ + 146, + -179332512, + } + to:intvector{ + 161, + -1531481952, + } + } + { + id{"YUD"} + from:intvector{ + -30, + -1647488416, + } + to:intvector{ + 146, + -179332512, + } + } + } + BB{ + { + id{"BBD"} + from:intvector{ + 22, + 407439488, + } + } + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + to:intvector{ + 22, + 407439488, + } + } + } + BD{ + { + id{"BDT"} + from:intvector{ + 14, + -1323649440, + } + } + { + id{"PKR"} + from:intvector{ + -162, + 1503341952, + } + to:intvector{ + 14, + -1323649440, + } + } + { + id{"INR"} + from:intvector{ + -992, + 1804437632, + } + to:intvector{ + -162, + 1503341952, + } + } + } + BE{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"BEF"} + from:intvector{ + -1022, + -736270784, + } + to:intvector{ + 235, + -1407361856, + } + } + { + id{"NLG"} + from:intvector{ + -1132, + -983668224, + } + to:intvector{ + -1022, + -736270784, + } + } + } + BF{ + { + id{"XOF"} + from:intvector{ + 102, + -329951488, + } + } + } + BG{ + { + id{"BGN"} + from:intvector{ + 213, + 695585952, + } + } + { + id{"BGL"} + from:intvector{ + -59, + 971130464, + } + to:intvector{ + 213, + 695585952, + } + } + } + BH{ + { + id{"BHD"} + from:intvector{ + -37, + -1822177344, + } + } + } + BI{ + { + id{"BIF"} + from:intvector{ + -44, + 1174061024, + } + } + } + BJ{ + { + id{"XOF"} + from:intvector{ + 37, + 1387670048, + } + } + } + BM{ + { + id{"BMD"} + from:intvector{ + 0, + 460920000, + } + } + } + BN{ + { + id{"BND"} + from:intvector{ + -22, + 774440512, + } + } + { + id{"MYR"} + from:intvector{ + -52, + -556127904, + } + to:intvector{ + -22, + 774440512, + } + } + } + BO{ + { + id{"BOB"} + from:intvector{ + 124, + -384452000, + } + } + { + id{"BOP"} + from:intvector{ + -52, + -1852607904, + } + to:intvector{ + 118, + 736979072, + } + } + } + BR{ + { + id{"BRL"} + from:intvector{ + 176, + 1497375904, + } + } + { + id{"BRR"} + from:intvector{ + 169, + 26206976, + } + to:intvector{ + 176, + 1497375904, + } + } + { + id{"BRE"} + from:intvector{ + 147, + 1116787488, + } + to:intvector{ + 169, + 26206976, + } + } + { + id{"BRN"} + from:intvector{ + 139, + -440961440, + } + to:intvector{ + 147, + 1116787488, + } + } + { + id{"BRC"} + from:intvector{ + 118, + 477179072, + } + to:intvector{ + 139, + -440961440, + } + } + { + id{"BRB"} + from:intvector{ + -22, + 860600512, + } + to:intvector{ + 118, + 477179072, + } + } + } + BS{ + { + id{"BSD"} + from:intvector{ + -29, + 426351584, + } + } + } + BT{ + { + id{"INR"} + from:intvector{ + -463, + 444658048, + } + } + { + id{"BTN"} + from:intvector{ + 29, + -1297178880, + } + } + } + BV{ + { + id{"NOK"} + from:intvector{ + -478, + -1979039808, + } + } + } + BW{ + { + id{"BWP"} + from:intvector{ + 44, + -2041048320, + } + } + { + id{"ZAR"} + from:intvector{ + -66, + 623161536, + } + to:intvector{ + 44, + -2041048320, + } + } + } + BY{ + { + id{"BYR"} + from:intvector{ + 220, + 1820854880, + } + } + { + id{"BYB"} + from:intvector{ + 176, + 1497435904, + } + to:intvector{ + 221, + 118547584, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 176, + 2102415904, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + BZ{ + { + id{"BZD"} + from:intvector{ + 29, + 1705208416, + } + } + } + CA{ + { + id{"CAD"} + from:intvector{ + -823, + 418544608, + } + } + } + CC{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + CD{ + { + id{"CDF"} + from:intvector{ + 205, + -1121242976, + } + } + { + id{"ZRN"} + from:intvector{ + 169, + 26386976, + } + to:intvector{ + 205, + -1121242976, + } + } + { + id{"ZRZ"} + from:intvector{ + 7, + -547938368, + } + to:intvector{ + 169, + 26386976, + } + } + } + CF{ + { + id{"XAF"} + from:intvector{ + 169, + 25786976, + } + } + } + CG{ + { + id{"XAF"} + from:intvector{ + 169, + 25726976, + } + } + } + CH{ + { + id{"CHF"} + from:intvector{ + -1257, + -311696224, + } + } + } + CI{ + { + id{"XOF"} + from:intvector{ + -89, + -445357952, + } + } + } + CK{ + { + id{"NZD"} + from:intvector{ + -22, + 601700512, + } + } + } + CL{ + { + id{"CLP"} + from:intvector{ + 37, + 1301150048, + } + } + } + CM{ + { + id{"XAF"} + from:intvector{ + 22, + 234159488, + } + } + } + CN{ + { + id{"CNY"} + from:intvector{ + -125, + 442292000, + } + } + } + CO{ + { + id{"COP"} + from:intvector{ + -478, + 1797167488, + } + } + } + CR{ + { + id{"CRC"} + from:intvector{ + -544, + -866158272, + } + } + } + CS{ + { + id{"EUR"} + from:intvector{ + 242, + -2009732928, + } + } + { + id{"CSD"} + from:intvector{ + 235, + 1764585440, + } + } + { + id{"YUM"} + from:intvector{ + 176, + -810751392, + } + to:intvector{ + 235, + 1764585440, + } + } + } + CU{ + { + id{"CUP"} + from:intvector{ + -816, + 1889773536, + } + } + { + id{"USD"} + from:intvector{ + -522, + 1473328512, + } + to:intvector{ + -81, + 765950976, + } + } + } + CV{ + { + id{"CVE"} + from:intvector{ + -412, + -1968781344, + } + } + { + id{"PTE"} + from:intvector{ + -434, + -359260832, + } + to:intvector{ + 36, + -772569952, + } + } + } + CX{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + CY{ + { + id{"CYP"} + from:intvector{ + -412, + -1190701344, + } + } + } + CZ{ + { + id{"CZK"} + from:intvector{ + 169, + 25786976, + } + } + { + id{"CSK"} + from:intvector{ + -125, + 442472000, + } + to:intvector{ + 169, + 25906976, + } + } + } + DE{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"DEM"} + from:intvector{ + -162, + -1149905344, + } + to:intvector{ + 235, + -1407361856, + } + } + } + DJ{ + { + id{"DJF"} + from:intvector{ + 51, + -137939392, + } + } + } + DK{ + { + id{"DKK"} + from:intvector{ + -713, + -690585248, + } + } + } + DM{ + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + } + } + DO{ + { + id{"DOP"} + from:intvector{ + -169, + 32473024, + } + } + { + id{"USD"} + from:intvector{ + -478, + -769439808, + } + to:intvector{ + -169, + 32473024, + } + } + } + DZ{ + { + id{"DZD"} + from:intvector{ + -45, + -381198976, + } + } + } + EC{ + { + id{"USD"} + from:intvector{ + 220, + 1907794880, + } + } + { + id{"ECS"} + from:intvector{ + -632, + 534371072, + } + to:intvector{ + 220, + 1907794880, + } + } + } + EE{ + { + id{"EEK"} + from:intvector{ + 162, + 196458048, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 162, + 110058048, + } + } + } + EG{ + { + id{"EGP"} + from:intvector{ + -625, + -1079347296, + } + } + } + EH{ + { + id{"MAD"} + from:intvector{ + 44, + -1782208320, + } + } + } + ER{ + { + id{"ERN"} + from:intvector{ + 198, + -1987431904, + } + } + } + ES{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"ESP"} + from:intvector{ + -750, + -320495296, + } + to:intvector{ + 235, + -1407361856, + } + } + } + ET{ + { + id{"ETB"} + from:intvector{ + 44, + 1562778976, + } + } + } + FI{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FIM"} + from:intvector{ + -52, + -1852607904, + } + to:intvector{ + 235, + -1407361856, + } + } + } + FJ{ + { + id{"FJD"} + from:intvector{ + -8, + -405568928, + } + } + } + FK{ + { + id{"FKP"} + from:intvector{ + -507, + 120819072, + } + } + } + FM{ + { + id{"USD"} + from:intvector{ + -192, + -176846464, + } + } + { + id{"JPY"} + from:intvector{ + -412, + -1795441344, + } + to:intvector{ + -192, + -176846464, + } + } + } + FO{ + { + id{"DKK"} + from:intvector{ + -713, + -690585248, + } + } + } + FR{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + -74, + -2057727392, + } + to:intvector{ + 235, + 1937205440, + } + } + } + GA{ + { + id{"XAF"} + from:intvector{ + 169, + 25786976, + } + } + } + GB{ + { + id{"GBP"} + from:intvector{ + -2028, + -1467671008, + } + } + } + GD{ + { + id{"XCD"} + from:intvector{ + -22, + 2070200512, + } + } + } + GE{ + { + id{"GEL"} + from:intvector{ + 184, + 574557536, + } + } + { + id{"GEK"} + from:intvector{ + 169, + 371566976, + } + to:intvector{ + 184, + 747357536, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 169, + 890086976, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + GF{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + -74, + -2057727392, + } + to:intvector{ + 235, + 1937205440, + } + } + } + GH{ + { + id{"GHC"} + from:intvector{ + 66, + 1249138464, + } + } + } + GI{ + { + id{"GIP"} + from:intvector{ + -1889, + -1185345152, + } + } + } + GL{ + { + id{"DKK"} + from:intvector{ + -713, + -690585248, + } + } + } + GM{ + { + id{"GMD"} + from:intvector{ + 7, + 1500448928, + } + } + } + GN{ + { + id{"GNF"} + from:intvector{ + 117, + -1423680928, + } + } + { + id{"GNS"} + from:intvector{ + 14, + -1236709440, + } + to:intvector{ + 117, + -1423680928, + } + } + } + GP{ + { + id{"EUR"} + from:intvector{ + 213, + 349565952, + } + } + { + id{"FRF"} + from:intvector{ + -74, + -2057727392, + } + to:intvector{ + 235, + 1937205440, + } + } + } + GQ{ + { + id{"XAF"} + from:intvector{ + 169, + 25786976, + } + } + { + id{"GQE"} + from:intvector{ + 36, + -599769952, + } + to:intvector{ + 117, + -1855380928, + } + } + } + GR{ + { + id{"EUR"} + from:intvector{ + 227, + -916483488, + } + } + { + id{"GRD"} + from:intvector{ + -118, + 1913640928, + } + to:intvector{ + 235, + -1407361856, + } + } + } + GS{ + { + id{"GBP"} + from:intvector{ + -456, + 1915886976, + } + } + } + GT{ + { + id{"GTQ"} + from:intvector{ + -331, + -455692320, + } + } + } + GU{ + { + id{"USD"} + from:intvector{ + -191, + 1551633536, + } + } + } + GW{ + { + id{"GWP"} + from:intvector{ + 44, + -1609408320, + } + } + { + id{"XOF"} + from:intvector{ + 198, + 1702135392, + } + } + { + id{"GWE"} + from:intvector{ + -412, + -1968781344, + } + to:intvector{ + 44, + -1609408320, + } + } + } + GY{ + { + id{"GYD"} + from:intvector{ + -29, + 512751584, + } + } + } + HK{ + { + id{"HKD"} + from:intvector{ + -552, + -116499904, + } + } + } + HM{ + { + id{"AUD"} + from:intvector{ + -22, + 1119800512, + } + } + } + HN{ + { + id{"HNL"} + from:intvector{ + -324, + -1058123392, + } + } + } + HR{ + { + id{"HRK"} + from:intvector{ + 176, + -292111392, + } + } + { + id{"HRD"} + from:intvector{ + 154, + -1101610880, + } + to:intvector{ + 183, + -1326722464, + } + } + { + id{"YUN"} + from:intvector{ + 146, + -179332512, + } + to:intvector{ + 154, + -1101610880, + } + } + { + id{"YUD"} + from:intvector{ + -30, + -1647488416, + } + to:intvector{ + 146, + -179332512, + } + } + } + HT{ + { + id{"HTG"} + from:intvector{ + -720, + 1960533120, + } + } + { + id{"USD"} + from:intvector{ + -405, + -497612416, + } + } + } + HU{ + { + id{"HUF"} + from:intvector{ + -176, + 461864096, + } + } + } + ID{ + { + id{"IDR"} + from:intvector{ + -37, + -2081257344, + } + } + } + IE{ + { + id{"EUR"} + from:intvector{ + 213, + 349565952, + } + } + { + id{"IEP"} + from:intvector{ + -353, + 1387455488, + } + to:intvector{ + 235, + 1246005440, + } + } + { + id{"GBP"} + from:intvector{ + -1250, + -223047296, + } + to:intvector{ + -353, + 1387455488, + } + } + } + IL{ + { + id{"ILS"} + from:intvector{ + 110, + 1227737440, + } + } + { + id{"ILP"} + from:intvector{ + -162, + -1495385344, + } + to:intvector{ + 73, + -451459904, + } + } + } + IN{ + { + id{"INR"} + from:intvector{ + -992, + 1804437632, + } + } + } + IO{ + { + id{"USD"} + from:intvector{ + -37, + 1781649952, + } + } + { + id{"GBP"} + from:intvector{ + -37, + 1781649952, + } + } + } + IQ{ + { + id{"IQD"} + from:intvector{ + -287, + -823113344, + } + } + { + id{"EGP"} + from:intvector{ + -368, + -776742368, + } + to:intvector{ + -287, + -823113344, + } + } + { + id{"INR"} + from:intvector{ + -368, + -776742368, + } + to:intvector{ + -287, + -823113344, + } + } + } + IR{ + { + id{"IRR"} + from:intvector{ + -279, + 129775584, + } + } + } + IS{ + { + id{"ISK"} + from:intvector{ + 80, + -708290976, + } + } + { + id{"DKK"} + from:intvector{ + -713, + -690585248, + } + to:intvector{ + -383, + -291772928, + } + } + } + IT{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"ITL"} + from:intvector{ + -794, + -212454272, + } + to:intvector{ + 235, + -1407361856, + } + } + } + JM{ + { + id{"JMD"} + from:intvector{ + -8, + -837088928, + } + } + } + JO{ + { + id{"JOD"} + from:intvector{ + -147, + 237412512, + } + } + } + JP{ + { + id{"JPY"} + from:intvector{ + -728, + -1670815808, + } + } + } + KE{ + { + id{"KES"} + from:intvector{ + -30, + -523808416, + } + } + } + KG{ + { + id{"KGS"} + from:intvector{ + 169, + 803626976, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 169, + 803626976, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + KH{ + { + id{"KHR"} + from:intvector{ + 73, + -624199904, + } + } + } + KI{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + KM{ + { + id{"KMF"} + from:intvector{ + 36, + -686169952, + } + } + } + KN{ + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + } + } + KP{ + { + id{"KPW"} + from:intvector{ + -81, + -2146376320, + } + } + } + KR{ + { + id{"KRW"} + from:intvector{ + -59, + 1749030464, + } + } + } + KW{ + { + id{"KWD"} + from:intvector{ + -67, + -499918464, + } + } + } + KY{ + { + id{"KYD"} + from:intvector{ + 7, + 1500028928, + } + } + { + id{"JMD"} + from:intvector{ + -8, + -837088928, + } + to:intvector{ + 7, + 1500028928, + } + } + } + KZ{ + { + id{"KZT"} + from:intvector{ + 169, + 371986976, + } + } + } + LA{ + { + id{"LAK"} + from:intvector{ + 66, + 1336078464, + } + } + } + LB{ + { + id{"LBP"} + from:intvector{ + -162, + 1589621952, + } + } + } + LC{ + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + } + } + LI{ + { + id{"CHF"} + from:intvector{ + -361, + -83653440, + } + } + } + LK{ + { + id{"LKR"} + from:intvector{ + 59, + 901229536, + } + } + } + LR{ + { + id{"LRD"} + from:intvector{ + -192, + -176786464, + } + } + } + LS{ + { + id{"ZAR"} + from:intvector{ + -66, + 623161536, + } + } + { + id{"LSL"} + from:intvector{ + 73, + -451519904, + } + } + } + LT{ + { + id{"LTL"} + from:intvector{ + 169, + 2099686976, + } + } + { + id{"LTT"} + from:intvector{ + 161, + -1531301952, + } + to:intvector{ + 169, + 2099686976, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 161, + -1531301952, + } + } + } + LU{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"LUF"} + from:intvector{ + -191, + 82893536, + } + to:intvector{ + 235, + -1407361856, + } + } + } + LV{ + { + id{"LVL"} + from:intvector{ + 169, + -1936080320, + } + } + { + id{"LVR"} + from:intvector{ + 161, + -1013201952, + } + to:intvector{ + 169, + 1408726976, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 162, + 110118048, + } + } + } + LY{ + { + id{"LYD"} + from:intvector{ + 7, + 1500568928, + } + } + } + MA{ + { + id{"MAD"} + from:intvector{ + -81, + -2146016320, + } + } + } + MC{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + -74, + -2057727392, + } + to:intvector{ + 235, + 1937205440, + } + } + } + MD{ + { + id{"MDL"} + from:intvector{ + 169, + -1849380320, + } + } + } + MG{ + { + id{"MGA"} + from:intvector{ + 95, + -2060200416, + } + } + { + id{"MGF"} + from:intvector{ + -52, + -1852247904, + } + to:intvector{ + 250, + 1708436000, + } + } + } + MH{ + { + id{"USD"} + from:intvector{ + -192, + -176846464, + } + } + } + MK{ + { + id{"MKD"} + from:intvector{ + 169, + 1667626976, + } + } + } + ML{ + { + id{"XOF"} + from:intvector{ + 102, + -589271488, + } + } + { + id{"MLF"} + from:intvector{ + -59, + 1057890464, + } + to:intvector{ + 103, + 2002848512, + } + } + { + id{"XOF"} + from:intvector{ + -88, + 1282582048, + } + to:intvector{ + -59, + 1057890464, + } + } + } + MM{ + { + id{"MMK"} + from:intvector{ + 139, + -181461440, + } + } + { + id{"BUK"} + from:intvector{ + -133, + -1115096928, + } + to:intvector{ + 139, + -181461440, + } + } + } + MN{ + { + id{"MNT"} + from:intvector{ + -405, + -497432416, + } + } + } + MO{ + { + id{"MOP"} + from:intvector{ + -507, + 120819072, + } + } + } + MP{ + { + id{"USD"} + from:intvector{ + -192, + -176846464, + } + } + } + MQ{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + -74, + -2057727392, + } + to:intvector{ + 235, + 1937205440, + } + } + } + MR{ + { + id{"MRO"} + from:intvector{ + 22, + -1641487808, + } + } + { + id{"XOF"} + from:intvector{ + -88, + 1628182048, + } + to:intvector{ + 22, + -1641487808, + } + } + } + MS{ + { + id{"XCD"} + from:intvector{ + -22, + 2070200512, + } + } + } + MT{ + { + id{"MTL"} + from:intvector{ + -15, + 1813669440, + } + } + { + id{"MTP"} + from:intvector{ + -412, + -931561344, + } + to:intvector{ + -15, + 1813669440, + } + } + } + MU{ + { + id{"MUR"} + from:intvector{ + -265, + 2121773440, + } + } + } + MV{ + { + id{"MVR"} + from:intvector{ + 80, + -707930976, + } + } + } + MW{ + { + id{"MWK"} + from:intvector{ + 7, + -1585218368, + } + } + } + MX{ + { + id{"MXN"} + from:intvector{ + 169, + 25786976, + } + } + { + id{"MXP"} + from:intvector{ + -1088, + -1783749248, + } + to:intvector{ + 162, + 1060818048, + } + } + } + MY{ + { + id{"MYR"} + from:intvector{ + -52, + -556127904, + } + } + } + MZ{ + { + id{"MZM"} + from:intvector{ + 73, + -969619904, + } + } + { + id{"MZE"} + from:intvector{ + 37, + 955370048, + } + to:intvector{ + 73, + -969619904, + } + } + } + NA{ + { + id{"ZAR"} + from:intvector{ + -66, + 623161536, + } + } + { + id{"NAD"} + from:intvector{ + 169, + 25726976, + } + } + } + NC{ + { + id{"XPF"} + from:intvector{ + 110, + 967997440, + } + } + } + NE{ + { + id{"XOF"} + from:intvector{ + -88, + 850642048, + } + } + } + NF{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + NG{ + { + id{"NGN"} + from:intvector{ + 22, + 233979488, + } + } + } + NI{ + { + id{"NIO"} + from:intvector{ + 154, + -497290880, + } + } + { + id{"NIC"} + from:intvector{ + 132, + -1998530368, + } + to:intvector{ + 154, + -497290880, + } + } + } + NL{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"NLG"} + from:intvector{ + -1154, + 1982259584, + } + to:intvector{ + 235, + -1407361856, + } + } + } + NO{ + { + id{"NOK"} + from:intvector{ + -478, + -1979039808, + } + } + { + id{"SEK"} + from:intvector{ + -713, + -690585248, + } + to:intvector{ + -478, + -1979039808, + } + } + } + NP{ + { + id{"NPR"} + from:intvector{ + -272, + 650304512, + } + } + { + id{"INR"} + from:intvector{ + -735, + 1152562560, + } + to:intvector{ + -30, + -264548416, + } + } + } + NR{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + NU{ + { + id{"NZD"} + from:intvector{ + -22, + 601700512, + } + } + } + NZ{ + { + id{"NZD"} + from:intvector{ + -22, + 601700512, + } + } + } + OM{ + { + id{"OMR"} + from:intvector{ + 14, + -459049440, + } + } + } + PA{ + { + id{"PAB"} + from:intvector{ + -493, + -971830368, + } + } + { + id{"USD"} + from:intvector{ + -492, + 237769632, + } + } + } + PE{ + { + id{"PEN"} + from:intvector{ + 154, + 1292256416, + } + } + { + id{"PEI"} + from:intvector{ + 110, + 968117440, + } + to:intvector{ + 154, + 1292256416, + } + } + { + id{"PES"} + from:intvector{ + -786, + 394414656, + } + to:intvector{ + 110, + 968117440, + } + } + } + PF{ + { + id{"XPF"} + from:intvector{ + -184, + -753464832, + } + } + } + PG{ + { + id{"PGK"} + from:intvector{ + 37, + 177950048, + } + } + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + to:intvector{ + 37, + 177950048, + } + } + } + PH{ + { + id{"PHP"} + from:intvector{ + -177, + -1179735904, + } + } + } + PK{ + { + id{"PKR"} + from:intvector{ + -162, + 1503341952, + } + } + { + id{"INR"} + from:intvector{ + -992, + 1804437632, + } + to:intvector{ + -169, + 1241953024, + } + } + } + PL{ + { + id{"PLN"} + from:intvector{ + 183, + -1326722464, + } + } + { + id{"PLZ"} + from:intvector{ + -147, + -1724574784, + } + to:intvector{ + 176, + -205291392, + } + } + } + PM{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + 15, + 405010560, + } + to:intvector{ + 235, + 1937205440, + } + } + } + PN{ + { + id{"NZD"} + from:intvector{ + -8, + -405568928, + } + } + } + PR{ + { + id{"USD"} + from:intvector{ + -529, + 780419584, + } + } + { + id{"ESP"} + from:intvector{ + -1250, + -223047296, + } + to:intvector{ + -529, + 780419584, + } + } + } + PS{ + { + id{"JOD"} + from:intvector{ + 191, + 1094966464, + } + } + { + id{"ILS"} + from:intvector{ + 110, + 1227737440, + } + } + { + id{"ILP"} + from:intvector{ + -23, + -175959488, + } + to:intvector{ + 73, + -451459904, + } + } + { + id{"JOD"} + from:intvector{ + -147, + 237412512, + } + to:intvector{ + -23, + -175959488, + } + } + } + PT{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"PTE"} + from:intvector{ + -434, + -359260832, + } + to:intvector{ + 235, + -1407361856, + } + } + } + PW{ + { + id{"USD"} + from:intvector{ + -192, + -176846464, + } + } + } + PY{ + { + id{"PYG"} + from:intvector{ + -199, + -1647415392, + } + } + } + QA{ + { + id{"QAR"} + from:intvector{ + 22, + 1789419488, + } + } + } + RE{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + 36, + -1118529952, + } + to:intvector{ + 235, + 1937205440, + } + } + } + RO{ + { + id{"RON"} + from:intvector{ + 257, + 760224928, + } + } + { + id{"ROL"} + from:intvector{ + -132, + 1217343072, + } + to:intvector{ + 265, + 528786560, + } + } + } + RU{ + { + id{"RUB"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 206, + 1471057024, + } + } + } + RW{ + { + id{"RWF"} + from:intvector{ + -44, + 1174061024, + } + } + } + SA{ + { + id{"SAR"} + from:intvector{ + -132, + 699483072, + } + } + } + SB{ + { + id{"SBD"} + from:intvector{ + 51, + -396899392, + } + } + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + to:intvector{ + 59, + 1592489536, + } + } + } + SC{ + { + id{"SCR"} + from:intvector{ + -493, + -1231030368, + } + } + } + SD{ + { + id{"SDD"} + from:intvector{ + 161, + -1531901952, + } + } + { + id{"SDP"} + from:intvector{ + -96, + -1571466880, + } + to:intvector{ + 205, + -1121302976, + } + } + { + id{"EGP"} + from:intvector{ + -595, + 1028401120, + } + to:intvector{ + -89, + -705217952, + } + } + { + id{"GBP"} + from:intvector{ + -595, + 1028401120, + } + to:intvector{ + -89, + -705217952, + } + } + } + SE{ + { + id{"SEK"} + from:intvector{ + -713, + -690585248, + } + } + } + SG{ + { + id{"SGD"} + from:intvector{ + -22, + 774440512, + } + } + { + id{"MYR"} + from:intvector{ + -52, + -556127904, + } + to:intvector{ + -22, + 774440512, + } + } + } + SH{ + { + id{"SHP"} + from:intvector{ + -390, + -554001856, + } + } + } + SI{ + { + id{"SIT"} + from:intvector{ + 161, + -1012901952, + } + } + } + SJ{ + { + id{"NOK"} + from:intvector{ + -478, + -1979039808, + } + } + } + SK{ + { + id{"SKK"} + from:intvector{ + 162, + 1060818048, + } + } + { + id{"CSK"} + from:intvector{ + -125, + 442472000, + } + to:intvector{ + 162, + 1060818048, + } + } + } + SL{ + { + id{"SLL"} + from:intvector{ + -45, + -121758976, + } + } + { + id{"GBP"} + from:intvector{ + -1190, + 1254542240, + } + to:intvector{ + -30, + -1388228416, + } + } + } + SM{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"ITL"} + from:intvector{ + -772, + -93494784, + } + to:intvector{ + 228, + 1416376512, + } + } + } + SN{ + { + id{"XOF"} + from:intvector{ + -81, + 1025390976, + } + } + } + SO{ + { + id{"SOS"} + from:intvector{ + -74, + -2057367392, + } + } + } + SR{ + { + id{"SRD"} + from:intvector{ + 249, + -797764000, + } + } + { + id{"SRG"} + from:intvector{ + -221, + -1071694880, + } + to:intvector{ + 243, + 323667072, + } + } + { + id{"NLG"} + from:intvector{ + -1139, + -2022957152, + } + to:intvector{ + -221, + -1071694880, + } + } + } + ST{ + { + id{"STD"} + from:intvector{ + 51, + -1779359392, + } + } + } + SV{ + { + id{"SVC"} + from:intvector{ + -375, + 2046996000, + } + } + { + id{"USD"} + from:intvector{ + 227, + -916483488, + } + } + } + SY{ + { + id{"SYP"} + from:intvector{ + -162, + 1503161952, + } + } + } + SZ{ + { + id{"SZL"} + from:intvector{ + 29, + 2137688416, + } + } + } + TC{ + { + id{"USD"} + from:intvector{ + -8, + -837088928, + } + } + } + TD{ + { + id{"XAF"} + from:intvector{ + 169, + 25786976, + } + } + } + TF{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + -81, + 766010976, + } + to:intvector{ + 235, + 1937205440, + } + } + } + TG{ + { + id{"XOF"} + from:intvector{ + -88, + 1628182048, + } + } + } + TH{ + { + id{"THB"} + from:intvector{ + -309, + -1373832832, + } + } + } + TJ{ + { + id{"TJS"} + from:intvector{ + 220, + -313572416, + } + } + { + id{"TJR"} + from:intvector{ + 183, + -548882464, + } + to:intvector{ + 220, + -399972416, + } + } + } + TK{ + { + id{"NZD"} + from:intvector{ + -22, + 601700512, + } + } + } + TL{ + { + id{"USD"} + from:intvector{ + 213, + 1991765952, + } + } + { + id{"TPE"} + from:intvector{ + -81, + 852410976, + } + to:intvector{ + 235, + -2098381856, + } + } + { + id{"IDR"} + from:intvector{ + 36, + -599469952, + } + to:intvector{ + 235, + -2098381856, + } + } + } + TM{ + { + id{"TMM"} + from:intvector{ + 169, + 26386976, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 169, + 26386976, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + TN{ + { + id{"TND"} + from:intvector{ + -89, + -704617952, + } + } + } + TO{ + { + id{"TOP"} + from:intvector{ + -30, + -524228416, + } + } + } + TR{ + { + id{"TRY"} + from:intvector{ + 257, + 759864928, + } + } + { + id{"TRL"} + from:intvector{ + -353, + 1388115488, + } + to:intvector{ + 257, + -942442368, + } + } + } + TT{ + { + id{"TTD"} + from:intvector{ + -45, + -381438976, + } + } + } + TV{ + { + id{"AUD"} + from:intvector{ + -30, + -524228416, + } + } + } + TW{ + { + id{"TWD"} + from:intvector{ + -155, + -24276416, + } + } + } + TZ{ + { + id{"TZS"} + from:intvector{ + -30, + -523988416, + } + } + } + UA{ + { + id{"UAH"} + from:intvector{ + 191, + 231386464, + } + } + { + id{"UAK"} + from:intvector{ + 161, + -494441952, + } + to:intvector{ + 169, + 1408726976, + } + } + { + id{"RUR"} + from:intvector{ + 154, + -928810880, + } + to:intvector{ + 161, + -494441952, + } + } + { + id{"SUR"} + from:intvector{ + -67, + -500098464, + } + to:intvector{ + 154, + -928810880, + } + } + } + UG{ + { + id{"UGX"} + from:intvector{ + 125, + 825388000, + } + } + { + id{"UGS"} + from:intvector{ + -30, + -437468416, + } + to:intvector{ + 125, + 825388000, + } + } + } + UM{ + { + id{"USD"} + from:intvector{ + -192, + -176846464, + } + } + } + US{ + { + id{"USD"} + from:intvector{ + -1308, + 719223168, + } + } + } + UY{ + { + id{"UYU"} + from:intvector{ + 169, + 25906976, + } + } + { + id{"UYP"} + from:intvector{ + 36, + -1118169952, + } + to:intvector{ + 169, + 25906976, + } + } + } + UZ{ + { + id{"UZS"} + from:intvector{ + 176, + 1497375904, + } + } + } + VA{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"ITL"} + from:intvector{ + -735, + -1586604736, + } + to:intvector{ + 235, + -1407361856, + } + } + } + VC{ + { + id{"XCD"} + from:intvector{ + -37, + 1608789952, + } + } + } + VE{ + { + id{"VEB"} + from:intvector{ + -728, + -806875808, + } + } + } + VG{ + { + id{"USD"} + from:intvector{ + -1007, + 1774067072, + } + } + { + id{"GBP"} + from:intvector{ + -1007, + 1774067072, + } + to:intvector{ + -81, + 765950976, + } + } + } + VI{ + { + id{"USD"} + from:intvector{ + -978, + -844551808, + } + } + } + VN{ + { + id{"VND"} + from:intvector{ + 110, + 2091737440, + } + } + } + VU{ + { + id{"VUV"} + from:intvector{ + 80, + -708290976, + } + } + } + WF{ + { + id{"XPF"} + from:intvector{ + -66, + 2005861536, + } + } + } + WS{ + { + id{"WST"} + from:intvector{ + -22, + 601700512, + } + } + } + YE{ + { + id{"YER"} + from:intvector{ + 147, + 1635307488, + } + } + } + YT{ + { + id{"EUR"} + from:intvector{ + 213, + 349625952, + } + } + { + id{"FRF"} + from:intvector{ + 44, + -2041408320, + } + to:intvector{ + 235, + 1937205440, + } + } + { + id{"KMF"} + from:intvector{ + 36, + -1118529952, + } + to:intvector{ + 44, + -2041408320, + } + } + } + ZA{ + { + id{"ZAR"} + from:intvector{ + -66, + 623161536, + } + } + } + ZM{ + { + id{"ZMK"} + from:intvector{ + -15, + -1703997856, + } + } + } + ZW{ + { + id{"ZWD"} + from:intvector{ + 73, + -796939904, + } + } + } + } + /** + * Currency metadata. Unlike the "Currencies" element, this is + * NOT true locale data. It exists only in root. The two + * integers are the fraction digits for each currency, and the + * rounding increment. The fraction digits must be an integer + * from 0..9. If there is no rounding, the rounding increment is + * zero. Otherwise the rounding increment is given in units of + * 10^(-fraction_digits). The special tag "DEFAULT" gives the + * meta data for all currencies not otherwise listed. + */ + CurrencyMeta{ + ADP:intvector{ + 0, + 0, + } + BHD:intvector{ + 3, + 0, + } + BIF:intvector{ + 0, + 0, + } + BYR:intvector{ + 0, + 0, + } + CHF:intvector{ + 2, + 5, + } + CLF:intvector{ + 0, + 0, + } + CLP:intvector{ + 0, + 0, + } + DEFAULT:intvector{ + 2, + 0, + } + DJF:intvector{ + 0, + 0, + } + ESP:intvector{ + 0, + 0, + } + GNF:intvector{ + 0, + 0, + } + IQD:intvector{ + 3, + 0, + } + ITL:intvector{ + 0, + 0, + } + JOD:intvector{ + 3, + 0, + } + JPY:intvector{ + 0, + 0, + } + KMF:intvector{ + 0, + 0, + } + KRW:intvector{ + 0, + 0, + } + KWD:intvector{ + 3, + 0, + } + LUF:intvector{ + 0, + 0, + } + LYD:intvector{ + 3, + 0, + } + MGA:intvector{ + 0, + 0, + } + MGF:intvector{ + 0, + 0, + } + OMR:intvector{ + 3, + 0, + } + PYG:intvector{ + 0, + 0, + } + RWF:intvector{ + 0, + 0, + } + TND:intvector{ + 3, + 0, + } + TRL:intvector{ + 0, + 0, + } + VUV:intvector{ + 0, + 0, + } + XAF:intvector{ + 0, + 0, + } + XOF:intvector{ + 0, + 0, + } + XPF:intvector{ + 0, + 0, + } + } + calendarData{ + buddhist{ + "TH", + } + chinese{ + "CN", + "CX", + "HK", + "MO", + "SG", + "TW", + } + coptic{ + "EG", + } + ethiopic{ + "ET", + } + hebrew{ + "IL", + } + islamic{ + "AE", + "BH", + "DJ", + "DZ", + "EG", + "EH", + "ER", + "IL", + "IQ", + "JO", + "KM", + "KW", + "LB", + "LY", + "MA", + "MR", + "OM", + "PS", + "QA", + "SA", + "SD", + "SY", + "TD", + "TN", + "YE", + "AF", + "IR", + } + islamic-civil{ + "AE", + "BH", + "DJ", + "DZ", + "EG", + "EH", + "ER", + "IL", + "IQ", + "JO", + "KM", + "KW", + "LB", + "LY", + "MA", + "MR", + "OM", + "PS", + "QA", + "SA", + "SD", + "SY", + "TD", + "TN", + "YE", + "AF", + "IR", + } + japanese{ + "JP", + } + persian{ + "AF", + "IR", + } + } + languageData{ + ab{ + secondary{ + scripts{ + "Cyrl", + } + territories{ + "GE", + } + } + secondary{ + scripts{ + "Cyrl", + } + territories{ + "TR", + } + } + } + af{ + primary{ + scripts{ + "Latn", + } + territories{ + "NA", + "ZA", + } + } + } + am{ + primary{ + scripts{ + "Ethi", + } + territories{ + "ET", + } + } + } + ar{ + primary{ + scripts{ + "Arab", + } + territories{ + "AE", + "BH", + "DJ", + "DZ", + "EG", + "EH", + "ER", + "IL", + "IQ", + "JO", + "KM", + "KW", + "LB", + "LY", + "MA", + "MR", + "OM", + "PS", + "QA", + "SA", + "SD", + "SY", + "TD", + "TN", + "YE", + } + } + secondary{ + scripts{ + "Arab", + } + territories{ + "IR", + } + } + } + as{ + primary{ + scripts{ + "Beng", + } + territories{ + "BD", + "IN", + } + } + } + ay{ + primary{ + scripts{ + "Latn", + } + territories{ + "BO", + "PE", + } + } + } + az{ + primary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "AZ", + "IR", + } + } + secondary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "GE", + "TR", + } + } + } + bal{ + primary{ + scripts{ + "Arab", + "Latn", + } + territories{ + "PK", + } + } + secondary{ + scripts{ + "Arab", + "Latn", + } + territories{ + "AF", + "IR", + "OM", + } + } + } + be{ + primary{ + scripts{ + "Cyrl", + } + territories{ + "BY", + } + } + } + bg{ + primary{ + scripts{ + "Cyrl", + } + territories{ + "BG", + } + } + } + bn{ + primary{ + scripts{ + "Beng", + } + territories{ + "BD", + "IN", + } + } + } + bo{ + secondary{ + scripts{ + "Tibt", + } + territories{ + "CN", + "IN", + "NP", + } + } + } + bs{ + primary{ + scripts{ + "Latn", + } + territories{ + "BA", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "HR", + "CS", + } + } + } + ca{ + primary{ + scripts{ + "Latn", + } + territories{ + "AD", + "ES", + } + } + } + cch{ + primary{ + scripts{ + "Latn", + } + territories{ + "NG", + } + } + } + ch{ + primary{ + scripts{ + "Latn", + } + territories{ + "GU", + "MP", + } + } + } + chr{ + secondary{ + scripts{ + "Latn", + "Cher", + } + territories{ + "US", + } + } + } + cpe{ + primary{ + scripts{ + "Latn", + } + territories{ + "SL", + } + } + } + cr{ + secondary{ + scripts{ + "Cans", + "Latn", + } + territories{ + "CA", + } + } + } + cs{ + primary{ + scripts{ + "Latn", + } + territories{ + "CZ", + } + } + } + cy{ + primary{ + scripts{ + "Latn", + } + territories{ + "GB", + } + } + } + da{ + primary{ + scripts{ + "Latn", + } + territories{ + "DK", + "GL", + } + } + } + de{ + primary{ + scripts{ + "Latn", + } + territories{ + "AT", + "BE", + "CH", + "DE", + "LI", + "LU", + "NA", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "IT", + } + } + } + dgr{ + secondary{ + territories{ + "CA", + } + } + } + dv{ + primary{ + scripts{ + "Thaa", + } + territories{ + "MV", + } + } + } + dz{ + primary{ + scripts{ + "Tibt", + } + territories{ + "BT", + } + } + } + el{ + primary{ + scripts{ + "Grek", + } + territories{ + "CY", + "GR", + } + } + } + en{ + primary{ + scripts{ + "Latn", + } + territories{ + "AG", + "AI", + "AS", + "AU", + "AW", + "BB", + "BM", + "BS", + "BW", + "BZ", + "CA", + "CC", + "CK", + "CM", + "CX", + "DM", + "ER", + "FJ", + "FK", + "FM", + "GB", + "GD", + "GH", + "GI", + "GM", + "GY", + "HK", + "IE", + "IN", + "IO", + "JM", + "KE", + "KI", + "KN", + "KY", + "LC", + "LR", + "LS", + "MH", + "MP", + "MS", + "MT", + "MW", + "NA", + "NF", + "NG", + "NR", + "NU", + "NZ", + "PG", + "PH", + "PK", + "PN", + "PW", + "RW", + "SB", + "SG", + "SH", + "SL", + "SZ", + "TC", + "TK", + "TO", + "TT", + "TZ", + "UG", + "UM", + "US", + "VC", + "VG", + "VI", + "ZA", + "ZM", + "ZW", + } + } + } + eo{ + primary{ + scripts{ + "Latn", + } + } + } + es{ + primary{ + scripts{ + "Latn", + } + territories{ + "AR", + "BO", + "CL", + "CO", + "CR", + "CU", + "DO", + "EC", + "ES", + "GI", + "GQ", + "GT", + "HN", + "MX", + "NI", + "PA", + "PE", + "PR", + "PY", + "SV", + "US", + "UY", + "VE", + } + } + } + et{ + primary{ + scripts{ + "Latn", + } + territories{ + "EE", + } + } + } + eu{ + primary{ + scripts{ + "Latn", + } + territories{ + "ES", + } + } + } + fa{ + primary{ + scripts{ + "Arab", + } + territories{ + "AF", + "IR", + } + } + } + fi{ + primary{ + scripts{ + "Latn", + } + territories{ + "FI", + "SE", + } + } + } + fil{ + primary{ + scripts{ + "Latn", + } + territories{ + "PH", + } + } + } + fiu{ + secondary{ + scripts{ + "Latn", + } + territories{ + "FI", + "SE", + } + } + } + fj{ + primary{ + scripts{ + "Latn", + } + territories{ + "FJ", + } + } + } + fo{ + primary{ + scripts{ + "Latn", + } + territories{ + "FO", + } + } + } + fr{ + primary{ + scripts{ + "Latn", + } + territories{ + "BE", + "BF", + "BI", + "BJ", + "CA", + "CD", + "CF", + "CG", + "CH", + "CI", + "CM", + "DJ", + "FR", + "GA", + "GF", + "GN", + "GP", + "GQ", + "HT", + "KM", + "LU", + "MC", + "MG", + "ML", + "MQ", + "MR", + "MU", + "NC", + "NE", + "PF", + "PM", + "RE", + "RW", + "SC", + "SN", + "TD", + "TF", + "TG", + "VU", + "WF", + "YT", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "IT", + "US", + } + } + } + fy{ + secondary{ + scripts{ + "Latn", + } + territories{ + "DE", + "NL", + } + } + } + ga{ + primary{ + scripts{ + "Latn", + } + territories{ + "IE", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "GB", + } + } + } + gd{ + primary{ + scripts{ + "Latn", + } + territories{ + "GB", + } + } + } + gl{ + primary{ + scripts{ + "Latn", + } + territories{ + "ES", + } + } + } + gn{ + primary{ + scripts{ + "Latn", + } + territories{ + "PY", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "AR", + "BO", + } + } + } + gsw{ + primary{ + scripts{ + "Latn", + } + territories{ + "CH", + } + } + } + gu{ + primary{ + scripts{ + "Gujr", + } + territories{ + "IN", + } + } + } + gv{ + primary{ + scripts{ + "Latn", + } + territories{ + "GB", + } + } + } + ha{ + primary{ + scripts{ + "Arab", + "Latn", + } + territories{ + "NE", + "NG", + } + } + } + haw{ + secondary{ + scripts{ + "Latn", + } + territories{ + "US", + } + } + } + he{ + primary{ + scripts{ + "Hebr", + } + territories{ + "IL", + } + } + } + hi{ + primary{ + scripts{ + "Deva", + } + territories{ + "IN", + "FJ", + } + } + } + ho{ + primary{ + scripts{ + "Latn", + } + territories{ + "PG", + } + } + } + hr{ + primary{ + scripts{ + "Latn", + } + territories{ + "BA", + "HR", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "CS", + } + } + } + ht{ + primary{ + scripts{ + "Latn", + } + territories{ + "HT", + } + } + } + hu{ + primary{ + scripts{ + "Latn", + } + territories{ + "HU", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "SI", + "CS", + } + } + } + hy{ + primary{ + scripts{ + "Armn", + } + territories{ + "AM", + } + } + secondary{ + scripts{ + "Armn", + } + territories{ + "AZ", + "GE", + "IR", + } + } + } + id{ + primary{ + scripts{ + "Latn", + } + territories{ + "ID", + } + } + } + is{ + primary{ + scripts{ + "Latn", + } + territories{ + "IS", + } + } + } + it{ + primary{ + scripts{ + "Latn", + } + territories{ + "CH", + "IT", + "SM", + "VA", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "HR", + "SI", + } + } + } + iu{ + secondary{ + scripts{ + "Cans", + "Cyrl", + "Latn", + } + territories{ + "CA", + "GL", + "US", + "RU", + } + } + } + ja{ + primary{ + scripts{ + "Hani", + "Hira", + "Kana", + } + territories{ + "GU", + "JP", + "PW", + } + } + } + ka{ + primary{ + scripts{ + "Geor", + } + territories{ + "GE", + } + } + } + kaj{ + primary{ + scripts{ + "Latn", + } + territories{ + "NG", + } + } + } + kcg{ + primary{ + scripts{ + "Latn", + } + territories{ + "NG", + } + } + } + kfo{ + primary{ + scripts{ + "Latn", + } + territories{ + "NG", + } + } + } + kk{ + primary{ + scripts{ + "Cyrl", + } + territories{ + "KZ", + } + } + } + kl{ + primary{ + scripts{ + "Latn", + } + territories{ + "GL", + } + } + } + km{ + primary{ + scripts{ + "Khmr", + } + territories{ + "KH", + } + } + } + kn{ + primary{ + scripts{ + "Knda", + } + territories{ + "IN", + } + } + } + ko{ + primary{ + scripts{ + "Hang", + "Hani", + } + territories{ + "KP", + "KR", + } + } + } + kok{ + primary{ + scripts{ + "Deva", + } + territories{ + "IN", + } + } + } + ks{ + primary{ + scripts{ + "Arab", + "Deva", + } + territories{ + "IN", + } + } + } + ku{ + primary{ + scripts{ + "Arab", + "Latn", + "Cyrl", + } + territories{ + "IQ", + "IR", + "TR", + } + } + secondary{ + scripts{ + "Arab", + "Latn", + "Cyrl", + } + territories{ + "SY", + } + } + } + kw{ + secondary{ + scripts{ + "Latn", + } + territories{ + "GB", + } + } + } + ky{ + primary{ + scripts{ + "Arab", + "Cyrl", + } + territories{ + "KG", + } + } + secondary{ + scripts{ + "Arab", + "Cyrl", + } + territories{ + "CN", + } + } + } + la{ + primary{ + scripts{ + "Latn", + } + territories{ + "VA", + } + } + } + lb{ + primary{ + scripts{ + "Latn", + } + territories{ + "LU", + } + } + } + ln{ + primary{ + scripts{ + "Latn", + } + territories{ + "CG", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "CD", + } + } + } + lo{ + primary{ + scripts{ + "Laoo", + } + territories{ + "LA", + } + } + } + lt{ + primary{ + scripts{ + "Latn", + } + territories{ + "LT", + } + } + } + lv{ + primary{ + scripts{ + "Latn", + } + territories{ + "LV", + } + } + } + mai{ + primary{ + scripts{ + "Deva", + } + territories{ + "IN", + } + } + } + men{ + primary{ + scripts{ + "Latn", + } + territories{ + "GN", + "LR", + "SL", + } + } + } + mg{ + primary{ + scripts{ + "Latn", + } + territories{ + "MG", + } + } + } + mh{ + primary{ + scripts{ + "Latn", + } + territories{ + "MH", + "NR", + } + } + } + mi{ + secondary{ + scripts{ + "Latn", + } + territories{ + "CK", + "NZ", + } + } + } + mk{ + primary{ + scripts{ + "Cyrl", + } + territories{ + "MK", + } + } + } + ml{ + primary{ + scripts{ + "Mlym", + } + territories{ + "IN", + } + } + } + mn{ + primary{ + scripts{ + "Cyrl", + "Mong", + } + territories{ + "MN", + } + } + } + mni{ + primary{ + territories{ + "IN", + } + } + } + mo{ + primary{ + scripts{ + "Latn", + "Cyrl", + } + territories{ + "MD", + } + } + } + mr{ + primary{ + scripts{ + "Deva", + } + territories{ + "IN", + } + } + } + ms{ + primary{ + scripts{ + "Arab", + "Latn", + } + territories{ + "BN", + "CC", + "CX", + "MY", + "SG", + } + } + } + mt{ + primary{ + scripts{ + "Latn", + } + territories{ + "MT", + } + } + } + my{ + primary{ + scripts{ + "Mymr", + } + territories{ + "MM", + } + } + } + na{ + primary{ + scripts{ + "Latn", + } + territories{ + "NR", + } + } + } + nb{ + primary{ + scripts{ + "Latn", + } + territories{ + "NO", + "SJ", + } + } + } + nd{ + primary{ + scripts{ + "Latn", + } + territories{ + "ZA", + } + } + } + ne{ + primary{ + scripts{ + "Deva", + } + territories{ + "NP", + } + } + } + niu{ + primary{ + scripts{ + "Latn", + } + territories{ + "NU", + } + } + } + nl{ + primary{ + scripts{ + "Latn", + } + territories{ + "AN", + "AW", + "BE", + "NL", + "SR", + } + } + } + nn{ + primary{ + scripts{ + "Latn", + } + territories{ + "NO", + "SJ", + } + } + } + no{ + primary{ + scripts{ + "Latn", + } + territories{ + "NO", + "SJ", + } + } + } + nr{ + primary{ + scripts{ + "Latn", + } + territories{ + "ZA", + } + } + } + nso{ + primary{ + scripts{ + "Latn", + } + territories{ + "ZA", + } + } + } + ny{ + primary{ + scripts{ + "Latn", + } + territories{ + "MW", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "MZ", + "ZM", + } + } + } + oc{ + secondary{ + scripts{ + "Latn", + } + territories{ + "ES", + } + } + } + om{ + primary{ + scripts{ + "Latn", + } + territories{ + "ET", + "KE", + } + } + } + or{ + primary{ + scripts{ + "Orya", + } + territories{ + "IN", + } + } + } + os{ + secondary{ + scripts{ + "Latn", + } + territories{ + "GE", + "RU", + } + } + } + pa{ + primary{ + scripts{ + "Arab", + "Guru", + } + territories{ + "IN", + "PK", + } + } + } + pau{ + primary{ + territories{ + "PW", + } + } + } + pl{ + primary{ + scripts{ + "Latn", + } + territories{ + "PL", + } + } + } + ps{ + primary{ + scripts{ + "Arab", + } + territories{ + "AF", + "PK", + } + } + } + pt{ + primary{ + scripts{ + "Latn", + } + territories{ + "AO", + "BR", + "CV", + "GW", + "MO", + "MZ", + "PT", + "ST", + "TL", + } + } + } + qu{ + primary{ + scripts{ + "Latn", + } + territories{ + "BO", + "PE", + } + } + } + rm{ + secondary{ + scripts{ + "Latn", + } + territories{ + "CH", + } + } + } + rn{ + primary{ + scripts{ + "Latn", + } + territories{ + "BI", + } + } + } + ro{ + primary{ + scripts{ + "Latn", + } + territories{ + "RO", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "CS", + } + } + } + ru{ + primary{ + scripts{ + "Cyrl", + } + territories{ + "BY", + "GE", + "KG", + "KZ", + "RU", + "SJ", + "UA", + } + } + secondary{ + scripts{ + "Cyrl", + } + territories{ + "MD", + } + } + } + rw{ + primary{ + scripts{ + "Latn", + } + territories{ + "RW", + } + } + } + sa{ + secondary{ + scripts{ + "Deva", + } + territories{ + "IN", + } + } + } + sd{ + primary{ + scripts{ + "Deva", + "Arab", + } + territories{ + "IN", + "PK", + } + } + } + sg{ + primary{ + scripts{ + "Latn", + } + territories{ + "CF", + } + } + } + si{ + primary{ + scripts{ + "Sinh", + } + territories{ + "LK", + } + } + } + sk{ + primary{ + scripts{ + "Latn", + } + territories{ + "SK", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "CS", + } + } + } + sl{ + primary{ + scripts{ + "Latn", + } + territories{ + "SI", + } + } + } + sm{ + primary{ + scripts{ + "Latn", + } + territories{ + "AS", + "WS", + } + } + } + so{ + primary{ + scripts{ + "Latn", + } + territories{ + "DJ", + "SO", + } + } + secondary{ + scripts{ + "Latn", + } + territories{ + "ET", + "KE", + } + } + } + son{ + secondary{ + scripts{ + "Latn", + } + territories{ + "BJ", + "ML", + "NE", + } + } + } + sq{ + primary{ + scripts{ + "Latn", + } + territories{ + "AL", + "MK", + "CS", + } + } + } + sr{ + primary{ + scripts{ + "Cyrl", + "Latn", + } + territories{ + "BA", + "CS", + } + } + secondary{ + scripts{ + "Cyrl", + "Latn", + } + territories{ + "HR", + } + } + } + ss{ + primary{ + scripts{ + "Latn", + } + territories{ + "SZ", + "ZA", + } + } + } + st{ + primary{ + scripts{ + "Latn", + } + territories{ + "LS", + "ZA", + } + } + } + sv{ + primary{ + scripts{ + "Latn", + } + territories{ + "AX", + "FI", + "SE", + } + } + } + sw{ + primary{ + scripts{ + "Latn", + } + territories{ + "KE", + "TZ", + "YT", + } + } + } + ta{ + primary{ + scripts{ + "Taml", + } + territories{ + "IN", + "LK", + "SG", + } + } + } + te{ + primary{ + scripts{ + "Telu", + } + territories{ + "IN", + } + } + } + tem{ + primary{ + scripts{ + "Latn", + } + territories{ + "SL", + } + } + } + tet{ + primary{ + scripts{ + "Latn", + } + territories{ + "TL", + } + } + } + tg{ + primary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "TJ", + } + } + } + th{ + primary{ + scripts{ + "Thai", + } + territories{ + "TH", + } + } + } + ti{ + primary{ + scripts{ + "Ethi", + } + territories{ + "ER", + "ET", + } + } + } + tk{ + primary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "TM", + } + } + secondary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "AF", + "IR", + } + } + } + tkl{ + primary{ + scripts{ + "Latn", + } + territories{ + "TK", + } + } + } + tl{ + primary{ + scripts{ + "Latn", + } + territories{ + "GU", + "PH", + } + } + } + tmh{ + secondary{ + scripts{ + "Latn", + } + territories{ + "ML", + "NE", + } + } + } + tn{ + primary{ + scripts{ + "Latn", + } + territories{ + "BW", + "ZA", + } + } + } + to{ + primary{ + scripts{ + "Latn", + } + territories{ + "TO", + } + } + } + tpi{ + primary{ + scripts{ + "Latn", + } + territories{ + "PG", + } + } + } + tr{ + primary{ + scripts{ + "Arab", + "Latn", + } + territories{ + "CY", + "TR", + } + } + } + ts{ + primary{ + scripts{ + "Latn", + } + territories{ + "ZA", + } + } + } + tvl{ + primary{ + scripts{ + "Latn", + } + territories{ + "TV", + } + } + } + uk{ + primary{ + scripts{ + "Cyrl", + } + territories{ + "UA", + } + } + secondary{ + scripts{ + "Cyrl", + } + territories{ + "MD", + } + } + } + ur{ + primary{ + scripts{ + "Arab", + } + territories{ + "IN", + "PK", + } + } + } + uz{ + primary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "UZ", + } + } + secondary{ + scripts{ + "Arab", + "Cyrl", + "Latn", + } + territories{ + "AF", + } + } + } + ve{ + primary{ + scripts{ + "Latn", + } + territories{ + "ZA", + } + } + } + vi{ + primary{ + scripts{ + "Latn", + } + territories{ + "VN", + } + } + } + wo{ + primary{ + scripts{ + "Latn", + } + territories{ + "GM", + "MR", + "SN", + } + } + } + xh{ + primary{ + scripts{ + "Latn", + } + territories{ + "LS", + "ZA", + } + } + } + yi{ + primary{ + scripts{ + "Hebr", + } + } + } + zh{ + primary{ + scripts{ + "Bopo", + "Hani", + "Hans", + "Hant", + } + territories{ + "CN", + "CX", + "HK", + "MO", + "SG", + "TW", + } + } + } + zu{ + primary{ + scripts{ + "Latn", + } + territories{ + "LS", + "ZA", + } + } + } + } + mapTimezones{ + windows{ + Africa/Cairo{"Egypt"} + Africa/Casablanca{"Greenwich"} + Africa/Johannesburg{"South Africa"} + Africa/Lagos{"W. Central Africa"} + Africa/Nairobi{"E. Africa"} + America/Anchorage{"Alaskan"} + America/Bogota{"SA Pacific"} + America/Buenos_Aires{"SA Eastern"} + America/Caracas{"SA Western"} + America/Chicago{"Central"} + America/Chihuahua{"Mexico Standard Time 2"} + America/Denver{"Mountain"} + America/Godthab{"Greenland"} + America/Halifax{"Atlantic"} + America/Indianapolis{"US Eastern"} + America/Los_Angeles{"Pacific"} + America/Managua{"Central America"} + America/Mexico_City{"Mexico"} + America/New_York{"Eastern"} + America/Noronha{"Mid-Atlantic"} + America/Phoenix{"US Mountain"} + America/Regina{"Canada Central"} + America/Santiago{"Pacific SA"} + America/Sao_Paulo{"E. South America"} + America/St_Johns{"Newfoundland"} + Asia/Baghdad{"Arabic"} + Asia/Bangkok{"SE Asia"} + Asia/Calcutta{"India"} + Asia/Colombo{"Sri Lanka"} + Asia/Dhaka{"Central Asia"} + Asia/Hong_Kong{"China"} + Asia/Irkutsk{"North Asia East"} + Asia/Jerusalem{"Israel"} + Asia/Kabul{"Afghanistan"} + Asia/Karachi{"West Asia"} + Asia/Katmandu{"Nepal"} + Asia/Krasnoyarsk{"North Asia"} + Asia/Magadan{"Central Pacific"} + Asia/Muscat{"Arabian"} + Asia/Novosibirsk{"N. Central Asia"} + Asia/Rangoon{"Myanmar"} + Asia/Riyadh{"Arab"} + Asia/Seoul{"Korea"} + Asia/Singapore{"Singapore"} + Asia/Taipei{"Taipei"} + Asia/Tbilisi{"Caucasus"} + Asia/Tehran{"Iran"} + Asia/Tokyo{"Tokyo"} + Asia/Vladivostok{"Vladivostok"} + Asia/Yakutsk{"Yakutsk"} + Asia/Yekaterinburg{"Ekaterinburg"} + Atlantic/Azores{"Azores"} + Atlantic/Cape_Verde{"Cape Verde"} + Australia/Adelaide{"Cen. Australia"} + Australia/Brisbane{"E. Australia"} + Australia/Darwin{"AUS Central"} + Australia/Hobart{"Tasmania"} + Australia/Perth{"W. Australia"} + Australia/Sydney{"AUS Eastern"} + Etc/GMT+12{"Dateline"} + Europe/Belgrade{"Central Europe"} + Europe/Berlin{"W. Europe"} + Europe/Bucharest{"E. Europe"} + Europe/Helsinki{"FLE"} + Europe/Istanbul{"GTB"} + Europe/London{"GMT"} + Europe/Moscow{"Russian"} + Europe/Paris{"Romance"} + Europe/Sarajevo{"Central European"} + Pacific/Apia{"Samoa"} + Pacific/Auckland{"New Zealand"} + Pacific/Fiji{"Fiji"} + Pacific/Guam{"West Pacific"} + Pacific/Honolulu{"Hawaiian"} + Pacific/Tongatapu{"Tonga"} + } + } + territoryContainment{ + 001{ + "002", + "009", + "019", + "142", + "150", + } + 002{ + "011", + "014", + "015", + "017", + "018", + } + 003{ + "013", + "021", + "029", + } + 005{ + "AR", + "BO", + "BR", + "CL", + "CO", + "EC", + "FK", + "GF", + "GY", + "PE", + "PY", + "SR", + "UY", + "VE", + } + 009{ + "053", + "054", + "057", + "061", + "QO", + } + 011{ + "BF", + "BJ", + "CI", + "CV", + "GH", + "GM", + "GN", + "GW", + "LR", + "ML", + "MR", + "NE", + "NG", + "SH", + "SL", + "SN", + "TG", + } + 013{ + "BZ", + "CR", + "GT", + "HN", + "MX", + "NI", + "PA", + "SV", + } + 014{ + "BI", + "DJ", + "ER", + "ET", + "KE", + "KM", + "MG", + "MU", + "MW", + "MZ", + "RE", + "RW", + "SC", + "SO", + "TZ", + "UG", + "YT", + "ZM", + "ZW", + } + 015{ + "DZ", + "EG", + "EH", + "LY", + "MA", + "SD", + "TN", + } + 017{ + "AO", + "CD", + "CF", + "CG", + "CM", + "GA", + "GQ", + "ST", + "TD", + } + 018{ + "BW", + "LS", + "NA", + "SZ", + "ZA", + } + 019{ + "005", + "013", + "021", + "029", + } + 021{ + "BM", + "CA", + "GL", + "PM", + "US", + } + 029{ + "AG", + "AI", + "AN", + "AW", + "BB", + "BS", + "CU", + "DM", + "DO", + "GD", + "GP", + "HT", + "JM", + "KN", + "KY", + "LC", + "MQ", + "MS", + "PR", + "TC", + "TT", + "VC", + "VG", + "VI", + } + 030{ + "CN", + "HK", + "JP", + "KP", + "KR", + "MN", + "MO", + "TW", + } + 034{ + "AF", + "BD", + "BT", + "IN", + "IR", + "LK", + "MV", + "NP", + "PK", + } + 035{ + "BN", + "ID", + "KH", + "LA", + "MM", + "MY", + "PH", + "SG", + "TH", + "TL", + "VN", + } + 039{ + "AD", + "AL", + "BA", + "ES", + "GI", + "GR", + "HR", + "IT", + "MK", + "MT", + "PT", + "SI", + "SM", + "VA", + "CS", + } + 053{ + "AU", + "NF", + "NZ", + } + 054{ + "FJ", + "NC", + "PG", + "SB", + "VU", + } + 057{ + "FM", + "GU", + "KI", + "MH", + "MP", + "NR", + "PW", + } + 061{ + "AS", + "CK", + "NU", + "PF", + "PN", + "TK", + "TO", + "TV", + "WF", + "WS", + } + 142{ + "030", + "035", + "143", + "145", + "034", + } + 143{ + "TM", + "TJ", + "KG", + "KZ", + "UZ", + } + 145{ + "AE", + "AM", + "AZ", + "BH", + "CY", + "GE", + "IL", + "IQ", + "JO", + "KW", + "LB", + "OM", + "PS", + "QA", + "SA", + "SY", + "TR", + "YE", + } + 150{ + "039", + "151", + "154", + "155", + } + 151{ + "BG", + "BY", + "CZ", + "HU", + "MD", + "PL", + "RO", + "RU", + "SK", + "UA", + } + 154{ + "830", + "833", + "AX", + "DK", + "EE", + "FI", + "FO", + "GB", + "IE", + "IS", + "LT", + "LV", + "NO", + "SE", + "SJ", + } + 155{ + "AT", + "BE", + "CH", + "DE", + "FR", + "LI", + "LU", + "MC", + "NL", + } + 172{ + "AM", + "AZ", + "BY", + "GE", + "KG", + "KZ", + "MD", + "RU", + "TJ", + "TM", + "UA", + "UZ", + } + 419{ + "005", + "013", + "029", + } + QO{ + "AQ", + "BV", + "CC", + "CX", + "GS", + "HM", + "IO", + "TF", + "UM", + } + QU{ + "AT", + "BE", + "CY", + "CZ", + "DE", + "DK", + "EE", + "ES", + "FI", + "FR", + "GB", + "GR", + "HU", + "IE", + "IT", + "LT", + "LU", + "LV", + "MT", + "NL", + "PL", + "PT", + "SE", + "SI", + "SK", + } + } + zoneFormatting{ + Africa/Abidjan{ + territory{"CI"} + } + Africa/Accra{ + territory{"GH"} + } + America/Adak{ + territory{"US"} + aliases{ + "America/Atka", + "US/Aleutian", + } + } + Africa/Addis_Ababa{ + territory{"ET"} + } + Australia/Adelaide{ + territory{"AU"} + aliases{ + "Australia/South", + } + } + Asia/Aden{ + territory{"YE"} + } + Africa/Algiers{ + territory{"DZ"} + } + Asia/Almaty{ + territory{"KZ"} + } + Asia/Amman{ + territory{"JO"} + } + Europe/Amsterdam{ + territory{"NL"} + } + Asia/Anadyr{ + territory{"RU"} + } + America/Anchorage{ + territory{"US"} + aliases{ + "SystemV/YST9YDT", + "US/Alaska", + } + } + Europe/Andorra{ + territory{"AD"} + } + America/Anguilla{ + territory{"AI"} + } + Indian/Antananarivo{ + territory{"MG"} + } + America/Antigua{ + territory{"AG"} + } + Pacific/Apia{ + territory{"WS"} + } + Asia/Aqtau{ + territory{"KZ"} + } + Asia/Aqtobe{ + territory{"KZ"} + } + America/Araguaina{ + territory{"BR"} + } + America/Aruba{ + territory{"AW"} + } + Asia/Ashgabat{ + territory{"TM"} + aliases{ + "Asia/Ashkhabad", + } + } + Africa/Asmera{ + territory{"ER"} + } + America/Asuncion{ + territory{"PY"} + } + Europe/Athens{ + territory{"GR"} + } + Pacific/Auckland{ + territory{"NZ"} + aliases{ + "NZ", + } + } + Atlantic/Azores{ + territory{"PT"} + } + Asia/Baghdad{ + territory{"IQ"} + } + America/Bahia{ + territory{"BR"} + } + Asia/Bahrain{ + territory{"BH"} + } + Asia/Baku{ + territory{"AZ"} + } + Africa/Bamako{ + territory{"ML"} + } + Asia/Bangkok{ + territory{"TH"} + } + Africa/Bangui{ + territory{"CF"} + } + Africa/Banjul{ + territory{"GM"} + } + America/Barbados{ + territory{"BB"} + } + Asia/Beirut{ + territory{"LB"} + } + America/Belem{ + territory{"BR"} + } + Europe/Belfast{ + territory{"GB"} + } + Europe/Belgrade{ + territory{"CS"} + } + America/Belize{ + territory{"BZ"} + } + Europe/Berlin{ + territory{"DE"} + } + Atlantic/Bermuda{ + territory{"BM"} + } + Asia/Bishkek{ + territory{"KG"} + } + Africa/Bissau{ + territory{"GW"} + } + Africa/Blantyre{ + territory{"MW"} + } + America/Boa_Vista{ + territory{"BR"} + } + America/Bogota{ + territory{"CO"} + } + America/Boise{ + territory{"US"} + } + Europe/Bratislava{ + territory{"SK"} + } + Africa/Brazzaville{ + territory{"CG"} + } + Australia/Brisbane{ + territory{"AU"} + aliases{ + "Australia/Queensland", + } + } + Australia/Broken_Hill{ + territory{"AU"} + aliases{ + "Australia/Yancowinna", + } + } + Asia/Brunei{ + territory{"BN"} + } + Europe/Brussels{ + territory{"BE"} + } + Europe/Bucharest{ + territory{"RO"} + } + Europe/Budapest{ + territory{"HU"} + } + America/Buenos_Aires{ + territory{"AR"} + aliases{ + "America/Argentina/Buenos_Aires", + } + } + Africa/Bujumbura{ + territory{"BI"} + } + Africa/Cairo{ + territory{"EG"} + aliases{ + "Egypt", + } + } + Asia/Calcutta{ + territory{"IN"} + } + America/Cambridge_Bay{ + territory{"CA"} + } + America/Campo_Grande{ + territory{"BR"} + } + Atlantic/Canary{ + territory{"ES"} + } + America/Cancun{ + territory{"MX"} + } + Atlantic/Cape_Verde{ + territory{"CV"} + } + America/Caracas{ + territory{"VE"} + } + Africa/Casablanca{ + territory{"MA"} + } + Antarctica/Casey{ + territory{"AQ"} + } + America/Catamarca{ + territory{"AR"} + aliases{ + "America/Argentina/Catamarca", + } + } + America/Cayenne{ + territory{"GF"} + } + America/Cayman{ + territory{"KY"} + } + America/North_Dakota/Center{ + territory{"US"} + } + Africa/Ceuta{ + territory{"ES"} + } + Indian/Chagos{ + territory{"IO"} + } + Pacific/Chatham{ + territory{"NZ"} + aliases{ + "NZ-CHAT", + } + } + America/Chicago{ + territory{"US"} + aliases{ + "CST6CDT", + "SystemV/CST6CDT", + "US/Central", + } + } + America/Chihuahua{ + territory{"MX"} + } + Europe/Chisinau{ + territory{"MD"} + aliases{ + "Europe/Tiraspol", + } + } + Asia/Choibalsan{ + territory{"MN"} + } + Asia/Chongqing{ + territory{"CN"} + aliases{ + "Asia/Chungking", + } + } + Indian/Christmas{ + territory{"CX"} + } + Indian/Cocos{ + territory{"CC"} + } + Asia/Colombo{ + territory{"LK"} + } + America/Argentina/ComodRivadavia{ + territory{"AR"} + } + Indian/Comoro{ + territory{"KM"} + } + Africa/Conakry{ + territory{"GN"} + } + Europe/Copenhagen{ + territory{"DK"} + } + America/Cordoba{ + territory{"AR"} + aliases{ + "America/Argentina/Cordoba", + "America/Rosario", + } + } + America/Costa_Rica{ + territory{"CR"} + } + America/Cuiaba{ + territory{"BR"} + } + America/Curacao{ + territory{"AN"} + } + Africa/Dakar{ + territory{"SN"} + } + Asia/Damascus{ + territory{"SY"} + } + America/Danmarkshavn{ + territory{"GL"} + } + Africa/Dar_es_Salaam{ + territory{"TZ"} + } + Australia/Darwin{ + territory{"AU"} + aliases{ + "Australia/North", + } + } + Antarctica/Davis{ + territory{"AQ"} + } + America/Dawson{ + territory{"CA"} + } + America/Dawson_Creek{ + territory{"CA"} + } + America/Denver{ + territory{"US"} + aliases{ + "MST7MDT", + "SystemV/MST7MDT", + "US/Mountain", + } + } + America/Detroit{ + territory{"US"} + aliases{ + "US/Michigan", + } + } + Asia/Dhaka{ + territory{"BD"} + aliases{ + "Asia/Dacca", + } + } + Asia/Dili{ + territory{"TL"} + } + Africa/Djibouti{ + territory{"DJ"} + } + America/Dominica{ + territory{"DM"} + } + Africa/Douala{ + territory{"CM"} + } + Asia/Dubai{ + territory{"AE"} + } + Europe/Dublin{ + territory{"IE"} + aliases{ + "Eire", + } + } + Antarctica/DumontDUrville{ + territory{"AQ"} + } + Asia/Dushanbe{ + territory{"TJ"} + } + Pacific/Easter{ + territory{"CL"} + aliases{ + "Chile/EasterIsland", + } + } + America/Edmonton{ + territory{"CA"} + aliases{ + "Canada/Mountain", + } + } + Pacific/Efate{ + territory{"VU"} + } + America/Eirunepe{ + territory{"BR"} + } + Africa/El_Aaiun{ + territory{"EH"} + } + America/El_Salvador{ + territory{"SV"} + } + Pacific/Enderbury{ + territory{"KI"} + } + Atlantic/Faeroe{ + territory{"FO"} + } + Pacific/Fakaofo{ + territory{"TK"} + } + Pacific/Fiji{ + territory{"FJ"} + } + America/Fortaleza{ + territory{"BR"} + } + Africa/Freetown{ + territory{"SL"} + } + Pacific/Funafuti{ + territory{"TV"} + } + Africa/Gaborone{ + territory{"BW"} + } + Pacific/Galapagos{ + territory{"EC"} + } + Pacific/Gambier{ + territory{"PF"} + aliases{ + "SystemV/YST9", + } + } + Asia/Gaza{ + territory{"PS"} + } + Europe/Gibraltar{ + territory{"GI"} + } + America/Glace_Bay{ + territory{"CA"} + } + Etc/GMT{ + territory{"001"} + aliases{ + "Etc/GMT+0", + "Etc/GMT-0", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "UCT", + "UTC", + "Universal", + "Zulu", + } + } + Etc/GMT-1{ + territory{"001"} + } + Etc/GMT-2{ + territory{"001"} + } + Etc/GMT-3{ + territory{"001"} + } + Etc/GMT-4{ + territory{"001"} + } + Etc/GMT-5{ + territory{"001"} + } + Etc/GMT-6{ + territory{"001"} + } + Etc/GMT-7{ + territory{"001"} + } + Etc/GMT-8{ + territory{"001"} + } + Etc/GMT-9{ + territory{"001"} + } + Etc/GMT-10{ + territory{"001"} + } + Etc/GMT-11{ + territory{"001"} + } + Etc/GMT-12{ + territory{"001"} + } + Etc/GMT-13{ + territory{"001"} + } + Etc/GMT-14{ + territory{"001"} + } + Etc/GMT+1{ + territory{"001"} + } + Etc/GMT+2{ + territory{"001"} + } + Etc/GMT+3{ + territory{"001"} + } + Etc/GMT+4{ + territory{"001"} + } + Etc/GMT+5{ + territory{"001"} + } + Etc/GMT+6{ + territory{"001"} + } + Etc/GMT+7{ + territory{"001"} + } + Etc/GMT+8{ + territory{"001"} + } + Etc/GMT+9{ + territory{"001"} + } + Etc/GMT+10{ + territory{"001"} + } + Etc/GMT+11{ + territory{"001"} + } + Etc/GMT+12{ + territory{"001"} + } + America/Godthab{ + territory{"GL"} + } + America/Goose_Bay{ + territory{"CA"} + } + America/Grand_Turk{ + territory{"TC"} + } + America/Grenada{ + territory{"GD"} + } + Pacific/Guadalcanal{ + territory{"SB"} + } + America/Guadeloupe{ + territory{"GP"} + } + Pacific/Guam{ + territory{"GU"} + } + America/Guatemala{ + territory{"GT"} + } + America/Guayaquil{ + territory{"EC"} + } + America/Guyana{ + territory{"GY"} + } + America/Halifax{ + territory{"CA"} + aliases{ + "Canada/Atlantic", + "SystemV/AST4ADT", + } + } + Africa/Harare{ + territory{"ZW"} + } + Asia/Harbin{ + territory{"CN"} + } + America/Havana{ + territory{"CU"} + aliases{ + "Cuba", + } + } + Europe/Helsinki{ + territory{"FI"} + } + America/Hermosillo{ + territory{"MX"} + } + Australia/Hobart{ + territory{"AU"} + aliases{ + "Australia/Tasmania", + } + } + Asia/Hong_Kong{ + territory{"HK"} + aliases{ + "Hongkong", + } + } + Pacific/Honolulu{ + territory{"US"} + aliases{ + "HST", + "SystemV/HST10", + "US/Hawaii", + } + } + Asia/Hovd{ + territory{"MN"} + } + America/Indianapolis{ + territory{"US"} + aliases{ + "America/Fort_Wayne", + "America/Indiana/Indianapolis", + "EST", + "SystemV/EST5", + "US/East-Indiana", + } + } + America/Inuvik{ + territory{"CA"} + } + America/Iqaluit{ + territory{"CA"} + } + Asia/Irkutsk{ + territory{"RU"} + } + Europe/Istanbul{ + territory{"TR"} + aliases{ + "Asia/Istanbul", + "Turkey", + } + } + Asia/Jakarta{ + territory{"ID"} + } + America/Jamaica{ + territory{"JM"} + aliases{ + "Jamaica", + } + } + Atlantic/Jan_Mayen{ + territory{"SJ"} + } + Asia/Jayapura{ + territory{"ID"} + } + Asia/Jerusalem{ + territory{"IL"} + aliases{ + "Asia/Tel_Aviv", + "Israel", + } + } + Africa/Johannesburg{ + territory{"ZA"} + } + Pacific/Johnston{ + territory{"UM"} + } + America/Jujuy{ + territory{"AR"} + aliases{ + "America/Argentina/Jujuy", + } + } + America/Juneau{ + territory{"US"} + } + Asia/Kabul{ + territory{"AF"} + } + Europe/Kaliningrad{ + territory{"RU"} + } + Asia/Kamchatka{ + territory{"RU"} + } + Africa/Kampala{ + territory{"UG"} + } + Asia/Karachi{ + territory{"PK"} + } + Asia/Kashgar{ + territory{"CN"} + } + Asia/Katmandu{ + territory{"NP"} + } + Indian/Kerguelen{ + territory{"TF"} + } + Africa/Khartoum{ + territory{"SD"} + } + Europe/Kiev{ + territory{"UA"} + } + Africa/Kigali{ + territory{"RW"} + } + Africa/Kinshasa{ + territory{"CD"} + } + Pacific/Kiritimati{ + territory{"KI"} + } + America/Indiana/Knox{ + territory{"US"} + aliases{ + "America/Knox_IN", + "US/Indiana-Starke", + } + } + Pacific/Kosrae{ + territory{"FM"} + } + Asia/Krasnoyarsk{ + territory{"RU"} + } + Asia/Kuala_Lumpur{ + territory{"MY"} + } + Asia/Kuching{ + territory{"MY"} + } + Asia/Kuwait{ + territory{"KW"} + } + Pacific/Kwajalein{ + territory{"MH"} + aliases{ + "Kwajalein", + } + } + America/La_Paz{ + territory{"BO"} + } + America/Argentina/La_Rioja{ + territory{"AR"} + } + Africa/Lagos{ + territory{"NG"} + } + Africa/Libreville{ + territory{"GA"} + } + America/Lima{ + territory{"PE"} + } + Australia/Lindeman{ + territory{"AU"} + } + Europe/Lisbon{ + territory{"PT"} + aliases{ + "Portugal", + } + } + Europe/Ljubljana{ + territory{"SI"} + } + Africa/Lome{ + territory{"TG"} + } + Europe/London{ + territory{"GB"} + aliases{ + "GB", + "GB-Eire", + } + } + Arctic/Longyearbyen{ + territory{"SJ"} + } + Australia/Lord_Howe{ + territory{"AU"} + aliases{ + "Australia/LHI", + } + } + America/Los_Angeles{ + territory{"US"} + aliases{ + "PST8PDT", + "SystemV/PST8PDT", + "US/Pacific", + "US/Pacific-New", + } + } + America/Louisville{ + territory{"US"} + aliases{ + "America/Kentucky/Louisville", + } + } + Africa/Luanda{ + territory{"AO"} + } + Africa/Lubumbashi{ + territory{"CD"} + } + Africa/Lusaka{ + territory{"ZM"} + } + Europe/Luxembourg{ + territory{"LU"} + } + Asia/Macau{ + territory{"MO"} + aliases{ + "Asia/Macao", + } + } + America/Maceio{ + territory{"BR"} + } + Atlantic/Madeira{ + territory{"PT"} + } + Europe/Madrid{ + territory{"ES"} + } + Asia/Magadan{ + territory{"RU"} + } + Indian/Mahe{ + territory{"SC"} + } + Pacific/Majuro{ + territory{"MH"} + } + Asia/Makassar{ + territory{"ID"} + aliases{ + "Asia/Ujung_Pandang", + } + } + Africa/Malabo{ + territory{"GQ"} + } + Indian/Maldives{ + territory{"MV"} + } + Europe/Malta{ + territory{"MT"} + } + America/Managua{ + territory{"NI"} + } + America/Manaus{ + territory{"BR"} + aliases{ + "Brazil/West", + } + } + Asia/Manila{ + territory{"PH"} + } + Africa/Maputo{ + territory{"MZ"} + } + America/Indiana/Marengo{ + territory{"US"} + } + Europe/Mariehamn{ + territory{"AX"} + } + Pacific/Marquesas{ + territory{"PF"} + } + America/Martinique{ + territory{"MQ"} + } + Africa/Maseru{ + territory{"LS"} + } + Indian/Mauritius{ + territory{"MU"} + } + Antarctica/Mawson{ + territory{"AQ"} + } + Indian/Mayotte{ + territory{"YT"} + } + America/Mazatlan{ + territory{"MX"} + aliases{ + "Mexico/BajaSur", + } + } + Africa/Mbabane{ + territory{"SZ"} + } + Antarctica/McMurdo{ + territory{"AQ"} + } + Australia/Melbourne{ + territory{"AU"} + aliases{ + "Australia/Victoria", + } + } + America/Mendoza{ + territory{"AR"} + aliases{ + "America/Argentina/Mendoza", + } + } + America/Menominee{ + territory{"US"} + } + America/Merida{ + territory{"MX"} + } + America/Mexico_City{ + territory{"MX"} + aliases{ + "Mexico/General", + } + } + Pacific/Midway{ + territory{"UM"} + } + Europe/Minsk{ + territory{"BY"} + } + America/Miquelon{ + territory{"PM"} + } + Africa/Mogadishu{ + territory{"SO"} + } + Europe/Monaco{ + territory{"MC"} + } + Africa/Monrovia{ + territory{"LR"} + } + America/Monterrey{ + territory{"MX"} + } + America/Montevideo{ + territory{"UY"} + } + America/Kentucky/Monticello{ + territory{"US"} + } + America/Montreal{ + territory{"CA"} + } + America/Montserrat{ + territory{"MS"} + } + Europe/Moscow{ + territory{"RU"} + aliases{ + "W-SU", + } + } + Asia/Muscat{ + territory{"OM"} + } + Africa/Nairobi{ + territory{"KE"} + } + America/Nassau{ + territory{"BS"} + } + Pacific/Nauru{ + territory{"NR"} + } + Africa/Ndjamena{ + territory{"TD"} + } + America/New_York{ + territory{"US"} + aliases{ + "EST5EDT", + "SystemV/EST5EDT", + "US/Eastern", + } + } + Africa/Niamey{ + territory{"NE"} + } + Asia/Nicosia{ + territory{"CY"} + aliases{ + "Europe/Nicosia", + } + } + America/Nipigon{ + territory{"CA"} + } + Pacific/Niue{ + territory{"NU"} + } + America/Nome{ + territory{"US"} + } + Pacific/Norfolk{ + territory{"NF"} + } + America/Noronha{ + territory{"BR"} + aliases{ + "Brazil/DeNoronha", + } + } + Africa/Nouakchott{ + territory{"MR"} + } + Pacific/Noumea{ + territory{"NC"} + } + Asia/Novosibirsk{ + territory{"RU"} + } + Asia/Omsk{ + territory{"RU"} + } + Asia/Oral{ + territory{"KZ"} + } + Europe/Oslo{ + territory{"NO"} + } + Africa/Ouagadougou{ + territory{"BF"} + } + Pacific/Pago_Pago{ + territory{"AS"} + aliases{ + "Pacific/Samoa", + "US/Samoa", + } + } + Pacific/Palau{ + territory{"PW"} + } + Antarctica/Palmer{ + territory{"AQ"} + } + America/Panama{ + territory{"PA"} + } + America/Pangnirtung{ + territory{"CA"} + } + America/Paramaribo{ + territory{"SR"} + } + Europe/Paris{ + territory{"FR"} + } + Australia/Perth{ + territory{"AU"} + aliases{ + "Australia/West", + } + } + Asia/Phnom_Penh{ + territory{"KH"} + } + America/Phoenix{ + territory{"US"} + aliases{ + "MST", + "SystemV/MST7", + "US/Arizona", + } + } + Pacific/Pitcairn{ + territory{"PN"} + aliases{ + "SystemV/PST8", + } + } + Pacific/Ponape{ + territory{"FM"} + } + Asia/Pontianak{ + territory{"ID"} + } + Pacific/Port_Moresby{ + territory{"PG"} + } + America/Port_of_Spain{ + territory{"TT"} + } + America/Port-au-Prince{ + territory{"HT"} + } + America/Porto_Velho{ + territory{"BR"} + } + Africa/Porto-Novo{ + territory{"BJ"} + } + Europe/Prague{ + territory{"CZ"} + } + America/Puerto_Rico{ + territory{"PR"} + aliases{ + "SystemV/AST4", + } + } + Asia/Pyongyang{ + territory{"KP"} + } + Asia/Qatar{ + territory{"QA"} + } + Asia/Qyzylorda{ + territory{"KZ"} + } + America/Rainy_River{ + territory{"CA"} + } + Asia/Rangoon{ + territory{"MM"} + } + America/Rankin_Inlet{ + territory{"CA"} + } + Pacific/Rarotonga{ + territory{"CK"} + } + America/Recife{ + territory{"BR"} + } + America/Regina{ + territory{"CA"} + aliases{ + "Canada/East-Saskatchewan", + "Canada/Saskatchewan", + "SystemV/CST6", + } + } + Indian/Reunion{ + territory{"RE"} + } + Atlantic/Reykjavik{ + territory{"IS"} + aliases{ + "Iceland", + } + } + Europe/Riga{ + territory{"LV"} + } + America/Rio_Branco{ + territory{"BR"} + aliases{ + "America/Porto_Acre", + "Brazil/Acre", + } + } + America/Argentina/Rio_Gallegos{ + territory{"AR"} + } + Asia/Riyadh{ + territory{"SA"} + } + Europe/Rome{ + territory{"IT"} + } + Antarctica/Rothera{ + territory{"AQ"} + } + Asia/Saigon{ + territory{"VN"} + } + Pacific/Saipan{ + territory{"MP"} + } + Asia/Sakhalin{ + territory{"RU"} + } + Europe/Samara{ + territory{"RU"} + } + Asia/Samarkand{ + territory{"UZ"} + } + America/Argentina/San_Juan{ + territory{"AR"} + } + Europe/San_Marino{ + territory{"SM"} + } + America/Santiago{ + territory{"CL"} + aliases{ + "Chile/Continental", + } + } + America/Santo_Domingo{ + territory{"DO"} + } + America/Sao_Paulo{ + territory{"BR"} + aliases{ + "Brazil/East", + } + } + Africa/Sao_Tome{ + territory{"ST"} + } + Europe/Sarajevo{ + territory{"BA"} + } + America/Scoresbysund{ + territory{"GL"} + } + Asia/Seoul{ + territory{"KR"} + aliases{ + "ROK", + } + } + Asia/Shanghai{ + territory{"CN"} + aliases{ + "PRC", + } + } + America/Shiprock{ + territory{"US"} + aliases{ + "Navajo", + } + } + Europe/Simferopol{ + territory{"UA"} + } + Asia/Singapore{ + territory{"SG"} + aliases{ + "Singapore", + } + } + Europe/Skopje{ + territory{"MK"} + } + Europe/Sofia{ + territory{"BG"} + } + Atlantic/South_Georgia{ + territory{"GS"} + } + Antarctica/South_Pole{ + territory{"AQ"} + } + Atlantic/St_Helena{ + territory{"SH"} + } + America/St_Johns{ + territory{"CA"} + aliases{ + "Canada/Newfoundland", + } + } + America/St_Kitts{ + territory{"KN"} + } + America/St_Lucia{ + territory{"LC"} + } + America/St_Thomas{ + territory{"VI"} + aliases{ + "America/Virgin", + } + } + America/St_Vincent{ + territory{"VC"} + } + Atlantic/Stanley{ + territory{"FK"} + } + Europe/Stockholm{ + territory{"SE"} + } + America/Swift_Current{ + territory{"CA"} + } + Australia/Sydney{ + territory{"AU"} + aliases{ + "Australia/ACT", + "Australia/Canberra", + "Australia/NSW", + } + } + Antarctica/Syowa{ + territory{"AQ"} + } + Pacific/Tahiti{ + territory{"PF"} + } + Asia/Taipei{ + territory{"TW"} + aliases{ + "ROC", + } + } + Europe/Tallinn{ + territory{"EE"} + } + Pacific/Tarawa{ + territory{"KI"} + } + Asia/Tashkent{ + territory{"UZ"} + } + Asia/Tbilisi{ + territory{"GE"} + } + America/Tegucigalpa{ + territory{"HN"} + } + Asia/Tehran{ + territory{"IR"} + aliases{ + "Iran", + } + } + Asia/Thimphu{ + territory{"BT"} + aliases{ + "Asia/Thimbu", + } + } + America/Thule{ + territory{"GL"} + } + America/Thunder_Bay{ + territory{"CA"} + } + America/Tijuana{ + territory{"MX"} + aliases{ + "America/Ensenada", + "Mexico/BajaNorte", + } + } + Africa/Timbuktu{ + territory{"ML"} + } + Europe/Tirane{ + territory{"AL"} + } + Asia/Tokyo{ + territory{"JP"} + aliases{ + "Japan", + } + } + Pacific/Tongatapu{ + territory{"TO"} + } + America/Toronto{ + territory{"CA"} + aliases{ + "Canada/Eastern", + } + } + America/Tortola{ + territory{"VG"} + } + Africa/Tripoli{ + territory{"LY"} + aliases{ + "Libya", + } + } + Pacific/Truk{ + territory{"FM"} + } + America/Argentina/Tucuman{ + territory{"AR"} + } + Africa/Tunis{ + territory{"TN"} + } + Asia/Ulaanbaatar{ + territory{"MN"} + aliases{ + "Asia/Ulan_Bator", + } + } + Asia/Urumqi{ + territory{"CN"} + } + America/Argentina/Ushuaia{ + territory{"AR"} + } + Europe/Uzhgorod{ + territory{"UA"} + } + Europe/Vaduz{ + territory{"LI"} + } + America/Vancouver{ + territory{"CA"} + aliases{ + "Canada/Pacific", + } + } + Europe/Vatican{ + territory{"VA"} + } + America/Indiana/Vevay{ + territory{"US"} + } + Europe/Vienna{ + territory{"AT"} + } + Asia/Vientiane{ + territory{"LA"} + } + Europe/Vilnius{ + territory{"LT"} + } + Asia/Vladivostok{ + territory{"RU"} + } + Antarctica/Vostok{ + territory{"AQ"} + } + Pacific/Wake{ + territory{"UM"} + } + Pacific/Wallis{ + territory{"WF"} + } + Europe/Warsaw{ + territory{"PL"} + aliases{ + "Poland", + } + } + America/Whitehorse{ + territory{"CA"} + aliases{ + "Canada/Yukon", + } + } + Africa/Windhoek{ + territory{"NA"} + } + America/Winnipeg{ + territory{"CA"} + aliases{ + "Canada/Central", + } + } + America/Yakutat{ + territory{"US"} + } + Asia/Yakutsk{ + territory{"RU"} + } + Pacific/Yap{ + territory{"FM"} + } + Asia/Yekaterinburg{ + territory{"RU"} + } + America/Yellowknife{ + territory{"CA"} + } + Asia/Yerevan{ + territory{"AM"} + } + Europe/Zagreb{ + territory{"HR"} + } + Europe/Zaporozhye{ + territory{"UA"} + } + Europe/Zurich{ + territory{"CH"} + } + } +} diff --git a/icuSources/data/misc/zoneinfo.txt b/icuSources/data/misc/zoneinfo.txt index 44deb9d6..a2a67e5a 100644 --- a/icuSources/data/misc/zoneinfo.txt +++ b/icuSources/data/misc/zoneinfo.txt @@ -3,18 +3,20 @@ // Corporation and others. All Rights Reserved. //--------------------------------------------------------- // Build tool: tz2icu -// Build date: Mon Oct 1 16:11:06 2007 +// Build date: Tue Jul 17 12:42:22 2007 // Olson source: ftp://elsie.nci.nih.gov/pub/ -// Olson version: 2007h +// Olson version: 2007f +// ICU version: 3.6 //--------------------------------------------------------- // >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! << // >> !!! >>> DO NOT EDIT <<< !!! << //--------------------------------------------------------- -zoneinfo { +zoneinfo:table(nofallback) { + TZVersion { "2007f" } Zones:array { - /* ACT */ :int { 323 } //Z#0 -, /* AET */ :int { 335 } //Z#1 + /* ACT */ :int { 322 } //Z#0 +, /* AET */ :int { 334 } //Z#1 , /* AGT */ :int { 63 } //Z#2 , /* ART */ :int { 18 } //Z#3 , /* AST */ :int { 59 } //Z#4 @@ -32,7 +34,7 @@ zoneinfo { :intvector { -1062210920 } :intvector { 10800, 0 } :bin { "00" } - :intvector { 7, 364 } + :intvector { 7, 363 } } //Z#7 , /* Africa/Algiers */ :array { :intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1531443600, -956365200, -950486400, -942012000, -812502000, -796262400, -781052400, -766630800, -733280400, -439430400, -212029200, 41468400, 54774000, 231724800, 246236400, 259545600, 275274000, 309740400, 325468800, 341802000, 357523200 } @@ -83,12 +85,12 @@ zoneinfo { :bin { "" } } //Z#17 , /* Africa/Cairo */ :array { - :intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400, 1177624800, 1189112400 } + :intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400 } :intvector { 7200, 0, 7200, 3600 } - :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Egypt" - :intvector { 7200, 2008 } - :intvector { 3, 18, 369 } + :intvector { 7200, 2007 } + :intvector { 3, 18, 368 } } //Z#18 , /* Africa/Casablanca */ :array { :intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000 } @@ -146,7 +148,7 @@ zoneinfo { :intvector { -2109290652 } :intvector { 7200, 0 } :bin { "00" } - :intvector { 29, 346 } + :intvector { 29, 345 } } //Z#29 , /* Africa/Johannesburg */ :array { :intvector { -2109288600, -860976000, -845254800, -829526400, -813805200 } @@ -273,7 +275,7 @@ zoneinfo { :intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000 } :intvector { 3600, 0, 3600, 3600, 7200, 0 } :bin { "0001000100010002000100010001000100010001000100010002000102" } - :intvector { 55, 494 } + :intvector { 55, 493 } } //Z#55 , /* Africa/Tunis */ :array { :intvector { -1855958961, -969242400, -950493600, -941940000, -891136800, -877827600, -857257200, -844556400, -842918400, -842223600, -828230400, -812502000, -796269600, -781052400, -766634400, 231202800, 243903600, 262825200, 276044400, 581122800, 591145200, 606870000, 622594800, 641516400, 654649200, 1114902000, 1128038400 } @@ -295,7 +297,7 @@ zoneinfo { :bin { "010100000100010001000100010001000100010001000100010001000100010001020203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } "US" :intvector { -36000, 2007 } - :intvector { 58, 77, 565 } + :intvector { 58, 77, 564 } } //Z#58 , /* America/Anchorage */ :array { :intvector { -880200000, -769395600, -765378000, -86882400, -21470400, -5749200, 9979200, 25700400, 41428800, 57754800, 73483200, 89204400, 104932800, 120654000, 126705600, 152103600, 162388800, 183553200, 199281600, 215607600, 230731200, 247057200, 262785600, 278506800, 294235200, 309956400, 325684800, 341406000, 357134400, 372855600, 388584000, 404910000, 420033600, 436359600, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000 } @@ -303,7 +305,7 @@ zoneinfo { :bin { "010100000100010001000100010001000100010001000100010001000100010001020203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } "US" :intvector { -32400, 2007 } - :intvector { 4, 59, 564 } + :intvector { 4, 59, 563 } } //Z#59 , /* America/Anguilla */ :array { :intvector { -1825098464 } @@ -337,13 +339,13 @@ zoneinfo { :intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400 } :intvector { -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100020302030203020300030203020102" } - :intvector { 66, 97, 183 } + :intvector { 66, 97, 182 } } //Z#66 , /* America/Argentina/Jujuy */ :array { :intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 657086400, 669178800, 686721600, 699415200, 719377200, 731469600, 938919600, 952052400 } :intvector { -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100020302030203000100030203020102" } - :intvector { 67, 137 } + :intvector { 67, 136 } } //Z#67 , /* America/Argentina/La_Rioja */ :array { :intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667792800, 673588800, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000 } @@ -354,7 +356,7 @@ zoneinfo { :intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 655963200, 667796400, 687499200, 699418800, 719380800, 731469600, 938919600, 952052400, 1085281200, 1096171200 } :intvector { -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000203020302030001000100030201020002" } - :intvector { 69, 151 } + :intvector { 69, 150 } } //Z#69 , /* America/Argentina/Rio_Gallegos */ :array { :intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687927600, 699415200, 719377200, 731469600, 938919600, 952052400, 1086058800, 1087704000 } @@ -446,11 +448,11 @@ zoneinfo { :intvector { -25200, 2007 } } //Z#87 , /* America/Campo_Grande */ :array { - :intvector { -1767212492, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1066536000, 1076814000, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400 } + :intvector { -1767212492, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1066536000, 1076814000, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200 } :intvector { -14400, 0, -14400, 3600 } - :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "Brazil" - :intvector { -14400, 2008 } + :intvector { -14400, 2007 } } //Z#88 , /* America/Cancun */ :array { :intvector { -1514743200, 377935200, 828860400, 846396000, 860310000, 877845600, 891759600, 902037600, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200 } @@ -460,9 +462,9 @@ zoneinfo { :intvector { -21600, 2002 } } //Z#89 , /* America/Caracas */ :array { - :intvector { -1826739140, -157750200, 1199160000 } + :intvector { -1826739140, -157750200 } :intvector { -16200, 0, -14400, 0 } - :bin { "000100" } + :bin { "0001" } } //Z#90 , /* America/Catamarca */ :int { 64 } //Z#91 , /* America/Cayenne */ :array { @@ -481,7 +483,7 @@ zoneinfo { :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000200010001000100010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -21600, 2007 } - :intvector { 94, 349, 567 } + :intvector { 94, 348, 566 } } //Z#94 , /* America/Chihuahua */ :array { :intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800 } @@ -498,11 +500,11 @@ zoneinfo { :bin { "000100010001000100" } } //Z#98 , /* America/Cuiaba */ :array { - :intvector { -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400 } + :intvector { -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200 } :intvector { -14400, 0, -14400, 3600 } - :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "Brazil" - :intvector { -14400, 2008 } + :intvector { -14400, 2007 } } //Z#99 , /* America/Curacao */ :array { :intvector { -1826738656, -157750200 } @@ -532,7 +534,7 @@ zoneinfo { :bin { "0100010001000100010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -25200, 2007 } - :intvector { 104, 188, 509, 573 } + :intvector { 104, 187, 508, 572 } } //Z#104 , /* America/Detroit */ :array { :intvector { -2051202469, -1724083200, -880218000, -769395600, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } @@ -540,7 +542,7 @@ zoneinfo { :bin { "0001020201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } "US" :intvector { -18000, 2007 } - :intvector { 105, 572 } + :intvector { 105, 571 } } //Z#105 , /* America/Dominica */ :array { :intvector { -1846266804 } @@ -553,7 +555,7 @@ zoneinfo { :bin { "0001000100010001000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -25200, 2007 } - :intvector { 107, 356 } + :intvector { 107, 355 } } //Z#107 , /* America/Eirunepe */ :array { :intvector { -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800 } @@ -565,7 +567,7 @@ zoneinfo { :intvector { -21600, 0, -21600, 3600 } :bin { "0001000100" } } //Z#109 -, /* America/Ensenada */ :int { 198 } //Z#110 +, /* America/Ensenada */ :int { 197 } //Z#110 , /* America/Fort_Wayne */ :int { 125 } //Z#111 , /* America/Fortaleza */ :array { :intvector { -1767216360, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 972180000, 1003028400, 1013911200 } @@ -631,7 +633,7 @@ zoneinfo { :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -14400, 2007 } - :intvector { 122, 352 } + :intvector { 122, 351 } } //Z#122 , /* America/Havana */ :array { :intvector { -1402813824, -1311534000, -1300996800, -933534000, -925675200, -902084400, -893620800, -870030000, -862171200, -775681200, -767822400, -744231600, -736372800, -144702000, -134251200, -113425200, -102542400, -86295600, -72907200, -54154800, -41457600, -21495600, -5774400, 9954000, 25675200, 41403600, 57729600, 73458000, 87364800, 104907600, 118900800, 136357200, 150436800, 167806800, 183528000, 199256400, 215582400, 230706000, 247032000, 263365200, 276667200, 290581200, 308721600, 322030800, 340171200, 358318800, 371620800, 389768400, 403070400, 421218000, 434520000, 452667600, 466574400, 484117200, 498024000, 511333200, 529473600, 542782800, 560923200, 574837200, 592372800, 606286800, 623822400, 638946000, 655876800, 671000400, 687330000, 702450000, 718779600, 733899600, 750229200, 765349200, 781678800, 796798800, 813128400, 828853200, 844578000, 860302800, 876632400, 891147600, 909291600, 922597200, 941346000, 954651600, 972795600, 986101200, 1004245200, 1018155600, 1035694800, 1049605200, 1067144400, 1081054800, 1162098000 } @@ -639,7 +641,7 @@ zoneinfo { :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Cuba" :intvector { -18000, 2007 } - :intvector { 123, 363 } + :intvector { 123, 362 } } //Z#123 , /* America/Hermosillo */ :array { :intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 } @@ -652,7 +654,7 @@ zoneinfo { :bin { "010001000100010100010001000100010001000100010001000100020002030203020302" } "US" :intvector { -18000, 2007 } - :intvector { 111, 125, 133, 474, 568 } + :intvector { 111, 125, 132, 473, 567 } } //Z#125 , /* America/Indiana/Knox */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620841600, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -447267600, -431539200, -415818000, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -195066000, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 1143961200, 1162105200 } @@ -660,7 +662,7 @@ zoneinfo { :bin { "01000100010100010001000100010001000100010001000100010001000100010001000100020001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020100" } "US" :intvector { -21600, 2007 } - :intvector { 126, 141, 571 } + :intvector { 126, 140, 570 } } //Z#126 , /* America/Indiana/Marengo */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -589392000, -576090000, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -292438800, -273686400, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152089200, 162370800, 183535200, 1143961200, 1162101600 } @@ -674,2041 +676,2034 @@ zoneinfo { :intvector { -21600, 0, -21600, 3600, -18000, 0 } :bin { "0100010001010001000100010001000100010001000100010001000200010001000100010001000100010001000100010001020100" } "US" - :intvector { -18000, 2007 } - } //Z#128 -, /* America/Indiana/Tell_City */ :array { - :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -526492800, -513190800, -495043200, -481741200, -462996000, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -289414800, -273686400, -260989200, -242236800, -226515600, -210787200, -195066000, -179337600, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162105200 } - :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } - :bin { "0100010001010001000100010001000100010001000100010001000100010002030203020100" } - "US" :intvector { -21600, 2007 } - } //Z#129 + } //Z#128 , /* America/Indiana/Vevay */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -495043200, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 1143961200, 1162101600 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } :bin { "010001000101000203020302030203020302" } "US" :intvector { -18000, 2007 } - } //Z#130 + } //Z#129 , /* America/Indiana/Vincennes */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -526492800, -513190800, -495043200, -481741200, -462996000, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -289414800, -273686400, -260989200, -242236800, -226515600, -210787200, -195066000, -179337600, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162105200 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } :bin { "0100010001010001000100010001000100010001000100010001000100010002030203020100" } "US" - :intvector { -18000, 2007 } - } //Z#131 + :intvector { -21600, 2007 } + } //Z#130 , /* America/Indiana/Winamac */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620841600, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -447267600, -431539200, -415818000, -400089600, -386787600, -368640000, -355338000, -337190400, -323888400, -305740800, -292438800, -273686400, -21488400, -5767200, 9961200, 25682400, 1143961200, 1162105200 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } :bin { "0100010001010001000100010001000100010001000100010001000100010001000100010002030203020100" } "US" :intvector { -18000, 2007 } - } //Z#132 -, /* America/Indianapolis */ :int { 125 } //Z#133 + } //Z#131 +, /* America/Indianapolis */ :int { 125 } //Z#132 , /* America/Inuvik */ :array { :intvector { -536457600, -147888000, -131558400, 294228000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800 } :intvector { -28800, 0, -28800, 7200, -25200, 0, -25200, 3600 } :bin { "00010002030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } "Canada" :intvector { -25200, 2007 } - } //Z#134 + } //Z#133 , /* America/Iqaluit */ :array { :intvector { -865296000, -769395600, -765396000, -147898800, -131569200, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600, -18000, 7200 } :bin { "0303020402030203020302030203020302030203020302030203020302030203020302030203020302030203000102030203020302030203020302" } "Canada" :intvector { -18000, 2007 } - } //Z#135 + } //Z#134 , /* America/Jamaica */ :array { :intvector { -1827687168, 136364400, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 } :intvector { -18000, 0, -18000, 3600 } :bin { "000100010001000100010001000100010001000100" } - :intvector { 136, 491 } - } //Z#136 -, /* America/Jujuy */ :int { 67 } //Z#137 + :intvector { 135, 490 } + } //Z#135 +, /* America/Jujuy */ :int { 67 } //Z#136 , /* America/Juneau */ :array { :intvector { -880207200, -769395600, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000 } :intvector { -32400, 0, -32400, 3600, -28800, 0, -28800, 3600 } :bin { "0303020302030203020302030203020302030203020302030203020302030203000001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -32400, 2007 } - } //Z#138 + } //Z#137 , /* America/Kentucky/Louisville */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -1535904000, -1525280400, -905097600, -891795600, -880214400, -769395600, -765392400, -757360800, -744224400, -715795200, -608144400, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -266432400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152089200, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } :bin { "01000100010001000101000100010001000100010001000100010001000100010001000102030203020302030203020302010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } "US" :intvector { -18000, 2007 } - :intvector { 139, 145 } - } //Z#139 + :intvector { 138, 144 } + } //Z#138 , /* America/Kentucky/Monticello */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600 } :bin { "01000100010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102030203020302030203020302" } "US" :intvector { -18000, 2007 } - } //Z#140 -, /* America/Knox_IN */ :int { 126 } //Z#141 + } //Z#139 +, /* America/Knox_IN */ :int { 126 } //Z#140 , /* America/La_Paz */ :array { :intvector { -1205954844, -1192307244 } :intvector { -16356, 3600, -14400, 0 } :bin { "0001" } - } //Z#142 + } //Z#141 , /* America/Lima */ :array { :intvector { -1938538284, -1009825200, -1002052800, -986756400, -971035200, -955306800, -939585600, 504939600, 512712000, 536475600, 544248000, 631170000, 638942400, 757400400, 765172800 } :intvector { -18000, 0, -18000, 3600 } :bin { "000100010001000100010001000100" } - } //Z#143 + } //Z#142 , /* America/Los_Angeles */ :array { :intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -769395600, -765385200, -687967200, -662655600, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400 } :intvector { -28800, 0, -28800, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -28800, 2007 } - :intvector { 144, 514, 574, 575 } - } //Z#144 -, /* America/Louisville */ :int { 139 } //Z#145 + :intvector { 143, 513, 573, 574 } + } //Z#143 +, /* America/Louisville */ :int { 138 } //Z#144 , /* America/Maceio */ :array { :intvector { -1767217028, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 813726000, 824004000, 938919600, 951616800, 970974000, 972180000, 1003028400, 1013911200 } :intvector { -10800, 0, -10800, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100" } - } //Z#146 + } //Z#145 , /* America/Managua */ :array { :intvector { -1121105688, 105084000, 161758800, 290584800, 299134800, 322034400, 330584400, 694260000, 717310800, 725868000, 852094800, 1113112800, 1128229200, 1146384000, 1159682400 } :intvector { -21600, 0, -21600, 3600, -18000, 0 } :bin { "000200010001000200020001000100" } - } //Z#147 + } //Z#146 , /* America/Manaus */ :array { :intvector { -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 } :intvector { -14400, 0, -14400, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100" } - :intvector { 148, 345 } - } //Z#148 + :intvector { 147, 344 } + } //Z#147 , /* America/Martinique */ :array { :intvector { -1851537340, 323841600, 338958000 } :intvector { -14400, 0, -14400, 3600 } :bin { "000100" } - } //Z#149 + } //Z#148 , /* America/Mazatlan */ :array { :intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800 } :intvector { -28800, 0, -25200, 0, -25200, 3600, -21600, 0 } :bin { "010301030103010001020102010201020102010201" } "Mexico" :intvector { -25200, 2002 } - :intvector { 150, 500 } - } //Z#150 -, /* America/Mendoza */ :int { 69 } //Z#151 + :intvector { 149, 499 } + } //Z#149 +, /* America/Mendoza */ :int { 69 } //Z#150 , /* America/Menominee */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -747244800, -733942800, -116438400, -100112400, -21484800, 104914800, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -21600, 0, -21600, 3600, -18000, 0 } :bin { "0100010001010001000100020100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -21600, 2007 } - } //Z#152 + } //Z#151 , /* America/Merida */ :array { :intvector { -1514743200, 377935200, 407653200, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200 } :intvector { -21600, 0, -21600, 3600, -18000, 0 } :bin { "000200010001000100010001000100" } "Mexico" :intvector { -21600, 2002 } - } //Z#153 + } //Z#152 , /* America/Mexico_City */ :array { :intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -975261600, -963169200, -917114400, -907354800, -821901600, -810068400, -627501600, -612990000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200 } :intvector { -25200, 0, -21600, 0, -21600, 3600 } :bin { "0001000100010201020102010201020102010201020102010201" } "Mexico" :intvector { -21600, 2002 } - :intvector { 154, 501 } - } //Z#154 + :intvector { 153, 500 } + } //Z#153 , /* America/Miquelon */ :array { :intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400 } :intvector { -14400, 0, -10800, 0, -10800, 3600 } :bin { "000102010201020102010201020102010201020102010201020102010201020102010201020102010201" } "Canada" :intvector { -10800, 2007 } - } //Z#155 + } //Z#154 , /* America/Moncton */ :array { :intvector { -2131642800, -1632074400, -1614798000, -1153681200, -1145822400, -1122231600, -1114372800, -1090782000, -1082923200, -1059332400, -1051473600, -1027882800, -1020024000, -996433200, -988574400, -965674800, -955396800, -934743600, -923947200, -904503600, -891892800, -880221600, -769395600, -765399600, -747252000, -733950000, -715802400, -702500400, -684352800, -671050800, -652903200, -639601200, -620848800, -608151600, -589399200, -576097200, -557949600, -544647600, -526500000, -513198000, -495050400, -481748400, -463600800, -450298800, -431546400, -418244400, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733896060, 752036460, 765345660, 783486060, 796795260, 814935660, 828849660, 846385260, 860299260, 877834860, 891748860, 909284460, 923198460, 941338860, 954648060, 972788460, 986097660, 1004238060, 1018152060, 1035687660, 1049601660, 1067137260, 1081051260, 1099191660, 1112500860, 1130641260, 1143950460, 1162090860 } :intvector { -14400, 0, -14400, 3600 } :bin { "000100010001000100010001000100010001000100010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -14400, 2007 } - } //Z#156 + } //Z#155 , /* America/Monterrey */ :array { :intvector { -1514743200, 576057600, 594198000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200 } :intvector { -21600, 0, -21600, 3600 } :bin { "000100010001000100010001000100" } "Mexico" :intvector { -21600, 2002 } - } //Z#157 + } //Z#156 , /* America/Montevideo */ :array { :intvector { -1567455316, -1459542600, -1443819600, -1428006600, -1412283600, -1396470600, -1380747600, -1141590600, -1128286800, -1110141000, -1096837200, -1078691400, -1065387600, -1046637000, -1033938000, -1015187400, -1002488400, -983737800, -971038800, -952288200, -938984400, -920838600, -907534800, -896819400, -883602000, -853619400, -845848800, -334789200, -319672800, -314226000, -309996000, -149720400, -134604000, -118270800, -100044000, -86821200, -68508000, -50446800, -34119000, -18910800, -2583000, 12625200, 28953000, 72932400, 82692000, 132116400, 156911400, 212983200, 250052400, 260244000, 307594800, 325994400, 566449200, 574308000, 597812400, 605671200, 625633200, 636516000, 656478000, 667965600, 688532400, 699415200, 719377200, 730864800, 1095562800, 1111896000, 1128834000, 1142136000, 1159678800 } :intvector { -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600 } :bin { "000100010001000100010001000100010001000100010001000402040204020402040204020302030203020402030402040204020402040204020402040204020402040204" } "Uruguay" :intvector { -10800, 2007 } - } //Z#158 + } //Z#157 , /* America/Montreal */ :array { :intvector { -1665334800, -1662753600, -1632070800, -1614794400, -1601742600, -1583775000, -1567355400, -1554053400, -1535907600, -1522603800, -1504458000, -1491154200, -1439830800, -1428255000, -1409504400, -1396805400, -1378054800, -1365355800, -1346612400, -1333915200, -1315162800, -1301860800, -1283713200, -1270411200, -1252263600, -1238961600, -1220814000, -1207512000, -1188759600, -1176062400, -1157310000, -1144008000, -1125860400, -1112558400, -1094410800, -1081108800, -1062961200, -1049659200, -1031511600, -1018209600, -1000062000, -986760000, -968007600, -955310400, -936558000, -880218000, -769395600, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -636573600, -620845200, -605124000, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -18000, 2007 } - } //Z#159 + } //Z#158 , /* America/Montserrat */ :array { :intvector { -1846266608 } :intvector { -14400, 0 } :bin { "00" } - } //Z#160 + } //Z#159 , /* America/Nassau */ :array { :intvector { -1825095036, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -18000, 2007 } - } //Z#161 + } //Z#160 , /* America/New_York */ :array { :intvector { -1633280400, -1615140000, -1601830800, -1583690400, -1570381200, -1551636000, -1536512400, -1523210400, -1504458000, -1491760800, -1473008400, -1459706400, -1441558800, -1428256800, -1410109200, -1396807200, -1378659600, -1365357600, -1347210000, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1189357200, -1176055200, -1157302800, -1144605600, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -923248800, -905101200, -891799200, -880218000, -769395600, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -639597600, -620845200, -608148000, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -18000, 2007 } - :intvector { 162, 569 } - } //Z#162 + :intvector { 161, 568 } + } //Z#161 , /* America/Nipigon */ :array { :intvector { -1632070800, -1614794400, -923252400, -880218000, -769395600, -765396000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "010001010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -18000, 2007 } - } //Z#163 + } //Z#162 , /* America/Nome */ :array { :intvector { -880196400, -769395600, -765374400, -86878800, -21466800, -5745600, 9982800, 25704000, 41432400, 57758400, 73486800, 89208000, 104936400, 120657600, 126709200, 152107200, 162392400, 183556800, 199285200, 215611200, 230734800, 247060800, 262789200, 278510400, 294238800, 309960000, 325688400, 341409600, 357138000, 372859200, 388587600, 404913600, 420037200, 436363200, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000 } :intvector { -39600, 0, -39600, 3600, -32400, 0, -32400, 3600 } :bin { "010100000100010001000100010001000100010001000100010001000100010001020203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } "US" :intvector { -32400, 2007 } - } //Z#164 + } //Z#163 , /* America/Noronha */ :array { :intvector { -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 } :intvector { -7200, 0, -7200, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100" } - :intvector { 165, 343 } - } //Z#165 + :intvector { 164, 342 } + } //Z#164 , /* America/North_Dakota/Center */ :array { :intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010203020302030203020302030203020302030203020302030203020302" } "US" :intvector { -21600, 2007 } - } //Z#166 + } //Z#165 , /* America/North_Dakota/New_Salem */ :array { :intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102030203020302" } "US" :intvector { -21600, 2007 } - } //Z#167 + } //Z#166 , /* America/Panama */ :array { :intvector { -1946918424 } :intvector { -18000, 0 } :bin { "00" } - } //Z#168 + } //Z#167 , /* America/Pangnirtung */ :array { :intvector { -1546300800, -880221600, -769395600, -765399600, -147902400, -131572800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954662400, 972802800, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -21600, 0, -21600, 3600, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600, -14400, 7200 } :bin { "040505040604050405040504050405040504050405040504050405040504050405040504030203020302030203000102030203020302030203020302" } "Canada" :intvector { -18000, 2007 } - } //Z#169 + } //Z#168 , /* America/Paramaribo */ :array { :intvector { -1861906760, -1104524348, -765317964, 185686200, 465449400 } :intvector { -13252, 0, -13236, 0, -12600, 0, -10800, 0 } :bin { "0001020203" } - } //Z#170 + } //Z#169 , /* America/Phoenix */ :array { :intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 } :intvector { -25200, 0, -25200, 3600 } :bin { "01000100010001000100" } - :intvector { 171, 511, 566 } - } //Z#171 + :intvector { 170, 510, 565 } + } //Z#170 , /* America/Port-au-Prince */ :array { :intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400 } :intvector { -18000, 0, -18000, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100" } - } //Z#172 + } //Z#171 , /* America/Port_of_Spain */ :array { :intvector { -1825098836 } :intvector { -14400, 0 } :bin { "00" } - } //Z#173 -, /* America/Porto_Acre */ :int { 182 } //Z#174 + } //Z#172 +, /* America/Porto_Acre */ :int { 181 } //Z#173 , /* America/Porto_Velho */ :array { :intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 } :intvector { -14400, 0, -14400, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100" } - } //Z#175 + } //Z#174 , /* America/Puerto_Rico */ :array { :intvector { -873057600, -769395600, -765399600 } :intvector { -14400, 0, -14400, 3600 } :bin { "010100" } - :intvector { 176, 513 } - } //Z#176 + :intvector { 175, 512 } + } //Z#175 , /* America/Rainy_River */ :array { :intvector { -1632067200, -1614790800, -923248800, -880214400, -769395600, -765392400, 136368000, 152089200, 167817600, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -21600, 0, -21600, 3600 } :bin { "010001010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -21600, 2007 } - } //Z#177 + } //Z#176 , /* America/Rankin_Inlet */ :array { :intvector { -410227200, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 } :bin { "000200010001000100010001000100010001000100010001000100010001000100010001000100010001000103010001000100010001000100" } "Canada" :intvector { -21600, 2007 } - } //Z#178 + } //Z#177 , /* America/Recife */ :array { :intvector { -1767217224, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 971575200, 1003028400, 1013911200 } :intvector { -10800, 0, -10800, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100" } - } //Z#179 + } //Z#178 , /* America/Regina */ :array { :intvector { -2030202084, -1632063600, -1614787200, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -769395600, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 } :intvector { -25200, 0, -25200, 3600, -21600, 0 } :bin { "0001000100010001000100010001000100010001000100010100010001000100010001000100010001000100010001000100010002" } - :intvector { 180, 354, 359 } - } //Z#180 + :intvector { 179, 353, 358 } + } //Z#179 , /* America/Resolute */ :array { :intvector { -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 } :bin { "000200010001000100010001000100010001000100010001000100010001000100010001000100010001000103010001000100010001000103" } - } //Z#181 + } //Z#180 , /* America/Rio_Branco */ :array { :intvector { -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800 } :intvector { -18000, 0, -18000, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100" } - :intvector { 174, 182, 342 } - } //Z#182 -, /* America/Rosario */ :int { 66 } //Z#183 + :intvector { 173, 181, 341 } + } //Z#181 +, /* America/Rosario */ :int { 66 } //Z#182 , /* America/Santiago */ :array { :intvector { -1893439034, -1688410800, -1619983034, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -736376400, -713646000, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000 } :intvector { -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600 } :bin { "00020302010001000100010001000100010003040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } "Chile" :intvector { -14400, 2000 } - :intvector { 184, 361 } - } //Z#184 + :intvector { 183, 360 } + } //Z#183 , /* America/Santo_Domingo */ :array { :intvector { -1159773600, -100119600, -89668800, -5770800, 4422600, 25678800, 33193800, 57733200, 64816200, 89182800, 96438600, 120632400, 127974600, 152082000, 972799200, 975823200 } :intvector { -18000, 0, -18000, 1800, -18000, 3600, -14400, 0 } :bin { "00020001000100010001000100030003" } - } //Z#185 + } //Z#184 , /* America/Sao_Paulo */ :array { - :intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800 } + :intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600 } :intvector { -10800, 0, -10800, 3600 } - :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "Brazil" - :intvector { -10800, 2008 } - :intvector { 186, 340, 344 } - } //Z#186 + :intvector { -10800, 2007 } + :intvector { 185, 339, 343 } + } //Z#185 , /* America/Scoresbysund */ :array { :intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { -7200, 0, -7200, 3600, -3600, 0, -3600, 3600 } :bin { "000100030203020302030203020302030203020302030203020302030203020302" } "EU" :intvector { -3600, 1996 } - } //Z#187 -, /* America/Shiprock */ :int { 104 } //Z#188 + } //Z#186 +, /* America/Shiprock */ :int { 104 } //Z#187 , /* America/St_Johns */ :array { :intvector { -1664130548, -1650137348, -1632076148, -1614799748, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -769395600, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060 } :intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000203020302030203020302030203020303020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020402030203020302030203020302030203020302030203020302030203020302030203020302" } "StJohns" :intvector { -12600, 2007 } - :intvector { 189, 348, 357 } - } //Z#189 + :intvector { 188, 347, 356 } + } //Z#188 , /* America/St_Kitts */ :array { :intvector { -1825098548 } :intvector { -14400, 0 } :bin { "00" } - } //Z#190 + } //Z#189 , /* America/St_Lucia */ :array { :intvector { -1830369360 } :intvector { -14400, 0 } :bin { "00" } - } //Z#191 + } //Z#190 , /* America/St_Thomas */ :array { :intvector { -1846266016 } :intvector { -14400, 0 } :bin { "00" } - :intvector { 192, 202 } - } //Z#192 + :intvector { 191, 201 } + } //Z#191 , /* America/St_Vincent */ :array { :intvector { -1830369304 } :intvector { -14400, 0 } :bin { "00" } - } //Z#193 + } //Z#192 , /* America/Swift_Current */ :array { :intvector { -2030201320, -1632063600, -1614787200, -880210800, -769395600, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 } :intvector { -25200, 0, -25200, 3600, -21600, 0 } :bin { "0001000101000100010001000100010001000100010002" } - } //Z#194 + } //Z#193 , /* America/Tegucigalpa */ :array { :intvector { -1538503868, 547020000, 559717200, 578469600, 591166800, 1146981600, 1154926800 } :intvector { -21600, 0, -21600, 3600 } :bin { "00010001000100" } - } //Z#195 + } //Z#194 , /* America/Thule */ :array { :intvector { -1686079492, 670399200, 686120400, 701848800, 717570000, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000 } :intvector { -14400, 0, -14400, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100" } "Thule" :intvector { -14400, 2007 } - } //Z#196 + } //Z#195 , /* America/Thunder_Bay */ :array { :intvector { -1893434400, -880218000, -769395600, -765396000, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "00010100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -18000, 2007 } - } //Z#197 + } //Z#196 , /* America/Tijuana */ :array { :intvector { -1514736000, -1451667600, -1343062800, -1234803600, -1222963200, -1207242000, -873820800, -769395600, -761677200, -686073600, -661539600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600 } :intvector { -28800, 0, -28800, 3600, -25200, 0 } :bin { "0200020001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Mexico" :intvector { -28800, 2002 } - :intvector { 110, 198, 499 } - } //Z#198 + :intvector { 110, 197, 498 } + } //Z#197 , /* America/Toronto */ :array { :intvector { -1632070800, -1614794400, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -880218000, -769395600, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -18000, 2007 } - :intvector { 199, 355 } - } //Z#199 + :intvector { 198, 354 } + } //Z#198 , /* America/Tortola */ :array { :intvector { -1846266092 } :intvector { -14400, 0 } :bin { "00" } - } //Z#200 + } //Z#199 , /* America/Vancouver */ :array { :intvector { -1632060000, -1614783600, -880207200, -769395600, -765385200, -747237600, -732726000, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400 } :intvector { -28800, 0, -28800, 3600 } :bin { "01000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -28800, 2007 } - :intvector { 201, 358 } - } //Z#201 -, /* America/Virgin */ :int { 192 } //Z#202 + :intvector { 200, 357 } + } //Z#200 +, /* America/Virgin */ :int { 191 } //Z#201 , /* America/Whitehorse */ :array { :intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -769395600, -765381600, -147884400, -131554800, -110552400, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400 } :intvector { -32400, 0, -32400, 3600, -32400, 7200, -28800, 0, -28800, 3600 } :bin { "01000100010100020003040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" } "Canada" :intvector { -28800, 2007 } - :intvector { 203, 360 } - } //Z#203 + :intvector { 202, 359 } + } //Z#202 , /* America/Winnipeg */ :array { :intvector { -1694368800, -1681671600, -1632067200, -1614790800, -1029686400, -1018198800, -880214400, -769395600, -765392400, -746035200, -732733200, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620755200, -607626000, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -292438800, -210787200, -198090000, -116438400, -100108800, -84384000, -68659200, -52934400, -37209600, -21484800, -5760000, 9964800, 25689600, 41414400, 57744000, 73468800, 89193600, 104918400, 120643200, 136368000, 152092800, 167817600, 183542400, 199267200, 215596800, 230716800, 247046400, 262771200, 278496000, 294220800, 309945600, 325670400, 341395200, 357120000, 372844800, 388569600, 404899200, 420019200, 436348800, 452073600, 467798400, 483523200, 499248000, 514972800, 530697600, 544608000, 562147200, 576057600, 594201600, 607507200, 625651200, 638956800, 657100800, 671011200, 688550400, 702460800, 720000000, 733910400, 752054400, 765360000, 783504000, 796809600, 814953600, 828864000, 846403200, 860313600, 877852800, 891763200, 909302400, 923212800, 941356800, 954662400, 972806400, 986112000, 1004256000, 1018166400, 1035705600, 1049616000, 1067155200, 1081065600, 1099209600, 1112515200, 1130659200, 1136095200, 1143964800, 1162105200 } :intvector { -21600, 0, -21600, 3600 } :bin { "01000100010001010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100000100" } "Canada" :intvector { -21600, 2007 } - :intvector { 204, 353 } - } //Z#204 + :intvector { 203, 352 } + } //Z#203 , /* America/Yakutat */ :array { :intvector { -880203600, -769395600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 439030800, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000 } :intvector { -32400, 0, -32400, 3600 } :bin { "0101000100010001000100010001000100010001000100010001000100010001000001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -32400, 2007 } - } //Z#205 + } //Z#204 , /* America/Yellowknife */ :array { :intvector { -1104537600, -880210800, -769395600, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800 } :intvector { -25200, 0, -25200, 3600, -25200, 7200 } :bin { "000101000200010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Canada" :intvector { -25200, 2007 } - } //Z#206 + } //Z#205 , /* Antarctica/Casey */ :array { :intvector { -31536000 } :intvector { 28800, 0 } :bin { "00" } - } //Z#207 + } //Z#206 , /* Antarctica/Davis */ :array { :intvector { -409190400, -163062000, -28857600 } :intvector { 0, 0, 25200, 0 } :bin { "010001" } - } //Z#208 + } //Z#207 , /* Antarctica/DumontDUrville */ :array { :intvector { -725846400, -566992800, -415497600 } :intvector { 0, 0, 36000, 0 } :bin { "010001" } - } //Z#209 + } //Z#208 , /* Antarctica/Mawson */ :array { :intvector { -501206400 } :intvector { 21600, 0 } :bin { "00" } - } //Z#210 + } //Z#209 , /* Antarctica/McMurdo */ :array { - :intvector { -441849600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400 } + :intvector { -441849600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000 } :intvector { 43200, 0, 43200, 3600 } - :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "0001000100010001000100010001000100010001000100010001000100010001" } "NZAQ" - :intvector { 43200, 2008 } - :intvector { 211, 214 } - } //Z#211 + :intvector { 43200, 1990 } + :intvector { 210, 213 } + } //Z#210 , /* Antarctica/Palmer */ :array { :intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000 } :intvector { -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } :bin { "01000100010001000100020302000100010001000100010001000100010001000100010001000100010001000100010001" } "ChileAQ" :intvector { -14400, 2000 } - } //Z#212 + } //Z#211 , /* Antarctica/Rothera */ :array { :intvector { 218246400 } :intvector { -10800, 0 } :bin { "00" } - } //Z#213 -, /* Antarctica/South_Pole */ :int { 211 } //Z#214 + } //Z#212 +, /* Antarctica/South_Pole */ :int { 210 } //Z#213 , /* Antarctica/Syowa */ :array { :intvector { -407808000 } :intvector { 10800, 0 } :bin { "00" } - } //Z#215 + } //Z#214 , /* Antarctica/Vostok */ :array { :intvector { -380073600 } :intvector { 21600, 0 } :bin { "00" } - } //Z#216 -, /* Arctic/Longyearbyen */ :int { 438 } //Z#217 + } //Z#215 +, /* Arctic/Longyearbyen */ :int { 437 } //Z#216 , /* Asia/Aden */ :array { :intvector { -631162848 } :intvector { 10800, 0 } :bin { "00" } - } //Z#218 + } //Z#217 , /* Asia/Almaty */ :array { :intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 662666400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1110823200 } :intvector { 18000, 0, 21600, 0, 21600, 3600 } :bin { "0001020102010201020102010201020102010201020101020102010201020102010201020102010201020102010201020101" } - } //Z#219 + } //Z#218 , /* Asia/Amman */ :array { :intvector { -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938642400, 954367200, 970092000, 985816800, 1001541600, 1017266400, 1032991200, 1048716000, 1066946400, 1080165600, 1097791200, 1112220000, 1128031200 } :intvector { 7200, 0, 7200, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Jordan" :intvector { 7200, 2006 } - } //Z#220 + } //Z#219 , /* Asia/Anadyr */ :array { :intvector { -1441194596, -1247572800, 354884400, 370692000, 386420400, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701780400, 717501600, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800 } :intvector { 39600, 0, 39600, 3600, 43200, 0, 43200, 3600, 46800, 0, 46800, 3600 } :bin { "020405040302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 43200, 1996 } - } //Z#221 + } //Z#220 , /* Asia/Aqtau */ :array { :intvector { -1441164064, -1247544000, -220942800, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 662670000, 692823600, 701805600, 717526800, 733266000, 748990800, 764715600, 780440400, 796165200, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1110830400 } :intvector { 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } :bin { "000202040302030203020302030203020302030203020202030203020302010001000100010001000100010001000100010002" } - } //Z#222 + } //Z#221 , /* Asia/Aqtobe */ :array { :intvector { -1441165720, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 662670000, 692823600, 701805600, 717526800, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1110826800 } :intvector { 14400, 0, 18000, 0, 18000, 3600, 21600, 0 } :bin { "000102030201020102010201020102010201020102010101020102010201020102010201020102010201020102010201020101" } - } //Z#223 + } //Z#222 , /* Asia/Ashgabat */ :array { :intvector { -1441166012, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 688507200, 695772000 } :intvector { 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 } :bin { "0002030203020302030203020302030203020302030201000002" } - :intvector { 224, 225 } - } //Z#224 -, /* Asia/Ashkhabad */ :int { 224 } //Z#225 + :intvector { 223, 224 } + } //Z#223 +, /* Asia/Ashkhabad */ :int { 223 } //Z#224 , /* Asia/Baghdad */ :array { :intvector { -1641005856, 389048400, 402264000, 417906000, 433800000, 449614800, 465422400, 481150800, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600 } :intvector { 10800, 0, 10800, 3600 } :bin { "00010001000100010001000100010001000100" } "Iraq" :intvector { 10800, 1991 } - } //Z#226 + } //Z#225 , /* Asia/Bahrain */ :array { :intvector { -1577935340, 76190400 } :intvector { 10800, 0, 14400, 0 } :bin { "0100" } - } //Z#227 + } //Z#226 , /* Asia/Baku */ :array { :intvector { -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 683496000, 686098800, 701812800, 717534000, 828234000, 846378000, 852062400 } :intvector { 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } :bin { "000203020302030203020302030203020302030203020101000102030202" } "Azer" :intvector { 14400, 1997 } - } //Z#228 + } //Z#227 , /* Asia/Bangkok */ :array { :intvector { -1570084924 } :intvector { 25200, 0 } :bin { "00" } - } //Z#229 + } //Z#228 , /* Asia/Beirut */ :array { :intvector { -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1473645600, -1460948400, -399866400, -386650800, -368330400, -355114800, -336794400, -323578800, -305172000, -291956400, -273636000, -260420400, 78012000, 86734800, 105055200, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 212965200, 231285600, 244501200, 262735200, 275950800, 452210400, 466722000, 483746400, 498258000, 515282400, 529794000, 546818400, 561330000, 581119200, 592952400, 610754400, 624488400, 641512800, 656024400, 673048800, 687560400, 704671200, 718146000, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 906843600 } :intvector { 7200, 0, 7200, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Lebanon" :intvector { 7200, 1999 } - } //Z#230 + } //Z#229 , /* Asia/Bishkek */ :array { :intvector { -1441169904, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683582400, 703018800, 717530400, 734468400, 748980000, 765918000, 780429600, 797367600, 811879200, 828817200, 843933600, 859671000, 877811400, 891120600, 909261000, 922570200, 941315400, 954019800, 972765000, 985469400, 1004214600, 1017523800, 1035664200, 1048973400, 1067113800, 1080423000, 1099168200, 1111872600, 1123783200 } :intvector { 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } :bin { "00020302030203020302030203020302030203020302010001000100010001000100010001000100010001000100010001000102" } - } //Z#231 + } //Z#230 , /* Asia/Brunei */ :array { :intvector { -1383464380, -1167636600 } :intvector { 27000, 0, 28800, 0 } :bin { "0001" } - } //Z#232 + } //Z#231 , /* Asia/Calcutta */ :array { :intvector { -891582800, -872058600, -862637400, -764145000 } :intvector { 19800, 0, 19800, 3600, 23400, 0 } :bin { "02000100" } - :intvector { 233, 475 } - } //Z#233 + :intvector { 232, 474 } + } //Z#232 , /* Asia/Choibalsan */ :array { :intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600 } :intvector { 25200, 0, 28800, 0, 32400, 0, 32400, 3600 } :bin { "00010302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } - } //Z#234 + } //Z#233 , /* Asia/Chongqing */ :array { :intvector { -1325487980, 325962000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } :intvector { 25200, 0, 28800, 0, 28800, 3600 } :bin { "0001020102010201020102010201" } - :intvector { 235, 236 } - } //Z#235 -, /* Asia/Chungking */ :int { 235 } //Z#236 + :intvector { 234, 235 } + } //Z#234 +, /* Asia/Chungking */ :int { 234 } //Z#235 , /* Asia/Colombo */ :array { :intvector { -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 } :intvector { 19800, 0, 19800, 1800, 19800, 3600, 21600, 0, 23400, 0 } :bin { "00010200040300" } - } //Z#237 -, /* Asia/Dacca */ :int { 240 } //Z#238 + } //Z#236 +, /* Asia/Dacca */ :int { 239 } //Z#237 , /* Asia/Damascus */ :array { :intvector { -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400 } :intvector { 7200, 0, 7200, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "Syria" :intvector { 7200, 2007 } - } //Z#239 + } //Z#238 , /* Asia/Dhaka */ :array { :intvector { -891582800, -872058600, -862637400, -576138600, 38772000 } :intvector { 19800, 0, 21600, 0, 23400, 0 } :bin { "0200020101" } - :intvector { 238, 240, 341 } - } //Z#240 + :intvector { 237, 239, 340 } + } //Z#239 , /* Asia/Dili */ :array { :intvector { -1830414140, -879152400, -766054800, 199897200, 969120000 } :intvector { 28800, 0, 32400, 0 } :bin { "0001010001" } - } //Z#241 + } //Z#240 , /* Asia/Dubai */ :array { :intvector { -1577936472 } :intvector { 14400, 0 } :bin { "00" } - } //Z#242 + } //Z#241 , /* Asia/Dushanbe */ :array { :intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 } :intvector { 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } :bin { "000203020302030203020302030203020302030203020100" } - } //Z#243 + } //Z#242 , /* Asia/Gaza */ :array { :intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576540000, 589237200, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 820447200, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 915141600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400 } :intvector { 7200, 0, 7200, 3600 } :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100000100010001000001000100010001000100010001000100" } "Palestine" :intvector { 7200, 2007 } - } //Z#244 + } //Z#243 , /* Asia/Harbin */ :array { :intvector { -1325492804, -1194078600, -946800000, -115894800, 325956600, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } :intvector { 28800, 0, 28800, 3600, 30600, 0, 32400, 0 } :bin { "0200030200010001000100010001000100" } - } //Z#245 + } //Z#244 , /* Asia/Hong_Kong */ :array { :intvector { -2056692996, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542266200, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 135718200, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 295385400, 309292200, 326835000, 340741800 } :intvector { 28800, 0, 28800, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } - :intvector { 246, 473 } - } //Z#246 + :intvector { 245, 472 } + } //Z#245 , /* Asia/Hovd */ :array { :intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800 } :intvector { 21600, 0, 25200, 0, 25200, 3600 } :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - } //Z#247 + } //Z#246 , /* Asia/Irkutsk */ :array { :intvector { -1575874640, -1247554800, 354902400, 370710000, 386438400, 402246000, 417974400, 433782000, 449596800, 465328800, 481053600, 496778400, 512503200, 528228000, 543952800, 559677600, 575402400, 591127200, 606852000, 622576800, 638301600, 654631200, 670356000, 686084400, 695761200, 701794800, 717516000, 733255200, 748980000, 764704800, 780429600, 796154400, 811879200 } :intvector { 25200, 0, 25200, 3600, 28800, 0, 28800, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 28800, 1996 } - } //Z#248 -, /* Asia/Istanbul */ :int { 423 } //Z#249 + } //Z#247 +, /* Asia/Istanbul */ :int { 422 } //Z#248 , /* Asia/Jakarta */ :array { :intvector { -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 } :intvector { 25200, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } :bin { "01020402030200" } - } //Z#250 + } //Z#249 , /* Asia/Jayapura */ :array { :intvector { -1172913768, -799491600, -189423000 } :intvector { 32400, 0, 34200, 0 } :bin { "000100" } - } //Z#251 + } //Z#250 , /* Asia/Jerusalem */ :array { :intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576540000, 589237200, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1378594800, 1395964800, 1411858800, 1427414400, 1442703600, 1459468800, 1475967600, 1490918400, 1506207600, 1522368000, 1537052400, 1553817600, 1570316400, 1585267200, 1601161200, 1616716800, 1631401200, 1648771200, 1664665200, 1680220800, 1695510000, 1711670400, 1728169200, 1743120000, 1759014000, 1774569600, 1789858800, 1806019200, 1823122800, 1838073600, 1853362800, 1869523200, 1884207600, 1900972800, 1917471600, 1932422400, 1947711600, 1963872000, 1978556400, 1995926400, 2011820400, 2027376000, 2042060400, 2058825600, 2075324400, 2090275200, 2106169200, 2121724800, 2136409200 } :intvector { 7200, 0, 7200, 3600, 7200, 7200 } :bin { "00010001000100010001000201000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } - :intvector { 252, 292, 489 } - } //Z#252 + :intvector { 251, 291, 488 } + } //Z#251 , /* Asia/Kabul */ :array { :intvector { -788932800 } :intvector { 16200, 0 } :bin { "00" } - } //Z#253 + } //Z#252 , /* Asia/Kamchatka */ :array { :intvector { -1487759676, -1247569200, 354888000, 370695600, 386424000, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701780400, 717501600, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800 } :intvector { 39600, 0, 39600, 3600, 43200, 0, 43200, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 43200, 1996 } - } //Z#254 + } //Z#253 , /* Asia/Karachi */ :array { :intvector { -1988166492, -862637400, -764145000, -576135000, 38775600, 1018119660, 1033840860 } :intvector { 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 } :bin { "02030200000100" } - :intvector { 255, 510 } - } //Z#255 + :intvector { 254, 509 } + } //Z#254 , /* Asia/Kashgar */ :array { :intvector { -1325480636, -946791000, 325969200, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } :intvector { 18000, 0, 19800, 0, 28800, 0, 28800, 3600 } :bin { "010002030203020302030203020302" } - } //Z#256 + } //Z#255 , /* Asia/Katmandu */ :array { :intvector { -1577943676, 504901800 } :intvector { 19800, 0, 20700, 0 } :bin { "0001" } - } //Z#257 + } //Z#256 , /* Asia/Krasnoyarsk */ :array { :intvector { -1577513480, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701798400, 717519600, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800 } :intvector { 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 25200, 1996 } - } //Z#258 + } //Z#257 , /* Asia/Kuala_Lumpur */ :array { :intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } :intvector { 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } :bin { "00010203050304" } - } //Z#259 + } //Z#258 , /* Asia/Kuching */ :array { :intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200, 378662400 } :intvector { 27000, 0, 28800, 0, 28800, 1200, 32400, 0 } :bin { "00010201020102010201020102010201030101" } - } //Z#260 + } //Z#259 , /* Asia/Kuwait */ :array { :intvector { -631163516 } :intvector { 10800, 0 } :bin { "00" } - } //Z#261 -, /* Asia/Macao */ :int { 263 } //Z#262 + } //Z#260 +, /* Asia/Macao */ :int { 262 } //Z#261 , /* Asia/Macau */ :array { :intvector { -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200, 945619200 } :intvector { 28800, 0, 28800, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010000" } - :intvector { 262, 263 } - } //Z#263 + :intvector { 261, 262 } + } //Z#262 , /* Asia/Magadan */ :array { :intvector { -1441188192, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701784000, 717505200, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400 } :intvector { 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 39600, 1996 } - } //Z#264 + } //Z#263 , /* Asia/Makassar */ :array { :intvector { -1577951856, -1172908656, -880272000, -766054800 } :intvector { 28656, 0, 28800, 0, 32400, 0 } :bin { "00010201" } - :intvector { 265, 296 } - } //Z#265 + :intvector { 264, 295 } + } //Z#264 , /* Asia/Manila */ :array { :intvector { -1046678400, -1038733200, -873273600, -794221200, -496224000, -489315600, 259344000, 275151600 } :intvector { 28800, 0, 28800, 3600, 32400, 0 } :bin { "0100020001000100" } - } //Z#266 + } //Z#265 , /* Asia/Muscat */ :array { :intvector { -1577937260 } :intvector { 14400, 0 } :bin { "00" } - } //Z#267 + } //Z#266 , /* Asia/Nicosia */ :array { :intvector { -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000 } :intvector { 7200, 0, 7200, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "EUAsia" :intvector { 7200, 1996 } - :intvector { 268, 437 } - } //Z#268 + :intvector { 267, 436 } + } //Z#267 , /* Asia/Novosibirsk */ :array { :intvector { -1579476700, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701798400, 717519600, 733258800, 738086400, 748987200, 764712000, 780436800, 796161600, 811886400 } :intvector { 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 } :bin { "00020302030203020302030203020302030203020302010002030203010001000100" } "Russia" :intvector { 21600, 1996 } - } //Z#269 + } //Z#268 , /* Asia/Omsk */ :array { :intvector { -1582088016, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400 } :intvector { 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 21600, 1996 } - } //Z#270 + } //Z#269 , /* Asia/Oral */ :array { :intvector { -1441164324, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 662673600, 692827200, 701809200, 717530400, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1110830400 } :intvector { 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } :bin { "000203040302030203020302030203020302010001000000010001000100010001000100010001000100010001000100010002" } - } //Z#271 + } //Z#270 , /* Asia/Phnom_Penh */ :array { :intvector { -2005973980, -1855983920, -1819954800, -1220428800 } :intvector { 25200, 0, 25580, 0, 28800, 0 } :bin { "01000200" } - } //Z#272 + } //Z#271 , /* Asia/Pontianak */ :array { :intvector { -1946186240, -1172906240, -881220600, -766054800, -683883000, -620812800, -189415800, 567964800 } :intvector { 25200, 0, 26240, 0, 27000, 0, 28800, 0, 32400, 0 } :bin { "0102040203020300" } - } //Z#273 + } //Z#272 , /* Asia/Pyongyang */ :array { :intvector { -2053931400, -1325494800, -1199262600, -498128400, -264931200 } :intvector { 28800, 0, 30600, 0, 32400, 0 } :bin { "0201020002" } - } //Z#274 + } //Z#273 , /* Asia/Qatar */ :array { :intvector { -1577935568, 76190400 } :intvector { 10800, 0, 14400, 0 } :bin { "0100" } - } //Z#275 + } //Z#274 , /* Asia/Qyzylorda */ :array { :intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 662670000, 692823600, 695768400, 701802000, 717523200, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1110823200 } :intvector { 14400, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } :bin { "00010203020102010201020102010201020102010201010103040304030403040304030403040304030403040304030403040303" } - } //Z#276 + } //Z#275 , /* Asia/Rangoon */ :array { :intvector { -1577946276, -873268200, -778410000 } :intvector { 23400, 0, 32400, 0 } :bin { "000100" } - } //Z#277 + } //Z#276 , /* Asia/Riyadh */ :array { :intvector { -631163212 } :intvector { 10800, 0 } :bin { "00" } - } //Z#278 + } //Z#277 , /* Asia/Riyadh87 */ :array { :intvector { 536489776, 536576206, 536662631, 536749061, 536835486, 536921916, 537008341, 537094766, 537181191, 537267616, 537354041, 537440466, 537526886, 537613311, 537699731, 537786151, 537872571, 537958991, 538045411, 538131831, 538218246, 538304666, 538391081, 538477496, 538563911, 538650326, 538736736, 538823151, 538909561, 538995971, 539082381, 539168791, 539255196, 539341606, 539428011, 539514416, 539600821, 539687226, 539860031, 540378426, 540551221, 540637616, 540724011, 540810406, 540896801, 540983191, 541069586, 541155976, 541242366, 541328756, 541415146, 541501536, 541587926, 541674316, 541760701, 541847091, 541933476, 542019861, 542106251, 542192636, 542279021, 542365406, 542451791, 542538171, 542624556, 542710941, 542797326, 542883706, 542970091, 543056471, 543142856, 543229236, 543315621, 543402001, 543488386, 543574766, 543661146, 543747531, 543833911, 543920291, 544006676, 544093056, 544179441, 544265821, 544352201, 544438586, 544524966, 544611351, 544697731, 544784116, 544870501, 544956881, 545043266, 545129651, 545216031, 545302416, 545388801, 545475186, 545561571, 545647961, 545734346, 545820731, 545907121, 545993506, 546079896, 546166281, 546252671, 546339061, 546425451, 546511841, 546598231, 546684621, 546771011, 546857406, 546943796, 547030191, 547116586, 547202981, 547289376, 547375771, 547462166, 547548561, 547721356, 548412561, 548585366, 548671771, 548758176, 548844581, 548930986, 549017391, 549103796, 549190206, 549276611, 549363021, 549449426, 549535836, 549622246, 549708656, 549795066, 549881476, 549967886, 550054296, 550140706, 550227121, 550313531, 550399946, 550486356, 550572766, 550659181, 550745591, 550832006, 550918421, 551004831, 551091246, 551177656, 551264071, 551350486, 551436896, 551523311, 551609721, 551696136, 551782546, 551868961, 551955371, 552041786, 552128196, 552214606, 552301021, 552387431, 552473841, 552560251, 552646661, 552733071, 552819481, 552905891, 552992296, 553078706, 553165116, 553251521, 553337926, 553424336, 553510741, 553597146, 553683551, 553856356, 553942761, 554201966, 554547561, 554806756, 554893151, 554979546, 555065941, 555152336, 555238731, 555325126, 555411516, 555497911, 555584301, 555670691, 555757081, 555843471, 555929861, 556016251, 556102641, 556189026, 556275416, 556361801, 556448186, 556534571, 556620956, 556707341, 556793726, 556880111, 556966496, 557052876, 557139261, 557225641, 557312026, 557398406, 557484786, 557571166, 557657551, 557743931, 557830311, 557916691, 558003071, 558089451, 558175826, 558262206, 558348586, 558434966, 558521346, 558607721, 558694101, 558780481, 558866861, 558953236, 559039616, 559125996, 559212371, 559298751, 559385131, 559471511, 559557891, 559644271, 559730646, 559817026, 559903406, 559989786, 560076166, 560162551, 560248931, 560335311, 560421691, 560508076, 560594456, 560680841, 560767221, 560853606, 560939991, 561026376, 561112761, 561199146, 561285531, 561371921, 561458306, 561544696, 561631081, 561717471, 561803861, 561890251, 561976641, 562063036, 562149426, 562235821, 562322211, 562408606, 562495001, 562667796, 562840591, 563186196, 563359001, 563445406, 563531811, 563618216, 563704621, 563791031, 563877436, 563963846, 564050256, 564136666, 564223081, 564309491, 564395906, 564482321, 564568736, 564655151, 564741566, 564827986, 564914406, 565000821, 565087241, 565173661, 565260086, 565346506, 565432926, 565519351, 565605776, 565692201, 565778626, 565865051, 565951476, 566037901, 566124326, 566210756, 566297181, 566383611, 566470041, 566556466, 566642896, 566729326, 566815756, 566902186, 566988616, 567075046, 567161476, 567247906, 567334336, 567420766, 567507196, 567593621, 567680051, 567766481, 567852911, 567939341, 567982541 } :intvector { 11224, -855, 11224, -850, 11224, -845, 11224, -840, 11224, -835, 11224, -830, 11224, -825, 11224, -820, 11224, -815, 11224, -810, 11224, -805, 11224, -800, 11224, -795, 11224, -790, 11224, -785, 11224, -780, 11224, -775, 11224, -770, 11224, -760, 11224, -750, 11224, -740, 11224, -735, 11224, -725, 11224, -720, 11224, -715, 11224, -705, 11224, -700, 11224, -690, 11224, -685, 11224, -675, 11224, -670, 11224, -660, 11224, -655, 11224, -645, 11224, -635, 11224, -630, 11224, -615, 11224, -595, 11224, -580, 11224, -575, 11224, -565, 11224, -555, 11224, -550, 11224, -535, 11224, -530, 11224, -515, 11224, -510, 11224, -495, 11224, -490, 11224, -480, 11224, -465, 11224, -460, 11224, -445, 11224, -440, 11224, -425, 11224, -415, 11224, -410, 11224, -390, 11224, -385, 11224, -380, 11224, -375, 11224, -370, 11224, -365, 11224, -360, 11224, -355, 11224, -350, 11224, -345, 11224, -340, 11224, -335, 11224, -330, 11224, -325, 11224, -320, 11224, -315, 11224, -310, 11224, -305, 11224, -300, 11224, -295, 11224, -285, 11224, -280, 11224, -275, 11224, -265, 11224, -255, 11224, -250, 11224, -245, 11224, -240, 11224, -230, 11224, -225, 11224, -220, 11224, -210, 11224, -200, 11224, -195, 11224, -190, 11224, -185, 11224, -180, 11224, -175, 11224, -170, 11224, -165, 11224, -160, 11224, -155, 11224, -150, 11224, -145, 11224, -140, 11224, -135, 11224, -125, 11224, -120, 11224, -110, 11224, -105, 11224, -100, 11224, -95, 11224, -90, 11224, -85, 11224, -80, 11224, -75, 11224, -70, 11224, -65, 11224, -55, 11224, -50, 11224, -45, 11224, -40, 11224, -30, 11224, -25, 11224, -20, 11224, -15, 11224, -10, 11224, -5, 11224, 0, 11224, 5, 11224, 10, 11224, 15, 11224, 20, 11224, 25, 11224, 30, 11224, 40, 11224, 45, 11224, 55, 11224, 65, 11224, 70, 11224, 80, 11224, 85, 11224, 90, 11224, 95, 11224, 100, 11224, 105, 11224, 110, 11224, 115, 11224, 120, 11224, 125, 11224, 130, 11224, 135, 11224, 140, 11224, 145, 11224, 150, 11224, 155, 11224, 160, 11224, 165, 11224, 170, 11224, 180, 11224, 185, 11224, 190, 11224, 195, 11224, 200, 11224, 205, 11224, 210, 11224, 215, 11224, 220, 11224, 230, 11224, 250, 11224, 255, 11224, 275, 11224, 280, 11224, 295, 11224, 310, 11224, 315, 11224, 335, 11224, 340, 11224, 360, 11224, 365, 11224, 380, 11224, 395, 11224, 405, 11224, 420, 11224, 425, 11224, 445, 11224, 450, 11224, 465, 11224, 475, 11224, 485, 11224, 500, 11224, 505, 11224, 525, 11224, 530, 11224, 550, 11224, 570, 11224, 575, 11224, 590, 11224, 600, 11224, 610, 11224, 625, 11224, 645, 11224, 650, 11224, 665, 11224, 670, 11224, 685, 11224, 690, 11224, 700, 11224, 715, 11224, 720, 11224, 735, 11224, 755, 11224, 770, 11224, 785, 11224, 790, 11224, 800, 11224, 810, 11224, 815, 11224, 825, 11224, 830, 11224, 840, 11224, 845, 11224, 855, 11224, 870, 11224, 880, 11224, 885, 11224, 895, 11224, 905, 11224, 910, 11224, 915, 11224, 920, 11224, 925, 11224, 930, 11224, 935, 11224, 940, 11224, 945, 11224, 950, 11224, 955, 11224, 960, 11224, 965, 11224, 970, 11224, 975, 11224, 980, 11224, 985 } :bin { "5955514d49433e39373532302e2b2927252422201e1b1917151312100e0c0a080705040302010001020304050608090b0d0f1112131416181a1c1d1f2123242526282a2c2d2f3133343638393d4044484b4e505356585b5e6265676a6d707376787b7e8083858688898c8e90929496989a9b9c9d9e9fa0a1a2a3a4a3a2a1a09f9e9d9c9b9a98979593918f8d8b8988868583817f7c7a777573716f6c69686664615f5c5a5857555351504f4d4c4a4847454342413f3e3d3c3b3a393a3b3c3d3e3f4041434446484a4c4d4f50525456585a5d606366686b6e7274777b7f8285878a8e92979b9ea2a5a7a8aaacaeafb1b3b5b6b8babcbebfc0c2c4c5c6c8cacccecfd0d1d2d4d6d8dadbdcdddfe0e2e4e6e7e9eaecedeeeff0efeeedecebeae8e7e5e3e1dfdedcdbd9d7d5d3d1d0cfcdcbc9c7c5c3c1bfbdbbb9b7b4b2b0adaba9a6a49e99938d88847f7975706a66607d" } - :intvector { 279, 502 } - } //Z#279 + :intvector { 278, 501 } + } //Z#278 , /* Asia/Riyadh88 */ :array { :intvector { 568025771, 568112196, 568198626, 568285056, 568371481, 568457906, 568544336, 568630761, 568717186, 568803611, 568890036, 568976461, 569062881, 569149306, 569235726, 569322146, 569408566, 569494986, 569581406, 569667826, 569754241, 569840661, 569927076, 570013491, 570099906, 570186321, 570272736, 570359146, 570445556, 570531966, 570618376, 570704786, 570791196, 570877601, 570964011, 571050416, 571136821, 571223226, 571396031, 571914426, 572087221, 572173616, 572260011, 572346406, 572432801, 572519196, 572605586, 572691976, 572778371, 572864761, 572951151, 573037541, 573123926, 573210316, 573296706, 573383091, 573469481, 573555866, 573642251, 573728636, 573815021, 573901406, 573987791, 574074176, 574160561, 574246946, 574333326, 574419711, 574506096, 574592476, 574678861, 574765241, 574851626, 574938006, 575024386, 575110771, 575197151, 575283536, 575369916, 575456296, 575542681, 575629061, 575715441, 575801826, 575888206, 575974591, 576060971, 576147356, 576233736, 576320121, 576406501, 576492886, 576579271, 576665651, 576752036, 576838421, 576924806, 577011191, 577097576, 577183961, 577270346, 577356736, 577443121, 577529511, 577615896, 577702286, 577788671, 577875061, 577961451, 578047841, 578134231, 578220626, 578307016, 578393406, 578479801, 578566191, 578652586, 578738981, 578825376, 578911771, 578998166, 579084561, 579257356, 579948561, 580121366, 580207771, 580294176, 580380581, 580466986, 580553391, 580639796, 580726201, 580812611, 580899016, 580985426, 581071836, 581158246, 581244651, 581331061, 581417471, 581503886, 581590296, 581676706, 581763116, 581849531, 581935941, 582022351, 582108766, 582195176, 582281591, 582368001, 582454416, 582540831, 582627241, 582713656, 582800066, 582886481, 582972896, 583059306, 583145721, 583232131, 583318546, 583404956, 583491371, 583577781, 583664196, 583750606, 583837016, 583923426, 584009841, 584096251, 584182661, 584269071, 584355481, 584441886, 584528296, 584614706, 584701111, 584787521, 584873926, 584960331, 585046736, 585133141, 585219546, 585305951, 585392356, 585478761, 585737966, 586169961, 586342756, 586429151, 586601946, 586688341, 586774731, 586861126, 586947521, 587033911, 587120301, 587206696, 587293086, 587379476, 587465866, 587552251, 587638641, 587725031, 587811416, 587897806, 587984191, 588070576, 588156961, 588243346, 588329731, 588416116, 588502496, 588588881, 588675266, 588761646, 588848026, 588934411, 589020791, 589107171, 589193551, 589279936, 589366316, 589452696, 589539076, 589625456, 589711831, 589798211, 589884591, 589970971, 590057351, 590143726, 590230106, 590316486, 590402866, 590489241, 590575621, 590662001, 590748381, 590834756, 590921136, 591007516, 591093896, 591180276, 591266651, 591353031, 591439411, 591525791, 591612171, 591698551, 591784936, 591871316, 591957696, 592044081, 592130461, 592216846, 592303226, 592389611, 592475996, 592562381, 592648766, 592735151, 592821536, 592907921, 592994311, 593080696, 593167086, 593253476, 593339861, 593426256, 593512646, 593599036, 593685426, 593771821, 593858216, 593944611, 594031006, 594117401, 594203796, 594376591, 594722196, 594895001, 595067806, 595154216, 595240621, 595327026, 595413436, 595499846, 595586256, 595672666, 595759076, 595845491, 595931901, 596018316, 596104731, 596191146, 596277566, 596363981, 596450401, 596536816, 596623236, 596709656, 596796081, 596882501, 596968921, 597055346, 597141771, 597228191, 597314616, 597401041, 597487471, 597573896, 597660321, 597746751, 597833176, 597919606, 598006031, 598092461, 598178891, 598265321, 598351751, 598438176, 598524606, 598611036, 598697466, 598783896, 598870326, 598956756, 599043186, 599129616, 599216046, 599302476, 599388906, 599475331, 599561761, 599604961 } :intvector { 11224, -855, 11224, -850, 11224, -845, 11224, -840, 11224, -835, 11224, -830, 11224, -825, 11224, -820, 11224, -810, 11224, -800, 11224, -795, 11224, -790, 11224, -785, 11224, -780, 11224, -775, 11224, -770, 11224, -765, 11224, -760, 11224, -750, 11224, -745, 11224, -740, 11224, -730, 11224, -715, 11224, -705, 11224, -700, 11224, -690, 11224, -685, 11224, -675, 11224, -665, 11224, -660, 11224, -650, 11224, -645, 11224, -630, 11224, -615, 11224, -610, 11224, -600, 11224, -590, 11224, -585, 11224, -570, 11224, -550, 11224, -535, 11224, -530, 11224, -520, 11224, -505, 11224, -500, 11224, -485, 11224, -465, 11224, -460, 11224, -450, 11224, -435, 11224, -430, 11224, -410, 11224, -395, 11224, -390, 11224, -385, 11224, -380, 11224, -375, 11224, -370, 11224, -365, 11224, -360, 11224, -355, 11224, -350, 11224, -345, 11224, -340, 11224, -335, 11224, -330, 11224, -325, 11224, -320, 11224, -310, 11224, -305, 11224, -300, 11224, -295, 11224, -290, 11224, -285, 11224, -280, 11224, -275, 11224, -265, 11224, -255, 11224, -250, 11224, -240, 11224, -230, 11224, -220, 11224, -215, 11224, -205, 11224, -200, 11224, -195, 11224, -185, 11224, -180, 11224, -170, 11224, -160, 11224, -155, 11224, -145, 11224, -140, 11224, -130, 11224, -125, 11224, -120, 11224, -110, 11224, -105, 11224, -100, 11224, -95, 11224, -90, 11224, -80, 11224, -75, 11224, -70, 11224, -65, 11224, -60, 11224, -55, 11224, -50, 11224, -45, 11224, -40, 11224, -35, 11224, -30, 11224, -25, 11224, -15, 11224, -10, 11224, 0, 11224, 5, 11224, 10, 11224, 15, 11224, 20, 11224, 25, 11224, 30, 11224, 35, 11224, 40, 11224, 45, 11224, 50, 11224, 55, 11224, 60, 11224, 65, 11224, 70, 11224, 80, 11224, 90, 11224, 100, 11224, 105, 11224, 110, 11224, 115, 11224, 120, 11224, 125, 11224, 130, 11224, 135, 11224, 140, 11224, 145, 11224, 150, 11224, 160, 11224, 165, 11224, 170, 11224, 175, 11224, 180, 11224, 185, 11224, 190, 11224, 195, 11224, 200, 11224, 205, 11224, 210, 11224, 215, 11224, 220, 11224, 225, 11224, 250, 11224, 255, 11224, 270, 11224, 285, 11224, 290, 11224, 310, 11224, 315, 11224, 335, 11224, 345, 11224, 355, 11224, 370, 11224, 375, 11224, 395, 11224, 400, 11224, 420, 11224, 425, 11224, 440, 11224, 455, 11224, 460, 11224, 480, 11224, 500, 11224, 505, 11224, 525, 11224, 535, 11224, 545, 11224, 560, 11224, 565, 11224, 585, 11224, 605, 11224, 625, 11224, 630, 11224, 640, 11224, 655, 11224, 660, 11224, 675, 11224, 680, 11224, 695, 11224, 715, 11224, 720, 11224, 730, 11224, 740, 11224, 750, 11224, 760, 11224, 765, 11224, 775, 11224, 780, 11224, 795, 11224, 810, 11224, 825, 11224, 830, 11224, 840, 11224, 845, 11224, 855, 11224, 860, 11224, 865, 11224, 875, 11224, 880, 11224, 885, 11224, 890, 11224, 900, 11224, 910, 11224, 915, 11224, 920, 11224, 930, 11224, 940, 11224, 950, 11224, 955, 11224, 960, 11224, 965, 11224, 970, 11224, 975, 11224, 980, 11224, 985 } :bin { "55514e4a45413b3633312f2d2b2927262422201e1c1a18161513110f0d0b0908070604030201000102030405060708090a0c0e101214151617191b1d1f202123252627282a2c2d2e30323334383b3f4345494c4e50525557595b5e606366696c6f717376797b7e8082838587898b8d8e8f91929495969798999a9b9a9998979695949392908f8e8c8a8987858382817f7c7a78757371706d6a686564615f5d5b5a5857555351504f4e4c4b494745444341403e3d3c3b3a3938373635363738393a3c3d3e4042434446484b4c4d4f50525456585a5c5f6164676b6e7174787b7f8284888d9094989c9d9fa1a2a4a6a8a9abadafb0b1b3b5b7b8b9babcbec0c1c2c4c6c8cacbcccdcfd1d3d5d7d8dadbdcdddedfe0e1e2e3e4e5e4e3e2e0dfdedddcdbd9d8d6d4d2d0cecccbc9c7c5c3c1bfbdbbb9b8b6b4b2b0aeacaaa7a5a3a09e9c97918c86827d77726d67625d5a5673" } - :intvector { 280, 503 } - } //Z#280 + :intvector { 279, 502 } + } //Z#279 , /* Asia/Riyadh89 */ :array { :intvector { 599648191, 599734621, 599821046, 599907476, 599993901, 600080326, 600166751, 600253181, 600339606, 600426031, 600512451, 600598876, 600685301, 600771721, 600858141, 600944561, 601030981, 601117401, 601203821, 601290241, 601376656, 601463071, 601549491, 601635906, 601722316, 601808731, 601895146, 601981556, 602067966, 602154376, 602240786, 602327196, 602413601, 602500011, 602586416, 602672821, 602759226, 602932031, 603104836, 603364031, 603536826, 603709621, 603796016, 603882411, 603968806, 604055196, 604141591, 604227981, 604314371, 604400761, 604487151, 604573541, 604659931, 604746321, 604832706, 604919096, 605005481, 605091871, 605178256, 605264641, 605351026, 605437411, 605523796, 605610181, 605696566, 605782946, 605869331, 605955716, 606042096, 606128481, 606214861, 606301246, 606387626, 606474011, 606560391, 606646771, 606733156, 606819536, 606905916, 606992301, 607078681, 607165066, 607251446, 607337826, 607424211, 607510591, 607596976, 607683356, 607769741, 607856121, 607942506, 608028886, 608115271, 608201656, 608288041, 608374426, 608460811, 608547196, 608633581, 608719966, 608806351, 608892736, 608979126, 609065511, 609151901, 609238286, 609324676, 609411066, 609497456, 609583846, 609670236, 609756626, 609843016, 609929411, 610015801, 610102196, 610188586, 610274981, 610361376, 610447771, 610534166, 610706961, 610879756, 611484561, 611657366, 611743771, 611916576, 612002981, 612089391, 612175796, 612262201, 612348611, 612435016, 612521426, 612607831, 612694241, 612780651, 612867061, 612953471, 613039881, 613126291, 613212701, 613299116, 613385526, 613471936, 613558351, 613644761, 613731176, 613817586, 613904001, 613990411, 614076826, 614163241, 614249651, 614336066, 614422476, 614508891, 614595306, 614681716, 614768131, 614854541, 614940956, 615027366, 615113781, 615200191, 615286601, 615373016, 615459426, 615545836, 615632246, 615718656, 615805066, 615891476, 615977886, 616064296, 616150701, 616237111, 616323516, 616409926, 616496331, 616582736, 616669141, 616755546, 616841951, 616928356, 617101161, 617273966, 617705961, 617878756, 618051551, 618137946, 618224341, 618310736, 618397126, 618483521, 618569911, 618656306, 618742696, 618829086, 618915476, 619001866, 619088256, 619174646, 619261031, 619347421, 619433806, 619520191, 619606581, 619692966, 619779351, 619865736, 619952116, 620038501, 620124886, 620211266, 620297651, 620384031, 620470416, 620556796, 620643176, 620729561, 620815941, 620902321, 620988701, 621075081, 621161461, 621247841, 621334216, 621420596, 621506976, 621593356, 621679736, 621766111, 621852491, 621938871, 622025251, 622111626, 622198006, 622284386, 622370766, 622457141, 622543521, 622629901, 622716281, 622802661, 622889041, 622975416, 623061796, 623148176, 623234561, 623320941, 623407321, 623493701, 623580086, 623666466, 623752846, 623839231, 623925616, 624011996, 624098381, 624184766, 624271151, 624357536, 624443926, 624530311, 624616696, 624703086, 624789476, 624875866, 624962256, 625048646, 625135036, 625221426, 625307821, 625394216, 625480606, 625567001, 625653396, 625826191, 626085386, 626171791, 626430996, 626517401, 626603806, 626690211, 626776616, 626863021, 626949431, 627035841, 627122251, 627208661, 627295071, 627381486, 627467896, 627554311, 627640726, 627727141, 627813561, 627899976, 627986396, 628072816, 628159231, 628245651, 628332076, 628418496, 628504916, 628591341, 628677766, 628764191, 628850611, 628937036, 629023466, 629109891, 629196316, 629282746, 629369171, 629455601, 629542026, 629628456, 629714886, 629801316, 629887741, 629974171, 630060601, 630147031, 630233461, 630319891, 630406321, 630492751, 630579181, 630665611, 630752041, 630838471, 630924896, 631011326, 631097756, 631140956 } :intvector { 11224, -860, 11224, -855, 11224, -850, 11224, -845, 11224, -840, 11224, -835, 11224, -830, 11224, -825, 11224, -820, 11224, -815, 11224, -810, 11224, -805, 11224, -800, 11224, -795, 11224, -790, 11224, -785, 11224, -780, 11224, -775, 11224, -770, 11224, -765, 11224, -755, 11224, -745, 11224, -740, 11224, -730, 11224, -720, 11224, -715, 11224, -705, 11224, -695, 11224, -680, 11224, -665, 11224, -650, 11224, -645, 11224, -635, 11224, -625, 11224, -620, 11224, -605, 11224, -590, 11224, -585, 11224, -570, 11224, -565, 11224, -555, 11224, -545, 11224, -540, 11224, -525, 11224, -520, 11224, -505, 11224, -500, 11224, -485, 11224, -475, 11224, -470, 11224, -455, 11224, -450, 11224, -435, 11224, -430, 11224, -415, 11224, -405, 11224, -395, 11224, -390, 11224, -385, 11224, -380, 11224, -375, 11224, -370, 11224, -365, 11224, -360, 11224, -355, 11224, -350, 11224, -345, 11224, -340, 11224, -335, 11224, -330, 11224, -325, 11224, -320, 11224, -310, 11224, -305, 11224, -300, 11224, -290, 11224, -280, 11224, -270, 11224, -260, 11224, -255, 11224, -250, 11224, -245, 11224, -240, 11224, -235, 11224, -230, 11224, -225, 11224, -215, 11224, -205, 11224, -200, 11224, -190, 11224, -180, 11224, -175, 11224, -165, 11224, -160, 11224, -155, 11224, -150, 11224, -145, 11224, -140, 11224, -130, 11224, -125, 11224, -120, 11224, -115, 11224, -110, 11224, -100, 11224, -95, 11224, -90, 11224, -80, 11224, -75, 11224, -65, 11224, -55, 11224, -50, 11224, -40, 11224, -35, 11224, -25, 11224, -20, 11224, -10, 11224, -5, 11224, 0, 11224, 10, 11224, 15, 11224, 25, 11224, 35, 11224, 40, 11224, 50, 11224, 55, 11224, 60, 11224, 65, 11224, 75, 11224, 85, 11224, 90, 11224, 95, 11224, 100, 11224, 105, 11224, 110, 11224, 115, 11224, 120, 11224, 125, 11224, 130, 11224, 135, 11224, 140, 11224, 145, 11224, 150, 11224, 160, 11224, 165, 11224, 175, 11224, 180, 11224, 185, 11224, 190, 11224, 195, 11224, 200, 11224, 205, 11224, 210, 11224, 215, 11224, 220, 11224, 235, 11224, 240, 11224, 260, 11224, 265, 11224, 285, 11224, 290, 11224, 305, 11224, 320, 11224, 325, 11224, 350, 11224, 370, 11224, 375, 11224, 390, 11224, 405, 11224, 410, 11224, 430, 11224, 435, 11224, 455, 11224, 460, 11224, 475, 11224, 485, 11224, 495, 11224, 510, 11224, 515, 11224, 535, 11224, 540, 11224, 560, 11224, 565, 11224, 580, 11224, 585, 11224, 600, 11224, 610, 11224, 615, 11224, 635, 11224, 655, 11224, 660, 11224, 675, 11224, 680, 11224, 690, 11224, 700, 11224, 710, 11224, 725, 11224, 730, 11224, 745, 11224, 760, 11224, 780, 11224, 795, 11224, 800, 11224, 810, 11224, 815, 11224, 825, 11224, 835, 11224, 840, 11224, 850, 11224, 865, 11224, 880, 11224, 890, 11224, 900, 11224, 905, 11224, 910, 11224, 915, 11224, 920, 11224, 925, 11224, 930, 11224, 935, 11224, 940, 11224, 945, 11224, 950, 11224, 955, 11224, 960, 11224, 965, 11224, 970, 11224, 975, 11224, 980, 11224, 985, 11224, 990 } :bin { "56514d4a46413c373532302e2b29272523211f1d1c1b1917161412100e0c0a080705040302010001020304050608090b0d0f1113141517181a1b1c1d1e2022232426282a2c2d2f31333436383b3f4346494b4d505356585a5c606266686a6c6e70727476787a7b7e7f81838587898b8d8e8f90919394959697989998979695949291908f8e8d8c8a88868482807f7d7b7a7877757371706e6c6b69676562615e5c5a5957565552504e4d4c4b4a484746444341403f3e3d3c3b3a393a3b3c3d3e3f4142444547484a4b4c4d4f51545657595b5d616366696b6d6f727577797c7f82868a8e9195999b9d9ea0a2a3a4a6a8aaabadafb1b2b4b6b8babbbcbec0c2c4c5c6c7c8cacccecfd0d1d2d3d5d7d9dbdddedfe1e2e3e4e5e4e3e2e1e0dfdedcdad8d6d4d2d1d0cfcdcbc9c7c6c5c3c1bfbdbbb9b7b5b3b0aeaca9a7a5a3a19f9c9a96908c86807c7874706c68645f5a75" } - :intvector { 281, 504 } - } //Z#281 + :intvector { 280, 503 } + } //Z#280 , /* Asia/Saigon */ :array { :intvector { -2005974400, -1855983920, -1819954800, -1220428800 } :intvector { 25200, 0, 25580, 0, 28800, 0 } :bin { "01000200" } - :intvector { 282, 579 } - } //Z#282 + :intvector { 281, 578 } + } //Z#281 , /* Asia/Sakhalin */ :array { :intvector { -2031039048, -1009875600, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701784000, 717505200, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400 } :intvector { 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 } :bin { "00000304030403040304030403040304030403040304030201030403040304030403" } "Russia" :intvector { 36000, 1996 } - } //Z#283 + } //Z#282 , /* Asia/Samarkand */ :array { :intvector { -1441168032, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 683661600, 686091600, 694206000 } :intvector { 14400, 0, 18000, 0, 18000, 3600, 21600, 0 } :bin { "0001020302010201020102010201020102010201020102020101" } - } //Z#284 + } //Z#283 , /* Asia/Seoul */ :array { :intvector { -2053931400, -1325494800, -1199262600, -498128400, -303984000, -293533200, -264931200, -39515400, 547570800, 560872800, 579020400, 592322400 } :intvector { 28800, 0, 28800, 3600, 30600, 0, 32400, 0, 32400, 3600 } :bin { "030203000100020304030403" } - :intvector { 285, 559 } - } //Z#285 + :intvector { 284, 558 } + } //Z#284 , /* Asia/Shanghai */ :array { :intvector { -1325491552, -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } :intvector { 28800, 0, 28800, 3600 } :bin { "0001000100010001000100010001000100" } - :intvector { 286, 351, 512 } - } //Z#286 + :intvector { 285, 350, 511 } + } //Z#285 , /* Asia/Singapore */ :array { :intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, -138785400, 378664200 } :intvector { 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } :bin { "0001020305030304" } - :intvector { 287, 561 } - } //Z#287 + :intvector { 286, 560 } + } //Z#286 , /* Asia/Taipei */ :array { :intvector { -778579200, -765363600, -747043200, -733827600, -715507200, -702291600, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 331142400, 339087600 } :intvector { 28800, 0, 28800, 3600 } :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100" } - :intvector { 288, 558 } - } //Z#288 + :intvector { 287, 557 } + } //Z#287 , /* Asia/Tashkent */ :array { :intvector { -1441168632, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683661600, 686091600, 694206000 } :intvector { 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } :bin { "0002030203020302030203020302030203020302030201010000" } - } //Z#289 + } //Z#288 , /* Asia/Tbilisi */ :array { :intvector { -1441162756, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 671140800, 686098800, 694213200, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 859662000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 } :intvector { 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } :bin { "0002030203020302030203020302030203020302030201010000010001000102030203030203020302030203020302030203010002" } - } //Z#290 + } //Z#289 , /* Asia/Tehran */ :array { - :intvector { -1704165944, -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800, 2121193800, 2137087800 } + :intvector { -1704165944, -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000 } :intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 } - :bin { "00010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - :intvector { 291, 488 } - } //Z#291 -, /* Asia/Tel_Aviv */ :int { 252 } //Z#292 -, /* Asia/Thimbu */ :int { 294 } //Z#293 + :bin { "00010304030102010201020102010201020102010201020102010201020102010201020102010201" } + :intvector { 290, 487 } + } //Z#290 +, /* Asia/Tel_Aviv */ :int { 251 } //Z#291 +, /* Asia/Thimbu */ :int { 293 } //Z#292 , /* Asia/Thimphu */ :array { :intvector { -706341516, 560025000 } :intvector { 19800, 0, 21600, 0 } :bin { "0001" } - :intvector { 293, 294 } - } //Z#294 + :intvector { 292, 293 } + } //Z#293 , /* Asia/Tokyo */ :array { :intvector { -1009875600, -683794800, -672393600, -654764400, -640944000, -620290800, -609494400, -588841200, -578044800 } :intvector { 32400, 0, 32400, 3600 } :bin { "000100010001000100" } - :intvector { 295, 490, 492 } - } //Z#295 -, /* Asia/Ujung_Pandang */ :int { 265 } //Z#296 + :intvector { 294, 489, 491 } + } //Z#294 +, /* Asia/Ujung_Pandang */ :int { 264 } //Z#295 , /* Asia/Ulaanbaatar */ :array { :intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200 } :intvector { 25200, 0, 28800, 0, 28800, 3600 } :bin { "00010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - :intvector { 297, 298 } - } //Z#297 -, /* Asia/Ulan_Bator */ :int { 297 } //Z#298 + :intvector { 296, 297 } + } //Z#296 +, /* Asia/Ulan_Bator */ :int { 296 } //Z#297 , /* Asia/Urumqi */ :array { :intvector { -1325483420, 325965600, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 } :intvector { 21600, 0, 28800, 0, 28800, 3600 } :bin { "0001020102010201020102010201" } - } //Z#299 + } //Z#298 , /* Asia/Vientiane */ :array { :intvector { -2005973424, -1855983920, -1819954800, -1220428800 } :intvector { 25200, 0, 25580, 0, 28800, 0 } :bin { "01000200" } - } //Z#300 + } //Z#299 , /* Asia/Vladivostok */ :array { :intvector { -1487321264, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701787600, 717508800, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000 } :intvector { 32400, 0, 32400, 3600, 36000, 0, 36000, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 36000, 1996 } - } //Z#301 + } //Z#300 , /* Asia/Yakutsk */ :array { :intvector { -1579423120, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701791200, 717512400, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600 } :intvector { 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 32400, 1996 } - } //Z#302 + } //Z#301 , /* Asia/Yekaterinburg */ :array { :intvector { -1592611344, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701805600, 717526800, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000 } :intvector { 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 } :bin { "000203020302030203020302030203020302030203020100020302030203020302" } "Russia" :intvector { 18000, 1996 } - } //Z#303 + } //Z#302 , /* Asia/Yerevan */ :array { :intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 685569600, 686098800, 701812800, 717534000, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200 } :intvector { 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } :bin { "000203020302030203020302030203020302030203020101000100010001000102" } "RussiaAsia" :intvector { 14400, 1996 } - :intvector { 304, 505 } - } //Z#304 + :intvector { 303, 504 } + } //Z#303 , /* Atlantic/Azores */ :array { :intvector { -1849557928, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { -7200, 0, -7200, 3600, -7200, 7200, -3600, 0, -3600, 3600, 0, 0 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010201000102010001020100010201000100010001000100010001000100010001000100010001000100010001000100010001000100030403040304030403040304030403040304030403040304030403040304030405040304030403" } "EU" :intvector { -3600, 1996 } - } //Z#305 + } //Z#304 , /* Atlantic/Bermuda */ :array { :intvector { -1262281256, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000 } :intvector { -14400, 0, -14400, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -14400, 2007 } - } //Z#306 + } //Z#305 , /* Atlantic/Canary */ :array { :intvector { -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { -3600, 0, 0, 0, 0, 3600 } :bin { "00010201020102010201020102010201020102010201020102010201020102010201" } "EU" :intvector { 0, 1996 } - } //Z#307 + } //Z#306 , /* Atlantic/Cape_Verde */ :array { :intvector { -1988144756, -862610400, -764118000, 186120000 } :intvector { -7200, 0, -7200, 3600, -3600, 0 } :bin { "00010002" } - } //Z#308 -, /* Atlantic/Faeroe */ :int { 310 } //Z#309 + } //Z#307 +, /* Atlantic/Faeroe */ :int { 309 } //Z#308 , /* Atlantic/Faroe */ :array { :intvector { -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 0, 1996 } - :intvector { 309, 310 } - } //Z#310 -, /* Atlantic/Jan_Mayen */ :int { 438 } //Z#311 + :intvector { 308, 309 } + } //Z#309 +, /* Atlantic/Jan_Mayen */ :int { 437 } //Z#310 , /* Atlantic/Madeira */ :array { :intvector { -1849560744, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010201000102010001020100010201000100010001000100010001000100010001000100010001000100010001000100010001000100030403040304030403040304030403040304030403040304030403040304030403040304030403" } "EU" :intvector { 0, 1996 } - } //Z#312 + } //Z#311 , /* Atlantic/Reykjavik */ :array { :intvector { -1956609132, -1668211200, -1647212400, -1636675200, -1613430000, -968025600, -949615200, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 } :intvector { -3600, 0, -3600, 3600, 0, 0 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010002" } - :intvector { 313, 476 } - } //Z#313 + :intvector { 312, 475 } + } //Z#312 , /* Atlantic/South_Georgia */ :array { :intvector { } :intvector { -7200, 0 } :bin { "" } - } //Z#314 + } //Z#313 , /* Atlantic/St_Helena */ :array { :intvector { -599614632 } :intvector { 0, 0 } :bin { "00" } - } //Z#315 + } //Z#314 , /* Atlantic/Stanley */ :array { :intvector { -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400 } :intvector { -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } :bin { "00010001000100010001000100020302030201000100010001000100010001000100010001000100010001000100010001" } "Falk" :intvector { -14400, 2001 } - } //Z#316 -, /* Australia/ACT */ :int { 335 } //Z#317 + } //Z#315 +, /* Australia/ACT */ :int { 334 } //Z#316 , /* Australia/Adelaide */ :array { - :intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600 } + :intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000 } :intvector { 34200, 0, 34200, 3600 } - :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "AS" - :intvector { 34200, 2008 } - :intvector { 318, 334 } - } //Z#318 + :intvector { 34200, 2007 } + :intvector { 317, 333 } + } //Z#317 , /* Australia/Brisbane */ :array { :intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 } :intvector { 36000, 0, 36000, 3600 } :bin { "01000100010001000100010001000100" } - :intvector { 319, 333 } - } //Z#319 + :intvector { 318, 332 } + } //Z#318 , /* Australia/Broken_Hill */ :array { - :intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 946647000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600 } + :intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 946647000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000 } :intvector { 34200, 0, 34200, 3600 } - :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010100010001000100010001000100010001" } + :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001010001000100010001000100010001" } "AS" - :intvector { 34200, 2008 } - :intvector { 320, 339 } - } //Z#320 -, /* Australia/Canberra */ :int { 335 } //Z#321 + :intvector { 34200, 2007 } + :intvector { 319, 338 } + } //Z#319 +, /* Australia/Canberra */ :int { 334 } //Z#320 , /* Australia/Currie */ :array { - :intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400 } + :intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000 } :intvector { 36000, 0, 36000, 3600 } - :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "AT" - :intvector { 36000, 2008 } - } //Z#322 + :intvector { 36000, 2007 } + } //Z#321 , /* Australia/Darwin */ :array { :intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 } :intvector { 34200, 0, 34200, 3600 } :bin { "0100010001000100" } - :intvector { 0, 323, 331 } - } //Z#323 + :intvector { 0, 322, 330 } + } //Z#322 , /* Australia/Eucla */ :array { :intvector { -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 } :intvector { 31500, 0, 31500, 3600 } :bin { "010001000100010001000100010001000100" } - } //Z#324 + } //Z#323 , /* Australia/Hobart */ :array { - :intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400 } + :intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000 } :intvector { 36000, 0, 36000, 3600 } - :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "AT" - :intvector { 36000, 2008 } - :intvector { 325, 336 } - } //Z#325 -, /* Australia/LHI */ :int { 328 } //Z#326 + :intvector { 36000, 2007 } + :intvector { 324, 335 } + } //Z#324 +, /* Australia/LHI */ :int { 327 } //Z#325 , /* Australia/Lindeman */ :array { :intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 709912800, 719942400, 731433600, 751996800, 762883200 } :intvector { 36000, 0, 36000, 3600 } :bin { "010001000100010001000100010001000001000100" } - } //Z#327 + } //Z#326 , /* Australia/Lord_Howe */ :array { - :intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000 } + :intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400 } :intvector { 37800, 0, 37800, 1800, 37800, 3600 } - :bin { "000200020002000200010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "00020002000200020001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "LH" - :intvector { 37800, 2008 } - :intvector { 326, 328 } - } //Z#328 + :intvector { 37800, 2007 } + :intvector { 325, 327 } + } //Z#327 , /* Australia/Melbourne */ :array { - :intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800 } + :intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200 } :intvector { 36000, 0, 36000, 3600 } - :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "AV" - :intvector { 36000, 2008 } - :intvector { 329, 337 } - } //Z#329 -, /* Australia/NSW */ :int { 335 } //Z#330 -, /* Australia/North */ :int { 323 } //Z#331 + :intvector { 36000, 2007 } + :intvector { 328, 336 } + } //Z#328 +, /* Australia/NSW */ :int { 334 } //Z#329 +, /* Australia/North */ :int { 322 } //Z#330 , /* Australia/Perth */ :array { :intvector { -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 } :intvector { 28800, 0, 28800, 3600 } :bin { "010001000100010001000100010001000100" } - :intvector { 332, 338 } - } //Z#332 -, /* Australia/Queensland */ :int { 319 } //Z#333 -, /* Australia/South */ :int { 318 } //Z#334 + :intvector { 331, 337 } + } //Z#331 +, /* Australia/Queensland */ :int { 318 } //Z#332 +, /* Australia/South */ :int { 317 } //Z#333 , /* Australia/Sydney */ :array { - :intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800 } + :intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200 } :intvector { 36000, 0, 36000, 3600 } - :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } + :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "AN" - :intvector { 36000, 2008 } - :intvector { 1, 317, 321, 330, 335 } - } //Z#335 -, /* Australia/Tasmania */ :int { 325 } //Z#336 -, /* Australia/Victoria */ :int { 329 } //Z#337 -, /* Australia/West */ :int { 332 } //Z#338 -, /* Australia/Yancowinna */ :int { 320 } //Z#339 -, /* BET */ :int { 186 } //Z#340 -, /* BST */ :int { 240 } //Z#341 -, /* Brazil/Acre */ :int { 182 } //Z#342 -, /* Brazil/DeNoronha */ :int { 165 } //Z#343 -, /* Brazil/East */ :int { 186 } //Z#344 -, /* Brazil/West */ :int { 148 } //Z#345 -, /* CAT */ :int { 29 } //Z#346 + :intvector { 36000, 2007 } + :intvector { 1, 316, 320, 329, 334 } + } //Z#334 +, /* Australia/Tasmania */ :int { 324 } //Z#335 +, /* Australia/Victoria */ :int { 328 } //Z#336 +, /* Australia/West */ :int { 331 } //Z#337 +, /* Australia/Yancowinna */ :int { 319 } //Z#338 +, /* BET */ :int { 185 } //Z#339 +, /* BST */ :int { 239 } //Z#340 +, /* Brazil/Acre */ :int { 181 } //Z#341 +, /* Brazil/DeNoronha */ :int { 164 } //Z#342 +, /* Brazil/East */ :int { 185 } //Z#343 +, /* Brazil/West */ :int { 147 } //Z#344 +, /* CAT */ :int { 29 } //Z#345 , /* CET */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "C-Eur" :intvector { 3600, 1996 } - } //Z#347 -, /* CNT */ :int { 189 } //Z#348 -, /* CST */ :int { 94 } //Z#349 + } //Z#346 +, /* CNT */ :int { 188 } //Z#347 +, /* CST */ :int { 94 } //Z#348 , /* CST6CDT */ :array { :intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -769395600, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200 } :intvector { -21600, 0, -21600, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -21600, 2007 } - } //Z#350 -, /* CTT */ :int { 286 } //Z#351 -, /* Canada/Atlantic */ :int { 122 } //Z#352 -, /* Canada/Central */ :int { 204 } //Z#353 -, /* Canada/East-Saskatchewan */ :int { 180 } //Z#354 -, /* Canada/Eastern */ :int { 199 } //Z#355 -, /* Canada/Mountain */ :int { 107 } //Z#356 -, /* Canada/Newfoundland */ :int { 189 } //Z#357 -, /* Canada/Pacific */ :int { 201 } //Z#358 -, /* Canada/Saskatchewan */ :int { 180 } //Z#359 -, /* Canada/Yukon */ :int { 203 } //Z#360 -, /* Chile/Continental */ :int { 184 } //Z#361 -, /* Chile/EasterIsland */ :int { 519 } //Z#362 -, /* Cuba */ :int { 123 } //Z#363 -, /* EAT */ :int { 7 } //Z#364 -, /* ECT */ :int { 439 } //Z#365 + } //Z#349 +, /* CTT */ :int { 285 } //Z#350 +, /* Canada/Atlantic */ :int { 122 } //Z#351 +, /* Canada/Central */ :int { 203 } //Z#352 +, /* Canada/East-Saskatchewan */ :int { 179 } //Z#353 +, /* Canada/Eastern */ :int { 198 } //Z#354 +, /* Canada/Mountain */ :int { 107 } //Z#355 +, /* Canada/Newfoundland */ :int { 188 } //Z#356 +, /* Canada/Pacific */ :int { 200 } //Z#357 +, /* Canada/Saskatchewan */ :int { 179 } //Z#358 +, /* Canada/Yukon */ :int { 202 } //Z#359 +, /* Chile/Continental */ :int { 183 } //Z#360 +, /* Chile/EasterIsland */ :int { 518 } //Z#361 +, /* Cuba */ :int { 123 } //Z#362 +, /* EAT */ :int { 7 } //Z#363 +, /* ECT */ :int { 438 } //Z#364 , /* EET */ :array { :intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 7200, 0, 7200, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 7200, 1996 } - } //Z#366 + } //Z#365 , /* EST */ :array { :intvector { } :intvector { -18000, 0 } :bin { "" } - } //Z#367 + } //Z#366 , /* EST5EDT */ :array { :intvector { -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -769395600, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600 } :intvector { -18000, 0, -18000, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -18000, 2007 } - } //Z#368 -, /* Egypt */ :int { 18 } //Z#369 -, /* Eire */ :int { 418 } //Z#370 + } //Z#367 +, /* Egypt */ :int { 18 } //Z#368 +, /* Eire */ :int { 417 } //Z#369 , /* Etc/GMT */ :array { :intvector { } :intvector { 0, 0 } :bin { "" } - :intvector { 371, 372, 385, 400, 401, 467, 468, 469, 470, 471 } - } //Z#371 -, /* Etc/GMT+0 */ :int { 371 } //Z#372 + :intvector { 370, 371, 384, 399, 400, 466, 467, 468, 469, 470 } + } //Z#370 +, /* Etc/GMT+0 */ :int { 370 } //Z#371 , /* Etc/GMT+1 */ :array { :intvector { } :intvector { -3600, 0 } :bin { "" } - } //Z#373 + } //Z#372 , /* Etc/GMT+10 */ :array { :intvector { } :intvector { -36000, 0 } :bin { "" } - } //Z#374 + } //Z#373 , /* Etc/GMT+11 */ :array { :intvector { } :intvector { -39600, 0 } :bin { "" } - } //Z#375 + } //Z#374 , /* Etc/GMT+12 */ :array { :intvector { } :intvector { -43200, 0 } :bin { "" } - } //Z#376 + } //Z#375 , /* Etc/GMT+2 */ :array { :intvector { } :intvector { -7200, 0 } :bin { "" } - } //Z#377 + } //Z#376 , /* Etc/GMT+3 */ :array { :intvector { } :intvector { -10800, 0 } :bin { "" } - } //Z#378 + } //Z#377 , /* Etc/GMT+4 */ :array { :intvector { } :intvector { -14400, 0 } :bin { "" } - } //Z#379 + } //Z#378 , /* Etc/GMT+5 */ :array { :intvector { } :intvector { -18000, 0 } :bin { "" } - } //Z#380 + } //Z#379 , /* Etc/GMT+6 */ :array { :intvector { } :intvector { -21600, 0 } :bin { "" } - } //Z#381 + } //Z#380 , /* Etc/GMT+7 */ :array { :intvector { } :intvector { -25200, 0 } :bin { "" } - } //Z#382 + } //Z#381 , /* Etc/GMT+8 */ :array { :intvector { } :intvector { -28800, 0 } :bin { "" } - } //Z#383 + } //Z#382 , /* Etc/GMT+9 */ :array { :intvector { } :intvector { -32400, 0 } :bin { "" } - } //Z#384 -, /* Etc/GMT-0 */ :int { 371 } //Z#385 + } //Z#383 +, /* Etc/GMT-0 */ :int { 370 } //Z#384 , /* Etc/GMT-1 */ :array { :intvector { } :intvector { 3600, 0 } :bin { "" } - } //Z#386 + } //Z#385 , /* Etc/GMT-10 */ :array { :intvector { } :intvector { 36000, 0 } :bin { "" } - } //Z#387 + } //Z#386 , /* Etc/GMT-11 */ :array { :intvector { } :intvector { 39600, 0 } :bin { "" } - } //Z#388 + } //Z#387 , /* Etc/GMT-12 */ :array { :intvector { } :intvector { 43200, 0 } :bin { "" } - } //Z#389 + } //Z#388 , /* Etc/GMT-13 */ :array { :intvector { } :intvector { 46800, 0 } :bin { "" } - } //Z#390 + } //Z#389 , /* Etc/GMT-14 */ :array { :intvector { } :intvector { 50400, 0 } :bin { "" } - } //Z#391 + } //Z#390 , /* Etc/GMT-2 */ :array { :intvector { } :intvector { 7200, 0 } :bin { "" } - } //Z#392 + } //Z#391 , /* Etc/GMT-3 */ :array { :intvector { } :intvector { 10800, 0 } :bin { "" } - } //Z#393 + } //Z#392 , /* Etc/GMT-4 */ :array { :intvector { } :intvector { 14400, 0 } :bin { "" } - } //Z#394 + } //Z#393 , /* Etc/GMT-5 */ :array { :intvector { } :intvector { 18000, 0 } :bin { "" } - } //Z#395 + } //Z#394 , /* Etc/GMT-6 */ :array { :intvector { } :intvector { 21600, 0 } :bin { "" } - } //Z#396 + } //Z#395 , /* Etc/GMT-7 */ :array { :intvector { } :intvector { 25200, 0 } :bin { "" } - } //Z#397 + } //Z#396 , /* Etc/GMT-8 */ :array { :intvector { } :intvector { 28800, 0 } :bin { "" } - } //Z#398 + } //Z#397 , /* Etc/GMT-9 */ :array { :intvector { } :intvector { 32400, 0 } :bin { "" } - } //Z#399 -, /* Etc/GMT0 */ :int { 371 } //Z#400 -, /* Etc/Greenwich */ :int { 371 } //Z#401 + } //Z#398 +, /* Etc/GMT0 */ :int { 370 } //Z#399 +, /* Etc/Greenwich */ :int { 370 } //Z#400 , /* Etc/UCT */ :array { :intvector { } :intvector { 0, 0 } :bin { "" } - :intvector { 402, 563 } - } //Z#402 + :intvector { 401, 562 } + } //Z#401 , /* Etc/UTC */ :array { :intvector { } :intvector { 0, 0 } :bin { "" } - :intvector { 403, 404, 405, 577, 578, 582 } - } //Z#403 -, /* Etc/Universal */ :int { 403 } //Z#404 -, /* Etc/Zulu */ :int { 403 } //Z#405 + :intvector { 402, 403, 404, 576, 577, 581 } + } //Z#402 +, /* Etc/Universal */ :int { 402 } //Z#403 +, /* Etc/Zulu */ :int { 402 } //Z#404 , /* Europe/Amsterdam */ :array { :intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 220921200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 } :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010302030203020504050405040504040504050405040504050405040504050405040504050405040504050405040504050405040504" } "EU" :intvector { 3600, 1996 } - } //Z#406 + } //Z#405 , /* Europe/Andorra */ :array { :intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "0001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#407 + } //Z#406 , /* Europe/Athens */ :array { :intvector { -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } :bin { "0203020301000100020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } "EU" :intvector { 7200, 1996 } - } //Z#408 -, /* Europe/Belfast */ :int { 429 } //Z#409 + } //Z#407 +, /* Europe/Belfast */ :int { 428 } //Z#408 , /* Europe/Belgrade */ :array { :intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 407199600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "0100010001000100000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - :intvector { 410, 428, 440, 446, 448, 461 } - } //Z#410 + :intvector { 409, 427, 439, 445, 447, 460 } + } //Z#409 , /* Europe/Berlin */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717634800, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600, 3600, 7200 } :bin { "0100010001000100010001000102010001000102010001000100000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#411 -, /* Europe/Bratislava */ :int { 441 } //Z#412 + } //Z#410 +, /* Europe/Bratislava */ :int { 440 } //Z#411 , /* Europe/Brussels */ :array { :intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -799293600, -798073200, -781052400, -766623600, -745455600, -733273200, 220921200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 3600, 0, 3600, 3600 } :bin { "0203020302030200010001000100010001000100010001000100010001000100010001000100010001000100010001000100010302030203030203020302020302030203020302030203020302030203020302030203020302030203020302030203020302" } "EU" :intvector { 3600, 1996 } - } //Z#413 + } //Z#412 , /* Europe/Bucharest */ :array { :intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 662680800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 757375200, 764719200, 780440400, 796168800, 811890000 } :intvector { 7200, 0, 7200, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100000100010001000001000100" } "EU" :intvector { 7200, 1996 } - } //Z#414 + } //Z#413 , /* Europe/Budapest */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1640998800, -1633212000, -1617577200, -1600466400, -1587250800, -1569708000, -1554332400, -906937200, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762487200, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "010001000001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#415 + } //Z#414 , /* Europe/Chisinau */ :array { :intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 641941200, 670377600, 686102400, 694216800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000 } :intvector { 3600, 0, 3600, 3600, 6264, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "0203040304030403040304030403040304030401000100010506050605060506050605060506050605060505030403030403040304030403" } "EU" :intvector { 7200, 1996 } - :intvector { 416, 453 } - } //Z#416 + :intvector { 415, 452 } + } //Z#415 , /* Europe/Copenhagen */ :array { :intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "01000100010001000100010001000100000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#417 + } //Z#416 , /* Europe/Dublin */ :array { :intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1517011200, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600 } :intvector { -1521, 3600, 0, 0, 0, 3600, 3600, 0 } :bin { "000102010201020102010201010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } "EU" :intvector { 0, 1996 } - :intvector { 370, 418 } - } //Z#418 + :intvector { 369, 417 } + } //Z#417 , /* Europe/Gibraltar */ :array { :intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000102010201020102010201000100010201000100010001000100010001000100010001000304030403040304030403040304030403040304030403040304030403" } "EU" :intvector { 3600, 1996 } - } //Z#419 -, /* Europe/Guernsey */ :int { 429 } //Z#420 + } //Z#418 +, /* Europe/Guernsey */ :int { 428 } //Z#419 , /* Europe/Helsinki */ :array { :intvector { -1535938792, -875671200, -859863600, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 7200, 0, 7200, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 7200, 1996 } - :intvector { 421, 433 } - } //Z#421 -, /* Europe/Isle_of_Man */ :int { 429 } //Z#422 + :intvector { 420, 432 } + } //Z#420 +, /* Europe/Isle_of_Man */ :int { 428 } //Z#421 , /* Europe/Istanbul */ :array { :intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200 } :intvector { 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010302030203020302030201000100010001000100010001000100010001000100" } "EU" :intvector { 7200, 1996 } - :intvector { 249, 423, 562 } - } //Z#423 -, /* Europe/Jersey */ :int { 429 } //Z#424 + :intvector { 248, 422, 561 } + } //Z#422 +, /* Europe/Jersey */ :int { 428 } //Z#423 , /* Europe/Kaliningrad */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 701816400, 717537600, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "01000100010001000100010002030204050405040504050405040504050405040504050403020302030203020302" } "Russia" :intvector { 7200, 1996 } - } //Z#425 + } //Z#424 , /* Europe/Kiev */ :array { :intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "0204010001000405040504050405040504050405040504050404020302030203020302" } "EU" :intvector { 7200, 1996 } - } //Z#426 + } //Z#425 , /* Europe/Lisbon */ :array { :intvector { -1830381808, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020100010201000102010001020100010001000100010001000100010001000100010001000100010001000100010001000100010003000100010001000100010001000100010001000100010001000100010001000103040304030403" } "EU" :intvector { 0, 1996 } - :intvector { 427, 557 } - } //Z#427 -, /* Europe/Ljubljana */ :int { 410 } //Z#428 + :intvector { 426, 556 } + } //Z#426 +, /* Europe/Ljubljana */ :int { 409 } //Z#427 , /* Europe/London */ :array { :intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600 } :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0 } :bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001020102010201020102010001000102010001000100010001000100010001000100010001000100010001000100010001000100010001000100010300010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 0, 1996 } - :intvector { 409, 420, 422, 424, 429, 465, 466 } - } //Z#429 + :intvector { 408, 419, 421, 423, 428, 464, 465 } + } //Z#428 , /* Europe/Luxembourg */ :array { :intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 220921200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 3600, 0, 3600, 3600 } :bin { "02030203020302000100010001000100010001000100010001000100010001000100010001000100010001000100010001000103020302030203020302020302030203020302030203020302030203020302030203020302030203020302030203020302" } "EU" :intvector { 3600, 1996 } - } //Z#430 + } //Z#429 , /* Europe/Madrid */ :array { :intvector { -1661734800, -1648429200, -1631926800, -1616893200, -1601254800, -1585357200, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1029114000, -1017622800, -1002848400, -986173200, -969238800, -954118800, -940208400, -873079200, -862538400, -842839200, -828237600, -811389600, -796010400, -779940000, -765421200, -748490400, -733888800, -652327200, -639190800, 135122400, 150246000, 167176800, 181695600, 196812000, 212540400, 228866400, 243990000, 260402400, 276044400, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } :bin { "01000100010001000100010001000100010001000100010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" } "EU" :intvector { 3600, 1996 } - } //Z#431 + } //Z#430 , /* Europe/Malta */ :array { :intvector { -1690851600, -1680483600, -1664758800, -1649034000, -1635123600, -1616979600, -1604278800, -1585530000, -1571014800, -1555290000, -932432400, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71719200, -50547600, -40269600, -18493200, -8215200, 12956400, 23234400, 43801200, 54687600, 75855600, 86738400, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#432 -, /* Europe/Mariehamn */ :int { 421 } //Z#433 + } //Z#431 +, /* Europe/Mariehamn */ :int { 420 } //Z#432 , /* Europe/Minsk */ :array { :intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 670374000, 686102400, 701820000, 717544800, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "02040100010001040504050405040504050405040504050405040403020302030203020302" } "Russia" :intvector { 7200, 1996 } - } //Z#434 + } //Z#433 , /* Europe/Monaco */ :array { :intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403" } "EU" :intvector { 3600, 1996 } - } //Z#435 + } //Z#434 , /* Europe/Moscow */ :array { :intvector { -1688265000, -1656819048, -1641353448, -1627965048, -1618716648, -1596429048, -1593829848, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701812800, 717534000, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200 } :intvector { 7200, 0, 7200, 3600, 9048, 0, 9048, 3600, 9048, 7200, 10800, 0, 10800, 3600, 10800, 7200 } :bin { "020302040304060506070605000506050605060506050605060506050605060506050100050605060506050605" } "Russia" :intvector { 10800, 1996 } - :intvector { 436, 580 } - } //Z#436 -, /* Europe/Nicosia */ :int { 268 } //Z#437 + :intvector { 435, 579 } + } //Z#435 +, /* Europe/Nicosia */ :int { 267 } //Z#436 , /* Europe/Oslo */ :array { :intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "010001000100010001000100010001000100010001000100000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - :intvector { 217, 311, 438 } - } //Z#438 + :intvector { 216, 310, 437 } + } //Z#437 , /* Europe/Paris */ :array { :intvector { -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } :bin { "000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000104030403040201020304030403040304030403040304030403040304030403040304030403040304030403040304030403" } "EU" :intvector { 3600, 1996 } - :intvector { 365, 439 } - } //Z#439 -, /* Europe/Podgorica */ :int { 410 } //Z#440 + :intvector { 364, 438 } + } //Z#438 +, /* Europe/Podgorica */ :int { 409 } //Z#439 , /* Europe/Prague */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -798073200, -780534000, -761180400, -746578800, -733359600, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 283993200, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "010001000100010001000100010001000100010001000001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - :intvector { 412, 441 } - } //Z#441 + :intvector { 411, 440 } + } //Z#440 , /* Europe/Riga */ :array { :intvector { -1632008184, -1618702584, -1601681784, -1597275384, -1377308184, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800 } :intvector { 3600, 0, 3600, 3600, 5784, 0, 5784, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "03020302040601000100010006070607060706070607060706070607060504050405040504050405040504" } "EU" :intvector { 7200, 1996 } - } //Z#442 + } //Z#441 , /* Europe/Rome */ :array { :intvector { -1690851600, -1680483600, -1664758800, -1649034000, -1635123600, -1616979600, -1604278800, -1585530000, -1571014800, -1555290000, -932432400, -857257200, -844556400, -828226800, -812502000, -804823200, -798080400, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71719200, -50547600, -40269600, -18493200, -8215200, 12956400, 23234400, 43801200, 54687600, 75855600, 86738400, 107910000, 118188000, 138754800, 149637600, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 315529200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "0100010001000100010001000100010100010001000100010001000100010001000100010001000100010001000100010001000100000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - :intvector { 443, 445, 456 } - } //Z#443 + :intvector { 442, 444, 455 } + } //Z#442 , /* Europe/Samara */ :array { :intvector { -1593825636, -1247540400, -1102305600, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701809200, 717530400, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600 } :intvector { 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } :bin { "01030304030403040304030403040304030403020102010001030403040304030403" } "Russia" :intvector { 14400, 1996 } - } //Z#444 -, /* Europe/San_Marino */ :int { 443 } //Z#445 -, /* Europe/Sarajevo */ :int { 410 } //Z#446 + } //Z#443 +, /* Europe/San_Marino */ :int { 442 } //Z#444 +, /* Europe/Sarajevo */ :int { 409 } //Z#445 , /* Europe/Simferopol */ :array { :intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "02040100010001040504050405040504050405040504050405040402030203020305040504" } "EU" :intvector { 7200, 1996 } - } //Z#447 -, /* Europe/Skopje */ :int { 410 } //Z#448 + } //Z#446 +, /* Europe/Skopje */ :int { 409 } //Z#447 , /* Europe/Sofia */ :array { :intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 662680800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } :bin { "0001000100020302030203020302030203020302030203020302030203020203020302030203020302" } "EU" :intvector { 7200, 1996 } - } //Z#449 + } //Z#448 , /* Europe/Stockholm */ :array { :intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "01000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#450 + } //Z#449 , /* Europe/Tallinn */ :array { :intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800 } :intvector { 3600, 0, 3600, 3600, 5940, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "000100020305010001000105060506050605060506050605060506050403040304030403040304030403" } "EU" :intvector { 7200, 1996 } - } //Z#451 + } //Z#450 , /* Europe/Tirane */ :array { :intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#452 -, /* Europe/Tiraspol */ :int { 416 } //Z#453 + } //Z#451 +, /* Europe/Tiraspol */ :int { 415 } //Z#452 , /* Europe/Uzhgorod */ :array { :intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -796874400, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 631141200, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "01000100010100040504050405040504050405040504050405040400020302030203020302" } "EU" :intvector { 7200, 1996 } - } //Z#454 + } //Z#453 , /* Europe/Vaduz */ :array { :intvector { 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#455 -, /* Europe/Vatican */ :int { 443 } //Z#456 + } //Z#454 +, /* Europe/Vatican */ :int { 442 } //Z#455 , /* Europe/Vienna */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1577926800, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -757386000, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "0100010001000001000100010001000100000100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#457 + } //Z#456 , /* Europe/Vilnius */ :array { :intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800 } :intvector { 3600, 0, 3600, 3600, 5736, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "0200030005010001000105060506050605060506050605060506050605060504030403040304030403" } "EU" :intvector { 7200, 1996 } - } //Z#458 + } //Z#457 , /* Europe/Volgograd */ :array { :intvector { -1577761060, -1411873200, -1247540400, -256881600, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717534000, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200 } :intvector { 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } :bin { "000002020302030203020302030203020302030201000100020100010001000100" } "Russia" :intvector { 10800, 1996 } - } //Z#459 + } //Z#458 , /* Europe/Warsaw */ :array { :intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796874400, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 220921200, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 567990000, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } :bin { "0001000100010203020001000100010100010001000100010001000100010001000100010001000100010000010001000100010001000100010001000100010001000001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - :intvector { 460, 556 } - } //Z#460 -, /* Europe/Zagreb */ :int { 410 } //Z#461 + :intvector { 459, 555 } + } //Z#459 +, /* Europe/Zagreb */ :int { 409 } //Z#460 , /* Europe/Zaporozhye */ :array { :intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } :bin { "02040100010004050405040504050405040504050405040504050403020302030203020302" } "EU" :intvector { 7200, 1996 } - } //Z#462 + } //Z#461 , /* Europe/Zurich */ :array { :intvector { -920336400, -915242400, -904518000, -891223200, -873068400, -859773600, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 3600, 1996 } - } //Z#463 + } //Z#462 , /* Factory */ :array { :intvector { } :intvector { 0, 0 } :bin { "" } - } //Z#464 -, /* GB */ :int { 429 } //Z#465 -, /* GB-Eire */ :int { 429 } //Z#466 -, /* GMT */ :int { 371 } //Z#467 -, /* GMT+0 */ :int { 371 } //Z#468 -, /* GMT-0 */ :int { 371 } //Z#469 -, /* GMT0 */ :int { 371 } //Z#470 -, /* Greenwich */ :int { 371 } //Z#471 -, /* HST */ :int { 529 } //Z#472 -, /* Hongkong */ :int { 246 } //Z#473 -, /* IET */ :int { 125 } //Z#474 -, /* IST */ :int { 233 } //Z#475 -, /* Iceland */ :int { 313 } //Z#476 + } //Z#463 +, /* GB */ :int { 428 } //Z#464 +, /* GB-Eire */ :int { 428 } //Z#465 +, /* GMT */ :int { 370 } //Z#466 +, /* GMT+0 */ :int { 370 } //Z#467 +, /* GMT-0 */ :int { 370 } //Z#468 +, /* GMT0 */ :int { 370 } //Z#469 +, /* Greenwich */ :int { 370 } //Z#470 +, /* HST */ :int { 528 } //Z#471 +, /* Hongkong */ :int { 245 } //Z#472 +, /* IET */ :int { 125 } //Z#473 +, /* IST */ :int { 232 } //Z#474 +, /* Iceland */ :int { 312 } //Z#475 , /* Indian/Antananarivo */ :array { :intvector { -1846293004, -499924800, -492062400 } :intvector { 10800, 0, 10800, 3600 } :bin { "000100" } - } //Z#477 + } //Z#476 , /* Indian/Chagos */ :array { :intvector { -1988167780, 820436400 } :intvector { 18000, 0, 21600, 0 } :bin { "0001" } - } //Z#478 + } //Z#477 , /* Indian/Christmas */ :array { :intvector { } :intvector { 25200, 0 } :bin { "" } - } //Z#479 + } //Z#478 , /* Indian/Cocos */ :array { :intvector { } :intvector { 23400, 0 } :bin { "" } - } //Z#480 + } //Z#479 , /* Indian/Comoro */ :array { :intvector { -1846291984 } :intvector { 10800, 0 } :bin { "00" } - } //Z#481 + } //Z#480 , /* Indian/Kerguelen */ :array { :intvector { -631152000 } :intvector { 18000, 0 } :bin { "00" } - } //Z#482 + } //Z#481 , /* Indian/Mahe */ :array { :intvector { -2006653308 } :intvector { 14400, 0 } :bin { "00" } - } //Z#483 + } //Z#482 , /* Indian/Maldives */ :array { :intvector { -315636840 } :intvector { 18000, 0 } :bin { "00" } - } //Z#484 + } //Z#483 , /* Indian/Mauritius */ :array { :intvector { -1988164200 } :intvector { 14400, 0 } :bin { "00" } - } //Z#485 + } //Z#484 , /* Indian/Mayotte */ :array { :intvector { -1846292456 } :intvector { 10800, 0 } :bin { "00" } - } //Z#486 + } //Z#485 , /* Indian/Reunion */ :array { :intvector { -1848886912 } :intvector { 14400, 0 } :bin { "00" } - } //Z#487 -, /* Iran */ :int { 291 } //Z#488 -, /* Israel */ :int { 252 } //Z#489 -, /* JST */ :int { 295 } //Z#490 -, /* Jamaica */ :int { 136 } //Z#491 -, /* Japan */ :int { 295 } //Z#492 -, /* Kwajalein */ :int { 533 } //Z#493 -, /* Libya */ :int { 55 } //Z#494 + } //Z#486 +, /* Iran */ :int { 290 } //Z#487 +, /* Israel */ :int { 251 } //Z#488 +, /* JST */ :int { 294 } //Z#489 +, /* Jamaica */ :int { 135 } //Z#490 +, /* Japan */ :int { 294 } //Z#491 +, /* Kwajalein */ :int { 532 } //Z#492 +, /* Libya */ :int { 55 } //Z#493 , /* MET */ :array { :intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 3600, 0, 3600, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "C-Eur" :intvector { 3600, 1996 } - } //Z#495 -, /* MIT */ :int { 516 } //Z#496 + } //Z#494 +, /* MIT */ :int { 515 } //Z#495 , /* MST */ :array { :intvector { } :intvector { -25200, 0 } :bin { "" } - } //Z#497 + } //Z#496 , /* MST7MDT */ :array { :intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -769395600, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800 } :intvector { -25200, 0, -25200, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -25200, 2007 } - } //Z#498 -, /* Mexico/BajaNorte */ :int { 198 } //Z#499 -, /* Mexico/BajaSur */ :int { 150 } //Z#500 -, /* Mexico/General */ :int { 154 } //Z#501 -, /* Mideast/Riyadh87 */ :int { 279 } //Z#502 -, /* Mideast/Riyadh88 */ :int { 280 } //Z#503 -, /* Mideast/Riyadh89 */ :int { 281 } //Z#504 -, /* NET */ :int { 304 } //Z#505 -, /* NST */ :int { 517 } //Z#506 -, /* NZ */ :int { 517 } //Z#507 -, /* NZ-CHAT */ :int { 518 } //Z#508 -, /* Navajo */ :int { 104 } //Z#509 -, /* PLT */ :int { 255 } //Z#510 -, /* PNT */ :int { 171 } //Z#511 -, /* PRC */ :int { 286 } //Z#512 -, /* PRT */ :int { 176 } //Z#513 -, /* PST */ :int { 144 } //Z#514 + } //Z#497 +, /* Mexico/BajaNorte */ :int { 197 } //Z#498 +, /* Mexico/BajaSur */ :int { 149 } //Z#499 +, /* Mexico/General */ :int { 153 } //Z#500 +, /* Mideast/Riyadh87 */ :int { 278 } //Z#501 +, /* Mideast/Riyadh88 */ :int { 279 } //Z#502 +, /* Mideast/Riyadh89 */ :int { 280 } //Z#503 +, /* NET */ :int { 303 } //Z#504 +, /* NST */ :int { 516 } //Z#505 +, /* NZ */ :int { 516 } //Z#506 +, /* NZ-CHAT */ :int { 517 } //Z#507 +, /* Navajo */ :int { 104 } //Z#508 +, /* PLT */ :int { 254 } //Z#509 +, /* PNT */ :int { 170 } //Z#510 +, /* PRC */ :int { 285 } //Z#511 +, /* PRT */ :int { 175 } //Z#512 +, /* PST */ :int { 143 } //Z#513 , /* PST8PDT */ :array { :intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -769395600, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400 } :intvector { -28800, 0, -28800, 3600 } :bin { "010001000101000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } "US" :intvector { -28800, 2007 } - } //Z#515 + } //Z#514 , /* Pacific/Apia */ :array { :intvector { -1861878784, -631110600 } :intvector { -41400, 0, -39600, 0 } :bin { "0001" } - :intvector { 496, 516 } - } //Z#516 + :intvector { 495, 515 } + } //Z#515 , /* Pacific/Auckland */ :array { :intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400 } :intvector { 41400, 0, 41400, 1800, 41400, 3600, 43200, 0, 43200, 3600 } :bin { "0200010001000100010001000100010001000100010001000100010304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } "NZ" :intvector { 43200, 2008 } - :intvector { 506, 507, 517 } - } //Z#517 + :intvector { 505, 506, 516 } + } //Z#516 , /* Pacific/Chatham */ :array { :intvector { -410271228, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400 } :intvector { 45900, 0, 45900, 3600 } :bin { "0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001" } "Chatham" :intvector { 45900, 2008 } - :intvector { 508, 518 } - } //Z#518 + :intvector { 507, 517 } + } //Z#517 , /* Pacific/Easter */ :array { :intvector { -1178124152, -870552000, -865278000, -736376400, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 591768000, 605674800, 624427200, 637729200, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000 } :intvector { -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } :bin { "01000100010001000100010001000100010001000100010001000100010001020302030203020302030203020302030203020302030203020302030203020302030203" } "Chile" :intvector { -21600, 2000 } - :intvector { 362, 519 } - } //Z#519 + :intvector { 361, 518 } + } //Z#518 , /* Pacific/Efate */ :array { :intvector { -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 } :intvector { 39600, 0, 39600, 3600 } :bin { "000100010001000100010001000100010001000100" } - } //Z#520 + } //Z#519 , /* Pacific/Enderbury */ :array { :intvector { 307627200, 788958000 } :intvector { -39600, 0, 46800, 0 } :bin { "0001" } - } //Z#521 + } //Z#520 , /* Pacific/Fakaofo */ :array { :intvector { } :intvector { -36000, 0 } :bin { "" } - } //Z#522 + } //Z#521 , /* Pacific/Fiji */ :array { :intvector { -1709985220, 909842400, 920124000, 941896800, 951573600 } :intvector { 43200, 0, 43200, 3600 } :bin { "0001000100" } - } //Z#523 + } //Z#522 , /* Pacific/Funafuti */ :array { :intvector { } :intvector { 43200, 0 } :bin { "" } - } //Z#524 + } //Z#523 , /* Pacific/Galapagos */ :array { :intvector { -1230746496, 504939600 } :intvector { -21600, 0, -18000, 0 } :bin { "0100" } - } //Z#525 + } //Z#524 , /* Pacific/Gambier */ :array { :intvector { -1806678012 } :intvector { -32400, 0 } :bin { "00" } - } //Z#526 + } //Z#525 , /* Pacific/Guadalcanal */ :array { :intvector { -1806748788 } :intvector { 39600, 0 } :bin { "00" } - :intvector { 527, 560 } - } //Z#527 + :intvector { 526, 559 } + } //Z#526 , /* Pacific/Guam */ :array { :intvector { 977493600 } :intvector { 36000, 0 } :bin { "00" } - } //Z#528 + } //Z#527 , /* Pacific/Honolulu */ :array { :intvector { -1157283000, -1155472200, -880198200, -769395600, -765376200, -712150200 } :intvector { -37800, 0, -37800, 3600, -36000, 0 } :bin { "010001010002" } - :intvector { 472, 529, 570 } - } //Z#529 + :intvector { 471, 528, 569 } + } //Z#528 , /* Pacific/Johnston */ :array { :intvector { } :intvector { -36000, 0 } :bin { "" } - } //Z#530 + } //Z#529 , /* Pacific/Kiritimati */ :array { :intvector { 307622400, 788954400 } :intvector { -36000, 0, 50400, 0 } :bin { "0001" } - } //Z#531 + } //Z#530 , /* Pacific/Kosrae */ :array { :intvector { -7988400, 915105600 } :intvector { 39600, 0, 43200, 0 } :bin { "0100" } - } //Z#532 + } //Z#531 , /* Pacific/Kwajalein */ :array { :intvector { -7988400, 745848000 } :intvector { -43200, 0, 43200, 0 } :bin { "0001" } - :intvector { 493, 533 } - } //Z#533 + :intvector { 492, 532 } + } //Z#532 , /* Pacific/Majuro */ :array { :intvector { -7988400 } :intvector { 43200, 0 } :bin { "00" } - } //Z#534 + } //Z#533 , /* Pacific/Marquesas */ :array { :intvector { -1806676920 } :intvector { -34200, 0 } :bin { "00" } - } //Z#535 + } //Z#534 , /* Pacific/Midway */ :array { :intvector { -428504400, -420645600, -86878800, 439038000 } :intvector { -39600, 0, -39600, 3600 } :bin { "01000000" } - } //Z#536 + } //Z#535 , /* Pacific/Nauru */ :array { :intvector { -1545131260, -877347000, -800960400, 294323400 } :intvector { 32400, 0, 41400, 0, 43200, 0 } :bin { "01000102" } - } //Z#537 + } //Z#536 , /* Pacific/Niue */ :array { :intvector { -599575200, 276089400 } :intvector { -41400, 0, -39600, 0 } :bin { "0001" } - } //Z#538 + } //Z#537 , /* Pacific/Norfolk */ :array { :intvector { -599656320 } :intvector { 41400, 0 } :bin { "00" } - } //Z#539 + } //Z#538 , /* Pacific/Noumea */ :array { :intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 } :intvector { 39600, 0, 39600, 3600 } :bin { "00010001000100" } - } //Z#540 + } //Z#539 , /* Pacific/Pago_Pago */ :array { :intvector { -1861879032, -631110600, -86878800, 439038000 } :intvector { -41400, 0, -39600, 0 } :bin { "00010101" } - :intvector { 541, 548, 576 } - } //Z#541 + :intvector { 540, 547, 575 } + } //Z#540 , /* Pacific/Palau */ :array { :intvector { } :intvector { 32400, 0 } :bin { "" } - } //Z#542 + } //Z#541 , /* Pacific/Pitcairn */ :array { :intvector { 893665800 } :intvector { -28800, 0 } :bin { "00" } - } //Z#543 + } //Z#542 , /* Pacific/Ponape */ :array { :intvector { } :intvector { 39600, 0 } :bin { "" } - } //Z#544 + } //Z#543 , /* Pacific/Port_Moresby */ :array { :intvector { } :intvector { 36000, 0 } :bin { "" } - } //Z#545 + } //Z#544 , /* Pacific/Rarotonga */ :array { :intvector { 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 } :intvector { -36000, 0, -36000, 1800 } :bin { "0100010001000100010001000100010001000100010001000100" } - } //Z#546 + } //Z#545 , /* Pacific/Saipan */ :array { :intvector { -7981200, 977493600 } :intvector { 36000, 0 } :bin { "0000" } - } //Z#547 -, /* Pacific/Samoa */ :int { 541 } //Z#548 + } //Z#546 +, /* Pacific/Samoa */ :int { 540 } //Z#547 , /* Pacific/Tahiti */ :array { :intvector { -1806674504 } :intvector { -36000, 0 } :bin { "00" } - } //Z#549 + } //Z#548 , /* Pacific/Tarawa */ :array { :intvector { } :intvector { 43200, 0 } :bin { "" } - } //Z#550 + } //Z#549 , /* Pacific/Tongatapu */ :array { :intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400 } :intvector { 46800, 0, 46800, 3600 } :bin { "00010001000100" } - } //Z#551 + } //Z#550 , /* Pacific/Truk */ :array { :intvector { } :intvector { 36000, 0 } :bin { "" } - :intvector { 552, 555 } - } //Z#552 + :intvector { 551, 554 } + } //Z#551 , /* Pacific/Wake */ :array { :intvector { } :intvector { 43200, 0 } :bin { "" } - } //Z#553 + } //Z#552 , /* Pacific/Wallis */ :array { :intvector { } :intvector { 43200, 0 } :bin { "" } - } //Z#554 -, /* Pacific/Yap */ :int { 552 } //Z#555 -, /* Poland */ :int { 460 } //Z#556 -, /* Portugal */ :int { 427 } //Z#557 -, /* ROC */ :int { 288 } //Z#558 -, /* ROK */ :int { 285 } //Z#559 -, /* SST */ :int { 527 } //Z#560 -, /* Singapore */ :int { 287 } //Z#561 -, /* Turkey */ :int { 423 } //Z#562 -, /* UCT */ :int { 402 } //Z#563 -, /* US/Alaska */ :int { 59 } //Z#564 -, /* US/Aleutian */ :int { 58 } //Z#565 -, /* US/Arizona */ :int { 171 } //Z#566 -, /* US/Central */ :int { 94 } //Z#567 -, /* US/East-Indiana */ :int { 125 } //Z#568 -, /* US/Eastern */ :int { 162 } //Z#569 -, /* US/Hawaii */ :int { 529 } //Z#570 -, /* US/Indiana-Starke */ :int { 126 } //Z#571 -, /* US/Michigan */ :int { 105 } //Z#572 -, /* US/Mountain */ :int { 104 } //Z#573 -, /* US/Pacific */ :int { 144 } //Z#574 -, /* US/Pacific-New */ :int { 144 } //Z#575 -, /* US/Samoa */ :int { 541 } //Z#576 -, /* UTC */ :int { 403 } //Z#577 -, /* Universal */ :int { 403 } //Z#578 -, /* VST */ :int { 282 } //Z#579 -, /* W-SU */ :int { 436 } //Z#580 + } //Z#553 +, /* Pacific/Yap */ :int { 551 } //Z#554 +, /* Poland */ :int { 459 } //Z#555 +, /* Portugal */ :int { 426 } //Z#556 +, /* ROC */ :int { 287 } //Z#557 +, /* ROK */ :int { 284 } //Z#558 +, /* SST */ :int { 526 } //Z#559 +, /* Singapore */ :int { 286 } //Z#560 +, /* Turkey */ :int { 422 } //Z#561 +, /* UCT */ :int { 401 } //Z#562 +, /* US/Alaska */ :int { 59 } //Z#563 +, /* US/Aleutian */ :int { 58 } //Z#564 +, /* US/Arizona */ :int { 170 } //Z#565 +, /* US/Central */ :int { 94 } //Z#566 +, /* US/East-Indiana */ :int { 125 } //Z#567 +, /* US/Eastern */ :int { 161 } //Z#568 +, /* US/Hawaii */ :int { 528 } //Z#569 +, /* US/Indiana-Starke */ :int { 126 } //Z#570 +, /* US/Michigan */ :int { 105 } //Z#571 +, /* US/Mountain */ :int { 104 } //Z#572 +, /* US/Pacific */ :int { 143 } //Z#573 +, /* US/Pacific-New */ :int { 143 } //Z#574 +, /* US/Samoa */ :int { 540 } //Z#575 +, /* UTC */ :int { 402 } //Z#576 +, /* Universal */ :int { 402 } //Z#577 +, /* VST */ :int { 281 } //Z#578 +, /* W-SU */ :int { 435 } //Z#579 , /* WET */ :array { :intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400 } :intvector { 0, 0, 0, 3600 } :bin { "0100010001000100010001000100010001000100010001000100010001000100010001000100" } "EU" :intvector { 0, 1996 } - } //Z#581 -, /* Zulu */ :int { 403 } //Z#582 + } //Z#580 +, /* Zulu */ :int { 402 } //Z#581 } Names { "ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6 @@ -2753,151 +2748,150 @@ zoneinfo { ,"America/Guyana","America/Halifax","America/Havana" // 123 ,"America/Hermosillo","America/Indiana/Indianapolis" // 125 ,"America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg" // 128 - ,"America/Indiana/Tell_City","America/Indiana/Vevay" // 130 - ,"America/Indiana/Vincennes","America/Indiana/Winamac" // 132 - ,"America/Indianapolis","America/Inuvik","America/Iqaluit" // 135 - ,"America/Jamaica","America/Jujuy","America/Juneau" // 138 - ,"America/Kentucky/Louisville","America/Kentucky/Monticello" // 140 - ,"America/Knox_IN","America/La_Paz","America/Lima" // 143 - ,"America/Los_Angeles","America/Louisville","America/Maceio" // 146 - ,"America/Managua","America/Manaus","America/Martinique" // 149 - ,"America/Mazatlan","America/Mendoza","America/Menominee" // 152 - ,"America/Merida","America/Mexico_City","America/Miquelon" // 155 - ,"America/Moncton","America/Monterrey","America/Montevideo" // 158 - ,"America/Montreal","America/Montserrat","America/Nassau" // 161 - ,"America/New_York","America/Nipigon","America/Nome" // 164 - ,"America/Noronha","America/North_Dakota/Center","America/North_Dakota/New_Salem" // 167 - ,"America/Panama","America/Pangnirtung","America/Paramaribo" // 170 - ,"America/Phoenix","America/Port-au-Prince","America/Port_of_Spain" // 173 - ,"America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico" // 176 - ,"America/Rainy_River","America/Rankin_Inlet","America/Recife" // 179 - ,"America/Regina","America/Resolute","America/Rio_Branco" // 182 - ,"America/Rosario","America/Santiago","America/Santo_Domingo" // 185 - ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 188 - ,"America/St_Johns","America/St_Kitts","America/St_Lucia" // 191 - ,"America/St_Thomas","America/St_Vincent","America/Swift_Current" // 194 - ,"America/Tegucigalpa","America/Thule","America/Thunder_Bay" // 197 - ,"America/Tijuana","America/Toronto","America/Tortola" // 200 - ,"America/Vancouver","America/Virgin","America/Whitehorse" // 203 - ,"America/Winnipeg","America/Yakutat","America/Yellowknife" // 206 - ,"Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville" // 209 - ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 212 - ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 215 - ,"Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden" // 218 - ,"Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau" // 222 - ,"Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Baghdad" // 226 - ,"Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Beirut" // 230 - ,"Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Choibalsan" // 234 - ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 238 - ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 242 - ,"Asia/Dushanbe","Asia/Gaza","Asia/Harbin","Asia/Hong_Kong" // 246 - ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 250 - ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 254 - ,"Asia/Karachi","Asia/Kashgar","Asia/Katmandu","Asia/Krasnoyarsk" // 258 - ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 262 - ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 266 - ,"Asia/Muscat","Asia/Nicosia","Asia/Novosibirsk","Asia/Omsk" // 270 - ,"Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang" // 274 - ,"Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh" // 278 - ,"Asia/Riyadh87","Asia/Riyadh88","Asia/Riyadh89","Asia/Saigon" // 282 - ,"Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai" // 286 - ,"Asia/Singapore","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi" // 290 - ,"Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu" // 294 - ,"Asia/Tokyo","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 297 - ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Vientiane","Asia/Vladivostok" // 301 - ,"Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan" // 304 - ,"Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary" // 307 - ,"Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe" // 310 - ,"Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik" // 313 - ,"Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley" // 316 - ,"Australia/ACT","Australia/Adelaide","Australia/Brisbane" // 319 - ,"Australia/Broken_Hill","Australia/Canberra","Australia/Currie" // 322 - ,"Australia/Darwin","Australia/Eucla","Australia/Hobart" // 325 - ,"Australia/LHI","Australia/Lindeman","Australia/Lord_Howe" // 328 - ,"Australia/Melbourne","Australia/NSW","Australia/North" // 331 - ,"Australia/Perth","Australia/Queensland","Australia/South" // 334 - ,"Australia/Sydney","Australia/Tasmania","Australia/Victoria" // 337 - ,"Australia/West","Australia/Yancowinna","BET","BST" // 341 - ,"Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West" // 345 - ,"CAT","CET","CNT","CST","CST6CDT","CTT","Canada/Atlantic" // 352 - ,"Canada/Central","Canada/East-Saskatchewan","Canada/Eastern" // 355 - ,"Canada/Mountain","Canada/Newfoundland","Canada/Pacific" // 358 - ,"Canada/Saskatchewan","Canada/Yukon","Chile/Continental" // 361 - ,"Chile/EasterIsland","Cuba","EAT","ECT","EET","EST" // 367 - ,"EST5EDT","Egypt","Eire","Etc/GMT","Etc/GMT+0","Etc/GMT+1" // 373 - ,"Etc/GMT+10","Etc/GMT+11","Etc/GMT+12","Etc/GMT+2" // 377 - ,"Etc/GMT+3","Etc/GMT+4","Etc/GMT+5","Etc/GMT+6","Etc/GMT+7" // 382 - ,"Etc/GMT+8","Etc/GMT+9","Etc/GMT-0","Etc/GMT-1","Etc/GMT-10" // 387 - ,"Etc/GMT-11","Etc/GMT-12","Etc/GMT-13","Etc/GMT-14" // 391 - ,"Etc/GMT-2","Etc/GMT-3","Etc/GMT-4","Etc/GMT-5","Etc/GMT-6" // 396 - ,"Etc/GMT-7","Etc/GMT-8","Etc/GMT-9","Etc/GMT0","Etc/Greenwich" // 401 - ,"Etc/UCT","Etc/UTC","Etc/Universal","Etc/Zulu","Europe/Amsterdam" // 406 - ,"Europe/Andorra","Europe/Athens","Europe/Belfast" // 409 - ,"Europe/Belgrade","Europe/Berlin","Europe/Bratislava" // 412 - ,"Europe/Brussels","Europe/Bucharest","Europe/Budapest" // 415 - ,"Europe/Chisinau","Europe/Copenhagen","Europe/Dublin" // 418 - ,"Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki" // 421 - ,"Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey" // 424 - ,"Europe/Kaliningrad","Europe/Kiev","Europe/Lisbon" // 427 - ,"Europe/Ljubljana","Europe/London","Europe/Luxembourg" // 430 - ,"Europe/Madrid","Europe/Malta","Europe/Mariehamn" // 433 - ,"Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia" // 437 - ,"Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague" // 441 - ,"Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino" // 445 - ,"Europe/Sarajevo","Europe/Simferopol","Europe/Skopje" // 448 - ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 451 - ,"Europe/Tirane","Europe/Tiraspol","Europe/Uzhgorod" // 454 - ,"Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius" // 458 - ,"Europe/Volgograd","Europe/Warsaw","Europe/Zagreb" // 461 - ,"Europe/Zaporozhye","Europe/Zurich","Factory","GB" // 465 - ,"GB-Eire","GMT","GMT+0","GMT-0","GMT0","Greenwich" // 471 - ,"HST","Hongkong","IET","IST","Iceland","Indian/Antananarivo" // 477 - ,"Indian/Chagos","Indian/Christmas","Indian/Cocos" // 480 - ,"Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 484 - ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 487 - ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 493 - ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 499 - ,"Mexico/BajaSur","Mexico/General","Mideast/Riyadh87" // 502 - ,"Mideast/Riyadh88","Mideast/Riyadh89","NET","NST" // 506 - ,"NZ","NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST" // 514 - ,"PST8PDT","Pacific/Apia","Pacific/Auckland","Pacific/Chatham" // 518 - ,"Pacific/Easter","Pacific/Efate","Pacific/Enderbury" // 521 - ,"Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti" // 524 - ,"Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal" // 527 - ,"Pacific/Guam","Pacific/Honolulu","Pacific/Johnston" // 530 - ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 533 - ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 536 - ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 540 - ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 543 - ,"Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga" // 546 - ,"Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti" // 549 - ,"Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk" // 552 - ,"Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland" // 556 - ,"Portugal","ROC","ROK","SST","Singapore","Turkey" // 562 - ,"UCT","US/Alaska","US/Aleutian","US/Arizona","US/Central" // 567 - ,"US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke" // 571 - ,"US/Michigan","US/Mountain","US/Pacific","US/Pacific-New" // 575 - ,"US/Samoa","UTC","Universal","VST","W-SU","WET","Zulu" // 582 - // 582 + ,"America/Indiana/Vevay","America/Indiana/Vincennes" // 130 + ,"America/Indiana/Winamac","America/Indianapolis","America/Inuvik" // 133 + ,"America/Iqaluit","America/Jamaica","America/Jujuy" // 136 + ,"America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello" // 139 + ,"America/Knox_IN","America/La_Paz","America/Lima" // 142 + ,"America/Los_Angeles","America/Louisville","America/Maceio" // 145 + ,"America/Managua","America/Manaus","America/Martinique" // 148 + ,"America/Mazatlan","America/Mendoza","America/Menominee" // 151 + ,"America/Merida","America/Mexico_City","America/Miquelon" // 154 + ,"America/Moncton","America/Monterrey","America/Montevideo" // 157 + ,"America/Montreal","America/Montserrat","America/Nassau" // 160 + ,"America/New_York","America/Nipigon","America/Nome" // 163 + ,"America/Noronha","America/North_Dakota/Center","America/North_Dakota/New_Salem" // 166 + ,"America/Panama","America/Pangnirtung","America/Paramaribo" // 169 + ,"America/Phoenix","America/Port-au-Prince","America/Port_of_Spain" // 172 + ,"America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico" // 175 + ,"America/Rainy_River","America/Rankin_Inlet","America/Recife" // 178 + ,"America/Regina","America/Resolute","America/Rio_Branco" // 181 + ,"America/Rosario","America/Santiago","America/Santo_Domingo" // 184 + ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 187 + ,"America/St_Johns","America/St_Kitts","America/St_Lucia" // 190 + ,"America/St_Thomas","America/St_Vincent","America/Swift_Current" // 193 + ,"America/Tegucigalpa","America/Thule","America/Thunder_Bay" // 196 + ,"America/Tijuana","America/Toronto","America/Tortola" // 199 + ,"America/Vancouver","America/Virgin","America/Whitehorse" // 202 + ,"America/Winnipeg","America/Yakutat","America/Yellowknife" // 205 + ,"Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville" // 208 + ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 211 + ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 214 + ,"Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden" // 217 + ,"Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau" // 221 + ,"Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Baghdad" // 225 + ,"Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Beirut" // 229 + ,"Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Choibalsan" // 233 + ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 237 + ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 241 + ,"Asia/Dushanbe","Asia/Gaza","Asia/Harbin","Asia/Hong_Kong" // 245 + ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 249 + ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 253 + ,"Asia/Karachi","Asia/Kashgar","Asia/Katmandu","Asia/Krasnoyarsk" // 257 + ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 261 + ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 265 + ,"Asia/Muscat","Asia/Nicosia","Asia/Novosibirsk","Asia/Omsk" // 269 + ,"Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang" // 273 + ,"Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh" // 277 + ,"Asia/Riyadh87","Asia/Riyadh88","Asia/Riyadh89","Asia/Saigon" // 281 + ,"Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai" // 285 + ,"Asia/Singapore","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi" // 289 + ,"Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu" // 293 + ,"Asia/Tokyo","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 296 + ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Vientiane","Asia/Vladivostok" // 300 + ,"Asia/Yakutsk","Asia/Yekaterinburg","Asia/Yerevan" // 303 + ,"Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary" // 306 + ,"Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe" // 309 + ,"Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik" // 312 + ,"Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley" // 315 + ,"Australia/ACT","Australia/Adelaide","Australia/Brisbane" // 318 + ,"Australia/Broken_Hill","Australia/Canberra","Australia/Currie" // 321 + ,"Australia/Darwin","Australia/Eucla","Australia/Hobart" // 324 + ,"Australia/LHI","Australia/Lindeman","Australia/Lord_Howe" // 327 + ,"Australia/Melbourne","Australia/NSW","Australia/North" // 330 + ,"Australia/Perth","Australia/Queensland","Australia/South" // 333 + ,"Australia/Sydney","Australia/Tasmania","Australia/Victoria" // 336 + ,"Australia/West","Australia/Yancowinna","BET","BST" // 340 + ,"Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West" // 344 + ,"CAT","CET","CNT","CST","CST6CDT","CTT","Canada/Atlantic" // 351 + ,"Canada/Central","Canada/East-Saskatchewan","Canada/Eastern" // 354 + ,"Canada/Mountain","Canada/Newfoundland","Canada/Pacific" // 357 + ,"Canada/Saskatchewan","Canada/Yukon","Chile/Continental" // 360 + ,"Chile/EasterIsland","Cuba","EAT","ECT","EET","EST" // 366 + ,"EST5EDT","Egypt","Eire","Etc/GMT","Etc/GMT+0","Etc/GMT+1" // 372 + ,"Etc/GMT+10","Etc/GMT+11","Etc/GMT+12","Etc/GMT+2" // 376 + ,"Etc/GMT+3","Etc/GMT+4","Etc/GMT+5","Etc/GMT+6","Etc/GMT+7" // 381 + ,"Etc/GMT+8","Etc/GMT+9","Etc/GMT-0","Etc/GMT-1","Etc/GMT-10" // 386 + ,"Etc/GMT-11","Etc/GMT-12","Etc/GMT-13","Etc/GMT-14" // 390 + ,"Etc/GMT-2","Etc/GMT-3","Etc/GMT-4","Etc/GMT-5","Etc/GMT-6" // 395 + ,"Etc/GMT-7","Etc/GMT-8","Etc/GMT-9","Etc/GMT0","Etc/Greenwich" // 400 + ,"Etc/UCT","Etc/UTC","Etc/Universal","Etc/Zulu","Europe/Amsterdam" // 405 + ,"Europe/Andorra","Europe/Athens","Europe/Belfast" // 408 + ,"Europe/Belgrade","Europe/Berlin","Europe/Bratislava" // 411 + ,"Europe/Brussels","Europe/Bucharest","Europe/Budapest" // 414 + ,"Europe/Chisinau","Europe/Copenhagen","Europe/Dublin" // 417 + ,"Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki" // 420 + ,"Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey" // 423 + ,"Europe/Kaliningrad","Europe/Kiev","Europe/Lisbon" // 426 + ,"Europe/Ljubljana","Europe/London","Europe/Luxembourg" // 429 + ,"Europe/Madrid","Europe/Malta","Europe/Mariehamn" // 432 + ,"Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia" // 436 + ,"Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague" // 440 + ,"Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino" // 444 + ,"Europe/Sarajevo","Europe/Simferopol","Europe/Skopje" // 447 + ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 450 + ,"Europe/Tirane","Europe/Tiraspol","Europe/Uzhgorod" // 453 + ,"Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius" // 457 + ,"Europe/Volgograd","Europe/Warsaw","Europe/Zagreb" // 460 + ,"Europe/Zaporozhye","Europe/Zurich","Factory","GB" // 464 + ,"GB-Eire","GMT","GMT+0","GMT-0","GMT0","Greenwich" // 470 + ,"HST","Hongkong","IET","IST","Iceland","Indian/Antananarivo" // 476 + ,"Indian/Chagos","Indian/Christmas","Indian/Cocos" // 479 + ,"Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 483 + ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 486 + ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 492 + ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 498 + ,"Mexico/BajaSur","Mexico/General","Mideast/Riyadh87" // 501 + ,"Mideast/Riyadh88","Mideast/Riyadh89","NET","NST" // 505 + ,"NZ","NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST" // 513 + ,"PST8PDT","Pacific/Apia","Pacific/Auckland","Pacific/Chatham" // 517 + ,"Pacific/Easter","Pacific/Efate","Pacific/Enderbury" // 520 + ,"Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti" // 523 + ,"Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal" // 526 + ,"Pacific/Guam","Pacific/Honolulu","Pacific/Johnston" // 529 + ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 532 + ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 535 + ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 539 + ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 542 + ,"Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga" // 545 + ,"Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti" // 548 + ,"Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk" // 551 + ,"Pacific/Wake","Pacific/Wallis","Pacific/Yap","Poland" // 555 + ,"Portugal","ROC","ROK","SST","Singapore","Turkey" // 561 + ,"UCT","US/Alaska","US/Aleutian","US/Arizona","US/Central" // 566 + ,"US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke" // 570 + ,"US/Michigan","US/Mountain","US/Pacific","US/Pacific-New" // 574 + ,"US/Samoa","UTC","Universal","VST","W-SU","WET","Zulu" // 581 + // 581 } Rules { AN:intvector { - 9, 1, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 + 9, -31, -1, 7200, 1, 2, -31, -1, 7200, 1, 3600 } //_#0 AS:intvector { - 9, 1, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 + 9, -31, -1, 7200, 1, 2, -31, -1, 7200, 1, 3600 } //_#1 AT:intvector { - 9, 1, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 + 9, 1, -1, 7200, 1, 2, -31, -1, 7200, 1, 3600 } //_#2 AV:intvector { - 9, 1, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 + 9, -31, -1, 7200, 1, 2, -31, -1, 7200, 1, 3600 } //_#3 Azer:intvector { 2, -31, -1, 14400, 0, 9, -31, -1, 18000, 0, 3600 } //_#4 Brazil:intvector { - 9, 8, -1, 0, 0, 1, 15, -1, 0, 0, 3600 + 10, 1, -1, 0, 0, 1, -29, -1, 0, 0, 3600 } //_#5 C-Eur:intvector { 2, -31, -1, 7200, 1, 9, -31, -1, 7200, 1, 3600 @@ -2924,7 +2918,7 @@ zoneinfo { 2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 3600 } //_#13 Egypt:intvector { - 3, -30, -6, 0, 1, 7, -31, -5, 82800, 1, 3600 + 3, -30, -6, 0, 1, 8, -30, -5, 82800, 1, 3600 } //_#14 Falk:intvector { 8, 1, -1, 7200, 0, 3, 15, -1, 7200, 0, 3600 @@ -2936,7 +2930,7 @@ zoneinfo { 2, -31, -5, 0, 1, 9, -31, -6, 0, 1, 3600 } //_#17 LH:intvector { - 9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800 + 9, -31, -1, 7200, 0, 2, -31, -1, 7200, 0, 1800 } //_#18 Lebanon:intvector { 2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600 @@ -2948,13 +2942,13 @@ zoneinfo { 8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 } //_#21 NZAQ:intvector { - 8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 + 9, 1, -1, 7200, 1, 2, 15, -1, 7200, 1, 3600 } //_#22 Namibia:intvector { 8, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 3600 } //_#23 Palestine:intvector { - 3, 1, 0, 0, 0, 8, 8, -5, 7200, 0, 3600 + 3, 1, 0, 0, 0, 9, 15, -6, 0, 0, 3600 } //_#24 Para:intvector { 9, 15, -1, 0, 0, 2, 8, -1, 0, 0, 3600 @@ -2988,248 +2982,248 @@ zoneinfo { } //_#34 } Regions { - Default:intvector { 279, 280, 281, 347, 350, 366, 367, 368, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 464, 467, 468, 469, 470, 471, 495, 497, 498, 502, 503, 504, 515, 563, 577, 578, 581, 582 } //R#0 - AD:intvector { 407 } //R#1 - AE:intvector { 242 } //R#2 - AF:intvector { 253 } //R#3 + Default:intvector { 278, 279, 280, 346, 349, 365, 366, 367, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 463, 466, 467, 468, 469, 470, 494, 496, 497, 501, 502, 503, 514, 562, 576, 577, 580, 581 } //R#0 + AD:intvector { 406 } //R#1 + AE:intvector { 241 } //R#2 + AF:intvector { 252 } //R#3 AG:intvector { 61 } //R#4 AI:intvector { 60 } //R#5 - AL:intvector { 452 } //R#6 - AM:intvector { 304, 505 } //R#7 + AL:intvector { 451 } //R#6 + AM:intvector { 303, 504 } //R#7 AN:intvector { 100 } //R#8 AO:intvector { 38 } //R#9 - AQ:intvector { 207, 208, 209, 210, 211, 212, 213, 214, 215, 216 } //R#10 - AR:intvector { 2, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 86, 91, 97, 137, 151, 183 } //R#11 - AS:intvector { 541, 548, 576 } //R#12 - AT:intvector { 457 } //R#13 - AU:intvector { 0, 1, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339 } //R#14 + AQ:intvector { 206, 207, 208, 209, 210, 211, 212, 213, 214, 215 } //R#10 + AR:intvector { 2, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 86, 91, 97, 136, 150, 182 } //R#11 + AS:intvector { 540, 547, 575 } //R#12 + AT:intvector { 456 } //R#13 + AU:intvector { 0, 1, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338 } //R#14 AW:intvector { 74 } //R#15 - AX:intvector { 433 } //R#16 - AZ:intvector { 228 } //R#17 - BA:intvector { 446 } //R#18 + AX:intvector { 432 } //R#16 + AZ:intvector { 227 } //R#17 + BA:intvector { 445 } //R#18 BB:intvector { 79 } //R#19 - BD:intvector { 238, 240, 341 } //R#20 - BE:intvector { 413 } //R#21 + BD:intvector { 237, 239, 340 } //R#20 + BE:intvector { 412 } //R#21 BF:intvector { 51 } //R#22 - BG:intvector { 449 } //R#23 - BH:intvector { 227 } //R#24 + BG:intvector { 448 } //R#23 + BH:intvector { 226 } //R#24 BI:intvector { 17 } //R#25 BJ:intvector { 52 } //R#26 - BM:intvector { 306 } //R#27 - BN:intvector { 232 } //R#28 - BO:intvector { 142 } //R#29 - BR:intvector { 62, 78, 80, 83, 88, 99, 108, 112, 146, 148, 165, 174, 175, 179, 182, 186, 340, 342, 343, 344, 345 } //R#30 - BS:intvector { 161 } //R#31 - BT:intvector { 293, 294 } //R#32 + BM:intvector { 305 } //R#27 + BN:intvector { 231 } //R#28 + BO:intvector { 141 } //R#29 + BR:intvector { 62, 78, 80, 83, 88, 99, 108, 112, 145, 147, 164, 173, 174, 178, 181, 185, 339, 341, 342, 343, 344 } //R#30 + BS:intvector { 160 } //R#31 + BT:intvector { 292, 293 } //R#32 BW:intvector { 28 } //R#33 - BY:intvector { 434 } //R#34 + BY:intvector { 433 } //R#34 BZ:intvector { 81 } //R#35 - CA:intvector { 76, 82, 87, 96, 102, 103, 107, 113, 115, 122, 134, 135, 156, 159, 163, 169, 177, 178, 180, 181, 189, 194, 197, 199, 201, 203, 204, 206, 348, 352, 353, 354, 355, 356, 357, 358, 359, 360 } //R#36 - CC:intvector { 480 } //R#37 + CA:intvector { 76, 82, 87, 96, 102, 103, 107, 113, 115, 122, 133, 134, 155, 158, 162, 168, 176, 177, 179, 180, 188, 193, 196, 198, 200, 202, 203, 205, 347, 351, 352, 353, 354, 355, 356, 357, 358, 359 } //R#36 + CC:intvector { 479 } //R#37 CD:intvector { 34, 39 } //R#38 CF:intvector { 12 } //R#39 CG:intvector { 16 } //R#40 - CH:intvector { 463 } //R#41 + CH:intvector { 462 } //R#41 CI:intvector { 5 } //R#42 - CK:intvector { 546 } //R#43 - CL:intvector { 184, 361, 362, 519 } //R#44 + CK:intvector { 545 } //R#43 + CL:intvector { 183, 360, 361, 518 } //R#44 CM:intvector { 25 } //R#45 - CN:intvector { 235, 236, 245, 256, 286, 299, 351, 512 } //R#46 + CN:intvector { 234, 235, 244, 255, 285, 298, 350, 511 } //R#46 CO:intvector { 84 } //R#47 CR:intvector { 98 } //R#48 - CU:intvector { 123, 363 } //R#49 - CV:intvector { 308 } //R#50 - CX:intvector { 479 } //R#51 - CY:intvector { 268, 437 } //R#52 - CZ:intvector { 441 } //R#53 - DE:intvector { 411 } //R#54 + CU:intvector { 123, 362 } //R#49 + CV:intvector { 307 } //R#50 + CX:intvector { 478 } //R#51 + CY:intvector { 267, 436 } //R#52 + CZ:intvector { 440 } //R#53 + DE:intvector { 410 } //R#54 DJ:intvector { 24 } //R#55 - DK:intvector { 417 } //R#56 + DK:intvector { 416 } //R#56 DM:intvector { 106 } //R#57 - DO:intvector { 185 } //R#58 + DO:intvector { 184 } //R#58 DZ:intvector { 8 } //R#59 - EC:intvector { 120, 525 } //R#60 - EE:intvector { 451 } //R#61 - EG:intvector { 3, 18, 369 } //R#62 + EC:intvector { 120, 524 } //R#60 + EE:intvector { 450 } //R#61 + EG:intvector { 3, 18, 368 } //R#62 EH:intvector { 26 } //R#63 ER:intvector { 9, 10 } //R#64 - ES:intvector { 20, 307, 431 } //R#65 - ET:intvector { 7, 364 } //R#66 - FI:intvector { 421 } //R#67 - FJ:intvector { 523 } //R#68 - FK:intvector { 316 } //R#69 - FM:intvector { 532, 544, 552, 555 } //R#70 - FO:intvector { 309, 310 } //R#71 - FR:intvector { 365, 439 } //R#72 + ES:intvector { 20, 306, 430 } //R#65 + ET:intvector { 7, 363 } //R#66 + FI:intvector { 420 } //R#67 + FJ:intvector { 522 } //R#68 + FK:intvector { 315 } //R#69 + FM:intvector { 531, 543, 551, 554 } //R#70 + FO:intvector { 308, 309 } //R#71 + FR:intvector { 364, 438 } //R#72 GA:intvector { 36 } //R#73 - GB:intvector { 409, 429, 465, 466 } //R#74 + GB:intvector { 408, 428, 464, 465 } //R#74 GD:intvector { 117 } //R#75 - GE:intvector { 290 } //R#76 + GE:intvector { 289 } //R#76 GF:intvector { 92 } //R#77 - GG:intvector { 420 } //R#78 + GG:intvector { 419 } //R#78 GH:intvector { 6 } //R#79 - GI:intvector { 419 } //R#80 - GL:intvector { 101, 114, 187, 196 } //R#81 + GI:intvector { 418 } //R#80 + GL:intvector { 101, 114, 186, 195 } //R#81 GM:intvector { 13 } //R#82 GN:intvector { 21 } //R#83 GP:intvector { 118 } //R#84 GQ:intvector { 41 } //R#85 - GR:intvector { 408 } //R#86 - GS:intvector { 314 } //R#87 + GR:intvector { 407 } //R#86 + GS:intvector { 313 } //R#87 GT:intvector { 119 } //R#88 - GU:intvector { 528 } //R#89 + GU:intvector { 527 } //R#89 GW:intvector { 14 } //R#90 GY:intvector { 121 } //R#91 - HK:intvector { 246, 473 } //R#92 - HN:intvector { 195 } //R#93 - HR:intvector { 461 } //R#94 - HT:intvector { 172 } //R#95 - HU:intvector { 415 } //R#96 - ID:intvector { 250, 251, 265, 273, 296 } //R#97 - IE:intvector { 370, 418 } //R#98 - IL:intvector { 252, 292, 489 } //R#99 - IM:intvector { 422 } //R#100 - IN:intvector { 233, 475 } //R#101 - IO:intvector { 478 } //R#102 - IQ:intvector { 226 } //R#103 - IR:intvector { 291, 488 } //R#104 - IS:intvector { 313, 476 } //R#105 - IT:intvector { 443 } //R#106 - JE:intvector { 424 } //R#107 - JM:intvector { 136, 491 } //R#108 - JO:intvector { 220 } //R#109 - JP:intvector { 295, 490, 492 } //R#110 + HK:intvector { 245, 472 } //R#92 + HN:intvector { 194 } //R#93 + HR:intvector { 460 } //R#94 + HT:intvector { 171 } //R#95 + HU:intvector { 414 } //R#96 + ID:intvector { 249, 250, 264, 272, 295 } //R#97 + IE:intvector { 369, 417 } //R#98 + IL:intvector { 251, 291, 488 } //R#99 + IM:intvector { 421 } //R#100 + IN:intvector { 232, 474 } //R#101 + IO:intvector { 477 } //R#102 + IQ:intvector { 225 } //R#103 + IR:intvector { 290, 487 } //R#104 + IS:intvector { 312, 475 } //R#105 + IT:intvector { 442 } //R#106 + JE:intvector { 423 } //R#107 + JM:intvector { 135, 490 } //R#108 + JO:intvector { 219 } //R#109 + JP:intvector { 294, 489, 491 } //R#110 KE:intvector { 47 } //R#111 - KG:intvector { 231 } //R#112 - KH:intvector { 272 } //R#113 - KI:intvector { 521, 531, 550 } //R#114 - KM:intvector { 481 } //R#115 - KN:intvector { 190 } //R#116 - KP:intvector { 274 } //R#117 - KR:intvector { 285, 559 } //R#118 - KW:intvector { 261 } //R#119 + KG:intvector { 230 } //R#112 + KH:intvector { 271 } //R#113 + KI:intvector { 520, 530, 549 } //R#114 + KM:intvector { 480 } //R#115 + KN:intvector { 189 } //R#116 + KP:intvector { 273 } //R#117 + KR:intvector { 284, 558 } //R#118 + KW:intvector { 260 } //R#119 KY:intvector { 93 } //R#120 - KZ:intvector { 219, 222, 223, 271, 276 } //R#121 - LA:intvector { 300 } //R#122 - LB:intvector { 230 } //R#123 - LC:intvector { 191 } //R#124 - LI:intvector { 455 } //R#125 - LK:intvector { 237 } //R#126 + KZ:intvector { 218, 221, 222, 270, 275 } //R#121 + LA:intvector { 299 } //R#122 + LB:intvector { 229 } //R#123 + LC:intvector { 190 } //R#124 + LI:intvector { 454 } //R#125 + LK:intvector { 236 } //R#126 LR:intvector { 46 } //R#127 LS:intvector { 43 } //R#128 - LT:intvector { 458 } //R#129 - LU:intvector { 430 } //R#130 - LV:intvector { 442 } //R#131 - LY:intvector { 55, 494 } //R#132 + LT:intvector { 457 } //R#129 + LU:intvector { 429 } //R#130 + LV:intvector { 441 } //R#131 + LY:intvector { 55, 493 } //R#132 MA:intvector { 19 } //R#133 - MC:intvector { 435 } //R#134 - MD:intvector { 416, 453 } //R#135 - ME:intvector { 440 } //R#136 - MG:intvector { 477 } //R#137 - MH:intvector { 493, 533, 534 } //R#138 - MK:intvector { 448 } //R#139 + MC:intvector { 434 } //R#134 + MD:intvector { 415, 452 } //R#135 + ME:intvector { 439 } //R#136 + MG:intvector { 476 } //R#137 + MH:intvector { 492, 532, 533 } //R#138 + MK:intvector { 447 } //R#139 ML:intvector { 11, 54 } //R#140 - MM:intvector { 277 } //R#141 - MN:intvector { 234, 247, 297, 298 } //R#142 - MO:intvector { 262, 263 } //R#143 - MP:intvector { 547 } //R#144 - MQ:intvector { 149 } //R#145 + MM:intvector { 276 } //R#141 + MN:intvector { 233, 246, 296, 297 } //R#142 + MO:intvector { 261, 262 } //R#143 + MP:intvector { 546 } //R#144 + MQ:intvector { 148 } //R#145 MR:intvector { 50 } //R#146 - MS:intvector { 160 } //R#147 - MT:intvector { 432 } //R#148 - MU:intvector { 485 } //R#149 - MV:intvector { 484 } //R#150 + MS:intvector { 159 } //R#147 + MT:intvector { 431 } //R#148 + MU:intvector { 484 } //R#149 + MV:intvector { 483 } //R#150 MW:intvector { 15 } //R#151 - MX:intvector { 89, 95, 110, 124, 150, 153, 154, 157, 198, 499, 500, 501 } //R#152 - MY:intvector { 259, 260 } //R#153 + MX:intvector { 89, 95, 110, 124, 149, 152, 153, 156, 197, 498, 499, 500 } //R#152 + MY:intvector { 258, 259 } //R#153 MZ:intvector { 42 } //R#154 NA:intvector { 57 } //R#155 - NC:intvector { 540 } //R#156 + NC:intvector { 539 } //R#156 NE:intvector { 49 } //R#157 - NF:intvector { 539 } //R#158 + NF:intvector { 538 } //R#158 NG:intvector { 35 } //R#159 - NI:intvector { 147 } //R#160 - NL:intvector { 406 } //R#161 - NO:intvector { 438 } //R#162 - NP:intvector { 257 } //R#163 - NR:intvector { 537 } //R#164 - NU:intvector { 538 } //R#165 - NZ:intvector { 506, 507, 508, 517, 518 } //R#166 - OM:intvector { 267 } //R#167 - PA:intvector { 168 } //R#168 - PE:intvector { 143 } //R#169 - PF:intvector { 526, 535, 549 } //R#170 - PG:intvector { 545 } //R#171 - PH:intvector { 266 } //R#172 - PK:intvector { 255, 510 } //R#173 - PL:intvector { 460, 556 } //R#174 - PM:intvector { 155 } //R#175 - PN:intvector { 543 } //R#176 - PR:intvector { 176, 513 } //R#177 - PS:intvector { 244 } //R#178 - PT:intvector { 305, 312, 427, 557 } //R#179 - PW:intvector { 542 } //R#180 + NI:intvector { 146 } //R#160 + NL:intvector { 405 } //R#161 + NO:intvector { 437 } //R#162 + NP:intvector { 256 } //R#163 + NR:intvector { 536 } //R#164 + NU:intvector { 537 } //R#165 + NZ:intvector { 505, 506, 507, 516, 517 } //R#166 + OM:intvector { 266 } //R#167 + PA:intvector { 167 } //R#168 + PE:intvector { 142 } //R#169 + PF:intvector { 525, 534, 548 } //R#170 + PG:intvector { 544 } //R#171 + PH:intvector { 265 } //R#172 + PK:intvector { 254, 509 } //R#173 + PL:intvector { 459, 555 } //R#174 + PM:intvector { 154 } //R#175 + PN:intvector { 542 } //R#176 + PR:intvector { 175, 512 } //R#177 + PS:intvector { 243 } //R#178 + PT:intvector { 304, 311, 426, 556 } //R#179 + PW:intvector { 541 } //R#180 PY:intvector { 75 } //R#181 - QA:intvector { 275 } //R#182 - RE:intvector { 487 } //R#183 - RO:intvector { 414 } //R#184 - RS:intvector { 410 } //R#185 - RU:intvector { 221, 248, 254, 258, 264, 269, 270, 283, 301, 302, 303, 425, 436, 444, 459, 580 } //R#186 + QA:intvector { 274 } //R#182 + RE:intvector { 486 } //R#183 + RO:intvector { 413 } //R#184 + RS:intvector { 409 } //R#185 + RU:intvector { 220, 247, 253, 257, 263, 268, 269, 282, 300, 301, 302, 424, 435, 443, 458, 579 } //R#186 RW:intvector { 33 } //R#187 - SA:intvector { 278 } //R#188 - SB:intvector { 527, 560 } //R#189 - SC:intvector { 483 } //R#190 + SA:intvector { 277 } //R#188 + SB:intvector { 526, 559 } //R#189 + SC:intvector { 482 } //R#190 SD:intvector { 32 } //R#191 - SE:intvector { 450 } //R#192 - SG:intvector { 287, 561 } //R#193 - SH:intvector { 315 } //R#194 - SI:intvector { 428 } //R#195 - SJ:intvector { 217, 311 } //R#196 - SK:intvector { 412 } //R#197 + SE:intvector { 449 } //R#192 + SG:intvector { 286, 560 } //R#193 + SH:intvector { 314 } //R#194 + SI:intvector { 427 } //R#195 + SJ:intvector { 216, 310 } //R#196 + SK:intvector { 411 } //R#197 SL:intvector { 27 } //R#198 - SM:intvector { 445 } //R#199 + SM:intvector { 444 } //R#199 SN:intvector { 22 } //R#200 SO:intvector { 45 } //R#201 - SR:intvector { 170 } //R#202 + SR:intvector { 169 } //R#202 ST:intvector { 53 } //R#203 SV:intvector { 109 } //R#204 - SY:intvector { 239 } //R#205 + SY:intvector { 238 } //R#205 SZ:intvector { 44 } //R#206 TC:intvector { 116 } //R#207 TD:intvector { 48 } //R#208 - TF:intvector { 482 } //R#209 + TF:intvector { 481 } //R#209 TG:intvector { 37 } //R#210 - TH:intvector { 229 } //R#211 - TJ:intvector { 243 } //R#212 - TK:intvector { 522 } //R#213 - TL:intvector { 241 } //R#214 - TM:intvector { 224, 225 } //R#215 + TH:intvector { 228 } //R#211 + TJ:intvector { 242 } //R#212 + TK:intvector { 521 } //R#213 + TL:intvector { 240 } //R#214 + TM:intvector { 223, 224 } //R#215 TN:intvector { 56 } //R#216 - TO:intvector { 551 } //R#217 - TR:intvector { 249, 423, 562 } //R#218 - TT:intvector { 173 } //R#219 - TV:intvector { 524 } //R#220 - TW:intvector { 288, 558 } //R#221 + TO:intvector { 550 } //R#217 + TR:intvector { 248, 422, 561 } //R#218 + TT:intvector { 172 } //R#219 + TV:intvector { 523 } //R#220 + TW:intvector { 287, 557 } //R#221 TZ:intvector { 23 } //R#222 - UA:intvector { 426, 447, 454, 462 } //R#223 + UA:intvector { 425, 446, 453, 461 } //R#223 UG:intvector { 31 } //R#224 - UM:intvector { 530, 536, 553 } //R#225 - US:intvector { 4, 58, 59, 77, 85, 94, 104, 105, 111, 125, 126, 127, 128, 129, 130, 131, 132, 133, 138, 139, 140, 141, 144, 145, 152, 162, 164, 166, 167, 171, 188, 205, 349, 472, 474, 509, 511, 514, 529, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575 } //R#226 - UY:intvector { 158 } //R#227 - UZ:intvector { 284, 289 } //R#228 - VA:intvector { 456 } //R#229 - VC:intvector { 193 } //R#230 + UM:intvector { 529, 535, 552 } //R#225 + US:intvector { 4, 58, 59, 77, 85, 94, 104, 105, 111, 125, 126, 127, 128, 129, 130, 131, 132, 137, 138, 139, 140, 143, 144, 151, 161, 163, 165, 166, 170, 187, 204, 348, 471, 473, 508, 510, 513, 528, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574 } //R#226 + UY:intvector { 157 } //R#227 + UZ:intvector { 283, 288 } //R#228 + VA:intvector { 455 } //R#229 + VC:intvector { 192 } //R#230 VE:intvector { 90 } //R#231 - VG:intvector { 200 } //R#232 - VI:intvector { 192, 202 } //R#233 - VN:intvector { 282, 579 } //R#234 - VU:intvector { 520 } //R#235 - WF:intvector { 554 } //R#236 - WS:intvector { 496, 516 } //R#237 - YE:intvector { 218 } //R#238 - YT:intvector { 486 } //R#239 + VG:intvector { 199 } //R#232 + VI:intvector { 191, 201 } //R#233 + VN:intvector { 281, 578 } //R#234 + VU:intvector { 519 } //R#235 + WF:intvector { 553 } //R#236 + WS:intvector { 495, 515 } //R#237 + YE:intvector { 217 } //R#238 + YT:intvector { 485 } //R#239 ZA:intvector { 30 } //R#240 ZM:intvector { 40 } //R#241 - ZW:intvector { 29, 346 } //R#242 + ZW:intvector { 29, 345 } //R#242 } } diff --git a/icuSources/data/rbnf/ga.txt b/icuSources/data/rbnf/ga.txt index 70b0e99b..ad40a9cf 100644 --- a/icuSources/data/rbnf/ga.txt +++ b/icuSources/data/rbnf/ga.txt @@ -47,7 +47,7 @@ ga { "1,000: <%%thousands<[ >%%cardwithnumber>];\n" "1,000,000: <%%millions<[ >%%cardwithnumber>];\n" "1,000,000,000: <%%billions<[ >%%cardwithnumber>];\n" - "1,000,000,000: <%%trillions<[ >%%cardwithnumber>];\n" + "1,000,000,000,000: <%%trillions<[ >%%cardwithnumber>];\n" "1,000,000,000,000,000: =#,##0=;\n" // rules to give hundreds value diff --git a/icuSources/data/rbnf/he.txt b/icuSources/data/rbnf/he.txt index 8345bc1c..5105b9bf 100644 --- a/icuSources/data/rbnf/he.txt +++ b/icuSources/data/rbnf/he.txt @@ -12,128 +12,279 @@ he { //------------------------------------------------------------ SpelloutRules { - "%masculine_singular_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05df;\n" - "\u05e9\u05e0\u05d9;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9;\n" - "\u05e9\u05d9\u05e9\u05d9;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9;\n" - "11: =%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%masculine_singular_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05df;\n" - "\u05d4\u05e9\u05e0\u05d9;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9;\n" - "11: \u05d4=%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%masculine_plural_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05e0\u05d9\u05dd;\n" + "%%tunits:\n" + "\u05d0\u05e4\u05e1;\n" + "\u05d0\u05d7\u05ea;\n" + "\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05e9\u05dc\u05d5\u05e9\u05ea;\n" + "\u05d0\u05e8\u05d1\u05e2\u05ea;\n" + "\u05d7\u05de\u05e9\u05ea;\n" + "\u05e9\u05e9\u05ea;\n" + "\u05e9\u05d1\u05e2\u05ea;\n" + "\u05e9\u05de\u05d5\u05e0\u05ea;\n" + "\u05ea\u05e9\u05e2\u05ea;\n" + "\u05e2\u05e9\u05e8\u05ea;\n" + "=%masculine=;\n" + "%%txunits:\n" + "\u05d5\u05d0\u05e4\u05e1;\n" + "\u05d5\u05d0\u05d7\u05ea;\n" + "\u05d5\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u05ea;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u05ea;\n" + "\u05d5\u05d7\u05de\u05e9\u05ea;\n" + "\u05d5\u05e9\u05e9\u05ea;\n" + "\u05d5\u05e9\u05d1\u05e2\u05ea;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05ea;\n" + "\u05d5\u05ea\u05e9\u05e2\u05ea;\n" + "\u05d5\u05e2\u05e9\u05e8\u05ea;\n" + "=%%mxunits=;\n" + "%masculine:\n" + "-x: \u05de\u05d9\u05e0\u05d5\u05e1 >>;\n" + "x.x: <%masculine< \u05e0\u05e7\u05d5\u05d3\u05d4 >%%fraction>;\n" + "\u05d0\u05e4\u05e1;\n" + "\u05d0\u05d7\u05d3;\n" "\u05e9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05e9\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9\u05d9\u05dd;\n" - "11: =%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%masculine_plural_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d9\u05dd;\n" - "\u05d4\u05e9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05d9\u05dd;\n" - "11: \u05d4=%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_singular_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4;\n" - "\u05e9\u05e0\u05d9\u05d4;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9\u05ea;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9\u05ea;\n" - "\u05e9\u05d9\u05e9\u05d9\u05ea;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9\u05ea;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9\u05ea;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9\u05ea;\n" - "11: =%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_singular_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4;\n" - "\u05d4\u05e9\u05e0\u05d9\u05d4;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9\u05ea;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9\u05ea;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9\u05ea;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9\u05ea;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05ea;\n" - "11: \u05d4=%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_plural_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05e0\u05d5\u05ea;\n" - "\u05e9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05e9\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9\u05d5\u05ea;\n" - "11: =%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_plural_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d5\u05ea;\n" - "\u05d4\u05e9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05d5\u05ea;\n" - "11: \u05d4=%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%%unwieldy:\n" - "\u05de\u05e1\u05e4\u05e8 =%feminine=;\n" + "\u05e9\u05dc\u05d5\u05e9\u05d4;\n" + "\u05d0\u05e8\u05d1\u05e2\u05d4;\n" + "\u05d7\u05de\u05d9\u05e9\u05d4;\n" + "\u05e9\u05d9\u05e9\u05d4;\n" + "\u05e9\u05d1\u05e2\u05d4;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05ea\u05e9\u05e2\u05d4;\n" + "\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d0\u05d7\u05d3\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05e0\u05d9\u05dd\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05dc\u05d5\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d0\u05e8\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d7\u05de\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05ea\u05e9\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "20: \u05e2\u05e9\u05e8\u05d9\u05dd[ \u05d5>>];\n" + "30: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "40: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "50: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "60: \u05e9\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "70: \u05e9\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "80: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd[ \u05d5>>];\n" + "90: \u05ea\u05e9\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "100: \u05de\u05d0\u05d4[ >%%mxunits>];\n" + "200: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd[ >%%mxunits>];\n" + "300: <%feminine< \u05de\u05d0\u05d5\u05ea[ >%%mxunits>];\n" + "1000: \u05d0\u05dc\u05e3[ >%%mxunits>];\n" + "2000: \u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >%%mxunits>];\n" + "3000: <%%tunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >%%mxunits>];\n" + "11000/1000: << \u05d0\u05dc\u05e3[ >%%mxunits>];\n" + + "1,000,000: \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "2,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "3,000,000: << \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "1,000,000,000: \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%mxunits>];\n" + "2,000,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%mxunits>];\n" + "3,000,000,000: << \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%mxunits>];\n" + "1,000,000,000,000: \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "2,000,000,000,000: \u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "3,000,000,000,000: << \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%%fraction:\n" + "10: <%feminine<<;\n" + "100: <%feminine<<;\n" + "1000: <%feminine<<;\n" + "10,000: <%feminine<<;\n" + "100,000: <%feminine<<;\n" + "1,000,000: <%feminine<<;\n" + "10,000,000: <%feminine<<;\n" + "100,000,000: <%feminine<<;\n" + "1,000,000,000: <%feminine<<;\n" + "10,000,000,000: <#,##0<;\n" + "%%mxunits:\n" + "0:;\n" + "\u05d5\u05d0\u05d7\u05d3;\n" + "\u05d5\u05e9\u05e0\u05d9\u05d9\u05dd;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u05d4;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u05d4;\n" + "\u05d5\u05d7\u05de\u05d9\u05e9\u05d4;\n" + "\u05d5\u05e9\u05d9\u05e9\u05d4;\n" + "\u05d5\u05e9\u05d1\u05e2\u05d4;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05d5\u05ea\u05e9\u05e2\u05d4;\n" + "\u05d5\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05d0\u05d7\u05d3\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05e0\u05d9\u05dd\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05d7\u05de\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05ea\u05e9\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "20: \u05d5\u05e2\u05e9\u05e8\u05d9\u05dd;\n" + "21: \u05e2\u05e9\u05e8\u05d9\u05dd >>;\n" + "30: \u05d5\u05e9\u05dc\u05d5\u05e9\u05d9\u05dd;\n" + "31: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd >>;\n" + "40: \u05d5\u05d0\u05e8\u05d1\u05e2\u05d9\u05dd;\n" + "41: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd >>;\n" + "50: \u05d5\u05d7\u05de\u05d9\u05e9\u05d9\u05dd;\n" + "51: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd >>;\n" + "60: \u05d5\u05e9\u05d9\u05e9\u05d9\u05dd;\n" + "61: \u05e9\u05d9\u05e9\u05d9\u05dd >>;\n" + "70: \u05d5\u05e9\u05d1\u05e2\u05d9\u05dd;\n" + "71: \u05e9\u05d1\u05e2\u05d9\u05dd >>;\n" + "80: \u05d5\u05e9\u05de\u05d5\u05e0\u05d9\u05dd;\n" + "81: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd >>;\n" + "90: \u05d5\u05ea\u05e9\u05e2\u05d9\u05dd;\n" + "91: \u05ea\u05e9\u05e2\u05d9\u05dd >>;\n" + "100: \u05d5\u05de\u05d0\u05d4;\n" + "101: \u05de\u05d0\u05d4 >>;\n" + "200: \u05d5\u05de\u05d0\u05ea\u05d9\u05d9\u05dd;\n" + "201: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd >>;\n" + "300: \u05d5\u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "301: \u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "400: \u05d5\u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "401: \u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "500: \u05d5\u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "501: \u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "600: \u05d5\u05e9\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "601: \u05e9\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "700: \u05d5\u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "701: \u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "800: \u05d5\u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea;\n" + "801: \u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea >>;\n" + "900: \u05d5\u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "901: \u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "1000: \u05d5\u05d0\u05dc\u05e3[ >>];\n" + "2000: \u05d5\u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >>];\n" + "3000: <%%txunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >>];\n" + "11000/1000: << \u05d0\u05dc\u05e3[ >>];\n" + "1,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000: << \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "2,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "3,000,000,000: << \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "1,000,000,000,000: \u05d5\u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000,000,000: << \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%feminine:\n" + "-x: \u05de\u05d9\u05e0\u05d5\u05e1 >>;\n" + "x.x: <%feminine< \u05e0\u05e7\u05d5\u05d3\u05d4 >%%fraction>;\n" + "\u05d0\u05e4\u05e1;\n" + "\u05d0\u05d7\u05ea;\n" + "\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05e9\u05dc\u05d5\u05e9;\n" + "\u05d0\u05e8\u05d1\u05e2;\n" + "\u05d7\u05de\u05e9;\n" + "\u05e9\u05e9;\n" + "\u05e9\u05d1\u05e2;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05ea\u05e9\u05e2;\n" + "\u05e2\u05e9\u05e8;\n" + "\u05d0\u05d7\u05ea\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05ea\u05d9\u05dd\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05dc\u05d5\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d0\u05e8\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d7\u05de\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05ea\u05e9\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "20: \u05e2\u05e9\u05e8\u05d9\u05dd[ \u05d5>>];\n" + "30: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "40: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "50: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "60: \u05e9\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "70: \u05e9\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "80: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd[ \u05d5>>];\n" + "90: \u05ea\u05e9\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "100: \u05de\u05d0\u05d4[ >%%fxunits>];\n" + "200: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd[ >%%fxunits>];\n" + "300: << \u05de\u05d0\u05d5\u05ea[ >%%fxunits>];\n" + "1000: \u05d0\u05dc\u05e3[ >%%fxunits>];\n" + "2000: \u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >%%fxunits>];\n" + "3000: <%%tunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >%%fxunits>];\n" + "11000/1000: <%masculine< \u05d0\u05dc\u05e3[ >%%fxunits>];\n" + "1,000,000: \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "2,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "3,000,000: <%masculine< \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "1,000,000,000: \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%fxunits>];\n" + "2,000,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%fxunits>];\n" + "3,000,000,000: <%masculine< \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%fxunits>];\n" + "1,000,000,000,000: \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "2,000,000,000,000: \u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "3,000,000,000,000: <%masculine< \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%%fxunits:\n" + "0:;\n" + "\u05d5\u05d0\u05d7\u05ea;\n" + "\u05d5\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2;\n" + "\u05d5\u05d7\u05de\u05e9;\n" + "\u05d5\u05e9\u05e9;\n" + "\u05d5\u05e9\u05d1\u05e2;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05d5\u05ea\u05e9\u05e2;\n" + "\u05d5\u05e2\u05e9\u05e8;\n" + "\u05d5\u05d0\u05d7\u05ea\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05ea\u05d9\u05dd\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05d7\u05de\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05ea\u05e9\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "20: \u05d5\u05e2\u05e9\u05e8\u05d9\u05dd;\n" + "21: \u05e2\u05e9\u05e8\u05d9\u05dd >>;\n" + "30: \u05d5\u05e9\u05dc\u05d5\u05e9\u05d9\u05dd;\n" + "31: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd >>;\n" + "40: \u05d5\u05d0\u05e8\u05d1\u05e2\u05d9\u05dd;\n" + "41: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd >>;\n" + "50: \u05d5\u05d7\u05de\u05d9\u05e9\u05d9\u05dd;\n" + "51: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd >>;\n" + "60: \u05d5\u05e9\u05d9\u05e9\u05d9\u05dd;\n" + "61: \u05e9\u05d9\u05e9\u05d9\u05dd >>;\n" + "70: \u05d5\u05e9\u05d1\u05e2\u05d9\u05dd;\n" + "71: \u05e9\u05d1\u05e2\u05d9\u05dd >>;\n" + "80: \u05d5\u05e9\u05de\u05d5\u05e0\u05d9\u05dd;\n" + "81: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd >>;\n" + "90: \u05d5\u05ea\u05e9\u05e2\u05d9\u05dd;\n" + "91: \u05ea\u05e9\u05e2\u05d9\u05dd >>;\n" + "100: \u05d5\u05de\u05d0\u05d4;\n" + "101: \u05de\u05d0\u05d4 >>;\n" + "200: \u05d5\u05de\u05d0\u05ea\u05d9\u05d9\u05dd;\n" + "201: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd >>;\n" + "300: \u05d5\u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "301: \u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "400: \u05d5\u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "401: \u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "500: \u05d5\u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "501: \u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "600: \u05d5\u05e9\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "601: \u05e9\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "700: \u05d5\u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "701: \u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "800: \u05d5\u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea;\n" + "801: \u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea >>;\n" + "900: \u05d5\u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "901: \u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "1000: \u05d5\u05d0\u05dc\u05e3[ >>];\n" + "2000: \u05d5\u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >>];\n" + "3000: <%%txunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >>];\n" + "11000/1000: <%%mxunits< \u05d0\u05dc\u05e3[ >>];\n" + "1,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000: <%%mxunits< \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "2,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "3,000,000,000: <%%mxunits< \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "1,000,000,000,000: \u05d5\u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000,000,000: <%%mxunits< \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%spellout_default:\n" "=%feminine=;\n" } diff --git a/icuSources/data/rbnf/ja.txt b/icuSources/data/rbnf/ja.txt index aaeabc16..26c30441 100644 --- a/icuSources/data/rbnf/ja.txt +++ b/icuSources/data/rbnf/ja.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2004, International Business Machines +// * Copyright (C) 2004-2006, International Business Machines // * Corporation and others. All Rights Reserved. // * // *************************************************************************** @@ -8,47 +8,55 @@ ja { - //------------------------------------------------------------ - // Rule Based Number Format Support - //------------------------------------------------------------ - -// * Spellout rules for Japanese. In Japanese, there really isn't any -// * distinction between a number written out in digits and a number -// * written out in words: the ideographic characters are both digits -// * and words. This rule set provides two variants: %traditional -// * uses the traditional CJK numerals (which are also used in China -// * and Korea). %financial uses alternate ideographs for many numbers -// * that are harder to alter than the traditional numerals (one could -// * fairly easily change a one to -// * a three just by adding two strokes, for example). This is also done in -// * the other countries using Chinese idographs, but different ideographs -// * are used in those places. - - // Can someone supply me with the right fraud-proof ideographs for - // Simplified and Traditional Chinese, and for Korean? Can someone - // supply me with information on negatives and decimals? + // Spellout rules for Japanese. + // + // In Japanese, there really isn't any distinction between a number written + // out in digits and a number written out in words. The kanji are both + // digits and words. This rule set provides two variants: + // + // %traditional + // Traditional CJK numerals for everyday usage. + // + // %financial + // Alternate numerals that are harder to alter than the traditional + // numerals to prevent fraud (e.g. changing a traditional one to a + // three by adding two strokes). Additionally, items that are usually + // dropped or shortened in the traditional form are supplied in full + // (e.g. 128 is 1 x 100, 2 x 10, 8 instead of just 100, 2 x 10, 8). + // + // Note that the Japanese spell out rules, although similar, are different + // to those for Chinese. For instance, Japanese omits powers of ten which + // are zero, however in Chinese they are included. SpelloutRules { "%financial:\n" + "-x: \u30de\u30a4\u30ca\u30b9>>;\n" + "x.x: <<\u70b9>>;\n" "\u96f6; \u58f1; \u5f10; \u53c2; \u56db; \u4f0d; \u516d; \u4e03; \u516b; \u4e5d;\n" - "\u62fe[>>];\n" + "\u62fe; \u62fe[>>];\n" "20: <<\u62fe[>>];\n" "100: <<\u767e[>>];\n" "1000: <<\u5343[>>];\n" - "10,000: <<\u4e07[>>];\n" + "10,000: <<\u842c[>>];\n" "100,000,000: <<\u5104[>>];\n" "1,000,000,000,000: <<\u5146[>>];\n" - "10,000,000,000,000,000: =#,##0=;\n" + "10,000,000,000,000,000: <<\u4eac[>>];\n" + "100,000,000,000,000,000,000: =#,##0=;" "%traditional:\n" - "\u96f6; \u4e00; \u4e8c; \u4e09; \u56db; \u4e94; \u516d; \u4e03; \u516b; \u4e5d;\n" - "\u5341[>>];\n" + "-x: \u30de\u30a4\u30ca\u30b9>>;\n" + "x.x: <<\u30fb>>;\n" + "\u3007; \u4e00; \u4e8c; \u4e09; \u56db; \u4e94; \u516d; \u4e03; \u516b; \u4e5d;\n" + "\u5341; \u5341[>>];\n" "20: <<\u5341[>>];\n" - "100: <<\u767e[>>];\n" - "1000: <<\u5343[>>];\n" + "100: \u767e[>>];\n" + "200: <<\u767e[>>];\n" + "1000: \u5343[>>];\n" + "2000: <<\u5343[>>];\n" "10,000: <<\u4e07[>>];\n" "100,000,000: <<\u5104[>>];\n" "1,000,000,000,000: <<\u5146[>>];\n" - "10,000,000,000,000,000: =#,##0=;" + "10,000,000,000,000,000: <<\u4eac[>>];\n" + "100,000,000,000,000,000,000: =#,##0=;" } } diff --git a/icuSources/data/rbnf/nl.txt b/icuSources/data/rbnf/nl.txt index 3f887f43..23afa37b 100644 --- a/icuSources/data/rbnf/nl.txt +++ b/icuSources/data/rbnf/nl.txt @@ -10,8 +10,7 @@ nl { //------------------------------------------------------------ // Rule Based Number Format Support //------------------------------------------------------------ -// * Spellout rules for Dutch - // can someone supply me with information on negatives and decimals? + SpelloutRules { "-x: min >>;\n" "x.x: << komma >>;\n" @@ -29,9 +28,8 @@ nl { "100: << honderd[ >>];\n" "1000: << duizend[ >>];\n" "1,000,000: << miljoen[ >>];\n" - "1,000,000,000: << biljoen[ >>];\n" - "1,000,000,000,000: << triljoen[ >>];\n" + "1,000,000,000: << miljard[ >>];\n" + "1,000,000,000,000: << biljoen[ >>];\n" "1,000,000,000,000,000: =#,##0=" } - } diff --git a/icuSources/data/rbnf/rbnffiles.mk b/icuSources/data/rbnf/rbnffiles.mk index 61a44e0c..37d1b9f4 100644 --- a/icuSources/data/rbnf/rbnffiles.mk +++ b/icuSources/data/rbnf/rbnffiles.mk @@ -1,4 +1,4 @@ -# * Copyright (C) 1997-2004, International Business Machines +# * Copyright (C) 1997-2005, International Business Machines # * Corporation and others. All Rights Reserved. # A list of txt's to build # Note: diff --git a/icuSources/data/rbnf/rbnflocal.mk b/icuSources/data/rbnf/rbnflocal.mk new file mode 100644 index 00000000..4dbb49cc --- /dev/null +++ b/icuSources/data/rbnf/rbnflocal.mk @@ -0,0 +1,8 @@ +# +# Local Apple addition for locale resources +# Copyright (c) 2005, 2007 Apple Inc. All rights reserved. +# + +# ifeq "$(MINIMAL)" "YES" +# RBNF_SOURCE = en.txt en_GB.txt es.txt fr.txt fr_BE.txt fr_CH.txt +# endif diff --git a/icuSources/data/rbnf/uk.txt b/icuSources/data/rbnf/uk.txt index 43718d24..23dc0e80 100644 --- a/icuSources/data/rbnf/uk.txt +++ b/icuSources/data/rbnf/uk.txt @@ -11,6 +11,8 @@ uk { // How about words for billions and trillions? SpelloutRules { + "-x: \u043C\u0456\u043D\u0443\u0441 >>;\n" + "x.x: << \u043A\u043E\u043C\u0430 >>;\n" "\u043D\u0443\u043B\u044C; \u043E\u0434\u0438\u043D; \u0434\u0432\u0430; \u0442\u0440\u0438; " "\u0447\u043E\u0442\u0438\u0440\u0438; \u043F\u02bc\u044F\u0442\u044C; \u0448\u0456\u0441\u0442\u044C; " "\u0441\u0456\u043C; \u0432\u0456\u0441\u0456\u043C; \u0434\u0435\u0432\u02bc\u044F\u0442\u044C;\n" @@ -47,7 +49,8 @@ uk { "1,000,000: \u043C\u0456\u043B\u044C\u0439\u043E\u043D[ >>];\n" "2,000,000: << \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0438[ >>];\n" "5,000,000: << \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0456\u0432[ >>];\n" - "1,000,000,000: << \u043C\u0456\u043B\u044C\u044F\u0440\u0434[ >>];" + "1,000,000,000: << \u043C\u0456\u043B\u044C\u044F\u0440\u0434[ >>];\n" + "1,000,000,000,000: << \u0442\u0440\u0456\u043B\u043B\u0456\u043E\u043D[ >>];" } } diff --git a/icuSources/data/translit/Any_Accents.txt b/icuSources/data/translit/Any_Accents.txt index fe26c690..163307df 100644 --- a/icuSources/data/translit/Any_Accents.txt +++ b/icuSources/data/translit/Any_Accents.txt @@ -1,20 +1,15 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Any_Accents.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# :: NFD (NFC) ; - -# to do: make reversible - -# define special conversion characters. -# varients of this could use different characters, or set one or the other to null. - $pre = \< ; $post = \> ; - -# Provide keyboard equivalents for common diacritics used in transliteration - $pre \` $post <> \u0300 ; # COMBINING GRAVE ACCENT $pre \' $post <> \u0301 ; # COMBINING ACUTE ACCENT $pre \^ $post <> \u0302 ; # COMBINING CIRCUMFLEX ACCENT @@ -25,266 +20,34 @@ $pre \* $post <> \u030A ; # COMBINING RING ABOVE $pre \, $post <> \u0327 ; # COMBINING CEDILLA $pre '/' $post <> \u0338 ; # COMBINING LONG SOLIDUS OVERLAY $pre \. $post <> \u0323 ; # COMBINING DOT BELOW - -# Combine common characters - -$pre AE $post <> \u00C6 ; # LATIN CAPITAL LETTER AE -$pre ae $post <> \u00E6 ; # LATIN SMALL LETTER AE -$pre D $post <> \u00D0 ; # LATIN CAPITAL LETTER ETH -$pre d $post <> \u00F0 ; # LATIN SMALL LETTER ETH -$pre O'/' $post <> \u00D8 ; # LATIN CAPITAL LETTER O WITH STROKE -$pre o'/' $post <> \u00F8 ; # LATIN SMALL LETTER O WITH STROKE -$pre TH $post <> \u00DE ; # LATIN CAPITAL LETTER THORN -$pre th $post <> \u00FE ; # LATIN SMALL LETTER THORN -$pre OE $post <> \u0152 ; # LATIN CAPITAL LIGATURE OE -$pre oe $post <> \u0153 ; # LATIN SMALL LIGATURE OE - -$pre ss $post <> \u00DF ; # LATIN SMALL LETTER SHARP S - -$pre NG $post <> \u014A ; # LATIN CAPITAL LETTER ENG -$pre ng $post <> \u014B ; # LATIN SMALL LETTER ENG - -$pre T $post <> \u0398 ; # THETA -$pre t $post <> \u03B8 ; # THETA -$pre SH $post <> \u01A9 ; # LATIN CAPITAL LETTER ESH -$pre sh $post <> \u0283 ; # LATIN SMALL LETTER ESH -$pre ZH $post <> \u01B7 ; # LATIN CAPITAL LETTER EZH -$pre zh $post <> \u0292 ; # LATIN SMALL LETTER EZH - -$pre U $post <> \u01B1 ; # LATIN CAPITAL LETTER UPSILON -$pre u $post <> \u028A ; # LATIN SMALL LETTER UPSILON -$pre A $post <> \u018F ; # LATIN CAPITAL LETTER SCHWA -$pre a $post <> \u0259 ; # LATIN SMALL LETTER SCHWA -$pre O $post <> \u0186 ; # LATIN CAPITAL LETTER OPEN O -$pre o $post <> \u0254 ; # LATIN SMALL LETTER OPEN O -$pre E $post <> \u0190 ; # LATIN CAPITAL LETTER OPEN E -$pre e $post <> \u025B ; # LATIN SMALL LETTER OPEN E - -# three that don't have uppercases - -$pre '?' $post <> \u0294 ; # LATIN LETTER GLOTTAL STOP -$pre i $post <> \u026A ; # LATIN LETTER SMALL CAPITAL I -$pre v $post <> \u028C ; # LATIN SMALL LETTER TURNED V - -# Additional Characters that may be added in the future - -# $pre XXX $post <> \u0306 ; # COMBINING BREVE -# $pre XXX $post <> \u0307 ; # COMBINING DOT ABOVE -# $pre XXX $post <> \u0309 ; # COMBINING HOOK ABOVE -# $pre XXX $post <> \u030B ; # COMBINING DOUBLE ACUTE ACCENT -# $pre XXX $post <> \u030C ; # COMBINING CARON -# $pre XXX $post <> \u030F ; # COMBINING DOUBLE GRAVE ACCENT -# $pre XXX $post <> \u0311 ; # COMBINING INVERTED BREVE -# $pre XXX $post <> \u0313 ; # COMBINING COMMA ABOVE -# $pre XXX $post <> \u0314 ; # COMBINING REVERSED COMMA ABOVE -# $pre XXX $post <> \u031B ; # COMBINING HORN -# $pre XXX $post <> \u0324 ; # COMBINING DIAERESIS BELOW -# $pre XXX $post <> \u0325 ; # COMBINING RING BELOW -# $pre XXX $post <> \u0326 ; # COMBINING COMMA BELOW -# $pre XXX $post <> \u0328 ; # COMBINING OGONEK -# $pre XXX $post <> \u032D ; # COMBINING CIRCUMFLEX ACCENT BELOW -# $pre XXX $post <> \u032E ; # COMBINING BREVE BELOW -# $pre XXX $post <> \u0330 ; # COMBINING TILDE BELOW -# $pre XXX $post <> \u0331 ; # COMBINING MACRON BELOW - -# $pre YYY $post <> \u00AA ; # FEMININE ORDINAL INDICATOR -# $pre YYY $post <> \u00BA ; # MASCULINE ORDINAL INDICATOR -# $pre YYY $post <> \u0110 ; # LATIN CAPITAL LETTER D WITH STROKE -# $pre YYY $post <> \u0111 ; # LATIN SMALL LETTER D WITH STROKE -# $pre YYY $post <> \u0126 ; # LATIN CAPITAL LETTER H WITH STROKE -# $pre YYY $post <> \u0127 ; # LATIN SMALL LETTER H WITH STROKE -# $pre YYY $post <> \u0131 ; # LATIN SMALL LETTER DOTLESS I -# $pre YYY $post <> \u0138 ; # LATIN SMALL LETTER KRA -# $pre YYY $post <> \u013F ; # LATIN CAPITAL LETTER L WITH MIDDLE DOT -# $pre YYY $post <> \u0140 ; # LATIN SMALL LETTER L WITH MIDDLE DOT -# $pre YYY $post <> \u0141 ; # LATIN CAPITAL LETTER L WITH STROKE -# $pre YYY $post <> \u0142 ; # LATIN SMALL LETTER L WITH STROKE -# $pre YYY $post <> \u0149 ; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -# $pre YYY $post <> \u0166 ; # LATIN CAPITAL LETTER T WITH STROKE -# $pre YYY $post <> \u0167 ; # LATIN SMALL LETTER T WITH STROKE -# $pre YYY $post <> \u017F ; # LATIN SMALL LETTER LONG S -# $pre YYY $post <> \u0180 ; # LATIN SMALL LETTER B WITH STROKE -# $pre YYY $post <> \u0181 ; # LATIN CAPITAL LETTER B WITH HOOK -# $pre YYY $post <> \u0182 ; # LATIN CAPITAL LETTER B WITH TOPBAR -# $pre YYY $post <> \u0183 ; # LATIN SMALL LETTER B WITH TOPBAR -# $pre YYY $post <> \u0184 ; # LATIN CAPITAL LETTER TONE SIX -# $pre YYY $post <> \u0185 ; # LATIN SMALL LETTER TONE SIX -# $pre YYY $post <> \u0187 ; # LATIN CAPITAL LETTER C WITH HOOK -# $pre YYY $post <> \u0188 ; # LATIN SMALL LETTER C WITH HOOK -# $pre YYY $post <> \u0189 ; # LATIN CAPITAL LETTER AFRICAN D -# $pre YYY $post <> \u018A ; # LATIN CAPITAL LETTER D WITH HOOK -# $pre YYY $post <> \u018B ; # LATIN CAPITAL LETTER D WITH TOPBAR -# $pre YYY $post <> \u018C ; # LATIN SMALL LETTER D WITH TOPBAR -# $pre YYY $post <> \u018D ; # LATIN SMALL LETTER TURNED DELTA -# $pre YYY $post <> \u018E ; # LATIN CAPITAL LETTER REVERSED E -# $pre YYY $post <> \u0191 ; # LATIN CAPITAL LETTER F WITH HOOK -# $pre YYY $post <> \u0192 ; # LATIN SMALL LETTER F WITH HOOK -# $pre YYY $post <> \u0193 ; # LATIN CAPITAL LETTER G WITH HOOK -# $pre YYY $post <> \u0194 ; # LATIN CAPITAL LETTER GAMMA -# $pre YYY $post <> \u0195 ; # LATIN SMALL LETTER HV -# $pre YYY $post <> \u0196 ; # LATIN CAPITAL LETTER IOTA -# $pre YYY $post <> \u0197 ; # LATIN CAPITAL LETTER I WITH STROKE -# $pre YYY $post <> \u0198 ; # LATIN CAPITAL LETTER K WITH HOOK -# $pre YYY $post <> \u0199 ; # LATIN SMALL LETTER K WITH HOOK -# $pre YYY $post <> \u019A ; # LATIN SMALL LETTER L WITH BAR -# $pre YYY $post <> \u019B ; # LATIN SMALL LETTER LAMBDA WITH STROKE -# $pre YYY $post <> \u019C ; # LATIN CAPITAL LETTER TURNED M -# $pre YYY $post <> \u019D ; # LATIN CAPITAL LETTER N WITH LEFT HOOK -# $pre YYY $post <> \u019E ; # LATIN SMALL LETTER N WITH LONG RIGHT LEG -# $pre YYY $post <> \u019F ; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE -# $pre YYY $post <> \u01A2 ; # LATIN CAPITAL LETTER OI -# $pre YYY $post <> \u01A3 ; # LATIN SMALL LETTER OI -# $pre YYY $post <> \u01A4 ; # LATIN CAPITAL LETTER P WITH HOOK -# $pre YYY $post <> \u01A5 ; # LATIN SMALL LETTER P WITH HOOK -# $pre YYY $post <> \u01A6 ; # LATIN LETTER YR -# $pre YYY $post <> \u01A7 ; # LATIN CAPITAL LETTER TONE TWO -# $pre YYY $post <> \u01A8 ; # LATIN SMALL LETTER TONE TWO -# $pre YYY $post <> \u01AA ; # LATIN LETTER REVERSED ESH LOOP -# $pre YYY $post <> \u01AB ; # LATIN SMALL LETTER T WITH PALATAL HOOK -# $pre YYY $post <> \u01AC ; # LATIN CAPITAL LETTER T WITH HOOK -# $pre YYY $post <> \u01AD ; # LATIN SMALL LETTER T WITH HOOK -# $pre YYY $post <> \u01AE ; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK -# $pre YYY $post <> \u01B2 ; # LATIN CAPITAL LETTER V WITH HOOK -# $pre YYY $post <> \u01B3 ; # LATIN CAPITAL LETTER Y WITH HOOK -# $pre YYY $post <> \u01B4 ; # LATIN SMALL LETTER Y WITH HOOK -# $pre YYY $post <> \u01B5 ; # LATIN CAPITAL LETTER Z WITH STROKE -# $pre YYY $post <> \u01B6 ; # LATIN SMALL LETTER Z WITH STROKE -# $pre YYY $post <> \u01B8 ; # LATIN CAPITAL LETTER EZH REVERSED -# $pre YYY $post <> \u01B9 ; # LATIN SMALL LETTER EZH REVERSED -# $pre YYY $post <> \u01BA ; # LATIN SMALL LETTER EZH WITH TAIL -# $pre YYY $post <> \u01BB ; # LATIN LETTER TWO WITH STROKE -# $pre YYY $post <> \u01BC ; # LATIN CAPITAL LETTER TONE FIVE -# $pre YYY $post <> \u01BD ; # LATIN SMALL LETTER TONE FIVE -# $pre YYY $post <> \u01BE ; # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE -# $pre YYY $post <> \u01BF ; # LATIN LETTER WYNN -# $pre YYY $post <> \u01C0 ; # LATIN LETTER DENTAL CLICK -# $pre YYY $post <> \u01C1 ; # LATIN LETTER LATERAL CLICK -# $pre YYY $post <> \u01C2 ; # LATIN LETTER ALVEOLAR CLICK -# $pre YYY $post <> \u01C3 ; # LATIN LETTER RETROFLEX CLICK -# $pre YYY $post <> \u01C4 ; # LATIN CAPITAL LETTER DZ WITH CARON -# $pre YYY $post <> \u01C5 ; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON -# $pre YYY $post <> \u01C6 ; # LATIN SMALL LETTER DZ WITH CARON -# $pre YYY $post <> \u01C7 ; # LATIN CAPITAL LETTER LJ -# $pre YYY $post <> \u01C8 ; # LATIN CAPITAL LETTER L WITH SMALL LETTER J -# $pre YYY $post <> \u01C9 ; # LATIN SMALL LETTER LJ -# $pre YYY $post <> \u01CA ; # LATIN CAPITAL LETTER NJ -# $pre YYY $post <> \u01CB ; # LATIN CAPITAL LETTER N WITH SMALL LETTER J -# $pre YYY $post <> \u01CC ; # LATIN SMALL LETTER NJ -# $pre YYY $post <> \u01DD ; # LATIN SMALL LETTER TURNED E -# $pre YYY $post <> \u01E4 ; # LATIN CAPITAL LETTER G WITH STROKE -# $pre YYY $post <> \u01E5 ; # LATIN SMALL LETTER G WITH STROKE -# $pre YYY $post <> \u01F1 ; # LATIN CAPITAL LETTER DZ -# $pre YYY $post <> \u01F2 ; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z -# $pre YYY $post <> \u01F3 ; # LATIN SMALL LETTER DZ -# $pre YYY $post <> \u01F6 ; # LATIN CAPITAL LETTER HWAIR -# $pre YYY $post <> \u01F7 ; # LATIN CAPITAL LETTER WYNN -# $pre YYY $post <> \u021C ; # LATIN CAPITAL LETTER YOGH -# $pre YYY $post <> \u021D ; # LATIN SMALL LETTER YOGH -# $pre YYY $post <> \u0222 ; # LATIN CAPITAL LETTER OU -# $pre YYY $post <> \u0223 ; # LATIN SMALL LETTER OU -# $pre YYY $post <> \u0224 ; # LATIN CAPITAL LETTER Z WITH HOOK -# $pre YYY $post <> \u0225 ; # LATIN SMALL LETTER Z WITH HOOK -# $pre YYY $post <> \u0250 ; # LATIN SMALL LETTER TURNED A -# $pre YYY $post <> \u0251 ; # LATIN SMALL LETTER ALPHA -# $pre YYY $post <> \u0252 ; # LATIN SMALL LETTER TURNED ALPHA -# $pre YYY $post <> \u0253 ; # LATIN SMALL LETTER B WITH HOOK -# $pre YYY $post <> \u0255 ; # LATIN SMALL LETTER C WITH CURL -# $pre YYY $post <> \u0256 ; # LATIN SMALL LETTER D WITH TAIL -# $pre YYY $post <> \u0257 ; # LATIN SMALL LETTER D WITH HOOK -# $pre YYY $post <> \u0258 ; # LATIN SMALL LETTER REVERSED E -# $pre YYY $post <> \u025A ; # LATIN SMALL LETTER SCHWA WITH HOOK -# $pre YYY $post <> \u025C ; # LATIN SMALL LETTER REVERSED OPEN E -# $pre YYY $post <> \u025D ; # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK -# $pre YYY $post <> \u025E ; # LATIN SMALL LETTER CLOSED REVERSED OPEN E -# $pre YYY $post <> \u025F ; # LATIN SMALL LETTER DOTLESS J WITH STROKE -# $pre YYY $post <> \u0260 ; # LATIN SMALL LETTER G WITH HOOK -# $pre YYY $post <> \u0261 ; # LATIN SMALL LETTER SCRIPT G -# $pre YYY $post <> \u0262 ; # LATIN LETTER SMALL CAPITAL G -# $pre YYY $post <> \u0263 ; # LATIN SMALL LETTER GAMMA -# $pre YYY $post <> \u0264 ; # LATIN SMALL LETTER RAMS HORN -# $pre YYY $post <> \u0265 ; # LATIN SMALL LETTER TURNED H -# $pre YYY $post <> \u0266 ; # LATIN SMALL LETTER H WITH HOOK -# $pre YYY $post <> \u0267 ; # LATIN SMALL LETTER HENG WITH HOOK -# $pre YYY $post <> \u0268 ; # LATIN SMALL LETTER I WITH STROKE -# $pre YYY $post <> \u0269 ; # LATIN SMALL LETTER IOTA -# $pre YYY $post <> \u026B ; # LATIN SMALL LETTER L WITH MIDDLE TILDE -# $pre YYY $post <> \u026C ; # LATIN SMALL LETTER L WITH BELT -# $pre YYY $post <> \u026D ; # LATIN SMALL LETTER L WITH RETROFLEX HOOK -# $pre YYY $post <> \u026E ; # LATIN SMALL LETTER LEZH -# $pre YYY $post <> \u026F ; # LATIN SMALL LETTER TURNED M -# $pre YYY $post <> \u0270 ; # LATIN SMALL LETTER TURNED M WITH LONG LEG -# $pre YYY $post <> \u0271 ; # LATIN SMALL LETTER M WITH HOOK -# $pre YYY $post <> \u0272 ; # LATIN SMALL LETTER N WITH LEFT HOOK -# $pre YYY $post <> \u0273 ; # LATIN SMALL LETTER N WITH RETROFLEX HOOK -# $pre YYY $post <> \u0274 ; # LATIN LETTER SMALL CAPITAL N -# $pre YYY $post <> \u0275 ; # LATIN SMALL LETTER BARRED O -# $pre YYY $post <> \u0276 ; # LATIN LETTER SMALL CAPITAL OE -# $pre YYY $post <> \u0277 ; # LATIN SMALL LETTER CLOSED OMEGA -# $pre YYY $post <> \u0278 ; # LATIN SMALL LETTER PHI -# $pre YYY $post <> \u0279 ; # LATIN SMALL LETTER TURNED R -# $pre YYY $post <> \u027A ; # LATIN SMALL LETTER TURNED R WITH LONG LEG -# $pre YYY $post <> \u027B ; # LATIN SMALL LETTER TURNED R WITH HOOK -# $pre YYY $post <> \u027C ; # LATIN SMALL LETTER R WITH LONG LEG -# $pre YYY $post <> \u027D ; # LATIN SMALL LETTER R WITH TAIL -# $pre YYY $post <> \u027E ; # LATIN SMALL LETTER R WITH FISHHOOK -# $pre YYY $post <> \u027F ; # LATIN SMALL LETTER REVERSED R WITH FISHHOOK -# $pre YYY $post <> \u0280 ; # LATIN LETTER SMALL CAPITAL R -# $pre YYY $post <> \u0281 ; # LATIN LETTER SMALL CAPITAL INVERTED R -# $pre YYY $post <> \u0282 ; # LATIN SMALL LETTER S WITH HOOK -# $pre YYY $post <> \u0284 ; # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK -# $pre YYY $post <> \u0285 ; # LATIN SMALL LETTER SQUAT REVERSED ESH -# $pre YYY $post <> \u0286 ; # LATIN SMALL LETTER ESH WITH CURL -# $pre YYY $post <> \u0287 ; # LATIN SMALL LETTER TURNED T -# $pre YYY $post <> \u0288 ; # LATIN SMALL LETTER T WITH RETROFLEX HOOK -# $pre YYY $post <> \u0289 ; # LATIN SMALL LETTER U BAR -# $pre YYY $post <> \u028B ; # LATIN SMALL LETTER V WITH HOOK -# $pre YYY $post <> \u028D ; # LATIN SMALL LETTER TURNED W -# $pre YYY $post <> \u028E ; # LATIN SMALL LETTER TURNED Y -# $pre YYY $post <> \u028F ; # LATIN LETTER SMALL CAPITAL Y -# $pre YYY $post <> \u0290 ; # LATIN SMALL LETTER Z WITH RETROFLEX HOOK -# $pre YYY $post <> \u0291 ; # LATIN SMALL LETTER Z WITH CURL -# $pre YYY $post <> \u0293 ; # LATIN SMALL LETTER EZH WITH CURL -# $pre YYY $post <> \u0294 ; # LATIN LETTER GLOTTAL STOP -# $pre YYY $post <> \u0295 ; # LATIN LETTER PHARYNGEAL VOICED FRICATIVE -# $pre YYY $post <> \u0296 ; # LATIN LETTER INVERTED GLOTTAL STOP -# $pre YYY $post <> \u0297 ; # LATIN LETTER STRETCHED C -# $pre YYY $post <> \u0298 ; # LATIN LETTER BILABIAL CLICK -# $pre YYY $post <> \u0299 ; # LATIN LETTER SMALL CAPITAL B -# $pre YYY $post <> \u029A ; # LATIN SMALL LETTER CLOSED OPEN E -# $pre YYY $post <> \u029B ; # LATIN LETTER SMALL CAPITAL G WITH HOOK -# $pre YYY $post <> \u029C ; # LATIN LETTER SMALL CAPITAL H -# $pre YYY $post <> \u029D ; # LATIN SMALL LETTER J WITH CROSSED-TAIL -# $pre YYY $post <> \u029E ; # LATIN SMALL LETTER TURNED K -# $pre YYY $post <> \u029F ; # LATIN LETTER SMALL CAPITAL L -# $pre YYY $post <> \u02A0 ; # LATIN SMALL LETTER Q WITH HOOK -# $pre YYY $post <> \u02A1 ; # LATIN LETTER GLOTTAL STOP WITH STROKE -# $pre YYY $post <> \u02A2 ; # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE -# $pre YYY $post <> \u02A3 ; # LATIN SMALL LETTER DZ DIGRAPH -# $pre YYY $post <> \u02A4 ; # LATIN SMALL LETTER DEZH DIGRAPH -# $pre YYY $post <> \u02A5 ; # LATIN SMALL LETTER DZ DIGRAPH WITH CURL -# $pre YYY $post <> \u02A6 ; # LATIN SMALL LETTER TS DIGRAPH -# $pre YYY $post <> \u02A7 ; # LATIN SMALL LETTER TESH DIGRAPH -# $pre YYY $post <> \u02A8 ; # LATIN SMALL LETTER TC DIGRAPH WITH CURL -# $pre YYY $post <> \u02A9 ; # LATIN SMALL LETTER FENG DIGRAPH -# $pre YYY $post <> \u02AA ; # LATIN SMALL LETTER LS DIGRAPH -# $pre YYY $post <> \u02AB ; # LATIN SMALL LETTER LZ DIGRAPH -# $pre YYY $post <> \u02AC ; # LATIN LETTER BILABIAL PERCUSSIVE -# $pre YYY $post <> \u02AD ; # LATIN LETTER BIDENTAL PERCUSSIVE -# $pre YYY $post <> \u02B0 ; # MODIFIER LETTER SMALL H -# $pre YYY $post <> \u02B1 ; # MODIFIER LETTER SMALL H WITH HOOK -# $pre YYY $post <> \u02B2 ; # MODIFIER LETTER SMALL J -# $pre YYY $post <> \u02B3 ; # MODIFIER LETTER SMALL R -# $pre YYY $post <> \u02B4 ; # MODIFIER LETTER SMALL TURNED R -# $pre YYY $post <> \u02B5 ; # MODIFIER LETTER SMALL TURNED R WITH HOOK -# $pre YYY $post <> \u02B6 ; # MODIFIER LETTER SMALL CAPITAL INVERTED R -# $pre YYY $post <> \u02B7 ; # MODIFIER LETTER SMALL W -# $pre YYY $post <> \u02B8 ; # MODIFIER LETTER SMALL Y -# $pre YYY $post <> \u02E0 ; # MODIFIER LETTER SMALL GAMMA -# $pre YYY $post <> \u02E1 ; # MODIFIER LETTER SMALL L -# $pre YYY $post <> \u02E2 ; # MODIFIER LETTER SMALL S -# $pre YYY $post <> \u02E3 ; # MODIFIER LETTER SMALL X -# $pre YYY $post <> \u02E4 ; # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -# $pre YYY $post <> \u1E9A ; # LATIN SMALL LETTER A WITH RIGHT HALF RING -# $pre YYY $post <> \u207F ; # SUPERSCRIPT LATIN SMALL LETTER N - -:: NFC (NFD) ; \ No newline at end of file +$pre AE $post <> Æ ; # LATIN CAPITAL LETTER AE +$pre ae $post <> æ ; # LATIN SMALL LETTER AE +$pre D $post <> Ð ; # LATIN CAPITAL LETTER ETH +$pre d $post <> ð ; # LATIN SMALL LETTER ETH +$pre O'/' $post <> Ø ; # LATIN CAPITAL LETTER O WITH STROKE +$pre o'/' $post <> ø ; # LATIN SMALL LETTER O WITH STROKE +$pre TH $post <> Þ ; # LATIN CAPITAL LETTER THORN +$pre th $post <> þ ; # LATIN SMALL LETTER THORN +$pre OE $post <> Œ ; # LATIN CAPITAL LIGATURE OE +$pre oe $post <> œ ; # LATIN SMALL LIGATURE OE +$pre ss $post <> ß ; # LATIN SMALL LETTER SHARP S +$pre NG $post <> Ŋ ; # LATIN CAPITAL LETTER ENG +$pre ng $post <> ŋ ; # LATIN SMALL LETTER ENG +$pre T $post <> Θ ; # THETA +$pre t $post <> θ ; # THETA +$pre SH $post <> Æ© ; # LATIN CAPITAL LETTER ESH +$pre sh $post <> ʃ ; # LATIN SMALL LETTER ESH +$pre ZH $post <> Æ· ; # LATIN CAPITAL LETTER EZH +$pre zh $post <> ʒ ; # LATIN SMALL LETTER EZH +$pre U $post <> Ʊ ; # LATIN CAPITAL LETTER UPSILON +$pre u $post <> ʊ ; # LATIN SMALL LETTER UPSILON +$pre A $post <> Ə ; # LATIN CAPITAL LETTER SCHWA +$pre a $post <> ə ; # LATIN SMALL LETTER SCHWA +$pre O $post <> Ɔ ; # LATIN CAPITAL LETTER OPEN O +$pre o $post <> ɔ ; # LATIN SMALL LETTER OPEN O +$pre E $post <> Ɛ ; # LATIN CAPITAL LETTER OPEN E +$pre e $post <> ɛ ; # LATIN SMALL LETTER OPEN E +$pre '?' $post <> ʔ ; # LATIN LETTER GLOTTAL STOP +$pre i $post <> ɪ ; # LATIN LETTER SMALL CAPITAL I +$pre v $post <> ʌ ; # LATIN SMALL LETTER TURNED V +:: NFC (NFD) ; diff --git a/icuSources/data/translit/Any_Publishing.txt b/icuSources/data/translit/Any_Publishing.txt index 5e3c36b2..9f81395f 100644 --- a/icuSources/data/translit/Any_Publishing.txt +++ b/icuSources/data/translit/Any_Publishing.txt @@ -1,34 +1,23 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Test case -# "The" "(quick)" ('brown') `fox' ` jumped -- "over?" - -# Variables - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Any_Publishing.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# $single = \' ; $space = ' ' ; $double = \" ; $back = \` ; $tab = '\u0008' ; $makeRight = [[:Z:][:Ps:][:Pi:]$] ; - -# fix UNIX quotes - $back $back > “ ; $back > ‘ ; - -# fix typewriter quotes, by context - $makeRight {$double} <> “ ; $double <> ” ; - $makeRight {$single} <> ‘ ; $single <> ’; - -# fix multiple spaces and hyphens - $space {$space} > ; '--' <> — ; diff --git a/icuSources/data/translit/Arabic_Latin.txt b/icuSources/data/translit/Arabic_Latin.txt index 3b8cdcf0..dec58da8 100644 --- a/icuSources/data/translit/Arabic_Latin.txt +++ b/icuSources/data/translit/Arabic_Latin.txt @@ -1,146 +1,107 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Generally follows UNGEGN -# Occasionally deviates in the direction of ISO 233 -# a) where required for disambiguation. -# b) with underdot instead of cedilla for letter like SAD, since -# those are explicitly in Unicode for transliteration. -# c) with extra non-Arabic-language letters, like PEH - -# Does *not* do assimilation of "al", nor hyphenation. -# While it could be done, we need to determine whether a prefix "al" could -# occur other than as the definite article (since no space is used). - -:: [[:Arabic:] [‎ⁿ\u060C\u061B\u061F\u0640\u064B-\u0655\u0660-\u066C\u06F0-\u06F9\uFDFC]] ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Arabic_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +:: [[:Arabic:] [‎ⁿ،؛؟ـ\u064B-\u0655Ù -Ù¬Û°-۹﷼ښ]] ; :: NFKD (NFC); -$disambig = ̱ ; -$disambig2 = Ì° ; -$under = Ì£ ; - +$disambig = \u0331 ; +$disambig2 = \u0330 ; +$under = \u0323 ; +$descender = ˌ; $notAbove = [[:^ccc=0:]&[:^ccc=230:]]; - -# non-letters - - Ù« <> '.' $disambig ; # ARABIC DECIMAL SEPARATOR - Ù¬ <> ',' $disambig ; # ARABIC THOUSANDS SEPARATOR -# Ù­ <> ; # ARABIC FIVE POINTED STAR // no need to transliterate - +Ù« <> '.' $disambig ; # ARABIC DECIMAL SEPARATOR +Ù¬ <> ',' $disambig ; # ARABIC THOUSANDS SEPARATOR ، <> ',' ; # ARABIC COMMA - ؛ <> ';' ; # ARABIC SEMICOLON - ؟ <> '?' ; # ARABIC QUESTION MARK - Ùª <> '%' ; # ARABIC PERCENT SIGN - - Û° <> 0 $disambig ; # EXTENDED ARABIC-INDIC DIGIT ZERO - Û± <> 1 $disambig ; # EXTENDED ARABIC-INDIC DIGIT ONE - Û² <> 2 $disambig ; # EXTENDED ARABIC-INDIC DIGIT TWO - Û³ <> 3 $disambig ; # EXTENDED ARABIC-INDIC DIGIT THREE - Û´ <> 4 $disambig ; # EXTENDED ARABIC-INDIC DIGIT FOUR - Ûµ <> 5 $disambig ; # EXTENDED ARABIC-INDIC DIGIT FIVE - Û¶ <> 6 $disambig ; # EXTENDED ARABIC-INDIC DIGIT SIX - Û· <> 7 $disambig ; # EXTENDED ARABIC-INDIC DIGIT SEVEN - Û¸ <> 8 $disambig ; # EXTENDED ARABIC-INDIC DIGIT EIGHT - Û¹ <> 9 $disambig ; # EXTENDED ARABIC-INDIC DIGIT NINE - - Ù  <> 0 ; # ARABIC-INDIC DIGIT ZERO - Ù¡ <> 1 ; # ARABIC-INDIC DIGIT ONE - Ù¢ <> 2 ; # ARABIC-INDIC DIGIT TWO - Ù£ <> 3 ; # ARABIC-INDIC DIGIT THREE - Ù¤ <> 4 ; # ARABIC-INDIC DIGIT FOUR - Ù¥ <> 5 ; # ARABIC-INDIC DIGIT FIVE - Ù¦ <> 6 ; # ARABIC-INDIC DIGIT SIX - Ù§ <> 7 ; # ARABIC-INDIC DIGIT SEVEN - Ù¨ <> 8 ; # ARABIC-INDIC DIGIT EIGHT - Ù© <> 9 ; # ARABIC-INDIC DIGIT NINE - -# letters - -# long vowels - َا<> ā ; # ARABIC FATHA, ARABIC LETTER ALEF - ُو <> ū ; # ARABIC DAMMA, ARABIC LETTER WAW - ِي <> ī ; # ARABIC KASRA, ARABIC LETTER YEH - -# longer items moved here to prevent masking - Ø« <> t h $disambig ; # ARABIC LETTER THEH - Ø° <> d h $disambig ; # ARABIC LETTER THAL - Ø´ <> s h $disambig ; # ARABIC LETTER SHEEN - ص <> s $under ; # ARABIC LETTER SAD - ض <> d $under ; # ARABIC LETTER DAD - Ø· <> t $under ; # ARABIC LETTER TAH - ظ <> z $under ; # ARABIC LETTER ZAH - غ <> g h $disambig ; # ARABIC LETTER GHAIN - -# WARNING: special case -# will be canonically ordered as -# so on the return, we have to skip over (but preserve) the half-ring below (or others like it) -# ةٕ < ẗ̹ ; # LATIN SMALL LETTER T, COMBINING RIGHT HALF RING BELOW, COMBINING DIAERESIS - - Ø© <> t \u0308 ; # ARABIC LETTER TEH MARBUTA - Ø© | $1 < t ($notAbove+) \u0308 ; # ARABIC LETTER TEH MARBUTA - -# non-Arabic language - ژ <> z h $disambig ; # ARABIC LETTER JEH - Ú­ <> n $disambig g ; # ARABIC LETTER NG - ۋ <> v $disambig ; # ARABIC LETTER VE - ی <> y $disambig2 ; # ARABIC LETTER FARSI YEH - -# Arabic language - - Ø¡ <> ʾ ; # ARABIC LETTER HAMZA - ا <> a $under; # ARABIC LETTER ALEF - ب <> b ; # ARABIC LETTER BEH - ت <> t ; # ARABIC LETTER TEH - ج <> j ; # ARABIC LETTER JEEM - Ø­ <> h $under ; # ARABIC LETTER HAH - Ø® <> k h $disambig ; # ARABIC LETTER KHAH - د <> d ; # ARABIC LETTER DAL - ر <> r ; # ARABIC LETTER REH - ز <> z ; # ARABIC LETTER ZAIN - س <> s ; # ARABIC LETTER SEEN - ع <> Ê¿ ; # ARABIC LETTER AIN - ـ > ; # ARABIC TATWEEL - ف <> f ; # ARABIC LETTER FEH - ق <> q ; # ARABIC LETTER QAF - ك <> k ; # ARABIC LETTER KAF - ل <> l ; # ARABIC LETTER LAM - م <> m ; # ARABIC LETTER MEEM - ن <> n ; # ARABIC LETTER NOON - ه <> h ; # ARABIC LETTER HEH - و <> w ; # ARABIC LETTER WAW - ى <> y $disambig ; # ARABIC LETTER ALEF MAKSURA - ي <> y ; # ARABIC LETTER YEH - ً <> aⁿ ; # ARABIC FATHATAN - ٌ <> uⁿ ; # ARABIC DAMMATAN - ٍ <> iⁿ ; # ARABIC KASRATAN - َ <> a ; # ARABIC FATHA - ُ <> u ; # ARABIC DAMMA - ِ <> i ; # ARABIC KASRA - ّ <> ̃ ; # ARABIC SHADDA - ْ <> ̊ ; # ARABIC SUKUN - -# special combining marks - ٓ <> ̂ ; # ARABIC MADDAH ABOVE - ٔ <> ̉ ; # ARABIC HAMZA ABOVE - ٕ <> ̹ ; # ARABIC HAMZA BELOW - -# Some non-Arabic language (not in UNGEGN) - Ù¾ <> p ; # ARABIC LETTER PEH - چ <> c h $disambig ; # ARABIC LETTER TCHEH - Ú¤ <> v ; # ARABIC LETTER VEH -# Ú¥ <> v $disambig ; # ARABIC LETTER FEH WITH THREE DOTS BELOW -# Ú¢ <> f $disambig ; # ARABIC LETTER FEH WITH DOT MOVED BELOW - Ú¯ <> g ; # ARABIC LETTER GAF - -# fallbacks +؛ <> ';' ; # ARABIC SEMICOLON +؟ <> '?' ; # ARABIC QUESTION MARK +Ùª <> '%' ; # ARABIC PERCENT SIGN +Û° <> 0 $disambig ; # EXTENDED ARABIC-INDIC DIGIT ZERO +Û± <> 1 $disambig ; # EXTENDED ARABIC-INDIC DIGIT ONE +Û² <> 2 $disambig ; # EXTENDED ARABIC-INDIC DIGIT TWO +Û³ <> 3 $disambig ; # EXTENDED ARABIC-INDIC DIGIT THREE +Û´ <> 4 $disambig ; # EXTENDED ARABIC-INDIC DIGIT FOUR +Ûµ <> 5 $disambig ; # EXTENDED ARABIC-INDIC DIGIT FIVE +Û¶ <> 6 $disambig ; # EXTENDED ARABIC-INDIC DIGIT SIX +Û· <> 7 $disambig ; # EXTENDED ARABIC-INDIC DIGIT SEVEN +Û¸ <> 8 $disambig ; # EXTENDED ARABIC-INDIC DIGIT EIGHT +Û¹ <> 9 $disambig ; # EXTENDED ARABIC-INDIC DIGIT NINE +Ù  <> 0 ; # ARABIC-INDIC DIGIT ZERO +Ù¡ <> 1 ; # ARABIC-INDIC DIGIT ONE +Ù¢ <> 2 ; # ARABIC-INDIC DIGIT TWO +Ù£ <> 3 ; # ARABIC-INDIC DIGIT THREE +Ù¤ <> 4 ; # ARABIC-INDIC DIGIT FOUR +Ù¥ <> 5 ; # ARABIC-INDIC DIGIT FIVE +Ù¦ <> 6 ; # ARABIC-INDIC DIGIT SIX +Ù§ <> 7 ; # ARABIC-INDIC DIGIT SEVEN +Ù¨ <> 8 ; # ARABIC-INDIC DIGIT EIGHT +Ù© <> 9 ; # ARABIC-INDIC DIGIT NINE +\u064Eا<> a\u0304 ; # ARABIC FATHA, ARABIC LETTER ALEF +\u064Fو <> u\u0304 ; # ARABIC DAMMA, ARABIC LETTER WAW +\u0650ي <> i\u0304 ; # ARABIC KASRA, ARABIC LETTER YEH +Ø« <> t h $disambig ; # ARABIC LETTER THEH +Ø° <> d h $disambig ; # ARABIC LETTER THAL +Ø´ <> s h $disambig ; # ARABIC LETTER SHEEN +ص <> s $under ; # ARABIC LETTER SAD +ض <> d $under ; # ARABIC LETTER DAD +Ø· <> t $under ; # ARABIC LETTER TAH +ظ <> z $under ; # ARABIC LETTER ZAH +غ <> g h $disambig ; # ARABIC LETTER GHAIN +Ø© <> t \u0308 ; # ARABIC LETTER TEH MARBUTA +Ø© | $1 < t ($notAbove+) \u0308 ; # ARABIC LETTER TEH MARBUTA +ژ <> z h $disambig ; # ARABIC LETTER JEH +Ú­ <> n $disambig g ; # ARABIC LETTER NG +ۋ <> v $disambig ; # ARABIC LETTER VE +ی <> y $disambig2 ; # ARABIC LETTER FARSI YEH +ښ <> s $descender; +Ø¡ <> ʾ ; # ARABIC LETTER HAMZA +ا <> a $under; # ARABIC LETTER ALEF +ب <> b ; # ARABIC LETTER BEH +ت <> t ; # ARABIC LETTER TEH +ج <> j ; # ARABIC LETTER JEEM +Ø­ <> h $under ; # ARABIC LETTER HAH +Ø® <> k h $disambig ; # ARABIC LETTER KHAH +د <> d ; # ARABIC LETTER DAL +ر <> r ; # ARABIC LETTER REH +ز <> z ; # ARABIC LETTER ZAIN +س <> s ; # ARABIC LETTER SEEN +ع <> Ê¿ ; # ARABIC LETTER AIN +ـ > ; # ARABIC TATWEEL +ف <> f ; # ARABIC LETTER FEH +ق <> q ; # ARABIC LETTER QAF +ك <> k ; # ARABIC LETTER KAF +ل <> l ; # ARABIC LETTER LAM +م <> m ; # ARABIC LETTER MEEM +ن <> n ; # ARABIC LETTER NOON +ه <> h ; # ARABIC LETTER HEH +و <> w ; # ARABIC LETTER WAW +ى <> y $disambig ; # ARABIC LETTER ALEF MAKSURA +ي <> y ; # ARABIC LETTER YEH +\u064B <> aⁿ ; # ARABIC FATHATAN +\u064C <> uⁿ ; # ARABIC DAMMATAN +\u064D <> iⁿ ; # ARABIC KASRATAN +\u064E <> a ; # ARABIC FATHA +\u064F <> u ; # ARABIC DAMMA +\u0650 <> i ; # ARABIC KASRA +\u0651 <> \u0303 ; # ARABIC SHADDA +\u0652 <> \u030A ; # ARABIC SUKUN +\u0653 <> \u0302 ; # ARABIC MADDAH ABOVE +\u0654 <> \u0309 ; # ARABIC HAMZA ABOVE +\u0655 <> \u0339 ; # ARABIC HAMZA BELOW +Ù¾ <> p ; # ARABIC LETTER PEH +چ <> c h $disambig ; # ARABIC LETTER TCHEH +Ú¤ <> v ; # ARABIC LETTER VEH +Ú¯ <> g ; # ARABIC LETTER GAF | s < c } [eiy]; | k < c ; | i < e ; | u < o ; | ks < x ; | n < ‎ⁿ; - :: (lower) ; ::NFC (NFD); -:: ( [[:Latin:] [%,.0-9;?\u02BE-\u02BF\u0302-\u0304\u0308-\u030A\u0323\u0330-\u0331\u0339\u037E]] ); \ No newline at end of file +:: ( [[:Latin:] [%,.0-9;?ʾ-Ê¿\u0302-\u0304\u0308-\u030A\u0323\u0330-\u0331\u0339;ˌ]] ); diff --git a/icuSources/data/translit/Bengali_Devanagari.txt b/icuSources/data/translit/Bengali_Devanagari.txt new file mode 100644 index 00000000..737da179 --- /dev/null +++ b/icuSources/data/translit/Bengali_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Bengali_Gujarati.txt b/icuSources/data/translit/Bengali_Gujarati.txt new file mode 100644 index 00000000..07592838 --- /dev/null +++ b/icuSources/data/translit/Bengali_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Bengali_Gurmukhi.txt b/icuSources/data/translit/Bengali_Gurmukhi.txt new file mode 100644 index 00000000..096fc0b2 --- /dev/null +++ b/icuSources/data/translit/Bengali_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Bengali_InterIndic.txt b/icuSources/data/translit/Bengali_InterIndic.txt index fed1236a..6409a5e8 100644 --- a/icuSources/data/translit/Bengali_InterIndic.txt +++ b/icuSources/data/translit/Bengali_InterIndic.txt @@ -1,103 +1,101 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Bengali-InterIndic - -\u09C7\u09BE>\uE04B; # VOWEL SIGN O -\u09C7\u09D7>\uE04C; # VOWEL SIGN AU +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +ো>\uE04B; # VOWEL SIGN O +ৌ>\uE04C; # VOWEL SIGN AU \u0981>\uE001; # SIGN CANDRABINDU -\u0982>\uE002; # SIGN ANUSVARA -\u0983>\uE003; # SIGN VISARGA -\u0985>\uE005; # LETTER A -\u0986>\uE006; # LETTER AA -\u0987>\uE007; # LETTER I -\u0988>\uE008; # LETTER II -\u0989>\uE009; # LETTER U -\u098A>\uE00A; # LETTER UU -\u098B>\uE00B; # LETTER VOCALIC R -\u098C>\uE00C; # LETTER VOCALIC L -\u098F>\uE00F; # LETTER E -\u0990>\uE010; # LETTER AI -\u0993>\uE013; # LETTER O -\u0994>\uE014; # LETTER AU -\u0995>\uE015; # LETTER KA -\u0996>\uE016; # LETTER KHA -\u0997>\uE017; # LETTER GA -\u0998>\uE018; # LETTER GHA -\u0999>\uE019; # LETTER NGA -\u099A>\uE01A; # LETTER CA -\u099B>\uE01B; # LETTER CHA -\u099C>\uE01C; # LETTER JA -\u099D>\uE01D; # LETTER JHA -\u099E>\uE01E; # LETTER NYA -\u099F>\uE01F; # LETTER TTA -\u09A0>\uE020; # LETTER TTHA -\u09A1>\uE021; # LETTER DDA -\u09A2>\uE022; # LETTER DDHA -\u09A3>\uE023; # LETTER NNA -\u09A4>\uE024; # LETTER TA -\u09A5>\uE025; # LETTER THA -\u09A6>\uE026; # LETTER DA -\u09A7>\uE027; # LETTER DHA -\u09A8>\uE028; # LETTER NA -\u09AA>\uE02A; # LETTER PA -\u09AB>\uE02B; # LETTER PHA -\u09AC>\uE02C; # LETTER BA -\u09AD>\uE02D; # LETTER BHA -\u09AE>\uE02E; # LETTER MA -\u09AF>\uE02F; # LETTER YA -\u09B0>\uE030; # LETTER RA -\u09B2>\uE032; # LETTER LA -\u09B6>\uE036; # LETTER SHA -\u09B7>\uE037; # LETTER SSA -\u09B8>\uE038; # LETTER SA -\u09B9>\uE039; # LETTER HA +ং>\uE002; # SIGN ANUSVARA +ঃ>\uE003; # SIGN VISARGA +অ>\uE005; # LETTER A +আ>\uE006; # LETTER AA +ই>\uE007; # LETTER I +ঈ>\uE008; # LETTER II +উ>\uE009; # LETTER U +ঊ>\uE00A; # LETTER UU +ঋ>\uE00B; # LETTER VOCALIC R +ঌ>\uE00C; # LETTER VOCALIC L +এ>\uE00F; # LETTER E +ঐ>\uE010; # LETTER AI +ও>\uE013; # LETTER O +ঔ>\uE014; # LETTER AU +ক>\uE015; # LETTER KA +খ>\uE016; # LETTER KHA +গ>\uE017; # LETTER GA +ঘ>\uE018; # LETTER GHA +ঙ>\uE019; # LETTER NGA +চ>\uE01A; # LETTER CA +ছ>\uE01B; # LETTER CHA +জ>\uE01C; # LETTER JA +ঝ>\uE01D; # LETTER JHA +ঞ>\uE01E; # LETTER NYA +ট>\uE01F; # LETTER TTA +ঠ>\uE020; # LETTER TTHA +ড>\uE021; # LETTER DDA +ঢ>\uE022; # LETTER DDHA +ণ>\uE023; # LETTER NNA +ত>\uE024; # LETTER TA +থ>\uE025; # LETTER THA +দ>\uE026; # LETTER DA +ধ>\uE027; # LETTER DHA +ন>\uE028; # LETTER NA +প>\uE02A; # LETTER PA +ফ>\uE02B; # LETTER PHA +ব>\uE02C; # LETTER BA +ভ>\uE02D; # LETTER BHA +ম>\uE02E; # LETTER MA +য>\uE02F; # LETTER YA +র>\uE030; # LETTER RA +ল>\uE032; # LETTER LA +শ>\uE036; # LETTER SHA +ষ>\uE037; # LETTER SSA +স>\uE038; # LETTER SA +হ>\uE039; # LETTER HA \u09BC>\uE03C; # SIGN NUKTA -\u09BD>\uE03D; # SIGN AVAGRAHA -\u09BE>\uE03E; # VOWEL SIGN AA -\u09BF>\uE03F; # VOWEL SIGN I -\u09C0>\uE040; # VOWEL SIGN II +ঽ>\uE03D; # SIGN AVAGRAHA +া>\uE03E; # VOWEL SIGN AA +ি>\uE03F; # VOWEL SIGN I +ী>\uE040; # VOWEL SIGN II \u09C1>\uE041; # VOWEL SIGN U \u09C2>\uE042; # VOWEL SIGN UU \u09C3>\uE043; # VOWEL SIGN VOCALIC R \u09C4>\uE044; # VOWEL SIGN VOCALIC RR -\u09C7>\uE047; # VOWEL SIGN E -\u09C8>\uE048; # VOWEL SIGN AI -\u09CB>\uE04B; -\u09CC>\uE04C; -# +ে>\uE047; # VOWEL SIGN E +ৈ>\uE048; # VOWEL SIGN AI +ো>\uE04B; +ৌ>\uE04C; \u09CD>\uE04D; # SIGN VIRAMA -\u09D7>\uE057; # AU LENGTH MARK -# -\u09E0>\uE060; # LETTER VOCALIC RR -\u09E1>\uE061; # LETTER VOCALIC LL +ৎ>\uE083; # Khanda-ta +ৗ>\uE057; # AU LENGTH MARK +ৠ>\uE060; # LETTER VOCALIC RR +ৡ>\uE061; # LETTER VOCALIC LL \u09E2>\uE062; # VOWEL SIGN VOCALIC L \u09E3>\uE063; # VOWEL SIGN VOCALIC LL -\u09E6>\uE066; # DIGIT ZERO -\u09E7>\uE067; # DIGIT ONE -\u09E8>\uE068; # DIGIT TWO -\u09E9>\uE069; # DIGIT THREE -\u09EA>\uE06A; # DIGIT FOUR -\u09EB>\uE06B; # DIGIT FIVE -\u09EC>\uE06C; # DIGIT SIX -\u09ED>\uE06D; # DIGIT SEVEN -\u09EE>\uE06E; # DIGIT EIGHT -\u09EF>\uE06F; # DIGIT NINE -\u09F0>\ue071; # Bengali-InterIndic: LETTER RA WITH MIDDLE DIAGONAL -\u09F1>\ue072; # Bengali-InterIndic: LETTER RA WITH LOWER DIAGONAL -\u09F2>\ue073; # Bengali-InterIndic: RUPEE MARK -\u09F3>\ue074; # Bengali-InterIndic: RUPEE SIGN -\u09F4>\ue075; # Bengali-InterIndic: CURRENCY NUMERATOR ONE -\u09F5>\ue076; # Bengali-InterIndic: CURRENCY NUMERATOR TWO -\u09F6>\ue077; # Bengali-InterIndic: CURRENCY NUMERATOR THREE -\u09F7>\ue078; # Bengali-InterIndic: CURRENCY NUMERATOR FOUR -\u09F8>\ue079; # Bengali-InterIndic: CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\u09F9>\ue07A; # Bengali-InterIndic: CURRENCY DENOMINATOR SIXTEEN -\u09FA>\ue07B; # ISSHAR - -\u0964>\ue064; # DANDA -\u0965>\ue065; # DOUBLE DANDA -# :: NFC (NFD) ; -# eof +০>\uE066; # DIGIT ZERO +১>\uE067; # DIGIT ONE +২>\uE068; # DIGIT TWO +৩>\uE069; # DIGIT THREE +৪>\uE06A; # DIGIT FOUR +৫>\uE06B; # DIGIT FIVE +৬>\uE06C; # DIGIT SIX +৭>\uE06D; # DIGIT SEVEN +৮>\uE06E; # DIGIT EIGHT +৯>\uE06F; # DIGIT NINE +ৰ>\uE071; # Bengali-InterIndic: LETTER RA WITH MIDDLE DIAGONAL +ৱ>\uE072; # Bengali-InterIndic: LETTER RA WITH LOWER DIAGONAL +৲>\uE073; # Bengali-InterIndic: RUPEE MARK +৳>\uE074; # Bengali-InterIndic: RUPEE SIGN +৴>\uE075; # Bengali-InterIndic: CURRENCY NUMERATOR ONE +৵>\uE076; # Bengali-InterIndic: CURRENCY NUMERATOR TWO +৶>\uE077; # Bengali-InterIndic: CURRENCY NUMERATOR THREE +৷>\uE078; # Bengali-InterIndic: CURRENCY NUMERATOR FOUR +৸>\uE079; # Bengali-InterIndic: CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +৹>\uE07A; # Bengali-InterIndic: CURRENCY DENOMINATOR SIXTEEN +৺>\uE07B; # ISSHAR +।>\uE064; # DANDA +॥>\uE065; # DOUBLE DANDA diff --git a/icuSources/data/translit/Bengali_Kannada.txt b/icuSources/data/translit/Bengali_Kannada.txt new file mode 100644 index 00000000..1c8ccacd --- /dev/null +++ b/icuSources/data/translit/Bengali_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Bengali_Latin.txt b/icuSources/data/translit/Bengali_Latin.txt new file mode 100644 index 00000000..f67ef4ae --- /dev/null +++ b/icuSources/data/translit/Bengali_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Bengali_Malayalam.txt b/icuSources/data/translit/Bengali_Malayalam.txt new file mode 100644 index 00000000..6865a292 --- /dev/null +++ b/icuSources/data/translit/Bengali_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Bengali_Oriya.txt b/icuSources/data/translit/Bengali_Oriya.txt new file mode 100644 index 00000000..88eb0aac --- /dev/null +++ b/icuSources/data/translit/Bengali_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Bengali_Tamil.txt b/icuSources/data/translit/Bengali_Tamil.txt new file mode 100644 index 00000000..d93a2d91 --- /dev/null +++ b/icuSources/data/translit/Bengali_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Bengali_Telugu.txt b/icuSources/data/translit/Bengali_Telugu.txt new file mode 100644 index 00000000..366f50d9 --- /dev/null +++ b/icuSources/data/translit/Bengali_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Bengali_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[।-॥\u0981-ঃঅ-ঌএ-ঐও-নপ-রলশ-হ\u09BC-\u09C4ে-ৈো-\u09CDৗড়-ঢ়য়-\u09E3০-৺ৎ]; +::NFD; +::Bengali-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/CanadianAboriginal_Latin.txt b/icuSources/data/translit/CanadianAboriginal_Latin.txt new file mode 100644 index 00000000..29d8cad3 --- /dev/null +++ b/icuSources/data/translit/CanadianAboriginal_Latin.txt @@ -0,0 +1,191 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: CanadianAboriginal_Latin.txt +# Generated from CLDR: Thu Jul 20 14:57:44 PDT 2006 +# +Å¡wê <> ᔗ ; +Å¡wî <> ᔛ ; +Å¡wi <> ᔙ ; +Å¡wô <> ᔟ ; +Å¡wo <> ᔝ ; +Å¡wâ <> ᔣ ; +Å¡wa <> ᔡ ; +pwê <> ᐺ ; +pwî <> ᐾ ; +pwi <> ᐼ ; +pwô <> ᑂ ; +pwo <> ᑀ ; +pwâ <> ᑆ ; +pwa <> ᑄ ; +twê <> ᑗ ; +twî <> ᑛ ; +twi <> ᑙ ; +twô <> ᑟ ; +two <> ᑝ ; +twâ <> ᑣ ; +twa <> ᑡ ; +kwê <> ᑴ ; +kwî <> ᑸ ; +kwi <> ᑶ ; +kwô <> ᑼ ; +kwo <> ᑺ ; +kwâ <> ᒀ ; +kwa <> ᑾ ; +cwê <> ᒒ ; +cwî <> ᒖ ; +cwi <> ᒔ ; +cwô <> ᒚ ; +cwo <> ᒘ ; +cwâ <> ᒞ ; +cwa <> ᒜ ; +mwê <> ᒬ ; +mwî <> ᒰ ; +mwi <> ᒮ ; +mwô <> ᒴ ; +mwo <> ᒲ ; +mwâ <> ᒸ ; +mwa <> ᒶ ; +nwê <> ᓉ ; +nwâ <> ᓍ ; +nwa <> ᓋ ; +lwê <> ᓜ ; +lwî <> ᓠ ; +lwi <> ᓞ ; +lwô <> ᓤ ; +lwo <> ᓢ ; +lwâ <> ᓨ ; +lwa <> ᓦ ; +swê <> ᓶ ; +swî <> ᓺ ; +swi <> ᓸ ; +swô <> ᓾ ; +swo <> ᓼ ; +swâ <> ᔂ ; +swa <> ᔀ ; +ywê <> ᔯ ; +ywî <> ᔳ ; +ywi <> ᔱ ; +ywô <> ᔷ ; +ywo <> ᔵ ; +ywâ <> ᔻ ; +ywa <> ᔹ ; +rwâ <> ᕎ ; +hk <> ᕽ ; +thê <> ᖧ ; +thî <> ᖩ ; +thi <> ᖨ ; +thô <> ᖫ ; +tho <> ᖪ ; +thâ <> ᖭ ; +tha <> ᖬ ; +th <> ᖮ ; +šê <> ᔐ ; +šî <> ᔑ ; +Å¡i <> ᔒ ; +šô <> ᔓ ; +Å¡o <> ᔔ ; +šâ <> ᔕ ; +Å¡a <> ᔖ ; +Å¡ <> ᔥ ; +wê <> ᐌ ; +wî <> ᐐ ; +wi <> ᐎ ; +wô <> ᐔ ; +wo <> ᐒ ; +wâ <> ᐙ ; +wa <> ᐗ ; +w <> ᐤ ; +pê <> ᐯ ; +pî <> ᐲ ; +pi <> ᐱ ; +pô <> ᐴ ; +po <> ᐳ ; +pâ <> ᐹ ; +pa <> ᐸ ; +p <> ᑉ ; +tê <> ᑌ ; +tî <> ᑏ ; +ti <> ᑎ ; +tô <> ᑑ ; +to <> ᑐ ; +tâ <> ᑖ ; +ta <> ᑕ ; +t <> ᑦ ; +kê <> ᑫ ; +kî <> ᑮ ; +ki <> ᑭ ; +kô <> ᑰ ; +ko <> ᑯ ; +kâ <> ᑳ ; +ka <> ᑲ ; +kw <> ᒄ ; +k <> ᒃ ; +cê <> ᒉ ; +cî <> ᒌ ; +ci <> ᒋ ; +cô <> ᒎ ; +co <> ᒍ ; +câ <> ᒑ ; +ca <> ᒐ ; +c <> ᒡ ; +mê <> ᒣ ; +mî <> ᒦ ; +mi <> ᒥ ; +mô <> ᒨ ; +mo <> ᒧ ; +mâ <> ᒫ ; +ma <> ᒪ ; +m <> ᒻ ; +nê <> ᓀ ; +nî <> ᓃ ; +ni <> ᓂ ; +nô <> ᓅ ; +no <> ᓄ ; +nâ <> ᓈ ; +na <> ᓇ ; +n <> ᓐ ; +lê <> ᓓ ; +lî <> ᓖ ; +li <> ᓕ ; +lô <> ᓘ ; +lo <> ᓗ ; +lâ <> ᓛ ; +la <> ᓚ ; +l <> ᓪ ; +sê <> ᓭ ; +sî <> ᓰ ; +si <> ᓯ ; +sô <> ᓲ ; +so <> ᓱ ; +sâ <> ᓵ ; +sa <> ᓴ ; +s <> ᔅ ; +yê <> ᔦ ; +yî <> ᔩ ; +yi <> ᔨ ; +yô <> ᔫ ; +yo <> ᔪ ; +yâ <> ᔮ ; +ya <> ᔭ ; +y <> ᔾ ; +rê <> ᕂ ; +rî <> ᕇ ; +ri <> ᕆ ; +rô <> ᕉ ; +ro <> ᕈ ; +râ <> ᕌ ; +ra <> ᕋ ; +r <> ᕐ ; +hê <> ᐁ ; +hî <> ᐄ ; +hi <> ᐃ ; +hô <> ᐆ ; +ho <> ᐅ ; +hâ <> ᐋ ; +ha <> ᐊ ; +h <> ᐦ ; +'.' <> ᙮ ; diff --git a/icuSources/data/translit/Cyrillic_Latin.txt b/icuSources/data/translit/Cyrillic_Latin.txt index c50e9d68..50ec9973 100644 --- a/icuSources/data/translit/Cyrillic_Latin.txt +++ b/icuSources/data/translit/Cyrillic_Latin.txt @@ -1,21 +1,16 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- -# TODO: add remaining characters -# Should add variants for Russian-English, Russian-German -# Those can use this as a base, and then remap cases -# like a $hat to ya or ja. - -# :: [\u0000-\u007E \u02B9 \u02BA [:Cyrillic:] [:Latin:] [:nonspacing mark:]] ; -### WARNING, \u0308 must be added to the generated filters, in both directions ### -# MINIMAL FILTER -:: [\u0308\u0102-\u0103\u0114-\u0115\u011E-\u011F\u012C-\u012D\u014E-\u014F\u016C-\u016D\u0306\u0400-\u045F\u0490-\u0495\u0498-\u0499\u04C1-\u04C2\u04D0-\u04DF\u04E2-\u04E7\u04EC-\u04F5\u04F8-\u04F9\u1E1C-\u1E1D\u1EAE-\u1EB7\u1FB0\u1FB8\u1FD0\u1FD8\u1FE0\u1FE8] ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Cyrillic_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +:: [Ққ\u0308Ă-ăĔ-ĕĞ-ğĬ-ĭŎ-ŏŬ-Å­\u0306Ѐ-џҐ-ҕҘ-ҙӁ-ӂӐ-ӟӢ-Ó§Ó¬-ÓµÓ¸-ӹḜ-ḝẮ-ặᾰᾸῐῘῠῨ] ; :: NFD (NFC) ; - -$modprime = \u02B9; -$modprime2 = \u02BA; - +$modprime = ʹ; +$modprime2 = ʺ; $grave = \u0300; $acute = \u0301; $hat = \u0302; @@ -24,68 +19,45 @@ $dot = \u0307 ; $caron = \u030C ; $comma = \u0326 ; $under = \u0331 ; - -# move up so not masked - +$descender = ˌ; я <> a $hat ; # CYRILLIC SMALL LETTER YA Я <> A $hat ; # CYRILLIC CAPITAL LETTER YA - ч <> c $caron ; # CYRILLIC SMALL LETTER CHE Ч <> C $caron; # CYRILLIC CAPITAL LETTER CHE -# Ò· <> XXX ; # CYRILLIC SMALL LETTER CHE WITH DESCENDER -# Ò¶ <> XXX ; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER -# ӌ <> XXX ; # CYRILLIC SMALL LETTER KHAKASSIAN CHE -# Ӌ <> XXX ; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE -# Ò¹ <> XXX ; # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE -# Ò¸ <> XXX ; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE - э <> e $acute; # CYRILLIC SMALL LETTER E Э <> E $acute; # CYRILLIC CAPITAL LETTER E є <> e $hat; # CYRILLIC SMALL LETTER UKRAINIAN IE Є <> E $hat; # CYRILLIC CAPITAL LETTER UKRAINIAN IE - ш <> s $caron ; # CYRILLIC SMALL LETTER SHA Ш <> S $caron ; # CYRILLIC CAPITAL LETTER SHA щ <> s $hat ; # CYRILLIC SMALL LETTER SHCHA Щ <> S $hat; # CYRILLIC CAPITAL LETTER SHCHA - ѕ <> z $hat ; # CYRILLIC SMALL LETTER DZE Ѕ <> Z $hat; # CYRILLIC CAPITAL LETTER DZE -# Ó¡ <> XXX ; # CYRILLIC SMALL LETTER ABKHASIAN DZE -# Ó  <> XXX ; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE - ю <> u $hat ; # CYRILLIC SMALL LETTER YU Ю <> U $hat ; # CYRILLIC CAPITAL LETTER YU - і <> i $acute; # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I І <> I $acute; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I ј <> j $caron; # CYRILLIC SMALL LETTER JE Ј <> J $caron; # CYRILLIC CAPITAL LETTER JE - љ <> l $hat ; # CYRILLIC SMALL LETTER LJE Љ <> L $hat ; # CYRILLIC CAPITAL LETTER LJE њ <> n $hat ; # CYRILLIC SMALL LETTER NJE Њ <> N $hat ; # CYRILLIC CAPITAL LETTER NJE - ћ <> c $acute ; # CYRILLIC SMALL LETTER TSHE Ћ <> C $acute ; # CYRILLIC CAPITAL LETTER TSHE - џ <> d $hat ; # CYRILLIC SMALL LETTER DZHE Џ <> D $hat ; # CYRILLIC CAPITAL LETTER DZHE - -# Normal order - а <> a ; # CYRILLIC SMALL LETTER A А <> A ; # CYRILLIC CAPITAL LETTER A -ә <> \u0259 ; # CYRILLIC SMALL LETTER SCHWA -Ә <> \u018F ; # CYRILLIC CAPITAL LETTER SCHWA -ӕ <> \u00E6 ; # CYRILLIC SMALL LIGATURE A IE -Ӕ <> \u00C6 ; # CYRILLIC CAPITAL LIGATURE A IE +ә <> ə ; # CYRILLIC SMALL LETTER SCHWA +Ә <> Ə ; # CYRILLIC CAPITAL LETTER SCHWA +ӕ <> æ ; # CYRILLIC SMALL LIGATURE A IE +Ӕ <> Æ ; # CYRILLIC CAPITAL LIGATURE A IE б <> b ; # CYRILLIC SMALL LETTER BE Б <> B ; # CYRILLIC CAPITAL LETTER BE в <> v ; # CYRILLIC SMALL LETTER VE В <> V ; # CYRILLIC CAPITAL LETTER VE - ґ <> g $grave ; # CYRILLIC SMALL LETTER GHE WITH UPTURN Ґ <> G $grave ; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN ғ <> g $dot ; # CYRILLIC SMALL LETTER GHE WITH STROKE @@ -94,7 +66,6 @@ $under = \u0331 ; Ҕ <> G $breve; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK г <> g ; # CYRILLIC SMALL LETTER GHE Г <> G ; # CYRILLIC CAPITAL LETTER GHE - д <> d; # CYRILLIC SMALL LETTER DE Д <> D; # CYRILLIC CAPITAL LETTER DE ђ <> đ ; # CYRILLIC SMALL LETTER DJE @@ -103,192 +74,48 @@ $under = \u0331 ; Ҙ <> Z $comma ; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER е <> e ; # CYRILLIC SMALL LETTER IE Е <> E; # CYRILLIC CAPITAL LETTER IE - ж <> z $caron; # CYRILLIC SMALL LETTER ZHE Ж <> Z $caron; # CYRILLIC CAPITAL LETTER ZHE - -# җ <> XXX ; # CYRILLIC SMALL LETTER ZHE WITH DESCENDER -# Җ <> XXX ; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER - з <> z ; # CYRILLIC SMALL LETTER ZE З <> Z; # CYRILLIC CAPITAL LETTER ZE - -й <> j ; # CYRILLIC SMALL LETTER I -Й <> J ; # CYRILLIC CAPITAL LETTER I +и\u0306 <> j ; # CYRILLIC SMALL LETTER I +И\u0306 <> J ; # CYRILLIC CAPITAL LETTER I и <> i ; # CYRILLIC SMALL LETTER I И <> I ; # CYRILLIC CAPITAL LETTER I - +қ <> k $descender ; # CYRILLIC SMALL LETTER KA WITH DESCENDER +Қ <> K $descender ; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER к <> k ; # CYRILLIC SMALL LETTER KA К <> K; # CYRILLIC CAPITAL LETTER KA - -# қ <> XXX ; # CYRILLIC SMALL LETTER KA WITH DESCENDER -# Қ <> XXX ; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER -# ӄ <> XXX ; # CYRILLIC SMALL LETTER KA WITH HOOK -# Ӄ <> XXX ; # CYRILLIC CAPITAL LETTER KA WITH HOOK -# Ò¡ <> XXX ; # CYRILLIC SMALL LETTER BASHKIR KA -# Ò  <> XXX ; # CYRILLIC CAPITAL LETTER BASHKIR KA -# ҟ <> XXX ; # CYRILLIC SMALL LETTER KA WITH STROKE -# Ҟ <> XXX ; # CYRILLIC CAPITAL LETTER KA WITH STROKE -# ҝ <> XXX ; # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE -# Ҝ <> XXX ; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE л <> l ; # CYRILLIC SMALL LETTER EL Л <> L; # CYRILLIC CAPITAL LETTER EL - м <> m ; # CYRILLIC SMALL LETTER EM М <> M ; # CYRILLIC CAPITAL LETTER EM н <> n ; # CYRILLIC SMALL LETTER EN Н <> N; # CYRILLIC CAPITAL LETTER EN -# Ò£ <> XXX ; # CYRILLIC SMALL LETTER EN WITH DESCENDER -# Ò¢ <> XXX ; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER -# ӈ <> XXX ; # CYRILLIC SMALL LETTER EN WITH HOOK -# Ӈ <> XXX ; # CYRILLIC CAPITAL LETTER EN WITH HOOK -# Ò¥ <> XXX ; # CYRILLIC SMALL LIGATURE EN GHE -# Ò¤ <> XXX ; # CYRILLIC CAPITAL LIGATURE EN GHE - о <> o ; # CYRILLIC SMALL LETTER O О <> O ; # CYRILLIC CAPITAL LETTER O -# Ó© <> XXX ; # CYRILLIC SMALL LETTER BARRED O -# Ó¨ <> XXX ; # CYRILLIC CAPITAL LETTER BARRED O п <> p ; # CYRILLIC SMALL LETTER PE П <> P ; # CYRILLIC CAPITAL LETTER PE -# Ò§ <> XXX ; # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK -# Ò¦ <> XXX ; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK -# ҁ <> XXX ; # CYRILLIC SMALL LETTER KOPPA -# Ҁ <> XXX ; # CYRILLIC CAPITAL LETTER KOPPA р <> r ; # CYRILLIC SMALL LETTER ER Р <> R ; # CYRILLIC CAPITAL LETTER ER -# ҏ <> XXX ; # CYRILLIC SMALL LETTER ER WITH TICK -# Ҏ <> XXX ; # CYRILLIC CAPITAL LETTER ER WITH TICK с <> s ; # CYRILLIC SMALL LETTER ES С <> S ; # CYRILLIC CAPITAL LETTER ES -# Ò« <> XXX ; # CYRILLIC SMALL LETTER ES WITH DESCENDER -# Òª <> XXX ; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER т <> t ; # CYRILLIC SMALL LETTER TE Т <> T ; # CYRILLIC CAPITAL LETTER TE -# Ò­ <> XXX ; # CYRILLIC SMALL LETTER TE WITH DESCENDER -# Ò¬ <> XXX ; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER - у <> u ; # CYRILLIC SMALL LETTER U У <> U ; # CYRILLIC CAPITAL LETTER U -# Ò¯ <> XXX ; # CYRILLIC SMALL LETTER STRAIGHT U -# Ò® <> XXX ; # CYRILLIC CAPITAL LETTER STRAIGHT U -# Ò± <> XXX ; # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE -# Ò° <> XXX ; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -# ѹ <> XXX ; # CYRILLIC SMALL LETTER UK -# Ѹ <> XXX ; # CYRILLIC CAPITAL LETTER UK ф <> f ; # CYRILLIC SMALL LETTER EF Ф <> F ; # CYRILLIC CAPITAL LETTER EF х <> h ; # CYRILLIC SMALL LETTER HA Ð¥ <> H; # CYRILLIC CAPITAL LETTER HA -# Ò³ <> XXX ; # CYRILLIC SMALL LETTER HA WITH DESCENDER -# Ò² <> XXX ; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER -# Ò» <> XXX ; # CYRILLIC SMALL LETTER SHHA -# Òº <> XXX ; # CYRILLIC CAPITAL LETTER SHHA -# Ñ¡ <> XXX ; # CYRILLIC SMALL LETTER OMEGA -# Ñ  <> XXX ; # CYRILLIC CAPITAL LETTER OMEGA -# Ñ¿ <> XXX ; # CYRILLIC SMALL LETTER OT -# Ѿ <> XXX ; # CYRILLIC CAPITAL LETTER OT -# ѽ <> XXX ; # CYRILLIC SMALL LETTER OMEGA WITH TITLO -# Ѽ <> XXX ; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO -# Ñ» <> XXX ; # CYRILLIC SMALL LETTER ROUND OMEGA -# Ѻ <> XXX ; # CYRILLIC CAPITAL LETTER ROUND OMEGA ц <> c ; # CYRILLIC SMALL LETTER TSE Ц <> C; # CYRILLIC CAPITAL LETTER TSE -# Òµ <> XXX ; # CYRILLIC SMALL LIGATURE TE TSE -# Ò´ <> XXX ; # CYRILLIC CAPITAL LIGATURE TE TSE - -# Ò½ <> XXX ; # CYRILLIC SMALL LETTER ABKHASIAN CHE -# Ò¼ <> XXX ; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE -# Ò¿ <> XXX ; # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER -# Ò¾ <> XXX ; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER - - Ъ <> $modprime2 $under ; # CYRILLIC CAPITAL LETTER HARD SIGN ъ <> $modprime2 ; # CYRILLIC SMALL LETTER HARD SIGN Ь <> $modprime $under ; # CYRILLIC CAPITAL LETTER SOFT SIGN ь <> $modprime ; # CYRILLIC SMALL LETTER SOFT SIGN - ы <> y ; # CYRILLIC SMALL LETTER YERU Ы <> Y ; # CYRILLIC CAPITAL LETTER YERU - -# ҍ <> XXX ; # CYRILLIC SMALL LETTER SEMISOFT SIGN -# Ҍ <> XXX ; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN -# Ñ£ <> XXX ; # CYRILLIC SMALL LETTER YAT -# Ñ¢ <> XXX ; # CYRILLIC CAPITAL LETTER YAT - -# Ñ¥ <> XXX ; # CYRILLIC SMALL LETTER IOTIFIED E -# Ѥ <> XXX ; # CYRILLIC CAPITAL LETTER IOTIFIED E -# ѧ <> XXX ; # CYRILLIC SMALL LETTER LITTLE YUS -# Ѧ <> XXX ; # CYRILLIC CAPITAL LETTER LITTLE YUS -# Ñ« <> XXX ; # CYRILLIC SMALL LETTER BIG YUS -# Ѫ <> XXX ; # CYRILLIC CAPITAL LETTER BIG YUS -# Ñ© <> XXX ; # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS -# Ѩ <> XXX ; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS -# Ñ­ <> XXX ; # CYRILLIC SMALL LETTER IOTIFIED BIG YUS -# Ѭ <> XXX ; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS -# ѯ <> XXX ; # CYRILLIC SMALL LETTER KSI -# Ñ® <> XXX ; # CYRILLIC CAPITAL LETTER KSI -# ѱ <> XXX ; # CYRILLIC SMALL LETTER PSI -# Ñ° <> XXX ; # CYRILLIC CAPITAL LETTER PSI -# ѳ <> XXX ; # CYRILLIC SMALL LETTER FITA -# Ѳ <> XXX ; # CYRILLIC CAPITAL LETTER FITA -# ѵ <> XXX ; # CYRILLIC SMALL LETTER IZHITSA -# Ñ´ <> XXX ; # CYRILLIC CAPITAL LETTER IZHITSA -# Ò© <> XXX ; # CYRILLIC SMALL LETTER ABKHASIAN HA -# Ò¨ <> XXX ; # CYRILLIC CAPITAL LETTER ABKHASIAN HA -# Ӏ <> XXX ; # CYRILLIC LETTER PALOCHKA -### ӑ <> XXX ; # CYRILLIC SMALL LETTER A -### Ӑ <> XXX ; # CYRILLIC CAPITAL LETTER A -### ӓ <> XXX ; # CYRILLIC SMALL LETTER A -### Ӓ <> XXX ; # CYRILLIC CAPITAL LETTER A -### ӛ <> XXX ; # CYRILLIC SMALL LETTER SCHWA -### Ӛ <> XXX ; # CYRILLIC CAPITAL LETTER SCHWA -### ѓ <> XXX ; # CYRILLIC SMALL LETTER GHE -### Ѓ <> XXX ; # CYRILLIC CAPITAL LETTER GHE -### ѐ <> XXX ; # CYRILLIC SMALL LETTER IE -### Ѐ <> XXX ; # CYRILLIC CAPITAL LETTER IE -### ё <> XXX ; # CYRILLIC SMALL LETTER IE -### Ё <> XXX ; # CYRILLIC CAPITAL LETTER IE -### ӗ <> XXX ; # CYRILLIC SMALL LETTER IE -### Ӗ <> XXX ; # CYRILLIC CAPITAL LETTER IE -### ӂ <> XXX ; # CYRILLIC SMALL LETTER ZHE -### Ӂ <> XXX ; # CYRILLIC CAPITAL LETTER ZHE -### ӝ <> XXX ; # CYRILLIC SMALL LETTER ZHE -### Ӝ <> XXX ; # CYRILLIC CAPITAL LETTER ZHE -### ӟ <> XXX ; # CYRILLIC SMALL LETTER ZE -### Ӟ <> XXX ; # CYRILLIC CAPITAL LETTER ZE -### ѝ <> XXX ; # CYRILLIC SMALL LETTER I -### Ѝ <> XXX ; # CYRILLIC CAPITAL LETTER I -### ӣ <> XXX ; # CYRILLIC SMALL LETTER I -### Ӣ <> XXX ; # CYRILLIC CAPITAL LETTER I -### ӥ <> XXX ; # CYRILLIC SMALL LETTER I -### Ӥ <> XXX ; # CYRILLIC CAPITAL LETTER I -### ї <> XXX ; # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -### Ї <> XXX ; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -### ӧ <> XXX ; # CYRILLIC SMALL LETTER O -### Ӧ <> XXX ; # CYRILLIC CAPITAL LETTER O -### ӫ <> XXX ; # CYRILLIC SMALL LETTER BARRED O -### Ӫ <> XXX ; # CYRILLIC CAPITAL LETTER BARRED O -### ќ <> XXX ; # CYRILLIC SMALL LETTER KA -### Ќ <> XXX ; # CYRILLIC CAPITAL LETTER KA -### ӯ <> XXX ; # CYRILLIC SMALL LETTER U -### Ӯ <> XXX ; # CYRILLIC CAPITAL LETTER U -### ў <> XXX ; # CYRILLIC SMALL LETTER U -### Ў <> XXX ; # CYRILLIC CAPITAL LETTER U -### ӱ <> XXX ; # CYRILLIC SMALL LETTER U -### Ӱ <> XXX ; # CYRILLIC CAPITAL LETTER U -### ӳ <> XXX ; # CYRILLIC SMALL LETTER U -### Ӳ <> XXX ; # CYRILLIC CAPITAL LETTER U -### ӵ <> XXX ; # CYRILLIC SMALL LETTER CHE -### Ӵ <> XXX ; # CYRILLIC CAPITAL LETTER CHE -### ӹ <> XXX ; # CYRILLIC SMALL LETTER YERU -### Ӹ <> XXX ; # CYRILLIC CAPITAL LETTER YERU -### ӭ <> XXX ; # CYRILLIC SMALL LETTER E -### Ӭ <> XXX ; # CYRILLIC CAPITAL LETTER E -### ѷ <> XXX ; # CYRILLIC SMALL LETTER IZHITSA -### Ѷ <> XXX ; # CYRILLIC CAPITAL LETTER IZHITSA - -# Completeness $ignore = [[:Mark:]''] * ; | k < q ; | K < Q ; @@ -298,9 +125,5 @@ $ignore = [[:Mark:]''] * ; | KS < [:UppercaseLetter:] $ignore { X ; | Ks < X ; | ks < x ; - :: NFC (NFD) ; -# note: a global filter is more efficient, but MUST include all source chars!! -# :: ([\u0000-\u007E \u02B9 \u02BA [:Cyrillic:] [:Latin:] [:nonspacing mark:]]); -# MINIMAL FILTER: Latin-Cyrillic -:: ( [\u0308A-Za-z\u00C0-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u018F\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0259\u02B9-\u02BA\u0300-\u0302\u0306-\u0307\u030C\u0326\u0331\u0340-\u0341\u0344\u0374\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0400\u0403\u040C-\u040E\u0419\u0439\u0450\u0453\u045C-\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u1E00-\u1E99\u1E9B\u1EA0-\u1EF9\u1F02-\u1F05\u1F0A-\u1F0D\u1F12-\u1F15\u1F1A-\u1F1D\u1F22-\u1F25\u1F2A-\u1F2D\u1F32-\u1F35\u1F3A-\u1F3D\u1F42-\u1F45\u1F4A-\u1F4D\u1F52-\u1F55\u1F5B\u1F5D\u1F62-\u1F65\u1F6A-\u1F6D\u1F70-\u1F7D\u1F82-\u1F85\u1F8A-\u1F8D\u1F92-\u1F95\u1F9A-\u1F9D\u1FA2-\u1FA5\u1FAA-\u1FAD\u1FB0\u1FB2\u1FB4\u1FB8\u1FBA-\u1FBB\u1FC2\u1FC4\u1FC8-\u1FCB\u1FCD-\u1FCE\u1FD0\u1FD2-\u1FD3\u1FD8\u1FDA-\u1FDB\u1FDD-\u1FDE\u1FE0\u1FE2-\u1FE3\u1FE8\u1FEA-\u1FEB\u1FED-\u1FEE\u1FF2\u1FF4\u1FF8-\u1FFB\u212A-\u212B] ) ; +:: ( [ˌ\u0308A-Za-zÀ-ÏÑ-ÖÙ-Ýà-ïñ-öù-ýÿ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƏƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳəʹ-ʺ\u0300-\u0302\u0306-\u0307\u030C\u0326\u0331\u0340-\u0341\u0344ʹ΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЀЃЌ-ЎЙйѐѓќ-ўӁ-ӂӐ-ӑӖ-ӗḀ-ẙẛẠ-ỹἂ-ἅἊ-Ἅἒ-ἕἚ-Ἕἢ-ἥἪ-á¼­á¼²-ἵἺ-Ἵὂ-ὅὊ-Ὅὒ-ὕὛὝὢ-ὥὪ-á½­á½°-ώᾂ-ᾅᾊ-ᾍᾒ-ᾕᾚ-ᾝᾢ-ᾥᾪ-ᾭᾰᾲᾴᾸᾺ-ΆῂῄῈ-Ή῍-῎ῐῒ-ΐῘῚ-Ί῝-῞ῠῢ-ΰῨῪ-á¿«á¿­-΅ῲῴῸ-ΏK-Å] ) ; diff --git a/icuSources/data/translit/Devanagari_Bengali.txt b/icuSources/data/translit/Devanagari_Bengali.txt new file mode 100644 index 00000000..cd7151eb --- /dev/null +++ b/icuSources/data/translit/Devanagari_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Gujarati.txt b/icuSources/data/translit/Devanagari_Gujarati.txt new file mode 100644 index 00000000..1eca0625 --- /dev/null +++ b/icuSources/data/translit/Devanagari_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:12 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Gurmukhi.txt b/icuSources/data/translit/Devanagari_Gurmukhi.txt new file mode 100644 index 00000000..beaf87ae --- /dev/null +++ b/icuSources/data/translit/Devanagari_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Devanagari_InterIndic.txt b/icuSources/data/translit/Devanagari_InterIndic.txt index ebbe468e..cd0ecb3c 100644 --- a/icuSources/data/translit/Devanagari_InterIndic.txt +++ b/icuSources/data/translit/Devanagari_InterIndic.txt @@ -1,117 +1,115 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Devanagari-InterIndic -# :: NFD; -#Rules for Decomposed characters - - - \u0901>\uE001; # SIGN CANDRABINDU - \u0902>\uE002; # SIGN ANUSVARA - \u0903>\uE003; # SIGN VISARGA - \u0904>\uE004; # SIGN SHORT A - \u0905>\uE005; # LETTER A - \u0906>\uE006; # LETTER AA - \u0907>\uE007; # LETTER I - \u0908>\uE008; # LETTER II - \u0909>\uE009; # LETTER U - \u090A>\uE00A; # LETTER UU - \u090B>\uE00B; # LETTER VOCALIC R - \u090C>\uE00C; # LETTER VOCALIC L - \u090D>\uE00D; # LETTER CANDRA E (For representing English sounds) - \u090E>\uE00E; # UNMAPPED LETTER SHORT E(For Southern Scripts) - \u090F>\uE00F; # LETTER E - \u0910>\uE010; # LETTER AI - \u0911>\uE011; # LETTER CANDRA O (For representing English sounds) - \u0912>\uE012; # UNMAPPED LETTER SHORT O (For Southern Scripts) - \u0913>\uE013; # LETTER O - \u0914>\uE014; # LETTER AU - \u0915>\uE015; # LETTER KA - \u0916>\uE016; # LETTER KHA - \u0917>\uE017; # LETTER GA - \u0918>\uE018; # LETTER GHA - \u0919>\uE019; # LETTER NGA - \u091A>\uE01A; # LETTER CA - \u091B>\uE01B; # LETTER CHA - \u091C>\uE01C; # LETTER JA - \u091D>\uE01D; # LETTER JHA - \u091E>\uE01E; # LETTER NYA - \u091F>\uE01F; # LETTER TTA - \u0920>\uE020; # LETTER TTHA - \u0921>\uE021; # LETTER DDA - \u0922>\uE022; # LETTER DDHA - \u0923>\uE023; # LETTER NNA - \u0924>\uE024; # LETTER TA - \u0925>\uE025; # LETTER THA - \u0926>\uE026; # LETTER DA - \u0927>\uE027; # LETTER DHA - \u0928>\uE028; # LETTER NA - \u0929>\uE029; - \u092A>\uE02A; # LETTER PA - \u092B>\uE02B; # LETTER PHA - \u092C>\uE02C; # LETTER BA - \u092D>\uE02D; # LETTER BHA - \u092E>\uE02E; # LETTER MA - \u092F>\uE02F; # LETTER YA - \u0930>\uE030; # LETTER RA - \u0931>\uE031; - \u0932>\uE032; # LETTER LA - \u0933>\uE033; # LETTER LLA - \u0934>\uE034; - - \u0935>\uE035; # LETTER VA - \u0936>\uE036; # LETTER SHA - \u0937>\uE037; # LETTER SSA - \u0938>\uE038; # LETTER SA - \u0939>\uE039; # LETTER HA - \u093C>\uE03C; # SIGN NUKTA - \u093D>\uE03D; # SIGN AVAGRAHA - \u093E>\uE03E; # VOWEL SIGN AA - \u093F>\uE03F; # VOWEL SIGN I - \u0940>\uE040; # VOWEL SIGN II - \u0941>\uE041; # VOWEL SIGN U - \u0942>\uE042; # VOWEL SIGN UU - \u0943>\uE043; # VOWEL SIGN VOCALIC R - \u0944>\uE044; # VOWEL SIGN VOCALIC RR - \u0945>\uE045; # VOWEL SIGN CANDRA E - \u0946>\uE046; # UNMAPPED VOWEL SIGN SHORT E - \u0947>\uE047; # VOWEL SIGN E - \u0948>\uE048; # VOWEL SIGN AI - \u0949>\uE049; # VOWEL SIGN CANDRA O - \u094A>\uE04A; # UNMAPPED VOWEL SIGN SHORT O - \u094B>\uE04B; # VOWEL SIGN O - \u094C>\uE04C; # VOWEL SIGN AU - \u094D>\uE04D; # SIGN VIRAMA - \u0950>\uE050; # OM - \u0951>\uE051; # UNMAPPED STRESS SIGN UDATTA - \u0952>\uE052; # UNMAPPED STRESS SIGN ANUDATTA - \u0953>\uE053; # UNMAPPED GRAVE ACCENT - \u0954>\uE054; # UNMAPPED ACUTE ACCENT - \u0958>\uE058; - \u0959>\uE059; - \u095A>\uE05a; - \u095B>\uE05b; - \u095C>\uE05c; - \u095D>\uE05d; - \u095E>\uE05e; - \u095F>\uE05f; - \u0960>\uE060; # LETTER VOCALIC RR - \u0961>\uE061; # LETTER VOCALIC LL - \u0962>\uE062; # VOWEL SIGN VOCALIC L - \u0963>\uE063; # VOWEL SIGN VOCALIC LL - \u0964>\ue064; # DANDA - \u0965>\ue065; # DOUBLE DANDA - \u0966>\uE066; # DIGIT ZERO - \u0967>\uE067; # DIGIT ONE - \u0968>\uE068; # DIGIT TWO - \u0969>\uE069; # DIGIT THREE - \u096A>\uE06A; # DIGIT FOUR - \u096B>\uE06B; # DIGIT FIVE - \u096C>\uE06C; # DIGIT SIX - \u096D>\uE06D; # DIGIT SEVEN - \u096E>\uE06E; # DIGIT EIGHT - \u096F>\uE06F; # DIGIT NINE - \u0970>\uE070; # Devanagari-InterIndic: ABBREVIATION SIGN -# :: NFC (NFD) ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +\u0901>\uE001; # SIGN CANDRABINDU +\u0902>\uE002; # SIGN ANUSVARA +ः>\uE003; # SIGN VISARGA +ऄ>\uE004; # SIGN SHORT A +अ>\uE005; # LETTER A +आ>\uE006; # LETTER AA +इ>\uE007; # LETTER I +ई>\uE008; # LETTER II +उ>\uE009; # LETTER U +ऊ>\uE00A; # LETTER UU +ऋ>\uE00B; # LETTER VOCALIC R +ऌ>\uE00C; # LETTER VOCALIC L +ऍ>\uE00D; # LETTER CANDRA E (For representing English sounds) +ऎ>\uE00E; # UNMAPPED LETTER SHORT E(For Southern Scripts) +ए>\uE00F; # LETTER E +ऐ>\uE010; # LETTER AI +ऑ>\uE011; # LETTER CANDRA O (For representing English sounds) +ऒ>\uE012; # UNMAPPED LETTER SHORT O (For Southern Scripts) +ओ>\uE013; # LETTER O +औ>\uE014; # LETTER AU +क>\uE015; # LETTER KA +ख>\uE016; # LETTER KHA +ग>\uE017; # LETTER GA +घ>\uE018; # LETTER GHA +ङ>\uE019; # LETTER NGA +च>\uE01A; # LETTER CA +छ>\uE01B; # LETTER CHA +ज>\uE01C; # LETTER JA +झ>\uE01D; # LETTER JHA +ञ>\uE01E; # LETTER NYA +ट>\uE01F; # LETTER TTA +ठ>\uE020; # LETTER TTHA +ड>\uE021; # LETTER DDA +ढ>\uE022; # LETTER DDHA +ण>\uE023; # LETTER NNA +त>\uE024; # LETTER TA +थ>\uE025; # LETTER THA +द>\uE026; # LETTER DA +ध>\uE027; # LETTER DHA +न>\uE028; # LETTER NA +ऩ>\uE029; +प>\uE02A; # LETTER PA +फ>\uE02B; # LETTER PHA +ब>\uE02C; # LETTER BA +भ>\uE02D; # LETTER BHA +म>\uE02E; # LETTER MA +य>\uE02F; # LETTER YA +र>\uE030; # LETTER RA +ऱ>\uE031; +ल>\uE032; # LETTER LA +ळ>\uE033; # LETTER LLA +ऴ>\uE034; +व>\uE035; # LETTER VA +श>\uE036; # LETTER SHA +ष>\uE037; # LETTER SSA +स>\uE038; # LETTER SA +ह>\uE039; # LETTER HA +\u093C>\uE03C; # SIGN NUKTA +ऽ>\uE03D; # SIGN AVAGRAHA +ा>\uE03E; # VOWEL SIGN AA +ि>\uE03F; # VOWEL SIGN I +ी>\uE040; # VOWEL SIGN II +\u0941>\uE041; # VOWEL SIGN U +\u0942>\uE042; # VOWEL SIGN UU +\u0943>\uE043; # VOWEL SIGN VOCALIC R +\u0944>\uE044; # VOWEL SIGN VOCALIC RR +\u0945>\uE045; # VOWEL SIGN CANDRA E +\u0946>\uE046; # UNMAPPED VOWEL SIGN SHORT E +\u0947>\uE047; # VOWEL SIGN E +\u0948>\uE048; # VOWEL SIGN AI +ॉ>\uE049; # VOWEL SIGN CANDRA O +ॊ>\uE04A; # UNMAPPED VOWEL SIGN SHORT O +ो>\uE04B; # VOWEL SIGN O +ौ>\uE04C; # VOWEL SIGN AU +\u094D>\uE04D; # SIGN VIRAMA +ॐ>\uE050; # OM +\u0951>\uE051; # UNMAPPED STRESS SIGN UDATTA +\u0952>\uE052; # UNMAPPED STRESS SIGN ANUDATTA +\u0953>\uE053; # UNMAPPED GRAVE ACCENT +\u0954>\uE054; # UNMAPPED ACUTE ACCENT +क़>\uE058; +ख़>\uE059; +ग़>\uE05A; +ज़>\uE05B; +ड़>\uE05C; +ढ़>\uE05D; +फ़>\uE05E; +य़>\uE05F; +ॠ>\uE060; # LETTER VOCALIC RR +ॡ>\uE061; # LETTER VOCALIC LL +\u0962>\uE062; # VOWEL SIGN VOCALIC L +\u0963>\uE063; # VOWEL SIGN VOCALIC LL +।>\uE064; # DANDA +॥>\uE065; # DOUBLE DANDA +०>\uE066; # DIGIT ZERO +१>\uE067; # DIGIT ONE +२>\uE068; # DIGIT TWO +३>\uE069; # DIGIT THREE +४>\uE06A; # DIGIT FOUR +५>\uE06B; # DIGIT FIVE +६>\uE06C; # DIGIT SIX +७>\uE06D; # DIGIT SEVEN +८>\uE06E; # DIGIT EIGHT +९>\uE06F; # DIGIT NINE +॰>\uE070; # Devanagari-InterIndic: ABBREVIATION SIGN +ॽ>\uE082; # Devanagari Glottal Stop diff --git a/icuSources/data/translit/Devanagari_Kannada.txt b/icuSources/data/translit/Devanagari_Kannada.txt new file mode 100644 index 00000000..ca5f280a --- /dev/null +++ b/icuSources/data/translit/Devanagari_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Latin.txt b/icuSources/data/translit/Devanagari_Latin.txt new file mode 100644 index 00000000..025eed11 --- /dev/null +++ b/icuSources/data/translit/Devanagari_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Malayalam.txt b/icuSources/data/translit/Devanagari_Malayalam.txt new file mode 100644 index 00000000..ba35dbf5 --- /dev/null +++ b/icuSources/data/translit/Devanagari_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Oriya.txt b/icuSources/data/translit/Devanagari_Oriya.txt new file mode 100644 index 00000000..325a05c1 --- /dev/null +++ b/icuSources/data/translit/Devanagari_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Tamil.txt b/icuSources/data/translit/Devanagari_Tamil.txt new file mode 100644 index 00000000..89203c0e --- /dev/null +++ b/icuSources/data/translit/Devanagari_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Devanagari_Telugu.txt b/icuSources/data/translit/Devanagari_Telugu.txt new file mode 100644 index 00000000..2f1c686e --- /dev/null +++ b/icuSources/data/translit/Devanagari_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Devanagari_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[\u0901-ःऄअ-ह\u093C-\u094Dॐ-\u0954क़-९ॽ]; +::NFD; +::Devanagari-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Fullwidth_Halfwidth.txt b/icuSources/data/translit/Fullwidth_Halfwidth.txt index 03fdb9e6..e7a7dbee 100644 --- a/icuSources/data/translit/Fullwidth_Halfwidth.txt +++ b/icuSources/data/translit/Fullwidth_Halfwidth.txt @@ -1,271 +1,261 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Fullwidth-Halfwidth - -# Mechanically generated from Unicode Character Database -# IDEOGRAPHIC SPACE then added, and -# FULLWIDTH MACRON changed to map to MACRON, not SPACE + COMBINING MACRON - -# multicharacter - -ガ<>ガ; # to KATAKANA LETTER GA -ギ<>ギ; # to KATAKANA LETTER GI -グ<>グ; # to KATAKANA LETTER GU -ゲ<>ゲ; # to KATAKANA LETTER GE -ゴ<>ゴ; # to KATAKANA LETTER GO -ザ<>ザ; # to KATAKANA LETTER ZA -ジ<>ジ; # to KATAKANA LETTER ZI -ズ<>ズ; # to KATAKANA LETTER ZU -ゼ<>ゼ; # to KATAKANA LETTER ZE -ゾ<>ゾ; # to KATAKANA LETTER ZO -ダ<>ダ; # to KATAKANA LETTER DA -ヂ<>ヂ; # to KATAKANA LETTER DI -ヅ<>ヅ; # to KATAKANA LETTER DU -デ<>デ; # to KATAKANA LETTER DE -ド<>ド; # to KATAKANA LETTER DO -バ<>バ; # to KATAKANA LETTER BA -パ<>パ; # to KATAKANA LETTER PA -ビ<>ビ; # to KATAKANA LETTER BI -ピ<>ピ; # to KATAKANA LETTER PI -ブ<>ブ; # to KATAKANA LETTER BU -プ<>プ; # to KATAKANA LETTER PU -ベ<>ベ; # to KATAKANA LETTER BE -ペ<>ペ; # to KATAKANA LETTER PE -ボ<>ボ; # to KATAKANA LETTER BO -ポ<>ポ; # to KATAKANA LETTER PO -ヴ<>ヴ; # to KATAKANA LETTER VU -ヷ<>ヷ; # to KATAKANA LETTER VA -ヺ<>ヺ; # to KATAKANA LETTER VO - -# single character - -!<>'!'; # from FULLWIDTH EXCLAMATION MARK -"<>'\"'; # from FULLWIDTH QUOTATION MARK -#<>'#'; # from FULLWIDTH NUMBER SIGN -$<>'$'; # from FULLWIDTH DOLLAR SIGN -%<>'%'; # from FULLWIDTH PERCENT SIGN -&<>'&'; # from FULLWIDTH AMPERSAND -'<>''; # from FULLWIDTH APOSTROPHE -(<>'('; # from FULLWIDTH LEFT PARENTHESIS -)<>')'; # from FULLWIDTH RIGHT PARENTHESIS -*<>'*'; # from FULLWIDTH ASTERISK -+<>'+'; # from FULLWIDTH PLUS SIGN -,<>','; # from FULLWIDTH COMMA --<>'-'; # from FULLWIDTH HYPHEN-MINUS -.<>'.'; # from FULLWIDTH FULL STOP -/<>'/'; # from FULLWIDTH SOLIDUS -0<>'0'; # from FULLWIDTH DIGIT ZERO -1<>'1'; # from FULLWIDTH DIGIT ONE -2<>'2'; # from FULLWIDTH DIGIT TWO -3<>'3'; # from FULLWIDTH DIGIT THREE -4<>'4'; # from FULLWIDTH DIGIT FOUR -5<>'5'; # from FULLWIDTH DIGIT FIVE -6<>'6'; # from FULLWIDTH DIGIT SIX -7<>'7'; # from FULLWIDTH DIGIT SEVEN -8<>'8'; # from FULLWIDTH DIGIT EIGHT -9<>'9'; # from FULLWIDTH DIGIT NINE -:<>':'; # from FULLWIDTH COLON -;<>';'; # from FULLWIDTH SEMICOLON -<<>'<'; # from FULLWIDTH LESS-THAN SIGN -=<>'='; # from FULLWIDTH EQUALS SIGN -><>'>'; # from FULLWIDTH GREATER-THAN SIGN -?<>'?'; # from FULLWIDTH QUESTION MARK -ï¼ <>'@'; # from FULLWIDTH COMMERCIAL AT -A<>A; # from FULLWIDTH LATIN CAPITAL LETTER A -ï¼¢<>B; # from FULLWIDTH LATIN CAPITAL LETTER B -ï¼£<>C; # from FULLWIDTH LATIN CAPITAL LETTER C -D<>D; # from FULLWIDTH LATIN CAPITAL LETTER D -ï¼¥<>E; # from FULLWIDTH LATIN CAPITAL LETTER E -F<>F; # from FULLWIDTH LATIN CAPITAL LETTER F -G<>G; # from FULLWIDTH LATIN CAPITAL LETTER G -H<>H; # from FULLWIDTH LATIN CAPITAL LETTER H -I<>I; # from FULLWIDTH LATIN CAPITAL LETTER I -J<>J; # from FULLWIDTH LATIN CAPITAL LETTER J -K<>K; # from FULLWIDTH LATIN CAPITAL LETTER K -L<>L; # from FULLWIDTH LATIN CAPITAL LETTER L -ï¼­<>M; # from FULLWIDTH LATIN CAPITAL LETTER M -ï¼®<>N; # from FULLWIDTH LATIN CAPITAL LETTER N -O<>O; # from FULLWIDTH LATIN CAPITAL LETTER O -ï¼°<>P; # from FULLWIDTH LATIN CAPITAL LETTER P -ï¼±<>Q; # from FULLWIDTH LATIN CAPITAL LETTER Q -ï¼²<>R; # from FULLWIDTH LATIN CAPITAL LETTER R -ï¼³<>S; # from FULLWIDTH LATIN CAPITAL LETTER S -ï¼´<>T; # from FULLWIDTH LATIN CAPITAL LETTER T -ï¼µ<>U; # from FULLWIDTH LATIN CAPITAL LETTER U -V<>V; # from FULLWIDTH LATIN CAPITAL LETTER V -ï¼·<>W; # from FULLWIDTH LATIN CAPITAL LETTER W -X<>X; # from FULLWIDTH LATIN CAPITAL LETTER X -ï¼¹<>Y; # from FULLWIDTH LATIN CAPITAL LETTER Y -Z<>Z; # from FULLWIDTH LATIN CAPITAL LETTER Z -ï¼»<>'['; # from FULLWIDTH LEFT SQUARE BRACKET -ï¼¼<>'\\'; # from FULLWIDTH REVERSE SOLIDUS {double escape - aliu} -ï¼½<>']'; # from FULLWIDTH RIGHT SQUARE BRACKET -ï¼¾<>'^'; # from FULLWIDTH CIRCUMFLEX ACCENT -_<>'_'; # from FULLWIDTH LOW LINE -`<>'`'; # from FULLWIDTH GRAVE ACCENT -a<>a; # from FULLWIDTH LATIN SMALL LETTER A -b<>b; # from FULLWIDTH LATIN SMALL LETTER B -c<>c; # from FULLWIDTH LATIN SMALL LETTER C -d<>d; # from FULLWIDTH LATIN SMALL LETTER D -e<>e; # from FULLWIDTH LATIN SMALL LETTER E -f<>f; # from FULLWIDTH LATIN SMALL LETTER F -g<>g; # from FULLWIDTH LATIN SMALL LETTER G -h<>h; # from FULLWIDTH LATIN SMALL LETTER H -i<>i; # from FULLWIDTH LATIN SMALL LETTER I -j<>j; # from FULLWIDTH LATIN SMALL LETTER J -k<>k; # from FULLWIDTH LATIN SMALL LETTER K -l<>l; # from FULLWIDTH LATIN SMALL LETTER L -m<>m; # from FULLWIDTH LATIN SMALL LETTER M -n<>n; # from FULLWIDTH LATIN SMALL LETTER N -o<>o; # from FULLWIDTH LATIN SMALL LETTER O -p<>p; # from FULLWIDTH LATIN SMALL LETTER P -q<>q; # from FULLWIDTH LATIN SMALL LETTER Q -r<>r; # from FULLWIDTH LATIN SMALL LETTER R -s<>s; # from FULLWIDTH LATIN SMALL LETTER S -t<>t; # from FULLWIDTH LATIN SMALL LETTER T -u<>u; # from FULLWIDTH LATIN SMALL LETTER U -v<>v; # from FULLWIDTH LATIN SMALL LETTER V -w<>w; # from FULLWIDTH LATIN SMALL LETTER W -x<>x; # from FULLWIDTH LATIN SMALL LETTER X -y<>y; # from FULLWIDTH LATIN SMALL LETTER Y -z<>z; # from FULLWIDTH LATIN SMALL LETTER Z -{<>'{'; # from FULLWIDTH LEFT CURLY BRACKET -|<>'|'; # from FULLWIDTH VERTICAL LINE -}<>'}'; # from FULLWIDTH RIGHT CURLY BRACKET -~<>'~'; # from FULLWIDTH TILDE -。<>。; # to HALFWIDTH IDEOGRAPHIC FULL STOP -「<>ï½¢; # to HALFWIDTH LEFT CORNER BRACKET -」<>ï½£; # to HALFWIDTH RIGHT CORNER BRACKET -、<>、; # to HALFWIDTH IDEOGRAPHIC COMMA -・<>ï½¥; # to HALFWIDTH KATAKANA MIDDLE DOT -ヲ<>ヲ; # to HALFWIDTH KATAKANA LETTER WO -ァ<>ァ; # to HALFWIDTH KATAKANA LETTER SMALL A -ィ<>ィ; # to HALFWIDTH KATAKANA LETTER SMALL I -ゥ<>ゥ; # to HALFWIDTH KATAKANA LETTER SMALL U -ェ<>ェ; # to HALFWIDTH KATAKANA LETTER SMALL E -ォ<>ォ; # to HALFWIDTH KATAKANA LETTER SMALL O -ャ<>ャ; # to HALFWIDTH KATAKANA LETTER SMALL YA -ュ<>ï½­; # to HALFWIDTH KATAKANA LETTER SMALL YU -ョ<>ï½®; # to HALFWIDTH KATAKANA LETTER SMALL YO -ッ<>ッ; # to HALFWIDTH KATAKANA LETTER SMALL TU -ー<>ï½°; # to HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -ア<>ï½±; # to HALFWIDTH KATAKANA LETTER A -イ<>ï½²; # to HALFWIDTH KATAKANA LETTER I -ウ<>ï½³; # to HALFWIDTH KATAKANA LETTER U -エ<>ï½´; # to HALFWIDTH KATAKANA LETTER E -オ<>ï½µ; # to HALFWIDTH KATAKANA LETTER O -カ<>カ; # to HALFWIDTH KATAKANA LETTER KA -キ<>ï½·; # to HALFWIDTH KATAKANA LETTER KI -ク<>ク; # to HALFWIDTH KATAKANA LETTER KU -ケ<>ï½¹; # to HALFWIDTH KATAKANA LETTER KE -コ<>コ; # to HALFWIDTH KATAKANA LETTER KO -サ<>ï½»; # to HALFWIDTH KATAKANA LETTER SA -シ<>ï½¼; # to HALFWIDTH KATAKANA LETTER SI -ス<>ï½½; # to HALFWIDTH KATAKANA LETTER SU -セ<>ï½¾; # to HALFWIDTH KATAKANA LETTER SE -ソ<>ソ; # to HALFWIDTH KATAKANA LETTER SO -タ<>タ; # to HALFWIDTH KATAKANA LETTER TA -チ<>チ; # to HALFWIDTH KATAKANA LETTER TI -ツ<>ツ; # to HALFWIDTH KATAKANA LETTER TU -テ<>テ; # to HALFWIDTH KATAKANA LETTER TE -ト<>ト; # to HALFWIDTH KATAKANA LETTER TO -ナ<>ナ; # to HALFWIDTH KATAKANA LETTER NA -ニ<>ニ; # to HALFWIDTH KATAKANA LETTER NI -ヌ<>ヌ; # to HALFWIDTH KATAKANA LETTER NU -ネ<>ネ; # to HALFWIDTH KATAKANA LETTER NE -ノ<>ノ; # to HALFWIDTH KATAKANA LETTER NO -ハ<>ハ; # to HALFWIDTH KATAKANA LETTER HA -ヒ<>ヒ; # to HALFWIDTH KATAKANA LETTER HI -フ<>フ; # to HALFWIDTH KATAKANA LETTER HU -ヘ<>ヘ; # to HALFWIDTH KATAKANA LETTER HE -ホ<>ホ; # to HALFWIDTH KATAKANA LETTER HO -マ<>マ; # to HALFWIDTH KATAKANA LETTER MA -ミ<>ミ; # to HALFWIDTH KATAKANA LETTER MI -ム<>ム; # to HALFWIDTH KATAKANA LETTER MU -メ<>メ; # to HALFWIDTH KATAKANA LETTER ME -モ<>モ; # to HALFWIDTH KATAKANA LETTER MO -ヤ<>ヤ; # to HALFWIDTH KATAKANA LETTER YA -ユ<>ユ; # to HALFWIDTH KATAKANA LETTER YU -ヨ<>ヨ; # to HALFWIDTH KATAKANA LETTER YO -ラ<>ラ; # to HALFWIDTH KATAKANA LETTER RA -リ<>リ; # to HALFWIDTH KATAKANA LETTER RI -ル<>ル; # to HALFWIDTH KATAKANA LETTER RU -レ<>レ; # to HALFWIDTH KATAKANA LETTER RE -ロ<>ロ; # to HALFWIDTH KATAKANA LETTER RO -ワ<>ワ; # to HALFWIDTH KATAKANA LETTER WA -ン<>ン; # to HALFWIDTH KATAKANA LETTER N -゙<>゙; # to HALFWIDTH KATAKANA VOICED SOUND MARK -゚<>゚; # to HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -ᅠ<>ï¾ ; # to HALFWIDTH HANGUL FILLER -ᄀ<>ᄀ; # to HALFWIDTH HANGUL LETTER KIYEOK -ᄁ<>ï¾¢; # to HALFWIDTH HANGUL LETTER SSANGKIYEOK -ᆪ<>ï¾£; # to HALFWIDTH HANGUL LETTER KIYEOK-SIOS -ᄂ<>ᄂ; # to HALFWIDTH HANGUL LETTER NIEUN -ᆬ<>ï¾¥; # to HALFWIDTH HANGUL LETTER NIEUN-CIEUC -ᆭ<>ᆭ; # to HALFWIDTH HANGUL LETTER NIEUN-HIEUH -ᄃ<>ᄃ; # to HALFWIDTH HANGUL LETTER TIKEUT -ᄄ<>ᄄ; # to HALFWIDTH HANGUL LETTER SSANGTIKEUT -ᄅ<>ᄅ; # to HALFWIDTH HANGUL LETTER RIEUL -ᆰ<>ᆰ; # to HALFWIDTH HANGUL LETTER RIEUL-KIYEOK -ᆱ<>ᆱ; # to HALFWIDTH HANGUL LETTER RIEUL-MIEUM -ᆲ<>ᆲ; # to HALFWIDTH HANGUL LETTER RIEUL-PIEUP -ᆳ<>ï¾­; # to HALFWIDTH HANGUL LETTER RIEUL-SIOS -ᆴ<>ï¾®; # to HALFWIDTH HANGUL LETTER RIEUL-THIEUTH -ᆵ<>ᆵ; # to HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH -ᄚ<>ï¾°; # to HALFWIDTH HANGUL LETTER RIEUL-HIEUH -ᄆ<>ï¾±; # to HALFWIDTH HANGUL LETTER MIEUM -ᄇ<>ï¾²; # to HALFWIDTH HANGUL LETTER PIEUP -ᄈ<>ï¾³; # to HALFWIDTH HANGUL LETTER SSANGPIEUP -ᄡ<>ï¾´; # to HALFWIDTH HANGUL LETTER PIEUP-SIOS -ᄉ<>ï¾µ; # to HALFWIDTH HANGUL LETTER SIOS -ᄊ<>ᄊ; # to HALFWIDTH HANGUL LETTER SSANGSIOS -ᄋ<>ï¾·; # to HALFWIDTH HANGUL LETTER IEUNG -ᄌ<>ᄌ; # to HALFWIDTH HANGUL LETTER CIEUC -ᄍ<>ï¾¹; # to HALFWIDTH HANGUL LETTER SSANGCIEUC -ᄎ<>ᄎ; # to HALFWIDTH HANGUL LETTER CHIEUCH -ᄏ<>ï¾»; # to HALFWIDTH HANGUL LETTER KHIEUKH -ᄐ<>ï¾¼; # to HALFWIDTH HANGUL LETTER THIEUTH -ᄑ<>ï¾½; # to HALFWIDTH HANGUL LETTER PHIEUPH -ᄒ<>ï¾¾; # to HALFWIDTH HANGUL LETTER HIEUH -ᅡ<>ᅡ; # to HALFWIDTH HANGUL LETTER A -ᅢ<>ᅢ; # to HALFWIDTH HANGUL LETTER AE -ᅣ<>ᅣ; # to HALFWIDTH HANGUL LETTER YA -ᅤ<>ᅤ; # to HALFWIDTH HANGUL LETTER YAE -ᅥ<>ᅥ; # to HALFWIDTH HANGUL LETTER EO -ᅦ<>ᅦ; # to HALFWIDTH HANGUL LETTER E -ᅧ<>ᅧ; # to HALFWIDTH HANGUL LETTER YEO -ᅨ<>ᅨ; # to HALFWIDTH HANGUL LETTER YE -ᅩ<>ᅩ; # to HALFWIDTH HANGUL LETTER O -ᅪ<>ᅪ; # to HALFWIDTH HANGUL LETTER WA -ᅫ<>ᅫ; # to HALFWIDTH HANGUL LETTER WAE -ᅬ<>ᅬ; # to HALFWIDTH HANGUL LETTER OE -ᅭ<>ᅭ; # to HALFWIDTH HANGUL LETTER YO -ᅮ<>ᅮ; # to HALFWIDTH HANGUL LETTER U -ᅯ<>ᅯ; # to HALFWIDTH HANGUL LETTER WEO -ᅰ<>ᅰ; # to HALFWIDTH HANGUL LETTER WE -ᅱ<>ᅱ; # to HALFWIDTH HANGUL LETTER WI -ᅲ<>ᅲ; # to HALFWIDTH HANGUL LETTER YU -ᅳ<>ᅳ; # to HALFWIDTH HANGUL LETTER EU -ᅴ<>ᅴ; # to HALFWIDTH HANGUL LETTER YI -ᅵ<>ᅵ; # to HALFWIDTH HANGUL LETTER I -ï¿ <>'¢'; # from FULLWIDTH CENT SIGN -ï¿¡<>'£'; # from FULLWIDTH POUND SIGN -ï¿¢<>'¬'; # from FULLWIDTH NOT SIGN -ï¿£<>'¯'; # from FULLWIDTH MACRON -' '<>' '; # ideographic space (place this after MACRON) -¦<>'¦'; # from FULLWIDTH BROKEN BAR -ï¿¥<>'Â¥'; # from FULLWIDTH YEN SIGN -₩<>₩; # from FULLWIDTH WON SIGN -│<>│; # to HALFWIDTH FORMS LIGHT VERTICAL -'←'<>'ï¿©'; # to HALFWIDTH LEFTWARDS ARROW -↑<>↑; # to HALFWIDTH UPWARDS ARROW -'→'<>'ï¿«'; # to HALFWIDTH RIGHTWARDS ARROW -↓<>↓; # to HALFWIDTH DOWNWARDS ARROW -■<>ï¿­; # to HALFWIDTH BLACK SQUARE -○<>ï¿®; # to HALFWIDTH WHITE CIRCLE - -# eof - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Fullwidth_Halfwidth.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +ガ<>ガ; # to KATAKANA LETTER GA +ギ<>ギ; # to KATAKANA LETTER GI +グ<>グ; # to KATAKANA LETTER GU +ゲ<>ゲ; # to KATAKANA LETTER GE +ゴ<>ゴ; # to KATAKANA LETTER GO +ザ<>ザ; # to KATAKANA LETTER ZA +ジ<>ジ; # to KATAKANA LETTER ZI +ズ<>ズ; # to KATAKANA LETTER ZU +ゼ<>ゼ; # to KATAKANA LETTER ZE +ゾ<>ゾ; # to KATAKANA LETTER ZO +ダ<>ダ; # to KATAKANA LETTER DA +ヂ<>ヂ; # to KATAKANA LETTER DI +ヅ<>ヅ; # to KATAKANA LETTER DU +デ<>デ; # to KATAKANA LETTER DE +ド<>ド; # to KATAKANA LETTER DO +バ<>バ; # to KATAKANA LETTER BA +パ<>パ; # to KATAKANA LETTER PA +ビ<>ビ; # to KATAKANA LETTER BI +ピ<>ピ; # to KATAKANA LETTER PI +ブ<>ブ; # to KATAKANA LETTER BU +プ<>プ; # to KATAKANA LETTER PU +ベ<>ベ; # to KATAKANA LETTER BE +ペ<>ペ; # to KATAKANA LETTER PE +ボ<>ボ; # to KATAKANA LETTER BO +ポ<>ポ; # to KATAKANA LETTER PO +ヴ<>ヴ; # to KATAKANA LETTER VU +ヷ<>ヷ; # to KATAKANA LETTER VA +ヺ<>ヺ; # to KATAKANA LETTER VO +!<>'!'; # from FULLWIDTH EXCLAMATION MARK +"<>'"'; # from FULLWIDTH QUOTATION MARK +#<>'#'; # from FULLWIDTH NUMBER SIGN +$<>'$'; # from FULLWIDTH DOLLAR SIGN +%<>'%'; # from FULLWIDTH PERCENT SIGN +&<>'&'; # from FULLWIDTH AMPERSAND +'<>''; # from FULLWIDTH APOSTROPHE +(<>'('; # from FULLWIDTH LEFT PARENTHESIS +)<>')'; # from FULLWIDTH RIGHT PARENTHESIS +*<>'*'; # from FULLWIDTH ASTERISK ++<>'+'; # from FULLWIDTH PLUS SIGN +,<>','; # from FULLWIDTH COMMA +-<>'-'; # from FULLWIDTH HYPHEN-MINUS +.<>'.'; # from FULLWIDTH FULL STOP +/<>'/'; # from FULLWIDTH SOLIDUS +0<>'0'; # from FULLWIDTH DIGIT ZERO +1<>'1'; # from FULLWIDTH DIGIT ONE +2<>'2'; # from FULLWIDTH DIGIT TWO +3<>'3'; # from FULLWIDTH DIGIT THREE +4<>'4'; # from FULLWIDTH DIGIT FOUR +5<>'5'; # from FULLWIDTH DIGIT FIVE +6<>'6'; # from FULLWIDTH DIGIT SIX +7<>'7'; # from FULLWIDTH DIGIT SEVEN +8<>'8'; # from FULLWIDTH DIGIT EIGHT +9<>'9'; # from FULLWIDTH DIGIT NINE +:<>':'; # from FULLWIDTH COLON +;<>';'; # from FULLWIDTH SEMICOLON +<<>'<'; # from FULLWIDTH LESS-THAN SIGN +=<>'='; # from FULLWIDTH EQUALS SIGN +><>'>'; # from FULLWIDTH GREATER-THAN SIGN +?<>'?'; # from FULLWIDTH QUESTION MARK +ï¼ <>'@'; # from FULLWIDTH COMMERCIAL AT +A<>A; # from FULLWIDTH LATIN CAPITAL LETTER A +ï¼¢<>B; # from FULLWIDTH LATIN CAPITAL LETTER B +ï¼£<>C; # from FULLWIDTH LATIN CAPITAL LETTER C +D<>D; # from FULLWIDTH LATIN CAPITAL LETTER D +ï¼¥<>E; # from FULLWIDTH LATIN CAPITAL LETTER E +F<>F; # from FULLWIDTH LATIN CAPITAL LETTER F +G<>G; # from FULLWIDTH LATIN CAPITAL LETTER G +H<>H; # from FULLWIDTH LATIN CAPITAL LETTER H +I<>I; # from FULLWIDTH LATIN CAPITAL LETTER I +J<>J; # from FULLWIDTH LATIN CAPITAL LETTER J +K<>K; # from FULLWIDTH LATIN CAPITAL LETTER K +L<>L; # from FULLWIDTH LATIN CAPITAL LETTER L +ï¼­<>M; # from FULLWIDTH LATIN CAPITAL LETTER M +ï¼®<>N; # from FULLWIDTH LATIN CAPITAL LETTER N +O<>O; # from FULLWIDTH LATIN CAPITAL LETTER O +ï¼°<>P; # from FULLWIDTH LATIN CAPITAL LETTER P +ï¼±<>Q; # from FULLWIDTH LATIN CAPITAL LETTER Q +ï¼²<>R; # from FULLWIDTH LATIN CAPITAL LETTER R +ï¼³<>S; # from FULLWIDTH LATIN CAPITAL LETTER S +ï¼´<>T; # from FULLWIDTH LATIN CAPITAL LETTER T +ï¼µ<>U; # from FULLWIDTH LATIN CAPITAL LETTER U +V<>V; # from FULLWIDTH LATIN CAPITAL LETTER V +ï¼·<>W; # from FULLWIDTH LATIN CAPITAL LETTER W +X<>X; # from FULLWIDTH LATIN CAPITAL LETTER X +ï¼¹<>Y; # from FULLWIDTH LATIN CAPITAL LETTER Y +Z<>Z; # from FULLWIDTH LATIN CAPITAL LETTER Z +ï¼»<>'['; # from FULLWIDTH LEFT SQUARE BRACKET +ï¼¼<>'\\'; # from FULLWIDTH REVERSE SOLIDUS {double escape - aliu} +ï¼½<>']'; # from FULLWIDTH RIGHT SQUARE BRACKET +ï¼¾<>'^'; # from FULLWIDTH CIRCUMFLEX ACCENT +_<>'_'; # from FULLWIDTH LOW LINE +`<>'`'; # from FULLWIDTH GRAVE ACCENT +a<>a; # from FULLWIDTH LATIN SMALL LETTER A +b<>b; # from FULLWIDTH LATIN SMALL LETTER B +c<>c; # from FULLWIDTH LATIN SMALL LETTER C +d<>d; # from FULLWIDTH LATIN SMALL LETTER D +e<>e; # from FULLWIDTH LATIN SMALL LETTER E +f<>f; # from FULLWIDTH LATIN SMALL LETTER F +g<>g; # from FULLWIDTH LATIN SMALL LETTER G +h<>h; # from FULLWIDTH LATIN SMALL LETTER H +i<>i; # from FULLWIDTH LATIN SMALL LETTER I +j<>j; # from FULLWIDTH LATIN SMALL LETTER J +k<>k; # from FULLWIDTH LATIN SMALL LETTER K +l<>l; # from FULLWIDTH LATIN SMALL LETTER L +m<>m; # from FULLWIDTH LATIN SMALL LETTER M +n<>n; # from FULLWIDTH LATIN SMALL LETTER N +o<>o; # from FULLWIDTH LATIN SMALL LETTER O +p<>p; # from FULLWIDTH LATIN SMALL LETTER P +q<>q; # from FULLWIDTH LATIN SMALL LETTER Q +r<>r; # from FULLWIDTH LATIN SMALL LETTER R +s<>s; # from FULLWIDTH LATIN SMALL LETTER S +t<>t; # from FULLWIDTH LATIN SMALL LETTER T +u<>u; # from FULLWIDTH LATIN SMALL LETTER U +v<>v; # from FULLWIDTH LATIN SMALL LETTER V +w<>w; # from FULLWIDTH LATIN SMALL LETTER W +x<>x; # from FULLWIDTH LATIN SMALL LETTER X +y<>y; # from FULLWIDTH LATIN SMALL LETTER Y +z<>z; # from FULLWIDTH LATIN SMALL LETTER Z +{<>'{'; # from FULLWIDTH LEFT CURLY BRACKET +|<>'|'; # from FULLWIDTH VERTICAL LINE +}<>'}'; # from FULLWIDTH RIGHT CURLY BRACKET +~<>'~'; # from FULLWIDTH TILDE +。<>。; # to HALFWIDTH IDEOGRAPHIC FULL STOP +「<>ï½¢; # to HALFWIDTH LEFT CORNER BRACKET +」<>ï½£; # to HALFWIDTH RIGHT CORNER BRACKET +、<>、; # to HALFWIDTH IDEOGRAPHIC COMMA +・<>ï½¥; # to HALFWIDTH KATAKANA MIDDLE DOT +ヲ<>ヲ; # to HALFWIDTH KATAKANA LETTER WO +ァ<>ァ; # to HALFWIDTH KATAKANA LETTER SMALL A +ィ<>ィ; # to HALFWIDTH KATAKANA LETTER SMALL I +ゥ<>ゥ; # to HALFWIDTH KATAKANA LETTER SMALL U +ェ<>ェ; # to HALFWIDTH KATAKANA LETTER SMALL E +ォ<>ォ; # to HALFWIDTH KATAKANA LETTER SMALL O +ャ<>ャ; # to HALFWIDTH KATAKANA LETTER SMALL YA +ュ<>ï½­; # to HALFWIDTH KATAKANA LETTER SMALL YU +ョ<>ï½®; # to HALFWIDTH KATAKANA LETTER SMALL YO +ッ<>ッ; # to HALFWIDTH KATAKANA LETTER SMALL TU +ー<>ï½°; # to HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +ア<>ï½±; # to HALFWIDTH KATAKANA LETTER A +イ<>ï½²; # to HALFWIDTH KATAKANA LETTER I +ウ<>ï½³; # to HALFWIDTH KATAKANA LETTER U +エ<>ï½´; # to HALFWIDTH KATAKANA LETTER E +オ<>ï½µ; # to HALFWIDTH KATAKANA LETTER O +カ<>カ; # to HALFWIDTH KATAKANA LETTER KA +キ<>ï½·; # to HALFWIDTH KATAKANA LETTER KI +ク<>ク; # to HALFWIDTH KATAKANA LETTER KU +ケ<>ï½¹; # to HALFWIDTH KATAKANA LETTER KE +コ<>コ; # to HALFWIDTH KATAKANA LETTER KO +サ<>ï½»; # to HALFWIDTH KATAKANA LETTER SA +シ<>ï½¼; # to HALFWIDTH KATAKANA LETTER SI +ス<>ï½½; # to HALFWIDTH KATAKANA LETTER SU +セ<>ï½¾; # to HALFWIDTH KATAKANA LETTER SE +ソ<>ソ; # to HALFWIDTH KATAKANA LETTER SO +タ<>タ; # to HALFWIDTH KATAKANA LETTER TA +チ<>チ; # to HALFWIDTH KATAKANA LETTER TI +ツ<>ツ; # to HALFWIDTH KATAKANA LETTER TU +テ<>テ; # to HALFWIDTH KATAKANA LETTER TE +ト<>ト; # to HALFWIDTH KATAKANA LETTER TO +ナ<>ナ; # to HALFWIDTH KATAKANA LETTER NA +ニ<>ニ; # to HALFWIDTH KATAKANA LETTER NI +ヌ<>ヌ; # to HALFWIDTH KATAKANA LETTER NU +ネ<>ネ; # to HALFWIDTH KATAKANA LETTER NE +ノ<>ノ; # to HALFWIDTH KATAKANA LETTER NO +ハ<>ハ; # to HALFWIDTH KATAKANA LETTER HA +ヒ<>ヒ; # to HALFWIDTH KATAKANA LETTER HI +フ<>フ; # to HALFWIDTH KATAKANA LETTER HU +ヘ<>ヘ; # to HALFWIDTH KATAKANA LETTER HE +ホ<>ホ; # to HALFWIDTH KATAKANA LETTER HO +マ<>マ; # to HALFWIDTH KATAKANA LETTER MA +ミ<>ミ; # to HALFWIDTH KATAKANA LETTER MI +ム<>ム; # to HALFWIDTH KATAKANA LETTER MU +メ<>メ; # to HALFWIDTH KATAKANA LETTER ME +モ<>モ; # to HALFWIDTH KATAKANA LETTER MO +ヤ<>ヤ; # to HALFWIDTH KATAKANA LETTER YA +ユ<>ユ; # to HALFWIDTH KATAKANA LETTER YU +ヨ<>ヨ; # to HALFWIDTH KATAKANA LETTER YO +ラ<>ラ; # to HALFWIDTH KATAKANA LETTER RA +リ<>リ; # to HALFWIDTH KATAKANA LETTER RI +ル<>ル; # to HALFWIDTH KATAKANA LETTER RU +レ<>レ; # to HALFWIDTH KATAKANA LETTER RE +ロ<>ロ; # to HALFWIDTH KATAKANA LETTER RO +ワ<>ワ; # to HALFWIDTH KATAKANA LETTER WA +ン<>ン; # to HALFWIDTH KATAKANA LETTER N +\u3099<>゙; # to HALFWIDTH KATAKANA VOICED SOUND MARK +\u309A<>゚; # to HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +\u1160<>\uFFA0; # to HALFWIDTH HANGUL FILLER +ᄀ<>ᄀ; # to HALFWIDTH HANGUL LETTER KIYEOK +ᄁ<>ï¾¢; # to HALFWIDTH HANGUL LETTER SSANGKIYEOK +ᆪ<>ï¾£; # to HALFWIDTH HANGUL LETTER KIYEOK-SIOS +ᄂ<>ᄂ; # to HALFWIDTH HANGUL LETTER NIEUN +ᆬ<>ï¾¥; # to HALFWIDTH HANGUL LETTER NIEUN-CIEUC +ᆭ<>ᆭ; # to HALFWIDTH HANGUL LETTER NIEUN-HIEUH +ᄃ<>ᄃ; # to HALFWIDTH HANGUL LETTER TIKEUT +ᄄ<>ᄄ; # to HALFWIDTH HANGUL LETTER SSANGTIKEUT +ᄅ<>ᄅ; # to HALFWIDTH HANGUL LETTER RIEUL +ᆰ<>ᆰ; # to HALFWIDTH HANGUL LETTER RIEUL-KIYEOK +ᆱ<>ᆱ; # to HALFWIDTH HANGUL LETTER RIEUL-MIEUM +ᆲ<>ᆲ; # to HALFWIDTH HANGUL LETTER RIEUL-PIEUP +ᆳ<>ï¾­; # to HALFWIDTH HANGUL LETTER RIEUL-SIOS +ᆴ<>ï¾®; # to HALFWIDTH HANGUL LETTER RIEUL-THIEUTH +ᆵ<>ᆵ; # to HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH +ᄚ<>ï¾°; # to HALFWIDTH HANGUL LETTER RIEUL-HIEUH +ᄆ<>ï¾±; # to HALFWIDTH HANGUL LETTER MIEUM +ᄇ<>ï¾²; # to HALFWIDTH HANGUL LETTER PIEUP +ᄈ<>ï¾³; # to HALFWIDTH HANGUL LETTER SSANGPIEUP +ᄡ<>ï¾´; # to HALFWIDTH HANGUL LETTER PIEUP-SIOS +ᄉ<>ï¾µ; # to HALFWIDTH HANGUL LETTER SIOS +ᄊ<>ᄊ; # to HALFWIDTH HANGUL LETTER SSANGSIOS +ᄋ<>ï¾·; # to HALFWIDTH HANGUL LETTER IEUNG +ᄌ<>ᄌ; # to HALFWIDTH HANGUL LETTER CIEUC +ᄍ<>ï¾¹; # to HALFWIDTH HANGUL LETTER SSANGCIEUC +ᄎ<>ᄎ; # to HALFWIDTH HANGUL LETTER CHIEUCH +ᄏ<>ï¾»; # to HALFWIDTH HANGUL LETTER KHIEUKH +ᄐ<>ï¾¼; # to HALFWIDTH HANGUL LETTER THIEUTH +ᄑ<>ï¾½; # to HALFWIDTH HANGUL LETTER PHIEUPH +ᄒ<>ï¾¾; # to HALFWIDTH HANGUL LETTER HIEUH +ᅡ<>ᅡ; # to HALFWIDTH HANGUL LETTER A +ᅢ<>ᅢ; # to HALFWIDTH HANGUL LETTER AE +ᅣ<>ᅣ; # to HALFWIDTH HANGUL LETTER YA +ᅤ<>ᅤ; # to HALFWIDTH HANGUL LETTER YAE +ᅥ<>ᅥ; # to HALFWIDTH HANGUL LETTER EO +ᅦ<>ᅦ; # to HALFWIDTH HANGUL LETTER E +ᅧ<>ᅧ; # to HALFWIDTH HANGUL LETTER YEO +ᅨ<>ᅨ; # to HALFWIDTH HANGUL LETTER YE +ᅩ<>ᅩ; # to HALFWIDTH HANGUL LETTER O +ᅪ<>ᅪ; # to HALFWIDTH HANGUL LETTER WA +ᅫ<>ᅫ; # to HALFWIDTH HANGUL LETTER WAE +ᅬ<>ᅬ; # to HALFWIDTH HANGUL LETTER OE +ᅭ<>ᅭ; # to HALFWIDTH HANGUL LETTER YO +ᅮ<>ᅮ; # to HALFWIDTH HANGUL LETTER U +ᅯ<>ᅯ; # to HALFWIDTH HANGUL LETTER WEO +ᅰ<>ᅰ; # to HALFWIDTH HANGUL LETTER WE +ᅱ<>ᅱ; # to HALFWIDTH HANGUL LETTER WI +ᅲ<>ᅲ; # to HALFWIDTH HANGUL LETTER YU +ᅳ<>ᅳ; # to HALFWIDTH HANGUL LETTER EU +ᅴ<>ᅴ; # to HALFWIDTH HANGUL LETTER YI +ᅵ<>ᅵ; # to HALFWIDTH HANGUL LETTER I +ï¿ <>'¢'; # from FULLWIDTH CENT SIGN +ï¿¡<>'£'; # from FULLWIDTH POUND SIGN +ï¿¢<>'¬'; # from FULLWIDTH NOT SIGN +ï¿£<>'¯'; # from FULLWIDTH MACRON +\u3000<>' '; # ideographic space (place this after MACRON) +¦<>'¦'; # from FULLWIDTH BROKEN BAR +ï¿¥<>'Â¥'; # from FULLWIDTH YEN SIGN +₩<>₩; # from FULLWIDTH WON SIGN +│<>│; # to HALFWIDTH FORMS LIGHT VERTICAL +'<'<>'ï¿©'; # to HALFWIDTH LEFTWARDS ARROW +↑<>↑; # to HALFWIDTH UPWARDS ARROW +'>'<>'ï¿«'; # to HALFWIDTH RIGHTWARDS ARROW +↓<>↓; # to HALFWIDTH DOWNWARDS ARROW +■<>ï¿­; # to HALFWIDTH BLACK SQUARE +○<>ï¿®; # to HALFWIDTH WHITE CIRCLE diff --git a/icuSources/data/translit/Georgian_Latin.txt b/icuSources/data/translit/Georgian_Latin.txt new file mode 100644 index 00000000..f4933968 --- /dev/null +++ b/icuSources/data/translit/Georgian_Latin.txt @@ -0,0 +1,44 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Georgian_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +წ <> tsʼ ; +კ <> kʼ ; +პ <> pʼ ; +ჟ <> zh ; +ტ <> tʼ ; +ღ <> gh ; +ყ <> qʼ ; +შ <> sh ; +ჭ <> chʼ ; +ჩ <> ch ; +ც <> ts ; +ძ <> dz ; +ხ <> kh ; +ჳ <> Å­i ; +ა <> a ; +ბ <> b ; +გ <> g ; +დ <> d ; +ე <> e ; +ვ <> v ; +ზ <> z ; +თ <> t ; +ი <> i ; +ლ <> l ; +მ <> m ; +ნ <> n ; +ო <> o ; +რ <> r ; +ს <> s ; +უ <> u ; +ფ <> p ; +ქ <> k ; +ჯ <> j ; +ჰ <> h ; +ჴ <> q ; diff --git a/icuSources/data/translit/Greek_Latin.txt b/icuSources/data/translit/Greek_Latin.txt index 221e5d08..d7f00832 100644 --- a/icuSources/data/translit/Greek_Latin.txt +++ b/icuSources/data/translit/Greek_Latin.txt @@ -1,296 +1,172 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Rules are predicated on running NFD first, and NFC afterwards -# :: [\u0000-\u007F \u0370-\u03FF [:Greek:] [:nonspacing mark:]] ; -# MINIMAL FILTER GENERATED FOR: Greek-Latin -:: [;\u00B5\u00B7\u00C4\u00CB\u00CF\u00D6\u00DC\u00E4\u00EB\u00EF\u00F6\u00FC\u00FF-\u0101\u0112-\u0113\u012A-\u012B\u014C-\u014D\u016A-\u016B\u0178\u01D5-\u01DC\u01DE-\u01E3\u01EC-\u01ED\u022A-\u022D\u0230-\u0233\u0304\u0308\u0313-\u0314\u0342-\u0345\u037A\u037E\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D7\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F5\u03F7-\u07FB\u0401\u0407\u0451\u0457\u04D2-\u04D3\u04DA-\u04DF\u04E2-\u04E7\u04EA-\u04F1\u04F4-\u04F5\u04F8-\u04F9\u1E14-\u1E17\u1E20-\u1E21\u1E26-\u1E27\u1E2E-\u1E2F\u1E38-\u1E39\u1E4E-\u1E53\u1E5C-\u1E5D\u1E7A-\u1E7B\u1E84-\u1E85\u1E8C-\u1E8D\u1E97\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC1-\u1FC4\u1FC6-\u1FCC\u1FCF-\u1FD3\u1FD6-\u1FDB\u1FDF-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u03F9] ; - -:: NFD (NFC) ; - -# TEST CASES - -# Ὀλίγοι ἔμφονες πολλῶν ἀφρόνων φοβερώτεροι — Πλάτωνος -# ᾂ ᾒ á¾¢ ᾃ ᾓ á¾£ -# á¾³ ῃ ῳ ὃ ὄ -# ὠς ὡς ὢς ὣς -# Ὠς Ὡς Ὢς Ὣς -# ὨΣ ὩΣ ὪΣ ὫΣ -# Ạ, ạ, Ẹ, ẹ, Ọ, ọ - -# Useful variables - -$lower = [[:latin:][:greek:] & [:Ll:]]; -$glower = [[:greek:] & [:Ll:]]; -$upper = [[:latin:][:greek:] & [:Lu:]] ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Greek_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +:: [;µ·ÄËÏÖÜäëïöüÿ-āĒ-ēĪ-īŌ-ōŪ-ūŸǕ-ǜǞ-ǣǬ-ǭȪ-È­È°-ȳ\u0304\u0308\u0313-\u0314\u0342-\u0345ͺ;Ά-ΊΌΎ-ΡΣ-ώϐ-ϗϛϝϟϡϣϥϧϩϫϭϯ-ϵϷ-\u07FBЁЇёїӒ-ӓӚ-ӟӢ-Ó§Óª-Ó±Ó´-ÓµÓ¸-ӹḔ-ḗḠ-ḡḦ-ḧḮ-ḯḸ-ḹṎ-ṓṜ-ṝṺ-ṻẄ-ẅẌ-ẍẗἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼι῁-ῄῆ-ῌ῏-ΐῖ-Ί῟-Ῥῲ-ῴῶ-ῼΩϹ] ; +:: NFD (NFC) ; +$lower = [[:latin:][:greek:] & [:Ll:]]; +$glower = [[:greek:] & [:Ll:]]; +$upper = [[:latin:][:greek:] & [:Lu:]] ; $accent = [:M:] ; - -# NOTE: restrict to just the Greek & Latin accents that we care about -# TODO: broaden out once interation is fixed $accentMinus = [ [\u0300-\u0345] & [:M:] - [\u0338]] ; - $macron = \u0304 ; $ddot = \u0308 ; $ddotmac = [$ddot$macron]; - -$lcgvowel = [αεηιουω] ; -$ucgvowel = [ΑΕΗΙΟΥΩ] ; -$gvowel = [$lcgvowel $ucgvowel] ; -$lcgvowelC = [$lcgvowel $accent] ; - +$lcgvowel = [αεηιουω] ; +$ucgvowel = [ΑΕΗΙΟΥΩ] ; +$gvowel = [$lcgvowel $ucgvowel] ; +$lcgvowelC = [$lcgvowel $accent] ; $evowel = [aeiouyAEIOUY]; $evowel2 = [iuyIUY]; -$vowel = [ $evowel $gvowel] ; - -$gammaLike = [ΓΚΞΧγκξχϰ] ; -$egammaLike = [GKXCgkxc] ; -$smooth = ̓ ; -$rough = ̔ ; -$iotasub = ͅ ; - +$vowel = [ $evowel $gvowel] ; +$gammaLike = [ΓΚΞΧγκξχϰ] ; +$egammaLike = [GKXCgkxc] ; +$smooth = \u0313 ; +$rough = \u0314 ; +$iotasub = \u0345 ; $evowel_i = [$evowel-[iI]] ; $evowel2_i = [uyUY]; - $underbar = \u0331; - $afterLetter = [:L:] [[:M:]\']* ; $beforeLetter = [[:M:]\']* [:L:] ; -$beforeLower = $accent * $lower ; - +$beforeLower = $accent * $lower ; $notLetter = [^[:L:][:M:]] ; -$under = ̱; - -# Fix punctuation -# preserve original +$under = \u0331; \: <> \: $under ; \? <> \? $under ; - \; <> \? ; · <> \: ; - -# CIRCUMFLEX: convert greek circumflex to normal one. Could use tilde or inverted breve - -\u0342 <> \u0302 ; - -# IOTA: convert iota subscript to iota -# first make previous alpha long! - +\u0342 <> \u0302 ; $accent_minus = [[$accent]-[$iotasub$macron]]; - -Α } $accent_minus * $iotasub > | Α $macron ; -α } $accent_minus * $iotasub > | α $macron ; - -# now convert to uppercase if after uppercase, ow to lowercase - -$upper $accent * { $iotasub > I ; -$iotasub > i ; - +Α } $accent_minus * $iotasub > | Α $macron ; +α } $accent_minus * $iotasub > | α $macron ; +$upper $accent * { $iotasub > I ; +$iotasub > i ; | $1 $iotasub < ($evowel $macron $accentMinus *) i ; | $1 $iotasub < ($evowel $macron $accentMinus *) I ; - -# BREATHING - -# Convert rough breathing to h, and move before letters. - -# Make A ` x = > H a x - - Α ($macron?) $rough } $beforeLower > H | α $1; - Ε $rough } $beforeLower > H | ε; - Η $rough } $beforeLower > H | η ; - Ι ($ddot?) $rough } $beforeLower > H | ι $1; - Ο $rough } $beforeLower > H | ο ; - Î¥ $rough } $beforeLower > H | υ ; - Ω ($ddot?) $rough } $beforeLower > H | ω $1; - -# Make A x ` = > H a x - -Α ($glower $macron?) $rough > H | α $1 ; -Ε ($glower) $rough > H | ε $1 ; -Η ($glower) $rough > H | η $1 ; -Ι ($glower $ddot?) $rough > H | ι $1 ; -Ο ($glower) $rough > H | ο $1 ; -Î¥ ($glower) $rough > H | υ $1 ; -Ω ($glower $ddot?) $rough > H | ω $1 ; - -#Otherwise, make x ` into h x and X ` into H X - -($lcgvowel + $ddotmac? ) $rough > h | $1 ; -($gvowel + $ddotmac? ) $rough > H | $1 ; - -# Go backwards with H - +Α ($macron?) $rough } $beforeLower > H | α $1; +Ε $rough } $beforeLower > H | ε; +Η $rough } $beforeLower > H | η ; +Ι ($ddot?) $rough } $beforeLower > H | ι $1; +Ο $rough } $beforeLower > H | ο ; +Î¥ $rough } $beforeLower > H | υ ; +Ω ($ddot?) $rough } $beforeLower > H | ω $1; +Α ($glower $macron?) $rough > H | α $1 ; +Ε ($glower) $rough > H | ε $1 ; +Η ($glower) $rough > H | η $1 ; +Ι ($glower $ddot?) $rough > H | ι $1 ; +Ο ($glower) $rough > H | ο $1 ; +Î¥ ($glower) $rough > H | υ $1 ; +Ω ($glower $ddot?) $rough > H | ω $1 ; +($lcgvowel + $ddotmac? ) $rough > h | $1 ; +($gvowel + $ddotmac? ) $rough > H | $1 ; | $1 $rough < h ($evowel $macron $ddot? $evowel2_i $macron?) ; | $1 $rough < h ($evowel $ddot? $evowel2 $macron?) ; | $1 $rough < h ($evowel $macron? $ddot?) ; - | $1 $rough < H ([AEIOUY] $macron $ddot? $evowel2_i $macron?) ; | $1 $rough < H ([AEIOUY] $ddot? $evowel2 $macron?) ; | $1 $rough < H ([AEIOUY] $macron? $ddot?) ; - -# titlecase, have to fix individually -# in the future, we should add &uppercase() to make this easier - | A $1 $rough < H a ($macron $ddot? $evowel2_i $macron?) ; | E $1 $rough < H e ($macron $ddot? $evowel2_i $macron?) ; | I $1 $rough < H i ($macron $ddot? $evowel2_i $macron?) ; | O $1 $rough < H o ($macron $ddot? $evowel2_i $macron?) ; | U $1 $rough < H u ($macron $ddot? $evowel2_i $macron?) ; | Y $1 $rough < H y ($macron $ddot? $evowel2_i $macron?) ; - | A $1 $rough < H a ($ddot? $evowel2 $macron?) ; | E $1 $rough < H e ($ddot? $evowel2 $macron?) ; | I $1 $rough < H i ($ddot? $evowel2 $macron?) ; | O $1 $rough < H o ($ddot? $evowel2 $macron?) ; | U $1 $rough < H u ($ddot? $evowel2 $macron?) ; | Y $1 $rough < H y ($ddot? $evowel2 $macron?) ; - | A $1 $rough < H a ($macron? $ddot? ) ; | E $1 $rough < H e ($macron? $ddot? ) ; | I $1 $rough < H i ($macron? $ddot? ) ; | O $1 $rough < H o ($macron? $ddot? ) ; | U $1 $rough < H u ($macron? $ddot? ) ; | Y $1 $rough < H y ($macron? $ddot? ) ; - -# Now do smooth - -#delete smooth breathing for Latin -$smooth > ; - -# insert in Greek -# the assumption is that all Marks are on letters. - - | $1 $smooth < $notLetter { ([rR]) } [^hH$smooth$rough] ; - | $1 $smooth < $notLetter { ($evowel $macron? $evowel2 $macron?) } [^$smooth$rough] ; - | $1 $smooth < $notLetter { ($evowel $macron?) } [^$evowel2$smooth$rough] ; - -# TODO: preserve smooth/rough breathing if not -# on initial vowel sequence - -# need to have these up here so the rules don't mask - -# remove now superfluous macron when returning - -Α < A $macron ; -α < a $macron ; - +$smooth > ; +| $1 $smooth < $notLetter { ([rR]) } [^hH$smooth$rough] ; +| $1 $smooth < $notLetter { ($evowel $macron? $evowel2 $macron?) } [^$smooth$rough] ; +| $1 $smooth < $notLetter { ($evowel $macron?) } [^$evowel2$smooth$rough] ; +Α < A $macron ; +α < a $macron ; η <> e $macron ; Η <> E $macron ; - -φ <> ph ; -Ψ } $beforeLower <> Ps ; -Ψ <> PS ; - -Φ } $beforeLower <> Ph ; +φ <> ph ; +Ψ } $beforeLower <> Ps ; +Ψ <> PS ; +Φ } $beforeLower <> Ph ; Φ <> PH ; -ψ <> ps ; - +ψ <> ps ; ω <> o $macron ; Ω <> O $macron; - -# NORMAL - -α <> a ; -Α <> A ; - -β <> b ; -Β <> B ; - -γ } $gammaLike <> n } $egammaLike ; -γ <> g ; -Γ } $gammaLike <> N } $egammaLike ; -Γ <> G ; - -δ <> d ; -Δ <> D ; - -ε <> e ; -Ε <> E ; - -ζ <> z ; -Ζ <> Z ; - -θ <> th ; -Θ } $beforeLower <> Th ; -Θ <> TH ; - -ι <> i ; -Ι <> I ; - +α <> a ; +Α <> A ; +β <> b ; +Β <> B ; +γ } $gammaLike <> n } $egammaLike ; +γ <> g ; +Γ } $gammaLike <> N } $egammaLike ; +Γ <> G ; +δ <> d ; +Δ <> D ; +ε <> e ; +Ε <> E ; +ζ <> z ; +Ζ <> Z ; +θ <> th ; +Θ } $beforeLower <> Th ; +Θ <> TH ; +ι <> i ; +Ι <> I ; κ <> k ; -Κ <> K ; - -λ <> l ; -Λ <> L ; - -μ <> m ; -Μ <> M ; - -ν } $gammaLike > n\' ; -ν <> n ; -Ν } $gammaLike <> N\' ; -Ν <> N ; - -ξ <> x ; -Ξ <> X ; - -ο <> o ; -Ο <> O ; - -π <> p ; -Π <> P ; - -ρ $rough <> rh; -Ρ $rough } $beforeLower <> Rh ; -Ρ $rough <> RH ; -ρ <> r ; -Ρ <> R ; - -# insert separator before things that turn into s - -[Pp] { } [ςσΣϷϸϺϻ] > \' ; - -# special S variants - -Ï· <> Š ; # Ï· GREEK CAPITAL LETTER SHO Uppercase_Letter Grek - L -ϸ <> š ; #ϸ GREEK SMALL LETTER SHO Lowercase_Letter Grek - L -Ϻ <> Ŝ ; # Ϻ GREEK CAPITAL LETTER SAN Uppercase_Letter Grek - L -Ï» <> ŝ ; # Ï» GREEK SMALL LETTER SAN Lowercase_Letter Grek - L - -# underbar means exception - -# before a letter, initial +Κ <> K ; +λ <> l ; +Λ <> L ; +μ <> m ; +Μ <> M ; +ν } $gammaLike > n\' ; +ν <> n ; +Ν } $gammaLike <> N\' ; +Ν <> N ; +ξ <> x ; +Ξ <> X ; +ο <> o ; +Ο <> O ; +π <> p ; +Π <> P ; +ρ $rough <> rh; +Ρ $rough } $beforeLower <> Rh ; +Ρ $rough <> RH ; +ρ <> r ; +Ρ <> R ; +[Pp] { } [ςσΣϷϸϺϻ] > \' ; +Ï· <> S\u030C ; # Ï· GREEK CAPITAL LETTER SHO Uppercase_Letter Grek - L +ϸ <> s\u030C ; #ϸ GREEK SMALL LETTER SHO Lowercase_Letter Grek - L +Ϻ <> S\u0302 ; # Ϻ GREEK CAPITAL LETTER SAN Uppercase_Letter Grek - L +Ï» <> s\u0302 ; # Ï» GREEK SMALL LETTER SAN Lowercase_Letter Grek - L ς } $beforeLetter <> s $underbar } $beforeLetter; σ } $beforeLetter <> s } $beforeLetter; - -# otherwise, after a letter = final $afterLetter { σ <> $afterLetter { s $underbar; $afterLetter { ς <> $afterLetter { s ; - -# otherwise (isolated) = initial ς <> s $underbar; σ <> s ; - -# [Pp] { Σ <> \'S ; -Σ <> S ; - -τ <> t ; -Τ <> T ; - -$vowel {υ } <> u ; -υ <> y ; -$vowel { Î¥ <> U ; -Î¥ <> Y ; - -χ <> ch ; -Χ } $beforeLower <> Ch ; -Χ <> CH ; - -# Completeness for ASCII - +Σ <> S ; +τ <> t ; +Τ <> T ; +$vowel {υ } <> u ; +υ <> y ; +$vowel { Î¥ <> U ; +Î¥ <> Y ; +χ <> ch ; +Χ } $beforeLower <> Ch ; +Χ <> CH ; $ignore = [[:Mark:]''] * ; - | k < c ; | ph < f ; | i < j ; @@ -307,20 +183,15 @@ $ignore = [[:Mark:]''] * ; | B < W } $vowel ; | U < V ; | U < W ; - $rough } $ignore [:UppercaseLetter:] > H ; $ignore [:UppercaseLetter:] { $rough > H ; $rough < H ; $rough <> h ; - -# Completeness for Greek - ϐ > | β ; ϑ > | θ ; ϒ > | Î¥ ; ϕ > | φ ; ϖ > | π ; - Ï° > | κ ; ϱ > | ρ ; ϲ > | σ ; @@ -328,18 +199,9 @@ $rough <> h ; ϳ > j ; Ï´ > | Θ ; ϵ > | ε ; - µ > | μ ; - - ͺ > i; - -# delete any trailing ' marks used for roundtripping - - < [Ππ] { \' } [Ss] ; - < [Νν] { \' } $egammaLike ; - +ͺ > i; +< [Ππ] { \' } [Ss] ; +< [Νν] { \' } $egammaLike ; ::NFC (NFD) ; -# ([\u0000-\u007F [:Latin:] [:Greek:] [:nonspacing mark:]]) ; -# ([\u0000-\u007F \u00B7 [:Latin:] [:nonspacing mark:]]) ; -# MINIMAL FILTER GENERATED FOR: Latin-Greek BACKWARD -:: ( [':?A-Za-z\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0300-\u0337\u0339-\u0345\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AA-\u03B0\u03CA-\u03CE\u03D3-\u03D4\u0400-\u0401\u0403\u0407\u040C-\u040E\u0419\u0439\u0450-\u0451\u0453\u0457\u045C-\u045E\u0476-\u0477\u04C1-\u04C2\u04D0-\u04D3\u04D6-\u04D7\u04DA-\u04DF\u04E2-\u04E7\u04EA-\u04F5\u04F8-\u04F9\u1E00-\u1E99\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FC1-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEE\u1FF2-\u1FF4\u1FF6-\u1FFC\u212A-\u212B] ) ; +:: ( [':?A-Za-zÀ-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳ\u0300-\u0337\u0339-\u0345΅-ΆΈ-ΊΌΎ-ΐΪ-ΰϊ-ώϓ-ϔЀ-ЁЃЇЌ-ЎЙйѐ-ёѓїќ-ўѶ-ѷӁ-ӂӐ-ӓӖ-ӗӚ-ӟӢ-Ó§Óª-ÓµÓ¸-ӹḀ-ẙẛẠ-ỹἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼ῁-ῄῆ-ΐῖ-Ί῝-΅ῲ-ῴῶ-ῼK-Å] ) ; diff --git a/icuSources/data/translit/Greek_Latin_UNGEGN.txt b/icuSources/data/translit/Greek_Latin_UNGEGN.txt index a7ea7175..b56efb45 100644 --- a/icuSources/data/translit/Greek_Latin_UNGEGN.txt +++ b/icuSources/data/translit/Greek_Latin_UNGEGN.txt @@ -1,252 +1,161 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- -# For modern Greek, based on UNGEGN rules. - -# Rules are predicated on running NFD first, and NFC afterwards -# MINIMAL FILTER GENERATED FOR: Greek-Latin/UNGEGN -# WARNING: need to add accents to both filters ### -# :: [́̄̆̈;µ·ÀÂÈÊÌÎÒÔÙÛàâèêìîòôùûĈ-ĉĜ-ĝĤ-ĥĴ-ĵŜ-ŝŴ-ŷǛ-ǜǸ-ǹ̀̂̓-̔̀͂-̓ͅͺ;Ά-ΊΌΎ-ΡΣ-ώϐ-ϖϰ-ϵЀЍѐѝḔ-ḕṐ-ṑẀ-ẁẐ-ẑẤ-ậẰ-ằẾ-ệỐ-ộỜ-ờỪ-ừỲ-ỳἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼι῁-ῄῆ-῍῏-ΐῖ-Ί῝῟-῭ῲ-ῴῶ-ῼΩ\u03F7-\u07FB\u03F9] ; - -:: [[[:Greek:][:Mn:][:Me:]] [\:-;?\u00B7\u037E\u0387]] ; -::NFD (NFC) ; - -# Useful variables - -$lower = [[:latin:][:greek:] & [:Ll:]] ; -$upper = [[:latin:][:greek:] & [:Lu:]] ; -$accent = [[:Mn:][:Me:]] ; - -$macron = ̄ ; -$ddot = ̈ ; - -$lcgvowel = [αεηιουω] ; -$ucgvowel = [ΑΕΗΙΟΥΩ] ; -$gvowel = [$lcgvowel $ucgvowel] ; -$lcgvowelC = [$lcgvowel $accent] ; - -$evowel = [aeiouyAEIOUY]; -$vowel = [ $evowel $gvowel] ; - -$beforeLower = $accent * $lower ; - -$gammaLike = [ΓΚΞΧγκξχϰ] ; -$egammaLike = [GKXCgkxc] ; -$smooth = ̓ ; -$rough = ̔ ; -$iotasub = ͅ ; - -$softener = [βΒγΓδΔζΖλΛμΜνΝρΡ$gvowel] ; - -$under = ̱; - -$caron = ̌; - -$afterLetter = [:L:] [\'$accent]* ; -$beforeLetter = [\'$accent]* [:L:] ; - -# Fix punctuation - -# preserve orginal -\: <> \: $under ; -\? <> \? $under ; - -\; <> \? ; -· <> \: ; - -# Fix any ancient characters that creep in - -͂ > ́ ; -̂ > ́ ; -̀ > ́ ; -$smooth > ; -$rough > ; -$iotasub > ; -ͺ > ; - -# need to have these up here so the rules don't mask - -η <> i $under ; -Η <> I $under ; - -Ψ } $beforeLower <> Ps ; -Ψ <> PS ; -ψ <> ps ; - -ω <> o $under ; -Ω <> O $under; - -# at begining or end of word, convert mp to b - -[^[:L:]$accent] { μπ > b ; -μπ } [^[:L:]$accent] > b ; -[^[:L:]$accent] { [Μμ][Ππ] > B ; -[Μμ][Ππ] } [^[:L:]$accent] > B ; - -μπ < b ; -Μπ < B } $beforeLower ; -ΜΠ < B ; - -# handle diphthongs ending with upsilon - -ου <> ou ; -ΟΥ <> OU ; -Ου <> Ou ; -οΥ <> oU ; - -$fmaker = [aeiAEI] $under ? ; -$shiftForwardVowels = [[:Mn:]-[\u0308]]; # note: a diaeresis keeps the items separate - -$fmaker { υ ( $shiftForwardVowels )* } $softener > $1 v $under ; -υ $1 < ( $shiftForwardVowels )* v $under ; - -$fmaker { υ ( $shiftForwardVowels )* } > $1 f $under; -υ $1 < ( $shiftForwardVowels )* f $under ; - -$fmaker { Î¥ } $softener <> V $under ; -$fmaker { Î¥ <> U $under ; - -υ <> y ; -Î¥ <> Y ; - -# NORMAL - -α <> a ; -Α <> A ; - -β <> v ; -Β <> V ; - -γ } $gammaLike <> n } $egammaLike ; -γ <> g ; -Γ } $gammaLike <> N } $egammaLike ; -Γ <> G ; - -δ <> d ; -Δ <> D ; - -ε <> e ; -Ε <> E ; - -ζ <> z ; -Ζ <> Z ; - -θ <> th ; -Θ } $beforeLower <> Th ; -Θ <> TH ; - -ι <> i ; -Ι <> I ; - -κ <> k ; -Κ <> K ; - -λ <> l ; -Λ <> L ; - -μ <> m ; -Μ <> M ; - -ν } $gammaLike > n\' ; -ν <> n ; -Ν } $gammaLike <> N\' ; -Ν <> N ; - -ξ <> x ; -Ξ <> X ; - -ο <> o ; -Ο <> O ; - -π <> p ; -Π <> P ; - -ρ <> r ; -Ρ <> R ; - -# insert separator before things that turn into s -[Pp] { } [ςσΣϷϸϺϻ] > \' ; - -# special S variants - -Ï· <> Š ; # Ï· GREEK CAPITAL LETTER SHO Uppercase_Letter Grek - L -ϸ <> š ; #ϸ GREEK SMALL LETTER SHO Lowercase_Letter Grek - L -Ϻ <> Ŝ ; # Ϻ GREEK CAPITAL LETTER SAN Uppercase_Letter Grek - L -Ï» <> ŝ ; # Ï» GREEK SMALL LETTER SAN Lowercase_Letter Grek - L - -# Caron means exception - -# before a letter, initial -ς } $beforeLetter <> s $under } $beforeLetter; -σ } $beforeLetter <> s } $beforeLetter; - -# otherwise, after a letter = final -$afterLetter { σ <> $afterLetter { s $under; -$afterLetter { ς <> $afterLetter { s ; - -# otherwise (isolated) = initial -ς <> s $under; -σ <> s ; - -# [Pp] { Σ <> \'S ; -Σ <> S ; - -τ <> t ; -Τ <> T ; - -φ <> f ; -Φ <> F ; - -χ <> ch ; -Χ } $beforeLower <> Ch ; -Χ <> CH ; - -# Completeness for ASCII - -# $ignore = [[:Mark:]''] * ; - -| ch < h ; -| k < c ; -| i < j ; -| k < q ; -| b < u } $vowel ; -| b < w } $vowel ; -| y < u ; -| y < w ; - -| Ch < H ; -| K < C ; -| I < J ; -| K < Q ; -| B < W } $vowel ; -| B < U } $vowel ; -| Y < W ; -| Y < U ; - -# Completeness for Greek - -ϐ > | β ; -ϑ > | θ ; -ϒ > | Î¥ ; -ϕ > | φ ; -ϖ > | π ; - -Ï° > | κ ; -ϱ > | ρ ; -ϲ > | σ ; -Ϲ > | Σ; #U+03F9 GREEK CAPITAL LUNATE SIGMA SYMBOL -ϳ > j ; -Ï´ > | Θ ; -ϵ > | ε ; -µ > | μ ; - -# delete any trailing ' marks used for roundtripping - - < [Ππ] { \' } [Ss] ; - < [Νν] { \' } $egammaLike ; - -::NFC (NFD) ; - -# MINIMAL FILTER GENERATED FOR: Latin-Greek/UNGEGN BACKWARD -:: ([[[:Latin:][:Mn:][:Me:]] ['\:?]]) ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Greek_Latin_UNGEGN.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +:: [[[:Greek:][:Mn:][:Me:]] [\:-;?·;·]] ; +::NFD (NFC) ; +$lower = [[:latin:][:greek:] & [:Ll:]] ; +$upper = [[:latin:][:greek:] & [:Lu:]] ; +$accent = [[:Mn:][:Me:]] ; +$macron = \u0304 ; +$ddot = \u0308 ; +$lcgvowel = [αεηιουω] ; +$ucgvowel = [ΑΕΗΙΟΥΩ] ; +$gvowel = [$lcgvowel $ucgvowel] ; +$lcgvowelC = [$lcgvowel $accent] ; +$evowel = [aeiouyAEIOUY]; +$vowel = [ $evowel $gvowel] ; +$beforeLower = $accent * $lower ; +$gammaLike = [ΓΚΞΧγκξχϰ] ; +$egammaLike = [GKXCgkxc] ; +$smooth = \u0313 ; +$rough = \u0314 ; +$iotasub = \u0345 ; +$softener = [βΒγΓδΔζΖλΛμΜνΝρΡ$gvowel] ; +$under = \u0331; +$caron = \u030C; +$afterLetter = [:L:] [\'$accent]* ; +$beforeLetter = [\'$accent]* [:L:] ; +\: <> \: $under ; +\? <> \? $under ; +\; <> \? ; +· <> \: ; +\u0342 > \u0301 ; +\u0302 > \u0301 ; +\u0300 > \u0301 ; +$smooth > ; +$rough > ; +$iotasub > ; +ͺ > ; +η <> i $under ; +Η <> I $under ; +Ψ } $beforeLower <> Ps ; +Ψ <> PS ; +ψ <> ps ; +ω <> o $under ; +Ω <> O $under; +[^[:L:]$accent] { μπ > b ; +μπ } [^[:L:]$accent] > b ; +[^[:L:]$accent] { [Μμ][Ππ] > B ; +[Μμ][Ππ] } [^[:L:]$accent] > B ; +μπ < b ; +Μπ < B } $beforeLower ; +ΜΠ < B ; +ου <> ou ; +ΟΥ <> OU ; +Ου <> Ou ; +οΥ <> oU ; +$fmaker = [aeiAEI] $under ? ; +$shiftForwardVowels = [[:Mn:]-[\u0308]]; # note: a diaeresis keeps the items separate +$fmaker { υ ( $shiftForwardVowels )* } $softener > $1 v $under ; +υ $1 < ( $shiftForwardVowels )* v $under ; +$fmaker { υ ( $shiftForwardVowels )* } > $1 f $under; +υ $1 < ( $shiftForwardVowels )* f $under ; +$fmaker { Î¥ } $softener <> V $under ; +$fmaker { Î¥ <> U $under ; +υ <> y ; +Î¥ <> Y ; +α <> a ; +Α <> A ; +β <> v ; +Β <> V ; +γ } $gammaLike <> n } $egammaLike ; +γ <> g ; +Γ } $gammaLike <> N } $egammaLike ; +Γ <> G ; +δ <> d ; +Δ <> D ; +ε <> e ; +Ε <> E ; +ζ <> z ; +Ζ <> Z ; +θ <> th ; +Θ } $beforeLower <> Th ; +Θ <> TH ; +ι <> i ; +Ι <> I ; +κ <> k ; +Κ <> K ; +λ <> l ; +Λ <> L ; +μ <> m ; +Μ <> M ; +ν } $gammaLike > n\' ; +ν <> n ; +Ν } $gammaLike <> N\' ; +Ν <> N ; +ξ <> x ; +Ξ <> X ; +ο <> o ; +Ο <> O ; +π <> p ; +Π <> P ; +ρ <> r ; +Ρ <> R ; +[Pp] { } [ςσΣϷϸϺϻ] > \' ; +Ï· <> S\u030C ; # Ï· GREEK CAPITAL LETTER SHO Uppercase_Letter Grek - L +ϸ <> s\u030C ; #ϸ GREEK SMALL LETTER SHO Lowercase_Letter Grek - L +Ϻ <> S\u0302 ; # Ϻ GREEK CAPITAL LETTER SAN Uppercase_Letter Grek - L +Ï» <> s\u0302 ; # Ï» GREEK SMALL LETTER SAN Lowercase_Letter Grek - L +ς } $beforeLetter <> s $under } $beforeLetter; +σ } $beforeLetter <> s } $beforeLetter; +$afterLetter { σ <> $afterLetter { s $under; +$afterLetter { ς <> $afterLetter { s ; +ς <> s $under; +σ <> s ; +Σ <> S ; +τ <> t ; +Τ <> T ; +φ <> f ; +Φ <> F ; +χ <> ch ; +Χ } $beforeLower <> Ch ; +Χ <> CH ; +| ch < h ; +| k < c ; +| i < j ; +| k < q ; +| b < u } $vowel ; +| b < w } $vowel ; +| y < u ; +| y < w ; +| Ch < H ; +| K < C ; +| I < J ; +| K < Q ; +| B < W } $vowel ; +| B < U } $vowel ; +| Y < W ; +| Y < U ; +ϐ > | β ; +ϑ > | θ ; +ϒ > | Î¥ ; +ϕ > | φ ; +ϖ > | π ; +Ï° > | κ ; +ϱ > | ρ ; +ϲ > | σ ; +Ϲ > | Σ; #U+03F9 GREEK CAPITAL LUNATE SIGMA SYMBOL +ϳ > j ; +Ï´ > | Θ ; +ϵ > | ε ; +µ > | μ ; +< [Ππ] { \' } [Ss] ; +< [Νν] { \' } $egammaLike ; +::NFC (NFD) ; +:: ([[[:Latin:][:Mn:][:Me:]] ['\:?]]) ; diff --git a/icuSources/data/translit/Gujarati_Bengali.txt b/icuSources/data/translit/Gujarati_Bengali.txt new file mode 100644 index 00000000..20dba90b --- /dev/null +++ b/icuSources/data/translit/Gujarati_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Devanagari.txt b/icuSources/data/translit/Gujarati_Devanagari.txt new file mode 100644 index 00000000..614612a4 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Gurmukhi.txt b/icuSources/data/translit/Gujarati_Gurmukhi.txt new file mode 100644 index 00000000..797dada1 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Gujarati_InterIndic.txt b/icuSources/data/translit/Gujarati_InterIndic.txt index 20534276..935e72da 100644 --- a/icuSources/data/translit/Gujarati_InterIndic.txt +++ b/icuSources/data/translit/Gujarati_InterIndic.txt @@ -1,91 +1,91 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Gujarati-InterIndic -#:: NFD (NFC) ; -\u0a81>\ue001; # SIGN CANDRABINDU -\u0a82>\ue002; # SIGN ANUSVARA -\u0a83>\ue003; # SIGN VISARGA -\u0a85>\ue005; # LETTER A -\u0a86>\ue006; # LETTER AA -\u0a87>\ue007; # LETTER I -\u0a88>\ue008; # LETTER II -\u0a89>\ue009; # LETTER U -\u0a8a>\ue00a; # LETTER UU -\u0a8b>\ue00b; # LETTER VOCALIC R -\u0a8c>\ue00c; # LETTER VOCALLIC L -\u0a8d>\ue00d; # VOWEL CANDRA E -\u0a8f>\ue00f; # LETTER E -\u0a90>\ue010; # LETTER AI -\u0a91>\ue011; # VOWEL CANDRA O -\u0a93>\ue013; # LETTER O -\u0a94>\ue014; # LETTER AU -\u0a95>\ue015; # LETTER KA -\u0a96>\ue016; # LETTER KHA -\u0a97>\ue017; # LETTER GA -\u0a98>\ue018; # LETTER GHA -\u0a99>\ue019; # LETTER NGA -\u0a9a>\ue01a; # LETTER CA -\u0a9b>\ue01b; # LETTER CHA -\u0a9c>\ue01c; # LETTER JA -\u0a9d>\ue01d; # LETTER JHA -\u0a9e>\ue01e; # LETTER NYA -\u0a9f>\ue01f; # LETTER TTA -\u0aa0>\ue020; # LETTER TTHA -\u0aa1>\ue021; # LETTER DDA -\u0aa2>\ue022; # LETTER DDHA -\u0aa3>\ue023; # LETTER NNA -\u0aa4>\ue024; # LETTER TA -\u0aa5>\ue025; # LETTER THA -\u0aa6>\ue026; # LETTER DA -\u0aa7>\ue027; # LETTER DHA -\u0aa8>\ue028; # LETTER NA -\u0aaa>\ue02a; # LETTER PA -\u0aab>\ue02b; # LETTER PHA -\u0aac>\ue02c; # LETTER BA -\u0aad>\ue02d; # LETTER BHA -\u0aae>\ue02e; # LETTER MA -\u0aaf>\ue02f; # LETTER YA -\u0ab0>\ue030; # LETTER RA -\u0ab2>\ue032; # LETTER LA -\u0ab3>\ue033; # LETTER LLA -\u0ab5>\ue035; # LETTER VA -\u0ab6>\ue036; # LETTER SHA -\u0ab7>\ue037; # LETTER SSA -\u0ab8>\ue038; # LETTER SA -\u0ab9>\ue039; # LETTER HA -\u0abc>\ue03c; # SIGN NUKTA -\u0abd>\ue03d; # SIGN AVAGRAHA -\u0abe>\ue03e; # VOWEL SIGN AA -\u0abf>\ue03f; # VOWEL SIGN I -\u0ac0>\ue040; # VOWEL SIGN II -\u0ac1>\ue041; # VOWEL SIGN U -\u0ac2>\ue042; # VOWEL SIGN UU -\u0ac3>\ue043; # VOWEL SIGN VOCALIC R -\u0ac4>\ue044; # VOWEL SIGN VOCALIC RR -\u0ac5>\ue045; # VOWEL SIGN CANDRA E -\u0ac7>\ue047; # VOWEL SIGN E -\u0ac8>\ue048; # VOWEL SIGN AI -\u0ac9>\ue049; # VOWEL SIGN CANDRA O -\u0acb>\ue04b; # VOWEL SIGN O -\u0acc>\ue04c; # VOWEL SIGN AU -\u0acd>\ue04d; # SIGN VIRAMA -\u0ad0>\ue050; # OM -\u0ae0>\ue060; # LETTER VOCALIC RR -\u0ae1>\ue061; # LETTER VOCALIC LL -\u0ae6>\ue066; # DIGIT ZERO -\u0ae7>\ue067; # DIGIT ONE -\u0ae8>\ue068; # DIGIT TWO -\u0ae9>\ue069; # DIGIT THREE -\u0aea>\ue06a; # DIGIT FOUR -\u0aeb>\ue06b; # DIGIT FIVE -\u0aec>\ue06c; # DIGIT SIX -\u0aed>\ue06d; # DIGIT SEVEN -\u0aee>\ue06e; # DIGIT EIGHT -\u0aef>\ue06f; # DIGIT NINE -\u0964>\ue064; # DANDA -\u0965>\ue065; # DOUBLE DANDA -# :: NFC (NFD) ; -# eof +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +\u0A81>\uE001; # SIGN CANDRABINDU +\u0A82>\uE002; # SIGN ANUSVARA +ઃ>\uE003; # SIGN VISARGA +અ>\uE005; # LETTER A +આ>\uE006; # LETTER AA +ઇ>\uE007; # LETTER I +ઈ>\uE008; # LETTER II +ઉ>\uE009; # LETTER U +ઊ>\uE00A; # LETTER UU +ઋ>\uE00B; # LETTER VOCALIC R +ઌ>\uE00C; # LETTER VOCALLIC L +ઍ>\uE00D; # VOWEL CANDRA E +એ>\uE00F; # LETTER E +ઐ>\uE010; # LETTER AI +ઑ>\uE011; # VOWEL CANDRA O +ઓ>\uE013; # LETTER O +ઔ>\uE014; # LETTER AU +ક>\uE015; # LETTER KA +ખ>\uE016; # LETTER KHA +ગ>\uE017; # LETTER GA +ઘ>\uE018; # LETTER GHA +ઙ>\uE019; # LETTER NGA +ચ>\uE01A; # LETTER CA +છ>\uE01B; # LETTER CHA +જ>\uE01C; # LETTER JA +ઝ>\uE01D; # LETTER JHA +ઞ>\uE01E; # LETTER NYA +ટ>\uE01F; # LETTER TTA +ઠ>\uE020; # LETTER TTHA +ડ>\uE021; # LETTER DDA +ઢ>\uE022; # LETTER DDHA +ણ>\uE023; # LETTER NNA +ત>\uE024; # LETTER TA +થ>\uE025; # LETTER THA +દ>\uE026; # LETTER DA +ધ>\uE027; # LETTER DHA +ન>\uE028; # LETTER NA +પ>\uE02A; # LETTER PA +ફ>\uE02B; # LETTER PHA +બ>\uE02C; # LETTER BA +ભ>\uE02D; # LETTER BHA +મ>\uE02E; # LETTER MA +ય>\uE02F; # LETTER YA +ર>\uE030; # LETTER RA +લ>\uE032; # LETTER LA +ળ>\uE033; # LETTER LLA +વ>\uE035; # LETTER VA +શ>\uE036; # LETTER SHA +ષ>\uE037; # LETTER SSA +સ>\uE038; # LETTER SA +હ>\uE039; # LETTER HA +\u0ABC>\uE03C; # SIGN NUKTA +ઽ>\uE03D; # SIGN AVAGRAHA +ા>\uE03E; # VOWEL SIGN AA +િ>\uE03F; # VOWEL SIGN I +ી>\uE040; # VOWEL SIGN II +\u0AC1>\uE041; # VOWEL SIGN U +\u0AC2>\uE042; # VOWEL SIGN UU +\u0AC3>\uE043; # VOWEL SIGN VOCALIC R +\u0AC4>\uE044; # VOWEL SIGN VOCALIC RR +\u0AC5>\uE045; # VOWEL SIGN CANDRA E +\u0AC7>\uE047; # VOWEL SIGN E +\u0AC8>\uE048; # VOWEL SIGN AI +ૉ>\uE049; # VOWEL SIGN CANDRA O +ો>\uE04B; # VOWEL SIGN O +ૌ>\uE04C; # VOWEL SIGN AU +\u0ACD>\uE04D; # SIGN VIRAMA +ૐ>\uE050; # OM +à« >\uE060; # LETTER VOCALIC RR +à«¡>\uE061; # LETTER VOCALIC LL +૦>\uE066; # DIGIT ZERO +૧>\uE067; # DIGIT ONE +૨>\uE068; # DIGIT TWO +à«©>\uE069; # DIGIT THREE +૪>\uE06A; # DIGIT FOUR +à««>\uE06B; # DIGIT FIVE +૬>\uE06C; # DIGIT SIX +à«­>\uE06D; # DIGIT SEVEN +à«®>\uE06E; # DIGIT EIGHT +૯>\uE06F; # DIGIT NINE +।>\uE064; # DANDA +॥>\uE065; # DOUBLE DANDA diff --git a/icuSources/data/translit/Gujarati_Kannada.txt b/icuSources/data/translit/Gujarati_Kannada.txt new file mode 100644 index 00000000..9a248b46 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Latin.txt b/icuSources/data/translit/Gujarati_Latin.txt new file mode 100644 index 00000000..7cd61715 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Malayalam.txt b/icuSources/data/translit/Gujarati_Malayalam.txt new file mode 100644 index 00000000..dfdd45c1 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Oriya.txt b/icuSources/data/translit/Gujarati_Oriya.txt new file mode 100644 index 00000000..fe95e2a8 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Tamil.txt b/icuSources/data/translit/Gujarati_Tamil.txt new file mode 100644 index 00000000..0597c181 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Gujarati_Telugu.txt b/icuSources/data/translit/Gujarati_Telugu.txt new file mode 100644 index 00000000..49710607 --- /dev/null +++ b/icuSources/data/translit/Gujarati_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gujarati_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A81-ઃઅ-ઍએ-ઑઓ-નપ-રલ-ળવ-હ\u0ABC-\u0AC5\u0AC7-ૉો-\u0ACDૐૠૡ૦-૯]; +::NFD; +::Gujarati-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Bengali.txt b/icuSources/data/translit/Gurmukhi_Bengali.txt new file mode 100644 index 00000000..692921b3 --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Devanagari.txt b/icuSources/data/translit/Gurmukhi_Devanagari.txt new file mode 100644 index 00000000..aaf764b6 --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Gujarati.txt b/icuSources/data/translit/Gurmukhi_Gujarati.txt new file mode 100644 index 00000000..c96bcd2f --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:13 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_InterIndic.txt b/icuSources/data/translit/Gurmukhi_InterIndic.txt index 2c937898..b6cbf1fb 100644 --- a/icuSources/data/translit/Gurmukhi_InterIndic.txt +++ b/icuSources/data/translit/Gurmukhi_InterIndic.txt @@ -1,68 +1,63 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Gurmukhi-InterIndic -#:: NFD (NFC) ; - -#\u0A16\u0A3C>\uE059; # LETTER KHHA -#\u0A17\u0A3C>\uE05A; # LETTER GHHA -#\u0A1C\u0A3C>\uE05B; # LETTER ZA -#\u0A38\u0A3C>\uE036; # LETTER SHA -#\u0A32\u0A3C>\uE033; # LETTER LLA -#\u0A2B\u0A3C>\uE05E; # LETTER FA -\u0A01>\ue001; # SIGN CHANDRABINDU +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +\u0A01>\uE001; # SIGN CHANDRABINDU \u0A02>\uE002; # SIGN BINDI -\u0A05>\uE005; # LETTER A -\u0A06>\uE006; # LETTER AA -\u0A07>\uE007; # LETTER I -\u0A08>\uE008; # LETTER II -\u0A09>\uE009; # LETTER U -\u0A0A>\uE00A; # LETTER UU -\u0A0C>\uE032; # FALLBACK : VOCALLIC LA -\u0A0F>\uE00F; # LETTER EE -\u0A10>\uE010; # LETTER AI -\u0A13>\uE013; # LETTER OO -\u0A14>\uE014; # LETTER AU -\u0A15>\uE015; # LETTER KA -\u0A16>\uE016; # LETTER KHA -\u0A17>\uE017; # LETTER GA -\u0A18>\uE018; # LETTER GHA -\u0A19>\uE019; # LETTER NGA -\u0A1A>\uE01A; # LETTER CA -\u0A1B>\uE01B; # LETTER CHA -\u0A1C>\uE01C; # LETTER JA -\u0A1D>\uE01D; # LETTER JHA -\u0A1E>\uE01E; # LETTER NYA -\u0A1F>\uE01F; # LETTER TTA -\u0A20>\uE020; # LETTER TTHA -\u0A21>\uE021; # LETTER DDA -\u0A22>\uE022; # LETTER DDHA -\u0A23>\uE023; # LETTER NNA -\u0A24>\uE024; # LETTER TA -\u0A25>\uE025; # LETTER THA -\u0A26>\uE026; # LETTER DA -\u0A27>\uE027; # LETTER DHA -\u0A28>\uE028; # LETTER NA -\u0A2A>\uE02A; # LETTER PA -\u0A2B>\uE02B; # LETTER PHA -\u0A2C>\uE02C; # LETTER BA -\u0A2D>\uE02D; # LETTER BHA -\u0A2E>\uE02E; # LETTER MA -\u0A2F>\uE02F; # LETTER YA -\u0A30>\uE030; # LETTER RA -\u0A32>\uE032; # LETTER LA -\u0a33>\uE033; # FALLBACK -\u0A35>\uE035; # LETTER VA -\u0a36>\ue036; -\u0A38\0a3c>\ue036; # FALLBACK -\u0A38>\uE038; # LETTER SA -\u0A39>\uE039; # LETTER HA +ਅ>\uE005; # LETTER A +ਆ>\uE006; # LETTER AA +ਇ>\uE007; # LETTER I +ਈ>\uE008; # LETTER II +ਉ>\uE009; # LETTER U +ਊ>\uE00A; # LETTER UU +\u0A0C>\uE032; # FALLBACK : VOCALLIC LA +ਏ>\uE00F; # LETTER EE +ਐ>\uE010; # LETTER AI +ਓ>\uE013; # LETTER OO +ਔ>\uE014; # LETTER AU +ਕ>\uE015; # LETTER KA +ਖ>\uE016; # LETTER KHA +ਗ>\uE017; # LETTER GA +ਘ>\uE018; # LETTER GHA +ਙ>\uE019; # LETTER NGA +ਚ>\uE01A; # LETTER CA +ਛ>\uE01B; # LETTER CHA +ਜ>\uE01C; # LETTER JA +ਝ>\uE01D; # LETTER JHA +ਞ>\uE01E; # LETTER NYA +ਟ>\uE01F; # LETTER TTA +ਠ>\uE020; # LETTER TTHA +ਡ>\uE021; # LETTER DDA +ਢ>\uE022; # LETTER DDHA +ਣ>\uE023; # LETTER NNA +ਤ>\uE024; # LETTER TA +ਥ>\uE025; # LETTER THA +ਦ>\uE026; # LETTER DA +ਧ>\uE027; # LETTER DHA +ਨ>\uE028; # LETTER NA +ਪ>\uE02A; # LETTER PA +ਫ>\uE02B; # LETTER PHA +ਬ>\uE02C; # LETTER BA +ਭ>\uE02D; # LETTER BHA +ਮ>\uE02E; # LETTER MA +ਯ>\uE02F; # LETTER YA +ਰ>\uE030; # LETTER RA +ਲ>\uE032; # LETTER LA +ਲ਼>\uE033; # FALLBACK +ਵ>\uE035; # LETTER VA +ਸ਼>\uE036; +ਸ\0a3c>\uE036; # FALLBACK +ਸ>\uE038; # LETTER SA +ਹ>\uE039; # LETTER HA \u0A3C>\uE03C; # SIGN NUKTA -\u0A3E>\uE03E; # VOWEL SIGN AA -\u0A3F>\uE03F; # VOWEL SIGN I -\u0A40>\uE040; # VOWEL SIGN II +ਾ>\uE03E; # VOWEL SIGN AA +ਿ>\uE03F; # VOWEL SIGN I +ੀ>\uE040; # VOWEL SIGN II \u0A41>\uE041; # VOWEL SIGN U \u0A42>\uE042; # VOWEL SIGN UU \u0A47>\uE047; # VOWEL SIGN EE @@ -70,26 +65,21 @@ \u0A4B>\uE04B; # VOWEL SIGN OO \u0A4C>\uE04C; # VOWEL SIGN AU \u0A4D>\uE04D; # SIGN VIRAMA - -\u0A5C>\uE05C; # LETTER RRA - -\u0A66>\uE066; # DIGIT ZERO -\u0A67>\uE067; # DIGIT ONE -\u0A68>\uE068; # DIGIT TWO -\u0A69>\uE069; # DIGIT THREE -\u0A6A>\uE06A; # DIGIT FOUR -\u0A6B>\uE06B; # DIGIT FIVE -\u0A6C>\uE06C; # DIGIT SIX -\u0A6D>\uE06D; # DIGIT SEVEN -\u0A6E>\uE06E; # DIGIT EIGHT -\u0A6F>\uE06F; # DIGIT NINE +ੜ>\uE05C; # LETTER RRA +੦>\uE066; # DIGIT ZERO +੧>\uE067; # DIGIT ONE +੨>\uE068; # DIGIT TWO +à©©>\uE069; # DIGIT THREE +੪>\uE06A; # DIGIT FOUR +à©«>\uE06B; # DIGIT FIVE +੬>\uE06C; # DIGIT SIX +à©­>\uE06D; # DIGIT SEVEN +à©®>\uE06E; # DIGIT EIGHT +੯>\uE06F; # DIGIT NINE \u0A70>\uE07C; # TIPPI \u0A71>\uE07D; # ADDAK -\u0A72>\uE07E; # IRI -\u0A73>\uE07F; # URA -\u0A74>\uE080; # EK ONKAR -\u0964>\ue064; # DANDA -\u0965>\ue065; # DOUBLE DANDA -# :: NFC (NFD) ; -# eof - +ੲ>\uE07E; # IRI +ੳ>\uE07F; # URA +à©´>\uE080; # EK ONKAR +।>\uE064; # DANDA +॥>\uE065; # DOUBLE DANDA diff --git a/icuSources/data/translit/Gurmukhi_Kannada.txt b/icuSources/data/translit/Gurmukhi_Kannada.txt new file mode 100644 index 00000000..a0f2c379 --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Latin.txt b/icuSources/data/translit/Gurmukhi_Latin.txt new file mode 100644 index 00000000..fa1fd0ba --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Malayalam.txt b/icuSources/data/translit/Gurmukhi_Malayalam.txt new file mode 100644 index 00000000..becc7f01 --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Oriya.txt b/icuSources/data/translit/Gurmukhi_Oriya.txt new file mode 100644 index 00000000..4855f87c --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Tamil.txt b/icuSources/data/translit/Gurmukhi_Tamil.txt new file mode 100644 index 00000000..4cc00109 --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Gurmukhi_Telugu.txt b/icuSources/data/translit/Gurmukhi_Telugu.txt new file mode 100644 index 00000000..1e2e3e1e --- /dev/null +++ b/icuSources/data/translit/Gurmukhi_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Gurmukhi_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:14 PDT 2006 +# +::[।-॥\u0A01\u0A02ਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹ\u0A3Cਾ-\u0A42\u0A47-\u0A48\u0A4B-\u0A4Dਖ਼-ੜਫ਼੦-à©´]; +::NFD; +::Gurmukhi-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Han_Latin.txt b/icuSources/data/translit/Han_Latin.txt index 4efac9bc..96b06acb 100644 --- a/icuSources/data/translit/Han_Latin.txt +++ b/icuSources/data/translit/Han_Latin.txt @@ -1,1440 +1,1409 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Warning: does not do round-trip mapping!! - -# Convert CJK characters -::Han-Spacedhan(); - -# Start RAW data for converting CJK characters -[吖呵錒锕阿]>ā; -嗄>á; -啊>a; -[哀哎唉埃挨銰鎄锿]>āi; -[㱯䠹䶣啀嘊嵦捱敱敳癌皑皚騃]>ái; -[㑸㗨㢊䑂䨠佁娾昹欸毐矮蔼藹躷霭靄馤]>ǎi; -[㕌㗒㘷㝶㤅㿄䀳䅬䔽䝽䬵伌僾叆嗳噯塧壒嫒嬡愛懓懝暧曖濭爱瑷璦皧瞹砨硋碍礙艾薆譪賹鑀隘靉鴱]>ài; -[侒媕安峎峖庵氨痷盦盫腌腤菴萻葊蓭誝諳谙銨铵鞌鞍馣鵪鶕鹌]>ān; -[䜙啽玵雸]>án; -[㜝㽢䁆䅖俺唵垵埯揞晻罯隌]>ǎn; -[㟁㱘㸩䅁䎏䎨䬓䮗䯥儑匎堓岸按暗案桉洝犴荌錌闇鮟黬黯]>àn; -骯>āng; -[㭿䀚䒢䩕䭹䭺卬岇昂昻]>áng; -[䍩軮雵]>ǎng; -[㦹㼜枊盎醠]>àng; -[凹柪梎軪]>āo; -[㟼㠂㿰䐿䚫䥝䦋䵅厫嗷嗸嶅廒摮敖滶熬爊獒獓璈磝翱翺聱蔜螯謷謸遨鏊鏖隞驁骜鰲鳌鷔鼇𦪈]>áo; -[㑃㤇䞝䯠䴈媪媼抝拗狕芺袄襖镺𥜌]>ǎo; -[㕭㘬㘭㜜㜩㠗㥿䁱䜒䫨䮯傲坳垇奡奥奧嫯岙嶴慠懊扷擙澳詏𩼈]>ào; -[仈八哵岜扒捌朳玐疤粑羓芭豝釟鲃]>bā; -[㔜㧊䟦䳁䳊叐坺墢妭抜拔炦犮秡胈茇菝詙跋軷鈸钹颰馛魃鼥]>bá; -[㞎把鈀钯靶]>bǎ; -[㖠㶚䃻䆉䇑䎬䎱䥯䩗䩻䰾䱝坝垻壩弝欛灞爸猈覇霸]>bà; -[叭吧巴笆罢罷]>ba; -掰>bāi; -[㼟㿟䳆白]>bái; -[㗗㼣䙓佰捭摆擺柏百矲粨絔襬]>bǎi; -[㗑㠔䒔䢙䴽庍拜拝敗稗粺蛽贁败]>bài; -[扳搬攽斑斒朌班瘢癍般虨螌褩辬頒颁]>bān; -[㩯㸞㺜䉽䬳坂岅昄板版粄舨蝂鈑钣闆阪]>bǎn; -[㚘㪵䕰伴办半姅怑拌湴瓣秚絆绊辦鉡靽]>bàn; -扮>ban; -[垹帮幇幚幫捠梆浜縍邦邫鞤]>bāng; -[㔙㮄䟺榜牓綁绑膀]>bǎng; -[㭋㯁㾦䂜䎧䖫䧛䰷傍塝棒磅稖艕蚌蜯謗谤鎊镑]>bàng; -[勹包孢笣胞苞蕔褒襃闁骲]>bāo; -[㵡㿺䈏䥤䨌䨔䪨嫑瓟窇薄雹]>báo; -[㙅㲏㻄䎂䭋䳈䳰䴐保堡堢宝宲寚寳寶怉珤緥葆褓褴賲靌飽饱駂鳵鴇鸨]>bǎo; -[㙸㫧㲒䤖儤勽報忁报抱暴曓煲爆犦菢虣袌豹趵鉋鑤铇鮑鲍鸔]>bào; -[伓卑岥庳悲揹杯桮椑盃碑禆綼萆藣錃鵯鹎]>bēi; -[㤳北鉳]>běi; -[㓈㔨㛝㣁㰆㶔㷶㸢㸬㸽㻗㼎㾱䁅䋳䔒䠙䡶䩀䰽俻倍偝偹備僃备孛悖惫愂憊昁梖焙牬犕狈狽珼琲糒紴背蓓被褙貝贝軰輩辈邶郥鄁鋇鐾钡鞴韛]>bèi; -[呗唄]>bei; -[奔泍渀犇錛锛]>bēn; -[㡷㮺夲奙本楍畚苯]>běn; -[㤓㨧㱵䬱倴坌捹撪桳笨輽逩]>bèn; -[伻嘣崩嵭祊綳閍]>bēng; -甭>béng; -[㑟䋽䙀䩬䭰䳞埲玤琫繃绷菶誁鞛]>běng; -[㱶㷯䨻塴搒槰泵蠯跰蹦迸逬鏰镚]>bèng; -[偪屄毴皀皕稫芘蓖螕豍逼颷]>bÄ«; -[㮰䨆䵄荸魮鼻]>bí; -[㚰㠲㪏㻶䃾䇷䏢䘡䠋䣥佊俾匕吡啚夶妣彼朼柀比沘滗潷疕秕笔筆粃蚍貏鄙]>bǐ; -[㓖㗉㘠㘩㙄㡀㡙㢰㢶㢸㧙㪤㮿㯇㱸㳼㵥㵨㹃㻫㿫䀣䁹䄶䊧䋔䌟䎵䏶䕗䖩䟆䟤䦘䧗䩛䪐䫁䫾䬛䭮䮡䯗佖咇哔嗶坒堛壁奰妼婢嬖币幣庇廦弊弻弼彃必怭愊愎敝斃枈柲梐楅檘毕毖毙湢滭煏熚狴獘獙珌璧畀畢疪痹痺睤睥碧筚箄-箆篦篳粊縪罼聛腷臂苾荜蓽蔽薜蜌袐裨襞襣觱詖诐貱賁贔贲赑跸蹕躃躄避邲鄨鄪鉍鎞鏎鐴铋閇閉閟闭陛鞸韠飶饆馝駜驆骳髀魓鮅鰏鲾鵖鷝鷩鼊]>bì; -[煸牑猵甂砭稨笾箯籩糄編编蝙边辺邉邊鍽鞭鯾鯿鳊]>biān; -[㦚䁵匾惼扁碥窆藊褊貶贬]>biǎn; -[㝸㣐㭓㲢㳎㳒㴜㵷㺹㻞䉸䒪䛒䡢䪻便匥卞变変弁徧忭抃揙昪汳汴玣緶缏艑苄覍變辡辧-辩辫辮辯遍釆閞鴘]>biàn; -[儦墂幖彪标標滮瀌灬熛爂猋瘭磦穮脿臕謤贆鏢鑣镖镳颩颮飆飇飍飑飙飚驫骉髟麃麅]>biāo; -[㟽㠒㯱㯹䔸婊檦表裱褾諘錶飈]>biǎo; -[㧼䞄俵覅鰾鳔]>biào; -[憋虌鱉鳖鼈龞]>biē; -[䠥䭱別别莂蟞襒蹩]>bié; -[㿜瘪癟蛂]>biě; -[㢼䉲䋢䏟彆徶]>biè; -[宾彬斌椕槟檳汃滨濒濱瀕瑸璸矉繽缤蠙豩豳賓賔邠鑌镔霦顮馪驞]>bÄ«n; -[䐔傧儐摈擯殡殯膑臏髌髕髩鬂鬓鬢]>bìn; -[仌兵冫冰掤栟梹氷絣]>bÄ«ng; -[㨀䋑䓑䴵丙偋怲抦昞昺柄炳眪禀秉稟窉苪蛃邴鉼陃鞞餅餠饼]>bǐng; -[䈂䗒並併倂傡寎并幷摒栤棅病竝鈵靐鮩]>bìng; -[剝剥哱嶓拨撥播柭波玻癶盋砵碆缽菠袚蹳鉢钵驋髉鮁鱍鲅]>bō; -[㗘㝿㟑㧳㩧㩭㪍㬍㬧㱟㴾㶿㹀䂍䊿䍨䍸䑈䒄䗚䙏䞳䟛䢌䢪䥬䪇䪬䫊䬪䭦䭯䮀䮂䯋䰊䶈亳伯侼僰勃博嚗壆嶏帛愽懪挬搏敀栢桲欂泺浡渤煿牔犻猼瓝礡礴箔簙簿糪胉脖舶艊苩葧蔔袯襏襮誖謈豰踄踣郣鉑鋍鎛鑮铂镈餑餺饽馎馞駁駮驳髆鮊鲌鵓鹁]>bó; -[箥簸蚾跛駊]>bǒ; -[㖕孹挀擘檗疈繴蘗譒]>bò; -[卜啵膊]>bo; -[峬庯晡逋餔鵏]>bÅ«; -[㙛㨐䀯䋠䒈䪁䪔卟哺捕补補鳪]>bǔ; -[㘵㚴㳍㻉㾟䊇䍌䏽䑰䝵䬏䳝䴝䴺不佈吥咘埔埗埠布怖悑捗步歨歩篰荹蔀部郶鈽钚钸餢鮬]>bù; -[嚓擦]>cā; -礤>cǎ; -[䟃䵽囃]>cà; -猜>cāi; -[㒲䴭才材溨犲纔裁財财]>cái; -[㥒䌽䐆䣋倸婇彩採棌睬綵跴踩采]>cǎi; -[䌨䰂埰寀縩菜蔡]>cài; -[傪参-叅喰湌蓡謲飡餐驂骖]>cān; -[㥇㨻㱚㺑䍼䏼䑶䗝䗞䘉䙁䝳䣟䫮䳻嬠嬱惭慙慚残殘蚕蝅蠶蠺]>cán; -[㘔㜗㦧㿊䅟䬫惨慘憯朁黪黲]>cǎn; -[㛑㣓㻮㽩䛹澯灿燦璨粲薒]>càn; -[仓仺伧倉傖凔嵢沧滄舱艙苍蒼螥鶬鸧]>cāng; -[㵴㶓藏鑶]>cáng; -[䅮䢢賶]>càng; -[撡操糙鄵]>cāo; -[㜖㯥䄚䏆䐬嘈嶆曹曺槽漕艚蓸螬褿鏪]>cáo; -[䒑愺懆艸草騲]>cǎo; -[䒃肏襙]>cào; -[㥽㨲㩍䇲䈟䊂䔴䜺侧側冊册厕厠嫧廁恻惻憡拺敇测測畟矠笧策筞筴箣粣茦萗蓛遪頙]>cè; -[嵾梫]>cēn; -[㞥㻸䃡䅾䤁䨙䯔䲋埁岑梣橬涔笒]>cén; -曽>cēng; -[㬝䁬䉕层層嶒曾碀竲鄫]>céng; -[㣒蹭]>cèng; -[偛嗏嫅扠挿插揷杈槎疀肞臿艖銟靫餷馇]>chā; -[㢉㢒㪯㫅䁟䆛䑘䕓䤩䲦䶪垞察嵖搽查査檫痄碴秅茶詧鍤锸𦉆]>chá; -[䰈蹅鑔镲]>chǎ; -[㛳㢎㣾㤞䊬䒲䓭䟕䡨侘奼姹岔差汊紁衩訍詫诧]>chà; -叉>cha; -[拆芆釵钗]>chāi; -[㑪㾹䓱侪儕喍柴祡豺]>chái; -茝>chǎi; -[㳗䘍囆瘥虿蠆袃]>chài; -[幨惉搀攙梴袩裧襜辿鋓]>chān; -[㔆㙻㢆㶣㸥㺥䂁䜛䡪䡲䣑䤫䧯僝儃劖嚵婵嬋孱巉廛棎欃毚湹潹潺澶瀍瀺煘獑磛禪緾繵纏纒缠艬蝉蟬蟾誗讒谗躔鄽酁鋋鑱镵饞馋]>chán; -[㢟㦃㯆㹌㹽䊲䐮䑎䤘䥀䩶䴼䵐丳产冁刬剗剷囅嵼幝摌旵浐滻灛燀產産簅繟蒇蕆諂譂讇谄鏟铲閳闡阐驏骣]>chǎn; -[㙴㬄㵌䀡䠨䪜䱿儳忏懴懺硟羼韂顫颤]>chàn; -[伥倀娼昌晿淐猖琩菖裮錩锠閶阊鯧鲳鼚]>chāng; -[㙊㦂䗅䠆䯴仧偿償兏嘗嚐塲嫦尝常徜瑺瓺甞肠腸膓苌萇鋿鏛镸鱨鲿]>cháng; -[㫤䕋䠀僘厂厰场場廠昶氅鋹]>chǎng; -[䩨倡唱怅悵暢焻畅畼誯韔鬯]>chàng; -敞>chang; -[弨怊抄欩罺訬超鈔钞]>chāo; -[䄻䬤䰫嘲巢巣晁朝樔潮窲謿轈鄛鼂鼌]>cháo; -[㶤㷅䎐䏚吵巐炒煼眧麨]>chǎo; -[仦仯耖觘]>chào; -[伡俥唓砗硨莗蛼車车]>chē; -[㨋㵔䋲䞣䰩偖扯撦]>chě; -[㔭㥉㬚㯙㱌㵃㾝㿭䁤䑲䒆䚢䛸䜠䧪䨁勶坼屮彻徹掣撤澈烲爡瞮硩聅轍辙迠]>chè; -[棽琛瞋諃謓賝郴]>chēn; -[㕴㫳㲀㴴㽸䆣䒞䚘䜟䟢䢅䢈䢻䣅䤟塵宸尘屒忱愖敐曟樄沈沉煁臣茞莀莐蔯薼螴訦諶谌軙辰迧鈂陈陳霃鷐麎]>chén; -[䫖墋捵硶碜磣祳贂趻踸鍖]>chěn; -[㧱䞋儬儭嚫夦榇櫬疢藽衬襯讖谶趁趂齓齔龀]>chèn; -晨>chen; -[䞓偁噌埥憆撐撑棦橕檉泟浾爯琤瞠称稱穪竀緽蛏蟶赪赬鏿阷頳饓]>chēng; -[㞼㨃㲂㼩䁎䄇䆑䆵䆸䇸䔲䗊䧕䫆䮪丞乗乘呈城埕堘塍塖娍宬峸惩憕懲成承挰掁揨晟枨棖椉橙洆浈湞澂澄瀓珵珹程窚筬絾脀脭荿虰裎誠诚郕酲鋮铖騬]>chéng; -[侱塣庱徎悜睈逞騁骋]>chěng; -[㐼䀕牚秤靗]>chèng; -[吃哧喫嗤噄媸彨彲摛欫瓻痴癡眵瞝笞絺蚩螭訵誺郗骴魑黐齝]>chÄ«; -[㓾㙜㞴㢮㮛䈕䐤䔟䙙䛂䜄䞾䪧䮈䶔䶵倁坻墀岻弛彽徥徲持歭池汦泜竾筂箈箎篪耛茌茬荎蚳謘貾赿趍踟迟遅遟遲馳驰]>chí; -[㘜㟂㢁㢋㱀㳏㶴䊼䑛䜵䜻侈叺呎垑姼尺恀恥拸搋欼歯粎耻蚇袳裭褫誃鉹齒齿]>chǐ; -[㒆㓼㔑㞿㡿㽚䇼䗖䟷䠠䤲䮻䰡䳵乿侙傺勅叱啻彳恜慗憏懘抶敕斥杘栻淔灻炽烾熾痓痸瘛眙翄翅翤觢赤趩跮踅遫鉓銐飭饎饬鶒鷘]>chì; -[充冲嘃徸忡憃憧摏沖浺珫舂茺衝蹖𢥞]>chōng; -[㓽㹐䌬䖝䳯崇崈漴痋翀虫蝩蟲褈隀]>chóng; -[埫宠寵]>chǒng; -[㧤揰銃铳𣀒]>chòng; -[婤怞抽搊犨犫瘳篘霌]>chōu; -[㐜㛶㤽㦞㨶㵞㿧䇺䊭䌧䌷䓓䛬䥒䲖仇俦儔嚋嬦帱幬惆愁懤栦椆焘燽燾畴疇皗稠筹籌紬絒綢绸菗薵裯詶讎讐踌躊酧醻雔雠]>chóu; -[䪮丑丒侴偢吜杻杽瞅矁醜魗]>chǒu; -[䔏殠簉臭臰霔]>chòu; -酬>chou; -[出初岀貙齣]>chÅ«; -[㕏㕑㡡㶆㼥䅳䎝䎤䟞䠂䠧刍厨幮廚曯橱櫉櫥滁犓篨耝耡芻蒢蒭蕏藸蜍趎蹰躇躕鉏鋤锄除雏雛鶵𦷝]>chú; -[㹼䊰䖏䙘储儲処憷杵椘楮檚濋础礎褚齭齼]>chǔ; -[㔘㗰㙇㤕㤘䙕䜴䟣䦌䧁䮞亍俶傗儊处怵拀搐敊斣斶欪歜泏滀琡畜矗竌竐臅荲處触觸豖踀遚鄐閦黜]>chù; -楚>chu; -䫄>chuà; -揣>chuāi; -[㪓膗]>chuái; -㪜>chuǎi; -[䦟䦤䦷踹]>chuài; -[巛川氚瑏穿]>chuān; -[㯌㼷䁣伝传傳圌暷椽歂舩船諯輲遄]>chuán; -[㱛僢喘堾腨舛]>chuǎn; -[串汌賗釧钏]>chuàn; -[䆫刅戧摐牎牕疮瘡窓窗窻]>chuāng; -[㡖䃥䚒䡴䭚噇幢床橦牀疒]>chuáng; -[㵂䇬摤漺闖闯]>chuǎng; -[䎫创刱剏剙創怆愴獊]>chuàng; -[吹炊]>chuÄ«; -[㓃㝽㥨㩾䄲䍋䳠倕垂埀捶搥棰槌湷箠篅腄菙錘鎚锤陲顀]>chuí; -䞼>chuǐ; -龡>chuì; -[媋旾春暙椿櫄膥萅鶞]>chÅ«n; -[㝄㝇㵮㸪䏝䐇䓐䔚䣨䣩䥎䫃唇憌浱淳湻滣純纯脣莼蒓蓴醇醕陙鯙]>chún; -[㖺㿤䄝䏛䐏䞐䦮偆惷睶箺萶蠢踳]>chǔn; -[鶉鹑]>chun; -[戳鎈齹]>chuō; -犳>chuó; -[㚟㲋䂐䃗䄪䆯䇍䋘䍳䓎䮕啜嚽娖婥惙擉歠涰珿畷磭綽繛绰腏諁趠輟辍辵辶逴酫醊鑡齪龊]>chuò; -[偨庛疵薋蠀赼趀趑髊]>cÄ«; -[㓨㘂㘹㤵䂣䆅䈘䖪䛐䧳䨏䭣䲿䳄垐嬨慈柌濨珁瓷甆磁礠祠糍茨詞词辝辞辤辭雌飺餈]>cí; -[㠿佌此泚玼皉紪跐]>cǐ; -[㞖㡹㢀㩞㹂䓧䗹䦻䯸䰍䳐伺佽刺刾朿次絘莿蚝蛓螆]>cì; -[匆囪囱忩怱悤憁暰枞棇樅樬樷漗焧燪瑽璁瞛篵緫繱聡聦聪聰苁葱蓯蔥蟌鍐鍯鏓鏦騘驄骢]>cōng; -[㼻䉘䕺䳷丛从叢婃孮従徖從悰慒淙漎潀灇爜琮誴賨賩錝]>cóng; -[欉藂謥]>còng; -㫶>cǒu; -[傶凑楱湊腠輳辏]>còu; -[粗觕麁麄麤]>cÅ«; -[䓚䢐徂殂豠]>cú; -[㗤㰗䃚䎌䙯䛤䟟䠓䠞䥄䥘䬨促噈塶憱梀槭殧猝瘄瘯簇縬脨蔟趗踧蹙蹴醋鼀]>cù; -[撺攛汆蹿躥鋑]>cuān; -[㠝㭫䆘䰖劗巑櫕]>cuán; -[㵀㸑殩熶爨窜竄篡簒鑹镩]>cuàn; -[催嗺墔崔摧榱槯獕磪竴鏙]>cuÄ«; -[凗慛]>cuí; -[㵏㷃䊫䧽漼璀皠趡]>cuǐ; -[㝮㥞㧘㯔㯜㱖㳃㷪䂱䃀䄟䆊伜倅啐啛忰悴毳淬焠琗疩瘁竁粋粹紣綷翆翠脃脆脺膬膵臎萃顇]>cuì; -[村澊皴邨]>cÅ«n; -[存拵袸]>cún; -[刌忖]>cǔn; -[䍎吋寸籿]>cùn; -[搓撮睉磋蒫蹉遳]>cuō; -[㟇㽨䠡䣜䴾嵯嵳痤矬蔖虘醝鹺鹾]>cuó; -[䂳瑳縒脞]>cuǒ; -[䐣䟶䱜剉剒厝挫措歵莝莡蓌逪銼錯锉错齚齰]>cuò; -[哒噠墶搭撘耷荅褡]>dā; -[㜓㯚㾑㿯䃮䐊䑽䩢䳴䵣匒呾妲怛溚炟畗畣笪答繨荙薘蟽褟詚达迖逹達鐽靼鞑韃]>dá; -打>dǎ; -[大眔]>dà; -[㟷瘩]>da; -[呆呔懛獃]>dāi; -[䚞䚟傣歹歺逮]>dǎi; -[㐲㞭㫹㯂㶡㻖㿃䈆䒫代叇埭岱帒带帯帶廗待怠戴柋殆汏瀻玳瑇甙簤紿緿绐艜袋襶貸贷跢蹛軚軩迨霴靆黛黱]>dài; -[丹儋勯匰单単單噡妉媅担擔殚殫甔眈砃箪簞耼耽聃聸襌躭郸鄲酖頕黕]>dān; -[㔊㕪㽎䃫䉞䮰䱋亶伔刐掸撢撣澸玬瓭疸紞胆膽衴黵]>dǎn; -[㗖㡺㫜㱽㲷㵅㺗䄷䉷䨢䨵䩥䭛䳉但僤啖啗啿噉嚪帎弹弾彈惮憚憺旦暺柦氮沊淡潬澹狚疍瘅癉癚窞腅舕萏蛋蜑觛誕诞鉭钽霮饏馾駳髧鴠]>dàn; -[儅噹嵣当澢珰璫當筜簹艡蟷裆襠]>dāng; -[䣊䣣党挡擋攩欓灙譡讜谠黨]>dǎng; -[䑗䦒凼圵垱壋婸宕愓档檔氹潒璗瓽盪瞊砀碭礑簜荡菪蕩蘯趤逿闣雼]>dàng; -[鐺铛]>dang; -[刀刂幍忉朷氘舠釖魛鱽]>dāo; -[㠀㿒䆃䌦䲽壔导導岛島嶋嶌嶹捣捯搗擣祷禂禱蹈隝隯]>dǎo; -[䧂倒到噵悼檤瓙盗盜稲稻纛翿菿衜衟軇道]>dào; -[㝵㤫㥀㥁㯖䙷䙸嘚徳德恴惪淂鍀锝]>dé; -[地得的]>de; -[噔嬁灯燈璒登竳簦覴豋蹬鐙镫]>dēng; -[䒭戥朩等]>děng; -[䠬䮴僜凳墱嶝櫈瞪磴邓鄧隥霯]>dèng; -[仾低堤墑滴眡磾羝菂袛趆鍉鞮]>dÄ«; -[㣙㰅㹍䊮䨀䨤䮤䯼䴞䵠仢唙啇嘀嚁嫡廸敌敵梑涤滌潪狄笛篴籴糴翟荻蔋蔐藡覿觌豴蹢迪鏑镝靮頔鸐]>dí; -[㡳㪆㭽䂡䍕䢑䣌䱃呧坘埞底弤抵拞掋柢氐牴砥聜苖茋菧觝詆诋軧邸阺骶]>dǐ; -[㢩㦅㼵䀸䀿䏑䑭䑯䞶䟡䧝䩘䩚䱱䶍偙僀哋啲坔埊墆墬奃娣嶳帝弟怟慸摕旳杕梊棣楴樀渧焍玓甋睇碲祶禘第締缔肑腣蒂蔕虳蝃螮諦谛踶軑轪递逓遞遰釱鉪馰]>dì; -嗲>diǎ; -[傎厧嵮巅巓巔掂攧敁槇槙滇甸瘨癫癲蹎顚顛颠齻]>diān; -䟍>dián; -[㚲㸃䍄䓦典嚸奌婰敟点琠痶碘蕇踮點]>diǎn; -[㓠㝪㞟㥆㵤㶘㼭䧃佃坫垫墊壂奠婝店惦扂橂殿淀澱玷琔电痁癜磹簟蜔鈿钿阽電靛]>diàn; -[凋刁叼奝彫扚殦汈琱瞗碉虭蛁貂雕鮉鯛鲷鳭鵰鼦]>diāo; -[㹿䉆屌釕钌]>diǎo; -[㒛㪕䂪䂽䔙䠼䵲伄吊弔掉瘹窎窵竨莜蓧藋訋調调釣銱鋽鑃钓铞魡]>diào; -[爹跌]>diē; -[㑙㥈㦶㩸㩹㫼㬪㭯㲲㲳㷸㻡䏲䘭䞇䞕䠟䪥䮢䲀䳀䴑叠喋垤堞峌嵽恎戜挕昳曡氎牃牒瓞畳疉疊眣眰碟絰绖聑胅臷艓苵蜨蝶褋褺詄諜谍趃跕蹀迭镻鰈鲽]>dié; -[惵耊耋]>diè; -[丁仃叮奵帄庰玎疔盯釘钉靪]>dÄ«ng; -婈>díng; -[㫀㴿㼗嵿檙濎薡酊鐤頂顶鼎鼑]>dǐng; -[㝎啶娗定忊椗矴碇碠磸腚訂订錠锭顁飣饤]>dìng; -[丟丢乣銩铥]>diÅ«; -[东倲冬咚埬娻岽崠崬昸東氡氭涷笗苳菄蝀鯟鶇鸫鼕]>dōng; -[㖦㨂䂢䵔墥嬞懂箽董]>dǒng; -[㑈㓊㗢㜱㢥㼯䅍䍶䞒働冻凍动動垌戙挏栋棟洞眮胨胴腖霘駧]>dòng; -[兜兠吺唗橷篼蔸郖都]>dōu; -[㞳㪷䕱唞抖敨枓枡蚪阧陡]>dǒu; -[㛒㢄㷆䄈䕆䛠䬦斗梪毭浢痘窦竇脰荳豆逗鋀閗闘餖饾鬥鬦鬪鬬鬭]>dòu; -[厾嘟督醏闍阇都]>dÅ«; -[㱩㸿㾄䓯䙱䢱䪅䫳䮷儥凟匵嬻椟櫝殰毒涜渎瀆牍牘犊犢独獨瓄皾碡蝳読讀讟读豄贕鑟韇韣韥騳髑黩黷]>dú; -[䀾䈞䐗堵帾暏琽睹笃篤裻覩賭赌錖]>dǔ; -[䄍䅊䟻䲧喥妒妬度杜殬渡秺簬簵肚荰螙蠧蠹鍍镀靯]>dù; -[偳剬媏端褍鍴]>duān; -短>duǎn; -[㫁㱭䠪塅断斷椴段毈煅瑖碫簖籪緞缎腶葮躖鍛锻]>duàn; -[垖堆塠嵟痽磓頧]>duÄ«; -陮>duǐ; -[㙂㟋㠚㬣㳔㵽䇏䇤䔪䨴䨺䬈䬽䯟兊兌兑对対對怼憝憞懟濧瀩碓祋綐薱譈轛鐓鐜镦队隊]>duì; -[吨噸墩-墫弴惇撉撴敦犜礅蜳蹲蹾驐]>dÅ«n; -[趸躉𣎴]>dǔn; -[㬿䤜伅囤崸庉扽沌潡燉盹盾砘踲逇遁遯鈍钝頓顿鶨]>dùn; -[剟咄哆嚉多夛崜]>duō; -[㣞䐾凙剫夺奪悳掇敓敚敠敪椯毲痥莌裰襗踱鈬鐸铎鮵]>duó; -[㔍㖼㙐㛆㛊㥩㻔䒳䙤䠤䤪䩣䫂䯬亸哚嚲垛垜埵奲憜挅挆朶痑綞缍趓躱躲鍺锗鬌]>duǒ; -[㧷㻧䅜䍴䑨䙃䙟䤻䩔刴剁堕墮墯尮嶞惰柁柮桗炧炨舵跥跺陊陏飿饳]>duò; -朵>duo; -[妸妿娿婀婐屙峉痾鈳钶]>ē; -[㼂㼰䄉䕏䖸䩹䱮䳗䳘俄吪娥峨峩枙涐珴皒睋硪磀莪蛾訛誐譌讹迗鈋隲頟額额騀魤鵝鵞鹅]>é; -[㼢噁]>ě; -[㓵㔩㕎㖾㗁㟧㠋㡋㦍㧖㩵㮙㱦㷈䆓䑥䑪䓊䔾䙳䛖䝈䞩䣞䫷䳬偔僫卾厄呃呝咢咹噩圔垩堊堨堮岋崿嶭恶悪惡愕戹扼掠搤搹櫮湂琧略砐硆胺腭苊萼蕚蚅蝁覨詻諤讍谔豟貖軛軶轭遌遏鄂鍔鑩锷閼阏阨阸頞顎颚餓餩饿魥鰐鱷鳄鶚鹗齶]>è; -[誒诶]>éi; -[奀恩煾蒽]>ēn; -䅰>ěn; -[䊐䬶䭓䭡摁]>èn; -[㖇㜨㧫㮕䋩䎟䎠䮘侕児唲栭檽洏而耏聏胹荋袻輀轜陑隭髵鮞鲕鴯鸸]>ér; -[㚷㢽䋙䌺尒-尔峏栮洱爾珥耳薾迩邇餌饵駬]>ěr; -[㒃㛅䎶䏪䣵二佴刵咡弍弐樲毦眲衈誀貮貳贰鉺铒]>èr; -[傠发彂橃沷発發瞂]>fā; -[㕹㘺䇅䣹乏伐垡姂栰疺砝筏罚罰罸茷藅閥阀]>fá; -[䂲佱法灋髮]>fǎ; -[㛲䒥珐琺蕟髪]>fà; -[僠噃嬏帆幡旙旛杋番笲籓繙翻轓飜鱕]>fān; -[㠶㸋㺕䀀䀟䉒䊩䋣䋦䌓䡊䪛䪤䫶䭵䮳凡-凣勫墦忛憣柉棥樊橎瀪瀿烦煩燔璠矾礬籵緐繁羳膰舧蕃薠藩蘩蠜襎蹯釩鐇钒颿鷭]>fán; -[䒠䛀反瓪軡返魬]>fǎn; -[㕨㝃㤆㴀㶗㼝㽹䉊䐪䒦䣲奿嬎梵氾汎泛滼犯畈盕笵範范訉販贩軓軬鄤飯飰饭飯]>fàn; -[匚方枋汸淓牥芳蚄邡鈁钫鴋]>fāng; -[㤃埅妨房肪防魴鰟鲂鳑]>fáng; -[㑂㕫㧍㯐䢍䦈䲱仿倣旊昉昘瓬眆紡纺舫訪访髣鶭]>fǎng; -[放趽]>fàng; -坊>fang; -[啡妃婓扉渄猆緋绯菲蜚裶霏非靟飛飝飞馡騑騛鯡鲱]>fēi; -[䈈淝肥腓萉蜰]>féi; -[㥱䕁䨽䨾匪奜悱斐朏棐榧篚翡蕜誹诽餥]>fěi; -[㔗㩌㭭㵒䆏䉬䑔䕠䚨䛍䠊䤵䰁俷剕厞吠屝废廃廢昲曊杮櫠沸濷狒疿痱癈砩肺胇芾蟦費费鐨镄靅鼣]>fèi; -[兝分吩岎帉昐朆氛燓砏紛纷翂芬衯訜酚鈖隫雰餴饙鳻𦐈]>fēn; -[㷊㸮䩿䯨䴅坆坟墳妢幩弅枌梤棻棼橨汾濆炃焚燌獖玢秎羒肦蒶蕡蚠蚡豮豶轒鐼馚馩魵黂鼖鼢]>fén; -[㥹粉羵黺]>fěn; -[㖹㮥㿎份偾僨坋奋奮忿愤憤瀵粪糞膹鱝鲼]>fèn; -[丰仹偑僼凨凬凮堼夆妦寷封峯峰崶捀枫桻楓檒沣灃烽熢犎猦疯瘋盽砜碸篈莑葑蘴蜂蠭豐鄷酆鋒鏠锋靊風飌风麷]>fēng; -[㦀㵯䏎䙜䩼冯堸摓沨浲渢漨綘艂逢馮]>féng; -[䟪唪覂諷讽]>fěng; -[㡝俸凤奉湗焨煈甮縫缝賵赗鳯鳳鴌]>fèng; -[仏坲]>fó; -[䳕剻哹紑裦]>fóu; -[否殕缶缹缻芣雬鴀]>fǒu; -[椱竎]>fòu; -[伕呋妋姇孵尃怤懯敷旉枹柎泭玞砆稃筟糐綒罦肤膚荴衭豧趺跗邞鄜鈇鳺麩麬麱麸]>fÅ«; -[㚕㜑㟊㠅㤔㪄㫙䃽䋹䌿䍖䑧䒀䔰䕎䘠䞞䟮䡍䨗䪙䵗䵾乀伏佛俘冹凫刜匐咈嚩垘孚岪巿帗幅幞弗彿怫払扶拂服枎柫栿桴棴氟洑浮涪澓炥烰玸琈甶畉畐癁祓福符笰箙粰紱紼絥綍绂绋罘翇艀艴芙苻茀茯莩菔葍虙蚨蜉蝠諨踾輻辐郛鉘鉜韍韨颫髴鮄鳧鳬鴔鵩鶝福]>fú; -[㓡㕮䋨䌗䓛䗄䩉䫍䫝䯽乶俌俛俯呒嘸府弣抚拊捬撫斧暊滏焤盙秿簠腐腑莆蚥蜅輔辅郙釜釡頫鬴鯆黼]>fǔ; -[㙏㚆㤱㬼㳇㵗㽬㾈䂤䎅䒇䘀䘄䝾䞜䞯䞸䟔䠵䦣䧞䨱䭸䮛䯱付偩冨副圑坿复妇婏婦媍嬔富峊復榑父祔稪紨緮縛缚胕腹萯蕧蚹蛗蝜蝮袝複褔覆訃詂讣負賦賻负赋赙赴輹鍑鍢阜阝附陚馥駙驸鮒鰒鲋鳆黻𦱖]>fù; -[傅咐夫甫袱]>fu; -[嘎嘠]>gā; -[尜錷]>gá; -[尕玍𠁥]>gǎ; -å°¬>gà; -[侅垓姟峐晐畡祴胲荄該该豥賅赅郂陔隑]>gāi; -[䪱忋改絠]>gǎi; -[㕢㧉㮣䏗丐乢匃匄戤摡概槩槪溉漑瓂盖葢蓋賌鈣钙𩕭]>gài; -[乹乾亁凲坩尲尴尶尷嵅忓攼杆柑泔玕甘疳矸竿筸粓肝芉苷虷蜬迀鳱]>gān; -ä» >gán; -[㺂䃭䇞䔈䤗䵟感擀敢桿橄澉灨皯盰秆稈衦贑赶趕鱤鳡]>gǎn; -[䯎䲺倝凎干幹旰榦檊汵涻淦簳紺绀詌贛赣骭]>gàn; -[冈冮刚剛堈堽岡掆杠棡牨犅碙笐綱纲缸罁罓罡肛舡鋼鎠钢]>gāng; -[㟠㟵㽘䴚岗崗港]>gǎng; -[戅-戇槓焵筻]>gàng; -[槔槹橰櫜滜皋皐睾篙糕羔羙膏臯餻高髙鷎鼛𦤎]>gāo; -[㚏㚖㾸䗣夰搞暠杲槁檺稾稿筶縞缟菒藁藳]>gǎo; -[叝吿告煰祮祰禞誥诰郜鋯锆鯌]>gào; -[割咯哥圪戈戓戨搁擱歌渮滒牁牫牱疙肐胳謌鎶鴚鴿鸽麧𪃿]>gē; -[㗆㝓㠷㦴㨰㪾㵧㷴䆟䈓䐙䕻䗘䘁䛋䛿䢔䨣䩐䪂䪺䫦佮匌呄嗝噶塥愅挌搿敋格槅獦膈臵茖蛒裓觡諽輵轕郃鎘镉閣閤阁阖隔革鞷韐韚骼鮯鰪齃]>gé; -[哿擖笴舸葛]>gě; -[䧄个個各嗰箇虼鉻铬]>gè; -[給给]>gěi; -[刯剆根跟]>gēn; -哏>gén; -䫀>gěn; -[㫔㮓亘亙艮茛]>gèn; -[庚揯搄浭畊秔稉粳絙絚緪縆羮羹耕菮賡赓鶊鹒]>gēng; -[㾘䋁䌄哽埂峺挭梗綆绠耿莄郠骾鯁鲠]>gěng; -[䱍䱎䱭䱴堩更]>gèng; -[供公功匑厷塨宫宮工幊弓恭愩攻杛玜疘碽篢糼肱觥觵躬躳釭魟龏龔龚]>gōng; -[㤨㧬㫒㭟㺬㼦䂬䡗巩拱拲栱汞珙穬蛬銾鋛鞏]>gǒng; -[㓋㔶㯯䇨䢚共廾羾貢贡]>gòng; -蚣>gong; -[勾沟溝篝緱缑耩芶褠鈎鉤钩鞲韝]>gōu; -[㺃岣枸狗玽笱耇-耉苟茩蚼豿]>gǒu; -[㗕㜌㝅㝤㨌㳶䃓䝭䞀傋冓坸垢够夠姤媾彀搆撀构構煹覯觏訽詬诟購购遘雊骺]>gòu; -[估呱夃姑嫴孤柧橭沽泒痼笟箍箛罛苽菰蛄觚軱辜酤鈲鮕鴣鸪]>gÅ«; -[䜼䮩鶻鹘]>gú; -[㒴㚉㯏㼋㾶䀇䀜䀦䀰䅽䊺䍍䐨䡩䵻古唂唃嘏尳愲扢杚榖毂淈濲瀔焸牯狜皷皼盬瞽穀糓縎罟羖股脵臌蓇薣蛊蛌蠱詁诂谷轂鈷钴餶馉骨鼓鼔]>gǔ; -[㧽㽽䍛䓢䶜僱凅固堌崓崮怘故梏棝榾牿祻稒錮锢雇頋顧顾鯝鲴鶮]>gù; -[咕菇]>gu; -[刮劀懖栝桰煱瓜瘑筈緺聒胍脶腡葀趏踻銽頢颳騧鴰鸹]>guā; -[㒷䈑冎剐剮叧寡]>guǎ; -[卦啩坬挂掛絓罣罫褂詿诖髺]>guà; -乖>guāi; -[拐枴柺箉]>guǎi; -[㧔㷇㽇䂯䊽叏夬怪恠旝癐]>guài; -[倌关冠官棺瘝癏蒄覌観觀观関闗關鱞]>guān; -[䏓䗆䘾䦎䩪䪀䲘琯痯筦管脘舘輨錧館馆鳤館]>guǎn; -[㮡㴦䌯䎚䗰䙛䙮䝺丱悹悺惯慣掼摜樌毌泴涫潅灌爟瓘盥矔礶祼罆罐謴貫贯遦鏆鑵雚鱹鸛鹳]>guàn; -[侊僙光咣垙姯洸灮炗炛烡珖胱茪輄銧黆]>guāng; -[广広廣犷獷]>guǎng; -[㫛桄櫎臦臩逛]>guàng; -[亀傀圭妫媯嫢嬀帰归摫椝槻槼歸溈珪瑰璝瓌皈硅窐膭袿規规邽郌閨闺鬶鬹鮭鲑龜龟]>guÄ«; -潙>guí; -[㔳㧪㨳㩻㲹㸵䁛䍯䞈䞨䣀䤥佹匦匭厬垝姽宄庋庪恑攱晷氿癸祪簋蛫蟡觤詭诡軌轨陒鬼]>guǐ; -[㙺㪈䇈䌆䍷䐴䖯䙆䝿䠩䯣䰎䳏刽刿劊劌匮匱嶡巜攰昋暩柜桂櫃溎炔筀蓕襘貴贵跪鞼鱥]>guì; -裩>gÅ«n; -[㙥㫎㯻䃂䎾䜇丨掍滚滾磙緄绲蓘蔉衮袞袬輥辊鮌鯀鲧]>gǔn; -[䵪棍璭睴]>gùn; -[埚堝墎崞濄蝈蟈郭鈛鍋锅]>guō; -[㕵㖪㚍㶁䂸䆐䐸䤋䬎囯囶囻国圀國帼幗慖掴摑漍簂聝腘膕虢馘]>guó; -[㞅䙨䴹惈果椁槨淉猓粿綶菓蜾裹輠鐹餜馃]>guǒ; -[㳀腂过過]>guò; -[啯嘓]>guo; -[哈𠀀]>hā; -蛤>há; -[咍咳嗨]>hāi; -[㜾㨟䠽䯐䱺孩还還頦颏骸]>hái; -[海烸酼醢]>hǎi; -[㤥㦟㧡㺔䇋亥嗐害氦餀饚駭骇𠀅𥩲]>hài; -[唅嫨憨炶甝蚶谽酣頇顸馠魽鼾]>hān; -[㖤㙈㙔㟏㟔㮀㶰㼨䈄䗙䤴䥁䨡䮧䶃佄函凾含圅娢寒崡晗梒涵焓琀筨肣邗邯鋡韓韩]>hán; -[㘎㘕㘚㙳㵎㸁㺖㽉䍐䍑䓍䓿䛞厈喊浫罕蔊豃鬫]>hǎn; -[㑵㒈㜦㢨㨔㪋㲦㵄㽳䁔䌍䎯䏷䐄䕿䖔䘶䧲䫲傼哻垾娨屽悍憾扞捍撼攌旱晘晥暵汉汗浛涆淊漢澏瀚焊熯猂皔睅翰莟菡蛿蜭螒譀豻貋釬銲鋎閈闬雗頷顄颌颔馯駻鶾]>hàn; -夯>hāng; -[㤚䀪䘕䲳斻杭桁沆肮航苀蚢貥迒頏颃魧]>háng; -[汻酐]>hǎng; -[䟘䣈䦳䴂]>hàng; -[侾嚆蒿薅]>hāo; -[㕺㠙㩝㬔䝥䧫儫勂嗥嘷噑嚎壕椃毫濠獆獋獔籇蠔諕譹豪]>háo; -[好恏郝]>hǎo; -[㘪㙱㚪㝀㞻㬶㵆䒵䚽䝞䧚䪽䬉䯫傐号哠峼悎昊昦晧暤暭曍浩淏滈澔瀥灏灝皓皜皞皡皥秏耗聕薃號鄗鎬镐顥颢鰝]>hào; -[喝嗬峆抲訶诃]>hē; -[㓭㔠㕡㥺㪉㭘㭱㮝㮫㹇㿣䃒䅂䒩䕣䞦䢗䫘䳚䶅何劾厒合咊和哬啝姀廅惒敆曷柇核楁毼河涸滆澕熆狢盇盉盍盒礉禾秴篕紇纥翮耠荷菏萂蒚蚵蝎螛覈訸詥貈貉釛鉌閡闔阂鞨頜餲魺鲄鶡鹖齕龁龢]>hé; -[㕰㦦㬞㵑㷎㷤䎋䓼䚂䪚䳽䴳䵱佫俰嗃壑暍焃煂熇爀癋皬碋翯蠚袔褐賀贺赫隺靎靏鶴鸖鹤鶴]>hè; -[嘿潶黑黒]>hēi; -[㯊拫痕鞎]>hén; -[䓳佷很狠詪]>hěn; -恨>hèn; -[亨哼悙脝諻]>hēng; -[㔰㶇䄓䒛䬖䬝䯒姮恆恒揘楻横橫珩蘅衡誙鐄鑅韹鴴鸻黉黌]>héng; -[啈撔澋絎绗]>hèng; -[叿呍哄揈渹烘焢薨訇谾軣輷轟轰鍧顭鬨]>hōng; -[㖓㢬䂫䃔䆖䉺䍔䜫䞑䡌䡏䧆䨎䩑䪦䫹䫺䲨仜吰垬妅娂宏宖峵嵤弘彋汯泓洪浤渱潂灴玒硔硡竑竤篊粠紅紘紭綋红纮翃翝耾舼苰荭葒葓虹訌讧谹谼鈜鉷鋐閎闳霟鞃鴻鸿]>hóng; -[㬴䀧唝嗊晎]>hǒng; -[㶹澒蕻鍙閧]>hòng; -[㗋㤧㬋㮢㺅䂉䗔䙈䫛䳧侯喉帿猴瘊睺矦篌糇翭葔銗鍭餱鯸齁]>hóu; -[㖃㸸吼犼]>hǒu; -[㕈㫗䞧䪷厚后垕堠後洉缿豞逅郈鄇鮜鱟鲎鲘]>hòu; -候>hou; -[匢匫呼唿啒嘑垀寣峘幠忽惚昒曶欻歑泘滹烀烼苸虍虖軤轷雐]>hÅ«; -[㗅㪶㯛㹱㾰㿥䁫䈸䉉䉿䊀䎁䔯䚛䞱䠒䧼䩴䭅䭌䭍䮸喖嘝囫壶壷壺媩弧抇搰斛楜槲湖瀫焀煳狐猢瑚瓳箶絗縠胡葫蔛蝴螜衚觳醐鍸頶餬鬍魱鰗鵠鶘鶦鹄鹕]>hú; -[䗂乕浒滸琥萀虎虝]>hǔ; -[㕆㦿㨭㸦㺉䇘䍓䕶䛎䨥䨼䪝䲵互冱冴嚛婟嫭嫮岵帍弖怙戶-戸戽扈护摢擭昈枑楛槴沍沪滬熩瓠祜笏簄綔蔰謼護鄠頀鳸]>hù; -[乎唬糊]>hu; -[哗嘩花芲錵鷨𢄶]>huā; -[㕲㟆㠏㦊㭉㮯䅿䏦䔢䱻䶤华嬅崋滑狯猾磆華蕐螖譁釫鏵铧驊骅]>huá; -蘳>huǎ; -[㓰㕦㕷㚌㠢㦎㩇䛡䠉划劃化婳嫿摦杹桦槬樺澅画畫畵繣舙觟話諣譮话]>huà; -竵>huāi; -[㜳䃶䈭䴜佪徊怀懐懷槐櫰淮瀤耲褢褱踝]>huái; -[咶坏壊壞孬蘹蘾諙]>huài; -[嚾懽歓犿獾讙貛酄驩鴅鵍]>huān; -[㡲㦥㵹㶎㿪䍺䝠䥧䦡䭴䮝䴟嬛寏寰懁捖桓梡洹澴狟环環瓛糫繯缳羦肒荁萈萑豲貆鍰鐶锾镮闤阛雈鬟]>huán; -[㣪㬊䈠唍嵈睆緩缓藧輐]>huǎn; -[㓉㕕㪱㬇㹖㼫䀓䀨䆠䯘唤喚喛垸奂奐宦幻患愌换換擐梙槵涣渙漶烉焕煥瑍痪瘓豢轘逭鰀]>huàn; -[欢歡]>huan; -[嚝塃巟慌朚肓荒衁]>huāng; -[㞷㾠㾮䅣䊗䊣䍿䐵䑟䞹䪄䮲䳨偟兤凰喤堭墴媓崲徨惶撗湟潢煌熿獚瑝璜癀皇磺穔篁簧艎葟蝗蟥趪遑鍠锽隍餭騜鰉鱑鳇鷬黃黄𪏙]>huáng; -[㤺㬻䁜䌙䐠宺幌怳恍愰晄榥滉炾熀皝詤謊谎鎤𣄙]>huǎng; -[㨪曂皩軦]>huàng; -晃>huang; -[咴噅噕婎幑徽恢悝拻挥揮撝晖暉洃瀈灰烣煇禈翚翬袆褘詼诙豗輝辉隓隳顪鰴麾]>huÄ«; -[囘回囬廻廽恛洄痐茴蚘蛔蛕蜖迴逥鮰]>huí; -[㩓㷐䃣䏨䛼悔檓毀毁毇烠燬芔虺蝰譭𠧩]>huǐ; -[㑰㑹㒑㜇㞧㤬㥣㨤㨹㩨㬩㰥㱱㷄㻅䂕䅏䇻䌇䕇䙌䙡䛛䜋䤧䧥䩈䫭会僡儶匯卉喙嘒噧嚖圚嬇寭廆彗彙彚恚恵惠慧憓晦暳會槥橞櫘殨汇泋湏滙潓濊烩燴獩璯瞺秽穢篲絵繐繢繪绘缋翙翽荟蔧蕙薈藱螝蟪詯誨諱譓譿讳诲賄贿鏸鐬闠阓靧韢頮颒餯饖]>huì; -[婚惛惽昏昬棔殙涽睧睯荤葷閽阍]>hÅ«n; -[㑮㨡䛰䫟䰟䴷堚忶棞楎浑渾珲琿繉轋顐餛餫馄魂鼲]>hún; -[睔鯶]>hǔn; -[㥵䅙䅱䚠䧰俒倱圂慁混溷焝觨諢诨]>hùn; -[劐豁鍃锪]>huō; -[䄆䄑䣶䯏佸活秮秳萿鈥钬]>huó; -[伙夥火邩]>huǒ; -[㗲㘞㦜㦯㨯㯉㸌䁨䂄䄀䉟䋭䦚䰥剨咟嗀嚄嚯嚿奯彟彠惑或捇掝攉旤曤楇檴沎湱濩瀖獲瓁癨眓矆矐矱砉礊祸禍穫耯臒臛艧获蓃藿蠖謋讗貨货鑊镬閄雘霍霩靃韄騞鱯鳠鸌鹱嗀]>huò; -硧>iǒng; -[䤠丌乩僟击刉刏剞勣叽咭唧喞嗘嘰圾基墼姫姬尐屐峜嵆嵇擊朞机枅樍機櫅毄激犄玑璣畸畿矶磯禨积稘稽積笄筓箕簊績绩羁羇羈耭聻肌虀虮蛣襀覉覊觭諅譏譤讥賫賷赍跡跻蹟躋躸迹銈鐖鑇鑙隮雞鞿韲飢饑饥鰿鳮鶏鷄鸡麡齎齏齑𠼻]>jÄ«; -[㔕㖢㗊㗱㘍㙫㞃㠍㠎㡇㡮㤂㥛㧀㭲㮟㮨㱞㲺㴕㻷㽺㾊䁒䐕䐚䚐䞘䟌䣢䩯䯂䲯䳭亟亼伋佶偮卙即卽及吉堲塉姞嫉岌嵴嶯庴彶忣急愱戢揤撃擮极棘楫極槉橶檝殛汲湒漃潗濈焏狤疾瘠皍礏禝笈箿籍級级耤脊膌芨莋蒺蓻蕀蕺蝍螏襋觙踖蹐轚郆鈒銡鍓鏶钑集雦雧霵鞊鴶鶺鸄鹡]>jí; -[㚡㞆㞛㞦㦸㨈㴉䍤䢳䤒丮几妀己幾戟挤掎撠擠泲犱玘穖蟣踦鈘魕魢鱾麂]>jǐ; -[㑧㒫㙨㠖㠱㡭㡶㥍㭰㰟㲅㳵㸄㹄㻑㾒㾵䋟䐀䒁䓫䓽䗁䜞䝸䠏䢋䦇䨖䮺䰏䶓䶩伎兾冀剂剤劑哜嚌坖垍塈妓季寂寄彐彑忌悸惎懻技旡-旣暨曁梞檕檵洎济済漈濟瀱猤璾痵瘈癠瞡祭稩稷穄穊穧紀継繼纪继罽臮芰茍茤葪蓟蔇薊蘎蘮蘻裚褀覬觊計記誋计记跽际際霁霽驥骥髻鬾魝鮆鯚鯽鰶鱀鱭鲚鲫鵋齌𡜱]>jì; -[輯辑]>ji; -[乫伽佳傢加嘉夹夾家幏拁枷毠泇犌猳珈痂笳耞腵茄葭袈豭貑跏迦鉫鎵镓鴐麚]>jiā; -[㪴㮖㼪㿓䀫䀹䕛䛟䩡唊圿埉恝戛戞扴梜浃浹硈舺荚莢蛱蛺袷裌跲郏郟鉿鋏铗铪鞂鞈頬頰颊餄饸鵊]>jiá; -[㕅䑝仮假叚婽岬徦斚斝椵榎槚檟玾甲瘕胛賈贾鉀钾]>jiǎ; -[䁍价価價嫁架榢駕驾]>jià; -稼>jia; -[偂兼冿囏坚堅奸姦姧尖惤戋戔揃搛椷樫櫼歼殲湔瀐瀸煎熞熸牋犍猏玪监監睷碊礛笺箋篯籛緘縑缄缣肩艰艱菅菺葌蒹蕑蕳虃豜豣鑯間间靬鞬鞯韀韉顅餰馢騝鬋魐鰜鰹鲣鳒鳽鵳鶼鹣麉]>jiān; -[㔓㨵㳨㶕䄯䅐䉍䛳䟰䩆䭠䮿䯛䯡䵡䵤䶠俭倹儉减剪囝堿寋弿戩戬拣挸捡揀撿暕柬检検檢減湕瀽瑐睑瞼硷碱笕筧简簡絸繭翦茧藆蠒裥襇襺謇謭譾谫趼蹇鐗鐧锏鰔鹸鹻鹼]>jiǎn; -[㓺㔋㣤㦗㨴㯺㰄㺝䇟䟅䤔䥜䧖䬻䭈䭕䵖䵛件侟俴俿健僣僭剑剣剱劍劎劒劔建徤擶旔枧栫梘楗榗毽洊涧渐溅漸澗濺瀳牮珔磵箭糋繝腱臶舰艦荐蔪薦螹襉見覵覸见諌諓諫譼谏賎賤贱趝践踐踺釼鉴鋻鍳鍵鏩鑑鑒鑬鑳键餞饯鰎]>jiàn; -[僵壃姜将將摪橿殭江浆漿瓨畕畺疅疆礓繮缰翞茳葁薑螀螿豇韁鱂鳉𤕭]>jiāng; -[㢡㯍䁰䉃䋌䒂䙹奖奨奬桨槳滰獎膙蒋蔣襁講讲顜]>jiǎng; -[䞪匞夅嵹弜弶摾洚犟糡糨絳绛蔃袶謽酱醤醬降𢘸]>jiàng; -匠>jiang; -[䴔交僬嘄姣娇嬌峧嶕憍憿椒浇澆焦燋礁穚胶膠膲芁茭茮蕉蛟蟂蟭詨跤郊鐎驕骄鱎鴵鵁鷍鷦鷮鹪𨺹]>jiāo; -嫶>jiáo; -[㩰㭂㳅㽱㽲䀊䁶䘨䚩䠛䥞䴛佼侥僥儌剿劋勦孂徺挢捁搅摷撟撹攪敽敿晈暞曒湬漅灚烄煍狡璬皎皦矫矯筊絞繳绞缴脚腳臫虠蟜角譑賋踋鉸铰餃饺鮫鲛]>jiǎo; -[㠐㬭㰾䂃䆗䣤䪒叫呌嘂嘦噍噭嬓峤嶠徼挍敎教敫斠滘漖潐珓皭窌窖訆譥較轎轿较酵醮醶釂]>jiào; -[喈嗟堦巀接掲揭擑椄湝瑎皆秸稭腉菨薢蝔街謯阶階鶛]>jiē; -[㓗㓤㔾㘶㛃㝌㞯㦢㨗㨩㮞㮮㸅䀷䂒䂝䂶䅥䌖䕙䗻䣠䥛䲙倢偈偼傑刦刧刼劫劼卩卪喼婕孑岊崨嵥幯截拮捷搩擳昅杰栉栨桀楬楶榤櫛櫭洁滐潔瀄犵疖癤睫碣竭節結结羯脻节莭葜蓵蜐蠘蠞蠽衱袺訐詰誱讦诘趌踕迼鉣鍻鐑頡颉騔鮚鲒]>jié; -[媎檞解觧飷]>jiě; -[㑘㝏㠹㾏㿍䁓䇒䔿䛺䯰䰺䱄䲸丯介借吤唶堺屆届岕庎徣悈戒楐犗玠琾界畍疥砎紒繲艥芥藉蚧褯誡诫躤鎅魀魪𡽱]>jiè; -姐>jie; -[今埐嶜巾惍斤津珒瑧矜祲筋紟荕菳衿襟觔金钅鹶黅]>jÄ«n; -[㝻㬐㯸㹏䐶䒺䤐䥆䭙仅侭僅儘卺堇尽巹慬槿殣漌瑾盡紧緊菫覲觐謹谨錦锦饉馑]>jǐn; -[㨷㬜㯲㰹㱈㴆㶦㶳䀆䆮䋮䌝䑤䖐䗯䝲䫴䶖伒僸凚劤劲勁噤嚍墐妗嫤嬧搢晉晋暜枃歏浕浸溍濅濜烬燼琎瑨璡璶瘽禁縉缙肵荩蓳藎賮贐赆近进進靳齽]>jìn; -[䴖京亰兢坕坙婛巠惊旌旍晶泾涇猄箐精経經经聙腈茎荆荊莖菁葏驚鯨鲸鵛鶁鶄麖麠黥鼱精]>jÄ«ng; -[㘫䜘丼井儆刭剄宑憬憼景暻汬烃烴燛璟璥穽肼蟼警阱頚頸颈]>jǐng; -[㕋㢣㣏㬌㵾㹵䔔䡖䵞俓倞傹净凈境妌婙婧弪弳径徑擏敬曔桱梷浄淨濪瀞獍痉痙竞竟竧竫競竸胫脛葝誩踁迳逕鏡镜靓靖静靚靜靖]>jìng; -睛>jing; -[冂冋坰垧埛扃蘏蘔駉駫]>jiōng; -[㓏㖥㢠㤯㷗㷡䌹䐃䢛侰僒冏囧幜泂炅炯烱煚煛熲皛窘絅綗褧迥逈顈颎]>jiǒng; -[㑋澃]>jiòng; -[丩勼啾揂揪揫朻樛湫牞究糺糾纠萛觓轇醔阄鬏鬮鳩鸠]>jiÅ«; -㺵>jiú; -[㡱久乆九奺灸玖紤舏赳酒镹韭韮]>jiǔ; -[㠇㧕㩆㲃㶭㺩䅢䆒䊆䊘䓘䛮䡂䳎䳔僦匓匛匶厩咎媨就廄廏廐慦捄救旧柩柾桕疚臼舅舊鯦鷲鹫麔齨]>jiù; -[㞐凥刟娵居岨崌抅拘椐檋沮涺狙琚疽眗罝腒艍苴菹葅蜛裾趄跔踙陱雎鞠駒驹鮈鴡鶋]>jÅ«; -[㘲㥌㩴㮂㽤䋰䏱䕮䗇䜯䡞䤎䪕䰬䱡䴗侷匊婅局巈挶掬桔梮椈橘毩毱泦淗焗犑狊箤粷菊蘜諊趜跼踘蹫躹輂郹鄓鋦锔閰鞫駶驧鵙鵴鶪鼳]>jú; -[䃊䄔䅓䈮䢹䶥举咀弆挙擧椇榉榘櫸欅竘筥舉莒蒟蝺袓跙踽齟龃]>jǔ; -[㘌㜘㞫㠪㨿㩀㬬㳥䆽䛯䣰䱟䵕䶙俱倨倶具冣剧劇勮句埧埾壉姖寠屦屨岠巨怇怚惧愳懼拒拠据據昛歫泃洰澽炬焣犋秬窭窶簴粔絇耟聚苣虡蚷詎讵貗距踞躆遽邭醵鉅鋸鐻钜锯颶飓駏鮔]>jù; -矩>ju; -[剶姢娟捐朘涓蠲裐鎸鐫镌鵑鹃]>juān; -[㷷卷埢捲臇菤𩜇]>juǎn; -[㢧㢾㪻㯞䄅䌸䖭䚈䡓䳪倦劵勌勬巻帣慻桊淃狷獧瓹眷睊睠絹绢罥羂鄄錈锩韏飬鬳]>juàn; -[噘屩撅]>juē; -[㓸㔃㔢㟲㤜㩱㭈㭾㰐㵐㷾㸕㹟㻕䀗䁷䆕䆢䇶䋉䍊䏐䏣䐘䖼䘿䙠䝌䞷䠇䡈䦆䦼亅倔傕僪决刔劂勪厥噱嚼孒孓屫崛崫嵑嶥弡彏憠憰戄抉挗捔掘撧攫斍柽桷橛橜欔欮殌氒決潏焆焳熦爑爝爴爵獗玃玦玨珏瑴疦瘚矍矡砄絕絶绝臄芵蕝蕨蚗蟨蟩蠼覐覚覺觉觖觼訣譎诀谲谻貜赽趹蹶蹷躩逫鈌鐍鐝钁镢鱊鱖鳜鴃鷢龣𧽸𩪗]>jué; -[䞵䟾]>juě; -[鴂𠢤]>juè; -[军君均姰桾汮皲皸皹碅莙菌蚐袀覠軍鈞銁銞钧頵鮶鲪麇麏麕]>jÅ«n; -蜠>jǔn; -[㑺㒞㓴㕙㝦㴫㻒㽙䇹䕑䜭䝍俊儁呁寯峻懏捃攈攟晙殾浚濬焌珺畯睃竣箘箟葰蔨郡隽雋餕馂駿骏鵘]>jùn; -咖>kā; -[佧卡咔胩鉲]>kǎ; -髂>kà; -[奒开揩痎鐦锎開]>kāi; -[㡁䁗䐩䒓凯凱剀剴嘅垲塏恺愷慨暟楷蒈輆鍇鎧铠锴闓闿颽]>kǎi; -[㲉䡷勓忾愒愾欬炌炏烗礚]>kài; -[刊勘堪嵁戡栞龕龛]>kān; -[㸝䶫侃偘冚坎埳塪崁惂槛檻欿歁歞砍莰輡轗顑]>kǎn; -[䀍䘓墈看瞰矙磡竷衎闞阚]>kàn; -[嫝康忼慷槺漮穅粇糠躿鏮鱇]>kāng; -[扛摃]>káng; -䡉>kǎng; -[㰠亢伉匟囥抗炕犺砊邟鈧钪閌闶]>kàng; -[尻髛鷱]>kāo; -攷>káo; -[䯪丂拷栲槀洘烤燺稁考薧鮳鲓𥬯]>kǎo; -[䐧犒銬铐靠]>kào; -[峇柯棵樖犐珂疴瞌磕科稞窠簻胢苛萪薖蝌趷軻轲顆颗髁]>kē; -[壳殼]>ké; -[㞹㪃㪙㪡㪼㰤㵣可坷岢嶱敤渇渴炣礍]>kě; -[㕉㤩㾧䙐䶗克刻剋勀勊喀嗑垎堁娔客尅恪愘愙揢搕榼氪溘碦緙缂衉課课醘騍骒]>kè; -[啃垦墾恳懇肎肯肻豤錹齗齦龂龈]>kěn; -[㸧掯珢硍裉褃]>kèn; -[劥吭坈坑奟妔挳摼牼硁硜硻銵鍞鏗铿阬]>kēng; -ä¡°>kěng; -[倥埪崆悾涳硿空箜錓鵼]>kōng; -[㤟孔恐]>kǒng; -[㸜控鞚]>kòng; -[剾彄抠摳芤袧]>kōu; -[㔚劶口]>kǒu; -[㓂㰯㲄㽛䳟䳹佝冦叩宼寇怐扣敂滱瞉窛筘簆蔲蔻釦鷇𦶲]>kòu; -[刳哭圐堀扝枯桍窟胐跍軲轱郀顝骷]>kÅ«; -[䇢苦]>kǔ; -[㒂㠸俈喾嚳库庫焅瘔矻秙絝绔袴裤褲趶酷]>kù; -[侉咵夸姱荂誇]>kuā; -[垮恗銙錁锞]>kuǎ; -[㐄䋀挎胯跨骻]>kuà; -呙>kuāi; -[㧟䓒擓蒯]>kuǎi; -[㔞㙕㙗㟴㬮㱮䈛䭝䯤䶐侩儈凷哙噲块塊墤廥快桧檜欳浍澮獪禬筷糩脍膾郐鄶駃鬠鱠鲙]>kuài; -[宽寛寬臗髋髖]>kuān; -[㯘䕀䥗䲌欵款歀窾]>kuǎn; -䤭>kuàn; -[劻匡匩哐恇框洭硄筐誆诓軭邼]>kuāng; -[㤮抂狂誑诳鵟]>kuáng; -[俇夼黋]>kuǎng; -[䊯䵃儣况卝圹壙岲懬懭旷昿曠況爌眖眶矌矿礦絖纊纩貺贶躀邝鄺鉱鑛]>kuàng; -[亏刲岿巋盔窥窺茥藈蘬虧鍷闚]>kuÄ«; -[㙓㚝㨒䕫䟸䤆䧶䯓䳫喹夔奎戣揆晆暌楏楑櫆湀犪睽聧葵蘷虁躨逵鄈鍨頯馗騤骙魁]>kuí; -[㛻䠑䦱䫥煃跬蹞頍]>kuǐ; -[㕟䈐䍪䕚喟嘳媿尯愦愧憒撌槶樻溃潰瞆瞶篑簣籄聩聭聵腃蒉蔮蕢鐀鑎餽饋馈騩]>kuì; -[坤堃婫崐崑惃昆晜焜猑琨瑻菎蜫裈褌貇醌錕锟騉髠髡髨鯤鲲鵾鹍]>kÅ«n; -[㩲䠅壸壼悃捆梱硱祵稇稛綑裍閫閸阃齫]>kǔn; -[㫻困涃睏]>kùn; -擃>kuǒ; -[㗥䟯䦢䯺姡廓彉彍扩拡括挄擴漷濶蛞闊阔鞟鞹]>kuò; -[嚹垃拉柆磖翋菈]>lā; -[㕇揦邋]>lá; -[䟑喇藞]>lǎ; -[㸊㻋㻝䂰䃳䏀䓥䗶䝓䪉䱫䶛剌揧攋楋爉瓎瘌腊臈臘蜡蝋蝲蠟辢辣鑞镴鬎鯻癩]>là; -[啦鞡]>la; -[㚓㥎䅘䋱䚅䠭䧒來俫倈婡孻崃崍庲徕徠来梾棶涞淶猍琜筙箂莱萊逨郲錸铼騋鯠鶆麳]>lái; -[䂾唻]>lǎi; -[㠣㾢䄤䓶䲚勑娕櫴濑瀨瀬癞癩睐睞籁籟藾襰賚賴赉赖頼顂鵣]>lài; -[㑣㘓㞩㦨㳕䆾䍀䑌䦨䪍䰐䳿儖兰厱啉囒婪岚嵐幱懢拦攔斓斕栏欄欗澜瀾灆灡燣燷璼礷篮籃籣糷繿葻蓝藍蘫蘭襕襤襴譋讕谰躝钄闌阑韊]>lán; -[㛦㨫㩜㰖䊖䌫壈嬾孄孏懒懶揽擥攬榄欖浨漤灠覧覽览醂顲𡒄]>lǎn; -[㜮㱫䃹嚂壏滥濫烂燗爁爛爤瓓纜缆鑭镧]>làn; -啷>lāng; -[㝗㟍㢃㱢㾿䆡䡙䯖䱶俍勆嫏廊桹榔樃欴狼琅瑯稂筤艆莨蓈蓢蜋螂踉躴郎郞鋃锒]>láng; -[㓪㙟㫰㮾㾗䀶䁁塱朖朗朤烺硠誏閬阆]>lǎng; -[䍚䕞埌崀浪蒗]>làng; -[捞撈]>lāo; -[㗦㞠㟉㟹㨓䃕䜎䝁䲏僗劳労勞哰唠嘮崂嶗憥浶牢痨癆磱窂簩蟧醪鐒铹]>láo; -[㟙㧯䇭䕩䝤䳓䵏佬咾恅栳橑狫老荖轑銠铑]>lǎo; -[嫪憦橯涝澇耢耮軂髝]>lào; -[㔹㖀㦡乐仂叻哷忇扐捋楽樂氻泐玏砳竻簕肋艻阞韷頱鰳鳓]>lè; -[了餎饹]>le; -勒>lēi; -[㒍㔣㵢㹎䉓䍣䐯䨓壨嫘擂檑欙瓃畾縲纍纝缧罍羸蘲虆蠝鐳鑘镭雷靁鼺]>léi; -[㑍㒦㙼㡞㶟㼍㿔䉂䛶䣂䴎傫儡儽厽垒壘樏櫐櫑洡漯灅瘣癗磊磥礨絫耒蕌蕾藟蘽誄讄诔轠鑸頛鸓]>lěi; -[㭩㲕㴃䉪䍥䒹䢮䣦䮑埒攂泪涙淚礌礧禷类累纇蘱酹銇錑頪類颣𩔗]>lèi; -嘞>lei; -[䉄䬋倰塄崚棱楞稜薐]>léng; -冷>lěng; -[䚏䮚堎愣踜]>lèng; -唎>lÄ«; -[㒿㓯㠟㦒㰀㰚㴝㷰㹈㿛䄜䅻䉫䊍䋥䍠䍦䔆䔣䔧䖥䖽䖿䙰䣓䣫䱘䴻䵓䵩刕剓剺劙厘喱嚟囄嫠孋孷廲悡攡梨梩梸棃樆氂漓漦灕犁犂璃瓈睝离穲篱籬粍粚糎縭缡罹艃菞蓠蔾藜蘺蜊蟍褵謧貍邌醨釐鋫錅鏫鑗離騹驪骊鯬鱺鲡鵹鸝鹂黎黧]>lí; -[㸚㾖䗍䤚䧉俚兣娌峛峢峲欐欚浬澧理盠礼禮粴蟸蠡裏豊逦邐醴里鋰锂鯉鱧鲤鳢礼]>lǐ; -[㑦㒧㔏㕸㗚㘑㟳㡂㤡㤦㧰㬏㮚㯤㱹㺡㻎㻺㼖㽁㽝㾐㿨䁻䃯䅄䇐䊪䍽䓞䔁䔉䘈䚕䟏䟐䡃䤙䥶䬅䬆䮋䮥䰛䰜䲞䴄䴡䶘丽例俐俪傈儮儷凓利力励勵历厉厤厯厲吏呖唳嚦囇坜塛壢婯屴岦巁悧悷慄戻戾搮攊攦攭斄暦曆曞朸枥栎栗栛栵棙櫔櫟櫪歴歷沥沴涖溧濿瀝爄爏犡猁珕琍瑮瓅瓑瓥疠疬痢癘癧皪盭矋砅砬砺砾磿礪礫礰禲秝立笠筣篥粒粝糲綟纅脷苈苙茘荔莅莉蒞藶蚸蛎蛠蜧蝷蠇蠣蠫詈讈赲跞躒轢轣轹郦酈鉝隶-隸雳雴靂靋鬁鬲鱱鱳鳨鴗鷅鷑麗麜𥝢]>lì; -[哩李狸裡]>li; -[俩倆]>liǎ; -[㓎㜕㝺㟀㡘㢘㥕㦁㶌㺦㼓㾾䁠䃛䆂䏈䙺䥥䨬䭑亷僆劆匲匳嗹噒奁奩奱嫾帘廉怜慩憐梿槤櫣涟溓漣濂濓熑燫琏璉磏稴簾籢籨縺翴联聫聮聯臁莲蓮薕螊蠊裢褳覝謰譧蹥连連鄻鎌鐮镰鬑鰱鲢𢅏]>lián; -[㦑㪘㯬㰈㰸䇜䌞嬚摙羷脸膦臉莶薟]>liǎn; -[㜃㜻㪝㱨㶑㼑堜媡恋戀敛斂楝歛殓殮浰湅潋澰瀲炼煉瑓練纞练萰蔹蘝蘞裣襝錬鍊鏈链鰊]>liàn; -[㹁䝶䣼䭪凉墚梁椋樑涼粮粱糧綡良輬辌駺]>liáng; -[㒳㔝䓣䠃䩫両两兩唡啢掚緉脼蜽裲魉魎]>liǎng; -[亮哴喨悢晾湸諒谅輌輛辆量鍄]>liàng; -[撩蹽]>liāo; -[㙩㝋㵳䜍䜮䝀䨅僚嘹嫽寥寮屪嵺嶚嶛廫憀摎敹暸漻潦熮獠璙疗療窷簝繚缭聊膋膫蟟豂賿蹘辽遼鐐镣顟飂飉髎鷚鷯鹨鹩]>liáo; -[㶫䄦䑠䩍憭瞭蓼鄝镽]>liǎo; -[㡻㺒䉼䍡䎆䢧尞尥尦廖撂料炓燎爒]>liào; -å·¤>liē; -䟩>liě; -[㤠㧜㬯㭞㯿㲱㸹㼲㽟䁽䅀䉭䓟䜲䟹䴕儠冽列劣劽埓姴挒捩擸洌浖烈煭犣猎獵睙聗脟茢蛚蛶裂趔躐迾颲鬛鬣鮤鱲鴷]>liè; -咧>lie; -[㔂㝝㷠䚬䢯䫐䮼临亃厸壣嶙惏斴晽暽林淋潾瀶燐獜琳璘甐疄痳瞵矝碄磷箖粼綝繗罧翷臨轔辚遴邻鄰鏻隣霖驎鱗鳞麐麟]>lín; -[㐭㨆䕲僯凛凜廩廪懍懔撛檁檩澟癛癝菻]>lǐn; -[㖁䉮䗲䫰吝恡悋橉焛粦蔺藺蹸躏躙躪轥閵]>lìn; -[拎昤]>lÄ«ng; -[㖫㡵㥄㦭㪮㬡㯪㱥㲆㸳㻏㾉䄥䈊䉁䉖䉹䌢䍅䔖䕘䖅䙥䚖䠲䡼䡿䧙䨩䯍䰱䴇䴒䴫凌刢囹坽夌姈孁岺朎柃棂櫺欞泠淩澪灵燯爧狑玲琌瓴皊睖砱碐祾秢竛笭紷綾绫羚翎聆舲苓菱蔆蕶蘦蛉衑裬詅跉軨輘酃醽鈴錂铃閝陵零霊霛霝靈駖魿鯪鲮鴒鸰鹷麢齡齢龄龗]>líng; -[呤岭嶺彾袊阾領领]>lǐng; -[令另掕炩]>lìng; -伶>ling; -㶈>liǒng; -[溜熘蹓]>liÅ«; -[㐬㽞䉧䋷䗜䚧䬟䭷䰘䱖䱞䶉刘劉嚠媹嵧懰旈旒榴橊沠流浏瀏琉瑠瑬璢畄留畱疁瘤癅硫蒥蓅藰蟉裗遛鎏鎦鏐镏镠飀飅飗駠駵騮驑骝鰡鶹鹠麍]>liú; -[嬼柳栁桺橮珋綹绺罶羀鉚鋶铆锍飹]>liǔ; -[㙀㨨㶯㽌䄂六坴塯廇澑畂磂翏鐂雡霤餾馏鬸]>liù; -[㚅㝫㡣㦕㰍䃧䆍䏊䙪䥢䪊咙嚨屸嶐巃巄昽曨朧栊櫳泷湰滝漋瀧爖珑瓏癃眬矓砻礱礲竜笼篭簼籠聋聾胧茏蕯蘢蠪蠬襱豅躘鏧鑨隆霳靇鸗龍龒龓龙]>lóng; -[㙙㴳䡁儱垄垅壟壠拢攏竉陇隴]>lǒng; -[㑝㛞㟖㢅哢徿挵梇硦衖贚]>lòng; -窿>long; -[䁖瞜]>lōu; -[㟺㥪㲎㺏䄛䅹䝏䣚䫫䮫䱾剅娄婁廔慺楼樓熡耧耬艛蒌蔞蝼螻謱軁遱鞻髅髏鷜]>lóu; -[㪹塿嵝嶁搂摟甊篓簍]>lǒu; -[㔷屚漏瘺鏤镂陋]>lòu; -[喽嘍]>lou; -[噜嚕]>lÅ«; -[㠠㢳㪭㭔㱺㿖䡎䮉䰕卢嚧垆壚庐廬攎曥栌櫨泸瀘炉爐獹玈璷瓐盧矑籚纑罏胪臚艫芦蘆蠦轤轳鑪顱颅髗魲鱸鲈鸕鸬黸]>lú; -[㔪㢚㯭䕡䲐卤塷掳撸擄擼樐橹櫓滷瀂硵磠舻艣艪蓾虏虜鏀鐪鑥镥魯鲁鹵]>lǔ; -[㓐㖨㛬㜙㟤㦇㪐㪖㫽㯝㯟㼾䃙䌒䎑䎼䐂䘵䚄䟿䡜䩮䱚䴪侓僇剹勎勠圥垏娽峍廘彔录戮摝椂樚淕淥渌漉潞熝琭璐甪盝睩硉碌磟祿禄稑穋箓簏簶籙粶膔菉蔍蕗虂螰觮觻賂赂趢路踛蹗輅轆辂辘逯醁錄録錴鏕鏴陆陸露騄騼鯥鵦鵱鷺鹭鹿麓]>lù; -[榈櫖櫚氀爈瘘瘻膢藘閭闾馿驢驴]>lǘ; -[㭚㻲㾔侣侶偻僂儢吕呂屡屢履挔捛旅梠溇漊祣稆穞穭絽縷缕膂膐褛褸郘鋁铝]>lǚ; -[㔧㠥㲶䔞䢖䥨勴寽嵂律慮氯滤濾率箻綠緑绿膟葎虑鑢]>lǜ; -[㝈㡩㱍䖂䜌圝圞娈孌孪孿峦巒挛曫栾欒滦灓灤癵羉脔臠虊銮鑾鵉鸞鸾]>luán; -卵>luǎn; -[乱亂薍釠]>luàn; -[攣癴]>lüán; -㨼>luè; -[㑼㔀䂮䌎䛚䤣圙擽畧稤鋝鋢锊]>lüè; -[抡掄]>lÅ«n; -[㖮㷍䈁䑳仑伦侖倫囵圇婨崘崙惀沦淪溣綸纶腀菕蜦踚輪轮錀陯鯩]>lún; -[埨稐耣]>lǔn; -[碖論论]>lùn; -絯>lǜn; -[啰囉罗]>luō; -[㑩㼈㽋䊨䯁儸摞椤欏氇氌猡玀箩籮羅萝蔂蘿螺覙覶覼逻邏鏍鑼锣镙饠騾驘骡鸁]>luó; -[㒩㦬㩡㰁㱻倮攞曪瘰癳砢臝蓏蠃裸躶鎯]>luǒ; -[㓢㴖㿚䀩䇔䈷䌱䌴嗠峈洛濼烙犖珞硌笿絡纙络荦落袼酪雒駱骆鮥鴼鵅]>luò; -[妈媽嬤嬷]>mā; -[㦄䗫䳸犘痲蔴蟇麻]>má; -[㐷䣕䣖溤玛瑪码碼蚂螞鎷馬马鰢鷌]>mǎ; -[㑻㜫㨸㾺䯦傌唛嘜帓杩榪犸獁睰祃禡罵閁駡骂]>mà; -[吗嗎嘛蟆]>ma; -[㜥㼮䁲䚑䨪埋薶霾]>mái; -[买嘪荬蕒買鷶]>mǎi; -[䈿䘑䜕䨫䮮佅劢勱卖売眿脈脉蝐賣迈邁霢麥麦]>mài; -[㒼㗄㙢䅼䊡䐽䑱䛲䟂䯶䰋姏悗慲摱槾璊瞒瞞蛮蠻謾谩蹒蹣顢颟饅馒鬘鰻鳗]>mán; -[㛧䜱屘満满滿矕螨蟎襔鏋鮸]>mǎn; -[㗈㡢㬅㵘䕕䝡䝢䡬僈墁嫚幔慢曼漫澫澷熳獌縵缦蔄蔓鏝镘鬗]>màn; -[㝑㟌㟿㡛㻊䀮䅒䈍䟥䵨吂哤娏尨忙恾杗杧氓汒浝牤牻狵痝盲盳硭笀芒茫蘉蛖邙釯鋩铓駹鼆]>máng; -[㙁㟐㬒䁳䒎䖟壾漭硥茻莽莾蟒蠎]>mǎng; -[猫貓]>māo; -[㝟㲠䅦兞堥媌嫹旄枆毛渵牦犛矛罞茅蝥蟊覒軞酕錨锚髦髳鶜]>máo; -[㚹㧇冇卯夘峁戼昴泖笷茆]>mǎo; -[㒵㒻㡌㧌㪞㫯㮘㴘㺺㿞䀤䋃䓮䡚䫉冐冒媢帽懋暓柕楙毷瑁皃眊瞐耄艒芼茂萺蓩袤貌貿贸鄮]>mào; -[么麼]>me; -[㶬㺳䊈䍙䒽䤂呅堳塺媒嵋徾攗枚栂梅楣楳槑沒没湄湈煤猸玫珻瑂眉睂禖篃脄脢腜苺莓葿郿酶鋂鎇镅霉鶥鹛黴𪃏]>méi; -[䆀䓺䜸凂媄媺嬍嵄挴毎每浼渼燘美鎂镁黣]>měi; -[㭑䀛䉋䊊䰨䰪䵢妹媚寐抺昧沬煝痗眛睸祙蝞袂跊韎鬽魅]>mèi; -[㡈㨺䊟䝧䫒扪捫樠穈菛虋鍆钔門閅门]>mén; -暪>měn; -[㥃㦖㱪㵍悶懑懣焖燜闷]>mèn; -[们們]>men; -[㙹㠓㩚䀄䇇䉚䑃䑅䒐䓝䗈䙦䙩䤓䰒䲛䴌䴿䵆儚冡幪懞懵曚朦橗檬氋濛獴甍甿盟瞢矇矒礞艨苎莔萌萠蒙蕄虻蝱鄳鄸雺靀饛鯍鸏鹲]>méng; -[㚞䏵勐猛瓾艋蜢蠓錳锰鯭]>měng; -[㜴㝱䠢䥂䥰夢夣孟懜梦溕霥霿]>mèng; -[咪嘧眯瞇]>mÄ«; -[㜷㟜㠧㣆㩢㸏䊳䋛䌕䌘䍘䕳䕷䛧䤍䥸䪾䴢冞弥彌戂擟攠檷瀰爢猕獼瓕祢籋糜縻罙蒾蘪蘼詸謎谜迷醚醾醿釄镾鸍麊麋麛𨢥]>mí; -[㝥㥝㰽㳽䭧䱊侎孊弭敉沵洣渳濔灖眫米脒葞蔝銤靡]>mǐ; -[㜆㨠㫘㳴㴵㵋㸓䁇䉾䌏䌐䌩䖑䛉䛑䣾䤉䭩䮭冖冪塓宓宻密峚幂幎幦榓樒櫁汨泌淧淿滵漞濗熐祕秘簚糸羃蔤藌蜜蠠覓覔覛觅謐谧鼏]>mì; -[㒙㝰㬆㮌㰃䃇䏃䫵䰓婂媔嬵宀棉檰櫋眠矈矊矏綿緜绵臱芇蝒醎]>mián; -[㛯㤁㻰䀎䤄丏偭免冕勉勔喕娩愐汅沔湎眄絻緬缅腼葂麪麫]>miǎn; -[㴐糆面靣麵麺]>miàn; -喵>miāo; -[㑤㠺䁧䖢描瞄緢苗鱙鶓鹋]>miáo; -[㦝䅺劰杪淼渺眇秒篎緲缈藐邈]>miǎo; -[妙庙庿廟玅竗]>miào; -[乜吀咩哶孭羋芈]>miē; -[㒝䁾䈼䘊䩏幭懱搣櫗滅灭礣篾蔑薎蠛衊覕鑖鱴鴓]>miè; -[㟩㟭㢯䁕䂥䃉䋋䟨䡑䡻䪸䲄姄岷崏忞忟怋捪敯旻旼民珉琘瑉痻盿砇碈緍緡缗罠苠鈱錉鍲閺]>mín; -[㞶㥸㨉䡅僶冺刡勄悯愍慜憫抿敃敏暋泯渑湣潣澠皿笢簢閔閩闵闽鰵鳘黽黾]>mǐn; -榠>mÄ«ng; -[㝠䄙䆨䆩䊅䫤佲冥名嫇明暝朙洺溟猽眀瞑蓂螟覭鄍酩銘铭鳴鸣]>míng; -[㟰㫥凕姳慏眳茗]>mǐng; -[䒌命詺]>mìng; -[謬谬]>miù; -摸>mō; -[䃺䉑䯢劘嚤嚰嫫摩摹擵模橅磨糢膜蘑謨谟饃饝馍髍魔]>mó; -[䩋懡抹]>mǒ; -[㱄㱳㷬㷵㹮䁼䁿䏞䒬䘃䜆䬴䮬䱅䳮䴲嗼嚜圽塻墨妺嫼寞帞慔昩暯末枺歾歿殁沫洦湐漠瀎爅瘼皌眜眽瞙砞礳秣粖絈縸纆耱茉莈莫蓦藦蛨蟔衇袹謩貃貊貘鄚銆鏌镆陌霡靺驀鬕魩默黙]>mò; -[庅麽]>mo; -哞>mōu; -[㭌䏬䗋䥐䱕侔劺洠牟眸瞴繆缪蛑蟱謀谋鉾鍪鴾麰]>móu; -[䍒某踇]>mǒu; -[愗瞀]>mòu; -[䱯恈毪氁獏譕]>mú; -[䥈亩姆姥峔母牡牳畆畒畝畞畮砪胟鉧]>mǔ; -[㒇㜈㣎㧅㾇䀲䊾䑵䧔仫募坶墓幕幙慕暮木楘毣沐炑牧狇目睦穆苜莯蚞鉬钼雮霂鞪鶩鹜]>mù; -拇>mu; -嗯>ń; -㐻>ň; -[䏧䛔䫱嗱拏拿誽鎿镎]>ná; -[乸哪雫]>nǎ; -[㗙㨥㴸䀑䅞䇣䇱䈫䎎䖓䖧䟜䪏䱹妠捺笝納纳肭蒳衲袦豽貀軜那鈉钠靹魶]>nà; -[㾍䍲䘅䯮摨熋釢]>nái; -[乃奶妳嬭廼氖疓艿迺]>nǎi; -[㮈㮏㲡倷奈柰榒渿耐萘螚褦錼鼐]>nài; -囡>nān; -[㓓㽖䔜䕼䛁䶲侽南喃奻娚暔枏枬柟楠男畘莮萳諵难難]>nán; -[㫱䁪䈒䔳戁揇湳罱腩蝻赧]>nǎn; -å©»>nàn; -[乪囔]>nāng; -[䂇嚢囊欜]>náng; -[㶞攮曩灢饢馕]>nǎng; -[㒄儾齉]>nàng; -[㞪㺀䃩䄩䑋䛝䫸䴃呶夒峱嶩巎巙怓憹挠撓桡橈猱獶獿硇繷詉譊鐃铙髐𥑪]>náo; -[㑎㛴㺁䜀䜧匘垴堖嫐恼悩惱瑙碯脑腦]>nǎo; -[淖閙闹鬧]>nào; -[䎪䭆訥讷]>nè; -[吶呐呢]>ne; -[㼏䲎娞脮腇餒馁鮾鯘]>něi; -[㕯㖏㘨㨅䡾䳖內内氝]>nèi; -黁>nēn; -é½³>něn; -[㜛㯎㶧嫩嫰]>nèn; -[㴰䏻嬣能薴]>néng; -㲌>nèng; -㕶>ng̀; -妮>nÄ«; -[㞾㪒㹸䘦䘽䛏䝚倪坭埿婗尼屔怩泥淣狋猊秜籾臡蚭蜺觬貎跜輗郳霓鯓鯢鲵麑齯]>ní; -[㣇㵫䕥䦵䧇䭲䰯伱伲你儗儞孴抳拟擬旎柅狔禰苨薿鈮鉨铌隬馜]>nǐ; -[㠜㥾㦐㲻䁥䘌䵑䵒匿堄嫟嬺屰嶷惄愵昵暱氼溺痆睨糑縌胒腻膩迡逆鷁鷊鹝鹢]>nì; -[䄭䄹䩞䬯年拈秊秥鮎鯰鲇鲶黏]>nián; -[㘝㞋䚓捻撚撵攆碾簐跈蹨躎輦辇]>niǎn; -[㲽卄唸埝姩廿念涊淰艌鼰齞]>niàn; -[嬢孃]>niáng; -[䖆酿醸釀]>niàng; -娘>niang; -[㒟㜵㠡㭤䃵䐁䙚䦊䮍嫋嬝嬲樢茑蔦袅裊褭鳥鸟𢶑𢸣]>niǎo; -[㞙㳮尿脲]>niào; -[惗捏揑踗鈢鉩錜鑈]>niē; -[㡪苶]>nié; -[㖖㘿㙞㚔㜸㩶㮆㴪㸎䂼䄒䌜䜓䯀䯅䯵啮喦嗫噛嚙囁囓圼孼孽嵲帇摰敜枿棿槸櫱涅湼疌篞糱糵聂聶臬臲菍蘖蠥踂蹑躡鎳鑷钀镊镍闑陧隉顳颞齧]>niè; -[㤛䋻䚾䛘囜您]>nín; -拰>nǐn; -[㝕㲰䗿䭢儜凝咛嚀宁寍寕寗寜寧拧擰柠檸狞獰甯聍聹鑏鬡鸋]>níng; -[橣矃]>nǐng; -[㣷㿦䔭佞侫泞濘]>nìng; -妞>niÅ«; -[䀔䒜牛]>niú; -[㺲䏔忸扭炄狃紐纽莥鈕钮靵]>niǔ; -[䋴衂]>niù; -[㶶䁸䢉侬儂农哝噥檂欁浓濃癑禯秾穠脓膿蕽襛農辳醲鬞齈]>nóng; -䵜>nǒng; -[弄挊]>nòng; -[㝹䨲羺譨]>nóu; -[䅶䘫䰭啂槈獳耨譳鎒鐞]>nòu; -[㚢伮奴孥笯蒘駑驽鴑]>nú; -[努弩砮胬]>nǔ; -[䢞怒抐搙]>nù; -[女籹釹钕]>nǚ; -[㵖䖡䘐䚼䶊恧朒衄]>nǜ; -[㬉䎡䙇暖渜煖煗餪]>nuǎn; -偄>nuàn; -[䖈䖋硸]>nuè; -[䨋疟瘧虐謔谑]>nüè; -[㑚㔮㰙傩儺娜挪捼梛郍]>nuó; -[㛂㡅橠砈砹]>nuǒ; -[㐡䚥愞懦懧挼掿搦搻稬穤糥糯諾诺蹃逽]>nuò; -[喔噢]>ō; -哦>ó; -[呕嘔櫙欧歐殴毆熰瓯甌眍瞘謳讴鏂鴎鷗鸥]>ōu; -[吽齵]>óu; -[㒖㼴䚆䯚偶吘塸耦腢蕅藕]>ǒu; -[㛏䌂䌔怄慪沤漚]>òu; -[啪夿妑皅舥葩蚆趴]>pā; -[䯲䶕杷潖爬琶筢耙跁]>pá; -[帊帕怕袙]>pà; -拍>pāi; -[㵺俳徘排棑牌猅篺簰簲輫]>pái; -俖>pǎi; -[㭛䖰哌汖派湃蒎鎃]>pài; -[㐴攀潘畨眅砙]>pān; -[䃑䃲䈲䰉䰔媻幋搫柈槃瀊盘盤磐磻縏蒰蟠跘鎜鞶]>pán; -[坢奤]>pǎn; -[㳪冸判叛拚沜泮溿炍牉畔盼袢襻詊鋬鑻頄頖]>pàn; -[乓滂膖]>pāng; -[㤶㥬㫄䅭䨦䮾厐厖嫎庞庬彷徬旁篣胮舽蒡螃逄雱霶騯髈龎龐]>páng; -[䒍嗙耪覫]>pǎng; -[㜊炐肨胖]>pàng; -[抛拋脬]>pāo; -[㚿䛌䩝刨匏咆垉庖炰爮狍袍軳鞄齙龅]>páo; -跑>pǎo; -[㘐㯡䶌奅泡炮疱皰砲礟礮靤髱麭]>pào; -[呸垺妚娝岯怌柸肧胚衃醅]>pēi; -[㟝䣙䪹䫠䲹培毰碚裴裵賠赔邳阫陪陫]>péi; -[昢琣]>pěi; -[㤄㧩㫲㳈䊃伂佩姵帔斾旆沛浿珮笩苝轡辔配霈馷]>pèi; -[呠喯喷噴]>pēn; -[湓瓫盆葐]>pén; -[翉翸]>pěn; -歕>pèn; -[匉嘭怦恲抨梈漰澎烹砰硑磞軯閛駍]>pēng; -[㛔㥊䄘䡫䰃䴶倗傰埄堋塜塳弸彭憉挷朋棚椖樥淜痭硼稝竼纄膨芃蓬蟚蟛輣錋鑝韸韼驡髼鬅鬔鵬鹏]>péng; -[捧淎皏]>pěng; -[㼞掽椪甏碰踫]>pèng; -篷>peng; -[丕伾劈噼坯怶悂憵批披抷旇炋狉狓砒磇礕秛秠翍耚豾釽鈈鈹鉟銔铍霹髬髲鮍鲏鴄]>pÄ«; -[㔥㯅啤埤壀朇枇毗毘焷犤玭琵疲皮笓紕纰罴羆肶脾腗膍蚽蜱螷豼貔郫鈚錍阰陴駓魾鼙]>pí; -[㨽䏘䚰䚹䤏䫌䰦仳匹噽嚭圮崥庀疋痞癖脴苉苤諀銢隦]>pǐ; -[㿙䑀䑄䠘䡟䤨䴙僻媲嫓屁揊擗淠渒潎澼濞甓礔譬辟闢鷿鸊]>pì; -[偏囨媥犏篇翩萹頨鶣]>piān; -[㛹㼐䮁楄楩胼腁諚諞谝賆蹁輧駢騈骈骿]>pián; -[覑貵]>piǎn; -[㓲㸤䏒片騗騙骗]>piàn; -[嘌彯旚翲薸螵飃飄飘魒]>piāo; -[㼼䕯䴩淲瓢竂蚫闝]>piáo; -[㩠㵱㹾摽殍犥皫瞟縹缥膘蔈藨醥]>piǎo; -[㬓㺓䏇僄剽勡嫖徱慓漂票篻顠驃骠]>piào; -[撆暼氕瞥]>piē; -[䥕丿撇鐅]>piě; -嫳>piè; -[姘拼涄礗]>pÄ«n; -[㰋嚬娦嫔嬪獱琕薲貧贫頻顰频颦]>pín; -[品榀]>pǐn; -[䀻牝聘]>pìn; -[乒俜娉焩砯頩]>pÄ«ng; -[㺸㻂䍈䶄凭凴呯坪屏屛帡帲幈平慿憑枰泙洴玶瓶甁甹竮箳簈缾聠胓艵苹荓萍蓱蘋蚲蛢評评軿郱鮃鲆鵧𦚓]>píng; -[坡泊溌癹鉕鏺钷陂頗颇]>pō; -[㨇㰴嘙婆櫇皤蔢鄱]>pó; -[叵尀笸]>pǒ; -[㛘䄸䎊䞟䣪䣮䨰䪖䯙岶廹炇烞狛珀破砶粕蒪迫酦醗醱釙钋魄]>pò; -[泼潑]>po; -剖>pōu; -[㧵抔抙捊掊裒錇锫]>póu; -[㕻勏哣婄廍棓犃瓿]>pǒu; -咅>pòu; -[仆噗墣扑抪撲擈攴濮痡醭陠]>pÅ«; -[㒒㯷㲫㺪䈬䈻䑑䔕䗱䧤䴆僕匍樸毞獛璞瞨穙箁纀脯菐菩葡蒱蒲襆襥蹼轐酺鏷镤]>pú; -[㹒䲕圃圤普朴檏氆浦溥潽烳誧諩譜谱鐠镨]>pǔ; -[㬥曝瀑舖舗鋪铺]>pù; -[七倛僛凄唭嘁墄妻娸悽慼慽攲期柒栖桤桼棲榿欺沏淒漆磎磩粞緀萋諆郪霋顣魌鶈鸂𠀁]>qÄ«; -[㜎㟓㟚㟢㩽㯦䄢䅲䉻䐡䑴䓅䞚䟚䡋䧘䧵䩓䭶䭼䰇䱈䲬䳢䶒䶞亓亝其剘圻埼墘奇岐岓崎帺忯愭懠掑斉斊旂旗棊棋檱櫀歧淇濝猉玂琦琪璂畁畦疷碁碕祁祈祺禥竒粸綦綨纃翗耆脐臍艩芪荠萁萕蕲薺藄蘄蚑蚔蚚蛴蜝蜞蠐衹跂踑軝迉鄿釮錡錤锜頎颀騎騏骐骑鬐鬿鮨鯕鰭鲯鳍鵸鶀麒齊齐]>qí; -[㒅㞓㥓㩩㫓㾨䄎䄫䉝䋯䎢䏿䒻䔇䛴䡔䭫䭬乞企启呇唘啓啔啟婍屺岂敧晵杞棨槣盀綮綺绮芑芞裿諬豈起邔闙]>qǐ; -[㓞㞚㣬㮑㼤䀈䀙䁈䁉䅤䌌䏅䏌䏠䒗䙄䚉䚍䟄䢀䫔䬣䰴呮咠噐器夡契弃徛忔憇憩摖暣栔棄气気氣汔汽泣湆湇炁甈盵矵砌碛碶磜磧礘綥緝缉罊葺蟿訖諿讫迄鏚鼜]>qì; -戚>qi; -掐>qiā; -䠍>qiá; -[跒酠]>qiǎ; -[㓣㡊㤉䜑䨐䯊䶝匼圶帢恰殎洽]>qià; -[㡨仟佥僉兛千圱圲奷婜孯岍幵悭愆慳扦拪掔搴撁攐攑攓杄檶櫏欦汘汧牵牽签簽籤粁縴羟羥肷膁臤芊蚈褰諐謙譣谦谸迁遷釺鉛鋟鐱钎铅锓阡韆顩騫骞鬜鬝鵮鹐]>qiān; -[㦮㨜㩮㸫䁮䈤䍉䕭䖍䨿仱前媊岒忴扲拑掮揵榩歬漧潛潜濳灊燂箝葥虔鈐鉗銭錢钤钱钳雂騚鬵鰬黔黚]>qián; -[㧄䪈䭤嵰撖槏浅淺繾缱蜸譴谴遣]>qiǎn; -[㐸㜞㟻㪠㯠䈴䊴䥅䦲䫡倩傔儙刋堑塹壍嵌悓慊棈椠槧欠歉皘篏篟綪芡茜蒨蔳輤]>qiàn; -[呛嗆嶈戕戗斨枪椌槍溬牄猐玱瑲矼篬羌羗羫腔蜣謒跄蹌蹡錆鎗鏘鏹锖锵镪]>qiāng; -[㩖丬墙墻嫱嬙廧強强彊樯檣漒爿牆蔷薔蘠軖]>qiáng; -[㛨䅚傸勥墏抢搶磢繈繦]>qiǎng; -[䵁唴炝熗羻]>qiàng; -[劁墝墽嵪幧悄敲橇硗磽繑跷踍蹺蹻郻鄡鄥鍫鍬鏒鐰锹鞒頝骹髜]>qiāo; -[㚁㝯䀉䎗䩌䱁乔侨僑喬嘺嶣憔桥樵橋燆癄瞧硚礄簥荞蕎藮譙谯趫趬鐈鞽顦]>qiáo; -[㚽㡑㤍䲾巧愀釥]>qiǎo; -[㢗㪣㴥䃝䆻䇌俏僺峭帩撬撽窍竅翘翹誚诮躈陗鞘韒髚]>qiào; -[㚗䦧癿]>qié; -且>qiě; -[㓶㗫㛍㛙㤲㥦㫸㰰㰼㹤㾀㾜䟙䤿䬊切匧妾怯悏惬愜挈朅洯淁穕窃竊笡箧篋緁藒蛪踥鍥锲鯜]>qiè; -[亲侵媇嵚嶔欽瀙綅衾親誛钦顉駸骎鮼]>qÄ«n; -[㘦㢙㩒㪁㮗䔷䖌䦦勤厪嗪噙嫀庈廑懃懄捦擒斳檎澿珡琴琹禽秦耹芩芹菦蚙螓蠄赺鈙靲鳹鵭]>qín; -[㝲㾛䠴坅寑寝寢昑曋螼赾]>qǐn; -[㞬㤈䈜吢吣唚寖寴抋揿搇撳沁菣]>qìn; -[倾傾卿啨圊寈氢氫氰淸清狅蜻軽輕轻郬靑青鯖鲭]>qÄ«ng; -[㯳䝼䞍䲔剠勍夝情擎晴暒樈檠殑甠晴]>qíng; -[㷫䔛䯧庼廎檾請请頃顷]>qǐng; -[䋜䌠凊庆慶掅殸汫漀碃磘磬罄謦鑋靘]>qìng; -[匔焪穹芎銎]>qiōng; -[㒌㧭㮪㷀㼇䅃䆳䊄䓖䛪䠻儝卭宆惸桏棾橩焭煢琼璚瓊睘瞏穷窮竆笻筇茕藑藭蛩赹跫輁邛]>qióng; -苘>qiǒng; -[㐀䆋丘丠坵媝恘楸秋秌穐篍緧萩蓲蚯蝵蟗蠤趥邱鞦鞧鰍鱃鳅鶖鹙龝𠀉𩝠]>qiÅ«; -[㐤㕤㞗㟈㤹㥢㧨㭝㷕㺫䊵䎿䜪䟵䣇䤛俅厹叴唒囚崷巯巰扏朹梂毬求汓泅浗渞煪犰玌球璆皳盚紌絿肍脙艽苬莍虬虯蛷蝤裘觩訄訅賕赇逎逑遒酋釓釚銶钆鮂鯄鰌鰽鼽]>qiú; -[㼒䞭搝糗]>qiǔ; -[䟬䠗殏螑]>qiù; -[㠊伹佉凵匤区區呿坥屈岖岴嶇憈抾敺曲瞿砠祛胠蛆蛐袪誳趋趨躯軀镼阹駆駈驅驱髷魼鰸鱋鶌黢]>qÅ«; -[㖆㜹㣄㯫㲘䀠䂂䋧䝣䞤䟊䵶佢劬匷忂懅戵斪朐欋氍淭渠灈璖璩痀癯磲籧翑翵胊臞菃葋蕖蘧螶蟝蠷衢豦躣軥鑺鴝鸜鸲麯麴麹鼩𪍸]>qú; -[䶚取娶浀竬筁紶詓齲龋]>qǔ; -[㧁㫢㰦䁦䒧䠐刞厺去湨覰覷覻觑詘诎趣閴闃阒麮鼁]>qù; -[圈圏姾弮悛棬箞絟鐉]>quān; -[㒰㟨㟫䀬䑏䟒䠰佺全啳婘孉峑巏恮惓拳搼权権權泉洤湶牷犈瑔痊硂筌荃葲蜷蠸觠詮诠踡輇辁醛銓铨顴颧駩騡鬈鰁鳈鷤齤]>quán; -[䊎呟奆汱犬琄甽畎綣縓绻虇詃]>quǎn; -[䄐券劝勧勸烇牶玔絭荈]>quàn; -[缺蒛𩨭]>quē; -瘸>qué; -[㕁㩁㰌㱋㱿㴶㾡䇎䦬䧿却卻咑埆塙墧寉崅悫愨慤搉榷殻毃灍燩琷皵硞确碏確碻礐礭舭趞闋闕阕阙雀]>què; -[鵲鹊]>que; -[囷夋峮杶踆輴逡鰆]>qÅ«n; -[㪊㿏䭽宭帬漘羣群裙裠錞]>qún; -蝽>qǔn; -[儿兒]>r; -[㜣㲯㸐㾆䑙䖄䫇嘫然燃繎肰蚦蚺蛅衻袇袡髥髯𤡮]>rán; -[㚩㯗㿵䎃䒣䣸䤡冄冉呥姌媣染橪珃苒]>rǎn; -[㚂䉴儴勷攘瀼獽瓤禳穣穰蘘躟鬤]>ráng; -[嚷壌壤爙]>rǎng; -[懹譲讓让]>ràng; -[㹛䫞荛蕘蛲蟯襓饒饶]>ráo; -[㑱娆嬈扰擾]>rǎo; -[繞绕遶隢顤]>rào; -[喏惹]>rě; -[渃热熱]>rè; -[䌾䴦人亻仁壬忈忎朲秂紝絍纴芢鈓銋魜鴹]>rén; -[㣼䏕䏰䭃忍栠栣棯秹稔腍荏荵]>rěn; -[㠴㶵㸾䀼䇮䋕仞仭任刃刄妊姙屻恁扨杒梕牣紉纫肕衽袵訒認认讱賃赁軔軠轫靭靱韌韧飪餁饪鵀]>rèn; -扔>rēng; -[㭁㺱䄧䚮仍礽辸陾]>réng; -芿>rèng; -[䒤囸日氜衵釰鈤馹驲]>rì; -茸>rōng; -[㘇㝐㣑㭜㲓㲨㺎㼸䇀䇯䈶䘬䠜䡆䡥䤊䩸媶容嵘嶸戎曧栄榕榮榵毧溶烿熔爃狨瑢穁絨縙绒羢肜茙荣蓉蝾融螎蠑褣鎔镕駥髶鰫鷛]>róng; -[㲝䢇傇冗宂搑氄軵]>rǒng; -é´§>ròng; -[㖻㽥䐓䧷䰆媃揉柔楺沑渘瑈瓇禸脜腬葇蝚蹂輮鍒鍕鞣韖騥鰇鶔]>róu; -[煣粈糅]>rǒu; -[䄾宍肉]>ròu; -[㨎㹘䋈䰰儒嚅如孺帤挐曘桇渪濡燸筎臑茹蕠薷蠕袽襦邚醹顬颥鱬鴽]>rú; -[㦺乳侞擩汝肗辱銣铷]>rǔ; -[傉入嗕媷洳溽縟缛蓐褥鄏]>rù; -[䓴堧壖撋]>ruán; -[㼱㽭䞂䪭媆朊瑌瓀盶碝礝緛耎腝蝡軟輭软阮]>ruǎn; -[㮃䅑甤緌蕤]>ruí; -[惢桵橤繠蕊蕋蘂蘃]>ruǐ; -[㓹㛱㪫㲊䌼䓲叡壡枘汭瑞睿芮蚋蜹銳鋭锐]>ruì; -[犉瞤]>rún; -[㠈䦞橍润潤膶閏閠闰]>rùn; -[䐞偌叒婼弱楉焫爇箬篛若蒻鄀鰙鰯鶸]>ruò; -[仨撒]>sā; -[㒎䊛洒灑靸]>sǎ; -[㪪㳐㽂䘮䙣䬃卅摋攃櫒脎萨薩趿鎝颯飒馺]>sà; -[塞愢揌毢腮顋鰓鳃]>sāi; -[㗷䈢]>sǎi; -[僿嗮簺賽赛]>sài; -噻>sai; -[三叁嘇弎攕毵毿犙糁糝鬖]>sān; -[㧲䀐䉈䊉䫩仐伞傘糂糣糤繖鏾饊馓]>sǎn; -[㤾㪔㪚䫅俕散潵閐]>sàn; -[桑桒]>sāng; -[䡦䫙嗓搡磉褬鎟顙颡]>sǎng; -[丧喪]>sàng; -[慅掻搔溞瘙繅缫臊颾騒騷骚鰠鰺鱢鳋]>sāo; -[㛮䕅嫂扫掃]>sǎo; -[㿋䐹䖣喿埽氉矂]>sào; -[㒊㥶㮦㱇㴔㻭䉢䔼䨛啬嗇懎歮歰涩澀澁濇瀒瑟璱穑穡繬翜色譅趇轖銫铯雭飋]>sè; -[曑森椮槮甧穼篸蔘襂]>sēn; -[僧鬙]>sēng; -[乷刹剎唦帴杀桬榝樧殺沙煞猀痧砂硰粆紗纱莎蔱裟鎩铩髿魦鮻鯊鯋鲨]>shā; -[傻儍訯]>shǎ; -[㚫㛼㰱䈉䝊䮜䵘䶎倽厦唼啑啥喢帹廈歃箑翣萐閯霎]>shà; -[筛篩]>shāi; -繺>shǎi; -[㬠晒曬閷]>shài; -[删刪剼姍姗山幓彡挻搧杉檆潸澘烻煽狦珊穇笘縿羴羶脠舢芟苫衫跚軕邖]>shān; -[㚒㣣㨛㪎㶒䠾晱睒覢醦閃闪陕陝陿]>shǎn; -[㣌㪨䄠䆄䚲䥇䦂䦅䱇䱉䴮傓僐善墠墡嬗扇掞摲擅汕灗熌疝磰禅繕缮膳蟮蟺訕謆譱讪贍赡赸鄯釤銏鐥钐饍騸骟鱓鱔鳝]>shàn; -[伤傷商墒慯殇殤滳漡熵蔏螪觞觴謪鬺]>shāng; -[䬕扄晌賞赏]>shǎng; -[丄上姠尙尚蠰銄鑜]>shàng; -裳>shang; -[弰捎旓梢烧焼燒稍筲艄莦蛸輎髾]>shāo; -[㲈㸛勺杓牊玿竰韶]>sháo; -[㪢䒚䔠少]>shǎo; -[㷹䏴䙼䬰佋劭卲哨娋潲睄紹綤绍袑邵颵]>shào; -[奢檨譇賒賖赊輋]>shē; -[㭙㰒䁋䂠䞌佘揲舌虵蛇蛥鉈鍦铊]>shé; -[䬷捨舍騇]>shě; -[㒤㢵㴇䀅䁯䄕䌰䠶䤮䵥厍厙射弽慑慴懾摂摄攝欇涉渉滠灄猞社蔎蠂設设赦韘麝]>shè; -[伸侁兟呻妽姺娠屾峷扟柛氠深燊珅申砷籶籸紳绅胂葠薓裑訷詵诜身鉮駪鯵鲹鵢]>shēn; -[䰠什甚神神]>shén; -[㔤㜤㰂㵊㾕吲哂婶嬸审宷審弞渖瀋瞫矤矧覾訠諗讅谂谉邥頣頥魫]>shěn; -[㥲㰮㵕䆦侺愼慎抻昚椹涁渗滲瘆瘎瘮眒眘肾脤腎葚蜃鋠]>shèn; -[升呏声斘昇殅泩湦焺牲狌珄生甡甥笙聲苼鉎阩陞鵿鼪]>shēng; -[䱆憴晠溗畻繩绳譝鱦]>shéng; -[㗂㼳㾪䁞䚇䪿偗省眚箵]>shěng; -[䎴䞉剩剰勝圣墭嵊榺琞盛聖胜蕂貹賸]>shèng; -[䴓呞失尸屍师師施浉湤湿溮溼濕狮獅箷絁葹蒒蓍虱蝨褷襹詩诗邿釶鈟鉇鯴鰤鲺鳲鳾鶳鸤]>shÄ«; -[㖷㫑㵓䂖䖨䦹䶡乭十埘塒实実寔實峕时旹時榯湁湜溡炻石祏莳蒔蚀蝕遈鉐食飠饣鰣鲥鼫鼭]>shí; -[㕜㹬㹷䒨䦠乨使兘史始宩屎矢笶豕鉂駛驶]>shǐ; -[㒾㔺㮶㱁㸷㹝䁺䊓䏡䛈䟗䤱䩃䭄䰄世丗亊事仕似侍冟势勢卋卶叓呩嗜噬士奭嬕室崼市式弑弒忕恃戠戺拭揓是昰枾柹柿氏澨烒眂眎睗示筮簭翨舐舓襫視视試誓諟諡謚试谥豉貰贳軾轼适逝適遾釈释釋鈰鉃鉽銴铈飾餙餝饰鯷鳀齛𠀍]>shì; -[匙拾識识]>shi; -[収收荍]>shōu; -[㝊䭭垨守手掱艏首]>shǒu; -[㖟㥅䛵兽受售壽夀寿授涭狩獸璹痩瘦綬绶鏉]>shòu; -[书倏倐儵叔姝抒摅摴攄書杸枢梳樗樞橾殊殳疎疏紓綀纾舒蔬踈軗輸输陎鵨]>shÅ«; -[䃞䝪䴰埱塾孰尗掓淑焂熟秫菽虪襡贖赎跾鸀]>shú; -[㒔㟬㯮㳆㻿䑕䞖䠱䩳婌属屬暑潻癙盨署薥薯藷蜀襩钃黍鼠鼡]>shǔ; -[㛸㜐㣽㶖㷂㽰㾁䆝䉀䎉䘤䜹䝂䢤䩱侸凁墅尌庶庻恕戍数數曙朮术束树樜樹沭漱潄澍濖竖竪絉荗蒁術袕裋豎述鉥錰鏣鮛鶐]>shù; -[刷唰]>shuā; -耍>shuǎ; -誜>shuà; -[孈摔縗缞衰]>shuāi; -甩>shuǎi; -[䢦卛咰帅帥繂蟀]>shuài; -[拴栓閂闩]>shuān; -[䧠涮]>shuàn; -[双孀孇欆礵艭雙霜驦骦鷞鸘鹴]>shuāng; -[㼽䗮䫪塽慡樉爽縔騻]>shuǎng; -[㦼䡯灀]>shuàng; -[誰谁]>shuí; -æ°´>shuǐ; -[㽷䭨娷帨涗涚睡瞓祱稅税蛻蜕裞]>shuì; -[吮揗楯賰]>shǔn; -[㥧䀢䀵䑞橓瞚瞬舜蕣順顺鬊]>shùn; -[哾說説说]>shuō; -[䀥䈾䌃妁揱搠朔槊欶洬烁爍獡矟硕碩芍蒴鎙鑠铄]>shuò; -[丝偲凘厮厶司咝嘶噝媤廝思撕斯楒榹泀澌燍磃禗禠私簛籭糹絲緦纟缌罳蕬虒蛳蜤螄蟖蟴覗鉰鋖鐁颸飔騦鷥鸶]>sÄ«; -𥐘>sí; -æ­»>sǐ; -[㐌㕽㚶㣈㭒㸻㹑㾅䇃䎣䏤䦙亖佀俟儩兕嗣四姒娰孠寺巳杫柶汜泗泤洍涘瀃牭祀禩竢笥耜肂肆蕼貄賜赐釲鈻飤飼饲駟驷飼]>sì; -[倯凇娀崧嵩庺憽松枀柗梥檧淞濍硹菘蜙鍶锶鬆]>sōng; -[㧐㨦㩳䉥䜬傱嵷怂悚愯慫捒楤竦耸聳駷]>sǒng; -[㕬㮸䛦䢠宋訟誦讼诵送頌颂餸]>sòng; -[嗖廀廋捜搜摉溲獀艘蒐螋鄋醙鎪锼颼飕餿馊騪]>sōu; -[㖩㛐䈹䉤䏂䮟傁叜叟嗾擞擻櫢滫瞍籔薮藪]>sǒu; -[㵻瘶膄]>sòu; -嗽>sou; -[囌櫯甦稣穌苏蘇蘓酥]>sÅ«; -俗>sú; -[㑉㑛㓘㔄㕖㜚㝛㨞㩋㪩㬘㯈㴋㴑㴼䃤䅇䌚䎘䏋䑿䔎䘻䛾䥔傃僳嗉塐塑夙嫊宿愫愬憟栜榡樕橚殐泝涑溯溸溹潥玊珟璛碿窣簌粛粟素縤肃肅膆蓿蔌藗蜶觫誎謖谡趚速遡遬鋉餗驌骕鱐鷫鹔]>sù; -[訴诉]>su; -[狻痠酸]>suān; -[㔯匴]>suǎn; -[祘笇筭算蒜]>suàn; -[倠哸夊攵毸浽滖濉熣眭睢綏绥芕荽荾虽雖鞖]>suÄ«; -[㵦㻟䜔䢫遀隋随隨]>suí; -[䭉䯝巂瀡膸髄髓]>suǐ; -[㒸㞸㴚㻪㻽䅗䉌䍁䔹䠔䡵䥙亗埣嬘岁嵗旞檅檖歲歳澻煫燧璲瓍睟砕碎祟禭穂穗穟繀繸襚誶譢谇賥遂邃鐆鐩隧𡑞]>suì; -[孙孫搎槂狲猻荪蓀蕵薞飧飱]>sÅ«n; -[㔼㡄㦏䁚损損榫笋筍箰簨鎨]>sǔn; -愻>sùn; -[傞唆嗍娑挱挲摍桫梭樎簑簔縮缩莏蓑趖蹜]>suō; -[㪽䂹䅴䈗䐝䖛䗢䞆䞽䣔䵀唢嗩所摵擌暛洓溑琐瑣璅瘷索褨鎍鎖鎻鏁鏼锁]>suǒ; -逤>suò; -嗦>suo; -[他嚃塌她它祂禢]>tā; -[㗳㺚塔墖榙]>tǎ; -[㒓㛥㣛㣵㧺㭼㯓㳠㳫㹺㿹䂿䈋䈳䌈䍇䍝䎓䑜䓠䜚䵬䶀䶁亣嗒嚺崉挞搨撻榻橽毾沓涾溻澾濌狧獭獺羍誻譶跶踏蹋蹹躂躢遝遢錔鎉鑉闒闥闼阘鞜鞳鮙鰨鳎龖龘]>tà; -[囼孡胎]>tāi; -[㒗㘆㙵㣍㬃㷘㸀䈚䑓䢰儓冭台坮嬯抬擡旲檯炱炲籉臺苔菭薹跆邰颱駘骀鮐鲐]>tái; -[㑷㥭䣭太夳忲态態曃汰泰溙燤肽舦酞鈦钛]>tài; -[啴嘽坍怹抩摊擹攤橝滩灘瘫癱緂舑舚譠貪贪]>tān; -[㲜㷋㽑䃪䉡䊤䕊倓嘾坛墰墵壇壜婒惔憛昙曇榃檀潭痰罈罎艢藫覃談譚谈谭貚郯醈醰錟鐔锬镡餤驔]>tán; -[㲭䆱䏙䞡䦔嗿坦忐憳憻毯璮禫膻菼袒襢贉醓黮]>tǎn; -[䐺䜖傝僋叹嘆埮探歎湠炭碳賧赕]>tàn; -[劏嘡坣汤湯羰蝪蹚鏜镗鼞]>tāng; -[㑽㙶㜍㭻㲥㼺䅯䉎䌅䣘䧜傏唐啺堂塘搪摚棠榶樘橖溏漟煻瑭磄禟篖糃糖糛膅膛蓎薚螗螳赯踼鄌醣鎕闛隚餹饄鶶]>táng; -[㒉㿩伖倘偒傥儻帑惝戃曭淌爣矘耥躺鎲钂镋𢠵]>tǎng; -[䟖摥烫燙趟鐋铴]>tàng; -[叨嫍弢慆掏搯槄洮涛滔濤瑫絛縚縧绦翢蜪詜謟轁鞱韜韬飸饕]>tāo; -[㹗䬞匋咷啕桃梼檮淘祹綯绹萄裪迯逃醄鋾錭陶鞀鞉饀駣騊鼗]>táo; -[䚯䚵䵚討讨]>tǎo; -[㚐套]>tào; -[㥂㧹忑忒慝棏特脦蚮蟘貣鋱铽鴏]>tè; -[膯鼟]>tēng; -[䒅䕨䠮䲍䲢儯幐滕漛疼籐籘縢腾蕛藤螣誊謄邆駦騰驣鰧]>téng; -[䴘剔梯踢鷈鷉]>tÄ«; -[㖒㡗㣢䅠䔶䚣䛱䝰䣡䨑䬾偍厗啼嗁媂媞崹惿提漽珶瑅碮禔禵稊綈緹绨缇罤荑蝭褆謕趧蹄蹏遆醍鍗隄題题騠鮷鵜鶗鶙鹈鼶]>tí; -[䌡䣽䪆䶏体挮躰軆骵體]>tǐ; -[㗣㬱㯩䎮䙗䧅䯜䶑俤倜剃嚏嚔悌悐惕惖掦揥替歒殢涕睼籊薙褅趯迏逖逷銻鐟锑髢髰鬀鬄]>tì; -[屉屜]>ti; -[倎兲天婖沗添酟靔靝黇]>tiān; -[㧂䑚䟧䡒䡘䥖嗔塡填屇恬搷沺湉璳甛甜田畋畑盷窴胋菾闐阗鷆鷏]>tián; -[㐁㖭㙉㥏䄼䄽䐌䠄䣯䩄唺忝悿晪殄淟睓腆舔覥觍賟錪鍩锘靦餂]>tiǎn; -[㮇㶺掭煔]>tiàn; -[頲颋]>tian; -[佻庣恌挑旫祧聎蓨鮡]>tiāo; -[㑿㟘䎄䒒䖺䟭䩦䯾䱔䳂岧岹条條樤祒笤芀苕萔蜩趒迢鋚鎥鞗髫鰷鲦齠龆]>tiáo; -[㸠䠷嬥宨晀窕誂]>tiǎo; -[朓眺窱粜糶絩脁覜跳]>tiào; -[呫帖怗萜貼贴]>tiē; -[䥫鉄銕鋨鐡鐵铁锇驖鴩]>tiě; -[䴴䵿蛈飻餮]>tiè; -[厅厛听圢庁廰廳桯汀綎耓耵聴聼聽艼鞓]>tÄ«ng; -[㹶䗴䱓亭停婷嵉庭廷朾楟榳渟筳聤莛葶蜓蝏諪邒閮霆鯅鼮]>tíng; -[䋼䦐䵺侹挺梃涏烶珽町甼脡艇誔鋌铤]>tǐng; -[嗵恫樋炵熥狪痌蓪通]>tōng; -[㠉㠽㣚㣠㤏㮔㸗㼧㼿䂈䆚䮵䳋䴀䶱仝佟侗僮勭同哃峂峒峝庝彤晍曈朣桐氃浵潼烔燑爞犝獞瞳砼硐秱穜童筩粡絧罿膧艟茼蕫蚒詷迵酮鉖鉵銅铜餇鮦鲖鼨]>tóng; -[㛚㪌䆹姛捅桶筒統綂统]>tǒng; -[恸慟憅痛蘣衕]>tòng; -[偷偸婾媮鍮]>tōu; -[㓱㡏㢏䵉亠匬坄头投牏酘頭骰]>tóu; -[㪗䱏妵斢紏鈄钭黈]>tǒu; -[㖣䞬䟝透]>tòu; -[凸堗嶀廜捸涋痜禿秃突鋵]>tÅ«; -[㭸㻌㻠㻬㻯䅷䖘䠈䣄䣝䤅䳜凃図图圖圗塗宊屠峹嵞庩徒怢捈揬梌湥潳瑹瘏稌筡腯荼葖蒤跿途酴鈯鍎馟駼鵚鶟鷋鷵鼵]>tú; -[吐唋土圡芏釷钍]>tǔ; -[兎兔堍菟鵵]>tù; -涂>tu; -[湍煓猯貒]>tuān; -[㩛䊜剸团団團慱抟摶槫漙糰鏄鷻]>tuán; -[䜝䵯畽疃黗]>tuǎn; -[彖褖]>tuàn; -[推蓷藬]>tuÄ«; -[㢈㢑㾯㾽㿉㿗䀃䅪䍾䫋尵弚橔穨蘈蹪隤頹頺頽颓魋]>tuí; -[㞂㱣㾼俀僓腿蹆骽]>tuǐ; -[㦌㷟娧煺退駾]>tuì; -[吞呑啍噋旽暾朜涒炖焞]>tÅ«n; -[㞘㩔㹠㼊坉屯忳臀臋芚訰豘豚軘霕飩饨魨鲀]>tún; -[㖔氽]>tǔn; -褪>tùn; -[仛佗侂侻咃托扥拕拖挩捝杔汑沰涶牠矺脫脱託讬飥饦馲驝]>tuō; -[㸰㸱㼠㾃䍫䡐䪑䭾䰿䴱坨堶岮沱沲狏砣砤碢紽袉詑跎迱酡阤陀陁鞁馱駄駞騨驒驮魠鮀鴕鸵鼉鼍鼧]>tuó; -[㟎䓕䲊妥媠嫷庹彵撱椭楕橢軃鰖鵎]>tuǒ; -[唾拓柝槖橐毤毻箨籜萚蘀跅]>tuò; -[駝驼]>tuo; -[劸嗗娲媧徍挖搲攨洼溛漥畖穵窊窪聉蛙鼃]>wā; -[㰪娃]>wá; -[㧚㼘佤咓瓦邷]>wǎ; -[䎳䚴䠚嗢婠淴腽膃袜襪韈韤]>wà; -哇>wa; -[㖞咼喎歪]>wāi; -[䠿外懀]>wài; -[剜帵弯彎湾潫灣蜿豌]>wān; -[㝴䯈丸刓完抏汍烷玩琓紈纨芄頑顽]>wán; -[㜶㽜㿸䂺䅋䖤䗕䘼䛷䝹䩊䳃倇埦婉宛惋挽晚晩晼梚椀浣澣琬畹皖盌睌睕碗綩綰绾脕莞菀萖踠輓鋄鋔錽鞔鯇鲩]>wǎn; -[㸘䥑万仴卍卐忨捥綄翫腕萬蟃貦贎鎫]>wàn; -[㑌尢尣尩-尫汪]>wāng; -[亡亾仼兦彺王莣蚟]>wáng; -[㓁㲿㳹㴏䋄䋞䰣往徃忹惘暀棢瀇網网罒罔菵蛧蝄誷輞辋迬魍]>wǎng; -[䛃䤑妄忘旺望朢迋]>wàng; -枉>wang; -[倭偎危喴威媁媙崴巍微愄揋椳楲渨溾烓煨燰碨萎葨葳蝛覣詴逶隇隈鰃鰄鳂]>wēi; -[㕒㣲㧑䉠䑊䔺䜅䝐䥩䧦唯囗囲围圍圩壝峗峞嵬帏帷幃惟桅欈沩洈涠湋溦潍潿濰瀢琟癓矀維维蒍蔿薇覹违違鄬醀鍏闈闱霺韋韦鮠]>wéi; -[㖐㞇㞑㟪㠕㢻㨊㬙㭏㱬䃬䈧䞔䪘䬐䬿䵋亹伟伪偉偽僞儰喡委娓寪尾崣嵔徫愇斖暐梶椲洧浘濻炜煒猥玮瑋痏痿硊磈緯纬腲艉芛苇荱葦蓶薳蘤蜲諉诿踓鍡隗韑韙韡韪頠颹骩-骫鮪鲔]>wěi; -[㥜㦣㷉䗽䘙䙿䜜䡺䪋䬑䭳䮹䲁䵳为位卫叞味喂媦嬒尉徻慰未渭為煟熭爲犚犩畏硙磑緭罻胃苿菋蔚薉藯蘶蜼螱衛衞褽謂讆讏谓贀躗躛軎轊錗鏏霨餧餵魏鮇鳚]>wèi; -[猬蝟]>wei; -[塭昷殟温溫瑥瘟瞃豱輼轀辒馧鰛鰮鳁]>wēn; -[䎹䎽䘇䰚彣文炆玟珳琝瘒紋纹聞芠蚉蚊螡蟁閿闅闦闻阌雯馼魰鳼鴍鴖鼤]>wén; -[㒚㖧㗃㝧㳷刎吻呡桽稳穏穩肳脗]>wěn; -[伆問妏抆揾搵汶渂熓璺紊莬问]>wèn; -[嗡嵡翁螉鎓霐鶲鹟]>wēng; -[㘢㜲䐥䤰勜塕奣暡浻滃瞈聬蓊]>wěng; -[瓮甕罋齆𦧅]>wèng; -[唩涡涹渦猧窝窩莴萵蜗蝸踒]>wō; -[㦱㧴䰀婑我捰]>wǒ; -[㠛㱧䁊䠎偓卧幄捾握斡楃沃涴渥濣焥肟臥蒦齷龌]>wò; -[乌剭呜嗚圬媉屋巫弙杇歍汙汚污洿烏瑦窏箼腛螐誣诬邬鄔鰞鴮鼿]>wÅ«; -[㷻㹳㻍䍢䦜䫓䮏吳吴吾呉唔娪无梧毋洖浯無牾珸璑祦禑膴芜茣莁蕪蜈誈郚鋘鋙铻鯃鵐鷡鹀麌鼯]>wú; -[㐅㑄㬳㵲䒉䟼䡧䳇五仵侮倵儛午啎墲妩娒娬嫵嵨庑廡忤怃憮捂摀旿橆武潕玝珷甒碔舞躌鵡鹉]>wǔ; -[㐳㡔㽾䃖䎸䑁䛩䦍䳱俉兀勿卼坞垭塢奦婺寤屼岉嵍忢悞悟悮戊扤敄晤杌沕溩焐熃物痦矹窹粅芴蘁誤误迕逜遻鋈鎢钨阢隖雾霚霧靰騖骛齀兀]>wù; -[伍务務]>wu; -[䂀俙傒僁僖兮凞卥厀吸唏唽嘻噏夕奚娭媐嬆嬉屖嵠嶲巇希徆徯忚怷怸恓悉悕惁惜扱扸捿擕晞晰曦析桸榽樨橀欷歖氥浠淅溪潝烯焈煕熄熈熙熹-熻燨爔牺犀犧琋瓗皙睎睳瞦硒禧稀窸糦縘繥羲肹膝舾莃菥蒵蜥螅螇蟋蠵覀觹觽觿譆谿豀豨豯貕蹊酅醯錫鏭鑴锡隵雟騱驨鵗黊鼷凞𥋟]>xÄ«; -[㔒㠄㤴㦻㩗㳧㵿㽯㿇䀘䏮䫣习媳嶍席昔棤椺槢檄欯漝焟焬獥瘜習蒠蓆薂袭裼襲覡觋謵趘郋鎴钖隰霫飁騽鰼鳛]>xí; -[䢄匸喜囍壐屣徙憘憙敼暿枲洗漇狶玺璽矖簁縰纚葈葸蓰蟢諰蹝躧酾釃霼鱚]>xǐ; -[㑶㙾㚛㞒㣟㤸㥡㭡㸍㹫䈪䊠䐼䓇䙽䚷䛥䜁䧍䨳䩤䮎䲪係卌呬咥喺嚊嚱墍屃屓屭忥怬恄戏戯戱戲晳椞歙汐滊潟澙熂犔盻矽磶禊稧穸系細綌繋繫细绤翕翖肸舃舄蕮虩衋覤謑赥赩郄郤鄎釳釸鎎闟阋隙隟餼饩鬩黖齂]>xì; -[息西]>xi; -[傄呷煆煵疨瞎虾蝦谺鍜閕颬]>xiā; -[㗇㘡㰺㽠䖎䖖䘥䛅䦖䪗䫗侠俠冾匣峡峽搳敮暇柙炠烚狎狭狹珨瑕硖硤碬磍祫笚筪縀縖翈舝蕸赮轄辖遐鎋陜霞騢魻鰕黠]>xiá; -閜>xiǎ; -[㗿㙤丅下吓嚇夏夓懗欱疜睱罅芐鏬鶷]>xià; -[仚僊先嘕奾嬐孅屳廯忺憸掀掺摻暹杴枮氙澖珗祅祆秈籼纎纖纤苮蓒蘐褼襳訮跹蹮躚酰銛鍁铦锨韯韱馦鮮鱻鲜]>xiān; -[㘅㘋㛾㡉㢺㭹㮭㳄㳭㵪䒸䕔䝨䦥䲗䶢咸唌啣嗛娴娹婱嫌嫺嫻弦憪涎燅甉痃痫癇癎瞯瞷礥絃羬胘舷葴藖蚿蛝衔衘諴賢贒贤輱銜閑閒闲鷳鷴鷼鹇鹹]>xián; -[㜪㧋㧥㫫㬎㭠㯀㶍㿅䉳䗾䘆䚚䜢䢾䥪䧋䧮冼尟尠崄嶮幰搟攇显櫶毨灦烍燹狝猃獫獮玁癣癬礆禒筅箲藓蘚赻跣銑鍌铣险険險韅顕顯鼸齴]>xiǎn; -[㔵㡾㦓㩈㪇㬗㺌䀏䁂䃱䃸䉯䏹䞁䤼䧟䨘䨷䱤䵇䶟伣俔僩僴县咞哯垷姭娊宪岘峴憲撊晛橌涀瀗献獻现現県睍粯糮絤綫線縣线缐羡羨腺臔臽苋莧蚬蜆袨誢豏轞鋧錎限陥陷霰餡馅麲𠜎]>xiàn; -仙>xian; -[㐮乡厢啌廂忀欀湘瓖相箱緗纕缃膷芗葙薌襄郷鄉鄊鄕鑲镶香驤骧麘]>xiāng; -[㟄䔗䜶佭庠栙祥絴翔詳详跭祥]>xiáng; -[㗽䊑䖮享亯响奛嶑想晑響飨餉饗饟饷鮝鯗鱶鲞]>xiǎng; -[㟟䐟䢽像向嚮塂巷恦曏橡珦萫蚃蟓蠁襐象鐌闀闂項项鱌]>xiàng; -[呺哓哮啋嘋嘐嘵嚣嚻囂婋宯宵庨彇憢撨枭枵梟櫹歊毊消潇潚瀟灱灲烋焇獢痚痟硝硣穘窙箫箾簘簫綃绡翛膮萧萷蕭藃虈虓蟏蟰蠨踃逍銷销霄驍骁髇魈鮹鴞鸮]>xiāo; -[㑾㚣㬵䒝洨笅訤誵郩]>xiáo; -[䒕䥵小晓暁曉皢筱筿篠謏]>xiǎo; -[㔅㗛㤊㹲䊥䕧俲傚効咲啸嘨嘯娎孝恔效敩斅斆校歗涍熽笑肖藠誟鞩]>xiào; -[些歇猲薛蠍褉]>xiē; -[㖿㙝㥟㨙㩉㩦㩪㭨䔑䕵䙎䡡䭎偕劦勰协協嗋垥奊恊愶慀拹挟挾搚携撷擷攜斜旪熁燲籺絜綊緳纈缬翓胁脅脇脥膎蝢衺襭諧谐邪鋣鞋鞵龤𩋘𩋧]>xié; -[㕐㝍䥱䥾写冩寫藛躠]>xiě; -[㒠㓔㔎㖑㙰㞕㣯㣰㦪㨝㰔㰡㳦㳿㴬㴮㴽㸉㽊䉏䉣䊝䕈䙊䙝䚳䚸䢡䦏䦑䩧䲒䵦亵伳偰卨卸塮妎媟屑屟屧嶰廨徢懈揳斺暬械楔榍榭泄泻洩渫澥瀉瀣灺焎燮爕獬疶祄禼糏紲絏絬緤绁缷薤蟹蠏衸褻謝谢躞邂鞢韰駴骱齘齥]>xiè; -[䜣俽兓噷妡廞心忻惞新昕杺欣歆炘盺芯莘薪訢辛鈊鋅鑫锌馨騂骍]>xÄ«n; -[㚯䰼攳樳襑鄩]>xín; -伈>xǐn; -[㐰㛛㭄䒖䚱䛨䜗伩信卂囟孞焮煡脪舋衅訫軐釁阠顖馸]>xìn; -[垶惺星曐煋猩瑆皨篂腥蛵觪觲鍟馫鮏鯹]>xÄ«ng; -[㐩㓝㣜㼛䣆䤯侀刑坓型娙形洐濴烆硎筕胻行邢郉鈃鉶銒鋞钘铏陉陘雽餳饧]>xíng; -[㝭㨘㮐䳙擤渻睲醒]>xǐng; -[㓑㼬䁄䂔䓷䛭䰢倖兴姓婞嬹幸性悻杏涬緈臖興荇莕]>xìng; -[㐫兄兇凶匈哅忷恟汹洶胷胸訩詾讻賯]>xiōng; -[䧺熊赨雄]>xióng; -[夐敻詗诇]>xiòng; -[休俢修咻庥樇烌羞脩臹茠蓚貅銝鎀鏅饈馐髤髹鵂鸺]>xiÅ«; -[㱙朽糔綇]>xiǔ; -[㗜㾋嗅嘼岫峀溴珛琇秀綉繍繡绣袖褎褏銹鏥鏽锈齅]>xiù; -[偦吁呴嘘噓墟媭嬃嬬幁戌揟旴晇楈欨欰歔歘疞盱稰籲縃繻胥蕦虗虚虛蝑訏譃鑐需須须驉鬚魖]>xÅ«; -[䍱俆徐蒣]>xú; -[㑔㑯㞰㥠䅡䔓冔喣姁昫栩湑煦珝糈許詡諝许诩谞鄦醑]>xǔ; -[㐨㕛㖅㗵㘧㚜㜅㜿㞊㤢㦽㰲㵰㷦㺷㾥䂆䋶䘏䙒䛙䜡䢕䣱䣴䦗䦽䬔䱛䳳伵侐勖勗卹叙垿壻婿序怴恤慉敍敘旭-旯朂槒殈汿沀洫溆漵潊烅珬盢瞁瞲稸窢絮緒緖續绪续聟芧蓄藇藚訹賉酗銊頊顼魆魣鱮]>xù; -[佡儇吅咺塇媗宣弲愃愋揎昍晅暄梋煊瑄睻矎禤翧翾萱蕿藼蝖蠉諠諼譞谖軒轩鋗鍹鶱]>xuān; -[㘣㳬㹡䁢䗠䮄䲂䲻䴉䴋伭妶嫙悬懸旋暶檈漩玄玹琁璇璿蜁誸鹮]>xuán; -[㾌䍻䠣喧暅烜选選]>xuǎn; -[㧦㳙䍗䘩䝮䧎䩙䩰埍怰昡楥楦泫渲潠炫眩眴碹絢縼繏绚蔙衒讂贙鉉鏇铉镟鞙颴駽]>xuàn; -[削吙屵蒆辥靴鞾]>xuē; -[㖸㧒㶅㿱䫻䱑乴学學峃嶨斈泶澩燢茓觷雤鷽鸴𥄴]>xué; -[㡜䨮雪鱈鳕]>xuě; -[㞽䎀䤕䫼䬂䭥吷坹岤桖泬烕穴血謞趐]>xuè; -[勋勛勲勳坃埙塤壎壦曛焄熏燻獯矄纁臐蔒薫薰蘍醺𤑕]>xÅ«n; -[㜄㝁㨚㰊㰬㽦䋸䖲䙉偱噚寻尋峋巡廵循恂挦撏旬杊枔栒桪槆橁毥洵浔潃潯灥燖珣璕畃紃荀荨蕁蟳詢询郇馴駨驯鱏鱘鲟]>xún; -[㢲䛜䞊䭀伨侚噀埈奞巺巽徇殉汛爋狥蕈訊訙讯賐迅迿逊遜鑂陖韗顨鵔鵕]>xùn; -[訓训]>xun; -[丫劜压圧壓孲庘押椏鴉鴨鵶鸦鸭]>yā; -[㧎䄰䊦伢厓堐岈崕崖枒桠涯漄牙犽猚笌芽蚜衙齖]>yá; -[㿿䪵厊哑唖啞庌痖瘂蕥雃雅]>yǎ; -[㝞㰳䅉䝟䢝䦪䯉䰲䵝亚亜亞俹嚈圠埡娅婭挜掗揠氩氬猰玡砑稏窫聐襾訝讶軋轧迓錏鐚铔齾]>yà; -呀>ya; -睚>yái; -[偣剦啱嫣嬮崦懕懨淹漹烟焉煙猒珚篶胭臙菸蔫鄢酀醃閹阉黭]>yān; -[㗴㘖㘙㫟㳂㶄㿕㿼䀋䀽䂴䇾䊙䌪䓂䕾䖗䗡䢥䤷䱲䶮严厳嚴埏塩壛壧妍姸娫娮孍岩嵒嵓巌巖巗延揅昖楌檐櫩沿湺炎狿琂盐研硏碞礹筵簷綖莚葕蔅虤蜒言詽讠郔鈆閻阎顃顏顔颜鹽麙麣]>yán; -[㓧㕣㚧㢂㫃㭺䁙䄋䊻䎦䗺䣍䲓乵俨偃儼兖兗剡匽厣厴噞夵奄姶嵃嶖巘巚弇愝戭扊抁掩揜曮棪椼檿沇渰渷演琰甗眼硽罨萒蝘衍裺褗躽遃郾酓隒験魇魘鰋鶠黡黤黶鼴鼹龑]>yǎn; -[㛪㢛㦔㬫㷔㷳㷼䂩䅧䑍䜩䢭䨄䭘䳛䳺䴏偐傿厌厭咽唁喭嚥堰墕妟姲婩嬊嬿宴彥彦恹敥晏暥曣椻滟灎灔灧灩焔焰焱燄燕爓牪砚硯艳艶艷覎觃觾諺讌讞谚谳豓豔贋贗赝酽醼釅閆闫隁雁餍饜騐騴驗驠验鳫鴈鴳鷃鷰]>yàn; -[佒咉央姎柍殃泱眏秧紻胦鉠鴦鸯]>yāng; -[㟅㬕䁑䖹䬗佯劷垟崵徉扬揚敭旸昜暘杨楊洋炀烊煬玚珜瑒疡瘍眻禓羊羏蛘諹輰鍚鐊阦阳陽霷颺飏鰑鸉]>yáng; -[㔦䇦䑆䒋䬬仰傟养勨坱岟慃懩抰攁氧氱炴痒癢蝆鞅養餋駚]>yǎng; -[㨾㺊㿮䬺䭐䵮怏恙样様樣漾瀁羕詇]>yàng; -[吆喓妖幺枖楆腰葽訞邀]>yāo; -[㨱㮁䂚䆙䉰䋂䌊䌛䍃䔄䖴䚺䚻䢣䬙倄傜嗂垚堯姚媱尧尭峣崤嶢嶤徭愮揺搖摇暚榣殽淆烑爻猇猺珧瑤瑶窑窯窰肴蘨謠謡谣軺轺遙遥邎銚铫颻飖餆餚鰩鳐𨍳]>yáo; -[㟱㢓㫏㫐㴭䁏䁘䆞䴠䶧仸偠咬夭婹宎岆崾抭杳柼榚殀溔眑窅窈窔舀苭蓔闄騕鷕鼼齩]>yǎo; -[㔽㝔㞁㵸㿑㿢䋤䑬䙅曜熎燿獟矅穾筄耀艞药葯薬藥袎要覞讑趭鑰钥靿鷂鹞]>yào; -[倻噎晔蠮]>yē; -[䓉䥺峫捓揶擨椰琊瑘耶釾鎁铘]>yé; -[㙒也冶吔嘢埜壄漜野]>yě; -[㐖㖡㖶㗼㙪㝣㥷㩎㪑㱉㸣䈎䤳䤶䥟䥡䧨䭟䲜业亱偞僷叶啘墷夜嶪嶫忦擛擪擫曄曅曗曵枼枽楪業殗殜液澲烨煠燁爗皣瞱瞸葉謁譺谒邺鄴鍱鎑鐷靥靨頁页餣饁馌驜鵺鸈]>yè; -[爷爺]>ye; -[㘈一伊依医吚咿噫壱壹夁嫛弌悘揖檹欹毉泆洢溰漪燚猗瑿祎禕稦繄蛜衣譩郼醫陭餏饻鷖鹥黟黳𣘦]>yÄ«; -[㚦㝖㞔㥴㦾㰘㺿䄬䇵䐅䐖䖊䞅䩟䬁䬮䮊䱌䲑䴊乁仪侇儀冝凒匜咦圯夷姨宐宧寲峓嶬巸弬彛-彞怡恞扅暆杝枱柂桋椸歋沂沶洟熪珆瓵疑痍眤眱移簃羠胰苐萓蛦螔袘袲觺訑詒謻讉诒貤貽贻跠迻遗遺酏鈶鏔頉頤顊颐飴饴鮧鴺鸃]>yí; -[㕥㠯㩘㫊㰝㰻䝝䧧䰙乙以倚偯崺已庡扆扡掜攺旑旖晲栘椅檥矣礒笖肔胣舣艤苡苢蚁螘蟻衪輢轙迆迤逘釔鉯銥钇铱顗鳦齮]>yǐ; -[㐹㑊㑜㑥㓷㔴㖂㘁㘊㙠㙯㚤㛕㜋㜒㡫㡼㢞㣂㣻㦉㦤㱅㱲㲼㳑㴁㴒㵝㵩㶠㹓㹭㽈䄁䄿䆿䇩䉨䋚䋵䌻䎈䓃䓈䓹䔬䕍䖁䗑䗟䗷䘝䘸䝘䝯䢃䣧䦴䬥䭂䭇䭞䭿䯆䱒䴬乂义亄亦亿仡伇伿佚佾俋億兿刈劓劮勚勩呓呭呹唈嗌囈圛垼埶埸墿奕嫕嬑嬟寱屹峄嶧帟帠幆廙异弈弋役忆怈怿悒悥意憶懌懿抑抴挹捙掖撎敡斁易晹曀曎曳杙枍枻栧棭榏槷檍欭歝殔殪殹毅洂浂浥浳湙溢潩澺瀷炈焲熠熤熼燡燱獈玴異疫痬瘗瘞瘱癔益睪瞖秇穓竩緆縊繶繹绎缢羛義羿翊翌翳翼肄肊腋膉臆艗艺芅苅蓺薏藙藝蘙虉蛡蜴螠袣裔裛褹襼訲訳詍詣誼譯議讛议译诣谊豙豛豷跇軼轶逸邑醳醷釴鈠鎰鐿镒镱阣隿霬靾鞥顡饐駅驛驿骮鯣鶂鶃鷧鷾黓齸益逸𥜥]>yì; -宜>yi; -曕>yiàn; -鴁>yiāo; -[侌凐喑噾囙因垔堙姻婣峾廕愔慇摿歅殷氤洇洕湮溵瘖禋秵筃絪緸茵蒑裀諲銦铟闉阥阴陰陻隂霒霠鞇音韽韾駰骃黫]>yÄ«n; -[㕂㖗㙬㝙㞤㸒㹜㹞䓄䖜䪩冘吟唫噖嚚圁垠夤婬寅崟崯斦檭殥泿淫滛烎犾狺璌碒苂荶蔩蟫訔訚訡誾鄞釿鈝銀银霪鰥鳏鷣]>yín; -[㐆㡥㥯㥼㦩㧈㱃㾙䇙䌥䒡䤺䨸乚尹嶾廴引檃櫽淾濦瘾癮磤紖縯纼蘟蚓螾讔趛鈏隐隠隱靷飮飲饮馻]>yǐn; -[㣧㪦㴈㼉䕃䚿䡛䤃䲟印垽堷慭憖憗懚朄檼湚濥猌癊窨胤茚荫蔭酳鮣]>yìn; -[偀嘤嚶婴媖嫈嬰孆孾应応應撄攖朠桜楧樱櫻渶煐瑛璎瓔甇甖碤礯緓纓绬缨罂罃罌膺英莺蘡蝧蠳褮譻鍈鑍锳霙韺鴬鶧鶯鷪鷹鸎鸚鹦鹰]>yÄ«ng; -[㢍㨕㴄㵬㹙㹚㿘䁝䃷䑉䕦䪯僌営塋嬴巆廮攍楹櫿溁滎潆濙濚瀛瀠瀯熒營瑩盁盈籝籯縈茔荥荧莹萤-萦萾藀蛍蝿螢覮謍贏赢迎]>yíng; -[㯋㲟䀴䨍䭊䭗巊影梬浧潁瀴璄瘿癭矨穎郢頴颍颕颖]>yǐng; -[㑞䁐䙬䤝噟媵摬映暎滢瀅硬膡蓥譍賏鎣鐛鞕]>yìng; -[蝇蠅]>ying; -[哟唷喲]>yō; -[㐯傭嗈噰墉壅庸廱慵拥擁澭瀜灉痈癕癰蕹邕郺鄘鏞镛雍雝饔𠆌]>yōng; -[㝘䗤喁嫆嫞槦滽牅顒颙鱅鳙]>yóng; -[㙲㦷㷏㽫䞻俑傛勇勈咏埇塎嵱彮恿悀惥愑愹慂搈柡栐永泳涌湧甬禜臃蛹詠踊踴鯒鲬]>yǒng; -[㞲㶲佣用苚醟]>yòng; -[优優呦嚘幽忧怮悠憂攸櫌瀀纋耰鄾麀]>yōu; -[㒡㕱㘥㚭㛜㫍㳺㻀㽕䑻䖻䚃䢊䢟囮尤峳怣斿楢櫾沋油浟游滺犹猶猷由疣秞肬莤莸蕕蚰蝣訧輏輶逌逰遊邮郵鈾铀駀魷鮋鯈鱿鲉]>yóu; -[㮋㰶㾞䅎䒴䬀䱂䳑丣偤卣唀岰庮懮有栯梄槱泑湵牖禉羐羑聈苃莠蚴蜏酉銪铕黝]>yǒu; -[㓜㕗㤑㹨㺠䀁䆜䛻䞥亴佑侑又右囿姷宥峟幼柚牰狖祐糿誘诱貁迶酭釉鴢鼬]>yòu; -友>you; -[唹扜毹毺淤瘀盓穻箊紆纡虶迂迃陓]>yÅ«; -[㒜㚥㤤㥔㥚㥥㦛㪀㬂㬰㳛㶛㷒㺞㺮㼶䁩䂛䃋䄏䄨䍂䏸䐳䔡䗨䜽䢓䩒䰻䱷䲣于亐伃余俞兪堣堬妤娛娯娱媀嬩崳嵎嵛愉愚扵揄於旟杅桙楡楰榆欤歈歟歶渔渝湡漁澞狳玗玙瑜璵畬畭畲盂睮硢禺窬竽籅緰羭腧腴臾舁舆艅茰萸蕍蘛虞蝓螸衧褕覦觎諛謣谀踰輿轝逾邘鄃釪鍝隃隅雓雩餘馀骬髃魚鮽鰅鱼鵌鷠鸆鸒]>yú; -[㑨㒁㔱㙑㝢㠘㡰㣃㲾㺄㼌䣁䥏䨞与予伛俁俣偊傴噳圄圉宇寙屿峿嶼庾懙敔斔斞楀瑀瘐祤禹窳篽羽聥與萭蓹蘌螤語语貐鄅酑雨齬龉羽]>yǔ; -[㠨㳚㽣䁌䂊䆷䈅䉛䋖䍞䖇䘘䘱䛕䢩䨒䬄䮇䮙䴁䵫俼哊喅喐喩喻噊圫域堉墺妪嫗寓峪嶎庽彧御忬悆悇惐愈慾戫昱棛棜棫櫲欎欝欥欲毓汩浴淢淯滪澦灪焴煜燏燠爩狱獄獝玉琙瘉癒矞砡硲礇礖礜禦秗稢稶穥籞緎繘罭聿肀育芋芌茟萮蒮蓣蕷薁蜟蜮裕誉諭譽谕豫軉輍逳遇遹郁醧鈺銉鋊錥鐭钰閾阈隩霱預预飫饇饫馭騟驈驭鬰鬱鬻魊鳿鴥鴪鵒鷸鹆鹬黦龥]>yù; -[冤剈噮囦嬽寃悁惌棩淵渁渆渊渕灁眢箢肙葾蒬蜎蜵裷鋺駌鳶鴛鵷鸢鸳鹓鼘鼝]>yuān; -[㟶㥳㹉䖠䬧䲮䳒䳣元原厡厵员員园圆圎園圓圜垣塬妧媴嫄岏援杬榞榬橼櫞沅湲源溒爰猨猭猿獂笎緣縁缘羱芫萲蒝薗蚖蝝蝯螈袁貟贠轅辕邍邧鎱騵魭鶢鶰黿鼋]>yuán; -[䛄䛇䩩妴远逺遠]>yuǎn; -[㤪㥐㭇䅈䏍䬇䬼傆夗媛怨愿掾瑗禐苑衏裫褑褤謜院願]>yuàn; -[曰曱箹約约]>yuē; -[哕噦]>yuě; -[㜧㜰㬦㰛㹊䋐䖃䟠䠯䡇䢁䢲䤦䥃䶳刖妜岄岳嶽恱悅悦戉抈捳月枂樾泧瀹爚狘玥礿禴篗籆籥籰粤粵蘥蚎蚏越跀跃躍軏鈅鉞钺閱閲阅鸑鸙龠]>yuè; -[奫晕暈氲氳煴緼縕缊蒀蒕蝹贇赟]>yÅ«n; -[㚃㜏䉙䢵云勻匀妘愪昀榅榲橒沄涢溳澐熅熉畇眃秐筠筼篔紜縜纭耘耺芸荺蒷蕓郧鄖鋆雲饂]>yún; -[䆬䇖䞫䡝䤞䦾䨶䪳傊允喗抎殒殞狁玧磒褞賱輑鈗阭陨隕霣]>yǔn; -[㚺㞌㟦䚋䩵䲰䵴囩夽孕恽惲愠慍枟熨緷腪蕰蕴薀藴蘊运運郓鄆酝醖醞韞韫韵韻鶤]>yùn; -[匝咂帀抸沞迊鉔]>zā; -[䕹䞙䪞偺囐嶻杂砸磼襍雑雜雥韴魳]>zá; -[咋鮺鲝]>zǎ; -[哉栽渽災灾烖賳𢦏]>zāi; -[㞨㱰㴓䏁䣬䮨宰崽縡]>zǎi; -[䵧侢傤儎再在扗載载酨]>zài; -[兂簪簮鐕]>zān; -[倃咱喒糌]>zán; -[㤰儧儹噆寁拶撍攅攒攢昝桚沯礸禶趱趲]>zǎn; -[㜺㟛㣅囋暂暫欑濽灒瓉瓒瓚穳襸讃讚賛贊赞鄼酂酇錾鏨]>zàn; -[匨牂羘臜臢蔵賍賘贓贜赃髒]>zāng; -臧>záng; -[駔驵]>zǎng; -[㘸塟奘弉脏臓臟葬銺]>zàng; -[傮糟蹧遭]>zāo; -[䥣凿醩鑿]>záo; -[䲃早枣棗澡璪繰缲薻藻蚤]>zǎo; -[㲧㿷䜊唕唣噪慥梍灶燥皁皂竃竈艁譟趮躁造髞]>zào; -[㖽㣱㳻䃎䇥䕉䕪䰹䶦则則啧嘖崱帻幘択择捑擇沢泽溭澤皟瞔笮箦簀耫舴荝萴蠈蠌諎謮責賾责赜迮鰂鲗]>zé; -[㳁仄夨庂昃昗汄稄]>zè; -[戝賊贼鱡]>zéi; -怎>zěn; -[䫈譖譛谮]>zèn; -[増增憎橧熷璔矰磳繒缯罾譄驓]>zēng; -㽪>zěng; -[䙢䰝甑贈赠]>zèng; -[偧剳哳喳扎抯挓揸摣柤楂樝渣猹皶皻觰齄齇]>zhā; -[㱜㴙䥷䵵劄札牐甴箚紥紮蚻蠿譗鍘铡閘闸霅]>zhá; -[㒀㡸㷢䋾䕢䛽䵙厏眨苲鮓鲊]>zhǎ; -[䖳䞢乍吒咤奓宱搾柵栅榨溠灹炸砟簎膪蚱詐诈醡]>zhà; -[捚摘斋斎榸齋]>zhāi; -[㡯宅礋]>zhái; -[窄鉙飵]>zhǎi; -[㩟债債寨瘵砦]>zhài; -[厃嶦旃旜栴毡氈氊沾瞻粘覘觇詀詹譫讝谵趈邅鉆霑飦饘驙鱣鳣鸇鹯]>zhān; -薝>zhán; -[㞡㠭䁴䎒䟋䡀䩅䱼嫸展崭嶃嶄拃搌斩斬椫榐樿橏琖皽盏盞蹍輾辗醆颭飐魙]>zhǎn; -[㟞㺘㻵䋎䗃䘺䪌䱠佔偡占嶘战戦戰栈桟棧椾湛站綻绽菚蘸虥虦覱蹔輚轏]>zhàn; -[傽墇嫜张張彰慞暲樟漳獐璋章粻蔁蟑遧鄣餦騿鱆麞]>zhāng; -[仉掌涨漲礃绱長长鞝]>zhǎng; -[㕩㙣㽴丈仗嶂帐帳幛扙杖涱痮瘬瘴瞕緔胀脹賬账障]>zhàng; -[妱巶招昭柖盄窼釗鉊鍣钊駋]>zhāo; -[㕚㺐䈃䝖找沼爪瑵菬]>zhǎo; -[㡽㨄㷖䃍䈇䍜䍮䮓兆召垗旐曌枛櫂炤照燳狣瞾笊箌罩羄肁肇肈詔诏赵趙雿鵫]>zhào; -[嗻嫬晢晣螫遮]>zhē; -[㞏㪿㯰䊞䎲䐑䐲䓆䝃䝕乇厇哲啠喆嚞埑悊折摺歽瓋砓磔籷耴虴蜇褶襵詟謫謺讁讋讘谪輒輙辄銸鮿鸅]>zhé; -[啫禇者赭踷]>zhě; -[䂞䏳䗪䠦䩾䵭柘檡浙烢蟅这這鷓鹧]>zhè; -[着著蔗]>zhe; -[侦偵堻媜嫃寊帪揁搸斟栕桢桭楨榛樼溱潧澵獉珍珎瑊甄眞真砧碪磌祯禎禛箴籈縝缜胗臻蒖蒧蓁薽貞贞轃遉酙針鉁錱鍼针靕駗鱵]>zhēn; -[㐱㪛䂦䂧䑐䪴䫬弫抌抮昣晸枕畛疹眕稹笉紾絼縥聄袗裖診诊軫轸辴鬒黰]>zhěn; -[㓄㣀㮳㯢㴨䊶䏖䝩䟴䨯䲴䳲侲圳塦挋振揕敒敶朕栚瑱眹蜄誫賑赈鎭鎮镇阵陣震鴆鸩]>zhèn; -[争佂埩姃峥崝崢征徰徴徵怔挣掙炡烝爭狰猙癥眐睁睜筝箏篜聇蒸諍诤踭鉦錚鏳钲铮鬇]>zhēng; -[䡕愸抍拯掟撜整氶糽]>zhěng; -[㡠㡧㱏㽀䂻䈣䛫䥌䥭䦛䦶帧幀政正症証證证郑鄭鋥锃鴊𠔻]>zhèng; -[之卮吱坧墌嬂巵搘支枝枳栀梔椥榰汁汥疧知祇祗祬秓秖秪綕織织肢胑胝脂芝蜘衼跖隻馶鳷鴟鴲鵄鸱鼅]>zhÄ«; -[㙷㜼㨁䐈䟈䱥䵂侄値值儨劕埴執妷姪慹懫执摭擿柣桎植樴殖漐犆瓆瓡直禃秷稙絷縶聀职職膱蘵蛰蟄蟙褁貭踯蹠躑軄釞馽]>zhí; -[㧻㮹㲛䅩䇛䌤䎺䛗䳅劧厎只咫址坁夂帋恉扺抧指旨晊栺止沚洔淽滍疻砋祉紙纸芷藢襧訨趾軹轵酯阯黹]>zhǐ; -[㕄㗌㗧㘉㛿㝂㣥㨖㴛䄺䆈䇽䉅䉜䏄䏯䐭䑇䓌䕌䚦䝷䞃䡹䥍䦯䫕䬹䭁䱨偫傂制厔垁娡寘峙崻帙帜幟庢庤廌彘徏徝志忮憄懥挃挚掷搱摯擲旘智梽楖櫍治洷淛滞滯潌炙熫狾猘璏畤疐痔痣礩祑秩秲稚稺穉窒筫紩緻置翐胵腟膣至致臸芖蛭螲袟袠製覟觗觯觶誌豑豒豸質贄质贽跱踬躓輊轾迣郅銍鋕鑕铚锧陟雉駤騭騺驇骘鯯鴙鷙鸷]>zhì; -[中伀刣妐幒彸忠忪柊汷泈潨炂煄盅籦終终舯蔠螽衳衷蹱鈡銿鍾鐘钟锺鴤]>zhōng; -[㣫冢喠塚尰歱瘇种種肿腫踵塚]>zhǒng; -[㐺㲴䱰乑仲众偅堹妕媑湩狆眾祌筗緟茽蚛衆衶諥重]>zhòng; -[侜周啁喌州徟洀洲淍烐珘盩矪粥脽舟譸诪賙赒輈輖辀週銂騆鵃鸼]>zhōu; -[㛩妯軸轴]>zhóu; -[䎻䖞晭疛睭箒肘菷鯞]>zhǒu; -[㑇㑳㔌㥮㼙㾭䇠䈙䋓䐍䛆䩜䶇伷僽冑呪咒咮噣宙昼晝甃皱皺籀籒籕粙紂縐繇纣绉胄荮葤詋酎駎驟骤𤏲]>zhòu; -帚>zhou; -[侏劯朱株槠橥櫧櫫洙潴瀦猪珠硃祩秼絑茱蛛蝫蠩袾誅諸诛诸豬跦邾銖铢鮢鯺鴸鼄猪諸]>zhÅ«; -[㔉䌵䕽䘚䟉䥮䮱劚灟炢烛燭爥窋竹竺笁笜築篫舳茿蓫蠋蠾趉躅逐鱁]>zhú; -[㵭䘢䰞丶主嘱囑壴孎宔拄斸欘渚濐煑煮瘃瞩矚砫罜詝貯贮陼麈]>zhǔ; -[㑏㝉㤖㧣㫂㹥㺛㾻㿾䇡䇧䍆䎷䐢䝒䝬䬡䭖伫佇住助坾嵀杼柱柷樦殶注炷疰眝祝竚筑筯箸紵紸纻羜翥苧莇蛀註諔跓軴鉒鋳鑄铸飳馵駐驻麆]>zhù; -[抓挝撾檛膼髽]>zhuā; -拽>zhuāi; -[跩𨋯]>zhuǎi; -[专叀塼嫥専專瑼甎砖磚篿耑膞蟤跧鄟顓颛鱄鷒]>zhuān; -[䡱孨竱転轉转]>zhuǎn; -[䉵僎啭囀堟撰灷瑑篆篹籑縳腞蒃襈譔賺贃赚饌馔]>zhuàn; -[妆妝娤庄桩梉樁粧糚荘莊装裝]>zhuāng; -[壮壯壵撞焋状狀]>zhuàng; -[娺椎追錐锥隹騅骓鴭鵻]>zhuÄ«; -沝>zhuǐ; -[䄌坠墜惴桘甀硾礈窡笍縋缒膇諈譵贅赘鑆餟鵽]>zhuì; -[綴缀]>zhui; -[宒棆窀肫衠諄谆迍]>zhÅ«n; -[准埻準綧隼鶽]>zhǔn; -稕>zhùn; -[㑁倬卓捉桌棹穛穱𠭴]>zhuō; -[㣿㪬㭬㺟䅵䕴䶂剢叕啄啅圴妰彴拙撯擆擢斀斫斮斱斲斵晫梲棁棳椓槕櫡汋泎浊浞涿濁濯灂灼炪烵焯琸硺禚篧籗籱絀绌罬茁蠗諑謶诼踔酌鋜錣鐯鐲镯鷟]>zhuó; -丵>zhuǒ; -劅>zhuò; -[兹呲咨嗞姕姿孖孜孳孶嵫栥椔淄湽滋澬玆甾禌秶稵粢紎緇缁茊茲菑葘諮谘貲資赀资趦輜輺辎鄑鈭錙鍿鎡锱镃頾頿髭鯔鲻鴜鶅鶿鷀鹚鼒齍齜龇]>zÄ«; -[㜽㧗㺭䔂䘣仔吇呰啙姉姊杍梓榟滓矷秄秭笫籽紫耔胏芓茈虸訾訿釨]>zǐ; -[㰣㰷㱴䅆䐉倳剚字恣扻渍漬牸眥眦胔胾自茡]>zì; -子>zi; -[倧堫宗嵏嵕嵸惾朡棕椶熧猣磫稯綜緃緵综翪腙艐葼蝬豵踨踪蹤鑁騌騣骔鬃鬉鬷鯮鯼]>zōng; -[㢔㷓㹅䰌偬傯总惣愡捴揔搃摠熜総縂總蓗]>zǒng; -[䍟䝋倊昮猔疭瘲碂粽糉糭縦縱纵]>zòng; -[媰掫棷棸箃緅菆諏謅诌诹邹郰鄒鄹陬騶驺鯫鲰黀齱齺]>zōu; -[èµ°èµ±]>zǒu; -[㔿㵵䠫奏揍]>zòu; -[租蒩]>zÅ«; -[㞺㰵㲞䅸䚝䯿䱣卆卒哫崒崪捽族稡足踤踿蹵鎐鏃镞]>zú; -[䔃䖕俎爼珇祖組组詛诅阻靻]>zǔ; -[躜躦鑽钻]>zuān; -[䂎䌣籫繤纂纉纘缵]>zuǎn; -[䤸揝攥鑚饡]>zuàn; -[厜嶉樶纗羧脧蟕]>zuÄ«; -[䮔嘴噿嶊嶵洅濢璻觜]>zuǐ; -[㝡㠑㰎䘹晬最栬槜檇檌祽絊罪蕞襊辠酔酻醉鋷錊]>zuì; -[尊嶟樽繜罇遵鐏鷷]>zÅ«n; -[僔噂壿撙譐]>zǔn; -[捘燇銌鱒鳟]>zùn; -嘬>zuō; -[㸲䎰䝫䞰昨椊琢秨稓筰葃鈼]>zuó; -[㝾佐咗唨左毑繓]>zuǒ; -[㑅㘀㘴㛗㭮䋏䔘作侳做唑坐夎岝岞座怍柞祚糳胙葄袏酢阼]>zuò; -# End RAW data for converting CJK characters - -# fallbacks - -## | yi < i; -## | wu < u; -## | bi < b; -## | ci < c; -## | di < d; -## | fu < f; -## | gu < g; -## | he < h; -## | ji < j; -## | ku < k; -## | li < l; -## | mi < m; -## | pi < p; -## | qi < q; -## | l < r; -## | si < s; -## | ti < t; -## | f < v; -## | wa < w; -## | xi < x; -## | yi < y; -## | zi < z; - -# filter out the half-width hangul -# :: [^\uFFBE-\uFFEE] fullwidth-halfwidth (); -## :: (lower) ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Han_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# +::Han-Spacedhan(); +[吖呵錒锕阿]>ā; +嗄>á; +啊>a; +[哀哎唉埃挨銰鎄锿]>āi; +[㱯䠹䶣啀嘊嵦捱敱敳癌皑皚騃]>ái; +[㑸㗨㢊䑂䨠佁娾昹欸毐矮蔼藹躷霭靄馤]>ǎi; +[㕌㗒㘷㝶㤅㿄䀳䅬䔽䝽䬵伌僾叆嗳噯塧壒嫒嬡愛懓懝暧曖濭爱瑷璦皧瞹砨硋碍礙艾薆譪賹鑀隘靉鴱]>ài; +[侒媕安峎峖庵氨痷盦盫腌腤菴萻葊蓭誝諳谙銨铵鞌鞍馣鵪鶕鹌]>ān; +[䜙啽玵雸]>án; +[㜝㽢䁆䅖俺唵垵埯揞晻罯隌]>ǎn; +[㟁㱘㸩䅁䎏䎨䬓䮗䯥儑匎堓岸按暗案桉洝犴荌錌闇鮟黬黯]>àn; +骯>āng; +[㭿䀚䒢䩕䭹䭺卬岇昂昻]>áng; +[䍩軮雵]>ǎng; +[㦹㼜枊盎醠]>àng; +[凹柪梎軪]>āo; +[㟼㠂㿰䐿䚫䥝䦋䵅厫嗷嗸嶅廒摮敖滶熬爊獒獓璈磝翱翺聱蔜螯謷謸遨鏊鏖隞驁骜鰲鳌鷔鼇𦪈]>áo; +[㑃㤇䞝䯠䴈媪媼抝拗狕芺袄襖镺𥜌]>ǎo; +[㕭㘬㘭㜜㜩㠗㥿䁱䜒䫨䮯傲坳垇奡奥奧嫯岙嶴慠懊扷擙澳詏𩼈]>ào; +[仈八哵岜扒捌朳玐疤粑羓芭豝釟鲃]>bā; +[㔜㧊䟦䳁䳊叐坺墢妭抜拔炦犮秡胈茇菝詙跋軷鈸钹颰馛魃鼥]>bá; +[㞎把鈀钯靶]>bǎ; +[㖠㶚䃻䆉䇑䎬䎱䥯䩗䩻䰾䱝坝垻壩弝欛灞爸猈覇霸]>bà; +[叭吧巴笆罢罷]>ba; +掰>bāi; +[㼟㿟䳆白]>bái; +[㗗㼣䙓佰捭摆擺柏百矲粨絔襬]>bǎi; +[㗑㠔䒔䢙䴽庍拜拝敗稗粺蛽贁败]>bài; +[扳搬攽斑斒朌班瘢癍般虨螌褩辬頒颁]>bān; +[㩯㸞㺜䉽䬳坂岅昄板版粄舨蝂鈑钣闆阪]>bǎn; +[㚘㪵䕰伴办半姅怑拌湴瓣秚絆绊辦鉡靽]>bàn; +扮>ban; +[垹帮幇幚幫捠梆浜縍邦邫鞤]>bāng; +[㔙㮄䟺榜牓綁绑膀]>bǎng; +[㭋㯁㾦䂜䎧䖫䧛䰷傍塝棒磅稖艕蚌蜯謗谤鎊镑]>bàng; +[勹包孢笣胞苞蕔褒襃闁骲]>bāo; +[㵡㿺䈏䥤䨌䨔䪨嫑瓟窇薄雹]>báo; +[㙅㲏㻄䎂䭋䳈䳰䴐保堡堢宝宲寚寳寶怉珤緥葆褓褴賲靌飽饱駂鳵鴇鸨]>bǎo; +[㙸㫧㲒䤖儤勽報忁报抱暴曓煲爆犦菢虣袌豹趵鉋鑤铇鮑鲍鸔]>bào; +[伓卑岥庳悲揹杯桮椑盃碑禆綼萆藣錃鵯鹎]>bēi; +[㤳北鉳]>běi; +[㓈㔨㛝㣁㰆㶔㷶㸢㸬㸽㻗㼎㾱䁅䋳䔒䠙䡶䩀䰽俻倍偝偹備僃备孛悖惫愂憊昁梖焙牬犕狈狽珼琲糒紴背蓓被褙貝贝軰輩辈邶郥鄁鋇鐾钡鞴韛]>bèi; +[呗唄]>bei; +[奔泍渀犇錛锛]>bēn; +[㡷㮺夲奙本楍畚苯]>běn; +[㤓㨧㱵䬱倴坌捹撪桳笨輽逩]>bèn; +[伻嘣崩嵭祊綳閍]>bēng; +甭>béng; +[㑟䋽䙀䩬䭰䳞埲玤琫繃绷菶誁鞛]>běng; +[㱶㷯䨻塴搒槰泵蠯跰蹦迸逬鏰镚]>bèng; +[偪屄毴皀皕稫芘蓖螕豍逼颷]>bÄ«; +[㮰䨆䵄荸魮鼻]>bí; +[㚰㠲㪏㻶䃾䇷䏢䘡䠋䣥佊俾匕吡啚夶妣彼朼柀比沘滗潷疕秕笔筆粃蚍貏鄙]>bǐ; +[㓖㗉㘠㘩㙄㡀㡙㢰㢶㢸㧙㪤㮿㯇㱸㳼㵥㵨㹃㻫㿫䀣䁹䄶䊧䋔䌟䎵䏶䕗䖩䟆䟤䦘䧗䩛䪐䫁䫾䬛䭮䮡䯗佖咇哔嗶坒堛壁奰妼婢嬖币幣庇廦弊弻弼彃必怭愊愎敝斃枈柲梐楅檘毕毖毙湢滭煏熚狴獘獙珌璧畀畢疪痹痺睤睥碧筚箄-箆篦篳粊縪罼聛腷臂苾荜蓽蔽薜蜌袐裨襞襣觱詖诐貱賁贔贲赑跸蹕躃躄避邲鄨鄪鉍鎞鏎鐴铋閇閉閟闭陛鞸韠飶饆馝駜驆骳髀魓鮅鰏鲾鵖鷝鷩鼊]>bì; +[煸牑猵甂砭稨笾箯籩糄編编蝙边辺邉邊鍽鞭鯾鯿鳊]>biān; +[㦚䁵匾惼扁碥窆藊褊貶贬]>biǎn; +[㝸㣐㭓㲢㳎㳒㴜㵷㺹㻞䉸䒪䛒䡢䪻便匥卞变変弁徧忭抃揙昪汳汴玣緶缏艑苄覍變辡辧-辩辫辮辯遍釆閞鴘]>biàn; +[儦墂幖彪标標滮瀌灬熛爂猋瘭磦穮脿臕謤贆鏢鑣镖镳颩颮飆飇飍飑飙飚驫骉髟麃麅]>biāo; +[㟽㠒㯱㯹䔸婊檦表裱褾諘錶飈]>biǎo; +[㧼䞄俵覅鰾鳔]>biào; +[憋虌鱉鳖鼈龞]>biē; +[䠥䭱別别莂蟞襒蹩]>bié; +[㿜瘪癟蛂]>biě; +[㢼䉲䋢䏟彆徶]>biè; +[宾彬斌椕槟檳汃滨濒濱瀕瑸璸矉繽缤蠙豩豳賓賔邠鑌镔霦顮馪驞]>bÄ«n; +[䐔傧儐摈擯殡殯膑臏髌髕髩鬂鬓鬢]>bìn; +[仌兵冫冰掤栟梹氷絣]>bÄ«ng; +[㨀䋑䓑䴵丙偋怲抦昞昺柄炳眪禀秉稟窉苪蛃邴鉼陃鞞餅餠饼]>bǐng; +[䈂䗒並併倂傡寎并幷摒栤棅病竝鈵靐鮩]>bìng; +[剝剥哱嶓拨撥播柭波玻癶盋砵碆缽菠袚蹳鉢钵驋髉鮁鱍鲅]>bō; +[㗘㝿㟑㧳㩧㩭㪍㬍㬧㱟㴾㶿㹀䂍䊿䍨䍸䑈䒄䗚䙏䞳䟛䢌䢪䥬䪇䪬䫊䬪䭦䭯䮀䮂䯋䰊䶈亳伯侼僰勃博嚗壆嶏帛愽懪挬搏敀栢桲欂泺浡渤煿牔犻猼瓝礡礴箔簙簿糪胉脖舶艊苩葧蔔袯襏襮誖謈豰踄踣郣鉑鋍鎛鑮铂镈餑餺饽馎馞駁駮驳髆鮊鲌鵓鹁]>bó; +[箥簸蚾跛駊]>bǒ; +[㖕孹挀擘檗疈繴蘗譒]>bò; +[卜啵膊]>bo; +[峬庯晡逋餔鵏]>bÅ«; +[㙛㨐䀯䋠䒈䪁䪔卟哺捕补補鳪]>bǔ; +[㘵㚴㳍㻉㾟䊇䍌䏽䑰䝵䬏䳝䴝䴺不佈吥咘埔埗埠布怖悑捗步歨歩篰荹蔀部郶鈽钚钸餢鮬]>bù; +[嚓擦]>cā; +礤>cǎ; +[䟃䵽囃]>cà; +猜>cāi; +[㒲䴭才材溨犲纔裁財财]>cái; +[㥒䌽䐆䣋倸婇彩採棌睬綵跴踩采]>cǎi; +[䌨䰂埰寀縩菜蔡]>cài; +[傪参-叅喰湌蓡謲飡餐驂骖]>cān; +[㥇㨻㱚㺑䍼䏼䑶䗝䗞䘉䙁䝳䣟䫮䳻嬠嬱惭慙慚残殘蚕蝅蠶蠺]>cán; +[㘔㜗㦧㿊䅟䬫惨慘憯朁黪黲]>cǎn; +[㛑㣓㻮㽩䛹澯灿燦璨粲薒]>càn; +[仓仺伧倉傖凔嵢沧滄舱艙苍蒼螥鶬鸧]>cāng; +[㵴㶓藏鑶]>cáng; +[䅮䢢賶]>càng; +[撡操糙鄵]>cāo; +[㜖㯥䄚䏆䐬嘈嶆曹曺槽漕艚蓸螬褿鏪]>cáo; +[䒑愺懆艸草騲]>cǎo; +[䒃肏襙]>cào; +[㥽㨲㩍䇲䈟䊂䔴䜺侧側冊册厕厠嫧廁恻惻憡拺敇测測畟矠笧策筞筴箣粣茦萗蓛遪頙]>cè; +[嵾梫]>cēn; +[㞥㻸䃡䅾䤁䨙䯔䲋埁岑梣橬涔笒]>cén; +曽>cēng; +[㬝䁬䉕层層嶒曾碀竲鄫]>céng; +[㣒蹭]>cèng; +[偛嗏嫅扠挿插揷杈槎疀肞臿艖銟靫餷馇]>chā; +[㢉㢒㪯㫅䁟䆛䑘䕓䤩䲦䶪垞察嵖搽查査檫痄碴秅茶詧鍤锸𦉆]>chá; +[䰈蹅鑔镲]>chǎ; +[㛳㢎㣾㤞䊬䒲䓭䟕䡨侘奼姹岔差汊紁衩訍詫诧]>chà; +叉>cha; +[拆芆釵钗]>chāi; +[㑪㾹䓱侪儕喍柴祡豺]>chái; +茝>chǎi; +[㳗䘍囆瘥虿蠆袃]>chài; +[幨惉搀攙梴袩裧襜辿鋓]>chān; +[㔆㙻㢆㶣㸥㺥䂁䜛䡪䡲䣑䤫䧯僝儃劖嚵婵嬋孱巉廛棎欃毚湹潹潺澶瀍瀺煘獑磛禪緾繵纏纒缠艬蝉蟬蟾誗讒谗躔鄽酁鋋鑱镵饞馋]>chán; +[㢟㦃㯆㹌㹽䊲䐮䑎䤘䥀䩶䴼䵐丳产冁刬剗剷囅嵼幝摌旵浐滻灛燀產産簅繟蒇蕆諂譂讇谄鏟铲閳闡阐驏骣]>chǎn; +[㙴㬄㵌䀡䠨䪜䱿儳忏懴懺硟羼韂顫颤]>chàn; +[伥倀娼昌晿淐猖琩菖裮錩锠閶阊鯧鲳鼚]>chāng; +[㙊㦂䗅䠆䯴仧偿償兏嘗嚐塲嫦尝常徜瑺瓺甞肠腸膓苌萇鋿鏛镸鱨鲿]>cháng; +[㫤䕋䠀僘厂厰场場廠昶氅鋹]>chǎng; +[䩨倡唱怅悵暢焻畅畼誯韔鬯]>chàng; +敞>chang; +[弨怊抄欩罺訬超鈔钞]>chāo; +[䄻䬤䰫嘲巢巣晁朝樔潮窲謿轈鄛鼂鼌]>cháo; +[㶤㷅䎐䏚吵巐炒煼眧麨]>chǎo; +[仦仯耖觘]>chào; +[伡俥唓砗硨莗蛼車车]>chē; +[㨋㵔䋲䞣䰩偖扯撦]>chě; +[㔭㥉㬚㯙㱌㵃㾝㿭䁤䑲䒆䚢䛸䜠䧪䨁勶坼屮彻徹掣撤澈烲爡瞮硩聅轍辙迠]>chè; +[棽琛瞋諃謓賝郴]>chēn; +[㕴㫳㲀㴴㽸䆣䒞䚘䜟䟢䢅䢈䢻䣅䤟塵宸尘屒忱愖敐曟樄沈沉煁臣茞莀莐蔯薼螴訦諶谌軙辰迧鈂陈陳霃鷐麎]>chén; +[䫖墋捵硶碜磣祳贂趻踸鍖]>chěn; +[㧱䞋儬儭嚫夦榇櫬疢藽衬襯讖谶趁趂齓齔龀]>chèn; +晨>chen; +[䞓偁噌埥憆撐撑棦橕檉泟浾爯琤瞠称稱穪竀緽蛏蟶赪赬鏿阷頳饓]>chēng; +[㞼㨃㲂㼩䁎䄇䆑䆵䆸䇸䔲䗊䧕䫆䮪丞乗乘呈城埕堘塍塖娍宬峸惩憕懲成承挰掁揨晟枨棖椉橙洆浈湞澂澄瀓珵珹程窚筬絾脀脭荿虰裎誠诚郕酲鋮铖騬]>chéng; +[侱塣庱徎悜睈逞騁骋]>chěng; +[㐼䀕牚秤靗]>chèng; +[吃哧喫嗤噄媸彨彲摛欫瓻痴癡眵瞝笞絺蚩螭訵誺郗骴魑黐齝]>chÄ«; +[㓾㙜㞴㢮㮛䈕䐤䔟䙙䛂䜄䞾䪧䮈䶔䶵倁坻墀岻弛彽徥徲持歭池汦泜竾筂箈箎篪耛茌茬荎蚳謘貾赿趍踟迟遅遟遲馳驰]>chí; +[㘜㟂㢁㢋㱀㳏㶴䊼䑛䜵䜻侈叺呎垑姼尺恀恥拸搋欼歯粎耻蚇袳裭褫誃鉹齒齿]>chǐ; +[㒆㓼㔑㞿㡿㽚䇼䗖䟷䠠䤲䮻䰡䳵乿侙傺勅叱啻彳恜慗憏懘抶敕斥杘栻淔灻炽烾熾痓痸瘛眙翄翅翤觢赤趩跮踅遫鉓銐飭饎饬鶒鷘]>chì; +[充冲嘃徸忡憃憧摏沖浺珫舂茺衝蹖𢥞]>chōng; +[㓽㹐䌬䖝䳯崇崈漴痋翀虫蝩蟲褈隀]>chóng; +[埫宠寵]>chǒng; +[㧤揰銃铳𣀒]>chòng; +[婤怞抽搊犨犫瘳篘霌]>chōu; +[㐜㛶㤽㦞㨶㵞㿧䇺䊭䌧䌷䓓䛬䥒䲖仇俦儔嚋嬦帱幬惆愁懤栦椆焘燽燾畴疇皗稠筹籌紬絒綢绸菗薵裯詶讎讐踌躊酧醻雔雠]>chóu; +[䪮丑丒侴偢吜杻杽瞅矁醜魗]>chǒu; +[䔏殠簉臭臰霔]>chòu; +酬>chou; +[出初岀貙齣]>chÅ«; +[㕏㕑㡡㶆㼥䅳䎝䎤䟞䠂䠧刍厨幮廚曯橱櫉櫥滁犓篨耝耡芻蒢蒭蕏藸蜍趎蹰躇躕鉏鋤锄除雏雛鶵𦷝]>chú; +[㹼䊰䖏䙘储儲処憷杵椘楮檚濋础礎褚齭齼]>chǔ; +[㔘㗰㙇㤕㤘䙕䜴䟣䦌䧁䮞亍俶傗儊处怵拀搐敊斣斶欪歜泏滀琡畜矗竌竐臅荲處触觸豖踀遚鄐閦黜]>chù; +楚>chu; +䫄>chuà; +揣>chuāi; +[㪓膗]>chuái; +㪜>chuǎi; +[䦟䦤䦷踹]>chuài; +[巛川氚瑏穿]>chuān; +[㯌㼷䁣伝传傳圌暷椽歂舩船諯輲遄]>chuán; +[㱛僢喘堾腨舛]>chuǎn; +[串汌賗釧钏]>chuàn; +[䆫刅戧摐牎牕疮瘡窓窗窻]>chuāng; +[㡖䃥䚒䡴䭚噇幢床橦牀疒]>chuáng; +[㵂䇬摤漺闖闯]>chuǎng; +[䎫创刱剏剙創怆愴獊]>chuàng; +[吹炊]>chuÄ«; +[㓃㝽㥨㩾䄲䍋䳠倕垂埀捶搥棰槌湷箠篅腄菙錘鎚锤陲顀]>chuí; +䞼>chuǐ; +龡>chuì; +[媋旾春暙椿櫄膥萅鶞]>chÅ«n; +[㝄㝇㵮㸪䏝䐇䓐䔚䣨䣩䥎䫃唇憌浱淳湻滣純纯脣莼蒓蓴醇醕陙鯙]>chún; +[㖺㿤䄝䏛䐏䞐䦮偆惷睶箺萶蠢踳]>chǔn; +[鶉鹑]>chun; +[戳鎈齹]>chuō; +犳>chuó; +[㚟㲋䂐䃗䄪䆯䇍䋘䍳䓎䮕啜嚽娖婥惙擉歠涰珿畷磭綽繛绰腏諁趠輟辍辵辶逴酫醊鑡齪龊]>chuò; +[偨庛疵薋蠀赼趀趑髊]>cÄ«; +[㓨㘂㘹㤵䂣䆅䈘䖪䛐䧳䨏䭣䲿䳄垐嬨慈柌濨珁瓷甆磁礠祠糍茨詞词辝辞辤辭雌飺餈]>cí; +[㠿佌此泚玼皉紪跐]>cǐ; +[㞖㡹㢀㩞㹂䓧䗹䦻䯸䰍䳐伺佽刺刾朿次絘莿蚝蛓螆]>cì; +[匆囪囱忩怱悤憁暰枞棇樅樬樷漗焧燪瑽璁瞛篵緫繱聡聦聪聰苁葱蓯蔥蟌鍐鍯鏓鏦騘驄骢]>cōng; +[㼻䉘䕺䳷丛从叢婃孮従徖從悰慒淙漎潀灇爜琮誴賨賩錝]>cóng; +[欉藂謥]>còng; +㫶>cǒu; +[傶凑楱湊腠輳辏]>còu; +[粗觕麁麄麤]>cÅ«; +[䓚䢐徂殂豠]>cú; +[㗤㰗䃚䎌䙯䛤䟟䠓䠞䥄䥘䬨促噈塶憱梀槭殧猝瘄瘯簇縬脨蔟趗踧蹙蹴醋鼀]>cù; +[撺攛汆蹿躥鋑]>cuān; +[㠝㭫䆘䰖劗巑櫕]>cuán; +[㵀㸑殩熶爨窜竄篡簒鑹镩]>cuàn; +[催嗺墔崔摧榱槯獕磪竴鏙]>cuÄ«; +[凗慛]>cuí; +[㵏㷃䊫䧽漼璀皠趡]>cuǐ; +[㝮㥞㧘㯔㯜㱖㳃㷪䂱䃀䄟䆊伜倅啐啛忰悴毳淬焠琗疩瘁竁粋粹紣綷翆翠脃脆脺膬膵臎萃顇]>cuì; +[村澊皴邨]>cÅ«n; +[存拵袸]>cún; +[刌忖]>cǔn; +[䍎吋寸籿]>cùn; +[搓撮睉磋蒫蹉遳]>cuō; +[㟇㽨䠡䣜䴾嵯嵳痤矬蔖虘醝鹺鹾]>cuó; +[䂳瑳縒脞]>cuǒ; +[䐣䟶䱜剉剒厝挫措歵莝莡蓌逪銼錯锉错齚齰]>cuò; +[哒噠墶搭撘耷荅褡]>dā; +[㜓㯚㾑㿯䃮䐊䑽䩢䳴䵣匒呾妲怛溚炟畗畣笪答繨荙薘蟽褟詚达迖逹達鐽靼鞑韃]>dá; +打>dǎ; +[大眔]>dà; +[㟷瘩]>da; +[呆呔懛獃]>dāi; +[䚞䚟傣歹歺逮]>dǎi; +[㐲㞭㫹㯂㶡㻖㿃䈆䒫代叇埭岱帒带帯帶廗待怠戴柋殆汏瀻玳瑇甙簤紿緿绐艜袋襶貸贷跢蹛軚軩迨霴靆黛黱]>dài; +[丹儋勯匰单単單噡妉媅担擔殚殫甔眈砃箪簞耼耽聃聸襌躭郸鄲酖頕黕]>dān; +[㔊㕪㽎䃫䉞䮰䱋亶伔刐掸撢撣澸玬瓭疸紞胆膽衴黵]>dǎn; +[㗖㡺㫜㱽㲷㵅㺗䄷䉷䨢䨵䩥䭛䳉但僤啖啗啿噉嚪帎弹弾彈惮憚憺旦暺柦氮沊淡潬澹狚疍瘅癉癚窞腅舕萏蛋蜑觛誕诞鉭钽霮饏馾駳髧鴠]>dàn; +[儅噹嵣当澢珰璫當筜簹艡蟷裆襠]>dāng; +[䣊䣣党挡擋攩欓灙譡讜谠黨]>dǎng; +[䑗䦒凼圵垱壋婸宕愓档檔氹潒璗瓽盪瞊砀碭礑簜荡菪蕩蘯趤逿闣雼]>dàng; +[鐺铛]>dang; +[刀刂幍忉朷氘舠釖魛鱽]>dāo; +[㠀㿒䆃䌦䲽壔导導岛島嶋嶌嶹捣捯搗擣祷禂禱蹈隝隯]>dǎo; +[䧂倒到噵悼檤瓙盗盜稲稻纛翿菿衜衟軇道]>dào; +[㝵㤫㥀㥁㯖䙷䙸嘚徳德恴惪淂鍀锝]>dé; +[地得的]>de; +[噔嬁灯燈璒登竳簦覴豋蹬鐙镫]>dēng; +[䒭戥朩等]>děng; +[䠬䮴僜凳墱嶝櫈瞪磴邓鄧隥霯]>dèng; +[仾低堤墑滴眡磾羝菂袛趆鍉鞮]>dÄ«; +[㣙㰅㹍䊮䨀䨤䮤䯼䴞䵠仢唙啇嘀嚁嫡廸敌敵梑涤滌潪狄笛篴籴糴翟荻蔋蔐藡覿觌豴蹢迪鏑镝靮頔鸐]>dí; +[㡳㪆㭽䂡䍕䢑䣌䱃呧坘埞底弤抵拞掋柢氐牴砥聜苖茋菧觝詆诋軧邸阺骶]>dǐ; +[㢩㦅㼵䀸䀿䏑䑭䑯䞶䟡䧝䩘䩚䱱䶍偙僀哋啲坔埊墆墬奃娣嶳帝弟怟慸摕旳杕梊棣楴樀渧焍玓甋睇碲祶禘第締缔肑腣蒂蔕虳蝃螮諦谛踶軑轪递逓遞遰釱鉪馰]>dì; +嗲>diǎ; +[傎厧嵮巅巓巔掂攧敁槇槙滇甸瘨癫癲蹎顚顛颠齻]>diān; +䟍>dián; +[㚲㸃䍄䓦典嚸奌婰敟点琠痶碘蕇踮點]>diǎn; +[㓠㝪㞟㥆㵤㶘㼭䧃佃坫垫墊壂奠婝店惦扂橂殿淀澱玷琔电痁癜磹簟蜔鈿钿阽電靛]>diàn; +[凋刁叼奝彫扚殦汈琱瞗碉虭蛁貂雕鮉鯛鲷鳭鵰鼦]>diāo; +[㹿䉆屌釕钌]>diǎo; +[㒛㪕䂪䂽䔙䠼䵲伄吊弔掉瘹窎窵竨莜蓧藋訋調调釣銱鋽鑃钓铞魡]>diào; +[爹跌]>diē; +[㑙㥈㦶㩸㩹㫼㬪㭯㲲㲳㷸㻡䏲䘭䞇䞕䠟䪥䮢䲀䳀䴑叠喋垤堞峌嵽恎戜挕昳曡氎牃牒瓞畳疉疊眣眰碟絰绖聑胅臷艓苵蜨蝶褋褺詄諜谍趃跕蹀迭镻鰈鲽]>dié; +[惵耊耋]>diè; +[丁仃叮奵帄庰玎疔盯釘钉靪]>dÄ«ng; +婈>díng; +[㫀㴿㼗嵿檙濎薡酊鐤頂顶鼎鼑]>dǐng; +[㝎啶娗定忊椗矴碇碠磸腚訂订錠锭顁飣饤]>dìng; +[丟丢乣銩铥]>diÅ«; +[东倲冬咚埬娻岽崠崬昸東氡氭涷笗苳菄蝀鯟鶇鸫鼕]>dōng; +[㖦㨂䂢䵔墥嬞懂箽董]>dǒng; +[㑈㓊㗢㜱㢥㼯䅍䍶䞒働冻凍动動垌戙挏栋棟洞眮胨胴腖霘駧]>dòng; +[兜兠吺唗橷篼蔸郖都]>dōu; +[㞳㪷䕱唞抖敨枓枡蚪阧陡]>dǒu; +[㛒㢄㷆䄈䕆䛠䬦斗梪毭浢痘窦竇脰荳豆逗鋀閗闘餖饾鬥鬦鬪鬬鬭]>dòu; +[厾嘟督醏闍阇都]>dÅ«; +[㱩㸿㾄䓯䙱䢱䪅䫳䮷儥凟匵嬻椟櫝殰毒涜渎瀆牍牘犊犢独獨瓄皾碡蝳読讀讟读豄贕鑟韇韣韥騳髑黩黷]>dú; +[䀾䈞䐗堵帾暏琽睹笃篤裻覩賭赌錖]>dǔ; +[䄍䅊䟻䲧喥妒妬度杜殬渡秺簬簵肚荰螙蠧蠹鍍镀靯]>dù; +[偳剬媏端褍鍴]>duān; +短>duǎn; +[㫁㱭䠪塅断斷椴段毈煅瑖碫簖籪緞缎腶葮躖鍛锻]>duàn; +[垖堆塠嵟痽磓頧]>duÄ«; +陮>duǐ; +[㙂㟋㠚㬣㳔㵽䇏䇤䔪䨴䨺䬈䬽䯟兊兌兑对対對怼憝憞懟濧瀩碓祋綐薱譈轛鐓鐜镦队隊]>duì; +[吨噸墩-墫弴惇撉撴敦犜礅蜳蹲蹾驐]>dÅ«n; +[趸躉𣎴]>dǔn; +[㬿䤜伅囤崸庉扽沌潡燉盹盾砘踲逇遁遯鈍钝頓顿鶨]>dùn; +[剟咄哆嚉多夛崜]>duō; +[㣞䐾凙剫夺奪悳掇敓敚敠敪椯毲痥莌裰襗踱鈬鐸铎鮵]>duó; +[㔍㖼㙐㛆㛊㥩㻔䒳䙤䠤䤪䩣䫂䯬亸哚嚲垛垜埵奲憜挅挆朶痑綞缍趓躱躲鍺锗鬌]>duǒ; +[㧷㻧䅜䍴䑨䙃䙟䤻䩔刴剁堕墮墯尮嶞惰柁柮桗炧炨舵跥跺陊陏飿饳]>duò; +朵>duo; +[妸妿娿婀婐屙峉痾鈳钶]>ē; +[㼂㼰䄉䕏䖸䩹䱮䳗䳘俄吪娥峨峩枙涐珴皒睋硪磀莪蛾訛誐譌讹迗鈋隲頟額额騀魤鵝鵞鹅]>é; +[㼢噁]>ě; +[㓵㔩㕎㖾㗁㟧㠋㡋㦍㧖㩵㮙㱦㷈䆓䑥䑪䓊䔾䙳䛖䝈䞩䣞䫷䳬偔僫卾厄呃呝咢咹噩圔垩堊堨堮岋崿嶭恶悪惡愕戹扼掠搤搹櫮湂琧略砐硆胺腭苊萼蕚蚅蝁覨詻諤讍谔豟貖軛軶轭遌遏鄂鍔鑩锷閼阏阨阸頞顎颚餓餩饿魥鰐鱷鳄鶚鹗齶]>è; +[誒诶]>éi; +[奀恩煾蒽]>ēn; +䅰>ěn; +[䊐䬶䭓䭡摁]>èn; +[㖇㜨㧫㮕䋩䎟䎠䮘侕児唲栭檽洏而耏聏胹荋袻輀轜陑隭髵鮞鲕鴯鸸]>ér; +[㚷㢽䋙䌺尒-尔峏栮洱爾珥耳薾迩邇餌饵駬]>ěr; +[㒃㛅䎶䏪䣵二佴刵咡弍弐樲毦眲衈誀貮貳贰鉺铒]>èr; +[傠发彂橃沷発發瞂]>fā; +[㕹㘺䇅䣹乏伐垡姂栰疺砝筏罚罰罸茷藅閥阀]>fá; +[䂲佱法灋髮]>fǎ; +[㛲䒥珐琺蕟髪]>fà; +[僠噃嬏帆幡旙旛杋番笲籓繙翻轓飜鱕]>fān; +[㠶㸋㺕䀀䀟䉒䊩䋣䋦䌓䡊䪛䪤䫶䭵䮳凡-凣勫墦忛憣柉棥樊橎瀪瀿烦煩燔璠矾礬籵緐繁羳膰舧蕃薠藩蘩蠜襎蹯釩鐇钒颿鷭]>fán; +[䒠䛀反瓪軡返魬]>fǎn; +[㕨㝃㤆㴀㶗㼝㽹䉊䐪䒦䣲奿嬎梵氾汎泛滼犯畈盕笵範范訉販贩軓軬鄤飯飰饭飯]>fàn; +[匚方枋汸淓牥芳蚄邡鈁钫鴋]>fāng; +[㤃埅妨房肪防魴鰟鲂鳑]>fáng; +[㑂㕫㧍㯐䢍䦈䲱仿倣旊昉昘瓬眆紡纺舫訪访髣鶭]>fǎng; +[放趽]>fàng; +坊>fang; +[啡妃婓扉渄猆緋绯菲蜚裶霏非靟飛飝飞馡騑騛鯡鲱]>fēi; +[䈈淝肥腓萉蜰]>féi; +[㥱䕁䨽䨾匪奜悱斐朏棐榧篚翡蕜誹诽餥]>fěi; +[㔗㩌㭭㵒䆏䉬䑔䕠䚨䛍䠊䤵䰁俷剕厞吠屝废廃廢昲曊杮櫠沸濷狒疿痱癈砩肺胇芾蟦費费鐨镄靅鼣]>fèi; +[兝分吩岎帉昐朆氛燓砏紛纷翂芬衯訜酚鈖隫雰餴饙鳻𦐈]>fēn; +[㷊㸮䩿䯨䴅坆坟墳妢幩弅枌梤棻棼橨汾濆炃焚燌獖玢秎羒肦蒶蕡蚠蚡豮豶轒鐼馚馩魵黂鼖鼢]>fén; +[㥹粉羵黺]>fěn; +[㖹㮥㿎份偾僨坋奋奮忿愤憤瀵粪糞膹鱝鲼]>fèn; +[丰仹偑僼凨凬凮堼夆妦寷封峯峰崶捀枫桻楓檒沣灃烽熢犎猦疯瘋盽砜碸篈莑葑蘴蜂蠭豐鄷酆鋒鏠锋靊風飌风麷]>fēng; +[㦀㵯䏎䙜䩼冯堸摓沨浲渢漨綘艂逢馮]>féng; +[䟪唪覂諷讽]>fěng; +[㡝俸凤奉湗焨煈甮縫缝賵赗鳯鳳鴌]>fèng; +[仏坲]>fó; +[䳕剻哹紑裦]>fóu; +[否殕缶缹缻芣雬鴀]>fǒu; +[椱竎]>fòu; +[伕呋妋姇孵尃怤懯敷旉枹柎泭玞砆稃筟糐綒罦肤膚荴衭豧趺跗邞鄜鈇鳺麩麬麱麸]>fÅ«; +[㚕㜑㟊㠅㤔㪄㫙䃽䋹䌿䍖䑧䒀䔰䕎䘠䞞䟮䡍䨗䪙䵗䵾乀伏佛俘冹凫刜匐咈嚩垘孚岪巿帗幅幞弗彿怫払扶拂服枎柫栿桴棴氟洑浮涪澓炥烰玸琈甶畉畐癁祓福符笰箙粰紱紼絥綍绂绋罘翇艀艴芙苻茀茯莩菔葍虙蚨蜉蝠諨踾輻辐郛鉘鉜韍韨颫髴鮄鳧鳬鴔鵩鶝福]>fú; +[㓡㕮䋨䌗䓛䗄䩉䫍䫝䯽乶俌俛俯呒嘸府弣抚拊捬撫斧暊滏焤盙秿簠腐腑莆蚥蜅輔辅郙釜釡頫鬴鯆黼]>fǔ; +[㙏㚆㤱㬼㳇㵗㽬㾈䂤䎅䒇䘀䘄䝾䞜䞯䞸䟔䠵䦣䧞䨱䭸䮛䯱付偩冨副圑坿复妇婏婦媍嬔富峊復榑父祔稪紨緮縛缚胕腹萯蕧蚹蛗蝜蝮袝複褔覆訃詂讣負賦賻负赋赙赴輹鍑鍢阜阝附陚馥駙驸鮒鰒鲋鳆黻𦱖]>fù; +[傅咐夫甫袱]>fu; +[嘎嘠]>gā; +[尜錷]>gá; +[尕玍𠁥]>gǎ; +å°¬>gà; +[侅垓姟峐晐畡祴胲荄該该豥賅赅郂陔隑]>gāi; +[䪱忋改絠]>gǎi; +[㕢㧉㮣䏗丐乢匃匄戤摡概槩槪溉漑瓂盖葢蓋賌鈣钙𩕭]>gài; +[乹乾亁凲坩尲尴尶尷嵅忓攼杆柑泔玕甘疳矸竿筸粓肝芉苷虷蜬迀鳱]>gān; +ä» >gán; +[㺂䃭䇞䔈䤗䵟感擀敢桿橄澉灨皯盰秆稈衦贑赶趕鱤鳡]>gǎn; +[䯎䲺倝凎干幹旰榦檊汵涻淦簳紺绀詌贛赣骭]>gàn; +[冈冮刚剛堈堽岡掆杠棡牨犅碙笐綱纲缸罁罓罡肛舡鋼鎠钢]>gāng; +[㟠㟵㽘䴚岗崗港]>gǎng; +[戅-戇槓焵筻]>gàng; +[槔槹橰櫜滜皋皐睾篙糕羔羙膏臯餻高髙鷎鼛𦤎]>gāo; +[㚏㚖㾸䗣夰搞暠杲槁檺稾稿筶縞缟菒藁藳]>gǎo; +[叝吿告煰祮祰禞誥诰郜鋯锆鯌]>gào; +[割咯哥圪戈戓戨搁擱歌渮滒牁牫牱疙肐胳謌鎶鴚鴿鸽麧𪃿]>gē; +[㗆㝓㠷㦴㨰㪾㵧㷴䆟䈓䐙䕻䗘䘁䛋䛿䢔䨣䩐䪂䪺䫦佮匌呄嗝噶塥愅挌搿敋格槅獦膈臵茖蛒裓觡諽輵轕郃鎘镉閣閤阁阖隔革鞷韐韚骼鮯鰪齃]>gé; +[哿擖笴舸葛]>gě; +[䧄个個各嗰箇虼鉻铬]>gè; +[給给]>gěi; +[刯剆根跟]>gēn; +哏>gén; +䫀>gěn; +[㫔㮓亘亙艮茛]>gèn; +[庚揯搄浭畊秔稉粳絙絚緪縆羮羹耕菮賡赓鶊鹒]>gēng; +[㾘䋁䌄哽埂峺挭梗綆绠耿莄郠骾鯁鲠]>gěng; +[䱍䱎䱭䱴堩更]>gèng; +[供公功匑厷塨宫宮工幊弓恭愩攻杛玜疘碽篢糼肱觥觵躬躳釭魟龏龔龚]>gōng; +[㤨㧬㫒㭟㺬㼦䂬䡗巩拱拲栱汞珙穬蛬銾鋛鞏]>gǒng; +[㓋㔶㯯䇨䢚共廾羾貢贡]>gòng; +蚣>gong; +[勾沟溝篝緱缑耩芶褠鈎鉤钩鞲韝]>gōu; +[㺃岣枸狗玽笱耇-耉苟茩蚼豿]>gǒu; +[㗕㜌㝅㝤㨌㳶䃓䝭䞀傋冓坸垢够夠姤媾彀搆撀构構煹覯觏訽詬诟購购遘雊骺]>gòu; +[估呱夃姑嫴孤柧橭沽泒痼笟箍箛罛苽菰蛄觚軱辜酤鈲鮕鴣鸪]>gÅ«; +[䜼䮩鶻鹘]>gú; +[㒴㚉㯏㼋㾶䀇䀜䀦䀰䅽䊺䍍䐨䡩䵻古唂唃嘏尳愲扢杚榖毂淈濲瀔焸牯狜皷皼盬瞽穀糓縎罟羖股脵臌蓇薣蛊蛌蠱詁诂谷轂鈷钴餶馉骨鼓鼔]>gǔ; +[㧽㽽䍛䓢䶜僱凅固堌崓崮怘故梏棝榾牿祻稒錮锢雇頋顧顾鯝鲴鶮]>gù; +[咕菇]>gu; +[刮劀懖栝桰煱瓜瘑筈緺聒胍脶腡葀趏踻銽頢颳騧鴰鸹]>guā; +[㒷䈑冎剐剮叧寡]>guǎ; +[卦啩坬挂掛絓罣罫褂詿诖髺]>guà; +乖>guāi; +[拐枴柺箉]>guǎi; +[㧔㷇㽇䂯䊽叏夬怪恠旝癐]>guài; +[倌关冠官棺瘝癏蒄覌観觀观関闗關鱞]>guān; +[䏓䗆䘾䦎䩪䪀䲘琯痯筦管脘舘輨錧館馆鳤館]>guǎn; +[㮡㴦䌯䎚䗰䙛䙮䝺丱悹悺惯慣掼摜樌毌泴涫潅灌爟瓘盥矔礶祼罆罐謴貫贯遦鏆鑵雚鱹鸛鹳]>guàn; +[侊僙光咣垙姯洸灮炗炛烡珖胱茪輄銧黆]>guāng; +[广広廣犷獷]>guǎng; +[㫛桄櫎臦臩逛]>guàng; +[亀傀圭妫媯嫢嬀帰归摫椝槻槼歸溈珪瑰璝瓌皈硅窐膭袿規规邽郌閨闺鬶鬹鮭鲑龜龟]>guÄ«; +潙>guí; +[㔳㧪㨳㩻㲹㸵䁛䍯䞈䞨䣀䤥佹匦匭厬垝姽宄庋庪恑攱晷氿癸祪簋蛫蟡觤詭诡軌轨陒鬼]>guǐ; +[㙺㪈䇈䌆䍷䐴䖯䙆䝿䠩䯣䰎䳏刽刿劊劌匮匱嶡巜攰昋暩柜桂櫃溎炔筀蓕襘貴贵跪鞼鱥]>guì; +裩>gÅ«n; +[㙥㫎㯻䃂䎾䜇丨掍滚滾磙緄绲蓘蔉衮袞袬輥辊鮌鯀鲧]>gǔn; +[䵪棍璭睴]>gùn; +[埚堝墎崞濄蝈蟈郭鈛鍋锅]>guō; +[㕵㖪㚍㶁䂸䆐䐸䤋䬎囯囶囻国圀國帼幗慖掴摑漍簂聝腘膕虢馘]>guó; +[㞅䙨䴹惈果椁槨淉猓粿綶菓蜾裹輠鐹餜馃]>guǒ; +[㳀腂过過]>guò; +[啯嘓]>guo; +[哈𠀀]>hā; +蛤>há; +[咍咳嗨]>hāi; +[㜾㨟䠽䯐䱺孩还還頦颏骸]>hái; +[海烸酼醢]>hǎi; +[㤥㦟㧡㺔䇋亥嗐害氦餀饚駭骇𠀅𥩲]>hài; +[唅嫨憨炶甝蚶谽酣頇顸馠魽鼾]>hān; +[㖤㙈㙔㟏㟔㮀㶰㼨䈄䗙䤴䥁䨡䮧䶃佄函凾含圅娢寒崡晗梒涵焓琀筨肣邗邯鋡韓韩]>hán; +[㘎㘕㘚㙳㵎㸁㺖㽉䍐䍑䓍䓿䛞厈喊浫罕蔊豃鬫]>hǎn; +[㑵㒈㜦㢨㨔㪋㲦㵄㽳䁔䌍䎯䏷䐄䕿䖔䘶䧲䫲傼哻垾娨屽悍憾扞捍撼攌旱晘晥暵汉汗浛涆淊漢澏瀚焊熯猂皔睅翰莟菡蛿蜭螒譀豻貋釬銲鋎閈闬雗頷顄颌颔馯駻鶾]>hàn; +夯>hāng; +[㤚䀪䘕䲳斻杭桁沆肮航苀蚢貥迒頏颃魧]>háng; +[汻酐]>hǎng; +[䟘䣈䦳䴂]>hàng; +[侾嚆蒿薅]>hāo; +[㕺㠙㩝㬔䝥䧫儫勂嗥嘷噑嚎壕椃毫濠獆獋獔籇蠔諕譹豪]>háo; +[好恏郝]>hǎo; +[㘪㙱㚪㝀㞻㬶㵆䒵䚽䝞䧚䪽䬉䯫傐号哠峼悎昊昦晧暤暭曍浩淏滈澔瀥灏灝皓皜皞皡皥秏耗聕薃號鄗鎬镐顥颢鰝]>hào; +[喝嗬峆抲訶诃]>hē; +[㓭㔠㕡㥺㪉㭘㭱㮝㮫㹇㿣䃒䅂䒩䕣䞦䢗䫘䳚䶅何劾厒合咊和哬啝姀廅惒敆曷柇核楁毼河涸滆澕熆狢盇盉盍盒礉禾秴篕紇纥翮耠荷菏萂蒚蚵蝎螛覈訸詥貈貉釛鉌閡闔阂鞨頜餲魺鲄鶡鹖齕龁龢]>hé; +[㕰㦦㬞㵑㷎㷤䎋䓼䚂䪚䳽䴳䵱佫俰嗃壑暍焃煂熇爀癋皬碋翯蠚袔褐賀贺赫隺靎靏鶴鸖鹤鶴]>hè; +[嘿潶黑黒]>hēi; +[㯊拫痕鞎]>hén; +[䓳佷很狠詪]>hěn; +恨>hèn; +[亨哼悙脝諻]>hēng; +[㔰㶇䄓䒛䬖䬝䯒姮恆恒揘楻横橫珩蘅衡誙鐄鑅韹鴴鸻黉黌]>héng; +[啈撔澋絎绗]>hèng; +[叿呍哄揈渹烘焢薨訇谾軣輷轟轰鍧顭鬨]>hōng; +[㖓㢬䂫䃔䆖䉺䍔䜫䞑䡌䡏䧆䨎䩑䪦䫹䫺䲨仜吰垬妅娂宏宖峵嵤弘彋汯泓洪浤渱潂灴玒硔硡竑竤篊粠紅紘紭綋红纮翃翝耾舼苰荭葒葓虹訌讧谹谼鈜鉷鋐閎闳霟鞃鴻鸿]>hóng; +[㬴䀧唝嗊晎]>hǒng; +[㶹澒蕻鍙閧]>hòng; +[㗋㤧㬋㮢㺅䂉䗔䙈䫛䳧侯喉帿猴瘊睺矦篌糇翭葔銗鍭餱鯸齁]>hóu; +[㖃㸸吼犼]>hǒu; +[㕈㫗䞧䪷厚后垕堠後洉缿豞逅郈鄇鮜鱟鲎鲘]>hòu; +候>hou; +[匢匫呼唿啒嘑垀寣峘幠忽惚昒曶欻歑泘滹烀烼苸虍虖軤轷雐]>hÅ«; +[㗅㪶㯛㹱㾰㿥䁫䈸䉉䉿䊀䎁䔯䚛䞱䠒䧼䩴䭅䭌䭍䮸喖嘝囫壶壷壺媩弧抇搰斛楜槲湖瀫焀煳狐猢瑚瓳箶絗縠胡葫蔛蝴螜衚觳醐鍸頶餬鬍魱鰗鵠鶘鶦鹄鹕]>hú; +[䗂乕浒滸琥萀虎虝]>hǔ; +[㕆㦿㨭㸦㺉䇘䍓䕶䛎䨥䨼䪝䲵互冱冴嚛婟嫭嫮岵帍弖怙戶-戸戽扈护摢擭昈枑楛槴沍沪滬熩瓠祜笏簄綔蔰謼護鄠頀鳸]>hù; +[乎唬糊]>hu; +[哗嘩花芲錵鷨𢄶]>huā; +[㕲㟆㠏㦊㭉㮯䅿䏦䔢䱻䶤华嬅崋滑狯猾磆華蕐螖譁釫鏵铧驊骅]>huá; +蘳>huǎ; +[㓰㕦㕷㚌㠢㦎㩇䛡䠉划劃化婳嫿摦杹桦槬樺澅画畫畵繣舙觟話諣譮话]>huà; +竵>huāi; +[㜳䃶䈭䴜佪徊怀懐懷槐櫰淮瀤耲褢褱踝]>huái; +[咶坏壊壞孬蘹蘾諙]>huài; +[嚾懽歓犿獾讙貛酄驩鴅鵍]>huān; +[㡲㦥㵹㶎㿪䍺䝠䥧䦡䭴䮝䴟嬛寏寰懁捖桓梡洹澴狟环環瓛糫繯缳羦肒荁萈萑豲貆鍰鐶锾镮闤阛雈鬟]>huán; +[㣪㬊䈠唍嵈睆緩缓藧輐]>huǎn; +[㓉㕕㪱㬇㹖㼫䀓䀨䆠䯘唤喚喛垸奂奐宦幻患愌换換擐梙槵涣渙漶烉焕煥瑍痪瘓豢轘逭鰀]>huàn; +[欢歡]>huan; +[嚝塃巟慌朚肓荒衁]>huāng; +[㞷㾠㾮䅣䊗䊣䍿䐵䑟䞹䪄䮲䳨偟兤凰喤堭墴媓崲徨惶撗湟潢煌熿獚瑝璜癀皇磺穔篁簧艎葟蝗蟥趪遑鍠锽隍餭騜鰉鱑鳇鷬黃黄𪏙]>huáng; +[㤺㬻䁜䌙䐠宺幌怳恍愰晄榥滉炾熀皝詤謊谎鎤𣄙]>huǎng; +[㨪曂皩軦]>huàng; +晃>huang; +[咴噅噕婎幑徽恢悝拻挥揮撝晖暉洃瀈灰烣煇禈翚翬袆褘詼诙豗輝辉隓隳顪鰴麾]>huÄ«; +[囘回囬廻廽恛洄痐茴蚘蛔蛕蜖迴逥鮰]>huí; +[㩓㷐䃣䏨䛼悔檓毀毁毇烠燬芔虺蝰譭𠧩]>huǐ; +[㑰㑹㒑㜇㞧㤬㥣㨤㨹㩨㬩㰥㱱㷄㻅䂕䅏䇻䌇䕇䙌䙡䛛䜋䤧䧥䩈䫭会僡儶匯卉喙嘒噧嚖圚嬇寭廆彗彙彚恚恵惠慧憓晦暳會槥橞櫘殨汇泋湏滙潓濊烩燴獩璯瞺秽穢篲絵繐繢繪绘缋翙翽荟蔧蕙薈藱螝蟪詯誨諱譓譿讳诲賄贿鏸鐬闠阓靧韢頮颒餯饖]>huì; +[婚惛惽昏昬棔殙涽睧睯荤葷閽阍]>hÅ«n; +[㑮㨡䛰䫟䰟䴷堚忶棞楎浑渾珲琿繉轋顐餛餫馄魂鼲]>hún; +[睔鯶]>hǔn; +[㥵䅙䅱䚠䧰俒倱圂慁混溷焝觨諢诨]>hùn; +[劐豁鍃锪]>huō; +[䄆䄑䣶䯏佸活秮秳萿鈥钬]>huó; +[伙夥火邩]>huǒ; +[㗲㘞㦜㦯㨯㯉㸌䁨䂄䄀䉟䋭䦚䰥剨咟嗀嚄嚯嚿奯彟彠惑或捇掝攉旤曤楇檴沎湱濩瀖獲瓁癨眓矆矐矱砉礊祸禍穫耯臒臛艧获蓃藿蠖謋讗貨货鑊镬閄雘霍霩靃韄騞鱯鳠鸌鹱嗀]>huò; +硧>iǒng; +[䤠丌乩僟击刉刏剞勣叽咭唧喞嗘嘰圾基墼姫姬尐屐峜嵆嵇擊朞机枅樍機櫅毄激犄玑璣畸畿矶磯禨积稘稽積笄筓箕簊績绩羁羇羈耭聻肌虀虮蛣襀覉覊觭諅譏譤讥賫賷赍跡跻蹟躋躸迹銈鐖鑇鑙隮雞鞿韲飢饑饥鰿鳮鶏鷄鸡麡齎齏齑𠼻]>jÄ«; +[㔕㖢㗊㗱㘍㙫㞃㠍㠎㡇㡮㤂㥛㧀㭲㮟㮨㱞㲺㴕㻷㽺㾊䁒䐕䐚䚐䞘䟌䣢䩯䯂䲯䳭亟亼伋佶偮卙即卽及吉堲塉姞嫉岌嵴嶯庴彶忣急愱戢揤撃擮极棘楫極槉橶檝殛汲湒漃潗濈焏狤疾瘠皍礏禝笈箿籍級级耤脊膌芨莋蒺蓻蕀蕺蝍螏襋觙踖蹐轚郆鈒銡鍓鏶钑集雦雧霵鞊鴶鶺鸄鹡]>jí; +[㚡㞆㞛㞦㦸㨈㴉䍤䢳䤒丮几妀己幾戟挤掎撠擠泲犱玘穖蟣踦鈘魕魢鱾麂]>jǐ; +[㑧㒫㙨㠖㠱㡭㡶㥍㭰㰟㲅㳵㸄㹄㻑㾒㾵䋟䐀䒁䓫䓽䗁䜞䝸䠏䢋䦇䨖䮺䰏䶓䶩伎兾冀剂剤劑哜嚌坖垍塈妓季寂寄彐彑忌悸惎懻技旡-旣暨曁梞檕檵洎济済漈濟瀱猤璾痵瘈癠瞡祭稩稷穄穊穧紀継繼纪继罽臮芰茍茤葪蓟蔇薊蘎蘮蘻裚褀覬觊計記誋计记跽际際霁霽驥骥髻鬾魝鮆鯚鯽鰶鱀鱭鲚鲫鵋齌𡜱]>jì; +[輯辑]>ji; +[乫伽佳傢加嘉夹夾家幏拁枷毠泇犌猳珈痂笳耞腵茄葭袈豭貑跏迦鉫鎵镓鴐麚]>jiā; +[㪴㮖㼪㿓䀫䀹䕛䛟䩡唊圿埉恝戛戞扴梜浃浹硈舺荚莢蛱蛺袷裌跲郏郟鉿鋏铗铪鞂鞈頬頰颊餄饸鵊]>jiá; +[㕅䑝仮假叚婽岬徦斚斝椵榎槚檟玾甲瘕胛賈贾鉀钾]>jiǎ; +[䁍价価價嫁架榢駕驾]>jià; +稼>jia; +[偂兼冿囏坚堅奸姦姧尖惤戋戔揃搛椷樫櫼歼殲湔瀐瀸煎熞熸牋犍猏玪监監睷碊礛笺箋篯籛緘縑缄缣肩艰艱菅菺葌蒹蕑蕳虃豜豣鑯間间靬鞬鞯韀韉顅餰馢騝鬋魐鰜鰹鲣鳒鳽鵳鶼鹣麉]>jiān; +[㔓㨵㳨㶕䄯䅐䉍䛳䟰䩆䭠䮿䯛䯡䵡䵤䶠俭倹儉减剪囝堿寋弿戩戬拣挸捡揀撿暕柬检検檢減湕瀽瑐睑瞼硷碱笕筧简簡絸繭翦茧藆蠒裥襇襺謇謭譾谫趼蹇鐗鐧锏鰔鹸鹻鹼]>jiǎn; +[㓺㔋㣤㦗㨴㯺㰄㺝䇟䟅䤔䥜䧖䬻䭈䭕䵖䵛件侟俴俿健僣僭剑剣剱劍劎劒劔建徤擶旔枧栫梘楗榗毽洊涧渐溅漸澗濺瀳牮珔磵箭糋繝腱臶舰艦荐蔪薦螹襉見覵覸见諌諓諫譼谏賎賤贱趝践踐踺釼鉴鋻鍳鍵鏩鑑鑒鑬鑳键餞饯鰎]>jiàn; +[僵壃姜将將摪橿殭江浆漿瓨畕畺疅疆礓繮缰翞茳葁薑螀螿豇韁鱂鳉𤕭]>jiāng; +[㢡㯍䁰䉃䋌䒂䙹奖奨奬桨槳滰獎膙蒋蔣襁講讲顜]>jiǎng; +[䞪匞夅嵹弜弶摾洚犟糡糨絳绛蔃袶謽酱醤醬降𢘸]>jiàng; +匠>jiang; +[䴔交僬嘄姣娇嬌峧嶕憍憿椒浇澆焦燋礁穚胶膠膲芁茭茮蕉蛟蟂蟭詨跤郊鐎驕骄鱎鴵鵁鷍鷦鷮鹪𨺹]>jiāo; +嫶>jiáo; +[㩰㭂㳅㽱㽲䀊䁶䘨䚩䠛䥞䴛佼侥僥儌剿劋勦孂徺挢捁搅摷撟撹攪敽敿晈暞曒湬漅灚烄煍狡璬皎皦矫矯筊絞繳绞缴脚腳臫虠蟜角譑賋踋鉸铰餃饺鮫鲛]>jiǎo; +[㠐㬭㰾䂃䆗䣤䪒叫呌嘂嘦噍噭嬓峤嶠徼挍敎教敫斠滘漖潐珓皭窌窖訆譥較轎轿较酵醮醶釂]>jiào; +[喈嗟堦巀接掲揭擑椄湝瑎皆秸稭腉菨薢蝔街謯阶階鶛]>jiē; +[㓗㓤㔾㘶㛃㝌㞯㦢㨗㨩㮞㮮㸅䀷䂒䂝䂶䅥䌖䕙䗻䣠䥛䲙倢偈偼傑刦刧刼劫劼卩卪喼婕孑岊崨嵥幯截拮捷搩擳昅杰栉栨桀楬楶榤櫛櫭洁滐潔瀄犵疖癤睫碣竭節結结羯脻节莭葜蓵蜐蠘蠞蠽衱袺訐詰誱讦诘趌踕迼鉣鍻鐑頡颉騔鮚鲒]>jié; +[媎檞解觧飷]>jiě; +[㑘㝏㠹㾏㿍䁓䇒䔿䛺䯰䰺䱄䲸丯介借吤唶堺屆届岕庎徣悈戒楐犗玠琾界畍疥砎紒繲艥芥藉蚧褯誡诫躤鎅魀魪𡽱]>jiè; +姐>jie; +[今埐嶜巾惍斤津珒瑧矜祲筋紟荕菳衿襟觔金钅鹶黅]>jÄ«n; +[㝻㬐㯸㹏䐶䒺䤐䥆䭙仅侭僅儘卺堇尽巹慬槿殣漌瑾盡紧緊菫覲觐謹谨錦锦饉馑]>jǐn; +[㨷㬜㯲㰹㱈㴆㶦㶳䀆䆮䋮䌝䑤䖐䗯䝲䫴䶖伒僸凚劤劲勁噤嚍墐妗嫤嬧搢晉晋暜枃歏浕浸溍濅濜烬燼琎瑨璡璶瘽禁縉缙肵荩蓳藎賮贐赆近进進靳齽]>jìn; +[䴖京亰兢坕坙婛巠惊旌旍晶泾涇猄箐精経經经聙腈茎荆荊莖菁葏驚鯨鲸鵛鶁鶄麖麠黥鼱精]>jÄ«ng; +[㘫䜘丼井儆刭剄宑憬憼景暻汬烃烴燛璟璥穽肼蟼警阱頚頸颈]>jǐng; +[㕋㢣㣏㬌㵾㹵䔔䡖䵞俓倞傹净凈境妌婙婧弪弳径徑擏敬曔桱梷浄淨濪瀞獍痉痙竞竟竧竫競竸胫脛葝誩踁迳逕鏡镜靓靖静靚靜靖]>jìng; +睛>jing; +[冂冋坰垧埛扃蘏蘔駉駫]>jiōng; +[㓏㖥㢠㤯㷗㷡䌹䐃䢛侰僒冏囧幜泂炅炯烱煚煛熲皛窘絅綗褧迥逈顈颎]>jiǒng; +[㑋澃]>jiòng; +[丩勼啾揂揪揫朻樛湫牞究糺糾纠萛觓轇醔阄鬏鬮鳩鸠]>jiÅ«; +㺵>jiú; +[㡱久乆九奺灸玖紤舏赳酒镹韭韮]>jiǔ; +[㠇㧕㩆㲃㶭㺩䅢䆒䊆䊘䓘䛮䡂䳎䳔僦匓匛匶厩咎媨就廄廏廐慦捄救旧柩柾桕疚臼舅舊鯦鷲鹫麔齨]>jiù; +[㞐凥刟娵居岨崌抅拘椐檋沮涺狙琚疽眗罝腒艍苴菹葅蜛裾趄跔踙陱雎鞠駒驹鮈鴡鶋]>jÅ«; +[㘲㥌㩴㮂㽤䋰䏱䕮䗇䜯䡞䤎䪕䰬䱡䴗侷匊婅局巈挶掬桔梮椈橘毩毱泦淗焗犑狊箤粷菊蘜諊趜跼踘蹫躹輂郹鄓鋦锔閰鞫駶驧鵙鵴鶪鼳]>jú; +[䃊䄔䅓䈮䢹䶥举咀弆挙擧椇榉榘櫸欅竘筥舉莒蒟蝺袓跙踽齟龃]>jǔ; +[㘌㜘㞫㠪㨿㩀㬬㳥䆽䛯䣰䱟䵕䶙俱倨倶具冣剧劇勮句埧埾壉姖寠屦屨岠巨怇怚惧愳懼拒拠据據昛歫泃洰澽炬焣犋秬窭窶簴粔絇耟聚苣虡蚷詎讵貗距踞躆遽邭醵鉅鋸鐻钜锯颶飓駏鮔]>jù; +矩>ju; +[剶姢娟捐朘涓蠲裐鎸鐫镌鵑鹃]>juān; +[㷷卷埢捲臇菤𩜇]>juǎn; +[㢧㢾㪻㯞䄅䌸䖭䚈䡓䳪倦劵勌勬巻帣慻桊淃狷獧瓹眷睊睠絹绢罥羂鄄錈锩韏飬鬳]>juàn; +[噘屩撅]>juē; +[㓸㔃㔢㟲㤜㩱㭈㭾㰐㵐㷾㸕㹟㻕䀗䁷䆕䆢䇶䋉䍊䏐䏣䐘䖼䘿䙠䝌䞷䠇䡈䦆䦼亅倔傕僪决刔劂勪厥噱嚼孒孓屫崛崫嵑嶥弡彏憠憰戄抉挗捔掘撧攫斍柽桷橛橜欔欮殌氒決潏焆焳熦爑爝爴爵獗玃玦玨珏瑴疦瘚矍矡砄絕絶绝臄芵蕝蕨蚗蟨蟩蠼覐覚覺觉觖觼訣譎诀谲谻貜赽趹蹶蹷躩逫鈌鐍鐝钁镢鱊鱖鳜鴃鷢龣𧽸𩪗]>jué; +[䞵䟾]>juě; +[鴂𠢤]>juè; +[军君均姰桾汮皲皸皹碅莙菌蚐袀覠軍鈞銁銞钧頵鮶鲪麇麏麕]>jÅ«n; +蜠>jǔn; +[㑺㒞㓴㕙㝦㴫㻒㽙䇹䕑䜭䝍俊儁呁寯峻懏捃攈攟晙殾浚濬焌珺畯睃竣箘箟葰蔨郡隽雋餕馂駿骏鵘]>jùn; +咖>kā; +[佧卡咔胩鉲]>kǎ; +髂>kà; +[奒开揩痎鐦锎開]>kāi; +[㡁䁗䐩䒓凯凱剀剴嘅垲塏恺愷慨暟楷蒈輆鍇鎧铠锴闓闿颽]>kǎi; +[㲉䡷勓忾愒愾欬炌炏烗礚]>kài; +[刊勘堪嵁戡栞龕龛]>kān; +[㸝䶫侃偘冚坎埳塪崁惂槛檻欿歁歞砍莰輡轗顑]>kǎn; +[䀍䘓墈看瞰矙磡竷衎闞阚]>kàn; +[嫝康忼慷槺漮穅粇糠躿鏮鱇]>kāng; +[扛摃]>káng; +䡉>kǎng; +[㰠亢伉匟囥抗炕犺砊邟鈧钪閌闶]>kàng; +[尻髛鷱]>kāo; +攷>káo; +[䯪丂拷栲槀洘烤燺稁考薧鮳鲓𥬯]>kǎo; +[䐧犒銬铐靠]>kào; +[峇柯棵樖犐珂疴瞌磕科稞窠簻胢苛萪薖蝌趷軻轲顆颗髁]>kē; +[壳殼]>ké; +[㞹㪃㪙㪡㪼㰤㵣可坷岢嶱敤渇渴炣礍]>kě; +[㕉㤩㾧䙐䶗克刻剋勀勊喀嗑垎堁娔客尅恪愘愙揢搕榼氪溘碦緙缂衉課课醘騍骒]>kè; +[啃垦墾恳懇肎肯肻豤錹齗齦龂龈]>kěn; +[㸧掯珢硍裉褃]>kèn; +[劥吭坈坑奟妔挳摼牼硁硜硻銵鍞鏗铿阬]>kēng; +ä¡°>kěng; +[倥埪崆悾涳硿空箜錓鵼]>kōng; +[㤟孔恐]>kǒng; +[㸜控鞚]>kòng; +[剾彄抠摳芤袧]>kōu; +[㔚劶口]>kǒu; +[㓂㰯㲄㽛䳟䳹佝冦叩宼寇怐扣敂滱瞉窛筘簆蔲蔻釦鷇𦶲]>kòu; +[刳哭圐堀扝枯桍窟胐跍軲轱郀顝骷]>kÅ«; +[䇢苦]>kǔ; +[㒂㠸俈喾嚳库庫焅瘔矻秙絝绔袴裤褲趶酷]>kù; +[侉咵夸姱荂誇]>kuā; +[垮恗銙錁锞]>kuǎ; +[㐄䋀挎胯跨骻]>kuà; +呙>kuāi; +[㧟䓒擓蒯]>kuǎi; +[㔞㙕㙗㟴㬮㱮䈛䭝䯤䶐侩儈凷哙噲块塊墤廥快桧檜欳浍澮獪禬筷糩脍膾郐鄶駃鬠鱠鲙]>kuài; +[宽寛寬臗髋髖]>kuān; +[㯘䕀䥗䲌欵款歀窾]>kuǎn; +䤭>kuàn; +[劻匡匩哐恇框洭硄筐誆诓軭邼]>kuāng; +[㤮抂狂誑诳鵟]>kuáng; +[俇夼黋]>kuǎng; +[䊯䵃儣况卝圹壙岲懬懭旷昿曠況爌眖眶矌矿礦絖纊纩貺贶躀邝鄺鉱鑛]>kuàng; +[亏刲岿巋盔窥窺茥藈蘬虧鍷闚]>kuÄ«; +[㙓㚝㨒䕫䟸䤆䧶䯓䳫喹夔奎戣揆晆暌楏楑櫆湀犪睽聧葵蘷虁躨逵鄈鍨頯馗騤骙魁]>kuí; +[㛻䠑䦱䫥煃跬蹞頍]>kuǐ; +[㕟䈐䍪䕚喟嘳媿尯愦愧憒撌槶樻溃潰瞆瞶篑簣籄聩聭聵腃蒉蔮蕢鐀鑎餽饋馈騩]>kuì; +[坤堃婫崐崑惃昆晜焜猑琨瑻菎蜫裈褌貇醌錕锟騉髠髡髨鯤鲲鵾鹍]>kÅ«n; +[㩲䠅壸壼悃捆梱硱祵稇稛綑裍閫閸阃齫]>kǔn; +[㫻困涃睏]>kùn; +擃>kuǒ; +[㗥䟯䦢䯺姡廓彉彍扩拡括挄擴漷濶蛞闊阔鞟鞹]>kuò; +[嚹垃拉柆磖翋菈]>lā; +[㕇揦邋]>lá; +[䟑喇藞]>lǎ; +[㸊㻋㻝䂰䃳䏀䓥䗶䝓䪉䱫䶛剌揧攋楋爉瓎瘌腊臈臘蜡蝋蝲蠟辢辣鑞镴鬎鯻癩]>là; +[啦鞡]>la; +[㚓㥎䅘䋱䚅䠭䧒來俫倈婡孻崃崍庲徕徠来梾棶涞淶猍琜筙箂莱萊逨郲錸铼騋鯠鶆麳]>lái; +[䂾唻]>lǎi; +[㠣㾢䄤䓶䲚勑娕櫴濑瀨瀬癞癩睐睞籁籟藾襰賚賴赉赖頼顂鵣]>lài; +[㑣㘓㞩㦨㳕䆾䍀䑌䦨䪍䰐䳿儖兰厱啉囒婪岚嵐幱懢拦攔斓斕栏欄欗澜瀾灆灡燣燷璼礷篮籃籣糷繿葻蓝藍蘫蘭襕襤襴譋讕谰躝钄闌阑韊]>lán; +[㛦㨫㩜㰖䊖䌫壈嬾孄孏懒懶揽擥攬榄欖浨漤灠覧覽览醂顲𡒄]>lǎn; +[㜮㱫䃹嚂壏滥濫烂燗爁爛爤瓓纜缆鑭镧]>làn; +啷>lāng; +[㝗㟍㢃㱢㾿䆡䡙䯖䱶俍勆嫏廊桹榔樃欴狼琅瑯稂筤艆莨蓈蓢蜋螂踉躴郎郞鋃锒]>láng; +[㓪㙟㫰㮾㾗䀶䁁塱朖朗朤烺硠誏閬阆]>lǎng; +[䍚䕞埌崀浪蒗]>làng; +[捞撈]>lāo; +[㗦㞠㟉㟹㨓䃕䜎䝁䲏僗劳労勞哰唠嘮崂嶗憥浶牢痨癆磱窂簩蟧醪鐒铹]>láo; +[㟙㧯䇭䕩䝤䳓䵏佬咾恅栳橑狫老荖轑銠铑]>lǎo; +[嫪憦橯涝澇耢耮軂髝]>lào; +[㔹㖀㦡乐仂叻哷忇扐捋楽樂氻泐玏砳竻簕肋艻阞韷頱鰳鳓]>lè; +[了餎饹]>le; +勒>lēi; +[㒍㔣㵢㹎䉓䍣䐯䨓壨嫘擂檑欙瓃畾縲纍纝缧罍羸蘲虆蠝鐳鑘镭雷靁鼺]>léi; +[㑍㒦㙼㡞㶟㼍㿔䉂䛶䣂䴎傫儡儽厽垒壘樏櫐櫑洡漯灅瘣癗磊磥礨絫耒蕌蕾藟蘽誄讄诔轠鑸頛鸓]>lěi; +[㭩㲕㴃䉪䍥䒹䢮䣦䮑埒攂泪涙淚礌礧禷类累纇蘱酹銇錑頪類颣𩔗]>lèi; +嘞>lei; +[䉄䬋倰塄崚棱楞稜薐]>léng; +冷>lěng; +[䚏䮚堎愣踜]>lèng; +唎>lÄ«; +[㒿㓯㠟㦒㰀㰚㴝㷰㹈㿛䄜䅻䉫䊍䋥䍠䍦䔆䔣䔧䖥䖽䖿䙰䣓䣫䱘䴻䵓䵩刕剓剺劙厘喱嚟囄嫠孋孷廲悡攡梨梩梸棃樆氂漓漦灕犁犂璃瓈睝离穲篱籬粍粚糎縭缡罹艃菞蓠蔾藜蘺蜊蟍褵謧貍邌醨釐鋫錅鏫鑗離騹驪骊鯬鱺鲡鵹鸝鹂黎黧]>lí; +[㸚㾖䗍䤚䧉俚兣娌峛峢峲欐欚浬澧理盠礼禮粴蟸蠡裏豊逦邐醴里鋰锂鯉鱧鲤鳢礼]>lǐ; +[㑦㒧㔏㕸㗚㘑㟳㡂㤡㤦㧰㬏㮚㯤㱹㺡㻎㻺㼖㽁㽝㾐㿨䁻䃯䅄䇐䊪䍽䓞䔁䔉䘈䚕䟏䟐䡃䤙䥶䬅䬆䮋䮥䰛䰜䲞䴄䴡䶘丽例俐俪傈儮儷凓利力励勵历厉厤厯厲吏呖唳嚦囇坜塛壢婯屴岦巁悧悷慄戻戾搮攊攦攭斄暦曆曞朸枥栎栗栛栵棙櫔櫟櫪歴歷沥沴涖溧濿瀝爄爏犡猁珕琍瑮瓅瓑瓥疠疬痢癘癧皪盭矋砅砬砺砾磿礪礫礰禲秝立笠筣篥粒粝糲綟纅脷苈苙茘荔莅莉蒞藶蚸蛎蛠蜧蝷蠇蠣蠫詈讈赲跞躒轢轣轹郦酈鉝隶-隸雳雴靂靋鬁鬲鱱鱳鳨鴗鷅鷑麗麜𥝢]>lì; +[哩李狸裡]>li; +[俩倆]>liǎ; +[㓎㜕㝺㟀㡘㢘㥕㦁㶌㺦㼓㾾䁠䃛䆂䏈䙺䥥䨬䭑亷僆劆匲匳嗹噒奁奩奱嫾帘廉怜慩憐梿槤櫣涟溓漣濂濓熑燫琏璉磏稴簾籢籨縺翴联聫聮聯臁莲蓮薕螊蠊裢褳覝謰譧蹥连連鄻鎌鐮镰鬑鰱鲢𢅏]>lián; +[㦑㪘㯬㰈㰸䇜䌞嬚摙羷脸膦臉莶薟]>liǎn; +[㜃㜻㪝㱨㶑㼑堜媡恋戀敛斂楝歛殓殮浰湅潋澰瀲炼煉瑓練纞练萰蔹蘝蘞裣襝錬鍊鏈链鰊]>liàn; +[㹁䝶䣼䭪凉墚梁椋樑涼粮粱糧綡良輬辌駺]>liáng; +[㒳㔝䓣䠃䩫両两兩唡啢掚緉脼蜽裲魉魎]>liǎng; +[亮哴喨悢晾湸諒谅輌輛辆量鍄]>liàng; +[撩蹽]>liāo; +[㙩㝋㵳䜍䜮䝀䨅僚嘹嫽寥寮屪嵺嶚嶛廫憀摎敹暸漻潦熮獠璙疗療窷簝繚缭聊膋膫蟟豂賿蹘辽遼鐐镣顟飂飉髎鷚鷯鹨鹩]>liáo; +[㶫䄦䑠䩍憭瞭蓼鄝镽]>liǎo; +[㡻㺒䉼䍡䎆䢧尞尥尦廖撂料炓燎爒]>liào; +å·¤>liē; +䟩>liě; +[㤠㧜㬯㭞㯿㲱㸹㼲㽟䁽䅀䉭䓟䜲䟹䴕儠冽列劣劽埓姴挒捩擸洌浖烈煭犣猎獵睙聗脟茢蛚蛶裂趔躐迾颲鬛鬣鮤鱲鴷]>liè; +咧>lie; +[㔂㝝㷠䚬䢯䫐䮼临亃厸壣嶙惏斴晽暽林淋潾瀶燐獜琳璘甐疄痳瞵矝碄磷箖粼綝繗罧翷臨轔辚遴邻鄰鏻隣霖驎鱗鳞麐麟]>lín; +[㐭㨆䕲僯凛凜廩廪懍懔撛檁檩澟癛癝菻]>lǐn; +[㖁䉮䗲䫰吝恡悋橉焛粦蔺藺蹸躏躙躪轥閵]>lìn; +[拎昤]>lÄ«ng; +[㖫㡵㥄㦭㪮㬡㯪㱥㲆㸳㻏㾉䄥䈊䉁䉖䉹䌢䍅䔖䕘䖅䙥䚖䠲䡼䡿䧙䨩䯍䰱䴇䴒䴫凌刢囹坽夌姈孁岺朎柃棂櫺欞泠淩澪灵燯爧狑玲琌瓴皊睖砱碐祾秢竛笭紷綾绫羚翎聆舲苓菱蔆蕶蘦蛉衑裬詅跉軨輘酃醽鈴錂铃閝陵零霊霛霝靈駖魿鯪鲮鴒鸰鹷麢齡齢龄龗]>líng; +[呤岭嶺彾袊阾領领]>lǐng; +[令另掕炩]>lìng; +伶>ling; +㶈>liǒng; +[溜熘蹓]>liÅ«; +[㐬㽞䉧䋷䗜䚧䬟䭷䰘䱖䱞䶉刘劉嚠媹嵧懰旈旒榴橊沠流浏瀏琉瑠瑬璢畄留畱疁瘤癅硫蒥蓅藰蟉裗遛鎏鎦鏐镏镠飀飅飗駠駵騮驑骝鰡鶹鹠麍]>liú; +[嬼柳栁桺橮珋綹绺罶羀鉚鋶铆锍飹]>liǔ; +[㙀㨨㶯㽌䄂六坴塯廇澑畂磂翏鐂雡霤餾馏鬸]>liù; +[㚅㝫㡣㦕㰍䃧䆍䏊䙪䥢䪊咙嚨屸嶐巃巄昽曨朧栊櫳泷湰滝漋瀧爖珑瓏癃眬矓砻礱礲竜笼篭簼籠聋聾胧茏蕯蘢蠪蠬襱豅躘鏧鑨隆霳靇鸗龍龒龓龙]>lóng; +[㙙㴳䡁儱垄垅壟壠拢攏竉陇隴]>lǒng; +[㑝㛞㟖㢅哢徿挵梇硦衖贚]>lòng; +窿>long; +[䁖瞜]>lōu; +[㟺㥪㲎㺏䄛䅹䝏䣚䫫䮫䱾剅娄婁廔慺楼樓熡耧耬艛蒌蔞蝼螻謱軁遱鞻髅髏鷜]>lóu; +[㪹塿嵝嶁搂摟甊篓簍]>lǒu; +[㔷屚漏瘺鏤镂陋]>lòu; +[喽嘍]>lou; +[噜嚕]>lÅ«; +[㠠㢳㪭㭔㱺㿖䡎䮉䰕卢嚧垆壚庐廬攎曥栌櫨泸瀘炉爐獹玈璷瓐盧矑籚纑罏胪臚艫芦蘆蠦轤轳鑪顱颅髗魲鱸鲈鸕鸬黸]>lú; +[㔪㢚㯭䕡䲐卤塷掳撸擄擼樐橹櫓滷瀂硵磠舻艣艪蓾虏虜鏀鐪鑥镥魯鲁鹵]>lǔ; +[㓐㖨㛬㜙㟤㦇㪐㪖㫽㯝㯟㼾䃙䌒䎑䎼䐂䘵䚄䟿䡜䩮䱚䴪侓僇剹勎勠圥垏娽峍廘彔录戮摝椂樚淕淥渌漉潞熝琭璐甪盝睩硉碌磟祿禄稑穋箓簏簶籙粶膔菉蔍蕗虂螰觮觻賂赂趢路踛蹗輅轆辂辘逯醁錄録錴鏕鏴陆陸露騄騼鯥鵦鵱鷺鹭鹿麓]>lù; +[榈櫖櫚氀爈瘘瘻膢藘閭闾馿驢驴]>lǘ; +[㭚㻲㾔侣侶偻僂儢吕呂屡屢履挔捛旅梠溇漊祣稆穞穭絽縷缕膂膐褛褸郘鋁铝]>lǚ; +[㔧㠥㲶䔞䢖䥨勴寽嵂律慮氯滤濾率箻綠緑绿膟葎虑鑢]>lǜ; +[㝈㡩㱍䖂䜌圝圞娈孌孪孿峦巒挛曫栾欒滦灓灤癵羉脔臠虊銮鑾鵉鸞鸾]>luán; +卵>luǎn; +[乱亂薍釠]>luàn; +[攣癴]>lüán; +㨼>luè; +[㑼㔀䂮䌎䛚䤣圙擽畧稤鋝鋢锊]>lüè; +[抡掄]>lÅ«n; +[㖮㷍䈁䑳仑伦侖倫囵圇婨崘崙惀沦淪溣綸纶腀菕蜦踚輪轮錀陯鯩]>lún; +[埨稐耣]>lǔn; +[碖論论]>lùn; +絯>lǜn; +[啰囉罗]>luō; +[㑩㼈㽋䊨䯁儸摞椤欏氇氌猡玀箩籮羅萝蔂蘿螺覙覶覼逻邏鏍鑼锣镙饠騾驘骡鸁]>luó; +[㒩㦬㩡㰁㱻倮攞曪瘰癳砢臝蓏蠃裸躶鎯]>luǒ; +[㓢㴖㿚䀩䇔䈷䌱䌴嗠峈洛濼烙犖珞硌笿絡纙络荦落袼酪雒駱骆鮥鴼鵅]>luò; +[妈媽嬤嬷]>mā; +[㦄䗫䳸犘痲蔴蟇麻]>má; +[㐷䣕䣖溤玛瑪码碼蚂螞鎷馬马鰢鷌]>mǎ; +[㑻㜫㨸㾺䯦傌唛嘜帓杩榪犸獁睰祃禡罵閁駡骂]>mà; +[吗嗎嘛蟆]>ma; +[㜥㼮䁲䚑䨪埋薶霾]>mái; +[买嘪荬蕒買鷶]>mǎi; +[䈿䘑䜕䨫䮮佅劢勱卖売眿脈脉蝐賣迈邁霢麥麦]>mài; +[㒼㗄㙢䅼䊡䐽䑱䛲䟂䯶䰋姏悗慲摱槾璊瞒瞞蛮蠻謾谩蹒蹣顢颟饅馒鬘鰻鳗]>mán; +[㛧䜱屘満满滿矕螨蟎襔鏋鮸]>mǎn; +[㗈㡢㬅㵘䕕䝡䝢䡬僈墁嫚幔慢曼漫澫澷熳獌縵缦蔄蔓鏝镘鬗]>màn; +[㝑㟌㟿㡛㻊䀮䅒䈍䟥䵨吂哤娏尨忙恾杗杧氓汒浝牤牻狵痝盲盳硭笀芒茫蘉蛖邙釯鋩铓駹鼆]>máng; +[㙁㟐㬒䁳䒎䖟壾漭硥茻莽莾蟒蠎]>mǎng; +[猫貓]>māo; +[㝟㲠䅦兞堥媌嫹旄枆毛渵牦犛矛罞茅蝥蟊覒軞酕錨锚髦髳鶜]>máo; +[㚹㧇冇卯夘峁戼昴泖笷茆]>mǎo; +[㒵㒻㡌㧌㪞㫯㮘㴘㺺㿞䀤䋃䓮䡚䫉冐冒媢帽懋暓柕楙毷瑁皃眊瞐耄艒芼茂萺蓩袤貌貿贸鄮]>mào; +[么麼]>me; +[㶬㺳䊈䍙䒽䤂呅堳塺媒嵋徾攗枚栂梅楣楳槑沒没湄湈煤猸玫珻瑂眉睂禖篃脄脢腜苺莓葿郿酶鋂鎇镅霉鶥鹛黴𪃏]>méi; +[䆀䓺䜸凂媄媺嬍嵄挴毎每浼渼燘美鎂镁黣]>měi; +[㭑䀛䉋䊊䰨䰪䵢妹媚寐抺昧沬煝痗眛睸祙蝞袂跊韎鬽魅]>mèi; +[㡈㨺䊟䝧䫒扪捫樠穈菛虋鍆钔門閅门]>mén; +暪>měn; +[㥃㦖㱪㵍悶懑懣焖燜闷]>mèn; +[们們]>men; +[㙹㠓㩚䀄䇇䉚䑃䑅䒐䓝䗈䙦䙩䤓䰒䲛䴌䴿䵆儚冡幪懞懵曚朦橗檬氋濛獴甍甿盟瞢矇矒礞艨苎莔萌萠蒙蕄虻蝱鄳鄸雺靀饛鯍鸏鹲]>méng; +[㚞䏵勐猛瓾艋蜢蠓錳锰鯭]>měng; +[㜴㝱䠢䥂䥰夢夣孟懜梦溕霥霿]>mèng; +[咪嘧眯瞇]>mÄ«; +[㜷㟜㠧㣆㩢㸏䊳䋛䌕䌘䍘䕳䕷䛧䤍䥸䪾䴢冞弥彌戂擟攠檷瀰爢猕獼瓕祢籋糜縻罙蒾蘪蘼詸謎谜迷醚醾醿釄镾鸍麊麋麛𨢥]>mí; +[㝥㥝㰽㳽䭧䱊侎孊弭敉沵洣渳濔灖眫米脒葞蔝銤靡]>mǐ; +[㜆㨠㫘㳴㴵㵋㸓䁇䉾䌏䌐䌩䖑䛉䛑䣾䤉䭩䮭冖冪塓宓宻密峚幂幎幦榓樒櫁汨泌淧淿滵漞濗熐祕秘簚糸羃蔤藌蜜蠠覓覔覛觅謐谧鼏]>mì; +[㒙㝰㬆㮌㰃䃇䏃䫵䰓婂媔嬵宀棉檰櫋眠矈矊矏綿緜绵臱芇蝒醎]>mián; +[㛯㤁㻰䀎䤄丏偭免冕勉勔喕娩愐汅沔湎眄絻緬缅腼葂麪麫]>miǎn; +[㴐糆面靣麵麺]>miàn; +喵>miāo; +[㑤㠺䁧䖢描瞄緢苗鱙鶓鹋]>miáo; +[㦝䅺劰杪淼渺眇秒篎緲缈藐邈]>miǎo; +[妙庙庿廟玅竗]>miào; +[乜吀咩哶孭羋芈]>miē; +[㒝䁾䈼䘊䩏幭懱搣櫗滅灭礣篾蔑薎蠛衊覕鑖鱴鴓]>miè; +[㟩㟭㢯䁕䂥䃉䋋䟨䡑䡻䪸䲄姄岷崏忞忟怋捪敯旻旼民珉琘瑉痻盿砇碈緍緡缗罠苠鈱錉鍲閺]>mín; +[㞶㥸㨉䡅僶冺刡勄悯愍慜憫抿敃敏暋泯渑湣潣澠皿笢簢閔閩闵闽鰵鳘黽黾]>mǐn; +榠>mÄ«ng; +[㝠䄙䆨䆩䊅䫤佲冥名嫇明暝朙洺溟猽眀瞑蓂螟覭鄍酩銘铭鳴鸣]>míng; +[㟰㫥凕姳慏眳茗]>mǐng; +[䒌命詺]>mìng; +[謬谬]>miù; +摸>mō; +[䃺䉑䯢劘嚤嚰嫫摩摹擵模橅磨糢膜蘑謨谟饃饝馍髍魔]>mó; +[䩋懡抹]>mǒ; +[㱄㱳㷬㷵㹮䁼䁿䏞䒬䘃䜆䬴䮬䱅䳮䴲嗼嚜圽塻墨妺嫼寞帞慔昩暯末枺歾歿殁沫洦湐漠瀎爅瘼皌眜眽瞙砞礳秣粖絈縸纆耱茉莈莫蓦藦蛨蟔衇袹謩貃貊貘鄚銆鏌镆陌霡靺驀鬕魩默黙]>mò; +[庅麽]>mo; +哞>mōu; +[㭌䏬䗋䥐䱕侔劺洠牟眸瞴繆缪蛑蟱謀谋鉾鍪鴾麰]>móu; +[䍒某踇]>mǒu; +[愗瞀]>mòu; +[䱯恈毪氁獏譕]>mú; +[䥈亩姆姥峔母牡牳畆畒畝畞畮砪胟鉧]>mǔ; +[㒇㜈㣎㧅㾇䀲䊾䑵䧔仫募坶墓幕幙慕暮木楘毣沐炑牧狇目睦穆苜莯蚞鉬钼雮霂鞪鶩鹜]>mù; +拇>mu; +嗯>ń; +㐻>ň; +[䏧䛔䫱嗱拏拿誽鎿镎]>ná; +[乸哪雫]>nǎ; +[㗙㨥㴸䀑䅞䇣䇱䈫䎎䖓䖧䟜䪏䱹妠捺笝納纳肭蒳衲袦豽貀軜那鈉钠靹魶]>nà; +[㾍䍲䘅䯮摨熋釢]>nái; +[乃奶妳嬭廼氖疓艿迺]>nǎi; +[㮈㮏㲡倷奈柰榒渿耐萘螚褦錼鼐]>nài; +囡>nān; +[㓓㽖䔜䕼䛁䶲侽南喃奻娚暔枏枬柟楠男畘莮萳諵难難]>nán; +[㫱䁪䈒䔳戁揇湳罱腩蝻赧]>nǎn; +å©»>nàn; +[乪囔]>nāng; +[䂇嚢囊欜]>náng; +[㶞攮曩灢饢馕]>nǎng; +[㒄儾齉]>nàng; +[㞪㺀䃩䄩䑋䛝䫸䴃呶夒峱嶩巎巙怓憹挠撓桡橈猱獶獿硇繷詉譊鐃铙髐𥑪]>náo; +[㑎㛴㺁䜀䜧匘垴堖嫐恼悩惱瑙碯脑腦]>nǎo; +[淖閙闹鬧]>nào; +[䎪䭆訥讷]>nè; +[吶呐呢]>ne; +[㼏䲎娞脮腇餒馁鮾鯘]>něi; +[㕯㖏㘨㨅䡾䳖內内氝]>nèi; +黁>nēn; +é½³>něn; +[㜛㯎㶧嫩嫰]>nèn; +[㴰䏻嬣能薴]>néng; +㲌>nèng; +㕶>ng\u0300; +妮>nÄ«; +[㞾㪒㹸䘦䘽䛏䝚倪坭埿婗尼屔怩泥淣狋猊秜籾臡蚭蜺觬貎跜輗郳霓鯓鯢鲵麑齯]>ní; +[㣇㵫䕥䦵䧇䭲䰯伱伲你儗儞孴抳拟擬旎柅狔禰苨薿鈮鉨铌隬馜]>nǐ; +[㠜㥾㦐㲻䁥䘌䵑䵒匿堄嫟嬺屰嶷惄愵昵暱氼溺痆睨糑縌胒腻膩迡逆鷁鷊鹝鹢]>nì; +[䄭䄹䩞䬯年拈秊秥鮎鯰鲇鲶黏]>nián; +[㘝㞋䚓捻撚撵攆碾簐跈蹨躎輦辇]>niǎn; +[㲽卄唸埝姩廿念涊淰艌鼰齞]>niàn; +[嬢孃]>niáng; +[䖆酿醸釀]>niàng; +娘>niang; +[㒟㜵㠡㭤䃵䐁䙚䦊䮍嫋嬝嬲樢茑蔦袅裊褭鳥鸟𢶑𢸣]>niǎo; +[㞙㳮尿脲]>niào; +[惗捏揑踗鈢鉩錜鑈]>niē; +[㡪苶]>nié; +[㖖㘿㙞㚔㜸㩶㮆㴪㸎䂼䄒䌜䜓䯀䯅䯵啮喦嗫噛嚙囁囓圼孼孽嵲帇摰敜枿棿槸櫱涅湼疌篞糱糵聂聶臬臲菍蘖蠥踂蹑躡鎳鑷钀镊镍闑陧隉顳颞齧]>niè; +[㤛䋻䚾䛘囜您]>nín; +拰>nǐn; +[㝕㲰䗿䭢儜凝咛嚀宁寍寕寗寜寧拧擰柠檸狞獰甯聍聹鑏鬡鸋]>níng; +[橣矃]>nǐng; +[㣷㿦䔭佞侫泞濘]>nìng; +妞>niÅ«; +[䀔䒜牛]>niú; +[㺲䏔忸扭炄狃紐纽莥鈕钮靵]>niǔ; +[䋴衂]>niù; +[㶶䁸䢉侬儂农哝噥檂欁浓濃癑禯秾穠脓膿蕽襛農辳醲鬞齈]>nóng; +䵜>nǒng; +[弄挊]>nòng; +[㝹䨲羺譨]>nóu; +[䅶䘫䰭啂槈獳耨譳鎒鐞]>nòu; +[㚢伮奴孥笯蒘駑驽鴑]>nú; +[努弩砮胬]>nǔ; +[䢞怒抐搙]>nù; +[女籹釹钕]>nǚ; +[㵖䖡䘐䚼䶊恧朒衄]>nǜ; +[㬉䎡䙇暖渜煖煗餪]>nuǎn; +偄>nuàn; +[䖈䖋硸]>nuè; +[䨋疟瘧虐謔谑]>nüè; +[㑚㔮㰙傩儺娜挪捼梛郍]>nuó; +[㛂㡅橠砈砹]>nuǒ; +[㐡䚥愞懦懧挼掿搦搻稬穤糥糯諾诺蹃逽]>nuò; +[喔噢]>ō; +哦>ó; +[呕嘔櫙欧歐殴毆熰瓯甌眍瞘謳讴鏂鴎鷗鸥]>ōu; +[吽齵]>óu; +[㒖㼴䚆䯚偶吘塸耦腢蕅藕]>ǒu; +[㛏䌂䌔怄慪沤漚]>òu; +[啪夿妑皅舥葩蚆趴]>pā; +[䯲䶕杷潖爬琶筢耙跁]>pá; +[帊帕怕袙]>pà; +拍>pāi; +[㵺俳徘排棑牌猅篺簰簲輫]>pái; +俖>pǎi; +[㭛䖰哌汖派湃蒎鎃]>pài; +[㐴攀潘畨眅砙]>pān; +[䃑䃲䈲䰉䰔媻幋搫柈槃瀊盘盤磐磻縏蒰蟠跘鎜鞶]>pán; +[坢奤]>pǎn; +[㳪冸判叛拚沜泮溿炍牉畔盼袢襻詊鋬鑻頄頖]>pàn; +[乓滂膖]>pāng; +[㤶㥬㫄䅭䨦䮾厐厖嫎庞庬彷徬旁篣胮舽蒡螃逄雱霶騯髈龎龐]>páng; +[䒍嗙耪覫]>pǎng; +[㜊炐肨胖]>pàng; +[抛拋脬]>pāo; +[㚿䛌䩝刨匏咆垉庖炰爮狍袍軳鞄齙龅]>páo; +跑>pǎo; +[㘐㯡䶌奅泡炮疱皰砲礟礮靤髱麭]>pào; +[呸垺妚娝岯怌柸肧胚衃醅]>pēi; +[㟝䣙䪹䫠䲹培毰碚裴裵賠赔邳阫陪陫]>péi; +[昢琣]>pěi; +[㤄㧩㫲㳈䊃伂佩姵帔斾旆沛浿珮笩苝轡辔配霈馷]>pèi; +[呠喯喷噴]>pēn; +[湓瓫盆葐]>pén; +[翉翸]>pěn; +歕>pèn; +[匉嘭怦恲抨梈漰澎烹砰硑磞軯閛駍]>pēng; +[㛔㥊䄘䡫䰃䴶倗傰埄堋塜塳弸彭憉挷朋棚椖樥淜痭硼稝竼纄膨芃蓬蟚蟛輣錋鑝韸韼驡髼鬅鬔鵬鹏]>péng; +[捧淎皏]>pěng; +[㼞掽椪甏碰踫]>pèng; +篷>peng; +[丕伾劈噼坯怶悂憵批披抷旇炋狉狓砒磇礕秛秠翍耚豾釽鈈鈹鉟銔铍霹髬髲鮍鲏鴄]>pÄ«; +[㔥㯅啤埤壀朇枇毗毘焷犤玭琵疲皮笓紕纰罴羆肶脾腗膍蚽蜱螷豼貔郫鈚錍阰陴駓魾鼙]>pí; +[㨽䏘䚰䚹䤏䫌䰦仳匹噽嚭圮崥庀疋痞癖脴苉苤諀銢隦]>pǐ; +[㿙䑀䑄䠘䡟䤨䴙僻媲嫓屁揊擗淠渒潎澼濞甓礔譬辟闢鷿鸊]>pì; +[偏囨媥犏篇翩萹頨鶣]>piān; +[㛹㼐䮁楄楩胼腁諚諞谝賆蹁輧駢騈骈骿]>pián; +[覑貵]>piǎn; +[㓲㸤䏒片騗騙骗]>piàn; +[嘌彯旚翲薸螵飃飄飘魒]>piāo; +[㼼䕯䴩淲瓢竂蚫闝]>piáo; +[㩠㵱㹾摽殍犥皫瞟縹缥膘蔈藨醥]>piǎo; +[㬓㺓䏇僄剽勡嫖徱慓漂票篻顠驃骠]>piào; +[撆暼氕瞥]>piē; +[䥕丿撇鐅]>piě; +嫳>piè; +[姘拼涄礗]>pÄ«n; +[㰋嚬娦嫔嬪獱琕薲貧贫頻顰频颦]>pín; +[品榀]>pǐn; +[䀻牝聘]>pìn; +[乒俜娉焩砯頩]>pÄ«ng; +[㺸㻂䍈䶄凭凴呯坪屏屛帡帲幈平慿憑枰泙洴玶瓶甁甹竮箳簈缾聠胓艵苹荓萍蓱蘋蚲蛢評评軿郱鮃鲆鵧𦚓]>píng; +[坡泊溌癹鉕鏺钷陂頗颇]>pō; +[㨇㰴嘙婆櫇皤蔢鄱]>pó; +[叵尀笸]>pǒ; +[㛘䄸䎊䞟䣪䣮䨰䪖䯙岶廹炇烞狛珀破砶粕蒪迫酦醗醱釙钋魄]>pò; +[泼潑]>po; +剖>pōu; +[㧵抔抙捊掊裒錇锫]>póu; +[㕻勏哣婄廍棓犃瓿]>pǒu; +咅>pòu; +[仆噗墣扑抪撲擈攴濮痡醭陠]>pÅ«; +[㒒㯷㲫㺪䈬䈻䑑䔕䗱䧤䴆僕匍樸毞獛璞瞨穙箁纀脯菐菩葡蒱蒲襆襥蹼轐酺鏷镤]>pú; +[㹒䲕圃圤普朴檏氆浦溥潽烳誧諩譜谱鐠镨]>pǔ; +[㬥曝瀑舖舗鋪铺]>pù; +[七倛僛凄唭嘁墄妻娸悽慼慽攲期柒栖桤桼棲榿欺沏淒漆磎磩粞緀萋諆郪霋顣魌鶈鸂𠀁]>qÄ«; +[㜎㟓㟚㟢㩽㯦䄢䅲䉻䐡䑴䓅䞚䟚䡋䧘䧵䩓䭶䭼䰇䱈䲬䳢䶒䶞亓亝其剘圻埼墘奇岐岓崎帺忯愭懠掑斉斊旂旗棊棋檱櫀歧淇濝猉玂琦琪璂畁畦疷碁碕祁祈祺禥竒粸綦綨纃翗耆脐臍艩芪荠萁萕蕲薺藄蘄蚑蚔蚚蛴蜝蜞蠐衹跂踑軝迉鄿釮錡錤锜頎颀騎騏骐骑鬐鬿鮨鯕鰭鲯鳍鵸鶀麒齊齐]>qí; +[㒅㞓㥓㩩㫓㾨䄎䄫䉝䋯䎢䏿䒻䔇䛴䡔䭫䭬乞企启呇唘啓啔啟婍屺岂敧晵杞棨槣盀綮綺绮芑芞裿諬豈起邔闙]>qǐ; +[㓞㞚㣬㮑㼤䀈䀙䁈䁉䅤䌌䏅䏌䏠䒗䙄䚉䚍䟄䢀䫔䬣䰴呮咠噐器夡契弃徛忔憇憩摖暣栔棄气気氣汔汽泣湆湇炁甈盵矵砌碛碶磜磧礘綥緝缉罊葺蟿訖諿讫迄鏚鼜]>qì; +戚>qi; +掐>qiā; +䠍>qiá; +[跒酠]>qiǎ; +[㓣㡊㤉䜑䨐䯊䶝匼圶帢恰殎洽]>qià; +[㡨仟佥僉兛千圱圲奷婜孯岍幵悭愆慳扦拪掔搴撁攐攑攓杄檶櫏欦汘汧牵牽签簽籤粁縴羟羥肷膁臤芊蚈褰諐謙譣谦谸迁遷釺鉛鋟鐱钎铅锓阡韆顩騫骞鬜鬝鵮鹐]>qiān; +[㦮㨜㩮㸫䁮䈤䍉䕭䖍䨿仱前媊岒忴扲拑掮揵榩歬漧潛潜濳灊燂箝葥虔鈐鉗銭錢钤钱钳雂騚鬵鰬黔黚]>qián; +[㧄䪈䭤嵰撖槏浅淺繾缱蜸譴谴遣]>qiǎn; +[㐸㜞㟻㪠㯠䈴䊴䥅䦲䫡倩傔儙刋堑塹壍嵌悓慊棈椠槧欠歉皘篏篟綪芡茜蒨蔳輤]>qiàn; +[呛嗆嶈戕戗斨枪椌槍溬牄猐玱瑲矼篬羌羗羫腔蜣謒跄蹌蹡錆鎗鏘鏹锖锵镪]>qiāng; +[㩖丬墙墻嫱嬙廧強强彊樯檣漒爿牆蔷薔蘠軖]>qiáng; +[㛨䅚傸勥墏抢搶磢繈繦]>qiǎng; +[䵁唴炝熗羻]>qiàng; +[劁墝墽嵪幧悄敲橇硗磽繑跷踍蹺蹻郻鄡鄥鍫鍬鏒鐰锹鞒頝骹髜]>qiāo; +[㚁㝯䀉䎗䩌䱁乔侨僑喬嘺嶣憔桥樵橋燆癄瞧硚礄簥荞蕎藮譙谯趫趬鐈鞽顦]>qiáo; +[㚽㡑㤍䲾巧愀釥]>qiǎo; +[㢗㪣㴥䃝䆻䇌俏僺峭帩撬撽窍竅翘翹誚诮躈陗鞘韒髚]>qiào; +[㚗䦧癿]>qié; +且>qiě; +[㓶㗫㛍㛙㤲㥦㫸㰰㰼㹤㾀㾜䟙䤿䬊切匧妾怯悏惬愜挈朅洯淁穕窃竊笡箧篋緁藒蛪踥鍥锲鯜]>qiè; +[亲侵媇嵚嶔欽瀙綅衾親誛钦顉駸骎鮼]>qÄ«n; +[㘦㢙㩒㪁㮗䔷䖌䦦勤厪嗪噙嫀庈廑懃懄捦擒斳檎澿珡琴琹禽秦耹芩芹菦蚙螓蠄赺鈙靲鳹鵭]>qín; +[㝲㾛䠴坅寑寝寢昑曋螼赾]>qǐn; +[㞬㤈䈜吢吣唚寖寴抋揿搇撳沁菣]>qìn; +[倾傾卿啨圊寈氢氫氰淸清狅蜻軽輕轻郬靑青鯖鲭]>qÄ«ng; +[㯳䝼䞍䲔剠勍夝情擎晴暒樈檠殑甠晴]>qíng; +[㷫䔛䯧庼廎檾請请頃顷]>qǐng; +[䋜䌠凊庆慶掅殸汫漀碃磘磬罄謦鑋靘]>qìng; +[匔焪穹芎銎]>qiōng; +[㒌㧭㮪㷀㼇䅃䆳䊄䓖䛪䠻儝卭宆惸桏棾橩焭煢琼璚瓊睘瞏穷窮竆笻筇茕藑藭蛩赹跫輁邛]>qióng; +苘>qiǒng; +[㐀䆋丘丠坵媝恘楸秋秌穐篍緧萩蓲蚯蝵蟗蠤趥邱鞦鞧鰍鱃鳅鶖鹙龝𠀉𩝠]>qiÅ«; +[㐤㕤㞗㟈㤹㥢㧨㭝㷕㺫䊵䎿䜪䟵䣇䤛俅厹叴唒囚崷巯巰扏朹梂毬求汓泅浗渞煪犰玌球璆皳盚紌絿肍脙艽苬莍虬虯蛷蝤裘觩訄訅賕赇逎逑遒酋釓釚銶钆鮂鯄鰌鰽鼽]>qiú; +[㼒䞭搝糗]>qiǔ; +[䟬䠗殏螑]>qiù; +[㠊伹佉凵匤区區呿坥屈岖岴嶇憈抾敺曲瞿砠祛胠蛆蛐袪誳趋趨躯軀镼阹駆駈驅驱髷魼鰸鱋鶌黢]>qÅ«; +[㖆㜹㣄㯫㲘䀠䂂䋧䝣䞤䟊䵶佢劬匷忂懅戵斪朐欋氍淭渠灈璖璩痀癯磲籧翑翵胊臞菃葋蕖蘧螶蟝蠷衢豦躣軥鑺鴝鸜鸲麯麴麹鼩𪍸]>qú; +[䶚取娶浀竬筁紶詓齲龋]>qǔ; +[㧁㫢㰦䁦䒧䠐刞厺去湨覰覷覻觑詘诎趣閴闃阒麮鼁]>qù; +[圈圏姾弮悛棬箞絟鐉]>quān; +[㒰㟨㟫䀬䑏䟒䠰佺全啳婘孉峑巏恮惓拳搼权権權泉洤湶牷犈瑔痊硂筌荃葲蜷蠸觠詮诠踡輇辁醛銓铨顴颧駩騡鬈鰁鳈鷤齤]>quán; +[䊎呟奆汱犬琄甽畎綣縓绻虇詃]>quǎn; +[䄐券劝勧勸烇牶玔絭荈]>quàn; +[缺蒛𩨭]>quē; +瘸>qué; +[㕁㩁㰌㱋㱿㴶㾡䇎䦬䧿却卻咑埆塙墧寉崅悫愨慤搉榷殻毃灍燩琷皵硞确碏確碻礐礭舭趞闋闕阕阙雀]>què; +[鵲鹊]>que; +[囷夋峮杶踆輴逡鰆]>qÅ«n; +[㪊㿏䭽宭帬漘羣群裙裠錞]>qún; +蝽>qǔn; +[儿兒]>r; +[㜣㲯㸐㾆䑙䖄䫇嘫然燃繎肰蚦蚺蛅衻袇袡髥髯𤡮]>rán; +[㚩㯗㿵䎃䒣䣸䤡冄冉呥姌媣染橪珃苒]>rǎn; +[㚂䉴儴勷攘瀼獽瓤禳穣穰蘘躟鬤]>ráng; +[嚷壌壤爙]>rǎng; +[懹譲讓让]>ràng; +[㹛䫞荛蕘蛲蟯襓饒饶]>ráo; +[㑱娆嬈扰擾]>rǎo; +[繞绕遶隢顤]>rào; +[喏惹]>rě; +[渃热熱]>rè; +[䌾䴦人亻仁壬忈忎朲秂紝絍纴芢鈓銋魜鴹]>rén; +[㣼䏕䏰䭃忍栠栣棯秹稔腍荏荵]>rěn; +[㠴㶵㸾䀼䇮䋕仞仭任刃刄妊姙屻恁扨杒梕牣紉纫肕衽袵訒認认讱賃赁軔軠轫靭靱韌韧飪餁饪鵀]>rèn; +扔>rēng; +[㭁㺱䄧䚮仍礽辸陾]>réng; +芿>rèng; +[䒤囸日氜衵釰鈤馹驲]>rì; +茸>rōng; +[㘇㝐㣑㭜㲓㲨㺎㼸䇀䇯䈶䘬䠜䡆䡥䤊䩸媶容嵘嶸戎曧栄榕榮榵毧溶烿熔爃狨瑢穁絨縙绒羢肜茙荣蓉蝾融螎蠑褣鎔镕駥髶鰫鷛]>róng; +[㲝䢇傇冗宂搑氄軵]>rǒng; +é´§>ròng; +[㖻㽥䐓䧷䰆媃揉柔楺沑渘瑈瓇禸脜腬葇蝚蹂輮鍒鍕鞣韖騥鰇鶔]>róu; +[煣粈糅]>rǒu; +[䄾宍肉]>ròu; +[㨎㹘䋈䰰儒嚅如孺帤挐曘桇渪濡燸筎臑茹蕠薷蠕袽襦邚醹顬颥鱬鴽]>rú; +[㦺乳侞擩汝肗辱銣铷]>rǔ; +[傉入嗕媷洳溽縟缛蓐褥鄏]>rù; +[䓴堧壖撋]>ruán; +[㼱㽭䞂䪭媆朊瑌瓀盶碝礝緛耎腝蝡軟輭软阮]>ruǎn; +[㮃䅑甤緌蕤]>ruí; +[惢桵橤繠蕊蕋蘂蘃]>ruǐ; +[㓹㛱㪫㲊䌼䓲叡壡枘汭瑞睿芮蚋蜹銳鋭锐]>ruì; +[犉瞤]>rún; +[㠈䦞橍润潤膶閏閠闰]>rùn; +[䐞偌叒婼弱楉焫爇箬篛若蒻鄀鰙鰯鶸]>ruò; +[仨撒]>sā; +[㒎䊛洒灑靸]>sǎ; +[㪪㳐㽂䘮䙣䬃卅摋攃櫒脎萨薩趿鎝颯飒馺]>sà; +[塞愢揌毢腮顋鰓鳃]>sāi; +[㗷䈢]>sǎi; +[僿嗮簺賽赛]>sài; +噻>sai; +[三叁嘇弎攕毵毿犙糁糝鬖]>sān; +[㧲䀐䉈䊉䫩仐伞傘糂糣糤繖鏾饊馓]>sǎn; +[㤾㪔㪚䫅俕散潵閐]>sàn; +[桑桒]>sāng; +[䡦䫙嗓搡磉褬鎟顙颡]>sǎng; +[丧喪]>sàng; +[慅掻搔溞瘙繅缫臊颾騒騷骚鰠鰺鱢鳋]>sāo; +[㛮䕅嫂扫掃]>sǎo; +[㿋䐹䖣喿埽氉矂]>sào; +[㒊㥶㮦㱇㴔㻭䉢䔼䨛啬嗇懎歮歰涩澀澁濇瀒瑟璱穑穡繬翜色譅趇轖銫铯雭飋]>sè; +[曑森椮槮甧穼篸蔘襂]>sēn; +[僧鬙]>sēng; +[乷刹剎唦帴杀桬榝樧殺沙煞猀痧砂硰粆紗纱莎蔱裟鎩铩髿魦鮻鯊鯋鲨]>shā; +[傻儍訯]>shǎ; +[㚫㛼㰱䈉䝊䮜䵘䶎倽厦唼啑啥喢帹廈歃箑翣萐閯霎]>shà; +[筛篩]>shāi; +繺>shǎi; +[㬠晒曬閷]>shài; +[删刪剼姍姗山幓彡挻搧杉檆潸澘烻煽狦珊穇笘縿羴羶脠舢芟苫衫跚軕邖]>shān; +[㚒㣣㨛㪎㶒䠾晱睒覢醦閃闪陕陝陿]>shǎn; +[㣌㪨䄠䆄䚲䥇䦂䦅䱇䱉䴮傓僐善墠墡嬗扇掞摲擅汕灗熌疝磰禅繕缮膳蟮蟺訕謆譱讪贍赡赸鄯釤銏鐥钐饍騸骟鱓鱔鳝]>shàn; +[伤傷商墒慯殇殤滳漡熵蔏螪觞觴謪鬺]>shāng; +[䬕扄晌賞赏]>shǎng; +[丄上姠尙尚蠰銄鑜]>shàng; +裳>shang; +[弰捎旓梢烧焼燒稍筲艄莦蛸輎髾]>shāo; +[㲈㸛勺杓牊玿竰韶]>sháo; +[㪢䒚䔠少]>shǎo; +[㷹䏴䙼䬰佋劭卲哨娋潲睄紹綤绍袑邵颵]>shào; +[奢檨譇賒賖赊輋]>shē; +[㭙㰒䁋䂠䞌佘揲舌虵蛇蛥鉈鍦铊]>shé; +[䬷捨舍騇]>shě; +[㒤㢵㴇䀅䁯䄕䌰䠶䤮䵥厍厙射弽慑慴懾摂摄攝欇涉渉滠灄猞社蔎蠂設设赦韘麝]>shè; +[伸侁兟呻妽姺娠屾峷扟柛氠深燊珅申砷籶籸紳绅胂葠薓裑訷詵诜身鉮駪鯵鲹鵢]>shēn; +[䰠什甚神神]>shén; +[㔤㜤㰂㵊㾕吲哂婶嬸审宷審弞渖瀋瞫矤矧覾訠諗讅谂谉邥頣頥魫]>shěn; +[㥲㰮㵕䆦侺愼慎抻昚椹涁渗滲瘆瘎瘮眒眘肾脤腎葚蜃鋠]>shèn; +[升呏声斘昇殅泩湦焺牲狌珄生甡甥笙聲苼鉎阩陞鵿鼪]>shēng; +[䱆憴晠溗畻繩绳譝鱦]>shéng; +[㗂㼳㾪䁞䚇䪿偗省眚箵]>shěng; +[䎴䞉剩剰勝圣墭嵊榺琞盛聖胜蕂貹賸]>shèng; +[䴓呞失尸屍师師施浉湤湿溮溼濕狮獅箷絁葹蒒蓍虱蝨褷襹詩诗邿釶鈟鉇鯴鰤鲺鳲鳾鶳鸤]>shÄ«; +[㖷㫑㵓䂖䖨䦹䶡乭十埘塒实実寔實峕时旹時榯湁湜溡炻石祏莳蒔蚀蝕遈鉐食飠饣鰣鲥鼫鼭]>shí; +[㕜㹬㹷䒨䦠乨使兘史始宩屎矢笶豕鉂駛驶]>shǐ; +[㒾㔺㮶㱁㸷㹝䁺䊓䏡䛈䟗䤱䩃䭄䰄世丗亊事仕似侍冟势勢卋卶叓呩嗜噬士奭嬕室崼市式弑弒忕恃戠戺拭揓是昰枾柹柿氏澨烒眂眎睗示筮簭翨舐舓襫視视試誓諟諡謚试谥豉貰贳軾轼适逝適遾釈释釋鈰鉃鉽銴铈飾餙餝饰鯷鳀齛𠀍]>shì; +[匙拾識识]>shi; +[収收荍]>shōu; +[㝊䭭垨守手掱艏首]>shǒu; +[㖟㥅䛵兽受售壽夀寿授涭狩獸璹痩瘦綬绶鏉]>shòu; +[书倏倐儵叔姝抒摅摴攄書杸枢梳樗樞橾殊殳疎疏紓綀纾舒蔬踈軗輸输陎鵨]>shÅ«; +[䃞䝪䴰埱塾孰尗掓淑焂熟秫菽虪襡贖赎跾鸀]>shú; +[㒔㟬㯮㳆㻿䑕䞖䠱䩳婌属屬暑潻癙盨署薥薯藷蜀襩钃黍鼠鼡]>shǔ; +[㛸㜐㣽㶖㷂㽰㾁䆝䉀䎉䘤䜹䝂䢤䩱侸凁墅尌庶庻恕戍数數曙朮术束树樜樹沭漱潄澍濖竖竪絉荗蒁術袕裋豎述鉥錰鏣鮛鶐]>shù; +[刷唰]>shuā; +耍>shuǎ; +誜>shuà; +[孈摔縗缞衰]>shuāi; +甩>shuǎi; +[䢦卛咰帅帥繂蟀]>shuài; +[拴栓閂闩]>shuān; +[䧠涮]>shuàn; +[双孀孇欆礵艭雙霜驦骦鷞鸘鹴]>shuāng; +[㼽䗮䫪塽慡樉爽縔騻]>shuǎng; +[㦼䡯灀]>shuàng; +[誰谁]>shuí; +æ°´>shuǐ; +[㽷䭨娷帨涗涚睡瞓祱稅税蛻蜕裞]>shuì; +[吮揗楯賰]>shǔn; +[㥧䀢䀵䑞橓瞚瞬舜蕣順顺鬊]>shùn; +[哾說説说]>shuō; +[䀥䈾䌃妁揱搠朔槊欶洬烁爍獡矟硕碩芍蒴鎙鑠铄]>shuò; +[丝偲凘厮厶司咝嘶噝媤廝思撕斯楒榹泀澌燍磃禗禠私簛籭糹絲緦纟缌罳蕬虒蛳蜤螄蟖蟴覗鉰鋖鐁颸飔騦鷥鸶]>sÄ«; +𥐘>sí; +æ­»>sǐ; +[㐌㕽㚶㣈㭒㸻㹑㾅䇃䎣䏤䦙亖佀俟儩兕嗣四姒娰孠寺巳杫柶汜泗泤洍涘瀃牭祀禩竢笥耜肂肆蕼貄賜赐釲鈻飤飼饲駟驷飼]>sì; +[倯凇娀崧嵩庺憽松枀柗梥檧淞濍硹菘蜙鍶锶鬆]>sōng; +[㧐㨦㩳䉥䜬傱嵷怂悚愯慫捒楤竦耸聳駷]>sǒng; +[㕬㮸䛦䢠宋訟誦讼诵送頌颂餸]>sòng; +[嗖廀廋捜搜摉溲獀艘蒐螋鄋醙鎪锼颼飕餿馊騪]>sōu; +[㖩㛐䈹䉤䏂䮟傁叜叟嗾擞擻櫢滫瞍籔薮藪]>sǒu; +[㵻瘶膄]>sòu; +嗽>sou; +[囌櫯甦稣穌苏蘇蘓酥]>sÅ«; +俗>sú; +[㑉㑛㓘㔄㕖㜚㝛㨞㩋㪩㬘㯈㴋㴑㴼䃤䅇䌚䎘䏋䑿䔎䘻䛾䥔傃僳嗉塐塑夙嫊宿愫愬憟栜榡樕橚殐泝涑溯溸溹潥玊珟璛碿窣簌粛粟素縤肃肅膆蓿蔌藗蜶觫誎謖谡趚速遡遬鋉餗驌骕鱐鷫鹔]>sù; +[訴诉]>su; +[狻痠酸]>suān; +[㔯匴]>suǎn; +[祘笇筭算蒜]>suàn; +[倠哸夊攵毸浽滖濉熣眭睢綏绥芕荽荾虽雖鞖]>suÄ«; +[㵦㻟䜔䢫遀隋随隨]>suí; +[䭉䯝巂瀡膸髄髓]>suǐ; +[㒸㞸㴚㻪㻽䅗䉌䍁䔹䠔䡵䥙亗埣嬘岁嵗旞檅檖歲歳澻煫燧璲瓍睟砕碎祟禭穂穗穟繀繸襚誶譢谇賥遂邃鐆鐩隧𡑞]>suì; +[孙孫搎槂狲猻荪蓀蕵薞飧飱]>sÅ«n; +[㔼㡄㦏䁚损損榫笋筍箰簨鎨]>sǔn; +愻>sùn; +[傞唆嗍娑挱挲摍桫梭樎簑簔縮缩莏蓑趖蹜]>suō; +[㪽䂹䅴䈗䐝䖛䗢䞆䞽䣔䵀唢嗩所摵擌暛洓溑琐瑣璅瘷索褨鎍鎖鎻鏁鏼锁]>suǒ; +逤>suò; +嗦>suo; +[他嚃塌她它祂禢]>tā; +[㗳㺚塔墖榙]>tǎ; +[㒓㛥㣛㣵㧺㭼㯓㳠㳫㹺㿹䂿䈋䈳䌈䍇䍝䎓䑜䓠䜚䵬䶀䶁亣嗒嚺崉挞搨撻榻橽毾沓涾溻澾濌狧獭獺羍誻譶跶踏蹋蹹躂躢遝遢錔鎉鑉闒闥闼阘鞜鞳鮙鰨鳎龖龘]>tà; +[囼孡胎]>tāi; +[㒗㘆㙵㣍㬃㷘㸀䈚䑓䢰儓冭台坮嬯抬擡旲檯炱炲籉臺苔菭薹跆邰颱駘骀鮐鲐]>tái; +[㑷㥭䣭太夳忲态態曃汰泰溙燤肽舦酞鈦钛]>tài; +[啴嘽坍怹抩摊擹攤橝滩灘瘫癱緂舑舚譠貪贪]>tān; +[㲜㷋㽑䃪䉡䊤䕊倓嘾坛墰墵壇壜婒惔憛昙曇榃檀潭痰罈罎艢藫覃談譚谈谭貚郯醈醰錟鐔锬镡餤驔]>tán; +[㲭䆱䏙䞡䦔嗿坦忐憳憻毯璮禫膻菼袒襢贉醓黮]>tǎn; +[䐺䜖傝僋叹嘆埮探歎湠炭碳賧赕]>tàn; +[劏嘡坣汤湯羰蝪蹚鏜镗鼞]>tāng; +[㑽㙶㜍㭻㲥㼺䅯䉎䌅䣘䧜傏唐啺堂塘搪摚棠榶樘橖溏漟煻瑭磄禟篖糃糖糛膅膛蓎薚螗螳赯踼鄌醣鎕闛隚餹饄鶶]>táng; +[㒉㿩伖倘偒傥儻帑惝戃曭淌爣矘耥躺鎲钂镋𢠵]>tǎng; +[䟖摥烫燙趟鐋铴]>tàng; +[叨嫍弢慆掏搯槄洮涛滔濤瑫絛縚縧绦翢蜪詜謟轁鞱韜韬飸饕]>tāo; +[㹗䬞匋咷啕桃梼檮淘祹綯绹萄裪迯逃醄鋾錭陶鞀鞉饀駣騊鼗]>táo; +[䚯䚵䵚討讨]>tǎo; +[㚐套]>tào; +[㥂㧹忑忒慝棏特脦蚮蟘貣鋱铽鴏]>tè; +[膯鼟]>tēng; +[䒅䕨䠮䲍䲢儯幐滕漛疼籐籘縢腾蕛藤螣誊謄邆駦騰驣鰧]>téng; +[䴘剔梯踢鷈鷉]>tÄ«; +[㖒㡗㣢䅠䔶䚣䛱䝰䣡䨑䬾偍厗啼嗁媂媞崹惿提漽珶瑅碮禔禵稊綈緹绨缇罤荑蝭褆謕趧蹄蹏遆醍鍗隄題题騠鮷鵜鶗鶙鹈鼶]>tí; +[䌡䣽䪆䶏体挮躰軆骵體]>tǐ; +[㗣㬱㯩䎮䙗䧅䯜䶑俤倜剃嚏嚔悌悐惕惖掦揥替歒殢涕睼籊薙褅趯迏逖逷銻鐟锑髢髰鬀鬄]>tì; +[屉屜]>ti; +[倎兲天婖沗添酟靔靝黇]>tiān; +[㧂䑚䟧䡒䡘䥖嗔塡填屇恬搷沺湉璳甛甜田畋畑盷窴胋菾闐阗鷆鷏]>tián; +[㐁㖭㙉㥏䄼䄽䐌䠄䣯䩄唺忝悿晪殄淟睓腆舔覥觍賟錪鍩锘靦餂]>tiǎn; +[㮇㶺掭煔]>tiàn; +[頲颋]>tian; +[佻庣恌挑旫祧聎蓨鮡]>tiāo; +[㑿㟘䎄䒒䖺䟭䩦䯾䱔䳂岧岹条條樤祒笤芀苕萔蜩趒迢鋚鎥鞗髫鰷鲦齠龆]>tiáo; +[㸠䠷嬥宨晀窕誂]>tiǎo; +[朓眺窱粜糶絩脁覜跳]>tiào; +[呫帖怗萜貼贴]>tiē; +[䥫鉄銕鋨鐡鐵铁锇驖鴩]>tiě; +[䴴䵿蛈飻餮]>tiè; +[厅厛听圢庁廰廳桯汀綎耓耵聴聼聽艼鞓]>tÄ«ng; +[㹶䗴䱓亭停婷嵉庭廷朾楟榳渟筳聤莛葶蜓蝏諪邒閮霆鯅鼮]>tíng; +[䋼䦐䵺侹挺梃涏烶珽町甼脡艇誔鋌铤]>tǐng; +[嗵恫樋炵熥狪痌蓪通]>tōng; +[㠉㠽㣚㣠㤏㮔㸗㼧㼿䂈䆚䮵䳋䴀䶱仝佟侗僮勭同哃峂峒峝庝彤晍曈朣桐氃浵潼烔燑爞犝獞瞳砼硐秱穜童筩粡絧罿膧艟茼蕫蚒詷迵酮鉖鉵銅铜餇鮦鲖鼨]>tóng; +[㛚㪌䆹姛捅桶筒統綂统]>tǒng; +[恸慟憅痛蘣衕]>tòng; +[偷偸婾媮鍮]>tōu; +[㓱㡏㢏䵉亠匬坄头投牏酘頭骰]>tóu; +[㪗䱏妵斢紏鈄钭黈]>tǒu; +[㖣䞬䟝透]>tòu; +[凸堗嶀廜捸涋痜禿秃突鋵]>tÅ«; +[㭸㻌㻠㻬㻯䅷䖘䠈䣄䣝䤅䳜凃図图圖圗塗宊屠峹嵞庩徒怢捈揬梌湥潳瑹瘏稌筡腯荼葖蒤跿途酴鈯鍎馟駼鵚鶟鷋鷵鼵]>tú; +[吐唋土圡芏釷钍]>tǔ; +[兎兔堍菟鵵]>tù; +涂>tu; +[湍煓猯貒]>tuān; +[㩛䊜剸团団團慱抟摶槫漙糰鏄鷻]>tuán; +[䜝䵯畽疃黗]>tuǎn; +[彖褖]>tuàn; +[推蓷藬]>tuÄ«; +[㢈㢑㾯㾽㿉㿗䀃䅪䍾䫋尵弚橔穨蘈蹪隤頹頺頽颓魋]>tuí; +[㞂㱣㾼俀僓腿蹆骽]>tuǐ; +[㦌㷟娧煺退駾]>tuì; +[吞呑啍噋旽暾朜涒炖焞]>tÅ«n; +[㞘㩔㹠㼊坉屯忳臀臋芚訰豘豚軘霕飩饨魨鲀]>tún; +[㖔氽]>tǔn; +褪>tùn; +[仛佗侂侻咃托扥拕拖挩捝杔汑沰涶牠矺脫脱託讬飥饦馲驝]>tuō; +[㸰㸱㼠㾃䍫䡐䪑䭾䰿䴱坨堶岮沱沲狏砣砤碢紽袉詑跎迱酡阤陀陁鞁馱駄駞騨驒驮魠鮀鴕鸵鼉鼍鼧]>tuó; +[㟎䓕䲊妥媠嫷庹彵撱椭楕橢軃鰖鵎]>tuǒ; +[唾拓柝槖橐毤毻箨籜萚蘀跅]>tuò; +[駝驼]>tuo; +[劸嗗娲媧徍挖搲攨洼溛漥畖穵窊窪聉蛙鼃]>wā; +[㰪娃]>wá; +[㧚㼘佤咓瓦邷]>wǎ; +[䎳䚴䠚嗢婠淴腽膃袜襪韈韤]>wà; +哇>wa; +[㖞咼喎歪]>wāi; +[䠿外懀]>wài; +[剜帵弯彎湾潫灣蜿豌]>wān; +[㝴䯈丸刓完抏汍烷玩琓紈纨芄頑顽]>wán; +[㜶㽜㿸䂺䅋䖤䗕䘼䛷䝹䩊䳃倇埦婉宛惋挽晚晩晼梚椀浣澣琬畹皖盌睌睕碗綩綰绾脕莞菀萖踠輓鋄鋔錽鞔鯇鲩]>wǎn; +[㸘䥑万仴卍卐忨捥綄翫腕萬蟃貦贎鎫]>wàn; +[㑌尢尣尩-尫汪]>wāng; +[亡亾仼兦彺王莣蚟]>wáng; +[㓁㲿㳹㴏䋄䋞䰣往徃忹惘暀棢瀇網网罒罔菵蛧蝄誷輞辋迬魍]>wǎng; +[䛃䤑妄忘旺望朢迋]>wàng; +枉>wang; +[倭偎危喴威媁媙崴巍微愄揋椳楲渨溾烓煨燰碨萎葨葳蝛覣詴逶隇隈鰃鰄鳂]>wēi; +[㕒㣲㧑䉠䑊䔺䜅䝐䥩䧦唯囗囲围圍圩壝峗峞嵬帏帷幃惟桅欈沩洈涠湋溦潍潿濰瀢琟癓矀維维蒍蔿薇覹违違鄬醀鍏闈闱霺韋韦鮠]>wéi; +[㖐㞇㞑㟪㠕㢻㨊㬙㭏㱬䃬䈧䞔䪘䬐䬿䵋亹伟伪偉偽僞儰喡委娓寪尾崣嵔徫愇斖暐梶椲洧浘濻炜煒猥玮瑋痏痿硊磈緯纬腲艉芛苇荱葦蓶薳蘤蜲諉诿踓鍡隗韑韙韡韪頠颹骩-骫鮪鲔]>wěi; +[㥜㦣㷉䗽䘙䙿䜜䡺䪋䬑䭳䮹䲁䵳为位卫叞味喂媦嬒尉徻慰未渭為煟熭爲犚犩畏硙磑緭罻胃苿菋蔚薉藯蘶蜼螱衛衞褽謂讆讏谓贀躗躛軎轊錗鏏霨餧餵魏鮇鳚]>wèi; +[猬蝟]>wei; +[塭昷殟温溫瑥瘟瞃豱輼轀辒馧鰛鰮鳁]>wēn; +[䎹䎽䘇䰚彣文炆玟珳琝瘒紋纹聞芠蚉蚊螡蟁閿闅闦闻阌雯馼魰鳼鴍鴖鼤]>wén; +[㒚㖧㗃㝧㳷刎吻呡桽稳穏穩肳脗]>wěn; +[伆問妏抆揾搵汶渂熓璺紊莬问]>wèn; +[嗡嵡翁螉鎓霐鶲鹟]>wēng; +[㘢㜲䐥䤰勜塕奣暡浻滃瞈聬蓊]>wěng; +[瓮甕罋齆𦧅]>wèng; +[唩涡涹渦猧窝窩莴萵蜗蝸踒]>wō; +[㦱㧴䰀婑我捰]>wǒ; +[㠛㱧䁊䠎偓卧幄捾握斡楃沃涴渥濣焥肟臥蒦齷龌]>wò; +[乌剭呜嗚圬媉屋巫弙杇歍汙汚污洿烏瑦窏箼腛螐誣诬邬鄔鰞鴮鼿]>wÅ«; +[㷻㹳㻍䍢䦜䫓䮏吳吴吾呉唔娪无梧毋洖浯無牾珸璑祦禑膴芜茣莁蕪蜈誈郚鋘鋙铻鯃鵐鷡鹀麌鼯]>wú; +[㐅㑄㬳㵲䒉䟼䡧䳇五仵侮倵儛午啎墲妩娒娬嫵嵨庑廡忤怃憮捂摀旿橆武潕玝珷甒碔舞躌鵡鹉]>wǔ; +[㐳㡔㽾䃖䎸䑁䛩䦍䳱俉兀勿卼坞垭塢奦婺寤屼岉嵍忢悞悟悮戊扤敄晤杌沕溩焐熃物痦矹窹粅芴蘁誤误迕逜遻鋈鎢钨阢隖雾霚霧靰騖骛齀兀]>wù; +[伍务務]>wu; +[䂀俙傒僁僖兮凞卥厀吸唏唽嘻噏夕奚娭媐嬆嬉屖嵠嶲巇希徆徯忚怷怸恓悉悕惁惜扱扸捿擕晞晰曦析桸榽樨橀欷歖氥浠淅溪潝烯焈煕熄熈熙熹-熻燨爔牺犀犧琋瓗皙睎睳瞦硒禧稀窸糦縘繥羲肹膝舾莃菥蒵蜥螅螇蟋蠵覀觹觽觿譆谿豀豨豯貕蹊酅醯錫鏭鑴锡隵雟騱驨鵗黊鼷凞𥋟]>xÄ«; +[㔒㠄㤴㦻㩗㳧㵿㽯㿇䀘䏮䫣习媳嶍席昔棤椺槢檄欯漝焟焬獥瘜習蒠蓆薂袭裼襲覡觋謵趘郋鎴钖隰霫飁騽鰼鳛]>xí; +[䢄匸喜囍壐屣徙憘憙敼暿枲洗漇狶玺璽矖簁縰纚葈葸蓰蟢諰蹝躧酾釃霼鱚]>xǐ; +[㑶㙾㚛㞒㣟㤸㥡㭡㸍㹫䈪䊠䐼䓇䙽䚷䛥䜁䧍䨳䩤䮎䲪係卌呬咥喺嚊嚱墍屃屓屭忥怬恄戏戯戱戲晳椞歙汐滊潟澙熂犔盻矽磶禊稧穸系細綌繋繫细绤翕翖肸舃舄蕮虩衋覤謑赥赩郄郤鄎釳釸鎎闟阋隙隟餼饩鬩黖齂]>xì; +[息西]>xi; +[傄呷煆煵疨瞎虾蝦谺鍜閕颬]>xiā; +[㗇㘡㰺㽠䖎䖖䘥䛅䦖䪗䫗侠俠冾匣峡峽搳敮暇柙炠烚狎狭狹珨瑕硖硤碬磍祫笚筪縀縖翈舝蕸赮轄辖遐鎋陜霞騢魻鰕黠]>xiá; +閜>xiǎ; +[㗿㙤丅下吓嚇夏夓懗欱疜睱罅芐鏬鶷]>xià; +[仚僊先嘕奾嬐孅屳廯忺憸掀掺摻暹杴枮氙澖珗祅祆秈籼纎纖纤苮蓒蘐褼襳訮跹蹮躚酰銛鍁铦锨韯韱馦鮮鱻鲜]>xiān; +[㘅㘋㛾㡉㢺㭹㮭㳄㳭㵪䒸䕔䝨䦥䲗䶢咸唌啣嗛娴娹婱嫌嫺嫻弦憪涎燅甉痃痫癇癎瞯瞷礥絃羬胘舷葴藖蚿蛝衔衘諴賢贒贤輱銜閑閒闲鷳鷴鷼鹇鹹]>xián; +[㜪㧋㧥㫫㬎㭠㯀㶍㿅䉳䗾䘆䚚䜢䢾䥪䧋䧮冼尟尠崄嶮幰搟攇显櫶毨灦烍燹狝猃獫獮玁癣癬礆禒筅箲藓蘚赻跣銑鍌铣险険險韅顕顯鼸齴]>xiǎn; +[㔵㡾㦓㩈㪇㬗㺌䀏䁂䃱䃸䉯䏹䞁䤼䧟䨘䨷䱤䵇䶟伣俔僩僴县咞哯垷姭娊宪岘峴憲撊晛橌涀瀗献獻现現県睍粯糮絤綫線縣线缐羡羨腺臔臽苋莧蚬蜆袨誢豏轞鋧錎限陥陷霰餡馅麲𠜎]>xiàn; +仙>xian; +[㐮乡厢啌廂忀欀湘瓖相箱緗纕缃膷芗葙薌襄郷鄉鄊鄕鑲镶香驤骧麘]>xiāng; +[㟄䔗䜶佭庠栙祥絴翔詳详跭祥]>xiáng; +[㗽䊑䖮享亯响奛嶑想晑響飨餉饗饟饷鮝鯗鱶鲞]>xiǎng; +[㟟䐟䢽像向嚮塂巷恦曏橡珦萫蚃蟓蠁襐象鐌闀闂項项鱌]>xiàng; +[呺哓哮啋嘋嘐嘵嚣嚻囂婋宯宵庨彇憢撨枭枵梟櫹歊毊消潇潚瀟灱灲烋焇獢痚痟硝硣穘窙箫箾簘簫綃绡翛膮萧萷蕭藃虈虓蟏蟰蠨踃逍銷销霄驍骁髇魈鮹鴞鸮]>xiāo; +[㑾㚣㬵䒝洨笅訤誵郩]>xiáo; +[䒕䥵小晓暁曉皢筱筿篠謏]>xiǎo; +[㔅㗛㤊㹲䊥䕧俲傚効咲啸嘨嘯娎孝恔效敩斅斆校歗涍熽笑肖藠誟鞩]>xiào; +[些歇猲薛蠍褉]>xiē; +[㖿㙝㥟㨙㩉㩦㩪㭨䔑䕵䙎䡡䭎偕劦勰协協嗋垥奊恊愶慀拹挟挾搚携撷擷攜斜旪熁燲籺絜綊緳纈缬翓胁脅脇脥膎蝢衺襭諧谐邪鋣鞋鞵龤𩋘𩋧]>xié; +[㕐㝍䥱䥾写冩寫藛躠]>xiě; +[㒠㓔㔎㖑㙰㞕㣯㣰㦪㨝㰔㰡㳦㳿㴬㴮㴽㸉㽊䉏䉣䊝䕈䙊䙝䚳䚸䢡䦏䦑䩧䲒䵦亵伳偰卨卸塮妎媟屑屟屧嶰廨徢懈揳斺暬械楔榍榭泄泻洩渫澥瀉瀣灺焎燮爕獬疶祄禼糏紲絏絬緤绁缷薤蟹蠏衸褻謝谢躞邂鞢韰駴骱齘齥]>xiè; +[䜣俽兓噷妡廞心忻惞新昕杺欣歆炘盺芯莘薪訢辛鈊鋅鑫锌馨騂骍]>xÄ«n; +[㚯䰼攳樳襑鄩]>xín; +伈>xǐn; +[㐰㛛㭄䒖䚱䛨䜗伩信卂囟孞焮煡脪舋衅訫軐釁阠顖馸]>xìn; +[垶惺星曐煋猩瑆皨篂腥蛵觪觲鍟馫鮏鯹]>xÄ«ng; +[㐩㓝㣜㼛䣆䤯侀刑坓型娙形洐濴烆硎筕胻行邢郉鈃鉶銒鋞钘铏陉陘雽餳饧]>xíng; +[㝭㨘㮐䳙擤渻睲醒]>xǐng; +[㓑㼬䁄䂔䓷䛭䰢倖兴姓婞嬹幸性悻杏涬緈臖興荇莕]>xìng; +[㐫兄兇凶匈哅忷恟汹洶胷胸訩詾讻賯]>xiōng; +[䧺熊赨雄]>xióng; +[夐敻詗诇]>xiòng; +[休俢修咻庥樇烌羞脩臹茠蓚貅銝鎀鏅饈馐髤髹鵂鸺]>xiÅ«; +[㱙朽糔綇]>xiǔ; +[㗜㾋嗅嘼岫峀溴珛琇秀綉繍繡绣袖褎褏銹鏥鏽锈齅]>xiù; +[偦吁呴嘘噓墟媭嬃嬬幁戌揟旴晇楈欨欰歔歘疞盱稰籲縃繻胥蕦虗虚虛蝑訏譃鑐需須须驉鬚魖]>xÅ«; +[䍱俆徐蒣]>xú; +[㑔㑯㞰㥠䅡䔓冔喣姁昫栩湑煦珝糈許詡諝许诩谞鄦醑]>xǔ; +[㐨㕛㖅㗵㘧㚜㜅㜿㞊㤢㦽㰲㵰㷦㺷㾥䂆䋶䘏䙒䛙䜡䢕䣱䣴䦗䦽䬔䱛䳳伵侐勖勗卹叙垿壻婿序怴恤慉敍敘旭-旯朂槒殈汿沀洫溆漵潊烅珬盢瞁瞲稸窢絮緒緖續绪续聟芧蓄藇藚訹賉酗銊頊顼魆魣鱮]>xù; +[佡儇吅咺塇媗宣弲愃愋揎昍晅暄梋煊瑄睻矎禤翧翾萱蕿藼蝖蠉諠諼譞谖軒轩鋗鍹鶱]>xuān; +[㘣㳬㹡䁢䗠䮄䲂䲻䴉䴋伭妶嫙悬懸旋暶檈漩玄玹琁璇璿蜁誸鹮]>xuán; +[㾌䍻䠣喧暅烜选選]>xuǎn; +[㧦㳙䍗䘩䝮䧎䩙䩰埍怰昡楥楦泫渲潠炫眩眴碹絢縼繏绚蔙衒讂贙鉉鏇铉镟鞙颴駽]>xuàn; +[削吙屵蒆辥靴鞾]>xuē; +[㖸㧒㶅㿱䫻䱑乴学學峃嶨斈泶澩燢茓觷雤鷽鸴𥄴]>xué; +[㡜䨮雪鱈鳕]>xuě; +[㞽䎀䤕䫼䬂䭥吷坹岤桖泬烕穴血謞趐]>xuè; +[勋勛勲勳坃埙塤壎壦曛焄熏燻獯矄纁臐蔒薫薰蘍醺𤑕]>xÅ«n; +[㜄㝁㨚㰊㰬㽦䋸䖲䙉偱噚寻尋峋巡廵循恂挦撏旬杊枔栒桪槆橁毥洵浔潃潯灥燖珣璕畃紃荀荨蕁蟳詢询郇馴駨驯鱏鱘鲟]>xún; +[㢲䛜䞊䭀伨侚噀埈奞巺巽徇殉汛爋狥蕈訊訙讯賐迅迿逊遜鑂陖韗顨鵔鵕]>xùn; +[訓训]>xun; +[丫劜压圧壓孲庘押椏鴉鴨鵶鸦鸭]>yā; +[㧎䄰䊦伢厓堐岈崕崖枒桠涯漄牙犽猚笌芽蚜衙齖]>yá; +[㿿䪵厊哑唖啞庌痖瘂蕥雃雅]>yǎ; +[㝞㰳䅉䝟䢝䦪䯉䰲䵝亚亜亞俹嚈圠埡娅婭挜掗揠氩氬猰玡砑稏窫聐襾訝讶軋轧迓錏鐚铔齾]>yà; +呀>ya; +睚>yái; +[偣剦啱嫣嬮崦懕懨淹漹烟焉煙猒珚篶胭臙菸蔫鄢酀醃閹阉黭]>yān; +[㗴㘖㘙㫟㳂㶄㿕㿼䀋䀽䂴䇾䊙䌪䓂䕾䖗䗡䢥䤷䱲䶮严厳嚴埏塩壛壧妍姸娫娮孍岩嵒嵓巌巖巗延揅昖楌檐櫩沿湺炎狿琂盐研硏碞礹筵簷綖莚葕蔅虤蜒言詽讠郔鈆閻阎顃顏顔颜鹽麙麣]>yán; +[㓧㕣㚧㢂㫃㭺䁙䄋䊻䎦䗺䣍䲓乵俨偃儼兖兗剡匽厣厴噞夵奄姶嵃嶖巘巚弇愝戭扊抁掩揜曮棪椼檿沇渰渷演琰甗眼硽罨萒蝘衍裺褗躽遃郾酓隒験魇魘鰋鶠黡黤黶鼴鼹龑]>yǎn; +[㛪㢛㦔㬫㷔㷳㷼䂩䅧䑍䜩䢭䨄䭘䳛䳺䴏偐傿厌厭咽唁喭嚥堰墕妟姲婩嬊嬿宴彥彦恹敥晏暥曣椻滟灎灔灧灩焔焰焱燄燕爓牪砚硯艳艶艷覎觃觾諺讌讞谚谳豓豔贋贗赝酽醼釅閆闫隁雁餍饜騐騴驗驠验鳫鴈鴳鷃鷰]>yàn; +[佒咉央姎柍殃泱眏秧紻胦鉠鴦鸯]>yāng; +[㟅㬕䁑䖹䬗佯劷垟崵徉扬揚敭旸昜暘杨楊洋炀烊煬玚珜瑒疡瘍眻禓羊羏蛘諹輰鍚鐊阦阳陽霷颺飏鰑鸉]>yáng; +[㔦䇦䑆䒋䬬仰傟养勨坱岟慃懩抰攁氧氱炴痒癢蝆鞅養餋駚]>yǎng; +[㨾㺊㿮䬺䭐䵮怏恙样様樣漾瀁羕詇]>yàng; +[吆喓妖幺枖楆腰葽訞邀]>yāo; +[㨱㮁䂚䆙䉰䋂䌊䌛䍃䔄䖴䚺䚻䢣䬙倄傜嗂垚堯姚媱尧尭峣崤嶢嶤徭愮揺搖摇暚榣殽淆烑爻猇猺珧瑤瑶窑窯窰肴蘨謠謡谣軺轺遙遥邎銚铫颻飖餆餚鰩鳐𨍳]>yáo; +[㟱㢓㫏㫐㴭䁏䁘䆞䴠䶧仸偠咬夭婹宎岆崾抭杳柼榚殀溔眑窅窈窔舀苭蓔闄騕鷕鼼齩]>yǎo; +[㔽㝔㞁㵸㿑㿢䋤䑬䙅曜熎燿獟矅穾筄耀艞药葯薬藥袎要覞讑趭鑰钥靿鷂鹞]>yào; +[倻噎晔蠮]>yē; +[䓉䥺峫捓揶擨椰琊瑘耶釾鎁铘]>yé; +[㙒也冶吔嘢埜壄漜野]>yě; +[㐖㖡㖶㗼㙪㝣㥷㩎㪑㱉㸣䈎䤳䤶䥟䥡䧨䭟䲜业亱偞僷叶啘墷夜嶪嶫忦擛擪擫曄曅曗曵枼枽楪業殗殜液澲烨煠燁爗皣瞱瞸葉謁譺谒邺鄴鍱鎑鐷靥靨頁页餣饁馌驜鵺鸈]>yè; +[爷爺]>ye; +[㘈一伊依医吚咿噫壱壹夁嫛弌悘揖檹欹毉泆洢溰漪燚猗瑿祎禕稦繄蛜衣譩郼醫陭餏饻鷖鹥黟黳𣘦]>yÄ«; +[㚦㝖㞔㥴㦾㰘㺿䄬䇵䐅䐖䖊䞅䩟䬁䬮䮊䱌䲑䴊乁仪侇儀冝凒匜咦圯夷姨宐宧寲峓嶬巸弬彛-彞怡恞扅暆杝枱柂桋椸歋沂沶洟熪珆瓵疑痍眤眱移簃羠胰苐萓蛦螔袘袲觺訑詒謻讉诒貤貽贻跠迻遗遺酏鈶鏔頉頤顊颐飴饴鮧鴺鸃]>yí; +[㕥㠯㩘㫊㰝㰻䝝䧧䰙乙以倚偯崺已庡扆扡掜攺旑旖晲栘椅檥矣礒笖肔胣舣艤苡苢蚁螘蟻衪輢轙迆迤逘釔鉯銥钇铱顗鳦齮]>yǐ; +[㐹㑊㑜㑥㓷㔴㖂㘁㘊㙠㙯㚤㛕㜋㜒㡫㡼㢞㣂㣻㦉㦤㱅㱲㲼㳑㴁㴒㵝㵩㶠㹓㹭㽈䄁䄿䆿䇩䉨䋚䋵䌻䎈䓃䓈䓹䔬䕍䖁䗑䗟䗷䘝䘸䝘䝯䢃䣧䦴䬥䭂䭇䭞䭿䯆䱒䴬乂义亄亦亿仡伇伿佚佾俋億兿刈劓劮勚勩呓呭呹唈嗌囈圛垼埶埸墿奕嫕嬑嬟寱屹峄嶧帟帠幆廙异弈弋役忆怈怿悒悥意憶懌懿抑抴挹捙掖撎敡斁易晹曀曎曳杙枍枻栧棭榏槷檍欭歝殔殪殹毅洂浂浥浳湙溢潩澺瀷炈焲熠熤熼燡燱獈玴異疫痬瘗瘞瘱癔益睪瞖秇穓竩緆縊繶繹绎缢羛義羿翊翌翳翼肄肊腋膉臆艗艺芅苅蓺薏藙藝蘙虉蛡蜴螠袣裔裛褹襼訲訳詍詣誼譯議讛议译诣谊豙豛豷跇軼轶逸邑醳醷釴鈠鎰鐿镒镱阣隿霬靾鞥顡饐駅驛驿骮鯣鶂鶃鷧鷾黓齸益逸𥜥]>yì; +宜>yi; +曕>yiàn; +鴁>yiāo; +[侌凐喑噾囙因垔堙姻婣峾廕愔慇摿歅殷氤洇洕湮溵瘖禋秵筃絪緸茵蒑裀諲銦铟闉阥阴陰陻隂霒霠鞇音韽韾駰骃黫]>yÄ«n; +[㕂㖗㙬㝙㞤㸒㹜㹞䓄䖜䪩冘吟唫噖嚚圁垠夤婬寅崟崯斦檭殥泿淫滛烎犾狺璌碒苂荶蔩蟫訔訚訡誾鄞釿鈝銀银霪鰥鳏鷣]>yín; +[㐆㡥㥯㥼㦩㧈㱃㾙䇙䌥䒡䤺䨸乚尹嶾廴引檃櫽淾濦瘾癮磤紖縯纼蘟蚓螾讔趛鈏隐隠隱靷飮飲饮馻]>yǐn; +[㣧㪦㴈㼉䕃䚿䡛䤃䲟印垽堷慭憖憗懚朄檼湚濥猌癊窨胤茚荫蔭酳鮣]>yìn; +[偀嘤嚶婴媖嫈嬰孆孾应応應撄攖朠桜楧樱櫻渶煐瑛璎瓔甇甖碤礯緓纓绬缨罂罃罌膺英莺蘡蝧蠳褮譻鍈鑍锳霙韺鴬鶧鶯鷪鷹鸎鸚鹦鹰]>yÄ«ng; +[㢍㨕㴄㵬㹙㹚㿘䁝䃷䑉䕦䪯僌営塋嬴巆廮攍楹櫿溁滎潆濙濚瀛瀠瀯熒營瑩盁盈籝籯縈茔荥荧莹萤-萦萾藀蛍蝿螢覮謍贏赢迎]>yíng; +[㯋㲟䀴䨍䭊䭗巊影梬浧潁瀴璄瘿癭矨穎郢頴颍颕颖]>yǐng; +[㑞䁐䙬䤝噟媵摬映暎滢瀅硬膡蓥譍賏鎣鐛鞕]>yìng; +[蝇蠅]>ying; +[哟唷喲]>yō; +[㐯傭嗈噰墉壅庸廱慵拥擁澭瀜灉痈癕癰蕹邕郺鄘鏞镛雍雝饔𠆌]>yōng; +[㝘䗤喁嫆嫞槦滽牅顒颙鱅鳙]>yóng; +[㙲㦷㷏㽫䞻俑傛勇勈咏埇塎嵱彮恿悀惥愑愹慂搈柡栐永泳涌湧甬禜臃蛹詠踊踴鯒鲬]>yǒng; +[㞲㶲佣用苚醟]>yòng; +[优優呦嚘幽忧怮悠憂攸櫌瀀纋耰鄾麀]>yōu; +[㒡㕱㘥㚭㛜㫍㳺㻀㽕䑻䖻䚃䢊䢟囮尤峳怣斿楢櫾沋油浟游滺犹猶猷由疣秞肬莤莸蕕蚰蝣訧輏輶逌逰遊邮郵鈾铀駀魷鮋鯈鱿鲉]>yóu; +[㮋㰶㾞䅎䒴䬀䱂䳑丣偤卣唀岰庮懮有栯梄槱泑湵牖禉羐羑聈苃莠蚴蜏酉銪铕黝]>yǒu; +[㓜㕗㤑㹨㺠䀁䆜䛻䞥亴佑侑又右囿姷宥峟幼柚牰狖祐糿誘诱貁迶酭釉鴢鼬]>yòu; +友>you; +[唹扜毹毺淤瘀盓穻箊紆纡虶迂迃陓]>yÅ«; +[㒜㚥㤤㥔㥚㥥㦛㪀㬂㬰㳛㶛㷒㺞㺮㼶䁩䂛䃋䄏䄨䍂䏸䐳䔡䗨䜽䢓䩒䰻䱷䲣于亐伃余俞兪堣堬妤娛娯娱媀嬩崳嵎嵛愉愚扵揄於旟杅桙楡楰榆欤歈歟歶渔渝湡漁澞狳玗玙瑜璵畬畭畲盂睮硢禺窬竽籅緰羭腧腴臾舁舆艅茰萸蕍蘛虞蝓螸衧褕覦觎諛謣谀踰輿轝逾邘鄃釪鍝隃隅雓雩餘馀骬髃魚鮽鰅鱼鵌鷠鸆鸒]>yú; +[㑨㒁㔱㙑㝢㠘㡰㣃㲾㺄㼌䣁䥏䨞与予伛俁俣偊傴噳圄圉宇寙屿峿嶼庾懙敔斔斞楀瑀瘐祤禹窳篽羽聥與萭蓹蘌螤語语貐鄅酑雨齬龉羽]>yǔ; +[㠨㳚㽣䁌䂊䆷䈅䉛䋖䍞䖇䘘䘱䛕䢩䨒䬄䮇䮙䴁䵫俼哊喅喐喩喻噊圫域堉墺妪嫗寓峪嶎庽彧御忬悆悇惐愈慾戫昱棛棜棫櫲欎欝欥欲毓汩浴淢淯滪澦灪焴煜燏燠爩狱獄獝玉琙瘉癒矞砡硲礇礖礜禦秗稢稶穥籞緎繘罭聿肀育芋芌茟萮蒮蓣蕷薁蜟蜮裕誉諭譽谕豫軉輍逳遇遹郁醧鈺銉鋊錥鐭钰閾阈隩霱預预飫饇饫馭騟驈驭鬰鬱鬻魊鳿鴥鴪鵒鷸鹆鹬黦龥]>yù; +[冤剈噮囦嬽寃悁惌棩淵渁渆渊渕灁眢箢肙葾蒬蜎蜵裷鋺駌鳶鴛鵷鸢鸳鹓鼘鼝]>yuān; +[㟶㥳㹉䖠䬧䲮䳒䳣元原厡厵员員园圆圎園圓圜垣塬妧媴嫄岏援杬榞榬橼櫞沅湲源溒爰猨猭猿獂笎緣縁缘羱芫萲蒝薗蚖蝝蝯螈袁貟贠轅辕邍邧鎱騵魭鶢鶰黿鼋]>yuán; +[䛄䛇䩩妴远逺遠]>yuǎn; +[㤪㥐㭇䅈䏍䬇䬼傆夗媛怨愿掾瑗禐苑衏裫褑褤謜院願]>yuàn; +[曰曱箹約约]>yuē; +[哕噦]>yuě; +[㜧㜰㬦㰛㹊䋐䖃䟠䠯䡇䢁䢲䤦䥃䶳刖妜岄岳嶽恱悅悦戉抈捳月枂樾泧瀹爚狘玥礿禴篗籆籥籰粤粵蘥蚎蚏越跀跃躍軏鈅鉞钺閱閲阅鸑鸙龠]>yuè; +[奫晕暈氲氳煴緼縕缊蒀蒕蝹贇赟]>yÅ«n; +[㚃㜏䉙䢵云勻匀妘愪昀榅榲橒沄涢溳澐熅熉畇眃秐筠筼篔紜縜纭耘耺芸荺蒷蕓郧鄖鋆雲饂]>yún; +[䆬䇖䞫䡝䤞䦾䨶䪳傊允喗抎殒殞狁玧磒褞賱輑鈗阭陨隕霣]>yǔn; +[㚺㞌㟦䚋䩵䲰䵴囩夽孕恽惲愠慍枟熨緷腪蕰蕴薀藴蘊运運郓鄆酝醖醞韞韫韵韻鶤]>yùn; +[匝咂帀抸沞迊鉔]>zā; +[䕹䞙䪞偺囐嶻杂砸磼襍雑雜雥韴魳]>zá; +[咋鮺鲝]>zǎ; +[哉栽渽災灾烖賳𢦏]>zāi; +[㞨㱰㴓䏁䣬䮨宰崽縡]>zǎi; +[䵧侢傤儎再在扗載载酨]>zài; +[兂簪簮鐕]>zān; +[倃咱喒糌]>zán; +[㤰儧儹噆寁拶撍攅攒攢昝桚沯礸禶趱趲]>zǎn; +[㜺㟛㣅囋暂暫欑濽灒瓉瓒瓚穳襸讃讚賛贊赞鄼酂酇錾鏨]>zàn; +[匨牂羘臜臢蔵賍賘贓贜赃髒]>zāng; +臧>záng; +[駔驵]>zǎng; +[㘸塟奘弉脏臓臟葬銺]>zàng; +[傮糟蹧遭]>zāo; +[䥣凿醩鑿]>záo; +[䲃早枣棗澡璪繰缲薻藻蚤]>zǎo; +[㲧㿷䜊唕唣噪慥梍灶燥皁皂竃竈艁譟趮躁造髞]>zào; +[㖽㣱㳻䃎䇥䕉䕪䰹䶦则則啧嘖崱帻幘択择捑擇沢泽溭澤皟瞔笮箦簀耫舴荝萴蠈蠌諎謮責賾责赜迮鰂鲗]>zé; +[㳁仄夨庂昃昗汄稄]>zè; +[戝賊贼鱡]>zéi; +怎>zěn; +[䫈譖譛谮]>zèn; +[増增憎橧熷璔矰磳繒缯罾譄驓]>zēng; +㽪>zěng; +[䙢䰝甑贈赠]>zèng; +[偧剳哳喳扎抯挓揸摣柤楂樝渣猹皶皻觰齄齇]>zhā; +[㱜㴙䥷䵵劄札牐甴箚紥紮蚻蠿譗鍘铡閘闸霅]>zhá; +[㒀㡸㷢䋾䕢䛽䵙厏眨苲鮓鲊]>zhǎ; +[䖳䞢乍吒咤奓宱搾柵栅榨溠灹炸砟簎膪蚱詐诈醡]>zhà; +[捚摘斋斎榸齋]>zhāi; +[㡯宅礋]>zhái; +[窄鉙飵]>zhǎi; +[㩟债債寨瘵砦]>zhài; +[厃嶦旃旜栴毡氈氊沾瞻粘覘觇詀詹譫讝谵趈邅鉆霑飦饘驙鱣鳣鸇鹯]>zhān; +薝>zhán; +[㞡㠭䁴䎒䟋䡀䩅䱼嫸展崭嶃嶄拃搌斩斬椫榐樿橏琖皽盏盞蹍輾辗醆颭飐魙]>zhǎn; +[㟞㺘㻵䋎䗃䘺䪌䱠佔偡占嶘战戦戰栈桟棧椾湛站綻绽菚蘸虥虦覱蹔輚轏]>zhàn; +[傽墇嫜张張彰慞暲樟漳獐璋章粻蔁蟑遧鄣餦騿鱆麞]>zhāng; +[仉掌涨漲礃绱長长鞝]>zhǎng; +[㕩㙣㽴丈仗嶂帐帳幛扙杖涱痮瘬瘴瞕緔胀脹賬账障]>zhàng; +[妱巶招昭柖盄窼釗鉊鍣钊駋]>zhāo; +[㕚㺐䈃䝖找沼爪瑵菬]>zhǎo; +[㡽㨄㷖䃍䈇䍜䍮䮓兆召垗旐曌枛櫂炤照燳狣瞾笊箌罩羄肁肇肈詔诏赵趙雿鵫]>zhào; +[嗻嫬晢晣螫遮]>zhē; +[㞏㪿㯰䊞䎲䐑䐲䓆䝃䝕乇厇哲啠喆嚞埑悊折摺歽瓋砓磔籷耴虴蜇褶襵詟謫謺讁讋讘谪輒輙辄銸鮿鸅]>zhé; +[啫禇者赭踷]>zhě; +[䂞䏳䗪䠦䩾䵭柘檡浙烢蟅这這鷓鹧]>zhè; +[着著蔗]>zhe; +[侦偵堻媜嫃寊帪揁搸斟栕桢桭楨榛樼溱潧澵獉珍珎瑊甄眞真砧碪磌祯禎禛箴籈縝缜胗臻蒖蒧蓁薽貞贞轃遉酙針鉁錱鍼针靕駗鱵]>zhēn; +[㐱㪛䂦䂧䑐䪴䫬弫抌抮昣晸枕畛疹眕稹笉紾絼縥聄袗裖診诊軫轸辴鬒黰]>zhěn; +[㓄㣀㮳㯢㴨䊶䏖䝩䟴䨯䲴䳲侲圳塦挋振揕敒敶朕栚瑱眹蜄誫賑赈鎭鎮镇阵陣震鴆鸩]>zhèn; +[争佂埩姃峥崝崢征徰徴徵怔挣掙炡烝爭狰猙癥眐睁睜筝箏篜聇蒸諍诤踭鉦錚鏳钲铮鬇]>zhēng; +[䡕愸抍拯掟撜整氶糽]>zhěng; +[㡠㡧㱏㽀䂻䈣䛫䥌䥭䦛䦶帧幀政正症証證è¯éƒ‘鄭鋥锃鴊𠔻]>zhèng; +[之卮吱坧墌嬂巵搘支枝枳栀梔椥榰汁汥疧知祇祗祬秓秖秪綕織织肢胑胝脂芝蜘衼跖隻馶鳷鴟鴲鵄鸱鼅]>zhÄ«; +[㙷㜼㨁䐈䟈䱥䵂侄値值儨劕埴執妷姪慹懫执摭擿柣桎植樴殖漐犆瓆瓡直禃秷稙絷縶聀职職膱蘵蛰蟄蟙褁貭踯蹠躑軄釞馽]>zhí; +[㧻㮹㲛䅩䇛䌤䎺䛗䳅劧厎只咫址坁夂帋恉扺抧指旨晊栺止沚洔淽滍疻砋祉紙纸芷藢襧訨趾軹轵酯阯黹]>zhǐ; +[㕄㗌㗧㘉㛿㝂㣥㨖㴛䄺䆈䇽䉅䉜䏄䏯䐭䑇䓌䕌䚦䝷䞃䡹䥍䦯䫕䬹䭁䱨偫傂制厔垁娡寘峙崻帙帜幟庢庤廌彘徏徝志忮憄懥挃挚掷搱摯擲旘智梽楖櫍治洷淛滞滯潌炙熫狾猘璏畤疐痔痣礩祑秩秲稚稺穉窒筫紩緻置翐胵腟膣至致臸芖蛭螲袟袠製覟觗觯觶誌豑豒豸質贄质贽跱踬躓輊轾迣郅銍鋕鑕铚锧陟雉駤騭騺驇骘鯯鴙鷙鸷]>zhì; +[中伀刣妐幒彸忠忪柊汷泈潨炂煄盅籦終终舯蔠螽衳衷蹱鈡銿鍾鐘钟锺鴤]>zhōng; +[㣫冢喠塚尰歱瘇种種肿腫踵塚]>zhǒng; +[㐺㲴䱰乑仲众偅堹妕媑湩狆眾祌筗緟茽蚛衆衶諥重]>zhòng; +[侜周啁喌州徟洀洲淍烐珘盩矪粥脽舟譸诪賙赒輈輖辀週銂騆鵃鸼]>zhōu; +[㛩妯軸轴]>zhóu; +[䎻䖞晭疛睭箒肘菷鯞]>zhǒu; +[㑇㑳㔌㥮㼙㾭䇠䈙䋓䐍䛆䩜䶇伷僽冑呪咒咮噣宙昼晝甃皱皺籀籒籕粙紂縐繇纣绉胄荮葤詋酎駎驟骤𤏲]>zhòu; +帚>zhou; +[侏劯朱株槠橥櫧櫫洙潴瀦猪珠硃祩秼絑茱蛛蝫蠩袾誅諸诛诸豬跦邾銖铢鮢鯺鴸鼄猪諸]>zhÅ«; +[㔉䌵䕽䘚䟉䥮䮱劚灟炢烛燭爥窋竹竺笁笜築篫舳茿蓫蠋蠾趉躅逐鱁]>zhú; +[㵭䘢䰞丶主嘱囑壴孎宔拄斸欘渚濐煑煮瘃瞩矚砫罜詝貯贮陼麈]>zhǔ; +[㑏㝉㤖㧣㫂㹥㺛㾻㿾䇡䇧䍆䎷䐢䝒䝬䬡䭖伫佇住助坾嵀杼柱柷樦殶注炷疰眝祝竚筑筯箸紵紸纻羜翥苧莇蛀註諔跓軴鉒鋳鑄铸飳馵駐驻麆]>zhù; +[抓挝撾檛膼髽]>zhuā; +拽>zhuāi; +[跩𨋯]>zhuǎi; +[专叀塼嫥専專瑼甎砖磚篿耑膞蟤跧鄟顓颛鱄鷒]>zhuān; +[䡱孨竱転轉转]>zhuǎn; +[䉵僎啭囀堟撰灷瑑篆篹籑縳腞蒃襈譔賺贃赚饌馔]>zhuàn; +[妆妝娤庄桩梉樁粧糚荘莊装裝]>zhuāng; +[壮壯壵撞焋状狀]>zhuàng; +[娺椎追錐锥隹騅骓鴭鵻]>zhuÄ«; +沝>zhuǐ; +[䄌坠墜惴桘甀硾礈窡笍縋缒膇諈譵贅赘鑆餟鵽]>zhuì; +[綴缀]>zhui; +[宒棆窀肫衠諄谆迍]>zhÅ«n; +[准埻準綧隼鶽]>zhǔn; +稕>zhùn; +[㑁倬卓捉桌棹穛穱𠭴]>zhuō; +[㣿㪬㭬㺟䅵䕴䶂剢叕啄啅圴妰彴拙撯擆擢斀斫斮斱斲斵晫梲棁棳椓槕櫡汋泎浊浞涿濁濯灂灼炪烵焯琸硺禚篧籗籱絀绌罬茁蠗諑謶诼踔酌鋜錣鐯鐲镯鷟]>zhuó; +丵>zhuǒ; +劅>zhuò; +[兹呲咨嗞姕姿孖孜孳孶嵫栥椔淄湽滋澬玆甾禌秶稵粢紎緇缁茊茲菑葘諮谘貲資赀资趦輜輺辎鄑鈭錙鍿鎡锱镃頾頿髭鯔鲻鴜鶅鶿鷀鹚鼒齍齜龇]>zÄ«; +[㜽㧗㺭䔂䘣仔吇呰啙姉姊杍梓榟滓矷秄秭笫籽紫耔胏芓茈虸訾訿釨]>zǐ; +[㰣㰷㱴䅆䐉倳剚字恣扻渍漬牸眥眦胔胾自茡]>zì; +子>zi; +[倧堫宗嵏嵕嵸惾朡棕椶熧猣磫稯綜緃緵综翪腙艐葼蝬豵踨踪蹤鑁騌騣骔鬃鬉鬷鯮鯼]>zōng; +[㢔㷓㹅䰌偬傯总惣愡捴揔搃摠熜総縂總蓗]>zǒng; +[䍟䝋倊昮猔疭瘲碂粽糉糭縦縱纵]>zòng; +[媰掫棷棸箃緅菆諏謅诌诹邹郰鄒鄹陬騶驺鯫鲰黀齱齺]>zōu; +[èµ°èµ±]>zǒu; +[㔿㵵䠫奏揍]>zòu; +[租蒩]>zÅ«; +[㞺㰵㲞䅸䚝䯿䱣卆卒哫崒崪捽族稡足踤踿蹵鎐鏃镞]>zú; +[䔃䖕俎爼珇祖組组詛诅阻靻]>zǔ; +[躜躦鑽钻]>zuān; +[䂎䌣籫繤纂纉纘缵]>zuǎn; +[䤸揝攥鑚饡]>zuàn; +[厜嶉樶纗羧脧蟕]>zuÄ«; +[䮔嘴噿嶊嶵洅濢璻觜]>zuǐ; +[㝡㠑㰎䘹晬最栬槜檇檌祽絊罪蕞襊辠酔酻醉鋷錊]>zuì; +[尊嶟樽繜罇遵鐏鷷]>zÅ«n; +[僔噂壿撙譐]>zǔn; +[捘燇銌鱒鳟]>zùn; +嘬>zuō; +[㸲䎰䝫䞰昨椊琢秨稓筰葃鈼]>zuó; +[㝾佐咗唨左毑繓]>zuǒ; +[㑅㘀㘴㛗㭮䋏䔘作侳做唑坐夎岝岞座怍柞祚糳胙葄袏酢阼]>zuò; diff --git a/icuSources/data/translit/Han_Spacedhan.txt b/icuSources/data/translit/Han_Spacedhan.txt index 85607b58..e3681bb7 100644 --- a/icuSources/data/translit/Han_Spacedhan.txt +++ b/icuSources/data/translit/Han_Spacedhan.txt @@ -1,24 +1,17 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Only intended for internal use +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Han_Spacedhan.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# :: fullwidth-halfwidth; - 。 > '.'; - $terminalPunct = [\.\,\:\;\?\!.,:?!。、;[:Pe:][:Pf:]]; $initialPunct = [:Ps:][:Pi:]; - -# add space between any Han or terminal punctuation and letters, and -# between letters and Han or initial punct - [[:Ideographic:] $terminalPunct] {} [:Letter:] > ' ' ; [:Letter:] [:Mark:]* {} [[:Ideographic:] $initialPunct] > ' ' ; - -# remove spacing between ideographs and other letters - - < [:Ideographic:] { ' ' } [:Letter:] ; - < [:Letter:] [:Mark:]* { ' ' } [:Ideographic:] ; - +< [:Ideographic:] { ' ' } [:Letter:] ; +< [:Letter:] [:Mark:]* { ' ' } [:Ideographic:] ; diff --git a/icuSources/data/translit/Hangul_Latin.txt b/icuSources/data/translit/Hangul_Latin.txt new file mode 100644 index 00000000..9d5208c0 --- /dev/null +++ b/icuSources/data/translit/Hangul_Latin.txt @@ -0,0 +1,13 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Hangul_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# +::['ᄀ-하-ᅵᆨ-ᇂㄱ-ㄿㅁ-ㅃㅅ-ㅣ㈀-㈜㉠-㉻가-힣'ᄀ-ᆵᄆ-ᄈᄉ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]; +::NFKD; +::ConjoiningJamo-Latin; +::NFC; diff --git a/icuSources/data/translit/Hebrew_Latin.txt b/icuSources/data/translit/Hebrew_Latin.txt index 4e0635cc..40c63cad 100644 --- a/icuSources/data/translit/Hebrew_Latin.txt +++ b/icuSources/data/translit/Hebrew_Latin.txt @@ -1,40 +1,20 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Transliteration table for Hebrew -# Based on the UNGEGN table at: -# http://www.eki.ee/wgrs/rom1_he.pdf +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Hebrew_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 # -# Exceptions: -# - Accents are added to disambiguate letters -# - Combinations of dagesh, shin/sin dot that produce different -# letters are not yet encoded. -# -# To test, open: -# http://oss.software.ibm.com/cgi-bin/icu/tr -# Click Edit, paste in this file, Save As hebrew-latin/XXX -# (where XXX is a username) -# Now go back to the main window, and try it out. -# Use hebrew-latin/XXX for Output 1, and (Inverse) for Output 2 -# Paste in hebrew text in Input, and hit Transliterate. -# -# For more information, see" -# http://oss.software.ibm.com/icu/userguide/Transliteration.html - -:: [[:Hebrew:] [:^ccc=0:] [\u05B0-\u05B9\u05BB-\u05BC\u05C1-\u05C2\u2135-\u2138̄\u05BF] - [\u05BD]] ; +:: [[:Hebrew:] [:^ccc=0:] [\u05B0-\u05B9\u05BB-\u05BC\u05C1-\u05C2ℵ-ℸ\u0304\u05BF] - [\u05BD]] ; :: nfkd (nfc) ; $letterAfter = [:M:]* [:L:] ; - -# move longer items here to avoid masking - -ח <> ẖ ; -צ <> ẕ } $letterAfter; -×¥ <> ẕ ; -ש <> ş ; -ת <> ţ ; - +ח <> h\u0331 ; +צ <> z\u0331 } $letterAfter; +×¥ <> z\u0331 ; +ש <> s\u0327 ; +ת <> t\u0327 ; א <> ʼ ; ב <> b ; ג <> g ; @@ -48,7 +28,7 @@ $letterAfter = [:M:]* [:L:] ; ך <> k ; ל <> l ; מ <> m } $letterAfter; -ם <> m ; +ם <> m ; ×  <> n } $letterAfter; ן <> n ; ס <> s ; @@ -57,53 +37,37 @@ $letterAfter = [:M:]* [:L:] ; ×£ <> p ; ק <> q ; ר <> r ; - - ×° > | וו; # HEBREW LIGATURE YIDDISH DOUBLE VAV - ×± > | וי; # HEBREW LIGATURE YIDDISH VAV YOD - ײ > | יי ; # HEBREW LIGATURE YIDDISH DOUBLE YOD - - -Ö¼ <> ̇ ; # dagesh just goes to overdot for now -ׁ <> ̌ ; # shin dot -> sh -ׂ <> ̂ ; # sin dot -> s - -# points +×° > | וו; # HEBREW LIGATURE YIDDISH DOUBLE VAV +×± > | וי; # HEBREW LIGATURE YIDDISH VAV YOD +ײ > | יי ; # HEBREW LIGATURE YIDDISH DOUBLE YOD +\u05BC <> \u0307 ; # dagesh just goes to overdot for now +\u05C1 <> \u030C ; # shin dot -> sh +\u05C2 <> \u0302 ; # sin dot -> s $above = [^[:ccc=0:][:ccc=230:]]*; - -‎ֲ‎ > à ; -‎ֲ‎ $1< a ($above) ̀; - -‎ָ‎ > á ; -‎ָ‎ $1 < a ($above) ́; - -‎ֱ‎ > è ; -‎ֱ‎ $1 < e ($above) ̀; - -‎ֵ‎ > é ; -‎ֵ‎ $1 < e ($above) ́; - -‎ְ‎ > e ̆ ; -‎ְ‎ $1 < e ($above) ̆; - -‎ֹ‎ > ò ; -‎ֹ‎ $1 < o ($above) ̀; - -Ö´ <> i ; -Ö» <> u ; -Ö· <> a ; -Ö¶ <> e ; -Ö³ <> o ; - -\u05BF <> ̄ ; - -# fallbacks +‎\u05B2‎ > à ; +‎\u05B2‎ $1< a ($above) \u0300; +‎\u05B8‎ > á ; +‎\u05B8‎ $1 < a ($above) \u0301; +‎\u05B1‎ > è ; +‎\u05B1‎ $1 < e ($above) \u0300; +‎\u05B5‎ > é ; +‎\u05B5‎ $1 < e ($above) \u0301; +‎\u05B0‎ > e \u0306 ; +‎\u05B0‎ $1 < e ($above) \u0306; +‎\u05B9‎ > ò ; +‎\u05B9‎ $1 < o ($above) \u0300; +\u05B4 <> i ; +\u05BB <> u ; +\u05B7 <> a ; +\u05B6 <> e ; +\u05B3 <> o ; +\u05BF <> \u0304 ; ק < c ; פ < f } $letterAfter; ×£ < f ; ז < j ; ו < v ; כס < x ; - :: (lower); :: nfc (nfd) ; -:: ([[:Latin:] [:^ccc=0:] [\u02BB-\u02BC\u0300-\u0302\u0307\u030C\u0327\u0331\u0340-\u0341 ̄ ]]); \ No newline at end of file +:: ([[:Latin:] [:^ccc=0:] [Ê»-ʼ\u0300-\u0302\u0307\u030C\u0327\u0331\u0340-\u0341 \u0304 ]]); diff --git a/icuSources/data/translit/Hiragana_Katakana.txt b/icuSources/data/translit/Hiragana_Katakana.txt index 019a342b..28adf455 100644 --- a/icuSources/data/translit/Hiragana_Katakana.txt +++ b/icuSources/data/translit/Hiragana_Katakana.txt @@ -1,207 +1,135 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# note: a global filter is more efficient, but MUST include all source chars -:: [\u0000-\u007E \u3001\u3002 \u3099-\u309C \u30A1-\u30FC \uFF61-\uFF9Fー[:Hiragana:] [:Katakana:] [:nonspacing mark:]] ; -:: NFKC (); - -# Hiragana-Katakana - -# This is largely a one-to-one mapping, but it has a -# few kinks: - -# 1. The Katakana va/vi/ve/vo (30F7-30FA) have no -# Hiragana equivalents. We use Hiragana wa/wi/we/wo -# (308F-3092) with a voicing mark (3099), which is -# semantically equivalent. However, this is a non- -# roundtripping transformation. - -# 2. The Katakana small ka/ke (30F5,30F6) have no -# Hiragana equiavlents. We convert them to normal -# Hiragana ka/ke (304B,3051). This is a one-way -# information-losing transformation and precludes -# round-tripping of 30F5 and 30F6. - -# 3. The combining marks 3099-309C are in the Hiragana -# block, but they apply to Katakana as well, so we -# leave them untouched. - -# 4. The Katakana prolonged sound mark 30FC doubles the -# preceding vowel. This is a one-way information- -# losing transformation from Katakana to Hiragana. - -# 5. The Katakana middle dot separates words in foreign -# expressions; we leave this unmodified. - -# The above points preclude successful round-trip -# transformations of arbitrary input text. However, -# they provide naturalistic results that should conform -# to user expectations. - - -# Combining equivalents va/vi/ve/vo -わ゙ <> ヷ; -ゐ゙ <> ヸ; -ゑ゙ <> ヹ; -を゙ <> ヺ; - -# One-to-one mappings, main block -# 3041:3094 <> 30A1:30F4 -# 309D,E <> 30FD,E -ぁ <> ァ; -あ <> ア; -ぃ <> ィ; -い <> イ; -ぅ <> ゥ; -う <> ウ; -ぇ <> ェ; -え <> エ; -ぉ <> ォ; -お <> オ; -か <> カ; -が <> ガ; -き <> キ; -ぎ <> ギ; -く <> ク; -ぐ <> グ; -け <> ケ; -げ <> ゲ; -こ <> コ; -ご <> ゴ; -さ <> サ; -ざ <> ザ; -し <> シ; -じ <> ジ; -す <> ス; -ず <> ズ; -せ <> セ; -ぜ <> ゼ; -そ <> ソ; -ぞ <> ゾ; -た <> タ; -だ <> ダ; -ち <> チ; -ぢ <> ヂ; -っ <> ッ; -つ <> ツ; -づ <> ヅ; -て <> テ; -で <> デ; -と <> ト; -ど <> ド; -な <> ナ; -に <> ニ; -ぬ <> ヌ; -ね <> ネ; -の <> ノ; -は <> ハ; -ば <> バ; -ぱ <> パ; -ひ <> ヒ; -び <> ビ; -ぴ <> ピ; -ふ <> フ; -ぶ <> ブ; -ぷ <> プ; -へ <> ヘ; -べ <> ベ; -ぺ <> ペ; -ほ <> ホ; -ぼ <> ボ; -ぽ <> ポ; -ま <> マ; -み <> ミ; -む <> ム; -め <> メ; -も <> モ; -ゃ <> ャ; -や <> ヤ; -ゅ <> ュ; -ゆ <> ユ; -ょ <> ョ; -よ <> ヨ; -ら <> ラ; -り <> リ; -る <> ル; -れ <> レ; -ろ <> ロ; -ゎ <> ヮ; -わ <> ワ; -ゐ <> ヰ; -ゑ <> ヱ; -を <> ヲ; -ん <> ン; -ゔ <> ヴ; -ゝ <> ヽ; -ゞ <> ヾ; - -# One-way Katakana-Hiragana xform of small K ka/ke to -# normal H ka/ke. -か < ヵ; -け < ヶ; - -# Katakana followed by a prolonged sound mark 30FC has -# its final vowel doubled. This is a Katakana-Hiragana -# one-way information-losing transformation. We -# include the small Katakana (e.g., small A 3041) and -# do not distinguish them from their large -# counterparts. It doesn't make sense to double a -# small counterpart vowel as a small Hiragana vowel, so -# we don't do so. In natural text this should never -# occur anyway. If a 30FC is seen without a preceding -# vowel sound (e.g., after n 30F3) we do not change it. - -### $long = ー; - -# The following categories are Hiragana, not Katakana -# as might be expected, since by the time we get to the -# 30FC, the preceding character will have already been -# transformed to Hiragana. - -# {The following mechanically generated from the -# Unicode 3.0 data:} - -$xa = [ \ -ぁ あ か が さ ざ \ -た だ な は ば ぱ \ -ま ゃ や ら ゎ わ \ -]; - -$xi = [ \ -ぃ い き ぎ し じ \ -ち ぢ に ひ び ぴ \ -み り ゐ \ -]; - -$xu = [ \ -ぅ う く ぐ す ず \ -っ つ づ ぬ ふ ぶ \ -ぷ む ゅ ゆ る ゔ \ -]; - -$xe = [ \ -ぇ え け げ せ ぜ \ -て で ね へ べ ぺ \ -め れ ゑ \ -]; - -$xo = [ \ -ぉ お こ ご そ ぞ \ -と ど の ほ ぼ ぽ \ -も ょ よ ろ を \ -]; - -あ < $xa {ー}; -い < $xi {ー}; -う < $xu {ー}; -え < $xe {ー}; -お < $xo {ー}; - -:: (NFKC) ; - -# note: a global filter is more efficient, but MUST include all source chars!! -:: ([\u0000-\u007E \u3001\u3002 \u3099-\u309C \u30A1-\u30FC \uFF61-\uFF9Fー[:Hiragana:] [:Katakana:] [:nonspacing mark:]]); - -# eof +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Hiragana_Katakana.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# +:: [\u0000-\u007E 、。 \u3099-゜ ァ-ー 。-゚ー[:Hiragana:] [:Katakana:] [:nonspacing mark:]] ; +:: NFKC (); +わ\u3099 <> ヷ; +ゐ\u3099 <> ヸ; +ゑ\u3099 <> ヹ; +を\u3099 <> ヺ; +ぁ <> ァ; +あ <> ア; +ぃ <> ィ; +い <> イ; +ぅ <> ゥ; +う <> ウ; +ぇ <> ェ; +え <> エ; +ぉ <> ォ; +お <> オ; +か <> カ; +が <> ガ; +き <> キ; +ぎ <> ギ; +く <> ク; +ぐ <> グ; +け <> ケ; +げ <> ゲ; +こ <> コ; +ご <> ゴ; +さ <> サ; +ざ <> ザ; +し <> シ; +じ <> ジ; +す <> ス; +ず <> ズ; +せ <> セ; +ぜ <> ゼ; +そ <> ソ; +ぞ <> ゾ; +た <> タ; +だ <> ダ; +ち <> チ; +ぢ <> ヂ; +っ <> ッ; +つ <> ツ; +づ <> ヅ; +て <> テ; +で <> デ; +と <> ト; +ど <> ド; +な <> ナ; +に <> ニ; +ぬ <> ヌ; +ね <> ネ; +の <> ノ; +は <> ハ; +ば <> バ; +ぱ <> パ; +ひ <> ヒ; +び <> ビ; +ぴ <> ピ; +ふ <> フ; +ぶ <> ブ; +ぷ <> プ; +へ <> ヘ; +べ <> ベ; +ぺ <> ペ; +ほ <> ホ; +ぼ <> ボ; +ぽ <> ポ; +ま <> マ; +み <> ミ; +む <> ム; +め <> メ; +も <> モ; +ゃ <> ャ; +や <> ヤ; +ゅ <> ュ; +ゆ <> ユ; +ょ <> ョ; +よ <> ヨ; +ら <> ラ; +り <> リ; +る <> ル; +れ <> レ; +ろ <> ロ; +ゎ <> ヮ; +わ <> ワ; +ゐ <> ヰ; +ゑ <> ヱ; +を <> ヲ; +ん <> ン; +ゔ <> ヴ; +ゝ <> ヽ; +ゞ <> ヾ; +か < ヵ; +け < ヶ; +$xa = [ \ +ぁ あ か が さ ざ \ +た だ な は ば ぱ \ +ま ゃ や ら ゎ わ \ +]; +$xi = [ \ +ぃ い き ぎ し じ \ +ち ぢ に ひ び ぴ \ +み り ゐ \ +]; +$xu = [ \ +ぅ う く ぐ す ず \ +っ つ づ ぬ ふ ぶ \ +ぷ む ゅ ゆ る ゔ \ +]; +$xe = [ \ +ぇ え け げ せ ぜ \ +て で ね へ べ ぺ \ +め れ ゑ \ +]; +$xo = [ \ +ぉ お こ ご そ ぞ \ +と ど の ほ ぼ ぽ \ +も ょ よ ろ を \ +]; +あ < $xa {ー}; +い < $xi {ー}; +う < $xu {ー}; +え < $xe {ー}; +お < $xo {ー}; +:: (NFKC) ; +:: ([\u0000-\u007E 、。 \u3099-゜ ァ-ー 。-゚ー[:Hiragana:] [:Katakana:] [:nonspacing mark:]]); diff --git a/icuSources/data/translit/Hiragana_Latin.txt b/icuSources/data/translit/Hiragana_Latin.txt index ed068817..36b9c1fa 100644 --- a/icuSources/data/translit/Hiragana_Latin.txt +++ b/icuSources/data/translit/Hiragana_Latin.txt @@ -1,14 +1,16 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -:: [\u3041-\u3094\u3099\u309D-\u309E\u30AC\u30AE\u30B0\u30B2\u30B4\u30B6\u30B8\u30BA\u30BC\u30BE\u30C0\u30C2\u30C5\u30C7\u30C9\u30D0\u30D3\u30D6\u30D9\u30DC\u30F4\u30F7-\u30FA\u30FE] ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Hiragana_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# +:: [ぁ-ゔ\u3099ゝ-ゞガギグゲゴザジズゼゾダヂヅデドバビブベボヴヷ-ヺヾ] ; :: NFD ; - :: Hiragana-Katakana; :: Katakana-Latin; - :: NFC ; :: (Lower) ; -:: ([',.A-Za-z~\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0304\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1FB1\u1FB9\u1FD1\u1FD9\u1FE1\u1FE9\u212A-\u212B]) ; +:: ([',.A-Za-z~À-ÖØ-öø-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳ\u0304Ó¢-Ó£Ó®-ӯḀ-ẙẠ-ỹᾱᾹῑῙῡῩK-Å]) ; diff --git a/icuSources/data/translit/InterIndic_Bengali.txt b/icuSources/data/translit/InterIndic_Bengali.txt index 5f31228b..50db709d 100644 --- a/icuSources/data/translit/InterIndic_Bengali.txt +++ b/icuSources/data/translit/InterIndic_Bengali.txt @@ -1,147 +1,138 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Bengali -#:: NFD (NFC) ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# \uE001>\u0981; # SIGN CANDRABINDU -\uE002>\u0982; # SIGN ANUSVARA -\uE003>\u0983; # SIGN VISARGA -\uE004>\u0985; # FALLBACK TO LETTER A -\uE005>\u0985; # LETTER A -\uE006>\u0986; # LETTER AA -\uE007>\u0987; # LETTER I -\uE008>\u0988; # LETTER II -\uE009>\u0989; # LETTER U -\uE00A>\u098A; # LETTER UU -\uE00B>\u098B; # LETTER VOCALIC R -\uE00C>\u098C; # LETTER VOCALIC L -\uE00D>\u098F; # FALLBACK -\uE00E>\u098F; # FALLBACK -\uE00F>\u098F; # LETTER E -\uE010>\u0990; # LETTER AI -\uE011>\u0993; # FALLBACK -\uE012>\u0993; # FALLBACK -\uE013>\u0993; # LETTER O -\uE014>\u0994; # LETTER AU -\uE015>\u0995; # LETTER KA -\uE016>\u0996; # LETTER KHA -\uE017>\u0997; # LETTER GA -\uE018>\u0998; # LETTER GHA -\uE019>\u0999; # LETTER NGA -\uE01A>\u099A; # LETTER CA -\uE01B>\u099B; # LETTER CHA -\uE01C>\u099C; # LETTER JA -\uE01D>\u099D; # LETTER JHA -\uE01E>\u099E; # LETTER NYA -\uE01F>\u099F; # LETTER TTA -\uE020>\u09A0; # LETTER TTHA -\uE021>\u09A1; # LETTER DDA -\uE022>\u09A2; # LETTER DDHA -\uE023>\u09A3; # LETTER NNA -\uE024>\u09A4; # LETTER TA -\uE025>\u09A5; # LETTER THA -\uE026>\u09A6; # LETTER DA -\uE027>\u09A7; # LETTER DHA -\uE028>\u09A8; # LETTER NA -\uE029>\u09A8\u09BC; # REMAP (indicExceptions.txt): \u09a9>\u09a8 = LETTER NNNA>LETTER NA -\uE02A>\u09AA; # LETTER PA -\uE02B>\u09AB; # LETTER PHA -\uE02C>\u09AC; # LETTER BA -\uE02D>\u09AD; # LETTER BHA -\uE02E>\u09AE; # LETTER MA -\uE02F>\u09AF; # LETTER YA -\uE030>\u09B0; # LETTER RA -\uE031>\u09B0\u09BC; # FALLBACK to RA -\uE032>\u09B2; # LETTER LA -\uE033>\u09B2; # REMAP (indicExceptions.txt): \u09b3>\u09b2 = LETTER LLA>LETTER LA -\uE034>\u09B2; # REMAP (indicExceptions.txt): \u09b4>\u09b2 = LETTER LLLA>LETTER LA -\uE035>\u09AC; # REMAP (indicExceptions.txt): \u09b5>\u09ac = LETTER VA>LETTER BA -\uE036>\u09B6; # LETTER SHA -\uE037>\u09B7; # LETTER SSA -\uE038>\u09B8; # LETTER SA -\uE039>\u09B9; # LETTER HA +\uE002>ং; # SIGN ANUSVARA +\uE003>ঃ; # SIGN VISARGA +\uE004>অ; # FALLBACK TO LETTER A +\uE005>অ; # LETTER A +\uE006>আ; # LETTER AA +\uE007>ই; # LETTER I +\uE008>ঈ; # LETTER II +\uE009>উ; # LETTER U +\uE00A>ঊ; # LETTER UU +\uE00B>ঋ; # LETTER VOCALIC R +\uE00C>ঌ; # LETTER VOCALIC L +\uE00D>এ; # FALLBACK +\uE00E>এ; # FALLBACK +\uE00F>এ; # LETTER E +\uE010>ঐ; # LETTER AI +\uE011>ও; # FALLBACK +\uE012>ও; # FALLBACK +\uE013>ও; # LETTER O +\uE014>ঔ; # LETTER AU +\uE015>ক; # LETTER KA +\uE016>খ; # LETTER KHA +\uE017>গ; # LETTER GA +\uE018>ঘ; # LETTER GHA +\uE019>ঙ; # LETTER NGA +\uE01A>চ; # LETTER CA +\uE01B>ছ; # LETTER CHA +\uE01C>জ; # LETTER JA +\uE01D>ঝ; # LETTER JHA +\uE01E>ঞ; # LETTER NYA +\uE01F>ট; # LETTER TTA +\uE020>ঠ; # LETTER TTHA +\uE021>ড; # LETTER DDA +\uE022>ঢ; # LETTER DDHA +\uE023>ণ; # LETTER NNA +\uE024>ত; # LETTER TA +\uE025>থ; # LETTER THA +\uE026>দ; # LETTER DA +\uE027>ধ; # LETTER DHA +\uE028>ন; # LETTER NA +\uE029>ন\u09BC; # REMAP (indicExceptions.txt): \u09A9>ন = LETTER NNNA>LETTER NA +\uE02A>প; # LETTER PA +\uE02B>ফ; # LETTER PHA +\uE02C>ব; # LETTER BA +\uE02D>ভ; # LETTER BHA +\uE02E>ম; # LETTER MA +\uE02F>য; # LETTER YA +\uE030>র; # LETTER RA +\uE031>র\u09BC; # FALLBACK to RA +\uE032>ল; # LETTER LA +\uE033>ল; # REMAP (indicExceptions.txt): \u09B3>ল = LETTER LLA>LETTER LA +\uE034>ল; # REMAP (indicExceptions.txt): \u09B4>ল = LETTER LLLA>LETTER LA +\uE035>ব; # REMAP (indicExceptions.txt): \u09B5>ব = LETTER VA>LETTER BA +\uE036>শ; # LETTER SHA +\uE037>ষ; # LETTER SSA +\uE038>স; # LETTER SA +\uE039>হ; # LETTER HA \uE03C>\u09BC; # SIGN NUKTA -\uE03D>\u09bd; # SIGN AVAGRAHA -\uE03E>\u09BE; # VOWEL SIGN AA -\uE03F>\u09BF; # VOWEL SIGN I -\uE040>\u09C0; # VOWEL SIGN II +\uE03D>ঽ; # SIGN AVAGRAHA +\uE03E>া; # VOWEL SIGN AA +\uE03F>ি; # VOWEL SIGN I +\uE040>ী; # VOWEL SIGN II \uE041>\u09C1; # VOWEL SIGN U \uE042>\u09C2; # VOWEL SIGN UU \uE043>\u09C3; # VOWEL SIGN VOCALIC R \uE044>\u09C4; # VOWEL SIGN VOCALIC RR -\uE045>\u09C7; # REMAP (indicExceptions.txt): \u09c5>\u09c7 = VOWEL SIGN CANDRA E>VOWEL SIGN E -\uE046>\u09C7; # FALLBACK -\uE047>\u09C7; # VOWEL SIGN E -\uE048>\u09C8; # VOWEL SIGN AI -\uE049>\u09C7\u09BE; # REMAP (indicExceptions.txt): \u09c9>\u09cb = VOWEL SIGN CANDRA O>VOWEL SIGN O -\uE04A>\u09C7\u09BE; # FALLBACK -\uE04B>\u09C7\u09BE; # VOWEL SIGN O -\uE04C>\u09C7\u09D7; # VOWEL SIGN AU +\uE045>ে; # REMAP (indicExceptions.txt): \u09C5>ে = VOWEL SIGN CANDRA E>VOWEL SIGN E +\uE046>ে; # FALLBACK +\uE047>ে; # VOWEL SIGN E +\uE048>ৈ; # VOWEL SIGN AI +\uE049>ো; # REMAP (indicExceptions.txt): \u09C9>ো = VOWEL SIGN CANDRA O>VOWEL SIGN O +\uE04A>ো; # FALLBACK +\uE04B>ো; # VOWEL SIGN O +\uE04C>ৌ; # VOWEL SIGN AU \uE04D>\u09CD; # SIGN VIRAMA -\uE050>\u0993\u0982; # InterIndic-Bengali: OM -\ue051>; -\ue052>; -\ue053>; -\ue054>; +\uE050>ওং; # InterIndic-Bengali: OM +\uE051>; +\uE052>; +\uE053>; +\uE054>; \uE055>; # LENGTH MARK -\uE056>\u09C8; # REMAP (indicExceptions.txt): \u09d6>\u09c8 = AI LENGTH MARK>VOWEL SIGN AI -\uE057>\u09D7; # AU LENGTH MARK -\uE058>\u0995\u09BC; # FALLBACK -\uE059>\u0996\u09BC; # REMAP (indicExceptions.txt): \u09d9>\u0996 = LETTER KHHA>LETTER KHA -\uE05A>\u0997\u09BC; # REMAP (indicExceptions.txt): \u09da>\u0997 = LETTER GHHA>LETTER GA -\uE05B>\u099C\u09BC; # REMAP (indicExceptions.txt): \u09db>\u099c = LETTER ZA>LETTER JA -\uE05C>\u09A1\u09BC; # FALLBACK -\uE05D>\u09A2\u09BC; # LETTER RHA -\uE05E>\u09AB\u09BC; # REMAP (indicExceptions.txt): \u09de>\u09ab = LETTER FA>LETTER PHA -\uE05F>\u09AF\u09BC; # LETTER YYA -\uE060>\u09E0; # LETTER VOCALIC RR -\uE061>\u09E1; # LETTER VOCALIC LL +\uE056>ৈ; # REMAP (indicExceptions.txt): \u09D6>ৈ = AI LENGTH MARK>VOWEL SIGN AI +\uE057>ৗ; # AU LENGTH MARK +\uE058>ক\u09BC; # FALLBACK +\uE059>খ\u09BC; # REMAP (indicExceptions.txt): \u09D9>খ = LETTER KHHA>LETTER KHA +\uE05A>গ\u09BC; # REMAP (indicExceptions.txt): \u09DA>গ = LETTER GHHA>LETTER GA +\uE05B>জ\u09BC; # REMAP (indicExceptions.txt): \u09DB>জ = LETTER ZA>LETTER JA +\uE05C>ড\u09BC; # FALLBACK +\uE05D>ঢ\u09BC; # LETTER RHA +\uE05E>ফ\u09BC; # REMAP (indicExceptions.txt): \u09DE>ফ = LETTER FA>LETTER PHA +\uE05F>য\u09BC; # LETTER YYA +\uE060>ৠ; # LETTER VOCALIC RR +\uE061>ৡ; # LETTER VOCALIC LL \uE062>\u09E2; # VOWEL SIGN VOCALIC L \uE063>\u09E3; # VOWEL SIGN VOCALIC LL -\uE064>\u0964; # DANDA -\uE065>\u0965; # DOUBLE DANDA -\uE066>\u09E6; # DIGIT ZERO -\uE067>\u09E7; # DIGIT ONE -\uE068>\u09E8; # DIGIT TWO -\uE069>\u09E9; # DIGIT THREE -\uE06A>\u09EA; # DIGIT FOUR -\uE06B>\u09EB; # DIGIT FIVE -\uE06C>\u09EC; # DIGIT SIX -\uE06D>\u09ED; # DIGIT SEVEN -\uE06E>\u09EE; # DIGIT EIGHT -\uE06F>\u09EF; # DIGIT NINE -\ue070>; # ABBREVIATION SIGN -\ue071>\u09F0; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u09F1; # LETTER RA WITH LOWER DIAGONAL -\ue073>\u09F2; # RUPEE MARK -\ue074>\u09F3; # RUPEE SIGN -\ue075>\u09F4; # CURRENCY NUMERATOR ONE -\ue076>\u09F5; # CURRENCY NUMERATOR TWO -\ue077>\u09F6; # CURRENCY NUMERATOR THREE -\ue078>\u09F7; # CURRENCY NUMERATOR FOUR -\ue079>\u09F8; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>\u09F9; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>\u09FA; # ISSHAR +\uE064>।; # DANDA +\uE065>॥; # DOUBLE DANDA +\uE066>০; # DIGIT ZERO +\uE067>১; # DIGIT ONE +\uE068>২; # DIGIT TWO +\uE069>৩; # DIGIT THREE +\uE06A>৪; # DIGIT FOUR +\uE06B>৫; # DIGIT FIVE +\uE06C>৬; # DIGIT SIX +\uE06D>৭; # DIGIT SEVEN +\uE06E>৮; # DIGIT EIGHT +\uE06F>৯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>ৰ; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>ৱ; # LETTER RA WITH LOWER DIAGONAL +\uE073>৲; # RUPEE MARK +\uE074>৳; # RUPEE SIGN +\uE075>৴; # CURRENCY NUMERATOR ONE +\uE076>৵; # CURRENCY NUMERATOR TWO +\uE077>৶; # CURRENCY NUMERATOR THREE +\uE078>৷; # CURRENCY NUMERATOR FOUR +\uE079>৸; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>৹; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>৺; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u09AC; # FALLBACK FOR ORIYA LETTER WA -0 > \u09E6; # FALLBACK FOR TAMIL -1 > \u09E7; - - - - - - - - - - - -# :: NFC (NFD) ; -# eof +\uE081>ব; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>ৎ; # Khanda-ta +0 > ০; # FALLBACK FOR TAMIL +1 > ১; diff --git a/icuSources/data/translit/InterIndic_Devanagari.txt b/icuSources/data/translit/InterIndic_Devanagari.txt index 5b921c4f..d04e7ec8 100644 --- a/icuSources/data/translit/InterIndic_Devanagari.txt +++ b/icuSources/data/translit/InterIndic_Devanagari.txt @@ -1,158 +1,150 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Devanagari -#:: NFD (NFC) ; -#Rules for Decomposed characters - \ue028\ue03c > \u0929; #\ue029 - \ue030\ue03c > \u0931; #\ue031 - \ue033\ue03c > \u0934; #\ue034 - \ue015\ue03c > \u0958; #\ue058 LETTER QA (For Urdu) - \ue016\ue03c > \u0959; #\ue059 LETTER KHHA (For Urdu) - \ue017\ue03c > \u095a; #\ue05a LETTER GHHA (For Urdu) - \ue01c\ue03c > \u095b; #\ue05b LETTER ZA (For Urdu) - \ue021\ue03c > \u095c; #\ue05c LETTER DDDHA (pronounced RRA) - \ue022\ue03c > \u095d; #\ue05d LETTER RHA (pronounced RRHA) - \ue02b\ue03c > \u095e; #\ue05e LETTER FA - \ue02f\ue03c > \u095f; #\ue05f LETTER YYA - - #Decomposed compatibility transliterations - \ue012\ue057>\u0914; # FALLBACK FOR TAMIL AU - 0 > \u0966; # FALLBACK FOR TAMIL - 1 > \u0967; - - \ue055>; # FALLBACK BLOW AWAY KANNADA AND TELUGU LENGTH MARK - \ue056>; # FALLBACK BLOW AWAY KANNADA AND TELUGU AI LENGTH MARK - \ue057>; # FALLBACK BLOW AWAY TAMIL AU LENGTH MARK - - \ue001 > \u0901; # SIGN CANDRABINDU - \ue002 > \u0902; # SIGN ANUSVARA - \ue003 > \u0903; # SIGN VISARGA - \ue004 > \u0904; # SIGN SHORT A - \ue005 > \u0905; # LETTER A - \ue006 > \u0906; # LETTER AA - \ue007 > \u0907; # LETTER I - \ue008 > \u0908; # LETTER II - \ue009 > \u0909; # LETTER U - \ue00a > \u090a; # LETTER UU - \ue00b > \u090b; # LETTER VOCALIC R - \ue00c > \u090c; # LETTER VOCALIC L - \ue00d > \u090d; # LETTER CANDRA E (For representing English sounds) - \ue00e > \u090e; # LETTER SHORT E(For Southern Scripts) - \ue00f > \u090f; # LETTER E - \ue010 > \u0910; # LETTER AI - \ue011 > \u0911; # LETTER CANDRA O (For representing English sounds) - \ue012 > \u0912; # LETTER SHORT O (For Southern Scripts) - \ue013 > \u0913; # LETTER O - \ue014 > \u0914; # LETTER AU - \ue015 > \u0915; # LETTER KA - \ue016 > \u0916; # LETTER KHA - \ue017 > \u0917; # LETTER GA - \ue018 > \u0918; # LETTER GHA - \ue019 > \u0919; # LETTER NGA - \ue01a > \u091a; # LETTER CA - \ue01b > \u091b; # LETTER CHA - \ue01c > \u091c; # LETTER JA - \ue01d > \u091d; # LETTER JHA - \ue01e > \u091e; # LETTER NYA - \ue01f > \u091f; # LETTER TTA - \ue020 > \u0920; # LETTER TTHA - \ue021 > \u0921; # LETTER DDA - \ue022 > \u0922; # LETTER DDHA - \ue023 > \u0923; # LETTER NNA - \ue024 > \u0924; # LETTER TA - \ue025 > \u0925; # LETTER THA - \ue026 > \u0926; # LETTER DA - \ue027 > \u0927; # LETTER DHA - \ue028 > \u0928; # LETTER NA - \ue029 > \u0929; # LETTER NNNA - \ue02a > \u092a; # LETTER PA - \ue02b > \u092b; # LETTER PHA - \ue02c > \u092c; # LETTER BA - \ue02d > \u092d; # LETTER BHA - \ue02e > \u092e; # LETTER MA - \ue02f > \u092f; # LETTER YA - \ue030 > \u0930; # LETTER RA - \ue031 > \u0931; # LETTER RRA (Eyelash RA for Southern scripts) - #\ue031 > \u0930; - \ue032 > \u0932; # LETTER LA - \ue033 > \u0933; # LETTER LLA - \ue034 > \u0934; # LETTER LLLA (LLLA for Southern scripts) - #\ue034 > \u0933; - \ue035 > \u0935; # LETTER VA - \ue036 > \u0936; # LETTER SHA - \ue037 > \u0937; # LETTER SSA - \ue038 > \u0938; # LETTER SA - \ue039 > \u0939; # LETTER HA - \ue03c > \u093c; # SIGN NUKTA - \ue03d > \u093d; # SIGN AVAGRAHA - \ue03e > \u093e; # VOWEL SIGN AA - \ue03f > \u093f; # VOWEL SIGN I - \ue040 > \u0940; # VOWEL SIGN II - \ue041 > \u0941; # VOWEL SIGN U - \ue042 > \u0942; # VOWEL SIGN UU - \ue043 > \u0943; # VOWEL SIGN VOCALIC R - \ue044 > \u0944; # VOWEL SIGN VOCALIC RR - \ue045 > \u0945; # VOWEL SIGN CANDRA E - \ue046 > \u0946; # VOWEL SIGN SHORT E - \ue047 > \u0947; # VOWEL SIGN E - \ue048 > \u0948; # VOWEL SIGN AI - \ue049 > \u0949; # VOWEL SIGN CANDRA O - \ue04a > \u094a; # VOWEL SIGN SHORT O - \ue04b > \u094b; # VOWEL SIGN O - \ue04c > \u094c; # VOWEL SIGN AU - \ue04d > \u094d; # SIGN VIRAMA - \ue050 > \u0950; # OM - \ue051 > \u0951; # STRESS SIGN UDATTA - \ue052 > \u0952; # STRESS SIGN ANUDATTA - \ue053 > \u0953; # GRAVE ACCENT - \ue054 > \u0954; # ACUTE ACCENT - \ue058 > \u0958; # LETTER QA (For Urdu) - \ue059 > \u0959; # LETTER KHHA (For Urdu) - \ue05a > \u095a; # LETTER GHHA (For Urdu) - \ue05b > \u095b; # LETTER ZA (For Urdu) - \ue05c > \u095c; # LETTER DDDHA (pronounced RRA) - \ue05d > \u095d; # LETTER RHA (pronounced RRHA) - \ue05e > \u095e; # LETTER FA - \ue05f > \u095f; # LETTER YYA - \ue060 > \u0960; # LETTER VOCALIC RR - \ue061 > \u0961; # LETTER VOCALIC LL - \ue062 > \u0962; # VOWEL SIGN VOCALIC L - \ue063 > \u0963; # VOWEL SIGN VOCALIC LL - \ue064 > \u0964; # DANDA - \ue065 > \u0965; # DOUBLE DANDA - \ue066 > \u0966; # DIGIT ZERO - \ue067 > \u0967; # DIGIT ONE - \ue068 > \u0968; # DIGIT TWO - \ue069 > \u0969; # DIGIT THREE - \ue06a > \u096a; # DIGIT FOUR - \ue06b > \u096b; # DIGIT FIVE - \ue06c > \u096c; # DIGIT SIX - \ue06d > \u096d; # DIGIT SEVEN - \ue06e > \u096e; # DIGIT EIGHT - \ue06f > \u096f; # DIGIT NINE - - \ue070>\u0970; # ABBREVIATION SIGN - \ue071>\u0930; # LETTER RA WITH MIDDLE DIAGONAL - \ue072>\u0930; # LETTER RA WITH LOWER DIAGONAL - \ue073>; # RUPEE MARK - \ue074>\u0930\u0942; # RUPEE SIGN - \ue075>; # CURRENCY NUMERATOR ONE - \ue076>; # CURRENCY NUMERATOR TWO - \ue077>; # CURRENCY NUMERATOR THREE - \ue078>; # CURRENCY NUMERATOR FOUR - \ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR - \ue07A>; # CURRENCY DENOMINATOR SIXTEEN - \ue07B>; # ISSHAR - \uE07C>; # TIPPI - \uE07D>; # ADDAK - \uE07E>; # IRI - \uE07F>; # URA - \uE080>; # EK ONKAR - \uE081>\u0935; # FALLBACK FOR ORIYA LETTER WA - -# \u0970 # UNMAPPED Devanagari-InterIndic: ABBREVIATION SIGN -# :: NFC; -# eof +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:15 PDT 2006 +# +\uE028\uE03C > ऩ; #\uE029 +\uE030\uE03C > ऱ; #\uE031 +\uE033\uE03C > ऴ; #\uE034 +\uE015\uE03C > क़; #\uE058 LETTER QA (For Urdu) +\uE016\uE03C > ख़; #\uE059 LETTER KHHA (For Urdu) +\uE017\uE03C > ग़; #\uE05A LETTER GHHA (For Urdu) +\uE01C\uE03C > ज़; #\uE05B LETTER ZA (For Urdu) +\uE021\uE03C > ड़; #\uE05C LETTER DDDHA (pronounced RRA) +\uE022\uE03C > ढ़; #\uE05D LETTER RHA (pronounced RRHA) +\uE02B\uE03C > फ़; #\uE05E LETTER FA +\uE02F\uE03C > य़; #\uE05F LETTER YYA +\uE012\uE057>औ; # FALLBACK FOR TAMIL AU +0 > ०; # FALLBACK FOR TAMIL +1 > १; +\uE055>; # FALLBACK BLOW AWAY KANNADA AND TELUGU LENGTH MARK +\uE056>; # FALLBACK BLOW AWAY KANNADA AND TELUGU AI LENGTH MARK +\uE057>; # FALLBACK BLOW AWAY TAMIL AU LENGTH MARK +\uE001 > \u0901; # SIGN CANDRABINDU +\uE002 > \u0902; # SIGN ANUSVARA +\uE003 > ः; # SIGN VISARGA +\uE004 > ऄ; # SIGN SHORT A +\uE005 > अ; # LETTER A +\uE006 > आ; # LETTER AA +\uE007 > इ; # LETTER I +\uE008 > ई; # LETTER II +\uE009 > उ; # LETTER U +\uE00A > ऊ; # LETTER UU +\uE00B > ऋ; # LETTER VOCALIC R +\uE00C > ऌ; # LETTER VOCALIC L +\uE00D > ऍ; # LETTER CANDRA E (For representing English sounds) +\uE00E > ऎ; # LETTER SHORT E(For Southern Scripts) +\uE00F > ए; # LETTER E +\uE010 > ऐ; # LETTER AI +\uE011 > ऑ; # LETTER CANDRA O (For representing English sounds) +\uE012 > ऒ; # LETTER SHORT O (For Southern Scripts) +\uE013 > ओ; # LETTER O +\uE014 > औ; # LETTER AU +\uE015 > क; # LETTER KA +\uE016 > ख; # LETTER KHA +\uE017 > ग; # LETTER GA +\uE018 > घ; # LETTER GHA +\uE019 > ङ; # LETTER NGA +\uE01A > च; # LETTER CA +\uE01B > छ; # LETTER CHA +\uE01C > ज; # LETTER JA +\uE01D > झ; # LETTER JHA +\uE01E > ञ; # LETTER NYA +\uE01F > ट; # LETTER TTA +\uE020 > ठ; # LETTER TTHA +\uE021 > ड; # LETTER DDA +\uE022 > ढ; # LETTER DDHA +\uE023 > ण; # LETTER NNA +\uE024 > त; # LETTER TA +\uE025 > थ; # LETTER THA +\uE026 > द; # LETTER DA +\uE027 > ध; # LETTER DHA +\uE028 > न; # LETTER NA +\uE029 > ऩ; # LETTER NNNA +\uE02A > प; # LETTER PA +\uE02B > फ; # LETTER PHA +\uE02C > ब; # LETTER BA +\uE02D > भ; # LETTER BHA +\uE02E > म; # LETTER MA +\uE02F > य; # LETTER YA +\uE030 > र; # LETTER RA +\uE031 > ऱ; # LETTER RRA (Eyelash RA for Southern scripts) +\uE032 > ल; # LETTER LA +\uE033 > ळ; # LETTER LLA +\uE034 > ऴ; # LETTER LLLA (LLLA for Southern scripts) +\uE035 > व; # LETTER VA +\uE036 > श; # LETTER SHA +\uE037 > ष; # LETTER SSA +\uE038 > स; # LETTER SA +\uE039 > ह; # LETTER HA +\uE03C > \u093C; # SIGN NUKTA +\uE03D > ऽ; # SIGN AVAGRAHA +\uE03E > ा; # VOWEL SIGN AA +\uE03F > ि; # VOWEL SIGN I +\uE040 > ी; # VOWEL SIGN II +\uE041 > \u0941; # VOWEL SIGN U +\uE042 > \u0942; # VOWEL SIGN UU +\uE043 > \u0943; # VOWEL SIGN VOCALIC R +\uE044 > \u0944; # VOWEL SIGN VOCALIC RR +\uE045 > \u0945; # VOWEL SIGN CANDRA E +\uE046 > \u0946; # VOWEL SIGN SHORT E +\uE047 > \u0947; # VOWEL SIGN E +\uE048 > \u0948; # VOWEL SIGN AI +\uE049 > ॉ; # VOWEL SIGN CANDRA O +\uE04A > ॊ; # VOWEL SIGN SHORT O +\uE04B > ो; # VOWEL SIGN O +\uE04C > ौ; # VOWEL SIGN AU +\uE04D > \u094D; # SIGN VIRAMA +\uE050 > ॐ; # OM +\uE051 > \u0951; # STRESS SIGN UDATTA +\uE052 > \u0952; # STRESS SIGN ANUDATTA +\uE053 > \u0953; # GRAVE ACCENT +\uE054 > \u0954; # ACUTE ACCENT +\uE058 > क़; # LETTER QA (For Urdu) +\uE059 > ख़; # LETTER KHHA (For Urdu) +\uE05A > ग़; # LETTER GHHA (For Urdu) +\uE05B > ज़; # LETTER ZA (For Urdu) +\uE05C > ड़; # LETTER DDDHA (pronounced RRA) +\uE05D > ढ़; # LETTER RHA (pronounced RRHA) +\uE05E > फ़; # LETTER FA +\uE05F > य़; # LETTER YYA +\uE060 > ॠ; # LETTER VOCALIC RR +\uE061 > ॡ; # LETTER VOCALIC LL +\uE062 > \u0962; # VOWEL SIGN VOCALIC L +\uE063 > \u0963; # VOWEL SIGN VOCALIC LL +\uE064 > ।; # DANDA +\uE065 > ॥; # DOUBLE DANDA +\uE066 > ०; # DIGIT ZERO +\uE067 > १; # DIGIT ONE +\uE068 > २; # DIGIT TWO +\uE069 > ३; # DIGIT THREE +\uE06A > ४; # DIGIT FOUR +\uE06B > ५; # DIGIT FIVE +\uE06C > ६; # DIGIT SIX +\uE06D > ७; # DIGIT SEVEN +\uE06E > ८; # DIGIT EIGHT +\uE06F > ९; # DIGIT NINE +\uE070>॰; # ABBREVIATION SIGN +\uE071>र; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>र; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>र\u0942; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR +\uE07C>; # TIPPI +\uE07D>; # ADDAK +\uE07E>; # IRI +\uE07F>; # URA +\uE080>; # EK ONKAR +\uE081>व; # FALLBACK FOR ORIYA LETTER WA +\uE082>ॽ; # Devanagari Glottal Sign +\uE083>त\u094D; # Bengali Khanda-ta diff --git a/icuSources/data/translit/InterIndic_Gujarati.txt b/icuSources/data/translit/InterIndic_Gujarati.txt index 92382453..14063c22 100644 --- a/icuSources/data/translit/InterIndic_Gujarati.txt +++ b/icuSources/data/translit/InterIndic_Gujarati.txt @@ -1,138 +1,138 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Gujarati -#:: NFD (NFC) ; -\ue001>\u0a81; # SIGN CANDRABINDU -\ue002>\u0a82; # SIGN ANUSVARA -\ue003>\u0a83; # SIGN VISARGA -\uE004>\u0a85; # FALLBACK TO LETTER A -\ue005>\u0a85; # LETTER A -\ue006>\u0a86; # LETTER AA -\ue007>\u0a87; # LETTER I -\ue008>\u0a88; # LETTER II -\ue009>\u0a89; # LETTER U -\ue00a>\u0a8a; # LETTER UU -\ue00b>\u0a8b; # LETTER VOCALIC R -\ue00c>\u0a8c; # LETTER VOCALIC L -\ue00d>\u0a8d; # GUJARATI VOWEL CANDRA E -\ue00e>\u0a8f; # FALLBACK -\ue00f>\u0a8f; # InterIndic-Gujarati: LETTER EE (\u0a8f = LETTER E) -\ue010>\u0a90; # LETTER AI -\ue011>\u0a91; # FALLBACK -\ue012>\u0a93; # FALLBACK -\ue013>\u0a93; # UNMAPPED InterIndic-Gujarati: LETTER OO (\u0a93 = LETTER O) -\ue014>\u0a94; # LETTER AU -\ue015>\u0a95; # LETTER KA -\ue016>\u0a96; # LETTER KHA -\ue017>\u0a97; # LETTER GA -\ue018>\u0a98; # LETTER GHA -\ue019>\u0a99; # LETTER NGA -\ue01a>\u0a9a; # LETTER CA -\ue01b>\u0a9b; # LETTER CHA -\ue01c>\u0a9c; # LETTER JA -\ue01d>\u0a9d; # LETTER JHA -\ue01e>\u0a9e; # LETTER NYA -\ue01f>\u0a9f; # LETTER TTA -\ue020>\u0aa0; # LETTER TTHA -\ue021>\u0aa1; # LETTER DDA -\ue022>\u0aa2; # LETTER DDHA -\ue023>\u0aa3; # LETTER NNA -\ue024>\u0aa4; # LETTER TA -\ue025>\u0aa5; # LETTER THA -\ue026>\u0aa6; # LETTER DA -\ue027>\u0aa7; # LETTER DHA -\ue028>\u0aa8; # LETTER NA -\ue029>\u0aa8\u0abc; # FALLBACK to NA+NUKTA -\ue02a>\u0aaa; # LETTER PA -\ue02b>\u0aab; # LETTER PHA -\ue02c>\u0aac; # LETTER BA -\ue02d>\u0aad; # LETTER BHA -\ue02e>\u0aae; # LETTER MA -\ue02f>\u0aaf; # LETTER YA -\ue030>\u0ab0; # LETTER RA -\ue031>\u0ab0\u0abc; # FALLBACK -\ue032>\u0ab2; # LETTER LA -\ue033>\u0ab3; # LETTER LLA -\ue034>\u0ab3\u0abc; # LETTER LLLA>LETTER LLA+NUKTA -\ue035>\u0ab5; # LETTER VA -\ue036>\u0ab6; # LETTER SHA -\ue037>\u0ab7; # LETTER SSA -\ue038>\u0ab8; # LETTER SA -\ue039>\u0ab9; # LETTER HA -\ue03c>\u0abc; # SIGN NUKTA -\ue03d>\u0abd; # SIGN AVAGRAHA -\ue03e>\u0abe; # VOWEL SIGN AA -\ue03f>\u0abf; # VOWEL SIGN I -\ue040>\u0ac0; # VOWEL SIGN II -\ue041>\u0ac1; # VOWEL SIGN U -\ue042>\u0ac2; # VOWEL SIGN UU -\ue043>\u0ac3; # VOWEL SIGN VOCALIC R -\ue044>\u0ac4; # VOWEL SIGN VOCALIC RR -\ue045>\u0ac5; # VOWEL SIGN CANDRA E -\ue046>\u0ac7; # FALLBACK -\ue047>\u0ac7; # InterIndic-Gujarati: VOWEL SIGN EE (\u0ac7 = VOWEL SIGN E) -\ue048>\u0ac8; # VOWEL SIGN AI -\ue049>\u0ac9; # VOWEL SIGN CANDRA O -\ue04a>\u0acb; # FALLBACK -\ue04b>\u0acb; # UNMAPPED InterIndic-Gujarati: VOWEL SIGN OO (\u0acb = VOWEL SIGN O) -\ue04c>\u0acc; # VOWEL SIGN AU -\ue04d>\u0acd; # SIGN VIRAMA -\ue050>\u0ad0; # OM -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>; # UNMAPPED InterIndic-Gujarati: LENGTH MARK -\ue056>\u0ac8; # REMAP (indicExceptions.txt): \u0ad6>\u0ac8 = AI LENGTH MARK>VOWEL SIGN AI -\ue057>\u0acc; # REMAP (indicExceptions.txt): \u0ad7>\u0acc = AU LENGTH MARK>VOWEL SIGN AU -\ue058>\u0a95\u0abc; # FALLBACK -\ue059>\u0a96\u0abc; # REMAP (indicExceptions.txt): \u0ad9>\u0a96\u0abc = LETTER KHHA>LETTER KHA.SIGN NUKTA -\ue05a>\u0a97\u0abc; # REMAP (indicExceptions.txt): \u0ada>\u0a97\u0abc = LETTER GHHA>LETTER GA.SIGN NUKTA -\ue05b>\u0a9c\u0abc; # REMAP (indicExceptions.txt): \u0adb>\u0a9c\u0abc = LETTER ZA>LETTER JA.SIGN NUKTA -\ue05c>\u0aa1\u0abc; # FALLBACK -\ue05d>\u0aa2\u0abc; # REMAP (indicExceptions.txt): \u0add>\u0aa2\u0abc = LETTER RHA>LETTER DDHA.SIGN NUKTA -\ue05e>\u0aab\u0abc; # REMAP (indicExceptions.txt): \u0ade>\u0aab\u0abc = LETTER FA>LETTER PHA.SIGN NUKTA -\ue05f>\u0aaf\u0abc; # REMAP (indicExceptions.txt): \u0adf>\u0aaf\u0abc = LETTER YYA>LETTER YA.SIGN NUKTA -\ue060>\u0ae0; # LETTER VOCALIC RR -\ue061>\u0ae1; # LETTER VOCALIC LL -\ue062>\u0abf\u0abc; # REMAP (indicExceptions.txt): \u0ae2>\u0abf\u0abc = VOWEL SIGN VOCALIC L>VOWEL SIGN I.SIGN NUKTA -\ue063>\u0ac0\u0abc; # REMAP (indicExceptions.txt): \u0ae3>\u0ac0\u0abc = VOWEL SIGN VOCALIC LL>VOWEL SIGN II.SIGN NUKTA -\uE064>\u0964; # DANDA -\uE065>\u0965; # DOUBLE DANDA -\ue066>\u0ae6; # DIGIT ZERO -\ue067>\u0ae7; # DIGIT ONE -\ue068>\u0ae8; # DIGIT TWO -\ue069>\u0ae9; # DIGIT THREE -\ue06a>\u0aea; # DIGIT FOUR -\ue06b>\u0aeb; # DIGIT FIVE -\ue06c>\u0aec; # DIGIT SIX -\ue06d>\u0aed; # DIGIT SEVEN -\ue06e>\u0aee; # DIGIT EIGHT -\ue06f>\u0aef; # DIGIT NINE -\ue070>; # ABBREVIATION SIGN -\ue071>\u0ab0; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0ab0; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>; # ISSHAR +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\uE001>\u0A81; # SIGN CANDRABINDU +\uE002>\u0A82; # SIGN ANUSVARA +\uE003>ઃ; # SIGN VISARGA +\uE004>અ; # FALLBACK TO LETTER A +\uE005>અ; # LETTER A +\uE006>આ; # LETTER AA +\uE007>ઇ; # LETTER I +\uE008>ઈ; # LETTER II +\uE009>ઉ; # LETTER U +\uE00A>ઊ; # LETTER UU +\uE00B>ઋ; # LETTER VOCALIC R +\uE00C>ઌ; # LETTER VOCALIC L +\uE00D>ઍ; # GUJARATI VOWEL CANDRA E +\uE00E>એ; # FALLBACK +\uE00F>એ; # InterIndic-Gujarati: LETTER EE (એ = LETTER E) +\uE010>ઐ; # LETTER AI +\uE011>ઑ; # FALLBACK +\uE012>ઓ; # FALLBACK +\uE013>ઓ; # UNMAPPED InterIndic-Gujarati: LETTER OO (ઓ = LETTER O) +\uE014>ઔ; # LETTER AU +\uE015>ક; # LETTER KA +\uE016>ખ; # LETTER KHA +\uE017>ગ; # LETTER GA +\uE018>ઘ; # LETTER GHA +\uE019>ઙ; # LETTER NGA +\uE01A>ચ; # LETTER CA +\uE01B>છ; # LETTER CHA +\uE01C>જ; # LETTER JA +\uE01D>ઝ; # LETTER JHA +\uE01E>ઞ; # LETTER NYA +\uE01F>ટ; # LETTER TTA +\uE020>ઠ; # LETTER TTHA +\uE021>ડ; # LETTER DDA +\uE022>ઢ; # LETTER DDHA +\uE023>ણ; # LETTER NNA +\uE024>ત; # LETTER TA +\uE025>થ; # LETTER THA +\uE026>દ; # LETTER DA +\uE027>ધ; # LETTER DHA +\uE028>ન; # LETTER NA +\uE029>ન\u0ABC; # FALLBACK to NA+NUKTA +\uE02A>પ; # LETTER PA +\uE02B>ફ; # LETTER PHA +\uE02C>બ; # LETTER BA +\uE02D>ભ; # LETTER BHA +\uE02E>મ; # LETTER MA +\uE02F>ય; # LETTER YA +\uE030>ર; # LETTER RA +\uE031>ર\u0ABC; # FALLBACK +\uE032>લ; # LETTER LA +\uE033>ળ; # LETTER LLA +\uE034>ળ\u0ABC; # LETTER LLLA>LETTER LLA+NUKTA +\uE035>વ; # LETTER VA +\uE036>શ; # LETTER SHA +\uE037>ષ; # LETTER SSA +\uE038>સ; # LETTER SA +\uE039>હ; # LETTER HA +\uE03C>\u0ABC; # SIGN NUKTA +\uE03D>ઽ; # SIGN AVAGRAHA +\uE03E>ા; # VOWEL SIGN AA +\uE03F>િ; # VOWEL SIGN I +\uE040>ી; # VOWEL SIGN II +\uE041>\u0AC1; # VOWEL SIGN U +\uE042>\u0AC2; # VOWEL SIGN UU +\uE043>\u0AC3; # VOWEL SIGN VOCALIC R +\uE044>\u0AC4; # VOWEL SIGN VOCALIC RR +\uE045>\u0AC5; # VOWEL SIGN CANDRA E +\uE046>\u0AC7; # FALLBACK +\uE047>\u0AC7; # InterIndic-Gujarati: VOWEL SIGN EE (\u0AC7 = VOWEL SIGN E) +\uE048>\u0AC8; # VOWEL SIGN AI +\uE049>ૉ; # VOWEL SIGN CANDRA O +\uE04A>ો; # FALLBACK +\uE04B>ો; # UNMAPPED InterIndic-Gujarati: VOWEL SIGN OO (ો = VOWEL SIGN O) +\uE04C>ૌ; # VOWEL SIGN AU +\uE04D>\u0ACD; # SIGN VIRAMA +\uE050>ૐ; # OM +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>; # UNMAPPED InterIndic-Gujarati: LENGTH MARK +\uE056>\u0AC8; # REMAP (indicExceptions.txt): \u0AD6>\u0AC8 = AI LENGTH MARK>VOWEL SIGN AI +\uE057>ૌ; # REMAP (indicExceptions.txt): \u0AD7>ૌ = AU LENGTH MARK>VOWEL SIGN AU +\uE058>ક\u0ABC; # FALLBACK +\uE059>ખ\u0ABC; # REMAP (indicExceptions.txt): \u0AD9>ખ\u0ABC = LETTER KHHA>LETTER KHA.SIGN NUKTA +\uE05A>ગ\u0ABC; # REMAP (indicExceptions.txt): \u0ADA>ગ\u0ABC = LETTER GHHA>LETTER GA.SIGN NUKTA +\uE05B>જ\u0ABC; # REMAP (indicExceptions.txt): \u0ADB>જ\u0ABC = LETTER ZA>LETTER JA.SIGN NUKTA +\uE05C>ડ\u0ABC; # FALLBACK +\uE05D>ઢ\u0ABC; # REMAP (indicExceptions.txt): \u0ADD>ઢ\u0ABC = LETTER RHA>LETTER DDHA.SIGN NUKTA +\uE05E>ફ\u0ABC; # REMAP (indicExceptions.txt): \u0ADE>ફ\u0ABC = LETTER FA>LETTER PHA.SIGN NUKTA +\uE05F>ય\u0ABC; # REMAP (indicExceptions.txt): \u0ADF>ય\u0ABC = LETTER YYA>LETTER YA.SIGN NUKTA +\uE060>à« ; # LETTER VOCALIC RR +\uE061>à«¡; # LETTER VOCALIC LL +\uE062>િ\u0ABC; # REMAP (indicExceptions.txt): \u0AE2>િ\u0ABC = VOWEL SIGN VOCALIC L>VOWEL SIGN I.SIGN NUKTA +\uE063>ી\u0ABC; # REMAP (indicExceptions.txt): \u0AE3>ી\u0ABC = VOWEL SIGN VOCALIC LL>VOWEL SIGN II.SIGN NUKTA +\uE064>।; # DANDA +\uE065>॥; # DOUBLE DANDA +\uE066>૦; # DIGIT ZERO +\uE067>૧; # DIGIT ONE +\uE068>૨; # DIGIT TWO +\uE069>à«©; # DIGIT THREE +\uE06A>૪; # DIGIT FOUR +\uE06B>à««; # DIGIT FIVE +\uE06C>૬; # DIGIT SIX +\uE06D>à«­; # DIGIT SEVEN +\uE06E>à«®; # DIGIT EIGHT +\uE06F>૯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>ર; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>ર; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u0ab5; # FALLBACK FOR ORIYA LETTER WA -0 > \u0ae6; # FALLBACK FOR TAMIL -1 > \u0ae7; - -#\ue080>; # UNMAPPED InterIndic-Gujarati: ISSHAR -# :: NFC (NFD) ; -# eof +\uE081>વ; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>ત\u0ACD; # Bengali Khanda-ta +0 > ૦; # FALLBACK FOR TAMIL +1 > ૧; diff --git a/icuSources/data/translit/InterIndic_Gurmukhi.txt b/icuSources/data/translit/InterIndic_Gurmukhi.txt index a2236da9..81c35314 100644 --- a/icuSources/data/translit/InterIndic_Gurmukhi.txt +++ b/icuSources/data/translit/InterIndic_Gurmukhi.txt @@ -1,147 +1,142 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Gurmukhi -#:: NFD (NFC) ; -$vowel = [\u0A05-\u0A14 \u0A3e-\u0A4D]; -$consonant = [\u0A15-\u0A39]; - -\ue001>\u0a01; # SIGN CHANDRABINDU -#rules for BINDI - -# Anusvara is equivalent to BINDI when preceeded by a vowel -$vowel{\ue002>\u0a02; # SIGN ANUSVARA (\u0a02 = SIGN BINDI) -# else is equivalent to TIPPI -$consonant{\ue002>\u0a70; # SIGN TIPPI -\ue002>\u0a02; - -\ue003>; # FALLBACK BLOW AWAY SIGN VISARGA -\uE004>\u0a05; # FALLBACK TO LETTER A -\ue005>\u0a05; # LETTER A -\ue006>\u0a06; # LETTER AA -\ue007>\u0a07; # LETTER I -\ue008>\u0a08; # LETTER II -\ue009>\u0a09; # LETTER U -\ue00a>\u0a0a; # LETTER UU -\ue00b>\u0a30\u0a3f; # REMAP (indicExceptions.txt): \u0a0b>\u0a30\u0a3f = LETTER VOCALIC R>LETTER RA.VOWEL SIGN I -\ue00c>\u0a33; # FALLBACK -\ue00d>\u0a0f; # FALLBACK -\ue00e>\u0a0f; # FALLBACK -\ue00f>\u0a0f; # LETTER EE -\ue010>\u0a10; # LETTER AI -\ue011>\u0a13; # FALLBACK -\ue012>\u0a13; # FALLBACK -\ue013>\u0a13; # LETTER OO -\ue014>\u0a14; # LETTER AU -\ue015>\u0a15; # LETTER KA -\ue016>\u0a16; # LETTER KHA -\ue017>\u0a17; # LETTER GA -\ue018>\u0a18; # LETTER GHA -\ue019>\u0a19; # LETTER NGA -\ue01a>\u0a1a; # LETTER CA -\ue01b>\u0a1b; # LETTER CHA -\ue01c>\u0a1c; # LETTER JA -\ue01d>\u0a1d; # LETTER JHA -\ue01e>\u0a1e; # LETTER NYA -\ue01f>\u0a1f; # LETTER TTA -\ue020>\u0a20; # LETTER TTHA -\ue021>\u0a21; # LETTER DDA -\ue022>\u0a22; # LETTER DDHA -\ue023>\u0a23; # LETTER NNA -\ue024>\u0a24; # LETTER TA -\ue025>\u0a25; # LETTER THA -\ue026>\u0a26; # LETTER DA -\ue027>\u0a27; # LETTER DHA -\ue028>\u0a28; # LETTER NA -\ue029>\u0a28\u0a3c; # REMAP (indicExceptions.txt): \u0a29>\u0a28 = LETTER NNNA>LETTER NA -\ue02a>\u0a2a; # LETTER PA -\ue02b>\u0a2b; # LETTER PHA -\ue02c>\u0a2c; # LETTER BA -\ue02d>\u0a2d; # LETTER BHA -\ue02e>\u0a2e; # LETTER MA -\ue02f>\u0a2f; # LETTER YA -\ue030>\u0a30; # LETTER RA -\ue031>\u0a30\u0a3c; # FALLBACK LETTER RA+NUKTA -\ue032>\u0a32; # LETTER LA -\ue033>\u0a33; # LETTER LLA -\ue034>\u0a33; # REMAP (indicExceptions.txt): \u0a34>\u0a33 = LETTER LLLA>LETTER LLA -\ue035>\u0a35; # LETTER VA -\ue036>\u0a36; # LETTER SHA -\ue037>\u0a36; # REMAP (indicExceptions.txt): \u0a37>\u0a36 = LETTER SSA>LETTER SHA -\ue038>\u0a38; # LETTER SA -\ue039>\u0a39; # LETTER HA -\ue03c>\u0a3c; # SIGN NUKTA -\ue03d>; # FALLBACK BLOW AWAY SIGN AVAGRAHA -\ue03e>\u0a3e; # VOWEL SIGN AA -\ue03f>\u0a3f; # VOWEL SIGN I -\ue040>\u0a40; # VOWEL SIGN II -\ue041>\u0a41; # VOWEL SIGN U -\ue042>\u0a42; # VOWEL SIGN UU -\ue043>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC R -\ue044>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC RR -\ue045>\u0a48; # REMAP (indicExceptions.txt): \u0a45>\u0a48 = VOWEL SIGN CANDRA E>VOWEL SIGN AI -\ue046>\u0a47; # FALLABCK -\ue047>\u0a47; # VOWEL SIGN EE -\ue048>\u0a48; # VOWEL SIGN AI -\ue049>\u0a4c; # REMAP (indicExceptions.txt): \u0a49>\u0a4c = VOWEL SIGN CANDRA O>VOWEL SIGN AU -\ue04a>\u0a4b; # FALLBACK -\ue04b>\u0a4b; # VOWEL SIGN OO -\ue04c>\u0a4c; # VOWEL SIGN AU -\ue04d>\u0a4d; # SIGN VIRAMA -\ue050>\u0a0f\u0a02; # FALLBACK to OO+BINDI : OM -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>; # FALLBACK BLOW AWAY LENGTH MARK -\ue056>\u0a48; # REMAP (indicExceptions.txt): \u0a56>\u0a48 = AI LENGTH MARK>VOWEL SIGN AI -\ue057>\u0a4c; # REMAP (indicExceptions.txt): \u0a57>\u0a4c = AU LENGTH MARK>VOWEL SIGN AU -\ue058>\u0a15\u0a3c; # FALLBACK RA+ NUKTA -\ue059>\u0a59; # LETTER KHHA -\ue05a>\u0a5a; # LETTER GHHA -\ue05b>\u0a5b; # LETTER ZA -\ue05c>\u0a5c; # LETTER RRA -\ue05d>\u0a22\u0a3c; # REMAP (indicExceptions.txt): \u0a5d>\u0a22\u0a3c = LETTER RHA>LETTER DDHA.SIGN NUKTA -\ue05e>\u0a5e; # LETTER FA -\ue05f>\u0a2f\u0a3c; # REMAP (indicExceptions.txt): \u0a5f>\u0a2f = LETTER YYA>LETTER YA -\ue060>\u0a30\u0a3f; # REMAP (indicExceptions.txt): \u0a60>\u0a30\u0a3f = LETTER VOCALIC RR>LETTER RA.VOWEL SIGN I -\ue061>\u0a32\u0a3c; # -\ue062>\u0a3f\u0a3c; # REMAP (indicExceptions.txt): \u0a62>\u0a3f\u0a3c = VOWEL SIGN VOCALIC L>VOWEL SIGN I.SIGN NUKTA -\ue063>\u0a40\u0a3c; # REMAP (indicExceptions.txt): \u0a63>\u0a40\u0a3c = VOWEL SIGN VOCALIC LL>VOWEL SIGN II.SIGN NUKTA -\uE064>\u0964; # DANDA -\uE065>\u0965; # DOUBLE DANDA -\ue066>\u0a66; # DIGIT ZERO -\ue067>\u0a67; # DIGIT ONE -\ue068>\u0a68; # DIGIT TWO -\ue069>\u0a69; # DIGIT THREE -\ue06a>\u0a6a; # DIGIT FOUR -\ue06b>\u0a6b; # DIGIT FIVE -\ue06c>\u0a6c; # DIGIT SIX -\ue06d>\u0a6d; # DIGIT SEVEN -\ue06e>\u0a6e; # DIGIT EIGHT -\ue06f>\u0a6f; # DIGIT NINE -\ue070>; # ABBREVIATION SIGN -\ue071>\u0a30; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0a30; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>; # ISSHAR -\uE07C>\u0a70; # TIPPI -\uE07D>\u0a71; # ADDAK -\uE07E>\u0a72; # IRI -\uE07F>\u0a73; # URA -\uE080>\u0a74; # EK ONKAR -\uE081>\u0a35; # FALLBACK FOR ORIYA LETTER WA - -0 > \u0a66; # FALLBACK FOR TAMIL -1 > \u0a67; -# :: NFC (NFD) ; -# eof +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +$vowel = [ਅ-ਔ ਾ-\u0A4D]; +$consonant = [ਕ-ਹ]; +\uE001>\u0A01; # SIGN CHANDRABINDU +$vowel{\uE002>\u0A02; # SIGN ANUSVARA (\u0A02 = SIGN BINDI) +$consonant{\uE002>\u0A70; # SIGN TIPPI +\uE002>\u0A02; +\uE003>; # FALLBACK BLOW AWAY SIGN VISARGA +\uE004>ਅ; # FALLBACK TO LETTER A +\uE005>ਅ; # LETTER A +\uE006>ਆ; # LETTER AA +\uE007>ਇ; # LETTER I +\uE008>ਈ; # LETTER II +\uE009>ਉ; # LETTER U +\uE00A>ਊ; # LETTER UU +\uE00B>ਰਿ; # REMAP (indicExceptions.txt): \u0A0B>ਰਿ = LETTER VOCALIC R>LETTER RA.VOWEL SIGN I +\uE00C>ਲ਼; # FALLBACK +\uE00D>ਏ; # FALLBACK +\uE00E>ਏ; # FALLBACK +\uE00F>ਏ; # LETTER EE +\uE010>ਐ; # LETTER AI +\uE011>ਓ; # FALLBACK +\uE012>ਓ; # FALLBACK +\uE013>ਓ; # LETTER OO +\uE014>ਔ; # LETTER AU +\uE015>ਕ; # LETTER KA +\uE016>ਖ; # LETTER KHA +\uE017>ਗ; # LETTER GA +\uE018>ਘ; # LETTER GHA +\uE019>ਙ; # LETTER NGA +\uE01A>ਚ; # LETTER CA +\uE01B>ਛ; # LETTER CHA +\uE01C>ਜ; # LETTER JA +\uE01D>ਝ; # LETTER JHA +\uE01E>ਞ; # LETTER NYA +\uE01F>ਟ; # LETTER TTA +\uE020>ਠ; # LETTER TTHA +\uE021>ਡ; # LETTER DDA +\uE022>ਢ; # LETTER DDHA +\uE023>ਣ; # LETTER NNA +\uE024>ਤ; # LETTER TA +\uE025>ਥ; # LETTER THA +\uE026>ਦ; # LETTER DA +\uE027>ਧ; # LETTER DHA +\uE028>ਨ; # LETTER NA +\uE029>ਨ\u0A3C; # REMAP (indicExceptions.txt): \u0A29>ਨ = LETTER NNNA>LETTER NA +\uE02A>ਪ; # LETTER PA +\uE02B>ਫ; # LETTER PHA +\uE02C>ਬ; # LETTER BA +\uE02D>ਭ; # LETTER BHA +\uE02E>ਮ; # LETTER MA +\uE02F>ਯ; # LETTER YA +\uE030>ਰ; # LETTER RA +\uE031>ਰ\u0A3C; # FALLBACK LETTER RA+NUKTA +\uE032>ਲ; # LETTER LA +\uE033>ਲ; # LETTER LLA +\uE034>ਲ਼; # REMAP (indicExceptions.txt): \u0A34>ਲ਼ = LETTER LLLA>LETTER LLA +\uE035>ਵ; # LETTER VA +\uE036>ਸ਼; # LETTER SHA +\uE037>ਸ਼; # REMAP (indicExceptions.txt): \u0A37>ਸ਼ = LETTER SSA>LETTER SHA +\uE038>ਸ; # LETTER SA +\uE039>ਹ; # LETTER HA +\uE03C>\u0A3C; # SIGN NUKTA +\uE03D>; # FALLBACK BLOW AWAY SIGN AVAGRAHA +\uE03E>ਾ; # VOWEL SIGN AA +\uE03F>ਿ; # VOWEL SIGN I +\uE040>ੀ; # VOWEL SIGN II +\uE041>\u0A41; # VOWEL SIGN U +\uE042>\u0A42; # VOWEL SIGN UU +\uE043>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC R +\uE044>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC RR +\uE045>\u0A48; # REMAP (indicExceptions.txt): \u0A45>\u0A48 = VOWEL SIGN CANDRA E>VOWEL SIGN AI +\uE046>\u0A47; # FALLABCK +\uE047>\u0A47; # VOWEL SIGN EE +\uE048>\u0A48; # VOWEL SIGN AI +\uE049>\u0A4C; # REMAP (indicExceptions.txt): \u0A49>\u0A4C = VOWEL SIGN CANDRA O>VOWEL SIGN AU +\uE04A>\u0A4B; # FALLBACK +\uE04B>\u0A4B; # VOWEL SIGN OO +\uE04C>\u0A4C; # VOWEL SIGN AU +\uE04D>\u0A4D; # SIGN VIRAMA +\uE050>ਏ\u0A02; # FALLBACK to OO+BINDI : OM +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>; # FALLBACK BLOW AWAY LENGTH MARK +\uE056>\u0A48; # REMAP (indicExceptions.txt): \u0A56>\u0A48 = AI LENGTH MARK>VOWEL SIGN AI +\uE057>\u0A4C; # REMAP (indicExceptions.txt): \u0A57>\u0A4C = AU LENGTH MARK>VOWEL SIGN AU +\uE058>ਕ\u0A3C; # FALLBACK RA+ NUKTA +\uE059>ਖ਼; # LETTER KHHA +\uE05A>ਗ਼; # LETTER GHHA +\uE05B>ਜ਼; # LETTER ZA +\uE05C>ੜ; # LETTER RRA +\uE05D>ਢ\u0A3C; # REMAP (indicExceptions.txt): \u0A5D>ਢ\u0A3C = LETTER RHA>LETTER DDHA.SIGN NUKTA +\uE05E>ਫ਼; # LETTER FA +\uE05F>ਯ\u0A3C; # REMAP (indicExceptions.txt): \u0A5F>ਯ = LETTER YYA>LETTER YA +\uE060>ਰਿ; # REMAP (indicExceptions.txt): \u0A60>ਰਿ = LETTER VOCALIC RR>LETTER RA.VOWEL SIGN I +\uE061>ਲ\u0A3C; # +\uE062>ਿ\u0A3C; # REMAP (indicExceptions.txt): \u0A62>ਿ\u0A3C = VOWEL SIGN VOCALIC L>VOWEL SIGN I.SIGN NUKTA +\uE063>ੀ\u0A3C; # REMAP (indicExceptions.txt): \u0A63>ੀ\u0A3C = VOWEL SIGN VOCALIC LL>VOWEL SIGN II.SIGN NUKTA +\uE064>।; # DANDA +\uE065>॥; # DOUBLE DANDA +\uE066>੦; # DIGIT ZERO +\uE067>੧; # DIGIT ONE +\uE068>੨; # DIGIT TWO +\uE069>à©©; # DIGIT THREE +\uE06A>੪; # DIGIT FOUR +\uE06B>à©«; # DIGIT FIVE +\uE06C>੬; # DIGIT SIX +\uE06D>à©­; # DIGIT SEVEN +\uE06E>à©®; # DIGIT EIGHT +\uE06F>੯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>ਰ; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>ਰ; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR +\uE07C>\u0A70; # TIPPI +\uE07D>\u0A71; # ADDAK +\uE07E>ੲ; # IRI +\uE07F>ੳ; # URA +\uE080>à©´; # EK ONKAR +\uE081>ਵ; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>ਤ\u0A4D; # Bengali Khanda-ta +0 > ੦; # FALLBACK FOR TAMIL +1 > ੧; diff --git a/icuSources/data/translit/InterIndic_Kannada.txt b/icuSources/data/translit/InterIndic_Kannada.txt index 18ea84ae..92a8d141 100644 --- a/icuSources/data/translit/InterIndic_Kannada.txt +++ b/icuSources/data/translit/InterIndic_Kannada.txt @@ -1,141 +1,140 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Kannada -#:: NFD (NFC) ; -\ue033\ue03c>\u0cde; # LETTER FA -\ue001>\u0c82; # REMAP (indicExceptions.txt): \u0c81>\u0c82 = SIGN CANDRABINDU>SIGN ANUSVARA -\ue002>\u0c82; # SIGN ANUSVARA -\ue003>\u0c83; # SIGN VISARGA -\uE004>\u0c85; # FALLBACK TO LETTER A -\ue005>\u0c85; # LETTER A -\ue006>\u0c86; # LETTER AA -\ue007>\u0c87; # LETTER I -\ue008>\u0c88; # LETTER II -\ue009>\u0c89; # LETTER U -\ue00a>\u0c8a; # LETTER UU -\ue00b>\u0c8b; # LETTER VOCALIC R -\ue00c>\u0c8c; # LETTER VOCALIC L -\ue00d>\u0c8e; # LETTER E -\ue00e>\u0c8e; # FALLBACK -\ue00f>\u0c8f; # LETTER EE -\ue010>\u0c90; # LETTER AI -\ue011>\u0c92; # FALLBACK -\ue012>\u0c92; # LETTER O -\ue013>\u0c93; # LETTER OO -\ue014>\u0c94; # LETTER AU -\ue015>\u0c95; # LETTER KA -\ue016>\u0c96; # LETTER KHA -\ue017>\u0c97; # LETTER GA -\ue018>\u0c98; # LETTER GHA -\ue019>\u0c99; # LETTER NGA -\ue01a>\u0c9a; # LETTER CA -\ue01b>\u0c9b; # LETTER CHA -\ue01c>\u0c9c; # LETTER JA -\ue01d>\u0c9d; # LETTER JHA -\ue01e>\u0c9e; # LETTER NYA -\ue01f>\u0c9f; # LETTER TTA -\ue020>\u0ca0; # LETTER TTHA -\ue021>\u0ca1; # LETTER DDA -\ue022>\u0ca2; # LETTER DDHA -\ue023>\u0ca3; # LETTER NNA -\ue024>\u0ca4; # LETTER TA -\ue025>\u0ca5; # LETTER THA -\ue026>\u0ca6; # LETTER DA -\ue027>\u0ca7; # LETTER DHA -\ue028>\u0ca8; # LETTER NA -\ue029>\u0ca8; # REMAP (indicExceptions.txt): \u0ca9>\u0ca8 = LETTER NNNA>LETTER NA -\ue02a>\u0caa; # LETTER PA -\ue02b>\u0cab; # LETTER PHA -\ue02c>\u0cac; # LETTER BA -\ue02d>\u0cad; # LETTER BHA -\ue02e>\u0cae; # LETTER MA -\ue02f>\u0caf; # LETTER YA -\ue030\ue03c>\u0cb1; -\ue030>\u0cb0; # LETTER RA -\ue031>\u0cb1; # LETTER RRA -\ue032>\u0cb2; # LETTER LA -\ue033>\u0cb3; # LETTER LLA -\ue034>\u0cde; # REMAP (indicExceptions.txt): \u0cb4>\u0cb3 = LETTER LLLA>LETTER LLA -\ue035>\u0cb5; # LETTER VA -\ue036>\u0cb6; # LETTER SHA -\ue037>\u0cb7; # LETTER SSA -\ue038>\u0cb8; # LETTER SA -\ue039>\u0cb9; # LETTER HA - -\ue03c>\u0cbc; # NUKTA -\ue03d>\u0cbd; # AVAGRAHA - -\ue03e>\u0cbe; # VOWEL SIGN AA -\ue03f>\u0cbf; # VOWEL SIGN I -\ue040>\u0cc0; # VOWEL SIGN II -\ue041>\u0cc1; # VOWEL SIGN U -\ue042>\u0cc2; # VOWEL SIGN UU -\ue043>\u0cc3; # VOWEL SIGN VOCALIC R -\ue044>\u0cc4; # VOWEL SIGN VOCALIC RR -\ue045>\u0cc6; # REMAP (indicExceptions.txt): \u0cc5>\u0cc6 = VOWEL SIGN CANDRA E>VOWEL SIGN E -\ue046>\u0cc6; # VOWEL SIGN E -\ue047>\u0cc7; # VOWEL SIGN EE -\ue048>\u0cc8; # VOWEL SIGN AI -\ue049>\u0cca; # REMAP (indicExceptions.txt): \u0cc9>\u0cca = VOWEL SIGN CANDRA O>VOWEL SIGN O -\ue04a>\u0cca; # VOWEL SIGN O -\ue04b>\u0ccb; # VOWEL SIGN OO -\ue04c>\u0ccc; # VOWEL SIGN AU -\ue04d>\u0ccd; # SIGN VIRAMA -\ue050>\u0c93\u0c82; # REMAP (indicExceptions.txt): \u0cd0>\u0c93\u0c82 = OM>LETTER OO.SIGN ANUSVARA -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>\u0cd5; # LENGTH MARK -\ue056>\u0cd6; # AI LENGTH MARK -\ue057>\u0ccc; # REMAP (indicExceptions.txt): \u0cd7>\u0ccc = AU LENGTH MARK>VOWEL SIGN AU -\ue058>\u0c95; # FALLBACK -\ue059>\u0c96; # REMAP (indicExceptions.txt): \u0cd9>\u0c96 = LETTER KHHA>LETTER KHA -\ue05a>\u0c97; # REMAP (indicExceptions.txt): \u0cda>\u0c97 = LETTER GHHA>LETTER GA -\ue05b>\u0c9c; # REMAP (indicExceptions.txt): \u0cdb>\u0c9c = LETTER ZA>LETTER JA -\ue05c>\u0ca2; # FALLBACK -\ue05d>\u0ca2; # REMAP (indicExceptions.txt): \u0cdd>\u0ca2 = LETTER RHA>LETTER DDHA -\ue05e>\u0cde; # LETTER FA -\ue05f>\u0caf; # REMAP (indicExceptions.txt): \u0cdf>\u0caf = LETTER YYA>LETTER YA -\ue060>\u0ce0; # LETTER VOCALIC RR -\ue061>\u0ce1; # LETTER VOCALIC LL -\ue062>\u0cbf; # REMAP (indicExceptions.txt): \u0ce2>\u0cbf = VOWEL SIGN VOCALIC L>VOWEL SIGN I -\ue063>\u0cc0; # REMAP (indicExceptions.txt): \u0ce3>\u0cc0 = VOWEL SIGN VOCALIC LL>VOWEL SIGN II -\ue064>'.' ; # FALLBACK FOR DANDA -\ue065>'.' ; # FALLBACK FOR DOUBLE DANDA -\ue066>\u0ce6; # DIGIT ZERO -\ue067>\u0ce7; # DIGIT ONE -\ue068>\u0ce8; # DIGIT TWO -\ue069>\u0ce9; # DIGIT THREE -\ue06a>\u0cea; # DIGIT FOUR -\ue06b>\u0ceb; # DIGIT FIVE -\ue06c>\u0cec; # DIGIT SIX -\ue06d>\u0ced; # DIGIT SEVEN -\ue06e>\u0cee; # DIGIT EIGHT -\ue06f>\u0cef; # DIGIT NINE -\ue070>; # ABBREVIATION SIGN -\ue071>\u0cb0; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0cb0; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>; # ISSHAR +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\uE033\uE03C>ೞ; # LETTER FA +\uE001>ಂ; # REMAP (indicExceptions.txt): \u0C81>ಂ = SIGN CANDRABINDU>SIGN ANUSVARA +\uE002>ಂ; # SIGN ANUSVARA +\uE003>ಃ; # SIGN VISARGA +\uE004>ಅ; # FALLBACK TO LETTER A +\uE005>ಅ; # LETTER A +\uE006>ಆ; # LETTER AA +\uE007>ಇ; # LETTER I +\uE008>ಈ; # LETTER II +\uE009>ಉ; # LETTER U +\uE00A>ಊ; # LETTER UU +\uE00B>ಋ; # LETTER VOCALIC R +\uE00C>ಌ; # LETTER VOCALIC L +\uE00D>ಎ; # LETTER E +\uE00E>ಎ; # FALLBACK +\uE00F>ಏ; # LETTER EE +\uE010>ಐ; # LETTER AI +\uE011>ಒ; # FALLBACK +\uE012>ಒ; # LETTER O +\uE013>ಓ; # LETTER OO +\uE014>ಔ; # LETTER AU +\uE015>ಕ; # LETTER KA +\uE016>ಖ; # LETTER KHA +\uE017>ಗ; # LETTER GA +\uE018>ಘ; # LETTER GHA +\uE019>ಙ; # LETTER NGA +\uE01A>ಚ; # LETTER CA +\uE01B>ಛ; # LETTER CHA +\uE01C>ಜ; # LETTER JA +\uE01D>ಝ; # LETTER JHA +\uE01E>ಞ; # LETTER NYA +\uE01F>ಟ; # LETTER TTA +\uE020>ಠ; # LETTER TTHA +\uE021>ಡ; # LETTER DDA +\uE022>ಢ; # LETTER DDHA +\uE023>ಣ; # LETTER NNA +\uE024>ತ; # LETTER TA +\uE025>ಥ; # LETTER THA +\uE026>ದ; # LETTER DA +\uE027>ಧ; # LETTER DHA +\uE028>ನ; # LETTER NA +\uE029>ನ; # REMAP (indicExceptions.txt): \u0CA9>ನ = LETTER NNNA>LETTER NA +\uE02A>ಪ; # LETTER PA +\uE02B>ಫ; # LETTER PHA +\uE02C>ಬ; # LETTER BA +\uE02D>ಭ; # LETTER BHA +\uE02E>ಮ; # LETTER MA +\uE02F>ಯ; # LETTER YA +\uE030\uE03C>ಱ; +\uE030>ರ; # LETTER RA +\uE031>ಱ; # LETTER RRA +\uE032>ಲ; # LETTER LA +\uE033>ಳ; # LETTER LLA +\uE034>ೞ; # REMAP (indicExceptions.txt): \u0CB4>ಳ = LETTER LLLA>LETTER LLA +\uE035>ವ; # LETTER VA +\uE036>ಶ; # LETTER SHA +\uE037>ಷ; # LETTER SSA +\uE038>ಸ; # LETTER SA +\uE039>ಹ; # LETTER HA +\uE03C>\u0CBC; # NUKTA +\uE03D>ಽ; # AVAGRAHA +\uE03E>ಾ; # VOWEL SIGN AA +\uE03F>\u0CBF; # VOWEL SIGN I +\uE040>ೀ; # VOWEL SIGN II +\uE041>ು; # VOWEL SIGN U +\uE042>ೂ; # VOWEL SIGN UU +\uE043>ೃ; # VOWEL SIGN VOCALIC R +\uE044>ೄ; # VOWEL SIGN VOCALIC RR +\uE045>\u0CC6; # REMAP (indicExceptions.txt): \u0CC5>\u0CC6 = VOWEL SIGN CANDRA E>VOWEL SIGN E +\uE046>\u0CC6; # VOWEL SIGN E +\uE047>ೇ; # VOWEL SIGN EE +\uE048>ೈ; # VOWEL SIGN AI +\uE049>ೊ; # REMAP (indicExceptions.txt): \u0CC9>ೊ = VOWEL SIGN CANDRA O>VOWEL SIGN O +\uE04A>ೊ; # VOWEL SIGN O +\uE04B>ೋ; # VOWEL SIGN OO +\uE04C>\u0CCC; # VOWEL SIGN AU +\uE04D>\u0CCD; # SIGN VIRAMA +\uE050>ಓಂ; # REMAP (indicExceptions.txt): \u0CD0>ಓಂ = OM>LETTER OO.SIGN ANUSVARA +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>ೕ; # LENGTH MARK +\uE056>ೖ; # AI LENGTH MARK +\uE057>\u0CCC; # REMAP (indicExceptions.txt): \u0CD7>\u0CCC = AU LENGTH MARK>VOWEL SIGN AU +\uE058>ಕ; # FALLBACK +\uE059>ಖ; # REMAP (indicExceptions.txt): \u0CD9>ಖ = LETTER KHHA>LETTER KHA +\uE05A>ಗ; # REMAP (indicExceptions.txt): \u0CDA>ಗ = LETTER GHHA>LETTER GA +\uE05B>ಜ; # REMAP (indicExceptions.txt): \u0CDB>ಜ = LETTER ZA>LETTER JA +\uE05C>ಢ; # FALLBACK +\uE05D>ಢ; # REMAP (indicExceptions.txt): \u0CDD>ಢ = LETTER RHA>LETTER DDHA +\uE05E>ೞ; # LETTER FA +\uE05F>ಯ; # REMAP (indicExceptions.txt): \u0CDF>ಯ = LETTER YYA>LETTER YA +\uE060>à³ ; # LETTER VOCALIC RR +\uE061>ೡ; # LETTER VOCALIC LL +\uE062>\u0CBF; # REMAP (indicExceptions.txt): \u0CE2>\u0CBF = VOWEL SIGN VOCALIC L>VOWEL SIGN I +\uE063>ೀ; # REMAP (indicExceptions.txt): \u0CE3>ೀ = VOWEL SIGN VOCALIC LL>VOWEL SIGN II +\uE064>'.' ; # FALLBACK FOR DANDA +\uE065>'.' ; # FALLBACK FOR DOUBLE DANDA +\uE066>೦; # DIGIT ZERO +\uE067>೧; # DIGIT ONE +\uE068>೨; # DIGIT TWO +\uE069>೩; # DIGIT THREE +\uE06A>೪; # DIGIT FOUR +\uE06B>೫; # DIGIT FIVE +\uE06C>೬; # DIGIT SIX +\uE06D>à³­; # DIGIT SEVEN +\uE06E>à³®; # DIGIT EIGHT +\uE06F>೯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>ರ; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>ರ; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u0cb5; # FALLBACK FOR ORIYA LETTER WA -0 > \u0ce6; # FALLBACK FOR TAMIL -1 > \u0ce7; - -# :: NFC (NFD) ; -# eof +\uE081>ವ; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>ತ\u0CCD; # Bengali Khanda-ta +0 > ೦; # FALLBACK FOR TAMIL +1 > ೧; diff --git a/icuSources/data/translit/InterIndic_Latin.txt b/icuSources/data/translit/InterIndic_Latin.txt index f734a0db..b78872c9 100644 --- a/icuSources/data/translit/InterIndic_Latin.txt +++ b/icuSources/data/translit/InterIndic_Latin.txt @@ -1,529 +1,462 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Latin - #\u0e00 reserved - #consonants - $chandrabindu=\ue001; - $anusvara=\ue002; - $visarga=\ue003; - #\u0e004 reserved - # w represents the stand-alone form - $wa=\ue005; - $waa=\ue006; - $wi=\ue007; - $wii=\ue008; - $wu=\ue009; - $wuu=\ue00a; - $wr=\ue00b; - $wl=\ue00c; - $wce=\ue00d; # LETTER CANDRA E - $wse=\ue00e; # LETTER SHORT E - $we=\ue00f; # \u090f LETTER E - $wai=\ue010; - $wco=\ue011; # LETTER CANDRA O - $wso=\ue012; # LETTER SHORT O - $wo=\ue013; # \u0913 LETTER O - $wau=\ue014; - $ka=\ue015; - $kha=\ue016; - $ga=\ue017; - $gha=\ue018; - $nga=\ue019; - $ca=\ue01a; - $cha=\ue01b; - $ja=\ue01c; - $jha=\ue01d; - $nya=\ue01e; - $tta=\ue01f; - $ttha=\ue020; - $dda=\ue021; - $ddha=\ue022; - $nna=\ue023; - $ta=\ue024; - $tha=\ue025; - $da=\ue026; - $dha=\ue027; - $na=\ue028; - $ena=\ue029; #compatibility - $pa=\ue02a; - $pha=\ue02b; - $ba=\ue02c; - $bha=\ue02d; - $ma=\ue02e; - $ya=\ue02f; - $ra=\ue030; - $vva=\ue081; - $rra=\ue031; - $la=\ue032; - $lla=\ue033; - $ela=\ue034; #compatibility - $va=\ue035; - $sha=\ue036; - $ssa=\ue037; - $sa=\ue038; - $ha=\ue039; -#\u093a Reserved -#\u093b Reserved - $nukta=\ue03c; - $avagraha=\ue03d; # SIGN AVAGRAHA - # represents the dependent form - $aa=\ue03e; - $i=\ue03f; - $ii=\ue040; - $u=\ue041; - $uu=\ue042; - $rh=\ue043; - $lh=\ue044; - $ce=\ue045; #VOWEL SIGN CANDRA E - $se=\ue046; #VOWEL SIGN SHORT E - $e=\ue047; - $ai=\ue048; - $co=\ue049; # VOWEL SIGN CANDRA O - $so=\ue04a; # VOWEL SIGN SHORT O - $o=\ue04b; # \u094b - $au=\ue04c; - $virama=\ue04d; -# \u094e Reserved -# \u094f Reserved - $om=\ue050; # OM - \ue051>; # UNMAPPED STRESS SIGN UDATTA - \ue052>; # UNMAPPED STRESS SIGN ANUDATTA - \ue053>; # UNMAPPED GRAVE ACCENT - \ue054>; # UNMAPPED ACUTE ACCENT - $lm = \ue055;# Telugu Length Mark - $ailm=\ue056;# AI Length Mark - $aulm=\ue057;# AU Length Mark - #urdu compatibity forms - $uka=\ue058; - $ukha=\ue059; - $ugha=\ue05a; - $ujha=\ue05b; - $uddha=\ue05c; - $udha=\ue05d; - $ufa=\ue05e; - $uya=\ue05f; - $wrr=\ue060; - $wll=\ue061; - $rrh=\ue062; - $llh=\ue063; - $danda=\ue064; - $doubleDanda=\ue065; - $zero=\ue066; # DIGIT ZERO - $one=\ue067; # DIGIT ONE - $two=\ue068; # DIGIT TWO - $three=\ue069; # DIGIT THREE - $four=\ue06a; # DIGIT FOUR - $five=\ue06b; # DIGIT FIVE - $six=\ue06c; # DIGIT SIX - $seven=\ue06d; # DIGIT SEVEN - $eight=\ue06e; # DIGIT EIGHT - $nine=\ue06f; # DIGIT NINE - -# \u0970>; # UNMAPPED ABBREVIATION SIGN - $depVowelAbove=[\ue03e-\ue040\ue045-\ue04c]; - $depVowelBelow=[\ue041-\ue044]; - # $x was originally called '&'; $z was '%' - $x=[$aa$ai$au$ii$i$uu$u$rrh$rh$lh$llh$e$o$se$ce$so$co]; - $z=[bcdfghjklmnpqrstvwxyz]; - $vowels=[aeiour\u0304\u0325\u0306]; - $forceIndependentMatra = [^[[:L:][\u0300-\u034c]]]; - ###################################################################### - # convert from Native letters to Latin letters - ###################################################################### - #transliterations for anusvara - $anusvara} [$ka$kha$ga$gha$nga] > n\u0307; - $anusvara} [$ca$cha$ja$jha$nya] > n\u0304; - $anusvara} [$tta$ttha$dda$ddha$nna] > n\u0323; - $anusvara} [$ta$tha$da$dha$na] > n ; - $anusvara} [$pa$pha$ba$bha$ma] > m ; - $anusvara} [$ya$ra$lla$la$va$ssa$sha$sa$ha] > n ; - $anusvara> m\u0307; - - # Urdu compatibility - $ya$nukta}$x > y\u0307 ; - $ya$nukta$virama > y\u0307 ; - $ya$nukta > y\u0307a ; - - $la$nukta }$x > l\u0331 ; - $la$nukta$virama > l\u0331 ; - $la$nukta > l\u0331a ; - - $na$nukta }$x > n\u0331 ; - $na$nukta$virama > n\u0331 ; - $na$nukta > n\u0331a ; - - $ena }$x > n\u0331 ; - $ena$virama > n\u0331 ; - $ena > n\u0331a ; - $uka > qa ; - $ka$nukta }$x > q ; - $ka$nukta$virama > q ; - $ka$nukta > qa ; - $kha$nukta }$x > k\u0331h\u0331 ; - $kha$nukta$virama > k\u0331h\u0331 ; - $kha$nukta > k\u0331h\u0331a ; - $ukha$virama > k\u0331h\u0331; - $ukha > k\u0331h\u0331a; - $ugha > g\u0307a ; - $ga$nukta }$x > g\u0307 ; - $ga$nukta$virama > g\u0307 ; - $ga$nukta > g\u0307a ; - - $ujha > za ; - $ja$nukta }$x > z ; - $ja$nukta$virama > z ; - $ja$nukta > za ; - $ddha$nukta}$x > r\u0323h ; - $ddha$nukta$virama > r\u0323h ; - $ddha$nukta > r\u0323ha; - - $uddha}$x > r\u0323 ; - $uddha$virama > r\u0323 ; - $uddha > r\u0323a; - - $udha > r\u0323a ; - $dda$nukta}$x > r\u0323 ; - $dda$nukta$virama > r\u0323 ; - $dda$nukta > r\u0323a ; - $pha$nukta }$x > f ; - $pha$nukta$virama > f ; - $pha$nukta > fa ; - $ufa }$x > f ; - $ufa$virama > f ; - $ufa > fa ; - - $ra$nukta}$x > r\u0331; - $ra$nukta$virama > r\u0331; - $ra$nukta > r\u0331a; - $lla$nukta}$x > l\u0331; - $lla$nukta$virama > l\u0331; - $lla$nukta > l\u0331a; - - $ela}$x > l\u0331; - $ela$virama > l\u0331; - $ela > l\u0331a; - - $uya}$x > y\u0307; - $uya$virama > y\u0307; - $uya > y\u0307a; - - - # normal consonants - $ka$virama}$ha>k''; - $ka}$x>k; - $ka$virama>k; - $ka>ka; - $kha}$x>kh; - $kha$virama>kh; - $kha>kha; - $ga$virama}$ha>g''; - $ga}$x>g; - $ga$virama>g; - $ga>ga; - - $gha}$x>gh; - $gha$virama>gh; - $gha>gha; - - $nga}$x>n\u0307; - $nga$virama>n\u0307; - $nga>n\u0307a ; - $ca$virama}$ha>c''; - $ca}$x>c; - $ca$virama>c; - $ca>ca; - - $cha}$x>ch; - $cha$virama>ch; - $cha>cha; - $ja$virama}$ha>j''; - $ja}$x>j; - $ja$virama>j; - $ja>ja; - - $jha}$x>jh; - $jha$virama>jh; - $jha>jha; - - $nya }$x>n\u0303 ; - $nya$virama>n\u0303; - $nya > n\u0303a ; - - - $tta$virama}$ha>t\u0323''; - $tta}$x>t\u0323; - $tta$virama>t\u0323; - $tta>t\u0323a; - - $ttha}$x>t\u0323h; - $ttha$virama>t\u0323h; - $ttha>t\u0323ha; - $dda}$x$ha>d\u0323''; - $dda}$x>d\u0323; - $dda$virama>d\u0323; - $dda>d\u0323a; - - $ddha}$x>d\u0323h; - $ddha$virama>d\u0323h; - $ddha>d\u0323ha; - - $nna}$x>n\u0323 ; - $nna$virama>n\u0323; - $nna>n\u0323a ; - - - $ta$virama}$ha>t''; - $ta$virama}$ttha>t''; - $ta$virama}$tta>t''; - $ta$virama}$tha>t''; - $ta}$x>t; - $ta$virama>t; - $ta>ta; - $tha}$x>th; - $tha$virama>th; - $tha>tha; - - $da$virama}$ha>d''; - $da$virama}$ddha>d''; - $da$virama}$dda>d''; - $da$virama}$dha>d''; - $da}$x>d; - $da$virama>d; - $da>da; - $dha}$x>dh; - $dha$virama>dh; - $dha>dha; - $na$virama}$ga>n''; - $na$virama}$ya>n''; - $na}$x>n; - $na$virama>n; - $na>na; - - - $pa$virama}$ha>p''; - $pa}$x>p; - $pa$virama>p; - $pa>pa; - $pha}$x>ph; - $pha$virama>ph; - $pha>pha; - $ba$virama}$ha>b''; - $ba}$x>b; - $ba$virama>b; - $ba>ba; - - $bha}$x>bh; - $bha$virama>bh; - $bha>bha; - - $ma$virama}$ma>m''; - $ma}$x>m; - $ma$virama>m; - $ma>ma; - - $ya}$x>y; - $ya$virama>y; - $ya>ya; - $ra$virama}$ha>r''; - $ra}$x>r; - $ra$virama>r; - $ra>ra; - $vva$virama}$ha>w\u0307''; - $vva}$x>w\u0307; - $vva$virama>w\u0307; - $vva>w\u0307a; - $rra$virama}$ha>r\u0331''; - $rra}$x>r\u0331; - $rra$virama>r\u0331; - $rra>r\u0331a; - $la$virama}$ha>l''; - $la}$x>l; - $la$virama>l; - $la>la; - $lla$virama}$ha>l\u0323''; - $lla}$x>l\u0323; - $lla$virama>l\u0323; - $lla>l\u0323a; - $va}$x>v; - $va$virama>v; - $va>va; - $sa$virama}$ha>s''; - $sa$virama}$sha>s''; - $sa$virama}$ssa>s''; - $sa$virama}$sa>s''; - $sa}$x>s; - $sa$virama>s; - - #for gurmukhi - $sa$nukta}$x>s\u0301; - $sa$nukta$virama>s\u0301; - $sa$nukta>s\u0301a; - $sa>sa; - - $sha}$x>s\u0301; - $sha$virama>s\u0301; - $sha>s\u0301a; - - $ssa}$x>s\u0323; - $ssa$virama>s\u0323; - $ssa>s\u0323a; - $ha}$x>h; - $ha$virama>h; - $ha>ha; - - # dependent vowels (should never occur except following consonants) - $forceIndependentMatra{$aa > \u0314a\u0304 ; - $forceIndependentMatra{$ai > \u0314ai ; - $forceIndependentMatra{$au > \u0314au ; - $forceIndependentMatra{$ii > \u0314i\u0304 ; - $forceIndependentMatra{$i > \u0314i ; - $forceIndependentMatra{$uu > \u0314u\u0304 ; - $forceIndependentMatra{$u > \u0314u ; - $forceIndependentMatra{$rrh > \u0314r\u0325\u0304 ; - $forceIndependentMatra{$rh > \u0314r\u0325 ; - $forceIndependentMatra{$llh > \u0314l\u0325\u0304 ; - $forceIndependentMatra{$lh > \u0314l\u0325 ; - $forceIndependentMatra{$e > \u0314e\u0304 ; - $forceIndependentMatra{$o > \u0314o\u0304 ; - #extra vowels - $forceIndependentMatra{$ce > \u0314e\u0306 ; - $forceIndependentMatra{$co > \u0314o\u0306 ; - $forceIndependentMatra{$se > \u0314e ; - $forceIndependentMatra{$so > \u0314o ; - $forceIndependentMatra{$nukta >; # Nukta cannot appear independently or as first character - $forceIndependentMatra{$virama >; # Virama cannot appear independently or as first character - $aa > a\u0304 ; - $ai > ai ; - $au > au ; - $ii > i\u0304 ; - $i > i ; - $uu > u\u0304 ; - $u > u ; - $rrh > r\u0325\u0304 ; - $rh > r\u0325 ; - $llh > l\u0325\u0304 ; - $lh > l\u0325 ; - $e > e\u0304 ; - $o > o\u0304 ; - #extra vowels - $ce > e\u0306 ; - $co > o\u0306 ; - $se > e ; - $so > o ; - #dependent vowels when following independent vowels. Generally Illegal only for roundtripping - $waa} $x > a\u0304\u0314 ; - $wai} $x > ai\u0314 ; - $wau} $x > au\u0314 ; - $wii} $x > i\u0304\u0314 ; - $wi } $x > i\u0314 ; - $wuu} $x > u\u0304\u0314 ; - $wu } $x > u\u0314 ; - $wrr} $x > r\u0325\u0304\u0314 ; - $wr } $x > r\u0325\u0314 ; - $wll} $x > l\u0325\u0304\u0314 ; - $wl } $x > l\u0325\u0314 ; - $we } $x > e\u0304\u0314 ; - $wo } $x > o\u0304\u0314 ; - $wa } $x > a\u0314 ; - #extra vowels - $wce} $x > e\u0306\u0314 ; - $wco} $x > o\u0306\u0314 ; - $wse} $x > e\u0314 ; - $wso} $x > o\u0314 ; - $om} $x > ''om\u0314 ; - - # independent vowels when preceeded by vowels - $vowels{$waa > ''a\u0304 ; - $vowels{$wai > ''ai ; - $vowels{$wau > ''au ; - $vowels{$wii > ''i\u0304 ; - $vowels{$wi > ''i ; - $vowels{$wuu > ''u\u0304 ; - $vowels{$wu > ''u ; - $vowels{$wrr > ''r\u0325\u0304 ; - $vowels{$wr > ''r\u0325 ; - $vowels{$wll > ''l\u0325\u0304 ; - $vowels{$wl > ''l\u0325 ; - $vowels{$we > ''e\u0304 ; - $vowels{$wo > ''o\u0304 ; - $vowels{$wa > ''a ; - #extra vowels - $vowels{$wce > ''e\u0306 ; - $vowels{$wco > ''o\u0306 ; - $vowels{$wse > ''e ; - $vowels{$wso > ''o ; - - # independent vowels (otherwise) - $waa > a\u0304 ; - $wai > ai ; - $wau > au ; - $wii > i\u0304 ; - $wi > i ; - $wuu > u\u0304 ; - $wu > u ; - $wrr > r\u0325\u0304 ; - $wr > r\u0325 ; - $wll > l\u0325\u0304 ; - $wl > l\u0325 ; - $we > e\u0304 ; - $wo > o\u0304 ; - $wa > a ; - #extra vowels - $wce > e\u0306 ; - $wco > o\u0306 ; - $wse > e ; - $wso > o ; - $om > ''om ; - - #stress marks - $avagraha > \u0315; - $chandrabindu$anusvara>\u0303; - $chandrabindu > m\u0310; - $visarga>h\u0323; - #numbers - $zero > 0; - $one > 1; - $two > 2; - $three > 3; - $four > 4; - $five > 5; - $six > 6; - $seven > 7; - $eight > 8; - $nine > 9; - $lm >; - $ailm >; - $aulm >; - - $danda>'.'; - $doubleDanda>'.'; - - \ue070>; # ABBREVIATION SIGN - # LETTER RA WITH MIDDLE DIAGONAL - \ue071}$x>ra; - \ue071$virama>r; - \ue071>ra; - # LETTER RA WITH LOWER DIAGONAL - \ue072}$x>ra; - \ue072$virama>r; - \ue072>ra; - - \ue073>; # RUPEE MARK - \ue074>; # RUPEE SIGN - \ue075>; # CURRENCY NUMERATOR ONE - \ue076>; # CURRENCY NUMERATOR TWO - \ue077>; # CURRENCY NUMERATOR THREE - \ue078>; # CURRENCY NUMERATOR FOUR - \ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR - \ue07A>; # CURRENCY DENOMINATOR SIXTEEN - \ue07B>; # ISSHAR - \uE07C>; # TIPPI - \uE07D>; # ADDAK - \uE07E>; # IRI - \uE07F>; # URA - \uE080>; # EK ONKAR - \uE004>; # DEVANAGARI VOWEL SIGN SHORT A - \ No newline at end of file +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +$chandrabindu=\uE001; +$anusvara=\uE002; +$visarga=\uE003; +$wa=\uE005; +$waa=\uE006; +$wi=\uE007; +$wii=\uE008; +$wu=\uE009; +$wuu=\uE00A; +$wr=\uE00B; +$wl=\uE00C; +$wce=\uE00D; # LETTER CANDRA E +$wse=\uE00E; # LETTER SHORT E +$we=\uE00F; # ए LETTER E +$wai=\uE010; +$wco=\uE011; # LETTER CANDRA O +$wso=\uE012; # LETTER SHORT O +$wo=\uE013; # ओ LETTER O +$wau=\uE014; +$ka=\uE015; +$kha=\uE016; +$ga=\uE017; +$gha=\uE018; +$nga=\uE019; +$ca=\uE01A; +$cha=\uE01B; +$ja=\uE01C; +$jha=\uE01D; +$nya=\uE01E; +$tta=\uE01F; +$ttha=\uE020; +$dda=\uE021; +$ddha=\uE022; +$nna=\uE023; +$ta=\uE024; +$tha=\uE025; +$da=\uE026; +$dha=\uE027; +$na=\uE028; +$ena=\uE029; #compatibility +$pa=\uE02A; +$pha=\uE02B; +$ba=\uE02C; +$bha=\uE02D; +$ma=\uE02E; +$ya=\uE02F; +$ra=\uE030; +$vva=\uE081; +$rra=\uE031; +$la=\uE032; +$lla=\uE033; +$ela=\uE034; #compatibility +$va=\uE035; +$sha=\uE036; +$ssa=\uE037; +$sa=\uE038; +$ha=\uE039; +$nukta=\uE03C; +$avagraha=\uE03D; # SIGN AVAGRAHA +$aa=\uE03E; +$i=\uE03F; +$ii=\uE040; +$u=\uE041; +$uu=\uE042; +$rh=\uE043; +$lh=\uE044; +$ce=\uE045; #VOWEL SIGN CANDRA E +$se=\uE046; #VOWEL SIGN SHORT E +$e=\uE047; +$ai=\uE048; +$co=\uE049; # VOWEL SIGN CANDRA O +$so=\uE04A; # VOWEL SIGN SHORT O +$o=\uE04B; # ो +$au=\uE04C; +$virama=\uE04D; +$om=\uE050; # OM +\uE051>; # UNMAPPED STRESS SIGN UDATTA +\uE052>; # UNMAPPED STRESS SIGN ANUDATTA +\uE053>; # UNMAPPED GRAVE ACCENT +\uE054>; # UNMAPPED ACUTE ACCENT +$lm = \uE055;# Telugu Length Mark +$ailm=\uE056;# AI Length Mark +$aulm=\uE057;# AU Length Mark +$uka=\uE058; +$ukha=\uE059; +$ugha=\uE05A; +$ujha=\uE05B; +$uddha=\uE05C; +$udha=\uE05D; +$ufa=\uE05E; +$uya=\uE05F; +$wrr=\uE060; +$wll=\uE061; +$rrh=\uE062; +$llh=\uE063; +$danda=\uE064; +$doubleDanda=\uE065; +$zero=\uE066; # DIGIT ZERO +$one=\uE067; # DIGIT ONE +$two=\uE068; # DIGIT TWO +$three=\uE069; # DIGIT THREE +$four=\uE06A; # DIGIT FOUR +$five=\uE06B; # DIGIT FIVE +$six=\uE06C; # DIGIT SIX +$seven=\uE06D; # DIGIT SEVEN +$eight=\uE06E; # DIGIT EIGHT +$nine=\uE06F; # DIGIT NINE +$dgs=\uE082; +$kta=\uE083; +$depVowelAbove=[\uE03E-\uE040\uE045-\uE04C]; +$depVowelBelow=[\uE041-\uE044]; +$x=[$aa$ai$au$ii$i$uu$u$rrh$rh$lh$llh$e$o$se$ce$so$co]; +$z=[bcdfghjklmnpqrstvwxyz]; +$vowels=[aeiour\u0304\u0325\u0306]; +$forceIndependentMatra = [^[[:L:][\u0300-\u034C]]]; +$anusvara} [$ka$kha$ga$gha$nga] > n\u0307; +$anusvara} [$ca$cha$ja$jha$nya] > n\u0304; +$anusvara} [$tta$ttha$dda$ddha$nna] > n\u0323; +$anusvara} [$ta$tha$da$dha$na] > n; +$anusvara} [$pa$pha$ba$bha$ma] > m; +$anusvara} [$ya$ra$lla$la$va$ssa$sha$sa$ha] > n; +$anusvara> m\u0307; +$ya$nukta}$x > y\u0307; +$ya$nukta$virama > y\u0307; +$ya$nukta > y\u0307a; +$la$nukta }$x > l\u0331; +$la$nukta$virama > l\u0331; +$la$nukta > l\u0331a; +$na$nukta }$x > n\u0331; +$na$nukta$virama > n\u0331; +$na$nukta > n\u0331a; +$ena }$x > n\u0331; +$ena$virama > n\u0331; +$ena > n\u0331a; +$uka > qa; +$ka$nukta }$x > q; +$ka$nukta$virama > q; +$ka$nukta > qa; +$kha$nukta }$x > k\u0331h\u0331; +$kha$nukta$virama > k\u0331h\u0331; +$kha$nukta > k\u0331h\u0331a; +$ukha$virama > k\u0331h\u0331; +$ukha > k\u0331h\u0331a; +$ugha > g\u0307a; +$ga$nukta }$x > g\u0307; +$ga$nukta$virama > g\u0307; +$ga$nukta > g\u0307a; +$ujha > za; +$ja$nukta }$x > z; +$ja$nukta$virama > z; +$ja$nukta > za; +$ddha$nukta}$x > r\u0323h; +$ddha$nukta$virama > r\u0323h; +$ddha$nukta > r\u0323ha; +$uddha}$x > r\u0323; +$uddha$virama > r\u0323; +$uddha > r\u0323a; +$udha > r\u0323a; +$dda$nukta}$x > r\u0323; +$dda$nukta$virama > r\u0323; +$dda$nukta > r\u0323a; +$pha$nukta }$x > f; +$pha$nukta$virama > f; +$pha$nukta > fa; +$ufa }$x > f; +$ufa$virama > f; +$ufa > fa; +$ra$nukta}$x > r\u0331; +$ra$nukta$virama > r\u0331; +$ra$nukta > r\u0331a; +$lla$nukta}$x > l\u0331; +$lla$nukta$virama > l\u0331; +$lla$nukta > l\u0331a; +$ela}$x > l\u0331; +$ela$virama > l\u0331; +$ela > l\u0331a; +$uya}$x > y\u0307; +$uya$virama > y\u0307; +$uya > y\u0307a; +$ka$virama}$ha>k''; +$ka}$x>k; +$ka$virama>k; +$ka>ka; +$kha}$x>kh; +$kha$virama>kh; +$kha>kha; +$ga$virama}$ha>g''; +$ga}$x>g; +$ga$virama>g; +$ga>ga; +$gha}$x>gh; +$gha$virama>gh; +$gha>gha; +$nga}$x>n\u0307; +$nga$virama>n\u0307; +$nga>n\u0307a; +$ca$virama}$ha>c''; +$ca}$x>c; +$ca$virama>c; +$ca>ca; +$cha}$x>ch; +$cha$virama>ch; +$cha>cha; +$ja$virama}$ha>j''; +$ja}$x>j; +$ja$virama>j; +$ja>ja; +$jha}$x>jh; +$jha$virama>jh; +$jha>jha; +$nya }$x>n\u0303; +$nya$virama>n\u0303; +$nya > n\u0303a; +$tta$virama}$ha>t\u0323''; +$tta}$x>t\u0323; +$tta$virama>t\u0323; +$tta>t\u0323a; +$ttha}$x>t\u0323h; +$ttha$virama>t\u0323h; +$ttha>t\u0323ha; +$dda}$x$ha>d\u0323''; +$dda}$x>d\u0323; +$dda$virama>d\u0323; +$dda>d\u0323a; +$ddha}$x>d\u0323h; +$ddha$virama>d\u0323h; +$ddha>d\u0323ha; +$nna}$x>n\u0323; +$nna$virama>n\u0323; +$nna>n\u0323a; +$ta$virama}$ha>t''; +$ta$virama}$ttha>t''; +$ta$virama}$tta>t''; +$ta$virama}$tha>t''; +$ta}$x>t; +$ta$virama>t; +$ta>ta; +$tha}$x>th; +$tha$virama>th; +$tha>tha; +$da$virama}$ha>d''; +$da$virama}$ddha>d''; +$da$virama}$dda>d''; +$da$virama}$dha>d''; +$da}$x>d; +$da$virama>d; +$da>da; +$dha}$x>dh; +$dha$virama>dh; +$dha>dha; +$na$virama}$ga>n''; +$na$virama}$ya>n''; +$na}$x>n; +$na$virama>n; +$na>na; +$pa$virama}$ha>p''; +$pa}$x>p; +$pa$virama>p; +$pa>pa; +$pha}$x>ph; +$pha$virama>ph; +$pha>pha; +$ba$virama}$ha>b''; +$ba}$x>b; +$ba$virama>b; +$ba>ba; +$bha}$x>bh; +$bha$virama>bh; +$bha>bha; +$ma$virama}$ma>m''; +$ma}$x>m; +$ma$virama>m; +$ma>ma; +$ya}$x>y; +$ya$virama>y; +$ya>ya; +$ra$virama}$ha>r''; +$ra}$x>r; +$ra$virama>r; +$ra>ra; +$vva$virama}$ha>w\u0307''; +$vva}$x>w\u0307; +$vva$virama>w\u0307; +$vva>w\u0307a; +$rra$virama}$ha>r\u0331''; +$rra}$x>r\u0331; +$rra$virama>r\u0331; +$rra>r\u0331a; +$la$virama}$ha>l''; +$la}$x>l; +$la$virama>l; +$la>la; +$lla$virama}$ha>l\u0323''; +$lla}$x>l\u0323; +$lla$virama>l\u0323; +$lla>l\u0323a; +$va}$x>v; +$va$virama>v; +$va>va; +$sa$virama}$ha>s''; +$sa$virama}$sha>s''; +$sa$virama}$ssa>s''; +$sa$virama}$sa>s''; +$sa}$x>s; +$sa$virama>s; +$sa$nukta}$x>s\u0301; +$sa$nukta$virama>s\u0301; +$sa$nukta>s\u0301a; +$sa>sa; +$sha}$x>s\u0301; +$sha$virama>s\u0301; +$sha>s\u0301a; +$ssa}$x>s\u0323; +$ssa$virama>s\u0323; +$ssa>s\u0323a; +$ha}$x>h; +$ha$virama>h; +$ha>ha; +$forceIndependentMatra{$aa > \u0314a\u0304; +$forceIndependentMatra{$ai > \u0314ai; +$forceIndependentMatra{$au > \u0314au; +$forceIndependentMatra{$ii > \u0314i\u0304; +$forceIndependentMatra{$i > \u0314i; +$forceIndependentMatra{$uu > \u0314u\u0304; +$forceIndependentMatra{$u > \u0314u; +$forceIndependentMatra{$rrh > \u0314r\u0325\u0304; +$forceIndependentMatra{$rh > \u0314r\u0325; +$forceIndependentMatra{$llh > \u0314l\u0325\u0304; +$forceIndependentMatra{$lh > \u0314l\u0325; +$forceIndependentMatra{$e > \u0314e\u0304; +$forceIndependentMatra{$o > \u0314o\u0304; +$forceIndependentMatra{$ce > \u0314e\u0306; +$forceIndependentMatra{$co > \u0314o\u0306; +$forceIndependentMatra{$se > \u0314e; +$forceIndependentMatra{$so > \u0314o; +$forceIndependentMatra{$nukta >; # Nukta cannot appear independently or as first character +$forceIndependentMatra{$virama >; # Virama cannot appear independently or as first character +$aa > a\u0304; +$ai > ai; +$au > au; +$ii > i\u0304; +$i > i; +$uu > u\u0304; +$u > u; +$rrh > r\u0325\u0304; +$rh > r\u0325; +$llh > l\u0325\u0304; +$lh > l\u0325; +$e > e\u0304; +$o > o\u0304; +$ce > e\u0306; +$co > o\u0306; +$se > e; +$so > o; +$waa} $x > a\u0304\u0314; +$wai} $x > ai\u0314; +$wau} $x > au\u0314; +$wii} $x > i\u0304\u0314; +$wi } $x > i\u0314; +$wuu} $x > u\u0304\u0314; +$wu } $x > u\u0314; +$wrr} $x > r\u0325\u0304\u0314; +$wr } $x > r\u0325\u0314; +$wll} $x > l\u0325\u0304\u0314; +$wl } $x > l\u0325\u0314; +$we } $x > e\u0304\u0314; +$wo } $x > o\u0304\u0314; +$wa } $x > a\u0314; +$wce} $x > e\u0306\u0314; +$wco} $x > o\u0306\u0314; +$wse} $x > e\u0314; +$wso} $x > o\u0314; +$om} $x > ''om\u0314; +$vowels{$waa > ''a\u0304; +$vowels{$wai > ''ai; +$vowels{$wau > ''au; +$vowels{$wii > ''i\u0304; +$vowels{$wi > ''i; +$vowels{$wuu > ''u\u0304; +$vowels{$wu > ''u; +$vowels{$wrr > ''r\u0325\u0304; +$vowels{$wr > ''r\u0325; +$vowels{$wll > ''l\u0325\u0304; +$vowels{$wl > ''l\u0325; +$vowels{$we > ''e\u0304; +$vowels{$wo > ''o\u0304; +$vowels{$wa > ''a; +$vowels{$wce > ''e\u0306; +$vowels{$wco > ''o\u0306; +$vowels{$wse > ''e; +$vowels{$wso > ''o; +$waa > a\u0304; +$wai > ai; +$wau > au; +$wii > i\u0304; +$wi > i; +$wuu > u\u0304; +$wu > u; +$wrr > r\u0325\u0304; +$wr > r\u0325; +$wll > l\u0325\u0304; +$wl > l\u0325; +$we > e\u0304; +$wo > o\u0304; +$wa > a; +$wce > e\u0306; +$wco > o\u0306; +$wse > e; +$wso > o; +$om > ''om; +$avagraha > \u0315; +$chandrabindu$anusvara>\u0303; +$chandrabindu > m\u0310; +$visarga>h\u0323; +$zero > 0; +$one > 1; +$two > 2; +$three > 3; +$four > 4; +$five > 5; +$six > 6; +$seven > 7; +$eight > 8; +$nine > 9; +$lm >; +$ailm >; +$aulm >; +$dgs>ʔ; +$kta>t\u0331; +$danda>'.'; +$doubleDanda>'.'; +\uE070>; # ABBREVIATION SIGN +\uE071}$x>ra; +\uE071$virama>r; +\uE071>ra; +\uE072}$x>ra; +\uE072$virama>r; +\uE072>ra; +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR +\uE07C>; # TIPPI +\uE07D>; # ADDAK +\uE07E>; # IRI +\uE07F>; # URA +\uE080>; # EK ONKAR +\uE004>; # DEVANAGARI VOWEL SIGN SHORT A diff --git a/icuSources/data/translit/InterIndic_Malayalam.txt b/icuSources/data/translit/InterIndic_Malayalam.txt index 7b8c7732..0557a7e7 100644 --- a/icuSources/data/translit/InterIndic_Malayalam.txt +++ b/icuSources/data/translit/InterIndic_Malayalam.txt @@ -1,141 +1,140 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Malayalam -#:: NFD (NFC) ; -\ue001>\u0d02; # REMAP (indicExceptions.txt): \u0d01>\u0d02 = SIGN CANDRABINDU>SIGN ANUSVARA -\ue002>\u0d02; # SIGN ANUSVARA -\ue003>\u0d03; # SIGN VISARGA -\uE004>\u0d05; # FALLBACK TO LETTER A -\ue005>\u0d05; # LETTER A -\ue006>\u0d06; # LETTER AA -\ue007>\u0d07; # LETTER I -\ue008>\u0d08; # LETTER II -\ue009>\u0d09; # LETTER U -\ue00a>\u0d0a; # LETTER UU -\ue00b>\u0d0b; # LETTER VOCALIC R -\ue00c>\u0d0c; # LETTER VOCALIC L -\ue00d>\u0d0e; # FALLLBACK LETTER E -\ue00e>\u0d0e; # LETTER E -\ue00f>\u0d0f; # LETTER EE -\ue010>\u0d10; # LETTER AI -\ue011>\u0d12; # FALLBACK TO O -\ue012>\u0d12; # LETTER O -\ue013>\u0d13; # LETTER OO -\ue014>\u0d14; # LETTER AU -\ue015>\u0d15; # LETTER KA -\ue016>\u0d16; # LETTER KHA -\ue017>\u0d17; # LETTER GA -\ue018>\u0d18; # LETTER GHA -\ue019>\u0d19; # LETTER NGA -\ue01a>\u0d1a; # LETTER CA -\ue01b>\u0d1b; # LETTER CHA -\ue01c>\u0d1c; # LETTER JA -\ue01d>\u0d1d; # LETTER JHA -\ue01e>\u0d1e; # LETTER NYA -\ue01f>\u0d1f; # LETTER TTA -\ue020>\u0d20; # LETTER TTHA -\ue021>\u0d21; # LETTER DDA -\ue022>\u0d22; # LETTER DDHA -\ue023>\u0d23; # LETTER NNA -\ue024>\u0d24; # LETTER TA -\ue025>\u0d25; # LETTER THA -\ue026>\u0d26; # LETTER DA -\ue027>\u0d27; # LETTER DHA -\ue028>\u0d28; # LETTER NA -\ue029>\u0d28; # REMAP (indicExceptions.txt): \u0d29>\u0d28 = LETTER NNNA>LETTER NA -\ue02a>\u0d2a; # LETTER PA -\ue02b>\u0d2b; # LETTER PHA -\ue02c>\u0d2c; # LETTER BA -\ue02d>\u0d2d; # LETTER BHA -\ue02e>\u0d2e; # LETTER MA -\ue02f>\u0d2f; # LETTER YA -\ue030\ue03c>\u0d31; -\ue030>\u0d30; # LETTER RA -\ue031>\u0d31; # LETTER RRA -\ue032>\u0d32; # LETTER LA -\ue033\ue03c>\u0d34; -\ue033>\u0d33; # LETTER LLA -\ue034>\u0d34; # LETTER LLLA -\ue035>\u0d35; # LETTER VA -\ue036>\u0d36; # LETTER SHA -\ue037>\u0d37; # LETTER SSA -\ue038>\u0d38; # LETTER SA -\ue039>\u0d39; # LETTER HA - -\ue03c>; # FALLBACK BLOW AWAY NUKTA -\ue03d>; # FALLBACK BLOW AWAY AVAGRAHA - -\ue03e>\u0d3e; # VOWEL SIGN AA -\ue03f>\u0d3f; # VOWEL SIGN I -\ue040>\u0d40; # VOWEL SIGN II -\ue041>\u0d41; # VOWEL SIGN U -\ue042>\u0d42; # VOWEL SIGN UU -\ue043>\u0d43; # VOWEL SIGN VOCALIC R -\ue044>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC RR -\ue045>\u0d3e; # REMAP (indicExceptions.txt): \u0d45>\u0d3e = VOWEL SIGN CANDRA E>VOWEL SIGN AA -\ue046>\u0d46; # VOWEL SIGN E -\ue047>\u0d47; # VOWEL SIGN EE -\ue048>\u0d48; # VOWEL SIGN AI -\ue049>\u0d4b; # REMAP (indicExceptions.txt): \u0d49>\u0d4b = VOWEL SIGN CANDRA O>VOWEL SIGN OO -\ue04a>\u0d4a; # VOWEL SIGN O -\ue04b>\u0d4b; # VOWEL SIGN OO -\ue04c>\u0d4c; # VOWEL SIGN AU -\ue04d>\u0d4d; # SIGN VIRAMA -\ue050>\u0d13\u0d02; # UNMAPPED InterIndic-Malayalam: OM -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>; # FALLBACK BLOW AWAY LENGTH MARK -\ue056>\u0d48; # REMAP (indicExceptions.txt): \u0d56>\u0d48 = AI LENGTH MARK>VOWEL SIGN AI -\ue057>\u0d57; # AU LENGTH MARK -\ue058>\u0d15; # FALLBACK -\ue059>\u0d16; # REMAP (indicExceptions.txt): \u0d59>\u0d16 = LETTER KHHA>LETTER KHA -\ue05a>\u0d17; # REMAP (indicExceptions.txt): \u0d5a>\u0d17 = LETTER GHHA>LETTER GA -\ue05b>\u0d1c; # REMAP (indicExceptions.txt): \u0d5b>\u0d1c = LETTER ZA>LETTER JA -\ue05d>\u0d22; # REMAP (indicExceptions.txt): \u0d5d>\u0d22 = LETTER RHA>LETTER DDHA -\ue05c>\u0d21; # FALLBACK -\ue05e>\u0d2b; # REMAP (indicExceptions.txt): \u0d5e>\u0d2b = LETTER FA>LETTER PHA -\ue05f>\u0d2f; # REMAP (indicExceptions.txt): \u0d5f>\u0d2f = LETTER YYA>LETTER YA -\ue060>\u0d60; # LETTER VOCALIC RR -\ue061>\u0d61; # LETTER VOCALIC LL -\ue062>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC L -\ue063>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC LL -\ue064>'.' ; # FALLBACK FOR DANDA -\ue065>'.' ; # FALLBACK FOR DOUBLE DANDA -\ue066>\u0d66; # DIGIT ZERO -\ue067>\u0d67; # DIGIT ONE -\ue068>\u0d68; # DIGIT TWO -\ue069>\u0d69; # DIGIT THREE -\ue06a>\u0d6a; # DIGIT FOUR -\ue06b>\u0d6b; # DIGIT FIVE -\ue06c>\u0d6c; # DIGIT SIX -\ue06d>\u0d6d; # DIGIT SEVEN -\ue06e>\u0d6e; # DIGIT EIGHT -\ue06f>\u0d6f; # DIGIT NINE -\ue070>; # ABBREVIATION SIGN -\ue071>\u0d30; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0d30; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>; # ISSHAR +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\uE001>ം; # REMAP (indicExceptions.txt): \u0D01>ം = SIGN CANDRABINDU>SIGN ANUSVARA +\uE002>ം; # SIGN ANUSVARA +\uE003>ഃ; # SIGN VISARGA +\uE004>അ; # FALLBACK TO LETTER A +\uE005>അ; # LETTER A +\uE006>ആ; # LETTER AA +\uE007>ഇ; # LETTER I +\uE008>ഈ; # LETTER II +\uE009>ഉ; # LETTER U +\uE00A>ഊ; # LETTER UU +\uE00B>ഋ; # LETTER VOCALIC R +\uE00C>ഌ; # LETTER VOCALIC L +\uE00D>എ; # FALLLBACK LETTER E +\uE00E>എ; # LETTER E +\uE00F>ഏ; # LETTER EE +\uE010>ഐ; # LETTER AI +\uE011>ഒ; # FALLBACK TO O +\uE012>ഒ; # LETTER O +\uE013>ഓ; # LETTER OO +\uE014>ഔ; # LETTER AU +\uE015>ക; # LETTER KA +\uE016>ഖ; # LETTER KHA +\uE017>ഗ; # LETTER GA +\uE018>ഘ; # LETTER GHA +\uE019>ങ; # LETTER NGA +\uE01A>ച; # LETTER CA +\uE01B>ഛ; # LETTER CHA +\uE01C>ജ; # LETTER JA +\uE01D>ഝ; # LETTER JHA +\uE01E>ഞ; # LETTER NYA +\uE01F>ട; # LETTER TTA +\uE020>à´ ; # LETTER TTHA +\uE021>à´¡; # LETTER DDA +\uE022>à´¢; # LETTER DDHA +\uE023>à´£; # LETTER NNA +\uE024>à´¤; # LETTER TA +\uE025>à´¥; # LETTER THA +\uE026>à´¦; # LETTER DA +\uE027>à´§; # LETTER DHA +\uE028>à´¨; # LETTER NA +\uE029>à´¨; # REMAP (indicExceptions.txt): \u0D29>à´¨ = LETTER NNNA>LETTER NA +\uE02A>à´ª; # LETTER PA +\uE02B>à´«; # LETTER PHA +\uE02C>à´¬; # LETTER BA +\uE02D>à´­; # LETTER BHA +\uE02E>à´®; # LETTER MA +\uE02F>à´¯; # LETTER YA +\uE030\uE03C>à´±; +\uE030>à´°; # LETTER RA +\uE031>à´±; # LETTER RRA +\uE032>à´²; # LETTER LA +\uE033\uE03C>à´´; +\uE033>à´³; # LETTER LLA +\uE034>à´´; # LETTER LLLA +\uE035>à´µ; # LETTER VA +\uE036>à´¶; # LETTER SHA +\uE037>à´·; # LETTER SSA +\uE038>à´¸; # LETTER SA +\uE039>à´¹; # LETTER HA +\uE03C>; # FALLBACK BLOW AWAY NUKTA +\uE03D>; # FALLBACK BLOW AWAY AVAGRAHA +\uE03E>à´¾; # VOWEL SIGN AA +\uE03F>à´¿; # VOWEL SIGN I +\uE040>ീ; # VOWEL SIGN II +\uE041>\u0D41; # VOWEL SIGN U +\uE042>\u0D42; # VOWEL SIGN UU +\uE043>\u0D43; # VOWEL SIGN VOCALIC R +\uE044>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC RR +\uE045>à´¾; # REMAP (indicExceptions.txt): \u0D45>à´¾ = VOWEL SIGN CANDRA E>VOWEL SIGN AA +\uE046>െ; # VOWEL SIGN E +\uE047>േ; # VOWEL SIGN EE +\uE048>ൈ; # VOWEL SIGN AI +\uE049>ോ; # REMAP (indicExceptions.txt): \u0D49>ോ = VOWEL SIGN CANDRA O>VOWEL SIGN OO +\uE04A>ൊ; # VOWEL SIGN O +\uE04B>ോ; # VOWEL SIGN OO +\uE04C>ൌ; # VOWEL SIGN AU +\uE04D>\u0D4D; # SIGN VIRAMA +\uE050>ഓം; # UNMAPPED InterIndic-Malayalam: OM +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>; # FALLBACK BLOW AWAY LENGTH MARK +\uE056>ൈ; # REMAP (indicExceptions.txt): \u0D56>ൈ = AI LENGTH MARK>VOWEL SIGN AI +\uE057>ൗ; # AU LENGTH MARK +\uE058>ക; # FALLBACK +\uE059>ഖ; # REMAP (indicExceptions.txt): \u0D59>ഖ = LETTER KHHA>LETTER KHA +\uE05A>ഗ; # REMAP (indicExceptions.txt): \u0D5A>ഗ = LETTER GHHA>LETTER GA +\uE05B>ജ; # REMAP (indicExceptions.txt): \u0D5B>ജ = LETTER ZA>LETTER JA +\uE05D>à´¢; # REMAP (indicExceptions.txt): \u0D5D>à´¢ = LETTER RHA>LETTER DDHA +\uE05C>à´¡; # FALLBACK +\uE05E>à´«; # REMAP (indicExceptions.txt): \u0D5E>à´« = LETTER FA>LETTER PHA +\uE05F>à´¯; # REMAP (indicExceptions.txt): \u0D5F>à´¯ = LETTER YYA>LETTER YA +\uE060>ൠ; # LETTER VOCALIC RR +\uE061>ൡ; # LETTER VOCALIC LL +\uE062>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC L +\uE063>; # FALLBACK BLOW AWAY VOWEL SIGN VOCALIC LL +\uE064>'.' ; # FALLBACK FOR DANDA +\uE065>'.' ; # FALLBACK FOR DOUBLE DANDA +\uE066>൦; # DIGIT ZERO +\uE067>൧; # DIGIT ONE +\uE068>൨; # DIGIT TWO +\uE069>൩; # DIGIT THREE +\uE06A>൪; # DIGIT FOUR +\uE06B>൫; # DIGIT FIVE +\uE06C>൬; # DIGIT SIX +\uE06D>൭; # DIGIT SEVEN +\uE06E>൮; # DIGIT EIGHT +\uE06F>൯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>à´°; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>à´°; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u0d35; # FALLBACK FOR ORIYA LETTER WA -0 > \u0d66; # FALLBACK FOR TAMIL -1 > \u0d67; - -# :: NFC (NFD) ; -# eof +\uE081>à´µ; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>à´¤\u0D4D; # Bengali Khanda-ta +0 > ൦; # FALLBACK FOR TAMIL +1 > ൧; diff --git a/icuSources/data/translit/InterIndic_Oriya.txt b/icuSources/data/translit/InterIndic_Oriya.txt index 0726e279..0fd8f0f2 100644 --- a/icuSources/data/translit/InterIndic_Oriya.txt +++ b/icuSources/data/translit/InterIndic_Oriya.txt @@ -1,137 +1,138 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Oriya -#:: NFD (NFC) ; -\ue001>\u0b01; # SIGN CANDRABINDU -\ue002>\u0b02; # SIGN ANUSVARA -\ue003>\u0b03; # SIGN VISARGA -\uE004>\u0b05; # FALLBACK TO LETTER A -\ue005>\u0b05; # LETTER A -\ue006>\u0b06; # LETTER AA -\ue007>\u0b07; # LETTER I -\ue008>\u0b08; # LETTER II -\ue009>\u0b09; # LETTER U -\ue00a>\u0b0a; # LETTER UU -\ue00b>\u0b0b; # LETTER VOCALIC R -\ue00c>\u0b0c; # LETTER VOCALIC L -\ue00d>\u0b0f; # FALLBACK -\ue00e>\u0b0f; # FALLBACK -\ue00f>\u0b0f; # LETTER E -\ue010>\u0b10; # LETTER AI -\ue011>\u0b13; # FALLBACK -\ue012>\u0b13; # FALLBACK -\ue013>\u0b13; # FALLBACK LETTER OO (\u0b13 = LETTER O) -\ue014>\u0b14; # LETTER AU -\ue015>\u0b15; # LETTER KA -\ue016>\u0b16; # LETTER KHA -\ue017>\u0b17; # LETTER GA -\ue018>\u0b18; # LETTER GHA -\ue019>\u0b19; # LETTER NGA -\ue01a>\u0b1a; # LETTER CA -\ue01b>\u0b1b; # LETTER CHA -\ue01c>\u0b1c; # LETTER JA -\ue01d>\u0b1d; # LETTER JHA -\ue01e>\u0b1e; # LETTER NYA -\ue01f>\u0b1f; # LETTER TTA -\ue020>\u0b20; # LETTER TTHA -\ue021>\u0b21; # LETTER DDA -\ue022>\u0b22; # LETTER DDHA -\ue023>\u0b23; # LETTER NNA -\ue024>\u0b24; # LETTER TA -\ue025>\u0b25; # LETTER THA -\ue026>\u0b26; # LETTER DA -\ue027>\u0b27; # LETTER DHA -\ue028>\u0b28; # LETTER NA -\ue029>\u0b28\u0b3c; # FALLBACK \u0b29>\u0b28 = LETTER NNNA>LETTER NA -\ue02a>\u0b2a; # LETTER PA -\ue02b>\u0b2b; # LETTER PHA -\ue02c>\u0b2c; # LETTER BA -\ue02d>\u0b2d; # LETTER BHA -\ue02e>\u0b2e; # LETTER MA -\ue02f>\u0b2f; # LETTER YA -\ue030>\u0b30; # LETTER RA -\ue031>\u0b5c; # LETTER RRA -\ue032>\u0b32; # LETTER LA -\ue033>\u0b33; # LETTER LLA -\ue034>\u0b33\u0b3c; # FALLBACK LETTER LLLA>LETTER LLA -\ue035>\u0b35; # LETTER VA -\ue036>\u0b36; # LETTER SHA -\ue037>\u0b37; # LETTER SSA -\ue038>\u0b38; # LETTER SA -\ue039>\u0b39; # LETTER HA -\ue03c>\u0b3c; # SIGN NUKTA -\ue03d>\u0b3d; # SIGN AVAGRAHA -\ue03e>\u0b3e; # VOWEL SIGN AA -\ue03f>\u0b3f; # VOWEL SIGN I -\ue040>\u0b40; # VOWEL SIGN II -\ue041>\u0b41; # VOWEL SIGN U -\ue042>\u0b42; # VOWEL SIGN UU -\ue043>\u0b43; # VOWEL SIGN VOCALIC R -\ue044>\u0b43\u0b3c; # FALLBACK \u0b44>\u0b43\u0b3c = VOWEL SIGN VOCALIC RR>VOWEL SIGN VOCALIC R.SIGN NUKTA -\ue045>\u0b47; # FALLBACK -\ue046>\u0b47; # FALLBACK -\ue047>\u0b47; # VOWEL SIGN E -\ue048>\u0b48; # VOWEL SIGN AI -\ue049>\u0b4b; # FALLBACK -\ue04a>\u0b4b; # FALLBACK -\ue04b>\u0b4b; # VOWEL SIGN E -\ue04c>\u0b4c; # VOWEL SIGN AU -\ue04d>\u0b4d; # SIGN VIRAMA -\ue050>\u0b13\u0b01; # FALLBACK \u0b50>\u0b13\u0b01 = OM>LETTER O.SIGN CANDRABINDU -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>; # UNMAPPED InterIndic-Oriya: LENGTH MARK -\ue056>\u0b56; # AI LENGTH MARK -\ue057>\u0b57; # AU LENGTH MARK -\ue059>\u0b16\u0b3c; # FALLBACK \u0b59>\u0b16\u0b3c = LETTER KHHA>LETTER KHA.SIGN NUKTA -\ue058>\u0b15\u0b3c; # FALLBACK -\ue05a>\u0b17\u0b3c; # FALLBACK \u0b5a>\u0b17\u0b3c = LETTER GHHA>LETTER GA.SIGN NUKTA -\ue05b>\u0b1c\u0b3c; # FALLBACK \u0b5b>\u0b1c\u0b3c = LETTER ZA>LETTER JA.SIGN NUKTA -\ue05c>\u0b21\u0b3c; # FALLBACK -\ue05d>\u0b5d; # LETTER RHA -\ue05e>\u0b2b\u0b3c; # FALLBACK \u0b5e>\u0b2b\u0b3c = LETTER FA>LETTER PHA.SIGN NUKTA -\ue05f>\u0b5f; # LETTER YYA -\ue060>\u0b60; # LETTER VOCALIC RR -\ue061>\u0b61; # LETTER VOCALIC LL -\ue062>\u0b56\u0b3c; # FALLBACK \u0b62>\u0b56\u0b3c = VOWEL SIGN VOCALIC L>AI LENGTH MARK.SIGN NUKTA -\ue063>\u0b57\u0b3c; # FALLBACK \u0b63>\u0b57\u0b3c = VOWEL SIGN VOCALIC LL>AU LENGTH MARK.SIGN NUKTA -\uE064>\u0964; # DANDA -\uE065>\u0965; # DOUBLE DANDA -\ue066>\u0b66; # DIGIT ZERO -\ue067>\u0b67; # DIGIT ONE -\ue068>\u0b68; # DIGIT TWO -\ue069>\u0b69; # DIGIT THREE -\ue06a>\u0b6a; # DIGIT FOUR -\ue06b>\u0b6b; # DIGIT FIVE -\ue06c>\u0b6c; # DIGIT SIX -\ue06d>\u0b6d; # DIGIT SEVEN -\ue06e>\u0b6e; # DIGIT EIGHT -\ue06f>\u0b6f; # DIGIT NINE -\ue070>; # ABBREVIATION SIGN -\ue071>\u0b30; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0b30; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>\u0B70; # ISSHAR +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\uE001>\u0B01; # SIGN CANDRABINDU +\uE002>ଂ; # SIGN ANUSVARA +\uE003>ଃ; # SIGN VISARGA +\uE004>ଅ; # FALLBACK TO LETTER A +\uE005>ଅ; # LETTER A +\uE006>ଆ; # LETTER AA +\uE007>ଇ; # LETTER I +\uE008>ଈ; # LETTER II +\uE009>ଉ; # LETTER U +\uE00A>ଊ; # LETTER UU +\uE00B>ଋ; # LETTER VOCALIC R +\uE00C>ଌ; # LETTER VOCALIC L +\uE00D>ଏ; # FALLBACK +\uE00E>ଏ; # FALLBACK +\uE00F>ଏ; # LETTER E +\uE010>ଐ; # LETTER AI +\uE011>ଓ; # FALLBACK +\uE012>ଓ; # FALLBACK +\uE013>ଓ; # FALLBACK LETTER OO (ଓ = LETTER O) +\uE014>ଔ; # LETTER AU +\uE015>କ; # LETTER KA +\uE016>ଖ; # LETTER KHA +\uE017>ଗ; # LETTER GA +\uE018>ଘ; # LETTER GHA +\uE019>ଙ; # LETTER NGA +\uE01A>ଚ; # LETTER CA +\uE01B>ଛ; # LETTER CHA +\uE01C>ଜ; # LETTER JA +\uE01D>ଝ; # LETTER JHA +\uE01E>ଞ; # LETTER NYA +\uE01F>ଟ; # LETTER TTA +\uE020>ଠ; # LETTER TTHA +\uE021>ଡ; # LETTER DDA +\uE022>ଢ; # LETTER DDHA +\uE023>ଣ; # LETTER NNA +\uE024>ତ; # LETTER TA +\uE025>ଥ; # LETTER THA +\uE026>ଦ; # LETTER DA +\uE027>ଧ; # LETTER DHA +\uE028>ନ; # LETTER NA +\uE029>ନ\u0B3C; # FALLBACK \u0B29>ନ = LETTER NNNA>LETTER NA +\uE02A>ପ; # LETTER PA +\uE02B>ଫ; # LETTER PHA +\uE02C>ବ; # LETTER BA +\uE02D>ଭ; # LETTER BHA +\uE02E>ମ; # LETTER MA +\uE02F>ଯ; # LETTER YA +\uE030>ର; # LETTER RA +\uE031>ଡ଼; # LETTER RRA +\uE032>ଲ; # LETTER LA +\uE033>ଳ; # LETTER LLA +\uE034>ଳ\u0B3C; # FALLBACK LETTER LLLA>LETTER LLA +\uE035>ଵ; # LETTER VA +\uE036>ଶ; # LETTER SHA +\uE037>ଷ; # LETTER SSA +\uE038>ସ; # LETTER SA +\uE039>ହ; # LETTER HA +\uE03C>\u0B3C; # SIGN NUKTA +\uE03D>ଽ; # SIGN AVAGRAHA +\uE03E>ା; # VOWEL SIGN AA +\uE03F>\u0B3F; # VOWEL SIGN I +\uE040>ୀ; # VOWEL SIGN II +\uE041>\u0B41; # VOWEL SIGN U +\uE042>\u0B42; # VOWEL SIGN UU +\uE043>\u0B43; # VOWEL SIGN VOCALIC R +\uE044>\u0B43\u0B3C; # FALLBACK \u0B44>\u0B43\u0B3C = VOWEL SIGN VOCALIC RR>VOWEL SIGN VOCALIC R.SIGN NUKTA +\uE045>େ; # FALLBACK +\uE046>େ; # FALLBACK +\uE047>େ; # VOWEL SIGN E +\uE048>ୈ; # VOWEL SIGN AI +\uE049>ୋ; # FALLBACK +\uE04A>ୋ; # FALLBACK +\uE04B>ୋ; # VOWEL SIGN E +\uE04C>ୌ; # VOWEL SIGN AU +\uE04D>\u0B4D; # SIGN VIRAMA +\uE050>ଓ\u0B01; # FALLBACK \u0B50>ଓ\u0B01 = OM>LETTER O.SIGN CANDRABINDU +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>; # UNMAPPED InterIndic-Oriya: LENGTH MARK +\uE056>\u0B56; # AI LENGTH MARK +\uE057>ୗ; # AU LENGTH MARK +\uE059>ଖ\u0B3C; # FALLBACK \u0B59>ଖ\u0B3C = LETTER KHHA>LETTER KHA.SIGN NUKTA +\uE058>କ\u0B3C; # FALLBACK +\uE05A>ଗ\u0B3C; # FALLBACK \u0B5A>ଗ\u0B3C = LETTER GHHA>LETTER GA.SIGN NUKTA +\uE05B>ଜ\u0B3C; # FALLBACK \u0B5B>ଜ\u0B3C = LETTER ZA>LETTER JA.SIGN NUKTA +\uE05C>ଡ\u0B3C; # FALLBACK +\uE05D>ଢ଼; # LETTER RHA +\uE05E>ଫ\u0B3C; # FALLBACK \u0B5E>ଫ\u0B3C = LETTER FA>LETTER PHA.SIGN NUKTA +\uE05F>ୟ; # LETTER YYA +\uE060>à­ ; # LETTER VOCALIC RR +\uE061>à­¡; # LETTER VOCALIC LL +\uE062>\u0B56\u0B3C; # FALLBACK \u0B62>\u0B56\u0B3C = VOWEL SIGN VOCALIC L>AI LENGTH MARK.SIGN NUKTA +\uE063>ୗ\u0B3C; # FALLBACK \u0B63>ୗ\u0B3C = VOWEL SIGN VOCALIC LL>AU LENGTH MARK.SIGN NUKTA +\uE064>।; # DANDA +\uE065>॥; # DOUBLE DANDA +\uE066>à­¦; # DIGIT ZERO +\uE067>à­§; # DIGIT ONE +\uE068>à­¨; # DIGIT TWO +\uE069>à­©; # DIGIT THREE +\uE06A>à­ª; # DIGIT FOUR +\uE06B>à­«; # DIGIT FIVE +\uE06C>à­¬; # DIGIT SIX +\uE06D>à­­; # DIGIT SEVEN +\uE06E>à­®; # DIGIT EIGHT +\uE06F>à­¯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>ର; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>ର; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>à­°; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u0B71; # LETTER WA -0 > \u0b66; # FALLBACK FOR TAMIL -1 > \u0b67; - -# :: NFC (NFD) ; -# eof +\uE081>à­±; # LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>ତ\u0B4D; # Bengali Khanda-ta +0 > à­¦; # FALLBACK FOR TAMIL +1 > à­§; diff --git a/icuSources/data/translit/InterIndic_Tamil.txt b/icuSources/data/translit/InterIndic_Tamil.txt index 08889cba..6a085815 100644 --- a/icuSources/data/translit/InterIndic_Tamil.txt +++ b/icuSources/data/translit/InterIndic_Tamil.txt @@ -1,151 +1,145 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Tamil -#:: NFD (NFC) ; -\ue001>\u0b82; # FALLBACK SIGN CANDRABINDU -\ue002>\u0b82; # SIGN ANUSVARA -\ue003>\u0b83; # SIGN VISARGA -\uE004>\u0b85; # FALLBACK TO LETTER A -\ue005>\u0b85; # LETTER A -\ue006>\u0b86; # LETTER AA -\ue007>\u0b87; # LETTER I -\ue008>\u0b88; # LETTER II -\ue009>\u0b89; # LETTER U -\ue00a>\u0b8a; # LETTER UU -\ue00b>\u0bb0\u0bbf; # REMAP (indicExceptions.txt): \u0b8b>\u0bb0\u0bbf = LETTER VOCALIC R>LETTER RA.VOWEL SIGN I -\ue00c>\u0bb2; # FALLBACK LETTER LA -\ue00d>\u0b8f; # FALLBACK -\ue00e>\u0b8e; # LETTER E -\ue00f>\u0b8f; # LETTER EE -\ue010>\u0b90; # LETTER AI -\ue011>\u0b92; # FALLBACK -\ue012>\u0b92; # LETTER O -\ue013>\u0b93; # LETTER OO -\ue014>\u0b94; # LETTER AU -\ue015>\u0b95; # LETTER KA -\ue016>\u0b95; # REMAP (indicExceptions.txt): \u0b96>\u0b95 = LETTER KHA>LETTER KA -\ue017>\u0b95; # REMAP (indicExceptions.txt): \u0b97>\u0b95 = LETTER GA>LETTER KA -\ue018>\u0b95; # REMAP (indicExceptions.txt): \u0b98>\u0b95 = LETTER GHA>LETTER KA -\ue019>\u0b99; # LETTER NGA -\ue01a>\u0b9a; # LETTER CA -\ue01b>\u0b9a; # REMAP (indicExceptions.txt): \u0b9b>\u0b9a = LETTER CHA>LETTER CA -\ue01c>\u0b9c; # LETTER JA -\ue01d>\u0b9a; # REMAP (indicExceptions.txt): \u0b9d>\u0b9a = LETTER JHA>LETTER CA -\ue01e>\u0b9e; # LETTER NYA -\ue01f>\u0b9f; # LETTER TTA -\ue020>\u0b9f; # REMAP (indicExceptions.txt): \u0ba0>\u0b9f = LETTER TTHA>LETTER TTA -\ue021>\u0b9f; # REMAP (indicExceptions.txt): \u0ba1>\u0b9f = LETTER DDA>LETTER TTA -\ue022>\u0b9f; # REMAP (indicExceptions.txt): \u0ba2>\u0b9f = LETTER DDHA>LETTER TTA -\ue023>\u0ba3; # LETTER NNA -\ue024>\u0ba4; # LETTER TA -\ue025>\u0ba4; # REMAP (indicExceptions.txt): \u0ba5>\u0ba4 = LETTER THA>LETTER TA -\ue026>\u0ba4; # REMAP (indicExceptions.txt): \u0ba6>\u0ba4 = LETTER DA>LETTER TA -\ue027>\u0ba4; # REMAP (indicExceptions.txt): \u0ba7>\u0ba4 = LETTER DHA>LETTER TA -\ue028\ue03c>\u0ba9; -\ue028>\u0ba8; # LETTER NA -\ue029>\u0ba9; # LETTER NNNA -\ue02a>\u0baa; # LETTER PA -\ue02b>\u0baa; # REMAP (indicExceptions.txt): \u0bab>\u0baa = LETTER PHA>LETTER PA -\ue02c>\u0baa; # REMAP (indicExceptions.txt): \u0bac>\u0baa = LETTER BA>LETTER PA -\ue02d>\u0baa; # REMAP (indicExceptions.txt): \u0bad>\u0baa = LETTER BHA>LETTER PA -\ue02e>\u0bae; # LETTER MA -\ue02f>\u0baf; # LETTER YA -\ue030\ue03c>\u0bb1; -\ue030>\u0bb0; # LETTER RA -\ue031>\u0bb1; # LETTER RRA -\ue032>\u0bb2; # LETTER LA -\ue033\ue03c>\u0bb4; -\ue033>\u0bb3; # LETTER LLA -\ue034>\u0bb4; # LETTER LLLA -\ue035>\u0bb5; # LETTER VA -\ue036>\u0bb7; # REMAP (indicExceptions.txt): \u0bb6>\u0bb7 = LETTER SHA>LETTER SSA -\ue037>\u0bb7; # LETTER SSA -\ue038>\u0bb8; # LETTER SA -\ue039>\u0bb9; # LETTER HA - -\ue03c>; # FALLBACK BLOW AWAY NUKTA -\ue03d>; # FALLBACK BLOW AWAY AVAGRAHA - -\ue03e>\u0bbe; # VOWEL SIGN AA -\ue03f>\u0bbf; # VOWEL SIGN I -\ue040>\u0bc0; # VOWEL SIGN II -\ue041>\u0bc1; # VOWEL SIGN U -\ue042>\u0bc2; # VOWEL SIGN UU -\ue043>\u0bcd\u0bb0\u0bbf; # REMAP (indicExceptions.txt): \u0bc3>\u0bcd\u0bb0\u0bbf = VOWEL SIGN VOCALIC R>SIGN VIRAMA.LETTER RA.VOWEL SIGN I -\ue044>\u0bcd\u0bb0\u0bbf; # REMAP (indicExceptions.txt): \u0bc4>\u0bcd\u0bb0\u0bbf = VOWEL SIGN VOCALIC RR>SIGN VIRAMA.LETTER RA.VOWEL SIGN I -\ue045>\u0bbe; # REMAP (indicExceptions.txt): \u0bc5>\u0bbe = VOWEL SIGN CANDRA E>VOWEL SIGN AA -\ue046>\u0bc6; # VOWEL SIGN E -\ue047>\u0bc7; # VOWEL SIGN EE -\ue048>\u0bc8; # VOWEL SIGN AI -\ue049>\u0bbe; # REMAP (indicExceptions.txt): \u0bc9>\u0bbe = VOWEL SIGN CANDRA O>VOWEL SIGN AA -\ue04a>\u0bca; # VOWEL SIGN O -\ue04b>\u0bcb; # VOWEL SIGN OO -\ue04c>\u0bcc; # VOWEL SIGN AU -\ue04d>\u0bcd; # SIGN VIRAMA -\ue050>\u0b93\u0bae\u0bcd; # REMAP (indicExceptions.txt): \u0bd0>\u0b93\u0bae\u0bcd = OM>LETTER OO.LETTER MA.SIGN VIRAMA -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>; # UNMAPPED InterIndic-Tamil: LENGTH MARK -\ue056>\u0bc8; # REMAP (indicExceptions.txt): \u0bd6>\u0bc8 = AI LENGTH MARK>VOWEL SIGN AI -\ue057>\u0bd7; # AU LENGTH MARK -\ue058>\u0b95; # FALLBACK -\ue059>\u0b95; # REMAP (indicExceptions.txt): \u0bd9>\u0b95 = LETTER KHHA>LETTER KA -\ue05a>\u0b95; # REMAP (indicExceptions.txt): \u0bda>\u0b95 = LETTER GHHA>LETTER KA -\ue05b>\u0b9c; # REMAP (indicExceptions.txt): \u0bdb>\u0b9c = LETTER ZA>LETTER JA -\ue05c>\u0ba4; # FALLBACK -\ue05d>\u0b9f; # REMAP (indicExceptions.txt): \u0bdd>\u0b9f = LETTER RHA>LETTER TTA -\ue05e>\u0baa; # REMAP (indicExceptions.txt): \u0bde>\u0baa = LETTER FA>LETTER PA -\ue05f>\u0baf; # REMAP (indicExceptions.txt): \u0bdf>\u0baf = LETTER YYA>LETTER YA -\ue060>\u0bb0\u0bbf; # REMAP (indicExceptions.txt): \u0be0>\u0bb0\u0bbf = LETTER VOCALIC RR>LETTER RA.VOWEL SIGN I -\ue061>\u0bb3; # FALLBACK LETTER LLA -\ue062>\u0bbf; # FALLBACK VOWEL SIGN VOCALIC L -\ue063>\u0bc0; # FALLBACK VOWEL SIGN VOCALIC LL -\ue064>'.' ; # FALLBACK FOR DANDA -\ue065>'.' ; # FALLBACK FOR DOUBLE DANDA - -\ue066>\u0030; # FALLBACK DIGIT ZERO - -\ue067\ue066\ue066\ue066>\u0bF2; -\ue067\ue066\ue066>\u0bf1; -\ue067\ue066>\u0bF0; - -\ue067>\u0be7; # DIGIT ONE -\ue068>\u0be8; # DIGIT TWO -\ue069>\u0be9; # DIGIT THREE -\ue06a>\u0bea; # DIGIT FOUR -\ue06b>\u0beb; # DIGIT FIVE -\ue06c>\u0bec; # DIGIT SIX -\ue06d>\u0bed; # DIGIT SEVEN -\ue06e>\u0bee; # DIGIT EIGHT -\ue06f>\u0bef; # DIGIT NINE - -\ue070>; # ABBREVIATION SIGN -\ue071>\u0bc0; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0bc0; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>; # ISSHAR +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\uE001>\u0B82; # FALLBACK SIGN CANDRABINDU +\uE002>\u0B82; # SIGN ANUSVARA +\uE003>ஃ; # SIGN VISARGA +\uE004>அ; # FALLBACK TO LETTER A +\uE005>அ; # LETTER A +\uE006>ஆ; # LETTER AA +\uE007>இ; # LETTER I +\uE008>ஈ; # LETTER II +\uE009>உ; # LETTER U +\uE00A>ஊ; # LETTER UU +\uE00B>ரி; # REMAP (indicExceptions.txt): \u0B8B>ரி = LETTER VOCALIC R>LETTER RA.VOWEL SIGN I +\uE00C>ல; # FALLBACK LETTER LA +\uE00D>ஏ; # FALLBACK +\uE00E>எ; # LETTER E +\uE00F>ஏ; # LETTER EE +\uE010>ஐ; # LETTER AI +\uE011>ஒ; # FALLBACK +\uE012>ஒ; # LETTER O +\uE013>ஓ; # LETTER OO +\uE014>ஔ; # LETTER AU +\uE015>க; # LETTER KA +\uE016>க; # REMAP (indicExceptions.txt): \u0B96>க = LETTER KHA>LETTER KA +\uE017>க; # REMAP (indicExceptions.txt): \u0B97>க = LETTER GA>LETTER KA +\uE018>க; # REMAP (indicExceptions.txt): \u0B98>க = LETTER GHA>LETTER KA +\uE019>ங; # LETTER NGA +\uE01A>ச; # LETTER CA +\uE01B>ச; # REMAP (indicExceptions.txt): \u0B9B>ச = LETTER CHA>LETTER CA +\uE01C>ஜ; # LETTER JA +\uE01D>ச; # REMAP (indicExceptions.txt): \u0B9D>ச = LETTER JHA>LETTER CA +\uE01E>ஞ; # LETTER NYA +\uE01F>ட; # LETTER TTA +\uE020>ட; # REMAP (indicExceptions.txt): \u0BA0>ட = LETTER TTHA>LETTER TTA +\uE021>ட; # REMAP (indicExceptions.txt): \u0BA1>ட = LETTER DDA>LETTER TTA +\uE022>ட; # REMAP (indicExceptions.txt): \u0BA2>ட = LETTER DDHA>LETTER TTA +\uE023>ண; # LETTER NNA +\uE024>த; # LETTER TA +\uE025>த; # REMAP (indicExceptions.txt): \u0BA5>த = LETTER THA>LETTER TA +\uE026>த; # REMAP (indicExceptions.txt): \u0BA6>த = LETTER DA>LETTER TA +\uE027>த; # REMAP (indicExceptions.txt): \u0BA7>த = LETTER DHA>LETTER TA +\uE028\uE03C>ன; +\uE028>ந; # LETTER NA +\uE029>ன; # LETTER NNNA +\uE02A>ப; # LETTER PA +\uE02B>ப; # REMAP (indicExceptions.txt): \u0BAB>ப = LETTER PHA>LETTER PA +\uE02C>ப; # REMAP (indicExceptions.txt): \u0BAC>ப = LETTER BA>LETTER PA +\uE02D>ப; # REMAP (indicExceptions.txt): \u0BAD>ப = LETTER BHA>LETTER PA +\uE02E>à®®; # LETTER MA +\uE02F>ய; # LETTER YA +\uE030\uE03C>à®±; +\uE030>à®°; # LETTER RA +\uE031>à®±; # LETTER RRA +\uE032>ல; # LETTER LA +\uE033\uE03C>à®´; +\uE033>ள; # LETTER LLA +\uE034>à®´; # LETTER LLLA +\uE035>வ; # LETTER VA +\uE036>ஶ; # REMAP (indicExceptions.txt): ஶ>à®· = LETTER SHA>LETTER SSA +\uE037>à®·; # LETTER SSA +\uE038>ஸ; # LETTER SA +\uE039>ஹ; # LETTER HA +\uE03C>; # FALLBACK BLOW AWAY NUKTA +\uE03D>; # FALLBACK BLOW AWAY AVAGRAHA +\uE03E>ா; # VOWEL SIGN AA +\uE03F>ி; # VOWEL SIGN I +\uE040>\u0BC0; # VOWEL SIGN II +\uE041>ு; # VOWEL SIGN U +\uE042>ூ; # VOWEL SIGN UU +\uE043>\u0BCDரி; # REMAP (indicExceptions.txt): \u0BC3>\u0BCDரி = VOWEL SIGN VOCALIC R>SIGN VIRAMA.LETTER RA.VOWEL SIGN I +\uE044>\u0BCDரி; # REMAP (indicExceptions.txt): \u0BC4>\u0BCDரி = VOWEL SIGN VOCALIC RR>SIGN VIRAMA.LETTER RA.VOWEL SIGN I +\uE045>ா; # REMAP (indicExceptions.txt): \u0BC5>ா = VOWEL SIGN CANDRA E>VOWEL SIGN AA +\uE046>ெ; # VOWEL SIGN E +\uE047>ே; # VOWEL SIGN EE +\uE048>ை; # VOWEL SIGN AI +\uE049>ா; # REMAP (indicExceptions.txt): \u0BC9>ா = VOWEL SIGN CANDRA O>VOWEL SIGN AA +\uE04A>ொ; # VOWEL SIGN O +\uE04B>ோ; # VOWEL SIGN OO +\uE04C>ௌ; # VOWEL SIGN AU +\uE04D>\u0BCD; # SIGN VIRAMA +\uE050>ஓம\u0BCD; # REMAP (indicExceptions.txt): \u0BD0>ஓம\u0BCD = OM>LETTER OO.LETTER MA.SIGN VIRAMA +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>; # UNMAPPED InterIndic-Tamil: LENGTH MARK +\uE056>ை; # REMAP (indicExceptions.txt): \u0BD6>ை = AI LENGTH MARK>VOWEL SIGN AI +\uE057>ௗ; # AU LENGTH MARK +\uE058>க; # FALLBACK +\uE059>க; # REMAP (indicExceptions.txt): \u0BD9>க = LETTER KHHA>LETTER KA +\uE05A>க; # REMAP (indicExceptions.txt): \u0BDA>க = LETTER GHHA>LETTER KA +\uE05B>ஜ; # REMAP (indicExceptions.txt): \u0BDB>ஜ = LETTER ZA>LETTER JA +\uE05C>த; # FALLBACK +\uE05D>ட; # REMAP (indicExceptions.txt): \u0BDD>ட = LETTER RHA>LETTER TTA +\uE05E>ப; # REMAP (indicExceptions.txt): \u0BDE>ப = LETTER FA>LETTER PA +\uE05F>ய; # REMAP (indicExceptions.txt): \u0BDF>ய = LETTER YYA>LETTER YA +\uE060>ரி; # REMAP (indicExceptions.txt): \u0BE0>ரி = LETTER VOCALIC RR>LETTER RA.VOWEL SIGN I +\uE061>ள; # FALLBACK LETTER LLA +\uE062>ி; # FALLBACK VOWEL SIGN VOCALIC L +\uE063>\u0BC0; # FALLBACK VOWEL SIGN VOCALIC LL +\uE064>'.' ; # FALLBACK FOR DANDA +\uE065>'.' ; # FALLBACK FOR DOUBLE DANDA +\uE066>\u0030; # FALLBACK DIGIT ZERO +\uE067\uE066\uE066\uE066>௲; +\uE067\uE066\uE066>௱; +\uE067\uE066>௰; +\uE067>௧; # DIGIT ONE +\uE068>௨; # DIGIT TWO +\uE069>௩; # DIGIT THREE +\uE06A>௪; # DIGIT FOUR +\uE06B>௫; # DIGIT FIVE +\uE06C>௬; # DIGIT SIX +\uE06D>௭; # DIGIT SEVEN +\uE06E>௮; # DIGIT EIGHT +\uE06F>௯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>\u0BC0; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>\u0BC0; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u0bb5; # FALLBACK FOR ORIYA LETTER WA - -1000 >\u0BF2; # NUMBER ONE THOUSAND -100 >\u0BF1; # NUMBER ONE HUNDRED -10 >\u0BF0; # NUMBER TEN - -# :: NFC (NFD) ; -# eof +\uE081>வ; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>த\u0BCD; # Bengali Khanda-ta +1000 >௲; # NUMBER ONE THOUSAND +100 >௱; # NUMBER ONE HUNDRED +10 >௰; # NUMBER TEN diff --git a/icuSources/data/translit/InterIndic_Telugu.txt b/icuSources/data/translit/InterIndic_Telugu.txt index 026cd209..3819b011 100644 --- a/icuSources/data/translit/InterIndic_Telugu.txt +++ b/icuSources/data/translit/InterIndic_Telugu.txt @@ -1,141 +1,139 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# InterIndic-Telugu -#:: NFD (NFC) ; -\ue001>\u0c01; # SIGN CANDRABINDU -\ue002>\u0c02; # SIGN ANUSVARA -\ue003>\u0c03; # SIGN VISARGA -\uE004>\u0c05; # FALLBACK TO LETTER A -\ue005>\u0c05; # LETTER A -\ue006>\u0c06; # LETTER AA -\ue007>\u0c07; # LETTER I -\ue008>\u0c08; # LETTER II -\ue009>\u0c09; # LETTER U -\ue00a>\u0c0a; # LETTER UU -\ue00b>\u0c0b; # LETTER VOCALIC R -\ue00c>\u0c0c; # LETTER VOCALIC L -\ue00d>\u0c0E; # FALLBACK MAPPING -\ue00e>\u0c0E; # LETTER E -\ue00f>\u0c0f; # LETTER EE -\ue010>\u0c10; # LETTER AI -\ue011>\u0c12; # FALBACK MAPPING -\ue012>\u0c12; # LETTER O -\ue013>\u0c13; # LETTER OO -\ue014>\u0c14; # LETTER AU -\ue015>\u0c15; # LETTER KA -\ue016>\u0c16; # LETTER KHA -\ue017>\u0c17; # LETTER GA -\ue018>\u0c18; # LETTER GHA -\ue019>\u0c19; # LETTER NGA -\ue01a>\u0c1a; # LETTER CA -\ue01b>\u0c1b; # LETTER CHA -\ue01c>\u0c1c; # LETTER JA -\ue01d>\u0c1d; # LETTER JHA -\ue01e>\u0c1e; # LETTER NYA -\ue01f>\u0c1f; # LETTER TTA -\ue020>\u0c20; # LETTER TTHA -\ue021>\u0c21; # LETTER DDA -\ue022>\u0c22; # LETTER DDHA -\ue023>\u0c23; # LETTER NNA -\ue024>\u0c24; # LETTER TA -\ue025>\u0c25; # LETTER THA -\ue026>\u0c26; # LETTER DA -\ue027>\u0c27; # LETTER DHA -\ue028>\u0c28; # LETTER NA -\ue029>\u0c28; # REMAP (indicExceptions.txt): \u0c29>\u0c28 = LETTER NNNA>LETTER NA -\ue02a>\u0c2a; # LETTER PA -\ue02b>\u0c2b; # LETTER PHA -\ue02c>\u0c2c; # LETTER BA -\ue02d>\u0c2d; # LETTER BHA -\ue02e>\u0c2e; # LETTER MA -\ue02f>\u0c2f; # LETTER YA -\ue030\ue03c>\u0c31; -\ue030>\u0c30; # LETTER RA -\ue031>\u0c31; # LETTER RRA -\ue032>\u0c32; # LETTER LA -\ue033>\u0c33; # LETTER LLA -\ue034>\u0c33; # REMAP (indicExceptions.txt): \u0c34>\u0c33 = LETTER LLLA>LETTER LLA -\ue035>\u0c35; # LETTER VA -\ue036>\u0c36; # LETTER SHA -\ue037>\u0c37; # LETTER SSA -\ue038>\u0c38; # LETTER SA -\ue039>\u0c39; # LETTER HA - -\ue03c>; # FALLBACK BLOW AWAY NUKTA -\ue03d>; # FALLBACK BLOW AWAY AVAGRAHA - -\ue03e>\u0c3e; # VOWEL SIGN AA -\ue03f>\u0c3f; # VOWEL SIGN I -\ue040>\u0c40; # VOWEL SIGN II -\ue041>\u0c41; # VOWEL SIGN U -\ue042>\u0c42; # VOWEL SIGN UU -\ue043>\u0c43; # VOWEL SIGN VOCALIC R -\ue044>\u0c44; # VOWEL SIGN VOCALIC RR -\ue045>\u0c46; # VOWEL SIGN CANDRA E>VOWEL SIGN E -\ue046>\u0c46; # VOWEL SIGN E -\ue047>\u0c47; # VOWEL SIGN EE -\ue048>\u0c48; # VOWEL SIGN AI -\ue049>\u0c4a; # REMAP (indicExceptions.txt): \u0c49>\u0c4a = VOWEL SIGN CANDRA O>VOWEL SIGN O -\ue04a>\u0c4a; # VOWEL SIGN O -\ue04b>\u0c4b; # VOWEL SIGN OO -\ue04c>\u0c4c; # VOWEL SIGN AU -\ue04d>\u0c4d; # SIGN VIRAMA -\ue050>\u0c13\u0c02; # REMAP (indicExceptions.txt): \u0c50>\u0c13\u0c02 = OM>LETTER OO.SIGN ANUSVARA -\ue051>; -\ue052>; -\ue053>; -\ue054>; -\ue055>\u0c55; # LENGTH MARK -\ue056>\u0c56; # AI LENGTH MARK -\ue057>\u0c4c; # REMAP (indicExceptions.txt): \u0c57>\u0c4c = AU LENGTH MARK>VOWEL SIGN AU -\ue058>\u0c15; # REMAP -\ue059>\u0c16; # REMAP (indicExceptions.txt): \u0c59>\u0c16 = LETTER KHHA>LETTER KHA -\ue05a>\u0c17; # REMAP (indicExceptions.txt): \u0c5a>\u0c17 = LETTER GHHA>LETTER GA -\ue05b>\u0c1c; # REMAP (indicExceptions.txt): \u0c5b>\u0c1c = LETTER ZA>LETTER JA -\ue05c>\u0c22; # REMAP -\ue05d>\u0c22; # REMAP (indicExceptions.txt): \u0c5d>\u0c22 = LETTER RHA>LETTER DDHA -\ue05e>\u0c2b; # REMAP (indicExceptions.txt): \u0c5e>\u0c2b = LETTER FA>LETTER PHA -\ue05f>\u0c2f; # REMAP (indicExceptions.txt): \u0c5f>\u0c2f = LETTER YYA>LETTER YA -\ue060>\u0c60; # LETTER VOCALIC RR -\ue061>\u0c61; # LETTER VOCALIC LL -\ue062>\u0c3f; # REMAP (indicExceptions.txt): \u0c62>\u0c3f = VOWEL SIGN VOCALIC L>VOWEL SIGN I -\ue063>\u0c40; # REMAP (indicExceptions.txt): \u0c63>\u0c40 = VOWEL SIGN VOCALIC LL>VOWEL SIGN II -\ue064>'.' ; # FALLBACK FOR DANDA -\ue065>'.' ; # FALLBACK FOR DOUBLE DANDA -\ue066>\u0c66; # DIGIT ZERO -\ue067>\u0c67; # DIGIT ONE -\ue068>\u0c68; # DIGIT TWO -\ue069>\u0c69; # DIGIT THREE -\ue06a>\u0c6a; # DIGIT FOUR -\ue06b>\u0c6b; # DIGIT FIVE -\ue06c>\u0c6c; # DIGIT SIX -\ue06d>\u0c6d; # DIGIT SEVEN -\ue06e>\u0c6e; # DIGIT EIGHT -\ue06f>\u0c6f; # DIGIT NINE - -\ue070>; # ABBREVIATION SIGN -\ue071>\u0c30; # LETTER RA WITH MIDDLE DIAGONAL -\ue072>\u0c30; # LETTER RA WITH LOWER DIAGONAL -\ue073>; # RUPEE MARK -\ue074>; # RUPEE SIGN -\ue075>; # CURRENCY NUMERATOR ONE -\ue076>; # CURRENCY NUMERATOR TWO -\ue077>; # CURRENCY NUMERATOR THREE -\ue078>; # CURRENCY NUMERATOR FOUR -\ue079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -\ue07A>; # CURRENCY DENOMINATOR SIXTEEN -\ue07B>; # ISSHAR +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: InterIndic_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\uE001>ఁ; # SIGN CANDRABINDU +\uE002>ం; # SIGN ANUSVARA +\uE003>ః; # SIGN VISARGA +\uE004>అ; # FALLBACK TO LETTER A +\uE005>అ; # LETTER A +\uE006>ఆ; # LETTER AA +\uE007>ఇ; # LETTER I +\uE008>ఈ; # LETTER II +\uE009>ఉ; # LETTER U +\uE00A>ఊ; # LETTER UU +\uE00B>ఋ; # LETTER VOCALIC R +\uE00C>ఌ; # LETTER VOCALIC L +\uE00D>ఎ; # FALLBACK MAPPING +\uE00E>ఎ; # LETTER E +\uE00F>ఏ; # LETTER EE +\uE010>ఐ; # LETTER AI +\uE011>ఒ; # FALBACK MAPPING +\uE012>ఒ; # LETTER O +\uE013>ఓ; # LETTER OO +\uE014>ఔ; # LETTER AU +\uE015>క; # LETTER KA +\uE016>ఖ; # LETTER KHA +\uE017>గ; # LETTER GA +\uE018>ఘ; # LETTER GHA +\uE019>ఙ; # LETTER NGA +\uE01A>చ; # LETTER CA +\uE01B>ఛ; # LETTER CHA +\uE01C>జ; # LETTER JA +\uE01D>ఝ; # LETTER JHA +\uE01E>ఞ; # LETTER NYA +\uE01F>ట; # LETTER TTA +\uE020>à° ; # LETTER TTHA +\uE021>à°¡; # LETTER DDA +\uE022>à°¢; # LETTER DDHA +\uE023>à°£; # LETTER NNA +\uE024>à°¤; # LETTER TA +\uE025>à°¥; # LETTER THA +\uE026>à°¦; # LETTER DA +\uE027>à°§; # LETTER DHA +\uE028>à°¨; # LETTER NA +\uE029>à°¨; # REMAP (indicExceptions.txt): \u0C29>à°¨ = LETTER NNNA>LETTER NA +\uE02A>à°ª; # LETTER PA +\uE02B>à°«; # LETTER PHA +\uE02C>à°¬; # LETTER BA +\uE02D>à°­; # LETTER BHA +\uE02E>à°®; # LETTER MA +\uE02F>à°¯; # LETTER YA +\uE030\uE03C>à°±; +\uE030>à°°; # LETTER RA +\uE031>à°±; # LETTER RRA +\uE032>à°²; # LETTER LA +\uE033>à°³; # LETTER LLA +\uE034>à°³; # REMAP (indicExceptions.txt): \u0C34>à°³ = LETTER LLLA>LETTER LLA +\uE035>à°µ; # LETTER VA +\uE036>à°¶; # LETTER SHA +\uE037>à°·; # LETTER SSA +\uE038>à°¸; # LETTER SA +\uE039>à°¹; # LETTER HA +\uE03C>; # FALLBACK BLOW AWAY NUKTA +\uE03D>; # FALLBACK BLOW AWAY AVAGRAHA +\uE03E>\u0C3E; # VOWEL SIGN AA +\uE03F>\u0C3F; # VOWEL SIGN I +\uE040>\u0C40; # VOWEL SIGN II +\uE041>ు; # VOWEL SIGN U +\uE042>ూ; # VOWEL SIGN UU +\uE043>ృ; # VOWEL SIGN VOCALIC R +\uE044>ౄ; # VOWEL SIGN VOCALIC RR +\uE045>\u0C46; # VOWEL SIGN CANDRA E>VOWEL SIGN E +\uE046>\u0C46; # VOWEL SIGN E +\uE047>\u0C47; # VOWEL SIGN EE +\uE048>\u0C48; # VOWEL SIGN AI +\uE049>\u0C4A; # REMAP (indicExceptions.txt): \u0C49>\u0C4A = VOWEL SIGN CANDRA O>VOWEL SIGN O +\uE04A>\u0C4A; # VOWEL SIGN O +\uE04B>\u0C4B; # VOWEL SIGN OO +\uE04C>\u0C4C; # VOWEL SIGN AU +\uE04D>\u0C4D; # SIGN VIRAMA +\uE050>ఓం; # REMAP (indicExceptions.txt): \u0C50>ఓం = OM>LETTER OO.SIGN ANUSVARA +\uE051>; +\uE052>; +\uE053>; +\uE054>; +\uE055>\u0C55; # LENGTH MARK +\uE056>\u0C56; # AI LENGTH MARK +\uE057>\u0C4C; # REMAP (indicExceptions.txt): \u0C57>\u0C4C = AU LENGTH MARK>VOWEL SIGN AU +\uE058>క; # REMAP +\uE059>ఖ; # REMAP (indicExceptions.txt): \u0C59>ఖ = LETTER KHHA>LETTER KHA +\uE05A>గ; # REMAP (indicExceptions.txt): \u0C5A>గ = LETTER GHHA>LETTER GA +\uE05B>జ; # REMAP (indicExceptions.txt): \u0C5B>జ = LETTER ZA>LETTER JA +\uE05C>à°¢; # REMAP +\uE05D>à°¢; # REMAP (indicExceptions.txt): \u0C5D>à°¢ = LETTER RHA>LETTER DDHA +\uE05E>à°«; # REMAP (indicExceptions.txt): \u0C5E>à°« = LETTER FA>LETTER PHA +\uE05F>à°¯; # REMAP (indicExceptions.txt): \u0C5F>à°¯ = LETTER YYA>LETTER YA +\uE060>à± ; # LETTER VOCALIC RR +\uE061>ౡ; # LETTER VOCALIC LL +\uE062>\u0C3F; # REMAP (indicExceptions.txt): \u0C62>\u0C3F = VOWEL SIGN VOCALIC L>VOWEL SIGN I +\uE063>\u0C40; # REMAP (indicExceptions.txt): \u0C63>\u0C40 = VOWEL SIGN VOCALIC LL>VOWEL SIGN II +\uE064>'.' ; # FALLBACK FOR DANDA +\uE065>'.' ; # FALLBACK FOR DOUBLE DANDA +\uE066>౦; # DIGIT ZERO +\uE067>౧; # DIGIT ONE +\uE068>౨; # DIGIT TWO +\uE069>౩; # DIGIT THREE +\uE06A>౪; # DIGIT FOUR +\uE06B>౫; # DIGIT FIVE +\uE06C>౬; # DIGIT SIX +\uE06D>à±­; # DIGIT SEVEN +\uE06E>à±®; # DIGIT EIGHT +\uE06F>౯; # DIGIT NINE +\uE070>; # ABBREVIATION SIGN +\uE071>à°°; # LETTER RA WITH MIDDLE DIAGONAL +\uE072>à°°; # LETTER RA WITH LOWER DIAGONAL +\uE073>; # RUPEE MARK +\uE074>; # RUPEE SIGN +\uE075>; # CURRENCY NUMERATOR ONE +\uE076>; # CURRENCY NUMERATOR TWO +\uE077>; # CURRENCY NUMERATOR THREE +\uE078>; # CURRENCY NUMERATOR FOUR +\uE079>; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\uE07A>; # CURRENCY DENOMINATOR SIXTEEN +\uE07B>; # ISSHAR \uE07C>; # TIPPI \uE07D>; # ADDAK \uE07E>; # IRI \uE07F>; # URA \uE080>; # EK ONKAR -\uE081>\u0c35; # FALLBACK FOR ORIYA LETTER WA -0 > \u0c66; # FALLBACK FOR TAMIL -1 > \u0c67; - -# :: NFC (NFD) ; -# eof +\uE081>à°µ; # FALLBACK FOR ORIYA LETTER WA +\uE082>; # Devanagari Glottal Stop +\uE083>à°¤\u0C4D; # Bengali Khanda-ta +0 > ౦; # FALLBACK FOR TAMIL +1 > ౧; diff --git a/icuSources/data/translit/Jamo_Latin.txt b/icuSources/data/translit/Jamo_Latin.txt new file mode 100644 index 00000000..c0dfd589 --- /dev/null +++ b/icuSources/data/translit/Jamo_Latin.txt @@ -0,0 +1,13 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Jamo_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::['ᄀ-하-ᅵᆨ-ᇂ가-힣]; +::NFD; +::ConjoiningJamo-Latin; +::NFC; diff --git a/icuSources/data/translit/Kannada_Bengali.txt b/icuSources/data/translit/Kannada_Bengali.txt new file mode 100644 index 00000000..11e38a72 --- /dev/null +++ b/icuSources/data/translit/Kannada_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Kannada_Devanagari.txt b/icuSources/data/translit/Kannada_Devanagari.txt new file mode 100644 index 00000000..04053e28 --- /dev/null +++ b/icuSources/data/translit/Kannada_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Kannada_Gujarati.txt b/icuSources/data/translit/Kannada_Gujarati.txt new file mode 100644 index 00000000..6baf8dc7 --- /dev/null +++ b/icuSources/data/translit/Kannada_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Kannada_Gurmukhi.txt b/icuSources/data/translit/Kannada_Gurmukhi.txt new file mode 100644 index 00000000..61edf3e6 --- /dev/null +++ b/icuSources/data/translit/Kannada_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Kannada_InterIndic.txt b/icuSources/data/translit/Kannada_InterIndic.txt index bc42c7ca..198e955d 100644 --- a/icuSources/data/translit/Kannada_InterIndic.txt +++ b/icuSources/data/translit/Kannada_InterIndic.txt @@ -1,92 +1,92 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Kannada-InterIndic -\u0CC6\u0CD5>\uE047; # VOWEL SIGN EE -\u0CC6\u0CCD\u0CD6>\uE048\ue04d; # VOWEL SIGN AI -\u0CC6\u0CD6>\uE048; # VOWEL SIGN AI -\u0CC6\u0CC2\u0CD5>\uE04B; # VOWEL SIGN OO -\u0CC6\u0CC2>\uE04A; # VOWEL SIGN O -\u0CBF\u0CD5>\uE040; # VOWEL SIGN II - -\u0C82>\uE002; # SIGN ANUSVARA -\u0C83>\uE003; # SIGN VISARGA -\u0C85>\uE005; # LETTER A -\u0C86>\uE006; # LETTER AA -\u0C87>\uE007; # LETTER I -\u0C88>\uE008; # LETTER II -\u0C89>\uE009; # LETTER U -\u0C8A>\uE00A; # LETTER UU -\u0C8B>\uE00B; # LETTER VOCALIC R -\u0C8C>\uE00C; # LETTER VOCALIC L -\u0C8E>\uE00E; # LETTER E -\u0C8F>\uE00F; # LETTER EE -\u0C90>\uE010; # LETTER AI -\u0C92>\uE012; # LETTER O -\u0C93>\uE013; # LETTER OO -\u0C94>\uE014; # LETTER AU -\u0C95>\uE015; # LETTER KA -\u0C96>\uE016; # LETTER KHA -\u0C97>\uE017; # LETTER GA -\u0C98>\uE018; # LETTER GHA -\u0C99>\uE019; # LETTER NGA -\u0C9A>\uE01A; # LETTER CA -\u0C9B>\uE01B; # LETTER CHA -\u0C9C>\uE01C; # LETTER JA -\u0C9D>\uE01D; # LETTER JHA -\u0C9E>\uE01E; # LETTER NYA -\u0C9F>\uE01F; # LETTER TTA -\u0CA0>\uE020; # LETTER TTHA -\u0CA1>\uE021; # LETTER DDA -\u0CA2>\uE022; # LETTER DDHA -\u0CA3>\uE023; # LETTER NNA -\u0CA4>\uE024; # LETTER TA -\u0CA5>\uE025; # LETTER THA -\u0CA6>\uE026; # LETTER DA -\u0CA7>\uE027; # LETTER DHA -\u0CA8>\uE028; # LETTER NA -\u0CAA>\uE02A; # LETTER PA -\u0CAB>\uE02B; # LETTER PHA -\u0CAC>\uE02C; # LETTER BA -\u0CAD>\uE02D; # LETTER BHA -\u0CAE>\uE02E; # LETTER MA -\u0CAF>\uE02F; # LETTER YA -\u0CB0>\uE030; # LETTER RA -\u0CB1>\uE031; # LETTER RRA -\u0CB2>\uE032; # LETTER LA -\u0CB3>\uE033; # LETTER LLA -\u0CB5>\uE035; # LETTER VA -\u0CB6>\uE036; # LETTER SHA -\u0CB7>\uE037; # LETTER SSA -\u0CB8>\uE038; # LETTER SA -\u0CB9>\uE039; # LETTER HA -\u0CBC>\uE03C; # SIGN NUKTA -\u0CBD>\uE03D; # AVAGRAHA -\u0CBE>\uE03E; # VOWEL SIGN AA +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +\u0CC6ೕ>\uE047; # VOWEL SIGN EE +\u0CC6\u0CCDೖ>\uE048\uE04D; # VOWEL SIGN AI +\u0CC6ೖ>\uE048; # VOWEL SIGN AI +\u0CC6ೂೕ>\uE04B; # VOWEL SIGN OO +\u0CC6ೂ>\uE04A; # VOWEL SIGN O +\u0CBFೕ>\uE040; # VOWEL SIGN II +ಂ>\uE002; # SIGN ANUSVARA +ಃ>\uE003; # SIGN VISARGA +ಅ>\uE005; # LETTER A +ಆ>\uE006; # LETTER AA +ಇ>\uE007; # LETTER I +ಈ>\uE008; # LETTER II +ಉ>\uE009; # LETTER U +ಊ>\uE00A; # LETTER UU +ಋ>\uE00B; # LETTER VOCALIC R +ಌ>\uE00C; # LETTER VOCALIC L +ಎ>\uE00E; # LETTER E +ಏ>\uE00F; # LETTER EE +ಐ>\uE010; # LETTER AI +ಒ>\uE012; # LETTER O +ಓ>\uE013; # LETTER OO +ಔ>\uE014; # LETTER AU +ಕ>\uE015; # LETTER KA +ಖ>\uE016; # LETTER KHA +ಗ>\uE017; # LETTER GA +ಘ>\uE018; # LETTER GHA +ಙ>\uE019; # LETTER NGA +ಚ>\uE01A; # LETTER CA +ಛ>\uE01B; # LETTER CHA +ಜ>\uE01C; # LETTER JA +ಝ>\uE01D; # LETTER JHA +ಞ>\uE01E; # LETTER NYA +ಟ>\uE01F; # LETTER TTA +ಠ>\uE020; # LETTER TTHA +ಡ>\uE021; # LETTER DDA +ಢ>\uE022; # LETTER DDHA +ಣ>\uE023; # LETTER NNA +ತ>\uE024; # LETTER TA +ಥ>\uE025; # LETTER THA +ದ>\uE026; # LETTER DA +ಧ>\uE027; # LETTER DHA +ನ>\uE028; # LETTER NA +ಪ>\uE02A; # LETTER PA +ಫ>\uE02B; # LETTER PHA +ಬ>\uE02C; # LETTER BA +ಭ>\uE02D; # LETTER BHA +ಮ>\uE02E; # LETTER MA +ಯ>\uE02F; # LETTER YA +ರ>\uE030; # LETTER RA +ಱ>\uE031; # LETTER RRA +ಲ>\uE032; # LETTER LA +ಳ>\uE033; # LETTER LLA +ವ>\uE035; # LETTER VA +ಶ>\uE036; # LETTER SHA +ಷ>\uE037; # LETTER SSA +ಸ>\uE038; # LETTER SA +ಹ>\uE039; # LETTER HA +\u0CBC>\uE03C; # SIGN NUKTA +ಽ>\uE03D; # AVAGRAHA +ಾ>\uE03E; # VOWEL SIGN AA \u0CBF>\uE03F; # VOWEL SIGN I -\u0CC1>\uE041; # VOWEL SIGN U -\u0CC2>\uE042; # VOWEL SIGN UU -\u0CC3>\uE043; # VOWEL SIGN VOCALIC R -\u0CC4>\uE044; # VOWEL SIGN VOCALIC RR +ು>\uE041; # VOWEL SIGN U +ೂ>\uE042; # VOWEL SIGN UU +ೃ>\uE043; # VOWEL SIGN VOCALIC R +ೄ>\uE044; # VOWEL SIGN VOCALIC RR \u0CC6>\uE046; # VOWEL SIGN E \u0CCC>\uE04C; # VOWEL SIGN AU \u0CCD>\uE04D; # SIGN VIRAMA -\u0CD5>\uE055; # LENGTH MARK -\u0CD6>\uE056; # AI LENGTH MARK -\u0CDE>\uE034; # LETTER LLLA -\u0CE0>\uE060; # LETTER VOCALIC RR -\u0CE1>\uE061; # LETTER VOCALIC LL -\u0CE6>\uE066; # DIGIT ZERO -\u0CE7>\uE067; # DIGIT ONE -\u0CE8>\uE068; # DIGIT TWO -\u0CE9>\uE069; # DIGIT THREE -\u0CEA>\uE06A; # DIGIT FOUR -\u0CEB>\uE06B; # DIGIT FIVE -\u0CEC>\uE06C; # DIGIT SIX -\u0CED>\uE06D; # DIGIT SEVEN -\u0CEE>\uE06E; # DIGIT EIGHT -\u0CEF>\uE06F; # DIGIT NINE - -# eof +ೕ>\uE055; # LENGTH MARK +ೖ>\uE056; # AI LENGTH MARK +ೞ>\uE034; # LETTER LLLA +à³ >\uE060; # LETTER VOCALIC RR +ೡ>\uE061; # LETTER VOCALIC LL +೦>\uE066; # DIGIT ZERO +೧>\uE067; # DIGIT ONE +೨>\uE068; # DIGIT TWO +೩>\uE069; # DIGIT THREE +೪>\uE06A; # DIGIT FOUR +೫>\uE06B; # DIGIT FIVE +೬>\uE06C; # DIGIT SIX +à³­>\uE06D; # DIGIT SEVEN +à³®>\uE06E; # DIGIT EIGHT +೯>\uE06F; # DIGIT NINE diff --git a/icuSources/data/translit/Kannada_Latin.txt b/icuSources/data/translit/Kannada_Latin.txt new file mode 100644 index 00000000..c1400dd2 --- /dev/null +++ b/icuSources/data/translit/Kannada_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBC-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Kannada_Malayalam.txt b/icuSources/data/translit/Kannada_Malayalam.txt new file mode 100644 index 00000000..0d50b3b4 --- /dev/null +++ b/icuSources/data/translit/Kannada_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Kannada_Oriya.txt b/icuSources/data/translit/Kannada_Oriya.txt new file mode 100644 index 00000000..ef997a83 --- /dev/null +++ b/icuSources/data/translit/Kannada_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:16 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Kannada_Tamil.txt b/icuSources/data/translit/Kannada_Tamil.txt new file mode 100644 index 00000000..4eb365ea --- /dev/null +++ b/icuSources/data/translit/Kannada_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Kannada_Telugu.txt b/icuSources/data/translit/Kannada_Telugu.txt new file mode 100644 index 00000000..8adc3030 --- /dev/null +++ b/icuSources/data/translit/Kannada_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Kannada_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::[ಂ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ\u0CBCಽಾ-ೄ\u0CC6-ೈೊ-\u0CCDೕ-ೖೞೠ-ೡ೦-೯]; +::NFD; +::Kannada-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Latin_Armenian.txt b/icuSources/data/translit/Latin_Armenian.txt new file mode 100644 index 00000000..2a48c580 --- /dev/null +++ b/icuSources/data/translit/Latin_Armenian.txt @@ -0,0 +1,91 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Armenian.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::NFD(NFC); +ev <> և ; +tÊ» <> Õ© ; +čʻ <> Õ¹ ; +cÊ» <> ց ; +pÊ» <> փ ; +kÊ» <> ք ; +u <> ու ; +a <> Õ¡ ; +b <> Õ¢ ; +g <> Õ£ ; +d <> Õ¤ ; +e <> Õ¥ ; +z <> Õ¦ ; +ē <> Õ§ ; +ə <> Õ¨ ; +ž <> Õª ; +i <> Õ« ; +l <> Õ¬ ; +x <> Õ­ ; +c <> Õ® ; +k <> Õ¯ ; +h <> Õ° ; +j <> Õ± ; +Ä¡ <> Õ² ; +č <> Õ³ ; +m <> Õ´ ; +y <> Õµ ; +n <> Õ¶ ; +Å¡ <> Õ· ; +o <> Õ¸ ; +p <> Õº ; +Ç° <> Õ» ; +ṙ <> Õ¼ ; +s <> Õ½ ; +v <> Õ¾ ; +t <> Õ¿ ; +r <> ր ; +w <> ւ ; +ō <> օ ; +f <> ֆ ; +U <> ՈՒ ; +EV <> ԵՒ ; +J\u030C <> Ջ ; +PÊ» <> Փ ; +KÊ» <> Ք ; +TÊ» <> Ô¹ ; +Čʻ <> Չ ; +CÊ» <> Ց ; +A <> Ô± ; +B <> Ô² ; +G <> Ô³ ; +D <> Ô´ ; +E <> Ôµ ; +Z <> Ô¶ ; +Ē <> Ô· ; +Ə <> Ô¸ ; +Ž <> Ôº ; +I <> Ô» ; +L <> Ô¼ ; +X <> Ô½ ; +C <> Ô¾ ; +K <> Ô¿ ; +H <> Հ ; +J <> Ձ ; +Ä  <> Ղ ; +Č <> Ճ ; +M <> Մ ; +Y <> Յ ; +N <> Ն ; +Å  <> Շ ; +O <> Ո ; +P <> Պ ; +Ṙ <> Ռ ; +S <> Ս ; +V <> Վ ; +T <> Տ ; +R <> Ր ; +W <> Ւ ; +Ō <> Օ ; +F <> Ֆ ; +::NFC(NFD); diff --git a/icuSources/data/translit/Latin_Bengali.txt b/icuSources/data/translit/Latin_Bengali.txt new file mode 100644 index 00000000..b18255b9 --- /dev/null +++ b/icuSources/data/translit/Latin_Bengali.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Latin_ConjoiningJamo.txt b/icuSources/data/translit/Latin_ConjoiningJamo.txt new file mode 100644 index 00000000..261cfbd9 --- /dev/null +++ b/icuSources/data/translit/Latin_ConjoiningJamo.txt @@ -0,0 +1,251 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_ConjoiningJamo.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +$Gi = ᄀ; +$GGi = ᄁ; +$Ni = ᄂ; +$Di = ᄃ; +$DD = ᄄ; +$R = ᄅ; +$Mi = ᄆ; +$Bi = ᄇ; +$BB = ᄈ; +$Si = ᄉ; +$SSi = ᄊ; +$IEUNG = ᄋ; # null initial, inserted during Latin-Jamo +$Ji = ᄌ; +$JJ = ᄍ; +$Ci = ᄎ; +$Ki = ᄏ; +$Ti = ᄐ; +$Pi = ᄑ; +$Hi = ᄒ; +$A = ᅡ; +$AE = ᅢ; +$YA = ᅣ; +$YAE = ᅤ; +$EO = ᅥ; +$E = ᅦ; +$YEO = ᅧ; +$YE = ᅨ; +$O = ᅩ; +$WA = ᅪ; +$WAE = ᅫ; +$OE = ᅬ; +$YO = ᅭ; +$U = ᅮ; +$WEO = ᅯ; +$WE = ᅰ; +$WI = ᅱ; +$YU = ᅲ; +$EU = ᅳ; # null medial, inserted during Latin-Jamo +$YI = ᅴ; +$I = ᅵ; +$Gf = ᆨ; +$GGf = ᆩ; +$GS = ᆪ; +$Nf = ᆫ; +$NJ = ᆬ; +$NH = ᆭ; +$Df = ᆮ; +$L = ᆯ; +$LG = ᆰ; +$LM = ᆱ; +$LB = ᆲ; +$LS = ᆳ; +$LT = ᆴ; +$LP = ᆵ; +$LH = ᆶ; +$Mf = ᆷ; +$Bf = ᆸ; +$BS = ᆹ; +$Sf = ᆺ; +$SSf = ᆻ; +$NG = ᆼ; +$Jf = ᆽ; +$Cf = ᆾ; +$Kf = ᆿ; +$Tf = ᇀ; +$Pf = ᇁ; +$Hf = ᇂ; +$jamoInitial = [ᄀ-ᄒ]; +$jamoMedial = [ᅡ-ᅵ]; +$latinInitial = [bcdghjkmnprst]; +$latinMedial = [aeiouwy]; +$latinMedialEnd = [aeiou]; +$sep = \'; +$sep $sep <> $sep; +$sep < $latinMedialEnd g {} $GGi; +$sep < $latinMedialEnd s {} $SSi; +$sep < [^$latinMedial] [y w] e {} [$O $OE]; +$sep < [^$latinMedial] e {} [$O $OE $U]; +$sep < [^$latinMedial] [o a] {} [$E $EO $EU]; +$sep < [^$latinMedial] [w y] a {} [$E $EO $EU]; +$sep < [^$latinMedial] [y w] e {} $IEUNG [$O $OE]; +$sep < [^$latinMedial] e {} $IEUNG [$O $OE $U]; +$sep < [^$latinMedial] [o a] {} $IEUNG [$E $EO $EU]; +$sep < [^$latinMedial] [w y] a {} $IEUNG [$E $EO $EU]; +$sep < $latinMedialEnd b {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd c {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd d {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd g {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd h {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd j {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd k {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd m {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd n {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd p {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd s {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd t {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd b s {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd g g {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd g s {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l b {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l g {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l h {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l m {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l p {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l s {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd l t {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd n g {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd n h {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd n j {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd s s {} $IEUNG $jamoMedial; +$sep < $latinMedialEnd b {} $Bi $jamoMedial; +$sep < $latinMedialEnd d {} $Di $jamoMedial; +$sep < $latinMedialEnd j {} $Ji $jamoMedial; +$sep < $latinMedialEnd g {} $Gi $jamoMedial; +$sep < $latinMedialEnd s {} $Si $jamoMedial; +$sep < $latinMedialEnd b s {} [$Si $SSi]; +$sep < $latinMedialEnd g s {} [$Si $SSi]; +$sep < $latinMedialEnd l b {} [$Bi $BB]; +$sep < $latinMedialEnd l g {} [$Gi $GGi]; +$sep < $latinMedialEnd l s {} [$Si $SSi]; +$sep < $latinMedialEnd n g {} [$Gi $GGi]; +$sep < $latinMedialEnd n j {} [$Ji $JJ]; +$jamoMedial {b s} $latinMedial > $Bf $Si; +$jamoMedial {g s} $latinMedial > $Gf $Si; +$jamoMedial {l b} $latinMedial > $L $Bi; +$jamoMedial {l g} $latinMedial > $L $Gi; +$jamoMedial {l h} $latinMedial > $L $Hi; +$jamoMedial {l m} $latinMedial > $L $Mi; +$jamoMedial {l p} $latinMedial > $L $Pi; +$jamoMedial {l s} $latinMedial > $L $Si; +$jamoMedial {l t} $latinMedial > $L $Ti; +$jamoMedial {n g} $latinMedial > $Nf $Gi; +$jamoMedial {n h} $latinMedial > $Nf $Hi; +$jamoMedial {n j} $latinMedial > $Nf $Ji; +$jamoMedial {b} $latinMedial > $Bi; +$jamoMedial {c} $latinMedial > $Ci; +$jamoMedial {d} $latinMedial > $Di; +$jamoMedial {g} $latinMedial > $Gi; +$jamoMedial {h} $latinMedial > $Hi; +$jamoMedial {j} $latinMedial > $Ji; +$jamoMedial {k} $latinMedial > $Ki; +$jamoMedial {m} $latinMedial > $Mi; +$jamoMedial {n} $latinMedial > $Ni; +$jamoMedial {p} $latinMedial > $Pi; +$jamoMedial {s} $latinMedial > $Si; +$jamoMedial {t} $latinMedial > $Ti; +$jamoMedial {b b} $latinMedial > $BB; +$jamoMedial {d d} $latinMedial > $DD; +$jamoMedial {j j} $latinMedial > $JJ; +$jamoMedial {g g} $latinMedial > $GGi; +$jamoMedial {s s} $latinMedial > $SSi; +$jamoMedial {b} s s > $Bf; +$jamoMedial {g} s s > $Gf; +$jamoMedial {l} b b > $L; +$jamoMedial {l} g g > $L; +$jamoMedial {l} s s > $L; +$jamoMedial {n} g g > $Nf; +$jamoMedial {n} j j > $Nf; +$jamoMedial {bs} <> $BS; +$jamoMedial {b} <> $Bf; +$jamoMedial {c} <> $Cf; +$jamoMedial {d} <> $Df; +$jamoMedial {gg} <> $GGf; +$jamoMedial {gs} <> $GS; +$jamoMedial {g} <> $Gf; +$jamoMedial {h} <> $Hf; +$jamoMedial {j} <> $Jf; +$jamoMedial {k} <> $Kf; +$jamoMedial {lb} <> $LB; $jamoMedial {lg} <> $LG; +$jamoMedial {lh} <> $LH; +$jamoMedial {lm} <> $LM; +$jamoMedial {lp} <> $LP; +$jamoMedial {ls} <> $LS; +$jamoMedial {lt} <> $LT; +$jamoMedial {l} <> $L; +$jamoMedial {m} <> $Mf; +$jamoMedial {ng} <> $NG; +$jamoMedial {nh} <> $NH; +$jamoMedial {nj} <> $NJ; +$jamoMedial {n} <> $Nf; +$jamoMedial {p} <> $Pf; +$jamoMedial {ss} <> $SSf; +$jamoMedial {s} <> $Sf; +$jamoMedial {t} <> $Tf; +{gg} $latinMedial <> $GGi; +{g} $latinMedial <> $Gi; +{n} $latinMedial <> $Ni; +{dd} $latinMedial <> $DD; +{d} $latinMedial <> $Di; +{r} $latinMedial <> $R; +{m} $latinMedial <> $Mi; +{bb} $latinMedial <> $BB; +{b} $latinMedial <> $Bi; +{ss} $latinMedial <> $SSi; +{s} $latinMedial <> $Si; +{jj} $latinMedial <> $JJ; +{j} $latinMedial <> $Ji; +{c} $latinMedial <> $Ci; +{k} $latinMedial <> $Ki; +{t} $latinMedial <> $Ti; +{p} $latinMedial <> $Pi; +{h} $latinMedial <> $Hi; +$jamoMedial {r} $latinInitial > | l; +$jamoInitial {} [bcdghjklmnpst] > $EU; +gg > $GGi $EU; +dd > $DD $EU; +bb > $BB $EU; +ss > $SSi $EU; +jj > $JJ $EU; +([bcdghjkmnprst]) > | $1 eu; +l > | r; +$jamoInitial {ae} <> $AE; +$jamoInitial {a} <> $A; +$jamoInitial {eo} <> $EO; +$jamoInitial {eu} <> $EU; +$jamoInitial {e} <> $E; +$jamoInitial {i} <> $I; +$jamoInitial {oe} <> $OE; +$jamoInitial {o} <> $O; +$jamoInitial {u} <> $U; +$jamoInitial {wae} <> $WAE; +$jamoInitial {wa} <> $WA; +$jamoInitial {weo} <> $WEO; +$jamoInitial {we} <> $WE; +$jamoInitial {wi} <> $WI; +$jamoInitial {yae} <> $YAE; +$jamoInitial {ya} <> $YA; +$jamoInitial {yeo} <> $YEO; +$jamoInitial {ye} <> $YE; +$jamoInitial {yi} <> $YI; +$jamoInitial {yo} <> $YO; +$jamoInitial {yu} <> $YU; +$jamoInitial {w} > | wi; +$jamoInitial {y} > | yu; +($latinMedial) > $IEUNG | $1; +f > | p; +q > | k; +v > | b; +x > | ks; +z > | s; +$sep > ; +< $IEUNG; diff --git a/icuSources/data/translit/Latin_Devanagari.txt b/icuSources/data/translit/Latin_Devanagari.txt new file mode 100644 index 00000000..2dce28f8 --- /dev/null +++ b/icuSources/data/translit/Latin_Devanagari.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Latin_Ethiopic.txt b/icuSources/data/translit/Latin_Ethiopic.txt new file mode 100644 index 00000000..5a7cf4a6 --- /dev/null +++ b/icuSources/data/translit/Latin_Ethiopic.txt @@ -0,0 +1,353 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Ethiopic.txt +# Generated from CLDR: Thu Jul 20 14:57:48 PDT 2006 +# +ha<>ሀ; +ha < ሃ; +he<>ሄ; +hi<>ሂ; +hÄ«<>ህ; +hu<>?; +ho<>ሆ; +hha<>?; +hha < ሓ; +hhe<>ሔ; +hhi<>ሒ; +hhÄ«<>ሕ; +hhu<>ሑ; +hho<>ሖ; +hhwa<>ሗ; +Ê¿a<>ኣ; +ʿē<>አ; +Ê¿e<>ኤ; +Ê¿i<>ኢ; +Ê¿Ä«<>እ; +Ê¿u<>ኡ; +Ê¿o<>ኦ; +Ê¿wa<>ኧ; +ʾa<>ዓ; +ʾē<>?; +ʾe<>ዔ; +ʾi<>ዒ; +ʾī<>ዕ; +ʾu<>ዑ; +ʾo<>ዖ; +qha<>ቓ; +qhē<>?; +qhe<>ቔ; +qhi<>ቒ; +qhÄ«<>ቕ; +qhu<>ቑ; +qho<>ቖ; +qhwa<>ቛ; +qhwē<>ቘ; +qhwe<>ቜ; +qhwi<>ቚ; +qhwÄ«<>?; +q a<>ቃ; +qē<>ቀ; +qe<>ቄ; +qi<>ቂ; +qÄ«<>ቅ; +qu<>?; +qo<>ቆ; +qwa<>ቋ; +qwē<>ቈ; +qwe<>ቌ; +qwi<>ቊ; +qwÄ«<>?; +ka<>ካ; +kē<>ከ; +ke<>ኬ; +ki<>ኪ; +kÄ«<>ክ; +ku<>ኩ; +kwa<>ኳ; +kwē<>ኮ; +kwe<>ኴ; +kwi<>ኰ; +kwÄ«<>ኵ; +kxa<>ኻ; +kxē<>ኸ; +kxe<>ኼ; +kxi<>ኺ; +kxÄ«<>ኽ; +kxu<>ኹ; +kxo<>ኾ; +kxwa<>ዃ; +kxwē<>ዀ; +kxwe<>ዄ; +kxwi<>ዂ; +kxwÄ«<>ዅ; +xa<>ኃ; +xē<>ኀ; +xe<>ኄ; +xi<>ኂ; +xÄ«<>ኅ; +xu<>?; +xo<>ኆ; +xwa<>ኋ; +xwē<>ኈ; +xwe<>ኌ; +xwi<>ኊ; +xwÄ«<>?; +gga<>ጛ; +ggē<>ጘ; +gge<>ጜ; +ggi<>ጚ; +ggÄ«<>?; +ggu<>ጙ; +ggo<>ጞ; +ga<>ጋ; +gē<>ገ; +ge<>ጌ; +gi<>ጊ; +gÄ«<>?; +gu<>ጉ; +go<>ጎ; +gwa<>ጓ; +gwē<>?; +gwe<>ጔ; +gwi<>ጒ; +gwÄ«<>ጕ; +ca<>ቻ; +cē<>ቸ; +ce<>ቼ; +ci<>ቺ; +cÄ«<>ች; +cu<>ቹ; +co<>ቾ; +cwa<>ቿ; +cha<>ጫ; +chē<>ጨ; +che<>ጬ; +chi<>ጪ; +chÄ«<>ጭ; +chu<>ጩ; +cho<>ጮ; +chwa<>ጯ; +ja<>ጃ; +jē<>ጀ; +je<>ጄ; +ji<>ጂ; +jÄ«<>ጅ; +ju<>?; +jo<>ጆ; +jwa<>ጇ; +za<>ዛ; +zē<>ዘ; +ze<>ዜ; +zi<>ዚ; +zÄ«<>?; +zu<>ዙ; +zo<>ዞ; +zwa<>ዟ; +zha<>ዣ; +zhē<>ዠ; +zhe<>ዤ; +zhi<>ዢ; +zhÄ«<>ዥ; +zhu<>ዡ; +zho<>ዦ; +zhwa<>ዧ; +sa<>ሳ; +sē<>ሰ; +se<>ሴ; +si<>ሲ; +sÄ«<>ስ; +su<>ሱ; +so<>ሶ; +swa<>ሷ; +sha<>ሻ; +shē<>ሸ; +she<>ሼ; +shi<>ሺ; +shÄ«<>ሽ; +shu<>ሹ; +sho<>ሾ; +shwa<>ሿ; +sza<>ሣ; +szē<>ሠ; +sze<>ሤ; +szi<>ሢ; +szÄ«<>ሥ; +szu<>ሡ; +szo<>ሦ; +szwa<>ሧ; +tsa<>ጻ; +tsē<>ጸ; +tse<>ጼ; +tsi<>ጺ; +tsÄ«<>ጽ; +tsu<>ጹ; +tso<>ጾ; +tswa<>ጿ; +tza<>?; +tzē<>?; +tze<>?; +tzi<>?; +tzÄ«<>?; +tzu<>??; +tzo<>?; +tha<>ጣ; +thē<>ጠ; +the<>ጤ; +thi<>ጢ; +thÄ«<>ጥ; +thu<>ጡ; +tho<>ጦ; +thwa<>ጧ; +ta<>ታ; +tē<>ተ; +te<>ቴ; +ti<>ቲ; +tÄ«<>ት; +tu<>ቱ; +to<>ቶ; +twa<>ቷ; +dda<>ዻ; +ddē<>ዸ; +dde<>ዼ; +ddi<>ዺ; +ddÄ«<>ዽ; +ddu<>ዹ; +ddo<>ዾ; +ddwa<>ዿ; +da<>ዳ; +dē<>ደ; +de<>ዴ; +di<>ዲ; +dÄ«<>ድ; +du<>ዱ; +do<>ዶ; +dwa<>ዷ; +na<>ና; +nē<>?; +ne<>ኔ; +ni<>ኒ; +nÄ«<>ን; +nu<>ኑ; +no<>ኖ; +nwa<>ኗ; +nya<>ኛ; +nyē<>ኘ; +nye<>ኜ; +nyi<>ኚ; +nyÄ«<>?; +nyu<>ኙ; +nyo<>ኞ; +nywa<>ኟ; +ya<>ያ; +yē<>የ; +ye<>ዬ; +yi<>ዪ; +yÄ«<>ይ; +yu<>ዩ; +yo<>ዮ; +ra<>ራ; +rē<>ረ; +re<>ሬ; +ri<>ሪ; +rÄ«<>ር; +ru<>ሩ; +ro<>ሮ; +rwa<>ሯ; +rya<>?; +la<>ላ; +lē<>ለ; +le<>ሌ; +li<>ሊ; +lÄ«<>?; +lu<>ሉ; +lo<>ሎ; +lwa<>?; +ma<>ማ; +mē<>መ; +me<>ሜ; +mi<>ሚ; +mÄ«<>?; +mu<>ሙ; +mo<>ሞ; +mwa<>ሟ; +mya<>?; +ba<>ባ; +bē<>በ; +be<>ቤ; +bi<>ቢ; +bÄ«<>ብ; +bu<>ቡ; +bo<>ቦ; +bwa<>ቧ; +pa<>?; +pē<>??; +pe<>?; +pi<>?; +pÄ«<>?; +pu<>?; +po<>?; +pwa<>?; +pha<>ጳ; +phē<>ጰ; +phe<>ጴ; +phi<>ጲ; +phÄ«<>ጵ; +phu<>ጱ; +pho<>ጶ; +phwa<>ጷ; +fa<>?; +fē<>?; +fe<>?; +fi<>?; +fÄ«<>??; +fu<>?; +fo<>?; +fwa<>??; +fya<>?; +va<>ቫ; +vē<>ቨ; +ve<>ቬ; +vi<>ቪ; +vÄ«<>ቭ; +vu<>ቩ; +vo<>ቮ; +vwa<>ቯ; +wa<>ዋ; +wē<>ወ; +we<>ዌ; +wi<>ዊ; +wÄ«<>?; +wu<>ዉ; +wo<>ዎ; +'.'<>?; +','<>?; +';'<>?; +':'<>?; +':-' < ?; +'?'<>?; +'¶'<>?; +1<>?; +2<>?; +3<>?; +4<>?; +5<>?; +6<>?; +7<>?; +8<>?; +9<>?; +⑩<>?; +⑳<>?; +(30)<>?; +(40)<>?; +(50)<>?; +(60)<>?; +(70)<>?; +(80)<>?; +(90)<>?; +(100)<>?; +(10000)<>?; +' ' <> ? ; diff --git a/icuSources/data/translit/Latin_Gujarati.txt b/icuSources/data/translit/Latin_Gujarati.txt new file mode 100644 index 00000000..9cede039 --- /dev/null +++ b/icuSources/data/translit/Latin_Gujarati.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Latin_Gurmukhi.txt b/icuSources/data/translit/Latin_Gurmukhi.txt new file mode 100644 index 00000000..472b477d --- /dev/null +++ b/icuSources/data/translit/Latin_Gurmukhi.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Latin_Hangul.txt b/icuSources/data/translit/Latin_Hangul.txt new file mode 100644 index 00000000..2f0c81a1 --- /dev/null +++ b/icuSources/data/translit/Latin_Hangul.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Hangul.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::['A-Za-zÀ-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǡǦ-Ç­Ç°Ç´-ǵǸ-ǻȀ-țȞ-ȟȦ-ȳḀ-ẙẠ-ỹK-Å]; +::NFD; +::Lower; +::Latin-ConjoiningJamo; +::NFC; diff --git a/icuSources/data/translit/Latin_InterIndic.txt b/icuSources/data/translit/Latin_InterIndic.txt index d8bfbdd9..340cafe9 100644 --- a/icuSources/data/translit/Latin_InterIndic.txt +++ b/icuSources/data/translit/Latin_InterIndic.txt @@ -1,383 +1,342 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Latin-InterIndic - #:: NFD; - #\u0e00 reserved - #consonants - $chandrabindu=\ue001; - $anusvara=\ue002; - $visarga=\ue003; - #\u0e004 reserved - # w represents the stand-alone form - $wa=\ue005; - $waa=\ue006; - $wi=\ue007; - $wii=\ue008; - $wu=\ue009; - $wuu=\ue00a; - $wr=\ue00b; - $wl=\ue00c; - $wce=\ue00d; # LETTER CANDRA E - $wse=\ue00e; # LETTER SHORT E - $we=\ue00f; # \u090f LETTER E - $wai=\ue010; - $wco=\ue011; # LETTER CANDRA O - $wso=\ue012; # LETTER SHORT O - $wo=\ue013; # \u0913 LETTER O - $wau=\ue014; - $ka=\ue015; - $kha=\ue016; - $ga=\ue017; - $gha=\ue018; - $nga=\ue019; - $ca=\ue01a; - $cha=\ue01b; - $ja=\ue01c; - $jha=\ue01d; - $nya=\ue01e; - $tta=\ue01f; - $ttha=\ue020; - $dda=\ue021; - $ddha=\ue022; - $nna=\ue023; - $ta=\ue024; - $tha=\ue025; - $da=\ue026; - $dha=\ue027; - $na=\ue028; - $ena=\ue029; #compatibility - $pa=\ue02a; - $pha=\ue02b; - $ba=\ue02c; - $bha=\ue02d; - $ma=\ue02e; - $ya=\ue02f; - $ra=\ue030; - $rra=\ue031; - $la=\ue032; - $lla=\ue033; - $ela=\ue034; #compatibility - $va=\ue035; - $vva=\ue081; - $sha=\ue036; - $ssa=\ue037; - $sa=\ue038; - $ha=\ue039; -#\u093a Reserved -#\u093b Reserved - $nukta=\ue03c; - $avagraha=\ue03d; # SIGN AVAGRAHA - # represents the dependent form - $aa=\ue03e; - $i=\ue03f; - $ii=\ue040; - $u=\ue041; - $uu=\ue042; - $rh=\ue043; - $lh=\ue044; - $ce=\ue045; #VOWEL SIGN CANDRA E - $se=\ue046; #VOWEL SIGN SHORT E - $e=\ue047; - $ai=\ue048; - $co=\ue049; # VOWEL SIGN CANDRA O - $so=\ue04a; # VOWEL SIGN SHORT O - $o=\ue04b; # \u094b - $au=\ue04c; - $virama=\ue04d; -# \u094e Reserved -# \u094f Reserved - $om = \ue050; # OM -# \u0951>; # UNMAPPED STRESS SIGN UDATTA -# \u0952>; # UNMAPPED STRESS SIGN ANUDATTA -# \u0953>; # UNMAPPED GRAVE ACCENT -# \u0954>; # UNMAPPED ACUTE ACCENT - $lm = \ue055;# Telugu Length Mark - $ailm=\ue056;# AI Length Mark - $aulm=\ue057;# AU Length Mark - #urdu compatibity forms - $uka=\ue058; - $ukha=\ue059; - $ugha=\ue05a; - $ujha=\ue05b; - $uddha=\ue05c; - $udha=\ue05d; - $ufa=\ue05e; - $uya=\ue05f; - $wrr=\ue060; - $wll=\ue061; - $rrh=\ue062; - $llh=\ue063; - $danda=\ue064; - $doubleDanda=\ue065; - $zero=\ue066; # DIGIT ZERO - $one=\ue067; # DIGIT ONE - $two=\ue068; # DIGIT TWO - $three=\ue069; # DIGIT THREE - $four=\ue06a; # DIGIT FOUR - $five=\ue06b; # DIGIT FIVE - $six=\ue06c; # DIGIT SIX - $seven=\ue06d; # DIGIT SEVEN - $eight=\ue06e; # DIGIT EIGHT - $nine=\ue06f; # DIGIT NINE - # For all other scripts - $ecp0=\ue070; - $ecp1=\ue071; - $ecp2=\ue072; - $ecp3=\ue073; - $ecp4=\ue074; - $ecp5=\ue075; - $ecp6=\ue076; - $ecp7=\ue077; - $ecp8=\ue078; - $ecp9=\ue079; - $ecpA=\ue07a; - $ecpB=\ue07b; - $ecpC=\ue07c; - $ecpD=\ue07d; - $ecpE=\ue07e; - $ecpF=\ue07f; -# \u0970>; # UNMAPPED ABBREVIATION SIGN - $depVowelAbove=[\ue03e-\ue040\ue045-\ue04c]; - $depVowelBelow=[\ue041-\ue044]; - $endThing=[$danda$doubleDanda]; - # $x was originally called '&'; $z was '%' - $x=[$virama$aa$ai$au$ii$i$uu$u$rrh$rh$lh$e$o$se$ce$so$co]; - $z=[bcdfghjklmnpqrstvwxyz]; - $consonants=[[$ka-$ha]$z[\u0915-\u0939][\u0995-\u09b9][\u0a15-\u0a39][\u0a95-\u0ab9][\u0b15-\u0b39][\u0b95-\u0bb9][\u0c15-\u0c39][\u0c95-\u0cb9][\u0d15-\u0d39]]; - \u0315 > $avagraha; - \u0303>$chandrabindu$anusvara; - m\u0310>$chandrabindu; - h\u0323>$visarga; - x>$ka$virama$sa; -# convert to independent forms at start of word or syllable: -# dependent forms for roundtrip - \u0314a\u0304>$aa; - \u0314ai>$ai; - \u0314au>$au; - \u0314ii>$ii; - \u0314i\u0304>$ii; - \u0314i>$i; - \u0314u\u0304>$uu; - \u0314u>$u; - \u0314r\u0325\u0304>$rrh; - \u0314r\u0325>$rh; - \u0314l\u0325\u0304>$llh; - \u0314lh>$lh; - \u0314l\u0325>$lh; - \u0314e\u0304>$e; - \u0314o\u0304>$o; - \u0314a>; - \u0314e\u0306>$ce; - \u0314o\u0306>$co; - \u0314e>$se; - \u0314o>$so; - -# preceeded by consonants - $consonants{ a\u0304>$aa; - $consonants{ ai>$ai; - $consonants{ au>$au; - $consonants{ ii>$ii; - $consonants{ i\u0304>$ii; - $consonants{ i>$i; - $consonants{ u\u0304>$uu; - $consonants{ u>$u; - $consonants{ r\u0325\u0304>$rrh; - $consonants{ r\u0325a>$rh; - $consonants{ r\u0325>$rh; - $consonants{ l\u0325\u0304>$llh; - $consonants{ lh>$lh; - $consonants{ l\u0325>$lh; - $consonants{ e\u0304>$e; - $consonants{ o\u0304>$o; - $consonants{ e\u0306>$ce; - $consonants{ o\u0306>$co; - $consonants{ e>$se; - $consonants{ o>$so; - -# e.g. keai -> {ka}{e}{wai}; k'ai -> {ka}{wai}; (ai) -> ({wai}) - a\u0304>$waa; - ai>$wai; - au>$wau; - i\u0304>$wii; - i>$wi; - u\u0304>$wuu; - u>$wu; - r\u0325\u0304>$wrr; - r\u0325>$wr; - l\u0325\u0304>$wll; - lh>$wl; - l\u0325>$wl; - e\u0304>$we; - o\u0304>$wo; - a>$wa; - e\u0306>$wce; - o\u0306>$wco; - e>$wse; - ''om>$om; - o>$wso; - - # rules for anusvara - n}r\u0325 > $na|$virama; - n}l\u0325 > $na|$virama; - n}na > $na|$virama; - n\u0307}[kg] > $anusvara; - n\u0307}n\u0307 > $anusvara; - n\u0304}[cj] > $anusvara; - n\u0304}n\u0303 > $anusvara; - n\u0323}[tdn]\u0323 > $anusvara; - n}[tdn] > $anusvara; - m}[pbm] > $anusvara; - n}[ylvshr] > $anusvara; - m\u0307 > $anusvara; - - #urdu compatibility - q>$uka|$virama; - k\u0331h\u0331>$ukha |$virama; - g\u0307> $ugha | $virama; - z > $ujha |$virama; - f > $ufa|$virama; - - # dev - y\u0307>$uya|$virama; - l\u0331>$ela|$virama; - n\u0331>$ena|$virama; - n\u0307>$nga|$virama; - n\u0303>$nya|$virama; - n\u0323>$nna|$virama; - t\u0323h>$ttha|$virama; - t\u0323>$tta|$virama; - r\u0323h>$udha|$virama; - r\u0323>$uddha|$virama; - d\u0323h>$ddha|$virama; - d\u0323>$dda|$virama; - kh>$kha|$virama; - k>$ka|$virama; - gh>$gha|$virama; - g>$ga|$virama; - ch>$cha|$virama; - c>$ca|$virama; - jh>$jha|$virama; - j>$ja|$virama; - ny>$nya|$virama; - tth>$ttha|$virama; - ddh>$ddha|$virama; - th>$tha|$virama; - t>$ta|$virama; - dh>$dha|$virama; - d>$da|$virama; - n>$na|$virama; - ph>$pha|$virama; - p>$pa|$virama; - bh>$bha|$virama; - b>$ba|$virama; - m>$ma|$virama; - y>$ya|$virama; - r\u0331>$rra|$virama; - r>$ra|$virama; - l\u0323>$lla|$virama; - l>$la|$virama; - v>$va|$virama; - w\u0307>$vva|$virama; - w>$va|$virama; - sh>$sha|$virama; - ss>$ssa|$virama; - s\u0323>$ssa|$virama; - s\u0301>$sha|$virama; - s>$sa|$virama; - h>$ha|$virama; - '.'>$danda; - $danda'.'>$doubleDanda; - $depVowelAbove{'~'>$anusvara; - $depVowelBelow{'~'>$chandrabindu; -# convert to dependent forms after consonant with no vowel: -# e.g. kai -> {ka}{virama}ai -> {ka}{ai} - #$virama aa>$aa; - $virama a\u0304>$aa; - $virama ai>$ai; - $virama au>$au; - $virama ii>$ii; - $virama i\u0304>$ii; - $virama i>$i; - #$virama uu>$uu; - $virama u\u0304>$uu; - $virama u>$u; - #$virama rrh>$rrh; - $virama r\u0325\u0304>$rrh; - #$virama rh>$rh; - $virama r\u0325a>$rh; - $virama r\u0325>$rh; - $virama l\u0325\u0304>$llh; - $virama lh>$lh; - $virama l\u0325>$lh; - $virama e\u0304>$e; - $virama o\u0304>$o; - $virama a>; - $virama e\u0306>$ce; - $virama o\u0306>$co; - $virama e>$se; - $virama o>$so; - - -# otherwise convert independent forms when separated by ': k'ai -> {ka}{virama}{wai} - #$virama''aa>$waa; - $virama''a\u0304>$waa; - $virama''ai>$wai; - $virama''au>$wau; - #$virama''ii>$wii; - $virama''i\u0304>$wii; - $virama''i>$wi; - #$virama''uu>$wuu; - $virama''u\u0304>$wuu; - $virama''u>$wu; - #$virama''rrh>$wrr; - $virama''r\u0325\u0304>$wrr; - #$virama''rh>$wr; - $virama''r\u0325>$wr; - $virama''l\u0325\u0304>$wll; - #$virama''lh>$wl; - $virama''l\u0325>$wl; - $virama''e\u0304>$we; - $virama''o\u0304>$wo; - $virama''a>$wa; - $virama''e\u0306>$wce; - $virama''o\u0306>$wco; - $virama''e>$wse; - $virama''o>$wso; -# no virama - ''a\u0304>$waa; - ''ai>$wai; - ''au>$wau; - ''i\u0304>$wii; - ''i>$wi; - ''u\u0304>$wuu; - ''u>$wu; - ''r\u0325\u0304>$wrr; - ''r\u0325>$wr; - ''l\u0325\u0304>$wll; - ''l\u0325>$wl; - ''e\u0304>$we; - ''o\u0304>$wo; - ''a>$wa; - ''e\u0306>$wce; - ''o\u0306>$wco; - ''e>$wse; - ''o>$wso; - - $virama } [$z] > $virama; - $virama } ' ' > $virama ; - $virama}$endThing>; - 0>$zero; - 1>$one; - 2>$two; - 3>$three; - 4>$four; - 5>$five; - 6>$six; - 7>$seven; - 8>$eight; - 9>$nine; - ''>; - #:: NFC (NFD) ; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +$chandrabindu=\uE001; +$anusvara=\uE002; +$visarga=\uE003; +$wa=\uE005; +$waa=\uE006; +$wi=\uE007; +$wii=\uE008; +$wu=\uE009; +$wuu=\uE00A; +$wr=\uE00B; +$wl=\uE00C; +$wce=\uE00D; # LETTER CANDRA E +$wse=\uE00E; # LETTER SHORT E +$we=\uE00F; # ए LETTER E +$wai=\uE010; +$wco=\uE011; # LETTER CANDRA O +$wso=\uE012; # LETTER SHORT O +$wo=\uE013; # ओ LETTER O +$wau=\uE014; +$ka=\uE015; +$kha=\uE016; +$ga=\uE017; +$gha=\uE018; +$nga=\uE019; +$ca=\uE01A; +$cha=\uE01B; +$ja=\uE01C; +$jha=\uE01D; +$nya=\uE01E; +$tta=\uE01F; +$ttha=\uE020; +$dda=\uE021; +$ddha=\uE022; +$nna=\uE023; +$ta=\uE024; +$tha=\uE025; +$da=\uE026; +$dha=\uE027; +$na=\uE028; +$ena=\uE029; #compatibility +$pa=\uE02A; +$pha=\uE02B; +$ba=\uE02C; +$bha=\uE02D; +$ma=\uE02E; +$ya=\uE02F; +$ra=\uE030; +$rra=\uE031; +$la=\uE032; +$lla=\uE033; +$ela=\uE034; #compatibility +$va=\uE035; +$vva=\uE081; +$sha=\uE036; +$ssa=\uE037; +$sa=\uE038; +$ha=\uE039; +$nukta=\uE03C; +$avagraha=\uE03D; # SIGN AVAGRAHA +$aa=\uE03E; +$i=\uE03F; +$ii=\uE040; +$u=\uE041; +$uu=\uE042; +$rh=\uE043; +$lh=\uE044; +$ce=\uE045; #VOWEL SIGN CANDRA E +$se=\uE046; #VOWEL SIGN SHORT E +$e=\uE047; +$ai=\uE048; +$co=\uE049; # VOWEL SIGN CANDRA O +$so=\uE04A; # VOWEL SIGN SHORT O +$o=\uE04B; # ो +$au=\uE04C; +$virama=\uE04D; +$om = \uE050; # OM +$lm = \uE055;# Telugu Length Mark +$ailm=\uE056;# AI Length Mark +$aulm=\uE057;# AU Length Mark +$uka=\uE058; +$ukha=\uE059; +$ugha=\uE05A; +$ujha=\uE05B; +$uddha=\uE05C; +$udha=\uE05D; +$ufa=\uE05E; +$uya=\uE05F; +$wrr=\uE060; +$wll=\uE061; +$rrh=\uE062; +$llh=\uE063; +$danda=\uE064; +$doubleDanda=\uE065; +$zero=\uE066; # DIGIT ZERO +$one=\uE067; # DIGIT ONE +$two=\uE068; # DIGIT TWO +$three=\uE069; # DIGIT THREE +$four=\uE06A; # DIGIT FOUR +$five=\uE06B; # DIGIT FIVE +$six=\uE06C; # DIGIT SIX +$seven=\uE06D; # DIGIT SEVEN +$eight=\uE06E; # DIGIT EIGHT +$nine=\uE06F; # DIGIT NINE +$dgs=\uE082; +$ecp0=\uE070; +$ecp1=\uE071; +$ecp2=\uE072; +$ecp3=\uE073; +$ecp4=\uE074; +$ecp5=\uE075; +$ecp6=\uE076; +$ecp7=\uE077; +$ecp8=\uE078; +$ecp9=\uE079; +$ecpA=\uE07A; +$ecpB=\uE07B; +$ecpC=\uE07C; +$ecpD=\uE07D; +$ecpE=\uE07E; +$ecpF=\uE07F; +$kta=\uE083; +$depVowelAbove=[\uE03E-\uE040\uE045-\uE04C]; +$depVowelBelow=[\uE041-\uE044]; +$endThing=[$danda$doubleDanda]; +$x=[$virama$aa$ai$au$ii$i$uu$u$rrh$rh$lh$e$o$se$ce$so$co]; +$z=[bcdfghjklmnpqrstvwxyz]; +$consonants=[[$ka-$ha]$z[क-ह][ক-হ][ਕ-ਹ][ક-હ][କ-ହ][க-ஹ][క-à°¹][ಕ-ಹ][ക-à´¹]]; +\u0315 > $avagraha; +\u0303>$chandrabindu$anusvara; +m\u0310>$chandrabindu; +h\u0323>$visarga; +x>$ka$virama$sa; +\u0314a\u0304>$aa; +\u0314ai>$ai; +\u0314au>$au; +\u0314ii>$ii; +\u0314i\u0304>$ii; +\u0314i>$i; +\u0314u\u0304>$uu; +\u0314u>$u; +\u0314r\u0325\u0304>$rrh; +\u0314r\u0325>$rh; +\u0314l\u0325\u0304>$llh; +\u0314lh>$lh; +\u0314l\u0325>$lh; +\u0314e\u0304>$e; +\u0314o\u0304>$o; +\u0314a>; +\u0314e\u0306>$ce; +\u0314o\u0306>$co; +\u0314e>$se; +\u0314o>$so; +$consonants{ a\u0304>$aa; +$consonants{ ai>$ai; +$consonants{ au>$au; +$consonants{ ii>$ii; +$consonants{ i\u0304>$ii; +$consonants{ i>$i; +$consonants{ u\u0304>$uu; +$consonants{ u>$u; +$consonants{ r\u0325\u0304>$rrh; +$consonants{ r\u0325a>$rh; +$consonants{ r\u0325>$rh; +$consonants{ l\u0325\u0304>$llh; +$consonants{ lh>$lh; +$consonants{ l\u0325>$lh; +$consonants{ e\u0304>$e; +$consonants{ o\u0304>$o; +$consonants{ e\u0306>$ce; +$consonants{ o\u0306>$co; +$consonants{ e>$se; +$consonants{ o>$so; +a\u0304>$waa; +ai>$wai; +au>$wau; +i\u0304>$wii; +i>$wi; +u\u0304>$wuu; +u>$wu; +r\u0325\u0304>$wrr; +r\u0325>$wr; +l\u0325\u0304>$wll; +lh>$wl; +l\u0325>$wl; +e\u0304>$we; +o\u0304>$wo; +a>$wa; +e\u0306>$wce; +o\u0306>$wco; +e>$wse; +''om>$om; +o>$wso; +n}r\u0325 > $na|$virama; +n}l\u0325 > $na|$virama; +n}na > $na|$virama; +n\u0307}[kg] > $anusvara; +n\u0307}n\u0307 > $anusvara; +n\u0304}[cj] > $anusvara; +n\u0304}n\u0303 > $anusvara; +n\u0323}[tdn]\u0323 > $anusvara; +n}[tdn] > $anusvara; +m}[pbm] > $anusvara; +n}[ylvshr] > $anusvara; +m\u0307 > $anusvara; +q>$uka|$virama; +k\u0331h\u0331>$ukha |$virama; +g\u0307> $ugha | $virama; +z > $ujha |$virama; +f > $ufa|$virama; +t\u0331>$kta; +y\u0307>$uya|$virama; +l\u0331>$ela|$virama; +n\u0331>$ena|$virama; +n\u0307>$nga|$virama; +n\u0303>$nya|$virama; +n\u0323>$nna|$virama; +t\u0323h>$ttha|$virama; +t\u0323>$tta|$virama; +r\u0323h>$udha|$virama; +r\u0323>$uddha|$virama; +d\u0323h>$ddha|$virama; +d\u0323>$dda|$virama; +kh>$kha|$virama; +k>$ka|$virama; +gh>$gha|$virama; +g>$ga|$virama; +ch>$cha|$virama; +c>$ca|$virama; +jh>$jha|$virama; +j>$ja|$virama; +ny>$nya|$virama; +tth>$ttha|$virama; +ddh>$ddha|$virama; +th>$tha|$virama; +t>$ta|$virama; +dh>$dha|$virama; +d>$da|$virama; +n>$na|$virama; +ph>$pha|$virama; +p>$pa|$virama; +bh>$bha|$virama; +b>$ba|$virama; +m>$ma|$virama; +y>$ya|$virama; +r\u0331>$rra|$virama; +r>$ra|$virama; +l\u0323>$lla|$virama; +l>$la|$virama; +v>$va|$virama; +w\u0307>$vva|$virama; +w>$va|$virama; +sh>$sha|$virama; +ss>$ssa|$virama; +s\u0323>$ssa|$virama; +s\u0301>$sha|$virama; +s>$sa|$virama; +h>$ha|$virama; +'.'>$danda; +$danda'.'>$doubleDanda; +$depVowelAbove{'~'>$anusvara; +$depVowelBelow{'~'>$chandrabindu; +$virama a\u0304>$aa; +$virama ai>$ai; +$virama au>$au; +$virama ii>$ii; +$virama i\u0304>$ii; +$virama i>$i; +$virama u\u0304>$uu; +$virama u>$u; +$virama r\u0325\u0304>$rrh; +$virama r\u0325a>$rh; +$virama r\u0325>$rh; +$virama l\u0325\u0304>$llh; +$virama lh>$lh; +$virama l\u0325>$lh; +$virama e\u0304>$e; +$virama o\u0304>$o; +$virama a>; +$virama e\u0306>$ce; +$virama o\u0306>$co; +$virama e>$se; +$virama o>$so; +$virama''a\u0304>$waa; +$virama''ai>$wai; +$virama''au>$wau; +$virama''i\u0304>$wii; +$virama''i>$wi; +$virama''u\u0304>$wuu; +$virama''u>$wu; +$virama''r\u0325\u0304>$wrr; +$virama''r\u0325>$wr; +$virama''l\u0325\u0304>$wll; +$virama''l\u0325>$wl; +$virama''e\u0304>$we; +$virama''o\u0304>$wo; +$virama''a>$wa; +$virama''e\u0306>$wce; +$virama''o\u0306>$wco; +$virama''e>$wse; +$virama''o>$wso; +''a\u0304>$waa; +''ai>$wai; +''au>$wau; +''i\u0304>$wii; +''i>$wi; +''u\u0304>$wuu; +''u>$wu; +''r\u0325\u0304>$wrr; +''r\u0325>$wr; +''l\u0325\u0304>$wll; +''l\u0325>$wl; +''e\u0304>$we; +''o\u0304>$wo; +''a>$wa; +''e\u0306>$wce; +''o\u0306>$wco; +''e>$wse; +''o>$wso; +$virama } [$z] > $virama; +$virama } ' ' > $virama ; +$virama}$endThing>; +ʔ>$dgs; # Glottal Stop +0>$zero; +1>$one; +2>$two; +3>$three; +4>$four; +5>$five; +6>$six; +7>$seven; +8>$eight; +9>$nine; +''>; diff --git a/icuSources/data/translit/Latin_Jamo.txt b/icuSources/data/translit/Latin_Jamo.txt index 9d6591d7..5063003b 100644 --- a/icuSources/data/translit/Latin_Jamo.txt +++ b/icuSources/data/translit/Latin_Jamo.txt @@ -1,522 +1,14 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -#- N.B. DO NOT put any filters, NFD, etc. here -- those are aliased in -#- the INDEX file. This transliterator is, by itself, not -#- instantiated. It is used as a part of Latin-Jamo, Latin-Hangul, or -#- inverses thereof. - -# Transliteration from Latin characters to Korean script is done in -# two steps: Latin to Jamo, then Jamo to Hangul. The Jamo-Hangul -# transliteration is done algorithmically following Unicode 3.0 -# section 3.11. This file implements the Latin to Jamo -# transliteration using rules. - -# Jamo occupy the block 1100-11FF. Within this block there are three -# groups of characters: initial consonants or choseong (I), medial -# vowels or jungseong (M), and trailing consonants or jongseong (F). -# Standard Korean syllables are of the form I+M+F*. - -# Section 3.11 describes the use of 'filler' jamo to convert -# nonstandard syllables to standard form: the choseong filler 115F and -# the junseong filler 1160. In this transliterator, we will not use -# 115F or 1160. - -# We will, however, insert two 'null' jamo to make foreign words -# conform to Korean syllable structure. These are the null initial -# consonant 110B (IEUNG) and the null vowel 1173 (EU). In Latin text, -# we will use the separator in order to disambiguate strings, -# e.g. "kan-ggan" (initial GG) vs. "kanggan" (final NG + initial G). - -# We will not use all of the characters in the jamo block. We will -# only use the 19 initials, 21 medials, and 27 finals possessing a -# jamo short name as defined in section 4.4 of the Unicode book. - -# Rules of thumb. These guidelines provide the basic framework -# for the rules. They are phrased in terms of Latin-Jamo transliteration. -# The Jamo-Latin rules derive from these, since the Jamo-Latin rules are -# just context-free transliteration of jamo to corresponding short names, -# with the addition of separators to maintain round-trip integrity -# in the context of the Latin-Jamo rules. - -# A sequence of vowels: -# - Take the longest sequence you can. If there are too many, or you don't -# have a starting consonant, introduce a 110B necessary. - -# A sequence of consonants. -# - First join the double consonants: G + G -> GG -# - In the remaining list, -# -- If there is no preceding vowel, take the first consonant, and insert EU -# after it. Continue with the rest of the consonants. -# -- If there is one consonant, attach to the following vowel -# -- If there are two consonants and a following vowel, attach one to the -# preceeding vowel, and one to the following vowel. -# -- If there are more than two consonants, join the first two together if you -# can: L + G => LG -# -- If you still end up with more than 2 consonants, insert EU after the -# first one, and continue with the rest of the consonants. - -#---------------------------------------------------------------------- -# Variables - -# Some latin consonants or consonant pairs only occur as initials, and -# some only as finals, but some occur as both. This makes some jamo -# consonants ambiguous when transliterated into latin. -# Initial only: IEUNG BB DD JJ R -# Final only: BS GS L LB LG LH LM LP LS LT NG NH NJ -# Initial and Final: B C D G GG H J K M N P S SS T - - $Gi = \u1100; - $GGi = \u1101; - $Ni = \u1102; - $Di = \u1103; - $DD = \u1104; - $R = \u1105; - $Mi = \u1106; - $Bi = \u1107; - $BB = \u1108; - $Si = \u1109; - $SSi = \u110A; - $IEUNG = \u110B; # null initial, inserted during Latin-Jamo - $Ji = \u110C; - $JJ = \u110D; - $Ci = \u110E; - $Ki = \u110F; - $Ti = \u1110; - $Pi = \u1111; - $Hi = \u1112; - - $A = \u1161; - $AE = \u1162; - $YA = \u1163; - $YAE = \u1164; - $EO = \u1165; - $E = \u1166; - $YEO = \u1167; - $YE = \u1168; - $O = \u1169; - $WA = \u116A; - $WAE = \u116B; - $OE = \u116C; - $YO = \u116D; - $U = \u116E; - $WEO = \u116F; - $WE = \u1170; - $WI = \u1171; - $YU = \u1172; - $EU = \u1173; # null medial, inserted during Latin-Jamo - $YI = \u1174; - $I = \u1175; - - $Gf = \u11A8; - $GGf = \u11A9; - $GS = \u11AA; - $Nf = \u11AB; - $NJ = \u11AC; - $NH = \u11AD; - $Df = \u11AE; - $L = \u11AF; - $LG = \u11B0; - $LM = \u11B1; - $LB = \u11B2; - $LS = \u11B3; - $LT = \u11B4; - $LP = \u11B5; - $LH = \u11B6; - $Mf = \u11B7; - $Bf = \u11B8; - $BS = \u11B9; - $Sf = \u11BA; - $SSf = \u11BB; - $NG = \u11BC; - $Jf = \u11BD; - $Cf = \u11BE; - $Kf = \u11BF; - $Tf = \u11C0; - $Pf = \u11C1; - $Hf = \u11C2; - - $jamoInitial = [\u1100-\u1112]; - - $jamoMedial = [\u1161-\u1175]; - - $latinInitial = [bcdghjkmnprst]; - - # Any character in the latin transliteration of a medial - $latinMedial = [aeiouwy]; - - # The last character of the latin transliteration of a medial - $latinMedialEnd = [aeiou]; - - # Disambiguation separator - $sep = \'; - -#---------------------------------------------------------------------- -# Jamo-Latin - -# Jamo to latin is relatively simple, since it is the latin that is -# ambiguous. Most rules are straightforward, and we encode them below -# as simple add-on back rule, e.g.: - -# $jamoMedial {bs} > $BS; - -# becomes - -# $jamoMedial {bs} <> $BS; - -# Furthermore, we don't care about the ordering for Jamo-Latin because -# we are going from single characters, so we can very easily piggyback -# on the Latin-Jamo. - -# The main issue with Jamo-Latin is when to insert separators. -# Separators are inserted to obtain correct round trip behavior. For -# example, the sequence Ki A Gf Gi E, if transliterated to "kagge", -# would then round trip to Ki A GGi E. To prevent this, we insert a -# separator: "kag-ge". IMPORTANT: The need for separators depends -# very specifically on the behavior of the Latin-Jamo rules. A change -# in the Latin-Jamo behavior can completely change the way the -# separator insertion must be done. - -# First try to preserve actual separators in the jamo text by doubling -# them. This fixes problems like: -# (Di)(A)(Ji)(U)(NG)-(IEUNG)(YEO)(Nf)(Gi)(YEO)(L) => dajung-yeongyeol -# => (Di)(A)(Ji)(U)(NG)(IEUNG)(YEO)(Nf)(Gi)(YEO)(L). This is optional -# -- if we don't care about losing separators in the jamo, we can delete -# this rule. - - $sep $sep <> $sep; - -# Triple consonants. For three consonants "axxx" we insert a -# separator between the first and second "x" if XXf, Xf, and Xi all -# exist, and we have A Xf XXi. This prevents the reverse -# transliteration to A XXf Xi. - - $sep < $latinMedialEnd g {} $GGi; - $sep < $latinMedialEnd s {} $SSi; - -# For vowels the rule is similar. If there is a vowel "ae" such that -# "a" by itself and "e" by itself are vowels, then we want to map A E -# to "a-e" so as not to round trip to AE. However, in the text Ki EO -# IEUNG E we don't need to map to "keo-e". "keoe" suffices. For -# vowels of the form "aei", both "ae" + "i" and "a" + "ei" must be -# tested. NOTE: These rules used to have a left context of -# $latinInitial instead of [^$latinMedial]. The problem with this is -# sequences where an initial IEUNG is transliterated away: -# (IEUNG)(A)(IEUNG)(EO) => aeo => (IEUNG)(AE)(IEUNG)(O) - - $sep < [^$latinMedial] [y w] e {} [$O $OE]; - $sep < [^$latinMedial] e {} [$O $OE $U]; - $sep < [^$latinMedial] [o a] {} [$E $EO $EU]; - $sep < [^$latinMedial] [w y] a {} [$E $EO $EU]; - -# Similar to the above, but with an intervening $IEUNG. - - $sep < [^$latinMedial] [y w] e {} $IEUNG [$O $OE]; - $sep < [^$latinMedial] e {} $IEUNG [$O $OE $U]; - $sep < [^$latinMedial] [o a] {} $IEUNG [$E $EO $EU]; - $sep < [^$latinMedial] [w y] a {} $IEUNG [$E $EO $EU]; - -# Single finals followed by IEUNG. The jamo sequence A Xf IEUNG E, -# where Xi also exists, must be transliterated as "ax-e" to prevent -# the round trip conversion to A Xi E. - - $sep < $latinMedialEnd b {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd c {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd d {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd g {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd h {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd j {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd k {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd m {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd n {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd p {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd s {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd t {} $IEUNG $jamoMedial; - -# Double finals followed by IEUNG. Similar to the single finals -# followed by IEUNG. Any latin consonant pair X Y, between medials, -# that we would split by Latin-Jamo, we must handle when it occurs as -# part of A XYf IEUNG E, to prevent round trip conversion to A Xf Yi -# E. - - $sep < $latinMedialEnd b s {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd g g {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd g s {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l b {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l g {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l h {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l m {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l p {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l s {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd l t {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd n g {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd n h {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd n j {} $IEUNG $jamoMedial; - $sep < $latinMedialEnd s s {} $IEUNG $jamoMedial; - -# Split doubles. Text of the form A Xi Xf E, where XXi also occurs, -# we transliterate as "ax-xe" to prevent round trip transliteration as -# A XXi E. - - $sep < $latinMedialEnd b {} $Bi $jamoMedial; - $sep < $latinMedialEnd d {} $Di $jamoMedial; - $sep < $latinMedialEnd j {} $Ji $jamoMedial; - $sep < $latinMedialEnd g {} $Gi $jamoMedial; - $sep < $latinMedialEnd s {} $Si $jamoMedial; - -# XYY. This corresponds to the XYY rule in Latin-Jamo. By default -# Latin-Jamo maps "xyy" to Xf YYi, to keep YY together. As a result, -# "xyy" forms that correspond to XYf Yi must be transliterated as -# "xy-y". - - $sep < $latinMedialEnd b s {} [$Si $SSi]; - $sep < $latinMedialEnd g s {} [$Si $SSi]; - $sep < $latinMedialEnd l b {} [$Bi $BB]; - $sep < $latinMedialEnd l g {} [$Gi $GGi]; - $sep < $latinMedialEnd l s {} [$Si $SSi]; - $sep < $latinMedialEnd n g {} [$Gi $GGi]; - $sep < $latinMedialEnd n j {} [$Ji $JJ]; - -# Deletion of IEUNG is handled below. - -#---------------------------------------------------------------------- -# Latin-Jamo - -# [Basic, context-free Jamo-Latin rules are embedded here too. See -# above.] - -# Split digraphs: Text of the form 'axye', where 'xy' is a final -# digraph, 'x' is a final (by itself), 'y' is an initial, and 'a' and -# 'e' are medials, we want to transliterate this as A Xf Yi E rather -# than A XYf IEUNG E. We do NOT include text of the form "axxe", -# since that is handled differently below. These rules are generated -# programmatically from the jamo data. - - $jamoMedial {b s} $latinMedial > $Bf $Si; - $jamoMedial {g s} $latinMedial > $Gf $Si; - $jamoMedial {l b} $latinMedial > $L $Bi; - $jamoMedial {l g} $latinMedial > $L $Gi; - $jamoMedial {l h} $latinMedial > $L $Hi; - $jamoMedial {l m} $latinMedial > $L $Mi; - $jamoMedial {l p} $latinMedial > $L $Pi; - $jamoMedial {l s} $latinMedial > $L $Si; - $jamoMedial {l t} $latinMedial > $L $Ti; - $jamoMedial {n g} $latinMedial > $Nf $Gi; - $jamoMedial {n h} $latinMedial > $Nf $Hi; - $jamoMedial {n j} $latinMedial > $Nf $Ji; - -# Single consonants are initials: Text of the form 'axe', where 'x' -# can be an initial or a final, and 'a' and 'e' are medials, we want -# to transliterate as A Xi E rather than A Xf IEUNG E. - - $jamoMedial {b} $latinMedial > $Bi; - $jamoMedial {c} $latinMedial > $Ci; - $jamoMedial {d} $latinMedial > $Di; - $jamoMedial {g} $latinMedial > $Gi; - $jamoMedial {h} $latinMedial > $Hi; - $jamoMedial {j} $latinMedial > $Ji; - $jamoMedial {k} $latinMedial > $Ki; - $jamoMedial {m} $latinMedial > $Mi; - $jamoMedial {n} $latinMedial > $Ni; - $jamoMedial {p} $latinMedial > $Pi; - $jamoMedial {s} $latinMedial > $Si; - $jamoMedial {t} $latinMedial > $Ti; - -# Doubled initials. The sequence "axxe", where XX exists as an initial -# (XXi), and also Xi and Xf exist (true of all digraphs XX), we want -# to transliterate as A XXi E, rather than split to A Xf Xi E. - - $jamoMedial {b b} $latinMedial > $BB; - $jamoMedial {d d} $latinMedial > $DD; - $jamoMedial {j j} $latinMedial > $JJ; - $jamoMedial {g g} $latinMedial > $GGi; - $jamoMedial {s s} $latinMedial > $SSi; - -# XYY. Because doubled consonants bind more strongly than XY -# consonants, we must handle the sequence "axyy" specially. Here XYf -# and YYi must exist. In these cases, we map to Xf YYi rather than -# XYf. - - $jamoMedial {b} s s > $Bf; - $jamoMedial {g} s s > $Gf; - $jamoMedial {l} b b > $L; - $jamoMedial {l} g g > $L; - $jamoMedial {l} s s > $L; - $jamoMedial {n} g g > $Nf; - $jamoMedial {n} j j > $Nf; - -# Finals: Attach consonant with preceding medial to preceding medial. -# Do this BEFORE mapping consonants to initials. Longer keys must -# precede shorter keys that they start with, e.g., the rule for 'bs' -# must precede 'b'. - -# [BASIC Jamo-Latin FINALS handled here. Order irrelevant within this -# block for Jamo-Latin.] - - $jamoMedial {bs} <> $BS; - $jamoMedial {b} <> $Bf; - $jamoMedial {c} <> $Cf; - $jamoMedial {d} <> $Df; - $jamoMedial {gg} <> $GGf; - $jamoMedial {gs} <> $GS; - $jamoMedial {g} <> $Gf; - $jamoMedial {h} <> $Hf; - $jamoMedial {j} <> $Jf; - $jamoMedial {k} <> $Kf; - $jamoMedial {lb} <> $LB; $jamoMedial {lg} <> $LG; - $jamoMedial {lh} <> $LH; - $jamoMedial {lm} <> $LM; - $jamoMedial {lp} <> $LP; - $jamoMedial {ls} <> $LS; - $jamoMedial {lt} <> $LT; - $jamoMedial {l} <> $L; - $jamoMedial {m} <> $Mf; - $jamoMedial {ng} <> $NG; - $jamoMedial {nh} <> $NH; - $jamoMedial {nj} <> $NJ; - $jamoMedial {n} <> $Nf; - $jamoMedial {p} <> $Pf; - $jamoMedial {ss} <> $SSf; - $jamoMedial {s} <> $Sf; - $jamoMedial {t} <> $Tf; - -# Initials: Attach single consonant to following medial. Do this -# AFTER mapping finals. Longer keys must precede shorter keys that -# they start with, e.g., the rule for 'gg' must precede 'g'. - -# [BASIC Jamo-Latin INITIALS handled here. Order irrelevant within -# this block for Jamo-Latin.] - - {gg} $latinMedial <> $GGi; - {g} $latinMedial <> $Gi; - {n} $latinMedial <> $Ni; - {dd} $latinMedial <> $DD; - {d} $latinMedial <> $Di; - {r} $latinMedial <> $R; - {m} $latinMedial <> $Mi; - {bb} $latinMedial <> $BB; - {b} $latinMedial <> $Bi; - {ss} $latinMedial <> $SSi; - {s} $latinMedial <> $Si; - {jj} $latinMedial <> $JJ; - {j} $latinMedial <> $Ji; - {c} $latinMedial <> $Ci; - {k} $latinMedial <> $Ki; - {t} $latinMedial <> $Ti; - {p} $latinMedial <> $Pi; - {h} $latinMedial <> $Hi; - -# 'r' in final position. Because of the equivalency of the 'l' and -# 'r' jamo (the glyphs are the same), we try to provide the same -# equivalency in Latin-Jamo. The 'l' to 'r' conversion is handled -# below. If we see an 'r' in an apparent final position, treat it -# like 'l'. For example, "karka" => Ki A R EU Ki A without this rule. -# Instead, we want Ki A L Ki A. - - $jamoMedial {r} $latinInitial > | l; - -# Initial + Final: If we match the next rule, we have initial then -# final consonant with no intervening medial. We insert the null -# vowel BEFORE it to create a well-formed syllable. (In the next rule -# we insert a null vowel AFTER an anomalous initial.) - - $jamoInitial {} [bcdghjklmnpst] > $EU; - -# Initial + X: This block matches an initial consonant not followed by -# a medial. We insert the null vowel after it. We handle double -# initials explicitly here; for single initial consonants we insert EU -# (as Latin) after them and let standard rules do the rest. - -# BREAKS ROUND TRIP INTEGRITY - - gg > $GGi $EU; - dd > $DD $EU; - bb > $BB $EU; - ss > $SSi $EU; - jj > $JJ $EU; - - ([bcdghjkmnprst]) > | $1 eu; - -# X + Final: Finally we have to deal with a consonant that can only be -# interpreted as a final (not an initial) and which is preceded -# neither by an initial nor a medial. It is the start of the -# syllable, but cannot be. Most of these will already be handled by -# the above rules. 'bs' splits into Bi EU Sf. Similar for 'gs' 'ng' -# 'nh' 'nj'. The only problem is 'l' and digraphs starting with 'l'. -# For this isolated case, we could add a null initial and medial, -# which would give "la" => IEUNG EU L IEUNG A, for example. A more -# economical solution is to transliterate isolated "l" (that is, -# initial "l") to "r". (Other similar conversions of consonants that -# occur neither as initials nor as finals are handled below.) - - l > | r; - -# Medials. If a medial is preceded by an initial, then we proceed -# normally. As usual, longer keys must precede shorter ones. - -# [BASIC Jamo-Latin MEDIALS handled here. Order irrelevant within -# this block for Jamo-Latin.] - - $jamoInitial {ae} <> $AE; - $jamoInitial {a} <> $A; - $jamoInitial {eo} <> $EO; - $jamoInitial {eu} <> $EU; - $jamoInitial {e} <> $E; - $jamoInitial {i} <> $I; - $jamoInitial {oe} <> $OE; - $jamoInitial {o} <> $O; - $jamoInitial {u} <> $U; - $jamoInitial {wae} <> $WAE; - $jamoInitial {wa} <> $WA; - $jamoInitial {weo} <> $WEO; - $jamoInitial {we} <> $WE; - $jamoInitial {wi} <> $WI; - $jamoInitial {yae} <> $YAE; - $jamoInitial {ya} <> $YA; - $jamoInitial {yeo} <> $YEO; - $jamoInitial {ye} <> $YE; - $jamoInitial {yi} <> $YI; - $jamoInitial {yo} <> $YO; - $jamoInitial {yu} <> $YU; - -# We may see an anomalous isolated 'w' or 'y'. In that case, we -# interpret it as 'wi' and 'yu', respectively. - -# BREAKS ROUND TRIP INTEGRITY - - $jamoInitial {w} > | wi; - $jamoInitial {y} > | yu; - -# Otherwise, insert a null consonant IEUNG before the medial (which is -# still an untransliterated latin vowel). - - ($latinMedial) > $IEUNG | $1; - -# Convert non-jamo latin consonants to equivalents. These occur as -# neither initials nor finals in jamo. 'l' occurs as a final, but not -# an initial; it is handled above. The following letters (left hand -# side) will never be output by Jamo-Latin. - - f > | p; - q > | k; - v > | b; - x > | ks; - z > | s; - -# Delete separators (Latin-Jamo). - - $sep > ; - -# Delete null consonants (Jamo-Latin). Do NOT delete null EU vowels, -# since these may also occur in text. - - < $IEUNG; - -#- N.B. DO NOT put any filters, NFD, etc. here -- those are aliased in -#- the INDEX file. This transliterator is, by itself, not -#- instantiated. It is used as a part of Latin-Jamo, Latin-Hangul, or -#- inverses thereof. - -# eof +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Jamo.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::[[:script=Latin:][:M:]']; +::NFD; +::Lower; +::Latin-ConjoiningJamo; +::[[:script=Latin:][:M:]] NFC; diff --git a/icuSources/data/translit/Latin_Kannada.txt b/icuSources/data/translit/Latin_Kannada.txt new file mode 100644 index 00000000..0565d8a7 --- /dev/null +++ b/icuSources/data/translit/Latin_Kannada.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Latin_Katakana.txt b/icuSources/data/translit/Latin_Katakana.txt index 5b7fc176..0bc2d0b7 100644 --- a/icuSources/data/translit/Latin_Katakana.txt +++ b/icuSources/data/translit/Latin_Katakana.txt @@ -1,179 +1,73 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# note: a global filter is more efficient, but MUST include all source chars -#:: [\u0000-\u007E \u3001\u3002 \u3099-\u309C \u30A1-\u30FC \uFF61-\uFF9F [:Latin:][:Katakana:] [:nonspacing mark:]] ; -# MINIMAL FILTER GENERATED FOR: Latin-Katakana -### WARNING -- must add width filter, both here and below!!! ### -:: [[\u1100-\u1112\u111A\u1121\u1160-\u1175\u11AA\u11AC-\u11AD\u11B0-\u11B5\u2190-\u2193\u2502\u25A0\u25CB\u3000-\u3002\u300C-\u300D\u3099-\u309A\u30A1-\u30ED\u30EF\u30F2-\u30F4\u30F7\u30FA-\u30FC\uFF01-\uFF5E\uFFE0-\uFFE6][',.A-Za-z~\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0304\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1FB1\u1FB9\u1FD1\u1FD9\u1FE1\u1FE9\u212A-\u212B]] ; - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Katakana.txt +# Generated from CLDR: Thu Jul 20 16:27:17 PDT 2006 +# +:: [[ᄀ-ᄒᄚᄡ\u1160-ᅵᆪᆬ-ᆭᆰ-ᆵ<-↓│■○\u3000-。「-」\u3099-\u309Aァ-ロワヲ-ヴヷヺ-ー!-~¢-₩][',.A-Za-z~À-ÖØ-öø-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳ\u0304Ó¢-Ó£Ó®-ӯḀ-ẙẠ-ỹᾱᾹῑῙῡῩK-Å]] ; :: [:Latin:] fullwidth-halfwidth (); :: NFD (NFC); :: Lower (); # whenever transliterating from cased to uncased script, include this -# :: NFD () ; # this would catch the odd cases where a lowercase is not in NFD, but none are important for Japanese - -# Uses modified Hepburn. Small changes to make unambiguous. - -# | Kunrei-shiki: Hepburn/MHepburn -# | ------------------------------ -# | si: shi -# | si ~ya: sha -# | si ~yu: shu -# | si ~yo: sho -# | zi: ji -# | zi ~ya: ja -# | zi ~yu: ju -# | zi ~yo: jo -# | ti: chi -# | ti ~ya: cha -# | ti ~yu: chu -# | ti ~yu: cho -# | tu: tsu -# | di: ji/dji -# | du: zu/dzu -# | hu: fu - -# | For foreign words: -# | ----------------- -# | se ~i si -# | si ~e she -# | -# | ze ~i zi -# | zi ~e je -# | -# | te ~i ti -# | ti ~e che -# | te ~u tu -# | -# | de ~i di -# | de ~u du -# | de ~i di -# | -# | he ~u: hu -# | hu ~a fa -# | hu ~i fi -# | hu ~e he -# | hu ~o ho - -# Most small forms are generated, but if necessary -# explicit small forms are given with ~a, ~ya, etc. - -#------------------------------------------------------ -# Variables - $vowel = [aeiou] ; $consonant = [bcdfghjklmnpqrstvwxyz] ; $macron = \u0304 ; - -# Variables used for doubled-consonants with tsu - -$kana = [\u3041-\u3094] ; - -$voice = [\u3099\u309B]; -$semivoice = [\u309A\u309C]; - +$kana = [ぁ-ゔ] ; +$voice = [\u3099゛]; +$semivoice = [\u309A゜]; $k_start = [カキクケコかきくけこ] ; - $s_start = [サシスセソさしすせそ] ; - $j_start = [シし] $voice ; - $t_start = [タチツテトたちつてと] ; - $n_start = [ナニヌネノンなにぬねの] ; - $h_start = [ハヒヘホはひへほ] ; $f_start = [フふ] ; - $m_start = [マミムメモまみむめも] ; - $y_start = [ヤユヨやゆよ] ; - $r_start = [ラリルレロらりるれろ] ; - $w_start = [ワヰヱヲわゐゑを] ; - -$v_start = [ワヰヱヲ]゙ ; - -# if ン is followed by $n_quoter, then it needs an -# apostrophe after its romaji form to disambiguate it. -# e.g., ン ア ! = ナ, so represent as "n'a", not "na". - +$v_start = [ワヰヱヲ]\u3099 ; $n_quoter = [ア イ ウ エ オ ナ ニ ヌ ネ ノ ヤ ユ ヨ ン] ; - $small_y = [ャィュェョ] ; - -$iteration = \u309D ; - -#------------------------------------------------------ -# katakana rules - -# Punctuation - +$iteration = ゝ ; '.' <> 。; ',' <> 、; -# ' ' } [a-z] > ; # delete spaces before latin -# ' ' < [^' '\u30A0-\u30ff] {} ['\u30A0-\u30ff] ; #insert spaces before hiragana - -# Iteration Mark -# Copy previous letter & marks - -# TODO -# | $1 $1 < ($kana [[:M:]$voice$semivoice]?) $iteration - -# Specials for katakana -- not shared with hiragana - -va <> ヷ ; -vi <> ヸ ; -ve <> ヹ ; -vo <> ヺ ; +va <> ワ\u3099 ; +vi <> ヰ\u3099 ; +ve <> ヱ\u3099 ; +vo <> ヲ\u3099 ; '~ka' <> ヵ ; '~ke' <> ヶ ; - -# ~~~ begin shared rules ~~~ - -#special - ya < '~'ャ; yi < '~'ィ ; yu < '~'ュ; ye < '~'ェ; yo < '~'ョ; - -#normal - a <> ア ; - -b | '~' < ヒ ゙} $small_y ; -by } $vowel > ビ | '~y' ; - -ba <> バ ; -bi <> ビ ; -bu <> ブ ; -be <> ベ ; -bo <> ボ ; - +b | '~' < ヒ \u3099} $small_y ; +by } $vowel > ヒ\u3099 | '~y' ; +ba <> ハ\u3099 ; +bi <> ヒ\u3099 ; +bu <> フ\u3099 ; +be <> ヘ\u3099 ; +bo <> ホ\u3099 ; c } i > | s ; c } e > | s ; - -da <> ダ ; -di <> ディ ; -du <> デゥ ; -de <> デ ; -do <> ド ; -dzu <> ヅ ; -dja < ヂャ ; -dji'~i' < ヂィ ; # liu -dju < ヂュ ; -dje < ヂェ ; -djo < ヂョ ; -dji <> ヂ ; -dj } $vowel > ヂ | '~y' ; - -# TODO: QUESTION: use ĵĴżŻ instead of dj, dz - +da <> タ\u3099 ; +di <> テ\u3099ィ ; +du <> テ\u3099ゥ ; +de <> テ\u3099 ; +do <> ト\u3099 ; +dzu <> ツ\u3099 ; +dja < チ\u3099ャ ; +dji'~i' < チ\u3099ィ ; # liu +dju < チ\u3099ュ ; +dje < チ\u3099ェ ; +djo < チ\u3099ョ ; +dji <> チ\u3099 ; +dj } $vowel > チ\u3099 | '~y' ; cha < チャ ; chi'~i' < チィ ; # liu chu < チュ ; @@ -181,108 +75,80 @@ che < チェ ; cho < チョ ; chi <> チ ; ch } $vowel > チ | '~y' ; - e <> エ ; - -g | '~' < ギ} $small_y ; -gy } $vowel > ギ | '~y' ; - -ga <> ガ ; -gi <> ギ ; -gu <> グ ; -ge <> ゲ ; -go <> ゴ ; - +g | '~' < キ\u3099} $small_y ; +gy } $vowel > キ\u3099 | '~y' ; +ga <> カ\u3099 ; +gi <> キ\u3099 ; +gu <> ク\u3099 ; +ge <> ケ\u3099 ; +go <> コ\u3099 ; i <> イ ; - -# j } $vowel > ジ | '~y' ; - -ja <> ジャ ; -ji'~i' < ジィ ; # liu -ju <> ジュ ; -je <> ジェ ; -jo <> ジョ ; -ji <> ジ ; - +ja <> シ\u3099ャ ; +ji'~i' < シ\u3099ィ ; # liu +ju <> シ\u3099ュ ; +je <> シ\u3099ェ ; +jo <> シ\u3099ョ ; +ji <> シ\u3099 ; k | '~' < キ} $small_y ; ky } $vowel > キ | '~y' ; - ka <> カ ; ki <> キ ; ku <> ク ; ke <> ケ ; ko <> コ ; - m | '~' < ミ} $small_y ; my } $vowel > ミ | '~y' ; - ma <> マ ; mi <> ミ ; mu <> ム ; me <> メ ; mo <> モ ; - m } [pbfv] > ン ; - n | '~' < ニ } $small_y ; ny } $vowel > ニ | '~y' ; - na <> ナ ; ni <> ニ ; nu <> ヌ ; ne <> ネ ; no <> ノ ; - o <> オ ; - -p | '~' < ピ } $small_y ; -py } $vowel > ピ | '~y' ; - -pa <> パ ; -pi <> ピ ; -pu <> プ ; -pe <> ペ ; -po <> ポ ; - +p | '~' < ヒ\u309A } $small_y ; +py } $vowel > ヒ\u309A | '~y' ; +pa <> ハ\u309A ; +pi <> ヒ\u309A ; +pu <> フ\u309A ; +pe <> ヘ\u309A ; +po <> ホ\u309A ; h | '~' < ヒ } $small_y ; hy } $vowel > ヒ | '~y' ; - ha <> ハ ; hi <> ヒ ; hu <> ヘゥ ; he <> ヘ ; ho <> ホ ; - -# f | '~' < フ } $small_y ; -# f } $vowel > フ | '~' ; - fa <> ファ ; fi <> フィ ; fe <> フェ ; fo <> フォ ; fu <> フ ; - r | '~' < リ } $small_y ; ry } $vowel > リ | '~y' ; - ra <> ラ ; ri <> リ ; ru <> ル ; re <> レ ; ro <> ロ ; - -za <> ザ ; -zi <> ゼィ ; -zu <> ズ ; -ze <> ゼ ; -zo <> ゾ ; - +za <> サ\u3099 ; +zi <> セ\u3099ィ ; +zu <> ス\u3099 ; +ze <> セ\u3099 ; +zo <> ソ\u3099 ; sa <> サ ; si <> セィ ; su <> ス ; se <> セ ; so <> ソ ; - sha < シャ ; shi'~i' < シィ ; # liu shu < シュ ; @@ -290,58 +156,33 @@ she < シェ ; sho < ショ ; shi <> シ ; sh } $vowel > シ | '~y' ; - ta <> タ ; ti <> ティ ; tu <> テゥ ; te <> テ ; to <> ト ; - tsu <> ツ ; - -# v } $vowel > ヴ | '~' ; - -#'v~a' < ヴァ ; # liu -#'v~i' < ヴィ ; # liu -#'v~e' < ヴェ ; # liu -#'v~o' < ヴォ ; # liu -vu <> ヴ ; - +vu <> ウ\u3099 ; u <> ウ ; - -# w } $vowel > ウ | '~' ; - wa <> ワ ; wi <> ヰ ; wu > ウ ; we <> ヱ ; wo <> ヲ ; - ya <> ヤ ; yi > イ ; yu <> ユ ; ye > エ ; yo <> ヨ ; - -# double consonants - -#specials s } sh > ッ ; t } ch > ッ ; - -#voiced - j } j <> ッ } $j_start ; b } b <> ッ } [$h_start$f_start] $voice; d } d <> ッ } $t_start $voice; g } g <> ッ } $k_start $voice; p } p <> ッ } [$h_start$f_start] $semivoice; -# v } v <> ッ } [ワヰウヱヲう] $voice ; z } z <> ッ } $s_start $voice; v } v <> ッ } $v_start; - -# normal - k } k <> ッ } $k_start ; m } m <> ッ } $m_start ; n } n <> ッ } $n_start ; @@ -350,33 +191,15 @@ f } f <> ッ } $f_start ; r } r <> ッ } $r_start ; t } t <> ッ } $t_start ; s } s <> ッ } $s_start ; - w } w <> ッ } $w_start; y } y <> ッ } $y_start; - -# completeness x } x > ッ ; c } k > ッ ; c } c > ッ ; c } q > ッ ; l } l > ッ ; q } q > ッ ; -# y } y > ッ ; -# w } w > ッ ; - -# prolonged vowel mark. this indicates a doubling of -# the preceding vowel sound - -#a < a { ー ; # liu -#e < e { ー ; # liu -#i < i { ー ; # liu -#o < o { ー ; # liu -#u < u { ー ; # liu - $macron <> ー ; - -# small forms - '~a' <> ァ ; '~i' <> ィ ; '~u' <> ゥ ; @@ -389,107 +212,63 @@ $macron <> ー ; '~yu' <> ュ ; '~ye' > ェ ; '~yo' <> ョ ; - -# iteration marks -# TODO: make more accurate - j $1 < sh (y* $vowel) {ヽ$voice ; dj $1 < ch (y* $vowel) {ヽ$voice ; dz $1 < ts (y* $vowel) {ヽ$voice ; - g $1 < k (y* $vowel) {ヽ$voice ; z $1 < s (y* $vowel) {ヽ$voice ; d $1 < t (y* $vowel) {ヽ$voice ; h $1 < b (y* $vowel) {ヽ$voice ; v $1 < w (y* $vowel) {ヽ$voice ; - sh $1 < sh (y* $vowel) {ヽ$voice ; j $1 < j (y* $vowel) {ヽ$voice ; ch $1 < ch (y* $vowel) {ヽ$voice ; dj $1 < dj(y* $vowel) {ヽ$voice ; ts $1 < ts (y* $vowel) {ヽ$voice ; dz $1 < dz (y* $vowel) {ヽ$voice ; - $1 < ($consonant y* $vowel) {ヽ$voice? ; $1 < (.) {ヽ $voice? ; # otherwise repeat last character - < ヽ $voice? ; # delete if no characters found - -# h- rule: lengthens vowel if not followed by a vowel - +< ヽ $voice? ; # delete if no characters found [aeiou] } h > ー ; - -# one-way latin- > kana rules. these do not occur in -# well-formed romaji representing actual japanese text. -# their purpose is to make all romaji map to kana of -# some sort. - -# the following are not really necessary, but produce -# slightly more natural results. - cy > セィ ; -dy > ディ ; +dy > テ\u3099ィ ; hy > ヒ ; sy > セィ ; ty > ティ ; -zy > ゼィ ; - +zy > セ\u3099ィ ; h > ヘ ; - -# isolated consonants listed here so as not to mask -# longer rules above. - ch > チ; sh > シ ; -dz > ヅ ; -dj > ヂ; - -b > ブ ; -d > デ ; -g > グ ; +dz > ツ\u3099 ; +dj > チ\u3099; +b > フ\u3099 ; +d > テ\u3099 ; +g > ク\u3099 ; k > ク ; m > ム ; n'' < ン } $n_quoter ; n <> ン ; -p > プ ; +p > フ\u309A ; r > ル ; s > ス ; t > テ ; y > イ ; -z > ズ ; -v > ヴ ; - +z > ス\u3099 ; +v > ウ\u3099 ; f > フ; -j > ジ; +j > シ\u3099; w > ウ; - ß > | ss ; æ > | e ; ð > | d ; ø > | u ; þ > | th ; - -# simple substitutions using backup - c > | k ; l > | r ; q > | k ; x > | ks ; - -# ~~~ END shared rules ~~~ - -#------------------------------------------------------ -# Final cleanup - '~' > ; # delete stray tildes between letters [:Katakana:] { '' } [:Latin:] > ; # delete stray quotes between letters -# [\u02BE[:Nonspacing Mark:]-[\u3099-\u309C]] > ; # delete any non-spacing marks that we didn't use - -:: NFC (NFD) ; +:: NFC (NFD) ; :: ([:Katakana:] halfwidth-fullwidth); - -# note: a global filter is more efficient, but MUST include all source chars!! -#:: ([\u0000-\u007E \u3001\u3002 \u3099-\u309C \u30A1-\u30FC \uFF61-\uFF9F [:Latin:][:Katakana:] [:nonspacing mark:]]); -# MINIMAL FILTER GENERATED FOR: Latin-Katakana BACKWARD -:: ( [[\ -~\u00A2-\u00A3\u00A5-\u00A6\u00AC\u0304\u20A9\uFF61-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\uFFE8-\uFFEE][~\u3001-\u3002\u304C\u304E\u3050\u3052\u3054\u3056\u3058\u305A\u305C\u305E\u3060\u3062\u3065\u3067\u3069\u3070-\u3071\u3073-\u3074\u3076-\u3077\u3079-\u307A\u307C-\u307D\u3094\u3099-\u309B\u309E\u30A1-\u30FA\u30FC-\u30FE]] ) ; - -# eof +:: ( [[\ -~¢-£¥-¦¬\u0304₩。-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ│-ï¿®][~、-。がぎぐげござじずぜぞだぢづでどば-ぱび-ぴぶ-ぷべ-ぺぼ-ぽゔ\u3099-゛ゞァ-ヺー-ヾ]] ) ; diff --git a/icuSources/data/translit/Latin_Malayalam.txt b/icuSources/data/translit/Latin_Malayalam.txt new file mode 100644 index 00000000..376c9909 --- /dev/null +++ b/icuSources/data/translit/Latin_Malayalam.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Latin_NumericPinyin.txt b/icuSources/data/translit/Latin_NumericPinyin.txt index c1bfda85..867f52d1 100644 --- a/icuSources/data/translit/Latin_NumericPinyin.txt +++ b/icuSources/data/translit/Latin_NumericPinyin.txt @@ -1,41 +1,22 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# According to the pinyin definitions I've been able to find: -# 'a', 'e' are the preferred bases -# otherwise 'o' -# otherwise last vowel - -# The trailing form of syllables are the following: -# "a", "ai", "ao", "an", "ang", -# "o", "ou", "ong", -# "e", "ei", "er", "en", "eng", -# "i", "ia", "iao", "ie", "iu", "ian", "in", "iang", "ing", "iong", -# "u", "ua", "uo", "uai", "ui", "uan", "un", "uang", "ueng", -# "ü", "üe", "üan", "ün" -# so the letters the tone will 'hop' are: - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_NumericPinyin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# ::NFD (NFC); $tone = [\u0304\u0301\u030C\u0300\u0306] ; - -# Move the tone to the end of a syllable, and convert to number e {($tone) r} > r &tone-digit($1); ($tone) ( [i o n u {o n} {n g}]) > $2 &tone-digit($1); ($tone) > &tone-digit($1); - -# The following backs up until it finds the right vowel, then deposits the tone - -$vowel = [aAeEiIoOuUüÜ]; +$vowel = [aAeEiIoOuUüÜ {u\u0308} {U\u0308} ]; $consonant = [[a-z A-Z] - [$vowel]]; $digit = [1-5]; $1 &digit-tone($3) $2 < ([aAeE]) ($vowel* $consonant*) ($digit); $1 &digit-tone($3) $2 < ([oO]) ([$vowel-[aeAE]]* $consonant*) ($digit); $1 &digit-tone($3) $2 < ($vowel) ($consonant*) ($digit); &digit-tone($1) < [:letter:] {($digit)}; - ::NFC (NFD); - - - diff --git a/icuSources/data/translit/Latin_Oriya.txt b/icuSources/data/translit/Latin_Oriya.txt new file mode 100644 index 00000000..3b5c625f --- /dev/null +++ b/icuSources/data/translit/Latin_Oriya.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Latin_Tamil.txt b/icuSources/data/translit/Latin_Tamil.txt new file mode 100644 index 00000000..31b2e2af --- /dev/null +++ b/icuSources/data/translit/Latin_Tamil.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Latin_Telugu.txt b/icuSources/data/translit/Latin_Telugu.txt new file mode 100644 index 00000000..eade0ed9 --- /dev/null +++ b/icuSources/data/translit/Latin_Telugu.txt @@ -0,0 +1,15 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::['.0-9A-Za-z~À-ÅÇ-ÏÑ-ÖÙ-Ýà-åç-ïñ-öù-ýÿ-ďĒ-ĥĨ-Ä°Ä´-ķĹ-ľŃ-ňŌ-őŔ-ťŨ-žƠ-ơƯ-ưǍ-ǜǞ-ǣǦ-Ç­Ç°Ç´-ǵǸ-țȞ-ȟȦ-ȳʔ\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344΅-ΆΈ-ΊΌΎ-ΐά-ΰό-ώϓЃЌЎЙйѓќўӁ-ӂӐ-ӑӖ-ӗӢ-Ó£Ó®-ӯḀ-ẙẠ-ỹἁἃ-ἅἇἉἋ-ἍἏἑἓ-ἕἙἛ-Ἕἡἣ-ἥἧἩἫ-ἭἯἱἳ-ἵἷἹἻ-ἽἿὁὃ-ὅὉὋ-Ὅὑὓ-ὕὗὙὛὝὟὡὣ-ὥὧὩὫ-ὭὯάέήίόύώᾁᾃ-ᾅᾇᾉᾋ-ᾍᾏᾑᾓ-ᾕᾗᾙᾛ-ᾝᾟᾡᾣ-ᾥᾧᾩᾫ-ᾭᾯ-ᾱᾴᾸ-ᾹΆῄΈΉ῎ῐ-ῑΐῘ-ῙΊ῞ῠ-ῡΰῥῨ-á¿©á¿«-Ῥ΅ῴΌΏK-Å\uE04D\uE064]; +::NFD; +::Lower; +::Latin-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Latin_Thai.txt b/icuSources/data/translit/Latin_Thai.txt new file mode 100644 index 00000000..950ae20b --- /dev/null +++ b/icuSources/data/translit/Latin_Thai.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Latin_Thai.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[[:Latin:][:Mn:][:Me:] \u0020\u0026 ;0-9|~«»ʹʹ‡ˌ]; +::NFD; +::Latin-ThaiLogical; +::ThaiLogical-Thai; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Bengali.txt b/icuSources/data/translit/Malayalam_Bengali.txt new file mode 100644 index 00000000..4f9a4ad5 --- /dev/null +++ b/icuSources/data/translit/Malayalam_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Devanagari.txt b/icuSources/data/translit/Malayalam_Devanagari.txt new file mode 100644 index 00000000..a0407183 --- /dev/null +++ b/icuSources/data/translit/Malayalam_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Gujarati.txt b/icuSources/data/translit/Malayalam_Gujarati.txt new file mode 100644 index 00000000..444ff4d8 --- /dev/null +++ b/icuSources/data/translit/Malayalam_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Gurmukhi.txt b/icuSources/data/translit/Malayalam_Gurmukhi.txt new file mode 100644 index 00000000..87f5254f --- /dev/null +++ b/icuSources/data/translit/Malayalam_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Malayalam_InterIndic.txt b/icuSources/data/translit/Malayalam_InterIndic.txt index 3fd42e08..b253e6c3 100644 --- a/icuSources/data/translit/Malayalam_InterIndic.txt +++ b/icuSources/data/translit/Malayalam_InterIndic.txt @@ -1,85 +1,84 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Malayalam-InterIndic -#:: NFD (NFC) ; - -\u0D02>\uE002; # SIGN ANUSVARA -\u0D03>\uE003; # SIGN VISARGA -\u0D05>\uE005; # LETTER A -\u0D06>\uE006; # LETTER AA -\u0D07>\uE007; # LETTER I -\u0D08>\uE008; # LETTER II -\u0D09>\uE009; # LETTER U -\u0D0A>\uE00A; # LETTER UU -\u0D0B>\uE00B; # LETTER VOCALIC R -\u0D0C>\uE00C; # LETTER VOCALIC L -\u0D0E>\uE00E; # LETTER E -\u0D0F>\uE00F; # LETTER EE -\u0D10>\uE010; # LETTER AI -\u0D12>\uE012; # LETTER O -\u0D13>\uE013; # LETTER OO -\u0D14>\uE014; # LETTER AU -\u0D15>\uE015; # LETTER KA -\u0D16>\uE016; # LETTER KHA -\u0D17>\uE017; # LETTER GA -\u0D18>\uE018; # LETTER GHA -\u0D19>\uE019; # LETTER NGA -\u0D1A>\uE01A; # LETTER CA -\u0D1B>\uE01B; # LETTER CHA -\u0D1C>\uE01C; # LETTER JA -\u0D1D>\uE01D; # LETTER JHA -\u0D1E>\uE01E; # LETTER NYA -\u0D1F>\uE01F; # LETTER TTA -\u0D20>\uE020; # LETTER TTHA -\u0D21>\uE021; # LETTER DDA -\u0D22>\uE022; # LETTER DDHA -\u0D23>\uE023; # LETTER NNA -\u0D24>\uE024; # LETTER TA -\u0D25>\uE025; # LETTER THA -\u0D26>\uE026; # LETTER DA -\u0D27>\uE027; # LETTER DHA -\u0D28>\uE028; # LETTER NA -\u0D2A>\uE02A; # LETTER PA -\u0D2B>\uE02B; # LETTER PHA -\u0D2C>\uE02C; # LETTER BA -\u0D2D>\uE02D; # LETTER BHA -\u0D2E>\uE02E; # LETTER MA -\u0D2F>\uE02F; # LETTER YA -\u0D30>\uE030; # LETTER RA -\u0D31>\uE031; # LETTER RRA -\u0D32>\uE032; # LETTER LA -\u0D33>\uE033; # LETTER LLA -\u0D34>\uE034; # LETTER LLLA -\u0D35>\uE035; # LETTER VA -\u0D36>\uE036; # LETTER SHA -\u0D37>\uE037; # LETTER SSA -\u0D38>\uE038; # LETTER SA -\u0D39>\uE039; # LETTER HA -\u0D3E>\uE03E; # VOWEL SIGN AA -\u0D3F>\uE03F; # VOWEL SIGN I -\u0D40>\uE040; # VOWEL SIGN II +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +ം>\uE002; # SIGN ANUSVARA +ഃ>\uE003; # SIGN VISARGA +അ>\uE005; # LETTER A +ആ>\uE006; # LETTER AA +ഇ>\uE007; # LETTER I +ഈ>\uE008; # LETTER II +ഉ>\uE009; # LETTER U +ഊ>\uE00A; # LETTER UU +ഋ>\uE00B; # LETTER VOCALIC R +ഌ>\uE00C; # LETTER VOCALIC L +എ>\uE00E; # LETTER E +ഏ>\uE00F; # LETTER EE +ഐ>\uE010; # LETTER AI +ഒ>\uE012; # LETTER O +ഓ>\uE013; # LETTER OO +ഔ>\uE014; # LETTER AU +ക>\uE015; # LETTER KA +ഖ>\uE016; # LETTER KHA +ഗ>\uE017; # LETTER GA +ഘ>\uE018; # LETTER GHA +ങ>\uE019; # LETTER NGA +ച>\uE01A; # LETTER CA +ഛ>\uE01B; # LETTER CHA +ജ>\uE01C; # LETTER JA +ഝ>\uE01D; # LETTER JHA +ഞ>\uE01E; # LETTER NYA +ട>\uE01F; # LETTER TTA +à´ >\uE020; # LETTER TTHA +à´¡>\uE021; # LETTER DDA +à´¢>\uE022; # LETTER DDHA +à´£>\uE023; # LETTER NNA +à´¤>\uE024; # LETTER TA +à´¥>\uE025; # LETTER THA +à´¦>\uE026; # LETTER DA +à´§>\uE027; # LETTER DHA +à´¨>\uE028; # LETTER NA +à´ª>\uE02A; # LETTER PA +à´«>\uE02B; # LETTER PHA +à´¬>\uE02C; # LETTER BA +à´­>\uE02D; # LETTER BHA +à´®>\uE02E; # LETTER MA +à´¯>\uE02F; # LETTER YA +à´°>\uE030; # LETTER RA +à´±>\uE031; # LETTER RRA +à´²>\uE032; # LETTER LA +à´³>\uE033; # LETTER LLA +à´´>\uE034; # LETTER LLLA +à´µ>\uE035; # LETTER VA +à´¶>\uE036; # LETTER SHA +à´·>\uE037; # LETTER SSA +à´¸>\uE038; # LETTER SA +à´¹>\uE039; # LETTER HA +à´¾>\uE03E; # VOWEL SIGN AA +à´¿>\uE03F; # VOWEL SIGN I +ീ>\uE040; # VOWEL SIGN II \u0D41>\uE041; # VOWEL SIGN U \u0D42>\uE042; # VOWEL SIGN UU \u0D43>\uE043; # VOWEL SIGN VOCALIC R -\u0D46>\uE046; # VOWEL SIGN E -\u0D47>\uE047; # VOWEL SIGN EE -\u0D48>\uE048; # VOWEL SIGN AI +െ>\uE046; # VOWEL SIGN E +േ>\uE047; # VOWEL SIGN EE +ൈ>\uE048; # VOWEL SIGN AI \u0D4D>\uE04D; # SIGN VIRAMA -\u0D57>\uE057; # AU LENGTH MARK -\u0D60>\uE060; # LETTER VOCALIC RR -\u0D61>\uE061; # LETTER VOCALIC LL -\u0D66>\uE066; # DIGIT ZERO -\u0D67>\uE067; # DIGIT ONE -\u0D68>\uE068; # DIGIT TWO -\u0D69>\uE069; # DIGIT THREE -\u0D6A>\uE06A; # DIGIT FOUR -\u0D6B>\uE06B; # DIGIT FIVE -\u0D6C>\uE06C; # DIGIT SIX -\u0D6D>\uE06D; # DIGIT SEVEN -\u0D6E>\uE06E; # DIGIT EIGHT -\u0D6F>\uE06F; # DIGIT NINE -# :: NFC (NFD) ; -# eof +ൗ>\uE057; # AU LENGTH MARK +ൠ>\uE060; # LETTER VOCALIC RR +ൡ>\uE061; # LETTER VOCALIC LL +൦>\uE066; # DIGIT ZERO +൧>\uE067; # DIGIT ONE +൨>\uE068; # DIGIT TWO +൩>\uE069; # DIGIT THREE +൪>\uE06A; # DIGIT FOUR +൫>\uE06B; # DIGIT FIVE +൬>\uE06C; # DIGIT SIX +൭>\uE06D; # DIGIT SEVEN +൮>\uE06E; # DIGIT EIGHT +൯>\uE06F; # DIGIT NINE diff --git a/icuSources/data/translit/Malayalam_Kannada.txt b/icuSources/data/translit/Malayalam_Kannada.txt new file mode 100644 index 00000000..4f715c58 --- /dev/null +++ b/icuSources/data/translit/Malayalam_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Latin.txt b/icuSources/data/translit/Malayalam_Latin.txt new file mode 100644 index 00000000..d335bbba --- /dev/null +++ b/icuSources/data/translit/Malayalam_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Oriya.txt b/icuSources/data/translit/Malayalam_Oriya.txt new file mode 100644 index 00000000..127507d7 --- /dev/null +++ b/icuSources/data/translit/Malayalam_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Tamil.txt b/icuSources/data/translit/Malayalam_Tamil.txt new file mode 100644 index 00000000..7cfd2e3e --- /dev/null +++ b/icuSources/data/translit/Malayalam_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Malayalam_Telugu.txt b/icuSources/data/translit/Malayalam_Telugu.txt new file mode 100644 index 00000000..283daf98 --- /dev/null +++ b/icuSources/data/translit/Malayalam_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Malayalam_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ം-ഃഅ-ഌഎ-ഐഒ-നപ-ഹാ-\u0D43െ-ൈൊ-\u0D4Dൗൠ-ൡ൦-൯]; +::NFD; +::Malayalam-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Oriya_Bengali.txt b/icuSources/data/translit/Oriya_Bengali.txt new file mode 100644 index 00000000..96fdd548 --- /dev/null +++ b/icuSources/data/translit/Oriya_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Oriya_Devanagari.txt b/icuSources/data/translit/Oriya_Devanagari.txt new file mode 100644 index 00000000..a9a67f18 --- /dev/null +++ b/icuSources/data/translit/Oriya_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Oriya_Gujarati.txt b/icuSources/data/translit/Oriya_Gujarati.txt new file mode 100644 index 00000000..5d5e956d --- /dev/null +++ b/icuSources/data/translit/Oriya_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Oriya_Gurmukhi.txt b/icuSources/data/translit/Oriya_Gurmukhi.txt new file mode 100644 index 00000000..90e418c6 --- /dev/null +++ b/icuSources/data/translit/Oriya_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Oriya_InterIndic.txt b/icuSources/data/translit/Oriya_InterIndic.txt index 937d919c..cb2dec53 100644 --- a/icuSources/data/translit/Oriya_InterIndic.txt +++ b/icuSources/data/translit/Oriya_InterIndic.txt @@ -1,95 +1,90 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Oriya-InterIndic -#:: NFD (NFC) ; -#\u0B21\u0B3C>\uE05C;# LETTER RRA -#\u0B22\u0B3C>\uE05D;# LETTER RHA -\u0B47\u0B56>\uE048;# VOWEL SIGN AI -\u0B47\u0B3E>\uE04B;# VOWEL SIGN O -\u0B47\u0B57>\uE04C;# VOWEL SIGN AU - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +େ\u0B56>\uE048;# VOWEL SIGN AI +ୋ>\uE04B;# VOWEL SIGN O +ୌ>\uE04C;# VOWEL SIGN AU \u0B01>\uE001; # SIGN CANDRABINDU -\u0B02>\uE002; # SIGN ANUSVARA -\u0B03>\uE003; # SIGN VISARGA -\u0B05>\uE005; # LETTER A -\u0B06>\uE006; # LETTER AA -\u0B07>\uE007; # LETTER I -\u0B08>\uE008; # LETTER II -\u0B09>\uE009; # LETTER U -\u0B0A>\uE00A; # LETTER UU -\u0B0B>\uE00B; # LETTER VOCALIC R -\u0B0C>\uE00C; # LETTER VOCALIC L -\u0B0F>\uE00F; # LETTER E -\u0B10>\uE010; # LETTER AI -\u0B13>\uE013; # LETTER O -\u0B14>\uE014; # LETTER AU -\u0B15>\uE015; # LETTER KA -\u0B16>\uE016; # LETTER KHA -\u0B17>\uE017; # LETTER GA -\u0B18>\uE018; # LETTER GHA -\u0B19>\uE019; # LETTER NGA -\u0B1A>\uE01A; # LETTER CA -\u0B1B>\uE01B; # LETTER CHA -\u0B1C>\uE01C; # LETTER JA -\u0B1D>\uE01D; # LETTER JHA -\u0B1E>\uE01E; # LETTER NYA -\u0B1F>\uE01F; # LETTER TTA -\u0B20>\uE020; # LETTER TTHA -\u0B21>\uE021; # LETTER DDA -\u0B22>\uE022; # LETTER DDHA -\u0B23>\uE023; # LETTER NNA -\u0B24>\uE024; # LETTER TA -\u0B25>\uE025; # LETTER THA -\u0B26>\uE026; # LETTER DA -\u0B27>\uE027; # LETTER DHA -\u0B28>\uE028; # LETTER NA -\u0B2A>\uE02A; # LETTER PA -\u0B2B>\uE02B; # LETTER PHA -\u0B2C>\uE02C; # LETTER BA -\u0B2D>\uE02D; # LETTER BHA -\u0B2E>\uE02E; # LETTER MA -\u0B2F>\uE02F; # LETTER YA -\u0B30>\uE030; # LETTER RA -\u0B32>\uE032; # LETTER LA -\u0B33>\uE033; # LETTER LLA -\u0B35>\uE035; # LETTER VA -\u0B36>\uE036; # LETTER SHA -\u0B37>\uE037; # LETTER SSA -\u0B38>\uE038; # LETTER SA -\u0B39>\uE039; # LETTER HA +ଂ>\uE002; # SIGN ANUSVARA +ଃ>\uE003; # SIGN VISARGA +ଅ>\uE005; # LETTER A +ଆ>\uE006; # LETTER AA +ଇ>\uE007; # LETTER I +ଈ>\uE008; # LETTER II +ଉ>\uE009; # LETTER U +ଊ>\uE00A; # LETTER UU +ଋ>\uE00B; # LETTER VOCALIC R +ଌ>\uE00C; # LETTER VOCALIC L +ଏ>\uE00F; # LETTER E +ଐ>\uE010; # LETTER AI +ଓ>\uE013; # LETTER O +ଔ>\uE014; # LETTER AU +କ>\uE015; # LETTER KA +ଖ>\uE016; # LETTER KHA +ଗ>\uE017; # LETTER GA +ଘ>\uE018; # LETTER GHA +ଙ>\uE019; # LETTER NGA +ଚ>\uE01A; # LETTER CA +ଛ>\uE01B; # LETTER CHA +ଜ>\uE01C; # LETTER JA +ଝ>\uE01D; # LETTER JHA +ଞ>\uE01E; # LETTER NYA +ଟ>\uE01F; # LETTER TTA +ଠ>\uE020; # LETTER TTHA +ଡ>\uE021; # LETTER DDA +ଢ>\uE022; # LETTER DDHA +ଣ>\uE023; # LETTER NNA +ତ>\uE024; # LETTER TA +ଥ>\uE025; # LETTER THA +ଦ>\uE026; # LETTER DA +ଧ>\uE027; # LETTER DHA +ନ>\uE028; # LETTER NA +ପ>\uE02A; # LETTER PA +ଫ>\uE02B; # LETTER PHA +ବ>\uE02C; # LETTER BA +ଭ>\uE02D; # LETTER BHA +ମ>\uE02E; # LETTER MA +ଯ>\uE02F; # LETTER YA +ର>\uE030; # LETTER RA +ଲ>\uE032; # LETTER LA +ଳ>\uE033; # LETTER LLA +ଵ>\uE035; # LETTER VA +ଶ>\uE036; # LETTER SHA +ଷ>\uE037; # LETTER SSA +ସ>\uE038; # LETTER SA +ହ>\uE039; # LETTER HA \u0B3C>\uE03C; # SIGN NUKTA -\u0B3D>\uE03D; # SIGN AVAGRAHA -\u0B3E>\uE03E; # VOWEL SIGN AA +ଽ>\uE03D; # SIGN AVAGRAHA +ା>\uE03E; # VOWEL SIGN AA \u0B3F>\uE03F; # VOWEL SIGN I -\u0B40>\uE040; # VOWEL SIGN II +ୀ>\uE040; # VOWEL SIGN II \u0B41>\uE041; # VOWEL SIGN U \u0B42>\uE042; # VOWEL SIGN UU \u0B43>\uE043; # VOWEL SIGN VOCALIC R -\u0B47>\uE047; # VOWEL SIGN E -# +େ>\uE047; # VOWEL SIGN E \u0B4D>\uE04D; # SIGN VIRAMA \u0B56>\uE056; # AI LENGTH MARK -\u0B57>\uE057; # AU LENGTH MARK -\u0964>\ue064; # DANDA -\u0965>\ue065; # DOUBLE DANDA -# -\u0B5F>\uE05F; # LETTER YYA -\u0B60>\uE060; # LETTER VOCALIC RR -\u0B61>\uE061; # LETTER VOCALIC LL -\u0B66>\uE066; # DIGIT ZERO -\u0B67>\uE067; # DIGIT ONE -\u0B68>\uE068; # DIGIT TWO -\u0B69>\uE069; # DIGIT THREE -\u0B6A>\uE06A; # DIGIT FOUR -\u0B6B>\uE06B; # DIGIT FIVE -\u0B6C>\uE06C; # DIGIT SIX -\u0B6D>\uE06D; # DIGIT SEVEN -\u0B6E>\uE06E; # DIGIT EIGHT -\u0B6F>\uE06F; # DIGIT NINE -\u0B70>\ue07B; # ISSHAR -\u0B71>\ue081; # LETTER WA -# :: NFC (NFD) ; -# eof +ୗ>\uE057; # AU LENGTH MARK +।>\uE064; # DANDA +॥>\uE065; # DOUBLE DANDA +ୟ>\uE05F; # LETTER YYA +à­ >\uE060; # LETTER VOCALIC RR +à­¡>\uE061; # LETTER VOCALIC LL +à­¦>\uE066; # DIGIT ZERO +à­§>\uE067; # DIGIT ONE +à­¨>\uE068; # DIGIT TWO +à­©>\uE069; # DIGIT THREE +à­ª>\uE06A; # DIGIT FOUR +à­«>\uE06B; # DIGIT FIVE +à­¬>\uE06C; # DIGIT SIX +à­­>\uE06D; # DIGIT SEVEN +à­®>\uE06E; # DIGIT EIGHT +à­¯>\uE06F; # DIGIT NINE +à­°>\uE07B; # ISSHAR +à­±>\uE081; # LETTER WA diff --git a/icuSources/data/translit/Oriya_Kannada.txt b/icuSources/data/translit/Oriya_Kannada.txt new file mode 100644 index 00000000..797e7010 --- /dev/null +++ b/icuSources/data/translit/Oriya_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Oriya_Latin.txt b/icuSources/data/translit/Oriya_Latin.txt new file mode 100644 index 00000000..54ac76fa --- /dev/null +++ b/icuSources/data/translit/Oriya_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[।-॥\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵଶ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­°à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Oriya_Malayalam.txt b/icuSources/data/translit/Oriya_Malayalam.txt new file mode 100644 index 00000000..c59d1e8a --- /dev/null +++ b/icuSources/data/translit/Oriya_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Oriya_Tamil.txt b/icuSources/data/translit/Oriya_Tamil.txt new file mode 100644 index 00000000..529584da --- /dev/null +++ b/icuSources/data/translit/Oriya_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Oriya_Telugu.txt b/icuSources/data/translit/Oriya_Telugu.txt new file mode 100644 index 00000000..29469ee6 --- /dev/null +++ b/icuSources/data/translit/Oriya_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Oriya_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[\u0B01-ଃଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଵ-ହ\u0B3C-\u0B43େ-ୈୋ-\u0B4D\u0B56-ୗଡ଼-ଢ଼ୟ-à­¡à­¦-à­±]; +::NFD; +::Oriya-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Pinyin_NumericPinyin.txt b/icuSources/data/translit/Pinyin_NumericPinyin.txt new file mode 100644 index 00000000..6062cb0f --- /dev/null +++ b/icuSources/data/translit/Pinyin_NumericPinyin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Pinyin_NumericPinyin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +\u0304 <> 1; +\u0301 <> 2; +\u030C <> 3; +\u0300 <> 4; +< 5; diff --git a/icuSources/data/translit/Simplified_Traditional.txt b/icuSources/data/translit/Simplified_Traditional.txt new file mode 100644 index 0000000000000000000000000000000000000000..10041edd48318556984873f40b1a8f79148bbc36 GIT binary patch literal 45230 zcmd6wcX-sr_wUz6Q$(<10Yz+J0g)m_1f|L*yPHZvde5f!wyA_vQpj$yn;5L9h$z?< z6%+NG9w%VnmVY`NO}cdfZ!rD>LlM!muKXIq?> zM8k_Mna1}@i}rPcQJqG$|Jzp{R-z@(c;{LQ&1=HH-g4zkv|O$lXKM2;Mdmfp=wnTr zR7(a|O0^^zmbPOpv8GPSeA8d7p;SYu^c2gr=bL9pH9mSxy{}+Pkh!NDELMxd5^Y&v z2{2ZuvF(-{O;4%jN@L9xa!oH8hW`8O=9}98(^cgv|NqSDMdm5znnjaU*k+>>u$gGv;H>jLVG0n^zg%6f<+V=4W7DG8y+o(>l*Y zsmxB6ndgFkXI;i#H0eiL#hTV}Jh#M$M75K4a^-kSy77>xOXMCkIueW`(K6QPS&UbT zX(>^rF|PL{S1vI9WtzGS^|!93H}edMTP(w@t9uSuW?AN#@;w*{E`+Udn=$DF6O zDNVg2*t9qP!5d9!?7lv=d;PXrre~QGGp6D1=Pnfgl^v!uTKN0P6Vx`Pu?xn8zb|&d zn3Wx3_s)t4R7FTNwaqK-EwfaW-jjZiw&vB;2=_lABsJz|nR#+2BknY#II#95N@T`l z>?Ps`yoc3J4G8yU1f48B)=u@F)$?t1i}V%{9y2QW@{9)2y=VCuz57Skn<>?*8;&xJ zZhyh?ZR;G>gg~O1n-aTVjM}Eew)y>QhWPyl`~3&29aXP(Y@yl>Z>nud z+9zkIZA$Ej3bjp%-TkB5ro`^rr1qK%{q_Fqb#pz}-hgnauL$&>CH3K>)eax6cJffQ zlZUFE-mG?dkJ|QBwe6{D+X~gT6{>CZ_m`TXcHxU!U-+WhCd2&i8LG@O*7%II%(0AB zA8lb?&HZ_+BwqAMEVKN5n8>tlwJwt9C>Y((DpBh{-2b$+5!L({VigTf%$7EdgA-Ym z;lu5N1{6bnEqR{$cyy%Shqv(E9Vke)YwkeIBbh4G`NIJRbeyx{Uqv30=f+{^Xe$w@P z`5#@+OMT-fol{)tom0fC{Ez6LMRTQ_(%81V@;}6OzaQ|N*i}JlS7o`<)n96jMqA4) z^%5Vgmum%Gno-p8iui>TL&mq`mDX=Xp~NmdQEgKi+jG6Ppft9-Qf*3O+nj1s8aweO zwJD8V^S#=X#{Tc)$oLRPrZhgcAeCW%8r!7kSb{lsWonxeyWQchcc^XOthRld+Aiiks-)s4wS&&o`ry~pwl=G6O8Rp> zt9He^VmnSScV@0{$`Y~TmZ@z@Y~OyhO{w-he)}G^YYwSxO6sdes$HF=cGX{Mo09tI z>(q{(rglWX+7bTtDgO3pGqk?tIIR!fsCM!#YMYY&tTWX%CH6nZ$r!e>>qh0a+@jB% z`vA|JYf8o-Ziw2Z#Lj3`+mzUeSE+4E>^63JGgssM?a3!mxe0%(-BYLjJ*TLxYbz>O z*Hg`BdXJQ*zwpb{rZjfqM{4I>U`k^b{;D=5*YA##{;jV5N3?&n23Vh5+Gu-;YWt|f zqgHZ^y*6o{A=8h2lzou2wAY#vJKCbQo7k|AvifaPQeSYh)|(Q$EJSTnYJ0oddfKs% z$~-}BQ=0n5?eOP@6@I=cG4KNDUGdG?|8je%PeF2Rrme@>b*ipMleWD>J{eazmB9C!S+ew7nGu> z)AmVvIt@y(50fWupJYm{=Zs|PIU@z7L~{OXpOjAA2c_s4t9_E5v4T=Er%U^wl=das zzRjuqwJjDqd7`;1Q=dF>;QH#VzLr_4%H2B~Jl9BF_K6-&Pnl<^C7x2B?6Th@O79>$ zr>|sJ#U*N2yu_7UiScTiQm*WZTdKAxvD>oLUj3okuHF9joNAL@(d_TNgG_1s3)+%h zQs0r-%Sud~qjsXX1F3H-Q@ibSwW}J{u4+_UE%VB?EwfaWC#gCnxl($rI>t@Zs%2iq z)6}Rcp51ZDvEtePND5i9JFc88*#C$rjdypPgVo&sh$*qlc;@~`Oo`p|p|&@rv9llV z$k9AyXoF^|xE*mjR7=>GuunC+#lA!}A=OGtqn}qzNHxzjN#j-XR3wd8t>E15xQ-mT zYQeevk92I{x}EBk-KjnaTh&h3s&?Eiwc~cFZS&h1Thw+YXnkgu+7bV#9rl;n#hcXb zFIU^KTkS%>U0C6_E3{rM^U4^RcU9zU8FA0#=-cGpJ(Ek;Np19PiR9Okb%_OPN9>XM zl69t}UM$nb&)Q0QsxGfyAa&hIrZlxnZd6OSx?I@28W!J(`+^rV?umY+@@df{HvVf# zuhjvkh)Ri_tmoWnQ)0KDruC-8Zf2cCS2vw3w!1Q#73?lDrLk?lt4(Qa>t?kZ*K566 z(Ts?&s&bc>agOgYSrgU2XUCgt_gxR!wP#b$J@o922z7kN6MPvFn#Mk^ws|#I67JbF zK-Iqwkb24$styL7B<&lPHv~&<)xikzbMJ6dV)v9ueedwz(Q1oTb#Q=t84+X8YFI9s z^x0FEGJ`gwO=+~AvcAXF?&UPsQ&u!oZBv^1wO+l(+E%?r;~}*he^pzp9!@2~sxm(R zHSd;L#yXDZ4(54EdUqUIeV<&-^OPyEi)N{9N@GXIIfA2eOdI199T&VYI!D{p%uuan zhTp#0Zzm1(D=myhpO#twQ5!gO$^AtYI>>kd1%*UjRAC(N*8>U?M@YMQ}D z?4a}2HYK*cpAIO{_tQZ`q6(!xXh;BSBj|j;eZJaiSufVM=KTs@awm>&qB$`;z6s&( z)GFXzwy>(=Sxe4d`I+<~T$d%p(;TO#?tn$6l)F1F3EzN4ro@gk@Ab^nEHWjw=NGk2 ziJi!53s_`I?8;27HzjtB+Nd9)?`vbMGQ*@(M2{4)2)`uRw-rERTT!QJfU^OLrN+q#G9n$%3Y?!4q(SwxyzKswtXEqM(SfbR_+ozHrsD!tF4xKrLFlq z3NQ0&dK68r89BR*OldpIltzo3Ej<>p7KLqmG9aFgquspEH6`y|9Y@8pZn3lyHb4G8 z1I})y&+ze0tgnEx1Ez>?_;^zqpMbN)GOvCPA3xAC;!#_X)CJydN>dy0sQL!puHF%k zO09XN&N3_T_JNk+#o-gU#vxOhT4S$LdwG)DF+0>YCH2l&wM~hg@uk|PGLH-E2oQ;*tenOCl5nWZY@T5nB~D<$nr`c-Nj z^-eyYO4?~kW80jLda1WLlXi-o__^9O!_@BIu6FMPIF&&ymB z^z*V6ht*zjSncdBYUeCgyQ5O=j;;RsjcR9aR6Dms?c5Tzd+OBgIYn)?%q#b1_T;~W zY^rK&t>(8=Mo(le#04LZ4$U4;@ml;;gP*_7Co&#J#Eja|4( zKd+}WcKWMoQyM$3S#3&VhhMHXrLoo0&-sPTk5T2$La$DIBKmE)mQYiR=qZC$NjqEZ zur+Fjtx-GiGqn>xQ@glB?cxr#9nY%m8mD&hJheUVtF4xKHP;eWm9;P-j?dDg7nsu2 z+R4dw^1E>Kf`R*XE{wZN?m9X=jCZunuR0fs-4qoaEVYDa{st(M~|sS{RJu9-|! zrA14Pu=z10HD<4WN&57CV@jhrc85Quwkfego7Fa@u}vnEPbZxw)5vdKlFh69PE~#@ zWqyAZ@}2ZxUQLgMGdupe@r*`FPwJTSvofxln zV!Ybf{`<{&M{WDF;q2V@k9+uhB7BPa_gta%C0o@l*{Zhr6)n$N>gjwoN-WX zQ)25oNT)~NLE1K#e5>`P%e3CM%kRHM?eNRgHYM#{KdS8_+nWB*^!uNw_37+ePEYz) zv4i^t_SfLPf&EqY+lCeDZ<(dLuBhh6w2|ldZ$8H|@270Pn-yk0<%%0&O7pqaT0ZTu z{jRfW`(0<%c$pC}uX4YJ)k}KS&(;n}v~93$kUrL)zV>wSQ_H;iSyk~2dc5|1@$4@#rKt_#{jYiT zbN|2Z5HnARem>%0`egA|j^*hht9H+aYWIAocF8uiOSY+Pt57?ySZ&uM zYP%+>9dn7=F_);VmU-pgEwfZ*WOr(OXL|hcy;Ik8rbpMbZKvk8OpoR^V{@X+^aOgP zH`~r)-brS9ik}qQdYx^jj8yiMnVc9s0Z4p}(sg@tfL_!_`*H zymBqeELG*sori5La;2u3wkD}{9(MEFf~J|BkEyM{(`=flzteOcE@)GKQyTx~?ass4 z!A_S~qp=SH>dx2kQwRc*D*E7vmnIj!VQ+Q|UD?9jsI$M{H%`59|=NBs_ne4is< ze?Mo&?P$`&a&_B6QyOpE(U26iO^L0a=-L+QC%U%zHgc^gIS;4Dt8Gf`_Vd*?CAQ!D zsP<(t4XV5g$^NjzE?27k)s*H+*&m9P!+AoumiJde=EwgWaZd4xCyxj(CHM8bE@}_+ zE>9c56PZ`jO1OiJx{!R@%$ZBPf>_Ds)p!Z7C9euCyL;ezEeoV)^J;vAYx4$by1$kh z^J;2@yE#$#$9h;9r<^j*DZ;r+2ik@3=}+icVhfk^DV?-)B=lb(eP;gRAqP1Ug7VZh zrSWzoXhzBWMKen6R7Zl;*G|p+Md}ORP`kfEZNJ6mKf0snG#A@gedh5Py4mh@y}R@`KDVfVkEYIyl1uZPc(guS+b-jaFO zWnN8h!nJz`YV_MS`du60^lJxd>bzB-%iSekoP3FBbzZT|tDm!&B~fFE7onmT25OTp z9_YtcBkd}Q17R=ck?IkmRoW0Z z`BHS@wM0ugUQkgdD$#8bUkabo#Y3Yv$E> z2=@|!azD3h7p-TFwCb5Lz&*1e=Aegn0zHO%f<(>UD8A;^&&BLbqLy4Kn#_36RpJxu z5L-BycP~;?JJt4))KQvRwW3_&DQtfHeMCPde&*HK!ZF0P^bx~)ioH~7gk%3*8@8p= z#=J^zhVB1SEK;mL0r;c>BF~QZQp*i({HXh-?1=?_!mwZY}ojzmwENGdW-6b5>2iZaJgJ5 zutIF%Kw_3LWMuMkrKZ+!Y5G7L*CA=+x5D?H4@9j99^eYHN6QtS*cM?qMBEu z3g^xhGV>$fM^5G2NAf+RB=bH$m+vO)_lo2jNctUF{RWcQndVynCL3Djk|qgKrnH70R@jcwGL&qZCysYAHt zHB>TK{fPry^PAAhe0+Zz;QC=g%|D6Sw0?k_IGePL6SaA)sKU)eXUhcCD^LwLlXFVn z61DV*sKPBgTL*hz2j^hnj((|+4i?`v#}Dut;=?j-&0l7e|F2`~9zx5%q@{4@6GF0* z+&5Fh$`bCHfKQyLUFQvOSGADm1X10a2H3q>D7;?O@LLAB{B9xl58dH-cXUUp9eI=5 zrlcOLbAa6)LUKo$(<5{8?sZO)`t~J$Hg%cP^|u`DOZ2xKnbYHEOE(HKcU?t@axBjE0oL{c0C}>aTB5yMt&bxHclNAw?9=9}$6T z=%e7;sC5I{nq{haCOfD2HAAZToU3nC&AVasjjDy8Yg??EkZSSAsuJI;c8o>s*k9Bx z*`s#J9<_Z=wY?kE?pmvM*I8<}?pC{Xx7u+_)s9=Lc3`C1fstyfWnLK{^R9)blo2g> z!L?VOy)dzYvs=LnVwqRtDO|`-gC{#g0sDq|omChsK2lRyk#S>zpoMTFA4!eAF_pepXdlI%52v#Y$;vjZHqF z#7x?gSUezhaEs~xdj?dD(9ZhBd5$J=T<-c~!{7PSLz zQ9ERk+9A8uZgZ;LwpeYo%q#b9J|E&Pn>WZ44LoB;i#$OlJB_gUG2Sw+6};Cmuf`U3 zwGPyTd>8Yjv?>aSZ4xcyJ8OX2ro41c+HIRnY3#hq)oyXBtyVlMT3A(i;$#z1mN}_=rIoPxF(fsf7lMeM!0&?& zisoUhn^!*vem~%8zcO%?^wRT?DNU{YO0mqVpL;kJ`Ynurx^Uj>gcX%SEt!6_{KNJP5Ya@~Ns z0S@QfDZSZW=3al48e#i;LQ+%mvSYr~b?@w6Ct3-f=G9+s9Uif#>ZFu2#YZ{zMycz$ zQ?;ISwd2lGJML<=)iSTfS6EfKqHAZ!me{zUr=`b=tA#`E60h7pgU+wFs;;bh(9`-o zgpj-Rn+Vnu)yI0`K)v*2G}DLFs47ulLBsUh)WXrHRco)qte0pX!Rxt-`L2-Krj)A=3qHnQe~j8t0?&}zfVdh9yyiLcu0NP^QOg6zRQwq z^i<0fZ6CMG#fmcJ6zS7-r+$;kHATP4=s5(O1(4f zDZyM*dNdxzE7Zf3|M8gOe=@%hBRt*I8-J4>8A+KPoJ{c0vdq6ER_nk1n^}$D z9_h*Im7cmj5boSYuhqh-ypsuIzSDXC@4i&@H8+S)P@8ZQnK^%!aQ;i8*KQH6TO(X~ zwXiEwxR1}4dx@m}<)YuRRrHcqg-glHU2BEA&Jx{iK65eG;(d8|r?7c7dJucBc{LnJ zG~4+6An+{lF|S51E)p&oB;2=3xOcViw4K7!M+jdxLHIgOKl3@E%zI4q`CNA%?*iwW zPn0cl=KUf1!dBsh<-$vM2ruRSZ#L`0GUw(B(fexQIqH78 zm+%nL^&3U{eIo1S=qI9o1#=b+;GIg~1p48;5x5w>8=ribvtuCflT7Xn>_8_k2kQNw zkAIKo`nyQ|O=Lhk`u(B@I^hRsI~Hcw4&c3Q;KTSZUxAO{a}hqwV<2-E_zXT}=+6mT znY+Lp_%pVFyWo59*^Liz68NTYpbMScYW)Q!H(QSg+jKlPz~mq_&`zA# zi9k#|%-BDM$s6`BU_Jx0>$q*g|7Ub^j{R3*hXtJ+zD+yMjUft-gP*F;CyN8D1*sw4)y{E^Xp&@IvVlWj1M`-!Mbxihc5g4Fvm7{yRelp zcknDh?DavTL=R#o47vtpzJjL0r%T(Qd2l$q1rCD`!lA;!tSR?5Fz=ay$cMpE;uCxU zdYtgJ{V+K{n79pQj`Uopr$TEGJ{!c}!DqR_8@bkp=sa&w1iX{}o$w3rdGJg4o71wn zx7XlE_+5N1gqg>neehBAr-eg?6f1T*g;vqcYKErd9PuWiDAIsUi6tgoOwa18nfFrTRe zy$L6Y9?Ur*BnzK+&~worgISM3oF77p@##gcf=`86n?bCR5Y}J_;~C08R%PK_Q4R=ZwPT7@|@^4&O#yV7eNmE zUlcuL61*G!9zFv9EF3x*W-db6LqmQ-XWsR*VErUGbP)Qf`2P(P1EJ*1&__fMy&s*m z5J#MZ{(`<-^sp0Pa(>t__+fPIhkO!tp6HR6pc5zhja22MNE&WT8aE76I)2x2UPoEE`c>-Q=3+msQk z{fN);zm2xUfXxekiT*VF6?`kqm_*zH9~C{4afl=*Sjlyfj7h{F;uFc3L@Uv~MB2(~T%|<$fZOnD#ZRkC; z{Rt*lN9wa2L?^aa94EYjdyede&&2;T_(GWRSuqjzp%dpTR>0MwuizZGq7EMq`YQD0 za2I?m+>Ott@U8GC@a^z+m>6C`%&%a6Bbl!iCW-Bj~J`sCJk&;#dj)C_d36g`-Eom&1%zG-sRWYthMj(ZqlB z415-$kB4uDuY#?xiK}Q%gwaHKG$)nlIy^YFTVI3w@pi*RQgj*ogy=DL;TTq03?mh@ z5}nbBp=}Ja9`lIk?qBeK6d$ru45JfMj?M`_rUL!}AFdTc#>{2rV#(AoUx`obx%do% zr@*DKjsmBISayyWq9Jyv_{1`5v1Ejp!}t?DF<-;W>8BVbl46M9SRyHg)e_6@62nT1 zC93Le__Nc*uv%jCq#yk&Q?Z4@(Vyc}L;qjG?C3E>ZEU;fHoXVNKlWmLI`RJo_6f&c z1mB7N089kOkY!>uQ?EzgEI!dYVI6aJo!A#dkLp6-ML*ZWuL#Goi^RT)&Pt0VvSWAS zL)6BUz=!eq0%pEq*_mRGqFc~^fj7Xv3P-;V|BkL>@~3dDj^W?v?A&n{;W*|uj$I+{ zL}?p$8v2>=CGbS}GWaZ*oiC1vkDG)(0(~;ft{FEKCTqvNEF4d^ji;aZG2$Oj{KTcf z%ynEkTua;AU@~$%^BCVvKjYB7FmV#!i$7U7ek*z$KJUS-()e%SXwehcEfN;OXP^_$ z39RjQN_6Hlr3;;VNa0!ZZ_DUkmPux;Qdo~E+vHj) zthH$Nixi$KnUhTl_n&+RK5x@M`8MT4cnJFE@EI_%o$?HP6g@^bl{idJftQG$d>`z< zCk{>#w({($8Thb9Qr8RD#^b|Ymbwz=o>LNF)_yXvoyuBHX1_~i&q{d~pHHQqRB}`* z_ngYwOl2-o^xl3HpA@c}c8suodrrSQm)tM?q@6%N#3OG(U?Q%FBCg#(sg_BudX~b;`~=S48Fnlc9-g-%?hlQUDELuY=w*1@yIC;bvQ5Y~R8;S14Y zh4rs%>EG6hX6@_WX-luhrxO2Wm^GW;3HPJ(yyZp{1?*7^NdIGepJlboDANcx}kEc#$!=O6G;?jZmk zA)K`bJ{=#j% z)?oI0@yTSr$i7iHV-!BbN!F=wFg{+pPUQOw}_sz80P+S?83FDqqC>yC@12>b#qeTDtw&6v!8}@gmW0T zoRz}0$>^Q<6RSDIXZF|Vn?&zf4R6Lr`*{W?PI8FD>@0j6RWx3z&GK;IOL_k-=e1p=N$*9 zqkjNr!sLfMa@w3$bYdfq^{fAWBKI+La-FRLE~d{6xD>t;E`y1~ymI&g^eXs4n0d*2 zLpYyt&f^*L$<=uq(U;=SIV7Jr&nLI%v!?P3@nKEXGFJJ-c^)|}U!QjqKDp9Q{s_2{ zK0Dw$(2HPlY#!sE&;FSA0Q!UYKM6k#lTY$lr}?YV_t6izEB{@XF)uht*m|${6s!_+wRrJC$(a*<+aV{jc6s$!jXBG~Euf*qmcrx4#&x2X-g$rQTa^XVZ!V~aWjD9Q3 zdMUgdjz(v!3UwSj=*(lm1~{31qG0BQ{;9Ad4*p!Y=mz1UNH`FV zf``LB!gE95KJ-qwAFhWVg>CQ_cp}XEqaxy}hl?4)4bQ44C^VW^XEHe2Q6*#X2TO z@zMJXg~@xxbA?MzrXTW82|2LnA9VKg;_Kkc@nPOeCI}b(jn0{{m^D>0N%WFB^h&rG zZiTbp)vy(I!}H)~1G8)4?RgqSHQLf?eWeqHjcaCtd8dtd3v!lj&rZdeSD zz`qI}1Cw(~x#!Yx=r^O2L-cRy^mx#%=sa&JXN*!}qcj%%FML>2rPsi$ol@3vDeI;5 z7Ifx1gXb#c8B2MVQl7E21D^+^&r4f=eT_oU^-K-n7faP)g%)^#~+yqsKG#ypl24`p-kVcyGG zkL78!{T`kCSw`L{&lJ6!_gv-7Z}~QSK0w!JJOFP*XZ@BFKjlB5vrmJ@ZaV|Rhb;WrwXNd}8X8tt%$z86U@YVP{2a^+A%u5CPuWJYTHTXOQUkkqq z6JxHe@O9`f!?WNw;OpU6;JGmSW(9k?YdiXlqR*cJbDng)1hYQ z&{xnWYrG-~ejlA2<$4z;N4egClknj@P{H2hdJ8=p{X;lM*m@q!KJI!C&co+pxCCYm zR#d|W(QDz4;ClEl+yH+Hx4@sl`_X@eZ-@VY?||9w zDmK7Bq2CYx29sl5f5Q)=a}KFsPpPz_Zx+4M0zWJ~e>TjTbv+8RN4tK9pP(P|Nd@`Y z^%we6=lxfhVC~0#6p6KOH8wRO&O5TPljsr{d4P?3xCTN1q`aGZUUI?D_(pgU8GSjd_a6rrp@+gN;e41}S6K~nKQ#?-Gd}Fmm3IkS7o*<`$H1)R zO2)I2n6F|yt0sz16>(lgEQJ!!RUx9g$$M4IQB{!iQ^lB9rNP{D82P6vmwt%1D#pJm z6`ulhp0}zHz8RfotXc*$FF}lR6?0Lw6rH)Ks)ZScs%^s6CrCflLt)lz6?w0k^;OM0 zRm2E`W~lfivMy@Kbv2A(O}OYa#6wL2 zd^P@zPYwB@hViM%M$f?~4`zPtJYx;}l=(|DaxKoBwi4l5a#ZaCc!{))s)JcywcK;9 zNAz0ONG*GD&CB@QExP_?DE+%oHLr+X$1~P$f_awOhhg$wZ3aw^s?CJ;xn6*IuG$2c z`>%Zn?&2O+!u`TEufki{JE0#awB`h z%7^eFkFDhVQ}+S>tczOm%*xlqNB??@{_U2P8}T`U{vv!-c;zgZ9Jum2_;>VN;riq8 zUk49@IV;u^S1b3TkH&un%-q#-uBg9IbQ|MS&m7f#gwJ)N*RhY+Ur*a((V4IC<6-8d zo;a_M5TE)0^hjaHFL1Q5wGB?jhxx51C)aM}$5&R;256s-v zvmRG*4qUYu{VUr30JC=LiT_nUpffM4nA3Xp#8o`+s)gd;z#dUw3G1`}1aoFv#q&0B zW~+Y_tWqhypXmJzyWX_90IeJ8&|+P z(PM-g*)JN&hYjR`M)JS{2R=^xiMK}Lt>J$3T-uV~8k^zg(O1LU;Wn7(ZCnHEbv-b- zw~?IC_%i;tp_5}9?}C}5#&yD0@@nIHbmpjW1I*ktJ^;T#Kbzs*@MG{U_(@pD{Au_V zbYivfIhcIjcmU?TL*utF@z!_<{#DvG-zwa6417C$EPMxi9DEx*1ZG~EhQW8EGw=HU zX43yNQ}a4>Vzqe_JPLotyy;YUJ^JbJeefCZgD~;a`~-XsI{CKgJa`NG7~zHEU~*UU zR+zQW{20t0)ch2D8ErWiHC+xrgHEn%W`Aj7y)-k@aiP6a*7vP2{v@=DjHdow#ZWg^8c0Fqk-OVx2YoQ0a%2b)+g%?HuhLz_Q>Gx6UKbAE1SFKgoL z)Xe&AVofy@V@-MZzmI|WlY5&g;eF`j>gM<0mFVnQP4&XzoGqJHq2Gy5D@>km z>VS`;cf!PflN)A#X=0r=lLMQ4=wIVcu4{f5z7_pTn6=#e6?_Le>!|5Yn0=v%HQxL) zKCJO(a(>f2;?r^r`h)oY4R1yt3_ptg7yJbJFqpGh(`fh^^y6UGc+2tdbLfL$_NJC0 z@C)?$54;Oz|83%2*Ze8^tLVSMufu=ByM*%@%kROrC5x6+Tw&E&?G3(?7qEn{HL04V4jX|2Fi+_)La1zug4~pkE1x;J*_lU$tBXhvRbvyd0hc zN5a>_ntyh~S@g3JCeO66zc=TL9>>~mF2d&sKE=XKjc^6}A8?hhgM8K8BIP4W& z|8K$i{|atp?X=KmE7xjSiw|?!LSAZRu3N}Ut;9^r?f7W_cf-tG3;Cy&Ic>QYUGHr@ z%)GSR2eXH^Y=D`^7S189JYx&Ft935-OzvuBd|DpDpSf#!7$(MA9u>A`1@&foGyW4U_X*$a}5Vp>IVe4qLXt^U%qMtvA5WqhAk`8(VLJcc9-0 zlP6o}z%QcDf?t9c!Q{i%B{2Cg;u&}^J`3SDVLSW|ycm8L4us!_1KIFo-N!;K5Pwx$%n1c@L+sm;304nJPeM7hr@C32zUWZ z&TO^80DuC;m?Jca(Z!#Bh1 zBdddjS2ORcIbW@2eXUNwhdp<7DSVW+HSptbBW+KDo6yNutDE8H(OdChov!9=(|Q1% ze6^ajwwiphnzgoCpYb<*e6(e(R+B4MSEApA-UoA5S=|P&M}GijeYGXQFNxlk48IJg zz^@3~df`{m8S~Ywm$p=N)=OJDybqrY_&qoa{tzyLiS4#x_)GL0_y;&2X76re9#{W{ zUW!hvw&lXaY8&&unpkZsM<+hpYK7a5qb+&6jreSt=#4OYcN;O;c0PJ5`WUzg9uKdAFNPc7%V74J zw#(rb^oei>d=<=Gw_O9TL7xtj6WV6N-RN_KYX-sBqj$n{h0~vd=b?Mx8(}wm6WjwY zfSvGS*b6U%iODw35^X;8AavrnEgJ4ZkA+L%I5-bxt=aow;<@cUcq2ad!t7->V!mxN z`j4Ww>%6=JpN-D?Y99x`hdvp816~Th0P8(J1M5A10Fx8i6X9_2ZzqSeN5Z4fqv+>- zI0pS#I2HXvI2YaqbIxfW3UkhBCs((VTiTvRFUS8yxEkIM*TG-FtKcW#CgJv(a2tFv z+z!7Evo_l|!at+$748@$Y$aEBurAu^vxBwJz5yTNzx{KV{M=5wbzDL}yV0+JpMtN3 ze}x(I_9x*f=!}2IRQMM3>x4Vz!3)t3!Hb0TuUPBfu#>Wt>Ldqt^`eslyVk?RRo5%i}C+}VdtKIyy_{ssR#;P2tPVDf4wdqfv!yv}>jKf~u< z_)T~{{4IPRO#bO4hjbl4Cx__&gG~PqWbTpZPl>;qT-~_^Cg*oP51)k34*I+eegXaz zeg%FTejWc4Va+Xnz~l$_F!%#}PKC+UUHjor(2s}774GBU&(KeU55a@s!@^yAVa*}G z!$;8Hg1^Ck5d1C7p4IssK7XNqk3Jke3SR~PiqGxvpXlccuOZL4&wvM^Pk;x*m%*B6 z_Q502$HU|n_vtYC#61Qkhqx!fXN!N=H}GiMo&%o)PlU(7SHNT8bKwhwyEefWqF)SO z43CB{g~!5|!56?2;0s}Lk^5};D)g&i%|(C0lC`+B$z|C``dunp#{;tqzp(2s%174F3_xx&2&CO^36!?%fl z*FEsYwoVmrrRZ+$hyC4Mh0dCC>v}(ePc8bFa6QZ!!`%RXjov66ZGoH7kHRhRkML^vJGc!d zmfUOLpV2jMFc)reg@^siO@8o@PuzEizelfi7j4-G-S@!kac**ghyB!jAO7r#Zp{gQ zbFKT)hry4+L*XZ2V$#hy!9z^CIVX6A zboga>Buw7$42H=Y9`dl8yx}3AyZ6v1^XT47+cWUr2cHeUiO;w2Tj=bAZt{lbRP>L~ zPl3rBo^xPwg`54(%{e5L9OAhg|Hb0t34?>-74Wq%vF(`x6T_ZGa2`J7Mo%$(4Lb4Z zA^ttYk7o>e6FyU6V#Y(R@VL?0cRcJJo;G}#cMog9vmT#zbk2UBh491ZkHU|`Ps5CV zeFe-|IbMO^!RK}OJ>g^>2Xb-=>&ruq^*n>mC*o6}+IK3*bfQ4wy4QH+zcyU%$G^A>AqBvz9pNX8o>U{dTjyx;tr0taf+6 z#ANpa@Gkm41TzlZpTopqH#wo3IPBIwiMMWYLO0{nO&;iGOuESr-Nab;&-BAM1icFX zBiHKTxq6O)3q|ia7A}I1gG=BO;8J)HTnrC}%i&>g4SW(@1)mJp!kk5W>R|S%9_G4d zBtF&XqhRu3&#CY#^fTdl_$;^uJ{N9;FMx@+o{L~&vWLA)|1Zt@|7h-EE_&F%dYWi^ zHU7=;WY`T)fxF;oa05IYW*&QH!rkZ#;2!v9_!f8>?1Qba7q-K_umipg4u@}rBZSM# z;3)L9a2$L)%>LEmf|JqjgwtX6vL2^!(j4?G^mQ=#p=Tw`9@o=be9lKF zX1uIBFKg3#sp#b|;4=xIWcV7Gb?Ti8v#!0YDer20I0t%D;aT{we!X*G)~WY;n6>Y{ z0dB>AKFqrI-UO2eyyR^!>(sj#eGUFgVAisCDa;!8vSz*HL$9t)a<4ZOpW(EPgvk|N z)}xnP;blGgh#&6;@$nHqUe<_>JnvvUfka#vXfzPoI}{0j~Me2 zpFY;LZyEk~&}RV5n)L<4tPvk^8}kxAoLhY40bc|@ccMqbU8CSQRyCSQi%5})2vg?ld)cK-%5U!D`;%S87a z4>L!-i(xBm7s6q}eZ+7t&)dfu>E(I*nA2XKv5&RT%bBf@@$Ai_ExEBbA7-q2i(tmK zw-jbxdaGe#zPA=;%zK+)#-z6yCjNU{VdA#89VY&JJ7CsDZzs&y_O5}6|6U(VtoHW7 z#6xdCOkDM@gIPPh>tWVK?|m?9r}uuCnC#sMv+jDyKYi;N!$;9s3%yUm#6vIpavyQq zOD^iW7ylRVA(nb~!S|rQ1aE-JOMOql#6TbUu$LI$Gni{5n44;n(0x;WuE`QQxcZ73kYw)>I$4sBaQF>$Gn&yceHq;QjEmFgc-*eAq`W z>YIW71U}cnZ^JX;_h9z-zI`w`vu_tX51)5na$w(^@FMiL;KlHVupRyY4uao@L*N52 zIk1mh-KY6s3;GIt*r)o)fqm>3eKF{t;1drYgvp0}AH&J$&%!A%`$As^{1Lk56ZXx% zV)Wb4$szq?;Lk+w9}9m0Uj+XkZ2J`c5q%s?eD+@m9~FHWIkWF?d@d9HmO=2P@L>32 znAq#T8Yag2uZ2&?=NkANcrtt*d?kE7JP9WD`Y(rxxBjc(i}ASvCf@p|!&jltfZ0#` zXTnoNUv@f7{PbTB6DR$%;p_1^4ZeYXu7in_{#o#R^to^#JRi2f3t-};{|4BBz6jNcdjiWoN?c(Jz5HyVjBqZ+QSc8htaI z06z@Jz?@P0V`27-{xJ9{eB$9Pa2&i1j)I>PUUnAzBKivWB{&)03n#+t5&h%gx6!A; zoMZb_;CIod!n(fF;6vy^F!{ef75)}I9sU7c2gf^|LSz?^UUbKw#6GZEJHm=B+Yo&=AE^I%=4^I%=4b6{PkF1S?ui#NgL z!iD7j{t96$>#M(;KFQ(z8XJ$}Pi*vWho8r17yOEF_7m^{VcT-}Fg{0M9Yb_oBPuwQ!&C{{WNH7sUVo literal 0 HcmV?d00001 diff --git a/icuSources/data/translit/Spacedhan_Han.txt b/icuSources/data/translit/Spacedhan_Han.txt new file mode 100644 index 00000000..8f2f39ed --- /dev/null +++ b/icuSources/data/translit/Spacedhan_Han.txt @@ -0,0 +1,10 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Spacedhan_Han.txt +# Generated from CLDR: Thu Jul 20 14:55:41 PDT 2006 +# +::null; diff --git a/icuSources/data/translit/Syriac_Latin.txt b/icuSources/data/translit/Syriac_Latin.txt new file mode 100644 index 00000000..ed746144 --- /dev/null +++ b/icuSources/data/translit/Syriac_Latin.txt @@ -0,0 +1,56 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Syriac_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +Ü« <> sh; +ܞ > yh; +ܖ <> dr; +ܐ <> ʾ; +\u0711 > ʾ; +ܒ <> b; +ܓ <> g; +ܔ > g; +ܕ <> d; +ܗ <> h; +ܘ <> w; +ܙ <> z; +ܚ <> ḥ; +ܛ <> t\u0323; +ܜ > t\u0323; +ܝ <> y; +ܟ <> k; +Ü  <> l; +Ü¡ <> m; +Ü¢ <> n; +Ü£ <> s; +ܤ > s; +Ü¥ > Ê¿; +ܦ <> p; +ܧ > p; +ܨ <> á¹£; +Ü© <> q; +ܪ <> r; +ܬ <> t; +\u0730 > a; +\u0731 > a; +\u0732 <> a; +\u0733 > o; +\u0734 > o; +\u0735 > a; +\u0736 > e; +\u0737 > e; +\u0738 <> e; +\u0739 <> ē; +\u073A > i; +\u073B > i; +\u0742 <> i; +\u073D > u; +\u073E > u; +\u073C <> u; +\u073F <> o; +܍ > \*; diff --git a/icuSources/data/translit/Tamil_Bengali.txt b/icuSources/data/translit/Tamil_Bengali.txt new file mode 100644 index 00000000..f3d7590c --- /dev/null +++ b/icuSources/data/translit/Tamil_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Tamil_Devanagari.txt b/icuSources/data/translit/Tamil_Devanagari.txt new file mode 100644 index 00000000..b86606f9 --- /dev/null +++ b/icuSources/data/translit/Tamil_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Tamil_Gujarati.txt b/icuSources/data/translit/Tamil_Gujarati.txt new file mode 100644 index 00000000..697f5290 --- /dev/null +++ b/icuSources/data/translit/Tamil_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Tamil_Gurmukhi.txt b/icuSources/data/translit/Tamil_Gurmukhi.txt new file mode 100644 index 00000000..ad77928b --- /dev/null +++ b/icuSources/data/translit/Tamil_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Tamil_InterIndic.txt b/icuSources/data/translit/Tamil_InterIndic.txt index 1fb92631..f6a11883 100644 --- a/icuSources/data/translit/Tamil_InterIndic.txt +++ b/icuSources/data/translit/Tamil_InterIndic.txt @@ -1,76 +1,73 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Tamil-InterIndic -#:: NFD (NFC) ; - -\u0BC6\u0BBE>\uE04A;# VOWEL SIGN O -\u0BC7\u0BBE>\uE04B;# VOWEL SIGN OO -\u0BC6\u0BD7>\uE04C;# VOWEL SIGN AU -\u0B92\u0BD7>\uE014;# LETTER AU - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +ொ>\uE04A;# VOWEL SIGN O +ோ>\uE04B;# VOWEL SIGN OO +ௌ>\uE04C;# VOWEL SIGN AU +ஔ>\uE014;# LETTER AU \u0B82>\uE002; # SIGN ANUSVARA -\u0B83>\uE003; # SIGN VISARGA -\u0B85>\uE005; # LETTER A -\u0B86>\uE006; # LETTER AA -\u0B87>\uE007; # LETTER I -\u0B88>\uE008; # LETTER II -\u0B89>\uE009; # LETTER U -\u0B8A>\uE00A; # LETTER UU -\u0B8E>\uE00E; # LETTER E -\u0B8F>\uE00F; # LETTER EE -\u0B90>\uE010; # LETTER AI -\u0B92>\uE012; # LETTER O -\u0B93>\uE013; # LETTER OO -\u0B94>\uE014; # LETTER AU -\u0B95>\uE015; # LETTER KA -\u0B99>\uE019; # LETTER NGA -\u0B9A>\uE01A; # LETTER CA -\u0B9C>\uE01C; # LETTER JA -\u0B9E>\uE01E; # LETTER NYA -\u0B9F>\uE01F; # LETTER TTA -\u0BA3>\uE023; # LETTER NNA -\u0BA4>\uE024; # LETTER TA -\u0BA8>\uE028; # LETTER NA -\u0BA9>\uE029; # LETTER NNNA -\u0BAA>\uE02A; # LETTER PA -\u0BAE>\uE02E; # LETTER MA -\u0BAF>\uE02F; # LETTER YA -\u0BB0>\uE030; # LETTER RA -\u0BB1>\uE031; # LETTER RRA -\u0BB2>\uE032; # LETTER LA -\u0BB3>\uE033; # LETTER LLA -\u0BB4>\uE034; # LETTER LLLA -\u0BB5>\uE035; # LETTER VA -\u0BB7>\uE037; # LETTER SSA -\u0BB8>\uE038; # LETTER SA -\u0BB9>\uE039; # LETTER HA -\u0BBE>\uE03E; # VOWEL SIGN AA -\u0BBF>\uE03F; # VOWEL SIGN I +ஃ>\uE003; # SIGN VISARGA +அ>\uE005; # LETTER A +ஆ>\uE006; # LETTER AA +இ>\uE007; # LETTER I +ஈ>\uE008; # LETTER II +உ>\uE009; # LETTER U +ஊ>\uE00A; # LETTER UU +எ>\uE00E; # LETTER E +ஏ>\uE00F; # LETTER EE +ஐ>\uE010; # LETTER AI +ஒ>\uE012; # LETTER O +ஓ>\uE013; # LETTER OO +ஔ>\uE014; # LETTER AU +க>\uE015; # LETTER KA +ங>\uE019; # LETTER NGA +ச>\uE01A; # LETTER CA +ஜ>\uE01C; # LETTER JA +ஞ>\uE01E; # LETTER NYA +ட>\uE01F; # LETTER TTA +ண>\uE023; # LETTER NNA +த>\uE024; # LETTER TA +ந>\uE028; # LETTER NA +ன>\uE029; # LETTER NNNA +ப>\uE02A; # LETTER PA +à®®>\uE02E; # LETTER MA +ய>\uE02F; # LETTER YA +à®°>\uE030; # LETTER RA +à®±>\uE031; # LETTER RRA +ல>\uE032; # LETTER LA +ள>\uE033; # LETTER LLA +à®´>\uE034; # LETTER LLLA +வ>\uE035; # LETTER VA +ஶ>\uE036; # LETTER SHA +à®·>\uE037; # LETTER SSA +ஸ>\uE038; # LETTER SA +ஹ>\uE039; # LETTER HA +ா>\uE03E; # VOWEL SIGN AA +ி>\uE03F; # VOWEL SIGN I \u0BC0>\uE040; # VOWEL SIGN II -\u0BC1>\uE041; # VOWEL SIGN U -\u0BC2>\uE042; # VOWEL SIGN UU -\u0BC6>\uE046; # VOWEL SIGN E -\u0BC7>\uE047; # VOWEL SIGN EE -\u0BC8>\uE048; # VOWEL SIGN AI - +ு>\uE041; # VOWEL SIGN U +ூ>\uE042; # VOWEL SIGN UU +ெ>\uE046; # VOWEL SIGN E +ே>\uE047; # VOWEL SIGN EE +ை>\uE048; # VOWEL SIGN AI \u0BCD>\uE04D; # SIGN VIRAMA -\u0BD7>\uE057; # AU LENGTH MARK -\u0BE7>\uE067; # DIGIT ONE -\u0BE8>\uE068; # DIGIT TWO -\u0BE9>\uE069; # DIGIT THREE -\u0BEA>\uE06A; # DIGIT FOUR -\u0BEB>\uE06B; # DIGIT FIVE -\u0BEC>\uE06C; # DIGIT SIX -\u0BED>\uE06D; # DIGIT SEVEN -\u0BEE>\uE06E; # DIGIT EIGHT -\u0BEF>\uE06F; # DIGIT NINE -\u0BF0>\uE067\uE066; # UNMAPPED Tamil-InterIndic: NUMBER TEN -\u0BF1>\uE067\uE066\uE066; # UNMAPPED Tamil-InterIndic: NUMBER ONE HUNDRED -\u0BF2>\uE067\uE066\uE066\uE066;# UNMAPPED Tamil-InterIndic: NUMBER ONE THOUSAND -0>\ue066; - -# :: NFC (NFD) ; -# eof +ௗ>\uE057; # AU LENGTH MARK +௧>\uE067; # DIGIT ONE +௨>\uE068; # DIGIT TWO +௩>\uE069; # DIGIT THREE +௪>\uE06A; # DIGIT FOUR +௫>\uE06B; # DIGIT FIVE +௬>\uE06C; # DIGIT SIX +௭>\uE06D; # DIGIT SEVEN +௮>\uE06E; # DIGIT EIGHT +௯>\uE06F; # DIGIT NINE +௰>\uE067\uE066; # UNMAPPED Tamil-InterIndic: NUMBER TEN +௱>\uE067\uE066\uE066; # UNMAPPED Tamil-InterIndic: NUMBER ONE HUNDRED +௲>\uE067\uE066\uE066\uE066;# UNMAPPED Tamil-InterIndic: NUMBER ONE THOUSAND +0>\uE066; diff --git a/icuSources/data/translit/Tamil_Kannada.txt b/icuSources/data/translit/Tamil_Kannada.txt new file mode 100644 index 00000000..2e0063b7 --- /dev/null +++ b/icuSources/data/translit/Tamil_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Tamil_Latin.txt b/icuSources/data/translit/Tamil_Latin.txt new file mode 100644 index 00000000..4d809bb2 --- /dev/null +++ b/icuSources/data/translit/Tamil_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Tamil_Malayalam.txt b/icuSources/data/translit/Tamil_Malayalam.txt new file mode 100644 index 00000000..335bdf36 --- /dev/null +++ b/icuSources/data/translit/Tamil_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Tamil_Oriya.txt b/icuSources/data/translit/Tamil_Oriya.txt new file mode 100644 index 00000000..08fcacc5 --- /dev/null +++ b/icuSources/data/translit/Tamil_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Tamil_Telugu.txt b/icuSources/data/translit/Tamil_Telugu.txt new file mode 100644 index 00000000..69e95887 --- /dev/null +++ b/icuSources/data/translit/Tamil_Telugu.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Tamil_Telugu.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[0\u0B82-ஃஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹா-ூெ-ைொ-\u0BCDௗ௧-௲ஶ]; +::NFD; +::Tamil-InterIndic; +::InterIndic-Telugu; +::NFC; diff --git a/icuSources/data/translit/Telugu_Bengali.txt b/icuSources/data/translit/Telugu_Bengali.txt new file mode 100644 index 00000000..a8a9b229 --- /dev/null +++ b/icuSources/data/translit/Telugu_Bengali.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Bengali.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Bengali; +::NFC; diff --git a/icuSources/data/translit/Telugu_Devanagari.txt b/icuSources/data/translit/Telugu_Devanagari.txt new file mode 100644 index 00000000..744f1386 --- /dev/null +++ b/icuSources/data/translit/Telugu_Devanagari.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Devanagari.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Devanagari; +::NFC; diff --git a/icuSources/data/translit/Telugu_Gujarati.txt b/icuSources/data/translit/Telugu_Gujarati.txt new file mode 100644 index 00000000..5a8878bf --- /dev/null +++ b/icuSources/data/translit/Telugu_Gujarati.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Gujarati.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Gujarati; +::NFC; diff --git a/icuSources/data/translit/Telugu_Gurmukhi.txt b/icuSources/data/translit/Telugu_Gurmukhi.txt new file mode 100644 index 00000000..acde8f54 --- /dev/null +++ b/icuSources/data/translit/Telugu_Gurmukhi.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Gurmukhi.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Gurmukhi; +::NFC; diff --git a/icuSources/data/translit/Telugu_InterIndic.txt b/icuSources/data/translit/Telugu_InterIndic.txt index b8ce5306..d08cfef7 100644 --- a/icuSources/data/translit/Telugu_InterIndic.txt +++ b/icuSources/data/translit/Telugu_InterIndic.txt @@ -1,71 +1,73 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Telugu-InterIndic -#:: NFD (NFC) ; -\u0c46\u0c4d\u0c56>\ue048\ue04d; +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_InterIndic.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +\u0C46\u0C4D\u0C56>\uE048\uE04D; \u0C46\u0C56>\uE048;# VOWEL SIGN AI -\u0C01>\uE001; # SIGN CANDRABINDU -\u0C02>\uE002; # SIGN ANUSVARA -\u0C03>\uE003; # SIGN VISARGA -\u0C05>\uE005; # LETTER A -\u0C06>\uE006; # LETTER AA -\u0C07>\uE007; # LETTER I -\u0C08>\uE008; # LETTER II -\u0C09>\uE009; # LETTER U -\u0C0A>\uE00A; # LETTER UU -\u0C0B>\uE00B; # LETTER VOCALIC R -\u0C0C>\uE00C; # LETTER VOCALIC L -\u0C0E>\uE00E; # LETTER E -\u0C0F>\uE00F; # LETTER EE -\u0C10>\uE010; # LETTER AI -\u0C12>\uE012; # LETTER O -\u0C13>\uE013; # LETTER OO -\u0C14>\uE014; # LETTER AU -\u0C15>\uE015; # LETTER KA -\u0C16>\uE016; # LETTER KHA -\u0C17>\uE017; # LETTER GA -\u0C18>\uE018; # LETTER GHA -\u0C19>\uE019; # LETTER NGA -\u0C1A>\uE01A; # LETTER CA -\u0C1B>\uE01B; # LETTER CHA -\u0C1C>\uE01C; # LETTER JA -\u0C1D>\uE01D; # LETTER JHA -\u0C1E>\uE01E; # LETTER NYA -\u0C1F>\uE01F; # LETTER TTA -\u0C20>\uE020; # LETTER TTHA -\u0C21>\uE021; # LETTER DDA -\u0C22>\uE022; # LETTER DDHA -\u0C23>\uE023; # LETTER NNA -\u0C24>\uE024; # LETTER TA -\u0C25>\uE025; # LETTER THA -\u0C26>\uE026; # LETTER DA -\u0C27>\uE027; # LETTER DHA -\u0C28>\uE028; # LETTER NA -\u0C2A>\uE02A; # LETTER PA -\u0C2B>\uE02B; # LETTER PHA -\u0C2C>\uE02C; # LETTER BA -\u0C2D>\uE02D; # LETTER BHA -\u0C2E>\uE02E; # LETTER MA -\u0C2F>\uE02F; # LETTER YA -\u0C30>\uE030; # LETTER RA -\u0C31>\uE031; # LETTER RRA -\u0C32>\uE032; # LETTER LA -\u0C33>\uE033; # LETTER LLA -\u0C35>\uE035; # LETTER VA -\u0C36>\uE036; # LETTER SHA -\u0C37>\uE037; # LETTER SSA -\u0C38>\uE038; # LETTER SA -\u0C39>\uE039; # LETTER HA +ఁ>\uE001; # SIGN CANDRABINDU +ం>\uE002; # SIGN ANUSVARA +ః>\uE003; # SIGN VISARGA +అ>\uE005; # LETTER A +ఆ>\uE006; # LETTER AA +ఇ>\uE007; # LETTER I +ఈ>\uE008; # LETTER II +ఉ>\uE009; # LETTER U +ఊ>\uE00A; # LETTER UU +ఋ>\uE00B; # LETTER VOCALIC R +ఌ>\uE00C; # LETTER VOCALIC L +ఎ>\uE00E; # LETTER E +ఏ>\uE00F; # LETTER EE +ఐ>\uE010; # LETTER AI +ఒ>\uE012; # LETTER O +ఓ>\uE013; # LETTER OO +ఔ>\uE014; # LETTER AU +క>\uE015; # LETTER KA +ఖ>\uE016; # LETTER KHA +గ>\uE017; # LETTER GA +ఘ>\uE018; # LETTER GHA +ఙ>\uE019; # LETTER NGA +చ>\uE01A; # LETTER CA +ఛ>\uE01B; # LETTER CHA +జ>\uE01C; # LETTER JA +ఝ>\uE01D; # LETTER JHA +ఞ>\uE01E; # LETTER NYA +ట>\uE01F; # LETTER TTA +à° >\uE020; # LETTER TTHA +à°¡>\uE021; # LETTER DDA +à°¢>\uE022; # LETTER DDHA +à°£>\uE023; # LETTER NNA +à°¤>\uE024; # LETTER TA +à°¥>\uE025; # LETTER THA +à°¦>\uE026; # LETTER DA +à°§>\uE027; # LETTER DHA +à°¨>\uE028; # LETTER NA +à°ª>\uE02A; # LETTER PA +à°«>\uE02B; # LETTER PHA +à°¬>\uE02C; # LETTER BA +à°­>\uE02D; # LETTER BHA +à°®>\uE02E; # LETTER MA +à°¯>\uE02F; # LETTER YA +à°°>\uE030; # LETTER RA +à°±>\uE031; # LETTER RRA +à°²>\uE032; # LETTER LA +à°³>\uE033; # LETTER LLA +à°µ>\uE035; # LETTER VA +à°¶>\uE036; # LETTER SHA +à°·>\uE037; # LETTER SSA +à°¸>\uE038; # LETTER SA +à°¹>\uE039; # LETTER HA \u0C3E>\uE03E; # VOWEL SIGN AA \u0C3F>\uE03F; # VOWEL SIGN I \u0C40>\uE040; # VOWEL SIGN II -\u0C41>\uE041; # VOWEL SIGN U -\u0C42>\uE042; # VOWEL SIGN UU -\u0C43>\uE043; # VOWEL SIGN VOCALIC R -\u0C44>\uE044; # VOWEL SIGN VOCALIC RR +ు>\uE041; # VOWEL SIGN U +ూ>\uE042; # VOWEL SIGN UU +ృ>\uE043; # VOWEL SIGN VOCALIC R +ౄ>\uE044; # VOWEL SIGN VOCALIC RR \u0C46>\uE046; # VOWEL SIGN E \u0C47>\uE047; # VOWEL SIGN EE \u0C4A>\uE04A; # VOWEL SIGN O @@ -74,17 +76,15 @@ \u0C4D>\uE04D; # SIGN VIRAMA \u0C55>\uE055; # LENGTH MARK \u0C56>\uE056; # AI LENGTH MARK -\u0C60>\uE060; # LETTER VOCALIC RR -\u0C61>\uE061; # LETTER VOCALIC LL -\u0C66>\uE066; # DIGIT ZERO -\u0C67>\uE067; # DIGIT ONE -\u0C68>\uE068; # DIGIT TWO -\u0C69>\uE069; # DIGIT THREE -\u0C6A>\uE06A; # DIGIT FOUR -\u0C6B>\uE06B; # DIGIT FIVE -\u0C6C>\uE06C; # DIGIT SIX -\u0C6D>\uE06D; # DIGIT SEVEN -\u0C6E>\uE06E; # DIGIT EIGHT -\u0C6F>\uE06F; # DIGIT NINE -# :: NFC (NFD) ; -# eof +à± >\uE060; # LETTER VOCALIC RR +ౡ>\uE061; # LETTER VOCALIC LL +౦>\uE066; # DIGIT ZERO +౧>\uE067; # DIGIT ONE +౨>\uE068; # DIGIT TWO +౩>\uE069; # DIGIT THREE +౪>\uE06A; # DIGIT FOUR +౫>\uE06B; # DIGIT FIVE +౬>\uE06C; # DIGIT SIX +à±­>\uE06D; # DIGIT SEVEN +à±®>\uE06E; # DIGIT EIGHT +౯>\uE06F; # DIGIT NINE diff --git a/icuSources/data/translit/Telugu_Kannada.txt b/icuSources/data/translit/Telugu_Kannada.txt new file mode 100644 index 00000000..5ef8d344 --- /dev/null +++ b/icuSources/data/translit/Telugu_Kannada.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Kannada.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Kannada; +::NFC; diff --git a/icuSources/data/translit/Telugu_Latin.txt b/icuSources/data/translit/Telugu_Latin.txt new file mode 100644 index 00000000..2ec4f785 --- /dev/null +++ b/icuSources/data/translit/Telugu_Latin.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Latin; +::NFC; diff --git a/icuSources/data/translit/Telugu_Malayalam.txt b/icuSources/data/translit/Telugu_Malayalam.txt new file mode 100644 index 00000000..76968131 --- /dev/null +++ b/icuSources/data/translit/Telugu_Malayalam.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Malayalam.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Malayalam; +::NFC; diff --git a/icuSources/data/translit/Telugu_Oriya.txt b/icuSources/data/translit/Telugu_Oriya.txt new file mode 100644 index 00000000..bc700a23 --- /dev/null +++ b/icuSources/data/translit/Telugu_Oriya.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Oriya.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Oriya; +::NFC; diff --git a/icuSources/data/translit/Telugu_Tamil.txt b/icuSources/data/translit/Telugu_Tamil.txt new file mode 100644 index 00000000..5a3a9817 --- /dev/null +++ b/icuSources/data/translit/Telugu_Tamil.txt @@ -0,0 +1,14 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Telugu_Tamil.txt +# Generated from CLDR: Thu Jul 20 16:27:18 PDT 2006 +# +::[ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-à°¹\u0C3E-ౄ\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56à± -ౡ౦-౯]; +::NFD; +::Telugu-InterIndic; +::InterIndic-Tamil; +::NFC; diff --git a/icuSources/data/translit/Thaana_Latin.txt b/icuSources/data/translit/Thaana_Latin.txt new file mode 100644 index 00000000..c514eb8e --- /dev/null +++ b/icuSources/data/translit/Thaana_Latin.txt @@ -0,0 +1,440 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Thaana_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:19 PDT 2006 +# +tta <> ޘ\u07A6 ; +ḥa <> ޙ\u07A6 ; +kha <> ޚ\u07A6 ; +dha <> ޛ\u07A6 ; +Å¡a < ޝ\u07A6 ; +á¹£a <> ޞ\u07A6 ; +ḏa <> ޟ\u07A6 ; +t\u0324a <> Þ \u07A6 ; +Ê¿a <> Þ¢\u07A6 ; +ǧa <> Þ£\u07A6 ; +qa <> Þ¤\u07A6 ; +ha <> ހ\u07A6 ; +Å¡a <> ށ\u07A6 ; +na <> ނ\u07A6 ; +ra <> ރ\u07A6 ; +ba <> ބ\u07A6 ; +ḷa <> ޅ\u07A6 ; +ka <> ކ\u07A6 ; +‘a <> އ\u07A6 ; +va <> ވ\u07A6 ; +ma <> މ\u07A6 ; +fa <> ފ\u07A6 ; +da <> ދ\u07A6 ; +ta <> ތ\u07A6 ; +la <> ލ\u07A6 ; +ga <> ގ\u07A6 ; +ña <> ޏ\u07A6 ; +sa <> ސ\u07A6 ; +ḍa <> ޑ\u07A6 ; +ja <> ޖ\u07A6 ; +ča <> ޗ\u07A6 ; +za <> ޒ\u07A6 ; +á¹­a <> ޓ\u07A6 ; +pa <> ޕ\u07A6 ; +ya <> ޔ\u07A6 ; +ttā <> ޘ\u07A7 ; +ḥā <> ޙ\u07A7 ; +khā <> ޚ\u07A7 ; +dhā <> ޛ\u07A7 ; +šā < ޝ\u07A7 ; +ṣā <> ޞ\u07A7 ; +ḏā <> ޟ\u07A7 ; +t\u0324ā <> Þ \u07A7 ; +ʿā <> Þ¢\u07A7 ; +ǧā <> Þ£\u07A7 ; +qā <> Þ¤\u07A7 ; +hā <> ހ\u07A7 ; +šā <> ށ\u07A7 ; +nā <> ނ\u07A7 ; +rā <> ރ\u07A7 ; +bā <> ބ\u07A7 ; +ḷā <> ޅ\u07A7 ; +kā <> ކ\u07A7 ; +‘ā <> އ\u07A7 ; +vā <> ވ\u07A7 ; +mā <> މ\u07A7 ; +fā <> ފ\u07A7 ; +dā <> ދ\u07A7 ; +tā <> ތ\u07A7 ; +lā <> ލ\u07A7 ; +gā <> ގ\u07A7 ; +ñā <> ޏ\u07A7 ; +sā <> ސ\u07A7 ; +ḍā <> ޑ\u07A7 ; +jā <> ޖ\u07A7 ; +čā <> ޗ\u07A7 ; +zā <> ޒ\u07A7 ; +ṭā <> ޓ\u07A7 ; +pā <> ޕ\u07A7 ; +yā <> ޔ\u07A7 ; +tti <> ޘ\u07A8 ; +ḥi <> ޙ\u07A8 ; +khi <> ޚ\u07A8 ; +dhi <> ޛ\u07A8 ; +Å¡i < ޝ\u07A8 ; +á¹£i <> ޞ\u07A8 ; +ḏi <> ޟ\u07A8 ; +t\u0324i <> Þ \u07A8 ; +Ê¿i <> Þ¢\u07A8 ; +ǧi <> Þ£\u07A8 ; +qi <> Þ¤\u07A8 ; +hi <> ހ\u07A8 ; +Å¡i <> ށ\u07A8 ; +ni <> ނ\u07A8 ; +ri <> ރ\u07A8 ; +bi <> ބ\u07A8 ; +ḷi <> ޅ\u07A8 ; +ki <> ކ\u07A8 ; +‘i <> އ\u07A8 ; +vi <> ވ\u07A8 ; +mi <> މ\u07A8 ; +fi <> ފ\u07A8 ; +di <> ދ\u07A8 ; +ti <> ތ\u07A8 ; +li <> ލ\u07A8 ; +gi <> ގ\u07A8 ; +ñi <> ޏ\u07A8 ; +si <> ސ\u07A8 ; +ḍi <> ޑ\u07A8 ; +ji <> ޖ\u07A8 ; +či <> ޗ\u07A8 ; +zi <> ޒ\u07A8 ; +á¹­i <> ޓ\u07A8 ; +pi <> ޕ\u07A8 ; +yi <> ޔ\u07A8 ; +ttÄ« <> ޘ\u07A9 ; +ḥī <> ޙ\u07A9 ; +khÄ« <> ޚ\u07A9 ; +dhÄ« <> ޛ\u07A9 ; +Å¡Ä« < ޝ\u07A9 ; +ṣī <> ޞ\u07A9 ; +ḏī <> ޟ\u07A9 ; +t\u0324Ä« <> Þ \u07A9 ; +Ê¿Ä« <> Þ¢\u07A9 ; +ǧī <> Þ£\u07A9 ; +qÄ« <> Þ¤\u07A9 ; +hÄ« <> ހ\u07A9 ; +Å¡Ä« <> ށ\u07A9 ; +nÄ« <> ނ\u07A9 ; +rÄ« <> ރ\u07A9 ; +bÄ« <> ބ\u07A9 ; +ḷī <> ޅ\u07A9 ; +kÄ« <> ކ\u07A9 ; +‘ī <> އ\u07A9 ; +vÄ« <> ވ\u07A9 ; +mÄ« <> މ\u07A9 ; +fÄ« <> ފ\u07A9 ; +dÄ« <> ދ\u07A9 ; +tÄ« <> ތ\u07A9 ; +lÄ« <> ލ\u07A9 ; +gÄ« <> ގ\u07A9 ; +ñī <> ޏ\u07A9 ; +sÄ« <> ސ\u07A9 ; +ḍī <> ޑ\u07A9 ; +jÄ« <> ޖ\u07A9 ; +čī <> ޗ\u07A9 ; +zÄ« <> ޒ\u07A9 ; +á¹­Ä« <> ޓ\u07A9 ; +pÄ« <> ޕ\u07A9 ; +yÄ« <> ޔ\u07A9 ; +ttu <> ޘ\u07AA ; +ḥu <> ޙ\u07AA ; +khu <> ޚ\u07AA ; +dhu <> ޛ\u07AA ; +Å¡u < ޝ\u07AA ; +á¹£u <> ޞ\u07AA ; +ḏu <> ޟ\u07AA ; +t\u0324u <> Þ \u07AA ; +Ê¿u <> Þ¢\u07AA ; +ǧu <> Þ£\u07AA ; +qu <> Þ¤\u07AA ; +hu <> ހ\u07AA ; +Å¡u <> ށ\u07AA ; +nu <> ނ\u07AA ; +ru <> ރ\u07AA ; +bu <> ބ\u07AA ; +ḷu <> ޅ\u07AA ; +ku <> ކ\u07AA ; +‘u <> އ\u07AA ; +vu <> ވ\u07AA ; +mu <> މ\u07AA ; +fu <> ފ\u07AA ; +du <> ދ\u07AA ; +tu <> ތ\u07AA ; +lu <> ލ\u07AA ; +gu <> ގ\u07AA ; +ñu <> ޏ\u07AA ; +su <> ސ\u07AA ; +ḍu <> ޑ\u07AA ; +ju <> ޖ\u07AA ; +ču <> ޗ\u07AA ; +zu <> ޒ\u07AA ; +á¹­u <> ޓ\u07AA ; +pu <> ޕ\u07AA ; +yu <> ޔ\u07AA ; +ttÅ« <> ޘ\u07AB ; +ḥū <> ޙ\u07AB ; +khÅ« <> ޚ\u07AB ; +dhÅ« <> ޛ\u07AB ; +Å¡Å« < ޝ\u07AB ; +ṣū <> ޞ\u07AB ; +ḏū <> ޟ\u07AB ; +t\u0324Å« <> Þ \u07AB ; +Ê¿Å« <> Þ¢\u07AB ; +ǧū <> Þ£\u07AB ; +qÅ« <> Þ¤\u07AB ; +hÅ« <> ހ\u07AB ; +Å¡Å« <> ށ\u07AB ; +nÅ« <> ނ\u07AB ; +rÅ« <> ރ\u07AB ; +bÅ« <> ބ\u07AB ; +ḷū <> ޅ\u07AB ; +kÅ« <> ކ\u07AB ; +‘ū <> އ\u07AB ; +vÅ« <> ވ\u07AB ; +mÅ« <> މ\u07AB ; +fÅ« <> ފ\u07AB ; +dÅ« <> ދ\u07AB ; +tÅ« <> ތ\u07AB ; +lÅ« <> ލ\u07AB ; +gÅ« <> ގ\u07AB ; +ñū <> ޏ\u07AB ; +sÅ« <> ސ\u07AB ; +ḍū <> ޑ\u07AB ; +jÅ« <> ޖ\u07AB ; +čū <> ޗ\u07AB ; +zÅ« <> ޒ\u07AB ; +á¹­Å« <> ޓ\u07AB ; +pÅ« <> ޕ\u07AB ; +yÅ« <> ޔ\u07AB ; +tte <> ޘ\u07AC ; +ḥe <> ޙ\u07AC ; +khe <> ޚ\u07AC ; +dhe <> ޛ\u07AC ; +Å¡e < ޝ\u07AC ; +á¹£e <> ޞ\u07AC ; +ḏe <> ޟ\u07AC ; +t\u0324e <> Þ \u07AC ; +Ê¿e <> Þ¢\u07AC ; +ǧe <> Þ£\u07AC ; +qe <> Þ¤\u07AC ; +he <> ހ\u07AC ; +Å¡e <> ށ\u07AC ; +ne <> ނ\u07AC ; +re <> ރ\u07AC ; +be <> ބ\u07AC ; +ḷe <> ޅ\u07AC ; +ke <> ކ\u07AC ; +‘e <> އ\u07AC ; +ve <> ވ\u07AC ; +me <> މ\u07AC ; +fe <> ފ\u07AC ; +de <> ދ\u07AC ; +te <> ތ\u07AC ; +le <> ލ\u07AC ; +ge <> ގ\u07AC ; +ñe <> ޏ\u07AC ; +se <> ސ\u07AC ; +ḍe <> ޑ\u07AC ; +je <> ޖ\u07AC ; +če <> ޗ\u07AC ; +ze <> ޒ\u07AC ; +á¹­e <> ޓ\u07AC ; +pe <> ޕ\u07AC ; +ye <> ޔ\u07AC ; +ttē <> ޘ\u07AD ; +ḥē <> ޙ\u07AD ; +khē <> ޚ\u07AD ; +dhē <> ޛ\u07AD ; +šē < ޝ\u07AD ; +ṣē <> ޞ\u07AD ; +ḏē <> ޟ\u07AD ; +t\u0324ē <> Þ \u07AD ; +ʿē <> Þ¢\u07AD ; +ǧē <> Þ£\u07AD ; +qē <> Þ¤\u07AD ; +hē <> ހ\u07AD ; +šē <> ށ\u07AD ; +nē <> ނ\u07AD ; +rē <> ރ\u07AD ; +bē <> ބ\u07AD ; +ḷē <> ޅ\u07AD ; +kē <> ކ\u07AD ; +‘ē <> އ\u07AD ; +vē <> ވ\u07AD ; +mē <> މ\u07AD ; +fē <> ފ\u07AD ; +dē <> ދ\u07AD ; +tē <> ތ\u07AD ; +lē <> ލ\u07AD ; +gē <> ގ\u07AD ; +ñē <> ޏ\u07AD ; +sē <> ސ\u07AD ; +ḍē <> ޑ\u07AD ; +jē <> ޖ\u07AD ; +čē <> ޗ\u07AD ; +zē <> ޒ\u07AD ; +ṭē <> ޓ\u07AD ; +pē <> ޕ\u07AD ; +yē <> ޔ\u07AD ; +tto <> ޘ\u07AE ; +ḥo <> ޙ\u07AE ; +kho <> ޚ\u07AE ; +dho <> ޛ\u07AE ; +Å¡o < ޝ\u07AE ; +á¹£o <> ޞ\u07AE ; +ḏo <> ޟ\u07AE ; +t\u0324o <> Þ \u07AE ; +Ê¿o <> Þ¢\u07AE ; +ǧo <> Þ£\u07AE ; +qo <> Þ¤\u07AE ; +ho <> ހ\u07AE ; +Å¡o <> ށ\u07AE ; +no <> ނ\u07AE ; +ro <> ރ\u07AE ; +bo <> ބ\u07AE ; +ḷo <> ޅ\u07AE ; +ko <> ކ\u07AE ; +‘o <> އ\u07AE ; +vo <> ވ\u07AE ; +mo <> މ\u07AE ; +fo <> ފ\u07AE ; +do <> ދ\u07AE ; +to <> ތ\u07AE ; +lo <> ލ\u07AE ; +go <> ގ\u07AE ; +ño <> ޏ\u07AE ; +so <> ސ\u07AE ; +ḍo <> ޑ\u07AE ; +jo <> ޖ\u07AE ; +čo <> ޗ\u07AE ; +zo <> ޒ\u07AE ; +á¹­o <> ޓ\u07AE ; +po <> ޕ\u07AE ; +yo <> ޔ\u07AE ; +ttō <> ޘ\u07AF ; +ḥō <> ޙ\u07AF ; +khō <> ޚ\u07AF ; +dhō <> ޛ\u07AF ; +šō < ޝ\u07AF ; +ṣō <> ޞ\u07AF ; +ḏō <> ޟ\u07AF ; +t\u0324ō <> Þ \u07AF ; +ʿō <> Þ¢\u07AF ; +ǧō <> Þ£\u07AF ; +qō <> Þ¤\u07AF ; +hō <> ހ\u07AF ; +šō <> ށ\u07AF ; +nō <> ނ\u07AF ; +rō <> ރ\u07AF ; +bō <> ބ\u07AF ; +ḷō <> ޅ\u07AF ; +kō <> ކ\u07AF ; +‘ō <> އ\u07AF ; +vō <> ވ\u07AF ; +mō <> މ\u07AF ; +fō <> ފ\u07AF ; +dō <> ދ\u07AF ; +tō <> ތ\u07AF ; +lō <> ލ\u07AF ; +gō <> ގ\u07AF ; +ñō <> ޏ\u07AF ; +sō <> ސ\u07AF ; +ḍō <> ޑ\u07AF ; +jō <> ޖ\u07AF ; +čō <> ޗ\u07AF ; +zō <> ޒ\u07AF ; +ṭō <> ޓ\u07AF ; +pō <> ޕ\u07AF ; +yō <> ޔ\u07AF ; +tt <> ޘ\u07B0 ; +ḥ <> ޙ\u07B0 ; +kh <> ޚ\u07B0 ; +dh <> ޛ\u07B0 ; +Å¡ < ޝ\u07B0 ; +á¹£ <> ޞ\u07B0 ; +ḏ <> ޟ\u07B0 ; +t\u0324 <> Þ \u07B0 ; +Ê¿ <> Þ¢\u07B0 ; +ǧ <> Þ£\u07B0 ; +q <> Þ¤\u07B0 ; +h <> ހ\u07B0 ; +Å¡ <> ށ\u07B0 ; +n <> ނ\u07B0 ; +r <> ރ\u07B0 ; +b <> ބ\u07B0 ; +ḷ <> ޅ\u07B0 ; +k <> ކ\u07B0 ; +‘ <> އ\u07B0 ; +v <> ވ\u07B0 ; +m <> މ\u07B0 ; +f <> ފ\u07B0 ; +d <> ދ\u07B0 ; +t <> ތ\u07B0 ; +l <> ލ\u07B0 ; +g <> ގ\u07B0 ; +ñ <> ޏ\u07B0 ; +s <> ސ\u07B0 ; +ḍ <> ޑ\u07B0 ; +j <> ޖ\u07B0 ; +č <> ޗ\u07B0 ; +z <> ޒ\u07B0 ; +á¹­ <> ޓ\u07B0 ; +p <> ޕ\u07B0 ; +y <> ޔ\u07B0 ; +h < ހ ; +Å¡ < ށ ; +n < ނ ; +r < ރ ; +b < ބ ; +ḷ < ޅ ; +k < ކ ; +‘ < އ ; +v < ވ ; +m < މ ; +f < ފ ; +d < ދ ; +t < ތ ; +l < ލ ; +g < ގ ; +ñ < ޏ ; +s < ސ ; +ḍ < ޑ ; +j < ޖ ; +č < ޗ ; +z < ޒ ; +á¹­ < ޓ ; +p < ޕ ; +y < ޔ ; +tt < ޘ ; +ḥ < ޙ ; +kh < ޚ ; +dh < ޛ ; +Å¡ < ޝ ; +á¹£ < ޞ ; +ḏ < ޟ ; +t\u0324 < Þ  ; +Ê¿ < Þ¢ ; +ǧ < Þ£ ; +q < Þ¤ ; +a <> \u07A6 ; +ā <> \u07A7 ; +i <> \u07A8 ; +Ä« <> \u07A9 ; +u <> \u07AA ; +Å« <> \u07AB ; +e <> \u07AC ; +ē <> \u07AD ; +o <> \u07AE ; +ō <> \u07AF ; +< \u07B0 ; diff --git a/icuSources/data/translit/ThaiLogical_Latin.txt b/icuSources/data/translit/ThaiLogical_Latin.txt index 558fd84a..16a4ab61 100644 --- a/icuSources/data/translit/ThaiLogical_Latin.txt +++ b/icuSources/data/translit/ThaiLogical_Latin.txt @@ -1,160 +1,102 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Thai-Latin -# This set of rules follows ISO 11940 -# see http://homepage.mac.com/sirbinks/pdf/Thai.r2.pdf -# except that that does not mention an implicit vowel, so we use oÌ£ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: ThaiLogical_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:19 PDT 2006 # -# The transcription is fairly ugly, so we ought to also do the UNGEGN version -# see: http://www.eki.ee/wgrs/rom1_th.pdf -# and probably make that the main variant. - -# Note: this is an internal file. The NFD/NFC is handled externally, in the index -# The insertion of spaces between words, the reversal of the vowels -# and the conversion of space to semicolon are done *outside* of these rules. -# So as far as these rules are concerned, the vowels are in logical order! - -# insert implicit vowel (and remove it going the other way) -# COMMENTED out: the implicit vowel positions cannot be predicted algorithmically -#$consonant = [ก-ฮ]; -#$vowel = [ะ-ฺเ-ไ็]; - -#{ ( $consonant ) } [^$vowel ] > | $1  ; -# > oÌ£ ; -# < oÌ£ ; - $notAbove = [^\p{ccc=0}\p{ccc=above}] ; $notBelow = [^\p{ccc=0}\p{ccc=below}] ; - -# Consonants -# Warning: the 'h's need to be handled carefully! -# What we really want to say is the following, but we can't -# $notHAccent = !($notAbove* ̄ | $notBelow* Ì£) ; - -# Since the only accents we care about that could cause problems are free-standing accents below, we use instead: $freeStandingBelow = [\u0325 ]; -$hAccent = [ ̄ Ì£]; +$hAccent = [ \u0304 \u0323]; $notHAccent0 = [^$freeStandingBelow$hAccent]; $notHAccent1 = $freeStandingBelow [^$hAccent]; - -ห > h̄ ; # THAI CHARACTER HO HIP - ห | $1 < h ($notAbove*) ̄; # backward case, account for reordering -ฮ <> hÌ£ ; # THAI CHARACTER HO NOKHUK - -ข <> k̄h ; # THAI CHARACTER KHO KHAI -ฃ <> ḳ̄h ; # THAI CHARACTER KHO KHUAT -ฅ <> kʹh ; # THAI CHARACTER KHO KHON -ฆ <> kÌ£h ; # THAI CHARACTER KHO RAKHANG -ค < kh } $notHAccent1 ; # THAI CHARACTER KHO KHWAI -ค <> kh } $notHAccent0 ; # THAI CHARACTER KHO KHWAI +ห > h\u0304 ; # THAI CHARACTER HO HIP +ห | $1 < h ($notAbove*) \u0304; # backward case, account for reordering +ฮ <> h\u0323 ; # THAI CHARACTER HO NOKHUK +ข <> k\u0304h ; # THAI CHARACTER KHO KHAI +ฃ <> k\u0323\u0304h ; # THAI CHARACTER KHO KHUAT +ฅ <> kʹh ; # THAI CHARACTER KHO KHON +ฆ <> k\u0323h ; # THAI CHARACTER KHO RAKHANG +ค < kh } $notHAccent1 ; # THAI CHARACTER KHO KHWAI +ค <> kh } $notHAccent0 ; # THAI CHARACTER KHO KHWAI ก <> k ; # THAI CHARACTER KO KAI - -ภ <> pÌ£h ; # THAI CHARACTER PHO SAMPHAO -ผ <> p̄h ; # THAI CHARACTER PHO PHUNG +ภ <> p\u0323h ; # THAI CHARACTER PHO SAMPHAO +ผ <> p\u0304h ; # THAI CHARACTER PHO PHUNG พ < ph } $notHAccent1 ; # THAI CHARACTER PHO PHAN พ <> ph } $notHAccent0 ; # THAI CHARACTER PHO PHAN ป <> p ; # THAI CHARACTER PO PLA - -ฉ <> c̄h ; # THAI CHARACTER CHO CHING -ฌ <> cÌ£h ; # THAI CHARACTER CHO CHOE +ฉ <> c\u0304h ; # THAI CHARACTER CHO CHING +ฌ <> c\u0323h ; # THAI CHARACTER CHO CHOE ช < ch } $notHAccent1 ; # THAI CHARACTER CHO CHANG ช <> ch } $notHAccent0 ; # THAI CHARACTER CHO CHANG จ <> c ; # THAI CHARACTER CHO CHAN - -ฐ <> ṭ̄h ; # THAI CHARACTER THO THAN -ฑ <> ṯh ; # THAI CHARACTER THO NANGMONTHO +ฐ <> t\u0323\u0304h ; # THAI CHARACTER THO THAN +ฑ <> t\u0331h ; # THAI CHARACTER THO NANGMONTHO ฒ <> tʹh ; # THAI CHARACTER THO PHUTHAO -ถ <> t̄h ; # THAI CHARACTER THO THUNG -ธ <> tÌ£h ; # THAI CHARACTER THO THONG +ถ <> t\u0304h ; # THAI CHARACTER THO THUNG +ธ <> t\u0323h ; # THAI CHARACTER THO THONG ท < th } $notHAccent1 ; # THAI CHARACTER THO THAHAN ท <> th } $notHAccent0 ; # THAI CHARACTER THO THAHAN -#Note: TO PATAK deviates from ISO since t-dotunder + h would be ambigous. So it uses vertical tick. -ฏ <> tÌ© ; # THAI CHARACTER TO PATAK +ฏ <> t\u0329 ; # THAI CHARACTER TO PATAK ต <> t ; # THAI CHARACTER TO TAO - -# since there is no singleton g (generated), don't worry about that. ง <> ng ; # THAI CHARACTER NGO NGU -ณ <> nÌ£ ; # THAI CHARACTER NO NEN +ณ <> n\u0323 ; # THAI CHARACTER NO NEN น <> n ; # THAI CHARACTER NO NU - -ญ <> yÌ£ ; # THAI CHARACTER YO YING -ฎ <> dÌ£ ; # THAI CHARACTER DO CHADA +ญ <> y\u0323 ; # THAI CHARACTER YO YING +ฎ <> d\u0323 ; # THAI CHARACTER DO CHADA ด <> d ; # THAI CHARACTER DO DEK - บ <> b ; # THAI CHARACTER BO BAIMAI -ฝ <> f̄ ; # THAI CHARACTER FO FA - ฝ | $1 < f ($notAbove*) ̄; # backward case, account for reordering - +ฝ <> f\u0304 ; # THAI CHARACTER FO FA +ฝ | $1 < f ($notAbove*) \u0304; # backward case, account for reordering ม <> m ; # THAI CHARACTER MO MA ย <> y ; # THAI CHARACTER YO YAK ร <> r ; # THAI CHARACTER RO RUA ฤ <> v ; # THAI CHARACTER RU ฦ <> ł ; # THAI CHARACTER LU ว <> w ; # THAI CHARACTER WO WAEN - -ศ <> ṣ̄ ; # THAI CHARACTER SO SALA*** - ศ | $1 < s Ì£ ($notAbove*) ̄; # backward case, account for reordering -ษ <> s̄ʹ ; # THAI CHARACTER SO RUSI -ส > s̄ ; # THAI CHARACTER SO SUA*** - ส | $1 < s ($notAbove*) ̄; # backward case, account for reordering - -ฬ <> lÌ£ ; # THAI CHARACTER LO CHULA +ศ <> s\u0323\u0304 ; # THAI CHARACTER SO SALA*** +ศ | $1 < s \u0323 ($notAbove*) \u0304; # backward case, account for reordering +ษ <> s\u0304ʹ ; # THAI CHARACTER SO RUSI +ส > s\u0304 ; # THAI CHARACTER SO SUA*** +ส | $1 < s ($notAbove*) \u0304; # backward case, account for reordering +ฬ <> l\u0323 ; # THAI CHARACTER LO CHULA ล <> l ; # THAI CHARACTER LO LING ฟ <> f ; # THAI CHARACTER FO FAN - อ <> x ; # THAI CHARACTER O ANG ซ <> s ; # THAI CHARACTER SO SO - -# vowels - - ั <> aÌ£ ; # THAI CHARACTER MAI HAN-AKAT - -า > ā ; # THAI CHARACTER SARA AA - า | $1 < a ($notAbove*) ̄; # backward case, account for reordering - -# We deviate from ISO for SARA AM for disambiguation -ำ > a ̉; # THAI CHARACTER SARA AM - ำ | $1 < a ($notAbove*) ̉ ; # backward case, account for reordering - +\u0E31 <> a\u0323 ; # THAI CHARACTER MAI HAN-AKAT +า > a\u0304 ; # THAI CHARACTER SARA AA +า | $1 < a ($notAbove*) \u0304; # backward case, account for reordering +ำ > a \u0309; # THAI CHARACTER SARA AM +ำ | $1 < a ($notAbove*) \u0309 ; # backward case, account for reordering ะ <> a ; # THAI CHARACTER SARA A - ี <> ī ; # THAI CHARACTER SARA II - ี | $1 < i ($notAbove*) ̄ ; # backward case, account for reordering - - ื <> ụ̄ ; # THAI CHARACTER SARA UEE - ื | $1 < u Ì£ ($notAbove*) ̄ ; # backward case, account for reordering - - ึ <> uÌ£ ; # THAI CHARACTER SARA UE - ู <> ū ; # THAI CHARACTER SARA UU - ู | $1 < u ($notAbove*) ̄ ; # backward case, account for reordering - - ุ <> u ; # THAI CHARACTER SARA U - +\u0E35 <> i\u0304 ; # THAI CHARACTER SARA II +\u0E35 | $1 < i ($notAbove*) \u0304 ; # backward case, account for reordering +\u0E37 <> u\u0323\u0304 ; # THAI CHARACTER SARA UEE +\u0E37 | $1 < u \u0323 ($notAbove*) \u0304 ; # backward case, account for reordering +\u0E36 <> u\u0323 ; # THAI CHARACTER SARA UE +\u0E39 <> u\u0304 ; # THAI CHARACTER SARA UU +\u0E39 | $1 < u ($notAbove*) \u0304 ; # backward case, account for reordering +\u0E38 <> u ; # THAI CHARACTER SARA U ฯ <> ‡ ; # THAI CHARACTER PAIYANNOI - -# ฿ <> XXX ; # THAI CURRENCY SYMBOL BAHT - เ <> e ; # THAI CHARACTER SARA E แ <> æ ; # THAI CHARACTER SARA AE โ <> o ; # THAI CHARACTER SARA O ใ <> ı ; # THAI CHARACTER SARA AI MAIMUAN -ไ <> iÌ£ ; # THAI CHARACTER SARA AI MAIMALAI +ไ <> i\u0323 ; # THAI CHARACTER SARA AI MAIMALAI ๅ <> ɨ ; # THAI CHARACTER LAKKHANGYAO - ็ <> ̆ ; # THAI CHARACTER MAITAIKHU - ่ <> ̀ ; # THAI CHARACTER MAI EK - ้ <> ̂ ; # THAI CHARACTER MAI THO - ๊ <> ́ ; # THAI CHARACTER MAI TRI - ๋ <> ̌ ; # THAI CHARACTER MAI CHATTAWA - ์ <> ̒ ; # THAI CHARACTER THANTHAKHAT - ๎ <> '~' ; # THAI CHARACTER YAMAKKAN - -# We deviate from ISO for disambiguation - ํ <> ̊ ; # THAI CHARACTER NIKHAHIT - -๏ <> § ; # THAI CHARACTER FONGMAN - +\u0E47 <> \u0306 ; # THAI CHARACTER MAITAIKHU +\u0E48 <> \u0300 ; # THAI CHARACTER MAI EK +\u0E49 <> \u0302 ; # THAI CHARACTER MAI THO +\u0E4A <> \u0301 ; # THAI CHARACTER MAI TRI +\u0E4B <> \u030C ; # THAI CHARACTER MAI CHATTAWA +\u0E4C <> \u0312 ; # THAI CHARACTER THANTHAKHAT +\u0E4E <> '~' ; # THAI CHARACTER YAMAKKAN +\u0E4D <> \u030A ; # THAI CHARACTER NIKHAHIT +๏ <> '§' ; # THAI CHARACTER FONGMAN ๐ <> 0 ; # THAI DIGIT ZERO ๑ <> 1 ; # THAI DIGIT ONE ๒ <> 2 ; # THAI DIGIT TWO @@ -165,23 +107,14 @@ $notHAccent1 = $freeStandingBelow [^$hAccent]; ๗ <> 7 ; # THAI DIGIT SEVEN ๘ <> 8 ; # THAI DIGIT EIGHT ๙ <> 9 ; # THAI DIGIT NINE - ๚ <> '||' ; # THAI CHARACTER ANGKHANKHU - ๛ <> » ; # THAI CHARACTER KHOMUT ๆ <> « ; # THAI CHARACTER MAIYAMOK - -# moved down to make shorter first -#Note: PHINTHU deviates from ISO since underring causes canonical problems. So it uses spacing tick below. - ฺ <> ˌ ; # THAI CHARACTER PHINTHU - ิ <> i ; # THAI CHARACTER SARA I - -# fallbacks - +\u0E3A <> ˌ ; # THAI CHARACTER PHINTHU +\u0E34 <> i ; # THAI CHARACTER SARA I | k < g ; | k < h ; | c < j ; | k < q ; | s < z ; - :: (lower); diff --git a/icuSources/data/translit/Thai_Latin.txt b/icuSources/data/translit/Thai_Latin.txt new file mode 100644 index 00000000..1ce874eb --- /dev/null +++ b/icuSources/data/translit/Thai_Latin.txt @@ -0,0 +1,16 @@ +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Thai_Latin.txt +# Generated from CLDR: Thu Jul 20 16:27:19 PDT 2006 +# +::[[:thai:] ก-\u0E3Aเ-๛]; +::NFD; +::Thai-ThaiSemi; +::Any-BreakInternal; +::Thai-ThaiLogical; +::ThaiLogical-Latin; +::NFC; diff --git a/icuSources/data/translit/Thai_ThaiLogical.txt b/icuSources/data/translit/Thai_ThaiLogical.txt index 52764c55..f4bb6d4d 100644 --- a/icuSources/data/translit/Thai_ThaiLogical.txt +++ b/icuSources/data/translit/Thai_ThaiLogical.txt @@ -1,26 +1,16 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# This reverses the Thai LogicalOrderException vowels, and does (part of) spaces -# The rules that convert space into semicolon are in another file; -# since they have to come BEFORE the break iterator - -$thai = [[:thai:] \u0E01-\u0E3A\u0E40-\u0E5B] ; - -# First convert the semicolon back - +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Thai_ThaiLogical.txt +# Generated from CLDR: Thu Jul 20 16:27:19 PDT 2006 +# +$thai = [[:thai:] ก-\u0E3Aเ-๛] ; ' ' < $thai { '; ' } $thai; - -# Remove any other spaces between thai letters - < $thai { ' ' } $thai; - -# Now vowels $thai_reversing = [[:Logical_Order_Exception:] & $thai]; $thai_non_reversing = [$thai - $thai_reversing ]; - ( $thai_reversing ) ( $thai_non_reversing ) > $2 $1; -# other direction -$2 $1 < ( $thai_non_reversing ) ( $thai_reversing ) ; \ No newline at end of file +$2 $1 < ( $thai_non_reversing ) ( $thai_reversing ) ; diff --git a/icuSources/data/translit/Thai_ThaiSemi.txt b/icuSources/data/translit/Thai_ThaiSemi.txt index ce1f3ff0..64555f21 100644 --- a/icuSources/data/translit/Thai_ThaiSemi.txt +++ b/icuSources/data/translit/Thai_ThaiSemi.txt @@ -1,11 +1,11 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# The rules that convert space into semicolon are in this file; -# since they have to come BEFORE the break iterator. - -$thai = [[:thai:] \u0E01-\u0E3A\u0E40-\u0E5B] ; - -$thai { ' ' } $thai > '; ' ; \ No newline at end of file +# *************************************************************************** +# * +# * Copyright (C) 2004-2006, International Business Machines +# * Corporation; Unicode, Inc.; and others. All Rights Reserved. +# * +# *************************************************************************** +# File: Thai_ThaiSemi.txt +# Generated from CLDR: Thu Jul 20 16:27:19 PDT 2006 +# +$thai = [[:thai:] ก-\u0E3Aเ-๛] ; +$thai { ' ' } $thai > '; ' ; diff --git a/icuSources/data/translit/Tone_Digit.txt b/icuSources/data/translit/Tone_Digit.txt deleted file mode 100644 index 489d79f1..00000000 --- a/icuSources/data/translit/Tone_Digit.txt +++ /dev/null @@ -1,11 +0,0 @@ -#-------------------------------------------------------------------- -# Copyright (c) 1999-2004, International Business Machines -# Corporation and others. All Rights Reserved. -#-------------------------------------------------------------------- - -# Only intended for internal use -\u0304 <> 1; -\u0301 <> 2; -\u030C <> 3; -\u0300 <> 4; - < 5; \ No newline at end of file diff --git a/icuSources/data/translit/el.txt b/icuSources/data/translit/el.txt index 23cc342e..24416b35 100644 --- a/icuSources/data/translit/el.txt +++ b/icuSources/data/translit/el.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2004, International Business Machines +// * Copyright (C) 2004-2006, International Business Machines // * Corporation and others. All Rights Reserved. // * // *************************************************************************** diff --git a/icuSources/data/translit/en.txt b/icuSources/data/translit/en.txt index 6c6ccd63..0dc8feb5 100644 --- a/icuSources/data/translit/en.txt +++ b/icuSources/data/translit/en.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2004, International Business Machines +// * Copyright (C) 2004-2006, International Business Machines // * Corporation and others. All Rights Reserved. // * // *************************************************************************** diff --git a/icuSources/data/translit/root.txt b/icuSources/data/translit/root.txt index 96e9f48d..0404315c 100644 --- a/icuSources/data/translit/root.txt +++ b/icuSources/data/translit/root.txt @@ -1,778 +1,1156 @@ -// *************************************************************************** +// *************************************************************************** // * -// * Copyright (C) 2004, International Business Machines -// * Corporation and others. All Rights Reserved. +// * Copyright (C) 2004-2006, International Business Machines +// * Corporation; Unicode, Inc.; and others. All Rights Reserved. // * // *************************************************************************** -// - -root{ - - RuleBasedTransliteratorIDs{ -//-------------------------------------------------------------------- -//-------------------------------------------------------------------- -// -// TRANSLITERATOR INDEX FILE. This file lists the non-algorithmic -// system transliterators. It allows arbitrary mappings between -// transliterator IDs and file names, and also allows the system to -// define aliases for transliterators, so that "Latin-Hangul", for -// example, can be implemented transparently as the compound -// "Latin-Jamo;Jamo-Hangul". Internal IDs may also be defined; these -// are invisible to the user, but can be composed together by the -// system to create visible transliterators. -// -// Blank lines and lines beginning with '#' are ignored. -// -// Lines in this file have one of the following forms (text not -// enclosed by <> is literal): -// -// :file::: -// :internal::: -// :alias: -// -// is the ID of the system transliterator being defined. These -// are public IDs enumerated by Transliterator.getAvailableIDs(), -// unless the second field is "internal". +// File: root.txt +// Generated from CLDR: Thu Jul 20 16:27:11 PDT 2006 // -// is a ResourceReader resource name. Currently these refer -// to file names under com/ibm/text/resources. This string is passed -// directly to ResourceReader, together with . -// -// is the character encoding to use when reading ; -// passed directly to ResourceReader. E.g., "UTF8". -// -// is either "FORWARD" or "REVERSE". -// -// is a string to be passed directly to -// Transliterator.getInstance(). The returned Transliterator object -// then has its ID changed to and is returned. - +root { + RuleBasedTransliteratorIDs { + Tone-Digit { + alias {"Pinyin-NumericPinyin"} + } + Digit-Tone { + alias {"NumericPinyin-Pinyin"} + } + Any-Accents { + file { + resource:process(transliterator) {"Any_Accents.txt"} + direction {"FORWARD"} + } + } + Accents-Any { + file { + resource:process(transliterator) {"Any_Accents.txt"} + direction {"REVERSE"} + } + } -// Bidirectional rule files + Any-Publishing { + file { + resource:process(transliterator) {"Any_Publishing.txt"} + direction {"FORWARD"} + } + } + Publishing-Any { + file { + resource:process(transliterator) {"Any_Publishing.txt"} + direction {"REVERSE"} + } + } - Fullwidth-Halfwidth { + Arabic-Latin { file { - resource:include{"Fullwidth_Halfwidth.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Arabic_Latin.txt"} + direction {"FORWARD"} + } } - Halfwidth-Fullwidth { + Latin-Arabic { file { - resource:include{"Fullwidth_Halfwidth.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Arabic_Latin.txt"} + direction {"REVERSE"} + } } - Latin-Cyrillic { + Bengali-Devanagari { file { - resource:include{"Cyrillic_Latin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Bengali_Devanagari.txt"} + direction {"FORWARD"} + } } - Cyrillic-Latin { + + Bengali-Gujarati { file { - resource:include{"Cyrillic_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Bengali_Gujarati.txt"} + direction {"FORWARD"} + } } - Latin-Hebrew { + Bengali-Gurmukhi { file { - resource:include{"Hebrew_Latin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Bengali_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Hebrew-Latin { + + Bengali-InterIndic { + internal { + resource:process(transliterator) {"Bengali_InterIndic.txt"} + direction {"FORWARD"} + } + } + + Bengali-Kannada { file { - resource:include{"Hebrew_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Bengali_Kannada.txt"} + direction {"FORWARD"} + } } - Latin-Arabic { + Bengali-Latin { file { - resource:include{"Arabic_Latin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Bengali_Latin.txt"} + direction {"FORWARD"} + } } - Arabic-Latin { + + Bengali-Malayalam { file { - resource:include{"Arabic_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Bengali_Malayalam.txt"} + direction {"FORWARD"} + } } - Tone-Digit { - internal { - resource:include{"Tone_Digit.txt"} - direction{"FORWARD"} - } + Bengali-Oriya { + file { + resource:process(transliterator) {"Bengali_Oriya.txt"} + direction {"FORWARD"} + } } - Digit-Tone { - internal { - resource:include{"Tone_Digit.txt"} - direction{"REVERSE"} - } + + Bengali-Tamil { + file { + resource:process(transliterator) {"Bengali_Tamil.txt"} + direction {"FORWARD"} + } } - Latin-NumericPinyin { + Bengali-Telugu { file { - resource:include{"Latin_NumericPinyin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Bengali_Telugu.txt"} + direction {"FORWARD"} + } } - NumericPinyin-Latin { + + Cyrillic-Latin { + file { + resource:process(transliterator) {"Cyrillic_Latin.txt"} + direction {"FORWARD"} + } + } + Latin-Cyrillic { file { - resource:include{"Latin_NumericPinyin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Cyrillic_Latin.txt"} + direction {"REVERSE"} + } } - Han-Spacedhan { - internal { - resource:include{"Han_Spacedhan.txt"} - direction{"FORWARD"} - } + Devanagari-Bengali { + file { + resource:process(transliterator) {"Devanagari_Bengali.txt"} + direction {"FORWARD"} + } } - Spacedhan-Han { - alias {"null"} + + Devanagari-Gujarati { + file { + resource:process(transliterator) {"Devanagari_Gujarati.txt"} + direction {"FORWARD"} + } } - Han-Latin { + Devanagari-Gurmukhi { file { - resource:include{"Han_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Devanagari_Gurmukhi.txt"} + direction {"FORWARD"} + } } -//Latin-Han:file:Transliterator_Han_Latin.txt:UTF8:REVERSE # no round trip! - Latin-Han { - alias {"null"} + + Devanagari-InterIndic { + internal { + resource:process(transliterator) {"Devanagari_InterIndic.txt"} + direction {"FORWARD"} + } } -// Comment these out; they are only for testing -// Latin-Han/definition:file:Transliterator_Han_Latin_Definition.txt:UTF8:REVERSE -// Han-Latin/definition:file:Transliterator_Han_Latin_Definition.txt:UTF8:FORWARD + Devanagari-Kannada { + file { + resource:process(transliterator) {"Devanagari_Kannada.txt"} + direction {"FORWARD"} + } + } -//Latin-Han/EDICT:file:Transliterator_Han_Latin_EDICT.txt:UTF8:REVERSE -//Han-Latin/EDICT:file:Transliterator_Han_Latin_EDICT.txt:UTF8:FORWARD + Devanagari-Latin { + file { + resource:process(transliterator) {"Devanagari_Latin.txt"} + direction {"FORWARD"} + } + } - Latin-Greek { + Devanagari-Malayalam { file { - resource:include{"Greek_Latin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Devanagari_Malayalam.txt"} + direction {"FORWARD"} + } } - Greek-Latin { + + Devanagari-Oriya { file { - resource:include{"Greek_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Devanagari_Oriya.txt"} + direction {"FORWARD"} + } } - Latin-Greek/UNGEGN { + Devanagari-Tamil { file { - resource:include{"Greek_Latin_UNGEGN.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Devanagari_Tamil.txt"} + direction {"FORWARD"} + } } - Greek-Latin/UNGEGN { + + Devanagari-Telugu { file { - resource:include{"Greek_Latin_UNGEGN.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Devanagari_Telugu.txt"} + direction {"FORWARD"} + } } - Latin-Katakana { + Fullwidth-Halfwidth { file { - resource:include{"Latin_Katakana.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Fullwidth_Halfwidth.txt"} + direction {"FORWARD"} + } } - Katakana-Latin { + Halfwidth-Fullwidth { file { - resource:include{"Latin_Katakana.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Fullwidth_Halfwidth.txt"} + direction {"REVERSE"} + } } - Latin-Hiragana { + Georgian-Latin { file { - resource:include{"Hiragana_Latin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Georgian_Latin.txt"} + direction {"FORWARD"} + } } - Hiragana-Latin { + Latin-Georgian { file { - resource:include{"Hiragana_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Georgian_Latin.txt"} + direction {"REVERSE"} + } } -//Thai Stuff: will change if we get \b into Transliterator + Greek-Latin { + file { + resource:process(transliterator) {"Greek_Latin.txt"} + direction {"FORWARD"} + } + } + Latin-Greek { + file { + resource:process(transliterator) {"Greek_Latin.txt"} + direction {"REVERSE"} + } + } - Thai-ThaiSemi { - internal { - resource:include{"Thai_ThaiSemi.txt"} - direction{"FORWARD"} - } + Greek-Latin/UNGEGN { + file { + resource:process(transliterator) {"Greek_Latin_UNGEGN.txt"} + direction {"FORWARD"} + } + } + Latin-Greek/UNGEGN { + file { + resource:process(transliterator) {"Greek_Latin_UNGEGN.txt"} + direction {"REVERSE"} + } } - Thai-ThaiLogical { - internal { - resource:include{"Thai_ThaiLogical.txt"} - direction{"FORWARD"} - } + Gujarati-Bengali { + file { + resource:process(transliterator) {"Gujarati_Bengali.txt"} + direction {"FORWARD"} + } } - ThaiLogical-Thai { - internal { - resource:include{"Thai_ThaiLogical.txt"} - direction{"REVERSE"} - } + + Gujarati-Devanagari { + file { + resource:process(transliterator) {"Gujarati_Devanagari.txt"} + direction {"FORWARD"} + } } - ThaiLogical-Latin { - internal { - resource:include{"ThaiLogical_Latin.txt"} - direction{"FORWARD"} - } + Gujarati-Gurmukhi { + file { + resource:process(transliterator) {"Gujarati_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Latin-ThaiLogical { + + Gujarati-InterIndic { internal { - resource:include{"ThaiLogical_Latin.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Gujarati_InterIndic.txt"} + direction {"FORWARD"} + } } -// Must use the order below! -// We need two separate passes because of the Thai vowel reversal -// Thai-Logical also converts spaces to semicolons. That has to be done before we insert latin spaces + Gujarati-Kannada { + file { + resource:process(transliterator) {"Gujarati_Kannada.txt"} + direction {"FORWARD"} + } + } - Thai-Latin { - alias {"[[:thai:] \u0E01-\u0E3A\u0E40-\u0E5B];NFD;Thai-ThaiSemi;Any-BreakInternal;Thai-ThaiLogical;ThaiLogical-Latin;NFC"} + Gujarati-Latin { + file { + resource:process(transliterator) {"Gujarati_Latin.txt"} + direction {"FORWARD"} + } } - Latin-Thai { - alias {"[[:Latin:][:Mn:][:Me:] \\u0020 \;0-9|~\u00A7\u00AB\u00BB\u02B9\u0374\u2021\u02CC];NFD;Latin-ThaiLogical;ThaiLogical-Thai;NFC"} + + Gujarati-Malayalam { + file { + resource:process(transliterator) {"Gujarati_Malayalam.txt"} + direction {"FORWARD"} + } } -// end of Thai Stuff + Gujarati-Oriya { + file { + resource:process(transliterator) {"Gujarati_Oriya.txt"} + direction {"FORWARD"} + } + } - Hiragana-Katakana { + Gujarati-Tamil { file { - resource:include{"Hiragana_Katakana.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Gujarati_Tamil.txt"} + direction {"FORWARD"} + } } - Katakana-Hiragana { + + Gujarati-Telugu { file { - resource:include{"Hiragana_Katakana.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Gujarati_Telugu.txt"} + direction {"FORWARD"} + } } - Any-Accents { + Gurmukhi-Bengali { file { - resource:include{"Any_Accents.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Gurmukhi_Bengali.txt"} + direction {"FORWARD"} + } } - Accents-Any { + + Gurmukhi-Devanagari { file { - resource:include{"Any_Accents.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Gurmukhi_Devanagari.txt"} + direction {"FORWARD"} + } } - Any-Publishing { + Gurmukhi-Gujarati { file { - resource:include{"Any_Publishing.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Gurmukhi_Gujarati.txt"} + direction {"FORWARD"} + } } - Publishing-Any { + + Gurmukhi-InterIndic { + internal { + resource:process(transliterator) {"Gurmukhi_InterIndic.txt"} + direction {"FORWARD"} + } + } + + Gurmukhi-Kannada { file { - resource:include{"Any_Publishing.txt"} - direction{"REVERSE"} - } + resource:process(transliterator) {"Gurmukhi_Kannada.txt"} + direction {"FORWARD"} + } } -// Korean -// N.B. Don't end Latin-Jamo with NFC; that produces Hangul. For -// Hangul output use Latin-Hangul. + Gurmukhi-Latin { + file { + resource:process(transliterator) {"Gurmukhi_Latin.txt"} + direction {"FORWARD"} + } + } - LowerLatin-Jamo { - internal { - resource:include{"Latin_Jamo.txt"} - direction{"FORWARD"} - } + Gurmukhi-Malayalam { + file { + resource:process(transliterator) {"Gurmukhi_Malayalam.txt"} + direction {"FORWARD"} + } } - Jamo-LowerLatin { - internal { - resource:include{"Latin_Jamo.txt"} - direction{"REVERSE"} - } + + Gurmukhi-Oriya { + file { + resource:process(transliterator) {"Gurmukhi_Oriya.txt"} + direction {"FORWARD"} + } } - Latin-Jamo { - alias {"['A-Za-z\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E1\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u01FB\u0200-\u021B\u021E-\u021F\u0226-\u0233\u1E00-\u1E99\u1EA0-\u1EF9\u212A-\u212B];NFD;Lower;LowerLatin-Jamo"} + + Gurmukhi-Tamil { + file { + resource:process(transliterator) {"Gurmukhi_Tamil.txt"} + direction {"FORWARD"} + } } - Jamo-Latin { - alias {"['\u1100-\u1112\u1161-\u1175\u11A8-\u11C2\uAC00-\uD7A3];NFD;Jamo-LowerLatin;NFC"} + + Gurmukhi-Telugu { + file { + resource:process(transliterator) {"Gurmukhi_Telugu.txt"} + direction {"FORWARD"} + } } - Latin-Hangul { - alias {"['A-Za-z\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E1\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u01FB\u0200-\u021B\u021E-\u021F\u0226-\u0233\u1E00-\u1E99\u1EA0-\u1EF9\u212A-\u212B];NFD;Lower;LowerLatin-Jamo;NFC"} + + Han-Latin { + file { + resource:process(transliterator) {"Han_Latin.txt"} + direction {"FORWARD"} + } } - Hangul-Latin { - alias {"['\u1100-\u1112\u1161-\u1175\u11A8-\u11C2\u3131-\u313F\u3141-\u3143\u3145-\u3163\u3200-\u321C\u3260-\u327B\uAC00-\uD7A3\uFF07\uFFA1-\uFFAF\uFFB1-\uFFB3\uFFB5-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC];NFKD;Jamo-LowerLatin;NFC"} + Latin-Han { + file { + resource:process(transliterator) {"Han_Latin.txt"} + direction {"REVERSE"} + } } -// Inter-Indic composed rules - Latin-InterIndic { + Han-Spacedhan { internal { - resource:include{"Latin_InterIndic.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Han_Spacedhan.txt"} + direction {"FORWARD"} + } } - Devanagari-InterIndic { + Spacedhan-Han { internal { - resource:include{"Devanagari_InterIndic.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"Han_Spacedhan.txt"} + direction {"REVERSE"} + } } - Bengali-InterIndic { - internal { - resource:include{"Bengali_InterIndic.txt"} - direction{"FORWARD"} - } + + Hangul-Latin { + file { + resource:process(transliterator) {"Hangul_Latin.txt"} + direction {"FORWARD"} + } } - Gurmukhi-InterIndic { - internal { - resource:include{"Gurmukhi_InterIndic.txt"} - direction{"FORWARD"} - } + + Hebrew-Latin { + file { + resource:process(transliterator) {"Hebrew_Latin.txt"} + direction {"FORWARD"} + } } - Gujarati-InterIndic { - internal { - resource:include{"Gujarati_InterIndic.txt"} - direction{"FORWARD"} - } + Latin-Hebrew { + file { + resource:process(transliterator) {"Hebrew_Latin.txt"} + direction {"REVERSE"} + } } - Oriya-InterIndic { - internal { - resource:include{"Oriya_InterIndic.txt"} - direction{"FORWARD"} - } + + Hiragana-Katakana { + file { + resource:process(transliterator) {"Hiragana_Katakana.txt"} + direction {"FORWARD"} + } } - Tamil-InterIndic { - internal { - resource:include{"Tamil_InterIndic.txt"} - direction{"FORWARD"} - } + Katakana-Hiragana { + file { + resource:process(transliterator) {"Hiragana_Katakana.txt"} + direction {"REVERSE"} + } } - Telugu-InterIndic { - internal { - resource:include{"Telugu_InterIndic.txt"} - direction{"FORWARD"} - } + + Hiragana-Latin { + file { + resource:process(transliterator) {"Hiragana_Latin.txt"} + direction {"FORWARD"} + } } - Kannada-InterIndic { + Latin-Hiragana { + file { + resource:process(transliterator) {"Hiragana_Latin.txt"} + direction {"REVERSE"} + } + } + + InterIndic-Bengali { internal { - resource:include{"Kannada_InterIndic.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Bengali.txt"} + direction {"FORWARD"} + } } - Malayalam-InterIndic { + + InterIndic-Devanagari { internal { - resource:include{"Malayalam_InterIndic.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Devanagari.txt"} + direction {"FORWARD"} + } } - InterIndic-Latin { + InterIndic-Gujarati { internal { - resource:include{"InterIndic_Latin.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Gujarati.txt"} + direction {"FORWARD"} + } } - InterIndic-Devanagari { + + InterIndic-Gurmukhi { internal { - resource:include{"InterIndic_Devanagari.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Gurmukhi.txt"} + direction {"FORWARD"} + } } - InterIndic-Bengali { + + InterIndic-Kannada { internal { - resource:include{"InterIndic_Bengali.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Kannada.txt"} + direction {"FORWARD"} + } } - InterIndic-Gurmukhi { + + InterIndic-Latin { internal { - resource:include{"InterIndic_Gurmukhi.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Latin.txt"} + direction {"FORWARD"} + } } - InterIndic-Gujarati { + + InterIndic-Malayalam { internal { - resource:include{"InterIndic_Gujarati.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Malayalam.txt"} + direction {"FORWARD"} + } } + InterIndic-Oriya { internal { - resource:include{"InterIndic_Oriya.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Oriya.txt"} + direction {"FORWARD"} + } } + InterIndic-Tamil { internal { - resource:include{"InterIndic_Tamil.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Tamil.txt"} + direction {"FORWARD"} + } } + InterIndic-Telugu { internal { - resource:include{"InterIndic_Telugu.txt"} - direction{"FORWARD"} - } + resource:process(transliterator) {"InterIndic_Telugu.txt"} + direction {"FORWARD"} + } } - InterIndic-Kannada { - internal { - resource:include{"InterIndic_Kannada.txt"} - direction{"FORWARD"} - } - } - InterIndic-Malayalam { - internal { - resource:include{"InterIndic_Malayalam.txt"} - direction{"FORWARD"} - } + + Jamo-Latin { + file { + resource:process(transliterator) {"Jamo_Latin.txt"} + direction {"FORWARD"} + } } -//Latin-Indic transliterators - Latin-Devanagari { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Devanagari;NFC"} - } - Latin-Bengali { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Bengali;NFC"} - } - Latin-Gurmukhi { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Gurmukhi;NFC"} - } - Latin-Gujarati { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Gujarati;NFC"} - } - Latin-Oriya { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Oriya;NFC"} - } - Latin-Tamil { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Tamil;NFC"} + Kannada-Bengali { + file { + resource:process(transliterator) {"Kannada_Bengali.txt"} + direction {"FORWARD"} + } } - Latin-Telugu { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Telugu;NFC"} + + Kannada-Devanagari { + file { + resource:process(transliterator) {"Kannada_Devanagari.txt"} + direction {"FORWARD"} + } } - Latin-Kannada { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Kannada;NFC"} + + Kannada-Gujarati { + file { + resource:process(transliterator) {"Kannada_Gujarati.txt"} + direction {"FORWARD"} + } } - Latin-Malayalam { - alias {"['.0-9A-Za-z~\u00C0-\u00C5\u00C7-\u00CF\u00D1-\u00D6\u00D9-\u00DD\u00E0-\u00E5\u00E7-\u00EF\u00F1-\u00F6\u00F9-\u00FD\u00FF-\u010F\u0112-\u0125\u0128-\u0130\u0134-\u0137\u0139-\u013E\u0143-\u0148\u014C-\u0151\u0154-\u0165\u0168-\u017E\u01A0-\u01A1\u01AF-\u01B0\u01CD-\u01DC\u01DE-\u01E3\u01E6-\u01ED\u01F0\u01F4-\u01F5\u01F8-\u021B\u021E-\u021F\u0226-\u0233\u0301\u0303-\u0304\u0306-\u0307\u0310\u0314-\u0315\u0323\u0325\u0331\u0341\u0344\u0385-\u0386\u0388-\u038A\u038C\u038E-\u0390\u03AC-\u03B0\u03CC-\u03CE\u03D3\u0403\u040C\u040E\u0419\u0439\u0453\u045C\u045E\u04C1-\u04C2\u04D0-\u04D1\u04D6-\u04D7\u04E2-\u04E3\u04EE-\u04EF\u1E00-\u1E99\u1EA0-\u1EF9\u1F01\u1F03-\u1F05\u1F07\u1F09\u1F0B-\u1F0D\u1F0F\u1F11\u1F13-\u1F15\u1F19\u1F1B-\u1F1D\u1F21\u1F23-\u1F25\u1F27\u1F29\u1F2B-\u1F2D\u1F2F\u1F31\u1F33-\u1F35\u1F37\u1F39\u1F3B-\u1F3D\u1F3F\u1F41\u1F43-\u1F45\u1F49\u1F4B-\u1F4D\u1F51\u1F53-\u1F55\u1F57\u1F59\u1F5B\u1F5D\u1F5F\u1F61\u1F63-\u1F65\u1F67\u1F69\u1F6B-\u1F6D\u1F6F\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1F81\u1F83-\u1F85\u1F87\u1F89\u1F8B-\u1F8D\u1F8F\u1F91\u1F93-\u1F95\u1F97\u1F99\u1F9B-\u1F9D\u1F9F\u1FA1\u1FA3-\u1FA5\u1FA7\u1FA9\u1FAB-\u1FAD\u1FAF-\u1FB1\u1FB4\u1FB8-\u1FB9\u1FBB\u1FC4\u1FC9\u1FCB\u1FCE\u1FD0-\u1FD1\u1FD3\u1FD8-\u1FD9\u1FDB\u1FDE\u1FE0-\u1FE1\u1FE3\u1FE5\u1FE8-\u1FE9\u1FEB-\u1FEC\u1FEE\u1FF4\u1FF9\u1FFB\u212A-\u212B\uE04D\uE064];NFD;Lower;Latin-InterIndic;InterIndic-Malayalam;NFC"} + + Kannada-Gurmukhi { + file { + resource:process(transliterator) {"Kannada_Gurmukhi.txt"} + direction {"FORWARD"} + } } - -//Indic-Latin transliterators - Devanagari-Latin { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Latin;NFC"} + + Kannada-InterIndic { + internal { + resource:process(transliterator) {"Kannada_InterIndic.txt"} + direction {"FORWARD"} + } } - Bengali-Latin { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Latin;NFC"} + + Kannada-Latin { + file { + resource:process(transliterator) {"Kannada_Latin.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Latin { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Latin;NFC"} + + Kannada-Malayalam { + file { + resource:process(transliterator) {"Kannada_Malayalam.txt"} + direction {"FORWARD"} + } } - Gujarati-Latin { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Latin;NFC"} + + Kannada-Oriya { + file { + resource:process(transliterator) {"Kannada_Oriya.txt"} + direction {"FORWARD"} + } } - Oriya-Latin { - alias {"[\u0964-\u0965\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35\u0B36-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B70\u0B71];NFD;Oriya-InterIndic;InterIndic-Latin;NFC"} + + Kannada-Tamil { + file { + resource:process(transliterator) {"Kannada_Tamil.txt"} + direction {"FORWARD"} + } } - Tamil-Latin { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Latin;NFC"} + + Kannada-Telugu { + file { + resource:process(transliterator) {"Kannada_Telugu.txt"} + direction {"FORWARD"} + } } - Telugu-Latin { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Latin;NFC"} + + Latin-Armenian { + file { + resource:process(transliterator) {"Latin_Armenian.txt"} + direction {"FORWARD"} + } } - Kannada-Latin { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Latin;NFC"} + Armenian-Latin { + file { + resource:process(transliterator) {"Latin_Armenian.txt"} + direction {"REVERSE"} + } } - Malayalam-Latin { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Latin;NFC"} + + Latin-Bengali { + file { + resource:process(transliterator) {"Latin_Bengali.txt"} + direction {"FORWARD"} + } } - Devanagari-Bengali { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Bengali;NFC"} + Latin-ConjoiningJamo { + internal { + resource:process(transliterator) {"Latin_ConjoiningJamo.txt"} + direction {"FORWARD"} + } } - Devanagari-Gurmukhi { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Gurmukhi;NFC"} + ConjoiningJamo-Latin { + internal { + resource:process(transliterator) {"Latin_ConjoiningJamo.txt"} + direction {"REVERSE"} + } } - Devanagari-Gujarati { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Gujarati;NFC"} + + Latin-Devanagari { + file { + resource:process(transliterator) {"Latin_Devanagari.txt"} + direction {"FORWARD"} + } } - Devanagari-Oriya { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Oriya;NFC"} + + Latin-Gujarati { + file { + resource:process(transliterator) {"Latin_Gujarati.txt"} + direction {"FORWARD"} + } } - Devanagari-Tamil { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Tamil;NFC"} + + Latin-Gurmukhi { + file { + resource:process(transliterator) {"Latin_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Devanagari-Telugu { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Telugu;NFC"} + + Latin-Hangul { + file { + resource:process(transliterator) {"Latin_Hangul.txt"} + direction {"FORWARD"} + } } - Devanagari-Kannada { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Kannada;NFC"} + + Latin-InterIndic { + internal { + resource:process(transliterator) {"Latin_InterIndic.txt"} + direction {"FORWARD"} + } } - Devanagari-Malayalam { - alias {"[\u0901-\u0903\u0904\u0905-\u0939\u093C-\u094D\u0950-\u0954\u0958-\u096F];NFD;Devanagari-InterIndic;InterIndic-Malayalam;NFC"} + + Latin-Jamo { + file { + resource:process(transliterator) {"Latin_Jamo.txt"} + direction {"FORWARD"} + } } - Bengali-Devanagari { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Devanagari;NFC"} + Latin-Kannada { + file { + resource:process(transliterator) {"Latin_Kannada.txt"} + direction {"FORWARD"} + } } - Bengali-Gurmukhi { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Gurmukhi;NFC"} + + Latin-Katakana { + file { + resource:process(transliterator) {"Latin_Katakana.txt"} + direction {"FORWARD"} + } } - Bengali-Gujarati { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Gujarati;NFC"} + Katakana-Latin { + file { + resource:process(transliterator) {"Latin_Katakana.txt"} + direction {"REVERSE"} + } } - Bengali-Oriya { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Oriya;NFC"} + + Latin-Malayalam { + file { + resource:process(transliterator) {"Latin_Malayalam.txt"} + direction {"FORWARD"} + } } - Bengali-Tamil { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Tamil;NFC"} + + Latin-NumericPinyin { + file { + resource:process(transliterator) {"Latin_NumericPinyin.txt"} + direction {"FORWARD"} + } } - Bengali-Telugu { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Telugu;NFC"} + NumericPinyin-Latin { + file { + resource:process(transliterator) {"Latin_NumericPinyin.txt"} + direction {"REVERSE"} + } } - Bengali-Kannada { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Kannada;NFC"} + + Latin-Oriya { + file { + resource:process(transliterator) {"Latin_Oriya.txt"} + direction {"FORWARD"} + } } - Bengali-Malayalam { - alias {"[\u0964-\u0965\u0981-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09DC-\u09DD\u09DF-\u09E3\u09E6-\u09FA];NFD;Bengali-InterIndic;InterIndic-Malayalam;NFC"} + + Latin-Tamil { + file { + resource:process(transliterator) {"Latin_Tamil.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Devanagari { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Devanagari;NFC"} + Latin-Telugu { + file { + resource:process(transliterator) {"Latin_Telugu.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Bengali { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Bengali;NFC"} + + Latin-Thai { + file { + resource:process(transliterator) {"Latin_Thai.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Gujarati { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Gujarati;NFC"} + + Malayalam-Bengali { + file { + resource:process(transliterator) {"Malayalam_Bengali.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Oriya { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Oriya;NFC"} + + Malayalam-Devanagari { + file { + resource:process(transliterator) {"Malayalam_Devanagari.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Tamil { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Tamil;NFC"} + + Malayalam-Gujarati { + file { + resource:process(transliterator) {"Malayalam_Gujarati.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Telugu { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Telugu;NFC"} + + Malayalam-Gurmukhi { + file { + resource:process(transliterator) {"Malayalam_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Kannada { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Kannada;NFC"} + + Malayalam-InterIndic { + internal { + resource:process(transliterator) {"Malayalam_InterIndic.txt"} + direction {"FORWARD"} + } } - Gurmukhi-Malayalam { - alias {"[\u0964-\u0965\u0A01\u0A02\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A74];NFD;Gurmukhi-InterIndic;InterIndic-Malayalam;NFC"} + + Malayalam-Kannada { + file { + resource:process(transliterator) {"Malayalam_Kannada.txt"} + direction {"FORWARD"} + } } - Gujarati-Devanagari { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Devanagari;NFC"} + Malayalam-Latin { + file { + resource:process(transliterator) {"Malayalam_Latin.txt"} + direction {"FORWARD"} + } } - Gujarati-Bengali { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Bengali;NFC"} + + Malayalam-Oriya { + file { + resource:process(transliterator) {"Malayalam_Oriya.txt"} + direction {"FORWARD"} + } } - Gujarati-Gurmukhi { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Gurmukhi;NFC"} + + Malayalam-Tamil { + file { + resource:process(transliterator) {"Malayalam_Tamil.txt"} + direction {"FORWARD"} + } } - Gujarati-Oriya { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Oriya;NFC"} + + Malayalam-Telugu { + file { + resource:process(transliterator) {"Malayalam_Telugu.txt"} + direction {"FORWARD"} + } } - Gujarati-Tamil { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Tamil;NFC"} + + Oriya-Bengali { + file { + resource:process(transliterator) {"Oriya_Bengali.txt"} + direction {"FORWARD"} + } } - Gujarati-Telugu { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Telugu;NFC"} + + Oriya-Devanagari { + file { + resource:process(transliterator) {"Oriya_Devanagari.txt"} + direction {"FORWARD"} + } } - Gujarati-Kannada { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Kannada;NFC"} + + Oriya-Gujarati { + file { + resource:process(transliterator) {"Oriya_Gujarati.txt"} + direction {"FORWARD"} + } } - Gujarati-Malayalam { - alias {"[\u0964-\u0965\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF];NFD;Gujarati-InterIndic;InterIndic-Malayalam;NFC"} + + Oriya-Gurmukhi { + file { + resource:process(transliterator) {"Oriya_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Oriya-Devanagari { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Devanagari;NFC"} + Oriya-InterIndic { + internal { + resource:process(transliterator) {"Oriya_InterIndic.txt"} + direction {"FORWARD"} + } } - Oriya-Bengali { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Bengali;NFC"} + + Oriya-Kannada { + file { + resource:process(transliterator) {"Oriya_Kannada.txt"} + direction {"FORWARD"} + } } - Oriya-Gurmukhi { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Gurmukhi;NFC"} + + Oriya-Latin { + file { + resource:process(transliterator) {"Oriya_Latin.txt"} + direction {"FORWARD"} + } } - Oriya-Gujarati { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Gujarati;NFC"} + + Oriya-Malayalam { + file { + resource:process(transliterator) {"Oriya_Malayalam.txt"} + direction {"FORWARD"} + } } + Oriya-Tamil { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Tamil;NFC"} + file { + resource:process(transliterator) {"Oriya_Tamil.txt"} + direction {"FORWARD"} + } } + Oriya-Telugu { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Telugu;NFC"} + file { + resource:process(transliterator) {"Oriya_Telugu.txt"} + direction {"FORWARD"} + } } - Oriya-Kannada { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Kannada;NFC"} + + Pinyin-NumericPinyin { + file { + resource:process(transliterator) {"Pinyin_NumericPinyin.txt"} + direction {"FORWARD"} + } } - Oriya-Malayalam { - alias {"[\u0B01-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B71];NFD;Oriya-InterIndic;InterIndic-Malayalam;NFC"} + NumericPinyin-Pinyin { + file { + resource:process(transliterator) {"Pinyin_NumericPinyin.txt"} + direction {"REVERSE"} + } } - Tamil-Devanagari { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Devanagari;NFC"} + Syriac-Latin { + file { + resource:process(transliterator) {"Syriac_Latin.txt"} + direction {"FORWARD"} + } } + Latin-Syriac { + file { + resource:process(transliterator) {"Syriac_Latin.txt"} + direction {"REVERSE"} + } + } + Tamil-Bengali { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Bengali;NFC"} + file { + resource:process(transliterator) {"Tamil_Bengali.txt"} + direction {"FORWARD"} + } } - Tamil-Gurmukhi { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Gurmukhi;NFC"} + + Tamil-Devanagari { + file { + resource:process(transliterator) {"Tamil_Devanagari.txt"} + direction {"FORWARD"} + } } + Tamil-Gujarati { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Gujarati;NFC"} + file { + resource:process(transliterator) {"Tamil_Gujarati.txt"} + direction {"FORWARD"} + } } - Tamil-Oriya { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Oriya;NFC"} + + Tamil-Gurmukhi { + file { + resource:process(transliterator) {"Tamil_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Tamil-Telugu { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Telugu;NFC"} + + Tamil-InterIndic { + internal { + resource:process(transliterator) {"Tamil_InterIndic.txt"} + direction {"FORWARD"} + } } + Tamil-Kannada { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Kannada;NFC"} + file { + resource:process(transliterator) {"Tamil_Kannada.txt"} + direction {"FORWARD"} + } + } + + Tamil-Latin { + file { + resource:process(transliterator) {"Tamil_Latin.txt"} + direction {"FORWARD"} + } } + Tamil-Malayalam { - alias {"[0\u0B82-\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE7-\u0BF2];NFD;Tamil-InterIndic;InterIndic-Malayalam;NFC"} + file { + resource:process(transliterator) {"Tamil_Malayalam.txt"} + direction {"FORWARD"} + } } - Telugu-Devanagari { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Devanagari;NFC"} + Tamil-Oriya { + file { + resource:process(transliterator) {"Tamil_Oriya.txt"} + direction {"FORWARD"} + } + } + + Tamil-Telugu { + file { + resource:process(transliterator) {"Tamil_Telugu.txt"} + direction {"FORWARD"} + } } + Telugu-Bengali { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Bengali;NFC"} + file { + resource:process(transliterator) {"Telugu_Bengali.txt"} + direction {"FORWARD"} + } } - Telugu-Gurmukhi { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Gurmukhi;NFC"} + + Telugu-Devanagari { + file { + resource:process(transliterator) {"Telugu_Devanagari.txt"} + direction {"FORWARD"} + } } + Telugu-Gujarati { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Gujarati;NFC"} + file { + resource:process(transliterator) {"Telugu_Gujarati.txt"} + direction {"FORWARD"} + } } - Telugu-Oriya { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Oriya;NFC"} + + Telugu-Gurmukhi { + file { + resource:process(transliterator) {"Telugu_Gurmukhi.txt"} + direction {"FORWARD"} + } } - Telugu-Tamil { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Tamil;NFC"} + + Telugu-InterIndic { + internal { + resource:process(transliterator) {"Telugu_InterIndic.txt"} + direction {"FORWARD"} + } } + Telugu-Kannada { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Kannada;NFC"} + file { + resource:process(transliterator) {"Telugu_Kannada.txt"} + direction {"FORWARD"} + } } - Telugu-Malayalam { - alias {"[\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F];NFD;Telugu-InterIndic;InterIndic-Malayalam;NFC"} + + Telugu-Latin { + file { + resource:process(transliterator) {"Telugu_Latin.txt"} + direction {"FORWARD"} + } } - Kannada-Devanagari { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Devanagari;NFC"} + Telugu-Malayalam { + file { + resource:process(transliterator) {"Telugu_Malayalam.txt"} + direction {"FORWARD"} + } } - Kannada-Bengali { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Bengali;NFC"} + + Telugu-Oriya { + file { + resource:process(transliterator) {"Telugu_Oriya.txt"} + direction {"FORWARD"} + } } - Kannada-Gurmukhi { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Gurmukhi;NFC"} + + Telugu-Tamil { + file { + resource:process(transliterator) {"Telugu_Tamil.txt"} + direction {"FORWARD"} + } } - Kannada-Gujarati { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Gujarati;NFC"} + + Thaana-Latin { + file { + resource:process(transliterator) {"Thaana_Latin.txt"} + direction {"FORWARD"} + } } - Kannada-Oriya { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Oriya;NFC"} + Latin-Thaana { + file { + resource:process(transliterator) {"Thaana_Latin.txt"} + direction {"REVERSE"} + } } - Kannada-Tamil { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Tamil;NFC"} + + Thai-Latin { + file { + resource:process(transliterator) {"Thai_Latin.txt"} + direction {"FORWARD"} + } } - Kannada-Telugu { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Telugu;NFC"} + + Thai-ThaiLogical { + internal { + resource:process(transliterator) {"Thai_ThaiLogical.txt"} + direction {"FORWARD"} + } } - Kannada-Malayalam { - alias {"[\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF];NFD;Kannada-InterIndic;InterIndic-Malayalam;NFC"} + ThaiLogical-Thai { + internal { + resource:process(transliterator) {"Thai_ThaiLogical.txt"} + direction {"REVERSE"} + } } - Malayalam-Devanagari { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Devanagari;NFC"} - } - Malayalam-Bengali { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Bengali;NFC"} + Thai-ThaiSemi { + internal { + resource:process(transliterator) {"Thai_ThaiSemi.txt"} + direction {"FORWARD"} + } } - Malayalam-Gurmukhi { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Gurmukhi;NFC"} + ThaiSemi-Thai { + internal { + resource:process(transliterator) {"Thai_ThaiSemi.txt"} + direction {"REVERSE"} + } } - Malayalam-Gujarati { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Gujarati;NFC"} + + ThaiLogical-Latin { + internal { + resource:process(transliterator) {"ThaiLogical_Latin.txt"} + direction {"FORWARD"} + } } - Malayalam-Oriya { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Oriya;NFC"} + Latin-ThaiLogical { + internal { + resource:process(transliterator) {"ThaiLogical_Latin.txt"} + direction {"REVERSE"} + } } - Malayalam-Tamil { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Tamil;NFC"} + Simplified-Traditional { + internal { + resource:process(transliterator) {"Simplified_Traditional.txt"} + direction {"FORWARD"} + } } - Malayalam-Telugu { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Telugu;NFC"} + Traditional-Simplified { + internal { + resource:process(transliterator) {"Simplified_Traditional.txt"} + direction {"REVERSE"} + } } - Malayalam-Kannada { - alias {"[\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F];NFD;Malayalam-InterIndic;InterIndic-Kannada;NFC"} - } - /* - # Comment these out; they are only for testing - Latin-Han/definition{ - file { - resource:include{"Han_Latin_Definition.txt"} - direction{"REVERSE"} - } - } - Han-Latin/definition{ - file { - resource:include{"Han_Latin_Definition.txt"} - direction{"FORWARD"} - } - } - Latin-Han/EDICT{ - file { - resource:include{"Han_Latin_EDICT.txt"} - direction{"REVERSE"} - } - } - Han-Latin/EDICT{ - file { - resource:include{"Han_Latin_EDICT.txt"} - direction{"FORWARD"} - } - } - */ -// eof + } TransliteratorNamePattern { // Format for the display name of a Transliterator. // This is the language-neutral form of this resource. "{0,choice,0#|1#{1}|2#{1}-{2}}" // Display name } - // Transliterator display names // This is the English form of this resource. "%Translit%Hex" { "%Translit%Hex" } "%Translit%UnicodeName" { "%Translit%UnicodeName" } "%Translit%UnicodeChar" { "%Translit%UnicodeChar" } - TransliterateLATIN{ - "", - "" + "", + "" } - } diff --git a/icuSources/data/translit/trnsfiles.mk b/icuSources/data/translit/trnsfiles.mk index 05285d7f..81078b44 100644 --- a/icuSources/data/translit/trnsfiles.mk +++ b/icuSources/data/translit/trnsfiles.mk @@ -1,4 +1,4 @@ -# * Copyright (C) 1997-2004, International Business Machines +# * Copyright (C) 1997-2006, International Business Machines # * Corporation and others. All Rights Reserved. # A list of txt's to build # Note: @@ -23,4 +23,4 @@ # # -TRANSLIT_SOURCE=el.txt en.txt +TRANSLIT_SOURCE=root.txt en.txt el.txt diff --git a/icuSources/data/unidata/ApplePUApatch.txt b/icuSources/data/unidata/ApplePUApatch.txt new file mode 100644 index 00000000..261eaab0 --- /dev/null +++ b/icuSources/data/unidata/ApplePUApatch.txt @@ -0,0 +1,365 @@ +Index: DerivedBidiClass.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/DerivedBidiClass.txt,v +retrieving revision 1.1.1.4 +retrieving revision 1.3 +diff -u -r1.1.1.4 -r1.3 +--- DerivedBidiClass.txt 31 Aug 2006 23:04:21 -0000 1.1.1.4 ++++ DerivedBidiClass.txt 8 Feb 2007 22:36:17 -0000 1.3 +@@ -456,7 +456,15 @@ + A827 ; L # Mc SYLOTI NAGRI VOWEL SIGN OO + A840..A873 ; L # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU + AC00..D7A3 ; L # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +-E000..F8FF ; L # Co [6400] .. ++E000..F801 ; L # Co [6146] .. ++F880 ; L # So Apple Corporate deprecated metrics char ++F881 ; L # So Apple Corporate deprecated metrics char ++F8A2..F8A7 ; L # Nl [6] .. ++F8A8..F8AC ; L # So [5] .. ++F8B2 ; L # So Apple Corporate deprecated Japanese symbol ++F8B3 ; L # So Apple Corporate deprecated Japanese symbol ++F8B8 ; L # Lm Apple Corporate deprecated kana form ++F8C1..F8D6 ; L # Lo [22] .. + F900..FA2D ; L # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D + FA30..FA6A ; L # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A + FA70..FAD9 ; L # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +@@ -581,6 +589,8 @@ + 07FA ; R # Lm NKO LAJANYALAN + 07FB..08FF ; R # Cn [261] .. + 200F ; R # Cf RIGHT-TO-LEFT MARK ++F883 ; R # Sc Apple Corporate deprecated Arabic rial ++F89A..F89E ; R # Lo [5] .. + FB1D ; R # Lo HEBREW LETTER YOD WITH HIRIQ + FB1F..FB28 ; R # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV + FB2A..FB36 ; R # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +@@ -639,6 +649,7 @@ + 2074..2079 ; EN # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE + 2080..2089 ; EN # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE + 2488..249B ; EN # No [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP ++F8A1 ; EN # No Apple Corporate deprecated Japanese symbol + FF10..FF19 ; EN # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE + 1D7CE..1D7FF ; EN # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE + +@@ -681,6 +692,7 @@ + 20A0..20B5 ; ET # Sc [22] EURO-CURRENCY SIGN..CEDI SIGN + 212E ; ET # So ESTIMATED SYMBOL + 2213 ; ET # Sm MINUS-OR-PLUS SIGN ++F8A0 ; ET # Sc Apple Corporate deprecated Euro + FE5F ; ET # Po SMALL NUMBER SIGN + FE69 ; ET # Sc SMALL DOLLAR SIGN + FE6A ; ET # Po SMALL PERCENT SIGN +@@ -1077,6 +1089,18 @@ + A720..A721 ; ON # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE + A828..A82B ; ON # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 + A874..A877 ; ON # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD ++F802..F86F ; ON # So [110] .. ++F8AD..F8B1 ; ON # So [5] .. ++F8B4 ; ON # Pe Apple Corporate deprecated Japanese punct ++F8B5..F8B7 ; ON # Po [3] .. ++F8B9..F8BA ; ON # Pd [2] .. ++F8BB ; ON # Po Apple Corporate deprecated Japanese punct ++F8BC..F8BD ; ON # Sm [2] .. ++F8BE ; ON # Ps Apple Corporate deprecated Japanese punct ++F8BF ; ON # Pe Apple Corporate deprecated Japanese punct ++F8C0 ; ON # Sm Apple Corporate deprecated Japanese punct ++F8D7..F8FE ; ON # So [40] .. ++F8FF ; ON # So Apple Corporate logo + FD3E ; ON # Ps ORNATE LEFT PARENTHESIS + FD3F ; ON # Pe ORNATE RIGHT PARENTHESIS + FDFD ; ON # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +@@ -1335,6 +1359,9 @@ + A806 ; NSM # Mn SYLOTI NAGRI SIGN HASANTA + A80B ; NSM # Mn SYLOTI NAGRI SIGN ANUSVARA + A825..A826 ; NSM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E ++F870..F87F ; NSM # Mn [16] .. ++F884..F899 ; NSM # Mn [22] .. ++F89F ; NSM # Mn Apple Corporate deprecated Hebrew misc + FB1E ; NSM # Mn HEBREW POINT JUDEO-SPANISH VARIKA + FE00..FE0F ; NSM # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 + FE20..FE23 ; NSM # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF +@@ -1391,6 +1418,7 @@ + 0780..07A5 ; AL # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU + 07B1 ; AL # Lo THAANA LETTER NAA + 07B2..07BF ; AL # Cn [14] .. ++F882 ; AL # Lo Apple Corporate Arabic ligature + FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM + FBB2..FBD2 ; AL # Cn [33] .. + FBD3..FD3D ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +Index: DerivedCoreProperties.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/DerivedCoreProperties.txt,v +retrieving revision 1.1.1.5 +diff -u -r1.1.1.5 DerivedCoreProperties.txt +--- DerivedCoreProperties.txt 31 Aug 2006 23:04:21 -0000 1.1.1.5 ++++ DerivedCoreProperties.txt 29 Mar 2007 22:42:30 -0000 +@@ -121,6 +121,9 @@ + 29FC ; Math + 29FD ; Math + 29FE..2AFF ; Math ++F8BC ; Math ++F8BD ; Math ++F8C0 ; Math + FB29 ; Math + FE61 ; Math + FE62 ; Math +@@ -633,6 +636,11 @@ + A827 ; Alphabetic + A840..A873 ; Alphabetic + AC00..D7A3 ; Alphabetic ++F882 ; Alphabetic ++F89A..F89E ; Alphabetic ++F8A2..F8A7 ; Alphabetic ++F8B8 ; Alphabetic ++F8C1..F8D6 ; Alphabetic + F900..FA2D ; Alphabetic + FA30..FA6A ; Alphabetic + FA70..FAD9 ; Alphabetic +@@ -4074,6 +4082,9 @@ + A806 ; Grapheme_Extend + A80B ; Grapheme_Extend + A825..A826 ; Grapheme_Extend ++F870..F87F ; Grapheme_Extend ++F884..F899 ; Grapheme_Extend ++F89F ; Grapheme_Extend + FB1E ; Grapheme_Extend + FE00..FE0F ; Grapheme_Extend + FE20..FE23 ; Grapheme_Extend +@@ -4882,6 +4893,10 @@ + A840..A873 ; Grapheme_Base + A874..A877 ; Grapheme_Base + AC00..D7A3 ; Grapheme_Base ++F802..F84F ; Grapheme_Base ++F880..F883 ; Grapheme_Base ++F89A..F89E ; Grapheme_Base ++F8A0..F8FF ; Grapheme_Base + F900..FA2D ; Grapheme_Base + FA30..FA6A ; Grapheme_Base + FA70..FAD9 ; Grapheme_Base +Index: DerivedNumericValues.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/DerivedNumericValues.txt,v +retrieving revision 1.1.1.4 +retrieving revision 1.2 +diff -u -r1.1.1.4 -r1.2 +--- DerivedNumericValues.txt 31 Aug 2006 23:04:22 -0000 1.1.1.4 ++++ DerivedNumericValues.txt 8 Feb 2007 22:36:17 -0000 1.2 +@@ -51,6 +51,7 @@ + 24FF ; 0.0 # No NEGATIVE CIRCLED DIGIT ZERO + 3007 ; 0.0 # Nl IDEOGRAPHIC NUMBER ZERO + 96F6 ; 0.0 # Lo CJK UNIFIED IDEOGRAPH-96F6 ++F8A1 ; 0.0 # No Apple corporate digit zero full stop + FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO + 1018A ; 0.0 # No GREEK ZERO SIGN + 104A0 ; 0.0 # Nd OSMANYA DIGIT ZERO +@@ -60,7 +61,7 @@ + 1D7EC ; 0.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO + 1D7F6 ; 0.0 # Nd MATHEMATICAL MONOSPACE DIGIT ZERO + +-# Total code points: 37 ++# Total code points: 38 + + # ================================================ + +@@ -888,6 +889,8 @@ + 2480 ; 13.0 # No PARENTHESIZED NUMBER THIRTEEN + 2494 ; 13.0 # No NUMBER THIRTEEN FULL STOP + 24ED ; 13.0 # No NEGATIVE CIRCLED NUMBER THIRTEEN ++F8A2 ; 13.0 # Nl Apple corporate roman numeral thirteen ++F8A5 ; 13.0 # Nl Apple corporate small roman numeral thirteen + + # Total code points: 4 + +@@ -897,6 +900,8 @@ + 2481 ; 14.0 # No PARENTHESIZED NUMBER FOURTEEN + 2495 ; 14.0 # No NUMBER FOURTEEN FULL STOP + 24EE ; 14.0 # No NEGATIVE CIRCLED NUMBER FOURTEEN ++F8A3 ; 14.0 # Nl Apple corporate roman numeral fourteen ++F8A6 ; 14.0 # Nl Apple corporate small roman numeral fourteen + + # Total code points: 4 + +@@ -906,6 +911,8 @@ + 2482 ; 15.0 # No PARENTHESIZED NUMBER FIFTEEN + 2496 ; 15.0 # No NUMBER FIFTEEN FULL STOP + 24EF ; 15.0 # No NEGATIVE CIRCLED NUMBER FIFTEEN ++F8A4 ; 15.0 # Nl Apple corporate roman numeral fifteen ++F8A7 ; 15.0 # Nl Apple corporate small roman numeral fifteen + + # Total code points: 4 + +Index: EastAsianWidth.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/EastAsianWidth.txt,v +retrieving revision 1.1.1.4 +retrieving revision 1.2 +diff -u -r1.1.1.4 -r1.2 +--- EastAsianWidth.txt 31 Aug 2006 23:04:22 -0000 1.1.1.4 ++++ EastAsianWidth.txt 8 Feb 2007 22:36:17 -0000 1.2 +@@ -669,7 +669,19 @@ + D800..DB7F;N + DB80..DBFF;N + DC00..DFFF;N +-E000..F8FF;A ++E000..F801;A ++F802..F84F;N ++F850..F87F;A ++F880..F881;W ++F882..F8A0;N ++F8A1..F8B6;W ++F8B7;F ++F8B8..F8BB;W ++F8BC;F ++F8BD;W ++F8BE..F8C0;F ++F8C1..F8D6;W ++F8D7..F8FF;N + F900..FA2D;W + FA30..FA6A;W + FA70..FAD9;W +Index: GraphemeBreakProperty.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/GraphemeBreakProperty.txt,v +retrieving revision 1.1.1.2 +retrieving revision 1.2 +diff -u -r1.1.1.2 -r1.2 +--- GraphemeBreakProperty.txt 31 Aug 2006 23:04:36 -0000 1.1.1.2 ++++ GraphemeBreakProperty.txt 8 Feb 2007 22:36:17 -0000 1.2 +@@ -190,6 +190,9 @@ + A806 ; Extend + A80B ; Extend + A825..A826 ; Extend ++F870..F87F ; Extend ++F884..F899 ; Extend ++F89F ; Extend + FB1E ; Extend + FE00..FE0F ; Extend + FE20..FE23 ; Extend +Index: LineBreak.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/LineBreak.txt,v +retrieving revision 1.1.1.5 +retrieving revision 1.3 +diff -u -r1.1.1.5 -r1.3 +--- LineBreak.txt 31 Aug 2006 23:04:36 -0000 1.1.1.5 ++++ LineBreak.txt 8 Feb 2007 22:36:17 -0000 1.3 +@@ -1758,7 +1758,28 @@ + D800..DB7F;SG + DB80..DBFF;SG + DC00..DFFF;SG +-E000..F8FF;XX ++E000..F801;XX ++F802..F86F;AL ++F870..F87F;CM ++F880..F883;AL ++F884..F899;CM ++F89A..F89E;AL ++F89F;CM ++F8A0;PR ++F8A1..F8B3;AL ++F8B4..F8B6;CL ++F8B7;ID ++F8B8;NS ++F8B9;BA ++F8BA;NS ++F8BB;AI ++F8BC;ID ++F8BD;IN ++F8BE;OP ++F8BF;CL ++F8C0;ID ++F8C1..F8D6;NS ++F8D7..F8FF;AL + F900..FA2D;ID + FA30..FA6A;ID + FA70..FAD9;ID +Index: Scripts.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/Scripts.txt,v +retrieving revision 1.1.1.5 +retrieving revision 1.2 +diff -u -r1.1.1.5 -r1.2 +--- Scripts.txt 31 Aug 2006 23:04:38 -0000 1.1.1.5 ++++ Scripts.txt 8 Feb 2007 22:36:17 -0000 1.2 +@@ -362,6 +362,7 @@ + A700..A716 ; Common + A717..A71A ; Common + A720..A721 ; Common ++F802..F8FF ; Common + FD3E ; Common + FD3F ; Common + FDFD ; Common +Index: UnicodeData.txt +=================================================================== +RCS file: /cvs/root/ICU/icuSources/data/unidata/UnicodeData.txt,v +retrieving revision 1.1.1.5 +retrieving revision 1.3 +diff -u -r1.1.1.5 -r1.3 +--- UnicodeData.txt 31 Aug 2006 23:04:40 -0000 1.1.1.5 ++++ UnicodeData.txt 8 Feb 2007 22:36:17 -0000 1.3 +@@ -11834,7 +11834,65 @@ + DC00;;Cs;0;L;;;;;N;;;;; + DFFF;;Cs;0;L;;;;;N;;;;; + E000;;Co;0;L;;;;;N;;;;; +-F8FF;;Co;0;L;;;;;N;;;;; ++F801;;Co;0;L;;;;;N;;;;; ++F802;;So;0;ON;;;;;N;;;;; ++F86F;;So;0;ON;;;;;N;;;;; ++F870;;Mn;0;NSM;;;;;N;;;;; ++F87F;;Mn;0;NSM;;;;;N;;;;; ++F880;Apple Corporate deprecated metrics char;So;0;L;;;;;N;;;;; ++F881;Apple Corporate deprecated metrics char;So;0;L;;;;;N;;;;; ++F882;Apple Corporate Arabic ligature;Lo;0;AL;;;;;N;;;;; ++F883;Apple Corporate deprecated Arabic rial;Sc;0;R;;;;;N;;;;; ++F884;;Mn;0;NSM;;;;;N;;;;; ++F889;;Mn;0;NSM;;;;;N;;;;; ++F88A;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F88B;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F88C;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F88D;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F88E;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F88F;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F890;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F891;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F892;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F893;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F894;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F895;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; ++F896;;Mn;0;NSM;;;;;N;;;;; ++F899;;Mn;0;NSM;;;;;N;;;;; ++F89A;;Lo;0;R;;;;;N;;;;; ++F89E;;Lo;0;R;;;;;N;;;;; ++F89F;Apple Corporate deprecated Hebrew misc;Mn;18;NSM;;;;;N;;;;; ++F8A0;Apple Corporate deprecated Euro;Sc;0;ET;;;;;N;;;;; ++F8A1;Apple Corporate deprecated Japanese digit zero full stop;No;0;EN;;;0;0;N;;;;; ++F8A2;Apple Corporate deprecated Japanese roman numeral thirteen;Nl;0;L;;;;13;N;;;;; ++F8A3;Apple Corporate deprecated Japanese roman numeral fourteen;Nl;0;L;;;;14;N;;;;; ++F8A4;Apple Corporate deprecated Japanese roman numeral fifteen;Nl;0;L;;;;15;N;;;;; ++F8A5;Apple Corporate deprecated Japanese small roman numeral thirteen;Nl;0;L;;;;13;N;;;;; ++F8A6;Apple Corporate deprecated Japanese small roman numeral fourteen;Nl;0;L;;;;14;N;;;;; ++F8A7;Apple Corporate deprecated Japanese small roman numeral fifteen;Nl;0;L;;;;15;N;;;;; ++F8A8;;So;0;L;;;;;N;;;;; ++F8AC;;So;0;L;;;;;N;;;;; ++F8AD;;So;0;ON;;;;;N;;;;; ++F8B1;;So;0;ON;;;;;N;;;;; ++F8B2;Apple Corporate deprecated Japanese symbol;So;0;L;;;;;N;;;;; ++F8B3;Apple Corporate deprecated Japanese symbol;So;0;L;;;;;N;;;;; ++F8B4;Apple Corporate deprecated Japanese punct;Pe;0;ON;;;;;N;;;;; ++F8B5;;Po;0;ON;;;;;N;;;;; ++F8B7;;Po;0;ON;;;;;N;;;;; ++F8B8;Apple Corporate deprecated kana form;Lm;0;L;;;;;N;;;;; ++F8B9;Apple Corporate deprecated Japanese punct;Pd;0;ON;;;;;N;;;;; ++F8BA;Apple Corporate deprecated Japanese punct;Pd;0;ON;;;;;N;;;;; ++F8BB;Apple Corporate deprecated Japanese punct;Po;0;ON;;;;;N;;;;; ++F8BC;Apple Corporate deprecated Japanese punct;Sm;0;ON;;;;;N;;;;; ++F8BD;Apple Corporate deprecated Japanese punct;Sm;0;ON;;;;;N;;;;; ++F8BE;Apple Corporate deprecated Japanese punct;Ps;0;ON;;;;;N;;;;; ++F8BF;Apple Corporate deprecated Japanese punct;Pe;0;ON;;;;;N;;;;; ++F8C0;Apple Corporate deprecated Japanese punct;Sm;0;ON;;;;;N;;;;; ++F8C1;;Lo;0;L;;;;;N;;;;; ++F8D6;;Lo;0;L;;;;;N;;;;; ++F8D7;;So;0;ON;;;;;N;;;;; ++F8FE;;So;0;ON;;;;;N;;;;; ++F8FF;Apple Corporate logo;So;0;ON;;;;;N;;;;; + F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; + F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; + F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; diff --git a/icuSources/data/unidata/BidiMirroring.txt b/icuSources/data/unidata/BidiMirroring.txt index f799da12..f9a09c13 100644 --- a/icuSources/data/unidata/BidiMirroring.txt +++ b/icuSources/data/unidata/BidiMirroring.txt @@ -1,10 +1,18 @@ -# BidiMirroring-4.0.0.txt +# BidiMirroring-5.0.0.txt +# Date: 2006-02-16, 16:11:00 PST [KW] +# +# Bidi_Mirroring_Glyph Property # -# This file is an informative supplement to the UnicodeData file. It -# lists characters that have the mirrored property +# This file is an informative contributory data file in the +# Unicode Character Database. +# +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# This data file lists characters that have the mirrored property # where there is another Unicode character that typically has a glyph # that is the mirror image of the original character's glyph. -# The repertoire covered by the file is Unicode 4.0.0. +# The repertoire covered by the file is Unicode 5.0.0. # # The file contains a list of lines with mappings from one code point # to another one for character-based mirroring. @@ -24,7 +32,7 @@ # at http://www.unicode.org/unicode/reports/tr9/ # # This file was originally created by Markus Scherer. -# Extended for Unicode 3.2 and 4.0 by Ken Whistler. +# Extended for Unicode 3.2, 4.0, 4.1, and 5.0 by Ken Whistler. # # ############################################################ @@ -38,6 +46,16 @@ 007D; 007B # RIGHT CURLY BRACKET 00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0F3A; 0F3B # TIBETAN MARK GUG RTAGS GYON +0F3B; 0F3A # TIBETAN MARK GUG RTAGS GYAS +0F3C; 0F3D # TIBETAN MARK ANG KHANG GYON +0F3D; 0F3C # TIBETAN MARK ANG KHANG GYAS +169B; 169C # OGHAM FEATHER MARK +169C; 169B # OGHAM REVERSED FEATHER MARK +2018; 2019 # [BEST FIT] LEFT SINGLE QUOTATION MARK +2019; 2018 # [BEST FIT] RIGHT SINGLE QUOTATION MARK +201C; 201D # [BEST FIT] LEFT DOUBLE QUOTATION MARK +201D; 201C # [BEST FIT] RIGHT DOUBLE QUOTATION MARK 2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 2045; 2046 # LEFT SQUARE BRACKET WITH QUILL @@ -180,6 +198,10 @@ 2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET 2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT 2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT +27C3; 27C4 # OPEN SUBSET +27C4; 27C3 # OPEN SUPERSET +27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER +27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER 27D5; 27D6 # LEFT OUTER JOIN 27D6; 27D5 # RIGHT OUTER JOIN 27DD; 27DE # LONG RIGHT TACK @@ -238,7 +260,7 @@ 29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET 2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS 2A2C; 2A2B # MINUS SIGN WITH RISING DOTS -2A2D; 2A2C # PLUS SIGN IN LEFT HALF CIRCLE +2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE 2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE 2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE 2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE @@ -316,6 +338,16 @@ 2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN 2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO 2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO +2E02; 2E03 # LEFT SUBSTITUTION BRACKET +2E03; 2E02 # RIGHT SUBSTITUTION BRACKET +2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET +2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET +2E09; 2E0A # LEFT TRANSPOSITION BRACKET +2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET +2E0C; 2E0D # LEFT RAISED OMISSION BRACKET +2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET +2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET +2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET 3008; 3009 # LEFT ANGLE BRACKET 3009; 3008 # RIGHT ANGLE BRACKET 300A; 300B # LEFT DOUBLE ANGLE BRACKET @@ -334,6 +366,16 @@ 3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET 301A; 301B # LEFT WHITE SQUARE BRACKET 301B; 301A # RIGHT WHITE SQUARE BRACKET +301D; 301E # REVERSED DOUBLE PRIME QUOTATION MARK +301E; 301D # DOUBLE PRIME QUOTATION MARK +FE59; FE5A # SMALL LEFT PARENTHESIS +FE5A; FE59 # SMALL RIGHT PARENTHESIS +FE5B; FE5C # SMALL LEFT CURLY BRACKET +FE5C; FE5B # SMALL RIGHT CURLY BRACKET +FE5D; FE5E # SMALL LEFT TORTOISE SHELL BRACKET +FE5E; FE5D # SMALL RIGHT TORTOISE SHELL BRACKET +FE64; FE65 # SMALL LESS-THAN SIGN +FE65; FE64 # SMALL GREATER-THAN SIGN FF08; FF09 # FULLWIDTH LEFT PARENTHESIS FF09; FF08 # FULLWIDTH RIGHT PARENTHESIS FF1C; FF1E # FULLWIDTH LESS-THAN SIGN @@ -347,8 +389,14 @@ FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET -# The following characters have no appropriate mirroring character +# The following characters have no appropriate mirroring character. +# For these characters it is up to the rendering system +# to provide mirrored glyphs. +# 201A; SINGLE LOW-9 QUOTATION MARK +# 201B; SINGLE HIGH-REVERSED-9 QUOTATION MARK +# 201E; DOUBLE LOW-9 QUOTATION MARK +# 201F; DOUBLE HIGH-REVERSED-9 QUOTATION MARK # 2140; DOUBLE-STRUCK N-ARY SUMMATION # 2201; COMPLEMENT # 2202; PARTIAL DIFFERENTIAL @@ -410,6 +458,7 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET # 22FF; Z NOTATION BAG MEMBERSHIP # 2320; TOP HALF INTEGRAL # 2321; BOTTOM HALF INTEGRAL +# 27C0; THREE DIMENSIONAL ANGLE # 27D3; LOWER RIGHT CORNER WITH DOT # 27D4; UPPER LEFT CORNER WITH DOT # 27DC; LEFT MULTIMAP @@ -523,3 +572,11 @@ FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET # 2AF3; PARALLEL WITH TILDE OPERATOR # 2AFB; TRIPLE SOLIDUS BINARY RELATION # 2AFD; DOUBLE SOLIDUS OPERATOR +# 301F; LOW DOUBLE PRIME QUOTATION MARK +# 1D6DB; MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +# 1D715; MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +# 1D74F; MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +# 1D789; MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +# 1D7C3; MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL + +# EOF diff --git a/icuSources/data/unidata/Blocks.txt b/icuSources/data/unidata/Blocks.txt index aeed970a..9cc87547 100644 --- a/icuSources/data/unidata/Blocks.txt +++ b/icuSources/data/unidata/Blocks.txt @@ -1,24 +1,31 @@ -# Blocks-4.0.1.txt -# Date: 2004-03-01, 15:52 [KW] +# Blocks-5.0.0.txt +# Date: 2006-02-15, 15:40:00 [KW] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html # +# Note: The casing of block names is not normative. +# For example, "Basic Latin" and "BASIC LATIN" are equivalent. +# +# Format: +# Start Code..End Code; Block Name + +# ================================================ + # Note: When comparing block names, casing, whitespace, hyphens, # and underbars are ignored. # For example, "Latin Extended-A" and "latin extended a" are equivalent. # For more information on the comparison of property values, # see UCD.html. # -# Code points not explicitly listed in this file are given the value No_Block. -# Format: -# Start Code..End Code; Block Name - -# ================================================ +# All code points not explicitly listed for Block +# have the value No_Block. # Property: Block +# +# @missing: 0000..10FFFF; No_Block 0000..007F; Basic Latin 0080..00FF; Latin-1 Supplement @@ -34,7 +41,9 @@ 0590..05FF; Hebrew 0600..06FF; Arabic 0700..074F; Syriac +0750..077F; Arabic Supplement 0780..07BF; Thaana +07C0..07FF; NKo 0900..097F; Devanagari 0980..09FF; Bengali 0A00..0A7F; Gurmukhi @@ -52,6 +61,7 @@ 10A0..10FF; Georgian 1100..11FF; Hangul Jamo 1200..137F; Ethiopic +1380..139F; Ethiopic Supplement 13A0..13FF; Cherokee 1400..167F; Unified Canadian Aboriginal Syllabics 1680..169F; Ogham @@ -64,8 +74,13 @@ 1800..18AF; Mongolian 1900..194F; Limbu 1950..197F; Tai Le +1980..19DF; New Tai Lue 19E0..19FF; Khmer Symbols +1A00..1A1F; Buginese +1B00..1B7F; Balinese 1D00..1D7F; Phonetic Extensions +1D80..1DBF; Phonetic Extensions Supplement +1DC0..1DFF; Combining Diacritical Marks Supplement 1E00..1EFF; Latin Extended Additional 1F00..1FFF; Greek Extended 2000..206F; General Punctuation @@ -92,6 +107,13 @@ 2980..29FF; Miscellaneous Mathematical Symbols-B 2A00..2AFF; Supplemental Mathematical Operators 2B00..2BFF; Miscellaneous Symbols and Arrows +2C00..2C5F; Glagolitic +2C60..2C7F; Latin Extended-C +2C80..2CFF; Coptic +2D00..2D2F; Georgian Supplement +2D30..2D7F; Tifinagh +2D80..2DDF; Ethiopic Extended +2E00..2E7F; Supplemental Punctuation 2E80..2EFF; CJK Radicals Supplement 2F00..2FDF; Kangxi Radicals 2FF0..2FFF; Ideographic Description Characters @@ -102,6 +124,7 @@ 3130..318F; Hangul Compatibility Jamo 3190..319F; Kanbun 31A0..31BF; Bopomofo Extended +31C0..31EF; CJK Strokes 31F0..31FF; Katakana Phonetic Extensions 3200..32FF; Enclosed CJK Letters and Months 3300..33FF; CJK Compatibility @@ -110,6 +133,10 @@ 4E00..9FFF; CJK Unified Ideographs A000..A48F; Yi Syllables A490..A4CF; Yi Radicals +A700..A71F; Modifier Tone Letters +A720..A7FF; Latin Extended-D +A800..A82F; Syloti Nagri +A840..A87F; Phags-pa AC00..D7AF; Hangul Syllables D800..DB7F; High Surrogates DB80..DBFF; High Private Use Surrogates @@ -119,6 +146,7 @@ F900..FAFF; CJK Compatibility Ideographs FB00..FB4F; Alphabetic Presentation Forms FB50..FDFF; Arabic Presentation Forms-A FE00..FE0F; Variation Selectors +FE10..FE1F; Vertical Forms FE20..FE2F; Combining Half Marks FE30..FE4F; CJK Compatibility Forms FE50..FE6F; Small Form Variants @@ -128,16 +156,24 @@ FFF0..FFFF; Specials 10000..1007F; Linear B Syllabary 10080..100FF; Linear B Ideograms 10100..1013F; Aegean Numbers +10140..1018F; Ancient Greek Numbers 10300..1032F; Old Italic 10330..1034F; Gothic 10380..1039F; Ugaritic +103A0..103DF; Old Persian 10400..1044F; Deseret 10450..1047F; Shavian 10480..104AF; Osmanya 10800..1083F; Cypriot Syllabary +10900..1091F; Phoenician +10A00..10A5F; Kharoshthi +12000..123FF; Cuneiform +12400..1247F; Cuneiform Numbers and Punctuation 1D000..1D0FF; Byzantine Musical Symbols 1D100..1D1FF; Musical Symbols +1D200..1D24F; Ancient Greek Musical Notation 1D300..1D35F; Tai Xuan Jing Symbols +1D360..1D37F; Counting Rod Numerals 1D400..1D7FF; Mathematical Alphanumeric Symbols 20000..2A6DF; CJK Unified Ideographs Extension B 2F800..2FA1F; CJK Compatibility Ideographs Supplement @@ -145,3 +181,5 @@ E0000..E007F; Tags E0100..E01EF; Variation Selectors Supplement F0000..FFFFF; Supplementary Private Use Area-A 100000..10FFFF; Supplementary Private Use Area-B + +# EOF \ No newline at end of file diff --git a/icuSources/data/unidata/CaseFolding.txt b/icuSources/data/unidata/CaseFolding.txt index 65f78ffd..83a79b2f 100644 --- a/icuSources/data/unidata/CaseFolding.txt +++ b/icuSources/data/unidata/CaseFolding.txt @@ -1,10 +1,11 @@ -# CaseFolding-4.0.1.txt -# Date: 2004-03-02, 02:41:24 GMT [MD] +# CaseFolding-5.0.0.txt +# Date: 2006-03-03, 08:22:43 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html +# # Case Folding Properties # # This file is a supplement to the UnicodeData file. @@ -16,7 +17,7 @@ # 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. +# 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. # @@ -271,6 +272,19 @@ 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 0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS 0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS @@ -331,6 +345,9 @@ 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 @@ -423,6 +440,7 @@ 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 @@ -449,7 +467,11 @@ 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 @@ -458,6 +480,8 @@ 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 0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB 0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN 0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM @@ -497,6 +521,44 @@ 0555; C; 0585; # ARMENIAN CAPITAL LETTER OH 0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH 0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN +10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN +10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN +10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN +10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON +10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN +10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN +10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN +10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN +10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN +10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN +10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS +10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN +10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR +10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON +10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR +10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR +10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE +10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN +10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR +10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN +10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR +10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR +10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN +10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR +10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN +10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN +10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN +10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL +10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL +10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR +10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN +10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN +10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE +10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE +10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE +10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE +10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR +10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE 1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW 1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW @@ -802,6 +864,7 @@ 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 @@ -818,6 +881,7 @@ 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 @@ -844,6 +908,111 @@ 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 +2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H +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 FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL diff --git a/icuSources/data/unidata/DerivedAge.txt b/icuSources/data/unidata/DerivedAge.txt index e74462ca..00f5a51a 100644 --- a/icuSources/data/unidata/DerivedAge.txt +++ b/icuSources/data/unidata/DerivedAge.txt @@ -1,8 +1,8 @@ -# DerivedAge-4.0.1.txt -# Date: 2004-03-02, 02:41:24 GMT [MD] +# DerivedAge-5.0.0.txt +# Date: 2006-07-14, 17:25:00 PST [MD/KW] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html # @@ -42,6 +42,8 @@ # All code points not explicitly listed for Age # have the value unassigned. +# @missing: 0000..10FFFF; unassigned + # ================================================ # Assigned as of Unicode 1.1.0 (June, 1993) @@ -726,3 +728,140 @@ FE47..FE48 ; 4.0 # [2] PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET.. E0100..E01EF ; 4.0 # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 # Total code points: 1226 + +# ================================================ + +# Newly assigned in Unicode 4.1.0 (March, 2005) + +0237..0241 ; 4.1 # [11] LATIN SMALL LETTER DOTLESS J..LATIN CAPITAL LETTER GLOTTAL STOP +0358..035C ; 4.1 # [5] COMBINING DOT ABOVE RIGHT..COMBINING DOUBLE BREVE BELOW +03FC..03FF ; 4.1 # [4] GREEK RHO WITH STROKE SYMBOL..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +04F6..04F7 ; 4.1 # [2] CYRILLIC CAPITAL LETTER GHE WITH DESCENDER..CYRILLIC SMALL LETTER GHE WITH DESCENDER +05A2 ; 4.1 # HEBREW ACCENT ATNAH HAFUKH +05C5..05C7 ; 4.1 # [3] HEBREW MARK LOWER DOT..HEBREW POINT QAMATS QATAN +060B ; 4.1 # AFGHANI SIGN +061E ; 4.1 # ARABIC TRIPLE DOT PUNCTUATION MARK +0659..065E ; 4.1 # [6] ARABIC ZWARAKAY..ARABIC FATHA WITH TWO DOTS +0750..076D ; 4.1 # [30] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE +097D ; 4.1 # DEVANAGARI LETTER GLOTTAL STOP +09CE ; 4.1 # BENGALI LETTER KHANDA TA +0BB6 ; 4.1 # TAMIL LETTER SHA +0BE6 ; 4.1 # TAMIL DIGIT ZERO +0FD0..0FD1 ; 4.1 # [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN +10F9..10FA ; 4.1 # [2] GEORGIAN LETTER TURNED GAN..GEORGIAN LETTER AIN +10FC ; 4.1 # MODIFIER LETTER GEORGIAN NAR +1207 ; 4.1 # ETHIOPIC SYLLABLE HOA +1247 ; 4.1 # ETHIOPIC SYLLABLE QOA +1287 ; 4.1 # ETHIOPIC SYLLABLE XOA +12AF ; 4.1 # ETHIOPIC SYLLABLE KOA +12CF ; 4.1 # ETHIOPIC SYLLABLE WOA +12EF ; 4.1 # ETHIOPIC SYLLABLE YOA +130F ; 4.1 # ETHIOPIC SYLLABLE GOA +131F ; 4.1 # ETHIOPIC SYLLABLE GGWAA +1347 ; 4.1 # ETHIOPIC SYLLABLE TZOA +135F..1360 ; 4.1 # [2] ETHIOPIC COMBINING GEMINATION MARK..ETHIOPIC SECTION MARK +1380..1399 ; 4.1 # [26] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC TONAL MARK KURT +1980..19A9 ; 4.1 # [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA +19B0..19C9 ; 4.1 # [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; 4.1 # [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +19DE..19DF ; 4.1 # [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV +1A00..1A1B ; 4.1 # [28] BUGINESE LETTER KA..BUGINESE VOWEL SIGN AE +1A1E..1A1F ; 4.1 # [2] BUGINESE PALLAWA..BUGINESE END OF SECTION +1D6C..1DC3 ; 4.1 # [88] LATIN SMALL LETTER B WITH MIDDLE TILDE..COMBINING SUSPENSION MARK +2055..2056 ; 4.1 # [2] FLOWER PUNCTUATION MARK..THREE DOT PUNCTUATION +2058..205E ; 4.1 # [7] FOUR DOT PUNCTUATION..VERTICAL FOUR DOTS +2090..2094 ; 4.1 # [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA +20B2..20B5 ; 4.1 # [4] GUARANI SIGN..CEDI SIGN +20EB ; 4.1 # COMBINING LONG DOUBLE SOLIDUS OVERLAY +213C ; 4.1 # DOUBLE-STRUCK SMALL PI +214C ; 4.1 # PER SIGN +23D1..23DB ; 4.1 # [11] METRICAL BREVE..FUSE +2618 ; 4.1 # SHAMROCK +267E..267F ; 4.1 # [2] PERMANENT PAPER SIGN..WHEELCHAIR SYMBOL +2692..269C ; 4.1 # [11] HAMMER AND PICK..FLEUR-DE-LIS +26A2..26B1 ; 4.1 # [16] DOUBLED FEMALE SIGN..FUNERAL URN +27C0..27C6 ; 4.1 # [7] THREE DIMENSIONAL ANGLE..RIGHT S-SHAPED BAG DELIMITER +2B0E..2B13 ; 4.1 # [6] RIGHTWARDS ARROW WITH TIP DOWNWARDS..SQUARE WITH BOTTOM HALF BLACK +2C00..2C2E ; 4.1 # [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C30..2C5E ; 4.1 # [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C80..2CEA ; 4.1 # [107] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL SHIMA SIMA +2CF9..2D25 ; 4.1 # [45] COPTIC OLD NUBIAN FULL STOP..GEORGIAN SMALL LETTER HOE +2D30..2D65 ; 4.1 # [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ +2D6F ; 4.1 # TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D80..2D96 ; 4.1 # [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; 4.1 # [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; 4.1 # [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; 4.1 # [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; 4.1 # [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; 4.1 # [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; 4.1 # [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; 4.1 # [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; 4.1 # [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2E00..2E17 ; 4.1 # [24] RIGHT ANGLE SUBSTITUTION MARKER..DOUBLE OBLIQUE HYPHEN +2E1C..2E1D ; 4.1 # [2] LEFT LOW PARAPHRASE BRACKET..RIGHT LOW PARAPHRASE BRACKET +31C0..31CF ; 4.1 # [16] CJK STROKE T..CJK STROKE N +327E ; 4.1 # CIRCLED HANGUL IEUNG U +9FA6..9FBB ; 4.1 # [22] CJK UNIFIED IDEOGRAPH-9FA6..CJK UNIFIED IDEOGRAPH-9FBB +A700..A716 ; 4.1 # [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A800..A82B ; 4.1 # [44] SYLOTI NAGRI LETTER A..SYLOTI NAGRI POETRY MARK-4 +FA70..FAD9 ; 4.1 # [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FE10..FE19 ; 4.1 # [10] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +10140..1018A ; 4.1 # [75] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ZERO SIGN +103A0..103C3 ; 4.1 # [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103D5 ; 4.1 # [14] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN NUMBER HUNDRED +10A00..10A03 ; 4.1 # [4] KHAROSHTHI LETTER A..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; 4.1 # [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A13 ; 4.1 # [8] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI LETTER GHA +10A15..10A17 ; 4.1 # [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A33 ; 4.1 # [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA +10A38..10A3A ; 4.1 # [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F..10A47 ; 4.1 # [9] KHAROSHTHI VIRAMA..KHAROSHTHI NUMBER ONE THOUSAND +10A50..10A58 ; 4.1 # [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +1D200..1D245 ; 4.1 # [70] GREEK VOCAL NOTATION SYMBOL-1..GREEK MUSICAL LEIMMA +1D6A4..1D6A5 ; 4.1 # [2] MATHEMATICAL ITALIC SMALL DOTLESS I..MATHEMATICAL ITALIC SMALL DOTLESS J + +# Total code points: 1273 + +# ================================================ + +# Newly assigned in Unicode 5.0.0 (July, 2006) + +0242..024F ; 5.0 # [14] LATIN SMALL LETTER GLOTTAL STOP..LATIN SMALL LETTER Y WITH STROKE +037B..037D ; 5.0 # [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +04CF ; 5.0 # CYRILLIC SMALL LETTER PALOCHKA +04FA..04FF ; 5.0 # [6] CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK..CYRILLIC SMALL LETTER HA WITH STROKE +0510..0513 ; 5.0 # [4] CYRILLIC CAPITAL LETTER REVERSED ZE..CYRILLIC SMALL LETTER EL WITH HOOK +05BA ; 5.0 # HEBREW POINT HOLAM HASER FOR VAV +07C0..07FA ; 5.0 # [59] NKO DIGIT ZERO..NKO LAJANYALAN +097B..097C ; 5.0 # [2] DEVANAGARI LETTER GGA..DEVANAGARI LETTER JJA +097E..097F ; 5.0 # [2] DEVANAGARI LETTER DDDA..DEVANAGARI LETTER BBA +0CE2..0CE3 ; 5.0 # [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0CF1..0CF2 ; 5.0 # [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +1B00..1B4B ; 5.0 # [76] BALINESE SIGN ULU RICEM..BALINESE LETTER ASYURA SASAK +1B50..1B7C ; 5.0 # [45] BALINESE DIGIT ZERO..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1DC4..1DCA ; 5.0 # [7] COMBINING MACRON-ACUTE..COMBINING LATIN SMALL LETTER R BELOW +1DFE..1DFF ; 5.0 # [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +20EC..20EF ; 5.0 # [4] COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS..COMBINING RIGHT ARROW BELOW +214D..214E ; 5.0 # [2] AKTIESELSKAB..TURNED SMALL F +2184 ; 5.0 # LATIN SMALL LETTER REVERSED C +23DC..23E7 ; 5.0 # [12] TOP PARENTHESIS..ELECTRICAL INTERSECTION +26B2 ; 5.0 # NEUTER +27C7..27CA ; 5.0 # [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE +2B14..2B1A ; 5.0 # [7] SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK..DOTTED SQUARE +2B20..2B23 ; 5.0 # [4] WHITE PENTAGON..HORIZONTAL BLACK HEXAGON +2C60..2C6C ; 5.0 # [13] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SMALL LETTER Z WITH DESCENDER +2C74..2C77 ; 5.0 # [4] LATIN SMALL LETTER V WITH CURL..LATIN SMALL LETTER TAILLESS PHI +A717..A71A ; 5.0 # [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE +A720..A721 ; 5.0 # [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A840..A877 ; 5.0 # [56] PHAGS-PA LETTER KA..PHAGS-PA MARK DOUBLE SHAD +10900..10919 ; 5.0 # [26] PHOENICIAN LETTER ALF..PHOENICIAN NUMBER ONE HUNDRED +1091F ; 5.0 # PHOENICIAN WORD SEPARATOR +12000..1236E ; 5.0 # [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM +12400..12462 ; 5.0 # [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER +12470..12473 ; 5.0 # [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON +1D360..1D371 ; 5.0 # [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE +1D7CA..1D7CB ; 5.0 # [2] MATHEMATICAL BOLD CAPITAL DIGAMMA..MATHEMATICAL BOLD SMALL DIGAMMA + +# Total code points: 1369 + +# EOF diff --git a/icuSources/data/unidata/DerivedBidiClass.txt b/icuSources/data/unidata/DerivedBidiClass.txt index e876bd31..6099af1e 100644 --- a/icuSources/data/unidata/DerivedBidiClass.txt +++ b/icuSources/data/unidata/DerivedBidiClass.txt @@ -1,18 +1,29 @@ -# DerivedBidiClass-4.0.1.txt -# Date: 2004-03-11, 18:33:24 GMT [MD] +# DerivedBidiClass-5.0.0.txt +# Date: 2006-03-09, 23:13:34 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html # ================================================ # Bidi Class (listing UnicodeData.txt, field 4: see UCD.html) +# Unlike other properties, unassigned code points in blocks +# reserved for right-to-left scripts are given either types R or AL. +# The unassigned characters that default to R are: +# Hebrew, Cypriot_Syllabary, Kharoshthi, and the ranges \u07C0-\u08FF +# \uFB1D-\uFB4F \U00010840-\U000109FF \U00010A60-\U00010FFF +# The unassigned characters that default to AL are: +# Arabic, Syriac, Arabic_Supplement, Thaana, Arabic_Presentation_Forms_A, +# Arabic_Presentation_Forms_B, minus the Noncharacter_Code_Points +# For all other cases: # All code points not explicitly listed for Bidi_Class # have the value Left_To_Right (L). +# @missing: 0000..10FFFF; Left_To_Right + # ================================================ # Bidi_Class=Left_To_Right @@ -28,27 +39,25 @@ 01BB ; L # Lo LATIN LETTER TWO WITH STROKE 01BC..01BF ; L # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; L # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK -01C4..0236 ; L # L& [115] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER T WITH CURL -0250..02AF ; L # L& [96] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +01C4..0293 ; L # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294 ; L # Lo LATIN LETTER GLOTTAL STOP +0295..02AF ; L # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02B8 ; L # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y 02BB..02C1 ; L # Lm [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP 02D0..02D1 ; L # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; L # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP 02EE ; L # Lm MODIFIER LETTER DOUBLE APOSTROPHE 037A ; L # Lm GREEK YPOGEGRAMMENI +037B..037D ; L # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL 0386 ; L # L& GREEK CAPITAL LETTER ALPHA WITH TONOS 0388..038A ; L # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS 038C ; L # L& GREEK CAPITAL LETTER OMICRON WITH TONOS 038E..03A1 ; L # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO 03A3..03CE ; L # L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS 03D0..03F5 ; L # L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL -03F7..03FB ; L # L& [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN -0400..0481 ; L # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA +03F7..0481 ; L # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA 0482 ; L # So CYRILLIC THOUSANDS SIGN -048A..04CE ; L # L& [69] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL -04D0..04F5 ; L # L& [38] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER CHE WITH DIAERESIS -04F8..04F9 ; L # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS -0500..050F ; L # L& [16] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER KOMI TJE +048A..0513 ; L # L& [138] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH HOOK 0531..0556 ; L # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH 0559 ; L # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING 055A..055F ; L # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK @@ -64,6 +73,7 @@ 0964..0965 ; L # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA 0966..096F ; L # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE 0970 ; L # Po DEVANAGARI ABBREVIATION SIGN +097B..097F ; L # Lo [5] DEVANAGARI LETTER GGA..DEVANAGARI LETTER BBA 0982..0983 ; L # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA 0985..098C ; L # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L 098F..0990 ; L # Lo [2] BENGALI LETTER E..BENGALI LETTER AI @@ -75,6 +85,7 @@ 09BE..09C0 ; L # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II 09C7..09C8 ; L # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI 09CB..09CC ; L # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CE ; L # Lo BENGALI LETTER KHANDA TA 09D7 ; L # Mc BENGALI AU LENGTH MARK 09DC..09DD ; L # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA 09DF..09E1 ; L # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL @@ -136,14 +147,13 @@ 0B9E..0B9F ; L # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA 0BA3..0BA4 ; L # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA 0BA8..0BAA ; L # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA -0BAE..0BB5 ; L # Lo [8] TAMIL LETTER MA..TAMIL LETTER VA -0BB7..0BB9 ; L # Lo [3] TAMIL LETTER SSA..TAMIL LETTER HA +0BAE..0BB9 ; L # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA 0BBE..0BBF ; L # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I 0BC1..0BC2 ; L # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU 0BC6..0BC8 ; L # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI 0BCA..0BCC ; L # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU 0BD7 ; L # Mc TAMIL AU LENGTH MARK -0BE7..0BEF ; L # Nd [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE +0BE6..0BEF ; L # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE 0BF0..0BF2 ; L # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND 0C01..0C03 ; L # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA 0C05..0C0C ; L # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L @@ -236,6 +246,7 @@ 0FBE..0FC5 ; L # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE 0FC7..0FCC ; L # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL 0FCF ; L # So TIBETAN SIGN RDEL NAG GSUM +0FD0..0FD1 ; L # Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN 1000..1021 ; L # Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A 1023..1027 ; L # Lo [5] MYANMAR LETTER I..MYANMAR LETTER E 1029..102A ; L # Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU @@ -247,39 +258,32 @@ 1050..1055 ; L # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL 1056..1057 ; L # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR 10A0..10C5 ; L # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE -10D0..10F8 ; L # Lo [41] GEORGIAN LETTER AN..GEORGIAN LETTER ELIFI +10D0..10FA ; L # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN 10FB ; L # Po GEORGIAN PARAGRAPH SEPARATOR +10FC ; L # Lm MODIFIER LETTER GEORGIAN NAR 1100..1159 ; L # Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH 115F..11A2 ; L # Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA 11A8..11F9 ; L # Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH -1200..1206 ; L # Lo [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO -1208..1246 ; L # Lo [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO -1248 ; L # Lo ETHIOPIC SYLLABLE QWA +1200..1248 ; L # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA 124A..124D ; L # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE 1250..1256 ; L # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO 1258 ; L # Lo ETHIOPIC SYLLABLE QHWA 125A..125D ; L # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE -1260..1286 ; L # Lo [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO -1288 ; L # Lo ETHIOPIC SYLLABLE XWA +1260..1288 ; L # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA 128A..128D ; L # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE -1290..12AE ; L # Lo [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO -12B0 ; L # Lo ETHIOPIC SYLLABLE KWA +1290..12B0 ; L # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA 12B2..12B5 ; L # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE 12B8..12BE ; L # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO 12C0 ; L # Lo ETHIOPIC SYLLABLE KXWA 12C2..12C5 ; L # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE -12C8..12CE ; L # Lo [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO -12D0..12D6 ; L # Lo [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O -12D8..12EE ; L # Lo [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO -12F0..130E ; L # Lo [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO -1310 ; L # Lo ETHIOPIC SYLLABLE GWA +12C8..12D6 ; L # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; L # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA 1312..1315 ; L # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE -1318..131E ; L # Lo [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO -1320..1346 ; L # Lo [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO -1348..135A ; L # Lo [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA +1318..135A ; L # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1360 ; L # So ETHIOPIC SECTION MARK 1361..1368 ; L # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR -1369..1371 ; L # Nd [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE -1372..137C ; L # No [11] ETHIOPIC NUMBER TEN..ETHIOPIC NUMBER TEN THOUSAND +1369..137C ; L # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND +1380..138F ; L # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE 13A0..13F4 ; L # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV 1401..166C ; L # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA 166D..166E ; L # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP @@ -317,9 +321,31 @@ 1946..194F ; L # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE 1950..196D ; L # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI 1970..1974 ; L # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19A9 ; L # Lo [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA +19B0..19C0 ; L # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY +19C1..19C7 ; L # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B +19C8..19C9 ; L # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; L # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +1A00..1A16 ; L # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A19..1A1B ; L # Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE +1A1E..1A1F ; L # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION +1B04 ; L # Mc BALINESE SIGN BISAH +1B05..1B33 ; L # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B35 ; L # Mc BALINESE VOWEL SIGN TEDUNG +1B3B ; L # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D..1B41 ; L # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43..1B44 ; L # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B45..1B4B ; L # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B50..1B59 ; L # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B5A..1B60 ; L # Po [7] BALINESE PANTI..BALINESE PAMENENG +1B61..1B6A ; L # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE +1B74..1B7C ; L # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING 1D00..1D2B ; L # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL 1D2C..1D61 ; L # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI -1D62..1D6B ; L # L& [10] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER UE +1D62..1D77 ; L # L& [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G +1D78 ; L # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; L # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; L # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA 1E00..1E9B ; L # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE 1EA0..1EF9 ; L # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE 1F00..1F15 ; L # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA @@ -344,6 +370,7 @@ 200E ; L # Cf LEFT-TO-RIGHT MARK 2071 ; L # L& SUPERSCRIPT LATIN SMALL LETTER I 207F ; L # L& SUPERSCRIPT LATIN SMALL LETTER N +2090..2094 ; L # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA 2102 ; L # L& DOUBLE-STRUCK CAPITAL C 2107 ; L # L& EULER CONSTANT 210A..2113 ; L # L& [10] SCRIPT SMALL G..SCRIPT SMALL L @@ -353,17 +380,36 @@ 2126 ; L # L& OHM SIGN 2128 ; L # L& BLACK-LETTER CAPITAL Z 212A..212D ; L # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C -212F..2131 ; L # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F -2133..2134 ; L # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O +212F..2134 ; L # L& [6] SCRIPT SMALL E..SCRIPT SMALL O 2135..2138 ; L # Lo [4] ALEF SYMBOL..DALET SYMBOL 2139 ; L # L& INFORMATION SOURCE -213D..213F ; L # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI +213C..213F ; L # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI 2145..2149 ; L # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J -2160..2183 ; L # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED +214E ; L # L& TURNED SMALL F +2160..2182 ; L # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; L # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2336..237A ; L # So [69] APL FUNCTIONAL SYMBOL I-BEAM..APL FUNCTIONAL SYMBOL ALPHA 2395 ; L # So APL FUNCTIONAL SYMBOL QUAD 249C..24E9 ; L # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +26AC ; L # So MEDIUM SMALL WHITE CIRCLE 2800..28FF ; L # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 +2C00..2C2E ; L # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C30..2C5E ; L # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C60..2C6C ; L # L& [13] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SMALL LETTER Z WITH DESCENDER +2C74..2C77 ; L # L& [4] LATIN SMALL LETTER V WITH CURL..LATIN SMALL LETTER TAILLESS PHI +2C80..2CE4 ; L # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI +2D00..2D25 ; L # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D30..2D65 ; L # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ +2D6F ; L # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D80..2D96 ; L # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; L # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; L # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; L # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; L # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; L # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; L # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; L # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; L # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO 3005 ; L # Lm IDEOGRAPHIC ITERATION MARK 3006 ; L # Lo IDEOGRAPHIC CLOSING MARK 3007 ; L # Nl IDEOGRAPHIC NUMBER ZERO @@ -398,12 +444,30 @@ 337B..33DD ; L # So [99] SQUARE ERA NAME HEISEI..SQUARE WB 33E0..33FE ; L # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 3400..4DB5 ; L # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 -4E00..9FA5 ; L # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5 -A000..A48C ; L # Lo [1165] YI SYLLABLE IT..YI SYLLABLE YYR +4E00..9FBB ; L # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB +A000..A014 ; L # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +A015 ; L # Lm YI SYLLABLE WU +A016..A48C ; L # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A800..A801 ; L # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I +A803..A805 ; L # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; L # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80C..A822 ; L # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; L # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A827 ; L # Mc SYLOTI NAGRI VOWEL SIGN OO +A840..A873 ; L # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU AC00..D7A3 ; L # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH E000..F801 ; L # Co [6146] .. +F880 ; L # So Apple Corporate deprecated metrics char +F881 ; L # So Apple Corporate deprecated metrics char +F8A2..F8A7 ; L # Nl [6] .. +F8A8..F8AC ; L # So [5] .. +F8B2 ; L # So Apple Corporate deprecated Japanese symbol +F8B3 ; L # So Apple Corporate deprecated Japanese symbol +F8B8 ; L # Lm Apple Corporate deprecated kana form +F8C1..F8D6 ; L # Lo [22] .. F900..FA2D ; L # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D FA30..FA6A ; L # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; L # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 FB00..FB06 ; L # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST FB13..FB17 ; L # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH FF21..FF3A ; L # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z @@ -430,13 +494,22 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 10137..1013F ; L # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT 10300..1031E ; L # Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU 10320..10323 ; L # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY -10330..10349 ; L # Lo [26] GOTHIC LETTER AHSA..GOTHIC LETTER OTHAL +10330..10340 ; L # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA +10341 ; L # Nl GOTHIC LETTER NINETY +10342..10349 ; L # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL 1034A ; L # Nl GOTHIC LETTER NINE HUNDRED 10380..1039D ; L # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU 1039F ; L # Po UGARITIC WORD DIVIDER +103A0..103C3 ; L # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; L # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D0 ; L # Po OLD PERSIAN WORD DIVIDER +103D1..103D5 ; L # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED 10400..1044F ; L # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW 10450..1049D ; L # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO 104A0..104A9 ; L # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +12000..1236E ; L # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM +12400..12462 ; L # Nl [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER +12470..12473 ; L # Po [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON 1D000..1D0F5 ; L # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; L # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D12A..1D164 ; L # So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -446,6 +519,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1D183..1D184 ; L # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN 1D18C..1D1A9 ; L # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH 1D1AE..1D1DD ; L # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS +1D360..1D371 ; L # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE 1D400..1D454 ; L # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; L # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; L # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -464,7 +538,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1D540..1D544 ; L # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M 1D546 ; L # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1D54A..1D550 ; L # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y -1D552..1D6A3 ; L # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z +1D552..1D6A5 ; L # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J 1D6A8..1D6C0 ; L # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA 1D6C1 ; L # Sm MATHEMATICAL BOLD NABLA 1D6C2..1D6DA ; L # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA @@ -485,33 +559,38 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1D7A9 ; L # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7AA..1D7C2 ; L # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C3 ; L # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL -1D7C4..1D7C9 ; L # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +1D7C4..1D7CB ; L # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA 20000..2A6D6 ; L # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 2F800..2FA1D ; L # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D F0000..FFFFD ; L # Co [65534] .. 100000..10FFFD; L # Co [65534] .. -# The above property value applies to 873851 code points not listed here. -# Total code points: 1102638 +# The above property value applies to 871403 code points not listed here. +# Total code points: 1102227 # ================================================ # Bidi_Class=Right_To_Left 0590 ; R # Cn -05A2 ; R # Cn -05BA ; R # Cn 05BE ; R # Po HEBREW PUNCTUATION MAQAF 05C0 ; R # Po HEBREW PUNCTUATION PASEQ 05C3 ; R # Po HEBREW PUNCTUATION SOF PASUQ -05C5..05CF ; R # Cn [11] .. +05C6 ; R # Po HEBREW PUNCTUATION NUN HAFUKHA +05C8..05CF ; R # Cn [8] .. 05D0..05EA ; R # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV 05EB..05EF ; R # Cn [5] .. 05F0..05F2 ; R # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD 05F3..05F4 ; R # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM 05F5..05FF ; R # Cn [11] .. -07C0..08FF ; R # Cn [320] .. +07C0..07C9 ; R # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; R # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07F4..07F5 ; R # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; R # Lm NKO LAJANYALAN +07FB..08FF ; R # Cn [261] .. 200F ; R # Cf RIGHT-TO-LEFT MARK +F883 ; R # Sc Apple Corporate deprecated Arabic rial +F89A..F89E ; R # Lo [5] .. FB1D ; R # Lo HEBREW LETTER YOD WITH HIRIQ FB1F..FB28 ; R # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV FB2A..FB36 ; R # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH @@ -536,9 +615,27 @@ FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE AL 1083C ; R # Lo CYPRIOT SYLLABLE ZA 1083D..1083E ; R # Cn [2] .. 1083F ; R # Lo CYPRIOT SYLLABLE ZO -10840..10FFF ; R # Cn [1984] .. - -# Total code points: 2483 +10840..108FF ; R # Cn [192] .. +10900..10915 ; R # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10916..10919 ; R # No [4] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER ONE HUNDRED +1091A..1091E ; R # Cn [5] .. +10920..109FF ; R # Cn [224] .. +10A00 ; R # Lo KHAROSHTHI LETTER A +10A04 ; R # Cn +10A07..10A0B ; R # Cn [5] .. +10A10..10A13 ; R # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A14 ; R # Cn +10A15..10A17 ; R # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A18 ; R # Cn +10A19..10A33 ; R # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA +10A34..10A37 ; R # Cn [4] .. +10A3B..10A3E ; R # Cn [4] .. +10A40..10A47 ; R # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND +10A48..10A4F ; R # Cn [8] .. +10A50..10A58 ; R # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +10A59..10FFF ; R # Cn [1447] .. + +# Total code points: 2452 # ================================================ @@ -552,6 +649,7 @@ FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE AL 2074..2079 ; EN # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE 2080..2089 ; EN # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE 2488..249B ; EN # No [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP +F8A1 ; EN # No Apple Corporate deprecated Japanese symbol FF10..FF19 ; EN # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1D7CE..1D7FF ; EN # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE @@ -563,9 +661,16 @@ FF10..FF19 ; EN # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 002B ; ES # Sm PLUS SIGN 002D ; ES # Pd HYPHEN-MINUS -FF0F ; ES # Po FULLWIDTH SOLIDUS +207A..207B ; ES # Sm [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS +208A..208B ; ES # Sm [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS +2212 ; ES # Sm MINUS SIGN +FB29 ; ES # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FE62 ; ES # Sm SMALL PLUS SIGN +FE63 ; ES # Pd SMALL HYPHEN-MINUS +FF0B ; ES # Sm FULLWIDTH PLUS SIGN +FF0D ; ES # Pd FULLWIDTH HYPHEN-MINUS -# Total code points: 3 +# Total code points: 12 # ================================================ @@ -584,26 +689,20 @@ FF0F ; ES # Po FULLWIDTH SOLIDUS 0E3F ; ET # Sc THAI CURRENCY SYMBOL BAHT 17DB ; ET # Sc KHMER CURRENCY SYMBOL RIEL 2030..2034 ; ET # Po [5] PER MILLE SIGN..TRIPLE PRIME -207A..207B ; ET # Sm [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS -208A..208B ; ET # Sm [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS -20A0..20B1 ; ET # Sc [18] EURO-CURRENCY SIGN..PESO SIGN +20A0..20B5 ; ET # Sc [22] EURO-CURRENCY SIGN..CEDI SIGN 212E ; ET # So ESTIMATED SYMBOL -2212..2213 ; ET # Sm [2] MINUS SIGN..MINUS-OR-PLUS SIGN -FB29 ; ET # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +2213 ; ET # Sm MINUS-OR-PLUS SIGN +F8A0 ; ET # Sc Apple Corporate deprecated Euro FE5F ; ET # Po SMALL NUMBER SIGN -FE62 ; ET # Sm SMALL PLUS SIGN -FE63 ; ET # Pd SMALL HYPHEN-MINUS FE69 ; ET # Sc SMALL DOLLAR SIGN FE6A ; ET # Po SMALL PERCENT SIGN FF03 ; ET # Po FULLWIDTH NUMBER SIGN FF04 ; ET # Sc FULLWIDTH DOLLAR SIGN FF05 ; ET # Po FULLWIDTH PERCENT SIGN -FF0B ; ET # Sm FULLWIDTH PLUS SIGN -FF0D ; ET # Pd FULLWIDTH HYPHEN-MINUS FFE0..FFE1 ; ET # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN FFE5..FFE6 ; ET # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN -# Total code points: 61 +# Total code points: 55 # ================================================ @@ -623,15 +722,16 @@ FFE5..FFE6 ; ET # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 003A ; CS # Po COLON 00A0 ; CS # Zs NO-BREAK SPACE 060C ; CS # Po ARABIC COMMA +202F ; CS # Zs NARROW NO-BREAK SPACE 2044 ; CS # Sm FRACTION SLASH FE50 ; CS # Po SMALL COMMA FE52 ; CS # Po SMALL FULL STOP FE55 ; CS # Po SMALL COLON FF0C ; CS # Po FULLWIDTH COMMA -FF0E ; CS # Po FULLWIDTH FULL STOP +FF0E..FF0F ; CS # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS FF1A ; CS # Po FULLWIDTH COLON -# Total code points: 13 +# Total code points: 15 # ================================================ @@ -665,11 +765,10 @@ FF1A ; CS # Po FULLWIDTH COLON 180E ; WS # Zs MONGOLIAN VOWEL SEPARATOR 2000..200A ; WS # Zs [11] EN QUAD..HAIR SPACE 2028 ; WS # Zl LINE SEPARATOR -202F ; WS # Zs NARROW NO-BREAK SPACE 205F ; WS # Zs MEDIUM MATHEMATICAL SPACE 3000 ; WS # Zs IDEOGRAPHIC SPACE -# Total code points: 19 +# Total code points: 18 # ================================================ @@ -724,12 +823,16 @@ FF1A ; CS # Po FULLWIDTH COLON 058A ; ON # Pd ARMENIAN HYPHEN 060E..060F ; ON # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA 06E9 ; ON # So ARABIC PLACE OF SAJDAH +07F6 ; ON # So NKO SYMBOL OO DENNEN +07F7..07F9 ; ON # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK 0BF3..0BF8 ; ON # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN 0BFA ; ON # So TAMIL NUMBER SIGN +0CF1..0CF2 ; ON # So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0F3A ; ON # Ps TIBETAN MARK GUG RTAGS GYON 0F3B ; ON # Pe TIBETAN MARK GUG RTAGS GYAS 0F3C ; ON # Ps TIBETAN MARK ANG KHANG GYON 0F3D ; ON # Pe TIBETAN MARK ANG KHANG GYAS +1390..1399 ; ON # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT 169B ; ON # Ps OGHAM FEATHER MARK 169C ; ON # Pe OGHAM REVERSED FEATHER MARK 17F0..17F9 ; ON # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON @@ -738,6 +841,7 @@ FF1A ; CS # Po FULLWIDTH COLON 1807..180A ; ON # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU 1940 ; ON # So LIMBU SIGN LOO 1944..1945 ; ON # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK +19DE..19DF ; ON # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV 19E0..19FF ; ON # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC 1FBD ; ON # Sk GREEK KORONIS 1FBF..1FC1 ; ON # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI @@ -767,7 +871,7 @@ FF1A ; CS # Po FULLWIDTH COLON 2052 ; ON # Sm COMMERCIAL MINUS SIGN 2053 ; ON # Po SWUNG DASH 2054 ; ON # Pc INVERTED UNDERTIE -2057 ; ON # Po QUADRUPLE PRIME +2055..205E ; ON # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS 207C ; ON # Sm SUPERSCRIPT EQUALS SIGN 207D ; ON # Ps SUPERSCRIPT LEFT PARENTHESIS 207E ; ON # Pe SUPERSCRIPT RIGHT PARENTHESIS @@ -783,11 +887,11 @@ FF1A ; CS # Po FULLWIDTH COLON 2125 ; ON # So OUNCE SIGN 2127 ; ON # So INVERTED OHM SIGN 2129 ; ON # So TURNED GREEK SMALL LETTER IOTA -2132 ; ON # So TURNED CAPITAL F 213A..213B ; ON # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN 2140..2144 ; ON # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y 214A ; ON # So PROPERTY LINE 214B ; ON # Sm TURNED AMPERSAND +214C..214D ; ON # So [2] PER SIGN..AKTIESELSKAB 2153..215F ; ON # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE 2190..2194 ; ON # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW 2195..2199 ; ON # So [5] UP DOWN ARROW..SOUTH WEST ARROW @@ -822,10 +926,9 @@ FF1A ; CS # Po FULLWIDTH COLON 237D..2394 ; ON # So [24] SHOULDERED OPEN BOX..SOFTWARE-FUNCTION SYMBOL 2396..239A ; ON # So [5] DECIMAL SEPARATOR KEY SYMBOL..CLEAR SCREEN SYMBOL 239B..23B3 ; ON # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM -23B4 ; ON # Ps TOP SQUARE BRACKET -23B5 ; ON # Pe BOTTOM SQUARE BRACKET -23B6 ; ON # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET -23B7..23D0 ; ON # So [26] RADICAL SYMBOL BOTTOM..VERTICAL LINE EXTENSION +23B4..23DB ; ON # So [40] TOP SQUARE BRACKET..FUSE +23DC..23E1 ; ON # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +23E2..23E7 ; ON # So [6] WHITE TRAPEZIUM..ELECTRICAL INTERSECTION 2400..2426 ; ON # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO 2440..244A ; ON # So [11] OCR HOOK..OCR DOUBLE BACKSLASH 2460..2487 ; ON # No [40] CIRCLED DIGIT ONE..PARENTHESIZED NUMBER TWENTY @@ -836,12 +939,11 @@ FF1A ; CS # Po FULLWIDTH COLON 25C1 ; ON # Sm WHITE LEFT-POINTING TRIANGLE 25C2..25F7 ; ON # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT 25F8..25FF ; ON # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE -2600..2617 ; ON # So [24] BLACK SUN WITH RAYS..BLACK SHOGI PIECE -2619..266E ; ON # So [86] REVERSED ROTATED FLORAL HEART BULLET..MUSIC NATURAL SIGN +2600..266E ; ON # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN 266F ; ON # Sm MUSIC SHARP SIGN -2670..267D ; ON # So [14] WEST SYRIAC CROSS..PARTIALLY-RECYCLED PAPER SYMBOL -2680..2691 ; ON # So [18] DIE FACE-1..BLACK FLAG -26A0..26A1 ; ON # So [2] WARNING SIGN..HIGH VOLTAGE SIGN +2670..269C ; ON # So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS +26A0..26AB ; ON # So [12] WARNING SIGN..MEDIUM BLACK CIRCLE +26AD..26B2 ; ON # So [6] MARRIAGE SYMBOL..NEUTER 2701..2704 ; ON # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS 2706..2709 ; ON # So [4] TELEPHONE LOCATION SIGN..ENVELOPE 270C..2727 ; ON # So [28] VICTORY HAND..WHITE FOUR POINTED STAR @@ -869,6 +971,10 @@ FF1A ; CS # Po FULLWIDTH COLON 2794 ; ON # So HEAVY WIDE-HEADED RIGHTWARDS ARROW 2798..27AF ; ON # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 27B1..27BE ; ON # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW +27C0..27C4 ; ON # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C5 ; ON # Ps LEFT S-SHAPED BAG DELIMITER +27C6 ; ON # Pe RIGHT S-SHAPED BAG DELIMITER +27C7..27CA ; ON # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE 27D0..27E5 ; ON # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK 27E6 ; ON # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET 27E7 ; ON # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET @@ -909,7 +1015,27 @@ FF1A ; CS # Po FULLWIDTH COLON 29FC ; ON # Ps LEFT-POINTING CURVED ANGLE BRACKET 29FD ; ON # Pe RIGHT-POINTING CURVED ANGLE BRACKET 29FE..2AFF ; ON # Sm [258] TINY..N-ARY WHITE VERTICAL BAR -2B00..2B0D ; ON # So [14] NORTH EAST WHITE ARROW..UP DOWN BLACK ARROW +2B00..2B1A ; ON # So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE +2B20..2B23 ; ON # So [4] WHITE PENTAGON..HORIZONTAL BLACK HEXAGON +2CE5..2CEA ; ON # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA +2CF9..2CFC ; ON # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER +2CFD ; ON # No COPTIC FRACTION ONE HALF +2CFE..2CFF ; ON # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER +2E00..2E01 ; ON # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E02 ; ON # Pi LEFT SUBSTITUTION BRACKET +2E03 ; ON # Pf RIGHT SUBSTITUTION BRACKET +2E04 ; ON # Pi LEFT DOTTED SUBSTITUTION BRACKET +2E05 ; ON # Pf RIGHT DOTTED SUBSTITUTION BRACKET +2E06..2E08 ; ON # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER +2E09 ; ON # Pi LEFT TRANSPOSITION BRACKET +2E0A ; ON # Pf RIGHT TRANSPOSITION BRACKET +2E0B ; ON # Po RAISED SQUARE +2E0C ; ON # Pi LEFT RAISED OMISSION BRACKET +2E0D ; ON # Pf RIGHT RAISED OMISSION BRACKET +2E0E..2E16 ; ON # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE +2E17 ; ON # Pd DOUBLE OBLIQUE HYPHEN +2E1C ; ON # Pi LEFT LOW PARAPHRASE BRACKET +2E1D ; ON # Pf RIGHT LOW PARAPHRASE BRACKET 2E80..2E99 ; ON # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3 ; ON # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5 ; ON # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE @@ -945,11 +1071,12 @@ FF1A ; CS # Po FULLWIDTH COLON 303E..303F ; ON # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE 309B..309C ; ON # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 30A0 ; ON # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN -30FB ; ON # Pc KATAKANA MIDDLE DOT +30FB ; ON # Po KATAKANA MIDDLE DOT +31C0..31CF ; ON # So [16] CJK STROKE T..CJK STROKE N 321D..321E ; ON # So [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU 3250 ; ON # So PARTNERSHIP SIGN 3251..325F ; ON # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE -327C..327D ; ON # So [2] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED KOREAN CHARACTER JUEUI +327C..327E ; ON # So [3] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED HANGUL IEUNG U 32B1..32BF ; ON # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY 32CC..32CF ; ON # So [4] SQUARE HG..LIMITED LIABILITY SIGN 3377..337A ; ON # So [4] SQUARE DM..SQUARE IU @@ -957,11 +1084,30 @@ FF1A ; CS # Po FULLWIDTH COLON 33FF ; ON # So SQUARE GAL 4DC0..4DFF ; ON # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION A490..A4C6 ; ON # So [55] YI RADICAL QOT..YI RADICAL KE +A700..A716 ; ON # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717..A71A ; ON # Lm [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE +A720..A721 ; ON # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A828..A82B ; ON # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 +A874..A877 ; ON # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD F802..F86F ; ON # So [110] .. -F880..F8FF ; ON # So [128] .. +F8AD..F8B1 ; ON # So [5] .. +F8B4 ; ON # Pe Apple Corporate deprecated Japanese punct +F8B5..F8B7 ; ON # Po [3] .. +F8B9..F8BA ; ON # Pd [2] .. +F8BB ; ON # Po Apple Corporate deprecated Japanese punct +F8BC..F8BD ; ON # Sm [2] .. +F8BE ; ON # Ps Apple Corporate deprecated Japanese punct +F8BF ; ON # Pe Apple Corporate deprecated Japanese punct +F8C0 ; ON # Sm Apple Corporate deprecated Japanese punct +F8D7..F8FE ; ON # So [40] .. +F8FF ; ON # So Apple Corporate logo FD3E ; ON # Ps ORNATE LEFT PARENTHESIS FD3F ; ON # Pe ORNATE RIGHT PARENTHESIS FDFD ; ON # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FE10..FE16 ; ON # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; ON # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS FE30 ; ON # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER FE31..FE32 ; ON # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH FE33..FE34 ; ON # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE @@ -1023,8 +1169,7 @@ FF60 ; ON # Pe FULLWIDTH RIGHT WHITE PARENTHESIS FF61 ; ON # Po HALFWIDTH IDEOGRAPHIC FULL STOP FF62 ; ON # Ps HALFWIDTH LEFT CORNER BRACKET FF63 ; ON # Pe HALFWIDTH RIGHT CORNER BRACKET -FF64 ; ON # Po HALFWIDTH IDEOGRAPHIC COMMA -FF65 ; ON # Pc HALFWIDTH KATAKANA MIDDLE DOT +FF64..FF65 ; ON # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT FFE2 ; ON # Sm FULLWIDTH NOT SIGN FFE3 ; ON # Sk FULLWIDTH MACRON FFE4 ; ON # So FULLWIDTH BROKEN BAR @@ -1034,9 +1179,16 @@ FFED..FFEE ; ON # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE FFF9..FFFB ; ON # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 10101 ; ON # Po AEGEAN WORD SEPARATOR DOT +10140..10174 ; ON # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10175..10178 ; ON # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN +10179..10189 ; ON # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN +1018A ; ON # No GREEK ZERO SIGN +1091F ; ON # Po PHOENICIAN WORD SEPARATOR +1D200..1D241 ; ON # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D245 ; ON # So GREEK MUSICAL LEIMMA 1D300..1D356 ; ON # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING -# Total code points: 2793 +# Total code points: 3148 # ================================================ @@ -1085,18 +1237,16 @@ FFFFE..FFFFF ; BN # Cn [2] .. # Bidi_Class=Nonspacing_Mark -0300..0357 ; NSM # Mn [88] COMBINING GRAVE ACCENT..COMBINING RIGHT HALF RING ABOVE -035D..036F ; NSM # Mn [19] COMBINING DOUBLE BREVE..COMBINING LATIN SMALL LETTER X +0300..036F ; NSM # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X 0483..0486 ; NSM # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA 0488..0489 ; NSM # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN -0591..05A1 ; NSM # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05B9 ; NSM # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM -05BB..05BD ; NSM # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG +0591..05BD ; NSM # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG 05BF ; NSM # Mn HEBREW POINT RAFE 05C1..05C2 ; NSM # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; NSM # Mn HEBREW MARK UPPER DOT +05C4..05C5 ; NSM # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; NSM # Mn HEBREW POINT QAMATS QATAN 0610..0615 ; NSM # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH -064B..0658 ; NSM # Mn [14] ARABIC FATHATAN..ARABIC MARK NOON GHUNNA +064B..065E ; NSM # Mn [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS 0670 ; NSM # Mn ARABIC LETTER SUPERSCRIPT ALEF 06D6..06DC ; NSM # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN 06DE ; NSM # Me ARABIC START OF RUB EL HIZB @@ -1106,6 +1256,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 0711 ; NSM # Mn SYRIAC LETTER SUPERSCRIPT ALAPH 0730..074A ; NSM # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH 07A6..07B0 ; NSM # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; NSM # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE 0901..0902 ; NSM # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA 093C ; NSM # Mn DEVANAGARI SIGN NUKTA 0941..0948 ; NSM # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI @@ -1144,6 +1295,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 0C55..0C56 ; NSM # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0CBC ; NSM # Mn KANNADA SIGN NUKTA 0CCC..0CCD ; NSM # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CE2..0CE3 ; NSM # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0D41..0D43 ; NSM # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R 0D4D ; NSM # Mn MALAYALAM SIGN VIRAMA 0DCA ; NSM # Mn SINHALA SIGN AL-LAKUNA @@ -1171,6 +1323,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 1036..1037 ; NSM # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW 1039 ; NSM # Mn MYANMAR SIGN VIRAMA 1058..1059 ; NSM # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +135F ; NSM # Mn ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; NSM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA 1732..1734 ; NSM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD 1752..1753 ; NSM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U @@ -1186,42 +1339,64 @@ FFFFE..FFFFF ; BN # Cn [2] .. 1929..192B ; NSM # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA 1932 ; NSM # Mn LIMBU SMALL LETTER ANUSVARA 1939..193B ; NSM # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; NSM # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1B00..1B03 ; NSM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; NSM # Mn BALINESE SIGN REREKAN +1B36..1B3A ; NSM # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; NSM # Mn BALINESE VOWEL SIGN LA LENGA +1B42 ; NSM # Mn BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; NSM # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1DC0..1DCA ; NSM # Mn [11] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER R BELOW +1DFE..1DFF ; NSM # Mn [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 20D0..20DC ; NSM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; NSM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; NSM # Mn COMBINING LEFT RIGHT ARROW ABOVE 20E2..20E4 ; NSM # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE -20E5..20EA ; NSM # Mn [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY +20E5..20EF ; NSM # Mn [11] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW 302A..302F ; NSM # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK 3099..309A ; NSM # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A802 ; NSM # Mc SYLOTI NAGRI SIGN DVISVARA +A806 ; NSM # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; NSM # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; NSM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E F870..F87F ; NSM # Mn [16] .. +F884..F899 ; NSM # Mn [22] .. +F89F ; NSM # Mn Apple Corporate deprecated Hebrew misc FB1E ; NSM # Mn HEBREW POINT JUDEO-SPANISH VARIKA FE00..FE0F ; NSM # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE20..FE23 ; NSM # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF +10A01..10A03 ; NSM # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; NSM # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; NSM # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; NSM # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; NSM # Mn KHAROSHTHI VIRAMA 1D167..1D169 ; NSM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D17B..1D182 ; NSM # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; NSM # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D1AA..1D1AD ; NSM # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; NSM # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 803 +# Total code points: 892 # ================================================ # Bidi_Class=Arabic_Letter 0600..0603 ; AL # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA -0604..060B ; AL # Cn [8] .. +0604..060A ; AL # Cn [7] .. +060B ; AL # Sc AFGHANI SIGN 060D ; AL # Po ARABIC DATE SEPARATOR 0616..061A ; AL # Cn [5] .. 061B ; AL # Po ARABIC SEMICOLON -061C..061E ; AL # Cn [3] .. -061F ; AL # Po ARABIC QUESTION MARK +061C..061D ; AL # Cn [2] .. +061E..061F ; AL # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK 0620 ; AL # Cn 0621..063A ; AL # Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN 063B..063F ; AL # Cn [5] .. 0640 ; AL # Lm ARABIC TATWEEL 0641..064A ; AL # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH -0659..065F ; AL # Cn [7] .. +065F ; AL # Cn 066D ; AL # Po ARABIC FIVE POINTED STAR 066E..066F ; AL # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF 0671..06D3 ; AL # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE @@ -1238,11 +1413,12 @@ E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 0710 ; AL # Lo SYRIAC LETTER ALAPH 0712..072F ; AL # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH 074B..074C ; AL # Cn [2] .. -074D..074F ; AL # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE -0750..077F ; AL # Cn [48] .. +074D..076D ; AL # Lo [33] SYRIAC LETTER SOGDIAN ZHAIN..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE +076E..077F ; AL # Cn [18] .. 0780..07A5 ; AL # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU 07B1 ; AL # Lo THAANA LETTER NAA 07B2..07BF ; AL # Cn [14] .. +F882 ; AL # Lo Apple Corporate Arabic ligature FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBB2..FBD2 ; AL # Cn [33] .. FBD3..FD3D ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM @@ -1259,7 +1435,7 @@ FE75 ; AL # Cn FE76..FEFC ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM FEFD..FEFE ; AL # Cn [2] .. -# Total code points: 1136 +# Total code points: 1130 # ================================================ @@ -1300,3 +1476,5 @@ FEFD..FEFE ; AL # Cn [2] .. 202C ; PDF # Cf POP DIRECTIONAL FORMATTING # Total code points: 1 + +# EOF diff --git a/icuSources/data/unidata/DerivedCoreProperties.txt b/icuSources/data/unidata/DerivedCoreProperties.txt index 20b94d25..70cf5616 100644 --- a/icuSources/data/unidata/DerivedCoreProperties.txt +++ b/icuSources/data/unidata/DerivedCoreProperties.txt @@ -1,9 +1,8 @@ -# DerivedCoreProperties-4.0.1.txt -# Date: 2004-03-11, 18:55:03 GMT [MD] -# Mod Date: 2004-03-16, 16:45 PST [KW] +# DerivedCoreProperties-5.0.0.txt +# Date: 2006-03-03, 08:22:53 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html @@ -41,6 +40,7 @@ 20D0..20DC ; Math 20E1 ; Math 20E5..20E6 ; Math +20EC..20EF ; Math 2102 ; Math 210A..2113 ; Math 2115 ; Math @@ -52,7 +52,7 @@ 212F..2131 ; Math 2133..2134 ; Math 2135..2138 ; Math -213D..213F ; Math +213C..213F ; Math 2140..2144 ; Math 2145..2149 ; Math 214B ; Math @@ -72,10 +72,15 @@ 239B..23B3 ; Math 23B7 ; Math 23D0 ; Math +23DC..23E1 ; Math 25B7 ; Math 25C1 ; Math 25F8..25FF ; Math 266F ; Math +27C0..27C4 ; Math +27C5 ; Math +27C6 ; Math +27C7..27CA ; Math 27D0..27E5 ; Math 27E6 ; Math 27E7 ; Math @@ -116,6 +121,9 @@ 29FC ; Math 29FD ; Math 29FE..2AFF ; Math +F8BC ; Math +F8BD ; Math +F8C0 ; Math FB29 ; Math FE61 ; Math FE62 ; Math @@ -148,7 +156,7 @@ FFE9..FFEC ; Math 1D540..1D544 ; Math 1D546 ; Math 1D54A..1D550 ; Math -1D552..1D6A3 ; Math +1D552..1D6A5 ; Math 1D6A8..1D6C0 ; Math 1D6C1 ; Math 1D6C2..1D6DA ; Math @@ -169,10 +177,10 @@ FFE9..FFEC ; Math 1D7A9 ; Math 1D7AA..1D7C2 ; Math 1D7C3 ; Math -1D7C4..1D7C9 ; Math +1D7C4..1D7CB ; Math 1D7CE..1D7FF ; Math -# Total code points: 1998 +# Total code points: 2024 # ================================================ @@ -190,34 +198,32 @@ FFE9..FFEC ; Math 01BB ; Alphabetic 01BC..01BF ; Alphabetic 01C0..01C3 ; Alphabetic -01C4..0236 ; Alphabetic -0250..02AF ; Alphabetic +01C4..0293 ; Alphabetic +0294 ; Alphabetic +0295..02AF ; Alphabetic 02B0..02C1 ; Alphabetic 02C6..02D1 ; Alphabetic 02E0..02E4 ; Alphabetic 02EE ; Alphabetic 0345 ; Alphabetic 037A ; Alphabetic +037B..037D ; Alphabetic 0386 ; Alphabetic 0388..038A ; Alphabetic 038C ; Alphabetic 038E..03A1 ; Alphabetic 03A3..03CE ; Alphabetic 03D0..03F5 ; Alphabetic -03F7..03FB ; Alphabetic -0400..0481 ; Alphabetic -048A..04CE ; Alphabetic -04D0..04F5 ; Alphabetic -04F8..04F9 ; Alphabetic -0500..050F ; Alphabetic +03F7..0481 ; Alphabetic +048A..0513 ; Alphabetic 0531..0556 ; Alphabetic 0559 ; Alphabetic 0561..0587 ; Alphabetic -05B0..05B9 ; Alphabetic -05BB..05BD ; Alphabetic +05B0..05BD ; Alphabetic 05BF ; Alphabetic 05C1..05C2 ; Alphabetic -05C4 ; Alphabetic +05C4..05C5 ; Alphabetic +05C7 ; Alphabetic 05D0..05EA ; Alphabetic 05F0..05F2 ; Alphabetic 0610..0615 ; Alphabetic @@ -225,6 +231,7 @@ FFE9..FFEC ; Math 0640 ; Alphabetic 0641..064A ; Alphabetic 064B..0657 ; Alphabetic +0659..065E ; Alphabetic 066E..066F ; Alphabetic 0670 ; Alphabetic 0671..06D3 ; Alphabetic @@ -241,10 +248,13 @@ FFE9..FFEC ; Math 0711 ; Alphabetic 0712..072F ; Alphabetic 0730..073F ; Alphabetic -074D..074F ; Alphabetic +074D..076D ; Alphabetic 0780..07A5 ; Alphabetic 07A6..07B0 ; Alphabetic 07B1 ; Alphabetic +07CA..07EA ; Alphabetic +07F4..07F5 ; Alphabetic +07FA ; Alphabetic 0901..0902 ; Alphabetic 0903 ; Alphabetic 0904..0939 ; Alphabetic @@ -255,6 +265,7 @@ FFE9..FFEC ; Math 0950 ; Alphabetic 0958..0961 ; Alphabetic 0962..0963 ; Alphabetic +097B..097F ; Alphabetic 0981 ; Alphabetic 0982..0983 ; Alphabetic 0985..098C ; Alphabetic @@ -268,6 +279,7 @@ FFE9..FFEC ; Math 09C1..09C4 ; Alphabetic 09C7..09C8 ; Alphabetic 09CB..09CC ; Alphabetic +09CE ; Alphabetic 09D7 ; Alphabetic 09DC..09DD ; Alphabetic 09DF..09E1 ; Alphabetic @@ -337,8 +349,7 @@ FFE9..FFEC ; Math 0B9E..0B9F ; Alphabetic 0BA3..0BA4 ; Alphabetic 0BA8..0BAA ; Alphabetic -0BAE..0BB5 ; Alphabetic -0BB7..0BB9 ; Alphabetic +0BAE..0BB9 ; Alphabetic 0BBE..0BBF ; Alphabetic 0BC0 ; Alphabetic 0BC1..0BC2 ; Alphabetic @@ -374,6 +385,7 @@ FFE9..FFEC ; Math 0CD5..0CD6 ; Alphabetic 0CDE ; Alphabetic 0CE0..0CE1 ; Alphabetic +0CE2..0CE3 ; Alphabetic 0D02..0D03 ; Alphabetic 0D05..0D0C ; Alphabetic 0D0E..0D10 ; Alphabetic @@ -446,35 +458,29 @@ FFE9..FFEC ; Math 1056..1057 ; Alphabetic 1058..1059 ; Alphabetic 10A0..10C5 ; Alphabetic -10D0..10F8 ; Alphabetic +10D0..10FA ; Alphabetic +10FC ; Alphabetic 1100..1159 ; Alphabetic 115F..11A2 ; Alphabetic 11A8..11F9 ; Alphabetic -1200..1206 ; Alphabetic -1208..1246 ; Alphabetic -1248 ; Alphabetic +1200..1248 ; Alphabetic 124A..124D ; Alphabetic 1250..1256 ; Alphabetic 1258 ; Alphabetic 125A..125D ; Alphabetic -1260..1286 ; Alphabetic -1288 ; Alphabetic +1260..1288 ; Alphabetic 128A..128D ; Alphabetic -1290..12AE ; Alphabetic -12B0 ; Alphabetic +1290..12B0 ; Alphabetic 12B2..12B5 ; Alphabetic 12B8..12BE ; Alphabetic 12C0 ; Alphabetic 12C2..12C5 ; Alphabetic -12C8..12CE ; Alphabetic -12D0..12D6 ; Alphabetic -12D8..12EE ; Alphabetic -12F0..130E ; Alphabetic -1310 ; Alphabetic +12C8..12D6 ; Alphabetic +12D8..1310 ; Alphabetic 1312..1315 ; Alphabetic -1318..131E ; Alphabetic -1320..1346 ; Alphabetic -1348..135A ; Alphabetic +1318..135A ; Alphabetic +135F ; Alphabetic +1380..138F ; Alphabetic 13A0..13F4 ; Alphabetic 1401..166C ; Alphabetic 166F..1676 ; Alphabetic @@ -514,9 +520,30 @@ FFE9..FFEC ; Math 1933..1938 ; Alphabetic 1950..196D ; Alphabetic 1970..1974 ; Alphabetic +1980..19A9 ; Alphabetic +19B0..19C0 ; Alphabetic +19C1..19C7 ; Alphabetic +19C8..19C9 ; Alphabetic +1A00..1A16 ; Alphabetic +1A17..1A18 ; Alphabetic +1A19..1A1B ; Alphabetic +1B00..1B03 ; Alphabetic +1B04 ; Alphabetic +1B05..1B33 ; Alphabetic +1B35 ; Alphabetic +1B36..1B3A ; Alphabetic +1B3B ; Alphabetic +1B3C ; Alphabetic +1B3D..1B41 ; Alphabetic +1B42 ; Alphabetic +1B43 ; Alphabetic +1B45..1B4B ; Alphabetic 1D00..1D2B ; Alphabetic 1D2C..1D61 ; Alphabetic -1D62..1D6B ; Alphabetic +1D62..1D77 ; Alphabetic +1D78 ; Alphabetic +1D79..1D9A ; Alphabetic +1D9B..1DBF ; Alphabetic 1E00..1E9B ; Alphabetic 1EA0..1EF9 ; Alphabetic 1F00..1F15 ; Alphabetic @@ -540,6 +567,7 @@ FFE9..FFEC ; Math 1FF6..1FFC ; Alphabetic 2071 ; Alphabetic 207F ; Alphabetic +2090..2094 ; Alphabetic 2102 ; Alphabetic 2107 ; Alphabetic 210A..2113 ; Alphabetic @@ -549,13 +577,32 @@ FFE9..FFEC ; Math 2126 ; Alphabetic 2128 ; Alphabetic 212A..212D ; Alphabetic -212F..2131 ; Alphabetic -2133..2134 ; Alphabetic +212F..2134 ; Alphabetic 2135..2138 ; Alphabetic 2139 ; Alphabetic -213D..213F ; Alphabetic +213C..213F ; Alphabetic 2145..2149 ; Alphabetic -2160..2183 ; Alphabetic +214E ; Alphabetic +2160..2182 ; Alphabetic +2183..2184 ; Alphabetic +24B6..24E9 ; Alphabetic +2C00..2C2E ; Alphabetic +2C30..2C5E ; Alphabetic +2C60..2C6C ; Alphabetic +2C74..2C77 ; Alphabetic +2C80..2CE4 ; Alphabetic +2D00..2D25 ; Alphabetic +2D30..2D65 ; Alphabetic +2D6F ; Alphabetic +2D80..2D96 ; Alphabetic +2DA0..2DA6 ; Alphabetic +2DA8..2DAE ; Alphabetic +2DB0..2DB6 ; Alphabetic +2DB8..2DBE ; Alphabetic +2DC0..2DC6 ; Alphabetic +2DC8..2DCE ; Alphabetic +2DD0..2DD6 ; Alphabetic +2DD8..2DDE ; Alphabetic 3005 ; Alphabetic 3006 ; Alphabetic 3007 ; Alphabetic @@ -575,11 +622,28 @@ FFE9..FFEC ; Math 31A0..31B7 ; Alphabetic 31F0..31FF ; Alphabetic 3400..4DB5 ; Alphabetic -4E00..9FA5 ; Alphabetic -A000..A48C ; Alphabetic +4E00..9FBB ; Alphabetic +A000..A014 ; Alphabetic +A015 ; Alphabetic +A016..A48C ; Alphabetic +A717..A71A ; Alphabetic +A800..A801 ; Alphabetic +A803..A805 ; Alphabetic +A807..A80A ; Alphabetic +A80C..A822 ; Alphabetic +A823..A824 ; Alphabetic +A825..A826 ; Alphabetic +A827 ; Alphabetic +A840..A873 ; Alphabetic AC00..D7A3 ; Alphabetic +F882 ; Alphabetic +F89A..F89E ; Alphabetic +F8A2..F8A7 ; Alphabetic +F8B8 ; Alphabetic +F8C1..F8D6 ; Alphabetic F900..FA2D ; Alphabetic FA30..FA6A ; Alphabetic +FA70..FAD9 ; Alphabetic FB00..FB06 ; Alphabetic FB13..FB17 ; Alphabetic FB1D ; Alphabetic @@ -615,10 +679,16 @@ FFDA..FFDC ; Alphabetic 1003F..1004D ; Alphabetic 10050..1005D ; Alphabetic 10080..100FA ; Alphabetic +10140..10174 ; Alphabetic 10300..1031E ; Alphabetic -10330..10349 ; Alphabetic +10330..10340 ; Alphabetic +10341 ; Alphabetic +10342..10349 ; Alphabetic 1034A ; Alphabetic 10380..1039D ; Alphabetic +103A0..103C3 ; Alphabetic +103C8..103CF ; Alphabetic +103D1..103D5 ; Alphabetic 10400..1044F ; Alphabetic 10450..1049D ; Alphabetic 10800..10805 ; Alphabetic @@ -627,6 +697,16 @@ FFDA..FFDC ; Alphabetic 10837..10838 ; Alphabetic 1083C ; Alphabetic 1083F ; Alphabetic +10900..10915 ; Alphabetic +10A00 ; Alphabetic +10A01..10A03 ; Alphabetic +10A05..10A06 ; Alphabetic +10A0C..10A0F ; Alphabetic +10A10..10A13 ; Alphabetic +10A15..10A17 ; Alphabetic +10A19..10A33 ; Alphabetic +12000..1236E ; Alphabetic +12400..12462 ; Alphabetic 1D400..1D454 ; Alphabetic 1D456..1D49C ; Alphabetic 1D49E..1D49F ; Alphabetic @@ -645,7 +725,7 @@ FFDA..FFDC ; Alphabetic 1D540..1D544 ; Alphabetic 1D546 ; Alphabetic 1D54A..1D550 ; Alphabetic -1D552..1D6A3 ; Alphabetic +1D552..1D6A5 ; Alphabetic 1D6A8..1D6C0 ; Alphabetic 1D6C2..1D6DA ; Alphabetic 1D6DC..1D6FA ; Alphabetic @@ -656,11 +736,11 @@ FFDA..FFDC ; Alphabetic 1D770..1D788 ; Alphabetic 1D78A..1D7A8 ; Alphabetic 1D7AA..1D7C2 ; Alphabetic -1D7C4..1D7C9 ; Alphabetic +1D7C4..1D7CB ; Alphabetic 20000..2A6D6 ; Alphabetic 2F800..2FA1D ; Alphabetic -# Total code points: 90989 +# Total code points: 93217 # ================================================ @@ -805,13 +885,22 @@ FFDA..FFDC ; Alphabetic 022D ; Lowercase 022F ; Lowercase 0231 ; Lowercase -0233..0236 ; Lowercase -0250..02AF ; Lowercase +0233..0239 ; Lowercase +023C ; Lowercase +023F..0240 ; Lowercase +0242 ; Lowercase +0247 ; Lowercase +0249 ; Lowercase +024B ; Lowercase +024D ; Lowercase +024F..0293 ; Lowercase +0295..02AF ; Lowercase 02B0..02B8 ; Lowercase 02C0..02C1 ; Lowercase 02E0..02E4 ; Lowercase 0345 ; Lowercase 037A ; Lowercase +037B..037D ; Lowercase 0390 ; Lowercase 03AC..03CE ; Lowercase 03D0..03D1 ; Lowercase @@ -830,7 +919,7 @@ FFDA..FFDC ; Alphabetic 03EF..03F3 ; Lowercase 03F5 ; Lowercase 03F8 ; Lowercase -03FB ; Lowercase +03FB..03FC ; Lowercase 0430..045F ; Lowercase 0461 ; Lowercase 0463 ; Lowercase @@ -882,7 +971,7 @@ FFDA..FFDC ; Alphabetic 04C8 ; Lowercase 04CA ; Lowercase 04CC ; Lowercase -04CE ; Lowercase +04CE..04CF ; Lowercase 04D1 ; Lowercase 04D3 ; Lowercase 04D5 ; Lowercase @@ -902,7 +991,11 @@ FFDA..FFDC ; Alphabetic 04F1 ; Lowercase 04F3 ; Lowercase 04F5 ; Lowercase +04F7 ; Lowercase 04F9 ; Lowercase +04FB ; Lowercase +04FD ; Lowercase +04FF ; Lowercase 0501 ; Lowercase 0503 ; Lowercase 0505 ; Lowercase @@ -911,10 +1004,15 @@ FFDA..FFDC ; Alphabetic 050B ; Lowercase 050D ; Lowercase 050F ; Lowercase +0511 ; Lowercase +0513 ; Lowercase 0561..0587 ; Lowercase 1D00..1D2B ; Lowercase 1D2C..1D61 ; Lowercase -1D62..1D6B ; Lowercase +1D62..1D77 ; Lowercase +1D78 ; Lowercase +1D79..1D9A ; Lowercase +1D9B..1DBF ; Lowercase 1E01 ; Lowercase 1E03 ; Lowercase 1E05 ; Lowercase @@ -1058,16 +1156,78 @@ FFDA..FFDC ; Alphabetic 1FF6..1FF7 ; Lowercase 2071 ; Lowercase 207F ; Lowercase +2090..2094 ; Lowercase 210A ; Lowercase 210E..210F ; Lowercase 2113 ; Lowercase 212F ; Lowercase 2134 ; Lowercase 2139 ; Lowercase -213D ; Lowercase +213C..213D ; Lowercase 2146..2149 ; Lowercase +214E ; Lowercase 2170..217F ; Lowercase +2184 ; Lowercase 24D0..24E9 ; Lowercase +2C30..2C5E ; Lowercase +2C61 ; Lowercase +2C65..2C66 ; Lowercase +2C68 ; Lowercase +2C6A ; Lowercase +2C6C ; Lowercase +2C74 ; Lowercase +2C76..2C77 ; Lowercase +2C81 ; Lowercase +2C83 ; Lowercase +2C85 ; Lowercase +2C87 ; Lowercase +2C89 ; Lowercase +2C8B ; Lowercase +2C8D ; Lowercase +2C8F ; Lowercase +2C91 ; Lowercase +2C93 ; Lowercase +2C95 ; Lowercase +2C97 ; Lowercase +2C99 ; Lowercase +2C9B ; Lowercase +2C9D ; Lowercase +2C9F ; Lowercase +2CA1 ; Lowercase +2CA3 ; Lowercase +2CA5 ; Lowercase +2CA7 ; Lowercase +2CA9 ; Lowercase +2CAB ; Lowercase +2CAD ; Lowercase +2CAF ; Lowercase +2CB1 ; Lowercase +2CB3 ; Lowercase +2CB5 ; Lowercase +2CB7 ; Lowercase +2CB9 ; Lowercase +2CBB ; Lowercase +2CBD ; Lowercase +2CBF ; Lowercase +2CC1 ; Lowercase +2CC3 ; Lowercase +2CC5 ; Lowercase +2CC7 ; Lowercase +2CC9 ; Lowercase +2CCB ; Lowercase +2CCD ; Lowercase +2CCF ; Lowercase +2CD1 ; Lowercase +2CD3 ; Lowercase +2CD5 ; Lowercase +2CD7 ; Lowercase +2CD9 ; Lowercase +2CDB ; Lowercase +2CDD ; Lowercase +2CDF ; Lowercase +2CE1 ; Lowercase +2CE3..2CE4 ; Lowercase +2D00..2D25 ; Lowercase FB00..FB06 ; Lowercase FB13..FB17 ; Lowercase FF41..FF5A ; Lowercase @@ -1088,7 +1248,7 @@ FF41..FF5A ; Lowercase 1D5EE..1D607 ; Lowercase 1D622..1D63B ; Lowercase 1D656..1D66F ; Lowercase -1D68A..1D6A3 ; Lowercase +1D68A..1D6A5 ; Lowercase 1D6C2..1D6DA ; Lowercase 1D6DC..1D6E1 ; Lowercase 1D6FC..1D714 ; Lowercase @@ -1099,8 +1259,9 @@ FF41..FF5A ; Lowercase 1D78A..1D78F ; Lowercase 1D7AA..1D7C2 ; Lowercase 1D7C4..1D7C9 ; Lowercase +1D7CB ; Lowercase -# Total code points: 1529 +# Total code points: 1791 # ================================================ @@ -1243,6 +1404,14 @@ FF41..FF5A ; Lowercase 022E ; Uppercase 0230 ; Uppercase 0232 ; Uppercase +023A..023B ; Uppercase +023D..023E ; Uppercase +0241 ; Uppercase +0243..0246 ; Uppercase +0248 ; Uppercase +024A ; Uppercase +024C ; Uppercase +024E ; Uppercase 0386 ; Uppercase 0388..038A ; Uppercase 038C ; Uppercase @@ -1265,7 +1434,7 @@ FF41..FF5A ; Lowercase 03F4 ; Uppercase 03F7 ; Uppercase 03F9..03FA ; Uppercase -0400..042F ; Uppercase +03FD..042F ; Uppercase 0460 ; Uppercase 0462 ; Uppercase 0464 ; Uppercase @@ -1336,7 +1505,11 @@ FF41..FF5A ; Lowercase 04F0 ; Uppercase 04F2 ; Uppercase 04F4 ; Uppercase +04F6 ; Uppercase 04F8 ; Uppercase +04FA ; Uppercase +04FC ; Uppercase +04FE ; Uppercase 0500 ; Uppercase 0502 ; Uppercase 0504 ; Uppercase @@ -1345,6 +1518,8 @@ FF41..FF5A ; Lowercase 050A ; Uppercase 050C ; Uppercase 050E ; Uppercase +0510 ; Uppercase +0512 ; Uppercase 0531..0556 ; Uppercase 10A0..10C5 ; Uppercase 1E00 ; Uppercase @@ -1492,12 +1667,69 @@ FF41..FF5A ; Lowercase 2126 ; Uppercase 2128 ; Uppercase 212A..212D ; Uppercase -2130..2131 ; Uppercase -2133 ; Uppercase +2130..2133 ; Uppercase 213E..213F ; Uppercase 2145 ; Uppercase 2160..216F ; Uppercase +2183 ; Uppercase 24B6..24CF ; Uppercase +2C00..2C2E ; Uppercase +2C60 ; Uppercase +2C62..2C64 ; Uppercase +2C67 ; Uppercase +2C69 ; Uppercase +2C6B ; Uppercase +2C75 ; Uppercase +2C80 ; Uppercase +2C82 ; Uppercase +2C84 ; Uppercase +2C86 ; Uppercase +2C88 ; Uppercase +2C8A ; Uppercase +2C8C ; Uppercase +2C8E ; Uppercase +2C90 ; Uppercase +2C92 ; Uppercase +2C94 ; Uppercase +2C96 ; Uppercase +2C98 ; Uppercase +2C9A ; Uppercase +2C9C ; Uppercase +2C9E ; Uppercase +2CA0 ; Uppercase +2CA2 ; Uppercase +2CA4 ; Uppercase +2CA6 ; Uppercase +2CA8 ; Uppercase +2CAA ; Uppercase +2CAC ; Uppercase +2CAE ; Uppercase +2CB0 ; Uppercase +2CB2 ; Uppercase +2CB4 ; Uppercase +2CB6 ; Uppercase +2CB8 ; Uppercase +2CBA ; Uppercase +2CBC ; Uppercase +2CBE ; Uppercase +2CC0 ; Uppercase +2CC2 ; Uppercase +2CC4 ; Uppercase +2CC6 ; Uppercase +2CC8 ; Uppercase +2CCA ; Uppercase +2CCC ; Uppercase +2CCE ; Uppercase +2CD0 ; Uppercase +2CD2 ; Uppercase +2CD4 ; Uppercase +2CD6 ; Uppercase +2CD8 ; Uppercase +2CDA ; Uppercase +2CDC ; Uppercase +2CDE ; Uppercase +2CE0 ; Uppercase +2CE2 ; Uppercase FF21..FF3A ; Uppercase 10400..10427 ; Uppercase 1D400..1D419 ; Uppercase @@ -1530,14 +1762,16 @@ FF21..FF3A ; Uppercase 1D71C..1D734 ; Uppercase 1D756..1D76E ; Uppercase 1D790..1D7A8 ; Uppercase +1D7CA ; Uppercase -# Total code points: 1232 +# Total code points: 1362 # ================================================ # Derived Property: ID_Start # Characters that can start an identifier. # Generated from Lu+Ll+Lt+Lm+Lo+Nl+Other_ID_Start +# NOTE: See UAX #31 for more information 0041..005A ; ID_Start 0061..007A ; ID_Start @@ -1550,25 +1784,23 @@ FF21..FF3A ; Uppercase 01BB ; ID_Start 01BC..01BF ; ID_Start 01C0..01C3 ; ID_Start -01C4..0236 ; ID_Start -0250..02AF ; ID_Start +01C4..0293 ; ID_Start +0294 ; ID_Start +0295..02AF ; ID_Start 02B0..02C1 ; ID_Start 02C6..02D1 ; ID_Start 02E0..02E4 ; ID_Start 02EE ; ID_Start 037A ; ID_Start +037B..037D ; ID_Start 0386 ; ID_Start 0388..038A ; ID_Start 038C ; ID_Start 038E..03A1 ; ID_Start 03A3..03CE ; ID_Start 03D0..03F5 ; ID_Start -03F7..03FB ; ID_Start -0400..0481 ; ID_Start -048A..04CE ; ID_Start -04D0..04F5 ; ID_Start -04F8..04F9 ; ID_Start -0500..050F ; ID_Start +03F7..0481 ; ID_Start +048A..0513 ; ID_Start 0531..0556 ; ID_Start 0559 ; ID_Start 0561..0587 ; ID_Start @@ -1586,13 +1818,17 @@ FF21..FF3A ; Uppercase 06FF ; ID_Start 0710 ; ID_Start 0712..072F ; ID_Start -074D..074F ; ID_Start +074D..076D ; ID_Start 0780..07A5 ; ID_Start 07B1 ; ID_Start +07CA..07EA ; ID_Start +07F4..07F5 ; ID_Start +07FA ; ID_Start 0904..0939 ; ID_Start 093D ; ID_Start 0950 ; ID_Start 0958..0961 ; ID_Start +097B..097F ; ID_Start 0985..098C ; ID_Start 098F..0990 ; ID_Start 0993..09A8 ; ID_Start @@ -1600,6 +1836,7 @@ FF21..FF3A ; Uppercase 09B2 ; ID_Start 09B6..09B9 ; ID_Start 09BD ; ID_Start +09CE ; ID_Start 09DC..09DD ; ID_Start 09DF..09E1 ; ID_Start 09F0..09F1 ; ID_Start @@ -1641,8 +1878,7 @@ FF21..FF3A ; Uppercase 0B9E..0B9F ; ID_Start 0BA3..0BA4 ; ID_Start 0BA8..0BAA ; ID_Start -0BAE..0BB5 ; ID_Start -0BB7..0BB9 ; ID_Start +0BAE..0BB9 ; ID_Start 0C05..0C0C ; ID_Start 0C0E..0C10 ; ID_Start 0C12..0C28 ; ID_Start @@ -1697,35 +1933,28 @@ FF21..FF3A ; Uppercase 1029..102A ; ID_Start 1050..1055 ; ID_Start 10A0..10C5 ; ID_Start -10D0..10F8 ; ID_Start +10D0..10FA ; ID_Start +10FC ; ID_Start 1100..1159 ; ID_Start 115F..11A2 ; ID_Start 11A8..11F9 ; ID_Start -1200..1206 ; ID_Start -1208..1246 ; ID_Start -1248 ; ID_Start +1200..1248 ; ID_Start 124A..124D ; ID_Start 1250..1256 ; ID_Start 1258 ; ID_Start 125A..125D ; ID_Start -1260..1286 ; ID_Start -1288 ; ID_Start +1260..1288 ; ID_Start 128A..128D ; ID_Start -1290..12AE ; ID_Start -12B0 ; ID_Start +1290..12B0 ; ID_Start 12B2..12B5 ; ID_Start 12B8..12BE ; ID_Start 12C0 ; ID_Start 12C2..12C5 ; ID_Start -12C8..12CE ; ID_Start -12D0..12D6 ; ID_Start -12D8..12EE ; ID_Start -12F0..130E ; ID_Start -1310 ; ID_Start +12C8..12D6 ; ID_Start +12D8..1310 ; ID_Start 1312..1315 ; ID_Start -1318..131E ; ID_Start -1320..1346 ; ID_Start -1348..135A ; ID_Start +1318..135A ; ID_Start +1380..138F ; ID_Start 13A0..13F4 ; ID_Start 1401..166C ; ID_Start 166F..1676 ; ID_Start @@ -1748,9 +1977,17 @@ FF21..FF3A ; Uppercase 1900..191C ; ID_Start 1950..196D ; ID_Start 1970..1974 ; ID_Start +1980..19A9 ; ID_Start +19C1..19C7 ; ID_Start +1A00..1A16 ; ID_Start +1B05..1B33 ; ID_Start +1B45..1B4B ; ID_Start 1D00..1D2B ; ID_Start 1D2C..1D61 ; ID_Start -1D62..1D6B ; ID_Start +1D62..1D77 ; ID_Start +1D78 ; ID_Start +1D79..1D9A ; ID_Start +1D9B..1DBF ; ID_Start 1E00..1E9B ; ID_Start 1EA0..1EF9 ; ID_Start 1F00..1F15 ; ID_Start @@ -1774,6 +2011,7 @@ FF21..FF3A ; Uppercase 1FF6..1FFC ; ID_Start 2071 ; ID_Start 207F ; ID_Start +2090..2094 ; ID_Start 2102 ; ID_Start 2107 ; ID_Start 210A..2113 ; ID_Start @@ -1785,13 +2023,31 @@ FF21..FF3A ; Uppercase 2128 ; ID_Start 212A..212D ; ID_Start 212E ; ID_Start -212F..2131 ; ID_Start -2133..2134 ; ID_Start +212F..2134 ; ID_Start 2135..2138 ; ID_Start 2139 ; ID_Start -213D..213F ; ID_Start +213C..213F ; ID_Start 2145..2149 ; ID_Start -2160..2183 ; ID_Start +214E ; ID_Start +2160..2182 ; ID_Start +2183..2184 ; ID_Start +2C00..2C2E ; ID_Start +2C30..2C5E ; ID_Start +2C60..2C6C ; ID_Start +2C74..2C77 ; ID_Start +2C80..2CE4 ; ID_Start +2D00..2D25 ; ID_Start +2D30..2D65 ; ID_Start +2D6F ; ID_Start +2D80..2D96 ; ID_Start +2DA0..2DA6 ; ID_Start +2DA8..2DAE ; ID_Start +2DB0..2DB6 ; ID_Start +2DB8..2DBE ; ID_Start +2DC0..2DC6 ; ID_Start +2DC8..2DCE ; ID_Start +2DD0..2DD6 ; ID_Start +2DD8..2DDE ; ID_Start 3005 ; ID_Start 3006 ; ID_Start 3007 ; ID_Start @@ -1812,11 +2068,20 @@ FF21..FF3A ; Uppercase 31A0..31B7 ; ID_Start 31F0..31FF ; ID_Start 3400..4DB5 ; ID_Start -4E00..9FA5 ; ID_Start -A000..A48C ; ID_Start +4E00..9FBB ; ID_Start +A000..A014 ; ID_Start +A015 ; ID_Start +A016..A48C ; ID_Start +A717..A71A ; ID_Start +A800..A801 ; ID_Start +A803..A805 ; ID_Start +A807..A80A ; ID_Start +A80C..A822 ; ID_Start +A840..A873 ; ID_Start AC00..D7A3 ; ID_Start F900..FA2D ; ID_Start FA30..FA6A ; ID_Start +FA70..FAD9 ; ID_Start FB00..FB06 ; ID_Start FB13..FB17 ; ID_Start FB1D ; ID_Start @@ -1851,10 +2116,16 @@ FFDA..FFDC ; ID_Start 1003F..1004D ; ID_Start 10050..1005D ; ID_Start 10080..100FA ; ID_Start +10140..10174 ; ID_Start 10300..1031E ; ID_Start -10330..10349 ; ID_Start +10330..10340 ; ID_Start +10341 ; ID_Start +10342..10349 ; ID_Start 1034A ; ID_Start 10380..1039D ; ID_Start +103A0..103C3 ; ID_Start +103C8..103CF ; ID_Start +103D1..103D5 ; ID_Start 10400..1044F ; ID_Start 10450..1049D ; ID_Start 10800..10805 ; ID_Start @@ -1863,6 +2134,13 @@ FFDA..FFDC ; ID_Start 10837..10838 ; ID_Start 1083C ; ID_Start 1083F ; ID_Start +10900..10915 ; ID_Start +10A00 ; ID_Start +10A10..10A13 ; ID_Start +10A15..10A17 ; ID_Start +10A19..10A33 ; ID_Start +12000..1236E ; ID_Start +12400..12462 ; ID_Start 1D400..1D454 ; ID_Start 1D456..1D49C ; ID_Start 1D49E..1D49F ; ID_Start @@ -1881,7 +2159,7 @@ FFDA..FFDC ; ID_Start 1D540..1D544 ; ID_Start 1D546 ; ID_Start 1D54A..1D550 ; ID_Start -1D552..1D6A3 ; ID_Start +1D552..1D6A5 ; ID_Start 1D6A8..1D6C0 ; ID_Start 1D6C2..1D6DA ; ID_Start 1D6DC..1D6FA ; ID_Start @@ -1892,18 +2170,18 @@ FFDA..FFDC ; ID_Start 1D770..1D788 ; ID_Start 1D78A..1D7A8 ; ID_Start 1D7AA..1D7C2 ; ID_Start -1D7C4..1D7C9 ; ID_Start +1D7C4..1D7CB ; ID_Start 20000..2A6D6 ; ID_Start 2F800..2FA1D ; ID_Start -# Total code points: 90604 +# Total code points: 92710 # ================================================ # Derived Property: ID_Continue # Characters that can continue an identifier. -# Generated from: ID_Start + Mn+Mc+Nd+Pc -# NOTE: Cf characters should be filtered out. +# Generated from: ID_Start + Mn+Mc+Nd+Pc + Other_ID_Continue +# NOTE: See UAX #31 for more information 0030..0039 ; ID_Continue 0041..005A ; ID_Continue @@ -1918,44 +2196,40 @@ FFDA..FFDC ; ID_Start 01BB ; ID_Continue 01BC..01BF ; ID_Continue 01C0..01C3 ; ID_Continue -01C4..0236 ; ID_Continue -0250..02AF ; ID_Continue +01C4..0293 ; ID_Continue +0294 ; ID_Continue +0295..02AF ; ID_Continue 02B0..02C1 ; ID_Continue 02C6..02D1 ; ID_Continue 02E0..02E4 ; ID_Continue 02EE ; ID_Continue -0300..0357 ; ID_Continue -035D..036F ; ID_Continue +0300..036F ; ID_Continue 037A ; ID_Continue +037B..037D ; ID_Continue 0386 ; ID_Continue 0388..038A ; ID_Continue 038C ; ID_Continue 038E..03A1 ; ID_Continue 03A3..03CE ; ID_Continue 03D0..03F5 ; ID_Continue -03F7..03FB ; ID_Continue -0400..0481 ; ID_Continue +03F7..0481 ; ID_Continue 0483..0486 ; ID_Continue -048A..04CE ; ID_Continue -04D0..04F5 ; ID_Continue -04F8..04F9 ; ID_Continue -0500..050F ; ID_Continue +048A..0513 ; ID_Continue 0531..0556 ; ID_Continue 0559 ; ID_Continue 0561..0587 ; ID_Continue -0591..05A1 ; ID_Continue -05A3..05B9 ; ID_Continue -05BB..05BD ; ID_Continue +0591..05BD ; ID_Continue 05BF ; ID_Continue 05C1..05C2 ; ID_Continue -05C4 ; ID_Continue +05C4..05C5 ; ID_Continue +05C7 ; ID_Continue 05D0..05EA ; ID_Continue 05F0..05F2 ; ID_Continue 0610..0615 ; ID_Continue 0621..063A ; ID_Continue 0640 ; ID_Continue 0641..064A ; ID_Continue -064B..0658 ; ID_Continue +064B..065E ; ID_Continue 0660..0669 ; ID_Continue 066E..066F ; ID_Continue 0670 ; ID_Continue @@ -1974,10 +2248,15 @@ FFDA..FFDC ; ID_Start 0711 ; ID_Continue 0712..072F ; ID_Continue 0730..074A ; ID_Continue -074D..074F ; ID_Continue +074D..076D ; ID_Continue 0780..07A5 ; ID_Continue 07A6..07B0 ; ID_Continue 07B1 ; ID_Continue +07C0..07C9 ; ID_Continue +07CA..07EA ; ID_Continue +07EB..07F3 ; ID_Continue +07F4..07F5 ; ID_Continue +07FA ; ID_Continue 0901..0902 ; ID_Continue 0903 ; ID_Continue 0904..0939 ; ID_Continue @@ -1992,6 +2271,7 @@ FFDA..FFDC ; ID_Start 0958..0961 ; ID_Continue 0962..0963 ; ID_Continue 0966..096F ; ID_Continue +097B..097F ; ID_Continue 0981 ; ID_Continue 0982..0983 ; ID_Continue 0985..098C ; ID_Continue @@ -2007,6 +2287,7 @@ FFDA..FFDC ; ID_Start 09C7..09C8 ; ID_Continue 09CB..09CC ; ID_Continue 09CD ; ID_Continue +09CE ; ID_Continue 09D7 ; ID_Continue 09DC..09DD ; ID_Continue 09DF..09E1 ; ID_Continue @@ -2085,8 +2366,7 @@ FFDA..FFDC ; ID_Start 0B9E..0B9F ; ID_Continue 0BA3..0BA4 ; ID_Continue 0BA8..0BAA ; ID_Continue -0BAE..0BB5 ; ID_Continue -0BB7..0BB9 ; ID_Continue +0BAE..0BB9 ; ID_Continue 0BBE..0BBF ; ID_Continue 0BC0 ; ID_Continue 0BC1..0BC2 ; ID_Continue @@ -2094,7 +2374,7 @@ FFDA..FFDC ; ID_Start 0BCA..0BCC ; ID_Continue 0BCD ; ID_Continue 0BD7 ; ID_Continue -0BE7..0BEF ; ID_Continue +0BE6..0BEF ; ID_Continue 0C01..0C03 ; ID_Continue 0C05..0C0C ; ID_Continue 0C0E..0C10 ; ID_Continue @@ -2126,6 +2406,7 @@ FFDA..FFDC ; ID_Start 0CD5..0CD6 ; ID_Continue 0CDE ; ID_Continue 0CE0..0CE1 ; ID_Continue +0CE2..0CE3 ; ID_Continue 0CE6..0CEF ; ID_Continue 0D02..0D03 ; ID_Continue 0D05..0D0C ; ID_Continue @@ -2214,36 +2495,30 @@ FFDA..FFDC ; ID_Start 1056..1057 ; ID_Continue 1058..1059 ; ID_Continue 10A0..10C5 ; ID_Continue -10D0..10F8 ; ID_Continue +10D0..10FA ; ID_Continue +10FC ; ID_Continue 1100..1159 ; ID_Continue 115F..11A2 ; ID_Continue 11A8..11F9 ; ID_Continue -1200..1206 ; ID_Continue -1208..1246 ; ID_Continue -1248 ; ID_Continue +1200..1248 ; ID_Continue 124A..124D ; ID_Continue 1250..1256 ; ID_Continue 1258 ; ID_Continue 125A..125D ; ID_Continue -1260..1286 ; ID_Continue -1288 ; ID_Continue +1260..1288 ; ID_Continue 128A..128D ; ID_Continue -1290..12AE ; ID_Continue -12B0 ; ID_Continue +1290..12B0 ; ID_Continue 12B2..12B5 ; ID_Continue 12B8..12BE ; ID_Continue 12C0 ; ID_Continue 12C2..12C5 ; ID_Continue -12C8..12CE ; ID_Continue -12D0..12D6 ; ID_Continue -12D8..12EE ; ID_Continue -12F0..130E ; ID_Continue -1310 ; ID_Continue +12C8..12D6 ; ID_Continue +12D8..1310 ; ID_Continue 1312..1315 ; ID_Continue -1318..131E ; ID_Continue -1320..1346 ; ID_Continue -1348..135A ; ID_Continue +1318..135A ; ID_Continue +135F ; ID_Continue 1369..1371 ; ID_Continue +1380..138F ; ID_Continue 13A0..13F4 ; ID_Continue 1401..166C ; ID_Continue 166F..1676 ; ID_Continue @@ -2290,9 +2565,36 @@ FFDA..FFDC ; ID_Start 1946..194F ; ID_Continue 1950..196D ; ID_Continue 1970..1974 ; ID_Continue +1980..19A9 ; ID_Continue +19B0..19C0 ; ID_Continue +19C1..19C7 ; ID_Continue +19C8..19C9 ; ID_Continue +19D0..19D9 ; ID_Continue +1A00..1A16 ; ID_Continue +1A17..1A18 ; ID_Continue +1A19..1A1B ; ID_Continue +1B00..1B03 ; ID_Continue +1B04 ; ID_Continue +1B05..1B33 ; ID_Continue +1B34 ; ID_Continue +1B35 ; ID_Continue +1B36..1B3A ; ID_Continue +1B3B ; ID_Continue +1B3C ; ID_Continue +1B3D..1B41 ; ID_Continue +1B42 ; ID_Continue +1B43..1B44 ; ID_Continue +1B45..1B4B ; ID_Continue +1B50..1B59 ; ID_Continue +1B6B..1B73 ; ID_Continue 1D00..1D2B ; ID_Continue 1D2C..1D61 ; ID_Continue -1D62..1D6B ; ID_Continue +1D62..1D77 ; ID_Continue +1D78 ; ID_Continue +1D79..1D9A ; ID_Continue +1D9B..1DBF ; ID_Continue +1DC0..1DCA ; ID_Continue +1DFE..1DFF ; ID_Continue 1E00..1E9B ; ID_Continue 1EA0..1EF9 ; ID_Continue 1F00..1F15 ; ID_Continue @@ -2318,9 +2620,10 @@ FFDA..FFDC ; ID_Start 2054 ; ID_Continue 2071 ; ID_Continue 207F ; ID_Continue +2090..2094 ; ID_Continue 20D0..20DC ; ID_Continue 20E1 ; ID_Continue -20E5..20EA ; ID_Continue +20E5..20EF ; ID_Continue 2102 ; ID_Continue 2107 ; ID_Continue 210A..2113 ; ID_Continue @@ -2332,13 +2635,31 @@ FFDA..FFDC ; ID_Start 2128 ; ID_Continue 212A..212D ; ID_Continue 212E ; ID_Continue -212F..2131 ; ID_Continue -2133..2134 ; ID_Continue +212F..2134 ; ID_Continue 2135..2138 ; ID_Continue 2139 ; ID_Continue -213D..213F ; ID_Continue +213C..213F ; ID_Continue 2145..2149 ; ID_Continue -2160..2183 ; ID_Continue +214E ; ID_Continue +2160..2182 ; ID_Continue +2183..2184 ; ID_Continue +2C00..2C2E ; ID_Continue +2C30..2C5E ; ID_Continue +2C60..2C6C ; ID_Continue +2C74..2C77 ; ID_Continue +2C80..2CE4 ; ID_Continue +2D00..2D25 ; ID_Continue +2D30..2D65 ; ID_Continue +2D6F ; ID_Continue +2D80..2D96 ; ID_Continue +2DA0..2DA6 ; ID_Continue +2DA8..2DAE ; ID_Continue +2DB0..2DB6 ; ID_Continue +2DB8..2DBE ; ID_Continue +2DC0..2DC6 ; ID_Continue +2DC8..2DCE ; ID_Continue +2DD0..2DD6 ; ID_Continue +2DD8..2DDE ; ID_Continue 3005 ; ID_Continue 3006 ; ID_Continue 3007 ; ID_Continue @@ -2354,7 +2675,6 @@ FFDA..FFDC ; ID_Start 309D..309E ; ID_Continue 309F ; ID_Continue 30A1..30FA ; ID_Continue -30FB ; ID_Continue 30FC..30FE ; ID_Continue 30FF ; ID_Continue 3105..312C ; ID_Continue @@ -2362,11 +2682,26 @@ FFDA..FFDC ; ID_Start 31A0..31B7 ; ID_Continue 31F0..31FF ; ID_Continue 3400..4DB5 ; ID_Continue -4E00..9FA5 ; ID_Continue -A000..A48C ; ID_Continue +4E00..9FBB ; ID_Continue +A000..A014 ; ID_Continue +A015 ; ID_Continue +A016..A48C ; ID_Continue +A717..A71A ; ID_Continue +A800..A801 ; ID_Continue +A802 ; ID_Continue +A803..A805 ; ID_Continue +A806 ; ID_Continue +A807..A80A ; ID_Continue +A80B ; ID_Continue +A80C..A822 ; ID_Continue +A823..A824 ; ID_Continue +A825..A826 ; ID_Continue +A827 ; ID_Continue +A840..A873 ; ID_Continue AC00..D7A3 ; ID_Continue F900..FA2D ; ID_Continue FA30..FA6A ; ID_Continue +FA70..FAD9 ; ID_Continue FB00..FB06 ; ID_Continue FB13..FB17 ; ID_Continue FB1D ; ID_Continue @@ -2392,7 +2727,6 @@ FF10..FF19 ; ID_Continue FF21..FF3A ; ID_Continue FF3F ; ID_Continue FF41..FF5A ; ID_Continue -FF65 ; ID_Continue FF66..FF6F ; ID_Continue FF70 ; ID_Continue FF71..FF9D ; ID_Continue @@ -2409,10 +2743,16 @@ FFDA..FFDC ; ID_Continue 1003F..1004D ; ID_Continue 10050..1005D ; ID_Continue 10080..100FA ; ID_Continue +10140..10174 ; ID_Continue 10300..1031E ; ID_Continue -10330..10349 ; ID_Continue +10330..10340 ; ID_Continue +10341 ; ID_Continue +10342..10349 ; ID_Continue 1034A ; ID_Continue 10380..1039D ; ID_Continue +103A0..103C3 ; ID_Continue +103C8..103CF ; ID_Continue +103D1..103D5 ; ID_Continue 10400..1044F ; ID_Continue 10450..1049D ; ID_Continue 104A0..104A9 ; ID_Continue @@ -2422,12 +2762,25 @@ FFDA..FFDC ; ID_Continue 10837..10838 ; ID_Continue 1083C ; ID_Continue 1083F ; ID_Continue +10900..10915 ; ID_Continue +10A00 ; ID_Continue +10A01..10A03 ; ID_Continue +10A05..10A06 ; ID_Continue +10A0C..10A0F ; ID_Continue +10A10..10A13 ; ID_Continue +10A15..10A17 ; ID_Continue +10A19..10A33 ; ID_Continue +10A38..10A3A ; ID_Continue +10A3F ; ID_Continue +12000..1236E ; ID_Continue +12400..12462 ; ID_Continue 1D165..1D166 ; ID_Continue 1D167..1D169 ; ID_Continue 1D16D..1D172 ; ID_Continue 1D17B..1D182 ; ID_Continue 1D185..1D18B ; ID_Continue 1D1AA..1D1AD ; ID_Continue +1D242..1D244 ; ID_Continue 1D400..1D454 ; ID_Continue 1D456..1D49C ; ID_Continue 1D49E..1D49F ; ID_Continue @@ -2446,7 +2799,7 @@ FFDA..FFDC ; ID_Continue 1D540..1D544 ; ID_Continue 1D546 ; ID_Continue 1D54A..1D550 ; ID_Continue -1D552..1D6A3 ; ID_Continue +1D552..1D6A5 ; ID_Continue 1D6A8..1D6C0 ; ID_Continue 1D6C2..1D6DA ; ID_Continue 1D6DC..1D6FA ; ID_Continue @@ -2457,13 +2810,13 @@ FFDA..FFDC ; ID_Continue 1D770..1D788 ; ID_Continue 1D78A..1D7A8 ; ID_Continue 1D7AA..1D7C2 ; ID_Continue -1D7C4..1D7C9 ; ID_Continue +1D7C4..1D7CB ; ID_Continue 1D7CE..1D7FF ; ID_Continue 20000..2A6D6 ; ID_Continue 2F800..2FA1D ; ID_Continue E0100..E01EF ; ID_Continue -# Total code points: 91815 +# Total code points: 94074 # ================================================ @@ -2472,6 +2825,7 @@ E0100..E01EF ; ID_Continue # Modified as described in UAX #15 # NOTE: Does NOT remove the non-NFKx characters. # Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string)) +# NOTE: See UAX #31 for more information 0041..005A ; XID_Start 0061..007A ; XID_Start @@ -2484,24 +2838,22 @@ E0100..E01EF ; ID_Continue 01BB ; XID_Start 01BC..01BF ; XID_Start 01C0..01C3 ; XID_Start -01C4..0236 ; XID_Start -0250..02AF ; XID_Start +01C4..0293 ; XID_Start +0294 ; XID_Start +0295..02AF ; XID_Start 02B0..02C1 ; XID_Start 02C6..02D1 ; XID_Start 02E0..02E4 ; XID_Start 02EE ; XID_Start +037B..037D ; XID_Start 0386 ; XID_Start 0388..038A ; XID_Start 038C ; XID_Start 038E..03A1 ; XID_Start 03A3..03CE ; XID_Start 03D0..03F5 ; XID_Start -03F7..03FB ; XID_Start -0400..0481 ; XID_Start -048A..04CE ; XID_Start -04D0..04F5 ; XID_Start -04F8..04F9 ; XID_Start -0500..050F ; XID_Start +03F7..0481 ; XID_Start +048A..0513 ; XID_Start 0531..0556 ; XID_Start 0559 ; XID_Start 0561..0587 ; XID_Start @@ -2519,13 +2871,17 @@ E0100..E01EF ; ID_Continue 06FF ; XID_Start 0710 ; XID_Start 0712..072F ; XID_Start -074D..074F ; XID_Start +074D..076D ; XID_Start 0780..07A5 ; XID_Start 07B1 ; XID_Start +07CA..07EA ; XID_Start +07F4..07F5 ; XID_Start +07FA ; XID_Start 0904..0939 ; XID_Start 093D ; XID_Start 0950 ; XID_Start 0958..0961 ; XID_Start +097B..097F ; XID_Start 0985..098C ; XID_Start 098F..0990 ; XID_Start 0993..09A8 ; XID_Start @@ -2533,6 +2889,7 @@ E0100..E01EF ; ID_Continue 09B2 ; XID_Start 09B6..09B9 ; XID_Start 09BD ; XID_Start +09CE ; XID_Start 09DC..09DD ; XID_Start 09DF..09E1 ; XID_Start 09F0..09F1 ; XID_Start @@ -2574,8 +2931,7 @@ E0100..E01EF ; ID_Continue 0B9E..0B9F ; XID_Start 0BA3..0BA4 ; XID_Start 0BA8..0BAA ; XID_Start -0BAE..0BB5 ; XID_Start -0BB7..0BB9 ; XID_Start +0BAE..0BB9 ; XID_Start 0C05..0C0C ; XID_Start 0C0E..0C10 ; XID_Start 0C12..0C28 ; XID_Start @@ -2630,35 +2986,28 @@ E0100..E01EF ; ID_Continue 1029..102A ; XID_Start 1050..1055 ; XID_Start 10A0..10C5 ; XID_Start -10D0..10F8 ; XID_Start +10D0..10FA ; XID_Start +10FC ; XID_Start 1100..1159 ; XID_Start 115F..11A2 ; XID_Start 11A8..11F9 ; XID_Start -1200..1206 ; XID_Start -1208..1246 ; XID_Start -1248 ; XID_Start +1200..1248 ; XID_Start 124A..124D ; XID_Start 1250..1256 ; XID_Start 1258 ; XID_Start 125A..125D ; XID_Start -1260..1286 ; XID_Start -1288 ; XID_Start +1260..1288 ; XID_Start 128A..128D ; XID_Start -1290..12AE ; XID_Start -12B0 ; XID_Start +1290..12B0 ; XID_Start 12B2..12B5 ; XID_Start 12B8..12BE ; XID_Start 12C0 ; XID_Start 12C2..12C5 ; XID_Start -12C8..12CE ; XID_Start -12D0..12D6 ; XID_Start -12D8..12EE ; XID_Start -12F0..130E ; XID_Start -1310 ; XID_Start +12C8..12D6 ; XID_Start +12D8..1310 ; XID_Start 1312..1315 ; XID_Start -1318..131E ; XID_Start -1320..1346 ; XID_Start -1348..135A ; XID_Start +1318..135A ; XID_Start +1380..138F ; XID_Start 13A0..13F4 ; XID_Start 1401..166C ; XID_Start 166F..1676 ; XID_Start @@ -2681,9 +3030,17 @@ E0100..E01EF ; ID_Continue 1900..191C ; XID_Start 1950..196D ; XID_Start 1970..1974 ; XID_Start +1980..19A9 ; XID_Start +19C1..19C7 ; XID_Start +1A00..1A16 ; XID_Start +1B05..1B33 ; XID_Start +1B45..1B4B ; XID_Start 1D00..1D2B ; XID_Start 1D2C..1D61 ; XID_Start -1D62..1D6B ; XID_Start +1D62..1D77 ; XID_Start +1D78 ; XID_Start +1D79..1D9A ; XID_Start +1D9B..1DBF ; XID_Start 1E00..1E9B ; XID_Start 1EA0..1EF9 ; XID_Start 1F00..1F15 ; XID_Start @@ -2707,6 +3064,7 @@ E0100..E01EF ; ID_Continue 1FF6..1FFC ; XID_Start 2071 ; XID_Start 207F ; XID_Start +2090..2094 ; XID_Start 2102 ; XID_Start 2107 ; XID_Start 210A..2113 ; XID_Start @@ -2718,13 +3076,31 @@ E0100..E01EF ; ID_Continue 2128 ; XID_Start 212A..212D ; XID_Start 212E ; XID_Start -212F..2131 ; XID_Start -2133..2134 ; XID_Start +212F..2134 ; XID_Start 2135..2138 ; XID_Start 2139 ; XID_Start -213D..213F ; XID_Start +213C..213F ; XID_Start 2145..2149 ; XID_Start -2160..2183 ; XID_Start +214E ; XID_Start +2160..2182 ; XID_Start +2183..2184 ; XID_Start +2C00..2C2E ; XID_Start +2C30..2C5E ; XID_Start +2C60..2C6C ; XID_Start +2C74..2C77 ; XID_Start +2C80..2CE4 ; XID_Start +2D00..2D25 ; XID_Start +2D30..2D65 ; XID_Start +2D6F ; XID_Start +2D80..2D96 ; XID_Start +2DA0..2DA6 ; XID_Start +2DA8..2DAE ; XID_Start +2DB0..2DB6 ; XID_Start +2DB8..2DBE ; XID_Start +2DC0..2DC6 ; XID_Start +2DC8..2DCE ; XID_Start +2DD0..2DD6 ; XID_Start +2DD8..2DDE ; XID_Start 3005 ; XID_Start 3006 ; XID_Start 3007 ; XID_Start @@ -2744,11 +3120,20 @@ E0100..E01EF ; ID_Continue 31A0..31B7 ; XID_Start 31F0..31FF ; XID_Start 3400..4DB5 ; XID_Start -4E00..9FA5 ; XID_Start -A000..A48C ; XID_Start +4E00..9FBB ; XID_Start +A000..A014 ; XID_Start +A015 ; XID_Start +A016..A48C ; XID_Start +A717..A71A ; XID_Start +A800..A801 ; XID_Start +A803..A805 ; XID_Start +A807..A80A ; XID_Start +A80C..A822 ; XID_Start +A840..A873 ; XID_Start AC00..D7A3 ; XID_Start F900..FA2D ; XID_Start FA30..FA6A ; XID_Start +FA70..FAD9 ; XID_Start FB00..FB06 ; XID_Start FB13..FB17 ; XID_Start FB1D ; XID_Start @@ -2788,10 +3173,16 @@ FFDA..FFDC ; XID_Start 1003F..1004D ; XID_Start 10050..1005D ; XID_Start 10080..100FA ; XID_Start +10140..10174 ; XID_Start 10300..1031E ; XID_Start -10330..10349 ; XID_Start +10330..10340 ; XID_Start +10341 ; XID_Start +10342..10349 ; XID_Start 1034A ; XID_Start 10380..1039D ; XID_Start +103A0..103C3 ; XID_Start +103C8..103CF ; XID_Start +103D1..103D5 ; XID_Start 10400..1044F ; XID_Start 10450..1049D ; XID_Start 10800..10805 ; XID_Start @@ -2800,6 +3191,13 @@ FFDA..FFDC ; XID_Start 10837..10838 ; XID_Start 1083C ; XID_Start 1083F ; XID_Start +10900..10915 ; XID_Start +10A00 ; XID_Start +10A10..10A13 ; XID_Start +10A15..10A17 ; XID_Start +10A19..10A33 ; XID_Start +12000..1236E ; XID_Start +12400..12462 ; XID_Start 1D400..1D454 ; XID_Start 1D456..1D49C ; XID_Start 1D49E..1D49F ; XID_Start @@ -2818,7 +3216,7 @@ FFDA..FFDC ; XID_Start 1D540..1D544 ; XID_Start 1D546 ; XID_Start 1D54A..1D550 ; XID_Start -1D552..1D6A3 ; XID_Start +1D552..1D6A5 ; XID_Start 1D6A8..1D6C0 ; XID_Start 1D6C2..1D6DA ; XID_Start 1D6DC..1D6FA ; XID_Start @@ -2829,11 +3227,11 @@ FFDA..FFDC ; XID_Start 1D770..1D788 ; XID_Start 1D78A..1D7A8 ; XID_Start 1D7AA..1D7C2 ; XID_Start -1D7C4..1D7C9 ; XID_Start +1D7C4..1D7CB ; XID_Start 20000..2A6D6 ; XID_Start 2F800..2FA1D ; XID_Start -# Total code points: 90581 +# Total code points: 92687 # ================================================ @@ -2843,6 +3241,7 @@ FFDA..FFDC ; XID_Start # NOTE: Cf characters should be filtered out. # NOTE: Does NOT remove the non-NFKx characters. # Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string)) +# NOTE: See UAX #31 for more information 0030..0039 ; XID_Continue 0041..005A ; XID_Continue @@ -2858,43 +3257,39 @@ FFDA..FFDC ; XID_Start 01BB ; XID_Continue 01BC..01BF ; XID_Continue 01C0..01C3 ; XID_Continue -01C4..0236 ; XID_Continue -0250..02AF ; XID_Continue +01C4..0293 ; XID_Continue +0294 ; XID_Continue +0295..02AF ; XID_Continue 02B0..02C1 ; XID_Continue 02C6..02D1 ; XID_Continue 02E0..02E4 ; XID_Continue 02EE ; XID_Continue -0300..0357 ; XID_Continue -035D..036F ; XID_Continue +0300..036F ; XID_Continue +037B..037D ; XID_Continue 0386 ; XID_Continue 0388..038A ; XID_Continue 038C ; XID_Continue 038E..03A1 ; XID_Continue 03A3..03CE ; XID_Continue 03D0..03F5 ; XID_Continue -03F7..03FB ; XID_Continue -0400..0481 ; XID_Continue +03F7..0481 ; XID_Continue 0483..0486 ; XID_Continue -048A..04CE ; XID_Continue -04D0..04F5 ; XID_Continue -04F8..04F9 ; XID_Continue -0500..050F ; XID_Continue +048A..0513 ; XID_Continue 0531..0556 ; XID_Continue 0559 ; XID_Continue 0561..0587 ; XID_Continue -0591..05A1 ; XID_Continue -05A3..05B9 ; XID_Continue -05BB..05BD ; XID_Continue +0591..05BD ; XID_Continue 05BF ; XID_Continue 05C1..05C2 ; XID_Continue -05C4 ; XID_Continue +05C4..05C5 ; XID_Continue +05C7 ; XID_Continue 05D0..05EA ; XID_Continue 05F0..05F2 ; XID_Continue 0610..0615 ; XID_Continue 0621..063A ; XID_Continue 0640 ; XID_Continue 0641..064A ; XID_Continue -064B..0658 ; XID_Continue +064B..065E ; XID_Continue 0660..0669 ; XID_Continue 066E..066F ; XID_Continue 0670 ; XID_Continue @@ -2913,10 +3308,15 @@ FFDA..FFDC ; XID_Start 0711 ; XID_Continue 0712..072F ; XID_Continue 0730..074A ; XID_Continue -074D..074F ; XID_Continue +074D..076D ; XID_Continue 0780..07A5 ; XID_Continue 07A6..07B0 ; XID_Continue 07B1 ; XID_Continue +07C0..07C9 ; XID_Continue +07CA..07EA ; XID_Continue +07EB..07F3 ; XID_Continue +07F4..07F5 ; XID_Continue +07FA ; XID_Continue 0901..0902 ; XID_Continue 0903 ; XID_Continue 0904..0939 ; XID_Continue @@ -2931,6 +3331,7 @@ FFDA..FFDC ; XID_Start 0958..0961 ; XID_Continue 0962..0963 ; XID_Continue 0966..096F ; XID_Continue +097B..097F ; XID_Continue 0981 ; XID_Continue 0982..0983 ; XID_Continue 0985..098C ; XID_Continue @@ -2946,6 +3347,7 @@ FFDA..FFDC ; XID_Start 09C7..09C8 ; XID_Continue 09CB..09CC ; XID_Continue 09CD ; XID_Continue +09CE ; XID_Continue 09D7 ; XID_Continue 09DC..09DD ; XID_Continue 09DF..09E1 ; XID_Continue @@ -3024,8 +3426,7 @@ FFDA..FFDC ; XID_Start 0B9E..0B9F ; XID_Continue 0BA3..0BA4 ; XID_Continue 0BA8..0BAA ; XID_Continue -0BAE..0BB5 ; XID_Continue -0BB7..0BB9 ; XID_Continue +0BAE..0BB9 ; XID_Continue 0BBE..0BBF ; XID_Continue 0BC0 ; XID_Continue 0BC1..0BC2 ; XID_Continue @@ -3033,7 +3434,7 @@ FFDA..FFDC ; XID_Start 0BCA..0BCC ; XID_Continue 0BCD ; XID_Continue 0BD7 ; XID_Continue -0BE7..0BEF ; XID_Continue +0BE6..0BEF ; XID_Continue 0C01..0C03 ; XID_Continue 0C05..0C0C ; XID_Continue 0C0E..0C10 ; XID_Continue @@ -3065,6 +3466,7 @@ FFDA..FFDC ; XID_Start 0CD5..0CD6 ; XID_Continue 0CDE ; XID_Continue 0CE0..0CE1 ; XID_Continue +0CE2..0CE3 ; XID_Continue 0CE6..0CEF ; XID_Continue 0D02..0D03 ; XID_Continue 0D05..0D0C ; XID_Continue @@ -3153,36 +3555,30 @@ FFDA..FFDC ; XID_Start 1056..1057 ; XID_Continue 1058..1059 ; XID_Continue 10A0..10C5 ; XID_Continue -10D0..10F8 ; XID_Continue +10D0..10FA ; XID_Continue +10FC ; XID_Continue 1100..1159 ; XID_Continue 115F..11A2 ; XID_Continue 11A8..11F9 ; XID_Continue -1200..1206 ; XID_Continue -1208..1246 ; XID_Continue -1248 ; XID_Continue +1200..1248 ; XID_Continue 124A..124D ; XID_Continue 1250..1256 ; XID_Continue 1258 ; XID_Continue 125A..125D ; XID_Continue -1260..1286 ; XID_Continue -1288 ; XID_Continue +1260..1288 ; XID_Continue 128A..128D ; XID_Continue -1290..12AE ; XID_Continue -12B0 ; XID_Continue +1290..12B0 ; XID_Continue 12B2..12B5 ; XID_Continue 12B8..12BE ; XID_Continue 12C0 ; XID_Continue 12C2..12C5 ; XID_Continue -12C8..12CE ; XID_Continue -12D0..12D6 ; XID_Continue -12D8..12EE ; XID_Continue -12F0..130E ; XID_Continue -1310 ; XID_Continue +12C8..12D6 ; XID_Continue +12D8..1310 ; XID_Continue 1312..1315 ; XID_Continue -1318..131E ; XID_Continue -1320..1346 ; XID_Continue -1348..135A ; XID_Continue +1318..135A ; XID_Continue +135F ; XID_Continue 1369..1371 ; XID_Continue +1380..138F ; XID_Continue 13A0..13F4 ; XID_Continue 1401..166C ; XID_Continue 166F..1676 ; XID_Continue @@ -3229,9 +3625,36 @@ FFDA..FFDC ; XID_Start 1946..194F ; XID_Continue 1950..196D ; XID_Continue 1970..1974 ; XID_Continue +1980..19A9 ; XID_Continue +19B0..19C0 ; XID_Continue +19C1..19C7 ; XID_Continue +19C8..19C9 ; XID_Continue +19D0..19D9 ; XID_Continue +1A00..1A16 ; XID_Continue +1A17..1A18 ; XID_Continue +1A19..1A1B ; XID_Continue +1B00..1B03 ; XID_Continue +1B04 ; XID_Continue +1B05..1B33 ; XID_Continue +1B34 ; XID_Continue +1B35 ; XID_Continue +1B36..1B3A ; XID_Continue +1B3B ; XID_Continue +1B3C ; XID_Continue +1B3D..1B41 ; XID_Continue +1B42 ; XID_Continue +1B43..1B44 ; XID_Continue +1B45..1B4B ; XID_Continue +1B50..1B59 ; XID_Continue +1B6B..1B73 ; XID_Continue 1D00..1D2B ; XID_Continue 1D2C..1D61 ; XID_Continue -1D62..1D6B ; XID_Continue +1D62..1D77 ; XID_Continue +1D78 ; XID_Continue +1D79..1D9A ; XID_Continue +1D9B..1DBF ; XID_Continue +1DC0..1DCA ; XID_Continue +1DFE..1DFF ; XID_Continue 1E00..1E9B ; XID_Continue 1EA0..1EF9 ; XID_Continue 1F00..1F15 ; XID_Continue @@ -3257,9 +3680,10 @@ FFDA..FFDC ; XID_Start 2054 ; XID_Continue 2071 ; XID_Continue 207F ; XID_Continue +2090..2094 ; XID_Continue 20D0..20DC ; XID_Continue 20E1 ; XID_Continue -20E5..20EA ; XID_Continue +20E5..20EF ; XID_Continue 2102 ; XID_Continue 2107 ; XID_Continue 210A..2113 ; XID_Continue @@ -3271,13 +3695,31 @@ FFDA..FFDC ; XID_Start 2128 ; XID_Continue 212A..212D ; XID_Continue 212E ; XID_Continue -212F..2131 ; XID_Continue -2133..2134 ; XID_Continue +212F..2134 ; XID_Continue 2135..2138 ; XID_Continue 2139 ; XID_Continue -213D..213F ; XID_Continue +213C..213F ; XID_Continue 2145..2149 ; XID_Continue -2160..2183 ; XID_Continue +214E ; XID_Continue +2160..2182 ; XID_Continue +2183..2184 ; XID_Continue +2C00..2C2E ; XID_Continue +2C30..2C5E ; XID_Continue +2C60..2C6C ; XID_Continue +2C74..2C77 ; XID_Continue +2C80..2CE4 ; XID_Continue +2D00..2D25 ; XID_Continue +2D30..2D65 ; XID_Continue +2D6F ; XID_Continue +2D80..2D96 ; XID_Continue +2DA0..2DA6 ; XID_Continue +2DA8..2DAE ; XID_Continue +2DB0..2DB6 ; XID_Continue +2DB8..2DBE ; XID_Continue +2DC0..2DC6 ; XID_Continue +2DC8..2DCE ; XID_Continue +2DD0..2DD6 ; XID_Continue +2DD8..2DDE ; XID_Continue 3005 ; XID_Continue 3006 ; XID_Continue 3007 ; XID_Continue @@ -3292,7 +3734,6 @@ FFDA..FFDC ; XID_Start 309D..309E ; XID_Continue 309F ; XID_Continue 30A1..30FA ; XID_Continue -30FB ; XID_Continue 30FC..30FE ; XID_Continue 30FF ; XID_Continue 3105..312C ; XID_Continue @@ -3300,11 +3741,26 @@ FFDA..FFDC ; XID_Start 31A0..31B7 ; XID_Continue 31F0..31FF ; XID_Continue 3400..4DB5 ; XID_Continue -4E00..9FA5 ; XID_Continue -A000..A48C ; XID_Continue +4E00..9FBB ; XID_Continue +A000..A014 ; XID_Continue +A015 ; XID_Continue +A016..A48C ; XID_Continue +A717..A71A ; XID_Continue +A800..A801 ; XID_Continue +A802 ; XID_Continue +A803..A805 ; XID_Continue +A806 ; XID_Continue +A807..A80A ; XID_Continue +A80B ; XID_Continue +A80C..A822 ; XID_Continue +A823..A824 ; XID_Continue +A825..A826 ; XID_Continue +A827 ; XID_Continue +A840..A873 ; XID_Continue AC00..D7A3 ; XID_Continue F900..FA2D ; XID_Continue FA30..FA6A ; XID_Continue +FA70..FAD9 ; XID_Continue FB00..FB06 ; XID_Continue FB13..FB17 ; XID_Continue FB1D ; XID_Continue @@ -3336,7 +3792,6 @@ FF10..FF19 ; XID_Continue FF21..FF3A ; XID_Continue FF3F ; XID_Continue FF41..FF5A ; XID_Continue -FF65 ; XID_Continue FF66..FF6F ; XID_Continue FF70 ; XID_Continue FF71..FF9D ; XID_Continue @@ -3353,10 +3808,16 @@ FFDA..FFDC ; XID_Continue 1003F..1004D ; XID_Continue 10050..1005D ; XID_Continue 10080..100FA ; XID_Continue +10140..10174 ; XID_Continue 10300..1031E ; XID_Continue -10330..10349 ; XID_Continue +10330..10340 ; XID_Continue +10341 ; XID_Continue +10342..10349 ; XID_Continue 1034A ; XID_Continue 10380..1039D ; XID_Continue +103A0..103C3 ; XID_Continue +103C8..103CF ; XID_Continue +103D1..103D5 ; XID_Continue 10400..1044F ; XID_Continue 10450..1049D ; XID_Continue 104A0..104A9 ; XID_Continue @@ -3366,12 +3827,25 @@ FFDA..FFDC ; XID_Continue 10837..10838 ; XID_Continue 1083C ; XID_Continue 1083F ; XID_Continue +10900..10915 ; XID_Continue +10A00 ; XID_Continue +10A01..10A03 ; XID_Continue +10A05..10A06 ; XID_Continue +10A0C..10A0F ; XID_Continue +10A10..10A13 ; XID_Continue +10A15..10A17 ; XID_Continue +10A19..10A33 ; XID_Continue +10A38..10A3A ; XID_Continue +10A3F ; XID_Continue +12000..1236E ; XID_Continue +12400..12462 ; XID_Continue 1D165..1D166 ; XID_Continue 1D167..1D169 ; XID_Continue 1D16D..1D172 ; XID_Continue 1D17B..1D182 ; XID_Continue 1D185..1D18B ; XID_Continue 1D1AA..1D1AD ; XID_Continue +1D242..1D244 ; XID_Continue 1D400..1D454 ; XID_Continue 1D456..1D49C ; XID_Continue 1D49E..1D49F ; XID_Continue @@ -3390,7 +3864,7 @@ FFDA..FFDC ; XID_Continue 1D540..1D544 ; XID_Continue 1D546 ; XID_Continue 1D54A..1D550 ; XID_Continue -1D552..1D6A3 ; XID_Continue +1D552..1D6A5 ; XID_Continue 1D6A8..1D6C0 ; XID_Continue 1D6C2..1D6DA ; XID_Continue 1D6DC..1D6FA ; XID_Continue @@ -3401,18 +3875,19 @@ FFDA..FFDC ; XID_Continue 1D770..1D788 ; XID_Continue 1D78A..1D7A8 ; XID_Continue 1D7AA..1D7C2 ; XID_Continue -1D7C4..1D7C9 ; XID_Continue +1D7C4..1D7CB ; XID_Continue 1D7CE..1D7FF ; XID_Continue 20000..2A6D6 ; XID_Continue 2F800..2FA1D ; XID_Continue E0100..E01EF ; XID_Continue -# Total code points: 91797 +# Total code points: 94056 # ================================================ # Derived Property: Default_Ignorable_Code_Point -# Generated from Other_Default_Ignorable_Code_Point + Cf + Cc + Cs + Noncharacters - White_Space - Annotation_characters +# Generated from Other_Default_Ignorable_Code_Point + Cf + Cc + Cs + Noncharacters +# - White_Space - FFF9..FFFB (Annotation Characters) 0000..0008 ; Default_Ignorable_Code_Point 000E..001F ; Default_Ignorable_Code_Point @@ -3472,18 +3947,16 @@ FFFFE..FFFFF ; Default_Ignorable_Code_Point # Note: depending on an application's interpretation of Co (private use), # they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither. -0300..0357 ; Grapheme_Extend -035D..036F ; Grapheme_Extend +0300..036F ; Grapheme_Extend 0483..0486 ; Grapheme_Extend 0488..0489 ; Grapheme_Extend -0591..05A1 ; Grapheme_Extend -05A3..05B9 ; Grapheme_Extend -05BB..05BD ; Grapheme_Extend +0591..05BD ; Grapheme_Extend 05BF ; Grapheme_Extend 05C1..05C2 ; Grapheme_Extend -05C4 ; Grapheme_Extend +05C4..05C5 ; Grapheme_Extend +05C7 ; Grapheme_Extend 0610..0615 ; Grapheme_Extend -064B..0658 ; Grapheme_Extend +064B..065E ; Grapheme_Extend 0670 ; Grapheme_Extend 06D6..06DC ; Grapheme_Extend 06DE ; Grapheme_Extend @@ -3493,6 +3966,7 @@ FFFFE..FFFFF ; Default_Ignorable_Code_Point 0711 ; Grapheme_Extend 0730..074A ; Grapheme_Extend 07A6..07B0 ; Grapheme_Extend +07EB..07F3 ; Grapheme_Extend 0901..0902 ; Grapheme_Extend 093C ; Grapheme_Extend 0941..0948 ; Grapheme_Extend @@ -3541,6 +4015,7 @@ FFFFE..FFFFF ; Default_Ignorable_Code_Point 0CC6 ; Grapheme_Extend 0CCC..0CCD ; Grapheme_Extend 0CD5..0CD6 ; Grapheme_Extend +0CE2..0CE3 ; Grapheme_Extend 0D3E ; Grapheme_Extend 0D41..0D43 ; Grapheme_Extend 0D4D ; Grapheme_Extend @@ -3572,6 +4047,7 @@ FFFFE..FFFFF ; Default_Ignorable_Code_Point 1036..1037 ; Grapheme_Extend 1039 ; Grapheme_Extend 1058..1059 ; Grapheme_Extend +135F ; Grapheme_Extend 1712..1714 ; Grapheme_Extend 1732..1734 ; Grapheme_Extend 1752..1753 ; Grapheme_Extend @@ -3586,27 +4062,47 @@ FFFFE..FFFFF ; Default_Ignorable_Code_Point 1927..1928 ; Grapheme_Extend 1932 ; Grapheme_Extend 1939..193B ; Grapheme_Extend +1A17..1A18 ; Grapheme_Extend +1B00..1B03 ; Grapheme_Extend +1B34 ; Grapheme_Extend +1B36..1B3A ; Grapheme_Extend +1B3C ; Grapheme_Extend +1B42 ; Grapheme_Extend +1B6B..1B73 ; Grapheme_Extend +1DC0..1DCA ; Grapheme_Extend +1DFE..1DFF ; Grapheme_Extend 200C..200D ; Grapheme_Extend 20D0..20DC ; Grapheme_Extend 20DD..20E0 ; Grapheme_Extend 20E1 ; Grapheme_Extend 20E2..20E4 ; Grapheme_Extend -20E5..20EA ; Grapheme_Extend +20E5..20EF ; Grapheme_Extend 302A..302F ; Grapheme_Extend 3099..309A ; Grapheme_Extend +A806 ; Grapheme_Extend +A80B ; Grapheme_Extend +A825..A826 ; Grapheme_Extend F870..F87F ; Grapheme_Extend +F884..F899 ; Grapheme_Extend +F89F ; Grapheme_Extend FB1E ; Grapheme_Extend FE00..FE0F ; Grapheme_Extend FE20..FE23 ; Grapheme_Extend +10A01..10A03 ; Grapheme_Extend +10A05..10A06 ; Grapheme_Extend +10A0C..10A0F ; Grapheme_Extend +10A38..10A3A ; Grapheme_Extend +10A3F ; Grapheme_Extend 1D165 ; Grapheme_Extend 1D167..1D169 ; Grapheme_Extend -1D16E..1D16F ; Grapheme_Extend +1D16E..1D172 ; Grapheme_Extend 1D17B..1D182 ; Grapheme_Extend 1D185..1D18B ; Grapheme_Extend 1D1AA..1D1AD ; Grapheme_Extend +1D242..1D244 ; Grapheme_Extend E0100..E01EF ; Grapheme_Extend -# Total code points: 820 +# Total code points: 911 # ================================================ @@ -3674,8 +4170,9 @@ E0100..E01EF ; Grapheme_Extend 01BB ; Grapheme_Base 01BC..01BF ; Grapheme_Base 01C0..01C3 ; Grapheme_Base -01C4..0236 ; Grapheme_Base -0250..02AF ; Grapheme_Base +01C4..0293 ; Grapheme_Base +0294 ; Grapheme_Base +0295..02AF ; Grapheme_Base 02B0..02C1 ; Grapheme_Base 02C2..02C5 ; Grapheme_Base 02C6..02D1 ; Grapheme_Base @@ -3686,6 +4183,7 @@ E0100..E01EF ; Grapheme_Extend 02EF..02FF ; Grapheme_Base 0374..0375 ; Grapheme_Base 037A ; Grapheme_Base +037B..037D ; Grapheme_Base 037E ; Grapheme_Base 0384..0385 ; Grapheme_Base 0386 ; Grapheme_Base @@ -3696,13 +4194,9 @@ E0100..E01EF ; Grapheme_Extend 03A3..03CE ; Grapheme_Base 03D0..03F5 ; Grapheme_Base 03F6 ; Grapheme_Base -03F7..03FB ; Grapheme_Base -0400..0481 ; Grapheme_Base +03F7..0481 ; Grapheme_Base 0482 ; Grapheme_Base -048A..04CE ; Grapheme_Base -04D0..04F5 ; Grapheme_Base -04F8..04F9 ; Grapheme_Base -0500..050F ; Grapheme_Base +048A..0513 ; Grapheme_Base 0531..0556 ; Grapheme_Base 0559 ; Grapheme_Base 055A..055F ; Grapheme_Base @@ -3712,13 +4206,15 @@ E0100..E01EF ; Grapheme_Extend 05BE ; Grapheme_Base 05C0 ; Grapheme_Base 05C3 ; Grapheme_Base +05C6 ; Grapheme_Base 05D0..05EA ; Grapheme_Base 05F0..05F2 ; Grapheme_Base 05F3..05F4 ; Grapheme_Base +060B ; Grapheme_Base 060C..060D ; Grapheme_Base 060E..060F ; Grapheme_Base 061B ; Grapheme_Base -061F ; Grapheme_Base +061E..061F ; Grapheme_Base 0621..063A ; Grapheme_Base 0640 ; Grapheme_Base 0641..064A ; Grapheme_Base @@ -3738,9 +4234,15 @@ E0100..E01EF ; Grapheme_Extend 0700..070D ; Grapheme_Base 0710 ; Grapheme_Base 0712..072F ; Grapheme_Base -074D..074F ; Grapheme_Base +074D..076D ; Grapheme_Base 0780..07A5 ; Grapheme_Base 07B1 ; Grapheme_Base +07C0..07C9 ; Grapheme_Base +07CA..07EA ; Grapheme_Base +07F4..07F5 ; Grapheme_Base +07F6 ; Grapheme_Base +07F7..07F9 ; Grapheme_Base +07FA ; Grapheme_Base 0903 ; Grapheme_Base 0904..0939 ; Grapheme_Base 093D ; Grapheme_Base @@ -3751,6 +4253,7 @@ E0100..E01EF ; Grapheme_Extend 0964..0965 ; Grapheme_Base 0966..096F ; Grapheme_Base 0970 ; Grapheme_Base +097B..097F ; Grapheme_Base 0982..0983 ; Grapheme_Base 0985..098C ; Grapheme_Base 098F..0990 ; Grapheme_Base @@ -3762,6 +4265,7 @@ E0100..E01EF ; Grapheme_Extend 09BF..09C0 ; Grapheme_Base 09C7..09C8 ; Grapheme_Base 09CB..09CC ; Grapheme_Base +09CE ; Grapheme_Base 09DC..09DD ; Grapheme_Base 09DF..09E1 ; Grapheme_Base 09E6..09EF ; Grapheme_Base @@ -3822,13 +4326,12 @@ E0100..E01EF ; Grapheme_Extend 0B9E..0B9F ; Grapheme_Base 0BA3..0BA4 ; Grapheme_Base 0BA8..0BAA ; Grapheme_Base -0BAE..0BB5 ; Grapheme_Base -0BB7..0BB9 ; Grapheme_Base +0BAE..0BB9 ; Grapheme_Base 0BBF ; Grapheme_Base 0BC1..0BC2 ; Grapheme_Base 0BC6..0BC8 ; Grapheme_Base 0BCA..0BCC ; Grapheme_Base -0BE7..0BEF ; Grapheme_Base +0BE6..0BEF ; Grapheme_Base 0BF0..0BF2 ; Grapheme_Base 0BF3..0BF8 ; Grapheme_Base 0BF9 ; Grapheme_Base @@ -3857,6 +4360,7 @@ E0100..E01EF ; Grapheme_Extend 0CDE ; Grapheme_Base 0CE0..0CE1 ; Grapheme_Base 0CE6..0CEF ; Grapheme_Base +0CF1..0CF2 ; Grapheme_Base 0D02..0D03 ; Grapheme_Base 0D05..0D0C ; Grapheme_Base 0D0E..0D10 ; Grapheme_Base @@ -3926,6 +4430,7 @@ E0100..E01EF ; Grapheme_Extend 0FBE..0FC5 ; Grapheme_Base 0FC7..0FCC ; Grapheme_Base 0FCF ; Grapheme_Base +0FD0..0FD1 ; Grapheme_Base 1000..1021 ; Grapheme_Base 1023..1027 ; Grapheme_Base 1029..102A ; Grapheme_Base @@ -3937,39 +4442,33 @@ E0100..E01EF ; Grapheme_Extend 1050..1055 ; Grapheme_Base 1056..1057 ; Grapheme_Base 10A0..10C5 ; Grapheme_Base -10D0..10F8 ; Grapheme_Base +10D0..10FA ; Grapheme_Base 10FB ; Grapheme_Base +10FC ; Grapheme_Base 1100..1159 ; Grapheme_Base 115F..11A2 ; Grapheme_Base 11A8..11F9 ; Grapheme_Base -1200..1206 ; Grapheme_Base -1208..1246 ; Grapheme_Base -1248 ; Grapheme_Base +1200..1248 ; Grapheme_Base 124A..124D ; Grapheme_Base 1250..1256 ; Grapheme_Base 1258 ; Grapheme_Base 125A..125D ; Grapheme_Base -1260..1286 ; Grapheme_Base -1288 ; Grapheme_Base +1260..1288 ; Grapheme_Base 128A..128D ; Grapheme_Base -1290..12AE ; Grapheme_Base -12B0 ; Grapheme_Base +1290..12B0 ; Grapheme_Base 12B2..12B5 ; Grapheme_Base 12B8..12BE ; Grapheme_Base 12C0 ; Grapheme_Base 12C2..12C5 ; Grapheme_Base -12C8..12CE ; Grapheme_Base -12D0..12D6 ; Grapheme_Base -12D8..12EE ; Grapheme_Base -12F0..130E ; Grapheme_Base -1310 ; Grapheme_Base +12C8..12D6 ; Grapheme_Base +12D8..1310 ; Grapheme_Base 1312..1315 ; Grapheme_Base -1318..131E ; Grapheme_Base -1320..1346 ; Grapheme_Base -1348..135A ; Grapheme_Base +1318..135A ; Grapheme_Base +1360 ; Grapheme_Base 1361..1368 ; Grapheme_Base -1369..1371 ; Grapheme_Base -1372..137C ; Grapheme_Base +1369..137C ; Grapheme_Base +1380..138F ; Grapheme_Base +1390..1399 ; Grapheme_Base 13A0..13F4 ; Grapheme_Base 1401..166C ; Grapheme_Base 166D..166E ; Grapheme_Base @@ -4018,10 +4517,33 @@ E0100..E01EF ; Grapheme_Extend 1946..194F ; Grapheme_Base 1950..196D ; Grapheme_Base 1970..1974 ; Grapheme_Base +1980..19A9 ; Grapheme_Base +19B0..19C0 ; Grapheme_Base +19C1..19C7 ; Grapheme_Base +19C8..19C9 ; Grapheme_Base +19D0..19D9 ; Grapheme_Base +19DE..19DF ; Grapheme_Base 19E0..19FF ; Grapheme_Base +1A00..1A16 ; Grapheme_Base +1A19..1A1B ; Grapheme_Base +1A1E..1A1F ; Grapheme_Base +1B04 ; Grapheme_Base +1B05..1B33 ; Grapheme_Base +1B35 ; Grapheme_Base +1B3B ; Grapheme_Base +1B3D..1B41 ; Grapheme_Base +1B43..1B44 ; Grapheme_Base +1B45..1B4B ; Grapheme_Base +1B50..1B59 ; Grapheme_Base +1B5A..1B60 ; Grapheme_Base +1B61..1B6A ; Grapheme_Base +1B74..1B7C ; Grapheme_Base 1D00..1D2B ; Grapheme_Base 1D2C..1D61 ; Grapheme_Base -1D62..1D6B ; Grapheme_Base +1D62..1D77 ; Grapheme_Base +1D78 ; Grapheme_Base +1D79..1D9A ; Grapheme_Base +1D9B..1DBF ; Grapheme_Base 1E00..1E9B ; Grapheme_Base 1EA0..1EF9 ; Grapheme_Base 1F00..1F15 ; Grapheme_Base @@ -4074,7 +4596,7 @@ E0100..E01EF ; Grapheme_Extend 2052 ; Grapheme_Base 2053 ; Grapheme_Base 2054 ; Grapheme_Base -2057 ; Grapheme_Base +2055..205E ; Grapheme_Base 205F ; Grapheme_Base 2070 ; Grapheme_Base 2071 ; Grapheme_Base @@ -4087,7 +4609,8 @@ E0100..E01EF ; Grapheme_Extend 208A..208C ; Grapheme_Base 208D ; Grapheme_Base 208E ; Grapheme_Base -20A0..20B1 ; Grapheme_Base +2090..2094 ; Grapheme_Base +20A0..20B5 ; Grapheme_Base 2100..2101 ; Grapheme_Base 2102 ; Grapheme_Base 2103..2106 ; Grapheme_Base @@ -4107,19 +4630,20 @@ E0100..E01EF ; Grapheme_Extend 2129 ; Grapheme_Base 212A..212D ; Grapheme_Base 212E ; Grapheme_Base -212F..2131 ; Grapheme_Base -2132 ; Grapheme_Base -2133..2134 ; Grapheme_Base +212F..2134 ; Grapheme_Base 2135..2138 ; Grapheme_Base 2139 ; Grapheme_Base 213A..213B ; Grapheme_Base -213D..213F ; Grapheme_Base +213C..213F ; Grapheme_Base 2140..2144 ; Grapheme_Base 2145..2149 ; Grapheme_Base 214A ; Grapheme_Base 214B ; Grapheme_Base +214C..214D ; Grapheme_Base +214E ; Grapheme_Base 2153..215F ; Grapheme_Base -2160..2183 ; Grapheme_Base +2160..2182 ; Grapheme_Base +2183..2184 ; Grapheme_Base 2190..2194 ; Grapheme_Base 2195..2199 ; Grapheme_Base 219A..219B ; Grapheme_Base @@ -4150,10 +4674,9 @@ E0100..E01EF ; Grapheme_Extend 237C ; Grapheme_Base 237D..239A ; Grapheme_Base 239B..23B3 ; Grapheme_Base -23B4 ; Grapheme_Base -23B5 ; Grapheme_Base -23B6 ; Grapheme_Base -23B7..23D0 ; Grapheme_Base +23B4..23DB ; Grapheme_Base +23DC..23E1 ; Grapheme_Base +23E2..23E7 ; Grapheme_Base 2400..2426 ; Grapheme_Base 2440..244A ; Grapheme_Base 2460..249B ; Grapheme_Base @@ -4165,12 +4688,10 @@ E0100..E01EF ; Grapheme_Extend 25C1 ; Grapheme_Base 25C2..25F7 ; Grapheme_Base 25F8..25FF ; Grapheme_Base -2600..2617 ; Grapheme_Base -2619..266E ; Grapheme_Base +2600..266E ; Grapheme_Base 266F ; Grapheme_Base -2670..267D ; Grapheme_Base -2680..2691 ; Grapheme_Base -26A0..26A1 ; Grapheme_Base +2670..269C ; Grapheme_Base +26A0..26B2 ; Grapheme_Base 2701..2704 ; Grapheme_Base 2706..2709 ; Grapheme_Base 270C..2727 ; Grapheme_Base @@ -4198,6 +4719,10 @@ E0100..E01EF ; Grapheme_Extend 2794 ; Grapheme_Base 2798..27AF ; Grapheme_Base 27B1..27BE ; Grapheme_Base +27C0..27C4 ; Grapheme_Base +27C5 ; Grapheme_Base +27C6 ; Grapheme_Base +27C7..27CA ; Grapheme_Base 27D0..27E5 ; Grapheme_Base 27E6 ; Grapheme_Base 27E7 ; Grapheme_Base @@ -4239,7 +4764,44 @@ E0100..E01EF ; Grapheme_Extend 29FC ; Grapheme_Base 29FD ; Grapheme_Base 29FE..2AFF ; Grapheme_Base -2B00..2B0D ; Grapheme_Base +2B00..2B1A ; Grapheme_Base +2B20..2B23 ; Grapheme_Base +2C00..2C2E ; Grapheme_Base +2C30..2C5E ; Grapheme_Base +2C60..2C6C ; Grapheme_Base +2C74..2C77 ; Grapheme_Base +2C80..2CE4 ; Grapheme_Base +2CE5..2CEA ; Grapheme_Base +2CF9..2CFC ; Grapheme_Base +2CFD ; Grapheme_Base +2CFE..2CFF ; Grapheme_Base +2D00..2D25 ; Grapheme_Base +2D30..2D65 ; Grapheme_Base +2D6F ; Grapheme_Base +2D80..2D96 ; Grapheme_Base +2DA0..2DA6 ; Grapheme_Base +2DA8..2DAE ; Grapheme_Base +2DB0..2DB6 ; Grapheme_Base +2DB8..2DBE ; Grapheme_Base +2DC0..2DC6 ; Grapheme_Base +2DC8..2DCE ; Grapheme_Base +2DD0..2DD6 ; Grapheme_Base +2DD8..2DDE ; Grapheme_Base +2E00..2E01 ; Grapheme_Base +2E02 ; Grapheme_Base +2E03 ; Grapheme_Base +2E04 ; Grapheme_Base +2E05 ; Grapheme_Base +2E06..2E08 ; Grapheme_Base +2E09 ; Grapheme_Base +2E0A ; Grapheme_Base +2E0B ; Grapheme_Base +2E0C ; Grapheme_Base +2E0D ; Grapheme_Base +2E0E..2E16 ; Grapheme_Base +2E17 ; Grapheme_Base +2E1C ; Grapheme_Base +2E1D ; Grapheme_Base 2E80..2E99 ; Grapheme_Base 2E9B..2EF3 ; Grapheme_Base 2F00..2FD5 ; Grapheme_Base @@ -4297,14 +4859,14 @@ E0100..E01EF ; Grapheme_Extend 3192..3195 ; Grapheme_Base 3196..319F ; Grapheme_Base 31A0..31B7 ; Grapheme_Base +31C0..31CF ; Grapheme_Base 31F0..31FF ; Grapheme_Base 3200..321E ; Grapheme_Base 3220..3229 ; Grapheme_Base 322A..3243 ; Grapheme_Base 3250 ; Grapheme_Base 3251..325F ; Grapheme_Base -3260..327D ; Grapheme_Base -327F ; Grapheme_Base +3260..327F ; Grapheme_Base 3280..3289 ; Grapheme_Base 328A..32B0 ; Grapheme_Base 32B1..32BF ; Grapheme_Base @@ -4312,12 +4874,32 @@ E0100..E01EF ; Grapheme_Extend 3300..33FF ; Grapheme_Base 3400..4DB5 ; Grapheme_Base 4DC0..4DFF ; Grapheme_Base -4E00..9FA5 ; Grapheme_Base -A000..A48C ; Grapheme_Base +4E00..9FBB ; Grapheme_Base +A000..A014 ; Grapheme_Base +A015 ; Grapheme_Base +A016..A48C ; Grapheme_Base A490..A4C6 ; Grapheme_Base +A700..A716 ; Grapheme_Base +A717..A71A ; Grapheme_Base +A720..A721 ; Grapheme_Base +A800..A801 ; Grapheme_Base +A802 ; Grapheme_Base +A803..A805 ; Grapheme_Base +A807..A80A ; Grapheme_Base +A80C..A822 ; Grapheme_Base +A823..A824 ; Grapheme_Base +A827 ; Grapheme_Base +A828..A82B ; Grapheme_Base +A840..A873 ; Grapheme_Base +A874..A877 ; Grapheme_Base AC00..D7A3 ; Grapheme_Base +F802..F84F ; Grapheme_Base +F880..F883 ; Grapheme_Base +F89A..F89E ; Grapheme_Base +F8A0..F8FF ; Grapheme_Base F900..FA2D ; Grapheme_Base FA30..FA6A ; Grapheme_Base +FA70..FAD9 ; Grapheme_Base FB00..FB06 ; Grapheme_Base FB13..FB17 ; Grapheme_Base FB1D ; Grapheme_Base @@ -4337,6 +4919,10 @@ FD92..FDC7 ; Grapheme_Base FDF0..FDFB ; Grapheme_Base FDFC ; Grapheme_Base FDFD ; Grapheme_Base +FE10..FE16 ; Grapheme_Base +FE17 ; Grapheme_Base +FE18 ; Grapheme_Base +FE19 ; Grapheme_Base FE30 ; Grapheme_Base FE31..FE32 ; Grapheme_Base FE33..FE34 ; Grapheme_Base @@ -4410,8 +4996,7 @@ FF60 ; Grapheme_Base FF61 ; Grapheme_Base FF62 ; Grapheme_Base FF63 ; Grapheme_Base -FF64 ; Grapheme_Base -FF65 ; Grapheme_Base +FF64..FF65 ; Grapheme_Base FF66..FF6F ; Grapheme_Base FF70 ; Grapheme_Base FF71..FF9D ; Grapheme_Base @@ -4441,12 +5026,22 @@ FFFC..FFFD ; Grapheme_Base 10102 ; Grapheme_Base 10107..10133 ; Grapheme_Base 10137..1013F ; Grapheme_Base +10140..10174 ; Grapheme_Base +10175..10178 ; Grapheme_Base +10179..10189 ; Grapheme_Base +1018A ; Grapheme_Base 10300..1031E ; Grapheme_Base 10320..10323 ; Grapheme_Base -10330..10349 ; Grapheme_Base +10330..10340 ; Grapheme_Base +10341 ; Grapheme_Base +10342..10349 ; Grapheme_Base 1034A ; Grapheme_Base 10380..1039D ; Grapheme_Base 1039F ; Grapheme_Base +103A0..103C3 ; Grapheme_Base +103C8..103CF ; Grapheme_Base +103D0 ; Grapheme_Base +103D1..103D5 ; Grapheme_Base 10400..1044F ; Grapheme_Base 10450..1049D ; Grapheme_Base 104A0..104A9 ; Grapheme_Base @@ -4456,17 +5051,31 @@ FFFC..FFFD ; Grapheme_Base 10837..10838 ; Grapheme_Base 1083C ; Grapheme_Base 1083F ; Grapheme_Base +10900..10915 ; Grapheme_Base +10916..10919 ; Grapheme_Base +1091F ; Grapheme_Base +10A00 ; Grapheme_Base +10A10..10A13 ; Grapheme_Base +10A15..10A17 ; Grapheme_Base +10A19..10A33 ; Grapheme_Base +10A40..10A47 ; Grapheme_Base +10A50..10A58 ; Grapheme_Base +12000..1236E ; Grapheme_Base +12400..12462 ; Grapheme_Base +12470..12473 ; Grapheme_Base 1D000..1D0F5 ; Grapheme_Base 1D100..1D126 ; Grapheme_Base 1D12A..1D164 ; Grapheme_Base 1D166 ; Grapheme_Base 1D16A..1D16C ; Grapheme_Base 1D16D ; Grapheme_Base -1D170..1D172 ; Grapheme_Base 1D183..1D184 ; Grapheme_Base 1D18C..1D1A9 ; Grapheme_Base 1D1AE..1D1DD ; Grapheme_Base +1D200..1D241 ; Grapheme_Base +1D245 ; Grapheme_Base 1D300..1D356 ; Grapheme_Base +1D360..1D371 ; Grapheme_Base 1D400..1D454 ; Grapheme_Base 1D456..1D49C ; Grapheme_Base 1D49E..1D49F ; Grapheme_Base @@ -4485,7 +5094,7 @@ FFFC..FFFD ; Grapheme_Base 1D540..1D544 ; Grapheme_Base 1D546 ; Grapheme_Base 1D54A..1D550 ; Grapheme_Base -1D552..1D6A3 ; Grapheme_Base +1D552..1D6A5 ; Grapheme_Base 1D6A8..1D6C0 ; Grapheme_Base 1D6C1 ; Grapheme_Base 1D6C2..1D6DA ; Grapheme_Base @@ -4506,9 +5115,39 @@ FFFC..FFFD ; Grapheme_Base 1D7A9 ; Grapheme_Base 1D7AA..1D7C2 ; Grapheme_Base 1D7C3 ; Grapheme_Base -1D7C4..1D7C9 ; Grapheme_Base +1D7C4..1D7CB ; Grapheme_Base 1D7CE..1D7FF ; Grapheme_Base 20000..2A6D6 ; Grapheme_Base 2F800..2FA1D ; Grapheme_Base -# Total code points: 95424 +# Total code points: 97975 + +# ================================================ + +# Derived Property: Grapheme_Link (deprecated) +# Generated from: Canonical_Combining_Class=Virama +# Use Canonical_Combining_Class=Virama directly instead + +094D ; Grapheme_Link +09CD ; Grapheme_Link +0A4D ; Grapheme_Link +0ACD ; Grapheme_Link +0B4D ; Grapheme_Link +0BCD ; Grapheme_Link +0C4D ; Grapheme_Link +0CCD ; Grapheme_Link +0D4D ; Grapheme_Link +0DCA ; Grapheme_Link +0E3A ; Grapheme_Link +0F84 ; Grapheme_Link +1039 ; Grapheme_Link +1714 ; Grapheme_Link +1734 ; Grapheme_Link +17D2 ; Grapheme_Link +1B44 ; Grapheme_Link +A806 ; Grapheme_Link +10A3F ; Grapheme_Link + +# Total code points: 19 + +# EOF diff --git a/icuSources/data/unidata/DerivedJoiningGroup.txt b/icuSources/data/unidata/DerivedJoiningGroup.txt index b12a7a41..751581c0 100644 --- a/icuSources/data/unidata/DerivedJoiningGroup.txt +++ b/icuSources/data/unidata/DerivedJoiningGroup.txt @@ -1,8 +1,8 @@ -# DerivedJoiningGroup-4.0.1.txt -# Date: 2004-03-02, 02:42:04 GMT [MD] +# DerivedJoiningGroup-5.0.0.txt +# Date: 2006-03-09, 23:13:48 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html @@ -13,13 +13,16 @@ # All code points not explicitly listed for Joining_Group # have the value No_Joining_Group. +# @missing: 0000..10FFFF; No_Joining_Group + # ================================================ 0639..063A ; Ain # Lo [2] ARABIC LETTER AIN..ARABIC LETTER GHAIN 06A0 ; Ain # Lo ARABIC LETTER AIN WITH THREE DOTS ABOVE 06FC ; Ain # Lo ARABIC LETTER GHAIN WITH DOT BELOW +075D..075F ; Ain # Lo [3] ARABIC LETTER AIN WITH TWO DOTS ABOVE..ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE -# Total code points: 4 +# Total code points: 7 # ================================================ @@ -43,8 +46,9 @@ 062A..062B ; Beh # Lo [2] ARABIC LETTER TEH..ARABIC LETTER THEH 066E ; Beh # Lo ARABIC LETTER DOTLESS BEH 0679..0680 ; Beh # Lo [8] ARABIC LETTER TTEH..ARABIC LETTER BEHEH +0750..0756 ; Beh # Lo [7] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER BEH WITH SMALL V -# Total code points: 12 +# Total code points: 19 # ================================================ @@ -58,8 +62,9 @@ 062F..0630 ; Dal # Lo [2] ARABIC LETTER DAL..ARABIC LETTER THAL 0688..0690 ; Dal # Lo [9] ARABIC LETTER DDAL..ARABIC LETTER DAL WITH FOUR DOTS ABOVE 06EE ; Dal # Lo ARABIC LETTER DAL WITH INVERTED V +0759..075A ; Dal # Lo [2] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH..ARABIC LETTER DAL WITH INVERTED SMALL V BELOW -# Total code points: 12 +# Total code points: 14 # ================================================ @@ -79,8 +84,9 @@ 0641 ; Feh # Lo ARABIC LETTER FEH 06A1..06A6 ; Feh # Lo [6] ARABIC LETTER DOTLESS FEH..ARABIC LETTER PEHEH +0760..0761 ; Feh # Lo [2] ARABIC LETTER FEH WITH TWO DOTS BELOW..ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW -# Total code points: 7 +# Total code points: 9 # ================================================ @@ -93,8 +99,9 @@ 06A9 ; Gaf # Lo ARABIC LETTER KEHEH 06AB ; Gaf # Lo ARABIC LETTER KAF WITH RING 06AF..06B4 ; Gaf # Lo [6] ARABIC LETTER GAF..ARABIC LETTER GAF WITH THREE DOTS ABOVE +0762..0764 ; Gaf # Lo [3] ARABIC LETTER KEHEH WITH DOT ABOVE..ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW -# Total code points: 8 +# Total code points: 11 # ================================================ @@ -108,14 +115,15 @@ 062C..062E ; Hah # Lo [3] ARABIC LETTER JEEM..ARABIC LETTER KHAH 0681..0687 ; Hah # Lo [7] ARABIC LETTER HAH WITH HAMZA ABOVE..ARABIC LETTER TCHEHEH 06BF ; Hah # Lo ARABIC LETTER TCHEH WITH DOT ABOVE +0757..0758 ; Hah # Lo [2] ARABIC LETTER HAH WITH TWO DOTS ABOVE..ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW -# Total code points: 11 +# Total code points: 13 # ================================================ -06C2..06C3 ; Hamza_On_Heh_Goal # Lo [2] ARABIC LETTER HEH GOAL WITH HAMZA ABOVE..ARABIC LETTER TEH MARBUTA GOAL +06C3 ; Hamza_On_Heh_Goal # Lo ARABIC LETTER TEH MARBUTA GOAL -# Total code points: 2 +# Total code points: 1 # ================================================ @@ -131,9 +139,9 @@ # ================================================ -06C1 ; Heh_Goal # Lo ARABIC LETTER HEH GOAL +06C1..06C2 ; Heh_Goal # Lo [2] ARABIC LETTER HEH GOAL..ARABIC LETTER HEH GOAL WITH HAMZA ABOVE -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -165,8 +173,9 @@ 0644 ; Lam # Lo ARABIC LETTER LAM 06B5..06B8 ; Lam # Lo [4] ARABIC LETTER LAM WITH SMALL V..ARABIC LETTER LAM WITH THREE DOTS BELOW +076A ; Lam # Lo ARABIC LETTER LAM WITH BAR -# Total code points: 5 +# Total code points: 6 # ================================================ @@ -177,8 +186,9 @@ # ================================================ 0645 ; Meem # Lo ARABIC LETTER MEEM +0765..0766 ; Meem # Lo [2] ARABIC LETTER MEEM WITH DOT ABOVE..ARABIC LETTER MEEM WITH DOT BELOW -# Total code points: 1 +# Total code points: 3 # ================================================ @@ -190,8 +200,9 @@ 0646 ; Noon # Lo ARABIC LETTER NOON 06B9..06BD ; Noon # Lo [5] ARABIC LETTER NOON WITH DOT BELOW..ARABIC LETTER NOON WITH THREE DOTS ABOVE +0767..0769 ; Noon # Lo [3] ARABIC LETTER NOON WITH TWO DOTS BELOW..ARABIC LETTER NOON WITH SMALL V -# Total code points: 6 +# Total code points: 9 # ================================================ @@ -224,8 +235,10 @@ 0631..0632 ; Reh # Lo [2] ARABIC LETTER REH..ARABIC LETTER ZAIN 0691..0699 ; Reh # Lo [9] ARABIC LETTER RREH..ARABIC LETTER REH WITH FOUR DOTS ABOVE 06EF ; Reh # Lo ARABIC LETTER REH WITH INVERTED V +075B ; Reh # Lo ARABIC LETTER REH WITH STROKE +076B..076C ; Reh # Lo [2] ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE..ARABIC LETTER REH WITH HAMZA ABOVE -# Total code points: 12 +# Total code points: 15 # ================================================ @@ -252,8 +265,10 @@ 0633..0634 ; Seen # Lo [2] ARABIC LETTER SEEN..ARABIC LETTER SHEEN 069A..069C ; Seen # Lo [3] ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE..ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE 06FA ; Seen # Lo ARABIC LETTER SHEEN WITH DOT BELOW +075C ; Seen # Lo ARABIC LETTER SEEN WITH FOUR DOTS ABOVE +076D ; Seen # Lo ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE -# Total code points: 6 +# Total code points: 8 # ================================================ @@ -374,3 +389,5 @@ 074F ; Fe # Lo SYRIAC LETTER SOGDIAN FE # Total code points: 1 + +# EOF diff --git a/icuSources/data/unidata/DerivedJoiningType.txt b/icuSources/data/unidata/DerivedJoiningType.txt index 57e560a4..232c4702 100644 --- a/icuSources/data/unidata/DerivedJoiningType.txt +++ b/icuSources/data/unidata/DerivedJoiningType.txt @@ -1,8 +1,8 @@ -# DerivedJoiningType-4.0.1.txt -# Date: 2004-03-02, 02:42:08 GMT [MD] +# DerivedJoiningType-5.0.0.txt +# Date: 2006-03-09, 23:13:52 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html @@ -13,14 +13,17 @@ # All code points not explicitly listed for Joining_Type # have the value Non_Joining (U). +# @missing: 0000..10FFFF; Non_Joining + # ================================================ # Joining_Type=Join_Causing 0640 ; C # Lm ARABIC TATWEEL +07FA ; C # Lm NKO LAJANYALAN 200D ; C # Cf ZERO WIDTH JOINER -# Total code points: 2 +# Total code points: 3 # ================================================ @@ -35,7 +38,7 @@ 066E..066F ; D # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF 0678..0687 ; D # Lo [16] ARABIC LETTER HIGH HAMZA YEH..ARABIC LETTER TCHEHEH 069A..06BF ; D # Lo [38] ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE..ARABIC LETTER TCHEH WITH DOT ABOVE -06C1 ; D # Lo ARABIC LETTER HEH GOAL +06C1..06C2 ; D # Lo [2] ARABIC LETTER HEH GOAL..ARABIC LETTER HEH GOAL WITH HAMZA ABOVE 06CC ; D # Lo ARABIC LETTER FARSI YEH 06CE ; D # Lo ARABIC LETTER YEH WITH SMALL V 06D0..06D1 ; D # Lo [2] ARABIC LETTER E..ARABIC LETTER YEH WITH THREE DOTS BELOW @@ -47,9 +50,12 @@ 0729 ; D # Lo SYRIAC LETTER QAPH 072B ; D # Lo SYRIAC LETTER SHIN 072D..072E ; D # Lo [2] SYRIAC LETTER PERSIAN BHETH..SYRIAC LETTER PERSIAN GHAMAL -074E..074F ; D # Lo [2] SYRIAC LETTER SOGDIAN KHAPH..SYRIAC LETTER SOGDIAN FE +074E..0758 ; D # Lo [11] SYRIAC LETTER SOGDIAN KHAPH..ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW +075C..076A ; D # Lo [15] ARABIC LETTER SEEN WITH FOUR DOTS ABOVE..ARABIC LETTER LAM WITH BAR +076D ; D # Lo ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE +07CA..07EA ; D # Lo [33] NKO LETTER A..NKO LETTER JONA RA -# Total code points: 111 +# Total code points: 170 # ================================================ @@ -64,7 +70,7 @@ 0675..0677 ; R # Lo [3] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER U WITH HAMZA ABOVE 0688..0699 ; R # Lo [18] ARABIC LETTER DDAL..ARABIC LETTER REH WITH FOUR DOTS ABOVE 06C0 ; R # Lo ARABIC LETTER HEH WITH YEH ABOVE -06C2..06CB ; R # Lo [10] ARABIC LETTER HEH GOAL WITH HAMZA ABOVE..ARABIC LETTER VE +06C3..06CB ; R # Lo [9] ARABIC LETTER TEH MARBUTA GOAL..ARABIC LETTER VE 06CD ; R # Lo ARABIC LETTER YEH WITH TAIL 06CF ; R # Lo ARABIC LETTER WAW WITH DOT ABOVE 06D2..06D3 ; R # Lo [2] ARABIC LETTER YEH BARREE..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE @@ -78,27 +84,29 @@ 072C ; R # Lo SYRIAC LETTER TAW 072F ; R # Lo SYRIAC LETTER PERSIAN DHALATH 074D ; R # Lo SYRIAC LETTER SOGDIAN ZHAIN +0759..075B ; R # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH..ARABIC LETTER REH WITH STROKE +076B..076C ; R # Lo [2] ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE..ARABIC LETTER REH WITH HAMZA ABOVE -# Total code points: 65 +# Total code points: 69 # ================================================ # Joining_Type=Transparent 00AD ; T # Cf SOFT HYPHEN -0300..0357 ; T # Mn [88] COMBINING GRAVE ACCENT..COMBINING RIGHT HALF RING ABOVE -035D..036F ; T # Mn [19] COMBINING DOUBLE BREVE..COMBINING LATIN SMALL LETTER X +0300..036F ; T # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X 0483..0486 ; T # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA -0591..05A1 ; T # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05B9 ; T # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM -05BB..05BD ; T # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG +0488..0489 ; T # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0591..05BD ; T # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG 05BF ; T # Mn HEBREW POINT RAFE 05C1..05C2 ; T # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; T # Mn HEBREW MARK UPPER DOT +05C4..05C5 ; T # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; T # Mn HEBREW POINT QAMATS QATAN 0610..0615 ; T # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH -064B..0658 ; T # Mn [14] ARABIC FATHATAN..ARABIC MARK NOON GHUNNA +064B..065E ; T # Mn [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS 0670 ; T # Mn ARABIC LETTER SUPERSCRIPT ALEF 06D6..06DC ; T # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DE ; T # Me ARABIC START OF RUB EL HIZB 06DF..06E4 ; T # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA 06E7..06E8 ; T # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON 06EA..06ED ; T # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM @@ -106,6 +114,7 @@ 0711 ; T # Mn SYRIAC LETTER SUPERSCRIPT ALAPH 0730..074A ; T # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH 07A6..07B0 ; T # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; T # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE 0901..0902 ; T # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA 093C ; T # Mn DEVANAGARI SIGN NUKTA 0941..0948 ; T # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI @@ -146,6 +155,7 @@ 0CBF ; T # Mn KANNADA VOWEL SIGN I 0CC6 ; T # Mn KANNADA VOWEL SIGN E 0CCC..0CCD ; T # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CE2..0CE3 ; T # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0D41..0D43 ; T # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R 0D4D ; T # Mn MALAYALAM SIGN VIRAMA 0DCA ; T # Mn SINHALA SIGN AL-LAKUNA @@ -173,6 +183,7 @@ 1036..1037 ; T # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW 1039 ; T # Mn MYANMAR SIGN VIRAMA 1058..1059 ; T # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +135F ; T # Mn ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; T # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA 1732..1734 ; T # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD 1752..1753 ; T # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U @@ -188,28 +199,50 @@ 1927..1928 ; T # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O 1932 ; T # Mn LIMBU SMALL LETTER ANUSVARA 1939..193B ; T # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; T # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1B00..1B03 ; T # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; T # Mn BALINESE SIGN REREKAN +1B36..1B3A ; T # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; T # Mn BALINESE VOWEL SIGN LA LENGA +1B42 ; T # Mn BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; T # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1DC0..1DCA ; T # Mn [11] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER R BELOW +1DFE..1DFF ; T # Mn [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200B ; T # Cf ZERO WIDTH SPACE 200E..200F ; T # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK 202A..202E ; T # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE 2060..2063 ; T # Cf [4] WORD JOINER..INVISIBLE SEPARATOR 206A..206F ; T # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES 20D0..20DC ; T # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; T # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; T # Mn COMBINING LEFT RIGHT ARROW ABOVE -20E5..20EA ; T # Mn [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY +20E2..20E4 ; T # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20EF ; T # Mn [11] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW 302A..302F ; T # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK 3099..309A ; T # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A806 ; T # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; T # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; T # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E FB1E ; T # Mn HEBREW POINT JUDEO-SPANISH VARIKA FE00..FE0F ; T # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE20..FE23 ; T # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF FEFF ; T # Cf ZERO WIDTH NO-BREAK SPACE FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +10A01..10A03 ; T # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; T # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; T # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; T # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; T # Mn KHAROSHTHI VIRAMA 1D167..1D169 ; T # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D173..1D17A ; T # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE 1D17B..1D182 ; T # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; T # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D1AA..1D1AD ; T # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; T # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME E0001 ; T # Cf LANGUAGE TAG E0020..E007F ; T # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; T # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 923 +# Total code points: 1021 + +# EOF diff --git a/icuSources/data/unidata/DerivedNormalizationProps.txt b/icuSources/data/unidata/DerivedNormalizationProps.txt index d13d4c57..23f2901f 100644 --- a/icuSources/data/unidata/DerivedNormalizationProps.txt +++ b/icuSources/data/unidata/DerivedNormalizationProps.txt @@ -1,8 +1,8 @@ -# DerivedNormalizationProps-4.0.1.txt -# Date: 2004-03-02, 02:42:17 GMT [MD] +# DerivedNormalizationProps-5.0.0.txt +# Date: 2006-06-07, 17:42:44 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html @@ -578,8 +578,9 @@ 1D7A7 ; FC_NFKC; 03C8 1D7A8 ; FC_NFKC; 03C9 1D7BB ; FC_NFKC; 03C3 +1D7CA ; FC_NFKC; 03DD -# Total code points: 564 +# Total code points: 565 # ================================================ @@ -649,6 +650,7 @@ FA22 ; Full_Composition_Exclusion FA25..FA26 ; Full_Composition_Exclusion FA2A..FA2D ; Full_Composition_Exclusion FA30..FA6A ; Full_Composition_Exclusion +FA70..FAD9 ; Full_Composition_Exclusion FB1D ; Full_Composition_Exclusion FB1F ; Full_Composition_Exclusion FB2A..FB36 ; Full_Composition_Exclusion @@ -661,7 +663,7 @@ FB46..FB4E ; Full_Composition_Exclusion 1D1BB..1D1C0 ; Full_Composition_Exclusion 2F800..2FA1D ; Full_Composition_Exclusion -# Total code points: 1009 +# Total code points: 1115 # ================================================ @@ -670,6 +672,8 @@ FB46..FB4E ; Full_Composition_Exclusion # All code points not explicitly listed for NFD_Quick_Check # have the value Yes (Y). +# @missing: 0000..10FFFF; NFD_QC; Yes + # ================================================ # NFD_Quick_Check=No @@ -775,6 +779,16 @@ FB46..FB4E ; Full_Composition_Exclusion 0FAC ; NFD_QC; N 0FB9 ; NFD_QC; N 1026 ; NFD_QC; N +1B06 ; NFD_QC; N +1B08 ; NFD_QC; N +1B0A ; NFD_QC; N +1B0C ; NFD_QC; N +1B0E ; NFD_QC; N +1B12 ; NFD_QC; N +1B3B ; NFD_QC; N +1B3D ; NFD_QC; N +1B40..1B41 ; NFD_QC; N +1B43 ; NFD_QC; N 1E00..1E99 ; NFD_QC; N 1E9B ; NFD_QC; N 1EA0..1EF9 ; NFD_QC; N @@ -887,6 +901,7 @@ FA22 ; NFD_QC; N FA25..FA26 ; NFD_QC; N FA2A..FA2D ; NFD_QC; N FA30..FA6A ; NFD_QC; N +FA70..FAD9 ; NFD_QC; N FB1D ; NFD_QC; N FB1F ; NFD_QC; N FB2A..FB36 ; NFD_QC; N @@ -899,7 +914,7 @@ FB46..FB4E ; NFD_QC; N 1D1BB..1D1C0 ; NFD_QC; N 2F800..2FA1D ; NFD_QC; N -# Total code points: 13098 +# Total code points: 13215 # ================================================ @@ -908,6 +923,8 @@ FB46..FB4E ; NFD_QC; N # All code points not explicitly listed for NFC_Quick_Check # have the value Yes (Y). +# @missing: 0000..10FFFF; NFC_QC; Yes + # ================================================ # NFC_Quick_Check=No @@ -975,6 +992,7 @@ FA22 ; NFC_QC; N FA25..FA26 ; NFC_QC; N FA2A..FA2D ; NFC_QC; N FA30..FA6A ; NFC_QC; N +FA70..FAD9 ; NFC_QC; N FB1D ; NFC_QC; N FB1F ; NFC_QC; N FB2A..FB36 ; NFC_QC; N @@ -987,7 +1005,7 @@ FB46..FB4E ; NFC_QC; N 1D1BB..1D1C0 ; NFC_QC; N 2F800..2FA1D ; NFC_QC; N -# Total code points: 1009 +# Total code points: 1115 # ================================================ @@ -1025,9 +1043,10 @@ FB46..FB4E ; NFC_QC; N 102E ; NFC_QC; M 1161..1175 ; NFC_QC; M 11A8..11C2 ; NFC_QC; M +1B35 ; NFC_QC; M 3099..309A ; NFC_QC; M -# Total code points: 101 +# Total code points: 102 # ================================================ @@ -1036,6 +1055,8 @@ FB46..FB4E ; NFC_QC; N # All code points not explicitly listed for NFKD_Quick_Check # have the value Yes (Y). +# @missing: 0000..10FFFF; NFKD_QC; Yes + # ================================================ # NFKD_Quick_Check=No @@ -1163,11 +1184,24 @@ FB46..FB4E ; NFC_QC; N 0FAC ; NFKD_QC; N 0FB9 ; NFKD_QC; N 1026 ; NFKD_QC; N +10FC ; NFKD_QC; N +1B06 ; NFKD_QC; N +1B08 ; NFKD_QC; N +1B0A ; NFKD_QC; N +1B0C ; NFKD_QC; N +1B0E ; NFKD_QC; N +1B12 ; NFKD_QC; N +1B3B ; NFKD_QC; N +1B3D ; NFKD_QC; N +1B40..1B41 ; NFKD_QC; N +1B43 ; NFKD_QC; N 1D2C..1D2E ; NFKD_QC; N 1D30..1D3A ; NFKD_QC; N 1D3C..1D4D ; NFKD_QC; N 1D4F..1D61 ; NFKD_QC; N 1D62..1D6A ; NFKD_QC; N +1D78 ; NFKD_QC; N +1D9B..1DBF ; NFKD_QC; N 1E00..1E9B ; NFKD_QC; N 1EA0..1EF9 ; NFKD_QC; N 1F00..1F15 ; NFKD_QC; N @@ -1218,6 +1252,7 @@ FB46..FB4E ; NFC_QC; N 208A..208C ; NFKD_QC; N 208D ; NFKD_QC; N 208E ; NFKD_QC; N +2090..2094 ; NFKD_QC; N 20A8 ; NFKD_QC; N 2100..2101 ; NFKD_QC; N 2102 ; NFKD_QC; N @@ -1239,7 +1274,7 @@ FB46..FB4E ; NFC_QC; N 2135..2138 ; NFKD_QC; N 2139 ; NFKD_QC; N 213B ; NFKD_QC; N -213D..213F ; NFKD_QC; N +213C..213F ; NFKD_QC; N 2140 ; NFKD_QC; N 2145..2149 ; NFKD_QC; N 2153..215F ; NFKD_QC; N @@ -1278,6 +1313,7 @@ FB46..FB4E ; NFC_QC; N 2A0C ; NFKD_QC; N 2A74..2A76 ; NFKD_QC; N 2ADC ; NFKD_QC; N +2D6F ; NFKD_QC; N 2E9F ; NFKD_QC; N 2EF3 ; NFKD_QC; N 2F00..2FD5 ; NFKD_QC; N @@ -1340,7 +1376,7 @@ FB46..FB4E ; NFC_QC; N 322A..3243 ; NFKD_QC; N 3250 ; NFKD_QC; N 3251..325F ; NFKD_QC; N -3260..327D ; NFKD_QC; N +3260..327E ; NFKD_QC; N 3280..3289 ; NFKD_QC; N 328A..32B0 ; NFKD_QC; N 32B1..32BF ; NFKD_QC; N @@ -1356,6 +1392,7 @@ FA22 ; NFKD_QC; N FA25..FA26 ; NFKD_QC; N FA2A..FA2D ; NFKD_QC; N FA30..FA6A ; NFKD_QC; N +FA70..FAD9 ; NFKD_QC; N FB00..FB06 ; NFKD_QC; N FB13..FB17 ; NFKD_QC; N FB1D ; NFKD_QC; N @@ -1372,6 +1409,10 @@ FD50..FD8F ; NFKD_QC; N FD92..FDC7 ; NFKD_QC; N FDF0..FDFB ; NFKD_QC; N FDFC ; NFKD_QC; N +FE10..FE16 ; NFKD_QC; N +FE17 ; NFKD_QC; N +FE18 ; NFKD_QC; N +FE19 ; NFKD_QC; N FE30 ; NFKD_QC; N FE31..FE32 ; NFKD_QC; N FE33..FE34 ; NFKD_QC; N @@ -1445,8 +1486,7 @@ FF60 ; NFKD_QC; N FF61 ; NFKD_QC; N FF62 ; NFKD_QC; N FF63 ; NFKD_QC; N -FF64 ; NFKD_QC; N -FF65 ; NFKD_QC; N +FF64..FF65 ; NFKD_QC; N FF66..FF6F ; NFKD_QC; N FF70 ; NFKD_QC; N FF71..FF9D ; NFKD_QC; N @@ -1484,7 +1524,7 @@ FFED..FFEE ; NFKD_QC; N 1D540..1D544 ; NFKD_QC; N 1D546 ; NFKD_QC; N 1D54A..1D550 ; NFKD_QC; N -1D552..1D6A3 ; NFKD_QC; N +1D552..1D6A5 ; NFKD_QC; N 1D6A8..1D6C0 ; NFKD_QC; N 1D6C1 ; NFKD_QC; N 1D6C2..1D6DA ; NFKD_QC; N @@ -1505,11 +1545,11 @@ FFED..FFEE ; NFKD_QC; N 1D7A9 ; NFKD_QC; N 1D7AA..1D7C2 ; NFKD_QC; N 1D7C3 ; NFKD_QC; N -1D7C4..1D7C9 ; NFKD_QC; N +1D7C4..1D7CB ; NFKD_QC; N 1D7CE..1D7FF ; NFKD_QC; N 2F800..2FA1D ; NFKD_QC; N -# Total code points: 16396 +# Total code points: 16574 # ================================================ @@ -1518,6 +1558,8 @@ FFED..FFEE ; NFKD_QC; N # All code points not explicitly listed for NFKC_Quick_Check # have the value Yes (Y). +# @missing: 0000..10FFFF; NFKC_QC; Yes + # ================================================ # NFKC_Quick_Check=No @@ -1582,11 +1624,14 @@ FFED..FFEE ; NFKD_QC; N 0FA7 ; NFKC_QC; N 0FAC ; NFKC_QC; N 0FB9 ; NFKC_QC; N +10FC ; NFKC_QC; N 1D2C..1D2E ; NFKC_QC; N 1D30..1D3A ; NFKC_QC; N 1D3C..1D4D ; NFKC_QC; N 1D4F..1D61 ; NFKC_QC; N 1D62..1D6A ; NFKC_QC; N +1D78 ; NFKC_QC; N +1D9B..1DBF ; NFKC_QC; N 1E9A..1E9B ; NFKC_QC; N 1F71 ; NFKC_QC; N 1F73 ; NFKC_QC; N @@ -1634,6 +1679,7 @@ FFED..FFEE ; NFKD_QC; N 208A..208C ; NFKC_QC; N 208D ; NFKC_QC; N 208E ; NFKC_QC; N +2090..2094 ; NFKC_QC; N 20A8 ; NFKC_QC; N 2100..2101 ; NFKC_QC; N 2102 ; NFKC_QC; N @@ -1655,7 +1701,7 @@ FFED..FFEE ; NFKD_QC; N 2135..2138 ; NFKC_QC; N 2139 ; NFKC_QC; N 213B ; NFKC_QC; N -213D..213F ; NFKC_QC; N +213C..213F ; NFKC_QC; N 2140 ; NFKC_QC; N 2145..2149 ; NFKC_QC; N 2153..215F ; NFKC_QC; N @@ -1670,6 +1716,7 @@ FFED..FFEE ; NFKD_QC; N 2A0C ; NFKC_QC; N 2A74..2A76 ; NFKC_QC; N 2ADC ; NFKC_QC; N +2D6F ; NFKC_QC; N 2E9F ; NFKC_QC; N 2EF3 ; NFKC_QC; N 2F00..2FD5 ; NFKC_QC; N @@ -1687,7 +1734,7 @@ FFED..FFEE ; NFKD_QC; N 322A..3243 ; NFKC_QC; N 3250 ; NFKC_QC; N 3251..325F ; NFKC_QC; N -3260..327D ; NFKC_QC; N +3260..327E ; NFKC_QC; N 3280..3289 ; NFKC_QC; N 328A..32B0 ; NFKC_QC; N 32B1..32BF ; NFKC_QC; N @@ -1702,6 +1749,7 @@ FA22 ; NFKC_QC; N FA25..FA26 ; NFKC_QC; N FA2A..FA2D ; NFKC_QC; N FA30..FA6A ; NFKC_QC; N +FA70..FAD9 ; NFKC_QC; N FB00..FB06 ; NFKC_QC; N FB13..FB17 ; NFKC_QC; N FB1D ; NFKC_QC; N @@ -1718,6 +1766,10 @@ FD50..FD8F ; NFKC_QC; N FD92..FDC7 ; NFKC_QC; N FDF0..FDFB ; NFKC_QC; N FDFC ; NFKC_QC; N +FE10..FE16 ; NFKC_QC; N +FE17 ; NFKC_QC; N +FE18 ; NFKC_QC; N +FE19 ; NFKC_QC; N FE30 ; NFKC_QC; N FE31..FE32 ; NFKC_QC; N FE33..FE34 ; NFKC_QC; N @@ -1791,8 +1843,7 @@ FF60 ; NFKC_QC; N FF61 ; NFKC_QC; N FF62 ; NFKC_QC; N FF63 ; NFKC_QC; N -FF64 ; NFKC_QC; N -FF65 ; NFKC_QC; N +FF64..FF65 ; NFKC_QC; N FF66..FF6F ; NFKC_QC; N FF70 ; NFKC_QC; N FF71..FF9D ; NFKC_QC; N @@ -1830,7 +1881,7 @@ FFED..FFEE ; NFKC_QC; N 1D540..1D544 ; NFKC_QC; N 1D546 ; NFKC_QC; N 1D54A..1D550 ; NFKC_QC; N -1D552..1D6A3 ; NFKC_QC; N +1D552..1D6A5 ; NFKC_QC; N 1D6A8..1D6C0 ; NFKC_QC; N 1D6C1 ; NFKC_QC; N 1D6C2..1D6DA ; NFKC_QC; N @@ -1851,11 +1902,11 @@ FFED..FFEE ; NFKC_QC; N 1D7A9 ; NFKC_QC; N 1D7AA..1D7C2 ; NFKC_QC; N 1D7C3 ; NFKC_QC; N -1D7C4..1D7C9 ; NFKC_QC; N +1D7C4..1D7CB ; NFKC_QC; N 1D7CE..1D7FF ; NFKC_QC; N 2F800..2FA1D ; NFKC_QC; N -# Total code points: 4319 +# Total code points: 4486 # ================================================ @@ -1893,9 +1944,10 @@ FFED..FFEE ; NFKC_QC; N 102E ; NFKC_QC; M 1161..1175 ; NFKC_QC; M 11A8..11C2 ; NFKC_QC; M +1B35 ; NFKC_QC; M 3099..309A ; NFKC_QC; M -# Total code points: 101 +# Total code points: 102 # ================================================ @@ -2002,6 +2054,16 @@ FFED..FFEE ; NFKC_QC; N 0FAC ; Expands_On_NFD 0FB9 ; Expands_On_NFD 1026 ; Expands_On_NFD +1B06 ; Expands_On_NFD +1B08 ; Expands_On_NFD +1B0A ; Expands_On_NFD +1B0C ; Expands_On_NFD +1B0E ; Expands_On_NFD +1B12 ; Expands_On_NFD +1B3B ; Expands_On_NFD +1B3D ; Expands_On_NFD +1B40..1B41 ; Expands_On_NFD +1B43 ; Expands_On_NFD 1E00..1E99 ; Expands_On_NFD 1E9B ; Expands_On_NFD 1EA0..1EF9 ; Expands_On_NFD @@ -2110,7 +2172,7 @@ FB46..FB4E ; Expands_On_NFD 1D15E..1D164 ; Expands_On_NFD 1D1BB..1D1C0 ; Expands_On_NFD -# Total code points: 12192 +# Total code points: 12203 # ================================================ @@ -2274,6 +2336,16 @@ FB46..FB4E ; Expands_On_NFC 0FAC ; Expands_On_NFKD 0FB9 ; Expands_On_NFKD 1026 ; Expands_On_NFKD +1B06 ; Expands_On_NFKD +1B08 ; Expands_On_NFKD +1B0A ; Expands_On_NFKD +1B0C ; Expands_On_NFKD +1B0E ; Expands_On_NFKD +1B12 ; Expands_On_NFKD +1B3B ; Expands_On_NFKD +1B3D ; Expands_On_NFKD +1B40..1B41 ; Expands_On_NFKD +1B43 ; Expands_On_NFKD 1E00..1E9B ; Expands_On_NFKD 1EA0..1EF9 ; Expands_On_NFKD 1F00..1F15 ; Expands_On_NFKD @@ -2408,7 +2480,7 @@ FB46..FB4E ; Expands_On_NFC 322A..3243 ; Expands_On_NFKD 3250 ; Expands_On_NFKD 3251..325F ; Expands_On_NFKD -326E..327D ; Expands_On_NFKD +326E..327E ; Expands_On_NFKD 32B1..32BF ; Expands_On_NFKD 32C0..32CF ; Expands_On_NFKD 3300..33FF ; Expands_On_NFKD @@ -2432,6 +2504,7 @@ FD50..FD8F ; Expands_On_NFKD FD92..FDC7 ; Expands_On_NFKD FDF0..FDFB ; Expands_On_NFKD FDFC ; Expands_On_NFKD +FE19 ; Expands_On_NFKD FE30 ; Expands_On_NFKD FE49..FE4C ; Expands_On_NFKD FE70..FE72 ; Expands_On_NFKD @@ -2443,7 +2516,7 @@ FFE3 ; Expands_On_NFKD 1D15E..1D164 ; Expands_On_NFKD 1D1BB..1D1C0 ; Expands_On_NFKD -# Total code points: 13297 +# Total code points: 13310 # ================================================ @@ -2561,6 +2634,7 @@ FD50..FD8F ; Expands_On_NFKC FD92..FDC7 ; Expands_On_NFKC FDF0..FDFB ; Expands_On_NFKC FDFC ; Expands_On_NFKC +FE19 ; Expands_On_NFKC FE30 ; Expands_On_NFKC FE49..FE4C ; Expands_On_NFKC FE70..FE72 ; Expands_On_NFKC @@ -2571,4 +2645,6 @@ FFE3 ; Expands_On_NFKC 1D15E..1D164 ; Expands_On_NFKC 1D1BB..1D1C0 ; Expands_On_NFKC -# Total code points: 1170 +# Total code points: 1171 + +# EOF diff --git a/icuSources/data/unidata/DerivedNumericValues.txt b/icuSources/data/unidata/DerivedNumericValues.txt index 125269bf..0be53a41 100644 --- a/icuSources/data/unidata/DerivedNumericValues.txt +++ b/icuSources/data/unidata/DerivedNumericValues.txt @@ -1,8 +1,8 @@ -# DerivedNumericValues-4.0.1.txt -# Date: 2004-03-11, 18:44:27 GMT [MD] +# DerivedNumericValues-5.0.0.txt +# Date: 2006-02-27, 23:41:38 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html @@ -25,11 +25,13 @@ 0030 ; 0.0 # Nd DIGIT ZERO 0660 ; 0.0 # Nd ARABIC-INDIC DIGIT ZERO 06F0 ; 0.0 # Nd EXTENDED ARABIC-INDIC DIGIT ZERO +07C0 ; 0.0 # Nd NKO DIGIT ZERO 0966 ; 0.0 # Nd DEVANAGARI DIGIT ZERO 09E6 ; 0.0 # Nd BENGALI DIGIT ZERO 0A66 ; 0.0 # Nd GURMUKHI DIGIT ZERO 0AE6 ; 0.0 # Nd GUJARATI DIGIT ZERO 0B66 ; 0.0 # Nd ORIYA DIGIT ZERO +0BE6 ; 0.0 # Nd TAMIL DIGIT ZERO 0C66 ; 0.0 # Nd TELUGU DIGIT ZERO 0CE6 ; 0.0 # Nd KANNADA DIGIT ZERO 0D66 ; 0.0 # Nd MALAYALAM DIGIT ZERO @@ -41,13 +43,17 @@ 17F0 ; 0.0 # No KHMER SYMBOL LEK ATTAK SON 1810 ; 0.0 # Nd MONGOLIAN DIGIT ZERO 1946 ; 0.0 # Nd LIMBU DIGIT ZERO +19D0 ; 0.0 # Nd NEW TAI LUE DIGIT ZERO +1B50 ; 0.0 # Nd BALINESE DIGIT ZERO 2070 ; 0.0 # No SUPERSCRIPT ZERO 2080 ; 0.0 # No SUBSCRIPT ZERO 24EA ; 0.0 # No CIRCLED DIGIT ZERO 24FF ; 0.0 # No NEGATIVE CIRCLED DIGIT ZERO 3007 ; 0.0 # Nl IDEOGRAPHIC NUMBER ZERO 96F6 ; 0.0 # Lo CJK UNIFIED IDEOGRAPH-96F6 +F8A1 ; 0.0 # No Apple corporate digit zero full stop FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO +1018A ; 0.0 # No GREEK ZERO SIGN 104A0 ; 0.0 # Nd OSMANYA DIGIT ZERO 1D7CE ; 0.0 # Nd MATHEMATICAL BOLD DIGIT ZERO 1D7D8 ; 0.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO @@ -55,19 +61,21 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO 1D7EC ; 0.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO 1D7F6 ; 0.0 # Nd MATHEMATICAL MONOSPACE DIGIT ZERO -# Total code points: 32 +# Total code points: 38 # ================================================ 215B ; 0.125 # No VULGAR FRACTION ONE EIGHTH +1245F ; 0.125 # Nl CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH -# Total code points: 1 +# Total code points: 2 # ================================================ 2159 ; 0.16666667 # No VULGAR FRACTION ONE SIXTH +12461 ; 0.16666667 # Nl CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -78,14 +86,19 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO # ================================================ 00BC ; 0.25 # No VULGAR FRACTION ONE QUARTER +10140 ; 0.25 # Nl GREEK ACROPHONIC ATTIC ONE QUARTER +12460 ; 0.25 # Nl CUNEIFORM NUMERIC SIGN ONE QUARTER ASH +12462 ; 0.25 # Nl CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER -# Total code points: 1 +# Total code points: 4 # ================================================ 2153 ; 0.33333333 # No VULGAR FRACTION ONE THIRD +1245A ; 0.33333333 # Nl CUNEIFORM NUMERIC SIGN ONE THIRD DISH +1245D ; 0.33333333 # Nl CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A -# Total code points: 1 +# Total code points: 3 # ================================================ @@ -103,8 +116,11 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO 00BD ; 0.5 # No VULGAR FRACTION ONE HALF 0F2A ; 0.5 # No TIBETAN DIGIT HALF ONE +2CFD ; 0.5 # No COPTIC FRACTION ONE HALF +10141 ; 0.5 # Nl GREEK ACROPHONIC ATTIC ONE HALF +10175..10176 ; 0.5 # No [2] GREEK ONE HALF SIGN..GREEK ONE HALF SIGN ALTERNATE FORM -# Total code points: 2 +# Total code points: 6 # ================================================ @@ -121,14 +137,18 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO # ================================================ 2154 ; 0.66666667 # No VULGAR FRACTION TWO THIRDS +10177 ; 0.66666667 # No GREEK TWO THIRDS SIGN +1245B ; 0.66666667 # Nl CUNEIFORM NUMERIC SIGN TWO THIRDS DISH +1245E ; 0.66666667 # Nl CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A -# Total code points: 1 +# Total code points: 4 # ================================================ 00BE ; 0.75 # No VULGAR FRACTION THREE QUARTERS +10178 ; 0.75 # No GREEK THREE QUARTERS SIGN -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -139,8 +159,9 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO # ================================================ 215A ; 0.83333333 # No VULGAR FRACTION FIVE SIXTHS +1245C ; 0.83333333 # Nl CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -154,6 +175,7 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO 00B9 ; 1.0 # No SUPERSCRIPT ONE 0661 ; 1.0 # Nd ARABIC-INDIC DIGIT ONE 06F1 ; 1.0 # Nd EXTENDED ARABIC-INDIC DIGIT ONE +07C1 ; 1.0 # Nd NKO DIGIT ONE 0967 ; 1.0 # Nd DEVANAGARI DIGIT ONE 09E7 ; 1.0 # Nd BENGALI DIGIT ONE 09F4 ; 1.0 # No BENGALI CURRENCY NUMERATOR ONE @@ -168,11 +190,13 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO 0ED1 ; 1.0 # Nd LAO DIGIT ONE 0F21 ; 1.0 # Nd TIBETAN DIGIT ONE 1041 ; 1.0 # Nd MYANMAR DIGIT ONE -1369 ; 1.0 # Nd ETHIOPIC DIGIT ONE +1369 ; 1.0 # No ETHIOPIC DIGIT ONE 17E1 ; 1.0 # Nd KHMER DIGIT ONE 17F1 ; 1.0 # No KHMER SYMBOL LEK ATTAK MUOY 1811 ; 1.0 # Nd MONGOLIAN DIGIT ONE 1947 ; 1.0 # Nd LIMBU DIGIT ONE +19D1 ; 1.0 # Nd NEW TAI LUE DIGIT ONE +1B51 ; 1.0 # Nd BALINESE DIGIT ONE 2081 ; 1.0 # No SUBSCRIPT ONE 215F ; 1.0 # No FRACTION NUMERATOR ONE 2160 ; 1.0 # Nl ROMAN NUMERAL ONE @@ -191,18 +215,32 @@ FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO 4E00 ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-4E00 58F1 ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-58F1 58F9 ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-58F9 +5E7A ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-5E7A 5F0C ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-5F0C FF11 ; 1.0 # Nd FULLWIDTH DIGIT ONE 10107 ; 1.0 # No AEGEAN NUMBER ONE +10142 ; 1.0 # Nl GREEK ACROPHONIC ATTIC ONE DRACHMA +10158..1015A ; 1.0 # Nl [3] GREEK ACROPHONIC HERAEUM ONE PLETHRON..GREEK ACROPHONIC HERMIONIAN ONE 10320 ; 1.0 # No OLD ITALIC NUMERAL ONE +103D1 ; 1.0 # Nl OLD PERSIAN NUMBER ONE 104A1 ; 1.0 # Nd OSMANYA DIGIT ONE +10916 ; 1.0 # No PHOENICIAN NUMBER ONE +10A40 ; 1.0 # No KHAROSHTHI DIGIT ONE +12415 ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE GESH2 +1241E ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE GESHU +1242C ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE SHARU +12434 ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE BURU +1244F ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE BAN2 +12458 ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE ESHE3 +1D360 ; 1.0 # No COUNTING ROD UNIT DIGIT ONE 1D7CF ; 1.0 # Nd MATHEMATICAL BOLD DIGIT ONE 1D7D9 ; 1.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ONE 1D7E3 ; 1.0 # Nd MATHEMATICAL SANS-SERIF DIGIT ONE 1D7ED ; 1.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ONE 1D7F7 ; 1.0 # Nd MATHEMATICAL MONOSPACE DIGIT ONE +2092A ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-2092A -# Total code points: 51 +# Total code points: 70 # ================================================ @@ -216,6 +254,7 @@ FF11 ; 1.0 # Nd FULLWIDTH DIGIT ONE 00B2 ; 2.0 # No SUPERSCRIPT TWO 0662 ; 2.0 # Nd ARABIC-INDIC DIGIT TWO 06F2 ; 2.0 # Nd EXTENDED ARABIC-INDIC DIGIT TWO +07C2 ; 2.0 # Nd NKO DIGIT TWO 0968 ; 2.0 # Nd DEVANAGARI DIGIT TWO 09E8 ; 2.0 # Nd BENGALI DIGIT TWO 09F5 ; 2.0 # No BENGALI CURRENCY NUMERATOR TWO @@ -230,11 +269,13 @@ FF11 ; 1.0 # Nd FULLWIDTH DIGIT ONE 0ED2 ; 2.0 # Nd LAO DIGIT TWO 0F22 ; 2.0 # Nd TIBETAN DIGIT TWO 1042 ; 2.0 # Nd MYANMAR DIGIT TWO -136A ; 2.0 # Nd ETHIOPIC DIGIT TWO +136A ; 2.0 # No ETHIOPIC DIGIT TWO 17E2 ; 2.0 # Nd KHMER DIGIT TWO 17F2 ; 2.0 # No KHMER SYMBOL LEK ATTAK PII 1812 ; 2.0 # Nd MONGOLIAN DIGIT TWO 1948 ; 2.0 # Nd LIMBU DIGIT TWO +19D2 ; 2.0 # Nd NEW TAI LUE DIGIT TWO +1B52 ; 2.0 # Nd BALINESE DIGIT TWO 2082 ; 2.0 # No SUBSCRIPT TWO 2161 ; 2.0 # Nl ROMAN NUMERAL TWO 2171 ; 2.0 # Nl SMALL ROMAN NUMERAL TWO @@ -249,22 +290,38 @@ FF11 ; 1.0 # Nd FULLWIDTH DIGIT ONE 3193 ; 2.0 # No IDEOGRAPHIC ANNOTATION TWO MARK 3221 ; 2.0 # No PARENTHESIZED IDEOGRAPH TWO 3281 ; 2.0 # No CIRCLED IDEOGRAPH TWO +3483 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-3483 4E8C ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-4E8C 5169 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-5169 5F0D ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-5F0D 5F10 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-5F10 8CAE ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-8CAE +8CB3 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-8CB3 8D30 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-8D30 FF12 ; 2.0 # Nd FULLWIDTH DIGIT TWO 10108 ; 2.0 # No AEGEAN NUMBER TWO +1015B..1015E ; 2.0 # Nl [4] GREEK ACROPHONIC EPIDAUREAN TWO..GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS +103D2 ; 2.0 # Nl OLD PERSIAN NUMBER TWO 104A2 ; 2.0 # Nd OSMANYA DIGIT TWO +10A41 ; 2.0 # No KHAROSHTHI DIGIT TWO +12400 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO ASH +12416 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO GESH2 +1241F ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO GESHU +12423 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO SHAR2 +1242D ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO SHARU +12435 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO BURU +1244A ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO ASH TENU +12450 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO BAN2 +12459 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO ESHE3 +1D361 ; 2.0 # No COUNTING ROD UNIT DIGIT TWO 1D7D0 ; 2.0 # Nd MATHEMATICAL BOLD DIGIT TWO 1D7DA ; 2.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT TWO 1D7E4 ; 2.0 # Nd MATHEMATICAL SANS-SERIF DIGIT TWO 1D7EE ; 2.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT TWO 1D7F8 ; 2.0 # Nd MATHEMATICAL MONOSPACE DIGIT TWO +22390 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-22390 -# Total code points: 51 +# Total code points: 73 # ================================================ @@ -278,6 +335,7 @@ FF12 ; 2.0 # Nd FULLWIDTH DIGIT TWO 00B3 ; 3.0 # No SUPERSCRIPT THREE 0663 ; 3.0 # Nd ARABIC-INDIC DIGIT THREE 06F3 ; 3.0 # Nd EXTENDED ARABIC-INDIC DIGIT THREE +07C3 ; 3.0 # Nd NKO DIGIT THREE 0969 ; 3.0 # Nd DEVANAGARI DIGIT THREE 09E9 ; 3.0 # Nd BENGALI DIGIT THREE 09F6 ; 3.0 # No BENGALI CURRENCY NUMERATOR THREE @@ -292,11 +350,13 @@ FF12 ; 2.0 # Nd FULLWIDTH DIGIT TWO 0ED3 ; 3.0 # Nd LAO DIGIT THREE 0F23 ; 3.0 # Nd TIBETAN DIGIT THREE 1043 ; 3.0 # Nd MYANMAR DIGIT THREE -136B ; 3.0 # Nd ETHIOPIC DIGIT THREE +136B ; 3.0 # No ETHIOPIC DIGIT THREE 17E3 ; 3.0 # Nd KHMER DIGIT THREE 17F3 ; 3.0 # No KHMER SYMBOL LEK ATTAK BEI 1813 ; 3.0 # Nd MONGOLIAN DIGIT THREE 1949 ; 3.0 # Nd LIMBU DIGIT THREE +19D3 ; 3.0 # Nd NEW TAI LUE DIGIT THREE +1B53 ; 3.0 # Nd BALINESE DIGIT THREE 2083 ; 3.0 # No SUBSCRIPT THREE 2162 ; 3.0 # Nl ROMAN NUMERAL THREE 2172 ; 3.0 # Nl SMALL ROMAN NUMERAL THREE @@ -312,18 +372,35 @@ FF12 ; 2.0 # Nd FULLWIDTH DIGIT TWO 3222 ; 3.0 # No PARENTHESIZED IDEOGRAPH THREE 3282 ; 3.0 # No CIRCLED IDEOGRAPH THREE 4E09 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-4E09 -53C1..53C3 ; 3.0 # Lo [3] CJK UNIFIED IDEOGRAPH-53C1..CJK UNIFIED IDEOGRAPH-53C3 +4EE8 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-4EE8 +53C1..53C4 ; 3.0 # Lo [4] CJK UNIFIED IDEOGRAPH-53C1..CJK UNIFIED IDEOGRAPH-53C4 5F0E ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-5F0E FF13 ; 3.0 # Nd FULLWIDTH DIGIT THREE 10109 ; 3.0 # No AEGEAN NUMBER THREE 104A3 ; 3.0 # Nd OSMANYA DIGIT THREE +10A42 ; 3.0 # No KHAROSHTHI DIGIT THREE +12401 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE ASH +12408 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE DISH +12417 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE GESH2 +12420 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE GESHU +12424..12425 ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE SHAR2..CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM +1242E..1242F ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE SHARU..CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM +12436..12437 ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE BURU..CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM +1243A..1243B ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16..CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21 +1244B ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE ASH TENU +12451 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE BAN2 +1D362 ; 3.0 # No COUNTING ROD UNIT DIGIT THREE 1D7D1 ; 3.0 # Nd MATHEMATICAL BOLD DIGIT THREE 1D7DB ; 3.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT THREE 1D7E5 ; 3.0 # Nd MATHEMATICAL SANS-SERIF DIGIT THREE 1D7EF ; 3.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT THREE 1D7F9 ; 3.0 # Nd MATHEMATICAL MONOSPACE DIGIT THREE +20AFD ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-20AFD +20B19 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-20B19 +22998 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-22998 +23B1B ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-23B1B -# Total code points: 50 +# Total code points: 75 # ================================================ @@ -336,6 +413,7 @@ FF13 ; 3.0 # Nd FULLWIDTH DIGIT THREE 0034 ; 4.0 # Nd DIGIT FOUR 0664 ; 4.0 # Nd ARABIC-INDIC DIGIT FOUR 06F4 ; 4.0 # Nd EXTENDED ARABIC-INDIC DIGIT FOUR +07C4 ; 4.0 # Nd NKO DIGIT FOUR 096A ; 4.0 # Nd DEVANAGARI DIGIT FOUR 09EA ; 4.0 # Nd BENGALI DIGIT FOUR 09F7 ; 4.0 # No BENGALI CURRENCY NUMERATOR FOUR @@ -350,11 +428,13 @@ FF13 ; 3.0 # Nd FULLWIDTH DIGIT THREE 0ED4 ; 4.0 # Nd LAO DIGIT FOUR 0F24 ; 4.0 # Nd TIBETAN DIGIT FOUR 1044 ; 4.0 # Nd MYANMAR DIGIT FOUR -136C ; 4.0 # Nd ETHIOPIC DIGIT FOUR +136C ; 4.0 # No ETHIOPIC DIGIT FOUR 17E4 ; 4.0 # Nd KHMER DIGIT FOUR 17F4 ; 4.0 # No KHMER SYMBOL LEK ATTAK BUON 1814 ; 4.0 # Nd MONGOLIAN DIGIT FOUR 194A ; 4.0 # Nd LIMBU DIGIT FOUR +19D4 ; 4.0 # Nd NEW TAI LUE DIGIT FOUR +1B54 ; 4.0 # Nd BALINESE DIGIT FOUR 2074 ; 4.0 # No SUPERSCRIPT FOUR 2084 ; 4.0 # No SUBSCRIPT FOUR 2163 ; 4.0 # Nl ROMAN NUMERAL FOUR @@ -370,18 +450,35 @@ FF13 ; 3.0 # Nd FULLWIDTH DIGIT THREE 3195 ; 4.0 # No IDEOGRAPHIC ANNOTATION FOUR MARK 3223 ; 4.0 # No PARENTHESIZED IDEOGRAPH FOUR 3283 ; 4.0 # No CIRCLED IDEOGRAPH FOUR +4E96 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-4E96 56DB ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-56DB 8086 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-8086 FF14 ; 4.0 # Nd FULLWIDTH DIGIT FOUR 1010A ; 4.0 # No AEGEAN NUMBER FOUR 104A4 ; 4.0 # Nd OSMANYA DIGIT FOUR +10A43 ; 4.0 # No KHAROSHTHI DIGIT FOUR +12402 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR ASH +12409 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR DISH +1240F ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR U +12418 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR GESH2 +12421 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR GESHU +12426 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR SHAR2 +12430 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR SHARU +12438 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR BURU +1243C..1243F ; 4.0 # Nl [4] CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU..CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B +1244C ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR ASH TENU +12452..12453 ; 4.0 # Nl [2] CUNEIFORM NUMERIC SIGN FOUR BAN2..CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM +1D363 ; 4.0 # No COUNTING ROD UNIT DIGIT FOUR 1D7D2 ; 4.0 # Nd MATHEMATICAL BOLD DIGIT FOUR 1D7DC ; 4.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR 1D7E6 ; 4.0 # Nd MATHEMATICAL SANS-SERIF DIGIT FOUR 1D7F0 ; 4.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR 1D7FA ; 4.0 # Nd MATHEMATICAL MONOSPACE DIGIT FOUR +20064 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-20064 +200E2 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-200E2 +2626D ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-2626D -# Total code points: 47 +# Total code points: 71 # ================================================ @@ -394,6 +491,7 @@ FF14 ; 4.0 # Nd FULLWIDTH DIGIT FOUR 0035 ; 5.0 # Nd DIGIT FIVE 0665 ; 5.0 # Nd ARABIC-INDIC DIGIT FIVE 06F5 ; 5.0 # Nd EXTENDED ARABIC-INDIC DIGIT FIVE +07C5 ; 5.0 # Nd NKO DIGIT FIVE 096B ; 5.0 # Nd DEVANAGARI DIGIT FIVE 09EB ; 5.0 # Nd BENGALI DIGIT FIVE 0A6B ; 5.0 # Nd GURMUKHI DIGIT FIVE @@ -407,11 +505,13 @@ FF14 ; 4.0 # Nd FULLWIDTH DIGIT FOUR 0ED5 ; 5.0 # Nd LAO DIGIT FIVE 0F25 ; 5.0 # Nd TIBETAN DIGIT FIVE 1045 ; 5.0 # Nd MYANMAR DIGIT FIVE -136D ; 5.0 # Nd ETHIOPIC DIGIT FIVE +136D ; 5.0 # No ETHIOPIC DIGIT FIVE 17E5 ; 5.0 # Nd KHMER DIGIT FIVE 17F5 ; 5.0 # No KHMER SYMBOL LEK ATTAK PRAM 1815 ; 5.0 # Nd MONGOLIAN DIGIT FIVE 194B ; 5.0 # Nd LIMBU DIGIT FIVE +19D5 ; 5.0 # Nd NEW TAI LUE DIGIT FIVE +1B55 ; 5.0 # Nd BALINESE DIGIT FIVE 2075 ; 5.0 # No SUPERSCRIPT FIVE 2085 ; 5.0 # No SUBSCRIPT FIVE 2164 ; 5.0 # Nl ROMAN NUMERAL FIVE @@ -426,19 +526,38 @@ FF14 ; 4.0 # Nd FULLWIDTH DIGIT FOUR 3025 ; 5.0 # Nl HANGZHOU NUMERAL FIVE 3224 ; 5.0 # No PARENTHESIZED IDEOGRAPH FIVE 3284 ; 5.0 # No CIRCLED IDEOGRAPH FIVE +3405 ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-3405 +382A ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-382A 4E94 ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-4E94 4F0D ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-4F0D FF15 ; 5.0 # Nd FULLWIDTH DIGIT FIVE 1010B ; 5.0 # No AEGEAN NUMBER FIVE +10143 ; 5.0 # Nl GREEK ACROPHONIC ATTIC FIVE +10148 ; 5.0 # Nl GREEK ACROPHONIC ATTIC FIVE TALENTS +1014F ; 5.0 # Nl GREEK ACROPHONIC ATTIC FIVE STATERS +1015F ; 5.0 # Nl GREEK ACROPHONIC TROEZENIAN FIVE +10173 ; 5.0 # Nl GREEK ACROPHONIC DELPHIC FIVE MNAS 10321 ; 5.0 # No OLD ITALIC NUMERAL FIVE 104A5 ; 5.0 # Nd OSMANYA DIGIT FIVE +12403 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE ASH +1240A ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE DISH +12410 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE U +12419 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE GESH2 +12422 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE GESHU +12427 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE SHAR2 +12431 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE SHARU +12439 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE BURU +1244D ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE ASH TENU +12454..12455 ; 5.0 # Nl [2] CUNEIFORM NUMERIC SIGN FIVE BAN2..CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM +1D364 ; 5.0 # No COUNTING ROD UNIT DIGIT FIVE 1D7D3 ; 5.0 # Nd MATHEMATICAL BOLD DIGIT FIVE 1D7DD ; 5.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE 1D7E7 ; 5.0 # Nd MATHEMATICAL SANS-SERIF DIGIT FIVE 1D7F1 ; 5.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE 1D7FB ; 5.0 # Nd MATHEMATICAL MONOSPACE DIGIT FIVE +20121 ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-20121 -# Total code points: 46 +# Total code points: 69 # ================================================ @@ -451,6 +570,7 @@ FF15 ; 5.0 # Nd FULLWIDTH DIGIT FIVE 0036 ; 6.0 # Nd DIGIT SIX 0666 ; 6.0 # Nd ARABIC-INDIC DIGIT SIX 06F6 ; 6.0 # Nd EXTENDED ARABIC-INDIC DIGIT SIX +07C6 ; 6.0 # Nd NKO DIGIT SIX 096C ; 6.0 # Nd DEVANAGARI DIGIT SIX 09EC ; 6.0 # Nd BENGALI DIGIT SIX 0A6C ; 6.0 # Nd GURMUKHI DIGIT SIX @@ -464,11 +584,13 @@ FF15 ; 5.0 # Nd FULLWIDTH DIGIT FIVE 0ED6 ; 6.0 # Nd LAO DIGIT SIX 0F26 ; 6.0 # Nd TIBETAN DIGIT SIX 1046 ; 6.0 # Nd MYANMAR DIGIT SIX -136E ; 6.0 # Nd ETHIOPIC DIGIT SIX +136E ; 6.0 # No ETHIOPIC DIGIT SIX 17E6 ; 6.0 # Nd KHMER DIGIT SIX 17F6 ; 6.0 # No KHMER SYMBOL LEK ATTAK PRAM-MUOY 1816 ; 6.0 # Nd MONGOLIAN DIGIT SIX 194C ; 6.0 # Nd LIMBU DIGIT SIX +19D6 ; 6.0 # Nd NEW TAI LUE DIGIT SIX +1B56 ; 6.0 # Nd BALINESE DIGIT SIX 2076 ; 6.0 # No SUPERSCRIPT SIX 2086 ; 6.0 # No SUBSCRIPT SIX 2165 ; 6.0 # Nl ROMAN NUMERAL SIX @@ -489,13 +611,22 @@ FF15 ; 5.0 # Nd FULLWIDTH DIGIT FIVE FF16 ; 6.0 # Nd FULLWIDTH DIGIT SIX 1010C ; 6.0 # No AEGEAN NUMBER SIX 104A6 ; 6.0 # Nd OSMANYA DIGIT SIX +12404 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX ASH +1240B ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX DISH +12411 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX U +1241A ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX GESH2 +12428 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX SHAR2 +12440 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9 +1244E ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX ASH TENU +1D365 ; 6.0 # No COUNTING ROD UNIT DIGIT SIX 1D7D4 ; 6.0 # Nd MATHEMATICAL BOLD DIGIT SIX 1D7DE ; 6.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SIX 1D7E8 ; 6.0 # Nd MATHEMATICAL SANS-SERIF DIGIT SIX 1D7F2 ; 6.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SIX 1D7FC ; 6.0 # Nd MATHEMATICAL MONOSPACE DIGIT SIX +20AEA ; 6.0 # Lo CJK UNIFIED IDEOGRAPH-20AEA -# Total code points: 46 +# Total code points: 58 # ================================================ @@ -508,6 +639,7 @@ FF16 ; 6.0 # Nd FULLWIDTH DIGIT SIX 0037 ; 7.0 # Nd DIGIT SEVEN 0667 ; 7.0 # Nd ARABIC-INDIC DIGIT SEVEN 06F7 ; 7.0 # Nd EXTENDED ARABIC-INDIC DIGIT SEVEN +07C7 ; 7.0 # Nd NKO DIGIT SEVEN 096D ; 7.0 # Nd DEVANAGARI DIGIT SEVEN 09ED ; 7.0 # Nd BENGALI DIGIT SEVEN 0A6D ; 7.0 # Nd GURMUKHI DIGIT SEVEN @@ -521,11 +653,13 @@ FF16 ; 6.0 # Nd FULLWIDTH DIGIT SIX 0ED7 ; 7.0 # Nd LAO DIGIT SEVEN 0F27 ; 7.0 # Nd TIBETAN DIGIT SEVEN 1047 ; 7.0 # Nd MYANMAR DIGIT SEVEN -136F ; 7.0 # Nd ETHIOPIC DIGIT SEVEN +136F ; 7.0 # No ETHIOPIC DIGIT SEVEN 17E7 ; 7.0 # Nd KHMER DIGIT SEVEN 17F7 ; 7.0 # No KHMER SYMBOL LEK ATTAK PRAM-PII 1817 ; 7.0 # Nd MONGOLIAN DIGIT SEVEN 194D ; 7.0 # Nd LIMBU DIGIT SEVEN +19D7 ; 7.0 # Nd NEW TAI LUE DIGIT SEVEN +1B57 ; 7.0 # Nd BALINESE DIGIT SEVEN 2077 ; 7.0 # No SUPERSCRIPT SEVEN 2087 ; 7.0 # No SUBSCRIPT SEVEN 2166 ; 7.0 # Nl ROMAN NUMERAL SEVEN @@ -540,18 +674,27 @@ FF16 ; 6.0 # Nd FULLWIDTH DIGIT SIX 3027 ; 7.0 # Nl HANGZHOU NUMERAL SEVEN 3226 ; 7.0 # No PARENTHESIZED IDEOGRAPH SEVEN 3286 ; 7.0 # No CIRCLED IDEOGRAPH SEVEN +3B4D ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-3B4D 4E03 ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-4E03 67D2 ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-67D2 FF17 ; 7.0 # Nd FULLWIDTH DIGIT SEVEN 1010D ; 7.0 # No AEGEAN NUMBER SEVEN 104A7 ; 7.0 # Nd OSMANYA DIGIT SEVEN +12405 ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN ASH +1240C ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN DISH +12412 ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN U +1241B ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN GESH2 +12429 ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN SHAR2 +12441..12443 ; 7.0 # Nl [3] CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3..CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B +1D366 ; 7.0 # No COUNTING ROD UNIT DIGIT SEVEN 1D7D5 ; 7.0 # Nd MATHEMATICAL BOLD DIGIT SEVEN 1D7DF ; 7.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN 1D7E9 ; 7.0 # Nd MATHEMATICAL SANS-SERIF DIGIT SEVEN 1D7F3 ; 7.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN 1D7FD ; 7.0 # Nd MATHEMATICAL MONOSPACE DIGIT SEVEN +20001 ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-20001 -# Total code points: 45 +# Total code points: 59 # ================================================ @@ -564,6 +707,7 @@ FF17 ; 7.0 # Nd FULLWIDTH DIGIT SEVEN 0038 ; 8.0 # Nd DIGIT EIGHT 0668 ; 8.0 # Nd ARABIC-INDIC DIGIT EIGHT 06F8 ; 8.0 # Nd EXTENDED ARABIC-INDIC DIGIT EIGHT +07C8 ; 8.0 # Nd NKO DIGIT EIGHT 096E ; 8.0 # Nd DEVANAGARI DIGIT EIGHT 09EE ; 8.0 # Nd BENGALI DIGIT EIGHT 0A6E ; 8.0 # Nd GURMUKHI DIGIT EIGHT @@ -577,11 +721,13 @@ FF17 ; 7.0 # Nd FULLWIDTH DIGIT SEVEN 0ED8 ; 8.0 # Nd LAO DIGIT EIGHT 0F28 ; 8.0 # Nd TIBETAN DIGIT EIGHT 1048 ; 8.0 # Nd MYANMAR DIGIT EIGHT -1370 ; 8.0 # Nd ETHIOPIC DIGIT EIGHT +1370 ; 8.0 # No ETHIOPIC DIGIT EIGHT 17E8 ; 8.0 # Nd KHMER DIGIT EIGHT 17F8 ; 8.0 # No KHMER SYMBOL LEK ATTAK PRAM-BEI 1818 ; 8.0 # Nd MONGOLIAN DIGIT EIGHT 194E ; 8.0 # Nd LIMBU DIGIT EIGHT +19D8 ; 8.0 # Nd NEW TAI LUE DIGIT EIGHT +1B58 ; 8.0 # Nd BALINESE DIGIT EIGHT 2078 ; 8.0 # No SUPERSCRIPT EIGHT 2088 ; 8.0 # No SUBSCRIPT EIGHT 2167 ; 8.0 # Nl ROMAN NUMERAL EIGHT @@ -601,13 +747,20 @@ FF17 ; 7.0 # Nd FULLWIDTH DIGIT SEVEN FF18 ; 8.0 # Nd FULLWIDTH DIGIT EIGHT 1010E ; 8.0 # No AEGEAN NUMBER EIGHT 104A8 ; 8.0 # Nd OSMANYA DIGIT EIGHT +12406 ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT ASH +1240D ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT DISH +12413 ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT U +1241C ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT GESH2 +1242A ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT SHAR2 +12444..12445 ; 8.0 # Nl [2] CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU..CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3 +1D367 ; 8.0 # No COUNTING ROD UNIT DIGIT EIGHT 1D7D6 ; 8.0 # Nd MATHEMATICAL BOLD DIGIT EIGHT 1D7E0 ; 8.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT 1D7EA ; 8.0 # Nd MATHEMATICAL SANS-SERIF DIGIT EIGHT 1D7F4 ; 8.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT 1D7FE ; 8.0 # Nd MATHEMATICAL MONOSPACE DIGIT EIGHT -# Total code points: 45 +# Total code points: 56 # ================================================ @@ -620,6 +773,7 @@ FF18 ; 8.0 # Nd FULLWIDTH DIGIT EIGHT 0039 ; 9.0 # Nd DIGIT NINE 0669 ; 9.0 # Nd ARABIC-INDIC DIGIT NINE 06F9 ; 9.0 # Nd EXTENDED ARABIC-INDIC DIGIT NINE +07C9 ; 9.0 # Nd NKO DIGIT NINE 096F ; 9.0 # Nd DEVANAGARI DIGIT NINE 09EF ; 9.0 # Nd BENGALI DIGIT NINE 0A6F ; 9.0 # Nd GURMUKHI DIGIT NINE @@ -633,11 +787,13 @@ FF18 ; 8.0 # Nd FULLWIDTH DIGIT EIGHT 0ED9 ; 9.0 # Nd LAO DIGIT NINE 0F29 ; 9.0 # Nd TIBETAN DIGIT NINE 1049 ; 9.0 # Nd MYANMAR DIGIT NINE -1371 ; 9.0 # Nd ETHIOPIC DIGIT NINE +1371 ; 9.0 # No ETHIOPIC DIGIT NINE 17E9 ; 9.0 # Nd KHMER DIGIT NINE 17F9 ; 9.0 # No KHMER SYMBOL LEK ATTAK PRAM-BUON 1819 ; 9.0 # Nd MONGOLIAN DIGIT NINE 194F ; 9.0 # Nd LIMBU DIGIT NINE +19D9 ; 9.0 # Nd NEW TAI LUE DIGIT NINE +1B59 ; 9.0 # Nd BALINESE DIGIT NINE 2079 ; 9.0 # No SUPERSCRIPT NINE 2089 ; 9.0 # No SUBSCRIPT NINE 2168 ; 9.0 # Nl ROMAN NUMERAL NINE @@ -653,17 +809,25 @@ FF18 ; 8.0 # Nd FULLWIDTH DIGIT EIGHT 3228 ; 9.0 # No PARENTHESIZED IDEOGRAPH NINE 3288 ; 9.0 # No CIRCLED IDEOGRAPH NINE 4E5D ; 9.0 # Lo CJK UNIFIED IDEOGRAPH-4E5D +5EFE ; 9.0 # Lo CJK UNIFIED IDEOGRAPH-5EFE 7396 ; 9.0 # Lo CJK UNIFIED IDEOGRAPH-7396 FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 1010F ; 9.0 # No AEGEAN NUMBER NINE 104A9 ; 9.0 # Nd OSMANYA DIGIT NINE +12407 ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE ASH +1240E ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE DISH +12414 ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE U +1241D ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE GESH2 +1242B ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE SHAR2 +12446..12449 ; 9.0 # Nl [4] CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU..CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A +1D368 ; 9.0 # No COUNTING ROD UNIT DIGIT NINE 1D7D7 ; 9.0 # Nd MATHEMATICAL BOLD DIGIT NINE 1D7E1 ; 9.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT NINE 1D7EB ; 9.0 # Nd MATHEMATICAL SANS-SERIF DIGIT NINE 1D7F5 ; 9.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT NINE 1D7FF ; 9.0 # Nd MATHEMATICAL MONOSPACE DIGIT NINE -# Total code points: 45 +# Total code points: 59 # ================================================ @@ -681,12 +845,21 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 3038 ; 10.0 # Nl HANGZHOU NUMERAL TEN 3229 ; 10.0 # No PARENTHESIZED IDEOGRAPH TEN 3289 ; 10.0 # No CIRCLED IDEOGRAPH TEN +4EC0 ; 10.0 # Lo CJK UNIFIED IDEOGRAPH-4EC0 5341 ; 10.0 # Lo CJK UNIFIED IDEOGRAPH-5341 62FE ; 10.0 # Lo CJK UNIFIED IDEOGRAPH-62FE 10110 ; 10.0 # No AEGEAN NUMBER TEN +10149 ; 10.0 # Nl GREEK ACROPHONIC ATTIC TEN TALENTS +10150 ; 10.0 # Nl GREEK ACROPHONIC ATTIC TEN STATERS +10157 ; 10.0 # Nl GREEK ACROPHONIC ATTIC TEN MNAS +10160..10164 ; 10.0 # Nl [5] GREEK ACROPHONIC TROEZENIAN TEN..GREEK ACROPHONIC THESPIAN TEN 10322 ; 10.0 # No OLD ITALIC NUMERAL TEN +103D3 ; 10.0 # Nl OLD PERSIAN NUMBER TEN +10917 ; 10.0 # No PHOENICIAN NUMBER TEN +10A44 ; 10.0 # No KHAROSHTHI NUMBER TEN +1D369 ; 10.0 # No COUNTING ROD TENS DIGIT ONE -# Total code points: 18 +# Total code points: 31 # ================================================ @@ -716,6 +889,8 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 2480 ; 13.0 # No PARENTHESIZED NUMBER THIRTEEN 2494 ; 13.0 # No NUMBER THIRTEEN FULL STOP 24ED ; 13.0 # No NEGATIVE CIRCLED NUMBER THIRTEEN +F8A2 ; 13.0 # Nl Apple corporate roman numeral thirteen +F8A5 ; 13.0 # Nl Apple corporate small roman numeral thirteen # Total code points: 4 @@ -725,6 +900,8 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 2481 ; 14.0 # No PARENTHESIZED NUMBER FOURTEEN 2495 ; 14.0 # No NUMBER FOURTEEN FULL STOP 24EE ; 14.0 # No NEGATIVE CIRCLED NUMBER FOURTEEN +F8A3 ; 14.0 # Nl Apple corporate roman numeral fourteen +F8A6 ; 14.0 # Nl Apple corporate small roman numeral fourteen # Total code points: 4 @@ -734,6 +911,8 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 2482 ; 15.0 # No PARENTHESIZED NUMBER FIFTEEN 2496 ; 15.0 # No NUMBER FIFTEEN FULL STOP 24EF ; 15.0 # No NEGATIVE CIRCLED NUMBER FIFTEEN +F8A4 ; 15.0 # Nl Apple corporate roman numeral fifteen +F8A7 ; 15.0 # Nl Apple corporate small roman numeral fifteen # Total code points: 4 @@ -785,10 +964,15 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 249B ; 20.0 # No NUMBER TWENTY FULL STOP 24F4 ; 20.0 # No NEGATIVE CIRCLED NUMBER TWENTY 3039 ; 20.0 # Nl HANGZHOU NUMERAL TWENTY +5344 ; 20.0 # Lo CJK UNIFIED IDEOGRAPH-5344 5EFF ; 20.0 # Lo CJK UNIFIED IDEOGRAPH-5EFF 10111 ; 20.0 # No AEGEAN NUMBER TWENTY +103D4 ; 20.0 # Nl OLD PERSIAN NUMBER TWENTY +10918 ; 20.0 # No PHOENICIAN NUMBER TWENTY +10A45 ; 20.0 # No KHAROSHTHI NUMBER TWENTY +1D36A ; 20.0 # No COUNTING ROD TENS DIGIT TWO -# Total code points: 8 +# Total code points: 13 # ================================================ @@ -851,8 +1035,11 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 325A ; 30.0 # No CIRCLED NUMBER THIRTY 5345 ; 30.0 # Lo CJK UNIFIED IDEOGRAPH-5345 10112 ; 30.0 # No AEGEAN NUMBER THIRTY +10165 ; 30.0 # Nl GREEK ACROPHONIC THESPIAN THIRTY +1D36B ; 30.0 # No COUNTING ROD TENS DIGIT THREE +20983 ; 30.0 # Lo CJK UNIFIED IDEOGRAPH-20983 -# Total code points: 5 +# Total code points: 8 # ================================================ @@ -912,9 +1099,13 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 1375 ; 40.0 # No ETHIOPIC NUMBER FORTY 32B5 ; 40.0 # No CIRCLED NUMBER FORTY +534C ; 40.0 # Lo CJK UNIFIED IDEOGRAPH-534C 10113 ; 40.0 # No AEGEAN NUMBER FORTY +1D36C ; 40.0 # No COUNTING ROD TENS DIGIT FOUR +2098C ; 40.0 # Lo CJK UNIFIED IDEOGRAPH-2098C +2099C ; 40.0 # Lo CJK UNIFIED IDEOGRAPH-2099C -# Total code points: 3 +# Total code points: 7 # ================================================ @@ -977,37 +1168,48 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 217C ; 50.0 # Nl SMALL ROMAN NUMERAL FIFTY 32BF ; 50.0 # No CIRCLED NUMBER FIFTY 10114 ; 50.0 # No AEGEAN NUMBER FIFTY +10144 ; 50.0 # Nl GREEK ACROPHONIC ATTIC FIFTY +1014A ; 50.0 # Nl GREEK ACROPHONIC ATTIC FIFTY TALENTS +10151 ; 50.0 # Nl GREEK ACROPHONIC ATTIC FIFTY STATERS +10166..10169 ; 50.0 # Nl [4] GREEK ACROPHONIC TROEZENIAN FIFTY..GREEK ACROPHONIC THESPIAN FIFTY +10174 ; 50.0 # Nl GREEK ACROPHONIC STRATIAN FIFTY MNAS 10323 ; 50.0 # No OLD ITALIC NUMERAL FIFTY +1D36D ; 50.0 # No COUNTING ROD TENS DIGIT FIVE -# Total code points: 6 +# Total code points: 15 # ================================================ 1377 ; 60.0 # No ETHIOPIC NUMBER SIXTY 10115 ; 60.0 # No AEGEAN NUMBER SIXTY +1D36E ; 60.0 # No COUNTING ROD TENS DIGIT SIX -# Total code points: 2 +# Total code points: 3 # ================================================ 1378 ; 70.0 # No ETHIOPIC NUMBER SEVENTY 10116 ; 70.0 # No AEGEAN NUMBER SEVENTY +1D36F ; 70.0 # No COUNTING ROD TENS DIGIT SEVEN -# Total code points: 2 +# Total code points: 3 # ================================================ 1379 ; 80.0 # No ETHIOPIC NUMBER EIGHTY 10117 ; 80.0 # No AEGEAN NUMBER EIGHTY +1D370 ; 80.0 # No COUNTING ROD TENS DIGIT EIGHT -# Total code points: 2 +# Total code points: 3 # ================================================ 137A ; 90.0 # No ETHIOPIC NUMBER NINETY 10118 ; 90.0 # No AEGEAN NUMBER NINETY +10341 ; 90.0 # Nl GOTHIC LETTER NINETY +1D371 ; 90.0 # No COUNTING ROD TENS DIGIT NINE -# Total code points: 2 +# Total code points: 4 # ================================================ @@ -1019,8 +1221,14 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 767E ; 100.0 # Lo CJK UNIFIED IDEOGRAPH-767E 964C ; 100.0 # Lo CJK UNIFIED IDEOGRAPH-964C 10119 ; 100.0 # No AEGEAN NUMBER ONE HUNDRED +1014B ; 100.0 # Nl GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS +10152 ; 100.0 # Nl GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS +1016A ; 100.0 # Nl GREEK ACROPHONIC THESPIAN ONE HUNDRED +103D5 ; 100.0 # Nl OLD PERSIAN NUMBER HUNDRED +10919 ; 100.0 # No PHOENICIAN NUMBER ONE HUNDRED +10A46 ; 100.0 # No KHAROSHTHI NUMBER ONE HUNDRED -# Total code points: 8 +# Total code points: 14 # ================================================ @@ -1031,8 +1239,9 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE # ================================================ 1011B ; 300.0 # No AEGEAN NUMBER THREE HUNDRED +1016B ; 300.0 # Nl GREEK ACROPHONIC THESPIAN THREE HUNDRED -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -1045,8 +1254,12 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 216E ; 500.0 # Nl ROMAN NUMERAL FIVE HUNDRED 217E ; 500.0 # Nl SMALL ROMAN NUMERAL FIVE HUNDRED 1011D ; 500.0 # No AEGEAN NUMBER FIVE HUNDRED +10145 ; 500.0 # Nl GREEK ACROPHONIC ATTIC FIVE HUNDRED +1014C ; 500.0 # Nl GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS +10153 ; 500.0 # Nl GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS +1016C..10170 ; 500.0 # Nl [5] GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED..GREEK ACROPHONIC NAXIAN FIVE HUNDRED -# Total code points: 3 +# Total code points: 11 # ================================================ @@ -1069,8 +1282,9 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE # ================================================ 10121 ; 900.0 # No AEGEAN NUMBER NINE HUNDRED +1034A ; 900.0 # Nl GOTHIC LETTER NINE HUNDRED -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -1080,8 +1294,12 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 4EDF ; 1000.0 # Lo CJK UNIFIED IDEOGRAPH-4EDF 5343 ; 1000.0 # Lo CJK UNIFIED IDEOGRAPH-5343 10122 ; 1000.0 # No AEGEAN NUMBER ONE THOUSAND +1014D ; 1000.0 # Nl GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS +10154 ; 1000.0 # Nl GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS +10171 ; 1000.0 # Nl GREEK ACROPHONIC THESPIAN ONE THOUSAND +10A47 ; 1000.0 # No KHAROSHTHI NUMBER ONE THOUSAND -# Total code points: 7 +# Total code points: 11 # ================================================ @@ -1105,8 +1323,11 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 2181 ; 5000.0 # Nl ROMAN NUMERAL FIVE THOUSAND 10126 ; 5000.0 # No AEGEAN NUMBER FIVE THOUSAND +10146 ; 5000.0 # Nl GREEK ACROPHONIC ATTIC FIVE THOUSAND +1014E ; 5000.0 # Nl GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS +10172 ; 5000.0 # Nl GREEK ACROPHONIC THESPIAN FIVE THOUSAND -# Total code points: 2 +# Total code points: 5 # ================================================ @@ -1139,8 +1360,9 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 4E07 ; 10000.0 # Lo CJK UNIFIED IDEOGRAPH-4E07 842C ; 10000.0 # Lo CJK UNIFIED IDEOGRAPH-842C 1012B ; 10000.0 # No AEGEAN NUMBER TEN THOUSAND +10155 ; 10000.0 # Nl GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS -# Total code points: 5 +# Total code points: 6 # ================================================ @@ -1163,8 +1385,10 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE # ================================================ 1012F ; 50000.0 # No AEGEAN NUMBER FIFTY THOUSAND +10147 ; 50000.0 # Nl GREEK ACROPHONIC ATTIC FIFTY THOUSAND +10156 ; 50000.0 # Nl GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS -# Total code points: 1 +# Total code points: 3 # ================================================ @@ -1202,3 +1426,5 @@ FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE 5146 ; 1000000000000.0 # Lo CJK UNIFIED IDEOGRAPH-5146 # Total code points: 1 + +# EOF diff --git a/icuSources/data/unidata/EastAsianWidth.txt b/icuSources/data/unidata/EastAsianWidth.txt index cc5c5dd0..87b92636 100644 --- a/icuSources/data/unidata/EastAsianWidth.txt +++ b/icuSources/data/unidata/EastAsianWidth.txt @@ -1,12 +1,17 @@ -# EastAsianWidth-4.0.0.txt +# EastAsianWidth-5.0.0.txt +# Date: 2006-02-15, 14:39:00 PST [KW] # # East Asian Width Properties # -# This file is a supplement to the UnicodeData.txt file. -# It contains informative data only. +# This file is an informative contributory data file in the +# Unicode Character Database. +# +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# # The format is two fields separated by a semicolon. -# Field 1: Unicode value -# Field 2: East Asian Width property, consisting of one of the following values: +# Field 0: Unicode value +# Field 1: East Asian Width property, consisting of one of the following values: # "N", "A", "H", "W", "F", "Na" # - All code points, assigned or unassigned, that are not listed # explicitly are given the value "N". @@ -16,7 +21,9 @@ # The Unicode name of each character is provided in a comment for help # in identifying the characters. # -# See UTR #11: East Asian Character Width, for more information +# See UAX #11: East Asian Character Width, for more information. +# +# @missing: 0000..10FFFF; N 0000..001F;N 0020..007E;Na 007F..00A0;N @@ -106,8 +113,7 @@ 01DA;A 01DB;N 01DC;A -01DD..0236;N -0250;N +01DD..0250;N 0251;A 0252..0260;N 0261;A @@ -128,11 +134,9 @@ 02DE;N 02DF;A 02E0..02FF;N -0300..0357;A -035D..036F;A +0300..036F;A 0374..0375;N -037A;N -037E;N +037A..037E;N 0384..038A;N 038C;N 038E..0390;N @@ -143,41 +147,37 @@ 03C2;N 03C3..03C9;A 03CA..03CE;N -03D0..03FB;N -0400;N +03D0..0400;N 0401;A 0402..040F;N 0410..044F;A 0450;N 0451;A 0452..0486;N -0488..04CE;N -04D0..04F5;N -04F8..04F9;N -0500..050F;N +0488..0513;N 0531..0556;N 0559..055F;N 0561..0587;N 0589..058A;N -0591..05A1;N -05A3..05B9;N -05BB..05C4;N +0591..05C7;N 05D0..05EA;N 05F0..05F4;N 0600..0603;N -060C..0615;N +060B..0615;N 061B;N -061F;N +061E..061F;N 0621..063A;N -0640..0658;N +0640..065E;N 0660..070D;N 070F..074A;N -074D..074F;N +074D..076D;N 0780..07B1;N +07C0..07FA;N 0901..0939;N 093C..094D;N 0950..0954;N 0958..0970;N +097B..097F;N 0981..0983;N 0985..098C;N 098F..0990;N @@ -187,7 +187,7 @@ 09B6..09B9;N 09BC..09C4;N 09C7..09C8;N -09CB..09CD;N +09CB..09CE;N 09D7;N 09DC..09DD;N 09DF..09E3;N @@ -244,13 +244,12 @@ 0B9E..0B9F;N 0BA3..0BA4;N 0BA8..0BAA;N -0BAE..0BB5;N -0BB7..0BB9;N +0BAE..0BB9;N 0BBE..0BC2;N 0BC6..0BC8;N 0BCA..0BCD;N 0BD7;N -0BE7..0BFA;N +0BE6..0BFA;N 0C01..0C03;N 0C05..0C0C;N 0C0E..0C10;N @@ -274,8 +273,9 @@ 0CCA..0CCD;N 0CD5..0CD6;N 0CDE;N -0CE0..0CE1;N +0CE0..0CE3;N 0CE6..0CEF;N +0CF1..0CF2;N 0D02..0D03;N 0D05..0D0C;N 0D0E..0D10;N @@ -324,7 +324,7 @@ 0F90..0F97;N 0F99..0FBC;N 0FBE..0FCC;N -0FCF;N +0FCF..0FD1;N 1000..1021;N 1023..1027;N 1029..102A;N @@ -332,38 +332,29 @@ 1036..1039;N 1040..1059;N 10A0..10C5;N -10D0..10F8;N -10FB;N +10D0..10FC;N 1100..1159;W 115F;W 1160..11A2;N 11A8..11F9;N -1200..1206;N -1208..1246;N -1248;N +1200..1248;N 124A..124D;N 1250..1256;N 1258;N 125A..125D;N -1260..1286;N -1288;N +1260..1288;N 128A..128D;N -1290..12AE;N -12B0;N +1290..12B0;N 12B2..12B5;N 12B8..12BE;N 12C0;N 12C2..12C5;N -12C8..12CE;N -12D0..12D6;N -12D8..12EE;N -12F0..130E;N -1310;N +12C8..12D6;N +12D8..1310;N 1312..1315;N -1318..131E;N -1320..1346;N -1348..135A;N -1361..137C;N +1318..135A;N +135F..137C;N +1380..1399;N 13A0..13F4;N 1401..1676;N 1680..169C;N @@ -388,9 +379,15 @@ 1940;N 1944..196D;N 1970..1974;N -19E0..19FF;N -1D00..1D6B;N -1E00..1E9B;N +1980..19A9;N +19B0..19C9;N +19D0..19D9;N +19DE..1A1B;N +1A1E..1A1F;N +1B00..1B4B;N +1B50..1B7C;N +1D00..1DCA;N +1DFE..1E9B;N 1EA0..1EF9;N 1F00..1F15;N 1F18..1F1D;N @@ -430,9 +427,7 @@ 203B;A 203C..203D;N 203E;A -203F..2054;N -2057;N -205F..2063;N +203F..2063;N 206A..2071;N 2074;A 2075..207E;N @@ -440,12 +435,13 @@ 2080;N 2081..2084;A 2085..208E;N +2090..2094;N 20A0..20A8;N 20A9;H 20AA..20AB;N 20AC;A -20AD..20B1;N -20D0..20EA;N +20AD..20B5;N +20D0..20EF;N 2100..2102;N 2103;A 2104;N @@ -462,8 +458,7 @@ 2126;A 2127..212A;N 212B;A -212C..213B;N -213D..214B;N +212C..214E;N 2153..2154;A 2155..215A;N 215B..215E;A @@ -471,7 +466,7 @@ 2160..216B;A 216C..216F;N 2170..2179;A -217A..2183;N +217A..2184;N 2190..2199;A 219A..21B7;N 21B8..21B9;A @@ -541,7 +536,7 @@ 2312;A 2313..2328;N 2329..232A;W -232B..23D0;N +232B..23E7;N 2400..2426;N 2440..244A;N 2460..24E9;A @@ -583,8 +578,7 @@ 260E..260F;A 2610..2613;N 2614..2615;A -2616..2617;N -2619..261B;N +2616..261B;N 261C;A 261D;N 261E;A @@ -602,9 +596,8 @@ 266C..266D;A 266E;N 266F;A -2670..267D;N -2680..2691;N -26A0..26A1;N +2670..269C;N +26A0..26B2;N 2701..2704;N 2706..2709;N 270C..2727;N @@ -620,11 +613,32 @@ 2780..2794;N 2798..27AF;N 27B1..27BE;N +27C0..27CA;N 27D0..27E5;N 27E6..27EB;Na 27F0..2984;N 2985..2986;Na -2987..2B0D;N +2987..2B1A;N +2B20..2B23;N +2C00..2C2E;N +2C30..2C5E;N +2C60..2C6C;N +2C74..2C77;N +2C80..2CEA;N +2CF9..2D25;N +2D30..2D65;N +2D6F;N +2D80..2D96;N +2DA0..2DA6;N +2DA8..2DAE;N +2DB0..2DB6;N +2DB8..2DBE;N +2DC0..2DC6;N +2DC8..2DCE;N +2DD0..2DD6;N +2DD8..2DDE;N +2E00..2E17;N +2E1C..2E1D;N 2E80..2E99;W 2E9B..2EF3;W 2F00..2FD5;W @@ -637,23 +651,40 @@ 3105..312C;W 3131..318E;W 3190..31B7;W +31C0..31CF;W 31F0..321E;W 3220..3243;W -3250..327D;W -327F..32FE;W +3250..32FE;W 3300..33FF;W 3400..4DB5;W 4DC0..4DFF;N -4E00..9FA5;W +4E00..9FBB;W A000..A48C;W A490..A4C6;W +A700..A71A;N +A720..A721;N +A800..A82B;N +A840..A877;N AC00..D7A3;W D800..DB7F;N DB80..DBFF;N DC00..DFFF;N -E000..F8FF;A +E000..F801;A +F802..F84F;N +F850..F87F;A +F880..F881;W +F882..F8A0;N +F8A1..F8B6;W +F8B7;F +F8B8..F8BB;W +F8BC;F +F8BD;W +F8BE..F8C0;F +F8C1..F8D6;W +F8D7..F8FF;N F900..FA2D;W FA30..FA6A;W +FA70..FAD9;W FB00..FB06;N FB13..FB17;N FB1D..FB36;N @@ -667,6 +698,7 @@ FD50..FD8F;N FD92..FDC7;N FDF0..FDFD;N FE00..FE0F;A +FE10..FE19;W FE20..FE23;N FE30..FE52;W FE54..FE66;W @@ -693,12 +725,13 @@ FFFD;A 10080..100FA;N 10100..10102;N 10107..10133;N -10137..1013F;N +10137..1018A;N 10300..1031E;N 10320..10323;N 10330..1034A;N 10380..1039D;N -1039F;N +1039F..103C3;N +103C8..103D5;N 10400..1049D;N 104A0..104A9;N 10800..10805;N @@ -707,10 +740,25 @@ FFFD;A 10837..10838;N 1083C;N 1083F;N +10900..10919;N +1091F;N +10A00..10A03;N +10A05..10A06;N +10A0C..10A13;N +10A15..10A17;N +10A19..10A33;N +10A38..10A3A;N +10A3F..10A47;N +10A50..10A58;N +12000..1236E;N +12400..12462;N +12470..12473;N 1D000..1D0F5;N 1D100..1D126;N 1D12A..1D1DD;N +1D200..1D245;N 1D300..1D356;N +1D360..1D371;N 1D400..1D454;N 1D456..1D49C;N 1D49E..1D49F;N @@ -729,8 +777,8 @@ FFFD;A 1D540..1D544;N 1D546;N 1D54A..1D550;N -1D552..1D6A3;N -1D6A8..1D7C9;N +1D552..1D6A5;N +1D6A8..1D7CB;N 1D7CE..1D7FF;N 20000..2A6D6;W 2A6D7..2F7FF;W @@ -742,3 +790,5 @@ E0020..E007F;N E0100..E01EF;A F0000..FFFFD;A 100000..10FFFD;A + +# EOF diff --git a/icuSources/data/unidata/FractionalUCA.txt b/icuSources/data/unidata/FractionalUCA.txt index 6c1cec69..a009f7d9 100644 --- a/icuSources/data/unidata/FractionalUCA.txt +++ b/icuSources/data/unidata/FractionalUCA.txt @@ -1,6 +1,7 @@ # Fractional UCA Table, generated from standard UCA -# 2004-01-27,10:18:00 GMT [MD] -# VERSION: UCA=4.0.0, UCD=4.0.0 +# 2006-06-10, 20:18:04 GMT [MD] +# VERSION: UCA=5.0.0, UCD=5.0.0 +# Copyright (c) 1991-2006 Unicode, Inc. # Generated processed version, as described in ICU design document. # NOTES @@ -17,7 +18,7 @@ # - Differs from previous version in that MAX value was introduced at 1F. # All tertiary values are shifted down by 1, filling the gap at 7! -[UCA version = 4.0.0] +[UCA version = 5.0.0] 0000; [,,] 0001; [,,] @@ -98,6 +99,7 @@ 059F; [,,] 05A0; [,,] 05A1; [,,] +05A2; [,,] 05A3; [,,] 05A4; [,,] 05A5; [,,] @@ -113,6 +115,7 @@ 05AF; [,,] 05BD; [,,] 05C4; [,,] +05C5; [,,] 0600; [,,] 0601; [,,] 0602; [,,] @@ -145,7 +148,6 @@ 06EC; [,,] 06ED; [,,] 070F; [,,] -0E4E; [,,] 0F18; [,,] 0F19; [,,] 0F35; [,,] @@ -159,6 +161,15 @@ 180C; [,,] 180D; [,,] 180E; [,,] +1B6B; [,,] +1B6C; [,,] +1B6D; [,,] +1B6E; [,,] +1B6F; [,,] +1B70; [,,] +1B71; [,,] +1B72; [,,] +1B73; [,,] 200B; [,,] 200C; [,,] 200D; [,,] @@ -217,6 +228,9 @@ D834 DDAA; [,,] D834 DDAB; [,,] D834 DDAC; [,,] D834 DDAD; [,,] +D834 DE42; [,,] +D834 DE43; [,,] +D834 DE44; [,,] D83F DFFE; [,,] D83F DFFF; [,,] D87F DFFE; [,,] @@ -729,206 +743,265 @@ FFFF; [,,] 0355; [, D2 D5, 05] 0356; [, D2 E5, 05] 0357; [, D2 F5, 05] -035D; [, D3 09, 05] -035E; [, D3 19, 05] -035F; [, D3 29, 05] -0360; [, D3 39, 05] -FE22; [, D3 39, 05] -0361; [, D3 49, 05] -FE20; [, D3 49, 05] -0362; [, D3 59, 05] -0483; [, D3 69, 05] -0484; [, D3 79, 05] -0485; [, D3 89, 05] -0486; [, D3 99, 05] -05B0; [, D3 A9, 05] -05B1; [, D3 B9, 05] -05B2; [, D3 C9, 05] -05B3; [, D3 D9, 05] -05B4; [, D3 E9, 05] -05B5; [, D3 F9, 05] -05B6; [, D4 0D, 05] -05B7; [, D4 1D, 05] -05B8; [, D4 2D, 05] -05B9; [, D4 3D, 05] -05BB; [, D4 4D, 05] -05C2; [, D4 5D, 05] -05C1; [, D4 6D, 05] -05BC; [, D4 7D, 05] -05BF; [, D4 8D, 05] -FB1E; [, D4 9D, 05] -064B; [, D4 AD, 05] -FE71; [, D4 AD, 2F] -FE70; [, D4 AD, 33] -064C; [, D4 BD, 05] -FE72; [, D4 BD, 33] -064D; [, D4 CD, 05] -FE74; [, D4 CD, 33] -064E; [, D4 DD, 05] -FE77; [, D4 DD, 2F] -FE76; [, D4 DD, 33] -064F; [, D4 ED, 05] -FE79; [, D4 ED, 2F] -FE78; [, D4 ED, 33] -0650; [, D4 FD, 05] -FE7B; [, D4 FD, 2F] -FE7A; [, D4 FD, 33] -0651; [, D5 11, 05] -FCF2; [, D5 11, 2F] -FCF3; [, D5 11, 2F] -FCF4; [, D5 11, 2F] -FE7D; [, D5 11, 2F] -FC5E; [, D5 11, 33] -FC5F; [, D5 11, 33] -FC60; [, D5 11, 33] -FC61; [, D5 11, 33] -FC62; [, D5 11, 33] -FE7C; [, D5 11, 33] -FC63; [, D5 11, 33][, D5 91, 33] -0652; [, D5 21, 05] -FE7F; [, D5 21, 2F] -FE7E; [, D5 21, 33] -0653; [, D5 31, 05] -0654; [, D5 41, 05] -0655; [, D5 51, 05] -0656; [, D5 61, 05] -0657; [, D5 71, 05] -0658; [, D5 81, 05] -0670; [, D5 91, 05] -0711; [, D5 A1, 05] -0730; [, D5 B1, 05] -0731; [, D5 C1, 05] -0732; [, D5 D1, 05] -0733; [, D5 E1, 05] -0734; [, D5 F1, 05] -0735; [, D6 05, 05] -0736; [, D6 15, 05] -0737; [, D6 25, 05] -0738; [, D6 35, 05] -0739; [, D6 45, 05] -073A; [, D6 55, 05] -073B; [, D6 65, 05] -073C; [, D6 75, 05] -073D; [, D6 85, 05] -073E; [, D6 95, 05] -073F; [, D6 A5, 05] -0740; [, D6 B5, 05] -0741; [, D6 C5, 05] -0742; [, D6 D5, 05] -0743; [, D6 E5, 05] -0744; [, D6 F5, 05] -0745; [, D7 09, 05] -0746; [, D7 19, 05] -0747; [, D7 29, 05] -0748; [, D7 39, 05] -0749; [, D7 49, 05] -074A; [, D7 59, 05] -093C; [, D7 69, 05] -0901; [, D7 79, 05] -0902; [, D7 89, 05] -0903; [, D7 99, 05] -0951; [, D7 A9, 05] -0952; [, D7 B9, 05] -0953; [, D7 C9, 05] -0954; [, D7 D9, 05] -09BC; [, D7 E9, 05] -0981; [, D7 F9, 05] -0982; [, D8 0D, 05] -0983; [, D8 1D, 05] -0A3C; [, D8 2D, 05] -0A01; [, D8 3D, 05] -0A02; [, D8 4D, 05] -0A03; [, D8 5D, 05] -0A70; [, D8 6D, 05] -0A71; [, D8 7D, 05] -0ABC; [, D8 8D, 05] -0A81; [, D8 9D, 05] -0A82; [, D8 AD, 05] -0A83; [, D8 BD, 05] -0B3C; [, D8 CD, 05] -0B01; [, D8 DD, 05] -0B02; [, D8 ED, 05] -0B03; [, D8 FD, 05] -0B82; [, D9 11, 05] -0C01; [, D9 21, 05] -0C02; [, D9 31, 05] -0C03; [, D9 41, 05] -0CBC; [, D9 51, 05] -0C82; [, D9 61, 05] -0C83; [, D9 71, 05] -0D02; [, D9 81, 05] -0D03; [, D9 91, 05] -0D82; [, D9 A1, 05] -0D83; [, D9 B1, 05] -0E47; [, D9 C1, 05] -0E48; [, D9 D1, 05] -0E49; [, D9 E1, 05] -0E4A; [, D9 F1, 05] -0E4B; [, DA 05, 05] -0EC8; [, DA 15, 05] -0EC9; [, DA 25, 05] -0ECA; [, DA 35, 05] -0ECB; [, DA 45, 05] -0F39; [, DA 55, 05] -0F7E; [, DA 65, 05] -0F7F; [, DA 75, 05] -1036; [, DA 85, 05] -1037; [, DA 95, 05] -1038; [, DA A5, 05] -17C6; [, DA B5, 05] -17C7; [, DA C5, 05] -17C8; [, DA D5, 05] -17C9; [, DA E5, 05] -17CA; [, DA F5, 05] -17CB; [, DB 09, 05] -17CC; [, DB 19, 05] -17CD; [, DB 29, 05] -17CE; [, DB 39, 05] -17CF; [, DB 49, 05] -17D0; [, DB 59, 05] -17D1; [, DB 69, 05] -17D3; [, DB 79, 05] -17DD; [, DB 89, 05] -1939; [, DB 99, 05] -193A; [, DB A9, 05] -193B; [, DB B9, 05] -302A; [, DB C9, 05] -302B; [, DB D9, 05] -302C; [, DB E9, 05] -302D; [, DB F9, 05] -302E; [, DC 0D, 05] -302F; [, DC 1D, 05] -3099; [, DC 2D, 05] -FF9E; [, DC 2D, A3] -309A; [, DC 3D, 05] -FF9F; [, DC 3D, A3] -20D0; [, DC 4D, 05] -20D1; [, DC 5D, 05] -20D2; [, DC 6D, 05] -20D3; [, DC 7D, 05] -20D4; [, DC 8D, 05] -20D5; [, DC 9D, 05] -20D6; [, DC AD, 05] -20D7; [, DC BD, 05] -20D8; [, DC CD, 05] -20D9; [, DC DD, 05] -20DA; [, DC ED, 05] -20DB; [, DC FD, 05] -20DC; [, DD 11, 05] -20DD; [, DD 21, 05] -20DE; [, DD 31, 05] -20DF; [, DD 41, 05] -20E0; [, DD 51, 05] -20E1; [, DD 61, 05] -20E2; [, DF 79, 05] -20E3; [, DF 89, 05] -20E4; [, DF 99, 05] -20E5; [, DF A9, 05] -20E6; [, E0 3D, 05] -20E7; [, E0 4D, 05] -20E8; [, E0 5D, 05] -20E9; [, E0 6D, 05] -20EA; [, E0 7D, 05] +0358; [, D3 09, 05] +0359; [, D3 19, 05] +035A; [, D3 29, 05] +035B; [, D3 39, 05] +035C; [, D3 49, 05] +035D; [, D3 59, 05] +035E; [, D3 69, 05] +035F; [, D3 79, 05] +0360; [, D3 89, 05] +FE22; [, D3 89, 05] +0361; [, D3 99, 05] +FE20; [, D3 99, 05] +0362; [, D3 A9, 05] +1DC0; [, D3 B9, 05] +1DC1; [, D3 C9, 05] +1DC2; [, D3 D9, 05] +1DC3; [, D3 E9, 05] +1DC4; [, D3 F9, 05] +1DC5; [, D4 0D, 05] +1DC6; [, D4 1D, 05] +1DC7; [, D4 2D, 05] +1DC8; [, D4 3D, 05] +1DC9; [, D4 4D, 05] +1DCA; [, D4 5D, 05] +1DFE; [, D4 6D, 05] +1DFF; [, D4 7D, 05] +0483; [, D4 8D, 05] +0484; [, D4 9D, 05] +0485; [, D4 AD, 05] +0486; [, D4 BD, 05] +05B0; [, D4 CD, 05] +05B1; [, D4 DD, 05] +05B2; [, D4 ED, 05] +05B3; [, D4 FD, 05] +05B4; [, D5 11, 05] +05B5; [, D5 21, 05] +05B6; [, D5 31, 05] +05B7; [, D5 41, 05] +05B8; [, D5 51, 05] +05C7; [, D5 61, 05] +05B9; [, D5 71, 05] +05BA; [, D5 81, 05] +05BB; [, D5 91, 05] +05C2; [, D5 A1, 05] +05C1; [, D5 B1, 05] +05BC; [, D5 C1, 05] +05BF; [, D5 D1, 05] +FB1E; [, D5 E1, 05] +064B; [, D5 F1, 05] +FE71; [, D5 F1, 2F] +FE70; [, D5 F1, 33] +064C; [, D6 05, 05] +FE72; [, D6 05, 33] +064D; [, D6 15, 05] +FE74; [, D6 15, 33] +064E; [, D6 25, 05] +FE77; [, D6 25, 2F] +FE76; [, D6 25, 33] +064F; [, D6 35, 05] +FE79; [, D6 35, 2F] +FE78; [, D6 35, 33] +0650; [, D6 45, 05] +FE7B; [, D6 45, 2F] +FE7A; [, D6 45, 33] +0651; [, D6 55, 05] +FCF2; [, D6 55, 2F] +FCF3; [, D6 55, 2F] +FCF4; [, D6 55, 2F] +FE7D; [, D6 55, 2F] +FC5E; [, D6 55, 33] +FC5F; [, D6 55, 33] +FC60; [, D6 55, 33] +FC61; [, D6 55, 33] +FC62; [, D6 55, 33] +FE7C; [, D6 55, 33] +FC63; [, D6 55, 33][, D7 39, 33] +0652; [, D6 65, 05] +FE7F; [, D6 65, 2F] +FE7E; [, D6 65, 33] +0653; [, D6 75, 05] +0654; [, D6 85, 05] +0655; [, D6 95, 05] +0656; [, D6 A5, 05] +0657; [, D6 B5, 05] +0658; [, D6 C5, 05] +0659; [, D6 D5, 05] +065A; [, D6 E5, 05] +065B; [, D6 F5, 05] +065C; [, D7 09, 05] +065D; [, D7 19, 05] +065E; [, D7 29, 05] +0670; [, D7 39, 05] +0711; [, D7 49, 05] +0730; [, D7 59, 05] +0731; [, D7 69, 05] +0732; [, D7 79, 05] +0733; [, D7 89, 05] +0734; [, D7 99, 05] +0735; [, D7 A9, 05] +0736; [, D7 B9, 05] +0737; [, D7 C9, 05] +0738; [, D7 D9, 05] +0739; [, D7 E9, 05] +073A; [, D7 F9, 05] +073B; [, D8 0D, 05] +073C; [, D8 1D, 05] +073D; [, D8 2D, 05] +073E; [, D8 3D, 05] +073F; [, D8 4D, 05] +0740; [, D8 5D, 05] +0741; [, D8 6D, 05] +0742; [, D8 7D, 05] +0743; [, D8 8D, 05] +0744; [, D8 9D, 05] +0745; [, D8 AD, 05] +0746; [, D8 BD, 05] +0747; [, D8 CD, 05] +0748; [, D8 DD, 05] +0749; [, D8 ED, 05] +074A; [, D8 FD, 05] +07EB; [, D9 11, 05] +07EC; [, D9 21, 05] +07ED; [, D9 31, 05] +07EE; [, D9 41, 05] +07EF; [, D9 51, 05] +07F0; [, D9 61, 05] +07F1; [, D9 71, 05] +07F2; [, D9 81, 05] +07F3; [, D9 91, 05] +093C; [, D9 A1, 05] +0901; [, D9 B1, 05] +0902; [, D9 C1, 05] +0903; [, D9 D1, 05] +0951; [, D9 E1, 05] +0952; [, D9 F1, 05] +0953; [, DA 05, 05] +0954; [, DA 15, 05] +09BC; [, DA 25, 05] +0981; [, DA 35, 05] +0982; [, DA 45, 05] +0983; [, DA 55, 05] +0A3C; [, DA 65, 05] +0A01; [, DA 75, 05] +0A02; [, DA 85, 05] +0A03; [, DA 95, 05] +0A70; [, DA A5, 05] +0A71; [, DA B5, 05] +0ABC; [, DA C5, 05] +0A81; [, DA D5, 05] +0A82; [, DA E5, 05] +0A83; [, DA F5, 05] +0B3C; [, DB 09, 05] +0B01; [, DB 19, 05] +0B02; [, DB 29, 05] +0B03; [, DB 39, 05] +0B82; [, DB 49, 05] +0C01; [, DB 59, 05] +0C02; [, DB 69, 05] +0C03; [, DB 79, 05] +0CBC; [, DB 89, 05] +0C82; [, DB 99, 05] +0C83; [, DB A9, 05] +0D02; [, DB B9, 05] +0D03; [, DB C9, 05] +0D82; [, DB D9, 05] +0D83; [, DB E9, 05] +1B34; [, DB F9, 05] +1B00; [, DC 0D, 05] +1B01; [, DC 1D, 05] +1B02; [, DC 2D, 05] +1B03; [, DC 3D, 05] +1B04; [, DC 4D, 05] +A80B; [, DC 5D, 05] +D802 DE0D; [, DC 6D, 05] +D802 DE0E; [, DC 7D, 05] +D802 DE0F; [, DC 8D, 05] +D802 DE38; [, DC 9D, 05] +D802 DE39; [, DC AD, 05] +D802 DE3A; [, DC BD, 05] +0E4E; [, DC CD, 05] +0E47; [, DC DD, 05] +0E48; [, DC ED, 05] +0E49; [, DC FD, 05] +0E4A; [, DD 11, 05] +0E4B; [, DD 21, 05] +0E4C; [, DD 31, 05] +0E4D; [, DD 41, 05] +0EC8; [, DD 51, 05] +0EC9; [, DF 69, 05] +0ECA; [, DF 79, 05] +0ECB; [, DF 89, 05] +0ECC; [, DF 99, 05] +0ECD; [, E0 2D, 05] +0F39; [, E0 3D, 05] +0F7E; [, E0 4D, 05] +0F7F; [, E0 5D, 05] +1036; [, E0 6D, 05] +1037; [, E0 7D, 05] +1038; [, E0 8D, 05] +135F; [, E0 9D, 05] +17C6; [, E0 AD, 05] +17C7; [, E0 BD, 05] +17C8; [, E0 CD, 05] +17C9; [, E0 DD, 05] +17CA; [, E0 ED, 05] +17CB; [, E0 FD, 05] +17CC; [, E1 11, 05] +17CD; [, E1 21, 05] +17CE; [, E1 31, 05] +17CF; [, E1 41, 05] +17D0; [, E1 51, 05] +17D1; [, E1 61, 05] +17D3; [, E1 71, 05] +17DD; [, E1 81, 05] +1939; [, E1 91, 05] +193A; [, E1 A1, 05] +193B; [, E1 B1, 05] +302A; [, E1 C1, 05] +302B; [, E1 D1, 05] +302C; [, E1 E1, 05] +302D; [, E1 F1, 05] +302E; [, E2 05, 05] +302F; [, E2 15, 05] +3099; [, E2 25, 05] +FF9E; [, E2 25, A3] +309A; [, E2 35, 05] +FF9F; [, E2 35, A3] +20D0; [, E2 45, 05] +20D1; [, E2 55, 05] +20D2; [, E2 65, 05] +20D3; [, E2 75, 05] +20D4; [, E2 85, 05] +20D5; [, E2 95, 05] +20D6; [, E2 A5, 05] +20D7; [, E2 B5, 05] +20D8; [, E2 C5, 05] +20D9; [, E2 D5, 05] +20DA; [, E2 E5, 05] +20DB; [, E2 F5, 05] +20DC; [, E3 09, 05] +20DD; [, E3 19, 05] +20DE; [, E3 29, 05] +20DF; [, E3 39, 05] +20E0; [, E3 49, 05] +20E1; [, E3 59, 05] +20E2; [, E3 69, 05] +20E3; [, E3 79, 05] +20E4; [, E3 89, 05] +20E5; [, E3 99, 05] +20E6; [, E3 A9, 05] +20E7; [, E3 B9, 05] +20E8; [, E3 C9, 05] +20E9; [, E3 D9, 05] +20EA; [, E3 E9, 05] +20EB; [, E3 F9, 05] +20EC; [, E4 0D, 05] +20ED; [, E4 1D, 05] +20EE; [, E4 2D, 05] +20EF; [, E4 3D, 05] # START OF VARIABLE SECTION!!! @@ -969,21148 +1042,26065 @@ FF9F; [, DC 3D, A3] 0640; [07 62, 05, 05] -0060; [07 64, 05, 05] -1FEF; [07 64, 05, 05] -FF40; [07 64, 05, 07] +07FA; [07 64, 05, 05] -00B4; [07 66, 05, 05] -0384; [07 66, 05, 05] -1FFD; [07 66, 05, 05] +0060; [07 66, 05, 05] +1FEF; [07 66, 05, 05] +FF40; [07 66, 05, 07] -02DC; [07 68, 05, 05] +00B4; [07 68, 05, 05] +0384; [07 68, 05, 05] +1FFD; [07 68, 05, 05] -005E; [07 6A, 05, 05] -FF3E; [07 6A, 05, 07] +02DC; [07 6A, 05, 05] -00AF; [07 6C, 05, 05] -FFE3; [07 6C, 05, 07] +005E; [07 6C, 05, 05] +FF3E; [07 6C, 05, 07] -203E; [07 6E, 05, 05] -FE49; [07 6E, 05, 09] -FE4A; [07 6E, 05, 09] -FE4B; [07 6E, 05, 09] -FE4C; [07 6E, 05, 09] +00AF; [07 6E, 05, 05] +FFE3; [07 6E, 05, 07] -02D8; [07 70, 05, 05] +203E; [07 70, 05, 05] +FE49; [07 70, 05, 09] +FE4A; [07 70, 05, 09] +FE4B; [07 70, 05, 09] +FE4C; [07 70, 05, 09] -02D9; [07 72, 05, 05] +02D8; [07 72, 05, 05] -00A8; [07 74, 05, 05] -0385; [07 74, 05, 05][, 8D, 05] -1FEE; [07 74, 05, 05][, 8D, 05] -1FED; [07 74, 05, 05][, 8F, 05] -1FC1; [07 74, 05, 05][, 9B, 05] +02D9; [07 74, 05, 05] -02DA; [07 76, 05, 05] +00A8; [07 76, 05, 05] +0385; [07 76, 05, 05][, 8D, 05] +1FEE; [07 76, 05, 05][, 8D, 05] +1FED; [07 76, 05, 05][, 8F, 05] +1FC1; [07 76, 05, 05][, 9B, 05] -02DD; [07 78, 05, 05] +02DA; [07 78, 05, 05] -1FBD; [07 7A, 05, 05] -1FBF; [07 7A, 05, 05] -1FCE; [07 7A, 05, 05][, 8D, 05] -1FCD; [07 7A, 05, 05][, 8F, 05] -1FCF; [07 7A, 05, 05][, 9B, 05] +02DD; [07 7A, 05, 05] -1FFE; [07 7C, 05, 05] -1FDE; [07 7C, 05, 05][, 8D, 05] -1FDD; [07 7C, 05, 05][, 8F, 05] -1FDF; [07 7C, 05, 05][, 9B, 05] +1FBD; [07 7C, 05, 05] +1FBF; [07 7C, 05, 05] +1FCE; [07 7C, 05, 05][, 8D, 05] +1FCD; [07 7C, 05, 05][, 8F, 05] +1FCF; [07 7C, 05, 05][, 9B, 05] -00B8; [07 7E, 05, 05] +1FFE; [07 7E, 05, 05] +1FDE; [07 7E, 05, 05][, 8D, 05] +1FDD; [07 7E, 05, 05][, 8F, 05] +1FDF; [07 7E, 05, 05][, 9B, 05] -02DB; [07 80, 05, 05] +00B8; [07 80, 05, 05] -005F; [07 82, 05, 05] -FF3F; [07 82, 05, 07] -FE4D; [07 82, 05, 09] -FE4E; [07 82, 05, 09] -FE4F; [07 82, 05, 09] -FE33; [07 82, 05, 2B] -FE34; [07 82, 05, 2B] +02DB; [07 82, 05, 05] -2017; [07 84, 05, 05] +005F; [07 84, 05, 05] +FF3F; [07 84, 05, 07] +FE4D; [07 84, 05, 09] +FE4E; [07 84, 05, 09] +FE4F; [07 84, 05, 09] +FE33; [07 84, 05, 2B] +FE34; [07 84, 05, 2B] -1FC0; [07 86, 05, 05] +2017; [07 86, 05, 05] -309B; [07 88, 05, 05] +1FC0; [07 88, 05, 05] -309C; [07 8A, 05, 05] +309B; [07 8A, 05, 05] -00AD; [07 8C, 05, 05] +309C; [07 8C, 05, 05] -002D; [07 8E, 05, 05] -FF0D; [07 8E, 05, 07] -FE63; [07 8E, 05, 1D] +00AD; [07 8E, 05, 05] -058A; [07 90, 05, 05] +002D; [07 90, 05, 05] +FF0D; [07 90, 05, 07] +FE63; [07 90, 05, 1D] -1806; [07 92, 05, 05] +058A; [07 92, 05, 05] -1807; [07 94, 05, 05] +1B60; [07 94, 05, 05] -2010; [07 96, 05, 05] -2011; [07 96, 05, 35] +1806; [07 96, 05, 05] -2012; [07 98, 05, 05] +1807; [07 98, 05, 05] -2013; [07 9A, 05, 05] -FE32; [07 9A, 05, 2B] +2010; [07 9A, 05, 05] +2011; [07 9A, 05, 35] -2014; [07 9C, 05, 05] -FE58; [07 9C, 05, 1D] -FE31; [07 9C, 05, 2B] +2012; [07 9C, 05, 05] -2015; [07 9E, 05, 05] +2013; [07 9E, 05, 05] +FE32; [07 9E, 05, 2B] -2053; [07 A0, 05, 05] +2014; [07 A0, 05, 05] +FE58; [07 A0, 05, 1D] +FE31; [07 A0, 05, 2B] -301C; [07 A2, 05, 05] +2015; [07 A2, 05, 05] -3030; [07 A4, 05, 05] +2053; [07 A4, 05, 05] -30A0; [07 A6, 05, 05] +2E17; [07 A6, 05, 05] -30FB; [07 A8, 05, 05] -FF65; [07 A8, 05, A3] +301C; [07 A8, 05, 05] -002C; [07 AA, 05, 05] -FF0C; [07 AA, 05, 07] -FE50; [07 AA, 05, 1D] +3030; [07 AA, 05, 05] -055D; [07 AC, 05, 05] +30A0; [07 AC, 05, 05] -060C; [07 AE, 05, 05] +30FB; [07 AE, 05, 05] +FF65; [07 AE, 05, A3] -060D; [07 B0, 05, 05] +002C; [07 B0, 05, 05] +FF0C; [07 B0, 05, 07] +FE50; [07 B0, 05, 1D] +FE10; [07 B0, 05, 2B] -066B; [07 B2, 05, 05] +055D; [07 B2, 05, 05] -066C; [07 B4, 05, 05] +060C; [07 B4, 05, 05] -1802; [07 B6, 05, 05] +060D; [07 B6, 05, 05] -1808; [07 B8, 05, 05] +066B; [07 B8, 05, 05] -3001; [07 BA, 05, 05] -FE51; [07 BA, 05, 1D] -FF64; [07 BA, 05, A3] +066C; [07 BA, 05, 05] -FE45; [07 BC, 05, 05] +07F8; [07 BC, 05, 05] -FE46; [07 BE, 05, 05] +1802; [07 BE, 05, 05] -003B; [07 C0, 05, 05] -037E; [07 C0, 05, 05] -FF1B; [07 C0, 05, 07] -FE54; [07 C0, 05, 1D] +1808; [07 C0, 05, 05] -061B; [07 C2, 05, 05] +3001; [07 C2, 05, 05] +FE51; [07 C2, 05, 1D] +FF64; [07 C2, 05, A3] +FE11; [07 C2, 05, 2B] -204F; [07 C4, 05, 05] +FE45; [07 C4, 05, 05] -003A; [07 C6, 05, 05] -FF1A; [07 C6, 05, 07] -FE55; [07 C6, 05, 1D] -2A74; [07 C6, 05, 09][07 C6, 05, 09][0B BD, 05, 3D] +FE46; [07 C6, 05, 05] -0589; [07 C8, 05, 05] +003B; [07 C8, 05, 05] +037E; [07 C8, 05, 05] +FF1B; [07 C8, 05, 07] +FE54; [07 C8, 05, 1D] +FE14; [07 C8, 05, 2B] -0703; [07 CA, 05, 05] +061B; [07 CA, 05, 05] -0704; [07 CC, 05, 05] +204F; [07 CC, 05, 05] -0705; [07 CE, 05, 05] +003A; [07 CE, 05, 05] +FF1A; [07 CE, 05, 07] +FE55; [07 CE, 05, 1D] +FE13; [07 CE, 05, 2B] +2A74; [07 CE, 05, 09][07 CE, 05, 09][0C E3, 05, 3D] -0706; [07 D0, 05, 05] +0589; [07 D0, 05, 05] -0707; [07 D2, 05, 05] +061E; [07 D2, 05, 05] -0708; [07 D4, 05, 05] +0703; [07 D4, 05, 05] -1361; [07 D6, 05, 05] +0704; [07 D6, 05, 05] -1363; [07 D8, 05, 05] +0705; [07 D8, 05, 05] -1364; [07 DA, 05, 05] +0706; [07 DA, 05, 05] -1365; [07 DC, 05, 05] +0707; [07 DC, 05, 05] -1366; [07 DE, 05, 05] +0708; [07 DE, 05, 05] -1804; [07 E0, 05, 05] +1361; [07 E0, 05, 05] -1805; [07 E2, 05, 05] +1363; [07 E2, 05, 05] -0F14; [07 E4, 05, 05] +1364; [07 E4, 05, 05] -17D6; [07 E6, 05, 05] +1365; [07 E6, 05, 05] -16EB; [07 E8, 05, 05] +1366; [07 E8, 05, 05] -16EC; [07 EA, 05, 05] +1804; [07 EA, 05, 05] -16ED; [07 EC, 05, 05] +1805; [07 EC, 05, 05] -0021; [07 EE, 05, 05] -FF01; [07 EE, 05, 07] -FE57; [07 EE, 05, 1D] -203C; [07 EE, 05, 09][07 EE, 05, 09] -2049; [07 EE, 05, 09][07 F6, 05, 09] +0F14; [07 EE, 05, 05] -00A1; [07 F0, 05, 05] +17D6; [07 F0, 05, 05] -055C; [07 F2, 05, 05] +1B5D; [07 F2, 05, 05] -1944; [07 F4, 05, 05] +16EB; [07 F4, 05, 05] -003F; [07 F6, 05, 05] -FF1F; [07 F6, 05, 07] -FE56; [07 F6, 05, 1D] -2048; [07 F6, 05, 09][07 EE, 05, 09] -2047; [07 F6, 05, 09][07 F6, 05, 09] +16EC; [07 F6, 05, 05] -00BF; [07 F8, 05, 05] +16ED; [07 F8, 05, 05] -055E; [07 FA, 05, 05] +0021; [07 FA, 05, 05] +FF01; [07 FA, 05, 07] +FE57; [07 FA, 05, 1D] +FE15; [07 FA, 05, 2B] +203C; [07 FA, 05, 09][07 FA, 05, 09] +2049; [07 FA, 05, 09][08 09, 05, 09] -061F; [07 FC, 05, 05] +00A1; [07 FC, 05, 05] -0709; [07 FE, 05, 05] +055C; [07 FE, 05, 05] -1367; [08 05, 05, 05] +07F9; [08 05, 05, 05] -1945; [08 07, 05, 05] +1944; [08 07, 05, 05] -203D; [08 09, 05, 05] +003F; [08 09, 05, 05] +FF1F; [08 09, 05, 07] +FE56; [08 09, 05, 1D] +FE16; [08 09, 05, 2B] +2048; [08 09, 05, 09][07 FA, 05, 09] +2047; [08 09, 05, 09][08 09, 05, 09] -002E; [08 0B, 05, 05] -FF0E; [08 0B, 05, 07] -2024; [08 0B, 05, 09] -FE52; [08 0B, 05, 1D] -2025; [08 0B, 05, 09][08 0B, 05, 09] -FE30; [08 0B, 05, 2B][08 0B, 05, 2B] -2026; [08 0B, 05, 09][08 0B, 05, 09][08 0B, 05, 3D] +00BF; [08 0B, 05, 05] -1801; [08 0D, 05, 05] +055E; [08 0D, 05, 05] -06D4; [08 0F, 05, 05] +061F; [08 0F, 05, 05] -0701; [08 11, 05, 05] +0709; [08 11, 05, 05] -0702; [08 13, 05, 05] +1367; [08 13, 05, 05] -1362; [08 15, 05, 05] +1945; [08 15, 05, 05] -1803; [08 17, 05, 05] +2CFA; [08 17, 05, 05] -1809; [08 19, 05, 05] +2CFB; [08 19, 05, 05] -166E; [08 1B, 05, 05] +203D; [08 1B, 05, 05] -3002; [08 1D, 05, 05] -FF61; [08 1D, 05, A3] +002E; [08 1D, 05, 05] +FF0E; [08 1D, 05, 07] +2024; [08 1D, 05, 09] +FE52; [08 1D, 05, 1D] +2025; [08 1D, 05, 09][08 1D, 05, 09] +FE30; [08 1D, 05, 2B][08 1D, 05, 2B] +2026; [08 1D, 05, 09][08 1D, 05, 09][08 1D, 05, 3D] +FE19; [08 1D, 05, 2B][08 1D, 05, 2B][08 1D, 05, 3D] -00B7; [08 1F, 05, 05] -0387; [08 1F, 05, 05] +1801; [08 1F, 05, 05] -0964; [08 21, 05, 05] +06D4; [08 21, 05, 05] -0965; [08 23, 05, 05] +0701; [08 23, 05, 05] -1735; [08 25, 05, 05] +0702; [08 25, 05, 05] -1736; [08 27, 05, 05] +1362; [08 27, 05, 05] -104A; [08 29, 05, 05] +1803; [08 29, 05, 05] -104B; [08 2B, 05, 05] +1809; [08 2B, 05, 05] -17D4; [08 2D, 05, 05] +166E; [08 2D, 05, 05] -17D5; [08 2F, 05, 05] +1B5C; [08 2F, 05, 05] -0700; [08 31, 05, 05] +2CF9; [08 31, 05, 05] -10FB; [08 33, 05, 05] +2CFE; [08 33, 05, 05] -1368; [08 35, 05, 05] +3002; [08 35, 05, 05] +FF61; [08 35, 05, A3] +FE12; [08 35, 05, 2B] -D800 DD00; [08 37, 05, 05] +00B7; [08 37, 05, 05] +0387; [08 37, 05, 05] -D800 DD01; [08 39, 05, 05] +0964; [08 39, 05, 05] -D800 DD02; [08 3B, 05, 05] +0965; [08 3B, 05, 05] -D800 DF9F; [08 3D, 05, 05] +A876; [08 3D, 05, 05] -0027; [08 3F, 05, 05] -FF07; [08 3F, 05, 07] +A877; [08 3F, 05, 05] -2018; [08 41, 05, 05] +1735; [08 41, 05, 05] -2019; [08 43, 05, 05] +1736; [08 43, 05, 05] -201A; [08 45, 05, 05] +104A; [08 45, 05, 05] -201B; [08 47, 05, 05] +104B; [08 47, 05, 05] -2039; [08 49, 05, 05] +17D4; [08 49, 05, 05] -203A; [08 4B, 05, 05] +17D5; [08 4B, 05, 05] -0022; [08 4D, 05, 05] -FF02; [08 4D, 05, 07] +1B5E; [08 4D, 05, 05] -201C; [08 4F, 05, 05] +1B5F; [08 4F, 05, 05] -201D; [08 51, 05, 05] +D802 DE56; [08 51, 05, 05] -201E; [08 53, 05, 05] +D802 DE57; [08 53, 05, 05] -201F; [08 55, 05, 05] +0700; [08 55, 05, 05] -301D; [08 57, 05, 05] +07F7; [08 57, 05, 05] -301E; [08 59, 05, 05] - -301F; [08 5B, 05, 05] - -00AB; [08 5D, 05, 05] - -00BB; [08 5F, 05, 05] - -0028; [08 61, 05, 05] -FF08; [08 61, 05, 07] -FE59; [08 61, 05, 1D] -207D; [08 61, 05, 27] -208D; [08 61, 05, 29] -FE35; [08 61, 05, 2B] -2474; [08 61, 05, 09][23 72, 05, 09][08 63, 05, 3D] -247D; [08 61, 05, 09][23 72, 05, 09][23 70, 05, 3D][08 63, 05, 3D] -247E; [08 61, 05, 09][23 72, 05, 09][23 72, 05, 3D][08 63, 05, 3D] -247F; [08 61, 05, 09][23 72, 05, 09][23 74, 05, 3D][08 63, 05, 3D] -2480; [08 61, 05, 09][23 72, 05, 09][23 76, 05, 3D][08 63, 05, 3D] -2481; [08 61, 05, 09][23 72, 05, 09][23 78, 05, 3D][08 63, 05, 3D] -2482; [08 61, 05, 09][23 72, 05, 09][23 7A, 05, 3D][08 63, 05, 3D] -2483; [08 61, 05, 09][23 72, 05, 09][23 7C, 05, 3D][08 63, 05, 3D] -2484; [08 61, 05, 09][23 72, 05, 09][23 7E, 05, 3D][08 63, 05, 3D] -2485; [08 61, 05, 09][23 72, 05, 09][23 80, 05, 3D][08 63, 05, 3D] -2486; [08 61, 05, 09][23 72, 05, 09][23 82, 05, 3D][08 63, 05, 3D] -2475; [08 61, 05, 09][23 74, 05, 09][08 63, 05, 3D] -2487; [08 61, 05, 09][23 74, 05, 09][23 70, 05, 3D][08 63, 05, 3D] -2476; [08 61, 05, 09][23 76, 05, 09][08 63, 05, 3D] -2477; [08 61, 05, 09][23 78, 05, 09][08 63, 05, 3D] -2478; [08 61, 05, 09][23 7A, 05, 09][08 63, 05, 3D] -2479; [08 61, 05, 09][23 7C, 05, 09][08 63, 05, 3D] -247A; [08 61, 05, 09][23 7E, 05, 09][08 63, 05, 3D] -247B; [08 61, 05, 09][23 80, 05, 09][08 63, 05, 3D] -247C; [08 61, 05, 09][23 82, 05, 09][08 63, 05, 3D] -249C; [08 61, 05, 09][26, 05, 09][08 63, 05, 3D] -249D; [08 61, 05, 09][28, 05, 09][08 63, 05, 3D] -249E; [08 61, 05, 09][2A, 05, 09][08 63, 05, 3D] -249F; [08 61, 05, 09][2C, 05, 09][08 63, 05, 3D] -24A0; [08 61, 05, 09][2E, 05, 09][08 63, 05, 3D] -24A1; [08 61, 05, 09][30, 05, 09][08 63, 05, 3D] -24A2; [08 61, 05, 09][32, 05, 09][08 63, 05, 3D] -24A3; [08 61, 05, 09][34, 05, 09][08 63, 05, 3D] -24A4; [08 61, 05, 09][36, 05, 09][08 63, 05, 3D] -24A5; [08 61, 05, 09][38, 05, 09][08 63, 05, 3D] -24A6; [08 61, 05, 09][3A, 05, 09][08 63, 05, 3D] -24A7; [08 61, 05, 09][3C, 05, 09][08 63, 05, 3D] -24A8; [08 61, 05, 09][3E, 05, 09][08 63, 05, 3D] -24A9; [08 61, 05, 09][40, 05, 09][08 63, 05, 3D] -24AA; [08 61, 05, 09][42, 05, 09][08 63, 05, 3D] -24AB; [08 61, 05, 09][44, 05, 09][08 63, 05, 3D] -24AC; [08 61, 05, 09][46, 05, 09][08 63, 05, 3D] -24AD; [08 61, 05, 09][48, 05, 09][08 63, 05, 3D] -24AE; [08 61, 05, 09][4A, 05, 09][08 63, 05, 3D] -24AF; [08 61, 05, 09][4C, 05, 09][08 63, 05, 3D] -24B0; [08 61, 05, 09][4E, 05, 09][08 63, 05, 3D] -24B1; [08 61, 05, 09][50, 05, 09][08 63, 05, 3D] -24B2; [08 61, 05, 09][52, 05, 09][08 63, 05, 3D] -24B3; [08 61, 05, 09][54, 05, 09][08 63, 05, 3D] -24B4; [08 61, 05, 09][56, 05, 09][08 63, 05, 3D] -24B5; [08 61, 05, 09][58, 05, 09][08 63, 05, 3D] -3200; [08 61, 05, 09][87 20, 05, 09][08 63, 05, 3D] -320E; [08 61, 05, 09][87 20, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3201; [08 61, 05, 09][87 24, 05, 09][08 63, 05, 3D] -320F; [08 61, 05, 09][87 24, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3202; [08 61, 05, 09][87 26, 05, 09][08 63, 05, 3D] -3210; [08 61, 05, 09][87 26, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3203; [08 61, 05, 09][87 2A, 05, 09][08 63, 05, 3D] -3211; [08 61, 05, 09][87 2A, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3204; [08 61, 05, 09][87 2C, 05, 09][08 63, 05, 3D] -3212; [08 61, 05, 09][87 2C, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3205; [08 61, 05, 09][87 2E, 05, 09][08 63, 05, 3D] -3213; [08 61, 05, 09][87 2E, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3206; [08 61, 05, 09][87 32, 05, 09][08 63, 05, 3D] -3214; [08 61, 05, 09][87 32, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3207; [08 61, 05, 09][87 36, 05, 09][08 63, 05, 3D] -3215; [08 61, 05, 09][87 36, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -321D; [08 61, 05, 09][87 36, 05, 09][87 58, 05, 3D][87 38, 05, 3D][87 50, 05, 3D][87 7A, 05, 3D][08 63, 05, 3D] -321E; [08 61, 05, 09][87 36, 05, 09][87 58, 05, 3D][87 44, 05, 3D][87 62, 05, 3D][08 63, 05, 3D] -3208; [08 61, 05, 09][87 38, 05, 09][08 63, 05, 3D] -3216; [08 61, 05, 09][87 38, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -321C; [08 61, 05, 09][87 38, 05, 09][87 62, 05, 3D][08 63, 05, 3D] -3209; [08 61, 05, 09][87 3C, 05, 09][08 63, 05, 3D] -3217; [08 61, 05, 09][87 3C, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -320A; [08 61, 05, 09][87 3E, 05, 09][08 63, 05, 3D] -3218; [08 61, 05, 09][87 3E, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -320B; [08 61, 05, 09][87 40, 05, 09][08 63, 05, 3D] -3219; [08 61, 05, 09][87 40, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -320C; [08 61, 05, 09][87 42, 05, 09][08 63, 05, 3D] -321A; [08 61, 05, 09][87 42, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -320D; [08 61, 05, 09][87 44, 05, 09][08 63, 05, 3D] -321B; [08 61, 05, 09][87 44, 05, 09][87 48, 05, 3D][08 63, 05, 3D] -3220; [08 61, 05, 09][E0 04 06, 05, 09][08 63, 05, 3D] -3226; [08 61, 05, 09][E0 04 0C, 05, 09][08 63, 05, 3D] -3222; [08 61, 05, 09][E0 04 18, 05, 09][08 63, 05, 3D] -3228; [08 61, 05, 09][E0 04 C0, 05, 09][08 63, 05, 3D] -3221; [08 61, 05, 09][E0 05 24, 05, 09][08 63, 05, 3D] -3224; [08 61, 05, 09][E0 05 34, 05, 09][08 63, 05, 3D] -3239; [08 61, 05, 09][E0 05 D2, 05, 09][08 63, 05, 3D] -323D; [08 61, 05, 09][E0 06 14, 05, 09][08 63, 05, 3D] -3241; [08 61, 05, 09][E0 06 34, 05, 09][08 63, 05, 3D] -3227; [08 61, 05, 09][E0 0B 06, 05, 09][08 63, 05, 3D] -3225; [08 61, 05, 09][E0 0B 0A, 05, 09][08 63, 05, 3D] -3238; [08 61, 05, 09][E0 0D A4, 05, 09][08 63, 05, 3D] -3229; [08 61, 05, 09][E0 0E C4, 05, 09][08 63, 05, 3D] -323F; [08 61, 05, 09][E0 0E EA, 05, 09][08 63, 05, 3D] -3234; [08 61, 05, 09][E0 10 68, 05, 09][08 63, 05, 3D] -323A; [08 61, 05, 09][E0 11 4C, 05, 09][08 63, 05, 3D] -3223; [08 61, 05, 09][E0 16 28, 05, 09][08 63, 05, 3D] -322F; [08 61, 05, 09][E0 16 B0, 05, 09][08 63, 05, 3D] -323B; [08 61, 05, 09][E0 1F 74, 05, 09][08 63, 05, 3D] -3230; [08 61, 05, 09][E0 34 F0, 05, 09][08 63, 05, 3D] -322A; [08 61, 05, 09][E0 37 48, 05, 09][08 63, 05, 3D] -3232; [08 61, 05, 09][E0 37 4A, 05, 09][08 63, 05, 3D] -322D; [08 61, 05, 09][E0 37 88, 05, 09][08 63, 05, 3D] -3231; [08 61, 05, 09][E0 39 98, 05, 09][08 63, 05, 3D] -322C; [08 61, 05, 09][E0 41 DC, 05, 09][08 63, 05, 3D] -322B; [08 61, 05, 09][E0 4A 80, 05, 09][08 63, 05, 3D] -3235; [08 61, 05, 09][E0 4E B4, 05, 09][08 63, 05, 3D] -323C; [08 61, 05, 09][E0 57 BE, 05, 09][08 63, 05, 3D] -3233; [08 61, 05, 09][E0 5C 92, 05, 09][08 63, 05, 3D] -3237; [08 61, 05, 09][E0 5C D0, 05, 09][08 63, 05, 3D] -3240; [08 61, 05, 09][E0 5C F0, 05, 09][08 63, 05, 3D] -3242; [08 61, 05, 09][E0 6E 56, 05, 09][08 63, 05, 3D] -3243; [08 61, 05, 09][E0 6E 68, 05, 09][08 63, 05, 3D] -3236; [08 61, 05, 09][E0 84 48, 05, 09][08 63, 05, 3D] -323E; [08 61, 05, 09][E0 84 94, 05, 09][08 63, 05, 3D] -322E; [08 61, 05, 09][E0 8E E4, 05, 09][08 63, 05, 3D] - -0029; [08 63, 05, 05] -FF09; [08 63, 05, 07] -FE5A; [08 63, 05, 1D] -207E; [08 63, 05, 27] -208E; [08 63, 05, 29] -FE36; [08 63, 05, 2B] - -005B; [08 65, 05, 05] -FF3B; [08 65, 05, 07] -FE47; [08 65, 05, 2B] - -005D; [08 67, 05, 05] -FF3D; [08 67, 05, 07] -FE48; [08 67, 05, 2B] - -007B; [08 69, 05, 05] -FF5B; [08 69, 05, 07] -FE5B; [08 69, 05, 1D] -FE37; [08 69, 05, 2B] - -007D; [08 6B, 05, 05] -FF5D; [08 6B, 05, 07] -FE5C; [08 6B, 05, 1D] -FE38; [08 6B, 05, 2B] - -0F3A; [08 6D, 05, 05] - -0F3B; [08 6F, 05, 05] - -0F3C; [08 71, 05, 05] - -0F3D; [08 73, 05, 05] +10FB; [08 59, 05, 05] -169B; [08 75, 05, 05] +1360; [08 5B, 05, 05] -169C; [08 77, 05, 05] +1368; [08 5D, 05, 05] -2045; [08 79, 05, 05] +1A1E; [08 5F, 05, 05] -2046; [08 7B, 05, 05] +1A1F; [08 61, 05, 05] -29FC; [08 7D, 05, 05] +1B5A; [08 63, 05, 05] -29FD; [08 7F, 05, 05] +1B5B; [08 65, 05, 05] -2983; [08 81, 05, 05] +2055; [08 67, 05, 05] -2984; [08 83, 05, 05] +2056; [08 69, 05, 05] -2985; [08 85, 05, 05] -FF5F; [08 85, 05, 07] +2058; [08 6B, 05, 05] -2986; [08 87, 05, 05] -FF60; [08 87, 05, 07] +2059; [08 6D, 05, 05] -2987; [08 89, 05, 05] +205A; [08 6F, 05, 05] -2988; [08 8B, 05, 05] +205B; [08 71, 05, 05] -2989; [08 8D, 05, 05] +205C; [08 73, 05, 05] -298A; [08 8F, 05, 05] +205D; [08 75, 05, 05] -298B; [08 91, 05, 05] +205E; [08 77, 05, 05] -298C; [08 93, 05, 05] +2CFC; [08 79, 05, 05] -298D; [08 95, 05, 05] +2CFF; [08 7B, 05, 05] -298E; [08 97, 05, 05] +D800 DD00; [08 7D, 05, 05] -298F; [08 99, 05, 05] +D800 DD01; [08 7F, 05, 05] -2990; [08 9B, 05, 05] +D800 DD02; [08 81, 05, 05] -2991; [08 9D, 05, 05] +D800 DF9F; [08 83, 05, 05] -2992; [08 9F, 05, 05] +D800 DFD0; [08 85, 05, 05] -2993; [08 A1, 05, 05] +D802 DD1F; [08 87, 05, 05] -2994; [08 A3, 05, 05] +D809 DC70; [08 89, 05, 05] -2995; [08 A5, 05, 05] +D809 DC71; [08 8B, 05, 05] -2996; [08 A7, 05, 05] +D809 DC72; [08 8D, 05, 05] -2997; [08 A9, 05, 05] +D809 DC73; [08 8F, 05, 05] -2998; [08 AB, 05, 05] +0027; [08 91, 05, 05] +FF07; [08 91, 05, 07] -2329; [08 AD, 05, 05] -3008; [08 AD, 05, 05] -FE3F; [08 AD, 05, 2B] +2018; [08 93, 05, 05] -232A; [08 AF, 05, 05] -3009; [08 AF, 05, 05] -FE40; [08 AF, 05, 2B] +2019; [08 95, 05, 05] -300A; [08 B1, 05, 05] -FE3D; [08 B1, 05, 2B] +201A; [08 97, 05, 05] -300B; [08 B3, 05, 05] -FE3E; [08 B3, 05, 2B] +201B; [08 99, 05, 05] -300C; [08 B5, 05, 05] -FF62; [08 B5, 05, A3] -FE41; [08 B5, 05, 2B] +2039; [08 9B, 05, 05] -300D; [08 B7, 05, 05] -FF63; [08 B7, 05, A3] -FE42; [08 B7, 05, 2B] +203A; [08 9D, 05, 05] -300E; [08 B9, 05, 05] -FE43; [08 B9, 05, 2B] +0022; [08 9F, 05, 05] +FF02; [08 9F, 05, 07] -300F; [08 BB, 05, 05] -FE44; [08 BB, 05, 2B] +201C; [08 A1, 05, 05] -3010; [08 BD, 05, 05] -FE3B; [08 BD, 05, 2B] +201D; [08 A3, 05, 05] -3011; [08 BF, 05, 05] -FE3C; [08 BF, 05, 2B] +201E; [08 A5, 05, 05] -3014; [08 C1, 05, 05] -FE5D; [08 C1, 05, 1D] -FE39; [08 C1, 05, 2B] +201F; [08 A7, 05, 05] -3015; [08 C3, 05, 05] -FE5E; [08 C3, 05, 1D] -FE3A; [08 C3, 05, 2B] +301D; [08 A9, 05, 05] -3016; [08 C5, 05, 05] +301E; [08 AB, 05, 05] -3017; [08 C7, 05, 05] +301F; [08 AD, 05, 05] -3018; [08 C9, 05, 05] +00AB; [08 AF, 05, 05] -3019; [08 CB, 05, 05] +00BB; [08 B1, 05, 05] -301A; [08 CD, 05, 05] +0028; [08 B3, 05, 05] +FF08; [08 B3, 05, 07] +FE59; [08 B3, 05, 1D] +207D; [08 B3, 05, 27] +208D; [08 B3, 05, 29] +FE35; [08 B3, 05, 2B] +2474; [08 B3, 05, 09][26 7C, 05, 09][08 B5, 05, 3D] +247D; [08 B3, 05, 09][26 7C, 05, 09][26 7A, 05, 3D][08 B5, 05, 3D] +247E; [08 B3, 05, 09][26 7C, 05, 09][26 7C, 05, 3D][08 B5, 05, 3D] +247F; [08 B3, 05, 09][26 7C, 05, 09][26 7E, 05, 3D][08 B5, 05, 3D] +2480; [08 B3, 05, 09][26 7C, 05, 09][26 80, 05, 3D][08 B5, 05, 3D] +2481; [08 B3, 05, 09][26 7C, 05, 09][26 82, 05, 3D][08 B5, 05, 3D] +2482; [08 B3, 05, 09][26 7C, 05, 09][26 84, 05, 3D][08 B5, 05, 3D] +2483; [08 B3, 05, 09][26 7C, 05, 09][26 86, 05, 3D][08 B5, 05, 3D] +2484; [08 B3, 05, 09][26 7C, 05, 09][26 88, 05, 3D][08 B5, 05, 3D] +2485; [08 B3, 05, 09][26 7C, 05, 09][26 8A, 05, 3D][08 B5, 05, 3D] +2486; [08 B3, 05, 09][26 7C, 05, 09][26 8C, 05, 3D][08 B5, 05, 3D] +2475; [08 B3, 05, 09][26 7E, 05, 09][08 B5, 05, 3D] +2487; [08 B3, 05, 09][26 7E, 05, 09][26 7A, 05, 3D][08 B5, 05, 3D] +2476; [08 B3, 05, 09][26 80, 05, 09][08 B5, 05, 3D] +2477; [08 B3, 05, 09][26 82, 05, 09][08 B5, 05, 3D] +2478; [08 B3, 05, 09][26 84, 05, 09][08 B5, 05, 3D] +2479; [08 B3, 05, 09][26 86, 05, 09][08 B5, 05, 3D] +247A; [08 B3, 05, 09][26 88, 05, 09][08 B5, 05, 3D] +247B; [08 B3, 05, 09][26 8A, 05, 09][08 B5, 05, 3D] +247C; [08 B3, 05, 09][26 8C, 05, 09][08 B5, 05, 3D] +249C; [08 B3, 05, 09][29, 05, 09][08 B5, 05, 3D] +249D; [08 B3, 05, 09][2B, 05, 09][08 B5, 05, 3D] +249E; [08 B3, 05, 09][2D, 05, 09][08 B5, 05, 3D] +249F; [08 B3, 05, 09][2F, 05, 09][08 B5, 05, 3D] +24A0; [08 B3, 05, 09][31, 05, 09][08 B5, 05, 3D] +24A1; [08 B3, 05, 09][33, 05, 09][08 B5, 05, 3D] +24A2; [08 B3, 05, 09][35, 05, 09][08 B5, 05, 3D] +24A3; [08 B3, 05, 09][37, 05, 09][08 B5, 05, 3D] +24A4; [08 B3, 05, 09][39, 05, 09][08 B5, 05, 3D] +24A5; [08 B3, 05, 09][3B, 05, 09][08 B5, 05, 3D] +24A6; [08 B3, 05, 09][3D, 05, 09][08 B5, 05, 3D] +24A7; [08 B3, 05, 09][3F, 05, 09][08 B5, 05, 3D] +24A8; [08 B3, 05, 09][41, 05, 09][08 B5, 05, 3D] +24A9; [08 B3, 05, 09][43, 05, 09][08 B5, 05, 3D] +24AA; [08 B3, 05, 09][45, 05, 09][08 B5, 05, 3D] +24AB; [08 B3, 05, 09][47, 05, 09][08 B5, 05, 3D] +24AC; [08 B3, 05, 09][49, 05, 09][08 B5, 05, 3D] +24AD; [08 B3, 05, 09][4B, 05, 09][08 B5, 05, 3D] +24AE; [08 B3, 05, 09][4D, 05, 09][08 B5, 05, 3D] +24AF; [08 B3, 05, 09][4F, 05, 09][08 B5, 05, 3D] +24B0; [08 B3, 05, 09][51, 05, 09][08 B5, 05, 3D] +24B1; [08 B3, 05, 09][53, 05, 09][08 B5, 05, 3D] +24B2; [08 B3, 05, 09][55, 05, 09][08 B5, 05, 3D] +24B3; [08 B3, 05, 09][57, 05, 09][08 B5, 05, 3D] +24B4; [08 B3, 05, 09][59, 05, 09][08 B5, 05, 3D] +24B5; [08 B3, 05, 09][5B, 05, 09][08 B5, 05, 3D] +3200; [08 B3, 05, 09][94 20, 05, 09][08 B5, 05, 3D] +320E; [08 B3, 05, 09][94 20, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3201; [08 B3, 05, 09][94 24, 05, 09][08 B5, 05, 3D] +320F; [08 B3, 05, 09][94 24, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3202; [08 B3, 05, 09][94 26, 05, 09][08 B5, 05, 3D] +3210; [08 B3, 05, 09][94 26, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3203; [08 B3, 05, 09][94 2A, 05, 09][08 B5, 05, 3D] +3211; [08 B3, 05, 09][94 2A, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3204; [08 B3, 05, 09][94 2C, 05, 09][08 B5, 05, 3D] +3212; [08 B3, 05, 09][94 2C, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3205; [08 B3, 05, 09][94 2E, 05, 09][08 B5, 05, 3D] +3213; [08 B3, 05, 09][94 2E, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3206; [08 B3, 05, 09][94 32, 05, 09][08 B5, 05, 3D] +3214; [08 B3, 05, 09][94 32, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3207; [08 B3, 05, 09][94 36, 05, 09][08 B5, 05, 3D] +3215; [08 B3, 05, 09][94 36, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +321D; [08 B3, 05, 09][94 36, 05, 09][94 58, 05, 3D][94 38, 05, 3D][94 50, 05, 3D][94 7A, 05, 3D][08 B5, 05, 3D] +321E; [08 B3, 05, 09][94 36, 05, 09][94 58, 05, 3D][94 44, 05, 3D][94 62, 05, 3D][08 B5, 05, 3D] +3208; [08 B3, 05, 09][94 38, 05, 09][08 B5, 05, 3D] +3216; [08 B3, 05, 09][94 38, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +321C; [08 B3, 05, 09][94 38, 05, 09][94 62, 05, 3D][08 B5, 05, 3D] +3209; [08 B3, 05, 09][94 3C, 05, 09][08 B5, 05, 3D] +3217; [08 B3, 05, 09][94 3C, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +320A; [08 B3, 05, 09][94 3E, 05, 09][08 B5, 05, 3D] +3218; [08 B3, 05, 09][94 3E, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +320B; [08 B3, 05, 09][94 40, 05, 09][08 B5, 05, 3D] +3219; [08 B3, 05, 09][94 40, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +320C; [08 B3, 05, 09][94 42, 05, 09][08 B5, 05, 3D] +321A; [08 B3, 05, 09][94 42, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +320D; [08 B3, 05, 09][94 44, 05, 09][08 B5, 05, 3D] +321B; [08 B3, 05, 09][94 44, 05, 09][94 48, 05, 3D][08 B5, 05, 3D] +3220; [08 B3, 05, 09][E0 04 06, 05, 09][08 B5, 05, 3D] +3226; [08 B3, 05, 09][E0 04 0C, 05, 09][08 B5, 05, 3D] +3222; [08 B3, 05, 09][E0 04 18, 05, 09][08 B5, 05, 3D] +3228; [08 B3, 05, 09][E0 04 C0, 05, 09][08 B5, 05, 3D] +3221; [08 B3, 05, 09][E0 05 24, 05, 09][08 B5, 05, 3D] +3224; [08 B3, 05, 09][E0 05 34, 05, 09][08 B5, 05, 3D] +3239; [08 B3, 05, 09][E0 05 D2, 05, 09][08 B5, 05, 3D] +323D; [08 B3, 05, 09][E0 06 14, 05, 09][08 B5, 05, 3D] +3241; [08 B3, 05, 09][E0 06 34, 05, 09][08 B5, 05, 3D] +3227; [08 B3, 05, 09][E0 0B 06, 05, 09][08 B5, 05, 3D] +3225; [08 B3, 05, 09][E0 0B 0A, 05, 09][08 B5, 05, 3D] +3238; [08 B3, 05, 09][E0 0D A4, 05, 09][08 B5, 05, 3D] +3229; [08 B3, 05, 09][E0 0E C4, 05, 09][08 B5, 05, 3D] +323F; [08 B3, 05, 09][E0 0E EA, 05, 09][08 B5, 05, 3D] +3234; [08 B3, 05, 09][E0 10 68, 05, 09][08 B5, 05, 3D] +323A; [08 B3, 05, 09][E0 11 4C, 05, 09][08 B5, 05, 3D] +3223; [08 B3, 05, 09][E0 16 28, 05, 09][08 B5, 05, 3D] +322F; [08 B3, 05, 09][E0 16 B0, 05, 09][08 B5, 05, 3D] +323B; [08 B3, 05, 09][E0 1F 74, 05, 09][08 B5, 05, 3D] +3230; [08 B3, 05, 09][E0 34 F0, 05, 09][08 B5, 05, 3D] +322A; [08 B3, 05, 09][E0 37 48, 05, 09][08 B5, 05, 3D] +3232; [08 B3, 05, 09][E0 37 4A, 05, 09][08 B5, 05, 3D] +322D; [08 B3, 05, 09][E0 37 88, 05, 09][08 B5, 05, 3D] +3231; [08 B3, 05, 09][E0 39 98, 05, 09][08 B5, 05, 3D] +322C; [08 B3, 05, 09][E0 41 DC, 05, 09][08 B5, 05, 3D] +322B; [08 B3, 05, 09][E0 4A 80, 05, 09][08 B5, 05, 3D] +3235; [08 B3, 05, 09][E0 4E B4, 05, 09][08 B5, 05, 3D] +323C; [08 B3, 05, 09][E0 57 BE, 05, 09][08 B5, 05, 3D] +3233; [08 B3, 05, 09][E0 5C 92, 05, 09][08 B5, 05, 3D] +3237; [08 B3, 05, 09][E0 5C D0, 05, 09][08 B5, 05, 3D] +3240; [08 B3, 05, 09][E0 5C F0, 05, 09][08 B5, 05, 3D] +3242; [08 B3, 05, 09][E0 6E 56, 05, 09][08 B5, 05, 3D] +3243; [08 B3, 05, 09][E0 6E 68, 05, 09][08 B5, 05, 3D] +3236; [08 B3, 05, 09][E0 84 48, 05, 09][08 B5, 05, 3D] +323E; [08 B3, 05, 09][E0 84 94, 05, 09][08 B5, 05, 3D] +322E; [08 B3, 05, 09][E0 8E E4, 05, 09][08 B5, 05, 3D] + +0029; [08 B5, 05, 05] +FF09; [08 B5, 05, 07] +FE5A; [08 B5, 05, 1D] +207E; [08 B5, 05, 27] +208E; [08 B5, 05, 29] +FE36; [08 B5, 05, 2B] + +005B; [08 B7, 05, 05] +FF3B; [08 B7, 05, 07] +FE47; [08 B7, 05, 2B] + +005D; [08 B9, 05, 05] +FF3D; [08 B9, 05, 07] +FE48; [08 B9, 05, 2B] + +007B; [08 BB, 05, 05] +FF5B; [08 BB, 05, 07] +FE5B; [08 BB, 05, 1D] +FE37; [08 BB, 05, 2B] -301B; [08 CF, 05, 05] +007D; [08 BD, 05, 05] +FF5D; [08 BD, 05, 07] +FE5C; [08 BD, 05, 1D] +FE38; [08 BD, 05, 2B] -FD3E; [08 D1, 05, 05] +0F3A; [08 BF, 05, 05] -FD3F; [08 D3, 05, 05] +0F3B; [08 C1, 05, 05] -00A7; [08 D5, 05, 05] +0F3C; [08 C3, 05, 05] -00B6; [08 D7, 05, 05] +0F3D; [08 C5, 05, 05] -204B; [08 D9, 05, 05] +169B; [08 C7, 05, 05] -00A9; [08 DB, 05, 05] +169C; [08 C9, 05, 05] -00AE; [08 DD, 05, 05] +2045; [08 CB, 05, 05] -0040; [08 DF, 05, 05] -FF20; [08 DF, 05, 07] -FE6B; [08 DF, 05, 1D] +2046; [08 CD, 05, 05] -002A; [08 E1, 05, 05] -FF0A; [08 E1, 05, 07] -FE61; [08 E1, 05, 1D] +29FC; [08 CF, 05, 05] -204E; [08 E3, 05, 05] +29FD; [08 D1, 05, 05] -2051; [08 E5, 05, 05] +2983; [08 D3, 05, 05] -066D; [08 E7, 05, 05] +2984; [08 D5, 05, 05] -002F; [08 E9, 05, 05] -FF0F; [08 E9, 05, 07] +2985; [08 D7, 05, 05] +FF5F; [08 D7, 05, 07] -2044; [08 EB, 05, 05] +2986; [08 D9, 05, 05] +FF60; [08 D9, 05, 07] -005C; [08 ED, 05, 05] -FF3C; [08 ED, 05, 07] -FE68; [08 ED, 05, 1D] +2987; [08 DB, 05, 05] -0026; [08 EF, 05, 05] -FF06; [08 EF, 05, 07] -FE60; [08 EF, 05, 1D] +2988; [08 DD, 05, 05] -214B; [08 F1, 05, 05] +2989; [08 DF, 05, 05] -204A; [08 F3, 05, 05] +298A; [08 E1, 05, 05] -0023; [08 F5, 05, 05] -FF03; [08 F5, 05, 07] -FE5F; [08 F5, 05, 1D] +298B; [08 E3, 05, 05] -0025; [08 F7, 05, 05] -FF05; [08 F7, 05, 07] -FE6A; [08 F7, 05, 1D] +298C; [08 E5, 05, 05] -066A; [08 F9, 05, 05] +298D; [08 E7, 05, 05] -2030; [08 FB, 05, 05] +298E; [08 E9, 05, 05] -2031; [08 FD, 05, 05] +298F; [08 EB, 05, 05] -2052; [09 05, 05, 05] +2990; [08 ED, 05, 05] -2020; [09 07, 05, 05] +2991; [08 EF, 05, 05] -2021; [09 09, 05, 05] +2992; [08 F1, 05, 05] -2022; [09 0B, 05, 05] +2993; [08 F3, 05, 05] -2023; [09 0D, 05, 05] +2994; [08 F5, 05, 05] -2027; [09 0F, 05, 05] +2995; [08 F7, 05, 05] -2043; [09 11, 05, 05] +2996; [08 F9, 05, 05] -204C; [09 13, 05, 05] +2997; [08 FB, 05, 05] -204D; [09 15, 05, 05] +2998; [08 FD, 05, 05] -2032; [09 17, 05, 05] -2033; [09 17, 05, 09][09 17, 05, 09] -2034; [09 17, 05, 09][09 17, 05, 09][09 17, 05, 3D] -2057; [09 17, 05, 09][09 17, 05, 09][09 17, 05, 3D][09 17, 05, 3D] +2E02; [09 05, 05, 05] -2035; [09 19, 05, 05] -2036; [09 19, 05, 09][09 19, 05, 09] -2037; [09 19, 05, 09][09 19, 05, 09][09 19, 05, 3D] +2E03; [09 07, 05, 05] -3003; [09 1B, 05, 05] +2E04; [09 09, 05, 05] -303D; [09 1D, 05, 05] +2E05; [09 0B, 05, 05] -2038; [09 1F, 05, 05] +2E09; [09 0D, 05, 05] -203B; [09 21, 05, 05] +2E0A; [09 0F, 05, 05] -203F; [09 23, 05, 05] +2E0C; [09 11, 05, 05] -2054; [09 25, 05, 05] +2E0D; [09 13, 05, 05] -2040; [09 27, 05, 05] +2E1C; [09 15, 05, 05] -2050; [09 29, 05, 05] +2E1D; [09 17, 05, 05] -2041; [09 2B, 05, 05] +2329; [09 19, 05, 05] +3008; [09 19, 05, 05] +FE3F; [09 19, 05, 2B] -2042; [09 2D, 05, 05] +232A; [09 1B, 05, 05] +3009; [09 1B, 05, 05] +FE40; [09 1B, 05, 2B] -055A; [09 2F, 05, 05] +300A; [09 1D, 05, 05] +FE3D; [09 1D, 05, 2B] -055B; [09 31, 05, 05] +300B; [09 1F, 05, 05] +FE3E; [09 1F, 05, 2B] -055F; [09 33, 05, 05] +300C; [09 21, 05, 05] +FF62; [09 21, 05, A3] +FE41; [09 21, 05, 2B] -05BE; [09 35, 05, 05] +300D; [09 23, 05, 05] +FF63; [09 23, 05, A3] +FE42; [09 23, 05, 2B] -05C0; [09 37, 05, 05] +300E; [09 25, 05, 05] +FE43; [09 25, 05, 2B] -05C3; [09 39, 05, 05] +300F; [09 27, 05, 05] +FE44; [09 27, 05, 2B] -05F3; [09 3B, 05, 05] +3010; [09 29, 05, 05] +FE3B; [09 29, 05, 2B] -05F4; [09 3D, 05, 05] +3011; [09 2B, 05, 05] +FE3C; [09 2B, 05, 2B] -070A; [09 3F, 05, 05] +3014; [09 2D, 05, 05] +FE5D; [09 2D, 05, 1D] +FE39; [09 2D, 05, 2B] -070B; [09 41, 05, 05] +3015; [09 2F, 05, 05] +FE5E; [09 2F, 05, 1D] +FE3A; [09 2F, 05, 2B] -070C; [09 43, 05, 05] +3016; [09 31, 05, 05] +FE17; [09 31, 05, 2B] -070D; [09 45, 05, 05] +3017; [09 33, 05, 05] +FE18; [09 33, 05, 2B] -1800; [09 47, 05, 05] +3018; [09 35, 05, 05] -180A; [09 49, 05, 05] +3019; [09 37, 05, 05] -0970; [09 4B, 05, 05] +301A; [09 39, 05, 05] -0DF4; [09 4D, 05, 05] +301B; [09 3B, 05, 05] -0E5A; [09 4F, 05, 05] +FD3E; [09 3D, 05, 05] -0E5B; [09 51, 05, 05] +FD3F; [09 3F, 05, 05] -0F04; [09 53, 05, 05] +00A7; [09 41, 05, 05] -0F05; [09 55, 05, 05] +00B6; [09 43, 05, 05] -0F06; [09 57, 05, 05] +204B; [09 45, 05, 05] -0F07; [09 59, 05, 05] +00A9; [09 47, 05, 05] -0F08; [09 5B, 05, 05] +00AE; [09 49, 05, 05] -0F09; [09 5D, 05, 05] +0040; [09 4B, 05, 05] +FF20; [09 4B, 05, 07] +FE6B; [09 4B, 05, 1D] -0F0A; [09 5F, 05, 05] +002A; [09 4D, 05, 05] +FF0A; [09 4D, 05, 07] +FE61; [09 4D, 05, 1D] -0F0B; [09 61, 05, 05] -0F0C; [09 61, 05, 35] +204E; [09 4F, 05, 05] -0F0D; [09 63, 05, 05] +2051; [09 51, 05, 05] -0F0E; [09 65, 05, 05] +066D; [09 53, 05, 05] -0F0F; [09 67, 05, 05] +002F; [09 55, 05, 05] +FF0F; [09 55, 05, 07] -0F10; [09 69, 05, 05] +2044; [09 57, 05, 05] -0F11; [09 6B, 05, 05] +005C; [09 59, 05, 05] +FF3C; [09 59, 05, 07] +FE68; [09 59, 05, 1D] -0F12; [09 6D, 05, 05] +0026; [09 5B, 05, 05] +FF06; [09 5B, 05, 07] +FE60; [09 5B, 05, 1D] -0F85; [09 6F, 05, 05] +214B; [09 5D, 05, 05] -1940; [09 71, 05, 05] +204A; [09 5F, 05, 05] -104C; [09 73, 05, 05] +0023; [09 61, 05, 05] +FF03; [09 61, 05, 07] +FE5F; [09 61, 05, 1D] -104D; [09 75, 05, 05] +0025; [09 63, 05, 05] +FF05; [09 63, 05, 07] +FE6A; [09 63, 05, 1D] -104E; [09 77, 05, 05] +066A; [09 65, 05, 05] -104F; [09 79, 05, 05] +2030; [09 67, 05, 05] -17D7; [09 7B, 05, 05] +2031; [09 69, 05, 05] -17D8; [09 7D, 05, 05] +2052; [09 6B, 05, 05] -17D9; [09 7F, 05, 05] +2020; [09 6D, 05, 05] -17DA; [09 81, 05, 05] +2021; [09 6F, 05, 05] -166D; [09 83, 05, 05] +2022; [09 71, 05, 05] -02B9; [09 85, 05, 05] -0374; [09 85, 05, 05] +2023; [09 73, 05, 05] -0375; [09 87, 05, 05] +2027; [09 75, 05, 05] -02BA; [09 89, 05, 05] +2043; [09 77, 05, 05] -02C2; [09 8B, 05, 05] +204C; [09 79, 05, 05] -02C3; [09 8D, 05, 05] +204D; [09 7B, 05, 05] -02C4; [09 8F, 05, 05] +2032; [09 7D, 05, 05] +2033; [09 7D, 05, 09][09 7D, 05, 09] +2034; [09 7D, 05, 09][09 7D, 05, 09][09 7D, 05, 3D] +2057; [09 7D, 05, 09][09 7D, 05, 09][09 7D, 05, 3D][09 7D, 05, 3D] -02C5; [09 91, 05, 05] +2035; [09 7F, 05, 05] +2036; [09 7F, 05, 09][09 7F, 05, 09] +2037; [09 7F, 05, 09][09 7F, 05, 09][09 7F, 05, 3D] -02C6; [09 93, 05, 05] +3003; [09 81, 05, 05] -02C7; [09 95, 05, 05] +303D; [09 83, 05, 05] -02C8; [09 97, 05, 05] +2038; [09 85, 05, 05] -02C9; [09 99, 05, 05] +203B; [09 87, 05, 05] -02CA; [09 9B, 05, 05] +203F; [09 89, 05, 05] -02CB; [09 9D, 05, 05] +2054; [09 8B, 05, 05] -02CC; [09 9F, 05, 05] +2040; [09 8D, 05, 05] -02CD; [09 A1, 05, 05] +2050; [09 8F, 05, 05] -02CE; [09 A3, 05, 05] +2041; [09 91, 05, 05] -02CF; [09 A5, 05, 05] +2042; [09 93, 05, 05] -02D2; [09 A7, 05, 05] +2E00; [09 95, 05, 05] -02D3; [09 A9, 05, 05] +2E01; [09 97, 05, 05] -02D4; [09 AB, 05, 05] +2E06; [09 99, 05, 05] -02D5; [09 AD, 05, 05] +2E07; [09 9B, 05, 05] -02D6; [09 AF, 05, 05] +2E08; [09 9D, 05, 05] -02D7; [09 B1, 05, 05] +2E0B; [09 9F, 05, 05] -02DE; [09 B3, 05, 05] +2E0E; [09 A1, 05, 05] -02DF; [09 B5, 05, 05] +2E0F; [09 A3, 05, 05] -02E5; [09 B7, 05, 05] +2E10; [09 A5, 05, 05] -02E6; [09 B9, 05, 05] +2E11; [09 A7, 05, 05] -02E7; [09 BB, 05, 05] +2E12; [09 A9, 05, 05] -02E8; [09 BD, 05, 05] +2E13; [09 AB, 05, 05] -02E9; [09 BF, 05, 05] +2E14; [09 AD, 05, 05] -02EA; [09 C1, 05, 05] +2E15; [09 AF, 05, 05] -02EB; [09 C3, 05, 05] +2E16; [09 B1, 05, 05] -02EC; [09 C5, 05, 05] +055A; [09 B3, 05, 05] -02ED; [09 C7, 05, 05] +055B; [09 B5, 05, 05] -02EF; [09 C9, 05, 05] +055F; [09 B7, 05, 05] -02F0; [09 CB, 05, 05] +05BE; [09 B9, 05, 05] -02F1; [09 CD, 05, 05] +05C0; [09 BB, 05, 05] -02F2; [09 CF, 05, 05] +05C3; [09 BD, 05, 05] -02F3; [09 D1, 05, 05] +05C6; [09 BF, 05, 05] -02F4; [09 D3, 05, 05] +05F3; [09 C1, 05, 05] -02F5; [09 D5, 05, 05] +05F4; [09 C3, 05, 05] -02F6; [09 D7, 05, 05] +070A; [09 C5, 05, 05] -02F7; [09 D9, 05, 05] +070B; [09 C7, 05, 05] -02F8; [09 DB, 05, 05] +070C; [09 C9, 05, 05] -02F9; [09 DD, 05, 05] +070D; [09 CB, 05, 05] -02FA; [09 DF, 05, 05] +1800; [09 CD, 05, 05] -02FB; [09 E1, 05, 05] +180A; [09 CF, 05, 05] -02FC; [09 E3, 05, 05] +0970; [09 D1, 05, 05] -02FD; [09 E5, 05, 05] +0DF4; [09 D3, 05, 05] -02FE; [09 E7, 05, 05] +0E5A; [09 D5, 05, 05] -02FF; [09 E9, 05, 05] +0E5B; [09 D7, 05, 05] -00B0; [09 EB, 05, 05] -2103; [09 EB, 05, 09][2A, 05, 93] -2109; [09 EB, 05, 09][30, 05, 93] +0F04; [09 D9, 05, 05] -0482; [09 ED, 05, 05] +0F05; [09 DB, 05, 05] -060E; [09 EF, 05, 05] +0F06; [09 DD, 05, 05] -060F; [09 F1, 05, 05] +0F07; [09 DF, 05, 05] -06E9; [09 F3, 05, 05] +0F08; [09 E1, 05, 05] -FDFD; [09 F5, 05, 05] +0F09; [09 E3, 05, 05] -09FA; [09 F7, 05, 05] +0F0A; [09 E5, 05, 05] -0B70; [09 F9, 05, 05] +0FD0; [09 E7, 05, 05] -0BF3; [09 FB, 05, 05] +0FD1; [09 E9, 05, 05] -0BF4; [09 FD, 05, 05] +0F0B; [09 EB, 05, 05] +0F0C; [09 EB, 05, 35] -0BF5; [0A 05, 05, 05] +0F0D; [09 ED, 05, 05] -0BF6; [0A 07, 05, 05] +0F0E; [09 EF, 05, 05] -0BF7; [0A 09, 05, 05] +0F0F; [09 F1, 05, 05] -0BF8; [0A 0B, 05, 05] +0F10; [09 F3, 05, 05] -0BFA; [0A 0D, 05, 05] +0F11; [09 F5, 05, 05] -0E4F; [0A 0F, 05, 05] +0F12; [09 F7, 05, 05] -0F01; [0A 11, 05, 05] +0F85; [09 F9, 05, 05] -0F02; [0A 13, 05, 05] +1940; [09 FB, 05, 05] -0F03; [0A 15, 05, 05] +104C; [09 FD, 05, 05] -0F13; [0A 17, 05, 05] +104D; [0A 05, 05, 05] -0F15; [0A 19, 05, 05] +104E; [0A 07, 05, 05] -0F16; [0A 1B, 05, 05] +104F; [0A 09, 05, 05] -0F17; [0A 1D, 05, 05] +17D7; [0A 0B, 05, 05] -0F1A; [0A 1F, 05, 05] +17D8; [0A 0D, 05, 05] -0F1B; [0A 21, 05, 05] +17D9; [0A 0F, 05, 05] -0F1C; [0A 23, 05, 05] +17DA; [0A 11, 05, 05] -0F1D; [0A 25, 05, 05] +166D; [0A 13, 05, 05] -0F1E; [0A 27, 05, 05] +A874; [0A 15, 05, 05] -0F1F; [0A 29, 05, 05] +A875; [0A 17, 05, 05] -0F34; [0A 2B, 05, 05] +D802 DE50; [0A 19, 05, 05] -0F36; [0A 2D, 05, 05] +D802 DE51; [0A 1B, 05, 05] -0F38; [0A 2F, 05, 05] +D802 DE52; [0A 1D, 05, 05] -0F3E; [0A 31, 05, 05] +D802 DE53; [0A 1F, 05, 05] -0F3F; [0A 33, 05, 05] +D802 DE54; [0A 21, 05, 05] -0FBE; [0A 35, 05, 05] +D802 DE55; [0A 23, 05, 05] -0FBF; [0A 37, 05, 05] +D802 DE58; [0A 25, 05, 05] -0FC0; [0A 39, 05, 05] +02B9; [0A 27, 05, 05] +0374; [0A 27, 05, 05] -0FC1; [0A 3B, 05, 05] +0375; [0A 29, 05, 05] -0FC2; [0A 3D, 05, 05] +02BA; [0A 2B, 05, 05] -0FC3; [0A 3F, 05, 05] +02C2; [0A 2D, 05, 05] -0FC4; [0A 41, 05, 05] +02C3; [0A 2F, 05, 05] -0FC5; [0A 43, 05, 05] +02C4; [0A 31, 05, 05] -0FC7; [0A 45, 05, 05] +02C5; [0A 33, 05, 05] -0FC8; [0A 47, 05, 05] +02C6; [0A 35, 05, 05] -0FC9; [0A 49, 05, 05] +02C7; [0A 37, 05, 05] -0FCA; [0A 4B, 05, 05] +02C8; [0A 39, 05, 05] -0FCB; [0A 4D, 05, 05] +02C9; [0A 3B, 05, 05] -0FCC; [0A 4F, 05, 05] +02CA; [0A 3D, 05, 05] -0FCF; [0A 51, 05, 05] +02CB; [0A 3F, 05, 05] -19E0; [0A 53, 05, 05] +02CC; [0A 41, 05, 05] -19E1; [0A 55, 05, 05] +02CD; [0A 43, 05, 05] -19E2; [0A 57, 05, 05] +02CE; [0A 45, 05, 05] -19E3; [0A 59, 05, 05] +02CF; [0A 47, 05, 05] -19E4; [0A 5B, 05, 05] +02D2; [0A 49, 05, 05] -19E5; [0A 5D, 05, 05] +02D3; [0A 4B, 05, 05] -19E6; [0A 5F, 05, 05] +02D4; [0A 4D, 05, 05] -19E7; [0A 61, 05, 05] +02D5; [0A 4F, 05, 05] -19E8; [0A 63, 05, 05] +02D6; [0A 51, 05, 05] -19E9; [0A 65, 05, 05] +02D7; [0A 53, 05, 05] -19EA; [0A 67, 05, 05] +02DE; [0A 55, 05, 05] -19EB; [0A 69, 05, 05] +02DF; [0A 57, 05, 05] -19EC; [0A 6B, 05, 05] +02E5; [0A 59, 05, 05] -19ED; [0A 6D, 05, 05] +02E6; [0A 5B, 05, 05] -19EE; [0A 6F, 05, 05] +02E7; [0A 5D, 05, 05] -19EF; [0A 71, 05, 05] +02E8; [0A 5F, 05, 05] -19F0; [0A 73, 05, 05] +02E9; [0A 61, 05, 05] -19F1; [0A 75, 05, 05] +02EA; [0A 63, 05, 05] -19F2; [0A 77, 05, 05] +02EB; [0A 65, 05, 05] -19F3; [0A 79, 05, 05] +02EC; [0A 67, 05, 05] -19F4; [0A 7B, 05, 05] +02ED; [0A 69, 05, 05] -19F5; [0A 7D, 05, 05] +02EF; [0A 6B, 05, 05] -19F6; [0A 7F, 05, 05] +02F0; [0A 6D, 05, 05] -19F7; [0A 81, 05, 05] +02F1; [0A 6F, 05, 05] -19F8; [0A 83, 05, 05] +02F2; [0A 71, 05, 05] -19F9; [0A 85, 05, 05] +02F3; [0A 73, 05, 05] -19FA; [0A 87, 05, 05] +02F4; [0A 75, 05, 05] -19FB; [0A 89, 05, 05] +02F5; [0A 77, 05, 05] -19FC; [0A 8B, 05, 05] +02F6; [0A 79, 05, 05] -19FD; [0A 8D, 05, 05] +02F7; [0A 7B, 05, 05] -19FE; [0A 8F, 05, 05] +02F8; [0A 7D, 05, 05] -19FF; [0A 91, 05, 05] +02F9; [0A 7F, 05, 05] -2104; [0A 93, 05, 05] +02FA; [0A 81, 05, 05] -2108; [0A 95, 05, 05] +02FB; [0A 83, 05, 05] -2114; [0A 97, 05, 05] +02FC; [0A 85, 05, 05] -2117; [0A 99, 05, 05] +02FD; [0A 87, 05, 05] -2118; [0A 9B, 05, 05] +02FE; [0A 89, 05, 05] -211E; [0A 9D, 05, 05] +02FF; [0A 8B, 05, 05] -211F; [0A 9F, 05, 05] +1390; [0A 8D, 05, 05] -2123; [0A A1, 05, 05] +1391; [0A 8F, 05, 05] -2125; [0A A3, 05, 05] +1392; [0A 91, 05, 05] -2127; [0A A5, 05, 05] +1393; [0A 93, 05, 05] -2129; [0A A7, 05, 05] +1394; [0A 95, 05, 05] -212E; [0A A9, 05, 05] +1395; [0A 97, 05, 05] -2132; [0A AB, 05, 05] +1396; [0A 99, 05, 05] -213A; [0A AD, 05, 05] +1397; [0A 9B, 05, 05] -2141; [0A AF, 05, 05] +1398; [0A 9D, 05, 05] -2142; [0A B1, 05, 05] +1399; [0A 9F, 05, 05] -2143; [0A B3, 05, 05] +A700; [0A A1, 05, 05] -2144; [0A B5, 05, 05] +A701; [0A A3, 05, 05] -214A; [0A B7, 05, 05] +A702; [0A A5, 05, 05] -2190; [0A B9, 05, 05] -FFE9; [0A B9, 05, A3] -219A; [0A B9, 05, 05][, A5, 05] +A703; [0A A7, 05, 05] -2192; [0A BB, 05, 05] -FFEB; [0A BB, 05, A3] -219B; [0A BB, 05, 05][, A5, 05] +A704; [0A A9, 05, 05] -2191; [0A BD, 05, 05] -FFEA; [0A BD, 05, A3] +A705; [0A AB, 05, 05] -2193; [0A BF, 05, 05] -FFEC; [0A BF, 05, A3] +A706; [0A AD, 05, 05] -2194; [0A C1, 05, 05] -21AE; [0A C1, 05, 05][, A5, 05] +A707; [0A AF, 05, 05] -2195; [0A C3, 05, 05] +A708; [0A B1, 05, 05] -2196; [0A C5, 05, 05] +A709; [0A B3, 05, 05] -2197; [0A C7, 05, 05] +A70A; [0A B5, 05, 05] -2198; [0A C9, 05, 05] +A70B; [0A B7, 05, 05] -2199; [0A CB, 05, 05] +A70C; [0A B9, 05, 05] -219C; [0A CD, 05, 05] +A70D; [0A BB, 05, 05] -219D; [0A CF, 05, 05] +A70E; [0A BD, 05, 05] -219E; [0A D1, 05, 05] +A70F; [0A BF, 05, 05] -219F; [0A D3, 05, 05] +A710; [0A C1, 05, 05] -21A0; [0A D5, 05, 05] +A711; [0A C3, 05, 05] -21A1; [0A D7, 05, 05] +A712; [0A C5, 05, 05] -21A2; [0A D9, 05, 05] +A713; [0A C7, 05, 05] -21A3; [0A DB, 05, 05] +A714; [0A C9, 05, 05] -21A4; [0A DD, 05, 05] +A715; [0A CB, 05, 05] -21A5; [0A DF, 05, 05] +A716; [0A CD, 05, 05] -21A6; [0A E1, 05, 05] +A717; [0A CF, 05, 05] -21A7; [0A E3, 05, 05] +A718; [0A D1, 05, 05] -21A8; [0A E5, 05, 05] +A719; [0A D3, 05, 05] -21A9; [0A E7, 05, 05] +A71A; [0A D5, 05, 05] -21AA; [0A E9, 05, 05] +A720; [0A D7, 05, 05] -21AB; [0A EB, 05, 05] +A721; [0A D9, 05, 05] -21AC; [0A ED, 05, 05] +00B0; [0A DB, 05, 05] +2103; [0A DB, 05, 09][2D, 05, 93] +2109; [0A DB, 05, 09][33, 05, 93] -21AD; [0A EF, 05, 05] +0482; [0A DD, 05, 05] -21AF; [0A F1, 05, 05] +060E; [0A DF, 05, 05] -21B0; [0A F3, 05, 05] +060F; [0A E1, 05, 05] -21B1; [0A F5, 05, 05] +06E9; [0A E3, 05, 05] -21B2; [0A F7, 05, 05] +FDFD; [0A E5, 05, 05] -21B3; [0A F9, 05, 05] +07F6; [0A E7, 05, 05] -21B4; [0A FB, 05, 05] +09FA; [0A E9, 05, 05] -21B5; [0A FD, 05, 05] +0B70; [0A EB, 05, 05] -21B6; [0B 05, 05, 05] +0BF3; [0A ED, 05, 05] -21B7; [0B 07, 05, 05] +0BF4; [0A EF, 05, 05] -21B8; [0B 09, 05, 05] +0BF5; [0A F1, 05, 05] -21B9; [0B 0B, 05, 05] +0BF6; [0A F3, 05, 05] -21BA; [0B 0D, 05, 05] +0BF7; [0A F5, 05, 05] -21BB; [0B 0F, 05, 05] +0BF8; [0A F7, 05, 05] -21BC; [0B 11, 05, 05] +0BFA; [0A F9, 05, 05] -21BD; [0B 13, 05, 05] +0CF1; [0A FB, 05, 05] -21BE; [0B 15, 05, 05] +0CF2; [0A FD, 05, 05] -21BF; [0B 17, 05, 05] +A828; [0B 05, 05, 05] -21C0; [0B 19, 05, 05] +A829; [0B 07, 05, 05] -21C1; [0B 1B, 05, 05] +A82A; [0B 09, 05, 05] -21C2; [0B 1D, 05, 05] +A82B; [0B 0B, 05, 05] -21C3; [0B 1F, 05, 05] +0E4F; [0B 0D, 05, 05] -21C4; [0B 21, 05, 05] +0F01; [0B 0F, 05, 05] -21C5; [0B 23, 05, 05] +0F02; [0B 11, 05, 05] -21C6; [0B 25, 05, 05] +0F03; [0B 13, 05, 05] -21C7; [0B 27, 05, 05] +0F13; [0B 15, 05, 05] -21C8; [0B 29, 05, 05] +0F15; [0B 17, 05, 05] -21C9; [0B 2B, 05, 05] +0F16; [0B 19, 05, 05] -21CA; [0B 2D, 05, 05] +0F17; [0B 1B, 05, 05] -21CB; [0B 2F, 05, 05] +0F1A; [0B 1D, 05, 05] -21CC; [0B 31, 05, 05] +0F1B; [0B 1F, 05, 05] -21D0; [0B 33, 05, 05] -21CD; [0B 33, 05, 05][, A5, 05] +0F1C; [0B 21, 05, 05] -21D1; [0B 35, 05, 05] +0F1D; [0B 23, 05, 05] -21D2; [0B 37, 05, 05] -21CF; [0B 37, 05, 05][, A5, 05] +0F1E; [0B 25, 05, 05] -21D3; [0B 39, 05, 05] +0F1F; [0B 27, 05, 05] -21D4; [0B 3B, 05, 05] -21CE; [0B 3B, 05, 05][, A5, 05] +0F34; [0B 29, 05, 05] -21D5; [0B 3D, 05, 05] +0F36; [0B 2B, 05, 05] -21D6; [0B 3F, 05, 05] +0F38; [0B 2D, 05, 05] -21D7; [0B 41, 05, 05] +0F3E; [0B 2F, 05, 05] -21D8; [0B 43, 05, 05] +0F3F; [0B 31, 05, 05] -21D9; [0B 45, 05, 05] +0FBE; [0B 33, 05, 05] -21DA; [0B 47, 05, 05] +0FBF; [0B 35, 05, 05] -21DB; [0B 49, 05, 05] +0FC0; [0B 37, 05, 05] -21DC; [0B 4B, 05, 05] +0FC1; [0B 39, 05, 05] -21DD; [0B 4D, 05, 05] +0FC2; [0B 3B, 05, 05] -21DE; [0B 4F, 05, 05] +0FC3; [0B 3D, 05, 05] -21DF; [0B 51, 05, 05] +0FC4; [0B 3F, 05, 05] -21E0; [0B 53, 05, 05] +0FC5; [0B 41, 05, 05] -21E1; [0B 55, 05, 05] +0FC7; [0B 43, 05, 05] -21E2; [0B 57, 05, 05] +0FC8; [0B 45, 05, 05] -21E3; [0B 59, 05, 05] +0FC9; [0B 47, 05, 05] -21E4; [0B 5B, 05, 05] +0FCA; [0B 49, 05, 05] -21E5; [0B 5D, 05, 05] +0FCB; [0B 4B, 05, 05] -21E6; [0B 5F, 05, 05] +0FCC; [0B 4D, 05, 05] -21E7; [0B 61, 05, 05] +0FCF; [0B 4F, 05, 05] -21E8; [0B 63, 05, 05] +19E0; [0B 51, 05, 05] -21E9; [0B 65, 05, 05] +19E1; [0B 53, 05, 05] -21EA; [0B 67, 05, 05] +19E2; [0B 55, 05, 05] -21EB; [0B 69, 05, 05] +19E3; [0B 57, 05, 05] -21EC; [0B 6B, 05, 05] +19E4; [0B 59, 05, 05] -21ED; [0B 6D, 05, 05] +19E5; [0B 5B, 05, 05] -21EE; [0B 6F, 05, 05] +19E6; [0B 5D, 05, 05] -21EF; [0B 71, 05, 05] +19E7; [0B 5F, 05, 05] -21F0; [0B 73, 05, 05] +19E8; [0B 61, 05, 05] -21F1; [0B 75, 05, 05] +19E9; [0B 63, 05, 05] -21F2; [0B 77, 05, 05] +19EA; [0B 65, 05, 05] -21F3; [0B 79, 05, 05] +19EB; [0B 67, 05, 05] -21F4; [0B 7B, 05, 05] +19EC; [0B 69, 05, 05] -21F5; [0B 7D, 05, 05] +19ED; [0B 6B, 05, 05] -21F6; [0B 7F, 05, 05] +19EE; [0B 6D, 05, 05] -21F7; [0B 81, 05, 05] +19EF; [0B 6F, 05, 05] -21F8; [0B 83, 05, 05] +19F0; [0B 71, 05, 05] -21F9; [0B 85, 05, 05] +19F1; [0B 73, 05, 05] -21FA; [0B 87, 05, 05] +19F2; [0B 75, 05, 05] -21FB; [0B 89, 05, 05] +19F3; [0B 77, 05, 05] -21FC; [0B 8B, 05, 05] +19F4; [0B 79, 05, 05] -21FD; [0B 8D, 05, 05] +19F5; [0B 7B, 05, 05] -21FE; [0B 8F, 05, 05] +19F6; [0B 7D, 05, 05] -21FF; [0B 91, 05, 05] +19F7; [0B 7F, 05, 05] -2200; [0B 93, 05, 05] +19F8; [0B 81, 05, 05] -2201; [0B 95, 05, 05] +19F9; [0B 83, 05, 05] -2202; [0B 97, 05, 05] -D835 DEDB; [0B 97, 05, 0B] -D835 DF15; [0B 97, 05, 0B] -D835 DF4F; [0B 97, 05, 0B] -D835 DF89; [0B 97, 05, 0B] -D835 DFC3; [0B 97, 05, 0B] +19FA; [0B 85, 05, 05] -2203; [0B 99, 05, 05] -2204; [0B 99, 05, 05][, A5, 05] +19FB; [0B 87, 05, 05] -2205; [0B 9B, 05, 05] +19FC; [0B 89, 05, 05] -2206; [0B 9D, 05, 05] +19FD; [0B 8B, 05, 05] -2207; [0B 9F, 05, 05] -D835 DEC1; [0B 9F, 05, 0B] -D835 DEFB; [0B 9F, 05, 0B] -D835 DF35; [0B 9F, 05, 0B] -D835 DF6F; [0B 9F, 05, 0B] -D835 DFA9; [0B 9F, 05, 0B] +19FE; [0B 8D, 05, 05] -2208; [0B A1, 05, 05] -2209; [0B A1, 05, 05][, A5, 05] +19FF; [0B 8F, 05, 05] -220A; [0B A3, 05, 05] +1B61; [0B 91, 05, 05] -220B; [0B A5, 05, 05] -220C; [0B A5, 05, 05][, A5, 05] +1B62; [0B 93, 05, 05] -220D; [0B A7, 05, 05] +1B63; [0B 95, 05, 05] -03F6; [0B A9, 05, 05] +1B64; [0B 97, 05, 05] -220E; [0B AB, 05, 05] +1B65; [0B 99, 05, 05] -220F; [0B AD, 05, 05] +1B66; [0B 9B, 05, 05] -2210; [0B AF, 05, 05] +1B67; [0B 9D, 05, 05] -2211; [0B B1, 05, 05] -2140; [0B B1, 05, 0B] +1B68; [0B 9F, 05, 05] -002B; [0B B3, 05, 05] -FF0B; [0B B3, 05, 07] -FB29; [0B B3, 05, 0B] -FE62; [0B B3, 05, 1D] -207A; [0B B3, 05, 27] -208A; [0B B3, 05, 29] +1B69; [0B A1, 05, 05] -00B1; [0B B5, 05, 05] +1B6A; [0B A3, 05, 05] -00F7; [0B B7, 05, 05] +1B74; [0B A5, 05, 05] -00D7; [0B B9, 05, 05] +1B75; [0B A7, 05, 05] -003C; [0B BB, 05, 05] -FF1C; [0B BB, 05, 07] -FE64; [0B BB, 05, 1D] -226E; [0B BB, 05, 05][, A5, 05] +1B76; [0B A9, 05, 05] -003D; [0B BD, 05, 05] -FF1D; [0B BD, 05, 07] -FE66; [0B BD, 05, 1D] -207C; [0B BD, 05, 27] -208C; [0B BD, 05, 29] -2260; [0B BD, 05, 05][, A5, 05] -2A75; [0B BD, 05, 09][0B BD, 05, 09] -2A76; [0B BD, 05, 09][0B BD, 05, 09][0B BD, 05, 3D] +1B77; [0B AB, 05, 05] -003E; [0B BF, 05, 05] -FF1E; [0B BF, 05, 07] -FE65; [0B BF, 05, 1D] -226F; [0B BF, 05, 05][, A5, 05] +1B78; [0B AD, 05, 05] -00AC; [0B C1, 05, 05] -FFE2; [0B C1, 05, 07] +1B79; [0B AF, 05, 05] -007C; [0B C3, 05, 05] -FF5C; [0B C3, 05, 07] +1B7A; [0B B1, 05, 05] -00A6; [0B C5, 05, 05] -FFE4; [0B C5, 05, 07] +1B7B; [0B B3, 05, 05] -2016; [0B C7, 05, 05] +1B7C; [0B B5, 05, 05] -007E; [0B C9, 05, 05] -FF5E; [0B C9, 05, 07] +2104; [0B B7, 05, 05] -2212; [0B CB, 05, 05] -207B; [0B CB, 05, 27] -208B; [0B CB, 05, 29] +2108; [0B B9, 05, 05] -2213; [0B CD, 05, 05] +2114; [0B BB, 05, 05] -2214; [0B CF, 05, 05] +2117; [0B BD, 05, 05] -2215; [0B D1, 05, 05] +2118; [0B BF, 05, 05] -2216; [0B D3, 05, 05] +211E; [0B C1, 05, 05] -2217; [0B D5, 05, 05] +211F; [0B C3, 05, 05] -2218; [0B D7, 05, 05] +2123; [0B C5, 05, 05] -2219; [0B D9, 05, 05] +2125; [0B C7, 05, 05] -221A; [0B DB, 05, 05] +2127; [0B C9, 05, 05] -221B; [0B DD, 05, 05] +2129; [0B CB, 05, 05] -221C; [0B DF, 05, 05] +212E; [0B CD, 05, 05] -221D; [0B E1, 05, 05] +213A; [0B CF, 05, 05] -221E; [0B E3, 05, 05] +2141; [0B D1, 05, 05] -221F; [0B E5, 05, 05] +2142; [0B D3, 05, 05] -2220; [0B E7, 05, 05] +2143; [0B D5, 05, 05] -2221; [0B E9, 05, 05] +2144; [0B D7, 05, 05] -2222; [0B EB, 05, 05] +214A; [0B D9, 05, 05] -2223; [0B ED, 05, 05] -2224; [0B ED, 05, 05][, A5, 05] +214C; [0B DB, 05, 05] -2225; [0B EF, 05, 05] -2226; [0B EF, 05, 05][, A5, 05] +214D; [0B DD, 05, 05] -2227; [0B F1, 05, 05] +2190; [0B DF, 05, 05] +FFE9; [0B DF, 05, A3] +219A; [0B DF, 05, 05][, A5, 05] -2228; [0B F3, 05, 05] +2192; [0B E1, 05, 05] +FFEB; [0B E1, 05, A3] +219B; [0B E1, 05, 05][, A5, 05] -2229; [0B F5, 05, 05] +2191; [0B E3, 05, 05] +FFEA; [0B E3, 05, A3] -222A; [0B F7, 05, 05] +2193; [0B E5, 05, 05] +FFEC; [0B E5, 05, A3] -222B; [0B F9, 05, 05] -222C; [0B F9, 05, 09][0B F9, 05, 09] -222D; [0B F9, 05, 09][0B F9, 05, 09][0B F9, 05, 3D] -2A0C; [0B F9, 05, 09][0B F9, 05, 09][0B F9, 05, 3D][0B F9, 05, 3D] +2194; [0B E7, 05, 05] +21AE; [0B E7, 05, 05][, A5, 05] -222E; [0B FB, 05, 05] -222F; [0B FB, 05, 09][0B FB, 05, 09] -2230; [0B FB, 05, 09][0B FB, 05, 09][0B FB, 05, 3D] +2195; [0B E9, 05, 05] -2231; [0B FD, 05, 05] +2196; [0B EB, 05, 05] -2232; [0C 05, 05, 05] +2197; [0B ED, 05, 05] -2233; [0C 07, 05, 05] +2198; [0B EF, 05, 05] -2234; [0C 09, 05, 05] +2199; [0B F1, 05, 05] -2235; [0C 0B, 05, 05] +219C; [0B F3, 05, 05] -2236; [0C 0D, 05, 05] +219D; [0B F5, 05, 05] -2237; [0C 0F, 05, 05] +219E; [0B F7, 05, 05] -2238; [0C 11, 05, 05] +219F; [0B F9, 05, 05] -2239; [0C 13, 05, 05] +21A0; [0B FB, 05, 05] -223A; [0C 15, 05, 05] +21A1; [0B FD, 05, 05] -223B; [0C 17, 05, 05] +21A2; [0C 05, 05, 05] -223C; [0C 19, 05, 05] -2241; [0C 19, 05, 05][, A5, 05] +21A3; [0C 07, 05, 05] -223D; [0C 1B, 05, 05] +21A4; [0C 09, 05, 05] -223E; [0C 1D, 05, 05] +21A5; [0C 0B, 05, 05] -223F; [0C 1F, 05, 05] +21A6; [0C 0D, 05, 05] -2240; [0C 21, 05, 05] +21A7; [0C 0F, 05, 05] -2242; [0C 23, 05, 05] +21A8; [0C 11, 05, 05] -2243; [0C 25, 05, 05] -2244; [0C 25, 05, 05][, A5, 05] +21A9; [0C 13, 05, 05] -2245; [0C 27, 05, 05] -2247; [0C 27, 05, 05][, A5, 05] +21AA; [0C 15, 05, 05] -2246; [0C 29, 05, 05] +21AB; [0C 17, 05, 05] -2248; [0C 2B, 05, 05] -2249; [0C 2B, 05, 05][, A5, 05] +21AC; [0C 19, 05, 05] -224A; [0C 2D, 05, 05] +21AD; [0C 1B, 05, 05] -224B; [0C 2F, 05, 05] +21AF; [0C 1D, 05, 05] -224C; [0C 31, 05, 05] +21B0; [0C 1F, 05, 05] -224D; [0C 33, 05, 05] -226D; [0C 33, 05, 05][, A5, 05] +21B1; [0C 21, 05, 05] -224E; [0C 35, 05, 05] +21B2; [0C 23, 05, 05] -224F; [0C 37, 05, 05] +21B3; [0C 25, 05, 05] -2250; [0C 39, 05, 05] +21B4; [0C 27, 05, 05] -2251; [0C 3B, 05, 05] +21B5; [0C 29, 05, 05] -2252; [0C 3D, 05, 05] +21B6; [0C 2B, 05, 05] -2253; [0C 3F, 05, 05] +21B7; [0C 2D, 05, 05] -2254; [0C 41, 05, 05] +21B8; [0C 2F, 05, 05] -2255; [0C 43, 05, 05] +21B9; [0C 31, 05, 05] -2256; [0C 45, 05, 05] +21BA; [0C 33, 05, 05] -2257; [0C 47, 05, 05] +21BB; [0C 35, 05, 05] -2258; [0C 49, 05, 05] +21BC; [0C 37, 05, 05] -2259; [0C 4B, 05, 05] +21BD; [0C 39, 05, 05] -225A; [0C 4D, 05, 05] +21BE; [0C 3B, 05, 05] -225B; [0C 4F, 05, 05] +21BF; [0C 3D, 05, 05] -225C; [0C 51, 05, 05] +21C0; [0C 3F, 05, 05] -225D; [0C 53, 05, 05] +21C1; [0C 41, 05, 05] -225E; [0C 55, 05, 05] +21C2; [0C 43, 05, 05] -225F; [0C 57, 05, 05] +21C3; [0C 45, 05, 05] -2261; [0C 59, 05, 05] -2262; [0C 59, 05, 05][, A5, 05] +21C4; [0C 47, 05, 05] -2263; [0C 5B, 05, 05] +21C5; [0C 49, 05, 05] -2264; [0C 5D, 05, 05] -2270; [0C 5D, 05, 05][, A5, 05] +21C6; [0C 4B, 05, 05] -2265; [0C 5F, 05, 05] -2271; [0C 5F, 05, 05][, A5, 05] +21C7; [0C 4D, 05, 05] -2266; [0C 61, 05, 05] +21C8; [0C 4F, 05, 05] -2267; [0C 63, 05, 05] +21C9; [0C 51, 05, 05] -2268; [0C 65, 05, 05] +21CA; [0C 53, 05, 05] -2269; [0C 67, 05, 05] +21CB; [0C 55, 05, 05] -226A; [0C 69, 05, 05] +21CC; [0C 57, 05, 05] -226B; [0C 6B, 05, 05] +21D0; [0C 59, 05, 05] +21CD; [0C 59, 05, 05][, A5, 05] -226C; [0C 6D, 05, 05] +21D1; [0C 5B, 05, 05] -2272; [0C 6F, 05, 05] -2274; [0C 6F, 05, 05][, A5, 05] +21D2; [0C 5D, 05, 05] +21CF; [0C 5D, 05, 05][, A5, 05] -2273; [0C 71, 05, 05] -2275; [0C 71, 05, 05][, A5, 05] +21D3; [0C 5F, 05, 05] -2276; [0C 73, 05, 05] -2278; [0C 73, 05, 05][, A5, 05] +21D4; [0C 61, 05, 05] +21CE; [0C 61, 05, 05][, A5, 05] -2277; [0C 75, 05, 05] -2279; [0C 75, 05, 05][, A5, 05] +21D5; [0C 63, 05, 05] -227A; [0C 77, 05, 05] -2280; [0C 77, 05, 05][, A5, 05] +21D6; [0C 65, 05, 05] -227B; [0C 79, 05, 05] -2281; [0C 79, 05, 05][, A5, 05] +21D7; [0C 67, 05, 05] -227C; [0C 7B, 05, 05] -22E0; [0C 7B, 05, 05][, A5, 05] +21D8; [0C 69, 05, 05] -227D; [0C 7D, 05, 05] -22E1; [0C 7D, 05, 05][, A5, 05] +21D9; [0C 6B, 05, 05] -227E; [0C 7F, 05, 05] +21DA; [0C 6D, 05, 05] -227F; [0C 81, 05, 05] +21DB; [0C 6F, 05, 05] -2282; [0C 83, 05, 05] -2284; [0C 83, 05, 05][, A5, 05] +21DC; [0C 71, 05, 05] -2283; [0C 85, 05, 05] -2285; [0C 85, 05, 05][, A5, 05] +21DD; [0C 73, 05, 05] -2286; [0C 87, 05, 05] -2288; [0C 87, 05, 05][, A5, 05] +21DE; [0C 75, 05, 05] -2287; [0C 89, 05, 05] -2289; [0C 89, 05, 05][, A5, 05] +21DF; [0C 77, 05, 05] -228A; [0C 8B, 05, 05] +21E0; [0C 79, 05, 05] -228B; [0C 8D, 05, 05] +21E1; [0C 7B, 05, 05] -228C; [0C 8F, 05, 05] +21E2; [0C 7D, 05, 05] -228D; [0C 91, 05, 05] +21E3; [0C 7F, 05, 05] -228E; [0C 93, 05, 05] +21E4; [0C 81, 05, 05] -228F; [0C 95, 05, 05] +21E5; [0C 83, 05, 05] -2290; [0C 97, 05, 05] +21E6; [0C 85, 05, 05] -2291; [0C 99, 05, 05] -22E2; [0C 99, 05, 05][, A5, 05] +21E7; [0C 87, 05, 05] -2292; [0C 9B, 05, 05] -22E3; [0C 9B, 05, 05][, A5, 05] +21E8; [0C 89, 05, 05] -2293; [0C 9D, 05, 05] +21E9; [0C 8B, 05, 05] -2294; [0C 9F, 05, 05] +21EA; [0C 8D, 05, 05] -2295; [0C A1, 05, 05] +21EB; [0C 8F, 05, 05] -2296; [0C A3, 05, 05] +21EC; [0C 91, 05, 05] -2297; [0C A5, 05, 05] +21ED; [0C 93, 05, 05] -2298; [0C A7, 05, 05] +21EE; [0C 95, 05, 05] -2299; [0C A9, 05, 05] +21EF; [0C 97, 05, 05] -229A; [0C AB, 05, 05] +21F0; [0C 99, 05, 05] -229B; [0C AD, 05, 05] +21F1; [0C 9B, 05, 05] -229C; [0C AF, 05, 05] +21F2; [0C 9D, 05, 05] -229D; [0C B1, 05, 05] +21F3; [0C 9F, 05, 05] -229E; [0C B3, 05, 05] +21F4; [0C A1, 05, 05] -229F; [0C B5, 05, 05] +21F5; [0C A3, 05, 05] -22A0; [0C B7, 05, 05] +21F6; [0C A5, 05, 05] -22A1; [0C B9, 05, 05] +21F7; [0C A7, 05, 05] -22A2; [0C BB, 05, 05] -22AC; [0C BB, 05, 05][, A5, 05] +21F8; [0C A9, 05, 05] -22A3; [0C BD, 05, 05] +21F9; [0C AB, 05, 05] -22A4; [0C BF, 05, 05] +21FA; [0C AD, 05, 05] -22A5; [0C C1, 05, 05] +21FB; [0C AF, 05, 05] -22A6; [0C C3, 05, 05] +21FC; [0C B1, 05, 05] -22A7; [0C C5, 05, 05] +21FD; [0C B3, 05, 05] -22A8; [0C C7, 05, 05] -22AD; [0C C7, 05, 05][, A5, 05] +21FE; [0C B5, 05, 05] -22A9; [0C C9, 05, 05] -22AE; [0C C9, 05, 05][, A5, 05] +21FF; [0C B7, 05, 05] -22AA; [0C CB, 05, 05] +2200; [0C B9, 05, 05] -22AB; [0C CD, 05, 05] -22AF; [0C CD, 05, 05][, A5, 05] +2201; [0C BB, 05, 05] -22B0; [0C CF, 05, 05] +2202; [0C BD, 05, 05] +D835 DEDB; [0C BD, 05, 0B] +D835 DF15; [0C BD, 05, 0B] +D835 DF4F; [0C BD, 05, 0B] +D835 DF89; [0C BD, 05, 0B] +D835 DFC3; [0C BD, 05, 0B] -22B1; [0C D1, 05, 05] +2203; [0C BF, 05, 05] +2204; [0C BF, 05, 05][, A5, 05] -22B2; [0C D3, 05, 05] -22EA; [0C D3, 05, 05][, A5, 05] +2205; [0C C1, 05, 05] -22B3; [0C D5, 05, 05] -22EB; [0C D5, 05, 05][, A5, 05] +2206; [0C C3, 05, 05] -22B4; [0C D7, 05, 05] -22EC; [0C D7, 05, 05][, A5, 05] +2207; [0C C5, 05, 05] +D835 DEC1; [0C C5, 05, 0B] +D835 DEFB; [0C C5, 05, 0B] +D835 DF35; [0C C5, 05, 0B] +D835 DF6F; [0C C5, 05, 0B] +D835 DFA9; [0C C5, 05, 0B] -22B5; [0C D9, 05, 05] -22ED; [0C D9, 05, 05][, A5, 05] +2208; [0C C7, 05, 05] +2209; [0C C7, 05, 05][, A5, 05] -22B6; [0C DB, 05, 05] +220A; [0C C9, 05, 05] -22B7; [0C DD, 05, 05] +220B; [0C CB, 05, 05] +220C; [0C CB, 05, 05][, A5, 05] -22B8; [0C DF, 05, 05] +220D; [0C CD, 05, 05] -22B9; [0C E1, 05, 05] +03F6; [0C CF, 05, 05] -22BA; [0C E3, 05, 05] +220E; [0C D1, 05, 05] -22BB; [0C E5, 05, 05] +220F; [0C D3, 05, 05] -22BC; [0C E7, 05, 05] +2210; [0C D5, 05, 05] -22BD; [0C E9, 05, 05] +2211; [0C D7, 05, 05] +2140; [0C D7, 05, 0B] -22BE; [0C EB, 05, 05] +002B; [0C D9, 05, 05] +FF0B; [0C D9, 05, 07] +FB29; [0C D9, 05, 0B] +FE62; [0C D9, 05, 1D] +207A; [0C D9, 05, 27] +208A; [0C D9, 05, 29] -22BF; [0C ED, 05, 05] +00B1; [0C DB, 05, 05] -22C0; [0C EF, 05, 05] +00F7; [0C DD, 05, 05] -22C1; [0C F1, 05, 05] +00D7; [0C DF, 05, 05] -22C2; [0C F3, 05, 05] +003C; [0C E1, 05, 05] +FF1C; [0C E1, 05, 07] +FE64; [0C E1, 05, 1D] +226E; [0C E1, 05, 05][, A5, 05] -22C3; [0C F5, 05, 05] +003D; [0C E3, 05, 05] +FF1D; [0C E3, 05, 07] +FE66; [0C E3, 05, 1D] +207C; [0C E3, 05, 27] +208C; [0C E3, 05, 29] +2260; [0C E3, 05, 05][, A5, 05] +2A75; [0C E3, 05, 09][0C E3, 05, 09] +2A76; [0C E3, 05, 09][0C E3, 05, 09][0C E3, 05, 3D] -22C4; [0C F7, 05, 05] +003E; [0C E5, 05, 05] +FF1E; [0C E5, 05, 07] +FE65; [0C E5, 05, 1D] +226F; [0C E5, 05, 05][, A5, 05] -22C5; [0C F9, 05, 05] +00AC; [0C E7, 05, 05] +FFE2; [0C E7, 05, 07] -22C6; [0C FB, 05, 05] +007C; [0C E9, 05, 05] +FF5C; [0C E9, 05, 07] -22C7; [0C FD, 05, 05] +00A6; [0C EB, 05, 05] +FFE4; [0C EB, 05, 07] -22C8; [0D 05, 05, 05] +2016; [0C ED, 05, 05] -22C9; [0D 07, 05, 05] +007E; [0C EF, 05, 05] +FF5E; [0C EF, 05, 07] -22CA; [0D 09, 05, 05] +2212; [0C F1, 05, 05] +207B; [0C F1, 05, 27] +208B; [0C F1, 05, 29] -22CB; [0D 0B, 05, 05] +2213; [0C F3, 05, 05] -22CC; [0D 0D, 05, 05] +2214; [0C F5, 05, 05] -22CD; [0D 0F, 05, 05] +2215; [0C F7, 05, 05] -22CE; [0D 11, 05, 05] +2216; [0C F9, 05, 05] -22CF; [0D 13, 05, 05] +2217; [0C FB, 05, 05] -22D0; [0D 15, 05, 05] +2218; [0C FD, 05, 05] -22D1; [0D 17, 05, 05] +2219; [0D 05, 05, 05] -22D2; [0D 19, 05, 05] +221A; [0D 07, 05, 05] -22D3; [0D 1B, 05, 05] +221B; [0D 09, 05, 05] -22D4; [0D 1D, 05, 05] +221C; [0D 0B, 05, 05] -22D5; [0D 1F, 05, 05] +221D; [0D 0D, 05, 05] -22D6; [0D 21, 05, 05] +221E; [0D 0F, 05, 05] -22D7; [0D 23, 05, 05] +221F; [0D 11, 05, 05] -22D8; [0D 25, 05, 05] +2220; [0D 13, 05, 05] -22D9; [0D 27, 05, 05] +2221; [0D 15, 05, 05] -22DA; [0D 29, 05, 05] +2222; [0D 17, 05, 05] -22DB; [0D 2B, 05, 05] +2223; [0D 19, 05, 05] +2224; [0D 19, 05, 05][, A5, 05] -22DC; [0D 2D, 05, 05] +2225; [0D 1B, 05, 05] +2226; [0D 1B, 05, 05][, A5, 05] -22DD; [0D 2F, 05, 05] +2227; [0D 1D, 05, 05] -22DE; [0D 31, 05, 05] +2228; [0D 1F, 05, 05] -22DF; [0D 33, 05, 05] +2229; [0D 21, 05, 05] -22E4; [0D 35, 05, 05] +222A; [0D 23, 05, 05] -22E5; [0D 37, 05, 05] +222B; [0D 25, 05, 05] +222C; [0D 25, 05, 09][0D 25, 05, 09] +222D; [0D 25, 05, 09][0D 25, 05, 09][0D 25, 05, 3D] +2A0C; [0D 25, 05, 09][0D 25, 05, 09][0D 25, 05, 3D][0D 25, 05, 3D] -22E6; [0D 39, 05, 05] +222E; [0D 27, 05, 05] +222F; [0D 27, 05, 09][0D 27, 05, 09] +2230; [0D 27, 05, 09][0D 27, 05, 09][0D 27, 05, 3D] -22E7; [0D 3B, 05, 05] +2231; [0D 29, 05, 05] -22E8; [0D 3D, 05, 05] +2232; [0D 2B, 05, 05] -22E9; [0D 3F, 05, 05] +2233; [0D 2D, 05, 05] -22EE; [0D 41, 05, 05] +2234; [0D 2F, 05, 05] -22EF; [0D 43, 05, 05] +2235; [0D 31, 05, 05] -22F0; [0D 45, 05, 05] +2236; [0D 33, 05, 05] -22F1; [0D 47, 05, 05] +2237; [0D 35, 05, 05] -22F2; [0D 49, 05, 05] +2238; [0D 37, 05, 05] -22F3; [0D 4B, 05, 05] +2239; [0D 39, 05, 05] -22F4; [0D 4D, 05, 05] +223A; [0D 3B, 05, 05] -22F5; [0D 4F, 05, 05] +223B; [0D 3D, 05, 05] -22F6; [0D 51, 05, 05] +223C; [0D 3F, 05, 05] +2241; [0D 3F, 05, 05][, A5, 05] -22F7; [0D 53, 05, 05] +223D; [0D 41, 05, 05] -22F8; [0D 55, 05, 05] +223E; [0D 43, 05, 05] -22F9; [0D 57, 05, 05] +223F; [0D 45, 05, 05] -22FA; [0D 59, 05, 05] +2240; [0D 47, 05, 05] -22FB; [0D 5B, 05, 05] +2242; [0D 49, 05, 05] -22FC; [0D 5D, 05, 05] +2243; [0D 4B, 05, 05] +2244; [0D 4B, 05, 05][, A5, 05] -22FD; [0D 5F, 05, 05] +2245; [0D 4D, 05, 05] +2247; [0D 4D, 05, 05][, A5, 05] -22FE; [0D 61, 05, 05] +2246; [0D 4F, 05, 05] -22FF; [0D 63, 05, 05] +2248; [0D 51, 05, 05] +2249; [0D 51, 05, 05][, A5, 05] -2300; [0D 65, 05, 05] +224A; [0D 53, 05, 05] -2301; [0D 67, 05, 05] +224B; [0D 55, 05, 05] -2302; [0D 69, 05, 05] +224C; [0D 57, 05, 05] -2303; [0D 6B, 05, 05] +224D; [0D 59, 05, 05] +226D; [0D 59, 05, 05][, A5, 05] -2304; [0D 6D, 05, 05] +224E; [0D 5B, 05, 05] -2305; [0D 6F, 05, 05] +224F; [0D 5D, 05, 05] -2306; [0D 71, 05, 05] +2250; [0D 5F, 05, 05] -2307; [0D 73, 05, 05] +2251; [0D 61, 05, 05] -2308; [0D 75, 05, 05] +2252; [0D 63, 05, 05] -2309; [0D 77, 05, 05] +2253; [0D 65, 05, 05] -230A; [0D 79, 05, 05] +2254; [0D 67, 05, 05] -230B; [0D 7B, 05, 05] +2255; [0D 69, 05, 05] -230C; [0D 7D, 05, 05] +2256; [0D 6B, 05, 05] -230D; [0D 7F, 05, 05] +2257; [0D 6D, 05, 05] -230E; [0D 81, 05, 05] +2258; [0D 6F, 05, 05] -230F; [0D 83, 05, 05] +2259; [0D 71, 05, 05] -2310; [0D 85, 05, 05] +225A; [0D 73, 05, 05] -2311; [0D 87, 05, 05] +225B; [0D 75, 05, 05] -2312; [0D 89, 05, 05] +225C; [0D 77, 05, 05] -2313; [0D 8B, 05, 05] +225D; [0D 79, 05, 05] -2314; [0D 8D, 05, 05] +225E; [0D 7B, 05, 05] -2315; [0D 8F, 05, 05] +225F; [0D 7D, 05, 05] -2316; [0D 91, 05, 05] +2261; [0D 7F, 05, 05] +2262; [0D 7F, 05, 05][, A5, 05] -2317; [0D 93, 05, 05] +2263; [0D 81, 05, 05] -2318; [0D 95, 05, 05] +2264; [0D 83, 05, 05] +2270; [0D 83, 05, 05][, A5, 05] -2319; [0D 97, 05, 05] +2265; [0D 85, 05, 05] +2271; [0D 85, 05, 05][, A5, 05] -231A; [0D 99, 05, 05] +2266; [0D 87, 05, 05] -231B; [0D 9B, 05, 05] +2267; [0D 89, 05, 05] -231C; [0D 9D, 05, 05] +2268; [0D 8B, 05, 05] -231D; [0D 9F, 05, 05] +2269; [0D 8D, 05, 05] -231E; [0D A1, 05, 05] +226A; [0D 8F, 05, 05] -231F; [0D A3, 05, 05] +226B; [0D 91, 05, 05] -2320; [0D A5, 05, 05] +226C; [0D 93, 05, 05] -2321; [0D A7, 05, 05] +2272; [0D 95, 05, 05] +2274; [0D 95, 05, 05][, A5, 05] -2322; [0D A9, 05, 05] +2273; [0D 97, 05, 05] +2275; [0D 97, 05, 05][, A5, 05] -2323; [0D AB, 05, 05] +2276; [0D 99, 05, 05] +2278; [0D 99, 05, 05][, A5, 05] -2324; [0D AD, 05, 05] +2277; [0D 9B, 05, 05] +2279; [0D 9B, 05, 05][, A5, 05] -2325; [0D AF, 05, 05] +227A; [0D 9D, 05, 05] +2280; [0D 9D, 05, 05][, A5, 05] -2326; [0D B1, 05, 05] +227B; [0D 9F, 05, 05] +2281; [0D 9F, 05, 05][, A5, 05] -2327; [0D B3, 05, 05] +227C; [0D A1, 05, 05] +22E0; [0D A1, 05, 05][, A5, 05] -2328; [0D B5, 05, 05] +227D; [0D A3, 05, 05] +22E1; [0D A3, 05, 05][, A5, 05] -232B; [0D B7, 05, 05] +227E; [0D A5, 05, 05] -232C; [0D B9, 05, 05] +227F; [0D A7, 05, 05] -232D; [0D BB, 05, 05] +2282; [0D A9, 05, 05] +2284; [0D A9, 05, 05][, A5, 05] -232E; [0D BD, 05, 05] +2283; [0D AB, 05, 05] +2285; [0D AB, 05, 05][, A5, 05] -232F; [0D BF, 05, 05] +2286; [0D AD, 05, 05] +2288; [0D AD, 05, 05][, A5, 05] -2330; [0D C1, 05, 05] +2287; [0D AF, 05, 05] +2289; [0D AF, 05, 05][, A5, 05] -2331; [0D C3, 05, 05] +228A; [0D B1, 05, 05] -2332; [0D C5, 05, 05] +228B; [0D B3, 05, 05] -2333; [0D C7, 05, 05] +228C; [0D B5, 05, 05] -2334; [0D C9, 05, 05] +228D; [0D B7, 05, 05] -2335; [0D CB, 05, 05] +228E; [0D B9, 05, 05] -2336; [0D CD, 05, 05] +228F; [0D BB, 05, 05] -2337; [0D CF, 05, 05] +2290; [0D BD, 05, 05] -2338; [0D D1, 05, 05] +2291; [0D BF, 05, 05] +22E2; [0D BF, 05, 05][, A5, 05] -2339; [0D D3, 05, 05] +2292; [0D C1, 05, 05] +22E3; [0D C1, 05, 05][, A5, 05] -233A; [0D D5, 05, 05] +2293; [0D C3, 05, 05] -233B; [0D D7, 05, 05] +2294; [0D C5, 05, 05] -233C; [0D D9, 05, 05] +2295; [0D C7, 05, 05] -233D; [0D DB, 05, 05] +2296; [0D C9, 05, 05] -233E; [0D DD, 05, 05] +2297; [0D CB, 05, 05] -233F; [0D DF, 05, 05] +2298; [0D CD, 05, 05] -2340; [0D E1, 05, 05] +2299; [0D CF, 05, 05] -2341; [0D E3, 05, 05] +229A; [0D D1, 05, 05] -2342; [0D E5, 05, 05] +229B; [0D D3, 05, 05] -2343; [0D E7, 05, 05] +229C; [0D D5, 05, 05] -2344; [0D E9, 05, 05] +229D; [0D D7, 05, 05] -2345; [0D EB, 05, 05] +229E; [0D D9, 05, 05] -2346; [0D ED, 05, 05] +229F; [0D DB, 05, 05] -2347; [0D EF, 05, 05] +22A0; [0D DD, 05, 05] -2348; [0D F1, 05, 05] +22A1; [0D DF, 05, 05] -2349; [0D F3, 05, 05] +22A2; [0D E1, 05, 05] +22AC; [0D E1, 05, 05][, A5, 05] -234A; [0D F5, 05, 05] +22A3; [0D E3, 05, 05] -234B; [0D F7, 05, 05] +22A4; [0D E5, 05, 05] -234C; [0D F9, 05, 05] +22A5; [0D E7, 05, 05] -234D; [0D FB, 05, 05] +22A6; [0D E9, 05, 05] -234E; [0D FD, 05, 05] +22A7; [0D EB, 05, 05] -234F; [0E 05, 05, 05] +22A8; [0D ED, 05, 05] +22AD; [0D ED, 05, 05][, A5, 05] -2350; [0E 07, 05, 05] +22A9; [0D EF, 05, 05] +22AE; [0D EF, 05, 05][, A5, 05] -2351; [0E 09, 05, 05] +22AA; [0D F1, 05, 05] -2352; [0E 0B, 05, 05] +22AB; [0D F3, 05, 05] +22AF; [0D F3, 05, 05][, A5, 05] -2353; [0E 0D, 05, 05] +22B0; [0D F5, 05, 05] -2354; [0E 0F, 05, 05] +22B1; [0D F7, 05, 05] -2355; [0E 11, 05, 05] +22B2; [0D F9, 05, 05] +22EA; [0D F9, 05, 05][, A5, 05] -2356; [0E 13, 05, 05] +22B3; [0D FB, 05, 05] +22EB; [0D FB, 05, 05][, A5, 05] -2357; [0E 15, 05, 05] +22B4; [0D FD, 05, 05] +22EC; [0D FD, 05, 05][, A5, 05] -2358; [0E 17, 05, 05] +22B5; [0E 05, 05, 05] +22ED; [0E 05, 05, 05][, A5, 05] -2359; [0E 19, 05, 05] +22B6; [0E 07, 05, 05] -235A; [0E 1B, 05, 05] +22B7; [0E 09, 05, 05] -235B; [0E 1D, 05, 05] +22B8; [0E 0B, 05, 05] -235C; [0E 1F, 05, 05] +22B9; [0E 0D, 05, 05] -235D; [0E 21, 05, 05] +22BA; [0E 0F, 05, 05] -235E; [0E 23, 05, 05] +22BB; [0E 11, 05, 05] -235F; [0E 25, 05, 05] +22BC; [0E 13, 05, 05] -2360; [0E 27, 05, 05] +22BD; [0E 15, 05, 05] -2361; [0E 29, 05, 05] +22BE; [0E 17, 05, 05] -2362; [0E 2B, 05, 05] +22BF; [0E 19, 05, 05] -2363; [0E 2D, 05, 05] +22C0; [0E 1B, 05, 05] -2364; [0E 2F, 05, 05] +22C1; [0E 1D, 05, 05] -2365; [0E 31, 05, 05] +22C2; [0E 1F, 05, 05] -2366; [0E 33, 05, 05] +22C3; [0E 21, 05, 05] -2367; [0E 35, 05, 05] +22C4; [0E 23, 05, 05] -2368; [0E 37, 05, 05] +22C5; [0E 25, 05, 05] -2369; [0E 39, 05, 05] +22C6; [0E 27, 05, 05] -236A; [0E 3B, 05, 05] +22C7; [0E 29, 05, 05] -236B; [0E 3D, 05, 05] +22C8; [0E 2B, 05, 05] -236C; [0E 3F, 05, 05] +22C9; [0E 2D, 05, 05] -236D; [0E 41, 05, 05] +22CA; [0E 2F, 05, 05] -236E; [0E 43, 05, 05] +22CB; [0E 31, 05, 05] -236F; [0E 45, 05, 05] +22CC; [0E 33, 05, 05] -2370; [0E 47, 05, 05] +22CD; [0E 35, 05, 05] -2371; [0E 49, 05, 05] +22CE; [0E 37, 05, 05] -2372; [0E 4B, 05, 05] +22CF; [0E 39, 05, 05] -2373; [0E 4D, 05, 05] +22D0; [0E 3B, 05, 05] -2374; [0E 4F, 05, 05] +22D1; [0E 3D, 05, 05] -2375; [0E 51, 05, 05] +22D2; [0E 3F, 05, 05] -2376; [0E 53, 05, 05] +22D3; [0E 41, 05, 05] -2377; [0E 55, 05, 05] +22D4; [0E 43, 05, 05] -2378; [0E 57, 05, 05] +22D5; [0E 45, 05, 05] -2379; [0E 59, 05, 05] +22D6; [0E 47, 05, 05] -237A; [0E 5B, 05, 05] +22D7; [0E 49, 05, 05] -237B; [0E 5D, 05, 05] +22D8; [0E 4B, 05, 05] -237C; [0E 5F, 05, 05] +22D9; [0E 4D, 05, 05] -237D; [0E 61, 05, 05] +22DA; [0E 4F, 05, 05] -237E; [0E 63, 05, 05] +22DB; [0E 51, 05, 05] -237F; [0E 65, 05, 05] +22DC; [0E 53, 05, 05] -2380; [0E 67, 05, 05] +22DD; [0E 55, 05, 05] -2381; [0E 69, 05, 05] +22DE; [0E 57, 05, 05] -2382; [0E 6B, 05, 05] +22DF; [0E 59, 05, 05] -2383; [0E 6D, 05, 05] +22E4; [0E 5B, 05, 05] -2384; [0E 6F, 05, 05] +22E5; [0E 5D, 05, 05] -2385; [0E 71, 05, 05] +22E6; [0E 5F, 05, 05] -2386; [0E 73, 05, 05] +22E7; [0E 61, 05, 05] -2387; [0E 75, 05, 05] +22E8; [0E 63, 05, 05] -2388; [0E 77, 05, 05] +22E9; [0E 65, 05, 05] -2389; [0E 79, 05, 05] +22EE; [0E 67, 05, 05] -238A; [0E 7B, 05, 05] +22EF; [0E 69, 05, 05] -238B; [0E 7D, 05, 05] +22F0; [0E 6B, 05, 05] -238C; [0E 7F, 05, 05] +22F1; [0E 6D, 05, 05] -238D; [0E 81, 05, 05] +22F2; [0E 6F, 05, 05] -238E; [0E 83, 05, 05] +22F3; [0E 71, 05, 05] -238F; [0E 85, 05, 05] +22F4; [0E 73, 05, 05] -2390; [0E 87, 05, 05] +22F5; [0E 75, 05, 05] -2391; [0E 89, 05, 05] +22F6; [0E 77, 05, 05] -2392; [0E 8B, 05, 05] +22F7; [0E 79, 05, 05] -2393; [0E 8D, 05, 05] +22F8; [0E 7B, 05, 05] -2394; [0E 8F, 05, 05] +22F9; [0E 7D, 05, 05] -2395; [0E 91, 05, 05] +22FA; [0E 7F, 05, 05] -2396; [0E 93, 05, 05] +22FB; [0E 81, 05, 05] -2397; [0E 95, 05, 05] +22FC; [0E 83, 05, 05] -2398; [0E 97, 05, 05] +22FD; [0E 85, 05, 05] -2399; [0E 99, 05, 05] +22FE; [0E 87, 05, 05] -239A; [0E 9B, 05, 05] +22FF; [0E 89, 05, 05] -239B; [0E 9D, 05, 05] +2300; [0E 8B, 05, 05] -239C; [0E 9F, 05, 05] +2301; [0E 8D, 05, 05] -239D; [0E A1, 05, 05] +2302; [0E 8F, 05, 05] -239E; [0E A3, 05, 05] +2303; [0E 91, 05, 05] -239F; [0E A5, 05, 05] +2304; [0E 93, 05, 05] -23A0; [0E A7, 05, 05] +2305; [0E 95, 05, 05] -23A1; [0E A9, 05, 05] +2306; [0E 97, 05, 05] -23A2; [0E AB, 05, 05] +2307; [0E 99, 05, 05] -23A3; [0E AD, 05, 05] +2308; [0E 9B, 05, 05] -23A4; [0E AF, 05, 05] +2309; [0E 9D, 05, 05] -23A5; [0E B1, 05, 05] +230A; [0E 9F, 05, 05] -23A6; [0E B3, 05, 05] +230B; [0E A1, 05, 05] -23A7; [0E B5, 05, 05] +230C; [0E A3, 05, 05] -23A8; [0E B7, 05, 05] +230D; [0E A5, 05, 05] -23A9; [0E B9, 05, 05] +230E; [0E A7, 05, 05] -23AA; [0E BB, 05, 05] +230F; [0E A9, 05, 05] -23AB; [0E BD, 05, 05] +2310; [0E AB, 05, 05] -23AC; [0E BF, 05, 05] +2311; [0E AD, 05, 05] -23AD; [0E C1, 05, 05] +2312; [0E AF, 05, 05] -23AE; [0E C3, 05, 05] +2313; [0E B1, 05, 05] -23AF; [0E C5, 05, 05] +2314; [0E B3, 05, 05] -23B0; [0E C7, 05, 05] +2315; [0E B5, 05, 05] -23B1; [0E C9, 05, 05] +2316; [0E B7, 05, 05] -23B2; [0E CB, 05, 05] +2317; [0E B9, 05, 05] -23B3; [0E CD, 05, 05] +2318; [0E BB, 05, 05] -23B4; [0E CF, 05, 05] +2319; [0E BD, 05, 05] -23B5; [0E D1, 05, 05] +231A; [0E BF, 05, 05] -23B6; [0E D3, 05, 05] +231B; [0E C1, 05, 05] -23B7; [0E D5, 05, 05] +231C; [0E C3, 05, 05] -23B8; [0E D7, 05, 05] +231D; [0E C5, 05, 05] -23B9; [0E D9, 05, 05] +231E; [0E C7, 05, 05] -23BA; [0E DB, 05, 05] +231F; [0E C9, 05, 05] -23BB; [0E DD, 05, 05] +2320; [0E CB, 05, 05] -23BC; [0E DF, 05, 05] +2321; [0E CD, 05, 05] -23BD; [0E E1, 05, 05] +2322; [0E CF, 05, 05] -23BE; [0E E3, 05, 05] +2323; [0E D1, 05, 05] -23BF; [0E E5, 05, 05] +2324; [0E D3, 05, 05] -23C0; [0E E7, 05, 05] +2325; [0E D5, 05, 05] -23C1; [0E E9, 05, 05] +2326; [0E D7, 05, 05] -23C2; [0E EB, 05, 05] +2327; [0E D9, 05, 05] -23C3; [0E ED, 05, 05] +2328; [0E DB, 05, 05] -23C4; [0E EF, 05, 05] +232B; [0E DD, 05, 05] -23C5; [0E F1, 05, 05] +232C; [0E DF, 05, 05] -23C6; [0E F3, 05, 05] +232D; [0E E1, 05, 05] -23C7; [0E F5, 05, 05] +232E; [0E E3, 05, 05] -23C8; [0E F7, 05, 05] +232F; [0E E5, 05, 05] -23C9; [0E F9, 05, 05] +2330; [0E E7, 05, 05] -23CA; [0E FB, 05, 05] +2331; [0E E9, 05, 05] -23CB; [0E FD, 05, 05] +2332; [0E EB, 05, 05] -23CC; [0F 05, 05, 05] +2333; [0E ED, 05, 05] -23CD; [0F 07, 05, 05] +2334; [0E EF, 05, 05] -23CE; [0F 09, 05, 05] +2335; [0E F1, 05, 05] -23CF; [0F 0B, 05, 05] +2336; [0E F3, 05, 05] -23D0; [0F 0D, 05, 05] +2337; [0E F5, 05, 05] -2400; [0F 0F, 05, 05] +2338; [0E F7, 05, 05] -2401; [0F 11, 05, 05] +2339; [0E F9, 05, 05] -2402; [0F 13, 05, 05] +233A; [0E FB, 05, 05] -2403; [0F 15, 05, 05] +233B; [0E FD, 05, 05] -2404; [0F 17, 05, 05] +233C; [0F 05, 05, 05] -2405; [0F 19, 05, 05] +233D; [0F 07, 05, 05] -2406; [0F 1B, 05, 05] +233E; [0F 09, 05, 05] -2407; [0F 1D, 05, 05] +233F; [0F 0B, 05, 05] -2408; [0F 1F, 05, 05] +2340; [0F 0D, 05, 05] -2409; [0F 21, 05, 05] +2341; [0F 0F, 05, 05] -240A; [0F 23, 05, 05] +2342; [0F 11, 05, 05] -240B; [0F 25, 05, 05] +2343; [0F 13, 05, 05] -240C; [0F 27, 05, 05] +2344; [0F 15, 05, 05] -240D; [0F 29, 05, 05] +2345; [0F 17, 05, 05] -240E; [0F 2B, 05, 05] +2346; [0F 19, 05, 05] -240F; [0F 2D, 05, 05] +2347; [0F 1B, 05, 05] -2410; [0F 2F, 05, 05] +2348; [0F 1D, 05, 05] -2411; [0F 31, 05, 05] +2349; [0F 1F, 05, 05] -2412; [0F 33, 05, 05] +234A; [0F 21, 05, 05] -2413; [0F 35, 05, 05] +234B; [0F 23, 05, 05] -2414; [0F 37, 05, 05] +234C; [0F 25, 05, 05] -2415; [0F 39, 05, 05] +234D; [0F 27, 05, 05] -2416; [0F 3B, 05, 05] +234E; [0F 29, 05, 05] -2417; [0F 3D, 05, 05] +234F; [0F 2B, 05, 05] -2418; [0F 3F, 05, 05] +2350; [0F 2D, 05, 05] -2419; [0F 41, 05, 05] +2351; [0F 2F, 05, 05] -241A; [0F 43, 05, 05] +2352; [0F 31, 05, 05] -241B; [0F 45, 05, 05] +2353; [0F 33, 05, 05] -241C; [0F 47, 05, 05] +2354; [0F 35, 05, 05] -241D; [0F 49, 05, 05] +2355; [0F 37, 05, 05] -241E; [0F 4B, 05, 05] +2356; [0F 39, 05, 05] -241F; [0F 4D, 05, 05] +2357; [0F 3B, 05, 05] -2420; [0F 4F, 05, 05] +2358; [0F 3D, 05, 05] -2421; [0F 51, 05, 05] +2359; [0F 3F, 05, 05] -2422; [0F 53, 05, 05] +235A; [0F 41, 05, 05] -2423; [0F 55, 05, 05] +235B; [0F 43, 05, 05] -2424; [0F 57, 05, 05] +235C; [0F 45, 05, 05] -2425; [0F 59, 05, 05] +235D; [0F 47, 05, 05] -2426; [0F 5B, 05, 05] +235E; [0F 49, 05, 05] -2440; [0F 5D, 05, 05] +235F; [0F 4B, 05, 05] -2441; [0F 5F, 05, 05] +2360; [0F 4D, 05, 05] -2442; [0F 61, 05, 05] +2361; [0F 4F, 05, 05] -2443; [0F 63, 05, 05] +2362; [0F 51, 05, 05] -2444; [0F 65, 05, 05] +2363; [0F 53, 05, 05] -2445; [0F 67, 05, 05] +2364; [0F 55, 05, 05] -2446; [0F 69, 05, 05] +2365; [0F 57, 05, 05] -2447; [0F 6B, 05, 05] +2366; [0F 59, 05, 05] -2448; [0F 6D, 05, 05] +2367; [0F 5B, 05, 05] -2449; [0F 6F, 05, 05] +2368; [0F 5D, 05, 05] -244A; [0F 71, 05, 05] +2369; [0F 5F, 05, 05] -2500; [0F 73, 05, 05] +236A; [0F 61, 05, 05] -2501; [0F 75, 05, 05] +236B; [0F 63, 05, 05] -2502; [0F 77, 05, 05] -FFE8; [0F 77, 05, A3] +236C; [0F 65, 05, 05] -2503; [0F 79, 05, 05] +236D; [0F 67, 05, 05] -2504; [0F 7B, 05, 05] +236E; [0F 69, 05, 05] -2505; [0F 7D, 05, 05] +236F; [0F 6B, 05, 05] -2506; [0F 7F, 05, 05] +2370; [0F 6D, 05, 05] -2507; [0F 81, 05, 05] +2371; [0F 6F, 05, 05] -2508; [0F 83, 05, 05] +2372; [0F 71, 05, 05] -2509; [0F 85, 05, 05] +2373; [0F 73, 05, 05] -250A; [0F 87, 05, 05] +2374; [0F 75, 05, 05] -250B; [0F 89, 05, 05] +2375; [0F 77, 05, 05] -250C; [0F 8B, 05, 05] +2376; [0F 79, 05, 05] -250D; [0F 8D, 05, 05] +2377; [0F 7B, 05, 05] -250E; [0F 8F, 05, 05] +2378; [0F 7D, 05, 05] -250F; [0F 91, 05, 05] +2379; [0F 7F, 05, 05] -2510; [0F 93, 05, 05] +237A; [0F 81, 05, 05] -2511; [0F 95, 05, 05] +237B; [0F 83, 05, 05] -2512; [0F 97, 05, 05] +237C; [0F 85, 05, 05] -2513; [0F 99, 05, 05] +237D; [0F 87, 05, 05] -2514; [0F 9B, 05, 05] +237E; [0F 89, 05, 05] -2515; [0F 9D, 05, 05] +237F; [0F 8B, 05, 05] -2516; [0F 9F, 05, 05] +2380; [0F 8D, 05, 05] -2517; [0F A1, 05, 05] +2381; [0F 8F, 05, 05] -2518; [0F A3, 05, 05] +2382; [0F 91, 05, 05] -2519; [0F A5, 05, 05] +2383; [0F 93, 05, 05] -251A; [0F A7, 05, 05] +2384; [0F 95, 05, 05] -251B; [0F A9, 05, 05] +2385; [0F 97, 05, 05] -251C; [0F AB, 05, 05] +2386; [0F 99, 05, 05] -251D; [0F AD, 05, 05] +2387; [0F 9B, 05, 05] -251E; [0F AF, 05, 05] +2388; [0F 9D, 05, 05] -251F; [0F B1, 05, 05] +2389; [0F 9F, 05, 05] -2520; [0F B3, 05, 05] +238A; [0F A1, 05, 05] -2521; [0F B5, 05, 05] +238B; [0F A3, 05, 05] -2522; [0F B7, 05, 05] +238C; [0F A5, 05, 05] -2523; [0F B9, 05, 05] +238D; [0F A7, 05, 05] -2524; [0F BB, 05, 05] +238E; [0F A9, 05, 05] -2525; [0F BD, 05, 05] +238F; [0F AB, 05, 05] -2526; [0F BF, 05, 05] +2390; [0F AD, 05, 05] -2527; [0F C1, 05, 05] +2391; [0F AF, 05, 05] -2528; [0F C3, 05, 05] +2392; [0F B1, 05, 05] -2529; [0F C5, 05, 05] +2393; [0F B3, 05, 05] -252A; [0F C7, 05, 05] +2394; [0F B5, 05, 05] -252B; [0F C9, 05, 05] +2395; [0F B7, 05, 05] -252C; [0F CB, 05, 05] +2396; [0F B9, 05, 05] -252D; [0F CD, 05, 05] +2397; [0F BB, 05, 05] -252E; [0F CF, 05, 05] +2398; [0F BD, 05, 05] -252F; [0F D1, 05, 05] +2399; [0F BF, 05, 05] -2530; [0F D3, 05, 05] +239A; [0F C1, 05, 05] -2531; [0F D5, 05, 05] +239B; [0F C3, 05, 05] -2532; [0F D7, 05, 05] +239C; [0F C5, 05, 05] -2533; [0F D9, 05, 05] +239D; [0F C7, 05, 05] -2534; [0F DB, 05, 05] +239E; [0F C9, 05, 05] -2535; [0F DD, 05, 05] +239F; [0F CB, 05, 05] -2536; [0F DF, 05, 05] +23A0; [0F CD, 05, 05] -2537; [0F E1, 05, 05] +23A1; [0F CF, 05, 05] -2538; [0F E3, 05, 05] +23A2; [0F D1, 05, 05] -2539; [0F E5, 05, 05] +23A3; [0F D3, 05, 05] -253A; [0F E7, 05, 05] +23A4; [0F D5, 05, 05] -253B; [0F E9, 05, 05] +23A5; [0F D7, 05, 05] -253C; [0F EB, 05, 05] +23A6; [0F D9, 05, 05] -253D; [0F ED, 05, 05] +23A7; [0F DB, 05, 05] -253E; [0F EF, 05, 05] +23A8; [0F DD, 05, 05] -253F; [0F F1, 05, 05] +23A9; [0F DF, 05, 05] -2540; [0F F3, 05, 05] +23AA; [0F E1, 05, 05] -2541; [0F F5, 05, 05] +23AB; [0F E3, 05, 05] -2542; [0F F7, 05, 05] +23AC; [0F E5, 05, 05] -2543; [0F F9, 05, 05] +23AD; [0F E7, 05, 05] -2544; [0F FB, 05, 05] +23AE; [0F E9, 05, 05] -2545; [0F FD, 05, 05] +23AF; [0F EB, 05, 05] -2546; [10 05, 05, 05] +23B0; [0F ED, 05, 05] -2547; [10 07, 05, 05] +23B1; [0F EF, 05, 05] -2548; [10 09, 05, 05] +23B2; [0F F1, 05, 05] -2549; [10 0B, 05, 05] +23B3; [0F F3, 05, 05] -254A; [10 0D, 05, 05] +23B4; [0F F5, 05, 05] -254B; [10 0F, 05, 05] +23B5; [0F F7, 05, 05] -254C; [10 11, 05, 05] +23B6; [0F F9, 05, 05] -254D; [10 13, 05, 05] +23B7; [0F FB, 05, 05] -254E; [10 15, 05, 05] +23B8; [0F FD, 05, 05] -254F; [10 17, 05, 05] +23B9; [10 05, 05, 05] -2550; [10 19, 05, 05] +23BA; [10 07, 05, 05] -2551; [10 1B, 05, 05] +23BB; [10 09, 05, 05] -2552; [10 1D, 05, 05] +23BC; [10 0B, 05, 05] -2553; [10 1F, 05, 05] +23BD; [10 0D, 05, 05] -2554; [10 21, 05, 05] +23BE; [10 0F, 05, 05] -2555; [10 23, 05, 05] +23BF; [10 11, 05, 05] -2556; [10 25, 05, 05] +23C0; [10 13, 05, 05] -2557; [10 27, 05, 05] +23C1; [10 15, 05, 05] -2558; [10 29, 05, 05] +23C2; [10 17, 05, 05] -2559; [10 2B, 05, 05] +23C3; [10 19, 05, 05] -255A; [10 2D, 05, 05] +23C4; [10 1B, 05, 05] -255B; [10 2F, 05, 05] +23C5; [10 1D, 05, 05] -255C; [10 31, 05, 05] +23C6; [10 1F, 05, 05] -255D; [10 33, 05, 05] +23C7; [10 21, 05, 05] -255E; [10 35, 05, 05] +23C8; [10 23, 05, 05] -255F; [10 37, 05, 05] +23C9; [10 25, 05, 05] -2560; [10 39, 05, 05] +23CA; [10 27, 05, 05] -2561; [10 3B, 05, 05] +23CB; [10 29, 05, 05] -2562; [10 3D, 05, 05] +23CC; [10 2B, 05, 05] -2563; [10 3F, 05, 05] +23CD; [10 2D, 05, 05] -2564; [10 41, 05, 05] +23CE; [10 2F, 05, 05] -2565; [10 43, 05, 05] +23CF; [10 31, 05, 05] -2566; [10 45, 05, 05] +23D0; [10 33, 05, 05] -2567; [10 47, 05, 05] +23D1; [10 35, 05, 05] -2568; [10 49, 05, 05] +23D2; [10 37, 05, 05] -2569; [10 4B, 05, 05] +23D3; [10 39, 05, 05] -256A; [10 4D, 05, 05] +23D4; [10 3B, 05, 05] -256B; [10 4F, 05, 05] +23D5; [10 3D, 05, 05] -256C; [10 51, 05, 05] +23D6; [10 3F, 05, 05] -256D; [10 53, 05, 05] +23D7; [10 41, 05, 05] -256E; [10 55, 05, 05] +23D8; [10 43, 05, 05] -256F; [10 57, 05, 05] +23D9; [10 45, 05, 05] -2570; [10 59, 05, 05] +23DA; [10 47, 05, 05] -2571; [10 5B, 05, 05] +23DB; [10 49, 05, 05] -2572; [10 5D, 05, 05] +23DC; [10 4B, 05, 05] -2573; [10 5F, 05, 05] +23DD; [10 4D, 05, 05] -2574; [10 61, 05, 05] +23DE; [10 4F, 05, 05] -2575; [10 63, 05, 05] +23DF; [10 51, 05, 05] -2576; [10 65, 05, 05] +23E0; [10 53, 05, 05] -2577; [10 67, 05, 05] +23E1; [10 55, 05, 05] -2578; [10 69, 05, 05] +23E2; [10 57, 05, 05] -2579; [10 6B, 05, 05] +23E3; [10 59, 05, 05] -257A; [10 6D, 05, 05] +23E4; [10 5B, 05, 05] -257B; [10 6F, 05, 05] +23E5; [10 5D, 05, 05] -257C; [10 71, 05, 05] +23E6; [10 5F, 05, 05] -257D; [10 73, 05, 05] +23E7; [10 61, 05, 05] -257E; [10 75, 05, 05] +2400; [10 63, 05, 05] -257F; [10 77, 05, 05] +2401; [10 65, 05, 05] -2580; [10 79, 05, 05] +2402; [10 67, 05, 05] -2581; [10 7B, 05, 05] +2403; [10 69, 05, 05] -2582; [10 7D, 05, 05] +2404; [10 6B, 05, 05] -2583; [10 7F, 05, 05] +2405; [10 6D, 05, 05] -2584; [10 81, 05, 05] +2406; [10 6F, 05, 05] -2585; [10 83, 05, 05] +2407; [10 71, 05, 05] -2586; [10 85, 05, 05] +2408; [10 73, 05, 05] -2587; [10 87, 05, 05] +2409; [10 75, 05, 05] -2588; [10 89, 05, 05] +240A; [10 77, 05, 05] -2589; [10 8B, 05, 05] +240B; [10 79, 05, 05] -258A; [10 8D, 05, 05] +240C; [10 7B, 05, 05] -258B; [10 8F, 05, 05] +240D; [10 7D, 05, 05] -258C; [10 91, 05, 05] +240E; [10 7F, 05, 05] -258D; [10 93, 05, 05] +240F; [10 81, 05, 05] -258E; [10 95, 05, 05] +2410; [10 83, 05, 05] -258F; [10 97, 05, 05] +2411; [10 85, 05, 05] -2590; [10 99, 05, 05] +2412; [10 87, 05, 05] -2591; [10 9B, 05, 05] +2413; [10 89, 05, 05] -2592; [10 9D, 05, 05] +2414; [10 8B, 05, 05] -2593; [10 9F, 05, 05] +2415; [10 8D, 05, 05] -2594; [10 A1, 05, 05] +2416; [10 8F, 05, 05] -2595; [10 A3, 05, 05] +2417; [10 91, 05, 05] -2596; [10 A5, 05, 05] +2418; [10 93, 05, 05] -2597; [10 A7, 05, 05] +2419; [10 95, 05, 05] -2598; [10 A9, 05, 05] +241A; [10 97, 05, 05] -2599; [10 AB, 05, 05] +241B; [10 99, 05, 05] -259A; [10 AD, 05, 05] +241C; [10 9B, 05, 05] -259B; [10 AF, 05, 05] +241D; [10 9D, 05, 05] -259C; [10 B1, 05, 05] +241E; [10 9F, 05, 05] -259D; [10 B3, 05, 05] +241F; [10 A1, 05, 05] -259E; [10 B5, 05, 05] +2420; [10 A3, 05, 05] -259F; [10 B7, 05, 05] +2421; [10 A5, 05, 05] -25A0; [10 B9, 05, 05] -FFED; [10 B9, 05, A3] +2422; [10 A7, 05, 05] -25A1; [10 BB, 05, 05] +2423; [10 A9, 05, 05] -25A2; [10 BD, 05, 05] +2424; [10 AB, 05, 05] -25A3; [10 BF, 05, 05] +2425; [10 AD, 05, 05] -25A4; [10 C1, 05, 05] +2426; [10 AF, 05, 05] -25A5; [10 C3, 05, 05] +2440; [10 B1, 05, 05] -25A6; [10 C5, 05, 05] +2441; [10 B3, 05, 05] -25A7; [10 C7, 05, 05] +2442; [10 B5, 05, 05] -25A8; [10 C9, 05, 05] +2443; [10 B7, 05, 05] -25A9; [10 CB, 05, 05] +2444; [10 B9, 05, 05] -25AA; [10 CD, 05, 05] +2445; [10 BB, 05, 05] -25AB; [10 CF, 05, 05] +2446; [10 BD, 05, 05] -25AC; [10 D1, 05, 05] +2447; [10 BF, 05, 05] -25AD; [10 D3, 05, 05] +2448; [10 C1, 05, 05] -25AE; [10 D5, 05, 05] +2449; [10 C3, 05, 05] -25AF; [10 D7, 05, 05] +244A; [10 C5, 05, 05] -25B0; [10 D9, 05, 05] +2500; [10 C7, 05, 05] -25B1; [10 DB, 05, 05] +2501; [10 C9, 05, 05] -25B2; [10 DD, 05, 05] +2502; [10 CB, 05, 05] +FFE8; [10 CB, 05, A3] -25B3; [10 DF, 05, 05] +2503; [10 CD, 05, 05] -25B4; [10 E1, 05, 05] +2504; [10 CF, 05, 05] -25B5; [10 E3, 05, 05] +2505; [10 D1, 05, 05] -25B6; [10 E5, 05, 05] +2506; [10 D3, 05, 05] -25B7; [10 E7, 05, 05] +2507; [10 D5, 05, 05] -25B8; [10 E9, 05, 05] +2508; [10 D7, 05, 05] -25B9; [10 EB, 05, 05] +2509; [10 D9, 05, 05] -25BA; [10 ED, 05, 05] +250A; [10 DB, 05, 05] -25BB; [10 EF, 05, 05] +250B; [10 DD, 05, 05] -25BC; [10 F1, 05, 05] +250C; [10 DF, 05, 05] -25BD; [10 F3, 05, 05] +250D; [10 E1, 05, 05] -25BE; [10 F5, 05, 05] +250E; [10 E3, 05, 05] -25BF; [10 F7, 05, 05] +250F; [10 E5, 05, 05] -25C0; [10 F9, 05, 05] +2510; [10 E7, 05, 05] -25C1; [10 FB, 05, 05] +2511; [10 E9, 05, 05] -25C2; [10 FD, 05, 05] +2512; [10 EB, 05, 05] -25C3; [11 05, 05, 05] +2513; [10 ED, 05, 05] -25C4; [11 07, 05, 05] +2514; [10 EF, 05, 05] -25C5; [11 09, 05, 05] +2515; [10 F1, 05, 05] -25C6; [11 0B, 05, 05] +2516; [10 F3, 05, 05] -25C7; [11 0D, 05, 05] +2517; [10 F5, 05, 05] -25C8; [11 0F, 05, 05] +2518; [10 F7, 05, 05] -25C9; [11 11, 05, 05] +2519; [10 F9, 05, 05] -25CA; [11 13, 05, 05] +251A; [10 FB, 05, 05] -25CB; [11 15, 05, 05] -FFEE; [11 15, 05, A3] +251B; [10 FD, 05, 05] -25CC; [11 17, 05, 05] +251C; [11 05, 05, 05] -25CD; [11 19, 05, 05] +251D; [11 07, 05, 05] -25CE; [11 1B, 05, 05] +251E; [11 09, 05, 05] -25CF; [11 1D, 05, 05] +251F; [11 0B, 05, 05] -25D0; [11 1F, 05, 05] +2520; [11 0D, 05, 05] -25D1; [11 21, 05, 05] +2521; [11 0F, 05, 05] -25D2; [11 23, 05, 05] +2522; [11 11, 05, 05] -25D3; [11 25, 05, 05] +2523; [11 13, 05, 05] -25D4; [11 27, 05, 05] +2524; [11 15, 05, 05] -25D5; [11 29, 05, 05] +2525; [11 17, 05, 05] -25D6; [11 2B, 05, 05] +2526; [11 19, 05, 05] -25D7; [11 2D, 05, 05] +2527; [11 1B, 05, 05] -25D8; [11 2F, 05, 05] +2528; [11 1D, 05, 05] -25D9; [11 31, 05, 05] +2529; [11 1F, 05, 05] -25DA; [11 33, 05, 05] +252A; [11 21, 05, 05] -25DB; [11 35, 05, 05] +252B; [11 23, 05, 05] -25DC; [11 37, 05, 05] +252C; [11 25, 05, 05] -25DD; [11 39, 05, 05] +252D; [11 27, 05, 05] -25DE; [11 3B, 05, 05] +252E; [11 29, 05, 05] -25DF; [11 3D, 05, 05] +252F; [11 2B, 05, 05] -25E0; [11 3F, 05, 05] +2530; [11 2D, 05, 05] -25E1; [11 41, 05, 05] +2531; [11 2F, 05, 05] -25E2; [11 43, 05, 05] +2532; [11 31, 05, 05] -25E3; [11 45, 05, 05] +2533; [11 33, 05, 05] -25E4; [11 47, 05, 05] +2534; [11 35, 05, 05] -25E5; [11 49, 05, 05] +2535; [11 37, 05, 05] -25E6; [11 4B, 05, 05] +2536; [11 39, 05, 05] -25E7; [11 4D, 05, 05] +2537; [11 3B, 05, 05] -25E8; [11 4F, 05, 05] +2538; [11 3D, 05, 05] -25E9; [11 51, 05, 05] +2539; [11 3F, 05, 05] -25EA; [11 53, 05, 05] +253A; [11 41, 05, 05] -25EB; [11 55, 05, 05] +253B; [11 43, 05, 05] -25EC; [11 57, 05, 05] +253C; [11 45, 05, 05] -25ED; [11 59, 05, 05] +253D; [11 47, 05, 05] -25EE; [11 5B, 05, 05] +253E; [11 49, 05, 05] -25EF; [11 5D, 05, 05] +253F; [11 4B, 05, 05] -25F0; [11 5F, 05, 05] +2540; [11 4D, 05, 05] -25F1; [11 61, 05, 05] +2541; [11 4F, 05, 05] -25F2; [11 63, 05, 05] +2542; [11 51, 05, 05] -25F3; [11 65, 05, 05] +2543; [11 53, 05, 05] -25F4; [11 67, 05, 05] +2544; [11 55, 05, 05] -25F5; [11 69, 05, 05] +2545; [11 57, 05, 05] -25F6; [11 6B, 05, 05] +2546; [11 59, 05, 05] -25F7; [11 6D, 05, 05] +2547; [11 5B, 05, 05] -25F8; [11 6F, 05, 05] +2548; [11 5D, 05, 05] -25F9; [11 71, 05, 05] +2549; [11 5F, 05, 05] -25FA; [11 73, 05, 05] +254A; [11 61, 05, 05] -25FB; [11 75, 05, 05] +254B; [11 63, 05, 05] -25FC; [11 77, 05, 05] +254C; [11 65, 05, 05] -25FD; [11 79, 05, 05] +254D; [11 67, 05, 05] -25FE; [11 7B, 05, 05] +254E; [11 69, 05, 05] -25FF; [11 7D, 05, 05] +254F; [11 6B, 05, 05] -2600; [11 7F, 05, 05] +2550; [11 6D, 05, 05] -2601; [11 81, 05, 05] +2551; [11 6F, 05, 05] -2602; [11 83, 05, 05] +2552; [11 71, 05, 05] -2603; [11 85, 05, 05] +2553; [11 73, 05, 05] -2604; [11 87, 05, 05] +2554; [11 75, 05, 05] -2605; [11 89, 05, 05] +2555; [11 77, 05, 05] -2606; [11 8B, 05, 05] +2556; [11 79, 05, 05] -2607; [11 8D, 05, 05] +2557; [11 7B, 05, 05] -2608; [11 8F, 05, 05] +2558; [11 7D, 05, 05] -2609; [11 91, 05, 05] +2559; [11 7F, 05, 05] -260A; [11 93, 05, 05] +255A; [11 81, 05, 05] -260B; [11 95, 05, 05] +255B; [11 83, 05, 05] -260C; [11 97, 05, 05] +255C; [11 85, 05, 05] -260D; [11 99, 05, 05] +255D; [11 87, 05, 05] -260E; [11 9B, 05, 05] +255E; [11 89, 05, 05] -260F; [11 9D, 05, 05] +255F; [11 8B, 05, 05] -2610; [11 9F, 05, 05] +2560; [11 8D, 05, 05] -2611; [11 A1, 05, 05] +2561; [11 8F, 05, 05] -2612; [11 A3, 05, 05] +2562; [11 91, 05, 05] -2613; [11 A5, 05, 05] +2563; [11 93, 05, 05] -2614; [11 A7, 05, 05] +2564; [11 95, 05, 05] -2615; [11 A9, 05, 05] +2565; [11 97, 05, 05] -2616; [11 AB, 05, 05] +2566; [11 99, 05, 05] -2617; [11 AD, 05, 05] +2567; [11 9B, 05, 05] -2619; [11 AF, 05, 05] +2568; [11 9D, 05, 05] -261A; [11 B1, 05, 05] +2569; [11 9F, 05, 05] -261B; [11 B3, 05, 05] +256A; [11 A1, 05, 05] -261C; [11 B5, 05, 05] +256B; [11 A3, 05, 05] -261D; [11 B7, 05, 05] +256C; [11 A5, 05, 05] -261E; [11 B9, 05, 05] +256D; [11 A7, 05, 05] -261F; [11 BB, 05, 05] +256E; [11 A9, 05, 05] -2620; [11 BD, 05, 05] +256F; [11 AB, 05, 05] -2621; [11 BF, 05, 05] +2570; [11 AD, 05, 05] -2622; [11 C1, 05, 05] +2571; [11 AF, 05, 05] -2623; [11 C3, 05, 05] +2572; [11 B1, 05, 05] -2624; [11 C5, 05, 05] +2573; [11 B3, 05, 05] -2625; [11 C7, 05, 05] +2574; [11 B5, 05, 05] -2626; [11 C9, 05, 05] +2575; [11 B7, 05, 05] -2627; [11 CB, 05, 05] +2576; [11 B9, 05, 05] -2628; [11 CD, 05, 05] +2577; [11 BB, 05, 05] -2629; [11 CF, 05, 05] +2578; [11 BD, 05, 05] -262A; [11 D1, 05, 05] +2579; [11 BF, 05, 05] -262B; [11 D3, 05, 05] +257A; [11 C1, 05, 05] -262C; [11 D5, 05, 05] +257B; [11 C3, 05, 05] -262D; [11 D7, 05, 05] +257C; [11 C5, 05, 05] -262E; [11 D9, 05, 05] +257D; [11 C7, 05, 05] -262F; [11 DB, 05, 05] +257E; [11 C9, 05, 05] -2638; [11 DD, 05, 05] +257F; [11 CB, 05, 05] -2639; [11 DF, 05, 05] +2580; [11 CD, 05, 05] -263A; [11 E1, 05, 05] +2581; [11 CF, 05, 05] -263B; [11 E3, 05, 05] +2582; [11 D1, 05, 05] -263C; [11 E5, 05, 05] +2583; [11 D3, 05, 05] -263D; [11 E7, 05, 05] +2584; [11 D5, 05, 05] -263E; [11 E9, 05, 05] +2585; [11 D7, 05, 05] -263F; [11 EB, 05, 05] +2586; [11 D9, 05, 05] -2640; [11 ED, 05, 05] +2587; [11 DB, 05, 05] -2641; [11 EF, 05, 05] +2588; [11 DD, 05, 05] -2642; [11 F1, 05, 05] +2589; [11 DF, 05, 05] -2643; [11 F3, 05, 05] +258A; [11 E1, 05, 05] -2644; [11 F5, 05, 05] +258B; [11 E3, 05, 05] -2645; [11 F7, 05, 05] +258C; [11 E5, 05, 05] -2646; [11 F9, 05, 05] +258D; [11 E7, 05, 05] -2647; [11 FB, 05, 05] +258E; [11 E9, 05, 05] -2648; [11 FD, 05, 05] +258F; [11 EB, 05, 05] -2649; [12 05, 05, 05] +2590; [11 ED, 05, 05] -264A; [12 07, 05, 05] +2591; [11 EF, 05, 05] -264B; [12 09, 05, 05] +2592; [11 F1, 05, 05] -264C; [12 0B, 05, 05] +2593; [11 F3, 05, 05] -264D; [12 0D, 05, 05] +2594; [11 F5, 05, 05] -264E; [12 0F, 05, 05] +2595; [11 F7, 05, 05] -264F; [12 11, 05, 05] +2596; [11 F9, 05, 05] -2650; [12 13, 05, 05] +2597; [11 FB, 05, 05] -2651; [12 15, 05, 05] +2598; [11 FD, 05, 05] -2652; [12 17, 05, 05] +2599; [12 05, 05, 05] -2653; [12 19, 05, 05] +259A; [12 07, 05, 05] -2654; [12 1B, 05, 05] +259B; [12 09, 05, 05] -2655; [12 1D, 05, 05] +259C; [12 0B, 05, 05] -2656; [12 1F, 05, 05] +259D; [12 0D, 05, 05] -2657; [12 21, 05, 05] +259E; [12 0F, 05, 05] -2658; [12 23, 05, 05] +259F; [12 11, 05, 05] -2659; [12 25, 05, 05] +25A0; [12 13, 05, 05] +FFED; [12 13, 05, A3] -265A; [12 27, 05, 05] +25A1; [12 15, 05, 05] -265B; [12 29, 05, 05] +25A2; [12 17, 05, 05] -265C; [12 2B, 05, 05] +25A3; [12 19, 05, 05] -265D; [12 2D, 05, 05] +25A4; [12 1B, 05, 05] -265E; [12 2F, 05, 05] +25A5; [12 1D, 05, 05] -265F; [12 31, 05, 05] +25A6; [12 1F, 05, 05] -2660; [12 33, 05, 05] +25A7; [12 21, 05, 05] -2661; [12 35, 05, 05] +25A8; [12 23, 05, 05] -2662; [12 37, 05, 05] +25A9; [12 25, 05, 05] -2663; [12 39, 05, 05] +25AA; [12 27, 05, 05] -2664; [12 3B, 05, 05] +25AB; [12 29, 05, 05] -2665; [12 3D, 05, 05] +25AC; [12 2B, 05, 05] -2666; [12 3F, 05, 05] +25AD; [12 2D, 05, 05] -2667; [12 41, 05, 05] +25AE; [12 2F, 05, 05] -2668; [12 43, 05, 05] +25AF; [12 31, 05, 05] -2669; [12 45, 05, 05] +25B0; [12 33, 05, 05] -266A; [12 47, 05, 05] +25B1; [12 35, 05, 05] -266B; [12 49, 05, 05] +25B2; [12 37, 05, 05] -266C; [12 4B, 05, 05] +25B3; [12 39, 05, 05] -2670; [12 4D, 05, 05] +25B4; [12 3B, 05, 05] -2671; [12 4F, 05, 05] +25B5; [12 3D, 05, 05] -2672; [12 51, 05, 05] +25B6; [12 3F, 05, 05] -2673; [12 53, 05, 05] +25B7; [12 41, 05, 05] -2674; [12 55, 05, 05] +25B8; [12 43, 05, 05] -2675; [12 57, 05, 05] +25B9; [12 45, 05, 05] -2676; [12 59, 05, 05] +25BA; [12 47, 05, 05] -2677; [12 5B, 05, 05] +25BB; [12 49, 05, 05] -2678; [12 5D, 05, 05] +25BC; [12 4B, 05, 05] -2679; [12 5F, 05, 05] +25BD; [12 4D, 05, 05] -267A; [12 61, 05, 05] +25BE; [12 4F, 05, 05] -267B; [12 63, 05, 05] +25BF; [12 51, 05, 05] -267C; [12 65, 05, 05] +25C0; [12 53, 05, 05] -267D; [12 67, 05, 05] +25C1; [12 55, 05, 05] -2680; [12 69, 05, 05] +25C2; [12 57, 05, 05] -2681; [12 6B, 05, 05] +25C3; [12 59, 05, 05] -2682; [12 6D, 05, 05] +25C4; [12 5B, 05, 05] -2683; [12 6F, 05, 05] +25C5; [12 5D, 05, 05] -2684; [12 71, 05, 05] +25C6; [12 5F, 05, 05] -2685; [12 73, 05, 05] +25C7; [12 61, 05, 05] -2686; [12 75, 05, 05] +25C8; [12 63, 05, 05] -2687; [12 77, 05, 05] +25C9; [12 65, 05, 05] -2688; [12 79, 05, 05] +25CA; [12 67, 05, 05] -2689; [12 7B, 05, 05] +25CB; [12 69, 05, 05] +FFEE; [12 69, 05, A3] -2690; [12 7D, 05, 05] +25CC; [12 6B, 05, 05] -2691; [12 7F, 05, 05] +25CD; [12 6D, 05, 05] -26A0; [12 81, 05, 05] +25CE; [12 6F, 05, 05] -26A1; [12 83, 05, 05] +25CF; [12 71, 05, 05] -2701; [12 85, 05, 05] +25D0; [12 73, 05, 05] -2702; [12 87, 05, 05] +25D1; [12 75, 05, 05] -2703; [12 89, 05, 05] +25D2; [12 77, 05, 05] -2704; [12 8B, 05, 05] +25D3; [12 79, 05, 05] -2706; [12 8D, 05, 05] +25D4; [12 7B, 05, 05] -2707; [12 8F, 05, 05] +25D5; [12 7D, 05, 05] -2708; [12 91, 05, 05] +25D6; [12 7F, 05, 05] -2709; [12 93, 05, 05] +25D7; [12 81, 05, 05] -270C; [12 95, 05, 05] +25D8; [12 83, 05, 05] -270D; [12 97, 05, 05] +25D9; [12 85, 05, 05] -270E; [12 99, 05, 05] +25DA; [12 87, 05, 05] -270F; [12 9B, 05, 05] +25DB; [12 89, 05, 05] -2710; [12 9D, 05, 05] +25DC; [12 8B, 05, 05] -2711; [12 9F, 05, 05] +25DD; [12 8D, 05, 05] -2712; [12 A1, 05, 05] +25DE; [12 8F, 05, 05] -2713; [12 A3, 05, 05] +25DF; [12 91, 05, 05] -2714; [12 A5, 05, 05] +25E0; [12 93, 05, 05] -2715; [12 A7, 05, 05] +25E1; [12 95, 05, 05] -2716; [12 A9, 05, 05] +25E2; [12 97, 05, 05] -2717; [12 AB, 05, 05] +25E3; [12 99, 05, 05] -2718; [12 AD, 05, 05] +25E4; [12 9B, 05, 05] -2719; [12 AF, 05, 05] +25E5; [12 9D, 05, 05] -271A; [12 B1, 05, 05] +25E6; [12 9F, 05, 05] -271B; [12 B3, 05, 05] +25E7; [12 A1, 05, 05] -271C; [12 B5, 05, 05] +25E8; [12 A3, 05, 05] -271D; [12 B7, 05, 05] +25E9; [12 A5, 05, 05] -271E; [12 B9, 05, 05] +25EA; [12 A7, 05, 05] -271F; [12 BB, 05, 05] +25EB; [12 A9, 05, 05] -2720; [12 BD, 05, 05] +25EC; [12 AB, 05, 05] -2721; [12 BF, 05, 05] +25ED; [12 AD, 05, 05] -2722; [12 C1, 05, 05] +25EE; [12 AF, 05, 05] -2723; [12 C3, 05, 05] +25EF; [12 B1, 05, 05] -2724; [12 C5, 05, 05] +25F0; [12 B3, 05, 05] -2725; [12 C7, 05, 05] +25F1; [12 B5, 05, 05] -2726; [12 C9, 05, 05] +25F2; [12 B7, 05, 05] -2727; [12 CB, 05, 05] +25F3; [12 B9, 05, 05] -2729; [12 CD, 05, 05] +25F4; [12 BB, 05, 05] -272A; [12 CF, 05, 05] +25F5; [12 BD, 05, 05] -272B; [12 D1, 05, 05] +25F6; [12 BF, 05, 05] -272C; [12 D3, 05, 05] +25F7; [12 C1, 05, 05] -272D; [12 D5, 05, 05] +25F8; [12 C3, 05, 05] -272E; [12 D7, 05, 05] +25F9; [12 C5, 05, 05] -272F; [12 D9, 05, 05] +25FA; [12 C7, 05, 05] -2730; [12 DB, 05, 05] +25FB; [12 C9, 05, 05] -2731; [12 DD, 05, 05] +25FC; [12 CB, 05, 05] -2732; [12 DF, 05, 05] +25FD; [12 CD, 05, 05] -2733; [12 E1, 05, 05] +25FE; [12 CF, 05, 05] -2734; [12 E3, 05, 05] +25FF; [12 D1, 05, 05] -2735; [12 E5, 05, 05] +2600; [12 D3, 05, 05] -2736; [12 E7, 05, 05] +2601; [12 D5, 05, 05] -2737; [12 E9, 05, 05] +2602; [12 D7, 05, 05] -2738; [12 EB, 05, 05] +2603; [12 D9, 05, 05] -2739; [12 ED, 05, 05] +2604; [12 DB, 05, 05] -273A; [12 EF, 05, 05] +2605; [12 DD, 05, 05] -273B; [12 F1, 05, 05] +2606; [12 DF, 05, 05] -273C; [12 F3, 05, 05] +2607; [12 E1, 05, 05] -273D; [12 F5, 05, 05] +2608; [12 E3, 05, 05] -273E; [12 F7, 05, 05] +2609; [12 E5, 05, 05] -273F; [12 F9, 05, 05] +260A; [12 E7, 05, 05] -2740; [12 FB, 05, 05] +260B; [12 E9, 05, 05] -2741; [12 FD, 05, 05] +260C; [12 EB, 05, 05] -2742; [13 05, 05, 05] +260D; [12 ED, 05, 05] -2743; [13 07, 05, 05] +260E; [12 EF, 05, 05] -2744; [13 09, 05, 05] +260F; [12 F1, 05, 05] -2745; [13 0B, 05, 05] +2610; [12 F3, 05, 05] -2746; [13 0D, 05, 05] +2611; [12 F5, 05, 05] -2747; [13 0F, 05, 05] +2612; [12 F7, 05, 05] -2748; [13 11, 05, 05] +2613; [12 F9, 05, 05] -2749; [13 13, 05, 05] +2614; [12 FB, 05, 05] -274A; [13 15, 05, 05] +2615; [12 FD, 05, 05] -274B; [13 17, 05, 05] +2616; [13 05, 05, 05] -274D; [13 19, 05, 05] +2617; [13 07, 05, 05] -274F; [13 1B, 05, 05] +2618; [13 09, 05, 05] -2750; [13 1D, 05, 05] +2619; [13 0B, 05, 05] -2751; [13 1F, 05, 05] +261A; [13 0D, 05, 05] -2752; [13 21, 05, 05] +261B; [13 0F, 05, 05] -2756; [13 23, 05, 05] +261C; [13 11, 05, 05] -2758; [13 25, 05, 05] +261D; [13 13, 05, 05] -2759; [13 27, 05, 05] +261E; [13 15, 05, 05] -275A; [13 29, 05, 05] +261F; [13 17, 05, 05] -275B; [13 2B, 05, 05] +2620; [13 19, 05, 05] -275C; [13 2D, 05, 05] +2621; [13 1B, 05, 05] -275D; [13 2F, 05, 05] +2622; [13 1D, 05, 05] -275E; [13 31, 05, 05] +2623; [13 1F, 05, 05] -2761; [13 33, 05, 05] +2624; [13 21, 05, 05] -2762; [13 35, 05, 05] +2625; [13 23, 05, 05] -2763; [13 37, 05, 05] +2626; [13 25, 05, 05] -2764; [13 39, 05, 05] +2627; [13 27, 05, 05] -2765; [13 3B, 05, 05] +2628; [13 29, 05, 05] -2766; [13 3D, 05, 05] +2629; [13 2B, 05, 05] -2767; [13 3F, 05, 05] +262A; [13 2D, 05, 05] -2768; [13 41, 05, 05] +262B; [13 2F, 05, 05] -2769; [13 43, 05, 05] +262C; [13 31, 05, 05] -276A; [13 45, 05, 05] +262D; [13 33, 05, 05] -276B; [13 47, 05, 05] +262E; [13 35, 05, 05] -276C; [13 49, 05, 05] +262F; [13 37, 05, 05] -276D; [13 4B, 05, 05] +2638; [13 39, 05, 05] -276E; [13 4D, 05, 05] +2639; [13 3B, 05, 05] -276F; [13 4F, 05, 05] +263A; [13 3D, 05, 05] -2770; [13 51, 05, 05] +263B; [13 3F, 05, 05] -2771; [13 53, 05, 05] +263C; [13 41, 05, 05] -2772; [13 55, 05, 05] +263D; [13 43, 05, 05] -2773; [13 57, 05, 05] +263E; [13 45, 05, 05] -2774; [13 59, 05, 05] +263F; [13 47, 05, 05] -2775; [13 5B, 05, 05] +2640; [13 49, 05, 05] -2794; [13 5D, 05, 05] +2641; [13 4B, 05, 05] -2798; [13 5F, 05, 05] +2642; [13 4D, 05, 05] -2799; [13 61, 05, 05] +2643; [13 4F, 05, 05] -279A; [13 63, 05, 05] +2644; [13 51, 05, 05] -279B; [13 65, 05, 05] +2645; [13 53, 05, 05] -279C; [13 67, 05, 05] +2646; [13 55, 05, 05] -279D; [13 69, 05, 05] +2647; [13 57, 05, 05] -279E; [13 6B, 05, 05] +2648; [13 59, 05, 05] -279F; [13 6D, 05, 05] +2649; [13 5B, 05, 05] -27A0; [13 6F, 05, 05] +264A; [13 5D, 05, 05] -27A1; [13 71, 05, 05] +264B; [13 5F, 05, 05] -27A2; [13 73, 05, 05] +264C; [13 61, 05, 05] -27A3; [13 75, 05, 05] +264D; [13 63, 05, 05] -27A4; [13 77, 05, 05] +264E; [13 65, 05, 05] -27A5; [13 79, 05, 05] +264F; [13 67, 05, 05] -27A6; [13 7B, 05, 05] +2650; [13 69, 05, 05] -27A7; [13 7D, 05, 05] +2651; [13 6B, 05, 05] -27A8; [13 7F, 05, 05] +2652; [13 6D, 05, 05] -27A9; [13 81, 05, 05] +2653; [13 6F, 05, 05] -27AA; [13 83, 05, 05] +2654; [13 71, 05, 05] -27AB; [13 85, 05, 05] +2655; [13 73, 05, 05] -27AC; [13 87, 05, 05] +2656; [13 75, 05, 05] -27AD; [13 89, 05, 05] +2657; [13 77, 05, 05] -27AE; [13 8B, 05, 05] +2658; [13 79, 05, 05] -27AF; [13 8D, 05, 05] +2659; [13 7B, 05, 05] -27B1; [13 8F, 05, 05] +265A; [13 7D, 05, 05] -27B2; [13 91, 05, 05] +265B; [13 7F, 05, 05] -27B3; [13 93, 05, 05] +265C; [13 81, 05, 05] -27B4; [13 95, 05, 05] +265D; [13 83, 05, 05] -27B5; [13 97, 05, 05] +265E; [13 85, 05, 05] -27B6; [13 99, 05, 05] +265F; [13 87, 05, 05] -27B7; [13 9B, 05, 05] +2660; [13 89, 05, 05] -27B8; [13 9D, 05, 05] +2661; [13 8B, 05, 05] -27B9; [13 9F, 05, 05] +2662; [13 8D, 05, 05] -27BA; [13 A1, 05, 05] +2663; [13 8F, 05, 05] -27BB; [13 A3, 05, 05] +2664; [13 91, 05, 05] -27BC; [13 A5, 05, 05] +2665; [13 93, 05, 05] -27BD; [13 A7, 05, 05] +2666; [13 95, 05, 05] -27BE; [13 A9, 05, 05] +2667; [13 97, 05, 05] -27D0; [13 AB, 05, 05] +2668; [13 99, 05, 05] -27D1; [13 AD, 05, 05] +2669; [13 9B, 05, 05] -27D2; [13 AF, 05, 05] +266A; [13 9D, 05, 05] -27D3; [13 B1, 05, 05] +266B; [13 9F, 05, 05] -27D4; [13 B3, 05, 05] +266C; [13 A1, 05, 05] -27D5; [13 B5, 05, 05] +2670; [13 A3, 05, 05] -27D6; [13 B7, 05, 05] +2671; [13 A5, 05, 05] -27D7; [13 B9, 05, 05] +2672; [13 A7, 05, 05] -27D8; [13 BB, 05, 05] +2673; [13 A9, 05, 05] -27D9; [13 BD, 05, 05] +2674; [13 AB, 05, 05] -27DA; [13 BF, 05, 05] +2675; [13 AD, 05, 05] -27DB; [13 C1, 05, 05] +2676; [13 AF, 05, 05] -27DC; [13 C3, 05, 05] +2677; [13 B1, 05, 05] -27DD; [13 C5, 05, 05] +2678; [13 B3, 05, 05] -27DE; [13 C7, 05, 05] +2679; [13 B5, 05, 05] -27DF; [13 C9, 05, 05] +267A; [13 B7, 05, 05] -27E0; [13 CB, 05, 05] +267B; [13 B9, 05, 05] -27E1; [13 CD, 05, 05] +267C; [13 BB, 05, 05] -27E2; [13 CF, 05, 05] +267D; [13 BD, 05, 05] -27E3; [13 D1, 05, 05] +267E; [13 BF, 05, 05] -27E4; [13 D3, 05, 05] +267F; [13 C1, 05, 05] -27E5; [13 D5, 05, 05] +2680; [13 C3, 05, 05] -27E6; [13 D7, 05, 05] +2681; [13 C5, 05, 05] -27E7; [13 D9, 05, 05] +2682; [13 C7, 05, 05] -27E8; [13 DB, 05, 05] +2683; [13 C9, 05, 05] -27E9; [13 DD, 05, 05] +2684; [13 CB, 05, 05] -27EA; [13 DF, 05, 05] +2685; [13 CD, 05, 05] -27EB; [13 E1, 05, 05] +2686; [13 CF, 05, 05] -27F0; [13 E3, 05, 05] +2687; [13 D1, 05, 05] -27F1; [13 E5, 05, 05] +2688; [13 D3, 05, 05] -27F2; [13 E7, 05, 05] +2689; [13 D5, 05, 05] -27F3; [13 E9, 05, 05] +2690; [13 D7, 05, 05] -27F4; [13 EB, 05, 05] +2691; [13 D9, 05, 05] -27F5; [13 ED, 05, 05] +2692; [13 DB, 05, 05] -27F6; [13 EF, 05, 05] +2693; [13 DD, 05, 05] -27F7; [13 F1, 05, 05] +2694; [13 DF, 05, 05] -27F8; [13 F3, 05, 05] +2695; [13 E1, 05, 05] -27F9; [13 F5, 05, 05] +2696; [13 E3, 05, 05] -27FA; [13 F7, 05, 05] +2697; [13 E5, 05, 05] -27FB; [13 F9, 05, 05] +2698; [13 E7, 05, 05] -27FC; [13 FB, 05, 05] +2699; [13 E9, 05, 05] -27FD; [13 FD, 05, 05] +269A; [13 EB, 05, 05] -27FE; [14 05, 05, 05] +269B; [13 ED, 05, 05] -27FF; [14 07, 05, 05] +269C; [13 EF, 05, 05] -2900; [14 09, 05, 05] +26A0; [13 F1, 05, 05] -2901; [14 0B, 05, 05] +26A1; [13 F3, 05, 05] -2902; [14 0D, 05, 05] +26A2; [13 F5, 05, 05] -2903; [14 0F, 05, 05] +26A3; [13 F7, 05, 05] -2904; [14 11, 05, 05] +26A4; [13 F9, 05, 05] -2905; [14 13, 05, 05] +26A5; [13 FB, 05, 05] -2906; [14 15, 05, 05] +26A6; [13 FD, 05, 05] -2907; [14 17, 05, 05] +26A7; [14 05, 05, 05] -2908; [14 19, 05, 05] +26A8; [14 07, 05, 05] -2909; [14 1B, 05, 05] +26A9; [14 09, 05, 05] -290A; [14 1D, 05, 05] +26AA; [14 0B, 05, 05] -290B; [14 1F, 05, 05] +26AB; [14 0D, 05, 05] -290C; [14 21, 05, 05] +26AC; [14 0F, 05, 05] -290D; [14 23, 05, 05] +26AD; [14 11, 05, 05] -290E; [14 25, 05, 05] +26AE; [14 13, 05, 05] -290F; [14 27, 05, 05] +26AF; [14 15, 05, 05] -2910; [14 29, 05, 05] +26B0; [14 17, 05, 05] -2911; [14 2B, 05, 05] +26B1; [14 19, 05, 05] -2912; [14 2D, 05, 05] +26B2; [14 1B, 05, 05] -2913; [14 2F, 05, 05] +2701; [14 1D, 05, 05] -2914; [14 31, 05, 05] +2702; [14 1F, 05, 05] -2915; [14 33, 05, 05] +2703; [14 21, 05, 05] -2916; [14 35, 05, 05] +2704; [14 23, 05, 05] -2917; [14 37, 05, 05] +2706; [14 25, 05, 05] -2918; [14 39, 05, 05] +2707; [14 27, 05, 05] -2919; [14 3B, 05, 05] +2708; [14 29, 05, 05] -291A; [14 3D, 05, 05] +2709; [14 2B, 05, 05] -291B; [14 3F, 05, 05] +270C; [14 2D, 05, 05] -291C; [14 41, 05, 05] +270D; [14 2F, 05, 05] -291D; [14 43, 05, 05] +270E; [14 31, 05, 05] -291E; [14 45, 05, 05] +270F; [14 33, 05, 05] -291F; [14 47, 05, 05] +2710; [14 35, 05, 05] -2920; [14 49, 05, 05] +2711; [14 37, 05, 05] -2921; [14 4B, 05, 05] +2712; [14 39, 05, 05] -2922; [14 4D, 05, 05] +2713; [14 3B, 05, 05] -2923; [14 4F, 05, 05] +2714; [14 3D, 05, 05] -2924; [14 51, 05, 05] +2715; [14 3F, 05, 05] -2925; [14 53, 05, 05] +2716; [14 41, 05, 05] -2926; [14 55, 05, 05] +2717; [14 43, 05, 05] -2927; [14 57, 05, 05] +2718; [14 45, 05, 05] -2928; [14 59, 05, 05] +2719; [14 47, 05, 05] -2929; [14 5B, 05, 05] +271A; [14 49, 05, 05] -292A; [14 5D, 05, 05] +271B; [14 4B, 05, 05] -292B; [14 5F, 05, 05] +271C; [14 4D, 05, 05] -292C; [14 61, 05, 05] +271D; [14 4F, 05, 05] -292D; [14 63, 05, 05] +271E; [14 51, 05, 05] -292E; [14 65, 05, 05] +271F; [14 53, 05, 05] -292F; [14 67, 05, 05] +2720; [14 55, 05, 05] -2930; [14 69, 05, 05] +2721; [14 57, 05, 05] -2931; [14 6B, 05, 05] +2722; [14 59, 05, 05] -2932; [14 6D, 05, 05] +2723; [14 5B, 05, 05] -2933; [14 6F, 05, 05] +2724; [14 5D, 05, 05] -2934; [14 71, 05, 05] +2725; [14 5F, 05, 05] -2935; [14 73, 05, 05] +2726; [14 61, 05, 05] -2936; [14 75, 05, 05] +2727; [14 63, 05, 05] -2937; [14 77, 05, 05] +2729; [14 65, 05, 05] -2938; [14 79, 05, 05] +272A; [14 67, 05, 05] -2939; [14 7B, 05, 05] +272B; [14 69, 05, 05] -293A; [14 7D, 05, 05] +272C; [14 6B, 05, 05] -293B; [14 7F, 05, 05] +272D; [14 6D, 05, 05] -293C; [14 81, 05, 05] +272E; [14 6F, 05, 05] -293D; [14 83, 05, 05] +272F; [14 71, 05, 05] -293E; [14 85, 05, 05] +2730; [14 73, 05, 05] -293F; [14 87, 05, 05] +2731; [14 75, 05, 05] -2940; [14 89, 05, 05] +2732; [14 77, 05, 05] -2941; [14 8B, 05, 05] +2733; [14 79, 05, 05] -2942; [14 8D, 05, 05] +2734; [14 7B, 05, 05] -2943; [14 8F, 05, 05] +2735; [14 7D, 05, 05] -2944; [14 91, 05, 05] +2736; [14 7F, 05, 05] -2945; [14 93, 05, 05] +2737; [14 81, 05, 05] -2946; [14 95, 05, 05] +2738; [14 83, 05, 05] -2947; [14 97, 05, 05] +2739; [14 85, 05, 05] -2948; [14 99, 05, 05] +273A; [14 87, 05, 05] -2949; [14 9B, 05, 05] +273B; [14 89, 05, 05] -294A; [14 9D, 05, 05] +273C; [14 8B, 05, 05] -294B; [14 9F, 05, 05] +273D; [14 8D, 05, 05] -294C; [14 A1, 05, 05] +273E; [14 8F, 05, 05] -294D; [14 A3, 05, 05] +273F; [14 91, 05, 05] -294E; [14 A5, 05, 05] +2740; [14 93, 05, 05] -294F; [14 A7, 05, 05] +2741; [14 95, 05, 05] -2950; [14 A9, 05, 05] +2742; [14 97, 05, 05] -2951; [14 AB, 05, 05] +2743; [14 99, 05, 05] -2952; [14 AD, 05, 05] +2744; [14 9B, 05, 05] -2953; [14 AF, 05, 05] +2745; [14 9D, 05, 05] -2954; [14 B1, 05, 05] +2746; [14 9F, 05, 05] -2955; [14 B3, 05, 05] +2747; [14 A1, 05, 05] -2956; [14 B5, 05, 05] +2748; [14 A3, 05, 05] -2957; [14 B7, 05, 05] +2749; [14 A5, 05, 05] -2958; [14 B9, 05, 05] +274A; [14 A7, 05, 05] -2959; [14 BB, 05, 05] +274B; [14 A9, 05, 05] -295A; [14 BD, 05, 05] +274D; [14 AB, 05, 05] -295B; [14 BF, 05, 05] +274F; [14 AD, 05, 05] -295C; [14 C1, 05, 05] +2750; [14 AF, 05, 05] -295D; [14 C3, 05, 05] +2751; [14 B1, 05, 05] -295E; [14 C5, 05, 05] +2752; [14 B3, 05, 05] -295F; [14 C7, 05, 05] +2756; [14 B5, 05, 05] -2960; [14 C9, 05, 05] +2758; [14 B7, 05, 05] -2961; [14 CB, 05, 05] +2759; [14 B9, 05, 05] -2962; [15 20, 05, 05] +275A; [14 BB, 05, 05] -2963; [15 22, 05, 05] +275B; [14 BD, 05, 05] -2964; [15 24, 05, 05] +275C; [14 BF, 05, 05] -2965; [15 26, 05, 05] +275D; [14 C1, 05, 05] -2966; [15 28, 05, 05] +275E; [14 C3, 05, 05] -2967; [15 2A, 05, 05] +2761; [14 C5, 05, 05] -2968; [15 2C, 05, 05] +2762; [14 C7, 05, 05] -2969; [15 2E, 05, 05] +2763; [14 C9, 05, 05] -296A; [15 30, 05, 05] +2764; [14 CB, 05, 05] -296B; [15 32, 05, 05] +2765; [15 20, 05, 05] -296C; [15 34, 05, 05] +2766; [15 22, 05, 05] -296D; [15 36, 05, 05] +2767; [15 24, 05, 05] -296E; [15 38, 05, 05] +2768; [15 26, 05, 05] -296F; [15 3A, 05, 05] +2769; [15 28, 05, 05] -2970; [15 3C, 05, 05] +276A; [15 2A, 05, 05] -2971; [15 3E, 05, 05] +276B; [15 2C, 05, 05] -2972; [15 40, 05, 05] +276C; [15 2E, 05, 05] -2973; [15 42, 05, 05] +276D; [15 30, 05, 05] -2974; [15 44, 05, 05] +276E; [15 32, 05, 05] -2975; [15 46, 05, 05] +276F; [15 34, 05, 05] -2976; [15 48, 05, 05] +2770; [15 36, 05, 05] -2977; [15 4A, 05, 05] +2771; [15 38, 05, 05] -2978; [15 4C, 05, 05] +2772; [15 3A, 05, 05] -2979; [15 4E, 05, 05] +2773; [15 3C, 05, 05] -297A; [15 50, 05, 05] +2774; [15 3E, 05, 05] -297B; [15 52, 05, 05] +2775; [15 40, 05, 05] -297C; [15 54, 05, 05] +2794; [15 42, 05, 05] -297D; [15 56, 05, 05] +2798; [15 44, 05, 05] -297E; [15 58, 05, 05] +2799; [15 46, 05, 05] -297F; [15 5A, 05, 05] +279A; [15 48, 05, 05] -2980; [15 5C, 05, 05] +279B; [15 4A, 05, 05] -2981; [15 5E, 05, 05] +279C; [15 4C, 05, 05] -2982; [15 60, 05, 05] +279D; [15 4E, 05, 05] -2999; [15 62, 05, 05] +279E; [15 50, 05, 05] -299A; [15 64, 05, 05] +279F; [15 52, 05, 05] -299B; [15 66, 05, 05] +27A0; [15 54, 05, 05] -299C; [15 68, 05, 05] +27A1; [15 56, 05, 05] -299D; [15 6A, 05, 05] +27A2; [15 58, 05, 05] -299E; [15 6C, 05, 05] +27A3; [15 5A, 05, 05] -299F; [15 6E, 05, 05] +27A4; [15 5C, 05, 05] -29A0; [15 70, 05, 05] +27A5; [15 5E, 05, 05] -29A1; [15 72, 05, 05] +27A6; [15 60, 05, 05] -29A2; [15 74, 05, 05] +27A7; [15 62, 05, 05] -29A3; [15 76, 05, 05] +27A8; [15 64, 05, 05] -29A4; [15 78, 05, 05] +27A9; [15 66, 05, 05] -29A5; [15 7A, 05, 05] +27AA; [15 68, 05, 05] -29A6; [15 7C, 05, 05] +27AB; [15 6A, 05, 05] -29A7; [15 7E, 05, 05] +27AC; [15 6C, 05, 05] -29A8; [15 80, 05, 05] +27AD; [15 6E, 05, 05] -29A9; [15 82, 05, 05] +27AE; [15 70, 05, 05] -29AA; [15 84, 05, 05] +27AF; [15 72, 05, 05] -29AB; [15 86, 05, 05] +27B1; [15 74, 05, 05] -29AC; [15 88, 05, 05] +27B2; [15 76, 05, 05] -29AD; [15 8A, 05, 05] +27B3; [15 78, 05, 05] -29AE; [15 8C, 05, 05] +27B4; [15 7A, 05, 05] -29AF; [15 8E, 05, 05] +27B5; [15 7C, 05, 05] -29B0; [15 90, 05, 05] +27B6; [15 7E, 05, 05] -29B1; [15 92, 05, 05] +27B7; [15 80, 05, 05] -29B2; [15 94, 05, 05] +27B8; [15 82, 05, 05] -29B3; [15 96, 05, 05] +27B9; [15 84, 05, 05] -29B4; [15 98, 05, 05] +27BA; [15 86, 05, 05] -29B5; [15 9A, 05, 05] +27BB; [15 88, 05, 05] -29B6; [15 9C, 05, 05] +27BC; [15 8A, 05, 05] -29B7; [15 9E, 05, 05] +27BD; [15 8C, 05, 05] -29B8; [15 A0, 05, 05] +27BE; [15 8E, 05, 05] -29B9; [15 A2, 05, 05] +27C0; [15 90, 05, 05] -29BA; [15 A4, 05, 05] +27C1; [15 92, 05, 05] -29BB; [15 A6, 05, 05] +27C2; [15 94, 05, 05] -29BC; [15 A8, 05, 05] +27C3; [15 96, 05, 05] -29BD; [15 AA, 05, 05] +27C4; [15 98, 05, 05] -29BE; [15 AC, 05, 05] +27C5; [15 9A, 05, 05] -29BF; [15 AE, 05, 05] +27C6; [15 9C, 05, 05] -29C0; [15 B0, 05, 05] +27C7; [15 9E, 05, 05] -29C1; [15 B2, 05, 05] +27C8; [15 A0, 05, 05] -29C2; [15 B4, 05, 05] +27C9; [15 A2, 05, 05] -29C3; [15 B6, 05, 05] +27CA; [15 A4, 05, 05] -29C4; [15 B8, 05, 05] +27D0; [15 A6, 05, 05] -29C5; [15 BA, 05, 05] +27D1; [15 A8, 05, 05] -29C6; [15 BC, 05, 05] +27D2; [15 AA, 05, 05] -29C7; [15 BE, 05, 05] +27D3; [15 AC, 05, 05] -29C8; [15 C0, 05, 05] +27D4; [15 AE, 05, 05] -29C9; [15 C2, 05, 05] +27D5; [15 B0, 05, 05] -29CA; [15 C4, 05, 05] +27D6; [15 B2, 05, 05] -29CB; [15 C6, 05, 05] +27D7; [15 B4, 05, 05] -29CC; [15 C8, 05, 05] +27D8; [15 B6, 05, 05] -29CD; [15 CA, 05, 05] +27D9; [15 B8, 05, 05] -29CE; [15 CC, 05, 05] +27DA; [15 BA, 05, 05] -29CF; [15 CE, 05, 05] +27DB; [15 BC, 05, 05] -29D0; [15 D0, 05, 05] +27DC; [15 BE, 05, 05] -29D1; [15 D2, 05, 05] +27DD; [15 C0, 05, 05] -29D2; [15 D4, 05, 05] +27DE; [15 C2, 05, 05] -29D3; [15 D6, 05, 05] +27DF; [15 C4, 05, 05] -29D4; [15 D8, 05, 05] +27E0; [15 C6, 05, 05] -29D5; [15 DA, 05, 05] +27E1; [15 C8, 05, 05] -29D6; [15 DC, 05, 05] +27E2; [15 CA, 05, 05] -29D7; [15 DE, 05, 05] +27E3; [15 CC, 05, 05] -29D8; [15 E0, 05, 05] +27E4; [15 CE, 05, 05] -29D9; [15 E2, 05, 05] +27E5; [15 D0, 05, 05] -29DA; [15 E4, 05, 05] +27E6; [15 D2, 05, 05] -29DB; [15 E6, 05, 05] +27E7; [15 D4, 05, 05] -29DC; [15 E8, 05, 05] +27E8; [15 D6, 05, 05] -29DD; [15 EA, 05, 05] +27E9; [15 D8, 05, 05] -29DE; [15 EC, 05, 05] +27EA; [15 DA, 05, 05] -29DF; [15 EE, 05, 05] +27EB; [15 DC, 05, 05] -29E0; [15 F0, 05, 05] +27F0; [15 DE, 05, 05] -29E1; [15 F2, 05, 05] +27F1; [15 E0, 05, 05] -29E2; [15 F4, 05, 05] +27F2; [15 E2, 05, 05] -29E3; [15 F6, 05, 05] +27F3; [15 E4, 05, 05] -29E4; [15 F8, 05, 05] +27F4; [15 E6, 05, 05] -29E5; [15 FA, 05, 05] +27F5; [15 E8, 05, 05] -29E6; [15 FC, 05, 05] +27F6; [15 EA, 05, 05] -29E7; [15 FE, 05, 05] +27F7; [15 EC, 05, 05] -29E8; [16 05, 05, 05] +27F8; [15 EE, 05, 05] -29E9; [16 07, 05, 05] +27F9; [15 F0, 05, 05] -29EA; [16 09, 05, 05] +27FA; [15 F2, 05, 05] -29EB; [16 0B, 05, 05] +27FB; [15 F4, 05, 05] -29EC; [16 0D, 05, 05] +27FC; [15 F6, 05, 05] -29ED; [16 0F, 05, 05] +27FD; [15 F8, 05, 05] -29EE; [16 11, 05, 05] +27FE; [15 FA, 05, 05] -29EF; [16 13, 05, 05] +27FF; [15 FC, 05, 05] -29F0; [16 15, 05, 05] +2900; [15 FE, 05, 05] -29F1; [16 17, 05, 05] +2901; [16 05, 05, 05] -29F2; [16 19, 05, 05] +2902; [16 07, 05, 05] -29F3; [16 1B, 05, 05] +2903; [16 09, 05, 05] -29F4; [16 1D, 05, 05] +2904; [16 0B, 05, 05] -29F5; [16 1F, 05, 05] +2905; [16 0D, 05, 05] -29F6; [16 21, 05, 05] +2906; [16 0F, 05, 05] -29F7; [16 23, 05, 05] +2907; [16 11, 05, 05] -29F8; [16 25, 05, 05] +2908; [16 13, 05, 05] -29F9; [16 27, 05, 05] +2909; [16 15, 05, 05] -29FA; [16 29, 05, 05] +290A; [16 17, 05, 05] -29FB; [16 2B, 05, 05] +290B; [16 19, 05, 05] -29FE; [16 2D, 05, 05] +290C; [16 1B, 05, 05] -29FF; [16 2F, 05, 05] +290D; [16 1D, 05, 05] -2A00; [16 31, 05, 05] +290E; [16 1F, 05, 05] -2A01; [16 33, 05, 05] +290F; [16 21, 05, 05] -2A02; [16 35, 05, 05] +2910; [16 23, 05, 05] -2A03; [16 37, 05, 05] +2911; [16 25, 05, 05] -2A04; [16 39, 05, 05] +2912; [16 27, 05, 05] -2A05; [16 3B, 05, 05] +2913; [16 29, 05, 05] -2A06; [16 3D, 05, 05] +2914; [16 2B, 05, 05] -2A07; [16 3F, 05, 05] +2915; [16 2D, 05, 05] -2A08; [16 41, 05, 05] +2916; [16 2F, 05, 05] -2A09; [16 43, 05, 05] +2917; [16 31, 05, 05] -2A0A; [16 45, 05, 05] +2918; [16 33, 05, 05] -2A0B; [16 47, 05, 05] +2919; [16 35, 05, 05] -2A0D; [16 49, 05, 05] +291A; [16 37, 05, 05] -2A0E; [16 4B, 05, 05] +291B; [16 39, 05, 05] -2A0F; [16 4D, 05, 05] +291C; [16 3B, 05, 05] -2A10; [16 4F, 05, 05] +291D; [16 3D, 05, 05] -2A11; [16 51, 05, 05] +291E; [16 3F, 05, 05] -2A12; [16 53, 05, 05] +291F; [16 41, 05, 05] -2A13; [16 55, 05, 05] +2920; [16 43, 05, 05] -2A14; [16 57, 05, 05] +2921; [16 45, 05, 05] -2A15; [16 59, 05, 05] +2922; [16 47, 05, 05] -2A16; [16 5B, 05, 05] +2923; [16 49, 05, 05] -2A17; [16 5D, 05, 05] +2924; [16 4B, 05, 05] -2A18; [16 5F, 05, 05] +2925; [16 4D, 05, 05] -2A19; [16 61, 05, 05] +2926; [16 4F, 05, 05] -2A1A; [16 63, 05, 05] +2927; [16 51, 05, 05] -2A1B; [16 65, 05, 05] +2928; [16 53, 05, 05] -2A1C; [16 67, 05, 05] +2929; [16 55, 05, 05] -2A1D; [16 69, 05, 05] +292A; [16 57, 05, 05] -2A1E; [16 6B, 05, 05] +292B; [16 59, 05, 05] -2A1F; [16 6D, 05, 05] +292C; [16 5B, 05, 05] -2A20; [16 6F, 05, 05] +292D; [16 5D, 05, 05] -2A21; [16 71, 05, 05] +292E; [16 5F, 05, 05] -2A22; [16 73, 05, 05] +292F; [16 61, 05, 05] -2A23; [16 75, 05, 05] +2930; [16 63, 05, 05] -2A24; [16 77, 05, 05] +2931; [16 65, 05, 05] -2A25; [16 79, 05, 05] +2932; [16 67, 05, 05] -2A26; [16 7B, 05, 05] +2933; [16 69, 05, 05] -2A27; [16 7D, 05, 05] +2934; [16 6B, 05, 05] -2A28; [16 7F, 05, 05] +2935; [16 6D, 05, 05] -2A29; [16 81, 05, 05] +2936; [16 6F, 05, 05] -2A2A; [16 83, 05, 05] +2937; [16 71, 05, 05] -2A2B; [16 85, 05, 05] +2938; [16 73, 05, 05] -2A2C; [16 87, 05, 05] +2939; [16 75, 05, 05] -2A2D; [16 89, 05, 05] +293A; [16 77, 05, 05] -2A2E; [16 8B, 05, 05] +293B; [16 79, 05, 05] -2A2F; [16 8D, 05, 05] +293C; [16 7B, 05, 05] -2A30; [16 8F, 05, 05] +293D; [16 7D, 05, 05] -2A31; [16 91, 05, 05] +293E; [16 7F, 05, 05] -2A32; [16 93, 05, 05] +293F; [16 81, 05, 05] -2A33; [16 95, 05, 05] +2940; [16 83, 05, 05] -2A34; [16 97, 05, 05] +2941; [16 85, 05, 05] -2A35; [16 99, 05, 05] +2942; [16 87, 05, 05] -2A36; [16 9B, 05, 05] +2943; [16 89, 05, 05] -2A37; [16 9D, 05, 05] +2944; [16 8B, 05, 05] -2A38; [16 9F, 05, 05] +2945; [16 8D, 05, 05] -2A39; [16 A1, 05, 05] +2946; [16 8F, 05, 05] -2A3A; [16 A3, 05, 05] +2947; [16 91, 05, 05] -2A3B; [16 A5, 05, 05] +2948; [16 93, 05, 05] -2A3C; [16 A7, 05, 05] +2949; [16 95, 05, 05] -2A3D; [16 A9, 05, 05] +294A; [16 97, 05, 05] -2A3E; [16 AB, 05, 05] +294B; [16 99, 05, 05] -2A3F; [16 AD, 05, 05] +294C; [16 9B, 05, 05] -2A40; [16 AF, 05, 05] +294D; [16 9D, 05, 05] -2A41; [16 B1, 05, 05] +294E; [16 9F, 05, 05] -2A42; [16 B3, 05, 05] +294F; [16 A1, 05, 05] -2A43; [16 B5, 05, 05] +2950; [16 A3, 05, 05] -2A44; [16 B7, 05, 05] +2951; [16 A5, 05, 05] -2A45; [16 B9, 05, 05] +2952; [16 A7, 05, 05] -2A46; [16 BB, 05, 05] +2953; [16 A9, 05, 05] -2A47; [16 BD, 05, 05] +2954; [16 AB, 05, 05] -2A48; [16 BF, 05, 05] +2955; [16 AD, 05, 05] -2A49; [16 C1, 05, 05] +2956; [16 AF, 05, 05] -2A4A; [16 C3, 05, 05] +2957; [16 B1, 05, 05] -2A4B; [16 C5, 05, 05] +2958; [16 B3, 05, 05] -2A4C; [16 C7, 05, 05] +2959; [16 B5, 05, 05] -2A4D; [16 C9, 05, 05] +295A; [16 B7, 05, 05] -2A4E; [16 CB, 05, 05] +295B; [16 B9, 05, 05] -2A4F; [16 CD, 05, 05] +295C; [16 BB, 05, 05] -2A50; [16 CF, 05, 05] +295D; [16 BD, 05, 05] -2A51; [16 D1, 05, 05] +295E; [16 BF, 05, 05] -2A52; [16 D3, 05, 05] +295F; [16 C1, 05, 05] -2A53; [16 D5, 05, 05] +2960; [16 C3, 05, 05] -2A54; [16 D7, 05, 05] +2961; [16 C5, 05, 05] -2A55; [16 D9, 05, 05] +2962; [16 C7, 05, 05] -2A56; [16 DB, 05, 05] +2963; [16 C9, 05, 05] -2A57; [16 DD, 05, 05] +2964; [16 CB, 05, 05] -2A58; [16 DF, 05, 05] +2965; [16 CD, 05, 05] -2A59; [16 E1, 05, 05] +2966; [16 CF, 05, 05] -2A5A; [16 E3, 05, 05] +2967; [16 D1, 05, 05] -2A5B; [16 E5, 05, 05] +2968; [16 D3, 05, 05] -2A5C; [16 E7, 05, 05] +2969; [16 D5, 05, 05] -2A5D; [16 E9, 05, 05] +296A; [16 D7, 05, 05] -2A5E; [16 EB, 05, 05] +296B; [16 D9, 05, 05] -2A5F; [16 ED, 05, 05] +296C; [16 DB, 05, 05] -2A60; [16 EF, 05, 05] +296D; [16 DD, 05, 05] -2A61; [16 F1, 05, 05] +296E; [16 DF, 05, 05] -2A62; [16 F3, 05, 05] +296F; [16 E1, 05, 05] -2A63; [16 F5, 05, 05] +2970; [16 E3, 05, 05] -2A64; [16 F7, 05, 05] +2971; [16 E5, 05, 05] -2A65; [16 F9, 05, 05] +2972; [16 E7, 05, 05] -2A66; [16 FB, 05, 05] +2973; [16 E9, 05, 05] -2A67; [16 FD, 05, 05] +2974; [16 EB, 05, 05] -2A68; [17 05, 05, 05] +2975; [16 ED, 05, 05] -2A69; [17 07, 05, 05] +2976; [16 EF, 05, 05] -2A6A; [17 09, 05, 05] +2977; [16 F1, 05, 05] -2A6B; [17 0B, 05, 05] +2978; [16 F3, 05, 05] -2A6C; [17 0D, 05, 05] +2979; [16 F5, 05, 05] -2A6D; [17 0F, 05, 05] +297A; [16 F7, 05, 05] -2A6E; [17 11, 05, 05] +297B; [16 F9, 05, 05] -2A6F; [17 13, 05, 05] +297C; [16 FB, 05, 05] -2A70; [17 15, 05, 05] +297D; [16 FD, 05, 05] -2A71; [17 17, 05, 05] +297E; [17 05, 05, 05] -2A72; [17 19, 05, 05] +297F; [17 07, 05, 05] -2A73; [17 1B, 05, 05] +2980; [17 09, 05, 05] -2A77; [17 1D, 05, 05] +2981; [17 0B, 05, 05] -2A78; [17 1F, 05, 05] +2982; [17 0D, 05, 05] -2A79; [17 21, 05, 05] +2999; [17 0F, 05, 05] -2A7A; [17 23, 05, 05] +299A; [17 11, 05, 05] -2A7B; [17 25, 05, 05] +299B; [17 13, 05, 05] -2A7C; [17 27, 05, 05] +299C; [17 15, 05, 05] -2A7D; [17 29, 05, 05] +299D; [17 17, 05, 05] -2A7E; [17 2B, 05, 05] +299E; [17 19, 05, 05] -2A7F; [17 2D, 05, 05] +299F; [17 1B, 05, 05] -2A80; [17 2F, 05, 05] +29A0; [17 1D, 05, 05] -2A81; [17 31, 05, 05] +29A1; [17 1F, 05, 05] -2A82; [17 33, 05, 05] +29A2; [17 21, 05, 05] -2A83; [17 35, 05, 05] +29A3; [17 23, 05, 05] -2A84; [17 37, 05, 05] +29A4; [17 25, 05, 05] -2A85; [17 39, 05, 05] +29A5; [17 27, 05, 05] -2A86; [17 3B, 05, 05] +29A6; [17 29, 05, 05] -2A87; [17 3D, 05, 05] +29A7; [17 2B, 05, 05] -2A88; [17 3F, 05, 05] +29A8; [17 2D, 05, 05] -2A89; [17 41, 05, 05] +29A9; [17 2F, 05, 05] -2A8A; [17 43, 05, 05] +29AA; [17 31, 05, 05] -2A8B; [17 45, 05, 05] +29AB; [17 33, 05, 05] -2A8C; [17 47, 05, 05] +29AC; [17 35, 05, 05] -2A8D; [17 49, 05, 05] +29AD; [17 37, 05, 05] -2A8E; [17 4B, 05, 05] +29AE; [17 39, 05, 05] -2A8F; [17 4D, 05, 05] +29AF; [17 3B, 05, 05] -2A90; [17 4F, 05, 05] +29B0; [17 3D, 05, 05] -2A91; [17 51, 05, 05] +29B1; [17 3F, 05, 05] -2A92; [17 53, 05, 05] +29B2; [17 41, 05, 05] -2A93; [17 55, 05, 05] +29B3; [17 43, 05, 05] -2A94; [17 57, 05, 05] +29B4; [17 45, 05, 05] -2A95; [17 59, 05, 05] +29B5; [17 47, 05, 05] -2A96; [17 5B, 05, 05] +29B6; [17 49, 05, 05] -2A97; [17 5D, 05, 05] +29B7; [17 4B, 05, 05] -2A98; [17 5F, 05, 05] +29B8; [17 4D, 05, 05] -2A99; [17 61, 05, 05] +29B9; [17 4F, 05, 05] -2A9A; [17 63, 05, 05] +29BA; [17 51, 05, 05] -2A9B; [17 65, 05, 05] +29BB; [17 53, 05, 05] -2A9C; [17 67, 05, 05] +29BC; [17 55, 05, 05] -2A9D; [17 69, 05, 05] +29BD; [17 57, 05, 05] -2A9E; [17 6B, 05, 05] +29BE; [17 59, 05, 05] -2A9F; [17 6D, 05, 05] +29BF; [17 5B, 05, 05] -2AA0; [17 6F, 05, 05] +29C0; [17 5D, 05, 05] -2AA1; [17 71, 05, 05] +29C1; [17 5F, 05, 05] -2AA2; [17 73, 05, 05] +29C2; [17 61, 05, 05] -2AA3; [17 75, 05, 05] +29C3; [17 63, 05, 05] -2AA4; [17 77, 05, 05] +29C4; [17 65, 05, 05] -2AA5; [17 79, 05, 05] +29C5; [17 67, 05, 05] -2AA6; [17 7B, 05, 05] +29C6; [17 69, 05, 05] -2AA7; [17 7D, 05, 05] +29C7; [17 6B, 05, 05] -2AA8; [17 7F, 05, 05] +29C8; [17 6D, 05, 05] -2AA9; [17 81, 05, 05] +29C9; [17 6F, 05, 05] -2AAA; [17 83, 05, 05] +29CA; [17 71, 05, 05] -2AAB; [17 85, 05, 05] +29CB; [17 73, 05, 05] -2AAC; [17 87, 05, 05] +29CC; [17 75, 05, 05] -2AAD; [17 89, 05, 05] +29CD; [17 77, 05, 05] -2AAE; [17 8B, 05, 05] +29CE; [17 79, 05, 05] -2AAF; [17 8D, 05, 05] +29CF; [17 7B, 05, 05] -2AB0; [17 8F, 05, 05] +29D0; [17 7D, 05, 05] -2AB1; [17 91, 05, 05] +29D1; [17 7F, 05, 05] -2AB2; [17 93, 05, 05] +29D2; [17 81, 05, 05] -2AB3; [17 95, 05, 05] +29D3; [17 83, 05, 05] -2AB4; [17 97, 05, 05] +29D4; [17 85, 05, 05] -2AB5; [17 99, 05, 05] +29D5; [17 87, 05, 05] -2AB6; [17 9B, 05, 05] +29D6; [17 89, 05, 05] -2AB7; [17 9D, 05, 05] +29D7; [17 8B, 05, 05] -2AB8; [17 9F, 05, 05] +29D8; [17 8D, 05, 05] -2AB9; [17 A1, 05, 05] +29D9; [17 8F, 05, 05] -2ABA; [17 A3, 05, 05] +29DA; [17 91, 05, 05] -2ABB; [17 A5, 05, 05] +29DB; [17 93, 05, 05] -2ABC; [17 A7, 05, 05] +29DC; [17 95, 05, 05] -2ABD; [17 A9, 05, 05] +29DD; [17 97, 05, 05] -2ABE; [17 AB, 05, 05] +29DE; [17 99, 05, 05] -2ABF; [17 AD, 05, 05] +29DF; [17 9B, 05, 05] -2AC0; [17 AF, 05, 05] +29E0; [17 9D, 05, 05] -2AC1; [17 B1, 05, 05] +29E1; [17 9F, 05, 05] -2AC2; [17 B3, 05, 05] +29E2; [17 A1, 05, 05] -2AC3; [17 B5, 05, 05] +29E3; [17 A3, 05, 05] -2AC4; [17 B7, 05, 05] +29E4; [17 A5, 05, 05] -2AC5; [17 B9, 05, 05] +29E5; [17 A7, 05, 05] -2AC6; [17 BB, 05, 05] +29E6; [17 A9, 05, 05] -2AC7; [17 BD, 05, 05] +29E7; [17 AB, 05, 05] -2AC8; [17 BF, 05, 05] +29E8; [17 AD, 05, 05] -2AC9; [17 C1, 05, 05] +29E9; [17 AF, 05, 05] -2ACA; [17 C3, 05, 05] +29EA; [17 B1, 05, 05] -2ACB; [17 C5, 05, 05] +29EB; [17 B3, 05, 05] -2ACC; [17 C7, 05, 05] +29EC; [17 B5, 05, 05] -2ACD; [17 C9, 05, 05] +29ED; [17 B7, 05, 05] -2ACE; [17 CB, 05, 05] +29EE; [17 B9, 05, 05] -2ACF; [17 CD, 05, 05] +29EF; [17 BB, 05, 05] -2AD0; [17 CF, 05, 05] +29F0; [17 BD, 05, 05] -2AD1; [17 D1, 05, 05] +29F1; [17 BF, 05, 05] -2AD2; [17 D3, 05, 05] +29F2; [17 C1, 05, 05] -2AD3; [17 D5, 05, 05] +29F3; [17 C3, 05, 05] -2AD4; [17 D7, 05, 05] +29F4; [17 C5, 05, 05] -2AD5; [17 D9, 05, 05] +29F5; [17 C7, 05, 05] -2AD6; [17 DB, 05, 05] +29F6; [17 C9, 05, 05] -2AD7; [17 DD, 05, 05] +29F7; [17 CB, 05, 05] -2AD8; [17 DF, 05, 05] +29F8; [17 CD, 05, 05] -2AD9; [17 E1, 05, 05] +29F9; [17 CF, 05, 05] -2ADA; [17 E3, 05, 05] +29FA; [17 D1, 05, 05] -2ADB; [17 E5, 05, 05] +29FB; [17 D3, 05, 05] -2ADD; [17 E7, 05, 05] -2ADC; [17 E7, 05, 05][, A5, 05] +29FE; [17 D5, 05, 05] -2ADE; [17 E9, 05, 05] +29FF; [17 D7, 05, 05] -2ADF; [17 EB, 05, 05] +2A00; [17 D9, 05, 05] -2AE0; [17 ED, 05, 05] +2A01; [17 DB, 05, 05] -2AE1; [17 EF, 05, 05] +2A02; [17 DD, 05, 05] -2AE2; [17 F1, 05, 05] +2A03; [17 DF, 05, 05] -2AE3; [17 F3, 05, 05] +2A04; [17 E1, 05, 05] -2AE4; [17 F5, 05, 05] +2A05; [17 E3, 05, 05] -2AE5; [17 F7, 05, 05] +2A06; [17 E5, 05, 05] -2AE6; [17 F9, 05, 05] +2A07; [17 E7, 05, 05] -2AE7; [17 FB, 05, 05] +2A08; [17 E9, 05, 05] -2AE8; [17 FD, 05, 05] +2A09; [17 EB, 05, 05] -2AE9; [18 05, 05, 05] +2A0A; [17 ED, 05, 05] -2AEA; [18 07, 05, 05] +2A0B; [17 EF, 05, 05] -2AEB; [18 09, 05, 05] +2A0D; [17 F1, 05, 05] -2AEC; [18 0B, 05, 05] +2A0E; [17 F3, 05, 05] -2AED; [18 0D, 05, 05] +2A0F; [17 F5, 05, 05] -2AEE; [18 0F, 05, 05] +2A10; [17 F7, 05, 05] -2AEF; [18 11, 05, 05] +2A11; [17 F9, 05, 05] -2AF0; [18 13, 05, 05] +2A12; [17 FB, 05, 05] -2AF1; [18 15, 05, 05] +2A13; [17 FD, 05, 05] -2AF2; [18 17, 05, 05] +2A14; [18 05, 05, 05] -2AF3; [18 19, 05, 05] +2A15; [18 07, 05, 05] -2AF4; [18 1B, 05, 05] +2A16; [18 09, 05, 05] -2AF5; [18 1D, 05, 05] +2A17; [18 0B, 05, 05] -2AF6; [18 1F, 05, 05] +2A18; [18 0D, 05, 05] -2AF7; [18 21, 05, 05] +2A19; [18 0F, 05, 05] -2AF8; [18 23, 05, 05] +2A1A; [18 11, 05, 05] -2AF9; [18 25, 05, 05] +2A1B; [18 13, 05, 05] -2AFA; [18 27, 05, 05] +2A1C; [18 15, 05, 05] -2AFB; [18 29, 05, 05] +2A1D; [18 17, 05, 05] -2AFC; [18 2B, 05, 05] +2A1E; [18 19, 05, 05] -2AFD; [18 2D, 05, 05] +2A1F; [18 1B, 05, 05] -2AFE; [18 2F, 05, 05] +2A20; [18 1D, 05, 05] -2AFF; [18 31, 05, 05] +2A21; [18 1F, 05, 05] -2B00; [18 33, 05, 05] +2A22; [18 21, 05, 05] -2B01; [18 35, 05, 05] +2A23; [18 23, 05, 05] -2B02; [18 37, 05, 05] +2A24; [18 25, 05, 05] -2B03; [18 39, 05, 05] +2A25; [18 27, 05, 05] -2B04; [18 3B, 05, 05] +2A26; [18 29, 05, 05] -2B05; [18 3D, 05, 05] +2A27; [18 2B, 05, 05] -2B06; [18 3F, 05, 05] +2A28; [18 2D, 05, 05] -2B07; [18 41, 05, 05] +2A29; [18 2F, 05, 05] -2B08; [18 43, 05, 05] +2A2A; [18 31, 05, 05] -2B09; [18 45, 05, 05] +2A2B; [18 33, 05, 05] -2B0A; [18 47, 05, 05] +2A2C; [18 35, 05, 05] -2B0B; [18 49, 05, 05] +2A2D; [18 37, 05, 05] -2B0C; [18 4B, 05, 05] +2A2E; [18 39, 05, 05] -2B0D; [18 4D, 05, 05] +2A2F; [18 3B, 05, 05] -2800; [18 4F, 05, 05] +2A30; [18 3D, 05, 05] -2801; [18 51, 05, 05] +2A31; [18 3F, 05, 05] -2802; [18 53, 05, 05] +2A32; [18 41, 05, 05] -2803; [18 55, 05, 05] +2A33; [18 43, 05, 05] -2804; [18 57, 05, 05] +2A34; [18 45, 05, 05] -2805; [18 59, 05, 05] +2A35; [18 47, 05, 05] -2806; [18 5B, 05, 05] +2A36; [18 49, 05, 05] -2807; [18 5D, 05, 05] +2A37; [18 4B, 05, 05] -2808; [18 5F, 05, 05] +2A38; [18 4D, 05, 05] -2809; [18 61, 05, 05] +2A39; [18 4F, 05, 05] -280A; [18 63, 05, 05] +2A3A; [18 51, 05, 05] -280B; [18 65, 05, 05] +2A3B; [18 53, 05, 05] -280C; [18 67, 05, 05] +2A3C; [18 55, 05, 05] -280D; [18 69, 05, 05] +2A3D; [18 57, 05, 05] -280E; [18 6B, 05, 05] +2A3E; [18 59, 05, 05] -280F; [18 6D, 05, 05] +2A3F; [18 5B, 05, 05] -2810; [18 6F, 05, 05] +2A40; [18 5D, 05, 05] -2811; [18 71, 05, 05] +2A41; [18 5F, 05, 05] -2812; [18 73, 05, 05] +2A42; [18 61, 05, 05] -2813; [18 75, 05, 05] +2A43; [18 63, 05, 05] -2814; [18 77, 05, 05] +2A44; [18 65, 05, 05] -2815; [18 79, 05, 05] +2A45; [18 67, 05, 05] -2816; [18 7B, 05, 05] +2A46; [18 69, 05, 05] -2817; [18 7D, 05, 05] +2A47; [18 6B, 05, 05] -2818; [18 7F, 05, 05] +2A48; [18 6D, 05, 05] -2819; [18 81, 05, 05] +2A49; [18 6F, 05, 05] -281A; [18 83, 05, 05] +2A4A; [18 71, 05, 05] -281B; [18 85, 05, 05] +2A4B; [18 73, 05, 05] -281C; [18 87, 05, 05] +2A4C; [18 75, 05, 05] -281D; [18 89, 05, 05] +2A4D; [18 77, 05, 05] -281E; [18 8B, 05, 05] +2A4E; [18 79, 05, 05] -281F; [18 8D, 05, 05] +2A4F; [18 7B, 05, 05] -2820; [18 8F, 05, 05] +2A50; [18 7D, 05, 05] -2821; [18 91, 05, 05] +2A51; [18 7F, 05, 05] -2822; [18 93, 05, 05] +2A52; [18 81, 05, 05] -2823; [18 95, 05, 05] +2A53; [18 83, 05, 05] -2824; [18 97, 05, 05] +2A54; [18 85, 05, 05] -2825; [18 99, 05, 05] +2A55; [18 87, 05, 05] -2826; [18 9B, 05, 05] +2A56; [18 89, 05, 05] -2827; [18 9D, 05, 05] +2A57; [18 8B, 05, 05] -2828; [18 9F, 05, 05] +2A58; [18 8D, 05, 05] -2829; [18 A1, 05, 05] +2A59; [18 8F, 05, 05] -282A; [18 A3, 05, 05] +2A5A; [18 91, 05, 05] -282B; [18 A5, 05, 05] +2A5B; [18 93, 05, 05] -282C; [18 A7, 05, 05] +2A5C; [18 95, 05, 05] -282D; [18 A9, 05, 05] +2A5D; [18 97, 05, 05] -282E; [18 AB, 05, 05] +2A5E; [18 99, 05, 05] -282F; [18 AD, 05, 05] +2A5F; [18 9B, 05, 05] -2830; [18 AF, 05, 05] +2A60; [18 9D, 05, 05] -2831; [18 B1, 05, 05] +2A61; [18 9F, 05, 05] -2832; [18 B3, 05, 05] +2A62; [18 A1, 05, 05] -2833; [18 B5, 05, 05] +2A63; [18 A3, 05, 05] -2834; [18 B7, 05, 05] +2A64; [18 A5, 05, 05] -2835; [18 B9, 05, 05] +2A65; [18 A7, 05, 05] -2836; [18 BB, 05, 05] +2A66; [18 A9, 05, 05] -2837; [18 BD, 05, 05] +2A67; [18 AB, 05, 05] -2838; [18 BF, 05, 05] +2A68; [18 AD, 05, 05] -2839; [18 C1, 05, 05] +2A69; [18 AF, 05, 05] -283A; [18 C3, 05, 05] +2A6A; [18 B1, 05, 05] -283B; [18 C5, 05, 05] +2A6B; [18 B3, 05, 05] -283C; [18 C7, 05, 05] +2A6C; [18 B5, 05, 05] -283D; [18 C9, 05, 05] +2A6D; [18 B7, 05, 05] -283E; [18 CB, 05, 05] +2A6E; [18 B9, 05, 05] -283F; [18 CD, 05, 05] +2A6F; [18 BB, 05, 05] -2840; [18 CF, 05, 05] +2A70; [18 BD, 05, 05] -2841; [18 D1, 05, 05] +2A71; [18 BF, 05, 05] -2842; [18 D3, 05, 05] +2A72; [18 C1, 05, 05] -2843; [18 D5, 05, 05] +2A73; [18 C3, 05, 05] -2844; [18 D7, 05, 05] +2A77; [18 C5, 05, 05] -2845; [18 D9, 05, 05] +2A78; [18 C7, 05, 05] -2846; [18 DB, 05, 05] +2A79; [18 C9, 05, 05] -2847; [18 DD, 05, 05] +2A7A; [18 CB, 05, 05] -2848; [18 DF, 05, 05] +2A7B; [18 CD, 05, 05] -2849; [18 E1, 05, 05] +2A7C; [18 CF, 05, 05] -284A; [18 E3, 05, 05] +2A7D; [18 D1, 05, 05] -284B; [18 E5, 05, 05] +2A7E; [18 D3, 05, 05] -284C; [18 E7, 05, 05] +2A7F; [18 D5, 05, 05] -284D; [18 E9, 05, 05] +2A80; [18 D7, 05, 05] -284E; [18 EB, 05, 05] +2A81; [18 D9, 05, 05] -284F; [18 ED, 05, 05] +2A82; [18 DB, 05, 05] -2850; [18 EF, 05, 05] +2A83; [18 DD, 05, 05] -2851; [18 F1, 05, 05] +2A84; [18 DF, 05, 05] -2852; [18 F3, 05, 05] +2A85; [18 E1, 05, 05] -2853; [18 F5, 05, 05] +2A86; [18 E3, 05, 05] -2854; [18 F7, 05, 05] +2A87; [18 E5, 05, 05] -2855; [18 F9, 05, 05] +2A88; [18 E7, 05, 05] -2856; [18 FB, 05, 05] +2A89; [18 E9, 05, 05] -2857; [18 FD, 05, 05] +2A8A; [18 EB, 05, 05] -2858; [19 05, 05, 05] +2A8B; [18 ED, 05, 05] -2859; [19 07, 05, 05] +2A8C; [18 EF, 05, 05] -285A; [19 09, 05, 05] +2A8D; [18 F1, 05, 05] -285B; [19 0B, 05, 05] +2A8E; [18 F3, 05, 05] -285C; [19 0D, 05, 05] +2A8F; [18 F5, 05, 05] -285D; [19 0F, 05, 05] +2A90; [18 F7, 05, 05] -285E; [19 11, 05, 05] +2A91; [18 F9, 05, 05] -285F; [19 13, 05, 05] +2A92; [18 FB, 05, 05] -2860; [19 15, 05, 05] +2A93; [18 FD, 05, 05] -2861; [19 17, 05, 05] +2A94; [19 05, 05, 05] -2862; [19 19, 05, 05] +2A95; [19 07, 05, 05] -2863; [19 1B, 05, 05] +2A96; [19 09, 05, 05] -2864; [19 1D, 05, 05] +2A97; [19 0B, 05, 05] -2865; [19 1F, 05, 05] +2A98; [19 0D, 05, 05] -2866; [19 21, 05, 05] +2A99; [19 0F, 05, 05] -2867; [19 23, 05, 05] +2A9A; [19 11, 05, 05] -2868; [19 25, 05, 05] +2A9B; [19 13, 05, 05] -2869; [19 27, 05, 05] +2A9C; [19 15, 05, 05] -286A; [19 29, 05, 05] +2A9D; [19 17, 05, 05] -286B; [19 2B, 05, 05] +2A9E; [19 19, 05, 05] -286C; [19 2D, 05, 05] +2A9F; [19 1B, 05, 05] -286D; [19 2F, 05, 05] +2AA0; [19 1D, 05, 05] -286E; [19 31, 05, 05] +2AA1; [19 1F, 05, 05] -286F; [19 33, 05, 05] +2AA2; [19 21, 05, 05] -2870; [19 35, 05, 05] +2AA3; [19 23, 05, 05] -2871; [19 37, 05, 05] +2AA4; [19 25, 05, 05] -2872; [19 39, 05, 05] +2AA5; [19 27, 05, 05] -2873; [19 3B, 05, 05] +2AA6; [19 29, 05, 05] -2874; [19 3D, 05, 05] +2AA7; [19 2B, 05, 05] -2875; [19 3F, 05, 05] +2AA8; [19 2D, 05, 05] -2876; [19 41, 05, 05] +2AA9; [19 2F, 05, 05] -2877; [19 43, 05, 05] +2AAA; [19 31, 05, 05] -2878; [19 45, 05, 05] +2AAB; [19 33, 05, 05] -2879; [19 47, 05, 05] +2AAC; [19 35, 05, 05] -287A; [19 49, 05, 05] +2AAD; [19 37, 05, 05] -287B; [19 4B, 05, 05] +2AAE; [19 39, 05, 05] -287C; [19 4D, 05, 05] +2AAF; [19 3B, 05, 05] -287D; [19 4F, 05, 05] +2AB0; [19 3D, 05, 05] -287E; [19 51, 05, 05] +2AB1; [19 3F, 05, 05] -287F; [19 53, 05, 05] +2AB2; [19 41, 05, 05] -2880; [19 55, 05, 05] +2AB3; [19 43, 05, 05] -2881; [19 57, 05, 05] +2AB4; [19 45, 05, 05] -2882; [19 59, 05, 05] +2AB5; [19 47, 05, 05] -2883; [19 5B, 05, 05] +2AB6; [19 49, 05, 05] -2884; [19 5D, 05, 05] +2AB7; [19 4B, 05, 05] -2885; [19 5F, 05, 05] +2AB8; [19 4D, 05, 05] -2886; [19 61, 05, 05] +2AB9; [19 4F, 05, 05] -2887; [19 63, 05, 05] +2ABA; [19 51, 05, 05] -2888; [19 65, 05, 05] +2ABB; [19 53, 05, 05] -2889; [19 67, 05, 05] +2ABC; [19 55, 05, 05] -288A; [19 69, 05, 05] +2ABD; [19 57, 05, 05] -288B; [19 6B, 05, 05] +2ABE; [19 59, 05, 05] -288C; [19 6D, 05, 05] +2ABF; [19 5B, 05, 05] -288D; [19 6F, 05, 05] +2AC0; [19 5D, 05, 05] -288E; [19 71, 05, 05] +2AC1; [19 5F, 05, 05] -288F; [19 73, 05, 05] +2AC2; [19 61, 05, 05] -2890; [19 75, 05, 05] +2AC3; [19 63, 05, 05] -2891; [19 77, 05, 05] +2AC4; [19 65, 05, 05] -2892; [19 79, 05, 05] +2AC5; [19 67, 05, 05] -2893; [19 7B, 05, 05] +2AC6; [19 69, 05, 05] -2894; [19 7D, 05, 05] +2AC7; [19 6B, 05, 05] -2895; [19 7F, 05, 05] +2AC8; [19 6D, 05, 05] -2896; [19 81, 05, 05] +2AC9; [19 6F, 05, 05] -2897; [19 83, 05, 05] +2ACA; [19 71, 05, 05] -2898; [19 85, 05, 05] +2ACB; [19 73, 05, 05] -2899; [19 87, 05, 05] +2ACC; [19 75, 05, 05] -289A; [19 89, 05, 05] +2ACD; [19 77, 05, 05] -289B; [19 8B, 05, 05] +2ACE; [19 79, 05, 05] -289C; [19 8D, 05, 05] +2ACF; [19 7B, 05, 05] -289D; [19 8F, 05, 05] +2AD0; [19 7D, 05, 05] -289E; [19 91, 05, 05] +2AD1; [19 7F, 05, 05] -289F; [19 93, 05, 05] +2AD2; [19 81, 05, 05] -28A0; [19 95, 05, 05] +2AD3; [19 83, 05, 05] -28A1; [19 97, 05, 05] +2AD4; [19 85, 05, 05] -28A2; [19 99, 05, 05] +2AD5; [19 87, 05, 05] -28A3; [19 9B, 05, 05] +2AD6; [19 89, 05, 05] -28A4; [19 9D, 05, 05] +2AD7; [19 8B, 05, 05] -28A5; [19 9F, 05, 05] +2AD8; [19 8D, 05, 05] -28A6; [19 A1, 05, 05] +2AD9; [19 8F, 05, 05] -28A7; [19 A3, 05, 05] +2ADA; [19 91, 05, 05] -28A8; [19 A5, 05, 05] +2ADB; [19 93, 05, 05] -28A9; [19 A7, 05, 05] +2ADD; [19 95, 05, 05] +2ADC; [19 95, 05, 05][, A5, 05] -28AA; [19 A9, 05, 05] +2ADE; [19 97, 05, 05] -28AB; [19 AB, 05, 05] +2ADF; [19 99, 05, 05] -28AC; [19 AD, 05, 05] +2AE0; [19 9B, 05, 05] -28AD; [19 AF, 05, 05] +2AE1; [19 9D, 05, 05] -28AE; [19 B1, 05, 05] +2AE2; [19 9F, 05, 05] -28AF; [19 B3, 05, 05] +2AE3; [19 A1, 05, 05] -28B0; [19 B5, 05, 05] +2AE4; [19 A3, 05, 05] -28B1; [19 B7, 05, 05] +2AE5; [19 A5, 05, 05] -28B2; [19 B9, 05, 05] +2AE6; [19 A7, 05, 05] -28B3; [19 BB, 05, 05] +2AE7; [19 A9, 05, 05] -28B4; [19 BD, 05, 05] +2AE8; [19 AB, 05, 05] -28B5; [19 BF, 05, 05] +2AE9; [19 AD, 05, 05] -28B6; [19 C1, 05, 05] +2AEA; [19 AF, 05, 05] -28B7; [19 C3, 05, 05] +2AEB; [19 B1, 05, 05] -28B8; [19 C5, 05, 05] +2AEC; [19 B3, 05, 05] -28B9; [19 C7, 05, 05] +2AED; [19 B5, 05, 05] -28BA; [19 C9, 05, 05] +2AEE; [19 B7, 05, 05] -28BB; [19 CB, 05, 05] +2AEF; [19 B9, 05, 05] -28BC; [19 CD, 05, 05] +2AF0; [19 BB, 05, 05] -28BD; [19 CF, 05, 05] +2AF1; [19 BD, 05, 05] -28BE; [19 D1, 05, 05] +2AF2; [19 BF, 05, 05] -28BF; [19 D3, 05, 05] +2AF3; [19 C1, 05, 05] -28C0; [19 D5, 05, 05] +2AF4; [19 C3, 05, 05] -28C1; [19 D7, 05, 05] +2AF5; [19 C5, 05, 05] -28C2; [19 D9, 05, 05] +2AF6; [19 C7, 05, 05] -28C3; [19 DB, 05, 05] +2AF7; [19 C9, 05, 05] -28C4; [19 DD, 05, 05] +2AF8; [19 CB, 05, 05] -28C5; [19 DF, 05, 05] +2AF9; [19 CD, 05, 05] -28C6; [19 E1, 05, 05] +2AFA; [19 CF, 05, 05] -28C7; [19 E3, 05, 05] +2AFB; [19 D1, 05, 05] -28C8; [19 E5, 05, 05] +2AFC; [19 D3, 05, 05] -28C9; [19 E7, 05, 05] +2AFD; [19 D5, 05, 05] -28CA; [19 E9, 05, 05] +2AFE; [19 D7, 05, 05] -28CB; [19 EB, 05, 05] +2AFF; [19 D9, 05, 05] -28CC; [19 ED, 05, 05] +2B00; [19 DB, 05, 05] -28CD; [19 EF, 05, 05] +2B01; [19 DD, 05, 05] -28CE; [19 F1, 05, 05] +2B02; [19 DF, 05, 05] -28CF; [19 F3, 05, 05] +2B03; [19 E1, 05, 05] -28D0; [19 F5, 05, 05] +2B04; [19 E3, 05, 05] -28D1; [19 F7, 05, 05] +2B05; [19 E5, 05, 05] -28D2; [19 F9, 05, 05] +2B06; [19 E7, 05, 05] -28D3; [19 FB, 05, 05] +2B07; [19 E9, 05, 05] -28D4; [19 FD, 05, 05] +2B08; [19 EB, 05, 05] -28D5; [1A 05, 05, 05] +2B09; [19 ED, 05, 05] -28D6; [1A 07, 05, 05] +2B0A; [19 EF, 05, 05] -28D7; [1A 09, 05, 05] +2B0B; [19 F1, 05, 05] -28D8; [1A 0B, 05, 05] +2B0C; [19 F3, 05, 05] -28D9; [1A 0D, 05, 05] +2B0D; [19 F5, 05, 05] -28DA; [1A 0F, 05, 05] +2B0E; [19 F7, 05, 05] -28DB; [1A 11, 05, 05] +2B0F; [19 F9, 05, 05] -28DC; [1A 13, 05, 05] +2B10; [19 FB, 05, 05] -28DD; [1A 15, 05, 05] +2B11; [19 FD, 05, 05] -28DE; [1A 17, 05, 05] +2B12; [1A 05, 05, 05] -28DF; [1A 19, 05, 05] +2B13; [1A 07, 05, 05] -28E0; [1A 1B, 05, 05] +2B14; [1A 09, 05, 05] -28E1; [1A 1D, 05, 05] +2B15; [1A 0B, 05, 05] -28E2; [1A 1F, 05, 05] +2B16; [1A 0D, 05, 05] -28E3; [1A 21, 05, 05] +2B17; [1A 0F, 05, 05] -28E4; [1A 23, 05, 05] +2B18; [1A 11, 05, 05] -28E5; [1A 25, 05, 05] +2B19; [1A 13, 05, 05] -28E6; [1A 27, 05, 05] +2B1A; [1A 15, 05, 05] -28E7; [1A 29, 05, 05] +2B20; [1A 17, 05, 05] -28E8; [1A 2B, 05, 05] +2B21; [1A 19, 05, 05] -28E9; [1A 2D, 05, 05] +2B22; [1A 1B, 05, 05] -28EA; [1A 2F, 05, 05] +2B23; [1A 1D, 05, 05] -28EB; [1A 31, 05, 05] +2CE5; [1A 1F, 05, 05] -28EC; [1A 33, 05, 05] +2CE6; [1A 21, 05, 05] -28ED; [1A 35, 05, 05] +2CE7; [1A 23, 05, 05] -28EE; [1A 37, 05, 05] +2CE8; [1A 25, 05, 05] -28EF; [1A 39, 05, 05] +2CE9; [1A 27, 05, 05] -28F0; [1A 3B, 05, 05] +2CEA; [1A 29, 05, 05] -28F1; [1A 3D, 05, 05] +2800; [1A 2B, 05, 05] -28F2; [1A 3F, 05, 05] +2801; [1A 2D, 05, 05] -28F3; [1A 41, 05, 05] +2802; [1A 2F, 05, 05] -28F4; [1A 43, 05, 05] +2803; [1A 31, 05, 05] -28F5; [1A 45, 05, 05] +2804; [1A 33, 05, 05] -28F6; [1A 47, 05, 05] +2805; [1A 35, 05, 05] -28F7; [1A 49, 05, 05] +2806; [1A 37, 05, 05] -28F8; [1A 4B, 05, 05] +2807; [1A 39, 05, 05] -28F9; [1A 4D, 05, 05] +2808; [1A 3B, 05, 05] -28FA; [1A 4F, 05, 05] +2809; [1A 3D, 05, 05] -28FB; [1A 51, 05, 05] +280A; [1A 3F, 05, 05] -28FC; [1A 53, 05, 05] +280B; [1A 41, 05, 05] -28FD; [1A 55, 05, 05] +280C; [1A 43, 05, 05] -28FE; [1A 57, 05, 05] +280D; [1A 45, 05, 05] -28FF; [1A 59, 05, 05] +280E; [1A 47, 05, 05] -268A; [1A 5B, 05, 05] +280F; [1A 49, 05, 05] -268B; [1A 5D, 05, 05] +2810; [1A 4B, 05, 05] -268C; [1A 5F, 05, 05] +2811; [1A 4D, 05, 05] -268D; [1A 61, 05, 05] +2812; [1A 4F, 05, 05] -268E; [1A 63, 05, 05] +2813; [1A 51, 05, 05] -268F; [1A 65, 05, 05] +2814; [1A 53, 05, 05] -2630; [1A 67, 05, 05] +2815; [1A 55, 05, 05] -2631; [1A 69, 05, 05] +2816; [1A 57, 05, 05] -2632; [1A 6B, 05, 05] +2817; [1A 59, 05, 05] -2633; [1A 6D, 05, 05] +2818; [1A 5B, 05, 05] -2634; [1A 6F, 05, 05] +2819; [1A 5D, 05, 05] -2635; [1A 71, 05, 05] +281A; [1A 5F, 05, 05] -2636; [1A 73, 05, 05] +281B; [1A 61, 05, 05] -2637; [1A 75, 05, 05] +281C; [1A 63, 05, 05] -4DC0; [1A 77, 05, 05] +281D; [1A 65, 05, 05] -4DC1; [1A 79, 05, 05] +281E; [1A 67, 05, 05] -4DC2; [1A 7B, 05, 05] +281F; [1A 69, 05, 05] -4DC3; [1A 7D, 05, 05] +2820; [1A 6B, 05, 05] -4DC4; [1A 7F, 05, 05] +2821; [1A 6D, 05, 05] -4DC5; [1A 81, 05, 05] +2822; [1A 6F, 05, 05] -4DC6; [1A 83, 05, 05] +2823; [1A 71, 05, 05] -4DC7; [1A 85, 05, 05] +2824; [1A 73, 05, 05] -4DC8; [1A 87, 05, 05] +2825; [1A 75, 05, 05] -4DC9; [1A 89, 05, 05] +2826; [1A 77, 05, 05] -4DCA; [1A 8B, 05, 05] +2827; [1A 79, 05, 05] -4DCB; [1A 8D, 05, 05] +2828; [1A 7B, 05, 05] -4DCC; [1A 8F, 05, 05] +2829; [1A 7D, 05, 05] -4DCD; [1A 91, 05, 05] +282A; [1A 7F, 05, 05] -4DCE; [1A 93, 05, 05] +282B; [1A 81, 05, 05] -4DCF; [1A 95, 05, 05] +282C; [1A 83, 05, 05] -4DD0; [1A 97, 05, 05] +282D; [1A 85, 05, 05] -4DD1; [1A 99, 05, 05] +282E; [1A 87, 05, 05] -4DD2; [1A 9B, 05, 05] +282F; [1A 89, 05, 05] -4DD3; [1A 9D, 05, 05] +2830; [1A 8B, 05, 05] -4DD4; [1A 9F, 05, 05] +2831; [1A 8D, 05, 05] -4DD5; [1A A1, 05, 05] +2832; [1A 8F, 05, 05] -4DD6; [1A A3, 05, 05] +2833; [1A 91, 05, 05] -4DD7; [1A A5, 05, 05] +2834; [1A 93, 05, 05] -4DD8; [1A A7, 05, 05] +2835; [1A 95, 05, 05] -4DD9; [1A A9, 05, 05] +2836; [1A 97, 05, 05] -4DDA; [1A AB, 05, 05] +2837; [1A 99, 05, 05] -4DDB; [1A AD, 05, 05] +2838; [1A 9B, 05, 05] -4DDC; [1A AF, 05, 05] +2839; [1A 9D, 05, 05] -4DDD; [1A B1, 05, 05] +283A; [1A 9F, 05, 05] -4DDE; [1A B3, 05, 05] +283B; [1A A1, 05, 05] -4DDF; [1A B5, 05, 05] +283C; [1A A3, 05, 05] -4DE0; [1A B7, 05, 05] +283D; [1A A5, 05, 05] -4DE1; [1A B9, 05, 05] +283E; [1A A7, 05, 05] -4DE2; [1A BB, 05, 05] +283F; [1A A9, 05, 05] -4DE3; [1A BD, 05, 05] +2840; [1A AB, 05, 05] -4DE4; [1A BF, 05, 05] +2841; [1A AD, 05, 05] -4DE5; [1A C1, 05, 05] +2842; [1A AF, 05, 05] -4DE6; [1A C3, 05, 05] +2843; [1A B1, 05, 05] -4DE7; [1A C5, 05, 05] +2844; [1A B3, 05, 05] -4DE8; [1A C7, 05, 05] +2845; [1A B5, 05, 05] -4DE9; [1A C9, 05, 05] +2846; [1A B7, 05, 05] -4DEA; [1A CB, 05, 05] +2847; [1A B9, 05, 05] -4DEB; [1A CD, 05, 05] +2848; [1A BB, 05, 05] -4DEC; [1A CF, 05, 05] +2849; [1A BD, 05, 05] -4DED; [1A D1, 05, 05] +284A; [1A BF, 05, 05] -4DEE; [1A D3, 05, 05] +284B; [1A C1, 05, 05] -4DEF; [1A D5, 05, 05] +284C; [1A C3, 05, 05] -4DF0; [1A D7, 05, 05] +284D; [1A C5, 05, 05] -4DF1; [1A D9, 05, 05] +284E; [1A C7, 05, 05] -4DF2; [1A DB, 05, 05] +284F; [1A C9, 05, 05] -4DF3; [1A DD, 05, 05] +2850; [1A CB, 05, 05] -4DF4; [1A DF, 05, 05] +2851; [1A CD, 05, 05] -4DF5; [1A E1, 05, 05] +2852; [1A CF, 05, 05] -4DF6; [1A E3, 05, 05] +2853; [1A D1, 05, 05] -4DF7; [1A E5, 05, 05] +2854; [1A D3, 05, 05] -4DF8; [1A E7, 05, 05] +2855; [1A D5, 05, 05] -4DF9; [1A E9, 05, 05] +2856; [1A D7, 05, 05] -4DFA; [1A EB, 05, 05] +2857; [1A D9, 05, 05] -4DFB; [1A ED, 05, 05] +2858; [1A DB, 05, 05] -4DFC; [1A EF, 05, 05] +2859; [1A DD, 05, 05] -4DFD; [1A F1, 05, 05] +285A; [1A DF, 05, 05] -4DFE; [1A F3, 05, 05] +285B; [1A E1, 05, 05] -4DFF; [1A F5, 05, 05] +285C; [1A E3, 05, 05] -D834 DF00; [1A F7, 05, 05] +285D; [1A E5, 05, 05] -D834 DF01; [1A F9, 05, 05] +285E; [1A E7, 05, 05] -D834 DF02; [1A FB, 05, 05] +285F; [1A E9, 05, 05] -D834 DF03; [1A FD, 05, 05] +2860; [1A EB, 05, 05] -D834 DF04; [1B 05, 05, 05] +2861; [1A ED, 05, 05] -D834 DF05; [1B 07, 05, 05] +2862; [1A EF, 05, 05] -D834 DF06; [1B 09, 05, 05] +2863; [1A F1, 05, 05] -D834 DF07; [1B 0B, 05, 05] +2864; [1A F3, 05, 05] -D834 DF08; [1B 0D, 05, 05] +2865; [1A F5, 05, 05] -D834 DF09; [1B 0F, 05, 05] +2866; [1A F7, 05, 05] -D834 DF0A; [1B 11, 05, 05] +2867; [1A F9, 05, 05] -D834 DF0B; [1B 13, 05, 05] +2868; [1A FB, 05, 05] -D834 DF0C; [1B 15, 05, 05] +2869; [1A FD, 05, 05] -D834 DF0D; [1B 17, 05, 05] +286A; [1B 05, 05, 05] -D834 DF0E; [1B 19, 05, 05] +286B; [1B 07, 05, 05] -D834 DF0F; [1B 1B, 05, 05] +286C; [1B 09, 05, 05] -D834 DF10; [1B 1D, 05, 05] +286D; [1B 0B, 05, 05] -D834 DF11; [1B 1F, 05, 05] +286E; [1B 0D, 05, 05] -D834 DF12; [1B 21, 05, 05] +286F; [1B 0F, 05, 05] -D834 DF13; [1B 23, 05, 05] +2870; [1B 11, 05, 05] -D834 DF14; [1B 25, 05, 05] +2871; [1B 13, 05, 05] -D834 DF15; [1B 27, 05, 05] +2872; [1B 15, 05, 05] -D834 DF16; [1B 29, 05, 05] +2873; [1B 17, 05, 05] -D834 DF17; [1B 2B, 05, 05] +2874; [1B 19, 05, 05] -D834 DF18; [1B 2D, 05, 05] +2875; [1B 1B, 05, 05] -D834 DF19; [1B 2F, 05, 05] +2876; [1B 1D, 05, 05] -D834 DF1A; [1B 31, 05, 05] +2877; [1B 1F, 05, 05] -D834 DF1B; [1B 33, 05, 05] +2878; [1B 21, 05, 05] -D834 DF1C; [1B 35, 05, 05] +2879; [1B 23, 05, 05] -D834 DF1D; [1B 37, 05, 05] +287A; [1B 25, 05, 05] -D834 DF1E; [1B 39, 05, 05] +287B; [1B 27, 05, 05] -D834 DF1F; [1B 3B, 05, 05] +287C; [1B 29, 05, 05] -D834 DF20; [1B 3D, 05, 05] +287D; [1B 2B, 05, 05] -D834 DF21; [1B 3F, 05, 05] +287E; [1B 2D, 05, 05] -D834 DF22; [1B 41, 05, 05] +287F; [1B 2F, 05, 05] -D834 DF23; [1B 43, 05, 05] +2880; [1B 31, 05, 05] -D834 DF24; [1B 45, 05, 05] +2881; [1B 33, 05, 05] -D834 DF25; [1B 47, 05, 05] +2882; [1B 35, 05, 05] -D834 DF26; [1B 49, 05, 05] +2883; [1B 37, 05, 05] -D834 DF27; [1B 4B, 05, 05] +2884; [1B 39, 05, 05] -D834 DF28; [1B 4D, 05, 05] +2885; [1B 3B, 05, 05] -D834 DF29; [1B 4F, 05, 05] +2886; [1B 3D, 05, 05] -D834 DF2A; [1B 51, 05, 05] +2887; [1B 3F, 05, 05] -D834 DF2B; [1B 53, 05, 05] +2888; [1B 41, 05, 05] -D834 DF2C; [1B 55, 05, 05] +2889; [1B 43, 05, 05] -D834 DF2D; [1B 57, 05, 05] +288A; [1B 45, 05, 05] -D834 DF2E; [1B 59, 05, 05] +288B; [1B 47, 05, 05] -D834 DF2F; [1B 5B, 05, 05] +288C; [1B 49, 05, 05] -D834 DF30; [1B 5D, 05, 05] +288D; [1B 4B, 05, 05] -D834 DF31; [1B 5F, 05, 05] +288E; [1B 4D, 05, 05] -D834 DF32; [1B 61, 05, 05] +288F; [1B 4F, 05, 05] -D834 DF33; [1B 63, 05, 05] +2890; [1B 51, 05, 05] -D834 DF34; [1B 65, 05, 05] +2891; [1B 53, 05, 05] -D834 DF35; [1B 67, 05, 05] +2892; [1B 55, 05, 05] -D834 DF36; [1B 69, 05, 05] +2893; [1B 57, 05, 05] -D834 DF37; [1B 6B, 05, 05] +2894; [1B 59, 05, 05] -D834 DF38; [1B 6D, 05, 05] +2895; [1B 5B, 05, 05] -D834 DF39; [1B 6F, 05, 05] +2896; [1B 5D, 05, 05] -D834 DF3A; [1B 71, 05, 05] +2897; [1B 5F, 05, 05] -D834 DF3B; [1B 73, 05, 05] +2898; [1B 61, 05, 05] -D834 DF3C; [1B 75, 05, 05] +2899; [1B 63, 05, 05] -D834 DF3D; [1B 77, 05, 05] +289A; [1B 65, 05, 05] -D834 DF3E; [1B 79, 05, 05] +289B; [1B 67, 05, 05] -D834 DF3F; [1B 7B, 05, 05] +289C; [1B 69, 05, 05] -D834 DF40; [1B 7D, 05, 05] +289D; [1B 6B, 05, 05] -D834 DF41; [1B 7F, 05, 05] +289E; [1B 6D, 05, 05] -D834 DF42; [1B 81, 05, 05] +289F; [1B 6F, 05, 05] -D834 DF43; [1B 83, 05, 05] +28A0; [1B 71, 05, 05] -D834 DF44; [1B 85, 05, 05] +28A1; [1B 73, 05, 05] -D834 DF45; [1B 87, 05, 05] +28A2; [1B 75, 05, 05] -D834 DF46; [1B 89, 05, 05] +28A3; [1B 77, 05, 05] -D834 DF47; [1B 8B, 05, 05] +28A4; [1B 79, 05, 05] -D834 DF48; [1B 8D, 05, 05] +28A5; [1B 7B, 05, 05] -D834 DF49; [1B 8F, 05, 05] +28A6; [1B 7D, 05, 05] -D834 DF4A; [1B 91, 05, 05] +28A7; [1B 7F, 05, 05] -D834 DF4B; [1B 93, 05, 05] +28A8; [1B 81, 05, 05] -D834 DF4C; [1B 95, 05, 05] +28A9; [1B 83, 05, 05] -D834 DF4D; [1B 97, 05, 05] +28AA; [1B 85, 05, 05] -D834 DF4E; [1B 99, 05, 05] +28AB; [1B 87, 05, 05] -D834 DF4F; [1B 9B, 05, 05] +28AC; [1B 89, 05, 05] -D834 DF50; [1B 9D, 05, 05] +28AD; [1B 8B, 05, 05] -D834 DF51; [1B 9F, 05, 05] +28AE; [1B 8D, 05, 05] -D834 DF52; [1B A1, 05, 05] +28AF; [1B 8F, 05, 05] -D834 DF53; [1B A3, 05, 05] +28B0; [1B 91, 05, 05] -D834 DF54; [1B A5, 05, 05] +28B1; [1B 93, 05, 05] -D834 DF55; [1B A7, 05, 05] +28B2; [1B 95, 05, 05] -D834 DF56; [1B A9, 05, 05] +28B3; [1B 97, 05, 05] -A490; [1B AB, 05, 05] +28B4; [1B 99, 05, 05] -A491; [1B AD, 05, 05] +28B5; [1B 9B, 05, 05] -A492; [1B AF, 05, 05] +28B6; [1B 9D, 05, 05] -A493; [1B B1, 05, 05] +28B7; [1B 9F, 05, 05] -A494; [1B B3, 05, 05] +28B8; [1B A1, 05, 05] -A495; [1B B5, 05, 05] +28B9; [1B A3, 05, 05] -A496; [1B B7, 05, 05] +28BA; [1B A5, 05, 05] -A497; [1B B9, 05, 05] +28BB; [1B A7, 05, 05] -A498; [1B BB, 05, 05] +28BC; [1B A9, 05, 05] -A499; [1B BD, 05, 05] +28BD; [1B AB, 05, 05] -A49A; [1B BF, 05, 05] +28BE; [1B AD, 05, 05] -A49B; [1B C1, 05, 05] +28BF; [1B AF, 05, 05] -A49C; [1B C3, 05, 05] +28C0; [1B B1, 05, 05] -A49D; [1B C5, 05, 05] +28C1; [1B B3, 05, 05] -A49E; [1B C7, 05, 05] +28C2; [1B B5, 05, 05] -A49F; [1B C9, 05, 05] +28C3; [1B B7, 05, 05] -A4A0; [1B CB, 05, 05] +28C4; [1B B9, 05, 05] -A4A1; [1B CD, 05, 05] +28C5; [1B BB, 05, 05] -A4A2; [1B CF, 05, 05] +28C6; [1B BD, 05, 05] -A4A3; [1B D1, 05, 05] +28C7; [1B BF, 05, 05] -A4A4; [1B D3, 05, 05] +28C8; [1B C1, 05, 05] -A4A5; [1B D5, 05, 05] +28C9; [1B C3, 05, 05] -A4A6; [1B D7, 05, 05] +28CA; [1B C5, 05, 05] -A4A7; [1B D9, 05, 05] +28CB; [1B C7, 05, 05] -A4A8; [1B DB, 05, 05] +28CC; [1B C9, 05, 05] -A4A9; [1B DD, 05, 05] +28CD; [1B CB, 05, 05] -A4AA; [1B DF, 05, 05] +28CE; [1B CD, 05, 05] -A4AB; [1B E1, 05, 05] +28CF; [1B CF, 05, 05] -A4AC; [1B E3, 05, 05] +28D0; [1B D1, 05, 05] -A4AD; [1B E5, 05, 05] +28D1; [1B D3, 05, 05] -A4AE; [1B E7, 05, 05] +28D2; [1B D5, 05, 05] -A4AF; [1B E9, 05, 05] +28D3; [1B D7, 05, 05] -A4B0; [1B EB, 05, 05] +28D4; [1B D9, 05, 05] -A4B1; [1B ED, 05, 05] +28D5; [1B DB, 05, 05] -A4B2; [1B EF, 05, 05] +28D6; [1B DD, 05, 05] -A4B3; [1B F1, 05, 05] +28D7; [1B DF, 05, 05] -A4B4; [1B F3, 05, 05] +28D8; [1B E1, 05, 05] -A4B5; [1B F5, 05, 05] +28D9; [1B E3, 05, 05] -A4B6; [1B F7, 05, 05] +28DA; [1B E5, 05, 05] -A4B7; [1B F9, 05, 05] +28DB; [1B E7, 05, 05] -A4B8; [1B FB, 05, 05] +28DC; [1B E9, 05, 05] -A4B9; [1B FD, 05, 05] +28DD; [1B EB, 05, 05] -A4BA; [1C 05, 05, 05] +28DE; [1B ED, 05, 05] -A4BB; [1C 07, 05, 05] +28DF; [1B EF, 05, 05] -A4BC; [1C 09, 05, 05] +28E0; [1B F1, 05, 05] -A4BD; [1C 0B, 05, 05] +28E1; [1B F3, 05, 05] -A4BE; [1C 0D, 05, 05] +28E2; [1B F5, 05, 05] -A4BF; [1C 0F, 05, 05] +28E3; [1B F7, 05, 05] -A4C0; [1C 11, 05, 05] +28E4; [1B F9, 05, 05] -A4C1; [1C 13, 05, 05] +28E5; [1B FB, 05, 05] -A4C2; [1C 15, 05, 05] +28E6; [1B FD, 05, 05] -A4C3; [1C 17, 05, 05] +28E7; [1C 05, 05, 05] -A4C4; [1C 19, 05, 05] +28E8; [1C 07, 05, 05] -A4C5; [1C 1B, 05, 05] +28E9; [1C 09, 05, 05] -A4C6; [1C 1D, 05, 05] +28EA; [1C 0B, 05, 05] -D800 DD37; [1C 1F, 05, 05] +28EB; [1C 0D, 05, 05] -D800 DD38; [1C 21, 05, 05] +28EC; [1C 0F, 05, 05] -D800 DD39; [1C 23, 05, 05] +28ED; [1C 11, 05, 05] -D800 DD3A; [1C 25, 05, 05] +28EE; [1C 13, 05, 05] -D800 DD3B; [1C 27, 05, 05] +28EF; [1C 15, 05, 05] -D800 DD3C; [1C 29, 05, 05] +28F0; [1C 17, 05, 05] -D800 DD3D; [1C 2B, 05, 05] +28F1; [1C 19, 05, 05] -D800 DD3E; [1C 2D, 05, 05] +28F2; [1C 1B, 05, 05] -D800 DD3F; [1C 2F, 05, 05] +28F3; [1C 1D, 05, 05] -D834 DC00; [1C 31, 05, 05] +28F4; [1C 1F, 05, 05] -D834 DC01; [1C 33, 05, 05] +28F5; [1C 21, 05, 05] -D834 DC02; [1C 35, 05, 05] +28F6; [1C 23, 05, 05] -D834 DC03; [1C 37, 05, 05] +28F7; [1C 25, 05, 05] -D834 DC04; [1C 39, 05, 05] +28F8; [1C 27, 05, 05] -D834 DC05; [1C 3B, 05, 05] +28F9; [1C 29, 05, 05] -D834 DC06; [1C 3D, 05, 05] +28FA; [1C 2B, 05, 05] -D834 DC07; [1C 3F, 05, 05] +28FB; [1C 2D, 05, 05] -D834 DC08; [1C 41, 05, 05] +28FC; [1C 2F, 05, 05] -D834 DC09; [1C 43, 05, 05] +28FD; [1C 31, 05, 05] -D834 DC0A; [1C 45, 05, 05] +28FE; [1C 33, 05, 05] -D834 DC0B; [1C 47, 05, 05] +28FF; [1C 35, 05, 05] -D834 DC0C; [1C 49, 05, 05] +268A; [1C 37, 05, 05] -D834 DC0D; [1C 4B, 05, 05] +268B; [1C 39, 05, 05] -D834 DC0E; [1C 4D, 05, 05] +268C; [1C 3B, 05, 05] -D834 DC0F; [1C 4F, 05, 05] +268D; [1C 3D, 05, 05] -D834 DC10; [1C 51, 05, 05] +268E; [1C 3F, 05, 05] -D834 DC11; [1C 53, 05, 05] +268F; [1C 41, 05, 05] -D834 DC12; [1C 55, 05, 05] +2630; [1C 43, 05, 05] -D834 DC13; [1C 57, 05, 05] +2631; [1C 45, 05, 05] -D834 DC14; [1C 59, 05, 05] +2632; [1C 47, 05, 05] -D834 DC15; [1C 5B, 05, 05] +2633; [1C 49, 05, 05] -D834 DC16; [1C 5D, 05, 05] +2634; [1C 4B, 05, 05] -D834 DC17; [1C 5F, 05, 05] +2635; [1C 4D, 05, 05] -D834 DC18; [1C 61, 05, 05] +2636; [1C 4F, 05, 05] -D834 DC19; [1C 63, 05, 05] +2637; [1C 51, 05, 05] -D834 DC1A; [1C 65, 05, 05] +4DC0; [1C 53, 05, 05] -D834 DC1B; [1C 67, 05, 05] +4DC1; [1C 55, 05, 05] -D834 DC1C; [1C 69, 05, 05] +4DC2; [1C 57, 05, 05] -D834 DC1D; [1C 6B, 05, 05] +4DC3; [1C 59, 05, 05] -D834 DC1E; [1C 6D, 05, 05] +4DC4; [1C 5B, 05, 05] -D834 DC1F; [1C 6F, 05, 05] +4DC5; [1C 5D, 05, 05] -D834 DC20; [1C 71, 05, 05] +4DC6; [1C 5F, 05, 05] -D834 DC21; [1C 73, 05, 05] +4DC7; [1C 61, 05, 05] -D834 DC22; [1C 75, 05, 05] +4DC8; [1C 63, 05, 05] -D834 DC23; [1C 77, 05, 05] +4DC9; [1C 65, 05, 05] -D834 DC24; [1C 79, 05, 05] +4DCA; [1C 67, 05, 05] -D834 DC25; [1C 7B, 05, 05] +4DCB; [1C 69, 05, 05] -D834 DC26; [1C 7D, 05, 05] +4DCC; [1C 6B, 05, 05] -D834 DC27; [1C 7F, 05, 05] +4DCD; [1C 6D, 05, 05] -D834 DC28; [1C 81, 05, 05] +4DCE; [1C 6F, 05, 05] -D834 DC29; [1C 83, 05, 05] +4DCF; [1C 71, 05, 05] -D834 DC2A; [1C 85, 05, 05] +4DD0; [1C 73, 05, 05] -D834 DC2B; [1C 87, 05, 05] +4DD1; [1C 75, 05, 05] -D834 DC2C; [1C 89, 05, 05] +4DD2; [1C 77, 05, 05] -D834 DC2D; [1C 8B, 05, 05] +4DD3; [1C 79, 05, 05] -D834 DC2E; [1C 8D, 05, 05] +4DD4; [1C 7B, 05, 05] -D834 DC2F; [1C 8F, 05, 05] +4DD5; [1C 7D, 05, 05] -D834 DC30; [1C 91, 05, 05] +4DD6; [1C 7F, 05, 05] -D834 DC31; [1C 93, 05, 05] +4DD7; [1C 81, 05, 05] -D834 DC32; [1C 95, 05, 05] +4DD8; [1C 83, 05, 05] -D834 DC33; [1C 97, 05, 05] +4DD9; [1C 85, 05, 05] -D834 DC34; [1C 99, 05, 05] +4DDA; [1C 87, 05, 05] -D834 DC35; [1C 9B, 05, 05] +4DDB; [1C 89, 05, 05] -D834 DC36; [1C 9D, 05, 05] +4DDC; [1C 8B, 05, 05] -D834 DC37; [1C 9F, 05, 05] +4DDD; [1C 8D, 05, 05] -D834 DC38; [1C A1, 05, 05] +4DDE; [1C 8F, 05, 05] -D834 DC39; [1C A3, 05, 05] +4DDF; [1C 91, 05, 05] -D834 DC3A; [1C A5, 05, 05] +4DE0; [1C 93, 05, 05] -D834 DC3B; [1C A7, 05, 05] +4DE1; [1C 95, 05, 05] -D834 DC3C; [1C A9, 05, 05] +4DE2; [1C 97, 05, 05] -D834 DC3D; [1C AB, 05, 05] +4DE3; [1C 99, 05, 05] -D834 DC3E; [1C AD, 05, 05] +4DE4; [1C 9B, 05, 05] -D834 DC3F; [1C AF, 05, 05] +4DE5; [1C 9D, 05, 05] -D834 DC40; [1C B1, 05, 05] +4DE6; [1C 9F, 05, 05] -D834 DC41; [1C B3, 05, 05] +4DE7; [1C A1, 05, 05] -D834 DC42; [1C B5, 05, 05] +4DE8; [1C A3, 05, 05] -D834 DC43; [1C B7, 05, 05] +4DE9; [1C A5, 05, 05] -D834 DC44; [1C B9, 05, 05] +4DEA; [1C A7, 05, 05] -D834 DC45; [1C BB, 05, 05] +4DEB; [1C A9, 05, 05] -D834 DC46; [1C BD, 05, 05] +4DEC; [1C AB, 05, 05] -D834 DC47; [1C BF, 05, 05] +4DED; [1C AD, 05, 05] -D834 DC48; [1C C1, 05, 05] +4DEE; [1C AF, 05, 05] -D834 DC49; [1C C3, 05, 05] +4DEF; [1C B1, 05, 05] -D834 DC4A; [1C C5, 05, 05] +4DF0; [1C B3, 05, 05] -D834 DC4B; [1C C7, 05, 05] +4DF1; [1C B5, 05, 05] -D834 DC4C; [1C C9, 05, 05] +4DF2; [1C B7, 05, 05] -D834 DC4D; [1C CB, 05, 05] +4DF3; [1C B9, 05, 05] -D834 DC4E; [1C CD, 05, 05] +4DF4; [1C BB, 05, 05] -D834 DC4F; [1C CF, 05, 05] +4DF5; [1C BD, 05, 05] -D834 DC50; [1C D1, 05, 05] +4DF6; [1C BF, 05, 05] -D834 DC51; [1C D3, 05, 05] +4DF7; [1C C1, 05, 05] -D834 DC52; [1C D5, 05, 05] +4DF8; [1C C3, 05, 05] -D834 DC53; [1C D7, 05, 05] +4DF9; [1C C5, 05, 05] -D834 DC54; [1C D9, 05, 05] +4DFA; [1C C7, 05, 05] -D834 DC55; [1C DB, 05, 05] +4DFB; [1C C9, 05, 05] -D834 DC56; [1C DD, 05, 05] +4DFC; [1C CB, 05, 05] -D834 DC57; [1C DF, 05, 05] +4DFD; [1C CD, 05, 05] -D834 DC58; [1C E1, 05, 05] +4DFE; [1C CF, 05, 05] -D834 DC59; [1C E3, 05, 05] +4DFF; [1C D1, 05, 05] -D834 DC5A; [1C E5, 05, 05] +D834 DF00; [1C D3, 05, 05] -D834 DC5B; [1C E7, 05, 05] +D834 DF01; [1C D5, 05, 05] -D834 DC5C; [1C E9, 05, 05] +D834 DF02; [1C D7, 05, 05] -D834 DC5D; [1C EB, 05, 05] +D834 DF03; [1C D9, 05, 05] -D834 DC5E; [1C ED, 05, 05] +D834 DF04; [1C DB, 05, 05] -D834 DC5F; [1C EF, 05, 05] +D834 DF05; [1C DD, 05, 05] -D834 DC60; [1C F1, 05, 05] +D834 DF06; [1C DF, 05, 05] -D834 DC61; [1C F3, 05, 05] +D834 DF07; [1C E1, 05, 05] -D834 DC62; [1C F5, 05, 05] +D834 DF08; [1C E3, 05, 05] -D834 DC63; [1C F7, 05, 05] +D834 DF09; [1C E5, 05, 05] -D834 DC64; [1C F9, 05, 05] +D834 DF0A; [1C E7, 05, 05] -D834 DC65; [1C FB, 05, 05] +D834 DF0B; [1C E9, 05, 05] -D834 DC66; [1C FD, 05, 05] +D834 DF0C; [1C EB, 05, 05] -D834 DC67; [1D 05, 05, 05] +D834 DF0D; [1C ED, 05, 05] -D834 DC68; [1D 07, 05, 05] +D834 DF0E; [1C EF, 05, 05] -D834 DC69; [1D 09, 05, 05] +D834 DF0F; [1C F1, 05, 05] -D834 DC6A; [1D 0B, 05, 05] +D834 DF10; [1C F3, 05, 05] -D834 DC6B; [1D 0D, 05, 05] +D834 DF11; [1C F5, 05, 05] -D834 DC6C; [1D 0F, 05, 05] +D834 DF12; [1C F7, 05, 05] -D834 DC6D; [1D 11, 05, 05] +D834 DF13; [1C F9, 05, 05] -D834 DC6E; [1D 13, 05, 05] +D834 DF14; [1C FB, 05, 05] -D834 DC6F; [1D 15, 05, 05] +D834 DF15; [1C FD, 05, 05] -D834 DC70; [1D 17, 05, 05] +D834 DF16; [1D 05, 05, 05] -D834 DC71; [1D 19, 05, 05] +D834 DF17; [1D 07, 05, 05] -D834 DC72; [1D 1B, 05, 05] +D834 DF18; [1D 09, 05, 05] -D834 DC73; [1D 1D, 05, 05] +D834 DF19; [1D 0B, 05, 05] -D834 DC74; [1D 1F, 05, 05] +D834 DF1A; [1D 0D, 05, 05] -D834 DC75; [1D 21, 05, 05] +D834 DF1B; [1D 0F, 05, 05] -D834 DC76; [1D 23, 05, 05] +D834 DF1C; [1D 11, 05, 05] -D834 DC77; [1D 25, 05, 05] +D834 DF1D; [1D 13, 05, 05] -D834 DC78; [1D 27, 05, 05] +D834 DF1E; [1D 15, 05, 05] -D834 DC79; [1D 29, 05, 05] +D834 DF1F; [1D 17, 05, 05] -D834 DC7A; [1D 2B, 05, 05] +D834 DF20; [1D 19, 05, 05] -D834 DC7B; [1D 2D, 05, 05] +D834 DF21; [1D 1B, 05, 05] -D834 DC7C; [1D 2F, 05, 05] +D834 DF22; [1D 1D, 05, 05] -D834 DC7D; [1D 31, 05, 05] +D834 DF23; [1D 1F, 05, 05] -D834 DC7E; [1D 33, 05, 05] +D834 DF24; [1D 21, 05, 05] -D834 DC7F; [1D 35, 05, 05] +D834 DF25; [1D 23, 05, 05] -D834 DC80; [1D 37, 05, 05] +D834 DF26; [1D 25, 05, 05] -D834 DC81; [1D 39, 05, 05] +D834 DF27; [1D 27, 05, 05] -D834 DC82; [1D 3B, 05, 05] +D834 DF28; [1D 29, 05, 05] -D834 DC83; [1D 3D, 05, 05] +D834 DF29; [1D 2B, 05, 05] -D834 DC84; [1D 3F, 05, 05] +D834 DF2A; [1D 2D, 05, 05] -D834 DC85; [1D 41, 05, 05] +D834 DF2B; [1D 2F, 05, 05] -D834 DC86; [1D 43, 05, 05] +D834 DF2C; [1D 31, 05, 05] -D834 DC87; [1D 45, 05, 05] +D834 DF2D; [1D 33, 05, 05] -D834 DC88; [1D 47, 05, 05] +D834 DF2E; [1D 35, 05, 05] -D834 DC89; [1D 49, 05, 05] +D834 DF2F; [1D 37, 05, 05] -D834 DC8A; [1D 4B, 05, 05] +D834 DF30; [1D 39, 05, 05] -D834 DC8B; [1D 4D, 05, 05] +D834 DF31; [1D 3B, 05, 05] -D834 DC8C; [1D 4F, 05, 05] +D834 DF32; [1D 3D, 05, 05] -D834 DC8D; [1D 51, 05, 05] +D834 DF33; [1D 3F, 05, 05] -D834 DC8E; [1D 53, 05, 05] +D834 DF34; [1D 41, 05, 05] -D834 DC8F; [1D 55, 05, 05] +D834 DF35; [1D 43, 05, 05] -D834 DC90; [1D 57, 05, 05] +D834 DF36; [1D 45, 05, 05] -D834 DC91; [1D 59, 05, 05] +D834 DF37; [1D 47, 05, 05] -D834 DC92; [1D 5B, 05, 05] +D834 DF38; [1D 49, 05, 05] -D834 DC93; [1D 5D, 05, 05] +D834 DF39; [1D 4B, 05, 05] -D834 DC94; [1D 5F, 05, 05] +D834 DF3A; [1D 4D, 05, 05] -D834 DC95; [1D 61, 05, 05] +D834 DF3B; [1D 4F, 05, 05] -D834 DC96; [1D 63, 05, 05] +D834 DF3C; [1D 51, 05, 05] -D834 DC97; [1D 65, 05, 05] +D834 DF3D; [1D 53, 05, 05] -D834 DC98; [1D 67, 05, 05] +D834 DF3E; [1D 55, 05, 05] -D834 DC99; [1D 69, 05, 05] +D834 DF3F; [1D 57, 05, 05] -D834 DC9A; [1D 6B, 05, 05] +D834 DF40; [1D 59, 05, 05] -D834 DC9B; [1D 6D, 05, 05] +D834 DF41; [1D 5B, 05, 05] -D834 DC9C; [1D 6F, 05, 05] +D834 DF42; [1D 5D, 05, 05] -D834 DC9D; [1D 71, 05, 05] +D834 DF43; [1D 5F, 05, 05] -D834 DC9E; [1D 73, 05, 05] +D834 DF44; [1D 61, 05, 05] -D834 DC9F; [1D 75, 05, 05] +D834 DF45; [1D 63, 05, 05] -D834 DCA0; [1D 77, 05, 05] +D834 DF46; [1D 65, 05, 05] -D834 DCA1; [1D 79, 05, 05] +D834 DF47; [1D 67, 05, 05] -D834 DCA2; [1D 7B, 05, 05] +D834 DF48; [1D 69, 05, 05] -D834 DCA3; [1D 7D, 05, 05] +D834 DF49; [1D 6B, 05, 05] -D834 DCA4; [1D 7F, 05, 05] +D834 DF4A; [1D 6D, 05, 05] -D834 DCA5; [1D 81, 05, 05] +D834 DF4B; [1D 6F, 05, 05] -D834 DCA6; [1D 83, 05, 05] +D834 DF4C; [1D 71, 05, 05] -D834 DCA7; [1D 85, 05, 05] +D834 DF4D; [1D 73, 05, 05] -D834 DCA8; [1D 87, 05, 05] +D834 DF4E; [1D 75, 05, 05] -D834 DCA9; [1D 89, 05, 05] +D834 DF4F; [1D 77, 05, 05] -D834 DCAA; [1D 8B, 05, 05] +D834 DF50; [1D 79, 05, 05] -D834 DCAB; [1D 8D, 05, 05] +D834 DF51; [1D 7B, 05, 05] -D834 DCAC; [1D 8F, 05, 05] +D834 DF52; [1D 7D, 05, 05] -D834 DCAD; [1D 91, 05, 05] +D834 DF53; [1D 7F, 05, 05] -D834 DCAE; [1D 93, 05, 05] +D834 DF54; [1D 81, 05, 05] -D834 DCAF; [1D 95, 05, 05] +D834 DF55; [1D 83, 05, 05] -D834 DCB0; [1D 97, 05, 05] +D834 DF56; [1D 85, 05, 05] -D834 DCB1; [1D 99, 05, 05] +A490; [1D 87, 05, 05] -D834 DCB2; [1D 9B, 05, 05] +A491; [1D 89, 05, 05] -D834 DCB3; [1D 9D, 05, 05] +A492; [1D 8B, 05, 05] -D834 DCB4; [1D 9F, 05, 05] +A493; [1D 8D, 05, 05] -D834 DCB5; [1D A1, 05, 05] +A494; [1D 8F, 05, 05] -D834 DCB6; [1D A3, 05, 05] +A495; [1D 91, 05, 05] -D834 DCB7; [1D A5, 05, 05] +A496; [1D 93, 05, 05] -D834 DCB8; [1D A7, 05, 05] +A497; [1D 95, 05, 05] -D834 DCB9; [1D A9, 05, 05] +A498; [1D 97, 05, 05] -D834 DCBA; [1D AB, 05, 05] +A499; [1D 99, 05, 05] -D834 DCBB; [1D AD, 05, 05] +A49A; [1D 9B, 05, 05] -D834 DCBC; [1D AF, 05, 05] +A49B; [1D 9D, 05, 05] -D834 DCBD; [1D B1, 05, 05] +A49C; [1D 9F, 05, 05] -D834 DCBE; [1D B3, 05, 05] +A49D; [1D A1, 05, 05] -D834 DCBF; [1D B5, 05, 05] +A49E; [1D A3, 05, 05] -D834 DCC0; [1D B7, 05, 05] +A49F; [1D A5, 05, 05] -D834 DCC1; [1D B9, 05, 05] +A4A0; [1D A7, 05, 05] -D834 DCC2; [1D BB, 05, 05] +A4A1; [1D A9, 05, 05] -D834 DCC3; [1D BD, 05, 05] +A4A2; [1D AB, 05, 05] -D834 DCC4; [1D BF, 05, 05] +A4A3; [1D AD, 05, 05] -D834 DCC5; [1D C1, 05, 05] +A4A4; [1D AF, 05, 05] -D834 DCC6; [1D C3, 05, 05] +A4A5; [1D B1, 05, 05] -D834 DCC7; [1D C5, 05, 05] +A4A6; [1D B3, 05, 05] -D834 DCC8; [1D C7, 05, 05] +A4A7; [1D B5, 05, 05] -D834 DCC9; [1D C9, 05, 05] +A4A8; [1D B7, 05, 05] -D834 DCCA; [1D CB, 05, 05] +A4A9; [1D B9, 05, 05] -D834 DCCB; [1D CD, 05, 05] +A4AA; [1D BB, 05, 05] -D834 DCCC; [1D CF, 05, 05] +A4AB; [1D BD, 05, 05] -D834 DCCD; [1D D1, 05, 05] +A4AC; [1D BF, 05, 05] -D834 DCCE; [1D D3, 05, 05] +A4AD; [1D C1, 05, 05] -D834 DCCF; [1D D5, 05, 05] +A4AE; [1D C3, 05, 05] -D834 DCD0; [1D D7, 05, 05] +A4AF; [1D C5, 05, 05] -D834 DCD1; [1D D9, 05, 05] +A4B0; [1D C7, 05, 05] -D834 DCD2; [1D DB, 05, 05] +A4B1; [1D C9, 05, 05] -D834 DCD3; [1D DD, 05, 05] +A4B2; [1D CB, 05, 05] -D834 DCD4; [1D DF, 05, 05] +A4B3; [1D CD, 05, 05] -D834 DCD5; [1D E1, 05, 05] +A4B4; [1D CF, 05, 05] -D834 DCD6; [1D E3, 05, 05] +A4B5; [1D D1, 05, 05] -D834 DCD7; [1D E5, 05, 05] +A4B6; [1D D3, 05, 05] -D834 DCD8; [1D E7, 05, 05] +A4B7; [1D D5, 05, 05] -D834 DCD9; [1D E9, 05, 05] +A4B8; [1D D7, 05, 05] -D834 DCDA; [1D EB, 05, 05] +A4B9; [1D D9, 05, 05] -D834 DCDB; [1D ED, 05, 05] +A4BA; [1D DB, 05, 05] -D834 DCDC; [1D EF, 05, 05] +A4BB; [1D DD, 05, 05] -D834 DCDD; [1D F1, 05, 05] +A4BC; [1D DF, 05, 05] -D834 DCDE; [1D F3, 05, 05] +A4BD; [1D E1, 05, 05] -D834 DCDF; [1D F5, 05, 05] +A4BE; [1D E3, 05, 05] -D834 DCE0; [1D F7, 05, 05] +A4BF; [1D E5, 05, 05] -D834 DCE1; [1D F9, 05, 05] +A4C0; [1D E7, 05, 05] -D834 DCE2; [1D FB, 05, 05] +A4C1; [1D E9, 05, 05] -D834 DCE3; [1D FD, 05, 05] +A4C2; [1D EB, 05, 05] -D834 DCE4; [1E 05, 05, 05] +A4C3; [1D ED, 05, 05] -D834 DCE5; [1E 07, 05, 05] +A4C4; [1D EF, 05, 05] -D834 DCE6; [1E 09, 05, 05] +A4C5; [1D F1, 05, 05] -D834 DCE7; [1E 0B, 05, 05] +A4C6; [1D F3, 05, 05] -D834 DCE8; [1E 0D, 05, 05] +D800 DD37; [1D F5, 05, 05] -D834 DCE9; [1E 0F, 05, 05] +D800 DD38; [1D F7, 05, 05] -D834 DCEA; [1E 11, 05, 05] +D800 DD39; [1D F9, 05, 05] -D834 DCEB; [1E 13, 05, 05] +D800 DD3A; [1D FB, 05, 05] -D834 DCEC; [1E 15, 05, 05] +D800 DD3B; [1D FD, 05, 05] -D834 DCED; [1E 17, 05, 05] +D800 DD3C; [1E 05, 05, 05] -D834 DCEE; [1E 19, 05, 05] +D800 DD3D; [1E 07, 05, 05] -D834 DCEF; [1E 1B, 05, 05] +D800 DD3E; [1E 09, 05, 05] -D834 DCF0; [1E 1D, 05, 05] +D800 DD3F; [1E 0B, 05, 05] -D834 DCF1; [1E 1F, 05, 05] +D800 DD79; [1E 0D, 05, 05] -D834 DCF2; [1E 21, 05, 05] +D800 DD7A; [1E 0F, 05, 05] -D834 DCF3; [1E 23, 05, 05] +D800 DD7B; [1E 11, 05, 05] -D834 DCF4; [1E 25, 05, 05] +D800 DD7C; [1E 13, 05, 05] -D834 DCF5; [1E 27, 05, 05] +D800 DD7D; [1E 15, 05, 05] -D834 DD00; [1E 29, 05, 05] +D800 DD7E; [1E 17, 05, 05] -D834 DD01; [1E 2B, 05, 05] +D800 DD7F; [1E 19, 05, 05] -D834 DD02; [1E 2D, 05, 05] +D800 DD80; [1E 1B, 05, 05] -D834 DD03; [1E 2F, 05, 05] +D800 DD81; [1E 1D, 05, 05] -D834 DD04; [1E 31, 05, 05] +D800 DD82; [1E 1F, 05, 05] -D834 DD05; [1E 33, 05, 05] +D800 DD83; [1E 21, 05, 05] -D834 DD06; [1E 35, 05, 05] +D800 DD84; [1E 23, 05, 05] -D834 DD07; [1E 37, 05, 05] +D800 DD85; [1E 25, 05, 05] -D834 DD08; [1E 39, 05, 05] +D800 DD86; [1E 27, 05, 05] -D834 DD09; [1E 3B, 05, 05] +D800 DD87; [1E 29, 05, 05] -D834 DD0A; [1E 3D, 05, 05] +D800 DD88; [1E 2B, 05, 05] -D834 DD0B; [1E 3F, 05, 05] +D800 DD89; [1E 2D, 05, 05] -D834 DD0C; [1E 41, 05, 05] +D834 DC00; [1E 2F, 05, 05] -D834 DD0D; [1E 43, 05, 05] +D834 DC01; [1E 31, 05, 05] -D834 DD0E; [1E 45, 05, 05] +D834 DC02; [1E 33, 05, 05] -D834 DD0F; [1E 47, 05, 05] +D834 DC03; [1E 35, 05, 05] -D834 DD10; [1E 49, 05, 05] +D834 DC04; [1E 37, 05, 05] -D834 DD11; [1E 4B, 05, 05] +D834 DC05; [1E 39, 05, 05] -D834 DD12; [1E 4D, 05, 05] +D834 DC06; [1E 3B, 05, 05] -D834 DD13; [1E 4F, 05, 05] +D834 DC07; [1E 3D, 05, 05] -D834 DD14; [1E 51, 05, 05] +D834 DC08; [1E 3F, 05, 05] -D834 DD15; [1E 53, 05, 05] +D834 DC09; [1E 41, 05, 05] -D834 DD16; [1E 55, 05, 05] +D834 DC0A; [1E 43, 05, 05] -D834 DD17; [1E 57, 05, 05] +D834 DC0B; [1E 45, 05, 05] -D834 DD18; [1E 59, 05, 05] +D834 DC0C; [1E 47, 05, 05] -D834 DD19; [1E 5B, 05, 05] +D834 DC0D; [1E 49, 05, 05] -D834 DD1A; [1E 5D, 05, 05] +D834 DC0E; [1E 4B, 05, 05] -D834 DD1B; [1E 5F, 05, 05] +D834 DC0F; [1E 4D, 05, 05] -D834 DD1C; [1E 61, 05, 05] +D834 DC10; [1E 4F, 05, 05] -D834 DD1D; [1E 63, 05, 05] +D834 DC11; [1E 51, 05, 05] -D834 DD1E; [1E 65, 05, 05] +D834 DC12; [1E 53, 05, 05] -D834 DD1F; [1E 67, 05, 05] +D834 DC13; [1E 55, 05, 05] -D834 DD20; [1E 69, 05, 05] +D834 DC14; [1E 57, 05, 05] -D834 DD21; [1E 6B, 05, 05] +D834 DC15; [1E 59, 05, 05] -D834 DD22; [1E 6D, 05, 05] +D834 DC16; [1E 5B, 05, 05] -D834 DD23; [1E 6F, 05, 05] +D834 DC17; [1E 5D, 05, 05] -D834 DD24; [1E 71, 05, 05] +D834 DC18; [1E 5F, 05, 05] -D834 DD25; [1E 73, 05, 05] +D834 DC19; [1E 61, 05, 05] -D834 DD26; [1E 75, 05, 05] +D834 DC1A; [1E 63, 05, 05] -266D; [1E 77, 05, 05] +D834 DC1B; [1E 65, 05, 05] -266E; [1E 79, 05, 05] +D834 DC1C; [1E 67, 05, 05] -266F; [1E 7B, 05, 05] +D834 DC1D; [1E 69, 05, 05] -D834 DD2A; [1E 7D, 05, 05] +D834 DC1E; [1E 6B, 05, 05] -D834 DD2B; [1E 7F, 05, 05] +D834 DC1F; [1E 6D, 05, 05] -D834 DD2C; [1E 81, 05, 05] +D834 DC20; [1E 6F, 05, 05] -D834 DD2D; [1E 83, 05, 05] +D834 DC21; [1E 71, 05, 05] -D834 DD2E; [1E 85, 05, 05] +D834 DC22; [1E 73, 05, 05] -D834 DD2F; [1E 87, 05, 05] +D834 DC23; [1E 75, 05, 05] -D834 DD30; [1E 89, 05, 05] +D834 DC24; [1E 77, 05, 05] -D834 DD31; [1E 8B, 05, 05] +D834 DC25; [1E 79, 05, 05] -D834 DD32; [1E 8D, 05, 05] +D834 DC26; [1E 7B, 05, 05] -D834 DD33; [1E 8F, 05, 05] +D834 DC27; [1E 7D, 05, 05] -D834 DD34; [1E 91, 05, 05] +D834 DC28; [1E 7F, 05, 05] -D834 DD35; [1E 93, 05, 05] +D834 DC29; [1E 81, 05, 05] -D834 DD36; [1E 95, 05, 05] +D834 DC2A; [1E 83, 05, 05] -D834 DD37; [1E 97, 05, 05] +D834 DC2B; [1E 85, 05, 05] -D834 DD38; [1E 99, 05, 05] +D834 DC2C; [1E 87, 05, 05] -D834 DD39; [1E 9B, 05, 05] +D834 DC2D; [1E 89, 05, 05] -D834 DD3A; [1E 9D, 05, 05] +D834 DC2E; [1E 8B, 05, 05] -D834 DD3B; [1E 9F, 05, 05] +D834 DC2F; [1E 8D, 05, 05] -D834 DD3C; [1E A1, 05, 05] +D834 DC30; [1E 8F, 05, 05] -D834 DD3D; [1E A3, 05, 05] +D834 DC31; [1E 91, 05, 05] -D834 DD3E; [1E A5, 05, 05] +D834 DC32; [1E 93, 05, 05] -D834 DD3F; [1E A7, 05, 05] +D834 DC33; [1E 95, 05, 05] -D834 DD40; [1E A9, 05, 05] +D834 DC34; [1E 97, 05, 05] -D834 DD41; [1E AB, 05, 05] +D834 DC35; [1E 99, 05, 05] -D834 DD42; [1E AD, 05, 05] +D834 DC36; [1E 9B, 05, 05] -D834 DD43; [1E AF, 05, 05] +D834 DC37; [1E 9D, 05, 05] -D834 DD44; [1E B1, 05, 05] +D834 DC38; [1E 9F, 05, 05] -D834 DD45; [1E B3, 05, 05] +D834 DC39; [1E A1, 05, 05] -D834 DD46; [1E B5, 05, 05] +D834 DC3A; [1E A3, 05, 05] -D834 DD47; [1E B7, 05, 05] +D834 DC3B; [1E A5, 05, 05] -D834 DD48; [1E B9, 05, 05] +D834 DC3C; [1E A7, 05, 05] -D834 DD49; [1E BB, 05, 05] +D834 DC3D; [1E A9, 05, 05] -D834 DD4A; [1E BD, 05, 05] +D834 DC3E; [1E AB, 05, 05] -D834 DD4B; [1E BF, 05, 05] +D834 DC3F; [1E AD, 05, 05] -D834 DD4C; [1E C1, 05, 05] +D834 DC40; [1E AF, 05, 05] -D834 DD4D; [1E C3, 05, 05] +D834 DC41; [1E B1, 05, 05] -D834 DD4E; [1E C5, 05, 05] +D834 DC42; [1E B3, 05, 05] -D834 DD4F; [1E C7, 05, 05] +D834 DC43; [1E B5, 05, 05] -D834 DD50; [1E C9, 05, 05] +D834 DC44; [1E B7, 05, 05] -D834 DD51; [1E CB, 05, 05] +D834 DC45; [1E B9, 05, 05] -D834 DD52; [1E CD, 05, 05] +D834 DC46; [1E BB, 05, 05] -D834 DD53; [1E CF, 05, 05] +D834 DC47; [1E BD, 05, 05] -D834 DD54; [1E D1, 05, 05] +D834 DC48; [1E BF, 05, 05] -D834 DD55; [1E D3, 05, 05] +D834 DC49; [1E C1, 05, 05] -D834 DD56; [1E D5, 05, 05] +D834 DC4A; [1E C3, 05, 05] -D834 DD57; [1E D7, 05, 05] -D834 DD5E; [1E D7, 05, 05] +D834 DC4B; [1E C5, 05, 05] -D834 DD58; [1E D9, 05, 05] -D834 DD5F; [1E D9, 05, 05] -D834 DD60; [1E D9, 05, 05] -D834 DD61; [1E D9, 05, 05] -D834 DD62; [1E D9, 05, 05] -D834 DD63; [1E D9, 05, 05] -D834 DD64; [1E D9, 05, 05] +D834 DC4C; [1E C7, 05, 05] -D834 DD59; [1E DB, 05, 05] +D834 DC4D; [1E C9, 05, 05] -D834 DD5A; [1E DD, 05, 05] +D834 DC4E; [1E CB, 05, 05] -D834 DD5B; [1E DF, 05, 05] +D834 DC4F; [1E CD, 05, 05] -D834 DD5C; [1E E1, 05, 05] +D834 DC50; [1E CF, 05, 05] -D834 DD5D; [1E E3, 05, 05] +D834 DC51; [1E D1, 05, 05] -D834 DD6A; [1E E5, 05, 05] +D834 DC52; [1E D3, 05, 05] -D834 DD6B; [1E E7, 05, 05] +D834 DC53; [1E D5, 05, 05] -D834 DD6C; [1E E9, 05, 05] +D834 DC54; [1E D7, 05, 05] -D834 DD83; [1E EB, 05, 05] +D834 DC55; [1E D9, 05, 05] -D834 DD84; [1E ED, 05, 05] +D834 DC56; [1E DB, 05, 05] -D834 DD8C; [1E EF, 05, 05] +D834 DC57; [1E DD, 05, 05] -D834 DD8D; [1E F1, 05, 05] +D834 DC58; [1E DF, 05, 05] -D834 DD8E; [1E F3, 05, 05] +D834 DC59; [1E E1, 05, 05] -D834 DD8F; [1E F5, 05, 05] +D834 DC5A; [1E E3, 05, 05] -D834 DD90; [1E F7, 05, 05] +D834 DC5B; [1E E5, 05, 05] -D834 DD91; [1E F9, 05, 05] +D834 DC5C; [1E E7, 05, 05] -D834 DD92; [1E FB, 05, 05] +D834 DC5D; [1E E9, 05, 05] -D834 DD93; [1E FD, 05, 05] +D834 DC5E; [1E EB, 05, 05] -D834 DD94; [1F 05, 05, 05] +D834 DC5F; [1E ED, 05, 05] -D834 DD95; [1F 07, 05, 05] +D834 DC60; [1E EF, 05, 05] -D834 DD96; [1F 09, 05, 05] +D834 DC61; [1E F1, 05, 05] -D834 DD97; [1F 0B, 05, 05] +D834 DC62; [1E F3, 05, 05] -D834 DD98; [1F 0D, 05, 05] +D834 DC63; [1E F5, 05, 05] -D834 DD99; [1F 0F, 05, 05] +D834 DC64; [1E F7, 05, 05] -D834 DD9A; [1F 11, 05, 05] +D834 DC65; [1E F9, 05, 05] -D834 DD9B; [1F 13, 05, 05] +D834 DC66; [1E FB, 05, 05] -D834 DD9C; [1F 15, 05, 05] +D834 DC67; [1E FD, 05, 05] -D834 DD9D; [1F 17, 05, 05] +D834 DC68; [1F 05, 05, 05] -D834 DD9E; [1F 19, 05, 05] +D834 DC69; [1F 07, 05, 05] -D834 DD9F; [1F 1B, 05, 05] +D834 DC6A; [1F 09, 05, 05] -D834 DDA0; [1F 1D, 05, 05] +D834 DC6B; [1F 0B, 05, 05] -D834 DDA1; [1F 1F, 05, 05] +D834 DC6C; [1F 0D, 05, 05] -D834 DDA2; [1F 21, 05, 05] +D834 DC6D; [1F 0F, 05, 05] -D834 DDA3; [1F 23, 05, 05] +D834 DC6E; [1F 11, 05, 05] -D834 DDA4; [1F 25, 05, 05] +D834 DC6F; [1F 13, 05, 05] -D834 DDA5; [1F 27, 05, 05] +D834 DC70; [1F 15, 05, 05] -D834 DDA6; [1F 29, 05, 05] +D834 DC71; [1F 17, 05, 05] -D834 DDA7; [1F 2B, 05, 05] +D834 DC72; [1F 19, 05, 05] -D834 DDA8; [1F 2D, 05, 05] +D834 DC73; [1F 1B, 05, 05] -D834 DDA9; [1F 2F, 05, 05] +D834 DC74; [1F 1D, 05, 05] -D834 DDAE; [1F 31, 05, 05] +D834 DC75; [1F 1F, 05, 05] -D834 DDAF; [1F 33, 05, 05] +D834 DC76; [1F 21, 05, 05] -D834 DDB0; [1F 35, 05, 05] +D834 DC77; [1F 23, 05, 05] -D834 DDB1; [1F 37, 05, 05] +D834 DC78; [1F 25, 05, 05] -D834 DDB2; [1F 39, 05, 05] +D834 DC79; [1F 27, 05, 05] -D834 DDB3; [1F 3B, 05, 05] +D834 DC7A; [1F 29, 05, 05] -D834 DDB4; [1F 3D, 05, 05] +D834 DC7B; [1F 2B, 05, 05] -D834 DDB5; [1F 3F, 05, 05] +D834 DC7C; [1F 2D, 05, 05] -D834 DDB6; [1F 41, 05, 05] +D834 DC7D; [1F 2F, 05, 05] -D834 DDB7; [1F 43, 05, 05] +D834 DC7E; [1F 31, 05, 05] -D834 DDB8; [1F 45, 05, 05] +D834 DC7F; [1F 33, 05, 05] -D834 DDB9; [1F 47, 05, 05] -D834 DDBB; [1F 47, 05, 05] -D834 DDBD; [1F 47, 05, 05] -D834 DDBF; [1F 47, 05, 05] +D834 DC80; [1F 35, 05, 05] -D834 DDBA; [1F 49, 05, 05] -D834 DDBC; [1F 49, 05, 05] -D834 DDBE; [1F 49, 05, 05] -D834 DDC0; [1F 49, 05, 05] +D834 DC81; [1F 37, 05, 05] -D834 DDC1; [1F 4B, 05, 05] +D834 DC82; [1F 39, 05, 05] -D834 DDC2; [1F 4D, 05, 05] +D834 DC83; [1F 3B, 05, 05] -D834 DDC3; [1F 4F, 05, 05] +D834 DC84; [1F 3D, 05, 05] -D834 DDC4; [1F 51, 05, 05] +D834 DC85; [1F 3F, 05, 05] -D834 DDC5; [1F 53, 05, 05] +D834 DC86; [1F 41, 05, 05] -D834 DDC6; [1F 55, 05, 05] +D834 DC87; [1F 43, 05, 05] -D834 DDC7; [1F 57, 05, 05] +D834 DC88; [1F 45, 05, 05] -D834 DDC8; [1F 59, 05, 05] +D834 DC89; [1F 47, 05, 05] -D834 DDC9; [1F 5B, 05, 05] +D834 DC8A; [1F 49, 05, 05] -D834 DDCA; [1F 5D, 05, 05] +D834 DC8B; [1F 4B, 05, 05] -D834 DDCB; [1F 5F, 05, 05] +D834 DC8C; [1F 4D, 05, 05] -D834 DDCC; [1F 61, 05, 05] +D834 DC8D; [1F 4F, 05, 05] -D834 DDCD; [1F 63, 05, 05] +D834 DC8E; [1F 51, 05, 05] -D834 DDCE; [1F 65, 05, 05] +D834 DC8F; [1F 53, 05, 05] -D834 DDCF; [1F 67, 05, 05] +D834 DC90; [1F 55, 05, 05] -D834 DDD0; [1F 69, 05, 05] +D834 DC91; [1F 57, 05, 05] -D834 DDD1; [1F 6B, 05, 05] +D834 DC92; [1F 59, 05, 05] -D834 DDD2; [1F 6D, 05, 05] +D834 DC93; [1F 5B, 05, 05] -D834 DDD3; [1F 6F, 05, 05] +D834 DC94; [1F 5D, 05, 05] -D834 DDD4; [1F 71, 05, 05] +D834 DC95; [1F 5F, 05, 05] -D834 DDD5; [1F 73, 05, 05] +D834 DC96; [1F 61, 05, 05] -D834 DDD6; [1F 75, 05, 05] +D834 DC97; [1F 63, 05, 05] -D834 DDD7; [1F 77, 05, 05] +D834 DC98; [1F 65, 05, 05] -D834 DDD8; [1F 79, 05, 05] +D834 DC99; [1F 67, 05, 05] -D834 DDD9; [1F 7B, 05, 05] +D834 DC9A; [1F 69, 05, 05] -D834 DDDA; [1F 7D, 05, 05] +D834 DC9B; [1F 6B, 05, 05] -D834 DDDB; [1F 7F, 05, 05] +D834 DC9C; [1F 6D, 05, 05] -D834 DDDC; [1F 81, 05, 05] +D834 DC9D; [1F 6F, 05, 05] -D834 DDDD; [1F 83, 05, 05] +D834 DC9E; [1F 71, 05, 05] -2FF0; [1F 85, 05, 05] +D834 DC9F; [1F 73, 05, 05] -2FF1; [1F 87, 05, 05] +D834 DCA0; [1F 75, 05, 05] -2FF2; [1F 89, 05, 05] +D834 DCA1; [1F 77, 05, 05] -2FF3; [1F 8B, 05, 05] +D834 DCA2; [1F 79, 05, 05] -2FF4; [1F 8D, 05, 05] +D834 DCA3; [1F 7B, 05, 05] -2FF5; [1F 8F, 05, 05] +D834 DCA4; [1F 7D, 05, 05] -2FF6; [1F 91, 05, 05] +D834 DCA5; [1F 7F, 05, 05] -2FF7; [1F 93, 05, 05] +D834 DCA6; [1F 81, 05, 05] -2FF8; [1F 95, 05, 05] +D834 DCA7; [1F 83, 05, 05] -2FF9; [1F 97, 05, 05] +D834 DCA8; [1F 85, 05, 05] -2FFA; [1F 99, 05, 05] +D834 DCA9; [1F 87, 05, 05] -2FFB; [1F 9B, 05, 05] +D834 DCAA; [1F 89, 05, 05] -3004; [1F 9D, 05, 05] +D834 DCAB; [1F 8B, 05, 05] -3012; [1F 9F, 05, 05] -3036; [1F 9F, 05, 09] +D834 DCAC; [1F 8D, 05, 05] -3013; [1F A1, 05, 05] +D834 DCAD; [1F 8F, 05, 05] -3020; [1F A3, 05, 05] +D834 DCAE; [1F 91, 05, 05] -3037; [1F A5, 05, 05] +D834 DCAF; [1F 93, 05, 05] -303E; [1F A7, 05, 05] +D834 DCB0; [1F 95, 05, 05] -303F; [1F A9, 05, 05] +D834 DCB1; [1F 97, 05, 05] -3190; [1F AB, 05, 05] +D834 DCB2; [1F 99, 05, 05] -3191; [1F AD, 05, 05] +D834 DCB3; [1F 9B, 05, 05] -327F; [1F AF, 05, 05] +D834 DCB4; [1F 9D, 05, 05] -FFFC; [1F B1, 05, 05] +D834 DCB5; [1F 9F, 05, 05] -FFFD; [1F B3, 05, 05] +D834 DCB6; [1F A1, 05, 05] -09F8; [1F B5, 05, 05] +D834 DCB7; [1F A3, 05, 05] -09F9; [1F B7, 05, 05] +D834 DCB8; [1F A5, 05, 05] -0BF0; [1F B9, 05, 05] +D834 DCB9; [1F A7, 05, 05] -0BF1; [1F BB, 05, 05] +D834 DCBA; [1F A9, 05, 05] -0BF2; [1F BD, 05, 05] +D834 DCBB; [1F AB, 05, 05] -1372; [1F BF, 05, 05] +D834 DCBC; [1F AD, 05, 05] -1373; [1F C1, 05, 05] +D834 DCBD; [1F AF, 05, 05] -1374; [1F C3, 05, 05] +D834 DCBE; [1F B1, 05, 05] -1375; [1F C5, 05, 05] +D834 DCBF; [1F B3, 05, 05] -1376; [1F C7, 05, 05] +D834 DCC0; [1F B5, 05, 05] -1377; [1F C9, 05, 05] +D834 DCC1; [1F B7, 05, 05] -1378; [1F CB, 05, 05] +D834 DCC2; [1F B9, 05, 05] -1379; [1F CD, 05, 05] +D834 DCC3; [1F BB, 05, 05] -137A; [1F CF, 05, 05] +D834 DCC4; [1F BD, 05, 05] -137B; [1F D1, 05, 05] +D834 DCC5; [1F BF, 05, 05] -137C; [1F D3, 05, 05] +D834 DCC6; [1F C1, 05, 05] -2180; [1F D5, 05, 05] +D834 DCC7; [1F C3, 05, 05] -2181; [1F D7, 05, 05] +D834 DCC8; [1F C5, 05, 05] -2182; [1F D9, 05, 05] +D834 DCC9; [1F C7, 05, 05] -2183; [1F DB, 05, 05] +D834 DCCA; [1F C9, 05, 05] -D800 DF22; [1F DD, 05, 05] +D834 DCCB; [1F CB, 05, 05] -D800 DF23; [1F DF, 05, 05] +D834 DCCC; [1F CD, 05, 05] -D800 DD10; [1F E1, 05, 05] +D834 DCCD; [1F CF, 05, 05] -D800 DD11; [1F E3, 05, 05] +D834 DCCE; [1F D1, 05, 05] -D800 DD12; [1F E5, 05, 05] +D834 DCCF; [1F D3, 05, 05] -D800 DD13; [1F E7, 05, 05] +D834 DCD0; [1F D5, 05, 05] -D800 DD14; [1F E9, 05, 05] +D834 DCD1; [1F D7, 05, 05] -D800 DD15; [1F EB, 05, 05] +D834 DCD2; [1F D9, 05, 05] -D800 DD16; [1F ED, 05, 05] +D834 DCD3; [1F DB, 05, 05] -D800 DD17; [1F EF, 05, 05] +D834 DCD4; [1F DD, 05, 05] -D800 DD18; [1F F1, 05, 05] +D834 DCD5; [1F DF, 05, 05] -D800 DD19; [1F F3, 05, 05] +D834 DCD6; [1F E1, 05, 05] -D800 DD1A; [1F F5, 05, 05] +D834 DCD7; [1F E3, 05, 05] -D800 DD1B; [1F F7, 05, 05] +D834 DCD8; [1F E5, 05, 05] -D800 DD1C; [1F F9, 05, 05] +D834 DCD9; [1F E7, 05, 05] -D800 DD1D; [1F FB, 05, 05] +D834 DCDA; [1F E9, 05, 05] -D800 DD1E; [1F FD, 05, 05] +D834 DCDB; [1F EB, 05, 05] -D800 DD1F; [20 05, 05, 05] +D834 DCDC; [1F ED, 05, 05] -D800 DD20; [20 07, 05, 05] +D834 DCDD; [1F EF, 05, 05] -D800 DD21; [20 09, 05, 05] +D834 DCDE; [1F F1, 05, 05] -D800 DD22; [20 0B, 05, 05] +D834 DCDF; [1F F3, 05, 05] -D800 DD23; [20 0D, 05, 05] +D834 DCE0; [1F F5, 05, 05] -D800 DD24; [20 0F, 05, 05] +D834 DCE1; [1F F7, 05, 05] -D800 DD25; [20 11, 05, 05] +D834 DCE2; [1F F9, 05, 05] -D800 DD26; [20 13, 05, 05] +D834 DCE3; [1F FB, 05, 05] -D800 DD27; [20 15, 05, 05] +D834 DCE4; [1F FD, 05, 05] -D800 DD28; [20 17, 05, 05] +D834 DCE5; [20 05, 05, 05] -D800 DD29; [20 19, 05, 05] +D834 DCE6; [20 07, 05, 05] -D800 DD2A; [20 1B, 05, 05] +D834 DCE7; [20 09, 05, 05] -D800 DD2B; [20 1D, 05, 05] +D834 DCE8; [20 0B, 05, 05] -D800 DD2C; [20 1F, 05, 05] +D834 DCE9; [20 0D, 05, 05] -D800 DD2D; [20 21, 05, 05] +D834 DCEA; [20 0F, 05, 05] -D800 DD2E; [20 23, 05, 05] +D834 DCEB; [20 11, 05, 05] -D800 DD2F; [20 25, 05, 05] +D834 DCEC; [20 13, 05, 05] -D800 DD30; [20 27, 05, 05] +D834 DCED; [20 15, 05, 05] -D800 DD31; [20 29, 05, 05] +D834 DCEE; [20 17, 05, 05] -D800 DD32; [20 2B, 05, 05] +D834 DCEF; [20 19, 05, 05] -D800 DD33; [20 2D, 05, 05] +D834 DCF0; [20 1B, 05, 05] -[variable top = 202D] # END OF VARIABLE SECTION!!! +D834 DCF1; [20 1D, 05, 05] -02D0; [23 20, 05, 05] +D834 DCF2; [20 1F, 05, 05] -02D1; [23 22, 05, 05] +D834 DCF3; [20 21, 05, 05] -0E46; [23 24, 05, 05] +D834 DCF4; [20 23, 05, 05] -0EC6; [23 26, 05, 05] +D834 DCF5; [20 25, 05, 05] -3005; [23 28, 05, 05] +D834 DD00; [20 27, 05, 05] -303B; [23 2A, 05, 05] +D834 DD01; [20 29, 05, 05] -3031; [23 2C, 05, 05] -3032; [23 2C, 05, 05][, DC 2D, 05] +D834 DD02; [20 2B, 05, 05] -3033; [23 2E, 05, 05] -3034; [23 2E, 05, 05][, DC 2D, 05] +D834 DD03; [20 2D, 05, 05] -3035; [23 30, 05, 05] +D834 DD04; [20 2F, 05, 05] -309D; [23 32, 05, 05] -309E; [23 32, 05, 05][, DC 2D, 05] +D834 DD05; [20 31, 05, 05] -30FC; [23 34, 05, 05] -FF70; [23 34, 05, A3] +D834 DD06; [20 33, 05, 05] -30FD; [23 36, 05, 05] -30FE; [23 36, 05, 05][, DC 2D, 05] +D834 DD07; [20 35, 05, 05] -00A4; [23 38, 05, 05] +D834 DD08; [20 37, 05, 05] -00A2; [23 3A, 05, 05] -FFE0; [23 3A, 05, 07] +D834 DD09; [20 39, 05, 05] -0024; [23 3C, 05, 05] -FF04; [23 3C, 05, 07] -FE69; [23 3C, 05, 1D] +D834 DD0A; [20 3B, 05, 05] -00A3; [23 3E, 05, 05] -FFE1; [23 3E, 05, 07] +D834 DD0B; [20 3D, 05, 05] -00A5; [23 40, 05, 05] -FFE5; [23 40, 05, 07] +D834 DD0C; [20 3F, 05, 05] -09F2; [23 42, 05, 05] +D834 DD0D; [20 41, 05, 05] -09F3; [23 44, 05, 05] +D834 DD0E; [20 43, 05, 05] -0AF1; [23 46, 05, 05] +D834 DD0F; [20 45, 05, 05] -0BF9; [23 48, 05, 05] +D834 DD10; [20 47, 05, 05] -0E3F; [23 4A, 05, 05] +D834 DD11; [20 49, 05, 05] -17DB; [23 4C, 05, 05] +D834 DD12; [20 4B, 05, 05] -20A0; [23 4E, 05, 05] +D834 DD13; [20 4D, 05, 05] -20A1; [23 50, 05, 05] +D834 DD14; [20 4F, 05, 05] -20A2; [23 52, 05, 05] +D834 DD15; [20 51, 05, 05] -20A3; [23 54, 05, 05] +D834 DD16; [20 53, 05, 05] -20A4; [23 56, 05, 05] +D834 DD17; [20 55, 05, 05] -20A5; [23 58, 05, 05] +D834 DD18; [20 57, 05, 05] -20A6; [23 5A, 05, 05] +D834 DD19; [20 59, 05, 05] -20A7; [23 5C, 05, 05] +D834 DD1A; [20 5B, 05, 05] -20A9; [23 5E, 05, 05] -FFE6; [23 5E, 05, 07] +D834 DD1B; [20 5D, 05, 05] -20AA; [23 60, 05, 05] +D834 DD1C; [20 5F, 05, 05] -20AB; [23 62, 05, 05] +D834 DD1D; [20 61, 05, 05] -20AC; [23 64, 05, 05] +D834 DD1E; [20 63, 05, 05] -20AD; [23 66, 05, 05] +D834 DD1F; [20 65, 05, 05] -20AE; [23 68, 05, 05] - -20AF; [23 6A, 05, 05] - -20B0; [23 6C, 05, 05] - -20B1; [23 6E, 05, 05] - -0030; [23 70, 05, 05] -FF10; [23 70, 05, 07] -D835 DFCE; [23 70, 05, 0B] -D835 DFD8; [23 70, 05, 0B] -D835 DFE2; [23 70, 05, 0B] -D835 DFEC; [23 70, 05, 0B] -D835 DFF6; [23 70, 05, 0B] -24EA; [23 70, 05, 0D] -24FF; [23 70, 05, 0D] -2070; [23 70, 05, 27] -2080; [23 70, 05, 29] -0660; [23 70, 05, 05][, E0 DD, 05] -06F0; [23 70, 05, 05][, E0 ED, 05] -D801 DCA0; [23 70, 05, 05][, E1 11, 05] -0966; [23 70, 05, 05][, E1 21, 05] -09E6; [23 70, 05, 05][, E1 31, 05] -0A66; [23 70, 05, 05][, E1 51, 05] -0AE6; [23 70, 05, 05][, E1 61, 05] -0B66; [23 70, 05, 05][, E1 71, 05] -0C66; [23 70, 05, 05][, E1 91, 05] -0CE6; [23 70, 05, 05][, E1 A1, 05] -0D66; [23 70, 05, 05][, E1 B1, 05] -1946; [23 70, 05, 05][, E1 C1, 05] -0E50; [23 70, 05, 05][, E1 D1, 05] -0ED0; [23 70, 05, 05][, E1 E1, 05] -0F20; [23 70, 05, 05][, E1 F1, 05] -0F33; [23 70, 05, 09][, E1 F1, 09] -1040; [23 70, 05, 05][, E2 05, 05] -17E0; [23 70, 05, 05][, E2 15, 05] -17F0; [23 70, 05, 05][, E2 25, 05] -1810; [23 70, 05, 05][, E2 35, 05] -3007; [23 70, 05, 05][, E2 45, 05] -3358; [23 70, 05, 09][E0 4B 22, 05, 09] - -0031; [23 72, 05, 05] -FF11; [23 72, 05, 07] -D835 DFCF; [23 72, 05, 0B] -D835 DFD9; [23 72, 05, 0B] -D835 DFE3; [23 72, 05, 0B] -D835 DFED; [23 72, 05, 0B] -D835 DFF7; [23 72, 05, 0B] -2460; [23 72, 05, 0D] -24F5; [23 72, 05, 0D] -2776; [23 72, 05, 0D] -2780; [23 72, 05, 0D] -278A; [23 72, 05, 0D] -00B9; [23 72, 05, 27] -2081; [23 72, 05, 29] -0661; [23 72, 05, 05][, E0 DD, 05] -06F1; [23 72, 05, 05][, E0 ED, 05] -1369; [23 72, 05, 05][, E0 FD, 05] -D801 DCA1; [23 72, 05, 05][, E1 11, 05] -0967; [23 72, 05, 05][, E1 21, 05] -09E7; [23 72, 05, 05][, E1 31, 05] -09F4; [23 72, 05, 05][, E1 41, 05] -0A67; [23 72, 05, 05][, E1 51, 05] -0AE7; [23 72, 05, 05][, E1 61, 05] -0B67; [23 72, 05, 05][, E1 71, 05] -0BE7; [23 72, 05, 05][, E1 81, 05] -0C67; [23 72, 05, 05][, E1 91, 05] -0CE7; [23 72, 05, 05][, E1 A1, 05] -0D67; [23 72, 05, 05][, E1 B1, 05] -1947; [23 72, 05, 05][, E1 C1, 05] -0E51; [23 72, 05, 05][, E1 D1, 05] -0ED1; [23 72, 05, 05][, E1 E1, 05] -0F21; [23 72, 05, 05][, E1 F1, 05] -0F2A; [23 72, 05, 09][, E1 F1, 09] -1041; [23 72, 05, 05][, E2 05, 05] -17E1; [23 72, 05, 05][, E2 15, 05] -17F1; [23 72, 05, 05][, E2 25, 05] -1811; [23 72, 05, 05][, E2 35, 05] -3021; [23 72, 05, 05][, E2 45, 05] -D800 DD07; [23 72, 05, 05][, E2 55, 05] -D800 DF20; [23 72, 05, 05][, E2 65, 05] -2488; [23 72, 05, 09][08 0B, 05, 09] -215F; [23 72, 05, 3B][08 EB, 05, 3B] -00BD; [23 72, 05, 3B][08 EB, 05, 3B][23 74, 05, 3D] -2153; [23 72, 05, 3B][08 EB, 05, 3B][23 76, 05, 3D] -00BC; [23 72, 05, 3B][08 EB, 05, 3B][23 78, 05, 3D] -2155; [23 72, 05, 3B][08 EB, 05, 3B][23 7A, 05, 3D] -2159; [23 72, 05, 3B][08 EB, 05, 3B][23 7C, 05, 3D] -215B; [23 72, 05, 3B][08 EB, 05, 3B][23 80, 05, 3D] -2469; [23 72, 05, 0D][23 70, 05, 0D] -24FE; [23 72, 05, 0D][23 70, 05, 0D] -277F; [23 72, 05, 0D][23 70, 05, 0D] -2789; [23 72, 05, 0D][23 70, 05, 0D] -2793; [23 72, 05, 0D][23 70, 05, 0D] -2491; [23 72, 05, 09][23 70, 05, 09][08 0B, 05, 3D] -33E9; [23 72, 05, 09][23 70, 05, 09][E0 34 F0, 05, 3D] -32C9; [23 72, 05, 09][23 70, 05, 09][E0 37 48, 05, 3D] -3362; [23 72, 05, 09][23 70, 05, 09][E0 4B 22, 05, 3D] -246A; [23 72, 05, 0D][23 72, 05, 0D] -24EB; [23 72, 05, 0D][23 72, 05, 0D] -2492; [23 72, 05, 09][23 72, 05, 09][08 0B, 05, 3D] -33EA; [23 72, 05, 09][23 72, 05, 09][E0 34 F0, 05, 3D] -32CA; [23 72, 05, 09][23 72, 05, 09][E0 37 48, 05, 3D] -3363; [23 72, 05, 09][23 72, 05, 09][E0 4B 22, 05, 3D] -246B; [23 72, 05, 0D][23 74, 05, 0D] -24EC; [23 72, 05, 0D][23 74, 05, 0D] -2493; [23 72, 05, 09][23 74, 05, 09][08 0B, 05, 3D] -33EB; [23 72, 05, 09][23 74, 05, 09][E0 34 F0, 05, 3D] -32CB; [23 72, 05, 09][23 74, 05, 09][E0 37 48, 05, 3D] -3364; [23 72, 05, 09][23 74, 05, 09][E0 4B 22, 05, 3D] -246C; [23 72, 05, 0D][23 76, 05, 0D] -24ED; [23 72, 05, 0D][23 76, 05, 0D] -2494; [23 72, 05, 09][23 76, 05, 09][08 0B, 05, 3D] -33EC; [23 72, 05, 09][23 76, 05, 09][E0 34 F0, 05, 3D] -3365; [23 72, 05, 09][23 76, 05, 09][E0 4B 22, 05, 3D] -246D; [23 72, 05, 0D][23 78, 05, 0D] -24EE; [23 72, 05, 0D][23 78, 05, 0D] -2495; [23 72, 05, 09][23 78, 05, 09][08 0B, 05, 3D] -33ED; [23 72, 05, 09][23 78, 05, 09][E0 34 F0, 05, 3D] -3366; [23 72, 05, 09][23 78, 05, 09][E0 4B 22, 05, 3D] -246E; [23 72, 05, 0D][23 7A, 05, 0D] -24EF; [23 72, 05, 0D][23 7A, 05, 0D] -2496; [23 72, 05, 09][23 7A, 05, 09][08 0B, 05, 3D] -33EE; [23 72, 05, 09][23 7A, 05, 09][E0 34 F0, 05, 3D] -3367; [23 72, 05, 09][23 7A, 05, 09][E0 4B 22, 05, 3D] -246F; [23 72, 05, 0D][23 7C, 05, 0D] -24F0; [23 72, 05, 0D][23 7C, 05, 0D] -2497; [23 72, 05, 09][23 7C, 05, 09][08 0B, 05, 3D] -33EF; [23 72, 05, 09][23 7C, 05, 09][E0 34 F0, 05, 3D] -3368; [23 72, 05, 09][23 7C, 05, 09][E0 4B 22, 05, 3D] -2470; [23 72, 05, 0D][23 7E, 05, 0D] -24F1; [23 72, 05, 0D][23 7E, 05, 0D] -2498; [23 72, 05, 09][23 7E, 05, 09][08 0B, 05, 3D] -33F0; [23 72, 05, 09][23 7E, 05, 09][E0 34 F0, 05, 3D] -3369; [23 72, 05, 09][23 7E, 05, 09][E0 4B 22, 05, 3D] -2471; [23 72, 05, 0D][23 80, 05, 0D] -24F2; [23 72, 05, 0D][23 80, 05, 0D] -2499; [23 72, 05, 09][23 80, 05, 09][08 0B, 05, 3D] -33F1; [23 72, 05, 09][23 80, 05, 09][E0 34 F0, 05, 3D] -336A; [23 72, 05, 09][23 80, 05, 09][E0 4B 22, 05, 3D] -2472; [23 72, 05, 0D][23 82, 05, 0D] -24F3; [23 72, 05, 0D][23 82, 05, 0D] -249A; [23 72, 05, 09][23 82, 05, 09][08 0B, 05, 3D] -33F2; [23 72, 05, 09][23 82, 05, 09][E0 34 F0, 05, 3D] -336B; [23 72, 05, 09][23 82, 05, 09][E0 4B 22, 05, 3D] -33E0; [23 72, 05, 09][E0 34 F0, 05, 09] -32C0; [23 72, 05, 09][E0 37 48, 05, 09] -3359; [23 72, 05, 09][E0 4B 22, 05, 09] - -0032; [23 74, 05, 05] -FF12; [23 74, 05, 07] -D835 DFD0; [23 74, 05, 0B] -D835 DFDA; [23 74, 05, 0B] -D835 DFE4; [23 74, 05, 0B] -D835 DFEE; [23 74, 05, 0B] -D835 DFF8; [23 74, 05, 0B] -2461; [23 74, 05, 0D] -24F6; [23 74, 05, 0D] -2777; [23 74, 05, 0D] -2781; [23 74, 05, 0D] -278B; [23 74, 05, 0D] -00B2; [23 74, 05, 27] -2082; [23 74, 05, 29] -0662; [23 74, 05, 05][, E0 DD, 05] -06F2; [23 74, 05, 05][, E0 ED, 05] -136A; [23 74, 05, 05][, E0 FD, 05] -D801 DCA2; [23 74, 05, 05][, E1 11, 05] -0968; [23 74, 05, 05][, E1 21, 05] -09E8; [23 74, 05, 05][, E1 31, 05] -09F5; [23 74, 05, 05][, E1 41, 05] -0A68; [23 74, 05, 05][, E1 51, 05] -0AE8; [23 74, 05, 05][, E1 61, 05] -0B68; [23 74, 05, 05][, E1 71, 05] -0BE8; [23 74, 05, 05][, E1 81, 05] -0C68; [23 74, 05, 05][, E1 91, 05] -0CE8; [23 74, 05, 05][, E1 A1, 05] -0D68; [23 74, 05, 05][, E1 B1, 05] -1948; [23 74, 05, 05][, E1 C1, 05] -0E52; [23 74, 05, 05][, E1 D1, 05] -0ED2; [23 74, 05, 05][, E1 E1, 05] -0F22; [23 74, 05, 05][, E1 F1, 05] -0F2B; [23 74, 05, 09][, E1 F1, 09] -1042; [23 74, 05, 05][, E2 05, 05] -17E2; [23 74, 05, 05][, E2 15, 05] -17F2; [23 74, 05, 05][, E2 25, 05] -1812; [23 74, 05, 05][, E2 35, 05] -3022; [23 74, 05, 05][, E2 45, 05] -D800 DD08; [23 74, 05, 05][, E2 55, 05] -2489; [23 74, 05, 09][08 0B, 05, 09] -2154; [23 74, 05, 3B][08 EB, 05, 3B][23 76, 05, 3D] -2156; [23 74, 05, 3B][08 EB, 05, 3B][23 7A, 05, 3D] -2473; [23 74, 05, 0D][23 70, 05, 0D] -24F4; [23 74, 05, 0D][23 70, 05, 0D] -249B; [23 74, 05, 09][23 70, 05, 09][08 0B, 05, 3D] -33F3; [23 74, 05, 09][23 70, 05, 09][E0 34 F0, 05, 3D] -336C; [23 74, 05, 09][23 70, 05, 09][E0 4B 22, 05, 3D] -3251; [23 74, 05, 0D][23 72, 05, 0D] -33F4; [23 74, 05, 09][23 72, 05, 09][E0 34 F0, 05, 3D] -336D; [23 74, 05, 09][23 72, 05, 09][E0 4B 22, 05, 3D] -3252; [23 74, 05, 0D][23 74, 05, 0D] -33F5; [23 74, 05, 09][23 74, 05, 09][E0 34 F0, 05, 3D] -336E; [23 74, 05, 09][23 74, 05, 09][E0 4B 22, 05, 3D] -3253; [23 74, 05, 0D][23 76, 05, 0D] -33F6; [23 74, 05, 09][23 76, 05, 09][E0 34 F0, 05, 3D] -336F; [23 74, 05, 09][23 76, 05, 09][E0 4B 22, 05, 3D] -3254; [23 74, 05, 0D][23 78, 05, 0D] -33F7; [23 74, 05, 09][23 78, 05, 09][E0 34 F0, 05, 3D] -3370; [23 74, 05, 09][23 78, 05, 09][E0 4B 22, 05, 3D] -3255; [23 74, 05, 0D][23 7A, 05, 0D] -33F8; [23 74, 05, 09][23 7A, 05, 09][E0 34 F0, 05, 3D] -3256; [23 74, 05, 0D][23 7C, 05, 0D] -33F9; [23 74, 05, 09][23 7C, 05, 09][E0 34 F0, 05, 3D] -3257; [23 74, 05, 0D][23 7E, 05, 0D] -33FA; [23 74, 05, 09][23 7E, 05, 09][E0 34 F0, 05, 3D] -3258; [23 74, 05, 0D][23 80, 05, 0D] -33FB; [23 74, 05, 09][23 80, 05, 09][E0 34 F0, 05, 3D] -3259; [23 74, 05, 0D][23 82, 05, 0D] -33FC; [23 74, 05, 09][23 82, 05, 09][E0 34 F0, 05, 3D] -33E1; [23 74, 05, 09][E0 34 F0, 05, 09] -32C1; [23 74, 05, 09][E0 37 48, 05, 09] -335A; [23 74, 05, 09][E0 4B 22, 05, 09] - -0033; [23 76, 05, 05] -FF13; [23 76, 05, 07] -D835 DFD1; [23 76, 05, 0B] -D835 DFDB; [23 76, 05, 0B] -D835 DFE5; [23 76, 05, 0B] -D835 DFEF; [23 76, 05, 0B] -D835 DFF9; [23 76, 05, 0B] -2462; [23 76, 05, 0D] -24F7; [23 76, 05, 0D] -2778; [23 76, 05, 0D] -2782; [23 76, 05, 0D] -278C; [23 76, 05, 0D] -00B3; [23 76, 05, 27] -2083; [23 76, 05, 29] -0663; [23 76, 05, 05][, E0 DD, 05] -06F3; [23 76, 05, 05][, E0 ED, 05] -136B; [23 76, 05, 05][, E0 FD, 05] -D801 DCA3; [23 76, 05, 05][, E1 11, 05] -0969; [23 76, 05, 05][, E1 21, 05] -09E9; [23 76, 05, 05][, E1 31, 05] -09F6; [23 76, 05, 05][, E1 41, 05] -0A69; [23 76, 05, 05][, E1 51, 05] -0AE9; [23 76, 05, 05][, E1 61, 05] -0B69; [23 76, 05, 05][, E1 71, 05] -0BE9; [23 76, 05, 05][, E1 81, 05] -0C69; [23 76, 05, 05][, E1 91, 05] -0CE9; [23 76, 05, 05][, E1 A1, 05] -0D69; [23 76, 05, 05][, E1 B1, 05] -1949; [23 76, 05, 05][, E1 C1, 05] -0E53; [23 76, 05, 05][, E1 D1, 05] -0ED3; [23 76, 05, 05][, E1 E1, 05] -0F23; [23 76, 05, 05][, E1 F1, 05] -0F2C; [23 76, 05, 09][, E1 F1, 09] -1043; [23 76, 05, 05][, E2 05, 05] -17E3; [23 76, 05, 05][, E2 15, 05] -17F3; [23 76, 05, 05][, E2 25, 05] -1813; [23 76, 05, 05][, E2 35, 05] -3023; [23 76, 05, 05][, E2 45, 05] -D800 DD09; [23 76, 05, 05][, E2 55, 05] -248A; [23 76, 05, 09][08 0B, 05, 09] -00BE; [23 76, 05, 3B][08 EB, 05, 3B][23 78, 05, 3D] -2157; [23 76, 05, 3B][08 EB, 05, 3B][23 7A, 05, 3D] -215C; [23 76, 05, 3B][08 EB, 05, 3B][23 80, 05, 3D] -325A; [23 76, 05, 0D][23 70, 05, 0D] -33FD; [23 76, 05, 09][23 70, 05, 09][E0 34 F0, 05, 3D] -325B; [23 76, 05, 0D][23 72, 05, 0D] -33FE; [23 76, 05, 09][23 72, 05, 09][E0 34 F0, 05, 3D] -325C; [23 76, 05, 0D][23 74, 05, 0D] -325D; [23 76, 05, 0D][23 76, 05, 0D] -325E; [23 76, 05, 0D][23 78, 05, 0D] -325F; [23 76, 05, 0D][23 7A, 05, 0D] -32B1; [23 76, 05, 0D][23 7C, 05, 0D] -32B2; [23 76, 05, 0D][23 7E, 05, 0D] -32B3; [23 76, 05, 0D][23 80, 05, 0D] -32B4; [23 76, 05, 0D][23 82, 05, 0D] -33E2; [23 76, 05, 09][E0 34 F0, 05, 09] -32C2; [23 76, 05, 09][E0 37 48, 05, 09] -335B; [23 76, 05, 09][E0 4B 22, 05, 09] - -0034; [23 78, 05, 05] -FF14; [23 78, 05, 07] -D835 DFD2; [23 78, 05, 0B] -D835 DFDC; [23 78, 05, 0B] -D835 DFE6; [23 78, 05, 0B] -D835 DFF0; [23 78, 05, 0B] -D835 DFFA; [23 78, 05, 0B] -2463; [23 78, 05, 0D] -24F8; [23 78, 05, 0D] -2779; [23 78, 05, 0D] -2783; [23 78, 05, 0D] -278D; [23 78, 05, 0D] -2074; [23 78, 05, 27] -2084; [23 78, 05, 29] -0664; [23 78, 05, 05][, E0 DD, 05] -06F4; [23 78, 05, 05][, E0 ED, 05] -136C; [23 78, 05, 05][, E0 FD, 05] -D801 DCA4; [23 78, 05, 05][, E1 11, 05] -096A; [23 78, 05, 05][, E1 21, 05] -09EA; [23 78, 05, 05][, E1 31, 05] -09F7; [23 78, 05, 05][, E1 41, 05] -0A6A; [23 78, 05, 05][, E1 51, 05] -0AEA; [23 78, 05, 05][, E1 61, 05] -0B6A; [23 78, 05, 05][, E1 71, 05] -0BEA; [23 78, 05, 05][, E1 81, 05] -0C6A; [23 78, 05, 05][, E1 91, 05] -0CEA; [23 78, 05, 05][, E1 A1, 05] -0D6A; [23 78, 05, 05][, E1 B1, 05] -194A; [23 78, 05, 05][, E1 C1, 05] -0E54; [23 78, 05, 05][, E1 D1, 05] -0ED4; [23 78, 05, 05][, E1 E1, 05] -0F24; [23 78, 05, 05][, E1 F1, 05] -0F2D; [23 78, 05, 09][, E1 F1, 09] -1044; [23 78, 05, 05][, E2 05, 05] -17E4; [23 78, 05, 05][, E2 15, 05] -17F4; [23 78, 05, 05][, E2 25, 05] -1814; [23 78, 05, 05][, E2 35, 05] -3024; [23 78, 05, 05][, E2 45, 05] -D800 DD0A; [23 78, 05, 05][, E2 55, 05] -248B; [23 78, 05, 09][08 0B, 05, 09] -2158; [23 78, 05, 3B][08 EB, 05, 3B][23 7A, 05, 3D] -32B5; [23 78, 05, 0D][23 70, 05, 0D] -32B6; [23 78, 05, 0D][23 72, 05, 0D] -32B7; [23 78, 05, 0D][23 74, 05, 0D] -32B8; [23 78, 05, 0D][23 76, 05, 0D] -32B9; [23 78, 05, 0D][23 78, 05, 0D] -32BA; [23 78, 05, 0D][23 7A, 05, 0D] -32BB; [23 78, 05, 0D][23 7C, 05, 0D] -32BC; [23 78, 05, 0D][23 7E, 05, 0D] -32BD; [23 78, 05, 0D][23 80, 05, 0D] -32BE; [23 78, 05, 0D][23 82, 05, 0D] -33E3; [23 78, 05, 09][E0 34 F0, 05, 09] -32C3; [23 78, 05, 09][E0 37 48, 05, 09] -335C; [23 78, 05, 09][E0 4B 22, 05, 09] - -0035; [23 7A, 05, 05] -FF15; [23 7A, 05, 07] -D835 DFD3; [23 7A, 05, 0B] -D835 DFDD; [23 7A, 05, 0B] -D835 DFE7; [23 7A, 05, 0B] -D835 DFF1; [23 7A, 05, 0B] -D835 DFFB; [23 7A, 05, 0B] -2464; [23 7A, 05, 0D] -24F9; [23 7A, 05, 0D] -277A; [23 7A, 05, 0D] -2784; [23 7A, 05, 0D] -278E; [23 7A, 05, 0D] -2075; [23 7A, 05, 27] -2085; [23 7A, 05, 29] -0665; [23 7A, 05, 05][, E0 DD, 05] -06F5; [23 7A, 05, 05][, E0 ED, 05] -136D; [23 7A, 05, 05][, E0 FD, 05] -D801 DCA5; [23 7A, 05, 05][, E1 11, 05] -096B; [23 7A, 05, 05][, E1 21, 05] -09EB; [23 7A, 05, 05][, E1 31, 05] -0A6B; [23 7A, 05, 05][, E1 51, 05] -0AEB; [23 7A, 05, 05][, E1 61, 05] -0B6B; [23 7A, 05, 05][, E1 71, 05] -0BEB; [23 7A, 05, 05][, E1 81, 05] -0C6B; [23 7A, 05, 05][, E1 91, 05] -0CEB; [23 7A, 05, 05][, E1 A1, 05] -0D6B; [23 7A, 05, 05][, E1 B1, 05] -194B; [23 7A, 05, 05][, E1 C1, 05] -0E55; [23 7A, 05, 05][, E1 D1, 05] -0ED5; [23 7A, 05, 05][, E1 E1, 05] -0F25; [23 7A, 05, 05][, E1 F1, 05] -0F2E; [23 7A, 05, 09][, E1 F1, 09] -1045; [23 7A, 05, 05][, E2 05, 05] -17E5; [23 7A, 05, 05][, E2 15, 05] -17F5; [23 7A, 05, 05][, E2 25, 05] -1815; [23 7A, 05, 05][, E2 35, 05] -3025; [23 7A, 05, 05][, E2 45, 05] -D800 DD0B; [23 7A, 05, 05][, E2 55, 05] -D800 DF21; [23 7A, 05, 05][, E2 65, 05] -248C; [23 7A, 05, 09][08 0B, 05, 09] -215A; [23 7A, 05, 3B][08 EB, 05, 3B][23 7C, 05, 3D] -215D; [23 7A, 05, 3B][08 EB, 05, 3B][23 80, 05, 3D] -32BF; [23 7A, 05, 0D][23 70, 05, 0D] -33E4; [23 7A, 05, 09][E0 34 F0, 05, 09] -32C4; [23 7A, 05, 09][E0 37 48, 05, 09] -335D; [23 7A, 05, 09][E0 4B 22, 05, 09] - -0036; [23 7C, 05, 05] -FF16; [23 7C, 05, 07] -D835 DFD4; [23 7C, 05, 0B] -D835 DFDE; [23 7C, 05, 0B] -D835 DFE8; [23 7C, 05, 0B] -D835 DFF2; [23 7C, 05, 0B] -D835 DFFC; [23 7C, 05, 0B] -2465; [23 7C, 05, 0D] -24FA; [23 7C, 05, 0D] -277B; [23 7C, 05, 0D] -2785; [23 7C, 05, 0D] -278F; [23 7C, 05, 0D] -2076; [23 7C, 05, 27] -2086; [23 7C, 05, 29] -0666; [23 7C, 05, 05][, E0 DD, 05] -06F6; [23 7C, 05, 05][, E0 ED, 05] -136E; [23 7C, 05, 05][, E0 FD, 05] -D801 DCA6; [23 7C, 05, 05][, E1 11, 05] -096C; [23 7C, 05, 05][, E1 21, 05] -09EC; [23 7C, 05, 05][, E1 31, 05] -0A6C; [23 7C, 05, 05][, E1 51, 05] -0AEC; [23 7C, 05, 05][, E1 61, 05] -0B6C; [23 7C, 05, 05][, E1 71, 05] -0BEC; [23 7C, 05, 05][, E1 81, 05] -0C6C; [23 7C, 05, 05][, E1 91, 05] -0CEC; [23 7C, 05, 05][, E1 A1, 05] -0D6C; [23 7C, 05, 05][, E1 B1, 05] -194C; [23 7C, 05, 05][, E1 C1, 05] -0E56; [23 7C, 05, 05][, E1 D1, 05] -0ED6; [23 7C, 05, 05][, E1 E1, 05] -0F26; [23 7C, 05, 05][, E1 F1, 05] -0F2F; [23 7C, 05, 09][, E1 F1, 09] -1046; [23 7C, 05, 05][, E2 05, 05] -17E6; [23 7C, 05, 05][, E2 15, 05] -17F6; [23 7C, 05, 05][, E2 25, 05] -1816; [23 7C, 05, 05][, E2 35, 05] -3026; [23 7C, 05, 05][, E2 45, 05] -D800 DD0C; [23 7C, 05, 05][, E2 55, 05] -248D; [23 7C, 05, 09][08 0B, 05, 09] -33E5; [23 7C, 05, 09][E0 34 F0, 05, 09] -32C5; [23 7C, 05, 09][E0 37 48, 05, 09] -335E; [23 7C, 05, 09][E0 4B 22, 05, 09] - -0037; [23 7E, 05, 05] -FF17; [23 7E, 05, 07] -D835 DFD5; [23 7E, 05, 0B] -D835 DFDF; [23 7E, 05, 0B] -D835 DFE9; [23 7E, 05, 0B] -D835 DFF3; [23 7E, 05, 0B] -D835 DFFD; [23 7E, 05, 0B] -2466; [23 7E, 05, 0D] -24FB; [23 7E, 05, 0D] -277C; [23 7E, 05, 0D] -2786; [23 7E, 05, 0D] -2790; [23 7E, 05, 0D] -2077; [23 7E, 05, 27] -2087; [23 7E, 05, 29] -0667; [23 7E, 05, 05][, E0 DD, 05] -06F7; [23 7E, 05, 05][, E0 ED, 05] -136F; [23 7E, 05, 05][, E0 FD, 05] -D801 DCA7; [23 7E, 05, 05][, E1 11, 05] -096D; [23 7E, 05, 05][, E1 21, 05] -09ED; [23 7E, 05, 05][, E1 31, 05] -0A6D; [23 7E, 05, 05][, E1 51, 05] -0AED; [23 7E, 05, 05][, E1 61, 05] -0B6D; [23 7E, 05, 05][, E1 71, 05] -0BED; [23 7E, 05, 05][, E1 81, 05] -0C6D; [23 7E, 05, 05][, E1 91, 05] -0CED; [23 7E, 05, 05][, E1 A1, 05] -0D6D; [23 7E, 05, 05][, E1 B1, 05] -194D; [23 7E, 05, 05][, E1 C1, 05] -0E57; [23 7E, 05, 05][, E1 D1, 05] -0ED7; [23 7E, 05, 05][, E1 E1, 05] -0F27; [23 7E, 05, 05][, E1 F1, 05] -0F30; [23 7E, 05, 09][, E1 F1, 09] -1047; [23 7E, 05, 05][, E2 05, 05] -17E7; [23 7E, 05, 05][, E2 15, 05] -17F7; [23 7E, 05, 05][, E2 25, 05] -1817; [23 7E, 05, 05][, E2 35, 05] -3027; [23 7E, 05, 05][, E2 45, 05] -D800 DD0D; [23 7E, 05, 05][, E2 55, 05] -248E; [23 7E, 05, 09][08 0B, 05, 09] -215E; [23 7E, 05, 3B][08 EB, 05, 3B][23 80, 05, 3D] -33E6; [23 7E, 05, 09][E0 34 F0, 05, 09] -32C6; [23 7E, 05, 09][E0 37 48, 05, 09] -335F; [23 7E, 05, 09][E0 4B 22, 05, 09] - -0038; [23 80, 05, 05] -FF18; [23 80, 05, 07] -D835 DFD6; [23 80, 05, 0B] -D835 DFE0; [23 80, 05, 0B] -D835 DFEA; [23 80, 05, 0B] -D835 DFF4; [23 80, 05, 0B] -D835 DFFE; [23 80, 05, 0B] -2467; [23 80, 05, 0D] -24FC; [23 80, 05, 0D] -277D; [23 80, 05, 0D] -2787; [23 80, 05, 0D] -2791; [23 80, 05, 0D] -2078; [23 80, 05, 27] -2088; [23 80, 05, 29] -0668; [23 80, 05, 05][, E0 DD, 05] -06F8; [23 80, 05, 05][, E0 ED, 05] -1370; [23 80, 05, 05][, E0 FD, 05] -D801 DCA8; [23 80, 05, 05][, E1 11, 05] -096E; [23 80, 05, 05][, E1 21, 05] -09EE; [23 80, 05, 05][, E1 31, 05] -0A6E; [23 80, 05, 05][, E1 51, 05] -0AEE; [23 80, 05, 05][, E1 61, 05] -0B6E; [23 80, 05, 05][, E1 71, 05] -0BEE; [23 80, 05, 05][, E1 81, 05] -0C6E; [23 80, 05, 05][, E1 91, 05] -0CEE; [23 80, 05, 05][, E1 A1, 05] -0D6E; [23 80, 05, 05][, E1 B1, 05] -194E; [23 80, 05, 05][, E1 C1, 05] -0E58; [23 80, 05, 05][, E1 D1, 05] -0ED8; [23 80, 05, 05][, E1 E1, 05] -0F28; [23 80, 05, 05][, E1 F1, 05] -0F31; [23 80, 05, 09][, E1 F1, 09] -1048; [23 80, 05, 05][, E2 05, 05] -17E8; [23 80, 05, 05][, E2 15, 05] -17F8; [23 80, 05, 05][, E2 25, 05] -1818; [23 80, 05, 05][, E2 35, 05] -3028; [23 80, 05, 05][, E2 45, 05] -D800 DD0E; [23 80, 05, 05][, E2 55, 05] -248F; [23 80, 05, 09][08 0B, 05, 09] -33E7; [23 80, 05, 09][E0 34 F0, 05, 09] -32C7; [23 80, 05, 09][E0 37 48, 05, 09] -3360; [23 80, 05, 09][E0 4B 22, 05, 09] - -0039; [23 82, 05, 05] -FF19; [23 82, 05, 07] -D835 DFD7; [23 82, 05, 0B] -D835 DFE1; [23 82, 05, 0B] -D835 DFEB; [23 82, 05, 0B] -D835 DFF5; [23 82, 05, 0B] -D835 DFFF; [23 82, 05, 0B] -2468; [23 82, 05, 0D] -24FD; [23 82, 05, 0D] -277E; [23 82, 05, 0D] -2788; [23 82, 05, 0D] -2792; [23 82, 05, 0D] -2079; [23 82, 05, 27] -2089; [23 82, 05, 29] -0669; [23 82, 05, 05][, E0 DD, 05] -06F9; [23 82, 05, 05][, E0 ED, 05] -1371; [23 82, 05, 05][, E0 FD, 05] -D801 DCA9; [23 82, 05, 05][, E1 11, 05] -096F; [23 82, 05, 05][, E1 21, 05] -09EF; [23 82, 05, 05][, E1 31, 05] -0A6F; [23 82, 05, 05][, E1 51, 05] -0AEF; [23 82, 05, 05][, E1 61, 05] -0B6F; [23 82, 05, 05][, E1 71, 05] -0BEF; [23 82, 05, 05][, E1 81, 05] -0C6F; [23 82, 05, 05][, E1 91, 05] -0CEF; [23 82, 05, 05][, E1 A1, 05] -0D6F; [23 82, 05, 05][, E1 B1, 05] -194F; [23 82, 05, 05][, E1 C1, 05] -0E59; [23 82, 05, 05][, E1 D1, 05] -0ED9; [23 82, 05, 05][, E1 E1, 05] -0F29; [23 82, 05, 05][, E1 F1, 05] -0F32; [23 82, 05, 09][, E1 F1, 09] -1049; [23 82, 05, 05][, E2 05, 05] -17E9; [23 82, 05, 05][, E2 15, 05] -17F9; [23 82, 05, 05][, E2 25, 05] -1819; [23 82, 05, 05][, E2 35, 05] -3029; [23 82, 05, 05][, E2 45, 05] -D800 DD0F; [23 82, 05, 05][, E2 55, 05] -2490; [23 82, 05, 09][08 0B, 05, 09] -33E8; [23 82, 05, 09][E0 34 F0, 05, 09] -32C8; [23 82, 05, 09][E0 37 48, 05, 09] -3361; [23 82, 05, 09][E0 4B 22, 05, 09] - -0061; [26, 05, 05] -FF41; [26, 05, 07] -0363; [26, 05, 09] -D835 DC1A; [26, 05, 0B] -D835 DC4E; [26, 05, 0B] -D835 DC82; [26, 05, 0B] -D835 DCB6; [26, 05, 0B] -D835 DCEA; [26, 05, 0B] -D835 DD1E; [26, 05, 0B] -D835 DD52; [26, 05, 0B] -D835 DD86; [26, 05, 0B] -D835 DDBA; [26, 05, 0B] -D835 DDEE; [26, 05, 0B] -D835 DE22; [26, 05, 0B] -D835 DE56; [26, 05, 0B] -D835 DE8A; [26, 05, 0B] -24D0; [26, 05, 0D] -0041; [26, 05, 8F] -FF21; [26, 05, 91] -D835 DC00; [26, 05, 95] -D835 DC34; [26, 05, 95] -D835 DC68; [26, 05, 95] -D835 DC9C; [26, 05, 95] -D835 DCD0; [26, 05, 95] -D835 DD04; [26, 05, 95] -D835 DD38; [26, 05, 95] -D835 DD6C; [26, 05, 95] -D835 DDA0; [26, 05, 95] -D835 DDD4; [26, 05, 95] -D835 DE08; [26, 05, 95] -D835 DE3C; [26, 05, 95] -D835 DE70; [26, 05, 95] -24B6; [26, 05, 97] -00AA; [26, 05, 27] -1D2C; [26, 05, 27] -1D43; [26, 05, 27] -00E1; [26, 05, 05][, 8D, 05] -00C1; [26, 05, 8F][, 8D, 05] -00E0; [26, 05, 05][, 8F, 05] -00C0; [26, 05, 8F][, 8F, 05] -0103; [26, 05, 05][, 91, 05] -0102; [26, 05, 8F][, 91, 05] -1EAF; [26, 05, 05][, 91, 05][, 8D, 05] -1EAE; [26, 05, 8F][, 91, 05][, 8D, 05] -1EB1; [26, 05, 05][, 91, 05][, 8F, 05] -1EB0; [26, 05, 8F][, 91, 05][, 8F, 05] -1EB5; [26, 05, 05][, 91, 05][, A1, 05] -1EB4; [26, 05, 8F][, 91, 05][, A1, 05] -1EB3; [26, 05, 05][, 91, 05][, AF, 05] -1EB2; [26, 05, 8F][, 91, 05][, AF, 05] -00E2; [26, 05, 05][, 93, 05] -00C2; [26, 05, 8F][, 93, 05] -1EA5; [26, 05, 05][, 93, 05][, 8D, 05] -1EA4; [26, 05, 8F][, 93, 05][, 8D, 05] -1EA7; [26, 05, 05][, 93, 05][, 8F, 05] -1EA6; [26, 05, 8F][, 93, 05][, 8F, 05] -1EAB; [26, 05, 05][, 93, 05][, A1, 05] -1EAA; [26, 05, 8F][, 93, 05][, A1, 05] -1EA9; [26, 05, 05][, 93, 05][, AF, 05] -1EA8; [26, 05, 8F][, 93, 05][, AF, 05] -01CE; [26, 05, 05][, 97, 05] -01CD; [26, 05, 8F][, 97, 05] -00E5; [26, 05, 05][, 99, 05] -00C5; [26, 05, 8F][, 99, 05] -212B; [26, 05, 8F][, 99, 05] -01FB; [26, 05, 05][, 99, 05][, 8D, 05] -01FA; [26, 05, 8F][, 99, 05][, 8D, 05] -00E4; [26, 05, 05][, 9D, 05] -00C4; [26, 05, 8F][, 9D, 05] -01DF; [26, 05, 05][, 9D, 05][, AB, 05] -01DE; [26, 05, 8F][, 9D, 05][, AB, 05] -00E3; [26, 05, 05][, A1, 05] -00C3; [26, 05, 8F][, A1, 05] -0227; [26, 05, 05][, A3, 05] -0226; [26, 05, 8F][, A3, 05] -01E1; [26, 05, 05][, A3, 05][, AB, 05] -01E0; [26, 05, 8F][, A3, 05][, AB, 05] -0105; [26, 05, 05][, A9, 05] -0104; [26, 05, 8F][, A9, 05] -0101; [26, 05, 05][, AB, 05] -0100; [26, 05, 8F][, AB, 05] -1EA3; [26, 05, 05][, AF, 05] -1EA2; [26, 05, 8F][, AF, 05] -0201; [26, 05, 05][, B5, 05] -0200; [26, 05, 8F][, B5, 05] -0203; [26, 05, 05][, B9, 05] -0202; [26, 05, 8F][, B9, 05] -1EA1; [26, 05, 05][, D0 4D, 05] -1EA0; [26, 05, 8F][, D0 4D, 05] -1EB7; [26, 05, 05][, D0 4D, 05][, 91, 05] -1EB6; [26, 05, 8F][, D0 4D, 05][, 91, 05] -1EAD; [26, 05, 05][, D0 4D, 05][, 93, 05] -1EAC; [26, 05, 8F][, D0 4D, 05][, 93, 05] -1E01; [26, 05, 05][, D0 6D, 05] -1E00; [26, 05, 8F][, D0 6D, 05] -33C2; [26, 05, 37][08 0B, 05, 37][3E, 05, 3D][08 0B, 05, 3D] -2100; [26, 05, 09][08 E9, 05, 09][2A, 05, 3D] -2101; [26, 05, 09][08 E9, 05, 09][4A, 05, 3D] -33DF; [26, 05, B9][0B D1, 05, 37][3E, 05, 3D] -3373; [26, 05, B9][4E, 05, B9] -1E9A; [26, 05, 09][59 8A, 05, 09] - -1D00; [27 60, 05, 05] - -00E6; [27 62, 05, 05] -00C6; [27 62, 05, 8F] -1D2D; [27 62, 05, 27] -01FD; [27 62, 05, 05][, 8D, 05] -01FC; [27 62, 05, 8F][, 8D, 05] -01E3; [27 62, 05, 05][, AB, 05] -01E2; [27 62, 05, 8F][, AB, 05] - -1D01; [27 64, 05, 05] - -1D02; [27 66, 05, 05] -1D46; [27 66, 05, 27] - -0250; [27 68, 05, 05] -1D44; [27 68, 05, 27] - -0251; [27 6A, 05, 05] -1D45; [27 6A, 05, 27] - -0252; [27 6C, 05, 05] - -0062; [28, 05, 05] -FF42; [28, 05, 07] -D835 DC1B; [28, 05, 0B] -D835 DC4F; [28, 05, 0B] -D835 DC83; [28, 05, 0B] -D835 DCB7; [28, 05, 0B] -D835 DCEB; [28, 05, 0B] -D835 DD1F; [28, 05, 0B] -D835 DD53; [28, 05, 0B] -D835 DD87; [28, 05, 0B] -D835 DDBB; [28, 05, 0B] -D835 DDEF; [28, 05, 0B] -D835 DE23; [28, 05, 0B] -D835 DE57; [28, 05, 0B] -D835 DE8B; [28, 05, 0B] -24D1; [28, 05, 0D] -0042; [28, 05, 8F] -FF22; [28, 05, 91] -212C; [28, 05, 95] -D835 DC01; [28, 05, 95] -D835 DC35; [28, 05, 95] -D835 DC69; [28, 05, 95] -D835 DCD1; [28, 05, 95] -D835 DD05; [28, 05, 95] -D835 DD39; [28, 05, 95] -D835 DD6D; [28, 05, 95] -D835 DDA1; [28, 05, 95] -D835 DDD5; [28, 05, 95] -D835 DE09; [28, 05, 95] -D835 DE3D; [28, 05, 95] -D835 DE71; [28, 05, 95] -24B7; [28, 05, 97] -1D2E; [28, 05, 27] -1D47; [28, 05, 27] -1E03; [28, 05, 05][, A3, 05] -1E02; [28, 05, 8F][, A3, 05] -1E05; [28, 05, 05][, D0 4D, 05] -1E04; [28, 05, 8F][, D0 4D, 05] -1E07; [28, 05, 05][, D1 11, 05] -1E06; [28, 05, 8F][, D1 11, 05] -3374; [28, 05, 37][26, 05, 37][48, 05, 3D] -33C3; [28, 05, B9][46, 05, 37] - -0299; [29 60, 05, 05] - -0180; [29 62, 05, 05] - -1D2F; [29 64, 05, 05] - -1D03; [29 66, 05, 05] - -0253; [29 68, 05, 05] -0181; [29 68, 05, 8F] - -0183; [29 6A, 05, 05] -0182; [29 6A, 05, 8F] - -0063; [2A, 05, 05] -FF43; [2A, 05, 07] -0368; [2A, 05, 09] -217D; [2A, 05, 09] -D835 DC1C; [2A, 05, 0B] -D835 DC50; [2A, 05, 0B] -D835 DC84; [2A, 05, 0B] -D835 DCB8; [2A, 05, 0B] -D835 DCEC; [2A, 05, 0B] -D835 DD20; [2A, 05, 0B] -D835 DD54; [2A, 05, 0B] -D835 DD88; [2A, 05, 0B] -D835 DDBC; [2A, 05, 0B] -D835 DDF0; [2A, 05, 0B] -D835 DE24; [2A, 05, 0B] -D835 DE58; [2A, 05, 0B] -D835 DE8C; [2A, 05, 0B] -24D2; [2A, 05, 0D] -0043; [2A, 05, 8F] -FF23; [2A, 05, 91] -216D; [2A, 05, 93] -2102; [2A, 05, 95] -212D; [2A, 05, 95] -D835 DC02; [2A, 05, 95] -D835 DC36; [2A, 05, 95] -D835 DC6A; [2A, 05, 95] -D835 DC9E; [2A, 05, 95] -D835 DCD2; [2A, 05, 95] -D835 DD6E; [2A, 05, 95] -D835 DDA2; [2A, 05, 95] -D835 DDD6; [2A, 05, 95] -D835 DE0A; [2A, 05, 95] -D835 DE3E; [2A, 05, 95] -D835 DE72; [2A, 05, 95] -24B8; [2A, 05, 97] -0107; [2A, 05, 05][, 8D, 05] -0106; [2A, 05, 8F][, 8D, 05] -0109; [2A, 05, 05][, 93, 05] -0108; [2A, 05, 8F][, 93, 05] -010D; [2A, 05, 05][, 97, 05] -010C; [2A, 05, 8F][, 97, 05] -010B; [2A, 05, 05][, A3, 05] -010A; [2A, 05, 8F][, A3, 05] -00E7; [2A, 05, 05][, A7, 05] -00C7; [2A, 05, 8F][, A7, 05] -1E09; [2A, 05, 05][, A7, 05][, 8D, 05] -1E08; [2A, 05, 8F][, A7, 05][, 8D, 05] -2105; [2A, 05, 09][08 E9, 05, 09][42, 05, 3D] -2106; [2A, 05, 09][08 E9, 05, 09][4E, 05, 3D] -33C6; [2A, 05, B9][0B D1, 05, 37][3A, 05, 3D][32, 05, 3D] -3388; [2A, 05, 37][26, 05, 37][3C, 05, 3D] -33C4; [2A, 05, 37][2A, 05, 37] -33C5; [2A, 05, 37][2C, 05, 37] -339D; [2A, 05, 37][3E, 05, 37] -33A0; [2A, 05, 37][3E, 05, 37][23 74, 05, 3D] -33A4; [2A, 05, 37][3E, 05, 37][23 76, 05, 3D] -33C7; [2A, 05, B9][42, 05, 37][08 0B, 05, 3D] - -1D04; [2B 60, 05, 05] - -0188; [2B 62, 05, 05] -0187; [2B 62, 05, 8F] - -0255; [2B 64, 05, 05] - -0064; [2C, 05, 05] -FF44; [2C, 05, 07] -0369; [2C, 05, 09] -217E; [2C, 05, 09] -2146; [2C, 05, 0B] -D835 DC1D; [2C, 05, 0B] -D835 DC51; [2C, 05, 0B] -D835 DC85; [2C, 05, 0B] -D835 DCB9; [2C, 05, 0B] -D835 DCED; [2C, 05, 0B] -D835 DD21; [2C, 05, 0B] -D835 DD55; [2C, 05, 0B] -D835 DD89; [2C, 05, 0B] -D835 DDBD; [2C, 05, 0B] -D835 DDF1; [2C, 05, 0B] -D835 DE25; [2C, 05, 0B] -D835 DE59; [2C, 05, 0B] -D835 DE8D; [2C, 05, 0B] -24D3; [2C, 05, 0D] -0044; [2C, 05, 8F] -FF24; [2C, 05, 91] -216E; [2C, 05, 93] -2145; [2C, 05, 95] -D835 DC03; [2C, 05, 95] -D835 DC37; [2C, 05, 95] -D835 DC6B; [2C, 05, 95] -D835 DC9F; [2C, 05, 95] -D835 DCD3; [2C, 05, 95] -D835 DD07; [2C, 05, 95] -D835 DD3B; [2C, 05, 95] -D835 DD6F; [2C, 05, 95] -D835 DDA3; [2C, 05, 95] -D835 DDD7; [2C, 05, 95] -D835 DE0B; [2C, 05, 95] -D835 DE3F; [2C, 05, 95] -D835 DE73; [2C, 05, 95] -24B9; [2C, 05, 97] -1D30; [2C, 05, 27] -1D48; [2C, 05, 27] -010F; [2C, 05, 05][, 97, 05] -010E; [2C, 05, 8F][, 97, 05] -1E0B; [2C, 05, 05][, A3, 05] -1E0A; [2C, 05, 8F][, A3, 05] -1E11; [2C, 05, 05][, A7, 05] -1E10; [2C, 05, 8F][, A7, 05] -1E0D; [2C, 05, 05][, D0 4D, 05] -1E0C; [2C, 05, 8F][, D0 4D, 05] -1E13; [2C, 05, 05][, D0 CD, 05] -1E12; [2C, 05, 8F][, D0 CD, 05] -1E0F; [2C, 05, 05][, D1 11, 05] -1E0E; [2C, 05, 8F][, D1 11, 05] -3372; [2C, 05, 37][26, 05, 37] -33C8; [2C, 05, 37][28, 05, B9] -3397; [2C, 05, 37][3C, 05, 37] -3377; [2C, 05, 37][3E, 05, 37] -3378; [2C, 05, 37][3E, 05, 37][23 74, 05, 3D] -3379; [2C, 05, 37][3E, 05, 37][23 76, 05, 3D] -01F3; [2C, 05, 09][58, 05, 09] -02A3; [2C, 05, 09][58, 05, 09] -01F2; [2C, 05, 93][58, 05, 09] -01F1; [2C, 05, 93][58, 05, 93] -01C6; [2C, 05, 09][58, 05, 09][, 97, 3D] -01C5; [2C, 05, 93][58, 05, 09][, 97, 3D] -01C4; [2C, 05, 93][58, 05, 93][, 97, 3D] -02A5; [2C, 05, 09][59 68, 05, 09] -02A4; [2C, 05, 09][59 6A, 05, 09] - -1D05; [2D 60, 05, 05] - -0111; [2D 62, 05, 05] -0110; [2D 62, 05, 8F] - -0256; [2D 64, 05, 05] -0189; [2D 64, 05, 8F] - -0257; [2D 66, 05, 05] -018A; [2D 66, 05, 8F] - -018C; [2D 68, 05, 05] -018B; [2D 68, 05, 8F] - -0221; [2D 6A, 05, 05] - -00F0; [2D 6C, 05, 05] -00D0; [2D 6C, 05, 8F] - -1D06; [2D 6E, 05, 05] - -0065; [2E, 05, 05] -FF45; [2E, 05, 07] -0364; [2E, 05, 09] -212F; [2E, 05, 0B] -2147; [2E, 05, 0B] -D835 DC1E; [2E, 05, 0B] -D835 DC52; [2E, 05, 0B] -D835 DC86; [2E, 05, 0B] -D835 DCEE; [2E, 05, 0B] -D835 DD22; [2E, 05, 0B] -D835 DD56; [2E, 05, 0B] -D835 DD8A; [2E, 05, 0B] -D835 DDBE; [2E, 05, 0B] -D835 DDF2; [2E, 05, 0B] -D835 DE26; [2E, 05, 0B] -D835 DE5A; [2E, 05, 0B] -D835 DE8E; [2E, 05, 0B] -24D4; [2E, 05, 0D] -0045; [2E, 05, 8F] -FF25; [2E, 05, 91] -2130; [2E, 05, 95] -D835 DC04; [2E, 05, 95] -D835 DC38; [2E, 05, 95] -D835 DC6C; [2E, 05, 95] -D835 DCD4; [2E, 05, 95] -D835 DD08; [2E, 05, 95] -D835 DD3C; [2E, 05, 95] -D835 DD70; [2E, 05, 95] -D835 DDA4; [2E, 05, 95] -D835 DDD8; [2E, 05, 95] -D835 DE0C; [2E, 05, 95] -D835 DE40; [2E, 05, 95] -D835 DE74; [2E, 05, 95] -24BA; [2E, 05, 97] -1D31; [2E, 05, 27] -1D49; [2E, 05, 27] -00E9; [2E, 05, 05][, 8D, 05] -00C9; [2E, 05, 8F][, 8D, 05] -00E8; [2E, 05, 05][, 8F, 05] -00C8; [2E, 05, 8F][, 8F, 05] -0115; [2E, 05, 05][, 91, 05] -0114; [2E, 05, 8F][, 91, 05] -00EA; [2E, 05, 05][, 93, 05] -00CA; [2E, 05, 8F][, 93, 05] -1EBF; [2E, 05, 05][, 93, 05][, 8D, 05] -1EBE; [2E, 05, 8F][, 93, 05][, 8D, 05] -1EC1; [2E, 05, 05][, 93, 05][, 8F, 05] -1EC0; [2E, 05, 8F][, 93, 05][, 8F, 05] -1EC5; [2E, 05, 05][, 93, 05][, A1, 05] -1EC4; [2E, 05, 8F][, 93, 05][, A1, 05] -1EC3; [2E, 05, 05][, 93, 05][, AF, 05] -1EC2; [2E, 05, 8F][, 93, 05][, AF, 05] -011B; [2E, 05, 05][, 97, 05] -011A; [2E, 05, 8F][, 97, 05] -00EB; [2E, 05, 05][, 9D, 05] -00CB; [2E, 05, 8F][, 9D, 05] -1EBD; [2E, 05, 05][, A1, 05] -1EBC; [2E, 05, 8F][, A1, 05] -0117; [2E, 05, 05][, A3, 05] -0116; [2E, 05, 8F][, A3, 05] -0229; [2E, 05, 05][, A7, 05] -0228; [2E, 05, 8F][, A7, 05] -1E1D; [2E, 05, 05][, A7, 05][, 91, 05] -1E1C; [2E, 05, 8F][, A7, 05][, 91, 05] -0119; [2E, 05, 05][, A9, 05] -0118; [2E, 05, 8F][, A9, 05] -0113; [2E, 05, 05][, AB, 05] -0112; [2E, 05, 8F][, AB, 05] -1E17; [2E, 05, 05][, AB, 05][, 8D, 05] -1E16; [2E, 05, 8F][, AB, 05][, 8D, 05] -1E15; [2E, 05, 05][, AB, 05][, 8F, 05] -1E14; [2E, 05, 8F][, AB, 05][, 8F, 05] -1EBB; [2E, 05, 05][, AF, 05] -1EBA; [2E, 05, 8F][, AF, 05] -0205; [2E, 05, 05][, B5, 05] -0204; [2E, 05, 8F][, B5, 05] -0207; [2E, 05, 05][, B9, 05] -0206; [2E, 05, 8F][, B9, 05] -1EB9; [2E, 05, 05][, D0 4D, 05] -1EB8; [2E, 05, 8F][, D0 4D, 05] -1EC7; [2E, 05, 05][, D0 4D, 05][, 93, 05] -1EC6; [2E, 05, 8F][, D0 4D, 05][, 93, 05] -1E19; [2E, 05, 05][, D0 CD, 05] -1E18; [2E, 05, 8F][, D0 CD, 05] -1E1B; [2E, 05, 05][, D0 FD, 05] -1E1A; [2E, 05, 8F][, D0 FD, 05] -32CD; [2E, 05, 37][48, 05, 37][32, 05, 3D] -32CE; [2E, 05, 37][50, 05, B9] - -1D07; [2F 60, 05, 05] - -01DD; [2F 62, 05, 05] -018E; [2F 62, 05, 8F] -1D32; [2F 62, 05, 27] - -0259; [2F 64, 05, 05] -018F; [2F 64, 05, 8F] -1D4A; [2F 64, 05, 27] - -025B; [2F 66, 05, 05] -0190; [2F 66, 05, 8F] -2107; [2F 66, 05, 93] -1D4B; [2F 66, 05, 27] - -0258; [2F 68, 05, 05] - -025A; [2F 6A, 05, 05] - -025C; [2F 6C, 05, 05] - -1D08; [2F 6E, 05, 05] -1D4C; [2F 6E, 05, 27] - -025D; [2F 70, 05, 05] - -025E; [2F 72, 05, 05] - -029A; [2F 74, 05, 05] - -0264; [2F 76, 05, 05] - -0066; [30, 05, 05] -FF46; [30, 05, 07] -D835 DC1F; [30, 05, 0B] -D835 DC53; [30, 05, 0B] -D835 DC87; [30, 05, 0B] -D835 DCBB; [30, 05, 0B] -D835 DCEF; [30, 05, 0B] -D835 DD23; [30, 05, 0B] -D835 DD57; [30, 05, 0B] -D835 DD8B; [30, 05, 0B] -D835 DDBF; [30, 05, 0B] -D835 DDF3; [30, 05, 0B] -D835 DE27; [30, 05, 0B] -D835 DE5B; [30, 05, 0B] -D835 DE8F; [30, 05, 0B] -24D5; [30, 05, 0D] -0046; [30, 05, 8F] -FF26; [30, 05, 91] -2131; [30, 05, 95] -D835 DC05; [30, 05, 95] -D835 DC39; [30, 05, 95] -D835 DC6D; [30, 05, 95] -D835 DCD5; [30, 05, 95] -D835 DD09; [30, 05, 95] -D835 DD3D; [30, 05, 95] -D835 DD71; [30, 05, 95] -D835 DDA5; [30, 05, 95] -D835 DDD9; [30, 05, 95] -D835 DE0D; [30, 05, 95] -D835 DE41; [30, 05, 95] -D835 DE75; [30, 05, 95] -24BB; [30, 05, 97] -1E1F; [30, 05, 05][, A3, 05] -1E1E; [30, 05, 8F][, A3, 05] -213B; [30, 05, 93][26, 05, 93][54, 05, 3D] -FB00; [30, 05, 09][30, 05, 09] -FB03; [30, 05, 09][30, 05, 09][36, 05, 3D] -FB04; [30, 05, 09][30, 05, 09][3C, 05, 3D] -FB01; [30, 05, 09][36, 05, 09] -FB02; [30, 05, 09][3C, 05, 09] -3399; [30, 05, 37][3E, 05, 37] -02A9; [30, 05, 09][41 6E, 05, 09] - -0192; [31 60, 05, 05] -0191; [31 60, 05, 8F] - -0067; [32, 05, 05] -FF47; [32, 05, 07] -210A; [32, 05, 0B] -D835 DC20; [32, 05, 0B] -D835 DC54; [32, 05, 0B] -D835 DC88; [32, 05, 0B] -D835 DCF0; [32, 05, 0B] -D835 DD24; [32, 05, 0B] -D835 DD58; [32, 05, 0B] -D835 DD8C; [32, 05, 0B] -D835 DDC0; [32, 05, 0B] -D835 DDF4; [32, 05, 0B] -D835 DE28; [32, 05, 0B] -D835 DE5C; [32, 05, 0B] -D835 DE90; [32, 05, 0B] -24D6; [32, 05, 0D] -0047; [32, 05, 8F] -FF27; [32, 05, 91] -D835 DC06; [32, 05, 95] -D835 DC3A; [32, 05, 95] -D835 DC6E; [32, 05, 95] -D835 DCA2; [32, 05, 95] -D835 DCD6; [32, 05, 95] -D835 DD0A; [32, 05, 95] -D835 DD3E; [32, 05, 95] -D835 DD72; [32, 05, 95] -D835 DDA6; [32, 05, 95] -D835 DDDA; [32, 05, 95] -D835 DE0E; [32, 05, 95] -D835 DE42; [32, 05, 95] -D835 DE76; [32, 05, 95] -24BC; [32, 05, 97] -1D33; [32, 05, 27] -1D4D; [32, 05, 27] -01F5; [32, 05, 05][, 8D, 05] -01F4; [32, 05, 8F][, 8D, 05] -011F; [32, 05, 05][, 91, 05] -011E; [32, 05, 8F][, 91, 05] -011D; [32, 05, 05][, 93, 05] -011C; [32, 05, 8F][, 93, 05] -01E7; [32, 05, 05][, 97, 05] -01E6; [32, 05, 8F][, 97, 05] -0121; [32, 05, 05][, A3, 05] -0120; [32, 05, 8F][, A3, 05] -0123; [32, 05, 05][, A7, 05] -0122; [32, 05, 8F][, A7, 05] -1E21; [32, 05, 05][, AB, 05] -1E20; [32, 05, 8F][, AB, 05] -33FF; [32, 05, 37][26, 05, 37][3C, 05, 3D] -3387; [32, 05, B9][28, 05, B9] -3393; [32, 05, B9][34, 05, B9][58, 05, 3D] -33AC; [32, 05, B9][44, 05, B9][26, 05, 3D] -33C9; [32, 05, B9][56, 05, 37] - -0261; [33 60, 05, 05] - -0262; [33 62, 05, 05] - -01E5; [33 64, 05, 05] -01E4; [33 64, 05, 8F] - -0260; [33 66, 05, 05] -0193; [33 66, 05, 8F] - -029B; [33 68, 05, 05] - -0263; [33 6A, 05, 05] -0194; [33 6A, 05, 8F] -02E0; [33 6A, 05, 27] - -01A3; [33 6C, 05, 05] -01A2; [33 6C, 05, 8F] - -0068; [34, 05, 05] -FF48; [34, 05, 07] -036A; [34, 05, 09] -210E; [34, 05, 0B] -D835 DC21; [34, 05, 0B] -D835 DC89; [34, 05, 0B] -D835 DCBD; [34, 05, 0B] -D835 DCF1; [34, 05, 0B] -D835 DD25; [34, 05, 0B] -D835 DD59; [34, 05, 0B] -D835 DD8D; [34, 05, 0B] -D835 DDC1; [34, 05, 0B] -D835 DDF5; [34, 05, 0B] -D835 DE29; [34, 05, 0B] -D835 DE5D; [34, 05, 0B] -D835 DE91; [34, 05, 0B] -24D7; [34, 05, 0D] -0048; [34, 05, 8F] -FF28; [34, 05, 91] -210B; [34, 05, 95] -210C; [34, 05, 95] -210D; [34, 05, 95] -D835 DC07; [34, 05, 95] -D835 DC3B; [34, 05, 95] -D835 DC6F; [34, 05, 95] -D835 DCD7; [34, 05, 95] -D835 DD73; [34, 05, 95] -D835 DDA7; [34, 05, 95] -D835 DDDB; [34, 05, 95] -D835 DE0F; [34, 05, 95] -D835 DE43; [34, 05, 95] -D835 DE77; [34, 05, 95] -24BD; [34, 05, 97] -02B0; [34, 05, 27] -1D34; [34, 05, 27] -0125; [34, 05, 05][, 93, 05] -0124; [34, 05, 8F][, 93, 05] -021F; [34, 05, 05][, 97, 05] -021E; [34, 05, 8F][, 97, 05] -1E27; [34, 05, 05][, 9D, 05] -1E26; [34, 05, 8F][, 9D, 05] -1E23; [34, 05, 05][, A3, 05] -1E22; [34, 05, 8F][, A3, 05] -1E29; [34, 05, 05][, A7, 05] -1E28; [34, 05, 8F][, A7, 05] -1E25; [34, 05, 05][, D0 4D, 05] -1E24; [34, 05, 8F][, D0 4D, 05] -1E2B; [34, 05, 05][, D0 DD, 05] -1E2A; [34, 05, 8F][, D0 DD, 05] -1E96; [34, 05, 05][, D1 11, 05] -33CA; [34, 05, 37][26, 05, 37] -32CC; [34, 05, B9][32, 05, 37] -33CB; [34, 05, B9][44, 05, B9] -3371; [34, 05, 37][44, 05, B9][26, 05, 3D] -3390; [34, 05, B9][58, 05, 37] - -029C; [35 60, 05, 05] - -0195; [35 62, 05, 05] -01F6; [35 62, 05, 8F] - -0127; [35 64, 05, 05] -210F; [35 64, 05, 0B] -0126; [35 64, 05, 8F] - -0266; [35 66, 05, 05] -02B1; [35 66, 05, 27] - -0267; [35 68, 05, 05] - -02BB; [35 6A, 05, 05] - -02BD; [35 6C, 05, 05] - -0069; [36, 05, 05] -FF49; [36, 05, 07] -0365; [36, 05, 09] -2170; [36, 05, 09] -2139; [36, 05, 0B] -2148; [36, 05, 0B] -D835 DC22; [36, 05, 0B] -D835 DC56; [36, 05, 0B] -D835 DC8A; [36, 05, 0B] -D835 DCBE; [36, 05, 0B] -D835 DCF2; [36, 05, 0B] -D835 DD26; [36, 05, 0B] -D835 DD5A; [36, 05, 0B] -D835 DD8E; [36, 05, 0B] -D835 DDC2; [36, 05, 0B] -D835 DDF6; [36, 05, 0B] -D835 DE2A; [36, 05, 0B] -D835 DE5E; [36, 05, 0B] -D835 DE92; [36, 05, 0B] -24D8; [36, 05, 0D] -0049; [36, 05, 8F] -FF29; [36, 05, 91] -2160; [36, 05, 93] -2110; [36, 05, 95] -2111; [36, 05, 95] -D835 DC08; [36, 05, 95] -D835 DC3C; [36, 05, 95] -D835 DC70; [36, 05, 95] -D835 DCD8; [36, 05, 95] -D835 DD40; [36, 05, 95] -D835 DD74; [36, 05, 95] -D835 DDA8; [36, 05, 95] -D835 DDDC; [36, 05, 95] -D835 DE10; [36, 05, 95] -D835 DE44; [36, 05, 95] -D835 DE78; [36, 05, 95] -24BE; [36, 05, 97] -1D35; [36, 05, 27] -2071; [36, 05, 27] -1D62; [36, 05, 29] -00ED; [36, 05, 05][, 8D, 05] -00CD; [36, 05, 8F][, 8D, 05] -00EC; [36, 05, 05][, 8F, 05] -00CC; [36, 05, 8F][, 8F, 05] -012D; [36, 05, 05][, 91, 05] -012C; [36, 05, 8F][, 91, 05] -00EE; [36, 05, 05][, 93, 05] -00CE; [36, 05, 8F][, 93, 05] -01D0; [36, 05, 05][, 97, 05] -01CF; [36, 05, 8F][, 97, 05] -00EF; [36, 05, 05][, 9D, 05] -00CF; [36, 05, 8F][, 9D, 05] -1E2F; [36, 05, 05][, 9D, 05][, 8D, 05] -1E2E; [36, 05, 8F][, 9D, 05][, 8D, 05] -0129; [36, 05, 05][, A1, 05] -0128; [36, 05, 8F][, A1, 05] -0130; [36, 05, 8F][, A3, 05] -012F; [36, 05, 05][, A9, 05] -012E; [36, 05, 8F][, A9, 05] -012B; [36, 05, 05][, AB, 05] -012A; [36, 05, 8F][, AB, 05] -1EC9; [36, 05, 05][, AF, 05] -1EC8; [36, 05, 8F][, AF, 05] -0209; [36, 05, 05][, B5, 05] -0208; [36, 05, 8F][, B5, 05] -020B; [36, 05, 05][, B9, 05] -020A; [36, 05, 8F][, B9, 05] -1ECB; [36, 05, 05][, D0 4D, 05] -1ECA; [36, 05, 8F][, D0 4D, 05] -1E2D; [36, 05, 05][, D0 FD, 05] -1E2C; [36, 05, 8F][, D0 FD, 05] -2171; [36, 05, 09][36, 05, 09] -2161; [36, 05, 93][36, 05, 93] -2172; [36, 05, 09][36, 05, 09][36, 05, 3D] -2162; [36, 05, 93][36, 05, 93][36, 05, 3D] -0133; [36, 05, 09][38, 05, 09] -0132; [36, 05, 93][38, 05, 93] -33CC; [36, 05, 37][40, 05, 37] -337A; [36, 05, B9][4E, 05, B9] -2173; [36, 05, 09][50, 05, 09] -2163; [36, 05, 93][50, 05, 93] -2178; [36, 05, 09][54, 05, 09] -2168; [36, 05, 93][54, 05, 93] - -0131; [37 60, 05, 05] - -026A; [37 62, 05, 05] - -1D09; [37 64, 05, 05] -1D4E; [37 64, 05, 27] - -0268; [37 66, 05, 05] -0197; [37 66, 05, 8F] - -0269; [37 68, 05, 05] -0196; [37 68, 05, 8F] - -006A; [38, 05, 05] -FF4A; [38, 05, 07] -2149; [38, 05, 0B] -D835 DC23; [38, 05, 0B] -D835 DC57; [38, 05, 0B] -D835 DC8B; [38, 05, 0B] -D835 DCBF; [38, 05, 0B] -D835 DCF3; [38, 05, 0B] -D835 DD27; [38, 05, 0B] -D835 DD5B; [38, 05, 0B] -D835 DD8F; [38, 05, 0B] -D835 DDC3; [38, 05, 0B] -D835 DDF7; [38, 05, 0B] -D835 DE2B; [38, 05, 0B] -D835 DE5F; [38, 05, 0B] -D835 DE93; [38, 05, 0B] -24D9; [38, 05, 0D] -004A; [38, 05, 8F] -FF2A; [38, 05, 91] -D835 DC09; [38, 05, 95] -D835 DC3D; [38, 05, 95] -D835 DC71; [38, 05, 95] -D835 DCA5; [38, 05, 95] -D835 DCD9; [38, 05, 95] -D835 DD0D; [38, 05, 95] -D835 DD41; [38, 05, 95] -D835 DD75; [38, 05, 95] -D835 DDA9; [38, 05, 95] -D835 DDDD; [38, 05, 95] -D835 DE11; [38, 05, 95] -D835 DE45; [38, 05, 95] -D835 DE79; [38, 05, 95] -24BF; [38, 05, 97] -02B2; [38, 05, 27] -1D36; [38, 05, 27] -0135; [38, 05, 05][, 93, 05] -0134; [38, 05, 8F][, 93, 05] -01F0; [38, 05, 05][, 97, 05] - -1D0A; [39 60, 05, 05] - -029D; [39 62, 05, 05] - -025F; [39 64, 05, 05] - -0284; [39 66, 05, 05] - -006B; [3A, 05, 05] -FF4B; [3A, 05, 07] -D835 DC24; [3A, 05, 0B] -D835 DC58; [3A, 05, 0B] -D835 DC8C; [3A, 05, 0B] -D835 DCC0; [3A, 05, 0B] -D835 DCF4; [3A, 05, 0B] -D835 DD28; [3A, 05, 0B] -D835 DD5C; [3A, 05, 0B] -D835 DD90; [3A, 05, 0B] -D835 DDC4; [3A, 05, 0B] -D835 DDF8; [3A, 05, 0B] -D835 DE2C; [3A, 05, 0B] -D835 DE60; [3A, 05, 0B] -D835 DE94; [3A, 05, 0B] -24DA; [3A, 05, 0D] -004B; [3A, 05, 8F] -212A; [3A, 05, 8F] -FF2B; [3A, 05, 91] -D835 DC0A; [3A, 05, 95] -D835 DC3E; [3A, 05, 95] -D835 DC72; [3A, 05, 95] -D835 DCA6; [3A, 05, 95] -D835 DCDA; [3A, 05, 95] -D835 DD0E; [3A, 05, 95] -D835 DD42; [3A, 05, 95] -D835 DD76; [3A, 05, 95] -D835 DDAA; [3A, 05, 95] -D835 DDDE; [3A, 05, 95] -D835 DE12; [3A, 05, 95] -D835 DE46; [3A, 05, 95] -D835 DE7A; [3A, 05, 95] -24C0; [3A, 05, 97] -1D37; [3A, 05, 27] -1D4F; [3A, 05, 27] -1E31; [3A, 05, 05][, 8D, 05] -1E30; [3A, 05, 8F][, 8D, 05] -01E9; [3A, 05, 05][, 97, 05] -01E8; [3A, 05, 8F][, 97, 05] -0137; [3A, 05, 05][, A7, 05] -0136; [3A, 05, 8F][, A7, 05] -1E33; [3A, 05, 05][, D0 4D, 05] -1E32; [3A, 05, 8F][, D0 4D, 05] -1E35; [3A, 05, 05][, D1 11, 05] -1E34; [3A, 05, 8F][, D1 11, 05] -3384; [3A, 05, 37][26, 05, B9] -3385; [3A, 05, B9][28, 05, B9] -3389; [3A, 05, 37][2A, 05, 37][26, 05, 3D][3C, 05, 3D] -338F; [3A, 05, 37][32, 05, 37] -3391; [3A, 05, 37][34, 05, B9][58, 05, 3D] -33CD; [3A, 05, B9][3A, 05, B9] -3398; [3A, 05, 37][3C, 05, 37] -339E; [3A, 05, 37][3E, 05, 37] -33CE; [3A, 05, B9][3E, 05, B9] -33A2; [3A, 05, 37][3E, 05, 37][23 74, 05, 3D] -33A6; [3A, 05, 37][3E, 05, 37][23 76, 05, 3D] -33AA; [3A, 05, 37][44, 05, B9][26, 05, 3D] -33CF; [3A, 05, 37][4C, 05, 37] -33B8; [3A, 05, 37][50, 05, B9] -33BE; [3A, 05, 37][52, 05, B9] -33C0; [3A, 05, 37][5A 62, 05, B9] - -1D0B; [3B 60, 05, 05] - -0199; [3B 62, 05, 05] -0198; [3B 62, 05, 8F] - -029E; [3B 64, 05, 05] - -006C; [3C, 05, 05] -FF4C; [3C, 05, 07] -217C; [3C, 05, 09] -2113; [3C, 05, 0B] -D835 DC25; [3C, 05, 0B] -D835 DC59; [3C, 05, 0B] -D835 DC8D; [3C, 05, 0B] -D835 DCC1; [3C, 05, 0B] -D835 DCF5; [3C, 05, 0B] -D835 DD29; [3C, 05, 0B] -D835 DD5D; [3C, 05, 0B] -D835 DD91; [3C, 05, 0B] -D835 DDC5; [3C, 05, 0B] -D835 DDF9; [3C, 05, 0B] -D835 DE2D; [3C, 05, 0B] -D835 DE61; [3C, 05, 0B] -D835 DE95; [3C, 05, 0B] -24DB; [3C, 05, 0D] -004C; [3C, 05, 8F] -FF2C; [3C, 05, 91] -216C; [3C, 05, 93] -2112; [3C, 05, 95] -D835 DC0B; [3C, 05, 95] -D835 DC3F; [3C, 05, 95] -D835 DC73; [3C, 05, 95] -D835 DCDB; [3C, 05, 95] -D835 DD0F; [3C, 05, 95] -D835 DD43; [3C, 05, 95] -D835 DD77; [3C, 05, 95] -D835 DDAB; [3C, 05, 95] -D835 DDDF; [3C, 05, 95] -D835 DE13; [3C, 05, 95] -D835 DE47; [3C, 05, 95] -D835 DE7B; [3C, 05, 95] -24C1; [3C, 05, 97] -02E1; [3C, 05, 27] -1D38; [3C, 05, 27] -013A; [3C, 05, 05][, 8D, 05] -0139; [3C, 05, 8F][, 8D, 05] -013E; [3C, 05, 05][, 97, 05] -013D; [3C, 05, 8F][, 97, 05] -013C; [3C, 05, 05][, A7, 05] -013B; [3C, 05, 8F][, A7, 05] -1E37; [3C, 05, 05][, D0 4D, 05] -1E36; [3C, 05, 8F][, D0 4D, 05] -1E39; [3C, 05, 05][, D0 4D, 05][, AB, 05] -1E38; [3C, 05, 8F][, D0 4D, 05][, AB, 05] -1E3D; [3C, 05, 05][, D0 CD, 05] -1E3C; [3C, 05, 8F][, D0 CD, 05] -1E3B; [3C, 05, 05][, D1 11, 05] -1E3A; [3C, 05, 8F][, D1 11, 05] -0140; [3C, 05, 09][08 1F, 05, 09] -013F; [3C, 05, 93][08 1F, 05, 09] -01C9; [3C, 05, 09][38, 05, 09] -01C8; [3C, 05, 93][38, 05, 09] -01C7; [3C, 05, 93][38, 05, 93] -33D0; [3C, 05, 37][3E, 05, 37] -33D1; [3C, 05, 37][40, 05, 37] -33D2; [3C, 05, 37][42, 05, 37][32, 05, 3D] -02AA; [3C, 05, 09][4A, 05, 09] -32CF; [3C, 05, B9][4C, 05, B9][2C, 05, 3D] -33D3; [3C, 05, 37][54, 05, 37] -02AB; [3C, 05, 09][58, 05, 09] - -029F; [3D 60, 05, 05] - -0142; [3D 62, 05, 05] -0141; [3D 62, 05, 8F] - -1D0C; [3D 64, 05, 05] - -019A; [3D 66, 05, 05] - -026B; [3D 68, 05, 05] - -026C; [3D 6A, 05, 05] - -026D; [3D 6C, 05, 05] - -0234; [3D 6E, 05, 05] - -026E; [3D 70, 05, 05] - -019B; [3D 72, 05, 05] - -028E; [3D 74, 05, 05] - -006D; [3E, 05, 05] -FF4D; [3E, 05, 07] -036B; [3E, 05, 09] -217F; [3E, 05, 09] -D835 DC26; [3E, 05, 0B] -D835 DC5A; [3E, 05, 0B] -D835 DC8E; [3E, 05, 0B] -D835 DCC2; [3E, 05, 0B] -D835 DCF6; [3E, 05, 0B] -D835 DD2A; [3E, 05, 0B] -D835 DD5E; [3E, 05, 0B] -D835 DD92; [3E, 05, 0B] -D835 DDC6; [3E, 05, 0B] -D835 DDFA; [3E, 05, 0B] -D835 DE2E; [3E, 05, 0B] -D835 DE62; [3E, 05, 0B] -D835 DE96; [3E, 05, 0B] -24DC; [3E, 05, 0D] -004D; [3E, 05, 8F] -FF2D; [3E, 05, 91] -216F; [3E, 05, 93] -2133; [3E, 05, 95] -D835 DC0C; [3E, 05, 95] -D835 DC40; [3E, 05, 95] -D835 DC74; [3E, 05, 95] -D835 DCDC; [3E, 05, 95] -D835 DD10; [3E, 05, 95] -D835 DD44; [3E, 05, 95] -D835 DD78; [3E, 05, 95] -D835 DDAC; [3E, 05, 95] -D835 DDE0; [3E, 05, 95] -D835 DE14; [3E, 05, 95] -D835 DE48; [3E, 05, 95] -D835 DE7C; [3E, 05, 95] -24C2; [3E, 05, 97] -1D39; [3E, 05, 27] -1D50; [3E, 05, 27] -1E3F; [3E, 05, 05][, 8D, 05] -1E3E; [3E, 05, 8F][, 8D, 05] -1E41; [3E, 05, 05][, A3, 05] -1E40; [3E, 05, 8F][, A3, 05] -1E43; [3E, 05, 05][, D0 4D, 05] -1E42; [3E, 05, 8F][, D0 4D, 05] -33A7; [3E, 05, 37][0B D1, 05, 37][4A, 05, 3D] -33A8; [3E, 05, 37][0B D1, 05, 37][4A, 05, 3D][23 74, 05, 3D] -33A1; [3E, 05, 37][23 74, 05, 37] -33A5; [3E, 05, 37][23 76, 05, 37] -3383; [3E, 05, 37][26, 05, B9] -33D4; [3E, 05, 37][28, 05, 37] -3386; [3E, 05, B9][28, 05, B9] -338E; [3E, 05, 37][32, 05, 37] -3392; [3E, 05, B9][34, 05, B9][58, 05, 3D] -33D5; [3E, 05, 37][36, 05, 37][3C, 05, 3D] -3396; [3E, 05, 37][3C, 05, 37] -339C; [3E, 05, 37][3E, 05, 37] -339F; [3E, 05, 37][3E, 05, 37][23 74, 05, 3D] -33A3; [3E, 05, 37][3E, 05, 37][23 76, 05, 3D] -33D6; [3E, 05, 37][42, 05, 37][3C, 05, 3D] -33AB; [3E, 05, B9][44, 05, B9][26, 05, 3D] -33B3; [3E, 05, 37][4A, 05, 37] -33B7; [3E, 05, 37][50, 05, B9] -33B9; [3E, 05, B9][50, 05, B9] -33BD; [3E, 05, 37][52, 05, B9] -33BF; [3E, 05, B9][52, 05, B9] -33C1; [3E, 05, B9][5A 62, 05, B9] - -1D0D; [3F 60, 05, 05] - -0271; [3F 62, 05, 05] - -006E; [40, 05, 05] -FF4E; [40, 05, 07] -D835 DC27; [40, 05, 0B] -D835 DC5B; [40, 05, 0B] -D835 DC8F; [40, 05, 0B] -D835 DCC3; [40, 05, 0B] -D835 DCF7; [40, 05, 0B] -D835 DD2B; [40, 05, 0B] -D835 DD5F; [40, 05, 0B] -D835 DD93; [40, 05, 0B] -D835 DDC7; [40, 05, 0B] -D835 DDFB; [40, 05, 0B] -D835 DE2F; [40, 05, 0B] -D835 DE63; [40, 05, 0B] -D835 DE97; [40, 05, 0B] -24DD; [40, 05, 0D] -004E; [40, 05, 8F] -FF2E; [40, 05, 91] -2115; [40, 05, 95] -D835 DC0D; [40, 05, 95] -D835 DC41; [40, 05, 95] -D835 DC75; [40, 05, 95] -D835 DCA9; [40, 05, 95] -D835 DCDD; [40, 05, 95] -D835 DD11; [40, 05, 95] -D835 DD79; [40, 05, 95] -D835 DDAD; [40, 05, 95] -D835 DDE1; [40, 05, 95] -D835 DE15; [40, 05, 95] -D835 DE49; [40, 05, 95] -D835 DE7D; [40, 05, 95] -24C3; [40, 05, 97] -1D3A; [40, 05, 27] -207F; [40, 05, 27] -0144; [40, 05, 05][, 8D, 05] -0143; [40, 05, 8F][, 8D, 05] -01F9; [40, 05, 05][, 8F, 05] -01F8; [40, 05, 8F][, 8F, 05] -0148; [40, 05, 05][, 97, 05] -0147; [40, 05, 8F][, 97, 05] -00F1; [40, 05, 05][, A1, 05] -00D1; [40, 05, 8F][, A1, 05] -1E45; [40, 05, 05][, A3, 05] -1E44; [40, 05, 8F][, A3, 05] -0146; [40, 05, 05][, A7, 05] -0145; [40, 05, 8F][, A7, 05] -1E47; [40, 05, 05][, D0 4D, 05] -1E46; [40, 05, 8F][, D0 4D, 05] -1E4B; [40, 05, 05][, D0 CD, 05] -1E4A; [40, 05, 8F][, D0 CD, 05] -1E49; [40, 05, 05][, D1 11, 05] -1E48; [40, 05, 8F][, D1 11, 05] -3381; [40, 05, 37][26, 05, B9] -338B; [40, 05, 37][30, 05, B9] -01CC; [40, 05, 09][38, 05, 09] -01CB; [40, 05, 93][38, 05, 09] -01CA; [40, 05, 93][38, 05, 93] -339A; [40, 05, 37][3E, 05, 37] -2116; [40, 05, 93][42, 05, 09] -33B1; [40, 05, 37][4A, 05, 37] -33B5; [40, 05, 37][50, 05, B9] -33BB; [40, 05, 37][52, 05, B9] - -0274; [41 60, 05, 05] - -1D3B; [41 62, 05, 05] - -1D0E; [41 64, 05, 05] - -0272; [41 66, 05, 05] -019D; [41 66, 05, 8F] - -019E; [41 68, 05, 05] -0220; [41 68, 05, 8F] - -0273; [41 6A, 05, 05] - -0235; [41 6C, 05, 05] - -014B; [41 6E, 05, 05] -014A; [41 6E, 05, 8F] -1D51; [41 6E, 05, 27] - -006F; [42, 05, 05] -FF4F; [42, 05, 07] -0366; [42, 05, 09] -2134; [42, 05, 0B] -D835 DC28; [42, 05, 0B] -D835 DC5C; [42, 05, 0B] -D835 DC90; [42, 05, 0B] -D835 DCF8; [42, 05, 0B] -D835 DD2C; [42, 05, 0B] -D835 DD60; [42, 05, 0B] -D835 DD94; [42, 05, 0B] -D835 DDC8; [42, 05, 0B] -D835 DDFC; [42, 05, 0B] -D835 DE30; [42, 05, 0B] -D835 DE64; [42, 05, 0B] -D835 DE98; [42, 05, 0B] -24DE; [42, 05, 0D] -004F; [42, 05, 8F] -FF2F; [42, 05, 91] -D835 DC0E; [42, 05, 95] -D835 DC42; [42, 05, 95] -D835 DC76; [42, 05, 95] -D835 DCAA; [42, 05, 95] -D835 DCDE; [42, 05, 95] -D835 DD12; [42, 05, 95] -D835 DD46; [42, 05, 95] -D835 DD7A; [42, 05, 95] -D835 DDAE; [42, 05, 95] -D835 DDE2; [42, 05, 95] -D835 DE16; [42, 05, 95] -D835 DE4A; [42, 05, 95] -D835 DE7E; [42, 05, 95] -24C4; [42, 05, 97] -00BA; [42, 05, 27] -1D3C; [42, 05, 27] -1D52; [42, 05, 27] -00F3; [42, 05, 05][, 8D, 05] -00D3; [42, 05, 8F][, 8D, 05] -00F2; [42, 05, 05][, 8F, 05] -00D2; [42, 05, 8F][, 8F, 05] -014F; [42, 05, 05][, 91, 05] -014E; [42, 05, 8F][, 91, 05] -00F4; [42, 05, 05][, 93, 05] -00D4; [42, 05, 8F][, 93, 05] -1ED1; [42, 05, 05][, 93, 05][, 8D, 05] -1ED0; [42, 05, 8F][, 93, 05][, 8D, 05] -1ED3; [42, 05, 05][, 93, 05][, 8F, 05] -1ED2; [42, 05, 8F][, 93, 05][, 8F, 05] -1ED7; [42, 05, 05][, 93, 05][, A1, 05] -1ED6; [42, 05, 8F][, 93, 05][, A1, 05] -1ED5; [42, 05, 05][, 93, 05][, AF, 05] -1ED4; [42, 05, 8F][, 93, 05][, AF, 05] -01D2; [42, 05, 05][, 97, 05] -01D1; [42, 05, 8F][, 97, 05] -00F6; [42, 05, 05][, 9D, 05] -00D6; [42, 05, 8F][, 9D, 05] -022B; [42, 05, 05][, 9D, 05][, AB, 05] -022A; [42, 05, 8F][, 9D, 05][, AB, 05] -0151; [42, 05, 05][, 9F, 05] -0150; [42, 05, 8F][, 9F, 05] -00F5; [42, 05, 05][, A1, 05] -00D5; [42, 05, 8F][, A1, 05] -1E4D; [42, 05, 05][, A1, 05][, 8D, 05] -1E4C; [42, 05, 8F][, A1, 05][, 8D, 05] -1E4F; [42, 05, 05][, A1, 05][, 9D, 05] -1E4E; [42, 05, 8F][, A1, 05][, 9D, 05] -022D; [42, 05, 05][, A1, 05][, AB, 05] -022C; [42, 05, 8F][, A1, 05][, AB, 05] -022F; [42, 05, 05][, A3, 05] -022E; [42, 05, 8F][, A3, 05] -0231; [42, 05, 05][, A3, 05][, AB, 05] -0230; [42, 05, 8F][, A3, 05][, AB, 05] -01EB; [42, 05, 05][, A9, 05] -01EA; [42, 05, 8F][, A9, 05] -01ED; [42, 05, 05][, A9, 05][, AB, 05] -01EC; [42, 05, 8F][, A9, 05][, AB, 05] -014D; [42, 05, 05][, AB, 05] -014C; [42, 05, 8F][, AB, 05] -1E53; [42, 05, 05][, AB, 05][, 8D, 05] -1E52; [42, 05, 8F][, AB, 05][, 8D, 05] -1E51; [42, 05, 05][, AB, 05][, 8F, 05] -1E50; [42, 05, 8F][, AB, 05][, 8F, 05] -1ECF; [42, 05, 05][, AF, 05] -1ECE; [42, 05, 8F][, AF, 05] -020D; [42, 05, 05][, B5, 05] -020C; [42, 05, 8F][, B5, 05] -020F; [42, 05, 05][, B9, 05] -020E; [42, 05, 8F][, B9, 05] -01A1; [42, 05, 05][, C9, 05] -01A0; [42, 05, 8F][, C9, 05] -1EDB; [42, 05, 05][, C9, 05][, 8D, 05] -1EDA; [42, 05, 8F][, C9, 05][, 8D, 05] -1EDD; [42, 05, 05][, C9, 05][, 8F, 05] -1EDC; [42, 05, 8F][, C9, 05][, 8F, 05] -1EE1; [42, 05, 05][, C9, 05][, A1, 05] -1EE0; [42, 05, 8F][, C9, 05][, A1, 05] -1EDF; [42, 05, 05][, C9, 05][, AF, 05] -1EDE; [42, 05, 8F][, C9, 05][, AF, 05] -1EE3; [42, 05, 05][, C9, 05][, D0 4D, 05] -1EE2; [42, 05, 8F][, C9, 05][, D0 4D, 05] -1ECD; [42, 05, 05][, D0 4D, 05] -1ECC; [42, 05, 8F][, D0 4D, 05] -1ED9; [42, 05, 05][, D0 4D, 05][, 93, 05] -1ED8; [42, 05, 8F][, D0 4D, 05][, 93, 05] -0153; [42, 05, 09][, E0 8D, 09][2E, 05, 3D] -0152; [42, 05, 93][, E0 8D, 09][2E, 05, 3D] -3375; [42, 05, 37][50, 05, B9] - -1D0F; [43 60, 05, 05] - -1D11; [43 62, 05, 05] - -0276; [43 64, 05, 05] - -1D14; [43 66, 05, 05] - -00F8; [43 68, 05, 05] -00D8; [43 68, 05, 8F] -01FF; [43 68, 05, 05][, 8D, 05] -01FE; [43 68, 05, 8F][, 8D, 05] - -1D13; [43 6A, 05, 05] - -0254; [43 6C, 05, 05] -0186; [43 6C, 05, 8F] -1D53; [43 6C, 05, 27] - -1D10; [43 6E, 05, 05] - -1D12; [43 70, 05, 05] - -1D16; [43 72, 05, 05] -1D54; [43 72, 05, 27] - -1D17; [43 74, 05, 05] -1D55; [43 74, 05, 27] - -0275; [43 76, 05, 05] -019F; [43 76, 05, 8F] - -0277; [43 78, 05, 05] - -0223; [43 7A, 05, 05] -0222; [43 7A, 05, 8F] -1D3D; [43 7A, 05, 27] - -1D15; [43 7C, 05, 05] - -0070; [44, 05, 05] -FF50; [44, 05, 07] -D835 DC29; [44, 05, 0B] -D835 DC5D; [44, 05, 0B] -D835 DC91; [44, 05, 0B] -D835 DCC5; [44, 05, 0B] -D835 DCF9; [44, 05, 0B] -D835 DD2D; [44, 05, 0B] -D835 DD61; [44, 05, 0B] -D835 DD95; [44, 05, 0B] -D835 DDC9; [44, 05, 0B] -D835 DDFD; [44, 05, 0B] -D835 DE31; [44, 05, 0B] -D835 DE65; [44, 05, 0B] -D835 DE99; [44, 05, 0B] -24DF; [44, 05, 0D] -0050; [44, 05, 8F] -FF30; [44, 05, 91] -2119; [44, 05, 95] -D835 DC0F; [44, 05, 95] -D835 DC43; [44, 05, 95] -D835 DC77; [44, 05, 95] -D835 DCAB; [44, 05, 95] -D835 DCDF; [44, 05, 95] -D835 DD13; [44, 05, 95] -D835 DD7B; [44, 05, 95] -D835 DDAF; [44, 05, 95] -D835 DDE3; [44, 05, 95] -D835 DE17; [44, 05, 95] -D835 DE4B; [44, 05, 95] -D835 DE7F; [44, 05, 95] -24C5; [44, 05, 97] -1D3E; [44, 05, 27] -1D56; [44, 05, 27] -1E55; [44, 05, 05][, 8D, 05] -1E54; [44, 05, 8F][, 8D, 05] -1E57; [44, 05, 05][, A3, 05] -1E56; [44, 05, 8F][, A3, 05] -33D8; [44, 05, 37][08 0B, 05, 37][3E, 05, 3D][08 0B, 05, 3D] -3380; [44, 05, 37][26, 05, B9] -33A9; [44, 05, B9][26, 05, 37] -3376; [44, 05, 37][2A, 05, 37] -338A; [44, 05, 37][30, 05, B9] -33D7; [44, 05, B9][34, 05, B9] -33D9; [44, 05, B9][44, 05, B9][3E, 05, 3D] -33DA; [44, 05, B9][48, 05, B9] -33B0; [44, 05, 37][4A, 05, 37] -3250; [44, 05, B9][4C, 05, B9][2E, 05, 3D] -33B4; [44, 05, 37][50, 05, B9] -33BA; [44, 05, 37][52, 05, B9] - -1D18; [45 60, 05, 05] - -01A5; [45 62, 05, 05] -01A4; [45 62, 05, 8F] - -0278; [45 64, 05, 05] - -0071; [46, 05, 05] -FF51; [46, 05, 07] -D835 DC2A; [46, 05, 0B] -D835 DC5E; [46, 05, 0B] -D835 DC92; [46, 05, 0B] -D835 DCC6; [46, 05, 0B] -D835 DCFA; [46, 05, 0B] -D835 DD2E; [46, 05, 0B] -D835 DD62; [46, 05, 0B] -D835 DD96; [46, 05, 0B] -D835 DDCA; [46, 05, 0B] -D835 DDFE; [46, 05, 0B] -D835 DE32; [46, 05, 0B] -D835 DE66; [46, 05, 0B] -D835 DE9A; [46, 05, 0B] -24E0; [46, 05, 0D] -0051; [46, 05, 8F] -FF31; [46, 05, 91] -211A; [46, 05, 95] -D835 DC10; [46, 05, 95] -D835 DC44; [46, 05, 95] -D835 DC78; [46, 05, 95] -D835 DCAC; [46, 05, 95] -D835 DCE0; [46, 05, 95] -D835 DD14; [46, 05, 95] -D835 DD7C; [46, 05, 95] -D835 DDB0; [46, 05, 95] -D835 DDE4; [46, 05, 95] -D835 DE18; [46, 05, 95] -D835 DE4C; [46, 05, 95] -D835 DE80; [46, 05, 95] -24C6; [46, 05, 97] - -02A0; [47 60, 05, 05] - -0138; [47 62, 05, 05] - -0072; [48, 05, 05] -FF52; [48, 05, 07] -036C; [48, 05, 09] -D835 DC2B; [48, 05, 0B] -D835 DC5F; [48, 05, 0B] -D835 DC93; [48, 05, 0B] -D835 DCC7; [48, 05, 0B] -D835 DCFB; [48, 05, 0B] -D835 DD2F; [48, 05, 0B] -D835 DD63; [48, 05, 0B] -D835 DD97; [48, 05, 0B] -D835 DDCB; [48, 05, 0B] -D835 DDFF; [48, 05, 0B] -D835 DE33; [48, 05, 0B] -D835 DE67; [48, 05, 0B] -D835 DE9B; [48, 05, 0B] -24E1; [48, 05, 0D] -0052; [48, 05, 8F] -FF32; [48, 05, 91] -211B; [48, 05, 95] -211C; [48, 05, 95] -211D; [48, 05, 95] -D835 DC11; [48, 05, 95] -D835 DC45; [48, 05, 95] -D835 DC79; [48, 05, 95] -D835 DCE1; [48, 05, 95] -D835 DD7D; [48, 05, 95] -D835 DDB1; [48, 05, 95] -D835 DDE5; [48, 05, 95] -D835 DE19; [48, 05, 95] -D835 DE4D; [48, 05, 95] -D835 DE81; [48, 05, 95] -24C7; [48, 05, 97] -02B3; [48, 05, 27] -1D3F; [48, 05, 27] -1D63; [48, 05, 29] -0155; [48, 05, 05][, 8D, 05] -0154; [48, 05, 8F][, 8D, 05] -0159; [48, 05, 05][, 97, 05] -0158; [48, 05, 8F][, 97, 05] -1E59; [48, 05, 05][, A3, 05] -1E58; [48, 05, 8F][, A3, 05] -0157; [48, 05, 05][, A7, 05] -0156; [48, 05, 8F][, A7, 05] -0211; [48, 05, 05][, B5, 05] -0210; [48, 05, 8F][, B5, 05] -0213; [48, 05, 05][, B9, 05] -0212; [48, 05, 8F][, B9, 05] -1E5B; [48, 05, 05][, D0 4D, 05] -1E5A; [48, 05, 8F][, D0 4D, 05] -1E5D; [48, 05, 05][, D0 4D, 05][, AB, 05] -1E5C; [48, 05, 8F][, D0 4D, 05][, AB, 05] -1E5F; [48, 05, 05][, D1 11, 05] -1E5E; [48, 05, 8F][, D1 11, 05] -33AD; [48, 05, 37][26, 05, 37][2C, 05, 3D] -33AE; [48, 05, 37][26, 05, 37][2C, 05, 3D][0B D1, 05, 3D][4A, 05, 3D] -33AF; [48, 05, 37][26, 05, 37][2C, 05, 3D][0B D1, 05, 3D][4A, 05, 3D][23 74, 05, 3D] -20A8; [48, 05, 93][4A, 05, 09] - -0280; [49 60, 05, 05] -01A6; [49 60, 05, 8F] - -1D19; [49 62, 05, 05] - -0279; [49 64, 05, 05] -02B4; [49 64, 05, 27] - -1D1A; [49 66, 05, 05] - -027A; [49 68, 05, 05] - -027B; [49 6A, 05, 05] -02B5; [49 6A, 05, 27] - -027C; [49 6C, 05, 05] - -027D; [49 6E, 05, 05] - -027E; [49 70, 05, 05] - -027F; [49 72, 05, 05] - -0281; [49 74, 05, 05] -02B6; [49 74, 05, 27] - -0073; [4A, 05, 05] -FF53; [4A, 05, 07] -D835 DC2C; [4A, 05, 0B] -D835 DC60; [4A, 05, 0B] -D835 DC94; [4A, 05, 0B] -D835 DCC8; [4A, 05, 0B] -D835 DCFC; [4A, 05, 0B] -D835 DD30; [4A, 05, 0B] -D835 DD64; [4A, 05, 0B] -D835 DD98; [4A, 05, 0B] -D835 DDCC; [4A, 05, 0B] -D835 DE00; [4A, 05, 0B] -D835 DE34; [4A, 05, 0B] -D835 DE68; [4A, 05, 0B] -D835 DE9C; [4A, 05, 0B] -24E2; [4A, 05, 0D] -0053; [4A, 05, 8F] -FF33; [4A, 05, 91] -D835 DC12; [4A, 05, 95] -D835 DC46; [4A, 05, 95] -D835 DC7A; [4A, 05, 95] -D835 DCAE; [4A, 05, 95] -D835 DCE2; [4A, 05, 95] -D835 DD16; [4A, 05, 95] -D835 DD4A; [4A, 05, 95] -D835 DD7E; [4A, 05, 95] -D835 DDB2; [4A, 05, 95] -D835 DDE6; [4A, 05, 95] -D835 DE1A; [4A, 05, 95] -D835 DE4E; [4A, 05, 95] -D835 DE82; [4A, 05, 95] -24C8; [4A, 05, 97] -02E2; [4A, 05, 27] -015B; [4A, 05, 05][, 8D, 05] -015A; [4A, 05, 8F][, 8D, 05] -1E65; [4A, 05, 05][, 8D, 05][, A3, 05] -1E64; [4A, 05, 8F][, 8D, 05][, A3, 05] -015D; [4A, 05, 05][, 93, 05] -015C; [4A, 05, 8F][, 93, 05] -0161; [4A, 05, 05][, 97, 05] -0160; [4A, 05, 8F][, 97, 05] -1E67; [4A, 05, 05][, 97, 05][, A3, 05] -1E66; [4A, 05, 8F][, 97, 05][, A3, 05] -1E61; [4A, 05, 05][, A3, 05] -1E60; [4A, 05, 8F][, A3, 05] -015F; [4A, 05, 05][, A7, 05] -015E; [4A, 05, 8F][, A7, 05] -1E63; [4A, 05, 05][, D0 4D, 05] -1E62; [4A, 05, 8F][, D0 4D, 05] -1E69; [4A, 05, 05][, D0 4D, 05][, A3, 05] -1E68; [4A, 05, 8F][, D0 4D, 05][, A3, 05] -0219; [4A, 05, 05][, D0 7D, 05] -0218; [4A, 05, 8F][, D0 7D, 05] -017F; [4A, 05, 09][, E0 9D, 09] -1E9B; [4A, 05, 09][, E0 9D, 09][, A3, 05] -2120; [4A, 05, 27][3E, 05, 27] -33DB; [4A, 05, 37][48, 05, 37] -00DF; [4A, 05, 09][, E0 8D, 09][4A, 05, 3D] -FB06; [4A, 05, 09][4C, 05, 09] -FB05; [4A, 05, 09][, E0 9D, 09][4C, 05, 3D] -33DC; [4A, 05, B9][50, 05, 37] - -0282; [4B 60, 05, 05] - -0283; [4B 62, 05, 05] -01A9; [4B 62, 05, 8F] - -01AA; [4B 64, 05, 05] - -0285; [4B 66, 05, 05] - -0286; [4B 68, 05, 05] - -0074; [4C, 05, 05] -FF54; [4C, 05, 07] -036D; [4C, 05, 09] -D835 DC2D; [4C, 05, 0B] -D835 DC61; [4C, 05, 0B] -D835 DC95; [4C, 05, 0B] -D835 DCC9; [4C, 05, 0B] -D835 DCFD; [4C, 05, 0B] -D835 DD31; [4C, 05, 0B] -D835 DD65; [4C, 05, 0B] -D835 DD99; [4C, 05, 0B] -D835 DDCD; [4C, 05, 0B] -D835 DE01; [4C, 05, 0B] -D835 DE35; [4C, 05, 0B] -D835 DE69; [4C, 05, 0B] -D835 DE9D; [4C, 05, 0B] -24E3; [4C, 05, 0D] -0054; [4C, 05, 8F] -FF34; [4C, 05, 91] -D835 DC13; [4C, 05, 95] -D835 DC47; [4C, 05, 95] -D835 DC7B; [4C, 05, 95] -D835 DCAF; [4C, 05, 95] -D835 DCE3; [4C, 05, 95] -D835 DD17; [4C, 05, 95] -D835 DD4B; [4C, 05, 95] -D835 DD7F; [4C, 05, 95] -D835 DDB3; [4C, 05, 95] -D835 DDE7; [4C, 05, 95] -D835 DE1B; [4C, 05, 95] -D835 DE4F; [4C, 05, 95] -D835 DE83; [4C, 05, 95] -24C9; [4C, 05, 97] -1D40; [4C, 05, 27] -1D57; [4C, 05, 27] -0165; [4C, 05, 05][, 97, 05] -0164; [4C, 05, 8F][, 97, 05] -1E97; [4C, 05, 05][, 9D, 05] -1E6B; [4C, 05, 05][, A3, 05] -1E6A; [4C, 05, 8F][, A3, 05] -0163; [4C, 05, 05][, A7, 05] -0162; [4C, 05, 8F][, A7, 05] -1E6D; [4C, 05, 05][, D0 4D, 05] -1E6C; [4C, 05, 8F][, D0 4D, 05] -021B; [4C, 05, 05][, D0 7D, 05] -021A; [4C, 05, 8F][, D0 7D, 05] -1E71; [4C, 05, 05][, D0 CD, 05] -1E70; [4C, 05, 8F][, D0 CD, 05] -1E6F; [4C, 05, 05][, D1 11, 05] -1E6E; [4C, 05, 8F][, D1 11, 05] -02A8; [4C, 05, 09][2B 64, 05, 09] -2121; [4C, 05, 93][2E, 05, 93][3C, 05, 3D] -3394; [4C, 05, B9][34, 05, B9][58, 05, 3D] -2122; [4C, 05, 27][3E, 05, 27] -01BE; [4C, 05, 09][4A, 05, 09] -02A6; [4C, 05, 09][4A, 05, 09] -02A7; [4C, 05, 09][4B 62, 05, 09] - -1D1B; [4D 60, 05, 05] - -0167; [4D 62, 05, 05] -0166; [4D 62, 05, 8F] - -01AB; [4D 64, 05, 05] - -01AD; [4D 66, 05, 05] -01AC; [4D 66, 05, 8F] - -0288; [4D 68, 05, 05] -01AE; [4D 68, 05, 8F] - -0236; [4D 6A, 05, 05] - -0287; [4D 6C, 05, 05] - -0075; [4E, 05, 05] -FF55; [4E, 05, 07] -0367; [4E, 05, 09] -D835 DC2E; [4E, 05, 0B] -D835 DC62; [4E, 05, 0B] -D835 DC96; [4E, 05, 0B] -D835 DCCA; [4E, 05, 0B] -D835 DCFE; [4E, 05, 0B] -D835 DD32; [4E, 05, 0B] -D835 DD66; [4E, 05, 0B] -D835 DD9A; [4E, 05, 0B] -D835 DDCE; [4E, 05, 0B] -D835 DE02; [4E, 05, 0B] -D835 DE36; [4E, 05, 0B] -D835 DE6A; [4E, 05, 0B] -D835 DE9E; [4E, 05, 0B] -24E4; [4E, 05, 0D] -0055; [4E, 05, 8F] -FF35; [4E, 05, 91] -D835 DC14; [4E, 05, 95] -D835 DC48; [4E, 05, 95] -D835 DC7C; [4E, 05, 95] -D835 DCB0; [4E, 05, 95] -D835 DCE4; [4E, 05, 95] -D835 DD18; [4E, 05, 95] -D835 DD4C; [4E, 05, 95] -D835 DD80; [4E, 05, 95] -D835 DDB4; [4E, 05, 95] -D835 DDE8; [4E, 05, 95] -D835 DE1C; [4E, 05, 95] -D835 DE50; [4E, 05, 95] -D835 DE84; [4E, 05, 95] -24CA; [4E, 05, 97] -1D41; [4E, 05, 27] -1D58; [4E, 05, 27] -1D64; [4E, 05, 29] -00FA; [4E, 05, 05][, 8D, 05] -00DA; [4E, 05, 8F][, 8D, 05] -00F9; [4E, 05, 05][, 8F, 05] -00D9; [4E, 05, 8F][, 8F, 05] -016D; [4E, 05, 05][, 91, 05] -016C; [4E, 05, 8F][, 91, 05] -00FB; [4E, 05, 05][, 93, 05] -00DB; [4E, 05, 8F][, 93, 05] -01D4; [4E, 05, 05][, 97, 05] -01D3; [4E, 05, 8F][, 97, 05] -016F; [4E, 05, 05][, 99, 05] -016E; [4E, 05, 8F][, 99, 05] -00FC; [4E, 05, 05][, 9D, 05] -00DC; [4E, 05, 8F][, 9D, 05] -01D8; [4E, 05, 05][, 9D, 05][, 8D, 05] -01D7; [4E, 05, 8F][, 9D, 05][, 8D, 05] -01DC; [4E, 05, 05][, 9D, 05][, 8F, 05] -01DB; [4E, 05, 8F][, 9D, 05][, 8F, 05] -01DA; [4E, 05, 05][, 9D, 05][, 97, 05] -01D9; [4E, 05, 8F][, 9D, 05][, 97, 05] -01D6; [4E, 05, 05][, 9D, 05][, AB, 05] -01D5; [4E, 05, 8F][, 9D, 05][, AB, 05] -0171; [4E, 05, 05][, 9F, 05] -0170; [4E, 05, 8F][, 9F, 05] -0169; [4E, 05, 05][, A1, 05] -0168; [4E, 05, 8F][, A1, 05] -1E79; [4E, 05, 05][, A1, 05][, 8D, 05] -1E78; [4E, 05, 8F][, A1, 05][, 8D, 05] -0173; [4E, 05, 05][, A9, 05] -0172; [4E, 05, 8F][, A9, 05] -016B; [4E, 05, 05][, AB, 05] -016A; [4E, 05, 8F][, AB, 05] -1E7B; [4E, 05, 05][, AB, 05][, 9D, 05] -1E7A; [4E, 05, 8F][, AB, 05][, 9D, 05] -1EE7; [4E, 05, 05][, AF, 05] -1EE6; [4E, 05, 8F][, AF, 05] -0215; [4E, 05, 05][, B5, 05] -0214; [4E, 05, 8F][, B5, 05] -0217; [4E, 05, 05][, B9, 05] -0216; [4E, 05, 8F][, B9, 05] -01B0; [4E, 05, 05][, C9, 05] -01AF; [4E, 05, 8F][, C9, 05] -1EE9; [4E, 05, 05][, C9, 05][, 8D, 05] -1EE8; [4E, 05, 8F][, C9, 05][, 8D, 05] -1EEB; [4E, 05, 05][, C9, 05][, 8F, 05] -1EEA; [4E, 05, 8F][, C9, 05][, 8F, 05] -1EEF; [4E, 05, 05][, C9, 05][, A1, 05] -1EEE; [4E, 05, 8F][, C9, 05][, A1, 05] -1EED; [4E, 05, 05][, C9, 05][, AF, 05] -1EEC; [4E, 05, 8F][, C9, 05][, AF, 05] -1EF1; [4E, 05, 05][, C9, 05][, D0 4D, 05] -1EF0; [4E, 05, 8F][, C9, 05][, D0 4D, 05] -1EE5; [4E, 05, 05][, D0 4D, 05] -1EE4; [4E, 05, 8F][, D0 4D, 05] -1E73; [4E, 05, 05][, D0 5D, 05] -1E72; [4E, 05, 8F][, D0 5D, 05] -1E77; [4E, 05, 05][, D0 CD, 05] -1E76; [4E, 05, 8F][, D0 CD, 05] -1E75; [4E, 05, 05][, D0 FD, 05] -1E74; [4E, 05, 8F][, D0 FD, 05] - -1D1C; [4F 60, 05, 05] - -1D1D; [4F 62, 05, 05] -1D59; [4F 62, 05, 27] - -1D1E; [4F 64, 05, 05] - -1D6B; [4F 66, 05, 05] - -0289; [4F 68, 05, 05] - -0265; [4F 6A, 05, 05] - -02AE; [4F 6C, 05, 05] - -02AF; [4F 6E, 05, 05] - -026F; [4F 70, 05, 05] -019C; [4F 70, 05, 8F] -1D5A; [4F 70, 05, 27] - -1D1F; [4F 72, 05, 05] - -0270; [4F 74, 05, 05] - -028A; [4F 76, 05, 05] -01B1; [4F 76, 05, 8F] - -0076; [50, 05, 05] -FF56; [50, 05, 07] -036E; [50, 05, 09] -2174; [50, 05, 09] -D835 DC2F; [50, 05, 0B] -D835 DC63; [50, 05, 0B] -D835 DC97; [50, 05, 0B] -D835 DCCB; [50, 05, 0B] -D835 DCFF; [50, 05, 0B] -D835 DD33; [50, 05, 0B] -D835 DD67; [50, 05, 0B] -D835 DD9B; [50, 05, 0B] -D835 DDCF; [50, 05, 0B] -D835 DE03; [50, 05, 0B] -D835 DE37; [50, 05, 0B] -D835 DE6B; [50, 05, 0B] -D835 DE9F; [50, 05, 0B] -24E5; [50, 05, 0D] -0056; [50, 05, 8F] -FF36; [50, 05, 91] -2164; [50, 05, 93] -D835 DC15; [50, 05, 95] -D835 DC49; [50, 05, 95] -D835 DC7D; [50, 05, 95] -D835 DCB1; [50, 05, 95] -D835 DCE5; [50, 05, 95] -D835 DD19; [50, 05, 95] -D835 DD4D; [50, 05, 95] -D835 DD81; [50, 05, 95] -D835 DDB5; [50, 05, 95] -D835 DDE9; [50, 05, 95] -D835 DE1D; [50, 05, 95] -D835 DE51; [50, 05, 95] -D835 DE85; [50, 05, 95] -24CB; [50, 05, 97] -1D5B; [50, 05, 27] -1D65; [50, 05, 29] -1E7D; [50, 05, 05][, A1, 05] -1E7C; [50, 05, 8F][, A1, 05] -1E7F; [50, 05, 05][, D0 4D, 05] -1E7E; [50, 05, 8F][, D0 4D, 05] -33DE; [50, 05, B9][0B D1, 05, 37][3E, 05, 3D] -2175; [50, 05, 09][36, 05, 09] -2165; [50, 05, 93][36, 05, 93] -2176; [50, 05, 09][36, 05, 09][36, 05, 3D] -2166; [50, 05, 93][36, 05, 93][36, 05, 3D] -2177; [50, 05, 09][36, 05, 09][36, 05, 3D][36, 05, 3D] -2167; [50, 05, 93][36, 05, 93][36, 05, 3D][36, 05, 3D] - -1D20; [51 60, 05, 05] - -028B; [51 62, 05, 05] -01B2; [51 62, 05, 8F] - -028C; [51 64, 05, 05] - -0077; [52, 05, 05] -FF57; [52, 05, 07] -D835 DC30; [52, 05, 0B] -D835 DC64; [52, 05, 0B] -D835 DC98; [52, 05, 0B] -D835 DCCC; [52, 05, 0B] -D835 DD00; [52, 05, 0B] -D835 DD34; [52, 05, 0B] -D835 DD68; [52, 05, 0B] -D835 DD9C; [52, 05, 0B] -D835 DDD0; [52, 05, 0B] -D835 DE04; [52, 05, 0B] -D835 DE38; [52, 05, 0B] -D835 DE6C; [52, 05, 0B] -D835 DEA0; [52, 05, 0B] -24E6; [52, 05, 0D] -0057; [52, 05, 8F] -FF37; [52, 05, 91] -D835 DC16; [52, 05, 95] -D835 DC4A; [52, 05, 95] -D835 DC7E; [52, 05, 95] -D835 DCB2; [52, 05, 95] -D835 DCE6; [52, 05, 95] -D835 DD1A; [52, 05, 95] -D835 DD4E; [52, 05, 95] -D835 DD82; [52, 05, 95] -D835 DDB6; [52, 05, 95] -D835 DDEA; [52, 05, 95] -D835 DE1E; [52, 05, 95] -D835 DE52; [52, 05, 95] -D835 DE86; [52, 05, 95] -24CC; [52, 05, 97] -02B7; [52, 05, 27] -1D42; [52, 05, 27] -1E83; [52, 05, 05][, 8D, 05] -1E82; [52, 05, 8F][, 8D, 05] -1E81; [52, 05, 05][, 8F, 05] -1E80; [52, 05, 8F][, 8F, 05] -0175; [52, 05, 05][, 93, 05] -0174; [52, 05, 8F][, 93, 05] -1E98; [52, 05, 05][, 99, 05] -1E85; [52, 05, 05][, 9D, 05] -1E84; [52, 05, 8F][, 9D, 05] -1E87; [52, 05, 05][, A3, 05] -1E86; [52, 05, 8F][, A3, 05] -1E89; [52, 05, 05][, D0 4D, 05] -1E88; [52, 05, 8F][, D0 4D, 05] -33DD; [52, 05, B9][28, 05, 37] - -1D21; [53 60, 05, 05] - -028D; [53 62, 05, 05] - -0078; [54, 05, 05] -FF58; [54, 05, 07] -036F; [54, 05, 09] -2179; [54, 05, 09] -D835 DC31; [54, 05, 0B] -D835 DC65; [54, 05, 0B] -D835 DC99; [54, 05, 0B] -D835 DCCD; [54, 05, 0B] -D835 DD01; [54, 05, 0B] -D835 DD35; [54, 05, 0B] -D835 DD69; [54, 05, 0B] -D835 DD9D; [54, 05, 0B] -D835 DDD1; [54, 05, 0B] -D835 DE05; [54, 05, 0B] -D835 DE39; [54, 05, 0B] -D835 DE6D; [54, 05, 0B] -D835 DEA1; [54, 05, 0B] -24E7; [54, 05, 0D] -0058; [54, 05, 8F] -FF38; [54, 05, 91] -2169; [54, 05, 93] -D835 DC17; [54, 05, 95] -D835 DC4B; [54, 05, 95] -D835 DC7F; [54, 05, 95] -D835 DCB3; [54, 05, 95] -D835 DCE7; [54, 05, 95] -D835 DD1B; [54, 05, 95] -D835 DD4F; [54, 05, 95] -D835 DD83; [54, 05, 95] -D835 DDB7; [54, 05, 95] -D835 DDEB; [54, 05, 95] -D835 DE1F; [54, 05, 95] -D835 DE53; [54, 05, 95] -D835 DE87; [54, 05, 95] -24CD; [54, 05, 97] -02E3; [54, 05, 27] -1E8D; [54, 05, 05][, 9D, 05] -1E8C; [54, 05, 8F][, 9D, 05] -1E8B; [54, 05, 05][, A3, 05] -1E8A; [54, 05, 8F][, A3, 05] -217A; [54, 05, 09][36, 05, 09] -216A; [54, 05, 93][36, 05, 93] -217B; [54, 05, 09][36, 05, 09][36, 05, 3D] -216B; [54, 05, 93][36, 05, 93][36, 05, 3D] - -0079; [56, 05, 05] -FF59; [56, 05, 07] -D835 DC32; [56, 05, 0B] -D835 DC66; [56, 05, 0B] -D835 DC9A; [56, 05, 0B] -D835 DCCE; [56, 05, 0B] -D835 DD02; [56, 05, 0B] -D835 DD36; [56, 05, 0B] -D835 DD6A; [56, 05, 0B] -D835 DD9E; [56, 05, 0B] -D835 DDD2; [56, 05, 0B] -D835 DE06; [56, 05, 0B] -D835 DE3A; [56, 05, 0B] -D835 DE6E; [56, 05, 0B] -D835 DEA2; [56, 05, 0B] -24E8; [56, 05, 0D] -0059; [56, 05, 8F] -FF39; [56, 05, 91] -D835 DC18; [56, 05, 95] -D835 DC4C; [56, 05, 95] -D835 DC80; [56, 05, 95] -D835 DCB4; [56, 05, 95] -D835 DCE8; [56, 05, 95] -D835 DD1C; [56, 05, 95] -D835 DD50; [56, 05, 95] -D835 DD84; [56, 05, 95] -D835 DDB8; [56, 05, 95] -D835 DDEC; [56, 05, 95] -D835 DE20; [56, 05, 95] -D835 DE54; [56, 05, 95] -D835 DE88; [56, 05, 95] -24CE; [56, 05, 97] -02B8; [56, 05, 27] -00FD; [56, 05, 05][, 8D, 05] -00DD; [56, 05, 8F][, 8D, 05] -1EF3; [56, 05, 05][, 8F, 05] -1EF2; [56, 05, 8F][, 8F, 05] -0177; [56, 05, 05][, 93, 05] -0176; [56, 05, 8F][, 93, 05] -1E99; [56, 05, 05][, 99, 05] -00FF; [56, 05, 05][, 9D, 05] -0178; [56, 05, 8F][, 9D, 05] -1EF9; [56, 05, 05][, A1, 05] -1EF8; [56, 05, 8F][, A1, 05] -1E8F; [56, 05, 05][, A3, 05] -1E8E; [56, 05, 8F][, A3, 05] -0233; [56, 05, 05][, AB, 05] -0232; [56, 05, 8F][, AB, 05] -1EF7; [56, 05, 05][, AF, 05] -1EF6; [56, 05, 8F][, AF, 05] -1EF5; [56, 05, 05][, D0 4D, 05] -1EF4; [56, 05, 8F][, D0 4D, 05] - -028F; [57 60, 05, 05] - -01B4; [57 62, 05, 05] -01B3; [57 62, 05, 8F] - -007A; [58, 05, 05] -FF5A; [58, 05, 07] -D835 DC33; [58, 05, 0B] -D835 DC67; [58, 05, 0B] -D835 DC9B; [58, 05, 0B] -D835 DCCF; [58, 05, 0B] -D835 DD03; [58, 05, 0B] -D835 DD37; [58, 05, 0B] -D835 DD6B; [58, 05, 0B] -D835 DD9F; [58, 05, 0B] -D835 DDD3; [58, 05, 0B] -D835 DE07; [58, 05, 0B] -D835 DE3B; [58, 05, 0B] -D835 DE6F; [58, 05, 0B] -D835 DEA3; [58, 05, 0B] -24E9; [58, 05, 0D] -005A; [58, 05, 8F] -FF3A; [58, 05, 91] -2124; [58, 05, 95] -2128; [58, 05, 95] -D835 DC19; [58, 05, 95] -D835 DC4D; [58, 05, 95] -D835 DC81; [58, 05, 95] -D835 DCB5; [58, 05, 95] -D835 DCE9; [58, 05, 95] -D835 DD85; [58, 05, 95] -D835 DDB9; [58, 05, 95] -D835 DDED; [58, 05, 95] -D835 DE21; [58, 05, 95] -D835 DE55; [58, 05, 95] -D835 DE89; [58, 05, 95] -24CF; [58, 05, 97] -017A; [58, 05, 05][, 8D, 05] -0179; [58, 05, 8F][, 8D, 05] -1E91; [58, 05, 05][, 93, 05] -1E90; [58, 05, 8F][, 93, 05] -017E; [58, 05, 05][, 97, 05] -017D; [58, 05, 8F][, 97, 05] -017C; [58, 05, 05][, A3, 05] -017B; [58, 05, 8F][, A3, 05] -1E93; [58, 05, 05][, D0 4D, 05] -1E92; [58, 05, 8F][, D0 4D, 05] -1E95; [58, 05, 05][, D1 11, 05] -1E94; [58, 05, 8F][, D1 11, 05] -018D; [58, 05, 09][52, 05, 09] - -1D22; [59 60, 05, 05] - -01B6; [59 62, 05, 05] -01B5; [59 62, 05, 8F] - -0225; [59 64, 05, 05] -0224; [59 64, 05, 8F] - -0290; [59 66, 05, 05] - -0291; [59 68, 05, 05] - -0292; [59 6A, 05, 05] -01B7; [59 6A, 05, 8F] -01EF; [59 6A, 05, 05][, 97, 05] -01EE; [59 6A, 05, 8F][, 97, 05] - -1D23; [59 6C, 05, 05] - -01B9; [59 6E, 05, 05] -01B8; [59 6E, 05, 8F] - -01BA; [59 70, 05, 05] - -0293; [59 72, 05, 05] - -021D; [59 74, 05, 05] -021C; [59 74, 05, 8F] - -00FE; [59 76, 05, 05] -00DE; [59 76, 05, 8F] - -01BF; [59 78, 05, 05] -01F7; [59 78, 05, 8F] - -01BB; [59 7A, 05, 05] - -01A8; [59 7C, 05, 05] -01A7; [59 7C, 05, 8F] - -01BD; [59 7E, 05, 05] -01BC; [59 7E, 05, 8F] - -0185; [59 80, 05, 05] -0184; [59 80, 05, 8F] - -0294; [59 82, 05, 05] - -02C0; [59 84, 05, 05] - -02BC; [59 86, 05, 05] -0149; [59 86, 05, 09][40, 05, 09] - -02EE; [59 88, 05, 05] - -02BE; [59 8A, 05, 05] - -0295; [59 8C, 05, 05] -02E4; [59 8C, 05, 27] - -02BF; [59 8E, 05, 05] - -02C1; [59 90, 05, 05] - -1D24; [59 92, 05, 05] - -1D25; [59 94, 05, 05] -1D5C; [59 94, 05, 27] - -02A1; [59 96, 05, 05] - -02A2; [59 98, 05, 05] - -0296; [59 9A, 05, 05] - -01C0; [59 9C, 05, 05] - -01C1; [59 9E, 05, 05] - -01C2; [59 A0, 05, 05] - -01C3; [59 A2, 05, 05] - -0297; [59 A4, 05, 05] - -0298; [59 A6, 05, 05] - -02AC; [59 A8, 05, 05] - -02AD; [59 AA, 05, 05] - -03B1; [5A 20, 05, 05] -D835 DEC2; [5A 20, 05, 0B] -D835 DEFC; [5A 20, 05, 0B] -D835 DF36; [5A 20, 05, 0B] -D835 DF70; [5A 20, 05, 0B] -D835 DFAA; [5A 20, 05, 0B] -0391; [5A 20, 05, 8F] -D835 DEA8; [5A 20, 05, 95] -D835 DEE2; [5A 20, 05, 95] -D835 DF1C; [5A 20, 05, 95] -D835 DF56; [5A 20, 05, 95] -D835 DF90; [5A 20, 05, 95] -1F00; [5A 20, 05, 05][, 89, 05] -1F08; [5A 20, 05, 8F][, 89, 05] -1F04; [5A 20, 05, 05][, 89, 05][, 8D, 05] -1F0C; [5A 20, 05, 8F][, 89, 05][, 8D, 05] -1F84; [5A 20, 05, 05][, 89, 05][, 8D, 05][, D1 E1, 05] -1F8C; [5A 20, 05, 8F][, 89, 05][, 8D, 05][, D1 E1, 05] -1F02; [5A 20, 05, 05][, 89, 05][, 8F, 05] -1F0A; [5A 20, 05, 8F][, 89, 05][, 8F, 05] -1F82; [5A 20, 05, 05][, 89, 05][, 8F, 05][, D1 E1, 05] -1F8A; [5A 20, 05, 8F][, 89, 05][, 8F, 05][, D1 E1, 05] -1F06; [5A 20, 05, 05][, 89, 05][, 9B, 05] -1F0E; [5A 20, 05, 8F][, 89, 05][, 9B, 05] -1F86; [5A 20, 05, 05][, 89, 05][, 9B, 05][, D1 E1, 05] -1F8E; [5A 20, 05, 8F][, 89, 05][, 9B, 05][, D1 E1, 05] -1F80; [5A 20, 05, 05][, 89, 05][, D1 E1, 05] -1F88; [5A 20, 05, 8F][, 89, 05][, D1 E1, 05] -1F01; [5A 20, 05, 05][, 8B, 05] -1F09; [5A 20, 05, 8F][, 8B, 05] -1F05; [5A 20, 05, 05][, 8B, 05][, 8D, 05] -1F0D; [5A 20, 05, 8F][, 8B, 05][, 8D, 05] -1F85; [5A 20, 05, 05][, 8B, 05][, 8D, 05][, D1 E1, 05] -1F8D; [5A 20, 05, 8F][, 8B, 05][, 8D, 05][, D1 E1, 05] -1F03; [5A 20, 05, 05][, 8B, 05][, 8F, 05] -1F0B; [5A 20, 05, 8F][, 8B, 05][, 8F, 05] -1F83; [5A 20, 05, 05][, 8B, 05][, 8F, 05][, D1 E1, 05] -1F8B; [5A 20, 05, 8F][, 8B, 05][, 8F, 05][, D1 E1, 05] -1F07; [5A 20, 05, 05][, 8B, 05][, 9B, 05] -1F0F; [5A 20, 05, 8F][, 8B, 05][, 9B, 05] -1F87; [5A 20, 05, 05][, 8B, 05][, 9B, 05][, D1 E1, 05] -1F8F; [5A 20, 05, 8F][, 8B, 05][, 9B, 05][, D1 E1, 05] -1F81; [5A 20, 05, 05][, 8B, 05][, D1 E1, 05] -1F89; [5A 20, 05, 8F][, 8B, 05][, D1 E1, 05] -03AC; [5A 20, 05, 05][, 8D, 05] -1F71; [5A 20, 05, 05][, 8D, 05] -0386; [5A 20, 05, 8F][, 8D, 05] -1FBB; [5A 20, 05, 8F][, 8D, 05] -1FB4; [5A 20, 05, 05][, 8D, 05][, D1 E1, 05] -1F70; [5A 20, 05, 05][, 8F, 05] -1FBA; [5A 20, 05, 8F][, 8F, 05] -1FB2; [5A 20, 05, 05][, 8F, 05][, D1 E1, 05] -1FB0; [5A 20, 05, 05][, 91, 05] -1FB8; [5A 20, 05, 8F][, 91, 05] -1FB6; [5A 20, 05, 05][, 9B, 05] -1FB7; [5A 20, 05, 05][, 9B, 05][, D1 E1, 05] -1FB1; [5A 20, 05, 05][, AB, 05] -1FB9; [5A 20, 05, 8F][, AB, 05] -1FB3; [5A 20, 05, 05][, D1 E1, 05] -1FBC; [5A 20, 05, 8F][, D1 E1, 05] - -03B2; [5A 22, 05, 05] -03D0; [5A 22, 05, 09] -D835 DEC3; [5A 22, 05, 0B] -D835 DEFD; [5A 22, 05, 0B] -D835 DF37; [5A 22, 05, 0B] -D835 DF71; [5A 22, 05, 0B] -D835 DFAB; [5A 22, 05, 0B] -0392; [5A 22, 05, 8F] -D835 DEA9; [5A 22, 05, 95] -D835 DEE3; [5A 22, 05, 95] -D835 DF1D; [5A 22, 05, 95] -D835 DF57; [5A 22, 05, 95] -D835 DF91; [5A 22, 05, 95] -1D5D; [5A 22, 05, 27] -1D66; [5A 22, 05, 29] - -03B3; [5A 24, 05, 05] -213D; [5A 24, 05, 0B] -D835 DEC4; [5A 24, 05, 0B] -D835 DEFE; [5A 24, 05, 0B] -D835 DF38; [5A 24, 05, 0B] -D835 DF72; [5A 24, 05, 0B] -D835 DFAC; [5A 24, 05, 0B] -0393; [5A 24, 05, 8F] -213E; [5A 24, 05, 95] -D835 DEAA; [5A 24, 05, 95] -D835 DEE4; [5A 24, 05, 95] -D835 DF1E; [5A 24, 05, 95] -D835 DF58; [5A 24, 05, 95] -D835 DF92; [5A 24, 05, 95] -1D5E; [5A 24, 05, 27] -1D67; [5A 24, 05, 29] - -1D26; [5A 26, 05, 05] - -03B4; [5A 28, 05, 05] -D835 DEC5; [5A 28, 05, 0B] -D835 DEFF; [5A 28, 05, 0B] -D835 DF39; [5A 28, 05, 0B] -D835 DF73; [5A 28, 05, 0B] -D835 DFAD; [5A 28, 05, 0B] -0394; [5A 28, 05, 8F] -D835 DEAB; [5A 28, 05, 95] -D835 DEE5; [5A 28, 05, 95] -D835 DF1F; [5A 28, 05, 95] -D835 DF59; [5A 28, 05, 95] -D835 DF93; [5A 28, 05, 95] -1D5F; [5A 28, 05, 27] - -03B5; [5A 2A, 05, 05] -03F5; [5A 2A, 05, 09] -D835 DEC6; [5A 2A, 05, 0B] -D835 DEDC; [5A 2A, 05, 0B] -D835 DF00; [5A 2A, 05, 0B] -D835 DF16; [5A 2A, 05, 0B] -D835 DF3A; [5A 2A, 05, 0B] -D835 DF50; [5A 2A, 05, 0B] -D835 DF74; [5A 2A, 05, 0B] -D835 DF8A; [5A 2A, 05, 0B] -D835 DFAE; [5A 2A, 05, 0B] -D835 DFC4; [5A 2A, 05, 0B] -0395; [5A 2A, 05, 8F] -D835 DEAC; [5A 2A, 05, 95] -D835 DEE6; [5A 2A, 05, 95] -D835 DF20; [5A 2A, 05, 95] -D835 DF5A; [5A 2A, 05, 95] -D835 DF94; [5A 2A, 05, 95] -1F10; [5A 2A, 05, 05][, 89, 05] -1F18; [5A 2A, 05, 8F][, 89, 05] -1F14; [5A 2A, 05, 05][, 89, 05][, 8D, 05] -1F1C; [5A 2A, 05, 8F][, 89, 05][, 8D, 05] -1F12; [5A 2A, 05, 05][, 89, 05][, 8F, 05] -1F1A; [5A 2A, 05, 8F][, 89, 05][, 8F, 05] -1F11; [5A 2A, 05, 05][, 8B, 05] -1F19; [5A 2A, 05, 8F][, 8B, 05] -1F15; [5A 2A, 05, 05][, 8B, 05][, 8D, 05] -1F1D; [5A 2A, 05, 8F][, 8B, 05][, 8D, 05] -1F13; [5A 2A, 05, 05][, 8B, 05][, 8F, 05] -1F1B; [5A 2A, 05, 8F][, 8B, 05][, 8F, 05] -03AD; [5A 2A, 05, 05][, 8D, 05] -1F73; [5A 2A, 05, 05][, 8D, 05] -0388; [5A 2A, 05, 8F][, 8D, 05] -1FC9; [5A 2A, 05, 8F][, 8D, 05] -1F72; [5A 2A, 05, 05][, 8F, 05] -1FC8; [5A 2A, 05, 8F][, 8F, 05] - -03DD; [5A 2C, 05, 05] -03DC; [5A 2C, 05, 8F] - -03DB; [5A 2E, 05, 05] -03DA; [5A 2E, 05, 8F] - -03B6; [5A 30, 05, 05] -D835 DEC7; [5A 30, 05, 0B] -D835 DF01; [5A 30, 05, 0B] -D835 DF3B; [5A 30, 05, 0B] -D835 DF75; [5A 30, 05, 0B] -D835 DFAF; [5A 30, 05, 0B] -0396; [5A 30, 05, 8F] -D835 DEAD; [5A 30, 05, 95] -D835 DEE7; [5A 30, 05, 95] -D835 DF21; [5A 30, 05, 95] -D835 DF5B; [5A 30, 05, 95] -D835 DF95; [5A 30, 05, 95] - -03B7; [5A 32, 05, 05] -D835 DEC8; [5A 32, 05, 0B] -D835 DF02; [5A 32, 05, 0B] -D835 DF3C; [5A 32, 05, 0B] -D835 DF76; [5A 32, 05, 0B] -D835 DFB0; [5A 32, 05, 0B] -0397; [5A 32, 05, 8F] -D835 DEAE; [5A 32, 05, 95] -D835 DEE8; [5A 32, 05, 95] -D835 DF22; [5A 32, 05, 95] -D835 DF5C; [5A 32, 05, 95] -D835 DF96; [5A 32, 05, 95] -1F20; [5A 32, 05, 05][, 89, 05] -1F28; [5A 32, 05, 8F][, 89, 05] -1F24; [5A 32, 05, 05][, 89, 05][, 8D, 05] -1F2C; [5A 32, 05, 8F][, 89, 05][, 8D, 05] -1F94; [5A 32, 05, 05][, 89, 05][, 8D, 05][, D1 E1, 05] -1F9C; [5A 32, 05, 8F][, 89, 05][, 8D, 05][, D1 E1, 05] -1F22; [5A 32, 05, 05][, 89, 05][, 8F, 05] -1F2A; [5A 32, 05, 8F][, 89, 05][, 8F, 05] -1F92; [5A 32, 05, 05][, 89, 05][, 8F, 05][, D1 E1, 05] -1F9A; [5A 32, 05, 8F][, 89, 05][, 8F, 05][, D1 E1, 05] -1F26; [5A 32, 05, 05][, 89, 05][, 9B, 05] -1F2E; [5A 32, 05, 8F][, 89, 05][, 9B, 05] -1F96; [5A 32, 05, 05][, 89, 05][, 9B, 05][, D1 E1, 05] -1F9E; [5A 32, 05, 8F][, 89, 05][, 9B, 05][, D1 E1, 05] -1F90; [5A 32, 05, 05][, 89, 05][, D1 E1, 05] -1F98; [5A 32, 05, 8F][, 89, 05][, D1 E1, 05] -1F21; [5A 32, 05, 05][, 8B, 05] -1F29; [5A 32, 05, 8F][, 8B, 05] -1F25; [5A 32, 05, 05][, 8B, 05][, 8D, 05] -1F2D; [5A 32, 05, 8F][, 8B, 05][, 8D, 05] -1F95; [5A 32, 05, 05][, 8B, 05][, 8D, 05][, D1 E1, 05] -1F9D; [5A 32, 05, 8F][, 8B, 05][, 8D, 05][, D1 E1, 05] -1F23; [5A 32, 05, 05][, 8B, 05][, 8F, 05] -1F2B; [5A 32, 05, 8F][, 8B, 05][, 8F, 05] -1F93; [5A 32, 05, 05][, 8B, 05][, 8F, 05][, D1 E1, 05] -1F9B; [5A 32, 05, 8F][, 8B, 05][, 8F, 05][, D1 E1, 05] -1F27; [5A 32, 05, 05][, 8B, 05][, 9B, 05] -1F2F; [5A 32, 05, 8F][, 8B, 05][, 9B, 05] -1F97; [5A 32, 05, 05][, 8B, 05][, 9B, 05][, D1 E1, 05] -1F9F; [5A 32, 05, 8F][, 8B, 05][, 9B, 05][, D1 E1, 05] -1F91; [5A 32, 05, 05][, 8B, 05][, D1 E1, 05] -1F99; [5A 32, 05, 8F][, 8B, 05][, D1 E1, 05] -03AE; [5A 32, 05, 05][, 8D, 05] -1F75; [5A 32, 05, 05][, 8D, 05] -0389; [5A 32, 05, 8F][, 8D, 05] -1FCB; [5A 32, 05, 8F][, 8D, 05] -1FC4; [5A 32, 05, 05][, 8D, 05][, D1 E1, 05] -1F74; [5A 32, 05, 05][, 8F, 05] -1FCA; [5A 32, 05, 8F][, 8F, 05] -1FC2; [5A 32, 05, 05][, 8F, 05][, D1 E1, 05] -1FC6; [5A 32, 05, 05][, 9B, 05] -1FC7; [5A 32, 05, 05][, 9B, 05][, D1 E1, 05] -1FC3; [5A 32, 05, 05][, D1 E1, 05] -1FCC; [5A 32, 05, 8F][, D1 E1, 05] - -03B8; [5A 34, 05, 05] -03D1; [5A 34, 05, 09] -D835 DEC9; [5A 34, 05, 0B] -D835 DEDD; [5A 34, 05, 0B] -D835 DF03; [5A 34, 05, 0B] -D835 DF17; [5A 34, 05, 0B] -D835 DF3D; [5A 34, 05, 0B] -D835 DF51; [5A 34, 05, 0B] -D835 DF77; [5A 34, 05, 0B] -D835 DF8B; [5A 34, 05, 0B] -D835 DFB1; [5A 34, 05, 0B] -D835 DFC5; [5A 34, 05, 0B] -0398; [5A 34, 05, 8F] -03F4; [5A 34, 05, 93] -D835 DEAF; [5A 34, 05, 95] -D835 DEB9; [5A 34, 05, 95] -D835 DEE9; [5A 34, 05, 95] -D835 DEF3; [5A 34, 05, 95] -D835 DF23; [5A 34, 05, 95] -D835 DF2D; [5A 34, 05, 95] -D835 DF5D; [5A 34, 05, 95] -D835 DF67; [5A 34, 05, 95] -D835 DF97; [5A 34, 05, 95] -D835 DFA1; [5A 34, 05, 95] - -03B9; [5A 36, 05, 05] -1FBE; [5A 36, 05, 05] -037A; [5A 36, 05, 09] -D835 DECA; [5A 36, 05, 0B] -D835 DF04; [5A 36, 05, 0B] -D835 DF3E; [5A 36, 05, 0B] -D835 DF78; [5A 36, 05, 0B] -D835 DFB2; [5A 36, 05, 0B] -0399; [5A 36, 05, 8F] -D835 DEB0; [5A 36, 05, 95] -D835 DEEA; [5A 36, 05, 95] -D835 DF24; [5A 36, 05, 95] -D835 DF5E; [5A 36, 05, 95] -D835 DF98; [5A 36, 05, 95] -1F30; [5A 36, 05, 05][, 89, 05] -1F38; [5A 36, 05, 8F][, 89, 05] -1F34; [5A 36, 05, 05][, 89, 05][, 8D, 05] -1F3C; [5A 36, 05, 8F][, 89, 05][, 8D, 05] -1F32; [5A 36, 05, 05][, 89, 05][, 8F, 05] -1F3A; [5A 36, 05, 8F][, 89, 05][, 8F, 05] -1F36; [5A 36, 05, 05][, 89, 05][, 9B, 05] -1F3E; [5A 36, 05, 8F][, 89, 05][, 9B, 05] -1F31; [5A 36, 05, 05][, 8B, 05] -1F39; [5A 36, 05, 8F][, 8B, 05] -1F35; [5A 36, 05, 05][, 8B, 05][, 8D, 05] -1F3D; [5A 36, 05, 8F][, 8B, 05][, 8D, 05] -1F33; [5A 36, 05, 05][, 8B, 05][, 8F, 05] -1F3B; [5A 36, 05, 8F][, 8B, 05][, 8F, 05] -1F37; [5A 36, 05, 05][, 8B, 05][, 9B, 05] -1F3F; [5A 36, 05, 8F][, 8B, 05][, 9B, 05] -03AF; [5A 36, 05, 05][, 8D, 05] -1F77; [5A 36, 05, 05][, 8D, 05] -038A; [5A 36, 05, 8F][, 8D, 05] -1FDB; [5A 36, 05, 8F][, 8D, 05] -1F76; [5A 36, 05, 05][, 8F, 05] -1FDA; [5A 36, 05, 8F][, 8F, 05] -1FD0; [5A 36, 05, 05][, 91, 05] -1FD8; [5A 36, 05, 8F][, 91, 05] -1FD6; [5A 36, 05, 05][, 9B, 05] -03CA; [5A 36, 05, 05][, 9D, 05] -03AA; [5A 36, 05, 8F][, 9D, 05] -0390; [5A 36, 05, 05][, 9D, 05][, 8D, 05] -1FD3; [5A 36, 05, 05][, 9D, 05][, 8D, 05] -1FD2; [5A 36, 05, 05][, 9D, 05][, 8F, 05] -1FD7; [5A 36, 05, 05][, 9D, 05][, 9B, 05] -1FD1; [5A 36, 05, 05][, AB, 05] -1FD9; [5A 36, 05, 8F][, AB, 05] - -03F3; [5A 38, 05, 05] - -03BA; [5A 3A, 05, 05] -03F0; [5A 3A, 05, 09] -D835 DECB; [5A 3A, 05, 0B] -D835 DEDE; [5A 3A, 05, 0B] -D835 DF05; [5A 3A, 05, 0B] -D835 DF18; [5A 3A, 05, 0B] -D835 DF3F; [5A 3A, 05, 0B] -D835 DF52; [5A 3A, 05, 0B] -D835 DF79; [5A 3A, 05, 0B] -D835 DF8C; [5A 3A, 05, 0B] -D835 DFB3; [5A 3A, 05, 0B] -D835 DFC6; [5A 3A, 05, 0B] -039A; [5A 3A, 05, 8F] -D835 DEB1; [5A 3A, 05, 95] -D835 DEEB; [5A 3A, 05, 95] -D835 DF25; [5A 3A, 05, 95] -D835 DF5F; [5A 3A, 05, 95] -D835 DF99; [5A 3A, 05, 95] -03D7; [5A 3A, 05, 09][5A 20, 05, 09][5A 36, 05, 3D] - -03BB; [5A 3C, 05, 05] -D835 DECC; [5A 3C, 05, 0B] -D835 DF06; [5A 3C, 05, 0B] -D835 DF40; [5A 3C, 05, 0B] -D835 DF7A; [5A 3C, 05, 0B] -D835 DFB4; [5A 3C, 05, 0B] -039B; [5A 3C, 05, 8F] -D835 DEB2; [5A 3C, 05, 95] -D835 DEEC; [5A 3C, 05, 95] -D835 DF26; [5A 3C, 05, 95] -D835 DF60; [5A 3C, 05, 95] -D835 DF9A; [5A 3C, 05, 95] - -1D27; [5A 3E, 05, 05] - -03BC; [5A 40, 05, 05] -00B5; [5A 40, 05, 09] -D835 DECD; [5A 40, 05, 0B] -D835 DF07; [5A 40, 05, 0B] -D835 DF41; [5A 40, 05, 0B] -D835 DF7B; [5A 40, 05, 0B] -D835 DFB5; [5A 40, 05, 0B] -039C; [5A 40, 05, 8F] -D835 DEB3; [5A 40, 05, 95] -D835 DEED; [5A 40, 05, 95] -D835 DF27; [5A 40, 05, 95] -D835 DF61; [5A 40, 05, 95] -D835 DF9B; [5A 40, 05, 95] -3382; [5A 40, 05, 37][26, 05, B9] -338C; [5A 40, 05, 37][30, 05, B9] -338D; [5A 40, 05, 37][32, 05, 37] -3395; [5A 40, 05, 37][3C, 05, 37] -339B; [5A 40, 05, 37][3E, 05, 37] -33B2; [5A 40, 05, 37][4A, 05, 37] -33B6; [5A 40, 05, 37][50, 05, B9] -33BC; [5A 40, 05, 37][52, 05, B9] - -03BD; [5A 42, 05, 05] -D835 DECE; [5A 42, 05, 0B] -D835 DF08; [5A 42, 05, 0B] -D835 DF42; [5A 42, 05, 0B] -D835 DF7C; [5A 42, 05, 0B] -D835 DFB6; [5A 42, 05, 0B] -039D; [5A 42, 05, 8F] -D835 DEB4; [5A 42, 05, 95] -D835 DEEE; [5A 42, 05, 95] -D835 DF28; [5A 42, 05, 95] -D835 DF62; [5A 42, 05, 95] -D835 DF9C; [5A 42, 05, 95] - -03BE; [5A 44, 05, 05] -D835 DECF; [5A 44, 05, 0B] -D835 DF09; [5A 44, 05, 0B] -D835 DF43; [5A 44, 05, 0B] -D835 DF7D; [5A 44, 05, 0B] -D835 DFB7; [5A 44, 05, 0B] -039E; [5A 44, 05, 8F] -D835 DEB5; [5A 44, 05, 95] -D835 DEEF; [5A 44, 05, 95] -D835 DF29; [5A 44, 05, 95] -D835 DF63; [5A 44, 05, 95] -D835 DF9D; [5A 44, 05, 95] - -03BF; [5A 46, 05, 05] -D835 DED0; [5A 46, 05, 0B] -D835 DF0A; [5A 46, 05, 0B] -D835 DF44; [5A 46, 05, 0B] -D835 DF7E; [5A 46, 05, 0B] -D835 DFB8; [5A 46, 05, 0B] -039F; [5A 46, 05, 8F] -D835 DEB6; [5A 46, 05, 95] -D835 DEF0; [5A 46, 05, 95] -D835 DF2A; [5A 46, 05, 95] -D835 DF64; [5A 46, 05, 95] -D835 DF9E; [5A 46, 05, 95] -1F40; [5A 46, 05, 05][, 89, 05] -1F48; [5A 46, 05, 8F][, 89, 05] -1F44; [5A 46, 05, 05][, 89, 05][, 8D, 05] -1F4C; [5A 46, 05, 8F][, 89, 05][, 8D, 05] -1F42; [5A 46, 05, 05][, 89, 05][, 8F, 05] -1F4A; [5A 46, 05, 8F][, 89, 05][, 8F, 05] -1F41; [5A 46, 05, 05][, 8B, 05] -1F49; [5A 46, 05, 8F][, 8B, 05] -1F45; [5A 46, 05, 05][, 8B, 05][, 8D, 05] -1F4D; [5A 46, 05, 8F][, 8B, 05][, 8D, 05] -1F43; [5A 46, 05, 05][, 8B, 05][, 8F, 05] -1F4B; [5A 46, 05, 8F][, 8B, 05][, 8F, 05] -03CC; [5A 46, 05, 05][, 8D, 05] -1F79; [5A 46, 05, 05][, 8D, 05] -038C; [5A 46, 05, 8F][, 8D, 05] -1FF9; [5A 46, 05, 8F][, 8D, 05] -1F78; [5A 46, 05, 05][, 8F, 05] -1FF8; [5A 46, 05, 8F][, 8F, 05] - -03C0; [5A 48, 05, 05] -03D6; [5A 48, 05, 09] -D835 DED1; [5A 48, 05, 0B] -D835 DEE1; [5A 48, 05, 0B] -D835 DF0B; [5A 48, 05, 0B] -D835 DF1B; [5A 48, 05, 0B] -D835 DF45; [5A 48, 05, 0B] -D835 DF55; [5A 48, 05, 0B] -D835 DF7F; [5A 48, 05, 0B] -D835 DF8F; [5A 48, 05, 0B] -D835 DFB9; [5A 48, 05, 0B] -D835 DFC9; [5A 48, 05, 0B] -03A0; [5A 48, 05, 8F] -213F; [5A 48, 05, 95] -D835 DEB7; [5A 48, 05, 95] -D835 DEF1; [5A 48, 05, 95] -D835 DF2B; [5A 48, 05, 95] -D835 DF65; [5A 48, 05, 95] -D835 DF9F; [5A 48, 05, 95] - -1D28; [5A 4A, 05, 05] - -03DF; [5A 4C, 05, 05] -03DE; [5A 4C, 05, 8F] - -03D9; [5A 4E, 05, 05] -03D8; [5A 4E, 05, 8F] - -03C1; [5A 50, 05, 05] -03F1; [5A 50, 05, 09] -D835 DED2; [5A 50, 05, 0B] -D835 DEE0; [5A 50, 05, 0B] -D835 DF0C; [5A 50, 05, 0B] -D835 DF1A; [5A 50, 05, 0B] -D835 DF46; [5A 50, 05, 0B] -D835 DF54; [5A 50, 05, 0B] -D835 DF80; [5A 50, 05, 0B] -D835 DF8E; [5A 50, 05, 0B] -D835 DFBA; [5A 50, 05, 0B] -D835 DFC8; [5A 50, 05, 0B] -03A1; [5A 50, 05, 8F] -D835 DEB8; [5A 50, 05, 95] -D835 DEF2; [5A 50, 05, 95] -D835 DF2C; [5A 50, 05, 95] -D835 DF66; [5A 50, 05, 95] -D835 DFA0; [5A 50, 05, 95] -1D68; [5A 50, 05, 29] -1FE4; [5A 50, 05, 05][, 89, 05] -1FE5; [5A 50, 05, 05][, 8B, 05] -1FEC; [5A 50, 05, 8F][, 8B, 05] - -1D29; [5A 52, 05, 05] - -03C3; [5A 54, 05, 05] -03F2; [5A 54, 05, 09] -D835 DED3; [5A 54, 05, 0B] -D835 DED4; [5A 54, 05, 0B] -D835 DF0D; [5A 54, 05, 0B] -D835 DF0E; [5A 54, 05, 0B] -D835 DF47; [5A 54, 05, 0B] -D835 DF48; [5A 54, 05, 0B] -D835 DF81; [5A 54, 05, 0B] -D835 DF82; [5A 54, 05, 0B] -D835 DFBB; [5A 54, 05, 0B] -D835 DFBC; [5A 54, 05, 0B] -03A3; [5A 54, 05, 8F] -03F9; [5A 54, 05, 93] -D835 DEBA; [5A 54, 05, 95] -D835 DEF4; [5A 54, 05, 95] -D835 DF2E; [5A 54, 05, 95] -D835 DF68; [5A 54, 05, 95] -D835 DFA2; [5A 54, 05, 95] -03C2; [5A 54, 05, 31] - -03C4; [5A 56, 05, 05] -D835 DED5; [5A 56, 05, 0B] -D835 DF0F; [5A 56, 05, 0B] -D835 DF49; [5A 56, 05, 0B] -D835 DF83; [5A 56, 05, 0B] -D835 DFBD; [5A 56, 05, 0B] -03A4; [5A 56, 05, 8F] -D835 DEBB; [5A 56, 05, 95] -D835 DEF5; [5A 56, 05, 95] -D835 DF2F; [5A 56, 05, 95] -D835 DF69; [5A 56, 05, 95] -D835 DFA3; [5A 56, 05, 95] - -03C5; [5A 58, 05, 05] -D835 DED6; [5A 58, 05, 0B] -D835 DF10; [5A 58, 05, 0B] -D835 DF4A; [5A 58, 05, 0B] -D835 DF84; [5A 58, 05, 0B] -D835 DFBE; [5A 58, 05, 0B] -03A5; [5A 58, 05, 8F] -03D2; [5A 58, 05, 93] -D835 DEBC; [5A 58, 05, 95] -D835 DEF6; [5A 58, 05, 95] -D835 DF30; [5A 58, 05, 95] -D835 DF6A; [5A 58, 05, 95] -D835 DFA4; [5A 58, 05, 95] -1F50; [5A 58, 05, 05][, 89, 05] -1F54; [5A 58, 05, 05][, 89, 05][, 8D, 05] -1F52; [5A 58, 05, 05][, 89, 05][, 8F, 05] -1F56; [5A 58, 05, 05][, 89, 05][, 9B, 05] -1F51; [5A 58, 05, 05][, 8B, 05] -1F59; [5A 58, 05, 8F][, 8B, 05] -1F55; [5A 58, 05, 05][, 8B, 05][, 8D, 05] -1F5D; [5A 58, 05, 8F][, 8B, 05][, 8D, 05] -1F53; [5A 58, 05, 05][, 8B, 05][, 8F, 05] -1F5B; [5A 58, 05, 8F][, 8B, 05][, 8F, 05] -1F57; [5A 58, 05, 05][, 8B, 05][, 9B, 05] -1F5F; [5A 58, 05, 8F][, 8B, 05][, 9B, 05] -03CD; [5A 58, 05, 05][, 8D, 05] -1F7B; [5A 58, 05, 05][, 8D, 05] -038E; [5A 58, 05, 8F][, 8D, 05] -1FEB; [5A 58, 05, 8F][, 8D, 05] -03D3; [5A 58, 05, 93][, 8D, 05] -1F7A; [5A 58, 05, 05][, 8F, 05] -1FEA; [5A 58, 05, 8F][, 8F, 05] -1FE0; [5A 58, 05, 05][, 91, 05] -1FE8; [5A 58, 05, 8F][, 91, 05] -1FE6; [5A 58, 05, 05][, 9B, 05] -03CB; [5A 58, 05, 05][, 9D, 05] -03AB; [5A 58, 05, 8F][, 9D, 05] -03D4; [5A 58, 05, 93][, 9D, 05] -03B0; [5A 58, 05, 05][, 9D, 05][, 8D, 05] -1FE3; [5A 58, 05, 05][, 9D, 05][, 8D, 05] -1FE2; [5A 58, 05, 05][, 9D, 05][, 8F, 05] -1FE7; [5A 58, 05, 05][, 9D, 05][, 9B, 05] -1FE1; [5A 58, 05, 05][, AB, 05] -1FE9; [5A 58, 05, 8F][, AB, 05] - -03C6; [5A 5A, 05, 05] -03D5; [5A 5A, 05, 09] -D835 DED7; [5A 5A, 05, 0B] -D835 DEDF; [5A 5A, 05, 0B] -D835 DF11; [5A 5A, 05, 0B] -D835 DF19; [5A 5A, 05, 0B] -D835 DF4B; [5A 5A, 05, 0B] -D835 DF53; [5A 5A, 05, 0B] -D835 DF85; [5A 5A, 05, 0B] -D835 DF8D; [5A 5A, 05, 0B] -D835 DFBF; [5A 5A, 05, 0B] -D835 DFC7; [5A 5A, 05, 0B] -03A6; [5A 5A, 05, 8F] -D835 DEBD; [5A 5A, 05, 95] -D835 DEF7; [5A 5A, 05, 95] -D835 DF31; [5A 5A, 05, 95] -D835 DF6B; [5A 5A, 05, 95] -D835 DFA5; [5A 5A, 05, 95] -1D60; [5A 5A, 05, 27] -1D69; [5A 5A, 05, 29] - -03C7; [5A 5C, 05, 05] -D835 DED8; [5A 5C, 05, 0B] -D835 DF12; [5A 5C, 05, 0B] -D835 DF4C; [5A 5C, 05, 0B] -D835 DF86; [5A 5C, 05, 0B] -D835 DFC0; [5A 5C, 05, 0B] -03A7; [5A 5C, 05, 8F] -D835 DEBE; [5A 5C, 05, 95] -D835 DEF8; [5A 5C, 05, 95] -D835 DF32; [5A 5C, 05, 95] -D835 DF6C; [5A 5C, 05, 95] -D835 DFA6; [5A 5C, 05, 95] -1D61; [5A 5C, 05, 27] -1D6A; [5A 5C, 05, 29] - -03C8; [5A 5E, 05, 05] -D835 DED9; [5A 5E, 05, 0B] -D835 DF13; [5A 5E, 05, 0B] -D835 DF4D; [5A 5E, 05, 0B] -D835 DF87; [5A 5E, 05, 0B] -D835 DFC1; [5A 5E, 05, 0B] -03A8; [5A 5E, 05, 8F] -D835 DEBF; [5A 5E, 05, 95] -D835 DEF9; [5A 5E, 05, 95] -D835 DF33; [5A 5E, 05, 95] -D835 DF6D; [5A 5E, 05, 95] -D835 DFA7; [5A 5E, 05, 95] - -1D2A; [5A 60, 05, 05] - -03C9; [5A 62, 05, 05] -D835 DEDA; [5A 62, 05, 0B] -D835 DF14; [5A 62, 05, 0B] -D835 DF4E; [5A 62, 05, 0B] -D835 DF88; [5A 62, 05, 0B] -D835 DFC2; [5A 62, 05, 0B] -03A9; [5A 62, 05, 8F] -2126; [5A 62, 05, 8F] -D835 DEC0; [5A 62, 05, 95] -D835 DEFA; [5A 62, 05, 95] -D835 DF34; [5A 62, 05, 95] -D835 DF6E; [5A 62, 05, 95] -D835 DFA8; [5A 62, 05, 95] -1F60; [5A 62, 05, 05][, 89, 05] -1F68; [5A 62, 05, 8F][, 89, 05] -1F64; [5A 62, 05, 05][, 89, 05][, 8D, 05] -1F6C; [5A 62, 05, 8F][, 89, 05][, 8D, 05] -1FA4; [5A 62, 05, 05][, 89, 05][, 8D, 05][, D1 E1, 05] -1FAC; [5A 62, 05, 8F][, 89, 05][, 8D, 05][, D1 E1, 05] -1F62; [5A 62, 05, 05][, 89, 05][, 8F, 05] -1F6A; [5A 62, 05, 8F][, 89, 05][, 8F, 05] -1FA2; [5A 62, 05, 05][, 89, 05][, 8F, 05][, D1 E1, 05] -1FAA; [5A 62, 05, 8F][, 89, 05][, 8F, 05][, D1 E1, 05] -1F66; [5A 62, 05, 05][, 89, 05][, 9B, 05] -1F6E; [5A 62, 05, 8F][, 89, 05][, 9B, 05] -1FA6; [5A 62, 05, 05][, 89, 05][, 9B, 05][, D1 E1, 05] -1FAE; [5A 62, 05, 8F][, 89, 05][, 9B, 05][, D1 E1, 05] -1FA0; [5A 62, 05, 05][, 89, 05][, D1 E1, 05] -1FA8; [5A 62, 05, 8F][, 89, 05][, D1 E1, 05] -1F61; [5A 62, 05, 05][, 8B, 05] -1F69; [5A 62, 05, 8F][, 8B, 05] -1F65; [5A 62, 05, 05][, 8B, 05][, 8D, 05] -1F6D; [5A 62, 05, 8F][, 8B, 05][, 8D, 05] -1FA5; [5A 62, 05, 05][, 8B, 05][, 8D, 05][, D1 E1, 05] -1FAD; [5A 62, 05, 8F][, 8B, 05][, 8D, 05][, D1 E1, 05] -1F63; [5A 62, 05, 05][, 8B, 05][, 8F, 05] -1F6B; [5A 62, 05, 8F][, 8B, 05][, 8F, 05] -1FA3; [5A 62, 05, 05][, 8B, 05][, 8F, 05][, D1 E1, 05] -1FAB; [5A 62, 05, 8F][, 8B, 05][, 8F, 05][, D1 E1, 05] -1F67; [5A 62, 05, 05][, 8B, 05][, 9B, 05] -1F6F; [5A 62, 05, 8F][, 8B, 05][, 9B, 05] -1FA7; [5A 62, 05, 05][, 8B, 05][, 9B, 05][, D1 E1, 05] -1FAF; [5A 62, 05, 8F][, 8B, 05][, 9B, 05][, D1 E1, 05] -1FA1; [5A 62, 05, 05][, 8B, 05][, D1 E1, 05] -1FA9; [5A 62, 05, 8F][, 8B, 05][, D1 E1, 05] -03CE; [5A 62, 05, 05][, 8D, 05] -1F7D; [5A 62, 05, 05][, 8D, 05] -038F; [5A 62, 05, 8F][, 8D, 05] -1FFB; [5A 62, 05, 8F][, 8D, 05] -1FF4; [5A 62, 05, 05][, 8D, 05][, D1 E1, 05] -1F7C; [5A 62, 05, 05][, 8F, 05] -1FFA; [5A 62, 05, 8F][, 8F, 05] -1FF2; [5A 62, 05, 05][, 8F, 05][, D1 E1, 05] -1FF6; [5A 62, 05, 05][, 9B, 05] -1FF7; [5A 62, 05, 05][, 9B, 05][, D1 E1, 05] -1FF3; [5A 62, 05, 05][, D1 E1, 05] -1FFC; [5A 62, 05, 8F][, D1 E1, 05] - -03E1; [5A 64, 05, 05] -03E0; [5A 64, 05, 8F] - -03F8; [5A 66, 05, 05] -03F7; [5A 66, 05, 8F] - -03FB; [5A 68, 05, 05] -03FA; [5A 68, 05, 8F] - -03E3; [5A 6A, 05, 05] -03E2; [5A 6A, 05, 8F] - -03E5; [5A 6C, 05, 05] -03E4; [5A 6C, 05, 8F] - -03E7; [5A 6E, 05, 05] -03E6; [5A 6E, 05, 8F] - -03E9; [5A 70, 05, 05] -03E8; [5A 70, 05, 8F] - -03EB; [5A 72, 05, 05] -03EA; [5A 72, 05, 8F] - -03ED; [5A 74, 05, 05] -03EC; [5A 74, 05, 8F] - -03EF; [5A 76, 05, 05] -03EE; [5A 76, 05, 8F] - -0430; [5B 20, 05, 05] -0410; [5B 20, 05, 8F] - -0430 0306; [5B 22, 05, 05] -04D1; [5B 22, 05, 05] -0410 0306; [5B 22, 05, 8F] -04D0; [5B 22, 05, 8F] - -0430 0308; [5B 24, 05, 05] -04D3; [5B 24, 05, 05] -0410 0308; [5B 24, 05, 8F] -04D2; [5B 24, 05, 8F] - -04D9; [5B 26, 05, 05] -04D8; [5B 26, 05, 8F] - -04D9 0308; [5B 28, 05, 05] -04DB; [5B 28, 05, 05] -04D8 0308; [5B 28, 05, 8F] -04DA; [5B 28, 05, 8F] - -04D5; [5B 2A, 05, 05] -04D4; [5B 2A, 05, 8F] - -0431; [5B 2C, 05, 05] -0411; [5B 2C, 05, 8F] - -0432; [5B 2E, 05, 05] -0412; [5B 2E, 05, 8F] - -0433; [5B 30, 05, 05] -0413; [5B 30, 05, 8F] -0491; [5B 30, 05, 09][, E0 9D, 09] -0490; [5B 30, 05, 93][, E0 9D, 09] - -0493; [5B 32, 05, 05] -0492; [5B 32, 05, 8F] - -0495; [5B 34, 05, 05] -0494; [5B 34, 05, 8F] - -0434; [5B 36, 05, 05] -0414; [5B 36, 05, 8F] - -0501; [5B 38, 05, 05] -0500; [5B 38, 05, 8F] - -0452; [5B 3A, 05, 05] -0402; [5B 3A, 05, 8F] - -0503; [5B 3C, 05, 05] -0502; [5B 3C, 05, 8F] +D834 DD20; [20 67, 05, 05] -0433 0301; [5B 3E, 05, 05] -0433 0341; [5B 3E, 05, 05] -0453; [5B 3E, 05, 05] -0403; [5B 3E, 05, 8F] -0413 0301; [5B 3E, 05, 8F] -0413 0341; [5B 3E, 05, 8F] +D834 DD21; [20 69, 05, 05] -0499; [5B 40, 05, 05] -0498; [5B 40, 05, 8F] +D834 DD22; [20 6B, 05, 05] -0435; [5B 42, 05, 05] -0415; [5B 42, 05, 8F] -0450; [5B 42, 05, 05][, 8F, 05] -0400; [5B 42, 05, 8F][, 8F, 05] -0451; [5B 42, 05, 05][, 9D, 05] -0401; [5B 42, 05, 8F][, 9D, 05] +D834 DD23; [20 6D, 05, 05] -0435 0306; [5B 44, 05, 05] -04D7; [5B 44, 05, 05] -0415 0306; [5B 44, 05, 8F] -04D6; [5B 44, 05, 8F] +D834 DD24; [20 6F, 05, 05] -0454; [5B 46, 05, 05] -0404; [5B 46, 05, 8F] +D834 DD25; [20 71, 05, 05] -0436; [5B 48, 05, 05] -0416; [5B 48, 05, 8F] -04C2; [5B 48, 05, 05][, 91, 05] -04C1; [5B 48, 05, 8F][, 91, 05] +D834 DD26; [20 73, 05, 05] -0436 0308; [5B 4A, 05, 05] -04DD; [5B 4A, 05, 05] -0416 0308; [5B 4A, 05, 8F] -04DC; [5B 4A, 05, 8F] +266D; [20 75, 05, 05] -0497; [5B 4C, 05, 05] -0496; [5B 4C, 05, 8F] +266E; [20 77, 05, 05] -0437; [5B 4E, 05, 05] -0417; [5B 4E, 05, 8F] +266F; [20 79, 05, 05] -0505; [5B 50, 05, 05] -0504; [5B 50, 05, 8F] +D834 DD2A; [20 7B, 05, 05] -0437 0308; [5B 52, 05, 05] -04DF; [5B 52, 05, 05] -0417 0308; [5B 52, 05, 8F] -04DE; [5B 52, 05, 8F] +D834 DD2B; [20 7D, 05, 05] -0455; [5B 54, 05, 05] -0405; [5B 54, 05, 8F] +D834 DD2C; [20 7F, 05, 05] -04E1; [5B 56, 05, 05] -04E0; [5B 56, 05, 8F] +D834 DD2D; [20 81, 05, 05] -0507; [5B 58, 05, 05] -0506; [5B 58, 05, 8F] +D834 DD2E; [20 83, 05, 05] -0438; [5B 5A, 05, 05] -0418; [5B 5A, 05, 8F] -045D; [5B 5A, 05, 05][, 8F, 05] -040D; [5B 5A, 05, 8F][, 8F, 05] -04E3; [5B 5A, 05, 05][, AB, 05] -04E2; [5B 5A, 05, 8F][, AB, 05] +D834 DD2F; [20 85, 05, 05] -048B; [5B 5C, 05, 05] -048A; [5B 5C, 05, 8F] +D834 DD30; [20 87, 05, 05] -0438 0308; [5B 5E, 05, 05] -04E5; [5B 5E, 05, 05] -0418 0308; [5B 5E, 05, 8F] -04E4; [5B 5E, 05, 8F] +D834 DD31; [20 89, 05, 05] -0456; [5B 60, 05, 05] -0406; [5B 60, 05, 8F] +D834 DD32; [20 8B, 05, 05] -0456 0308; [5B 62, 05, 05] -0457; [5B 62, 05, 05] -0406 0308; [5B 62, 05, 8F] -0407; [5B 62, 05, 8F] +D834 DD33; [20 8D, 05, 05] -0438 0306; [5B 64, 05, 05] -0439; [5B 64, 05, 05] -0418 0306; [5B 64, 05, 8F] -0419; [5B 64, 05, 8F] +D834 DD34; [20 8F, 05, 05] -0458; [5B 66, 05, 05] -0408; [5B 66, 05, 8F] +D834 DD35; [20 91, 05, 05] -043A; [5B 68, 05, 05] -041A; [5B 68, 05, 8F] +D834 DD36; [20 93, 05, 05] -049B; [5B 6A, 05, 05] -049A; [5B 6A, 05, 8F] +D834 DD37; [20 95, 05, 05] -04C4; [5B 6C, 05, 05] -04C3; [5B 6C, 05, 8F] +D834 DD38; [20 97, 05, 05] -04A1; [5B 6E, 05, 05] -04A0; [5B 6E, 05, 8F] +D834 DD39; [20 99, 05, 05] -049F; [5B 70, 05, 05] -049E; [5B 70, 05, 8F] +D834 DD3A; [20 9B, 05, 05] -049D; [5B 72, 05, 05] -049C; [5B 72, 05, 8F] +D834 DD3B; [20 9D, 05, 05] -043B; [5B 74, 05, 05] -041B; [5B 74, 05, 8F] +D834 DD3C; [20 9F, 05, 05] -1D2B; [5B 76, 05, 05] +D834 DD3D; [20 A1, 05, 05] -04C6; [5B 78, 05, 05] -04C5; [5B 78, 05, 8F] +D834 DD3E; [20 A3, 05, 05] -0459; [5B 7A, 05, 05] -0409; [5B 7A, 05, 8F] +D834 DD3F; [20 A5, 05, 05] -0509; [5B 7C, 05, 05] -0508; [5B 7C, 05, 8F] +D834 DD40; [20 A7, 05, 05] -043C; [5B 7E, 05, 05] -041C; [5B 7E, 05, 8F] +D834 DD41; [20 A9, 05, 05] -04CE; [5B 80, 05, 05] -04CD; [5B 80, 05, 8F] +D834 DD42; [20 AB, 05, 05] -043D; [5B 82, 05, 05] -041D; [5B 82, 05, 8F] +D834 DD43; [20 AD, 05, 05] -04CA; [5B 84, 05, 05] -04C9; [5B 84, 05, 8F] +D834 DD44; [20 AF, 05, 05] -04A3; [5B 86, 05, 05] -04A2; [5B 86, 05, 8F] +D834 DD45; [20 B1, 05, 05] -04C8; [5B 88, 05, 05] -04C7; [5B 88, 05, 8F] +D834 DD46; [20 B3, 05, 05] -04A5; [5B 8A, 05, 05] -04A4; [5B 8A, 05, 8F] +D834 DD47; [20 B5, 05, 05] -045A; [5B 8C, 05, 05] -040A; [5B 8C, 05, 8F] +D834 DD48; [20 B7, 05, 05] -050B; [5B 8E, 05, 05] -050A; [5B 8E, 05, 8F] +D834 DD49; [20 B9, 05, 05] -043E; [5B 90, 05, 05] -041E; [5B 90, 05, 8F] +D834 DD4A; [20 BB, 05, 05] -043E 0308; [5B 92, 05, 05] -04E7; [5B 92, 05, 05] -041E 0308; [5B 92, 05, 8F] -04E6; [5B 92, 05, 8F] +D834 DD4B; [20 BD, 05, 05] -04E9; [5B 94, 05, 05] -04E8; [5B 94, 05, 8F] +D834 DD4C; [20 BF, 05, 05] -04E9 0308; [5B 96, 05, 05] -04EB; [5B 96, 05, 05] -04E8 0308; [5B 96, 05, 8F] -04EA; [5B 96, 05, 8F] +D834 DD4D; [20 C1, 05, 05] -043F; [5B 98, 05, 05] -041F; [5B 98, 05, 8F] +D834 DD4E; [20 C3, 05, 05] -04A7; [5B 9A, 05, 05] -04A6; [5B 9A, 05, 8F] +D834 DD4F; [20 C5, 05, 05] -0481; [5B 9C, 05, 05] -0480; [5B 9C, 05, 8F] +D834 DD50; [20 C7, 05, 05] -0440; [5B 9E, 05, 05] -0420; [5B 9E, 05, 8F] +D834 DD51; [20 C9, 05, 05] -048F; [5B A0, 05, 05] -048E; [5B A0, 05, 8F] +D834 DD52; [20 CB, 05, 05] -0441; [5B A2, 05, 05] -0421; [5B A2, 05, 8F] +D834 DD53; [20 CD, 05, 05] -050D; [5B A4, 05, 05] -050C; [5B A4, 05, 8F] +D834 DD54; [20 CF, 05, 05] -04AB; [5B A6, 05, 05] -04AA; [5B A6, 05, 8F] +D834 DD55; [20 D1, 05, 05] -0442; [5B A8, 05, 05] -0422; [5B A8, 05, 8F] +D834 DD56; [20 D3, 05, 05] -050F; [5B AA, 05, 05] -050E; [5B AA, 05, 8F] +D834 DD57; [20 D5, 05, 05] +D834 DD5E; [20 D5, 05, 05] -04AD; [5B AC, 05, 05] -04AC; [5B AC, 05, 8F] +D834 DD58; [20 D7, 05, 05] +D834 DD5F; [20 D7, 05, 05] +D834 DD60; [20 D7, 05, 05] +D834 DD61; [20 D7, 05, 05] +D834 DD62; [20 D7, 05, 05] +D834 DD63; [20 D7, 05, 05] +D834 DD64; [20 D7, 05, 05] -045B; [5B AE, 05, 05] -040B; [5B AE, 05, 8F] +D834 DD59; [20 D9, 05, 05] -043A 0301; [5B B0, 05, 05] -043A 0341; [5B B0, 05, 05] -045C; [5B B0, 05, 05] -040C; [5B B0, 05, 8F] -041A 0301; [5B B0, 05, 8F] -041A 0341; [5B B0, 05, 8F] +D834 DD5A; [20 DB, 05, 05] -0443; [5B B2, 05, 05] -0423; [5B B2, 05, 8F] -04EF; [5B B2, 05, 05][, AB, 05] -04EE; [5B B2, 05, 8F][, AB, 05] +D834 DD5B; [20 DD, 05, 05] -0443 0306; [5B B4, 05, 05] -045E; [5B B4, 05, 05] -040E; [5B B4, 05, 8F] -0423 0306; [5B B4, 05, 8F] +D834 DD5C; [20 DF, 05, 05] -0443 0308; [5B B6, 05, 05] -04F1; [5B B6, 05, 05] -0423 0308; [5B B6, 05, 8F] -04F0; [5B B6, 05, 8F] +D834 DD5D; [20 E1, 05, 05] -0443 030B; [5B B8, 05, 05] -04F3; [5B B8, 05, 05] -0423 030B; [5B B8, 05, 8F] -04F2; [5B B8, 05, 8F] +D834 DD6A; [20 E3, 05, 05] -04AF; [5B BA, 05, 05] -04AE; [5B BA, 05, 8F] +D834 DD6B; [20 E5, 05, 05] -04B1; [5B BC, 05, 05] -04B0; [5B BC, 05, 8F] +D834 DD6C; [20 E7, 05, 05] -0479; [5B BE, 05, 05] -0478; [5B BE, 05, 8F] +D834 DD83; [20 E9, 05, 05] -0444; [5B C0, 05, 05] -0424; [5B C0, 05, 8F] +D834 DD84; [20 EB, 05, 05] -0445; [5B C2, 05, 05] -0425; [5B C2, 05, 8F] +D834 DD8C; [20 ED, 05, 05] -04B3; [5B C4, 05, 05] -04B2; [5B C4, 05, 8F] +D834 DD8D; [20 EF, 05, 05] -04BB; [5B C6, 05, 05] -04BA; [5B C6, 05, 8F] +D834 DD8E; [20 F1, 05, 05] -0461; [5B C8, 05, 05] -0460; [5B C8, 05, 8F] +D834 DD8F; [20 F3, 05, 05] -047F; [5B CA, 05, 05] -047E; [5B CA, 05, 8F] +D834 DD90; [20 F5, 05, 05] -047D; [5B CC, 05, 05] -047C; [5B CC, 05, 8F] +D834 DD91; [20 F7, 05, 05] -047B; [5B CE, 05, 05] -047A; [5B CE, 05, 8F] +D834 DD92; [20 F9, 05, 05] -0446; [5B D0, 05, 05] -0426; [5B D0, 05, 8F] +D834 DD93; [20 FB, 05, 05] -04B5; [5B D2, 05, 05] -04B4; [5B D2, 05, 8F] +D834 DD94; [20 FD, 05, 05] -0447; [5B D4, 05, 05] -0427; [5B D4, 05, 8F] +D834 DD95; [21 05, 05, 05] -0447 0308; [5B D6, 05, 05] -04F5; [5B D6, 05, 05] -0427 0308; [5B D6, 05, 8F] -04F4; [5B D6, 05, 8F] +D834 DD96; [21 07, 05, 05] -04B7; [5B D8, 05, 05] -04B6; [5B D8, 05, 8F] +D834 DD97; [21 09, 05, 05] -04CC; [5B DA, 05, 05] -04CB; [5B DA, 05, 8F] +D834 DD98; [21 0B, 05, 05] -04B9; [5B DC, 05, 05] -04B8; [5B DC, 05, 8F] +D834 DD99; [21 0D, 05, 05] -04BD; [5B DE, 05, 05] -04BC; [5B DE, 05, 8F] +D834 DD9A; [21 0F, 05, 05] -04BF; [5B E0, 05, 05] -04BE; [5B E0, 05, 8F] +D834 DD9B; [21 11, 05, 05] -045F; [5B E2, 05, 05] -040F; [5B E2, 05, 8F] +D834 DD9C; [21 13, 05, 05] -0448; [5B E4, 05, 05] -0428; [5B E4, 05, 8F] +D834 DD9D; [21 15, 05, 05] -0449; [5B E6, 05, 05] -0429; [5B E6, 05, 8F] +D834 DD9E; [21 17, 05, 05] -044A; [5B E8, 05, 05] -042A; [5B E8, 05, 8F] +D834 DD9F; [21 19, 05, 05] -044B; [5B EA, 05, 05] -042B; [5B EA, 05, 8F] +D834 DDA0; [21 1B, 05, 05] -044B 0308; [5B EC, 05, 05] -04F9; [5B EC, 05, 05] -042B 0308; [5B EC, 05, 8F] -04F8; [5B EC, 05, 8F] +D834 DDA1; [21 1D, 05, 05] -044C; [5B EE, 05, 05] -042C; [5B EE, 05, 8F] +D834 DDA2; [21 1F, 05, 05] -048D; [5B F0, 05, 05] -048C; [5B F0, 05, 8F] +D834 DDA3; [21 21, 05, 05] -0463; [5B F2, 05, 05] -0462; [5B F2, 05, 8F] +D834 DDA4; [21 23, 05, 05] -044D; [5B F4, 05, 05] -042D; [5B F4, 05, 8F] +D834 DDA5; [21 25, 05, 05] -044D 0308; [5B F6, 05, 05] -04ED; [5B F6, 05, 05] -042D 0308; [5B F6, 05, 8F] -04EC; [5B F6, 05, 8F] +D834 DDA6; [21 27, 05, 05] -044E; [5B F8, 05, 05] -042E; [5B F8, 05, 8F] +D834 DDA7; [21 29, 05, 05] -044F; [5B FA, 05, 05] -042F; [5B FA, 05, 8F] +D834 DDA8; [21 2B, 05, 05] -0465; [5B FC, 05, 05] -0464; [5B FC, 05, 8F] +D834 DDA9; [21 2D, 05, 05] -0467; [5B FE, 05, 05] -0466; [5B FE, 05, 8F] +D834 DDAE; [21 2F, 05, 05] -046B; [5C 05, 05, 05] -046A; [5C 05, 05, 8F] +D834 DDAF; [21 31, 05, 05] -0469; [5C 07, 05, 05] -0468; [5C 07, 05, 8F] +D834 DDB0; [21 33, 05, 05] -046D; [5C 09, 05, 05] -046C; [5C 09, 05, 8F] +D834 DDB1; [21 35, 05, 05] -046F; [5C 0B, 05, 05] -046E; [5C 0B, 05, 8F] +D834 DDB2; [21 37, 05, 05] -0471; [5C 0D, 05, 05] -0470; [5C 0D, 05, 8F] +D834 DDB3; [21 39, 05, 05] -0473; [5C 0F, 05, 05] -0472; [5C 0F, 05, 8F] +D834 DDB4; [21 3B, 05, 05] -0475; [5C 11, 05, 05] -0474; [5C 11, 05, 8F] +D834 DDB5; [21 3D, 05, 05] -0475 030F; [5C 13, 05, 05] -0477; [5C 13, 05, 05] -0474 030F; [5C 13, 05, 8F] -0476; [5C 13, 05, 8F] +D834 DDB6; [21 3F, 05, 05] -04A9; [5C 15, 05, 05] -04A8; [5C 15, 05, 8F] +D834 DDB7; [21 41, 05, 05] -04C0; [5C 17, 05, 8F] +D834 DDB8; [21 43, 05, 05] -10D0; [5D 20, 05, 05] -10A0; [5D 20, 05, 8F] +D834 DDB9; [21 45, 05, 05] +D834 DDBB; [21 45, 05, 05] +D834 DDBD; [21 45, 05, 05] +D834 DDBF; [21 45, 05, 05] -10D1; [5D 22, 05, 05] -10A1; [5D 22, 05, 8F] +D834 DDBA; [21 47, 05, 05] +D834 DDBC; [21 47, 05, 05] +D834 DDBE; [21 47, 05, 05] +D834 DDC0; [21 47, 05, 05] -10D2; [5D 24, 05, 05] -10A2; [5D 24, 05, 8F] +D834 DDC1; [21 49, 05, 05] -10D3; [5D 26, 05, 05] -10A3; [5D 26, 05, 8F] +D834 DDC2; [21 4B, 05, 05] -10D4; [5D 28, 05, 05] -10A4; [5D 28, 05, 8F] +D834 DDC3; [21 4D, 05, 05] -10D5; [5D 2A, 05, 05] -10A5; [5D 2A, 05, 8F] +D834 DDC4; [21 4F, 05, 05] -10D6; [5D 2C, 05, 05] -10A6; [5D 2C, 05, 8F] +D834 DDC5; [21 51, 05, 05] -10F1; [5D 2E, 05, 05] -10C1; [5D 2E, 05, 8F] +D834 DDC6; [21 53, 05, 05] -10D7; [5D 30, 05, 05] -10A7; [5D 30, 05, 8F] +D834 DDC7; [21 55, 05, 05] -10D8; [5D 32, 05, 05] -10A8; [5D 32, 05, 8F] +D834 DDC8; [21 57, 05, 05] -10D9; [5D 34, 05, 05] -10A9; [5D 34, 05, 8F] +D834 DDC9; [21 59, 05, 05] -10DA; [5D 36, 05, 05] -10AA; [5D 36, 05, 8F] +D834 DDCA; [21 5B, 05, 05] -10DB; [5D 38, 05, 05] -10AB; [5D 38, 05, 8F] +D834 DDCB; [21 5D, 05, 05] -10DC; [5D 3A, 05, 05] -10AC; [5D 3A, 05, 8F] +D834 DDCC; [21 5F, 05, 05] -10F2; [5D 3C, 05, 05] -10C2; [5D 3C, 05, 8F] +D834 DDCD; [21 61, 05, 05] -10DD; [5D 3E, 05, 05] -10AD; [5D 3E, 05, 8F] +D834 DDCE; [21 63, 05, 05] -10DE; [5D 40, 05, 05] -10AE; [5D 40, 05, 8F] +D834 DDCF; [21 65, 05, 05] -10DF; [5D 42, 05, 05] -10AF; [5D 42, 05, 8F] +D834 DDD0; [21 67, 05, 05] -10E0; [5D 44, 05, 05] -10B0; [5D 44, 05, 8F] +D834 DDD1; [21 69, 05, 05] -10E1; [5D 46, 05, 05] -10B1; [5D 46, 05, 8F] +D834 DDD2; [21 6B, 05, 05] -10E2; [5D 48, 05, 05] -10B2; [5D 48, 05, 8F] +D834 DDD3; [21 6D, 05, 05] -10F3; [5D 4A, 05, 05] -10C3; [5D 4A, 05, 8F] +D834 DDD4; [21 6F, 05, 05] -10E3; [5D 4C, 05, 05] -10B3; [5D 4C, 05, 8F] +D834 DDD5; [21 71, 05, 05] -10E4; [5D 4E, 05, 05] -10B4; [5D 4E, 05, 8F] +D834 DDD6; [21 73, 05, 05] -10E5; [5D 50, 05, 05] -10B5; [5D 50, 05, 8F] +D834 DDD7; [21 75, 05, 05] -10E6; [5D 52, 05, 05] -10B6; [5D 52, 05, 8F] +D834 DDD8; [21 77, 05, 05] -10E7; [5D 54, 05, 05] -10B7; [5D 54, 05, 8F] +D834 DDD9; [21 79, 05, 05] -10E8; [5D 56, 05, 05] -10B8; [5D 56, 05, 8F] +D834 DDDA; [21 7B, 05, 05] -10E9; [5D 58, 05, 05] -10B9; [5D 58, 05, 8F] +D834 DDDB; [21 7D, 05, 05] -10EA; [5D 5A, 05, 05] -10BA; [5D 5A, 05, 8F] +D834 DDDC; [21 7F, 05, 05] -10EB; [5D 5C, 05, 05] -10BB; [5D 5C, 05, 8F] +D834 DDDD; [21 81, 05, 05] -10EC; [5D 5E, 05, 05] -10BC; [5D 5E, 05, 8F] +D834 DE00; [21 83, 05, 05] -10ED; [5D 60, 05, 05] -10BD; [5D 60, 05, 8F] +D834 DE01; [21 85, 05, 05] -10EE; [5D 62, 05, 05] -10BE; [5D 62, 05, 8F] +D834 DE02; [21 87, 05, 05] -10F4; [5D 64, 05, 05] -10C4; [5D 64, 05, 8F] +D834 DE03; [21 89, 05, 05] -10EF; [5D 66, 05, 05] -10BF; [5D 66, 05, 8F] +D834 DE04; [21 8B, 05, 05] -10F0; [5D 68, 05, 05] -10C0; [5D 68, 05, 8F] +D834 DE05; [21 8D, 05, 05] -10F5; [5D 6A, 05, 05] -10C5; [5D 6A, 05, 8F] +D834 DE06; [21 8F, 05, 05] -10F6; [5D 6C, 05, 05] +D834 DE07; [21 91, 05, 05] -10F7; [5D 6E, 05, 05] +D834 DE08; [21 93, 05, 05] -10F8; [5D 70, 05, 05] +D834 DE09; [21 95, 05, 05] -0561; [5E 20, 05, 05] -0531; [5E 20, 05, 8F] +D834 DE0A; [21 97, 05, 05] -0562; [5E 22, 05, 05] -0532; [5E 22, 05, 8F] +D834 DE0B; [21 99, 05, 05] -0563; [5E 24, 05, 05] -0533; [5E 24, 05, 8F] +D834 DE0C; [21 9B, 05, 05] -0564; [5E 26, 05, 05] -0534; [5E 26, 05, 8F] +D834 DE0D; [21 9D, 05, 05] -0565; [5E 28, 05, 05] -0535; [5E 28, 05, 8F] -0587; [5E 28, 05, 09][5E 62, 05, 09] +D834 DE0E; [21 9F, 05, 05] -0566; [5E 2A, 05, 05] -0536; [5E 2A, 05, 8F] +D834 DE0F; [21 A1, 05, 05] -0567; [5E 2C, 05, 05] -0537; [5E 2C, 05, 8F] +D834 DE10; [21 A3, 05, 05] -0568; [5E 2E, 05, 05] -0538; [5E 2E, 05, 8F] +D834 DE11; [21 A5, 05, 05] -0569; [5E 30, 05, 05] -0539; [5E 30, 05, 8F] +D834 DE12; [21 A7, 05, 05] -056A; [5E 32, 05, 05] -053A; [5E 32, 05, 8F] +D834 DE13; [21 A9, 05, 05] -056B; [5E 34, 05, 05] -053B; [5E 34, 05, 8F] +D834 DE14; [21 AB, 05, 05] -056C; [5E 36, 05, 05] -053C; [5E 36, 05, 8F] +D834 DE15; [21 AD, 05, 05] -056D; [5E 38, 05, 05] -053D; [5E 38, 05, 8F] +D834 DE16; [21 AF, 05, 05] -056E; [5E 3A, 05, 05] -053E; [5E 3A, 05, 8F] +D834 DE17; [21 B1, 05, 05] -056F; [5E 3C, 05, 05] -053F; [5E 3C, 05, 8F] +D834 DE18; [21 B3, 05, 05] -0570; [5E 3E, 05, 05] -0540; [5E 3E, 05, 8F] +D834 DE19; [21 B5, 05, 05] -0571; [5E 40, 05, 05] -0541; [5E 40, 05, 8F] +D834 DE1A; [21 B7, 05, 05] -0572; [5E 42, 05, 05] -0542; [5E 42, 05, 8F] +D834 DE1B; [21 B9, 05, 05] -0573; [5E 44, 05, 05] -0543; [5E 44, 05, 8F] +D834 DE1C; [21 BB, 05, 05] -0574; [5E 46, 05, 05] -0544; [5E 46, 05, 8F] -FB14; [5E 46, 05, 09][5E 28, 05, 09] -FB15; [5E 46, 05, 09][5E 34, 05, 09] -FB17; [5E 46, 05, 09][5E 38, 05, 09] -FB13; [5E 46, 05, 09][5E 4A, 05, 09] +D834 DE1D; [21 BD, 05, 05] -0575; [5E 48, 05, 05] -0545; [5E 48, 05, 8F] +D834 DE1E; [21 BF, 05, 05] -0576; [5E 4A, 05, 05] -0546; [5E 4A, 05, 8F] +D834 DE1F; [21 C1, 05, 05] -0577; [5E 4C, 05, 05] -0547; [5E 4C, 05, 8F] +D834 DE20; [21 C3, 05, 05] -0578; [5E 4E, 05, 05] -0548; [5E 4E, 05, 8F] +D834 DE21; [21 C5, 05, 05] -0579; [5E 50, 05, 05] -0549; [5E 50, 05, 8F] +D834 DE22; [21 C7, 05, 05] -057A; [5E 52, 05, 05] -054A; [5E 52, 05, 8F] +D834 DE23; [21 C9, 05, 05] -057B; [5E 54, 05, 05] -054B; [5E 54, 05, 8F] +D834 DE24; [21 CB, 05, 05] -057C; [5E 56, 05, 05] -054C; [5E 56, 05, 8F] +D834 DE25; [21 CD, 05, 05] -057D; [5E 58, 05, 05] -054D; [5E 58, 05, 8F] +D834 DE26; [21 CF, 05, 05] -057E; [5E 5A, 05, 05] -054E; [5E 5A, 05, 8F] -FB16; [5E 5A, 05, 09][5E 4A, 05, 09] +D834 DE27; [21 D1, 05, 05] -057F; [5E 5C, 05, 05] -054F; [5E 5C, 05, 8F] +D834 DE28; [21 D3, 05, 05] -0580; [5E 5E, 05, 05] -0550; [5E 5E, 05, 8F] +D834 DE29; [21 D5, 05, 05] -0581; [5E 60, 05, 05] -0551; [5E 60, 05, 8F] +D834 DE2A; [21 D7, 05, 05] -0582; [5E 62, 05, 05] -0552; [5E 62, 05, 8F] +D834 DE2B; [21 D9, 05, 05] -0583; [5E 64, 05, 05] -0553; [5E 64, 05, 8F] +D834 DE2C; [21 DB, 05, 05] -0584; [5E 66, 05, 05] -0554; [5E 66, 05, 8F] +D834 DE2D; [21 DD, 05, 05] -0585; [5E 68, 05, 05] -0555; [5E 68, 05, 8F] +D834 DE2E; [21 DF, 05, 05] -0586; [5E 6A, 05, 05] -0556; [5E 6A, 05, 8F] +D834 DE2F; [21 E1, 05, 05] -0559; [5E 6C, 05, 05] +D834 DE30; [21 E3, 05, 05] -05D0; [5F 20, 05, 05] -2135; [5F 20, 05, 09] -FB21; [5F 20, 05, 0B] -FB2E; [5F 20, 05, 05][, D4 1D, 05] -FB2F; [5F 20, 05, 05][, D4 2D, 05] -FB30; [5F 20, 05, 05][, D4 7D, 05] -FB4F; [5F 20, 05, 09][5F 36, 05, 09] +D834 DE31; [21 E5, 05, 05] -05D1; [5F 22, 05, 05] -2136; [5F 22, 05, 09] -FB31; [5F 22, 05, 05][, D4 7D, 05] -FB4C; [5F 22, 05, 05][, D4 8D, 05] +D834 DE32; [21 E7, 05, 05] -05D2; [5F 24, 05, 05] -2137; [5F 24, 05, 09] -FB32; [5F 24, 05, 05][, D4 7D, 05] +D834 DE33; [21 E9, 05, 05] -05D3; [5F 26, 05, 05] -2138; [5F 26, 05, 09] -FB22; [5F 26, 05, 0B] -FB33; [5F 26, 05, 05][, D4 7D, 05] +D834 DE34; [21 EB, 05, 05] -05D4; [5F 28, 05, 05] -FB23; [5F 28, 05, 0B] -FB34; [5F 28, 05, 05][, D4 7D, 05] +D834 DE35; [21 ED, 05, 05] -05D5; [5F 2A, 05, 05] -FB4B; [5F 2A, 05, 05][, D4 3D, 05] -FB35; [5F 2A, 05, 05][, D4 7D, 05] -05F0; [5F 2A, 05, 09][5F 2A, 05, 09] -05F1; [5F 2A, 05, 09][5F 32, 05, 09] +D834 DE36; [21 EF, 05, 05] -05D6; [5F 2C, 05, 05] -FB36; [5F 2C, 05, 05][, D4 7D, 05] +D834 DE37; [21 F1, 05, 05] -05D7; [5F 2E, 05, 05] +D834 DE38; [21 F3, 05, 05] -05D8; [5F 30, 05, 05] -FB38; [5F 30, 05, 05][, D4 7D, 05] +D834 DE39; [21 F5, 05, 05] -05D9; [5F 32, 05, 05] -FB1D; [5F 32, 05, 05][, D3 E9, 05] -FB39; [5F 32, 05, 05][, D4 7D, 05] -05F2; [5F 32, 05, 09][5F 32, 05, 09] -FB1F; [5F 32, 05, 09][5F 32, 05, 09][, D4 1D, 05] - -05DB; [5F 34, 05, 05] -FB24; [5F 34, 05, 0B] -05DA; [5F 34, 05, 31] -FB3B; [5F 34, 05, 05][, D4 7D, 05] -FB3A; [5F 34, 05, 31][, D4 7D, 05] -FB4D; [5F 34, 05, 05][, D4 8D, 05] - -05DC; [5F 36, 05, 05] -FB25; [5F 36, 05, 0B] -FB3C; [5F 36, 05, 05][, D4 7D, 05] - -05DE; [5F 38, 05, 05] -FB26; [5F 38, 05, 0B] -05DD; [5F 38, 05, 31] -FB3E; [5F 38, 05, 05][, D4 7D, 05] - -05E0; [5F 3A, 05, 05] -05DF; [5F 3A, 05, 31] -FB40; [5F 3A, 05, 05][, D4 7D, 05] - -05E1; [5F 3C, 05, 05] -FB41; [5F 3C, 05, 05][, D4 7D, 05] - -05E2; [5F 3E, 05, 05] -FB20; [5F 3E, 05, 0B] - -05E4; [5F 40, 05, 05] -05E3; [5F 40, 05, 31] -FB44; [5F 40, 05, 05][, D4 7D, 05] -FB43; [5F 40, 05, 31][, D4 7D, 05] -FB4E; [5F 40, 05, 05][, D4 8D, 05] - -05E6; [5F 42, 05, 05] -05E5; [5F 42, 05, 31] -FB46; [5F 42, 05, 05][, D4 7D, 05] - -05E7; [5F 44, 05, 05] -FB47; [5F 44, 05, 05][, D4 7D, 05] - -05E8; [5F 46, 05, 05] -FB27; [5F 46, 05, 0B] -FB48; [5F 46, 05, 05][, D4 7D, 05] - -05E9; [5F 48, 05, 05] -FB2B; [5F 48, 05, 05][, D4 5D, 05] -FB2A; [5F 48, 05, 05][, D4 6D, 05] -FB49; [5F 48, 05, 05][, D4 7D, 05] -FB2D; [5F 48, 05, 05][, D4 7D, 05][, D4 5D, 05] -FB2C; [5F 48, 05, 05][, D4 7D, 05][, D4 6D, 05] - -05EA; [5F 4A, 05, 05] -FB28; [5F 4A, 05, 0B] -FB4A; [5F 4A, 05, 05][, D4 7D, 05] - -0621; [60 20, 05, 05] -0674; [60 20, 05, 09] -FE80; [60 20, 05, 33] -06FD; [60 20, 05, 09][, E0 9D, 09] - -0622; [60 22, 05, 05] -0627 0653; [60 22, 05, 05] -FE82; [60 22, 05, 31] -FE81; [60 22, 05, 33] - -0623; [60 24, 05, 05] -0627 0654; [60 24, 05, 05] -FE84; [60 24, 05, 31] -FE83; [60 24, 05, 33] - -0672; [60 26, 05, 05] - -0671; [60 28, 05, 05] -FB51; [60 28, 05, 31] -FB50; [60 28, 05, 33] - -0624; [60 2A, 05, 05] -0648 0654; [60 2A, 05, 05] -FE86; [60 2A, 05, 31] -FE85; [60 2A, 05, 33] - -0625; [60 2C, 05, 05] -0627 0655; [60 2C, 05, 05] -FE88; [60 2C, 05, 31] -FE87; [60 2C, 05, 33] - -0673; [60 2E, 05, 05] - -0626; [60 30, 05, 05] -064A 0654; [60 30, 05, 05] -FE8B; [60 30, 05, 2D] -FE8C; [60 30, 05, 2F] -FE8A; [60 30, 05, 31] -FE89; [60 30, 05, 33] -FBEB; [60 30, 05, 31][60 32, 05, 31] -FBEA; [60 30, 05, 33][60 32, 05, 33] -FC97; [60 30, 05, 2D][60 4E, 05, 2D] -FC00; [60 30, 05, 33][60 4E, 05, 33] -FC98; [60 30, 05, 2D][60 5A, 05, 2D] -FC01; [60 30, 05, 33][60 5A, 05, 33] -FC99; [60 30, 05, 2D][60 5C, 05, 2D] -FC64; [60 30, 05, 31][60 7C, 05, 31] -FC65; [60 30, 05, 31][60 7E, 05, 31] -FC9A; [60 30, 05, 2D][60 F2, 05, 2D] -FCDF; [60 30, 05, 2F][60 F2, 05, 2F] -FC66; [60 30, 05, 31][60 F2, 05, 31] -FC02; [60 30, 05, 33][60 F2, 05, 33] -FC67; [60 30, 05, 31][60 F4, 05, 31] -FC9B; [60 30, 05, 2D][61 05, 05, 2D] -FCE0; [60 30, 05, 2F][61 05, 05, 2F] -FBED; [60 30, 05, 31][61 0F, 05, 31] -FBEC; [60 30, 05, 33][61 0F, 05, 33] -FBEF; [60 30, 05, 31][61 11, 05, 31] -FBEE; [60 30, 05, 33][61 11, 05, 33] -FBF3; [60 30, 05, 31][61 17, 05, 31] -FBF2; [60 30, 05, 33][61 17, 05, 33] -FBF1; [60 30, 05, 31][61 19, 05, 31] -FBF0; [60 30, 05, 33][61 19, 05, 33] -FBF5; [60 30, 05, 31][61 1B, 05, 31] -FBF4; [60 30, 05, 33][61 1B, 05, 33] -FBFB; [60 30, 05, 2D][61 25, 05, 2D] -FBFA; [60 30, 05, 31][61 25, 05, 31] -FC68; [60 30, 05, 31][61 25, 05, 31] -FBF9; [60 30, 05, 33][61 25, 05, 33] -FC03; [60 30, 05, 33][61 25, 05, 33] -FC69; [60 30, 05, 31][61 27, 05, 31] -FC04; [60 30, 05, 33][61 27, 05, 33] -FBF8; [60 30, 05, 2D][61 2F, 05, 2D] -FBF7; [60 30, 05, 31][61 2F, 05, 31] -FBF6; [60 30, 05, 33][61 2F, 05, 33] - -0627; [60 32, 05, 05] -FE8E; [60 32, 05, 31] -FE8D; [60 32, 05, 33] -FD3C; [60 32, 05, 31][, D4 AD, 31] -FD3D; [60 32, 05, 33][, D4 AD, 33] -0675; [60 32, 05, 09][60 20, 05, 09] -FDF3; [60 32, 05, 33][60 CE, 05, 33][60 36, 05, 3D][60 7C, 05, 3D] -FDF2; [60 32, 05, 33][60 E8, 05, 33][60 E8, 05, 3D][61 05, 05, 3D] - -066E; [60 34, 05, 05] - -0628; [60 36, 05, 05] -FE91; [60 36, 05, 2D] -FE92; [60 36, 05, 2F] -FE90; [60 36, 05, 31] -FE8F; [60 36, 05, 33] -FC9C; [60 36, 05, 2D][60 4E, 05, 2D] -FC05; [60 36, 05, 33][60 4E, 05, 33] -FC9D; [60 36, 05, 2D][60 5A, 05, 2D] -FC06; [60 36, 05, 33][60 5A, 05, 33] -FDC2; [60 36, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FC9E; [60 36, 05, 2D][60 5C, 05, 2D] -FC07; [60 36, 05, 33][60 5C, 05, 33] -FD9E; [60 36, 05, 31][60 5C, 05, 31][61 27, 05, 3D] -FC6A; [60 36, 05, 31][60 7C, 05, 31] -FC6B; [60 36, 05, 31][60 7E, 05, 31] -FC9F; [60 36, 05, 2D][60 F2, 05, 2D] -FCE1; [60 36, 05, 2F][60 F2, 05, 2F] -FC6C; [60 36, 05, 31][60 F2, 05, 31] -FC08; [60 36, 05, 33][60 F2, 05, 33] -FC6D; [60 36, 05, 31][60 F4, 05, 31] -FCA0; [60 36, 05, 2D][61 05, 05, 2D] -FCE2; [60 36, 05, 2F][61 05, 05, 2F] -FC6E; [60 36, 05, 31][61 25, 05, 31] -FC09; [60 36, 05, 33][61 25, 05, 33] -FC6F; [60 36, 05, 31][61 27, 05, 31] -FC0A; [60 36, 05, 33][61 27, 05, 33] - -067B; [60 38, 05, 05] -FB54; [60 38, 05, 2D] -FB55; [60 38, 05, 2F] -FB53; [60 38, 05, 31] -FB52; [60 38, 05, 33] - -067E; [60 3A, 05, 05] -FB58; [60 3A, 05, 2D] -FB59; [60 3A, 05, 2F] -FB57; [60 3A, 05, 31] -FB56; [60 3A, 05, 33] - -0680; [60 3C, 05, 05] -FB5C; [60 3C, 05, 2D] -FB5D; [60 3C, 05, 2F] -FB5B; [60 3C, 05, 31] -FB5A; [60 3C, 05, 33] - -0629; [60 3E, 05, 05] -FE94; [60 3E, 05, 31] -FE93; [60 3E, 05, 33] - -062A; [60 40, 05, 05] -FE97; [60 40, 05, 2D] -FE98; [60 40, 05, 2F] -FE96; [60 40, 05, 31] -FE95; [60 40, 05, 33] -FCA1; [60 40, 05, 2D][60 4E, 05, 2D] -FC0B; [60 40, 05, 33][60 4E, 05, 33] -FD50; [60 40, 05, 2D][60 4E, 05, 2D][60 F2, 05, 3D] -FDA0; [60 40, 05, 31][60 4E, 05, 31][61 25, 05, 3D] -FD9F; [60 40, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FCA2; [60 40, 05, 2D][60 5A, 05, 2D] -FC0C; [60 40, 05, 33][60 5A, 05, 33] -FD52; [60 40, 05, 2D][60 5A, 05, 2D][60 4E, 05, 3D] -FD51; [60 40, 05, 31][60 5A, 05, 31][60 4E, 05, 3D] -FD53; [60 40, 05, 2D][60 5A, 05, 2D][60 F2, 05, 3D] -FCA3; [60 40, 05, 2D][60 5C, 05, 2D] -FC0D; [60 40, 05, 33][60 5C, 05, 33] -FD54; [60 40, 05, 2D][60 5C, 05, 2D][60 F2, 05, 3D] -FDA2; [60 40, 05, 31][60 5C, 05, 31][61 25, 05, 3D] -FDA1; [60 40, 05, 31][60 5C, 05, 31][61 27, 05, 3D] -FC70; [60 40, 05, 31][60 7C, 05, 31] -FC71; [60 40, 05, 31][60 7E, 05, 31] -FCA4; [60 40, 05, 2D][60 F2, 05, 2D] -FCE3; [60 40, 05, 2F][60 F2, 05, 2F] -FC72; [60 40, 05, 31][60 F2, 05, 31] -FC0E; [60 40, 05, 33][60 F2, 05, 33] -FD55; [60 40, 05, 2D][60 F2, 05, 2D][60 4E, 05, 3D] -FD56; [60 40, 05, 2D][60 F2, 05, 2D][60 5A, 05, 3D] -FD57; [60 40, 05, 2D][60 F2, 05, 2D][60 5C, 05, 3D] -FDA4; [60 40, 05, 31][60 F2, 05, 31][61 25, 05, 3D] -FDA3; [60 40, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC73; [60 40, 05, 31][60 F4, 05, 31] -FCA5; [60 40, 05, 2D][61 05, 05, 2D] -FCE4; [60 40, 05, 2F][61 05, 05, 2F] -FC74; [60 40, 05, 31][61 25, 05, 31] -FC0F; [60 40, 05, 33][61 25, 05, 33] -FC75; [60 40, 05, 31][61 27, 05, 31] -FC10; [60 40, 05, 33][61 27, 05, 33] - -062B; [60 42, 05, 05] -FE9B; [60 42, 05, 2D] -FE9C; [60 42, 05, 2F] -FE9A; [60 42, 05, 31] -FE99; [60 42, 05, 33] -FC11; [60 42, 05, 33][60 4E, 05, 33] -FC76; [60 42, 05, 31][60 7C, 05, 31] -FC77; [60 42, 05, 31][60 7E, 05, 31] -FCA6; [60 42, 05, 2D][60 F2, 05, 2D] -FCE5; [60 42, 05, 2F][60 F2, 05, 2F] -FC78; [60 42, 05, 31][60 F2, 05, 31] -FC12; [60 42, 05, 33][60 F2, 05, 33] -FC79; [60 42, 05, 31][60 F4, 05, 31] -FCE6; [60 42, 05, 2F][61 05, 05, 2F] -FC7A; [60 42, 05, 31][61 25, 05, 31] -FC13; [60 42, 05, 33][61 25, 05, 33] -FC7B; [60 42, 05, 31][61 27, 05, 31] -FC14; [60 42, 05, 33][61 27, 05, 33] - -0679; [60 44, 05, 05] -FB68; [60 44, 05, 2D] -FB69; [60 44, 05, 2F] -FB67; [60 44, 05, 31] -FB66; [60 44, 05, 33] - -067A; [60 46, 05, 05] -FB60; [60 46, 05, 2D] -FB61; [60 46, 05, 2F] -FB5F; [60 46, 05, 31] -FB5E; [60 46, 05, 33] - -067C; [60 48, 05, 05] - -067D; [60 4A, 05, 05] - -067F; [60 4C, 05, 05] -FB64; [60 4C, 05, 2D] -FB65; [60 4C, 05, 2F] -FB63; [60 4C, 05, 31] -FB62; [60 4C, 05, 33] - -062C; [60 4E, 05, 05] -FE9F; [60 4E, 05, 2D] -FEA0; [60 4E, 05, 2F] -FE9E; [60 4E, 05, 31] -FE9D; [60 4E, 05, 33] -FCA7; [60 4E, 05, 2D][60 5A, 05, 2D] -FC15; [60 4E, 05, 33][60 5A, 05, 33] -FDA6; [60 4E, 05, 31][60 5A, 05, 31][61 25, 05, 3D] -FDBE; [60 4E, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FDFB; [60 4E, 05, 33][60 E8, 05, 33][06, 05, 3D][60 4E, 05, 3D][60 E8, 05, 3D][60 32, 05, 3D][60 E8, 05, 3D][61 05, 05, 3D] -FCA8; [60 4E, 05, 2D][60 F2, 05, 2D] -FC16; [60 4E, 05, 33][60 F2, 05, 33] -FD59; [60 4E, 05, 2D][60 F2, 05, 2D][60 5A, 05, 3D] -FD58; [60 4E, 05, 31][60 F2, 05, 31][60 5A, 05, 3D] -FDA7; [60 4E, 05, 31][60 F2, 05, 31][61 25, 05, 3D] -FDA5; [60 4E, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FD1D; [60 4E, 05, 31][61 25, 05, 31] -FD01; [60 4E, 05, 33][61 25, 05, 33] -FD1E; [60 4E, 05, 31][61 27, 05, 31] -FD02; [60 4E, 05, 33][61 27, 05, 33] - -0683; [60 50, 05, 05] -FB78; [60 50, 05, 2D] -FB79; [60 50, 05, 2F] -FB77; [60 50, 05, 31] -FB76; [60 50, 05, 33] - -0684; [60 52, 05, 05] -FB74; [60 52, 05, 2D] -FB75; [60 52, 05, 2F] -FB73; [60 52, 05, 31] -FB72; [60 52, 05, 33] - -0686; [60 54, 05, 05] -FB7C; [60 54, 05, 2D] -FB7D; [60 54, 05, 2F] -FB7B; [60 54, 05, 31] -FB7A; [60 54, 05, 33] - -06BF; [60 56, 05, 05] - -0687; [60 58, 05, 05] -FB80; [60 58, 05, 2D] -FB81; [60 58, 05, 2F] -FB7F; [60 58, 05, 31] -FB7E; [60 58, 05, 33] - -062D; [60 5A, 05, 05] -FEA3; [60 5A, 05, 2D] -FEA4; [60 5A, 05, 2F] -FEA2; [60 5A, 05, 31] -FEA1; [60 5A, 05, 33] -FCA9; [60 5A, 05, 2D][60 4E, 05, 2D] -FC17; [60 5A, 05, 33][60 4E, 05, 33] -FDBF; [60 5A, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FCAA; [60 5A, 05, 2D][60 F2, 05, 2D] -FC18; [60 5A, 05, 33][60 F2, 05, 33] -FD5B; [60 5A, 05, 31][60 F2, 05, 31][61 25, 05, 3D] -FD5A; [60 5A, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FD1B; [60 5A, 05, 31][61 25, 05, 31] -FCFF; [60 5A, 05, 33][61 25, 05, 33] -FD1C; [60 5A, 05, 31][61 27, 05, 31] -FD00; [60 5A, 05, 33][61 27, 05, 33] - -062E; [60 5C, 05, 05] -FEA7; [60 5C, 05, 2D] -FEA8; [60 5C, 05, 2F] -FEA6; [60 5C, 05, 31] -FEA5; [60 5C, 05, 33] -FCAB; [60 5C, 05, 2D][60 4E, 05, 2D] -FC19; [60 5C, 05, 33][60 4E, 05, 33] -FC1A; [60 5C, 05, 33][60 5A, 05, 33] -FCAC; [60 5C, 05, 2D][60 F2, 05, 2D] -FC1B; [60 5C, 05, 33][60 F2, 05, 33] -FD1F; [60 5C, 05, 31][61 25, 05, 31] -FD03; [60 5C, 05, 33][61 25, 05, 33] -FD20; [60 5C, 05, 31][61 27, 05, 31] -FD04; [60 5C, 05, 33][61 27, 05, 33] - -0681; [60 5E, 05, 05] - -0682; [60 60, 05, 05] - -0685; [60 62, 05, 05] - -062F; [60 64, 05, 05] -FEAA; [60 64, 05, 31] -FEA9; [60 64, 05, 33] - -0630; [60 66, 05, 05] -FEAC; [60 66, 05, 31] -FEAB; [60 66, 05, 33] -FC5B; [60 66, 05, 33][, D5 91, 33] - -0688; [60 68, 05, 05] -FB89; [60 68, 05, 31] -FB88; [60 68, 05, 33] - -0689; [60 6A, 05, 05] - -068A; [60 6C, 05, 05] - -068B; [60 6E, 05, 05] - -068C; [60 70, 05, 05] -FB85; [60 70, 05, 31] -FB84; [60 70, 05, 33] - -068D; [60 72, 05, 05] -FB83; [60 72, 05, 31] -FB82; [60 72, 05, 33] - -068E; [60 74, 05, 05] -FB87; [60 74, 05, 31] -FB86; [60 74, 05, 33] - -068F; [60 76, 05, 05] - -0690; [60 78, 05, 05] - -06EE; [60 7A, 05, 05] - -0631; [60 7C, 05, 05] -FEAE; [60 7C, 05, 31] -FEAD; [60 7C, 05, 33] -FC5C; [60 7C, 05, 33][, D5 91, 33] -FDF6; [60 7C, 05, 33][60 94, 05, 33][61 11, 05, 3D][60 E8, 05, 3D] -FDFC; [60 7C, 05, 33][61 29, 05, 33][60 32, 05, 3D][60 E8, 05, 3D] - -0632; [60 7E, 05, 05] -FEB0; [60 7E, 05, 31] -FEAF; [60 7E, 05, 33] - -0691; [60 80, 05, 05] -FB8D; [60 80, 05, 31] -FB8C; [60 80, 05, 33] - -0692; [60 82, 05, 05] - -0693; [60 84, 05, 05] - -0694; [60 86, 05, 05] - -0695; [60 88, 05, 05] - -0696; [60 8A, 05, 05] - -0697; [60 8C, 05, 05] - -0698; [60 8E, 05, 05] -FB8B; [60 8E, 05, 31] -FB8A; [60 8E, 05, 33] - -0699; [60 90, 05, 05] - -06EF; [60 92, 05, 05] - -0633; [60 94, 05, 05] -FEB3; [60 94, 05, 2D] -FEB4; [60 94, 05, 2F] -FEB2; [60 94, 05, 31] -FEB1; [60 94, 05, 33] -FCAD; [60 94, 05, 2D][60 4E, 05, 2D] -FD34; [60 94, 05, 2F][60 4E, 05, 2F] -FC1C; [60 94, 05, 33][60 4E, 05, 33] -FD5D; [60 94, 05, 2D][60 4E, 05, 2D][60 5A, 05, 3D] -FD5E; [60 94, 05, 31][60 4E, 05, 31][61 25, 05, 3D] -FCAE; [60 94, 05, 2D][60 5A, 05, 2D] -FD35; [60 94, 05, 2F][60 5A, 05, 2F] -FC1D; [60 94, 05, 33][60 5A, 05, 33] -FD5C; [60 94, 05, 2D][60 5A, 05, 2D][60 4E, 05, 3D] -FCAF; [60 94, 05, 2D][60 5C, 05, 2D] -FD36; [60 94, 05, 2F][60 5C, 05, 2F] -FC1E; [60 94, 05, 33][60 5C, 05, 33] -FDA8; [60 94, 05, 31][60 5C, 05, 31][61 25, 05, 3D] -FDC6; [60 94, 05, 31][60 5C, 05, 31][61 27, 05, 3D] -FD2A; [60 94, 05, 31][60 7C, 05, 31] -FD0E; [60 94, 05, 33][60 7C, 05, 33] -FCB0; [60 94, 05, 2D][60 F2, 05, 2D] -FCE7; [60 94, 05, 2F][60 F2, 05, 2F] -FC1F; [60 94, 05, 33][60 F2, 05, 33] -FD61; [60 94, 05, 2D][60 F2, 05, 2D][60 4E, 05, 3D] -FD60; [60 94, 05, 2D][60 F2, 05, 2D][60 5A, 05, 3D] -FD5F; [60 94, 05, 31][60 F2, 05, 31][60 5A, 05, 3D] -FD63; [60 94, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FD62; [60 94, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FD31; [60 94, 05, 2D][61 05, 05, 2D] -FCE8; [60 94, 05, 2F][61 05, 05, 2F] -FD17; [60 94, 05, 31][61 25, 05, 31] -FCFB; [60 94, 05, 33][61 25, 05, 33] -FD18; [60 94, 05, 31][61 27, 05, 31] -FCFC; [60 94, 05, 33][61 27, 05, 33] - -0634; [60 96, 05, 05] -FEB7; [60 96, 05, 2D] -FEB8; [60 96, 05, 2F] -FEB6; [60 96, 05, 31] -FEB5; [60 96, 05, 33] -FD2D; [60 96, 05, 2D][60 4E, 05, 2D] -FD37; [60 96, 05, 2F][60 4E, 05, 2F] -FD25; [60 96, 05, 31][60 4E, 05, 31] -FD09; [60 96, 05, 33][60 4E, 05, 33] -FD69; [60 96, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FD2E; [60 96, 05, 2D][60 5A, 05, 2D] -FD38; [60 96, 05, 2F][60 5A, 05, 2F] -FD26; [60 96, 05, 31][60 5A, 05, 31] -FD0A; [60 96, 05, 33][60 5A, 05, 33] -FD68; [60 96, 05, 2D][60 5A, 05, 2D][60 F2, 05, 3D] -FD67; [60 96, 05, 31][60 5A, 05, 31][60 F2, 05, 3D] -FDAA; [60 96, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FD2F; [60 96, 05, 2D][60 5C, 05, 2D] -FD39; [60 96, 05, 2F][60 5C, 05, 2F] -FD27; [60 96, 05, 31][60 5C, 05, 31] -FD0B; [60 96, 05, 33][60 5C, 05, 33] -FD29; [60 96, 05, 31][60 7C, 05, 31] -FD0D; [60 96, 05, 33][60 7C, 05, 33] -FD30; [60 96, 05, 2D][60 F2, 05, 2D] -FCE9; [60 96, 05, 2F][60 F2, 05, 2F] -FD28; [60 96, 05, 31][60 F2, 05, 31] -FD0C; [60 96, 05, 33][60 F2, 05, 33] -FD6B; [60 96, 05, 2D][60 F2, 05, 2D][60 5C, 05, 3D] -FD6A; [60 96, 05, 31][60 F2, 05, 31][60 5C, 05, 3D] -FD6D; [60 96, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FD6C; [60 96, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FD32; [60 96, 05, 2D][61 05, 05, 2D] -FCEA; [60 96, 05, 2F][61 05, 05, 2F] -FD19; [60 96, 05, 31][61 25, 05, 31] -FCFD; [60 96, 05, 33][61 25, 05, 33] -FD1A; [60 96, 05, 31][61 27, 05, 31] -FCFE; [60 96, 05, 33][61 27, 05, 33] - -069A; [60 98, 05, 05] - -069B; [60 9A, 05, 05] - -069C; [60 9C, 05, 05] - -06FA; [60 9E, 05, 05] - -0635; [60 A0, 05, 05] -FEBB; [60 A0, 05, 2D] -FEBC; [60 A0, 05, 2F] -FEBA; [60 A0, 05, 31] -FEB9; [60 A0, 05, 33] -FCB1; [60 A0, 05, 2D][60 5A, 05, 2D] -FC20; [60 A0, 05, 33][60 5A, 05, 33] -FD65; [60 A0, 05, 2D][60 5A, 05, 2D][60 5A, 05, 3D] -FD64; [60 A0, 05, 31][60 5A, 05, 31][60 5A, 05, 3D] -FDA9; [60 A0, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FCB2; [60 A0, 05, 2D][60 5C, 05, 2D] -FD2B; [60 A0, 05, 31][60 7C, 05, 31] -FD0F; [60 A0, 05, 33][60 7C, 05, 33] -FDF5; [60 A0, 05, 33][60 E8, 05, 33][60 B0, 05, 3D][60 F2, 05, 3D] -FDF9; [60 A0, 05, 33][60 E8, 05, 33][61 25, 05, 3D] -FDFA; [60 A0, 05, 33][60 E8, 05, 33][61 25, 05, 3D][06, 05, 3D][60 32, 05, 3D][60 E8, 05, 3D][60 E8, 05, 3D][61 05, 05, 3D][06, 05, 3D][60 B0, 05, 3D][60 E8, 05, 3D][61 27, 05, 3D][61 05, 05, 3D][06, 05, 3D][61 11, 05, 3D][60 94, 05, 3D][60 E8, 05, 3D][60 F2, 05, 3D] -FDF0; [60 A0, 05, 33][60 E8, 05, 33][61 33, 05, 3D] -FCB3; [60 A0, 05, 2D][60 F2, 05, 2D] -FC21; [60 A0, 05, 33][60 F2, 05, 33] -FDC5; [60 A0, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FD66; [60 A0, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FD21; [60 A0, 05, 31][61 25, 05, 31] -FD05; [60 A0, 05, 33][61 25, 05, 33] -FD22; [60 A0, 05, 31][61 27, 05, 31] -FD06; [60 A0, 05, 33][61 27, 05, 33] - -0636; [60 A2, 05, 05] -FEBF; [60 A2, 05, 2D] -FEC0; [60 A2, 05, 2F] -FEBE; [60 A2, 05, 31] -FEBD; [60 A2, 05, 33] -FCB4; [60 A2, 05, 2D][60 4E, 05, 2D] -FC22; [60 A2, 05, 33][60 4E, 05, 33] -FCB5; [60 A2, 05, 2D][60 5A, 05, 2D] -FC23; [60 A2, 05, 33][60 5A, 05, 33] -FD6E; [60 A2, 05, 31][60 5A, 05, 31][61 25, 05, 3D] -FDAB; [60 A2, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FCB6; [60 A2, 05, 2D][60 5C, 05, 2D] -FC24; [60 A2, 05, 33][60 5C, 05, 33] -FD70; [60 A2, 05, 2D][60 5C, 05, 2D][60 F2, 05, 3D] -FD6F; [60 A2, 05, 31][60 5C, 05, 31][60 F2, 05, 3D] -FD2C; [60 A2, 05, 31][60 7C, 05, 31] -FD10; [60 A2, 05, 33][60 7C, 05, 33] -FCB7; [60 A2, 05, 2D][60 F2, 05, 2D] -FC25; [60 A2, 05, 33][60 F2, 05, 33] -FD23; [60 A2, 05, 31][61 25, 05, 31] -FD07; [60 A2, 05, 33][61 25, 05, 33] -FD24; [60 A2, 05, 31][61 27, 05, 31] -FD08; [60 A2, 05, 33][61 27, 05, 33] - -069D; [60 A4, 05, 05] - -069E; [60 A6, 05, 05] - -06FB; [60 A8, 05, 05] - -0637; [60 AA, 05, 05] -FEC3; [60 AA, 05, 2D] -FEC4; [60 AA, 05, 2F] -FEC2; [60 AA, 05, 31] -FEC1; [60 AA, 05, 33] -FCB8; [60 AA, 05, 2D][60 5A, 05, 2D] -FC26; [60 AA, 05, 33][60 5A, 05, 33] -FD33; [60 AA, 05, 2D][60 F2, 05, 2D] -FD3A; [60 AA, 05, 2F][60 F2, 05, 2F] -FC27; [60 AA, 05, 33][60 F2, 05, 33] -FD72; [60 AA, 05, 2D][60 F2, 05, 2D][60 5A, 05, 3D] -FD71; [60 AA, 05, 31][60 F2, 05, 31][60 5A, 05, 3D] -FD73; [60 AA, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FD74; [60 AA, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FD11; [60 AA, 05, 31][61 25, 05, 31] -FCF5; [60 AA, 05, 33][61 25, 05, 33] -FD12; [60 AA, 05, 31][61 27, 05, 31] -FCF6; [60 AA, 05, 33][61 27, 05, 33] - -0638; [60 AC, 05, 05] -FEC7; [60 AC, 05, 2D] -FEC8; [60 AC, 05, 2F] -FEC6; [60 AC, 05, 31] -FEC5; [60 AC, 05, 33] -FCB9; [60 AC, 05, 2D][60 F2, 05, 2D] -FD3B; [60 AC, 05, 2F][60 F2, 05, 2F] -FC28; [60 AC, 05, 33][60 F2, 05, 33] - -069F; [60 AE, 05, 05] - -0639; [60 B0, 05, 05] -FECB; [60 B0, 05, 2D] -FECC; [60 B0, 05, 2F] -FECA; [60 B0, 05, 31] -FEC9; [60 B0, 05, 33] -FCBA; [60 B0, 05, 2D][60 4E, 05, 2D] -FC29; [60 B0, 05, 33][60 4E, 05, 33] -FDC4; [60 B0, 05, 2D][60 4E, 05, 2D][60 F2, 05, 3D] -FD75; [60 B0, 05, 31][60 4E, 05, 31][60 F2, 05, 3D] -FDF7; [60 B0, 05, 33][60 E8, 05, 33][61 27, 05, 3D][61 05, 05, 3D] -FCBB; [60 B0, 05, 2D][60 F2, 05, 2D] -FC2A; [60 B0, 05, 33][60 F2, 05, 33] -FD77; [60 B0, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FD76; [60 B0, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FD78; [60 B0, 05, 31][60 F2, 05, 31][61 25, 05, 3D] -FDB6; [60 B0, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FD13; [60 B0, 05, 31][61 25, 05, 31] -FCF7; [60 B0, 05, 33][61 25, 05, 33] -FD14; [60 B0, 05, 31][61 27, 05, 31] -FCF8; [60 B0, 05, 33][61 27, 05, 33] - -063A; [60 B2, 05, 05] -FECF; [60 B2, 05, 2D] -FED0; [60 B2, 05, 2F] -FECE; [60 B2, 05, 31] -FECD; [60 B2, 05, 33] -FCBC; [60 B2, 05, 2D][60 4E, 05, 2D] -FC2B; [60 B2, 05, 33][60 4E, 05, 33] -FCBD; [60 B2, 05, 2D][60 F2, 05, 2D] -FC2C; [60 B2, 05, 33][60 F2, 05, 33] -FD79; [60 B2, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FD7B; [60 B2, 05, 31][60 F2, 05, 31][61 25, 05, 3D] -FD7A; [60 B2, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FD15; [60 B2, 05, 31][61 25, 05, 31] -FCF9; [60 B2, 05, 33][61 25, 05, 33] -FD16; [60 B2, 05, 31][61 27, 05, 31] -FCFA; [60 B2, 05, 33][61 27, 05, 33] - -06A0; [60 B4, 05, 05] - -06FC; [60 B6, 05, 05] - -0641; [60 B8, 05, 05] -FED3; [60 B8, 05, 2D] -FED4; [60 B8, 05, 2F] -FED2; [60 B8, 05, 31] -FED1; [60 B8, 05, 33] -FCBE; [60 B8, 05, 2D][60 4E, 05, 2D] -FC2D; [60 B8, 05, 33][60 4E, 05, 33] -FCBF; [60 B8, 05, 2D][60 5A, 05, 2D] -FC2E; [60 B8, 05, 33][60 5A, 05, 33] -FCC0; [60 B8, 05, 2D][60 5C, 05, 2D] -FC2F; [60 B8, 05, 33][60 5C, 05, 33] -FD7D; [60 B8, 05, 2D][60 5C, 05, 2D][60 F2, 05, 3D] -FD7C; [60 B8, 05, 31][60 5C, 05, 31][60 F2, 05, 3D] -FCC1; [60 B8, 05, 2D][60 F2, 05, 2D] -FC30; [60 B8, 05, 33][60 F2, 05, 33] -FDC1; [60 B8, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC7C; [60 B8, 05, 31][61 25, 05, 31] -FC31; [60 B8, 05, 33][61 25, 05, 33] -FC7D; [60 B8, 05, 31][61 27, 05, 31] -FC32; [60 B8, 05, 33][61 27, 05, 33] - -06A1; [60 BA, 05, 05] - -06A2; [60 BC, 05, 05] - -06A3; [60 BE, 05, 05] - -06A4; [60 C0, 05, 05] -FB6C; [60 C0, 05, 2D] -FB6D; [60 C0, 05, 2F] -FB6B; [60 C0, 05, 31] -FB6A; [60 C0, 05, 33] - -06A5; [60 C2, 05, 05] - -06A6; [60 C4, 05, 05] -FB70; [60 C4, 05, 2D] -FB71; [60 C4, 05, 2F] -FB6F; [60 C4, 05, 31] -FB6E; [60 C4, 05, 33] - -066F; [60 C6, 05, 05] - -0642; [60 C8, 05, 05] -FED7; [60 C8, 05, 2D] -FED8; [60 C8, 05, 2F] -FED6; [60 C8, 05, 31] -FED5; [60 C8, 05, 33] -FCC2; [60 C8, 05, 2D][60 5A, 05, 2D] -FC33; [60 C8, 05, 33][60 5A, 05, 33] -FDF1; [60 C8, 05, 33][60 E8, 05, 33][61 33, 05, 3D] -FCC3; [60 C8, 05, 2D][60 F2, 05, 2D] -FC34; [60 C8, 05, 33][60 F2, 05, 33] -FDB4; [60 C8, 05, 2D][60 F2, 05, 2D][60 5A, 05, 3D] -FD7E; [60 C8, 05, 31][60 F2, 05, 31][60 5A, 05, 3D] -FD7F; [60 C8, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FDB2; [60 C8, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC7E; [60 C8, 05, 31][61 25, 05, 31] -FC35; [60 C8, 05, 33][61 25, 05, 33] -FC7F; [60 C8, 05, 31][61 27, 05, 31] -FC36; [60 C8, 05, 33][61 27, 05, 33] - -06A7; [60 CA, 05, 05] - -06A8; [60 CC, 05, 05] - -0643; [60 CE, 05, 05] -FEDB; [60 CE, 05, 2D] -FEDC; [60 CE, 05, 2F] -FEDA; [60 CE, 05, 31] -FED9; [60 CE, 05, 33] -FC80; [60 CE, 05, 31][60 32, 05, 31] -FC37; [60 CE, 05, 33][60 32, 05, 33] -FCC4; [60 CE, 05, 2D][60 4E, 05, 2D] -FC38; [60 CE, 05, 33][60 4E, 05, 33] -FCC5; [60 CE, 05, 2D][60 5A, 05, 2D] -FC39; [60 CE, 05, 33][60 5A, 05, 33] -FCC6; [60 CE, 05, 2D][60 5C, 05, 2D] -FC3A; [60 CE, 05, 33][60 5C, 05, 33] -FCC7; [60 CE, 05, 2D][60 E8, 05, 2D] -FCEB; [60 CE, 05, 2F][60 E8, 05, 2F] -FC81; [60 CE, 05, 31][60 E8, 05, 31] -FC3B; [60 CE, 05, 33][60 E8, 05, 33] -FCC8; [60 CE, 05, 2D][60 F2, 05, 2D] -FCEC; [60 CE, 05, 2F][60 F2, 05, 2F] -FC82; [60 CE, 05, 31][60 F2, 05, 31] -FC3C; [60 CE, 05, 33][60 F2, 05, 33] -FDC3; [60 CE, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FDBB; [60 CE, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FDB7; [60 CE, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC83; [60 CE, 05, 31][61 25, 05, 31] -FC3D; [60 CE, 05, 33][61 25, 05, 33] -FC84; [60 CE, 05, 31][61 27, 05, 31] -FC3E; [60 CE, 05, 33][61 27, 05, 33] - -06A9; [60 D0, 05, 05] -FB90; [60 D0, 05, 2D] -FB91; [60 D0, 05, 2F] -FB8F; [60 D0, 05, 31] -FB8E; [60 D0, 05, 33] - -06AA; [60 D2, 05, 05] - -06AB; [60 D4, 05, 05] - -06AC; [60 D6, 05, 05] - -06AD; [60 D8, 05, 05] -FBD5; [60 D8, 05, 2D] -FBD6; [60 D8, 05, 2F] -FBD4; [60 D8, 05, 31] -FBD3; [60 D8, 05, 33] - -06AE; [60 DA, 05, 05] - -06AF; [60 DC, 05, 05] -FB94; [60 DC, 05, 2D] -FB95; [60 DC, 05, 2F] -FB93; [60 DC, 05, 31] -FB92; [60 DC, 05, 33] - -06B0; [60 DE, 05, 05] - -06B1; [60 E0, 05, 05] -FB9C; [60 E0, 05, 2D] -FB9D; [60 E0, 05, 2F] -FB9B; [60 E0, 05, 31] -FB9A; [60 E0, 05, 33] - -06B2; [60 E2, 05, 05] - -06B3; [60 E4, 05, 05] -FB98; [60 E4, 05, 2D] -FB99; [60 E4, 05, 2F] -FB97; [60 E4, 05, 31] -FB96; [60 E4, 05, 33] - -06B4; [60 E6, 05, 05] - -0644; [60 E8, 05, 05] -FEDF; [60 E8, 05, 2D] -FEE0; [60 E8, 05, 2F] -FEDE; [60 E8, 05, 31] -FEDD; [60 E8, 05, 33] -FEF6; [60 E8, 05, 31][60 22, 05, 31] -FEF5; [60 E8, 05, 33][60 22, 05, 33] -FEF8; [60 E8, 05, 31][60 24, 05, 31] -FEF7; [60 E8, 05, 33][60 24, 05, 33] -FEFA; [60 E8, 05, 31][60 2C, 05, 31] -FEF9; [60 E8, 05, 33][60 2C, 05, 33] -FEFC; [60 E8, 05, 31][60 32, 05, 31] -FEFB; [60 E8, 05, 33][60 32, 05, 33] -FCC9; [60 E8, 05, 2D][60 4E, 05, 2D] -FC3F; [60 E8, 05, 33][60 4E, 05, 33] -FD83; [60 E8, 05, 2D][60 4E, 05, 2D][60 4E, 05, 3D] -FD84; [60 E8, 05, 31][60 4E, 05, 31][60 4E, 05, 3D] -FDBA; [60 E8, 05, 2D][60 4E, 05, 2D][60 F2, 05, 3D] -FDBC; [60 E8, 05, 31][60 4E, 05, 31][60 F2, 05, 3D] -FDAC; [60 E8, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FCCA; [60 E8, 05, 2D][60 5A, 05, 2D] -FC40; [60 E8, 05, 33][60 5A, 05, 33] -FDB5; [60 E8, 05, 2D][60 5A, 05, 2D][60 F2, 05, 3D] -FD80; [60 E8, 05, 31][60 5A, 05, 31][60 F2, 05, 3D] -FD82; [60 E8, 05, 31][60 5A, 05, 31][61 25, 05, 3D] -FD81; [60 E8, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FCCB; [60 E8, 05, 2D][60 5C, 05, 2D] -FC41; [60 E8, 05, 33][60 5C, 05, 33] -FD86; [60 E8, 05, 2D][60 5C, 05, 2D][60 F2, 05, 3D] -FD85; [60 E8, 05, 31][60 5C, 05, 31][60 F2, 05, 3D] -FCCC; [60 E8, 05, 2D][60 F2, 05, 2D] -FCED; [60 E8, 05, 2F][60 F2, 05, 2F] -FC85; [60 E8, 05, 31][60 F2, 05, 31] -FC42; [60 E8, 05, 33][60 F2, 05, 33] -FD88; [60 E8, 05, 2D][60 F2, 05, 2D][60 5A, 05, 3D] -FD87; [60 E8, 05, 31][60 F2, 05, 31][60 5A, 05, 3D] -FDAD; [60 E8, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FCCD; [60 E8, 05, 2D][61 05, 05, 2D] -FC86; [60 E8, 05, 31][61 25, 05, 31] -FC43; [60 E8, 05, 33][61 25, 05, 33] -FC87; [60 E8, 05, 31][61 27, 05, 31] -FC44; [60 E8, 05, 33][61 27, 05, 33] - -06B5; [60 EA, 05, 05] - -06B6; [60 EC, 05, 05] - -06B7; [60 EE, 05, 05] - -06B8; [60 F0, 05, 05] - -0645; [60 F2, 05, 05] -FEE3; [60 F2, 05, 2D] -FEE4; [60 F2, 05, 2F] -FEE2; [60 F2, 05, 31] -FEE1; [60 F2, 05, 33] -06FE; [60 F2, 05, 09][, E0 9D, 09] -FC88; [60 F2, 05, 31][60 32, 05, 31] -FCCE; [60 F2, 05, 2D][60 4E, 05, 2D] -FC45; [60 F2, 05, 33][60 4E, 05, 33] -FD8C; [60 F2, 05, 2D][60 4E, 05, 2D][60 5A, 05, 3D] -FD92; [60 F2, 05, 2D][60 4E, 05, 2D][60 5C, 05, 3D] -FD8D; [60 F2, 05, 2D][60 4E, 05, 2D][60 F2, 05, 3D] -FDC0; [60 F2, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FCCF; [60 F2, 05, 2D][60 5A, 05, 2D] -FC46; [60 F2, 05, 33][60 5A, 05, 33] -FD89; [60 F2, 05, 2D][60 5A, 05, 2D][60 4E, 05, 3D] -FD8A; [60 F2, 05, 2D][60 5A, 05, 2D][60 F2, 05, 3D] -FDF4; [60 F2, 05, 33][60 5A, 05, 33][60 F2, 05, 3D][60 64, 05, 3D] -FD8B; [60 F2, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FCD0; [60 F2, 05, 2D][60 5C, 05, 2D] -FC47; [60 F2, 05, 33][60 5C, 05, 33] -FD8E; [60 F2, 05, 2D][60 5C, 05, 2D][60 4E, 05, 3D] -FD8F; [60 F2, 05, 2D][60 5C, 05, 2D][60 F2, 05, 3D] -FDB9; [60 F2, 05, 31][60 5C, 05, 31][61 27, 05, 3D] -FCD1; [60 F2, 05, 2D][60 F2, 05, 2D] -FC89; [60 F2, 05, 31][60 F2, 05, 31] -FC48; [60 F2, 05, 33][60 F2, 05, 33] -FDB1; [60 F2, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC49; [60 F2, 05, 33][61 25, 05, 33] -FC4A; [60 F2, 05, 33][61 27, 05, 33] - -0646; [60 F4, 05, 05] -FEE7; [60 F4, 05, 2D] -FEE8; [60 F4, 05, 2F] -FEE6; [60 F4, 05, 31] -FEE5; [60 F4, 05, 33] -FCD2; [60 F4, 05, 2D][60 4E, 05, 2D] -FC4B; [60 F4, 05, 33][60 4E, 05, 33] -FDB8; [60 F4, 05, 2D][60 4E, 05, 2D][60 5A, 05, 3D] -FDBD; [60 F4, 05, 31][60 4E, 05, 31][60 5A, 05, 3D] -FD98; [60 F4, 05, 2D][60 4E, 05, 2D][60 F2, 05, 3D] -FD97; [60 F4, 05, 31][60 4E, 05, 31][60 F2, 05, 3D] -FD99; [60 F4, 05, 31][60 4E, 05, 31][61 25, 05, 3D] -FDC7; [60 F4, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FCD3; [60 F4, 05, 2D][60 5A, 05, 2D] -FC4C; [60 F4, 05, 33][60 5A, 05, 33] -FD95; [60 F4, 05, 2D][60 5A, 05, 2D][60 F2, 05, 3D] -FD96; [60 F4, 05, 31][60 5A, 05, 31][61 25, 05, 3D] -FDB3; [60 F4, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FCD4; [60 F4, 05, 2D][60 5C, 05, 2D] -FC4D; [60 F4, 05, 33][60 5C, 05, 33] -FC8A; [60 F4, 05, 31][60 7C, 05, 31] -FC8B; [60 F4, 05, 31][60 7E, 05, 31] -FCD5; [60 F4, 05, 2D][60 F2, 05, 2D] -FCEE; [60 F4, 05, 2F][60 F2, 05, 2F] -FC8C; [60 F4, 05, 31][60 F2, 05, 31] -FC4E; [60 F4, 05, 33][60 F2, 05, 33] -FD9B; [60 F4, 05, 31][60 F2, 05, 31][61 25, 05, 3D] -FD9A; [60 F4, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC8D; [60 F4, 05, 31][60 F4, 05, 31] -FCD6; [60 F4, 05, 2D][61 05, 05, 2D] -FCEF; [60 F4, 05, 2F][61 05, 05, 2F] -FC8E; [60 F4, 05, 31][61 25, 05, 31] -FC4F; [60 F4, 05, 33][61 25, 05, 33] -FC8F; [60 F4, 05, 31][61 27, 05, 31] -FC50; [60 F4, 05, 33][61 27, 05, 33] - -06BA; [60 F6, 05, 05] -FB9F; [60 F6, 05, 31] -FB9E; [60 F6, 05, 33] - -06BB; [60 F8, 05, 05] -FBA2; [60 F8, 05, 2D] -FBA3; [60 F8, 05, 2F] -FBA1; [60 F8, 05, 31] -FBA0; [60 F8, 05, 33] - -06BC; [60 FA, 05, 05] - -06BD; [60 FC, 05, 05] - -06B9; [60 FE, 05, 05] - -0647; [61 05, 05, 05] -FEEB; [61 05, 05, 2D] -FEEC; [61 05, 05, 2F] -FEEA; [61 05, 05, 31] -FEE9; [61 05, 05, 33] -FCD9; [61 05, 05, 2D][, D5 91, 2D] -FCD7; [61 05, 05, 2D][60 4E, 05, 2D] -FC51; [61 05, 05, 33][60 4E, 05, 33] -FCD8; [61 05, 05, 2D][60 F2, 05, 2D] -FC52; [61 05, 05, 33][60 F2, 05, 33] -FD93; [61 05, 05, 2D][60 F2, 05, 2D][60 4E, 05, 3D] -FD94; [61 05, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FC53; [61 05, 05, 33][61 25, 05, 33] -FC54; [61 05, 05, 33][61 27, 05, 33] - -06BE; [61 07, 05, 05] -FBAC; [61 07, 05, 2D] -FBAD; [61 07, 05, 2F] -FBAB; [61 07, 05, 31] -FBAA; [61 07, 05, 33] - -06C1; [61 09, 05, 05] -FBA8; [61 09, 05, 2D] -FBA9; [61 09, 05, 2F] -FBA7; [61 09, 05, 31] -FBA6; [61 09, 05, 33] -06C2; [61 09, 05, 05][, D5 41, 05] - -06C3; [61 0B, 05, 05] - -06FF; [61 0D, 05, 05] - -06D5; [61 0F, 05, 05] -06C0; [61 0F, 05, 05][, D5 41, 05] -FBA5; [61 0F, 05, 31][, D5 41, 31] -FBA4; [61 0F, 05, 33][, D5 41, 33] - -0648; [61 11, 05, 05] -06E5; [61 11, 05, 09] -FEEE; [61 11, 05, 31] -FEED; [61 11, 05, 33] -0676; [61 11, 05, 09][60 20, 05, 09] -FDF8; [61 11, 05, 33][60 94, 05, 33][60 E8, 05, 3D][60 F2, 05, 3D] - -06C4; [61 13, 05, 05] - -06C5; [61 15, 05, 05] -FBE1; [61 15, 05, 31] -FBE0; [61 15, 05, 33] - -06C6; [61 17, 05, 05] -FBDA; [61 17, 05, 31] -FBD9; [61 17, 05, 33] - -06C7; [61 19, 05, 05] -FBD8; [61 19, 05, 31] -FBD7; [61 19, 05, 33] -0677; [61 19, 05, 09][60 20, 05, 09] -FBDD; [61 19, 05, 33][60 20, 05, 33] - -06C8; [61 1B, 05, 05] -FBDC; [61 1B, 05, 31] -FBDB; [61 1B, 05, 33] - -06C9; [61 1D, 05, 05] -FBE3; [61 1D, 05, 31] -FBE2; [61 1D, 05, 33] - -06CA; [61 1F, 05, 05] - -06CB; [61 21, 05, 05] -FBDF; [61 21, 05, 31] -FBDE; [61 21, 05, 33] - -06CF; [61 23, 05, 05] - -0649; [61 25, 05, 05] -FBE8; [61 25, 05, 2D] -FBE9; [61 25, 05, 2F] -FEF0; [61 25, 05, 31] -FEEF; [61 25, 05, 33] -FC90; [61 25, 05, 31][, D5 91, 31] -FC5D; [61 25, 05, 33][, D5 91, 33] - -064A; [61 27, 05, 05] -06E6; [61 27, 05, 09] -FEF3; [61 27, 05, 2D] -FEF4; [61 27, 05, 2F] -FEF2; [61 27, 05, 31] -FEF1; [61 27, 05, 33] -0678; [61 27, 05, 09][60 20, 05, 09] -FCDA; [61 27, 05, 2D][60 4E, 05, 2D] -FC55; [61 27, 05, 33][60 4E, 05, 33] -FDAF; [61 27, 05, 31][60 4E, 05, 31][61 27, 05, 3D] -FCDB; [61 27, 05, 2D][60 5A, 05, 2D] -FC56; [61 27, 05, 33][60 5A, 05, 33] -FDAE; [61 27, 05, 31][60 5A, 05, 31][61 27, 05, 3D] -FCDC; [61 27, 05, 2D][60 5C, 05, 2D] -FC57; [61 27, 05, 33][60 5C, 05, 33] -FC91; [61 27, 05, 31][60 7C, 05, 31] -FC92; [61 27, 05, 31][60 7E, 05, 31] -FCDD; [61 27, 05, 2D][60 F2, 05, 2D] -FCF0; [61 27, 05, 2F][60 F2, 05, 2F] -FC93; [61 27, 05, 31][60 F2, 05, 31] -FC58; [61 27, 05, 33][60 F2, 05, 33] -FD9D; [61 27, 05, 2D][60 F2, 05, 2D][60 F2, 05, 3D] -FD9C; [61 27, 05, 31][60 F2, 05, 31][60 F2, 05, 3D] -FDB0; [61 27, 05, 31][60 F2, 05, 31][61 27, 05, 3D] -FC94; [61 27, 05, 31][60 F4, 05, 31] -FCDE; [61 27, 05, 2D][61 05, 05, 2D] -FCF1; [61 27, 05, 2F][61 05, 05, 2F] -FC95; [61 27, 05, 31][61 25, 05, 31] -FC59; [61 27, 05, 33][61 25, 05, 33] -FC96; [61 27, 05, 31][61 27, 05, 31] -FC5A; [61 27, 05, 33][61 27, 05, 33] +D834 DE3A; [21 F7, 05, 05] -06CC; [61 29, 05, 05] -FBFE; [61 29, 05, 2D] -FBFF; [61 29, 05, 2F] -FBFD; [61 29, 05, 31] -FBFC; [61 29, 05, 33] +D834 DE3B; [21 F9, 05, 05] -06CD; [61 2B, 05, 05] +D834 DE3C; [21 FB, 05, 05] -06CE; [61 2D, 05, 05] +D834 DE3D; [21 FD, 05, 05] -06D0; [61 2F, 05, 05] -FBE6; [61 2F, 05, 2D] -FBE7; [61 2F, 05, 2F] -FBE5; [61 2F, 05, 31] -FBE4; [61 2F, 05, 33] +D834 DE3E; [22 05, 05, 05] -06D1; [61 31, 05, 05] +D834 DE3F; [22 07, 05, 05] -06D2; [61 33, 05, 05] -FBAF; [61 33, 05, 31] -FBAE; [61 33, 05, 33] -06D3; [61 33, 05, 05][, D5 41, 05] -FBB1; [61 33, 05, 31][, D5 41, 31] -FBB0; [61 33, 05, 33][, D5 41, 33] +D834 DE40; [22 09, 05, 05] -0710; [62 20, 05, 05] +D834 DE41; [22 0B, 05, 05] -0712; [62 22, 05, 05] -072D; [62 22, 05, 09][, E0 AD, 09] +D834 DE45; [22 0D, 05, 05] -0713; [62 24, 05, 05] -0714; [62 24, 05, 09][, E0 9D, 09] -072E; [62 24, 05, 09][, E0 AD, 09] +2FF0; [22 0F, 05, 05] -0716; [62 26, 05, 05] +2FF1; [22 11, 05, 05] -0715; [62 28, 05, 05] -072F; [62 28, 05, 09][, E0 AD, 09] +2FF2; [22 13, 05, 05] -0717; [62 2A, 05, 05] +2FF3; [22 15, 05, 05] -0718; [62 2C, 05, 05] +2FF4; [22 17, 05, 05] -0719; [62 2E, 05, 05] +2FF5; [22 19, 05, 05] -074D; [62 30, 05, 05] +2FF6; [22 1B, 05, 05] -071A; [62 32, 05, 05] +2FF7; [22 1D, 05, 05] -071B; [62 34, 05, 05] -071C; [62 34, 05, 09][, E0 9D, 09] +2FF8; [22 1F, 05, 05] -071D; [62 36, 05, 05] +2FF9; [22 21, 05, 05] -071E; [62 38, 05, 05] +2FFA; [22 23, 05, 05] -071F; [62 3A, 05, 05] +2FFB; [22 25, 05, 05] -074E; [62 3C, 05, 05] +31C0; [22 27, 05, 05] -0720; [62 3E, 05, 05] +31C1; [22 29, 05, 05] -0721; [62 40, 05, 05] +31C2; [22 2B, 05, 05] -0722; [62 42, 05, 05] +31C3; [22 2D, 05, 05] -0723; [62 44, 05, 05] -0724; [62 44, 05, 31] +31C4; [22 2F, 05, 05] -0725; [62 46, 05, 05] +31C5; [22 31, 05, 05] -0726; [62 48, 05, 05] -0727; [62 48, 05, 09][, E0 9D, 09] +31C6; [22 33, 05, 05] -074F; [62 4A, 05, 05] +31C7; [22 35, 05, 05] -0728; [62 4C, 05, 05] +31C8; [22 37, 05, 05] -0729; [62 4E, 05, 05] +31C9; [22 39, 05, 05] -072A; [62 50, 05, 05] +31CA; [22 3B, 05, 05] -072B; [62 52, 05, 05] +31CB; [22 3D, 05, 05] -072C; [62 54, 05, 05] +31CC; [22 3F, 05, 05] -0780; [63 20, 05, 05] +31CD; [22 41, 05, 05] -0799; [63 22, 05, 05] +31CE; [22 43, 05, 05] -079A; [63 24, 05, 05] +31CF; [22 45, 05, 05] -0781; [63 26, 05, 05] +3004; [22 47, 05, 05] -0782; [63 28, 05, 05] +3012; [22 49, 05, 05] +3036; [22 49, 05, 09] -0783; [63 2A, 05, 05] +3013; [22 4B, 05, 05] -079C; [63 2C, 05, 05] +3020; [22 4D, 05, 05] -0784; [63 2E, 05, 05] +3037; [22 4F, 05, 05] -0785; [63 30, 05, 05] +303E; [22 51, 05, 05] -0786; [63 32, 05, 05] +303F; [22 53, 05, 05] -0787; [63 34, 05, 05] +3190; [22 55, 05, 05] -07A2; [63 36, 05, 05] +3191; [22 57, 05, 05] -07A3; [63 38, 05, 05] +327F; [22 59, 05, 05] -0788; [63 3A, 05, 05] +FFFC; [22 5B, 05, 05] -07A5; [63 3C, 05, 05] +FFFD; [22 5D, 05, 05] -0789; [63 3E, 05, 05] +09F8; [22 5F, 05, 05] -078A; [63 40, 05, 05] +09F9; [22 61, 05, 05] -078B; [63 42, 05, 05] +0BF0; [22 63, 05, 05] -079B; [63 44, 05, 05] +0BF1; [22 65, 05, 05] -078C; [63 46, 05, 05] +0BF2; [22 67, 05, 05] -0798; [63 48, 05, 05] +1372; [22 69, 05, 05] -07A0; [63 4A, 05, 05] +1373; [22 6B, 05, 05] -07A1; [63 4C, 05, 05] +1374; [22 6D, 05, 05] -078D; [63 4E, 05, 05] +1375; [22 6F, 05, 05] -078E; [63 50, 05, 05] +1376; [22 71, 05, 05] -07A4; [63 52, 05, 05] +1377; [22 73, 05, 05] -078F; [63 54, 05, 05] +1378; [22 75, 05, 05] -0790; [63 56, 05, 05] +1379; [22 77, 05, 05] -079D; [63 58, 05, 05] +137A; [22 79, 05, 05] -079E; [63 5A, 05, 05] +137B; [22 7B, 05, 05] -079F; [63 5C, 05, 05] +137C; [22 7D, 05, 05] -0791; [63 5E, 05, 05] +2180; [22 7F, 05, 05] -0792; [63 60, 05, 05] +2181; [22 81, 05, 05] -0793; [63 62, 05, 05] +2182; [22 83, 05, 05] -0794; [63 64, 05, 05] +2CFD; [22 85, 05, 05] -0795; [63 66, 05, 05] +D800 DF22; [22 87, 05, 05] -0796; [63 68, 05, 05] +D800 DF23; [22 89, 05, 05] -0797; [63 6A, 05, 05] +D800 DD10; [22 8B, 05, 05] -07B1; [63 6C, 05, 05] +D800 DD11; [22 8D, 05, 05] -07A6; [63 6E, 05, 05] +D800 DD12; [22 8F, 05, 05] -07A7; [63 70, 05, 05] +D800 DD13; [22 91, 05, 05] -07A8; [63 72, 05, 05] +D800 DD14; [22 93, 05, 05] -07A9; [63 74, 05, 05] +D800 DD15; [22 95, 05, 05] -07AA; [63 76, 05, 05] +D800 DD16; [22 97, 05, 05] -07AB; [63 78, 05, 05] +D800 DD17; [22 99, 05, 05] -07AC; [63 7A, 05, 05] +D800 DD18; [22 9B, 05, 05] -07AD; [63 7C, 05, 05] +D800 DD19; [22 9D, 05, 05] -07AE; [63 7E, 05, 05] +D800 DD1A; [22 9F, 05, 05] -07AF; [63 80, 05, 05] +D800 DD1B; [22 A1, 05, 05] -07B0; [63 82, 05, 05] +D800 DD1C; [22 A3, 05, 05] -1200; [64 20, 05, 05] +D800 DD1D; [22 A5, 05, 05] -1201; [64 22, 05, 05] +D800 DD1E; [22 A7, 05, 05] -1202; [64 24, 05, 05] +D800 DD1F; [22 A9, 05, 05] -1203; [64 26, 05, 05] +D800 DD20; [22 AB, 05, 05] -1204; [64 28, 05, 05] +D800 DD21; [22 AD, 05, 05] -1205; [64 2A, 05, 05] +D800 DD22; [22 AF, 05, 05] -1206; [64 2C, 05, 05] +D800 DD23; [22 B1, 05, 05] -1208; [64 2E, 05, 05] +D800 DD24; [22 B3, 05, 05] -1209; [64 30, 05, 05] +D800 DD25; [22 B5, 05, 05] -120A; [64 32, 05, 05] +D800 DD26; [22 B7, 05, 05] -120B; [64 34, 05, 05] +D800 DD27; [22 B9, 05, 05] -120C; [64 36, 05, 05] +D800 DD28; [22 BB, 05, 05] -120D; [64 38, 05, 05] +D800 DD29; [22 BD, 05, 05] -120E; [64 3A, 05, 05] +D800 DD2A; [22 BF, 05, 05] -120F; [64 3C, 05, 05] +D800 DD2B; [22 C1, 05, 05] -1210; [64 3E, 05, 05] +D800 DD2C; [22 C3, 05, 05] -1211; [64 40, 05, 05] +D800 DD2D; [22 C5, 05, 05] -1212; [64 42, 05, 05] +D800 DD2E; [22 C7, 05, 05] -1213; [64 44, 05, 05] +D800 DD2F; [22 C9, 05, 05] -1214; [64 46, 05, 05] +D800 DD30; [22 CB, 05, 05] -1215; [64 48, 05, 05] +D800 DD31; [22 CD, 05, 05] -1216; [64 4A, 05, 05] +D800 DD32; [22 CF, 05, 05] -1217; [64 4C, 05, 05] +D800 DD33; [22 D1, 05, 05] -1218; [64 4E, 05, 05] +D800 DD40; [22 D3, 05, 05] -1219; [64 50, 05, 05] +D800 DD41; [22 D5, 05, 05] -121A; [64 52, 05, 05] +D800 DD44; [22 D7, 05, 05] -121B; [64 54, 05, 05] +D800 DD45; [22 D9, 05, 05] -121C; [64 56, 05, 05] +D800 DD46; [22 DB, 05, 05] -121D; [64 58, 05, 05] +D800 DD47; [22 DD, 05, 05] -121E; [64 5A, 05, 05] +D800 DD49; [22 DF, 05, 05] -121F; [64 5C, 05, 05] +D800 DD4A; [22 E1, 05, 05] -1220; [64 5E, 05, 05] +D800 DD4B; [22 E3, 05, 05] -1221; [64 60, 05, 05] +D800 DD4C; [22 E5, 05, 05] -1222; [64 62, 05, 05] +D800 DD4D; [22 E7, 05, 05] -1223; [64 64, 05, 05] +D800 DD4E; [22 E9, 05, 05] -1224; [64 66, 05, 05] +D800 DD50; [22 EB, 05, 05] -1225; [64 68, 05, 05] +D800 DD51; [22 ED, 05, 05] -1226; [64 6A, 05, 05] +D800 DD52; [22 EF, 05, 05] -1227; [64 6C, 05, 05] +D800 DD53; [22 F1, 05, 05] -1228; [64 6E, 05, 05] +D800 DD54; [22 F3, 05, 05] -1229; [64 70, 05, 05] +D800 DD55; [22 F5, 05, 05] -122A; [64 72, 05, 05] +D800 DD56; [22 F7, 05, 05] -122B; [64 74, 05, 05] +D800 DD57; [22 F9, 05, 05] -122C; [64 76, 05, 05] +D800 DD60; [22 FB, 05, 05] -122D; [64 78, 05, 05] +D800 DD61; [22 FD, 05, 05] -122E; [64 7A, 05, 05] +D800 DD62; [23 05, 05, 05] -122F; [64 7C, 05, 05] +D800 DD63; [23 07, 05, 05] -1230; [64 7E, 05, 05] +D800 DD64; [23 09, 05, 05] -1231; [64 80, 05, 05] +D800 DD65; [23 0B, 05, 05] -1232; [64 82, 05, 05] +D800 DD66; [23 0D, 05, 05] -1233; [64 84, 05, 05] +D800 DD67; [23 0F, 05, 05] -1234; [64 86, 05, 05] +D800 DD68; [23 11, 05, 05] -1235; [64 88, 05, 05] +D800 DD69; [23 13, 05, 05] -1236; [64 8A, 05, 05] +D800 DD6A; [23 15, 05, 05] -1237; [64 8C, 05, 05] +D800 DD6B; [23 17, 05, 05] -1238; [64 8E, 05, 05] +D800 DD6C; [23 19, 05, 05] -1239; [64 90, 05, 05] +D800 DD6D; [23 1B, 05, 05] -123A; [64 92, 05, 05] +D800 DD6E; [23 1D, 05, 05] -123B; [64 94, 05, 05] +D800 DD6F; [23 1F, 05, 05] -123C; [64 96, 05, 05] +D800 DD70; [23 21, 05, 05] -123D; [64 98, 05, 05] +D800 DD71; [23 23, 05, 05] -123E; [64 9A, 05, 05] +D800 DD72; [23 25, 05, 05] -123F; [64 9C, 05, 05] +D800 DD74; [23 27, 05, 05] -1240; [64 9E, 05, 05] +D800 DD75; [23 29, 05, 05] -1241; [64 A0, 05, 05] +D800 DD76; [23 2B, 05, 05] -1242; [64 A2, 05, 05] +D800 DD77; [23 2D, 05, 05] -1243; [64 A4, 05, 05] +D800 DD78; [23 2F, 05, 05] -1244; [64 A6, 05, 05] +D800 DFD3; [23 31, 05, 05] -1245; [64 A8, 05, 05] +D800 DFD4; [23 33, 05, 05] -1246; [64 AA, 05, 05] +D800 DFD5; [23 35, 05, 05] -1248; [64 AC, 05, 05] +D802 DD17; [23 37, 05, 05] -124A; [64 AE, 05, 05] +D802 DD18; [23 39, 05, 05] -124B; [64 B0, 05, 05] +D802 DD19; [23 3B, 05, 05] -124C; [64 B2, 05, 05] +D802 DE44; [23 3D, 05, 05] -124D; [64 B4, 05, 05] +D802 DE45; [23 3F, 05, 05] -1250; [64 B6, 05, 05] +D802 DE46; [23 41, 05, 05] -1251; [64 B8, 05, 05] +D802 DE47; [23 43, 05, 05] -1252; [64 BA, 05, 05] +D809 DC32; [23 45, 05, 05] -1253; [64 BC, 05, 05] +D809 DC33; [23 47, 05, 05] -1254; [64 BE, 05, 05] +D809 DC56; [23 49, 05, 05] -1255; [64 C0, 05, 05] +D809 DC57; [23 4B, 05, 05] -1256; [64 C2, 05, 05] +D809 DC5A; [23 4D, 05, 05] -1258; [64 C4, 05, 05] +D809 DC5B; [23 4F, 05, 05] -125A; [64 C6, 05, 05] +D809 DC5C; [23 51, 05, 05] -125B; [64 C8, 05, 05] +D809 DC5D; [23 53, 05, 05] -125C; [64 CA, 05, 05] +D809 DC5E; [23 55, 05, 05] -125D; [64 CC, 05, 05] +D809 DC5F; [23 57, 05, 05] -1260; [64 CE, 05, 05] +D809 DC60; [23 59, 05, 05] -1261; [64 D0, 05, 05] +D809 DC61; [23 5B, 05, 05] -1262; [64 D2, 05, 05] +D809 DC62; [23 5D, 05, 05] -1263; [64 D4, 05, 05] +D834 DF69; [23 5F, 05, 05] -1264; [64 D6, 05, 05] +D834 DF6A; [23 61, 05, 05] -1265; [64 D8, 05, 05] +D834 DF6B; [23 63, 05, 05] -1266; [64 DA, 05, 05] +D834 DF6C; [23 65, 05, 05] -1267; [64 DC, 05, 05] +D834 DF6D; [23 67, 05, 05] -1268; [64 DE, 05, 05] +D834 DF6E; [23 69, 05, 05] -1269; [64 E0, 05, 05] +D834 DF6F; [23 6B, 05, 05] -126A; [64 E2, 05, 05] +D834 DF70; [23 6D, 05, 05] -126B; [64 E4, 05, 05] +D834 DF71; [23 6F, 05, 05] -126C; [64 E6, 05, 05] +[variable top = 236F] # END OF VARIABLE SECTION!!! -126D; [64 E8, 05, 05] +02D0; [26 20, 05, 05] -126E; [64 EA, 05, 05] +02D1; [26 22, 05, 05] -126F; [64 EC, 05, 05] +0E46; [26 24, 05, 05] -1270; [64 EE, 05, 05] +0EC6; [26 26, 05, 05] -1271; [64 F0, 05, 05] +3005; [26 28, 05, 05] -1272; [64 F2, 05, 05] +303B; [26 2A, 05, 05] -1273; [64 F4, 05, 05] +3031; [26 2C, 05, 05] +3032; [26 2C, 05, 05][, E2 25, 05] -1274; [64 F6, 05, 05] +3033; [26 2E, 05, 05] +3034; [26 2E, 05, 05][, E2 25, 05] -1275; [64 F8, 05, 05] +3035; [26 30, 05, 05] -1276; [64 FA, 05, 05] +309D; [26 32, 05, 05] +309E; [26 32, 05, 05][, E2 25, 05] -1277; [64 FC, 05, 05] +30FC; [26 34, 05, 05] +FF70; [26 34, 05, A3] -1278; [64 FE, 05, 05] +30FD; [26 36, 05, 05] +30FE; [26 36, 05, 05][, E2 25, 05] -1279; [65 05, 05, 05] +00A4; [26 38, 05, 05] -127A; [65 07, 05, 05] +00A2; [26 3A, 05, 05] +FFE0; [26 3A, 05, 07] -127B; [65 09, 05, 05] +0024; [26 3C, 05, 05] +FF04; [26 3C, 05, 07] +FE69; [26 3C, 05, 1D] -127C; [65 0B, 05, 05] +00A3; [26 3E, 05, 05] +FFE1; [26 3E, 05, 07] -127D; [65 0D, 05, 05] +00A5; [26 40, 05, 05] +FFE5; [26 40, 05, 07] -127E; [65 0F, 05, 05] +060B; [26 42, 05, 05] -127F; [65 11, 05, 05] +09F2; [26 44, 05, 05] -1280; [65 13, 05, 05] +09F3; [26 46, 05, 05] -1281; [65 15, 05, 05] +0AF1; [26 48, 05, 05] -1282; [65 17, 05, 05] +0BF9; [26 4A, 05, 05] -1283; [65 19, 05, 05] +0E3F; [26 4C, 05, 05] -1284; [65 1B, 05, 05] +17DB; [26 4E, 05, 05] -1285; [65 1D, 05, 05] +20A0; [26 50, 05, 05] -1286; [65 1F, 05, 05] +20A1; [26 52, 05, 05] -1288; [65 21, 05, 05] +20A2; [26 54, 05, 05] -128A; [65 23, 05, 05] +20A3; [26 56, 05, 05] -128B; [65 25, 05, 05] +20A4; [26 58, 05, 05] -128C; [65 27, 05, 05] +20A5; [26 5A, 05, 05] -128D; [65 29, 05, 05] +20A6; [26 5C, 05, 05] -1290; [65 2B, 05, 05] +20A7; [26 5E, 05, 05] -1291; [65 2D, 05, 05] +20A9; [26 60, 05, 05] +FFE6; [26 60, 05, 07] -1292; [65 2F, 05, 05] +20AA; [26 62, 05, 05] -1293; [65 31, 05, 05] +20AB; [26 64, 05, 05] -1294; [65 33, 05, 05] +20AC; [26 66, 05, 05] -1295; [65 35, 05, 05] +20AD; [26 68, 05, 05] -1296; [65 37, 05, 05] +20AE; [26 6A, 05, 05] -1297; [65 39, 05, 05] +20AF; [26 6C, 05, 05] -1298; [65 3B, 05, 05] +20B0; [26 6E, 05, 05] -1299; [65 3D, 05, 05] +20B1; [26 70, 05, 05] -129A; [65 3F, 05, 05] +20B2; [26 72, 05, 05] + +20B3; [26 74, 05, 05] + +20B4; [26 76, 05, 05] + +20B5; [26 78, 05, 05] + +0030; [26 7A, 05, 05] +FF10; [26 7A, 05, 07] +D835 DFCE; [26 7A, 05, 0B] +D835 DFD8; [26 7A, 05, 0B] +D835 DFE2; [26 7A, 05, 0B] +D835 DFEC; [26 7A, 05, 0B] +D835 DFF6; [26 7A, 05, 0B] +24EA; [26 7A, 05, 0D] +24FF; [26 7A, 05, 0D] +2070; [26 7A, 05, 27] +2080; [26 7A, 05, 29] +0660; [26 7A, 05, 05][, E4 9D, 05] +06F0; [26 7A, 05, 05][, E4 AD, 05] +07C0; [26 7A, 05, 05][, E4 BD, 05] +D801 DCA0; [26 7A, 05, 05][, E4 DD, 05] +0966; [26 7A, 05, 05][, E4 ED, 05] +09E6; [26 7A, 05, 05][, E4 FD, 05] +0A66; [26 7A, 05, 05][, E5 11, 05] +0AE6; [26 7A, 05, 05][, E5 21, 05] +0B66; [26 7A, 05, 05][, E5 31, 05] +0BE6; [26 7A, 05, 05][, E5 41, 05] +0C66; [26 7A, 05, 05][, E5 51, 05] +0CE6; [26 7A, 05, 05][, E5 61, 05] +0D66; [26 7A, 05, 05][, E5 71, 05] +1946; [26 7A, 05, 05][, E5 81, 05] +19D0; [26 7A, 05, 05][, E5 91, 05] +0E50; [26 7A, 05, 05][, E5 A1, 05] +0ED0; [26 7A, 05, 05][, E5 B1, 05] +0F20; [26 7A, 05, 05][, E5 C1, 05] +0F33; [26 7A, 05, 09][, E5 C1, 09] +1040; [26 7A, 05, 05][, E5 D1, 05] +17E0; [26 7A, 05, 05][, E5 E1, 05] +17F0; [26 7A, 05, 05][, E5 F1, 05] +1B50; [26 7A, 05, 05][, E6 05, 05] +1810; [26 7A, 05, 05][, E6 15, 05] +3007; [26 7A, 05, 05][, E6 25, 05] +D800 DD8A; [26 7A, 05, 05][, E6 45, 05] +3358; [26 7A, 05, 09][E0 4B 22, 05, 09] + +0031; [26 7C, 05, 05] +FF11; [26 7C, 05, 07] +D835 DFCF; [26 7C, 05, 0B] +D835 DFD9; [26 7C, 05, 0B] +D835 DFE3; [26 7C, 05, 0B] +D835 DFED; [26 7C, 05, 0B] +D835 DFF7; [26 7C, 05, 0B] +2460; [26 7C, 05, 0D] +24F5; [26 7C, 05, 0D] +2776; [26 7C, 05, 0D] +2780; [26 7C, 05, 0D] +278A; [26 7C, 05, 0D] +00B9; [26 7C, 05, 27] +2081; [26 7C, 05, 29] +0661; [26 7C, 05, 05][, E4 9D, 05] +06F1; [26 7C, 05, 05][, E4 AD, 05] +07C1; [26 7C, 05, 05][, E4 BD, 05] +1369; [26 7C, 05, 05][, E4 CD, 05] +D801 DCA1; [26 7C, 05, 05][, E4 DD, 05] +0967; [26 7C, 05, 05][, E4 ED, 05] +09E7; [26 7C, 05, 05][, E4 FD, 05] +09F4; [26 7C, 05, 05][, E4 FD, 05] +0A67; [26 7C, 05, 05][, E5 11, 05] +0AE7; [26 7C, 05, 05][, E5 21, 05] +0B67; [26 7C, 05, 05][, E5 31, 05] +0BE7; [26 7C, 05, 05][, E5 41, 05] +0C67; [26 7C, 05, 05][, E5 51, 05] +0CE7; [26 7C, 05, 05][, E5 61, 05] +0D67; [26 7C, 05, 05][, E5 71, 05] +1947; [26 7C, 05, 05][, E5 81, 05] +19D1; [26 7C, 05, 05][, E5 91, 05] +0E51; [26 7C, 05, 05][, E5 A1, 05] +0ED1; [26 7C, 05, 05][, E5 B1, 05] +0F21; [26 7C, 05, 05][, E5 C1, 05] +0F2A; [26 7C, 05, 09][, E5 C1, 09] +1041; [26 7C, 05, 05][, E5 D1, 05] +17E1; [26 7C, 05, 05][, E5 E1, 05] +17F1; [26 7C, 05, 05][, E5 F1, 05] +1B51; [26 7C, 05, 05][, E6 05, 05] +1811; [26 7C, 05, 05][, E6 15, 05] +3021; [26 7C, 05, 05][, E6 25, 05] +D800 DD07; [26 7C, 05, 05][, E6 35, 05] +D800 DD42; [26 7C, 05, 05][, E6 45, 05] +D800 DD58; [26 7C, 05, 05][, E6 45, 05] +D800 DD59; [26 7C, 05, 05][, E6 45, 05] +D800 DD5A; [26 7C, 05, 05][, E6 45, 05] +D800 DF20; [26 7C, 05, 05][, E6 55, 05] +D800 DFD1; [26 7C, 05, 05][, E6 65, 05] +D809 DC15; [26 7C, 05, 05][, E6 75, 05] +D809 DC1E; [26 7C, 05, 05][, E6 75, 05] +D809 DC2C; [26 7C, 05, 05][, E6 75, 05] +D809 DC34; [26 7C, 05, 05][, E6 75, 05] +D809 DC4F; [26 7C, 05, 05][, E6 75, 05] +D809 DC58; [26 7C, 05, 05][, E6 75, 05] +D802 DD16; [26 7C, 05, 05][, E6 85, 05] +D802 DE40; [26 7C, 05, 05][, E6 95, 05] +D834 DF60; [26 7C, 05, 05][, E6 A5, 05] +2488; [26 7C, 05, 09][08 1D, 05, 09] +215F; [26 7C, 05, 3B][09 57, 05, 3B] +00BD; [26 7C, 05, 3B][09 57, 05, 3B][26 7E, 05, 3D] +2153; [26 7C, 05, 3B][09 57, 05, 3B][26 80, 05, 3D] +00BC; [26 7C, 05, 3B][09 57, 05, 3B][26 82, 05, 3D] +2155; [26 7C, 05, 3B][09 57, 05, 3B][26 84, 05, 3D] +2159; [26 7C, 05, 3B][09 57, 05, 3B][26 86, 05, 3D] +215B; [26 7C, 05, 3B][09 57, 05, 3B][26 8A, 05, 3D] +2469; [26 7C, 05, 0D][26 7A, 05, 0D] +24FE; [26 7C, 05, 0D][26 7A, 05, 0D] +277F; [26 7C, 05, 0D][26 7A, 05, 0D] +2789; [26 7C, 05, 0D][26 7A, 05, 0D] +2793; [26 7C, 05, 0D][26 7A, 05, 0D] +2491; [26 7C, 05, 09][26 7A, 05, 09][08 1D, 05, 3D] +33E9; [26 7C, 05, 09][26 7A, 05, 09][E0 34 F0, 05, 3D] +32C9; [26 7C, 05, 09][26 7A, 05, 09][E0 37 48, 05, 3D] +3362; [26 7C, 05, 09][26 7A, 05, 09][E0 4B 22, 05, 3D] +246A; [26 7C, 05, 0D][26 7C, 05, 0D] +24EB; [26 7C, 05, 0D][26 7C, 05, 0D] +2492; [26 7C, 05, 09][26 7C, 05, 09][08 1D, 05, 3D] +33EA; [26 7C, 05, 09][26 7C, 05, 09][E0 34 F0, 05, 3D] +32CA; [26 7C, 05, 09][26 7C, 05, 09][E0 37 48, 05, 3D] +3363; [26 7C, 05, 09][26 7C, 05, 09][E0 4B 22, 05, 3D] +246B; [26 7C, 05, 0D][26 7E, 05, 0D] +24EC; [26 7C, 05, 0D][26 7E, 05, 0D] +2493; [26 7C, 05, 09][26 7E, 05, 09][08 1D, 05, 3D] +33EB; [26 7C, 05, 09][26 7E, 05, 09][E0 34 F0, 05, 3D] +32CB; [26 7C, 05, 09][26 7E, 05, 09][E0 37 48, 05, 3D] +3364; [26 7C, 05, 09][26 7E, 05, 09][E0 4B 22, 05, 3D] +246C; [26 7C, 05, 0D][26 80, 05, 0D] +24ED; [26 7C, 05, 0D][26 80, 05, 0D] +2494; [26 7C, 05, 09][26 80, 05, 09][08 1D, 05, 3D] +33EC; [26 7C, 05, 09][26 80, 05, 09][E0 34 F0, 05, 3D] +3365; [26 7C, 05, 09][26 80, 05, 09][E0 4B 22, 05, 3D] +246D; [26 7C, 05, 0D][26 82, 05, 0D] +24EE; [26 7C, 05, 0D][26 82, 05, 0D] +2495; [26 7C, 05, 09][26 82, 05, 09][08 1D, 05, 3D] +33ED; [26 7C, 05, 09][26 82, 05, 09][E0 34 F0, 05, 3D] +3366; [26 7C, 05, 09][26 82, 05, 09][E0 4B 22, 05, 3D] +246E; [26 7C, 05, 0D][26 84, 05, 0D] +24EF; [26 7C, 05, 0D][26 84, 05, 0D] +2496; [26 7C, 05, 09][26 84, 05, 09][08 1D, 05, 3D] +33EE; [26 7C, 05, 09][26 84, 05, 09][E0 34 F0, 05, 3D] +3367; [26 7C, 05, 09][26 84, 05, 09][E0 4B 22, 05, 3D] +246F; [26 7C, 05, 0D][26 86, 05, 0D] +24F0; [26 7C, 05, 0D][26 86, 05, 0D] +2497; [26 7C, 05, 09][26 86, 05, 09][08 1D, 05, 3D] +33EF; [26 7C, 05, 09][26 86, 05, 09][E0 34 F0, 05, 3D] +3368; [26 7C, 05, 09][26 86, 05, 09][E0 4B 22, 05, 3D] +2470; [26 7C, 05, 0D][26 88, 05, 0D] +24F1; [26 7C, 05, 0D][26 88, 05, 0D] +2498; [26 7C, 05, 09][26 88, 05, 09][08 1D, 05, 3D] +33F0; [26 7C, 05, 09][26 88, 05, 09][E0 34 F0, 05, 3D] +3369; [26 7C, 05, 09][26 88, 05, 09][E0 4B 22, 05, 3D] +2471; [26 7C, 05, 0D][26 8A, 05, 0D] +24F2; [26 7C, 05, 0D][26 8A, 05, 0D] +2499; [26 7C, 05, 09][26 8A, 05, 09][08 1D, 05, 3D] +33F1; [26 7C, 05, 09][26 8A, 05, 09][E0 34 F0, 05, 3D] +336A; [26 7C, 05, 09][26 8A, 05, 09][E0 4B 22, 05, 3D] +2472; [26 7C, 05, 0D][26 8C, 05, 0D] +24F3; [26 7C, 05, 0D][26 8C, 05, 0D] +249A; [26 7C, 05, 09][26 8C, 05, 09][08 1D, 05, 3D] +33F2; [26 7C, 05, 09][26 8C, 05, 09][E0 34 F0, 05, 3D] +336B; [26 7C, 05, 09][26 8C, 05, 09][E0 4B 22, 05, 3D] +33E0; [26 7C, 05, 09][E0 34 F0, 05, 09] +32C0; [26 7C, 05, 09][E0 37 48, 05, 09] +3359; [26 7C, 05, 09][E0 4B 22, 05, 09] + +0032; [26 7E, 05, 05] +FF12; [26 7E, 05, 07] +D835 DFD0; [26 7E, 05, 0B] +D835 DFDA; [26 7E, 05, 0B] +D835 DFE4; [26 7E, 05, 0B] +D835 DFEE; [26 7E, 05, 0B] +D835 DFF8; [26 7E, 05, 0B] +2461; [26 7E, 05, 0D] +24F6; [26 7E, 05, 0D] +2777; [26 7E, 05, 0D] +2781; [26 7E, 05, 0D] +278B; [26 7E, 05, 0D] +00B2; [26 7E, 05, 27] +2082; [26 7E, 05, 29] +0662; [26 7E, 05, 05][, E4 9D, 05] +06F2; [26 7E, 05, 05][, E4 AD, 05] +07C2; [26 7E, 05, 05][, E4 BD, 05] +136A; [26 7E, 05, 05][, E4 CD, 05] +D801 DCA2; [26 7E, 05, 05][, E4 DD, 05] +0968; [26 7E, 05, 05][, E4 ED, 05] +09E8; [26 7E, 05, 05][, E4 FD, 05] +09F5; [26 7E, 05, 05][, E4 FD, 05] +0A68; [26 7E, 05, 05][, E5 11, 05] +0AE8; [26 7E, 05, 05][, E5 21, 05] +0B68; [26 7E, 05, 05][, E5 31, 05] +0BE8; [26 7E, 05, 05][, E5 41, 05] +0C68; [26 7E, 05, 05][, E5 51, 05] +0CE8; [26 7E, 05, 05][, E5 61, 05] +0D68; [26 7E, 05, 05][, E5 71, 05] +1948; [26 7E, 05, 05][, E5 81, 05] +19D2; [26 7E, 05, 05][, E5 91, 05] +0E52; [26 7E, 05, 05][, E5 A1, 05] +0ED2; [26 7E, 05, 05][, E5 B1, 05] +0F22; [26 7E, 05, 05][, E5 C1, 05] +0F2B; [26 7E, 05, 09][, E5 C1, 09] +1042; [26 7E, 05, 05][, E5 D1, 05] +17E2; [26 7E, 05, 05][, E5 E1, 05] +17F2; [26 7E, 05, 05][, E5 F1, 05] +1B52; [26 7E, 05, 05][, E6 05, 05] +1812; [26 7E, 05, 05][, E6 15, 05] +3022; [26 7E, 05, 05][, E6 25, 05] +D800 DD08; [26 7E, 05, 05][, E6 35, 05] +D800 DD5B; [26 7E, 05, 05][, E6 45, 05] +D800 DD5C; [26 7E, 05, 05][, E6 45, 05] +D800 DD5D; [26 7E, 05, 05][, E6 45, 05] +D800 DD5E; [26 7E, 05, 05][, E6 45, 05] +D800 DFD2; [26 7E, 05, 05][, E6 65, 05] +D809 DC00; [26 7E, 05, 05][, E6 75, 05] +D809 DC16; [26 7E, 05, 05][, E6 75, 05] +D809 DC1F; [26 7E, 05, 05][, E6 75, 05] +D809 DC23; [26 7E, 05, 05][, E6 75, 05] +D809 DC2D; [26 7E, 05, 05][, E6 75, 05] +D809 DC35; [26 7E, 05, 05][, E6 75, 05] +D809 DC4A; [26 7E, 05, 05][, E6 75, 05] +D809 DC50; [26 7E, 05, 05][, E6 75, 05] +D809 DC59; [26 7E, 05, 05][, E6 75, 05] +D802 DE41; [26 7E, 05, 05][, E6 95, 05] +D834 DF61; [26 7E, 05, 05][, E6 A5, 05] +2489; [26 7E, 05, 09][08 1D, 05, 09] +2154; [26 7E, 05, 3B][09 57, 05, 3B][26 80, 05, 3D] +2156; [26 7E, 05, 3B][09 57, 05, 3B][26 84, 05, 3D] +2473; [26 7E, 05, 0D][26 7A, 05, 0D] +24F4; [26 7E, 05, 0D][26 7A, 05, 0D] +249B; [26 7E, 05, 09][26 7A, 05, 09][08 1D, 05, 3D] +33F3; [26 7E, 05, 09][26 7A, 05, 09][E0 34 F0, 05, 3D] +336C; [26 7E, 05, 09][26 7A, 05, 09][E0 4B 22, 05, 3D] +3251; [26 7E, 05, 0D][26 7C, 05, 0D] +33F4; [26 7E, 05, 09][26 7C, 05, 09][E0 34 F0, 05, 3D] +336D; [26 7E, 05, 09][26 7C, 05, 09][E0 4B 22, 05, 3D] +3252; [26 7E, 05, 0D][26 7E, 05, 0D] +33F5; [26 7E, 05, 09][26 7E, 05, 09][E0 34 F0, 05, 3D] +336E; [26 7E, 05, 09][26 7E, 05, 09][E0 4B 22, 05, 3D] +3253; [26 7E, 05, 0D][26 80, 05, 0D] +33F6; [26 7E, 05, 09][26 80, 05, 09][E0 34 F0, 05, 3D] +336F; [26 7E, 05, 09][26 80, 05, 09][E0 4B 22, 05, 3D] +3254; [26 7E, 05, 0D][26 82, 05, 0D] +33F7; [26 7E, 05, 09][26 82, 05, 09][E0 34 F0, 05, 3D] +3370; [26 7E, 05, 09][26 82, 05, 09][E0 4B 22, 05, 3D] +3255; [26 7E, 05, 0D][26 84, 05, 0D] +33F8; [26 7E, 05, 09][26 84, 05, 09][E0 34 F0, 05, 3D] +3256; [26 7E, 05, 0D][26 86, 05, 0D] +33F9; [26 7E, 05, 09][26 86, 05, 09][E0 34 F0, 05, 3D] +3257; [26 7E, 05, 0D][26 88, 05, 0D] +33FA; [26 7E, 05, 09][26 88, 05, 09][E0 34 F0, 05, 3D] +3258; [26 7E, 05, 0D][26 8A, 05, 0D] +33FB; [26 7E, 05, 09][26 8A, 05, 09][E0 34 F0, 05, 3D] +3259; [26 7E, 05, 0D][26 8C, 05, 0D] +33FC; [26 7E, 05, 09][26 8C, 05, 09][E0 34 F0, 05, 3D] +33E1; [26 7E, 05, 09][E0 34 F0, 05, 09] +32C1; [26 7E, 05, 09][E0 37 48, 05, 09] +335A; [26 7E, 05, 09][E0 4B 22, 05, 09] + +0033; [26 80, 05, 05] +FF13; [26 80, 05, 07] +D835 DFD1; [26 80, 05, 0B] +D835 DFDB; [26 80, 05, 0B] +D835 DFE5; [26 80, 05, 0B] +D835 DFEF; [26 80, 05, 0B] +D835 DFF9; [26 80, 05, 0B] +2462; [26 80, 05, 0D] +24F7; [26 80, 05, 0D] +2778; [26 80, 05, 0D] +2782; [26 80, 05, 0D] +278C; [26 80, 05, 0D] +00B3; [26 80, 05, 27] +2083; [26 80, 05, 29] +0663; [26 80, 05, 05][, E4 9D, 05] +06F3; [26 80, 05, 05][, E4 AD, 05] +07C3; [26 80, 05, 05][, E4 BD, 05] +136B; [26 80, 05, 05][, E4 CD, 05] +D801 DCA3; [26 80, 05, 05][, E4 DD, 05] +0969; [26 80, 05, 05][, E4 ED, 05] +09E9; [26 80, 05, 05][, E4 FD, 05] +09F6; [26 80, 05, 05][, E4 FD, 05] +0A69; [26 80, 05, 05][, E5 11, 05] +0AE9; [26 80, 05, 05][, E5 21, 05] +0B69; [26 80, 05, 05][, E5 31, 05] +0BE9; [26 80, 05, 05][, E5 41, 05] +0C69; [26 80, 05, 05][, E5 51, 05] +0CE9; [26 80, 05, 05][, E5 61, 05] +0D69; [26 80, 05, 05][, E5 71, 05] +1949; [26 80, 05, 05][, E5 81, 05] +19D3; [26 80, 05, 05][, E5 91, 05] +0E53; [26 80, 05, 05][, E5 A1, 05] +0ED3; [26 80, 05, 05][, E5 B1, 05] +0F23; [26 80, 05, 05][, E5 C1, 05] +0F2C; [26 80, 05, 09][, E5 C1, 09] +1043; [26 80, 05, 05][, E5 D1, 05] +17E3; [26 80, 05, 05][, E5 E1, 05] +17F3; [26 80, 05, 05][, E5 F1, 05] +1B53; [26 80, 05, 05][, E6 05, 05] +1813; [26 80, 05, 05][, E6 15, 05] +3023; [26 80, 05, 05][, E6 25, 05] +D800 DD09; [26 80, 05, 05][, E6 35, 05] +D809 DC01; [26 80, 05, 05][, E6 75, 05] +D809 DC08; [26 80, 05, 05][, E6 75, 05] +D809 DC17; [26 80, 05, 05][, E6 75, 05] +D809 DC20; [26 80, 05, 05][, E6 75, 05] +D809 DC24; [26 80, 05, 05][, E6 75, 05] +D809 DC25; [26 80, 05, 05][, E6 75, 05] +D809 DC2E; [26 80, 05, 05][, E6 75, 05] +D809 DC2F; [26 80, 05, 05][, E6 75, 05] +D809 DC36; [26 80, 05, 05][, E6 75, 05] +D809 DC37; [26 80, 05, 05][, E6 75, 05] +D809 DC3A; [26 80, 05, 05][, E6 75, 05] +D809 DC3B; [26 80, 05, 05][, E6 75, 05] +D809 DC4B; [26 80, 05, 05][, E6 75, 05] +D809 DC51; [26 80, 05, 05][, E6 75, 05] +D802 DE42; [26 80, 05, 05][, E6 95, 05] +D834 DF62; [26 80, 05, 05][, E6 A5, 05] +248A; [26 80, 05, 09][08 1D, 05, 09] +00BE; [26 80, 05, 3B][09 57, 05, 3B][26 82, 05, 3D] +2157; [26 80, 05, 3B][09 57, 05, 3B][26 84, 05, 3D] +215C; [26 80, 05, 3B][09 57, 05, 3B][26 8A, 05, 3D] +325A; [26 80, 05, 0D][26 7A, 05, 0D] +33FD; [26 80, 05, 09][26 7A, 05, 09][E0 34 F0, 05, 3D] +325B; [26 80, 05, 0D][26 7C, 05, 0D] +33FE; [26 80, 05, 09][26 7C, 05, 09][E0 34 F0, 05, 3D] +325C; [26 80, 05, 0D][26 7E, 05, 0D] +325D; [26 80, 05, 0D][26 80, 05, 0D] +325E; [26 80, 05, 0D][26 82, 05, 0D] +325F; [26 80, 05, 0D][26 84, 05, 0D] +32B1; [26 80, 05, 0D][26 86, 05, 0D] +32B2; [26 80, 05, 0D][26 88, 05, 0D] +32B3; [26 80, 05, 0D][26 8A, 05, 0D] +32B4; [26 80, 05, 0D][26 8C, 05, 0D] +33E2; [26 80, 05, 09][E0 34 F0, 05, 09] +32C2; [26 80, 05, 09][E0 37 48, 05, 09] +335B; [26 80, 05, 09][E0 4B 22, 05, 09] + +0034; [26 82, 05, 05] +FF14; [26 82, 05, 07] +D835 DFD2; [26 82, 05, 0B] +D835 DFDC; [26 82, 05, 0B] +D835 DFE6; [26 82, 05, 0B] +D835 DFF0; [26 82, 05, 0B] +D835 DFFA; [26 82, 05, 0B] +2463; [26 82, 05, 0D] +24F8; [26 82, 05, 0D] +2779; [26 82, 05, 0D] +2783; [26 82, 05, 0D] +278D; [26 82, 05, 0D] +2074; [26 82, 05, 27] +2084; [26 82, 05, 29] +0664; [26 82, 05, 05][, E4 9D, 05] +06F4; [26 82, 05, 05][, E4 AD, 05] +07C4; [26 82, 05, 05][, E4 BD, 05] +136C; [26 82, 05, 05][, E4 CD, 05] +D801 DCA4; [26 82, 05, 05][, E4 DD, 05] +096A; [26 82, 05, 05][, E4 ED, 05] +09EA; [26 82, 05, 05][, E4 FD, 05] +09F7; [26 82, 05, 05][, E4 FD, 05] +0A6A; [26 82, 05, 05][, E5 11, 05] +0AEA; [26 82, 05, 05][, E5 21, 05] +0B6A; [26 82, 05, 05][, E5 31, 05] +0BEA; [26 82, 05, 05][, E5 41, 05] +0C6A; [26 82, 05, 05][, E5 51, 05] +0CEA; [26 82, 05, 05][, E5 61, 05] +0D6A; [26 82, 05, 05][, E5 71, 05] +194A; [26 82, 05, 05][, E5 81, 05] +19D4; [26 82, 05, 05][, E5 91, 05] +0E54; [26 82, 05, 05][, E5 A1, 05] +0ED4; [26 82, 05, 05][, E5 B1, 05] +0F24; [26 82, 05, 05][, E5 C1, 05] +0F2D; [26 82, 05, 09][, E5 C1, 09] +1044; [26 82, 05, 05][, E5 D1, 05] +17E4; [26 82, 05, 05][, E5 E1, 05] +17F4; [26 82, 05, 05][, E5 F1, 05] +1B54; [26 82, 05, 05][, E6 05, 05] +1814; [26 82, 05, 05][, E6 15, 05] +3024; [26 82, 05, 05][, E6 25, 05] +D800 DD0A; [26 82, 05, 05][, E6 35, 05] +D809 DC02; [26 82, 05, 05][, E6 75, 05] +D809 DC09; [26 82, 05, 05][, E6 75, 05] +D809 DC0F; [26 82, 05, 05][, E6 75, 05] +D809 DC18; [26 82, 05, 05][, E6 75, 05] +D809 DC21; [26 82, 05, 05][, E6 75, 05] +D809 DC26; [26 82, 05, 05][, E6 75, 05] +D809 DC30; [26 82, 05, 05][, E6 75, 05] +D809 DC38; [26 82, 05, 05][, E6 75, 05] +D809 DC3C; [26 82, 05, 05][, E6 75, 05] +D809 DC3D; [26 82, 05, 05][, E6 75, 05] +D809 DC3E; [26 82, 05, 05][, E6 75, 05] +D809 DC3F; [26 82, 05, 05][, E6 75, 05] +D809 DC4C; [26 82, 05, 05][, E6 75, 05] +D809 DC52; [26 82, 05, 05][, E6 75, 05] +D809 DC53; [26 82, 05, 05][, E6 75, 05] +D802 DE43; [26 82, 05, 05][, E6 95, 05] +D834 DF63; [26 82, 05, 05][, E6 A5, 05] +248B; [26 82, 05, 09][08 1D, 05, 09] +2158; [26 82, 05, 3B][09 57, 05, 3B][26 84, 05, 3D] +32B5; [26 82, 05, 0D][26 7A, 05, 0D] +32B6; [26 82, 05, 0D][26 7C, 05, 0D] +32B7; [26 82, 05, 0D][26 7E, 05, 0D] +32B8; [26 82, 05, 0D][26 80, 05, 0D] +32B9; [26 82, 05, 0D][26 82, 05, 0D] +32BA; [26 82, 05, 0D][26 84, 05, 0D] +32BB; [26 82, 05, 0D][26 86, 05, 0D] +32BC; [26 82, 05, 0D][26 88, 05, 0D] +32BD; [26 82, 05, 0D][26 8A, 05, 0D] +32BE; [26 82, 05, 0D][26 8C, 05, 0D] +33E3; [26 82, 05, 09][E0 34 F0, 05, 09] +32C3; [26 82, 05, 09][E0 37 48, 05, 09] +335C; [26 82, 05, 09][E0 4B 22, 05, 09] + +0035; [26 84, 05, 05] +FF15; [26 84, 05, 07] +D835 DFD3; [26 84, 05, 0B] +D835 DFDD; [26 84, 05, 0B] +D835 DFE7; [26 84, 05, 0B] +D835 DFF1; [26 84, 05, 0B] +D835 DFFB; [26 84, 05, 0B] +2464; [26 84, 05, 0D] +24F9; [26 84, 05, 0D] +277A; [26 84, 05, 0D] +2784; [26 84, 05, 0D] +278E; [26 84, 05, 0D] +2075; [26 84, 05, 27] +2085; [26 84, 05, 29] +0665; [26 84, 05, 05][, E4 9D, 05] +06F5; [26 84, 05, 05][, E4 AD, 05] +07C5; [26 84, 05, 05][, E4 BD, 05] +136D; [26 84, 05, 05][, E4 CD, 05] +D801 DCA5; [26 84, 05, 05][, E4 DD, 05] +096B; [26 84, 05, 05][, E4 ED, 05] +09EB; [26 84, 05, 05][, E4 FD, 05] +0A6B; [26 84, 05, 05][, E5 11, 05] +0AEB; [26 84, 05, 05][, E5 21, 05] +0B6B; [26 84, 05, 05][, E5 31, 05] +0BEB; [26 84, 05, 05][, E5 41, 05] +0C6B; [26 84, 05, 05][, E5 51, 05] +0CEB; [26 84, 05, 05][, E5 61, 05] +0D6B; [26 84, 05, 05][, E5 71, 05] +194B; [26 84, 05, 05][, E5 81, 05] +19D5; [26 84, 05, 05][, E5 91, 05] +0E55; [26 84, 05, 05][, E5 A1, 05] +0ED5; [26 84, 05, 05][, E5 B1, 05] +0F25; [26 84, 05, 05][, E5 C1, 05] +0F2E; [26 84, 05, 09][, E5 C1, 09] +1045; [26 84, 05, 05][, E5 D1, 05] +17E5; [26 84, 05, 05][, E5 E1, 05] +17F5; [26 84, 05, 05][, E5 F1, 05] +1B55; [26 84, 05, 05][, E6 05, 05] +1815; [26 84, 05, 05][, E6 15, 05] +3025; [26 84, 05, 05][, E6 25, 05] +D800 DD0B; [26 84, 05, 05][, E6 35, 05] +D800 DD43; [26 84, 05, 05][, E6 45, 05] +D800 DD48; [26 84, 05, 05][, E6 45, 05] +D800 DD4F; [26 84, 05, 05][, E6 45, 05] +D800 DD5F; [26 84, 05, 05][, E6 45, 05] +D800 DD73; [26 84, 05, 05][, E6 45, 05] +D800 DF21; [26 84, 05, 05][, E6 55, 05] +D809 DC03; [26 84, 05, 05][, E6 75, 05] +D809 DC0A; [26 84, 05, 05][, E6 75, 05] +D809 DC10; [26 84, 05, 05][, E6 75, 05] +D809 DC19; [26 84, 05, 05][, E6 75, 05] +D809 DC22; [26 84, 05, 05][, E6 75, 05] +D809 DC27; [26 84, 05, 05][, E6 75, 05] +D809 DC31; [26 84, 05, 05][, E6 75, 05] +D809 DC39; [26 84, 05, 05][, E6 75, 05] +D809 DC4D; [26 84, 05, 05][, E6 75, 05] +D809 DC54; [26 84, 05, 05][, E6 75, 05] +D809 DC55; [26 84, 05, 05][, E6 75, 05] +D834 DF64; [26 84, 05, 05][, E6 A5, 05] +248C; [26 84, 05, 09][08 1D, 05, 09] +215A; [26 84, 05, 3B][09 57, 05, 3B][26 86, 05, 3D] +215D; [26 84, 05, 3B][09 57, 05, 3B][26 8A, 05, 3D] +32BF; [26 84, 05, 0D][26 7A, 05, 0D] +33E4; [26 84, 05, 09][E0 34 F0, 05, 09] +32C4; [26 84, 05, 09][E0 37 48, 05, 09] +335D; [26 84, 05, 09][E0 4B 22, 05, 09] + +0036; [26 86, 05, 05] +FF16; [26 86, 05, 07] +D835 DFD4; [26 86, 05, 0B] +D835 DFDE; [26 86, 05, 0B] +D835 DFE8; [26 86, 05, 0B] +D835 DFF2; [26 86, 05, 0B] +D835 DFFC; [26 86, 05, 0B] +2465; [26 86, 05, 0D] +24FA; [26 86, 05, 0D] +277B; [26 86, 05, 0D] +2785; [26 86, 05, 0D] +278F; [26 86, 05, 0D] +2076; [26 86, 05, 27] +2086; [26 86, 05, 29] +0666; [26 86, 05, 05][, E4 9D, 05] +06F6; [26 86, 05, 05][, E4 AD, 05] +07C6; [26 86, 05, 05][, E4 BD, 05] +136E; [26 86, 05, 05][, E4 CD, 05] +D801 DCA6; [26 86, 05, 05][, E4 DD, 05] +096C; [26 86, 05, 05][, E4 ED, 05] +09EC; [26 86, 05, 05][, E4 FD, 05] +0A6C; [26 86, 05, 05][, E5 11, 05] +0AEC; [26 86, 05, 05][, E5 21, 05] +0B6C; [26 86, 05, 05][, E5 31, 05] +0BEC; [26 86, 05, 05][, E5 41, 05] +0C6C; [26 86, 05, 05][, E5 51, 05] +0CEC; [26 86, 05, 05][, E5 61, 05] +0D6C; [26 86, 05, 05][, E5 71, 05] +194C; [26 86, 05, 05][, E5 81, 05] +19D6; [26 86, 05, 05][, E5 91, 05] +0E56; [26 86, 05, 05][, E5 A1, 05] +0ED6; [26 86, 05, 05][, E5 B1, 05] +0F26; [26 86, 05, 05][, E5 C1, 05] +0F2F; [26 86, 05, 09][, E5 C1, 09] +1046; [26 86, 05, 05][, E5 D1, 05] +17E6; [26 86, 05, 05][, E5 E1, 05] +17F6; [26 86, 05, 05][, E5 F1, 05] +1B56; [26 86, 05, 05][, E6 05, 05] +1816; [26 86, 05, 05][, E6 15, 05] +3026; [26 86, 05, 05][, E6 25, 05] +D800 DD0C; [26 86, 05, 05][, E6 35, 05] +D809 DC04; [26 86, 05, 05][, E6 75, 05] +D809 DC0B; [26 86, 05, 05][, E6 75, 05] +D809 DC11; [26 86, 05, 05][, E6 75, 05] +D809 DC1A; [26 86, 05, 05][, E6 75, 05] +D809 DC28; [26 86, 05, 05][, E6 75, 05] +D809 DC40; [26 86, 05, 05][, E6 75, 05] +D809 DC4E; [26 86, 05, 05][, E6 75, 05] +D834 DF65; [26 86, 05, 05][, E6 A5, 05] +248D; [26 86, 05, 09][08 1D, 05, 09] +33E5; [26 86, 05, 09][E0 34 F0, 05, 09] +32C5; [26 86, 05, 09][E0 37 48, 05, 09] +335E; [26 86, 05, 09][E0 4B 22, 05, 09] + +0037; [26 88, 05, 05] +FF17; [26 88, 05, 07] +D835 DFD5; [26 88, 05, 0B] +D835 DFDF; [26 88, 05, 0B] +D835 DFE9; [26 88, 05, 0B] +D835 DFF3; [26 88, 05, 0B] +D835 DFFD; [26 88, 05, 0B] +2466; [26 88, 05, 0D] +24FB; [26 88, 05, 0D] +277C; [26 88, 05, 0D] +2786; [26 88, 05, 0D] +2790; [26 88, 05, 0D] +2077; [26 88, 05, 27] +2087; [26 88, 05, 29] +0667; [26 88, 05, 05][, E4 9D, 05] +06F7; [26 88, 05, 05][, E4 AD, 05] +07C7; [26 88, 05, 05][, E4 BD, 05] +136F; [26 88, 05, 05][, E4 CD, 05] +D801 DCA7; [26 88, 05, 05][, E4 DD, 05] +096D; [26 88, 05, 05][, E4 ED, 05] +09ED; [26 88, 05, 05][, E4 FD, 05] +0A6D; [26 88, 05, 05][, E5 11, 05] +0AED; [26 88, 05, 05][, E5 21, 05] +0B6D; [26 88, 05, 05][, E5 31, 05] +0BED; [26 88, 05, 05][, E5 41, 05] +0C6D; [26 88, 05, 05][, E5 51, 05] +0CED; [26 88, 05, 05][, E5 61, 05] +0D6D; [26 88, 05, 05][, E5 71, 05] +194D; [26 88, 05, 05][, E5 81, 05] +19D7; [26 88, 05, 05][, E5 91, 05] +0E57; [26 88, 05, 05][, E5 A1, 05] +0ED7; [26 88, 05, 05][, E5 B1, 05] +0F27; [26 88, 05, 05][, E5 C1, 05] +0F30; [26 88, 05, 09][, E5 C1, 09] +1047; [26 88, 05, 05][, E5 D1, 05] +17E7; [26 88, 05, 05][, E5 E1, 05] +17F7; [26 88, 05, 05][, E5 F1, 05] +1B57; [26 88, 05, 05][, E6 05, 05] +1817; [26 88, 05, 05][, E6 15, 05] +3027; [26 88, 05, 05][, E6 25, 05] +D800 DD0D; [26 88, 05, 05][, E6 35, 05] +D809 DC05; [26 88, 05, 05][, E6 75, 05] +D809 DC0C; [26 88, 05, 05][, E6 75, 05] +D809 DC12; [26 88, 05, 05][, E6 75, 05] +D809 DC1B; [26 88, 05, 05][, E6 75, 05] +D809 DC29; [26 88, 05, 05][, E6 75, 05] +D809 DC41; [26 88, 05, 05][, E6 75, 05] +D809 DC42; [26 88, 05, 05][, E6 75, 05] +D809 DC43; [26 88, 05, 05][, E6 75, 05] +D834 DF66; [26 88, 05, 05][, E6 A5, 05] +248E; [26 88, 05, 09][08 1D, 05, 09] +215E; [26 88, 05, 3B][09 57, 05, 3B][26 8A, 05, 3D] +33E6; [26 88, 05, 09][E0 34 F0, 05, 09] +32C6; [26 88, 05, 09][E0 37 48, 05, 09] +335F; [26 88, 05, 09][E0 4B 22, 05, 09] + +0038; [26 8A, 05, 05] +FF18; [26 8A, 05, 07] +D835 DFD6; [26 8A, 05, 0B] +D835 DFE0; [26 8A, 05, 0B] +D835 DFEA; [26 8A, 05, 0B] +D835 DFF4; [26 8A, 05, 0B] +D835 DFFE; [26 8A, 05, 0B] +2467; [26 8A, 05, 0D] +24FC; [26 8A, 05, 0D] +277D; [26 8A, 05, 0D] +2787; [26 8A, 05, 0D] +2791; [26 8A, 05, 0D] +2078; [26 8A, 05, 27] +2088; [26 8A, 05, 29] +0668; [26 8A, 05, 05][, E4 9D, 05] +06F8; [26 8A, 05, 05][, E4 AD, 05] +07C8; [26 8A, 05, 05][, E4 BD, 05] +1370; [26 8A, 05, 05][, E4 CD, 05] +D801 DCA8; [26 8A, 05, 05][, E4 DD, 05] +096E; [26 8A, 05, 05][, E4 ED, 05] +09EE; [26 8A, 05, 05][, E4 FD, 05] +0A6E; [26 8A, 05, 05][, E5 11, 05] +0AEE; [26 8A, 05, 05][, E5 21, 05] +0B6E; [26 8A, 05, 05][, E5 31, 05] +0BEE; [26 8A, 05, 05][, E5 41, 05] +0C6E; [26 8A, 05, 05][, E5 51, 05] +0CEE; [26 8A, 05, 05][, E5 61, 05] +0D6E; [26 8A, 05, 05][, E5 71, 05] +194E; [26 8A, 05, 05][, E5 81, 05] +19D8; [26 8A, 05, 05][, E5 91, 05] +0E58; [26 8A, 05, 05][, E5 A1, 05] +0ED8; [26 8A, 05, 05][, E5 B1, 05] +0F28; [26 8A, 05, 05][, E5 C1, 05] +0F31; [26 8A, 05, 09][, E5 C1, 09] +1048; [26 8A, 05, 05][, E5 D1, 05] +17E8; [26 8A, 05, 05][, E5 E1, 05] +17F8; [26 8A, 05, 05][, E5 F1, 05] +1B58; [26 8A, 05, 05][, E6 05, 05] +1818; [26 8A, 05, 05][, E6 15, 05] +3028; [26 8A, 05, 05][, E6 25, 05] +D800 DD0E; [26 8A, 05, 05][, E6 35, 05] +D809 DC06; [26 8A, 05, 05][, E6 75, 05] +D809 DC0D; [26 8A, 05, 05][, E6 75, 05] +D809 DC13; [26 8A, 05, 05][, E6 75, 05] +D809 DC1C; [26 8A, 05, 05][, E6 75, 05] +D809 DC2A; [26 8A, 05, 05][, E6 75, 05] +D809 DC44; [26 8A, 05, 05][, E6 75, 05] +D809 DC45; [26 8A, 05, 05][, E6 75, 05] +D834 DF67; [26 8A, 05, 05][, E6 A5, 05] +248F; [26 8A, 05, 09][08 1D, 05, 09] +33E7; [26 8A, 05, 09][E0 34 F0, 05, 09] +32C7; [26 8A, 05, 09][E0 37 48, 05, 09] +3360; [26 8A, 05, 09][E0 4B 22, 05, 09] + +0039; [26 8C, 05, 05] +FF19; [26 8C, 05, 07] +D835 DFD7; [26 8C, 05, 0B] +D835 DFE1; [26 8C, 05, 0B] +D835 DFEB; [26 8C, 05, 0B] +D835 DFF5; [26 8C, 05, 0B] +D835 DFFF; [26 8C, 05, 0B] +2468; [26 8C, 05, 0D] +24FD; [26 8C, 05, 0D] +277E; [26 8C, 05, 0D] +2788; [26 8C, 05, 0D] +2792; [26 8C, 05, 0D] +2079; [26 8C, 05, 27] +2089; [26 8C, 05, 29] +0669; [26 8C, 05, 05][, E4 9D, 05] +06F9; [26 8C, 05, 05][, E4 AD, 05] +07C9; [26 8C, 05, 05][, E4 BD, 05] +1371; [26 8C, 05, 05][, E4 CD, 05] +D801 DCA9; [26 8C, 05, 05][, E4 DD, 05] +096F; [26 8C, 05, 05][, E4 ED, 05] +09EF; [26 8C, 05, 05][, E4 FD, 05] +0A6F; [26 8C, 05, 05][, E5 11, 05] +0AEF; [26 8C, 05, 05][, E5 21, 05] +0B6F; [26 8C, 05, 05][, E5 31, 05] +0BEF; [26 8C, 05, 05][, E5 41, 05] +0C6F; [26 8C, 05, 05][, E5 51, 05] +0CEF; [26 8C, 05, 05][, E5 61, 05] +0D6F; [26 8C, 05, 05][, E5 71, 05] +194F; [26 8C, 05, 05][, E5 81, 05] +19D9; [26 8C, 05, 05][, E5 91, 05] +0E59; [26 8C, 05, 05][, E5 A1, 05] +0ED9; [26 8C, 05, 05][, E5 B1, 05] +0F29; [26 8C, 05, 05][, E5 C1, 05] +0F32; [26 8C, 05, 09][, E5 C1, 09] +1049; [26 8C, 05, 05][, E5 D1, 05] +17E9; [26 8C, 05, 05][, E5 E1, 05] +17F9; [26 8C, 05, 05][, E5 F1, 05] +1B59; [26 8C, 05, 05][, E6 05, 05] +1819; [26 8C, 05, 05][, E6 15, 05] +3029; [26 8C, 05, 05][, E6 25, 05] +D800 DD0F; [26 8C, 05, 05][, E6 35, 05] +D809 DC07; [26 8C, 05, 05][, E6 75, 05] +D809 DC0E; [26 8C, 05, 05][, E6 75, 05] +D809 DC14; [26 8C, 05, 05][, E6 75, 05] +D809 DC1D; [26 8C, 05, 05][, E6 75, 05] +D809 DC2B; [26 8C, 05, 05][, E6 75, 05] +D809 DC46; [26 8C, 05, 05][, E6 75, 05] +D809 DC47; [26 8C, 05, 05][, E6 75, 05] +D809 DC48; [26 8C, 05, 05][, E6 75, 05] +D809 DC49; [26 8C, 05, 05][, E6 75, 05] +D834 DF68; [26 8C, 05, 05][, E6 A5, 05] +2490; [26 8C, 05, 09][08 1D, 05, 09] +33E8; [26 8C, 05, 09][E0 34 F0, 05, 09] +32C8; [26 8C, 05, 09][E0 37 48, 05, 09] +3361; [26 8C, 05, 09][E0 4B 22, 05, 09] + +0061; [29, 05, 05] +FF41; [29, 05, 07] +0363; [29, 05, 09] +D835 DC1A; [29, 05, 0B] +D835 DC4E; [29, 05, 0B] +D835 DC82; [29, 05, 0B] +D835 DCB6; [29, 05, 0B] +D835 DCEA; [29, 05, 0B] +D835 DD1E; [29, 05, 0B] +D835 DD52; [29, 05, 0B] +D835 DD86; [29, 05, 0B] +D835 DDBA; [29, 05, 0B] +D835 DDEE; [29, 05, 0B] +D835 DE22; [29, 05, 0B] +D835 DE56; [29, 05, 0B] +D835 DE8A; [29, 05, 0B] +24D0; [29, 05, 0D] +0041; [29, 05, 8F] +FF21; [29, 05, 91] +D835 DC00; [29, 05, 95] +D835 DC34; [29, 05, 95] +D835 DC68; [29, 05, 95] +D835 DC9C; [29, 05, 95] +D835 DCD0; [29, 05, 95] +D835 DD04; [29, 05, 95] +D835 DD38; [29, 05, 95] +D835 DD6C; [29, 05, 95] +D835 DDA0; [29, 05, 95] +D835 DDD4; [29, 05, 95] +D835 DE08; [29, 05, 95] +D835 DE3C; [29, 05, 95] +D835 DE70; [29, 05, 95] +24B6; [29, 05, 97] +00AA; [29, 05, 27] +1D43; [29, 05, 27] +2090; [29, 05, 29] +1D2C; [29, 05, B9] +00E1; [29, 05, 05][, 8D, 05] +00C1; [29, 05, 8F][, 8D, 05] +00E0; [29, 05, 05][, 8F, 05] +00C0; [29, 05, 8F][, 8F, 05] +0103; [29, 05, 05][, 91, 05] +0102; [29, 05, 8F][, 91, 05] +1EAF; [29, 05, 05][, 91, 05][, 8D, 05] +1EAE; [29, 05, 8F][, 91, 05][, 8D, 05] +1EB1; [29, 05, 05][, 91, 05][, 8F, 05] +1EB0; [29, 05, 8F][, 91, 05][, 8F, 05] +1EB5; [29, 05, 05][, 91, 05][, A1, 05] +1EB4; [29, 05, 8F][, 91, 05][, A1, 05] +1EB3; [29, 05, 05][, 91, 05][, AF, 05] +1EB2; [29, 05, 8F][, 91, 05][, AF, 05] +00E2; [29, 05, 05][, 93, 05] +00C2; [29, 05, 8F][, 93, 05] +1EA5; [29, 05, 05][, 93, 05][, 8D, 05] +1EA4; [29, 05, 8F][, 93, 05][, 8D, 05] +1EA7; [29, 05, 05][, 93, 05][, 8F, 05] +1EA6; [29, 05, 8F][, 93, 05][, 8F, 05] +1EAB; [29, 05, 05][, 93, 05][, A1, 05] +1EAA; [29, 05, 8F][, 93, 05][, A1, 05] +1EA9; [29, 05, 05][, 93, 05][, AF, 05] +1EA8; [29, 05, 8F][, 93, 05][, AF, 05] +01CE; [29, 05, 05][, 97, 05] +01CD; [29, 05, 8F][, 97, 05] +00E5; [29, 05, 05][, 99, 05] +00C5; [29, 05, 8F][, 99, 05] +212B; [29, 05, 8F][, 99, 05] +01FB; [29, 05, 05][, 99, 05][, 8D, 05] +01FA; [29, 05, 8F][, 99, 05][, 8D, 05] +00E4; [29, 05, 05][, 9D, 05] +00C4; [29, 05, 8F][, 9D, 05] +01DF; [29, 05, 05][, 9D, 05][, AB, 05] +01DE; [29, 05, 8F][, 9D, 05][, AB, 05] +00E3; [29, 05, 05][, A1, 05] +00C3; [29, 05, 8F][, A1, 05] +0227; [29, 05, 05][, A3, 05] +0226; [29, 05, 8F][, A3, 05] +01E1; [29, 05, 05][, A3, 05][, AB, 05] +01E0; [29, 05, 8F][, A3, 05][, AB, 05] +0105; [29, 05, 05][, A9, 05] +0104; [29, 05, 8F][, A9, 05] +0101; [29, 05, 05][, AB, 05] +0100; [29, 05, 8F][, AB, 05] +1EA3; [29, 05, 05][, AF, 05] +1EA2; [29, 05, 8F][, AF, 05] +0201; [29, 05, 05][, B5, 05] +0200; [29, 05, 8F][, B5, 05] +0203; [29, 05, 05][, B9, 05] +0202; [29, 05, 8F][, B9, 05] +1EA1; [29, 05, 05][, D0 4D, 05] +1EA0; [29, 05, 8F][, D0 4D, 05] +1EB7; [29, 05, 05][, D0 4D, 05][, 91, 05] +1EB6; [29, 05, 8F][, D0 4D, 05][, 91, 05] +1EAD; [29, 05, 05][, D0 4D, 05][, 93, 05] +1EAC; [29, 05, 8F][, D0 4D, 05][, 93, 05] +1E01; [29, 05, 05][, D0 6D, 05] +1E00; [29, 05, 8F][, D0 6D, 05] +33C2; [29, 05, 37][08 1D, 05, 37][41, 05, 3D][08 1D, 05, 3D] +2100; [29, 05, 09][09 55, 05, 09][2D, 05, 3D] +2101; [29, 05, 09][09 55, 05, 09][4D, 05, 3D] +33DF; [29, 05, B9][0C F7, 05, 37][41, 05, 3D] +00E6; [29, 05, 09][, E4 4D, 09][31, 05, 3D] +00C6; [29, 05, 93][, E4 4D, 09][31, 05, 3D] +1D2D; [29, 05, 27][, E4 4D, 27][31, 05, 3D] +01FD; [29, 05, 09][, E4 4D, 09][31, 05, 3D][, 8D, 05] +01FC; [29, 05, 93][, E4 4D, 09][31, 05, 3D][, 8D, 05] +01E3; [29, 05, 09][, E4 4D, 09][31, 05, 3D][, AB, 05] +01E2; [29, 05, 93][, E4 4D, 09][31, 05, 3D][, AB, 05] +3373; [29, 05, B9][51, 05, B9] +1E9A; [29, 05, 09][5C 96, 05, 09] + +1D00; [2A 60, 05, 05] + +2C65; [2A 62, 05, 05] +023A; [2A 62, 05, 8F] + +1D8F; [2A 64, 05, 05] + +1D01; [2A 66, 05, 05] + +1D02; [2A 68, 05, 05] +1D46; [2A 68, 05, 27] + +0250; [2A 6A, 05, 05] +1D44; [2A 6A, 05, 27] + +0251; [2A 6C, 05, 05] +1D45; [2A 6C, 05, 27] + +1D90; [2A 6E, 05, 05] + +0252; [2A 70, 05, 05] +1D9B; [2A 70, 05, 27] + +0062; [2B, 05, 05] +FF42; [2B, 05, 07] +D835 DC1B; [2B, 05, 0B] +D835 DC4F; [2B, 05, 0B] +D835 DC83; [2B, 05, 0B] +D835 DCB7; [2B, 05, 0B] +D835 DCEB; [2B, 05, 0B] +D835 DD1F; [2B, 05, 0B] +D835 DD53; [2B, 05, 0B] +D835 DD87; [2B, 05, 0B] +D835 DDBB; [2B, 05, 0B] +D835 DDEF; [2B, 05, 0B] +D835 DE23; [2B, 05, 0B] +D835 DE57; [2B, 05, 0B] +D835 DE8B; [2B, 05, 0B] +24D1; [2B, 05, 0D] +0042; [2B, 05, 8F] +FF22; [2B, 05, 91] +212C; [2B, 05, 95] +D835 DC01; [2B, 05, 95] +D835 DC35; [2B, 05, 95] +D835 DC69; [2B, 05, 95] +D835 DCD1; [2B, 05, 95] +D835 DD05; [2B, 05, 95] +D835 DD39; [2B, 05, 95] +D835 DD6D; [2B, 05, 95] +D835 DDA1; [2B, 05, 95] +D835 DDD5; [2B, 05, 95] +D835 DE09; [2B, 05, 95] +D835 DE3D; [2B, 05, 95] +D835 DE71; [2B, 05, 95] +24B7; [2B, 05, 97] +1D47; [2B, 05, 27] +1D2E; [2B, 05, B9] +1E03; [2B, 05, 05][, A3, 05] +1E02; [2B, 05, 8F][, A3, 05] +1E05; [2B, 05, 05][, D0 4D, 05] +1E04; [2B, 05, 8F][, D0 4D, 05] +1E07; [2B, 05, 05][, D1 11, 05] +1E06; [2B, 05, 8F][, D1 11, 05] +3374; [2B, 05, 37][29, 05, 37][4B, 05, 3D] +33C3; [2B, 05, B9][49, 05, 37] + +0299; [2C 60, 05, 05] + +0180; [2C 62, 05, 05] +0243; [2C 62, 05, 8F] + +1D2F; [2C 64, 05, 05] + +1D03; [2C 66, 05, 05] + +1D6C; [2C 68, 05, 05] + +1D80; [2C 6A, 05, 05] + +0253; [2C 6C, 05, 05] +0181; [2C 6C, 05, 8F] + +0183; [2C 6E, 05, 05] +0182; [2C 6E, 05, 8F] + +0063; [2D, 05, 05] +FF43; [2D, 05, 07] +0368; [2D, 05, 09] +217D; [2D, 05, 09] +D835 DC1C; [2D, 05, 0B] +D835 DC50; [2D, 05, 0B] +D835 DC84; [2D, 05, 0B] +D835 DCB8; [2D, 05, 0B] +D835 DCEC; [2D, 05, 0B] +D835 DD20; [2D, 05, 0B] +D835 DD54; [2D, 05, 0B] +D835 DD88; [2D, 05, 0B] +D835 DDBC; [2D, 05, 0B] +D835 DDF0; [2D, 05, 0B] +D835 DE24; [2D, 05, 0B] +D835 DE58; [2D, 05, 0B] +D835 DE8C; [2D, 05, 0B] +24D2; [2D, 05, 0D] +0043; [2D, 05, 8F] +FF23; [2D, 05, 91] +216D; [2D, 05, 93] +2102; [2D, 05, 95] +212D; [2D, 05, 95] +D835 DC02; [2D, 05, 95] +D835 DC36; [2D, 05, 95] +D835 DC6A; [2D, 05, 95] +D835 DC9E; [2D, 05, 95] +D835 DCD2; [2D, 05, 95] +D835 DD6E; [2D, 05, 95] +D835 DDA2; [2D, 05, 95] +D835 DDD6; [2D, 05, 95] +D835 DE0A; [2D, 05, 95] +D835 DE3E; [2D, 05, 95] +D835 DE72; [2D, 05, 95] +24B8; [2D, 05, 97] +1D9C; [2D, 05, 27] +0107; [2D, 05, 05][, 8D, 05] +0106; [2D, 05, 8F][, 8D, 05] +0109; [2D, 05, 05][, 93, 05] +0108; [2D, 05, 8F][, 93, 05] +010D; [2D, 05, 05][, 97, 05] +010C; [2D, 05, 8F][, 97, 05] +010B; [2D, 05, 05][, A3, 05] +010A; [2D, 05, 8F][, A3, 05] +00E7; [2D, 05, 05][, A7, 05] +00C7; [2D, 05, 8F][, A7, 05] +1E09; [2D, 05, 05][, A7, 05][, 8D, 05] +1E08; [2D, 05, 8F][, A7, 05][, 8D, 05] +2105; [2D, 05, 09][09 55, 05, 09][45, 05, 3D] +2106; [2D, 05, 09][09 55, 05, 09][51, 05, 3D] +33C6; [2D, 05, B9][0C F7, 05, 37][3D, 05, 3D][35, 05, 3D] +3388; [2D, 05, 37][29, 05, 37][3F, 05, 3D] +33C4; [2D, 05, 37][2D, 05, 37] +33C5; [2D, 05, 37][2F, 05, 37] +339D; [2D, 05, 37][41, 05, 37] +33A0; [2D, 05, 37][41, 05, 37][26 7E, 05, 3D] +33A4; [2D, 05, 37][41, 05, 37][26 80, 05, 3D] +33C7; [2D, 05, B9][45, 05, 37][08 1D, 05, 3D] + +1D04; [2E 60, 05, 05] + +023C; [2E 62, 05, 05] +023B; [2E 62, 05, 8F] + +0188; [2E 64, 05, 05] +0187; [2E 64, 05, 8F] + +0255; [2E 66, 05, 05] +1D9D; [2E 66, 05, 27] + +2184; [2E 68, 05, 05] +2183; [2E 68, 05, 8F] + +0064; [2F, 05, 05] +FF44; [2F, 05, 07] +0369; [2F, 05, 09] +217E; [2F, 05, 09] +2146; [2F, 05, 0B] +D835 DC1D; [2F, 05, 0B] +D835 DC51; [2F, 05, 0B] +D835 DC85; [2F, 05, 0B] +D835 DCB9; [2F, 05, 0B] +D835 DCED; [2F, 05, 0B] +D835 DD21; [2F, 05, 0B] +D835 DD55; [2F, 05, 0B] +D835 DD89; [2F, 05, 0B] +D835 DDBD; [2F, 05, 0B] +D835 DDF1; [2F, 05, 0B] +D835 DE25; [2F, 05, 0B] +D835 DE59; [2F, 05, 0B] +D835 DE8D; [2F, 05, 0B] +24D3; [2F, 05, 0D] +0044; [2F, 05, 8F] +FF24; [2F, 05, 91] +216E; [2F, 05, 93] +2145; [2F, 05, 95] +D835 DC03; [2F, 05, 95] +D835 DC37; [2F, 05, 95] +D835 DC6B; [2F, 05, 95] +D835 DC9F; [2F, 05, 95] +D835 DCD3; [2F, 05, 95] +D835 DD07; [2F, 05, 95] +D835 DD3B; [2F, 05, 95] +D835 DD6F; [2F, 05, 95] +D835 DDA3; [2F, 05, 95] +D835 DDD7; [2F, 05, 95] +D835 DE0B; [2F, 05, 95] +D835 DE3F; [2F, 05, 95] +D835 DE73; [2F, 05, 95] +24B9; [2F, 05, 97] +1D48; [2F, 05, 27] +1D30; [2F, 05, B9] +010F; [2F, 05, 05][, 97, 05] +010E; [2F, 05, 8F][, 97, 05] +1E0B; [2F, 05, 05][, A3, 05] +1E0A; [2F, 05, 8F][, A3, 05] +1E11; [2F, 05, 05][, A7, 05] +1E10; [2F, 05, 8F][, A7, 05] +1E0D; [2F, 05, 05][, D0 4D, 05] +1E0C; [2F, 05, 8F][, D0 4D, 05] +1E13; [2F, 05, 05][, D0 CD, 05] +1E12; [2F, 05, 8F][, D0 CD, 05] +1E0F; [2F, 05, 05][, D1 11, 05] +1E0E; [2F, 05, 8F][, D1 11, 05] +0111; [2F, 05, 05][, D1 41, 05] +0110; [2F, 05, 8F][, D1 41, 05] +00F0; [2F, 05, 09][, E4 4D, 09] +00D0; [2F, 05, 93][, E4 4D, 09] +1D9E; [2F, 05, 27][, E4 4D, 27] +3372; [2F, 05, 37][29, 05, 37] +0238; [2F, 05, 09][2B, 05, 09] +33C8; [2F, 05, 37][2B, 05, B9] +3397; [2F, 05, 37][3F, 05, 37] +3377; [2F, 05, 37][41, 05, 37] +3378; [2F, 05, 37][41, 05, 37][26 7E, 05, 3D] +3379; [2F, 05, 37][41, 05, 37][26 80, 05, 3D] +01F3; [2F, 05, 09][5B, 05, 09] +02A3; [2F, 05, 09][5B, 05, 09] +01F2; [2F, 05, 93][5B, 05, 09] +01F1; [2F, 05, 93][5B, 05, 93] +01C6; [2F, 05, 09][5B, 05, 09][, 97, 3D] +01C5; [2F, 05, 93][5B, 05, 09][, 97, 3D] +01C4; [2F, 05, 93][5B, 05, 93][, 97, 3D] +02A5; [2F, 05, 09][5C 6C, 05, 09] +02A4; [2F, 05, 09][5C 72, 05, 09] + +1D05; [30 60, 05, 05] + +1D06; [30 62, 05, 05] + +1D6D; [30 64, 05, 05] + +1D81; [30 66, 05, 05] + +0256; [30 68, 05, 05] +0189; [30 68, 05, 8F] + +0257; [30 6A, 05, 05] +018A; [30 6A, 05, 8F] + +1D91; [30 6C, 05, 05] + +018C; [30 6E, 05, 05] +018B; [30 6E, 05, 8F] + +0221; [30 70, 05, 05] + +0065; [31, 05, 05] +FF45; [31, 05, 07] +0364; [31, 05, 09] +212F; [31, 05, 0B] +2147; [31, 05, 0B] +D835 DC1E; [31, 05, 0B] +D835 DC52; [31, 05, 0B] +D835 DC86; [31, 05, 0B] +D835 DCEE; [31, 05, 0B] +D835 DD22; [31, 05, 0B] +D835 DD56; [31, 05, 0B] +D835 DD8A; [31, 05, 0B] +D835 DDBE; [31, 05, 0B] +D835 DDF2; [31, 05, 0B] +D835 DE26; [31, 05, 0B] +D835 DE5A; [31, 05, 0B] +D835 DE8E; [31, 05, 0B] +24D4; [31, 05, 0D] +0045; [31, 05, 8F] +FF25; [31, 05, 91] +2130; [31, 05, 95] +D835 DC04; [31, 05, 95] +D835 DC38; [31, 05, 95] +D835 DC6C; [31, 05, 95] +D835 DCD4; [31, 05, 95] +D835 DD08; [31, 05, 95] +D835 DD3C; [31, 05, 95] +D835 DD70; [31, 05, 95] +D835 DDA4; [31, 05, 95] +D835 DDD8; [31, 05, 95] +D835 DE0C; [31, 05, 95] +D835 DE40; [31, 05, 95] +D835 DE74; [31, 05, 95] +24BA; [31, 05, 97] +1D49; [31, 05, 27] +2091; [31, 05, 29] +1D31; [31, 05, B9] +00E9; [31, 05, 05][, 8D, 05] +00C9; [31, 05, 8F][, 8D, 05] +00E8; [31, 05, 05][, 8F, 05] +00C8; [31, 05, 8F][, 8F, 05] +0115; [31, 05, 05][, 91, 05] +0114; [31, 05, 8F][, 91, 05] +00EA; [31, 05, 05][, 93, 05] +00CA; [31, 05, 8F][, 93, 05] +1EBF; [31, 05, 05][, 93, 05][, 8D, 05] +1EBE; [31, 05, 8F][, 93, 05][, 8D, 05] +1EC1; [31, 05, 05][, 93, 05][, 8F, 05] +1EC0; [31, 05, 8F][, 93, 05][, 8F, 05] +1EC5; [31, 05, 05][, 93, 05][, A1, 05] +1EC4; [31, 05, 8F][, 93, 05][, A1, 05] +1EC3; [31, 05, 05][, 93, 05][, AF, 05] +1EC2; [31, 05, 8F][, 93, 05][, AF, 05] +011B; [31, 05, 05][, 97, 05] +011A; [31, 05, 8F][, 97, 05] +00EB; [31, 05, 05][, 9D, 05] +00CB; [31, 05, 8F][, 9D, 05] +1EBD; [31, 05, 05][, A1, 05] +1EBC; [31, 05, 8F][, A1, 05] +0117; [31, 05, 05][, A3, 05] +0116; [31, 05, 8F][, A3, 05] +0229; [31, 05, 05][, A7, 05] +0228; [31, 05, 8F][, A7, 05] +1E1D; [31, 05, 05][, A7, 05][, 91, 05] +1E1C; [31, 05, 8F][, A7, 05][, 91, 05] +0119; [31, 05, 05][, A9, 05] +0118; [31, 05, 8F][, A9, 05] +0113; [31, 05, 05][, AB, 05] +0112; [31, 05, 8F][, AB, 05] +1E17; [31, 05, 05][, AB, 05][, 8D, 05] +1E16; [31, 05, 8F][, AB, 05][, 8D, 05] +1E15; [31, 05, 05][, AB, 05][, 8F, 05] +1E14; [31, 05, 8F][, AB, 05][, 8F, 05] +1EBB; [31, 05, 05][, AF, 05] +1EBA; [31, 05, 8F][, AF, 05] +0205; [31, 05, 05][, B5, 05] +0204; [31, 05, 8F][, B5, 05] +0207; [31, 05, 05][, B9, 05] +0206; [31, 05, 8F][, B9, 05] +1EB9; [31, 05, 05][, D0 4D, 05] +1EB8; [31, 05, 8F][, D0 4D, 05] +1EC7; [31, 05, 05][, D0 4D, 05][, 93, 05] +1EC6; [31, 05, 8F][, D0 4D, 05][, 93, 05] +1E19; [31, 05, 05][, D0 CD, 05] +1E18; [31, 05, 8F][, D0 CD, 05] +1E1B; [31, 05, 05][, D0 FD, 05] +1E1A; [31, 05, 8F][, D0 FD, 05] +32CD; [31, 05, 37][4B, 05, 37][35, 05, 3D] +32CE; [31, 05, 37][53, 05, B9] + +1D07; [32 60, 05, 05] + +0247; [32 62, 05, 05] +0246; [32 62, 05, 8F] + +1D92; [32 64, 05, 05] + +01DD; [32 66, 05, 05] +018E; [32 66, 05, 8F] +1D32; [32 66, 05, B9] + +0259; [32 68, 05, 05] +018F; [32 68, 05, 8F] +1D4A; [32 68, 05, 27] +2094; [32 68, 05, 29] + +1D95; [32 6A, 05, 05] + +025B; [32 6C, 05, 05] +0190; [32 6C, 05, 8F] +2107; [32 6C, 05, 93] +1D4B; [32 6C, 05, 27] + +1D93; [32 6E, 05, 05] + +0258; [32 70, 05, 05] + +025A; [32 72, 05, 05] + +025C; [32 74, 05, 05] +1D9F; [32 74, 05, 27] + +1D94; [32 76, 05, 05] + +1D08; [32 78, 05, 05] +1D4C; [32 78, 05, 27] + +025D; [32 7A, 05, 05] + +025E; [32 7C, 05, 05] + +029A; [32 7E, 05, 05] + +0264; [32 80, 05, 05] + +0066; [33, 05, 05] +FF46; [33, 05, 07] +D835 DC1F; [33, 05, 0B] +D835 DC53; [33, 05, 0B] +D835 DC87; [33, 05, 0B] +D835 DCBB; [33, 05, 0B] +D835 DCEF; [33, 05, 0B] +D835 DD23; [33, 05, 0B] +D835 DD57; [33, 05, 0B] +D835 DD8B; [33, 05, 0B] +D835 DDBF; [33, 05, 0B] +D835 DDF3; [33, 05, 0B] +D835 DE27; [33, 05, 0B] +D835 DE5B; [33, 05, 0B] +D835 DE8F; [33, 05, 0B] +24D5; [33, 05, 0D] +0046; [33, 05, 8F] +FF26; [33, 05, 91] +2131; [33, 05, 95] +D835 DC05; [33, 05, 95] +D835 DC39; [33, 05, 95] +D835 DC6D; [33, 05, 95] +D835 DCD5; [33, 05, 95] +D835 DD09; [33, 05, 95] +D835 DD3D; [33, 05, 95] +D835 DD71; [33, 05, 95] +D835 DDA5; [33, 05, 95] +D835 DDD9; [33, 05, 95] +D835 DE0D; [33, 05, 95] +D835 DE41; [33, 05, 95] +D835 DE75; [33, 05, 95] +24BB; [33, 05, 97] +1DA0; [33, 05, 27] +1E1F; [33, 05, 05][, A3, 05] +1E1E; [33, 05, 8F][, A3, 05] +213B; [33, 05, 93][29, 05, 93][57, 05, 3D] +FB00; [33, 05, 09][33, 05, 09] +FB03; [33, 05, 09][33, 05, 09][39, 05, 3D] +FB04; [33, 05, 09][33, 05, 09][3F, 05, 3D] +FB01; [33, 05, 09][39, 05, 09] +FB02; [33, 05, 09][3F, 05, 09] +3399; [33, 05, 37][41, 05, 37] +02A9; [33, 05, 09][44 72, 05, 09] + +1D6E; [34 60, 05, 05] + +1D82; [34 62, 05, 05] + +0192; [34 64, 05, 05] +0191; [34 64, 05, 8F] + +214E; [34 66, 05, 05] +2132; [34 66, 05, 8F] + +0067; [35, 05, 05] +FF47; [35, 05, 07] +210A; [35, 05, 0B] +D835 DC20; [35, 05, 0B] +D835 DC54; [35, 05, 0B] +D835 DC88; [35, 05, 0B] +D835 DCF0; [35, 05, 0B] +D835 DD24; [35, 05, 0B] +D835 DD58; [35, 05, 0B] +D835 DD8C; [35, 05, 0B] +D835 DDC0; [35, 05, 0B] +D835 DDF4; [35, 05, 0B] +D835 DE28; [35, 05, 0B] +D835 DE5C; [35, 05, 0B] +D835 DE90; [35, 05, 0B] +24D6; [35, 05, 0D] +0047; [35, 05, 8F] +FF27; [35, 05, 91] +D835 DC06; [35, 05, 95] +D835 DC3A; [35, 05, 95] +D835 DC6E; [35, 05, 95] +D835 DCA2; [35, 05, 95] +D835 DCD6; [35, 05, 95] +D835 DD0A; [35, 05, 95] +D835 DD3E; [35, 05, 95] +D835 DD72; [35, 05, 95] +D835 DDA6; [35, 05, 95] +D835 DDDA; [35, 05, 95] +D835 DE0E; [35, 05, 95] +D835 DE42; [35, 05, 95] +D835 DE76; [35, 05, 95] +24BC; [35, 05, 97] +1D4D; [35, 05, 27] +1D33; [35, 05, B9] +01F5; [35, 05, 05][, 8D, 05] +01F4; [35, 05, 8F][, 8D, 05] +011F; [35, 05, 05][, 91, 05] +011E; [35, 05, 8F][, 91, 05] +011D; [35, 05, 05][, 93, 05] +011C; [35, 05, 8F][, 93, 05] +01E7; [35, 05, 05][, 97, 05] +01E6; [35, 05, 8F][, 97, 05] +0121; [35, 05, 05][, A3, 05] +0120; [35, 05, 8F][, A3, 05] +0123; [35, 05, 05][, A7, 05] +0122; [35, 05, 8F][, A7, 05] +1E21; [35, 05, 05][, AB, 05] +1E20; [35, 05, 8F][, AB, 05] +33FF; [35, 05, 37][29, 05, 37][3F, 05, 3D] +3387; [35, 05, B9][2B, 05, B9] +3393; [35, 05, B9][37, 05, B9][5B, 05, 3D] +33AC; [35, 05, B9][47, 05, B9][29, 05, 3D] +33C9; [35, 05, B9][59, 05, 37] + +0261; [36 60, 05, 05] +1DA2; [36 60, 05, 27] + +1D79; [36 62, 05, 05] + +0262; [36 64, 05, 05] + +01E5; [36 66, 05, 05] +01E4; [36 66, 05, 8F] + +1D83; [36 68, 05, 05] + +0260; [36 6A, 05, 05] +0193; [36 6A, 05, 8F] + +029B; [36 6C, 05, 05] + +1D77; [36 6E, 05, 05] + +0263; [36 70, 05, 05] +0194; [36 70, 05, 8F] +02E0; [36 70, 05, 27] + +01A3; [36 72, 05, 05] +01A2; [36 72, 05, 8F] + +0068; [37, 05, 05] +FF48; [37, 05, 07] +036A; [37, 05, 09] +210E; [37, 05, 0B] +D835 DC21; [37, 05, 0B] +D835 DC89; [37, 05, 0B] +D835 DCBD; [37, 05, 0B] +D835 DCF1; [37, 05, 0B] +D835 DD25; [37, 05, 0B] +D835 DD59; [37, 05, 0B] +D835 DD8D; [37, 05, 0B] +D835 DDC1; [37, 05, 0B] +D835 DDF5; [37, 05, 0B] +D835 DE29; [37, 05, 0B] +D835 DE5D; [37, 05, 0B] +D835 DE91; [37, 05, 0B] +24D7; [37, 05, 0D] +0048; [37, 05, 8F] +FF28; [37, 05, 91] +210B; [37, 05, 95] +210C; [37, 05, 95] +210D; [37, 05, 95] +D835 DC07; [37, 05, 95] +D835 DC3B; [37, 05, 95] +D835 DC6F; [37, 05, 95] +D835 DCD7; [37, 05, 95] +D835 DD73; [37, 05, 95] +D835 DDA7; [37, 05, 95] +D835 DDDB; [37, 05, 95] +D835 DE0F; [37, 05, 95] +D835 DE43; [37, 05, 95] +D835 DE77; [37, 05, 95] +24BD; [37, 05, 97] +02B0; [37, 05, 27] +1D34; [37, 05, B9] +0125; [37, 05, 05][, 93, 05] +0124; [37, 05, 8F][, 93, 05] +021F; [37, 05, 05][, 97, 05] +021E; [37, 05, 8F][, 97, 05] +1E27; [37, 05, 05][, 9D, 05] +1E26; [37, 05, 8F][, 9D, 05] +1E23; [37, 05, 05][, A3, 05] +1E22; [37, 05, 8F][, A3, 05] +1E29; [37, 05, 05][, A7, 05] +1E28; [37, 05, 8F][, A7, 05] +1E25; [37, 05, 05][, D0 4D, 05] +1E24; [37, 05, 8F][, D0 4D, 05] +1E2B; [37, 05, 05][, D0 DD, 05] +1E2A; [37, 05, 8F][, D0 DD, 05] +1E96; [37, 05, 05][, D1 11, 05] +0127; [37, 05, 05][, D1 41, 05] +210F; [37, 05, 05][, D1 41, 05] +0126; [37, 05, 8F][, D1 41, 05] +33CA; [37, 05, 37][29, 05, 37] +32CC; [37, 05, B9][35, 05, 37] +33CB; [37, 05, B9][47, 05, B9] +3371; [37, 05, 37][47, 05, B9][29, 05, 3D] +3390; [37, 05, B9][5B, 05, 37] + +029C; [38 60, 05, 05] + +0195; [38 62, 05, 05] +01F6; [38 62, 05, 8F] + +0266; [38 64, 05, 05] +02B1; [38 64, 05, 27] + +2C68; [38 66, 05, 05] +2C67; [38 66, 05, 8F] + +2C76; [38 68, 05, 05] +2C75; [38 68, 05, 8F] + +0267; [38 6A, 05, 05] + +02BB; [38 6C, 05, 05] + +02BD; [38 6E, 05, 05] + +0069; [39, 05, 05] +FF49; [39, 05, 07] +0365; [39, 05, 09] +2170; [39, 05, 09] +2139; [39, 05, 0B] +2148; [39, 05, 0B] +D835 DC22; [39, 05, 0B] +D835 DC56; [39, 05, 0B] +D835 DC8A; [39, 05, 0B] +D835 DCBE; [39, 05, 0B] +D835 DCF2; [39, 05, 0B] +D835 DD26; [39, 05, 0B] +D835 DD5A; [39, 05, 0B] +D835 DD8E; [39, 05, 0B] +D835 DDC2; [39, 05, 0B] +D835 DDF6; [39, 05, 0B] +D835 DE2A; [39, 05, 0B] +D835 DE5E; [39, 05, 0B] +D835 DE92; [39, 05, 0B] +24D8; [39, 05, 0D] +0049; [39, 05, 8F] +FF29; [39, 05, 91] +2160; [39, 05, 93] +2110; [39, 05, 95] +2111; [39, 05, 95] +D835 DC08; [39, 05, 95] +D835 DC3C; [39, 05, 95] +D835 DC70; [39, 05, 95] +D835 DCD8; [39, 05, 95] +D835 DD40; [39, 05, 95] +D835 DD74; [39, 05, 95] +D835 DDA8; [39, 05, 95] +D835 DDDC; [39, 05, 95] +D835 DE10; [39, 05, 95] +D835 DE44; [39, 05, 95] +D835 DE78; [39, 05, 95] +24BE; [39, 05, 97] +2071; [39, 05, 27] +1D62; [39, 05, 29] +1D35; [39, 05, B9] +00ED; [39, 05, 05][, 8D, 05] +00CD; [39, 05, 8F][, 8D, 05] +00EC; [39, 05, 05][, 8F, 05] +00CC; [39, 05, 8F][, 8F, 05] +012D; [39, 05, 05][, 91, 05] +012C; [39, 05, 8F][, 91, 05] +00EE; [39, 05, 05][, 93, 05] +00CE; [39, 05, 8F][, 93, 05] +01D0; [39, 05, 05][, 97, 05] +01CF; [39, 05, 8F][, 97, 05] +00EF; [39, 05, 05][, 9D, 05] +00CF; [39, 05, 8F][, 9D, 05] +1E2F; [39, 05, 05][, 9D, 05][, 8D, 05] +1E2E; [39, 05, 8F][, 9D, 05][, 8D, 05] +0129; [39, 05, 05][, A1, 05] +0128; [39, 05, 8F][, A1, 05] +0130; [39, 05, 8F][, A3, 05] +012F; [39, 05, 05][, A9, 05] +012E; [39, 05, 8F][, A9, 05] +012B; [39, 05, 05][, AB, 05] +012A; [39, 05, 8F][, AB, 05] +1EC9; [39, 05, 05][, AF, 05] +1EC8; [39, 05, 8F][, AF, 05] +0209; [39, 05, 05][, B5, 05] +0208; [39, 05, 8F][, B5, 05] +020B; [39, 05, 05][, B9, 05] +020A; [39, 05, 8F][, B9, 05] +1ECB; [39, 05, 05][, D0 4D, 05] +1ECA; [39, 05, 8F][, D0 4D, 05] +1E2D; [39, 05, 05][, D0 FD, 05] +1E2C; [39, 05, 8F][, D0 FD, 05] +2171; [39, 05, 09][39, 05, 09] +2161; [39, 05, 93][39, 05, 93] +2172; [39, 05, 09][39, 05, 09][39, 05, 3D] +2162; [39, 05, 93][39, 05, 93][39, 05, 3D] +0133; [39, 05, 09][3B, 05, 09] +0132; [39, 05, 93][3B, 05, 93] +33CC; [39, 05, 37][43, 05, 37] +337A; [39, 05, B9][51, 05, B9] +2173; [39, 05, 09][53, 05, 09] +2163; [39, 05, 93][53, 05, 93] +2178; [39, 05, 09][57, 05, 09] +2168; [39, 05, 93][57, 05, 93] + +0131; [3A 60, 05, 05] +D835 DEA4; [3A 60, 05, 0B] + +026A; [3A 62, 05, 05] +1DA6; [3A 62, 05, 27] + +1D09; [3A 64, 05, 05] +1D4E; [3A 64, 05, 27] + +0268; [3A 66, 05, 05] +0197; [3A 66, 05, 8F] +1DA4; [3A 66, 05, 27] + +1D7B; [3A 68, 05, 05] +1DA7; [3A 68, 05, 27] + +1D96; [3A 6A, 05, 05] + +0269; [3A 6C, 05, 05] +0196; [3A 6C, 05, 8F] +1DA5; [3A 6C, 05, 27] + +1D7C; [3A 6E, 05, 05] + +006A; [3B, 05, 05] +FF4A; [3B, 05, 07] +2149; [3B, 05, 0B] +D835 DC23; [3B, 05, 0B] +D835 DC57; [3B, 05, 0B] +D835 DC8B; [3B, 05, 0B] +D835 DCBF; [3B, 05, 0B] +D835 DCF3; [3B, 05, 0B] +D835 DD27; [3B, 05, 0B] +D835 DD5B; [3B, 05, 0B] +D835 DD8F; [3B, 05, 0B] +D835 DDC3; [3B, 05, 0B] +D835 DDF7; [3B, 05, 0B] +D835 DE2B; [3B, 05, 0B] +D835 DE5F; [3B, 05, 0B] +D835 DE93; [3B, 05, 0B] +24D9; [3B, 05, 0D] +004A; [3B, 05, 8F] +FF2A; [3B, 05, 91] +D835 DC09; [3B, 05, 95] +D835 DC3D; [3B, 05, 95] +D835 DC71; [3B, 05, 95] +D835 DCA5; [3B, 05, 95] +D835 DCD9; [3B, 05, 95] +D835 DD0D; [3B, 05, 95] +D835 DD41; [3B, 05, 95] +D835 DD75; [3B, 05, 95] +D835 DDA9; [3B, 05, 95] +D835 DDDD; [3B, 05, 95] +D835 DE11; [3B, 05, 95] +D835 DE45; [3B, 05, 95] +D835 DE79; [3B, 05, 95] +24BF; [3B, 05, 97] +02B2; [3B, 05, 27] +1D36; [3B, 05, B9] +0135; [3B, 05, 05][, 93, 05] +0134; [3B, 05, 8F][, 93, 05] +01F0; [3B, 05, 05][, 97, 05] + +0237; [3C 60, 05, 05] +D835 DEA5; [3C 60, 05, 0B] + +1D0A; [3C 62, 05, 05] + +0249; [3C 64, 05, 05] +0248; [3C 64, 05, 8F] + +029D; [3C 66, 05, 05] +1DA8; [3C 66, 05, 27] + +025F; [3C 68, 05, 05] +1DA1; [3C 68, 05, 27] + +0284; [3C 6A, 05, 05] + +006B; [3D, 05, 05] +FF4B; [3D, 05, 07] +D835 DC24; [3D, 05, 0B] +D835 DC58; [3D, 05, 0B] +D835 DC8C; [3D, 05, 0B] +D835 DCC0; [3D, 05, 0B] +D835 DCF4; [3D, 05, 0B] +D835 DD28; [3D, 05, 0B] +D835 DD5C; [3D, 05, 0B] +D835 DD90; [3D, 05, 0B] +D835 DDC4; [3D, 05, 0B] +D835 DDF8; [3D, 05, 0B] +D835 DE2C; [3D, 05, 0B] +D835 DE60; [3D, 05, 0B] +D835 DE94; [3D, 05, 0B] +24DA; [3D, 05, 0D] +004B; [3D, 05, 8F] +212A; [3D, 05, 8F] +FF2B; [3D, 05, 91] +D835 DC0A; [3D, 05, 95] +D835 DC3E; [3D, 05, 95] +D835 DC72; [3D, 05, 95] +D835 DCA6; [3D, 05, 95] +D835 DCDA; [3D, 05, 95] +D835 DD0E; [3D, 05, 95] +D835 DD42; [3D, 05, 95] +D835 DD76; [3D, 05, 95] +D835 DDAA; [3D, 05, 95] +D835 DDDE; [3D, 05, 95] +D835 DE12; [3D, 05, 95] +D835 DE46; [3D, 05, 95] +D835 DE7A; [3D, 05, 95] +24C0; [3D, 05, 97] +1D4F; [3D, 05, 27] +1D37; [3D, 05, B9] +1E31; [3D, 05, 05][, 8D, 05] +1E30; [3D, 05, 8F][, 8D, 05] +01E9; [3D, 05, 05][, 97, 05] +01E8; [3D, 05, 8F][, 97, 05] +0137; [3D, 05, 05][, A7, 05] +0136; [3D, 05, 8F][, A7, 05] +1E33; [3D, 05, 05][, D0 4D, 05] +1E32; [3D, 05, 8F][, D0 4D, 05] +1E35; [3D, 05, 05][, D1 11, 05] +1E34; [3D, 05, 8F][, D1 11, 05] +3384; [3D, 05, 37][29, 05, B9] +3385; [3D, 05, B9][2B, 05, B9] +3389; [3D, 05, 37][2D, 05, 37][29, 05, 3D][3F, 05, 3D] +338F; [3D, 05, 37][35, 05, 37] +3391; [3D, 05, 37][37, 05, B9][5B, 05, 3D] +33CD; [3D, 05, B9][3D, 05, B9] +3398; [3D, 05, 37][3F, 05, 37] +339E; [3D, 05, 37][41, 05, 37] +33CE; [3D, 05, B9][41, 05, B9] +33A2; [3D, 05, 37][41, 05, 37][26 7E, 05, 3D] +33A6; [3D, 05, 37][41, 05, 37][26 80, 05, 3D] +33AA; [3D, 05, 37][47, 05, B9][29, 05, 3D] +33CF; [3D, 05, 37][4F, 05, 37] +33B8; [3D, 05, 37][53, 05, B9] +33BE; [3D, 05, 37][55, 05, B9] +33C0; [3D, 05, 37][5D 6C, 05, B9] + +1D0B; [3E 60, 05, 05] + +1D84; [3E 62, 05, 05] + +0199; [3E 64, 05, 05] +0198; [3E 64, 05, 8F] + +2C6A; [3E 66, 05, 05] +2C69; [3E 66, 05, 8F] + +029E; [3E 68, 05, 05] + +006C; [3F, 05, 05] +FF4C; [3F, 05, 07] +217C; [3F, 05, 09] +2113; [3F, 05, 0B] +D835 DC25; [3F, 05, 0B] +D835 DC59; [3F, 05, 0B] +D835 DC8D; [3F, 05, 0B] +D835 DCC1; [3F, 05, 0B] +D835 DCF5; [3F, 05, 0B] +D835 DD29; [3F, 05, 0B] +D835 DD5D; [3F, 05, 0B] +D835 DD91; [3F, 05, 0B] +D835 DDC5; [3F, 05, 0B] +D835 DDF9; [3F, 05, 0B] +D835 DE2D; [3F, 05, 0B] +D835 DE61; [3F, 05, 0B] +D835 DE95; [3F, 05, 0B] +24DB; [3F, 05, 0D] +004C; [3F, 05, 8F] +FF2C; [3F, 05, 91] +216C; [3F, 05, 93] +2112; [3F, 05, 95] +D835 DC0B; [3F, 05, 95] +D835 DC3F; [3F, 05, 95] +D835 DC73; [3F, 05, 95] +D835 DCDB; [3F, 05, 95] +D835 DD0F; [3F, 05, 95] +D835 DD43; [3F, 05, 95] +D835 DD77; [3F, 05, 95] +D835 DDAB; [3F, 05, 95] +D835 DDDF; [3F, 05, 95] +D835 DE13; [3F, 05, 95] +D835 DE47; [3F, 05, 95] +D835 DE7B; [3F, 05, 95] +24C1; [3F, 05, 97] +02E1; [3F, 05, 27] +1D38; [3F, 05, B9] +013A; [3F, 05, 05][, 8D, 05] +0139; [3F, 05, 8F][, 8D, 05] +013E; [3F, 05, 05][, 97, 05] +013D; [3F, 05, 8F][, 97, 05] +013C; [3F, 05, 05][, A7, 05] +013B; [3F, 05, 8F][, A7, 05] +1E37; [3F, 05, 05][, D0 4D, 05] +1E36; [3F, 05, 8F][, D0 4D, 05] +1E39; [3F, 05, 05][, D0 4D, 05][, AB, 05] +1E38; [3F, 05, 8F][, D0 4D, 05][, AB, 05] +1E3D; [3F, 05, 05][, D0 CD, 05] +1E3C; [3F, 05, 8F][, D0 CD, 05] +1E3B; [3F, 05, 05][, D1 11, 05] +1E3A; [3F, 05, 8F][, D1 11, 05] +0142; [3F, 05, 05][, D1 41, 05] +0141; [3F, 05, 8F][, D1 41, 05] +0140; [3F, 05, 09][, E4 4D, 09][08 37, 05, 3D] +013F; [3F, 05, 93][, E4 4D, 09][08 37, 05, 3D] +01C9; [3F, 05, 09][3B, 05, 09] +01C8; [3F, 05, 93][3B, 05, 09] +01C7; [3F, 05, 93][3B, 05, 93] +33D0; [3F, 05, 37][41, 05, 37] +33D1; [3F, 05, 37][43, 05, 37] +33D2; [3F, 05, 37][45, 05, 37][35, 05, 3D] +02AA; [3F, 05, 09][4D, 05, 09] +32CF; [3F, 05, B9][4F, 05, B9][2F, 05, 3D] +33D3; [3F, 05, 37][57, 05, 37] +02AB; [3F, 05, 09][5B, 05, 09] + +029F; [40 60, 05, 05] +1DAB; [40 60, 05, 27] + +1D0C; [40 62, 05, 05] + +019A; [40 64, 05, 05] +023D; [40 64, 05, 8F] + +2C61; [40 66, 05, 05] +2C60; [40 66, 05, 8F] + +026B; [40 68, 05, 05] +2C62; [40 68, 05, 8F] + +026C; [40 6A, 05, 05] + +1D85; [40 6C, 05, 05] +1DAA; [40 6C, 05, 27] + +026D; [40 6E, 05, 05] +1DA9; [40 6E, 05, 27] + +0234; [40 70, 05, 05] + +026E; [40 72, 05, 05] + +019B; [40 74, 05, 05] + +028E; [40 76, 05, 05] + +006D; [41, 05, 05] +FF4D; [41, 05, 07] +036B; [41, 05, 09] +217F; [41, 05, 09] +D835 DC26; [41, 05, 0B] +D835 DC5A; [41, 05, 0B] +D835 DC8E; [41, 05, 0B] +D835 DCC2; [41, 05, 0B] +D835 DCF6; [41, 05, 0B] +D835 DD2A; [41, 05, 0B] +D835 DD5E; [41, 05, 0B] +D835 DD92; [41, 05, 0B] +D835 DDC6; [41, 05, 0B] +D835 DDFA; [41, 05, 0B] +D835 DE2E; [41, 05, 0B] +D835 DE62; [41, 05, 0B] +D835 DE96; [41, 05, 0B] +24DC; [41, 05, 0D] +004D; [41, 05, 8F] +FF2D; [41, 05, 91] +216F; [41, 05, 93] +2133; [41, 05, 95] +D835 DC0C; [41, 05, 95] +D835 DC40; [41, 05, 95] +D835 DC74; [41, 05, 95] +D835 DCDC; [41, 05, 95] +D835 DD10; [41, 05, 95] +D835 DD44; [41, 05, 95] +D835 DD78; [41, 05, 95] +D835 DDAC; [41, 05, 95] +D835 DDE0; [41, 05, 95] +D835 DE14; [41, 05, 95] +D835 DE48; [41, 05, 95] +D835 DE7C; [41, 05, 95] +24C2; [41, 05, 97] +1D50; [41, 05, 27] +1D39; [41, 05, B9] +1E3F; [41, 05, 05][, 8D, 05] +1E3E; [41, 05, 8F][, 8D, 05] +1E41; [41, 05, 05][, A3, 05] +1E40; [41, 05, 8F][, A3, 05] +1E43; [41, 05, 05][, D0 4D, 05] +1E42; [41, 05, 8F][, D0 4D, 05] +33A7; [41, 05, 37][0C F7, 05, 37][4D, 05, 3D] +33A8; [41, 05, 37][0C F7, 05, 37][4D, 05, 3D][26 7E, 05, 3D] +33A1; [41, 05, 37][26 7E, 05, 37] +33A5; [41, 05, 37][26 80, 05, 37] +3383; [41, 05, 37][29, 05, B9] +33D4; [41, 05, 37][2B, 05, 37] +3386; [41, 05, B9][2B, 05, B9] +338E; [41, 05, 37][35, 05, 37] +3392; [41, 05, B9][37, 05, B9][5B, 05, 3D] +33D5; [41, 05, 37][39, 05, 37][3F, 05, 3D] +3396; [41, 05, 37][3F, 05, 37] +339C; [41, 05, 37][41, 05, 37] +339F; [41, 05, 37][41, 05, 37][26 7E, 05, 3D] +33A3; [41, 05, 37][41, 05, 37][26 80, 05, 3D] +33D6; [41, 05, 37][45, 05, 37][3F, 05, 3D] +33AB; [41, 05, B9][47, 05, B9][29, 05, 3D] +33B3; [41, 05, 37][4D, 05, 37] +33B7; [41, 05, 37][53, 05, B9] +33B9; [41, 05, B9][53, 05, B9] +33BD; [41, 05, 37][55, 05, B9] +33BF; [41, 05, B9][55, 05, B9] +33C1; [41, 05, B9][5D 6C, 05, B9] + +1D0D; [42 60, 05, 05] + +1D6F; [42 62, 05, 05] + +1D86; [42 64, 05, 05] + +0271; [42 66, 05, 05] +1DAC; [42 66, 05, 27] + +006E; [43, 05, 05] +FF4E; [43, 05, 07] +D835 DC27; [43, 05, 0B] +D835 DC5B; [43, 05, 0B] +D835 DC8F; [43, 05, 0B] +D835 DCC3; [43, 05, 0B] +D835 DCF7; [43, 05, 0B] +D835 DD2B; [43, 05, 0B] +D835 DD5F; [43, 05, 0B] +D835 DD93; [43, 05, 0B] +D835 DDC7; [43, 05, 0B] +D835 DDFB; [43, 05, 0B] +D835 DE2F; [43, 05, 0B] +D835 DE63; [43, 05, 0B] +D835 DE97; [43, 05, 0B] +24DD; [43, 05, 0D] +004E; [43, 05, 8F] +FF2E; [43, 05, 91] +2115; [43, 05, 95] +D835 DC0D; [43, 05, 95] +D835 DC41; [43, 05, 95] +D835 DC75; [43, 05, 95] +D835 DCA9; [43, 05, 95] +D835 DCDD; [43, 05, 95] +D835 DD11; [43, 05, 95] +D835 DD79; [43, 05, 95] +D835 DDAD; [43, 05, 95] +D835 DDE1; [43, 05, 95] +D835 DE15; [43, 05, 95] +D835 DE49; [43, 05, 95] +D835 DE7D; [43, 05, 95] +24C3; [43, 05, 97] +207F; [43, 05, 27] +1D3A; [43, 05, B9] +0144; [43, 05, 05][, 8D, 05] +0143; [43, 05, 8F][, 8D, 05] +01F9; [43, 05, 05][, 8F, 05] +01F8; [43, 05, 8F][, 8F, 05] +0148; [43, 05, 05][, 97, 05] +0147; [43, 05, 8F][, 97, 05] +00F1; [43, 05, 05][, A1, 05] +00D1; [43, 05, 8F][, A1, 05] +1E45; [43, 05, 05][, A3, 05] +1E44; [43, 05, 8F][, A3, 05] +0146; [43, 05, 05][, A7, 05] +0145; [43, 05, 8F][, A7, 05] +1E47; [43, 05, 05][, D0 4D, 05] +1E46; [43, 05, 8F][, D0 4D, 05] +1E4B; [43, 05, 05][, D0 CD, 05] +1E4A; [43, 05, 8F][, D0 CD, 05] +1E49; [43, 05, 05][, D1 11, 05] +1E48; [43, 05, 8F][, D1 11, 05] +3381; [43, 05, 37][29, 05, B9] +338B; [43, 05, 37][33, 05, B9] +01CC; [43, 05, 09][3B, 05, 09] +01CB; [43, 05, 93][3B, 05, 09] +01CA; [43, 05, 93][3B, 05, 93] +339A; [43, 05, 37][41, 05, 37] +2116; [43, 05, 93][45, 05, 09] +33B1; [43, 05, 37][4D, 05, 37] +33B5; [43, 05, 37][53, 05, B9] +33BB; [43, 05, 37][55, 05, B9] + +0274; [44 60, 05, 05] +1DB0; [44 60, 05, 27] + +1D3B; [44 62, 05, 05] + +1D0E; [44 64, 05, 05] + +1D70; [44 66, 05, 05] + +0272; [44 68, 05, 05] +019D; [44 68, 05, 8F] +1DAE; [44 68, 05, 27] + +019E; [44 6A, 05, 05] +0220; [44 6A, 05, 8F] + +1D87; [44 6C, 05, 05] + +0273; [44 6E, 05, 05] +1DAF; [44 6E, 05, 27] + +0235; [44 70, 05, 05] + +014B; [44 72, 05, 05] +014A; [44 72, 05, 8F] +1D51; [44 72, 05, 27] + +006F; [45, 05, 05] +FF4F; [45, 05, 07] +0366; [45, 05, 09] +2134; [45, 05, 0B] +D835 DC28; [45, 05, 0B] +D835 DC5C; [45, 05, 0B] +D835 DC90; [45, 05, 0B] +D835 DCF8; [45, 05, 0B] +D835 DD2C; [45, 05, 0B] +D835 DD60; [45, 05, 0B] +D835 DD94; [45, 05, 0B] +D835 DDC8; [45, 05, 0B] +D835 DDFC; [45, 05, 0B] +D835 DE30; [45, 05, 0B] +D835 DE64; [45, 05, 0B] +D835 DE98; [45, 05, 0B] +24DE; [45, 05, 0D] +004F; [45, 05, 8F] +FF2F; [45, 05, 91] +D835 DC0E; [45, 05, 95] +D835 DC42; [45, 05, 95] +D835 DC76; [45, 05, 95] +D835 DCAA; [45, 05, 95] +D835 DCDE; [45, 05, 95] +D835 DD12; [45, 05, 95] +D835 DD46; [45, 05, 95] +D835 DD7A; [45, 05, 95] +D835 DDAE; [45, 05, 95] +D835 DDE2; [45, 05, 95] +D835 DE16; [45, 05, 95] +D835 DE4A; [45, 05, 95] +D835 DE7E; [45, 05, 95] +24C4; [45, 05, 97] +00BA; [45, 05, 27] +1D52; [45, 05, 27] +2092; [45, 05, 29] +1D3C; [45, 05, B9] +00F3; [45, 05, 05][, 8D, 05] +00D3; [45, 05, 8F][, 8D, 05] +00F2; [45, 05, 05][, 8F, 05] +00D2; [45, 05, 8F][, 8F, 05] +014F; [45, 05, 05][, 91, 05] +014E; [45, 05, 8F][, 91, 05] +00F4; [45, 05, 05][, 93, 05] +00D4; [45, 05, 8F][, 93, 05] +1ED1; [45, 05, 05][, 93, 05][, 8D, 05] +1ED0; [45, 05, 8F][, 93, 05][, 8D, 05] +1ED3; [45, 05, 05][, 93, 05][, 8F, 05] +1ED2; [45, 05, 8F][, 93, 05][, 8F, 05] +1ED7; [45, 05, 05][, 93, 05][, A1, 05] +1ED6; [45, 05, 8F][, 93, 05][, A1, 05] +1ED5; [45, 05, 05][, 93, 05][, AF, 05] +1ED4; [45, 05, 8F][, 93, 05][, AF, 05] +01D2; [45, 05, 05][, 97, 05] +01D1; [45, 05, 8F][, 97, 05] +00F6; [45, 05, 05][, 9D, 05] +00D6; [45, 05, 8F][, 9D, 05] +022B; [45, 05, 05][, 9D, 05][, AB, 05] +022A; [45, 05, 8F][, 9D, 05][, AB, 05] +0151; [45, 05, 05][, 9F, 05] +0150; [45, 05, 8F][, 9F, 05] +00F5; [45, 05, 05][, A1, 05] +00D5; [45, 05, 8F][, A1, 05] +1E4D; [45, 05, 05][, A1, 05][, 8D, 05] +1E4C; [45, 05, 8F][, A1, 05][, 8D, 05] +1E4F; [45, 05, 05][, A1, 05][, 9D, 05] +1E4E; [45, 05, 8F][, A1, 05][, 9D, 05] +022D; [45, 05, 05][, A1, 05][, AB, 05] +022C; [45, 05, 8F][, A1, 05][, AB, 05] +022F; [45, 05, 05][, A3, 05] +022E; [45, 05, 8F][, A3, 05] +0231; [45, 05, 05][, A3, 05][, AB, 05] +0230; [45, 05, 8F][, A3, 05][, AB, 05] +00F8; [45, 05, 05][, A5, 05] +00D8; [45, 05, 8F][, A5, 05] +01FF; [45, 05, 05][, A5, 05][, 8D, 05] +01FE; [45, 05, 8F][, A5, 05][, 8D, 05] +01EB; [45, 05, 05][, A9, 05] +01EA; [45, 05, 8F][, A9, 05] +01ED; [45, 05, 05][, A9, 05][, AB, 05] +01EC; [45, 05, 8F][, A9, 05][, AB, 05] +014D; [45, 05, 05][, AB, 05] +014C; [45, 05, 8F][, AB, 05] +1E53; [45, 05, 05][, AB, 05][, 8D, 05] +1E52; [45, 05, 8F][, AB, 05][, 8D, 05] +1E51; [45, 05, 05][, AB, 05][, 8F, 05] +1E50; [45, 05, 8F][, AB, 05][, 8F, 05] +1ECF; [45, 05, 05][, AF, 05] +1ECE; [45, 05, 8F][, AF, 05] +020D; [45, 05, 05][, B5, 05] +020C; [45, 05, 8F][, B5, 05] +020F; [45, 05, 05][, B9, 05] +020E; [45, 05, 8F][, B9, 05] +01A1; [45, 05, 05][, C9, 05] +01A0; [45, 05, 8F][, C9, 05] +1EDB; [45, 05, 05][, C9, 05][, 8D, 05] +1EDA; [45, 05, 8F][, C9, 05][, 8D, 05] +1EDD; [45, 05, 05][, C9, 05][, 8F, 05] +1EDC; [45, 05, 8F][, C9, 05][, 8F, 05] +1EE1; [45, 05, 05][, C9, 05][, A1, 05] +1EE0; [45, 05, 8F][, C9, 05][, A1, 05] +1EDF; [45, 05, 05][, C9, 05][, AF, 05] +1EDE; [45, 05, 8F][, C9, 05][, AF, 05] +1EE3; [45, 05, 05][, C9, 05][, D0 4D, 05] +1EE2; [45, 05, 8F][, C9, 05][, D0 4D, 05] +1ECD; [45, 05, 05][, D0 4D, 05] +1ECC; [45, 05, 8F][, D0 4D, 05] +1ED9; [45, 05, 05][, D0 4D, 05][, 93, 05] +1ED8; [45, 05, 8F][, D0 4D, 05][, 93, 05] +0153; [45, 05, 09][, E4 4D, 09][31, 05, 3D] +0152; [45, 05, 93][, E4 4D, 09][31, 05, 3D] +3375; [45, 05, 37][53, 05, B9] + +1D0F; [46 60, 05, 05] + +1D11; [46 62, 05, 05] + +0276; [46 64, 05, 05] + +1D14; [46 66, 05, 05] + +1D13; [46 68, 05, 05] + +0254; [46 6A, 05, 05] +0186; [46 6A, 05, 8F] +1D53; [46 6A, 05, 27] + +1D10; [46 6C, 05, 05] + +1D12; [46 6E, 05, 05] + +1D97; [46 70, 05, 05] + +1D16; [46 72, 05, 05] +1D54; [46 72, 05, 27] + +1D17; [46 74, 05, 05] +1D55; [46 74, 05, 27] + +0275; [46 76, 05, 05] +019F; [46 76, 05, 8F] +1DB1; [46 76, 05, 27] + +0277; [46 78, 05, 05] + +0223; [46 7A, 05, 05] +0222; [46 7A, 05, 8F] +1D3D; [46 7A, 05, B9] + +1D15; [46 7C, 05, 05] + +0070; [47, 05, 05] +FF50; [47, 05, 07] +D835 DC29; [47, 05, 0B] +D835 DC5D; [47, 05, 0B] +D835 DC91; [47, 05, 0B] +D835 DCC5; [47, 05, 0B] +D835 DCF9; [47, 05, 0B] +D835 DD2D; [47, 05, 0B] +D835 DD61; [47, 05, 0B] +D835 DD95; [47, 05, 0B] +D835 DDC9; [47, 05, 0B] +D835 DDFD; [47, 05, 0B] +D835 DE31; [47, 05, 0B] +D835 DE65; [47, 05, 0B] +D835 DE99; [47, 05, 0B] +24DF; [47, 05, 0D] +0050; [47, 05, 8F] +FF30; [47, 05, 91] +2119; [47, 05, 95] +D835 DC0F; [47, 05, 95] +D835 DC43; [47, 05, 95] +D835 DC77; [47, 05, 95] +D835 DCAB; [47, 05, 95] +D835 DCDF; [47, 05, 95] +D835 DD13; [47, 05, 95] +D835 DD7B; [47, 05, 95] +D835 DDAF; [47, 05, 95] +D835 DDE3; [47, 05, 95] +D835 DE17; [47, 05, 95] +D835 DE4B; [47, 05, 95] +D835 DE7F; [47, 05, 95] +24C5; [47, 05, 97] +1D56; [47, 05, 27] +1D3E; [47, 05, B9] +1E55; [47, 05, 05][, 8D, 05] +1E54; [47, 05, 8F][, 8D, 05] +1E57; [47, 05, 05][, A3, 05] +1E56; [47, 05, 8F][, A3, 05] +33D8; [47, 05, 37][08 1D, 05, 37][41, 05, 3D][08 1D, 05, 3D] +3380; [47, 05, 37][29, 05, B9] +33A9; [47, 05, B9][29, 05, 37] +3376; [47, 05, 37][2D, 05, 37] +338A; [47, 05, 37][33, 05, B9] +33D7; [47, 05, B9][37, 05, B9] +33D9; [47, 05, B9][47, 05, B9][41, 05, 3D] +33DA; [47, 05, B9][4B, 05, B9] +33B0; [47, 05, 37][4D, 05, 37] +3250; [47, 05, B9][4F, 05, B9][31, 05, 3D] +33B4; [47, 05, 37][53, 05, B9] +33BA; [47, 05, 37][55, 05, B9] + +1D18; [48 60, 05, 05] + +1D7D; [48 62, 05, 05] +2C63; [48 62, 05, 8F] + +1D71; [48 64, 05, 05] + +1D88; [48 66, 05, 05] + +01A5; [48 68, 05, 05] +01A4; [48 68, 05, 8F] + +0278; [48 6A, 05, 05] +1DB2; [48 6A, 05, 27] + +2C77; [48 6C, 05, 05] + +0071; [49, 05, 05] +FF51; [49, 05, 07] +D835 DC2A; [49, 05, 0B] +D835 DC5E; [49, 05, 0B] +D835 DC92; [49, 05, 0B] +D835 DCC6; [49, 05, 0B] +D835 DCFA; [49, 05, 0B] +D835 DD2E; [49, 05, 0B] +D835 DD62; [49, 05, 0B] +D835 DD96; [49, 05, 0B] +D835 DDCA; [49, 05, 0B] +D835 DDFE; [49, 05, 0B] +D835 DE32; [49, 05, 0B] +D835 DE66; [49, 05, 0B] +D835 DE9A; [49, 05, 0B] +24E0; [49, 05, 0D] +0051; [49, 05, 8F] +FF31; [49, 05, 91] +211A; [49, 05, 95] +D835 DC10; [49, 05, 95] +D835 DC44; [49, 05, 95] +D835 DC78; [49, 05, 95] +D835 DCAC; [49, 05, 95] +D835 DCE0; [49, 05, 95] +D835 DD14; [49, 05, 95] +D835 DD7C; [49, 05, 95] +D835 DDB0; [49, 05, 95] +D835 DDE4; [49, 05, 95] +D835 DE18; [49, 05, 95] +D835 DE4C; [49, 05, 95] +D835 DE80; [49, 05, 95] +24C6; [49, 05, 97] +0239; [49, 05, 09][47, 05, 09] + +02A0; [4A 60, 05, 05] + +024B; [4A 62, 05, 05] +024A; [4A 62, 05, 8F] + +0138; [4A 64, 05, 05] + +0072; [4B, 05, 05] +FF52; [4B, 05, 07] +036C; [4B, 05, 09] +D835 DC2B; [4B, 05, 0B] +D835 DC5F; [4B, 05, 0B] +D835 DC93; [4B, 05, 0B] +D835 DCC7; [4B, 05, 0B] +D835 DCFB; [4B, 05, 0B] +D835 DD2F; [4B, 05, 0B] +D835 DD63; [4B, 05, 0B] +D835 DD97; [4B, 05, 0B] +D835 DDCB; [4B, 05, 0B] +D835 DDFF; [4B, 05, 0B] +D835 DE33; [4B, 05, 0B] +D835 DE67; [4B, 05, 0B] +D835 DE9B; [4B, 05, 0B] +24E1; [4B, 05, 0D] +0052; [4B, 05, 8F] +FF32; [4B, 05, 91] +211B; [4B, 05, 95] +211C; [4B, 05, 95] +211D; [4B, 05, 95] +D835 DC11; [4B, 05, 95] +D835 DC45; [4B, 05, 95] +D835 DC79; [4B, 05, 95] +D835 DCE1; [4B, 05, 95] +D835 DD7D; [4B, 05, 95] +D835 DDB1; [4B, 05, 95] +D835 DDE5; [4B, 05, 95] +D835 DE19; [4B, 05, 95] +D835 DE4D; [4B, 05, 95] +D835 DE81; [4B, 05, 95] +24C7; [4B, 05, 97] +02B3; [4B, 05, 27] +1D63; [4B, 05, 29] +1D3F; [4B, 05, B9] +0155; [4B, 05, 05][, 8D, 05] +0154; [4B, 05, 8F][, 8D, 05] +0159; [4B, 05, 05][, 97, 05] +0158; [4B, 05, 8F][, 97, 05] +1E59; [4B, 05, 05][, A3, 05] +1E58; [4B, 05, 8F][, A3, 05] +0157; [4B, 05, 05][, A7, 05] +0156; [4B, 05, 8F][, A7, 05] +0211; [4B, 05, 05][, B5, 05] +0210; [4B, 05, 8F][, B5, 05] +0213; [4B, 05, 05][, B9, 05] +0212; [4B, 05, 8F][, B9, 05] +1E5B; [4B, 05, 05][, D0 4D, 05] +1E5A; [4B, 05, 8F][, D0 4D, 05] +1E5D; [4B, 05, 05][, D0 4D, 05][, AB, 05] +1E5C; [4B, 05, 8F][, D0 4D, 05][, AB, 05] +1E5F; [4B, 05, 05][, D1 11, 05] +1E5E; [4B, 05, 8F][, D1 11, 05] +33AD; [4B, 05, 37][29, 05, 37][2F, 05, 3D] +33AE; [4B, 05, 37][29, 05, 37][2F, 05, 3D][0C F7, 05, 3D][4D, 05, 3D] +33AF; [4B, 05, 37][29, 05, 37][2F, 05, 3D][0C F7, 05, 3D][4D, 05, 3D][26 7E, 05, 3D] +20A8; [4B, 05, 93][4D, 05, 09] + +0280; [4C 60, 05, 05] +01A6; [4C 60, 05, 8F] + +1D19; [4C 62, 05, 05] + +024D; [4C 64, 05, 05] +024C; [4C 64, 05, 8F] + +1D72; [4C 66, 05, 05] + +0279; [4C 68, 05, 05] +02B4; [4C 68, 05, 27] + +1D1A; [4C 6A, 05, 05] + +027A; [4C 6C, 05, 05] + +1D89; [4C 6E, 05, 05] + +027B; [4C 70, 05, 05] +02B5; [4C 70, 05, 27] + +027C; [4C 72, 05, 05] + +027D; [4C 74, 05, 05] +2C64; [4C 74, 05, 8F] + +027E; [4C 76, 05, 05] + +1D73; [4C 78, 05, 05] + +027F; [4C 7A, 05, 05] + +0281; [4C 7C, 05, 05] +02B6; [4C 7C, 05, 27] + +0073; [4D, 05, 05] +FF53; [4D, 05, 07] +D835 DC2C; [4D, 05, 0B] +D835 DC60; [4D, 05, 0B] +D835 DC94; [4D, 05, 0B] +D835 DCC8; [4D, 05, 0B] +D835 DCFC; [4D, 05, 0B] +D835 DD30; [4D, 05, 0B] +D835 DD64; [4D, 05, 0B] +D835 DD98; [4D, 05, 0B] +D835 DDCC; [4D, 05, 0B] +D835 DE00; [4D, 05, 0B] +D835 DE34; [4D, 05, 0B] +D835 DE68; [4D, 05, 0B] +D835 DE9C; [4D, 05, 0B] +24E2; [4D, 05, 0D] +0053; [4D, 05, 8F] +FF33; [4D, 05, 91] +D835 DC12; [4D, 05, 95] +D835 DC46; [4D, 05, 95] +D835 DC7A; [4D, 05, 95] +D835 DCAE; [4D, 05, 95] +D835 DCE2; [4D, 05, 95] +D835 DD16; [4D, 05, 95] +D835 DD4A; [4D, 05, 95] +D835 DD7E; [4D, 05, 95] +D835 DDB2; [4D, 05, 95] +D835 DDE6; [4D, 05, 95] +D835 DE1A; [4D, 05, 95] +D835 DE4E; [4D, 05, 95] +D835 DE82; [4D, 05, 95] +24C8; [4D, 05, 97] +02E2; [4D, 05, 27] +015B; [4D, 05, 05][, 8D, 05] +015A; [4D, 05, 8F][, 8D, 05] +1E65; [4D, 05, 05][, 8D, 05][, A3, 05] +1E64; [4D, 05, 8F][, 8D, 05][, A3, 05] +015D; [4D, 05, 05][, 93, 05] +015C; [4D, 05, 8F][, 93, 05] +0161; [4D, 05, 05][, 97, 05] +0160; [4D, 05, 8F][, 97, 05] +1E67; [4D, 05, 05][, 97, 05][, A3, 05] +1E66; [4D, 05, 8F][, 97, 05][, A3, 05] +1E61; [4D, 05, 05][, A3, 05] +1E60; [4D, 05, 8F][, A3, 05] +015F; [4D, 05, 05][, A7, 05] +015E; [4D, 05, 8F][, A7, 05] +1E63; [4D, 05, 05][, D0 4D, 05] +1E62; [4D, 05, 8F][, D0 4D, 05] +1E69; [4D, 05, 05][, D0 4D, 05][, A3, 05] +1E68; [4D, 05, 8F][, D0 4D, 05][, A3, 05] +0219; [4D, 05, 05][, D0 7D, 05] +0218; [4D, 05, 8F][, D0 7D, 05] +017F; [4D, 05, 09][, E4 5D, 09] +1E9B; [4D, 05, 09][, E4 5D, 09][, A3, 05] +2120; [4D, 05, 27][41, 05, 27] +33DB; [4D, 05, 37][4B, 05, 37] +00DF; [4D, 05, 09][, E4 4D, 09][4D, 05, 3D] +FB06; [4D, 05, 09][4F, 05, 09] +FB05; [4D, 05, 09][, E4 5D, 09][4F, 05, 3D] +33DC; [4D, 05, B9][53, 05, 37] + +1D74; [4E 60, 05, 05] + +1D8A; [4E 62, 05, 05] + +0282; [4E 64, 05, 05] +1DB3; [4E 64, 05, 27] + +023F; [4E 66, 05, 05] + +0283; [4E 68, 05, 05] +01A9; [4E 68, 05, 8F] +1DB4; [4E 68, 05, 27] + +1D8B; [4E 6A, 05, 05] + +01AA; [4E 6C, 05, 05] + +0285; [4E 6E, 05, 05] + +1D98; [4E 70, 05, 05] + +0286; [4E 72, 05, 05] + +0074; [4F, 05, 05] +FF54; [4F, 05, 07] +036D; [4F, 05, 09] +D835 DC2D; [4F, 05, 0B] +D835 DC61; [4F, 05, 0B] +D835 DC95; [4F, 05, 0B] +D835 DCC9; [4F, 05, 0B] +D835 DCFD; [4F, 05, 0B] +D835 DD31; [4F, 05, 0B] +D835 DD65; [4F, 05, 0B] +D835 DD99; [4F, 05, 0B] +D835 DDCD; [4F, 05, 0B] +D835 DE01; [4F, 05, 0B] +D835 DE35; [4F, 05, 0B] +D835 DE69; [4F, 05, 0B] +D835 DE9D; [4F, 05, 0B] +24E3; [4F, 05, 0D] +0054; [4F, 05, 8F] +FF34; [4F, 05, 91] +D835 DC13; [4F, 05, 95] +D835 DC47; [4F, 05, 95] +D835 DC7B; [4F, 05, 95] +D835 DCAF; [4F, 05, 95] +D835 DCE3; [4F, 05, 95] +D835 DD17; [4F, 05, 95] +D835 DD4B; [4F, 05, 95] +D835 DD7F; [4F, 05, 95] +D835 DDB3; [4F, 05, 95] +D835 DDE7; [4F, 05, 95] +D835 DE1B; [4F, 05, 95] +D835 DE4F; [4F, 05, 95] +D835 DE83; [4F, 05, 95] +24C9; [4F, 05, 97] +1D57; [4F, 05, 27] +1D40; [4F, 05, B9] +0165; [4F, 05, 05][, 97, 05] +0164; [4F, 05, 8F][, 97, 05] +1E97; [4F, 05, 05][, 9D, 05] +1E6B; [4F, 05, 05][, A3, 05] +1E6A; [4F, 05, 8F][, A3, 05] +0163; [4F, 05, 05][, A7, 05] +0162; [4F, 05, 8F][, A7, 05] +1E6D; [4F, 05, 05][, D0 4D, 05] +1E6C; [4F, 05, 8F][, D0 4D, 05] +021B; [4F, 05, 05][, D0 7D, 05] +021A; [4F, 05, 8F][, D0 7D, 05] +1E71; [4F, 05, 05][, D0 CD, 05] +1E70; [4F, 05, 8F][, D0 CD, 05] +1E6F; [4F, 05, 05][, D1 11, 05] +1E6E; [4F, 05, 8F][, D1 11, 05] +02A8; [4F, 05, 09][2E 66, 05, 09] +2121; [4F, 05, 93][31, 05, 93][3F, 05, 3D] +1D7A; [4F, 05, 09][, E4 5D, 09][37, 05, 3D] +3394; [4F, 05, B9][37, 05, B9][5B, 05, 3D] +2122; [4F, 05, 27][41, 05, 27] +01BE; [4F, 05, 09][4D, 05, 09] +02A6; [4F, 05, 09][4D, 05, 09] +02A7; [4F, 05, 09][4E 68, 05, 09] + +1D1B; [50 60, 05, 05] + +0167; [50 62, 05, 05] +0166; [50 62, 05, 8F] + +2C66; [50 64, 05, 05] +023E; [50 64, 05, 8F] + +1D75; [50 66, 05, 05] + +01AB; [50 68, 05, 05] +1DB5; [50 68, 05, 27] + +01AD; [50 6A, 05, 05] +01AC; [50 6A, 05, 8F] + +0288; [50 6C, 05, 05] +01AE; [50 6C, 05, 8F] + +0236; [50 6E, 05, 05] + +0287; [50 70, 05, 05] + +0075; [51, 05, 05] +FF55; [51, 05, 07] +0367; [51, 05, 09] +D835 DC2E; [51, 05, 0B] +D835 DC62; [51, 05, 0B] +D835 DC96; [51, 05, 0B] +D835 DCCA; [51, 05, 0B] +D835 DCFE; [51, 05, 0B] +D835 DD32; [51, 05, 0B] +D835 DD66; [51, 05, 0B] +D835 DD9A; [51, 05, 0B] +D835 DDCE; [51, 05, 0B] +D835 DE02; [51, 05, 0B] +D835 DE36; [51, 05, 0B] +D835 DE6A; [51, 05, 0B] +D835 DE9E; [51, 05, 0B] +24E4; [51, 05, 0D] +0055; [51, 05, 8F] +FF35; [51, 05, 91] +D835 DC14; [51, 05, 95] +D835 DC48; [51, 05, 95] +D835 DC7C; [51, 05, 95] +D835 DCB0; [51, 05, 95] +D835 DCE4; [51, 05, 95] +D835 DD18; [51, 05, 95] +D835 DD4C; [51, 05, 95] +D835 DD80; [51, 05, 95] +D835 DDB4; [51, 05, 95] +D835 DDE8; [51, 05, 95] +D835 DE1C; [51, 05, 95] +D835 DE50; [51, 05, 95] +D835 DE84; [51, 05, 95] +24CA; [51, 05, 97] +1D58; [51, 05, 27] +1D64; [51, 05, 29] +1D41; [51, 05, B9] +00FA; [51, 05, 05][, 8D, 05] +00DA; [51, 05, 8F][, 8D, 05] +00F9; [51, 05, 05][, 8F, 05] +00D9; [51, 05, 8F][, 8F, 05] +016D; [51, 05, 05][, 91, 05] +016C; [51, 05, 8F][, 91, 05] +00FB; [51, 05, 05][, 93, 05] +00DB; [51, 05, 8F][, 93, 05] +01D4; [51, 05, 05][, 97, 05] +01D3; [51, 05, 8F][, 97, 05] +016F; [51, 05, 05][, 99, 05] +016E; [51, 05, 8F][, 99, 05] +00FC; [51, 05, 05][, 9D, 05] +00DC; [51, 05, 8F][, 9D, 05] +01D8; [51, 05, 05][, 9D, 05][, 8D, 05] +01D7; [51, 05, 8F][, 9D, 05][, 8D, 05] +01DC; [51, 05, 05][, 9D, 05][, 8F, 05] +01DB; [51, 05, 8F][, 9D, 05][, 8F, 05] +01DA; [51, 05, 05][, 9D, 05][, 97, 05] +01D9; [51, 05, 8F][, 9D, 05][, 97, 05] +01D6; [51, 05, 05][, 9D, 05][, AB, 05] +01D5; [51, 05, 8F][, 9D, 05][, AB, 05] +0171; [51, 05, 05][, 9F, 05] +0170; [51, 05, 8F][, 9F, 05] +0169; [51, 05, 05][, A1, 05] +0168; [51, 05, 8F][, A1, 05] +1E79; [51, 05, 05][, A1, 05][, 8D, 05] +1E78; [51, 05, 8F][, A1, 05][, 8D, 05] +0173; [51, 05, 05][, A9, 05] +0172; [51, 05, 8F][, A9, 05] +016B; [51, 05, 05][, AB, 05] +016A; [51, 05, 8F][, AB, 05] +1E7B; [51, 05, 05][, AB, 05][, 9D, 05] +1E7A; [51, 05, 8F][, AB, 05][, 9D, 05] +1EE7; [51, 05, 05][, AF, 05] +1EE6; [51, 05, 8F][, AF, 05] +0215; [51, 05, 05][, B5, 05] +0214; [51, 05, 8F][, B5, 05] +0217; [51, 05, 05][, B9, 05] +0216; [51, 05, 8F][, B9, 05] +01B0; [51, 05, 05][, C9, 05] +01AF; [51, 05, 8F][, C9, 05] +1EE9; [51, 05, 05][, C9, 05][, 8D, 05] +1EE8; [51, 05, 8F][, C9, 05][, 8D, 05] +1EEB; [51, 05, 05][, C9, 05][, 8F, 05] +1EEA; [51, 05, 8F][, C9, 05][, 8F, 05] +1EEF; [51, 05, 05][, C9, 05][, A1, 05] +1EEE; [51, 05, 8F][, C9, 05][, A1, 05] +1EED; [51, 05, 05][, C9, 05][, AF, 05] +1EEC; [51, 05, 8F][, C9, 05][, AF, 05] +1EF1; [51, 05, 05][, C9, 05][, D0 4D, 05] +1EF0; [51, 05, 8F][, C9, 05][, D0 4D, 05] +1EE5; [51, 05, 05][, D0 4D, 05] +1EE4; [51, 05, 8F][, D0 4D, 05] +1E73; [51, 05, 05][, D0 5D, 05] +1E72; [51, 05, 8F][, D0 5D, 05] +1E77; [51, 05, 05][, D0 CD, 05] +1E76; [51, 05, 8F][, D0 CD, 05] +1E75; [51, 05, 05][, D0 FD, 05] +1E74; [51, 05, 8F][, D0 FD, 05] + +1D1C; [52 60, 05, 05] +1DB8; [52 60, 05, 27] + +1D1D; [52 62, 05, 05] +1D59; [52 62, 05, 27] + +1D1E; [52 64, 05, 05] + +1D6B; [52 66, 05, 05] + +0289; [52 68, 05, 05] +0244; [52 68, 05, 8F] +1DB6; [52 68, 05, 27] + +1D7E; [52 6A, 05, 05] + +1D99; [52 6C, 05, 05] + +0265; [52 6E, 05, 05] +1DA3; [52 6E, 05, 27] + +02AE; [52 70, 05, 05] + +02AF; [52 72, 05, 05] + +026F; [52 74, 05, 05] +019C; [52 74, 05, 8F] +1D5A; [52 74, 05, 27] + +1D1F; [52 76, 05, 05] + +0270; [52 78, 05, 05] +1DAD; [52 78, 05, 27] + +028A; [52 7A, 05, 05] +01B1; [52 7A, 05, 8F] +1DB7; [52 7A, 05, 27] + +1D7F; [52 7C, 05, 05] + +0076; [53, 05, 05] +FF56; [53, 05, 07] +036E; [53, 05, 09] +2174; [53, 05, 09] +D835 DC2F; [53, 05, 0B] +D835 DC63; [53, 05, 0B] +D835 DC97; [53, 05, 0B] +D835 DCCB; [53, 05, 0B] +D835 DCFF; [53, 05, 0B] +D835 DD33; [53, 05, 0B] +D835 DD67; [53, 05, 0B] +D835 DD9B; [53, 05, 0B] +D835 DDCF; [53, 05, 0B] +D835 DE03; [53, 05, 0B] +D835 DE37; [53, 05, 0B] +D835 DE6B; [53, 05, 0B] +D835 DE9F; [53, 05, 0B] +24E5; [53, 05, 0D] +0056; [53, 05, 8F] +FF36; [53, 05, 91] +2164; [53, 05, 93] +D835 DC15; [53, 05, 95] +D835 DC49; [53, 05, 95] +D835 DC7D; [53, 05, 95] +D835 DCB1; [53, 05, 95] +D835 DCE5; [53, 05, 95] +D835 DD19; [53, 05, 95] +D835 DD4D; [53, 05, 95] +D835 DD81; [53, 05, 95] +D835 DDB5; [53, 05, 95] +D835 DDE9; [53, 05, 95] +D835 DE1D; [53, 05, 95] +D835 DE51; [53, 05, 95] +D835 DE85; [53, 05, 95] +24CB; [53, 05, 97] +1D5B; [53, 05, 27] +1D65; [53, 05, 29] +1E7D; [53, 05, 05][, A1, 05] +1E7C; [53, 05, 8F][, A1, 05] +1E7F; [53, 05, 05][, D0 4D, 05] +1E7E; [53, 05, 8F][, D0 4D, 05] +33DE; [53, 05, B9][0C F7, 05, 37][41, 05, 3D] +2175; [53, 05, 09][39, 05, 09] +2165; [53, 05, 93][39, 05, 93] +2176; [53, 05, 09][39, 05, 09][39, 05, 3D] +2166; [53, 05, 93][39, 05, 93][39, 05, 3D] +2177; [53, 05, 09][39, 05, 09][39, 05, 3D][39, 05, 3D] +2167; [53, 05, 93][39, 05, 93][39, 05, 3D][39, 05, 3D] + +1D20; [54 60, 05, 05] + +1D8C; [54 62, 05, 05] + +028B; [54 64, 05, 05] +01B2; [54 64, 05, 8F] +1DB9; [54 64, 05, 27] + +2C74; [54 66, 05, 05] + +028C; [54 68, 05, 05] +0245; [54 68, 05, 8F] +1DBA; [54 68, 05, 27] + +0077; [55, 05, 05] +FF57; [55, 05, 07] +D835 DC30; [55, 05, 0B] +D835 DC64; [55, 05, 0B] +D835 DC98; [55, 05, 0B] +D835 DCCC; [55, 05, 0B] +D835 DD00; [55, 05, 0B] +D835 DD34; [55, 05, 0B] +D835 DD68; [55, 05, 0B] +D835 DD9C; [55, 05, 0B] +D835 DDD0; [55, 05, 0B] +D835 DE04; [55, 05, 0B] +D835 DE38; [55, 05, 0B] +D835 DE6C; [55, 05, 0B] +D835 DEA0; [55, 05, 0B] +24E6; [55, 05, 0D] +0057; [55, 05, 8F] +FF37; [55, 05, 91] +D835 DC16; [55, 05, 95] +D835 DC4A; [55, 05, 95] +D835 DC7E; [55, 05, 95] +D835 DCB2; [55, 05, 95] +D835 DCE6; [55, 05, 95] +D835 DD1A; [55, 05, 95] +D835 DD4E; [55, 05, 95] +D835 DD82; [55, 05, 95] +D835 DDB6; [55, 05, 95] +D835 DDEA; [55, 05, 95] +D835 DE1E; [55, 05, 95] +D835 DE52; [55, 05, 95] +D835 DE86; [55, 05, 95] +24CC; [55, 05, 97] +02B7; [55, 05, 27] +1D42; [55, 05, B9] +1E83; [55, 05, 05][, 8D, 05] +1E82; [55, 05, 8F][, 8D, 05] +1E81; [55, 05, 05][, 8F, 05] +1E80; [55, 05, 8F][, 8F, 05] +0175; [55, 05, 05][, 93, 05] +0174; [55, 05, 8F][, 93, 05] +1E98; [55, 05, 05][, 99, 05] +1E85; [55, 05, 05][, 9D, 05] +1E84; [55, 05, 8F][, 9D, 05] +1E87; [55, 05, 05][, A3, 05] +1E86; [55, 05, 8F][, A3, 05] +1E89; [55, 05, 05][, D0 4D, 05] +1E88; [55, 05, 8F][, D0 4D, 05] +33DD; [55, 05, B9][2B, 05, 37] + +1D21; [56 60, 05, 05] + +028D; [56 62, 05, 05] + +0078; [57, 05, 05] +FF58; [57, 05, 07] +036F; [57, 05, 09] +2179; [57, 05, 09] +D835 DC31; [57, 05, 0B] +D835 DC65; [57, 05, 0B] +D835 DC99; [57, 05, 0B] +D835 DCCD; [57, 05, 0B] +D835 DD01; [57, 05, 0B] +D835 DD35; [57, 05, 0B] +D835 DD69; [57, 05, 0B] +D835 DD9D; [57, 05, 0B] +D835 DDD1; [57, 05, 0B] +D835 DE05; [57, 05, 0B] +D835 DE39; [57, 05, 0B] +D835 DE6D; [57, 05, 0B] +D835 DEA1; [57, 05, 0B] +24E7; [57, 05, 0D] +0058; [57, 05, 8F] +FF38; [57, 05, 91] +2169; [57, 05, 93] +D835 DC17; [57, 05, 95] +D835 DC4B; [57, 05, 95] +D835 DC7F; [57, 05, 95] +D835 DCB3; [57, 05, 95] +D835 DCE7; [57, 05, 95] +D835 DD1B; [57, 05, 95] +D835 DD4F; [57, 05, 95] +D835 DD83; [57, 05, 95] +D835 DDB7; [57, 05, 95] +D835 DDEB; [57, 05, 95] +D835 DE1F; [57, 05, 95] +D835 DE53; [57, 05, 95] +D835 DE87; [57, 05, 95] +24CD; [57, 05, 97] +02E3; [57, 05, 27] +2093; [57, 05, 29] +1E8D; [57, 05, 05][, 9D, 05] +1E8C; [57, 05, 8F][, 9D, 05] +1E8B; [57, 05, 05][, A3, 05] +1E8A; [57, 05, 8F][, A3, 05] +217A; [57, 05, 09][39, 05, 09] +216A; [57, 05, 93][39, 05, 93] +217B; [57, 05, 09][39, 05, 09][39, 05, 3D] +216B; [57, 05, 93][39, 05, 93][39, 05, 3D] + +1D8D; [58 60, 05, 05] + +0079; [59, 05, 05] +FF59; [59, 05, 07] +D835 DC32; [59, 05, 0B] +D835 DC66; [59, 05, 0B] +D835 DC9A; [59, 05, 0B] +D835 DCCE; [59, 05, 0B] +D835 DD02; [59, 05, 0B] +D835 DD36; [59, 05, 0B] +D835 DD6A; [59, 05, 0B] +D835 DD9E; [59, 05, 0B] +D835 DDD2; [59, 05, 0B] +D835 DE06; [59, 05, 0B] +D835 DE3A; [59, 05, 0B] +D835 DE6E; [59, 05, 0B] +D835 DEA2; [59, 05, 0B] +24E8; [59, 05, 0D] +0059; [59, 05, 8F] +FF39; [59, 05, 91] +D835 DC18; [59, 05, 95] +D835 DC4C; [59, 05, 95] +D835 DC80; [59, 05, 95] +D835 DCB4; [59, 05, 95] +D835 DCE8; [59, 05, 95] +D835 DD1C; [59, 05, 95] +D835 DD50; [59, 05, 95] +D835 DD84; [59, 05, 95] +D835 DDB8; [59, 05, 95] +D835 DDEC; [59, 05, 95] +D835 DE20; [59, 05, 95] +D835 DE54; [59, 05, 95] +D835 DE88; [59, 05, 95] +24CE; [59, 05, 97] +02B8; [59, 05, 27] +00FD; [59, 05, 05][, 8D, 05] +00DD; [59, 05, 8F][, 8D, 05] +1EF3; [59, 05, 05][, 8F, 05] +1EF2; [59, 05, 8F][, 8F, 05] +0177; [59, 05, 05][, 93, 05] +0176; [59, 05, 8F][, 93, 05] +1E99; [59, 05, 05][, 99, 05] +00FF; [59, 05, 05][, 9D, 05] +0178; [59, 05, 8F][, 9D, 05] +1EF9; [59, 05, 05][, A1, 05] +1EF8; [59, 05, 8F][, A1, 05] +1E8F; [59, 05, 05][, A3, 05] +1E8E; [59, 05, 8F][, A3, 05] +0233; [59, 05, 05][, AB, 05] +0232; [59, 05, 8F][, AB, 05] +1EF7; [59, 05, 05][, AF, 05] +1EF6; [59, 05, 8F][, AF, 05] +1EF5; [59, 05, 05][, D0 4D, 05] +1EF4; [59, 05, 8F][, D0 4D, 05] + +028F; [5A 60, 05, 05] + +024F; [5A 62, 05, 05] +024E; [5A 62, 05, 8F] + +01B4; [5A 64, 05, 05] +01B3; [5A 64, 05, 8F] + +007A; [5B, 05, 05] +FF5A; [5B, 05, 07] +D835 DC33; [5B, 05, 0B] +D835 DC67; [5B, 05, 0B] +D835 DC9B; [5B, 05, 0B] +D835 DCCF; [5B, 05, 0B] +D835 DD03; [5B, 05, 0B] +D835 DD37; [5B, 05, 0B] +D835 DD6B; [5B, 05, 0B] +D835 DD9F; [5B, 05, 0B] +D835 DDD3; [5B, 05, 0B] +D835 DE07; [5B, 05, 0B] +D835 DE3B; [5B, 05, 0B] +D835 DE6F; [5B, 05, 0B] +D835 DEA3; [5B, 05, 0B] +24E9; [5B, 05, 0D] +005A; [5B, 05, 8F] +FF3A; [5B, 05, 91] +2124; [5B, 05, 95] +2128; [5B, 05, 95] +D835 DC19; [5B, 05, 95] +D835 DC4D; [5B, 05, 95] +D835 DC81; [5B, 05, 95] +D835 DCB5; [5B, 05, 95] +D835 DCE9; [5B, 05, 95] +D835 DD85; [5B, 05, 95] +D835 DDB9; [5B, 05, 95] +D835 DDED; [5B, 05, 95] +D835 DE21; [5B, 05, 95] +D835 DE55; [5B, 05, 95] +D835 DE89; [5B, 05, 95] +24CF; [5B, 05, 97] +1DBB; [5B, 05, 27] +017A; [5B, 05, 05][, 8D, 05] +0179; [5B, 05, 8F][, 8D, 05] +1E91; [5B, 05, 05][, 93, 05] +1E90; [5B, 05, 8F][, 93, 05] +017E; [5B, 05, 05][, 97, 05] +017D; [5B, 05, 8F][, 97, 05] +017C; [5B, 05, 05][, A3, 05] +017B; [5B, 05, 8F][, A3, 05] +1E93; [5B, 05, 05][, D0 4D, 05] +1E92; [5B, 05, 8F][, D0 4D, 05] +1E95; [5B, 05, 05][, D1 11, 05] +1E94; [5B, 05, 8F][, D1 11, 05] +018D; [5B, 05, 09][55, 05, 09] + +1D22; [5C 60, 05, 05] + +01B6; [5C 62, 05, 05] +01B5; [5C 62, 05, 8F] + +1D76; [5C 64, 05, 05] + +1D8E; [5C 66, 05, 05] + +0225; [5C 68, 05, 05] +0224; [5C 68, 05, 8F] + +0290; [5C 6A, 05, 05] +1DBC; [5C 6A, 05, 27] + +0291; [5C 6C, 05, 05] +1DBD; [5C 6C, 05, 27] + +0240; [5C 6E, 05, 05] + +2C6C; [5C 70, 05, 05] +2C6B; [5C 70, 05, 8F] + +0292; [5C 72, 05, 05] +01B7; [5C 72, 05, 8F] +1DBE; [5C 72, 05, 27] +01EF; [5C 72, 05, 05][, 97, 05] +01EE; [5C 72, 05, 8F][, 97, 05] + +1D23; [5C 74, 05, 05] + +01B9; [5C 76, 05, 05] +01B8; [5C 76, 05, 8F] + +1D9A; [5C 78, 05, 05] + +01BA; [5C 7A, 05, 05] + +0293; [5C 7C, 05, 05] + +021D; [5C 7E, 05, 05] +021C; [5C 7E, 05, 8F] + +00FE; [5C 80, 05, 05] +00DE; [5C 80, 05, 8F] + +01BF; [5C 82, 05, 05] +01F7; [5C 82, 05, 8F] + +01BB; [5C 84, 05, 05] + +01A8; [5C 86, 05, 05] +01A7; [5C 86, 05, 8F] + +01BD; [5C 88, 05, 05] +01BC; [5C 88, 05, 8F] + +0185; [5C 8A, 05, 05] +0184; [5C 8A, 05, 8F] + +0294; [5C 8C, 05, 05] + +0242; [5C 8E, 05, 05] +0241; [5C 8E, 05, 8F] + +02C0; [5C 90, 05, 05] + +02BC; [5C 92, 05, 05] +0149; [5C 92, 05, 09][43, 05, 09] + +02EE; [5C 94, 05, 05] + +02BE; [5C 96, 05, 05] + +0295; [5C 98, 05, 05] +02E4; [5C 98, 05, 27] + +02BF; [5C 9A, 05, 05] + +02C1; [5C 9C, 05, 05] + +1D24; [5C 9E, 05, 05] + +1D25; [5C A0, 05, 05] +1D5C; [5C A0, 05, 27] + +02A1; [5C A2, 05, 05] + +02A2; [5C A4, 05, 05] + +0296; [5C A6, 05, 05] + +01C0; [5C A8, 05, 05] + +01C1; [5C AA, 05, 05] + +01C2; [5C AC, 05, 05] + +01C3; [5C AE, 05, 05] + +0297; [5C B0, 05, 05] + +0298; [5C B2, 05, 05] + +02AC; [5C B4, 05, 05] + +02AD; [5C B6, 05, 05] + +03B1; [5D 20, 05, 05] +D835 DEC2; [5D 20, 05, 0B] +D835 DEFC; [5D 20, 05, 0B] +D835 DF36; [5D 20, 05, 0B] +D835 DF70; [5D 20, 05, 0B] +D835 DFAA; [5D 20, 05, 0B] +0391; [5D 20, 05, 8F] +D835 DEA8; [5D 20, 05, 95] +D835 DEE2; [5D 20, 05, 95] +D835 DF1C; [5D 20, 05, 95] +D835 DF56; [5D 20, 05, 95] +D835 DF90; [5D 20, 05, 95] +1F00; [5D 20, 05, 05][, 89, 05] +1F08; [5D 20, 05, 8F][, 89, 05] +1F04; [5D 20, 05, 05][, 89, 05][, 8D, 05] +1F0C; [5D 20, 05, 8F][, 89, 05][, 8D, 05] +1F84; [5D 20, 05, 05][, 89, 05][, 8D, 05][, D1 E1, 05] +1F8C; [5D 20, 05, 8F][, 89, 05][, 8D, 05][, D1 E1, 05] +1F02; [5D 20, 05, 05][, 89, 05][, 8F, 05] +1F0A; [5D 20, 05, 8F][, 89, 05][, 8F, 05] +1F82; [5D 20, 05, 05][, 89, 05][, 8F, 05][, D1 E1, 05] +1F8A; [5D 20, 05, 8F][, 89, 05][, 8F, 05][, D1 E1, 05] +1F06; [5D 20, 05, 05][, 89, 05][, 9B, 05] +1F0E; [5D 20, 05, 8F][, 89, 05][, 9B, 05] +1F86; [5D 20, 05, 05][, 89, 05][, 9B, 05][, D1 E1, 05] +1F8E; [5D 20, 05, 8F][, 89, 05][, 9B, 05][, D1 E1, 05] +1F80; [5D 20, 05, 05][, 89, 05][, D1 E1, 05] +1F88; [5D 20, 05, 8F][, 89, 05][, D1 E1, 05] +1F01; [5D 20, 05, 05][, 8B, 05] +1F09; [5D 20, 05, 8F][, 8B, 05] +1F05; [5D 20, 05, 05][, 8B, 05][, 8D, 05] +1F0D; [5D 20, 05, 8F][, 8B, 05][, 8D, 05] +1F85; [5D 20, 05, 05][, 8B, 05][, 8D, 05][, D1 E1, 05] +1F8D; [5D 20, 05, 8F][, 8B, 05][, 8D, 05][, D1 E1, 05] +1F03; [5D 20, 05, 05][, 8B, 05][, 8F, 05] +1F0B; [5D 20, 05, 8F][, 8B, 05][, 8F, 05] +1F83; [5D 20, 05, 05][, 8B, 05][, 8F, 05][, D1 E1, 05] +1F8B; [5D 20, 05, 8F][, 8B, 05][, 8F, 05][, D1 E1, 05] +1F07; [5D 20, 05, 05][, 8B, 05][, 9B, 05] +1F0F; [5D 20, 05, 8F][, 8B, 05][, 9B, 05] +1F87; [5D 20, 05, 05][, 8B, 05][, 9B, 05][, D1 E1, 05] +1F8F; [5D 20, 05, 8F][, 8B, 05][, 9B, 05][, D1 E1, 05] +1F81; [5D 20, 05, 05][, 8B, 05][, D1 E1, 05] +1F89; [5D 20, 05, 8F][, 8B, 05][, D1 E1, 05] +03AC; [5D 20, 05, 05][, 8D, 05] +1F71; [5D 20, 05, 05][, 8D, 05] +0386; [5D 20, 05, 8F][, 8D, 05] +1FBB; [5D 20, 05, 8F][, 8D, 05] +1FB4; [5D 20, 05, 05][, 8D, 05][, D1 E1, 05] +1F70; [5D 20, 05, 05][, 8F, 05] +1FBA; [5D 20, 05, 8F][, 8F, 05] +1FB2; [5D 20, 05, 05][, 8F, 05][, D1 E1, 05] +1FB0; [5D 20, 05, 05][, 91, 05] +1FB8; [5D 20, 05, 8F][, 91, 05] +1FB6; [5D 20, 05, 05][, 9B, 05] +1FB7; [5D 20, 05, 05][, 9B, 05][, D1 E1, 05] +1FB1; [5D 20, 05, 05][, AB, 05] +1FB9; [5D 20, 05, 8F][, AB, 05] +1FB3; [5D 20, 05, 05][, D1 E1, 05] +1FBC; [5D 20, 05, 8F][, D1 E1, 05] + +03B2; [5D 22, 05, 05] +03D0; [5D 22, 05, 09] +D835 DEC3; [5D 22, 05, 0B] +D835 DEFD; [5D 22, 05, 0B] +D835 DF37; [5D 22, 05, 0B] +D835 DF71; [5D 22, 05, 0B] +D835 DFAB; [5D 22, 05, 0B] +0392; [5D 22, 05, 8F] +D835 DEA9; [5D 22, 05, 95] +D835 DEE3; [5D 22, 05, 95] +D835 DF1D; [5D 22, 05, 95] +D835 DF57; [5D 22, 05, 95] +D835 DF91; [5D 22, 05, 95] +1D5D; [5D 22, 05, 27] +1D66; [5D 22, 05, 29] + +03B3; [5D 24, 05, 05] +213D; [5D 24, 05, 0B] +D835 DEC4; [5D 24, 05, 0B] +D835 DEFE; [5D 24, 05, 0B] +D835 DF38; [5D 24, 05, 0B] +D835 DF72; [5D 24, 05, 0B] +D835 DFAC; [5D 24, 05, 0B] +0393; [5D 24, 05, 8F] +213E; [5D 24, 05, 95] +D835 DEAA; [5D 24, 05, 95] +D835 DEE4; [5D 24, 05, 95] +D835 DF1E; [5D 24, 05, 95] +D835 DF58; [5D 24, 05, 95] +D835 DF92; [5D 24, 05, 95] +1D5E; [5D 24, 05, 27] +1D67; [5D 24, 05, 29] + +1D26; [5D 26, 05, 05] + +03B4; [5D 28, 05, 05] +D835 DEC5; [5D 28, 05, 0B] +D835 DEFF; [5D 28, 05, 0B] +D835 DF39; [5D 28, 05, 0B] +D835 DF73; [5D 28, 05, 0B] +D835 DFAD; [5D 28, 05, 0B] +0394; [5D 28, 05, 8F] +D835 DEAB; [5D 28, 05, 95] +D835 DEE5; [5D 28, 05, 95] +D835 DF1F; [5D 28, 05, 95] +D835 DF59; [5D 28, 05, 95] +D835 DF93; [5D 28, 05, 95] +1D5F; [5D 28, 05, 27] + +03B5; [5D 2A, 05, 05] +03F5; [5D 2A, 05, 09] +D835 DEC6; [5D 2A, 05, 0B] +D835 DEDC; [5D 2A, 05, 0B] +D835 DF00; [5D 2A, 05, 0B] +D835 DF16; [5D 2A, 05, 0B] +D835 DF3A; [5D 2A, 05, 0B] +D835 DF50; [5D 2A, 05, 0B] +D835 DF74; [5D 2A, 05, 0B] +D835 DF8A; [5D 2A, 05, 0B] +D835 DFAE; [5D 2A, 05, 0B] +D835 DFC4; [5D 2A, 05, 0B] +0395; [5D 2A, 05, 8F] +D835 DEAC; [5D 2A, 05, 95] +D835 DEE6; [5D 2A, 05, 95] +D835 DF20; [5D 2A, 05, 95] +D835 DF5A; [5D 2A, 05, 95] +D835 DF94; [5D 2A, 05, 95] +1F10; [5D 2A, 05, 05][, 89, 05] +1F18; [5D 2A, 05, 8F][, 89, 05] +1F14; [5D 2A, 05, 05][, 89, 05][, 8D, 05] +1F1C; [5D 2A, 05, 8F][, 89, 05][, 8D, 05] +1F12; [5D 2A, 05, 05][, 89, 05][, 8F, 05] +1F1A; [5D 2A, 05, 8F][, 89, 05][, 8F, 05] +1F11; [5D 2A, 05, 05][, 8B, 05] +1F19; [5D 2A, 05, 8F][, 8B, 05] +1F15; [5D 2A, 05, 05][, 8B, 05][, 8D, 05] +1F1D; [5D 2A, 05, 8F][, 8B, 05][, 8D, 05] +1F13; [5D 2A, 05, 05][, 8B, 05][, 8F, 05] +1F1B; [5D 2A, 05, 8F][, 8B, 05][, 8F, 05] +03AD; [5D 2A, 05, 05][, 8D, 05] +1F73; [5D 2A, 05, 05][, 8D, 05] +0388; [5D 2A, 05, 8F][, 8D, 05] +1FC9; [5D 2A, 05, 8F][, 8D, 05] +1F72; [5D 2A, 05, 05][, 8F, 05] +1FC8; [5D 2A, 05, 8F][, 8F, 05] + +03DD; [5D 2C, 05, 05] +D835 DFCB; [5D 2C, 05, 0B] +03DC; [5D 2C, 05, 8F] +D835 DFCA; [5D 2C, 05, 95] + +03DB; [5D 2E, 05, 05] +03DA; [5D 2E, 05, 8F] + +03B6; [5D 30, 05, 05] +D835 DEC7; [5D 30, 05, 0B] +D835 DF01; [5D 30, 05, 0B] +D835 DF3B; [5D 30, 05, 0B] +D835 DF75; [5D 30, 05, 0B] +D835 DFAF; [5D 30, 05, 0B] +0396; [5D 30, 05, 8F] +D835 DEAD; [5D 30, 05, 95] +D835 DEE7; [5D 30, 05, 95] +D835 DF21; [5D 30, 05, 95] +D835 DF5B; [5D 30, 05, 95] +D835 DF95; [5D 30, 05, 95] + +03B7; [5D 32, 05, 05] +D835 DEC8; [5D 32, 05, 0B] +D835 DF02; [5D 32, 05, 0B] +D835 DF3C; [5D 32, 05, 0B] +D835 DF76; [5D 32, 05, 0B] +D835 DFB0; [5D 32, 05, 0B] +0397; [5D 32, 05, 8F] +D835 DEAE; [5D 32, 05, 95] +D835 DEE8; [5D 32, 05, 95] +D835 DF22; [5D 32, 05, 95] +D835 DF5C; [5D 32, 05, 95] +D835 DF96; [5D 32, 05, 95] +1F20; [5D 32, 05, 05][, 89, 05] +1F28; [5D 32, 05, 8F][, 89, 05] +1F24; [5D 32, 05, 05][, 89, 05][, 8D, 05] +1F2C; [5D 32, 05, 8F][, 89, 05][, 8D, 05] +1F94; [5D 32, 05, 05][, 89, 05][, 8D, 05][, D1 E1, 05] +1F9C; [5D 32, 05, 8F][, 89, 05][, 8D, 05][, D1 E1, 05] +1F22; [5D 32, 05, 05][, 89, 05][, 8F, 05] +1F2A; [5D 32, 05, 8F][, 89, 05][, 8F, 05] +1F92; [5D 32, 05, 05][, 89, 05][, 8F, 05][, D1 E1, 05] +1F9A; [5D 32, 05, 8F][, 89, 05][, 8F, 05][, D1 E1, 05] +1F26; [5D 32, 05, 05][, 89, 05][, 9B, 05] +1F2E; [5D 32, 05, 8F][, 89, 05][, 9B, 05] +1F96; [5D 32, 05, 05][, 89, 05][, 9B, 05][, D1 E1, 05] +1F9E; [5D 32, 05, 8F][, 89, 05][, 9B, 05][, D1 E1, 05] +1F90; [5D 32, 05, 05][, 89, 05][, D1 E1, 05] +1F98; [5D 32, 05, 8F][, 89, 05][, D1 E1, 05] +1F21; [5D 32, 05, 05][, 8B, 05] +1F29; [5D 32, 05, 8F][, 8B, 05] +1F25; [5D 32, 05, 05][, 8B, 05][, 8D, 05] +1F2D; [5D 32, 05, 8F][, 8B, 05][, 8D, 05] +1F95; [5D 32, 05, 05][, 8B, 05][, 8D, 05][, D1 E1, 05] +1F9D; [5D 32, 05, 8F][, 8B, 05][, 8D, 05][, D1 E1, 05] +1F23; [5D 32, 05, 05][, 8B, 05][, 8F, 05] +1F2B; [5D 32, 05, 8F][, 8B, 05][, 8F, 05] +1F93; [5D 32, 05, 05][, 8B, 05][, 8F, 05][, D1 E1, 05] +1F9B; [5D 32, 05, 8F][, 8B, 05][, 8F, 05][, D1 E1, 05] +1F27; [5D 32, 05, 05][, 8B, 05][, 9B, 05] +1F2F; [5D 32, 05, 8F][, 8B, 05][, 9B, 05] +1F97; [5D 32, 05, 05][, 8B, 05][, 9B, 05][, D1 E1, 05] +1F9F; [5D 32, 05, 8F][, 8B, 05][, 9B, 05][, D1 E1, 05] +1F91; [5D 32, 05, 05][, 8B, 05][, D1 E1, 05] +1F99; [5D 32, 05, 8F][, 8B, 05][, D1 E1, 05] +03AE; [5D 32, 05, 05][, 8D, 05] +1F75; [5D 32, 05, 05][, 8D, 05] +0389; [5D 32, 05, 8F][, 8D, 05] +1FCB; [5D 32, 05, 8F][, 8D, 05] +1FC4; [5D 32, 05, 05][, 8D, 05][, D1 E1, 05] +1F74; [5D 32, 05, 05][, 8F, 05] +1FCA; [5D 32, 05, 8F][, 8F, 05] +1FC2; [5D 32, 05, 05][, 8F, 05][, D1 E1, 05] +1FC6; [5D 32, 05, 05][, 9B, 05] +1FC7; [5D 32, 05, 05][, 9B, 05][, D1 E1, 05] +1FC3; [5D 32, 05, 05][, D1 E1, 05] +1FCC; [5D 32, 05, 8F][, D1 E1, 05] + +03B8; [5D 34, 05, 05] +03D1; [5D 34, 05, 09] +D835 DEC9; [5D 34, 05, 0B] +D835 DEDD; [5D 34, 05, 0B] +D835 DF03; [5D 34, 05, 0B] +D835 DF17; [5D 34, 05, 0B] +D835 DF3D; [5D 34, 05, 0B] +D835 DF51; [5D 34, 05, 0B] +D835 DF77; [5D 34, 05, 0B] +D835 DF8B; [5D 34, 05, 0B] +D835 DFB1; [5D 34, 05, 0B] +D835 DFC5; [5D 34, 05, 0B] +0398; [5D 34, 05, 8F] +03F4; [5D 34, 05, 93] +D835 DEAF; [5D 34, 05, 95] +D835 DEB9; [5D 34, 05, 95] +D835 DEE9; [5D 34, 05, 95] +D835 DEF3; [5D 34, 05, 95] +D835 DF23; [5D 34, 05, 95] +D835 DF2D; [5D 34, 05, 95] +D835 DF5D; [5D 34, 05, 95] +D835 DF67; [5D 34, 05, 95] +D835 DF97; [5D 34, 05, 95] +D835 DFA1; [5D 34, 05, 95] +1DBF; [5D 34, 05, 27] + +03B9; [5D 36, 05, 05] +1FBE; [5D 36, 05, 05] +037A; [5D 36, 05, 09] +D835 DECA; [5D 36, 05, 0B] +D835 DF04; [5D 36, 05, 0B] +D835 DF3E; [5D 36, 05, 0B] +D835 DF78; [5D 36, 05, 0B] +D835 DFB2; [5D 36, 05, 0B] +0399; [5D 36, 05, 8F] +D835 DEB0; [5D 36, 05, 95] +D835 DEEA; [5D 36, 05, 95] +D835 DF24; [5D 36, 05, 95] +D835 DF5E; [5D 36, 05, 95] +D835 DF98; [5D 36, 05, 95] +1F30; [5D 36, 05, 05][, 89, 05] +1F38; [5D 36, 05, 8F][, 89, 05] +1F34; [5D 36, 05, 05][, 89, 05][, 8D, 05] +1F3C; [5D 36, 05, 8F][, 89, 05][, 8D, 05] +1F32; [5D 36, 05, 05][, 89, 05][, 8F, 05] +1F3A; [5D 36, 05, 8F][, 89, 05][, 8F, 05] +1F36; [5D 36, 05, 05][, 89, 05][, 9B, 05] +1F3E; [5D 36, 05, 8F][, 89, 05][, 9B, 05] +1F31; [5D 36, 05, 05][, 8B, 05] +1F39; [5D 36, 05, 8F][, 8B, 05] +1F35; [5D 36, 05, 05][, 8B, 05][, 8D, 05] +1F3D; [5D 36, 05, 8F][, 8B, 05][, 8D, 05] +1F33; [5D 36, 05, 05][, 8B, 05][, 8F, 05] +1F3B; [5D 36, 05, 8F][, 8B, 05][, 8F, 05] +1F37; [5D 36, 05, 05][, 8B, 05][, 9B, 05] +1F3F; [5D 36, 05, 8F][, 8B, 05][, 9B, 05] +03AF; [5D 36, 05, 05][, 8D, 05] +1F77; [5D 36, 05, 05][, 8D, 05] +038A; [5D 36, 05, 8F][, 8D, 05] +1FDB; [5D 36, 05, 8F][, 8D, 05] +1F76; [5D 36, 05, 05][, 8F, 05] +1FDA; [5D 36, 05, 8F][, 8F, 05] +1FD0; [5D 36, 05, 05][, 91, 05] +1FD8; [5D 36, 05, 8F][, 91, 05] +1FD6; [5D 36, 05, 05][, 9B, 05] +03CA; [5D 36, 05, 05][, 9D, 05] +03AA; [5D 36, 05, 8F][, 9D, 05] +0390; [5D 36, 05, 05][, 9D, 05][, 8D, 05] +1FD3; [5D 36, 05, 05][, 9D, 05][, 8D, 05] +1FD2; [5D 36, 05, 05][, 9D, 05][, 8F, 05] +1FD7; [5D 36, 05, 05][, 9D, 05][, 9B, 05] +1FD1; [5D 36, 05, 05][, AB, 05] +1FD9; [5D 36, 05, 8F][, AB, 05] + +03F3; [5D 38, 05, 05] + +03BA; [5D 3A, 05, 05] +03F0; [5D 3A, 05, 09] +D835 DECB; [5D 3A, 05, 0B] +D835 DEDE; [5D 3A, 05, 0B] +D835 DF05; [5D 3A, 05, 0B] +D835 DF18; [5D 3A, 05, 0B] +D835 DF3F; [5D 3A, 05, 0B] +D835 DF52; [5D 3A, 05, 0B] +D835 DF79; [5D 3A, 05, 0B] +D835 DF8C; [5D 3A, 05, 0B] +D835 DFB3; [5D 3A, 05, 0B] +D835 DFC6; [5D 3A, 05, 0B] +039A; [5D 3A, 05, 8F] +D835 DEB1; [5D 3A, 05, 95] +D835 DEEB; [5D 3A, 05, 95] +D835 DF25; [5D 3A, 05, 95] +D835 DF5F; [5D 3A, 05, 95] +D835 DF99; [5D 3A, 05, 95] +03D7; [5D 3A, 05, 09][5D 20, 05, 09][5D 36, 05, 3D] + +03BB; [5D 3C, 05, 05] +D835 DECC; [5D 3C, 05, 0B] +D835 DF06; [5D 3C, 05, 0B] +D835 DF40; [5D 3C, 05, 0B] +D835 DF7A; [5D 3C, 05, 0B] +D835 DFB4; [5D 3C, 05, 0B] +039B; [5D 3C, 05, 8F] +D835 DEB2; [5D 3C, 05, 95] +D835 DEEC; [5D 3C, 05, 95] +D835 DF26; [5D 3C, 05, 95] +D835 DF60; [5D 3C, 05, 95] +D835 DF9A; [5D 3C, 05, 95] + +1D27; [5D 3E, 05, 05] + +03BC; [5D 40, 05, 05] +00B5; [5D 40, 05, 09] +D835 DECD; [5D 40, 05, 0B] +D835 DF07; [5D 40, 05, 0B] +D835 DF41; [5D 40, 05, 0B] +D835 DF7B; [5D 40, 05, 0B] +D835 DFB5; [5D 40, 05, 0B] +039C; [5D 40, 05, 8F] +D835 DEB3; [5D 40, 05, 95] +D835 DEED; [5D 40, 05, 95] +D835 DF27; [5D 40, 05, 95] +D835 DF61; [5D 40, 05, 95] +D835 DF9B; [5D 40, 05, 95] +3382; [5D 40, 05, 37][29, 05, B9] +338C; [5D 40, 05, 37][33, 05, B9] +338D; [5D 40, 05, 37][35, 05, 37] +3395; [5D 40, 05, 37][3F, 05, 37] +339B; [5D 40, 05, 37][41, 05, 37] +33B2; [5D 40, 05, 37][4D, 05, 37] +33B6; [5D 40, 05, 37][53, 05, B9] +33BC; [5D 40, 05, 37][55, 05, B9] + +03BD; [5D 42, 05, 05] +D835 DECE; [5D 42, 05, 0B] +D835 DF08; [5D 42, 05, 0B] +D835 DF42; [5D 42, 05, 0B] +D835 DF7C; [5D 42, 05, 0B] +D835 DFB6; [5D 42, 05, 0B] +039D; [5D 42, 05, 8F] +D835 DEB4; [5D 42, 05, 95] +D835 DEEE; [5D 42, 05, 95] +D835 DF28; [5D 42, 05, 95] +D835 DF62; [5D 42, 05, 95] +D835 DF9C; [5D 42, 05, 95] + +03BE; [5D 44, 05, 05] +D835 DECF; [5D 44, 05, 0B] +D835 DF09; [5D 44, 05, 0B] +D835 DF43; [5D 44, 05, 0B] +D835 DF7D; [5D 44, 05, 0B] +D835 DFB7; [5D 44, 05, 0B] +039E; [5D 44, 05, 8F] +D835 DEB5; [5D 44, 05, 95] +D835 DEEF; [5D 44, 05, 95] +D835 DF29; [5D 44, 05, 95] +D835 DF63; [5D 44, 05, 95] +D835 DF9D; [5D 44, 05, 95] + +03BF; [5D 46, 05, 05] +D835 DED0; [5D 46, 05, 0B] +D835 DF0A; [5D 46, 05, 0B] +D835 DF44; [5D 46, 05, 0B] +D835 DF7E; [5D 46, 05, 0B] +D835 DFB8; [5D 46, 05, 0B] +039F; [5D 46, 05, 8F] +D835 DEB6; [5D 46, 05, 95] +D835 DEF0; [5D 46, 05, 95] +D835 DF2A; [5D 46, 05, 95] +D835 DF64; [5D 46, 05, 95] +D835 DF9E; [5D 46, 05, 95] +1F40; [5D 46, 05, 05][, 89, 05] +1F48; [5D 46, 05, 8F][, 89, 05] +1F44; [5D 46, 05, 05][, 89, 05][, 8D, 05] +1F4C; [5D 46, 05, 8F][, 89, 05][, 8D, 05] +1F42; [5D 46, 05, 05][, 89, 05][, 8F, 05] +1F4A; [5D 46, 05, 8F][, 89, 05][, 8F, 05] +1F41; [5D 46, 05, 05][, 8B, 05] +1F49; [5D 46, 05, 8F][, 8B, 05] +1F45; [5D 46, 05, 05][, 8B, 05][, 8D, 05] +1F4D; [5D 46, 05, 8F][, 8B, 05][, 8D, 05] +1F43; [5D 46, 05, 05][, 8B, 05][, 8F, 05] +1F4B; [5D 46, 05, 8F][, 8B, 05][, 8F, 05] +03CC; [5D 46, 05, 05][, 8D, 05] +1F79; [5D 46, 05, 05][, 8D, 05] +038C; [5D 46, 05, 8F][, 8D, 05] +1FF9; [5D 46, 05, 8F][, 8D, 05] +1F78; [5D 46, 05, 05][, 8F, 05] +1FF8; [5D 46, 05, 8F][, 8F, 05] + +03C0; [5D 48, 05, 05] +03D6; [5D 48, 05, 09] +213C; [5D 48, 05, 0B] +D835 DED1; [5D 48, 05, 0B] +D835 DEE1; [5D 48, 05, 0B] +D835 DF0B; [5D 48, 05, 0B] +D835 DF1B; [5D 48, 05, 0B] +D835 DF45; [5D 48, 05, 0B] +D835 DF55; [5D 48, 05, 0B] +D835 DF7F; [5D 48, 05, 0B] +D835 DF8F; [5D 48, 05, 0B] +D835 DFB9; [5D 48, 05, 0B] +D835 DFC9; [5D 48, 05, 0B] +03A0; [5D 48, 05, 8F] +213F; [5D 48, 05, 95] +D835 DEB7; [5D 48, 05, 95] +D835 DEF1; [5D 48, 05, 95] +D835 DF2B; [5D 48, 05, 95] +D835 DF65; [5D 48, 05, 95] +D835 DF9F; [5D 48, 05, 95] + +1D28; [5D 4A, 05, 05] + +03FB; [5D 4C, 05, 05] +03FA; [5D 4C, 05, 8F] + +03DF; [5D 4E, 05, 05] +03DE; [5D 4E, 05, 8F] + +03D9; [5D 50, 05, 05] +03D8; [5D 50, 05, 8F] + +03C1; [5D 52, 05, 05] +03F1; [5D 52, 05, 09] +D835 DED2; [5D 52, 05, 0B] +D835 DEE0; [5D 52, 05, 0B] +D835 DF0C; [5D 52, 05, 0B] +D835 DF1A; [5D 52, 05, 0B] +D835 DF46; [5D 52, 05, 0B] +D835 DF54; [5D 52, 05, 0B] +D835 DF80; [5D 52, 05, 0B] +D835 DF8E; [5D 52, 05, 0B] +D835 DFBA; [5D 52, 05, 0B] +D835 DFC8; [5D 52, 05, 0B] +03A1; [5D 52, 05, 8F] +D835 DEB8; [5D 52, 05, 95] +D835 DEF2; [5D 52, 05, 95] +D835 DF2C; [5D 52, 05, 95] +D835 DF66; [5D 52, 05, 95] +D835 DFA0; [5D 52, 05, 95] +1D68; [5D 52, 05, 29] +1FE4; [5D 52, 05, 05][, 89, 05] +1FE5; [5D 52, 05, 05][, 8B, 05] +1FEC; [5D 52, 05, 8F][, 8B, 05] + +1D29; [5D 54, 05, 05] + +03FC; [5D 56, 05, 05] + +03C3; [5D 58, 05, 05] +03F2; [5D 58, 05, 09] +D835 DED3; [5D 58, 05, 0B] +D835 DED4; [5D 58, 05, 0B] +D835 DF0D; [5D 58, 05, 0B] +D835 DF0E; [5D 58, 05, 0B] +D835 DF47; [5D 58, 05, 0B] +D835 DF48; [5D 58, 05, 0B] +D835 DF81; [5D 58, 05, 0B] +D835 DF82; [5D 58, 05, 0B] +D835 DFBB; [5D 58, 05, 0B] +D835 DFBC; [5D 58, 05, 0B] +03A3; [5D 58, 05, 8F] +03F9; [5D 58, 05, 93] +D835 DEBA; [5D 58, 05, 95] +D835 DEF4; [5D 58, 05, 95] +D835 DF2E; [5D 58, 05, 95] +D835 DF68; [5D 58, 05, 95] +D835 DFA2; [5D 58, 05, 95] +03C2; [5D 58, 05, 31] + +037C; [5D 5A, 05, 05] +03FE; [5D 5A, 05, 8F] + +037B; [5D 5C, 05, 05] +03FD; [5D 5C, 05, 8F] + +037D; [5D 5E, 05, 05] +03FF; [5D 5E, 05, 8F] + +03C4; [5D 60, 05, 05] +D835 DED5; [5D 60, 05, 0B] +D835 DF0F; [5D 60, 05, 0B] +D835 DF49; [5D 60, 05, 0B] +D835 DF83; [5D 60, 05, 0B] +D835 DFBD; [5D 60, 05, 0B] +03A4; [5D 60, 05, 8F] +D835 DEBB; [5D 60, 05, 95] +D835 DEF5; [5D 60, 05, 95] +D835 DF2F; [5D 60, 05, 95] +D835 DF69; [5D 60, 05, 95] +D835 DFA3; [5D 60, 05, 95] + +03C5; [5D 62, 05, 05] +D835 DED6; [5D 62, 05, 0B] +D835 DF10; [5D 62, 05, 0B] +D835 DF4A; [5D 62, 05, 0B] +D835 DF84; [5D 62, 05, 0B] +D835 DFBE; [5D 62, 05, 0B] +03A5; [5D 62, 05, 8F] +03D2; [5D 62, 05, 93] +D835 DEBC; [5D 62, 05, 95] +D835 DEF6; [5D 62, 05, 95] +D835 DF30; [5D 62, 05, 95] +D835 DF6A; [5D 62, 05, 95] +D835 DFA4; [5D 62, 05, 95] +1F50; [5D 62, 05, 05][, 89, 05] +1F54; [5D 62, 05, 05][, 89, 05][, 8D, 05] +1F52; [5D 62, 05, 05][, 89, 05][, 8F, 05] +1F56; [5D 62, 05, 05][, 89, 05][, 9B, 05] +1F51; [5D 62, 05, 05][, 8B, 05] +1F59; [5D 62, 05, 8F][, 8B, 05] +1F55; [5D 62, 05, 05][, 8B, 05][, 8D, 05] +1F5D; [5D 62, 05, 8F][, 8B, 05][, 8D, 05] +1F53; [5D 62, 05, 05][, 8B, 05][, 8F, 05] +1F5B; [5D 62, 05, 8F][, 8B, 05][, 8F, 05] +1F57; [5D 62, 05, 05][, 8B, 05][, 9B, 05] +1F5F; [5D 62, 05, 8F][, 8B, 05][, 9B, 05] +03CD; [5D 62, 05, 05][, 8D, 05] +1F7B; [5D 62, 05, 05][, 8D, 05] +038E; [5D 62, 05, 8F][, 8D, 05] +1FEB; [5D 62, 05, 8F][, 8D, 05] +03D3; [5D 62, 05, 93][, 8D, 05] +1F7A; [5D 62, 05, 05][, 8F, 05] +1FEA; [5D 62, 05, 8F][, 8F, 05] +1FE0; [5D 62, 05, 05][, 91, 05] +1FE8; [5D 62, 05, 8F][, 91, 05] +1FE6; [5D 62, 05, 05][, 9B, 05] +03CB; [5D 62, 05, 05][, 9D, 05] +03AB; [5D 62, 05, 8F][, 9D, 05] +03D4; [5D 62, 05, 93][, 9D, 05] +03B0; [5D 62, 05, 05][, 9D, 05][, 8D, 05] +1FE3; [5D 62, 05, 05][, 9D, 05][, 8D, 05] +1FE2; [5D 62, 05, 05][, 9D, 05][, 8F, 05] +1FE7; [5D 62, 05, 05][, 9D, 05][, 9B, 05] +1FE1; [5D 62, 05, 05][, AB, 05] +1FE9; [5D 62, 05, 8F][, AB, 05] + +03C6; [5D 64, 05, 05] +03D5; [5D 64, 05, 09] +D835 DED7; [5D 64, 05, 0B] +D835 DEDF; [5D 64, 05, 0B] +D835 DF11; [5D 64, 05, 0B] +D835 DF19; [5D 64, 05, 0B] +D835 DF4B; [5D 64, 05, 0B] +D835 DF53; [5D 64, 05, 0B] +D835 DF85; [5D 64, 05, 0B] +D835 DF8D; [5D 64, 05, 0B] +D835 DFBF; [5D 64, 05, 0B] +D835 DFC7; [5D 64, 05, 0B] +03A6; [5D 64, 05, 8F] +D835 DEBD; [5D 64, 05, 95] +D835 DEF7; [5D 64, 05, 95] +D835 DF31; [5D 64, 05, 95] +D835 DF6B; [5D 64, 05, 95] +D835 DFA5; [5D 64, 05, 95] +1D60; [5D 64, 05, 27] +1D69; [5D 64, 05, 29] + +03C7; [5D 66, 05, 05] +D835 DED8; [5D 66, 05, 0B] +D835 DF12; [5D 66, 05, 0B] +D835 DF4C; [5D 66, 05, 0B] +D835 DF86; [5D 66, 05, 0B] +D835 DFC0; [5D 66, 05, 0B] +03A7; [5D 66, 05, 8F] +D835 DEBE; [5D 66, 05, 95] +D835 DEF8; [5D 66, 05, 95] +D835 DF32; [5D 66, 05, 95] +D835 DF6C; [5D 66, 05, 95] +D835 DFA6; [5D 66, 05, 95] +1D61; [5D 66, 05, 27] +1D6A; [5D 66, 05, 29] + +03C8; [5D 68, 05, 05] +D835 DED9; [5D 68, 05, 0B] +D835 DF13; [5D 68, 05, 0B] +D835 DF4D; [5D 68, 05, 0B] +D835 DF87; [5D 68, 05, 0B] +D835 DFC1; [5D 68, 05, 0B] +03A8; [5D 68, 05, 8F] +D835 DEBF; [5D 68, 05, 95] +D835 DEF9; [5D 68, 05, 95] +D835 DF33; [5D 68, 05, 95] +D835 DF6D; [5D 68, 05, 95] +D835 DFA7; [5D 68, 05, 95] + +1D2A; [5D 6A, 05, 05] + +03C9; [5D 6C, 05, 05] +D835 DEDA; [5D 6C, 05, 0B] +D835 DF14; [5D 6C, 05, 0B] +D835 DF4E; [5D 6C, 05, 0B] +D835 DF88; [5D 6C, 05, 0B] +D835 DFC2; [5D 6C, 05, 0B] +03A9; [5D 6C, 05, 8F] +2126; [5D 6C, 05, 8F] +D835 DEC0; [5D 6C, 05, 95] +D835 DEFA; [5D 6C, 05, 95] +D835 DF34; [5D 6C, 05, 95] +D835 DF6E; [5D 6C, 05, 95] +D835 DFA8; [5D 6C, 05, 95] +1F60; [5D 6C, 05, 05][, 89, 05] +1F68; [5D 6C, 05, 8F][, 89, 05] +1F64; [5D 6C, 05, 05][, 89, 05][, 8D, 05] +1F6C; [5D 6C, 05, 8F][, 89, 05][, 8D, 05] +1FA4; [5D 6C, 05, 05][, 89, 05][, 8D, 05][, D1 E1, 05] +1FAC; [5D 6C, 05, 8F][, 89, 05][, 8D, 05][, D1 E1, 05] +1F62; [5D 6C, 05, 05][, 89, 05][, 8F, 05] +1F6A; [5D 6C, 05, 8F][, 89, 05][, 8F, 05] +1FA2; [5D 6C, 05, 05][, 89, 05][, 8F, 05][, D1 E1, 05] +1FAA; [5D 6C, 05, 8F][, 89, 05][, 8F, 05][, D1 E1, 05] +1F66; [5D 6C, 05, 05][, 89, 05][, 9B, 05] +1F6E; [5D 6C, 05, 8F][, 89, 05][, 9B, 05] +1FA6; [5D 6C, 05, 05][, 89, 05][, 9B, 05][, D1 E1, 05] +1FAE; [5D 6C, 05, 8F][, 89, 05][, 9B, 05][, D1 E1, 05] +1FA0; [5D 6C, 05, 05][, 89, 05][, D1 E1, 05] +1FA8; [5D 6C, 05, 8F][, 89, 05][, D1 E1, 05] +1F61; [5D 6C, 05, 05][, 8B, 05] +1F69; [5D 6C, 05, 8F][, 8B, 05] +1F65; [5D 6C, 05, 05][, 8B, 05][, 8D, 05] +1F6D; [5D 6C, 05, 8F][, 8B, 05][, 8D, 05] +1FA5; [5D 6C, 05, 05][, 8B, 05][, 8D, 05][, D1 E1, 05] +1FAD; [5D 6C, 05, 8F][, 8B, 05][, 8D, 05][, D1 E1, 05] +1F63; [5D 6C, 05, 05][, 8B, 05][, 8F, 05] +1F6B; [5D 6C, 05, 8F][, 8B, 05][, 8F, 05] +1FA3; [5D 6C, 05, 05][, 8B, 05][, 8F, 05][, D1 E1, 05] +1FAB; [5D 6C, 05, 8F][, 8B, 05][, 8F, 05][, D1 E1, 05] +1F67; [5D 6C, 05, 05][, 8B, 05][, 9B, 05] +1F6F; [5D 6C, 05, 8F][, 8B, 05][, 9B, 05] +1FA7; [5D 6C, 05, 05][, 8B, 05][, 9B, 05][, D1 E1, 05] +1FAF; [5D 6C, 05, 8F][, 8B, 05][, 9B, 05][, D1 E1, 05] +1FA1; [5D 6C, 05, 05][, 8B, 05][, D1 E1, 05] +1FA9; [5D 6C, 05, 8F][, 8B, 05][, D1 E1, 05] +03CE; [5D 6C, 05, 05][, 8D, 05] +1F7D; [5D 6C, 05, 05][, 8D, 05] +038F; [5D 6C, 05, 8F][, 8D, 05] +1FFB; [5D 6C, 05, 8F][, 8D, 05] +1FF4; [5D 6C, 05, 05][, 8D, 05][, D1 E1, 05] +1F7C; [5D 6C, 05, 05][, 8F, 05] +1FFA; [5D 6C, 05, 8F][, 8F, 05] +1FF2; [5D 6C, 05, 05][, 8F, 05][, D1 E1, 05] +1FF6; [5D 6C, 05, 05][, 9B, 05] +1FF7; [5D 6C, 05, 05][, 9B, 05][, D1 E1, 05] +1FF3; [5D 6C, 05, 05][, D1 E1, 05] +1FFC; [5D 6C, 05, 8F][, D1 E1, 05] + +03E1; [5D 6E, 05, 05] +03E0; [5D 6E, 05, 8F] + +03F8; [5D 70, 05, 05] +03F7; [5D 70, 05, 8F] + +2C81; [5E 20, 05, 05] +2C80; [5E 20, 05, 8F] + +2C83; [5E 22, 05, 05] +2C82; [5E 22, 05, 8F] + +2C85; [5E 24, 05, 05] +2C84; [5E 24, 05, 8F] + +2C87; [5E 26, 05, 05] +2C86; [5E 26, 05, 8F] + +2C89; [5E 28, 05, 05] +2C88; [5E 28, 05, 8F] + +2CB7; [5E 2A, 05, 05] +2CB6; [5E 2A, 05, 8F] + +2C8B; [5E 2C, 05, 05] +2C8A; [5E 2C, 05, 8F] + +2C8D; [5E 2E, 05, 05] +2C8C; [5E 2E, 05, 8F] + +2C8F; [5E 30, 05, 05] +2C8E; [5E 30, 05, 8F] + +2C91; [5E 32, 05, 05] +2C90; [5E 32, 05, 8F] + +2C93; [5E 34, 05, 05] +2C92; [5E 34, 05, 8F] + +2C95; [5E 36, 05, 05] +2C94; [5E 36, 05, 8F] +2CE4; [5E 36, 05, 09][5E 20, 05, 09][5E 34, 05, 3D] + +2CB9; [5E 38, 05, 05] +2CB8; [5E 38, 05, 8F] + +2C97; [5E 3A, 05, 05] +2C96; [5E 3A, 05, 8F] -129B; [65 41, 05, 05] +2C99; [5E 3C, 05, 05] +2C98; [5E 3C, 05, 8F] -129C; [65 43, 05, 05] +2C9B; [5E 3E, 05, 05] +2C9A; [5E 3E, 05, 8F] -129D; [65 45, 05, 05] +2CBB; [5E 40, 05, 05] +2CBA; [5E 40, 05, 8F] -129E; [65 47, 05, 05] +2CBD; [5E 42, 05, 05] +2CBC; [5E 42, 05, 8F] -129F; [65 49, 05, 05] +2C9D; [5E 44, 05, 05] +2C9C; [5E 44, 05, 8F] -12A0; [65 4B, 05, 05] +2C9F; [5E 46, 05, 05] +2C9E; [5E 46, 05, 8F] -12A1; [65 4D, 05, 05] +2CA1; [5E 48, 05, 05] +2CA0; [5E 48, 05, 8F] -12A2; [65 4F, 05, 05] +2CA3; [5E 4A, 05, 05] +2CA2; [5E 4A, 05, 8F] -12A3; [65 51, 05, 05] +2CA5; [5E 4C, 05, 05] +2CA4; [5E 4C, 05, 8F] -12A4; [65 53, 05, 05] +2CA7; [5E 4E, 05, 05] +2CA6; [5E 4E, 05, 8F] -12A5; [65 55, 05, 05] +2CA9; [5E 50, 05, 05] +2CA8; [5E 50, 05, 8F] -12A6; [65 57, 05, 05] +2CAB; [5E 52, 05, 05] +2CAA; [5E 52, 05, 8F] -12A7; [65 59, 05, 05] +2CAD; [5E 54, 05, 05] +2CAC; [5E 54, 05, 8F] -12A8; [65 5B, 05, 05] +2CAF; [5E 56, 05, 05] +2CAE; [5E 56, 05, 8F] -12A9; [65 5D, 05, 05] +2CB1; [5E 58, 05, 05] +2CB0; [5E 58, 05, 8F] -12AA; [65 5F, 05, 05] +2CBF; [5E 5A, 05, 05] +2CBE; [5E 5A, 05, 8F] -12AB; [65 61, 05, 05] +2CC1; [5E 5C, 05, 05] +2CC0; [5E 5C, 05, 8F] -12AC; [65 63, 05, 05] +03E3; [5E 5E, 05, 05] +03E2; [5E 5E, 05, 8F] -12AD; [65 65, 05, 05] +2CC3; [5E 60, 05, 05] +2CC2; [5E 60, 05, 8F] -12AE; [65 67, 05, 05] +2CC5; [5E 62, 05, 05] +2CC4; [5E 62, 05, 8F] -12B0; [65 69, 05, 05] +2CC7; [5E 64, 05, 05] +2CC6; [5E 64, 05, 8F] -12B2; [65 6B, 05, 05] +03E5; [5E 66, 05, 05] +03E4; [5E 66, 05, 8F] -12B3; [65 6D, 05, 05] +03E7; [5E 68, 05, 05] +03E6; [5E 68, 05, 8F] -12B4; [65 6F, 05, 05] +2CC9; [5E 6A, 05, 05] +2CC8; [5E 6A, 05, 8F] -12B5; [65 71, 05, 05] +03E9; [5E 6C, 05, 05] +03E8; [5E 6C, 05, 8F] -12B8; [65 73, 05, 05] +2CCB; [5E 6E, 05, 05] +2CCA; [5E 6E, 05, 8F] -12B9; [65 75, 05, 05] +2CCD; [5E 70, 05, 05] +2CCC; [5E 70, 05, 8F] -12BA; [65 77, 05, 05] +2CCF; [5E 72, 05, 05] +2CCE; [5E 72, 05, 8F] -12BB; [65 79, 05, 05] +2CD1; [5E 74, 05, 05] +2CD0; [5E 74, 05, 8F] -12BC; [65 7B, 05, 05] +2CD3; [5E 76, 05, 05] +2CD2; [5E 76, 05, 8F] -12BD; [65 7D, 05, 05] +2CD5; [5E 78, 05, 05] +2CD4; [5E 78, 05, 8F] -12BE; [65 7F, 05, 05] +03EB; [5E 7A, 05, 05] +03EA; [5E 7A, 05, 8F] -12C0; [65 81, 05, 05] +2CD7; [5E 7C, 05, 05] +2CD6; [5E 7C, 05, 8F] -12C2; [65 83, 05, 05] +03ED; [5E 7E, 05, 05] +03EC; [5E 7E, 05, 8F] -12C3; [65 85, 05, 05] +2CD9; [5E 80, 05, 05] +2CD8; [5E 80, 05, 8F] -12C4; [65 87, 05, 05] +2CDB; [5E 82, 05, 05] +2CDA; [5E 82, 05, 8F] -12C5; [65 89, 05, 05] +2CDD; [5E 84, 05, 05] +2CDC; [5E 84, 05, 8F] -12C8; [65 8B, 05, 05] +03EF; [5E 86, 05, 05] +03EE; [5E 86, 05, 8F] -12C9; [65 8D, 05, 05] +2CB3; [5E 88, 05, 05] +2CB2; [5E 88, 05, 8F] -12CA; [65 8F, 05, 05] +2CB5; [5E 8A, 05, 05] +2CB4; [5E 8A, 05, 8F] -12CB; [65 91, 05, 05] +2CDF; [5E 8C, 05, 05] +2CDE; [5E 8C, 05, 8F] -12CC; [65 93, 05, 05] +2CE1; [5E 8E, 05, 05] +2CE0; [5E 8E, 05, 8F] -12CD; [65 95, 05, 05] +2CE3; [5E 90, 05, 05] +2CE2; [5E 90, 05, 8F] -12CE; [65 97, 05, 05] +0430; [5F 20, 05, 05] +0410; [5F 20, 05, 8F] -12D0; [65 99, 05, 05] +0430 0306; [5F 22, 05, 05] +04D1; [5F 22, 05, 05] +0410 0306; [5F 22, 05, 8F] +04D0; [5F 22, 05, 8F] -12D1; [65 9B, 05, 05] +0430 0308; [5F 24, 05, 05] +04D3; [5F 24, 05, 05] +0410 0308; [5F 24, 05, 8F] +04D2; [5F 24, 05, 8F] -12D2; [65 9D, 05, 05] +04D9; [5F 26, 05, 05] +04D8; [5F 26, 05, 8F] -12D3; [65 9F, 05, 05] +04D9 0308; [5F 28, 05, 05] +04DB; [5F 28, 05, 05] +04D8 0308; [5F 28, 05, 8F] +04DA; [5F 28, 05, 8F] -12D4; [65 A1, 05, 05] +04D5; [5F 2A, 05, 05] +04D4; [5F 2A, 05, 8F] -12D5; [65 A3, 05, 05] +0431; [5F 2C, 05, 05] +0411; [5F 2C, 05, 8F] -12D6; [65 A5, 05, 05] +0432; [5F 2E, 05, 05] +0412; [5F 2E, 05, 8F] -12D8; [65 A7, 05, 05] +0433; [5F 30, 05, 05] +0413; [5F 30, 05, 8F] +0491; [5F 30, 05, 09][, E4 5D, 09] +0490; [5F 30, 05, 93][, E4 5D, 09] -12D9; [65 A9, 05, 05] +0493; [5F 32, 05, 05] +0492; [5F 32, 05, 8F] -12DA; [65 AB, 05, 05] +04FB; [5F 34, 05, 05] +04FA; [5F 34, 05, 8F] -12DB; [65 AD, 05, 05] +0495; [5F 36, 05, 05] +0494; [5F 36, 05, 8F] -12DC; [65 AF, 05, 05] +04F7; [5F 38, 05, 05] +04F6; [5F 38, 05, 8F] -12DD; [65 B1, 05, 05] +0434; [5F 3A, 05, 05] +0414; [5F 3A, 05, 8F] -12DE; [65 B3, 05, 05] +0501; [5F 3C, 05, 05] +0500; [5F 3C, 05, 8F] -12DF; [65 B5, 05, 05] +0452; [5F 3E, 05, 05] +0402; [5F 3E, 05, 8F] -12E0; [65 B7, 05, 05] +0503; [5F 40, 05, 05] +0502; [5F 40, 05, 8F] -12E1; [65 B9, 05, 05] +0433 0301; [5F 42, 05, 05] +0433 0341; [5F 42, 05, 05] +0453; [5F 42, 05, 05] +0403; [5F 42, 05, 8F] +0413 0301; [5F 42, 05, 8F] +0413 0341; [5F 42, 05, 8F] -12E2; [65 BB, 05, 05] +0499; [5F 44, 05, 05] +0498; [5F 44, 05, 8F] -12E3; [65 BD, 05, 05] +0435; [5F 46, 05, 05] +0415; [5F 46, 05, 8F] +0450; [5F 46, 05, 05][, 8F, 05] +0400; [5F 46, 05, 8F][, 8F, 05] +0451; [5F 46, 05, 05][, 9D, 05] +0401; [5F 46, 05, 8F][, 9D, 05] -12E4; [65 BF, 05, 05] +0435 0306; [5F 48, 05, 05] +04D7; [5F 48, 05, 05] +0415 0306; [5F 48, 05, 8F] +04D6; [5F 48, 05, 8F] -12E5; [65 C1, 05, 05] +0454; [5F 4A, 05, 05] +0404; [5F 4A, 05, 8F] -12E6; [65 C3, 05, 05] +0436; [5F 4C, 05, 05] +0416; [5F 4C, 05, 8F] +04C2; [5F 4C, 05, 05][, 91, 05] +04C1; [5F 4C, 05, 8F][, 91, 05] -12E7; [65 C5, 05, 05] +0436 0308; [5F 4E, 05, 05] +04DD; [5F 4E, 05, 05] +0416 0308; [5F 4E, 05, 8F] +04DC; [5F 4E, 05, 8F] -12E8; [65 C7, 05, 05] +0497; [5F 50, 05, 05] +0496; [5F 50, 05, 8F] -12E9; [65 C9, 05, 05] +0437; [5F 52, 05, 05] +0417; [5F 52, 05, 8F] -12EA; [65 CB, 05, 05] +0505; [5F 54, 05, 05] +0504; [5F 54, 05, 8F] -12EB; [65 CD, 05, 05] +0511; [5F 56, 05, 05] +0510; [5F 56, 05, 8F] -12EC; [65 CF, 05, 05] +0437 0308; [5F 58, 05, 05] +04DF; [5F 58, 05, 05] +0417 0308; [5F 58, 05, 8F] +04DE; [5F 58, 05, 8F] -12ED; [65 D1, 05, 05] +0455; [5F 5A, 05, 05] +0405; [5F 5A, 05, 8F] -12EE; [65 D3, 05, 05] +04E1; [5F 5C, 05, 05] +04E0; [5F 5C, 05, 8F] -12F0; [65 D5, 05, 05] +0507; [5F 5E, 05, 05] +0506; [5F 5E, 05, 8F] -12F1; [65 D7, 05, 05] +0438; [5F 60, 05, 05] +0418; [5F 60, 05, 8F] +045D; [5F 60, 05, 05][, 8F, 05] +040D; [5F 60, 05, 8F][, 8F, 05] +04E3; [5F 60, 05, 05][, AB, 05] +04E2; [5F 60, 05, 8F][, AB, 05] -12F2; [65 D9, 05, 05] +048B; [5F 62, 05, 05] +048A; [5F 62, 05, 8F] -12F3; [65 DB, 05, 05] +0438 0308; [5F 64, 05, 05] +04E5; [5F 64, 05, 05] +0418 0308; [5F 64, 05, 8F] +04E4; [5F 64, 05, 8F] -12F4; [65 DD, 05, 05] +0456; [5F 66, 05, 05] +0406; [5F 66, 05, 8F] -12F5; [65 DF, 05, 05] +0456 0308; [5F 68, 05, 05] +0457; [5F 68, 05, 05] +0406 0308; [5F 68, 05, 8F] +0407; [5F 68, 05, 8F] -12F6; [65 E1, 05, 05] +0438 0306; [5F 6A, 05, 05] +0439; [5F 6A, 05, 05] +0418 0306; [5F 6A, 05, 8F] +0419; [5F 6A, 05, 8F] -12F7; [65 E3, 05, 05] +0458; [5F 6C, 05, 05] +0408; [5F 6C, 05, 8F] -12F8; [65 E5, 05, 05] +043A; [5F 6E, 05, 05] +041A; [5F 6E, 05, 8F] -12F9; [65 E7, 05, 05] +049B; [5F 70, 05, 05] +049A; [5F 70, 05, 8F] -12FA; [65 E9, 05, 05] +04C4; [5F 72, 05, 05] +04C3; [5F 72, 05, 8F] -12FB; [65 EB, 05, 05] +04A1; [5F 74, 05, 05] +04A0; [5F 74, 05, 8F] -12FC; [65 ED, 05, 05] +049F; [5F 76, 05, 05] +049E; [5F 76, 05, 8F] -12FD; [65 EF, 05, 05] +049D; [5F 78, 05, 05] +049C; [5F 78, 05, 8F] -12FE; [65 F1, 05, 05] +043B; [5F 7A, 05, 05] +041B; [5F 7A, 05, 8F] -12FF; [65 F3, 05, 05] +1D2B; [5F 7C, 05, 05] -1300; [65 F5, 05, 05] +04C6; [5F 7E, 05, 05] +04C5; [5F 7E, 05, 8F] -1301; [65 F7, 05, 05] +0513; [5F 80, 05, 05] +0512; [5F 80, 05, 8F] -1302; [65 F9, 05, 05] +0459; [5F 82, 05, 05] +0409; [5F 82, 05, 8F] -1303; [65 FB, 05, 05] +0509; [5F 84, 05, 05] +0508; [5F 84, 05, 8F] -1304; [65 FD, 05, 05] +043C; [5F 86, 05, 05] +041C; [5F 86, 05, 8F] -1305; [66 05, 05, 05] +04CE; [5F 88, 05, 05] +04CD; [5F 88, 05, 8F] -1306; [66 07, 05, 05] +043D; [5F 8A, 05, 05] +041D; [5F 8A, 05, 8F] +1D78; [5F 8A, 05, 27] -1307; [66 09, 05, 05] +04CA; [5F 8C, 05, 05] +04C9; [5F 8C, 05, 8F] -1308; [66 0B, 05, 05] +04A3; [5F 8E, 05, 05] +04A2; [5F 8E, 05, 8F] -1309; [66 0D, 05, 05] +04C8; [5F 90, 05, 05] +04C7; [5F 90, 05, 8F] -130A; [66 0F, 05, 05] +04A5; [5F 92, 05, 05] +04A4; [5F 92, 05, 8F] -130B; [66 11, 05, 05] +045A; [5F 94, 05, 05] +040A; [5F 94, 05, 8F] -130C; [66 13, 05, 05] +050B; [5F 96, 05, 05] +050A; [5F 96, 05, 8F] -130D; [66 15, 05, 05] +043E; [5F 98, 05, 05] +041E; [5F 98, 05, 8F] -130E; [66 17, 05, 05] +043E 0308; [5F 9A, 05, 05] +04E7; [5F 9A, 05, 05] +041E 0308; [5F 9A, 05, 8F] +04E6; [5F 9A, 05, 8F] -1310; [66 19, 05, 05] +04E9; [5F 9C, 05, 05] +04E8; [5F 9C, 05, 8F] -1312; [66 1B, 05, 05] +04E9 0308; [5F 9E, 05, 05] +04EB; [5F 9E, 05, 05] +04E8 0308; [5F 9E, 05, 8F] +04EA; [5F 9E, 05, 8F] -1313; [66 1D, 05, 05] +043F; [5F A0, 05, 05] +041F; [5F A0, 05, 8F] -1314; [66 1F, 05, 05] +04A7; [5F A2, 05, 05] +04A6; [5F A2, 05, 8F] -1315; [66 21, 05, 05] +0481; [5F A4, 05, 05] +0480; [5F A4, 05, 8F] -1318; [66 23, 05, 05] +0440; [5F A6, 05, 05] +0420; [5F A6, 05, 8F] -1319; [66 25, 05, 05] +048F; [5F A8, 05, 05] +048E; [5F A8, 05, 8F] -131A; [66 27, 05, 05] +0441; [5F AA, 05, 05] +0421; [5F AA, 05, 8F] -131B; [66 29, 05, 05] +050D; [5F AC, 05, 05] +050C; [5F AC, 05, 8F] -131C; [66 2B, 05, 05] +04AB; [5F AE, 05, 05] +04AA; [5F AE, 05, 8F] -131D; [66 2D, 05, 05] +0442; [5F B0, 05, 05] +0422; [5F B0, 05, 8F] -131E; [66 2F, 05, 05] +050F; [5F B2, 05, 05] +050E; [5F B2, 05, 8F] -1320; [66 31, 05, 05] +04AD; [5F B4, 05, 05] +04AC; [5F B4, 05, 8F] -1321; [66 33, 05, 05] +045B; [5F B6, 05, 05] +040B; [5F B6, 05, 8F] -1322; [66 35, 05, 05] +043A 0301; [5F B8, 05, 05] +043A 0341; [5F B8, 05, 05] +045C; [5F B8, 05, 05] +040C; [5F B8, 05, 8F] +041A 0301; [5F B8, 05, 8F] +041A 0341; [5F B8, 05, 8F] -1323; [66 37, 05, 05] +0443; [5F BA, 05, 05] +0423; [5F BA, 05, 8F] +04EF; [5F BA, 05, 05][, AB, 05] +04EE; [5F BA, 05, 8F][, AB, 05] -1324; [66 39, 05, 05] +0443 0306; [5F BC, 05, 05] +045E; [5F BC, 05, 05] +040E; [5F BC, 05, 8F] +0423 0306; [5F BC, 05, 8F] -1325; [66 3B, 05, 05] +0443 0308; [5F BE, 05, 05] +04F1; [5F BE, 05, 05] +0423 0308; [5F BE, 05, 8F] +04F0; [5F BE, 05, 8F] -1326; [66 3D, 05, 05] +0443 030B; [5F C0, 05, 05] +04F3; [5F C0, 05, 05] +0423 030B; [5F C0, 05, 8F] +04F2; [5F C0, 05, 8F] -1327; [66 3F, 05, 05] +04AF; [5F C2, 05, 05] +04AE; [5F C2, 05, 8F] -1328; [66 41, 05, 05] +04B1; [5F C4, 05, 05] +04B0; [5F C4, 05, 8F] -1329; [66 43, 05, 05] +0479; [5F C6, 05, 05] +0478; [5F C6, 05, 8F] -132A; [66 45, 05, 05] +0444; [5F C8, 05, 05] +0424; [5F C8, 05, 8F] -132B; [66 47, 05, 05] +0445; [5F CA, 05, 05] +0425; [5F CA, 05, 8F] -132C; [66 49, 05, 05] +04FD; [5F CC, 05, 05] +04FC; [5F CC, 05, 8F] -132D; [66 4B, 05, 05] +04FF; [5F CE, 05, 05] +04FE; [5F CE, 05, 8F] -132E; [66 4D, 05, 05] +04B3; [5F D0, 05, 05] +04B2; [5F D0, 05, 8F] -132F; [66 4F, 05, 05] +04BB; [5F D2, 05, 05] +04BA; [5F D2, 05, 8F] -1330; [66 51, 05, 05] +0461; [5F D4, 05, 05] +0460; [5F D4, 05, 8F] -1331; [66 53, 05, 05] +047F; [5F D6, 05, 05] +047E; [5F D6, 05, 8F] -1332; [66 55, 05, 05] +047D; [5F D8, 05, 05] +047C; [5F D8, 05, 8F] -1333; [66 57, 05, 05] +047B; [5F DA, 05, 05] +047A; [5F DA, 05, 8F] -1334; [66 59, 05, 05] +0446; [5F DC, 05, 05] +0426; [5F DC, 05, 8F] -1335; [66 5B, 05, 05] +04B5; [5F DE, 05, 05] +04B4; [5F DE, 05, 8F] -1336; [66 5D, 05, 05] +0447; [5F E0, 05, 05] +0427; [5F E0, 05, 8F] -1337; [66 5F, 05, 05] +0447 0308; [5F E2, 05, 05] +04F5; [5F E2, 05, 05] +0427 0308; [5F E2, 05, 8F] +04F4; [5F E2, 05, 8F] -1338; [66 61, 05, 05] +04B7; [5F E4, 05, 05] +04B6; [5F E4, 05, 8F] -1339; [66 63, 05, 05] +04CC; [5F E6, 05, 05] +04CB; [5F E6, 05, 8F] -133A; [66 65, 05, 05] +04B9; [5F E8, 05, 05] +04B8; [5F E8, 05, 8F] -133B; [66 67, 05, 05] +04BD; [5F EA, 05, 05] +04BC; [5F EA, 05, 8F] -133C; [66 69, 05, 05] +04BF; [5F EC, 05, 05] +04BE; [5F EC, 05, 8F] -133D; [66 6B, 05, 05] +045F; [5F EE, 05, 05] +040F; [5F EE, 05, 8F] -133E; [66 6D, 05, 05] +0448; [5F F0, 05, 05] +0428; [5F F0, 05, 8F] -133F; [66 6F, 05, 05] +0449; [5F F2, 05, 05] +0429; [5F F2, 05, 8F] -1340; [66 71, 05, 05] +044A; [5F F4, 05, 05] +042A; [5F F4, 05, 8F] -1341; [66 73, 05, 05] +044B; [5F F6, 05, 05] +042B; [5F F6, 05, 8F] -1342; [66 75, 05, 05] +044B 0308; [5F F8, 05, 05] +04F9; [5F F8, 05, 05] +042B 0308; [5F F8, 05, 8F] +04F8; [5F F8, 05, 8F] -1343; [66 77, 05, 05] +044C; [5F FA, 05, 05] +042C; [5F FA, 05, 8F] -1344; [66 79, 05, 05] +048D; [5F FC, 05, 05] +048C; [5F FC, 05, 8F] -1345; [66 7B, 05, 05] +0463; [5F FE, 05, 05] +0462; [5F FE, 05, 8F] -1346; [66 7D, 05, 05] +044D; [60 05, 05, 05] +042D; [60 05, 05, 8F] -1348; [66 7F, 05, 05] +044D 0308; [60 07, 05, 05] +04ED; [60 07, 05, 05] +042D 0308; [60 07, 05, 8F] +04EC; [60 07, 05, 8F] -1349; [66 81, 05, 05] +044E; [60 09, 05, 05] +042E; [60 09, 05, 8F] -134A; [66 83, 05, 05] +044F; [60 0B, 05, 05] +042F; [60 0B, 05, 8F] -134B; [66 85, 05, 05] +0465; [60 0D, 05, 05] +0464; [60 0D, 05, 8F] -134C; [66 87, 05, 05] +0467; [60 0F, 05, 05] +0466; [60 0F, 05, 8F] -134D; [66 89, 05, 05] +046B; [60 11, 05, 05] +046A; [60 11, 05, 8F] -134E; [66 8B, 05, 05] +0469; [60 13, 05, 05] +0468; [60 13, 05, 8F] -134F; [66 8D, 05, 05] +046D; [60 15, 05, 05] +046C; [60 15, 05, 8F] -1350; [66 8F, 05, 05] +046F; [60 17, 05, 05] +046E; [60 17, 05, 8F] -1351; [66 91, 05, 05] +0471; [60 19, 05, 05] +0470; [60 19, 05, 8F] -1352; [66 93, 05, 05] +0473; [60 1B, 05, 05] +0472; [60 1B, 05, 8F] -1353; [66 95, 05, 05] +0475; [60 1D, 05, 05] +0474; [60 1D, 05, 8F] -1354; [66 97, 05, 05] +0475 030F; [60 1F, 05, 05] +0477; [60 1F, 05, 05] +0474 030F; [60 1F, 05, 8F] +0476; [60 1F, 05, 8F] -1355; [66 99, 05, 05] +04A9; [60 21, 05, 05] +04A8; [60 21, 05, 8F] -1356; [66 9B, 05, 05] +04CF; [60 23, 05, 05] +04C0; [60 23, 05, 8F] -1357; [66 9D, 05, 05] +2C30; [61 20, 05, 05] +2C00; [61 20, 05, 8F] -1358; [66 9F, 05, 05] +2C31; [61 22, 05, 05] +2C01; [61 22, 05, 8F] -1359; [66 A1, 05, 05] +2C32; [61 24, 05, 05] +2C02; [61 24, 05, 8F] -135A; [66 A3, 05, 05] +2C33; [61 26, 05, 05] +2C03; [61 26, 05, 8F] -0950; [67 20, 05, 05] +2C34; [61 28, 05, 05] +2C04; [61 28, 05, 8F] -0904; [67 22, 05, 05] +2C35; [61 2A, 05, 05] +2C05; [61 2A, 05, 8F] -0905; [67 24, 05, 05] +2C36; [61 2C, 05, 05] +2C06; [61 2C, 05, 8F] -0906; [67 26, 05, 05] +2C37; [61 2E, 05, 05] +2C07; [61 2E, 05, 8F] -0907; [67 28, 05, 05] +2C38; [61 30, 05, 05] +2C08; [61 30, 05, 8F] -0908; [67 2A, 05, 05] +2C39; [61 32, 05, 05] +2C09; [61 32, 05, 8F] -0909; [67 2C, 05, 05] +2C3A; [61 34, 05, 05] +2C0A; [61 34, 05, 8F] -090A; [67 2E, 05, 05] +2C3B; [61 36, 05, 05] +2C0B; [61 36, 05, 8F] -090B; [67 30, 05, 05] +2C3C; [61 38, 05, 05] +2C0C; [61 38, 05, 8F] -0960; [67 32, 05, 05] +2C3D; [61 3A, 05, 05] +2C0D; [61 3A, 05, 8F] -090C; [67 34, 05, 05] +2C3E; [61 3C, 05, 05] +2C0E; [61 3C, 05, 8F] -0961; [67 36, 05, 05] +2C3F; [61 3E, 05, 05] +2C0F; [61 3E, 05, 8F] -090D; [67 38, 05, 05] +2C40; [61 40, 05, 05] +2C10; [61 40, 05, 8F] -090E; [67 3A, 05, 05] +2C41; [61 42, 05, 05] +2C11; [61 42, 05, 8F] -090F; [67 3C, 05, 05] +2C42; [61 44, 05, 05] +2C12; [61 44, 05, 8F] -0910; [67 3E, 05, 05] +2C43; [61 46, 05, 05] +2C13; [61 46, 05, 8F] -0911; [67 40, 05, 05] +2C44; [61 48, 05, 05] +2C14; [61 48, 05, 8F] -0912; [67 42, 05, 05] +2C45; [61 4A, 05, 05] +2C15; [61 4A, 05, 8F] -0913; [67 44, 05, 05] +2C46; [61 4C, 05, 05] +2C16; [61 4C, 05, 8F] -0914; [67 46, 05, 05] +2C47; [61 4E, 05, 05] +2C17; [61 4E, 05, 8F] -0915; [67 48, 05, 05] -0958; [67 48, 05, 05][, D7 69, 05] +2C48; [61 50, 05, 05] +2C18; [61 50, 05, 8F] -0916; [67 4A, 05, 05] -0959; [67 4A, 05, 05][, D7 69, 05] +2C49; [61 52, 05, 05] +2C19; [61 52, 05, 8F] -0917; [67 4C, 05, 05] -095A; [67 4C, 05, 05][, D7 69, 05] +2C4A; [61 54, 05, 05] +2C1A; [61 54, 05, 8F] -0918; [67 4E, 05, 05] +2C4B; [61 56, 05, 05] +2C1B; [61 56, 05, 8F] -0919; [67 50, 05, 05] +2C4C; [61 58, 05, 05] +2C1C; [61 58, 05, 8F] -091A; [67 52, 05, 05] +2C4D; [61 5A, 05, 05] +2C1D; [61 5A, 05, 8F] -091B; [67 54, 05, 05] +2C4E; [61 5C, 05, 05] +2C1E; [61 5C, 05, 8F] -091C; [67 56, 05, 05] -095B; [67 56, 05, 05][, D7 69, 05] +2C4F; [61 5E, 05, 05] +2C1F; [61 5E, 05, 8F] -091D; [67 58, 05, 05] +2C50; [61 60, 05, 05] +2C20; [61 60, 05, 8F] -091E; [67 5A, 05, 05] +2C51; [61 62, 05, 05] +2C21; [61 62, 05, 8F] -091F; [67 5C, 05, 05] +2C52; [61 64, 05, 05] +2C22; [61 64, 05, 8F] -0920; [67 5E, 05, 05] +2C53; [61 66, 05, 05] +2C23; [61 66, 05, 8F] -0921; [67 60, 05, 05] -095C; [67 60, 05, 05][, D7 69, 05] +2C54; [61 68, 05, 05] +2C24; [61 68, 05, 8F] -0922; [67 62, 05, 05] -095D; [67 62, 05, 05][, D7 69, 05] +2C55; [61 6A, 05, 05] +2C25; [61 6A, 05, 8F] -0923; [67 64, 05, 05] +2C56; [61 6C, 05, 05] +2C26; [61 6C, 05, 8F] -0924; [67 66, 05, 05] +2C57; [61 6E, 05, 05] +2C27; [61 6E, 05, 8F] -0925; [67 68, 05, 05] +2C58; [61 70, 05, 05] +2C28; [61 70, 05, 8F] -0926; [67 6A, 05, 05] +2C59; [61 72, 05, 05] +2C29; [61 72, 05, 8F] -0927; [67 6C, 05, 05] +2C5A; [61 74, 05, 05] +2C2A; [61 74, 05, 8F] -0928; [67 6E, 05, 05] -0929; [67 6E, 05, 05][, D7 69, 05] +2C5B; [61 76, 05, 05] +2C2B; [61 76, 05, 8F] -092A; [67 70, 05, 05] +2C5C; [61 78, 05, 05] +2C2C; [61 78, 05, 8F] -092B; [67 72, 05, 05] -095E; [67 72, 05, 05][, D7 69, 05] +2C5D; [61 7A, 05, 05] +2C2D; [61 7A, 05, 8F] -092C; [67 74, 05, 05] +2C5E; [61 7C, 05, 05] +2C2E; [61 7C, 05, 8F] -092D; [67 76, 05, 05] +10D0; [62 20, 05, 05] -092E; [67 78, 05, 05] +2D00; [62 22, 05, 05] +10A0; [62 22, 05, 8F] -092F; [67 7A, 05, 05] -095F; [67 7A, 05, 05][, D7 69, 05] +10D1; [62 24, 05, 05] -0930; [67 7C, 05, 05] -0931; [67 7C, 05, 05][, D7 69, 05] +2D01; [62 26, 05, 05] +10A1; [62 26, 05, 8F] -0932; [67 7E, 05, 05] +10D2; [62 28, 05, 05] -0933; [67 80, 05, 05] -0934; [67 80, 05, 05][, D7 69, 05] +2D02; [62 2A, 05, 05] +10A2; [62 2A, 05, 8F] -0935; [67 82, 05, 05] +10D3; [62 2C, 05, 05] -0936; [67 84, 05, 05] +2D03; [62 2E, 05, 05] +10A3; [62 2E, 05, 8F] -0937; [67 86, 05, 05] +10D4; [62 30, 05, 05] -0938; [67 88, 05, 05] +2D04; [62 32, 05, 05] +10A4; [62 32, 05, 8F] -0939; [67 8A, 05, 05] +10D5; [62 34, 05, 05] -093D; [67 8C, 05, 05] +2D05; [62 36, 05, 05] +10A5; [62 36, 05, 8F] -093E; [67 8E, 05, 05] +10D6; [62 38, 05, 05] -093F; [67 90, 05, 05] +2D06; [62 3A, 05, 05] +10A6; [62 3A, 05, 8F] -0940; [67 92, 05, 05] +10F1; [62 3C, 05, 05] -0941; [67 94, 05, 05] +2D21; [62 3E, 05, 05] +10C1; [62 3E, 05, 8F] -0942; [67 96, 05, 05] +10D7; [62 40, 05, 05] -0943; [67 98, 05, 05] +2D07; [62 42, 05, 05] +10A7; [62 42, 05, 8F] -0944; [67 9A, 05, 05] +10D8; [62 44, 05, 05] -0962; [67 9C, 05, 05] +2D08; [62 46, 05, 05] +10A8; [62 46, 05, 8F] -0963; [67 9E, 05, 05] +10D9; [62 48, 05, 05] -0945; [67 A0, 05, 05] +2D09; [62 4A, 05, 05] +10A9; [62 4A, 05, 8F] -0946; [67 A2, 05, 05] +10DA; [62 4C, 05, 05] -0947; [67 A4, 05, 05] +2D0A; [62 4E, 05, 05] +10AA; [62 4E, 05, 8F] -0948; [67 A6, 05, 05] +10DB; [62 50, 05, 05] -0949; [67 A8, 05, 05] +2D0B; [62 52, 05, 05] +10AB; [62 52, 05, 8F] -094A; [67 AA, 05, 05] +10DC; [62 54, 05, 05] +10FC; [62 54, 05, 27] -094B; [67 AC, 05, 05] +2D0C; [62 56, 05, 05] +10AC; [62 56, 05, 8F] -094C; [67 AE, 05, 05] +10F2; [62 58, 05, 05] -094D; [67 B0, 05, 05] +2D22; [62 5A, 05, 05] +10C2; [62 5A, 05, 8F] -0985; [68 20, 05, 05] +10DD; [62 5C, 05, 05] -0986; [68 22, 05, 05] +2D0D; [62 5E, 05, 05] +10AD; [62 5E, 05, 8F] -0987; [68 24, 05, 05] +10DE; [62 60, 05, 05] -0988; [68 26, 05, 05] +2D0E; [62 62, 05, 05] +10AE; [62 62, 05, 8F] -0989; [68 28, 05, 05] +10DF; [62 64, 05, 05] -098A; [68 2A, 05, 05] +2D0F; [62 66, 05, 05] +10AF; [62 66, 05, 8F] -098B; [68 2C, 05, 05] +10E0; [62 68, 05, 05] -09E0; [68 2E, 05, 05] +2D10; [62 6A, 05, 05] +10B0; [62 6A, 05, 8F] -098C; [68 30, 05, 05] +10E1; [62 6C, 05, 05] -09E1; [68 32, 05, 05] +2D11; [62 6E, 05, 05] +10B1; [62 6E, 05, 8F] -098F; [68 34, 05, 05] +10E2; [62 70, 05, 05] -0990; [68 36, 05, 05] +2D12; [62 72, 05, 05] +10B2; [62 72, 05, 8F] -0993; [68 38, 05, 05] +10F3; [62 74, 05, 05] -0994; [68 3A, 05, 05] +2D23; [62 76, 05, 05] +10C3; [62 76, 05, 8F] -0995; [68 3C, 05, 05] +10E3; [62 78, 05, 05] -0996; [68 3E, 05, 05] +2D13; [62 7A, 05, 05] +10B3; [62 7A, 05, 8F] -0997; [68 40, 05, 05] +10E4; [62 7C, 05, 05] -0998; [68 42, 05, 05] +2D14; [62 7E, 05, 05] +10B4; [62 7E, 05, 8F] -0999; [68 44, 05, 05] +10E5; [62 80, 05, 05] -099A; [68 46, 05, 05] +2D15; [62 82, 05, 05] +10B5; [62 82, 05, 8F] -099B; [68 48, 05, 05] +10E6; [62 84, 05, 05] -099C; [68 4A, 05, 05] +2D16; [62 86, 05, 05] +10B6; [62 86, 05, 8F] -099D; [68 4C, 05, 05] +10E7; [62 88, 05, 05] -099E; [68 4E, 05, 05] +2D17; [62 8A, 05, 05] +10B7; [62 8A, 05, 8F] -099F; [68 50, 05, 05] +10E8; [62 8C, 05, 05] -09A0; [68 52, 05, 05] +2D18; [62 8E, 05, 05] +10B8; [62 8E, 05, 8F] -09A1; [68 54, 05, 05] -09DC; [68 54, 05, 05][, D7 E9, 05] +10E9; [62 90, 05, 05] -09A2; [68 56, 05, 05] -09DD; [68 56, 05, 05][, D7 E9, 05] +2D19; [62 92, 05, 05] +10B9; [62 92, 05, 8F] -09A3; [68 58, 05, 05] +10EA; [62 94, 05, 05] -09A4; [68 5A, 05, 05] +2D1A; [62 96, 05, 05] +10BA; [62 96, 05, 8F] -09A5; [68 5C, 05, 05] +10EB; [62 98, 05, 05] -09A6; [68 5E, 05, 05] +2D1B; [62 9A, 05, 05] +10BB; [62 9A, 05, 8F] -09A7; [68 60, 05, 05] +10EC; [62 9C, 05, 05] -09A8; [68 62, 05, 05] +2D1C; [62 9E, 05, 05] +10BC; [62 9E, 05, 8F] -09AA; [68 64, 05, 05] +10ED; [62 A0, 05, 05] -09AB; [68 66, 05, 05] +2D1D; [62 A2, 05, 05] +10BD; [62 A2, 05, 8F] -09AC; [68 68, 05, 05] +10EE; [62 A4, 05, 05] -09AD; [68 6A, 05, 05] +2D1E; [62 A6, 05, 05] +10BE; [62 A6, 05, 8F] -09AE; [68 6C, 05, 05] +10F4; [62 A8, 05, 05] -09AF; [68 6E, 05, 05] -09DF; [68 6E, 05, 05][, D7 E9, 05] +2D24; [62 AA, 05, 05] +10C4; [62 AA, 05, 8F] -09B0; [68 70, 05, 05] +10EF; [62 AC, 05, 05] -09F0; [68 72, 05, 05] +2D1F; [62 AE, 05, 05] +10BF; [62 AE, 05, 8F] -09B2; [68 74, 05, 05] +10F0; [62 B0, 05, 05] -09F1; [68 76, 05, 05] +2D20; [62 B2, 05, 05] +10C0; [62 B2, 05, 8F] -09B6; [68 78, 05, 05] +10F5; [62 B4, 05, 05] -09B7; [68 7A, 05, 05] +2D25; [62 B6, 05, 05] +10C5; [62 B6, 05, 8F] -09B8; [68 7C, 05, 05] +10F6; [62 B8, 05, 05] -09B9; [68 7E, 05, 05] +10F7; [62 BA, 05, 05] -09BD; [68 80, 05, 05] +10F8; [62 BC, 05, 05] -09BE; [68 82, 05, 05] +10F9; [62 BE, 05, 05] -09BF; [68 84, 05, 05] +10FA; [62 C0, 05, 05] -09C0; [68 86, 05, 05] +0561; [63 20, 05, 05] +0531; [63 20, 05, 8F] -09C1; [68 88, 05, 05] +0562; [63 22, 05, 05] +0532; [63 22, 05, 8F] -09C2; [68 8A, 05, 05] +0563; [63 24, 05, 05] +0533; [63 24, 05, 8F] -09C3; [68 8C, 05, 05] +0564; [63 26, 05, 05] +0534; [63 26, 05, 8F] -09C4; [68 8E, 05, 05] +0565; [63 28, 05, 05] +0535; [63 28, 05, 8F] +0587; [63 28, 05, 09][63 62, 05, 09] -09E2; [68 90, 05, 05] +0566; [63 2A, 05, 05] +0536; [63 2A, 05, 8F] -09E3; [68 92, 05, 05] +0567; [63 2C, 05, 05] +0537; [63 2C, 05, 8F] -09C7; [68 94, 05, 05] +0568; [63 2E, 05, 05] +0538; [63 2E, 05, 8F] -09C8; [68 96, 05, 05] +0569; [63 30, 05, 05] +0539; [63 30, 05, 8F] -09C7 09BE; [68 98, 05, 05] -09CB; [68 98, 05, 05] +056A; [63 32, 05, 05] +053A; [63 32, 05, 8F] -09C7 09D7; [68 9A, 05, 05] -09CC; [68 9A, 05, 05] +056B; [63 34, 05, 05] +053B; [63 34, 05, 8F] -09CD; [68 9C, 05, 05] +056C; [63 36, 05, 05] +053C; [63 36, 05, 8F] -09D7; [68 9E, 05, 05] +056D; [63 38, 05, 05] +053D; [63 38, 05, 8F] -0A74; [69 20, 05, 05] +056E; [63 3A, 05, 05] +053E; [63 3A, 05, 8F] -0A73; [69 22, 05, 05] +056F; [63 3C, 05, 05] +053F; [63 3C, 05, 8F] -0A09; [69 24, 05, 05] +0570; [63 3E, 05, 05] +0540; [63 3E, 05, 8F] -0A0A; [69 26, 05, 05] +0571; [63 40, 05, 05] +0541; [63 40, 05, 8F] -0A13; [69 28, 05, 05] +0572; [63 42, 05, 05] +0542; [63 42, 05, 8F] -0A05; [69 2A, 05, 05] +0573; [63 44, 05, 05] +0543; [63 44, 05, 8F] -0A06; [69 2C, 05, 05] +0574; [63 46, 05, 05] +0544; [63 46, 05, 8F] +FB14; [63 46, 05, 09][63 28, 05, 09] +FB15; [63 46, 05, 09][63 34, 05, 09] +FB17; [63 46, 05, 09][63 38, 05, 09] +FB13; [63 46, 05, 09][63 4A, 05, 09] -0A10; [69 2E, 05, 05] +0575; [63 48, 05, 05] +0545; [63 48, 05, 8F] -0A14; [69 30, 05, 05] +0576; [63 4A, 05, 05] +0546; [63 4A, 05, 8F] -0A72; [69 32, 05, 05] +0577; [63 4C, 05, 05] +0547; [63 4C, 05, 8F] -0A07; [69 34, 05, 05] +0578; [63 4E, 05, 05] +0548; [63 4E, 05, 8F] -0A08; [69 36, 05, 05] +0579; [63 50, 05, 05] +0549; [63 50, 05, 8F] -0A0F; [69 38, 05, 05] +057A; [63 52, 05, 05] +054A; [63 52, 05, 8F] -0A38; [69 3A, 05, 05] -0A36; [69 3A, 05, 05][, D8 2D, 05] +057B; [63 54, 05, 05] +054B; [63 54, 05, 8F] -0A39; [69 3C, 05, 05] +057C; [63 56, 05, 05] +054C; [63 56, 05, 8F] -0A15; [69 3E, 05, 05] +057D; [63 58, 05, 05] +054D; [63 58, 05, 8F] -0A16; [69 40, 05, 05] -0A59; [69 40, 05, 05][, D8 2D, 05] +057E; [63 5A, 05, 05] +054E; [63 5A, 05, 8F] +FB16; [63 5A, 05, 09][63 4A, 05, 09] -0A17; [69 42, 05, 05] -0A5A; [69 42, 05, 05][, D8 2D, 05] +057F; [63 5C, 05, 05] +054F; [63 5C, 05, 8F] -0A18; [69 44, 05, 05] +0580; [63 5E, 05, 05] +0550; [63 5E, 05, 8F] -0A19; [69 46, 05, 05] +0581; [63 60, 05, 05] +0551; [63 60, 05, 8F] -0A1A; [69 48, 05, 05] +0582; [63 62, 05, 05] +0552; [63 62, 05, 8F] -0A1B; [69 4A, 05, 05] +0583; [63 64, 05, 05] +0553; [63 64, 05, 8F] -0A1C; [69 4C, 05, 05] -0A5B; [69 4C, 05, 05][, D8 2D, 05] +0584; [63 66, 05, 05] +0554; [63 66, 05, 8F] -0A1D; [69 4E, 05, 05] +0585; [63 68, 05, 05] +0555; [63 68, 05, 8F] -0A1E; [69 50, 05, 05] +0586; [63 6A, 05, 05] +0556; [63 6A, 05, 8F] -0A1F; [69 52, 05, 05] +0559; [63 6C, 05, 05] -0A20; [69 54, 05, 05] +05D0; [64 20, 05, 05] +2135; [64 20, 05, 09] +FB21; [64 20, 05, 0B] +FB2E; [64 20, 05, 05][, D5 41, 05] +FB2F; [64 20, 05, 05][, D5 51, 05] +FB30; [64 20, 05, 05][, D5 C1, 05] +FB4F; [64 20, 05, 09][64 36, 05, 09] -0A21; [69 56, 05, 05] +05D1; [64 22, 05, 05] +2136; [64 22, 05, 09] +FB31; [64 22, 05, 05][, D5 C1, 05] +FB4C; [64 22, 05, 05][, D5 D1, 05] -0A22; [69 58, 05, 05] +05D2; [64 24, 05, 05] +2137; [64 24, 05, 09] +FB32; [64 24, 05, 05][, D5 C1, 05] -0A23; [69 5A, 05, 05] +05D3; [64 26, 05, 05] +2138; [64 26, 05, 09] +FB22; [64 26, 05, 0B] +FB33; [64 26, 05, 05][, D5 C1, 05] -0A24; [69 5C, 05, 05] +05D4; [64 28, 05, 05] +FB23; [64 28, 05, 0B] +FB34; [64 28, 05, 05][, D5 C1, 05] -0A25; [69 5E, 05, 05] +05D5; [64 2A, 05, 05] +FB4B; [64 2A, 05, 05][, D5 71, 05] +FB35; [64 2A, 05, 05][, D5 C1, 05] +05F0; [64 2A, 05, 09][64 2A, 05, 09] +05F1; [64 2A, 05, 09][64 32, 05, 09] -0A26; [69 60, 05, 05] +05D6; [64 2C, 05, 05] +FB36; [64 2C, 05, 05][, D5 C1, 05] -0A27; [69 62, 05, 05] +05D7; [64 2E, 05, 05] -0A28; [69 64, 05, 05] +05D8; [64 30, 05, 05] +FB38; [64 30, 05, 05][, D5 C1, 05] -0A2A; [69 66, 05, 05] +05D9; [64 32, 05, 05] +FB1D; [64 32, 05, 05][, D5 11, 05] +FB39; [64 32, 05, 05][, D5 C1, 05] +05F2; [64 32, 05, 09][64 32, 05, 09] +FB1F; [64 32, 05, 09][64 32, 05, 09][, D5 41, 05] -0A2B; [69 68, 05, 05] -0A5E; [69 68, 05, 05][, D8 2D, 05] +05DB; [64 34, 05, 05] +FB24; [64 34, 05, 0B] +05DA; [64 34, 05, 31] +FB3B; [64 34, 05, 05][, D5 C1, 05] +FB3A; [64 34, 05, 31][, D5 C1, 05] +FB4D; [64 34, 05, 05][, D5 D1, 05] -0A2C; [69 6A, 05, 05] +05DC; [64 36, 05, 05] +FB25; [64 36, 05, 0B] +FB3C; [64 36, 05, 05][, D5 C1, 05] -0A2D; [69 6C, 05, 05] +05DE; [64 38, 05, 05] +FB26; [64 38, 05, 0B] +05DD; [64 38, 05, 31] +FB3E; [64 38, 05, 05][, D5 C1, 05] -0A2E; [69 6E, 05, 05] +05E0; [64 3A, 05, 05] +05DF; [64 3A, 05, 31] +FB40; [64 3A, 05, 05][, D5 C1, 05] -0A2F; [69 70, 05, 05] +05E1; [64 3C, 05, 05] +FB41; [64 3C, 05, 05][, D5 C1, 05] -0A30; [69 72, 05, 05] +05E2; [64 3E, 05, 05] +FB20; [64 3E, 05, 0B] -0A32; [69 74, 05, 05] -0A33; [69 74, 05, 05][, D8 2D, 05] +05E4; [64 40, 05, 05] +05E3; [64 40, 05, 31] +FB44; [64 40, 05, 05][, D5 C1, 05] +FB43; [64 40, 05, 31][, D5 C1, 05] +FB4E; [64 40, 05, 05][, D5 D1, 05] -0A35; [69 76, 05, 05] +05E6; [64 42, 05, 05] +05E5; [64 42, 05, 31] +FB46; [64 42, 05, 05][, D5 C1, 05] -0A5C; [69 78, 05, 05] +05E7; [64 44, 05, 05] +FB47; [64 44, 05, 05][, D5 C1, 05] -0A3E; [69 7A, 05, 05] +05E8; [64 46, 05, 05] +FB27; [64 46, 05, 0B] +FB48; [64 46, 05, 05][, D5 C1, 05] -0A3F; [69 7C, 05, 05] +05E9; [64 48, 05, 05] +FB2B; [64 48, 05, 05][, D5 A1, 05] +FB2A; [64 48, 05, 05][, D5 B1, 05] +FB49; [64 48, 05, 05][, D5 C1, 05] +FB2D; [64 48, 05, 05][, D5 C1, 05][, D5 A1, 05] +FB2C; [64 48, 05, 05][, D5 C1, 05][, D5 B1, 05] -0A40; [69 7E, 05, 05] +05EA; [64 4A, 05, 05] +FB28; [64 4A, 05, 0B] +FB4A; [64 4A, 05, 05][, D5 C1, 05] -0A41; [69 80, 05, 05] +D802 DD00; [64 4C, 05, 05] -0A42; [69 82, 05, 05] +D802 DD01; [64 4E, 05, 05] -0A47; [69 84, 05, 05] +D802 DD02; [64 50, 05, 05] -0A48; [69 86, 05, 05] +D802 DD03; [64 52, 05, 05] -0A4B; [69 88, 05, 05] +D802 DD04; [64 54, 05, 05] -0A4C; [69 8A, 05, 05] +D802 DD05; [64 56, 05, 05] -0A4D; [69 8C, 05, 05] +D802 DD06; [64 58, 05, 05] -0AD0; [6A 20, 05, 05] +D802 DD07; [64 5A, 05, 05] -0A85; [6A 22, 05, 05] +D802 DD08; [64 5C, 05, 05] + +D802 DD09; [64 5E, 05, 05] -0A86; [6A 24, 05, 05] +D802 DD0A; [64 60, 05, 05] -0A87; [6A 26, 05, 05] +D802 DD0B; [64 62, 05, 05] + +D802 DD0C; [64 64, 05, 05] + +D802 DD0D; [64 66, 05, 05] + +D802 DD0E; [64 68, 05, 05] + +D802 DD0F; [64 6A, 05, 05] -0A88; [6A 28, 05, 05] +D802 DD10; [64 6C, 05, 05] + +D802 DD11; [64 6E, 05, 05] + +D802 DD12; [64 70, 05, 05] + +D802 DD13; [64 72, 05, 05] + +D802 DD14; [64 74, 05, 05] + +D802 DD15; [64 76, 05, 05] + +0621; [65 20, 05, 05] +0674; [65 20, 05, 09] +FE80; [65 20, 05, 33] +06FD; [65 20, 05, 09][, E4 5D, 09] + +0622; [65 22, 05, 05] +0627 0653; [65 22, 05, 05] +FE82; [65 22, 05, 31] +FE81; [65 22, 05, 33] + +0623; [65 24, 05, 05] +0627 0654; [65 24, 05, 05] +FE84; [65 24, 05, 31] +FE83; [65 24, 05, 33] + +0672; [65 26, 05, 05] + +0671; [65 28, 05, 05] +FB51; [65 28, 05, 31] +FB50; [65 28, 05, 33] + +0624; [65 2A, 05, 05] +0648 0654; [65 2A, 05, 05] +FE86; [65 2A, 05, 31] +FE85; [65 2A, 05, 33] + +0625; [65 2C, 05, 05] +0627 0655; [65 2C, 05, 05] +FE88; [65 2C, 05, 31] +FE87; [65 2C, 05, 33] + +0673; [65 2E, 05, 05] + +0626; [65 30, 05, 05] +064A 0654; [65 30, 05, 05] +FE8B; [65 30, 05, 2D] +FE8C; [65 30, 05, 2F] +FE8A; [65 30, 05, 31] +FE89; [65 30, 05, 33] +FBEB; [65 30, 05, 31][65 32, 05, 31] +FBEA; [65 30, 05, 33][65 32, 05, 33] +FC97; [65 30, 05, 2D][65 5C, 05, 2D] +FC00; [65 30, 05, 33][65 5C, 05, 33] +FC98; [65 30, 05, 2D][65 68, 05, 2D] +FC01; [65 30, 05, 33][65 68, 05, 33] +FC99; [65 30, 05, 2D][65 6A, 05, 2D] +FC64; [65 30, 05, 31][65 92, 05, 31] +FC65; [65 30, 05, 31][65 94, 05, 31] +FC9A; [65 30, 05, 2D][66 29, 05, 2D] +FCDF; [65 30, 05, 2F][66 29, 05, 2F] +FC66; [65 30, 05, 31][66 29, 05, 31] +FC02; [65 30, 05, 33][66 29, 05, 33] +FC67; [65 30, 05, 31][66 2F, 05, 31] +FC9B; [65 30, 05, 2D][66 41, 05, 2D] +FCE0; [65 30, 05, 2F][66 41, 05, 2F] +FBED; [65 30, 05, 31][66 4B, 05, 31] +FBEC; [65 30, 05, 33][66 4B, 05, 33] +FBEF; [65 30, 05, 31][66 4D, 05, 31] +FBEE; [65 30, 05, 33][66 4D, 05, 33] +FBF3; [65 30, 05, 31][66 53, 05, 31] +FBF2; [65 30, 05, 33][66 53, 05, 33] +FBF1; [65 30, 05, 31][66 55, 05, 31] +FBF0; [65 30, 05, 33][66 55, 05, 33] +FBF5; [65 30, 05, 31][66 57, 05, 31] +FBF4; [65 30, 05, 33][66 57, 05, 33] +FBFB; [65 30, 05, 2D][66 61, 05, 2D] +FBFA; [65 30, 05, 31][66 61, 05, 31] +FC68; [65 30, 05, 31][66 61, 05, 31] +FBF9; [65 30, 05, 33][66 61, 05, 33] +FC03; [65 30, 05, 33][66 61, 05, 33] +FC69; [65 30, 05, 31][66 63, 05, 31] +FC04; [65 30, 05, 33][66 63, 05, 33] +FBF8; [65 30, 05, 2D][66 6B, 05, 2D] +FBF7; [65 30, 05, 31][66 6B, 05, 31] +FBF6; [65 30, 05, 33][66 6B, 05, 33] + +0627; [65 32, 05, 05] +FE8E; [65 32, 05, 31] +FE8D; [65 32, 05, 33] +FD3C; [65 32, 05, 31][, D5 F1, 31] +FD3D; [65 32, 05, 33][, D5 F1, 33] +0675; [65 32, 05, 09][65 20, 05, 09] +FDF3; [65 32, 05, 33][65 F8, 05, 33][65 36, 05, 3D][65 92, 05, 3D] +FDF2; [65 32, 05, 33][66 1D, 05, 33][66 1D, 05, 3D][66 41, 05, 3D] + +066E; [65 34, 05, 05] + +0628; [65 36, 05, 05] +FE91; [65 36, 05, 2D] +FE92; [65 36, 05, 2F] +FE90; [65 36, 05, 31] +FE8F; [65 36, 05, 33] +FC9C; [65 36, 05, 2D][65 5C, 05, 2D] +FC05; [65 36, 05, 33][65 5C, 05, 33] +FC9D; [65 36, 05, 2D][65 68, 05, 2D] +FC06; [65 36, 05, 33][65 68, 05, 33] +FDC2; [65 36, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FC9E; [65 36, 05, 2D][65 6A, 05, 2D] +FC07; [65 36, 05, 33][65 6A, 05, 33] +FD9E; [65 36, 05, 31][65 6A, 05, 31][66 63, 05, 3D] +FC6A; [65 36, 05, 31][65 92, 05, 31] +FC6B; [65 36, 05, 31][65 94, 05, 31] +FC9F; [65 36, 05, 2D][66 29, 05, 2D] +FCE1; [65 36, 05, 2F][66 29, 05, 2F] +FC6C; [65 36, 05, 31][66 29, 05, 31] +FC08; [65 36, 05, 33][66 29, 05, 33] +FC6D; [65 36, 05, 31][66 2F, 05, 31] +FCA0; [65 36, 05, 2D][66 41, 05, 2D] +FCE2; [65 36, 05, 2F][66 41, 05, 2F] +FC6E; [65 36, 05, 31][66 61, 05, 31] +FC09; [65 36, 05, 33][66 61, 05, 33] +FC6F; [65 36, 05, 31][66 63, 05, 31] +FC0A; [65 36, 05, 33][66 63, 05, 33] + +067B; [65 38, 05, 05] +FB54; [65 38, 05, 2D] +FB55; [65 38, 05, 2F] +FB53; [65 38, 05, 31] +FB52; [65 38, 05, 33] + +067E; [65 3A, 05, 05] +FB58; [65 3A, 05, 2D] +FB59; [65 3A, 05, 2F] +FB57; [65 3A, 05, 31] +FB56; [65 3A, 05, 33] + +0680; [65 3C, 05, 05] +FB5C; [65 3C, 05, 2D] +FB5D; [65 3C, 05, 2F] +FB5B; [65 3C, 05, 31] +FB5A; [65 3C, 05, 33] + +0750; [65 3E, 05, 05] + +0751; [65 40, 05, 05] + +0752; [65 42, 05, 05] + +0753; [65 44, 05, 05] + +0754; [65 46, 05, 05] + +0755; [65 48, 05, 05] + +0756; [65 4A, 05, 05] + +0629; [65 4C, 05, 05] +FE94; [65 4C, 05, 31] +FE93; [65 4C, 05, 33] + +062A; [65 4E, 05, 05] +FE97; [65 4E, 05, 2D] +FE98; [65 4E, 05, 2F] +FE96; [65 4E, 05, 31] +FE95; [65 4E, 05, 33] +FCA1; [65 4E, 05, 2D][65 5C, 05, 2D] +FC0B; [65 4E, 05, 33][65 5C, 05, 33] +FD50; [65 4E, 05, 2D][65 5C, 05, 2D][66 29, 05, 3D] +FDA0; [65 4E, 05, 31][65 5C, 05, 31][66 61, 05, 3D] +FD9F; [65 4E, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FCA2; [65 4E, 05, 2D][65 68, 05, 2D] +FC0C; [65 4E, 05, 33][65 68, 05, 33] +FD52; [65 4E, 05, 2D][65 68, 05, 2D][65 5C, 05, 3D] +FD51; [65 4E, 05, 31][65 68, 05, 31][65 5C, 05, 3D] +FD53; [65 4E, 05, 2D][65 68, 05, 2D][66 29, 05, 3D] +FCA3; [65 4E, 05, 2D][65 6A, 05, 2D] +FC0D; [65 4E, 05, 33][65 6A, 05, 33] +FD54; [65 4E, 05, 2D][65 6A, 05, 2D][66 29, 05, 3D] +FDA2; [65 4E, 05, 31][65 6A, 05, 31][66 61, 05, 3D] +FDA1; [65 4E, 05, 31][65 6A, 05, 31][66 63, 05, 3D] +FC70; [65 4E, 05, 31][65 92, 05, 31] +FC71; [65 4E, 05, 31][65 94, 05, 31] +FCA4; [65 4E, 05, 2D][66 29, 05, 2D] +FCE3; [65 4E, 05, 2F][66 29, 05, 2F] +FC72; [65 4E, 05, 31][66 29, 05, 31] +FC0E; [65 4E, 05, 33][66 29, 05, 33] +FD55; [65 4E, 05, 2D][66 29, 05, 2D][65 5C, 05, 3D] +FD56; [65 4E, 05, 2D][66 29, 05, 2D][65 68, 05, 3D] +FD57; [65 4E, 05, 2D][66 29, 05, 2D][65 6A, 05, 3D] +FDA4; [65 4E, 05, 31][66 29, 05, 31][66 61, 05, 3D] +FDA3; [65 4E, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC73; [65 4E, 05, 31][66 2F, 05, 31] +FCA5; [65 4E, 05, 2D][66 41, 05, 2D] +FCE4; [65 4E, 05, 2F][66 41, 05, 2F] +FC74; [65 4E, 05, 31][66 61, 05, 31] +FC0F; [65 4E, 05, 33][66 61, 05, 33] +FC75; [65 4E, 05, 31][66 63, 05, 31] +FC10; [65 4E, 05, 33][66 63, 05, 33] + +062B; [65 50, 05, 05] +FE9B; [65 50, 05, 2D] +FE9C; [65 50, 05, 2F] +FE9A; [65 50, 05, 31] +FE99; [65 50, 05, 33] +FC11; [65 50, 05, 33][65 5C, 05, 33] +FC76; [65 50, 05, 31][65 92, 05, 31] +FC77; [65 50, 05, 31][65 94, 05, 31] +FCA6; [65 50, 05, 2D][66 29, 05, 2D] +FCE5; [65 50, 05, 2F][66 29, 05, 2F] +FC78; [65 50, 05, 31][66 29, 05, 31] +FC12; [65 50, 05, 33][66 29, 05, 33] +FC79; [65 50, 05, 31][66 2F, 05, 31] +FCE6; [65 50, 05, 2F][66 41, 05, 2F] +FC7A; [65 50, 05, 31][66 61, 05, 31] +FC13; [65 50, 05, 33][66 61, 05, 33] +FC7B; [65 50, 05, 31][66 63, 05, 31] +FC14; [65 50, 05, 33][66 63, 05, 33] + +0679; [65 52, 05, 05] +FB68; [65 52, 05, 2D] +FB69; [65 52, 05, 2F] +FB67; [65 52, 05, 31] +FB66; [65 52, 05, 33] + +067A; [65 54, 05, 05] +FB60; [65 54, 05, 2D] +FB61; [65 54, 05, 2F] +FB5F; [65 54, 05, 31] +FB5E; [65 54, 05, 33] + +067C; [65 56, 05, 05] + +067D; [65 58, 05, 05] + +067F; [65 5A, 05, 05] +FB64; [65 5A, 05, 2D] +FB65; [65 5A, 05, 2F] +FB63; [65 5A, 05, 31] +FB62; [65 5A, 05, 33] + +062C; [65 5C, 05, 05] +FE9F; [65 5C, 05, 2D] +FEA0; [65 5C, 05, 2F] +FE9E; [65 5C, 05, 31] +FE9D; [65 5C, 05, 33] +FCA7; [65 5C, 05, 2D][65 68, 05, 2D] +FC15; [65 5C, 05, 33][65 68, 05, 33] +FDA6; [65 5C, 05, 31][65 68, 05, 31][66 61, 05, 3D] +FDBE; [65 5C, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FDFB; [65 5C, 05, 33][66 1D, 05, 33][06, 05, 3D][65 5C, 05, 3D][66 1D, 05, 3D][65 32, 05, 3D][66 1D, 05, 3D][66 41, 05, 3D] +FCA8; [65 5C, 05, 2D][66 29, 05, 2D] +FC16; [65 5C, 05, 33][66 29, 05, 33] +FD59; [65 5C, 05, 2D][66 29, 05, 2D][65 68, 05, 3D] +FD58; [65 5C, 05, 31][66 29, 05, 31][65 68, 05, 3D] +FDA7; [65 5C, 05, 31][66 29, 05, 31][66 61, 05, 3D] +FDA5; [65 5C, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FD1D; [65 5C, 05, 31][66 61, 05, 31] +FD01; [65 5C, 05, 33][66 61, 05, 33] +FD1E; [65 5C, 05, 31][66 63, 05, 31] +FD02; [65 5C, 05, 33][66 63, 05, 33] + +0683; [65 5E, 05, 05] +FB78; [65 5E, 05, 2D] +FB79; [65 5E, 05, 2F] +FB77; [65 5E, 05, 31] +FB76; [65 5E, 05, 33] + +0684; [65 60, 05, 05] +FB74; [65 60, 05, 2D] +FB75; [65 60, 05, 2F] +FB73; [65 60, 05, 31] +FB72; [65 60, 05, 33] + +0686; [65 62, 05, 05] +FB7C; [65 62, 05, 2D] +FB7D; [65 62, 05, 2F] +FB7B; [65 62, 05, 31] +FB7A; [65 62, 05, 33] + +06BF; [65 64, 05, 05] + +0687; [65 66, 05, 05] +FB80; [65 66, 05, 2D] +FB81; [65 66, 05, 2F] +FB7F; [65 66, 05, 31] +FB7E; [65 66, 05, 33] + +062D; [65 68, 05, 05] +FEA3; [65 68, 05, 2D] +FEA4; [65 68, 05, 2F] +FEA2; [65 68, 05, 31] +FEA1; [65 68, 05, 33] +FCA9; [65 68, 05, 2D][65 5C, 05, 2D] +FC17; [65 68, 05, 33][65 5C, 05, 33] +FDBF; [65 68, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FCAA; [65 68, 05, 2D][66 29, 05, 2D] +FC18; [65 68, 05, 33][66 29, 05, 33] +FD5B; [65 68, 05, 31][66 29, 05, 31][66 61, 05, 3D] +FD5A; [65 68, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FD1B; [65 68, 05, 31][66 61, 05, 31] +FCFF; [65 68, 05, 33][66 61, 05, 33] +FD1C; [65 68, 05, 31][66 63, 05, 31] +FD00; [65 68, 05, 33][66 63, 05, 33] + +062E; [65 6A, 05, 05] +FEA7; [65 6A, 05, 2D] +FEA8; [65 6A, 05, 2F] +FEA6; [65 6A, 05, 31] +FEA5; [65 6A, 05, 33] +FCAB; [65 6A, 05, 2D][65 5C, 05, 2D] +FC19; [65 6A, 05, 33][65 5C, 05, 33] +FC1A; [65 6A, 05, 33][65 68, 05, 33] +FCAC; [65 6A, 05, 2D][66 29, 05, 2D] +FC1B; [65 6A, 05, 33][66 29, 05, 33] +FD1F; [65 6A, 05, 31][66 61, 05, 31] +FD03; [65 6A, 05, 33][66 61, 05, 33] +FD20; [65 6A, 05, 31][66 63, 05, 31] +FD04; [65 6A, 05, 33][66 63, 05, 33] + +0681; [65 6C, 05, 05] + +0682; [65 6E, 05, 05] + +0685; [65 70, 05, 05] + +0757; [65 72, 05, 05] + +0758; [65 74, 05, 05] + +062F; [65 76, 05, 05] +FEAA; [65 76, 05, 31] +FEA9; [65 76, 05, 33] + +0630; [65 78, 05, 05] +FEAC; [65 78, 05, 31] +FEAB; [65 78, 05, 33] +FC5B; [65 78, 05, 33][, D7 39, 33] + +0688; [65 7A, 05, 05] +FB89; [65 7A, 05, 31] +FB88; [65 7A, 05, 33] + +0689; [65 7C, 05, 05] + +068A; [65 7E, 05, 05] + +068B; [65 80, 05, 05] + +068C; [65 82, 05, 05] +FB85; [65 82, 05, 31] +FB84; [65 82, 05, 33] + +068D; [65 84, 05, 05] +FB83; [65 84, 05, 31] +FB82; [65 84, 05, 33] + +068E; [65 86, 05, 05] +FB87; [65 86, 05, 31] +FB86; [65 86, 05, 33] + +068F; [65 88, 05, 05] + +0690; [65 8A, 05, 05] + +06EE; [65 8C, 05, 05] + +0759; [65 8E, 05, 05] + +075A; [65 90, 05, 05] + +0631; [65 92, 05, 05] +FEAE; [65 92, 05, 31] +FEAD; [65 92, 05, 33] +FC5C; [65 92, 05, 33][, D7 39, 33] +FDF6; [65 92, 05, 33][65 B0, 05, 33][66 4D, 05, 3D][66 1D, 05, 3D] +FDFC; [65 92, 05, 33][66 65, 05, 33][65 32, 05, 3D][66 1D, 05, 3D] + +0632; [65 94, 05, 05] +FEB0; [65 94, 05, 31] +FEAF; [65 94, 05, 33] + +0691; [65 96, 05, 05] +FB8D; [65 96, 05, 31] +FB8C; [65 96, 05, 33] + +0692; [65 98, 05, 05] + +0693; [65 9A, 05, 05] + +0694; [65 9C, 05, 05] + +0695; [65 9E, 05, 05] + +0696; [65 A0, 05, 05] + +0697; [65 A2, 05, 05] + +0698; [65 A4, 05, 05] +FB8B; [65 A4, 05, 31] +FB8A; [65 A4, 05, 33] + +0699; [65 A6, 05, 05] + +06EF; [65 A8, 05, 05] + +075B; [65 AA, 05, 05] + +076B; [65 AC, 05, 05] + +076C; [65 AE, 05, 05] + +0633; [65 B0, 05, 05] +FEB3; [65 B0, 05, 2D] +FEB4; [65 B0, 05, 2F] +FEB2; [65 B0, 05, 31] +FEB1; [65 B0, 05, 33] +FCAD; [65 B0, 05, 2D][65 5C, 05, 2D] +FD34; [65 B0, 05, 2F][65 5C, 05, 2F] +FC1C; [65 B0, 05, 33][65 5C, 05, 33] +FD5D; [65 B0, 05, 2D][65 5C, 05, 2D][65 68, 05, 3D] +FD5E; [65 B0, 05, 31][65 5C, 05, 31][66 61, 05, 3D] +FCAE; [65 B0, 05, 2D][65 68, 05, 2D] +FD35; [65 B0, 05, 2F][65 68, 05, 2F] +FC1D; [65 B0, 05, 33][65 68, 05, 33] +FD5C; [65 B0, 05, 2D][65 68, 05, 2D][65 5C, 05, 3D] +FCAF; [65 B0, 05, 2D][65 6A, 05, 2D] +FD36; [65 B0, 05, 2F][65 6A, 05, 2F] +FC1E; [65 B0, 05, 33][65 6A, 05, 33] +FDA8; [65 B0, 05, 31][65 6A, 05, 31][66 61, 05, 3D] +FDC6; [65 B0, 05, 31][65 6A, 05, 31][66 63, 05, 3D] +FD2A; [65 B0, 05, 31][65 92, 05, 31] +FD0E; [65 B0, 05, 33][65 92, 05, 33] +FCB0; [65 B0, 05, 2D][66 29, 05, 2D] +FCE7; [65 B0, 05, 2F][66 29, 05, 2F] +FC1F; [65 B0, 05, 33][66 29, 05, 33] +FD61; [65 B0, 05, 2D][66 29, 05, 2D][65 5C, 05, 3D] +FD60; [65 B0, 05, 2D][66 29, 05, 2D][65 68, 05, 3D] +FD5F; [65 B0, 05, 31][66 29, 05, 31][65 68, 05, 3D] +FD63; [65 B0, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FD62; [65 B0, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FD31; [65 B0, 05, 2D][66 41, 05, 2D] +FCE8; [65 B0, 05, 2F][66 41, 05, 2F] +FD17; [65 B0, 05, 31][66 61, 05, 31] +FCFB; [65 B0, 05, 33][66 61, 05, 33] +FD18; [65 B0, 05, 31][66 63, 05, 31] +FCFC; [65 B0, 05, 33][66 63, 05, 33] + +0634; [65 B2, 05, 05] +FEB7; [65 B2, 05, 2D] +FEB8; [65 B2, 05, 2F] +FEB6; [65 B2, 05, 31] +FEB5; [65 B2, 05, 33] +FD2D; [65 B2, 05, 2D][65 5C, 05, 2D] +FD37; [65 B2, 05, 2F][65 5C, 05, 2F] +FD25; [65 B2, 05, 31][65 5C, 05, 31] +FD09; [65 B2, 05, 33][65 5C, 05, 33] +FD69; [65 B2, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FD2E; [65 B2, 05, 2D][65 68, 05, 2D] +FD38; [65 B2, 05, 2F][65 68, 05, 2F] +FD26; [65 B2, 05, 31][65 68, 05, 31] +FD0A; [65 B2, 05, 33][65 68, 05, 33] +FD68; [65 B2, 05, 2D][65 68, 05, 2D][66 29, 05, 3D] +FD67; [65 B2, 05, 31][65 68, 05, 31][66 29, 05, 3D] +FDAA; [65 B2, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FD2F; [65 B2, 05, 2D][65 6A, 05, 2D] +FD39; [65 B2, 05, 2F][65 6A, 05, 2F] +FD27; [65 B2, 05, 31][65 6A, 05, 31] +FD0B; [65 B2, 05, 33][65 6A, 05, 33] +FD29; [65 B2, 05, 31][65 92, 05, 31] +FD0D; [65 B2, 05, 33][65 92, 05, 33] +FD30; [65 B2, 05, 2D][66 29, 05, 2D] +FCE9; [65 B2, 05, 2F][66 29, 05, 2F] +FD28; [65 B2, 05, 31][66 29, 05, 31] +FD0C; [65 B2, 05, 33][66 29, 05, 33] +FD6B; [65 B2, 05, 2D][66 29, 05, 2D][65 6A, 05, 3D] +FD6A; [65 B2, 05, 31][66 29, 05, 31][65 6A, 05, 3D] +FD6D; [65 B2, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FD6C; [65 B2, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FD32; [65 B2, 05, 2D][66 41, 05, 2D] +FCEA; [65 B2, 05, 2F][66 41, 05, 2F] +FD19; [65 B2, 05, 31][66 61, 05, 31] +FCFD; [65 B2, 05, 33][66 61, 05, 33] +FD1A; [65 B2, 05, 31][66 63, 05, 31] +FCFE; [65 B2, 05, 33][66 63, 05, 33] + +069A; [65 B4, 05, 05] + +069B; [65 B6, 05, 05] + +069C; [65 B8, 05, 05] + +06FA; [65 BA, 05, 05] + +075C; [65 BC, 05, 05] + +076D; [65 BE, 05, 05] + +0635; [65 C0, 05, 05] +FEBB; [65 C0, 05, 2D] +FEBC; [65 C0, 05, 2F] +FEBA; [65 C0, 05, 31] +FEB9; [65 C0, 05, 33] +FCB1; [65 C0, 05, 2D][65 68, 05, 2D] +FC20; [65 C0, 05, 33][65 68, 05, 33] +FD65; [65 C0, 05, 2D][65 68, 05, 2D][65 68, 05, 3D] +FD64; [65 C0, 05, 31][65 68, 05, 31][65 68, 05, 3D] +FDA9; [65 C0, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FCB2; [65 C0, 05, 2D][65 6A, 05, 2D] +FD2B; [65 C0, 05, 31][65 92, 05, 31] +FD0F; [65 C0, 05, 33][65 92, 05, 33] +FDF5; [65 C0, 05, 33][66 1D, 05, 33][65 D0, 05, 3D][66 29, 05, 3D] +FDF9; [65 C0, 05, 33][66 1D, 05, 33][66 61, 05, 3D] +FDFA; [65 C0, 05, 33][66 1D, 05, 33][66 61, 05, 3D][06, 05, 3D][65 32, 05, 3D][66 1D, 05, 3D][66 1D, 05, 3D][66 41, 05, 3D][06, 05, 3D][65 D0, 05, 3D][66 1D, 05, 3D][66 63, 05, 3D][66 41, 05, 3D][06, 05, 3D][66 4D, 05, 3D][65 B0, 05, 3D][66 1D, 05, 3D][66 29, 05, 3D] +FDF0; [65 C0, 05, 33][66 1D, 05, 33][66 6F, 05, 3D] +FCB3; [65 C0, 05, 2D][66 29, 05, 2D] +FC21; [65 C0, 05, 33][66 29, 05, 33] +FDC5; [65 C0, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FD66; [65 C0, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FD21; [65 C0, 05, 31][66 61, 05, 31] +FD05; [65 C0, 05, 33][66 61, 05, 33] +FD22; [65 C0, 05, 31][66 63, 05, 31] +FD06; [65 C0, 05, 33][66 63, 05, 33] + +0636; [65 C2, 05, 05] +FEBF; [65 C2, 05, 2D] +FEC0; [65 C2, 05, 2F] +FEBE; [65 C2, 05, 31] +FEBD; [65 C2, 05, 33] +FCB4; [65 C2, 05, 2D][65 5C, 05, 2D] +FC22; [65 C2, 05, 33][65 5C, 05, 33] +FCB5; [65 C2, 05, 2D][65 68, 05, 2D] +FC23; [65 C2, 05, 33][65 68, 05, 33] +FD6E; [65 C2, 05, 31][65 68, 05, 31][66 61, 05, 3D] +FDAB; [65 C2, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FCB6; [65 C2, 05, 2D][65 6A, 05, 2D] +FC24; [65 C2, 05, 33][65 6A, 05, 33] +FD70; [65 C2, 05, 2D][65 6A, 05, 2D][66 29, 05, 3D] +FD6F; [65 C2, 05, 31][65 6A, 05, 31][66 29, 05, 3D] +FD2C; [65 C2, 05, 31][65 92, 05, 31] +FD10; [65 C2, 05, 33][65 92, 05, 33] +FCB7; [65 C2, 05, 2D][66 29, 05, 2D] +FC25; [65 C2, 05, 33][66 29, 05, 33] +FD23; [65 C2, 05, 31][66 61, 05, 31] +FD07; [65 C2, 05, 33][66 61, 05, 33] +FD24; [65 C2, 05, 31][66 63, 05, 31] +FD08; [65 C2, 05, 33][66 63, 05, 33] + +069D; [65 C4, 05, 05] + +069E; [65 C6, 05, 05] + +06FB; [65 C8, 05, 05] + +0637; [65 CA, 05, 05] +FEC3; [65 CA, 05, 2D] +FEC4; [65 CA, 05, 2F] +FEC2; [65 CA, 05, 31] +FEC1; [65 CA, 05, 33] +FCB8; [65 CA, 05, 2D][65 68, 05, 2D] +FC26; [65 CA, 05, 33][65 68, 05, 33] +FD33; [65 CA, 05, 2D][66 29, 05, 2D] +FD3A; [65 CA, 05, 2F][66 29, 05, 2F] +FC27; [65 CA, 05, 33][66 29, 05, 33] +FD72; [65 CA, 05, 2D][66 29, 05, 2D][65 68, 05, 3D] +FD71; [65 CA, 05, 31][66 29, 05, 31][65 68, 05, 3D] +FD73; [65 CA, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FD74; [65 CA, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FD11; [65 CA, 05, 31][66 61, 05, 31] +FCF5; [65 CA, 05, 33][66 61, 05, 33] +FD12; [65 CA, 05, 31][66 63, 05, 31] +FCF6; [65 CA, 05, 33][66 63, 05, 33] + +0638; [65 CC, 05, 05] +FEC7; [65 CC, 05, 2D] +FEC8; [65 CC, 05, 2F] +FEC6; [65 CC, 05, 31] +FEC5; [65 CC, 05, 33] +FCB9; [65 CC, 05, 2D][66 29, 05, 2D] +FD3B; [65 CC, 05, 2F][66 29, 05, 2F] +FC28; [65 CC, 05, 33][66 29, 05, 33] + +069F; [65 CE, 05, 05] + +0639; [65 D0, 05, 05] +FECB; [65 D0, 05, 2D] +FECC; [65 D0, 05, 2F] +FECA; [65 D0, 05, 31] +FEC9; [65 D0, 05, 33] +FCBA; [65 D0, 05, 2D][65 5C, 05, 2D] +FC29; [65 D0, 05, 33][65 5C, 05, 33] +FDC4; [65 D0, 05, 2D][65 5C, 05, 2D][66 29, 05, 3D] +FD75; [65 D0, 05, 31][65 5C, 05, 31][66 29, 05, 3D] +FDF7; [65 D0, 05, 33][66 1D, 05, 33][66 63, 05, 3D][66 41, 05, 3D] +FCBB; [65 D0, 05, 2D][66 29, 05, 2D] +FC2A; [65 D0, 05, 33][66 29, 05, 33] +FD77; [65 D0, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FD76; [65 D0, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FD78; [65 D0, 05, 31][66 29, 05, 31][66 61, 05, 3D] +FDB6; [65 D0, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FD13; [65 D0, 05, 31][66 61, 05, 31] +FCF7; [65 D0, 05, 33][66 61, 05, 33] +FD14; [65 D0, 05, 31][66 63, 05, 31] +FCF8; [65 D0, 05, 33][66 63, 05, 33] + +063A; [65 D2, 05, 05] +FECF; [65 D2, 05, 2D] +FED0; [65 D2, 05, 2F] +FECE; [65 D2, 05, 31] +FECD; [65 D2, 05, 33] +FCBC; [65 D2, 05, 2D][65 5C, 05, 2D] +FC2B; [65 D2, 05, 33][65 5C, 05, 33] +FCBD; [65 D2, 05, 2D][66 29, 05, 2D] +FC2C; [65 D2, 05, 33][66 29, 05, 33] +FD79; [65 D2, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FD7B; [65 D2, 05, 31][66 29, 05, 31][66 61, 05, 3D] +FD7A; [65 D2, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FD15; [65 D2, 05, 31][66 61, 05, 31] +FCF9; [65 D2, 05, 33][66 61, 05, 33] +FD16; [65 D2, 05, 31][66 63, 05, 31] +FCFA; [65 D2, 05, 33][66 63, 05, 33] + +06A0; [65 D4, 05, 05] + +06FC; [65 D6, 05, 05] + +075D; [65 D8, 05, 05] + +075E; [65 DA, 05, 05] + +075F; [65 DC, 05, 05] + +0641; [65 DE, 05, 05] +FED3; [65 DE, 05, 2D] +FED4; [65 DE, 05, 2F] +FED2; [65 DE, 05, 31] +FED1; [65 DE, 05, 33] +FCBE; [65 DE, 05, 2D][65 5C, 05, 2D] +FC2D; [65 DE, 05, 33][65 5C, 05, 33] +FCBF; [65 DE, 05, 2D][65 68, 05, 2D] +FC2E; [65 DE, 05, 33][65 68, 05, 33] +FCC0; [65 DE, 05, 2D][65 6A, 05, 2D] +FC2F; [65 DE, 05, 33][65 6A, 05, 33] +FD7D; [65 DE, 05, 2D][65 6A, 05, 2D][66 29, 05, 3D] +FD7C; [65 DE, 05, 31][65 6A, 05, 31][66 29, 05, 3D] +FCC1; [65 DE, 05, 2D][66 29, 05, 2D] +FC30; [65 DE, 05, 33][66 29, 05, 33] +FDC1; [65 DE, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC7C; [65 DE, 05, 31][66 61, 05, 31] +FC31; [65 DE, 05, 33][66 61, 05, 33] +FC7D; [65 DE, 05, 31][66 63, 05, 31] +FC32; [65 DE, 05, 33][66 63, 05, 33] + +06A1; [65 E0, 05, 05] + +06A2; [65 E2, 05, 05] + +06A3; [65 E4, 05, 05] + +06A4; [65 E6, 05, 05] +FB6C; [65 E6, 05, 2D] +FB6D; [65 E6, 05, 2F] +FB6B; [65 E6, 05, 31] +FB6A; [65 E6, 05, 33] + +06A5; [65 E8, 05, 05] + +06A6; [65 EA, 05, 05] +FB70; [65 EA, 05, 2D] +FB71; [65 EA, 05, 2F] +FB6F; [65 EA, 05, 31] +FB6E; [65 EA, 05, 33] + +0760; [65 EC, 05, 05] + +0761; [65 EE, 05, 05] + +066F; [65 F0, 05, 05] + +0642; [65 F2, 05, 05] +FED7; [65 F2, 05, 2D] +FED8; [65 F2, 05, 2F] +FED6; [65 F2, 05, 31] +FED5; [65 F2, 05, 33] +FCC2; [65 F2, 05, 2D][65 68, 05, 2D] +FC33; [65 F2, 05, 33][65 68, 05, 33] +FDF1; [65 F2, 05, 33][66 1D, 05, 33][66 6F, 05, 3D] +FCC3; [65 F2, 05, 2D][66 29, 05, 2D] +FC34; [65 F2, 05, 33][66 29, 05, 33] +FDB4; [65 F2, 05, 2D][66 29, 05, 2D][65 68, 05, 3D] +FD7E; [65 F2, 05, 31][66 29, 05, 31][65 68, 05, 3D] +FD7F; [65 F2, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FDB2; [65 F2, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC7E; [65 F2, 05, 31][66 61, 05, 31] +FC35; [65 F2, 05, 33][66 61, 05, 33] +FC7F; [65 F2, 05, 31][66 63, 05, 31] +FC36; [65 F2, 05, 33][66 63, 05, 33] + +06A7; [65 F4, 05, 05] + +06A8; [65 F6, 05, 05] + +0643; [65 F8, 05, 05] +FEDB; [65 F8, 05, 2D] +FEDC; [65 F8, 05, 2F] +FEDA; [65 F8, 05, 31] +FED9; [65 F8, 05, 33] +FC80; [65 F8, 05, 31][65 32, 05, 31] +FC37; [65 F8, 05, 33][65 32, 05, 33] +FCC4; [65 F8, 05, 2D][65 5C, 05, 2D] +FC38; [65 F8, 05, 33][65 5C, 05, 33] +FCC5; [65 F8, 05, 2D][65 68, 05, 2D] +FC39; [65 F8, 05, 33][65 68, 05, 33] +FCC6; [65 F8, 05, 2D][65 6A, 05, 2D] +FC3A; [65 F8, 05, 33][65 6A, 05, 33] +FCC7; [65 F8, 05, 2D][66 1D, 05, 2D] +FCEB; [65 F8, 05, 2F][66 1D, 05, 2F] +FC81; [65 F8, 05, 31][66 1D, 05, 31] +FC3B; [65 F8, 05, 33][66 1D, 05, 33] +FCC8; [65 F8, 05, 2D][66 29, 05, 2D] +FCEC; [65 F8, 05, 2F][66 29, 05, 2F] +FC82; [65 F8, 05, 31][66 29, 05, 31] +FC3C; [65 F8, 05, 33][66 29, 05, 33] +FDC3; [65 F8, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FDBB; [65 F8, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FDB7; [65 F8, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC83; [65 F8, 05, 31][66 61, 05, 31] +FC3D; [65 F8, 05, 33][66 61, 05, 33] +FC84; [65 F8, 05, 31][66 63, 05, 31] +FC3E; [65 F8, 05, 33][66 63, 05, 33] + +06A9; [65 FA, 05, 05] +FB90; [65 FA, 05, 2D] +FB91; [65 FA, 05, 2F] +FB8F; [65 FA, 05, 31] +FB8E; [65 FA, 05, 33] + +06AA; [65 FC, 05, 05] + +06AB; [65 FE, 05, 05] + +06AC; [66 05, 05, 05] + +06AD; [66 07, 05, 05] +FBD5; [66 07, 05, 2D] +FBD6; [66 07, 05, 2F] +FBD4; [66 07, 05, 31] +FBD3; [66 07, 05, 33] + +06AE; [66 09, 05, 05] + +06AF; [66 0B, 05, 05] +FB94; [66 0B, 05, 2D] +FB95; [66 0B, 05, 2F] +FB93; [66 0B, 05, 31] +FB92; [66 0B, 05, 33] + +06B0; [66 0D, 05, 05] + +06B1; [66 0F, 05, 05] +FB9C; [66 0F, 05, 2D] +FB9D; [66 0F, 05, 2F] +FB9B; [66 0F, 05, 31] +FB9A; [66 0F, 05, 33] + +06B2; [66 11, 05, 05] + +06B3; [66 13, 05, 05] +FB98; [66 13, 05, 2D] +FB99; [66 13, 05, 2F] +FB97; [66 13, 05, 31] +FB96; [66 13, 05, 33] + +06B4; [66 15, 05, 05] + +0762; [66 17, 05, 05] + +0763; [66 19, 05, 05] + +0764; [66 1B, 05, 05] + +0644; [66 1D, 05, 05] +FEDF; [66 1D, 05, 2D] +FEE0; [66 1D, 05, 2F] +FEDE; [66 1D, 05, 31] +FEDD; [66 1D, 05, 33] +FEF6; [66 1D, 05, 31][65 22, 05, 31] +FEF5; [66 1D, 05, 33][65 22, 05, 33] +FEF8; [66 1D, 05, 31][65 24, 05, 31] +FEF7; [66 1D, 05, 33][65 24, 05, 33] +FEFA; [66 1D, 05, 31][65 2C, 05, 31] +FEF9; [66 1D, 05, 33][65 2C, 05, 33] +FEFC; [66 1D, 05, 31][65 32, 05, 31] +FEFB; [66 1D, 05, 33][65 32, 05, 33] +FCC9; [66 1D, 05, 2D][65 5C, 05, 2D] +FC3F; [66 1D, 05, 33][65 5C, 05, 33] +FD83; [66 1D, 05, 2D][65 5C, 05, 2D][65 5C, 05, 3D] +FD84; [66 1D, 05, 31][65 5C, 05, 31][65 5C, 05, 3D] +FDBA; [66 1D, 05, 2D][65 5C, 05, 2D][66 29, 05, 3D] +FDBC; [66 1D, 05, 31][65 5C, 05, 31][66 29, 05, 3D] +FDAC; [66 1D, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FCCA; [66 1D, 05, 2D][65 68, 05, 2D] +FC40; [66 1D, 05, 33][65 68, 05, 33] +FDB5; [66 1D, 05, 2D][65 68, 05, 2D][66 29, 05, 3D] +FD80; [66 1D, 05, 31][65 68, 05, 31][66 29, 05, 3D] +FD82; [66 1D, 05, 31][65 68, 05, 31][66 61, 05, 3D] +FD81; [66 1D, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FCCB; [66 1D, 05, 2D][65 6A, 05, 2D] +FC41; [66 1D, 05, 33][65 6A, 05, 33] +FD86; [66 1D, 05, 2D][65 6A, 05, 2D][66 29, 05, 3D] +FD85; [66 1D, 05, 31][65 6A, 05, 31][66 29, 05, 3D] +FCCC; [66 1D, 05, 2D][66 29, 05, 2D] +FCED; [66 1D, 05, 2F][66 29, 05, 2F] +FC85; [66 1D, 05, 31][66 29, 05, 31] +FC42; [66 1D, 05, 33][66 29, 05, 33] +FD88; [66 1D, 05, 2D][66 29, 05, 2D][65 68, 05, 3D] +FD87; [66 1D, 05, 31][66 29, 05, 31][65 68, 05, 3D] +FDAD; [66 1D, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FCCD; [66 1D, 05, 2D][66 41, 05, 2D] +FC86; [66 1D, 05, 31][66 61, 05, 31] +FC43; [66 1D, 05, 33][66 61, 05, 33] +FC87; [66 1D, 05, 31][66 63, 05, 31] +FC44; [66 1D, 05, 33][66 63, 05, 33] + +06B5; [66 1F, 05, 05] + +06B6; [66 21, 05, 05] + +06B7; [66 23, 05, 05] + +06B8; [66 25, 05, 05] + +076A; [66 27, 05, 05] + +0645; [66 29, 05, 05] +FEE3; [66 29, 05, 2D] +FEE4; [66 29, 05, 2F] +FEE2; [66 29, 05, 31] +FEE1; [66 29, 05, 33] +06FE; [66 29, 05, 09][, E4 5D, 09] +FC88; [66 29, 05, 31][65 32, 05, 31] +FCCE; [66 29, 05, 2D][65 5C, 05, 2D] +FC45; [66 29, 05, 33][65 5C, 05, 33] +FD8C; [66 29, 05, 2D][65 5C, 05, 2D][65 68, 05, 3D] +FD92; [66 29, 05, 2D][65 5C, 05, 2D][65 6A, 05, 3D] +FD8D; [66 29, 05, 2D][65 5C, 05, 2D][66 29, 05, 3D] +FDC0; [66 29, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FCCF; [66 29, 05, 2D][65 68, 05, 2D] +FC46; [66 29, 05, 33][65 68, 05, 33] +FD89; [66 29, 05, 2D][65 68, 05, 2D][65 5C, 05, 3D] +FD8A; [66 29, 05, 2D][65 68, 05, 2D][66 29, 05, 3D] +FDF4; [66 29, 05, 33][65 68, 05, 33][66 29, 05, 3D][65 76, 05, 3D] +FD8B; [66 29, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FCD0; [66 29, 05, 2D][65 6A, 05, 2D] +FC47; [66 29, 05, 33][65 6A, 05, 33] +FD8E; [66 29, 05, 2D][65 6A, 05, 2D][65 5C, 05, 3D] +FD8F; [66 29, 05, 2D][65 6A, 05, 2D][66 29, 05, 3D] +FDB9; [66 29, 05, 31][65 6A, 05, 31][66 63, 05, 3D] +FCD1; [66 29, 05, 2D][66 29, 05, 2D] +FC89; [66 29, 05, 31][66 29, 05, 31] +FC48; [66 29, 05, 33][66 29, 05, 33] +FDB1; [66 29, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC49; [66 29, 05, 33][66 61, 05, 33] +FC4A; [66 29, 05, 33][66 63, 05, 33] + +0765; [66 2B, 05, 05] + +0766; [66 2D, 05, 05] + +0646; [66 2F, 05, 05] +FEE7; [66 2F, 05, 2D] +FEE8; [66 2F, 05, 2F] +FEE6; [66 2F, 05, 31] +FEE5; [66 2F, 05, 33] +FCD2; [66 2F, 05, 2D][65 5C, 05, 2D] +FC4B; [66 2F, 05, 33][65 5C, 05, 33] +FDB8; [66 2F, 05, 2D][65 5C, 05, 2D][65 68, 05, 3D] +FDBD; [66 2F, 05, 31][65 5C, 05, 31][65 68, 05, 3D] +FD98; [66 2F, 05, 2D][65 5C, 05, 2D][66 29, 05, 3D] +FD97; [66 2F, 05, 31][65 5C, 05, 31][66 29, 05, 3D] +FD99; [66 2F, 05, 31][65 5C, 05, 31][66 61, 05, 3D] +FDC7; [66 2F, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FCD3; [66 2F, 05, 2D][65 68, 05, 2D] +FC4C; [66 2F, 05, 33][65 68, 05, 33] +FD95; [66 2F, 05, 2D][65 68, 05, 2D][66 29, 05, 3D] +FD96; [66 2F, 05, 31][65 68, 05, 31][66 61, 05, 3D] +FDB3; [66 2F, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FCD4; [66 2F, 05, 2D][65 6A, 05, 2D] +FC4D; [66 2F, 05, 33][65 6A, 05, 33] +FC8A; [66 2F, 05, 31][65 92, 05, 31] +FC8B; [66 2F, 05, 31][65 94, 05, 31] +FCD5; [66 2F, 05, 2D][66 29, 05, 2D] +FCEE; [66 2F, 05, 2F][66 29, 05, 2F] +FC8C; [66 2F, 05, 31][66 29, 05, 31] +FC4E; [66 2F, 05, 33][66 29, 05, 33] +FD9B; [66 2F, 05, 31][66 29, 05, 31][66 61, 05, 3D] +FD9A; [66 2F, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC8D; [66 2F, 05, 31][66 2F, 05, 31] +FCD6; [66 2F, 05, 2D][66 41, 05, 2D] +FCEF; [66 2F, 05, 2F][66 41, 05, 2F] +FC8E; [66 2F, 05, 31][66 61, 05, 31] +FC4F; [66 2F, 05, 33][66 61, 05, 33] +FC8F; [66 2F, 05, 31][66 63, 05, 31] +FC50; [66 2F, 05, 33][66 63, 05, 33] + +06BA; [66 31, 05, 05] +FB9F; [66 31, 05, 31] +FB9E; [66 31, 05, 33] + +06BB; [66 33, 05, 05] +FBA2; [66 33, 05, 2D] +FBA3; [66 33, 05, 2F] +FBA1; [66 33, 05, 31] +FBA0; [66 33, 05, 33] + +06BC; [66 35, 05, 05] + +06BD; [66 37, 05, 05] + +06B9; [66 39, 05, 05] + +0767; [66 3B, 05, 05] + +0768; [66 3D, 05, 05] + +0769; [66 3F, 05, 05] + +0647; [66 41, 05, 05] +FEEB; [66 41, 05, 2D] +FEEC; [66 41, 05, 2F] +FEEA; [66 41, 05, 31] +FEE9; [66 41, 05, 33] +FCD9; [66 41, 05, 2D][, D7 39, 2D] +FCD7; [66 41, 05, 2D][65 5C, 05, 2D] +FC51; [66 41, 05, 33][65 5C, 05, 33] +FCD8; [66 41, 05, 2D][66 29, 05, 2D] +FC52; [66 41, 05, 33][66 29, 05, 33] +FD93; [66 41, 05, 2D][66 29, 05, 2D][65 5C, 05, 3D] +FD94; [66 41, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FC53; [66 41, 05, 33][66 61, 05, 33] +FC54; [66 41, 05, 33][66 63, 05, 33] + +06BE; [66 43, 05, 05] +FBAC; [66 43, 05, 2D] +FBAD; [66 43, 05, 2F] +FBAB; [66 43, 05, 31] +FBAA; [66 43, 05, 33] + +06C1; [66 45, 05, 05] +FBA8; [66 45, 05, 2D] +FBA9; [66 45, 05, 2F] +FBA7; [66 45, 05, 31] +FBA6; [66 45, 05, 33] +06C2; [66 45, 05, 05][, D6 85, 05] + +06C3; [66 47, 05, 05] + +06FF; [66 49, 05, 05] + +06D5; [66 4B, 05, 05] +06C0; [66 4B, 05, 05][, D6 85, 05] +FBA5; [66 4B, 05, 31][, D6 85, 31] +FBA4; [66 4B, 05, 33][, D6 85, 33] + +0648; [66 4D, 05, 05] +06E5; [66 4D, 05, 09] +FEEE; [66 4D, 05, 31] +FEED; [66 4D, 05, 33] +0676; [66 4D, 05, 09][65 20, 05, 09] +FDF8; [66 4D, 05, 33][65 B0, 05, 33][66 1D, 05, 3D][66 29, 05, 3D] + +06C4; [66 4F, 05, 05] + +06C5; [66 51, 05, 05] +FBE1; [66 51, 05, 31] +FBE0; [66 51, 05, 33] + +06C6; [66 53, 05, 05] +FBDA; [66 53, 05, 31] +FBD9; [66 53, 05, 33] + +06C7; [66 55, 05, 05] +FBD8; [66 55, 05, 31] +FBD7; [66 55, 05, 33] +0677; [66 55, 05, 09][65 20, 05, 09] +FBDD; [66 55, 05, 33][65 20, 05, 33] + +06C8; [66 57, 05, 05] +FBDC; [66 57, 05, 31] +FBDB; [66 57, 05, 33] + +06C9; [66 59, 05, 05] +FBE3; [66 59, 05, 31] +FBE2; [66 59, 05, 33] + +06CA; [66 5B, 05, 05] + +06CB; [66 5D, 05, 05] +FBDF; [66 5D, 05, 31] +FBDE; [66 5D, 05, 33] + +06CF; [66 5F, 05, 05] + +0649; [66 61, 05, 05] +FBE8; [66 61, 05, 2D] +FBE9; [66 61, 05, 2F] +FEF0; [66 61, 05, 31] +FEEF; [66 61, 05, 33] +FC90; [66 61, 05, 31][, D7 39, 31] +FC5D; [66 61, 05, 33][, D7 39, 33] + +064A; [66 63, 05, 05] +06E6; [66 63, 05, 09] +FEF3; [66 63, 05, 2D] +FEF4; [66 63, 05, 2F] +FEF2; [66 63, 05, 31] +FEF1; [66 63, 05, 33] +0678; [66 63, 05, 09][65 20, 05, 09] +FCDA; [66 63, 05, 2D][65 5C, 05, 2D] +FC55; [66 63, 05, 33][65 5C, 05, 33] +FDAF; [66 63, 05, 31][65 5C, 05, 31][66 63, 05, 3D] +FCDB; [66 63, 05, 2D][65 68, 05, 2D] +FC56; [66 63, 05, 33][65 68, 05, 33] +FDAE; [66 63, 05, 31][65 68, 05, 31][66 63, 05, 3D] +FCDC; [66 63, 05, 2D][65 6A, 05, 2D] +FC57; [66 63, 05, 33][65 6A, 05, 33] +FC91; [66 63, 05, 31][65 92, 05, 31] +FC92; [66 63, 05, 31][65 94, 05, 31] +FCDD; [66 63, 05, 2D][66 29, 05, 2D] +FCF0; [66 63, 05, 2F][66 29, 05, 2F] +FC93; [66 63, 05, 31][66 29, 05, 31] +FC58; [66 63, 05, 33][66 29, 05, 33] +FD9D; [66 63, 05, 2D][66 29, 05, 2D][66 29, 05, 3D] +FD9C; [66 63, 05, 31][66 29, 05, 31][66 29, 05, 3D] +FDB0; [66 63, 05, 31][66 29, 05, 31][66 63, 05, 3D] +FC94; [66 63, 05, 31][66 2F, 05, 31] +FCDE; [66 63, 05, 2D][66 41, 05, 2D] +FCF1; [66 63, 05, 2F][66 41, 05, 2F] +FC95; [66 63, 05, 31][66 61, 05, 31] +FC59; [66 63, 05, 33][66 61, 05, 33] +FC96; [66 63, 05, 31][66 63, 05, 31] +FC5A; [66 63, 05, 33][66 63, 05, 33] -0A89; [6A 2A, 05, 05] +06CC; [66 65, 05, 05] +FBFE; [66 65, 05, 2D] +FBFF; [66 65, 05, 2F] +FBFD; [66 65, 05, 31] +FBFC; [66 65, 05, 33] -0A8A; [6A 2C, 05, 05] +06CD; [66 67, 05, 05] -0A8B; [6A 2E, 05, 05] +06CE; [66 69, 05, 05] -0AE0; [6A 30, 05, 05] +06D0; [66 6B, 05, 05] +FBE6; [66 6B, 05, 2D] +FBE7; [66 6B, 05, 2F] +FBE5; [66 6B, 05, 31] +FBE4; [66 6B, 05, 33] -0A8C; [6A 32, 05, 05] +06D1; [66 6D, 05, 05] -0AE1; [6A 34, 05, 05] +06D2; [66 6F, 05, 05] +FBAF; [66 6F, 05, 31] +FBAE; [66 6F, 05, 33] +06D3; [66 6F, 05, 05][, D6 85, 05] +FBB1; [66 6F, 05, 31][, D6 85, 31] +FBB0; [66 6F, 05, 33][, D6 85, 33] -0A8D; [6A 36, 05, 05] +0710; [67 20, 05, 05] -0A8F; [6A 38, 05, 05] +0712; [67 22, 05, 05] +072D; [67 22, 05, 09][, E4 6D, 09] -0A90; [6A 3A, 05, 05] +0713; [67 24, 05, 05] +0714; [67 24, 05, 09][, E4 5D, 09] +072E; [67 24, 05, 09][, E4 6D, 09] -0A91; [6A 3C, 05, 05] +0716; [67 26, 05, 05] -0A93; [6A 3E, 05, 05] +0715; [67 28, 05, 05] +072F; [67 28, 05, 09][, E4 6D, 09] -0A94; [6A 40, 05, 05] +0717; [67 2A, 05, 05] -0A95; [6A 42, 05, 05] +0718; [67 2C, 05, 05] -0A96; [6A 44, 05, 05] +0719; [67 2E, 05, 05] -0A97; [6A 46, 05, 05] +074D; [67 30, 05, 05] -0A98; [6A 48, 05, 05] +071A; [67 32, 05, 05] -0A99; [6A 4A, 05, 05] +071B; [67 34, 05, 05] +071C; [67 34, 05, 09][, E4 5D, 09] -0A9A; [6A 4C, 05, 05] +071D; [67 36, 05, 05] -0A9B; [6A 4E, 05, 05] +071E; [67 38, 05, 05] -0A9C; [6A 50, 05, 05] +071F; [67 3A, 05, 05] -0A9D; [6A 52, 05, 05] +074E; [67 3C, 05, 05] -0A9E; [6A 54, 05, 05] +0720; [67 3E, 05, 05] -0A9F; [6A 56, 05, 05] +0721; [67 40, 05, 05] -0AA0; [6A 58, 05, 05] +0722; [67 42, 05, 05] -0AA1; [6A 5A, 05, 05] +0723; [67 44, 05, 05] +0724; [67 44, 05, 31] -0AA2; [6A 5C, 05, 05] +0725; [67 46, 05, 05] -0AA3; [6A 5E, 05, 05] +0726; [67 48, 05, 05] +0727; [67 48, 05, 09][, E4 5D, 09] -0AA4; [6A 60, 05, 05] +074F; [67 4A, 05, 05] -0AA5; [6A 62, 05, 05] +0728; [67 4C, 05, 05] -0AA6; [6A 64, 05, 05] +0729; [67 4E, 05, 05] -0AA7; [6A 66, 05, 05] +072A; [67 50, 05, 05] -0AA8; [6A 68, 05, 05] +072B; [67 52, 05, 05] -0AAA; [6A 6A, 05, 05] +072C; [67 54, 05, 05] -0AAB; [6A 6C, 05, 05] +0780; [68 20, 05, 05] -0AAC; [6A 6E, 05, 05] +0799; [68 22, 05, 05] -0AAD; [6A 70, 05, 05] +079A; [68 24, 05, 05] -0AAE; [6A 72, 05, 05] +0781; [68 26, 05, 05] -0AAF; [6A 74, 05, 05] +0782; [68 28, 05, 05] -0AB0; [6A 76, 05, 05] +0783; [68 2A, 05, 05] -0AB2; [6A 78, 05, 05] +079C; [68 2C, 05, 05] -0AB3; [6A 7A, 05, 05] +0784; [68 2E, 05, 05] -0AB5; [6A 7C, 05, 05] +0785; [68 30, 05, 05] -0AB6; [6A 7E, 05, 05] +0786; [68 32, 05, 05] -0AB7; [6A 80, 05, 05] +0787; [68 34, 05, 05] -0AB8; [6A 82, 05, 05] +07A2; [68 36, 05, 05] -0AB9; [6A 84, 05, 05] +07A3; [68 38, 05, 05] -0ABD; [6A 86, 05, 05] +0788; [68 3A, 05, 05] -0ABE; [6A 88, 05, 05] +07A5; [68 3C, 05, 05] -0ABF; [6A 8A, 05, 05] +0789; [68 3E, 05, 05] -0AC0; [6A 8C, 05, 05] +078A; [68 40, 05, 05] -0AC1; [6A 8E, 05, 05] +078B; [68 42, 05, 05] -0AC2; [6A 90, 05, 05] +079B; [68 44, 05, 05] -0AC3; [6A 92, 05, 05] +078C; [68 46, 05, 05] -0AC4; [6A 94, 05, 05] +0798; [68 48, 05, 05] -0AE2; [6A 96, 05, 05] +07A0; [68 4A, 05, 05] -0AE3; [6A 98, 05, 05] +07A1; [68 4C, 05, 05] -0AC5; [6A 9A, 05, 05] +078D; [68 4E, 05, 05] -0AC7; [6A 9C, 05, 05] +078E; [68 50, 05, 05] -0AC8; [6A 9E, 05, 05] +07A4; [68 52, 05, 05] -0AC9; [6A A0, 05, 05] +078F; [68 54, 05, 05] -0ACB; [6A A2, 05, 05] +0790; [68 56, 05, 05] -0ACC; [6A A4, 05, 05] +079D; [68 58, 05, 05] -0ACD; [6A A6, 05, 05] +079E; [68 5A, 05, 05] -0B05; [6B 20, 05, 05] +079F; [68 5C, 05, 05] -0B06; [6B 22, 05, 05] +0791; [68 5E, 05, 05] -0B07; [6B 24, 05, 05] +0792; [68 60, 05, 05] -0B08; [6B 26, 05, 05] +0793; [68 62, 05, 05] -0B09; [6B 28, 05, 05] +0794; [68 64, 05, 05] -0B0A; [6B 2A, 05, 05] +0795; [68 66, 05, 05] -0B0B; [6B 2C, 05, 05] +0796; [68 68, 05, 05] -0B60; [6B 2E, 05, 05] +0797; [68 6A, 05, 05] -0B0C; [6B 30, 05, 05] +07B1; [68 6C, 05, 05] -0B61; [6B 32, 05, 05] +07A6; [68 6E, 05, 05] -0B0F; [6B 34, 05, 05] +07A7; [68 70, 05, 05] -0B10; [6B 36, 05, 05] +07A8; [68 72, 05, 05] -0B13; [6B 38, 05, 05] +07A9; [68 74, 05, 05] -0B14; [6B 3A, 05, 05] +07AA; [68 76, 05, 05] -0B15; [6B 3C, 05, 05] +07AB; [68 78, 05, 05] -0B16; [6B 3E, 05, 05] +07AC; [68 7A, 05, 05] -0B17; [6B 40, 05, 05] +07AD; [68 7C, 05, 05] -0B18; [6B 42, 05, 05] +07AE; [68 7E, 05, 05] -0B19; [6B 44, 05, 05] +07AF; [68 80, 05, 05] -0B1A; [6B 46, 05, 05] +07B0; [68 82, 05, 05] -0B1B; [6B 48, 05, 05] +07CA; [69 20, 05, 05] -0B1C; [6B 4A, 05, 05] +07CB; [69 22, 05, 05] -0B1D; [6B 4C, 05, 05] +07CC; [69 24, 05, 05] -0B1E; [6B 4E, 05, 05] +07CD; [69 26, 05, 05] -0B1F; [6B 50, 05, 05] +07CE; [69 28, 05, 05] -0B20; [6B 52, 05, 05] +07CF; [69 2A, 05, 05] -0B21; [6B 54, 05, 05] -0B5C; [6B 54, 05, 05][, D8 CD, 05] +07D0; [69 2C, 05, 05] -0B22; [6B 56, 05, 05] -0B5D; [6B 56, 05, 05][, D8 CD, 05] +07D1; [69 2E, 05, 05] -0B23; [6B 58, 05, 05] +07D2; [69 30, 05, 05] -0B24; [6B 5A, 05, 05] +07D3; [69 32, 05, 05] -0B25; [6B 5C, 05, 05] +07D4; [69 34, 05, 05] -0B26; [6B 5E, 05, 05] +07D5; [69 36, 05, 05] -0B27; [6B 60, 05, 05] +07D6; [69 38, 05, 05] +07E8; [69 38, 05, 09][, E4 4D, 09] -0B28; [6B 62, 05, 05] +07D7; [69 3A, 05, 05] +07E9; [69 3A, 05, 09][, E4 4D, 09] -0B2A; [6B 64, 05, 05] +07D8; [69 3C, 05, 05] -0B2B; [6B 66, 05, 05] +07D9; [69 3E, 05, 05] +07EA; [69 3E, 05, 09][, E4 4D, 09] -0B2C; [6B 68, 05, 05] +07DA; [69 40, 05, 05] -0B2D; [6B 6A, 05, 05] +07DB; [69 42, 05, 05] -0B2E; [6B 6C, 05, 05] +07DC; [69 44, 05, 05] -0B2F; [6B 6E, 05, 05] +07DD; [69 46, 05, 05] -0B5F; [6B 70, 05, 05] +07DE; [69 48, 05, 05] -0B30; [6B 72, 05, 05] +07DF; [69 4A, 05, 05] -0B32; [6B 74, 05, 05] +07E0; [69 4C, 05, 05] -0B33; [6B 76, 05, 05] +07E1; [69 4E, 05, 05] -0B35; [6B 78, 05, 05] +07E2; [69 50, 05, 05] -0B71; [6B 7A, 05, 05] +07E3; [69 52, 05, 05] -0B36; [6B 7C, 05, 05] +07E4; [69 54, 05, 05] -0B37; [6B 7E, 05, 05] +07E5; [69 56, 05, 05] -0B38; [6B 80, 05, 05] +07E6; [69 58, 05, 05] -0B39; [6B 82, 05, 05] +07E7; [69 5A, 05, 05] -0B3D; [6B 84, 05, 05] +07F4; [69 5C, 05, 05] -0B3E; [6B 86, 05, 05] +07F5; [69 5E, 05, 05] -0B3F; [6B 88, 05, 05] +2D30; [6A 20, 05, 05] -0B40; [6B 8A, 05, 05] +2D31; [6A 22, 05, 05] -0B41; [6B 8C, 05, 05] +2D32; [6A 24, 05, 05] -0B42; [6B 8E, 05, 05] +2D33; [6A 26, 05, 05] -0B43; [6B 90, 05, 05] +2D34; [6A 28, 05, 05] -0B47; [6B 92, 05, 05] +2D35; [6A 2A, 05, 05] -0B47 0B56; [6B 94, 05, 05] -0B48; [6B 94, 05, 05] +2D36; [6A 2C, 05, 05] -0B47 0B3E; [6B 96, 05, 05] -0B4B; [6B 96, 05, 05] +2D37; [6A 2E, 05, 05] -0B47 0B57; [6B 98, 05, 05] -0B4C; [6B 98, 05, 05] +2D38; [6A 30, 05, 05] -0B4D; [6B 9A, 05, 05] +2D39; [6A 32, 05, 05] -0B56; [6B 9C, 05, 05] +2D3A; [6A 34, 05, 05] -0B57; [6B 9E, 05, 05] +2D3B; [6A 36, 05, 05] -0B83; [6C 20, 05, 05] +2D3C; [6A 38, 05, 05] -0B85; [6C 22, 05, 05] +2D3D; [6A 3A, 05, 05] -0B86; [6C 24, 05, 05] +2D3E; [6A 3C, 05, 05] -0B87; [6C 26, 05, 05] +2D3F; [6A 3E, 05, 05] -0B88; [6C 28, 05, 05] +2D40; [6A 40, 05, 05] -0B89; [6C 2A, 05, 05] +2D41; [6A 42, 05, 05] -0B8A; [6C 2C, 05, 05] +2D42; [6A 44, 05, 05] -0B8E; [6C 2E, 05, 05] +2D43; [6A 46, 05, 05] -0B8F; [6C 30, 05, 05] +2D44; [6A 48, 05, 05] -0B90; [6C 32, 05, 05] +2D45; [6A 4A, 05, 05] -0B92; [6C 34, 05, 05] +2D46; [6A 4C, 05, 05] -0B93; [6C 36, 05, 05] +2D47; [6A 4E, 05, 05] -0B92 0BD7; [6C 38, 05, 05] -0B94; [6C 38, 05, 05] +2D48; [6A 50, 05, 05] -0B95; [6C 3A, 05, 05] +2D49; [6A 52, 05, 05] -0B99; [6C 3C, 05, 05] +2D4A; [6A 54, 05, 05] -0B9A; [6C 3E, 05, 05] +2D4B; [6A 56, 05, 05] -0B9C; [6C 40, 05, 05] +2D4C; [6A 58, 05, 05] -0B9E; [6C 42, 05, 05] +2D4D; [6A 5A, 05, 05] -0B9F; [6C 44, 05, 05] +2D4E; [6A 5C, 05, 05] -0BA3; [6C 46, 05, 05] +2D4F; [6A 5E, 05, 05] -0BA4; [6C 48, 05, 05] +2D50; [6A 60, 05, 05] -0BA8; [6C 4A, 05, 05] +2D51; [6A 62, 05, 05] -0BA9; [6C 4C, 05, 05] +2D52; [6A 64, 05, 05] -0BAA; [6C 4E, 05, 05] +2D53; [6A 66, 05, 05] -0BAE; [6C 50, 05, 05] +2D54; [6A 68, 05, 05] -0BAF; [6C 52, 05, 05] +2D55; [6A 6A, 05, 05] -0BB0; [6C 54, 05, 05] +2D56; [6A 6C, 05, 05] -0BB1; [6C 56, 05, 05] +2D57; [6A 6E, 05, 05] -0BB2; [6C 58, 05, 05] +2D58; [6A 70, 05, 05] -0BB3; [6C 5A, 05, 05] +2D59; [6A 72, 05, 05] -0BB4; [6C 5C, 05, 05] +2D5A; [6A 74, 05, 05] -0BB5; [6C 5E, 05, 05] +2D5B; [6A 76, 05, 05] -0BB7; [6C 60, 05, 05] +2D5C; [6A 78, 05, 05] -0BB8; [6C 62, 05, 05] +2D5D; [6A 7A, 05, 05] -0BB9; [6C 64, 05, 05] +2D5E; [6A 7C, 05, 05] -0BBE; [6C 66, 05, 05] +2D5F; [6A 7E, 05, 05] -0BBF; [6C 68, 05, 05] +2D60; [6A 80, 05, 05] -0BC0; [6C 6A, 05, 05] +2D61; [6A 82, 05, 05] -0BC1; [6C 6C, 05, 05] +2D62; [6A 84, 05, 05] -0BC2; [6C 6E, 05, 05] +2D63; [6A 86, 05, 05] -0BC6; [6C 70, 05, 05] +2D64; [6A 88, 05, 05] -0BC7; [6C 72, 05, 05] +2D65; [6A 8A, 05, 05] -0BC8; [6C 74, 05, 05] +2D6F; [6A 8C, 05, 05] -0BC6 0BBE; [6C 76, 05, 05] -0BCA; [6C 76, 05, 05] +1200; [6B 20, 05, 05] -0BC7 0BBE; [6C 78, 05, 05] -0BCB; [6C 78, 05, 05] +1201; [6B 22, 05, 05] -0BC6 0BD7; [6C 7A, 05, 05] -0BCC; [6C 7A, 05, 05] +1202; [6B 24, 05, 05] -0BCD; [6C 7C, 05, 05] +1203; [6B 26, 05, 05] -0BD7; [6C 7E, 05, 05] +1204; [6B 28, 05, 05] -0C05; [6D 20, 05, 05] +1205; [6B 2A, 05, 05] -0C06; [6D 22, 05, 05] +1206; [6B 2C, 05, 05] -0C07; [6D 24, 05, 05] +1207; [6B 2E, 05, 05] -0C08; [6D 26, 05, 05] +1208; [6B 30, 05, 05] -0C09; [6D 28, 05, 05] +1209; [6B 32, 05, 05] -0C0A; [6D 2A, 05, 05] +120A; [6B 34, 05, 05] -0C0B; [6D 2C, 05, 05] +120B; [6B 36, 05, 05] -0C60; [6D 2E, 05, 05] +120C; [6B 38, 05, 05] -0C0C; [6D 30, 05, 05] +120D; [6B 3A, 05, 05] -0C61; [6D 32, 05, 05] +120E; [6B 3C, 05, 05] -0C0E; [6D 34, 05, 05] +120F; [6B 3E, 05, 05] -0C0F; [6D 36, 05, 05] +2D80; [6B 40, 05, 05] -0C10; [6D 38, 05, 05] +1210; [6B 42, 05, 05] -0C12; [6D 3A, 05, 05] +1211; [6B 44, 05, 05] -0C13; [6D 3C, 05, 05] +1212; [6B 46, 05, 05] -0C14; [6D 3E, 05, 05] +1213; [6B 48, 05, 05] -0C15; [6D 40, 05, 05] +1214; [6B 4A, 05, 05] -0C16; [6D 42, 05, 05] +1215; [6B 4C, 05, 05] -0C17; [6D 44, 05, 05] +1216; [6B 4E, 05, 05] -0C18; [6D 46, 05, 05] +1217; [6B 50, 05, 05] -0C19; [6D 48, 05, 05] +1218; [6B 52, 05, 05] -0C1A; [6D 4A, 05, 05] +1219; [6B 54, 05, 05] -0C1B; [6D 4C, 05, 05] +121A; [6B 56, 05, 05] -0C1C; [6D 4E, 05, 05] +121B; [6B 58, 05, 05] -0C1D; [6D 50, 05, 05] +121C; [6B 5A, 05, 05] -0C1E; [6D 52, 05, 05] +121D; [6B 5C, 05, 05] -0C1F; [6D 54, 05, 05] +121E; [6B 5E, 05, 05] -0C20; [6D 56, 05, 05] +121F; [6B 60, 05, 05] -0C21; [6D 58, 05, 05] +1380; [6B 62, 05, 05] -0C22; [6D 5A, 05, 05] +1381; [6B 64, 05, 05] -0C23; [6D 5C, 05, 05] +1382; [6B 66, 05, 05] -0C24; [6D 5E, 05, 05] +1383; [6B 68, 05, 05] -0C25; [6D 60, 05, 05] +2D81; [6B 6A, 05, 05] -0C26; [6D 62, 05, 05] +1220; [6B 6C, 05, 05] -0C27; [6D 64, 05, 05] +1221; [6B 6E, 05, 05] -0C28; [6D 66, 05, 05] +1222; [6B 70, 05, 05] -0C2A; [6D 68, 05, 05] +1223; [6B 72, 05, 05] -0C2B; [6D 6A, 05, 05] +1224; [6B 74, 05, 05] -0C2C; [6D 6C, 05, 05] +1225; [6B 76, 05, 05] -0C2D; [6D 6E, 05, 05] +1226; [6B 78, 05, 05] -0C2E; [6D 70, 05, 05] +1227; [6B 7A, 05, 05] -0C2F; [6D 72, 05, 05] +1228; [6B 7C, 05, 05] -0C30; [6D 74, 05, 05] +1229; [6B 7E, 05, 05] -0C31; [6D 76, 05, 05] +122A; [6B 80, 05, 05] -0C32; [6D 78, 05, 05] +122B; [6B 82, 05, 05] -0C33; [6D 7A, 05, 05] +122C; [6B 84, 05, 05] -0C35; [6D 7C, 05, 05] +122D; [6B 86, 05, 05] -0C36; [6D 7E, 05, 05] +122E; [6B 88, 05, 05] -0C37; [6D 80, 05, 05] +122F; [6B 8A, 05, 05] -0C38; [6D 82, 05, 05] +2D82; [6B 8C, 05, 05] -0C39; [6D 84, 05, 05] +1230; [6B 8E, 05, 05] -0C3E; [6D 86, 05, 05] +1231; [6B 90, 05, 05] -0C3F; [6D 88, 05, 05] +1232; [6B 92, 05, 05] -0C40; [6D 8A, 05, 05] +1233; [6B 94, 05, 05] -0C41; [6D 8C, 05, 05] +1234; [6B 96, 05, 05] -0C42; [6D 8E, 05, 05] +1235; [6B 98, 05, 05] -0C43; [6D 90, 05, 05] +1236; [6B 9A, 05, 05] -0C44; [6D 92, 05, 05] +1237; [6B 9C, 05, 05] -0C46; [6D 94, 05, 05] +2D83; [6B 9E, 05, 05] -0C47; [6D 96, 05, 05] +1238; [6B A0, 05, 05] -0C46 0C56; [6D 98, 05, 05] -0C48; [6D 98, 05, 05] +1239; [6B A2, 05, 05] -0C4A; [6D 9A, 05, 05] +123A; [6B A4, 05, 05] -0C4B; [6D 9C, 05, 05] +123B; [6B A6, 05, 05] -0C4C; [6D 9E, 05, 05] +123C; [6B A8, 05, 05] -0C4D; [6D A0, 05, 05] +123D; [6B AA, 05, 05] -0C55; [6D A2, 05, 05] +123E; [6B AC, 05, 05] -0C56; [6D A4, 05, 05] +123F; [6B AE, 05, 05] -0C85; [6E 20, 05, 05] +2D84; [6B B0, 05, 05] -0C86; [6E 22, 05, 05] +1240; [6B B2, 05, 05] -0C87; [6E 24, 05, 05] +1241; [6B B4, 05, 05] -0C88; [6E 26, 05, 05] +1242; [6B B6, 05, 05] -0C89; [6E 28, 05, 05] +1243; [6B B8, 05, 05] -0C8A; [6E 2A, 05, 05] +1244; [6B BA, 05, 05] -0C8B; [6E 2C, 05, 05] +1245; [6B BC, 05, 05] -0CE0; [6E 2E, 05, 05] +1246; [6B BE, 05, 05] -0C8C; [6E 30, 05, 05] +1247; [6B C0, 05, 05] -0CE1; [6E 32, 05, 05] +1248; [6B C2, 05, 05] -0C8E; [6E 34, 05, 05] +124A; [6B C4, 05, 05] -0C8F; [6E 36, 05, 05] +124B; [6B C6, 05, 05] -0C90; [6E 38, 05, 05] +124C; [6B C8, 05, 05] -0C92; [6E 3A, 05, 05] +124D; [6B CA, 05, 05] -0C93; [6E 3C, 05, 05] +1250; [6B CC, 05, 05] -0C94; [6E 3E, 05, 05] +1251; [6B CE, 05, 05] -0C95; [6E 40, 05, 05] +1252; [6B D0, 05, 05] -0C96; [6E 42, 05, 05] +1253; [6B D2, 05, 05] -0C97; [6E 44, 05, 05] +1254; [6B D4, 05, 05] -0C98; [6E 46, 05, 05] +1255; [6B D6, 05, 05] -0C99; [6E 48, 05, 05] +1256; [6B D8, 05, 05] -0C9A; [6E 4A, 05, 05] +1258; [6B DA, 05, 05] -0C9B; [6E 4C, 05, 05] +125A; [6B DC, 05, 05] -0C9C; [6E 4E, 05, 05] +125B; [6B DE, 05, 05] -0C9D; [6E 50, 05, 05] +125C; [6B E0, 05, 05] -0C9E; [6E 52, 05, 05] +125D; [6B E2, 05, 05] -0C9F; [6E 54, 05, 05] +1260; [6B E4, 05, 05] -0CA0; [6E 56, 05, 05] +1261; [6B E6, 05, 05] -0CA1; [6E 58, 05, 05] +1262; [6B E8, 05, 05] -0CA2; [6E 5A, 05, 05] +1263; [6B EA, 05, 05] -0CA3; [6E 5C, 05, 05] +1264; [6B EC, 05, 05] -0CA4; [6E 5E, 05, 05] +1265; [6B EE, 05, 05] -0CA5; [6E 60, 05, 05] +1266; [6B F0, 05, 05] -0CA6; [6E 62, 05, 05] +1267; [6B F2, 05, 05] -0CA7; [6E 64, 05, 05] +1384; [6B F4, 05, 05] -0CA8; [6E 66, 05, 05] +1385; [6B F6, 05, 05] -0CAA; [6E 68, 05, 05] +1386; [6B F8, 05, 05] -0CAB; [6E 6A, 05, 05] +1387; [6B FA, 05, 05] -0CAC; [6E 6C, 05, 05] +2D85; [6B FC, 05, 05] -0CAD; [6E 6E, 05, 05] +1268; [6B FE, 05, 05] -0CAE; [6E 70, 05, 05] +1269; [6C 05, 05, 05] -0CAF; [6E 72, 05, 05] +126A; [6C 07, 05, 05] -0CB0; [6E 74, 05, 05] +126B; [6C 09, 05, 05] -0CB1; [6E 76, 05, 05] +126C; [6C 0B, 05, 05] -0CB2; [6E 78, 05, 05] +126D; [6C 0D, 05, 05] -0CB5; [6E 7A, 05, 05] +126E; [6C 0F, 05, 05] -0CB6; [6E 7C, 05, 05] +126F; [6C 11, 05, 05] -0CB7; [6E 7E, 05, 05] +1270; [6C 13, 05, 05] -0CB8; [6E 80, 05, 05] +1271; [6C 15, 05, 05] -0CB9; [6E 82, 05, 05] +1272; [6C 17, 05, 05] -0CBD; [6E 84, 05, 05] +1273; [6C 19, 05, 05] -0CB3; [6E 86, 05, 05] +1274; [6C 1B, 05, 05] -0CDE; [6E 88, 05, 05] +1275; [6C 1D, 05, 05] -0CBE; [6E 8A, 05, 05] +1276; [6C 1F, 05, 05] -0CBF; [6E 8C, 05, 05] +1277; [6C 21, 05, 05] -0CBF 0CD5; [6E 8E, 05, 05] -0CC0; [6E 8E, 05, 05] +2D86; [6C 23, 05, 05] -0CC1; [6E 90, 05, 05] +1278; [6C 25, 05, 05] -0CC2; [6E 92, 05, 05] +1279; [6C 27, 05, 05] -0CC3; [6E 94, 05, 05] +127A; [6C 29, 05, 05] -0CC4; [6E 96, 05, 05] +127B; [6C 2B, 05, 05] -0CC6; [6E 98, 05, 05] +127C; [6C 2D, 05, 05] -0CC6 0CD5; [6E 9A, 05, 05] -0CC7; [6E 9A, 05, 05] +127D; [6C 2F, 05, 05] -0CC6 0CD6; [6E 9C, 05, 05] -0CC8; [6E 9C, 05, 05] +127E; [6C 31, 05, 05] -0CC6 0CC2; [6E 9E, 05, 05] -0CCA; [6E 9E, 05, 05] +127F; [6C 33, 05, 05] -0CC6 0CC2 0CD5; [6E A0, 05, 05] -0CCA 0CD5; [6E A0, 05, 05] -0CCB; [6E A0, 05, 05] +2D87; [6C 35, 05, 05] -0CCC; [6E A2, 05, 05] +1280; [6C 37, 05, 05] -0CCD; [6E A4, 05, 05] +1281; [6C 39, 05, 05] -0CD5; [6E A6, 05, 05] +1282; [6C 3B, 05, 05] -0CD6; [6E A8, 05, 05] +1283; [6C 3D, 05, 05] -0D05; [6F 20, 05, 05] +1284; [6C 3F, 05, 05] -0D06; [6F 22, 05, 05] +1285; [6C 41, 05, 05] -0D07; [6F 24, 05, 05] +1286; [6C 43, 05, 05] -0D08; [6F 26, 05, 05] +1287; [6C 45, 05, 05] -0D09; [6F 28, 05, 05] +1288; [6C 47, 05, 05] -0D0A; [6F 2A, 05, 05] +128A; [6C 49, 05, 05] -0D0B; [6F 2C, 05, 05] +128B; [6C 4B, 05, 05] -0D60; [6F 2E, 05, 05] +128C; [6C 4D, 05, 05] -0D0C; [6F 30, 05, 05] +128D; [6C 4F, 05, 05] -0D61; [6F 32, 05, 05] +1290; [6C 51, 05, 05] -0D0E; [6F 34, 05, 05] +1291; [6C 53, 05, 05] -0D0F; [6F 36, 05, 05] +1292; [6C 55, 05, 05] -0D10; [6F 38, 05, 05] +1293; [6C 57, 05, 05] -0D12; [6F 3A, 05, 05] +1294; [6C 59, 05, 05] -0D13; [6F 3C, 05, 05] +1295; [6C 5B, 05, 05] -0D14; [6F 3E, 05, 05] +1296; [6C 5D, 05, 05] -0D15; [6F 40, 05, 05] +1297; [6C 5F, 05, 05] -0D16; [6F 42, 05, 05] +2D88; [6C 61, 05, 05] -0D17; [6F 44, 05, 05] +1298; [6C 63, 05, 05] -0D18; [6F 46, 05, 05] +1299; [6C 65, 05, 05] -0D19; [6F 48, 05, 05] +129A; [6C 67, 05, 05] -0D1A; [6F 4A, 05, 05] +129B; [6C 69, 05, 05] -0D1B; [6F 4C, 05, 05] +129C; [6C 6B, 05, 05] -0D1C; [6F 4E, 05, 05] +129D; [6C 6D, 05, 05] -0D1D; [6F 50, 05, 05] +129E; [6C 6F, 05, 05] -0D1E; [6F 52, 05, 05] +129F; [6C 71, 05, 05] -0D1F; [6F 54, 05, 05] +2D89; [6C 73, 05, 05] -0D20; [6F 56, 05, 05] +12A0; [6C 75, 05, 05] -0D21; [6F 58, 05, 05] +12A1; [6C 77, 05, 05] -0D22; [6F 5A, 05, 05] +12A2; [6C 79, 05, 05] -0D23; [6F 5C, 05, 05] +12A3; [6C 7B, 05, 05] -0D24; [6F 5E, 05, 05] +12A4; [6C 7D, 05, 05] -0D25; [6F 60, 05, 05] +12A5; [6C 7F, 05, 05] -0D26; [6F 62, 05, 05] +12A6; [6C 81, 05, 05] -0D27; [6F 64, 05, 05] +12A7; [6C 83, 05, 05] -0D28; [6F 66, 05, 05] +2D8A; [6C 85, 05, 05] -0D2A; [6F 68, 05, 05] +12A8; [6C 87, 05, 05] -0D2B; [6F 6A, 05, 05] +12A9; [6C 89, 05, 05] -0D2C; [6F 6C, 05, 05] +12AA; [6C 8B, 05, 05] -0D2D; [6F 6E, 05, 05] +12AB; [6C 8D, 05, 05] -0D2E; [6F 70, 05, 05] +12AC; [6C 8F, 05, 05] -0D2F; [6F 72, 05, 05] +12AD; [6C 91, 05, 05] -0D30; [6F 74, 05, 05] +12AE; [6C 93, 05, 05] -0D31; [6F 76, 05, 05] +12AF; [6C 95, 05, 05] -0D32; [6F 78, 05, 05] +12B0; [6C 97, 05, 05] -0D33; [6F 7A, 05, 05] +12B2; [6C 99, 05, 05] -0D34; [6F 7C, 05, 05] +12B3; [6C 9B, 05, 05] -0D35; [6F 7E, 05, 05] +12B4; [6C 9D, 05, 05] -0D36; [6F 80, 05, 05] +12B5; [6C 9F, 05, 05] -0D37; [6F 82, 05, 05] +12B8; [6C A1, 05, 05] -0D38; [6F 84, 05, 05] +12B9; [6C A3, 05, 05] -0D39; [6F 86, 05, 05] +12BA; [6C A5, 05, 05] -0D3E; [6F 88, 05, 05] +12BB; [6C A7, 05, 05] -0D3F; [6F 8A, 05, 05] +12BC; [6C A9, 05, 05] -0D40; [6F 8C, 05, 05] +12BD; [6C AB, 05, 05] -0D41; [6F 8E, 05, 05] +12BE; [6C AD, 05, 05] -0D42; [6F 90, 05, 05] +12C0; [6C AF, 05, 05] -0D43; [6F 92, 05, 05] +12C2; [6C B1, 05, 05] -0D46; [6F 94, 05, 05] +12C3; [6C B3, 05, 05] -0D47; [6F 96, 05, 05] +12C4; [6C B5, 05, 05] -0D48; [6F 98, 05, 05] +12C5; [6C B7, 05, 05] -0D46 0D3E; [6F 9A, 05, 05] -0D4A; [6F 9A, 05, 05] +12C8; [6C B9, 05, 05] -0D47 0D3E; [6F 9C, 05, 05] -0D4B; [6F 9C, 05, 05] +12C9; [6C BB, 05, 05] -0D46 0D57; [6F 9E, 05, 05] -0D4C; [6F 9E, 05, 05] +12CA; [6C BD, 05, 05] -0D4D; [6F A0, 05, 05] +12CB; [6C BF, 05, 05] -0D57; [6F A2, 05, 05] +12CC; [6C C1, 05, 05] -0D85; [70 20, 05, 05] +12CD; [6C C3, 05, 05] -0D86; [70 22, 05, 05] +12CE; [6C C5, 05, 05] -0D87; [70 24, 05, 05] +12CF; [6C C7, 05, 05] -0D88; [70 26, 05, 05] +12D0; [6C C9, 05, 05] -0D89; [70 28, 05, 05] +12D1; [6C CB, 05, 05] -0D8A; [70 2A, 05, 05] +12D2; [6C CD, 05, 05] -0D8B; [70 2C, 05, 05] +12D3; [6C CF, 05, 05] -0D8C; [70 2E, 05, 05] +12D4; [6C D1, 05, 05] -0D8D; [70 30, 05, 05] +12D5; [6C D3, 05, 05] -0D8E; [70 32, 05, 05] +12D6; [6C D5, 05, 05] -0D8F; [70 34, 05, 05] +12D8; [6C D7, 05, 05] -0D90; [70 36, 05, 05] +12D9; [6C D9, 05, 05] -0D91; [70 38, 05, 05] +12DA; [6C DB, 05, 05] -0D92; [70 3A, 05, 05] +12DB; [6C DD, 05, 05] -0D93; [70 3C, 05, 05] +12DC; [6C DF, 05, 05] -0D94; [70 3E, 05, 05] +12DD; [6C E1, 05, 05] -0D95; [70 40, 05, 05] +12DE; [6C E3, 05, 05] -0D96; [70 42, 05, 05] +12DF; [6C E5, 05, 05] -0D9A; [70 44, 05, 05] +2D8B; [6C E7, 05, 05] -0D9B; [70 46, 05, 05] +12E0; [6C E9, 05, 05] -0D9C; [70 48, 05, 05] +12E1; [6C EB, 05, 05] -0D9D; [70 4A, 05, 05] +12E2; [6C ED, 05, 05] -0D9E; [70 4C, 05, 05] +12E3; [6C EF, 05, 05] -0D9F; [70 4E, 05, 05] +12E4; [6C F1, 05, 05] -0DA0; [70 50, 05, 05] +12E5; [6C F3, 05, 05] -0DA1; [70 52, 05, 05] +12E6; [6C F5, 05, 05] -0DA2; [70 54, 05, 05] +12E7; [6C F7, 05, 05] -0DA3; [70 56, 05, 05] +12E8; [6C F9, 05, 05] -0DA4; [70 58, 05, 05] +12E9; [6C FB, 05, 05] -0DA5; [70 5A, 05, 05] +12EA; [6C FD, 05, 05] -0DA6; [70 5C, 05, 05] +12EB; [6D 05, 05, 05] -0DA7; [70 5E, 05, 05] +12EC; [6D 07, 05, 05] -0DA8; [70 60, 05, 05] +12ED; [6D 09, 05, 05] -0DA9; [70 62, 05, 05] +12EE; [6D 0B, 05, 05] -0DAA; [70 64, 05, 05] +12EF; [6D 0D, 05, 05] -0DAB; [70 66, 05, 05] +12F0; [6D 0F, 05, 05] -0DAC; [70 68, 05, 05] +12F1; [6D 11, 05, 05] -0DAD; [70 6A, 05, 05] +12F2; [6D 13, 05, 05] -0DAE; [70 6C, 05, 05] +12F3; [6D 15, 05, 05] -0DAF; [70 6E, 05, 05] +12F4; [6D 17, 05, 05] -0DB0; [70 70, 05, 05] +12F5; [6D 19, 05, 05] -0DB1; [70 72, 05, 05] +12F6; [6D 1B, 05, 05] -0DB3; [70 74, 05, 05] +12F7; [6D 1D, 05, 05] -0DB4; [70 76, 05, 05] +2D8C; [6D 1F, 05, 05] -0DB5; [70 78, 05, 05] +12F8; [6D 21, 05, 05] -0DB6; [70 7A, 05, 05] +12F9; [6D 23, 05, 05] -0DB7; [70 7C, 05, 05] +12FA; [6D 25, 05, 05] -0DB8; [70 7E, 05, 05] +12FB; [6D 27, 05, 05] -0DB9; [70 80, 05, 05] +12FC; [6D 29, 05, 05] -0DBA; [70 82, 05, 05] +12FD; [6D 2B, 05, 05] -0DBB; [70 84, 05, 05] +12FE; [6D 2D, 05, 05] -0DBD; [70 86, 05, 05] +12FF; [6D 2F, 05, 05] -0DC0; [70 88, 05, 05] +2D8D; [6D 31, 05, 05] -0DC1; [70 8A, 05, 05] +1300; [6D 33, 05, 05] -0DC2; [70 8C, 05, 05] +1301; [6D 35, 05, 05] -0DC3; [70 8E, 05, 05] +1302; [6D 37, 05, 05] -0DC4; [70 90, 05, 05] +1303; [6D 39, 05, 05] -0DC5; [70 92, 05, 05] +1304; [6D 3B, 05, 05] -0DC6; [70 94, 05, 05] +1305; [6D 3D, 05, 05] -0DCA; [70 96, 05, 05] +1306; [6D 3F, 05, 05] -0DCF; [70 98, 05, 05] +1307; [6D 41, 05, 05] -0DD0; [70 9A, 05, 05] +2D8E; [6D 43, 05, 05] -0DD1; [70 9C, 05, 05] +1308; [6D 45, 05, 05] -0DD2; [70 9E, 05, 05] +1309; [6D 47, 05, 05] -0DD3; [70 A0, 05, 05] +130A; [6D 49, 05, 05] -0DD4; [70 A2, 05, 05] +130B; [6D 4B, 05, 05] -0DD6; [70 A4, 05, 05] +130C; [6D 4D, 05, 05] -0DD8; [70 A6, 05, 05] +130D; [6D 4F, 05, 05] -0DD9; [70 A8, 05, 05] +130E; [6D 51, 05, 05] -0DD9 0DCA; [70 AA, 05, 05] -0DDA; [70 AA, 05, 05] +130F; [6D 53, 05, 05] -0DDB; [70 AC, 05, 05] +1310; [6D 55, 05, 05] -0DD9 0DCF; [70 AE, 05, 05] -0DDC; [70 AE, 05, 05] +1312; [6D 57, 05, 05] -0DD9 0DCF 0DCA; [70 B0, 05, 05] -0DDC 0DCA; [70 B0, 05, 05] -0DDD; [70 B0, 05, 05] +1313; [6D 59, 05, 05] -0DD9 0DDF; [70 B2, 05, 05] -0DDE; [70 B2, 05, 05] +1314; [6D 5B, 05, 05] -0DDF; [70 B4, 05, 05] +1315; [6D 5D, 05, 05] -0DF2; [70 B6, 05, 05] +1318; [6D 5F, 05, 05] -0DF3; [70 B8, 05, 05] +1319; [6D 61, 05, 05] -0E01; [71 20, 05, 05] +131A; [6D 63, 05, 05] -0E02; [71 22, 05, 05] +131B; [6D 65, 05, 05] -0E03; [71 24, 05, 05] +131C; [6D 67, 05, 05] -0E04; [71 26, 05, 05] +131D; [6D 69, 05, 05] -0E05; [71 28, 05, 05] +131E; [6D 6B, 05, 05] -0E06; [71 2A, 05, 05] +131F; [6D 6D, 05, 05] -0E07; [71 2C, 05, 05] +2D93; [6D 6F, 05, 05] -0E08; [71 2E, 05, 05] +2D94; [6D 71, 05, 05] -0E09; [71 30, 05, 05] +2D95; [6D 73, 05, 05] -0E0A; [71 32, 05, 05] +2D96; [6D 75, 05, 05] -0E0B; [71 34, 05, 05] +1320; [6D 77, 05, 05] -0E0C; [71 36, 05, 05] +1321; [6D 79, 05, 05] -0E0D; [71 38, 05, 05] +1322; [6D 7B, 05, 05] -0E0E; [71 3A, 05, 05] +1323; [6D 7D, 05, 05] -0E0F; [71 3C, 05, 05] +1324; [6D 7F, 05, 05] -0E10; [71 3E, 05, 05] +1325; [6D 81, 05, 05] -0E11; [71 40, 05, 05] +1326; [6D 83, 05, 05] -0E12; [71 42, 05, 05] +1327; [6D 85, 05, 05] -0E13; [71 44, 05, 05] +2D8F; [6D 87, 05, 05] -0E14; [71 46, 05, 05] +1328; [6D 89, 05, 05] -0E15; [71 48, 05, 05] +1329; [6D 8B, 05, 05] -0E16; [71 4A, 05, 05] +132A; [6D 8D, 05, 05] -0E17; [71 4C, 05, 05] +132B; [6D 8F, 05, 05] -0E18; [71 4E, 05, 05] +132C; [6D 91, 05, 05] -0E19; [71 50, 05, 05] +132D; [6D 93, 05, 05] -0E1A; [71 52, 05, 05] +132E; [6D 95, 05, 05] -0E1B; [71 54, 05, 05] +132F; [6D 97, 05, 05] -0E1C; [71 56, 05, 05] +2D90; [6D 99, 05, 05] -0E1D; [71 58, 05, 05] +1330; [6D 9B, 05, 05] -0E1E; [71 5A, 05, 05] +1331; [6D 9D, 05, 05] -0E1F; [71 5C, 05, 05] +1332; [6D 9F, 05, 05] -0E20; [71 5E, 05, 05] +1333; [6D A1, 05, 05] -0E21; [71 60, 05, 05] +1334; [6D A3, 05, 05] -0E22; [71 62, 05, 05] +1335; [6D A5, 05, 05] -0E23; [71 64, 05, 05] +1336; [6D A7, 05, 05] -0E24; [71 66, 05, 05] +1337; [6D A9, 05, 05] -0E25; [71 68, 05, 05] +2D91; [6D AB, 05, 05] -0E26; [71 6A, 05, 05] +1338; [6D AD, 05, 05] -0E27; [71 6C, 05, 05] +1339; [6D AF, 05, 05] -0E28; [71 6E, 05, 05] +133A; [6D B1, 05, 05] -0E29; [71 70, 05, 05] +133B; [6D B3, 05, 05] -0E2A; [71 72, 05, 05] +133C; [6D B5, 05, 05] -0E2B; [71 74, 05, 05] +133D; [6D B7, 05, 05] -0E2C; [71 76, 05, 05] +133E; [6D B9, 05, 05] -0E2D; [71 78, 05, 05] +133F; [6D BB, 05, 05] -0E2E; [71 7A, 05, 05] +1340; [6D BD, 05, 05] -0E2F; [71 7C, 05, 05] +1341; [6D BF, 05, 05] -0E30; [71 7E, 05, 05] +1342; [6D C1, 05, 05] -0E31; [71 80, 05, 05] +1343; [6D C3, 05, 05] -0E32; [71 82, 05, 05] +1344; [6D C5, 05, 05] -0E33; [71 84, 05, 05] -0E4D 0E32; [71 84, 05, 05] +1345; [6D C7, 05, 05] -0E34; [71 86, 05, 05] +1346; [6D C9, 05, 05] -0E35; [71 88, 05, 05] +1347; [6D CB, 05, 05] -0E36; [71 8A, 05, 05] +1348; [6D CD, 05, 05] -0E37; [71 8C, 05, 05] +1349; [6D CF, 05, 05] -0E38; [71 8E, 05, 05] +134A; [6D D1, 05, 05] -0E39; [71 90, 05, 05] +134B; [6D D3, 05, 05] -0E3A; [71 92, 05, 05] +134C; [6D D5, 05, 05] -0E40; [71 94, 05, 05] +134D; [6D D7, 05, 05] -0E41; [71 96, 05, 05] +134E; [6D D9, 05, 05] -0E42; [71 98, 05, 05] +134F; [6D DB, 05, 05] -0E43; [71 9A, 05, 05] +1388; [6D DD, 05, 05] -0E44; [71 9C, 05, 05] +1389; [6D DF, 05, 05] -0E45; [71 9E, 05, 05] +138A; [6D E1, 05, 05] -0E4C; [71 A0, 05, 05] +138B; [6D E3, 05, 05] -0E4D; [71 A2, 05, 05] +1350; [6D E5, 05, 05] -0E81; [72 20, 05, 05] +1351; [6D E7, 05, 05] -0E82; [72 22, 05, 05] +1352; [6D E9, 05, 05] -0E84; [72 24, 05, 05] +1353; [6D EB, 05, 05] -0E87; [72 26, 05, 05] +1354; [6D ED, 05, 05] -0E88; [72 28, 05, 05] +1355; [6D EF, 05, 05] -0E8A; [72 2A, 05, 05] +1356; [6D F1, 05, 05] -0E8D; [72 2C, 05, 05] +1357; [6D F3, 05, 05] -0E94; [72 2E, 05, 05] +138C; [6D F5, 05, 05] -0E95; [72 30, 05, 05] +138D; [6D F7, 05, 05] -0E96; [72 32, 05, 05] +138E; [6D F9, 05, 05] -0E97; [72 34, 05, 05] +138F; [6D FB, 05, 05] -0E99; [72 36, 05, 05] +2D92; [6D FD, 05, 05] -0E9A; [72 38, 05, 05] +1358; [6E 05, 05, 05] -0E9B; [72 3A, 05, 05] +1359; [6E 07, 05, 05] -0E9C; [72 3C, 05, 05] +135A; [6E 09, 05, 05] -0E9D; [72 3E, 05, 05] +2DA0; [6E 0B, 05, 05] -0E9E; [72 40, 05, 05] +2DA1; [6E 0D, 05, 05] -0E9F; [72 42, 05, 05] +2DA2; [6E 0F, 05, 05] -0EA1; [72 44, 05, 05] +2DA3; [6E 11, 05, 05] -0EA2; [72 46, 05, 05] +2DA4; [6E 13, 05, 05] -0EA3; [72 48, 05, 05] +2DA5; [6E 15, 05, 05] -0EA5; [72 4A, 05, 05] +2DA6; [6E 17, 05, 05] -0EA7; [72 4C, 05, 05] +2DA8; [6E 19, 05, 05] -0EAA; [72 4E, 05, 05] +2DA9; [6E 1B, 05, 05] -0EAB; [72 50, 05, 05] -0EDC; [72 50, 05, 09][72 36, 05, 09] -0EDD; [72 50, 05, 09][72 44, 05, 09] +2DAA; [6E 1D, 05, 05] -0EAD; [72 52, 05, 05] +2DAB; [6E 1F, 05, 05] -0EAE; [72 54, 05, 05] +2DAC; [6E 21, 05, 05] -0EAF; [72 56, 05, 05] +2DAD; [6E 23, 05, 05] -0EB0; [72 58, 05, 05] +2DAE; [6E 25, 05, 05] -0EB1; [72 5A, 05, 05] +2DB0; [6E 27, 05, 05] -0EB2; [72 5C, 05, 05] +2DB1; [6E 29, 05, 05] -0EB3; [72 5E, 05, 05] -0ECD 0EB2; [72 5E, 05, 05] +2DB2; [6E 2B, 05, 05] -0EB4; [72 60, 05, 05] +2DB3; [6E 2D, 05, 05] -0EB5; [72 62, 05, 05] +2DB4; [6E 2F, 05, 05] -0EB6; [72 64, 05, 05] +2DB5; [6E 31, 05, 05] -0EB7; [72 66, 05, 05] +2DB6; [6E 33, 05, 05] -0EB8; [72 68, 05, 05] +2DB8; [6E 35, 05, 05] -0EB9; [72 6A, 05, 05] +2DB9; [6E 37, 05, 05] -0EBB; [72 6C, 05, 05] +2DBA; [6E 39, 05, 05] -0EBC; [72 6E, 05, 05] +2DBB; [6E 3B, 05, 05] -0EBD; [72 70, 05, 05] +2DBC; [6E 3D, 05, 05] -0EC0; [72 72, 05, 05] +2DBD; [6E 3F, 05, 05] -0EC1; [72 74, 05, 05] +2DBE; [6E 41, 05, 05] -0EC2; [72 76, 05, 05] +2DC0; [6E 43, 05, 05] -0EC3; [72 78, 05, 05] +2DC1; [6E 45, 05, 05] -0EC4; [72 7A, 05, 05] +2DC2; [6E 47, 05, 05] -0ECC; [72 7C, 05, 05] +2DC3; [6E 49, 05, 05] -0ECD; [72 7E, 05, 05] +2DC4; [6E 4B, 05, 05] -0F40; [73 20, 05, 05] -0F69; [73 20, 05, 05][73 9E, 05, 05] +2DC5; [6E 4D, 05, 05] -0F90; [73 22, 05, 05] -0FB9; [73 22, 05, 05][73 9E, 05, 05] +2DC6; [6E 4F, 05, 05] -0F41; [73 24, 05, 05] +2DC8; [6E 51, 05, 05] -0F91; [73 26, 05, 05] +2DC9; [6E 53, 05, 05] -0F42; [73 28, 05, 05] -0F43; [73 28, 05, 05][73 A6, 05, 05] +2DCA; [6E 55, 05, 05] -0F92; [73 2A, 05, 05] -0F93; [73 2A, 05, 05][73 A6, 05, 05] +2DCB; [6E 57, 05, 05] -0F44; [73 2C, 05, 05] +2DCC; [6E 59, 05, 05] -0F94; [73 2E, 05, 05] +2DCD; [6E 5B, 05, 05] -0F45; [73 30, 05, 05] +2DCE; [6E 5D, 05, 05] -0F95; [73 32, 05, 05] +2DD0; [6E 5F, 05, 05] -0F46; [73 34, 05, 05] +2DD1; [6E 61, 05, 05] -0F96; [73 36, 05, 05] +2DD2; [6E 63, 05, 05] -0F47; [73 38, 05, 05] +2DD3; [6E 65, 05, 05] -0F97; [73 3A, 05, 05] +2DD4; [6E 67, 05, 05] -0F49; [73 3C, 05, 05] +2DD5; [6E 69, 05, 05] -0F99; [73 3E, 05, 05] +2DD6; [6E 6B, 05, 05] -0F4A; [73 40, 05, 05] +2DD8; [6E 6D, 05, 05] -0F9A; [73 42, 05, 05] +2DD9; [6E 6F, 05, 05] -0F4B; [73 44, 05, 05] +2DDA; [6E 71, 05, 05] -0F9B; [73 46, 05, 05] +2DDB; [6E 73, 05, 05] -0F4C; [73 48, 05, 05] -0F4D; [73 48, 05, 05][73 A6, 05, 05] +2DDC; [6E 75, 05, 05] -0F9C; [73 4A, 05, 05] -0F9D; [73 4A, 05, 05][73 A6, 05, 05] +2DDD; [6E 77, 05, 05] -0F4E; [73 4C, 05, 05] +2DDE; [6E 79, 05, 05] -0F9E; [73 4E, 05, 05] +0950; [6F 20, 05, 05] -0F4F; [73 50, 05, 05] +0904; [6F 22, 05, 05] -0F9F; [73 52, 05, 05] +0905; [6F 24, 05, 05] -0F50; [73 54, 05, 05] +0906; [6F 26, 05, 05] -0FA0; [73 56, 05, 05] +0907; [6F 28, 05, 05] -0F51; [73 58, 05, 05] -0F52; [73 58, 05, 05][73 A6, 05, 05] +0908; [6F 2A, 05, 05] -0FA1; [73 5A, 05, 05] -0FA2; [73 5A, 05, 05][73 A6, 05, 05] +0909; [6F 2C, 05, 05] -0F53; [73 5C, 05, 05] +090A; [6F 2E, 05, 05] -0FA3; [73 5E, 05, 05] +090B; [6F 30, 05, 05] -0F54; [73 60, 05, 05] +0960; [6F 32, 05, 05] -0FA4; [73 62, 05, 05] +090C; [6F 34, 05, 05] -0F55; [73 64, 05, 05] +0961; [6F 36, 05, 05] -0FA5; [73 66, 05, 05] +090D; [6F 38, 05, 05] -0F56; [73 68, 05, 05] -0F57; [73 68, 05, 05][73 A6, 05, 05] +090E; [6F 3A, 05, 05] -0FA6; [73 6A, 05, 05] -0FA7; [73 6A, 05, 05][73 A6, 05, 05] +090F; [6F 3C, 05, 05] -0F58; [73 6C, 05, 05] +0910; [6F 3E, 05, 05] -0FA8; [73 6E, 05, 05] +0911; [6F 40, 05, 05] -0F59; [73 70, 05, 05] +0912; [6F 42, 05, 05] -0FA9; [73 72, 05, 05] +0913; [6F 44, 05, 05] -0F5A; [73 74, 05, 05] +0914; [6F 46, 05, 05] -0FAA; [73 76, 05, 05] +0915; [6F 48, 05, 05] +0958; [6F 48, 05, 05][, D9 A1, 05] -0F5B; [73 78, 05, 05] -0F5C; [73 78, 05, 05][73 A6, 05, 05] +0916; [6F 4A, 05, 05] +0959; [6F 4A, 05, 05][, D9 A1, 05] -0FAB; [73 7A, 05, 05] -0FAC; [73 7A, 05, 05][73 A6, 05, 05] +0917; [6F 4C, 05, 05] +095A; [6F 4C, 05, 05][, D9 A1, 05] -0F5D; [73 7C, 05, 05] +097B; [6F 4E, 05, 05] -0FAD; [73 7E, 05, 05] -0FBA; [73 7E, 05, 09][, E0 9D, 09] +0918; [6F 50, 05, 05] -0F5E; [73 80, 05, 05] +0919; [6F 52, 05, 05] -0FAE; [73 82, 05, 05] +091A; [6F 54, 05, 05] -0F5F; [73 84, 05, 05] +091B; [6F 56, 05, 05] -0FAF; [73 86, 05, 05] +091C; [6F 58, 05, 05] +095B; [6F 58, 05, 05][, D9 A1, 05] -0F60; [73 88, 05, 05] +097C; [6F 5A, 05, 05] -0FB0; [73 8A, 05, 05] +091D; [6F 5C, 05, 05] -0F61; [73 8C, 05, 05] +091E; [6F 5E, 05, 05] -0FB1; [73 8E, 05, 05] -0FBB; [73 8E, 05, 09][, E0 9D, 09] +091F; [6F 60, 05, 05] -0F62; [73 90, 05, 05] -0F6A; [73 90, 05, 09][, E0 9D, 09] +0920; [6F 62, 05, 05] -0FB2; [73 92, 05, 05] -0FBC; [73 92, 05, 09][, E0 9D, 09] -0FB2 0F71; [73 92, 05, 05][73 B4, 05, 05] +0921; [6F 64, 05, 05] +095C; [6F 64, 05, 05][, D9 A1, 05] -0F63; [73 94, 05, 05] +097E; [6F 66, 05, 05] -0FB3; [73 96, 05, 05] -0FB3 0F71; [73 96, 05, 05][73 B4, 05, 05] +0922; [6F 68, 05, 05] +095D; [6F 68, 05, 05][, D9 A1, 05] -0F64; [73 98, 05, 05] +0923; [6F 6A, 05, 05] -0FB4; [73 9A, 05, 05] +0924; [6F 6C, 05, 05] -0F65; [73 9C, 05, 05] +0925; [6F 6E, 05, 05] -0FB5; [73 9E, 05, 05] +0926; [6F 70, 05, 05] -0F66; [73 A0, 05, 05] +0927; [6F 72, 05, 05] -0FB6; [73 A2, 05, 05] +0928; [6F 74, 05, 05] +0929; [6F 74, 05, 05][, D9 A1, 05] -0F67; [73 A4, 05, 05] +092A; [6F 76, 05, 05] -0FB7; [73 A6, 05, 05] +092B; [6F 78, 05, 05] +095E; [6F 78, 05, 05][, D9 A1, 05] -0F68; [73 A8, 05, 05] -0F00; [73 A8, 05, 09][73 CE, 05, 09][, DA 65, 3D] +092C; [6F 7A, 05, 05] -0FB8; [73 AA, 05, 05] +097F; [6F 7C, 05, 05] -0F88; [73 AC, 05, 05] +092D; [6F 7E, 05, 05] -0F89; [73 AE, 05, 05] +092E; [6F 80, 05, 05] -0F8A; [73 B0, 05, 05] +092F; [6F 82, 05, 05] +095F; [6F 82, 05, 05][, D9 A1, 05] -0F8B; [73 B2, 05, 05] +0930; [6F 84, 05, 05] +0931; [6F 84, 05, 05][, D9 A1, 05] -0F71; [73 B4, 05, 05] +0932; [6F 86, 05, 05] -0F72; [73 B6, 05, 05] +0933; [6F 88, 05, 05] +0934; [6F 88, 05, 05][, D9 A1, 05] -0F71 0F72; [73 B8, 05, 05] -0F73; [73 B8, 05, 05] +0935; [6F 8A, 05, 05] -0F80; [73 BA, 05, 05] +0936; [6F 8C, 05, 05] -0F71 0F80; [73 BC, 05, 05] -0F81; [73 BC, 05, 05] +0937; [6F 8E, 05, 05] -0F74; [73 BE, 05, 05] +0938; [6F 90, 05, 05] -0F71 0F74; [73 C0, 05, 05] -0F75; [73 C0, 05, 05] +0939; [6F 92, 05, 05] -0F76; [73 C2, 05, 05] -0FB2 0F80; [73 C2, 05, 05] +093D; [6F 94, 05, 05] -0F77; [73 C4, 05, 05] -0FB2 0F71 0F80; [73 C4, 05, 05] -0FB2 0F81; [73 C4, 05, 05] +097D; [6F 96, 05, 05] -0F78; [73 C6, 05, 05] -0FB3 0F80; [73 C6, 05, 05] +093E; [6F 98, 05, 05] -0F79; [73 C8, 05, 05] -0FB3 0F71 0F80; [73 C8, 05, 05] -0FB3 0F81; [73 C8, 05, 05] +093F; [6F 9A, 05, 05] -0F7A; [73 CA, 05, 05] +0940; [6F 9C, 05, 05] -0F7B; [73 CC, 05, 05] +0941; [6F 9E, 05, 05] -0F7C; [73 CE, 05, 05] +0942; [6F A0, 05, 05] -0F7D; [73 D0, 05, 05] +0943; [6F A2, 05, 05] -0F84; [73 D2, 05, 05] +0944; [6F A4, 05, 05] -1900; [74 20, 05, 05] +0962; [6F A6, 05, 05] -1901; [74 22, 05, 05] +0963; [6F A8, 05, 05] -1902; [74 24, 05, 05] +0945; [6F AA, 05, 05] -1903; [74 26, 05, 05] +0946; [6F AC, 05, 05] -1904; [74 28, 05, 05] +0947; [6F AE, 05, 05] -1905; [74 2A, 05, 05] +0948; [6F B0, 05, 05] -1906; [74 2C, 05, 05] +0949; [6F B2, 05, 05] -1907; [74 2E, 05, 05] +094A; [6F B4, 05, 05] -1908; [74 30, 05, 05] +094B; [6F B6, 05, 05] -1909; [74 32, 05, 05] +094C; [6F B8, 05, 05] -190A; [74 34, 05, 05] +094D; [6F BA, 05, 05] -190B; [74 36, 05, 05] +0985; [70 20, 05, 05] -190C; [74 38, 05, 05] +0986; [70 22, 05, 05] -190D; [74 3A, 05, 05] +0987; [70 24, 05, 05] -190E; [74 3C, 05, 05] +0988; [70 26, 05, 05] -190F; [74 3E, 05, 05] +0989; [70 28, 05, 05] -1910; [74 40, 05, 05] +098A; [70 2A, 05, 05] -1911; [74 42, 05, 05] +098B; [70 2C, 05, 05] -1912; [74 44, 05, 05] +09E0; [70 2E, 05, 05] -1913; [74 46, 05, 05] +098C; [70 30, 05, 05] -1914; [74 48, 05, 05] +09E1; [70 32, 05, 05] -1915; [74 4A, 05, 05] +098F; [70 34, 05, 05] -1916; [74 4C, 05, 05] +0990; [70 36, 05, 05] -1917; [74 4E, 05, 05] +0993; [70 38, 05, 05] -1918; [74 50, 05, 05] +0994; [70 3A, 05, 05] -1919; [74 52, 05, 05] +0995; [70 3C, 05, 05] -191A; [74 54, 05, 05] +0996; [70 3E, 05, 05] -191B; [74 56, 05, 05] +0997; [70 40, 05, 05] -191C; [74 58, 05, 05] +0998; [70 42, 05, 05] -1920; [74 5A, 05, 05] +0999; [70 44, 05, 05] -1921; [74 5C, 05, 05] +099A; [70 46, 05, 05] -1922; [74 5E, 05, 05] +099B; [70 48, 05, 05] -1923; [74 60, 05, 05] +099C; [70 4A, 05, 05] -1924; [74 62, 05, 05] +099D; [70 4C, 05, 05] -1925; [74 64, 05, 05] +099E; [70 4E, 05, 05] -1926; [74 66, 05, 05] +099F; [70 50, 05, 05] -1927; [74 68, 05, 05] +09A0; [70 52, 05, 05] -1928; [74 6A, 05, 05] +09A1; [70 54, 05, 05] +09DC; [70 54, 05, 05][, DA 25, 05] -1929; [74 6C, 05, 05] +09A2; [70 56, 05, 05] +09DD; [70 56, 05, 05][, DA 25, 05] -192A; [74 6E, 05, 05] +09A3; [70 58, 05, 05] -192B; [74 70, 05, 05] +09A4; [70 5A, 05, 05] +09CE; [70 5A, 05, 09][70 9C, 05, 09] -1930; [74 72, 05, 05] +09A5; [70 5C, 05, 05] -1931; [74 74, 05, 05] +09A6; [70 5E, 05, 05] -1932; [74 76, 05, 05] +09A7; [70 60, 05, 05] -1933; [74 78, 05, 05] +09A8; [70 62, 05, 05] -1934; [74 7A, 05, 05] +09AA; [70 64, 05, 05] -1935; [74 7C, 05, 05] +09AB; [70 66, 05, 05] -1936; [74 7E, 05, 05] +09AC; [70 68, 05, 05] -1937; [74 80, 05, 05] +09AD; [70 6A, 05, 05] -1938; [74 82, 05, 05] +09AE; [70 6C, 05, 05] -1700; [75 20, 05, 05] +09AF; [70 6E, 05, 05] +09DF; [70 6E, 05, 05][, DA 25, 05] -1701; [75 22, 05, 05] +09B0; [70 70, 05, 05] -1702; [75 24, 05, 05] +09F0; [70 72, 05, 05] -1703; [75 26, 05, 05] +09B2; [70 74, 05, 05] -1704; [75 28, 05, 05] +09F1; [70 76, 05, 05] -1705; [75 2A, 05, 05] +09B6; [70 78, 05, 05] -1706; [75 2C, 05, 05] +09B7; [70 7A, 05, 05] -1707; [75 2E, 05, 05] +09B8; [70 7C, 05, 05] -1708; [75 30, 05, 05] +09B9; [70 7E, 05, 05] -1709; [75 32, 05, 05] +09BD; [70 80, 05, 05] -170A; [75 34, 05, 05] +09BE; [70 82, 05, 05] -170B; [75 36, 05, 05] +09BF; [70 84, 05, 05] -170C; [75 38, 05, 05] +09C0; [70 86, 05, 05] -170E; [75 3A, 05, 05] +09C1; [70 88, 05, 05] -170F; [75 3C, 05, 05] +09C2; [70 8A, 05, 05] -1710; [75 3E, 05, 05] +09C3; [70 8C, 05, 05] -1711; [75 40, 05, 05] +09C4; [70 8E, 05, 05] -1712; [75 42, 05, 05] +09E2; [70 90, 05, 05] -1713; [75 44, 05, 05] +09E3; [70 92, 05, 05] -1714; [75 46, 05, 05] +09C7; [70 94, 05, 05] -1720; [76 20, 05, 05] +09C8; [70 96, 05, 05] -1721; [76 22, 05, 05] +09C7 09BE; [70 98, 05, 05] +09CB; [70 98, 05, 05] -1722; [76 24, 05, 05] +09C7 09D7; [70 9A, 05, 05] +09CC; [70 9A, 05, 05] -1723; [76 26, 05, 05] +09CD; [70 9C, 05, 05] -1724; [76 28, 05, 05] +09D7; [70 9E, 05, 05] -1725; [76 2A, 05, 05] +0A74; [71 20, 05, 05] -1726; [76 2C, 05, 05] +0A73; [71 22, 05, 05] -1727; [76 2E, 05, 05] +0A09; [71 24, 05, 05] -1728; [76 30, 05, 05] +0A0A; [71 26, 05, 05] -1729; [76 32, 05, 05] +0A13; [71 28, 05, 05] -172A; [76 34, 05, 05] +0A05; [71 2A, 05, 05] -172B; [76 36, 05, 05] +0A06; [71 2C, 05, 05] -172C; [76 38, 05, 05] +0A10; [71 2E, 05, 05] -172D; [76 3A, 05, 05] +0A14; [71 30, 05, 05] -172E; [76 3C, 05, 05] +0A72; [71 32, 05, 05] -172F; [76 3E, 05, 05] +0A07; [71 34, 05, 05] -1730; [76 40, 05, 05] +0A08; [71 36, 05, 05] -1731; [76 42, 05, 05] +0A0F; [71 38, 05, 05] -1732; [76 44, 05, 05] +0A38; [71 3A, 05, 05] +0A36; [71 3A, 05, 05][, DA 65, 05] -1733; [76 46, 05, 05] +0A39; [71 3C, 05, 05] -1734; [76 48, 05, 05] +0A15; [71 3E, 05, 05] -1740; [77 20, 05, 05] +0A16; [71 40, 05, 05] +0A59; [71 40, 05, 05][, DA 65, 05] -1741; [77 22, 05, 05] +0A17; [71 42, 05, 05] +0A5A; [71 42, 05, 05][, DA 65, 05] -1742; [77 24, 05, 05] +0A18; [71 44, 05, 05] -1743; [77 26, 05, 05] +0A19; [71 46, 05, 05] -1744; [77 28, 05, 05] +0A1A; [71 48, 05, 05] -1745; [77 2A, 05, 05] +0A1B; [71 4A, 05, 05] -1746; [77 2C, 05, 05] +0A1C; [71 4C, 05, 05] +0A5B; [71 4C, 05, 05][, DA 65, 05] -1747; [77 2E, 05, 05] +0A1D; [71 4E, 05, 05] -1748; [77 30, 05, 05] +0A1E; [71 50, 05, 05] -1749; [77 32, 05, 05] +0A1F; [71 52, 05, 05] -174A; [77 34, 05, 05] +0A20; [71 54, 05, 05] -174B; [77 36, 05, 05] +0A21; [71 56, 05, 05] -174C; [77 38, 05, 05] +0A22; [71 58, 05, 05] -174D; [77 3A, 05, 05] +0A23; [71 5A, 05, 05] -174E; [77 3C, 05, 05] +0A24; [71 5C, 05, 05] -174F; [77 3E, 05, 05] +0A25; [71 5E, 05, 05] -1750; [77 40, 05, 05] +0A26; [71 60, 05, 05] -1751; [77 42, 05, 05] +0A27; [71 62, 05, 05] -1752; [77 44, 05, 05] +0A28; [71 64, 05, 05] -1753; [77 46, 05, 05] +0A2A; [71 66, 05, 05] -1760; [78 20, 05, 05] +0A2B; [71 68, 05, 05] +0A5E; [71 68, 05, 05][, DA 65, 05] -1761; [78 22, 05, 05] +0A2C; [71 6A, 05, 05] -1762; [78 24, 05, 05] +0A2D; [71 6C, 05, 05] -1763; [78 26, 05, 05] +0A2E; [71 6E, 05, 05] -1764; [78 28, 05, 05] +0A2F; [71 70, 05, 05] -1765; [78 2A, 05, 05] +0A30; [71 72, 05, 05] -1766; [78 2C, 05, 05] +0A32; [71 74, 05, 05] +0A33; [71 74, 05, 05][, DA 65, 05] -1767; [78 2E, 05, 05] +0A35; [71 76, 05, 05] -1768; [78 30, 05, 05] +0A5C; [71 78, 05, 05] -1769; [78 32, 05, 05] +0A3E; [71 7A, 05, 05] -176A; [78 34, 05, 05] +0A3F; [71 7C, 05, 05] -176B; [78 36, 05, 05] +0A40; [71 7E, 05, 05] -176C; [78 38, 05, 05] +0A41; [71 80, 05, 05] -176E; [78 3A, 05, 05] +0A42; [71 82, 05, 05] -176F; [78 3C, 05, 05] +0A47; [71 84, 05, 05] -1770; [78 3E, 05, 05] +0A48; [71 86, 05, 05] -1772; [78 40, 05, 05] +0A4B; [71 88, 05, 05] -1773; [78 42, 05, 05] +0A4C; [71 8A, 05, 05] -1000; [79 20, 05, 05] +0A4D; [71 8C, 05, 05] -1001; [79 22, 05, 05] +0AD0; [72 20, 05, 05] -1002; [79 24, 05, 05] +0A85; [72 22, 05, 05] -1003; [79 26, 05, 05] +0A86; [72 24, 05, 05] -1004; [79 28, 05, 05] +0A87; [72 26, 05, 05] -1005; [79 2A, 05, 05] +0A88; [72 28, 05, 05] -1006; [79 2C, 05, 05] +0A89; [72 2A, 05, 05] -1007; [79 2E, 05, 05] +0A8A; [72 2C, 05, 05] -1008; [79 30, 05, 05] +0A8B; [72 2E, 05, 05] -1009; [79 32, 05, 05] +0AE0; [72 30, 05, 05] -100A; [79 34, 05, 05] +0A8C; [72 32, 05, 05] -100B; [79 36, 05, 05] +0AE1; [72 34, 05, 05] -100C; [79 38, 05, 05] +0A8D; [72 36, 05, 05] -100D; [79 3A, 05, 05] +0A8F; [72 38, 05, 05] -100E; [79 3C, 05, 05] +0A90; [72 3A, 05, 05] -100F; [79 3E, 05, 05] +0A91; [72 3C, 05, 05] -1010; [79 40, 05, 05] +0A93; [72 3E, 05, 05] -1011; [79 42, 05, 05] +0A94; [72 40, 05, 05] -1012; [79 44, 05, 05] +0A95; [72 42, 05, 05] -1013; [79 46, 05, 05] +0A96; [72 44, 05, 05] -1014; [79 48, 05, 05] +0A97; [72 46, 05, 05] -1015; [79 4A, 05, 05] +0A98; [72 48, 05, 05] -1016; [79 4C, 05, 05] +0A99; [72 4A, 05, 05] -1017; [79 4E, 05, 05] +0A9A; [72 4C, 05, 05] -1018; [79 50, 05, 05] +0A9B; [72 4E, 05, 05] -1019; [79 52, 05, 05] +0A9C; [72 50, 05, 05] -101A; [79 54, 05, 05] +0A9D; [72 52, 05, 05] -101B; [79 56, 05, 05] +0A9E; [72 54, 05, 05] -101C; [79 58, 05, 05] +0A9F; [72 56, 05, 05] -101D; [79 5A, 05, 05] +0AA0; [72 58, 05, 05] -1050; [79 5C, 05, 05] +0AA1; [72 5A, 05, 05] -1051; [79 5E, 05, 05] +0AA2; [72 5C, 05, 05] -101E; [79 60, 05, 05] +0AA3; [72 5E, 05, 05] -101F; [79 62, 05, 05] +0AA4; [72 60, 05, 05] -1020; [79 64, 05, 05] +0AA5; [72 62, 05, 05] -1021; [79 66, 05, 05] +0AA6; [72 64, 05, 05] -1023; [79 68, 05, 05] +0AA7; [72 66, 05, 05] -1024; [79 6A, 05, 05] +0AA8; [72 68, 05, 05] -1025; [79 6C, 05, 05] +0AAA; [72 6A, 05, 05] -1025 102E; [79 6E, 05, 05] -1026; [79 6E, 05, 05] +0AAB; [72 6C, 05, 05] -1027; [79 70, 05, 05] +0AAC; [72 6E, 05, 05] -1029; [79 72, 05, 05] +0AAD; [72 70, 05, 05] -102A; [79 74, 05, 05] +0AAE; [72 72, 05, 05] -1052; [79 76, 05, 05] +0AAF; [72 74, 05, 05] -1053; [79 78, 05, 05] +0AB0; [72 76, 05, 05] -1054; [79 7A, 05, 05] +0AB2; [72 78, 05, 05] -1055; [79 7C, 05, 05] +0AB3; [72 7A, 05, 05] -102C; [79 7E, 05, 05] +0AB5; [72 7C, 05, 05] -102D; [79 80, 05, 05] +0AB6; [72 7E, 05, 05] -102E; [79 82, 05, 05] +0AB7; [72 80, 05, 05] -102F; [79 84, 05, 05] +0AB8; [72 82, 05, 05] -1030; [79 86, 05, 05] +0AB9; [72 84, 05, 05] -1031; [79 88, 05, 05] +0ABD; [72 86, 05, 05] -1032; [79 8A, 05, 05] +0ABE; [72 88, 05, 05] -1056; [79 8C, 05, 05] +0ABF; [72 8A, 05, 05] -1057; [79 8E, 05, 05] +0AC0; [72 8C, 05, 05] -1058; [79 90, 05, 05] +0AC1; [72 8E, 05, 05] -1059; [79 92, 05, 05] +0AC2; [72 90, 05, 05] -1039; [79 94, 05, 05] +0AC3; [72 92, 05, 05] -1780; [7A 20, 05, 05] +0AC4; [72 94, 05, 05] -1781; [7A 22, 05, 05] +0AE2; [72 96, 05, 05] -1782; [7A 24, 05, 05] +0AE3; [72 98, 05, 05] -1783; [7A 26, 05, 05] +0AC5; [72 9A, 05, 05] -1784; [7A 28, 05, 05] +0AC7; [72 9C, 05, 05] -1785; [7A 2A, 05, 05] +0AC8; [72 9E, 05, 05] -1786; [7A 2C, 05, 05] +0AC9; [72 A0, 05, 05] -1787; [7A 2E, 05, 05] +0ACB; [72 A2, 05, 05] -1788; [7A 30, 05, 05] +0ACC; [72 A4, 05, 05] -1789; [7A 32, 05, 05] +0ACD; [72 A6, 05, 05] -178A; [7A 34, 05, 05] +0B05; [73 20, 05, 05] -178B; [7A 36, 05, 05] +0B06; [73 22, 05, 05] -178C; [7A 38, 05, 05] +0B07; [73 24, 05, 05] -178D; [7A 3A, 05, 05] +0B08; [73 26, 05, 05] -178E; [7A 3C, 05, 05] +0B09; [73 28, 05, 05] -178F; [7A 3E, 05, 05] +0B0A; [73 2A, 05, 05] -1790; [7A 40, 05, 05] +0B0B; [73 2C, 05, 05] -1791; [7A 42, 05, 05] +0B60; [73 2E, 05, 05] -1792; [7A 44, 05, 05] +0B0C; [73 30, 05, 05] -1793; [7A 46, 05, 05] +0B61; [73 32, 05, 05] -1794; [7A 48, 05, 05] +0B0F; [73 34, 05, 05] -1795; [7A 4A, 05, 05] +0B10; [73 36, 05, 05] -1796; [7A 4C, 05, 05] +0B13; [73 38, 05, 05] -1797; [7A 4E, 05, 05] +0B14; [73 3A, 05, 05] -1798; [7A 50, 05, 05] +0B15; [73 3C, 05, 05] -1799; [7A 52, 05, 05] +0B16; [73 3E, 05, 05] -179A; [7A 54, 05, 05] +0B17; [73 40, 05, 05] -179B; [7A 56, 05, 05] +0B18; [73 42, 05, 05] -179C; [7A 58, 05, 05] +0B19; [73 44, 05, 05] -179D; [7A 5A, 05, 05] +0B1A; [73 46, 05, 05] -179E; [7A 5C, 05, 05] +0B1B; [73 48, 05, 05] -179F; [7A 5E, 05, 05] +0B1C; [73 4A, 05, 05] -17A0; [7A 60, 05, 05] +0B1D; [73 4C, 05, 05] -17A1; [7A 62, 05, 05] +0B1E; [73 4E, 05, 05] -17A2; [7A 64, 05, 05] +0B1F; [73 50, 05, 05] -17DC; [7A 66, 05, 05] +0B20; [73 52, 05, 05] -17A3; [7A 68, 05, 05] +0B21; [73 54, 05, 05] +0B5C; [73 54, 05, 05][, DB 09, 05] -17A4; [7A 6A, 05, 05] +0B22; [73 56, 05, 05] +0B5D; [73 56, 05, 05][, DB 09, 05] -17A5; [7A 6C, 05, 05] +0B23; [73 58, 05, 05] -17A6; [7A 6E, 05, 05] +0B24; [73 5A, 05, 05] -17A7; [7A 70, 05, 05] +0B25; [73 5C, 05, 05] -17A8; [7A 72, 05, 05] +0B26; [73 5E, 05, 05] -17A9; [7A 74, 05, 05] +0B27; [73 60, 05, 05] -17AA; [7A 76, 05, 05] +0B28; [73 62, 05, 05] -17AB; [7A 78, 05, 05] +0B2A; [73 64, 05, 05] -17AC; [7A 7A, 05, 05] +0B2B; [73 66, 05, 05] -17AD; [7A 7C, 05, 05] +0B2C; [73 68, 05, 05] -17AE; [7A 7E, 05, 05] +0B2D; [73 6A, 05, 05] -17AF; [7A 80, 05, 05] +0B2E; [73 6C, 05, 05] -17B0; [7A 82, 05, 05] +0B2F; [73 6E, 05, 05] -17B1; [7A 84, 05, 05] +0B5F; [73 70, 05, 05] -17B2; [7A 86, 05, 05] +0B30; [73 72, 05, 05] -17B3; [7A 88, 05, 05] +0B32; [73 74, 05, 05] -17B4; [7A 8A, 05, 05] +0B33; [73 76, 05, 05] -17B5; [7A 8C, 05, 05] +0B35; [73 78, 05, 05] -17B6; [7A 8E, 05, 05] +0B71; [73 7A, 05, 05] -17B7; [7A 90, 05, 05] +0B36; [73 7C, 05, 05] -17B8; [7A 92, 05, 05] +0B37; [73 7E, 05, 05] -17B9; [7A 94, 05, 05] +0B38; [73 80, 05, 05] -17BA; [7A 96, 05, 05] +0B39; [73 82, 05, 05] -17BB; [7A 98, 05, 05] +0B3D; [73 84, 05, 05] -17BC; [7A 9A, 05, 05] +0B3E; [73 86, 05, 05] -17BD; [7A 9C, 05, 05] +0B3F; [73 88, 05, 05] -17BE; [7A 9E, 05, 05] +0B40; [73 8A, 05, 05] -17BF; [7A A0, 05, 05] +0B41; [73 8C, 05, 05] -17C0; [7A A2, 05, 05] +0B42; [73 8E, 05, 05] -17C1; [7A A4, 05, 05] +0B43; [73 90, 05, 05] -17C2; [7A A6, 05, 05] +0B47; [73 92, 05, 05] -17C3; [7A A8, 05, 05] +0B47 0B56; [73 94, 05, 05] +0B48; [73 94, 05, 05] -17C4; [7A AA, 05, 05] +0B47 0B3E; [73 96, 05, 05] +0B4B; [73 96, 05, 05] -17C5; [7A AC, 05, 05] +0B47 0B57; [73 98, 05, 05] +0B4C; [73 98, 05, 05] -17D2; [7A AE, 05, 05] +0B4D; [73 9A, 05, 05] -1950; [7B 20, 05, 05] +0B56; [73 9C, 05, 05] -1951; [7B 22, 05, 05] +0B57; [73 9E, 05, 05] -1952; [7B 24, 05, 05] +0B83; [74 20, 05, 05] -1953; [7B 26, 05, 05] +0B85; [74 22, 05, 05] -1954; [7B 28, 05, 05] +0B86; [74 24, 05, 05] -1955; [7B 2A, 05, 05] +0B87; [74 26, 05, 05] -1956; [7B 2C, 05, 05] +0B88; [74 28, 05, 05] -1957; [7B 2E, 05, 05] +0B89; [74 2A, 05, 05] -1958; [7B 30, 05, 05] +0B8A; [74 2C, 05, 05] -1959; [7B 32, 05, 05] +0B8E; [74 2E, 05, 05] -195A; [7B 34, 05, 05] +0B8F; [74 30, 05, 05] -195B; [7B 36, 05, 05] +0B90; [74 32, 05, 05] -195C; [7B 38, 05, 05] +0B92; [74 34, 05, 05] -195D; [7B 3A, 05, 05] +0B93; [74 36, 05, 05] -195E; [7B 3C, 05, 05] +0B92 0BD7; [74 38, 05, 05] +0B94; [74 38, 05, 05] -195F; [7B 3E, 05, 05] +0B95; [74 3A, 05, 05] -1960; [7B 40, 05, 05] +0B99; [74 3C, 05, 05] -1961; [7B 42, 05, 05] +0B9A; [74 3E, 05, 05] -1962; [7B 44, 05, 05] +0B9C; [74 40, 05, 05] -1963; [7B 46, 05, 05] +0B9E; [74 42, 05, 05] -1964; [7B 48, 05, 05] +0B9F; [74 44, 05, 05] -1965; [7B 4A, 05, 05] +0BA3; [74 46, 05, 05] -1966; [7B 4C, 05, 05] +0BA4; [74 48, 05, 05] -1967; [7B 4E, 05, 05] +0BA8; [74 4A, 05, 05] -1968; [7B 50, 05, 05] +0BA9; [74 4C, 05, 05] -1969; [7B 52, 05, 05] +0BAA; [74 4E, 05, 05] -196A; [7B 54, 05, 05] +0BAE; [74 50, 05, 05] -196B; [7B 56, 05, 05] +0BAF; [74 52, 05, 05] -196C; [7B 58, 05, 05] +0BB0; [74 54, 05, 05] -196D; [7B 5A, 05, 05] +0BB1; [74 56, 05, 05] -1970; [7B 5C, 05, 05] +0BB2; [74 58, 05, 05] -1971; [7B 5E, 05, 05] +0BB3; [74 5A, 05, 05] -1972; [7B 60, 05, 05] +0BB4; [74 5C, 05, 05] -1973; [7B 62, 05, 05] +0BB5; [74 5E, 05, 05] -1974; [7B 64, 05, 05] +0BB6; [74 60, 05, 05] -1880; [7C 20, 05, 05] +0BB7; [74 62, 05, 05] -1881; [7C 22, 05, 05] +0BB8; [74 64, 05, 05] -1882; [7C 24, 05, 05] +0BB9; [74 66, 05, 05] -1883; [7C 26, 05, 05] +0BBE; [74 68, 05, 05] -1884; [7C 28, 05, 05] +0BBF; [74 6A, 05, 05] -1885; [7C 2A, 05, 05] +0BC0; [74 6C, 05, 05] -1886; [7C 2C, 05, 05] +0BC1; [74 6E, 05, 05] -1843; [7C 2E, 05, 05] +0BC2; [74 70, 05, 05] -1820; [7C 30, 05, 05] +0BC6; [74 72, 05, 05] -1887; [7C 32, 05, 05] +0BC7; [74 74, 05, 05] -1821; [7C 34, 05, 05] +0BC8; [74 76, 05, 05] -1844; [7C 36, 05, 05] +0BC6 0BBE; [74 78, 05, 05] +0BCA; [74 78, 05, 05] -185D; [7C 38, 05, 05] +0BC7 0BBE; [74 7A, 05, 05] +0BCB; [74 7A, 05, 05] -1822; [7C 3A, 05, 05] +0BC6 0BD7; [74 7C, 05, 05] +0BCC; [74 7C, 05, 05] -1845; [7C 3C, 05, 05] +0BCD; [74 7E, 05, 05] -185E; [7C 3E, 05, 05] +0BD7; [74 80, 05, 05] -1873; [7C 40, 05, 05] +0C05; [75 20, 05, 05] -1888; [7C 42, 05, 05] +0C06; [75 22, 05, 05] -185F; [7C 44, 05, 05] +0C07; [75 24, 05, 05] -1823; [7C 46, 05, 05] +0C08; [75 26, 05, 05] -1846; [7C 48, 05, 05] +0C09; [75 28, 05, 05] -1824; [7C 4A, 05, 05] +0C0A; [75 2A, 05, 05] -1847; [7C 4C, 05, 05] +0C0B; [75 2C, 05, 05] -1861; [7C 4E, 05, 05] +0C60; [75 2E, 05, 05] -1825; [7C 50, 05, 05] +0C0C; [75 30, 05, 05] -1848; [7C 52, 05, 05] +0C61; [75 32, 05, 05] -1826; [7C 54, 05, 05] +0C0E; [75 34, 05, 05] -1849; [7C 56, 05, 05] +0C0F; [75 36, 05, 05] -1860; [7C 58, 05, 05] +0C10; [75 38, 05, 05] -1827; [7C 5A, 05, 05] +0C12; [75 3A, 05, 05] -1828; [7C 5C, 05, 05] +0C13; [75 3C, 05, 05] -1829; [7C 5E, 05, 05] +0C14; [75 3E, 05, 05] -184A; [7C 60, 05, 05] +0C15; [75 40, 05, 05] -1862; [7C 62, 05, 05] +0C16; [75 42, 05, 05] -188A; [7C 64, 05, 05] +0C17; [75 44, 05, 05] -189B; [7C 66, 05, 05] +0C18; [75 46, 05, 05] -182A; [7C 68, 05, 05] +0C19; [75 48, 05, 05] -184B; [7C 6A, 05, 05] +0C1A; [75 4A, 05, 05] -182B; [7C 6C, 05, 05] +0C1B; [75 4C, 05, 05] -184C; [7C 6E, 05, 05] +0C1C; [75 4E, 05, 05] -1866; [7C 70, 05, 05] +0C1D; [75 50, 05, 05] -182C; [7C 72, 05, 05] +0C1E; [75 52, 05, 05] -184D; [7C 74, 05, 05] +0C1F; [75 54, 05, 05] -182D; [7C 76, 05, 05] +0C20; [75 56, 05, 05] -184E; [7C 78, 05, 05] +0C21; [75 58, 05, 05] -1864; [7C 7A, 05, 05] +0C22; [75 5A, 05, 05] -189A; [7C 7C, 05, 05] +0C23; [75 5C, 05, 05] -1865; [7C 7E, 05, 05] +0C24; [75 5E, 05, 05] -182E; [7C 80, 05, 05] +0C25; [75 60, 05, 05] -184F; [7C 82, 05, 05] +0C26; [75 62, 05, 05] -182F; [7C 84, 05, 05] +0C27; [75 64, 05, 05] -1830; [7C 86, 05, 05] +0C28; [75 66, 05, 05] -1831; [7C 88, 05, 05] +0C2A; [75 68, 05, 05] -1867; [7C 8A, 05, 05] +0C2B; [75 6A, 05, 05] -189C; [7C 8C, 05, 05] +0C2C; [75 6C, 05, 05] -189D; [7C 8E, 05, 05] +0C2D; [75 6E, 05, 05] -18A2; [7C 90, 05, 05] +0C2E; [75 70, 05, 05] -18A4; [7C 92, 05, 05] +0C2F; [75 72, 05, 05] -18A5; [7C 94, 05, 05] +0C30; [75 74, 05, 05] -1832; [7C 96, 05, 05] +0C31; [75 76, 05, 05] -1850; [7C 98, 05, 05] +0C32; [75 78, 05, 05] -1868; [7C 9A, 05, 05] +0C33; [75 7A, 05, 05] -1833; [7C 9C, 05, 05] +0C35; [75 7C, 05, 05] -1851; [7C 9E, 05, 05] +0C36; [75 7E, 05, 05] -1869; [7C A0, 05, 05] +0C37; [75 80, 05, 05] -1834; [7C A2, 05, 05] +0C38; [75 82, 05, 05] -1852; [7C A4, 05, 05] +0C39; [75 84, 05, 05] -1871; [7C A6, 05, 05] +0C3E; [75 86, 05, 05] -185C; [7C A8, 05, 05] +0C3F; [75 88, 05, 05] -188B; [7C AA, 05, 05] +0C40; [75 8A, 05, 05] -1835; [7C AC, 05, 05] +0C41; [75 8C, 05, 05] -1853; [7C AE, 05, 05] +0C42; [75 8E, 05, 05] -186A; [7C B0, 05, 05] +0C43; [75 90, 05, 05] -1877; [7C B2, 05, 05] +0C44; [75 92, 05, 05] -1836; [7C B4, 05, 05] +0C46; [75 94, 05, 05] -1855; [7C B6, 05, 05] +0C47; [75 96, 05, 05] -1872; [7C B8, 05, 05] +0C46 0C56; [75 98, 05, 05] +0C48; [75 98, 05, 05] -1837; [7C BA, 05, 05] +0C4A; [75 9A, 05, 05] -1875; [7C BC, 05, 05] +0C4B; [75 9C, 05, 05] -1838; [7C BE, 05, 05] +0C4C; [75 9E, 05, 05] -1856; [7C C0, 05, 05] +0C4D; [75 A0, 05, 05] -1839; [7C C2, 05, 05] +0C55; [75 A2, 05, 05] -186B; [7C C4, 05, 05] +0C56; [75 A4, 05, 05] -1876; [7C C6, 05, 05] +0C85; [76 20, 05, 05] -183A; [7C C8, 05, 05] +0C86; [76 22, 05, 05] -1857; [7C CA, 05, 05] +0C87; [76 24, 05, 05] -1863; [7C CC, 05, 05] +0C88; [76 26, 05, 05] -1874; [7C CE, 05, 05] +0C89; [76 28, 05, 05] -1889; [7C D0, 05, 05] +0C8A; [76 2A, 05, 05] -183B; [7C D2, 05, 05] +0C8B; [76 2C, 05, 05] -183C; [7C D4, 05, 05] +0CE0; [76 2E, 05, 05] -1854; [7C D6, 05, 05] +0C8C; [76 30, 05, 05] -186E; [7C D8, 05, 05] +0CE1; [76 32, 05, 05] -183D; [7C DA, 05, 05] +0C8E; [76 34, 05, 05] -186F; [7C DC, 05, 05] +0C8F; [76 36, 05, 05] -1858; [7C DE, 05, 05] +0C90; [76 38, 05, 05] -186C; [7C E0, 05, 05] +0C92; [76 3A, 05, 05] -183E; [7C E2, 05, 05] +0C93; [76 3C, 05, 05] -1859; [7C E4, 05, 05] +0C94; [76 3E, 05, 05] -186D; [7C E6, 05, 05] +0C95; [76 40, 05, 05] -183F; [7C E8, 05, 05] +0C96; [76 42, 05, 05] -1840; [7C EA, 05, 05] +0C97; [76 44, 05, 05] -1841; [7C EC, 05, 05] +0C98; [76 46, 05, 05] -1842; [7C EE, 05, 05] +0C99; [76 48, 05, 05] -185A; [7C F0, 05, 05] +0C9A; [76 4A, 05, 05] -185B; [7C F2, 05, 05] +0C9B; [76 4C, 05, 05] -1870; [7C F4, 05, 05] +0C9C; [76 4E, 05, 05] -188C; [7C F6, 05, 05] +0C9D; [76 50, 05, 05] -189E; [7C F8, 05, 05] +0C9E; [76 52, 05, 05] -188D; [7C FA, 05, 05] +0C9F; [76 54, 05, 05] -188E; [7C FC, 05, 05] +0CA0; [76 56, 05, 05] -189F; [7C FE, 05, 05] +0CA1; [76 58, 05, 05] -188F; [7D 05, 05, 05] +0CA2; [76 5A, 05, 05] -1890; [7D 07, 05, 05] +0CA3; [76 5C, 05, 05] -1898; [7D 09, 05, 05] +0CA4; [76 5E, 05, 05] -18A0; [7D 0B, 05, 05] +0CA5; [76 60, 05, 05] -1891; [7D 0D, 05, 05] +0CA6; [76 62, 05, 05] -18A1; [7D 0F, 05, 05] +0CA7; [76 64, 05, 05] -1892; [7D 11, 05, 05] +0CA8; [76 66, 05, 05] -1893; [7D 13, 05, 05] +0CAA; [76 68, 05, 05] -18A8; [7D 15, 05, 05] +0CAB; [76 6A, 05, 05] -1894; [7D 17, 05, 05] +0CAC; [76 6C, 05, 05] -18A3; [7D 19, 05, 05] +0CAD; [76 6E, 05, 05] -1895; [7D 1B, 05, 05] +0CAE; [76 70, 05, 05] -1899; [7D 1D, 05, 05] +0CAF; [76 72, 05, 05] -1896; [7D 1F, 05, 05] +0CB0; [76 74, 05, 05] -1897; [7D 21, 05, 05] +0CB1; [76 76, 05, 05] -18A6; [7D 23, 05, 05] +0CB2; [76 78, 05, 05] -18A7; [7D 25, 05, 05] +0CB5; [76 7A, 05, 05] -18A9; [7D 27, 05, 05] +0CB6; [76 7C, 05, 05] -13A0; [7E 20, 05, 05] +0CB7; [76 7E, 05, 05] -13A1; [7E 22, 05, 05] +0CB8; [76 80, 05, 05] -13A2; [7E 24, 05, 05] +0CB9; [76 82, 05, 05] -13A3; [7E 26, 05, 05] +0CB3; [76 84, 05, 05] -13A4; [7E 28, 05, 05] +0CDE; [76 86, 05, 05] -13A5; [7E 2A, 05, 05] +0CBD; [76 88, 05, 05] -13A6; [7E 2C, 05, 05] +0CBE; [76 8A, 05, 05] -13A7; [7E 2E, 05, 05] +0CBF; [76 8C, 05, 05] -13A8; [7E 30, 05, 05] +0CBF 0CD5; [76 8E, 05, 05] +0CC0; [76 8E, 05, 05] -13A9; [7E 32, 05, 05] +0CC1; [76 90, 05, 05] -13AA; [7E 34, 05, 05] +0CC2; [76 92, 05, 05] -13AB; [7E 36, 05, 05] +0CC3; [76 94, 05, 05] -13AC; [7E 38, 05, 05] +0CC4; [76 96, 05, 05] -13AD; [7E 3A, 05, 05] +0CE2; [76 98, 05, 05] -13AE; [7E 3C, 05, 05] +0CE3; [76 9A, 05, 05] -13AF; [7E 3E, 05, 05] +0CC6; [76 9C, 05, 05] -13B0; [7E 40, 05, 05] +0CC6 0CD5; [76 9E, 05, 05] +0CC7; [76 9E, 05, 05] -13B1; [7E 42, 05, 05] +0CC6 0CD6; [76 A0, 05, 05] +0CC8; [76 A0, 05, 05] -13B2; [7E 44, 05, 05] +0CC6 0CC2; [76 A2, 05, 05] +0CCA; [76 A2, 05, 05] -13B3; [7E 46, 05, 05] +0CC6 0CC2 0CD5; [76 A4, 05, 05] +0CCA 0CD5; [76 A4, 05, 05] +0CCB; [76 A4, 05, 05] -13B4; [7E 48, 05, 05] +0CCC; [76 A6, 05, 05] -13B5; [7E 4A, 05, 05] +0CCD; [76 A8, 05, 05] -13B6; [7E 4C, 05, 05] +0CD5; [76 AA, 05, 05] -13B7; [7E 4E, 05, 05] +0CD6; [76 AC, 05, 05] -13B8; [7E 50, 05, 05] +0D05; [77 20, 05, 05] -13B9; [7E 52, 05, 05] +0D06; [77 22, 05, 05] -13BA; [7E 54, 05, 05] +0D07; [77 24, 05, 05] -13BB; [7E 56, 05, 05] +0D08; [77 26, 05, 05] -13BC; [7E 58, 05, 05] +0D09; [77 28, 05, 05] -13BD; [7E 5A, 05, 05] +0D0A; [77 2A, 05, 05] -13BE; [7E 5C, 05, 05] +0D0B; [77 2C, 05, 05] -13BF; [7E 5E, 05, 05] +0D60; [77 2E, 05, 05] -13C0; [7E 60, 05, 05] +0D0C; [77 30, 05, 05] -13C1; [7E 62, 05, 05] +0D61; [77 32, 05, 05] -13C2; [7E 64, 05, 05] +0D0E; [77 34, 05, 05] -13C3; [7E 66, 05, 05] +0D0F; [77 36, 05, 05] -13C4; [7E 68, 05, 05] +0D10; [77 38, 05, 05] -13C5; [7E 6A, 05, 05] +0D12; [77 3A, 05, 05] -13C6; [7E 6C, 05, 05] +0D13; [77 3C, 05, 05] -13C7; [7E 6E, 05, 05] +0D14; [77 3E, 05, 05] -13C8; [7E 70, 05, 05] +0D15; [77 40, 05, 05] -13C9; [7E 72, 05, 05] +0D16; [77 42, 05, 05] -13CA; [7E 74, 05, 05] +0D17; [77 44, 05, 05] -13CB; [7E 76, 05, 05] +0D18; [77 46, 05, 05] -13CC; [7E 78, 05, 05] +0D19; [77 48, 05, 05] -13CD; [7E 7A, 05, 05] +0D1A; [77 4A, 05, 05] -13CE; [7E 7C, 05, 05] +0D1B; [77 4C, 05, 05] -13CF; [7E 7E, 05, 05] +0D1C; [77 4E, 05, 05] -13D0; [7E 80, 05, 05] +0D1D; [77 50, 05, 05] -13D1; [7E 82, 05, 05] +0D1E; [77 52, 05, 05] -13D2; [7E 84, 05, 05] +0D1F; [77 54, 05, 05] -13D3; [7E 86, 05, 05] +0D20; [77 56, 05, 05] -13D4; [7E 88, 05, 05] +0D21; [77 58, 05, 05] -13D5; [7E 8A, 05, 05] +0D22; [77 5A, 05, 05] -13D6; [7E 8C, 05, 05] +0D23; [77 5C, 05, 05] -13D7; [7E 8E, 05, 05] +0D24; [77 5E, 05, 05] -13D8; [7E 90, 05, 05] +0D25; [77 60, 05, 05] -13D9; [7E 92, 05, 05] +0D26; [77 62, 05, 05] -13DA; [7E 94, 05, 05] +0D27; [77 64, 05, 05] -13DB; [7E 96, 05, 05] +0D28; [77 66, 05, 05] -13DC; [7E 98, 05, 05] +0D2A; [77 68, 05, 05] -13DD; [7E 9A, 05, 05] +0D2B; [77 6A, 05, 05] -13DE; [7E 9C, 05, 05] +0D2C; [77 6C, 05, 05] -13DF; [7E 9E, 05, 05] +0D2D; [77 6E, 05, 05] -13E0; [7E A0, 05, 05] +0D2E; [77 70, 05, 05] -13E1; [7E A2, 05, 05] +0D2F; [77 72, 05, 05] -13E2; [7E A4, 05, 05] +0D30; [77 74, 05, 05] -13E3; [7E A6, 05, 05] +0D31; [77 76, 05, 05] -13E4; [7E A8, 05, 05] +0D32; [77 78, 05, 05] -13E5; [7E AA, 05, 05] +0D33; [77 7A, 05, 05] -13E6; [7E AC, 05, 05] +0D34; [77 7C, 05, 05] -13E7; [7E AE, 05, 05] +0D35; [77 7E, 05, 05] -13E8; [7E B0, 05, 05] +0D36; [77 80, 05, 05] -13E9; [7E B2, 05, 05] +0D37; [77 82, 05, 05] -13EA; [7E B4, 05, 05] +0D38; [77 84, 05, 05] -13EB; [7E B6, 05, 05] +0D39; [77 86, 05, 05] -13EC; [7E B8, 05, 05] +0D3E; [77 88, 05, 05] -13ED; [7E BA, 05, 05] +0D3F; [77 8A, 05, 05] -13EE; [7E BC, 05, 05] +0D40; [77 8C, 05, 05] -13EF; [7E BE, 05, 05] +0D41; [77 8E, 05, 05] -13F0; [7E C0, 05, 05] +0D42; [77 90, 05, 05] -13F1; [7E C2, 05, 05] +0D43; [77 92, 05, 05] -13F2; [7E C4, 05, 05] +0D46; [77 94, 05, 05] -13F3; [7E C6, 05, 05] +0D47; [77 96, 05, 05] -13F4; [7E C8, 05, 05] +0D48; [77 98, 05, 05] -1401; [7F 20, 05, 05] +0D46 0D3E; [77 9A, 05, 05] +0D4A; [77 9A, 05, 05] -1402; [7F 22, 05, 05] +0D47 0D3E; [77 9C, 05, 05] +0D4B; [77 9C, 05, 05] -1403; [7F 24, 05, 05] +0D46 0D57; [77 9E, 05, 05] +0D4C; [77 9E, 05, 05] -1404; [7F 26, 05, 05] +0D57; [77 A0, 05, 05] -1405; [7F 28, 05, 05] +0D4D; [77 A2, 05, 05] -1406; [7F 2A, 05, 05] +0D85; [78 20, 05, 05] -1407; [7F 2C, 05, 05] +0D86; [78 22, 05, 05] -1408; [7F 2E, 05, 05] +0D87; [78 24, 05, 05] -1409; [7F 30, 05, 05] +0D88; [78 26, 05, 05] -140A; [7F 32, 05, 05] +0D89; [78 28, 05, 05] -140B; [7F 34, 05, 05] +0D8A; [78 2A, 05, 05] -140C; [7F 36, 05, 05] +0D8B; [78 2C, 05, 05] -140D; [7F 38, 05, 05] +0D8C; [78 2E, 05, 05] -140E; [7F 3A, 05, 05] +0D8D; [78 30, 05, 05] -140F; [7F 3C, 05, 05] +0D8E; [78 32, 05, 05] -1410; [7F 3E, 05, 05] +0D8F; [78 34, 05, 05] -1411; [7F 40, 05, 05] +0D90; [78 36, 05, 05] -1412; [7F 42, 05, 05] +0D91; [78 38, 05, 05] -1413; [7F 44, 05, 05] +0D92; [78 3A, 05, 05] -1414; [7F 46, 05, 05] +0D93; [78 3C, 05, 05] -1415; [7F 48, 05, 05] +0D94; [78 3E, 05, 05] -1416; [7F 4A, 05, 05] +0D95; [78 40, 05, 05] -1417; [7F 4C, 05, 05] +0D96; [78 42, 05, 05] -1418; [7F 4E, 05, 05] +0D9A; [78 44, 05, 05] -1419; [7F 50, 05, 05] +0D9B; [78 46, 05, 05] -141A; [7F 52, 05, 05] +0D9C; [78 48, 05, 05] -141B; [7F 54, 05, 05] +0D9D; [78 4A, 05, 05] -141C; [7F 56, 05, 05] +0D9E; [78 4C, 05, 05] -141D; [7F 58, 05, 05] +0D9F; [78 4E, 05, 05] -141E; [7F 5A, 05, 05] +0DA0; [78 50, 05, 05] -141F; [7F 5C, 05, 05] +0DA1; [78 52, 05, 05] -1420; [7F 5E, 05, 05] +0DA2; [78 54, 05, 05] -1421; [7F 60, 05, 05] +0DA3; [78 56, 05, 05] -1422; [7F 62, 05, 05] +0DA4; [78 58, 05, 05] -1423; [7F 64, 05, 05] +0DA5; [78 5A, 05, 05] -1424; [7F 66, 05, 05] +0DA6; [78 5C, 05, 05] -1425; [7F 68, 05, 05] +0DA7; [78 5E, 05, 05] -1426; [7F 6A, 05, 05] +0DA8; [78 60, 05, 05] -1427; [7F 6C, 05, 05] +0DA9; [78 62, 05, 05] -1428; [7F 6E, 05, 05] +0DAA; [78 64, 05, 05] -1429; [7F 70, 05, 05] +0DAB; [78 66, 05, 05] -142A; [7F 72, 05, 05] +0DAC; [78 68, 05, 05] -142B; [7F 74, 05, 05] +0DAD; [78 6A, 05, 05] -142C; [7F 76, 05, 05] +0DAE; [78 6C, 05, 05] -142D; [7F 78, 05, 05] +0DAF; [78 6E, 05, 05] -142E; [7F 7A, 05, 05] +0DB0; [78 70, 05, 05] -142F; [7F 7C, 05, 05] +0DB1; [78 72, 05, 05] -1430; [7F 7E, 05, 05] +0DB3; [78 74, 05, 05] -1431; [7F 80, 05, 05] +0DB4; [78 76, 05, 05] -1432; [7F 82, 05, 05] +0DB5; [78 78, 05, 05] -1433; [7F 84, 05, 05] +0DB6; [78 7A, 05, 05] -1434; [7F 86, 05, 05] +0DB7; [78 7C, 05, 05] -1435; [7F 88, 05, 05] +0DB8; [78 7E, 05, 05] -1436; [7F 8A, 05, 05] +0DB9; [78 80, 05, 05] -1437; [7F 8C, 05, 05] +0DBA; [78 82, 05, 05] -1438; [7F 8E, 05, 05] +0DBB; [78 84, 05, 05] -1439; [7F 90, 05, 05] +0DBD; [78 86, 05, 05] -143A; [7F 92, 05, 05] +0DC0; [78 88, 05, 05] -143B; [7F 94, 05, 05] +0DC1; [78 8A, 05, 05] -143C; [7F 96, 05, 05] +0DC2; [78 8C, 05, 05] -143D; [7F 98, 05, 05] +0DC3; [78 8E, 05, 05] -143E; [7F 9A, 05, 05] +0DC4; [78 90, 05, 05] -143F; [7F 9C, 05, 05] +0DC5; [78 92, 05, 05] -1440; [7F 9E, 05, 05] +0DC6; [78 94, 05, 05] -1441; [7F A0, 05, 05] +0DCA; [78 96, 05, 05] -1442; [7F A2, 05, 05] +0DCF; [78 98, 05, 05] -1443; [7F A4, 05, 05] +0DD0; [78 9A, 05, 05] -1444; [7F A6, 05, 05] +0DD1; [78 9C, 05, 05] -1445; [7F A8, 05, 05] +0DD2; [78 9E, 05, 05] -1446; [7F AA, 05, 05] +0DD3; [78 A0, 05, 05] -1447; [7F AC, 05, 05] +0DD4; [78 A2, 05, 05] -1448; [7F AE, 05, 05] +0DD6; [78 A4, 05, 05] -1449; [7F B0, 05, 05] +0DD8; [78 A6, 05, 05] -144A; [7F B2, 05, 05] +0DD9; [78 A8, 05, 05] -144B; [7F B4, 05, 05] +0DD9 0DCA; [78 AA, 05, 05] +0DDA; [78 AA, 05, 05] -144C; [7F B6, 05, 05] +0DDB; [78 AC, 05, 05] -144D; [7F B8, 05, 05] +0DD9 0DCF; [78 AE, 05, 05] +0DDC; [78 AE, 05, 05] -144E; [7F BA, 05, 05] +0DD9 0DCF 0DCA; [78 B0, 05, 05] +0DDC 0DCA; [78 B0, 05, 05] +0DDD; [78 B0, 05, 05] -144F; [7F BC, 05, 05] +0DD9 0DDF; [78 B2, 05, 05] +0DDE; [78 B2, 05, 05] -1450; [7F BE, 05, 05] +0DDF; [78 B4, 05, 05] -1451; [7F C0, 05, 05] +0DF2; [78 B6, 05, 05] -1452; [7F C2, 05, 05] +0DF3; [78 B8, 05, 05] -1453; [7F C4, 05, 05] +A800; [79 20, 05, 05] -1454; [7F C6, 05, 05] +A801; [79 22, 05, 05] -1455; [7F C8, 05, 05] +A802; [79 24, 05, 05] -1456; [7F CA, 05, 05] +A803; [79 26, 05, 05] -1457; [7F CC, 05, 05] +A804; [79 28, 05, 05] -1458; [7F CE, 05, 05] +A805; [79 2A, 05, 05] -1459; [7F D0, 05, 05] +A806; [79 2C, 05, 05] -145A; [7F D2, 05, 05] +A807; [79 2E, 05, 05] -145B; [7F D4, 05, 05] +A808; [79 30, 05, 05] -145C; [7F D6, 05, 05] +A809; [79 32, 05, 05] -145D; [7F D8, 05, 05] +A80A; [79 34, 05, 05] -145E; [7F DA, 05, 05] +A80C; [79 36, 05, 05] -145F; [7F DC, 05, 05] +A80D; [79 38, 05, 05] -1460; [7F DE, 05, 05] +A80E; [79 3A, 05, 05] -1461; [7F E0, 05, 05] +A80F; [79 3C, 05, 05] -1462; [7F E2, 05, 05] +A810; [79 3E, 05, 05] -1463; [7F E4, 05, 05] +A811; [79 40, 05, 05] -1464; [7F E6, 05, 05] +A812; [79 42, 05, 05] -1465; [7F E8, 05, 05] +A813; [79 44, 05, 05] -1466; [7F EA, 05, 05] +A814; [79 46, 05, 05] -1467; [7F EC, 05, 05] +A815; [79 48, 05, 05] -1468; [7F EE, 05, 05] +A816; [79 4A, 05, 05] -1469; [7F F0, 05, 05] +A817; [79 4C, 05, 05] -146A; [7F F2, 05, 05] +A818; [79 4E, 05, 05] -146B; [7F F4, 05, 05] +A819; [79 50, 05, 05] -146C; [7F F6, 05, 05] +A81A; [79 52, 05, 05] -146D; [7F F8, 05, 05] +A81B; [79 54, 05, 05] -146E; [7F FA, 05, 05] +A81C; [79 56, 05, 05] -146F; [7F FC, 05, 05] +A81D; [79 58, 05, 05] -1470; [7F FE, 05, 05] +A81E; [79 5A, 05, 05] -1471; [80 05, 05, 05] +A81F; [79 5C, 05, 05] -1472; [80 07, 05, 05] +A820; [79 5E, 05, 05] -1473; [80 09, 05, 05] +A821; [79 60, 05, 05] -1474; [80 0B, 05, 05] +A822; [79 62, 05, 05] -1475; [80 0D, 05, 05] +A823; [79 64, 05, 05] -1476; [80 0F, 05, 05] +A824; [79 66, 05, 05] -1477; [80 11, 05, 05] +A825; [79 68, 05, 05] -1478; [80 13, 05, 05] +A826; [79 6A, 05, 05] -1479; [80 15, 05, 05] +A827; [79 6C, 05, 05] -147A; [80 17, 05, 05] +D802 DE00; [79 6E, 05, 05] -147B; [80 19, 05, 05] +D802 DE01; [79 70, 05, 05] -147C; [80 1B, 05, 05] +D802 DE02; [79 72, 05, 05] -147D; [80 1D, 05, 05] +D802 DE03; [79 74, 05, 05] -147E; [80 1F, 05, 05] +D802 DE05; [79 76, 05, 05] -147F; [80 21, 05, 05] +D802 DE06; [79 78, 05, 05] -1480; [80 23, 05, 05] +D802 DE0C; [79 7A, 05, 05] -1481; [80 25, 05, 05] +D802 DE10; [79 7C, 05, 05] -1482; [80 27, 05, 05] +D802 DE11; [79 7E, 05, 05] -1483; [80 29, 05, 05] +D802 DE12; [79 80, 05, 05] -1484; [80 2B, 05, 05] +D802 DE13; [79 82, 05, 05] -1485; [80 2D, 05, 05] +D802 DE15; [79 84, 05, 05] -1486; [80 2F, 05, 05] +D802 DE16; [79 86, 05, 05] -1487; [80 31, 05, 05] +D802 DE17; [79 88, 05, 05] -1488; [80 33, 05, 05] +D802 DE19; [79 8A, 05, 05] -1489; [80 35, 05, 05] +D802 DE1A; [79 8C, 05, 05] -148A; [80 37, 05, 05] +D802 DE1B; [79 8E, 05, 05] -148B; [80 39, 05, 05] +D802 DE1C; [79 90, 05, 05] -148C; [80 3B, 05, 05] +D802 DE1D; [79 92, 05, 05] -148D; [80 3D, 05, 05] +D802 DE1E; [79 94, 05, 05] -148E; [80 3F, 05, 05] +D802 DE1F; [79 96, 05, 05] -148F; [80 41, 05, 05] +D802 DE20; [79 98, 05, 05] -1490; [80 43, 05, 05] +D802 DE21; [79 9A, 05, 05] -1491; [80 45, 05, 05] +D802 DE22; [79 9C, 05, 05] -1492; [80 47, 05, 05] +D802 DE23; [79 9E, 05, 05] -1493; [80 49, 05, 05] +D802 DE24; [79 A0, 05, 05] -1494; [80 4B, 05, 05] +D802 DE25; [79 A2, 05, 05] -1495; [80 4D, 05, 05] +D802 DE26; [79 A4, 05, 05] -1496; [80 4F, 05, 05] +D802 DE27; [79 A6, 05, 05] -1497; [80 51, 05, 05] +D802 DE28; [79 A8, 05, 05] -1498; [80 53, 05, 05] +D802 DE29; [79 AA, 05, 05] -1499; [80 55, 05, 05] +D802 DE2A; [79 AC, 05, 05] -149A; [80 57, 05, 05] +D802 DE2B; [79 AE, 05, 05] -149B; [80 59, 05, 05] +D802 DE2C; [79 B0, 05, 05] -149C; [80 5B, 05, 05] +D802 DE2D; [79 B2, 05, 05] -149D; [80 5D, 05, 05] +D802 DE2E; [79 B4, 05, 05] -149E; [80 5F, 05, 05] +D802 DE2F; [79 B6, 05, 05] -149F; [80 61, 05, 05] +D802 DE30; [79 B8, 05, 05] -14A0; [80 63, 05, 05] +D802 DE31; [79 BA, 05, 05] -14A1; [80 65, 05, 05] +D802 DE32; [79 BC, 05, 05] -14A2; [80 67, 05, 05] +D802 DE33; [79 BE, 05, 05] -14A3; [80 69, 05, 05] +D802 DE3F; [79 C0, 05, 05] -14A4; [80 6B, 05, 05] +0E01; [7A 20, 05, 05] +0E40 0E01; [7A 20, 05, 05][7A 94, 05, 3D] +0E41 0E01; [7A 20, 05, 05][7A 96, 05, 3D] +0E42 0E01; [7A 20, 05, 05][7A 98, 05, 3D] +0E43 0E01; [7A 20, 05, 05][7A 9A, 05, 3D] +0E44 0E01; [7A 20, 05, 05][7A 9C, 05, 3D] -14A5; [80 6D, 05, 05] +0E02; [7A 22, 05, 05] +0E40 0E02; [7A 22, 05, 05][7A 94, 05, 3D] +0E41 0E02; [7A 22, 05, 05][7A 96, 05, 3D] +0E42 0E02; [7A 22, 05, 05][7A 98, 05, 3D] +0E43 0E02; [7A 22, 05, 05][7A 9A, 05, 3D] +0E44 0E02; [7A 22, 05, 05][7A 9C, 05, 3D] -14A6; [80 6F, 05, 05] +0E03; [7A 24, 05, 05] +0E40 0E03; [7A 24, 05, 05][7A 94, 05, 3D] +0E41 0E03; [7A 24, 05, 05][7A 96, 05, 3D] +0E42 0E03; [7A 24, 05, 05][7A 98, 05, 3D] +0E43 0E03; [7A 24, 05, 05][7A 9A, 05, 3D] +0E44 0E03; [7A 24, 05, 05][7A 9C, 05, 3D] -14A7; [80 71, 05, 05] +0E04; [7A 26, 05, 05] +0E40 0E04; [7A 26, 05, 05][7A 94, 05, 3D] +0E41 0E04; [7A 26, 05, 05][7A 96, 05, 3D] +0E42 0E04; [7A 26, 05, 05][7A 98, 05, 3D] +0E43 0E04; [7A 26, 05, 05][7A 9A, 05, 3D] +0E44 0E04; [7A 26, 05, 05][7A 9C, 05, 3D] -14A8; [80 73, 05, 05] +0E05; [7A 28, 05, 05] +0E40 0E05; [7A 28, 05, 05][7A 94, 05, 3D] +0E41 0E05; [7A 28, 05, 05][7A 96, 05, 3D] +0E42 0E05; [7A 28, 05, 05][7A 98, 05, 3D] +0E43 0E05; [7A 28, 05, 05][7A 9A, 05, 3D] +0E44 0E05; [7A 28, 05, 05][7A 9C, 05, 3D] -14A9; [80 75, 05, 05] +0E06; [7A 2A, 05, 05] +0E40 0E06; [7A 2A, 05, 05][7A 94, 05, 3D] +0E41 0E06; [7A 2A, 05, 05][7A 96, 05, 3D] +0E42 0E06; [7A 2A, 05, 05][7A 98, 05, 3D] +0E43 0E06; [7A 2A, 05, 05][7A 9A, 05, 3D] +0E44 0E06; [7A 2A, 05, 05][7A 9C, 05, 3D] -14AA; [80 77, 05, 05] +0E07; [7A 2C, 05, 05] +0E40 0E07; [7A 2C, 05, 05][7A 94, 05, 3D] +0E41 0E07; [7A 2C, 05, 05][7A 96, 05, 3D] +0E42 0E07; [7A 2C, 05, 05][7A 98, 05, 3D] +0E43 0E07; [7A 2C, 05, 05][7A 9A, 05, 3D] +0E44 0E07; [7A 2C, 05, 05][7A 9C, 05, 3D] + +0E08; [7A 2E, 05, 05] +0E40 0E08; [7A 2E, 05, 05][7A 94, 05, 3D] +0E41 0E08; [7A 2E, 05, 05][7A 96, 05, 3D] +0E42 0E08; [7A 2E, 05, 05][7A 98, 05, 3D] +0E43 0E08; [7A 2E, 05, 05][7A 9A, 05, 3D] +0E44 0E08; [7A 2E, 05, 05][7A 9C, 05, 3D] + +0E09; [7A 30, 05, 05] +0E40 0E09; [7A 30, 05, 05][7A 94, 05, 3D] +0E41 0E09; [7A 30, 05, 05][7A 96, 05, 3D] +0E42 0E09; [7A 30, 05, 05][7A 98, 05, 3D] +0E43 0E09; [7A 30, 05, 05][7A 9A, 05, 3D] +0E44 0E09; [7A 30, 05, 05][7A 9C, 05, 3D] + +0E0A; [7A 32, 05, 05] +0E40 0E0A; [7A 32, 05, 05][7A 94, 05, 3D] +0E41 0E0A; [7A 32, 05, 05][7A 96, 05, 3D] +0E42 0E0A; [7A 32, 05, 05][7A 98, 05, 3D] +0E43 0E0A; [7A 32, 05, 05][7A 9A, 05, 3D] +0E44 0E0A; [7A 32, 05, 05][7A 9C, 05, 3D] + +0E0B; [7A 34, 05, 05] +0E40 0E0B; [7A 34, 05, 05][7A 94, 05, 3D] +0E41 0E0B; [7A 34, 05, 05][7A 96, 05, 3D] +0E42 0E0B; [7A 34, 05, 05][7A 98, 05, 3D] +0E43 0E0B; [7A 34, 05, 05][7A 9A, 05, 3D] +0E44 0E0B; [7A 34, 05, 05][7A 9C, 05, 3D] + +0E0C; [7A 36, 05, 05] +0E40 0E0C; [7A 36, 05, 05][7A 94, 05, 3D] +0E41 0E0C; [7A 36, 05, 05][7A 96, 05, 3D] +0E42 0E0C; [7A 36, 05, 05][7A 98, 05, 3D] +0E43 0E0C; [7A 36, 05, 05][7A 9A, 05, 3D] +0E44 0E0C; [7A 36, 05, 05][7A 9C, 05, 3D] + +0E0D; [7A 38, 05, 05] +0E40 0E0D; [7A 38, 05, 05][7A 94, 05, 3D] +0E41 0E0D; [7A 38, 05, 05][7A 96, 05, 3D] +0E42 0E0D; [7A 38, 05, 05][7A 98, 05, 3D] +0E43 0E0D; [7A 38, 05, 05][7A 9A, 05, 3D] +0E44 0E0D; [7A 38, 05, 05][7A 9C, 05, 3D] + +0E0E; [7A 3A, 05, 05] +0E40 0E0E; [7A 3A, 05, 05][7A 94, 05, 3D] +0E41 0E0E; [7A 3A, 05, 05][7A 96, 05, 3D] +0E42 0E0E; [7A 3A, 05, 05][7A 98, 05, 3D] +0E43 0E0E; [7A 3A, 05, 05][7A 9A, 05, 3D] +0E44 0E0E; [7A 3A, 05, 05][7A 9C, 05, 3D] + +0E0F; [7A 3C, 05, 05] +0E40 0E0F; [7A 3C, 05, 05][7A 94, 05, 3D] +0E41 0E0F; [7A 3C, 05, 05][7A 96, 05, 3D] +0E42 0E0F; [7A 3C, 05, 05][7A 98, 05, 3D] +0E43 0E0F; [7A 3C, 05, 05][7A 9A, 05, 3D] +0E44 0E0F; [7A 3C, 05, 05][7A 9C, 05, 3D] + +0E10; [7A 3E, 05, 05] +0E40 0E10; [7A 3E, 05, 05][7A 94, 05, 3D] +0E41 0E10; [7A 3E, 05, 05][7A 96, 05, 3D] +0E42 0E10; [7A 3E, 05, 05][7A 98, 05, 3D] +0E43 0E10; [7A 3E, 05, 05][7A 9A, 05, 3D] +0E44 0E10; [7A 3E, 05, 05][7A 9C, 05, 3D] + +0E11; [7A 40, 05, 05] +0E40 0E11; [7A 40, 05, 05][7A 94, 05, 3D] +0E41 0E11; [7A 40, 05, 05][7A 96, 05, 3D] +0E42 0E11; [7A 40, 05, 05][7A 98, 05, 3D] +0E43 0E11; [7A 40, 05, 05][7A 9A, 05, 3D] +0E44 0E11; [7A 40, 05, 05][7A 9C, 05, 3D] + +0E12; [7A 42, 05, 05] +0E40 0E12; [7A 42, 05, 05][7A 94, 05, 3D] +0E41 0E12; [7A 42, 05, 05][7A 96, 05, 3D] +0E42 0E12; [7A 42, 05, 05][7A 98, 05, 3D] +0E43 0E12; [7A 42, 05, 05][7A 9A, 05, 3D] +0E44 0E12; [7A 42, 05, 05][7A 9C, 05, 3D] + +0E13; [7A 44, 05, 05] +0E40 0E13; [7A 44, 05, 05][7A 94, 05, 3D] +0E41 0E13; [7A 44, 05, 05][7A 96, 05, 3D] +0E42 0E13; [7A 44, 05, 05][7A 98, 05, 3D] +0E43 0E13; [7A 44, 05, 05][7A 9A, 05, 3D] +0E44 0E13; [7A 44, 05, 05][7A 9C, 05, 3D] + +0E14; [7A 46, 05, 05] +0E40 0E14; [7A 46, 05, 05][7A 94, 05, 3D] +0E41 0E14; [7A 46, 05, 05][7A 96, 05, 3D] +0E42 0E14; [7A 46, 05, 05][7A 98, 05, 3D] +0E43 0E14; [7A 46, 05, 05][7A 9A, 05, 3D] +0E44 0E14; [7A 46, 05, 05][7A 9C, 05, 3D] + +0E15; [7A 48, 05, 05] +0E40 0E15; [7A 48, 05, 05][7A 94, 05, 3D] +0E41 0E15; [7A 48, 05, 05][7A 96, 05, 3D] +0E42 0E15; [7A 48, 05, 05][7A 98, 05, 3D] +0E43 0E15; [7A 48, 05, 05][7A 9A, 05, 3D] +0E44 0E15; [7A 48, 05, 05][7A 9C, 05, 3D] + +0E16; [7A 4A, 05, 05] +0E40 0E16; [7A 4A, 05, 05][7A 94, 05, 3D] +0E41 0E16; [7A 4A, 05, 05][7A 96, 05, 3D] +0E42 0E16; [7A 4A, 05, 05][7A 98, 05, 3D] +0E43 0E16; [7A 4A, 05, 05][7A 9A, 05, 3D] +0E44 0E16; [7A 4A, 05, 05][7A 9C, 05, 3D] + +0E17; [7A 4C, 05, 05] +0E40 0E17; [7A 4C, 05, 05][7A 94, 05, 3D] +0E41 0E17; [7A 4C, 05, 05][7A 96, 05, 3D] +0E42 0E17; [7A 4C, 05, 05][7A 98, 05, 3D] +0E43 0E17; [7A 4C, 05, 05][7A 9A, 05, 3D] +0E44 0E17; [7A 4C, 05, 05][7A 9C, 05, 3D] + +0E18; [7A 4E, 05, 05] +0E40 0E18; [7A 4E, 05, 05][7A 94, 05, 3D] +0E41 0E18; [7A 4E, 05, 05][7A 96, 05, 3D] +0E42 0E18; [7A 4E, 05, 05][7A 98, 05, 3D] +0E43 0E18; [7A 4E, 05, 05][7A 9A, 05, 3D] +0E44 0E18; [7A 4E, 05, 05][7A 9C, 05, 3D] + +0E19; [7A 50, 05, 05] +0E40 0E19; [7A 50, 05, 05][7A 94, 05, 3D] +0E41 0E19; [7A 50, 05, 05][7A 96, 05, 3D] +0E42 0E19; [7A 50, 05, 05][7A 98, 05, 3D] +0E43 0E19; [7A 50, 05, 05][7A 9A, 05, 3D] +0E44 0E19; [7A 50, 05, 05][7A 9C, 05, 3D] + +0E1A; [7A 52, 05, 05] +0E40 0E1A; [7A 52, 05, 05][7A 94, 05, 3D] +0E41 0E1A; [7A 52, 05, 05][7A 96, 05, 3D] +0E42 0E1A; [7A 52, 05, 05][7A 98, 05, 3D] +0E43 0E1A; [7A 52, 05, 05][7A 9A, 05, 3D] +0E44 0E1A; [7A 52, 05, 05][7A 9C, 05, 3D] + +0E1B; [7A 54, 05, 05] +0E40 0E1B; [7A 54, 05, 05][7A 94, 05, 3D] +0E41 0E1B; [7A 54, 05, 05][7A 96, 05, 3D] +0E42 0E1B; [7A 54, 05, 05][7A 98, 05, 3D] +0E43 0E1B; [7A 54, 05, 05][7A 9A, 05, 3D] +0E44 0E1B; [7A 54, 05, 05][7A 9C, 05, 3D] + +0E1C; [7A 56, 05, 05] +0E40 0E1C; [7A 56, 05, 05][7A 94, 05, 3D] +0E41 0E1C; [7A 56, 05, 05][7A 96, 05, 3D] +0E42 0E1C; [7A 56, 05, 05][7A 98, 05, 3D] +0E43 0E1C; [7A 56, 05, 05][7A 9A, 05, 3D] +0E44 0E1C; [7A 56, 05, 05][7A 9C, 05, 3D] + +0E1D; [7A 58, 05, 05] +0E40 0E1D; [7A 58, 05, 05][7A 94, 05, 3D] +0E41 0E1D; [7A 58, 05, 05][7A 96, 05, 3D] +0E42 0E1D; [7A 58, 05, 05][7A 98, 05, 3D] +0E43 0E1D; [7A 58, 05, 05][7A 9A, 05, 3D] +0E44 0E1D; [7A 58, 05, 05][7A 9C, 05, 3D] + +0E1E; [7A 5A, 05, 05] +0E40 0E1E; [7A 5A, 05, 05][7A 94, 05, 3D] +0E41 0E1E; [7A 5A, 05, 05][7A 96, 05, 3D] +0E42 0E1E; [7A 5A, 05, 05][7A 98, 05, 3D] +0E43 0E1E; [7A 5A, 05, 05][7A 9A, 05, 3D] +0E44 0E1E; [7A 5A, 05, 05][7A 9C, 05, 3D] + +0E1F; [7A 5C, 05, 05] +0E40 0E1F; [7A 5C, 05, 05][7A 94, 05, 3D] +0E41 0E1F; [7A 5C, 05, 05][7A 96, 05, 3D] +0E42 0E1F; [7A 5C, 05, 05][7A 98, 05, 3D] +0E43 0E1F; [7A 5C, 05, 05][7A 9A, 05, 3D] +0E44 0E1F; [7A 5C, 05, 05][7A 9C, 05, 3D] + +0E20; [7A 5E, 05, 05] +0E40 0E20; [7A 5E, 05, 05][7A 94, 05, 3D] +0E41 0E20; [7A 5E, 05, 05][7A 96, 05, 3D] +0E42 0E20; [7A 5E, 05, 05][7A 98, 05, 3D] +0E43 0E20; [7A 5E, 05, 05][7A 9A, 05, 3D] +0E44 0E20; [7A 5E, 05, 05][7A 9C, 05, 3D] + +0E21; [7A 60, 05, 05] +0E40 0E21; [7A 60, 05, 05][7A 94, 05, 3D] +0E41 0E21; [7A 60, 05, 05][7A 96, 05, 3D] +0E42 0E21; [7A 60, 05, 05][7A 98, 05, 3D] +0E43 0E21; [7A 60, 05, 05][7A 9A, 05, 3D] +0E44 0E21; [7A 60, 05, 05][7A 9C, 05, 3D] + +0E22; [7A 62, 05, 05] +0E40 0E22; [7A 62, 05, 05][7A 94, 05, 3D] +0E41 0E22; [7A 62, 05, 05][7A 96, 05, 3D] +0E42 0E22; [7A 62, 05, 05][7A 98, 05, 3D] +0E43 0E22; [7A 62, 05, 05][7A 9A, 05, 3D] +0E44 0E22; [7A 62, 05, 05][7A 9C, 05, 3D] + +0E23; [7A 64, 05, 05] +0E40 0E23; [7A 64, 05, 05][7A 94, 05, 3D] +0E41 0E23; [7A 64, 05, 05][7A 96, 05, 3D] +0E42 0E23; [7A 64, 05, 05][7A 98, 05, 3D] +0E43 0E23; [7A 64, 05, 05][7A 9A, 05, 3D] +0E44 0E23; [7A 64, 05, 05][7A 9C, 05, 3D] + +0E24; [7A 66, 05, 05] +0E40 0E24; [7A 66, 05, 05][7A 94, 05, 3D] +0E41 0E24; [7A 66, 05, 05][7A 96, 05, 3D] +0E42 0E24; [7A 66, 05, 05][7A 98, 05, 3D] +0E43 0E24; [7A 66, 05, 05][7A 9A, 05, 3D] +0E44 0E24; [7A 66, 05, 05][7A 9C, 05, 3D] + +0E25; [7A 68, 05, 05] +0E40 0E25; [7A 68, 05, 05][7A 94, 05, 3D] +0E41 0E25; [7A 68, 05, 05][7A 96, 05, 3D] +0E42 0E25; [7A 68, 05, 05][7A 98, 05, 3D] +0E43 0E25; [7A 68, 05, 05][7A 9A, 05, 3D] +0E44 0E25; [7A 68, 05, 05][7A 9C, 05, 3D] + +0E26; [7A 6A, 05, 05] +0E40 0E26; [7A 6A, 05, 05][7A 94, 05, 3D] +0E41 0E26; [7A 6A, 05, 05][7A 96, 05, 3D] +0E42 0E26; [7A 6A, 05, 05][7A 98, 05, 3D] +0E43 0E26; [7A 6A, 05, 05][7A 9A, 05, 3D] +0E44 0E26; [7A 6A, 05, 05][7A 9C, 05, 3D] + +0E27; [7A 6C, 05, 05] +0E40 0E27; [7A 6C, 05, 05][7A 94, 05, 3D] +0E41 0E27; [7A 6C, 05, 05][7A 96, 05, 3D] +0E42 0E27; [7A 6C, 05, 05][7A 98, 05, 3D] +0E43 0E27; [7A 6C, 05, 05][7A 9A, 05, 3D] +0E44 0E27; [7A 6C, 05, 05][7A 9C, 05, 3D] + +0E28; [7A 6E, 05, 05] +0E40 0E28; [7A 6E, 05, 05][7A 94, 05, 3D] +0E41 0E28; [7A 6E, 05, 05][7A 96, 05, 3D] +0E42 0E28; [7A 6E, 05, 05][7A 98, 05, 3D] +0E43 0E28; [7A 6E, 05, 05][7A 9A, 05, 3D] +0E44 0E28; [7A 6E, 05, 05][7A 9C, 05, 3D] + +0E29; [7A 70, 05, 05] +0E40 0E29; [7A 70, 05, 05][7A 94, 05, 3D] +0E41 0E29; [7A 70, 05, 05][7A 96, 05, 3D] +0E42 0E29; [7A 70, 05, 05][7A 98, 05, 3D] +0E43 0E29; [7A 70, 05, 05][7A 9A, 05, 3D] +0E44 0E29; [7A 70, 05, 05][7A 9C, 05, 3D] + +0E2A; [7A 72, 05, 05] +0E40 0E2A; [7A 72, 05, 05][7A 94, 05, 3D] +0E41 0E2A; [7A 72, 05, 05][7A 96, 05, 3D] +0E42 0E2A; [7A 72, 05, 05][7A 98, 05, 3D] +0E43 0E2A; [7A 72, 05, 05][7A 9A, 05, 3D] +0E44 0E2A; [7A 72, 05, 05][7A 9C, 05, 3D] + +0E2B; [7A 74, 05, 05] +0E40 0E2B; [7A 74, 05, 05][7A 94, 05, 3D] +0E41 0E2B; [7A 74, 05, 05][7A 96, 05, 3D] +0E42 0E2B; [7A 74, 05, 05][7A 98, 05, 3D] +0E43 0E2B; [7A 74, 05, 05][7A 9A, 05, 3D] +0E44 0E2B; [7A 74, 05, 05][7A 9C, 05, 3D] + +0E2C; [7A 76, 05, 05] +0E40 0E2C; [7A 76, 05, 05][7A 94, 05, 3D] +0E41 0E2C; [7A 76, 05, 05][7A 96, 05, 3D] +0E42 0E2C; [7A 76, 05, 05][7A 98, 05, 3D] +0E43 0E2C; [7A 76, 05, 05][7A 9A, 05, 3D] +0E44 0E2C; [7A 76, 05, 05][7A 9C, 05, 3D] + +0E2D; [7A 78, 05, 05] +0E40 0E2D; [7A 78, 05, 05][7A 94, 05, 3D] +0E41 0E2D; [7A 78, 05, 05][7A 96, 05, 3D] +0E42 0E2D; [7A 78, 05, 05][7A 98, 05, 3D] +0E43 0E2D; [7A 78, 05, 05][7A 9A, 05, 3D] +0E44 0E2D; [7A 78, 05, 05][7A 9C, 05, 3D] + +0E2E; [7A 7A, 05, 05] +0E40 0E2E; [7A 7A, 05, 05][7A 94, 05, 3D] +0E41 0E2E; [7A 7A, 05, 05][7A 96, 05, 3D] +0E42 0E2E; [7A 7A, 05, 05][7A 98, 05, 3D] +0E43 0E2E; [7A 7A, 05, 05][7A 9A, 05, 3D] +0E44 0E2E; [7A 7A, 05, 05][7A 9C, 05, 3D] + +0E2F; [7A 7C, 05, 05] + +0E30; [7A 7E, 05, 05] + +0E31; [7A 80, 05, 05] + +0E32; [7A 82, 05, 05] + +0E33; [7A 84, 05, 05] +0E4D 0E32; [7A 84, 05, 05] + +0E34; [7A 86, 05, 05] + +0E35; [7A 88, 05, 05] + +0E36; [7A 8A, 05, 05] + +0E37; [7A 8C, 05, 05] + +0E38; [7A 8E, 05, 05] + +0E39; [7A 90, 05, 05] + +0E3A; [7A 92, 05, 05] + +0E40; [7A 94, 05, 05] + +0E41; [7A 96, 05, 05] + +0E42; [7A 98, 05, 05] + +0E43; [7A 9A, 05, 05] + +0E44; [7A 9C, 05, 05] + +0E45; [7A 9E, 05, 05] + +0E81; [7B 20, 05, 05] +0EC0 0E81; [7B 20, 05, 05][7B 72, 05, 3D] +0EC1 0E81; [7B 20, 05, 05][7B 74, 05, 3D] +0EC2 0E81; [7B 20, 05, 05][7B 76, 05, 3D] +0EC3 0E81; [7B 20, 05, 05][7B 78, 05, 3D] +0EC4 0E81; [7B 20, 05, 05][7B 7A, 05, 3D] + +0E82; [7B 22, 05, 05] +0EC0 0E82; [7B 22, 05, 05][7B 72, 05, 3D] +0EC1 0E82; [7B 22, 05, 05][7B 74, 05, 3D] +0EC2 0E82; [7B 22, 05, 05][7B 76, 05, 3D] +0EC3 0E82; [7B 22, 05, 05][7B 78, 05, 3D] +0EC4 0E82; [7B 22, 05, 05][7B 7A, 05, 3D] + +0E84; [7B 24, 05, 05] +0EC0 0E84; [7B 24, 05, 05][7B 72, 05, 3D] +0EC1 0E84; [7B 24, 05, 05][7B 74, 05, 3D] +0EC2 0E84; [7B 24, 05, 05][7B 76, 05, 3D] +0EC3 0E84; [7B 24, 05, 05][7B 78, 05, 3D] +0EC4 0E84; [7B 24, 05, 05][7B 7A, 05, 3D] + +0E87; [7B 26, 05, 05] +0EC0 0E87; [7B 26, 05, 05][7B 72, 05, 3D] +0EC1 0E87; [7B 26, 05, 05][7B 74, 05, 3D] +0EC2 0E87; [7B 26, 05, 05][7B 76, 05, 3D] +0EC3 0E87; [7B 26, 05, 05][7B 78, 05, 3D] +0EC4 0E87; [7B 26, 05, 05][7B 7A, 05, 3D] + +0E88; [7B 28, 05, 05] +0EC0 0E88; [7B 28, 05, 05][7B 72, 05, 3D] +0EC1 0E88; [7B 28, 05, 05][7B 74, 05, 3D] +0EC2 0E88; [7B 28, 05, 05][7B 76, 05, 3D] +0EC3 0E88; [7B 28, 05, 05][7B 78, 05, 3D] +0EC4 0E88; [7B 28, 05, 05][7B 7A, 05, 3D] + +0E8A; [7B 2A, 05, 05] +0EC0 0E8A; [7B 2A, 05, 05][7B 72, 05, 3D] +0EC1 0E8A; [7B 2A, 05, 05][7B 74, 05, 3D] +0EC2 0E8A; [7B 2A, 05, 05][7B 76, 05, 3D] +0EC3 0E8A; [7B 2A, 05, 05][7B 78, 05, 3D] +0EC4 0E8A; [7B 2A, 05, 05][7B 7A, 05, 3D] + +0E8D; [7B 2C, 05, 05] +0EC0 0E8D; [7B 2C, 05, 05][7B 72, 05, 3D] +0EC1 0E8D; [7B 2C, 05, 05][7B 74, 05, 3D] +0EC2 0E8D; [7B 2C, 05, 05][7B 76, 05, 3D] +0EC3 0E8D; [7B 2C, 05, 05][7B 78, 05, 3D] +0EC4 0E8D; [7B 2C, 05, 05][7B 7A, 05, 3D] + +0E94; [7B 2E, 05, 05] +0EC0 0E94; [7B 2E, 05, 05][7B 72, 05, 3D] +0EC1 0E94; [7B 2E, 05, 05][7B 74, 05, 3D] +0EC2 0E94; [7B 2E, 05, 05][7B 76, 05, 3D] +0EC3 0E94; [7B 2E, 05, 05][7B 78, 05, 3D] +0EC4 0E94; [7B 2E, 05, 05][7B 7A, 05, 3D] + +0E95; [7B 30, 05, 05] +0EC0 0E95; [7B 30, 05, 05][7B 72, 05, 3D] +0EC1 0E95; [7B 30, 05, 05][7B 74, 05, 3D] +0EC2 0E95; [7B 30, 05, 05][7B 76, 05, 3D] +0EC3 0E95; [7B 30, 05, 05][7B 78, 05, 3D] +0EC4 0E95; [7B 30, 05, 05][7B 7A, 05, 3D] + +0E96; [7B 32, 05, 05] +0EC0 0E96; [7B 32, 05, 05][7B 72, 05, 3D] +0EC1 0E96; [7B 32, 05, 05][7B 74, 05, 3D] +0EC2 0E96; [7B 32, 05, 05][7B 76, 05, 3D] +0EC3 0E96; [7B 32, 05, 05][7B 78, 05, 3D] +0EC4 0E96; [7B 32, 05, 05][7B 7A, 05, 3D] + +0E97; [7B 34, 05, 05] +0EC0 0E97; [7B 34, 05, 05][7B 72, 05, 3D] +0EC1 0E97; [7B 34, 05, 05][7B 74, 05, 3D] +0EC2 0E97; [7B 34, 05, 05][7B 76, 05, 3D] +0EC3 0E97; [7B 34, 05, 05][7B 78, 05, 3D] +0EC4 0E97; [7B 34, 05, 05][7B 7A, 05, 3D] + +0E99; [7B 36, 05, 05] +0EC0 0E99; [7B 36, 05, 05][7B 72, 05, 3D] +0EC1 0E99; [7B 36, 05, 05][7B 74, 05, 3D] +0EC2 0E99; [7B 36, 05, 05][7B 76, 05, 3D] +0EC3 0E99; [7B 36, 05, 05][7B 78, 05, 3D] +0EC4 0E99; [7B 36, 05, 05][7B 7A, 05, 3D] + +0E9A; [7B 38, 05, 05] +0EC0 0E9A; [7B 38, 05, 05][7B 72, 05, 3D] +0EC1 0E9A; [7B 38, 05, 05][7B 74, 05, 3D] +0EC2 0E9A; [7B 38, 05, 05][7B 76, 05, 3D] +0EC3 0E9A; [7B 38, 05, 05][7B 78, 05, 3D] +0EC4 0E9A; [7B 38, 05, 05][7B 7A, 05, 3D] + +0E9B; [7B 3A, 05, 05] +0EC0 0E9B; [7B 3A, 05, 05][7B 72, 05, 3D] +0EC1 0E9B; [7B 3A, 05, 05][7B 74, 05, 3D] +0EC2 0E9B; [7B 3A, 05, 05][7B 76, 05, 3D] +0EC3 0E9B; [7B 3A, 05, 05][7B 78, 05, 3D] +0EC4 0E9B; [7B 3A, 05, 05][7B 7A, 05, 3D] + +0E9C; [7B 3C, 05, 05] +0EC0 0E9C; [7B 3C, 05, 05][7B 72, 05, 3D] +0EC1 0E9C; [7B 3C, 05, 05][7B 74, 05, 3D] +0EC2 0E9C; [7B 3C, 05, 05][7B 76, 05, 3D] +0EC3 0E9C; [7B 3C, 05, 05][7B 78, 05, 3D] +0EC4 0E9C; [7B 3C, 05, 05][7B 7A, 05, 3D] + +0E9D; [7B 3E, 05, 05] +0EC0 0E9D; [7B 3E, 05, 05][7B 72, 05, 3D] +0EC1 0E9D; [7B 3E, 05, 05][7B 74, 05, 3D] +0EC2 0E9D; [7B 3E, 05, 05][7B 76, 05, 3D] +0EC3 0E9D; [7B 3E, 05, 05][7B 78, 05, 3D] +0EC4 0E9D; [7B 3E, 05, 05][7B 7A, 05, 3D] + +0E9E; [7B 40, 05, 05] +0EC0 0E9E; [7B 40, 05, 05][7B 72, 05, 3D] +0EC1 0E9E; [7B 40, 05, 05][7B 74, 05, 3D] +0EC2 0E9E; [7B 40, 05, 05][7B 76, 05, 3D] +0EC3 0E9E; [7B 40, 05, 05][7B 78, 05, 3D] +0EC4 0E9E; [7B 40, 05, 05][7B 7A, 05, 3D] + +0E9F; [7B 42, 05, 05] +0EC0 0E9F; [7B 42, 05, 05][7B 72, 05, 3D] +0EC1 0E9F; [7B 42, 05, 05][7B 74, 05, 3D] +0EC2 0E9F; [7B 42, 05, 05][7B 76, 05, 3D] +0EC3 0E9F; [7B 42, 05, 05][7B 78, 05, 3D] +0EC4 0E9F; [7B 42, 05, 05][7B 7A, 05, 3D] + +0EA1; [7B 44, 05, 05] +0EC0 0EA1; [7B 44, 05, 05][7B 72, 05, 3D] +0EC1 0EA1; [7B 44, 05, 05][7B 74, 05, 3D] +0EC2 0EA1; [7B 44, 05, 05][7B 76, 05, 3D] +0EC3 0EA1; [7B 44, 05, 05][7B 78, 05, 3D] +0EC4 0EA1; [7B 44, 05, 05][7B 7A, 05, 3D] + +0EA2; [7B 46, 05, 05] +0EC0 0EA2; [7B 46, 05, 05][7B 72, 05, 3D] +0EC1 0EA2; [7B 46, 05, 05][7B 74, 05, 3D] +0EC2 0EA2; [7B 46, 05, 05][7B 76, 05, 3D] +0EC3 0EA2; [7B 46, 05, 05][7B 78, 05, 3D] +0EC4 0EA2; [7B 46, 05, 05][7B 7A, 05, 3D] + +0EA3; [7B 48, 05, 05] +0EC0 0EA3; [7B 48, 05, 05][7B 72, 05, 3D] +0EC1 0EA3; [7B 48, 05, 05][7B 74, 05, 3D] +0EC2 0EA3; [7B 48, 05, 05][7B 76, 05, 3D] +0EC3 0EA3; [7B 48, 05, 05][7B 78, 05, 3D] +0EC4 0EA3; [7B 48, 05, 05][7B 7A, 05, 3D] + +0EA5; [7B 4A, 05, 05] +0EC0 0EA5; [7B 4A, 05, 05][7B 72, 05, 3D] +0EC1 0EA5; [7B 4A, 05, 05][7B 74, 05, 3D] +0EC2 0EA5; [7B 4A, 05, 05][7B 76, 05, 3D] +0EC3 0EA5; [7B 4A, 05, 05][7B 78, 05, 3D] +0EC4 0EA5; [7B 4A, 05, 05][7B 7A, 05, 3D] + +0EA7; [7B 4C, 05, 05] +0EC0 0EA7; [7B 4C, 05, 05][7B 72, 05, 3D] +0EC1 0EA7; [7B 4C, 05, 05][7B 74, 05, 3D] +0EC2 0EA7; [7B 4C, 05, 05][7B 76, 05, 3D] +0EC3 0EA7; [7B 4C, 05, 05][7B 78, 05, 3D] +0EC4 0EA7; [7B 4C, 05, 05][7B 7A, 05, 3D] + +0EAA; [7B 4E, 05, 05] +0EC0 0EAA; [7B 4E, 05, 05][7B 72, 05, 3D] +0EC1 0EAA; [7B 4E, 05, 05][7B 74, 05, 3D] +0EC2 0EAA; [7B 4E, 05, 05][7B 76, 05, 3D] +0EC3 0EAA; [7B 4E, 05, 05][7B 78, 05, 3D] +0EC4 0EAA; [7B 4E, 05, 05][7B 7A, 05, 3D] + +0EAB; [7B 50, 05, 05] +0EDC; [7B 50, 05, 09][7B 36, 05, 09] +0EC0 0EDC; [7B 50, 05, 09][7B 36, 05, 09][7B 72, 05, 3D] +0EC1 0EDC; [7B 50, 05, 09][7B 36, 05, 09][7B 74, 05, 3D] +0EC2 0EDC; [7B 50, 05, 09][7B 36, 05, 09][7B 76, 05, 3D] +0EC3 0EDC; [7B 50, 05, 09][7B 36, 05, 09][7B 78, 05, 3D] +0EC4 0EDC; [7B 50, 05, 09][7B 36, 05, 09][7B 7A, 05, 3D] +0EDD; [7B 50, 05, 09][7B 44, 05, 09] +0EC0 0EDD; [7B 50, 05, 09][7B 44, 05, 09][7B 72, 05, 3D] +0EC1 0EDD; [7B 50, 05, 09][7B 44, 05, 09][7B 74, 05, 3D] +0EC2 0EDD; [7B 50, 05, 09][7B 44, 05, 09][7B 76, 05, 3D] +0EC3 0EDD; [7B 50, 05, 09][7B 44, 05, 09][7B 78, 05, 3D] +0EC4 0EDD; [7B 50, 05, 09][7B 44, 05, 09][7B 7A, 05, 3D] +0EC0 0EAB; [7B 50, 05, 05][7B 72, 05, 3D] +0EC1 0EAB; [7B 50, 05, 05][7B 74, 05, 3D] +0EC2 0EAB; [7B 50, 05, 05][7B 76, 05, 3D] +0EC3 0EAB; [7B 50, 05, 05][7B 78, 05, 3D] +0EC4 0EAB; [7B 50, 05, 05][7B 7A, 05, 3D] -14AB; [80 79, 05, 05] +0EAD; [7B 52, 05, 05] +0EC0 0EAD; [7B 52, 05, 05][7B 72, 05, 3D] +0EC1 0EAD; [7B 52, 05, 05][7B 74, 05, 3D] +0EC2 0EAD; [7B 52, 05, 05][7B 76, 05, 3D] +0EC3 0EAD; [7B 52, 05, 05][7B 78, 05, 3D] +0EC4 0EAD; [7B 52, 05, 05][7B 7A, 05, 3D] -14AC; [80 7B, 05, 05] +0EAE; [7B 54, 05, 05] +0EC0 0EAE; [7B 54, 05, 05][7B 72, 05, 3D] +0EC1 0EAE; [7B 54, 05, 05][7B 74, 05, 3D] +0EC2 0EAE; [7B 54, 05, 05][7B 76, 05, 3D] +0EC3 0EAE; [7B 54, 05, 05][7B 78, 05, 3D] +0EC4 0EAE; [7B 54, 05, 05][7B 7A, 05, 3D] -14AD; [80 7D, 05, 05] +0EAF; [7B 56, 05, 05] -14AE; [80 7F, 05, 05] +0EB0; [7B 58, 05, 05] -14AF; [80 81, 05, 05] +0EB1; [7B 5A, 05, 05] -14B0; [80 83, 05, 05] +0EB2; [7B 5C, 05, 05] -14B1; [80 85, 05, 05] +0EB3; [7B 5E, 05, 05] +0ECD 0EB2; [7B 5E, 05, 05] -14B2; [80 87, 05, 05] +0EB4; [7B 60, 05, 05] -14B3; [80 89, 05, 05] +0EB5; [7B 62, 05, 05] -14B4; [80 8B, 05, 05] +0EB6; [7B 64, 05, 05] -14B5; [80 8D, 05, 05] +0EB7; [7B 66, 05, 05] -14B6; [80 8F, 05, 05] +0EB8; [7B 68, 05, 05] -14B7; [80 91, 05, 05] +0EB9; [7B 6A, 05, 05] -14B8; [80 93, 05, 05] +0EBB; [7B 6C, 05, 05] -14B9; [80 95, 05, 05] +0EBC; [7B 6E, 05, 05] -14BA; [80 97, 05, 05] +0EBD; [7B 70, 05, 05] -14BB; [80 99, 05, 05] +0EC0; [7B 72, 05, 05] -14BC; [80 9B, 05, 05] +0EC1; [7B 74, 05, 05] -14BD; [80 9D, 05, 05] +0EC2; [7B 76, 05, 05] -14BE; [80 9F, 05, 05] +0EC3; [7B 78, 05, 05] -14BF; [80 A1, 05, 05] +0EC4; [7B 7A, 05, 05] -14C0; [80 A3, 05, 05] +0F40; [7C 20, 05, 05] +0F69; [7C 20, 05, 05][7C 9E, 05, 05] -14C1; [80 A5, 05, 05] +0F90; [7C 22, 05, 05] +0FB9; [7C 22, 05, 05][7C 9E, 05, 05] -14C2; [80 A7, 05, 05] +0F41; [7C 24, 05, 05] -14C3; [80 A9, 05, 05] +0F91; [7C 26, 05, 05] -14C4; [80 AB, 05, 05] +0F42; [7C 28, 05, 05] +0F43; [7C 28, 05, 05][7C A6, 05, 05] -14C5; [80 AD, 05, 05] +0F92; [7C 2A, 05, 05] +0F93; [7C 2A, 05, 05][7C A6, 05, 05] -14C6; [80 AF, 05, 05] +0F44; [7C 2C, 05, 05] -14C7; [80 B1, 05, 05] +0F94; [7C 2E, 05, 05] -14C8; [80 B3, 05, 05] +0F45; [7C 30, 05, 05] -14C9; [80 B5, 05, 05] +0F95; [7C 32, 05, 05] -14CA; [80 B7, 05, 05] +0F46; [7C 34, 05, 05] -14CB; [80 B9, 05, 05] +0F96; [7C 36, 05, 05] -14CC; [80 BB, 05, 05] +0F47; [7C 38, 05, 05] -14CD; [80 BD, 05, 05] +0F97; [7C 3A, 05, 05] -14CE; [80 BF, 05, 05] +0F49; [7C 3C, 05, 05] -14CF; [80 C1, 05, 05] +0F99; [7C 3E, 05, 05] -14D0; [80 C3, 05, 05] +0F4A; [7C 40, 05, 05] -14D1; [80 C5, 05, 05] +0F9A; [7C 42, 05, 05] -14D2; [80 C7, 05, 05] +0F4B; [7C 44, 05, 05] -14D3; [80 C9, 05, 05] +0F9B; [7C 46, 05, 05] -14D4; [80 CB, 05, 05] +0F4C; [7C 48, 05, 05] +0F4D; [7C 48, 05, 05][7C A6, 05, 05] -14D5; [80 CD, 05, 05] +0F9C; [7C 4A, 05, 05] +0F9D; [7C 4A, 05, 05][7C A6, 05, 05] -14D6; [80 CF, 05, 05] +0F4E; [7C 4C, 05, 05] -14D7; [80 D1, 05, 05] +0F9E; [7C 4E, 05, 05] -14D8; [80 D3, 05, 05] +0F4F; [7C 50, 05, 05] -14D9; [80 D5, 05, 05] +0F9F; [7C 52, 05, 05] -14DA; [80 D7, 05, 05] +0F50; [7C 54, 05, 05] -14DB; [80 D9, 05, 05] +0FA0; [7C 56, 05, 05] -14DC; [80 DB, 05, 05] +0F51; [7C 58, 05, 05] +0F52; [7C 58, 05, 05][7C A6, 05, 05] -14DD; [80 DD, 05, 05] +0FA1; [7C 5A, 05, 05] +0FA2; [7C 5A, 05, 05][7C A6, 05, 05] -14DE; [80 DF, 05, 05] +0F53; [7C 5C, 05, 05] -14DF; [80 E1, 05, 05] +0FA3; [7C 5E, 05, 05] -14E0; [80 E3, 05, 05] +0F54; [7C 60, 05, 05] -14E1; [80 E5, 05, 05] +0FA4; [7C 62, 05, 05] -14E2; [80 E7, 05, 05] +0F55; [7C 64, 05, 05] -14E3; [80 E9, 05, 05] +0FA5; [7C 66, 05, 05] -14E4; [80 EB, 05, 05] +0F56; [7C 68, 05, 05] +0F57; [7C 68, 05, 05][7C A6, 05, 05] -14E5; [80 ED, 05, 05] +0FA6; [7C 6A, 05, 05] +0FA7; [7C 6A, 05, 05][7C A6, 05, 05] -14E6; [80 EF, 05, 05] +0F58; [7C 6C, 05, 05] -14E7; [80 F1, 05, 05] +0FA8; [7C 6E, 05, 05] -14E8; [80 F3, 05, 05] +0F59; [7C 70, 05, 05] -14E9; [80 F5, 05, 05] +0FA9; [7C 72, 05, 05] -14EA; [80 F7, 05, 05] +0F5A; [7C 74, 05, 05] -14EB; [80 F9, 05, 05] +0FAA; [7C 76, 05, 05] -14EC; [80 FB, 05, 05] +0F5B; [7C 78, 05, 05] +0F5C; [7C 78, 05, 05][7C A6, 05, 05] -14ED; [80 FD, 05, 05] +0FAB; [7C 7A, 05, 05] +0FAC; [7C 7A, 05, 05][7C A6, 05, 05] -14EE; [81 05, 05, 05] +0F5D; [7C 7C, 05, 05] -14EF; [81 07, 05, 05] +0FAD; [7C 7E, 05, 05] +0FBA; [7C 7E, 05, 09][, E4 5D, 09] -14F0; [81 09, 05, 05] +0F5E; [7C 80, 05, 05] -14F1; [81 0B, 05, 05] +0FAE; [7C 82, 05, 05] -14F2; [81 0D, 05, 05] +0F5F; [7C 84, 05, 05] -14F3; [81 0F, 05, 05] +0FAF; [7C 86, 05, 05] -14F4; [81 11, 05, 05] +0F60; [7C 88, 05, 05] -14F5; [81 13, 05, 05] +0FB0; [7C 8A, 05, 05] -14F6; [81 15, 05, 05] +0F61; [7C 8C, 05, 05] -14F7; [81 17, 05, 05] +0FB1; [7C 8E, 05, 05] +0FBB; [7C 8E, 05, 09][, E4 5D, 09] -14F8; [81 19, 05, 05] +0F62; [7C 90, 05, 05] +0F6A; [7C 90, 05, 09][, E4 5D, 09] -14F9; [81 1B, 05, 05] +0FB2; [7C 92, 05, 05] +0FBC; [7C 92, 05, 09][, E4 5D, 09] +0FB2 0F71; [7C 92, 05, 05][7C B4, 05, 05] -14FA; [81 1D, 05, 05] +0F63; [7C 94, 05, 05] -14FB; [81 1F, 05, 05] +0FB3; [7C 96, 05, 05] +0FB3 0F71; [7C 96, 05, 05][7C B4, 05, 05] -14FC; [81 21, 05, 05] +0F64; [7C 98, 05, 05] -14FD; [81 23, 05, 05] +0FB4; [7C 9A, 05, 05] -14FE; [81 25, 05, 05] +0F65; [7C 9C, 05, 05] -14FF; [81 27, 05, 05] +0FB5; [7C 9E, 05, 05] -1500; [81 29, 05, 05] +0F66; [7C A0, 05, 05] -1501; [81 2B, 05, 05] +0FB6; [7C A2, 05, 05] -1502; [81 2D, 05, 05] +0F67; [7C A4, 05, 05] -1503; [81 2F, 05, 05] +0FB7; [7C A6, 05, 05] -1504; [81 31, 05, 05] +0F68; [7C A8, 05, 05] +0F00; [7C A8, 05, 09][7C CE, 05, 09][, E0 4D, 3D] -1505; [81 33, 05, 05] +0FB8; [7C AA, 05, 05] -1506; [81 35, 05, 05] +0F88; [7C AC, 05, 05] -1507; [81 37, 05, 05] +0F89; [7C AE, 05, 05] -1508; [81 39, 05, 05] +0F8A; [7C B0, 05, 05] -1509; [81 3B, 05, 05] +0F8B; [7C B2, 05, 05] -150A; [81 3D, 05, 05] +0F71; [7C B4, 05, 05] -150B; [81 3F, 05, 05] +0F72; [7C B6, 05, 05] -150C; [81 41, 05, 05] +0F71 0F72; [7C B8, 05, 05] +0F73; [7C B8, 05, 05] -150D; [81 43, 05, 05] +0F80; [7C BA, 05, 05] -150E; [81 45, 05, 05] +0F71 0F80; [7C BC, 05, 05] +0F81; [7C BC, 05, 05] -150F; [81 47, 05, 05] +0F74; [7C BE, 05, 05] -1510; [81 49, 05, 05] +0F71 0F74; [7C C0, 05, 05] +0F75; [7C C0, 05, 05] -1511; [81 4B, 05, 05] +0F76; [7C C2, 05, 05] +0FB2 0F80; [7C C2, 05, 05] -1512; [81 4D, 05, 05] +0F77; [7C C4, 05, 05] +0FB2 0F71 0F80; [7C C4, 05, 05] +0FB2 0F81; [7C C4, 05, 05] -1513; [81 4F, 05, 05] +0F78; [7C C6, 05, 05] +0FB3 0F80; [7C C6, 05, 05] -1514; [81 51, 05, 05] +0F79; [7C C8, 05, 05] +0FB3 0F71 0F80; [7C C8, 05, 05] +0FB3 0F81; [7C C8, 05, 05] -1515; [81 53, 05, 05] +0F7A; [7C CA, 05, 05] -1516; [81 55, 05, 05] +0F7B; [7C CC, 05, 05] -1517; [81 57, 05, 05] +0F7C; [7C CE, 05, 05] -1518; [81 59, 05, 05] +0F7D; [7C D0, 05, 05] -1519; [81 5B, 05, 05] +0F84; [7C D2, 05, 05] -151A; [81 5D, 05, 05] +A840; [7D 20, 05, 05] -151B; [81 5F, 05, 05] +A841; [7D 22, 05, 05] -151C; [81 61, 05, 05] +A842; [7D 24, 05, 05] -151D; [81 63, 05, 05] +A843; [7D 26, 05, 05] -151E; [81 65, 05, 05] +A844; [7D 28, 05, 05] -151F; [81 67, 05, 05] +A845; [7D 2A, 05, 05] -1520; [81 69, 05, 05] +A846; [7D 2C, 05, 05] -1521; [81 6B, 05, 05] +A847; [7D 2E, 05, 05] -1522; [81 6D, 05, 05] +A869; [7D 30, 05, 05] -1523; [81 6F, 05, 05] +A86A; [7D 32, 05, 05] -1524; [81 71, 05, 05] +A86B; [7D 34, 05, 05] -1525; [81 73, 05, 05] +A86C; [7D 36, 05, 05] -1526; [81 75, 05, 05] +A848; [7D 38, 05, 05] -1527; [81 77, 05, 05] +A849; [7D 3A, 05, 05] -1528; [81 79, 05, 05] +A84A; [7D 3C, 05, 05] -1529; [81 7B, 05, 05] +A84B; [7D 3E, 05, 05] -152A; [81 7D, 05, 05] +A84C; [7D 40, 05, 05] -152B; [81 7F, 05, 05] +A84D; [7D 42, 05, 05] -152C; [81 81, 05, 05] +A84E; [7D 44, 05, 05] -152D; [81 83, 05, 05] +A84F; [7D 46, 05, 05] -152E; [81 85, 05, 05] +A850; [7D 48, 05, 05] -152F; [81 87, 05, 05] +A851; [7D 4A, 05, 05] -1530; [81 89, 05, 05] +A852; [7D 4C, 05, 05] -1531; [81 8B, 05, 05] +A853; [7D 4E, 05, 05] -1532; [81 8D, 05, 05] +A867; [7D 50, 05, 05] -1533; [81 8F, 05, 05] +A854; [7D 52, 05, 05] -1534; [81 91, 05, 05] +A855; [7D 54, 05, 05] -1535; [81 93, 05, 05] +A856; [7D 56, 05, 05] -1536; [81 95, 05, 05] +A857; [7D 58, 05, 05] -1537; [81 97, 05, 05] +A868; [7D 5A, 05, 05] -1538; [81 99, 05, 05] +A86D; [7D 5C, 05, 05] -1539; [81 9B, 05, 05] +A858; [7D 5E, 05, 05] -153A; [81 9D, 05, 05] +A871; [7D 60, 05, 05] -153B; [81 9F, 05, 05] +A872; [7D 62, 05, 05] -153C; [81 A1, 05, 05] +A859; [7D 64, 05, 05] -153D; [81 A3, 05, 05] +A85A; [7D 66, 05, 05] -153E; [81 A5, 05, 05] +A86E; [7D 68, 05, 05] -153F; [81 A7, 05, 05] +A85B; [7D 6A, 05, 05] -1540; [81 A9, 05, 05] +A85C; [7D 6C, 05, 05] -1541; [81 AB, 05, 05] +A86F; [7D 6E, 05, 05] -1542; [81 AD, 05, 05] +A870; [7D 70, 05, 05] -1543; [81 AF, 05, 05] +A85D; [7D 72, 05, 05] -1544; [81 B1, 05, 05] +A862; [7D 74, 05, 05] -1545; [81 B3, 05, 05] +A863; [7D 76, 05, 05] -1546; [81 B5, 05, 05] +A864; [7D 78, 05, 05] -1547; [81 B7, 05, 05] +A865; [7D 7A, 05, 05] -1548; [81 B9, 05, 05] +A85E; [7D 7C, 05, 05] -1549; [81 BB, 05, 05] +A85F; [7D 7E, 05, 05] -154A; [81 BD, 05, 05] +A860; [7D 80, 05, 05] -154B; [81 BF, 05, 05] +A861; [7D 82, 05, 05] -154C; [81 C1, 05, 05] +A866; [7D 84, 05, 05] -154D; [81 C3, 05, 05] +A873; [7D 86, 05, 05] -154E; [81 C5, 05, 05] +1900; [7E 20, 05, 05] -154F; [81 C7, 05, 05] +1901; [7E 22, 05, 05] -1550; [81 C9, 05, 05] +1902; [7E 24, 05, 05] -1551; [81 CB, 05, 05] +1903; [7E 26, 05, 05] -1552; [81 CD, 05, 05] +1904; [7E 28, 05, 05] -1553; [81 CF, 05, 05] +1905; [7E 2A, 05, 05] -1554; [81 D1, 05, 05] +1906; [7E 2C, 05, 05] -1555; [81 D3, 05, 05] +1907; [7E 2E, 05, 05] -1556; [81 D5, 05, 05] +1908; [7E 30, 05, 05] -1557; [81 D7, 05, 05] +1909; [7E 32, 05, 05] -1558; [81 D9, 05, 05] +190A; [7E 34, 05, 05] -1559; [81 DB, 05, 05] +190B; [7E 36, 05, 05] -155A; [81 DD, 05, 05] +190C; [7E 38, 05, 05] -155B; [81 DF, 05, 05] +190D; [7E 3A, 05, 05] -155C; [81 E1, 05, 05] +190E; [7E 3C, 05, 05] -155D; [81 E3, 05, 05] +190F; [7E 3E, 05, 05] -155E; [81 E5, 05, 05] +1910; [7E 40, 05, 05] -155F; [81 E7, 05, 05] +1911; [7E 42, 05, 05] -1560; [81 E9, 05, 05] +1912; [7E 44, 05, 05] -1561; [81 EB, 05, 05] +1913; [7E 46, 05, 05] -1562; [81 ED, 05, 05] +1914; [7E 48, 05, 05] -1563; [81 EF, 05, 05] +1915; [7E 4A, 05, 05] -1564; [81 F1, 05, 05] +1916; [7E 4C, 05, 05] -1565; [81 F3, 05, 05] +1917; [7E 4E, 05, 05] -1566; [81 F5, 05, 05] +1918; [7E 50, 05, 05] -1567; [81 F7, 05, 05] +1919; [7E 52, 05, 05] -1568; [81 F9, 05, 05] +191A; [7E 54, 05, 05] -1569; [81 FB, 05, 05] +191B; [7E 56, 05, 05] -156A; [81 FD, 05, 05] +191C; [7E 58, 05, 05] -156B; [82 05, 05, 05] +1920; [7E 5A, 05, 05] -156C; [82 07, 05, 05] +1921; [7E 5C, 05, 05] -156D; [82 09, 05, 05] +1922; [7E 5E, 05, 05] -156E; [82 0B, 05, 05] +1923; [7E 60, 05, 05] -156F; [82 0D, 05, 05] +1924; [7E 62, 05, 05] -1570; [82 0F, 05, 05] +1925; [7E 64, 05, 05] -1571; [82 11, 05, 05] +1926; [7E 66, 05, 05] -1572; [82 13, 05, 05] +1927; [7E 68, 05, 05] -1573; [82 15, 05, 05] +1928; [7E 6A, 05, 05] -1574; [82 17, 05, 05] +1929; [7E 6C, 05, 05] -1575; [82 19, 05, 05] +192A; [7E 6E, 05, 05] -1576; [82 1B, 05, 05] +192B; [7E 70, 05, 05] -1577; [82 1D, 05, 05] +1930; [7E 72, 05, 05] -1578; [82 1F, 05, 05] +1931; [7E 74, 05, 05] -1579; [82 21, 05, 05] +1932; [7E 76, 05, 05] -157A; [82 23, 05, 05] +1933; [7E 78, 05, 05] -157B; [82 25, 05, 05] +1934; [7E 7A, 05, 05] -157D; [82 27, 05, 05] +1935; [7E 7C, 05, 05] -166F; [82 29, 05, 05] +1936; [7E 7E, 05, 05] -157E; [82 2B, 05, 05] +1937; [7E 80, 05, 05] -157F; [82 2D, 05, 05] +1938; [7E 82, 05, 05] -1580; [82 2F, 05, 05] +1700; [7F 20, 05, 05] -1581; [82 31, 05, 05] +1701; [7F 22, 05, 05] -1582; [82 33, 05, 05] +1702; [7F 24, 05, 05] -1583; [82 35, 05, 05] +1703; [7F 26, 05, 05] -1584; [82 37, 05, 05] +1704; [7F 28, 05, 05] -1585; [82 39, 05, 05] +1705; [7F 2A, 05, 05] -1586; [82 3B, 05, 05] +1706; [7F 2C, 05, 05] -1587; [82 3D, 05, 05] +1707; [7F 2E, 05, 05] -1588; [82 3F, 05, 05] +1708; [7F 30, 05, 05] -1589; [82 41, 05, 05] +1709; [7F 32, 05, 05] -158A; [82 43, 05, 05] +170A; [7F 34, 05, 05] -158B; [82 45, 05, 05] +170B; [7F 36, 05, 05] -158C; [82 47, 05, 05] +170C; [7F 38, 05, 05] -158D; [82 49, 05, 05] +170E; [7F 3A, 05, 05] -1670; [82 4B, 05, 05] +170F; [7F 3C, 05, 05] -158E; [82 4D, 05, 05] +1710; [7F 3E, 05, 05] -158F; [82 4F, 05, 05] +1711; [7F 40, 05, 05] -1590; [82 51, 05, 05] +1712; [7F 42, 05, 05] -1591; [82 53, 05, 05] +1713; [7F 44, 05, 05] -1592; [82 55, 05, 05] +1714; [7F 46, 05, 05] -1593; [82 57, 05, 05] +1720; [80 20, 05, 05] -1594; [82 59, 05, 05] +1721; [80 22, 05, 05] -1595; [82 5B, 05, 05] +1722; [80 24, 05, 05] -1671; [82 5D, 05, 05] +1723; [80 26, 05, 05] -1672; [82 5F, 05, 05] +1724; [80 28, 05, 05] -1673; [82 61, 05, 05] +1725; [80 2A, 05, 05] -1674; [82 63, 05, 05] +1726; [80 2C, 05, 05] -1675; [82 65, 05, 05] +1727; [80 2E, 05, 05] -1676; [82 67, 05, 05] +1728; [80 30, 05, 05] -1596; [82 69, 05, 05] +1729; [80 32, 05, 05] -1597; [82 6B, 05, 05] +172A; [80 34, 05, 05] -1598; [82 6D, 05, 05] +172B; [80 36, 05, 05] -1599; [82 6F, 05, 05] +172C; [80 38, 05, 05] -159A; [82 71, 05, 05] +172D; [80 3A, 05, 05] -159B; [82 73, 05, 05] +172E; [80 3C, 05, 05] -159C; [82 75, 05, 05] +172F; [80 3E, 05, 05] -159D; [82 77, 05, 05] +1730; [80 40, 05, 05] -159E; [82 79, 05, 05] +1731; [80 42, 05, 05] -159F; [82 7B, 05, 05] +1732; [80 44, 05, 05] -15A0; [82 7D, 05, 05] +1733; [80 46, 05, 05] -15A1; [82 7F, 05, 05] +1734; [80 48, 05, 05] -15A2; [82 81, 05, 05] +1740; [81 20, 05, 05] -15A3; [82 83, 05, 05] +1741; [81 22, 05, 05] -15A4; [82 85, 05, 05] +1742; [81 24, 05, 05] -15A5; [82 87, 05, 05] +1743; [81 26, 05, 05] -15A6; [82 89, 05, 05] +1744; [81 28, 05, 05] -157C; [82 8B, 05, 05] +1745; [81 2A, 05, 05] -15A7; [82 8D, 05, 05] +1746; [81 2C, 05, 05] -15A8; [82 8F, 05, 05] +1747; [81 2E, 05, 05] -15A9; [82 91, 05, 05] +1748; [81 30, 05, 05] -15AA; [82 93, 05, 05] +1749; [81 32, 05, 05] -15AB; [82 95, 05, 05] +174A; [81 34, 05, 05] -15AC; [82 97, 05, 05] +174B; [81 36, 05, 05] -15AD; [82 99, 05, 05] +174C; [81 38, 05, 05] -15AE; [82 9B, 05, 05] +174D; [81 3A, 05, 05] -15AF; [82 9D, 05, 05] +174E; [81 3C, 05, 05] -15B0; [82 9F, 05, 05] +174F; [81 3E, 05, 05] -15B1; [82 A1, 05, 05] +1750; [81 40, 05, 05] -15B2; [82 A3, 05, 05] +1751; [81 42, 05, 05] -15B3; [82 A5, 05, 05] +1752; [81 44, 05, 05] -15B4; [82 A7, 05, 05] +1753; [81 46, 05, 05] -15B5; [82 A9, 05, 05] +1760; [82 20, 05, 05] -15B6; [82 AB, 05, 05] +1761; [82 22, 05, 05] -15B7; [82 AD, 05, 05] +1762; [82 24, 05, 05] -15B8; [82 AF, 05, 05] +1763; [82 26, 05, 05] -15B9; [82 B1, 05, 05] +1764; [82 28, 05, 05] -15BA; [82 B3, 05, 05] +1765; [82 2A, 05, 05] -15BB; [82 B5, 05, 05] +1766; [82 2C, 05, 05] -15BC; [82 B7, 05, 05] +1767; [82 2E, 05, 05] -15BD; [82 B9, 05, 05] +1768; [82 30, 05, 05] -15BE; [82 BB, 05, 05] +1769; [82 32, 05, 05] -15BF; [82 BD, 05, 05] +176A; [82 34, 05, 05] -15C0; [82 BF, 05, 05] +176B; [82 36, 05, 05] -15C1; [82 C1, 05, 05] +176C; [82 38, 05, 05] -15C2; [82 C3, 05, 05] +176E; [82 3A, 05, 05] -15C3; [82 C5, 05, 05] +176F; [82 3C, 05, 05] -15C4; [82 C7, 05, 05] +1770; [82 3E, 05, 05] -15C5; [82 C9, 05, 05] +1772; [82 40, 05, 05] -15C6; [82 CB, 05, 05] +1773; [82 42, 05, 05] -15C7; [82 CD, 05, 05] +1A00; [83 20, 05, 05] -15C8; [82 CF, 05, 05] +1A01; [83 22, 05, 05] -15C9; [82 D1, 05, 05] +1A02; [83 24, 05, 05] -15CA; [82 D3, 05, 05] +1A03; [83 26, 05, 05] -15CB; [82 D5, 05, 05] +1A04; [83 28, 05, 05] -15CC; [82 D7, 05, 05] +1A05; [83 2A, 05, 05] -15CD; [82 D9, 05, 05] +1A06; [83 2C, 05, 05] -15CE; [82 DB, 05, 05] +1A07; [83 2E, 05, 05] -15CF; [82 DD, 05, 05] +1A08; [83 30, 05, 05] -15D0; [82 DF, 05, 05] +1A09; [83 32, 05, 05] -15D1; [82 E1, 05, 05] +1A0A; [83 34, 05, 05] -15D2; [82 E3, 05, 05] +1A0B; [83 36, 05, 05] -15D3; [82 E5, 05, 05] +1A0C; [83 38, 05, 05] -15D4; [82 E7, 05, 05] +1A0D; [83 3A, 05, 05] -15D5; [82 E9, 05, 05] +1A0E; [83 3C, 05, 05] -15D6; [82 EB, 05, 05] +1A0F; [83 3E, 05, 05] -15D7; [82 ED, 05, 05] +1A10; [83 40, 05, 05] -15D8; [82 EF, 05, 05] +1A11; [83 42, 05, 05] -15D9; [82 F1, 05, 05] +1A12; [83 44, 05, 05] -15DA; [82 F3, 05, 05] +1A13; [83 46, 05, 05] -15DB; [82 F5, 05, 05] +1A14; [83 48, 05, 05] -15DC; [82 F7, 05, 05] +1A15; [83 4A, 05, 05] -15DD; [82 F9, 05, 05] +1A16; [83 4C, 05, 05] -15DE; [82 FB, 05, 05] +1A17; [83 4E, 05, 05] -15DF; [82 FD, 05, 05] +1A18; [83 50, 05, 05] -15E0; [83 05, 05, 05] +1A19; [83 52, 05, 05] -15E1; [83 07, 05, 05] +1A1A; [83 54, 05, 05] -15E2; [83 09, 05, 05] +1A1B; [83 56, 05, 05] -15E3; [83 0B, 05, 05] +1000; [84 20, 05, 05] -15E4; [83 0D, 05, 05] +1001; [84 22, 05, 05] -15E5; [83 0F, 05, 05] +1002; [84 24, 05, 05] -15E6; [83 11, 05, 05] +1003; [84 26, 05, 05] -15E7; [83 13, 05, 05] +1004; [84 28, 05, 05] -15E8; [83 15, 05, 05] +1005; [84 2A, 05, 05] -15E9; [83 17, 05, 05] +1006; [84 2C, 05, 05] -15EA; [83 19, 05, 05] +1007; [84 2E, 05, 05] -15EB; [83 1B, 05, 05] +1008; [84 30, 05, 05] -15EC; [83 1D, 05, 05] +1009; [84 32, 05, 05] -15ED; [83 1F, 05, 05] +100A; [84 34, 05, 05] -15EE; [83 21, 05, 05] +100B; [84 36, 05, 05] -15EF; [83 23, 05, 05] +100C; [84 38, 05, 05] -15F0; [83 25, 05, 05] +100D; [84 3A, 05, 05] -15F1; [83 27, 05, 05] +100E; [84 3C, 05, 05] -15F2; [83 29, 05, 05] +100F; [84 3E, 05, 05] -15F3; [83 2B, 05, 05] +1010; [84 40, 05, 05] -15F4; [83 2D, 05, 05] +1011; [84 42, 05, 05] -15F5; [83 2F, 05, 05] +1012; [84 44, 05, 05] -15F6; [83 31, 05, 05] +1013; [84 46, 05, 05] -15F7; [83 33, 05, 05] +1014; [84 48, 05, 05] -15F8; [83 35, 05, 05] +1015; [84 4A, 05, 05] -15F9; [83 37, 05, 05] +1016; [84 4C, 05, 05] -15FA; [83 39, 05, 05] +1017; [84 4E, 05, 05] -15FB; [83 3B, 05, 05] +1018; [84 50, 05, 05] -15FC; [83 3D, 05, 05] +1019; [84 52, 05, 05] -15FD; [83 3F, 05, 05] +101A; [84 54, 05, 05] -15FE; [83 41, 05, 05] +101B; [84 56, 05, 05] -15FF; [83 43, 05, 05] +101C; [84 58, 05, 05] -1600; [83 45, 05, 05] +101D; [84 5A, 05, 05] -1601; [83 47, 05, 05] +1050; [84 5C, 05, 05] -1602; [83 49, 05, 05] +1051; [84 5E, 05, 05] -1603; [83 4B, 05, 05] +101E; [84 60, 05, 05] -1604; [83 4D, 05, 05] +101F; [84 62, 05, 05] -1605; [83 4F, 05, 05] +1020; [84 64, 05, 05] -1606; [83 51, 05, 05] +1021; [84 66, 05, 05] -1607; [83 53, 05, 05] +1023; [84 68, 05, 05] -1608; [83 55, 05, 05] +1024; [84 6A, 05, 05] -1609; [83 57, 05, 05] +1025; [84 6C, 05, 05] -160A; [83 59, 05, 05] +1025 102E; [84 6E, 05, 05] +1026; [84 6E, 05, 05] -160B; [83 5B, 05, 05] +1027; [84 70, 05, 05] -160C; [83 5D, 05, 05] +1029; [84 72, 05, 05] -160D; [83 5F, 05, 05] +102A; [84 74, 05, 05] -160E; [83 61, 05, 05] +1052; [84 76, 05, 05] -160F; [83 63, 05, 05] +1053; [84 78, 05, 05] -1610; [83 65, 05, 05] +1054; [84 7A, 05, 05] -1611; [83 67, 05, 05] +1055; [84 7C, 05, 05] -1612; [83 69, 05, 05] +102C; [84 7E, 05, 05] -1613; [83 6B, 05, 05] +102D; [84 80, 05, 05] -1614; [83 6D, 05, 05] +102E; [84 82, 05, 05] -1615; [83 6F, 05, 05] +102F; [84 84, 05, 05] -1616; [83 71, 05, 05] +1030; [84 86, 05, 05] -1617; [83 73, 05, 05] +1031; [84 88, 05, 05] -1618; [83 75, 05, 05] +1032; [84 8A, 05, 05] -1619; [83 77, 05, 05] +1056; [84 8C, 05, 05] -161A; [83 79, 05, 05] +1057; [84 8E, 05, 05] -161B; [83 7B, 05, 05] +1058; [84 90, 05, 05] -161C; [83 7D, 05, 05] +1059; [84 92, 05, 05] -161D; [83 7F, 05, 05] +1039; [84 94, 05, 05] -161E; [83 81, 05, 05] +1780; [85 20, 05, 05] -161F; [83 83, 05, 05] +1781; [85 22, 05, 05] -1620; [83 85, 05, 05] +1782; [85 24, 05, 05] -1621; [83 87, 05, 05] +1783; [85 26, 05, 05] -1622; [83 89, 05, 05] +1784; [85 28, 05, 05] -1623; [83 8B, 05, 05] +1785; [85 2A, 05, 05] -1624; [83 8D, 05, 05] +1786; [85 2C, 05, 05] -1625; [83 8F, 05, 05] +1787; [85 2E, 05, 05] -1626; [83 91, 05, 05] +1788; [85 30, 05, 05] -1627; [83 93, 05, 05] +1789; [85 32, 05, 05] -1628; [83 95, 05, 05] +178A; [85 34, 05, 05] -1629; [83 97, 05, 05] +178B; [85 36, 05, 05] -162A; [83 99, 05, 05] +178C; [85 38, 05, 05] -162B; [83 9B, 05, 05] +178D; [85 3A, 05, 05] -162C; [83 9D, 05, 05] +178E; [85 3C, 05, 05] -162D; [83 9F, 05, 05] +178F; [85 3E, 05, 05] -162E; [83 A1, 05, 05] +1790; [85 40, 05, 05] -162F; [83 A3, 05, 05] +1791; [85 42, 05, 05] -1630; [83 A5, 05, 05] +1792; [85 44, 05, 05] -1631; [83 A7, 05, 05] +1793; [85 46, 05, 05] -1632; [83 A9, 05, 05] +1794; [85 48, 05, 05] -1633; [83 AB, 05, 05] +1795; [85 4A, 05, 05] -1634; [83 AD, 05, 05] +1796; [85 4C, 05, 05] -1635; [83 AF, 05, 05] +1797; [85 4E, 05, 05] -1636; [83 B1, 05, 05] +1798; [85 50, 05, 05] -1637; [83 B3, 05, 05] +1799; [85 52, 05, 05] -1638; [83 B5, 05, 05] +179A; [85 54, 05, 05] -1639; [83 B7, 05, 05] +179B; [85 56, 05, 05] -163A; [83 B9, 05, 05] +179C; [85 58, 05, 05] -163B; [83 BB, 05, 05] +179D; [85 5A, 05, 05] -163C; [83 BD, 05, 05] +179E; [85 5C, 05, 05] -163D; [83 BF, 05, 05] +179F; [85 5E, 05, 05] -163E; [83 C1, 05, 05] +17A0; [85 60, 05, 05] -163F; [83 C3, 05, 05] +17A1; [85 62, 05, 05] -1640; [83 C5, 05, 05] +17A2; [85 64, 05, 05] -1641; [83 C7, 05, 05] +17DC; [85 66, 05, 05] -1642; [83 C9, 05, 05] +17A3; [85 68, 05, 05] -1643; [83 CB, 05, 05] +17A4; [85 6A, 05, 05] -1644; [83 CD, 05, 05] +17A5; [85 6C, 05, 05] -1645; [83 CF, 05, 05] +17A6; [85 6E, 05, 05] -1646; [83 D1, 05, 05] +17A7; [85 70, 05, 05] -1647; [83 D3, 05, 05] +17A8; [85 72, 05, 05] -1648; [83 D5, 05, 05] +17A9; [85 74, 05, 05] -1649; [83 D7, 05, 05] +17AA; [85 76, 05, 05] -164A; [83 D9, 05, 05] +17AB; [85 78, 05, 05] -164B; [83 DB, 05, 05] +17AC; [85 7A, 05, 05] -164C; [83 DD, 05, 05] +17AD; [85 7C, 05, 05] -164D; [83 DF, 05, 05] +17AE; [85 7E, 05, 05] -164E; [83 E1, 05, 05] +17AF; [85 80, 05, 05] -164F; [83 E3, 05, 05] +17B0; [85 82, 05, 05] -1650; [83 E5, 05, 05] +17B1; [85 84, 05, 05] -1651; [83 E7, 05, 05] +17B2; [85 86, 05, 05] -1652; [83 E9, 05, 05] +17B3; [85 88, 05, 05] -1653; [83 EB, 05, 05] +17B4; [85 8A, 05, 05] -1654; [83 ED, 05, 05] +17B5; [85 8C, 05, 05] -1655; [83 EF, 05, 05] +17B6; [85 8E, 05, 05] -1656; [83 F1, 05, 05] +17B7; [85 90, 05, 05] -1657; [83 F3, 05, 05] +17B8; [85 92, 05, 05] -1658; [83 F5, 05, 05] +17B9; [85 94, 05, 05] -1659; [83 F7, 05, 05] +17BA; [85 96, 05, 05] -165A; [83 F9, 05, 05] +17BB; [85 98, 05, 05] -165B; [83 FB, 05, 05] +17BC; [85 9A, 05, 05] -165C; [83 FD, 05, 05] +17BD; [85 9C, 05, 05] -165D; [84 05, 05, 05] +17BE; [85 9E, 05, 05] -165E; [84 07, 05, 05] +17BF; [85 A0, 05, 05] -165F; [84 09, 05, 05] +17C0; [85 A2, 05, 05] -1660; [84 0B, 05, 05] +17C1; [85 A4, 05, 05] -1661; [84 0D, 05, 05] +17C2; [85 A6, 05, 05] -1662; [84 0F, 05, 05] +17C3; [85 A8, 05, 05] -1663; [84 11, 05, 05] +17C4; [85 AA, 05, 05] -1664; [84 13, 05, 05] +17C5; [85 AC, 05, 05] -1665; [84 15, 05, 05] +17D2; [85 AE, 05, 05] -1666; [84 17, 05, 05] +1950; [86 20, 05, 05] -1667; [84 19, 05, 05] +1951; [86 22, 05, 05] -1668; [84 1B, 05, 05] +1952; [86 24, 05, 05] -1669; [84 1D, 05, 05] +1953; [86 26, 05, 05] -166A; [84 1F, 05, 05] +1954; [86 28, 05, 05] -166B; [84 21, 05, 05] +1955; [86 2A, 05, 05] -166C; [84 23, 05, 05] +1956; [86 2C, 05, 05] -1681; [85 20, 05, 05] +1957; [86 2E, 05, 05] -1682; [85 22, 05, 05] +1958; [86 30, 05, 05] -1683; [85 24, 05, 05] +1959; [86 32, 05, 05] -1684; [85 26, 05, 05] +195A; [86 34, 05, 05] -1685; [85 28, 05, 05] +195B; [86 36, 05, 05] -1686; [85 2A, 05, 05] +195C; [86 38, 05, 05] -1687; [85 2C, 05, 05] +195D; [86 3A, 05, 05] -1688; [85 2E, 05, 05] +195E; [86 3C, 05, 05] -1689; [85 30, 05, 05] +195F; [86 3E, 05, 05] -168A; [85 32, 05, 05] +1960; [86 40, 05, 05] -168B; [85 34, 05, 05] +1961; [86 42, 05, 05] -168C; [85 36, 05, 05] +1962; [86 44, 05, 05] -168D; [85 38, 05, 05] +1963; [86 46, 05, 05] -168E; [85 3A, 05, 05] +1964; [86 48, 05, 05] -168F; [85 3C, 05, 05] +1965; [86 4A, 05, 05] -1690; [85 3E, 05, 05] +1966; [86 4C, 05, 05] -1691; [85 40, 05, 05] +1967; [86 4E, 05, 05] -1692; [85 42, 05, 05] +1968; [86 50, 05, 05] -1693; [85 44, 05, 05] +1969; [86 52, 05, 05] -1694; [85 46, 05, 05] +196A; [86 54, 05, 05] -1695; [85 48, 05, 05] +196B; [86 56, 05, 05] -1696; [85 4A, 05, 05] +196C; [86 58, 05, 05] -1697; [85 4C, 05, 05] +196D; [86 5A, 05, 05] -1698; [85 4E, 05, 05] +1970; [86 5C, 05, 05] -1699; [85 50, 05, 05] +1971; [86 5E, 05, 05] -169A; [85 52, 05, 05] +1972; [86 60, 05, 05] -16A0; [86 20, 05, 05] -16A1; [86 20, 05, 09][, E0 8D, 09] +1973; [86 62, 05, 05] -16A2; [86 22, 05, 05] -16A4; [86 22, 05, 09][, E0 8D, 09] -16A5; [86 22, 05, 09][, E0 9D, 09] +1974; [86 64, 05, 05] -16A6; [86 24, 05, 05] -16A7; [86 24, 05, 09][, E0 8D, 09] -16F0; [86 24, 05, 09][86 24, 05, 09] +1980; [87 20, 05, 05] -16A8; [86 26, 05, 05] -16A9; [86 26, 05, 09][, E0 8D, 09] -16AC; [86 26, 05, 09][, E0 9D, 09] -16AD; [86 26, 05, 09][, E0 AD, 09] -16AE; [86 26, 05, 09][, E0 BD, 09] +1981; [87 22, 05, 05] -16AF; [86 28, 05, 05] +1982; [87 24, 05, 05] -16B0; [86 2A, 05, 05] +1983; [87 26, 05, 05] -16B1; [86 2C, 05, 05] +1984; [87 28, 05, 05] -16B2; [86 2E, 05, 05] -16B3; [86 2E, 05, 09][, E0 8D, 09] -16B4; [86 2E, 05, 09][, E0 9D, 09] -16B5; [86 2E, 05, 09][, E0 AD, 09] -16B6; [86 2E, 05, 09][, E0 BD, 09] +1985; [87 2A, 05, 05] -16B7; [86 30, 05, 05] +1986; [87 2C, 05, 05] -16B9; [86 32, 05, 05] -16E9; [86 32, 05, 09][, E0 8D, 09] +1987; [87 2E, 05, 05] -16BA; [86 34, 05, 05] -16BB; [86 34, 05, 09][, E0 8D, 09] -16BC; [86 34, 05, 09][, E0 9D, 09] -16BD; [86 34, 05, 09][, E0 AD, 09] +1988; [87 30, 05, 05] -16BE; [86 36, 05, 05] -16BF; [86 36, 05, 09][, E0 8D, 09] -16C0; [86 36, 05, 09][, E0 9D, 09] +1989; [87 32, 05, 05] -16C1; [86 38, 05, 05] -16C2; [86 38, 05, 09][, E0 8D, 09] +198A; [87 34, 05, 05] -16C3; [86 3A, 05, 05] -16C4; [86 3A, 05, 09][, E0 8D, 09] +198B; [87 36, 05, 05] -16C5; [86 3C, 05, 05] -16C6; [86 3C, 05, 09][, E0 8D, 09] -16EE; [86 3C, 05, 09][86 4E, 05, 09] +198C; [87 38, 05, 05] -16C7; [86 3E, 05, 05] +198D; [87 3A, 05, 05] -16C8; [86 40, 05, 05] -16D5; [86 40, 05, 09][, E0 8D, 09] +198E; [87 3C, 05, 05] -16C9; [86 42, 05, 05] +198F; [87 3E, 05, 05] -16CA; [86 44, 05, 05] -16CB; [86 44, 05, 09][, E0 8D, 09] -16EA; [86 44, 05, 09][, E0 9D, 09] -16CC; [86 44, 05, 09][, E0 AD, 09] -16CD; [86 44, 05, 09][, E0 BD, 09] -16CE; [86 44, 05, 09][, E0 CD, 09] +1990; [87 40, 05, 05] -16CF; [86 46, 05, 05] -16D0; [86 46, 05, 09][, E0 8D, 09] -16D1; [86 46, 05, 09][, E0 9D, 09] +1991; [87 42, 05, 05] -16D2; [86 48, 05, 05] -16D3; [86 48, 05, 09][, E0 8D, 09] -16D4; [86 48, 05, 09][, E0 9D, 09] +1992; [87 44, 05, 05] -16D6; [86 4A, 05, 05] +1993; [87 46, 05, 05] -16D7; [86 4C, 05, 05] -16D8; [86 4C, 05, 09][, E0 8D, 09] -16D9; [86 4C, 05, 09][, E0 9D, 09] -16EF; [86 4C, 05, 09][, E0 8D, 09][86 4C, 05, 3D][, E0 8D, 3D] +1994; [87 48, 05, 05] -16DA; [86 4E, 05, 05] -16DB; [86 4E, 05, 09][, E0 8D, 09] +1995; [87 4A, 05, 05] -16DC; [86 50, 05, 05] -16DD; [86 50, 05, 09][, E0 8D, 09] +1996; [87 4C, 05, 05] -16DE; [86 52, 05, 05] +1997; [87 4E, 05, 05] -16DF; [86 54, 05, 05] +1998; [87 50, 05, 05] -16AA; [86 56, 05, 05] +1999; [87 52, 05, 05] -16AB; [86 58, 05, 05] +199A; [87 54, 05, 05] -16A3; [86 5A, 05, 05] +199B; [87 56, 05, 05] -16E0; [86 5C, 05, 05] +199C; [87 58, 05, 05] +19DE; [87 58, 05, 09][87 80, 05, 09] +19DF; [87 58, 05, 09][87 80, 05, 09][87 96, 05, 3D] -16E3; [86 5E, 05, 05] +199D; [87 5A, 05, 05] -16B8; [86 60, 05, 05] +199E; [87 5C, 05, 05] -16E4; [86 62, 05, 05] +199F; [87 5E, 05, 05] -16E1; [86 64, 05, 05] +19A0; [87 60, 05, 05] -16E2; [86 66, 05, 05] +19A1; [87 62, 05, 05] -16E5; [86 68, 05, 05] +19A2; [87 64, 05, 05] -16E6; [86 6A, 05, 05] -16E7; [86 6A, 05, 09][, E0 8D, 09] -16E8; [86 6A, 05, 09][, E0 9D, 09] +19A3; [87 66, 05, 05] -1100; [87 20, 05, 05] -3131; [87 20, 05, 09] -3260; [87 20, 05, 0D] -FFA1; [87 20, 05, A3] -326E; [87 20, 05, 0D][87 48, 05, 0D] +19A4; [87 68, 05, 05] -1101; [87 22, 05, 05] -3132; [87 22, 05, 09] -FFA2; [87 22, 05, A3] +19A5; [87 6A, 05, 05] -1102; [87 24, 05, 05] -3134; [87 24, 05, 09] -3261; [87 24, 05, 0D] -FFA4; [87 24, 05, A3] -326F; [87 24, 05, 0D][87 48, 05, 0D] +19A6; [87 6C, 05, 05] -1103; [87 26, 05, 05] -3137; [87 26, 05, 09] -3262; [87 26, 05, 0D] -FFA7; [87 26, 05, A3] -3270; [87 26, 05, 0D][87 48, 05, 0D] +19A7; [87 6E, 05, 05] -1104; [87 28, 05, 05] -3138; [87 28, 05, 09] -FFA8; [87 28, 05, A3] +19A8; [87 70, 05, 05] -1105; [87 2A, 05, 05] -3139; [87 2A, 05, 09] -3263; [87 2A, 05, 0D] -FFA9; [87 2A, 05, A3] -3271; [87 2A, 05, 0D][87 48, 05, 0D] +19A9; [87 72, 05, 05] -1106; [87 2C, 05, 05] -3141; [87 2C, 05, 09] -3264; [87 2C, 05, 0D] -FFB1; [87 2C, 05, A3] -3272; [87 2C, 05, 0D][87 48, 05, 0D] +19B0; [87 74, 05, 05] -1107; [87 2E, 05, 05] -3142; [87 2E, 05, 09] -3265; [87 2E, 05, 0D] -FFB2; [87 2E, 05, A3] -3273; [87 2E, 05, 0D][87 48, 05, 0D] +19B1; [87 76, 05, 05] -1108; [87 30, 05, 05] -3143; [87 30, 05, 09] -FFB3; [87 30, 05, A3] +19B2; [87 78, 05, 05] -1109; [87 32, 05, 05] -3145; [87 32, 05, 09] -3266; [87 32, 05, 0D] -FFB5; [87 32, 05, A3] -3274; [87 32, 05, 0D][87 48, 05, 0D] +19B3; [87 7A, 05, 05] -110A; [87 34, 05, 05] -3146; [87 34, 05, 09] -FFB6; [87 34, 05, A3] +19B4; [87 7C, 05, 05] -110B; [87 36, 05, 05] -3147; [87 36, 05, 09] -3267; [87 36, 05, 0D] -FFB7; [87 36, 05, A3] -3275; [87 36, 05, 0D][87 48, 05, 0D] +19B5; [87 7E, 05, 05] -110C; [87 38, 05, 05] -3148; [87 38, 05, 09] -3268; [87 38, 05, 0D] -FFB8; [87 38, 05, A3] -3276; [87 38, 05, 0D][87 48, 05, 0D] -327D; [87 38, 05, 0D][87 62, 05, 0D][87 36, 05, 3D][87 6E, 05, 3D] +19B6; [87 80, 05, 05] -110D; [87 3A, 05, 05] -3149; [87 3A, 05, 09] -FFB9; [87 3A, 05, A3] +19B7; [87 82, 05, 05] -110E; [87 3C, 05, 05] -314A; [87 3C, 05, 09] -3269; [87 3C, 05, 0D] -FFBA; [87 3C, 05, A3] -3277; [87 3C, 05, 0D][87 48, 05, 0D] -327C; [87 3C, 05, 0D][87 48, 05, 0D][87 92, 05, 3D][87 20, 05, 3D][87 58, 05, 3D] +19B8; [87 84, 05, 05] -110F; [87 3E, 05, 05] -314B; [87 3E, 05, 09] -326A; [87 3E, 05, 0D] -FFBB; [87 3E, 05, A3] -3278; [87 3E, 05, 0D][87 48, 05, 0D] +19B9; [87 86, 05, 05] -1110; [87 40, 05, 05] -314C; [87 40, 05, 09] -326B; [87 40, 05, 0D] -FFBC; [87 40, 05, A3] -3279; [87 40, 05, 0D][87 48, 05, 0D] +19BA; [87 88, 05, 05] -1111; [87 42, 05, 05] -314D; [87 42, 05, 09] -326C; [87 42, 05, 0D] -FFBD; [87 42, 05, A3] -327A; [87 42, 05, 0D][87 48, 05, 0D] +19BB; [87 8A, 05, 05] -1112; [87 44, 05, 05] -314E; [87 44, 05, 09] -326D; [87 44, 05, 0D] -FFBE; [87 44, 05, A3] -327B; [87 44, 05, 0D][87 48, 05, 0D] +19BC; [87 8C, 05, 05] -1113; [87 46 10, 05, 05] +19BD; [87 8E, 05, 05] -1114; [87 46 13, 05, 05] -3165; [87 46 13, 05, 09] +19BE; [87 90, 05, 05] -1115; [87 46 16, 05, 05] -3166; [87 46 16, 05, 09] +19BF; [87 92, 05, 05] -1116; [87 46 19, 05, 05] +19C0; [87 94, 05, 05] -1117; [87 46 1C, 05, 05] +19C1; [87 96, 05, 05] -1118; [87 46 1F, 05, 05] +19C2; [87 98, 05, 05] -1119; [87 46 22, 05, 05] +19C3; [87 9A, 05, 05] -111A; [87 46 25, 05, 05] -3140; [87 46 25, 05, 09] -FFB0; [87 46 25, 05, A3] +19C4; [87 9C, 05, 05] -111B; [87 46 28, 05, 05] +19C5; [87 9E, 05, 05] -111C; [87 46 2B, 05, 05] -316E; [87 46 2B, 05, 09] +19C6; [87 A0, 05, 05] -111D; [87 46 2E, 05, 05] -3171; [87 46 2E, 05, 09] +19C7; [87 A2, 05, 05] -111E; [87 46 31, 05, 05] -3172; [87 46 31, 05, 09] +19C8; [87 A4, 05, 05] -111F; [87 46 34, 05, 05] +19C9; [87 A6, 05, 05] -1120; [87 46 37, 05, 05] -3173; [87 46 37, 05, 09] +1B05; [88 20, 05, 05] -1121; [87 46 3A, 05, 05] -3144; [87 46 3A, 05, 09] -FFB4; [87 46 3A, 05, A3] +1B05 1B35; [88 22, 05, 05] +1B06; [88 22, 05, 05] -1122; [87 46 3D, 05, 05] -3174; [87 46 3D, 05, 09] +1B07; [88 24, 05, 05] -1123; [87 46 40, 05, 05] -3175; [87 46 40, 05, 09] +1B07 1B35; [88 26, 05, 05] +1B08; [88 26, 05, 05] -1124; [87 46 43, 05, 05] +1B09; [88 28, 05, 05] -1125; [87 46 46, 05, 05] +1B09 1B35; [88 2A, 05, 05] +1B0A; [88 2A, 05, 05] -1126; [87 46 49, 05, 05] +1B0B; [88 2C, 05, 05] -1127; [87 46 4C, 05, 05] -3176; [87 46 4C, 05, 09] +1B0B 1B35; [88 2E, 05, 05] +1B0C; [88 2E, 05, 05] -1128; [87 46 4F, 05, 05] +1B0D; [88 30, 05, 05] -1129; [87 46 52, 05, 05] -3177; [87 46 52, 05, 09] +1B0D 1B35; [88 32, 05, 05] +1B0E; [88 32, 05, 05] -112A; [87 46 55, 05, 05] +1B0F; [88 34, 05, 05] -112B; [87 46 58, 05, 05] -3178; [87 46 58, 05, 09] +1B10; [88 36, 05, 05] -112C; [87 46 5B, 05, 05] -3179; [87 46 5B, 05, 09] +1B11; [88 38, 05, 05] -112D; [87 46 5E, 05, 05] -317A; [87 46 5E, 05, 09] +1B11 1B35; [88 3A, 05, 05] +1B12; [88 3A, 05, 05] -112E; [87 46 61, 05, 05] -317B; [87 46 61, 05, 09] +1B13; [88 3C, 05, 05] -112F; [87 46 64, 05, 05] -317C; [87 46 64, 05, 09] +1B45; [88 3E, 05, 05] -1130; [87 46 67, 05, 05] +1B46; [88 40, 05, 05] -1131; [87 46 6A, 05, 05] +1B14; [88 42, 05, 05] -1132; [87 46 6D, 05, 05] -317D; [87 46 6D, 05, 09] +1B15; [88 44, 05, 05] -1133; [87 46 70, 05, 05] +1B16; [88 46, 05, 05] -1134; [87 46 73, 05, 05] +1B17; [88 48, 05, 05] -1135; [87 46 76, 05, 05] +1B18; [88 4A, 05, 05] -1136; [87 46 79, 05, 05] -317E; [87 46 79, 05, 09] +1B19; [88 4C, 05, 05] -1137; [87 46 7C, 05, 05] +1B1A; [88 4E, 05, 05] -1138; [87 46 7F, 05, 05] +1B1B; [88 50, 05, 05] -1139; [87 46 82, 05, 05] +1B1C; [88 52, 05, 05] -113A; [87 46 85, 05, 05] +1B1D; [88 54, 05, 05] -113B; [87 46 88, 05, 05] +1B1E; [88 56, 05, 05] -113C; [87 46 8B, 05, 05] +1B1F; [88 58, 05, 05] -113D; [87 46 8E, 05, 05] +1B20; [88 5A, 05, 05] -113E; [87 46 91, 05, 05] +1B21; [88 5C, 05, 05] -113F; [87 46 94, 05, 05] +1B22; [88 5E, 05, 05] -1140; [87 46 97, 05, 05] -317F; [87 46 97, 05, 09] +1B47; [88 60, 05, 05] -1141; [87 46 9A, 05, 05] +1B23; [88 62, 05, 05] -1142; [87 46 9D, 05, 05] +1B24; [88 64, 05, 05] -1143; [87 46 A0, 05, 05] +1B25; [88 66, 05, 05] -1144; [87 46 A3, 05, 05] +1B26; [88 68, 05, 05] -1145; [87 46 A6, 05, 05] +1B27; [88 6A, 05, 05] -1146; [87 46 A9, 05, 05] +1B48; [88 6C, 05, 05] -1147; [87 46 AC, 05, 05] -3180; [87 46 AC, 05, 09] +1B28; [88 6E, 05, 05] -1148; [87 46 AF, 05, 05] +1B29; [88 70, 05, 05] -1149; [87 46 B2, 05, 05] +1B2A; [88 72, 05, 05] -114A; [87 46 B5, 05, 05] +1B2B; [88 74, 05, 05] -114B; [87 46 B8, 05, 05] +1B2C; [88 76, 05, 05] -114C; [87 46 BB, 05, 05] -3181; [87 46 BB, 05, 09] +1B2D; [88 78, 05, 05] -114D; [87 46 BE, 05, 05] +1B2E; [88 7A, 05, 05] -114E; [87 46 C1, 05, 05] +1B2F; [88 7C, 05, 05] -114F; [87 46 C4, 05, 05] +1B49; [88 7E, 05, 05] -1150; [87 46 C7, 05, 05] +1B30; [88 80, 05, 05] -1151; [87 46 CA, 05, 05] +1B31; [88 82, 05, 05] -1152; [87 46 CD, 05, 05] +1B32; [88 84, 05, 05] -1153; [87 46 D0, 05, 05] +1B4A; [88 86, 05, 05] -1154; [87 46 D3, 05, 05] +1B4B; [88 88, 05, 05] -1155; [87 46 D6, 05, 05] +1B33; [88 8A, 05, 05] -1156; [87 46 D9, 05, 05] +1B35; [88 8C, 05, 05] -1157; [87 46 DC, 05, 05] -3184; [87 46 DC, 05, 09] +1B36; [88 8E, 05, 05] -1158; [87 46 DF, 05, 05] -3185; [87 46 DF, 05, 09] +1B37; [88 90, 05, 05] -1159; [87 46 E2, 05, 05] -3186; [87 46 E2, 05, 09] +1B38; [88 92, 05, 05] -115F; [87 46 E5, 05, 05] +1B39; [88 94, 05, 05] -1160; [87 46 E8, 05, 05] -3164; [87 46 E8, 05, 09] -FFA0; [87 46 E8, 05, A3] +1B3A; [88 96, 05, 05] -1161; [87 48, 05, 05] -314F; [87 48, 05, 09] -FFC2; [87 48, 05, A3] +1B3A 1B35; [88 98, 05, 05] +1B3B; [88 98, 05, 05] -1162; [87 4A, 05, 05] -3150; [87 4A, 05, 09] -FFC3; [87 4A, 05, A3] +1B3C; [88 9A, 05, 05] -1163; [87 4C, 05, 05] -3151; [87 4C, 05, 09] -FFC4; [87 4C, 05, A3] +1B3C 1B35; [88 9C, 05, 05] +1B3D; [88 9C, 05, 05] -1164; [87 4E, 05, 05] -3152; [87 4E, 05, 09] -FFC5; [87 4E, 05, A3] +1B3E; [88 9E, 05, 05] -1165; [87 50, 05, 05] -3153; [87 50, 05, 09] -FFC6; [87 50, 05, A3] +1B3F; [88 A0, 05, 05] -1166; [87 52, 05, 05] -3154; [87 52, 05, 09] -FFC7; [87 52, 05, A3] +1B3E 1B35; [88 A2, 05, 05] +1B40; [88 A2, 05, 05] -1167; [87 54, 05, 05] -3155; [87 54, 05, 09] -FFCA; [87 54, 05, A3] +1B3F 1B35; [88 A4, 05, 05] +1B41; [88 A4, 05, 05] -1168; [87 56, 05, 05] -3156; [87 56, 05, 09] -FFCB; [87 56, 05, A3] +1B42; [88 A6, 05, 05] -1169; [87 58, 05, 05] -3157; [87 58, 05, 09] -FFCC; [87 58, 05, A3] +1B42 1B35; [88 A8, 05, 05] +1B43; [88 A8, 05, 05] -116A; [87 5A, 05, 05] -3158; [87 5A, 05, 09] -FFCD; [87 5A, 05, A3] +1B44; [88 AA, 05, 05] -116B; [87 5C, 05, 05] -3159; [87 5C, 05, 09] -FFCE; [87 5C, 05, A3] +1880; [89 20, 05, 05] -116C; [87 5E, 05, 05] -315A; [87 5E, 05, 09] -FFCF; [87 5E, 05, A3] +1881; [89 22, 05, 05] -116D; [87 60, 05, 05] -315B; [87 60, 05, 09] -FFD2; [87 60, 05, A3] +1882; [89 24, 05, 05] -116E; [87 62, 05, 05] -315C; [87 62, 05, 09] -FFD3; [87 62, 05, A3] +1883; [89 26, 05, 05] -116F; [87 64, 05, 05] -315D; [87 64, 05, 09] -FFD4; [87 64, 05, A3] +1884; [89 28, 05, 05] -1170; [87 66, 05, 05] -315E; [87 66, 05, 09] -FFD5; [87 66, 05, A3] +1885; [89 2A, 05, 05] -1171; [87 68, 05, 05] -315F; [87 68, 05, 09] -FFD6; [87 68, 05, A3] +1886; [89 2C, 05, 05] -1172; [87 6A, 05, 05] -3160; [87 6A, 05, 09] -FFD7; [87 6A, 05, A3] +1843; [89 2E, 05, 05] -1173; [87 6C, 05, 05] -3161; [87 6C, 05, 09] -FFDA; [87 6C, 05, A3] +1820; [89 30, 05, 05] -1174; [87 6E, 05, 05] -3162; [87 6E, 05, 09] -FFDB; [87 6E, 05, A3] +1887; [89 32, 05, 05] -1175; [87 70, 05, 05] -3163; [87 70, 05, 09] -FFDC; [87 70, 05, A3] +1821; [89 34, 05, 05] -1176; [87 72 10, 05, 05] +1844; [89 36, 05, 05] -1177; [87 72 13, 05, 05] +185D; [89 38, 05, 05] -1178; [87 72 16, 05, 05] +1822; [89 3A, 05, 05] -1179; [87 72 19, 05, 05] +1845; [89 3C, 05, 05] -117A; [87 72 1C, 05, 05] +185E; [89 3E, 05, 05] -117B; [87 72 1F, 05, 05] +1873; [89 40, 05, 05] -117C; [87 72 22, 05, 05] +1888; [89 42, 05, 05] -117D; [87 72 25, 05, 05] +185F; [89 44, 05, 05] -117E; [87 72 28, 05, 05] +1823; [89 46, 05, 05] -117F; [87 72 2B, 05, 05] +1846; [89 48, 05, 05] -1180; [87 72 2E, 05, 05] +1824; [89 4A, 05, 05] -1181; [87 72 31, 05, 05] +1847; [89 4C, 05, 05] -1182; [87 72 34, 05, 05] +1861; [89 4E, 05, 05] -1183; [87 72 37, 05, 05] +1825; [89 50, 05, 05] -1184; [87 72 3A, 05, 05] -3187; [87 72 3A, 05, 09] +1848; [89 52, 05, 05] -1185; [87 72 3D, 05, 05] -3188; [87 72 3D, 05, 09] +1826; [89 54, 05, 05] -1186; [87 72 40, 05, 05] +1849; [89 56, 05, 05] -1187; [87 72 43, 05, 05] +1860; [89 58, 05, 05] -1188; [87 72 46, 05, 05] -3189; [87 72 46, 05, 09] +1827; [89 5A, 05, 05] -1189; [87 72 49, 05, 05] +1828; [89 5C, 05, 05] -118A; [87 72 4C, 05, 05] +1829; [89 5E, 05, 05] -118B; [87 72 4F, 05, 05] +184A; [89 60, 05, 05] -118C; [87 72 52, 05, 05] +1862; [89 62, 05, 05] -118D; [87 72 55, 05, 05] +188A; [89 64, 05, 05] -118E; [87 72 58, 05, 05] +189B; [89 66, 05, 05] -118F; [87 72 5B, 05, 05] +182A; [89 68, 05, 05] -1190; [87 72 5E, 05, 05] +184B; [89 6A, 05, 05] -1191; [87 72 61, 05, 05] -318A; [87 72 61, 05, 09] +182B; [89 6C, 05, 05] -1192; [87 72 64, 05, 05] -318B; [87 72 64, 05, 09] +184C; [89 6E, 05, 05] -1193; [87 72 67, 05, 05] +1866; [89 70, 05, 05] -1194; [87 72 6A, 05, 05] -318C; [87 72 6A, 05, 09] +182C; [89 72, 05, 05] -1195; [87 72 6D, 05, 05] +184D; [89 74, 05, 05] -1196; [87 72 70, 05, 05] +182D; [89 76, 05, 05] -1197; [87 72 73, 05, 05] +184E; [89 78, 05, 05] -1198; [87 72 76, 05, 05] +1864; [89 7A, 05, 05] -1199; [87 72 79, 05, 05] +189A; [89 7C, 05, 05] -119A; [87 72 7C, 05, 05] +1865; [89 7E, 05, 05] -119B; [87 72 7F, 05, 05] +182E; [89 80, 05, 05] -119C; [87 72 82, 05, 05] +184F; [89 82, 05, 05] -119D; [87 72 85, 05, 05] +182F; [89 84, 05, 05] -119E; [87 72 88, 05, 05] -318D; [87 72 88, 05, 09] +1830; [89 86, 05, 05] -119F; [87 72 8B, 05, 05] +1831; [89 88, 05, 05] -11A0; [87 72 8E, 05, 05] +1867; [89 8A, 05, 05] -11A1; [87 72 91, 05, 05] -318E; [87 72 91, 05, 09] +189C; [89 8C, 05, 05] -11A2; [87 72 94, 05, 05] +189D; [89 8E, 05, 05] -11A8; [87 74, 05, 05] +18A2; [89 90, 05, 05] -11A9; [87 76, 05, 05] +18A4; [89 92, 05, 05] -11AA; [87 78, 05, 05] -3133; [87 78, 05, 09] -FFA3; [87 78, 05, A3] +18A5; [89 94, 05, 05] -11AB; [87 7A, 05, 05] +1832; [89 96, 05, 05] -11AC; [87 7C, 05, 05] -3135; [87 7C, 05, 09] -FFA5; [87 7C, 05, A3] +1850; [89 98, 05, 05] -11AD; [87 7E, 05, 05] -3136; [87 7E, 05, 09] -FFA6; [87 7E, 05, A3] +1868; [89 9A, 05, 05] -11AE; [87 80, 05, 05] +1833; [89 9C, 05, 05] -11AF; [87 82, 05, 05] +1851; [89 9E, 05, 05] -11B0; [87 84, 05, 05] -313A; [87 84, 05, 09] -FFAA; [87 84, 05, A3] +1869; [89 A0, 05, 05] -11B1; [87 86, 05, 05] -313B; [87 86, 05, 09] -FFAB; [87 86, 05, A3] +1834; [89 A2, 05, 05] -11B2; [87 88, 05, 05] -313C; [87 88, 05, 09] -FFAC; [87 88, 05, A3] +1852; [89 A4, 05, 05] -11B3; [87 8A, 05, 05] -313D; [87 8A, 05, 09] -FFAD; [87 8A, 05, A3] +1871; [89 A6, 05, 05] -11B4; [87 8C, 05, 05] -313E; [87 8C, 05, 09] -FFAE; [87 8C, 05, A3] +185C; [89 A8, 05, 05] -11B5; [87 8E, 05, 05] -313F; [87 8E, 05, 09] -FFAF; [87 8E, 05, A3] +188B; [89 AA, 05, 05] -11B6; [87 90, 05, 05] +1835; [89 AC, 05, 05] -11B7; [87 92, 05, 05] +1853; [89 AE, 05, 05] -11B8; [87 94, 05, 05] +186A; [89 B0, 05, 05] -11B9; [87 96, 05, 05] +1877; [89 B2, 05, 05] -11BA; [87 98, 05, 05] +1836; [89 B4, 05, 05] -11BB; [87 9A, 05, 05] +1855; [89 B6, 05, 05] -11BC; [87 9C, 05, 05] +1872; [89 B8, 05, 05] -11BD; [87 9E, 05, 05] +1837; [89 BA, 05, 05] -11BE; [87 A0, 05, 05] +1875; [89 BC, 05, 05] -11BF; [87 A2, 05, 05] +1838; [89 BE, 05, 05] -11C0; [87 A4, 05, 05] +1856; [89 C0, 05, 05] -11C1; [87 A6, 05, 05] +1839; [89 C2, 05, 05] -11C2; [87 A8, 05, 05] +186B; [89 C4, 05, 05] -11C3; [87 AA 10, 05, 05] +1876; [89 C6, 05, 05] -11C4; [87 AA 13, 05, 05] +183A; [89 C8, 05, 05] -11C5; [87 AA 16, 05, 05] +1857; [89 CA, 05, 05] -11C6; [87 AA 19, 05, 05] +1863; [89 CC, 05, 05] -11C7; [87 AA 1C, 05, 05] -3167; [87 AA 1C, 05, 09] +1874; [89 CE, 05, 05] -11C8; [87 AA 1F, 05, 05] -3168; [87 AA 1F, 05, 09] +1889; [89 D0, 05, 05] -11C9; [87 AA 22, 05, 05] +183B; [89 D2, 05, 05] -11CA; [87 AA 25, 05, 05] +183C; [89 D4, 05, 05] -11CB; [87 AA 28, 05, 05] +1854; [89 D6, 05, 05] -11CC; [87 AA 2B, 05, 05] -3169; [87 AA 2B, 05, 09] +186E; [89 D8, 05, 05] -11CD; [87 AA 2E, 05, 05] +183D; [89 DA, 05, 05] -11CE; [87 AA 31, 05, 05] -316A; [87 AA 31, 05, 09] +186F; [89 DC, 05, 05] -11CF; [87 AA 34, 05, 05] +1858; [89 DE, 05, 05] -11D0; [87 AA 37, 05, 05] +186C; [89 E0, 05, 05] -11D1; [87 AA 3A, 05, 05] +183E; [89 E2, 05, 05] -11D2; [87 AA 3D, 05, 05] +1859; [89 E4, 05, 05] -11D3; [87 AA 40, 05, 05] -316B; [87 AA 40, 05, 09] +186D; [89 E6, 05, 05] -11D4; [87 AA 43, 05, 05] +183F; [89 E8, 05, 05] -11D5; [87 AA 46, 05, 05] +1840; [89 EA, 05, 05] -11D6; [87 AA 49, 05, 05] +1841; [89 EC, 05, 05] -11D7; [87 AA 4C, 05, 05] -316C; [87 AA 4C, 05, 09] +1842; [89 EE, 05, 05] -11D8; [87 AA 4F, 05, 05] +185A; [89 F0, 05, 05] -11D9; [87 AA 52, 05, 05] -316D; [87 AA 52, 05, 09] +185B; [89 F2, 05, 05] -11DA; [87 AA 55, 05, 05] +1870; [89 F4, 05, 05] -11DB; [87 AA 58, 05, 05] +188C; [89 F6, 05, 05] -11DC; [87 AA 5B, 05, 05] +189E; [89 F8, 05, 05] -11DD; [87 AA 5E, 05, 05] -316F; [87 AA 5E, 05, 09] +188D; [89 FA, 05, 05] -11DE; [87 AA 61, 05, 05] +188E; [89 FC, 05, 05] -11DF; [87 AA 64, 05, 05] -3170; [87 AA 64, 05, 09] +189F; [89 FE, 05, 05] -11E0; [87 AA 67, 05, 05] +188F; [8A 05, 05, 05] -11E1; [87 AA 6A, 05, 05] +1890; [8A 07, 05, 05] -11E2; [87 AA 6D, 05, 05] +1898; [8A 09, 05, 05] -11E3; [87 AA 70, 05, 05] +18A0; [8A 0B, 05, 05] -11E4; [87 AA 73, 05, 05] +1891; [8A 0D, 05, 05] -11E5; [87 AA 76, 05, 05] +18A1; [8A 0F, 05, 05] -11E6; [87 AA 79, 05, 05] +1892; [8A 11, 05, 05] -11E7; [87 AA 7C, 05, 05] +1893; [8A 13, 05, 05] -11E8; [87 AA 7F, 05, 05] +18A8; [8A 15, 05, 05] -11E9; [87 AA 82, 05, 05] +1894; [8A 17, 05, 05] -11EA; [87 AA 85, 05, 05] +18A3; [8A 19, 05, 05] -11EB; [87 AA 88, 05, 05] +1895; [8A 1B, 05, 05] -11EC; [87 AA 8B, 05, 05] +1899; [8A 1D, 05, 05] -11ED; [87 AA 8E, 05, 05] +1896; [8A 1F, 05, 05] -11EE; [87 AA 91, 05, 05] +1897; [8A 21, 05, 05] -11EF; [87 AA 94, 05, 05] +18A6; [8A 23, 05, 05] -11F0; [87 AA 97, 05, 05] +18A7; [8A 25, 05, 05] -11F1; [87 AA 9A, 05, 05] -3182; [87 AA 9A, 05, 09] +18A9; [8A 27, 05, 05] -11F2; [87 AA 9D, 05, 05] -3183; [87 AA 9D, 05, 09] +13A0; [8B 20, 05, 05] -11F3; [87 AA A0, 05, 05] +13A1; [8B 22, 05, 05] -11F4; [87 AA A3, 05, 05] +13A2; [8B 24, 05, 05] -11F5; [87 AA A6, 05, 05] +13A3; [8B 26, 05, 05] -11F6; [87 AA A9, 05, 05] +13A4; [8B 28, 05, 05] -11F7; [87 AA AC, 05, 05] +13A5; [8B 2A, 05, 05] -11F8; [87 AA AF, 05, 05] +13A6; [8B 2C, 05, 05] -11F9; [87 AA B2, 05, 05] +13A7; [8B 2E, 05, 05] -3041; [88 20, 05, 19] -3042; [88 20, 05, 9B] -30A1; [88 20, 05, 1D] -FF67; [88 20, 05, 1F] -30A2; [88 20, 05, A1] -FF71; [88 20, 05, A3] -32D0; [88 20, 05, 25] -3303; [88 20, 05, 37][23 34, 05, 37][88 70, 05, 3D] -3300; [88 20, 05, 37][88 52, 05, 37][, DC 3D, 3D][23 34, 05, 3D][88 46, 05, 3D] -3301; [88 20, 05, 37][88 70, 05, 37][88 56, 05, 3D][88 20, 05, 3D] -3302; [88 20, 05, 37][88 7E, 05, 37][88 58, 05, 3D][, DC 3D, 3D][88 20, 05, 3D] +13A8; [8B 30, 05, 05] -3043; [88 22, 05, 19] -3044; [88 22, 05, 9B] -30A3; [88 22, 05, 1D] -FF68; [88 22, 05, 1F] -30A4; [88 22, 05, A1] -FF72; [88 22, 05, A3] -32D1; [88 22, 05, 25] -3304; [88 22, 05, 37][88 4A, 05, 37][88 7E, 05, 3D][88 2E, 05, 3D][, DC 2D, 3D] -3305; [88 22, 05, 37][88 7E, 05, 37][88 40, 05, 3D] - -3045; [88 24, 05, 19] -3046; [88 24, 05, 9B] -30A5; [88 24, 05, 1D] -FF69; [88 24, 05, 1F] -30A6; [88 24, 05, A1] -FF73; [88 24, 05, A3] -32D2; [88 24, 05, 25] -3094; [88 24, 05, 9B][, DC 2D, 05] -30F4; [88 24, 05, A1][, DC 2D, 05] -3306; [88 24, 05, 37][88 28, 05, 37][88 7E, 05, 3D] - -3047; [88 26, 05, 19] -3048; [88 26, 05, 9B] -30A7; [88 26, 05, 1D] -FF6A; [88 26, 05, 1F] -30A8; [88 26, 05, A1] -FF74; [88 26, 05, A3] -32D3; [88 26, 05, 25] -3308; [88 26, 05, 37][23 34, 05, 37][88 2A, 05, 3D][23 34, 05, 3D] -3307; [88 26, 05, 37][88 38, 05, 37][88 2E, 05, 3D][23 34, 05, 3D][88 46, 05, 3D][, DC 2D, 3D] - -3049; [88 28, 05, 19] -304A; [88 28, 05, 9B] -30A9; [88 28, 05, 1D] -FF6B; [88 28, 05, 1F] -30AA; [88 28, 05, A1] -FF75; [88 28, 05, A3] -32D4; [88 28, 05, 25] -330A; [88 28, 05, 37][23 34, 05, 37][88 60, 05, 3D] -3309; [88 28, 05, 37][88 7E, 05, 37][88 38, 05, 3D] - -3095; [88 2A, 05, 19] -304B; [88 2A, 05, 9B] -30F5; [88 2A, 05, 1D] -30AB; [88 2A, 05, A1] -FF76; [88 2A, 05, A3] -32D5; [88 2A, 05, 25] -304C; [88 2A, 05, 9B][, DC 2D, 05] -30AC; [88 2A, 05, A1][, DC 2D, 05] -330B; [88 2A, 05, 37][88 22, 05, 37][88 6E, 05, 3D] -330C; [88 2A, 05, 37][88 6C, 05, 37][88 42, 05, 3D][88 46, 05, 3D] -330D; [88 2A, 05, 37][88 74, 05, 37][88 6E, 05, 3D][23 34, 05, 3D] -330E; [88 2A, 05, 37][, DC 2D, 37][88 74, 05, 3D][88 7E, 05, 3D] -330F; [88 2A, 05, 37][, DC 2D, 37][88 7E, 05, 3D][88 5C, 05, 3D] - -304D; [88 2C, 05, 9B] -30AD; [88 2C, 05, A1] -FF77; [88 2C, 05, A3] -32D6; [88 2C, 05, 25] -304E; [88 2C, 05, 9B][, DC 2D, 05] -30AE; [88 2C, 05, A1][, DC 2D, 05] -3310; [88 2C, 05, 37][, DC 2D, 37][88 2A, 05, 3D][, DC 2D, 3D] -3311; [88 2C, 05, 37][, DC 2D, 37][88 4A, 05, 3D][23 34, 05, 3D] -3312; [88 2C, 05, 37][88 68, 05, 37][88 6E, 05, 3D][23 34, 05, 3D] -3313; [88 2C, 05, 37][, DC 2D, 37][88 70, 05, 3D][88 3E, 05, 3D][, DC 2D, 3D][23 34, 05, 3D] -3314; [88 2C, 05, 37][88 74, 05, 37] -3315; [88 2C, 05, 37][88 74, 05, 37][88 2E, 05, 3D][, DC 2D, 3D][88 6C, 05, 3D][88 60, 05, 3D] -3316; [88 2C, 05, 37][88 74, 05, 37][88 62, 05, 3D][23 34, 05, 3D][88 46, 05, 3D][88 70, 05, 3D] -3317; [88 2C, 05, 37][88 74, 05, 37][88 76, 05, 3D][88 42, 05, 3D][88 46, 05, 3D] - -304F; [88 2E, 05, 9B] -31F0; [88 2E, 05, 1D] -30AF; [88 2E, 05, A1] -FF78; [88 2E, 05, A3] -32D7; [88 2E, 05, 25] -3050; [88 2E, 05, 9B][, DC 2D, 05] -30B0; [88 2E, 05, A1][, DC 2D, 05] -3318; [88 2E, 05, 37][, DC 2D, 37][88 6C, 05, 3D][88 60, 05, 3D] -3319; [88 2E, 05, 37][, DC 2D, 37][88 6C, 05, 3D][88 60, 05, 3D][88 46, 05, 3D][88 7E, 05, 3D] -331A; [88 2E, 05, 37][88 70, 05, 37][88 3A, 05, 3D][, DC 2D, 3D][88 22, 05, 3D][88 74, 05, 3D] -331B; [88 2E, 05, 37][88 74, 05, 37][23 34, 05, 3D][88 4E, 05, 3D] - -3096; [88 30, 05, 19] -3051; [88 30, 05, 9B] -30F6; [88 30, 05, 1D] -30B1; [88 30, 05, A1] -FF79; [88 30, 05, A3] -32D8; [88 30, 05, 25] -3052; [88 30, 05, 9B][, DC 2D, 05] -30B2; [88 30, 05, A1][, DC 2D, 05] -331C; [88 30, 05, 37][23 34, 05, 37][88 38, 05, 3D] - -3053; [88 32, 05, 9B] -30B3; [88 32, 05, A1] -FF7A; [88 32, 05, A3] -32D9; [88 32, 05, 25] -3054; [88 32, 05, 9B][, DC 2D, 05] -30B4; [88 32, 05, A1][, DC 2D, 05] -331E; [88 32, 05, 37][23 34, 05, 37][88 5A, 05, 3D][, DC 3D, 3D] -30FF; [88 32, 05, 2B][88 46, 05, 2B] -331D; [88 32, 05, 37][88 70, 05, 37][88 48, 05, 3D] - -3055; [88 34, 05, 9B] -30B5; [88 34, 05, A1] -FF7B; [88 34, 05, A3] -32DA; [88 34, 05, 25] -3056; [88 34, 05, 9B][, DC 2D, 05] -30B6; [88 34, 05, A1][, DC 2D, 05] -331F; [88 34, 05, 37][88 22, 05, 37][88 2E, 05, 3D][88 70, 05, 3D] -3320; [88 34, 05, 37][88 7E, 05, 37][88 40, 05, 3D][23 34, 05, 3D][88 60, 05, 3D] - -3057; [88 36, 05, 9B] -31F1; [88 36, 05, 1D] -30B7; [88 36, 05, A1] -FF7C; [88 36, 05, A3] -32DB; [88 36, 05, 25] -3058; [88 36, 05, 9B][, DC 2D, 05] -30B8; [88 36, 05, A1][, DC 2D, 05] -3006; [88 36, 05, 09][88 62, 05, 09] -3321; [88 36, 05, 37][88 6E, 05, 37][88 7E, 05, 3D][88 2E, 05, 3D][, DC 2D, 3D] - -3059; [88 38, 05, 9B] -31F2; [88 38, 05, 1D] -30B9; [88 38, 05, A1] -FF7D; [88 38, 05, A3] -32DC; [88 38, 05, 25] -305A; [88 38, 05, 9B][, DC 2D, 05] -30BA; [88 38, 05, A1][, DC 2D, 05] - -305B; [88 3A, 05, 9B] -30BB; [88 3A, 05, A1] -FF7E; [88 3A, 05, A3] -32DD; [88 3A, 05, 25] -305C; [88 3A, 05, 9B][, DC 2D, 05] -30BC; [88 3A, 05, A1][, DC 2D, 05] -3322; [88 3A, 05, 37][88 7E, 05, 37][88 40, 05, 3D] -3323; [88 3A, 05, 37][88 7E, 05, 37][88 46, 05, 3D] - -305D; [88 3C, 05, 9B] -30BD; [88 3C, 05, A1] -FF7F; [88 3C, 05, A3] -32DE; [88 3C, 05, 25] -305E; [88 3C, 05, 9B][, DC 2D, 05] -30BE; [88 3C, 05, A1][, DC 2D, 05] - -305F; [88 3E, 05, 9B] -30BF; [88 3E, 05, A1] -FF80; [88 3E, 05, A3] -32DF; [88 3E, 05, 25] -3060; [88 3E, 05, 9B][, DC 2D, 05] -30C0; [88 3E, 05, A1][, DC 2D, 05] -3324; [88 3E, 05, 37][, DC 2D, 37][23 34, 05, 3D][88 38, 05, 3D] - -3061; [88 40, 05, 9B] -30C1; [88 40, 05, A1] -FF81; [88 40, 05, A3] -32E0; [88 40, 05, 25] -3062; [88 40, 05, 9B][, DC 2D, 05] -30C2; [88 40, 05, A1][, DC 2D, 05] - -3063; [88 42, 05, 19] -3064; [88 42, 05, 9B] -30C3; [88 42, 05, 1D] -FF6F; [88 42, 05, 1F] -30C4; [88 42, 05, A1] -FF82; [88 42, 05, A3] -32E1; [88 42, 05, 25] -3065; [88 42, 05, 9B][, DC 2D, 05] -30C5; [88 42, 05, A1][, DC 2D, 05] - -3066; [88 44, 05, 9B] -30C6; [88 44, 05, A1] -FF83; [88 44, 05, A3] -32E2; [88 44, 05, 25] -3067; [88 44, 05, 9B][, DC 2D, 05] -30C7; [88 44, 05, A1][, DC 2D, 05] -3325; [88 44, 05, 37][, DC 2D, 37][88 36, 05, 3D] - -3068; [88 46, 05, 9B] -31F3; [88 46, 05, 1D] -30C8; [88 46, 05, A1] -FF84; [88 46, 05, A3] -32E3; [88 46, 05, 25] -3069; [88 46, 05, 9B][, DC 2D, 05] -30C9; [88 46, 05, A1][, DC 2D, 05] -3326; [88 46, 05, 37][, DC 2D, 37][88 70, 05, 3D] -3327; [88 46, 05, 37][88 7E, 05, 37] - -306A; [88 48, 05, 9B] -30CA; [88 48, 05, A1] -FF85; [88 48, 05, A3] -32E4; [88 48, 05, 25] -3328; [88 48, 05, 37][88 50, 05, 37] - -306B; [88 4A, 05, 9B] -30CB; [88 4A, 05, A1] -FF86; [88 4A, 05, A3] -32E5; [88 4A, 05, 25] - -306C; [88 4C, 05, 9B] -31F4; [88 4C, 05, 1D] -30CC; [88 4C, 05, A1] -FF87; [88 4C, 05, A3] -32E6; [88 4C, 05, 25] - -306D; [88 4E, 05, 9B] -30CD; [88 4E, 05, A1] -FF88; [88 4E, 05, A3] -32E7; [88 4E, 05, 25] - -306E; [88 50, 05, 9B] -30CE; [88 50, 05, A1] -FF89; [88 50, 05, A3] -32E8; [88 50, 05, 25] -3329; [88 50, 05, 37][88 42, 05, 37][88 46, 05, 3D] - -306F; [88 52, 05, 9B] -31F5; [88 52, 05, 1D] -30CF; [88 52, 05, A1] -FF8A; [88 52, 05, A3] -32E9; [88 52, 05, 25] -3070; [88 52, 05, 9B][, DC 2D, 05] -30D0; [88 52, 05, A1][, DC 2D, 05] -3071; [88 52, 05, 9B][, DC 3D, 05] -30D1; [88 52, 05, A1][, DC 3D, 05] -332B; [88 52, 05, 37][, DC 3D, 37][23 34, 05, 3D][88 3A, 05, 3D][88 7E, 05, 3D][88 46, 05, 3D] -332C; [88 52, 05, 37][, DC 3D, 37][23 34, 05, 3D][88 42, 05, 3D] -332D; [88 52, 05, 37][, DC 2D, 37][23 34, 05, 3D][88 72, 05, 3D][88 70, 05, 3D] -332A; [88 52, 05, 37][88 22, 05, 37][88 42, 05, 3D] - -3072; [88 54, 05, 9B] -31F6; [88 54, 05, 1D] -30D2; [88 54, 05, A1] -FF8B; [88 54, 05, A3] -32EA; [88 54, 05, 25] -3073; [88 54, 05, 9B][, DC 2D, 05] -30D3; [88 54, 05, A1][, DC 2D, 05] -3074; [88 54, 05, 9B][, DC 3D, 05] -30D4; [88 54, 05, A1][, DC 3D, 05] -332E; [88 54, 05, 37][, DC 3D, 37][88 20, 05, 3D][88 38, 05, 3D][88 46, 05, 3D][88 70, 05, 3D] -332F; [88 54, 05, 37][, DC 3D, 37][88 2E, 05, 3D][88 70, 05, 3D] -3330; [88 54, 05, 37][, DC 3D, 37][88 32, 05, 3D] -3331; [88 54, 05, 37][, DC 2D, 37][88 70, 05, 3D] - -3075; [88 56, 05, 9B] -31F7; [88 56, 05, 1D] -30D5; [88 56, 05, A1] -FF8C; [88 56, 05, A3] -32EB; [88 56, 05, 25] -3076; [88 56, 05, 9B][, DC 2D, 05] -30D6; [88 56, 05, A1][, DC 2D, 05] -3077; [88 56, 05, 9B][, DC 3D, 05] -30D7; [88 56, 05, A1][, DC 3D, 05] -3332; [88 56, 05, 37][88 20, 05, 37][88 6C, 05, 3D][88 42, 05, 3D][88 46, 05, 3D][, DC 2D, 3D] -3333; [88 56, 05, 37][88 22, 05, 37][23 34, 05, 3D][88 46, 05, 3D] -3334; [88 56, 05, 37][, DC 2D, 37][88 42, 05, 3D][88 36, 05, 3D][88 26, 05, 3D][88 70, 05, 3D] -3335; [88 56, 05, 37][88 6C, 05, 37][88 7E, 05, 3D] - -3078; [88 58, 05, 9B] -31F8; [88 58, 05, 1D] -30D8; [88 58, 05, A1] -FF8D; [88 58, 05, A3] -32EC; [88 58, 05, 25] -3079; [88 58, 05, 9B][, DC 2D, 05] -30D9; [88 58, 05, A1][, DC 2D, 05] -307A; [88 58, 05, 9B][, DC 3D, 05] -30DA; [88 58, 05, A1][, DC 3D, 05] -333B; [88 58, 05, 37][, DC 3D, 37][23 34, 05, 3D][88 36, 05, 3D][, DC 2D, 3D] -333C; [88 58, 05, 37][, DC 2D, 37][23 34, 05, 3D][88 3E, 05, 3D] -3336; [88 58, 05, 37][88 2E, 05, 37][88 3E, 05, 3D][23 34, 05, 3D][88 70, 05, 3D] -3337; [88 58, 05, 37][, DC 3D, 37][88 3C, 05, 3D] -3338; [88 58, 05, 37][, DC 3D, 37][88 4A, 05, 3D][88 54, 05, 3D] -3339; [88 58, 05, 37][88 70, 05, 37][88 42, 05, 3D] -333A; [88 58, 05, 37][, DC 3D, 37][88 7E, 05, 3D][88 38, 05, 3D] - -307B; [88 5A, 05, 9B] -31F9; [88 5A, 05, 1D] -30DB; [88 5A, 05, A1] -FF8E; [88 5A, 05, A3] -32ED; [88 5A, 05, 25] -307C; [88 5A, 05, 9B][, DC 2D, 05] -30DC; [88 5A, 05, A1][, DC 2D, 05] -307D; [88 5A, 05, 9B][, DC 3D, 05] -30DD; [88 5A, 05, A1][, DC 3D, 05] -3341; [88 5A, 05, 37][23 34, 05, 37][88 70, 05, 3D] -3342; [88 5A, 05, 37][23 34, 05, 37][88 7E, 05, 3D] -333D; [88 5A, 05, 37][, DC 3D, 37][88 22, 05, 3D][88 7E, 05, 3D][88 46, 05, 3D] -333E; [88 5A, 05, 37][, DC 2D, 37][88 70, 05, 3D][88 46, 05, 3D] -333F; [88 5A, 05, 37][88 7E, 05, 37] -3340; [88 5A, 05, 37][, DC 3D, 37][88 7E, 05, 3D][88 46, 05, 3D][, DC 2D, 3D] - -307E; [88 5C, 05, 9B] -30DE; [88 5C, 05, A1] -FF8F; [88 5C, 05, A3] -32EE; [88 5C, 05, 25] -3343; [88 5C, 05, 37][88 22, 05, 37][88 2E, 05, 3D][88 74, 05, 3D] -3344; [88 5C, 05, 37][88 22, 05, 37][88 70, 05, 3D] -303C; [88 5C, 05, 09][88 38, 05, 09] -3345; [88 5C, 05, 37][88 42, 05, 37][88 52, 05, 3D] -3346; [88 5C, 05, 37][88 70, 05, 37][88 2E, 05, 3D] -3347; [88 5C, 05, 37][88 7E, 05, 37][88 36, 05, 3D][88 6A, 05, 3D][88 7E, 05, 3D] - -307F; [88 5E, 05, 9B] -30DF; [88 5E, 05, A1] -FF90; [88 5E, 05, A3] -32EF; [88 5E, 05, 25] -3348; [88 5E, 05, 37][88 2E, 05, 37][88 74, 05, 3D][88 7E, 05, 3D] -3349; [88 5E, 05, 37][88 6E, 05, 37] -334A; [88 5E, 05, 37][88 6E, 05, 37][88 52, 05, 3D][, DC 2D, 3D][23 34, 05, 3D][88 70, 05, 3D] - -3080; [88 60, 05, 9B] -31FA; [88 60, 05, 1D] -30E0; [88 60, 05, A1] -FF91; [88 60, 05, A3] -32F0; [88 60, 05, 25] - -3081; [88 62, 05, 9B] -30E1; [88 62, 05, A1] -FF92; [88 62, 05, A3] -32F1; [88 62, 05, 25] -334D; [88 62, 05, 37][23 34, 05, 37][88 46, 05, 3D][88 70, 05, 3D] -334B; [88 62, 05, 37][88 2A, 05, 37][, DC 2D, 3D] -334C; [88 62, 05, 37][88 2A, 05, 37][, DC 2D, 3D][88 46, 05, 3D][88 7E, 05, 3D] - -3082; [88 64, 05, 9B] -30E2; [88 64, 05, A1] -FF93; [88 64, 05, A3] -32F2; [88 64, 05, 25] - -3083; [88 66, 05, 19] -3084; [88 66, 05, 9B] -30E3; [88 66, 05, 1D] -FF6C; [88 66, 05, 1F] -30E4; [88 66, 05, A1] -FF94; [88 66, 05, A3] -32F3; [88 66, 05, 25] -334E; [88 66, 05, 37][23 34, 05, 37][88 46, 05, 3D][, DC 2D, 3D] -334F; [88 66, 05, 37][23 34, 05, 37][88 70, 05, 3D] - -3085; [88 68, 05, 19] -3086; [88 68, 05, 9B] -30E5; [88 68, 05, 1D] -FF6D; [88 68, 05, 1F] -30E6; [88 68, 05, A1] -FF95; [88 68, 05, A3] -32F4; [88 68, 05, 25] -3350; [88 68, 05, 37][88 20, 05, 37][88 7E, 05, 3D] - -3087; [88 6A, 05, 19] -3088; [88 6A, 05, 9B] -30E7; [88 6A, 05, 1D] -FF6E; [88 6A, 05, 1F] -30E8; [88 6A, 05, A1] -FF96; [88 6A, 05, A3] -32F5; [88 6A, 05, 25] -309F; [88 6A, 05, 2B][88 6E, 05, 2B] - -3089; [88 6C, 05, 9B] -31FB; [88 6C, 05, 1D] -30E9; [88 6C, 05, A1] -FF97; [88 6C, 05, A3] -32F6; [88 6C, 05, 25] - -308A; [88 6E, 05, 9B] -31FC; [88 6E, 05, 1D] -30EA; [88 6E, 05, A1] -FF98; [88 6E, 05, A3] -32F7; [88 6E, 05, 25] -3351; [88 6E, 05, 37][88 42, 05, 37][88 46, 05, 3D][88 70, 05, 3D] -3352; [88 6E, 05, 37][88 6C, 05, 37] - -308B; [88 70, 05, 9B] -31FD; [88 70, 05, 1D] -30EB; [88 70, 05, A1] -FF99; [88 70, 05, A3] -32F8; [88 70, 05, 25] -3354; [88 70, 05, 37][23 34, 05, 37][88 56, 05, 3D][, DC 2D, 3D][88 70, 05, 3D] -3353; [88 70, 05, 37][88 54, 05, 37][, DC 3D, 3D][23 34, 05, 3D] - -308C; [88 72, 05, 9B] -31FE; [88 72, 05, 1D] -30EC; [88 72, 05, A1] -FF9A; [88 72, 05, A3] -32F9; [88 72, 05, 25] -3355; [88 72, 05, 37][88 60, 05, 37] -3356; [88 72, 05, 37][88 7E, 05, 37][88 46, 05, 3D][88 30, 05, 3D][, DC 2D, 3D][88 7E, 05, 3D] - -308D; [88 74, 05, 9B] -31FF; [88 74, 05, 1D] -30ED; [88 74, 05, A1] -FF9B; [88 74, 05, A3] -32FA; [88 74, 05, 25] - -308E; [88 76, 05, 19] -308F; [88 76, 05, 9B] -30EE; [88 76, 05, 1D] -30EF; [88 76, 05, A1] -FF9C; [88 76, 05, A3] -32FB; [88 76, 05, 25] -30F7; [88 76, 05, A1][, DC 2D, 05] -3357; [88 76, 05, 37][88 42, 05, 37][88 46, 05, 3D] +13A9; [8B 32, 05, 05] -3090; [88 78, 05, 9B] -30F0; [88 78, 05, A1] -32FC; [88 78, 05, 25] -30F8; [88 78, 05, A1][, DC 2D, 05] +13AA; [8B 34, 05, 05] -3091; [88 7A, 05, 9B] -30F1; [88 7A, 05, A1] -32FD; [88 7A, 05, 25] -30F9; [88 7A, 05, A1][, DC 2D, 05] +13AB; [8B 36, 05, 05] -3092; [88 7C, 05, 9B] -30F2; [88 7C, 05, A1] -FF66; [88 7C, 05, A3] -32FE; [88 7C, 05, 25] -30FA; [88 7C, 05, A1][, DC 2D, 05] +13AC; [8B 38, 05, 05] -3093; [88 7E, 05, 9B] -30F3; [88 7E, 05, A1] -FF9D; [88 7E, 05, A3] +13AD; [8B 3A, 05, 05] -3105; [89 20, 05, 05] -31A0; [89 20, 05, 09][, E0 9D, 09] +13AE; [8B 3C, 05, 05] -3106; [89 22, 05, 05] -31B4; [89 22, 05, 31] +13AF; [8B 3E, 05, 05] -3107; [89 24, 05, 05] +13B0; [8B 40, 05, 05] -3108; [89 26, 05, 05] +13B1; [8B 42, 05, 05] -312A; [89 28, 05, 05] +13B2; [8B 44, 05, 05] -3109; [89 2A, 05, 05] +13B3; [8B 46, 05, 05] -310A; [89 2C, 05, 05] -31B5; [89 2C, 05, 31] +13B4; [8B 48, 05, 05] -310B; [89 2E, 05, 05] +13B5; [8B 4A, 05, 05] -310C; [89 30, 05, 05] +13B6; [8B 4C, 05, 05] -310D; [89 32, 05, 05] -31A3; [89 32, 05, 09][, E0 9D, 09] +13B7; [8B 4E, 05, 05] -310E; [89 34, 05, 05] -31B6; [89 34, 05, 31] +13B8; [8B 50, 05, 05] -312B; [89 36, 05, 05] +13B9; [8B 52, 05, 05] -31AD; [89 38, 05, 05] +13BA; [8B 54, 05, 05] -310F; [89 3A, 05, 05] -31B7; [89 3A, 05, 31] +13BB; [8B 56, 05, 05] -3110; [89 3C, 05, 05] -31A2; [89 3C, 05, 09][, E0 9D, 09] +13BC; [8B 58, 05, 05] -3111; [89 3E, 05, 05] +13BD; [8B 5A, 05, 05] -3112; [89 40, 05, 05] +13BE; [8B 5C, 05, 05] -312C; [89 42, 05, 05] +13BF; [8B 5E, 05, 05] -3113; [89 44, 05, 05] +13C0; [8B 60, 05, 05] -3114; [89 46, 05, 05] +13C1; [8B 62, 05, 05] -3115; [89 48, 05, 05] +13C2; [8B 64, 05, 05] -3116; [89 4A, 05, 05] +13C3; [8B 66, 05, 05] -3117; [89 4C, 05, 05] -31A1; [89 4C, 05, 09][, E0 9D, 09] +13C4; [8B 68, 05, 05] -3118; [89 4E, 05, 05] +13C5; [8B 6A, 05, 05] -3119; [89 50, 05, 05] +13C6; [8B 6C, 05, 05] -311A; [89 52, 05, 05] -31A9; [89 52, 05, 09][, E0 9D, 09] +13C7; [8B 6E, 05, 05] -311B; [89 54, 05, 05] -31A7; [89 54, 05, 09][, E0 9D, 09] +13C8; [8B 70, 05, 05] -31A6; [89 56, 05, 05] +13C9; [8B 72, 05, 05] -311C; [89 58, 05, 05] +13CA; [8B 74, 05, 05] -311D; [89 5A, 05, 05] +13CB; [8B 76, 05, 05] -31A4; [89 5C, 05, 05] -31A5; [89 5C, 05, 09][, E0 9D, 09] +13CC; [8B 78, 05, 05] -311E; [89 5E, 05, 05] -31AE; [89 5E, 05, 09][, E0 9D, 09] +13CD; [8B 7A, 05, 05] -311F; [89 60, 05, 05] +13CE; [8B 7C, 05, 05] -3120; [89 62, 05, 05] -31AF; [89 62, 05, 09][, E0 9D, 09] +13CF; [8B 7E, 05, 05] -3121; [89 64, 05, 05] +13D0; [8B 80, 05, 05] -3122; [89 66, 05, 05] +13D1; [8B 82, 05, 05] -3123; [89 68, 05, 05] +13D2; [8B 84, 05, 05] -3124; [89 6A, 05, 05] +13D3; [8B 86, 05, 05] -31B2; [89 6C, 05, 05] +13D4; [8B 88, 05, 05] -3125; [89 6E, 05, 05] +13D5; [8B 8A, 05, 05] -31B0; [89 70, 05, 05] +13D6; [8B 8C, 05, 05] -31B1; [89 72, 05, 05] +13D7; [8B 8E, 05, 05] -31AC; [89 74, 05, 05] +13D8; [8B 90, 05, 05] -3126; [89 76, 05, 05] +13D9; [8B 92, 05, 05] -3127; [89 78, 05, 05] -31AA; [89 78, 05, 09][, E0 9D, 09] -31B3; [89 78, 05, 2B][, E0 9D, 2B] +13DA; [8B 94, 05, 05] -3128; [89 7A, 05, 05] -31AB; [89 7A, 05, 09][, E0 9D, 09] -31A8; [89 7A, 05, 09][, E0 AD, 09] +13DB; [8B 96, 05, 05] -3129; [89 7C, 05, 05] +13DC; [8B 98, 05, 05] -A000; [8A 20, 05, 05] +13DD; [8B 9A, 05, 05] -A001; [8A 22, 05, 05] +13DE; [8B 9C, 05, 05] -A002; [8A 24, 05, 05] +13DF; [8B 9E, 05, 05] -A003; [8A 26, 05, 05] +13E0; [8B A0, 05, 05] -A004; [8A 28, 05, 05] +13E1; [8B A2, 05, 05] -A005; [8A 2A, 05, 05] +13E2; [8B A4, 05, 05] -A006; [8A 2C, 05, 05] +13E3; [8B A6, 05, 05] -A007; [8A 2E, 05, 05] +13E4; [8B A8, 05, 05] -A008; [8A 30, 05, 05] +13E5; [8B AA, 05, 05] -A009; [8A 32, 05, 05] +13E6; [8B AC, 05, 05] -A00A; [8A 34, 05, 05] +13E7; [8B AE, 05, 05] -A00B; [8A 36, 05, 05] +13E8; [8B B0, 05, 05] -A00C; [8A 38, 05, 05] +13E9; [8B B2, 05, 05] -A00D; [8A 3A, 05, 05] +13EA; [8B B4, 05, 05] -A00E; [8A 3C, 05, 05] +13EB; [8B B6, 05, 05] -A00F; [8A 3E, 05, 05] +13EC; [8B B8, 05, 05] -A010; [8A 40, 05, 05] +13ED; [8B BA, 05, 05] -A011; [8A 42, 05, 05] +13EE; [8B BC, 05, 05] -A012; [8A 44, 05, 05] +13EF; [8B BE, 05, 05] -A013; [8A 46, 05, 05] +13F0; [8B C0, 05, 05] -A014; [8A 48, 05, 05] +13F1; [8B C2, 05, 05] -A015; [8A 4A, 05, 05] +13F2; [8B C4, 05, 05] -A016; [8A 4C, 05, 05] +13F3; [8B C6, 05, 05] -A017; [8A 4E, 05, 05] +13F4; [8B C8, 05, 05] -A018; [8A 50, 05, 05] +1401; [8C 20, 05, 05] -A019; [8A 52, 05, 05] +1402; [8C 22, 05, 05] -A01A; [8A 54, 05, 05] +1403; [8C 24, 05, 05] -A01B; [8A 56, 05, 05] +1404; [8C 26, 05, 05] -A01C; [8A 58, 05, 05] +1405; [8C 28, 05, 05] -A01D; [8A 5A, 05, 05] +1406; [8C 2A, 05, 05] -A01E; [8A 5C, 05, 05] +1407; [8C 2C, 05, 05] -A01F; [8A 5E, 05, 05] +1408; [8C 2E, 05, 05] -A020; [8A 60, 05, 05] +1409; [8C 30, 05, 05] -A021; [8A 62, 05, 05] +140A; [8C 32, 05, 05] -A022; [8A 64, 05, 05] +140B; [8C 34, 05, 05] -A023; [8A 66, 05, 05] +140C; [8C 36, 05, 05] -A024; [8A 68, 05, 05] +140D; [8C 38, 05, 05] -A025; [8A 6A, 05, 05] +140E; [8C 3A, 05, 05] -A026; [8A 6C, 05, 05] +140F; [8C 3C, 05, 05] -A027; [8A 6E, 05, 05] +1410; [8C 3E, 05, 05] -A028; [8A 70, 05, 05] +1411; [8C 40, 05, 05] -A029; [8A 72, 05, 05] +1412; [8C 42, 05, 05] -A02A; [8A 74, 05, 05] +1413; [8C 44, 05, 05] -A02B; [8A 76, 05, 05] +1414; [8C 46, 05, 05] -A02C; [8A 78, 05, 05] +1415; [8C 48, 05, 05] -A02D; [8A 7A, 05, 05] +1416; [8C 4A, 05, 05] -A02E; [8A 7C, 05, 05] +1417; [8C 4C, 05, 05] -A02F; [8A 7E, 05, 05] +1418; [8C 4E, 05, 05] -A030; [8A 80, 05, 05] +1419; [8C 50, 05, 05] -A031; [8A 82, 05, 05] +141A; [8C 52, 05, 05] -A032; [8A 84, 05, 05] +141B; [8C 54, 05, 05] -A033; [8A 86, 05, 05] +141C; [8C 56, 05, 05] -A034; [8A 88, 05, 05] +141D; [8C 58, 05, 05] -A035; [8A 8A, 05, 05] +141E; [8C 5A, 05, 05] -A036; [8A 8C, 05, 05] +141F; [8C 5C, 05, 05] -A037; [8A 8E, 05, 05] +1420; [8C 5E, 05, 05] -A038; [8A 90, 05, 05] +1421; [8C 60, 05, 05] -A039; [8A 92, 05, 05] +1422; [8C 62, 05, 05] -A03A; [8A 94, 05, 05] +1423; [8C 64, 05, 05] -A03B; [8A 96, 05, 05] +1424; [8C 66, 05, 05] -A03C; [8A 98, 05, 05] +1425; [8C 68, 05, 05] -A03D; [8A 9A, 05, 05] +1426; [8C 6A, 05, 05] -A03E; [8A 9C, 05, 05] +1427; [8C 6C, 05, 05] -A03F; [8A 9E, 05, 05] +1428; [8C 6E, 05, 05] -A040; [8A A0, 05, 05] +1429; [8C 70, 05, 05] -A041; [8A A2, 05, 05] +142A; [8C 72, 05, 05] -A042; [8A A4, 05, 05] +142B; [8C 74, 05, 05] -A043; [8A A6, 05, 05] +142C; [8C 76, 05, 05] -A044; [8A A8, 05, 05] +142D; [8C 78, 05, 05] -A045; [8A AA, 05, 05] +142E; [8C 7A, 05, 05] -A046; [8A AC, 05, 05] +142F; [8C 7C, 05, 05] -A047; [8A AE, 05, 05] +1430; [8C 7E, 05, 05] -A048; [8A B0, 05, 05] +1431; [8C 80, 05, 05] -A049; [8A B2, 05, 05] +1432; [8C 82, 05, 05] -A04A; [8A B4, 05, 05] +1433; [8C 84, 05, 05] -A04B; [8A B6, 05, 05] +1434; [8C 86, 05, 05] -A04C; [8A B8, 05, 05] +1435; [8C 88, 05, 05] -A04D; [8A BA, 05, 05] +1436; [8C 8A, 05, 05] -A04E; [8A BC, 05, 05] +1437; [8C 8C, 05, 05] -A04F; [8A BE, 05, 05] +1438; [8C 8E, 05, 05] -A050; [8A C0, 05, 05] +1439; [8C 90, 05, 05] -A051; [8A C2, 05, 05] +143A; [8C 92, 05, 05] -A052; [8A C4, 05, 05] +143B; [8C 94, 05, 05] -A053; [8A C6, 05, 05] +143C; [8C 96, 05, 05] -A054; [8A C8, 05, 05] +143D; [8C 98, 05, 05] -A055; [8A CA, 05, 05] +143E; [8C 9A, 05, 05] -A056; [8A CC, 05, 05] +143F; [8C 9C, 05, 05] -A057; [8A CE, 05, 05] +1440; [8C 9E, 05, 05] -A058; [8A D0, 05, 05] +1441; [8C A0, 05, 05] -A059; [8A D2, 05, 05] +1442; [8C A2, 05, 05] -A05A; [8A D4, 05, 05] +1443; [8C A4, 05, 05] -A05B; [8A D6, 05, 05] +1444; [8C A6, 05, 05] -A05C; [8A D8, 05, 05] +1445; [8C A8, 05, 05] -A05D; [8A DA, 05, 05] +1446; [8C AA, 05, 05] -A05E; [8A DC, 05, 05] +1447; [8C AC, 05, 05] -A05F; [8A DE, 05, 05] +1448; [8C AE, 05, 05] -A060; [8A E0, 05, 05] +1449; [8C B0, 05, 05] -A061; [8A E2, 05, 05] +144A; [8C B2, 05, 05] -A062; [8A E4, 05, 05] +144B; [8C B4, 05, 05] -A063; [8A E6, 05, 05] +144C; [8C B6, 05, 05] -A064; [8A E8, 05, 05] +144D; [8C B8, 05, 05] -A065; [8A EA, 05, 05] +144E; [8C BA, 05, 05] -A066; [8A EC, 05, 05] +144F; [8C BC, 05, 05] -A067; [8A EE, 05, 05] +1450; [8C BE, 05, 05] -A068; [8A F0, 05, 05] +1451; [8C C0, 05, 05] -A069; [8A F2, 05, 05] +1452; [8C C2, 05, 05] -A06A; [8A F4, 05, 05] +1453; [8C C4, 05, 05] -A06B; [8A F6, 05, 05] +1454; [8C C6, 05, 05] -A06C; [8A F8, 05, 05] +1455; [8C C8, 05, 05] -A06D; [8A FA, 05, 05] +1456; [8C CA, 05, 05] -A06E; [8A FC, 05, 05] +1457; [8C CC, 05, 05] -A06F; [8A FE, 05, 05] +1458; [8C CE, 05, 05] -A070; [8B 05, 05, 05] +1459; [8C D0, 05, 05] -A071; [8B 07, 05, 05] +145A; [8C D2, 05, 05] -A072; [8B 09, 05, 05] +145B; [8C D4, 05, 05] -A073; [8B 0B, 05, 05] +145C; [8C D6, 05, 05] -A074; [8B 0D, 05, 05] +145D; [8C D8, 05, 05] -A075; [8B 0F, 05, 05] +145E; [8C DA, 05, 05] -A076; [8B 11, 05, 05] +145F; [8C DC, 05, 05] -A077; [8B 13, 05, 05] +1460; [8C DE, 05, 05] -A078; [8B 15, 05, 05] +1461; [8C E0, 05, 05] -A079; [8B 17, 05, 05] +1462; [8C E2, 05, 05] -A07A; [8B 19, 05, 05] +1463; [8C E4, 05, 05] -A07B; [8B 1B, 05, 05] +1464; [8C E6, 05, 05] -A07C; [8B 1D, 05, 05] +1465; [8C E8, 05, 05] -A07D; [8B 1F, 05, 05] +1466; [8C EA, 05, 05] -A07E; [8B 21, 05, 05] +1467; [8C EC, 05, 05] -A07F; [8B 23, 05, 05] +1468; [8C EE, 05, 05] -A080; [8B 25, 05, 05] +1469; [8C F0, 05, 05] -A081; [8B 27, 05, 05] +146A; [8C F2, 05, 05] -A082; [8B 29, 05, 05] +146B; [8C F4, 05, 05] -A083; [8B 2B, 05, 05] +146C; [8C F6, 05, 05] -A084; [8B 2D, 05, 05] +146D; [8C F8, 05, 05] -A085; [8B 2F, 05, 05] +146E; [8C FA, 05, 05] -A086; [8B 31, 05, 05] +146F; [8C FC, 05, 05] -A087; [8B 33, 05, 05] +1470; [8C FE, 05, 05] -A088; [8B 35, 05, 05] +1471; [8D 05, 05, 05] -A089; [8B 37, 05, 05] +1472; [8D 07, 05, 05] -A08A; [8B 39, 05, 05] +1473; [8D 09, 05, 05] -A08B; [8B 3B, 05, 05] +1474; [8D 0B, 05, 05] -A08C; [8B 3D, 05, 05] +1475; [8D 0D, 05, 05] -A08D; [8B 3F, 05, 05] +1476; [8D 0F, 05, 05] -A08E; [8B 41, 05, 05] +1477; [8D 11, 05, 05] -A08F; [8B 43, 05, 05] +1478; [8D 13, 05, 05] -A090; [8B 45, 05, 05] +1479; [8D 15, 05, 05] -A091; [8B 47, 05, 05] +147A; [8D 17, 05, 05] -A092; [8B 49, 05, 05] +147B; [8D 19, 05, 05] -A093; [8B 4B, 05, 05] +147C; [8D 1B, 05, 05] -A094; [8B 4D, 05, 05] +147D; [8D 1D, 05, 05] -A095; [8B 4F, 05, 05] +147E; [8D 1F, 05, 05] -A096; [8B 51, 05, 05] +147F; [8D 21, 05, 05] -A097; [8B 53, 05, 05] +1480; [8D 23, 05, 05] -A098; [8B 55, 05, 05] +1481; [8D 25, 05, 05] -A099; [8B 57, 05, 05] +1482; [8D 27, 05, 05] -A09A; [8B 59, 05, 05] +1483; [8D 29, 05, 05] -A09B; [8B 5B, 05, 05] +1484; [8D 2B, 05, 05] -A09C; [8B 5D, 05, 05] +1485; [8D 2D, 05, 05] -A09D; [8B 5F, 05, 05] +1486; [8D 2F, 05, 05] -A09E; [8B 61, 05, 05] +1487; [8D 31, 05, 05] -A09F; [8B 63, 05, 05] +1488; [8D 33, 05, 05] -A0A0; [8B 65, 05, 05] +1489; [8D 35, 05, 05] -A0A1; [8B 67, 05, 05] +148A; [8D 37, 05, 05] -A0A2; [8B 69, 05, 05] +148B; [8D 39, 05, 05] -A0A3; [8B 6B, 05, 05] +148C; [8D 3B, 05, 05] -A0A4; [8B 6D, 05, 05] +148D; [8D 3D, 05, 05] -A0A5; [8B 6F, 05, 05] +148E; [8D 3F, 05, 05] -A0A6; [8B 71, 05, 05] +148F; [8D 41, 05, 05] -A0A7; [8B 73, 05, 05] +1490; [8D 43, 05, 05] -A0A8; [8B 75, 05, 05] +1491; [8D 45, 05, 05] -A0A9; [8B 77, 05, 05] +1492; [8D 47, 05, 05] -A0AA; [8B 79, 05, 05] +1493; [8D 49, 05, 05] -A0AB; [8B 7B, 05, 05] +1494; [8D 4B, 05, 05] -A0AC; [8B 7D, 05, 05] +1495; [8D 4D, 05, 05] -A0AD; [8B 7F, 05, 05] +1496; [8D 4F, 05, 05] -A0AE; [8B 81, 05, 05] +1497; [8D 51, 05, 05] -A0AF; [8B 83, 05, 05] +1498; [8D 53, 05, 05] -A0B0; [8B 85, 05, 05] +1499; [8D 55, 05, 05] -A0B1; [8B 87, 05, 05] +149A; [8D 57, 05, 05] -A0B2; [8B 89, 05, 05] +149B; [8D 59, 05, 05] -A0B3; [8B 8B, 05, 05] +149C; [8D 5B, 05, 05] -A0B4; [8B 8D, 05, 05] +149D; [8D 5D, 05, 05] -A0B5; [8B 8F, 05, 05] +149E; [8D 5F, 05, 05] -A0B6; [8B 91, 05, 05] +149F; [8D 61, 05, 05] -A0B7; [8B 93, 05, 05] +14A0; [8D 63, 05, 05] -A0B8; [8B 95, 05, 05] +14A1; [8D 65, 05, 05] -A0B9; [8B 97, 05, 05] +14A2; [8D 67, 05, 05] -A0BA; [8B 99, 05, 05] +14A3; [8D 69, 05, 05] -A0BB; [8B 9B, 05, 05] +14A4; [8D 6B, 05, 05] -A0BC; [8B 9D, 05, 05] +14A5; [8D 6D, 05, 05] -A0BD; [8B 9F, 05, 05] +14A6; [8D 6F, 05, 05] -A0BE; [8B A1, 05, 05] +14A7; [8D 71, 05, 05] -A0BF; [8B A3, 05, 05] +14A8; [8D 73, 05, 05] -A0C0; [8B A5, 05, 05] +14A9; [8D 75, 05, 05] -A0C1; [8B A7, 05, 05] +14AA; [8D 77, 05, 05] -A0C2; [8B A9, 05, 05] +14AB; [8D 79, 05, 05] -A0C3; [8B AB, 05, 05] +14AC; [8D 7B, 05, 05] -A0C4; [8B AD, 05, 05] +14AD; [8D 7D, 05, 05] -A0C5; [8B AF, 05, 05] +14AE; [8D 7F, 05, 05] -A0C6; [8B B1, 05, 05] +14AF; [8D 81, 05, 05] -A0C7; [8B B3, 05, 05] +14B0; [8D 83, 05, 05] -A0C8; [8B B5, 05, 05] +14B1; [8D 85, 05, 05] -A0C9; [8B B7, 05, 05] +14B2; [8D 87, 05, 05] -A0CA; [8B B9, 05, 05] +14B3; [8D 89, 05, 05] -A0CB; [8B BB, 05, 05] +14B4; [8D 8B, 05, 05] -A0CC; [8B BD, 05, 05] +14B5; [8D 8D, 05, 05] -A0CD; [8B BF, 05, 05] +14B6; [8D 8F, 05, 05] -A0CE; [8B C1, 05, 05] +14B7; [8D 91, 05, 05] -A0CF; [8B C3, 05, 05] +14B8; [8D 93, 05, 05] -A0D0; [8B C5, 05, 05] +14B9; [8D 95, 05, 05] -A0D1; [8B C7, 05, 05] +14BA; [8D 97, 05, 05] -A0D2; [8B C9, 05, 05] +14BB; [8D 99, 05, 05] -A0D3; [8B CB, 05, 05] +14BC; [8D 9B, 05, 05] -A0D4; [8B CD, 05, 05] +14BD; [8D 9D, 05, 05] -A0D5; [8B CF, 05, 05] +14BE; [8D 9F, 05, 05] -A0D6; [8B D1, 05, 05] +14BF; [8D A1, 05, 05] -A0D7; [8B D3, 05, 05] +14C0; [8D A3, 05, 05] -A0D8; [8B D5, 05, 05] +14C1; [8D A5, 05, 05] -A0D9; [8B D7, 05, 05] +14C2; [8D A7, 05, 05] -A0DA; [8B D9, 05, 05] +14C3; [8D A9, 05, 05] -A0DB; [8B DB, 05, 05] +14C4; [8D AB, 05, 05] -A0DC; [8B DD, 05, 05] +14C5; [8D AD, 05, 05] -A0DD; [8B DF, 05, 05] +14C6; [8D AF, 05, 05] -A0DE; [8B E1, 05, 05] +14C7; [8D B1, 05, 05] -A0DF; [8B E3, 05, 05] +14C8; [8D B3, 05, 05] -A0E0; [8B E5, 05, 05] +14C9; [8D B5, 05, 05] -A0E1; [8B E7, 05, 05] +14CA; [8D B7, 05, 05] -A0E2; [8B E9, 05, 05] +14CB; [8D B9, 05, 05] -A0E3; [8B EB, 05, 05] +14CC; [8D BB, 05, 05] -A0E4; [8B ED, 05, 05] +14CD; [8D BD, 05, 05] -A0E5; [8B EF, 05, 05] +14CE; [8D BF, 05, 05] -A0E6; [8B F1, 05, 05] +14CF; [8D C1, 05, 05] -A0E7; [8B F3, 05, 05] +14D0; [8D C3, 05, 05] -A0E8; [8B F5, 05, 05] +14D1; [8D C5, 05, 05] -A0E9; [8B F7, 05, 05] +14D2; [8D C7, 05, 05] -A0EA; [8B F9, 05, 05] +14D3; [8D C9, 05, 05] -A0EB; [8B FB, 05, 05] +14D4; [8D CB, 05, 05] -A0EC; [8B FD, 05, 05] +14D5; [8D CD, 05, 05] -A0ED; [8C 05, 05, 05] +14D6; [8D CF, 05, 05] -A0EE; [8C 07, 05, 05] +14D7; [8D D1, 05, 05] -A0EF; [8C 09, 05, 05] +14D8; [8D D3, 05, 05] -A0F0; [8C 0B, 05, 05] +14D9; [8D D5, 05, 05] -A0F1; [8C 0D, 05, 05] +14DA; [8D D7, 05, 05] -A0F2; [8C 0F, 05, 05] +14DB; [8D D9, 05, 05] -A0F3; [8C 11, 05, 05] +14DC; [8D DB, 05, 05] -A0F4; [8C 13, 05, 05] +14DD; [8D DD, 05, 05] -A0F5; [8C 15, 05, 05] +14DE; [8D DF, 05, 05] -A0F6; [8C 17, 05, 05] +14DF; [8D E1, 05, 05] -A0F7; [8C 19, 05, 05] +14E0; [8D E3, 05, 05] -A0F8; [8C 1B, 05, 05] +14E1; [8D E5, 05, 05] -A0F9; [8C 1D, 05, 05] +14E2; [8D E7, 05, 05] -A0FA; [8C 1F, 05, 05] +14E3; [8D E9, 05, 05] -A0FB; [8C 21, 05, 05] +14E4; [8D EB, 05, 05] -A0FC; [8C 23, 05, 05] +14E5; [8D ED, 05, 05] -A0FD; [8C 25, 05, 05] +14E6; [8D EF, 05, 05] -A0FE; [8C 27, 05, 05] +14E7; [8D F1, 05, 05] -A0FF; [8C 29, 05, 05] +14E8; [8D F3, 05, 05] -A100; [8C 2B, 05, 05] +14E9; [8D F5, 05, 05] -A101; [8C 2D, 05, 05] +14EA; [8D F7, 05, 05] -A102; [8C 2F, 05, 05] +14EB; [8D F9, 05, 05] -A103; [8C 31, 05, 05] +14EC; [8D FB, 05, 05] -A104; [8C 33, 05, 05] +14ED; [8D FD, 05, 05] -A105; [8C 35, 05, 05] +14EE; [8E 05, 05, 05] -A106; [8C 37, 05, 05] +14EF; [8E 07, 05, 05] -A107; [8C 39, 05, 05] +14F0; [8E 09, 05, 05] -A108; [8C 3B, 05, 05] +14F1; [8E 0B, 05, 05] -A109; [8C 3D, 05, 05] +14F2; [8E 0D, 05, 05] -A10A; [8C 3F, 05, 05] +14F3; [8E 0F, 05, 05] -A10B; [8C 41, 05, 05] +14F4; [8E 11, 05, 05] -A10C; [8C 43, 05, 05] +14F5; [8E 13, 05, 05] -A10D; [8C 45, 05, 05] +14F6; [8E 15, 05, 05] -A10E; [8C 47, 05, 05] +14F7; [8E 17, 05, 05] -A10F; [8C 49, 05, 05] +14F8; [8E 19, 05, 05] -A110; [8C 4B, 05, 05] +14F9; [8E 1B, 05, 05] -A111; [8C 4D, 05, 05] +14FA; [8E 1D, 05, 05] -A112; [8C 4F, 05, 05] +14FB; [8E 1F, 05, 05] -A113; [8C 51, 05, 05] +14FC; [8E 21, 05, 05] -A114; [8C 53, 05, 05] +14FD; [8E 23, 05, 05] -A115; [8C 55, 05, 05] +14FE; [8E 25, 05, 05] -A116; [8C 57, 05, 05] +14FF; [8E 27, 05, 05] -A117; [8C 59, 05, 05] +1500; [8E 29, 05, 05] -A118; [8C 5B, 05, 05] +1501; [8E 2B, 05, 05] -A119; [8C 5D, 05, 05] +1502; [8E 2D, 05, 05] -A11A; [8C 5F, 05, 05] +1503; [8E 2F, 05, 05] -A11B; [8C 61, 05, 05] +1504; [8E 31, 05, 05] -A11C; [8C 63, 05, 05] +1505; [8E 33, 05, 05] -A11D; [8C 65, 05, 05] +1506; [8E 35, 05, 05] -A11E; [8C 67, 05, 05] +1507; [8E 37, 05, 05] -A11F; [8C 69, 05, 05] +1508; [8E 39, 05, 05] -A120; [8C 6B, 05, 05] +1509; [8E 3B, 05, 05] -A121; [8C 6D, 05, 05] +150A; [8E 3D, 05, 05] -A122; [8C 6F, 05, 05] +150B; [8E 3F, 05, 05] -A123; [8C 71, 05, 05] +150C; [8E 41, 05, 05] -A124; [8C 73, 05, 05] +150D; [8E 43, 05, 05] -A125; [8C 75, 05, 05] +150E; [8E 45, 05, 05] -A126; [8C 77, 05, 05] +150F; [8E 47, 05, 05] -A127; [8C 79, 05, 05] +1510; [8E 49, 05, 05] -A128; [8C 7B, 05, 05] +1511; [8E 4B, 05, 05] -A129; [8C 7D, 05, 05] +1512; [8E 4D, 05, 05] -A12A; [8C 7F, 05, 05] +1513; [8E 4F, 05, 05] -A12B; [8C 81, 05, 05] +1514; [8E 51, 05, 05] -A12C; [8C 83, 05, 05] +1515; [8E 53, 05, 05] -A12D; [8C 85, 05, 05] +1516; [8E 55, 05, 05] -A12E; [8C 87, 05, 05] +1517; [8E 57, 05, 05] -A12F; [8C 89, 05, 05] +1518; [8E 59, 05, 05] -A130; [8C 8B, 05, 05] +1519; [8E 5B, 05, 05] -A131; [8C 8D, 05, 05] +151A; [8E 5D, 05, 05] -A132; [8C 8F, 05, 05] +151B; [8E 5F, 05, 05] -A133; [8C 91, 05, 05] +151C; [8E 61, 05, 05] -A134; [8C 93, 05, 05] +151D; [8E 63, 05, 05] -A135; [8C 95, 05, 05] +151E; [8E 65, 05, 05] -A136; [8C 97, 05, 05] +151F; [8E 67, 05, 05] -A137; [8C 99, 05, 05] +1520; [8E 69, 05, 05] -A138; [8C 9B, 05, 05] +1521; [8E 6B, 05, 05] -A139; [8C 9D, 05, 05] +1522; [8E 6D, 05, 05] -A13A; [8C 9F, 05, 05] +1523; [8E 6F, 05, 05] -A13B; [8C A1, 05, 05] +1524; [8E 71, 05, 05] -A13C; [8C A3, 05, 05] +1525; [8E 73, 05, 05] -A13D; [8C A5, 05, 05] +1526; [8E 75, 05, 05] -A13E; [8C A7, 05, 05] +1527; [8E 77, 05, 05] -A13F; [8C A9, 05, 05] +1528; [8E 79, 05, 05] -A140; [8C AB, 05, 05] +1529; [8E 7B, 05, 05] -A141; [8C AD, 05, 05] +152A; [8E 7D, 05, 05] -A142; [8C AF, 05, 05] +152B; [8E 7F, 05, 05] -A143; [8C B1, 05, 05] +152C; [8E 81, 05, 05] -A144; [8C B3, 05, 05] +152D; [8E 83, 05, 05] -A145; [8C B5, 05, 05] +152E; [8E 85, 05, 05] -A146; [8C B7, 05, 05] +152F; [8E 87, 05, 05] -A147; [8C B9, 05, 05] +1530; [8E 89, 05, 05] -A148; [8C BB, 05, 05] +1531; [8E 8B, 05, 05] -A149; [8C BD, 05, 05] +1532; [8E 8D, 05, 05] -A14A; [8C BF, 05, 05] +1533; [8E 8F, 05, 05] -A14B; [8C C1, 05, 05] +1534; [8E 91, 05, 05] -A14C; [8C C3, 05, 05] +1535; [8E 93, 05, 05] -A14D; [8C C5, 05, 05] +1536; [8E 95, 05, 05] -A14E; [8C C7, 05, 05] +1537; [8E 97, 05, 05] -A14F; [8C C9, 05, 05] +1538; [8E 99, 05, 05] -A150; [8C CB, 05, 05] +1539; [8E 9B, 05, 05] -A151; [8C CD, 05, 05] +153A; [8E 9D, 05, 05] -A152; [8C CF, 05, 05] +153B; [8E 9F, 05, 05] -A153; [8C D1, 05, 05] +153C; [8E A1, 05, 05] -A154; [8C D3, 05, 05] +153D; [8E A3, 05, 05] -A155; [8C D5, 05, 05] +153E; [8E A5, 05, 05] -A156; [8C D7, 05, 05] +153F; [8E A7, 05, 05] -A157; [8C D9, 05, 05] +1540; [8E A9, 05, 05] -A158; [8C DB, 05, 05] +1541; [8E AB, 05, 05] -A159; [8C DD, 05, 05] +1542; [8E AD, 05, 05] -A15A; [8C DF, 05, 05] +1543; [8E AF, 05, 05] -A15B; [8C E1, 05, 05] +1544; [8E B1, 05, 05] -A15C; [8C E3, 05, 05] +1545; [8E B3, 05, 05] -A15D; [8C E5, 05, 05] +1546; [8E B5, 05, 05] -A15E; [8C E7, 05, 05] +1547; [8E B7, 05, 05] -A15F; [8C E9, 05, 05] +1548; [8E B9, 05, 05] -A160; [8C EB, 05, 05] +1549; [8E BB, 05, 05] -A161; [8C ED, 05, 05] +154A; [8E BD, 05, 05] -A162; [8C EF, 05, 05] +154B; [8E BF, 05, 05] -A163; [8C F1, 05, 05] +154C; [8E C1, 05, 05] -A164; [8C F3, 05, 05] +154D; [8E C3, 05, 05] -A165; [8C F5, 05, 05] +154E; [8E C5, 05, 05] -A166; [8C F7, 05, 05] +154F; [8E C7, 05, 05] -A167; [8C F9, 05, 05] +1550; [8E C9, 05, 05] -A168; [8C FB, 05, 05] +1551; [8E CB, 05, 05] -A169; [8C FD, 05, 05] +1552; [8E CD, 05, 05] -A16A; [8D 05, 05, 05] +1553; [8E CF, 05, 05] -A16B; [8D 07, 05, 05] +1554; [8E D1, 05, 05] -A16C; [8D 09, 05, 05] +1555; [8E D3, 05, 05] -A16D; [8D 0B, 05, 05] +1556; [8E D5, 05, 05] -A16E; [8D 0D, 05, 05] +1557; [8E D7, 05, 05] -A16F; [8D 0F, 05, 05] +1558; [8E D9, 05, 05] -A170; [8D 11, 05, 05] +1559; [8E DB, 05, 05] -A171; [8D 13, 05, 05] +155A; [8E DD, 05, 05] -A172; [8D 15, 05, 05] +155B; [8E DF, 05, 05] -A173; [8D 17, 05, 05] +155C; [8E E1, 05, 05] -A174; [8D 19, 05, 05] +155D; [8E E3, 05, 05] -A175; [8D 1B, 05, 05] +155E; [8E E5, 05, 05] -A176; [8D 1D, 05, 05] +155F; [8E E7, 05, 05] -A177; [8D 1F, 05, 05] +1560; [8E E9, 05, 05] -A178; [8D 21, 05, 05] +1561; [8E EB, 05, 05] -A179; [8D 23, 05, 05] +1562; [8E ED, 05, 05] -A17A; [8D 25, 05, 05] +1563; [8E EF, 05, 05] -A17B; [8D 27, 05, 05] +1564; [8E F1, 05, 05] -A17C; [8D 29, 05, 05] +1565; [8E F3, 05, 05] -A17D; [8D 2B, 05, 05] +1566; [8E F5, 05, 05] -A17E; [8D 2D, 05, 05] +1567; [8E F7, 05, 05] -A17F; [8D 2F, 05, 05] +1568; [8E F9, 05, 05] -A180; [8D 31, 05, 05] +1569; [8E FB, 05, 05] -A181; [8D 33, 05, 05] +156A; [8E FD, 05, 05] -A182; [8D 35, 05, 05] +156B; [8F 05, 05, 05] -A183; [8D 37, 05, 05] +156C; [8F 07, 05, 05] -A184; [8D 39, 05, 05] +156D; [8F 09, 05, 05] -A185; [8D 3B, 05, 05] +156E; [8F 0B, 05, 05] -A186; [8D 3D, 05, 05] +156F; [8F 0D, 05, 05] -A187; [8D 3F, 05, 05] +1570; [8F 0F, 05, 05] -A188; [8D 41, 05, 05] +1571; [8F 11, 05, 05] -A189; [8D 43, 05, 05] +1572; [8F 13, 05, 05] -A18A; [8D 45, 05, 05] +1573; [8F 15, 05, 05] -A18B; [8D 47, 05, 05] +1574; [8F 17, 05, 05] -A18C; [8D 49, 05, 05] +1575; [8F 19, 05, 05] -A18D; [8D 4B, 05, 05] +1576; [8F 1B, 05, 05] -A18E; [8D 4D, 05, 05] +1577; [8F 1D, 05, 05] -A18F; [8D 4F, 05, 05] +1578; [8F 1F, 05, 05] -A190; [8D 51, 05, 05] +1579; [8F 21, 05, 05] -A191; [8D 53, 05, 05] +157A; [8F 23, 05, 05] -A192; [8D 55, 05, 05] +157B; [8F 25, 05, 05] -A193; [8D 57, 05, 05] +157D; [8F 27, 05, 05] -A194; [8D 59, 05, 05] +166F; [8F 29, 05, 05] -A195; [8D 5B, 05, 05] +157E; [8F 2B, 05, 05] -A196; [8D 5D, 05, 05] +157F; [8F 2D, 05, 05] -A197; [8D 5F, 05, 05] +1580; [8F 2F, 05, 05] -A198; [8D 61, 05, 05] +1581; [8F 31, 05, 05] -A199; [8D 63, 05, 05] +1582; [8F 33, 05, 05] -A19A; [8D 65, 05, 05] +1583; [8F 35, 05, 05] -A19B; [8D 67, 05, 05] +1584; [8F 37, 05, 05] -A19C; [8D 69, 05, 05] +1585; [8F 39, 05, 05] -A19D; [8D 6B, 05, 05] +1586; [8F 3B, 05, 05] -A19E; [8D 6D, 05, 05] +1587; [8F 3D, 05, 05] -A19F; [8D 6F, 05, 05] +1588; [8F 3F, 05, 05] -A1A0; [8D 71, 05, 05] +1589; [8F 41, 05, 05] -A1A1; [8D 73, 05, 05] +158A; [8F 43, 05, 05] -A1A2; [8D 75, 05, 05] +158B; [8F 45, 05, 05] -A1A3; [8D 77, 05, 05] +158C; [8F 47, 05, 05] -A1A4; [8D 79, 05, 05] +158D; [8F 49, 05, 05] -A1A5; [8D 7B, 05, 05] +1670; [8F 4B, 05, 05] -A1A6; [8D 7D, 05, 05] +158E; [8F 4D, 05, 05] -A1A7; [8D 7F, 05, 05] +158F; [8F 4F, 05, 05] -A1A8; [8D 81, 05, 05] +1590; [8F 51, 05, 05] -A1A9; [8D 83, 05, 05] +1591; [8F 53, 05, 05] -A1AA; [8D 85, 05, 05] +1592; [8F 55, 05, 05] -A1AB; [8D 87, 05, 05] +1593; [8F 57, 05, 05] -A1AC; [8D 89, 05, 05] +1594; [8F 59, 05, 05] -A1AD; [8D 8B, 05, 05] +1595; [8F 5B, 05, 05] -A1AE; [8D 8D, 05, 05] +1671; [8F 5D, 05, 05] -A1AF; [8D 8F, 05, 05] +1672; [8F 5F, 05, 05] -A1B0; [8D 91, 05, 05] +1673; [8F 61, 05, 05] -A1B1; [8D 93, 05, 05] +1674; [8F 63, 05, 05] -A1B2; [8D 95, 05, 05] +1675; [8F 65, 05, 05] -A1B3; [8D 97, 05, 05] +1676; [8F 67, 05, 05] -A1B4; [8D 99, 05, 05] +1596; [8F 69, 05, 05] -A1B5; [8D 9B, 05, 05] +1597; [8F 6B, 05, 05] -A1B6; [8D 9D, 05, 05] +1598; [8F 6D, 05, 05] -A1B7; [8D 9F, 05, 05] +1599; [8F 6F, 05, 05] -A1B8; [8D A1, 05, 05] +159A; [8F 71, 05, 05] -A1B9; [8D A3, 05, 05] +159B; [8F 73, 05, 05] -A1BA; [8D A5, 05, 05] +159C; [8F 75, 05, 05] -A1BB; [8D A7, 05, 05] +159D; [8F 77, 05, 05] -A1BC; [8D A9, 05, 05] +159E; [8F 79, 05, 05] -A1BD; [8D AB, 05, 05] +159F; [8F 7B, 05, 05] -A1BE; [8D AD, 05, 05] +15A0; [8F 7D, 05, 05] -A1BF; [8D AF, 05, 05] +15A1; [8F 7F, 05, 05] -A1C0; [8D B1, 05, 05] +15A2; [8F 81, 05, 05] -A1C1; [8D B3, 05, 05] +15A3; [8F 83, 05, 05] -A1C2; [8D B5, 05, 05] +15A4; [8F 85, 05, 05] -A1C3; [8D B7, 05, 05] +15A5; [8F 87, 05, 05] -A1C4; [8D B9, 05, 05] +15A6; [8F 89, 05, 05] -A1C5; [8D BB, 05, 05] +157C; [8F 8B, 05, 05] -A1C6; [8D BD, 05, 05] +15A7; [8F 8D, 05, 05] -A1C7; [8D BF, 05, 05] +15A8; [8F 8F, 05, 05] -A1C8; [8D C1, 05, 05] +15A9; [8F 91, 05, 05] -A1C9; [8D C3, 05, 05] +15AA; [8F 93, 05, 05] -A1CA; [8D C5, 05, 05] +15AB; [8F 95, 05, 05] -A1CB; [8D C7, 05, 05] +15AC; [8F 97, 05, 05] -A1CC; [8D C9, 05, 05] +15AD; [8F 99, 05, 05] -A1CD; [8D CB, 05, 05] +15AE; [8F 9B, 05, 05] -A1CE; [8D CD, 05, 05] +15AF; [8F 9D, 05, 05] -A1CF; [8D CF, 05, 05] +15B0; [8F 9F, 05, 05] -A1D0; [8D D1, 05, 05] +15B1; [8F A1, 05, 05] -A1D1; [8D D3, 05, 05] +15B2; [8F A3, 05, 05] -A1D2; [8D D5, 05, 05] +15B3; [8F A5, 05, 05] -A1D3; [8D D7, 05, 05] +15B4; [8F A7, 05, 05] -A1D4; [8D D9, 05, 05] +15B5; [8F A9, 05, 05] -A1D5; [8D DB, 05, 05] +15B6; [8F AB, 05, 05] -A1D6; [8D DD, 05, 05] +15B7; [8F AD, 05, 05] -A1D7; [8D DF, 05, 05] +15B8; [8F AF, 05, 05] -A1D8; [8D E1, 05, 05] +15B9; [8F B1, 05, 05] -A1D9; [8D E3, 05, 05] +15BA; [8F B3, 05, 05] -A1DA; [8D E5, 05, 05] +15BB; [8F B5, 05, 05] -A1DB; [8D E7, 05, 05] +15BC; [8F B7, 05, 05] -A1DC; [8D E9, 05, 05] +15BD; [8F B9, 05, 05] -A1DD; [8D EB, 05, 05] +15BE; [8F BB, 05, 05] -A1DE; [8D ED, 05, 05] +15BF; [8F BD, 05, 05] -A1DF; [8D EF, 05, 05] +15C0; [8F BF, 05, 05] -A1E0; [8D F1, 05, 05] +15C1; [8F C1, 05, 05] -A1E1; [8D F3, 05, 05] +15C2; [8F C3, 05, 05] -A1E2; [8D F5, 05, 05] +15C3; [8F C5, 05, 05] -A1E3; [8D F7, 05, 05] +15C4; [8F C7, 05, 05] -A1E4; [8D F9, 05, 05] +15C5; [8F C9, 05, 05] -A1E5; [8D FB, 05, 05] +15C6; [8F CB, 05, 05] -A1E6; [8D FD, 05, 05] +15C7; [8F CD, 05, 05] -A1E7; [8E 05, 05, 05] +15C8; [8F CF, 05, 05] -A1E8; [8E 07, 05, 05] +15C9; [8F D1, 05, 05] -A1E9; [8E 09, 05, 05] +15CA; [8F D3, 05, 05] -A1EA; [8E 0B, 05, 05] +15CB; [8F D5, 05, 05] -A1EB; [8E 0D, 05, 05] +15CC; [8F D7, 05, 05] -A1EC; [8E 0F, 05, 05] +15CD; [8F D9, 05, 05] -A1ED; [8E 11, 05, 05] +15CE; [8F DB, 05, 05] -A1EE; [8E 13, 05, 05] +15CF; [8F DD, 05, 05] -A1EF; [8E 15, 05, 05] +15D0; [8F DF, 05, 05] -A1F0; [8E 17, 05, 05] +15D1; [8F E1, 05, 05] -A1F1; [8E 19, 05, 05] +15D2; [8F E3, 05, 05] -A1F2; [8E 1B, 05, 05] +15D3; [8F E5, 05, 05] -A1F3; [8E 1D, 05, 05] +15D4; [8F E7, 05, 05] -A1F4; [8E 1F, 05, 05] +15D5; [8F E9, 05, 05] -A1F5; [8E 21, 05, 05] +15D6; [8F EB, 05, 05] -A1F6; [8E 23, 05, 05] +15D7; [8F ED, 05, 05] -A1F7; [8E 25, 05, 05] +15D8; [8F EF, 05, 05] -A1F8; [8E 27, 05, 05] +15D9; [8F F1, 05, 05] -A1F9; [8E 29, 05, 05] +15DA; [8F F3, 05, 05] -A1FA; [8E 2B, 05, 05] +15DB; [8F F5, 05, 05] -A1FB; [8E 2D, 05, 05] +15DC; [8F F7, 05, 05] -A1FC; [8E 2F, 05, 05] +15DD; [8F F9, 05, 05] -A1FD; [8E 31, 05, 05] +15DE; [8F FB, 05, 05] -A1FE; [8E 33, 05, 05] +15DF; [8F FD, 05, 05] -A1FF; [8E 35, 05, 05] +15E0; [90 05, 05, 05] -A200; [8E 37, 05, 05] +15E1; [90 07, 05, 05] -A201; [8E 39, 05, 05] +15E2; [90 09, 05, 05] -A202; [8E 3B, 05, 05] +15E3; [90 0B, 05, 05] -A203; [8E 3D, 05, 05] +15E4; [90 0D, 05, 05] -A204; [8E 3F, 05, 05] +15E5; [90 0F, 05, 05] -A205; [8E 41, 05, 05] +15E6; [90 11, 05, 05] -A206; [8E 43, 05, 05] +15E7; [90 13, 05, 05] -A207; [8E 45, 05, 05] +15E8; [90 15, 05, 05] -A208; [8E 47, 05, 05] +15E9; [90 17, 05, 05] -A209; [8E 49, 05, 05] +15EA; [90 19, 05, 05] -A20A; [8E 4B, 05, 05] +15EB; [90 1B, 05, 05] -A20B; [8E 4D, 05, 05] +15EC; [90 1D, 05, 05] -A20C; [8E 4F, 05, 05] +15ED; [90 1F, 05, 05] -A20D; [8E 51, 05, 05] +15EE; [90 21, 05, 05] -A20E; [8E 53, 05, 05] +15EF; [90 23, 05, 05] -A20F; [8E 55, 05, 05] +15F0; [90 25, 05, 05] -A210; [8E 57, 05, 05] +15F1; [90 27, 05, 05] -A211; [8E 59, 05, 05] +15F2; [90 29, 05, 05] -A212; [8E 5B, 05, 05] +15F3; [90 2B, 05, 05] -A213; [8E 5D, 05, 05] +15F4; [90 2D, 05, 05] -A214; [8E 5F, 05, 05] +15F5; [90 2F, 05, 05] -A215; [8E 61, 05, 05] +15F6; [90 31, 05, 05] -A216; [8E 63, 05, 05] +15F7; [90 33, 05, 05] -A217; [8E 65, 05, 05] +15F8; [90 35, 05, 05] -A218; [8E 67, 05, 05] +15F9; [90 37, 05, 05] -A219; [8E 69, 05, 05] +15FA; [90 39, 05, 05] -A21A; [8E 6B, 05, 05] +15FB; [90 3B, 05, 05] -A21B; [8E 6D, 05, 05] +15FC; [90 3D, 05, 05] -A21C; [8E 6F, 05, 05] +15FD; [90 3F, 05, 05] -A21D; [8E 71, 05, 05] +15FE; [90 41, 05, 05] -A21E; [8E 73, 05, 05] +15FF; [90 43, 05, 05] -A21F; [8E 75, 05, 05] +1600; [90 45, 05, 05] -A220; [8E 77, 05, 05] +1601; [90 47, 05, 05] -A221; [8E 79, 05, 05] +1602; [90 49, 05, 05] -A222; [8E 7B, 05, 05] +1603; [90 4B, 05, 05] -A223; [8E 7D, 05, 05] +1604; [90 4D, 05, 05] -A224; [8E 7F, 05, 05] +1605; [90 4F, 05, 05] -A225; [8E 81, 05, 05] +1606; [90 51, 05, 05] -A226; [8E 83, 05, 05] +1607; [90 53, 05, 05] -A227; [8E 85, 05, 05] +1608; [90 55, 05, 05] -A228; [8E 87, 05, 05] +1609; [90 57, 05, 05] -A229; [8E 89, 05, 05] +160A; [90 59, 05, 05] -A22A; [8E 8B, 05, 05] +160B; [90 5B, 05, 05] -A22B; [8E 8D, 05, 05] +160C; [90 5D, 05, 05] -A22C; [8E 8F, 05, 05] +160D; [90 5F, 05, 05] -A22D; [8E 91, 05, 05] +160E; [90 61, 05, 05] -A22E; [8E 93, 05, 05] +160F; [90 63, 05, 05] -A22F; [8E 95, 05, 05] +1610; [90 65, 05, 05] -A230; [8E 97, 05, 05] +1611; [90 67, 05, 05] -A231; [8E 99, 05, 05] +1612; [90 69, 05, 05] -A232; [8E 9B, 05, 05] +1613; [90 6B, 05, 05] -A233; [8E 9D, 05, 05] +1614; [90 6D, 05, 05] -A234; [8E 9F, 05, 05] +1615; [90 6F, 05, 05] -A235; [8E A1, 05, 05] +1616; [90 71, 05, 05] -A236; [8E A3, 05, 05] +1617; [90 73, 05, 05] -A237; [8E A5, 05, 05] +1618; [90 75, 05, 05] -A238; [8E A7, 05, 05] +1619; [90 77, 05, 05] -A239; [8E A9, 05, 05] +161A; [90 79, 05, 05] -A23A; [8E AB, 05, 05] +161B; [90 7B, 05, 05] -A23B; [8E AD, 05, 05] +161C; [90 7D, 05, 05] -A23C; [8E AF, 05, 05] +161D; [90 7F, 05, 05] -A23D; [8E B1, 05, 05] +161E; [90 81, 05, 05] -A23E; [8E B3, 05, 05] +161F; [90 83, 05, 05] -A23F; [8E B5, 05, 05] +1620; [90 85, 05, 05] -A240; [8E B7, 05, 05] +1621; [90 87, 05, 05] -A241; [8E B9, 05, 05] +1622; [90 89, 05, 05] -A242; [8E BB, 05, 05] +1623; [90 8B, 05, 05] -A243; [8E BD, 05, 05] +1624; [90 8D, 05, 05] -A244; [8E BF, 05, 05] +1625; [90 8F, 05, 05] -A245; [8E C1, 05, 05] +1626; [90 91, 05, 05] -A246; [8E C3, 05, 05] +1627; [90 93, 05, 05] -A247; [8E C5, 05, 05] +1628; [90 95, 05, 05] -A248; [8E C7, 05, 05] +1629; [90 97, 05, 05] -A249; [8E C9, 05, 05] +162A; [90 99, 05, 05] -A24A; [8E CB, 05, 05] +162B; [90 9B, 05, 05] -A24B; [8E CD, 05, 05] +162C; [90 9D, 05, 05] -A24C; [8E CF, 05, 05] +162D; [90 9F, 05, 05] -A24D; [8E D1, 05, 05] +162E; [90 A1, 05, 05] -A24E; [8E D3, 05, 05] +162F; [90 A3, 05, 05] -A24F; [8E D5, 05, 05] +1630; [90 A5, 05, 05] -A250; [8E D7, 05, 05] +1631; [90 A7, 05, 05] -A251; [8E D9, 05, 05] +1632; [90 A9, 05, 05] -A252; [8E DB, 05, 05] +1633; [90 AB, 05, 05] -A253; [8E DD, 05, 05] +1634; [90 AD, 05, 05] -A254; [8E DF, 05, 05] +1635; [90 AF, 05, 05] -A255; [8E E1, 05, 05] +1636; [90 B1, 05, 05] -A256; [8E E3, 05, 05] +1637; [90 B3, 05, 05] -A257; [8E E5, 05, 05] +1638; [90 B5, 05, 05] -A258; [8E E7, 05, 05] +1639; [90 B7, 05, 05] -A259; [8E E9, 05, 05] +163A; [90 B9, 05, 05] -A25A; [8E EB, 05, 05] +163B; [90 BB, 05, 05] -A25B; [8E ED, 05, 05] +163C; [90 BD, 05, 05] -A25C; [8E EF, 05, 05] +163D; [90 BF, 05, 05] -A25D; [8E F1, 05, 05] +163E; [90 C1, 05, 05] -A25E; [8E F3, 05, 05] +163F; [90 C3, 05, 05] -A25F; [8E F5, 05, 05] +1640; [90 C5, 05, 05] -A260; [8E F7, 05, 05] +1641; [90 C7, 05, 05] -A261; [8E F9, 05, 05] +1642; [90 C9, 05, 05] -A262; [8E FB, 05, 05] +1643; [90 CB, 05, 05] -A263; [8E FD, 05, 05] +1644; [90 CD, 05, 05] -A264; [8F 05, 05, 05] +1645; [90 CF, 05, 05] -A265; [8F 07, 05, 05] +1646; [90 D1, 05, 05] -A266; [8F 09, 05, 05] +1647; [90 D3, 05, 05] -A267; [8F 0B, 05, 05] +1648; [90 D5, 05, 05] -A268; [8F 0D, 05, 05] +1649; [90 D7, 05, 05] -A269; [8F 0F, 05, 05] +164A; [90 D9, 05, 05] -A26A; [8F 11, 05, 05] +164B; [90 DB, 05, 05] -A26B; [8F 13, 05, 05] +164C; [90 DD, 05, 05] -A26C; [8F 15, 05, 05] +164D; [90 DF, 05, 05] -A26D; [8F 17, 05, 05] +164E; [90 E1, 05, 05] -A26E; [8F 19, 05, 05] +164F; [90 E3, 05, 05] -A26F; [8F 1B, 05, 05] +1650; [90 E5, 05, 05] -A270; [8F 1D, 05, 05] +1651; [90 E7, 05, 05] -A271; [8F 1F, 05, 05] +1652; [90 E9, 05, 05] -A272; [8F 21, 05, 05] +1653; [90 EB, 05, 05] -A273; [8F 23, 05, 05] +1654; [90 ED, 05, 05] -A274; [8F 25, 05, 05] +1655; [90 EF, 05, 05] -A275; [8F 27, 05, 05] +1656; [90 F1, 05, 05] -A276; [8F 29, 05, 05] +1657; [90 F3, 05, 05] -A277; [8F 2B, 05, 05] +1658; [90 F5, 05, 05] -A278; [8F 2D, 05, 05] +1659; [90 F7, 05, 05] -A279; [8F 2F, 05, 05] +165A; [90 F9, 05, 05] -A27A; [8F 31, 05, 05] +165B; [90 FB, 05, 05] -A27B; [8F 33, 05, 05] +165C; [90 FD, 05, 05] -A27C; [8F 35, 05, 05] +165D; [91 05, 05, 05] -A27D; [8F 37, 05, 05] +165E; [91 07, 05, 05] -A27E; [8F 39, 05, 05] +165F; [91 09, 05, 05] -A27F; [8F 3B, 05, 05] +1660; [91 0B, 05, 05] -A280; [8F 3D, 05, 05] +1661; [91 0D, 05, 05] -A281; [8F 3F, 05, 05] +1662; [91 0F, 05, 05] -A282; [8F 41, 05, 05] +1663; [91 11, 05, 05] -A283; [8F 43, 05, 05] +1664; [91 13, 05, 05] -A284; [8F 45, 05, 05] +1665; [91 15, 05, 05] -A285; [8F 47, 05, 05] +1666; [91 17, 05, 05] -A286; [8F 49, 05, 05] +1667; [91 19, 05, 05] -A287; [8F 4B, 05, 05] +1668; [91 1B, 05, 05] -A288; [8F 4D, 05, 05] +1669; [91 1D, 05, 05] -A289; [8F 4F, 05, 05] +166A; [91 1F, 05, 05] -A28A; [8F 51, 05, 05] +166B; [91 21, 05, 05] -A28B; [8F 53, 05, 05] +166C; [91 23, 05, 05] -A28C; [8F 55, 05, 05] +1681; [92 20, 05, 05] -A28D; [8F 57, 05, 05] +1682; [92 22, 05, 05] -A28E; [8F 59, 05, 05] +1683; [92 24, 05, 05] -A28F; [8F 5B, 05, 05] +1684; [92 26, 05, 05] -A290; [8F 5D, 05, 05] +1685; [92 28, 05, 05] -A291; [8F 5F, 05, 05] +1686; [92 2A, 05, 05] -A292; [8F 61, 05, 05] +1687; [92 2C, 05, 05] -A293; [8F 63, 05, 05] +1688; [92 2E, 05, 05] -A294; [8F 65, 05, 05] +1689; [92 30, 05, 05] -A295; [8F 67, 05, 05] +168A; [92 32, 05, 05] -A296; [8F 69, 05, 05] +168B; [92 34, 05, 05] -A297; [8F 6B, 05, 05] +168C; [92 36, 05, 05] -A298; [8F 6D, 05, 05] +168D; [92 38, 05, 05] -A299; [8F 6F, 05, 05] +168E; [92 3A, 05, 05] -A29A; [8F 71, 05, 05] +168F; [92 3C, 05, 05] -A29B; [8F 73, 05, 05] +1690; [92 3E, 05, 05] -A29C; [8F 75, 05, 05] +1691; [92 40, 05, 05] -A29D; [8F 77, 05, 05] +1692; [92 42, 05, 05] -A29E; [8F 79, 05, 05] +1693; [92 44, 05, 05] -A29F; [8F 7B, 05, 05] +1694; [92 46, 05, 05] -A2A0; [8F 7D, 05, 05] +1695; [92 48, 05, 05] -A2A1; [8F 7F, 05, 05] +1696; [92 4A, 05, 05] -A2A2; [8F 81, 05, 05] +1697; [92 4C, 05, 05] -A2A3; [8F 83, 05, 05] +1698; [92 4E, 05, 05] -A2A4; [8F 85, 05, 05] +1699; [92 50, 05, 05] -A2A5; [8F 87, 05, 05] +169A; [92 52, 05, 05] -A2A6; [8F 89, 05, 05] +16A0; [93 20, 05, 05] +16A1; [93 20, 05, 09][, E4 4D, 09] -A2A7; [8F 8B, 05, 05] +16A2; [93 22, 05, 05] +16A4; [93 22, 05, 09][, E4 4D, 09] +16A5; [93 22, 05, 09][, E4 5D, 09] -A2A8; [8F 8D, 05, 05] +16A6; [93 24, 05, 05] +16A7; [93 24, 05, 09][, E4 4D, 09] +16F0; [93 24, 05, 09][93 24, 05, 09] -A2A9; [8F 8F, 05, 05] +16A8; [93 26, 05, 05] +16A9; [93 26, 05, 09][, E4 4D, 09] +16AC; [93 26, 05, 09][, E4 5D, 09] +16AD; [93 26, 05, 09][, E4 6D, 09] +16AE; [93 26, 05, 09][, E4 7D, 09] -A2AA; [8F 91, 05, 05] +16AF; [93 28, 05, 05] -A2AB; [8F 93, 05, 05] +16B0; [93 2A, 05, 05] -A2AC; [8F 95, 05, 05] +16B1; [93 2C, 05, 05] -A2AD; [8F 97, 05, 05] +16B2; [93 2E, 05, 05] +16B3; [93 2E, 05, 09][, E4 4D, 09] +16B4; [93 2E, 05, 09][, E4 5D, 09] +16B5; [93 2E, 05, 09][, E4 6D, 09] +16B6; [93 2E, 05, 09][, E4 7D, 09] -A2AE; [8F 99, 05, 05] +16B7; [93 30, 05, 05] -A2AF; [8F 9B, 05, 05] +16B9; [93 32, 05, 05] +16E9; [93 32, 05, 09][, E4 4D, 09] -A2B0; [8F 9D, 05, 05] +16BA; [93 34, 05, 05] +16BB; [93 34, 05, 09][, E4 4D, 09] +16BC; [93 34, 05, 09][, E4 5D, 09] +16BD; [93 34, 05, 09][, E4 6D, 09] -A2B1; [8F 9F, 05, 05] +16BE; [93 36, 05, 05] +16BF; [93 36, 05, 09][, E4 4D, 09] +16C0; [93 36, 05, 09][, E4 5D, 09] -A2B2; [8F A1, 05, 05] +16C1; [93 38, 05, 05] +16C2; [93 38, 05, 09][, E4 4D, 09] -A2B3; [8F A3, 05, 05] +16C3; [93 3A, 05, 05] +16C4; [93 3A, 05, 09][, E4 4D, 09] -A2B4; [8F A5, 05, 05] +16C5; [93 3C, 05, 05] +16C6; [93 3C, 05, 09][, E4 4D, 09] +16EE; [93 3C, 05, 09][93 4E, 05, 09] -A2B5; [8F A7, 05, 05] +16C7; [93 3E, 05, 05] -A2B6; [8F A9, 05, 05] +16C8; [93 40, 05, 05] +16D5; [93 40, 05, 09][, E4 4D, 09] -A2B7; [8F AB, 05, 05] +16C9; [93 42, 05, 05] -A2B8; [8F AD, 05, 05] +16CA; [93 44, 05, 05] +16CB; [93 44, 05, 09][, E4 4D, 09] +16EA; [93 44, 05, 09][, E4 5D, 09] +16CC; [93 44, 05, 09][, E4 6D, 09] +16CD; [93 44, 05, 09][, E4 7D, 09] +16CE; [93 44, 05, 09][, E4 8D, 09] -A2B9; [8F AF, 05, 05] +16CF; [93 46, 05, 05] +16D0; [93 46, 05, 09][, E4 4D, 09] +16D1; [93 46, 05, 09][, E4 5D, 09] -A2BA; [8F B1, 05, 05] +16D2; [93 48, 05, 05] +16D3; [93 48, 05, 09][, E4 4D, 09] +16D4; [93 48, 05, 09][, E4 5D, 09] -A2BB; [8F B3, 05, 05] +16D6; [93 4A, 05, 05] -A2BC; [8F B5, 05, 05] +16D7; [93 4C, 05, 05] +16D8; [93 4C, 05, 09][, E4 4D, 09] +16D9; [93 4C, 05, 09][, E4 5D, 09] +16EF; [93 4C, 05, 09][, E4 4D, 09][93 4C, 05, 3D][, E4 4D, 3D] -A2BD; [8F B7, 05, 05] +16DA; [93 4E, 05, 05] +16DB; [93 4E, 05, 09][, E4 4D, 09] -A2BE; [8F B9, 05, 05] +16DC; [93 50, 05, 05] +16DD; [93 50, 05, 09][, E4 4D, 09] -A2BF; [8F BB, 05, 05] +16DE; [93 52, 05, 05] -A2C0; [8F BD, 05, 05] +16DF; [93 54, 05, 05] -A2C1; [8F BF, 05, 05] +16AA; [93 56, 05, 05] -A2C2; [8F C1, 05, 05] +16AB; [93 58, 05, 05] -A2C3; [8F C3, 05, 05] +16A3; [93 5A, 05, 05] -A2C4; [8F C5, 05, 05] +16E0; [93 5C, 05, 05] -A2C5; [8F C7, 05, 05] +16E3; [93 5E, 05, 05] -A2C6; [8F C9, 05, 05] +16B8; [93 60, 05, 05] -A2C7; [8F CB, 05, 05] +16E4; [93 62, 05, 05] -A2C8; [8F CD, 05, 05] +16E1; [93 64, 05, 05] -A2C9; [8F CF, 05, 05] +16E2; [93 66, 05, 05] -A2CA; [8F D1, 05, 05] +16E5; [93 68, 05, 05] -A2CB; [8F D3, 05, 05] +16E6; [93 6A, 05, 05] +16E7; [93 6A, 05, 09][, E4 4D, 09] +16E8; [93 6A, 05, 09][, E4 5D, 09] -A2CC; [8F D5, 05, 05] +1100; [94 20, 05, 05] +3131; [94 20, 05, 09] +3260; [94 20, 05, 0D] +FFA1; [94 20, 05, A3] +326E; [94 20, 05, 0D][94 48, 05, 0D] -A2CD; [8F D7, 05, 05] +1101; [94 22, 05, 05] +3132; [94 22, 05, 09] +FFA2; [94 22, 05, A3] -A2CE; [8F D9, 05, 05] +1102; [94 24, 05, 05] +3134; [94 24, 05, 09] +3261; [94 24, 05, 0D] +FFA4; [94 24, 05, A3] +326F; [94 24, 05, 0D][94 48, 05, 0D] -A2CF; [8F DB, 05, 05] +1103; [94 26, 05, 05] +3137; [94 26, 05, 09] +3262; [94 26, 05, 0D] +FFA7; [94 26, 05, A3] +3270; [94 26, 05, 0D][94 48, 05, 0D] -A2D0; [8F DD, 05, 05] +1104; [94 28, 05, 05] +3138; [94 28, 05, 09] +FFA8; [94 28, 05, A3] -A2D1; [8F DF, 05, 05] +1105; [94 2A, 05, 05] +3139; [94 2A, 05, 09] +3263; [94 2A, 05, 0D] +FFA9; [94 2A, 05, A3] +3271; [94 2A, 05, 0D][94 48, 05, 0D] -A2D2; [8F E1, 05, 05] +1106; [94 2C, 05, 05] +3141; [94 2C, 05, 09] +3264; [94 2C, 05, 0D] +FFB1; [94 2C, 05, A3] +3272; [94 2C, 05, 0D][94 48, 05, 0D] -A2D3; [8F E3, 05, 05] +1107; [94 2E, 05, 05] +3142; [94 2E, 05, 09] +3265; [94 2E, 05, 0D] +FFB2; [94 2E, 05, A3] +3273; [94 2E, 05, 0D][94 48, 05, 0D] -A2D4; [8F E5, 05, 05] +1108; [94 30, 05, 05] +3143; [94 30, 05, 09] +FFB3; [94 30, 05, A3] -A2D5; [8F E7, 05, 05] +1109; [94 32, 05, 05] +3145; [94 32, 05, 09] +3266; [94 32, 05, 0D] +FFB5; [94 32, 05, A3] +3274; [94 32, 05, 0D][94 48, 05, 0D] -A2D6; [8F E9, 05, 05] +110A; [94 34, 05, 05] +3146; [94 34, 05, 09] +FFB6; [94 34, 05, A3] -A2D7; [8F EB, 05, 05] +110B; [94 36, 05, 05] +3147; [94 36, 05, 09] +3267; [94 36, 05, 0D] +FFB7; [94 36, 05, A3] +3275; [94 36, 05, 0D][94 48, 05, 0D] +327E; [94 36, 05, 0D][94 62, 05, 0D] -A2D8; [8F ED, 05, 05] +110C; [94 38, 05, 05] +3148; [94 38, 05, 09] +3268; [94 38, 05, 0D] +FFB8; [94 38, 05, A3] +3276; [94 38, 05, 0D][94 48, 05, 0D] +327D; [94 38, 05, 0D][94 62, 05, 0D][94 36, 05, 3D][94 6E, 05, 3D] -A2D9; [8F EF, 05, 05] +110D; [94 3A, 05, 05] +3149; [94 3A, 05, 09] +FFB9; [94 3A, 05, A3] -A2DA; [8F F1, 05, 05] +110E; [94 3C, 05, 05] +314A; [94 3C, 05, 09] +3269; [94 3C, 05, 0D] +FFBA; [94 3C, 05, A3] +3277; [94 3C, 05, 0D][94 48, 05, 0D] +327C; [94 3C, 05, 0D][94 48, 05, 0D][94 92, 05, 3D][94 20, 05, 3D][94 58, 05, 3D] -A2DB; [8F F3, 05, 05] +110F; [94 3E, 05, 05] +314B; [94 3E, 05, 09] +326A; [94 3E, 05, 0D] +FFBB; [94 3E, 05, A3] +3278; [94 3E, 05, 0D][94 48, 05, 0D] -A2DC; [8F F5, 05, 05] +1110; [94 40, 05, 05] +314C; [94 40, 05, 09] +326B; [94 40, 05, 0D] +FFBC; [94 40, 05, A3] +3279; [94 40, 05, 0D][94 48, 05, 0D] -A2DD; [8F F7, 05, 05] +1111; [94 42, 05, 05] +314D; [94 42, 05, 09] +326C; [94 42, 05, 0D] +FFBD; [94 42, 05, A3] +327A; [94 42, 05, 0D][94 48, 05, 0D] -A2DE; [8F F9, 05, 05] +1112; [94 44, 05, 05] +314E; [94 44, 05, 09] +326D; [94 44, 05, 0D] +FFBE; [94 44, 05, A3] +327B; [94 44, 05, 0D][94 48, 05, 0D] -A2DF; [8F FB, 05, 05] +1113; [94 46 10, 05, 05] -A2E0; [8F FD, 05, 05] +1114; [94 46 13, 05, 05] +3165; [94 46 13, 05, 09] -A2E1; [90 05, 05, 05] +1115; [94 46 16, 05, 05] +3166; [94 46 16, 05, 09] -A2E2; [90 07, 05, 05] +1116; [94 46 19, 05, 05] -A2E3; [90 09, 05, 05] +1117; [94 46 1C, 05, 05] -A2E4; [90 0B, 05, 05] +1118; [94 46 1F, 05, 05] -A2E5; [90 0D, 05, 05] +1119; [94 46 22, 05, 05] -A2E6; [90 0F, 05, 05] +111A; [94 46 25, 05, 05] +3140; [94 46 25, 05, 09] +FFB0; [94 46 25, 05, A3] -A2E7; [90 11, 05, 05] +111B; [94 46 28, 05, 05] -A2E8; [90 13, 05, 05] +111C; [94 46 2B, 05, 05] +316E; [94 46 2B, 05, 09] -A2E9; [90 15, 05, 05] +111D; [94 46 2E, 05, 05] +3171; [94 46 2E, 05, 09] -A2EA; [90 17, 05, 05] +111E; [94 46 31, 05, 05] +3172; [94 46 31, 05, 09] -A2EB; [90 19, 05, 05] +111F; [94 46 34, 05, 05] -A2EC; [90 1B, 05, 05] +1120; [94 46 37, 05, 05] +3173; [94 46 37, 05, 09] -A2ED; [90 1D, 05, 05] +1121; [94 46 3A, 05, 05] +3144; [94 46 3A, 05, 09] +FFB4; [94 46 3A, 05, A3] -A2EE; [90 1F, 05, 05] +1122; [94 46 3D, 05, 05] +3174; [94 46 3D, 05, 09] -A2EF; [90 21, 05, 05] +1123; [94 46 40, 05, 05] +3175; [94 46 40, 05, 09] -A2F0; [90 23, 05, 05] +1124; [94 46 43, 05, 05] -A2F1; [90 25, 05, 05] +1125; [94 46 46, 05, 05] -A2F2; [90 27, 05, 05] +1126; [94 46 49, 05, 05] -A2F3; [90 29, 05, 05] +1127; [94 46 4C, 05, 05] +3176; [94 46 4C, 05, 09] -A2F4; [90 2B, 05, 05] +1128; [94 46 4F, 05, 05] -A2F5; [90 2D, 05, 05] +1129; [94 46 52, 05, 05] +3177; [94 46 52, 05, 09] -A2F6; [90 2F, 05, 05] +112A; [94 46 55, 05, 05] -A2F7; [90 31, 05, 05] +112B; [94 46 58, 05, 05] +3178; [94 46 58, 05, 09] -A2F8; [90 33, 05, 05] +112C; [94 46 5B, 05, 05] +3179; [94 46 5B, 05, 09] -A2F9; [90 35, 05, 05] +112D; [94 46 5E, 05, 05] +317A; [94 46 5E, 05, 09] -A2FA; [90 37, 05, 05] +112E; [94 46 61, 05, 05] +317B; [94 46 61, 05, 09] -A2FB; [90 39, 05, 05] +112F; [94 46 64, 05, 05] +317C; [94 46 64, 05, 09] -A2FC; [90 3B, 05, 05] +1130; [94 46 67, 05, 05] -A2FD; [90 3D, 05, 05] +1131; [94 46 6A, 05, 05] -A2FE; [90 3F, 05, 05] +1132; [94 46 6D, 05, 05] +317D; [94 46 6D, 05, 09] -A2FF; [90 41, 05, 05] +1133; [94 46 70, 05, 05] -A300; [90 43, 05, 05] +1134; [94 46 73, 05, 05] -A301; [90 45, 05, 05] +1135; [94 46 76, 05, 05] -A302; [90 47, 05, 05] +1136; [94 46 79, 05, 05] +317E; [94 46 79, 05, 09] -A303; [90 49, 05, 05] +1137; [94 46 7C, 05, 05] -A304; [90 4B, 05, 05] +1138; [94 46 7F, 05, 05] -A305; [90 4D, 05, 05] +1139; [94 46 82, 05, 05] -A306; [90 4F, 05, 05] +113A; [94 46 85, 05, 05] -A307; [90 51, 05, 05] +113B; [94 46 88, 05, 05] -A308; [90 53, 05, 05] +113C; [94 46 8B, 05, 05] -A309; [90 55, 05, 05] +113D; [94 46 8E, 05, 05] -A30A; [90 57, 05, 05] +113E; [94 46 91, 05, 05] -A30B; [90 59, 05, 05] +113F; [94 46 94, 05, 05] -A30C; [90 5B, 05, 05] +1140; [94 46 97, 05, 05] +317F; [94 46 97, 05, 09] -A30D; [90 5D, 05, 05] +1141; [94 46 9A, 05, 05] -A30E; [90 5F, 05, 05] +1142; [94 46 9D, 05, 05] -A30F; [90 61, 05, 05] +1143; [94 46 A0, 05, 05] -A310; [90 63, 05, 05] +1144; [94 46 A3, 05, 05] -A311; [90 65, 05, 05] +1145; [94 46 A6, 05, 05] -A312; [90 67, 05, 05] +1146; [94 46 A9, 05, 05] -A313; [90 69, 05, 05] +1147; [94 46 AC, 05, 05] +3180; [94 46 AC, 05, 09] -A314; [90 6B, 05, 05] +1148; [94 46 AF, 05, 05] -A315; [90 6D, 05, 05] +1149; [94 46 B2, 05, 05] -A316; [90 6F, 05, 05] +114A; [94 46 B5, 05, 05] -A317; [90 71, 05, 05] +114B; [94 46 B8, 05, 05] -A318; [90 73, 05, 05] +114C; [94 46 BB, 05, 05] +3181; [94 46 BB, 05, 09] -A319; [90 75, 05, 05] +114D; [94 46 BE, 05, 05] -A31A; [90 77, 05, 05] +114E; [94 46 C1, 05, 05] -A31B; [90 79, 05, 05] +114F; [94 46 C4, 05, 05] -A31C; [90 7B, 05, 05] +1150; [94 46 C7, 05, 05] -A31D; [90 7D, 05, 05] +1151; [94 46 CA, 05, 05] -A31E; [90 7F, 05, 05] +1152; [94 46 CD, 05, 05] -A31F; [90 81, 05, 05] +1153; [94 46 D0, 05, 05] -A320; [90 83, 05, 05] +1154; [94 46 D3, 05, 05] -A321; [90 85, 05, 05] +1155; [94 46 D6, 05, 05] -A322; [90 87, 05, 05] +1156; [94 46 D9, 05, 05] -A323; [90 89, 05, 05] +1157; [94 46 DC, 05, 05] +3184; [94 46 DC, 05, 09] -A324; [90 8B, 05, 05] +1158; [94 46 DF, 05, 05] +3185; [94 46 DF, 05, 09] -A325; [90 8D, 05, 05] +1159; [94 46 E2, 05, 05] +3186; [94 46 E2, 05, 09] -A326; [90 8F, 05, 05] +115F; [94 46 E5, 05, 05] -A327; [90 91, 05, 05] +1160; [94 46 E8, 05, 05] +3164; [94 46 E8, 05, 09] +FFA0; [94 46 E8, 05, A3] -A328; [90 93, 05, 05] +1161; [94 48, 05, 05] +314F; [94 48, 05, 09] +FFC2; [94 48, 05, A3] -A329; [90 95, 05, 05] +1162; [94 4A, 05, 05] +3150; [94 4A, 05, 09] +FFC3; [94 4A, 05, A3] -A32A; [90 97, 05, 05] +1163; [94 4C, 05, 05] +3151; [94 4C, 05, 09] +FFC4; [94 4C, 05, A3] -A32B; [90 99, 05, 05] +1164; [94 4E, 05, 05] +3152; [94 4E, 05, 09] +FFC5; [94 4E, 05, A3] -A32C; [90 9B, 05, 05] +1165; [94 50, 05, 05] +3153; [94 50, 05, 09] +FFC6; [94 50, 05, A3] -A32D; [90 9D, 05, 05] +1166; [94 52, 05, 05] +3154; [94 52, 05, 09] +FFC7; [94 52, 05, A3] -A32E; [90 9F, 05, 05] +1167; [94 54, 05, 05] +3155; [94 54, 05, 09] +FFCA; [94 54, 05, A3] -A32F; [90 A1, 05, 05] +1168; [94 56, 05, 05] +3156; [94 56, 05, 09] +FFCB; [94 56, 05, A3] -A330; [90 A3, 05, 05] +1169; [94 58, 05, 05] +3157; [94 58, 05, 09] +FFCC; [94 58, 05, A3] -A331; [90 A5, 05, 05] +116A; [94 5A, 05, 05] +3158; [94 5A, 05, 09] +FFCD; [94 5A, 05, A3] -A332; [90 A7, 05, 05] +116B; [94 5C, 05, 05] +3159; [94 5C, 05, 09] +FFCE; [94 5C, 05, A3] -A333; [90 A9, 05, 05] +116C; [94 5E, 05, 05] +315A; [94 5E, 05, 09] +FFCF; [94 5E, 05, A3] -A334; [90 AB, 05, 05] +116D; [94 60, 05, 05] +315B; [94 60, 05, 09] +FFD2; [94 60, 05, A3] -A335; [90 AD, 05, 05] +116E; [94 62, 05, 05] +315C; [94 62, 05, 09] +FFD3; [94 62, 05, A3] -A336; [90 AF, 05, 05] +116F; [94 64, 05, 05] +315D; [94 64, 05, 09] +FFD4; [94 64, 05, A3] -A337; [90 B1, 05, 05] +1170; [94 66, 05, 05] +315E; [94 66, 05, 09] +FFD5; [94 66, 05, A3] -A338; [90 B3, 05, 05] +1171; [94 68, 05, 05] +315F; [94 68, 05, 09] +FFD6; [94 68, 05, A3] -A339; [90 B5, 05, 05] +1172; [94 6A, 05, 05] +3160; [94 6A, 05, 09] +FFD7; [94 6A, 05, A3] -A33A; [90 B7, 05, 05] +1173; [94 6C, 05, 05] +3161; [94 6C, 05, 09] +FFDA; [94 6C, 05, A3] -A33B; [90 B9, 05, 05] +1174; [94 6E, 05, 05] +3162; [94 6E, 05, 09] +FFDB; [94 6E, 05, A3] -A33C; [90 BB, 05, 05] +1175; [94 70, 05, 05] +3163; [94 70, 05, 09] +FFDC; [94 70, 05, A3] -A33D; [90 BD, 05, 05] +1176; [94 72 10, 05, 05] -A33E; [90 BF, 05, 05] +1177; [94 72 13, 05, 05] -A33F; [90 C1, 05, 05] +1178; [94 72 16, 05, 05] -A340; [90 C3, 05, 05] +1179; [94 72 19, 05, 05] -A341; [90 C5, 05, 05] +117A; [94 72 1C, 05, 05] -A342; [90 C7, 05, 05] +117B; [94 72 1F, 05, 05] -A343; [90 C9, 05, 05] +117C; [94 72 22, 05, 05] -A344; [90 CB, 05, 05] +117D; [94 72 25, 05, 05] -A345; [90 CD, 05, 05] +117E; [94 72 28, 05, 05] -A346; [90 CF, 05, 05] +117F; [94 72 2B, 05, 05] -A347; [90 D1, 05, 05] +1180; [94 72 2E, 05, 05] -A348; [90 D3, 05, 05] +1181; [94 72 31, 05, 05] -A349; [90 D5, 05, 05] +1182; [94 72 34, 05, 05] -A34A; [90 D7, 05, 05] +1183; [94 72 37, 05, 05] -A34B; [90 D9, 05, 05] +1184; [94 72 3A, 05, 05] +3187; [94 72 3A, 05, 09] -A34C; [90 DB, 05, 05] +1185; [94 72 3D, 05, 05] +3188; [94 72 3D, 05, 09] -A34D; [90 DD, 05, 05] +1186; [94 72 40, 05, 05] -A34E; [90 DF, 05, 05] +1187; [94 72 43, 05, 05] -A34F; [90 E1, 05, 05] +1188; [94 72 46, 05, 05] +3189; [94 72 46, 05, 09] -A350; [90 E3, 05, 05] +1189; [94 72 49, 05, 05] -A351; [90 E5, 05, 05] +118A; [94 72 4C, 05, 05] -A352; [90 E7, 05, 05] +118B; [94 72 4F, 05, 05] -A353; [90 E9, 05, 05] +118C; [94 72 52, 05, 05] -A354; [90 EB, 05, 05] +118D; [94 72 55, 05, 05] -A355; [90 ED, 05, 05] +118E; [94 72 58, 05, 05] -A356; [90 EF, 05, 05] +118F; [94 72 5B, 05, 05] -A357; [90 F1, 05, 05] +1190; [94 72 5E, 05, 05] -A358; [90 F3, 05, 05] +1191; [94 72 61, 05, 05] +318A; [94 72 61, 05, 09] -A359; [90 F5, 05, 05] +1192; [94 72 64, 05, 05] +318B; [94 72 64, 05, 09] -A35A; [90 F7, 05, 05] +1193; [94 72 67, 05, 05] -A35B; [90 F9, 05, 05] +1194; [94 72 6A, 05, 05] +318C; [94 72 6A, 05, 09] -A35C; [90 FB, 05, 05] +1195; [94 72 6D, 05, 05] -A35D; [90 FD, 05, 05] +1196; [94 72 70, 05, 05] -A35E; [91 05, 05, 05] +1197; [94 72 73, 05, 05] -A35F; [91 07, 05, 05] +1198; [94 72 76, 05, 05] -A360; [91 09, 05, 05] +1199; [94 72 79, 05, 05] -A361; [91 0B, 05, 05] +119A; [94 72 7C, 05, 05] -A362; [91 0D, 05, 05] +119B; [94 72 7F, 05, 05] -A363; [91 0F, 05, 05] +119C; [94 72 82, 05, 05] -A364; [91 11, 05, 05] +119D; [94 72 85, 05, 05] -A365; [91 13, 05, 05] +119E; [94 72 88, 05, 05] +318D; [94 72 88, 05, 09] -A366; [91 15, 05, 05] +119F; [94 72 8B, 05, 05] -A367; [91 17, 05, 05] +11A0; [94 72 8E, 05, 05] -A368; [91 19, 05, 05] +11A1; [94 72 91, 05, 05] +318E; [94 72 91, 05, 09] -A369; [91 1B, 05, 05] +11A2; [94 72 94, 05, 05] -A36A; [91 1D, 05, 05] +11A8; [94 74, 05, 05] -A36B; [91 1F, 05, 05] +11A9; [94 76, 05, 05] -A36C; [91 21, 05, 05] +11AA; [94 78, 05, 05] +3133; [94 78, 05, 09] +FFA3; [94 78, 05, A3] -A36D; [91 23, 05, 05] +11AB; [94 7A, 05, 05] -A36E; [91 25, 05, 05] +11AC; [94 7C, 05, 05] +3135; [94 7C, 05, 09] +FFA5; [94 7C, 05, A3] -A36F; [91 27, 05, 05] +11AD; [94 7E, 05, 05] +3136; [94 7E, 05, 09] +FFA6; [94 7E, 05, A3] -A370; [91 29, 05, 05] +11AE; [94 80, 05, 05] -A371; [91 2B, 05, 05] +11AF; [94 82, 05, 05] -A372; [91 2D, 05, 05] +11B0; [94 84, 05, 05] +313A; [94 84, 05, 09] +FFAA; [94 84, 05, A3] -A373; [91 2F, 05, 05] +11B1; [94 86, 05, 05] +313B; [94 86, 05, 09] +FFAB; [94 86, 05, A3] -A374; [91 31, 05, 05] +11B2; [94 88, 05, 05] +313C; [94 88, 05, 09] +FFAC; [94 88, 05, A3] -A375; [91 33, 05, 05] +11B3; [94 8A, 05, 05] +313D; [94 8A, 05, 09] +FFAD; [94 8A, 05, A3] -A376; [91 35, 05, 05] +11B4; [94 8C, 05, 05] +313E; [94 8C, 05, 09] +FFAE; [94 8C, 05, A3] -A377; [91 37, 05, 05] +11B5; [94 8E, 05, 05] +313F; [94 8E, 05, 09] +FFAF; [94 8E, 05, A3] -A378; [91 39, 05, 05] +11B6; [94 90, 05, 05] -A379; [91 3B, 05, 05] +11B7; [94 92, 05, 05] -A37A; [91 3D, 05, 05] +11B8; [94 94, 05, 05] -A37B; [91 3F, 05, 05] +11B9; [94 96, 05, 05] -A37C; [91 41, 05, 05] +11BA; [94 98, 05, 05] -A37D; [91 43, 05, 05] +11BB; [94 9A, 05, 05] -A37E; [91 45, 05, 05] +11BC; [94 9C, 05, 05] -A37F; [91 47, 05, 05] +11BD; [94 9E, 05, 05] -A380; [91 49, 05, 05] +11BE; [94 A0, 05, 05] -A381; [91 4B, 05, 05] +11BF; [94 A2, 05, 05] -A382; [91 4D, 05, 05] +11C0; [94 A4, 05, 05] -A383; [91 4F, 05, 05] +11C1; [94 A6, 05, 05] -A384; [91 51, 05, 05] +11C2; [94 A8, 05, 05] -A385; [91 53, 05, 05] +11C3; [94 AA 10, 05, 05] -A386; [91 55, 05, 05] +11C4; [94 AA 13, 05, 05] -A387; [91 57, 05, 05] +11C5; [94 AA 16, 05, 05] -A388; [91 59, 05, 05] +11C6; [94 AA 19, 05, 05] -A389; [91 5B, 05, 05] +11C7; [94 AA 1C, 05, 05] +3167; [94 AA 1C, 05, 09] -A38A; [91 5D, 05, 05] +11C8; [94 AA 1F, 05, 05] +3168; [94 AA 1F, 05, 09] -A38B; [91 5F, 05, 05] +11C9; [94 AA 22, 05, 05] -A38C; [91 61, 05, 05] +11CA; [94 AA 25, 05, 05] -A38D; [91 63, 05, 05] +11CB; [94 AA 28, 05, 05] -A38E; [91 65, 05, 05] +11CC; [94 AA 2B, 05, 05] +3169; [94 AA 2B, 05, 09] -A38F; [91 67, 05, 05] +11CD; [94 AA 2E, 05, 05] -A390; [91 69, 05, 05] +11CE; [94 AA 31, 05, 05] +316A; [94 AA 31, 05, 09] -A391; [91 6B, 05, 05] +11CF; [94 AA 34, 05, 05] -A392; [91 6D, 05, 05] +11D0; [94 AA 37, 05, 05] -A393; [91 6F, 05, 05] +11D1; [94 AA 3A, 05, 05] -A394; [91 71, 05, 05] +11D2; [94 AA 3D, 05, 05] -A395; [91 73, 05, 05] +11D3; [94 AA 40, 05, 05] +316B; [94 AA 40, 05, 09] -A396; [91 75, 05, 05] +11D4; [94 AA 43, 05, 05] -A397; [91 77, 05, 05] +11D5; [94 AA 46, 05, 05] -A398; [91 79, 05, 05] +11D6; [94 AA 49, 05, 05] -A399; [91 7B, 05, 05] +11D7; [94 AA 4C, 05, 05] +316C; [94 AA 4C, 05, 09] -A39A; [91 7D, 05, 05] +11D8; [94 AA 4F, 05, 05] -A39B; [91 7F, 05, 05] +11D9; [94 AA 52, 05, 05] +316D; [94 AA 52, 05, 09] -A39C; [91 81, 05, 05] +11DA; [94 AA 55, 05, 05] -A39D; [91 83, 05, 05] +11DB; [94 AA 58, 05, 05] -A39E; [91 85, 05, 05] +11DC; [94 AA 5B, 05, 05] -A39F; [91 87, 05, 05] +11DD; [94 AA 5E, 05, 05] +316F; [94 AA 5E, 05, 09] -A3A0; [91 89, 05, 05] +11DE; [94 AA 61, 05, 05] -A3A1; [91 8B, 05, 05] +11DF; [94 AA 64, 05, 05] +3170; [94 AA 64, 05, 09] -A3A2; [91 8D, 05, 05] +11E0; [94 AA 67, 05, 05] -A3A3; [91 8F, 05, 05] +11E1; [94 AA 6A, 05, 05] -A3A4; [91 91, 05, 05] +11E2; [94 AA 6D, 05, 05] -A3A5; [91 93, 05, 05] +11E3; [94 AA 70, 05, 05] -A3A6; [91 95, 05, 05] +11E4; [94 AA 73, 05, 05] -A3A7; [91 97, 05, 05] +11E5; [94 AA 76, 05, 05] -A3A8; [91 99, 05, 05] +11E6; [94 AA 79, 05, 05] -A3A9; [91 9B, 05, 05] +11E7; [94 AA 7C, 05, 05] -A3AA; [91 9D, 05, 05] +11E8; [94 AA 7F, 05, 05] -A3AB; [91 9F, 05, 05] +11E9; [94 AA 82, 05, 05] -A3AC; [91 A1, 05, 05] +11EA; [94 AA 85, 05, 05] -A3AD; [91 A3, 05, 05] +11EB; [94 AA 88, 05, 05] -A3AE; [91 A5, 05, 05] +11EC; [94 AA 8B, 05, 05] -A3AF; [91 A7, 05, 05] +11ED; [94 AA 8E, 05, 05] -A3B0; [91 A9, 05, 05] +11EE; [94 AA 91, 05, 05] -A3B1; [91 AB, 05, 05] +11EF; [94 AA 94, 05, 05] -A3B2; [91 AD, 05, 05] +11F0; [94 AA 97, 05, 05] -A3B3; [91 AF, 05, 05] +11F1; [94 AA 9A, 05, 05] +3182; [94 AA 9A, 05, 09] -A3B4; [91 B1, 05, 05] +11F2; [94 AA 9D, 05, 05] +3183; [94 AA 9D, 05, 09] -A3B5; [91 B3, 05, 05] +11F3; [94 AA A0, 05, 05] -A3B6; [91 B5, 05, 05] +11F4; [94 AA A3, 05, 05] -A3B7; [91 B7, 05, 05] +11F5; [94 AA A6, 05, 05] -A3B8; [91 B9, 05, 05] +11F6; [94 AA A9, 05, 05] -A3B9; [91 BB, 05, 05] +11F7; [94 AA AC, 05, 05] -A3BA; [91 BD, 05, 05] +11F8; [94 AA AF, 05, 05] -A3BB; [91 BF, 05, 05] +11F9; [94 AA B2, 05, 05] -A3BC; [91 C1, 05, 05] +3041; [95 20, 05, 19] +3042; [95 20, 05, 9B] +30A1; [95 20, 05, 1D] +FF67; [95 20, 05, 1F] +30A2; [95 20, 05, A1] +FF71; [95 20, 05, A3] +32D0; [95 20, 05, 25] +3303; [95 20, 05, 37][26 34, 05, 37][95 70, 05, 3D] +3300; [95 20, 05, 37][95 52, 05, 37][, E2 35, 3D][26 34, 05, 3D][95 46, 05, 3D] +3301; [95 20, 05, 37][95 70, 05, 37][95 56, 05, 3D][95 20, 05, 3D] +3302; [95 20, 05, 37][95 7E, 05, 37][95 58, 05, 3D][, E2 35, 3D][95 20, 05, 3D] -A3BD; [91 C3, 05, 05] +3043; [95 22, 05, 19] +3044; [95 22, 05, 9B] +30A3; [95 22, 05, 1D] +FF68; [95 22, 05, 1F] +30A4; [95 22, 05, A1] +FF72; [95 22, 05, A3] +32D1; [95 22, 05, 25] +3304; [95 22, 05, 37][95 4A, 05, 37][95 7E, 05, 3D][95 2E, 05, 3D][, E2 25, 3D] +3305; [95 22, 05, 37][95 7E, 05, 37][95 40, 05, 3D] + +3045; [95 24, 05, 19] +3046; [95 24, 05, 9B] +30A5; [95 24, 05, 1D] +FF69; [95 24, 05, 1F] +30A6; [95 24, 05, A1] +FF73; [95 24, 05, A3] +32D2; [95 24, 05, 25] +3094; [95 24, 05, 9B][, E2 25, 05] +30F4; [95 24, 05, A1][, E2 25, 05] +3306; [95 24, 05, 37][95 28, 05, 37][95 7E, 05, 3D] + +3047; [95 26, 05, 19] +3048; [95 26, 05, 9B] +30A7; [95 26, 05, 1D] +FF6A; [95 26, 05, 1F] +30A8; [95 26, 05, A1] +FF74; [95 26, 05, A3] +32D3; [95 26, 05, 25] +3308; [95 26, 05, 37][26 34, 05, 37][95 2A, 05, 3D][26 34, 05, 3D] +3307; [95 26, 05, 37][95 38, 05, 37][95 2E, 05, 3D][26 34, 05, 3D][95 46, 05, 3D][, E2 25, 3D] + +3049; [95 28, 05, 19] +304A; [95 28, 05, 9B] +30A9; [95 28, 05, 1D] +FF6B; [95 28, 05, 1F] +30AA; [95 28, 05, A1] +FF75; [95 28, 05, A3] +32D4; [95 28, 05, 25] +330A; [95 28, 05, 37][26 34, 05, 37][95 60, 05, 3D] +3309; [95 28, 05, 37][95 7E, 05, 37][95 38, 05, 3D] + +3095; [95 2A, 05, 19] +304B; [95 2A, 05, 9B] +30F5; [95 2A, 05, 1D] +30AB; [95 2A, 05, A1] +FF76; [95 2A, 05, A3] +32D5; [95 2A, 05, 25] +304C; [95 2A, 05, 9B][, E2 25, 05] +30AC; [95 2A, 05, A1][, E2 25, 05] +330B; [95 2A, 05, 37][95 22, 05, 37][95 6E, 05, 3D] +330C; [95 2A, 05, 37][95 6C, 05, 37][95 42, 05, 3D][95 46, 05, 3D] +330D; [95 2A, 05, 37][95 74, 05, 37][95 6E, 05, 3D][26 34, 05, 3D] +330E; [95 2A, 05, 37][, E2 25, 37][95 74, 05, 3D][95 7E, 05, 3D] +330F; [95 2A, 05, 37][, E2 25, 37][95 7E, 05, 3D][95 5C, 05, 3D] + +304D; [95 2C, 05, 9B] +30AD; [95 2C, 05, A1] +FF77; [95 2C, 05, A3] +32D6; [95 2C, 05, 25] +304E; [95 2C, 05, 9B][, E2 25, 05] +30AE; [95 2C, 05, A1][, E2 25, 05] +3310; [95 2C, 05, 37][, E2 25, 37][95 2A, 05, 3D][, E2 25, 3D] +3311; [95 2C, 05, 37][, E2 25, 37][95 4A, 05, 3D][26 34, 05, 3D] +3312; [95 2C, 05, 37][95 68, 05, 37][95 6E, 05, 3D][26 34, 05, 3D] +3313; [95 2C, 05, 37][, E2 25, 37][95 70, 05, 3D][95 3E, 05, 3D][, E2 25, 3D][26 34, 05, 3D] +3314; [95 2C, 05, 37][95 74, 05, 37] +3315; [95 2C, 05, 37][95 74, 05, 37][95 2E, 05, 3D][, E2 25, 3D][95 6C, 05, 3D][95 60, 05, 3D] +3316; [95 2C, 05, 37][95 74, 05, 37][95 62, 05, 3D][26 34, 05, 3D][95 46, 05, 3D][95 70, 05, 3D] +3317; [95 2C, 05, 37][95 74, 05, 37][95 76, 05, 3D][95 42, 05, 3D][95 46, 05, 3D] + +304F; [95 2E, 05, 9B] +31F0; [95 2E, 05, 1D] +30AF; [95 2E, 05, A1] +FF78; [95 2E, 05, A3] +32D7; [95 2E, 05, 25] +3050; [95 2E, 05, 9B][, E2 25, 05] +30B0; [95 2E, 05, A1][, E2 25, 05] +3318; [95 2E, 05, 37][, E2 25, 37][95 6C, 05, 3D][95 60, 05, 3D] +3319; [95 2E, 05, 37][, E2 25, 37][95 6C, 05, 3D][95 60, 05, 3D][95 46, 05, 3D][95 7E, 05, 3D] +331A; [95 2E, 05, 37][95 70, 05, 37][95 3A, 05, 3D][, E2 25, 3D][95 22, 05, 3D][95 74, 05, 3D] +331B; [95 2E, 05, 37][95 74, 05, 37][26 34, 05, 3D][95 4E, 05, 3D] + +3096; [95 30, 05, 19] +3051; [95 30, 05, 9B] +30F6; [95 30, 05, 1D] +30B1; [95 30, 05, A1] +FF79; [95 30, 05, A3] +32D8; [95 30, 05, 25] +3052; [95 30, 05, 9B][, E2 25, 05] +30B2; [95 30, 05, A1][, E2 25, 05] +331C; [95 30, 05, 37][26 34, 05, 37][95 38, 05, 3D] + +3053; [95 32, 05, 9B] +30B3; [95 32, 05, A1] +FF7A; [95 32, 05, A3] +32D9; [95 32, 05, 25] +3054; [95 32, 05, 9B][, E2 25, 05] +30B4; [95 32, 05, A1][, E2 25, 05] +331E; [95 32, 05, 37][26 34, 05, 37][95 5A, 05, 3D][, E2 35, 3D] +30FF; [95 32, 05, 2B][95 46, 05, 2B] +331D; [95 32, 05, 37][95 70, 05, 37][95 48, 05, 3D] + +3055; [95 34, 05, 9B] +30B5; [95 34, 05, A1] +FF7B; [95 34, 05, A3] +32DA; [95 34, 05, 25] +3056; [95 34, 05, 9B][, E2 25, 05] +30B6; [95 34, 05, A1][, E2 25, 05] +331F; [95 34, 05, 37][95 22, 05, 37][95 2E, 05, 3D][95 70, 05, 3D] +3320; [95 34, 05, 37][95 7E, 05, 37][95 40, 05, 3D][26 34, 05, 3D][95 60, 05, 3D] + +3057; [95 36, 05, 9B] +31F1; [95 36, 05, 1D] +30B7; [95 36, 05, A1] +FF7C; [95 36, 05, A3] +32DB; [95 36, 05, 25] +3058; [95 36, 05, 9B][, E2 25, 05] +30B8; [95 36, 05, A1][, E2 25, 05] +3006; [95 36, 05, 09][95 62, 05, 09] +3321; [95 36, 05, 37][95 6E, 05, 37][95 7E, 05, 3D][95 2E, 05, 3D][, E2 25, 3D] + +3059; [95 38, 05, 9B] +31F2; [95 38, 05, 1D] +30B9; [95 38, 05, A1] +FF7D; [95 38, 05, A3] +32DC; [95 38, 05, 25] +305A; [95 38, 05, 9B][, E2 25, 05] +30BA; [95 38, 05, A1][, E2 25, 05] + +305B; [95 3A, 05, 9B] +30BB; [95 3A, 05, A1] +FF7E; [95 3A, 05, A3] +32DD; [95 3A, 05, 25] +305C; [95 3A, 05, 9B][, E2 25, 05] +30BC; [95 3A, 05, A1][, E2 25, 05] +3322; [95 3A, 05, 37][95 7E, 05, 37][95 40, 05, 3D] +3323; [95 3A, 05, 37][95 7E, 05, 37][95 46, 05, 3D] + +305D; [95 3C, 05, 9B] +30BD; [95 3C, 05, A1] +FF7F; [95 3C, 05, A3] +32DE; [95 3C, 05, 25] +305E; [95 3C, 05, 9B][, E2 25, 05] +30BE; [95 3C, 05, A1][, E2 25, 05] + +305F; [95 3E, 05, 9B] +30BF; [95 3E, 05, A1] +FF80; [95 3E, 05, A3] +32DF; [95 3E, 05, 25] +3060; [95 3E, 05, 9B][, E2 25, 05] +30C0; [95 3E, 05, A1][, E2 25, 05] +3324; [95 3E, 05, 37][, E2 25, 37][26 34, 05, 3D][95 38, 05, 3D] + +3061; [95 40, 05, 9B] +30C1; [95 40, 05, A1] +FF81; [95 40, 05, A3] +32E0; [95 40, 05, 25] +3062; [95 40, 05, 9B][, E2 25, 05] +30C2; [95 40, 05, A1][, E2 25, 05] + +3063; [95 42, 05, 19] +3064; [95 42, 05, 9B] +30C3; [95 42, 05, 1D] +FF6F; [95 42, 05, 1F] +30C4; [95 42, 05, A1] +FF82; [95 42, 05, A3] +32E1; [95 42, 05, 25] +3065; [95 42, 05, 9B][, E2 25, 05] +30C5; [95 42, 05, A1][, E2 25, 05] + +3066; [95 44, 05, 9B] +30C6; [95 44, 05, A1] +FF83; [95 44, 05, A3] +32E2; [95 44, 05, 25] +3067; [95 44, 05, 9B][, E2 25, 05] +30C7; [95 44, 05, A1][, E2 25, 05] +3325; [95 44, 05, 37][, E2 25, 37][95 36, 05, 3D] + +3068; [95 46, 05, 9B] +31F3; [95 46, 05, 1D] +30C8; [95 46, 05, A1] +FF84; [95 46, 05, A3] +32E3; [95 46, 05, 25] +3069; [95 46, 05, 9B][, E2 25, 05] +30C9; [95 46, 05, A1][, E2 25, 05] +3326; [95 46, 05, 37][, E2 25, 37][95 70, 05, 3D] +3327; [95 46, 05, 37][95 7E, 05, 37] + +306A; [95 48, 05, 9B] +30CA; [95 48, 05, A1] +FF85; [95 48, 05, A3] +32E4; [95 48, 05, 25] +3328; [95 48, 05, 37][95 50, 05, 37] + +306B; [95 4A, 05, 9B] +30CB; [95 4A, 05, A1] +FF86; [95 4A, 05, A3] +32E5; [95 4A, 05, 25] + +306C; [95 4C, 05, 9B] +31F4; [95 4C, 05, 1D] +30CC; [95 4C, 05, A1] +FF87; [95 4C, 05, A3] +32E6; [95 4C, 05, 25] + +306D; [95 4E, 05, 9B] +30CD; [95 4E, 05, A1] +FF88; [95 4E, 05, A3] +32E7; [95 4E, 05, 25] + +306E; [95 50, 05, 9B] +30CE; [95 50, 05, A1] +FF89; [95 50, 05, A3] +32E8; [95 50, 05, 25] +3329; [95 50, 05, 37][95 42, 05, 37][95 46, 05, 3D] + +306F; [95 52, 05, 9B] +31F5; [95 52, 05, 1D] +30CF; [95 52, 05, A1] +FF8A; [95 52, 05, A3] +32E9; [95 52, 05, 25] +3070; [95 52, 05, 9B][, E2 25, 05] +30D0; [95 52, 05, A1][, E2 25, 05] +3071; [95 52, 05, 9B][, E2 35, 05] +30D1; [95 52, 05, A1][, E2 35, 05] +332B; [95 52, 05, 37][, E2 35, 37][26 34, 05, 3D][95 3A, 05, 3D][95 7E, 05, 3D][95 46, 05, 3D] +332C; [95 52, 05, 37][, E2 35, 37][26 34, 05, 3D][95 42, 05, 3D] +332D; [95 52, 05, 37][, E2 25, 37][26 34, 05, 3D][95 72, 05, 3D][95 70, 05, 3D] +332A; [95 52, 05, 37][95 22, 05, 37][95 42, 05, 3D] + +3072; [95 54, 05, 9B] +31F6; [95 54, 05, 1D] +30D2; [95 54, 05, A1] +FF8B; [95 54, 05, A3] +32EA; [95 54, 05, 25] +3073; [95 54, 05, 9B][, E2 25, 05] +30D3; [95 54, 05, A1][, E2 25, 05] +3074; [95 54, 05, 9B][, E2 35, 05] +30D4; [95 54, 05, A1][, E2 35, 05] +332E; [95 54, 05, 37][, E2 35, 37][95 20, 05, 3D][95 38, 05, 3D][95 46, 05, 3D][95 70, 05, 3D] +332F; [95 54, 05, 37][, E2 35, 37][95 2E, 05, 3D][95 70, 05, 3D] +3330; [95 54, 05, 37][, E2 35, 37][95 32, 05, 3D] +3331; [95 54, 05, 37][, E2 25, 37][95 70, 05, 3D] + +3075; [95 56, 05, 9B] +31F7; [95 56, 05, 1D] +30D5; [95 56, 05, A1] +FF8C; [95 56, 05, A3] +32EB; [95 56, 05, 25] +3076; [95 56, 05, 9B][, E2 25, 05] +30D6; [95 56, 05, A1][, E2 25, 05] +3077; [95 56, 05, 9B][, E2 35, 05] +30D7; [95 56, 05, A1][, E2 35, 05] +3332; [95 56, 05, 37][95 20, 05, 37][95 6C, 05, 3D][95 42, 05, 3D][95 46, 05, 3D][, E2 25, 3D] +3333; [95 56, 05, 37][95 22, 05, 37][26 34, 05, 3D][95 46, 05, 3D] +3334; [95 56, 05, 37][, E2 25, 37][95 42, 05, 3D][95 36, 05, 3D][95 26, 05, 3D][95 70, 05, 3D] +3335; [95 56, 05, 37][95 6C, 05, 37][95 7E, 05, 3D] + +3078; [95 58, 05, 9B] +31F8; [95 58, 05, 1D] +30D8; [95 58, 05, A1] +FF8D; [95 58, 05, A3] +32EC; [95 58, 05, 25] +3079; [95 58, 05, 9B][, E2 25, 05] +30D9; [95 58, 05, A1][, E2 25, 05] +307A; [95 58, 05, 9B][, E2 35, 05] +30DA; [95 58, 05, A1][, E2 35, 05] +333B; [95 58, 05, 37][, E2 35, 37][26 34, 05, 3D][95 36, 05, 3D][, E2 25, 3D] +333C; [95 58, 05, 37][, E2 25, 37][26 34, 05, 3D][95 3E, 05, 3D] +3336; [95 58, 05, 37][95 2E, 05, 37][95 3E, 05, 3D][26 34, 05, 3D][95 70, 05, 3D] +3337; [95 58, 05, 37][, E2 35, 37][95 3C, 05, 3D] +3338; [95 58, 05, 37][, E2 35, 37][95 4A, 05, 3D][95 54, 05, 3D] +3339; [95 58, 05, 37][95 70, 05, 37][95 42, 05, 3D] +333A; [95 58, 05, 37][, E2 35, 37][95 7E, 05, 3D][95 38, 05, 3D] + +307B; [95 5A, 05, 9B] +31F9; [95 5A, 05, 1D] +30DB; [95 5A, 05, A1] +FF8E; [95 5A, 05, A3] +32ED; [95 5A, 05, 25] +307C; [95 5A, 05, 9B][, E2 25, 05] +30DC; [95 5A, 05, A1][, E2 25, 05] +307D; [95 5A, 05, 9B][, E2 35, 05] +30DD; [95 5A, 05, A1][, E2 35, 05] +3341; [95 5A, 05, 37][26 34, 05, 37][95 70, 05, 3D] +3342; [95 5A, 05, 37][26 34, 05, 37][95 7E, 05, 3D] +333D; [95 5A, 05, 37][, E2 35, 37][95 22, 05, 3D][95 7E, 05, 3D][95 46, 05, 3D] +333E; [95 5A, 05, 37][, E2 25, 37][95 70, 05, 3D][95 46, 05, 3D] +333F; [95 5A, 05, 37][95 7E, 05, 37] +3340; [95 5A, 05, 37][, E2 35, 37][95 7E, 05, 3D][95 46, 05, 3D][, E2 25, 3D] + +307E; [95 5C, 05, 9B] +30DE; [95 5C, 05, A1] +FF8F; [95 5C, 05, A3] +32EE; [95 5C, 05, 25] +3343; [95 5C, 05, 37][95 22, 05, 37][95 2E, 05, 3D][95 74, 05, 3D] +3344; [95 5C, 05, 37][95 22, 05, 37][95 70, 05, 3D] +303C; [95 5C, 05, 09][95 38, 05, 09] +3345; [95 5C, 05, 37][95 42, 05, 37][95 52, 05, 3D] +3346; [95 5C, 05, 37][95 70, 05, 37][95 2E, 05, 3D] +3347; [95 5C, 05, 37][95 7E, 05, 37][95 36, 05, 3D][95 6A, 05, 3D][95 7E, 05, 3D] + +307F; [95 5E, 05, 9B] +30DF; [95 5E, 05, A1] +FF90; [95 5E, 05, A3] +32EF; [95 5E, 05, 25] +3348; [95 5E, 05, 37][95 2E, 05, 37][95 74, 05, 3D][95 7E, 05, 3D] +3349; [95 5E, 05, 37][95 6E, 05, 37] +334A; [95 5E, 05, 37][95 6E, 05, 37][95 52, 05, 3D][, E2 25, 3D][26 34, 05, 3D][95 70, 05, 3D] + +3080; [95 60, 05, 9B] +31FA; [95 60, 05, 1D] +30E0; [95 60, 05, A1] +FF91; [95 60, 05, A3] +32F0; [95 60, 05, 25] + +3081; [95 62, 05, 9B] +30E1; [95 62, 05, A1] +FF92; [95 62, 05, A3] +32F1; [95 62, 05, 25] +334D; [95 62, 05, 37][26 34, 05, 37][95 46, 05, 3D][95 70, 05, 3D] +334B; [95 62, 05, 37][95 2A, 05, 37][, E2 25, 3D] +334C; [95 62, 05, 37][95 2A, 05, 37][, E2 25, 3D][95 46, 05, 3D][95 7E, 05, 3D] + +3082; [95 64, 05, 9B] +30E2; [95 64, 05, A1] +FF93; [95 64, 05, A3] +32F2; [95 64, 05, 25] + +3083; [95 66, 05, 19] +3084; [95 66, 05, 9B] +30E3; [95 66, 05, 1D] +FF6C; [95 66, 05, 1F] +30E4; [95 66, 05, A1] +FF94; [95 66, 05, A3] +32F3; [95 66, 05, 25] +334E; [95 66, 05, 37][26 34, 05, 37][95 46, 05, 3D][, E2 25, 3D] +334F; [95 66, 05, 37][26 34, 05, 37][95 70, 05, 3D] + +3085; [95 68, 05, 19] +3086; [95 68, 05, 9B] +30E5; [95 68, 05, 1D] +FF6D; [95 68, 05, 1F] +30E6; [95 68, 05, A1] +FF95; [95 68, 05, A3] +32F4; [95 68, 05, 25] +3350; [95 68, 05, 37][95 20, 05, 37][95 7E, 05, 3D] + +3087; [95 6A, 05, 19] +3088; [95 6A, 05, 9B] +30E7; [95 6A, 05, 1D] +FF6E; [95 6A, 05, 1F] +30E8; [95 6A, 05, A1] +FF96; [95 6A, 05, A3] +32F5; [95 6A, 05, 25] +309F; [95 6A, 05, 2B][95 6E, 05, 2B] + +3089; [95 6C, 05, 9B] +31FB; [95 6C, 05, 1D] +30E9; [95 6C, 05, A1] +FF97; [95 6C, 05, A3] +32F6; [95 6C, 05, 25] + +308A; [95 6E, 05, 9B] +31FC; [95 6E, 05, 1D] +30EA; [95 6E, 05, A1] +FF98; [95 6E, 05, A3] +32F7; [95 6E, 05, 25] +3351; [95 6E, 05, 37][95 42, 05, 37][95 46, 05, 3D][95 70, 05, 3D] +3352; [95 6E, 05, 37][95 6C, 05, 37] + +308B; [95 70, 05, 9B] +31FD; [95 70, 05, 1D] +30EB; [95 70, 05, A1] +FF99; [95 70, 05, A3] +32F8; [95 70, 05, 25] +3354; [95 70, 05, 37][26 34, 05, 37][95 56, 05, 3D][, E2 25, 3D][95 70, 05, 3D] +3353; [95 70, 05, 37][95 54, 05, 37][, E2 35, 3D][26 34, 05, 3D] + +308C; [95 72, 05, 9B] +31FE; [95 72, 05, 1D] +30EC; [95 72, 05, A1] +FF9A; [95 72, 05, A3] +32F9; [95 72, 05, 25] +3355; [95 72, 05, 37][95 60, 05, 37] +3356; [95 72, 05, 37][95 7E, 05, 37][95 46, 05, 3D][95 30, 05, 3D][, E2 25, 3D][95 7E, 05, 3D] + +308D; [95 74, 05, 9B] +31FF; [95 74, 05, 1D] +30ED; [95 74, 05, A1] +FF9B; [95 74, 05, A3] +32FA; [95 74, 05, 25] + +308E; [95 76, 05, 19] +308F; [95 76, 05, 9B] +30EE; [95 76, 05, 1D] +30EF; [95 76, 05, A1] +FF9C; [95 76, 05, A3] +32FB; [95 76, 05, 25] +30F7; [95 76, 05, A1][, E2 25, 05] +3357; [95 76, 05, 37][95 42, 05, 37][95 46, 05, 3D] -A3BE; [91 C5, 05, 05] +3090; [95 78, 05, 9B] +30F0; [95 78, 05, A1] +32FC; [95 78, 05, 25] +30F8; [95 78, 05, A1][, E2 25, 05] -A3BF; [91 C7, 05, 05] +3091; [95 7A, 05, 9B] +30F1; [95 7A, 05, A1] +32FD; [95 7A, 05, 25] +30F9; [95 7A, 05, A1][, E2 25, 05] -A3C0; [91 C9, 05, 05] +3092; [95 7C, 05, 9B] +30F2; [95 7C, 05, A1] +FF66; [95 7C, 05, A3] +32FE; [95 7C, 05, 25] +30FA; [95 7C, 05, A1][, E2 25, 05] -A3C1; [91 CB, 05, 05] +3093; [95 7E, 05, 9B] +30F3; [95 7E, 05, A1] +FF9D; [95 7E, 05, A3] -A3C2; [91 CD, 05, 05] +3105; [96 20, 05, 05] +31A0; [96 20, 05, 09][, E4 5D, 09] -A3C3; [91 CF, 05, 05] +3106; [96 22, 05, 05] +31B4; [96 22, 05, 31] -A3C4; [91 D1, 05, 05] +3107; [96 24, 05, 05] -A3C5; [91 D3, 05, 05] +3108; [96 26, 05, 05] -A3C6; [91 D5, 05, 05] +312A; [96 28, 05, 05] -A3C7; [91 D7, 05, 05] +3109; [96 2A, 05, 05] -A3C8; [91 D9, 05, 05] +310A; [96 2C, 05, 05] +31B5; [96 2C, 05, 31] -A3C9; [91 DB, 05, 05] +310B; [96 2E, 05, 05] -A3CA; [91 DD, 05, 05] +310C; [96 30, 05, 05] -A3CB; [91 DF, 05, 05] +310D; [96 32, 05, 05] +31A3; [96 32, 05, 09][, E4 5D, 09] -A3CC; [91 E1, 05, 05] +310E; [96 34, 05, 05] +31B6; [96 34, 05, 31] -A3CD; [91 E3, 05, 05] +312B; [96 36, 05, 05] -A3CE; [91 E5, 05, 05] +31AD; [96 38, 05, 05] -A3CF; [91 E7, 05, 05] +310F; [96 3A, 05, 05] +31B7; [96 3A, 05, 31] -A3D0; [91 E9, 05, 05] +3110; [96 3C, 05, 05] +31A2; [96 3C, 05, 09][, E4 5D, 09] -A3D1; [91 EB, 05, 05] +3111; [96 3E, 05, 05] -A3D2; [91 ED, 05, 05] +3112; [96 40, 05, 05] -A3D3; [91 EF, 05, 05] +312C; [96 42, 05, 05] -A3D4; [91 F1, 05, 05] +3113; [96 44, 05, 05] -A3D5; [91 F3, 05, 05] +3114; [96 46, 05, 05] -A3D6; [91 F5, 05, 05] +3115; [96 48, 05, 05] -A3D7; [91 F7, 05, 05] +3116; [96 4A, 05, 05] -A3D8; [91 F9, 05, 05] +3117; [96 4C, 05, 05] +31A1; [96 4C, 05, 09][, E4 5D, 09] -A3D9; [91 FB, 05, 05] +3118; [96 4E, 05, 05] -A3DA; [91 FD, 05, 05] +3119; [96 50, 05, 05] -A3DB; [92 05, 05, 05] +311A; [96 52, 05, 05] +31A9; [96 52, 05, 09][, E4 5D, 09] -A3DC; [92 07, 05, 05] +311B; [96 54, 05, 05] +31A7; [96 54, 05, 09][, E4 5D, 09] -A3DD; [92 09, 05, 05] +31A6; [96 56, 05, 05] -A3DE; [92 0B, 05, 05] +311C; [96 58, 05, 05] -A3DF; [92 0D, 05, 05] +311D; [96 5A, 05, 05] -A3E0; [92 0F, 05, 05] +31A4; [96 5C, 05, 05] +31A5; [96 5C, 05, 09][, E4 5D, 09] -A3E1; [92 11, 05, 05] +311E; [96 5E, 05, 05] +31AE; [96 5E, 05, 09][, E4 5D, 09] -A3E2; [92 13, 05, 05] +311F; [96 60, 05, 05] -A3E3; [92 15, 05, 05] +3120; [96 62, 05, 05] +31AF; [96 62, 05, 09][, E4 5D, 09] -A3E4; [92 17, 05, 05] +3121; [96 64, 05, 05] -A3E5; [92 19, 05, 05] +3122; [96 66, 05, 05] -A3E6; [92 1B, 05, 05] +3123; [96 68, 05, 05] -A3E7; [92 1D, 05, 05] +3124; [96 6A, 05, 05] -A3E8; [92 1F, 05, 05] +31B2; [96 6C, 05, 05] -A3E9; [92 21, 05, 05] +3125; [96 6E, 05, 05] -A3EA; [92 23, 05, 05] +31B0; [96 70, 05, 05] -A3EB; [92 25, 05, 05] +31B1; [96 72, 05, 05] -A3EC; [92 27, 05, 05] +31AC; [96 74, 05, 05] -A3ED; [92 29, 05, 05] +3126; [96 76, 05, 05] -A3EE; [92 2B, 05, 05] +3127; [96 78, 05, 05] +31AA; [96 78, 05, 09][, E4 5D, 09] +31B3; [96 78, 05, 2B][, E4 5D, 2B] -A3EF; [92 2D, 05, 05] +3128; [96 7A, 05, 05] +31AB; [96 7A, 05, 09][, E4 5D, 09] +31A8; [96 7A, 05, 09][, E4 6D, 09] -A3F0; [92 2F, 05, 05] +3129; [96 7C, 05, 05] -A3F1; [92 31, 05, 05] +A000; [97 20, 05, 05] -A3F2; [92 33, 05, 05] +A001; [97 22, 05, 05] -A3F3; [92 35, 05, 05] +A002; [97 24, 05, 05] -A3F4; [92 37, 05, 05] +A003; [97 26, 05, 05] -A3F5; [92 39, 05, 05] +A004; [97 28, 05, 05] -A3F6; [92 3B, 05, 05] +A005; [97 2A, 05, 05] -A3F7; [92 3D, 05, 05] +A006; [97 2C, 05, 05] -A3F8; [92 3F, 05, 05] +A007; [97 2E, 05, 05] -A3F9; [92 41, 05, 05] +A008; [97 30, 05, 05] -A3FA; [92 43, 05, 05] +A009; [97 32, 05, 05] -A3FB; [92 45, 05, 05] +A00A; [97 34, 05, 05] -A3FC; [92 47, 05, 05] +A00B; [97 36, 05, 05] -A3FD; [92 49, 05, 05] +A00C; [97 38, 05, 05] -A3FE; [92 4B, 05, 05] +A00D; [97 3A, 05, 05] -A3FF; [92 4D, 05, 05] +A00E; [97 3C, 05, 05] -A400; [92 4F, 05, 05] +A00F; [97 3E, 05, 05] -A401; [92 51, 05, 05] +A010; [97 40, 05, 05] -A402; [92 53, 05, 05] +A011; [97 42, 05, 05] -A403; [92 55, 05, 05] +A012; [97 44, 05, 05] -A404; [92 57, 05, 05] +A013; [97 46, 05, 05] -A405; [92 59, 05, 05] +A014; [97 48, 05, 05] -A406; [92 5B, 05, 05] +A015; [97 4A, 05, 05] -A407; [92 5D, 05, 05] +A016; [97 4C, 05, 05] -A408; [92 5F, 05, 05] +A017; [97 4E, 05, 05] -A409; [92 61, 05, 05] +A018; [97 50, 05, 05] -A40A; [92 63, 05, 05] +A019; [97 52, 05, 05] -A40B; [92 65, 05, 05] +A01A; [97 54, 05, 05] -A40C; [92 67, 05, 05] +A01B; [97 56, 05, 05] -A40D; [92 69, 05, 05] +A01C; [97 58, 05, 05] -A40E; [92 6B, 05, 05] +A01D; [97 5A, 05, 05] -A40F; [92 6D, 05, 05] +A01E; [97 5C, 05, 05] -A410; [92 6F, 05, 05] +A01F; [97 5E, 05, 05] -A411; [92 71, 05, 05] +A020; [97 60, 05, 05] -A412; [92 73, 05, 05] +A021; [97 62, 05, 05] -A413; [92 75, 05, 05] +A022; [97 64, 05, 05] -A414; [92 77, 05, 05] +A023; [97 66, 05, 05] -A415; [92 79, 05, 05] +A024; [97 68, 05, 05] -A416; [92 7B, 05, 05] +A025; [97 6A, 05, 05] -A417; [92 7D, 05, 05] +A026; [97 6C, 05, 05] -A418; [92 7F, 05, 05] +A027; [97 6E, 05, 05] -A419; [92 81, 05, 05] +A028; [97 70, 05, 05] -A41A; [92 83, 05, 05] +A029; [97 72, 05, 05] -A41B; [92 85, 05, 05] +A02A; [97 74, 05, 05] -A41C; [92 87, 05, 05] +A02B; [97 76, 05, 05] -A41D; [92 89, 05, 05] +A02C; [97 78, 05, 05] -A41E; [92 8B, 05, 05] +A02D; [97 7A, 05, 05] -A41F; [92 8D, 05, 05] +A02E; [97 7C, 05, 05] -A420; [92 8F, 05, 05] +A02F; [97 7E, 05, 05] -A421; [92 91, 05, 05] +A030; [97 80, 05, 05] -A422; [92 93, 05, 05] +A031; [97 82, 05, 05] -A423; [92 95, 05, 05] +A032; [97 84, 05, 05] -A424; [92 97, 05, 05] +A033; [97 86, 05, 05] -A425; [92 99, 05, 05] +A034; [97 88, 05, 05] -A426; [92 9B, 05, 05] +A035; [97 8A, 05, 05] -A427; [92 9D, 05, 05] +A036; [97 8C, 05, 05] -A428; [92 9F, 05, 05] +A037; [97 8E, 05, 05] -A429; [92 A1, 05, 05] +A038; [97 90, 05, 05] -A42A; [92 A3, 05, 05] +A039; [97 92, 05, 05] -A42B; [92 A5, 05, 05] +A03A; [97 94, 05, 05] -A42C; [92 A7, 05, 05] +A03B; [97 96, 05, 05] -A42D; [92 A9, 05, 05] +A03C; [97 98, 05, 05] -A42E; [92 AB, 05, 05] +A03D; [97 9A, 05, 05] -A42F; [92 AD, 05, 05] +A03E; [97 9C, 05, 05] -A430; [92 AF, 05, 05] +A03F; [97 9E, 05, 05] -A431; [92 B1, 05, 05] +A040; [97 A0, 05, 05] -A432; [92 B3, 05, 05] +A041; [97 A2, 05, 05] -A433; [92 B5, 05, 05] +A042; [97 A4, 05, 05] -A434; [92 B7, 05, 05] +A043; [97 A6, 05, 05] -A435; [92 B9, 05, 05] +A044; [97 A8, 05, 05] -A436; [92 BB, 05, 05] +A045; [97 AA, 05, 05] -A437; [92 BD, 05, 05] +A046; [97 AC, 05, 05] -A438; [92 BF, 05, 05] +A047; [97 AE, 05, 05] -A439; [92 C1, 05, 05] +A048; [97 B0, 05, 05] -A43A; [92 C3, 05, 05] +A049; [97 B2, 05, 05] -A43B; [92 C5, 05, 05] +A04A; [97 B4, 05, 05] -A43C; [92 C7, 05, 05] +A04B; [97 B6, 05, 05] -A43D; [92 C9, 05, 05] +A04C; [97 B8, 05, 05] -A43E; [92 CB, 05, 05] +A04D; [97 BA, 05, 05] -A43F; [92 CD, 05, 05] +A04E; [97 BC, 05, 05] -A440; [92 CF, 05, 05] +A04F; [97 BE, 05, 05] -A441; [92 D1, 05, 05] +A050; [97 C0, 05, 05] -A442; [92 D3, 05, 05] +A051; [97 C2, 05, 05] -A443; [92 D5, 05, 05] +A052; [97 C4, 05, 05] -A444; [92 D7, 05, 05] +A053; [97 C6, 05, 05] -A445; [92 D9, 05, 05] +A054; [97 C8, 05, 05] -A446; [92 DB, 05, 05] +A055; [97 CA, 05, 05] -A447; [92 DD, 05, 05] +A056; [97 CC, 05, 05] -A448; [92 DF, 05, 05] +A057; [97 CE, 05, 05] -A449; [92 E1, 05, 05] +A058; [97 D0, 05, 05] -A44A; [92 E3, 05, 05] +A059; [97 D2, 05, 05] -A44B; [92 E5, 05, 05] +A05A; [97 D4, 05, 05] -A44C; [92 E7, 05, 05] +A05B; [97 D6, 05, 05] -A44D; [92 E9, 05, 05] +A05C; [97 D8, 05, 05] -A44E; [92 EB, 05, 05] +A05D; [97 DA, 05, 05] -A44F; [92 ED, 05, 05] +A05E; [97 DC, 05, 05] -A450; [92 EF, 05, 05] +A05F; [97 DE, 05, 05] -A451; [92 F1, 05, 05] +A060; [97 E0, 05, 05] -A452; [92 F3, 05, 05] +A061; [97 E2, 05, 05] -A453; [92 F5, 05, 05] +A062; [97 E4, 05, 05] -A454; [92 F7, 05, 05] +A063; [97 E6, 05, 05] -A455; [92 F9, 05, 05] +A064; [97 E8, 05, 05] -A456; [92 FB, 05, 05] +A065; [97 EA, 05, 05] -A457; [92 FD, 05, 05] +A066; [97 EC, 05, 05] -A458; [93 05, 05, 05] +A067; [97 EE, 05, 05] -A459; [93 07, 05, 05] +A068; [97 F0, 05, 05] -A45A; [93 09, 05, 05] +A069; [97 F2, 05, 05] -A45B; [93 0B, 05, 05] +A06A; [97 F4, 05, 05] -A45C; [93 0D, 05, 05] +A06B; [97 F6, 05, 05] -A45D; [93 0F, 05, 05] +A06C; [97 F8, 05, 05] -A45E; [93 11, 05, 05] +A06D; [97 FA, 05, 05] -A45F; [93 13, 05, 05] +A06E; [97 FC, 05, 05] -A460; [93 15, 05, 05] +A06F; [97 FE, 05, 05] -A461; [93 17, 05, 05] +A070; [98 05, 05, 05] -A462; [93 19, 05, 05] +A071; [98 07, 05, 05] -A463; [93 1B, 05, 05] +A072; [98 09, 05, 05] -A464; [93 1D, 05, 05] +A073; [98 0B, 05, 05] -A465; [93 1F, 05, 05] +A074; [98 0D, 05, 05] -A466; [93 21, 05, 05] +A075; [98 0F, 05, 05] -A467; [93 23, 05, 05] +A076; [98 11, 05, 05] -A468; [93 25, 05, 05] +A077; [98 13, 05, 05] -A469; [93 27, 05, 05] +A078; [98 15, 05, 05] -A46A; [93 29, 05, 05] +A079; [98 17, 05, 05] -A46B; [93 2B, 05, 05] +A07A; [98 19, 05, 05] -A46C; [93 2D, 05, 05] +A07B; [98 1B, 05, 05] -A46D; [93 2F, 05, 05] +A07C; [98 1D, 05, 05] -A46E; [93 31, 05, 05] +A07D; [98 1F, 05, 05] -A46F; [93 33, 05, 05] +A07E; [98 21, 05, 05] -A470; [93 35, 05, 05] +A07F; [98 23, 05, 05] -A471; [93 37, 05, 05] +A080; [98 25, 05, 05] -A472; [93 39, 05, 05] +A081; [98 27, 05, 05] -A473; [93 3B, 05, 05] +A082; [98 29, 05, 05] -A474; [93 3D, 05, 05] +A083; [98 2B, 05, 05] -A475; [93 3F, 05, 05] +A084; [98 2D, 05, 05] -A476; [93 41, 05, 05] +A085; [98 2F, 05, 05] -A477; [93 43, 05, 05] +A086; [98 31, 05, 05] -A478; [93 45, 05, 05] +A087; [98 33, 05, 05] -A479; [93 47, 05, 05] +A088; [98 35, 05, 05] -A47A; [93 49, 05, 05] +A089; [98 37, 05, 05] -A47B; [93 4B, 05, 05] +A08A; [98 39, 05, 05] -A47C; [93 4D, 05, 05] +A08B; [98 3B, 05, 05] -A47D; [93 4F, 05, 05] +A08C; [98 3D, 05, 05] -A47E; [93 51, 05, 05] +A08D; [98 3F, 05, 05] -A47F; [93 53, 05, 05] +A08E; [98 41, 05, 05] -A480; [93 55, 05, 05] +A08F; [98 43, 05, 05] -A481; [93 57, 05, 05] +A090; [98 45, 05, 05] -A482; [93 59, 05, 05] +A091; [98 47, 05, 05] -A483; [93 5B, 05, 05] +A092; [98 49, 05, 05] -A484; [93 5D, 05, 05] +A093; [98 4B, 05, 05] -A485; [93 5F, 05, 05] +A094; [98 4D, 05, 05] -A486; [93 61, 05, 05] +A095; [98 4F, 05, 05] -A487; [93 63, 05, 05] +A096; [98 51, 05, 05] -A488; [93 65, 05, 05] +A097; [98 53, 05, 05] -A489; [93 67, 05, 05] +A098; [98 55, 05, 05] -A48A; [93 69, 05, 05] +A099; [98 57, 05, 05] -A48B; [93 6B, 05, 05] +A09A; [98 59, 05, 05] -A48C; [93 6D, 05, 05] +A09B; [98 5B, 05, 05] -D800 DF00; [93 6F, 05, 05] +A09C; [98 5D, 05, 05] -D800 DF01; [93 71, 05, 05] +A09D; [98 5F, 05, 05] -D800 DF02; [93 73, 05, 05] +A09E; [98 61, 05, 05] -D800 DF03; [93 75, 05, 05] +A09F; [98 63, 05, 05] -D800 DF04; [93 77, 05, 05] +A0A0; [98 65, 05, 05] -D800 DF05; [93 79, 05, 05] +A0A1; [98 67, 05, 05] -D800 DF06; [93 7B, 05, 05] +A0A2; [98 69, 05, 05] -D800 DF07; [93 7D, 05, 05] +A0A3; [98 6B, 05, 05] -D800 DF08; [93 7F, 05, 05] +A0A4; [98 6D, 05, 05] -D800 DF09; [93 81, 05, 05] +A0A5; [98 6F, 05, 05] -D800 DF0A; [93 83, 05, 05] +A0A6; [98 71, 05, 05] -D800 DF0B; [93 85, 05, 05] +A0A7; [98 73, 05, 05] -D800 DF0C; [93 87, 05, 05] +A0A8; [98 75, 05, 05] -D800 DF0D; [93 89, 05, 05] +A0A9; [98 77, 05, 05] -D800 DF0E; [93 8B, 05, 05] +A0AA; [98 79, 05, 05] -D800 DF0F; [93 8D, 05, 05] +A0AB; [98 7B, 05, 05] -D800 DF10; [93 8F, 05, 05] +A0AC; [98 7D, 05, 05] -D800 DF11; [93 91, 05, 05] +A0AD; [98 7F, 05, 05] -D800 DF12; [93 93, 05, 05] +A0AE; [98 81, 05, 05] -D800 DF13; [93 95, 05, 05] +A0AF; [98 83, 05, 05] -D800 DF14; [93 97, 05, 05] +A0B0; [98 85, 05, 05] -D800 DF15; [93 99, 05, 05] +A0B1; [98 87, 05, 05] -D800 DF16; [93 9B, 05, 05] +A0B2; [98 89, 05, 05] -D800 DF17; [93 9D, 05, 05] +A0B3; [98 8B, 05, 05] -D800 DF18; [93 9F, 05, 05] +A0B4; [98 8D, 05, 05] -D800 DF19; [93 A1, 05, 05] +A0B5; [98 8F, 05, 05] -D800 DF1A; [93 A3, 05, 05] +A0B6; [98 91, 05, 05] -D800 DF1B; [93 A5, 05, 05] +A0B7; [98 93, 05, 05] -D800 DF1C; [93 A7, 05, 05] +A0B8; [98 95, 05, 05] -D800 DF1D; [93 A9, 05, 05] +A0B9; [98 97, 05, 05] -D800 DF1E; [93 AB, 05, 05] +A0BA; [98 99, 05, 05] -D800 DF30; [93 AD, 05, 05] +A0BB; [98 9B, 05, 05] -D800 DF31; [93 AF, 05, 05] +A0BC; [98 9D, 05, 05] -D800 DF32; [93 B1, 05, 05] +A0BD; [98 9F, 05, 05] -D800 DF33; [93 B3, 05, 05] +A0BE; [98 A1, 05, 05] -D800 DF34; [93 B5, 05, 05] +A0BF; [98 A3, 05, 05] -D800 DF35; [93 B7, 05, 05] +A0C0; [98 A5, 05, 05] -D800 DF36; [93 B9, 05, 05] +A0C1; [98 A7, 05, 05] -D800 DF37; [93 BB, 05, 05] +A0C2; [98 A9, 05, 05] -D800 DF38; [93 BD, 05, 05] +A0C3; [98 AB, 05, 05] -D800 DF39; [93 BF, 05, 05] +A0C4; [98 AD, 05, 05] -D800 DF3A; [93 C1, 05, 05] +A0C5; [98 AF, 05, 05] -D800 DF3B; [93 C3, 05, 05] +A0C6; [98 B1, 05, 05] -D800 DF3C; [93 C5, 05, 05] +A0C7; [98 B3, 05, 05] -D800 DF3D; [93 C7, 05, 05] +A0C8; [98 B5, 05, 05] -D800 DF3E; [93 C9, 05, 05] +A0C9; [98 B7, 05, 05] -D800 DF3F; [93 CB, 05, 05] +A0CA; [98 B9, 05, 05] -D800 DF40; [93 CD, 05, 05] +A0CB; [98 BB, 05, 05] -D800 DF41; [93 CF, 05, 05] +A0CC; [98 BD, 05, 05] -D800 DF42; [93 D1, 05, 05] +A0CD; [98 BF, 05, 05] -D800 DF43; [93 D3, 05, 05] +A0CE; [98 C1, 05, 05] -D800 DF44; [93 D5, 05, 05] +A0CF; [98 C3, 05, 05] -D800 DF45; [93 D7, 05, 05] +A0D0; [98 C5, 05, 05] -D800 DF46; [93 D9, 05, 05] +A0D1; [98 C7, 05, 05] -D800 DF47; [93 DB, 05, 05] +A0D2; [98 C9, 05, 05] -D800 DF48; [93 DD, 05, 05] +A0D3; [98 CB, 05, 05] -D800 DF49; [93 DF, 05, 05] +A0D4; [98 CD, 05, 05] -D800 DF4A; [93 E1, 05, 05] +A0D5; [98 CF, 05, 05] -D801 DC28; [93 E3, 05, 05] -D801 DC00; [93 E3, 05, 8F] +A0D6; [98 D1, 05, 05] -D801 DC29; [93 E5, 05, 05] -D801 DC01; [93 E5, 05, 8F] +A0D7; [98 D3, 05, 05] -D801 DC2A; [93 E7, 05, 05] -D801 DC02; [93 E7, 05, 8F] +A0D8; [98 D5, 05, 05] -D801 DC2B; [93 E9, 05, 05] -D801 DC03; [93 E9, 05, 8F] +A0D9; [98 D7, 05, 05] -D801 DC2C; [93 EB, 05, 05] -D801 DC04; [93 EB, 05, 8F] +A0DA; [98 D9, 05, 05] -D801 DC2D; [93 ED, 05, 05] -D801 DC05; [93 ED, 05, 8F] +A0DB; [98 DB, 05, 05] -D801 DC2E; [93 EF, 05, 05] -D801 DC06; [93 EF, 05, 8F] +A0DC; [98 DD, 05, 05] -D801 DC2F; [93 F1, 05, 05] -D801 DC07; [93 F1, 05, 8F] +A0DD; [98 DF, 05, 05] -D801 DC30; [93 F3, 05, 05] -D801 DC08; [93 F3, 05, 8F] +A0DE; [98 E1, 05, 05] -D801 DC31; [93 F5, 05, 05] -D801 DC09; [93 F5, 05, 8F] +A0DF; [98 E3, 05, 05] -D801 DC32; [93 F7, 05, 05] -D801 DC0A; [93 F7, 05, 8F] +A0E0; [98 E5, 05, 05] -D801 DC33; [93 F9, 05, 05] -D801 DC0B; [93 F9, 05, 8F] +A0E1; [98 E7, 05, 05] -D801 DC34; [93 FB, 05, 05] -D801 DC0C; [93 FB, 05, 8F] +A0E2; [98 E9, 05, 05] -D801 DC35; [93 FD, 05, 05] -D801 DC0D; [93 FD, 05, 8F] +A0E3; [98 EB, 05, 05] -D801 DC36; [94 05, 05, 05] -D801 DC0E; [94 05, 05, 8F] +A0E4; [98 ED, 05, 05] -D801 DC37; [94 07, 05, 05] -D801 DC0F; [94 07, 05, 8F] +A0E5; [98 EF, 05, 05] -D801 DC38; [94 09, 05, 05] -D801 DC10; [94 09, 05, 8F] +A0E6; [98 F1, 05, 05] -D801 DC39; [94 0B, 05, 05] -D801 DC11; [94 0B, 05, 8F] +A0E7; [98 F3, 05, 05] -D801 DC3A; [94 0D, 05, 05] -D801 DC12; [94 0D, 05, 8F] +A0E8; [98 F5, 05, 05] -D801 DC3B; [94 0F, 05, 05] -D801 DC13; [94 0F, 05, 8F] +A0E9; [98 F7, 05, 05] -D801 DC3C; [94 11, 05, 05] -D801 DC14; [94 11, 05, 8F] +A0EA; [98 F9, 05, 05] -D801 DC3D; [94 13, 05, 05] -D801 DC15; [94 13, 05, 8F] +A0EB; [98 FB, 05, 05] -D801 DC3E; [94 15, 05, 05] -D801 DC16; [94 15, 05, 8F] +A0EC; [98 FD, 05, 05] -D801 DC3F; [94 17, 05, 05] -D801 DC17; [94 17, 05, 8F] +A0ED; [99 05, 05, 05] -D801 DC40; [94 19, 05, 05] -D801 DC18; [94 19, 05, 8F] +A0EE; [99 07, 05, 05] -D801 DC41; [94 1B, 05, 05] -D801 DC19; [94 1B, 05, 8F] +A0EF; [99 09, 05, 05] -D801 DC42; [94 1D, 05, 05] -D801 DC1A; [94 1D, 05, 8F] +A0F0; [99 0B, 05, 05] -D801 DC43; [94 1F, 05, 05] -D801 DC1B; [94 1F, 05, 8F] +A0F1; [99 0D, 05, 05] -D801 DC44; [94 21, 05, 05] -D801 DC1C; [94 21, 05, 8F] +A0F2; [99 0F, 05, 05] -D801 DC45; [94 23, 05, 05] -D801 DC1D; [94 23, 05, 8F] +A0F3; [99 11, 05, 05] -D801 DC46; [94 25, 05, 05] -D801 DC1E; [94 25, 05, 8F] +A0F4; [99 13, 05, 05] -D801 DC47; [94 27, 05, 05] -D801 DC1F; [94 27, 05, 8F] +A0F5; [99 15, 05, 05] -D801 DC48; [94 29, 05, 05] -D801 DC20; [94 29, 05, 8F] +A0F6; [99 17, 05, 05] -D801 DC49; [94 2B, 05, 05] -D801 DC21; [94 2B, 05, 8F] +A0F7; [99 19, 05, 05] -D801 DC4A; [94 2D, 05, 05] -D801 DC22; [94 2D, 05, 8F] +A0F8; [99 1B, 05, 05] -D801 DC4B; [94 2F, 05, 05] -D801 DC23; [94 2F, 05, 8F] +A0F9; [99 1D, 05, 05] -D801 DC4C; [94 31, 05, 05] -D801 DC24; [94 31, 05, 8F] +A0FA; [99 1F, 05, 05] -D801 DC4D; [94 33, 05, 05] -D801 DC25; [94 33, 05, 8F] +A0FB; [99 21, 05, 05] -D801 DC4E; [94 35, 05, 05] -D801 DC26; [94 35, 05, 8F] +A0FC; [99 23, 05, 05] -D801 DC4F; [94 37, 05, 05] -D801 DC27; [94 37, 05, 8F] +A0FD; [99 25, 05, 05] -D801 DC50; [94 39, 05, 05] +A0FE; [99 27, 05, 05] -D801 DC51; [94 3B, 05, 05] +A0FF; [99 29, 05, 05] -D801 DC52; [94 3D, 05, 05] +A100; [99 2B, 05, 05] -D801 DC53; [94 3F, 05, 05] +A101; [99 2D, 05, 05] -D801 DC54; [94 41, 05, 05] +A102; [99 2F, 05, 05] -D801 DC55; [94 43, 05, 05] +A103; [99 31, 05, 05] -D801 DC56; [94 45, 05, 05] +A104; [99 33, 05, 05] -D801 DC57; [94 47, 05, 05] +A105; [99 35, 05, 05] -D801 DC58; [94 49, 05, 05] +A106; [99 37, 05, 05] -D801 DC59; [94 4B, 05, 05] +A107; [99 39, 05, 05] -D801 DC5A; [94 4D, 05, 05] +A108; [99 3B, 05, 05] -D801 DC5B; [94 4F, 05, 05] +A109; [99 3D, 05, 05] -D801 DC5C; [94 51, 05, 05] +A10A; [99 3F, 05, 05] -D801 DC5D; [94 53, 05, 05] +A10B; [99 41, 05, 05] -D801 DC5E; [94 55, 05, 05] +A10C; [99 43, 05, 05] -D801 DC5F; [94 57, 05, 05] +A10D; [99 45, 05, 05] -D801 DC60; [94 59, 05, 05] +A10E; [99 47, 05, 05] -D801 DC61; [94 5B, 05, 05] +A10F; [99 49, 05, 05] -D801 DC62; [94 5D, 05, 05] +A110; [99 4B, 05, 05] -D801 DC63; [94 5F, 05, 05] +A111; [99 4D, 05, 05] -D801 DC64; [94 61, 05, 05] +A112; [99 4F, 05, 05] -D801 DC65; [94 63, 05, 05] +A113; [99 51, 05, 05] -D801 DC66; [94 65, 05, 05] +A114; [99 53, 05, 05] -D801 DC67; [94 67, 05, 05] +A115; [99 55, 05, 05] -D801 DC68; [94 69, 05, 05] +A116; [99 57, 05, 05] -D801 DC69; [94 6B, 05, 05] +A117; [99 59, 05, 05] -D801 DC6A; [94 6D, 05, 05] +A118; [99 5B, 05, 05] -D801 DC6B; [94 6F, 05, 05] +A119; [99 5D, 05, 05] -D801 DC6C; [94 71, 05, 05] +A11A; [99 5F, 05, 05] -D801 DC6D; [94 73, 05, 05] +A11B; [99 61, 05, 05] -D801 DC6E; [94 75, 05, 05] +A11C; [99 63, 05, 05] -D801 DC6F; [94 77, 05, 05] +A11D; [99 65, 05, 05] -D801 DC70; [94 79, 05, 05] +A11E; [99 67, 05, 05] -D801 DC71; [94 7B, 05, 05] +A11F; [99 69, 05, 05] -D801 DC72; [94 7D, 05, 05] +A120; [99 6B, 05, 05] -D801 DC73; [94 7F, 05, 05] +A121; [99 6D, 05, 05] -D801 DC74; [94 81, 05, 05] +A122; [99 6F, 05, 05] -D801 DC75; [94 83, 05, 05] +A123; [99 71, 05, 05] -D801 DC76; [94 85, 05, 05] +A124; [99 73, 05, 05] -D801 DC77; [94 87, 05, 05] +A125; [99 75, 05, 05] -D801 DC78; [94 89, 05, 05] +A126; [99 77, 05, 05] -D801 DC79; [94 8B, 05, 05] +A127; [99 79, 05, 05] -D801 DC7A; [94 8D, 05, 05] +A128; [99 7B, 05, 05] -D801 DC7B; [94 8F, 05, 05] +A129; [99 7D, 05, 05] -D801 DC7C; [94 91, 05, 05] +A12A; [99 7F, 05, 05] -D801 DC7D; [94 93, 05, 05] +A12B; [99 81, 05, 05] -D801 DC7E; [94 95, 05, 05] +A12C; [99 83, 05, 05] -D801 DC7F; [94 97, 05, 05] +A12D; [99 85, 05, 05] -D801 DC80; [94 99, 05, 05] +A12E; [99 87, 05, 05] -D801 DC81; [94 9B, 05, 05] +A12F; [99 89, 05, 05] -D801 DC82; [94 9D, 05, 05] +A130; [99 8B, 05, 05] -D801 DC83; [94 9F, 05, 05] +A131; [99 8D, 05, 05] -D801 DC84; [94 A1, 05, 05] +A132; [99 8F, 05, 05] -D801 DC85; [94 A3, 05, 05] +A133; [99 91, 05, 05] -D801 DC86; [94 A5, 05, 05] +A134; [99 93, 05, 05] -D801 DC87; [94 A7, 05, 05] +A135; [99 95, 05, 05] -D801 DC88; [94 A9, 05, 05] +A136; [99 97, 05, 05] -D801 DC89; [94 AB, 05, 05] +A137; [99 99, 05, 05] -D801 DC8A; [94 AD, 05, 05] +A138; [99 9B, 05, 05] -D801 DC8B; [94 AF, 05, 05] +A139; [99 9D, 05, 05] -D801 DC8C; [94 B1, 05, 05] +A13A; [99 9F, 05, 05] -D801 DC8D; [94 B3, 05, 05] +A13B; [99 A1, 05, 05] -D801 DC8E; [94 B5, 05, 05] +A13C; [99 A3, 05, 05] -D801 DC8F; [94 B7, 05, 05] +A13D; [99 A5, 05, 05] -D801 DC90; [94 B9, 05, 05] +A13E; [99 A7, 05, 05] -D801 DC91; [94 BB, 05, 05] +A13F; [99 A9, 05, 05] -D801 DC92; [94 BD, 05, 05] +A140; [99 AB, 05, 05] -D801 DC93; [94 BF, 05, 05] +A141; [99 AD, 05, 05] -D801 DC94; [94 C1, 05, 05] +A142; [99 AF, 05, 05] -D801 DC95; [94 C3, 05, 05] +A143; [99 B1, 05, 05] -D801 DC96; [94 C5, 05, 05] +A144; [99 B3, 05, 05] -D801 DC97; [94 C7, 05, 05] +A145; [99 B5, 05, 05] -D801 DC98; [94 C9, 05, 05] +A146; [99 B7, 05, 05] -D801 DC99; [94 CB, 05, 05] +A147; [99 B9, 05, 05] -D801 DC9A; [94 CD, 05, 05] +A148; [99 BB, 05, 05] -D801 DC9B; [94 CF, 05, 05] +A149; [99 BD, 05, 05] -D801 DC9C; [94 D1, 05, 05] +A14A; [99 BF, 05, 05] -D801 DC9D; [94 D3, 05, 05] +A14B; [99 C1, 05, 05] -D800 DC00; [94 D5, 05, 05] +A14C; [99 C3, 05, 05] -D800 DC01; [94 D7, 05, 05] +A14D; [99 C5, 05, 05] -D800 DC02; [94 D9, 05, 05] +A14E; [99 C7, 05, 05] -D800 DC03; [94 DB, 05, 05] +A14F; [99 C9, 05, 05] -D800 DC04; [94 DD, 05, 05] +A150; [99 CB, 05, 05] -D800 DC05; [94 DF, 05, 05] +A151; [99 CD, 05, 05] -D800 DC06; [94 E1, 05, 05] +A152; [99 CF, 05, 05] -D800 DC07; [94 E3, 05, 05] +A153; [99 D1, 05, 05] -D800 DC08; [94 E5, 05, 05] +A154; [99 D3, 05, 05] -D800 DC09; [94 E7, 05, 05] +A155; [99 D5, 05, 05] -D800 DC0A; [94 E9, 05, 05] +A156; [99 D7, 05, 05] -D800 DC0B; [94 EB, 05, 05] +A157; [99 D9, 05, 05] -D800 DC0D; [94 ED, 05, 05] +A158; [99 DB, 05, 05] -D800 DC0E; [94 EF, 05, 05] +A159; [99 DD, 05, 05] -D800 DC0F; [94 F1, 05, 05] +A15A; [99 DF, 05, 05] -D800 DC10; [94 F3, 05, 05] +A15B; [99 E1, 05, 05] -D800 DC11; [94 F5, 05, 05] +A15C; [99 E3, 05, 05] -D800 DC12; [94 F7, 05, 05] +A15D; [99 E5, 05, 05] -D800 DC13; [94 F9, 05, 05] +A15E; [99 E7, 05, 05] -D800 DC14; [94 FB, 05, 05] +A15F; [99 E9, 05, 05] -D800 DC15; [94 FD, 05, 05] +A160; [99 EB, 05, 05] -D800 DC16; [95 05, 05, 05] +A161; [99 ED, 05, 05] -D800 DC17; [95 07, 05, 05] +A162; [99 EF, 05, 05] -D800 DC18; [95 09, 05, 05] +A163; [99 F1, 05, 05] -D800 DC19; [95 0B, 05, 05] +A164; [99 F3, 05, 05] -D800 DC1A; [95 0D, 05, 05] +A165; [99 F5, 05, 05] -D800 DC1B; [95 0F, 05, 05] +A166; [99 F7, 05, 05] -D800 DC1C; [95 11, 05, 05] +A167; [99 F9, 05, 05] -D800 DC1D; [95 13, 05, 05] +A168; [99 FB, 05, 05] -D800 DC1E; [95 15, 05, 05] +A169; [99 FD, 05, 05] -D800 DC1F; [95 17, 05, 05] +A16A; [9A 05, 05, 05] -D800 DC20; [95 19, 05, 05] +A16B; [9A 07, 05, 05] -D800 DC21; [95 1B, 05, 05] +A16C; [9A 09, 05, 05] -D800 DC22; [95 1D, 05, 05] +A16D; [9A 0B, 05, 05] -D800 DC23; [95 1F, 05, 05] +A16E; [9A 0D, 05, 05] -D800 DC24; [95 21, 05, 05] +A16F; [9A 0F, 05, 05] -D800 DC25; [95 23, 05, 05] +A170; [9A 11, 05, 05] -D800 DC26; [95 25, 05, 05] +A171; [9A 13, 05, 05] -D800 DC28; [95 27, 05, 05] +A172; [9A 15, 05, 05] -D800 DC29; [95 29, 05, 05] +A173; [9A 17, 05, 05] -D800 DC2A; [95 2B, 05, 05] +A174; [9A 19, 05, 05] -D800 DC2B; [95 2D, 05, 05] +A175; [9A 1B, 05, 05] -D800 DC2C; [95 2F, 05, 05] +A176; [9A 1D, 05, 05] -D800 DC2D; [95 31, 05, 05] +A177; [9A 1F, 05, 05] -D800 DC2E; [95 33, 05, 05] +A178; [9A 21, 05, 05] -D800 DC2F; [95 35, 05, 05] +A179; [9A 23, 05, 05] -D800 DC30; [95 37, 05, 05] +A17A; [9A 25, 05, 05] -D800 DC31; [95 39, 05, 05] +A17B; [9A 27, 05, 05] -D800 DC32; [95 3B, 05, 05] +A17C; [9A 29, 05, 05] -D800 DC33; [95 3D, 05, 05] +A17D; [9A 2B, 05, 05] -D800 DC34; [95 3F, 05, 05] +A17E; [9A 2D, 05, 05] -D800 DC35; [95 41, 05, 05] +A17F; [9A 2F, 05, 05] -D800 DC36; [95 43, 05, 05] +A180; [9A 31, 05, 05] -D800 DC37; [95 45, 05, 05] +A181; [9A 33, 05, 05] -D800 DC38; [95 47, 05, 05] +A182; [9A 35, 05, 05] -D800 DC39; [95 49, 05, 05] +A183; [9A 37, 05, 05] -D800 DC3A; [95 4B, 05, 05] +A184; [9A 39, 05, 05] -D800 DC3C; [95 4D, 05, 05] +A185; [9A 3B, 05, 05] -D800 DC3D; [95 4F, 05, 05] +A186; [9A 3D, 05, 05] -D800 DC3F; [95 51, 05, 05] +A187; [9A 3F, 05, 05] -D800 DC40; [95 53, 05, 05] +A188; [9A 41, 05, 05] -D800 DC41; [95 55, 05, 05] +A189; [9A 43, 05, 05] -D800 DC42; [95 57, 05, 05] +A18A; [9A 45, 05, 05] -D800 DC43; [95 59, 05, 05] +A18B; [9A 47, 05, 05] -D800 DC44; [95 5B, 05, 05] +A18C; [9A 49, 05, 05] -D800 DC45; [95 5D, 05, 05] +A18D; [9A 4B, 05, 05] -D800 DC46; [95 5F, 05, 05] +A18E; [9A 4D, 05, 05] -D800 DC47; [95 61, 05, 05] +A18F; [9A 4F, 05, 05] -D800 DC48; [95 63, 05, 05] +A190; [9A 51, 05, 05] -D800 DC49; [95 65, 05, 05] +A191; [9A 53, 05, 05] -D800 DC4A; [95 67, 05, 05] +A192; [9A 55, 05, 05] -D800 DC4B; [95 69, 05, 05] +A193; [9A 57, 05, 05] -D800 DC4C; [95 6B, 05, 05] +A194; [9A 59, 05, 05] -D800 DC4D; [95 6D, 05, 05] +A195; [9A 5B, 05, 05] -D800 DC50; [95 6F, 05, 05] +A196; [9A 5D, 05, 05] -D800 DC51; [95 71, 05, 05] +A197; [9A 5F, 05, 05] -D800 DC52; [95 73, 05, 05] +A198; [9A 61, 05, 05] -D800 DC53; [95 75, 05, 05] +A199; [9A 63, 05, 05] -D800 DC54; [95 77, 05, 05] +A19A; [9A 65, 05, 05] -D800 DC55; [95 79, 05, 05] +A19B; [9A 67, 05, 05] -D800 DC56; [95 7B, 05, 05] +A19C; [9A 69, 05, 05] -D800 DC57; [95 7D, 05, 05] +A19D; [9A 6B, 05, 05] -D800 DC58; [95 7F, 05, 05] +A19E; [9A 6D, 05, 05] -D800 DC59; [95 81, 05, 05] +A19F; [9A 6F, 05, 05] -D800 DC5A; [95 83, 05, 05] +A1A0; [9A 71, 05, 05] -D800 DC5B; [95 85, 05, 05] +A1A1; [9A 73, 05, 05] -D800 DC5C; [95 87, 05, 05] +A1A2; [9A 75, 05, 05] -D800 DC5D; [95 89, 05, 05] +A1A3; [9A 77, 05, 05] -D800 DC80; [95 8B, 05, 05] +A1A4; [9A 79, 05, 05] -D800 DC81; [95 8D, 05, 05] +A1A5; [9A 7B, 05, 05] -D800 DC82; [95 8F, 05, 05] +A1A6; [9A 7D, 05, 05] -D800 DC83; [95 91, 05, 05] +A1A7; [9A 7F, 05, 05] -D800 DC84; [95 93, 05, 05] +A1A8; [9A 81, 05, 05] -D800 DC85; [95 95, 05, 05] +A1A9; [9A 83, 05, 05] -D800 DC86; [95 97, 05, 05] +A1AA; [9A 85, 05, 05] -D800 DC87; [95 99, 05, 05] +A1AB; [9A 87, 05, 05] -D800 DC88; [95 9B, 05, 05] +A1AC; [9A 89, 05, 05] -D800 DC89; [95 9D, 05, 05] +A1AD; [9A 8B, 05, 05] -D800 DC8A; [95 9F, 05, 05] +A1AE; [9A 8D, 05, 05] -D800 DC8B; [95 A1, 05, 05] +A1AF; [9A 8F, 05, 05] -D800 DC8C; [95 A3, 05, 05] +A1B0; [9A 91, 05, 05] -D800 DC8D; [95 A5, 05, 05] +A1B1; [9A 93, 05, 05] -D800 DC8E; [95 A7, 05, 05] +A1B2; [9A 95, 05, 05] -D800 DC8F; [95 A9, 05, 05] +A1B3; [9A 97, 05, 05] -D800 DC90; [95 AB, 05, 05] +A1B4; [9A 99, 05, 05] -D800 DC91; [95 AD, 05, 05] +A1B5; [9A 9B, 05, 05] -D800 DC92; [95 AF, 05, 05] +A1B6; [9A 9D, 05, 05] -D800 DC93; [95 B1, 05, 05] +A1B7; [9A 9F, 05, 05] -D800 DC94; [95 B3, 05, 05] +A1B8; [9A A1, 05, 05] -D800 DC95; [95 B5, 05, 05] +A1B9; [9A A3, 05, 05] -D800 DC96; [95 B7, 05, 05] +A1BA; [9A A5, 05, 05] -D800 DC97; [95 B9, 05, 05] +A1BB; [9A A7, 05, 05] -D800 DC98; [95 BB, 05, 05] +A1BC; [9A A9, 05, 05] -D800 DC99; [95 BD, 05, 05] +A1BD; [9A AB, 05, 05] -D800 DC9A; [95 BF, 05, 05] +A1BE; [9A AD, 05, 05] -D800 DC9B; [95 C1, 05, 05] +A1BF; [9A AF, 05, 05] -D800 DC9C; [95 C3, 05, 05] +A1C0; [9A B1, 05, 05] -D800 DC9D; [95 C5, 05, 05] +A1C1; [9A B3, 05, 05] -D800 DC9E; [95 C7, 05, 05] +A1C2; [9A B5, 05, 05] -D800 DC9F; [95 C9, 05, 05] +A1C3; [9A B7, 05, 05] -D800 DCA0; [95 CB, 05, 05] +A1C4; [9A B9, 05, 05] -D800 DCA1; [95 CD, 05, 05] +A1C5; [9A BB, 05, 05] -D800 DCA2; [95 CF, 05, 05] +A1C6; [9A BD, 05, 05] -D800 DCA3; [95 D1, 05, 05] +A1C7; [9A BF, 05, 05] -D800 DCA4; [95 D3, 05, 05] +A1C8; [9A C1, 05, 05] -D800 DCA5; [95 D5, 05, 05] +A1C9; [9A C3, 05, 05] -D800 DCA6; [95 D7, 05, 05] +A1CA; [9A C5, 05, 05] -D800 DCA7; [95 D9, 05, 05] +A1CB; [9A C7, 05, 05] -D800 DCA8; [95 DB, 05, 05] +A1CC; [9A C9, 05, 05] -D800 DCA9; [95 DD, 05, 05] +A1CD; [9A CB, 05, 05] -D800 DCAA; [95 DF, 05, 05] +A1CE; [9A CD, 05, 05] -D800 DCAB; [95 E1, 05, 05] +A1CF; [9A CF, 05, 05] -D800 DCAC; [95 E3, 05, 05] +A1D0; [9A D1, 05, 05] -D800 DCAD; [95 E5, 05, 05] +A1D1; [9A D3, 05, 05] -D800 DCAE; [95 E7, 05, 05] +A1D2; [9A D5, 05, 05] -D800 DCAF; [95 E9, 05, 05] +A1D3; [9A D7, 05, 05] -D800 DCB0; [95 EB, 05, 05] +A1D4; [9A D9, 05, 05] -D800 DCB1; [95 ED, 05, 05] +A1D5; [9A DB, 05, 05] -D800 DCB2; [95 EF, 05, 05] +A1D6; [9A DD, 05, 05] -D800 DCB3; [95 F1, 05, 05] +A1D7; [9A DF, 05, 05] -D800 DCB4; [95 F3, 05, 05] +A1D8; [9A E1, 05, 05] -D800 DCB5; [95 F5, 05, 05] +A1D9; [9A E3, 05, 05] -D800 DCB6; [95 F7, 05, 05] +A1DA; [9A E5, 05, 05] -D800 DCB7; [95 F9, 05, 05] +A1DB; [9A E7, 05, 05] -D800 DCB8; [95 FB, 05, 05] +A1DC; [9A E9, 05, 05] -D800 DCB9; [95 FD, 05, 05] +A1DD; [9A EB, 05, 05] -D800 DCBA; [96 05, 05, 05] +A1DE; [9A ED, 05, 05] -D800 DCBB; [96 07, 05, 05] +A1DF; [9A EF, 05, 05] -D800 DCBC; [96 09, 05, 05] +A1E0; [9A F1, 05, 05] -D800 DCBD; [96 0B, 05, 05] +A1E1; [9A F3, 05, 05] -D800 DCBE; [96 0D, 05, 05] +A1E2; [9A F5, 05, 05] -D800 DCBF; [96 0F, 05, 05] +A1E3; [9A F7, 05, 05] -D800 DCC0; [96 11, 05, 05] +A1E4; [9A F9, 05, 05] -D800 DCC1; [96 13, 05, 05] +A1E5; [9A FB, 05, 05] -D800 DCC2; [96 15, 05, 05] +A1E6; [9A FD, 05, 05] -D800 DCC3; [96 17, 05, 05] +A1E7; [9B 05, 05, 05] -D800 DCC4; [96 19, 05, 05] +A1E8; [9B 07, 05, 05] -D800 DCC5; [96 1B, 05, 05] +A1E9; [9B 09, 05, 05] -D800 DCC6; [96 1D, 05, 05] +A1EA; [9B 0B, 05, 05] -D800 DCC7; [96 1F, 05, 05] +A1EB; [9B 0D, 05, 05] -D800 DCC8; [96 21, 05, 05] +A1EC; [9B 0F, 05, 05] -D800 DCC9; [96 23, 05, 05] +A1ED; [9B 11, 05, 05] -D800 DCCA; [96 25, 05, 05] +A1EE; [9B 13, 05, 05] -D800 DCCB; [96 27, 05, 05] +A1EF; [9B 15, 05, 05] -D800 DCCC; [96 29, 05, 05] +A1F0; [9B 17, 05, 05] -D800 DCCD; [96 2B, 05, 05] +A1F1; [9B 19, 05, 05] -D800 DCCE; [96 2D, 05, 05] +A1F2; [9B 1B, 05, 05] -D800 DCCF; [96 2F, 05, 05] +A1F3; [9B 1D, 05, 05] -D800 DCD0; [96 31, 05, 05] +A1F4; [9B 1F, 05, 05] -D800 DCD1; [96 33, 05, 05] +A1F5; [9B 21, 05, 05] -D800 DCD2; [96 35, 05, 05] +A1F6; [9B 23, 05, 05] -D800 DCD3; [96 37, 05, 05] +A1F7; [9B 25, 05, 05] -D800 DCD4; [96 39, 05, 05] +A1F8; [9B 27, 05, 05] -D800 DCD5; [96 3B, 05, 05] +A1F9; [9B 29, 05, 05] -D800 DCD6; [96 3D, 05, 05] +A1FA; [9B 2B, 05, 05] -D800 DCD7; [96 3F, 05, 05] +A1FB; [9B 2D, 05, 05] -D800 DCD8; [96 41, 05, 05] +A1FC; [9B 2F, 05, 05] -D800 DCD9; [96 43, 05, 05] +A1FD; [9B 31, 05, 05] -D800 DCDA; [96 45, 05, 05] +A1FE; [9B 33, 05, 05] -D800 DCDB; [96 47, 05, 05] +A1FF; [9B 35, 05, 05] -D800 DCDC; [96 49, 05, 05] +A200; [9B 37, 05, 05] -D800 DCDD; [96 4B, 05, 05] +A201; [9B 39, 05, 05] -D800 DCDE; [96 4D, 05, 05] +A202; [9B 3B, 05, 05] -D800 DCDF; [96 4F, 05, 05] +A203; [9B 3D, 05, 05] -D800 DCE0; [96 51, 05, 05] +A204; [9B 3F, 05, 05] -D800 DCE1; [96 53, 05, 05] +A205; [9B 41, 05, 05] -D800 DCE2; [96 55, 05, 05] +A206; [9B 43, 05, 05] -D800 DCE3; [96 57, 05, 05] +A207; [9B 45, 05, 05] -D800 DCE4; [96 59, 05, 05] +A208; [9B 47, 05, 05] -D800 DCE5; [96 5B, 05, 05] +A209; [9B 49, 05, 05] -D800 DCE6; [96 5D, 05, 05] +A20A; [9B 4B, 05, 05] -D800 DCE7; [96 5F, 05, 05] +A20B; [9B 4D, 05, 05] -D800 DCE8; [96 61, 05, 05] +A20C; [9B 4F, 05, 05] -D800 DCE9; [96 63, 05, 05] +A20D; [9B 51, 05, 05] -D800 DCEA; [96 65, 05, 05] +A20E; [9B 53, 05, 05] -D800 DCEB; [96 67, 05, 05] +A20F; [9B 55, 05, 05] -D800 DCEC; [96 69, 05, 05] +A210; [9B 57, 05, 05] -D800 DCED; [96 6B, 05, 05] +A211; [9B 59, 05, 05] -D800 DCEE; [96 6D, 05, 05] +A212; [9B 5B, 05, 05] -D800 DCEF; [96 6F, 05, 05] +A213; [9B 5D, 05, 05] -D800 DCF0; [96 71, 05, 05] +A214; [9B 5F, 05, 05] -D800 DCF1; [96 73, 05, 05] +A215; [9B 61, 05, 05] -D800 DCF2; [96 75, 05, 05] +A216; [9B 63, 05, 05] -D800 DCF3; [96 77, 05, 05] +A217; [9B 65, 05, 05] -D800 DCF4; [96 79, 05, 05] +A218; [9B 67, 05, 05] -D800 DCF5; [96 7B, 05, 05] +A219; [9B 69, 05, 05] -D800 DCF6; [96 7D, 05, 05] +A21A; [9B 6B, 05, 05] -D800 DCF7; [96 7F, 05, 05] +A21B; [9B 6D, 05, 05] -D800 DCF8; [96 81, 05, 05] +A21C; [9B 6F, 05, 05] -D800 DCF9; [96 83, 05, 05] +A21D; [9B 71, 05, 05] -D800 DCFA; [96 85, 05, 05] +A21E; [9B 73, 05, 05] -D802 DC00; [96 87, 05, 05] +A21F; [9B 75, 05, 05] -D802 DC01; [96 89, 05, 05] +A220; [9B 77, 05, 05] -D802 DC02; [96 8B, 05, 05] +A221; [9B 79, 05, 05] -D802 DC03; [96 8D, 05, 05] +A222; [9B 7B, 05, 05] -D802 DC04; [96 8F, 05, 05] +A223; [9B 7D, 05, 05] -D802 DC05; [96 91, 05, 05] +A224; [9B 7F, 05, 05] -D802 DC08; [96 93, 05, 05] +A225; [9B 81, 05, 05] -D802 DC0A; [96 95, 05, 05] +A226; [9B 83, 05, 05] -D802 DC0B; [96 97, 05, 05] +A227; [9B 85, 05, 05] -D802 DC0C; [96 99, 05, 05] +A228; [9B 87, 05, 05] -D802 DC0D; [96 9B, 05, 05] +A229; [9B 89, 05, 05] -D802 DC0E; [96 9D, 05, 05] +A22A; [9B 8B, 05, 05] -D802 DC0F; [96 9F, 05, 05] +A22B; [9B 8D, 05, 05] -D802 DC10; [96 A1, 05, 05] +A22C; [9B 8F, 05, 05] -D802 DC11; [96 A3, 05, 05] +A22D; [9B 91, 05, 05] -D802 DC12; [96 A5, 05, 05] +A22E; [9B 93, 05, 05] -D802 DC13; [96 A7, 05, 05] +A22F; [9B 95, 05, 05] -D802 DC14; [96 A9, 05, 05] +A230; [9B 97, 05, 05] -D802 DC15; [96 AB, 05, 05] +A231; [9B 99, 05, 05] -D802 DC16; [96 AD, 05, 05] +A232; [9B 9B, 05, 05] -D802 DC17; [96 AF, 05, 05] +A233; [9B 9D, 05, 05] -D802 DC18; [96 B1, 05, 05] +A234; [9B 9F, 05, 05] -D802 DC19; [96 B3, 05, 05] +A235; [9B A1, 05, 05] -D802 DC1A; [96 B5, 05, 05] +A236; [9B A3, 05, 05] -D802 DC1B; [96 B7, 05, 05] +A237; [9B A5, 05, 05] -D802 DC1C; [96 B9, 05, 05] +A238; [9B A7, 05, 05] -D802 DC1D; [96 BB, 05, 05] +A239; [9B A9, 05, 05] -D802 DC1E; [96 BD, 05, 05] +A23A; [9B AB, 05, 05] -D802 DC1F; [96 BF, 05, 05] +A23B; [9B AD, 05, 05] -D802 DC20; [96 C1, 05, 05] +A23C; [9B AF, 05, 05] -D802 DC21; [96 C3, 05, 05] +A23D; [9B B1, 05, 05] -D802 DC22; [96 C5, 05, 05] +A23E; [9B B3, 05, 05] -D802 DC23; [96 C7, 05, 05] +A23F; [9B B5, 05, 05] -D802 DC24; [96 C9, 05, 05] +A240; [9B B7, 05, 05] -D802 DC25; [96 CB, 05, 05] +A241; [9B B9, 05, 05] -D802 DC26; [96 CD, 05, 05] +A242; [9B BB, 05, 05] -D802 DC27; [96 CF, 05, 05] +A243; [9B BD, 05, 05] -D802 DC28; [96 D1, 05, 05] +A244; [9B BF, 05, 05] -D802 DC29; [96 D3, 05, 05] +A245; [9B C1, 05, 05] -D802 DC2A; [96 D5, 05, 05] +A246; [9B C3, 05, 05] -D802 DC2B; [96 D7, 05, 05] +A247; [9B C5, 05, 05] -D802 DC2C; [96 D9, 05, 05] +A248; [9B C7, 05, 05] -D802 DC2D; [96 DB, 05, 05] +A249; [9B C9, 05, 05] -D802 DC2E; [96 DD, 05, 05] +A24A; [9B CB, 05, 05] -D802 DC2F; [96 DF, 05, 05] +A24B; [9B CD, 05, 05] -D802 DC30; [96 E1, 05, 05] +A24C; [9B CF, 05, 05] -D802 DC31; [96 E3, 05, 05] +A24D; [9B D1, 05, 05] -D802 DC32; [96 E5, 05, 05] +A24E; [9B D3, 05, 05] -D802 DC33; [96 E7, 05, 05] +A24F; [9B D5, 05, 05] -D802 DC34; [96 E9, 05, 05] +A250; [9B D7, 05, 05] -D802 DC35; [96 EB, 05, 05] +A251; [9B D9, 05, 05] -D802 DC37; [96 ED, 05, 05] +A252; [9B DB, 05, 05] -D802 DC38; [96 EF, 05, 05] +A253; [9B DD, 05, 05] -D802 DC3C; [96 F1, 05, 05] +A254; [9B DF, 05, 05] -D802 DC3F; [96 F3, 05, 05] +A255; [9B E1, 05, 05] -D800 DF80; [96 F5, 05, 05] +A256; [9B E3, 05, 05] -D800 DF81; [96 F7, 05, 05] +A257; [9B E5, 05, 05] -D800 DF82; [96 F9, 05, 05] +A258; [9B E7, 05, 05] -D800 DF83; [96 FB, 05, 05] +A259; [9B E9, 05, 05] -D800 DF84; [96 FD, 05, 05] +A25A; [9B EB, 05, 05] -D800 DF85; [97 05, 05, 05] +A25B; [9B ED, 05, 05] -D800 DF86; [97 07, 05, 05] +A25C; [9B EF, 05, 05] -D800 DF87; [97 09, 05, 05] +A25D; [9B F1, 05, 05] -D800 DF88; [97 0B, 05, 05] +A25E; [9B F3, 05, 05] -D800 DF89; [97 0D, 05, 05] +A25F; [9B F5, 05, 05] -D800 DF8A; [97 0F, 05, 05] +A260; [9B F7, 05, 05] -D800 DF8B; [97 11, 05, 05] +A261; [9B F9, 05, 05] -D800 DF8C; [97 13, 05, 05] +A262; [9B FB, 05, 05] -D800 DF8D; [97 15, 05, 05] +A263; [9B FD, 05, 05] -D800 DF8E; [97 17, 05, 05] +A264; [9C 05, 05, 05] -D800 DF8F; [97 19, 05, 05] +A265; [9C 07, 05, 05] -D800 DF90; [97 1B, 05, 05] +A266; [9C 09, 05, 05] -D800 DF91; [97 1D, 05, 05] +A267; [9C 0B, 05, 05] -D800 DF92; [97 1F, 05, 05] +A268; [9C 0D, 05, 05] -D800 DF93; [97 21, 05, 05] +A269; [9C 0F, 05, 05] -D800 DF94; [97 23, 05, 05] +A26A; [9C 11, 05, 05] -D800 DF95; [97 25, 05, 05] +A26B; [9C 13, 05, 05] -D800 DF96; [97 27, 05, 05] +A26C; [9C 15, 05, 05] -D800 DF97; [97 29, 05, 05] +A26D; [9C 17, 05, 05] -D800 DF98; [97 2B, 05, 05] +A26E; [9C 19, 05, 05] -D800 DF99; [97 2D, 05, 05] +A26F; [9C 1B, 05, 05] -D800 DF9A; [97 2F, 05, 05] +A270; [9C 1D, 05, 05] -D800 DF9B; [97 31, 05, 05] +A271; [9C 1F, 05, 05] -D800 DF9C; [97 33, 05, 05] +A272; [9C 21, 05, 05] -D800 DF9D; [97 35, 05, 05] +A273; [9C 23, 05, 05] + +A274; [9C 25, 05, 05] + +A275; [9C 27, 05, 05] + +A276; [9C 29, 05, 05] + +A277; [9C 2B, 05, 05] + +A278; [9C 2D, 05, 05] + +A279; [9C 2F, 05, 05] + +A27A; [9C 31, 05, 05] + +A27B; [9C 33, 05, 05] + +A27C; [9C 35, 05, 05] + +A27D; [9C 37, 05, 05] + +A27E; [9C 39, 05, 05] + +A27F; [9C 3B, 05, 05] + +A280; [9C 3D, 05, 05] + +A281; [9C 3F, 05, 05] + +A282; [9C 41, 05, 05] + +A283; [9C 43, 05, 05] + +A284; [9C 45, 05, 05] + +A285; [9C 47, 05, 05] + +A286; [9C 49, 05, 05] + +A287; [9C 4B, 05, 05] + +A288; [9C 4D, 05, 05] + +A289; [9C 4F, 05, 05] + +A28A; [9C 51, 05, 05] + +A28B; [9C 53, 05, 05] + +A28C; [9C 55, 05, 05] + +A28D; [9C 57, 05, 05] + +A28E; [9C 59, 05, 05] + +A28F; [9C 5B, 05, 05] + +A290; [9C 5D, 05, 05] + +A291; [9C 5F, 05, 05] + +A292; [9C 61, 05, 05] + +A293; [9C 63, 05, 05] + +A294; [9C 65, 05, 05] + +A295; [9C 67, 05, 05] + +A296; [9C 69, 05, 05] + +A297; [9C 6B, 05, 05] + +A298; [9C 6D, 05, 05] + +A299; [9C 6F, 05, 05] + +A29A; [9C 71, 05, 05] + +A29B; [9C 73, 05, 05] + +A29C; [9C 75, 05, 05] + +A29D; [9C 77, 05, 05] + +A29E; [9C 79, 05, 05] + +A29F; [9C 7B, 05, 05] + +A2A0; [9C 7D, 05, 05] + +A2A1; [9C 7F, 05, 05] + +A2A2; [9C 81, 05, 05] + +A2A3; [9C 83, 05, 05] + +A2A4; [9C 85, 05, 05] + +A2A5; [9C 87, 05, 05] + +A2A6; [9C 89, 05, 05] + +A2A7; [9C 8B, 05, 05] + +A2A8; [9C 8D, 05, 05] + +A2A9; [9C 8F, 05, 05] + +A2AA; [9C 91, 05, 05] + +A2AB; [9C 93, 05, 05] + +A2AC; [9C 95, 05, 05] + +A2AD; [9C 97, 05, 05] + +A2AE; [9C 99, 05, 05] + +A2AF; [9C 9B, 05, 05] + +A2B0; [9C 9D, 05, 05] + +A2B1; [9C 9F, 05, 05] + +A2B2; [9C A1, 05, 05] + +A2B3; [9C A3, 05, 05] + +A2B4; [9C A5, 05, 05] + +A2B5; [9C A7, 05, 05] + +A2B6; [9C A9, 05, 05] + +A2B7; [9C AB, 05, 05] + +A2B8; [9C AD, 05, 05] + +A2B9; [9C AF, 05, 05] + +A2BA; [9C B1, 05, 05] + +A2BB; [9C B3, 05, 05] + +A2BC; [9C B5, 05, 05] + +A2BD; [9C B7, 05, 05] + +A2BE; [9C B9, 05, 05] + +A2BF; [9C BB, 05, 05] + +A2C0; [9C BD, 05, 05] + +A2C1; [9C BF, 05, 05] + +A2C2; [9C C1, 05, 05] + +A2C3; [9C C3, 05, 05] + +A2C4; [9C C5, 05, 05] + +A2C5; [9C C7, 05, 05] + +A2C6; [9C C9, 05, 05] + +A2C7; [9C CB, 05, 05] + +A2C8; [9C CD, 05, 05] + +A2C9; [9C CF, 05, 05] + +A2CA; [9C D1, 05, 05] + +A2CB; [9C D3, 05, 05] + +A2CC; [9C D5, 05, 05] + +A2CD; [9C D7, 05, 05] + +A2CE; [9C D9, 05, 05] + +A2CF; [9C DB, 05, 05] + +A2D0; [9C DD, 05, 05] + +A2D1; [9C DF, 05, 05] + +A2D2; [9C E1, 05, 05] + +A2D3; [9C E3, 05, 05] + +A2D4; [9C E5, 05, 05] + +A2D5; [9C E7, 05, 05] + +A2D6; [9C E9, 05, 05] + +A2D7; [9C EB, 05, 05] + +A2D8; [9C ED, 05, 05] + +A2D9; [9C EF, 05, 05] + +A2DA; [9C F1, 05, 05] + +A2DB; [9C F3, 05, 05] + +A2DC; [9C F5, 05, 05] + +A2DD; [9C F7, 05, 05] + +A2DE; [9C F9, 05, 05] + +A2DF; [9C FB, 05, 05] + +A2E0; [9C FD, 05, 05] + +A2E1; [9D 05, 05, 05] + +A2E2; [9D 07, 05, 05] + +A2E3; [9D 09, 05, 05] + +A2E4; [9D 0B, 05, 05] + +A2E5; [9D 0D, 05, 05] + +A2E6; [9D 0F, 05, 05] + +A2E7; [9D 11, 05, 05] + +A2E8; [9D 13, 05, 05] + +A2E9; [9D 15, 05, 05] + +A2EA; [9D 17, 05, 05] + +A2EB; [9D 19, 05, 05] + +A2EC; [9D 1B, 05, 05] + +A2ED; [9D 1D, 05, 05] + +A2EE; [9D 1F, 05, 05] + +A2EF; [9D 21, 05, 05] + +A2F0; [9D 23, 05, 05] + +A2F1; [9D 25, 05, 05] + +A2F2; [9D 27, 05, 05] + +A2F3; [9D 29, 05, 05] + +A2F4; [9D 2B, 05, 05] + +A2F5; [9D 2D, 05, 05] + +A2F6; [9D 2F, 05, 05] + +A2F7; [9D 31, 05, 05] + +A2F8; [9D 33, 05, 05] + +A2F9; [9D 35, 05, 05] + +A2FA; [9D 37, 05, 05] + +A2FB; [9D 39, 05, 05] + +A2FC; [9D 3B, 05, 05] + +A2FD; [9D 3D, 05, 05] + +A2FE; [9D 3F, 05, 05] + +A2FF; [9D 41, 05, 05] + +A300; [9D 43, 05, 05] + +A301; [9D 45, 05, 05] + +A302; [9D 47, 05, 05] + +A303; [9D 49, 05, 05] + +A304; [9D 4B, 05, 05] + +A305; [9D 4D, 05, 05] + +A306; [9D 4F, 05, 05] + +A307; [9D 51, 05, 05] + +A308; [9D 53, 05, 05] + +A309; [9D 55, 05, 05] + +A30A; [9D 57, 05, 05] + +A30B; [9D 59, 05, 05] + +A30C; [9D 5B, 05, 05] + +A30D; [9D 5D, 05, 05] + +A30E; [9D 5F, 05, 05] + +A30F; [9D 61, 05, 05] + +A310; [9D 63, 05, 05] + +A311; [9D 65, 05, 05] + +A312; [9D 67, 05, 05] + +A313; [9D 69, 05, 05] + +A314; [9D 6B, 05, 05] + +A315; [9D 6D, 05, 05] + +A316; [9D 6F, 05, 05] + +A317; [9D 71, 05, 05] + +A318; [9D 73, 05, 05] + +A319; [9D 75, 05, 05] + +A31A; [9D 77, 05, 05] + +A31B; [9D 79, 05, 05] + +A31C; [9D 7B, 05, 05] + +A31D; [9D 7D, 05, 05] + +A31E; [9D 7F, 05, 05] + +A31F; [9D 81, 05, 05] + +A320; [9D 83, 05, 05] + +A321; [9D 85, 05, 05] + +A322; [9D 87, 05, 05] + +A323; [9D 89, 05, 05] + +A324; [9D 8B, 05, 05] + +A325; [9D 8D, 05, 05] + +A326; [9D 8F, 05, 05] + +A327; [9D 91, 05, 05] + +A328; [9D 93, 05, 05] + +A329; [9D 95, 05, 05] + +A32A; [9D 97, 05, 05] + +A32B; [9D 99, 05, 05] + +A32C; [9D 9B, 05, 05] + +A32D; [9D 9D, 05, 05] + +A32E; [9D 9F, 05, 05] + +A32F; [9D A1, 05, 05] + +A330; [9D A3, 05, 05] + +A331; [9D A5, 05, 05] + +A332; [9D A7, 05, 05] + +A333; [9D A9, 05, 05] + +A334; [9D AB, 05, 05] + +A335; [9D AD, 05, 05] + +A336; [9D AF, 05, 05] + +A337; [9D B1, 05, 05] + +A338; [9D B3, 05, 05] + +A339; [9D B5, 05, 05] + +A33A; [9D B7, 05, 05] + +A33B; [9D B9, 05, 05] + +A33C; [9D BB, 05, 05] + +A33D; [9D BD, 05, 05] + +A33E; [9D BF, 05, 05] + +A33F; [9D C1, 05, 05] + +A340; [9D C3, 05, 05] + +A341; [9D C5, 05, 05] + +A342; [9D C7, 05, 05] + +A343; [9D C9, 05, 05] + +A344; [9D CB, 05, 05] + +A345; [9D CD, 05, 05] + +A346; [9D CF, 05, 05] + +A347; [9D D1, 05, 05] + +A348; [9D D3, 05, 05] + +A349; [9D D5, 05, 05] + +A34A; [9D D7, 05, 05] + +A34B; [9D D9, 05, 05] + +A34C; [9D DB, 05, 05] + +A34D; [9D DD, 05, 05] + +A34E; [9D DF, 05, 05] + +A34F; [9D E1, 05, 05] + +A350; [9D E3, 05, 05] + +A351; [9D E5, 05, 05] + +A352; [9D E7, 05, 05] + +A353; [9D E9, 05, 05] + +A354; [9D EB, 05, 05] + +A355; [9D ED, 05, 05] + +A356; [9D EF, 05, 05] + +A357; [9D F1, 05, 05] + +A358; [9D F3, 05, 05] + +A359; [9D F5, 05, 05] + +A35A; [9D F7, 05, 05] + +A35B; [9D F9, 05, 05] + +A35C; [9D FB, 05, 05] + +A35D; [9D FD, 05, 05] + +A35E; [9E 05, 05, 05] + +A35F; [9E 07, 05, 05] + +A360; [9E 09, 05, 05] + +A361; [9E 0B, 05, 05] + +A362; [9E 0D, 05, 05] + +A363; [9E 0F, 05, 05] + +A364; [9E 11, 05, 05] + +A365; [9E 13, 05, 05] + +A366; [9E 15, 05, 05] + +A367; [9E 17, 05, 05] + +A368; [9E 19, 05, 05] + +A369; [9E 1B, 05, 05] + +A36A; [9E 1D, 05, 05] + +A36B; [9E 1F, 05, 05] + +A36C; [9E 21, 05, 05] + +A36D; [9E 23, 05, 05] + +A36E; [9E 25, 05, 05] + +A36F; [9E 27, 05, 05] + +A370; [9E 29, 05, 05] + +A371; [9E 2B, 05, 05] + +A372; [9E 2D, 05, 05] + +A373; [9E 2F, 05, 05] + +A374; [9E 31, 05, 05] + +A375; [9E 33, 05, 05] + +A376; [9E 35, 05, 05] + +A377; [9E 37, 05, 05] + +A378; [9E 39, 05, 05] + +A379; [9E 3B, 05, 05] + +A37A; [9E 3D, 05, 05] + +A37B; [9E 3F, 05, 05] + +A37C; [9E 41, 05, 05] + +A37D; [9E 43, 05, 05] + +A37E; [9E 45, 05, 05] + +A37F; [9E 47, 05, 05] + +A380; [9E 49, 05, 05] + +A381; [9E 4B, 05, 05] + +A382; [9E 4D, 05, 05] + +A383; [9E 4F, 05, 05] + +A384; [9E 51, 05, 05] + +A385; [9E 53, 05, 05] + +A386; [9E 55, 05, 05] + +A387; [9E 57, 05, 05] + +A388; [9E 59, 05, 05] + +A389; [9E 5B, 05, 05] + +A38A; [9E 5D, 05, 05] + +A38B; [9E 5F, 05, 05] + +A38C; [9E 61, 05, 05] + +A38D; [9E 63, 05, 05] + +A38E; [9E 65, 05, 05] + +A38F; [9E 67, 05, 05] + +A390; [9E 69, 05, 05] + +A391; [9E 6B, 05, 05] + +A392; [9E 6D, 05, 05] + +A393; [9E 6F, 05, 05] + +A394; [9E 71, 05, 05] + +A395; [9E 73, 05, 05] + +A396; [9E 75, 05, 05] + +A397; [9E 77, 05, 05] + +A398; [9E 79, 05, 05] + +A399; [9E 7B, 05, 05] + +A39A; [9E 7D, 05, 05] + +A39B; [9E 7F, 05, 05] + +A39C; [9E 81, 05, 05] + +A39D; [9E 83, 05, 05] + +A39E; [9E 85, 05, 05] + +A39F; [9E 87, 05, 05] + +A3A0; [9E 89, 05, 05] + +A3A1; [9E 8B, 05, 05] + +A3A2; [9E 8D, 05, 05] + +A3A3; [9E 8F, 05, 05] + +A3A4; [9E 91, 05, 05] + +A3A5; [9E 93, 05, 05] + +A3A6; [9E 95, 05, 05] + +A3A7; [9E 97, 05, 05] + +A3A8; [9E 99, 05, 05] + +A3A9; [9E 9B, 05, 05] + +A3AA; [9E 9D, 05, 05] + +A3AB; [9E 9F, 05, 05] + +A3AC; [9E A1, 05, 05] + +A3AD; [9E A3, 05, 05] + +A3AE; [9E A5, 05, 05] + +A3AF; [9E A7, 05, 05] + +A3B0; [9E A9, 05, 05] + +A3B1; [9E AB, 05, 05] + +A3B2; [9E AD, 05, 05] + +A3B3; [9E AF, 05, 05] + +A3B4; [9E B1, 05, 05] + +A3B5; [9E B3, 05, 05] + +A3B6; [9E B5, 05, 05] + +A3B7; [9E B7, 05, 05] + +A3B8; [9E B9, 05, 05] + +A3B9; [9E BB, 05, 05] + +A3BA; [9E BD, 05, 05] + +A3BB; [9E BF, 05, 05] + +A3BC; [9E C1, 05, 05] + +A3BD; [9E C3, 05, 05] + +A3BE; [9E C5, 05, 05] + +A3BF; [9E C7, 05, 05] + +A3C0; [9E C9, 05, 05] + +A3C1; [9E CB, 05, 05] + +A3C2; [9E CD, 05, 05] + +A3C3; [9E CF, 05, 05] + +A3C4; [9E D1, 05, 05] + +A3C5; [9E D3, 05, 05] + +A3C6; [9E D5, 05, 05] + +A3C7; [9E D7, 05, 05] + +A3C8; [9E D9, 05, 05] + +A3C9; [9E DB, 05, 05] + +A3CA; [9E DD, 05, 05] + +A3CB; [9E DF, 05, 05] + +A3CC; [9E E1, 05, 05] + +A3CD; [9E E3, 05, 05] + +A3CE; [9E E5, 05, 05] + +A3CF; [9E E7, 05, 05] + +A3D0; [9E E9, 05, 05] + +A3D1; [9E EB, 05, 05] + +A3D2; [9E ED, 05, 05] + +A3D3; [9E EF, 05, 05] + +A3D4; [9E F1, 05, 05] + +A3D5; [9E F3, 05, 05] + +A3D6; [9E F5, 05, 05] + +A3D7; [9E F7, 05, 05] + +A3D8; [9E F9, 05, 05] + +A3D9; [9E FB, 05, 05] + +A3DA; [9E FD, 05, 05] + +A3DB; [9F 05, 05, 05] + +A3DC; [9F 07, 05, 05] + +A3DD; [9F 09, 05, 05] + +A3DE; [9F 0B, 05, 05] + +A3DF; [9F 0D, 05, 05] + +A3E0; [9F 0F, 05, 05] + +A3E1; [9F 11, 05, 05] + +A3E2; [9F 13, 05, 05] + +A3E3; [9F 15, 05, 05] + +A3E4; [9F 17, 05, 05] + +A3E5; [9F 19, 05, 05] + +A3E6; [9F 1B, 05, 05] + +A3E7; [9F 1D, 05, 05] + +A3E8; [9F 1F, 05, 05] + +A3E9; [9F 21, 05, 05] + +A3EA; [9F 23, 05, 05] + +A3EB; [9F 25, 05, 05] + +A3EC; [9F 27, 05, 05] + +A3ED; [9F 29, 05, 05] + +A3EE; [9F 2B, 05, 05] + +A3EF; [9F 2D, 05, 05] + +A3F0; [9F 2F, 05, 05] + +A3F1; [9F 31, 05, 05] + +A3F2; [9F 33, 05, 05] + +A3F3; [9F 35, 05, 05] + +A3F4; [9F 37, 05, 05] + +A3F5; [9F 39, 05, 05] + +A3F6; [9F 3B, 05, 05] + +A3F7; [9F 3D, 05, 05] + +A3F8; [9F 3F, 05, 05] + +A3F9; [9F 41, 05, 05] + +A3FA; [9F 43, 05, 05] + +A3FB; [9F 45, 05, 05] + +A3FC; [9F 47, 05, 05] + +A3FD; [9F 49, 05, 05] + +A3FE; [9F 4B, 05, 05] + +A3FF; [9F 4D, 05, 05] + +A400; [9F 4F, 05, 05] + +A401; [9F 51, 05, 05] + +A402; [9F 53, 05, 05] + +A403; [9F 55, 05, 05] + +A404; [9F 57, 05, 05] + +A405; [9F 59, 05, 05] + +A406; [9F 5B, 05, 05] + +A407; [9F 5D, 05, 05] + +A408; [9F 5F, 05, 05] + +A409; [9F 61, 05, 05] + +A40A; [9F 63, 05, 05] + +A40B; [9F 65, 05, 05] + +A40C; [9F 67, 05, 05] + +A40D; [9F 69, 05, 05] + +A40E; [9F 6B, 05, 05] + +A40F; [9F 6D, 05, 05] + +A410; [9F 6F, 05, 05] + +A411; [9F 71, 05, 05] + +A412; [9F 73, 05, 05] + +A413; [9F 75, 05, 05] + +A414; [9F 77, 05, 05] + +A415; [9F 79, 05, 05] + +A416; [9F 7B, 05, 05] + +A417; [9F 7D, 05, 05] + +A418; [9F 7F, 05, 05] + +A419; [9F 81, 05, 05] + +A41A; [9F 83, 05, 05] + +A41B; [9F 85, 05, 05] + +A41C; [9F 87, 05, 05] + +A41D; [9F 89, 05, 05] + +A41E; [9F 8B, 05, 05] + +A41F; [9F 8D, 05, 05] + +A420; [9F 8F, 05, 05] + +A421; [9F 91, 05, 05] + +A422; [9F 93, 05, 05] + +A423; [9F 95, 05, 05] + +A424; [9F 97, 05, 05] + +A425; [9F 99, 05, 05] + +A426; [9F 9B, 05, 05] + +A427; [9F 9D, 05, 05] + +A428; [9F 9F, 05, 05] + +A429; [9F A1, 05, 05] + +A42A; [9F A3, 05, 05] + +A42B; [9F A5, 05, 05] + +A42C; [9F A7, 05, 05] + +A42D; [9F A9, 05, 05] + +A42E; [9F AB, 05, 05] + +A42F; [9F AD, 05, 05] + +A430; [9F AF, 05, 05] + +A431; [9F B1, 05, 05] + +A432; [9F B3, 05, 05] + +A433; [9F B5, 05, 05] + +A434; [9F B7, 05, 05] + +A435; [9F B9, 05, 05] + +A436; [9F BB, 05, 05] + +A437; [9F BD, 05, 05] + +A438; [9F BF, 05, 05] + +A439; [9F C1, 05, 05] + +A43A; [9F C3, 05, 05] + +A43B; [9F C5, 05, 05] + +A43C; [9F C7, 05, 05] + +A43D; [9F C9, 05, 05] + +A43E; [9F CB, 05, 05] + +A43F; [9F CD, 05, 05] + +A440; [9F CF, 05, 05] + +A441; [9F D1, 05, 05] + +A442; [9F D3, 05, 05] + +A443; [9F D5, 05, 05] + +A444; [9F D7, 05, 05] + +A445; [9F D9, 05, 05] + +A446; [9F DB, 05, 05] + +A447; [9F DD, 05, 05] + +A448; [9F DF, 05, 05] + +A449; [9F E1, 05, 05] + +A44A; [9F E3, 05, 05] + +A44B; [9F E5, 05, 05] + +A44C; [9F E7, 05, 05] + +A44D; [9F E9, 05, 05] + +A44E; [9F EB, 05, 05] + +A44F; [9F ED, 05, 05] + +A450; [9F EF, 05, 05] + +A451; [9F F1, 05, 05] + +A452; [9F F3, 05, 05] + +A453; [9F F5, 05, 05] + +A454; [9F F7, 05, 05] + +A455; [9F F9, 05, 05] + +A456; [9F FB, 05, 05] + +A457; [9F FD, 05, 05] + +A458; [A0 05, 05, 05] + +A459; [A0 07, 05, 05] + +A45A; [A0 09, 05, 05] + +A45B; [A0 0B, 05, 05] + +A45C; [A0 0D, 05, 05] + +A45D; [A0 0F, 05, 05] + +A45E; [A0 11, 05, 05] + +A45F; [A0 13, 05, 05] + +A460; [A0 15, 05, 05] + +A461; [A0 17, 05, 05] + +A462; [A0 19, 05, 05] + +A463; [A0 1B, 05, 05] + +A464; [A0 1D, 05, 05] + +A465; [A0 1F, 05, 05] + +A466; [A0 21, 05, 05] + +A467; [A0 23, 05, 05] + +A468; [A0 25, 05, 05] + +A469; [A0 27, 05, 05] + +A46A; [A0 29, 05, 05] + +A46B; [A0 2B, 05, 05] + +A46C; [A0 2D, 05, 05] + +A46D; [A0 2F, 05, 05] + +A46E; [A0 31, 05, 05] + +A46F; [A0 33, 05, 05] + +A470; [A0 35, 05, 05] + +A471; [A0 37, 05, 05] + +A472; [A0 39, 05, 05] + +A473; [A0 3B, 05, 05] + +A474; [A0 3D, 05, 05] + +A475; [A0 3F, 05, 05] + +A476; [A0 41, 05, 05] + +A477; [A0 43, 05, 05] + +A478; [A0 45, 05, 05] + +A479; [A0 47, 05, 05] + +A47A; [A0 49, 05, 05] + +A47B; [A0 4B, 05, 05] + +A47C; [A0 4D, 05, 05] + +A47D; [A0 4F, 05, 05] + +A47E; [A0 51, 05, 05] + +A47F; [A0 53, 05, 05] + +A480; [A0 55, 05, 05] + +A481; [A0 57, 05, 05] + +A482; [A0 59, 05, 05] + +A483; [A0 5B, 05, 05] + +A484; [A0 5D, 05, 05] + +A485; [A0 5F, 05, 05] + +A486; [A0 61, 05, 05] + +A487; [A0 63, 05, 05] + +A488; [A0 65, 05, 05] + +A489; [A0 67, 05, 05] + +A48A; [A0 69, 05, 05] + +A48B; [A0 6B, 05, 05] + +A48C; [A0 6D, 05, 05] + +D800 DF00; [A0 6F, 05, 05] + +D800 DF01; [A0 71, 05, 05] + +D800 DF02; [A0 73, 05, 05] + +D800 DF03; [A0 75, 05, 05] + +D800 DF04; [A0 77, 05, 05] + +D800 DF05; [A0 79, 05, 05] + +D800 DF06; [A0 7B, 05, 05] + +D800 DF07; [A0 7D, 05, 05] + +D800 DF08; [A0 7F, 05, 05] + +D800 DF09; [A0 81, 05, 05] + +D800 DF0A; [A0 83, 05, 05] + +D800 DF0B; [A0 85, 05, 05] + +D800 DF0C; [A0 87, 05, 05] + +D800 DF0D; [A0 89, 05, 05] + +D800 DF0E; [A0 8B, 05, 05] + +D800 DF0F; [A0 8D, 05, 05] + +D800 DF10; [A0 8F, 05, 05] + +D800 DF11; [A0 91, 05, 05] + +D800 DF12; [A0 93, 05, 05] + +D800 DF13; [A0 95, 05, 05] + +D800 DF14; [A0 97, 05, 05] + +D800 DF15; [A0 99, 05, 05] + +D800 DF16; [A0 9B, 05, 05] + +D800 DF17; [A0 9D, 05, 05] + +D800 DF18; [A0 9F, 05, 05] + +D800 DF19; [A0 A1, 05, 05] + +D800 DF1A; [A0 A3, 05, 05] + +D800 DF1B; [A0 A5, 05, 05] + +D800 DF1C; [A0 A7, 05, 05] + +D800 DF1D; [A0 A9, 05, 05] + +D800 DF1E; [A0 AB, 05, 05] + +D800 DF30; [A0 AD, 05, 05] + +D800 DF31; [A0 AF, 05, 05] + +D800 DF32; [A0 B1, 05, 05] + +D800 DF33; [A0 B3, 05, 05] + +D800 DF34; [A0 B5, 05, 05] + +D800 DF35; [A0 B7, 05, 05] + +D800 DF36; [A0 B9, 05, 05] + +D800 DF37; [A0 BB, 05, 05] + +D800 DF38; [A0 BD, 05, 05] + +D800 DF39; [A0 BF, 05, 05] + +D800 DF3A; [A0 C1, 05, 05] + +D800 DF3B; [A0 C3, 05, 05] + +D800 DF3C; [A0 C5, 05, 05] + +D800 DF3D; [A0 C7, 05, 05] + +D800 DF3E; [A0 C9, 05, 05] + +D800 DF3F; [A0 CB, 05, 05] + +D800 DF40; [A0 CD, 05, 05] + +D800 DF41; [A0 CF, 05, 05] + +D800 DF42; [A0 D1, 05, 05] + +D800 DF43; [A0 D3, 05, 05] + +D800 DF44; [A0 D5, 05, 05] + +D800 DF45; [A0 D7, 05, 05] + +D800 DF46; [A0 D9, 05, 05] + +D800 DF47; [A0 DB, 05, 05] + +D800 DF48; [A0 DD, 05, 05] + +D800 DF49; [A0 DF, 05, 05] + +D800 DF4A; [A0 E1, 05, 05] + +D801 DC28; [A0 E3, 05, 05] +D801 DC00; [A0 E3, 05, 8F] + +D801 DC29; [A0 E5, 05, 05] +D801 DC01; [A0 E5, 05, 8F] + +D801 DC2A; [A0 E7, 05, 05] +D801 DC02; [A0 E7, 05, 8F] + +D801 DC2B; [A0 E9, 05, 05] +D801 DC03; [A0 E9, 05, 8F] + +D801 DC2C; [A0 EB, 05, 05] +D801 DC04; [A0 EB, 05, 8F] + +D801 DC2D; [A0 ED, 05, 05] +D801 DC05; [A0 ED, 05, 8F] + +D801 DC2E; [A0 EF, 05, 05] +D801 DC06; [A0 EF, 05, 8F] + +D801 DC2F; [A0 F1, 05, 05] +D801 DC07; [A0 F1, 05, 8F] + +D801 DC30; [A0 F3, 05, 05] +D801 DC08; [A0 F3, 05, 8F] + +D801 DC31; [A0 F5, 05, 05] +D801 DC09; [A0 F5, 05, 8F] + +D801 DC32; [A0 F7, 05, 05] +D801 DC0A; [A0 F7, 05, 8F] + +D801 DC33; [A0 F9, 05, 05] +D801 DC0B; [A0 F9, 05, 8F] + +D801 DC34; [A0 FB, 05, 05] +D801 DC0C; [A0 FB, 05, 8F] + +D801 DC35; [A0 FD, 05, 05] +D801 DC0D; [A0 FD, 05, 8F] + +D801 DC36; [A1 05, 05, 05] +D801 DC0E; [A1 05, 05, 8F] + +D801 DC37; [A1 07, 05, 05] +D801 DC0F; [A1 07, 05, 8F] + +D801 DC38; [A1 09, 05, 05] +D801 DC10; [A1 09, 05, 8F] + +D801 DC39; [A1 0B, 05, 05] +D801 DC11; [A1 0B, 05, 8F] + +D801 DC3A; [A1 0D, 05, 05] +D801 DC12; [A1 0D, 05, 8F] + +D801 DC3B; [A1 0F, 05, 05] +D801 DC13; [A1 0F, 05, 8F] + +D801 DC3C; [A1 11, 05, 05] +D801 DC14; [A1 11, 05, 8F] + +D801 DC3D; [A1 13, 05, 05] +D801 DC15; [A1 13, 05, 8F] + +D801 DC3E; [A1 15, 05, 05] +D801 DC16; [A1 15, 05, 8F] + +D801 DC3F; [A1 17, 05, 05] +D801 DC17; [A1 17, 05, 8F] + +D801 DC40; [A1 19, 05, 05] +D801 DC18; [A1 19, 05, 8F] + +D801 DC41; [A1 1B, 05, 05] +D801 DC19; [A1 1B, 05, 8F] + +D801 DC42; [A1 1D, 05, 05] +D801 DC1A; [A1 1D, 05, 8F] + +D801 DC43; [A1 1F, 05, 05] +D801 DC1B; [A1 1F, 05, 8F] + +D801 DC44; [A1 21, 05, 05] +D801 DC1C; [A1 21, 05, 8F] + +D801 DC45; [A1 23, 05, 05] +D801 DC1D; [A1 23, 05, 8F] + +D801 DC46; [A1 25, 05, 05] +D801 DC1E; [A1 25, 05, 8F] + +D801 DC47; [A1 27, 05, 05] +D801 DC1F; [A1 27, 05, 8F] + +D801 DC48; [A1 29, 05, 05] +D801 DC20; [A1 29, 05, 8F] + +D801 DC49; [A1 2B, 05, 05] +D801 DC21; [A1 2B, 05, 8F] + +D801 DC4A; [A1 2D, 05, 05] +D801 DC22; [A1 2D, 05, 8F] + +D801 DC4B; [A1 2F, 05, 05] +D801 DC23; [A1 2F, 05, 8F] + +D801 DC4C; [A1 31, 05, 05] +D801 DC24; [A1 31, 05, 8F] + +D801 DC4D; [A1 33, 05, 05] +D801 DC25; [A1 33, 05, 8F] + +D801 DC4E; [A1 35, 05, 05] +D801 DC26; [A1 35, 05, 8F] + +D801 DC4F; [A1 37, 05, 05] +D801 DC27; [A1 37, 05, 8F] + +D801 DC50; [A1 39, 05, 05] + +D801 DC51; [A1 3B, 05, 05] + +D801 DC52; [A1 3D, 05, 05] + +D801 DC53; [A1 3F, 05, 05] + +D801 DC54; [A1 41, 05, 05] + +D801 DC55; [A1 43, 05, 05] + +D801 DC56; [A1 45, 05, 05] + +D801 DC57; [A1 47, 05, 05] + +D801 DC58; [A1 49, 05, 05] + +D801 DC59; [A1 4B, 05, 05] + +D801 DC5A; [A1 4D, 05, 05] + +D801 DC5B; [A1 4F, 05, 05] + +D801 DC5C; [A1 51, 05, 05] + +D801 DC5D; [A1 53, 05, 05] + +D801 DC5E; [A1 55, 05, 05] + +D801 DC5F; [A1 57, 05, 05] + +D801 DC60; [A1 59, 05, 05] + +D801 DC61; [A1 5B, 05, 05] + +D801 DC62; [A1 5D, 05, 05] + +D801 DC63; [A1 5F, 05, 05] + +D801 DC64; [A1 61, 05, 05] + +D801 DC65; [A1 63, 05, 05] + +D801 DC66; [A1 65, 05, 05] + +D801 DC67; [A1 67, 05, 05] + +D801 DC68; [A1 69, 05, 05] + +D801 DC69; [A1 6B, 05, 05] + +D801 DC6A; [A1 6D, 05, 05] + +D801 DC6B; [A1 6F, 05, 05] + +D801 DC6C; [A1 71, 05, 05] + +D801 DC6D; [A1 73, 05, 05] + +D801 DC6E; [A1 75, 05, 05] + +D801 DC6F; [A1 77, 05, 05] + +D801 DC70; [A1 79, 05, 05] + +D801 DC71; [A1 7B, 05, 05] + +D801 DC72; [A1 7D, 05, 05] + +D801 DC73; [A1 7F, 05, 05] + +D801 DC74; [A1 81, 05, 05] + +D801 DC75; [A1 83, 05, 05] + +D801 DC76; [A1 85, 05, 05] + +D801 DC77; [A1 87, 05, 05] + +D801 DC78; [A1 89, 05, 05] + +D801 DC79; [A1 8B, 05, 05] + +D801 DC7A; [A1 8D, 05, 05] + +D801 DC7B; [A1 8F, 05, 05] + +D801 DC7C; [A1 91, 05, 05] + +D801 DC7D; [A1 93, 05, 05] + +D801 DC7E; [A1 95, 05, 05] + +D801 DC7F; [A1 97, 05, 05] + +D801 DC80; [A1 99, 05, 05] + +D801 DC81; [A1 9B, 05, 05] + +D801 DC82; [A1 9D, 05, 05] + +D801 DC83; [A1 9F, 05, 05] + +D801 DC84; [A1 A1, 05, 05] + +D801 DC85; [A1 A3, 05, 05] + +D801 DC86; [A1 A5, 05, 05] + +D801 DC87; [A1 A7, 05, 05] + +D801 DC88; [A1 A9, 05, 05] + +D801 DC89; [A1 AB, 05, 05] + +D801 DC8A; [A1 AD, 05, 05] + +D801 DC8B; [A1 AF, 05, 05] + +D801 DC8C; [A1 B1, 05, 05] + +D801 DC8D; [A1 B3, 05, 05] + +D801 DC8E; [A1 B5, 05, 05] + +D801 DC8F; [A1 B7, 05, 05] + +D801 DC90; [A1 B9, 05, 05] + +D801 DC91; [A1 BB, 05, 05] + +D801 DC92; [A1 BD, 05, 05] + +D801 DC93; [A1 BF, 05, 05] + +D801 DC94; [A1 C1, 05, 05] + +D801 DC95; [A1 C3, 05, 05] + +D801 DC96; [A1 C5, 05, 05] + +D801 DC97; [A1 C7, 05, 05] + +D801 DC98; [A1 C9, 05, 05] + +D801 DC99; [A1 CB, 05, 05] + +D801 DC9A; [A1 CD, 05, 05] + +D801 DC9B; [A1 CF, 05, 05] + +D801 DC9C; [A1 D1, 05, 05] + +D801 DC9D; [A1 D3, 05, 05] + +D800 DC00; [A1 D5, 05, 05] + +D800 DC01; [A1 D7, 05, 05] + +D800 DC02; [A1 D9, 05, 05] + +D800 DC03; [A1 DB, 05, 05] + +D800 DC04; [A1 DD, 05, 05] + +D800 DC05; [A1 DF, 05, 05] + +D800 DC06; [A1 E1, 05, 05] + +D800 DC07; [A1 E3, 05, 05] + +D800 DC08; [A1 E5, 05, 05] + +D800 DC09; [A1 E7, 05, 05] + +D800 DC0A; [A1 E9, 05, 05] + +D800 DC0B; [A1 EB, 05, 05] + +D800 DC0D; [A1 ED, 05, 05] + +D800 DC0E; [A1 EF, 05, 05] + +D800 DC0F; [A1 F1, 05, 05] + +D800 DC10; [A1 F3, 05, 05] + +D800 DC11; [A1 F5, 05, 05] + +D800 DC12; [A1 F7, 05, 05] + +D800 DC13; [A1 F9, 05, 05] + +D800 DC14; [A1 FB, 05, 05] + +D800 DC15; [A1 FD, 05, 05] + +D800 DC16; [A2 05, 05, 05] + +D800 DC17; [A2 07, 05, 05] + +D800 DC18; [A2 09, 05, 05] + +D800 DC19; [A2 0B, 05, 05] + +D800 DC1A; [A2 0D, 05, 05] + +D800 DC1B; [A2 0F, 05, 05] + +D800 DC1C; [A2 11, 05, 05] + +D800 DC1D; [A2 13, 05, 05] + +D800 DC1E; [A2 15, 05, 05] + +D800 DC1F; [A2 17, 05, 05] + +D800 DC20; [A2 19, 05, 05] + +D800 DC21; [A2 1B, 05, 05] + +D800 DC22; [A2 1D, 05, 05] + +D800 DC23; [A2 1F, 05, 05] + +D800 DC24; [A2 21, 05, 05] + +D800 DC25; [A2 23, 05, 05] + +D800 DC26; [A2 25, 05, 05] + +D800 DC28; [A2 27, 05, 05] + +D800 DC29; [A2 29, 05, 05] + +D800 DC2A; [A2 2B, 05, 05] + +D800 DC2B; [A2 2D, 05, 05] + +D800 DC2C; [A2 2F, 05, 05] + +D800 DC2D; [A2 31, 05, 05] + +D800 DC2E; [A2 33, 05, 05] + +D800 DC2F; [A2 35, 05, 05] + +D800 DC30; [A2 37, 05, 05] + +D800 DC31; [A2 39, 05, 05] + +D800 DC32; [A2 3B, 05, 05] + +D800 DC33; [A2 3D, 05, 05] + +D800 DC34; [A2 3F, 05, 05] + +D800 DC35; [A2 41, 05, 05] + +D800 DC36; [A2 43, 05, 05] + +D800 DC37; [A2 45, 05, 05] + +D800 DC38; [A2 47, 05, 05] + +D800 DC39; [A2 49, 05, 05] + +D800 DC3A; [A2 4B, 05, 05] + +D800 DC3C; [A2 4D, 05, 05] + +D800 DC3D; [A2 4F, 05, 05] + +D800 DC3F; [A2 51, 05, 05] + +D800 DC40; [A2 53, 05, 05] + +D800 DC41; [A2 55, 05, 05] + +D800 DC42; [A2 57, 05, 05] + +D800 DC43; [A2 59, 05, 05] + +D800 DC44; [A2 5B, 05, 05] + +D800 DC45; [A2 5D, 05, 05] + +D800 DC46; [A2 5F, 05, 05] + +D800 DC47; [A2 61, 05, 05] + +D800 DC48; [A2 63, 05, 05] + +D800 DC49; [A2 65, 05, 05] + +D800 DC4A; [A2 67, 05, 05] + +D800 DC4B; [A2 69, 05, 05] + +D800 DC4C; [A2 6B, 05, 05] + +D800 DC4D; [A2 6D, 05, 05] + +D800 DC50; [A2 6F, 05, 05] + +D800 DC51; [A2 71, 05, 05] + +D800 DC52; [A2 73, 05, 05] + +D800 DC53; [A2 75, 05, 05] + +D800 DC54; [A2 77, 05, 05] + +D800 DC55; [A2 79, 05, 05] + +D800 DC56; [A2 7B, 05, 05] + +D800 DC57; [A2 7D, 05, 05] + +D800 DC58; [A2 7F, 05, 05] + +D800 DC59; [A2 81, 05, 05] + +D800 DC5A; [A2 83, 05, 05] + +D800 DC5B; [A2 85, 05, 05] + +D800 DC5C; [A2 87, 05, 05] + +D800 DC5D; [A2 89, 05, 05] + +D800 DC80; [A2 8B, 05, 05] + +D800 DC81; [A2 8D, 05, 05] + +D800 DC82; [A2 8F, 05, 05] + +D800 DC83; [A2 91, 05, 05] + +D800 DC84; [A2 93, 05, 05] + +D800 DC85; [A2 95, 05, 05] + +D800 DC86; [A2 97, 05, 05] + +D800 DC87; [A2 99, 05, 05] + +D800 DC88; [A2 9B, 05, 05] + +D800 DC89; [A2 9D, 05, 05] + +D800 DC8A; [A2 9F, 05, 05] + +D800 DC8B; [A2 A1, 05, 05] + +D800 DC8C; [A2 A3, 05, 05] + +D800 DC8D; [A2 A5, 05, 05] + +D800 DC8E; [A2 A7, 05, 05] + +D800 DC8F; [A2 A9, 05, 05] + +D800 DC90; [A2 AB, 05, 05] + +D800 DC91; [A2 AD, 05, 05] + +D800 DC92; [A2 AF, 05, 05] + +D800 DC93; [A2 B1, 05, 05] + +D800 DC94; [A2 B3, 05, 05] + +D800 DC95; [A2 B5, 05, 05] + +D800 DC96; [A2 B7, 05, 05] + +D800 DC97; [A2 B9, 05, 05] + +D800 DC98; [A2 BB, 05, 05] + +D800 DC99; [A2 BD, 05, 05] + +D800 DC9A; [A2 BF, 05, 05] + +D800 DC9B; [A2 C1, 05, 05] + +D800 DC9C; [A2 C3, 05, 05] + +D800 DC9D; [A2 C5, 05, 05] + +D800 DC9E; [A2 C7, 05, 05] + +D800 DC9F; [A2 C9, 05, 05] + +D800 DCA0; [A2 CB, 05, 05] + +D800 DCA1; [A2 CD, 05, 05] + +D800 DCA2; [A2 CF, 05, 05] + +D800 DCA3; [A2 D1, 05, 05] + +D800 DCA4; [A2 D3, 05, 05] + +D800 DCA5; [A2 D5, 05, 05] + +D800 DCA6; [A2 D7, 05, 05] + +D800 DCA7; [A2 D9, 05, 05] + +D800 DCA8; [A2 DB, 05, 05] + +D800 DCA9; [A2 DD, 05, 05] + +D800 DCAA; [A2 DF, 05, 05] + +D800 DCAB; [A2 E1, 05, 05] + +D800 DCAC; [A2 E3, 05, 05] + +D800 DCAD; [A2 E5, 05, 05] + +D800 DCAE; [A2 E7, 05, 05] + +D800 DCAF; [A2 E9, 05, 05] + +D800 DCB0; [A2 EB, 05, 05] + +D800 DCB1; [A2 ED, 05, 05] + +D800 DCB2; [A2 EF, 05, 05] + +D800 DCB3; [A2 F1, 05, 05] + +D800 DCB4; [A2 F3, 05, 05] + +D800 DCB5; [A2 F5, 05, 05] + +D800 DCB6; [A2 F7, 05, 05] + +D800 DCB7; [A2 F9, 05, 05] + +D800 DCB8; [A2 FB, 05, 05] + +D800 DCB9; [A2 FD, 05, 05] + +D800 DCBA; [A3 05, 05, 05] + +D800 DCBB; [A3 07, 05, 05] + +D800 DCBC; [A3 09, 05, 05] + +D800 DCBD; [A3 0B, 05, 05] + +D800 DCBE; [A3 0D, 05, 05] + +D800 DCBF; [A3 0F, 05, 05] + +D800 DCC0; [A3 11, 05, 05] + +D800 DCC1; [A3 13, 05, 05] + +D800 DCC2; [A3 15, 05, 05] + +D800 DCC3; [A3 17, 05, 05] + +D800 DCC4; [A3 19, 05, 05] + +D800 DCC5; [A3 1B, 05, 05] + +D800 DCC6; [A3 1D, 05, 05] + +D800 DCC7; [A3 1F, 05, 05] + +D800 DCC8; [A3 21, 05, 05] + +D800 DCC9; [A3 23, 05, 05] + +D800 DCCA; [A3 25, 05, 05] + +D800 DCCB; [A3 27, 05, 05] + +D800 DCCC; [A3 29, 05, 05] + +D800 DCCD; [A3 2B, 05, 05] + +D800 DCCE; [A3 2D, 05, 05] + +D800 DCCF; [A3 2F, 05, 05] + +D800 DCD0; [A3 31, 05, 05] + +D800 DCD1; [A3 33, 05, 05] + +D800 DCD2; [A3 35, 05, 05] + +D800 DCD3; [A3 37, 05, 05] + +D800 DCD4; [A3 39, 05, 05] + +D800 DCD5; [A3 3B, 05, 05] + +D800 DCD6; [A3 3D, 05, 05] + +D800 DCD7; [A3 3F, 05, 05] + +D800 DCD8; [A3 41, 05, 05] + +D800 DCD9; [A3 43, 05, 05] + +D800 DCDA; [A3 45, 05, 05] + +D800 DCDB; [A3 47, 05, 05] + +D800 DCDC; [A3 49, 05, 05] + +D800 DCDD; [A3 4B, 05, 05] + +D800 DCDE; [A3 4D, 05, 05] + +D800 DCDF; [A3 4F, 05, 05] + +D800 DCE0; [A3 51, 05, 05] + +D800 DCE1; [A3 53, 05, 05] + +D800 DCE2; [A3 55, 05, 05] + +D800 DCE3; [A3 57, 05, 05] + +D800 DCE4; [A3 59, 05, 05] + +D800 DCE5; [A3 5B, 05, 05] + +D800 DCE6; [A3 5D, 05, 05] + +D800 DCE7; [A3 5F, 05, 05] + +D800 DCE8; [A3 61, 05, 05] + +D800 DCE9; [A3 63, 05, 05] + +D800 DCEA; [A3 65, 05, 05] + +D800 DCEB; [A3 67, 05, 05] + +D800 DCEC; [A3 69, 05, 05] + +D800 DCED; [A3 6B, 05, 05] + +D800 DCEE; [A3 6D, 05, 05] + +D800 DCEF; [A3 6F, 05, 05] + +D800 DCF0; [A3 71, 05, 05] + +D800 DCF1; [A3 73, 05, 05] + +D800 DCF2; [A3 75, 05, 05] + +D800 DCF3; [A3 77, 05, 05] + +D800 DCF4; [A3 79, 05, 05] + +D800 DCF5; [A3 7B, 05, 05] + +D800 DCF6; [A3 7D, 05, 05] + +D800 DCF7; [A3 7F, 05, 05] + +D800 DCF8; [A3 81, 05, 05] + +D800 DCF9; [A3 83, 05, 05] + +D800 DCFA; [A3 85, 05, 05] + +D802 DC00; [A3 87, 05, 05] + +D802 DC01; [A3 89, 05, 05] + +D802 DC02; [A3 8B, 05, 05] + +D802 DC03; [A3 8D, 05, 05] + +D802 DC04; [A3 8F, 05, 05] + +D802 DC05; [A3 91, 05, 05] + +D802 DC08; [A3 93, 05, 05] + +D802 DC0A; [A3 95, 05, 05] + +D802 DC0B; [A3 97, 05, 05] + +D802 DC0C; [A3 99, 05, 05] + +D802 DC0D; [A3 9B, 05, 05] + +D802 DC0E; [A3 9D, 05, 05] + +D802 DC0F; [A3 9F, 05, 05] + +D802 DC10; [A3 A1, 05, 05] + +D802 DC11; [A3 A3, 05, 05] + +D802 DC12; [A3 A5, 05, 05] + +D802 DC13; [A3 A7, 05, 05] + +D802 DC14; [A3 A9, 05, 05] + +D802 DC15; [A3 AB, 05, 05] + +D802 DC16; [A3 AD, 05, 05] + +D802 DC17; [A3 AF, 05, 05] + +D802 DC18; [A3 B1, 05, 05] + +D802 DC19; [A3 B3, 05, 05] + +D802 DC1A; [A3 B5, 05, 05] + +D802 DC1B; [A3 B7, 05, 05] + +D802 DC1C; [A3 B9, 05, 05] + +D802 DC1D; [A3 BB, 05, 05] + +D802 DC1E; [A3 BD, 05, 05] + +D802 DC1F; [A3 BF, 05, 05] + +D802 DC20; [A3 C1, 05, 05] + +D802 DC21; [A3 C3, 05, 05] + +D802 DC22; [A3 C5, 05, 05] + +D802 DC23; [A3 C7, 05, 05] + +D802 DC24; [A3 C9, 05, 05] + +D802 DC25; [A3 CB, 05, 05] + +D802 DC26; [A3 CD, 05, 05] + +D802 DC27; [A3 CF, 05, 05] + +D802 DC28; [A3 D1, 05, 05] + +D802 DC29; [A3 D3, 05, 05] + +D802 DC2A; [A3 D5, 05, 05] + +D802 DC2B; [A3 D7, 05, 05] + +D802 DC2C; [A3 D9, 05, 05] + +D802 DC2D; [A3 DB, 05, 05] + +D802 DC2E; [A3 DD, 05, 05] + +D802 DC2F; [A3 DF, 05, 05] + +D802 DC30; [A3 E1, 05, 05] + +D802 DC31; [A3 E3, 05, 05] + +D802 DC32; [A3 E5, 05, 05] + +D802 DC33; [A3 E7, 05, 05] + +D802 DC34; [A3 E9, 05, 05] + +D802 DC35; [A3 EB, 05, 05] + +D802 DC37; [A3 ED, 05, 05] + +D802 DC38; [A3 EF, 05, 05] + +D802 DC3C; [A3 F1, 05, 05] + +D802 DC3F; [A3 F3, 05, 05] + +D800 DF80; [A3 F5, 05, 05] + +D800 DF81; [A3 F7, 05, 05] + +D800 DF82; [A3 F9, 05, 05] + +D800 DF83; [A3 FB, 05, 05] + +D800 DF84; [A3 FD, 05, 05] + +D800 DF85; [A4 05, 05, 05] + +D800 DF86; [A4 07, 05, 05] + +D800 DF87; [A4 09, 05, 05] + +D800 DF88; [A4 0B, 05, 05] + +D800 DF89; [A4 0D, 05, 05] + +D800 DF8A; [A4 0F, 05, 05] + +D800 DF8B; [A4 11, 05, 05] + +D800 DF8C; [A4 13, 05, 05] + +D800 DF8D; [A4 15, 05, 05] + +D800 DF8E; [A4 17, 05, 05] + +D800 DF8F; [A4 19, 05, 05] + +D800 DF90; [A4 1B, 05, 05] + +D800 DF91; [A4 1D, 05, 05] + +D800 DF92; [A4 1F, 05, 05] + +D800 DF93; [A4 21, 05, 05] + +D800 DF94; [A4 23, 05, 05] + +D800 DF95; [A4 25, 05, 05] + +D800 DF96; [A4 27, 05, 05] + +D800 DF97; [A4 29, 05, 05] + +D800 DF98; [A4 2B, 05, 05] + +D800 DF99; [A4 2D, 05, 05] + +D800 DF9A; [A4 2F, 05, 05] + +D800 DF9B; [A4 31, 05, 05] + +D800 DF9C; [A4 33, 05, 05] + +D800 DF9D; [A4 35, 05, 05] + +D800 DFA0; [A4 37, 05, 05] + +D800 DFA1; [A4 39, 05, 05] + +D800 DFA2; [A4 3B, 05, 05] + +D800 DFA3; [A4 3D, 05, 05] + +D800 DFA4; [A4 3F, 05, 05] + +D800 DFA5; [A4 41, 05, 05] + +D800 DFA6; [A4 43, 05, 05] + +D800 DFA7; [A4 45, 05, 05] + +D800 DFA8; [A4 47, 05, 05] + +D800 DFA9; [A4 49, 05, 05] + +D800 DFAA; [A4 4B, 05, 05] + +D800 DFAB; [A4 4D, 05, 05] + +D800 DFAC; [A4 4F, 05, 05] + +D800 DFAD; [A4 51, 05, 05] + +D800 DFAE; [A4 53, 05, 05] + +D800 DFAF; [A4 55, 05, 05] + +D800 DFB0; [A4 57, 05, 05] + +D800 DFB1; [A4 59, 05, 05] + +D800 DFB2; [A4 5B, 05, 05] + +D800 DFB3; [A4 5D, 05, 05] + +D800 DFB4; [A4 5F, 05, 05] + +D800 DFB5; [A4 61, 05, 05] + +D800 DFB6; [A4 63, 05, 05] + +D800 DFB7; [A4 65, 05, 05] + +D800 DFB8; [A4 67, 05, 05] + +D800 DFB9; [A4 69, 05, 05] + +D800 DFBA; [A4 6B, 05, 05] + +D800 DFBB; [A4 6D, 05, 05] + +D800 DFBC; [A4 6F, 05, 05] + +D800 DFBD; [A4 71, 05, 05] + +D800 DFBE; [A4 73, 05, 05] + +D800 DFBF; [A4 75, 05, 05] + +D800 DFC0; [A4 77, 05, 05] + +D800 DFC1; [A4 79, 05, 05] + +D800 DFC2; [A4 7B, 05, 05] + +D800 DFC3; [A4 7D, 05, 05] + +D800 DFC8; [A4 7F, 05, 05] + +D800 DFC9; [A4 81, 05, 05] + +D800 DFCA; [A4 83, 05, 05] + +D800 DFCB; [A4 85, 05, 05] + +D800 DFCC; [A4 87, 05, 05] + +D800 DFCD; [A4 89, 05, 05] + +D800 DFCE; [A4 8B, 05, 05] + +D800 DFCF; [A4 8D, 05, 05] + +D808 DC00; [A4 8F, 05, 05] + +D808 DC01; [A4 91, 05, 05] + +D808 DC02; [A4 93, 05, 05] + +D808 DC03; [A4 95, 05, 05] + +D808 DC04; [A4 97, 05, 05] + +D808 DC05; [A4 99, 05, 05] + +D808 DC06; [A4 9B, 05, 05] + +D808 DC07; [A4 9D, 05, 05] + +D808 DC08; [A4 9F, 05, 05] + +D808 DC09; [A4 A1, 05, 05] + +D808 DC0A; [A4 A3, 05, 05] + +D808 DC0B; [A4 A5, 05, 05] + +D808 DC0C; [A4 A7, 05, 05] + +D808 DC0D; [A4 A9, 05, 05] + +D808 DC0E; [A4 AB, 05, 05] + +D808 DC0F; [A4 AD, 05, 05] + +D808 DC10; [A4 AF, 05, 05] + +D808 DC11; [A4 B1, 05, 05] + +D808 DC12; [A4 B3, 05, 05] + +D808 DC13; [A4 B5, 05, 05] + +D808 DC14; [A4 B7, 05, 05] + +D808 DC15; [A4 B9, 05, 05] + +D808 DC16; [A4 BB, 05, 05] + +D808 DC17; [A4 BD, 05, 05] + +D808 DC18; [A4 BF, 05, 05] + +D808 DC19; [A4 C1, 05, 05] + +D808 DC1A; [A4 C3, 05, 05] + +D808 DC1B; [A4 C5, 05, 05] + +D808 DC1C; [A4 C7, 05, 05] + +D808 DC1D; [A4 C9, 05, 05] + +D808 DC1E; [A4 CB, 05, 05] + +D808 DC1F; [A4 CD, 05, 05] + +D808 DC20; [A4 CF, 05, 05] + +D808 DC21; [A4 D1, 05, 05] + +D808 DC22; [A4 D3, 05, 05] + +D808 DC23; [A4 D5, 05, 05] + +D808 DC24; [A4 D7, 05, 05] + +D808 DC25; [A4 D9, 05, 05] + +D808 DC26; [A4 DB, 05, 05] + +D808 DC27; [A4 DD, 05, 05] + +D808 DC28; [A4 DF, 05, 05] + +D808 DC29; [A4 E1, 05, 05] + +D808 DC2A; [A4 E3, 05, 05] + +D808 DC2B; [A4 E5, 05, 05] + +D808 DC2C; [A4 E7, 05, 05] + +D808 DC2D; [A4 E9, 05, 05] + +D808 DC2E; [A4 EB, 05, 05] + +D808 DC2F; [A4 ED, 05, 05] + +D808 DC30; [A4 EF, 05, 05] + +D808 DC31; [A4 F1, 05, 05] + +D808 DC32; [A4 F3, 05, 05] + +D808 DC33; [A4 F5, 05, 05] + +D808 DC34; [A4 F7, 05, 05] + +D808 DC35; [A4 F9, 05, 05] + +D808 DC36; [A4 FB, 05, 05] + +D808 DC37; [A4 FD, 05, 05] + +D808 DC38; [A5 05, 05, 05] + +D808 DC39; [A5 07, 05, 05] + +D808 DC3A; [A5 09, 05, 05] + +D808 DC3B; [A5 0B, 05, 05] + +D808 DC3C; [A5 0D, 05, 05] + +D808 DC3D; [A5 0F, 05, 05] + +D808 DC3E; [A5 11, 05, 05] + +D808 DC3F; [A5 13, 05, 05] + +D808 DC40; [A5 15, 05, 05] + +D808 DC41; [A5 17, 05, 05] + +D808 DC42; [A5 19, 05, 05] + +D808 DC43; [A5 1B, 05, 05] + +D808 DC44; [A5 1D, 05, 05] + +D808 DC45; [A5 1F, 05, 05] + +D808 DC46; [A5 21, 05, 05] + +D808 DC47; [A5 23, 05, 05] + +D808 DC48; [A5 25, 05, 05] + +D808 DC49; [A5 27, 05, 05] + +D808 DC4A; [A5 29, 05, 05] + +D808 DC4B; [A5 2B, 05, 05] + +D808 DC4C; [A5 2D, 05, 05] + +D808 DC4D; [A5 2F, 05, 05] + +D808 DC4E; [A5 31, 05, 05] + +D808 DC4F; [A5 33, 05, 05] + +D808 DC50; [A5 35, 05, 05] + +D808 DC51; [A5 37, 05, 05] + +D808 DC52; [A5 39, 05, 05] + +D808 DC53; [A5 3B, 05, 05] + +D808 DC54; [A5 3D, 05, 05] + +D808 DC55; [A5 3F, 05, 05] + +D808 DC56; [A5 41, 05, 05] + +D808 DC57; [A5 43, 05, 05] + +D808 DC58; [A5 45, 05, 05] + +D808 DC59; [A5 47, 05, 05] + +D808 DC5A; [A5 49, 05, 05] + +D808 DC5B; [A5 4B, 05, 05] + +D808 DC5C; [A5 4D, 05, 05] + +D808 DC5D; [A5 4F, 05, 05] + +D808 DC5E; [A5 51, 05, 05] + +D808 DC5F; [A5 53, 05, 05] + +D808 DC60; [A5 55, 05, 05] + +D808 DC61; [A5 57, 05, 05] + +D808 DC62; [A5 59, 05, 05] + +D808 DC63; [A5 5B, 05, 05] + +D808 DC64; [A5 5D, 05, 05] + +D808 DC65; [A5 5F, 05, 05] + +D808 DC66; [A5 61, 05, 05] + +D808 DC67; [A5 63, 05, 05] + +D808 DC68; [A5 65, 05, 05] + +D808 DC69; [A5 67, 05, 05] + +D808 DC6A; [A5 69, 05, 05] + +D808 DC6B; [A5 6B, 05, 05] + +D808 DC6C; [A5 6D, 05, 05] + +D808 DC6D; [A5 6F, 05, 05] + +D808 DC6E; [A5 71, 05, 05] + +D808 DC6F; [A5 73, 05, 05] + +D808 DC70; [A5 75, 05, 05] + +D808 DC71; [A5 77, 05, 05] + +D808 DC72; [A5 79, 05, 05] + +D808 DC73; [A5 7B, 05, 05] + +D808 DC74; [A5 7D, 05, 05] + +D808 DC75; [A5 7F, 05, 05] + +D808 DC76; [A5 81, 05, 05] + +D808 DC77; [A5 83, 05, 05] + +D808 DC78; [A5 85, 05, 05] + +D808 DC79; [A5 87, 05, 05] + +D808 DC7A; [A5 89, 05, 05] + +D808 DC7B; [A5 8B, 05, 05] + +D808 DC7C; [A5 8D, 05, 05] + +D808 DC7D; [A5 8F, 05, 05] + +D808 DC7E; [A5 91, 05, 05] + +D808 DC7F; [A5 93, 05, 05] + +D808 DC80; [A5 95, 05, 05] + +D808 DC81; [A5 97, 05, 05] + +D808 DC82; [A5 99, 05, 05] + +D808 DC83; [A5 9B, 05, 05] + +D808 DC84; [A5 9D, 05, 05] + +D808 DC85; [A5 9F, 05, 05] + +D808 DC86; [A5 A1, 05, 05] + +D808 DC87; [A5 A3, 05, 05] + +D808 DC88; [A5 A5, 05, 05] + +D808 DC89; [A5 A7, 05, 05] + +D808 DC8A; [A5 A9, 05, 05] + +D808 DC8B; [A5 AB, 05, 05] + +D808 DC8C; [A5 AD, 05, 05] + +D808 DC8D; [A5 AF, 05, 05] + +D808 DC8E; [A5 B1, 05, 05] + +D808 DC8F; [A5 B3, 05, 05] + +D808 DC90; [A5 B5, 05, 05] + +D808 DC91; [A5 B7, 05, 05] + +D808 DC92; [A5 B9, 05, 05] + +D808 DC93; [A5 BB, 05, 05] + +D808 DC94; [A5 BD, 05, 05] + +D808 DC95; [A5 BF, 05, 05] + +D808 DC96; [A5 C1, 05, 05] + +D808 DC97; [A5 C3, 05, 05] + +D808 DC98; [A5 C5, 05, 05] + +D808 DC99; [A5 C7, 05, 05] + +D808 DC9A; [A5 C9, 05, 05] + +D808 DC9B; [A5 CB, 05, 05] + +D808 DC9C; [A5 CD, 05, 05] + +D808 DC9D; [A5 CF, 05, 05] + +D808 DC9E; [A5 D1, 05, 05] + +D808 DC9F; [A5 D3, 05, 05] + +D808 DCA0; [A5 D5, 05, 05] + +D808 DCA1; [A5 D7, 05, 05] + +D808 DCA2; [A5 D9, 05, 05] + +D808 DCA3; [A5 DB, 05, 05] + +D808 DCA4; [A5 DD, 05, 05] + +D808 DCA5; [A5 DF, 05, 05] + +D808 DCA6; [A5 E1, 05, 05] + +D808 DCA7; [A5 E3, 05, 05] + +D808 DCA8; [A5 E5, 05, 05] + +D808 DCA9; [A5 E7, 05, 05] + +D808 DCAA; [A5 E9, 05, 05] + +D808 DCAB; [A5 EB, 05, 05] + +D808 DCAC; [A5 ED, 05, 05] + +D808 DCAD; [A5 EF, 05, 05] + +D808 DCAE; [A5 F1, 05, 05] + +D808 DCAF; [A5 F3, 05, 05] + +D808 DCB0; [A5 F5, 05, 05] + +D808 DCB1; [A5 F7, 05, 05] + +D808 DCB2; [A5 F9, 05, 05] + +D808 DCB3; [A5 FB, 05, 05] + +D808 DCB4; [A5 FD, 05, 05] + +D808 DCB5; [A6 05, 05, 05] + +D808 DCB6; [A6 07, 05, 05] + +D808 DCB7; [A6 09, 05, 05] + +D808 DCB8; [A6 0B, 05, 05] + +D808 DCB9; [A6 0D, 05, 05] + +D808 DCBA; [A6 0F, 05, 05] + +D808 DCBB; [A6 11, 05, 05] + +D808 DCBC; [A6 13, 05, 05] + +D808 DCBD; [A6 15, 05, 05] + +D808 DCBE; [A6 17, 05, 05] + +D808 DCBF; [A6 19, 05, 05] + +D808 DCC0; [A6 1B, 05, 05] + +D808 DCC1; [A6 1D, 05, 05] + +D808 DCC2; [A6 1F, 05, 05] + +D808 DCC3; [A6 21, 05, 05] + +D808 DCC4; [A6 23, 05, 05] + +D808 DCC5; [A6 25, 05, 05] + +D808 DCC6; [A6 27, 05, 05] + +D808 DCC7; [A6 29, 05, 05] + +D808 DCC8; [A6 2B, 05, 05] + +D808 DCC9; [A6 2D, 05, 05] + +D808 DCCA; [A6 2F, 05, 05] + +D808 DCCB; [A6 31, 05, 05] + +D808 DCCC; [A6 33, 05, 05] + +D808 DCCD; [A6 35, 05, 05] + +D808 DCCE; [A6 37, 05, 05] + +D808 DCCF; [A6 39, 05, 05] + +D808 DCD0; [A6 3B, 05, 05] + +D808 DCD1; [A6 3D, 05, 05] + +D808 DCD2; [A6 3F, 05, 05] + +D808 DCD3; [A6 41, 05, 05] + +D808 DCD4; [A6 43, 05, 05] + +D808 DCD5; [A6 45, 05, 05] + +D808 DCD6; [A6 47, 05, 05] + +D808 DCD7; [A6 49, 05, 05] + +D808 DCD8; [A6 4B, 05, 05] + +D808 DCD9; [A6 4D, 05, 05] + +D808 DCDA; [A6 4F, 05, 05] + +D808 DCDB; [A6 51, 05, 05] + +D808 DCDC; [A6 53, 05, 05] + +D808 DCDD; [A6 55, 05, 05] + +D808 DCDE; [A6 57, 05, 05] + +D808 DCDF; [A6 59, 05, 05] + +D808 DCE0; [A6 5B, 05, 05] + +D808 DCE1; [A6 5D, 05, 05] + +D808 DCE2; [A6 5F, 05, 05] + +D808 DCE3; [A6 61, 05, 05] + +D808 DCE4; [A6 63, 05, 05] + +D808 DCE5; [A6 65, 05, 05] + +D808 DCE6; [A6 67, 05, 05] + +D808 DCE7; [A6 69, 05, 05] + +D808 DCE8; [A6 6B, 05, 05] + +D808 DCE9; [A6 6D, 05, 05] + +D808 DCEA; [A6 6F, 05, 05] + +D808 DCEB; [A6 71, 05, 05] + +D808 DCEC; [A6 73, 05, 05] + +D808 DCED; [A6 75, 05, 05] + +D808 DCEE; [A6 77, 05, 05] + +D808 DCEF; [A6 79, 05, 05] + +D808 DCF0; [A6 7B, 05, 05] + +D808 DCF1; [A6 7D, 05, 05] + +D808 DCF2; [A6 7F, 05, 05] + +D808 DCF3; [A6 81, 05, 05] + +D808 DCF4; [A6 83, 05, 05] + +D808 DCF5; [A6 85, 05, 05] + +D808 DCF6; [A6 87, 05, 05] + +D808 DCF7; [A6 89, 05, 05] + +D808 DCF8; [A6 8B, 05, 05] + +D808 DCF9; [A6 8D, 05, 05] + +D808 DCFA; [A6 8F, 05, 05] + +D808 DCFB; [A6 91, 05, 05] + +D808 DCFC; [A6 93, 05, 05] + +D808 DCFD; [A6 95, 05, 05] + +D808 DCFE; [A6 97, 05, 05] + +D808 DCFF; [A6 99, 05, 05] + +D808 DD00; [A6 9B, 05, 05] + +D808 DD01; [A6 9D, 05, 05] + +D808 DD02; [A6 9F, 05, 05] + +D808 DD03; [A6 A1, 05, 05] + +D808 DD04; [A6 A3, 05, 05] + +D808 DD05; [A6 A5, 05, 05] + +D808 DD06; [A6 A7, 05, 05] + +D808 DD07; [A6 A9, 05, 05] + +D808 DD08; [A6 AB, 05, 05] + +D808 DD09; [A6 AD, 05, 05] + +D808 DD0A; [A6 AF, 05, 05] + +D808 DD0B; [A6 B1, 05, 05] + +D808 DD0C; [A6 B3, 05, 05] + +D808 DD0D; [A6 B5, 05, 05] + +D808 DD0E; [A6 B7, 05, 05] + +D808 DD0F; [A6 B9, 05, 05] + +D808 DD10; [A6 BB, 05, 05] + +D808 DD11; [A6 BD, 05, 05] + +D808 DD12; [A6 BF, 05, 05] + +D808 DD13; [A6 C1, 05, 05] + +D808 DD14; [A6 C3, 05, 05] + +D808 DD15; [A6 C5, 05, 05] + +D808 DD16; [A6 C7, 05, 05] + +D808 DD17; [A6 C9, 05, 05] + +D808 DD18; [A6 CB, 05, 05] + +D808 DD19; [A6 CD, 05, 05] + +D808 DD1A; [A6 CF, 05, 05] + +D808 DD1B; [A6 D1, 05, 05] + +D808 DD1C; [A6 D3, 05, 05] + +D808 DD1D; [A6 D5, 05, 05] + +D808 DD1E; [A6 D7, 05, 05] + +D808 DD1F; [A6 D9, 05, 05] + +D808 DD20; [A6 DB, 05, 05] + +D808 DD21; [A6 DD, 05, 05] + +D808 DD22; [A6 DF, 05, 05] + +D808 DD23; [A6 E1, 05, 05] + +D808 DD24; [A6 E3, 05, 05] + +D808 DD25; [A6 E5, 05, 05] + +D808 DD26; [A6 E7, 05, 05] + +D808 DD27; [A6 E9, 05, 05] + +D808 DD28; [A6 EB, 05, 05] + +D808 DD29; [A6 ED, 05, 05] + +D808 DD2A; [A6 EF, 05, 05] + +D808 DD2B; [A6 F1, 05, 05] + +D808 DD2C; [A6 F3, 05, 05] + +D808 DD2D; [A6 F5, 05, 05] + +D808 DD2E; [A6 F7, 05, 05] + +D808 DD2F; [A6 F9, 05, 05] + +D808 DD30; [A6 FB, 05, 05] + +D808 DD31; [A6 FD, 05, 05] + +D808 DD32; [A7 05, 05, 05] + +D808 DD33; [A7 07, 05, 05] + +D808 DD34; [A7 09, 05, 05] + +D808 DD35; [A7 0B, 05, 05] + +D808 DD36; [A7 0D, 05, 05] + +D808 DD37; [A7 0F, 05, 05] + +D808 DD38; [A7 11, 05, 05] + +D808 DD39; [A7 13, 05, 05] + +D808 DD3A; [A7 15, 05, 05] + +D808 DD3B; [A7 17, 05, 05] + +D808 DD3C; [A7 19, 05, 05] + +D808 DD3D; [A7 1B, 05, 05] + +D808 DD3E; [A7 1D, 05, 05] + +D808 DD3F; [A7 1F, 05, 05] + +D808 DD40; [A7 21, 05, 05] + +D808 DD41; [A7 23, 05, 05] + +D808 DD42; [A7 25, 05, 05] + +D808 DD43; [A7 27, 05, 05] + +D808 DD44; [A7 29, 05, 05] + +D808 DD45; [A7 2B, 05, 05] + +D808 DD46; [A7 2D, 05, 05] + +D808 DD47; [A7 2F, 05, 05] + +D808 DD48; [A7 31, 05, 05] + +D808 DD49; [A7 33, 05, 05] + +D808 DD4A; [A7 35, 05, 05] + +D808 DD4B; [A7 37, 05, 05] + +D808 DD4C; [A7 39, 05, 05] + +D808 DD4D; [A7 3B, 05, 05] + +D808 DD4E; [A7 3D, 05, 05] + +D808 DD4F; [A7 3F, 05, 05] + +D808 DD50; [A7 41, 05, 05] + +D808 DD51; [A7 43, 05, 05] + +D808 DD52; [A7 45, 05, 05] + +D808 DD53; [A7 47, 05, 05] + +D808 DD54; [A7 49, 05, 05] + +D808 DD55; [A7 4B, 05, 05] + +D808 DD56; [A7 4D, 05, 05] + +D808 DD57; [A7 4F, 05, 05] + +D808 DD58; [A7 51, 05, 05] + +D808 DD59; [A7 53, 05, 05] + +D808 DD5A; [A7 55, 05, 05] + +D808 DD5B; [A7 57, 05, 05] + +D808 DD5C; [A7 59, 05, 05] + +D808 DD5D; [A7 5B, 05, 05] + +D808 DD5E; [A7 5D, 05, 05] + +D808 DD5F; [A7 5F, 05, 05] + +D808 DD60; [A7 61, 05, 05] + +D808 DD61; [A7 63, 05, 05] + +D808 DD62; [A7 65, 05, 05] + +D808 DD63; [A7 67, 05, 05] + +D808 DD64; [A7 69, 05, 05] + +D808 DD65; [A7 6B, 05, 05] + +D808 DD66; [A7 6D, 05, 05] + +D808 DD67; [A7 6F, 05, 05] + +D808 DD68; [A7 71, 05, 05] + +D808 DD69; [A7 73, 05, 05] + +D808 DD6A; [A7 75, 05, 05] + +D808 DD6B; [A7 77, 05, 05] + +D808 DD6C; [A7 79, 05, 05] + +D808 DD6D; [A7 7B, 05, 05] + +D808 DD6E; [A7 7D, 05, 05] + +D808 DD6F; [A7 7F, 05, 05] + +D808 DD70; [A7 81, 05, 05] + +D808 DD71; [A7 83, 05, 05] + +D808 DD72; [A7 85, 05, 05] + +D808 DD73; [A7 87, 05, 05] + +D808 DD74; [A7 89, 05, 05] + +D808 DD75; [A7 8B, 05, 05] + +D808 DD76; [A7 8D, 05, 05] + +D808 DD77; [A7 8F, 05, 05] + +D808 DD78; [A7 91, 05, 05] + +D808 DD79; [A7 93, 05, 05] + +D808 DD7A; [A7 95, 05, 05] + +D808 DD7B; [A7 97, 05, 05] + +D808 DD7C; [A7 99, 05, 05] + +D808 DD7D; [A7 9B, 05, 05] + +D808 DD7E; [A7 9D, 05, 05] + +D808 DD7F; [A7 9F, 05, 05] + +D808 DD80; [A7 A1, 05, 05] + +D808 DD81; [A7 A3, 05, 05] + +D808 DD82; [A7 A5, 05, 05] + +D808 DD83; [A7 A7, 05, 05] + +D808 DD84; [A7 A9, 05, 05] + +D808 DD85; [A7 AB, 05, 05] + +D808 DD86; [A7 AD, 05, 05] + +D808 DD87; [A7 AF, 05, 05] + +D808 DD88; [A7 B1, 05, 05] + +D808 DD89; [A7 B3, 05, 05] + +D808 DD8A; [A7 B5, 05, 05] + +D808 DD8B; [A7 B7, 05, 05] + +D808 DD8C; [A7 B9, 05, 05] + +D808 DD8D; [A7 BB, 05, 05] + +D808 DD8E; [A7 BD, 05, 05] + +D808 DD8F; [A7 BF, 05, 05] + +D808 DD90; [A7 C1, 05, 05] + +D808 DD91; [A7 C3, 05, 05] + +D808 DD92; [A7 C5, 05, 05] + +D808 DD93; [A7 C7, 05, 05] + +D808 DD94; [A7 C9, 05, 05] + +D808 DD95; [A7 CB, 05, 05] + +D808 DD96; [A7 CD, 05, 05] + +D808 DD97; [A7 CF, 05, 05] + +D808 DD98; [A7 D1, 05, 05] + +D808 DD99; [A7 D3, 05, 05] + +D808 DD9A; [A7 D5, 05, 05] + +D808 DD9B; [A7 D7, 05, 05] + +D808 DD9C; [A7 D9, 05, 05] + +D808 DD9D; [A7 DB, 05, 05] + +D808 DD9E; [A7 DD, 05, 05] + +D808 DD9F; [A7 DF, 05, 05] + +D808 DDA0; [A7 E1, 05, 05] + +D808 DDA1; [A7 E3, 05, 05] + +D808 DDA2; [A7 E5, 05, 05] + +D808 DDA3; [A7 E7, 05, 05] + +D808 DDA4; [A7 E9, 05, 05] + +D808 DDA5; [A7 EB, 05, 05] + +D808 DDA6; [A7 ED, 05, 05] + +D808 DDA7; [A7 EF, 05, 05] + +D808 DDA8; [A7 F1, 05, 05] + +D808 DDA9; [A7 F3, 05, 05] + +D808 DDAA; [A7 F5, 05, 05] + +D808 DDAB; [A7 F7, 05, 05] + +D808 DDAC; [A7 F9, 05, 05] + +D808 DDAD; [A7 FB, 05, 05] + +D808 DDAE; [A7 FD, 05, 05] + +D808 DDAF; [A8 05, 05, 05] + +D808 DDB0; [A8 07, 05, 05] + +D808 DDB1; [A8 09, 05, 05] + +D808 DDB2; [A8 0B, 05, 05] + +D808 DDB3; [A8 0D, 05, 05] + +D808 DDB4; [A8 0F, 05, 05] + +D808 DDB5; [A8 11, 05, 05] + +D808 DDB6; [A8 13, 05, 05] + +D808 DDB7; [A8 15, 05, 05] + +D808 DDB8; [A8 17, 05, 05] + +D808 DDB9; [A8 19, 05, 05] + +D808 DDBA; [A8 1B, 05, 05] + +D808 DDBB; [A8 1D, 05, 05] + +D808 DDBC; [A8 1F, 05, 05] + +D808 DDBD; [A8 21, 05, 05] + +D808 DDBE; [A8 23, 05, 05] + +D808 DDBF; [A8 25, 05, 05] + +D808 DDC0; [A8 27, 05, 05] + +D808 DDC1; [A8 29, 05, 05] + +D808 DDC2; [A8 2B, 05, 05] + +D808 DDC3; [A8 2D, 05, 05] + +D808 DDC4; [A8 2F, 05, 05] + +D808 DDC5; [A8 31, 05, 05] + +D808 DDC6; [A8 33, 05, 05] + +D808 DDC7; [A8 35, 05, 05] + +D808 DDC8; [A8 37, 05, 05] + +D808 DDC9; [A8 39, 05, 05] + +D808 DDCA; [A8 3B, 05, 05] + +D808 DDCB; [A8 3D, 05, 05] + +D808 DDCC; [A8 3F, 05, 05] + +D808 DDCD; [A8 41, 05, 05] + +D808 DDCE; [A8 43, 05, 05] + +D808 DDCF; [A8 45, 05, 05] + +D808 DDD0; [A8 47, 05, 05] + +D808 DDD1; [A8 49, 05, 05] + +D808 DDD2; [A8 4B, 05, 05] + +D808 DDD3; [A8 4D, 05, 05] + +D808 DDD4; [A8 4F, 05, 05] + +D808 DDD5; [A8 51, 05, 05] + +D808 DDD6; [A8 53, 05, 05] + +D808 DDD7; [A8 55, 05, 05] + +D808 DDD8; [A8 57, 05, 05] + +D808 DDD9; [A8 59, 05, 05] + +D808 DDDA; [A8 5B, 05, 05] + +D808 DDDB; [A8 5D, 05, 05] + +D808 DDDC; [A8 5F, 05, 05] + +D808 DDDD; [A8 61, 05, 05] + +D808 DDDE; [A8 63, 05, 05] + +D808 DDDF; [A8 65, 05, 05] + +D808 DDE0; [A8 67, 05, 05] + +D808 DDE1; [A8 69, 05, 05] + +D808 DDE2; [A8 6B, 05, 05] + +D808 DDE3; [A8 6D, 05, 05] + +D808 DDE4; [A8 6F, 05, 05] + +D808 DDE5; [A8 71, 05, 05] + +D808 DDE6; [A8 73, 05, 05] + +D808 DDE7; [A8 75, 05, 05] + +D808 DDE8; [A8 77, 05, 05] + +D808 DDE9; [A8 79, 05, 05] + +D808 DDEA; [A8 7B, 05, 05] + +D808 DDEB; [A8 7D, 05, 05] + +D808 DDEC; [A8 7F, 05, 05] + +D808 DDED; [A8 81, 05, 05] + +D808 DDEE; [A8 83, 05, 05] + +D808 DDEF; [A8 85, 05, 05] + +D808 DDF0; [A8 87, 05, 05] + +D808 DDF1; [A8 89, 05, 05] + +D808 DDF2; [A8 8B, 05, 05] + +D808 DDF3; [A8 8D, 05, 05] + +D808 DDF4; [A8 8F, 05, 05] + +D808 DDF5; [A8 91, 05, 05] + +D808 DDF6; [A8 93, 05, 05] + +D808 DDF7; [A8 95, 05, 05] + +D808 DDF8; [A8 97, 05, 05] + +D808 DDF9; [A8 99, 05, 05] + +D808 DDFA; [A8 9B, 05, 05] + +D808 DDFB; [A8 9D, 05, 05] + +D808 DDFC; [A8 9F, 05, 05] + +D808 DDFD; [A8 A1, 05, 05] + +D808 DDFE; [A8 A3, 05, 05] + +D808 DDFF; [A8 A5, 05, 05] + +D808 DE00; [A8 A7, 05, 05] + +D808 DE01; [A8 A9, 05, 05] + +D808 DE02; [A8 AB, 05, 05] + +D808 DE03; [A8 AD, 05, 05] + +D808 DE04; [A8 AF, 05, 05] + +D808 DE05; [A8 B1, 05, 05] + +D808 DE06; [A8 B3, 05, 05] + +D808 DE07; [A8 B5, 05, 05] + +D808 DE08; [A8 B7, 05, 05] + +D808 DE09; [A8 B9, 05, 05] + +D808 DE0A; [A8 BB, 05, 05] + +D808 DE0B; [A8 BD, 05, 05] + +D808 DE0C; [A8 BF, 05, 05] + +D808 DE0D; [A8 C1, 05, 05] + +D808 DE0E; [A8 C3, 05, 05] + +D808 DE0F; [A8 C5, 05, 05] + +D808 DE10; [A8 C7, 05, 05] + +D808 DE11; [A8 C9, 05, 05] + +D808 DE12; [A8 CB, 05, 05] + +D808 DE13; [A8 CD, 05, 05] + +D808 DE14; [A8 CF, 05, 05] + +D808 DE15; [A8 D1, 05, 05] + +D808 DE16; [A8 D3, 05, 05] + +D808 DE17; [A8 D5, 05, 05] + +D808 DE18; [A8 D7, 05, 05] + +D808 DE19; [A8 D9, 05, 05] + +D808 DE1A; [A8 DB, 05, 05] + +D808 DE1B; [A8 DD, 05, 05] + +D808 DE1C; [A8 DF, 05, 05] + +D808 DE1D; [A8 E1, 05, 05] + +D808 DE1E; [A8 E3, 05, 05] + +D808 DE1F; [A8 E5, 05, 05] + +D808 DE20; [A8 E7, 05, 05] + +D808 DE21; [A8 E9, 05, 05] + +D808 DE22; [A8 EB, 05, 05] + +D808 DE23; [A8 ED, 05, 05] + +D808 DE24; [A8 EF, 05, 05] + +D808 DE25; [A8 F1, 05, 05] + +D808 DE26; [A8 F3, 05, 05] + +D808 DE27; [A8 F5, 05, 05] + +D808 DE28; [A8 F7, 05, 05] + +D808 DE29; [A8 F9, 05, 05] + +D808 DE2A; [A8 FB, 05, 05] + +D808 DE2B; [A8 FD, 05, 05] + +D808 DE2C; [A9 05, 05, 05] + +D808 DE2D; [A9 07, 05, 05] + +D808 DE2E; [A9 09, 05, 05] + +D808 DE2F; [A9 0B, 05, 05] + +D808 DE30; [A9 0D, 05, 05] + +D808 DE31; [A9 0F, 05, 05] + +D808 DE32; [A9 11, 05, 05] + +D808 DE33; [A9 13, 05, 05] + +D808 DE34; [A9 15, 05, 05] + +D808 DE35; [A9 17, 05, 05] + +D808 DE36; [A9 19, 05, 05] + +D808 DE37; [A9 1B, 05, 05] + +D808 DE38; [A9 1D, 05, 05] + +D808 DE39; [A9 1F, 05, 05] + +D808 DE3A; [A9 21, 05, 05] + +D808 DE3B; [A9 23, 05, 05] + +D808 DE3C; [A9 25, 05, 05] + +D808 DE3D; [A9 27, 05, 05] + +D808 DE3E; [A9 29, 05, 05] + +D808 DE3F; [A9 2B, 05, 05] + +D808 DE40; [A9 2D, 05, 05] + +D808 DE41; [A9 2F, 05, 05] + +D808 DE42; [A9 31, 05, 05] + +D808 DE43; [A9 33, 05, 05] + +D808 DE44; [A9 35, 05, 05] + +D808 DE45; [A9 37, 05, 05] + +D808 DE46; [A9 39, 05, 05] + +D808 DE47; [A9 3B, 05, 05] + +D808 DE48; [A9 3D, 05, 05] + +D808 DE49; [A9 3F, 05, 05] + +D808 DE4A; [A9 41, 05, 05] + +D808 DE4B; [A9 43, 05, 05] + +D808 DE4C; [A9 45, 05, 05] + +D808 DE4D; [A9 47, 05, 05] + +D808 DE4E; [A9 49, 05, 05] + +D808 DE4F; [A9 4B, 05, 05] + +D808 DE50; [A9 4D, 05, 05] + +D808 DE51; [A9 4F, 05, 05] + +D808 DE52; [A9 51, 05, 05] + +D808 DE53; [A9 53, 05, 05] + +D808 DE54; [A9 55, 05, 05] + +D808 DE55; [A9 57, 05, 05] + +D808 DE56; [A9 59, 05, 05] + +D808 DE57; [A9 5B, 05, 05] + +D808 DE58; [A9 5D, 05, 05] + +D808 DE59; [A9 5F, 05, 05] + +D808 DE5A; [A9 61, 05, 05] + +D808 DE5B; [A9 63, 05, 05] + +D808 DE5C; [A9 65, 05, 05] + +D808 DE5D; [A9 67, 05, 05] + +D808 DE5E; [A9 69, 05, 05] + +D808 DE5F; [A9 6B, 05, 05] + +D808 DE60; [A9 6D, 05, 05] + +D808 DE61; [A9 6F, 05, 05] + +D808 DE62; [A9 71, 05, 05] + +D808 DE63; [A9 73, 05, 05] + +D808 DE64; [A9 75, 05, 05] + +D808 DE65; [A9 77, 05, 05] + +D808 DE66; [A9 79, 05, 05] + +D808 DE67; [A9 7B, 05, 05] + +D808 DE68; [A9 7D, 05, 05] + +D808 DE69; [A9 7F, 05, 05] + +D808 DE6A; [A9 81, 05, 05] + +D808 DE6B; [A9 83, 05, 05] + +D808 DE6C; [A9 85, 05, 05] + +D808 DE6D; [A9 87, 05, 05] + +D808 DE6E; [A9 89, 05, 05] + +D808 DE6F; [A9 8B, 05, 05] + +D808 DE70; [A9 8D, 05, 05] + +D808 DE71; [A9 8F, 05, 05] + +D808 DE72; [A9 91, 05, 05] + +D808 DE73; [A9 93, 05, 05] + +D808 DE74; [A9 95, 05, 05] + +D808 DE75; [A9 97, 05, 05] + +D808 DE76; [A9 99, 05, 05] + +D808 DE77; [A9 9B, 05, 05] + +D808 DE78; [A9 9D, 05, 05] + +D808 DE79; [A9 9F, 05, 05] + +D808 DE7A; [A9 A1, 05, 05] + +D808 DE7B; [A9 A3, 05, 05] + +D808 DE7C; [A9 A5, 05, 05] + +D808 DE7D; [A9 A7, 05, 05] + +D808 DE7E; [A9 A9, 05, 05] + +D808 DE7F; [A9 AB, 05, 05] + +D808 DE80; [A9 AD, 05, 05] + +D808 DE81; [A9 AF, 05, 05] + +D808 DE82; [A9 B1, 05, 05] + +D808 DE83; [A9 B3, 05, 05] + +D808 DE84; [A9 B5, 05, 05] + +D808 DE85; [A9 B7, 05, 05] + +D808 DE86; [A9 B9, 05, 05] + +D808 DE87; [A9 BB, 05, 05] + +D808 DE88; [A9 BD, 05, 05] + +D808 DE89; [A9 BF, 05, 05] + +D808 DE8A; [A9 C1, 05, 05] + +D808 DE8B; [A9 C3, 05, 05] + +D808 DE8C; [A9 C5, 05, 05] + +D808 DE8D; [A9 C7, 05, 05] + +D808 DE8E; [A9 C9, 05, 05] + +D808 DE8F; [A9 CB, 05, 05] + +D808 DE90; [A9 CD, 05, 05] + +D808 DE91; [A9 CF, 05, 05] + +D808 DE92; [A9 D1, 05, 05] + +D808 DE93; [A9 D3, 05, 05] + +D808 DE94; [A9 D5, 05, 05] + +D808 DE95; [A9 D7, 05, 05] + +D808 DE96; [A9 D9, 05, 05] + +D808 DE97; [A9 DB, 05, 05] + +D808 DE98; [A9 DD, 05, 05] + +D808 DE99; [A9 DF, 05, 05] + +D808 DE9A; [A9 E1, 05, 05] + +D808 DE9B; [A9 E3, 05, 05] + +D808 DE9C; [A9 E5, 05, 05] + +D808 DE9D; [A9 E7, 05, 05] + +D808 DE9E; [A9 E9, 05, 05] + +D808 DE9F; [A9 EB, 05, 05] + +D808 DEA0; [A9 ED, 05, 05] + +D808 DEA1; [A9 EF, 05, 05] + +D808 DEA2; [A9 F1, 05, 05] + +D808 DEA3; [A9 F3, 05, 05] + +D808 DEA4; [A9 F5, 05, 05] + +D808 DEA5; [A9 F7, 05, 05] + +D808 DEA6; [A9 F9, 05, 05] + +D808 DEA7; [A9 FB, 05, 05] + +D808 DEA8; [A9 FD, 05, 05] + +D808 DEA9; [AA 05, 05, 05] + +D808 DEAA; [AA 07, 05, 05] + +D808 DEAB; [AA 09, 05, 05] + +D808 DEAC; [AA 0B, 05, 05] + +D808 DEAD; [AA 0D, 05, 05] + +D808 DEAE; [AA 0F, 05, 05] + +D808 DEAF; [AA 11, 05, 05] + +D808 DEB0; [AA 13, 05, 05] + +D808 DEB1; [AA 15, 05, 05] + +D808 DEB2; [AA 17, 05, 05] + +D808 DEB3; [AA 19, 05, 05] + +D808 DEB4; [AA 1B, 05, 05] + +D808 DEB5; [AA 1D, 05, 05] + +D808 DEB6; [AA 1F, 05, 05] + +D808 DEB7; [AA 21, 05, 05] + +D808 DEB8; [AA 23, 05, 05] + +D808 DEB9; [AA 25, 05, 05] + +D808 DEBA; [AA 27, 05, 05] + +D808 DEBB; [AA 29, 05, 05] + +D808 DEBC; [AA 2B, 05, 05] + +D808 DEBD; [AA 2D, 05, 05] + +D808 DEBE; [AA 2F, 05, 05] + +D808 DEBF; [AA 31, 05, 05] + +D808 DEC0; [AA 33, 05, 05] + +D808 DEC1; [AA 35, 05, 05] + +D808 DEC2; [AA 37, 05, 05] + +D808 DEC3; [AA 39, 05, 05] + +D808 DEC4; [AA 3B, 05, 05] + +D808 DEC5; [AA 3D, 05, 05] + +D808 DEC6; [AA 3F, 05, 05] + +D808 DEC7; [AA 41, 05, 05] + +D808 DEC8; [AA 43, 05, 05] + +D808 DEC9; [AA 45, 05, 05] + +D808 DECA; [AA 47, 05, 05] + +D808 DECB; [AA 49, 05, 05] + +D808 DECC; [AA 4B, 05, 05] + +D808 DECD; [AA 4D, 05, 05] + +D808 DECE; [AA 4F, 05, 05] + +D808 DECF; [AA 51, 05, 05] + +D808 DED0; [AA 53, 05, 05] + +D808 DED1; [AA 55, 05, 05] + +D808 DED2; [AA 57, 05, 05] + +D808 DED3; [AA 59, 05, 05] + +D808 DED4; [AA 5B, 05, 05] + +D808 DED5; [AA 5D, 05, 05] + +D808 DED6; [AA 5F, 05, 05] + +D808 DED7; [AA 61, 05, 05] + +D808 DED8; [AA 63, 05, 05] + +D808 DED9; [AA 65, 05, 05] + +D808 DEDA; [AA 67, 05, 05] + +D808 DEDB; [AA 69, 05, 05] + +D808 DEDC; [AA 6B, 05, 05] + +D808 DEDD; [AA 6D, 05, 05] + +D808 DEDE; [AA 6F, 05, 05] + +D808 DEDF; [AA 71, 05, 05] + +D808 DEE0; [AA 73, 05, 05] + +D808 DEE1; [AA 75, 05, 05] + +D808 DEE2; [AA 77, 05, 05] + +D808 DEE3; [AA 79, 05, 05] + +D808 DEE4; [AA 7B, 05, 05] + +D808 DEE5; [AA 7D, 05, 05] + +D808 DEE6; [AA 7F, 05, 05] + +D808 DEE7; [AA 81, 05, 05] + +D808 DEE8; [AA 83, 05, 05] + +D808 DEE9; [AA 85, 05, 05] + +D808 DEEA; [AA 87, 05, 05] + +D808 DEEB; [AA 89, 05, 05] + +D808 DEEC; [AA 8B, 05, 05] + +D808 DEED; [AA 8D, 05, 05] + +D808 DEEE; [AA 8F, 05, 05] + +D808 DEEF; [AA 91, 05, 05] + +D808 DEF0; [AA 93, 05, 05] + +D808 DEF1; [AA 95, 05, 05] + +D808 DEF2; [AA 97, 05, 05] + +D808 DEF3; [AA 99, 05, 05] + +D808 DEF4; [AA 9B, 05, 05] + +D808 DEF5; [AA 9D, 05, 05] + +D808 DEF6; [AA 9F, 05, 05] + +D808 DEF7; [AA A1, 05, 05] + +D808 DEF8; [AA A3, 05, 05] + +D808 DEF9; [AA A5, 05, 05] + +D808 DEFA; [AA A7, 05, 05] + +D808 DEFB; [AA A9, 05, 05] + +D808 DEFC; [AA AB, 05, 05] + +D808 DEFD; [AA AD, 05, 05] + +D808 DEFE; [AA AF, 05, 05] + +D808 DEFF; [AA B1, 05, 05] + +D808 DF00; [AA B3, 05, 05] + +D808 DF01; [AA B5, 05, 05] + +D808 DF02; [AA B7, 05, 05] + +D808 DF03; [AA B9, 05, 05] + +D808 DF04; [AA BB, 05, 05] + +D808 DF05; [AA BD, 05, 05] + +D808 DF06; [AA BF, 05, 05] + +D808 DF07; [AA C1, 05, 05] + +D808 DF08; [AA C3, 05, 05] + +D808 DF09; [AA C5, 05, 05] + +D808 DF0A; [AA C7, 05, 05] + +D808 DF0B; [AA C9, 05, 05] + +D808 DF0C; [AA CB, 05, 05] + +D808 DF0D; [AA CD, 05, 05] + +D808 DF0E; [AA CF, 05, 05] + +D808 DF0F; [AA D1, 05, 05] + +D808 DF10; [AA D3, 05, 05] + +D808 DF11; [AA D5, 05, 05] + +D808 DF12; [AA D7, 05, 05] + +D808 DF13; [AA D9, 05, 05] + +D808 DF14; [AA DB, 05, 05] + +D808 DF15; [AA DD, 05, 05] + +D808 DF16; [AA DF, 05, 05] + +D808 DF17; [AA E1, 05, 05] + +D808 DF18; [AA E3, 05, 05] + +D808 DF19; [AA E5, 05, 05] + +D808 DF1A; [AA E7, 05, 05] + +D808 DF1B; [AA E9, 05, 05] + +D808 DF1C; [AA EB, 05, 05] + +D808 DF1D; [AA ED, 05, 05] + +D808 DF1E; [AA EF, 05, 05] + +D808 DF1F; [AA F1, 05, 05] + +D808 DF20; [AA F3, 05, 05] + +D808 DF21; [AA F5, 05, 05] + +D808 DF22; [AA F7, 05, 05] + +D808 DF23; [AA F9, 05, 05] + +D808 DF24; [AA FB, 05, 05] + +D808 DF25; [AA FD, 05, 05] + +D808 DF26; [AB 05, 05, 05] + +D808 DF27; [AB 07, 05, 05] + +D808 DF28; [AB 09, 05, 05] + +D808 DF29; [AB 0B, 05, 05] + +D808 DF2A; [AB 0D, 05, 05] + +D808 DF2B; [AB 0F, 05, 05] + +D808 DF2C; [AB 11, 05, 05] + +D808 DF2D; [AB 13, 05, 05] + +D808 DF2E; [AB 15, 05, 05] + +D808 DF2F; [AB 17, 05, 05] + +D808 DF30; [AB 19, 05, 05] + +D808 DF31; [AB 1B, 05, 05] + +D808 DF32; [AB 1D, 05, 05] + +D808 DF33; [AB 1F, 05, 05] + +D808 DF34; [AB 21, 05, 05] + +D808 DF35; [AB 23, 05, 05] + +D808 DF36; [AB 25, 05, 05] + +D808 DF37; [AB 27, 05, 05] + +D808 DF38; [AB 29, 05, 05] + +D808 DF39; [AB 2B, 05, 05] + +D808 DF3A; [AB 2D, 05, 05] + +D808 DF3B; [AB 2F, 05, 05] + +D808 DF3C; [AB 31, 05, 05] + +D808 DF3D; [AB 33, 05, 05] + +D808 DF3E; [AB 35, 05, 05] + +D808 DF3F; [AB 37, 05, 05] + +D808 DF40; [AB 39, 05, 05] + +D808 DF41; [AB 3B, 05, 05] + +D808 DF42; [AB 3D, 05, 05] + +D808 DF43; [AB 3F, 05, 05] + +D808 DF44; [AB 41, 05, 05] + +D808 DF45; [AB 43, 05, 05] + +D808 DF46; [AB 45, 05, 05] + +D808 DF47; [AB 47, 05, 05] + +D808 DF48; [AB 49, 05, 05] + +D808 DF49; [AB 4B, 05, 05] + +D808 DF4A; [AB 4D, 05, 05] + +D808 DF4B; [AB 4F, 05, 05] + +D808 DF4C; [AB 51, 05, 05] + +D808 DF4D; [AB 53, 05, 05] + +D808 DF4E; [AB 55, 05, 05] + +D808 DF4F; [AB 57, 05, 05] + +D808 DF50; [AB 59, 05, 05] + +D808 DF51; [AB 5B, 05, 05] + +D808 DF52; [AB 5D, 05, 05] + +D808 DF53; [AB 5F, 05, 05] + +D808 DF54; [AB 61, 05, 05] + +D808 DF55; [AB 63, 05, 05] + +D808 DF56; [AB 65, 05, 05] + +D808 DF57; [AB 67, 05, 05] + +D808 DF58; [AB 69, 05, 05] + +D808 DF59; [AB 6B, 05, 05] + +D808 DF5A; [AB 6D, 05, 05] + +D808 DF5B; [AB 6F, 05, 05] + +D808 DF5C; [AB 71, 05, 05] + +D808 DF5D; [AB 73, 05, 05] + +D808 DF5E; [AB 75, 05, 05] + +D808 DF5F; [AB 77, 05, 05] + +D808 DF60; [AB 79, 05, 05] + +D808 DF61; [AB 7B, 05, 05] + +D808 DF62; [AB 7D, 05, 05] + +D808 DF63; [AB 7F, 05, 05] + +D808 DF64; [AB 81, 05, 05] + +D808 DF65; [AB 83, 05, 05] + +D808 DF66; [AB 85, 05, 05] + +D808 DF67; [AB 87, 05, 05] + +D808 DF68; [AB 89, 05, 05] + +D808 DF69; [AB 8B, 05, 05] + +D808 DF6A; [AB 8D, 05, 05] + +D808 DF6B; [AB 8F, 05, 05] + +D808 DF6C; [AB 91, 05, 05] + +D808 DF6D; [AB 93, 05, 05] + +D808 DF6E; [AB 95, 05, 05] 2F00; [E0 04 06, 05, 09] 3280; [E0 04 06, 05, 0D] @@ -22125,13 +27115,14 @@ D800 DF9D; [97 35, 05, 05] 3198; [E0 04 1C, 05, 27] F967; [E0 04 20, 05, 05] 319B; [E0 04 38, 05, 27] +FA70; [E0 04 52, 05, 05] 2F01; [E0 04 56, 05, 09] 2EA6; [E0 04 5E, 05, 09] 32A5; [E0 04 60, 05, 0D] 3197; [E0 04 60, 05, 27] F905; [E0 04 6A, 05, 05] 2F02; [E0 04 72, 05, 09] -2E80; [E0 04 72, 05, 09][, E0 8D, 3D] +2E80; [E0 04 72, 05, 09][, E4 4D, 3D] D87E DC01; [E0 04 76, 05, 05] F95E; [E0 04 78, 05, 05] D87E DC00; [E0 04 80, 05, 05] @@ -22139,7 +27130,7 @@ D87E DC00; [E0 04 80, 05, 05] D87E DC02; [E0 04 88, 05, 05] 2F04; [E0 04 B8, 05, 09] 319A; [E0 04 B8, 05, 27] -2E84; [E0 04 B8, 05, 09][, E0 8D, 3D] +2E84; [E0 04 B8, 05, 09][, E4 4D, 3D] 2E83; [E0 04 BA, 05, 09] 2E82; [E0 04 BC, 05, 09] 3288; [E0 04 C0, 05, 0D] @@ -22161,6 +27152,7 @@ F9A8; [E0 05 D4, 05, 05] 32AD; [E0 06 14, 05, 0D] 32A1; [E0 06 34, 05, 0D] D87E DC04; [E0 06 D2, 05, 05] +FA73; [E0 07 18, 05, 05] F92D; [E0 07 24, 05, 05] F9B5; [E0 07 2E, 05, 05] D87E DC05; [E0 07 74, 05, 05] @@ -22178,20 +27170,23 @@ FA31; [E0 09 F2, 05, 05] 329D; [E0 0A 7E, 05, 0D] 2F09; [E0 0A A8, 05, 09] FA0C; [E0 0A AA, 05, 05] +FA74; [E0 0A B4, 05, 05] D87E DC0E; [E0 0A C4, 05, 05] FA32; [E0 0A C4, 05, 05] D87E DC0F; [E0 0A D2, 05, 05] D87E DC10; [E0 0A F2, 05, 05] 2F0A; [E0 0A F4, 05, 09] D87E DC14; [E0 0A F8, 05, 05] +FA72; [E0 0A FA, 05, 05] F978; [E0 0A FC, 05, 05] 2F0B; [E0 0B 06, 05, 09] 3287; [E0 0B 06, 05, 0D] F9D1; [E0 0B 0A, 05, 05] 3285; [E0 0B 0A, 05, 0D] D87E DC11; [E0 0B 1E, 05, 05] +FA75; [E0 0B 30, 05, 05] 2F0C; [E0 0B 34, 05, 09] -2E86; [E0 0B 34, 05, 09][, E0 8D, 3D] +2E86; [E0 0B 34, 05, 09][, E4 4D, 3D] D87E DC15; [E0 0B 4A, 05, 05] D87E DCD2; [E0 0B 54, 05, 05] D87E DCD3; [E0 0B 5A, 05, 05] @@ -22202,17 +27197,18 @@ D87E DC18; [E0 0B 78, 05, 05] 2F0E; [E0 0B 86, 05, 09] D87E DC1A; [E0 0B 88, 05, 05] D87E DC1B; [E0 0B 9A, 05, 05] +FA71; [E0 0B 9A, 05, 05] F92E; [E0 0B 9E, 05, 05] F979; [E0 0B C2, 05, 05] F955; [E0 0B C8, 05, 05] F954; [E0 0B E8, 05, 05] FA15; [E0 0B EC, 05, 05] 2F0F; [E0 0B F0, 05, 09] -2E87; [E0 0B F0, 05, 09][, E0 8D, 3D] +2E87; [E0 0B F0, 05, 09][, E4 4D, 3D] D87E DC1D; [E0 0C 20, 05, 05] 2F10; [E0 0C 20, 05, 09] 2F11; [E0 0C 36, 05, 09] -2E88; [E0 0C 36, 05, 09][, E0 8D, 3D] +2E88; [E0 0C 36, 05, 09][, E4 4D, 3D] 2E89; [E0 0C 3A, 05, 09] D87E DC1E; [E0 0C 3C, 05, 05] D87E DC50; [E0 0C 44, 05, 05] @@ -22231,6 +27227,7 @@ F99D; [E0 0D 82, 05, 05] D87E DD92; [E0 0D A2, 05, 05] 3298; [E0 0D A4, 05, 0D] D87E DC25; [E0 0D CA, 05, 05] +FA76; [E0 0D CA, 05, 05] D87E DC26; [E0 0D CE, 05, 05] FA33; [E0 0D CE, 05, 05] F952; [E0 0D E0, 05, 05] @@ -22240,6 +27237,7 @@ FA34; [E0 0E 0A, 05, 05] F97F; [E0 0E 2C, 05, 05] 2F13; [E0 0E 34, 05, 09] D87E DC28; [E0 0E 36, 05, 05] +FA77; [E0 0E 36, 05, 05] D87E DC29; [E0 0E 4C, 05, 05] D87E DC2A; [E0 0E 4E, 05, 05] 2F14; [E0 0E 6C, 05, 09] @@ -22260,9 +27258,9 @@ FA35; [E0 0E E4, 05, 05] 32AF; [E0 0E EA, 05, 0D] D87E DC2E; [E0 0E F6, 05, 05] 2F18; [E0 0E FA, 05, 09] -2E8A; [E0 0E FA, 05, 09][, E0 8D, 3D] +2E8A; [E0 0E FA, 05, 09][, E4 4D, 3D] 2F19; [E0 0F 1A, 05, 09] -2E8B; [E0 0F 1A, 05, 09][, E0 8D, 3D] +2E8B; [E0 0F 1A, 05, 09][, E4 4D, 3D] 329E; [E0 0F 28, 05, 0D] D87E DC2F; [E0 0F 2E, 05, 05] F91C; [E0 0F 32, 05, 05] @@ -22271,7 +27269,7 @@ D87E DC31; [E0 0F 46, 05, 05] D87E DC32; [E0 0F 46, 05, 05] D87E DC33; [E0 0F 46, 05, 05] 2F1A; [E0 0F 4C, 05, 09] -2E81; [E0 0F 4C, 05, 09][, E0 8D, 3D] +2E81; [E0 0F 4C, 05, 09][, E4 4D, 3D] 2F1B; [E0 0F B4, 05, 09] F96B; [E0 0F CE, 05, 05] 2F1C; [E0 0F D8, 05, 09] @@ -22296,16 +27294,20 @@ F99E; [E0 11 CE, 05, 05] D87E DC41; [E0 12 46, 05, 05] D87E DC42; [E0 12 7A, 05, 05] D87E DC43; [E0 13 06, 05, 05] +FA79; [E0 13 0A, 05, 05] D87E DC44; [E0 13 26, 05, 05] D87E DC45; [E0 13 68, 05, 05] D87E DC46; [E0 13 68, 05, 05] F90B; [E0 13 6E, 05, 05] D87E DC47; [E0 13 92, 05, 05] +FA7A; [E0 13 92, 05, 05] FA36; [E0 13 9A, 05, 05] +FA78; [E0 13 9A, 05, 05] D87E DC48; [E0 13 B6, 05, 05] D87E DC49; [E0 13 C6, 05, 05] FA0D; [E0 13 E0, 05, 05] D87E DC4A; [E0 13 E4, 05, 05] +FA7B; [E0 14 2A, 05, 05] D87E DC4C; [E0 14 72, 05, 05] FA37; [E0 14 72, 05, 05] D87E DC4E; [E0 15 0E, 05, 05] @@ -22328,9 +27330,11 @@ D87E DC57; [E0 18 E0, 05, 05] D87E DC56; [E0 18 E2, 05, 05] FA39; [E0 19 04, 05, 05] FA10; [E0 19 38, 05, 05] +FA7C; [E0 19 38, 05, 05] F96C; [E0 19 40, 05, 05] FA3A; [E0 19 D4, 05, 05] D87E DC58; [E0 19 DC, 05, 05] +FA7D; [E0 19 EA, 05, 05] F94A; [E0 1A 3A, 05, 05] F942; [E0 1A 48, 05, 05] 2F20; [E0 1A 60, 05, 09] @@ -22347,8 +27351,10 @@ D87E DC5E; [E0 1A CE, 05, 05] 2F24; [E0 1A D8, 05, 09] 337D; [E0 1A D8, 05, 37][E0 40 34, 05, 3D] 319D; [E0 1A DC, 05, 27] +FA7E; [E0 1B 18, 05, 05] F90C; [E0 1B 20, 05, 05] F909; [E0 1B 32, 05, 05] +FA7F; [E0 1B 38, 05, 05] D87E DC5F; [E0 1B 54, 05, 05] F981; [E0 1B 76, 05, 05] 2F25; [E0 1B 76, 05, 09] @@ -22357,9 +27363,11 @@ D87E DC65; [E0 1C 46, 05, 05] D87E DC62; [E0 1C 6E, 05, 05] D87E DC63; [E0 1C CC, 05, 05] D87E DC64; [E0 1C E4, 05, 05] +FA80; [E0 1D 60, 05, 05] D87E DC66; [E0 1D 68, 05, 05] D87E DD86; [E0 1E 0C, 05, 05] D87E DC69; [E0 1E B2, 05, 05] +FA81; [E0 1E F2, 05, 05] D87E DC6A; [E0 1F 24, 05, 05] D87E DC6B; [E0 1F 24, 05, 05] 2F26; [E0 1F 48, 05, 09] @@ -22378,14 +27386,14 @@ D87E DC70; [E0 20 94, 05, 05] D87E DC72; [E0 20 AC, 05, 05] D87E DC73; [E0 20 BA, 05, 05] 2F29; [E0 20 CC, 05, 09] -2E8C; [E0 20 CC, 05, 09][, E0 8D, 3D] -2E8D; [E0 20 CC, 05, 09][, E0 9D, 3D] +2E8C; [E0 20 CC, 05, 09][, E4 4D, 3D] +2E8D; [E0 20 CC, 05, 09][, E4 5D, 3D] D87E DC75; [E0 20 F2, 05, 05] 2E90; [E0 20 F2, 05, 09] 2F2A; [E0 20 F2, 05, 09] -2E8E; [E0 20 F2, 05, 09][, E0 8D, 3D] +2E8E; [E0 20 F2, 05, 09][, E4 4D, 3D] 2E8F; [E0 20 F4, 05, 09] -2E91; [E0 20 F4, 05, 09][, E0 8D, 3D] +2E91; [E0 20 F4, 05, 09][, E4 4D, 3D] 2F2B; [E0 21 24, 05, 09] F9BD; [E0 21 32, 05, 05] D87E DC77; [E0 21 74, 05, 05] @@ -22431,7 +27439,9 @@ D87E DC8D; [E0 26 3E, 05, 05] F9A2; [E0 26 64, 05, 05] D87E DC8E; [E0 26 66, 05, 05] F928; [E0 26 66, 05, 05] +FA82; [E0 26 76, 05, 05] FA0B; [E0 26 78, 05, 05] +FA83; [E0 26 84, 05, 05] F982; [E0 26 AA, 05, 05] 2F35; [E0 26 BA, 05, 09] D87E DC90; [E0 26 CE, 05, 05] @@ -22442,18 +27452,20 @@ F943; [E0 26 DA, 05, 05] D87E DC94; [E0 27 1C, 05, 05] D87E DC95; [E0 27 1C, 05, 05] 2F39; [E0 27 78, 05, 09] -2E95; [E0 27 78, 05, 09][, E0 8D, 3D] +2E95; [E0 27 78, 05, 09][, E4 4D, 3D] 2E94; [E0 27 7A, 05, 09] D87E DC74; [E0 27 7E, 05, 05] 2F3A; [E0 27 9A, 05, 09] D87E DC99; [E0 27 9C, 05, 05] +FA84; [E0 27 AA, 05, 05] D87E DC9A; [E0 27 AE, 05, 05] 2F3B; [E0 27 BE, 05, 09] F9D8; [E0 27 EE, 05, 05] D87E DC9C; [E0 28 12, 05, 05] F966; [E0 28 30, 05, 05] +FA85; [E0 28 38, 05, 05] 2F3C; [E0 28 64, 05, 09] -2E97; [E0 28 64, 05, 09][, E0 8D, 3D] +2E97; [E0 28 64, 05, 09][, E4 4D, 3D] 2E96; [E0 28 66, 05, 09] D87E DC9D; [E0 28 78, 05, 05] D87E DC9E; [E0 28 8C, 05, 05] @@ -22465,16 +27477,21 @@ D87E DCA0; [E0 29 E6, 05, 05] D87E DCA3; [E0 2A 12, 05, 05] FA3D; [E0 2A 12, 05, 05] D87E DCA5; [E0 2A 78, 05, 05] +FA86; [E0 2A 9A, 05, 05] F9B9; [E0 2A AC, 05, 05] +FA88; [E0 2A FA, 05, 05] F9D9; [E0 2B 78, 05, 05] D87E DCA6; [E0 2B 80, 05, 05] D87E DCA7; [E0 2B 88, 05, 05] D87E DCA9; [E0 2B 88, 05, 05] D87E DCA8; [E0 2B 8C, 05, 05] +FA87; [E0 2B 8C, 05, 05] +FA8A; [E0 2B B0, 05, 05] FA3E; [E0 2B C0, 05, 05] D87E DCAA; [E0 2B E4, 05, 05] D87E DCAB; [E0 2C 12, 05, 05] FA3F; [E0 2C 12, 05, 05] +FA89; [E0 2C 12, 05, 05] F98F; [E0 2C 16, 05, 05] D87E DCAD; [E0 2C 3E, 05, 05] D87E DCAE; [E0 2C 54, 05, 05] @@ -22482,6 +27499,7 @@ D87E DCAC; [E0 2C 5A, 05, 05] D87E DCAF; [E0 2C B2, 05, 05] D87E DCB0; [E0 2C DA, 05, 05] FA40; [E0 2C DA, 05, 05] +FA8B; [E0 2C DA, 05, 05] D87E DCB1; [E0 2C E2, 05, 05] F90D; [E0 2C E2, 05, 05] F990; [E0 2C F6, 05, 05] @@ -22489,6 +27507,7 @@ F990; [E0 2C F6, 05, 05] D87E DCB2; [E0 2D 1C, 05, 05] D87E DCB3; [E0 2D 32, 05, 05] F9D2; [E0 2D 58, 05, 05] +FA8C; [E0 2D 64, 05, 05] 2F3E; [E0 2D 68, 05, 09] 2F3F; [E0 2D 92, 05, 09] 2E98; [E0 2D 94, 05, 09] @@ -22507,9 +27526,12 @@ F9A4; [E0 30 04, 05, 05] D87E DCBC; [E0 30 14, 05, 05] F975; [E0 30 4E, 05, 05] D87E DCC1; [E0 30 60, 05, 05] +FA8D; [E0 30 96, 05, 05] D87E DCC0; [E0 30 98, 05, 05] D87E DCBD; [E0 30 D6, 05, 05] +FA8E; [E0 31 4C, 05, 05] D87E DCBF; [E0 31 58, 05, 05] +FA8F; [E0 31 B8, 05, 05] D87E DCC3; [E0 31 E6, 05, 05] D87E DCC6; [E0 32 08, 05, 05] D87E DCC4; [E0 32 16, 05, 05] @@ -22521,6 +27543,7 @@ F930; [E0 32 A2, 05, 05] 2E99; [E0 33 8A, 05, 09] D87E DCC8; [E0 33 BE, 05, 05] FA41; [E0 33 BE, 05, 05] +FA90; [E0 33 CC, 05, 05] D87E DCC9; [E0 33 F8, 05, 05] F969; [E0 34 16, 05, 05] 2F42; [E0 34 34, 05, 09] @@ -22535,12 +27558,13 @@ FA42; [E0 34 EA, 05, 05] D87E DCCB; [E0 34 EC, 05, 05] 2F47; [E0 34 F0, 05, 09] 3290; [E0 34 F0, 05, 0D] -2E9C; [E0 34 F0, 05, 09][, E0 8D, 3D] +2E9C; [E0 34 F0, 05, 09][, E4 4D, 3D] 337E; [E0 35 48, 05, 37][E0 42 F0, 05, 3D] F9E0; [E0 35 52, 05, 05] 337C; [E0 35 86, 05, 37][E0 11 6C, 05, 3D] D87E DCCD; [E0 35 BE, 05, 05] FA12; [E0 36 1A, 05, 05] +FA91; [E0 36 1A, 05, 05] F9C5; [E0 36 42, 05, 05] D87E DCCF; [E0 36 54, 05, 05] FA43; [E0 36 54, 05, 05] @@ -22553,16 +27577,19 @@ D87E DCCC; [E0 37 28, 05, 05] D87E DCD4; [E0 37 38, 05, 05] 2F49; [E0 37 48, 05, 09] 328A; [E0 37 48, 05, 0D] -2E9D; [E0 37 48, 05, 09][, E0 8D, 3D] +2E9D; [E0 37 48, 05, 09][, E4 4D, 3D] 3292; [E0 37 4A, 05, 0D] D87E DCD8; [E0 37 66, 05, 05] F929; [E0 37 66, 05, 05] +FA92; [E0 37 66, 05, 05] D87E DCD9; [E0 37 6E, 05, 05] +FA93; [E0 37 6E, 05, 05] D87E DCDA; [E0 37 7A, 05, 05] 2F4A; [E0 37 88, 05, 09] 328D; [E0 37 88, 05, 0D] F9E1; [E0 37 D4, 05, 05] D87E DCDC; [E0 37 DE, 05, 05] +FA94; [E0 37 E4, 05, 05] D87E DCDB; [E0 37 F4, 05, 05] F9C8; [E0 38 34, 05, 05] D87E DCE0; [E0 38 48, 05, 05] @@ -22598,13 +27625,15 @@ D87E DCF1; [E0 40 16, 05, 05] 32A3; [E0 40 34, 05, 0D] D87E DCF3; [E0 40 52, 05, 05] F98C; [E0 40 5C, 05, 05] +FA95; [E0 40 60, 05, 05] 2F4D; [E0 40 60, 05, 09] -2E9E; [E0 40 62, 05, 09][, E0 8D, 3D] +2E9E; [E0 40 62, 05, 09][, E4 4D, 3D] D87E DCF4; [E0 40 AC, 05, 05] F9A5; [E0 40 CA, 05, 05] 2F4E; [E0 40 D4, 05, 09] D87E DCF5; [E0 40 E2, 05, 05] F970; [E0 40 E2, 05, 05] +FA96; [E0 40 E2, 05, 05] D87E DCF6; [E0 40 E4, 05, 05] 2F4F; [E0 41 0A, 05, 09] 2E9F; [E0 41 0E, 05, 09] @@ -22632,6 +27661,7 @@ D87E DD07; [E0 43 E8, 05, 05] D87E DD00; [E0 43 FC, 05, 05] D87E DD02; [E0 44 08, 05, 05] F9CA; [E0 44 08, 05, 05] +FA97; [E0 44 08, 05, 05] D87E DD03; [E0 44 58, 05, 05] F92A; [E0 44 5A, 05, 05] D87E DD01; [E0 44 74, 05, 05] @@ -22649,9 +27679,12 @@ F9CB; [E0 46 CA, 05, 05] F9EC; [E0 47 0C, 05, 05] D87E DD0C; [E0 47 26, 05, 05] D87E DD0B; [E0 47 2E, 05, 05] +FA99; [E0 47 2E, 05, 05] F904; [E0 47 3A, 05, 05] +FA98; [E0 47 4E, 05, 05] F94E; [E0 47 B6, 05, 05] FA47; [E0 47 DC, 05, 05] +FA9A; [E0 47 DC, 05, 05] F992; [E0 47 DE, 05, 05] D87E DD0F; [E0 48 7A, 05, 05] D87E DD12; [E0 49 30, 05, 05] @@ -22659,6 +27692,7 @@ F922; [E0 49 7A, 05, 05] F984; [E0 49 A0, 05, 05] D87E DD15; [E0 49 DA, 05, 05] D87E DD14; [E0 49 E0, 05, 05] +FA9B; [E0 49 E0, 05, 05] D87E DD13; [E0 4A 1C, 05, 05] D87E DD17; [E0 4A 3E, 05, 05] 2F55; [E0 4A 80, 05, 09] @@ -22674,6 +27708,7 @@ F916; [E0 4B 62, 05, 05] D87E DD1C; [E0 4C 40, 05, 05] F993; [E0 4C 48, 05, 05] FA48; [E0 4C 92, 05, 05] +FA9C; [E0 4C 92, 05, 05] D87E DD1E; [E0 4C EE, 05, 05] F9C0; [E0 4D 58, 05, 05] F9EE; [E0 4D 5C, 05, 05] @@ -22683,8 +27718,9 @@ D87E DD20; [E0 4E 12, 05, 05] 2F56; [E0 4E 16, 05, 09] FA49; [E0 4E 18, 05, 05] 2EA4; [E0 4E 18, 05, 09] -2EA5; [E0 4E 18, 05, 09][, E0 8D, 3D] +2EA5; [E0 4E 18, 05, 09][, E4 4D, 3D] D87E DD21; [E0 4E 2C, 05, 05] +FA9E; [E0 4E 2C, 05, 05] 2F57; [E0 4E 2E, 05, 09] 2F58; [E0 4E 38, 05, 09] 2F59; [E0 4E 40, 05, 09] @@ -22692,16 +27728,18 @@ D87E DD21; [E0 4E 2C, 05, 05] D87E DD22; [E0 4E 62, 05, 05] 2F5B; [E0 4E 74, 05, 09] 2F5C; [E0 4E 78, 05, 09] -2EA7; [E0 4E 78, 05, 09][, E0 8D, 3D] +2EA7; [E0 4E 78, 05, 09][, E4 4D, 3D] F946; [E0 4E 86, 05, 05] 3295; [E0 4E B4, 05, 0D] D87E DD24; [E0 4E C2, 05, 05] D87E DD25; [E0 4E EC, 05, 05] 2F5D; [E0 4F 20, 05, 09] 2EA8; [E0 4F 22, 05, 09] +FA9F; [E0 4F 26, 05, 05] F9FA; [E0 4F 48, 05, 05] F92B; [E0 4F C0, 05, 05] FA16; [E0 50 22, 05, 05] +FAA0; [E0 50 22, 05, 05] F9A7; [E0 50 B8, 05, 05] D87E DD28; [E0 50 C2, 05, 05] 2F5E; [E0 50 D6, 05, 09] @@ -22709,7 +27747,7 @@ F961; [E0 50 DC, 05, 05] F9DB; [E0 50 DC, 05, 05] 2F5F; [E0 50 E0, 05, 09] D87E DD29; [E0 50 E4, 05, 05] -2EA9; [E0 50 E4, 05, 09][, E0 8D, 3D] +2EA9; [E0 50 E4, 05, 09][, E4 4D, 3D] D87E DD2B; [E0 51 1E, 05, 05] F9AD; [E0 51 38, 05, 05] F917; [E0 51 90, 05, 05] @@ -22720,12 +27758,14 @@ D87E DD2E; [E0 52 68, 05, 05] D87E DD2F; [E0 52 92, 05, 05] F9AE; [E0 52 AC, 05, 05] D87E DD30; [E0 52 BC, 05, 05] +FAA1; [E0 52 BC, 05, 05] D87E DD31; [E0 52 E4, 05, 05] F994; [E0 52 EC, 05, 05] F9EF; [E0 53 10, 05, 05] D87E DD32; [E0 53 74, 05, 05] 2F60; [E0 53 98, 05, 09] 2F61; [E0 53 AC, 05, 09] +FAA2; [E0 53 EC, 05, 05] 2F62; [E0 54 16, 05, 09] 2F63; [E0 54 24, 05, 09] D87E DD34; [E0 54 2E, 05, 05] @@ -22733,16 +27773,19 @@ D87E DD34; [E0 54 2E, 05, 05] 2F65; [E0 54 46, 05, 09] 3199; [E0 54 4A, 05, 27] 329A; [E0 54 54, 05, 0D] +FAA3; [E0 54 5C, 05, 05] D87E DD36; [E0 54 62, 05, 05] F9CD; [E0 54 98, 05, 05] F976; [E0 54 B0, 05, 05] D87E DD38; [E0 54 C6, 05, 05] F962; [E0 54 C6, 05, 05] 2F66; [E0 54 FC, 05, 09] -2EAA; [E0 54 FC, 05, 09][, E0 8D, 3D] +2EAA; [E0 54 FC, 05, 09][, E4 4D, 3D] 2F67; [E0 55 10, 05, 09] F9E5; [E0 55 B0, 05, 05] D87E DD3A; [E0 56 12, 05, 05] +FAA4; [E0 56 2C, 05, 05] +FAA5; [E0 56 30, 05, 05] F9C1; [E0 56 76, 05, 05] F90E; [E0 56 C4, 05, 05] 2F68; [E0 56 DE, 05, 09] @@ -22750,17 +27793,23 @@ F90E; [E0 56 C4, 05, 05] 2F6A; [E0 57 54, 05, 09] 2F6B; [E0 57 76, 05, 09] FA17; [E0 57 8C, 05, 05] +FAA6; [E0 57 8C, 05, 05] +FAA7; [E0 57 AE, 05, 05] 32AC; [E0 57 BE, 05, 0D] F933; [E0 57 C6, 05, 05] 2F6C; [E0 57 D4, 05, 09] -2EAB; [E0 57 D4, 05, 09][, E0 8D, 3D] +2EAB; [E0 57 D4, 05, 09][, E4 4D, 3D] D87E DD40; [E0 57 E0, 05, 05] +FAA8; [E0 57 E0, 05, 05] F96D; [E0 57 FA, 05, 05] D87E DD45; [E0 58 3A, 05, 05] D87E DD46; [E0 58 3C, 05, 05] D87E DD47; [E0 58 3C, 05, 05] +FAAA; [E0 58 7E, 05, 05] D87E DD48; [E0 58 92, 05, 05] +FAA9; [E0 58 92, 05, 05] D87E DD4A; [E0 59 1A, 05, 05] +FA9D; [E0 59 52, 05, 05] 2F6D; [E0 59 BA, 05, 09] 2F6E; [E0 59 C8, 05, 09] 2F6F; [E0 59 EA, 05, 09] @@ -22771,10 +27820,11 @@ F93B; [E0 5B 28, 05, 05] FA4B; [E0 5B 32, 05, 05] F947; [E0 5B A4, 05, 05] D87E DD50; [E0 5B A8, 05, 05] +FAAB; [E0 5B A8, 05, 05] F964; [E0 5C 0C, 05, 05] F985; [E0 5C 6A, 05, 05] 2F70; [E0 5C 8A, 05, 09] -2EAC; [E0 5C 8A, 05, 09][, E0 8D, 3D] +2EAC; [E0 5C 8A, 05, 09][, E4 4D, 3D] 2EAD; [E0 5C 8C, 05, 09] FA18; [E0 5C 8E, 05, 05] FA4C; [E0 5C 92, 05, 05] @@ -22806,18 +27856,21 @@ D87E DD5A; [E0 5E B6, 05, 05] D87E DD5B; [E0 5E C0, 05, 05] 2F73; [E0 5F 10, 05, 09] FA55; [E0 5F 2A, 05, 05] +FAAC; [E0 5F 8A, 05, 05] F9F7; [E0 5F BE, 05, 05] 2F74; [E0 5F BE, 05, 09] D87E DD5F; [E0 60 0A, 05, 05] 2F75; [E0 60 20, 05, 09] -2EAE; [E0 60 20, 05, 09][, E0 8D, 3D] +2EAE; [E0 60 20, 05, 09][, E4 4D, 3D] F9F8; [E0 60 6E, 05, 05] FA56; [E0 61 B4, 05, 05] +FAAD; [E0 61 B4, 05, 05] D87E DD62; [E0 61 C0, 05, 05] D87E DD63; [E0 61 C6, 05, 05] F9A6; [E0 62 B6, 05, 05] F944; [E0 62 FA, 05, 05] 2F76; [E0 63 26, 05, 09] +FAAE; [E0 63 36, 05, 05] F9F9; [E0 63 64, 05, 05] FA1D; [E0 63 BC, 05, 05] D87E DD66; [E0 63 E4, 05, 05] @@ -22831,12 +27884,14 @@ D87E DD6A; [E0 64 46, 05, 05] F9CF; [E0 64 66, 05, 05] F96A; [E0 64 8A, 05, 05] F94F; [E0 64 A4, 05, 05] +FAAF; [E0 64 FC, 05, 05] D87E DD6C; [E0 65 12, 05, 05] F93D; [E0 65 8C, 05, 05] F957; [E0 65 C8, 05, 05] D87E DD6E; [E0 65 DA, 05, 05] F996; [E0 66 3A, 05, 05] FA57; [E0 66 3A, 05, 05] +FAB0; [E0 66 3A, 05, 05] D87E DD6F; [E0 66 56, 05, 05] FA58; [E0 66 64, 05, 05] F950; [E0 66 C0, 05, 05] @@ -22844,19 +27899,20 @@ FA59; [E0 66 D4, 05, 05] D87E DD70; [E0 66 DC, 05, 05] 2EB0; [E0 67 96, 05, 09] 2F78; [E0 68 CA, 05, 09] +FAB1; [E0 68 DA, 05, 05] 2F79; [E0 69 06, 05, 09] 2EB2; [E0 69 08, 05, 09] -2EB5; [E0 69 08, 05, 09][, E0 8D, 3D] +2EB5; [E0 69 08, 05, 09][, E4 4D, 3D] 2EB1; [E0 69 0A, 05, 09] -2EB3; [E0 69 0A, 05, 09][, E0 8D, 3D] -2EB4; [E0 69 0A, 05, 09][, E0 9D, 3D] +2EB3; [E0 69 0A, 05, 09][, E4 4D, 3D] +2EB4; [E0 69 0A, 05, 09][, E4 5D, 3D] FA5A; [E0 69 48, 05, 05] F9E6; [E0 69 56, 05, 05] D87E DD76; [E0 69 58, 05, 05] F90F; [E0 69 6E, 05, 05] 2F7A; [E0 69 78, 05, 09] -2EB6; [E0 69 78, 05, 09][, E0 8D, 3D] -2EB7; [E0 69 78, 05, 09][, E0 9D, 3D] +2EB6; [E0 69 78, 05, 09][, E4 4D, 3D] +2EB7; [E0 69 78, 05, 09][, E4 5D, 3D] 2EB8; [E0 69 7A, 05, 09] D87E DD78; [E0 69 8E, 05, 05] F9AF; [E0 69 98, 05, 05] @@ -22869,6 +27925,7 @@ F934; [E0 6A 6C, 05, 05] 2EB9; [E0 6A 6E, 05, 09] D87E DD7A; [E0 6A 74, 05, 05] FA5B; [E0 6A 74, 05, 05] +FAB2; [E0 6A 74, 05, 05] 2F7D; [E0 6A 82, 05, 09] 2F7E; [E0 6A 8E, 05, 09] 2F7F; [E0 6A D0, 05, 09] @@ -22878,10 +27935,10 @@ F997; [E0 6B 4E, 05, 05] D87E DD7F; [E0 6B 50, 05, 05] F945; [E0 6B 6C, 05, 05] 2F80; [E0 6B 6E, 05, 09] -2EBB; [E0 6B 6E, 05, 09][, E0 8D, 3D] +2EBB; [E0 6B 6E, 05, 09][, E4 4D, 3D] 2EBA; [E0 6B 70, 05, 09] 2F81; [E0 6B 82, 05, 09] -2EBC; [E0 6B 82, 05, 09][, E0 8D, 3D] +2EBC; [E0 6B 82, 05, 09][, E4 4D, 3D] F953; [E0 6B 86, 05, 05] D87E DCD6; [E0 6B CA, 05, 05] D87E DD82; [E0 6B D4, 05, 05] @@ -22894,7 +27951,7 @@ F9F6; [E0 6E 52, 05, 05] FA5C; [E0 6E 5C, 05, 05] 2F84; [E0 6E 68, 05, 09] 2F85; [E0 6E 7A, 05, 09] -2EBD; [E0 6E 7A, 05, 09][, E0 8D, 3D] +2EBD; [E0 6E 7A, 05, 09][, E4 4D, 3D] D87E DC93; [E0 6E 84, 05, 05] D87E DD8B; [E0 6E 84, 05, 05] D87E DD8C; [E0 6E 8A, 05, 05] @@ -22908,8 +27965,8 @@ F97C; [E0 6F 66, 05, 05] FA5D; [E0 6F 7A, 05, 05] FA5E; [E0 6F 7A, 05, 05] 2EBE; [E0 6F 7A, 05, 09] -2EBF; [E0 6F 7A, 05, 09][, E0 8D, 3D] -2EC0; [E0 6F 7A, 05, 09][, E0 9D, 3D] +2EBF; [E0 6F 7A, 05, 09][, E4 4D, 3D] +2EC0; [E0 6F 7A, 05, 09][, E4 5D, 3D] D87E DD90; [E0 6F 9E, 05, 05] D87E DD8F; [E0 6F AA, 05, 05] D87E DD91; [E0 6F C2, 05, 05] @@ -22922,6 +27979,7 @@ D87E DD96; [E0 70 5A, 05, 05] D87E DD99; [E0 70 C8, 05, 05] D87E DD9C; [E0 70 D4, 05, 05] F9FE; [E0 70 FA, 05, 05] +FAB3; [E0 71 38, 05, 05] D87E DDA0; [E0 71 3A, 05, 05] D87E DD9A; [E0 71 5A, 05, 05] D87E DD9B; [E0 71 EE, 05, 05] @@ -22931,6 +27989,7 @@ D87E DDA1; [E0 72 2E, 05, 05] D87E DDA2; [E0 72 32, 05, 05] D87E DDA3; [E0 72 52, 05, 05] D87E DD9E; [E0 72 68, 05, 05] +FAB4; [E0 72 78, 05, 05] F958; [E0 72 7C, 05, 05] F918; [E0 73 1A, 05, 05] F96E; [E0 73 32, 05, 05] @@ -22963,6 +28022,7 @@ D87E DDB9; [E0 78 DA, 05, 05] D87E DDBC; [E0 79 14, 05, 05] D87E DDBD; [E0 79 9A, 05, 05] D87E DDBB; [E0 79 B6, 05, 05] +FAB5; [E0 79 B6, 05, 05] D87E DDBE; [E0 79 D0, 05, 05] F911; [E0 7A 3E, 05, 05] D87E DDC0; [E0 7A 8C, 05, 05] @@ -22983,31 +28043,42 @@ F9E8; [E0 7C 98, 05, 05] F912; [E0 7C C6, 05, 05] D87E DDC9; [E0 7C CA, 05, 05] FA60; [E0 7C F6, 05, 05] +FAB6; [E0 7D 5E, 05, 05] F924; [E0 7D A4, 05, 05] 2F91; [E0 7D D8, 05, 09] 2EC4; [E0 7D DA, 05, 09] 2EC3; [E0 7D DC, 05, 09] +FAB7; [E0 7D E8, 05, 05] FA0A; [E0 7D F2, 05, 05] 2F92; [E0 7D F2, 05, 09] FA61; [E0 7E 0E, 05, 05] +FAB8; [E0 7E 0E, 05, 05] 2EC5; [E0 7E 64, 05, 09] 2EC6; [E0 7E 86, 05, 09] 2F93; [E0 7E 86, 05, 09] -2EC7; [E0 7E 86, 05, 09][, E0 8D, 3D] +2EC7; [E0 7E 86, 05, 09][, E4 4D, 3D] 2F94; [E0 7E E2, 05, 09] D87E DDCF; [E0 80 2E, 05, 05] F96F; [E0 80 42, 05, 05] F9A1; [E0 80 42, 05, 05] +FAB9; [E0 80 6C, 05, 05] +FABB; [E0 80 84, 05, 05] F97D; [E0 80 92, 05, 05] F941; [E0 80 9A, 05, 05] D87E DDD0; [E0 80 C8, 05, 05] +FABE; [E0 80 C8, 05, 05] FA22; [E0 80 DE, 05, 05] +FABA; [E0 80 DE, 05, 05] F95D; [E0 80 EA, 05, 05] +FABD; [E0 80 EA, 05, 05] FA62; [E0 80 F0, 05, 05] +FABC; [E0 80 F0, 05, 05] FA63; [E0 81 66, 05, 05] +FABF; [E0 81 66, 05, 05] F9FC; [E0 81 A4, 05, 05] F95A; [E0 81 F4, 05, 05] D87E DDD1; [E0 82 0E, 05, 05] +FAC0; [E0 82 0E, 05, 05] 2EC8; [E0 82 3A, 05, 09] 2F95; [E0 83 6E, 05, 09] 2F96; [E0 83 8C, 05, 09] @@ -23024,13 +28095,14 @@ F948; [E0 84 8A, 05, 05] F903; [E0 84 96, 05, 05] FA64; [E0 84 AC, 05, 05] FA65; [E0 85 1C, 05, 05] +FAC1; [E0 85 1C, 05, 05] D87E DDD6; [E0 85 42, 05, 05] 2EC9; [E0 85 46, 05, 09] 2F9A; [E0 85 D4, 05, 09] 2F9B; [E0 85 EC, 05, 09] D87E DDD7; [E0 85 FA, 05, 05] 2F9C; [E0 86 78, 05, 09] -2ECA; [E0 86 78, 05, 09][, E0 8D, 3D] +2ECA; [E0 86 78, 05, 09][, E4 4D, 3D] D87E DDDB; [E0 86 8A, 05, 05] D87E DDDA; [E0 86 A8, 05, 05] F937; [E0 86 F0, 05, 05] @@ -23042,6 +28114,7 @@ D87E DDDE; [E0 88 C6, 05, 05] F998; [E0 89 70, 05, 05] F9D7; [E0 89 78, 05, 05] D87E DDDF; [E0 89 94, 05, 05] +FAC2; [E0 89 94, 05, 05] FA07; [E0 89 9A, 05, 05] F98D; [E0 89 E8, 05, 05] 2ECB; [E0 89 F0, 05, 09] @@ -23052,16 +28125,17 @@ F971; [E0 8A 8A, 05, 05] 2FA1; [E0 8A 94, 05, 09] FA66; [E0 8A 96, 05, 05] 2ECC; [E0 8A 96, 05, 09] -2ECD; [E0 8A 96, 05, 09][, E0 8D, 3D] -2ECE; [E0 8A 96, 05, 09][, E0 9D, 3D] +2ECD; [E0 8A 96, 05, 09][, E4 4D, 3D] +2ECE; [E0 8A 96, 05, 09][, E4 5D, 3D] F99A; [E0 8B 76, 05, 05] FA25; [E0 8B A0, 05, 05] FA67; [E0 8B A0, 05, 05] 329C; [E0 8C 08, 05, 0D] +FAC3; [E0 8C 1A, 05, 05] F9C3; [E0 8C 2E, 05, 05] F913; [E0 8C 54, 05, 05] 2FA2; [E0 8C 58, 05, 09] -2ECF; [E0 8C 58, 05, 09][, E0 8D, 3D] +2ECF; [E0 8C 58, 05, 09][, E4 4D, 3D] D87E DDE2; [E0 8C 5E, 05, 05] F92C; [E0 8C D2, 05, 05] D87E DDE3; [E0 8D 1E, 05, 05] @@ -23070,6 +28144,7 @@ D87E DDE4; [E0 8D 5E, 05, 05] D87E DDE6; [E0 8D 72, 05, 05] 2FA3; [E0 8D CE, 05, 09] F919; [E0 8E 16, 05, 05] +FAC4; [E0 8E 74, 05, 05] F9B7; [E0 8E AA, 05, 05] 2FA4; [E0 8E CE, 05, 09] F9E9; [E0 8E DA, 05, 05] @@ -23080,6 +28155,7 @@ F90A; [E0 8E E4, 05, 05] 328E; [E0 8E E4, 05, 0D] F9B1; [E0 8F B0, 05, 05] D87E DDE7; [E0 8F B8, 05, 05] +FAC5; [E0 90 3A, 05, 05] D87E DDEA; [E0 90 46, 05, 05] D87E DDE8; [E0 90 FC, 05, 05] D87E DDE9; [E0 91 04, 05, 05] @@ -23098,13 +28174,14 @@ F986; [E0 96 CC, 05, 05] D87E DDF0; [E0 96 E0, 05, 05] 2ED4; [E0 97 48, 05, 09] 2FA9; [E0 97 B0, 05, 09] -2ED5; [E0 97 B0, 05, 09][, E0 8D, 3D] +2ED5; [E0 97 B0, 05, 09][, E4 4D, 3D] 2ED6; [E0 97 B2, 05, 09] F9C6; [E0 97 D4, 05, 05] F951; [E0 98 14, 05, 05] FA09; [E0 98 18, 05, 05] F959; [E0 98 68, 05, 05] F9D3; [E0 98 6E, 05, 05] +FAC6; [E0 98 76, 05, 05] F9DC; [E0 98 8A, 05, 05] F9F1; [E0 98 C4, 05, 05] 2FAA; [E0 98 EA, 05, 09] @@ -23113,8 +28190,9 @@ F9B8; [E0 98 EE, 05, 05] D87E DDF3; [E0 99 0A, 05, 05] F9EA; [E0 99 48, 05, 05] FA68; [E0 99 4A, 05, 05] +FAC7; [E0 99 4A, 05, 05] 2FAC; [E0 99 54, 05, 09] -2ED7; [E0 99 54, 05, 09][, E0 8D, 3D] +2ED7; [E0 99 54, 05, 09][, E4 4D, 3D] F9B2; [E0 99 70, 05, 05] F949; [E0 99 72, 05, 05] D87E DDF5; [E0 99 CA, 05, 05] @@ -23123,22 +28201,27 @@ F9B3; [E0 9A 1A, 05, 05] 2FAD; [E0 9A 2C, 05, 09] 2ED8; [E0 9A 2E, 05, 09] FA1C; [E0 9A 36, 05, 05] +FAC8; [E0 9A 36, 05, 05] 2FAE; [E0 9A 46, 05, 09] 2FAF; [E0 9A 4E, 05, 09] 2FB0; [E0 9A 5C, 05, 09] 2FB1; [E0 9B 26, 05, 09] +FAC9; [E0 9B 46, 05, 05] D87E DDFA; [E0 9B 50, 05, 05] 2ED9; [E0 9B 5C, 05, 09] 2FB2; [E0 9B 6A, 05, 09] 2FB3; [E0 9B 76, 05, 09] FA69; [E0 9B 8E, 05, 05] +FACA; [E0 9B 8E, 05, 05] 2FB4; [E0 9B 92, 05, 09] 32A0; [E0 9B 9A, 05, 0D] D87E DDFE; [E0 9B A6, 05, 05] D87E DDFF; [E0 9B A6, 05, 05] +FACB; [E0 9B A6, 05, 05] F9B4; [E0 9B C0, 05, 05] D87E DE00; [E0 9B E2, 05, 05] FA6A; [E0 9C 0C, 05, 05] +FACC; [E0 9C 0C, 05, 05] F9D0; [E0 9C 52, 05, 05] 2EDA; [E0 9C 80, 05, 09] 2FB5; [E0 9C E6, 05, 09] @@ -23148,7 +28231,7 @@ F9D0; [E0 9C 52, 05, 05] 2EDD; [E0 9D 5A, 05, 09] 2FB7; [E0 9D 5A, 05, 09] 2EDF; [E0 9D 5C, 05, 09] -2EDE; [E0 9D 5C, 05, 09][, E0 8D, 3D] +2EDE; [E0 9D 5C, 05, 09][, E4 4D, 3D] D87E DE02; [E0 9D 60, 05, 05] FA2A; [E0 9D 7A, 05, 05] FA2B; [E0 9D 94, 05, 05] @@ -23156,7 +28239,7 @@ FA2C; [E0 9D EC, 05, 05] D87E DE04; [E0 9D EE, 05, 05] 2EE0; [E0 9E 68, 05, 09] 2FB8; [E0 9E CE, 05, 09] -2EE1; [E0 9E CE, 05, 09][, E0 8D, 3D] +2EE1; [E0 9E CE, 05, 09][, E4 4D, 3D] 2FB9; [E0 9E D4, 05, 09] D87E DE05; [E0 9E F0, 05, 05] 2FBA; [E0 9E FA, 05, 09] @@ -23166,15 +28249,16 @@ D87E DE07; [E0 9F A4, 05, 05] F987; [E0 A0 82, 05, 05] 2EE2; [E0 A0 86, 05, 09] 2FBB; [E0 A1 04, 05, 09] -2EE3; [E0 A1 04, 05, 09][, E0 8D, 3D] +2EE3; [E0 A1 04, 05, 09][, E4 4D, 3D] 2FBC; [E0 A1 64, 05, 09] 2FBD; [E0 A1 72, 05, 09] D87E DE0A; [E0 A1 D8, 05, 05] +FACD; [E0 A1 D8, 05, 05] 2FBE; [E0 A2 04, 05, 09] 2FBF; [E0 A2 18, 05, 09] 2FC0; [E0 A2 1E, 05, 09] 2FC1; [E0 A2 32, 05, 09] -2EE4; [E0 A2 32, 05, 09][, E0 8D, 3D] +2EE4; [E0 A2 32, 05, 09][, E4 4D, 3D] 2FC2; [E0 A2 6E, 05, 09] F939; [E0 A2 98, 05, 05] D87E DE0B; [E0 A4 46, 05, 05] @@ -23188,7 +28272,7 @@ F93A; [E0 A7 CC, 05, 05] F920; [E0 A8 1A, 05, 05] 2EE6; [E0 A8 1C, 05, 09] 2FC4; [E0 A8 C8, 05, 09] -2EE7; [E0 A8 C8, 05, 09][, E0 8D, 3D] +2EE7; [E0 A8 C8, 05, 09][, E4 4D, 3D] F940; [E0 A8 DC, 05, 05] 2FC5; [E0 A8 DC, 05, 09] F988; [E0 A9 12, 05, 05] @@ -23215,21 +28299,24 @@ D87E DE1B; [E0 AA 16, 05, 05] 2FCF; [E0 AA 2A, 05, 09] D87E DE1C; [E0 AA 60, 05, 05] 2FD0; [E0 AA 60, 05, 09] +FAD8; [E0 AA 70, 05, 05] 2FD1; [E0 AA 7E, 05, 09] -2EEB; [E0 AA 7E, 05, 09][, E0 8D, 3D] +2EEB; [E0 AA 7E, 05, 09][, E4 4D, 3D] 2EEC; [E0 AA 8A, 05, 09] 2FD2; [E0 AA 8E, 05, 09] -2EED; [E0 AA 8E, 05, 09][, E0 8D, 3D] +2EED; [E0 AA 8E, 05, 09][, E4 4D, 3D] 2EEE; [E0 AA E8, 05, 09] F9C4; [E0 AB 0A, 05, 05] 2FD3; [E0 AB 0A, 05, 09] -2EEF; [E0 AB 0A, 05, 09][, E0 8D, 3D] +2EEF; [E0 AB 0A, 05, 09][, E4 4D, 3D] +FAD9; [E0 AB 0C, 05, 05] 2EF0; [E0 AB 22, 05, 09] F907; [E0 AB 28, 05, 05] F908; [E0 AB 28, 05, 05] +FACE; [E0 AB 28, 05, 05] 2FD4; [E0 AB 28, 05, 09] -2EF1; [E0 AB 28, 05, 09][, E0 8D, 3D] -2EF2; [E0 AB 28, 05, 09][, E0 9D, 3D] +2EF1; [E0 AB 28, 05, 09][, E4 4D, 3D] +2EF2; [E0 AB 28, 05, 09][, E4 5D, 3D] 2EF3; [E0 AB 2E, 05, 09] 2FD5; [E0 AB 30, 05, 09] FA0E; [E0 AB F0, 05, 05] @@ -23267,6 +28354,7 @@ D87E DCD0; [E0 BA 9E, 05, 05] D87E DCCE; [E0 BA C0, 05, 05] D87E DCDE; [E0 BB 26, 05, 05] D87E DCE7; [E0 BB CE, 05, 05] +FAD2; [E0 BB CE, 05, 05] D87E DCEE; [E0 BC CA, 05, 05] D87E DCF2; [E0 BD 3C, 05, 05] D87E DD0A; [E0 BF 12, 05, 05] @@ -23277,7 +28365,9 @@ D87E DD2D; [E0 C2 2E, 05, 05] D87E DD33; [E0 C2 F4, 05, 05] D87E DD3E; [E0 C4 C2, 05, 05] D87E DD3F; [E0 C4 DA, 05, 05] +FAD3; [E0 C4 FA, 05, 05] D87E DD49; [E0 C5 42, 05, 05] +FAD4; [E0 C5 42, 05, 05] D87E DD4B; [E0 C5 5C, 05, 05] D87E DD4C; [E0 C5 FC, 05, 05] D87E DD51; [E0 C6 9C, 05, 05] @@ -23335,6 +28425,8 @@ D87E DD39; [E1 33 F0 E4, 05, 05] D87E DC91; [E1 34 22 90, 05, 05] D87E DC92; [E1 34 22 90, 05, 05] D87E DCA4; [E1 34 8A 04, 05, 05] +FAD0; [E1 34 B2 E4, 05, 05] +FACF; [E1 34 B3 90, 05, 05] D87E DCB8; [E1 35 07 04, 05, 05] D87E DCBE; [E1 35 20 74, 05, 05] D87E DCCA; [E1 35 95 04, 05, 05] @@ -23343,6 +28435,7 @@ D87E DD80; [E1 35 F3 C8, 05, 05] D87E DD89; [E1 35 F9 90, 05, 05] D87E DD8A; [E1 35 FA 90, 05, 05] D87E DCDD; [E1 35 FE E4, 05, 05] +FAD1; [E1 36 05 E4, 05, 05] D87E DCE3; [E1 36 16 C8, 05, 05] D87E DCEC; [E1 36 55 AC, 05, 05] D87E DCF0; [E1 36 8F 04, 05, 05] @@ -23367,6 +28460,7 @@ D87E DD42; [E1 39 51 04, 05, 05] D87E DD41; [E1 39 51 20, 05, 05] D87E DD43; [E1 39 55 58, 05, 05] D87E DD44; [E1 39 58 3C, 05, 05] +FAD5; [E1 39 77 20, 05, 05] D87E DD4D; [E1 39 AB 20, 05, 05] D87E DD52; [E1 39 E5 04, 05, 05] D87E DD54; [E1 39 F1 E4, 05, 05] @@ -23376,6 +28470,7 @@ D87E DD5D; [E1 3A 6A 20, 05, 05] D87E DD5E; [E1 3A 6A 20, 05, 05] D87E DD61; [E1 3A 87 04, 05, 05] D87E DD65; [E1 3A 9E AC, 05, 05] +FAD6; [E1 3A A7 90, 05, 05] D87E DD6B; [E1 3A F4 AC, 05, 05] D87E DC98; [E1 3B 3B E4, 05, 05] D87E DD72; [E1 3B 44 90, 05, 05] @@ -23399,6 +28494,7 @@ D87E DDC5; [E1 3D 8E 74, 05, 05] D87E DDCB; [E1 3D CF 3C, 05, 05] D87E DDCC; [E1 3D E3 AC, 05, 05] D87E DDD3; [E1 3E 45 58, 05, 05] +FAD7; [E1 3E 83 04, 05, 05] D87E DDD8; [E1 3E 8D 3C, 05, 05] D87E DDE0; [E1 3F 4F 04, 05, 05] @@ -23422,77 +28518,86 @@ D87E DE1D; [E1 42 F1 58, 05, 05] # HOMELESS COLLATION ELEMENTS FDD0 0061; [, 97, 3D] -FDD0 0062; [, D4 AD, 31] -FDD0 0063; [, D5 41, 31] -FDD0 0064; [, D5 41, 33] -FDD0 0065; [, D5 91, 2D] -FDD0 0066; [, D5 91, 31] -FDD0 0067; [, D5 91, 33] -FDD0 0068; [, DA 65, 3D] -FDD0 0069; [, DC 2D, 37] -FDD0 006A; [, DC 2D, 3D] -FDD0 006B; [, DC 3D, 37] -FDD0 006C; [, DC 3D, 3D] -FDD0 006D; [, E0 8D, 09] -FDD0 006E; [, E0 8D, 3D] -FDD0 006F; [, E0 9D, 09] -FDD0 0070; [, E0 9D, 2B] -FDD0 0071; [, E0 9D, 3D] -FDD0 0072; [, E0 AD, 09] -FDD0 0073; [, E0 BD, 09] -FDD0 0074; [, E0 CD, 09] -FDD0 0075; [, E0 DD, 05] -FDD0 0076; [, E0 ED, 05] -FDD0 0077; [, E0 FD, 05] -FDD0 0078; [, E1 11, 05] -FDD0 0079; [, E1 21, 05] -FDD0 007A; [, E1 31, 05] -FDD0 007B; [, E1 41, 05] -FDD0 007C; [, E1 51, 05] -FDD0 007D; [, E1 61, 05] -FDD0 007E; [, E1 71, 05] -FDD0 007F; [, E1 81, 05] -FDD0 0080; [, E1 91, 05] -FDD0 0081; [, E1 A1, 05] -FDD0 0082; [, E1 B1, 05] -FDD0 0083; [, E1 C1, 05] -FDD0 0084; [, E1 D1, 05] -FDD0 0085; [, E1 E1, 05] -FDD0 0086; [, E1 F1, 05] -FDD0 0087; [, E1 F1, 09] -FDD0 0088; [, E2 05, 05] -FDD0 0089; [, E2 15, 05] -FDD0 008A; [, E2 25, 05] -FDD0 008B; [, E2 35, 05] -FDD0 008C; [, E2 45, 05] -FDD0 008D; [, E2 55, 05] -FDD0 008E; [, E2 65, 05] -FDD0 008F; [,, 3F 03] # CONSTRUCTED FAKE SECONDARY-IGNORABLE -FDD0 0090; [24, 05, 05] # PLACE HOLDER FOR CODAN +FDD0 0062; [, D5 F1, 31] +FDD0 0063; [, D6 85, 31] +FDD0 0064; [, D6 85, 33] +FDD0 0065; [, D7 39, 2D] +FDD0 0066; [, D7 39, 31] +FDD0 0067; [, D7 39, 33] +FDD0 0068; [, E0 4D, 3D] +FDD0 0069; [, E2 25, 37] +FDD0 006A; [, E2 25, 3D] +FDD0 006B; [, E2 35, 37] +FDD0 006C; [, E2 35, 3D] +FDD0 006D; [, E4 4D, 09] +FDD0 006E; [, E4 4D, 27] +FDD0 006F; [, E4 4D, 3D] +FDD0 0070; [, E4 5D, 09] +FDD0 0071; [, E4 5D, 2B] +FDD0 0072; [, E4 5D, 3D] +FDD0 0073; [, E4 6D, 09] +FDD0 0074; [, E4 7D, 09] +FDD0 0075; [, E4 8D, 09] +FDD0 0076; [, E4 9D, 05] +FDD0 0077; [, E4 AD, 05] +FDD0 0078; [, E4 BD, 05] +FDD0 0079; [, E4 CD, 05] +FDD0 007A; [, E4 DD, 05] +FDD0 007B; [, E4 ED, 05] +FDD0 007C; [, E4 FD, 05] +FDD0 007D; [, E5 11, 05] +FDD0 007E; [, E5 21, 05] +FDD0 007F; [, E5 31, 05] +FDD0 0080; [, E5 41, 05] +FDD0 0081; [, E5 51, 05] +FDD0 0082; [, E5 61, 05] +FDD0 0083; [, E5 71, 05] +FDD0 0084; [, E5 81, 05] +FDD0 0085; [, E5 91, 05] +FDD0 0086; [, E5 A1, 05] +FDD0 0087; [, E5 B1, 05] +FDD0 0088; [, E5 C1, 05] +FDD0 0089; [, E5 C1, 09] +FDD0 008A; [, E5 D1, 05] +FDD0 008B; [, E5 E1, 05] +FDD0 008C; [, E5 F1, 05] +FDD0 008D; [, E6 05, 05] +FDD0 008E; [, E6 15, 05] +FDD0 008F; [, E6 25, 05] +FDD0 0090; [, E6 35, 05] +FDD0 0091; [, E6 45, 05] +FDD0 0092; [, E6 55, 05] +FDD0 0093; [, E6 65, 05] +FDD0 0094; [, E6 75, 05] +FDD0 0095; [, E6 85, 05] +FDD0 0096; [, E6 95, 05] +FDD0 0097; [, E6 A5, 05] +FDD0 0098; [,, 3F 03] # CONSTRUCTED FAKE SECONDARY-IGNORABLE +FDD0 0099; [27, 05, 05] # PLACE HOLDER FOR CODAN # VALUES BASED ON UCA [first tertiary ignorable [,,]] # CONSTRUCTED [last tertiary ignorable [,,]] # CONSTRUCTED # Warning: Case bits are masked in the following -#[first tertiary in secondary non-ignorable [X, X, 05]] # U+0332 COMBINING LOW LINE -#[last tertiary in secondary non-ignorable [X, X, 3D]] # U+2A74 DOUBLE COLON EQUAL +# [first tertiary in secondary non-ignorable [X, X, 05]] # U+0332 COMBINING LOW LINE +# [last tertiary in secondary non-ignorable [X, X, 3D]] # U+2A74 DOUBLE COLON EQUAL [first secondary ignorable [,, 3F 03]] # CONSTRUCTED [last secondary ignorable [,, 3F 03]] # CONSTRUCTED -#[first secondary in primary non-ignorable [X, 05, X]] # U+0009 -#[last secondary in primary non-ignorable [X, 05, X]] # U+0009 +# [first secondary in primary non-ignorable [X, 05, X]] # U+0009 +# [last secondary in primary non-ignorable [X, 05, X]] # U+0009 [first primary ignorable [, 87, 05]] # U+0332 COMBINING LOW LINE -[last primary ignorable [, E2 65, 05]] # U+10320 OLD ITALIC NUMERAL ONE +[last primary ignorable [, E6 A5, 05]] # U+1D360 COUNTING ROD UNIT DIGIT ONE [first variable [05 07, 05, 05]] # U+0009 -[last variable [20 2D, 05, 05]] # U+10133 AEGEAN NUMBER NINETY THOUSAND -[first regular [23 20, 05, 05]] # U+02D0 MODIFIER LETTER TRIANGULAR COLON -[last regular [97 35, 05, 05]] # U+1039D UGARITIC LETTER SSU +[last variable [23 6F, 05, 05]] # U+1D371 COUNTING ROD TENS DIGIT NINE +[first regular [26 20, 05, 05]] # U+02D0 MODIFIER LETTER TRIANGULAR COLON +[last regular [AB 95, 05, 05]] # U+1236E CUNEIFORM SIGN ZUM [first implicit [E0 04 06, 05, 05]] # CONSTRUCTED [last implicit [E4 DF 7E 20, 05, 05]] # CONSTRUCTED [first trailing [E5, 05, 05]] # CONSTRUCTED [last trailing [E5, 05, 05]] # CONSTRUCTED # FIXED VALUES -# superceded! [top [97 35, 05, 05]] +# superceded! [top [AB 95, 05, 05]] [fixed first implicit byte E0] [fixed last implicit byte E4] [fixed first trail byte E5] diff --git a/icuSources/data/unidata/GraphemeBreakProperty.txt b/icuSources/data/unidata/GraphemeBreakProperty.txt new file mode 100644 index 00000000..3339d1b9 --- /dev/null +++ b/icuSources/data/unidata/GraphemeBreakProperty.txt @@ -0,0 +1,1042 @@ +# GraphemeBreakProperty-5.0.0.txt +# Date: 2006-03-09, 23:14:04 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Property: Grapheme_Cluster_Break + +# All code points not explicitly listed for Grapheme_Cluster_Break +# have the value Other (XX). + +# @missing: 0000..10FFFF; Other + +# ================================================ + +000D ; CR + +# Total code points: 1 + +# ================================================ + +000A ; LF + +# Total code points: 1 + +# ================================================ + +0000..0009 ; Control +000B..000C ; Control +000E..001F ; Control +007F..009F ; Control +00AD ; Control +0600..0603 ; Control +06DD ; Control +070F ; Control +17B4..17B5 ; Control +200B ; Control +200E..200F ; Control +2028 ; Control +2029 ; Control +202A..202E ; Control +2060..2063 ; Control +206A..206F ; Control +FEFF ; Control +FFF9..FFFB ; Control +1D173..1D17A ; Control +E0001 ; Control +E0020..E007F ; Control + +# Total code points: 201 + +# ================================================ + +0300..036F ; Extend +0483..0486 ; Extend +0488..0489 ; Extend +0591..05BD ; Extend +05BF ; Extend +05C1..05C2 ; Extend +05C4..05C5 ; Extend +05C7 ; Extend +0610..0615 ; Extend +064B..065E ; Extend +0670 ; Extend +06D6..06DC ; Extend +06DE ; Extend +06DF..06E4 ; Extend +06E7..06E8 ; Extend +06EA..06ED ; Extend +0711 ; Extend +0730..074A ; Extend +07A6..07B0 ; Extend +07EB..07F3 ; Extend +0901..0902 ; Extend +093C ; Extend +0941..0948 ; Extend +094D ; Extend +0951..0954 ; Extend +0962..0963 ; Extend +0981 ; Extend +09BC ; Extend +09BE ; Extend +09C1..09C4 ; Extend +09CD ; Extend +09D7 ; Extend +09E2..09E3 ; Extend +0A01..0A02 ; Extend +0A3C ; Extend +0A41..0A42 ; Extend +0A47..0A48 ; Extend +0A4B..0A4D ; Extend +0A70..0A71 ; Extend +0A81..0A82 ; Extend +0ABC ; Extend +0AC1..0AC5 ; Extend +0AC7..0AC8 ; Extend +0ACD ; Extend +0AE2..0AE3 ; Extend +0B01 ; Extend +0B3C ; Extend +0B3E ; Extend +0B3F ; Extend +0B41..0B43 ; Extend +0B4D ; Extend +0B56 ; Extend +0B57 ; Extend +0B82 ; Extend +0BBE ; Extend +0BC0 ; Extend +0BCD ; Extend +0BD7 ; Extend +0C3E..0C40 ; Extend +0C46..0C48 ; Extend +0C4A..0C4D ; Extend +0C55..0C56 ; Extend +0CBC ; Extend +0CBF ; Extend +0CC2 ; Extend +0CC6 ; Extend +0CCC..0CCD ; Extend +0CD5..0CD6 ; Extend +0CE2..0CE3 ; Extend +0D3E ; Extend +0D41..0D43 ; Extend +0D4D ; Extend +0D57 ; Extend +0DCA ; Extend +0DCF ; Extend +0DD2..0DD4 ; Extend +0DD6 ; Extend +0DDF ; Extend +0E31 ; Extend +0E34..0E3A ; Extend +0E47..0E4E ; Extend +0EB1 ; Extend +0EB4..0EB9 ; Extend +0EBB..0EBC ; Extend +0EC8..0ECD ; Extend +0F18..0F19 ; Extend +0F35 ; Extend +0F37 ; Extend +0F39 ; Extend +0F71..0F7E ; Extend +0F80..0F84 ; Extend +0F86..0F87 ; Extend +0F90..0F97 ; Extend +0F99..0FBC ; Extend +0FC6 ; Extend +102D..1030 ; Extend +1032 ; Extend +1036..1037 ; Extend +1039 ; Extend +1058..1059 ; Extend +135F ; Extend +1712..1714 ; Extend +1732..1734 ; Extend +1752..1753 ; Extend +1772..1773 ; Extend +17B7..17BD ; Extend +17C6 ; Extend +17C9..17D3 ; Extend +17DD ; Extend +180B..180D ; Extend +18A9 ; Extend +1920..1922 ; Extend +1927..1928 ; Extend +1932 ; Extend +1939..193B ; Extend +1A17..1A18 ; Extend +1B00..1B03 ; Extend +1B34 ; Extend +1B36..1B3A ; Extend +1B3C ; Extend +1B42 ; Extend +1B6B..1B73 ; Extend +1DC0..1DCA ; Extend +1DFE..1DFF ; Extend +200C..200D ; Extend +20D0..20DC ; Extend +20DD..20E0 ; Extend +20E1 ; Extend +20E2..20E4 ; Extend +20E5..20EF ; Extend +302A..302F ; Extend +3099..309A ; Extend +A806 ; Extend +A80B ; Extend +A825..A826 ; Extend +F870..F87F ; Extend +F884..F899 ; Extend +F89F ; Extend +FB1E ; Extend +FE00..FE0F ; Extend +FE20..FE23 ; Extend +10A01..10A03 ; Extend +10A05..10A06 ; Extend +10A0C..10A0F ; Extend +10A38..10A3A ; Extend +10A3F ; Extend +1D165 ; Extend +1D167..1D169 ; Extend +1D16E..1D172 ; Extend +1D17B..1D182 ; Extend +1D185..1D18B ; Extend +1D1AA..1D1AD ; Extend +1D242..1D244 ; Extend +E0100..E01EF ; Extend + +# Total code points: 911 + +# ================================================ + +1100..1159 ; L +115F ; L + +# Total code points: 91 + +# ================================================ + +1160..11A2 ; V + +# Total code points: 67 + +# ================================================ + +11A8..11F9 ; T + +# Total code points: 82 + +# ================================================ + +AC00 ; LV +AC1C ; LV +AC38 ; LV +AC54 ; LV +AC70 ; LV +AC8C ; LV +ACA8 ; LV +ACC4 ; LV +ACE0 ; LV +ACFC ; LV +AD18 ; LV +AD34 ; LV +AD50 ; LV +AD6C ; LV +AD88 ; LV +ADA4 ; LV +ADC0 ; LV +ADDC ; LV +ADF8 ; LV +AE14 ; LV +AE30 ; LV +AE4C ; LV +AE68 ; LV +AE84 ; LV +AEA0 ; LV +AEBC ; LV +AED8 ; LV +AEF4 ; LV +AF10 ; LV +AF2C ; LV +AF48 ; LV +AF64 ; LV +AF80 ; LV +AF9C ; LV +AFB8 ; LV +AFD4 ; LV +AFF0 ; LV +B00C ; LV +B028 ; LV +B044 ; LV +B060 ; LV +B07C ; LV +B098 ; LV +B0B4 ; LV +B0D0 ; LV +B0EC ; LV +B108 ; LV +B124 ; LV +B140 ; LV +B15C ; LV +B178 ; LV +B194 ; LV +B1B0 ; LV +B1CC ; LV +B1E8 ; LV +B204 ; LV +B220 ; LV +B23C ; LV +B258 ; LV +B274 ; LV +B290 ; LV +B2AC ; LV +B2C8 ; LV +B2E4 ; LV +B300 ; LV +B31C ; LV +B338 ; LV +B354 ; LV +B370 ; LV +B38C ; LV +B3A8 ; LV +B3C4 ; LV +B3E0 ; LV +B3FC ; LV +B418 ; LV +B434 ; LV +B450 ; LV +B46C ; LV +B488 ; LV +B4A4 ; LV +B4C0 ; LV +B4DC ; LV +B4F8 ; LV +B514 ; LV +B530 ; LV +B54C ; LV +B568 ; LV +B584 ; LV +B5A0 ; LV +B5BC ; LV +B5D8 ; LV +B5F4 ; LV +B610 ; LV +B62C ; LV +B648 ; LV +B664 ; LV +B680 ; LV +B69C ; LV +B6B8 ; LV +B6D4 ; LV +B6F0 ; LV +B70C ; LV +B728 ; LV +B744 ; LV +B760 ; LV +B77C ; LV +B798 ; LV +B7B4 ; LV +B7D0 ; LV +B7EC ; LV +B808 ; LV +B824 ; LV +B840 ; LV +B85C ; LV +B878 ; LV +B894 ; LV +B8B0 ; LV +B8CC ; LV +B8E8 ; LV +B904 ; LV +B920 ; LV +B93C ; LV +B958 ; LV +B974 ; LV +B990 ; LV +B9AC ; LV +B9C8 ; LV +B9E4 ; LV +BA00 ; LV +BA1C ; LV +BA38 ; LV +BA54 ; LV +BA70 ; LV +BA8C ; LV +BAA8 ; LV +BAC4 ; LV +BAE0 ; LV +BAFC ; LV +BB18 ; LV +BB34 ; LV +BB50 ; LV +BB6C ; LV +BB88 ; LV +BBA4 ; LV +BBC0 ; LV +BBDC ; LV +BBF8 ; LV +BC14 ; LV +BC30 ; LV +BC4C ; LV +BC68 ; LV +BC84 ; LV +BCA0 ; LV +BCBC ; LV +BCD8 ; LV +BCF4 ; LV +BD10 ; LV +BD2C ; LV +BD48 ; LV +BD64 ; LV +BD80 ; LV +BD9C ; LV +BDB8 ; LV +BDD4 ; LV +BDF0 ; LV +BE0C ; LV +BE28 ; LV +BE44 ; LV +BE60 ; LV +BE7C ; LV +BE98 ; LV +BEB4 ; LV +BED0 ; LV +BEEC ; LV +BF08 ; LV +BF24 ; LV +BF40 ; LV +BF5C ; LV +BF78 ; LV +BF94 ; LV +BFB0 ; LV +BFCC ; LV +BFE8 ; LV +C004 ; LV +C020 ; LV +C03C ; LV +C058 ; LV +C074 ; LV +C090 ; LV +C0AC ; LV +C0C8 ; LV +C0E4 ; LV +C100 ; LV +C11C ; LV +C138 ; LV +C154 ; LV +C170 ; LV +C18C ; LV +C1A8 ; LV +C1C4 ; LV +C1E0 ; LV +C1FC ; LV +C218 ; LV +C234 ; LV +C250 ; LV +C26C ; LV +C288 ; LV +C2A4 ; LV +C2C0 ; LV +C2DC ; LV +C2F8 ; LV +C314 ; LV +C330 ; LV +C34C ; LV +C368 ; LV +C384 ; LV +C3A0 ; LV +C3BC ; LV +C3D8 ; LV +C3F4 ; LV +C410 ; LV +C42C ; LV +C448 ; LV +C464 ; LV +C480 ; LV +C49C ; LV +C4B8 ; LV +C4D4 ; LV +C4F0 ; LV +C50C ; LV +C528 ; LV +C544 ; LV +C560 ; LV +C57C ; LV +C598 ; LV +C5B4 ; LV +C5D0 ; LV +C5EC ; LV +C608 ; LV +C624 ; LV +C640 ; LV +C65C ; LV +C678 ; LV +C694 ; LV +C6B0 ; LV +C6CC ; LV +C6E8 ; LV +C704 ; LV +C720 ; LV +C73C ; LV +C758 ; LV +C774 ; LV +C790 ; LV +C7AC ; LV +C7C8 ; LV +C7E4 ; LV +C800 ; LV +C81C ; LV +C838 ; LV +C854 ; LV +C870 ; LV +C88C ; LV +C8A8 ; LV +C8C4 ; LV +C8E0 ; LV +C8FC ; LV +C918 ; LV +C934 ; LV +C950 ; LV +C96C ; LV +C988 ; LV +C9A4 ; LV +C9C0 ; LV +C9DC ; LV +C9F8 ; LV +CA14 ; LV +CA30 ; LV +CA4C ; LV +CA68 ; LV +CA84 ; LV +CAA0 ; LV +CABC ; LV +CAD8 ; LV +CAF4 ; LV +CB10 ; LV +CB2C ; LV +CB48 ; LV +CB64 ; LV +CB80 ; LV +CB9C ; LV +CBB8 ; LV +CBD4 ; LV +CBF0 ; LV +CC0C ; LV +CC28 ; LV +CC44 ; LV +CC60 ; LV +CC7C ; LV +CC98 ; LV +CCB4 ; LV +CCD0 ; LV +CCEC ; LV +CD08 ; LV +CD24 ; LV +CD40 ; LV +CD5C ; LV +CD78 ; LV +CD94 ; LV +CDB0 ; LV +CDCC ; LV +CDE8 ; LV +CE04 ; LV +CE20 ; LV +CE3C ; LV +CE58 ; LV +CE74 ; LV +CE90 ; LV +CEAC ; LV +CEC8 ; LV +CEE4 ; LV +CF00 ; LV +CF1C ; LV +CF38 ; LV +CF54 ; LV +CF70 ; LV +CF8C ; LV +CFA8 ; LV +CFC4 ; LV +CFE0 ; LV +CFFC ; LV +D018 ; LV +D034 ; LV +D050 ; LV +D06C ; LV +D088 ; LV +D0A4 ; LV +D0C0 ; LV +D0DC ; LV +D0F8 ; LV +D114 ; LV +D130 ; LV +D14C ; LV +D168 ; LV +D184 ; LV +D1A0 ; LV +D1BC ; LV +D1D8 ; LV +D1F4 ; LV +D210 ; LV +D22C ; LV +D248 ; LV +D264 ; LV +D280 ; LV +D29C ; LV +D2B8 ; LV +D2D4 ; LV +D2F0 ; LV +D30C ; LV +D328 ; LV +D344 ; LV +D360 ; LV +D37C ; LV +D398 ; LV +D3B4 ; LV +D3D0 ; LV +D3EC ; LV +D408 ; LV +D424 ; LV +D440 ; LV +D45C ; LV +D478 ; LV +D494 ; LV +D4B0 ; LV +D4CC ; LV +D4E8 ; LV +D504 ; LV +D520 ; LV +D53C ; LV +D558 ; LV +D574 ; LV +D590 ; LV +D5AC ; LV +D5C8 ; LV +D5E4 ; LV +D600 ; LV +D61C ; LV +D638 ; LV +D654 ; LV +D670 ; LV +D68C ; LV +D6A8 ; LV +D6C4 ; LV +D6E0 ; LV +D6FC ; LV +D718 ; LV +D734 ; LV +D750 ; LV +D76C ; LV +D788 ; LV + +# Total code points: 399 + +# ================================================ + +AC01..AC1B ; LVT +AC1D..AC37 ; LVT +AC39..AC53 ; LVT +AC55..AC6F ; LVT +AC71..AC8B ; LVT +AC8D..ACA7 ; LVT +ACA9..ACC3 ; LVT +ACC5..ACDF ; LVT +ACE1..ACFB ; LVT +ACFD..AD17 ; LVT +AD19..AD33 ; LVT +AD35..AD4F ; LVT +AD51..AD6B ; LVT +AD6D..AD87 ; LVT +AD89..ADA3 ; LVT +ADA5..ADBF ; LVT +ADC1..ADDB ; LVT +ADDD..ADF7 ; LVT +ADF9..AE13 ; LVT +AE15..AE2F ; LVT +AE31..AE4B ; LVT +AE4D..AE67 ; LVT +AE69..AE83 ; LVT +AE85..AE9F ; LVT +AEA1..AEBB ; LVT +AEBD..AED7 ; LVT +AED9..AEF3 ; LVT +AEF5..AF0F ; LVT +AF11..AF2B ; LVT +AF2D..AF47 ; LVT +AF49..AF63 ; LVT +AF65..AF7F ; LVT +AF81..AF9B ; LVT +AF9D..AFB7 ; LVT +AFB9..AFD3 ; LVT +AFD5..AFEF ; LVT +AFF1..B00B ; LVT +B00D..B027 ; LVT +B029..B043 ; LVT +B045..B05F ; LVT +B061..B07B ; LVT +B07D..B097 ; LVT +B099..B0B3 ; LVT +B0B5..B0CF ; LVT +B0D1..B0EB ; LVT +B0ED..B107 ; LVT +B109..B123 ; LVT +B125..B13F ; LVT +B141..B15B ; LVT +B15D..B177 ; LVT +B179..B193 ; LVT +B195..B1AF ; LVT +B1B1..B1CB ; LVT +B1CD..B1E7 ; LVT +B1E9..B203 ; LVT +B205..B21F ; LVT +B221..B23B ; LVT +B23D..B257 ; LVT +B259..B273 ; LVT +B275..B28F ; LVT +B291..B2AB ; LVT +B2AD..B2C7 ; LVT +B2C9..B2E3 ; LVT +B2E5..B2FF ; LVT +B301..B31B ; LVT +B31D..B337 ; LVT +B339..B353 ; LVT +B355..B36F ; LVT +B371..B38B ; LVT +B38D..B3A7 ; LVT +B3A9..B3C3 ; LVT +B3C5..B3DF ; LVT +B3E1..B3FB ; LVT +B3FD..B417 ; LVT +B419..B433 ; LVT +B435..B44F ; LVT +B451..B46B ; LVT +B46D..B487 ; LVT +B489..B4A3 ; LVT +B4A5..B4BF ; LVT +B4C1..B4DB ; LVT +B4DD..B4F7 ; LVT +B4F9..B513 ; LVT +B515..B52F ; LVT +B531..B54B ; LVT +B54D..B567 ; LVT +B569..B583 ; LVT +B585..B59F ; LVT +B5A1..B5BB ; LVT +B5BD..B5D7 ; LVT +B5D9..B5F3 ; LVT +B5F5..B60F ; LVT +B611..B62B ; LVT +B62D..B647 ; LVT +B649..B663 ; LVT +B665..B67F ; LVT +B681..B69B ; LVT +B69D..B6B7 ; LVT +B6B9..B6D3 ; LVT +B6D5..B6EF ; LVT +B6F1..B70B ; LVT +B70D..B727 ; LVT +B729..B743 ; LVT +B745..B75F ; LVT +B761..B77B ; LVT +B77D..B797 ; LVT +B799..B7B3 ; LVT +B7B5..B7CF ; LVT +B7D1..B7EB ; LVT +B7ED..B807 ; LVT +B809..B823 ; LVT +B825..B83F ; LVT +B841..B85B ; LVT +B85D..B877 ; LVT +B879..B893 ; LVT +B895..B8AF ; LVT +B8B1..B8CB ; LVT +B8CD..B8E7 ; LVT +B8E9..B903 ; LVT +B905..B91F ; LVT +B921..B93B ; LVT +B93D..B957 ; LVT +B959..B973 ; LVT +B975..B98F ; LVT +B991..B9AB ; LVT +B9AD..B9C7 ; LVT +B9C9..B9E3 ; LVT +B9E5..B9FF ; LVT +BA01..BA1B ; LVT +BA1D..BA37 ; LVT +BA39..BA53 ; LVT +BA55..BA6F ; LVT +BA71..BA8B ; LVT +BA8D..BAA7 ; LVT +BAA9..BAC3 ; LVT +BAC5..BADF ; LVT +BAE1..BAFB ; LVT +BAFD..BB17 ; LVT +BB19..BB33 ; LVT +BB35..BB4F ; LVT +BB51..BB6B ; LVT +BB6D..BB87 ; LVT +BB89..BBA3 ; LVT +BBA5..BBBF ; LVT +BBC1..BBDB ; LVT +BBDD..BBF7 ; LVT +BBF9..BC13 ; LVT +BC15..BC2F ; LVT +BC31..BC4B ; LVT +BC4D..BC67 ; LVT +BC69..BC83 ; LVT +BC85..BC9F ; LVT +BCA1..BCBB ; LVT +BCBD..BCD7 ; LVT +BCD9..BCF3 ; LVT +BCF5..BD0F ; LVT +BD11..BD2B ; LVT +BD2D..BD47 ; LVT +BD49..BD63 ; LVT +BD65..BD7F ; LVT +BD81..BD9B ; LVT +BD9D..BDB7 ; LVT +BDB9..BDD3 ; LVT +BDD5..BDEF ; LVT +BDF1..BE0B ; LVT +BE0D..BE27 ; LVT +BE29..BE43 ; LVT +BE45..BE5F ; LVT +BE61..BE7B ; LVT +BE7D..BE97 ; LVT +BE99..BEB3 ; LVT +BEB5..BECF ; LVT +BED1..BEEB ; LVT +BEED..BF07 ; LVT +BF09..BF23 ; LVT +BF25..BF3F ; LVT +BF41..BF5B ; LVT +BF5D..BF77 ; LVT +BF79..BF93 ; LVT +BF95..BFAF ; LVT +BFB1..BFCB ; LVT +BFCD..BFE7 ; LVT +BFE9..C003 ; LVT +C005..C01F ; LVT +C021..C03B ; LVT +C03D..C057 ; LVT +C059..C073 ; LVT +C075..C08F ; LVT +C091..C0AB ; LVT +C0AD..C0C7 ; LVT +C0C9..C0E3 ; LVT +C0E5..C0FF ; LVT +C101..C11B ; LVT +C11D..C137 ; LVT +C139..C153 ; LVT +C155..C16F ; LVT +C171..C18B ; LVT +C18D..C1A7 ; LVT +C1A9..C1C3 ; LVT +C1C5..C1DF ; LVT +C1E1..C1FB ; LVT +C1FD..C217 ; LVT +C219..C233 ; LVT +C235..C24F ; LVT +C251..C26B ; LVT +C26D..C287 ; LVT +C289..C2A3 ; LVT +C2A5..C2BF ; LVT +C2C1..C2DB ; LVT +C2DD..C2F7 ; LVT +C2F9..C313 ; LVT +C315..C32F ; LVT +C331..C34B ; LVT +C34D..C367 ; LVT +C369..C383 ; LVT +C385..C39F ; LVT +C3A1..C3BB ; LVT +C3BD..C3D7 ; LVT +C3D9..C3F3 ; LVT +C3F5..C40F ; LVT +C411..C42B ; LVT +C42D..C447 ; LVT +C449..C463 ; LVT +C465..C47F ; LVT +C481..C49B ; LVT +C49D..C4B7 ; LVT +C4B9..C4D3 ; LVT +C4D5..C4EF ; LVT +C4F1..C50B ; LVT +C50D..C527 ; LVT +C529..C543 ; LVT +C545..C55F ; LVT +C561..C57B ; LVT +C57D..C597 ; LVT +C599..C5B3 ; LVT +C5B5..C5CF ; LVT +C5D1..C5EB ; LVT +C5ED..C607 ; LVT +C609..C623 ; LVT +C625..C63F ; LVT +C641..C65B ; LVT +C65D..C677 ; LVT +C679..C693 ; LVT +C695..C6AF ; LVT +C6B1..C6CB ; LVT +C6CD..C6E7 ; LVT +C6E9..C703 ; LVT +C705..C71F ; LVT +C721..C73B ; LVT +C73D..C757 ; LVT +C759..C773 ; LVT +C775..C78F ; LVT +C791..C7AB ; LVT +C7AD..C7C7 ; LVT +C7C9..C7E3 ; LVT +C7E5..C7FF ; LVT +C801..C81B ; LVT +C81D..C837 ; LVT +C839..C853 ; LVT +C855..C86F ; LVT +C871..C88B ; LVT +C88D..C8A7 ; LVT +C8A9..C8C3 ; LVT +C8C5..C8DF ; LVT +C8E1..C8FB ; LVT +C8FD..C917 ; LVT +C919..C933 ; LVT +C935..C94F ; LVT +C951..C96B ; LVT +C96D..C987 ; LVT +C989..C9A3 ; LVT +C9A5..C9BF ; LVT +C9C1..C9DB ; LVT +C9DD..C9F7 ; LVT +C9F9..CA13 ; LVT +CA15..CA2F ; LVT +CA31..CA4B ; LVT +CA4D..CA67 ; LVT +CA69..CA83 ; LVT +CA85..CA9F ; LVT +CAA1..CABB ; LVT +CABD..CAD7 ; LVT +CAD9..CAF3 ; LVT +CAF5..CB0F ; LVT +CB11..CB2B ; LVT +CB2D..CB47 ; LVT +CB49..CB63 ; LVT +CB65..CB7F ; LVT +CB81..CB9B ; LVT +CB9D..CBB7 ; LVT +CBB9..CBD3 ; LVT +CBD5..CBEF ; LVT +CBF1..CC0B ; LVT +CC0D..CC27 ; LVT +CC29..CC43 ; LVT +CC45..CC5F ; LVT +CC61..CC7B ; LVT +CC7D..CC97 ; LVT +CC99..CCB3 ; LVT +CCB5..CCCF ; LVT +CCD1..CCEB ; LVT +CCED..CD07 ; LVT +CD09..CD23 ; LVT +CD25..CD3F ; LVT +CD41..CD5B ; LVT +CD5D..CD77 ; LVT +CD79..CD93 ; LVT +CD95..CDAF ; LVT +CDB1..CDCB ; LVT +CDCD..CDE7 ; LVT +CDE9..CE03 ; LVT +CE05..CE1F ; LVT +CE21..CE3B ; LVT +CE3D..CE57 ; LVT +CE59..CE73 ; LVT +CE75..CE8F ; LVT +CE91..CEAB ; LVT +CEAD..CEC7 ; LVT +CEC9..CEE3 ; LVT +CEE5..CEFF ; LVT +CF01..CF1B ; LVT +CF1D..CF37 ; LVT +CF39..CF53 ; LVT +CF55..CF6F ; LVT +CF71..CF8B ; LVT +CF8D..CFA7 ; LVT +CFA9..CFC3 ; LVT +CFC5..CFDF ; LVT +CFE1..CFFB ; LVT +CFFD..D017 ; LVT +D019..D033 ; LVT +D035..D04F ; LVT +D051..D06B ; LVT +D06D..D087 ; LVT +D089..D0A3 ; LVT +D0A5..D0BF ; LVT +D0C1..D0DB ; LVT +D0DD..D0F7 ; LVT +D0F9..D113 ; LVT +D115..D12F ; LVT +D131..D14B ; LVT +D14D..D167 ; LVT +D169..D183 ; LVT +D185..D19F ; LVT +D1A1..D1BB ; LVT +D1BD..D1D7 ; LVT +D1D9..D1F3 ; LVT +D1F5..D20F ; LVT +D211..D22B ; LVT +D22D..D247 ; LVT +D249..D263 ; LVT +D265..D27F ; LVT +D281..D29B ; LVT +D29D..D2B7 ; LVT +D2B9..D2D3 ; LVT +D2D5..D2EF ; LVT +D2F1..D30B ; LVT +D30D..D327 ; LVT +D329..D343 ; LVT +D345..D35F ; LVT +D361..D37B ; LVT +D37D..D397 ; LVT +D399..D3B3 ; LVT +D3B5..D3CF ; LVT +D3D1..D3EB ; LVT +D3ED..D407 ; LVT +D409..D423 ; LVT +D425..D43F ; LVT +D441..D45B ; LVT +D45D..D477 ; LVT +D479..D493 ; LVT +D495..D4AF ; LVT +D4B1..D4CB ; LVT +D4CD..D4E7 ; LVT +D4E9..D503 ; LVT +D505..D51F ; LVT +D521..D53B ; LVT +D53D..D557 ; LVT +D559..D573 ; LVT +D575..D58F ; LVT +D591..D5AB ; LVT +D5AD..D5C7 ; LVT +D5C9..D5E3 ; LVT +D5E5..D5FF ; LVT +D601..D61B ; LVT +D61D..D637 ; LVT +D639..D653 ; LVT +D655..D66F ; LVT +D671..D68B ; LVT +D68D..D6A7 ; LVT +D6A9..D6C3 ; LVT +D6C5..D6DF ; LVT +D6E1..D6FB ; LVT +D6FD..D717 ; LVT +D719..D733 ; LVT +D735..D74F ; LVT +D751..D76B ; LVT +D76D..D787 ; LVT +D789..D7A3 ; LVT + +# Total code points: 10773 + +# EOF diff --git a/icuSources/data/unidata/LineBreak.txt b/icuSources/data/unidata/LineBreak.txt index c8c115b6..3013427d 100644 --- a/icuSources/data/unidata/LineBreak.txt +++ b/icuSources/data/unidata/LineBreak.txt @@ -1,15 +1,21 @@ -# LineBreak-4.0.1.txt +# LineBreak-5.0.0.txt +# Date: 2006-05-23, 11:43:00 PST [KW] # # Line Break Properties # -# This file is a supplement to the UnicodeData.txt file. +# This file is a normative contributory data file in the +# Unicode Character Database. # It contains both normative and informative data. +# +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# # The format is two fields separated by a semicolon. -# Field 1: Unicode value -# Field 2: LineBreak property, consisting of one of the following values: +# Field 0: Unicode value +# Field 1: LineBreak property, consisting of one of the following values: # Normative: # "BK", "CR", "LF", "CM", "SG", "GL", "CB", "SP", "ZW", -# "NL", "WJ" +# "NL", "WJ", "JL", "JV", "JT", "H2", "H3" # Informative: # "XX", "OP", "CL", "QU", "NS", "EX", "SY", # "IS", "PR", "PO", "NU", "AL", "ID", "IN", "HY", @@ -22,12 +28,13 @@ # The Unicode name of each character is provided in a comment for help # in identifying the characters. # -# See UTR #14: Line Breaking Properties, for more information +# See UAX #14: Line Breaking Properties, for more information +# +# @missing: 0000..10FFFF; XX 0000..0008;CM 0009;BA 000A;LF -000B;CM -000C;BK +000B..000C;BK 000D;CR 000E..001F;CM 0020;SP @@ -86,8 +93,7 @@ 00D7;AI 00D8..00F6;AL 00F7;AI -00F8..0236;AL -0250..02C6;AL +00F8..02C6;AL 02C7;AI 02C8;BB 02C9..02CB;AI @@ -100,56 +106,57 @@ 02DC;AL 02DD;AI 02DE..02FF;AL -0300..0357;CM -035D..0362;GL +0300..034E;CM +034F;GL +0350..035B;CM +035C..0362;GL 0363..036F;CM 0374..0375;AL -037A;AL +037A..037D;AL 037E;IS 0384..038A;AL 038C;AL 038E..03A1;AL 03A3..03CE;AL -03D0..03FB;AL -0400..0482;AL +03D0..0482;AL 0483..0486;CM 0488..0489;CM -048A..04CE;AL -04D0..04F5;AL -04F8..04F9;AL -0500..050F;AL +048A..0513;AL 0531..0556;AL 0559..055F;AL 0561..0587;AL 0589;IS 058A;BA -0591..05A1;CM -05A3..05B9;CM -05BB..05BD;CM -05BE;AL +0591..05BD;CM +05BE;BA 05BF;CM 05C0;AL 05C1..05C2;CM 05C3;AL -05C4;CM +05C4..05C5;CM +05C6;EX +05C7;CM 05D0..05EA;AL 05F0..05F4;AL 0600..0603;AL -060C;AL +060B;PO +060C;EX 060D;IS 060E..060F;AL 0610..0615;CM -061B;AL -061F;AL +061B;EX +061E..061F;EX 0621..063A;AL 0640..064A;AL -064B..0658;CM +064B..065E;CM 0660..0669;NU -066A;AL +066A;EX 066B..066C;NU 066D..066F;AL 0670;CM -0671..06D5;AL +0671..06D3;AL +06D4;EX +06D5;AL 06D6..06DC;CM 06DD;AL 06DE..06E4;CM @@ -164,10 +171,17 @@ 0711;CM 0712..072F;AL 0730..074A;CM -074D..074F;AL +074D..076D;AL 0780..07A5;AL 07A6..07B0;CM 07B1;AL +07C0..07C9;NU +07CA..07EA;AL +07EB..07F3;CM +07F4..07F7;AL +07F8;IS +07F9;EX +07FA;AL 0901..0903;CM 0904..0939;AL 093C;CM @@ -177,9 +191,10 @@ 0951..0954;CM 0958..0961;AL 0962..0963;CM -0964..0965;AL +0964..0965;BA 0966..096F;NU 0970;AL +097B..097F;AL 0981..0983;CM 0985..098C;AL 098F..0990;AL @@ -192,6 +207,7 @@ 09BE..09C4;CM 09C7..09C8;CM 09CB..09CD;CM +09CE;AL 09D7;CM 09DC..09DD;AL 09DF..09E1;AL @@ -261,13 +277,12 @@ 0B9E..0B9F;AL 0BA3..0BA4;AL 0BA8..0BAA;AL -0BAE..0BB5;AL -0BB7..0BB9;AL +0BAE..0BB9;AL 0BBE..0BC2;CM 0BC6..0BC8;CM 0BCA..0BCD;CM 0BD7;CM -0BE7..0BEF;NU +0BE6..0BEF;NU 0BF0..0BF8;AL 0BF9;PR 0BFA;AL @@ -297,7 +312,9 @@ 0CD5..0CD6;CM 0CDE;AL 0CE0..0CE1;AL +0CE2..0CE3;CM 0CE6..0CEF;NU +0CF1..0CF2;AL 0D02..0D03;CM 0D05..0D0C;AL 0D0E..0D10;AL @@ -321,16 +338,12 @@ 0DD8..0DDF;CM 0DF2..0DF3;CM 0DF4;AL -0E01..0E30;SA -0E31;CM -0E32..0E33;SA -0E34..0E3A;CM +0E01..0E3A;SA 0E3F;PR -0E40..0E46;SA -0E47..0E4E;CM +0E40..0E4E;SA 0E4F;AL 0E50..0E59;NU -0E5A..0E5B;NS +0E5A..0E5B;BA 0E81..0E82;SA 0E84;SA 0E87..0E88;SA @@ -342,25 +355,31 @@ 0EA5;SA 0EA7;SA 0EAA..0EAB;SA -0EAD..0EB0;SA -0EB1;CM -0EB2..0EB3;SA -0EB4..0EB9;CM -0EBB..0EBC;CM -0EBD;SA +0EAD..0EB9;SA +0EBB..0EBD;SA 0EC0..0EC4;SA 0EC6;SA -0EC8..0ECD;CM +0EC8..0ECD;SA 0ED0..0ED9;NU 0EDC..0EDD;SA -0F00..0F0A;AL +0F00;AL +0F01..0F04;BB +0F05;AL +0F06..0F07;BB +0F08;GL +0F09..0F0A;BB 0F0B;BA 0F0C;GL -0F0D..0F17;AL +0F0D..0F11;EX +0F12;GL +0F13;AL +0F14;EX +0F15..0F17;AL 0F18..0F19;CM 0F1A..0F1F;AL 0F20..0F29;NU -0F2A..0F34;AL +0F2A..0F33;AL +0F34;BA 0F35;CM 0F36;AL 0F37;CM @@ -373,91 +392,93 @@ 0F3E..0F3F;CM 0F40..0F47;AL 0F49..0F6A;AL -0F71..0F84;CM -0F85;AL +0F71..0F7E;CM +0F7F;BA +0F80..0F84;CM +0F85;BA 0F86..0F87;CM 0F88..0F8B;AL 0F90..0F97;CM 0F99..0FBC;CM -0FBE..0FC5;AL +0FBE..0FBF;BA +0FC0..0FC5;AL 0FC6;CM 0FC7..0FCC;AL 0FCF;AL +0FD0..0FD1;BB 1000..1021;SA 1023..1027;SA 1029..102A;SA -102C..1032;CM -1036..1039;CM +102C..1032;SA +1036..1039;SA 1040..1049;NU -104A..104F;AL -1050..1055;SA -1056..1059;CM +104A..104B;BA +104C..104F;AL +1050..1059;SA 10A0..10C5;AL -10D0..10F8;AL -10FB;AL -1100..1159;ID -115F..11A2;ID -11A8..11F9;ID -1200..1206;AL -1208..1246;AL -1248;AL +10D0..10FC;AL +1100..1159;JL +115F;JL +1160..11A2;JV +11A8..11F9;JT +1200..1248;AL 124A..124D;AL 1250..1256;AL 1258;AL 125A..125D;AL -1260..1286;AL -1288;AL +1260..1288;AL 128A..128D;AL -1290..12AE;AL -12B0;AL +1290..12B0;AL 12B2..12B5;AL 12B8..12BE;AL 12C0;AL 12C2..12C5;AL -12C8..12CE;AL -12D0..12D6;AL -12D8..12EE;AL -12F0..130E;AL -1310;AL +12C8..12D6;AL +12D8..1310;AL 1312..1315;AL -1318..131E;AL -1320..1346;AL -1348..135A;AL +1318..135A;AL +135F;CM +1360;AL 1361;BA -1362..1368;AL -1369..1371;NU -1372..137C;AL +1362..137C;AL +1380..1399;AL 13A0..13F4;AL 1401..1676;AL 1680;BA 1681..169A;AL 169B;OP 169C;CL -16A0..16F0;AL +16A0..16EA;AL +16EB..16ED;BA +16EE..16F0;AL 1700..170C;AL 170E..1711;AL 1712..1714;CM 1720..1731;AL 1732..1734;CM -1735..1736;AL +1735..1736;BA 1740..1751;AL 1752..1753;CM 1760..176C;AL 176E..1770;AL 1772..1773;CM -1780..17B5;SA -17B6..17D3;CM -17D4;NS -17D5;BA -17D6..17DA;NS +1780..17D3;SA +17D4..17D5;BA +17D6;NS +17D7;SA +17D8;BA +17D9;AL +17DA;BA 17DB;PR -17DC;AL -17DD;CM +17DC..17DD;SA 17E0..17E9;NU 17F0..17F9;AL -1800..1805;AL +1800..1801;AL +1802..1805;BA 1806;BB -1807..180A;AL +1807;AL +1808..1809;BA +180A;AL 180B..180D;CM 180E;GL 1810..1819;NU @@ -470,10 +491,28 @@ 1940;AL 1944..1945;EX 1946..194F;NU -1950..196D;AL -1970..1974;AL -19E0..19FF;AL -1D00..1D6B;AL +1950..196D;SA +1970..1974;SA +1980..19A9;SA +19B0..19C9;SA +19D0..19D9;NU +19DE..19DF;SA +19E0..1A16;AL +1A17..1A1B;CM +1A1E;BA +1A1F;AL +1B00..1B04;CM +1B05..1B33;AL +1B34..1B44;CM +1B45..1B4B;AL +1B50..1B59;NU +1B5A..1B60;BA +1B61..1B6A;AL +1B6B..1B73;CM +1B74..1B7C;AL +1D00..1DBF;AL +1DC0..1DCA;CM +1DFE..1DFF;CM 1E00..1E9B;AL 1EA0..1EF9;AL 1F00..1F15;AL @@ -519,14 +558,18 @@ 2038;AL 2039..203A;QU 203B;AI -203C;NS -203D..2043;AL +203C..203D;NS +203E..2043;AL 2044;IS 2045;OP 2046;CL -2047..2054;AL +2047..2049;NS +204A..2055;AL +2056;BA 2057;AL -205F;BA +2058..205B;BA +205C;AL +205D..205F;BA 2060;WJ 2061..2063;AL 206A..206F;CM @@ -541,10 +584,11 @@ 2085..208C;AL 208D;OP 208E;CL +2090..2094;AL 20A0..20A6;PR 20A7;PO -20A8..20B1;PR -20D0..20EA;CM +20A8..20B5;PR +20D0..20EF;CM 2100..2102;AL 2103;PO 2104;AL @@ -559,8 +603,7 @@ 2121..2122;AI 2123..212A;AL 212B;AI -212C..213B;AL -213D..214B;AL +212C..214E;AL 2153;AL 2154..2155;AI 2156..215A;AL @@ -571,7 +614,7 @@ 2160..216B;AI 216C..216F;AL 2170..2179;AI -217A..2183;AL +217A..2184;AL 2190..2199;AI 219A..21D1;AL 21D2;AI @@ -639,11 +682,7 @@ 2313..2328;AL 2329;OP 232A;CL -232B..23B3;AL -23B4;OP -23B5;CL -23B6;QU -23B7..23D0;AL +232B..23E7;AL 2400..2426;AL 2440..244A;AL 2460..24FE;AI @@ -685,7 +724,7 @@ 260E..260F;AI 2610..2613;AL 2614..2617;AI -2619..261B;AL +2618..261B;AL 261C;AI 261D;AL 261E;AI @@ -703,9 +742,8 @@ 266C..266D;AI 266E;AL 266F;AI -2670..267D;AL -2680..2691;AL -26A0..26A1;AL +2670..269C;AL +26A0..26B2;AL 2701..2704;AL 2706..2709;AL 270C..2727;AL @@ -736,6 +774,10 @@ 2794;AL 2798..27AF;AL 27B1..27BE;AL +27C0..27C4;AL +27C5;OP +27C6;CL +27C7..27CA;AL 27D0..27E5;AL 27E6;OP 27E7;CL @@ -774,7 +816,33 @@ 29DC..29FB;AL 29FC;OP 29FD;CL -29FE..2B0D;AL +29FE..2B1A;AL +2B20..2B23;AL +2C00..2C2E;AL +2C30..2C5E;AL +2C60..2C6C;AL +2C74..2C77;AL +2C80..2CEA;AL +2CF9..2CFC;BA +2CFD;AL +2CFE..2CFF;BA +2D00..2D25;AL +2D30..2D65;AL +2D6F;AL +2D80..2D96;AL +2DA0..2DA6;AL +2DA8..2DAE;AL +2DB0..2DB6;AL +2DB8..2DBE;AL +2DC0..2DC6;AL +2DC8..2DCE;AL +2DD0..2DD6;AL +2DD8..2DDE;AL +2E00..2E0D;QU +2E0E..2E15;BA +2E16;AL +2E17;BA +2E1C..2E1D;QU 2E80..2E99;ID 2E9B..2EF3;ID 2F00..2FD5;ID @@ -862,27 +930,859 @@ 3105..312C;ID 3131..318E;ID 3190..31B7;ID +31C0..31CF;ID 31F0..31FF;NS 3200..321E;ID 3220..3243;ID -3250..327D;ID -327F..32FE;ID +3250..32FE;ID 3300..33FF;ID 3400..4DB5;ID 4DC0..4DFF;AL -4E00..9FA5;ID -A000..A48C;ID +4E00..9FBB;ID +A000..A014;ID +A015;NS +A016..A48C;ID A490..A4C6;ID -AC00..D7A3;ID +A700..A71A;AL +A720..A721;AL +A800..A801;AL +A802;CM +A803..A805;AL +A806;CM +A807..A80A;AL +A80B;CM +A80C..A822;AL +A823..A827;CM +A828..A82B;AL +A840..A873;AL +A874..A875;BB +A876..A877;EX +AC00;H2 +AC01..AC1B;H3 +AC1C;H2 +AC1D..AC37;H3 +AC38;H2 +AC39..AC53;H3 +AC54;H2 +AC55..AC6F;H3 +AC70;H2 +AC71..AC8B;H3 +AC8C;H2 +AC8D..ACA7;H3 +ACA8;H2 +ACA9..ACC3;H3 +ACC4;H2 +ACC5..ACDF;H3 +ACE0;H2 +ACE1..ACFB;H3 +ACFC;H2 +ACFD..AD17;H3 +AD18;H2 +AD19..AD33;H3 +AD34;H2 +AD35..AD4F;H3 +AD50;H2 +AD51..AD6B;H3 +AD6C;H2 +AD6D..AD87;H3 +AD88;H2 +AD89..ADA3;H3 +ADA4;H2 +ADA5..ADBF;H3 +ADC0;H2 +ADC1..ADDB;H3 +ADDC;H2 +ADDD..ADF7;H3 +ADF8;H2 +ADF9..AE13;H3 +AE14;H2 +AE15..AE2F;H3 +AE30;H2 +AE31..AE4B;H3 +AE4C;H2 +AE4D..AE67;H3 +AE68;H2 +AE69..AE83;H3 +AE84;H2 +AE85..AE9F;H3 +AEA0;H2 +AEA1..AEBB;H3 +AEBC;H2 +AEBD..AED7;H3 +AED8;H2 +AED9..AEF3;H3 +AEF4;H2 +AEF5..AF0F;H3 +AF10;H2 +AF11..AF2B;H3 +AF2C;H2 +AF2D..AF47;H3 +AF48;H2 +AF49..AF63;H3 +AF64;H2 +AF65..AF7F;H3 +AF80;H2 +AF81..AF9B;H3 +AF9C;H2 +AF9D..AFB7;H3 +AFB8;H2 +AFB9..AFD3;H3 +AFD4;H2 +AFD5..AFEF;H3 +AFF0;H2 +AFF1..B00B;H3 +B00C;H2 +B00D..B027;H3 +B028;H2 +B029..B043;H3 +B044;H2 +B045..B05F;H3 +B060;H2 +B061..B07B;H3 +B07C;H2 +B07D..B097;H3 +B098;H2 +B099..B0B3;H3 +B0B4;H2 +B0B5..B0CF;H3 +B0D0;H2 +B0D1..B0EB;H3 +B0EC;H2 +B0ED..B107;H3 +B108;H2 +B109..B123;H3 +B124;H2 +B125..B13F;H3 +B140;H2 +B141..B15B;H3 +B15C;H2 +B15D..B177;H3 +B178;H2 +B179..B193;H3 +B194;H2 +B195..B1AF;H3 +B1B0;H2 +B1B1..B1CB;H3 +B1CC;H2 +B1CD..B1E7;H3 +B1E8;H2 +B1E9..B203;H3 +B204;H2 +B205..B21F;H3 +B220;H2 +B221..B23B;H3 +B23C;H2 +B23D..B257;H3 +B258;H2 +B259..B273;H3 +B274;H2 +B275..B28F;H3 +B290;H2 +B291..B2AB;H3 +B2AC;H2 +B2AD..B2C7;H3 +B2C8;H2 +B2C9..B2E3;H3 +B2E4;H2 +B2E5..B2FF;H3 +B300;H2 +B301..B31B;H3 +B31C;H2 +B31D..B337;H3 +B338;H2 +B339..B353;H3 +B354;H2 +B355..B36F;H3 +B370;H2 +B371..B38B;H3 +B38C;H2 +B38D..B3A7;H3 +B3A8;H2 +B3A9..B3C3;H3 +B3C4;H2 +B3C5..B3DF;H3 +B3E0;H2 +B3E1..B3FB;H3 +B3FC;H2 +B3FD..B417;H3 +B418;H2 +B419..B433;H3 +B434;H2 +B435..B44F;H3 +B450;H2 +B451..B46B;H3 +B46C;H2 +B46D..B487;H3 +B488;H2 +B489..B4A3;H3 +B4A4;H2 +B4A5..B4BF;H3 +B4C0;H2 +B4C1..B4DB;H3 +B4DC;H2 +B4DD..B4F7;H3 +B4F8;H2 +B4F9..B513;H3 +B514;H2 +B515..B52F;H3 +B530;H2 +B531..B54B;H3 +B54C;H2 +B54D..B567;H3 +B568;H2 +B569..B583;H3 +B584;H2 +B585..B59F;H3 +B5A0;H2 +B5A1..B5BB;H3 +B5BC;H2 +B5BD..B5D7;H3 +B5D8;H2 +B5D9..B5F3;H3 +B5F4;H2 +B5F5..B60F;H3 +B610;H2 +B611..B62B;H3 +B62C;H2 +B62D..B647;H3 +B648;H2 +B649..B663;H3 +B664;H2 +B665..B67F;H3 +B680;H2 +B681..B69B;H3 +B69C;H2 +B69D..B6B7;H3 +B6B8;H2 +B6B9..B6D3;H3 +B6D4;H2 +B6D5..B6EF;H3 +B6F0;H2 +B6F1..B70B;H3 +B70C;H2 +B70D..B727;H3 +B728;H2 +B729..B743;H3 +B744;H2 +B745..B75F;H3 +B760;H2 +B761..B77B;H3 +B77C;H2 +B77D..B797;H3 +B798;H2 +B799..B7B3;H3 +B7B4;H2 +B7B5..B7CF;H3 +B7D0;H2 +B7D1..B7EB;H3 +B7EC;H2 +B7ED..B807;H3 +B808;H2 +B809..B823;H3 +B824;H2 +B825..B83F;H3 +B840;H2 +B841..B85B;H3 +B85C;H2 +B85D..B877;H3 +B878;H2 +B879..B893;H3 +B894;H2 +B895..B8AF;H3 +B8B0;H2 +B8B1..B8CB;H3 +B8CC;H2 +B8CD..B8E7;H3 +B8E8;H2 +B8E9..B903;H3 +B904;H2 +B905..B91F;H3 +B920;H2 +B921..B93B;H3 +B93C;H2 +B93D..B957;H3 +B958;H2 +B959..B973;H3 +B974;H2 +B975..B98F;H3 +B990;H2 +B991..B9AB;H3 +B9AC;H2 +B9AD..B9C7;H3 +B9C8;H2 +B9C9..B9E3;H3 +B9E4;H2 +B9E5..B9FF;H3 +BA00;H2 +BA01..BA1B;H3 +BA1C;H2 +BA1D..BA37;H3 +BA38;H2 +BA39..BA53;H3 +BA54;H2 +BA55..BA6F;H3 +BA70;H2 +BA71..BA8B;H3 +BA8C;H2 +BA8D..BAA7;H3 +BAA8;H2 +BAA9..BAC3;H3 +BAC4;H2 +BAC5..BADF;H3 +BAE0;H2 +BAE1..BAFB;H3 +BAFC;H2 +BAFD..BB17;H3 +BB18;H2 +BB19..BB33;H3 +BB34;H2 +BB35..BB4F;H3 +BB50;H2 +BB51..BB6B;H3 +BB6C;H2 +BB6D..BB87;H3 +BB88;H2 +BB89..BBA3;H3 +BBA4;H2 +BBA5..BBBF;H3 +BBC0;H2 +BBC1..BBDB;H3 +BBDC;H2 +BBDD..BBF7;H3 +BBF8;H2 +BBF9..BC13;H3 +BC14;H2 +BC15..BC2F;H3 +BC30;H2 +BC31..BC4B;H3 +BC4C;H2 +BC4D..BC67;H3 +BC68;H2 +BC69..BC83;H3 +BC84;H2 +BC85..BC9F;H3 +BCA0;H2 +BCA1..BCBB;H3 +BCBC;H2 +BCBD..BCD7;H3 +BCD8;H2 +BCD9..BCF3;H3 +BCF4;H2 +BCF5..BD0F;H3 +BD10;H2 +BD11..BD2B;H3 +BD2C;H2 +BD2D..BD47;H3 +BD48;H2 +BD49..BD63;H3 +BD64;H2 +BD65..BD7F;H3 +BD80;H2 +BD81..BD9B;H3 +BD9C;H2 +BD9D..BDB7;H3 +BDB8;H2 +BDB9..BDD3;H3 +BDD4;H2 +BDD5..BDEF;H3 +BDF0;H2 +BDF1..BE0B;H3 +BE0C;H2 +BE0D..BE27;H3 +BE28;H2 +BE29..BE43;H3 +BE44;H2 +BE45..BE5F;H3 +BE60;H2 +BE61..BE7B;H3 +BE7C;H2 +BE7D..BE97;H3 +BE98;H2 +BE99..BEB3;H3 +BEB4;H2 +BEB5..BECF;H3 +BED0;H2 +BED1..BEEB;H3 +BEEC;H2 +BEED..BF07;H3 +BF08;H2 +BF09..BF23;H3 +BF24;H2 +BF25..BF3F;H3 +BF40;H2 +BF41..BF5B;H3 +BF5C;H2 +BF5D..BF77;H3 +BF78;H2 +BF79..BF93;H3 +BF94;H2 +BF95..BFAF;H3 +BFB0;H2 +BFB1..BFCB;H3 +BFCC;H2 +BFCD..BFE7;H3 +BFE8;H2 +BFE9..C003;H3 +C004;H2 +C005..C01F;H3 +C020;H2 +C021..C03B;H3 +C03C;H2 +C03D..C057;H3 +C058;H2 +C059..C073;H3 +C074;H2 +C075..C08F;H3 +C090;H2 +C091..C0AB;H3 +C0AC;H2 +C0AD..C0C7;H3 +C0C8;H2 +C0C9..C0E3;H3 +C0E4;H2 +C0E5..C0FF;H3 +C100;H2 +C101..C11B;H3 +C11C;H2 +C11D..C137;H3 +C138;H2 +C139..C153;H3 +C154;H2 +C155..C16F;H3 +C170;H2 +C171..C18B;H3 +C18C;H2 +C18D..C1A7;H3 +C1A8;H2 +C1A9..C1C3;H3 +C1C4;H2 +C1C5..C1DF;H3 +C1E0;H2 +C1E1..C1FB;H3 +C1FC;H2 +C1FD..C217;H3 +C218;H2 +C219..C233;H3 +C234;H2 +C235..C24F;H3 +C250;H2 +C251..C26B;H3 +C26C;H2 +C26D..C287;H3 +C288;H2 +C289..C2A3;H3 +C2A4;H2 +C2A5..C2BF;H3 +C2C0;H2 +C2C1..C2DB;H3 +C2DC;H2 +C2DD..C2F7;H3 +C2F8;H2 +C2F9..C313;H3 +C314;H2 +C315..C32F;H3 +C330;H2 +C331..C34B;H3 +C34C;H2 +C34D..C367;H3 +C368;H2 +C369..C383;H3 +C384;H2 +C385..C39F;H3 +C3A0;H2 +C3A1..C3BB;H3 +C3BC;H2 +C3BD..C3D7;H3 +C3D8;H2 +C3D9..C3F3;H3 +C3F4;H2 +C3F5..C40F;H3 +C410;H2 +C411..C42B;H3 +C42C;H2 +C42D..C447;H3 +C448;H2 +C449..C463;H3 +C464;H2 +C465..C47F;H3 +C480;H2 +C481..C49B;H3 +C49C;H2 +C49D..C4B7;H3 +C4B8;H2 +C4B9..C4D3;H3 +C4D4;H2 +C4D5..C4EF;H3 +C4F0;H2 +C4F1..C50B;H3 +C50C;H2 +C50D..C527;H3 +C528;H2 +C529..C543;H3 +C544;H2 +C545..C55F;H3 +C560;H2 +C561..C57B;H3 +C57C;H2 +C57D..C597;H3 +C598;H2 +C599..C5B3;H3 +C5B4;H2 +C5B5..C5CF;H3 +C5D0;H2 +C5D1..C5EB;H3 +C5EC;H2 +C5ED..C607;H3 +C608;H2 +C609..C623;H3 +C624;H2 +C625..C63F;H3 +C640;H2 +C641..C65B;H3 +C65C;H2 +C65D..C677;H3 +C678;H2 +C679..C693;H3 +C694;H2 +C695..C6AF;H3 +C6B0;H2 +C6B1..C6CB;H3 +C6CC;H2 +C6CD..C6E7;H3 +C6E8;H2 +C6E9..C703;H3 +C704;H2 +C705..C71F;H3 +C720;H2 +C721..C73B;H3 +C73C;H2 +C73D..C757;H3 +C758;H2 +C759..C773;H3 +C774;H2 +C775..C78F;H3 +C790;H2 +C791..C7AB;H3 +C7AC;H2 +C7AD..C7C7;H3 +C7C8;H2 +C7C9..C7E3;H3 +C7E4;H2 +C7E5..C7FF;H3 +C800;H2 +C801..C81B;H3 +C81C;H2 +C81D..C837;H3 +C838;H2 +C839..C853;H3 +C854;H2 +C855..C86F;H3 +C870;H2 +C871..C88B;H3 +C88C;H2 +C88D..C8A7;H3 +C8A8;H2 +C8A9..C8C3;H3 +C8C4;H2 +C8C5..C8DF;H3 +C8E0;H2 +C8E1..C8FB;H3 +C8FC;H2 +C8FD..C917;H3 +C918;H2 +C919..C933;H3 +C934;H2 +C935..C94F;H3 +C950;H2 +C951..C96B;H3 +C96C;H2 +C96D..C987;H3 +C988;H2 +C989..C9A3;H3 +C9A4;H2 +C9A5..C9BF;H3 +C9C0;H2 +C9C1..C9DB;H3 +C9DC;H2 +C9DD..C9F7;H3 +C9F8;H2 +C9F9..CA13;H3 +CA14;H2 +CA15..CA2F;H3 +CA30;H2 +CA31..CA4B;H3 +CA4C;H2 +CA4D..CA67;H3 +CA68;H2 +CA69..CA83;H3 +CA84;H2 +CA85..CA9F;H3 +CAA0;H2 +CAA1..CABB;H3 +CABC;H2 +CABD..CAD7;H3 +CAD8;H2 +CAD9..CAF3;H3 +CAF4;H2 +CAF5..CB0F;H3 +CB10;H2 +CB11..CB2B;H3 +CB2C;H2 +CB2D..CB47;H3 +CB48;H2 +CB49..CB63;H3 +CB64;H2 +CB65..CB7F;H3 +CB80;H2 +CB81..CB9B;H3 +CB9C;H2 +CB9D..CBB7;H3 +CBB8;H2 +CBB9..CBD3;H3 +CBD4;H2 +CBD5..CBEF;H3 +CBF0;H2 +CBF1..CC0B;H3 +CC0C;H2 +CC0D..CC27;H3 +CC28;H2 +CC29..CC43;H3 +CC44;H2 +CC45..CC5F;H3 +CC60;H2 +CC61..CC7B;H3 +CC7C;H2 +CC7D..CC97;H3 +CC98;H2 +CC99..CCB3;H3 +CCB4;H2 +CCB5..CCCF;H3 +CCD0;H2 +CCD1..CCEB;H3 +CCEC;H2 +CCED..CD07;H3 +CD08;H2 +CD09..CD23;H3 +CD24;H2 +CD25..CD3F;H3 +CD40;H2 +CD41..CD5B;H3 +CD5C;H2 +CD5D..CD77;H3 +CD78;H2 +CD79..CD93;H3 +CD94;H2 +CD95..CDAF;H3 +CDB0;H2 +CDB1..CDCB;H3 +CDCC;H2 +CDCD..CDE7;H3 +CDE8;H2 +CDE9..CE03;H3 +CE04;H2 +CE05..CE1F;H3 +CE20;H2 +CE21..CE3B;H3 +CE3C;H2 +CE3D..CE57;H3 +CE58;H2 +CE59..CE73;H3 +CE74;H2 +CE75..CE8F;H3 +CE90;H2 +CE91..CEAB;H3 +CEAC;H2 +CEAD..CEC7;H3 +CEC8;H2 +CEC9..CEE3;H3 +CEE4;H2 +CEE5..CEFF;H3 +CF00;H2 +CF01..CF1B;H3 +CF1C;H2 +CF1D..CF37;H3 +CF38;H2 +CF39..CF53;H3 +CF54;H2 +CF55..CF6F;H3 +CF70;H2 +CF71..CF8B;H3 +CF8C;H2 +CF8D..CFA7;H3 +CFA8;H2 +CFA9..CFC3;H3 +CFC4;H2 +CFC5..CFDF;H3 +CFE0;H2 +CFE1..CFFB;H3 +CFFC;H2 +CFFD..D017;H3 +D018;H2 +D019..D033;H3 +D034;H2 +D035..D04F;H3 +D050;H2 +D051..D06B;H3 +D06C;H2 +D06D..D087;H3 +D088;H2 +D089..D0A3;H3 +D0A4;H2 +D0A5..D0BF;H3 +D0C0;H2 +D0C1..D0DB;H3 +D0DC;H2 +D0DD..D0F7;H3 +D0F8;H2 +D0F9..D113;H3 +D114;H2 +D115..D12F;H3 +D130;H2 +D131..D14B;H3 +D14C;H2 +D14D..D167;H3 +D168;H2 +D169..D183;H3 +D184;H2 +D185..D19F;H3 +D1A0;H2 +D1A1..D1BB;H3 +D1BC;H2 +D1BD..D1D7;H3 +D1D8;H2 +D1D9..D1F3;H3 +D1F4;H2 +D1F5..D20F;H3 +D210;H2 +D211..D22B;H3 +D22C;H2 +D22D..D247;H3 +D248;H2 +D249..D263;H3 +D264;H2 +D265..D27F;H3 +D280;H2 +D281..D29B;H3 +D29C;H2 +D29D..D2B7;H3 +D2B8;H2 +D2B9..D2D3;H3 +D2D4;H2 +D2D5..D2EF;H3 +D2F0;H2 +D2F1..D30B;H3 +D30C;H2 +D30D..D327;H3 +D328;H2 +D329..D343;H3 +D344;H2 +D345..D35F;H3 +D360;H2 +D361..D37B;H3 +D37C;H2 +D37D..D397;H3 +D398;H2 +D399..D3B3;H3 +D3B4;H2 +D3B5..D3CF;H3 +D3D0;H2 +D3D1..D3EB;H3 +D3EC;H2 +D3ED..D407;H3 +D408;H2 +D409..D423;H3 +D424;H2 +D425..D43F;H3 +D440;H2 +D441..D45B;H3 +D45C;H2 +D45D..D477;H3 +D478;H2 +D479..D493;H3 +D494;H2 +D495..D4AF;H3 +D4B0;H2 +D4B1..D4CB;H3 +D4CC;H2 +D4CD..D4E7;H3 +D4E8;H2 +D4E9..D503;H3 +D504;H2 +D505..D51F;H3 +D520;H2 +D521..D53B;H3 +D53C;H2 +D53D..D557;H3 +D558;H2 +D559..D573;H3 +D574;H2 +D575..D58F;H3 +D590;H2 +D591..D5AB;H3 +D5AC;H2 +D5AD..D5C7;H3 +D5C8;H2 +D5C9..D5E3;H3 +D5E4;H2 +D5E5..D5FF;H3 +D600;H2 +D601..D61B;H3 +D61C;H2 +D61D..D637;H3 +D638;H2 +D639..D653;H3 +D654;H2 +D655..D66F;H3 +D670;H2 +D671..D68B;H3 +D68C;H2 +D68D..D6A7;H3 +D6A8;H2 +D6A9..D6C3;H3 +D6C4;H2 +D6C5..D6DF;H3 +D6E0;H2 +D6E1..D6FB;H3 +D6FC;H2 +D6FD..D717;H3 +D718;H2 +D719..D733;H3 +D734;H2 +D735..D74F;H3 +D750;H2 +D751..D76B;H3 +D76C;H2 +D76D..D787;H3 +D788;H2 +D789..D7A3;H3 D800..DB7F;SG DB80..DBFF;SG DC00..DFFF;SG E000..F801;XX F802..F86F;AL F870..F87F;CM -F880..F8FF;AL +F880..F883;AL +F884..F899;CM +F89A..F89E;AL +F89F;CM +F8A0;PR +F8A1..F8B3;AL +F8B4..F8B6;CL +F8B7;ID +F8B8;NS +F8B9;BA +F8BA;NS +F8BB;AI +F8BC;ID +F8BD;IN +F8BE;OP +F8BF;CL +F8C0;ID +F8C1..F8D6;NS +F8D7..F8FF;AL F900..FA2D;ID FA30..FA6A;ID +FA70..FAD9;ID FB00..FB06;AL FB13..FB17;AL FB1D;AL @@ -902,6 +1802,13 @@ FDF0..FDFB;AL FDFC;PO FDFD;AL FE00..FE0F;CM +FE10;IS +FE11..FE12;CL +FE13..FE14;IS +FE15..FE16;EX +FE17;OP +FE18;CL +FE19;IN FE20..FE23;CM FE30..FE34;ID FE35;OP @@ -999,12 +1906,16 @@ FFFD;AI 10080..100FA;AL 10100..10102;BA 10107..10133;AL -10137..1013F;AL +10137..1018A;AL 10300..1031E;AL 10320..10323;AL 10330..1034A;AL 10380..1039D;AL 1039F;BA +103A0..103C3;AL +103C8..103CF;AL +103D0;BA +103D1..103D5;AL 10400..1049D;AL 104A0..104A9;NU 10800..10805;AL @@ -1013,6 +1924,23 @@ FFFD;AI 10837..10838;AL 1083C;AL 1083F;AL +10900..10919;AL +1091F;BA +10A00;AL +10A01..10A03;CM +10A05..10A06;CM +10A0C..10A0F;CM +10A10..10A13;AL +10A15..10A17;AL +10A19..10A33;AL +10A38..10A3A;CM +10A3F;CM +10A40..10A47;AL +10A50..10A57;BA +10A58;AL +12000..1236E;AL +12400..12462;AL +12470..12473;BA 1D000..1D0F5;AL 1D100..1D126;AL 1D12A..1D164;AL @@ -1024,7 +1952,11 @@ FFFD;AI 1D18C..1D1A9;AL 1D1AA..1D1AD;CM 1D1AE..1D1DD;AL +1D200..1D241;AL +1D242..1D244;CM +1D245;AL 1D300..1D356;AL +1D360..1D371;AL 1D400..1D454;AL 1D456..1D49C;AL 1D49E..1D49F;AL @@ -1043,8 +1975,8 @@ FFFD;AI 1D540..1D544;AL 1D546;AL 1D54A..1D550;AL -1D552..1D6A3;AL -1D6A8..1D7C9;AL +1D552..1D6A5;AL +1D6A8..1D7CB;AL 1D7CE..1D7FF;NU 20000..2A6D6;ID 2F800..2FA1D;ID @@ -1053,3 +1985,5 @@ E0020..E007F;CM E0100..E01EF;CM F0000..FFFFD;XX 100000..10FFFD;XX + +# EOF diff --git a/icuSources/data/unidata/NormalizationCorrections.txt b/icuSources/data/unidata/NormalizationCorrections.txt index d76c150d..6952f41d 100644 --- a/icuSources/data/unidata/NormalizationCorrections.txt +++ b/icuSources/data/unidata/NormalizationCorrections.txt @@ -1,8 +1,12 @@ -# NormalizationCorrections-4.0.0.txt +# NormalizationCorrections-5.0.0.txt +# Date: 2006-07-14, 11:23:00 PDT [KW] # # This file is a normative contributory data file in the # Unicode Character Database. # +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# # The normalization stabilization policy of the Unicode # Consortium ordinarily precludes any change to the decomposition # for any character, once established in a relevant version @@ -26,14 +30,15 @@ # will be made to keep the entries limited to just those fixes. # # Interpretation of the fields: -# Field 1: Unicode code point -# Field 2: Original (erroneous) decomposition -# Field 3: Corrected decomposition -# Field 4: Version of Unicode for which the correction was +# Field 0: Unicode code point +# Field 1: Original (erroneous) decomposition +# Field 2: Corrected decomposition +# Field 3: Version of Unicode for which the correction was # entered into UnicodeData.txt, in n.n.n format. # Comment: Indicates the Unicode Corrigendum which documents # the correction # +# For more information, see UAX #15, Unicode Normalization Forms. # F951;96FB;964B;3.2.0 # Corrigendum 3 2F868;2136A;36FC;4.0.0 # Corrigendum 4 diff --git a/icuSources/data/unidata/NormalizationTest.txt b/icuSources/data/unidata/NormalizationTest.txt index 7c8947a3..e8eaf17f 100644 --- a/icuSources/data/unidata/NormalizationTest.txt +++ b/icuSources/data/unidata/NormalizationTest.txt @@ -1,5 +1,10 @@ -# NormalizationTest-4.0.0.txt -# Date: 2003-02-25,23:12:31 GMT [MD] +# NormalizationTest-5.0.0.txt +# Date: 2006-06-07, 17:43:01 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html # # Normalization Test Suite # Format: @@ -540,6 +545,18 @@ 0FAC;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7; 0FB9;0F90 0FB5;0F90 0FB5;0F90 0FB5;0F90 0FB5; 1026;1026;1025 102E;1026;1025 102E; +10FC;10FC;10FC;10DC;10DC; +1B06;1B06;1B05 1B35;1B06;1B05 1B35; +1B08;1B08;1B07 1B35;1B08;1B07 1B35; +1B0A;1B0A;1B09 1B35;1B0A;1B09 1B35; +1B0C;1B0C;1B0B 1B35;1B0C;1B0B 1B35; +1B0E;1B0E;1B0D 1B35;1B0E;1B0D 1B35; +1B12;1B12;1B11 1B35;1B12;1B11 1B35; +1B3B;1B3B;1B3A 1B35;1B3B;1B3A 1B35; +1B3D;1B3D;1B3C 1B35;1B3D;1B3C 1B35; +1B40;1B40;1B3E 1B35;1B40;1B3E 1B35; +1B41;1B41;1B3F 1B35;1B41;1B3F 1B35; +1B43;1B43;1B42 1B35;1B43;1B42 1B35; 1D2C;1D2C;1D2C;0041;0041; 1D2D;1D2D;1D2D;00C6;00C6; 1D2E;1D2E;1D2E;0042;0042; @@ -600,6 +617,44 @@ 1D68;1D68;1D68;03C1;03C1; 1D69;1D69;1D69;03C6;03C6; 1D6A;1D6A;1D6A;03C7;03C7; +1D78;1D78;1D78;043D;043D; +1D9B;1D9B;1D9B;0252;0252; +1D9C;1D9C;1D9C;0063;0063; +1D9D;1D9D;1D9D;0255;0255; +1D9E;1D9E;1D9E;00F0;00F0; +1D9F;1D9F;1D9F;025C;025C; +1DA0;1DA0;1DA0;0066;0066; +1DA1;1DA1;1DA1;025F;025F; +1DA2;1DA2;1DA2;0261;0261; +1DA3;1DA3;1DA3;0265;0265; +1DA4;1DA4;1DA4;0268;0268; +1DA5;1DA5;1DA5;0269;0269; +1DA6;1DA6;1DA6;026A;026A; +1DA7;1DA7;1DA7;1D7B;1D7B; +1DA8;1DA8;1DA8;029D;029D; +1DA9;1DA9;1DA9;026D;026D; +1DAA;1DAA;1DAA;1D85;1D85; +1DAB;1DAB;1DAB;029F;029F; +1DAC;1DAC;1DAC;0271;0271; +1DAD;1DAD;1DAD;0270;0270; +1DAE;1DAE;1DAE;0272;0272; +1DAF;1DAF;1DAF;0273;0273; +1DB0;1DB0;1DB0;0274;0274; +1DB1;1DB1;1DB1;0275;0275; +1DB2;1DB2;1DB2;0278;0278; +1DB3;1DB3;1DB3;0282;0282; +1DB4;1DB4;1DB4;0283;0283; +1DB5;1DB5;1DB5;01AB;01AB; +1DB6;1DB6;1DB6;0289;0289; +1DB7;1DB7;1DB7;028A;028A; +1DB8;1DB8;1DB8;1D1C;1D1C; +1DB9;1DB9;1DB9;028B;028B; +1DBA;1DBA;1DBA;028C;028C; +1DBB;1DBB;1DBB;007A;007A; +1DBC;1DBC;1DBC;0290;0290; +1DBD;1DBD;1DBD;0291;0291; +1DBE;1DBE;1DBE;0292;0292; +1DBF;1DBF;1DBF;03B8;03B8; 1E00;1E00;0041 0325;1E00;0041 0325; 1E01;1E01;0061 0325;1E01;0061 0325; 1E02;1E02;0042 0307;1E02;0042 0307; @@ -1136,6 +1191,11 @@ 208C;208C;208C;003D;003D; 208D;208D;208D;0028;0028; 208E;208E;208E;0029;0029; +2090;2090;2090;0061;0061; +2091;2091;2091;0065;0065; +2092;2092;2092;006F;006F; +2093;2093;2093;0078;0078; +2094;2094;2094;0259;0259; 20A8;20A8;20A8;0052 0073;0052 0073; 2100;2100;2100;0061 002F 0063;0061 002F 0063; 2101;2101;2101;0061 002F 0073;0061 002F 0073; @@ -1183,6 +1243,7 @@ 2138;2138;2138;05D3;05D3; 2139;2139;2139;0069;0069; 213B;213B;213B;0046 0041 0058;0046 0041 0058; +213C;213C;213C;03C0;03C0; 213D;213D;213D;03B3;03B3; 213E;213E;213E;0393;0393; 213F;213F;213F;03A0;03A0; @@ -1431,6 +1492,7 @@ 2A75;2A75;2A75;003D 003D;003D 003D; 2A76;2A76;2A76;003D 003D 003D;003D 003D 003D; 2ADC;2ADD 0338;2ADD 0338;2ADD 0338;2ADD 0338; +2D6F;2D6F;2D6F;2D61;2D61; 2E9F;2E9F;2E9F;6BCD;6BCD; 2EF3;2EF3;2EF3;9F9F;9F9F; 2F00;2F00;2F00;4E00;4E00; @@ -1935,6 +1997,7 @@ 327B;327B;327B;D558;1112 1161; 327C;327C;327C;CC38 ACE0;110E 1161 11B7 1100 1169; 327D;327D;327D;C8FC C758;110C 116E 110B 1174; +327E;327E;327E;C6B0;110B 116E; 3280;3280;3280;4E00;4E00; 3281;3281;3281;4E8C;4E8C; 3282;3282;3282;4E09;4E09; @@ -13839,6 +13902,112 @@ FA67;9038;9038;9038;9038; FA68;96E3;96E3;96E3;96E3; FA69;97FF;97FF;97FF;97FF; FA6A;983B;983B;983B;983B; +FA70;4E26;4E26;4E26;4E26; +FA71;51B5;51B5;51B5;51B5; +FA72;5168;5168;5168;5168; +FA73;4F80;4F80;4F80;4F80; +FA74;5145;5145;5145;5145; +FA75;5180;5180;5180;5180; +FA76;52C7;52C7;52C7;52C7; +FA77;52FA;52FA;52FA;52FA; +FA78;559D;559D;559D;559D; +FA79;5555;5555;5555;5555; +FA7A;5599;5599;5599;5599; +FA7B;55E2;55E2;55E2;55E2; +FA7C;585A;585A;585A;585A; +FA7D;58B3;58B3;58B3;58B3; +FA7E;5944;5944;5944;5944; +FA7F;5954;5954;5954;5954; +FA80;5A62;5A62;5A62;5A62; +FA81;5B28;5B28;5B28;5B28; +FA82;5ED2;5ED2;5ED2;5ED2; +FA83;5ED9;5ED9;5ED9;5ED9; +FA84;5F69;5F69;5F69;5F69; +FA85;5FAD;5FAD;5FAD;5FAD; +FA86;60D8;60D8;60D8;60D8; +FA87;614E;614E;614E;614E; +FA88;6108;6108;6108;6108; +FA89;618E;618E;618E;618E; +FA8A;6160;6160;6160;6160; +FA8B;61F2;61F2;61F2;61F2; +FA8C;6234;6234;6234;6234; +FA8D;63C4;63C4;63C4;63C4; +FA8E;641C;641C;641C;641C; +FA8F;6452;6452;6452;6452; +FA90;6556;6556;6556;6556; +FA91;6674;6674;6674;6674; +FA92;6717;6717;6717;6717; +FA93;671B;671B;671B;671B; +FA94;6756;6756;6756;6756; +FA95;6B79;6B79;6B79;6B79; +FA96;6BBA;6BBA;6BBA;6BBA; +FA97;6D41;6D41;6D41;6D41; +FA98;6EDB;6EDB;6EDB;6EDB; +FA99;6ECB;6ECB;6ECB;6ECB; +FA9A;6F22;6F22;6F22;6F22; +FA9B;701E;701E;701E;701E; +FA9C;716E;716E;716E;716E; +FA9D;77A7;77A7;77A7;77A7; +FA9E;7235;7235;7235;7235; +FA9F;72AF;72AF;72AF;72AF; +FAA0;732A;732A;732A;732A; +FAA1;7471;7471;7471;7471; +FAA2;7506;7506;7506;7506; +FAA3;753B;753B;753B;753B; +FAA4;761D;761D;761D;761D; +FAA5;761F;761F;761F;761F; +FAA6;76CA;76CA;76CA;76CA; +FAA7;76DB;76DB;76DB;76DB; +FAA8;76F4;76F4;76F4;76F4; +FAA9;774A;774A;774A;774A; +FAAA;7740;7740;7740;7740; +FAAB;78CC;78CC;78CC;78CC; +FAAC;7AB1;7AB1;7AB1;7AB1; +FAAD;7BC0;7BC0;7BC0;7BC0; +FAAE;7C7B;7C7B;7C7B;7C7B; +FAAF;7D5B;7D5B;7D5B;7D5B; +FAB0;7DF4;7DF4;7DF4;7DF4; +FAB1;7F3E;7F3E;7F3E;7F3E; +FAB2;8005;8005;8005;8005; +FAB3;8352;8352;8352;8352; +FAB4;83EF;83EF;83EF;83EF; +FAB5;8779;8779;8779;8779; +FAB6;8941;8941;8941;8941; +FAB7;8986;8986;8986;8986; +FAB8;8996;8996;8996;8996; +FAB9;8ABF;8ABF;8ABF;8ABF; +FABA;8AF8;8AF8;8AF8;8AF8; +FABB;8ACB;8ACB;8ACB;8ACB; +FABC;8B01;8B01;8B01;8B01; +FABD;8AFE;8AFE;8AFE;8AFE; +FABE;8AED;8AED;8AED;8AED; +FABF;8B39;8B39;8B39;8B39; +FAC0;8B8A;8B8A;8B8A;8B8A; +FAC1;8D08;8D08;8D08;8D08; +FAC2;8F38;8F38;8F38;8F38; +FAC3;9072;9072;9072;9072; +FAC4;9199;9199;9199;9199; +FAC5;9276;9276;9276;9276; +FAC6;967C;967C;967C;967C; +FAC7;96E3;96E3;96E3;96E3; +FAC8;9756;9756;9756;9756; +FAC9;97DB;97DB;97DB;97DB; +FACA;97FF;97FF;97FF;97FF; +FACB;980B;980B;980B;980B; +FACC;983B;983B;983B;983B; +FACD;9B12;9B12;9B12;9B12; +FACE;9F9C;9F9C;9F9C;9F9C; +FACF;2284A;2284A;2284A;2284A; +FAD0;22844;22844;22844;22844; +FAD1;233D5;233D5;233D5;233D5; +FAD2;3B9D;3B9D;3B9D;3B9D; +FAD3;4018;4018;4018;4018; +FAD4;4039;4039;4039;4039; +FAD5;25249;25249;25249;25249; +FAD6;25CD0;25CD0;25CD0;25CD0; +FAD7;27ED3;27ED3;27ED3;27ED3; +FAD8;9F43;9F43;9F43;9F43; +FAD9;9F8E;9F8E;9F8E;9F8E; FB00;FB00;FB00;0066 0066;0066 0066; FB01;FB01;FB01;0066 0069;0066 0069; FB02;FB02;FB02;0066 006C;0066 006C; @@ -14488,6 +14657,16 @@ FDF9;FDF9;FDF9;0635 0644 0649;0635 0644 0649; FDFA;FDFA;FDFA;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645; FDFB;FDFB;FDFB;062C 0644 0020 062C 0644 0627 0644 0647;062C 0644 0020 062C 0644 0627 0644 0647; FDFC;FDFC;FDFC;0631 06CC 0627 0644;0631 06CC 0627 0644; +FE10;FE10;FE10;002C;002C; +FE11;FE11;FE11;3001;3001; +FE12;FE12;FE12;3002;3002; +FE13;FE13;FE13;003A;003A; +FE14;FE14;FE14;003B;003B; +FE15;FE15;FE15;0021;0021; +FE16;FE16;FE16;003F;003F; +FE17;FE17;FE17;3016;3016; +FE18;FE18;FE18;3017;3017; +FE19;FE19;FE19;002E 002E 002E;002E 002E 002E; FE30;FE30;FE30;002E 002E;002E 002E; FE31;FE31;FE31;2014;2014; FE32;FE32;FE32;2013;2013; @@ -15573,6 +15752,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 1D6A1;1D6A1;1D6A1;0078;0078; 1D6A2;1D6A2;1D6A2;0079;0079; 1D6A3;1D6A3;1D6A3;007A;007A; +1D6A4;1D6A4;1D6A4;0131;0131; +1D6A5;1D6A5;1D6A5;0237;0237; 1D6A8;1D6A8;1D6A8;0391;0391; 1D6A9;1D6A9;1D6A9;0392;0392; 1D6AA;1D6AA;1D6AA;0393;0393; @@ -15863,6 +16044,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 1D7C7;1D7C7;1D7C7;03C6;03C6; 1D7C8;1D7C8;1D7C8;03C1;03C1; 1D7C9;1D7C9;1D7C9;03C0;03C0; +1D7CA;1D7CA;1D7CA;03DC;03DC; +1D7CB;1D7CB;1D7CB;03DD;03DD; 1D7CE;1D7CE;1D7CE;0030;0030; 1D7CF;1D7CF;1D7CF;0031;0031; 1D7D0;1D7D0;1D7D0;0032;0032; @@ -16500,8 +16683,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 0313 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; 0061 0315 0300 05AE 0314 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062; 0061 0314 0315 0300 05AE 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062; -0061 035F 0315 0300 0315 0062;00E0 0315 0315 035F 0062;0061 0300 0315 0315 035F 0062;00E0 0315 0315 035F 0062;0061 0300 0315 0315 035F 0062; -0061 0315 035F 0315 0300 0062;00E0 0315 0315 035F 0062;0061 0300 0315 0315 035F 0062;00E0 0315 0315 035F 0062;0061 0300 0315 0315 035F 0062; +0061 035C 0315 0300 0315 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; +0061 0315 035C 0315 0300 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; 0061 059A 0316 302A 0316 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; 0061 0316 059A 0316 302A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; 0061 059A 0316 302A 0317 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062; @@ -16510,8 +16693,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 0318 059A 0316 302A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062; 0061 059A 0316 302A 0319 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062; 0061 0319 059A 0316 302A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062; -0061 035F 0315 0300 031A 0062;00E0 0315 031A 035F 0062;0061 0300 0315 031A 035F 0062;00E0 0315 031A 035F 0062;0061 0300 0315 031A 035F 0062; -0061 031A 035F 0315 0300 0062;00E0 031A 0315 035F 0062;0061 0300 031A 0315 035F 0062;00E0 031A 0315 035F 0062;0061 0300 031A 0315 035F 0062; +0061 035C 0315 0300 031A 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062; +0061 031A 035C 0315 0300 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062; 0061 302A 031B 0321 031B 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062; 0061 031B 302A 031B 0321 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062;0061 0321 031B 031B 302A 0062; 0061 059A 0316 302A 031C 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062; @@ -16632,18 +16815,28 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 0356 059A 0316 302A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062; 0061 0315 0300 05AE 0357 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062; 0061 0357 0315 0300 05AE 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062; -0061 0345 035D 035F 035D 0062;0061 035F 035D 035D 0345 0062;0061 035F 035D 035D 0345 0062;0061 035F 035D 035D 0345 0062;0061 035F 035D 035D 0345 0062; -0061 035D 0345 035D 035F 0062;0061 035F 035D 035D 0345 0062;0061 035F 035D 035D 0345 0062;0061 035F 035D 035D 0345 0062;0061 035F 035D 035D 0345 0062; -0061 0345 035D 035F 035E 0062;0061 035F 035D 035E 0345 0062;0061 035F 035D 035E 0345 0062;0061 035F 035D 035E 0345 0062;0061 035F 035D 035E 0345 0062; -0061 035E 0345 035D 035F 0062;0061 035F 035E 035D 0345 0062;0061 035F 035E 035D 0345 0062;0061 035F 035E 035D 0345 0062;0061 035F 035E 035D 0345 0062; -0061 035D 035F 0315 035F 0062;0061 0315 035F 035F 035D 0062;0061 0315 035F 035F 035D 0062;0061 0315 035F 035F 035D 0062;0061 0315 035F 035F 035D 0062; -0061 035F 035D 035F 0315 0062;0061 0315 035F 035F 035D 0062;0061 0315 035F 035F 035D 0062;0061 0315 035F 035F 035D 0062;0061 0315 035F 035F 035D 0062; -0061 0345 035D 035F 0360 0062;0061 035F 035D 0360 0345 0062;0061 035F 035D 0360 0345 0062;0061 035F 035D 0360 0345 0062;0061 035F 035D 0360 0345 0062; -0061 0360 0345 035D 035F 0062;0061 035F 0360 035D 0345 0062;0061 035F 0360 035D 0345 0062;0061 035F 0360 035D 0345 0062;0061 035F 0360 035D 0345 0062; -0061 0345 035D 035F 0361 0062;0061 035F 035D 0361 0345 0062;0061 035F 035D 0361 0345 0062;0061 035F 035D 0361 0345 0062;0061 035F 035D 0361 0345 0062; -0061 0361 0345 035D 035F 0062;0061 035F 0361 035D 0345 0062;0061 035F 0361 035D 0345 0062;0061 035F 0361 035D 0345 0062;0061 035F 0361 035D 0345 0062; -0061 035D 035F 0315 0362 0062;0061 0315 035F 0362 035D 0062;0061 0315 035F 0362 035D 0062;0061 0315 035F 0362 035D 0062;0061 0315 035F 0362 035D 0062; -0061 0362 035D 035F 0315 0062;0061 0315 0362 035F 035D 0062;0061 0315 0362 035F 035D 0062;0061 0315 0362 035F 035D 0062;0061 0315 0362 035F 035D 0062; +0061 035C 0315 0300 0358 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062; +0061 0358 035C 0315 0300 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062; +0061 059A 0316 302A 0359 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062; +0061 0359 059A 0316 302A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062; +0061 059A 0316 302A 035A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062; +0061 035A 059A 0316 302A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062; +0061 0315 0300 05AE 035B 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062; +0061 035B 0315 0300 05AE 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062; +0061 035D 035C 0315 035C 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; +0061 035C 035D 035C 0315 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; +0061 0345 035D 035C 035D 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062; +0061 035D 0345 035D 035C 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062; +0061 0345 035D 035C 035E 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062; +0061 035E 0345 035D 035C 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062; +0061 035D 035C 0315 035F 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062; +0061 035F 035D 035C 0315 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062; +0061 0345 035D 035C 0360 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062; +0061 0360 0345 035D 035C 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062; +0061 0345 035D 035C 0361 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062; +0061 0361 0345 035D 035C 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062; +0061 035D 035C 0315 0362 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062; +0061 0362 035D 035C 0315 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062; 0061 0315 0300 05AE 0363 0062;00E0 05AE 0363 0315 0062;0061 05AE 0300 0363 0315 0062;00E0 05AE 0363 0315 0062;0061 05AE 0300 0363 0315 0062; 0061 0363 0315 0300 05AE 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062; 0061 0315 0300 05AE 0364 0062;00E0 05AE 0364 0315 0062;0061 05AE 0300 0364 0315 0062;00E0 05AE 0364 0315 0062;0061 05AE 0300 0364 0315 0062; @@ -16712,6 +16905,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 05A0 0315 0300 05AE 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062; 0061 0315 0300 05AE 05A1 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062; 0061 05A1 0315 0300 05AE 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062; +0061 059A 0316 302A 05A2 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062; +0061 05A2 059A 0316 302A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062; 0061 059A 0316 302A 05A3 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062; 0061 05A3 059A 0316 302A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062; 0061 059A 0316 302A 05A4 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062; @@ -16758,6 +16953,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 05B8 05B9 05B8 05B7 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; 0061 05BB 05B9 05B8 05B9 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; 0061 05B9 05BB 05B9 05B8 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; +0061 05BB 05B9 05B8 05BA 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062; +0061 05BA 05BB 05B9 05B8 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062; 0061 05BC 05BB 05B9 05BB 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; 0061 05BB 05BC 05BB 05B9 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; 0061 05BD 05BC 05BB 05BC 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; @@ -16772,6 +16969,10 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 05C2 FB1E 05C2 05C1 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; 0061 0315 0300 05AE 05C4 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062; 0061 05C4 0315 0300 05AE 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062; +0061 059A 0316 302A 05C5 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062; +0061 05C5 059A 0316 302A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062; +0061 05B9 05B8 05B7 05C7 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062; +0061 05C7 05B9 05B8 05B7 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062; 0061 0315 0300 05AE 0610 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062; 0061 0610 0315 0300 05AE 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062; 0061 0315 0300 05AE 0611 0062;00E0 05AE 0611 0315 0062;0061 05AE 0300 0611 0315 0062;00E0 05AE 0611 0315 0062;0061 05AE 0300 0611 0315 0062; @@ -16812,6 +17013,18 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 0657 0315 0300 05AE 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062; 0061 0315 0300 05AE 0658 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062; 0061 0658 0315 0300 05AE 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062; +0061 0315 0300 05AE 0659 0062;00E0 05AE 0659 0315 0062;0061 05AE 0300 0659 0315 0062;00E0 05AE 0659 0315 0062;0061 05AE 0300 0659 0315 0062; +0061 0659 0315 0300 05AE 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062; +0061 0315 0300 05AE 065A 0062;00E0 05AE 065A 0315 0062;0061 05AE 0300 065A 0315 0062;00E0 05AE 065A 0315 0062;0061 05AE 0300 065A 0315 0062; +0061 065A 0315 0300 05AE 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062; +0061 0315 0300 05AE 065B 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062; +0061 065B 0315 0300 05AE 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062; +0061 059A 0316 302A 065C 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062; +0061 065C 059A 0316 302A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062; +0061 0315 0300 05AE 065D 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062; +0061 065D 0315 0300 05AE 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062; +0061 0315 0300 05AE 065E 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062; +0061 065E 0315 0300 05AE 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062; 0061 0711 0670 0652 0670 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; 0061 0670 0711 0670 0652 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; 0061 0315 0300 05AE 06D6 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062; @@ -16908,6 +17121,24 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 0749 0315 0300 05AE 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062; 0061 0315 0300 05AE 074A 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062; 0061 074A 0315 0300 05AE 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062; +0061 0315 0300 05AE 07EB 0062;00E0 05AE 07EB 0315 0062;0061 05AE 0300 07EB 0315 0062;00E0 05AE 07EB 0315 0062;0061 05AE 0300 07EB 0315 0062; +0061 07EB 0315 0300 05AE 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062; +0061 0315 0300 05AE 07EC 0062;00E0 05AE 07EC 0315 0062;0061 05AE 0300 07EC 0315 0062;00E0 05AE 07EC 0315 0062;0061 05AE 0300 07EC 0315 0062; +0061 07EC 0315 0300 05AE 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062; +0061 0315 0300 05AE 07ED 0062;00E0 05AE 07ED 0315 0062;0061 05AE 0300 07ED 0315 0062;00E0 05AE 07ED 0315 0062;0061 05AE 0300 07ED 0315 0062; +0061 07ED 0315 0300 05AE 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062; +0061 0315 0300 05AE 07EE 0062;00E0 05AE 07EE 0315 0062;0061 05AE 0300 07EE 0315 0062;00E0 05AE 07EE 0315 0062;0061 05AE 0300 07EE 0315 0062; +0061 07EE 0315 0300 05AE 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062; +0061 0315 0300 05AE 07EF 0062;00E0 05AE 07EF 0315 0062;0061 05AE 0300 07EF 0315 0062;00E0 05AE 07EF 0315 0062;0061 05AE 0300 07EF 0315 0062; +0061 07EF 0315 0300 05AE 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062; +0061 0315 0300 05AE 07F0 0062;00E0 05AE 07F0 0315 0062;0061 05AE 0300 07F0 0315 0062;00E0 05AE 07F0 0315 0062;0061 05AE 0300 07F0 0315 0062; +0061 07F0 0315 0300 05AE 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062; +0061 0315 0300 05AE 07F1 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062; +0061 07F1 0315 0300 05AE 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062; +0061 059A 0316 302A 07F2 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062; +0061 07F2 059A 0316 302A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062; +0061 0315 0300 05AE 07F3 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062; +0061 07F3 0315 0300 05AE 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062; 0061 3099 093C 0334 093C 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; 0061 093C 3099 093C 0334 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; 0061 05B0 094D 3099 094D 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; @@ -17020,6 +17251,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 1037 3099 093C 0334 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062; 0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062; 0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062; +0061 0315 0300 05AE 135F 0062;00E0 05AE 135F 0315 0062;0061 05AE 0300 135F 0315 0062;00E0 05AE 135F 0315 0062;0061 05AE 0300 135F 0315 0062; +0061 135F 0315 0300 05AE 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062; 0061 05B0 094D 3099 1714 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062; 0061 1714 05B0 094D 3099 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062; 0061 05B0 094D 3099 1734 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062; @@ -17036,6 +17269,58 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 193A 0315 0300 05AE 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062; 0061 059A 0316 302A 193B 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062; 0061 193B 059A 0316 302A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062; +0061 0315 0300 05AE 1A17 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062; +0061 1A17 0315 0300 05AE 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062; +0061 059A 0316 302A 1A18 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062; +0061 1A18 059A 0316 302A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062; +0061 3099 093C 0334 1B34 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062; +0061 1B34 3099 093C 0334 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062; +0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062; +0061 1B44 05B0 094D 3099 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062; +0061 0315 0300 05AE 1B6B 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062; +0061 1B6B 0315 0300 05AE 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062; +0061 059A 0316 302A 1B6C 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062; +0061 1B6C 059A 0316 302A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062; +0061 0315 0300 05AE 1B6D 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062; +0061 1B6D 0315 0300 05AE 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062; +0061 0315 0300 05AE 1B6E 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062; +0061 1B6E 0315 0300 05AE 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062; +0061 0315 0300 05AE 1B6F 0062;00E0 05AE 1B6F 0315 0062;0061 05AE 0300 1B6F 0315 0062;00E0 05AE 1B6F 0315 0062;0061 05AE 0300 1B6F 0315 0062; +0061 1B6F 0315 0300 05AE 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062; +0061 0315 0300 05AE 1B70 0062;00E0 05AE 1B70 0315 0062;0061 05AE 0300 1B70 0315 0062;00E0 05AE 1B70 0315 0062;0061 05AE 0300 1B70 0315 0062; +0061 1B70 0315 0300 05AE 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062; +0061 0315 0300 05AE 1B71 0062;00E0 05AE 1B71 0315 0062;0061 05AE 0300 1B71 0315 0062;00E0 05AE 1B71 0315 0062;0061 05AE 0300 1B71 0315 0062; +0061 1B71 0315 0300 05AE 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062; +0061 0315 0300 05AE 1B72 0062;00E0 05AE 1B72 0315 0062;0061 05AE 0300 1B72 0315 0062;00E0 05AE 1B72 0315 0062;0061 05AE 0300 1B72 0315 0062; +0061 1B72 0315 0300 05AE 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062; +0061 0315 0300 05AE 1B73 0062;00E0 05AE 1B73 0315 0062;0061 05AE 0300 1B73 0315 0062;00E0 05AE 1B73 0315 0062;0061 05AE 0300 1B73 0315 0062; +0061 1B73 0315 0300 05AE 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062; +0061 0315 0300 05AE 1DC0 0062;00E0 05AE 1DC0 0315 0062;0061 05AE 0300 1DC0 0315 0062;00E0 05AE 1DC0 0315 0062;0061 05AE 0300 1DC0 0315 0062; +0061 1DC0 0315 0300 05AE 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062; +0061 0315 0300 05AE 1DC1 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062; +0061 1DC1 0315 0300 05AE 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062; +0061 059A 0316 302A 1DC2 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062; +0061 1DC2 059A 0316 302A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062; +0061 0315 0300 05AE 1DC3 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062; +0061 1DC3 0315 0300 05AE 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062; +0061 0315 0300 05AE 1DC4 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062; +0061 1DC4 0315 0300 05AE 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062; +0061 0315 0300 05AE 1DC5 0062;00E0 05AE 1DC5 0315 0062;0061 05AE 0300 1DC5 0315 0062;00E0 05AE 1DC5 0315 0062;0061 05AE 0300 1DC5 0315 0062; +0061 1DC5 0315 0300 05AE 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062; +0061 0315 0300 05AE 1DC6 0062;00E0 05AE 1DC6 0315 0062;0061 05AE 0300 1DC6 0315 0062;00E0 05AE 1DC6 0315 0062;0061 05AE 0300 1DC6 0315 0062; +0061 1DC6 0315 0300 05AE 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062; +0061 0315 0300 05AE 1DC7 0062;00E0 05AE 1DC7 0315 0062;0061 05AE 0300 1DC7 0315 0062;00E0 05AE 1DC7 0315 0062;0061 05AE 0300 1DC7 0315 0062; +0061 1DC7 0315 0300 05AE 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062; +0061 0315 0300 05AE 1DC8 0062;00E0 05AE 1DC8 0315 0062;0061 05AE 0300 1DC8 0315 0062;00E0 05AE 1DC8 0315 0062;0061 05AE 0300 1DC8 0315 0062; +0061 1DC8 0315 0300 05AE 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062; +0061 0315 0300 05AE 1DC9 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062; +0061 1DC9 0315 0300 05AE 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062; +0061 059A 0316 302A 1DCA 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062; +0061 1DCA 059A 0316 302A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062; +0061 0315 0300 05AE 1DFE 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062; +0061 1DFE 0315 0300 05AE 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062; +0061 059A 0316 302A 1DFF 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062; +0061 1DFF 059A 0316 302A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062; 0061 0315 0300 05AE 20D0 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062; 0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062; 0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062; @@ -17076,12 +17361,22 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 20E9 0315 0300 05AE 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062; 0061 093C 0334 20EA 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062; 0061 20EA 093C 0334 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062; +0061 093C 0334 20EB 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062; +0061 20EB 093C 0334 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062; +0061 059A 0316 302A 20EC 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062; +0061 20EC 059A 0316 302A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062; +0061 059A 0316 302A 20ED 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062; +0061 20ED 059A 0316 302A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062; +0061 059A 0316 302A 20EE 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062; +0061 20EE 059A 0316 302A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062; +0061 059A 0316 302A 20EF 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062; +0061 20EF 059A 0316 302A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062; 0061 0316 302A 031B 302A 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; 0061 302A 0316 302A 031B 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; 0061 0300 05AE 1D16D 302B 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062; 0061 302B 0300 05AE 1D16D 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062; -0061 035F 0315 0300 302C 0062;00E0 0315 302C 035F 0062;0061 0300 0315 302C 035F 0062;00E0 0315 302C 035F 0062;0061 0300 0315 302C 035F 0062; -0061 302C 035F 0315 0300 0062;00E0 302C 0315 035F 0062;0061 0300 302C 0315 035F 0062;00E0 302C 0315 035F 0062;0061 0300 302C 0315 035F 0062; +0061 035C 0315 0300 302C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062; +0061 302C 035C 0315 0300 0062;00E0 302C 0315 035C 0062;0061 0300 302C 0315 035C 0062;00E0 302C 0315 035C 0062;0061 0300 302C 0315 035C 0062; 0061 302E 059A 0316 302D 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062; 0061 302D 302E 059A 0316 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062; 0061 1D16D 302E 059A 302E 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062; @@ -17092,6 +17387,8 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 3099 094D 3099 093C 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; 0061 094D 3099 093C 309A 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062; 0061 309A 094D 3099 093C 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062; +0061 05B0 094D 3099 A806 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062; +0061 A806 05B0 094D 3099 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062; 0061 064B FB1E 05C2 FB1E 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; 0061 FB1E 064B FB1E 05C2 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; 0061 0315 0300 05AE FE20 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062; @@ -17102,6 +17399,18 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 FE22 0315 0300 05AE 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062; 0061 0315 0300 05AE FE23 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062; 0061 FE23 0315 0300 05AE 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062; +0061 059A 0316 302A 10A0D 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062; +0061 10A0D 059A 0316 302A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062; +0061 0315 0300 05AE 10A0F 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062; +0061 10A0F 0315 0300 05AE 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062; +0061 0315 0300 05AE 10A38 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062; +0061 10A38 0315 0300 05AE 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062; +0061 093C 0334 10A39 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062; +0061 10A39 093C 0334 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062; +0061 059A 0316 302A 10A3A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062; +0061 10A3A 059A 0316 302A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062; +0061 05B0 094D 3099 10A3F 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062; +0061 10A3F 05B0 094D 3099 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062; 0061 302A 031B 0321 1D165 0062;0061 0321 031B 1D165 302A 0062;0061 0321 031B 1D165 302A 0062;0061 0321 031B 1D165 302A 0062;0061 0321 031B 1D165 302A 0062; 0061 1D165 302A 031B 0321 0062;0061 0321 1D165 031B 302A 0062;0061 0321 1D165 031B 302A 0062;0061 0321 1D165 031B 302A 0062;0061 0321 1D165 031B 302A 0062; 0061 302A 031B 0321 1D166 0062;0061 0321 031B 1D166 302A 0062;0061 0321 031B 1D166 302A 0062;0061 0321 031B 1D166 302A 0062;0061 0321 031B 1D166 302A 0062; @@ -17162,5 +17471,180 @@ FFEE;FFEE;FFEE;25CB;25CB; 0061 1D1AC 0315 0300 05AE 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062; 0061 0315 0300 05AE 1D1AD 0062;00E0 05AE 1D1AD 0315 0062;0061 05AE 0300 1D1AD 0315 0062;00E0 05AE 1D1AD 0315 0062;0061 05AE 0300 1D1AD 0315 0062; 0061 1D1AD 0315 0300 05AE 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062; +0061 0315 0300 05AE 1D242 0062;00E0 05AE 1D242 0315 0062;0061 05AE 0300 1D242 0315 0062;00E0 05AE 1D242 0315 0062;0061 05AE 0300 1D242 0315 0062; +0061 1D242 0315 0300 05AE 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062; +0061 0315 0300 05AE 1D243 0062;00E0 05AE 1D243 0315 0062;0061 05AE 0300 1D243 0315 0062;00E0 05AE 1D243 0315 0062;0061 05AE 0300 1D243 0315 0062; +0061 1D243 0315 0300 05AE 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062; +0061 0315 0300 05AE 1D244 0062;00E0 05AE 1D244 0315 0062;0061 05AE 0300 1D244 0315 0062;00E0 05AE 1D244 0315 0062;0061 05AE 0300 1D244 0315 0062; +0061 1D244 0315 0300 05AE 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062; +# +@Part3 # PRI #29 Test +# +09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE; +09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7; +0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E; +0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56; +0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57; +0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7; +0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE; +0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7; +0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE; +0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5; +0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2; +0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5; +0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6; +0CCA 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5; +0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E; +0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57; +0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E; +0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF; +0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF; +0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5; +0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7; +0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7; +0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7; +0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7; +0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7; +0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5; +0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7; +0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7; +0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7; +0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7; +0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7; +1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E; +1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161; +1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E; +1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166; +1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173; +1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B; +1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163; +1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170; +1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168; +1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175; +1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D; +1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165; +1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172; +1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A; +1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162; +1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F; +1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167; +1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174; +110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C; +110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164; +110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171; +110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169; +110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161; +110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E; +110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166; +110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173; +110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B; +1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163; +1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170; +1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168; +1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175; +1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D; +1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35; +1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35; +1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35; +1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35; +1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35; +1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35; +1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35; +1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35; +1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35; +1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35; +1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35; +AC54 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE; +ACA8 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5; +ACFC 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC; +ADC0 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE; +AE14 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5; +AE68 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC; +AF2C 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE; +AF80 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5; +AFD4 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC; +B098 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE; +B0EC 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5; +B140 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC; +B204 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE; +B258 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5; +B2AC 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC; +B370 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE; +B3C4 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5; +B418 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC; +B4DC 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE; +B530 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5; +B584 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC; +B648 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE; +B69C 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5; +B6F0 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC; +B7B4 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE; +B808 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5; +B85C 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC; +B920 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE; +B974 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5; +B9C8 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC; +BA8C 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE; +BAE0 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5; +BB34 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC; +BBF8 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE; +BC4C 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5; +BCA0 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC; +BD64 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE; +BDB8 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5; +BE0C 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC; +BED0 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE; +BF24 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5; +BF78 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC; +C03C 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE; +C090 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5; +C0E4 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC; +C1A8 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE; +C1FC 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5; +C250 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC; +C314 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE; +C368 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5; +C3BC 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC; +C480 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE; +C4D4 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5; +C528 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC; +C5EC 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE; +C640 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5; +C694 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC; +C758 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE; +C7AC 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5; +C800 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC; +C8C4 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE; +C918 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5; +C96C 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC; +CA30 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE; +CA84 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5; +CAD8 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC; +CB9C 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE; +CBF0 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5; +CC44 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC; +CD08 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE; +CD5C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5; +CDB0 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC; +CE74 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE; +CEC8 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5; +CF1C 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC; +CFE0 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE; +D034 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5; +D088 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC; +D14C 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE; +D1A0 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5; +D1F4 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC; +D2B8 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE; +D30C 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5; +D360 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC; +D424 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE; +D478 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5; +D4CC 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC; +D590 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE; +D5E4 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5; +D638 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC; +D6FC 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE; +D750 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5; # # END OF FILE diff --git a/icuSources/data/unidata/PropList.txt b/icuSources/data/unidata/PropList.txt index 964c40ac..14591c8f 100644 --- a/icuSources/data/unidata/PropList.txt +++ b/icuSources/data/unidata/PropList.txt @@ -1,763 +1,1065 @@ -# PropList-4.0.1.txt -# Date: 2004-03-02, 02:42:40 GMT [MD] +# PropList-5.0.0.txt +# Date: 2006-06-07, 23:22:52 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html # ================================================ -0009..000D ; White_Space # Cc [5] .. -0020 ; White_Space # Zs SPACE -0085 ; White_Space # Cc -00A0 ; White_Space # Zs NO-BREAK SPACE -1680 ; White_Space # Zs OGHAM SPACE MARK -180E ; White_Space # Zs MONGOLIAN VOWEL SEPARATOR -2000..200A ; White_Space # Zs [11] EN QUAD..HAIR SPACE -2028 ; White_Space # Zl LINE SEPARATOR -2029 ; White_Space # Zp PARAGRAPH SEPARATOR -202F ; White_Space # Zs NARROW NO-BREAK SPACE -205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE -3000 ; White_Space # Zs IDEOGRAPHIC SPACE +0009..000D ; White_Space +0020 ; White_Space +0085 ; White_Space +00A0 ; White_Space +1680 ; White_Space +180E ; White_Space +2000..200A ; White_Space +2028 ; White_Space +2029 ; White_Space +202F ; White_Space +205F ; White_Space +3000 ; White_Space # Total code points: 26 # ================================================ -200E..200F ; Bidi_Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK -202A..202E ; Bidi_Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +200E..200F ; Bidi_Control +202A..202E ; Bidi_Control # Total code points: 7 # ================================================ -200C..200D ; Join_Control # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER +200C..200D ; Join_Control # Total code points: 2 # ================================================ -002D ; Dash # Pd HYPHEN-MINUS -058A ; Dash # Pd ARMENIAN HYPHEN -1806 ; Dash # Pd MONGOLIAN TODO SOFT HYPHEN -2010..2015 ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR -2053 ; Dash # Po SWUNG DASH -207B ; Dash # Sm SUPERSCRIPT MINUS -208B ; Dash # Sm SUBSCRIPT MINUS -2212 ; Dash # Sm MINUS SIGN -301C ; Dash # Pd WAVE DASH -3030 ; Dash # Pd WAVY DASH -FE31..FE32 ; Dash # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH -FE58 ; Dash # Pd SMALL EM DASH -FE63 ; Dash # Pd SMALL HYPHEN-MINUS -FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS - -# Total code points: 20 +002D ; Dash +058A ; Dash +05BE ; Dash +1806 ; Dash +2010..2015 ; Dash +2053 ; Dash +207B ; Dash +208B ; Dash +2212 ; Dash +2E17 ; Dash +301C ; Dash +3030 ; Dash +30A0 ; Dash +FE31..FE32 ; Dash +FE58 ; Dash +FE63 ; Dash +FF0D ; Dash + +# Total code points: 23 # ================================================ -002D ; Hyphen # Pd HYPHEN-MINUS -00AD ; Hyphen # Cf SOFT HYPHEN -058A ; Hyphen # Pd ARMENIAN HYPHEN -1806 ; Hyphen # Pd MONGOLIAN TODO SOFT HYPHEN -2010..2011 ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN -30FB ; Hyphen # Pc KATAKANA MIDDLE DOT -FE63 ; Hyphen # Pd SMALL HYPHEN-MINUS -FF0D ; Hyphen # Pd FULLWIDTH HYPHEN-MINUS -FF65 ; Hyphen # Pc HALFWIDTH KATAKANA MIDDLE DOT +002D ; Hyphen +00AD ; Hyphen +058A ; Hyphen +1806 ; Hyphen +2010..2011 ; Hyphen +2E17 ; Hyphen +30FB ; Hyphen +FE63 ; Hyphen +FF0D ; Hyphen +FF65 ; Hyphen -# Total code points: 10 +# Total code points: 11 # ================================================ -0022 ; Quotation_Mark # Po QUOTATION MARK -0027 ; Quotation_Mark # Po APOSTROPHE -00AB ; Quotation_Mark # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -00BB ; Quotation_Mark # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -2018 ; Quotation_Mark # Pi LEFT SINGLE QUOTATION MARK -2019 ; Quotation_Mark # Pf RIGHT SINGLE QUOTATION MARK -201A ; Quotation_Mark # Ps SINGLE LOW-9 QUOTATION MARK -201B..201C ; Quotation_Mark # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK -201D ; Quotation_Mark # Pf RIGHT DOUBLE QUOTATION MARK -201E ; Quotation_Mark # Ps DOUBLE LOW-9 QUOTATION MARK -201F ; Quotation_Mark # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK -2039 ; Quotation_Mark # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK -203A ; Quotation_Mark # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -300C ; Quotation_Mark # Ps LEFT CORNER BRACKET -300D ; Quotation_Mark # Pe RIGHT CORNER BRACKET -300E ; Quotation_Mark # Ps LEFT WHITE CORNER BRACKET -300F ; Quotation_Mark # Pe RIGHT WHITE CORNER BRACKET -301D ; Quotation_Mark # Ps REVERSED DOUBLE PRIME QUOTATION MARK -301E..301F ; Quotation_Mark # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK -FE41 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET -FE42 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET -FE43 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET -FE44 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET -FF02 ; Quotation_Mark # Po FULLWIDTH QUOTATION MARK -FF07 ; Quotation_Mark # Po FULLWIDTH APOSTROPHE -FF62 ; Quotation_Mark # Ps HALFWIDTH LEFT CORNER BRACKET -FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET +0022 ; Quotation_Mark +0027 ; Quotation_Mark +00AB ; Quotation_Mark +00BB ; Quotation_Mark +2018 ; Quotation_Mark +2019 ; Quotation_Mark +201A ; Quotation_Mark +201B..201C ; Quotation_Mark +201D ; Quotation_Mark +201E ; Quotation_Mark +201F ; Quotation_Mark +2039 ; Quotation_Mark +203A ; Quotation_Mark +300C ; Quotation_Mark +300D ; Quotation_Mark +300E ; Quotation_Mark +300F ; Quotation_Mark +301D ; Quotation_Mark +301E..301F ; Quotation_Mark +FE41 ; Quotation_Mark +FE42 ; Quotation_Mark +FE43 ; Quotation_Mark +FE44 ; Quotation_Mark +FF02 ; Quotation_Mark +FF07 ; Quotation_Mark +FF62 ; Quotation_Mark +FF63 ; Quotation_Mark # Total code points: 29 # ================================================ -0021 ; Terminal_Punctuation # Po EXCLAMATION MARK -002C ; Terminal_Punctuation # Po COMMA -002E ; Terminal_Punctuation # Po FULL STOP -003A..003B ; Terminal_Punctuation # Po [2] COLON..SEMICOLON -003F ; Terminal_Punctuation # Po QUESTION MARK -037E ; Terminal_Punctuation # Po GREEK QUESTION MARK -0387 ; Terminal_Punctuation # Po GREEK ANO TELEIA -0589 ; Terminal_Punctuation # Po ARMENIAN FULL STOP -05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ -060C ; Terminal_Punctuation # Po ARABIC COMMA -061B ; Terminal_Punctuation # Po ARABIC SEMICOLON -061F ; Terminal_Punctuation # Po ARABIC QUESTION MARK -06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP -0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION -070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS -0964..0965 ; Terminal_Punctuation # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA -0E5A..0E5B ; Terminal_Punctuation # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT -0F08 ; Terminal_Punctuation # Po TIBETAN MARK SBRUL SHAD -0F0D..0F12 ; Terminal_Punctuation # Po [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD -104A..104B ; Terminal_Punctuation # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION -1361..1368 ; Terminal_Punctuation # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR -166D..166E ; Terminal_Punctuation # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP -16EB..16ED ; Terminal_Punctuation # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION -17D4..17D6 ; Terminal_Punctuation # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH -17DA ; Terminal_Punctuation # Po KHMER SIGN KOOMUUT -1802..1805 ; Terminal_Punctuation # Po [4] MONGOLIAN COMMA..MONGOLIAN FOUR DOTS -1808..1809 ; Terminal_Punctuation # Po [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP -1944..1945 ; Terminal_Punctuation # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK -203C..203D ; Terminal_Punctuation # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG -2047..2049 ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK -3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP -FE50..FE52 ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP -FE54..FE57 ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK -FF01 ; Terminal_Punctuation # Po FULLWIDTH EXCLAMATION MARK -FF0C ; Terminal_Punctuation # Po FULLWIDTH COMMA -FF0E ; Terminal_Punctuation # Po FULLWIDTH FULL STOP -FF1A..FF1B ; Terminal_Punctuation # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON -FF1F ; Terminal_Punctuation # Po FULLWIDTH QUESTION MARK -FF61 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC FULL STOP -FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA - -# Total code points: 86 - -# ================================================ - -005E ; Other_Math # Sk CIRCUMFLEX ACCENT -03D0..03D2 ; Other_Math # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL -03D5 ; Other_Math # L& GREEK PHI SYMBOL -03F0..03F1 ; Other_Math # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL -03F4..03F5 ; Other_Math # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL -2016 ; Other_Math # Po DOUBLE VERTICAL LINE -2032..2034 ; Other_Math # Po [3] PRIME..TRIPLE PRIME -2040 ; Other_Math # Pc CHARACTER TIE -2061..2063 ; Other_Math # Cf [3] FUNCTION APPLICATION..INVISIBLE SEPARATOR -207D ; Other_Math # Ps SUPERSCRIPT LEFT PARENTHESIS -207E ; Other_Math # Pe SUPERSCRIPT RIGHT PARENTHESIS -208D ; Other_Math # Ps SUBSCRIPT LEFT PARENTHESIS -208E ; Other_Math # Pe SUBSCRIPT RIGHT PARENTHESIS -20D0..20DC ; Other_Math # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE -20E1 ; Other_Math # Mn COMBINING LEFT RIGHT ARROW ABOVE -20E5..20E6 ; Other_Math # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY -2102 ; Other_Math # L& DOUBLE-STRUCK CAPITAL C -210A..2113 ; Other_Math # L& [10] SCRIPT SMALL G..SCRIPT SMALL L -2115 ; Other_Math # L& DOUBLE-STRUCK CAPITAL N -2119..211D ; Other_Math # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R -2124 ; Other_Math # L& DOUBLE-STRUCK CAPITAL Z -2128 ; Other_Math # L& BLACK-LETTER CAPITAL Z -2129 ; Other_Math # So TURNED GREEK SMALL LETTER IOTA -212C..212D ; Other_Math # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C -212F..2131 ; Other_Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F -2133..2134 ; Other_Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O -2135..2138 ; Other_Math # Lo [4] ALEF SYMBOL..DALET SYMBOL -213D..213F ; Other_Math # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI -2145..2149 ; Other_Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J -23B7 ; Other_Math # So RADICAL SYMBOL BOTTOM -23D0 ; Other_Math # So VERTICAL LINE EXTENSION -27E6 ; Other_Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET -27E7 ; Other_Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET -27E8 ; Other_Math # Ps MATHEMATICAL LEFT ANGLE BRACKET -27E9 ; Other_Math # Pe MATHEMATICAL RIGHT ANGLE BRACKET -27EA ; Other_Math # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET -27EB ; Other_Math # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET -2983 ; Other_Math # Ps LEFT WHITE CURLY BRACKET -2984 ; Other_Math # Pe RIGHT WHITE CURLY BRACKET -2985 ; Other_Math # Ps LEFT WHITE PARENTHESIS -2986 ; Other_Math # Pe RIGHT WHITE PARENTHESIS -2987 ; Other_Math # Ps Z NOTATION LEFT IMAGE BRACKET -2988 ; Other_Math # Pe Z NOTATION RIGHT IMAGE BRACKET -2989 ; Other_Math # Ps Z NOTATION LEFT BINDING BRACKET -298A ; Other_Math # Pe Z NOTATION RIGHT BINDING BRACKET -298B ; Other_Math # Ps LEFT SQUARE BRACKET WITH UNDERBAR -298C ; Other_Math # Pe RIGHT SQUARE BRACKET WITH UNDERBAR -298D ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER -298E ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -298F ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -2990 ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER -2991 ; Other_Math # Ps LEFT ANGLE BRACKET WITH DOT -2992 ; Other_Math # Pe RIGHT ANGLE BRACKET WITH DOT -2993 ; Other_Math # Ps LEFT ARC LESS-THAN BRACKET -2994 ; Other_Math # Pe RIGHT ARC GREATER-THAN BRACKET -2995 ; Other_Math # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET -2996 ; Other_Math # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET -2997 ; Other_Math # Ps LEFT BLACK TORTOISE SHELL BRACKET -2998 ; Other_Math # Pe RIGHT BLACK TORTOISE SHELL BRACKET -29D8 ; Other_Math # Ps LEFT WIGGLY FENCE -29D9 ; Other_Math # Pe RIGHT WIGGLY FENCE -29DA ; Other_Math # Ps LEFT DOUBLE WIGGLY FENCE -29DB ; Other_Math # Pe RIGHT DOUBLE WIGGLY FENCE -29FC ; Other_Math # Ps LEFT-POINTING CURVED ANGLE BRACKET -29FD ; Other_Math # Pe RIGHT-POINTING CURVED ANGLE BRACKET -FE61 ; Other_Math # Po SMALL ASTERISK -FE63 ; Other_Math # Pd SMALL HYPHEN-MINUS -FE68 ; Other_Math # Po SMALL REVERSE SOLIDUS -FF3C ; Other_Math # Po FULLWIDTH REVERSE SOLIDUS -FF3E ; Other_Math # Sk FULLWIDTH CIRCUMFLEX ACCENT -1D400..1D454 ; Other_Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G -1D456..1D49C ; Other_Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A -1D49E..1D49F ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D -1D4A2 ; Other_Math # L& MATHEMATICAL SCRIPT CAPITAL G -1D4A5..1D4A6 ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K -1D4A9..1D4AC ; Other_Math # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q -1D4AE..1D4B9 ; Other_Math # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D -1D4BB ; Other_Math # L& MATHEMATICAL SCRIPT SMALL F -1D4BD..1D4C3 ; Other_Math # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N -1D4C5..1D505 ; Other_Math # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B -1D507..1D50A ; Other_Math # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G -1D50D..1D514 ; Other_Math # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q -1D516..1D51C ; Other_Math # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y -1D51E..1D539 ; Other_Math # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B -1D53B..1D53E ; Other_Math # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G -1D540..1D544 ; Other_Math # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M -1D546 ; Other_Math # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O -1D54A..1D550 ; Other_Math # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y -1D552..1D6A3 ; Other_Math # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z -1D6A8..1D6C0 ; Other_Math # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA -1D6C2..1D6DA ; Other_Math # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA -1D6DC..1D6FA ; Other_Math # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA -1D6FC..1D714 ; Other_Math # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA -1D716..1D734 ; Other_Math # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA -1D736..1D74E ; Other_Math # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA -1D750..1D76E ; Other_Math # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA -1D770..1D788 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA -1D78A..1D7A8 ; Other_Math # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA -1D7AA..1D7C2 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA -1D7C4..1D7C9 ; Other_Math # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL -1D7CE..1D7FF ; Other_Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE - -# Total code points: 1099 - -# ================================================ - -0030..0039 ; Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE -0041..0046 ; Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F -0061..0066 ; Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F -FF10..FF19 ; Hex_Digit # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE -FF21..FF26 ; Hex_Digit # L& [6] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER F -FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER F +0021 ; Terminal_Punctuation +002C ; Terminal_Punctuation +002E ; Terminal_Punctuation +003A..003B ; Terminal_Punctuation +003F ; Terminal_Punctuation +037E ; Terminal_Punctuation +0387 ; Terminal_Punctuation +0589 ; Terminal_Punctuation +05C3 ; Terminal_Punctuation +060C ; Terminal_Punctuation +061B ; Terminal_Punctuation +061F ; Terminal_Punctuation +06D4 ; Terminal_Punctuation +0700..070A ; Terminal_Punctuation +070C ; Terminal_Punctuation +07F8..07F9 ; Terminal_Punctuation +0964..0965 ; Terminal_Punctuation +0E5A..0E5B ; Terminal_Punctuation +0F08 ; Terminal_Punctuation +0F0D..0F12 ; Terminal_Punctuation +104A..104B ; Terminal_Punctuation +1361..1368 ; Terminal_Punctuation +166D..166E ; Terminal_Punctuation +16EB..16ED ; Terminal_Punctuation +17D4..17D6 ; Terminal_Punctuation +17DA ; Terminal_Punctuation +1802..1805 ; Terminal_Punctuation +1808..1809 ; Terminal_Punctuation +1944..1945 ; Terminal_Punctuation +1B5A..1B5B ; Terminal_Punctuation +1B5D..1B5F ; Terminal_Punctuation +203C..203D ; Terminal_Punctuation +2047..2049 ; Terminal_Punctuation +3001..3002 ; Terminal_Punctuation +A876..A877 ; Terminal_Punctuation +FE50..FE52 ; Terminal_Punctuation +FE54..FE57 ; Terminal_Punctuation +FF01 ; Terminal_Punctuation +FF0C ; Terminal_Punctuation +FF0E ; Terminal_Punctuation +FF1A..FF1B ; Terminal_Punctuation +FF1F ; Terminal_Punctuation +FF61 ; Terminal_Punctuation +FF64 ; Terminal_Punctuation +1039F ; Terminal_Punctuation +103D0 ; Terminal_Punctuation +1091F ; Terminal_Punctuation +12470..12473 ; Terminal_Punctuation + +# Total code points: 102 + +# ================================================ + +005E ; Other_Math +03D0..03D2 ; Other_Math +03D5 ; Other_Math +03F0..03F1 ; Other_Math +03F4..03F5 ; Other_Math +2016 ; Other_Math +2032..2034 ; Other_Math +2040 ; Other_Math +2061..2063 ; Other_Math +207D ; Other_Math +207E ; Other_Math +208D ; Other_Math +208E ; Other_Math +20D0..20DC ; Other_Math +20E1 ; Other_Math +20E5..20E6 ; Other_Math +20EC..20EF ; Other_Math +2102 ; Other_Math +210A..2113 ; Other_Math +2115 ; Other_Math +2119..211D ; Other_Math +2124 ; Other_Math +2128 ; Other_Math +2129 ; Other_Math +212C..212D ; Other_Math +212F..2131 ; Other_Math +2133..2134 ; Other_Math +2135..2138 ; Other_Math +213C..213F ; Other_Math +2145..2149 ; Other_Math +23B7 ; Other_Math +23D0 ; Other_Math +27C5 ; Other_Math +27C6 ; Other_Math +27E6 ; Other_Math +27E7 ; Other_Math +27E8 ; Other_Math +27E9 ; Other_Math +27EA ; Other_Math +27EB ; Other_Math +2983 ; Other_Math +2984 ; Other_Math +2985 ; Other_Math +2986 ; Other_Math +2987 ; Other_Math +2988 ; Other_Math +2989 ; Other_Math +298A ; Other_Math +298B ; Other_Math +298C ; Other_Math +298D ; Other_Math +298E ; Other_Math +298F ; Other_Math +2990 ; Other_Math +2991 ; Other_Math +2992 ; Other_Math +2993 ; Other_Math +2994 ; Other_Math +2995 ; Other_Math +2996 ; Other_Math +2997 ; Other_Math +2998 ; Other_Math +29D8 ; Other_Math +29D9 ; Other_Math +29DA ; Other_Math +29DB ; Other_Math +29FC ; Other_Math +29FD ; Other_Math +FE61 ; Other_Math +FE63 ; Other_Math +FE68 ; Other_Math +FF3C ; Other_Math +FF3E ; Other_Math +1D400..1D454 ; Other_Math +1D456..1D49C ; Other_Math +1D49E..1D49F ; Other_Math +1D4A2 ; Other_Math +1D4A5..1D4A6 ; Other_Math +1D4A9..1D4AC ; Other_Math +1D4AE..1D4B9 ; Other_Math +1D4BB ; Other_Math +1D4BD..1D4C3 ; Other_Math +1D4C5..1D505 ; Other_Math +1D507..1D50A ; Other_Math +1D50D..1D514 ; Other_Math +1D516..1D51C ; Other_Math +1D51E..1D539 ; Other_Math +1D53B..1D53E ; Other_Math +1D540..1D544 ; Other_Math +1D546 ; Other_Math +1D54A..1D550 ; Other_Math +1D552..1D6A5 ; Other_Math +1D6A8..1D6C0 ; Other_Math +1D6C2..1D6DA ; Other_Math +1D6DC..1D6FA ; Other_Math +1D6FC..1D714 ; Other_Math +1D716..1D734 ; Other_Math +1D736..1D74E ; Other_Math +1D750..1D76E ; Other_Math +1D770..1D788 ; Other_Math +1D78A..1D7A8 ; Other_Math +1D7AA..1D7C2 ; Other_Math +1D7C4..1D7CB ; Other_Math +1D7CE..1D7FF ; Other_Math + +# Total code points: 1110 + +# ================================================ + +0030..0039 ; Hex_Digit +0041..0046 ; Hex_Digit +0061..0066 ; Hex_Digit +FF10..FF19 ; Hex_Digit +FF21..FF26 ; Hex_Digit +FF41..FF46 ; Hex_Digit # Total code points: 44 # ================================================ -0030..0039 ; ASCII_Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE -0041..0046 ; ASCII_Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F -0061..0066 ; ASCII_Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F +0030..0039 ; ASCII_Hex_Digit +0041..0046 ; ASCII_Hex_Digit +0061..0066 ; ASCII_Hex_Digit # Total code points: 22 # ================================================ -0345 ; Other_Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI -05B0..05B9 ; Other_Alphabetic # Mn [10] HEBREW POINT SHEVA..HEBREW POINT HOLAM -05BB..05BD ; Other_Alphabetic # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG -05BF ; Other_Alphabetic # Mn HEBREW POINT RAFE -05C1..05C2 ; Other_Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; Other_Alphabetic # Mn HEBREW MARK UPPER DOT -0610..0615 ; Other_Alphabetic # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH -064B..0657 ; Other_Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA -0670 ; Other_Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF -06D6..06DC ; Other_Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN -06E1..06E4 ; Other_Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA -06E7..06E8 ; Other_Alphabetic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON -06ED ; Other_Alphabetic # Mn ARABIC SMALL LOW MEEM -0711 ; Other_Alphabetic # Mn SYRIAC LETTER SUPERSCRIPT ALAPH -0730..073F ; Other_Alphabetic # Mn [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA -07A6..07B0 ; Other_Alphabetic # Mn [11] THAANA ABAFILI..THAANA SUKUN -0901..0902 ; Other_Alphabetic # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA -0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA -093E..0940 ; Other_Alphabetic # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II -0941..0948 ; Other_Alphabetic # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI -0949..094C ; Other_Alphabetic # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU -0962..0963 ; Other_Alphabetic # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL -0981 ; Other_Alphabetic # Mn BENGALI SIGN CANDRABINDU -0982..0983 ; Other_Alphabetic # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA -09BE..09C0 ; Other_Alphabetic # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II -09C1..09C4 ; Other_Alphabetic # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR -09C7..09C8 ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI -09CB..09CC ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU -09D7 ; Other_Alphabetic # Mc BENGALI AU LENGTH MARK -09E2..09E3 ; Other_Alphabetic # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL -0A01..0A02 ; Other_Alphabetic # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI -0A03 ; Other_Alphabetic # Mc GURMUKHI SIGN VISARGA -0A3E..0A40 ; Other_Alphabetic # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II -0A41..0A42 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU -0A47..0A48 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI -0A4B..0A4C ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU -0A70..0A71 ; Other_Alphabetic # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK -0A81..0A82 ; Other_Alphabetic # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA -0A83 ; Other_Alphabetic # Mc GUJARATI SIGN VISARGA -0ABE..0AC0 ; Other_Alphabetic # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II -0AC1..0AC5 ; Other_Alphabetic # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E -0AC7..0AC8 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI -0AC9 ; Other_Alphabetic # Mc GUJARATI VOWEL SIGN CANDRA O -0ACB..0ACC ; Other_Alphabetic # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU -0AE2..0AE3 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL -0B01 ; Other_Alphabetic # Mn ORIYA SIGN CANDRABINDU -0B02..0B03 ; Other_Alphabetic # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA -0B3E ; Other_Alphabetic # Mc ORIYA VOWEL SIGN AA -0B3F ; Other_Alphabetic # Mn ORIYA VOWEL SIGN I -0B40 ; Other_Alphabetic # Mc ORIYA VOWEL SIGN II -0B41..0B43 ; Other_Alphabetic # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R -0B47..0B48 ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI -0B4B..0B4C ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU -0B56 ; Other_Alphabetic # Mn ORIYA AI LENGTH MARK -0B57 ; Other_Alphabetic # Mc ORIYA AU LENGTH MARK -0B82 ; Other_Alphabetic # Mn TAMIL SIGN ANUSVARA -0BBE..0BBF ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I -0BC0 ; Other_Alphabetic # Mn TAMIL VOWEL SIGN II -0BC1..0BC2 ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU -0BC6..0BC8 ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI -0BCA..0BCC ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU -0BD7 ; Other_Alphabetic # Mc TAMIL AU LENGTH MARK -0C01..0C03 ; Other_Alphabetic # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA -0C3E..0C40 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II -0C41..0C44 ; Other_Alphabetic # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR -0C46..0C48 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI -0C4A..0C4C ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU -0C55..0C56 ; Other_Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK -0C82..0C83 ; Other_Alphabetic # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA -0CBE ; Other_Alphabetic # Mc KANNADA VOWEL SIGN AA -0CBF ; Other_Alphabetic # Mn KANNADA VOWEL SIGN I -0CC0..0CC4 ; Other_Alphabetic # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR -0CC6 ; Other_Alphabetic # Mn KANNADA VOWEL SIGN E -0CC7..0CC8 ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI -0CCA..0CCB ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO -0CCC ; Other_Alphabetic # Mn KANNADA VOWEL SIGN AU -0CD5..0CD6 ; Other_Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0D02..0D03 ; Other_Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA -0D3E..0D40 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II -0D41..0D43 ; Other_Alphabetic # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R -0D46..0D48 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI -0D4A..0D4C ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU -0D57 ; Other_Alphabetic # Mc MALAYALAM AU LENGTH MARK -0D82..0D83 ; Other_Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA -0DCF..0DD1 ; Other_Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA -0DD2..0DD4 ; Other_Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA -0DD6 ; Other_Alphabetic # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA -0DD8..0DDF ; Other_Alphabetic # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA -0DF2..0DF3 ; Other_Alphabetic # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA -0E31 ; Other_Alphabetic # Mn THAI CHARACTER MAI HAN-AKAT -0E34..0E3A ; Other_Alphabetic # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU -0E4D ; Other_Alphabetic # Mn THAI CHARACTER NIKHAHIT -0EB1 ; Other_Alphabetic # Mn LAO VOWEL SIGN MAI KAN -0EB4..0EB9 ; Other_Alphabetic # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU -0EBB..0EBC ; Other_Alphabetic # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO -0ECD ; Other_Alphabetic # Mn LAO NIGGAHITA -0F71..0F7E ; Other_Alphabetic # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO -0F7F ; Other_Alphabetic # Mc TIBETAN SIGN RNAM BCAD -0F80..0F81 ; Other_Alphabetic # Mn [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II -0F90..0F97 ; Other_Alphabetic # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA -0F99..0FBC ; Other_Alphabetic # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA -102C ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN AA -102D..1030 ; Other_Alphabetic # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU -1031 ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN E -1032 ; Other_Alphabetic # Mn MYANMAR VOWEL SIGN AI -1036 ; Other_Alphabetic # Mn MYANMAR SIGN ANUSVARA -1038 ; Other_Alphabetic # Mc MYANMAR SIGN VISARGA -1056..1057 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR -1058..1059 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL -16EE..16F0 ; Other_Alphabetic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL -1712..1713 ; Other_Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U -1732..1733 ; Other_Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U -1752..1753 ; Other_Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U -1772..1773 ; Other_Alphabetic # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U -17B6 ; Other_Alphabetic # Mc KHMER VOWEL SIGN AA -17B7..17BD ; Other_Alphabetic # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA -17BE..17C5 ; Other_Alphabetic # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU -17C6 ; Other_Alphabetic # Mn KHMER SIGN NIKAHIT -17C7..17C8 ; Other_Alphabetic # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU -18A9 ; Other_Alphabetic # Mn MONGOLIAN LETTER ALI GALI DAGALGA -1920..1922 ; Other_Alphabetic # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U -1923..1926 ; Other_Alphabetic # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU -1927..1928 ; Other_Alphabetic # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O -1929..192B ; Other_Alphabetic # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA -1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA -1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA -1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA -2160..2183 ; Other_Alphabetic # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED -FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA -1034A ; Other_Alphabetic # Nl GOTHIC LETTER NINE HUNDRED - -# Total code points: 429 - -# ================================================ - -3006 ; Ideographic # Lo IDEOGRAPHIC CLOSING MARK -3007 ; Ideographic # Nl IDEOGRAPHIC NUMBER ZERO -3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE -3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY -3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 -4E00..9FA5 ; Ideographic # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5 -F900..FA2D ; Ideographic # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D -20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 -2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D - -# Total code points: 71053 - -# ================================================ - -005E ; Diacritic # Sk CIRCUMFLEX ACCENT -0060 ; Diacritic # Sk GRAVE ACCENT -00A8 ; Diacritic # Sk DIAERESIS -00AF ; Diacritic # Sk MACRON -00B4 ; Diacritic # Sk ACUTE ACCENT -00B7 ; Diacritic # Po MIDDLE DOT -00B8 ; Diacritic # Sk CEDILLA -02B0..02C1 ; Diacritic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP -02C2..02C5 ; Diacritic # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD -02C6..02D1 ; Diacritic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON -02D2..02DF ; Diacritic # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT -02E0..02E4 ; Diacritic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -02E5..02ED ; Diacritic # Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED -02EE ; Diacritic # Lm MODIFIER LETTER DOUBLE APOSTROPHE -02EF..02FF ; Diacritic # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW -0300..034E ; Diacritic # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW -0350..0357 ; Diacritic # Mn [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE -035D..0362 ; Diacritic # Mn [6] COMBINING DOUBLE BREVE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW -0374..0375 ; Diacritic # Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN -037A ; Diacritic # Lm GREEK YPOGEGRAMMENI -0384..0385 ; Diacritic # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS -0483..0486 ; Diacritic # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA -0559 ; Diacritic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING -0591..05A1 ; Diacritic # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05B9 ; Diacritic # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM -05BB..05BD ; Diacritic # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG -05BF ; Diacritic # Mn HEBREW POINT RAFE -05C1..05C2 ; Diacritic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; Diacritic # Mn HEBREW MARK UPPER DOT -064B..0652 ; Diacritic # Mn [8] ARABIC FATHATAN..ARABIC SUKUN -0657..0658 ; Diacritic # Mn [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA -06DF..06E0 ; Diacritic # Mn [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO -06E5..06E6 ; Diacritic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH -06EA..06EC ; Diacritic # Mn [3] ARABIC EMPTY CENTRE LOW STOP..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE -0730..074A ; Diacritic # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH -07A6..07B0 ; Diacritic # Mn [11] THAANA ABAFILI..THAANA SUKUN -093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA -094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA -0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT -09BC ; Diacritic # Mn BENGALI SIGN NUKTA -09CD ; Diacritic # Mn BENGALI SIGN VIRAMA -0A3C ; Diacritic # Mn GURMUKHI SIGN NUKTA -0A4D ; Diacritic # Mn GURMUKHI SIGN VIRAMA -0ABC ; Diacritic # Mn GUJARATI SIGN NUKTA -0ACD ; Diacritic # Mn GUJARATI SIGN VIRAMA -0B3C ; Diacritic # Mn ORIYA SIGN NUKTA -0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA -0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA -0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA -0CBC ; Diacritic # Mn KANNADA SIGN NUKTA -0CCD ; Diacritic # Mn KANNADA SIGN VIRAMA -0D4D ; Diacritic # Mn MALAYALAM SIGN VIRAMA -0DCA ; Diacritic # Mn SINHALA SIGN AL-LAKUNA -0E47..0E4C ; Diacritic # Mn [6] THAI CHARACTER MAITAIKHU..THAI CHARACTER THANTHAKHAT -0E4E ; Diacritic # Mn THAI CHARACTER YAMAKKAN -0EC8..0ECC ; Diacritic # Mn [5] LAO TONE MAI EK..LAO CANCELLATION MARK -0F18..0F19 ; Diacritic # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS -0F35 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG NYI ZLA -0F37 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS -0F39 ; Diacritic # Mn TIBETAN MARK TSA -PHRU -0F3E..0F3F ; Diacritic # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES -0F82..0F84 ; Diacritic # Mn [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA -0F86..0F87 ; Diacritic # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS -0FC6 ; Diacritic # Mn TIBETAN SYMBOL PADMA GDAN -1037 ; Diacritic # Mn MYANMAR SIGN DOT BELOW -1039 ; Diacritic # Mn MYANMAR SIGN VIRAMA -17C9..17D3 ; Diacritic # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT -17DD ; Diacritic # Mn KHMER SIGN ATTHACAN -1939..193B ; Diacritic # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I -1D2C..1D61 ; Diacritic # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI -1D62..1D6A ; Diacritic # L& [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI -1FBD ; Diacritic # Sk GREEK KORONIS -1FBF..1FC1 ; Diacritic # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI -1FCD..1FCF ; Diacritic # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI -1FDD..1FDF ; Diacritic # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI -1FED..1FEF ; Diacritic # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA -1FFD..1FFE ; Diacritic # Sk [2] GREEK OXIA..GREEK DASIA -302A..302F ; Diacritic # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK -3099..309A ; Diacritic # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -309B..309C ; Diacritic # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -30FC ; Diacritic # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK -FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA -FE20..FE23 ; Diacritic # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF -FF3E ; Diacritic # Sk FULLWIDTH CIRCUMFLEX ACCENT -FF40 ; Diacritic # Sk FULLWIDTH GRAVE ACCENT -FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -FFE3 ; Diacritic # Sk FULLWIDTH MACRON -1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE -1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE -1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO - -# Total code points: 482 - -# ================================================ - -00B7 ; Extender # Po MIDDLE DOT -02D0..02D1 ; Extender # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON -0640 ; Extender # Lm ARABIC TATWEEL -0E46 ; Extender # Lm THAI CHARACTER MAIYAMOK -0EC6 ; Extender # Lm LAO KO LA -1843 ; Extender # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN -3005 ; Extender # Lm IDEOGRAPHIC ITERATION MARK -3031..3035 ; Extender # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF -309D..309E ; Extender # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK -30FC..30FE ; Extender # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK -FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - -# Total code points: 19 - -# ================================================ - -02B0..02B8 ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y -02C0..02C1 ; Other_Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP -02E0..02E4 ; Other_Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -0345 ; Other_Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI -037A ; Other_Lowercase # Lm GREEK YPOGEGRAMMENI -1D2C..1D61 ; Other_Lowercase # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI -2170..217F ; Other_Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND -24D0..24E9 ; Other_Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z - -# Total code points: 114 - -# ================================================ - -2160..216F ; Other_Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND -24B6..24CF ; Other_Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z +0345 ; Other_Alphabetic +05B0..05BD ; Other_Alphabetic +05BF ; Other_Alphabetic +05C1..05C2 ; Other_Alphabetic +05C4..05C5 ; Other_Alphabetic +05C7 ; Other_Alphabetic +0610..0615 ; Other_Alphabetic +064B..0657 ; Other_Alphabetic +0659..065E ; Other_Alphabetic +0670 ; Other_Alphabetic +06D6..06DC ; Other_Alphabetic +06E1..06E4 ; Other_Alphabetic +06E7..06E8 ; Other_Alphabetic +06ED ; Other_Alphabetic +0711 ; Other_Alphabetic +0730..073F ; Other_Alphabetic +07A6..07B0 ; Other_Alphabetic +0901..0902 ; Other_Alphabetic +0903 ; Other_Alphabetic +093E..0940 ; Other_Alphabetic +0941..0948 ; Other_Alphabetic +0949..094C ; Other_Alphabetic +0962..0963 ; Other_Alphabetic +0981 ; Other_Alphabetic +0982..0983 ; Other_Alphabetic +09BE..09C0 ; Other_Alphabetic +09C1..09C4 ; Other_Alphabetic +09C7..09C8 ; Other_Alphabetic +09CB..09CC ; Other_Alphabetic +09D7 ; Other_Alphabetic +09E2..09E3 ; Other_Alphabetic +0A01..0A02 ; Other_Alphabetic +0A03 ; Other_Alphabetic +0A3E..0A40 ; Other_Alphabetic +0A41..0A42 ; Other_Alphabetic +0A47..0A48 ; Other_Alphabetic +0A4B..0A4C ; Other_Alphabetic +0A70..0A71 ; Other_Alphabetic +0A81..0A82 ; Other_Alphabetic +0A83 ; Other_Alphabetic +0ABE..0AC0 ; Other_Alphabetic +0AC1..0AC5 ; Other_Alphabetic +0AC7..0AC8 ; Other_Alphabetic +0AC9 ; Other_Alphabetic +0ACB..0ACC ; Other_Alphabetic +0AE2..0AE3 ; Other_Alphabetic +0B01 ; Other_Alphabetic +0B02..0B03 ; Other_Alphabetic +0B3E ; Other_Alphabetic +0B3F ; Other_Alphabetic +0B40 ; Other_Alphabetic +0B41..0B43 ; Other_Alphabetic +0B47..0B48 ; Other_Alphabetic +0B4B..0B4C ; Other_Alphabetic +0B56 ; Other_Alphabetic +0B57 ; Other_Alphabetic +0B82 ; Other_Alphabetic +0BBE..0BBF ; Other_Alphabetic +0BC0 ; Other_Alphabetic +0BC1..0BC2 ; Other_Alphabetic +0BC6..0BC8 ; Other_Alphabetic +0BCA..0BCC ; Other_Alphabetic +0BD7 ; Other_Alphabetic +0C01..0C03 ; Other_Alphabetic +0C3E..0C40 ; Other_Alphabetic +0C41..0C44 ; Other_Alphabetic +0C46..0C48 ; Other_Alphabetic +0C4A..0C4C ; Other_Alphabetic +0C55..0C56 ; Other_Alphabetic +0C82..0C83 ; Other_Alphabetic +0CBE ; Other_Alphabetic +0CBF ; Other_Alphabetic +0CC0..0CC4 ; Other_Alphabetic +0CC6 ; Other_Alphabetic +0CC7..0CC8 ; Other_Alphabetic +0CCA..0CCB ; Other_Alphabetic +0CCC ; Other_Alphabetic +0CD5..0CD6 ; Other_Alphabetic +0CE2..0CE3 ; Other_Alphabetic +0D02..0D03 ; Other_Alphabetic +0D3E..0D40 ; Other_Alphabetic +0D41..0D43 ; Other_Alphabetic +0D46..0D48 ; Other_Alphabetic +0D4A..0D4C ; Other_Alphabetic +0D57 ; Other_Alphabetic +0D82..0D83 ; Other_Alphabetic +0DCF..0DD1 ; Other_Alphabetic +0DD2..0DD4 ; Other_Alphabetic +0DD6 ; Other_Alphabetic +0DD8..0DDF ; Other_Alphabetic +0DF2..0DF3 ; Other_Alphabetic +0E31 ; Other_Alphabetic +0E34..0E3A ; Other_Alphabetic +0E4D ; Other_Alphabetic +0EB1 ; Other_Alphabetic +0EB4..0EB9 ; Other_Alphabetic +0EBB..0EBC ; Other_Alphabetic +0ECD ; Other_Alphabetic +0F71..0F7E ; Other_Alphabetic +0F7F ; Other_Alphabetic +0F80..0F81 ; Other_Alphabetic +0F90..0F97 ; Other_Alphabetic +0F99..0FBC ; Other_Alphabetic +102C ; Other_Alphabetic +102D..1030 ; Other_Alphabetic +1031 ; Other_Alphabetic +1032 ; Other_Alphabetic +1036 ; Other_Alphabetic +1038 ; Other_Alphabetic +1056..1057 ; Other_Alphabetic +1058..1059 ; Other_Alphabetic +135F ; Other_Alphabetic +1712..1713 ; Other_Alphabetic +1732..1733 ; Other_Alphabetic +1752..1753 ; Other_Alphabetic +1772..1773 ; Other_Alphabetic +17B6 ; Other_Alphabetic +17B7..17BD ; Other_Alphabetic +17BE..17C5 ; Other_Alphabetic +17C6 ; Other_Alphabetic +17C7..17C8 ; Other_Alphabetic +18A9 ; Other_Alphabetic +1920..1922 ; Other_Alphabetic +1923..1926 ; Other_Alphabetic +1927..1928 ; Other_Alphabetic +1929..192B ; Other_Alphabetic +1930..1931 ; Other_Alphabetic +1932 ; Other_Alphabetic +1933..1938 ; Other_Alphabetic +19B0..19C0 ; Other_Alphabetic +19C8..19C9 ; Other_Alphabetic +1A17..1A18 ; Other_Alphabetic +1A19..1A1B ; Other_Alphabetic +1B00..1B03 ; Other_Alphabetic +1B04 ; Other_Alphabetic +1B35 ; Other_Alphabetic +1B36..1B3A ; Other_Alphabetic +1B3B ; Other_Alphabetic +1B3C ; Other_Alphabetic +1B3D..1B41 ; Other_Alphabetic +1B42 ; Other_Alphabetic +1B43 ; Other_Alphabetic +24B6..24E9 ; Other_Alphabetic +A823..A824 ; Other_Alphabetic +A825..A826 ; Other_Alphabetic +A827 ; Other_Alphabetic +FB1E ; Other_Alphabetic +10A01..10A03 ; Other_Alphabetic +10A05..10A06 ; Other_Alphabetic +10A0C..10A0F ; Other_Alphabetic + +# Total code points: 511 -# Total code points: 42 +# ================================================ + +3006 ; Ideographic +3007 ; Ideographic +3021..3029 ; Ideographic +3038..303A ; Ideographic +3400..4DB5 ; Ideographic +4E00..9FBB ; Ideographic +F900..FA2D ; Ideographic +FA70..FAD9 ; Ideographic +20000..2A6D6 ; Ideographic +2F800..2FA1D ; Ideographic + +# Total code points: 71181 # ================================================ -FDD0..FDEF ; Noncharacter_Code_Point # Cn [32] .. -FFFE..FFFF ; Noncharacter_Code_Point # Cn [2] .. -1FFFE..1FFFF ; Noncharacter_Code_Point # Cn [2] .. -2FFFE..2FFFF ; Noncharacter_Code_Point # Cn [2] .. -3FFFE..3FFFF ; Noncharacter_Code_Point # Cn [2] .. -4FFFE..4FFFF ; Noncharacter_Code_Point # Cn [2] .. -5FFFE..5FFFF ; Noncharacter_Code_Point # Cn [2] .. -6FFFE..6FFFF ; Noncharacter_Code_Point # Cn [2] .. -7FFFE..7FFFF ; Noncharacter_Code_Point # Cn [2] .. -8FFFE..8FFFF ; Noncharacter_Code_Point # Cn [2] .. -9FFFE..9FFFF ; Noncharacter_Code_Point # Cn [2] .. -AFFFE..AFFFF ; Noncharacter_Code_Point # Cn [2] .. -BFFFE..BFFFF ; Noncharacter_Code_Point # Cn [2] .. -CFFFE..CFFFF ; Noncharacter_Code_Point # Cn [2] .. -DFFFE..DFFFF ; Noncharacter_Code_Point # Cn [2] .. -EFFFE..EFFFF ; Noncharacter_Code_Point # Cn [2] .. -FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] .. -10FFFE..10FFFF; Noncharacter_Code_Point # Cn [2] .. +005E ; Diacritic +0060 ; Diacritic +00A8 ; Diacritic +00AF ; Diacritic +00B4 ; Diacritic +00B7 ; Diacritic +00B8 ; Diacritic +02B0..02C1 ; Diacritic +02C2..02C5 ; Diacritic +02C6..02D1 ; Diacritic +02D2..02DF ; Diacritic +02E0..02E4 ; Diacritic +02E5..02ED ; Diacritic +02EE ; Diacritic +02EF..02FF ; Diacritic +0300..034E ; Diacritic +0350..0357 ; Diacritic +035D..0362 ; Diacritic +0374..0375 ; Diacritic +037A ; Diacritic +0384..0385 ; Diacritic +0483..0486 ; Diacritic +0559 ; Diacritic +0591..05A1 ; Diacritic +05A3..05BD ; Diacritic +05BF ; Diacritic +05C1..05C2 ; Diacritic +05C4 ; Diacritic +064B..0652 ; Diacritic +0657..0658 ; Diacritic +06DF..06E0 ; Diacritic +06E5..06E6 ; Diacritic +06EA..06EC ; Diacritic +0730..074A ; Diacritic +07A6..07B0 ; Diacritic +07EB..07F3 ; Diacritic +07F4..07F5 ; Diacritic +093C ; Diacritic +094D ; Diacritic +0951..0954 ; Diacritic +09BC ; Diacritic +09CD ; Diacritic +0A3C ; Diacritic +0A4D ; Diacritic +0ABC ; Diacritic +0ACD ; Diacritic +0B3C ; Diacritic +0B4D ; Diacritic +0BCD ; Diacritic +0C4D ; Diacritic +0CBC ; Diacritic +0CCD ; Diacritic +0D4D ; Diacritic +0DCA ; Diacritic +0E47..0E4C ; Diacritic +0E4E ; Diacritic +0EC8..0ECC ; Diacritic +0F18..0F19 ; Diacritic +0F35 ; Diacritic +0F37 ; Diacritic +0F39 ; Diacritic +0F3E..0F3F ; Diacritic +0F82..0F84 ; Diacritic +0F86..0F87 ; Diacritic +0FC6 ; Diacritic +1037 ; Diacritic +1039 ; Diacritic +17C9..17D3 ; Diacritic +17DD ; Diacritic +1939..193B ; Diacritic +1B34 ; Diacritic +1B44 ; Diacritic +1B6B..1B73 ; Diacritic +1D2C..1D61 ; Diacritic +1D62..1D6A ; Diacritic +1DC4..1DCA ; Diacritic +1DFE..1DFF ; Diacritic +1FBD ; Diacritic +1FBF..1FC1 ; Diacritic +1FCD..1FCF ; Diacritic +1FDD..1FDF ; Diacritic +1FED..1FEF ; Diacritic +1FFD..1FFE ; Diacritic +302A..302F ; Diacritic +3099..309A ; Diacritic +309B..309C ; Diacritic +30FC ; Diacritic +A717..A71A ; Diacritic +A720..A721 ; Diacritic +FB1E ; Diacritic +FE20..FE23 ; Diacritic +FF3E ; Diacritic +FF40 ; Diacritic +FF70 ; Diacritic +FF9E..FF9F ; Diacritic +FFE3 ; Diacritic +1D167..1D169 ; Diacritic +1D16D..1D172 ; Diacritic +1D17B..1D182 ; Diacritic +1D185..1D18B ; Diacritic +1D1AA..1D1AD ; Diacritic + +# Total code points: 520 -# Total code points: 66 +# ================================================ + +00B7 ; Extender +02D0..02D1 ; Extender +0640 ; Extender +07FA ; Extender +0E46 ; Extender +0EC6 ; Extender +1843 ; Extender +3005 ; Extender +3031..3035 ; Extender +309D..309E ; Extender +30FC..30FE ; Extender +A015 ; Extender +FF70 ; Extender + +# Total code points: 21 + +# ================================================ + +02B0..02B8 ; Other_Lowercase +02C0..02C1 ; Other_Lowercase +02E0..02E4 ; Other_Lowercase +0345 ; Other_Lowercase +037A ; Other_Lowercase +1D2C..1D61 ; Other_Lowercase +1D78 ; Other_Lowercase +1D9B..1DBF ; Other_Lowercase +2090..2094 ; Other_Lowercase +2170..217F ; Other_Lowercase +24D0..24E9 ; Other_Lowercase + +# Total code points: 157 # ================================================ -09BE ; Other_Grapheme_Extend # Mc BENGALI VOWEL SIGN AA -09D7 ; Other_Grapheme_Extend # Mc BENGALI AU LENGTH MARK -0B3E ; Other_Grapheme_Extend # Mc ORIYA VOWEL SIGN AA -0B57 ; Other_Grapheme_Extend # Mc ORIYA AU LENGTH MARK -0BBE ; Other_Grapheme_Extend # Mc TAMIL VOWEL SIGN AA -0BD7 ; Other_Grapheme_Extend # Mc TAMIL AU LENGTH MARK -0CC2 ; Other_Grapheme_Extend # Mc KANNADA VOWEL SIGN UU -0CD5..0CD6 ; Other_Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0D3E ; Other_Grapheme_Extend # Mc MALAYALAM VOWEL SIGN AA -0D57 ; Other_Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK -0DCF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA -0DDF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA -200C..200D ; Other_Grapheme_Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER -1D165 ; Other_Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM -1D16E..1D16F ; Other_Grapheme_Extend # Mc [2] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-2 +2160..216F ; Other_Uppercase +24B6..24CF ; Other_Uppercase -# Total code points: 18 +# Total code points: 42 # ================================================ -034F ; Grapheme_Link # Mn COMBINING GRAPHEME JOINER -094D ; Grapheme_Link # Mn DEVANAGARI SIGN VIRAMA -09CD ; Grapheme_Link # Mn BENGALI SIGN VIRAMA -0A4D ; Grapheme_Link # Mn GURMUKHI SIGN VIRAMA -0ACD ; Grapheme_Link # Mn GUJARATI SIGN VIRAMA -0B4D ; Grapheme_Link # Mn ORIYA SIGN VIRAMA -0BCD ; Grapheme_Link # Mn TAMIL SIGN VIRAMA -0C4D ; Grapheme_Link # Mn TELUGU SIGN VIRAMA -0CCD ; Grapheme_Link # Mn KANNADA SIGN VIRAMA -0D4D ; Grapheme_Link # Mn MALAYALAM SIGN VIRAMA -0DCA ; Grapheme_Link # Mn SINHALA SIGN AL-LAKUNA -0E3A ; Grapheme_Link # Mn THAI CHARACTER PHINTHU -1039 ; Grapheme_Link # Mn MYANMAR SIGN VIRAMA -17D2 ; Grapheme_Link # Mn KHMER SIGN COENG +FDD0..FDEF ; Noncharacter_Code_Point +FFFE..FFFF ; Noncharacter_Code_Point +1FFFE..1FFFF ; Noncharacter_Code_Point +2FFFE..2FFFF ; Noncharacter_Code_Point +3FFFE..3FFFF ; Noncharacter_Code_Point +4FFFE..4FFFF ; Noncharacter_Code_Point +5FFFE..5FFFF ; Noncharacter_Code_Point +6FFFE..6FFFF ; Noncharacter_Code_Point +7FFFE..7FFFF ; Noncharacter_Code_Point +8FFFE..8FFFF ; Noncharacter_Code_Point +9FFFE..9FFFF ; Noncharacter_Code_Point +AFFFE..AFFFF ; Noncharacter_Code_Point +BFFFE..BFFFF ; Noncharacter_Code_Point +CFFFE..CFFFF ; Noncharacter_Code_Point +DFFFE..DFFFF ; Noncharacter_Code_Point +EFFFE..EFFFF ; Noncharacter_Code_Point +FFFFE..FFFFF ; Noncharacter_Code_Point +10FFFE..10FFFF; Noncharacter_Code_Point -# Total code points: 14 +# Total code points: 66 # ================================================ -2FF0..2FF1 ; IDS_Binary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW -2FF4..2FFB ; IDS_Binary_Operator # So [8] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +09BE ; Other_Grapheme_Extend +09D7 ; Other_Grapheme_Extend +0B3E ; Other_Grapheme_Extend +0B57 ; Other_Grapheme_Extend +0BBE ; Other_Grapheme_Extend +0BD7 ; Other_Grapheme_Extend +0CC2 ; Other_Grapheme_Extend +0CD5..0CD6 ; Other_Grapheme_Extend +0D3E ; Other_Grapheme_Extend +0D57 ; Other_Grapheme_Extend +0DCF ; Other_Grapheme_Extend +0DDF ; Other_Grapheme_Extend +200C..200D ; Other_Grapheme_Extend +1D165 ; Other_Grapheme_Extend +1D16E..1D172 ; Other_Grapheme_Extend + +# Total code points: 21 + +# ================================================ + +2FF0..2FF1 ; IDS_Binary_Operator +2FF4..2FFB ; IDS_Binary_Operator # Total code points: 10 # ================================================ -2FF2..2FF3 ; IDS_Trinary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW +2FF2..2FF3 ; IDS_Trinary_Operator # Total code points: 2 # ================================================ -2E80..2E99 ; Radical # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP -2E9B..2EF3 ; Radical # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE -2F00..2FD5 ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +2E80..2E99 ; Radical +2E9B..2EF3 ; Radical +2F00..2FD5 ; Radical # Total code points: 329 # ================================================ -3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 -4E00..9FA5 ; Unified_Ideograph # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5 -FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F -FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11 -FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14 -FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F -FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21 -FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24 -FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29 -20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 +3400..4DB5 ; Unified_Ideograph +4E00..9FBB ; Unified_Ideograph +FA0E..FA0F ; Unified_Ideograph +FA11 ; Unified_Ideograph +FA13..FA14 ; Unified_Ideograph +FA1F ; Unified_Ideograph +FA21 ; Unified_Ideograph +FA23..FA24 ; Unified_Ideograph +FA27..FA29 ; Unified_Ideograph +20000..2A6D6 ; Unified_Ideograph -# Total code points: 70207 +# Total code points: 70229 # ================================================ -034F ; Other_Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER -115F..1160 ; Other_Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER -200B ; Other_Default_Ignorable_Code_Point # Cf ZERO WIDTH SPACE -2064..2069 ; Other_Default_Ignorable_Code_Point # Cn [6] .. -3164 ; Other_Default_Ignorable_Code_Point # Lo HANGUL FILLER -FFA0 ; Other_Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER -FFF0..FFF8 ; Other_Default_Ignorable_Code_Point # Cn [9] .. -E0000 ; Other_Default_Ignorable_Code_Point # Cn -E0002..E001F ; Other_Default_Ignorable_Code_Point # Cn [30] .. -E0080..E00FF ; Other_Default_Ignorable_Code_Point # Cn [128] .. -E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] .. +034F ; Other_Default_Ignorable_Code_Point +115F..1160 ; Other_Default_Ignorable_Code_Point +2064..2069 ; Other_Default_Ignorable_Code_Point +3164 ; Other_Default_Ignorable_Code_Point +FFA0 ; Other_Default_Ignorable_Code_Point +FFF0..FFF8 ; Other_Default_Ignorable_Code_Point +E0000 ; Other_Default_Ignorable_Code_Point +E0002..E001F ; Other_Default_Ignorable_Code_Point +E0080..E00FF ; Other_Default_Ignorable_Code_Point +E01F0..E0FFF ; Other_Default_Ignorable_Code_Point -# Total code points: 3780 +# Total code points: 3779 # ================================================ -0340..0341 ; Deprecated # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK -17A3 ; Deprecated # Lo KHMER INDEPENDENT VOWEL QAQ -17D3 ; Deprecated # Mn KHMER SIGN BATHAMASAT -206A..206F ; Deprecated # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES +0340..0341 ; Deprecated +17A3 ; Deprecated +17D3 ; Deprecated +206A..206F ; Deprecated # Total code points: 10 # ================================================ -0069..006A ; Soft_Dotted # L& [2] LATIN SMALL LETTER I..LATIN SMALL LETTER J -012F ; Soft_Dotted # L& LATIN SMALL LETTER I WITH OGONEK -0268 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH STROKE -029D ; Soft_Dotted # L& LATIN SMALL LETTER J WITH CROSSED-TAIL -02B2 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J -03F3 ; Soft_Dotted # L& GREEK LETTER YOT -0456 ; Soft_Dotted # L& CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0458 ; Soft_Dotted # L& CYRILLIC SMALL LETTER JE -1D62 ; Soft_Dotted # L& LATIN SUBSCRIPT SMALL LETTER I -1E2D ; Soft_Dotted # L& LATIN SMALL LETTER I WITH TILDE BELOW -1ECB ; Soft_Dotted # L& LATIN SMALL LETTER I WITH DOT BELOW -2071 ; Soft_Dotted # L& SUPERSCRIPT LATIN SMALL LETTER I -2148..2149 ; Soft_Dotted # L& [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J -1D422..1D423 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J -1D456..1D457 ; Soft_Dotted # L& [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J -1D48A..1D48B ; Soft_Dotted # L& [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J -1D4BE..1D4BF ; Soft_Dotted # L& [2] MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J -1D4F2..1D4F3 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J -1D526..1D527 ; Soft_Dotted # L& [2] MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J -1D55A..1D55B ; Soft_Dotted # L& [2] MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J -1D58E..1D58F ; Soft_Dotted # L& [2] MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J -1D5C2..1D5C3 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J -1D5F6..1D5F7 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J -1D62A..1D62B ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J -1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J -1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J - -# Total code points: 41 - -# ================================================ - -0E40..0E44 ; Logical_Order_Exception # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI -0EC0..0EC4 ; Logical_Order_Exception # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0069..006A ; Soft_Dotted +012F ; Soft_Dotted +0249 ; Soft_Dotted +0268 ; Soft_Dotted +029D ; Soft_Dotted +02B2 ; Soft_Dotted +03F3 ; Soft_Dotted +0456 ; Soft_Dotted +0458 ; Soft_Dotted +1D62 ; Soft_Dotted +1D96 ; Soft_Dotted +1DA4 ; Soft_Dotted +1DA8 ; Soft_Dotted +1E2D ; Soft_Dotted +1ECB ; Soft_Dotted +2071 ; Soft_Dotted +2148..2149 ; Soft_Dotted +1D422..1D423 ; Soft_Dotted +1D456..1D457 ; Soft_Dotted +1D48A..1D48B ; Soft_Dotted +1D4BE..1D4BF ; Soft_Dotted +1D4F2..1D4F3 ; Soft_Dotted +1D526..1D527 ; Soft_Dotted +1D55A..1D55B ; Soft_Dotted +1D58E..1D58F ; Soft_Dotted +1D5C2..1D5C3 ; Soft_Dotted +1D5F6..1D5F7 ; Soft_Dotted +1D62A..1D62B ; Soft_Dotted +1D65E..1D65F ; Soft_Dotted +1D692..1D693 ; Soft_Dotted + +# Total code points: 45 + +# ================================================ + +0E40..0E44 ; Logical_Order_Exception +0EC0..0EC4 ; Logical_Order_Exception # Total code points: 10 # ================================================ -2118 ; Other_ID_Start # So SCRIPT CAPITAL P -212E ; Other_ID_Start # So ESTIMATED SYMBOL -309B..309C ; Other_ID_Start # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +2118 ; Other_ID_Start +212E ; Other_ID_Start +309B..309C ; Other_ID_Start # Total code points: 4 # ================================================ -0021 ; STerm # Po EXCLAMATION MARK -002E ; STerm # Po FULL STOP -003F ; STerm # Po QUESTION MARK -055C ; STerm # Po ARMENIAN EXCLAMATION MARK -055E ; STerm # Po ARMENIAN QUESTION MARK -0589 ; STerm # Po ARMENIAN FULL STOP -061F ; STerm # Po ARABIC QUESTION MARK -06D4 ; STerm # Po ARABIC FULL STOP -0700..0702 ; STerm # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP -0964..0965 ; STerm # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA -104A..104B ; STerm # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION -1362 ; STerm # Po ETHIOPIC FULL STOP -1367..1368 ; STerm # Po [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR -166E ; STerm # Po CANADIAN SYLLABICS FULL STOP -1803 ; STerm # Po MONGOLIAN FULL STOP -1809 ; STerm # Po MONGOLIAN MANCHU FULL STOP -1944..1945 ; STerm # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK -203C..203D ; STerm # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG -2047..2049 ; STerm # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK -3002 ; STerm # Po IDEOGRAPHIC FULL STOP -FE52 ; STerm # Po SMALL FULL STOP -FE56..FE57 ; STerm # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK -FF01 ; STerm # Po FULLWIDTH EXCLAMATION MARK -FF0E ; STerm # Po FULLWIDTH FULL STOP -FF1F ; STerm # Po FULLWIDTH QUESTION MARK -FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP - -# Total code points: 36 - -# ================================================ - -180B..180D ; Variation_Selector # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE -FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 -E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 +1369..1371 ; Other_ID_Continue + +# Total code points: 9 + +# ================================================ + +0021 ; STerm +002E ; STerm +003F ; STerm +055C ; STerm +055E ; STerm +0589 ; STerm +061F ; STerm +06D4 ; STerm +0700..0702 ; STerm +07F9 ; STerm +0964..0965 ; STerm +104A..104B ; STerm +1362 ; STerm +1367..1368 ; STerm +166E ; STerm +1803 ; STerm +1809 ; STerm +1944..1945 ; STerm +1B5A..1B5B ; STerm +1B5E..1B5F ; STerm +203C..203D ; STerm +2047..2049 ; STerm +3002 ; STerm +A876..A877 ; STerm +FE52 ; STerm +FE56..FE57 ; STerm +FF01 ; STerm +FF0E ; STerm +FF1F ; STerm +FF61 ; STerm + +# Total code points: 43 + +# ================================================ + +180B..180D ; Variation_Selector +FE00..FE0F ; Variation_Selector +E0100..E01EF ; Variation_Selector # Total code points: 259 + +# ================================================ + +0009..000D ; Pattern_White_Space +0020 ; Pattern_White_Space +0085 ; Pattern_White_Space +200E..200F ; Pattern_White_Space +2028 ; Pattern_White_Space +2029 ; Pattern_White_Space + +# Total code points: 11 + +# ================================================ + +0021..0023 ; Pattern_Syntax +0024 ; Pattern_Syntax +0025..0027 ; Pattern_Syntax +0028 ; Pattern_Syntax +0029 ; Pattern_Syntax +002A ; Pattern_Syntax +002B ; Pattern_Syntax +002C ; Pattern_Syntax +002D ; Pattern_Syntax +002E..002F ; Pattern_Syntax +003A..003B ; Pattern_Syntax +003C..003E ; Pattern_Syntax +003F..0040 ; Pattern_Syntax +005B ; Pattern_Syntax +005C ; Pattern_Syntax +005D ; Pattern_Syntax +005E ; Pattern_Syntax +0060 ; Pattern_Syntax +007B ; Pattern_Syntax +007C ; Pattern_Syntax +007D ; Pattern_Syntax +007E ; Pattern_Syntax +00A1 ; Pattern_Syntax +00A2..00A5 ; Pattern_Syntax +00A6..00A7 ; Pattern_Syntax +00A9 ; Pattern_Syntax +00AB ; Pattern_Syntax +00AC ; Pattern_Syntax +00AE ; Pattern_Syntax +00B0 ; Pattern_Syntax +00B1 ; Pattern_Syntax +00B6 ; Pattern_Syntax +00BB ; Pattern_Syntax +00BF ; Pattern_Syntax +00D7 ; Pattern_Syntax +00F7 ; Pattern_Syntax +2010..2015 ; Pattern_Syntax +2016..2017 ; Pattern_Syntax +2018 ; Pattern_Syntax +2019 ; Pattern_Syntax +201A ; Pattern_Syntax +201B..201C ; Pattern_Syntax +201D ; Pattern_Syntax +201E ; Pattern_Syntax +201F ; Pattern_Syntax +2020..2027 ; Pattern_Syntax +2030..2038 ; Pattern_Syntax +2039 ; Pattern_Syntax +203A ; Pattern_Syntax +203B..203E ; Pattern_Syntax +2041..2043 ; Pattern_Syntax +2044 ; Pattern_Syntax +2045 ; Pattern_Syntax +2046 ; Pattern_Syntax +2047..2051 ; Pattern_Syntax +2052 ; Pattern_Syntax +2053 ; Pattern_Syntax +2055..205E ; Pattern_Syntax +2190..2194 ; Pattern_Syntax +2195..2199 ; Pattern_Syntax +219A..219B ; Pattern_Syntax +219C..219F ; Pattern_Syntax +21A0 ; Pattern_Syntax +21A1..21A2 ; Pattern_Syntax +21A3 ; Pattern_Syntax +21A4..21A5 ; Pattern_Syntax +21A6 ; Pattern_Syntax +21A7..21AD ; Pattern_Syntax +21AE ; Pattern_Syntax +21AF..21CD ; Pattern_Syntax +21CE..21CF ; Pattern_Syntax +21D0..21D1 ; Pattern_Syntax +21D2 ; Pattern_Syntax +21D3 ; Pattern_Syntax +21D4 ; Pattern_Syntax +21D5..21F3 ; Pattern_Syntax +21F4..22FF ; Pattern_Syntax +2300..2307 ; Pattern_Syntax +2308..230B ; Pattern_Syntax +230C..231F ; Pattern_Syntax +2320..2321 ; Pattern_Syntax +2322..2328 ; Pattern_Syntax +2329 ; Pattern_Syntax +232A ; Pattern_Syntax +232B..237B ; Pattern_Syntax +237C ; Pattern_Syntax +237D..239A ; Pattern_Syntax +239B..23B3 ; Pattern_Syntax +23B4..23DB ; Pattern_Syntax +23DC..23E1 ; Pattern_Syntax +23E2..23E7 ; Pattern_Syntax +23E8..23FF ; Pattern_Syntax +2400..2426 ; Pattern_Syntax +2427..243F ; Pattern_Syntax +2440..244A ; Pattern_Syntax +244B..245F ; Pattern_Syntax +2500..25B6 ; Pattern_Syntax +25B7 ; Pattern_Syntax +25B8..25C0 ; Pattern_Syntax +25C1 ; Pattern_Syntax +25C2..25F7 ; Pattern_Syntax +25F8..25FF ; Pattern_Syntax +2600..266E ; Pattern_Syntax +266F ; Pattern_Syntax +2670..269C ; Pattern_Syntax +269D..269F ; Pattern_Syntax +26A0..26B2 ; Pattern_Syntax +26B3..2700 ; Pattern_Syntax +2701..2704 ; Pattern_Syntax +2705 ; Pattern_Syntax +2706..2709 ; Pattern_Syntax +270A..270B ; Pattern_Syntax +270C..2727 ; Pattern_Syntax +2728 ; Pattern_Syntax +2729..274B ; Pattern_Syntax +274C ; Pattern_Syntax +274D ; Pattern_Syntax +274E ; Pattern_Syntax +274F..2752 ; Pattern_Syntax +2753..2755 ; Pattern_Syntax +2756 ; Pattern_Syntax +2757 ; Pattern_Syntax +2758..275E ; Pattern_Syntax +275F..2760 ; Pattern_Syntax +2761..2767 ; Pattern_Syntax +2768 ; Pattern_Syntax +2769 ; Pattern_Syntax +276A ; Pattern_Syntax +276B ; Pattern_Syntax +276C ; Pattern_Syntax +276D ; Pattern_Syntax +276E ; Pattern_Syntax +276F ; Pattern_Syntax +2770 ; Pattern_Syntax +2771 ; Pattern_Syntax +2772 ; Pattern_Syntax +2773 ; Pattern_Syntax +2774 ; Pattern_Syntax +2775 ; Pattern_Syntax +2794 ; Pattern_Syntax +2795..2797 ; Pattern_Syntax +2798..27AF ; Pattern_Syntax +27B0 ; Pattern_Syntax +27B1..27BE ; Pattern_Syntax +27BF ; Pattern_Syntax +27C0..27C4 ; Pattern_Syntax +27C5 ; Pattern_Syntax +27C6 ; Pattern_Syntax +27C7..27CA ; Pattern_Syntax +27CB..27CF ; Pattern_Syntax +27D0..27E5 ; Pattern_Syntax +27E6 ; Pattern_Syntax +27E7 ; Pattern_Syntax +27E8 ; Pattern_Syntax +27E9 ; Pattern_Syntax +27EA ; Pattern_Syntax +27EB ; Pattern_Syntax +27EC..27EF ; Pattern_Syntax +27F0..27FF ; Pattern_Syntax +2800..28FF ; Pattern_Syntax +2900..2982 ; Pattern_Syntax +2983 ; Pattern_Syntax +2984 ; Pattern_Syntax +2985 ; Pattern_Syntax +2986 ; Pattern_Syntax +2987 ; Pattern_Syntax +2988 ; Pattern_Syntax +2989 ; Pattern_Syntax +298A ; Pattern_Syntax +298B ; Pattern_Syntax +298C ; Pattern_Syntax +298D ; Pattern_Syntax +298E ; Pattern_Syntax +298F ; Pattern_Syntax +2990 ; Pattern_Syntax +2991 ; Pattern_Syntax +2992 ; Pattern_Syntax +2993 ; Pattern_Syntax +2994 ; Pattern_Syntax +2995 ; Pattern_Syntax +2996 ; Pattern_Syntax +2997 ; Pattern_Syntax +2998 ; Pattern_Syntax +2999..29D7 ; Pattern_Syntax +29D8 ; Pattern_Syntax +29D9 ; Pattern_Syntax +29DA ; Pattern_Syntax +29DB ; Pattern_Syntax +29DC..29FB ; Pattern_Syntax +29FC ; Pattern_Syntax +29FD ; Pattern_Syntax +29FE..2AFF ; Pattern_Syntax +2B00..2B1A ; Pattern_Syntax +2B1B..2B1F ; Pattern_Syntax +2B20..2B23 ; Pattern_Syntax +2B24..2BFF ; Pattern_Syntax +2E00..2E01 ; Pattern_Syntax +2E02 ; Pattern_Syntax +2E03 ; Pattern_Syntax +2E04 ; Pattern_Syntax +2E05 ; Pattern_Syntax +2E06..2E08 ; Pattern_Syntax +2E09 ; Pattern_Syntax +2E0A ; Pattern_Syntax +2E0B ; Pattern_Syntax +2E0C ; Pattern_Syntax +2E0D ; Pattern_Syntax +2E0E..2E16 ; Pattern_Syntax +2E17 ; Pattern_Syntax +2E18..2E1B ; Pattern_Syntax +2E1C ; Pattern_Syntax +2E1D ; Pattern_Syntax +2E1E..2E7F ; Pattern_Syntax +3001..3003 ; Pattern_Syntax +3008 ; Pattern_Syntax +3009 ; Pattern_Syntax +300A ; Pattern_Syntax +300B ; Pattern_Syntax +300C ; Pattern_Syntax +300D ; Pattern_Syntax +300E ; Pattern_Syntax +300F ; Pattern_Syntax +3010 ; Pattern_Syntax +3011 ; Pattern_Syntax +3012..3013 ; Pattern_Syntax +3014 ; Pattern_Syntax +3015 ; Pattern_Syntax +3016 ; Pattern_Syntax +3017 ; Pattern_Syntax +3018 ; Pattern_Syntax +3019 ; Pattern_Syntax +301A ; Pattern_Syntax +301B ; Pattern_Syntax +301C ; Pattern_Syntax +301D ; Pattern_Syntax +301E..301F ; Pattern_Syntax +3020 ; Pattern_Syntax +3030 ; Pattern_Syntax +FD3E ; Pattern_Syntax +FD3F ; Pattern_Syntax +FE45..FE46 ; Pattern_Syntax + +# Total code points: 2760 + +# EOF diff --git a/icuSources/data/unidata/PropertyAliases.txt b/icuSources/data/unidata/PropertyAliases.txt index cf9950f9..f69c2ffb 100644 --- a/icuSources/data/unidata/PropertyAliases.txt +++ b/icuSources/data/unidata/PropertyAliases.txt @@ -1,10 +1,11 @@ -# PropertyAliases-4.0.1.txt -# Date: 2004-03-02, 19:47:55 GMT [MD] +# PropertyAliases-5.0.0.txt +# Date: 2006-03-03, 08:23:34 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html +# # This file contains aliases for properties used in the UCD. # These names can be used for XML formats of UCD data, for regular-expression # property tests, and other programmatic textual descriptions of Unicode data. @@ -90,6 +91,7 @@ ccc ; Canonical_Combining_Class dt ; Decomposition_Type ea ; East_Asian_Width gc ; General_Category +GCB ; Grapheme_Cluster_Break hst ; Hangul_Syllable_Type jg ; Joining_Group jt ; Joining_Type @@ -99,6 +101,8 @@ NFD_QC ; NFD_Quick_Check NFKC_QC ; NFKC_Quick_Check NFKD_QC ; NFKD_Quick_Check nt ; Numeric_Type +SB ; Sentence_Break +WB ; Word_Break # ================================================ # Binary Properties @@ -132,10 +136,13 @@ NChar ; Noncharacter_Code_Point OAlpha ; Other_Alphabetic ODI ; Other_Default_Ignorable_Code_Point OGr_Ext ; Other_Grapheme_Extend +OIDC ; Other_ID_Continue OIDS ; Other_ID_Start OLower ; Other_Lowercase OMath ; Other_Math OUpper ; Other_Uppercase +Pat_Syn ; Pattern_Syntax +Pat_WS ; Pattern_White_Space QMark ; Quotation_Mark Radical ; Radical SD ; Soft_Dotted @@ -144,7 +151,7 @@ Term ; Terminal_Punctuation UIdeo ; Unified_Ideograph Upper ; Uppercase VS ; Variation_Selector -WSpace ; White_Space +WSpace ; White_Space ; space XIDC ; XID_Continue XIDS ; XID_Start XO_NFC ; Expands_On_NFC @@ -153,5 +160,6 @@ XO_NFKC ; Expands_On_NFKC XO_NFKD ; Expands_On_NFKD # ================================================ -# Total: 82 +# Total: 88 +# EOF diff --git a/icuSources/data/unidata/PropertyValueAliases.txt b/icuSources/data/unidata/PropertyValueAliases.txt index 74460d5c..60546fb0 100644 --- a/icuSources/data/unidata/PropertyValueAliases.txt +++ b/icuSources/data/unidata/PropertyValueAliases.txt @@ -1,10 +1,11 @@ -# PropertyValueAliases-4.0.1.txt -# Date: 2004-03-02, 19:46:47 GMT [MD] +# PropertyValueAliases-5.0.0.txt +# Date: 2006-03-03, 08:23:34 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html +# # This file contains aliases for property values used in the UCD. # These names can be used for XML formats of UCD data, for regular-expression # property tests, and other programmatic textual descriptions of Unicode data. @@ -63,6 +64,8 @@ age; n/a ; 3.0 age; n/a ; 3.1 age; n/a ; 3.2 age; n/a ; 4.0 +age; n/a ; 4.1 +age; n/a ; 5.0 age; n/a ; unassigned # Bidi_Class (bc) @@ -91,11 +94,15 @@ bc ; WS ; White_Space blk; n/a ; Aegean_Numbers blk; n/a ; Alphabetic_Presentation_Forms +blk; n/a ; Ancient_Greek_Musical_Notation +blk; n/a ; Ancient_Greek_Numbers blk; n/a ; Arabic blk; n/a ; Arabic_Presentation_Forms-A blk; n/a ; Arabic_Presentation_Forms-B +blk; n/a ; Arabic_Supplement blk; n/a ; Armenian blk; n/a ; Arrows +blk; n/a ; Balinese blk; n/a ; Basic_Latin blk; n/a ; Bengali blk; n/a ; Block_Elements @@ -103,6 +110,7 @@ blk; n/a ; Bopomofo blk; n/a ; Bopomofo_Extended blk; n/a ; Box_Drawing blk; n/a ; Braille_Patterns +blk; n/a ; Buginese blk; n/a ; Buhid blk; n/a ; Byzantine_Musical_Symbols blk; n/a ; Cherokee @@ -111,14 +119,20 @@ blk; n/a ; CJK_Compatibility_Forms blk; n/a ; CJK_Compatibility_Ideographs blk; n/a ; CJK_Compatibility_Ideographs_Supplement blk; n/a ; CJK_Radicals_Supplement +blk; n/a ; CJK_Strokes blk; n/a ; CJK_Symbols_and_Punctuation blk; n/a ; CJK_Unified_Ideographs blk; n/a ; CJK_Unified_Ideographs_Extension_A blk; n/a ; CJK_Unified_Ideographs_Extension_B blk; n/a ; Combining_Diacritical_Marks blk; n/a ; Combining_Diacritical_Marks_for_Symbols +blk; n/a ; Combining_Diacritical_Marks_Supplement blk; n/a ; Combining_Half_Marks blk; n/a ; Control_Pictures +blk; n/a ; Coptic +blk; n/a ; Counting_Rod_Numerals +blk; n/a ; Cuneiform +blk; n/a ; Cuneiform_Numbers_and_Punctuation blk; n/a ; Currency_Symbols blk; n/a ; Cypriot_Syllabary blk; n/a ; Cyrillic @@ -129,9 +143,13 @@ blk; n/a ; Dingbats blk; n/a ; Enclosed_Alphanumerics blk; n/a ; Enclosed_CJK_Letters_and_Months blk; n/a ; Ethiopic +blk; n/a ; Ethiopic_Extended +blk; n/a ; Ethiopic_Supplement blk; n/a ; General_Punctuation blk; n/a ; Geometric_Shapes blk; n/a ; Georgian +blk; n/a ; Georgian_Supplement +blk; n/a ; Glagolitic blk; n/a ; Gothic blk; n/a ; Greek_and_Coptic blk; n/a ; Greek_Extended @@ -153,12 +171,15 @@ blk; n/a ; Kangxi_Radicals blk; n/a ; Kannada blk; n/a ; Katakana blk; n/a ; Katakana_Phonetic_Extensions +blk; n/a ; Kharoshthi blk; n/a ; Khmer blk; n/a ; Khmer_Symbols blk; n/a ; Lao blk; n/a ; Latin-1_Supplement blk; n/a ; Latin_Extended-A blk; n/a ; Latin_Extended-B +blk; n/a ; Latin_Extended-C +blk; n/a ; Latin_Extended-D blk; n/a ; Latin_Extended_Additional blk; n/a ; Letterlike_Symbols blk; n/a ; Limbu @@ -173,17 +194,24 @@ blk; n/a ; Miscellaneous_Mathematical_Symbols-B blk; n/a ; Miscellaneous_Symbols blk; n/a ; Miscellaneous_Symbols_and_Arrows blk; n/a ; Miscellaneous_Technical +blk; n/a ; Modifier_Tone_Letters blk; n/a ; Mongolian blk; n/a ; Musical_Symbols blk; n/a ; Myanmar +blk; n/a ; New_Tai_Lue +blk; n/a ; NKo blk; n/a ; No_Block blk; n/a ; Number_Forms blk; n/a ; Ogham blk; n/a ; Old_Italic +blk; n/a ; Old_Persian blk; n/a ; Optical_Character_Recognition blk; n/a ; Oriya blk; n/a ; Osmanya +blk; n/a ; Phags-pa +blk; n/a ; Phoenician blk; n/a ; Phonetic_Extensions +blk; n/a ; Phonetic_Extensions_Supplement blk; n/a ; Private_Use_Area blk; n/a ; Runic blk; n/a ; Shavian @@ -195,8 +223,10 @@ blk; n/a ; Superscripts_and_Subscripts blk; n/a ; Supplemental_Arrows-A blk; n/a ; Supplemental_Arrows-B blk; n/a ; Supplemental_Mathematical_Operators +blk; n/a ; Supplemental_Punctuation blk; n/a ; Supplementary_Private_Use_Area-A blk; n/a ; Supplementary_Private_Use_Area-B +blk; n/a ; Syloti_Nagri blk; n/a ; Syriac blk; n/a ; Tagalog blk; n/a ; Tagbanwa @@ -208,10 +238,12 @@ blk; n/a ; Telugu blk; n/a ; Thaana blk; n/a ; Thai blk; n/a ; Tibetan +blk; n/a ; Tifinagh blk; n/a ; Ugaritic blk; n/a ; Unified_Canadian_Aboriginal_Syllabics blk; n/a ; Variation_Selectors blk; n/a ; Variation_Selectors_Supplement +blk; n/a ; Vertical_Forms blk; n/a ; Yi_Radicals blk; n/a ; Yi_Syllables blk; n/a ; Yijing_Hexagram_Symbols @@ -271,7 +303,7 @@ ea ; W ; Wide # General_Category (gc) gc ; C ; Other # Cc | Cf | Cn | Co | Cs -gc ; Cc ; Control +gc ; Cc ; Control ; cntrl gc ; Cf ; Format gc ; Cn ; Unassigned gc ; Co ; Private_Use @@ -288,10 +320,10 @@ gc ; Mc ; Spacing_Mark gc ; Me ; Enclosing_Mark gc ; Mn ; Nonspacing_Mark gc ; N ; Number # Nd | Nl | No -gc ; Nd ; Decimal_Number +gc ; Nd ; Decimal_Number ; digit gc ; Nl ; Letter_Number gc ; No ; Other_Number -gc ; P ; Punctuation # Pc | Pd | Pe | Pf | Pi | Po | Ps +gc ; P ; Punctuation ; punct # Pc | Pd | Pe | Pf | Pi | Po | Ps gc ; Pc ; Connector_Punctuation gc ; Pd ; Dash_Punctuation gc ; Pe ; Close_Punctuation @@ -309,6 +341,19 @@ gc ; Zl ; Line_Separator gc ; Zp ; Paragraph_Separator gc ; Zs ; Space_Separator +# Grapheme_Cluster_Break (GCB) + +GCB; CN ; Control +GCB; CR ; CR +GCB; EX ; Extend +GCB; L ; L +GCB; LF ; LF +GCB; LV ; LV +GCB; LVT ; LVT +GCB; T ; T +GCB; V ; V +GCB; XX ; Other + # Hangul_Syllable_Type (hst) hst; L ; Leading_Jamo @@ -398,10 +443,15 @@ lb ; CM ; Combining_Mark lb ; CR ; Carriage_Return lb ; EX ; Exclamation lb ; GL ; Glue +lb ; H2 ; H2 +lb ; H3 ; H3 lb ; HY ; Hyphen lb ; ID ; Ideographic lb ; IN ; Inseparable ; Inseperable lb ; IS ; Infix_Numeric +lb ; JL ; JL +lb ; JT ; JT +lb ; JV ; JV lb ; LF ; Line_Feed lb ; NL ; Next_Line lb ; NS ; Nonstarter @@ -451,18 +501,22 @@ nt ; Nu ; Numeric sc ; Arab ; Arabic sc ; Armn ; Armenian +sc ; Bali ; Balinese sc ; Beng ; Bengali sc ; Bopo ; Bopomofo sc ; Brai ; Braille +sc ; Bugi ; Buginese sc ; Buhd ; Buhid sc ; Cans ; Canadian_Aboriginal sc ; Cher ; Cherokee +sc ; Copt ; Coptic ; Qaac sc ; Cprt ; Cypriot sc ; Cyrl ; Cyrillic sc ; Deva ; Devanagari sc ; Dsrt ; Deseret sc ; Ethi ; Ethiopic sc ; Geor ; Georgian +sc ; Glag ; Glagolitic sc ; Goth ; Gothic sc ; Grek ; Greek sc ; Gujr ; Gujarati @@ -475,6 +529,7 @@ sc ; Hira ; Hiragana sc ; Hrkt ; Katakana_Or_Hiragana sc ; Ital ; Old_Italic sc ; Kana ; Katakana +sc ; Khar ; Kharoshthi sc ; Khmr ; Khmer sc ; Knda ; Kannada sc ; Laoo ; Lao @@ -484,22 +539,58 @@ sc ; Linb ; Linear_B sc ; Mlym ; Malayalam sc ; Mong ; Mongolian sc ; Mymr ; Myanmar +sc ; Nkoo ; Nko sc ; Ogam ; Ogham sc ; Orya ; Oriya sc ; Osma ; Osmanya +sc ; Phag ; Phags_Pa +sc ; Phnx ; Phoenician sc ; Qaai ; Inherited sc ; Runr ; Runic sc ; Shaw ; Shavian sc ; Sinh ; Sinhala +sc ; Sylo ; Syloti_Nagri sc ; Syrc ; Syriac sc ; Tagb ; Tagbanwa sc ; Tale ; Tai_Le +sc ; Talu ; New_Tai_Lue sc ; Taml ; Tamil sc ; Telu ; Telugu +sc ; Tfng ; Tifinagh sc ; Tglg ; Tagalog sc ; Thaa ; Thaana sc ; Thai ; Thai sc ; Tibt ; Tibetan sc ; Ugar ; Ugaritic +sc ; Xpeo ; Old_Persian +sc ; Xsux ; Cuneiform sc ; Yiii ; Yi sc ; Zyyy ; Common +sc ; Zzzz ; Unknown + +# Sentence_Break (SB) + +SB ; AT ; ATerm +SB ; CL ; Close +SB ; FO ; Format +SB ; LE ; OLetter +SB ; LO ; Lower +SB ; NU ; Numeric +SB ; SE ; Sep +SB ; SP ; Sp +SB ; ST ; STerm +SB ; UP ; Upper +SB ; XX ; Other + +# Word_Break (WB) + +WB ; EX ; ExtendNumLet +WB ; FO ; Format +WB ; KA ; Katakana +WB ; LE ; ALetter +WB ; ML ; MidLetter +WB ; MN ; MidNum +WB ; NU ; Numeric +WB ; XX ; Other + +# EOF diff --git a/icuSources/data/unidata/Scripts.txt b/icuSources/data/unidata/Scripts.txt index 2aa0630d..0b26ddf6 100644 --- a/icuSources/data/unidata/Scripts.txt +++ b/icuSources/data/unidata/Scripts.txt @@ -1,8 +1,8 @@ -# Scripts-4.0.1.txt -# Date: 2004-03-11, 18:47:37 GMT [MD] +# Scripts-5.0.0.txt +# Date: 2006-03-09, 23:14:25 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2004 Unicode, Inc. +# Copyright (c) 1991-2006 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # For documentation, see UCD.html @@ -11,1326 +11,1529 @@ # Property: Script # All code points not explicitly listed for Script -# have the value Common (Zyyy). - -# ================================================ - -0000..001F ; Common # Cc [32] .. -0020 ; Common # Zs SPACE -0021..0023 ; Common # Po [3] EXCLAMATION MARK..NUMBER SIGN -0024 ; Common # Sc DOLLAR SIGN -0025..0027 ; Common # Po [3] PERCENT SIGN..APOSTROPHE -0028 ; Common # Ps LEFT PARENTHESIS -0029 ; Common # Pe RIGHT PARENTHESIS -002A ; Common # Po ASTERISK -002B ; Common # Sm PLUS SIGN -002C ; Common # Po COMMA -002D ; Common # Pd HYPHEN-MINUS -002E..002F ; Common # Po [2] FULL STOP..SOLIDUS -0030..0039 ; Common # Nd [10] DIGIT ZERO..DIGIT NINE -003A..003B ; Common # Po [2] COLON..SEMICOLON -003C..003E ; Common # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN -003F..0040 ; Common # Po [2] QUESTION MARK..COMMERCIAL AT -005B ; Common # Ps LEFT SQUARE BRACKET -005C ; Common # Po REVERSE SOLIDUS -005D ; Common # Pe RIGHT SQUARE BRACKET -005E ; Common # Sk CIRCUMFLEX ACCENT -005F ; Common # Pc LOW LINE -0060 ; Common # Sk GRAVE ACCENT -007B ; Common # Ps LEFT CURLY BRACKET -007C ; Common # Sm VERTICAL LINE -007D ; Common # Pe RIGHT CURLY BRACKET -007E ; Common # Sm TILDE -007F..009F ; Common # Cc [33] .. -00A0 ; Common # Zs NO-BREAK SPACE -00A1 ; Common # Po INVERTED EXCLAMATION MARK -00A2..00A5 ; Common # Sc [4] CENT SIGN..YEN SIGN -00A6..00A7 ; Common # So [2] BROKEN BAR..SECTION SIGN -00A8 ; Common # Sk DIAERESIS -00A9 ; Common # So COPYRIGHT SIGN -00AB ; Common # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -00AC ; Common # Sm NOT SIGN -00AD ; Common # Cf SOFT HYPHEN -00AE ; Common # So REGISTERED SIGN -00AF ; Common # Sk MACRON -00B0 ; Common # So DEGREE SIGN -00B1 ; Common # Sm PLUS-MINUS SIGN -00B2..00B3 ; Common # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE -00B4 ; Common # Sk ACUTE ACCENT -00B5 ; Common # L& MICRO SIGN -00B6 ; Common # So PILCROW SIGN -00B7 ; Common # Po MIDDLE DOT -00B8 ; Common # Sk CEDILLA -00B9 ; Common # No SUPERSCRIPT ONE -00BB ; Common # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -00BC..00BE ; Common # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS -00BF ; Common # Po INVERTED QUESTION MARK -00D7 ; Common # Sm MULTIPLICATION SIGN -00F7 ; Common # Sm DIVISION SIGN -02B9..02C1 ; Common # Lm [9] MODIFIER LETTER PRIME..MODIFIER LETTER REVERSED GLOTTAL STOP -02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD -02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON -02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT -02E5..02ED ; Common # Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED -02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE -02EF..02FF ; Common # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW -037E ; Common # Po GREEK QUESTION MARK -0387 ; Common # Po GREEK ANO TELEIA -0589 ; Common # Po ARMENIAN FULL STOP -0600..0603 ; Common # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA -060C ; Common # Po ARABIC COMMA -061B ; Common # Po ARABIC SEMICOLON -061F ; Common # Po ARABIC QUESTION MARK -0640 ; Common # Lm ARABIC TATWEEL -0660..0669 ; Common # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE -06DD ; Common # Cf ARABIC END OF AYAH -0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA -0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN -0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT -10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR -16EB..16ED ; Common # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION -1735..1736 ; Common # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION -2000..200A ; Common # Zs [11] EN QUAD..HAIR SPACE -200B ; Common # Cf ZERO WIDTH SPACE -200E..200F ; Common # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK -2010..2015 ; Common # Pd [6] HYPHEN..HORIZONTAL BAR -2016..2017 ; Common # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE -2018 ; Common # Pi LEFT SINGLE QUOTATION MARK -2019 ; Common # Pf RIGHT SINGLE QUOTATION MARK -201A ; Common # Ps SINGLE LOW-9 QUOTATION MARK -201B..201C ; Common # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK -201D ; Common # Pf RIGHT DOUBLE QUOTATION MARK -201E ; Common # Ps DOUBLE LOW-9 QUOTATION MARK -201F ; Common # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK -2020..2027 ; Common # Po [8] DAGGER..HYPHENATION POINT -2028 ; Common # Zl LINE SEPARATOR -2029 ; Common # Zp PARAGRAPH SEPARATOR -202A..202E ; Common # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE -202F ; Common # Zs NARROW NO-BREAK SPACE -2030..2038 ; Common # Po [9] PER MILLE SIGN..CARET -2039 ; Common # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK -203A ; Common # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -203B..203E ; Common # Po [4] REFERENCE MARK..OVERLINE -203F..2040 ; Common # Pc [2] UNDERTIE..CHARACTER TIE -2041..2043 ; Common # Po [3] CARET INSERTION POINT..HYPHEN BULLET -2044 ; Common # Sm FRACTION SLASH -2045 ; Common # Ps LEFT SQUARE BRACKET WITH QUILL -2046 ; Common # Pe RIGHT SQUARE BRACKET WITH QUILL -2047..2051 ; Common # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY -2052 ; Common # Sm COMMERCIAL MINUS SIGN -2053 ; Common # Po SWUNG DASH -2054 ; Common # Pc INVERTED UNDERTIE -2057 ; Common # Po QUADRUPLE PRIME -205F ; Common # Zs MEDIUM MATHEMATICAL SPACE -2060..2063 ; Common # Cf [4] WORD JOINER..INVISIBLE SEPARATOR -206A..206F ; Common # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES -2070 ; Common # No SUPERSCRIPT ZERO -2074..2079 ; Common # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE -207A..207C ; Common # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN -207D ; Common # Ps SUPERSCRIPT LEFT PARENTHESIS -207E ; Common # Pe SUPERSCRIPT RIGHT PARENTHESIS -2080..2089 ; Common # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE -208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN -208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS -208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS -20A0..20B1 ; Common # Sc [18] EURO-CURRENCY SIGN..PESO SIGN -2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT -2102 ; Common # L& DOUBLE-STRUCK CAPITAL C -2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA -2107 ; Common # L& EULER CONSTANT -2108..2109 ; Common # So [2] SCRUPLE..DEGREE FAHRENHEIT -210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L -2114 ; Common # So L B BAR SYMBOL -2115 ; Common # L& DOUBLE-STRUCK CAPITAL N -2116..2118 ; Common # So [3] NUMERO SIGN..SCRIPT CAPITAL P -2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R -211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE -2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z -2125 ; Common # So OUNCE SIGN -2127 ; Common # So INVERTED OHM SIGN -2128 ; Common # L& BLACK-LETTER CAPITAL Z -2129 ; Common # So TURNED GREEK SMALL LETTER IOTA -212C..212D ; Common # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C -212E ; Common # So ESTIMATED SYMBOL -212F..2131 ; Common # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F -2132 ; Common # So TURNED CAPITAL F -2133..2134 ; Common # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O -2135..2138 ; Common # Lo [4] ALEF SYMBOL..DALET SYMBOL -2139 ; Common # L& INFORMATION SOURCE -213A..213B ; Common # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN -213D..213F ; Common # L& [3] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL PI -2140..2144 ; Common # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y -2145..2149 ; Common # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J -214A ; Common # So PROPERTY LINE -214B ; Common # Sm TURNED AMPERSAND -2153..215F ; Common # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE -2160..2183 ; Common # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED -2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW -2195..2199 ; Common # So [5] UP DOWN ARROW..SOUTH WEST ARROW -219A..219B ; Common # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE -219C..219F ; Common # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW -21A0 ; Common # Sm RIGHTWARDS TWO HEADED ARROW -21A1..21A2 ; Common # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL -21A3 ; Common # Sm RIGHTWARDS ARROW WITH TAIL -21A4..21A5 ; Common # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR -21A6 ; Common # Sm RIGHTWARDS ARROW FROM BAR -21A7..21AD ; Common # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW -21AE ; Common # Sm LEFT RIGHT ARROW WITH STROKE -21AF..21CD ; Common # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE -21CE..21CF ; Common # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE -21D0..21D1 ; Common # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW -21D2 ; Common # Sm RIGHTWARDS DOUBLE ARROW -21D3 ; Common # So DOWNWARDS DOUBLE ARROW -21D4 ; Common # Sm LEFT RIGHT DOUBLE ARROW -21D5..21F3 ; Common # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW -21F4..22FF ; Common # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP -2300..2307 ; Common # So [8] DIAMETER SIGN..WAVY LINE -2308..230B ; Common # Sm [4] LEFT CEILING..RIGHT FLOOR -230C..231F ; Common # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER -2320..2321 ; Common # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL -2322..2328 ; Common # So [7] FROWN..KEYBOARD -2329 ; Common # Ps LEFT-POINTING ANGLE BRACKET -232A ; Common # Pe RIGHT-POINTING ANGLE BRACKET -232B..237B ; Common # So [81] ERASE TO THE LEFT..NOT CHECK MARK -237C ; Common # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW -237D..239A ; Common # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL -239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM -23B4 ; Common # Ps TOP SQUARE BRACKET -23B5 ; Common # Pe BOTTOM SQUARE BRACKET -23B6 ; Common # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET -23B7..23D0 ; Common # So [26] RADICAL SYMBOL BOTTOM..VERTICAL LINE EXTENSION -2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO -2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH -2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP -249C..24E9 ; Common # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -24EA..24FF ; Common # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO -2500..25B6 ; Common # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE -25B7 ; Common # Sm WHITE RIGHT-POINTING TRIANGLE -25B8..25C0 ; Common # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE -25C1 ; Common # Sm WHITE LEFT-POINTING TRIANGLE -25C2..25F7 ; Common # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT -25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE -2600..2617 ; Common # So [24] BLACK SUN WITH RAYS..BLACK SHOGI PIECE -2619..266E ; Common # So [86] REVERSED ROTATED FLORAL HEART BULLET..MUSIC NATURAL SIGN -266F ; Common # Sm MUSIC SHARP SIGN -2670..267D ; Common # So [14] WEST SYRIAC CROSS..PARTIALLY-RECYCLED PAPER SYMBOL -2680..2691 ; Common # So [18] DIE FACE-1..BLACK FLAG -26A0..26A1 ; Common # So [2] WARNING SIGN..HIGH VOLTAGE SIGN -2701..2704 ; Common # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS -2706..2709 ; Common # So [4] TELEPHONE LOCATION SIGN..ENVELOPE -270C..2727 ; Common # So [28] VICTORY HAND..WHITE FOUR POINTED STAR -2729..274B ; Common # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK -274D ; Common # So SHADOWED WHITE CIRCLE -274F..2752 ; Common # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE -2756 ; Common # So BLACK DIAMOND MINUS WHITE X -2758..275E ; Common # So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT -2761..2767 ; Common # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET -2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT -2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT -276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT -276B ; Common # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT -276C ; Common # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT -276D ; Common # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT -276E ; Common # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT -276F ; Common # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT -2770 ; Common # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT -2771 ; Common # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT -2772 ; Common # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT -2773 ; Common # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT -2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT -2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT -2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN -2794 ; Common # So HEAVY WIDE-HEADED RIGHTWARDS ARROW -2798..27AF ; Common # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -27B1..27BE ; Common # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW -27D0..27E5 ; Common # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK -27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET -27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET -27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET -27E9 ; Common # Pe MATHEMATICAL RIGHT ANGLE BRACKET -27EA ; Common # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET -27EB ; Common # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET -27F0..27FF ; Common # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW -2900..2982 ; Common # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON -2983 ; Common # Ps LEFT WHITE CURLY BRACKET -2984 ; Common # Pe RIGHT WHITE CURLY BRACKET -2985 ; Common # Ps LEFT WHITE PARENTHESIS -2986 ; Common # Pe RIGHT WHITE PARENTHESIS -2987 ; Common # Ps Z NOTATION LEFT IMAGE BRACKET -2988 ; Common # Pe Z NOTATION RIGHT IMAGE BRACKET -2989 ; Common # Ps Z NOTATION LEFT BINDING BRACKET -298A ; Common # Pe Z NOTATION RIGHT BINDING BRACKET -298B ; Common # Ps LEFT SQUARE BRACKET WITH UNDERBAR -298C ; Common # Pe RIGHT SQUARE BRACKET WITH UNDERBAR -298D ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER -298E ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -298F ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -2990 ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER -2991 ; Common # Ps LEFT ANGLE BRACKET WITH DOT -2992 ; Common # Pe RIGHT ANGLE BRACKET WITH DOT -2993 ; Common # Ps LEFT ARC LESS-THAN BRACKET -2994 ; Common # Pe RIGHT ARC GREATER-THAN BRACKET -2995 ; Common # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET -2996 ; Common # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET -2997 ; Common # Ps LEFT BLACK TORTOISE SHELL BRACKET -2998 ; Common # Pe RIGHT BLACK TORTOISE SHELL BRACKET -2999..29D7 ; Common # Sm [63] DOTTED FENCE..BLACK HOURGLASS -29D8 ; Common # Ps LEFT WIGGLY FENCE -29D9 ; Common # Pe RIGHT WIGGLY FENCE -29DA ; Common # Ps LEFT DOUBLE WIGGLY FENCE -29DB ; Common # Pe RIGHT DOUBLE WIGGLY FENCE -29DC..29FB ; Common # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS -29FC ; Common # Ps LEFT-POINTING CURVED ANGLE BRACKET -29FD ; Common # Pe RIGHT-POINTING CURVED ANGLE BRACKET -29FE..2AFF ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR -2B00..2B0D ; Common # So [14] NORTH EAST WHITE ARROW..UP DOWN BLACK ARROW -2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID -3000 ; Common # Zs IDEOGRAPHIC SPACE -3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK -3004 ; Common # So JAPANESE INDUSTRIAL STANDARD SYMBOL -3006 ; Common # Lo IDEOGRAPHIC CLOSING MARK -3008 ; Common # Ps LEFT ANGLE BRACKET -3009 ; Common # Pe RIGHT ANGLE BRACKET -300A ; Common # Ps LEFT DOUBLE ANGLE BRACKET -300B ; Common # Pe RIGHT DOUBLE ANGLE BRACKET -300C ; Common # Ps LEFT CORNER BRACKET -300D ; Common # Pe RIGHT CORNER BRACKET -300E ; Common # Ps LEFT WHITE CORNER BRACKET -300F ; Common # Pe RIGHT WHITE CORNER BRACKET -3010 ; Common # Ps LEFT BLACK LENTICULAR BRACKET -3011 ; Common # Pe RIGHT BLACK LENTICULAR BRACKET -3012..3013 ; Common # So [2] POSTAL MARK..GETA MARK -3014 ; Common # Ps LEFT TORTOISE SHELL BRACKET -3015 ; Common # Pe RIGHT TORTOISE SHELL BRACKET -3016 ; Common # Ps LEFT WHITE LENTICULAR BRACKET -3017 ; Common # Pe RIGHT WHITE LENTICULAR BRACKET -3018 ; Common # Ps LEFT WHITE TORTOISE SHELL BRACKET -3019 ; Common # Pe RIGHT WHITE TORTOISE SHELL BRACKET -301A ; Common # Ps LEFT WHITE SQUARE BRACKET -301B ; Common # Pe RIGHT WHITE SQUARE BRACKET -301C ; Common # Pd WAVE DASH -301D ; Common # Ps REVERSED DOUBLE PRIME QUOTATION MARK -301E..301F ; Common # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK -3020 ; Common # So POSTAL MARK FACE -3030 ; Common # Pd WAVY DASH -3036..3037 ; Common # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL -303C ; Common # Lo MASU MARK -303D ; Common # Po PART ALTERNATION MARK -303E..303F ; Common # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE -30A0 ; Common # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN -30FB ; Common # Pc KATAKANA MIDDLE DOT -30FC ; Common # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK -3190..3191 ; Common # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK -3192..3195 ; Common # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK -3196..319F ; Common # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK -3220..3229 ; Common # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN -322A..3243 ; Common # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH -3250 ; Common # So PARTNERSHIP SIGN -3251..325F ; Common # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE -327F ; Common # So KOREAN STANDARD SYMBOL -3280..3289 ; Common # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN -328A..32B0 ; Common # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT -32B1..32BF ; Common # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY -32C0..32FE ; Common # So [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO -3300..33FF ; Common # So [256] SQUARE APAATO..SQUARE GAL -4DC0..4DFF ; Common # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION -E000..F8FF ; Common # Co [6400] .. -FD3E ; Common # Ps ORNATE LEFT PARENTHESIS -FD3F ; Common # Pe ORNATE RIGHT PARENTHESIS -FDFD ; Common # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM -FE30 ; Common # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER -FE31..FE32 ; Common # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH -FE33..FE34 ; Common # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE -FE35 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS -FE36 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS -FE37 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET -FE38 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET -FE39 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET -FE3A ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET -FE3B ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET -FE3C ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET -FE3D ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET -FE3E ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET -FE3F ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET -FE40 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET -FE41 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET -FE42 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET -FE43 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET -FE44 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET -FE45..FE46 ; Common # Po [2] SESAME DOT..WHITE SESAME DOT -FE47 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET -FE48 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET -FE49..FE4C ; Common # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE -FE4D..FE4F ; Common # Pc [3] DASHED LOW LINE..WAVY LOW LINE -FE50..FE52 ; Common # Po [3] SMALL COMMA..SMALL FULL STOP -FE54..FE57 ; Common # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK -FE58 ; Common # Pd SMALL EM DASH -FE59 ; Common # Ps SMALL LEFT PARENTHESIS -FE5A ; Common # Pe SMALL RIGHT PARENTHESIS -FE5B ; Common # Ps SMALL LEFT CURLY BRACKET -FE5C ; Common # Pe SMALL RIGHT CURLY BRACKET -FE5D ; Common # Ps SMALL LEFT TORTOISE SHELL BRACKET -FE5E ; Common # Pe SMALL RIGHT TORTOISE SHELL BRACKET -FE5F..FE61 ; Common # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK -FE62 ; Common # Sm SMALL PLUS SIGN -FE63 ; Common # Pd SMALL HYPHEN-MINUS -FE64..FE66 ; Common # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN -FE68 ; Common # Po SMALL REVERSE SOLIDUS -FE69 ; Common # Sc SMALL DOLLAR SIGN -FE6A..FE6B ; Common # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT -FEFF ; Common # Cf ZERO WIDTH NO-BREAK SPACE -FF01..FF03 ; Common # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN -FF04 ; Common # Sc FULLWIDTH DOLLAR SIGN -FF05..FF07 ; Common # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE -FF08 ; Common # Ps FULLWIDTH LEFT PARENTHESIS -FF09 ; Common # Pe FULLWIDTH RIGHT PARENTHESIS -FF0A ; Common # Po FULLWIDTH ASTERISK -FF0B ; Common # Sm FULLWIDTH PLUS SIGN -FF0C ; Common # Po FULLWIDTH COMMA -FF0D ; Common # Pd FULLWIDTH HYPHEN-MINUS -FF0E..FF0F ; Common # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS -FF10..FF19 ; Common # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE -FF1A..FF1B ; Common # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON -FF1C..FF1E ; Common # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN -FF1F..FF20 ; Common # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT -FF3B ; Common # Ps FULLWIDTH LEFT SQUARE BRACKET -FF3C ; Common # Po FULLWIDTH REVERSE SOLIDUS -FF3D ; Common # Pe FULLWIDTH RIGHT SQUARE BRACKET -FF3E ; Common # Sk FULLWIDTH CIRCUMFLEX ACCENT -FF3F ; Common # Pc FULLWIDTH LOW LINE -FF40 ; Common # Sk FULLWIDTH GRAVE ACCENT -FF5B ; Common # Ps FULLWIDTH LEFT CURLY BRACKET -FF5C ; Common # Sm FULLWIDTH VERTICAL LINE -FF5D ; Common # Pe FULLWIDTH RIGHT CURLY BRACKET -FF5E ; Common # Sm FULLWIDTH TILDE -FF5F ; Common # Ps FULLWIDTH LEFT WHITE PARENTHESIS -FF60 ; Common # Pe FULLWIDTH RIGHT WHITE PARENTHESIS -FF61 ; Common # Po HALFWIDTH IDEOGRAPHIC FULL STOP -FF62 ; Common # Ps HALFWIDTH LEFT CORNER BRACKET -FF63 ; Common # Pe HALFWIDTH RIGHT CORNER BRACKET -FF64 ; Common # Po HALFWIDTH IDEOGRAPHIC COMMA -FF65 ; Common # Pc HALFWIDTH KATAKANA MIDDLE DOT -FFE0..FFE1 ; Common # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN -FFE2 ; Common # Sm FULLWIDTH NOT SIGN -FFE3 ; Common # Sk FULLWIDTH MACRON -FFE4 ; Common # So FULLWIDTH BROKEN BAR -FFE5..FFE6 ; Common # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN -FFE8 ; Common # So HALFWIDTH FORMS LIGHT VERTICAL -FFE9..FFEC ; Common # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW -FFED..FFEE ; Common # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE -FFF9..FFFB ; Common # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR -FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER -10100..10101 ; Common # Po [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT -10102 ; Common # So AEGEAN CHECK MARK -10107..10133 ; Common # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND -10137..1013F ; Common # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT -1D000..1D0F5 ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO -1D100..1D126 ; Common # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 -1D12A..1D164 ; Common # So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE -1D165..1D166 ; Common # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM -1D16A..1D16C ; Common # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 -1D16D..1D172 ; Common # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE -1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN -1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH -1D1AE..1D1DD ; Common # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS -1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING -1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G -1D456..1D49C ; Common # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A -1D49E..1D49F ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D -1D4A2 ; Common # L& MATHEMATICAL SCRIPT CAPITAL G -1D4A5..1D4A6 ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K -1D4A9..1D4AC ; Common # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q -1D4AE..1D4B9 ; Common # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D -1D4BB ; Common # L& MATHEMATICAL SCRIPT SMALL F -1D4BD..1D4C3 ; Common # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N -1D4C5..1D505 ; Common # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B -1D507..1D50A ; Common # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G -1D50D..1D514 ; Common # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q -1D516..1D51C ; Common # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y -1D51E..1D539 ; Common # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B -1D53B..1D53E ; Common # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G -1D540..1D544 ; Common # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M -1D546 ; Common # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O -1D54A..1D550 ; Common # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y -1D552..1D6A3 ; Common # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z -1D6A8..1D6C0 ; Common # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA -1D6C1 ; Common # Sm MATHEMATICAL BOLD NABLA -1D6C2..1D6DA ; Common # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA -1D6DB ; Common # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL -1D6DC..1D6FA ; Common # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA -1D6FB ; Common # Sm MATHEMATICAL ITALIC NABLA -1D6FC..1D714 ; Common # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA -1D715 ; Common # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL -1D716..1D734 ; Common # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA -1D735 ; Common # Sm MATHEMATICAL BOLD ITALIC NABLA -1D736..1D74E ; Common # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA -1D74F ; Common # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL -1D750..1D76E ; Common # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA -1D76F ; Common # Sm MATHEMATICAL SANS-SERIF BOLD NABLA -1D770..1D788 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA -1D789 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL -1D78A..1D7A8 ; Common # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA -1D7A9 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA -1D7AA..1D7C2 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA -1D7C3 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL -1D7C4..1D7C9 ; Common # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL -1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE -E0001 ; Common # Cf LANGUAGE TAG -E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG -F0000..FFFFD ; Common # Co [65534] .. -100000..10FFFD; Common # Co [65534] .. - -# The above property value applies to 880197 code points not listed here. -# Total code points: 1022471 - -# ================================================ - -0041..005A ; Latin # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z -0061..007A ; Latin # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z -00AA ; Latin # L& FEMININE ORDINAL INDICATOR -00BA ; Latin # L& MASCULINE ORDINAL INDICATOR -00C0..00D6 ; Latin # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS -00D8..00F6 ; Latin # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS -00F8..01BA ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL -01BB ; Latin # Lo LATIN LETTER TWO WITH STROKE -01BC..01BF ; Latin # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN -01C0..01C3 ; Latin # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK -01C4..0236 ; Latin # L& [115] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER T WITH CURL -0250..02AF ; Latin # L& [96] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL -02B0..02B8 ; Latin # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y -02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN -1D2C..1D5C ; Latin # Lm [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN -1D62..1D65 ; Latin # L& [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V -1D6B ; Latin # L& LATIN SMALL LETTER UE -1E00..1E9B ; Latin # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE -1EA0..1EF9 ; Latin # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE -2071 ; Latin # L& SUPERSCRIPT LATIN SMALL LETTER I -207F ; Latin # L& SUPERSCRIPT LATIN SMALL LETTER N -212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN -FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST -FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z -FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z - -# Total code points: 938 - -# ================================================ - -0374..0375 ; Greek # Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN -037A ; Greek # Lm GREEK YPOGEGRAMMENI -0384..0385 ; Greek # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS -0386 ; Greek # L& GREEK CAPITAL LETTER ALPHA WITH TONOS -0388..038A ; Greek # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS -038C ; Greek # L& GREEK CAPITAL LETTER OMICRON WITH TONOS -038E..03A1 ; Greek # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO -03A3..03CE ; Greek # L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS -03D0..03F5 ; Greek # L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL -03F6 ; Greek # Sm GREEK REVERSED LUNATE EPSILON SYMBOL -03F7..03FB ; Greek # L& [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN -1D26..1D2A ; Greek # L& [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI -1D5D..1D61 ; Greek # Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI -1D66..1D6A ; Greek # L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI -1F00..1F15 ; Greek # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -1F18..1F1D ; Greek # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -1F20..1F45 ; Greek # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -1F48..1F4D ; Greek # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -1F50..1F57 ; Greek # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -1F59 ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA -1F5B ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -1F5D ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -1F5F..1F7D ; Greek # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA -1F80..1FB4 ; Greek # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -1FB6..1FBC ; Greek # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -1FBD ; Greek # Sk GREEK KORONIS -1FBE ; Greek # L& GREEK PROSGEGRAMMENI -1FBF..1FC1 ; Greek # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI -1FC2..1FC4 ; Greek # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -1FC6..1FCC ; Greek # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -1FCD..1FCF ; Greek # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI -1FD0..1FD3 ; Greek # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA -1FD6..1FDB ; Greek # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA -1FDD..1FDF ; Greek # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI -1FE0..1FEC ; Greek # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA -1FED..1FEF ; Greek # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA -1FF2..1FF4 ; Greek # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -1FF6..1FFC ; Greek # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -1FFD..1FFE ; Greek # Sk [2] GREEK OXIA..GREEK DASIA -2126 ; Greek # L& OHM SIGN - -# Total code points: 367 - -# ================================================ - -0400..0481 ; Cyrillic # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA -0482 ; Cyrillic # So CYRILLIC THOUSANDS SIGN -0483..0486 ; Cyrillic # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA -0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN -048A..04CE ; Cyrillic # L& [69] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL -04D0..04F5 ; Cyrillic # L& [38] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER CHE WITH DIAERESIS -04F8..04F9 ; Cyrillic # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS -0500..050F ; Cyrillic # L& [16] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER KOMI TJE -1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL - -# Total code points: 263 - -# ================================================ - -0531..0556 ; Armenian # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH -0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING -055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK -0561..0587 ; Armenian # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN -058A ; Armenian # Pd ARMENIAN HYPHEN -FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +# have the value Unknown (Zzzz). + +# @missing: 0000..10FFFF; Unknown + +# ================================================ + +0000..001F ; Common +0020 ; Common +0021..0023 ; Common +0024 ; Common +0025..0027 ; Common +0028 ; Common +0029 ; Common +002A ; Common +002B ; Common +002C ; Common +002D ; Common +002E..002F ; Common +0030..0039 ; Common +003A..003B ; Common +003C..003E ; Common +003F..0040 ; Common +005B ; Common +005C ; Common +005D ; Common +005E ; Common +005F ; Common +0060 ; Common +007B ; Common +007C ; Common +007D ; Common +007E ; Common +007F..009F ; Common +00A0 ; Common +00A1 ; Common +00A2..00A5 ; Common +00A6..00A7 ; Common +00A8 ; Common +00A9 ; Common +00AB ; Common +00AC ; Common +00AD ; Common +00AE ; Common +00AF ; Common +00B0 ; Common +00B1 ; Common +00B2..00B3 ; Common +00B4 ; Common +00B5 ; Common +00B6 ; Common +00B7 ; Common +00B8 ; Common +00B9 ; Common +00BB ; Common +00BC..00BE ; Common +00BF ; Common +00D7 ; Common +00F7 ; Common +02B9..02C1 ; Common +02C2..02C5 ; Common +02C6..02D1 ; Common +02D2..02DF ; Common +02E5..02ED ; Common +02EE ; Common +02EF..02FF ; Common +037E ; Common +0387 ; Common +0589 ; Common +0600..0603 ; Common +060C ; Common +061B ; Common +061F ; Common +0640 ; Common +0660..0669 ; Common +06DD ; Common +0964..0965 ; Common +0970 ; Common +0E3F ; Common +10FB ; Common +16EB..16ED ; Common +1735..1736 ; Common +1802..1803 ; Common +1805 ; Common +2000..200A ; Common +200B ; Common +200E..200F ; Common +2010..2015 ; Common +2016..2017 ; Common +2018 ; Common +2019 ; Common +201A ; Common +201B..201C ; Common +201D ; Common +201E ; Common +201F ; Common +2020..2027 ; Common +2028 ; Common +2029 ; Common +202A..202E ; Common +202F ; Common +2030..2038 ; Common +2039 ; Common +203A ; Common +203B..203E ; Common +203F..2040 ; Common +2041..2043 ; Common +2044 ; Common +2045 ; Common +2046 ; Common +2047..2051 ; Common +2052 ; Common +2053 ; Common +2054 ; Common +2055..205E ; Common +205F ; Common +2060..2063 ; Common +206A..206F ; Common +2070 ; Common +2074..2079 ; Common +207A..207C ; Common +207D ; Common +207E ; Common +2080..2089 ; Common +208A..208C ; Common +208D ; Common +208E ; Common +20A0..20B5 ; Common +2100..2101 ; Common +2102 ; Common +2103..2106 ; Common +2107 ; Common +2108..2109 ; Common +210A..2113 ; Common +2114 ; Common +2115 ; Common +2116..2118 ; Common +2119..211D ; Common +211E..2123 ; Common +2124 ; Common +2125 ; Common +2127 ; Common +2128 ; Common +2129 ; Common +212C..212D ; Common +212E ; Common +212F..2131 ; Common +2133..2134 ; Common +2135..2138 ; Common +2139 ; Common +213A..213B ; Common +213C..213F ; Common +2140..2144 ; Common +2145..2149 ; Common +214A ; Common +214B ; Common +214C..214D ; Common +2153..215F ; Common +2160..2182 ; Common +2183 ; Common +2190..2194 ; Common +2195..2199 ; Common +219A..219B ; Common +219C..219F ; Common +21A0 ; Common +21A1..21A2 ; Common +21A3 ; Common +21A4..21A5 ; Common +21A6 ; Common +21A7..21AD ; Common +21AE ; Common +21AF..21CD ; Common +21CE..21CF ; Common +21D0..21D1 ; Common +21D2 ; Common +21D3 ; Common +21D4 ; Common +21D5..21F3 ; Common +21F4..22FF ; Common +2300..2307 ; Common +2308..230B ; Common +230C..231F ; Common +2320..2321 ; Common +2322..2328 ; Common +2329 ; Common +232A ; Common +232B..237B ; Common +237C ; Common +237D..239A ; Common +239B..23B3 ; Common +23B4..23DB ; Common +23DC..23E1 ; Common +23E2..23E7 ; Common +2400..2426 ; Common +2440..244A ; Common +2460..249B ; Common +249C..24E9 ; Common +24EA..24FF ; Common +2500..25B6 ; Common +25B7 ; Common +25B8..25C0 ; Common +25C1 ; Common +25C2..25F7 ; Common +25F8..25FF ; Common +2600..266E ; Common +266F ; Common +2670..269C ; Common +26A0..26B2 ; Common +2701..2704 ; Common +2706..2709 ; Common +270C..2727 ; Common +2729..274B ; Common +274D ; Common +274F..2752 ; Common +2756 ; Common +2758..275E ; Common +2761..2767 ; Common +2768 ; Common +2769 ; Common +276A ; Common +276B ; Common +276C ; Common +276D ; Common +276E ; Common +276F ; Common +2770 ; Common +2771 ; Common +2772 ; Common +2773 ; Common +2774 ; Common +2775 ; Common +2776..2793 ; Common +2794 ; Common +2798..27AF ; Common +27B1..27BE ; Common +27C0..27C4 ; Common +27C5 ; Common +27C6 ; Common +27C7..27CA ; Common +27D0..27E5 ; Common +27E6 ; Common +27E7 ; Common +27E8 ; Common +27E9 ; Common +27EA ; Common +27EB ; Common +27F0..27FF ; Common +2900..2982 ; Common +2983 ; Common +2984 ; Common +2985 ; Common +2986 ; Common +2987 ; Common +2988 ; Common +2989 ; Common +298A ; Common +298B ; Common +298C ; Common +298D ; Common +298E ; Common +298F ; Common +2990 ; Common +2991 ; Common +2992 ; Common +2993 ; Common +2994 ; Common +2995 ; Common +2996 ; Common +2997 ; Common +2998 ; Common +2999..29D7 ; Common +29D8 ; Common +29D9 ; Common +29DA ; Common +29DB ; Common +29DC..29FB ; Common +29FC ; Common +29FD ; Common +29FE..2AFF ; Common +2B00..2B1A ; Common +2B20..2B23 ; Common +2E00..2E01 ; Common +2E02 ; Common +2E03 ; Common +2E04 ; Common +2E05 ; Common +2E06..2E08 ; Common +2E09 ; Common +2E0A ; Common +2E0B ; Common +2E0C ; Common +2E0D ; Common +2E0E..2E16 ; Common +2E17 ; Common +2E1C ; Common +2E1D ; Common +2FF0..2FFB ; Common +3000 ; Common +3001..3003 ; Common +3004 ; Common +3006 ; Common +3008 ; Common +3009 ; Common +300A ; Common +300B ; Common +300C ; Common +300D ; Common +300E ; Common +300F ; Common +3010 ; Common +3011 ; Common +3012..3013 ; Common +3014 ; Common +3015 ; Common +3016 ; Common +3017 ; Common +3018 ; Common +3019 ; Common +301A ; Common +301B ; Common +301C ; Common +301D ; Common +301E..301F ; Common +3020 ; Common +3030 ; Common +3031..3035 ; Common +3036..3037 ; Common +303C ; Common +303D ; Common +303E..303F ; Common +309B..309C ; Common +30A0 ; Common +30FB ; Common +30FC ; Common +3190..3191 ; Common +3192..3195 ; Common +3196..319F ; Common +31C0..31CF ; Common +3220..3229 ; Common +322A..3243 ; Common +3250 ; Common +3251..325F ; Common +327E..327F ; Common +3280..3289 ; Common +328A..32B0 ; Common +32B1..32BF ; Common +32C0..32FE ; Common +3300..33FF ; Common +4DC0..4DFF ; Common +A700..A716 ; Common +A717..A71A ; Common +A720..A721 ; Common +F802..F8FF ; Common +FD3E ; Common +FD3F ; Common +FDFD ; Common +FE10..FE16 ; Common +FE17 ; Common +FE18 ; Common +FE19 ; Common +FE30 ; Common +FE31..FE32 ; Common +FE33..FE34 ; Common +FE35 ; Common +FE36 ; Common +FE37 ; Common +FE38 ; Common +FE39 ; Common +FE3A ; Common +FE3B ; Common +FE3C ; Common +FE3D ; Common +FE3E ; Common +FE3F ; Common +FE40 ; Common +FE41 ; Common +FE42 ; Common +FE43 ; Common +FE44 ; Common +FE45..FE46 ; Common +FE47 ; Common +FE48 ; Common +FE49..FE4C ; Common +FE4D..FE4F ; Common +FE50..FE52 ; Common +FE54..FE57 ; Common +FE58 ; Common +FE59 ; Common +FE5A ; Common +FE5B ; Common +FE5C ; Common +FE5D ; Common +FE5E ; Common +FE5F..FE61 ; Common +FE62 ; Common +FE63 ; Common +FE64..FE66 ; Common +FE68 ; Common +FE69 ; Common +FE6A..FE6B ; Common +FEFF ; Common +FF01..FF03 ; Common +FF04 ; Common +FF05..FF07 ; Common +FF08 ; Common +FF09 ; Common +FF0A ; Common +FF0B ; Common +FF0C ; Common +FF0D ; Common +FF0E..FF0F ; Common +FF10..FF19 ; Common +FF1A..FF1B ; Common +FF1C..FF1E ; Common +FF1F..FF20 ; Common +FF3B ; Common +FF3C ; Common +FF3D ; Common +FF3E ; Common +FF3F ; Common +FF40 ; Common +FF5B ; Common +FF5C ; Common +FF5D ; Common +FF5E ; Common +FF5F ; Common +FF60 ; Common +FF61 ; Common +FF62 ; Common +FF63 ; Common +FF64..FF65 ; Common +FF70 ; Common +FF9E..FF9F ; Common +FFE0..FFE1 ; Common +FFE2 ; Common +FFE3 ; Common +FFE4 ; Common +FFE5..FFE6 ; Common +FFE8 ; Common +FFE9..FFEC ; Common +FFED..FFEE ; Common +FFF9..FFFB ; Common +FFFC..FFFD ; Common +10100..10101 ; Common +10102 ; Common +10107..10133 ; Common +10137..1013F ; Common +1D000..1D0F5 ; Common +1D100..1D126 ; Common +1D12A..1D164 ; Common +1D165..1D166 ; Common +1D16A..1D16C ; Common +1D16D..1D172 ; Common +1D173..1D17A ; Common +1D183..1D184 ; Common +1D18C..1D1A9 ; Common +1D1AE..1D1DD ; Common +1D300..1D356 ; Common +1D360..1D371 ; Common +1D400..1D454 ; Common +1D456..1D49C ; Common +1D49E..1D49F ; Common +1D4A2 ; Common +1D4A5..1D4A6 ; Common +1D4A9..1D4AC ; Common +1D4AE..1D4B9 ; Common +1D4BB ; Common +1D4BD..1D4C3 ; Common +1D4C5..1D505 ; Common +1D507..1D50A ; Common +1D50D..1D514 ; Common +1D516..1D51C ; Common +1D51E..1D539 ; Common +1D53B..1D53E ; Common +1D540..1D544 ; Common +1D546 ; Common +1D54A..1D550 ; Common +1D552..1D6A5 ; Common +1D6A8..1D6C0 ; Common +1D6C1 ; Common +1D6C2..1D6DA ; Common +1D6DB ; Common +1D6DC..1D6FA ; Common +1D6FB ; Common +1D6FC..1D714 ; Common +1D715 ; Common +1D716..1D734 ; Common +1D735 ; Common +1D736..1D74E ; Common +1D74F ; Common +1D750..1D76E ; Common +1D76F ; Common +1D770..1D788 ; Common +1D789 ; Common +1D78A..1D7A8 ; Common +1D7A9 ; Common +1D7AA..1D7C2 ; Common +1D7C3 ; Common +1D7C4..1D7CB ; Common +1D7CE..1D7FF ; Common +E0001 ; Common +E0020..E007F ; Common + +# Total code points: 5020 + +# ================================================ + +0041..005A ; Latin +0061..007A ; Latin +00AA ; Latin +00BA ; Latin +00C0..00D6 ; Latin +00D8..00F6 ; Latin +00F8..01BA ; Latin +01BB ; Latin +01BC..01BF ; Latin +01C0..01C3 ; Latin +01C4..0293 ; Latin +0294 ; Latin +0295..02AF ; Latin +02B0..02B8 ; Latin +02E0..02E4 ; Latin +1D00..1D25 ; Latin +1D2C..1D5C ; Latin +1D62..1D65 ; Latin +1D6B..1D77 ; Latin +1D79..1D9A ; Latin +1D9B..1DBE ; Latin +1E00..1E9B ; Latin +1EA0..1EF9 ; Latin +2071 ; Latin +207F ; Latin +2090..2094 ; Latin +212A..212B ; Latin +2132 ; Latin +214E ; Latin +2184 ; Latin +2C60..2C6C ; Latin +2C74..2C77 ; Latin +FB00..FB06 ; Latin +FF21..FF3A ; Latin +FF41..FF5A ; Latin + +# Total code points: 1070 + +# ================================================ + +0374..0375 ; Greek +037A ; Greek +037B..037D ; Greek +0384..0385 ; Greek +0386 ; Greek +0388..038A ; Greek +038C ; Greek +038E..03A1 ; Greek +03A3..03CE ; Greek +03D0..03E1 ; Greek +03F0..03F5 ; Greek +03F6 ; Greek +03F7..03FF ; Greek +1D26..1D2A ; Greek +1D5D..1D61 ; Greek +1D66..1D6A ; Greek +1DBF ; Greek +1F00..1F15 ; Greek +1F18..1F1D ; Greek +1F20..1F45 ; Greek +1F48..1F4D ; Greek +1F50..1F57 ; Greek +1F59 ; Greek +1F5B ; Greek +1F5D ; Greek +1F5F..1F7D ; Greek +1F80..1FB4 ; Greek +1FB6..1FBC ; Greek +1FBD ; Greek +1FBE ; Greek +1FBF..1FC1 ; Greek +1FC2..1FC4 ; Greek +1FC6..1FCC ; Greek +1FCD..1FCF ; Greek +1FD0..1FD3 ; Greek +1FD6..1FDB ; Greek +1FDD..1FDF ; Greek +1FE0..1FEC ; Greek +1FED..1FEF ; Greek +1FF2..1FF4 ; Greek +1FF6..1FFC ; Greek +1FFD..1FFE ; Greek +2126 ; Greek +10140..10174 ; Greek +10175..10178 ; Greek +10179..10189 ; Greek +1018A ; Greek +1D200..1D241 ; Greek +1D242..1D244 ; Greek +1D245 ; Greek + +# Total code points: 506 + +# ================================================ + +0400..0481 ; Cyrillic +0482 ; Cyrillic +0483..0486 ; Cyrillic +0488..0489 ; Cyrillic +048A..0513 ; Cyrillic +1D2B ; Cyrillic +1D78 ; Cyrillic + +# Total code points: 277 + +# ================================================ + +0531..0556 ; Armenian +0559 ; Armenian +055A..055F ; Armenian +0561..0587 ; Armenian +058A ; Armenian +FB13..FB17 ; Armenian # Total code points: 90 # ================================================ -0591..05A1 ; Hebrew # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05B9 ; Hebrew # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM -05BB..05BD ; Hebrew # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG -05BE ; Hebrew # Po HEBREW PUNCTUATION MAQAF -05BF ; Hebrew # Mn HEBREW POINT RAFE -05C0 ; Hebrew # Po HEBREW PUNCTUATION PASEQ -05C1..05C2 ; Hebrew # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C3 ; Hebrew # Po HEBREW PUNCTUATION SOF PASUQ -05C4 ; Hebrew # Mn HEBREW MARK UPPER DOT -05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV -05F0..05F2 ; Hebrew # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD -05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM -FB1D ; Hebrew # Lo HEBREW LETTER YOD WITH HIRIQ -FB1E ; Hebrew # Mn HEBREW POINT JUDEO-SPANISH VARIKA -FB1F..FB28 ; Hebrew # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV -FB29 ; Hebrew # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN -FB2A..FB36 ; Hebrew # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH -FB38..FB3C ; Hebrew # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH -FB3E ; Hebrew # Lo HEBREW LETTER MEM WITH DAGESH -FB40..FB41 ; Hebrew # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH -FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH -FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED +0591..05BD ; Hebrew +05BE ; Hebrew +05BF ; Hebrew +05C0 ; Hebrew +05C1..05C2 ; Hebrew +05C3 ; Hebrew +05C4..05C5 ; Hebrew +05C6 ; Hebrew +05C7 ; Hebrew +05D0..05EA ; Hebrew +05F0..05F2 ; Hebrew +05F3..05F4 ; Hebrew +FB1D ; Hebrew +FB1E ; Hebrew +FB1F..FB28 ; Hebrew +FB29 ; Hebrew +FB2A..FB36 ; Hebrew +FB38..FB3C ; Hebrew +FB3E ; Hebrew +FB40..FB41 ; Hebrew +FB43..FB44 ; Hebrew +FB46..FB4F ; Hebrew + +# Total code points: 133 -# Total code points: 128 +# ================================================ + +060B ; Arabic +060D ; Arabic +060E..060F ; Arabic +0610..0615 ; Arabic +061E ; Arabic +0621..063A ; Arabic +0641..064A ; Arabic +0656..065E ; Arabic +066A..066D ; Arabic +066E..066F ; Arabic +0671..06D3 ; Arabic +06D4 ; Arabic +06D5 ; Arabic +06D6..06DC ; Arabic +06DE ; Arabic +06DF..06E4 ; Arabic +06E5..06E6 ; Arabic +06E7..06E8 ; Arabic +06E9 ; Arabic +06EA..06ED ; Arabic +06EE..06EF ; Arabic +06F0..06F9 ; Arabic +06FA..06FC ; Arabic +06FD..06FE ; Arabic +06FF ; Arabic +0750..076D ; Arabic +FB50..FBB1 ; Arabic +FBD3..FD3D ; Arabic +FD50..FD8F ; Arabic +FD92..FDC7 ; Arabic +FDF0..FDFB ; Arabic +FDFC ; Arabic +FE70..FE74 ; Arabic +FE76..FEFC ; Arabic + +# Total code points: 966 # ================================================ -060D ; Arabic # Po ARABIC DATE SEPARATOR -060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA -0610..0615 ; Arabic # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH -0621..063A ; Arabic # Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN -0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH -0656..0658 ; Arabic # Mn [3] ARABIC SUBSCRIPT ALEF..ARABIC MARK NOON GHUNNA -066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR -066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF -0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -06D4 ; Arabic # Po ARABIC FULL STOP -06D5 ; Arabic # Lo ARABIC LETTER AE -06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN -06DE ; Arabic # Me ARABIC START OF RUB EL HIZB -06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA -06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH -06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON -06E9 ; Arabic # So ARABIC PLACE OF SAJDAH -06EA..06ED ; Arabic # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM -06EE..06EF ; Arabic # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V -06F0..06F9 ; Arabic # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE -06FA..06FC ; Arabic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW -06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN -06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V -FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM -FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM -FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDF0..FDFB ; Arabic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU -FDFC ; Arabic # Sc RIAL SIGN -FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM -FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM - -# Total code points: 928 - -# ================================================ - -0700..070D ; Syriac # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS -070F ; Syriac # Cf SYRIAC ABBREVIATION MARK -0710 ; Syriac # Lo SYRIAC LETTER ALAPH -0711 ; Syriac # Mn SYRIAC LETTER SUPERSCRIPT ALAPH -0712..072F ; Syriac # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH -0730..074A ; Syriac # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH -074D..074F ; Syriac # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE +0700..070D ; Syriac +070F ; Syriac +0710 ; Syriac +0711 ; Syriac +0712..072F ; Syriac +0730..074A ; Syriac +074D..074F ; Syriac # Total code points: 77 # ================================================ -0780..07A5 ; Thaana # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU -07A6..07B0 ; Thaana # Mn [11] THAANA ABAFILI..THAANA SUKUN -07B1 ; Thaana # Lo THAANA LETTER NAA +0780..07A5 ; Thaana +07A6..07B0 ; Thaana +07B1 ; Thaana # Total code points: 50 # ================================================ -0901..0902 ; Devanagari # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA -0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA -0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA -093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA -093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA -093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II -0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI -0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU -094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA -0950 ; Devanagari # Lo DEVANAGARI OM -0951..0954 ; Devanagari # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT -0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL -0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL -0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE - -# Total code points: 102 - -# ================================================ - -0981 ; Bengali # Mn BENGALI SIGN CANDRABINDU -0982..0983 ; Bengali # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA -0985..098C ; Bengali # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L -098F..0990 ; Bengali # Lo [2] BENGALI LETTER E..BENGALI LETTER AI -0993..09A8 ; Bengali # Lo [22] BENGALI LETTER O..BENGALI LETTER NA -09AA..09B0 ; Bengali # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA -09B2 ; Bengali # Lo BENGALI LETTER LA -09B6..09B9 ; Bengali # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA -09BC ; Bengali # Mn BENGALI SIGN NUKTA -09BD ; Bengali # Lo BENGALI SIGN AVAGRAHA -09BE..09C0 ; Bengali # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II -09C1..09C4 ; Bengali # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR -09C7..09C8 ; Bengali # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI -09CB..09CC ; Bengali # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU -09CD ; Bengali # Mn BENGALI SIGN VIRAMA -09D7 ; Bengali # Mc BENGALI AU LENGTH MARK -09DC..09DD ; Bengali # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA -09DF..09E1 ; Bengali # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL -09E2..09E3 ; Bengali # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL -09E6..09EF ; Bengali # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE -09F0..09F1 ; Bengali # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL -09F2..09F3 ; Bengali # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN -09F4..09F9 ; Bengali # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN -09FA ; Bengali # So BENGALI ISSHAR +0901..0902 ; Devanagari +0903 ; Devanagari +0904..0939 ; Devanagari +093C ; Devanagari +093D ; Devanagari +093E..0940 ; Devanagari +0941..0948 ; Devanagari +0949..094C ; Devanagari +094D ; Devanagari +0950 ; Devanagari +0951..0954 ; Devanagari +0958..0961 ; Devanagari +0962..0963 ; Devanagari +0966..096F ; Devanagari +097B..097F ; Devanagari + +# Total code points: 107 -# Total code points: 90 +# ================================================ + +0981 ; Bengali +0982..0983 ; Bengali +0985..098C ; Bengali +098F..0990 ; Bengali +0993..09A8 ; Bengali +09AA..09B0 ; Bengali +09B2 ; Bengali +09B6..09B9 ; Bengali +09BC ; Bengali +09BD ; Bengali +09BE..09C0 ; Bengali +09C1..09C4 ; Bengali +09C7..09C8 ; Bengali +09CB..09CC ; Bengali +09CD ; Bengali +09CE ; Bengali +09D7 ; Bengali +09DC..09DD ; Bengali +09DF..09E1 ; Bengali +09E2..09E3 ; Bengali +09E6..09EF ; Bengali +09F0..09F1 ; Bengali +09F2..09F3 ; Bengali +09F4..09F9 ; Bengali +09FA ; Bengali + +# Total code points: 91 # ================================================ -0A01..0A02 ; Gurmukhi # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI -0A03 ; Gurmukhi # Mc GURMUKHI SIGN VISARGA -0A05..0A0A ; Gurmukhi # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU -0A0F..0A10 ; Gurmukhi # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI -0A13..0A28 ; Gurmukhi # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA -0A2A..0A30 ; Gurmukhi # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA -0A32..0A33 ; Gurmukhi # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA -0A35..0A36 ; Gurmukhi # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA -0A38..0A39 ; Gurmukhi # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA -0A3C ; Gurmukhi # Mn GURMUKHI SIGN NUKTA -0A3E..0A40 ; Gurmukhi # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II -0A41..0A42 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU -0A47..0A48 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI -0A4B..0A4D ; Gurmukhi # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA -0A59..0A5C ; Gurmukhi # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA -0A5E ; Gurmukhi # Lo GURMUKHI LETTER FA -0A66..0A6F ; Gurmukhi # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE -0A70..0A71 ; Gurmukhi # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK -0A72..0A74 ; Gurmukhi # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A01..0A02 ; Gurmukhi +0A03 ; Gurmukhi +0A05..0A0A ; Gurmukhi +0A0F..0A10 ; Gurmukhi +0A13..0A28 ; Gurmukhi +0A2A..0A30 ; Gurmukhi +0A32..0A33 ; Gurmukhi +0A35..0A36 ; Gurmukhi +0A38..0A39 ; Gurmukhi +0A3C ; Gurmukhi +0A3E..0A40 ; Gurmukhi +0A41..0A42 ; Gurmukhi +0A47..0A48 ; Gurmukhi +0A4B..0A4D ; Gurmukhi +0A59..0A5C ; Gurmukhi +0A5E ; Gurmukhi +0A66..0A6F ; Gurmukhi +0A70..0A71 ; Gurmukhi +0A72..0A74 ; Gurmukhi # Total code points: 77 # ================================================ -0A81..0A82 ; Gujarati # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA -0A83 ; Gujarati # Mc GUJARATI SIGN VISARGA -0A85..0A8D ; Gujarati # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E -0A8F..0A91 ; Gujarati # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O -0A93..0AA8 ; Gujarati # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA -0AAA..0AB0 ; Gujarati # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA -0AB2..0AB3 ; Gujarati # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA -0AB5..0AB9 ; Gujarati # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA -0ABC ; Gujarati # Mn GUJARATI SIGN NUKTA -0ABD ; Gujarati # Lo GUJARATI SIGN AVAGRAHA -0ABE..0AC0 ; Gujarati # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II -0AC1..0AC5 ; Gujarati # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E -0AC7..0AC8 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI -0AC9 ; Gujarati # Mc GUJARATI VOWEL SIGN CANDRA O -0ACB..0ACC ; Gujarati # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU -0ACD ; Gujarati # Mn GUJARATI SIGN VIRAMA -0AD0 ; Gujarati # Lo GUJARATI OM -0AE0..0AE1 ; Gujarati # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL -0AE2..0AE3 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL -0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE -0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN +0A81..0A82 ; Gujarati +0A83 ; Gujarati +0A85..0A8D ; Gujarati +0A8F..0A91 ; Gujarati +0A93..0AA8 ; Gujarati +0AAA..0AB0 ; Gujarati +0AB2..0AB3 ; Gujarati +0AB5..0AB9 ; Gujarati +0ABC ; Gujarati +0ABD ; Gujarati +0ABE..0AC0 ; Gujarati +0AC1..0AC5 ; Gujarati +0AC7..0AC8 ; Gujarati +0AC9 ; Gujarati +0ACB..0ACC ; Gujarati +0ACD ; Gujarati +0AD0 ; Gujarati +0AE0..0AE1 ; Gujarati +0AE2..0AE3 ; Gujarati +0AE6..0AEF ; Gujarati +0AF1 ; Gujarati # Total code points: 83 # ================================================ -0B01 ; Oriya # Mn ORIYA SIGN CANDRABINDU -0B02..0B03 ; Oriya # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA -0B05..0B0C ; Oriya # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L -0B0F..0B10 ; Oriya # Lo [2] ORIYA LETTER E..ORIYA LETTER AI -0B13..0B28 ; Oriya # Lo [22] ORIYA LETTER O..ORIYA LETTER NA -0B2A..0B30 ; Oriya # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA -0B32..0B33 ; Oriya # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA -0B35..0B39 ; Oriya # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA -0B3C ; Oriya # Mn ORIYA SIGN NUKTA -0B3D ; Oriya # Lo ORIYA SIGN AVAGRAHA -0B3E ; Oriya # Mc ORIYA VOWEL SIGN AA -0B3F ; Oriya # Mn ORIYA VOWEL SIGN I -0B40 ; Oriya # Mc ORIYA VOWEL SIGN II -0B41..0B43 ; Oriya # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R -0B47..0B48 ; Oriya # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI -0B4B..0B4C ; Oriya # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU -0B4D ; Oriya # Mn ORIYA SIGN VIRAMA -0B56 ; Oriya # Mn ORIYA AI LENGTH MARK -0B57 ; Oriya # Mc ORIYA AU LENGTH MARK -0B5C..0B5D ; Oriya # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA -0B5F..0B61 ; Oriya # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL -0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE -0B70 ; Oriya # So ORIYA ISSHAR -0B71 ; Oriya # Lo ORIYA LETTER WA +0B01 ; Oriya +0B02..0B03 ; Oriya +0B05..0B0C ; Oriya +0B0F..0B10 ; Oriya +0B13..0B28 ; Oriya +0B2A..0B30 ; Oriya +0B32..0B33 ; Oriya +0B35..0B39 ; Oriya +0B3C ; Oriya +0B3D ; Oriya +0B3E ; Oriya +0B3F ; Oriya +0B40 ; Oriya +0B41..0B43 ; Oriya +0B47..0B48 ; Oriya +0B4B..0B4C ; Oriya +0B4D ; Oriya +0B56 ; Oriya +0B57 ; Oriya +0B5C..0B5D ; Oriya +0B5F..0B61 ; Oriya +0B66..0B6F ; Oriya +0B70 ; Oriya +0B71 ; Oriya # Total code points: 81 # ================================================ -0B82 ; Tamil # Mn TAMIL SIGN ANUSVARA -0B83 ; Tamil # Lo TAMIL SIGN VISARGA -0B85..0B8A ; Tamil # Lo [6] TAMIL LETTER A..TAMIL LETTER UU -0B8E..0B90 ; Tamil # Lo [3] TAMIL LETTER E..TAMIL LETTER AI -0B92..0B95 ; Tamil # Lo [4] TAMIL LETTER O..TAMIL LETTER KA -0B99..0B9A ; Tamil # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA -0B9C ; Tamil # Lo TAMIL LETTER JA -0B9E..0B9F ; Tamil # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA -0BA3..0BA4 ; Tamil # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA -0BA8..0BAA ; Tamil # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA -0BAE..0BB5 ; Tamil # Lo [8] TAMIL LETTER MA..TAMIL LETTER VA -0BB7..0BB9 ; Tamil # Lo [3] TAMIL LETTER SSA..TAMIL LETTER HA -0BBE..0BBF ; Tamil # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I -0BC0 ; Tamil # Mn TAMIL VOWEL SIGN II -0BC1..0BC2 ; Tamil # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU -0BC6..0BC8 ; Tamil # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI -0BCA..0BCC ; Tamil # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU -0BCD ; Tamil # Mn TAMIL SIGN VIRAMA -0BD7 ; Tamil # Mc TAMIL AU LENGTH MARK -0BE7..0BEF ; Tamil # Nd [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE -0BF0..0BF2 ; Tamil # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND -0BF3..0BF8 ; Tamil # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN -0BF9 ; Tamil # Sc TAMIL RUPEE SIGN -0BFA ; Tamil # So TAMIL NUMBER SIGN - -# Total code points: 69 - -# ================================================ - -0C01..0C03 ; Telugu # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA -0C05..0C0C ; Telugu # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L -0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI -0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA -0C2A..0C33 ; Telugu # Lo [10] TELUGU LETTER PA..TELUGU LETTER LLA -0C35..0C39 ; Telugu # Lo [5] TELUGU LETTER VA..TELUGU LETTER HA -0C3E..0C40 ; Telugu # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II -0C41..0C44 ; Telugu # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR -0C46..0C48 ; Telugu # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI -0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA -0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK -0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL -0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0B82 ; Tamil +0B83 ; Tamil +0B85..0B8A ; Tamil +0B8E..0B90 ; Tamil +0B92..0B95 ; Tamil +0B99..0B9A ; Tamil +0B9C ; Tamil +0B9E..0B9F ; Tamil +0BA3..0BA4 ; Tamil +0BA8..0BAA ; Tamil +0BAE..0BB9 ; Tamil +0BBE..0BBF ; Tamil +0BC0 ; Tamil +0BC1..0BC2 ; Tamil +0BC6..0BC8 ; Tamil +0BCA..0BCC ; Tamil +0BCD ; Tamil +0BD7 ; Tamil +0BE6..0BEF ; Tamil +0BF0..0BF2 ; Tamil +0BF3..0BF8 ; Tamil +0BF9 ; Tamil +0BFA ; Tamil + +# Total code points: 71 + +# ================================================ + +0C01..0C03 ; Telugu +0C05..0C0C ; Telugu +0C0E..0C10 ; Telugu +0C12..0C28 ; Telugu +0C2A..0C33 ; Telugu +0C35..0C39 ; Telugu +0C3E..0C40 ; Telugu +0C41..0C44 ; Telugu +0C46..0C48 ; Telugu +0C4A..0C4D ; Telugu +0C55..0C56 ; Telugu +0C60..0C61 ; Telugu +0C66..0C6F ; Telugu # Total code points: 80 # ================================================ -0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA -0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L -0C8E..0C90 ; Kannada # Lo [3] KANNADA LETTER E..KANNADA LETTER AI -0C92..0CA8 ; Kannada # Lo [23] KANNADA LETTER O..KANNADA LETTER NA -0CAA..0CB3 ; Kannada # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA -0CB5..0CB9 ; Kannada # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA -0CBC ; Kannada # Mn KANNADA SIGN NUKTA -0CBD ; Kannada # Lo KANNADA SIGN AVAGRAHA -0CBE ; Kannada # Mc KANNADA VOWEL SIGN AA -0CBF ; Kannada # Mn KANNADA VOWEL SIGN I -0CC0..0CC4 ; Kannada # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR -0CC6 ; Kannada # Mn KANNADA VOWEL SIGN E -0CC7..0CC8 ; Kannada # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI -0CCA..0CCB ; Kannada # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO -0CCC..0CCD ; Kannada # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA -0CD5..0CD6 ; Kannada # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; Kannada # Lo KANNADA LETTER FA -0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL -0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE - -# Total code points: 82 - -# ================================================ - -0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA -0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L -0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI -0D12..0D28 ; Malayalam # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA -0D2A..0D39 ; Malayalam # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA -0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II -0D41..0D43 ; Malayalam # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R -0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI -0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU -0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA -0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK -0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL -0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0C82..0C83 ; Kannada +0C85..0C8C ; Kannada +0C8E..0C90 ; Kannada +0C92..0CA8 ; Kannada +0CAA..0CB3 ; Kannada +0CB5..0CB9 ; Kannada +0CBC ; Kannada +0CBD ; Kannada +0CBE ; Kannada +0CBF ; Kannada +0CC0..0CC4 ; Kannada +0CC6 ; Kannada +0CC7..0CC8 ; Kannada +0CCA..0CCB ; Kannada +0CCC..0CCD ; Kannada +0CD5..0CD6 ; Kannada +0CDE ; Kannada +0CE0..0CE1 ; Kannada +0CE2..0CE3 ; Kannada +0CE6..0CEF ; Kannada +0CF1..0CF2 ; Kannada + +# Total code points: 86 + +# ================================================ + +0D02..0D03 ; Malayalam +0D05..0D0C ; Malayalam +0D0E..0D10 ; Malayalam +0D12..0D28 ; Malayalam +0D2A..0D39 ; Malayalam +0D3E..0D40 ; Malayalam +0D41..0D43 ; Malayalam +0D46..0D48 ; Malayalam +0D4A..0D4C ; Malayalam +0D4D ; Malayalam +0D57 ; Malayalam +0D60..0D61 ; Malayalam +0D66..0D6F ; Malayalam # Total code points: 78 # ================================================ -0D82..0D83 ; Sinhala # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA -0D85..0D96 ; Sinhala # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA -0D9A..0DB1 ; Sinhala # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA -0DB3..0DBB ; Sinhala # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA -0DBD ; Sinhala # Lo SINHALA LETTER DANTAJA LAYANNA -0DC0..0DC6 ; Sinhala # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA -0DCA ; Sinhala # Mn SINHALA SIGN AL-LAKUNA -0DCF..0DD1 ; Sinhala # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA -0DD2..0DD4 ; Sinhala # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA -0DD6 ; Sinhala # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA -0DD8..0DDF ; Sinhala # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA -0DF2..0DF3 ; Sinhala # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA -0DF4 ; Sinhala # Po SINHALA PUNCTUATION KUNDDALIYA +0D82..0D83 ; Sinhala +0D85..0D96 ; Sinhala +0D9A..0DB1 ; Sinhala +0DB3..0DBB ; Sinhala +0DBD ; Sinhala +0DC0..0DC6 ; Sinhala +0DCA ; Sinhala +0DCF..0DD1 ; Sinhala +0DD2..0DD4 ; Sinhala +0DD6 ; Sinhala +0DD8..0DDF ; Sinhala +0DF2..0DF3 ; Sinhala +0DF4 ; Sinhala # Total code points: 80 # ================================================ -0E01..0E30 ; Thai # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A -0E31 ; Thai # Mn THAI CHARACTER MAI HAN-AKAT -0E32..0E33 ; Thai # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM -0E34..0E3A ; Thai # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU -0E40..0E45 ; Thai # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO -0E46 ; Thai # Lm THAI CHARACTER MAIYAMOK -0E47..0E4E ; Thai # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN -0E4F ; Thai # Po THAI CHARACTER FONGMAN -0E50..0E59 ; Thai # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE -0E5A..0E5B ; Thai # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT +0E01..0E30 ; Thai +0E31 ; Thai +0E32..0E33 ; Thai +0E34..0E3A ; Thai +0E40..0E45 ; Thai +0E46 ; Thai +0E47..0E4E ; Thai +0E4F ; Thai +0E50..0E59 ; Thai +0E5A..0E5B ; Thai # Total code points: 86 # ================================================ -0E81..0E82 ; Lao # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG -0E84 ; Lao # Lo LAO LETTER KHO TAM -0E87..0E88 ; Lao # Lo [2] LAO LETTER NGO..LAO LETTER CO -0E8A ; Lao # Lo LAO LETTER SO TAM -0E8D ; Lao # Lo LAO LETTER NYO -0E94..0E97 ; Lao # Lo [4] LAO LETTER DO..LAO LETTER THO TAM -0E99..0E9F ; Lao # Lo [7] LAO LETTER NO..LAO LETTER FO SUNG -0EA1..0EA3 ; Lao # Lo [3] LAO LETTER MO..LAO LETTER LO LING -0EA5 ; Lao # Lo LAO LETTER LO LOOT -0EA7 ; Lao # Lo LAO LETTER WO -0EAA..0EAB ; Lao # Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG -0EAD..0EB0 ; Lao # Lo [4] LAO LETTER O..LAO VOWEL SIGN A -0EB1 ; Lao # Mn LAO VOWEL SIGN MAI KAN -0EB2..0EB3 ; Lao # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM -0EB4..0EB9 ; Lao # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU -0EBB..0EBC ; Lao # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO -0EBD ; Lao # Lo LAO SEMIVOWEL SIGN NYO -0EC0..0EC4 ; Lao # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI -0EC6 ; Lao # Lm LAO KO LA -0EC8..0ECD ; Lao # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA -0ED0..0ED9 ; Lao # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE -0EDC..0EDD ; Lao # Lo [2] LAO HO NO..LAO HO MO +0E81..0E82 ; Lao +0E84 ; Lao +0E87..0E88 ; Lao +0E8A ; Lao +0E8D ; Lao +0E94..0E97 ; Lao +0E99..0E9F ; Lao +0EA1..0EA3 ; Lao +0EA5 ; Lao +0EA7 ; Lao +0EAA..0EAB ; Lao +0EAD..0EB0 ; Lao +0EB1 ; Lao +0EB2..0EB3 ; Lao +0EB4..0EB9 ; Lao +0EBB..0EBC ; Lao +0EBD ; Lao +0EC0..0EC4 ; Lao +0EC6 ; Lao +0EC8..0ECD ; Lao +0ED0..0ED9 ; Lao +0EDC..0EDD ; Lao # Total code points: 65 # ================================================ -0F00 ; Tibetan # Lo TIBETAN SYLLABLE OM -0F01..0F03 ; Tibetan # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA -0F04..0F12 ; Tibetan # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD -0F13..0F17 ; Tibetan # So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS -0F18..0F19 ; Tibetan # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS -0F1A..0F1F ; Tibetan # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG -0F20..0F29 ; Tibetan # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE -0F2A..0F33 ; Tibetan # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO -0F34 ; Tibetan # So TIBETAN MARK BSDUS RTAGS -0F35 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG NYI ZLA -0F36 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN -0F37 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS -0F38 ; Tibetan # So TIBETAN MARK CHE MGO -0F39 ; Tibetan # Mn TIBETAN MARK TSA -PHRU -0F3A ; Tibetan # Ps TIBETAN MARK GUG RTAGS GYON -0F3B ; Tibetan # Pe TIBETAN MARK GUG RTAGS GYAS -0F3C ; Tibetan # Ps TIBETAN MARK ANG KHANG GYON -0F3D ; Tibetan # Pe TIBETAN MARK ANG KHANG GYAS -0F3E..0F3F ; Tibetan # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES -0F40..0F47 ; Tibetan # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA -0F49..0F6A ; Tibetan # Lo [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA -0F71..0F7E ; Tibetan # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO -0F7F ; Tibetan # Mc TIBETAN SIGN RNAM BCAD -0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA -0F85 ; Tibetan # Po TIBETAN MARK PALUTA -0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS -0F88..0F8B ; Tibetan # Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS -0F90..0F97 ; Tibetan # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA -0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA -0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE -0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN -0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL -0FCF ; Tibetan # So TIBETAN SIGN RDEL NAG GSUM - -# Total code points: 193 - -# ================================================ - -1000..1021 ; Myanmar # Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A -1023..1027 ; Myanmar # Lo [5] MYANMAR LETTER I..MYANMAR LETTER E -1029..102A ; Myanmar # Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU -102C ; Myanmar # Mc MYANMAR VOWEL SIGN AA -102D..1030 ; Myanmar # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU -1031 ; Myanmar # Mc MYANMAR VOWEL SIGN E -1032 ; Myanmar # Mn MYANMAR VOWEL SIGN AI -1036..1037 ; Myanmar # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW -1038 ; Myanmar # Mc MYANMAR SIGN VISARGA -1039 ; Myanmar # Mn MYANMAR SIGN VIRAMA -1040..1049 ; Myanmar # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE -104A..104F ; Myanmar # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE -1050..1055 ; Myanmar # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL -1056..1057 ; Myanmar # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR -1058..1059 ; Myanmar # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +0F00 ; Tibetan +0F01..0F03 ; Tibetan +0F04..0F12 ; Tibetan +0F13..0F17 ; Tibetan +0F18..0F19 ; Tibetan +0F1A..0F1F ; Tibetan +0F20..0F29 ; Tibetan +0F2A..0F33 ; Tibetan +0F34 ; Tibetan +0F35 ; Tibetan +0F36 ; Tibetan +0F37 ; Tibetan +0F38 ; Tibetan +0F39 ; Tibetan +0F3A ; Tibetan +0F3B ; Tibetan +0F3C ; Tibetan +0F3D ; Tibetan +0F3E..0F3F ; Tibetan +0F40..0F47 ; Tibetan +0F49..0F6A ; Tibetan +0F71..0F7E ; Tibetan +0F7F ; Tibetan +0F80..0F84 ; Tibetan +0F85 ; Tibetan +0F86..0F87 ; Tibetan +0F88..0F8B ; Tibetan +0F90..0F97 ; Tibetan +0F99..0FBC ; Tibetan +0FBE..0FC5 ; Tibetan +0FC6 ; Tibetan +0FC7..0FCC ; Tibetan +0FCF ; Tibetan +0FD0..0FD1 ; Tibetan + +# Total code points: 195 + +# ================================================ + +1000..1021 ; Myanmar +1023..1027 ; Myanmar +1029..102A ; Myanmar +102C ; Myanmar +102D..1030 ; Myanmar +1031 ; Myanmar +1032 ; Myanmar +1036..1037 ; Myanmar +1038 ; Myanmar +1039 ; Myanmar +1040..1049 ; Myanmar +104A..104F ; Myanmar +1050..1055 ; Myanmar +1056..1057 ; Myanmar +1058..1059 ; Myanmar # Total code points: 78 # ================================================ -10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE -10D0..10F8 ; Georgian # Lo [41] GEORGIAN LETTER AN..GEORGIAN LETTER ELIFI +10A0..10C5 ; Georgian +10D0..10FA ; Georgian +10FC ; Georgian +2D00..2D25 ; Georgian -# Total code points: 79 +# Total code points: 120 # ================================================ -1100..1159 ; Hangul # Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH -115F..11A2 ; Hangul # Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA -11A8..11F9 ; Hangul # Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH -3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE -3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU -3260..327D ; Hangul # So [30] CIRCLED HANGUL KIYEOK..CIRCLED KOREAN CHARACTER JUEUI -AC00..D7A3 ; Hangul # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH -FFA0..FFBE ; Hangul # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH -FFC2..FFC7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E -FFCA..FFCF ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE -FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU -FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +1100..1159 ; Hangul +115F..11A2 ; Hangul +11A8..11F9 ; Hangul +3131..318E ; Hangul +3200..321E ; Hangul +3260..327D ; Hangul +AC00..D7A3 ; Hangul +FFA0..FFBE ; Hangul +FFC2..FFC7 ; Hangul +FFCA..FFCF ; Hangul +FFD2..FFD7 ; Hangul +FFDA..FFDC ; Hangul # Total code points: 11619 # ================================================ -1200..1206 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO -1208..1246 ; Ethiopic # Lo [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO -1248 ; Ethiopic # Lo ETHIOPIC SYLLABLE QWA -124A..124D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE -1250..1256 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO -1258 ; Ethiopic # Lo ETHIOPIC SYLLABLE QHWA -125A..125D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE -1260..1286 ; Ethiopic # Lo [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO -1288 ; Ethiopic # Lo ETHIOPIC SYLLABLE XWA -128A..128D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE -1290..12AE ; Ethiopic # Lo [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO -12B0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KWA -12B2..12B5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE -12B8..12BE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO -12C0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KXWA -12C2..12C5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE -12C8..12CE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO -12D0..12D6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O -12D8..12EE ; Ethiopic # Lo [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO -12F0..130E ; Ethiopic # Lo [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO -1310 ; Ethiopic # Lo ETHIOPIC SYLLABLE GWA -1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE -1318..131E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO -1320..1346 ; Ethiopic # Lo [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO -1348..135A ; Ethiopic # Lo [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA -1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR -1369..1371 ; Ethiopic # Nd [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE -1372..137C ; Ethiopic # No [11] ETHIOPIC NUMBER TEN..ETHIOPIC NUMBER TEN THOUSAND - -# Total code points: 345 - -# ================================================ - -13A0..13F4 ; Cherokee # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV +1200..1248 ; Ethiopic +124A..124D ; Ethiopic +1250..1256 ; Ethiopic +1258 ; Ethiopic +125A..125D ; Ethiopic +1260..1288 ; Ethiopic +128A..128D ; Ethiopic +1290..12B0 ; Ethiopic +12B2..12B5 ; Ethiopic +12B8..12BE ; Ethiopic +12C0 ; Ethiopic +12C2..12C5 ; Ethiopic +12C8..12D6 ; Ethiopic +12D8..1310 ; Ethiopic +1312..1315 ; Ethiopic +1318..135A ; Ethiopic +135F ; Ethiopic +1360 ; Ethiopic +1361..1368 ; Ethiopic +1369..137C ; Ethiopic +1380..138F ; Ethiopic +1390..1399 ; Ethiopic +2D80..2D96 ; Ethiopic +2DA0..2DA6 ; Ethiopic +2DA8..2DAE ; Ethiopic +2DB0..2DB6 ; Ethiopic +2DB8..2DBE ; Ethiopic +2DC0..2DC6 ; Ethiopic +2DC8..2DCE ; Ethiopic +2DD0..2DD6 ; Ethiopic +2DD8..2DDE ; Ethiopic + +# Total code points: 461 + +# ================================================ + +13A0..13F4 ; Cherokee # Total code points: 85 # ================================================ -1401..166C ; Canadian_Aboriginal # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA -166D..166E ; Canadian_Aboriginal # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP -166F..1676 ; Canadian_Aboriginal # Lo [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA +1401..166C ; Canadian_Aboriginal +166D..166E ; Canadian_Aboriginal +166F..1676 ; Canadian_Aboriginal # Total code points: 630 # ================================================ -1680 ; Ogham # Zs OGHAM SPACE MARK -1681..169A ; Ogham # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH -169B ; Ogham # Ps OGHAM FEATHER MARK -169C ; Ogham # Pe OGHAM REVERSED FEATHER MARK +1680 ; Ogham +1681..169A ; Ogham +169B ; Ogham +169C ; Ogham # Total code points: 29 # ================================================ -16A0..16EA ; Runic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X -16EE..16F0 ; Runic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16A0..16EA ; Runic +16EE..16F0 ; Runic # Total code points: 78 # ================================================ -1780..17B3 ; Khmer # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU -17B4..17B5 ; Khmer # Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA -17B6 ; Khmer # Mc KHMER VOWEL SIGN AA -17B7..17BD ; Khmer # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA -17BE..17C5 ; Khmer # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU -17C6 ; Khmer # Mn KHMER SIGN NIKAHIT -17C7..17C8 ; Khmer # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU -17C9..17D3 ; Khmer # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT -17D4..17D6 ; Khmer # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH -17D7 ; Khmer # Lm KHMER SIGN LEK TOO -17D8..17DA ; Khmer # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT -17DB ; Khmer # Sc KHMER CURRENCY SYMBOL RIEL -17DC ; Khmer # Lo KHMER SIGN AVAKRAHASANYA -17DD ; Khmer # Mn KHMER SIGN ATTHACAN -17E0..17E9 ; Khmer # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE -17F0..17F9 ; Khmer # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON -19E0..19FF ; Khmer # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC +1780..17B3 ; Khmer +17B4..17B5 ; Khmer +17B6 ; Khmer +17B7..17BD ; Khmer +17BE..17C5 ; Khmer +17C6 ; Khmer +17C7..17C8 ; Khmer +17C9..17D3 ; Khmer +17D4..17D6 ; Khmer +17D7 ; Khmer +17D8..17DA ; Khmer +17DB ; Khmer +17DC ; Khmer +17DD ; Khmer +17E0..17E9 ; Khmer +17F0..17F9 ; Khmer +19E0..19FF ; Khmer # Total code points: 146 # ================================================ -1800..1805 ; Mongolian # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS -1806 ; Mongolian # Pd MONGOLIAN TODO SOFT HYPHEN -1807..180A ; Mongolian # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU -180B..180D ; Mongolian # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE -180E ; Mongolian # Zs MONGOLIAN VOWEL SEPARATOR -1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE -1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI -1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN -1844..1877 ; Mongolian # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA -1880..18A8 ; Mongolian # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA -18A9 ; Mongolian # Mn MONGOLIAN LETTER ALI GALI DAGALGA - -# Total code points: 155 +1800..1801 ; Mongolian +1804 ; Mongolian +1806 ; Mongolian +1807..180A ; Mongolian +180B..180D ; Mongolian +180E ; Mongolian +1810..1819 ; Mongolian +1820..1842 ; Mongolian +1843 ; Mongolian +1844..1877 ; Mongolian +1880..18A8 ; Mongolian +18A9 ; Mongolian + +# Total code points: 152 # ================================================ -3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE -309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK -309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI +3041..3096 ; Hiragana +309D..309E ; Hiragana +309F ; Hiragana # Total code points: 89 # ================================================ -30A1..30FA ; Katakana # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO -30FD..30FE ; Katakana # Lm [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK -30FF ; Katakana # Lo KATAKANA DIGRAPH KOTO -31F0..31FF ; Katakana # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO -FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU -FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +30A1..30FA ; Katakana +30FD..30FE ; Katakana +30FF ; Katakana +31F0..31FF ; Katakana +FF66..FF6F ; Katakana +FF71..FF9D ; Katakana # Total code points: 164 # ================================================ -3105..312C ; Bopomofo # Lo [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN -31A0..31B7 ; Bopomofo # Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H +3105..312C ; Bopomofo +31A0..31B7 ; Bopomofo # Total code points: 64 # ================================================ -2E80..2E99 ; Han # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP -2E9B..2EF3 ; Han # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE -2F00..2FD5 ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE -3005 ; Han # Lm IDEOGRAPHIC ITERATION MARK -3007 ; Han # Nl IDEOGRAPHIC NUMBER ZERO -3021..3029 ; Han # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE -3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY -303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK -3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 -4E00..9FA5 ; Han # Lo [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5 -F900..FA2D ; Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D -FA30..FA6A ; Han # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A -20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 -2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D - -# Total code points: 71442 +2E80..2E99 ; Han +2E9B..2EF3 ; Han +2F00..2FD5 ; Han +3005 ; Han +3007 ; Han +3021..3029 ; Han +3038..303A ; Han +303B ; Han +3400..4DB5 ; Han +4E00..9FBB ; Han +F900..FA2D ; Han +FA30..FA6A ; Han +FA70..FAD9 ; Han +20000..2A6D6 ; Han +2F800..2FA1D ; Han + +# Total code points: 71570 # ================================================ -A000..A48C ; Yi # Lo [1165] YI SYLLABLE IT..YI SYLLABLE YYR -A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE +A000..A014 ; Yi +A015 ; Yi +A016..A48C ; Yi +A490..A4C6 ; Yi # Total code points: 1220 # ================================================ -10300..1031E ; Old_Italic # Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU -10320..10323 ; Old_Italic # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +10300..1031E ; Old_Italic +10320..10323 ; Old_Italic # Total code points: 35 # ================================================ -10330..10349 ; Gothic # Lo [26] GOTHIC LETTER AHSA..GOTHIC LETTER OTHAL -1034A ; Gothic # Nl GOTHIC LETTER NINE HUNDRED +10330..10340 ; Gothic +10341 ; Gothic +10342..10349 ; Gothic +1034A ; Gothic # Total code points: 27 # ================================================ -10400..1044F ; Deseret # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10400..1044F ; Deseret # Total code points: 80 # ================================================ -0300..0357 ; Inherited # Mn [88] COMBINING GRAVE ACCENT..COMBINING RIGHT HALF RING ABOVE -035D..036F ; Inherited # Mn [19] COMBINING DOUBLE BREVE..COMBINING LATIN SMALL LETTER X -064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW -0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF -200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER -20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE -20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH -20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE -20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE -20E5..20EA ; Inherited # Mn [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY -302A..302F ; Inherited # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK -3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 -FE20..FE23 ; Inherited # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF -1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE -1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE -1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - -# Total code points: 438 +0300..036F ; Inherited +064B..0655 ; Inherited +0670 ; Inherited +1DC0..1DCA ; Inherited +1DFE..1DFF ; Inherited +200C..200D ; Inherited +20D0..20DC ; Inherited +20DD..20E0 ; Inherited +20E1 ; Inherited +20E2..20E4 ; Inherited +20E5..20EF ; Inherited +302A..302F ; Inherited +3099..309A ; Inherited +FE00..FE0F ; Inherited +FE20..FE23 ; Inherited +1D167..1D169 ; Inherited +1D17B..1D182 ; Inherited +1D185..1D18B ; Inherited +1D1AA..1D1AD ; Inherited +E0100..E01EF ; Inherited + +# Total code points: 461 # ================================================ -1700..170C ; Tagalog # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; Tagalog # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1712..1714 ; Tagalog # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1700..170C ; Tagalog +170E..1711 ; Tagalog +1712..1714 ; Tagalog # Total code points: 20 # ================================================ -1720..1731 ; Hanunoo # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; Hanunoo # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1720..1731 ; Hanunoo +1732..1734 ; Hanunoo # Total code points: 21 # ================================================ -1740..1751 ; Buhid # Lo [18] BUHID LETTER A..BUHID LETTER HA -1752..1753 ; Buhid # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1740..1751 ; Buhid +1752..1753 ; Buhid # Total code points: 20 # ================================================ -1760..176C ; Tagbanwa # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA -176E..1770 ; Tagbanwa # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA -1772..1773 ; Tagbanwa # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +1760..176C ; Tagbanwa +176E..1770 ; Tagbanwa +1772..1773 ; Tagbanwa # Total code points: 18 # ================================================ -1900..191C ; Limbu # Lo [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA -1920..1922 ; Limbu # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U -1923..1926 ; Limbu # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU -1927..1928 ; Limbu # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O -1929..192B ; Limbu # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA -1930..1931 ; Limbu # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA -1932 ; Limbu # Mn LIMBU SMALL LETTER ANUSVARA -1933..1938 ; Limbu # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA -1939..193B ; Limbu # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I -1940 ; Limbu # So LIMBU SIGN LOO -1944..1945 ; Limbu # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK -1946..194F ; Limbu # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +1900..191C ; Limbu +1920..1922 ; Limbu +1923..1926 ; Limbu +1927..1928 ; Limbu +1929..192B ; Limbu +1930..1931 ; Limbu +1932 ; Limbu +1933..1938 ; Limbu +1939..193B ; Limbu +1940 ; Limbu +1944..1945 ; Limbu +1946..194F ; Limbu # Total code points: 66 # ================================================ -1950..196D ; Tai_Le # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI -1970..1974 ; Tai_Le # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1950..196D ; Tai_Le +1970..1974 ; Tai_Le # Total code points: 35 # ================================================ -10000..1000B ; Linear_B # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE -1000D..10026 ; Linear_B # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO -10028..1003A ; Linear_B # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO -1003C..1003D ; Linear_B # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE -1003F..1004D ; Linear_B # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO -10050..1005D ; Linear_B # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 -10080..100FA ; Linear_B # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10000..1000B ; Linear_B +1000D..10026 ; Linear_B +10028..1003A ; Linear_B +1003C..1003D ; Linear_B +1003F..1004D ; Linear_B +10050..1005D ; Linear_B +10080..100FA ; Linear_B # Total code points: 211 # ================================================ -10380..1039D ; Ugaritic # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU -1039F ; Ugaritic # Po UGARITIC WORD DIVIDER +10380..1039D ; Ugaritic +1039F ; Ugaritic # Total code points: 31 # ================================================ -10450..1047F ; Shavian # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW +10450..1047F ; Shavian # Total code points: 48 # ================================================ -10480..1049D ; Osmanya # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO -104A0..104A9 ; Osmanya # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +10480..1049D ; Osmanya +104A0..104A9 ; Osmanya # Total code points: 40 # ================================================ -10800..10805 ; Cypriot # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA -10808 ; Cypriot # Lo CYPRIOT SYLLABLE JO -1080A..10835 ; Cypriot # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO -10837..10838 ; Cypriot # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE -1083C ; Cypriot # Lo CYPRIOT SYLLABLE ZA -1083F ; Cypriot # Lo CYPRIOT SYLLABLE ZO +10800..10805 ; Cypriot +10808 ; Cypriot +1080A..10835 ; Cypriot +10837..10838 ; Cypriot +1083C ; Cypriot +1083F ; Cypriot # Total code points: 55 # ================================================ -2800..28FF ; Braille # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 +2800..28FF ; Braille # Total code points: 256 # ================================================ -3031..3035 ; Katakana_Or_Hiragana # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF -309B..309C ; Katakana_Or_Hiragana # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -FF70 ; Katakana_Or_Hiragana # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -FF9E..FF9F ; Katakana_Or_Hiragana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +1A00..1A16 ; Buginese +1A17..1A18 ; Buginese +1A19..1A1B ; Buginese +1A1E..1A1F ; Buginese + +# Total code points: 30 + +# ================================================ + +03E2..03EF ; Coptic +2C80..2CE4 ; Coptic +2CE5..2CEA ; Coptic +2CF9..2CFC ; Coptic +2CFD ; Coptic +2CFE..2CFF ; Coptic + +# Total code points: 128 + +# ================================================ + +1980..19A9 ; New_Tai_Lue +19B0..19C0 ; New_Tai_Lue +19C1..19C7 ; New_Tai_Lue +19C8..19C9 ; New_Tai_Lue +19D0..19D9 ; New_Tai_Lue +19DE..19DF ; New_Tai_Lue + +# Total code points: 80 + +# ================================================ + +2C00..2C2E ; Glagolitic +2C30..2C5E ; Glagolitic + +# Total code points: 94 + +# ================================================ + +2D30..2D65 ; Tifinagh +2D6F ; Tifinagh + +# Total code points: 55 + +# ================================================ + +A800..A801 ; Syloti_Nagri +A802 ; Syloti_Nagri +A803..A805 ; Syloti_Nagri +A806 ; Syloti_Nagri +A807..A80A ; Syloti_Nagri +A80B ; Syloti_Nagri +A80C..A822 ; Syloti_Nagri +A823..A824 ; Syloti_Nagri +A825..A826 ; Syloti_Nagri +A827 ; Syloti_Nagri +A828..A82B ; Syloti_Nagri + +# Total code points: 44 + +# ================================================ + +103A0..103C3 ; Old_Persian +103C8..103CF ; Old_Persian +103D0 ; Old_Persian +103D1..103D5 ; Old_Persian + +# Total code points: 50 + +# ================================================ + +10A00 ; Kharoshthi +10A01..10A03 ; Kharoshthi +10A05..10A06 ; Kharoshthi +10A0C..10A0F ; Kharoshthi +10A10..10A13 ; Kharoshthi +10A15..10A17 ; Kharoshthi +10A19..10A33 ; Kharoshthi +10A38..10A3A ; Kharoshthi +10A3F ; Kharoshthi +10A40..10A47 ; Kharoshthi +10A50..10A58 ; Kharoshthi + +# Total code points: 65 + +# ================================================ + +1B00..1B03 ; Balinese +1B04 ; Balinese +1B05..1B33 ; Balinese +1B34 ; Balinese +1B35 ; Balinese +1B36..1B3A ; Balinese +1B3B ; Balinese +1B3C ; Balinese +1B3D..1B41 ; Balinese +1B42 ; Balinese +1B43..1B44 ; Balinese +1B45..1B4B ; Balinese +1B50..1B59 ; Balinese +1B5A..1B60 ; Balinese +1B61..1B6A ; Balinese +1B6B..1B73 ; Balinese +1B74..1B7C ; Balinese + +# Total code points: 121 + +# ================================================ + +12000..1236E ; Cuneiform +12400..12462 ; Cuneiform +12470..12473 ; Cuneiform + +# Total code points: 982 + +# ================================================ + +10900..10915 ; Phoenician +10916..10919 ; Phoenician +1091F ; Phoenician + +# Total code points: 27 + +# ================================================ + +A840..A873 ; Phags_Pa +A874..A877 ; Phags_Pa + +# Total code points: 56 + +# ================================================ + +07C0..07C9 ; Nko +07CA..07EA ; Nko +07EB..07F3 ; Nko +07F4..07F5 ; Nko +07F6 ; Nko +07F7..07F9 ; Nko +07FA ; Nko + +# Total code points: 59 -# Total code points: 10 +# EOF diff --git a/icuSources/data/unidata/SentenceBreakProperty.txt b/icuSources/data/unidata/SentenceBreakProperty.txt new file mode 100644 index 00000000..fc58820b --- /dev/null +++ b/icuSources/data/unidata/SentenceBreakProperty.txt @@ -0,0 +1,1664 @@ +# SentenceBreakProperty-5.0.0.txt +# Date: 2006-03-09, 23:14:25 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Property: Sentence_Break + +# All code points not explicitly listed for Sentence_Break +# have the value Other (XX). + +# @missing: 0000..10FFFF; Other + +# ================================================ + +000A ; Sep +000D ; Sep +0085 ; Sep +2028 ; Sep +2029 ; Sep + +# Total code points: 5 + +# ================================================ + +00AD ; Format +0600..0603 ; Format +06DD ; Format +070F ; Format +17B4..17B5 ; Format +200B ; Format +200E..200F ; Format +202A..202E ; Format +2060..2063 ; Format +206A..206F ; Format +FEFF ; Format +FFF9..FFFB ; Format +1D173..1D17A ; Format +E0001 ; Format +E0020..E007F ; Format + +# Total code points: 136 + +# ================================================ + +0009 ; Sp +000B..000C ; Sp +0020 ; Sp +1680 ; Sp +180E ; Sp +2000..200A ; Sp +202F ; Sp +205F ; Sp +3000 ; Sp + +# Total code points: 20 + +# ================================================ + +0061..007A ; Lower +00AA ; Lower +00B5 ; Lower +00BA ; Lower +00DF..00F6 ; Lower +00F8..00FF ; Lower +0101 ; Lower +0103 ; Lower +0105 ; Lower +0107 ; Lower +0109 ; Lower +010B ; Lower +010D ; Lower +010F ; Lower +0111 ; Lower +0113 ; Lower +0115 ; Lower +0117 ; Lower +0119 ; Lower +011B ; Lower +011D ; Lower +011F ; Lower +0121 ; Lower +0123 ; Lower +0125 ; Lower +0127 ; Lower +0129 ; Lower +012B ; Lower +012D ; Lower +012F ; Lower +0131 ; Lower +0133 ; Lower +0135 ; Lower +0137..0138 ; Lower +013A ; Lower +013C ; Lower +013E ; Lower +0140 ; Lower +0142 ; Lower +0144 ; Lower +0146 ; Lower +0148..0149 ; Lower +014B ; Lower +014D ; Lower +014F ; Lower +0151 ; Lower +0153 ; Lower +0155 ; Lower +0157 ; Lower +0159 ; Lower +015B ; Lower +015D ; Lower +015F ; Lower +0161 ; Lower +0163 ; Lower +0165 ; Lower +0167 ; Lower +0169 ; Lower +016B ; Lower +016D ; Lower +016F ; Lower +0171 ; Lower +0173 ; Lower +0175 ; Lower +0177 ; Lower +017A ; Lower +017C ; Lower +017E..0180 ; Lower +0183 ; Lower +0185 ; Lower +0188 ; Lower +018C..018D ; Lower +0192 ; Lower +0195 ; Lower +0199..019B ; Lower +019E ; Lower +01A1 ; Lower +01A3 ; Lower +01A5 ; Lower +01A8 ; Lower +01AA..01AB ; Lower +01AD ; Lower +01B0 ; Lower +01B4 ; Lower +01B6 ; Lower +01B9..01BA ; Lower +01BD..01BF ; Lower +01C6 ; Lower +01C9 ; Lower +01CC ; Lower +01CE ; Lower +01D0 ; Lower +01D2 ; Lower +01D4 ; Lower +01D6 ; Lower +01D8 ; Lower +01DA ; Lower +01DC..01DD ; Lower +01DF ; Lower +01E1 ; Lower +01E3 ; Lower +01E5 ; Lower +01E7 ; Lower +01E9 ; Lower +01EB ; Lower +01ED ; Lower +01EF..01F0 ; Lower +01F3 ; Lower +01F5 ; Lower +01F9 ; Lower +01FB ; Lower +01FD ; Lower +01FF ; Lower +0201 ; Lower +0203 ; Lower +0205 ; Lower +0207 ; Lower +0209 ; Lower +020B ; Lower +020D ; Lower +020F ; Lower +0211 ; Lower +0213 ; Lower +0215 ; Lower +0217 ; Lower +0219 ; Lower +021B ; Lower +021D ; Lower +021F ; Lower +0221 ; Lower +0223 ; Lower +0225 ; Lower +0227 ; Lower +0229 ; Lower +022B ; Lower +022D ; Lower +022F ; Lower +0231 ; Lower +0233..0239 ; Lower +023C ; Lower +023F..0240 ; Lower +0242 ; Lower +0247 ; Lower +0249 ; Lower +024B ; Lower +024D ; Lower +024F..0293 ; Lower +0295..02AF ; Lower +02B0..02B8 ; Lower +02C0..02C1 ; Lower +02E0..02E4 ; Lower +037A ; Lower +037B..037D ; Lower +0390 ; Lower +03AC..03CE ; Lower +03D0..03D1 ; Lower +03D5..03D7 ; Lower +03D9 ; Lower +03DB ; Lower +03DD ; Lower +03DF ; Lower +03E1 ; Lower +03E3 ; Lower +03E5 ; Lower +03E7 ; Lower +03E9 ; Lower +03EB ; Lower +03ED ; Lower +03EF..03F3 ; Lower +03F5 ; Lower +03F8 ; Lower +03FB..03FC ; Lower +0430..045F ; Lower +0461 ; Lower +0463 ; Lower +0465 ; Lower +0467 ; Lower +0469 ; Lower +046B ; Lower +046D ; Lower +046F ; Lower +0471 ; Lower +0473 ; Lower +0475 ; Lower +0477 ; Lower +0479 ; Lower +047B ; Lower +047D ; Lower +047F ; Lower +0481 ; Lower +048B ; Lower +048D ; Lower +048F ; Lower +0491 ; Lower +0493 ; Lower +0495 ; Lower +0497 ; Lower +0499 ; Lower +049B ; Lower +049D ; Lower +049F ; Lower +04A1 ; Lower +04A3 ; Lower +04A5 ; Lower +04A7 ; Lower +04A9 ; Lower +04AB ; Lower +04AD ; Lower +04AF ; Lower +04B1 ; Lower +04B3 ; Lower +04B5 ; Lower +04B7 ; Lower +04B9 ; Lower +04BB ; Lower +04BD ; Lower +04BF ; Lower +04C2 ; Lower +04C4 ; Lower +04C6 ; Lower +04C8 ; Lower +04CA ; Lower +04CC ; Lower +04CE..04CF ; Lower +04D1 ; Lower +04D3 ; Lower +04D5 ; Lower +04D7 ; Lower +04D9 ; Lower +04DB ; Lower +04DD ; Lower +04DF ; Lower +04E1 ; Lower +04E3 ; Lower +04E5 ; Lower +04E7 ; Lower +04E9 ; Lower +04EB ; Lower +04ED ; Lower +04EF ; Lower +04F1 ; Lower +04F3 ; Lower +04F5 ; Lower +04F7 ; Lower +04F9 ; Lower +04FB ; Lower +04FD ; Lower +04FF ; Lower +0501 ; Lower +0503 ; Lower +0505 ; Lower +0507 ; Lower +0509 ; Lower +050B ; Lower +050D ; Lower +050F ; Lower +0511 ; Lower +0513 ; Lower +0561..0587 ; Lower +1D00..1D2B ; Lower +1D2C..1D61 ; Lower +1D62..1D77 ; Lower +1D78 ; Lower +1D79..1D9A ; Lower +1D9B..1DBF ; Lower +1E01 ; Lower +1E03 ; Lower +1E05 ; Lower +1E07 ; Lower +1E09 ; Lower +1E0B ; Lower +1E0D ; Lower +1E0F ; Lower +1E11 ; Lower +1E13 ; Lower +1E15 ; Lower +1E17 ; Lower +1E19 ; Lower +1E1B ; Lower +1E1D ; Lower +1E1F ; Lower +1E21 ; Lower +1E23 ; Lower +1E25 ; Lower +1E27 ; Lower +1E29 ; Lower +1E2B ; Lower +1E2D ; Lower +1E2F ; Lower +1E31 ; Lower +1E33 ; Lower +1E35 ; Lower +1E37 ; Lower +1E39 ; Lower +1E3B ; Lower +1E3D ; Lower +1E3F ; Lower +1E41 ; Lower +1E43 ; Lower +1E45 ; Lower +1E47 ; Lower +1E49 ; Lower +1E4B ; Lower +1E4D ; Lower +1E4F ; Lower +1E51 ; Lower +1E53 ; Lower +1E55 ; Lower +1E57 ; Lower +1E59 ; Lower +1E5B ; Lower +1E5D ; Lower +1E5F ; Lower +1E61 ; Lower +1E63 ; Lower +1E65 ; Lower +1E67 ; Lower +1E69 ; Lower +1E6B ; Lower +1E6D ; Lower +1E6F ; Lower +1E71 ; Lower +1E73 ; Lower +1E75 ; Lower +1E77 ; Lower +1E79 ; Lower +1E7B ; Lower +1E7D ; Lower +1E7F ; Lower +1E81 ; Lower +1E83 ; Lower +1E85 ; Lower +1E87 ; Lower +1E89 ; Lower +1E8B ; Lower +1E8D ; Lower +1E8F ; Lower +1E91 ; Lower +1E93 ; Lower +1E95..1E9B ; Lower +1EA1 ; Lower +1EA3 ; Lower +1EA5 ; Lower +1EA7 ; Lower +1EA9 ; Lower +1EAB ; Lower +1EAD ; Lower +1EAF ; Lower +1EB1 ; Lower +1EB3 ; Lower +1EB5 ; Lower +1EB7 ; Lower +1EB9 ; Lower +1EBB ; Lower +1EBD ; Lower +1EBF ; Lower +1EC1 ; Lower +1EC3 ; Lower +1EC5 ; Lower +1EC7 ; Lower +1EC9 ; Lower +1ECB ; Lower +1ECD ; Lower +1ECF ; Lower +1ED1 ; Lower +1ED3 ; Lower +1ED5 ; Lower +1ED7 ; Lower +1ED9 ; Lower +1EDB ; Lower +1EDD ; Lower +1EDF ; Lower +1EE1 ; Lower +1EE3 ; Lower +1EE5 ; Lower +1EE7 ; Lower +1EE9 ; Lower +1EEB ; Lower +1EED ; Lower +1EEF ; Lower +1EF1 ; Lower +1EF3 ; Lower +1EF5 ; Lower +1EF7 ; Lower +1EF9 ; Lower +1F00..1F07 ; Lower +1F10..1F15 ; Lower +1F20..1F27 ; Lower +1F30..1F37 ; Lower +1F40..1F45 ; Lower +1F50..1F57 ; Lower +1F60..1F67 ; Lower +1F70..1F7D ; Lower +1F80..1F87 ; Lower +1F90..1F97 ; Lower +1FA0..1FA7 ; Lower +1FB0..1FB4 ; Lower +1FB6..1FB7 ; Lower +1FBE ; Lower +1FC2..1FC4 ; Lower +1FC6..1FC7 ; Lower +1FD0..1FD3 ; Lower +1FD6..1FD7 ; Lower +1FE0..1FE7 ; Lower +1FF2..1FF4 ; Lower +1FF6..1FF7 ; Lower +2071 ; Lower +207F ; Lower +2090..2094 ; Lower +210A ; Lower +210E..210F ; Lower +2113 ; Lower +212F ; Lower +2134 ; Lower +2139 ; Lower +213C..213D ; Lower +2146..2149 ; Lower +214E ; Lower +2170..217F ; Lower +2184 ; Lower +24D0..24E9 ; Lower +2C30..2C5E ; Lower +2C61 ; Lower +2C65..2C66 ; Lower +2C68 ; Lower +2C6A ; Lower +2C6C ; Lower +2C74 ; Lower +2C76..2C77 ; Lower +2C81 ; Lower +2C83 ; Lower +2C85 ; Lower +2C87 ; Lower +2C89 ; Lower +2C8B ; Lower +2C8D ; Lower +2C8F ; Lower +2C91 ; Lower +2C93 ; Lower +2C95 ; Lower +2C97 ; Lower +2C99 ; Lower +2C9B ; Lower +2C9D ; Lower +2C9F ; Lower +2CA1 ; Lower +2CA3 ; Lower +2CA5 ; Lower +2CA7 ; Lower +2CA9 ; Lower +2CAB ; Lower +2CAD ; Lower +2CAF ; Lower +2CB1 ; Lower +2CB3 ; Lower +2CB5 ; Lower +2CB7 ; Lower +2CB9 ; Lower +2CBB ; Lower +2CBD ; Lower +2CBF ; Lower +2CC1 ; Lower +2CC3 ; Lower +2CC5 ; Lower +2CC7 ; Lower +2CC9 ; Lower +2CCB ; Lower +2CCD ; Lower +2CCF ; Lower +2CD1 ; Lower +2CD3 ; Lower +2CD5 ; Lower +2CD7 ; Lower +2CD9 ; Lower +2CDB ; Lower +2CDD ; Lower +2CDF ; Lower +2CE1 ; Lower +2CE3..2CE4 ; Lower +2D00..2D25 ; Lower +FB00..FB06 ; Lower +FB13..FB17 ; Lower +FF41..FF5A ; Lower +10428..1044F ; Lower +1D41A..1D433 ; Lower +1D44E..1D454 ; Lower +1D456..1D467 ; Lower +1D482..1D49B ; Lower +1D4B6..1D4B9 ; Lower +1D4BB ; Lower +1D4BD..1D4C3 ; Lower +1D4C5..1D4CF ; Lower +1D4EA..1D503 ; Lower +1D51E..1D537 ; Lower +1D552..1D56B ; Lower +1D586..1D59F ; Lower +1D5BA..1D5D3 ; Lower +1D5EE..1D607 ; Lower +1D622..1D63B ; Lower +1D656..1D66F ; Lower +1D68A..1D6A5 ; Lower +1D6C2..1D6DA ; Lower +1D6DC..1D6E1 ; Lower +1D6FC..1D714 ; Lower +1D716..1D71B ; Lower +1D736..1D74E ; Lower +1D750..1D755 ; Lower +1D770..1D788 ; Lower +1D78A..1D78F ; Lower +1D7AA..1D7C2 ; Lower +1D7C4..1D7C9 ; Lower +1D7CB ; Lower + +# Total code points: 1790 + +# ================================================ + +0041..005A ; Upper +00C0..00D6 ; Upper +00D8..00DE ; Upper +0100 ; Upper +0102 ; Upper +0104 ; Upper +0106 ; Upper +0108 ; Upper +010A ; Upper +010C ; Upper +010E ; Upper +0110 ; Upper +0112 ; Upper +0114 ; Upper +0116 ; Upper +0118 ; Upper +011A ; Upper +011C ; Upper +011E ; Upper +0120 ; Upper +0122 ; Upper +0124 ; Upper +0126 ; Upper +0128 ; Upper +012A ; Upper +012C ; Upper +012E ; Upper +0130 ; Upper +0132 ; Upper +0134 ; Upper +0136 ; Upper +0139 ; Upper +013B ; Upper +013D ; Upper +013F ; Upper +0141 ; Upper +0143 ; Upper +0145 ; Upper +0147 ; Upper +014A ; Upper +014C ; Upper +014E ; Upper +0150 ; Upper +0152 ; Upper +0154 ; Upper +0156 ; Upper +0158 ; Upper +015A ; Upper +015C ; Upper +015E ; Upper +0160 ; Upper +0162 ; Upper +0164 ; Upper +0166 ; Upper +0168 ; Upper +016A ; Upper +016C ; Upper +016E ; Upper +0170 ; Upper +0172 ; Upper +0174 ; Upper +0176 ; Upper +0178..0179 ; Upper +017B ; Upper +017D ; Upper +0181..0182 ; Upper +0184 ; Upper +0186..0187 ; Upper +0189..018B ; Upper +018E..0191 ; Upper +0193..0194 ; Upper +0196..0198 ; Upper +019C..019D ; Upper +019F..01A0 ; Upper +01A2 ; Upper +01A4 ; Upper +01A6..01A7 ; Upper +01A9 ; Upper +01AC ; Upper +01AE..01AF ; Upper +01B1..01B3 ; Upper +01B5 ; Upper +01B7..01B8 ; Upper +01BC ; Upper +01C4..01C5 ; Upper +01C7..01C8 ; Upper +01CA..01CB ; Upper +01CD ; Upper +01CF ; Upper +01D1 ; Upper +01D3 ; Upper +01D5 ; Upper +01D7 ; Upper +01D9 ; Upper +01DB ; Upper +01DE ; Upper +01E0 ; Upper +01E2 ; Upper +01E4 ; Upper +01E6 ; Upper +01E8 ; Upper +01EA ; Upper +01EC ; Upper +01EE ; Upper +01F1..01F2 ; Upper +01F4 ; Upper +01F6..01F8 ; Upper +01FA ; Upper +01FC ; Upper +01FE ; Upper +0200 ; Upper +0202 ; Upper +0204 ; Upper +0206 ; Upper +0208 ; Upper +020A ; Upper +020C ; Upper +020E ; Upper +0210 ; Upper +0212 ; Upper +0214 ; Upper +0216 ; Upper +0218 ; Upper +021A ; Upper +021C ; Upper +021E ; Upper +0220 ; Upper +0222 ; Upper +0224 ; Upper +0226 ; Upper +0228 ; Upper +022A ; Upper +022C ; Upper +022E ; Upper +0230 ; Upper +0232 ; Upper +023A..023B ; Upper +023D..023E ; Upper +0241 ; Upper +0243..0246 ; Upper +0248 ; Upper +024A ; Upper +024C ; Upper +024E ; Upper +0386 ; Upper +0388..038A ; Upper +038C ; Upper +038E..038F ; Upper +0391..03A1 ; Upper +03A3..03AB ; Upper +03D2..03D4 ; Upper +03D8 ; Upper +03DA ; Upper +03DC ; Upper +03DE ; Upper +03E0 ; Upper +03E2 ; Upper +03E4 ; Upper +03E6 ; Upper +03E8 ; Upper +03EA ; Upper +03EC ; Upper +03EE ; Upper +03F4 ; Upper +03F7 ; Upper +03F9..03FA ; Upper +03FD..042F ; Upper +0460 ; Upper +0462 ; Upper +0464 ; Upper +0466 ; Upper +0468 ; Upper +046A ; Upper +046C ; Upper +046E ; Upper +0470 ; Upper +0472 ; Upper +0474 ; Upper +0476 ; Upper +0478 ; Upper +047A ; Upper +047C ; Upper +047E ; Upper +0480 ; Upper +048A ; Upper +048C ; Upper +048E ; Upper +0490 ; Upper +0492 ; Upper +0494 ; Upper +0496 ; Upper +0498 ; Upper +049A ; Upper +049C ; Upper +049E ; Upper +04A0 ; Upper +04A2 ; Upper +04A4 ; Upper +04A6 ; Upper +04A8 ; Upper +04AA ; Upper +04AC ; Upper +04AE ; Upper +04B0 ; Upper +04B2 ; Upper +04B4 ; Upper +04B6 ; Upper +04B8 ; Upper +04BA ; Upper +04BC ; Upper +04BE ; Upper +04C0..04C1 ; Upper +04C3 ; Upper +04C5 ; Upper +04C7 ; Upper +04C9 ; Upper +04CB ; Upper +04CD ; Upper +04D0 ; Upper +04D2 ; Upper +04D4 ; Upper +04D6 ; Upper +04D8 ; Upper +04DA ; Upper +04DC ; Upper +04DE ; Upper +04E0 ; Upper +04E2 ; Upper +04E4 ; Upper +04E6 ; Upper +04E8 ; Upper +04EA ; Upper +04EC ; Upper +04EE ; Upper +04F0 ; Upper +04F2 ; Upper +04F4 ; Upper +04F6 ; Upper +04F8 ; Upper +04FA ; Upper +04FC ; Upper +04FE ; Upper +0500 ; Upper +0502 ; Upper +0504 ; Upper +0506 ; Upper +0508 ; Upper +050A ; Upper +050C ; Upper +050E ; Upper +0510 ; Upper +0512 ; Upper +0531..0556 ; Upper +10A0..10C5 ; Upper +1E00 ; Upper +1E02 ; Upper +1E04 ; Upper +1E06 ; Upper +1E08 ; Upper +1E0A ; Upper +1E0C ; Upper +1E0E ; Upper +1E10 ; Upper +1E12 ; Upper +1E14 ; Upper +1E16 ; Upper +1E18 ; Upper +1E1A ; Upper +1E1C ; Upper +1E1E ; Upper +1E20 ; Upper +1E22 ; Upper +1E24 ; Upper +1E26 ; Upper +1E28 ; Upper +1E2A ; Upper +1E2C ; Upper +1E2E ; Upper +1E30 ; Upper +1E32 ; Upper +1E34 ; Upper +1E36 ; Upper +1E38 ; Upper +1E3A ; Upper +1E3C ; Upper +1E3E ; Upper +1E40 ; Upper +1E42 ; Upper +1E44 ; Upper +1E46 ; Upper +1E48 ; Upper +1E4A ; Upper +1E4C ; Upper +1E4E ; Upper +1E50 ; Upper +1E52 ; Upper +1E54 ; Upper +1E56 ; Upper +1E58 ; Upper +1E5A ; Upper +1E5C ; Upper +1E5E ; Upper +1E60 ; Upper +1E62 ; Upper +1E64 ; Upper +1E66 ; Upper +1E68 ; Upper +1E6A ; Upper +1E6C ; Upper +1E6E ; Upper +1E70 ; Upper +1E72 ; Upper +1E74 ; Upper +1E76 ; Upper +1E78 ; Upper +1E7A ; Upper +1E7C ; Upper +1E7E ; Upper +1E80 ; Upper +1E82 ; Upper +1E84 ; Upper +1E86 ; Upper +1E88 ; Upper +1E8A ; Upper +1E8C ; Upper +1E8E ; Upper +1E90 ; Upper +1E92 ; Upper +1E94 ; Upper +1EA0 ; Upper +1EA2 ; Upper +1EA4 ; Upper +1EA6 ; Upper +1EA8 ; Upper +1EAA ; Upper +1EAC ; Upper +1EAE ; Upper +1EB0 ; Upper +1EB2 ; Upper +1EB4 ; Upper +1EB6 ; Upper +1EB8 ; Upper +1EBA ; Upper +1EBC ; Upper +1EBE ; Upper +1EC0 ; Upper +1EC2 ; Upper +1EC4 ; Upper +1EC6 ; Upper +1EC8 ; Upper +1ECA ; Upper +1ECC ; Upper +1ECE ; Upper +1ED0 ; Upper +1ED2 ; Upper +1ED4 ; Upper +1ED6 ; Upper +1ED8 ; Upper +1EDA ; Upper +1EDC ; Upper +1EDE ; Upper +1EE0 ; Upper +1EE2 ; Upper +1EE4 ; Upper +1EE6 ; Upper +1EE8 ; Upper +1EEA ; Upper +1EEC ; Upper +1EEE ; Upper +1EF0 ; Upper +1EF2 ; Upper +1EF4 ; Upper +1EF6 ; Upper +1EF8 ; Upper +1F08..1F0F ; Upper +1F18..1F1D ; Upper +1F28..1F2F ; Upper +1F38..1F3F ; Upper +1F48..1F4D ; Upper +1F59 ; Upper +1F5B ; Upper +1F5D ; Upper +1F5F ; Upper +1F68..1F6F ; Upper +1F88..1F8F ; Upper +1F98..1F9F ; Upper +1FA8..1FAF ; Upper +1FB8..1FBC ; Upper +1FC8..1FCC ; Upper +1FD8..1FDB ; Upper +1FE8..1FEC ; Upper +1FF8..1FFC ; Upper +2102 ; Upper +2107 ; Upper +210B..210D ; Upper +2110..2112 ; Upper +2115 ; Upper +2119..211D ; Upper +2124 ; Upper +2126 ; Upper +2128 ; Upper +212A..212D ; Upper +2130..2133 ; Upper +213E..213F ; Upper +2145 ; Upper +2160..216F ; Upper +2183 ; Upper +24B6..24CF ; Upper +2C00..2C2E ; Upper +2C60 ; Upper +2C62..2C64 ; Upper +2C67 ; Upper +2C69 ; Upper +2C6B ; Upper +2C75 ; Upper +2C80 ; Upper +2C82 ; Upper +2C84 ; Upper +2C86 ; Upper +2C88 ; Upper +2C8A ; Upper +2C8C ; Upper +2C8E ; Upper +2C90 ; Upper +2C92 ; Upper +2C94 ; Upper +2C96 ; Upper +2C98 ; Upper +2C9A ; Upper +2C9C ; Upper +2C9E ; Upper +2CA0 ; Upper +2CA2 ; Upper +2CA4 ; Upper +2CA6 ; Upper +2CA8 ; Upper +2CAA ; Upper +2CAC ; Upper +2CAE ; Upper +2CB0 ; Upper +2CB2 ; Upper +2CB4 ; Upper +2CB6 ; Upper +2CB8 ; Upper +2CBA ; Upper +2CBC ; Upper +2CBE ; Upper +2CC0 ; Upper +2CC2 ; Upper +2CC4 ; Upper +2CC6 ; Upper +2CC8 ; Upper +2CCA ; Upper +2CCC ; Upper +2CCE ; Upper +2CD0 ; Upper +2CD2 ; Upper +2CD4 ; Upper +2CD6 ; Upper +2CD8 ; Upper +2CDA ; Upper +2CDC ; Upper +2CDE ; Upper +2CE0 ; Upper +2CE2 ; Upper +FF21..FF3A ; Upper +10400..10427 ; Upper +1D400..1D419 ; Upper +1D434..1D44D ; Upper +1D468..1D481 ; Upper +1D49C ; Upper +1D49E..1D49F ; Upper +1D4A2 ; Upper +1D4A5..1D4A6 ; Upper +1D4A9..1D4AC ; Upper +1D4AE..1D4B5 ; Upper +1D4D0..1D4E9 ; Upper +1D504..1D505 ; Upper +1D507..1D50A ; Upper +1D50D..1D514 ; Upper +1D516..1D51C ; Upper +1D538..1D539 ; Upper +1D53B..1D53E ; Upper +1D540..1D544 ; Upper +1D546 ; Upper +1D54A..1D550 ; Upper +1D56C..1D585 ; Upper +1D5A0..1D5B9 ; Upper +1D5D4..1D5ED ; Upper +1D608..1D621 ; Upper +1D63C..1D655 ; Upper +1D670..1D689 ; Upper +1D6A8..1D6C0 ; Upper +1D6E2..1D6FA ; Upper +1D71C..1D734 ; Upper +1D756..1D76E ; Upper +1D790..1D7A8 ; Upper +1D7CA ; Upper + +# Total code points: 1393 + +# ================================================ + +00A0 ; OLetter +01BB ; OLetter +01C0..01C3 ; OLetter +0294 ; OLetter +02B9..02BF ; OLetter +02C6..02D1 ; OLetter +02EE ; OLetter +0559 ; OLetter +05D0..05EA ; OLetter +05F0..05F2 ; OLetter +05F3 ; OLetter +0621..063A ; OLetter +0640 ; OLetter +0641..064A ; OLetter +066E..066F ; OLetter +0671..06D3 ; OLetter +06D5 ; OLetter +06E5..06E6 ; OLetter +06EE..06EF ; OLetter +06FA..06FC ; OLetter +06FF ; OLetter +0710 ; OLetter +0712..072F ; OLetter +074D..076D ; OLetter +0780..07A5 ; OLetter +07B1 ; OLetter +07CA..07EA ; OLetter +07F4..07F5 ; OLetter +07FA ; OLetter +0903 ; OLetter +0904..0939 ; OLetter +093D ; OLetter +093E..0940 ; OLetter +0949..094C ; OLetter +0950 ; OLetter +0958..0961 ; OLetter +097B..097F ; OLetter +0982..0983 ; OLetter +0985..098C ; OLetter +098F..0990 ; OLetter +0993..09A8 ; OLetter +09AA..09B0 ; OLetter +09B2 ; OLetter +09B6..09B9 ; OLetter +09BD ; OLetter +09BF..09C0 ; OLetter +09C7..09C8 ; OLetter +09CB..09CC ; OLetter +09CE ; OLetter +09DC..09DD ; OLetter +09DF..09E1 ; OLetter +09F0..09F1 ; OLetter +0A03 ; OLetter +0A05..0A0A ; OLetter +0A0F..0A10 ; OLetter +0A13..0A28 ; OLetter +0A2A..0A30 ; OLetter +0A32..0A33 ; OLetter +0A35..0A36 ; OLetter +0A38..0A39 ; OLetter +0A3E..0A40 ; OLetter +0A59..0A5C ; OLetter +0A5E ; OLetter +0A72..0A74 ; OLetter +0A83 ; OLetter +0A85..0A8D ; OLetter +0A8F..0A91 ; OLetter +0A93..0AA8 ; OLetter +0AAA..0AB0 ; OLetter +0AB2..0AB3 ; OLetter +0AB5..0AB9 ; OLetter +0ABD ; OLetter +0ABE..0AC0 ; OLetter +0AC9 ; OLetter +0ACB..0ACC ; OLetter +0AD0 ; OLetter +0AE0..0AE1 ; OLetter +0B02..0B03 ; OLetter +0B05..0B0C ; OLetter +0B0F..0B10 ; OLetter +0B13..0B28 ; OLetter +0B2A..0B30 ; OLetter +0B32..0B33 ; OLetter +0B35..0B39 ; OLetter +0B3D ; OLetter +0B40 ; OLetter +0B47..0B48 ; OLetter +0B4B..0B4C ; OLetter +0B5C..0B5D ; OLetter +0B5F..0B61 ; OLetter +0B71 ; OLetter +0B83 ; OLetter +0B85..0B8A ; OLetter +0B8E..0B90 ; OLetter +0B92..0B95 ; OLetter +0B99..0B9A ; OLetter +0B9C ; OLetter +0B9E..0B9F ; OLetter +0BA3..0BA4 ; OLetter +0BA8..0BAA ; OLetter +0BAE..0BB9 ; OLetter +0BBF ; OLetter +0BC1..0BC2 ; OLetter +0BC6..0BC8 ; OLetter +0BCA..0BCC ; OLetter +0C01..0C03 ; OLetter +0C05..0C0C ; OLetter +0C0E..0C10 ; OLetter +0C12..0C28 ; OLetter +0C2A..0C33 ; OLetter +0C35..0C39 ; OLetter +0C41..0C44 ; OLetter +0C60..0C61 ; OLetter +0C82..0C83 ; OLetter +0C85..0C8C ; OLetter +0C8E..0C90 ; OLetter +0C92..0CA8 ; OLetter +0CAA..0CB3 ; OLetter +0CB5..0CB9 ; OLetter +0CBD ; OLetter +0CBE ; OLetter +0CC0..0CC1 ; OLetter +0CC3..0CC4 ; OLetter +0CC7..0CC8 ; OLetter +0CCA..0CCB ; OLetter +0CDE ; OLetter +0CE0..0CE1 ; OLetter +0D02..0D03 ; OLetter +0D05..0D0C ; OLetter +0D0E..0D10 ; OLetter +0D12..0D28 ; OLetter +0D2A..0D39 ; OLetter +0D3F..0D40 ; OLetter +0D46..0D48 ; OLetter +0D4A..0D4C ; OLetter +0D60..0D61 ; OLetter +0D82..0D83 ; OLetter +0D85..0D96 ; OLetter +0D9A..0DB1 ; OLetter +0DB3..0DBB ; OLetter +0DBD ; OLetter +0DC0..0DC6 ; OLetter +0DD0..0DD1 ; OLetter +0DD8..0DDE ; OLetter +0DF2..0DF3 ; OLetter +0E01..0E30 ; OLetter +0E32..0E33 ; OLetter +0E40..0E45 ; OLetter +0E46 ; OLetter +0E81..0E82 ; OLetter +0E84 ; OLetter +0E87..0E88 ; OLetter +0E8A ; OLetter +0E8D ; OLetter +0E94..0E97 ; OLetter +0E99..0E9F ; OLetter +0EA1..0EA3 ; OLetter +0EA5 ; OLetter +0EA7 ; OLetter +0EAA..0EAB ; OLetter +0EAD..0EB0 ; OLetter +0EB2..0EB3 ; OLetter +0EBD ; OLetter +0EC0..0EC4 ; OLetter +0EC6 ; OLetter +0EDC..0EDD ; OLetter +0F00 ; OLetter +0F40..0F47 ; OLetter +0F49..0F6A ; OLetter +0F7F ; OLetter +0F88..0F8B ; OLetter +1000..1021 ; OLetter +1023..1027 ; OLetter +1029..102A ; OLetter +102C ; OLetter +1031 ; OLetter +1038 ; OLetter +1050..1055 ; OLetter +1056..1057 ; OLetter +10D0..10FA ; OLetter +10FC ; OLetter +1100..1159 ; OLetter +115F..11A2 ; OLetter +11A8..11F9 ; OLetter +1200..1248 ; OLetter +124A..124D ; OLetter +1250..1256 ; OLetter +1258 ; OLetter +125A..125D ; OLetter +1260..1288 ; OLetter +128A..128D ; OLetter +1290..12B0 ; OLetter +12B2..12B5 ; OLetter +12B8..12BE ; OLetter +12C0 ; OLetter +12C2..12C5 ; OLetter +12C8..12D6 ; OLetter +12D8..1310 ; OLetter +1312..1315 ; OLetter +1318..135A ; OLetter +1380..138F ; OLetter +13A0..13F4 ; OLetter +1401..166C ; OLetter +166F..1676 ; OLetter +1681..169A ; OLetter +16A0..16EA ; OLetter +16EE..16F0 ; OLetter +1700..170C ; OLetter +170E..1711 ; OLetter +1720..1731 ; OLetter +1740..1751 ; OLetter +1760..176C ; OLetter +176E..1770 ; OLetter +1780..17B3 ; OLetter +17B6 ; OLetter +17BE..17C5 ; OLetter +17C7..17C8 ; OLetter +17D7 ; OLetter +17DC ; OLetter +1820..1842 ; OLetter +1843 ; OLetter +1844..1877 ; OLetter +1880..18A8 ; OLetter +1900..191C ; OLetter +1923..1926 ; OLetter +1929..192B ; OLetter +1930..1931 ; OLetter +1933..1938 ; OLetter +1950..196D ; OLetter +1970..1974 ; OLetter +1980..19A9 ; OLetter +19B0..19C0 ; OLetter +19C1..19C7 ; OLetter +19C8..19C9 ; OLetter +1A00..1A16 ; OLetter +1A19..1A1B ; OLetter +1B04 ; OLetter +1B05..1B33 ; OLetter +1B35 ; OLetter +1B3B ; OLetter +1B3D..1B41 ; OLetter +1B43 ; OLetter +1B45..1B4B ; OLetter +2135..2138 ; OLetter +2180..2182 ; OLetter +2D30..2D65 ; OLetter +2D6F ; OLetter +2D80..2D96 ; OLetter +2DA0..2DA6 ; OLetter +2DA8..2DAE ; OLetter +2DB0..2DB6 ; OLetter +2DB8..2DBE ; OLetter +2DC0..2DC6 ; OLetter +2DC8..2DCE ; OLetter +2DD0..2DD6 ; OLetter +2DD8..2DDE ; OLetter +3005 ; OLetter +3006 ; OLetter +3007 ; OLetter +3021..3029 ; OLetter +3031..3035 ; OLetter +3038..303A ; OLetter +303B ; OLetter +303C ; OLetter +3041..3096 ; OLetter +309D..309E ; OLetter +309F ; OLetter +30A1..30FA ; OLetter +30FC..30FE ; OLetter +30FF ; OLetter +3105..312C ; OLetter +3131..318E ; OLetter +31A0..31B7 ; OLetter +31F0..31FF ; OLetter +3400..4DB5 ; OLetter +4E00..9FBB ; OLetter +A000..A014 ; OLetter +A015 ; OLetter +A016..A48C ; OLetter +A717..A71A ; OLetter +A800..A801 ; OLetter +A803..A805 ; OLetter +A807..A80A ; OLetter +A80C..A822 ; OLetter +A823..A824 ; OLetter +A827 ; OLetter +A840..A873 ; OLetter +AC00..D7A3 ; OLetter +F900..FA2D ; OLetter +FA30..FA6A ; OLetter +FA70..FAD9 ; OLetter +FB1D ; OLetter +FB1F..FB28 ; OLetter +FB2A..FB36 ; OLetter +FB38..FB3C ; OLetter +FB3E ; OLetter +FB40..FB41 ; OLetter +FB43..FB44 ; OLetter +FB46..FBB1 ; OLetter +FBD3..FD3D ; OLetter +FD50..FD8F ; OLetter +FD92..FDC7 ; OLetter +FDF0..FDFB ; OLetter +FE70..FE74 ; OLetter +FE76..FEFC ; OLetter +FF66..FF6F ; OLetter +FF70 ; OLetter +FF71..FF9D ; OLetter +FF9E..FF9F ; OLetter +FFA0..FFBE ; OLetter +FFC2..FFC7 ; OLetter +FFCA..FFCF ; OLetter +FFD2..FFD7 ; OLetter +FFDA..FFDC ; OLetter +10000..1000B ; OLetter +1000D..10026 ; OLetter +10028..1003A ; OLetter +1003C..1003D ; OLetter +1003F..1004D ; OLetter +10050..1005D ; OLetter +10080..100FA ; OLetter +10140..10174 ; OLetter +10300..1031E ; OLetter +10330..10340 ; OLetter +10341 ; OLetter +10342..10349 ; OLetter +1034A ; OLetter +10380..1039D ; OLetter +103A0..103C3 ; OLetter +103C8..103CF ; OLetter +103D1..103D5 ; OLetter +10450..1049D ; OLetter +10800..10805 ; OLetter +10808 ; OLetter +1080A..10835 ; OLetter +10837..10838 ; OLetter +1083C ; OLetter +1083F ; OLetter +10900..10915 ; OLetter +10A00 ; OLetter +10A10..10A13 ; OLetter +10A15..10A17 ; OLetter +10A19..10A33 ; OLetter +12000..1236E ; OLetter +12400..12462 ; OLetter +20000..2A6D6 ; OLetter +2F800..2FA1D ; OLetter + +# Total code points: 89727 + +# ================================================ + +0030..0039 ; Numeric +0660..0669 ; Numeric +066B..066C ; Numeric +06F0..06F9 ; Numeric +07C0..07C9 ; Numeric +0966..096F ; Numeric +09E6..09EF ; Numeric +0A66..0A6F ; Numeric +0AE6..0AEF ; Numeric +0B66..0B6F ; Numeric +0BE6..0BEF ; Numeric +0C66..0C6F ; Numeric +0CE6..0CEF ; Numeric +0D66..0D6F ; Numeric +0E50..0E59 ; Numeric +0ED0..0ED9 ; Numeric +0F20..0F29 ; Numeric +1040..1049 ; Numeric +17E0..17E9 ; Numeric +1810..1819 ; Numeric +1946..194F ; Numeric +19D0..19D9 ; Numeric +1B50..1B59 ; Numeric +104A0..104A9 ; Numeric +1D7CE..1D7FF ; Numeric + +# Total code points: 282 + +# ================================================ + +002E ; ATerm + +# Total code points: 1 + +# ================================================ + +0021 ; STerm +003F ; STerm +055C ; STerm +055E ; STerm +0589 ; STerm +061F ; STerm +06D4 ; STerm +0700..0702 ; STerm +07F9 ; STerm +0964..0965 ; STerm +104A..104B ; STerm +1362 ; STerm +1367..1368 ; STerm +166E ; STerm +1803 ; STerm +1809 ; STerm +1944..1945 ; STerm +1B5A..1B5B ; STerm +1B5E..1B5F ; STerm +203C..203D ; STerm +2047..2049 ; STerm +3002 ; STerm +A876..A877 ; STerm +FE52 ; STerm +FE56..FE57 ; STerm +FF01 ; STerm +FF0E ; STerm +FF1F ; STerm +FF61 ; STerm + +# Total code points: 42 + +# ================================================ + +0022 ; Close +0027 ; Close +0028 ; Close +0029 ; Close +005B ; Close +005D ; Close +007B ; Close +007D ; Close +00AB ; Close +00BB ; Close +0F3A ; Close +0F3B ; Close +0F3C ; Close +0F3D ; Close +169B ; Close +169C ; Close +2018 ; Close +2019 ; Close +201A ; Close +201B..201C ; Close +201D ; Close +201E ; Close +201F ; Close +2039 ; Close +203A ; Close +2045 ; Close +2046 ; Close +207D ; Close +207E ; Close +208D ; Close +208E ; Close +2329 ; Close +232A ; Close +275B..275E ; Close +2768 ; Close +2769 ; Close +276A ; Close +276B ; Close +276C ; Close +276D ; Close +276E ; Close +276F ; Close +2770 ; Close +2771 ; Close +2772 ; Close +2773 ; Close +2774 ; Close +2775 ; Close +27C5 ; Close +27C6 ; Close +27E6 ; Close +27E7 ; Close +27E8 ; Close +27E9 ; Close +27EA ; Close +27EB ; Close +2983 ; Close +2984 ; Close +2985 ; Close +2986 ; Close +2987 ; Close +2988 ; Close +2989 ; Close +298A ; Close +298B ; Close +298C ; Close +298D ; Close +298E ; Close +298F ; Close +2990 ; Close +2991 ; Close +2992 ; Close +2993 ; Close +2994 ; Close +2995 ; Close +2996 ; Close +2997 ; Close +2998 ; Close +29D8 ; Close +29D9 ; Close +29DA ; Close +29DB ; Close +29FC ; Close +29FD ; Close +2E00..2E01 ; Close +2E02 ; Close +2E03 ; Close +2E04 ; Close +2E05 ; Close +2E06..2E08 ; Close +2E09 ; Close +2E0A ; Close +2E0B ; Close +2E0C ; Close +2E0D ; Close +2E1C ; Close +2E1D ; Close +3008 ; Close +3009 ; Close +300A ; Close +300B ; Close +300C ; Close +300D ; Close +300E ; Close +300F ; Close +3010 ; Close +3011 ; Close +3014 ; Close +3015 ; Close +3016 ; Close +3017 ; Close +3018 ; Close +3019 ; Close +301A ; Close +301B ; Close +301D ; Close +301E..301F ; Close +FD3E ; Close +FD3F ; Close +FE17 ; Close +FE18 ; Close +FE35 ; Close +FE36 ; Close +FE37 ; Close +FE38 ; Close +FE39 ; Close +FE3A ; Close +FE3B ; Close +FE3C ; Close +FE3D ; Close +FE3E ; Close +FE3F ; Close +FE40 ; Close +FE41 ; Close +FE42 ; Close +FE43 ; Close +FE44 ; Close +FE47 ; Close +FE48 ; Close +FE59 ; Close +FE5A ; Close +FE5B ; Close +FE5C ; Close +FE5D ; Close +FE5E ; Close +FF08 ; Close +FF09 ; Close +FF3B ; Close +FF3D ; Close +FF5B ; Close +FF5D ; Close +FF5F ; Close +FF60 ; Close +FF62 ; Close +FF63 ; Close + +# Total code points: 163 + +# EOF diff --git a/icuSources/data/unidata/SpecialCasing.txt b/icuSources/data/unidata/SpecialCasing.txt index c8401d6c..4bfe148b 100644 --- a/icuSources/data/unidata/SpecialCasing.txt +++ b/icuSources/data/unidata/SpecialCasing.txt @@ -1,5 +1,10 @@ -# SpecialCasing-4.0.1.txt -# Date: 2003-10-06, 17:30:00 PST [KW] +# SpecialCasing-5.0.0.txt +# Date: 2006-03-03, 08:23:36 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html # # Special Casing Properties # @@ -18,25 +23,25 @@ # # ; ; ; <upper> ; (<condition_list> ;)? # <comment> # -# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more than -# one character, they are separated by spaces. Other than as used to separate elements, -# spaces are to be ignored. +# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more +# than one character, they are separated by spaces. Other than as used to separate +# elements, spaces are to be ignored. # -# The <condition_list> is optional. Where present, it consists of one or more locales or contexts, -# separated by spaces. In these conditions: +# The <condition_list> is optional. Where present, it consists of one or more locale IDs +# or contexts, separated by spaces. In these conditions: # - A condition list overrides the normal behavior if all of the listed conditions are true. # - The context is always the context of the characters in the original string, # NOT in the resulting string. # - Case distinctions in the condition list are not significant. # - Conditions preceded by "Not_" represent the negation of the condition. # -# A locale is defined as: -# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> ( "_" <variant> )? )? -# <ISO_3166_code> := 2-letter ISO country code, -# <ISO_639_code> := 2-letter ISO language code +# A locale ID is defined by taking any language tag as defined by +# RFC 3066 (or its successor), and replacing '-' by '_'. # -# A context is one of the following, as defined in the Unicode Standard: -# Final_Sigma, After_Soft_Dotted, More_Above, Before_Dot, Not_Before_Dot, After_I +# A context for a character C is defined by Section 3.13 Default Case +# Operations, of The Unicode Standard, Version 5.0. +# (This is identical to the context defined by Unicode 4.1.0, +# as specified in http://www.unicode.org/versions/Unicode4.1.0/) # # Parsers of this file must be prepared to deal with future additions to this format: # * Additional contexts @@ -254,3 +259,6 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH # Note: the following case is already in the UnicodeData file. # 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I + +# EOF + diff --git a/icuSources/data/unidata/UCARules.txt b/icuSources/data/unidata/UCARules.txt index dfb5c520..e1cff3df 100644 --- a/icuSources/data/unidata/UCARules.txt +++ b/icuSources/data/unidata/UCARules.txt @@ -1,14655 +1,17552 @@ -# UCA Rules -# This file contains the UCA tables for the given version, but transformed into rule syntax. -# Generated: 2004-01-14,16:57:44 GMT [MD] -# NOTE: Since UCA handles canonical equivalents, no composites are necessary -# (except in extensions). -# For syntax description, see: http://oss.software.ibm.com/icu/userguide/Collate_Intro.html -# VERSION: UCA=4.0.0, UCD=4.0.0 -& [last tertiary ignorable] - - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '' - = '€' - = '' - = '‚' - = 'ƒ' - = '„' - = '†' - = '‡' - = 'ˆ' - = '‰' - = 'Š' - = '‹' - = 'Œ' - = '' - = 'Ž' - = '' - = '' - = '‘' - = '’' - = '“' - = '”' - = '•' - = '–' - = '—' - = '˜' - = '™' - = 'š' - = '›' - = 'œ' - = '' - = 'ž' - = 'Ÿ' - = ͏ - = ҈ - = ҉ - = ֑ - = ֒ - = ֓ - = ֔ - = ֕ - = ֖ - = ֗ - = ֘ - = ֙ - = ֚ - = ֛ - = ֜ - = ֝ - = ֞ - = ֟ - = ֠ - = ֡ - = ֣ - = ֤ - = ֥ - = ֦ - = ֧ - = ֨ - = ֩ - = ֪ - = ֫ - = ֬ - = ֭ - = ֮ - = ֯ - = ֽ - = ׄ - = '؀' - = '؁' - = '؂' - = '؃' - = ؐ - = ؑ - = ؒ - = ؓ - = ؔ - = ؕ - = ۖ - = ۗ - = ۘ - = ۙ - = ۚ - = ۛ - = ۜ - = '۝' - = ۞ - = ۟ - = ۠ - = ۡ - = ۢ - = ۣ - = ۤ - = ۧ - = ۨ - = ۪ - = ۫ - = ۬ - = ۭ - = '܏' - = ๎ - = ༘ - = ༙ - = ༵ - = ༷ - = ྂ - = ྃ - = ྆ - = ྇ - = ࿆ - = ᠋ - = ᠌ - = ᠍ - = '᠎' - = '​' - = '‌' - = '‍' - = '‎' - = '‏' - = '‪' - = '‫' - = '‬' - = '‭' - = '‮' - = '⁠' - = '⁡' - = '⁢' - = '⁣' - = '' - = '' - = '' - = '' - = '' - = '' - = ︀ - = ︁ - = ︂ - = ︃ - = ︄ - = ︅ - = ︆ - = ︇ - = ︈ - = ︉ - = ︊ - = ︋ - = ︌ - = ︍ - = ︎ - = ️ - = ︡ - = ︣ - = ﹳ - = '' - = '' - = '' - = '' - = 𝅥 - = 𝅦 - = 𝅧 - = 𝅨 - = 𝅩 - = 𝅭 - = 𝅮 - = 𝅯 - = 𝅰 - = 𝅱 - = 𝅲 - = '𝅳' - = '𝅴' - = '𝅵' - = '𝅶' - = '𝅷' - = '𝅸' - = '𝅹' - = '𝅺' - = 𝅻 - = 𝅼 - = 𝅽 - = 𝅾 - = 𝅿 - = 𝆀 - = 𝆁 - = 𝆂 - = 𝆅 - = 𝆆 - = 𝆇 - = 𝆈 - = 𝆉 - = 𝆊 - = 𝆋 - = 𝆪 - = 𝆫 - = 𝆬 - = 𝆭 - = '󠀁' - = '󠀠' - = '󠀡' - = '󠀢' - = '󠀣' - = '󠀤' - = '󠀥' - = '󠀦' - = '󠀧' - = '󠀨' - = '󠀩' - = '󠀪' - = '󠀫' - = '󠀬' - = '󠀭' - = '󠀮' - = '󠀯' - = '󠀰' - = '󠀱' - = '󠀲' - = '󠀳' - = '󠀴' - = '󠀵' - = '󠀶' - = '󠀷' - = '󠀸' - = '󠀹' - = '󠀺' - = '󠀻' - = '󠀼' - = '󠀽' - = '󠀾' - = '󠀿' - = '󠁀' - = '󠁁' - = '󠁂' - = '󠁃' - = '󠁄' - = '󠁅' - = '󠁆' - = '󠁇' - = '󠁈' - = '󠁉' - = '󠁊' - = '󠁋' - = '󠁌' - = '󠁍' - = '󠁎' - = '󠁏' - = '󠁐' - = '󠁑' - = '󠁒' - = '󠁓' - = '󠁔' - = '󠁕' - = '󠁖' - = '󠁗' - = '󠁘' - = '󠁙' - = '󠁚' - = '󠁛' - = '󠁜' - = '󠁝' - = '󠁞' - = '󠁟' - = '󠁠' - = '󠁡' - = '󠁢' - = '󠁣' - = '󠁤' - = '󠁥' - = '󠁦' - = '󠁧' - = '󠁨' - = '󠁩' - = '󠁪' - = '󠁫' - = '󠁬' - = '󠁭' - = '󠁮' - = '󠁯' - = '󠁰' - = '󠁱' - = '󠁲' - = '󠁳' - = '󠁴' - = '󠁵' - = '󠁶' - = '󠁷' - = '󠁸' - = '󠁹' - = '󠁺' - = '󠁻' - = '󠁼' - = '󠁽' - = '󠁾' - = '󠁿' - = 󠄀 - = 󠄁 - = 󠄂 - = 󠄃 - = 󠄄 - = 󠄅 - = 󠄆 - = 󠄇 - = 󠄈 - = 󠄉 - = 󠄊 - = 󠄋 - = 󠄌 - = 󠄍 - = 󠄎 - = 󠄏 - = 󠄐 - = 󠄑 - = 󠄒 - = 󠄓 - = 󠄔 - = 󠄕 - = 󠄖 - = 󠄗 - = 󠄘 - = 󠄙 - = 󠄚 - = 󠄛 - = 󠄜 - = 󠄝 - = 󠄞 - = 󠄟 - = 󠄠 - = 󠄡 - = 󠄢 - = 󠄣 - = 󠄤 - = 󠄥 - = 󠄦 - = 󠄧 - = 󠄨 - = 󠄩 - = 󠄪 - = 󠄫 - = 󠄬 - = 󠄭 - = 󠄮 - = 󠄯 - = 󠄰 - = 󠄱 - = 󠄲 - = 󠄳 - = 󠄴 - = 󠄵 - = 󠄶 - = 󠄷 - = 󠄸 - = 󠄹 - = 󠄺 - = 󠄻 - = 󠄼 - = 󠄽 - = 󠄾 - = 󠄿 - = 󠅀 - = 󠅁 - = 󠅂 - = 󠅃 - = 󠅄 - = 󠅅 - = 󠅆 - = 󠅇 - = 󠅈 - = 󠅉 - = 󠅊 - = 󠅋 - = 󠅌 - = 󠅍 - = 󠅎 - = 󠅏 - = 󠅐 - = 󠅑 - = 󠅒 - = 󠅓 - = 󠅔 - = 󠅕 - = 󠅖 - = 󠅗 - = 󠅘 - = 󠅙 - = 󠅚 - = 󠅛 - = 󠅜 - = 󠅝 - = 󠅞 - = 󠅟 - = 󠅠 - = 󠅡 - = 󠅢 - = 󠅣 - = 󠅤 - = 󠅥 - = 󠅦 - = 󠅧 - = 󠅨 - = 󠅩 - = 󠅪 - = 󠅫 - = 󠅬 - = 󠅭 - = 󠅮 - = 󠅯 - = 󠅰 - = 󠅱 - = 󠅲 - = 󠅳 - = 󠅴 - = 󠅵 - = 󠅶 - = 󠅷 - = 󠅸 - = 󠅹 - = 󠅺 - = 󠅻 - = 󠅼 - = 󠅽 - = 󠅾 - = 󠅿 - = 󠆀 - = 󠆁 - = 󠆂 - = 󠆃 - = 󠆄 - = 󠆅 - = 󠆆 - = 󠆇 - = 󠆈 - = 󠆉 - = 󠆊 - = 󠆋 - = 󠆌 - = 󠆍 - = 󠆎 - = 󠆏 - = 󠆐 - = 󠆑 - = 󠆒 - = 󠆓 - = 󠆔 - = 󠆕 - = 󠆖 - = 󠆗 - = 󠆘 - = 󠆙 - = 󠆚 - = 󠆛 - = 󠆜 - = 󠆝 - = 󠆞 - = 󠆟 - = 󠆠 - = 󠆡 - = 󠆢 - = 󠆣 - = 󠆤 - = 󠆥 - = 󠆦 - = 󠆧 - = 󠆨 - = 󠆩 - = 󠆪 - = 󠆫 - = 󠆬 - = 󠆭 - = 󠆮 - = 󠆯 - = 󠆰 - = 󠆱 - = 󠆲 - = 󠆳 - = 󠆴 - = 󠆵 - = 󠆶 - = 󠆷 - = 󠆸 - = 󠆹 - = 󠆺 - = 󠆻 - = 󠆼 - = 󠆽 - = 󠆾 - = 󠆿 - = 󠇀 - = 󠇁 - = 󠇂 - = 󠇃 - = 󠇄 - = 󠇅 - = 󠇆 - = 󠇇 - = 󠇈 - = 󠇉 - = 󠇊 - = 󠇋 - = 󠇌 - = 󠇍 - = 󠇎 - = 󠇏 - = 󠇐 - = 󠇑 - = 󠇒 - = 󠇓 - = 󠇔 - = 󠇕 - = 󠇖 - = 󠇗 - = 󠇘 - = 󠇙 - = 󠇚 - = 󠇛 - = 󠇜 - = 󠇝 - = 󠇞 - = 󠇟 - = 󠇠 - = 󠇡 - = 󠇢 - = 󠇣 - = 󠇤 - = 󠇥 - = 󠇦 - = 󠇧 - = 󠇨 - = 󠇩 - = 󠇪 - = 󠇫 - = 󠇬 - = 󠇭 - = 󠇮 - = 󠇯 -& [last primary ignorable] - << ̲ - << ̓ - << ̔ - << ́ - << ̀ - << ̆ - << ̂ - << ̌ - << ̊ - << ͂ - << ̈ - << ̋ - << ̃ - << ̇ - << ̸ - << ̧ - << ̨ - << ̄ - << ̅ - << ̉ - << ̍ - << ̎ - << ̏ - << ̐ - << ̑ - << ̒ - << ̕ - << ̖ - << ̗ - << ̘ - << ̙ - << ̚ - << ̛ - << ̜ - << ̝ - << ̞ - << ̟ - << ̠ - << ̡ - << ̢ - << ̣ - << ̤ - << ̥ - << ̦ - << ̩ - << ̪ - << ̫ - << ̬ - << ̭ - << ̮ - << ̯ - << ̰ - << ̱ - << ̳ - << ̴ - << ̵ - << ̶ - << ̷ - << ̹ - << ̺ - << ̻ - << ̼ - << ̽ - << ̾ - << ̿ - << ͅ - << ͆ - << ͇ - << ͈ - << ͉ - << ͊ - << ͋ - << ͌ - << ͍ - << ͎ - << ͐ - << ͑ - << ͒ - << ͓ - << ͔ - << ͕ - << ͖ - << ͗ - << ͝ - << ͞ - << ͟ - << ͠ - = ︢ - << ͡ - = ︠ - << ͢ - << ҃ - << ҄ - << ҅ - << ҆ - << ְ - << ֱ - << ֲ - << ֳ - << ִ - << ֵ - << ֶ - << ַ - << ָ - << ֹ - << ֻ - << ׂ - << ׁ - << ּ - << ֿ - << ﬞ - << ً - <<< ﹱ - <<< ﹰ - << ٌ - <<< ﹲ - << ٍ - <<< ﹴ - << َ - <<< ﹷ - <<< ﹶ - << ُ - <<< ﹹ - <<< ﹸ - << ِ - <<< ﹻ - <<< ﹺ - << ّ - <<< ﳲ - = ﳳ - = ﳴ - = ﹽ - <<< ﱞ - = ﱟ - = ﱠ - = ﱡ - = ﱢ - = ﹼ - <<< ﱣ / ٰ - << ْ - <<< ﹿ - <<< ﹾ - << ٓ - << ٔ - << ٕ - << ٖ - << ٗ - << ٘ - << ٰ - << ܑ - << ܰ - << ܱ - << ܲ - << ܳ - << ܴ - << ܵ - << ܶ - << ܷ - << ܸ - << ܹ - << ܺ - << ܻ - << ܼ - << ܽ - << ܾ - << ܿ - << ݀ - << ݁ - << ݂ - << ݃ - << ݄ - << ݅ - << ݆ - << ݇ - << ݈ - << ݉ - << ݊ - << ़ - << ँ - << ं - << ः - << ॑ - << ॒ - << ॓ - << ॔ - << ় - << ঁ - << ং - << ঃ - << ਼ - << ਁ - << ਂ - << ਃ - << ੰ - << ੱ - << ઼ - << ઁ - << ં - << ઃ - << ଼ - << ଁ - << ଂ - << ଃ - << ஂ - << ఁ - << ం - << ః - << ಼ - << ಂ - << ಃ - << ം - << ഃ - << ං - << ඃ - << ็ - << ่ - << ้ - << ๊ - << ๋ - << ່ - << ້ - << ໊ - << ໋ - << ༹ - << ཾ - << ཿ - << ံ - << ့ - << း - << ំ - << ះ - << ៈ - << ៉ - << ៊ - << ់ - << ៌ - << ៍ - << ៎ - << ៏ - << ័ - << ៑ - << ៓ - << ៝ - << ᤹ - << ᤺ - << ᤻ - << 〪 - << 〫 - << 〬 - << 〭 - << 〮 - << 〯 - << ゙ - <<< ゙ - << ゚ - <<< ゚ - << ⃐ - << ⃑ - << ⃒ - << ⃓ - << ⃔ - << ⃕ - << ⃖ - << ⃗ - << ⃘ - << ⃙ - << ⃚ - << ⃛ - << ⃜ - << ⃝ - << ⃞ - << ⃟ - << ⃠ - << ⃡ - << ⃢ - << ⃣ - << ⃤ - << ⃥ - << ⃦ - << ⃧ - << ⃨ - << ⃩ - << ⃪ -& [last regular] - < ' ' - < ' -' - < ' ' - < ' ' - < ' -' - < '…' - < ' -' - < '
' - < ' ' - <<< ' ' - <<< ' ' - = ' ' - = ' ' - = ' ' - = ' ' - = ' ' - = ' ' - = ' ' - = ' ' - <<< ' ' - = ' ' - = ' ' - < ' ' - < ـ - < '`' - <<< ` - < ´ - = ΄ - < ˜ - < '^' - <<< ^ - < ¯ - <<<  ̄ - < ‾ - <<< ﹉ - = ﹊ - = ﹋ - = ﹌ - < ˘ - < ˙ - < ¨ - < ˚ - < ˝ - < ᾽ - = ᾿ - < ῾ - < ¸ - < ˛ - < '_' - <<< _ - <<< ﹍ - = ﹎ - = ﹏ - <<< ︳ - = ︴ - < ‗ - < ῀ - < ゛ - < ゜ - < '­' - < '-' - <<< - - <<< ﹣ - < ֊ - < ᠆ - < ᠇ - < ‐ - <<< ‑ - < ‒ - < – - <<< ︲ - < — - <<< ﹘ - <<< ︱ - < ― - < ⁓ - < 〜 - < 〰 - < ゠ - < ・ - <<< ・ - < ',' - <<< , - <<< ﹐ - < ՝ - < ، - < ؍ - < ٫ - < ٬ - < ᠂ - < ᠈ - < 、 - <<< ﹑ - <<< 、 - < ﹅ - < ﹆ - < ';' - <<< ; - <<< ﹔ - < ؛ - < ⁏ - < ':' - <<< : - <<< ⩴ / ':=' - <<< ﹕ - < ։ - < ܃ - < ܄ - < ܅ - < ܆ - < ܇ - < ܈ - < ፡ - < ፣ - < ፤ - < ፥ - < ፦ - < ᠄ - < ᠅ - < ༔ - < ៖ - < ᛫ - < ᛬ - < ᛭ - < '!' - <<< ! - <<< ‼ / '!' - <<< ⁉ / '?' - <<< ﹗ - < ¡ - < ՜ - < ᥄ - < '?' - <<< ? - <<< ⁈ / '!' - <<< ⁇ / '?' - <<< ﹖ - < ¿ - < ՞ - < ؟ - < ܉ - < ፧ - < ᥅ - < ‽ - < '.' - <<< . - <<< ․ - <<< ‥ / '.' - <<< … / '..' - <<< ﹒ - <<< ︰ / '.' - < ᠁ - < ۔ - < ܁ - < ܂ - < ። - < ᠃ - < ᠉ - < ᙮ - < 。 - <<< 。 - < · - < । - < ॥ - < ᜵ - < ᜶ - < ၊ - < ။ - < ។ - < ៕ - < ܀ - < ჻ - < ፨ - < 𐄀 - < 𐄁 - < 𐄂 - < 𐎟 - < '' - <<< ' - < ‘ - < ’ - < ‚ - < ‛ - < ‹ - < › - < '"' - <<< " - < “ - < ” - < „ - < ‟ - < 〝 - < 〞 - < 〟 - < « - < » - < '(' - <<< ( - <<< ⑴ / 1')' - <<< ⑽ / 10')' - <<< ⑾ / 11')' - <<< ⑿ / 12')' - <<< ⒀ / 13')' - <<< ⒁ / 14')' - <<< ⒂ / 15')' - <<< ⒃ / 16')' - <<< ⒄ / 17')' - <<< ⒅ / 18')' - <<< ⒆ / 19')' - <<< ⑵ / 2')' - <<< ⒇ / 20')' - <<< ⑶ / 3')' - <<< ⑷ / 4')' - <<< ⑸ / 5')' - <<< ⑹ / 6')' - <<< ⑺ / 7')' - <<< ⑻ / 8')' - <<< ⑼ / 9')' - <<< ⒜ / a')' - <<< ⒝ / b')' - <<< ⒞ / c')' - <<< ⒟ / d')' - <<< ⒠ / e')' - <<< ⒡ / f')' - <<< ⒢ / g')' - <<< ⒣ / h')' - <<< ⒤ / i')' - <<< ⒥ / j')' - <<< ⒦ / k')' - <<< ⒧ / l')' - <<< ⒨ / m')' - <<< ⒩ / n')' - <<< ⒪ / o')' - <<< ⒫ / p')' - <<< ⒬ / q')' - <<< ⒭ / r')' - <<< ⒮ / s')' - <<< ⒯ / t')' - <<< ⒰ / u')' - <<< ⒱ / v')' - <<< ⒲ / w')' - <<< ⒳ / x')' - <<< ⒴ / y')' - <<< ⒵ / z')' - <<< ㈀ / ᄀ')' - <<< ㈎ / 가')' - <<< ㈁ / ᄂ')' - <<< ㈏ / 나')' - <<< ㈂ / ᄃ')' - <<< ㈐ / 다')' - <<< ㈃ / ᄅ')' - <<< ㈑ / 라')' - <<< ㈄ / ᄆ')' - <<< ㈒ / 마')' - <<< ㈅ / ᄇ')' - <<< ㈓ / 바')' - <<< ㈆ / ᄉ')' - <<< ㈔ / 사')' - <<< ㈇ / ᄋ')' - <<< ㈕ / 아')' - <<< ㈝ / 오전')' - <<< ㈞ / 오후')' - <<< ㈈ / ᄌ')' - <<< ㈖ / 자')' - <<< ㈜ / 주')' - <<< ㈉ / ᄎ')' - <<< ㈗ / 차')' - <<< ㈊ / ᄏ')' - <<< ㈘ / 카')' - <<< ㈋ / ᄐ')' - <<< ㈙ / 타')' - <<< ㈌ / ᄑ')' - <<< ㈚ / 파')' - <<< ㈍ / ᄒ')' - <<< ㈛ / 하')' - <<< ㈠ / 一')' - <<< ㈦ / 七')' - <<< ㈢ / 三')' - <<< ㈨ / 九')' - <<< ㈡ / 二')' - <<< ㈤ / 五')' - <<< ㈹ / 代')' - <<< ㈽ / 企')' - <<< ㉁ / 休')' - <<< ㈧ / 八')' - <<< ㈥ / 六')' - <<< ㈸ / 労')' - <<< ㈩ / 十')' - <<< ㈿ / 協')' - <<< ㈴ / 名')' - <<< ㈺ / 呼')' - <<< ㈣ / 四')' - <<< ㈯ / 土')' - <<< ㈻ / 学')' - <<< ㈰ / 日')' - <<< ㈪ / 月')' - <<< ㈲ / 有')' - <<< ㈭ / 木')' - <<< ㈱ / 株')' - <<< ㈬ / 水')' - <<< ㈫ / 火')' - <<< ㈵ / 特')' - <<< ㈼ / 監')' - <<< ㈳ / 社')' - <<< ㈷ / 祝')' - <<< ㉀ / 祭')' - <<< ㉂ / 自')' - <<< ㉃ / 至')' - <<< ㈶ / 財')' - <<< ㈾ / 資')' - <<< ㈮ / 金')' - <<< ﹙ - <<< ⁽ - <<< ₍ - <<< ︵ - < ')' - <<< ) - <<< ﹚ - <<< ⁾ - <<< ₎ - <<< ︶ - < '[' - <<< [ - <<< ﹇ - < ']' - <<< ] - <<< ﹈ - < '{' - <<< { - <<< ﹛ - <<< ︷ - < '}' - <<< } - <<< ﹜ - <<< ︸ - < ༺ - < ༻ - < ༼ - < ༽ - < ᚛ - < ᚜ - < ⁅ - < ⁆ - < ⧼ - < ⧽ - < ⦃ - < ⦄ - < ⦅ - <<< ⦅ - < ⦆ - <<< ⦆ - < ⦇ - < ⦈ - < ⦉ - < ⦊ - < ⦋ - < ⦌ - < ⦍ - < ⦎ - < ⦏ - < ⦐ - < ⦑ - < ⦒ - < ⦓ - < ⦔ - < ⦕ - < ⦖ - < ⦗ - < ⦘ - < 〈 - <<< ︿ - < 〉 - <<< ﹀ - < 《 - <<< ︽ - < 》 - <<< ︾ - < 「 - <<< 「 - <<< ﹁ - < 」 - <<< 」 - <<< ﹂ - < 『 - <<< ﹃ - < 』 - <<< ﹄ - < 【 - <<< ︻ - < 】 - <<< ︼ - < 〔 - <<< ﹝ - <<< ︹ - < 〕 - <<< ﹞ - <<< ︺ - < 〖 - < 〗 - < 〘 - < 〙 - < 〚 - < 〛 - < ﴾ - < ﴿ - < § - < ¶ - < ⁋ - < © - < ® - < '@' - <<< @ - <<< ﹫ - < '*' - <<< * - <<< ﹡ - < ⁎ - < ⁑ - < ٭ - < '/' - <<< / - < ⁄ - < '\' - <<< \ - <<< ﹨ - < '&' - <<< & - <<< ﹠ - < ⅋ - < ⁊ - < '#' - <<< # - <<< ﹟ - < '%' - <<< % - <<< ﹪ - < ٪ - < ‰ - < ‱ - < ⁒ - < † - < ‡ - < • - < ‣ - < ‧ - < ⁃ - < ⁌ - < ⁍ - < ′ - <<< ″ / ′ - <<< ‴ / ′′ - <<< ⁗ / ′′′ - < ‵ - <<< ‶ / ‵ - <<< ‷ / ‵‵ - < 〃 - < 〽 - < ‸ - < ※ - < ‿ - < ⁔ - < ⁀ - < ⁐ - < ⁁ - < ⁂ - < ՚ - < ՛ - < ՟ - < ־ - < ׀ - < ׃ - < ׳ - < ״ - < ܊ - < ܋ - < ܌ - < ܍ - < ᠀ - < ᠊ - < ॰ - < ෴ - < ๚ - < ๛ - < ༄ - < ༅ - < ༆ - < ༇ - < ༈ - < ༉ - < ༊ - < ་ - <<< ༌ - < ། - < ༎ - < ༏ - < ༐ - < ༑ - < ༒ - < ྅ - < ᥀ - < ၌ - < ၍ - < ၎ - < ၏ - < ៗ - < ៘ - < ៙ - < ៚ - < ᙭ - < ʹ - < ͵ - < ʺ - < ˂ - < ˃ - < ˄ - < ˅ - < ˆ - < ˇ - < ˈ - < ˉ - < ˊ - < ˋ - < ˌ - < ˍ - < ˎ - < ˏ - < ˒ - < ˓ - < ˔ - < ˕ - < ˖ - < ˗ - < ˞ - < ˟ - < ˥ - < ˦ - < ˧ - < ˨ - < ˩ - < ˪ - < ˫ - < ˬ - < ˭ - < ˯ - < ˰ - < ˱ - < ˲ - < ˳ - < ˴ - < ˵ - < ˶ - < ˷ - < ˸ - < ˹ - < ˺ - < ˻ - < ˼ - < ˽ - < ˾ - < ˿ - < ° - <<< ℃ / C - <<< ℉ / F - < ҂ - < ؎ - < ؏ - < ۩ - < ﷽ - < ৺ - < ୰ - < ௳ - < ௴ - < ௵ - < ௶ - < ௷ - < ௸ - < ௺ - < ๏ - < ༁ - < ༂ - < ༃ - < ༓ - < ༕ - < ༖ - < ༗ - < ༚ - < ༛ - < ༜ - < ༝ - < ༞ - < ༟ - < ༴ - < ༶ - < ༸ - < ༾ - < ༿ - < ྾ - < ྿ - < ࿀ - < ࿁ - < ࿂ - < ࿃ - < ࿄ - < ࿅ - < ࿇ - < ࿈ - < ࿉ - < ࿊ - < ࿋ - < ࿌ - < ࿏ - < ᧠ - < ᧡ - < ᧢ - < ᧣ - < ᧤ - < ᧥ - < ᧦ - < ᧧ - < ᧨ - < ᧩ - < ᧪ - < ᧫ - < ᧬ - < ᧭ - < ᧮ - < ᧯ - < ᧰ - < ᧱ - < ᧲ - < ᧳ - < ᧴ - < ᧵ - < ᧶ - < ᧷ - < ᧸ - < ᧹ - < ᧺ - < ᧻ - < ᧼ - < ᧽ - < ᧾ - < ᧿ - < ℄ - < ℈ - < ℔ - < ℗ - < ℘ - < ℞ - < ℟ - < ℣ - < ℥ - < ℧ - < ℩ - < ℮ - < Ⅎ - < ℺ - < ⅁ - < ⅂ - < ⅃ - < ⅄ - < ⅊ - < ← - <<< ← - < → - <<< → - < ↑ - <<< ↑ - < ↓ - <<< ↓ - < ↔ - < ↕ - < ↖ - < ↗ - < ↘ - < ↙ - < ↜ - < ↝ - < ↞ - < ↟ - < ↠ - < ↡ - < ↢ - < ↣ - < ↤ - < ↥ - < ↦ - < ↧ - < ↨ - < ↩ - < ↪ - < ↫ - < ↬ - < ↭ - < ↯ - < ↰ - < ↱ - < ↲ - < ↳ - < ↴ - < ↵ - < ↶ - < ↷ - < ↸ - < ↹ - < ↺ - < ↻ - < ↼ - < ↽ - < ↾ - < ↿ - < ⇀ - < ⇁ - < ⇂ - < ⇃ - < ⇄ - < ⇅ - < ⇆ - < ⇇ - < ⇈ - < ⇉ - < ⇊ - < ⇋ - < ⇌ - < ⇐ - < ⇑ - < ⇒ - < ⇓ - < ⇔ - < ⇕ - < ⇖ - < ⇗ - < ⇘ - < ⇙ - < ⇚ - < ⇛ - < ⇜ - < ⇝ - < ⇞ - < ⇟ - < ⇠ - < ⇡ - < ⇢ - < ⇣ - < ⇤ - < ⇥ - < ⇦ - < ⇧ - < ⇨ - < ⇩ - < ⇪ - < ⇫ - < ⇬ - < ⇭ - < ⇮ - < ⇯ - < ⇰ - < ⇱ - < ⇲ - < ⇳ - < ⇴ - < ⇵ - < ⇶ - < ⇷ - < ⇸ - < ⇹ - < ⇺ - < ⇻ - < ⇼ - < ⇽ - < ⇾ - < ⇿ - < ∀ - < ∁ - < ∂ - <<< 𝛛 - = 𝜕 - = 𝝏 - = 𝞉 - = 𝟃 - < ∃ - < ∅ - < ∆ - < ∇ - <<< 𝛁 - = 𝛻 - = 𝜵 - = 𝝯 - = 𝞩 - < ∈ - < ∊ - < ∋ - < ∍ - < ϶ - < ∎ - < ∏ - < ∐ - < ∑ - <<< ⅀ - < '+' - <<< + - <<< ﬩ - <<< ﹢ - <<< ⁺ - <<< ₊ - < ± - < ÷ - < × - < '<' - <<< < - <<< ﹤ - < '=' - <<< = - <<< ⩵ / '=' - <<< ⩶ / '==' - <<< ﹦ - <<< ⁼ - <<< ₌ - < '>' - <<< > - <<< ﹥ - < ¬ - <<< ¬ - < '|' - <<< | - < ¦ - <<< ¦ - < ‖ - < '~' - <<< ~ - < − - <<< ⁻ - <<< ₋ - < ∓ - < ∔ - < ∕ - < ∖ - < ∗ - < ∘ - < ∙ - < √ - < ∛ - < ∜ - < ∝ - < ∞ - < ∟ - < ∠ - < ∡ - < ∢ - < ∣ - < ∥ - < ∧ - < ∨ - < ∩ - < ∪ - < ∫ - <<< ∬ / ∫ - <<< ∭ / ∫∫ - <<< ⨌ / ∫∫∫ - < ∮ - <<< ∯ / ∮ - <<< ∰ / ∮∮ - < ∱ - < ∲ - < ∳ - < ∴ - < ∵ - < ∶ - < ∷ - < ∸ - < ∹ - < ∺ - < ∻ - < ∼ - < ∽ - < ∾ - < ∿ - < ≀ - < ≂ - < ≃ - < ≅ - < ≆ - < ≈ - < ≊ - < ≋ - < ≌ - < ≍ - < ≎ - < ≏ - < ≐ - < ≑ - < ≒ - < ≓ - < ≔ - < ≕ - < ≖ - < ≗ - < ≘ - < ≙ - < ≚ - < ≛ - < ≜ - < ≝ - < ≞ - < ≟ - < ≡ - < ≣ - < ≤ - < ≥ - < ≦ - < ≧ - < ≨ - < ≩ - < ≪ - < ≫ - < ≬ - < ≲ - < ≳ - < ≶ - < ≷ - < ≺ - < ≻ - < ≼ - < ≽ - < ≾ - < ≿ - < ⊂ - < ⊃ - < ⊆ - < ⊇ - < ⊊ - < ⊋ - < ⊌ - < ⊍ - < ⊎ - < ⊏ - < ⊐ - < ⊑ - < ⊒ - < ⊓ - < ⊔ - < ⊕ - < ⊖ - < ⊗ - < ⊘ - < ⊙ - < ⊚ - < ⊛ - < ⊜ - < ⊝ - < ⊞ - < ⊟ - < ⊠ - < ⊡ - < ⊢ - < ⊣ - < ⊤ - < ⊥ - < ⊦ - < ⊧ - < ⊨ - < ⊩ - < ⊪ - < ⊫ - < ⊰ - < ⊱ - < ⊲ - < ⊳ - < ⊴ - < ⊵ - < ⊶ - < ⊷ - < ⊸ - < ⊹ - < ⊺ - < ⊻ - < ⊼ - < ⊽ - < ⊾ - < ⊿ - < ⋀ - < ⋁ - < ⋂ - < ⋃ - < ⋄ - < ⋅ - < ⋆ - < ⋇ - < ⋈ - < ⋉ - < ⋊ - < ⋋ - < ⋌ - < ⋍ - < ⋎ - < ⋏ - < ⋐ - < ⋑ - < ⋒ - < ⋓ - < ⋔ - < ⋕ - < ⋖ - < ⋗ - < ⋘ - < ⋙ - < ⋚ - < ⋛ - < ⋜ - < ⋝ - < ⋞ - < ⋟ - < ⋤ - < ⋥ - < ⋦ - < ⋧ - < ⋨ - < ⋩ - < ⋮ - < ⋯ - < ⋰ - < ⋱ - < ⋲ - < ⋳ - < ⋴ - < ⋵ - < ⋶ - < ⋷ - < ⋸ - < ⋹ - < ⋺ - < ⋻ - < ⋼ - < ⋽ - < ⋾ - < ⋿ - < ⌀ - < ⌁ - < ⌂ - < ⌃ - < ⌄ - < ⌅ - < ⌆ - < ⌇ - < ⌈ - < ⌉ - < ⌊ - < ⌋ - < ⌌ - < ⌍ - < ⌎ - < ⌏ - < ⌐ - < ⌑ - < ⌒ - < ⌓ - < ⌔ - < ⌕ - < ⌖ - < ⌗ - < ⌘ - < ⌙ - < ⌚ - < ⌛ - < ⌜ - < ⌝ - < ⌞ - < ⌟ - < ⌠ - < ⌡ - < ⌢ - < ⌣ - < ⌤ - < ⌥ - < ⌦ - < ⌧ - < ⌨ - < ⌫ - < ⌬ - < ⌭ - < ⌮ - < ⌯ - < ⌰ - < ⌱ - < ⌲ - < ⌳ - < ⌴ - < ⌵ - < ⌶ - < ⌷ - < ⌸ - < ⌹ - < ⌺ - < ⌻ - < ⌼ - < ⌽ - < ⌾ - < ⌿ - < ⍀ - < ⍁ - < ⍂ - < ⍃ - < ⍄ - < ⍅ - < ⍆ - < ⍇ - < ⍈ - < ⍉ - < ⍊ - < ⍋ - < ⍌ - < ⍍ - < ⍎ - < ⍏ - < ⍐ - < ⍑ - < ⍒ - < ⍓ - < ⍔ - < ⍕ - < ⍖ - < ⍗ - < ⍘ - < ⍙ - < ⍚ - < ⍛ - < ⍜ - < ⍝ - < ⍞ - < ⍟ - < ⍠ - < ⍡ - < ⍢ - < ⍣ - < ⍤ - < ⍥ - < ⍦ - < ⍧ - < ⍨ - < ⍩ - < ⍪ - < ⍫ - < ⍬ - < ⍭ - < ⍮ - < ⍯ - < ⍰ - < ⍱ - < ⍲ - < ⍳ - < ⍴ - < ⍵ - < ⍶ - < ⍷ - < ⍸ - < ⍹ - < ⍺ - < ⍻ - < ⍼ - < ⍽ - < ⍾ - < ⍿ - < ⎀ - < ⎁ - < ⎂ - < ⎃ - < ⎄ - < ⎅ - < ⎆ - < ⎇ - < ⎈ - < ⎉ - < ⎊ - < ⎋ - < ⎌ - < ⎍ - < ⎎ - < ⎏ - < ⎐ - < ⎑ - < ⎒ - < ⎓ - < ⎔ - < ⎕ - < ⎖ - < ⎗ - < ⎘ - < ⎙ - < ⎚ - < ⎛ - < ⎜ - < ⎝ - < ⎞ - < ⎟ - < ⎠ - < ⎡ - < ⎢ - < ⎣ - < ⎤ - < ⎥ - < ⎦ - < ⎧ - < ⎨ - < ⎩ - < ⎪ - < ⎫ - < ⎬ - < ⎭ - < ⎮ - < ⎯ - < ⎰ - < ⎱ - < ⎲ - < ⎳ - < ⎴ - < ⎵ - < ⎶ - < ⎷ - < ⎸ - < ⎹ - < ⎺ - < ⎻ - < ⎼ - < ⎽ - < ⎾ - < ⎿ - < ⏀ - < ⏁ - < ⏂ - < ⏃ - < ⏄ - < ⏅ - < ⏆ - < ⏇ - < ⏈ - < ⏉ - < ⏊ - < ⏋ - < ⏌ - < ⏍ - < ⏎ - < ⏏ - < ⏐ - < ␀ - < ␁ - < ␂ - < ␃ - < ␄ - < ␅ - < ␆ - < ␇ - < ␈ - < ␉ - < ␊ - < ␋ - < ␌ - < ␍ - < ␎ - < ␏ - < ␐ - < ␑ - < ␒ - < ␓ - < ␔ - < ␕ - < ␖ - < ␗ - < ␘ - < ␙ - < ␚ - < ␛ - < ␜ - < ␝ - < ␞ - < ␟ - < ␠ - < ␡ - < ␢ - < ␣ - < ␤ - < ␥ - < ␦ - < ⑀ - < ⑁ - < ⑂ - < ⑃ - < ⑄ - < ⑅ - < ⑆ - < ⑇ - < ⑈ - < ⑉ - < ⑊ - < ─ - < ━ - < │ - <<< │ - < ┃ - < ┄ - < ┅ - < ┆ - < ┇ - < ┈ - < ┉ - < ┊ - < ┋ - < ┌ - < ┍ - < ┎ - < ┏ - < ┐ - < ┑ - < ┒ - < ┓ - < └ - < ┕ - < ┖ - < ┗ - < ┘ - < ┙ - < ┚ - < ┛ - < ├ - < ┝ - < ┞ - < ┟ - < ┠ - < ┡ - < ┢ - < ┣ - < ┤ - < ┥ - < ┦ - < ┧ - < ┨ - < ┩ - < ┪ - < ┫ - < ┬ - < ┭ - < ┮ - < ┯ - < ┰ - < ┱ - < ┲ - < ┳ - < ┴ - < ┵ - < ┶ - < ┷ - < ┸ - < ┹ - < ┺ - < ┻ - < ┼ - < ┽ - < ┾ - < ┿ - < ╀ - < ╁ - < ╂ - < ╃ - < ╄ - < ╅ - < ╆ - < ╇ - < ╈ - < ╉ - < ╊ - < ╋ - < ╌ - < ╍ - < ╎ - < ╏ - < ═ - < ║ - < ╒ - < ╓ - < ╔ - < ╕ - < ╖ - < ╗ - < ╘ - < ╙ - < ╚ - < ╛ - < ╜ - < ╝ - < ╞ - < ╟ - < ╠ - < ╡ - < ╢ - < ╣ - < ╤ - < ╥ - < ╦ - < ╧ - < ╨ - < ╩ - < ╪ - < ╫ - < ╬ - < ╭ - < ╮ - < ╯ - < ╰ - < ╱ - < ╲ - < ╳ - < ╴ - < ╵ - < ╶ - < ╷ - < ╸ - < ╹ - < ╺ - < ╻ - < ╼ - < ╽ - < ╾ - < ╿ - < ▀ - < ▁ - < ▂ - < ▃ - < ▄ - < ▅ - < ▆ - < ▇ - < █ - < ▉ - < ▊ - < ▋ - < ▌ - < ▍ - < ▎ - < ▏ - < ▐ - < ░ - < ▒ - < ▓ - < ▔ - < ▕ - < ▖ - < ▗ - < ▘ - < ▙ - < ▚ - < ▛ - < ▜ - < ▝ - < ▞ - < ▟ - < ■ - <<< ■ - < □ - < ▢ - < ▣ - < ▤ - < ▥ - < ▦ - < ▧ - < ▨ - < ▩ - < ▪ - < ▫ - < ▬ - < ▭ - < ▮ - < ▯ - < ▰ - < ▱ - < ▲ - < △ - < ▴ - < ▵ - < ▶ - < ▷ - < ▸ - < ▹ - < ► - < ▻ - < ▼ - < ▽ - < ▾ - < ▿ - < ◀ - < ◁ - < ◂ - < ◃ - < ◄ - < ◅ - < ◆ - < ◇ - < ◈ - < ◉ - < ◊ - < ○ - <<< ○ - < ◌ - < ◍ - < ◎ - < ● - < ◐ - < ◑ - < ◒ - < ◓ - < ◔ - < ◕ - < ◖ - < ◗ - < ◘ - < ◙ - < ◚ - < ◛ - < ◜ - < ◝ - < ◞ - < ◟ - < ◠ - < ◡ - < ◢ - < ◣ - < ◤ - < ◥ - < ◦ - < ◧ - < ◨ - < ◩ - < ◪ - < ◫ - < ◬ - < ◭ - < ◮ - < ◯ - < ◰ - < ◱ - < ◲ - < ◳ - < ◴ - < ◵ - < ◶ - < ◷ - < ◸ - < ◹ - < ◺ - < ◻ - < ◼ - < ◽ - < ◾ - < ◿ - < ☀ - < ☁ - < ☂ - < ☃ - < ☄ - < ★ - < ☆ - < ☇ - < ☈ - < ☉ - < ☊ - < ☋ - < ☌ - < ☍ - < ☎ - < ☏ - < ☐ - < ☑ - < ☒ - < ☓ - < ☔ - < ☕ - < ☖ - < ☗ - < ☙ - < ☚ - < ☛ - < ☜ - < ☝ - < ☞ - < ☟ - < ☠ - < ☡ - < ☢ - < ☣ - < ☤ - < ☥ - < ☦ - < ☧ - < ☨ - < ☩ - < ☪ - < ☫ - < ☬ - < ☭ - < ☮ - < ☯ - < ☸ - < ☹ - < ☺ - < ☻ - < ☼ - < ☽ - < ☾ - < ☿ - < ♀ - < ♁ - < ♂ - < ♃ - < ♄ - < ♅ - < ♆ - < ♇ - < ♈ - < ♉ - < ♊ - < ♋ - < ♌ - < ♍ - < ♎ - < ♏ - < ♐ - < ♑ - < ♒ - < ♓ - < ♔ - < ♕ - < ♖ - < ♗ - < ♘ - < ♙ - < ♚ - < ♛ - < ♜ - < ♝ - < ♞ - < ♟ - < ♠ - < ♡ - < ♢ - < ♣ - < ♤ - < ♥ - < ♦ - < ♧ - < ♨ - < ♩ - < ♪ - < ♫ - < ♬ - < ♰ - < ♱ - < ♲ - < ♳ - < ♴ - < ♵ - < ♶ - < ♷ - < ♸ - < ♹ - < ♺ - < ♻ - < ♼ - < ♽ - < ⚀ - < ⚁ - < ⚂ - < ⚃ - < ⚄ - < ⚅ - < ⚆ - < ⚇ - < ⚈ - < ⚉ - < ⚐ - < ⚑ - < ⚠ - < ⚡ - < ✁ - < ✂ - < ✃ - < ✄ - < ✆ - < ✇ - < ✈ - < ✉ - < ✌ - < ✍ - < ✎ - < ✏ - < ✐ - < ✑ - < ✒ - < ✓ - < ✔ - < ✕ - < ✖ - < ✗ - < ✘ - < ✙ - < ✚ - < ✛ - < ✜ - < ✝ - < ✞ - < ✟ - < ✠ - < ✡ - < ✢ - < ✣ - < ✤ - < ✥ - < ✦ - < ✧ - < ✩ - < ✪ - < ✫ - < ✬ - < ✭ - < ✮ - < ✯ - < ✰ - < ✱ - < ✲ - < ✳ - < ✴ - < ✵ - < ✶ - < ✷ - < ✸ - < ✹ - < ✺ - < ✻ - < ✼ - < ✽ - < ✾ - < ✿ - < ❀ - < ❁ - < ❂ - < ❃ - < ❄ - < ❅ - < ❆ - < ❇ - < ❈ - < ❉ - < ❊ - < ❋ - < ❍ - < ❏ - < ❐ - < ❑ - < ❒ - < ❖ - < ❘ - < ❙ - < ❚ - < ❛ - < ❜ - < ❝ - < ❞ - < ❡ - < ❢ - < ❣ - < ❤ - < ❥ - < ❦ - < ❧ - < ❨ - < ❩ - < ❪ - < ❫ - < ❬ - < ❭ - < ❮ - < ❯ - < ❰ - < ❱ - < ❲ - < ❳ - < ❴ - < ❵ - < ➔ - < ➘ - < ➙ - < ➚ - < ➛ - < ➜ - < ➝ - < ➞ - < ➟ - < ➠ - < ➡ - < ➢ - < ➣ - < ➤ - < ➥ - < ➦ - < ➧ - < ➨ - < ➩ - < ➪ - < ➫ - < ➬ - < ➭ - < ➮ - < ➯ - < ➱ - < ➲ - < ➳ - < ➴ - < ➵ - < ➶ - < ➷ - < ➸ - < ➹ - < ➺ - < ➻ - < ➼ - < ➽ - < ➾ - < ⟐ - < ⟑ - < ⟒ - < ⟓ - < ⟔ - < ⟕ - < ⟖ - < ⟗ - < ⟘ - < ⟙ - < ⟚ - < ⟛ - < ⟜ - < ⟝ - < ⟞ - < ⟟ - < ⟠ - < ⟡ - < ⟢ - < ⟣ - < ⟤ - < ⟥ - < ⟦ - < ⟧ - < ⟨ - < ⟩ - < ⟪ - < ⟫ - < ⟰ - < ⟱ - < ⟲ - < ⟳ - < ⟴ - < ⟵ - < ⟶ - < ⟷ - < ⟸ - < ⟹ - < ⟺ - < ⟻ - < ⟼ - < ⟽ - < ⟾ - < ⟿ - < ⤀ - < ⤁ - < ⤂ - < ⤃ - < ⤄ - < ⤅ - < ⤆ - < ⤇ - < ⤈ - < ⤉ - < ⤊ - < ⤋ - < ⤌ - < ⤍ - < ⤎ - < ⤏ - < ⤐ - < ⤑ - < ⤒ - < ⤓ - < ⤔ - < ⤕ - < ⤖ - < ⤗ - < ⤘ - < ⤙ - < ⤚ - < ⤛ - < ⤜ - < ⤝ - < ⤞ - < ⤟ - < ⤠ - < ⤡ - < ⤢ - < ⤣ - < ⤤ - < ⤥ - < ⤦ - < ⤧ - < ⤨ - < ⤩ - < ⤪ - < ⤫ - < ⤬ - < ⤭ - < ⤮ - < ⤯ - < ⤰ - < ⤱ - < ⤲ - < ⤳ - < ⤴ - < ⤵ - < ⤶ - < ⤷ - < ⤸ - < ⤹ - < ⤺ - < ⤻ - < ⤼ - < ⤽ - < ⤾ - < ⤿ - < ⥀ - < ⥁ - < ⥂ - < ⥃ - < ⥄ - < ⥅ - < ⥆ - < ⥇ - < ⥈ - < ⥉ - < ⥊ - < ⥋ - < ⥌ - < ⥍ - < ⥎ - < ⥏ - < ⥐ - < ⥑ - < ⥒ - < ⥓ - < ⥔ - < ⥕ - < ⥖ - < ⥗ - < ⥘ - < ⥙ - < ⥚ - < ⥛ - < ⥜ - < ⥝ - < ⥞ - < ⥟ - < ⥠ - < ⥡ - < ⥢ - < ⥣ - < ⥤ - < ⥥ - < ⥦ - < ⥧ - < ⥨ - < ⥩ - < ⥪ - < ⥫ - < ⥬ - < ⥭ - < ⥮ - < ⥯ - < ⥰ - < ⥱ - < ⥲ - < ⥳ - < ⥴ - < ⥵ - < ⥶ - < ⥷ - < ⥸ - < ⥹ - < ⥺ - < ⥻ - < ⥼ - < ⥽ - < ⥾ - < ⥿ - < ⦀ - < ⦁ - < ⦂ - < ⦙ - < ⦚ - < ⦛ - < ⦜ - < ⦝ - < ⦞ - < ⦟ - < ⦠ - < ⦡ - < ⦢ - < ⦣ - < ⦤ - < ⦥ - < ⦦ - < ⦧ - < ⦨ - < ⦩ - < ⦪ - < ⦫ - < ⦬ - < ⦭ - < ⦮ - < ⦯ - < ⦰ - < ⦱ - < ⦲ - < ⦳ - < ⦴ - < ⦵ - < ⦶ - < ⦷ - < ⦸ - < ⦹ - < ⦺ - < ⦻ - < ⦼ - < ⦽ - < ⦾ - < ⦿ - < ⧀ - < ⧁ - < ⧂ - < ⧃ - < ⧄ - < ⧅ - < ⧆ - < ⧇ - < ⧈ - < ⧉ - < ⧊ - < ⧋ - < ⧌ - < ⧍ - < ⧎ - < ⧏ - < ⧐ - < ⧑ - < ⧒ - < ⧓ - < ⧔ - < ⧕ - < ⧖ - < ⧗ - < ⧘ - < ⧙ - < ⧚ - < ⧛ - < ⧜ - < ⧝ - < ⧞ - < ⧟ - < ⧠ - < ⧡ - < ⧢ - < ⧣ - < ⧤ - < ⧥ - < ⧦ - < ⧧ - < ⧨ - < ⧩ - < ⧪ - < ⧫ - < ⧬ - < ⧭ - < ⧮ - < ⧯ - < ⧰ - < ⧱ - < ⧲ - < ⧳ - < ⧴ - < ⧵ - < ⧶ - < ⧷ - < ⧸ - < ⧹ - < ⧺ - < ⧻ - < ⧾ - < ⧿ - < ⨀ - < ⨁ - < ⨂ - < ⨃ - < ⨄ - < ⨅ - < ⨆ - < ⨇ - < ⨈ - < ⨉ - < ⨊ - < ⨋ - < ⨍ - < ⨎ - < ⨏ - < ⨐ - < ⨑ - < ⨒ - < ⨓ - < ⨔ - < ⨕ - < ⨖ - < ⨗ - < ⨘ - < ⨙ - < ⨚ - < ⨛ - < ⨜ - < ⨝ - < ⨞ - < ⨟ - < ⨠ - < ⨡ - < ⨢ - < ⨣ - < ⨤ - < ⨥ - < ⨦ - < ⨧ - < ⨨ - < ⨩ - < ⨪ - < ⨫ - < ⨬ - < ⨭ - < ⨮ - < ⨯ - < ⨰ - < ⨱ - < ⨲ - < ⨳ - < ⨴ - < ⨵ - < ⨶ - < ⨷ - < ⨸ - < ⨹ - < ⨺ - < ⨻ - < ⨼ - < ⨽ - < ⨾ - < ⨿ - < ⩀ - < ⩁ - < ⩂ - < ⩃ - < ⩄ - < ⩅ - < ⩆ - < ⩇ - < ⩈ - < ⩉ - < ⩊ - < ⩋ - < ⩌ - < ⩍ - < ⩎ - < ⩏ - < ⩐ - < ⩑ - < ⩒ - < ⩓ - < ⩔ - < ⩕ - < ⩖ - < ⩗ - < ⩘ - < ⩙ - < ⩚ - < ⩛ - < ⩜ - < ⩝ - < ⩞ - < ⩟ - < ⩠ - < ⩡ - < ⩢ - < ⩣ - < ⩤ - < ⩥ - < ⩦ - < ⩧ - < ⩨ - < ⩩ - < ⩪ - < ⩫ - < ⩬ - < ⩭ - < ⩮ - < ⩯ - < ⩰ - < ⩱ - < ⩲ - < ⩳ - < ⩷ - < ⩸ - < ⩹ - < ⩺ - < ⩻ - < ⩼ - < ⩽ - < ⩾ - < ⩿ - < ⪀ - < ⪁ - < ⪂ - < ⪃ - < ⪄ - < ⪅ - < ⪆ - < ⪇ - < ⪈ - < ⪉ - < ⪊ - < ⪋ - < ⪌ - < ⪍ - < ⪎ - < ⪏ - < ⪐ - < ⪑ - < ⪒ - < ⪓ - < ⪔ - < ⪕ - < ⪖ - < ⪗ - < ⪘ - < ⪙ - < ⪚ - < ⪛ - < ⪜ - < ⪝ - < ⪞ - < ⪟ - < ⪠ - < ⪡ - < ⪢ - < ⪣ - < ⪤ - < ⪥ - < ⪦ - < ⪧ - < ⪨ - < ⪩ - < ⪪ - < ⪫ - < ⪬ - < ⪭ - < ⪮ - < ⪯ - < ⪰ - < ⪱ - < ⪲ - < ⪳ - < ⪴ - < ⪵ - < ⪶ - < ⪷ - < ⪸ - < ⪹ - < ⪺ - < ⪻ - < ⪼ - < ⪽ - < ⪾ - < ⪿ - < ⫀ - < ⫁ - < ⫂ - < ⫃ - < ⫄ - < ⫅ - < ⫆ - < ⫇ - < ⫈ - < ⫉ - < ⫊ - < ⫋ - < ⫌ - < ⫍ - < ⫎ - < ⫏ - < ⫐ - < ⫑ - < ⫒ - < ⫓ - < ⫔ - < ⫕ - < ⫖ - < ⫗ - < ⫘ - < ⫙ - < ⫚ - < ⫛ - < ⫝ - < ⫞ - < ⫟ - < ⫠ - < ⫡ - < ⫢ - < ⫣ - < ⫤ - < ⫥ - < ⫦ - < ⫧ - < ⫨ - < ⫩ - < ⫪ - < ⫫ - < ⫬ - < ⫭ - < ⫮ - < ⫯ - < ⫰ - < ⫱ - < ⫲ - < ⫳ - < ⫴ - < ⫵ - < ⫶ - < ⫷ - < ⫸ - < ⫹ - < ⫺ - < ⫻ - < ⫼ - < ⫽ - < ⫾ - < ⫿ - < ⬀ - < ⬁ - < ⬂ - < ⬃ - < ⬄ - < ⬅ - < ⬆ - < ⬇ - < ⬈ - < ⬉ - < ⬊ - < ⬋ - < ⬌ - < ⬍ - < ⠀ - < ⠁ - < ⠂ - < ⠃ - < ⠄ - < ⠅ - < ⠆ - < ⠇ - < ⠈ - < ⠉ - < ⠊ - < ⠋ - < ⠌ - < ⠍ - < ⠎ - < ⠏ - < ⠐ - < ⠑ - < ⠒ - < ⠓ - < ⠔ - < ⠕ - < ⠖ - < ⠗ - < ⠘ - < ⠙ - < ⠚ - < ⠛ - < ⠜ - < ⠝ - < ⠞ - < ⠟ - < ⠠ - < ⠡ - < ⠢ - < ⠣ - < ⠤ - < ⠥ - < ⠦ - < ⠧ - < ⠨ - < ⠩ - < ⠪ - < ⠫ - < ⠬ - < ⠭ - < ⠮ - < ⠯ - < ⠰ - < ⠱ - < ⠲ - < ⠳ - < ⠴ - < ⠵ - < ⠶ - < ⠷ - < ⠸ - < ⠹ - < ⠺ - < ⠻ - < ⠼ - < ⠽ - < ⠾ - < ⠿ - < ⡀ - < ⡁ - < ⡂ - < ⡃ - < ⡄ - < ⡅ - < ⡆ - < ⡇ - < ⡈ - < ⡉ - < ⡊ - < ⡋ - < ⡌ - < ⡍ - < ⡎ - < ⡏ - < ⡐ - < ⡑ - < ⡒ - < ⡓ - < ⡔ - < ⡕ - < ⡖ - < ⡗ - < ⡘ - < ⡙ - < ⡚ - < ⡛ - < ⡜ - < ⡝ - < ⡞ - < ⡟ - < ⡠ - < ⡡ - < ⡢ - < ⡣ - < ⡤ - < ⡥ - < ⡦ - < ⡧ - < ⡨ - < ⡩ - < ⡪ - < ⡫ - < ⡬ - < ⡭ - < ⡮ - < ⡯ - < ⡰ - < ⡱ - < ⡲ - < ⡳ - < ⡴ - < ⡵ - < ⡶ - < ⡷ - < ⡸ - < ⡹ - < ⡺ - < ⡻ - < ⡼ - < ⡽ - < ⡾ - < ⡿ - < ⢀ - < ⢁ - < ⢂ - < ⢃ - < ⢄ - < ⢅ - < ⢆ - < ⢇ - < ⢈ - < ⢉ - < ⢊ - < ⢋ - < ⢌ - < ⢍ - < ⢎ - < ⢏ - < ⢐ - < ⢑ - < ⢒ - < ⢓ - < ⢔ - < ⢕ - < ⢖ - < ⢗ - < ⢘ - < ⢙ - < ⢚ - < ⢛ - < ⢜ - < ⢝ - < ⢞ - < ⢟ - < ⢠ - < ⢡ - < ⢢ - < ⢣ - < ⢤ - < ⢥ - < ⢦ - < ⢧ - < ⢨ - < ⢩ - < ⢪ - < ⢫ - < ⢬ - < ⢭ - < ⢮ - < ⢯ - < ⢰ - < ⢱ - < ⢲ - < ⢳ - < ⢴ - < ⢵ - < ⢶ - < ⢷ - < ⢸ - < ⢹ - < ⢺ - < ⢻ - < ⢼ - < ⢽ - < ⢾ - < ⢿ - < ⣀ - < ⣁ - < ⣂ - < ⣃ - < ⣄ - < ⣅ - < ⣆ - < ⣇ - < ⣈ - < ⣉ - < ⣊ - < ⣋ - < ⣌ - < ⣍ - < ⣎ - < ⣏ - < ⣐ - < ⣑ - < ⣒ - < ⣓ - < ⣔ - < ⣕ - < ⣖ - < ⣗ - < ⣘ - < ⣙ - < ⣚ - < ⣛ - < ⣜ - < ⣝ - < ⣞ - < ⣟ - < ⣠ - < ⣡ - < ⣢ - < ⣣ - < ⣤ - < ⣥ - < ⣦ - < ⣧ - < ⣨ - < ⣩ - < ⣪ - < ⣫ - < ⣬ - < ⣭ - < ⣮ - < ⣯ - < ⣰ - < ⣱ - < ⣲ - < ⣳ - < ⣴ - < ⣵ - < ⣶ - < ⣷ - < ⣸ - < ⣹ - < ⣺ - < ⣻ - < ⣼ - < ⣽ - < ⣾ - < ⣿ - < ⚊ - < ⚋ - < ⚌ - < ⚍ - < ⚎ - < ⚏ - < ☰ - < ☱ - < ☲ - < ☳ - < ☴ - < ☵ - < ☶ - < ☷ - < ䷀ - < ䷁ - < ䷂ - < ䷃ - < ䷄ - < ䷅ - < ䷆ - < ䷇ - < ䷈ - < ䷉ - < ䷊ - < ䷋ - < ䷌ - < ䷍ - < ䷎ - < ䷏ - < ䷐ - < ䷑ - < ䷒ - < ䷓ - < ䷔ - < ䷕ - < ䷖ - < ䷗ - < ䷘ - < ䷙ - < ䷚ - < ䷛ - < ䷜ - < ䷝ - < ䷞ - < ䷟ - < ䷠ - < ䷡ - < ䷢ - < ䷣ - < ䷤ - < ䷥ - < ䷦ - < ䷧ - < ䷨ - < ䷩ - < ䷪ - < ䷫ - < ䷬ - < ䷭ - < ䷮ - < ䷯ - < ䷰ - < ䷱ - < ䷲ - < ䷳ - < ䷴ - < ䷵ - < ䷶ - < ䷷ - < ䷸ - < ䷹ - < ䷺ - < ䷻ - < ䷼ - < ䷽ - < ䷾ - < ䷿ - < 𝌀 - < 𝌁 - < 𝌂 - < 𝌃 - < 𝌄 - < 𝌅 - < 𝌆 - < 𝌇 - < 𝌈 - < 𝌉 - < 𝌊 - < 𝌋 - < 𝌌 - < 𝌍 - < 𝌎 - < 𝌏 - < 𝌐 - < 𝌑 - < 𝌒 - < 𝌓 - < 𝌔 - < 𝌕 - < 𝌖 - < 𝌗 - < 𝌘 - < 𝌙 - < 𝌚 - < 𝌛 - < 𝌜 - < 𝌝 - < 𝌞 - < 𝌟 - < 𝌠 - < 𝌡 - < 𝌢 - < 𝌣 - < 𝌤 - < 𝌥 - < 𝌦 - < 𝌧 - < 𝌨 - < 𝌩 - < 𝌪 - < 𝌫 - < 𝌬 - < 𝌭 - < 𝌮 - < 𝌯 - < 𝌰 - < 𝌱 - < 𝌲 - < 𝌳 - < 𝌴 - < 𝌵 - < 𝌶 - < 𝌷 - < 𝌸 - < 𝌹 - < 𝌺 - < 𝌻 - < 𝌼 - < 𝌽 - < 𝌾 - < 𝌿 - < 𝍀 - < 𝍁 - < 𝍂 - < 𝍃 - < 𝍄 - < 𝍅 - < 𝍆 - < 𝍇 - < 𝍈 - < 𝍉 - < 𝍊 - < 𝍋 - < 𝍌 - < 𝍍 - < 𝍎 - < 𝍏 - < 𝍐 - < 𝍑 - < 𝍒 - < 𝍓 - < 𝍔 - < 𝍕 - < 𝍖 - < ꒐ - < ꒑ - < ꒒ - < ꒓ - < ꒔ - < ꒕ - < ꒖ - < ꒗ - < ꒘ - < ꒙ - < ꒚ - < ꒛ - < ꒜ - < ꒝ - < ꒞ - < ꒟ - < ꒠ - < ꒡ - < ꒢ - < ꒣ - < ꒤ - < ꒥ - < ꒦ - < ꒧ - < ꒨ - < ꒩ - < ꒪ - < ꒫ - < ꒬ - < ꒭ - < ꒮ - < ꒯ - < ꒰ - < ꒱ - < ꒲ - < ꒳ - < ꒴ - < ꒵ - < ꒶ - < ꒷ - < ꒸ - < ꒹ - < ꒺ - < ꒻ - < ꒼ - < ꒽ - < ꒾ - < ꒿ - < ꓀ - < ꓁ - < ꓂ - < ꓃ - < ꓄ - < ꓅ - < ꓆ - < 𐄷 - < 𐄸 - < 𐄹 - < 𐄺 - < 𐄻 - < 𐄼 - < 𐄽 - < 𐄾 - < 𐄿 - < 𝀀 - < 𝀁 - < 𝀂 - < 𝀃 - < 𝀄 - < 𝀅 - < 𝀆 - < 𝀇 - < 𝀈 - < 𝀉 - < 𝀊 - < 𝀋 - < 𝀌 - < 𝀍 - < 𝀎 - < 𝀏 - < 𝀐 - < 𝀑 - < 𝀒 - < 𝀓 - < 𝀔 - < 𝀕 - < 𝀖 - < 𝀗 - < 𝀘 - < 𝀙 - < 𝀚 - < 𝀛 - < 𝀜 - < 𝀝 - < 𝀞 - < 𝀟 - < 𝀠 - < 𝀡 - < 𝀢 - < 𝀣 - < 𝀤 - < 𝀥 - < 𝀦 - < 𝀧 - < 𝀨 - < 𝀩 - < 𝀪 - < 𝀫 - < 𝀬 - < 𝀭 - < 𝀮 - < 𝀯 - < 𝀰 - < 𝀱 - < 𝀲 - < 𝀳 - < 𝀴 - < 𝀵 - < 𝀶 - < 𝀷 - < 𝀸 - < 𝀹 - < 𝀺 - < 𝀻 - < 𝀼 - < 𝀽 - < 𝀾 - < 𝀿 - < 𝁀 - < 𝁁 - < 𝁂 - < 𝁃 - < 𝁄 - < 𝁅 - < 𝁆 - < 𝁇 - < 𝁈 - < 𝁉 - < 𝁊 - < 𝁋 - < 𝁌 - < 𝁍 - < 𝁎 - < 𝁏 - < 𝁐 - < 𝁑 - < 𝁒 - < 𝁓 - < 𝁔 - < 𝁕 - < 𝁖 - < 𝁗 - < 𝁘 - < 𝁙 - < 𝁚 - < 𝁛 - < 𝁜 - < 𝁝 - < 𝁞 - < 𝁟 - < 𝁠 - < 𝁡 - < 𝁢 - < 𝁣 - < 𝁤 - < 𝁥 - < 𝁦 - < 𝁧 - < 𝁨 - < 𝁩 - < 𝁪 - < 𝁫 - < 𝁬 - < 𝁭 - < 𝁮 - < 𝁯 - < 𝁰 - < 𝁱 - < 𝁲 - < 𝁳 - < 𝁴 - < 𝁵 - < 𝁶 - < 𝁷 - < 𝁸 - < 𝁹 - < 𝁺 - < 𝁻 - < 𝁼 - < 𝁽 - < 𝁾 - < 𝁿 - < 𝂀 - < 𝂁 - < 𝂂 - < 𝂃 - < 𝂄 - < 𝂅 - < 𝂆 - < 𝂇 - < 𝂈 - < 𝂉 - < 𝂊 - < 𝂋 - < 𝂌 - < 𝂍 - < 𝂎 - < 𝂏 - < 𝂐 - < 𝂑 - < 𝂒 - < 𝂓 - < 𝂔 - < 𝂕 - < 𝂖 - < 𝂗 - < 𝂘 - < 𝂙 - < 𝂚 - < 𝂛 - < 𝂜 - < 𝂝 - < 𝂞 - < 𝂟 - < 𝂠 - < 𝂡 - < 𝂢 - < 𝂣 - < 𝂤 - < 𝂥 - < 𝂦 - < 𝂧 - < 𝂨 - < 𝂩 - < 𝂪 - < 𝂫 - < 𝂬 - < 𝂭 - < 𝂮 - < 𝂯 - < 𝂰 - < 𝂱 - < 𝂲 - < 𝂳 - < 𝂴 - < 𝂵 - < 𝂶 - < 𝂷 - < 𝂸 - < 𝂹 - < 𝂺 - < 𝂻 - < 𝂼 - < 𝂽 - < 𝂾 - < 𝂿 - < 𝃀 - < 𝃁 - < 𝃂 - < 𝃃 - < 𝃄 - < 𝃅 - < 𝃆 - < 𝃇 - < 𝃈 - < 𝃉 - < 𝃊 - < 𝃋 - < 𝃌 - < 𝃍 - < 𝃎 - < 𝃏 - < 𝃐 - < 𝃑 - < 𝃒 - < 𝃓 - < 𝃔 - < 𝃕 - < 𝃖 - < 𝃗 - < 𝃘 - < 𝃙 - < 𝃚 - < 𝃛 - < 𝃜 - < 𝃝 - < 𝃞 - < 𝃟 - < 𝃠 - < 𝃡 - < 𝃢 - < 𝃣 - < 𝃤 - < 𝃥 - < 𝃦 - < 𝃧 - < 𝃨 - < 𝃩 - < 𝃪 - < 𝃫 - < 𝃬 - < 𝃭 - < 𝃮 - < 𝃯 - < 𝃰 - < 𝃱 - < 𝃲 - < 𝃳 - < 𝃴 - < 𝃵 - < 𝄀 - < 𝄁 - < 𝄂 - < 𝄃 - < 𝄄 - < 𝄅 - < 𝄆 - < 𝄇 - < 𝄈 - < 𝄉 - < 𝄊 - < 𝄋 - < 𝄌 - < 𝄍 - < 𝄎 - < 𝄏 - < 𝄐 - < 𝄑 - < 𝄒 - < 𝄓 - < 𝄔 - < 𝄕 - < 𝄖 - < 𝄗 - < 𝄘 - < 𝄙 - < 𝄚 - < 𝄛 - < 𝄜 - < 𝄝 - < 𝄞 - < 𝄟 - < 𝄠 - < 𝄡 - < 𝄢 - < 𝄣 - < 𝄤 - < 𝄥 - < 𝄦 - < ♭ - < ♮ - < ♯ - < 𝄪 - < 𝄫 - < 𝄬 - < 𝄭 - < 𝄮 - < 𝄯 - < 𝄰 - < 𝄱 - < 𝄲 - < 𝄳 - < 𝄴 - < 𝄵 - < 𝄶 - < 𝄷 - < 𝄸 - < 𝄹 - < 𝄺 - < 𝄻 - < 𝄼 - < 𝄽 - < 𝄾 - < 𝄿 - < 𝅀 - < 𝅁 - < 𝅂 - < 𝅃 - < 𝅄 - < 𝅅 - < 𝅆 - < 𝅇 - < 𝅈 - < 𝅉 - < 𝅊 - < 𝅋 - < 𝅌 - < 𝅍 - < 𝅎 - < 𝅏 - < 𝅐 - < 𝅑 - < 𝅒 - < 𝅓 - < 𝅔 - < 𝅕 - < 𝅖 - < 𝅗 - = 𝅗𝅥 - < 𝅘 - = 𝅘𝅥 - = 𝅘𝅥𝅮 - = 𝅘𝅥𝅯 - = 𝅘𝅥𝅰 - = 𝅘𝅥𝅱 - = 𝅘𝅥𝅲 - < 𝅙 - < 𝅚 - < 𝅛 - < 𝅜 - < 𝅝 - < 𝅪 - < 𝅫 - < 𝅬 - < 𝆃 - < 𝆄 - < 𝆌 - < 𝆍 - < 𝆎 - < 𝆏 - < 𝆐 - < 𝆑 - < 𝆒 - < 𝆓 - < 𝆔 - < 𝆕 - < 𝆖 - < 𝆗 - < 𝆘 - < 𝆙 - < 𝆚 - < 𝆛 - < 𝆜 - < 𝆝 - < 𝆞 - < 𝆟 - < 𝆠 - < 𝆡 - < 𝆢 - < 𝆣 - < 𝆤 - < 𝆥 - < 𝆦 - < 𝆧 - < 𝆨 - < 𝆩 - < 𝆮 - < 𝆯 - < 𝆰 - < 𝆱 - < 𝆲 - < 𝆳 - < 𝆴 - < 𝆵 - < 𝆶 - < 𝆷 - < 𝆸 - < 𝆹 - = 𝆹𝅥 - = 𝆹𝅥𝅮 - = 𝆹𝅥𝅯 - < 𝆺 - = 𝆺𝅥 - = 𝆺𝅥𝅮 - = 𝆺𝅥𝅯 - < 𝇁 - < 𝇂 - < 𝇃 - < 𝇄 - < 𝇅 - < 𝇆 - < 𝇇 - < 𝇈 - < 𝇉 - < 𝇊 - < 𝇋 - < 𝇌 - < 𝇍 - < 𝇎 - < 𝇏 - < 𝇐 - < 𝇑 - < 𝇒 - < 𝇓 - < 𝇔 - < 𝇕 - < 𝇖 - < 𝇗 - < 𝇘 - < 𝇙 - < 𝇚 - < 𝇛 - < 𝇜 - < 𝇝 - < ⿰ - < ⿱ - < ⿲ - < ⿳ - < ⿴ - < ⿵ - < ⿶ - < ⿷ - < ⿸ - < ⿹ - < ⿺ - < ⿻ - < 〄 - < 〒 - <<< 〶 - < 〓 - < 〠 - < 〷 - < 〾 - < 〿 - < ㆐ - < ㆑ - < ㉿ - <  - < � - < ৸ - < ৹ - < ௰ - < ௱ - < ௲ - < ፲ - < ፳ - < ፴ - < ፵ - < ፶ - < ፷ - < ፸ - < ፹ - < ፺ - < ፻ - < ፼ - < ↀ - < ↁ - < ↂ - < Ↄ - < 𐌢 - < 𐌣 - < 𐄐 - < 𐄑 - < 𐄒 - < 𐄓 - < 𐄔 - < 𐄕 - < 𐄖 - < 𐄗 - < 𐄘 - < 𐄙 - < 𐄚 - < 𐄛 - < 𐄜 - < 𐄝 - < 𐄞 - < 𐄟 - < 𐄠 - < 𐄡 - < 𐄢 - < 𐄣 - < 𐄤 - < 𐄥 - < 𐄦 - < 𐄧 - < 𐄨 - < 𐄩 - < 𐄪 - < 𐄫 - < 𐄬 - < 𐄭 - < 𐄮 - < 𐄯 - < 𐄰 - < 𐄱 - < 𐄲 - < 𐄳 - < [variable top] - < ː - < ˑ - < ๆ - < ໆ - < 々 - < 〻 - < 〱 - <<< 〲 / ゙ - < 〳 - <<< 〴 / ゙ - < 〵 - < ゝ - < ー - <<< ー - < ヽ - < ¤ - < ¢ - <<< ¢ - < '$' - <<< $ - <<< ﹩ - < £ - <<< £ - < ¥ - <<< ¥ - < ৲ - < ৳ - < ૱ - < ௹ - < ฿ - < ៛ - < ₠ - < ₡ - < ₢ - < ₣ - < ₤ - < ₥ - < ₦ - < ₧ - < ₩ - <<< ₩ - < ₪ - < ₫ - < € - < ₭ - < ₮ - < ₯ - < ₰ - < ₱ - < 0 - <<< 0 - <<< ㍘ / 点 - <<< 𝟎 - = 𝟘 - = 𝟢 - = 𝟬 - = 𝟶 - <<< ⓪ - = ⓿ - <<< ⁰ - <<< ₀ - << ٠ - << ۰ - << 𐒠 - << ० - << ০ - << ੦ - << ૦ - << ୦ - << ౦ - << ೦ - << ൦ - << ᥆ - << ๐ - << ໐ - << ༠ - <<< ༳ - << ၀ - << ០ - << ៰ - << ᠐ - << 〇 - < 1 - <<< 1 - <<< ⒈ / '.' - <<< ⒑ / 0'.' - <<< ㏩ / 0日 - <<< ㋉ / 0月 - <<< ㍢ / 0点 - <<< ⒒ / 1'.' - <<< ㏪ / 1日 - <<< ㋊ / 1月 - <<< ㍣ / 1点 - <<< ⒓ / 2'.' - <<< ㏫ / 2日 - <<< ㋋ / 2月 - <<< ㍤ / 2点 - <<< ⒔ / 3'.' - <<< ㏬ / 3日 - <<< ㍥ / 3点 - <<< ⒕ / 4'.' - <<< ㏭ / 4日 - <<< ㍦ / 4点 - <<< ⒖ / 5'.' - <<< ㏮ / 5日 - <<< ㍧ / 5点 - <<< ⒗ / 6'.' - <<< ㏯ / 6日 - <<< ㍨ / 6点 - <<< ⒘ / 7'.' - <<< ㏰ / 7日 - <<< ㍩ / 7点 - <<< ⒙ / 8'.' - <<< ㏱ / 8日 - <<< ㍪ / 8点 - <<< ⒚ / 9'.' - <<< ㏲ / 9日 - <<< ㍫ / 9点 - <<< ㏠ / 日 - <<< ㋀ / 月 - <<< ㍙ / 点 - <<< 𝟏 - = 𝟙 - = 𝟣 - = 𝟭 - = 𝟷 - <<< ① - = ⓵ - = ❶ - = ➀ - = ➊ - <<< ⑩ / 0 - = ⓾ / 0 - = ❿ / 0 - = ➉ / 0 - = ➓ / 0 - <<< ⑪ / 1 - = ⓫ / 1 - <<< ⑫ / 2 - = ⓬ / 2 - <<< ⑬ / 3 - = ⓭ / 3 - <<< ⑭ / 4 - = ⓮ / 4 - <<< ⑮ / 5 - = ⓯ / 5 - <<< ⑯ / 6 - = ⓰ / 6 - <<< ⑰ / 7 - = ⓱ / 7 - <<< ⑱ / 8 - = ⓲ / 8 - <<< ⑲ / 9 - = ⓳ / 9 - <<< ¹ - <<< ₁ - <<< ⅟ / ⁄ - <<< ½ / ⁄2 - <<< ⅓ / ⁄3 - <<< ¼ / ⁄4 - <<< ⅕ / ⁄5 - <<< ⅙ / ⁄6 - <<< ⅛ / ⁄8 - << ١ - << ۱ - << ፩ - << 𐒡 - << १ - << ১ - << ৴ - << ੧ - << ૧ - << ୧ - << ௧ - << ౧ - << ೧ - << ൧ - << ᥇ - << ๑ - << ໑ - << ༡ - <<< ༪ - << ၁ - << ១ - << ៱ - << ᠑ - << 〡 - << 𐄇 - << 𐌠 - < 2 - <<< 2 - <<< ⒉ / '.' - <<< ⒛ / 0'.' - <<< ㏳ / 0日 - <<< ㍬ / 0点 - <<< ㏴ / 1日 - <<< ㍭ / 1点 - <<< ㏵ / 2日 - <<< ㍮ / 2点 - <<< ㏶ / 3日 - <<< ㍯ / 3点 - <<< ㏷ / 4日 - <<< ㍰ / 4点 - <<< ㏸ / 5日 - <<< ㏹ / 6日 - <<< ㏺ / 7日 - <<< ㏻ / 8日 - <<< ㏼ / 9日 - <<< ㏡ / 日 - <<< ㋁ / 月 - <<< ㍚ / 点 - <<< 𝟐 - = 𝟚 - = 𝟤 - = 𝟮 - = 𝟸 - <<< ② - = ⓶ - = ❷ - = ➁ - = ➋ - <<< ⑳ / 0 - = ⓴ / 0 - <<< ㉑ / 1 - <<< ㉒ / 2 - <<< ㉓ / 3 - <<< ㉔ / 4 - <<< ㉕ / 5 - <<< ㉖ / 6 - <<< ㉗ / 7 - <<< ㉘ / 8 - <<< ㉙ / 9 - <<< ² - <<< ₂ - <<< ⅔ / ⁄3 - <<< ⅖ / ⁄5 - << ٢ - << ۲ - << ፪ - << 𐒢 - << २ - << ২ - << ৵ - << ੨ - << ૨ - << ୨ - << ௨ - << ౨ - << ೨ - << ൨ - << ᥈ - << ๒ - << ໒ - << ༢ - <<< ༫ - << ၂ - << ២ - << ៲ - << ᠒ - << 〢 - << 𐄈 - < 3 - <<< 3 - <<< ⒊ / '.' - <<< ㏽ / 0日 - <<< ㏾ / 1日 - <<< ㏢ / 日 - <<< ㋂ / 月 - <<< ㍛ / 点 - <<< 𝟑 - = 𝟛 - = 𝟥 - = 𝟯 - = 𝟹 - <<< ③ - = ⓷ - = ❸ - = ➂ - = ➌ - <<< ㉚ / 0 - <<< ㉛ / 1 - <<< ㉜ / 2 - <<< ㉝ / 3 - <<< ㉞ / 4 - <<< ㉟ / 5 - <<< ㊱ / 6 - <<< ㊲ / 7 - <<< ㊳ / 8 - <<< ㊴ / 9 - <<< ³ - <<< ₃ - <<< ¾ / ⁄4 - <<< ⅗ / ⁄5 - <<< ⅜ / ⁄8 - << ٣ - << ۳ - << ፫ - << 𐒣 - << ३ - << ৩ - << ৶ - << ੩ - << ૩ - << ୩ - << ௩ - << ౩ - << ೩ - << ൩ - << ᥉ - << ๓ - << ໓ - << ༣ - <<< ༬ - << ၃ - << ៣ - << ៳ - << ᠓ - << 〣 - << 𐄉 - < 4 - <<< 4 - <<< ⒋ / '.' - <<< ㏣ / 日 - <<< ㋃ / 月 - <<< ㍜ / 点 - <<< 𝟒 - = 𝟜 - = 𝟦 - = 𝟰 - = 𝟺 - <<< ④ - = ⓸ - = ❹ - = ➃ - = ➍ - <<< ㊵ / 0 - <<< ㊶ / 1 - <<< ㊷ / 2 - <<< ㊸ / 3 - <<< ㊹ / 4 - <<< ㊺ / 5 - <<< ㊻ / 6 - <<< ㊼ / 7 - <<< ㊽ / 8 - <<< ㊾ / 9 - <<< ⁴ - <<< ₄ - <<< ⅘ / ⁄5 - << ٤ - << ۴ - << ፬ - << 𐒤 - << ४ - << ৪ - << ৷ - << ੪ - << ૪ - << ୪ - << ௪ - << ౪ - << ೪ - << ൪ - << ᥊ - << ๔ - << ໔ - << ༤ - <<< ༭ - << ၄ - << ៤ - << ៴ - << ᠔ - << 〤 - << 𐄊 - < 5 - <<< 5 - <<< ⒌ / '.' - <<< ㏤ / 日 - <<< ㋄ / 月 - <<< ㍝ / 点 - <<< 𝟓 - = 𝟝 - = 𝟧 - = 𝟱 - = 𝟻 - <<< ⑤ - = ⓹ - = ❺ - = ➄ - = ➎ - <<< ㊿ / 0 - <<< ⁵ - <<< ₅ - <<< ⅚ / ⁄6 - <<< ⅝ / ⁄8 - << ٥ - << ۵ - << ፭ - << 𐒥 - << ५ - << ৫ - << ੫ - << ૫ - << ୫ - << ௫ - << ౫ - << ೫ - << ൫ - << ᥋ - << ๕ - << ໕ - << ༥ - <<< ༮ - << ၅ - << ៥ - << ៵ - << ᠕ - << 〥 - << 𐄋 - << 𐌡 - < 6 - <<< 6 - <<< ⒍ / '.' - <<< ㏥ / 日 - <<< ㋅ / 月 - <<< ㍞ / 点 - <<< 𝟔 - = 𝟞 - = 𝟨 - = 𝟲 - = 𝟼 - <<< ⑥ - = ⓺ - = ❻ - = ➅ - = ➏ - <<< ⁶ - <<< ₆ - << ٦ - << ۶ - << ፮ - << 𐒦 - << ६ - << ৬ - << ੬ - << ૬ - << ୬ - << ௬ - << ౬ - << ೬ - << ൬ - << ᥌ - << ๖ - << ໖ - << ༦ - <<< ༯ - << ၆ - << ៦ - << ៶ - << ᠖ - << 〦 - << 𐄌 - < 7 - <<< 7 - <<< ⒎ / '.' - <<< ㏦ / 日 - <<< ㋆ / 月 - <<< ㍟ / 点 - <<< 𝟕 - = 𝟟 - = 𝟩 - = 𝟳 - = 𝟽 - <<< ⑦ - = ⓻ - = ❼ - = ➆ - = ➐ - <<< ⁷ - <<< ₇ - <<< ⅞ / ⁄8 - << ٧ - << ۷ - << ፯ - << 𐒧 - << ७ - << ৭ - << ੭ - << ૭ - << ୭ - << ௭ - << ౭ - << ೭ - << ൭ - << ᥍ - << ๗ - << ໗ - << ༧ - <<< ༰ - << ၇ - << ៧ - << ៷ - << ᠗ - << 〧 - << 𐄍 - < 8 - <<< 8 - <<< ⒏ / '.' - <<< ㏧ / 日 - <<< ㋇ / 月 - <<< ㍠ / 点 - <<< 𝟖 - = 𝟠 - = 𝟪 - = 𝟴 - = 𝟾 - <<< ⑧ - = ⓼ - = ❽ - = ➇ - = ➑ - <<< ⁸ - <<< ₈ - << ٨ - << ۸ - << ፰ - << 𐒨 - << ८ - << ৮ - << ੮ - << ૮ - << ୮ - << ௮ - << ౮ - << ೮ - << ൮ - << ᥎ - << ๘ - << ໘ - << ༨ - <<< ༱ - << ၈ - << ៨ - << ៸ - << ᠘ - << 〨 - << 𐄎 - < 9 - <<< 9 - <<< ⒐ / '.' - <<< ㏨ / 日 - <<< ㋈ / 月 - <<< ㍡ / 点 - <<< 𝟗 - = 𝟡 - = 𝟫 - = 𝟵 - = 𝟿 - <<< ⑨ - = ⓽ - = ❾ - = ➈ - = ➒ - <<< ⁹ - <<< ₉ - << ٩ - << ۹ - << ፱ - << 𐒩 - << ९ - << ৯ - << ੯ - << ૯ - << ୯ - << ௯ - << ౯ - << ೯ - << ൯ - << ᥏ - << ๙ - << ໙ - << ༩ - <<< ༲ - << ၉ - << ៩ - << ៹ - << ᠙ - << 〩 - << 𐄏 - < a - <<< a - <<< ͣ - <<< ℀ / '/'c - <<< ℁ / '/'s - <<< ẚ / ʾ - <<< 𝐚 - = 𝑎 - = 𝒂 - = 𝒶 - = 𝓪 - = 𝔞 - = 𝕒 - = 𝖆 - = 𝖺 - = 𝗮 - = 𝘢 - = 𝙖 - = 𝚊 - <<< ⓐ - <<< A - <<< A - <<< 𝐀 - = 𝐴 - = 𝑨 - = 𝒜 - = 𝓐 - = 𝔄 - = 𝔸 - = 𝕬 - = 𝖠 - = 𝗔 - = 𝘈 - = 𝘼 - = 𝙰 - <<< Ⓐ - <<< ª - = ᴬ - = ᵃ - <<< ㏂ / '.'m'.' - <<< ㏟ / ∕m - <<< ㍳ / U - < ᴀ - < æ - <<< Æ - <<< ᴭ - < ᴁ - < ᴂ - <<< ᵆ - < ɐ - <<< ᵄ - < ɑ - <<< ᵅ - < ɒ - < b - <<< b - <<< 𝐛 - = 𝑏 - = 𝒃 - = 𝒷 - = 𝓫 - = 𝔟 - = 𝕓 - = 𝖇 - = 𝖻 - = 𝗯 - = 𝘣 - = 𝙗 - = 𝚋 - <<< ⓑ - <<< B - <<< B - <<< ℬ - = 𝐁 - = 𝐵 - = 𝑩 - = 𝓑 - = 𝔅 - = 𝔹 - = 𝕭 - = 𝖡 - = 𝗕 - = 𝘉 - = 𝘽 - = 𝙱 - <<< Ⓑ - <<< ᴮ - = ᵇ - <<< ㍴ / ar - <<< ㏃ / q - < ʙ - < ƀ - < ᴯ - < ᴃ - < ɓ - <<< Ɓ - < ƃ - <<< Ƃ - < c - <<< c - <<< ͨ - = ⅽ - <<< ℅ / '/'o - <<< ℆ / '/'u - <<< 𝐜 - = 𝑐 - = 𝒄 - = 𝒸 - = 𝓬 - = 𝔠 - = 𝕔 - = 𝖈 - = 𝖼 - = 𝗰 - = 𝘤 - = 𝙘 - = 𝚌 - <<< ⓒ - <<< C - <<< C - <<< Ⅽ - <<< ℂ - = ℭ - = 𝐂 - = 𝐶 - = 𝑪 - = 𝒞 - = 𝓒 - = 𝕮 - = 𝖢 - = 𝗖 - = 𝘊 - = 𝘾 - = 𝙲 - <<< Ⓒ - <<< ㎈ / al - <<< ㏄ / c - <<< ㏅ / d - <<< ㎝ / m - <<< ㎠ / m2 - <<< ㎤ / m3 - <<< ㏆ / ∕kg - <<< ㏇ / o'.' - < ᴄ - < ƈ - <<< Ƈ - < ɕ - < d - <<< d - <<< ͩ - = ⅾ - <<< dz / z - = ʣ / z - <<< dž / ž - <<< ʥ / ʑ - <<< ʤ / ʒ - <<< ⅆ - = 𝐝 - = 𝑑 - = 𝒅 - = 𝒹 - = 𝓭 - = 𝔡 - = 𝕕 - = 𝖉 - = 𝖽 - = 𝗱 - = 𝘥 - = 𝙙 - = 𝚍 - <<< ⓓ - <<< D - <<< D - <<< Ⅾ - <<< Dz / z - <<< DZ / Z - <<< Dž / ž - <<< DŽ / Ž - <<< ⅅ - = 𝐃 - = 𝐷 - = 𝑫 - = 𝒟 - = 𝓓 - = 𝔇 - = 𝔻 - = 𝕯 - = 𝖣 - = 𝗗 - = 𝘋 - = 𝘿 - = 𝙳 - <<< Ⓓ - <<< ᴰ - = ᵈ - <<< ㍲ / a - <<< ㏈ / B - <<< ㎗ / l - <<< ㍷ / m - <<< ㍸ / m2 - <<< ㍹ / m3 - < ᴅ - < đ - <<< Đ - < ɖ - <<< Ɖ - < ɗ - <<< Ɗ - < ƌ - <<< Ƌ - < ȡ - < ð - <<< Ð - < ᴆ - < e - <<< e - <<< ͤ - <<< ℯ - = ⅇ - = 𝐞 - = 𝑒 - = 𝒆 - = 𝓮 - = 𝔢 - = 𝕖 - = 𝖊 - = 𝖾 - = 𝗲 - = 𝘦 - = 𝙚 - = 𝚎 - <<< ⓔ - <<< E - <<< E - <<< ℰ - = 𝐄 - = 𝐸 - = 𝑬 - = 𝓔 - = 𝔈 - = 𝔼 - = 𝕰 - = 𝖤 - = 𝗘 - = 𝘌 - = 𝙀 - = 𝙴 - <<< Ⓔ - <<< ᴱ - = ᵉ - <<< ㋍ / rg - <<< ㋎ / V - < ᴇ - < ǝ - <<< Ǝ - <<< ᴲ - < ə - <<< Ə - <<< ᵊ - < ɛ - <<< Ɛ - <<< ℇ - <<< ᵋ - < ɘ - < ɚ - < ɜ - < ᴈ - <<< ᵌ - < ɝ - < ɞ - < ʚ - < ɤ - < f - <<< f - <<< ff / f - <<< ffi / fi - <<< ffl / fl - <<< fi / i - <<< fl / l - <<< ʩ / ŋ - <<< 𝐟 - = 𝑓 - = 𝒇 - = 𝒻 - = 𝓯 - = 𝔣 - = 𝕗 - = 𝖋 - = 𝖿 - = 𝗳 - = 𝘧 - = 𝙛 - = 𝚏 - <<< ⓕ - <<< F - <<< F - <<< ℻ / Ax - <<< ℱ - = 𝐅 - = 𝐹 - = 𝑭 - = 𝓕 - = 𝔉 - = 𝔽 - = 𝕱 - = 𝖥 - = 𝗙 - = 𝘍 - = 𝙁 - = 𝙵 - <<< Ⓕ - <<< ㎙ / m - < ƒ - <<< Ƒ - < g - <<< g - <<< ℊ - = 𝐠 - = 𝑔 - = 𝒈 - = 𝓰 - = 𝔤 - = 𝕘 - = 𝖌 - = 𝗀 - = 𝗴 - = 𝘨 - = 𝙜 - = 𝚐 - <<< ⓖ - <<< G - <<< G - <<< 𝐆 - = 𝐺 - = 𝑮 - = 𝒢 - = 𝓖 - = 𝔊 - = 𝔾 - = 𝕲 - = 𝖦 - = 𝗚 - = 𝘎 - = 𝙂 - = 𝙶 - <<< Ⓖ - <<< ᴳ - = ᵍ - <<< ㏿ / al - <<< ㎇ / B - <<< ㎓ / Hz - <<< ㎬ / Pa - <<< ㏉ / y - < ɡ - < ɢ - < ǥ - <<< Ǥ - < ɠ - <<< Ɠ - < ʛ - < ɣ - <<< Ɣ - <<< ˠ - < ƣ - <<< Ƣ - < h - <<< h - <<< ͪ - <<< ℎ - = 𝐡 - = 𝒉 - = 𝒽 - = 𝓱 - = 𝔥 - = 𝕙 - = 𝖍 - = 𝗁 - = 𝗵 - = 𝘩 - = 𝙝 - = 𝚑 - <<< ⓗ - <<< H - <<< H - <<< ℋ - = ℌ - = ℍ - = 𝐇 - = 𝐻 - = 𝑯 - = 𝓗 - = 𝕳 - = 𝖧 - = 𝗛 - = 𝘏 - = 𝙃 - = 𝙷 - <<< Ⓗ - <<< ʰ - = ᴴ - <<< ㏊ / a - <<< ㍱ / Pa - <<< ㋌ / g - <<< ㏋ / P - <<< ㎐ / z - < ʜ - < ƕ - <<< Ƕ - < ħ - <<< ℏ - <<< Ħ - < ɦ - <<< ʱ - < ɧ - < ʻ - < ʽ - < i - <<< i - <<< ͥ - = ⅰ - <<< ⅱ / i - <<< ⅲ / ii - <<< ij / j - <<< ⅳ / v - <<< ⅸ / x - <<< ℹ - = ⅈ - = 𝐢 - = 𝑖 - = 𝒊 - = 𝒾 - = 𝓲 - = 𝔦 - = 𝕚 - = 𝖎 - = 𝗂 - = 𝗶 - = 𝘪 - = 𝙞 - = 𝚒 - <<< ⓘ - <<< I - <<< I - <<< Ⅰ - <<< Ⅱ / I - <<< Ⅲ / Ii - <<< IJ / J - <<< Ⅳ / V - <<< Ⅸ / X - <<< ℐ - = ℑ - = 𝐈 - = 𝐼 - = 𝑰 - = 𝓘 - = 𝕀 - = 𝕴 - = 𝖨 - = 𝗜 - = 𝘐 - = 𝙄 - = 𝙸 - <<< Ⓘ - <<< ᴵ - = ⁱ - <<< ᵢ - <<< ㏌ / n - <<< ㍺ / U - < ı - < ɪ - < ᴉ - <<< ᵎ - < ɨ - <<< Ɨ - < ɩ - <<< Ɩ - < j - <<< j - <<< ⅉ - = 𝐣 - = 𝑗 - = 𝒋 - = 𝒿 - = 𝓳 - = 𝔧 - = 𝕛 - = 𝖏 - = 𝗃 - = 𝗷 - = 𝘫 - = 𝙟 - = 𝚓 - <<< ⓙ - <<< J - <<< J - <<< 𝐉 - = 𝐽 - = 𝑱 - = 𝒥 - = 𝓙 - = 𝔍 - = 𝕁 - = 𝕵 - = 𝖩 - = 𝗝 - = 𝘑 - = 𝙅 - = 𝙹 - <<< Ⓙ - <<< ʲ - = ᴶ - < ᴊ - < ʝ - < ɟ - < ʄ - < k - <<< k - <<< 𝐤 - = 𝑘 - = 𝒌 - = 𝓀 - = 𝓴 - = 𝔨 - = 𝕜 - = 𝖐 - = 𝗄 - = 𝗸 - = 𝘬 - = 𝙠 - = 𝚔 - <<< ⓚ - <<< K - <<< K - <<< 𝐊 - = 𝐾 - = 𝑲 - = 𝒦 - = 𝓚 - = 𝔎 - = 𝕂 - = 𝕶 - = 𝖪 - = 𝗞 - = 𝘒 - = 𝙆 - = 𝙺 - <<< Ⓚ - <<< ᴷ - = ᵏ - <<< ㎄ / A - <<< ㎉ / cal - <<< ㎏ / g - <<< ㎑ / Hz - <<< ㎘ / l - <<< ㎞ / m - <<< ㎢ / m2 - <<< ㎦ / m3 - <<< ㎪ / Pa - <<< ㏏ / t - <<< ㎸ / V - <<< ㎾ / W - <<< ㏀ / Ω - <<< ㎅ / B - <<< ㏍ / K - <<< ㏎ / M - < ᴋ - < ƙ - <<< Ƙ - < ʞ - < l - <<< l - <<< ⅼ - <<< ŀ / · - <<< lj / j - <<< ʪ / s - <<< ʫ / z - <<< ℓ - = 𝐥 - = 𝑙 - = 𝒍 - = 𝓁 - = 𝓵 - = 𝔩 - = 𝕝 - = 𝖑 - = 𝗅 - = 𝗹 - = 𝘭 - = 𝙡 - = 𝚕 - <<< ⓛ - <<< L - <<< L - <<< Ⅼ - <<< Ŀ / · - <<< Lj / j - <<< LJ / J - <<< ℒ - = 𝐋 - = 𝐿 - = 𝑳 - = 𝓛 - = 𝔏 - = 𝕃 - = 𝕷 - = 𝖫 - = 𝗟 - = 𝘓 - = 𝙇 - = 𝙻 - <<< Ⓛ - <<< ˡ - = ᴸ - <<< ㏐ / m - <<< ㏑ / n - <<< ㏒ / og - <<< ㏓ / x - <<< ㋏ / Td - < ʟ - < ł - <<< Ł - < ᴌ - < ƚ - < ɫ - < ɬ - < ɭ - < ȴ - < ɮ - < ƛ - < ʎ - < m - <<< m - <<< ͫ - = ⅿ - <<< 𝐦 - = 𝑚 - = 𝒎 - = 𝓂 - = 𝓶 - = 𝔪 - = 𝕞 - = 𝖒 - = 𝗆 - = 𝗺 - = 𝘮 - = 𝙢 - = 𝚖 - <<< ⓜ - <<< M - <<< M - <<< Ⅿ - <<< ℳ - = 𝐌 - = 𝑀 - = 𝑴 - = 𝓜 - = 𝔐 - = 𝕄 - = 𝕸 - = 𝖬 - = 𝗠 - = 𝘔 - = 𝙈 - = 𝙼 - <<< Ⓜ - <<< ᴹ - = ᵐ - <<< ㎧ / ∕s - <<< ㎨ / ∕s2 - <<< ㎡ / 2 - <<< ㎥ / 3 - <<< ㎃ / A - <<< ㏔ / b - <<< ㎎ / g - <<< ㏕ / il - <<< ㎖ / l - <<< ㎜ / m - <<< ㎟ / m2 - <<< ㎣ / m3 - <<< ㏖ / ol - <<< ㎳ / s - <<< ㎷ / V - <<< ㎽ / W - <<< ㎆ / B - <<< ㎒ / Hz - <<< ㎫ / Pa - <<< ㎹ / V - <<< ㎿ / W - <<< ㏁ / Ω - < ᴍ - < ɱ - < n - <<< n - <<< nj / j - <<< 𝐧 - = 𝑛 - = 𝒏 - = 𝓃 - = 𝓷 - = 𝔫 - = 𝕟 - = 𝖓 - = 𝗇 - = 𝗻 - = 𝘯 - = 𝙣 - = 𝚗 - <<< ⓝ - <<< N - <<< N - <<< Nj / j - <<< NJ / J - <<< № / o - <<< ℕ - = 𝐍 - = 𝑁 - = 𝑵 - = 𝒩 - = 𝓝 - = 𝔑 - = 𝕹 - = 𝖭 - = 𝗡 - = 𝘕 - = 𝙉 - = 𝙽 - <<< Ⓝ - <<< ᴺ - = ⁿ - <<< ㎁ / A - <<< ㎋ / F - <<< ㎚ / m - <<< ㎱ / s - <<< ㎵ / V - <<< ㎻ / W - < ɴ - < ᴻ - < ᴎ - < ɲ - <<< Ɲ - < ƞ - <<< Ƞ - < ɳ - < ȵ - < ŋ - <<< Ŋ - <<< ᵑ - < o - <<< o - <<< ͦ - <<< ℴ - = 𝐨 - = 𝑜 - = 𝒐 - = 𝓸 - = 𝔬 - = 𝕠 - = 𝖔 - = 𝗈 - = 𝗼 - = 𝘰 - = 𝙤 - = 𝚘 - <<< ⓞ - <<< O - <<< O - <<< 𝐎 - = 𝑂 - = 𝑶 - = 𝒪 - = 𝓞 - = 𝔒 - = 𝕆 - = 𝕺 - = 𝖮 - = 𝗢 - = 𝘖 - = 𝙊 - = 𝙾 - <<< Ⓞ - <<< º - = ᴼ - = ᵒ - <<< ㍵ / V - << œ / e - <<< Œ / e - < ᴏ - < ᴑ - < ɶ - < ᴔ - < ø - <<< Ø - < ᴓ - < ɔ - <<< Ɔ - <<< ᵓ - < ᴐ - < ᴒ - < ᴖ - <<< ᵔ - < ᴗ - <<< ᵕ - < ɵ - <<< Ɵ - < ɷ - < ȣ - <<< Ȣ - <<< ᴽ - < ᴕ - < p - <<< p - <<< 𝐩 - = 𝑝 - = 𝒑 - = 𝓅 - = 𝓹 - = 𝔭 - = 𝕡 - = 𝖕 - = 𝗉 - = 𝗽 - = 𝘱 - = 𝙥 - = 𝚙 - <<< ⓟ - <<< P - <<< P - <<< ℙ - = 𝐏 - = 𝑃 - = 𝑷 - = 𝒫 - = 𝓟 - = 𝔓 - = 𝕻 - = 𝖯 - = 𝗣 - = 𝘗 - = 𝙋 - = 𝙿 - <<< Ⓟ - <<< ᴾ - = ᵖ - <<< ㏘ / '.'m'.' - <<< ㎀ / A - <<< ㍶ / c - <<< ㎊ / F - <<< ㎰ / s - <<< ㎴ / V - <<< ㎺ / W - <<< ㎩ / a - <<< ㏗ / H - <<< ㏙ / Pm - <<< ㏚ / R - <<< ㉐ / Te - < ᴘ - < ƥ - <<< Ƥ - < ɸ - < q - <<< q - <<< 𝐪 - = 𝑞 - = 𝒒 - = 𝓆 - = 𝓺 - = 𝔮 - = 𝕢 - = 𝖖 - = 𝗊 - = 𝗾 - = 𝘲 - = 𝙦 - = 𝚚 - <<< ⓠ - <<< Q - <<< Q - <<< ℚ - = 𝐐 - = 𝑄 - = 𝑸 - = 𝒬 - = 𝓠 - = 𝔔 - = 𝕼 - = 𝖰 - = 𝗤 - = 𝘘 - = 𝙌 - = 𝚀 - <<< Ⓠ - < ʠ - < ĸ - < r - <<< r - <<< ͬ - <<< 𝐫 - = 𝑟 - = 𝒓 - = 𝓇 - = 𝓻 - = 𝔯 - = 𝕣 - = 𝖗 - = 𝗋 - = 𝗿 - = 𝘳 - = 𝙧 - = 𝚛 - <<< ⓡ - <<< R - <<< R - <<< ₨ / s - <<< ℛ - = ℜ - = ℝ - = 𝐑 - = 𝑅 - = 𝑹 - = 𝓡 - = 𝕽 - = 𝖱 - = 𝗥 - = 𝘙 - = 𝙍 - = 𝚁 - <<< Ⓡ - <<< ʳ - = ᴿ - <<< ᵣ - <<< ㎭ / ad - <<< ㎮ / ad∕s - <<< ㎯ / ad∕s2 - < ʀ - <<< Ʀ - < ᴙ - < ɹ - <<< ʴ - < ᴚ - < ɺ - < ɻ - <<< ʵ - < ɼ - < ɽ - < ɾ - < ɿ - < ʁ - <<< ʶ - < s - <<< s - <<< st / t - <<< 𝐬 - = 𝑠 - = 𝒔 - = 𝓈 - = 𝓼 - = 𝔰 - = 𝕤 - = 𝖘 - = 𝗌 - = 𝘀 - = 𝘴 - = 𝙨 - = 𝚜 - <<< ⓢ - <<< S - <<< S - <<< 𝐒 - = 𝑆 - = 𝑺 - = 𝒮 - = 𝓢 - = 𝔖 - = 𝕊 - = 𝕾 - = 𝖲 - = 𝗦 - = 𝘚 - = 𝙎 - = 𝚂 - <<< Ⓢ - <<< ˢ - <<< ℠ / m - <<< ㏛ / r - <<< ㏜ / v - << ß / s - << ſ - <<< ſt / t - < ʂ - < ʃ - <<< Ʃ - < ƪ - < ʅ - < ʆ - < t - <<< t - <<< ͭ - <<< ʨ / ɕ - <<< ƾ / s - = ʦ / s - <<< ʧ / ʃ - <<< 𝐭 - = 𝑡 - = 𝒕 - = 𝓉 - = 𝓽 - = 𝔱 - = 𝕥 - = 𝖙 - = 𝗍 - = 𝘁 - = 𝘵 - = 𝙩 - = 𝚝 - <<< ⓣ - <<< T - <<< T - <<< ℡ / El - <<< 𝐓 - = 𝑇 - = 𝑻 - = 𝒯 - = 𝓣 - = 𝔗 - = 𝕋 - = 𝕿 - = 𝖳 - = 𝗧 - = 𝘛 - = 𝙏 - = 𝚃 - <<< Ⓣ - <<< ᵀ - = ᵗ - <<< ™ / m - <<< ㎔ / Hz - < ᴛ - < ŧ - <<< Ŧ - < ƫ - < ƭ - <<< Ƭ - < ʈ - <<< Ʈ - < ȶ - < ʇ - < u - <<< u - <<< ͧ - <<< 𝐮 - = 𝑢 - = 𝒖 - = 𝓊 - = 𝓾 - = 𝔲 - = 𝕦 - = 𝖚 - = 𝗎 - = 𝘂 - = 𝘶 - = 𝙪 - = 𝚞 - <<< ⓤ - <<< U - <<< U - <<< 𝐔 - = 𝑈 - = 𝑼 - = 𝒰 - = 𝓤 - = 𝔘 - = 𝕌 - = 𝖀 - = 𝖴 - = 𝗨 - = 𝘜 - = 𝙐 - = 𝚄 - <<< Ⓤ - <<< ᵁ - = ᵘ - <<< ᵤ - < ᴜ - < ᴝ - <<< ᵙ - < ᴞ - < ᵫ - < ʉ - < ɥ - < ʮ - < ʯ - < ɯ - <<< Ɯ - <<< ᵚ - < ᴟ - < ɰ - < ʊ - <<< Ʊ - < v - <<< v - <<< ͮ - = ⅴ - <<< ⅵ / i - <<< ⅶ / ii - <<< ⅷ / iii - <<< 𝐯 - = 𝑣 - = 𝒗 - = 𝓋 - = 𝓿 - = 𝔳 - = 𝕧 - = 𝖛 - = 𝗏 - = 𝘃 - = 𝘷 - = 𝙫 - = 𝚟 - <<< ⓥ - <<< V - <<< V - <<< Ⅴ - <<< Ⅵ / I - <<< Ⅶ / Ii - <<< Ⅷ / Iii - <<< 𝐕 - = 𝑉 - = 𝑽 - = 𝒱 - = 𝓥 - = 𝔙 - = 𝕍 - = 𝖁 - = 𝖵 - = 𝗩 - = 𝘝 - = 𝙑 - = 𝚅 - <<< Ⓥ - <<< ᵛ - <<< ᵥ - <<< ㏞ / ∕m - < ᴠ - < ʋ - <<< Ʋ - < ʌ - < w - <<< w - <<< 𝐰 - = 𝑤 - = 𝒘 - = 𝓌 - = 𝔀 - = 𝔴 - = 𝕨 - = 𝖜 - = 𝗐 - = 𝘄 - = 𝘸 - = 𝙬 - = 𝚠 - <<< ⓦ - <<< W - <<< W - <<< 𝐖 - = 𝑊 - = 𝑾 - = 𝒲 - = 𝓦 - = 𝔚 - = 𝕎 - = 𝖂 - = 𝖶 - = 𝗪 - = 𝘞 - = 𝙒 - = 𝚆 - <<< Ⓦ - <<< ʷ - = ᵂ - <<< ㏝ / b - < ᴡ - < ʍ - < x - <<< x - <<< ͯ - = ⅹ - <<< ⅺ / i - <<< ⅻ / ii - <<< 𝐱 - = 𝑥 - = 𝒙 - = 𝓍 - = 𝔁 - = 𝔵 - = 𝕩 - = 𝖝 - = 𝗑 - = 𝘅 - = 𝘹 - = 𝙭 - = 𝚡 - <<< ⓧ - <<< X - <<< X - <<< Ⅹ - <<< Ⅺ / I - <<< Ⅻ / Ii - <<< 𝐗 - = 𝑋 - = 𝑿 - = 𝒳 - = 𝓧 - = 𝔛 - = 𝕏 - = 𝖃 - = 𝖷 - = 𝗫 - = 𝘟 - = 𝙓 - = 𝚇 - <<< Ⓧ - <<< ˣ - < y - <<< y - <<< 𝐲 - = 𝑦 - = 𝒚 - = 𝓎 - = 𝔂 - = 𝔶 - = 𝕪 - = 𝖞 - = 𝗒 - = 𝘆 - = 𝘺 - = 𝙮 - = 𝚢 - <<< ⓨ - <<< Y - <<< Y - <<< 𝐘 - = 𝑌 - = 𝒀 - = 𝒴 - = 𝓨 - = 𝔜 - = 𝕐 - = 𝖄 - = 𝖸 - = 𝗬 - = 𝘠 - = 𝙔 - = 𝚈 - <<< Ⓨ - <<< ʸ - < ʏ - < ƴ - <<< Ƴ - < z - <<< z - <<< ƍ / w - <<< 𝐳 - = 𝑧 - = 𝒛 - = 𝓏 - = 𝔃 - = 𝔷 - = 𝕫 - = 𝖟 - = 𝗓 - = 𝘇 - = 𝘻 - = 𝙯 - = 𝚣 - <<< ⓩ - <<< Z - <<< Z - <<< ℤ - = ℨ - = 𝐙 - = 𝑍 - = 𝒁 - = 𝒵 - = 𝓩 - = 𝖅 - = 𝖹 - = 𝗭 - = 𝘡 - = 𝙕 - = 𝚉 - <<< Ⓩ - < ᴢ - < ƶ - <<< Ƶ - < ȥ - <<< Ȥ - < ʐ - < ʑ - < ʒ - <<< Ʒ - < ᴣ - < ƹ - <<< Ƹ - < ƺ - < ʓ - < ȝ - <<< Ȝ - < þ - <<< Þ - < ƿ - <<< Ƿ - < ƻ - < ƨ - <<< Ƨ - < ƽ - <<< Ƽ - < ƅ - <<< Ƅ - < ʔ - < ˀ - < ʼ - <<< ʼn / n - < ˮ - < ʾ - < ʕ - <<< ˤ - < ʿ - < ˁ - < ᴤ - < ᴥ - <<< ᵜ - < ʡ - < ʢ - < ʖ - < ǀ - < ǁ - < ǂ - < ǃ - < ʗ - < ʘ - < ʬ - < ʭ - < α - <<< 𝛂 - = 𝛼 - = 𝜶 - = 𝝰 - = 𝞪 - <<< Α - <<< 𝚨 - = 𝛢 - = 𝜜 - = 𝝖 - = 𝞐 - < β - <<< ϐ - <<< 𝛃 - = 𝛽 - = 𝜷 - = 𝝱 - = 𝞫 - <<< Β - <<< 𝚩 - = 𝛣 - = 𝜝 - = 𝝗 - = 𝞑 - <<< ᵝ - <<< ᵦ - < γ - <<< ℽ - = 𝛄 - = 𝛾 - = 𝜸 - = 𝝲 - = 𝞬 - <<< Γ - <<< ℾ - = 𝚪 - = 𝛤 - = 𝜞 - = 𝝘 - = 𝞒 - <<< ᵞ - <<< ᵧ - < ᴦ - < δ - <<< 𝛅 - = 𝛿 - = 𝜹 - = 𝝳 - = 𝞭 - <<< Δ - <<< 𝚫 - = 𝛥 - = 𝜟 - = 𝝙 - = 𝞓 - <<< ᵟ - < ε - <<< ϵ - <<< 𝛆 - = 𝛜 - = 𝜀 - = 𝜖 - = 𝜺 - = 𝝐 - = 𝝴 - = 𝞊 - = 𝞮 - = 𝟄 - <<< Ε - <<< 𝚬 - = 𝛦 - = 𝜠 - = 𝝚 - = 𝞔 - < ϝ - <<< Ϝ - < ϛ - <<< Ϛ - < ζ - <<< 𝛇 - = 𝜁 - = 𝜻 - = 𝝵 - = 𝞯 - <<< Ζ - <<< 𝚭 - = 𝛧 - = 𝜡 - = 𝝛 - = 𝞕 - < η - <<< 𝛈 - = 𝜂 - = 𝜼 - = 𝝶 - = 𝞰 - <<< Η - <<< 𝚮 - = 𝛨 - = 𝜢 - = 𝝜 - = 𝞖 - < θ - <<< ϑ - <<< 𝛉 - = 𝛝 - = 𝜃 - = 𝜗 - = 𝜽 - = 𝝑 - = 𝝷 - = 𝞋 - = 𝞱 - = 𝟅 - <<< Θ - <<< ϴ - <<< 𝚯 - = 𝚹 - = 𝛩 - = 𝛳 - = 𝜣 - = 𝜭 - = 𝝝 - = 𝝧 - = 𝞗 - = 𝞡 - < ι - <<< ͺ - <<< 𝛊 - = 𝜄 - = 𝜾 - = 𝝸 - = 𝞲 - <<< Ι - <<< 𝚰 - = 𝛪 - = 𝜤 - = 𝝞 - = 𝞘 - < ϳ - < κ - <<< ϰ - <<< ϗ / αι - <<< 𝛋 - = 𝛞 - = 𝜅 - = 𝜘 - = 𝜿 - = 𝝒 - = 𝝹 - = 𝞌 - = 𝞳 - = 𝟆 - <<< Κ - <<< 𝚱 - = 𝛫 - = 𝜥 - = 𝝟 - = 𝞙 - < λ - <<< 𝛌 - = 𝜆 - = 𝝀 - = 𝝺 - = 𝞴 - <<< Λ - <<< 𝚲 - = 𝛬 - = 𝜦 - = 𝝠 - = 𝞚 - < ᴧ - < μ - <<< µ - <<< 𝛍 - = 𝜇 - = 𝝁 - = 𝝻 - = 𝞵 - <<< Μ - <<< 𝚳 - = 𝛭 - = 𝜧 - = 𝝡 - = 𝞛 - <<< ㎂ / A - <<< ㎌ / F - <<< ㎍ / g - <<< ㎕ / l - <<< ㎛ / m - <<< ㎲ / s - <<< ㎶ / V - <<< ㎼ / W - < ν - <<< 𝛎 - = 𝜈 - = 𝝂 - = 𝝼 - = 𝞶 - <<< Ν - <<< 𝚴 - = 𝛮 - = 𝜨 - = 𝝢 - = 𝞜 - < ξ - <<< 𝛏 - = 𝜉 - = 𝝃 - = 𝝽 - = 𝞷 - <<< Ξ - <<< 𝚵 - = 𝛯 - = 𝜩 - = 𝝣 - = 𝞝 - < ο - <<< 𝛐 - = 𝜊 - = 𝝄 - = 𝝾 - = 𝞸 - <<< Ο - <<< 𝚶 - = 𝛰 - = 𝜪 - = 𝝤 - = 𝞞 - < π - <<< ϖ - <<< 𝛑 - = 𝛡 - = 𝜋 - = 𝜛 - = 𝝅 - = 𝝕 - = 𝝿 - = 𝞏 - = 𝞹 - = 𝟉 - <<< Π - <<< ℿ - = 𝚷 - = 𝛱 - = 𝜫 - = 𝝥 - = 𝞟 - < ᴨ - < ϟ - <<< Ϟ - < ϙ - <<< Ϙ - < ρ - <<< ϱ - <<< 𝛒 - = 𝛠 - = 𝜌 - = 𝜚 - = 𝝆 - = 𝝔 - = 𝞀 - = 𝞎 - = 𝞺 - = 𝟈 - <<< Ρ - <<< 𝚸 - = 𝛲 - = 𝜬 - = 𝝦 - = 𝞠 - <<< ᵨ - < ᴩ - < σ - <<< ϲ - <<< 𝛓 - = 𝛔 - = 𝜍 - = 𝜎 - = 𝝇 - = 𝝈 - = 𝞁 - = 𝞂 - = 𝞻 - = 𝞼 - <<< Σ - <<< Ϲ - <<< 𝚺 - = 𝛴 - = 𝜮 - = 𝝨 - = 𝞢 - <<< ς - < τ - <<< 𝛕 - = 𝜏 - = 𝝉 - = 𝞃 - = 𝞽 - <<< Τ - <<< 𝚻 - = 𝛵 - = 𝜯 - = 𝝩 - = 𝞣 - < υ - <<< 𝛖 - = 𝜐 - = 𝝊 - = 𝞄 - = 𝞾 - <<< Υ - <<< ϒ - <<< 𝚼 - = 𝛶 - = 𝜰 - = 𝝪 - = 𝞤 - < φ - <<< ϕ - <<< 𝛗 - = 𝛟 - = 𝜑 - = 𝜙 - = 𝝋 - = 𝝓 - = 𝞅 - = 𝞍 - = 𝞿 - = 𝟇 - <<< Φ - <<< 𝚽 - = 𝛷 - = 𝜱 - = 𝝫 - = 𝞥 - <<< ᵠ - <<< ᵩ - < χ - <<< 𝛘 - = 𝜒 - = 𝝌 - = 𝞆 - = 𝟀 - <<< Χ - <<< 𝚾 - = 𝛸 - = 𝜲 - = 𝝬 - = 𝞦 - <<< ᵡ - <<< ᵪ - < ψ - <<< 𝛙 - = 𝜓 - = 𝝍 - = 𝞇 - = 𝟁 - <<< Ψ - <<< 𝚿 - = 𝛹 - = 𝜳 - = 𝝭 - = 𝞧 - < ᴪ - < ω - <<< 𝛚 - = 𝜔 - = 𝝎 - = 𝞈 - = 𝟂 - <<< Ω - <<< 𝛀 - = 𝛺 - = 𝜴 - = 𝝮 - = 𝞨 - < ϡ - <<< Ϡ - < ϸ - <<< Ϸ - < ϻ - <<< Ϻ - < ϣ - <<< Ϣ - < ϥ - <<< Ϥ - < ϧ - <<< Ϧ - < ϩ - <<< Ϩ - < ϫ - <<< Ϫ - < ϭ - <<< Ϭ - < ϯ - <<< Ϯ - < а - <<< А - < ӑ - <<< Ӑ - < ӓ - <<< Ӓ - < ә - <<< Ә - < ӛ - <<< Ӛ - < ӕ - <<< Ӕ - < б - <<< Б - < в - <<< В - < г - <<< Г - << ґ - <<< Ґ - < ғ - <<< Ғ - < ҕ - <<< Ҕ - < д - <<< Д - < ԁ - <<< Ԁ - < ђ - <<< Ђ - < ԃ - <<< Ԃ - < ѓ - <<< Ѓ - < ҙ - <<< Ҙ - < е - <<< Е - < ӗ - <<< Ӗ - < є - <<< Є - < ж - <<< Ж - < ӝ - <<< Ӝ - < җ - <<< Җ - < з - <<< З - < ԅ - <<< Ԅ - < ӟ - <<< Ӟ - < ѕ - <<< Ѕ - < ӡ - <<< Ӡ - < ԇ - <<< Ԇ - < и - <<< И - < ҋ - <<< Ҋ - < ӥ - <<< Ӥ - < і - <<< І - < ї - <<< Ї - < й - <<< Й - < ј - <<< Ј - < к - <<< К - < қ - <<< Қ - < ӄ - <<< Ӄ - < ҡ - <<< Ҡ - < ҟ - <<< Ҟ - < ҝ - <<< Ҝ - < л - <<< Л - < ᴫ - < ӆ - <<< Ӆ - < љ - <<< Љ - < ԉ - <<< Ԉ - < м - <<< М - < ӎ - <<< Ӎ - < н - <<< Н - < ӊ - <<< Ӊ - < ң - <<< Ң - < ӈ - <<< Ӈ - < ҥ - <<< Ҥ - < њ - <<< Њ - < ԋ - <<< Ԋ - < о - <<< О - < ӧ - <<< Ӧ - < ө - <<< Ө - < ӫ - <<< Ӫ - < п - <<< П - < ҧ - <<< Ҧ - < ҁ - <<< Ҁ - < р - <<< Р - < ҏ - <<< Ҏ - < с - <<< С - < ԍ - <<< Ԍ - < ҫ - <<< Ҫ - < т - <<< Т - < ԏ - <<< Ԏ - < ҭ - <<< Ҭ - < ћ - <<< Ћ - < ќ - <<< Ќ - < у - <<< У - < ў - <<< Ў - < ӱ - <<< Ӱ - < ӳ - <<< Ӳ - < ү - <<< Ү - < ұ - <<< Ұ - < ѹ - <<< Ѹ - < ф - <<< Ф - < х - <<< Х - < ҳ - <<< Ҳ - < һ - <<< Һ - < ѡ - <<< Ѡ - < ѿ - <<< Ѿ - < ѽ - <<< Ѽ - < ѻ - <<< Ѻ - < ц - <<< Ц - < ҵ - <<< Ҵ - < ч - <<< Ч - < ӵ - <<< Ӵ - < ҷ - <<< Ҷ - < ӌ - <<< Ӌ - < ҹ - <<< Ҹ - < ҽ - <<< Ҽ - < ҿ - <<< Ҿ - < џ - <<< Џ - < ш - <<< Ш - < щ - <<< Щ - < ъ - <<< Ъ - < ы - <<< Ы - < ӹ - <<< Ӹ - < ь - <<< Ь - < ҍ - <<< Ҍ - < ѣ - <<< Ѣ - < э - <<< Э - < ӭ - <<< Ӭ - < ю - <<< Ю - < я - <<< Я - < ѥ - <<< Ѥ - < ѧ - <<< Ѧ - < ѫ - <<< Ѫ - < ѩ - <<< Ѩ - < ѭ - <<< Ѭ - < ѯ - <<< Ѯ - < ѱ - <<< Ѱ - < ѳ - <<< Ѳ - < ѵ - <<< Ѵ - < ѷ - <<< Ѷ - < ҩ - <<< Ҩ - < Ӏ - < ა - <<< Ⴀ - < ბ - <<< Ⴁ - < გ - <<< Ⴂ - < დ - <<< Ⴃ - < ე - <<< Ⴄ - < ვ - <<< Ⴅ - < ზ - <<< Ⴆ - < ჱ - <<< Ⴡ - < თ - <<< Ⴇ - < ი - <<< Ⴈ - < კ - <<< Ⴉ - < ლ - <<< Ⴊ - < მ - <<< Ⴋ - < ნ - <<< Ⴌ - < ჲ - <<< Ⴢ - < ო - <<< Ⴍ - < პ - <<< Ⴎ - < ჟ - <<< Ⴏ - < რ - <<< Ⴐ - < ს - <<< Ⴑ - < ტ - <<< Ⴒ - < ჳ - <<< Ⴣ - < უ - <<< Ⴓ - < ფ - <<< Ⴔ - < ქ - <<< Ⴕ - < ღ - <<< Ⴖ - < ყ - <<< Ⴗ - < შ - <<< Ⴘ - < ჩ - <<< Ⴙ - < ც - <<< Ⴚ - < ძ - <<< Ⴛ - < წ - <<< Ⴜ - < ჭ - <<< Ⴝ - < ხ - <<< Ⴞ - < ჴ - <<< Ⴤ - < ჯ - <<< Ⴟ - < ჰ - <<< Ⴠ - < ჵ - <<< Ⴥ - < ჶ - < ჷ - < ჸ - < ա - <<< Ա - < բ - <<< Բ - < գ - <<< Գ - < դ - <<< Դ - < ե - <<< և / ւ - <<< Ե - < զ - <<< Զ - < է - <<< Է - < ը - <<< Ը - < թ - <<< Թ - < ժ - <<< Ժ - < ի - <<< Ի - < լ - <<< Լ - < խ - <<< Խ - < ծ - <<< Ծ - < կ - <<< Կ - < հ - <<< Հ - < ձ - <<< Ձ - < ղ - <<< Ղ - < ճ - <<< Ճ - < մ - <<< ﬔ / ե - <<< ﬕ / ի - <<< ﬗ / խ - <<< ﬓ / ն - <<< Մ - < յ - <<< Յ - < ն - <<< Ն - < շ - <<< Շ - < ո - <<< Ո - < չ - <<< Չ - < պ - <<< Պ - < ջ - <<< Ջ - < ռ - <<< Ռ - < ս - <<< Ս - < վ - <<< ﬖ / ն - <<< Վ - < տ - <<< Տ - < ր - <<< Ր - < ց - <<< Ց - < ւ - <<< Ւ - < փ - <<< Փ - < ք - <<< Ք - < օ - <<< Օ - < ֆ - <<< Ֆ - < ՙ - < א - <<< ℵ - <<< ﭏ / ל - <<< ﬡ - < ב - <<< ℶ - < ג - <<< ℷ - < ד - <<< ℸ - <<< ﬢ - < ה - <<< ﬣ - < ו - <<< װ / ו - <<< ױ / י - < ז - < ח - < ט - < י - <<< ײ / י - < כ - <<< ﬤ - <<< ך - < ל - <<< ﬥ - < מ - <<< ﬦ - <<< ם - < נ - <<< ן - < ס - < ע - <<< ﬠ - < פ - <<< ף - < צ - <<< ץ - < ק - < ר - <<< ﬧ - < ש - < ת - <<< ﬨ - < ء - <<< ٴ - <<< ﺀ - << ۽ - < آ - <<< ﺂ - <<< ﺁ - < أ - <<< ﺄ - <<< ﺃ - < ٲ - < ٱ - <<< ﭑ - <<< ﭐ - < ؤ - <<< ﺆ - <<< ﺅ - < إ - <<< ﺈ - <<< ﺇ - < ٳ - < ئ - <<< ﺋ - <<< ﲗ / ج - <<< ﲘ / ح - <<< ﲙ / خ - <<< ﲚ / م - <<< ﲛ / ه - <<< ﯻ / ى - <<< ﯸ / ې - <<< ﺌ - <<< ﳟ / م - <<< ﳠ / ه - <<< ﺊ - <<< ﯫ / ا - <<< ﱤ / ر - <<< ﱥ / ز - <<< ﱦ / م - <<< ﱧ / ن - <<< ﯭ / ە - <<< ﯯ / و - <<< ﯳ / ۆ - <<< ﯱ / ۇ - <<< ﯵ / ۈ - <<< ﯺ / ى - = ﱨ / ى - <<< ﱩ / ي - <<< ﯷ / ې - <<< ﺉ - <<< ﯪ / ا - <<< ﰀ / ج - <<< ﰁ / ح - <<< ﰂ / م - <<< ﯬ / ە - <<< ﯮ / و - <<< ﯲ / ۆ - <<< ﯰ / ۇ - <<< ﯴ / ۈ - <<< ﯹ / ى - = ﰃ / ى - <<< ﰄ / ي - <<< ﯶ / ې - < ا - <<< ٵ / ء - <<< ﺎ - <<< ﴼ / ً - <<< ﺍ - <<< ﴽ / ً - <<< ﷳ / كبر - <<< ﷲ / لله - < ٮ - < ب - <<< ﺑ - <<< ﲜ / ج - <<< ﲝ / ح - <<< ﲞ / خ - <<< ﲟ / م - <<< ﲠ / ه - <<< ﺒ - <<< ﳡ / م - <<< ﳢ / ه - <<< ﺐ - <<< ﷂ / حي - <<< ﶞ / خي - <<< ﱪ / ر - <<< ﱫ / ز - <<< ﱬ / م - <<< ﱭ / ن - <<< ﱮ / ى - <<< ﱯ / ي - <<< ﺏ - <<< ﰅ / ج - <<< ﰆ / ح - <<< ﰇ / خ - <<< ﰈ / م - <<< ﰉ / ى - <<< ﰊ / ي - < ٻ - <<< ﭔ - <<< ﭕ - <<< ﭓ - <<< ﭒ - < پ - <<< ﭘ - <<< ﭙ - <<< ﭗ - <<< ﭖ - < ڀ - <<< ﭜ - <<< ﭝ - <<< ﭛ - <<< ﭚ - < ة - <<< ﺔ - <<< ﺓ - < ت - <<< ﺗ - <<< ﲡ / ج - <<< ﵐ / جم - <<< ﲢ / ح - <<< ﵒ / حج - <<< ﵓ / حم - <<< ﲣ / خ - <<< ﵔ / خم - <<< ﲤ / م - <<< ﵕ / مج - <<< ﵖ / مح - <<< ﵗ / مخ - <<< ﲥ / ه - <<< ﺘ - <<< ﳣ / م - <<< ﳤ / ه - <<< ﺖ - <<< ﶠ / جى - <<< ﶟ / جي - <<< ﵑ / حج - <<< ﶢ / خى - <<< ﶡ / خي - <<< ﱰ / ر - <<< ﱱ / ز - <<< ﱲ / م - <<< ﶤ / مى - <<< ﶣ / مي - <<< ﱳ / ن - <<< ﱴ / ى - <<< ﱵ / ي - <<< ﺕ - <<< ﰋ / ج - <<< ﰌ / ح - <<< ﰍ / خ - <<< ﰎ / م - <<< ﰏ / ى - <<< ﰐ / ي - < ث - <<< ﺛ - <<< ﲦ / م - <<< ﺜ - <<< ﳥ / م - <<< ﳦ / ه - <<< ﺚ - <<< ﱶ / ر - <<< ﱷ / ز - <<< ﱸ / م - <<< ﱹ / ن - <<< ﱺ / ى - <<< ﱻ / ي - <<< ﺙ - <<< ﰑ / ج - <<< ﰒ / م - <<< ﰓ / ى - <<< ﰔ / ي - < ٹ - <<< ﭨ - <<< ﭩ - <<< ﭧ - <<< ﭦ - < ٺ - <<< ﭠ - <<< ﭡ - <<< ﭟ - <<< ﭞ - < ټ - < ٽ - < ٿ - <<< ﭤ - <<< ﭥ - <<< ﭣ - <<< ﭢ - < ج - <<< ﺟ - <<< ﲧ / ح - <<< ﲨ / م - <<< ﵙ / مح - <<< ﺠ - <<< ﺞ - <<< ﶦ / حى - <<< ﶾ / حي - <<< ﵘ / مح - <<< ﶧ / مى - <<< ﶥ / مي - <<< ﴝ / ى - <<< ﴞ / ي - <<< ﺝ - <<< ﰕ / ح - <<< ﷻ / ل' 'جلاله - <<< ﰖ / م - <<< ﴁ / ى - <<< ﴂ / ي - < ڃ - <<< ﭸ - <<< ﭹ - <<< ﭷ - <<< ﭶ - < ڄ - <<< ﭴ - <<< ﭵ - <<< ﭳ - <<< ﭲ - < چ - <<< ﭼ - <<< ﭽ - <<< ﭻ - <<< ﭺ - < ڿ - < ڇ - <<< ﮀ - <<< ﮁ - <<< ﭿ - <<< ﭾ - < ح - <<< ﺣ - <<< ﲩ / ج - <<< ﲪ / م - <<< ﺤ - <<< ﺢ - <<< ﶿ / جي - <<< ﵛ / مى - <<< ﵚ / مي - <<< ﴛ / ى - <<< ﴜ / ي - <<< ﺡ - <<< ﰗ / ج - <<< ﰘ / م - <<< ﳿ / ى - <<< ﴀ / ي - < خ - <<< ﺧ - <<< ﲫ / ج - <<< ﲬ / م - <<< ﺨ - <<< ﺦ - <<< ﴟ / ى - <<< ﴠ / ي - <<< ﺥ - <<< ﰙ / ج - <<< ﰚ / ح - <<< ﰛ / م - <<< ﴃ / ى - <<< ﴄ / ي - < ځ - < ڂ - < څ - < د - <<< ﺪ - <<< ﺩ - < ذ - <<< ﺬ - <<< ﺫ - <<< ﱛ / ٰ - < ڈ - <<< ﮉ - <<< ﮈ - < ډ - < ڊ - < ڋ - < ڌ - <<< ﮅ - <<< ﮄ - < ڍ - <<< ﮃ - <<< ﮂ - < ڎ - <<< ﮇ - <<< ﮆ - < ڏ - < ڐ - < ۮ - < ر - <<< ﺮ - <<< ﺭ - <<< ﱜ / ٰ - <<< ﷶ / سول - <<< ﷼ / یال - < ز - <<< ﺰ - <<< ﺯ - < ڑ - <<< ﮍ - <<< ﮌ - < ڒ - < ړ - < ڔ - < ڕ - < ږ - < ڗ - < ژ - <<< ﮋ - <<< ﮊ - < ڙ - < ۯ - < س - <<< ﺳ - <<< ﲭ / ج - <<< ﵝ / جح - <<< ﲮ / ح - <<< ﵜ / حج - <<< ﲯ / خ - <<< ﲰ / م - <<< ﵡ / مج - <<< ﵠ / مح - <<< ﵣ / مم - <<< ﴱ / ه - <<< ﺴ - <<< ﴴ / ج - <<< ﴵ / ح - <<< ﴶ / خ - <<< ﳧ / م - <<< ﳨ / ه - <<< ﺲ - <<< ﵞ / جى - <<< ﶨ / خى - <<< ﷆ / خي - <<< ﴪ / ر - <<< ﵟ / مح - <<< ﵢ / مم - <<< ﴗ / ى - <<< ﴘ / ي - <<< ﺱ - <<< ﰜ / ج - <<< ﰝ / ح - <<< ﰞ / خ - <<< ﴎ / ر - <<< ﰟ / م - <<< ﳻ / ى - <<< ﳼ / ي - < ش - <<< ﺷ - <<< ﴭ / ج - <<< ﴮ / ح - <<< ﵨ / حم - <<< ﴯ / خ - <<< ﴰ / م - <<< ﵫ / مخ - <<< ﵭ / مم - <<< ﴲ / ه - <<< ﺸ - <<< ﴷ / ج - <<< ﴸ / ح - <<< ﴹ / خ - <<< ﳩ / م - <<< ﳪ / ه - <<< ﺶ - <<< ﴥ / ج - <<< ﵩ / جي - <<< ﴦ / ح - <<< ﵧ / حم - <<< ﶪ / حي - <<< ﴧ / خ - <<< ﴩ / ر - <<< ﴨ / م - <<< ﵪ / مخ - <<< ﵬ / مم - <<< ﴙ / ى - <<< ﴚ / ي - <<< ﺵ - <<< ﴉ / ج - <<< ﴊ / ح - <<< ﴋ / خ - <<< ﴍ / ر - <<< ﴌ / م - <<< ﳽ / ى - <<< ﳾ / ي - < ښ - < ڛ - < ڜ - < ۺ - < ص - <<< ﺻ - <<< ﲱ / ح - <<< ﵥ / حح - <<< ﲲ / خ - <<< ﲳ / م - <<< ﷅ / مم - <<< ﺼ - <<< ﺺ - <<< ﵤ / حح - <<< ﶩ / حي - <<< ﴫ / ر - <<< ﵦ / مم - <<< ﴡ / ى - <<< ﴢ / ي - <<< ﺹ - <<< ﰠ / ح - <<< ﴏ / ر - <<< ﷵ / لعم - <<< ﷹ / لى - <<< ﷺ / لى' 'الله' 'عليه' 'وسلم - <<< ﷰ / لے - <<< ﰡ / م - <<< ﴅ / ى - <<< ﴆ / ي - < ض - <<< ﺿ - <<< ﲴ / ج - <<< ﲵ / ح - <<< ﲶ / خ - <<< ﵰ / خم - <<< ﲷ / م - <<< ﻀ - <<< ﺾ - <<< ﵮ / حى - <<< ﶫ / حي - <<< ﵯ / خم - <<< ﴬ / ر - <<< ﴣ / ى - <<< ﴤ / ي - <<< ﺽ - <<< ﰢ / ج - <<< ﰣ / ح - <<< ﰤ / خ - <<< ﴐ / ر - <<< ﰥ / م - <<< ﴇ / ى - <<< ﴈ / ي - < ڝ - < ڞ - < ۻ - < ط - <<< ﻃ - <<< ﲸ / ح - <<< ﴳ / م - <<< ﵲ / مح - <<< ﵳ / مم - <<< ﻄ - <<< ﴺ / م - <<< ﻂ - <<< ﵱ / مح - <<< ﵴ / مي - <<< ﴑ / ى - <<< ﴒ / ي - <<< ﻁ - <<< ﰦ / ح - <<< ﰧ / م - <<< ﳵ / ى - <<< ﳶ / ي - < ظ - <<< ﻇ - <<< ﲹ / م - <<< ﻈ - <<< ﴻ / م - <<< ﻆ - <<< ﻅ - <<< ﰨ / م - < ڟ - < ع - <<< ﻋ - <<< ﲺ / ج - <<< ﷄ / جم - <<< ﲻ / م - <<< ﵷ / مم - <<< ﻌ - <<< ﻊ - <<< ﵵ / جم - <<< ﵶ / مم - <<< ﵸ / مى - <<< ﶶ / مي - <<< ﴓ / ى - <<< ﴔ / ي - <<< ﻉ - <<< ﰩ / ج - <<< ﷷ / ليه - <<< ﰪ / م - <<< ﳷ / ى - <<< ﳸ / ي - < غ - <<< ﻏ - <<< ﲼ / ج - <<< ﲽ / م - <<< ﻐ - <<< ﻎ - <<< ﵹ / مم - <<< ﵻ / مى - <<< ﵺ / مي - <<< ﴕ / ى - <<< ﴖ / ي - <<< ﻍ - <<< ﰫ / ج - <<< ﰬ / م - <<< ﳹ / ى - <<< ﳺ / ي - < ڠ - < ۼ - < ف - <<< ﻓ - <<< ﲾ / ج - <<< ﲿ / ح - <<< ﳀ / خ - <<< ﵽ / خم - <<< ﳁ / م - <<< ﻔ - <<< ﻒ - <<< ﵼ / خم - <<< ﷁ / مي - <<< ﱼ / ى - <<< ﱽ / ي - <<< ﻑ - <<< ﰭ / ج - <<< ﰮ / ح - <<< ﰯ / خ - <<< ﰰ / م - <<< ﰱ / ى - <<< ﰲ / ي - < ڡ - < ڢ - < ڣ - < ڤ - <<< ﭬ - <<< ﭭ - <<< ﭫ - <<< ﭪ - < ڥ - < ڦ - <<< ﭰ - <<< ﭱ - <<< ﭯ - <<< ﭮ - < ٯ - < ق - <<< ﻗ - <<< ﳂ / ح - <<< ﳃ / م - <<< ﶴ / مح - <<< ﻘ - <<< ﻖ - <<< ﵾ / مح - <<< ﵿ / مم - <<< ﶲ / مي - <<< ﱾ / ى - <<< ﱿ / ي - <<< ﻕ - <<< ﰳ / ح - <<< ﷱ / لے - <<< ﰴ / م - <<< ﰵ / ى - <<< ﰶ / ي - < ڧ - < ڨ - < ك - <<< ﻛ - <<< ﳄ / ج - <<< ﳅ / ح - <<< ﳆ / خ - <<< ﳇ / ل - <<< ﳈ / م - <<< ﷃ / مم - <<< ﻜ - <<< ﳫ / ل - <<< ﳬ / م - <<< ﻚ - <<< ﲀ / ا - <<< ﲁ / ل - <<< ﲂ / م - <<< ﶻ / مم - <<< ﶷ / مي - <<< ﲃ / ى - <<< ﲄ / ي - <<< ﻙ - <<< ﰷ / ا - <<< ﰸ / ج - <<< ﰹ / ح - <<< ﰺ / خ - <<< ﰻ / ل - <<< ﰼ / م - <<< ﰽ / ى - <<< ﰾ / ي - < ک - <<< ﮐ - <<< ﮑ - <<< ﮏ - <<< ﮎ - < ڪ - < ګ - < ڬ - < ڭ - <<< ﯕ - <<< ﯖ - <<< ﯔ - <<< ﯓ - < ڮ - < گ - <<< ﮔ - <<< ﮕ - <<< ﮓ - <<< ﮒ - < ڰ - < ڱ - <<< ﮜ - <<< ﮝ - <<< ﮛ - <<< ﮚ - < ڲ - < ڳ - <<< ﮘ - <<< ﮙ - <<< ﮗ - <<< ﮖ - < ڴ - < ل - <<< ﻟ - <<< ﳉ / ج - <<< ﶃ / جج - <<< ﶺ / جم - <<< ﳊ / ح - <<< ﶵ / حم - <<< ﳋ / خ - <<< ﶆ / خم - <<< ﳌ / م - <<< ﶈ / مح - <<< ﳍ / ه - <<< ﻠ - <<< ﳭ / م - <<< ﻞ - <<< ﻶ / آ - <<< ﻸ / أ - <<< ﻺ / إ - <<< ﻼ / ا - <<< ﶄ / جج - <<< ﶼ / جم - <<< ﶬ / جي - <<< ﶀ / حم - <<< ﶂ / حى - <<< ﶁ / حي - <<< ﶅ / خم - <<< ﲅ / م - <<< ﶇ / مح - <<< ﶭ / مي - <<< ﲆ / ى - <<< ﲇ / ي - <<< ﻝ - <<< ﻵ / آ - <<< ﻷ / أ - <<< ﻹ / إ - <<< ﻻ / ا - <<< ﰿ / ج - <<< ﱀ / ح - <<< ﱁ / خ - <<< ﱂ / م - <<< ﱃ / ى - <<< ﱄ / ي - < ڵ - < ڶ - < ڷ - < ڸ - < م - <<< ﻣ - <<< ﳎ / ج - <<< ﶌ / جح - <<< ﶒ / جخ - <<< ﶍ / جم - <<< ﳏ / ح - <<< ﶉ / حج - <<< ﶊ / حم - <<< ﳐ / خ - <<< ﶎ / خج - <<< ﶏ / خم - <<< ﳑ / م - <<< ﻤ - <<< ﻢ - <<< ﲈ / ا - <<< ﷀ / جي - <<< ﶋ / حي - <<< ﶹ / خي - <<< ﲉ / م - <<< ﶱ / مي - <<< ﻡ - <<< ﱅ / ج - <<< ﱆ / ح - <<< ﷴ / حمد - <<< ﱇ / خ - <<< ﱈ / م - <<< ﱉ / ى - <<< ﱊ / ي - << ۾ - < ن - <<< ﻧ - <<< ﳒ / ج - <<< ﶸ / جح - <<< ﶘ / جم - <<< ﳓ / ح - <<< ﶕ / حم - <<< ﳔ / خ - <<< ﳕ / م - <<< ﳖ / ه - <<< ﻨ - <<< ﳮ / م - <<< ﳯ / ه - <<< ﻦ - <<< ﶽ / جح - <<< ﶗ / جم - <<< ﶙ / جى - <<< ﷇ / جي - <<< ﶖ / حى - <<< ﶳ / حي - <<< ﲊ / ر - <<< ﲋ / ز - <<< ﲌ / م - <<< ﶛ / مى - <<< ﶚ / مي - <<< ﲍ / ن - <<< ﲎ / ى - <<< ﲏ / ي - <<< ﻥ - <<< ﱋ / ج - <<< ﱌ / ح - <<< ﱍ / خ - <<< ﱎ / م - <<< ﱏ / ى - <<< ﱐ / ي - < ں - <<< ﮟ - <<< ﮞ - < ڻ - <<< ﮢ - <<< ﮣ - <<< ﮡ - <<< ﮠ - < ڼ - < ڽ - < ڹ - < ه - <<< ﻫ - <<< ﳙ / ٰ - <<< ﳗ / ج - <<< ﳘ / م - <<< ﶓ / مج - <<< ﶔ / مم - <<< ﻬ - <<< ﻪ - <<< ﻩ - <<< ﱑ / ج - <<< ﱒ / م - <<< ﱓ / ى - <<< ﱔ / ي - < ھ - <<< ﮬ - <<< ﮭ - <<< ﮫ - <<< ﮪ - < ہ - <<< ﮨ - <<< ﮩ - <<< ﮧ - <<< ﮦ - < ۃ - < ۿ - < ە - <<< ﮥ / ٔ - <<< ﮤ / ٔ - < و - <<< ۥ - <<< ٶ / ء - <<< ﻮ - <<< ﻭ - <<< ﷸ / سلم - < ۄ - < ۅ - <<< ﯡ - <<< ﯠ - < ۆ - <<< ﯚ - <<< ﯙ - < ۇ - <<< ٷ / ء - <<< ﯘ - <<< ﯗ - <<< ﯝ / ء - < ۈ - <<< ﯜ - <<< ﯛ - < ۉ - <<< ﯣ - <<< ﯢ - < ۊ - < ۋ - <<< ﯟ - <<< ﯞ - < ۏ - < ى - <<< ﯨ - <<< ﯩ - <<< ﻰ - <<< ﲐ / ٰ - <<< ﻯ - <<< ﱝ / ٰ - < ي - <<< ۦ - <<< ٸ / ء - <<< ﻳ - <<< ﳚ / ج - <<< ﳛ / ح - <<< ﳜ / خ - <<< ﳝ / م - <<< ﶝ / مم - <<< ﳞ / ه - <<< ﻴ - <<< ﳰ / م - <<< ﳱ / ه - <<< ﻲ - <<< ﶯ / جي - <<< ﶮ / حي - <<< ﲑ / ر - <<< ﲒ / ز - <<< ﲓ / م - <<< ﶜ / مم - <<< ﶰ / مي - <<< ﲔ / ن - <<< ﲕ / ى - <<< ﲖ / ي - <<< ﻱ - <<< ﱕ / ج - <<< ﱖ / ح - <<< ﱗ / خ - <<< ﱘ / م - <<< ﱙ / ى - <<< ﱚ / ي - < ی - <<< ﯾ - <<< ﯿ - <<< ﯽ - <<< ﯼ - < ۍ - < ێ - < ې - <<< ﯦ - <<< ﯧ - <<< ﯥ - <<< ﯤ - < ۑ - < ے - <<< ﮯ - <<< ﮱ / ٔ - <<< ﮮ - <<< ﮰ / ٔ - < ܐ - < ܒ - << ܭ - < ܓ - << ܔ - << ܮ - < ܖ - < ܕ - << ܯ - < ܗ - < ܘ - < ܙ - < ݍ - < ܚ - < ܛ - << ܜ - < ܝ - < ܞ - < ܟ - < ݎ - < ܠ - < ܡ - < ܢ - < ܣ - <<< ܤ - < ܥ - < ܦ - << ܧ - < ݏ - < ܨ - < ܩ - < ܪ - < ܫ - < ܬ - < ހ - < ޙ - < ޚ - < ށ - < ނ - < ރ - < ޜ - < ބ - < ޅ - < ކ - < އ - < ޢ - < ޣ - < ވ - < ޥ - < މ - < ފ - < ދ - < ޛ - < ތ - < ޘ - < ޠ - < ޡ - < ލ - < ގ - < ޤ - < ޏ - < ސ - < ޝ - < ޞ - < ޟ - < ޑ - < ޒ - < ޓ - < ޔ - < ޕ - < ޖ - < ޗ - < ޱ - < ަ - < ާ - < ި - < ީ - < ު - < ޫ - < ެ - < ޭ - < ޮ - < ޯ - < ް - < ሀ - < ሁ - < ሂ - < ሃ - < ሄ - < ህ - < ሆ - < ለ - < ሉ - < ሊ - < ላ - < ሌ - < ል - < ሎ - < ሏ - < ሐ - < ሑ - < ሒ - < ሓ - < ሔ - < ሕ - < ሖ - < ሗ - < መ - < ሙ - < ሚ - < ማ - < ሜ - < ም - < ሞ - < ሟ - < ሠ - < ሡ - < ሢ - < ሣ - < ሤ - < ሥ - < ሦ - < ሧ - < ረ - < ሩ - < ሪ - < ራ - < ሬ - < ር - < ሮ - < ሯ - < ሰ - < ሱ - < ሲ - < ሳ - < ሴ - < ስ - < ሶ - < ሷ - < ሸ - < ሹ - < ሺ - < ሻ - < ሼ - < ሽ - < ሾ - < ሿ - < ቀ - < ቁ - < ቂ - < ቃ - < ቄ - < ቅ - < ቆ - < ቈ - < ቊ - < ቋ - < ቌ - < ቍ - < ቐ - < ቑ - < ቒ - < ቓ - < ቔ - < ቕ - < ቖ - < ቘ - < ቚ - < ቛ - < ቜ - < ቝ - < በ - < ቡ - < ቢ - < ባ - < ቤ - < ብ - < ቦ - < ቧ - < ቨ - < ቩ - < ቪ - < ቫ - < ቬ - < ቭ - < ቮ - < ቯ - < ተ - < ቱ - < ቲ - < ታ - < ቴ - < ት - < ቶ - < ቷ - < ቸ - < ቹ - < ቺ - < ቻ - < ቼ - < ች - < ቾ - < ቿ - < ኀ - < ኁ - < ኂ - < ኃ - < ኄ - < ኅ - < ኆ - < ኈ - < ኊ - < ኋ - < ኌ - < ኍ - < ነ - < ኑ - < ኒ - < ና - < ኔ - < ን - < ኖ - < ኗ - < ኘ - < ኙ - < ኚ - < ኛ - < ኜ - < ኝ - < ኞ - < ኟ - < አ - < ኡ - < ኢ - < ኣ - < ኤ - < እ - < ኦ - < ኧ - < ከ - < ኩ - < ኪ - < ካ - < ኬ - < ክ - < ኮ - < ኰ - < ኲ - < ኳ - < ኴ - < ኵ - < ኸ - < ኹ - < ኺ - < ኻ - < ኼ - < ኽ - < ኾ - < ዀ - < ዂ - < ዃ - < ዄ - < ዅ - < ወ - < ዉ - < ዊ - < ዋ - < ዌ - < ው - < ዎ - < ዐ - < ዑ - < ዒ - < ዓ - < ዔ - < ዕ - < ዖ - < ዘ - < ዙ - < ዚ - < ዛ - < ዜ - < ዝ - < ዞ - < ዟ - < ዠ - < ዡ - < ዢ - < ዣ - < ዤ - < ዥ - < ዦ - < ዧ - < የ - < ዩ - < ዪ - < ያ - < ዬ - < ይ - < ዮ - < ደ - < ዱ - < ዲ - < ዳ - < ዴ - < ድ - < ዶ - < ዷ - < ዸ - < ዹ - < ዺ - < ዻ - < ዼ - < ዽ - < ዾ - < ዿ - < ጀ - < ጁ - < ጂ - < ጃ - < ጄ - < ጅ - < ጆ - < ጇ - < ገ - < ጉ - < ጊ - < ጋ - < ጌ - < ግ - < ጎ - < ጐ - < ጒ - < ጓ - < ጔ - < ጕ - < ጘ - < ጙ - < ጚ - < ጛ - < ጜ - < ጝ - < ጞ - < ጠ - < ጡ - < ጢ - < ጣ - < ጤ - < ጥ - < ጦ - < ጧ - < ጨ - < ጩ - < ጪ - < ጫ - < ጬ - < ጭ - < ጮ - < ጯ - < ጰ - < ጱ - < ጲ - < ጳ - < ጴ - < ጵ - < ጶ - < ጷ - < ጸ - < ጹ - < ጺ - < ጻ - < ጼ - < ጽ - < ጾ - < ጿ - < ፀ - < ፁ - < ፂ - < ፃ - < ፄ - < ፅ - < ፆ - < ፈ - < ፉ - < ፊ - < ፋ - < ፌ - < ፍ - < ፎ - < ፏ - < ፐ - < ፑ - < ፒ - < ፓ - < ፔ - < ፕ - < ፖ - < ፗ - < ፘ - < ፙ - < ፚ - < ॐ - < ऄ - < अ - < आ - < इ - < ई - < उ - < ऊ - < ऋ - < ॠ - < ऌ - < ॡ - < ऍ - < ऎ - < ए - < ऐ - < ऑ - < ऒ - < ओ - < औ - < क - < ख - < ग - < घ - < ङ - < च - < छ - < ज - < झ - < ञ - < ट - < ठ - < ड - < ढ - < ण - < त - < थ - < द - < ध - < न - < प - < फ - < ब - < भ - < म - < य - < र - < ल - < ळ - < व - < श - < ष - < स - < ह - < ऽ - < ा - < ि - < ी - < ु - < ू - < ृ - < ॄ - < ॢ - < ॣ - < ॅ - < ॆ - < े - < ै - < ॉ - < ॊ - < ो - < ौ - < ् - < অ - < আ - < ই - < ঈ - < উ - < ঊ - < ঋ - < ৠ - < ঌ - < ৡ - < এ - < ঐ - < ও - < ঔ - < ক - < খ - < গ - < ঘ - < ঙ - < চ - < ছ - < জ - < ঝ - < ঞ - < ট - < ঠ - < ড - < ঢ - < ণ - < ত - < থ - < দ - < ধ - < ন - < প - < ফ - < ব - < ভ - < ম - < য - < র - < ৰ - < ল - < ৱ - < শ - < ষ - < স - < হ - < ঽ - < া - < ি - < ী - < ু - < ূ - < ৃ - < ৄ - < ৢ - < ৣ - < ে - < ৈ - < ো - < ৌ - < ্ - < ৗ - < ੴ - < ੳ - < ਉ - < ਊ - < ਓ - < ਅ - < ਆ - < ਐ - < ਔ - < ੲ - < ਇ - < ਈ - < ਏ - < ਸ - < ਹ - < ਕ - < ਖ - < ਗ - < ਘ - < ਙ - < ਚ - < ਛ - < ਜ - < ਝ - < ਞ - < ਟ - < ਠ - < ਡ - < ਢ - < ਣ - < ਤ - < ਥ - < ਦ - < ਧ - < ਨ - < ਪ - < ਫ - < ਬ - < ਭ - < ਮ - < ਯ - < ਰ - < ਲ - < ਵ - < ੜ - < ਾ - < ਿ - < ੀ - < ੁ - < ੂ - < ੇ - < ੈ - < ੋ - < ੌ - < ੍ - < ૐ - < અ - < આ - < ઇ - < ઈ - < ઉ - < ઊ - < ઋ - < ૠ - < ઌ - < ૡ - < ઍ - < એ - < ઐ - < ઑ - < ઓ - < ઔ - < ક - < ખ - < ગ - < ઘ - < ઙ - < ચ - < છ - < જ - < ઝ - < ઞ - < ટ - < ઠ - < ડ - < ઢ - < ણ - < ત - < થ - < દ - < ધ - < ન - < પ - < ફ - < બ - < ભ - < મ - < ય - < ર - < લ - < ળ - < વ - < શ - < ષ - < સ - < હ - < ઽ - < ા - < િ - < ી - < ુ - < ૂ - < ૃ - < ૄ - < ૢ - < ૣ - < ૅ - < ે - < ૈ - < ૉ - < ો - < ૌ - < ્ - < ଅ - < ଆ - < ଇ - < ଈ - < ଉ - < ଊ - < ଋ - < ୠ - < ଌ - < ୡ - < ଏ - < ଐ - < ଓ - < ଔ - < କ - < ଖ - < ଗ - < ଘ - < ଙ - < ଚ - < ଛ - < ଜ - < ଝ - < ଞ - < ଟ - < ଠ - < ଡ - < ଢ - < ଣ - < ତ - < ଥ - < ଦ - < ଧ - < ନ - < ପ - < ଫ - < ବ - < ଭ - < ମ - < ଯ - < ୟ - < ର - < ଲ - < ଳ - < ଵ - < ୱ - < ଶ - < ଷ - < ସ - < ହ - < ଽ - < ା - < ି - < ୀ - < ୁ - < ୂ - < ୃ - < େ - < ୈ - < ୋ - < ୌ - < ୍ - < ୖ - < ୗ - < ஃ - < அ - < ஆ - < இ - < ஈ - < உ - < ஊ - < எ - < ஏ - < ஐ - < ஒ - < ஓ - < ஔ - < க - < ங - < ச - < ஜ - < ஞ - < ட - < ண - < த - < ந - < ன - < ப - < ம - < ய - < ர - < ற - < ல - < ள - < ழ - < வ - < ஷ - < ஸ - < ஹ - < ா - < ி - < ீ - < ு - < ூ - < ெ - < ே - < ை - < ொ - < ோ - < ௌ - < ் - < ௗ - < అ - < ఆ - < ఇ - < ఈ - < ఉ - < ఊ - < ఋ - < ౠ - < ఌ - < ౡ - < ఎ - < ఏ - < ఐ - < ఒ - < ఓ - < ఔ - < క - < ఖ - < గ - < ఘ - < ఙ - < చ - < ఛ - < జ - < ఝ - < ఞ - < ట - < ఠ - < డ - < ఢ - < ణ - < త - < థ - < ద - < ధ - < న - < ప - < ఫ - < బ - < భ - < మ - < య - < ర - < ఱ - < ల - < ళ - < వ - < శ - < ష - < స - < హ - < ా - < ి - < ీ - < ు - < ూ - < ృ - < ౄ - < ె - < ే - < ై - < ొ - < ో - < ౌ - < ్ - < ౕ - < ౖ - < ಅ - < ಆ - < ಇ - < ಈ - < ಉ - < ಊ - < ಋ - < ೠ - < ಌ - < ೡ - < ಎ - < ಏ - < ಐ - < ಒ - < ಓ - < ಔ - < ಕ - < ಖ - < ಗ - < ಘ - < ಙ - < ಚ - < ಛ - < ಜ - < ಝ - < ಞ - < ಟ - < ಠ - < ಡ - < ಢ - < ಣ - < ತ - < ಥ - < ದ - < ಧ - < ನ - < ಪ - < ಫ - < ಬ - < ಭ - < ಮ - < ಯ - < ರ - < ಱ - < ಲ - < ವ - < ಶ - < ಷ - < ಸ - < ಹ - < ಽ - < ಳ - < ೞ - < ಾ - < ಿ - < ೀ - < ು - < ೂ - < ೃ - < ೄ - < ೆ - < ೇ - < ೈ - < ೊ - < ೋ - < ೌ - < ್ - < ೕ - < ೖ - < അ - < ആ - < ഇ - < ഈ - < ഉ - < ഊ - < ഋ - < ൠ - < ഌ - < ൡ - < എ - < ഏ - < ഐ - < ഒ - < ഓ - < ഔ - < ക - < ഖ - < ഗ - < ഘ - < ങ - < ച - < ഛ - < ജ - < ഝ - < ഞ - < ട - < ഠ - < ഡ - < ഢ - < ണ - < ത - < ഥ - < ദ - < ധ - < ന - < പ - < ഫ - < ബ - < ഭ - < മ - < യ - < ര - < റ - < ല - < ള - < ഴ - < വ - < ശ - < ഷ - < സ - < ഹ - < ാ - < ി - < ീ - < ു - < ൂ - < ൃ - < െ - < േ - < ൈ - < ൊ - < ോ - < ൌ - < ് - < ൗ - < අ - < ආ - < ඇ - < ඈ - < ඉ - < ඊ - < උ - < ඌ - < ඍ - < ඎ - < ඏ - < ඐ - < එ - < ඒ - < ඓ - < ඔ - < ඕ - < ඖ - < ක - < ඛ - < ග - < ඝ - < ඞ - < ඟ - < ච - < ඡ - < ජ - < ඣ - < ඤ - < ඥ - < ඦ - < ට - < ඨ - < ඩ - < ඪ - < ණ - < ඬ - < ත - < ථ - < ද - < ධ - < න - < ඳ - < ප - < ඵ - < බ - < භ - < ම - < ඹ - < ය - < ර - < ල - < ව - < ශ - < ෂ - < ස - < හ - < ළ - < ෆ - < ් - < ා - < ැ - < ෑ - < ි - < ී - < ු - < ූ - < ෘ - < ෙ - < ේ - < ෛ - < ො - < ෝ - < ෞ - < ෟ - < ෲ - < ෳ - < ก - < ข - < ฃ - < ค - < ฅ - < ฆ - < ง - < จ - < ฉ - < ช - < ซ - < ฌ - < ญ - < ฎ - < ฏ - < ฐ - < ฑ - < ฒ - < ณ - < ด - < ต - < ถ - < ท - < ธ - < น - < บ - < ป - < ผ - < ฝ - < พ - < ฟ - < ภ - < ม - < ย - < ร - < ฤ - < ล - < ฦ - < ว - < ศ - < ษ - < ส - < ห - < ฬ - < อ - < ฮ - < ฯ - < ะ - < ั - < า - < ำ - = ํา - < ิ - < ี - < ึ - < ื - < ุ - < ู - < ฺ - < เ - < แ - < โ - < ใ - < ไ - < ๅ - < ์ - < ํ - < ກ - < ຂ - < ຄ - < ງ - < ຈ - < ຊ - < ຍ - < ດ - < ຕ - < ຖ - < ທ - < ນ - < ບ - < ປ - < ຜ - < ຝ - < ພ - < ຟ - < ມ - < ຢ - < ຣ - < ລ - < ວ - < ສ - < ຫ - <<< ໜ / ນ - <<< ໝ / ມ - < ອ - < ຮ - < ຯ - < ະ - < ັ - < າ - < ຳ - = ໍາ - < ິ - < ີ - < ຶ - < ື - < ຸ - < ູ - < ົ - < ຼ - < ຽ - < ເ - < ແ - < ໂ - < ໃ - < ໄ - < ໌ - < ໍ - < ཀ - < ྐ - < ཁ - < ྑ - < ག - < ྒ - < ང - < ྔ - < ཅ - < ྕ - < ཆ - < ྖ - < ཇ - < ྗ - < ཉ - < ྙ - < ཊ - < ྚ - < ཋ - < ྛ - < ཌ - < ྜ - < ཎ - < ྞ - < ཏ - < ྟ - < ཐ - < ྠ - < ད - < ྡ - < ན - < ྣ - < པ - < ྤ - < ཕ - < ྥ - < བ - < ྦ - < མ - < ྨ - < ཙ - < ྩ - < ཚ - < ྪ - < ཛ - < ྫ - < ཝ - < ྭ - << ྺ - < ཞ - < ྮ - < ཟ - < ྯ - < འ - < ྰ - < ཡ - < ྱ - << ྻ - < ར - << ཪ - < ྲ - <<< ྲཱ / ཱ - << ྼ - < ལ - < ླ - <<< ླཱ / ཱ - < ཤ - < ྴ - < ཥ - < ྵ - < ས - < ྶ - < ཧ - < ྷ - < ཨ - <<< ༀ / ོཾ - < ྸ - < ྈ - < ྉ - < ྊ - < ྋ - < ཱ - < ི - < ཱི - < ྀ - < ཱྀ - < ུ - < ཱུ - < ྲྀ - < ཷ - = ྲཱྀ - < ླྀ - < ཹ - = ླཱྀ - < ེ - < ཻ - < ོ - < ཽ - < ྄ - < ᤀ - < ᤁ - < ᤂ - < ᤃ - < ᤄ - < ᤅ - < ᤆ - < ᤇ - < ᤈ - < ᤉ - < ᤊ - < ᤋ - < ᤌ - < ᤍ - < ᤎ - < ᤏ - < ᤐ - < ᤑ - < ᤒ - < ᤓ - < ᤔ - < ᤕ - < ᤖ - < ᤗ - < ᤘ - < ᤙ - < ᤚ - < ᤛ - < ᤜ - < ᤠ - < ᤡ - < ᤢ - < ᤣ - < ᤤ - < ᤥ - < ᤦ - < ᤧ - < ᤨ - < ᤩ - < ᤪ - < ᤫ - < ᤰ - < ᤱ - < ᤲ - < ᤳ - < ᤴ - < ᤵ - < ᤶ - < ᤷ - < ᤸ - < ᜀ - < ᜁ - < ᜂ - < ᜃ - < ᜄ - < ᜅ - < ᜆ - < ᜇ - < ᜈ - < ᜉ - < ᜊ - < ᜋ - < ᜌ - < ᜎ - < ᜏ - < ᜐ - < ᜑ - < ᜒ - < ᜓ - < ᜔ - < ᜠ - < ᜡ - < ᜢ - < ᜣ - < ᜤ - < ᜥ - < ᜦ - < ᜧ - < ᜨ - < ᜩ - < ᜪ - < ᜫ - < ᜬ - < ᜭ - < ᜮ - < ᜯ - < ᜰ - < ᜱ - < ᜲ - < ᜳ - < ᜴ - < ᝀ - < ᝁ - < ᝂ - < ᝃ - < ᝄ - < ᝅ - < ᝆ - < ᝇ - < ᝈ - < ᝉ - < ᝊ - < ᝋ - < ᝌ - < ᝍ - < ᝎ - < ᝏ - < ᝐ - < ᝑ - < ᝒ - < ᝓ - < ᝠ - < ᝡ - < ᝢ - < ᝣ - < ᝤ - < ᝥ - < ᝦ - < ᝧ - < ᝨ - < ᝩ - < ᝪ - < ᝫ - < ᝬ - < ᝮ - < ᝯ - < ᝰ - < ᝲ - < ᝳ - < က - < ခ - < ဂ - < ဃ - < င - < စ - < ဆ - < ဇ - < ဈ - < ဉ - < ည - < ဋ - < ဌ - < ဍ - < ဎ - < ဏ - < တ - < ထ - < ဒ - < ဓ - < န - < ပ - < ဖ - < ဗ - < ဘ - < မ - < ယ - < ရ - < လ - < ဝ - < ၐ - < ၑ - < သ - < ဟ - < ဠ - < အ - < ဣ - < ဤ - < ဥ - < ဦ - < ဧ - < ဩ - < ဪ - < ၒ - < ၓ - < ၔ - < ၕ - < ာ - < ိ - < ီ - < ု - < ူ - < ေ - < ဲ - < ၖ - < ၗ - < ၘ - < ၙ - < ္ - < ក - < ខ - < គ - < ឃ - < ង - < ច - < ឆ - < ជ - < ឈ - < ញ - < ដ - < ឋ - < ឌ - < ឍ - < ណ - < ត - < ថ - < ទ - < ធ - < ន - < ប - < ផ - < ព - < ភ - < ម - < យ - < រ - < ល - < វ - < ឝ - < ឞ - < ស - < ហ - < ឡ - < អ - < ៜ - < ឣ - < ឤ - < ឥ - < ឦ - < ឧ - < ឨ - < ឩ - < ឪ - < ឫ - < ឬ - < ឭ - < ឮ - < ឯ - < ឰ - < ឱ - < ឲ - < ឳ - < '឴' - < '឵' - < ា - < ិ - < ី - < ឹ - < ឺ - < ុ - < ូ - < ួ - < ើ - < ឿ - < ៀ - < េ - < ែ - < ៃ - < ោ - < ៅ - < ្ - < ᥐ - < ᥑ - < ᥒ - < ᥓ - < ᥔ - < ᥕ - < ᥖ - < ᥗ - < ᥘ - < ᥙ - < ᥚ - < ᥛ - < ᥜ - < ᥝ - < ᥞ - < ᥟ - < ᥠ - < ᥡ - < ᥢ - < ᥣ - < ᥤ - < ᥥ - < ᥦ - < ᥧ - < ᥨ - < ᥩ - < ᥪ - < ᥫ - < ᥬ - < ᥭ - < ᥰ - < ᥱ - < ᥲ - < ᥳ - < ᥴ - < ᢀ - < ᢁ - < ᢂ - < ᢃ - < ᢄ - < ᢅ - < ᢆ - < ᡃ - < ᠠ - < ᢇ - < ᠡ - < ᡄ - < ᡝ - < ᠢ - < ᡅ - < ᡞ - < ᡳ - < ᢈ - < ᡟ - < ᠣ - < ᡆ - < ᠤ - < ᡇ - < ᡡ - < ᠥ - < ᡈ - < ᠦ - < ᡉ - < ᡠ - < ᠧ - < ᠨ - < ᠩ - < ᡊ - < ᡢ - < ᢊ - < ᢛ - < ᠪ - < ᡋ - < ᠫ - < ᡌ - < ᡦ - < ᠬ - < ᡍ - < ᠭ - < ᡎ - < ᡤ - < ᢚ - < ᡥ - < ᠮ - < ᡏ - < ᠯ - < ᠰ - < ᠱ - < ᡧ - < ᢜ - < ᢝ - < ᢢ - < ᢤ - < ᢥ - < ᠲ - < ᡐ - < ᡨ - < ᠳ - < ᡑ - < ᡩ - < ᠴ - < ᡒ - < ᡱ - < ᡜ - < ᢋ - < ᠵ - < ᡓ - < ᡪ - < ᡷ - < ᠶ - < ᡕ - < ᡲ - < ᠷ - < ᡵ - < ᠸ - < ᡖ - < ᠹ - < ᡫ - < ᡶ - < ᠺ - < ᡗ - < ᡣ - < ᡴ - < ᢉ - < ᠻ - < ᠼ - < ᡔ - < ᡮ - < ᠽ - < ᡯ - < ᡘ - < ᡬ - < ᠾ - < ᡙ - < ᡭ - < ᠿ - < ᡀ - < ᡁ - < ᡂ - < ᡚ - < ᡛ - < ᡰ - < ᢌ - < ᢞ - < ᢍ - < ᢎ - < ᢟ - < ᢏ - < ᢐ - < ᢘ - < ᢠ - < ᢑ - < ᢡ - < ᢒ - < ᢓ - < ᢨ - < ᢔ - < ᢣ - < ᢕ - < ᢙ - < ᢖ - < ᢗ - < ᢦ - < ᢧ - < ᢩ - < Ꭰ - < Ꭱ - < Ꭲ - < Ꭳ - < Ꭴ - < Ꭵ - < Ꭶ - < Ꭷ - < Ꭸ - < Ꭹ - < Ꭺ - < Ꭻ - < Ꭼ - < Ꭽ - < Ꭾ - < Ꭿ - < Ꮀ - < Ꮁ - < Ꮂ - < Ꮃ - < Ꮄ - < Ꮅ - < Ꮆ - < Ꮇ - < Ꮈ - < Ꮉ - < Ꮊ - < Ꮋ - < Ꮌ - < Ꮍ - < Ꮎ - < Ꮏ - < Ꮐ - < Ꮑ - < Ꮒ - < Ꮓ - < Ꮔ - < Ꮕ - < Ꮖ - < Ꮗ - < Ꮘ - < Ꮙ - < Ꮚ - < Ꮛ - < Ꮜ - < Ꮝ - < Ꮞ - < Ꮟ - < Ꮠ - < Ꮡ - < Ꮢ - < Ꮣ - < Ꮤ - < Ꮥ - < Ꮦ - < Ꮧ - < Ꮨ - < Ꮩ - < Ꮪ - < Ꮫ - < Ꮬ - < Ꮭ - < Ꮮ - < Ꮯ - < Ꮰ - < Ꮱ - < Ꮲ - < Ꮳ - < Ꮴ - < Ꮵ - < Ꮶ - < Ꮷ - < Ꮸ - < Ꮹ - < Ꮺ - < Ꮻ - < Ꮼ - < Ꮽ - < Ꮾ - < Ꮿ - < Ᏸ - < Ᏹ - < Ᏺ - < Ᏻ - < Ᏼ - < ᐁ - < ᐂ - < ᐃ - < ᐄ - < ᐅ - < ᐆ - < ᐇ - < ᐈ - < ᐉ - < ᐊ - < ᐋ - < ᐌ - < ᐍ - < ᐎ - < ᐏ - < ᐐ - < ᐑ - < ᐒ - < ᐓ - < ᐔ - < ᐕ - < ᐖ - < ᐗ - < ᐘ - < ᐙ - < ᐚ - < ᐛ - < ᐜ - < ᐝ - < ᐞ - < ᐟ - < ᐠ - < ᐡ - < ᐢ - < ᐣ - < ᐤ - < ᐥ - < ᐦ - < ᐧ - < ᐨ - < ᐩ - < ᐪ - < ᐫ - < ᐬ - < ᐭ - < ᐮ - < ᐯ - < ᐰ - < ᐱ - < ᐲ - < ᐳ - < ᐴ - < ᐵ - < ᐶ - < ᐷ - < ᐸ - < ᐹ - < ᐺ - < ᐻ - < ᐼ - < ᐽ - < ᐾ - < ᐿ - < ᑀ - < ᑁ - < ᑂ - < ᑃ - < ᑄ - < ᑅ - < ᑆ - < ᑇ - < ᑈ - < ᑉ - < ᑊ - < ᑋ - < ᑌ - < ᑍ - < ᑎ - < ᑏ - < ᑐ - < ᑑ - < ᑒ - < ᑓ - < ᑔ - < ᑕ - < ᑖ - < ᑗ - < ᑘ - < ᑙ - < ᑚ - < ᑛ - < ᑜ - < ᑝ - < ᑞ - < ᑟ - < ᑠ - < ᑡ - < ᑢ - < ᑣ - < ᑤ - < ᑥ - < ᑦ - < ᑧ - < ᑨ - < ᑩ - < ᑪ - < ᑫ - < ᑬ - < ᑭ - < ᑮ - < ᑯ - < ᑰ - < ᑱ - < ᑲ - < ᑳ - < ᑴ - < ᑵ - < ᑶ - < ᑷ - < ᑸ - < ᑹ - < ᑺ - < ᑻ - < ᑼ - < ᑽ - < ᑾ - < ᑿ - < ᒀ - < ᒁ - < ᒂ - < ᒃ - < ᒄ - < ᒅ - < ᒆ - < ᒇ - < ᒈ - < ᒉ - < ᒊ - < ᒋ - < ᒌ - < ᒍ - < ᒎ - < ᒏ - < ᒐ - < ᒑ - < ᒒ - < ᒓ - < ᒔ - < ᒕ - < ᒖ - < ᒗ - < ᒘ - < ᒙ - < ᒚ - < ᒛ - < ᒜ - < ᒝ - < ᒞ - < ᒟ - < ᒠ - < ᒡ - < ᒢ - < ᒣ - < ᒤ - < ᒥ - < ᒦ - < ᒧ - < ᒨ - < ᒩ - < ᒪ - < ᒫ - < ᒬ - < ᒭ - < ᒮ - < ᒯ - < ᒰ - < ᒱ - < ᒲ - < ᒳ - < ᒴ - < ᒵ - < ᒶ - < ᒷ - < ᒸ - < ᒹ - < ᒺ - < ᒻ - < ᒼ - < ᒽ - < ᒾ - < ᒿ - < ᓀ - < ᓁ - < ᓂ - < ᓃ - < ᓄ - < ᓅ - < ᓆ - < ᓇ - < ᓈ - < ᓉ - < ᓊ - < ᓋ - < ᓌ - < ᓍ - < ᓎ - < ᓏ - < ᓐ - < ᓑ - < ᓒ - < ᓓ - < ᓔ - < ᓕ - < ᓖ - < ᓗ - < ᓘ - < ᓙ - < ᓚ - < ᓛ - < ᓜ - < ᓝ - < ᓞ - < ᓟ - < ᓠ - < ᓡ - < ᓢ - < ᓣ - < ᓤ - < ᓥ - < ᓦ - < ᓧ - < ᓨ - < ᓩ - < ᓪ - < ᓫ - < ᓬ - < ᓭ - < ᓮ - < ᓯ - < ᓰ - < ᓱ - < ᓲ - < ᓳ - < ᓴ - < ᓵ - < ᓶ - < ᓷ - < ᓸ - < ᓹ - < ᓺ - < ᓻ - < ᓼ - < ᓽ - < ᓾ - < ᓿ - < ᔀ - < ᔁ - < ᔂ - < ᔃ - < ᔄ - < ᔅ - < ᔆ - < ᔇ - < ᔈ - < ᔉ - < ᔊ - < ᔋ - < ᔌ - < ᔍ - < ᔎ - < ᔏ - < ᔐ - < ᔑ - < ᔒ - < ᔓ - < ᔔ - < ᔕ - < ᔖ - < ᔗ - < ᔘ - < ᔙ - < ᔚ - < ᔛ - < ᔜ - < ᔝ - < ᔞ - < ᔟ - < ᔠ - < ᔡ - < ᔢ - < ᔣ - < ᔤ - < ᔥ - < ᔦ - < ᔧ - < ᔨ - < ᔩ - < ᔪ - < ᔫ - < ᔬ - < ᔭ - < ᔮ - < ᔯ - < ᔰ - < ᔱ - < ᔲ - < ᔳ - < ᔴ - < ᔵ - < ᔶ - < ᔷ - < ᔸ - < ᔹ - < ᔺ - < ᔻ - < ᔼ - < ᔽ - < ᔾ - < ᔿ - < ᕀ - < ᕁ - < ᕂ - < ᕃ - < ᕄ - < ᕅ - < ᕆ - < ᕇ - < ᕈ - < ᕉ - < ᕊ - < ᕋ - < ᕌ - < ᕍ - < ᕎ - < ᕏ - < ᕐ - < ᕑ - < ᕒ - < ᕓ - < ᕔ - < ᕕ - < ᕖ - < ᕗ - < ᕘ - < ᕙ - < ᕚ - < ᕛ - < ᕜ - < ᕝ - < ᕞ - < ᕟ - < ᕠ - < ᕡ - < ᕢ - < ᕣ - < ᕤ - < ᕥ - < ᕦ - < ᕧ - < ᕨ - < ᕩ - < ᕪ - < ᕫ - < ᕬ - < ᕭ - < ᕮ - < ᕯ - < ᕰ - < ᕱ - < ᕲ - < ᕳ - < ᕴ - < ᕵ - < ᕶ - < ᕷ - < ᕸ - < ᕹ - < ᕺ - < ᕻ - < ᕽ - < ᙯ - < ᕾ - < ᕿ - < ᖀ - < ᖁ - < ᖂ - < ᖃ - < ᖄ - < ᖅ - < ᖆ - < ᖇ - < ᖈ - < ᖉ - < ᖊ - < ᖋ - < ᖌ - < ᖍ - < ᙰ - < ᖎ - < ᖏ - < ᖐ - < ᖑ - < ᖒ - < ᖓ - < ᖔ - < ᖕ - < ᙱ - < ᙲ - < ᙳ - < ᙴ - < ᙵ - < ᙶ - < ᖖ - < ᖗ - < ᖘ - < ᖙ - < ᖚ - < ᖛ - < ᖜ - < ᖝ - < ᖞ - < ᖟ - < ᖠ - < ᖡ - < ᖢ - < ᖣ - < ᖤ - < ᖥ - < ᖦ - < ᕼ - < ᖧ - < ᖨ - < ᖩ - < ᖪ - < ᖫ - < ᖬ - < ᖭ - < ᖮ - < ᖯ - < ᖰ - < ᖱ - < ᖲ - < ᖳ - < ᖴ - < ᖵ - < ᖶ - < ᖷ - < ᖸ - < ᖹ - < ᖺ - < ᖻ - < ᖼ - < ᖽ - < ᖾ - < ᖿ - < ᗀ - < ᗁ - < ᗂ - < ᗃ - < ᗄ - < ᗅ - < ᗆ - < ᗇ - < ᗈ - < ᗉ - < ᗊ - < ᗋ - < ᗌ - < ᗍ - < ᗎ - < ᗏ - < ᗐ - < ᗑ - < ᗒ - < ᗓ - < ᗔ - < ᗕ - < ᗖ - < ᗗ - < ᗘ - < ᗙ - < ᗚ - < ᗛ - < ᗜ - < ᗝ - < ᗞ - < ᗟ - < ᗠ - < ᗡ - < ᗢ - < ᗣ - < ᗤ - < ᗥ - < ᗦ - < ᗧ - < ᗨ - < ᗩ - < ᗪ - < ᗫ - < ᗬ - < ᗭ - < ᗮ - < ᗯ - < ᗰ - < ᗱ - < ᗲ - < ᗳ - < ᗴ - < ᗵ - < ᗶ - < ᗷ - < ᗸ - < ᗹ - < ᗺ - < ᗻ - < ᗼ - < ᗽ - < ᗾ - < ᗿ - < ᘀ - < ᘁ - < ᘂ - < ᘃ - < ᘄ - < ᘅ - < ᘆ - < ᘇ - < ᘈ - < ᘉ - < ᘊ - < ᘋ - < ᘌ - < ᘍ - < ᘎ - < ᘏ - < ᘐ - < ᘑ - < ᘒ - < ᘓ - < ᘔ - < ᘕ - < ᘖ - < ᘗ - < ᘘ - < ᘙ - < ᘚ - < ᘛ - < ᘜ - < ᘝ - < ᘞ - < ᘟ - < ᘠ - < ᘡ - < ᘢ - < ᘣ - < ᘤ - < ᘥ - < ᘦ - < ᘧ - < ᘨ - < ᘩ - < ᘪ - < ᘫ - < ᘬ - < ᘭ - < ᘮ - < ᘯ - < ᘰ - < ᘱ - < ᘲ - < ᘳ - < ᘴ - < ᘵ - < ᘶ - < ᘷ - < ᘸ - < ᘹ - < ᘺ - < ᘻ - < ᘼ - < ᘽ - < ᘾ - < ᘿ - < ᙀ - < ᙁ - < ᙂ - < ᙃ - < ᙄ - < ᙅ - < ᙆ - < ᙇ - < ᙈ - < ᙉ - < ᙊ - < ᙋ - < ᙌ - < ᙍ - < ᙎ - < ᙏ - < ᙐ - < ᙑ - < ᙒ - < ᙓ - < ᙔ - < ᙕ - < ᙖ - < ᙗ - < ᙘ - < ᙙ - < ᙚ - < ᙛ - < ᙜ - < ᙝ - < ᙞ - < ᙟ - < ᙠ - < ᙡ - < ᙢ - < ᙣ - < ᙤ - < ᙥ - < ᙦ - < ᙧ - < ᙨ - < ᙩ - < ᙪ - < ᙫ - < ᙬ - < ᚁ - < ᚂ - < ᚃ - < ᚄ - < ᚅ - < ᚆ - < ᚇ - < ᚈ - < ᚉ - < ᚊ - < ᚋ - < ᚌ - < ᚍ - < ᚎ - < ᚏ - < ᚐ - < ᚑ - < ᚒ - < ᚓ - < ᚔ - < ᚕ - < ᚖ - < ᚗ - < ᚘ - < ᚙ - < ᚚ - < ᚠ - << ᚡ - < ᚢ - << ᚤ - << ᚥ - < ᚦ - <<< ᛰ / ᚦ - << ᚧ - < ᚨ - << ᚩ - << ᚬ - << ᚭ - << ᚮ - < ᚯ - < ᚰ - < ᚱ - < ᚲ - << ᚳ - << ᚴ - << ᚵ - << ᚶ - < ᚷ - < ᚹ - << ᛩ - < ᚺ - << ᚻ - << ᚼ - << ᚽ - < ᚾ - << ᚿ - << ᛀ - < ᛁ - << ᛂ - < ᛃ - << ᛄ - < ᛅ - <<< ᛮ / ᛚ - << ᛆ - < ᛇ - < ᛈ - << ᛕ - < ᛉ - < ᛊ - << ᛋ - << ᛪ - << ᛌ - << ᛍ - << ᛎ - < ᛏ - << ᛐ - << ᛑ - < ᛒ - << ᛓ - << ᛔ - < ᛖ - < ᛗ - << ᛘ - <<< ᛯ / ᛗ - << ᛙ - < ᛚ - << ᛛ - < ᛜ - << ᛝ - < ᛞ - < ᛟ - < ᚪ - < ᚫ - < ᚣ - < ᛠ - < ᛣ - < ᚸ - < ᛤ - < ᛡ - < ᛢ - < ᛥ - < ᛦ - << ᛧ - << ᛨ - < ᄀ - <<< ㄱ - <<< ㉠ - <<< ㉮ / ᅡ - <<< ᄀ - < ᄁ - <<< ㄲ - <<< ᄁ - < ᄂ - <<< ㄴ - <<< ㉡ - <<< ㉯ / ᅡ - <<< ᄂ - < ᄃ - <<< ㄷ - <<< ㉢ - <<< ㉰ / ᅡ - <<< ᄃ - < ᄄ - <<< ㄸ - <<< ᄄ - < ᄅ - <<< ㄹ - <<< ㉣ - <<< ㉱ / ᅡ - <<< ᄅ - < ᄆ - <<< ㅁ - <<< ㉤ - <<< ㉲ / ᅡ - <<< ᄆ - < ᄇ - <<< ㅂ - <<< ㉥ - <<< ㉳ / ᅡ - <<< ᄇ - < ᄈ - <<< ㅃ - <<< ᄈ - < ᄉ - <<< ㅅ - <<< ㉦ - <<< ㉴ / ᅡ - <<< ᄉ - < ᄊ - <<< ㅆ - <<< ᄊ - < ᄋ - <<< ㅇ - <<< ㉧ - <<< ㉵ / ᅡ - <<< ᄋ - < ᄌ - <<< ㅈ - <<< ㉨ - <<< ㉶ / ᅡ - <<< ㉽ / ᅮ의 - <<< ᄌ - < ᄍ - <<< ㅉ - <<< ᄍ - < ᄎ - <<< ㅊ - <<< ㉩ - <<< ㉷ / ᅡ - <<< ㉼ / ᅡᆷ고 - <<< ᄎ - < ᄏ - <<< ㅋ - <<< ㉪ - <<< ㉸ / ᅡ - <<< ᄏ - < ᄐ - <<< ㅌ - <<< ㉫ - <<< ㉹ / ᅡ - <<< ᄐ - < ᄑ - <<< ㅍ - <<< ㉬ - <<< ㉺ / ᅡ - <<< ᄑ - < ᄒ - <<< ㅎ - <<< ㉭ - <<< ㉻ / ᅡ - <<< ᄒ - < ᄓ - < ᄔ - <<< ㅥ - < ᄕ - <<< ㅦ - < ᄖ - < ᄗ - < ᄘ - < ᄙ - < ᄚ - <<< ㅀ - <<< ᄚ - < ᄛ - < ᄜ - <<< ㅮ - < ᄝ - <<< ㅱ - < ᄞ - <<< ㅲ - < ᄟ - < ᄠ - <<< ㅳ - < ᄡ - <<< ㅄ - <<< ᄡ - < ᄢ - <<< ㅴ - < ᄣ - <<< ㅵ - < ᄤ - < ᄥ - < ᄦ - < ᄧ - <<< ㅶ - < ᄨ - < ᄩ - <<< ㅷ - < ᄪ - < ᄫ - <<< ㅸ - < ᄬ - <<< ㅹ - < ᄭ - <<< ㅺ - < ᄮ - <<< ㅻ - < ᄯ - <<< ㅼ - < ᄰ - < ᄱ - < ᄲ - <<< ㅽ - < ᄳ - < ᄴ - < ᄵ - < ᄶ - <<< ㅾ - < ᄷ - < ᄸ - < ᄹ - < ᄺ - < ᄻ - < ᄼ - < ᄽ - < ᄾ - < ᄿ - < ᅀ - <<< ㅿ - < ᅁ - < ᅂ - < ᅃ - < ᅄ - < ᅅ - < ᅆ - < ᅇ - <<< ㆀ - < ᅈ - < ᅉ - < ᅊ - < ᅋ - < ᅌ - <<< ㆁ - < ᅍ - < ᅎ - < ᅏ - < ᅐ - < ᅑ - < ᅒ - < ᅓ - < ᅔ - < ᅕ - < ᅖ - < ᅗ - <<< ㆄ - < ᅘ - <<< ㆅ - < ᅙ - <<< ㆆ - < ᅟ - < ᅠ - <<< ㅤ - <<< ᅠ - < ᅡ - <<< ㅏ - <<< ᅡ - < ᅢ - <<< ㅐ - <<< ᅢ - < ᅣ - <<< ㅑ - <<< ᅣ - < ᅤ - <<< ㅒ - <<< ᅤ - < ᅥ - <<< ㅓ - <<< ᅥ - < ᅦ - <<< ㅔ - <<< ᅦ - < ᅧ - <<< ㅕ - <<< ᅧ - < ᅨ - <<< ㅖ - <<< ᅨ - < ᅩ - <<< ㅗ - <<< ᅩ - < ᅪ - <<< ㅘ - <<< ᅪ - < ᅫ - <<< ㅙ - <<< ᅫ - < ᅬ - <<< ㅚ - <<< ᅬ - < ᅭ - <<< ㅛ - <<< ᅭ - < ᅮ - <<< ㅜ - <<< ᅮ - < ᅯ - <<< ㅝ - <<< ᅯ - < ᅰ - <<< ㅞ - <<< ᅰ - < ᅱ - <<< ㅟ - <<< ᅱ - < ᅲ - <<< ㅠ - <<< ᅲ - < ᅳ - <<< ㅡ - <<< ᅳ - < ᅴ - <<< ㅢ - <<< ᅴ - < ᅵ - <<< ㅣ - <<< ᅵ - < ᅶ - < ᅷ - < ᅸ - < ᅹ - < ᅺ - < ᅻ - < ᅼ - < ᅽ - < ᅾ - < ᅿ - < ᆀ - < ᆁ - < ᆂ - < ᆃ - < ᆄ - <<< ㆇ - < ᆅ - <<< ㆈ - < ᆆ - < ᆇ - < ᆈ - <<< ㆉ - < ᆉ - < ᆊ - < ᆋ - < ᆌ - < ᆍ - < ᆎ - < ᆏ - < ᆐ - < ᆑ - <<< ㆊ - < ᆒ - <<< ㆋ - < ᆓ - < ᆔ - <<< ㆌ - < ᆕ - < ᆖ - < ᆗ - < ᆘ - < ᆙ - < ᆚ - < ᆛ - < ᆜ - < ᆝ - < ᆞ - <<< ㆍ - < ᆟ - < ᆠ - < ᆡ - <<< ㆎ - < ᆢ - < ᆨ - < ᆩ - < ᆪ - <<< ㄳ - <<< ᆪ - < ᆫ - < ᆬ - <<< ㄵ - <<< ᆬ - < ᆭ - <<< ㄶ - <<< ᆭ - < ᆮ - < ᆯ - < ᆰ - <<< ㄺ - <<< ᆰ - < ᆱ - <<< ㄻ - <<< ᆱ - < ᆲ - <<< ㄼ - <<< ᆲ - < ᆳ - <<< ㄽ - <<< ᆳ - < ᆴ - <<< ㄾ - <<< ᆴ - < ᆵ - <<< ㄿ - <<< ᆵ - < ᆶ - < ᆷ - < ᆸ - < ᆹ - < ᆺ - < ᆻ - < ᆼ - < ᆽ - < ᆾ - < ᆿ - < ᇀ - < ᇁ - < ᇂ - < ᇃ - < ᇄ - < ᇅ - < ᇆ - < ᇇ - <<< ㅧ - < ᇈ - <<< ㅨ - < ᇉ - < ᇊ - < ᇋ - < ᇌ - <<< ㅩ - < ᇍ - < ᇎ - <<< ㅪ - < ᇏ - < ᇐ - < ᇑ - < ᇒ - < ᇓ - <<< ㅫ - < ᇔ - < ᇕ - < ᇖ - < ᇗ - <<< ㅬ - < ᇘ - < ᇙ - <<< ㅭ - < ᇚ - < ᇛ - < ᇜ - < ᇝ - <<< ㅯ - < ᇞ - < ᇟ - <<< ㅰ - < ᇠ - < ᇡ - < ᇢ - < ᇣ - < ᇤ - < ᇥ - < ᇦ - < ᇧ - < ᇨ - < ᇩ - < ᇪ - < ᇫ - < ᇬ - < ᇭ - < ᇮ - < ᇯ - < ᇰ - < ᇱ - <<< ㆂ - < ᇲ - <<< ㆃ - < ᇳ - < ᇴ - < ᇵ - < ᇶ - < ᇷ - < ᇸ - < ᇹ - < ぁ - <<< あ - <<< ァ - <<< ァ - <<< ア - <<< ア - <<< ㋐ - <<< ㌃ / ーる - <<< ㌀ / ぱーと - <<< ㌁ / るふあ - <<< ㌂ / んぺあ - < ぃ - <<< い - <<< ィ - <<< ィ - <<< イ - <<< イ - <<< ㋑ - <<< ㌄ / にんぐ - <<< ㌅ / んち - < ぅ - <<< う - <<< ゥ - <<< ゥ - <<< ウ - <<< ウ - <<< ㋒ - <<< ㌆ / おん - < ぇ - <<< え - <<< ェ - <<< ェ - <<< エ - <<< エ - <<< ㋓ - <<< ㌈ / ーかー - <<< ㌇ / すくーど - < ぉ - <<< お - <<< ォ - <<< ォ - <<< オ - <<< オ - <<< ㋔ - <<< ㌊ / ーむ - <<< ㌉ / んす - < ゕ - <<< か - <<< ヵ - <<< カ - <<< カ - <<< ㋕ - <<< ㌋ / いり - <<< ㌌ / らつと - <<< ㌍ / ろりー - <<< ㌎ / ゙ろん - <<< ㌏ / ゙んま - < き - <<< キ - <<< キ - <<< ㋖ - <<< ㌐ / ゙が - <<< ㌑ / ゙にー - <<< ㌒ / ゆりー - <<< ㌓ / ゙るだー - <<< ㌔ / ろ - <<< ㌕ / ろぐらむ - <<< ㌖ / ろめーとる - <<< ㌗ / ろわつと - < く - <<< ㇰ - <<< ク - <<< ク - <<< ㋗ - <<< ㌘ / ゙らむ - <<< ㌙ / ゙らむとん - <<< ㌚ / るぜいろ - <<< ㌛ / ろーね - < ゖ - <<< け - <<< ヶ - <<< ケ - <<< ケ - <<< ㋘ - <<< ㌜ / ーす - < こ - <<< コ - <<< コ - <<< ㋙ - <<< ヿ / と - <<< ㌞ / ーぽ - <<< ㌝ / るな - < さ - <<< サ - <<< サ - <<< ㋚ - <<< ㌟ / いくる - <<< ㌠ / んちーむ - < 〆 / め - <<< し - <<< ㇱ - <<< シ - <<< シ - <<< ㋛ - <<< ㌡ / りんぐ - < す - <<< ㇲ - <<< ス - <<< ス - <<< ㋜ - < せ - <<< セ - <<< セ - <<< ㋝ - <<< ㌢ / んち - <<< ㌣ / んと - < そ - <<< ソ - <<< ソ - <<< ㋞ - < た - <<< タ - <<< タ - <<< ㋟ - <<< ㌤ / ゙ーす - < ち - <<< チ - <<< チ - <<< ㋠ - < っ - <<< つ - <<< ッ - <<< ッ - <<< ツ - <<< ツ - <<< ㋡ - < て - <<< テ - <<< テ - <<< ㋢ - <<< ㌥ / ゙し - < と - <<< ㇳ - <<< ト - <<< ト - <<< ㋣ - <<< ㌦ / ゙る - <<< ㌧ / ん - < な - <<< ナ - <<< ナ - <<< ㋤ - <<< ㌨ / の - < に - <<< ニ - <<< ニ - <<< ㋥ - < ぬ - <<< ㇴ - <<< ヌ - <<< ヌ - <<< ㋦ - < ね - <<< ネ - <<< ネ - <<< ㋧ - < の - <<< ノ - <<< ノ - <<< ㋨ - <<< ㌩ / つと - < は - <<< ㇵ - <<< ハ - <<< ハ - <<< ㋩ - <<< ㌫ / ゚ーせんと - <<< ㌬ / ゚ーつ - <<< ㌭ / ゙ーれる - <<< ㌪ / いつ - < ひ - <<< ㇶ - <<< ヒ - <<< ヒ - <<< ㋪ - <<< ㌮ / ゚あすとる - <<< ㌯ / ゚くる - <<< ㌰ / ゚こ - <<< ㌱ / ゙る - < ふ - <<< ㇷ - <<< フ - <<< フ - <<< ㋫ - <<< ㌲ / あらつど - <<< ㌳ / いーと - <<< ㌴ / ゙つしえる - <<< ㌵ / らん - < へ - <<< ㇸ - <<< ヘ - <<< ヘ - <<< ㋬ - <<< ㌻ / ゚ーじ - <<< ㌼ / ゙ーた - <<< ㌶ / くたーる - <<< ㌷ / ゚そ - <<< ㌸ / ゚にひ - <<< ㌹ / るつ - <<< ㌺ / ゚んす - < ほ - <<< ㇹ - <<< ホ - <<< ホ - <<< ㋭ - <<< ㍁ / ーる - <<< ㍂ / ーん - <<< ㌽ / ゚いんと - <<< ㌾ / ゙ると - <<< ㌿ / ん - <<< ㍀ / ゚んど - < 〼 / す - <<< ま - <<< マ - <<< マ - <<< ㋮ - <<< ㍃ / いくろ - <<< ㍄ / いる - <<< ㍅ / つは - <<< ㍆ / るく - <<< ㍇ / んしよん - < み - <<< ミ - <<< ミ - <<< ㋯ - <<< ㍈ / くろん - <<< ㍉ / り - <<< ㍊ / りばーる - < む - <<< ㇺ - <<< ム - <<< ム - <<< ㋰ - < め - <<< メ - <<< メ - <<< ㋱ - <<< ㍍ / ーとる - <<< ㍋ / が - <<< ㍌ / がとん - < も - <<< モ - <<< モ - <<< ㋲ - < ゃ - <<< や - <<< ャ - <<< ャ - <<< ヤ - <<< ヤ - <<< ㋳ - <<< ㍎ / ーど - <<< ㍏ / ーる - < ゅ - <<< ゆ - <<< ュ - <<< ュ - <<< ユ - <<< ユ - <<< ㋴ - <<< ㍐ / あん - < ょ - <<< よ - <<< ョ - <<< ョ - <<< ヨ - <<< ヨ - <<< ㋵ - <<< ゟ / り - < ら - <<< ㇻ - <<< ラ - <<< ラ - <<< ㋶ - < り - <<< ㇼ - <<< リ - <<< リ - <<< ㋷ - <<< ㍑ / つとる - <<< ㍒ / ら - < る - <<< ㇽ - <<< ル - <<< ル - <<< ㋸ - <<< ㍔ / ーぶる - <<< ㍓ / ぴー - < れ - <<< ㇾ - <<< レ - <<< レ - <<< ㋹ - <<< ㍕ / む - <<< ㍖ / んとげん - < ろ - <<< ㇿ - <<< ロ - <<< ロ - <<< ㋺ - < ゎ - <<< わ - <<< ヮ - <<< ワ - <<< ワ - <<< ㋻ - <<< ㍗ / つと - < ゐ - <<< ヰ - <<< ㋼ - < ゑ - <<< ヱ - <<< ㋽ - < を - <<< ヲ - <<< ヲ - <<< ㋾ - < ん - <<< ン - <<< ン - < ㄅ - << ㆠ - < ㄆ - <<< ㆴ - < ㄇ - < ㄈ - < ㄪ - < ㄉ - < ㄊ - <<< ㆵ - < ㄋ - < ㄌ - < ㄍ - << ㆣ - < ㄎ - <<< ㆶ - < ㄫ - < ㆭ - < ㄏ - <<< ㆷ - < ㄐ - << ㆢ - < ㄑ - < ㄒ - < ㄬ - < ㄓ - < ㄔ - < ㄕ - < ㄖ - < ㄗ - << ㆡ - < ㄘ - < ㄙ - < ㄚ - << ㆩ - < ㄛ - << ㆧ - < ㆦ - < ㄜ - < ㄝ - < ㆤ - << ㆥ - < ㄞ - << ㆮ - < ㄟ - < ㄠ - << ㆯ - < ㄡ - < ㄢ - < ㄣ - < ㄤ - < ㆲ - < ㄥ - < ㆰ - < ㆱ - < ㆬ - < ㄦ - < ㄧ - << ㆪ - <<< ㆳ - < ㄨ - << ㆫ - << ㆨ - < ㄩ - < ꀀ - < ꀁ - < ꀂ - < ꀃ - < ꀄ - < ꀅ - < ꀆ - < ꀇ - < ꀈ - < ꀉ - < ꀊ - < ꀋ - < ꀌ - < ꀍ - < ꀎ - < ꀏ - < ꀐ - < ꀑ - < ꀒ - < ꀓ - < ꀔ - < ꀕ - < ꀖ - < ꀗ - < ꀘ - < ꀙ - < ꀚ - < ꀛ - < ꀜ - < ꀝ - < ꀞ - < ꀟ - < ꀠ - < ꀡ - < ꀢ - < ꀣ - < ꀤ - < ꀥ - < ꀦ - < ꀧ - < ꀨ - < ꀩ - < ꀪ - < ꀫ - < ꀬ - < ꀭ - < ꀮ - < ꀯ - < ꀰ - < ꀱ - < ꀲ - < ꀳ - < ꀴ - < ꀵ - < ꀶ - < ꀷ - < ꀸ - < ꀹ - < ꀺ - < ꀻ - < ꀼ - < ꀽ - < ꀾ - < ꀿ - < ꁀ - < ꁁ - < ꁂ - < ꁃ - < ꁄ - < ꁅ - < ꁆ - < ꁇ - < ꁈ - < ꁉ - < ꁊ - < ꁋ - < ꁌ - < ꁍ - < ꁎ - < ꁏ - < ꁐ - < ꁑ - < ꁒ - < ꁓ - < ꁔ - < ꁕ - < ꁖ - < ꁗ - < ꁘ - < ꁙ - < ꁚ - < ꁛ - < ꁜ - < ꁝ - < ꁞ - < ꁟ - < ꁠ - < ꁡ - < ꁢ - < ꁣ - < ꁤ - < ꁥ - < ꁦ - < ꁧ - < ꁨ - < ꁩ - < ꁪ - < ꁫ - < ꁬ - < ꁭ - < ꁮ - < ꁯ - < ꁰ - < ꁱ - < ꁲ - < ꁳ - < ꁴ - < ꁵ - < ꁶ - < ꁷ - < ꁸ - < ꁹ - < ꁺ - < ꁻ - < ꁼ - < ꁽ - < ꁾ - < ꁿ - < ꂀ - < ꂁ - < ꂂ - < ꂃ - < ꂄ - < ꂅ - < ꂆ - < ꂇ - < ꂈ - < ꂉ - < ꂊ - < ꂋ - < ꂌ - < ꂍ - < ꂎ - < ꂏ - < ꂐ - < ꂑ - < ꂒ - < ꂓ - < ꂔ - < ꂕ - < ꂖ - < ꂗ - < ꂘ - < ꂙ - < ꂚ - < ꂛ - < ꂜ - < ꂝ - < ꂞ - < ꂟ - < ꂠ - < ꂡ - < ꂢ - < ꂣ - < ꂤ - < ꂥ - < ꂦ - < ꂧ - < ꂨ - < ꂩ - < ꂪ - < ꂫ - < ꂬ - < ꂭ - < ꂮ - < ꂯ - < ꂰ - < ꂱ - < ꂲ - < ꂳ - < ꂴ - < ꂵ - < ꂶ - < ꂷ - < ꂸ - < ꂹ - < ꂺ - < ꂻ - < ꂼ - < ꂽ - < ꂾ - < ꂿ - < ꃀ - < ꃁ - < ꃂ - < ꃃ - < ꃄ - < ꃅ - < ꃆ - < ꃇ - < ꃈ - < ꃉ - < ꃊ - < ꃋ - < ꃌ - < ꃍ - < ꃎ - < ꃏ - < ꃐ - < ꃑ - < ꃒ - < ꃓ - < ꃔ - < ꃕ - < ꃖ - < ꃗ - < ꃘ - < ꃙ - < ꃚ - < ꃛ - < ꃜ - < ꃝ - < ꃞ - < ꃟ - < ꃠ - < ꃡ - < ꃢ - < ꃣ - < ꃤ - < ꃥ - < ꃦ - < ꃧ - < ꃨ - < ꃩ - < ꃪ - < ꃫ - < ꃬ - < ꃭ - < ꃮ - < ꃯ - < ꃰ - < ꃱ - < ꃲ - < ꃳ - < ꃴ - < ꃵ - < ꃶ - < ꃷ - < ꃸ - < ꃹ - < ꃺ - < ꃻ - < ꃼ - < ꃽ - < ꃾ - < ꃿ - < ꄀ - < ꄁ - < ꄂ - < ꄃ - < ꄄ - < ꄅ - < ꄆ - < ꄇ - < ꄈ - < ꄉ - < ꄊ - < ꄋ - < ꄌ - < ꄍ - < ꄎ - < ꄏ - < ꄐ - < ꄑ - < ꄒ - < ꄓ - < ꄔ - < ꄕ - < ꄖ - < ꄗ - < ꄘ - < ꄙ - < ꄚ - < ꄛ - < ꄜ - < ꄝ - < ꄞ - < ꄟ - < ꄠ - < ꄡ - < ꄢ - < ꄣ - < ꄤ - < ꄥ - < ꄦ - < ꄧ - < ꄨ - < ꄩ - < ꄪ - < ꄫ - < ꄬ - < ꄭ - < ꄮ - < ꄯ - < ꄰ - < ꄱ - < ꄲ - < ꄳ - < ꄴ - < ꄵ - < ꄶ - < ꄷ - < ꄸ - < ꄹ - < ꄺ - < ꄻ - < ꄼ - < ꄽ - < ꄾ - < ꄿ - < ꅀ - < ꅁ - < ꅂ - < ꅃ - < ꅄ - < ꅅ - < ꅆ - < ꅇ - < ꅈ - < ꅉ - < ꅊ - < ꅋ - < ꅌ - < ꅍ - < ꅎ - < ꅏ - < ꅐ - < ꅑ - < ꅒ - < ꅓ - < ꅔ - < ꅕ - < ꅖ - < ꅗ - < ꅘ - < ꅙ - < ꅚ - < ꅛ - < ꅜ - < ꅝ - < ꅞ - < ꅟ - < ꅠ - < ꅡ - < ꅢ - < ꅣ - < ꅤ - < ꅥ - < ꅦ - < ꅧ - < ꅨ - < ꅩ - < ꅪ - < ꅫ - < ꅬ - < ꅭ - < ꅮ - < ꅯ - < ꅰ - < ꅱ - < ꅲ - < ꅳ - < ꅴ - < ꅵ - < ꅶ - < ꅷ - < ꅸ - < ꅹ - < ꅺ - < ꅻ - < ꅼ - < ꅽ - < ꅾ - < ꅿ - < ꆀ - < ꆁ - < ꆂ - < ꆃ - < ꆄ - < ꆅ - < ꆆ - < ꆇ - < ꆈ - < ꆉ - < ꆊ - < ꆋ - < ꆌ - < ꆍ - < ꆎ - < ꆏ - < ꆐ - < ꆑ - < ꆒ - < ꆓ - < ꆔ - < ꆕ - < ꆖ - < ꆗ - < ꆘ - < ꆙ - < ꆚ - < ꆛ - < ꆜ - < ꆝ - < ꆞ - < ꆟ - < ꆠ - < ꆡ - < ꆢ - < ꆣ - < ꆤ - < ꆥ - < ꆦ - < ꆧ - < ꆨ - < ꆩ - < ꆪ - < ꆫ - < ꆬ - < ꆭ - < ꆮ - < ꆯ - < ꆰ - < ꆱ - < ꆲ - < ꆳ - < ꆴ - < ꆵ - < ꆶ - < ꆷ - < ꆸ - < ꆹ - < ꆺ - < ꆻ - < ꆼ - < ꆽ - < ꆾ - < ꆿ - < ꇀ - < ꇁ - < ꇂ - < ꇃ - < ꇄ - < ꇅ - < ꇆ - < ꇇ - < ꇈ - < ꇉ - < ꇊ - < ꇋ - < ꇌ - < ꇍ - < ꇎ - < ꇏ - < ꇐ - < ꇑ - < ꇒ - < ꇓ - < ꇔ - < ꇕ - < ꇖ - < ꇗ - < ꇘ - < ꇙ - < ꇚ - < ꇛ - < ꇜ - < ꇝ - < ꇞ - < ꇟ - < ꇠ - < ꇡ - < ꇢ - < ꇣ - < ꇤ - < ꇥ - < ꇦ - < ꇧ - < ꇨ - < ꇩ - < ꇪ - < ꇫ - < ꇬ - < ꇭ - < ꇮ - < ꇯ - < ꇰ - < ꇱ - < ꇲ - < ꇳ - < ꇴ - < ꇵ - < ꇶ - < ꇷ - < ꇸ - < ꇹ - < ꇺ - < ꇻ - < ꇼ - < ꇽ - < ꇾ - < ꇿ - < ꈀ - < ꈁ - < ꈂ - < ꈃ - < ꈄ - < ꈅ - < ꈆ - < ꈇ - < ꈈ - < ꈉ - < ꈊ - < ꈋ - < ꈌ - < ꈍ - < ꈎ - < ꈏ - < ꈐ - < ꈑ - < ꈒ - < ꈓ - < ꈔ - < ꈕ - < ꈖ - < ꈗ - < ꈘ - < ꈙ - < ꈚ - < ꈛ - < ꈜ - < ꈝ - < ꈞ - < ꈟ - < ꈠ - < ꈡ - < ꈢ - < ꈣ - < ꈤ - < ꈥ - < ꈦ - < ꈧ - < ꈨ - < ꈩ - < ꈪ - < ꈫ - < ꈬ - < ꈭ - < ꈮ - < ꈯ - < ꈰ - < ꈱ - < ꈲ - < ꈳ - < ꈴ - < ꈵ - < ꈶ - < ꈷ - < ꈸ - < ꈹ - < ꈺ - < ꈻ - < ꈼ - < ꈽ - < ꈾ - < ꈿ - < ꉀ - < ꉁ - < ꉂ - < ꉃ - < ꉄ - < ꉅ - < ꉆ - < ꉇ - < ꉈ - < ꉉ - < ꉊ - < ꉋ - < ꉌ - < ꉍ - < ꉎ - < ꉏ - < ꉐ - < ꉑ - < ꉒ - < ꉓ - < ꉔ - < ꉕ - < ꉖ - < ꉗ - < ꉘ - < ꉙ - < ꉚ - < ꉛ - < ꉜ - < ꉝ - < ꉞ - < ꉟ - < ꉠ - < ꉡ - < ꉢ - < ꉣ - < ꉤ - < ꉥ - < ꉦ - < ꉧ - < ꉨ - < ꉩ - < ꉪ - < ꉫ - < ꉬ - < ꉭ - < ꉮ - < ꉯ - < ꉰ - < ꉱ - < ꉲ - < ꉳ - < ꉴ - < ꉵ - < ꉶ - < ꉷ - < ꉸ - < ꉹ - < ꉺ - < ꉻ - < ꉼ - < ꉽ - < ꉾ - < ꉿ - < ꊀ - < ꊁ - < ꊂ - < ꊃ - < ꊄ - < ꊅ - < ꊆ - < ꊇ - < ꊈ - < ꊉ - < ꊊ - < ꊋ - < ꊌ - < ꊍ - < ꊎ - < ꊏ - < ꊐ - < ꊑ - < ꊒ - < ꊓ - < ꊔ - < ꊕ - < ꊖ - < ꊗ - < ꊘ - < ꊙ - < ꊚ - < ꊛ - < ꊜ - < ꊝ - < ꊞ - < ꊟ - < ꊠ - < ꊡ - < ꊢ - < ꊣ - < ꊤ - < ꊥ - < ꊦ - < ꊧ - < ꊨ - < ꊩ - < ꊪ - < ꊫ - < ꊬ - < ꊭ - < ꊮ - < ꊯ - < ꊰ - < ꊱ - < ꊲ - < ꊳ - < ꊴ - < ꊵ - < ꊶ - < ꊷ - < ꊸ - < ꊹ - < ꊺ - < ꊻ - < ꊼ - < ꊽ - < ꊾ - < ꊿ - < ꋀ - < ꋁ - < ꋂ - < ꋃ - < ꋄ - < ꋅ - < ꋆ - < ꋇ - < ꋈ - < ꋉ - < ꋊ - < ꋋ - < ꋌ - < ꋍ - < ꋎ - < ꋏ - < ꋐ - < ꋑ - < ꋒ - < ꋓ - < ꋔ - < ꋕ - < ꋖ - < ꋗ - < ꋘ - < ꋙ - < ꋚ - < ꋛ - < ꋜ - < ꋝ - < ꋞ - < ꋟ - < ꋠ - < ꋡ - < ꋢ - < ꋣ - < ꋤ - < ꋥ - < ꋦ - < ꋧ - < ꋨ - < ꋩ - < ꋪ - < ꋫ - < ꋬ - < ꋭ - < ꋮ - < ꋯ - < ꋰ - < ꋱ - < ꋲ - < ꋳ - < ꋴ - < ꋵ - < ꋶ - < ꋷ - < ꋸ - < ꋹ - < ꋺ - < ꋻ - < ꋼ - < ꋽ - < ꋾ - < ꋿ - < ꌀ - < ꌁ - < ꌂ - < ꌃ - < ꌄ - < ꌅ - < ꌆ - < ꌇ - < ꌈ - < ꌉ - < ꌊ - < ꌋ - < ꌌ - < ꌍ - < ꌎ - < ꌏ - < ꌐ - < ꌑ - < ꌒ - < ꌓ - < ꌔ - < ꌕ - < ꌖ - < ꌗ - < ꌘ - < ꌙ - < ꌚ - < ꌛ - < ꌜ - < ꌝ - < ꌞ - < ꌟ - < ꌠ - < ꌡ - < ꌢ - < ꌣ - < ꌤ - < ꌥ - < ꌦ - < ꌧ - < ꌨ - < ꌩ - < ꌪ - < ꌫ - < ꌬ - < ꌭ - < ꌮ - < ꌯ - < ꌰ - < ꌱ - < ꌲ - < ꌳ - < ꌴ - < ꌵ - < ꌶ - < ꌷ - < ꌸ - < ꌹ - < ꌺ - < ꌻ - < ꌼ - < ꌽ - < ꌾ - < ꌿ - < ꍀ - < ꍁ - < ꍂ - < ꍃ - < ꍄ - < ꍅ - < ꍆ - < ꍇ - < ꍈ - < ꍉ - < ꍊ - < ꍋ - < ꍌ - < ꍍ - < ꍎ - < ꍏ - < ꍐ - < ꍑ - < ꍒ - < ꍓ - < ꍔ - < ꍕ - < ꍖ - < ꍗ - < ꍘ - < ꍙ - < ꍚ - < ꍛ - < ꍜ - < ꍝ - < ꍞ - < ꍟ - < ꍠ - < ꍡ - < ꍢ - < ꍣ - < ꍤ - < ꍥ - < ꍦ - < ꍧ - < ꍨ - < ꍩ - < ꍪ - < ꍫ - < ꍬ - < ꍭ - < ꍮ - < ꍯ - < ꍰ - < ꍱ - < ꍲ - < ꍳ - < ꍴ - < ꍵ - < ꍶ - < ꍷ - < ꍸ - < ꍹ - < ꍺ - < ꍻ - < ꍼ - < ꍽ - < ꍾ - < ꍿ - < ꎀ - < ꎁ - < ꎂ - < ꎃ - < ꎄ - < ꎅ - < ꎆ - < ꎇ - < ꎈ - < ꎉ - < ꎊ - < ꎋ - < ꎌ - < ꎍ - < ꎎ - < ꎏ - < ꎐ - < ꎑ - < ꎒ - < ꎓ - < ꎔ - < ꎕ - < ꎖ - < ꎗ - < ꎘ - < ꎙ - < ꎚ - < ꎛ - < ꎜ - < ꎝ - < ꎞ - < ꎟ - < ꎠ - < ꎡ - < ꎢ - < ꎣ - < ꎤ - < ꎥ - < ꎦ - < ꎧ - < ꎨ - < ꎩ - < ꎪ - < ꎫ - < ꎬ - < ꎭ - < ꎮ - < ꎯ - < ꎰ - < ꎱ - < ꎲ - < ꎳ - < ꎴ - < ꎵ - < ꎶ - < ꎷ - < ꎸ - < ꎹ - < ꎺ - < ꎻ - < ꎼ - < ꎽ - < ꎾ - < ꎿ - < ꏀ - < ꏁ - < ꏂ - < ꏃ - < ꏄ - < ꏅ - < ꏆ - < ꏇ - < ꏈ - < ꏉ - < ꏊ - < ꏋ - < ꏌ - < ꏍ - < ꏎ - < ꏏ - < ꏐ - < ꏑ - < ꏒ - < ꏓ - < ꏔ - < ꏕ - < ꏖ - < ꏗ - < ꏘ - < ꏙ - < ꏚ - < ꏛ - < ꏜ - < ꏝ - < ꏞ - < ꏟ - < ꏠ - < ꏡ - < ꏢ - < ꏣ - < ꏤ - < ꏥ - < ꏦ - < ꏧ - < ꏨ - < ꏩ - < ꏪ - < ꏫ - < ꏬ - < ꏭ - < ꏮ - < ꏯ - < ꏰ - < ꏱ - < ꏲ - < ꏳ - < ꏴ - < ꏵ - < ꏶ - < ꏷ - < ꏸ - < ꏹ - < ꏺ - < ꏻ - < ꏼ - < ꏽ - < ꏾ - < ꏿ - < ꐀ - < ꐁ - < ꐂ - < ꐃ - < ꐄ - < ꐅ - < ꐆ - < ꐇ - < ꐈ - < ꐉ - < ꐊ - < ꐋ - < ꐌ - < ꐍ - < ꐎ - < ꐏ - < ꐐ - < ꐑ - < ꐒ - < ꐓ - < ꐔ - < ꐕ - < ꐖ - < ꐗ - < ꐘ - < ꐙ - < ꐚ - < ꐛ - < ꐜ - < ꐝ - < ꐞ - < ꐟ - < ꐠ - < ꐡ - < ꐢ - < ꐣ - < ꐤ - < ꐥ - < ꐦ - < ꐧ - < ꐨ - < ꐩ - < ꐪ - < ꐫ - < ꐬ - < ꐭ - < ꐮ - < ꐯ - < ꐰ - < ꐱ - < ꐲ - < ꐳ - < ꐴ - < ꐵ - < ꐶ - < ꐷ - < ꐸ - < ꐹ - < ꐺ - < ꐻ - < ꐼ - < ꐽ - < ꐾ - < ꐿ - < ꑀ - < ꑁ - < ꑂ - < ꑃ - < ꑄ - < ꑅ - < ꑆ - < ꑇ - < ꑈ - < ꑉ - < ꑊ - < ꑋ - < ꑌ - < ꑍ - < ꑎ - < ꑏ - < ꑐ - < ꑑ - < ꑒ - < ꑓ - < ꑔ - < ꑕ - < ꑖ - < ꑗ - < ꑘ - < ꑙ - < ꑚ - < ꑛ - < ꑜ - < ꑝ - < ꑞ - < ꑟ - < ꑠ - < ꑡ - < ꑢ - < ꑣ - < ꑤ - < ꑥ - < ꑦ - < ꑧ - < ꑨ - < ꑩ - < ꑪ - < ꑫ - < ꑬ - < ꑭ - < ꑮ - < ꑯ - < ꑰ - < ꑱ - < ꑲ - < ꑳ - < ꑴ - < ꑵ - < ꑶ - < ꑷ - < ꑸ - < ꑹ - < ꑺ - < ꑻ - < ꑼ - < ꑽ - < ꑾ - < ꑿ - < ꒀ - < ꒁ - < ꒂ - < ꒃ - < ꒄ - < ꒅ - < ꒆ - < ꒇ - < ꒈ - < ꒉ - < ꒊ - < ꒋ - < ꒌ - < 𐌀 - < 𐌁 - < 𐌂 - < 𐌃 - < 𐌄 - < 𐌅 - < 𐌆 - < 𐌇 - < 𐌈 - < 𐌉 - < 𐌊 - < 𐌋 - < 𐌌 - < 𐌍 - < 𐌎 - < 𐌏 - < 𐌐 - < 𐌑 - < 𐌒 - < 𐌓 - < 𐌔 - < 𐌕 - < 𐌖 - < 𐌗 - < 𐌘 - < 𐌙 - < 𐌚 - < 𐌛 - < 𐌜 - < 𐌝 - < 𐌞 - < 𐌰 - < 𐌱 - < 𐌲 - < 𐌳 - < 𐌴 - < 𐌵 - < 𐌶 - < 𐌷 - < 𐌸 - < 𐌹 - < 𐌺 - < 𐌻 - < 𐌼 - < 𐌽 - < 𐌾 - < 𐌿 - < 𐍀 - < 𐍁 - < 𐍂 - < 𐍃 - < 𐍄 - < 𐍅 - < 𐍆 - < 𐍇 - < 𐍈 - < 𐍉 - < 𐍊 - < 𐐨 - <<< 𐐀 - < 𐐩 - <<< 𐐁 - < 𐐪 - <<< 𐐂 - < 𐐫 - <<< 𐐃 - < 𐐬 - <<< 𐐄 - < 𐐭 - <<< 𐐅 - < 𐐮 - <<< 𐐆 - < 𐐯 - <<< 𐐇 - < 𐐰 - <<< 𐐈 - < 𐐱 - <<< 𐐉 - < 𐐲 - <<< 𐐊 - < 𐐳 - <<< 𐐋 - < 𐐴 - <<< 𐐌 - < 𐐵 - <<< 𐐍 - < 𐐶 - <<< 𐐎 - < 𐐷 - <<< 𐐏 - < 𐐸 - <<< 𐐐 - < 𐐹 - <<< 𐐑 - < 𐐺 - <<< 𐐒 - < 𐐻 - <<< 𐐓 - < 𐐼 - <<< 𐐔 - < 𐐽 - <<< 𐐕 - < 𐐾 - <<< 𐐖 - < 𐐿 - <<< 𐐗 - < 𐑀 - <<< 𐐘 - < 𐑁 - <<< 𐐙 - < 𐑂 - <<< 𐐚 - < 𐑃 - <<< 𐐛 - < 𐑄 - <<< 𐐜 - < 𐑅 - <<< 𐐝 - < 𐑆 - <<< 𐐞 - < 𐑇 - <<< 𐐟 - < 𐑈 - <<< 𐐠 - < 𐑉 - <<< 𐐡 - < 𐑊 - <<< 𐐢 - < 𐑋 - <<< 𐐣 - < 𐑌 - <<< 𐐤 - < 𐑍 - <<< 𐐥 - < 𐑎 - <<< 𐐦 - < 𐑏 - <<< 𐐧 - < 𐑐 - < 𐑑 - < 𐑒 - < 𐑓 - < 𐑔 - < 𐑕 - < 𐑖 - < 𐑗 - < 𐑘 - < 𐑙 - < 𐑚 - < 𐑛 - < 𐑜 - < 𐑝 - < 𐑞 - < 𐑟 - < 𐑠 - < 𐑡 - < 𐑢 - < 𐑣 - < 𐑤 - < 𐑥 - < 𐑦 - < 𐑧 - < 𐑨 - < 𐑩 - < 𐑪 - < 𐑫 - < 𐑬 - < 𐑭 - < 𐑮 - < 𐑯 - < 𐑰 - < 𐑱 - < 𐑲 - < 𐑳 - < 𐑴 - < 𐑵 - < 𐑶 - < 𐑷 - < 𐑸 - < 𐑹 - < 𐑺 - < 𐑻 - < 𐑼 - < 𐑽 - < 𐑾 - < 𐑿 - < 𐒀 - < 𐒁 - < 𐒂 - < 𐒃 - < 𐒄 - < 𐒅 - < 𐒆 - < 𐒇 - < 𐒈 - < 𐒉 - < 𐒊 - < 𐒋 - < 𐒌 - < 𐒍 - < 𐒎 - < 𐒏 - < 𐒐 - < 𐒑 - < 𐒒 - < 𐒓 - < 𐒔 - < 𐒕 - < 𐒖 - < 𐒗 - < 𐒘 - < 𐒙 - < 𐒚 - < 𐒛 - < 𐒜 - < 𐒝 - < 𐀀 - < 𐀁 - < 𐀂 - < 𐀃 - < 𐀄 - < 𐀅 - < 𐀆 - < 𐀇 - < 𐀈 - < 𐀉 - < 𐀊 - < 𐀋 - < 𐀍 - < 𐀎 - < 𐀏 - < 𐀐 - < 𐀑 - < 𐀒 - < 𐀓 - < 𐀔 - < 𐀕 - < 𐀖 - < 𐀗 - < 𐀘 - < 𐀙 - < 𐀚 - < 𐀛 - < 𐀜 - < 𐀝 - < 𐀞 - < 𐀟 - < 𐀠 - < 𐀡 - < 𐀢 - < 𐀣 - < 𐀤 - < 𐀥 - < 𐀦 - < 𐀨 - < 𐀩 - < 𐀪 - < 𐀫 - < 𐀬 - < 𐀭 - < 𐀮 - < 𐀯 - < 𐀰 - < 𐀱 - < 𐀲 - < 𐀳 - < 𐀴 - < 𐀵 - < 𐀶 - < 𐀷 - < 𐀸 - < 𐀹 - < 𐀺 - < 𐀼 - < 𐀽 - < 𐀿 - < 𐁀 - < 𐁁 - < 𐁂 - < 𐁃 - < 𐁄 - < 𐁅 - < 𐁆 - < 𐁇 - < 𐁈 - < 𐁉 - < 𐁊 - < 𐁋 - < 𐁌 - < 𐁍 - < 𐁐 - < 𐁑 - < 𐁒 - < 𐁓 - < 𐁔 - < 𐁕 - < 𐁖 - < 𐁗 - < 𐁘 - < 𐁙 - < 𐁚 - < 𐁛 - < 𐁜 - < 𐁝 - < 𐂀 - < 𐂁 - < 𐂂 - < 𐂃 - < 𐂄 - < 𐂅 - < 𐂆 - < 𐂇 - < 𐂈 - < 𐂉 - < 𐂊 - < 𐂋 - < 𐂌 - < 𐂍 - < 𐂎 - < 𐂏 - < 𐂐 - < 𐂑 - < 𐂒 - < 𐂓 - < 𐂔 - < 𐂕 - < 𐂖 - < 𐂗 - < 𐂘 - < 𐂙 - < 𐂚 - < 𐂛 - < 𐂜 - < 𐂝 - < 𐂞 - < 𐂟 - < 𐂠 - < 𐂡 - < 𐂢 - < 𐂣 - < 𐂤 - < 𐂥 - < 𐂦 - < 𐂧 - < 𐂨 - < 𐂩 - < 𐂪 - < 𐂫 - < 𐂬 - < 𐂭 - < 𐂮 - < 𐂯 - < 𐂰 - < 𐂱 - < 𐂲 - < 𐂳 - < 𐂴 - < 𐂵 - < 𐂶 - < 𐂷 - < 𐂸 - < 𐂹 - < 𐂺 - < 𐂻 - < 𐂼 - < 𐂽 - < 𐂾 - < 𐂿 - < 𐃀 - < 𐃁 - < 𐃂 - < 𐃃 - < 𐃄 - < 𐃅 - < 𐃆 - < 𐃇 - < 𐃈 - < 𐃉 - < 𐃊 - < 𐃋 - < 𐃌 - < 𐃍 - < 𐃎 - < 𐃏 - < 𐃐 - < 𐃑 - < 𐃒 - < 𐃓 - < 𐃔 - < 𐃕 - < 𐃖 - < 𐃗 - < 𐃘 - < 𐃙 - < 𐃚 - < 𐃛 - < 𐃜 - < 𐃝 - < 𐃞 - < 𐃟 - < 𐃠 - < 𐃡 - < 𐃢 - < 𐃣 - < 𐃤 - < 𐃥 - < 𐃦 - < 𐃧 - < 𐃨 - < 𐃩 - < 𐃪 - < 𐃫 - < 𐃬 - < 𐃭 - < 𐃮 - < 𐃯 - < 𐃰 - < 𐃱 - < 𐃲 - < 𐃳 - < 𐃴 - < 𐃵 - < 𐃶 - < 𐃷 - < 𐃸 - < 𐃹 - < 𐃺 - < 𐠀 - < 𐠁 - < 𐠂 - < 𐠃 - < 𐠄 - < 𐠅 - < 𐠈 - < 𐠊 - < 𐠋 - < 𐠌 - < 𐠍 - < 𐠎 - < 𐠏 - < 𐠐 - < 𐠑 - < 𐠒 - < 𐠓 - < 𐠔 - < 𐠕 - < 𐠖 - < 𐠗 - < 𐠘 - < 𐠙 - < 𐠚 - < 𐠛 - < 𐠜 - < 𐠝 - < 𐠞 - < 𐠟 - < 𐠠 - < 𐠡 - < 𐠢 - < 𐠣 - < 𐠤 - < 𐠥 - < 𐠦 - < 𐠧 - < 𐠨 - < 𐠩 - < 𐠪 - < 𐠫 - < 𐠬 - < 𐠭 - < 𐠮 - < 𐠯 - < 𐠰 - < 𐠱 - < 𐠲 - < 𐠳 - < 𐠴 - < 𐠵 - < 𐠷 - < 𐠸 - < 𐠼 - < 𐠿 - < 𐎀 - < 𐎁 - < 𐎂 - < 𐎃 - < 𐎄 - < 𐎅 - < 𐎆 - < 𐎇 - < 𐎈 - < 𐎉 - < 𐎊 - < 𐎋 - < 𐎌 - < 𐎍 - < 𐎎 - < 𐎏 - < 𐎐 - < 𐎑 - < 𐎒 - < 𐎓 - < 𐎔 - < 𐎕 - < 𐎖 - < 𐎗 - < 𐎘 - < 𐎙 - < 𐎚 - < 𐎛 - < 𐎜 - < 𐎝 -& 一 - <<< ⼀ - <<< ㊀ - <<< ㆒ -& 丁 - <<< ㆜ -& 七 - <<< ㊆ -& 三 - <<< ㊂ - <<< ㆔ -& 上 - <<< ㊤ - <<< ㆖ -& 下 - <<< ㊦ - <<< ㆘ -& 丙 - <<< ㆛ -& 丨 - <<< ⼁ -& 丬 - <<< ⺦ -& 中 - <<< ㊥ - <<< ㆗ -& 丶 - <<< ⼂ - << ⺀ -& 丸 - = 丸 -& 丽 - = 丽 -& 丿 - <<< ⼃ -& 乁 - = 乁 -& 乙 - <<< ⼄ - <<< ㆚ - << ⺄ -& 乚 - <<< ⺃ -& 乛 - <<< ⺂ -& 九 - <<< ㊈ -& 亅 - <<< ⼅ -& 二 - <<< ⼆ - <<< ㊁ - <<< ㆓ -& 五 - <<< ㊄ -& 亠 - <<< ⼇ -& 人 - <<< ⼈ - <<< ㆟ -& 亻 - <<< ⺅ -& 仌 - = 仌 -& 企 - <<< ㊭ -& 休 - <<< ㊡ -& 你 - = 你 -& 侮 - = 侮 -& 侻 - = 侻 -& 倂 - = 倂 -& 偺 - = 偺 -& 備 - = 備 -& 像 - = 像 -& 僧 - = 僧 -& 優 - <<< ㊝ -& 儿 - <<< ⼉ -& 免 - = 免 -& 兔 - = 兔 -& 兤 - = 兤 -& 入 - <<< ⼊ -& 內 - = 內 -& 八 - <<< ⼋ - <<< ㊇ -& 六 - <<< ㊅ -& 具 - = 具 -& 冂 - <<< ⼌ - << ⺆ -& 再 - = 再 -& 冒 - = 冒 -& 冕 - = 冕 -& 冖 - <<< ⼍ -& 冗 - = 冗 -& 写 - <<< ㊢ -& 冤 - = 冤 -& 冫 - <<< ⼎ -& 冬 - = 冬 -& 况 - = 况 -& 几 - <<< ⼏ - << ⺇ -& 凵 - = 凵 - <<< ⼐ -& 刀 - <<< ⼑ - << ⺈ -& 刂 - <<< ⺉ -& 刃 - = 刃 -& 切 - = 切 -& 刻 - = 刻 -& 剆 - = 剆 -& 割 - = 割 -& 剷 - = 剷 -& 力 - <<< ⼒ -& 劳 - = 劳 -& 労 - <<< ㊘ -& 勇 - = 勇 -& 勉 - = 勉 -& 勤 - = 勤 -& 勹 - <<< ⼓ -& 勺 - = 勺 -& 包 - = 包 -& 匆 - = 匆 -& 匕 - <<< ⼔ -& 北 - = 北 -& 匚 - <<< ⼕ -& 匸 - <<< ⼖ -& 医 - <<< ㊩ -& 十 - <<< ⼗ - = 〸 - <<< ㊉ -& 卄 - <<< 〹 -& 卅 - <<< 〺 -& 卉 - = 卉 -& 卑 - = 卑 -& 協 - <<< ㊯ -& 博 - = 博 -& 卜 - <<< ⼘ - << ⺊ -& 卩 - <<< ⼙ - << ⺋ -& 印 - <<< ㊞ -& 即 - = 即 -& 卽 - = 卽 -& 卿 - = 卿 - = 卿 - = 卿 -& 厂 - <<< ⼚ - << ⺁ -& 厶 - <<< ⼛ -& 又 - <<< ⼜ -& 及 - = 及 -& 叟 - = 叟 -& 口 - <<< ⼝ -& 叫 - = 叫 -& 叱 - = 叱 -& 右 - <<< ㊨ -& 吆 - = 吆 -& 名 - <<< ㊔ -& 吸 - = 吸 -& 呈 - = 呈 -& 周 - = 周 -& 咞 - = 咞 -& 咢 - = 咢 -& 哶 - = 哶 -& 唐 - = 唐 -& 啓 - = 啓 -& 啣 - = 啣 -& 善 - = 善 - = 善 -& 喙 - = 喙 -& 喫 - = 喫 -& 喳 - = 喳 -& 嗂 - = 嗂 -& 嘆 - = 嘆 -& 噑 - = 噑 -& 噴 - = 噴 -& 囗 - <<< ⼞ -& 四 - <<< ㊃ - <<< ㆕ -& 圖 - = 圖 -& 圗 - = 圗 -& 土 - <<< ⼟ - <<< ㊏ -& 地 - <<< ㆞ -& 型 - = 型 -& 城 - = 城 -& 埴 - = 埴 -& 堍 - = 堍 -& 報 - = 報 -& 堲 - = 堲 -& 墬 - = 墬 -& 士 - <<< ⼠ -& 壮 - = 壮 -& 売 - = 売 -& 壷 - = 壷 -& 夂 - <<< ⼡ -& 夆 - = 夆 -& 夊 - <<< ⼢ -& 夕 - <<< ⼣ -& 多 - = 多 -& 夜 - <<< ㊰ -& 夢 - = 夢 -& 大 - <<< ⼤ - <<< ㍽ / 正 -& 天 - <<< ㆝ -& 奢 - = 奢 -& 女 - <<< ⼥ - <<< ㊛ -& 姘 - = 姘 -& 姬 - = 姬 -& 娛 - = 娛 -& 娧 - = 娧 -& 婦 - = 婦 -& 媵 - = 媵 -& 嬈 - = 嬈 -& 嬾 - = 嬾 - = 嬾 -& 子 - <<< ⼦ -& 学 - <<< ㊫ -& 宀 - <<< ⼧ -& 宗 - <<< ㊪ -& 寃 - = 寃 -& 寘 - = 寘 -& 寧 - = 寧 -& 寳 - = 寳 -& 寸 - <<< ⼨ -& 寿 - = 寿 -& 将 - = 将 -& 小 - <<< ⼩ - << ⺌ - << ⺍ -& 尢 - = 尢 - <<< ⺐ - = ⼪ - << ⺎ -& 尣 - <<< ⺏ - << ⺑ -& 尸 - <<< ⼫ -& 屠 - = 屠 -& 屮 - = 屮 - <<< ⼬ -& 山 - <<< ⼭ -& 岍 - = 岍 -& 峀 - = 峀 -& 嵃 - = 嵃 -& 嵫 - = 嵫 -& 嵮 - = 嵮 -& 嵼 - = 嵼 -& 嶲 - = 嶲 -& 巛 - <<< ⼮ -& 巡 - = 巡 -& 巢 - = 巢 -& 工 - <<< ⼯ -& 左 - <<< ㊧ -& 己 - <<< ⼰ -& 巳 - <<< ⺒ -& 巽 - = 巽 -& 巾 - <<< ⼱ -& 帨 - = 帨 -& 帽 - = 帽 -& 幩 - = 幩 -& 干 - <<< ⼲ -& 平 - < ㍻ / 成 -& 幺 - <<< ⺓ - = ⼳ -& 广 - <<< ⼴ -& 庰 - = 庰 -& 庳 - = 庳 -& 庶 - = 庶 -& 廊 - = 廊 -& 廴 - <<< ⼵ -& 廾 - = 廾 - <<< ⼶ -& 弋 - <<< ⼷ -& 弓 - <<< ⼸ -& 弢 - = 弢 - = 弢 -& 彐 - <<< ⼹ - << ⺕ -& 彑 - <<< ⺔ -& 当 - = 当 -& 彡 - <<< ⼺ -& 形 - = 形 -& 彫 - = 彫 -& 彳 - <<< ⼻ -& 徚 - = 徚 -& 心 - <<< ⼼ - << ⺗ -& 忄 - <<< ⺖ -& 忍 - = 忍 -& 志 - = 志 -& 忹 - = 忹 -& 悁 - = 悁 -& 悔 - = 悔 -& 惇 - = 惇 -& 慈 - = 慈 -& 慌 - = 慌 - = 慌 -& 慎 - = 慎 -& 慺 - = 慺 -& 憎 - = 憎 -& 憤 - = 憤 -& 憯 - = 憯 -& 憲 - = 憲 -& 懞 - = 懞 -& 懲 - = 懲 -& 懶 - = 懶 -& 戈 - <<< ⼽ -& 成 - = 成 -& 戛 - = 戛 -& 戶 - <<< ⼾ -& 手 - <<< ⼿ -& 扌 - <<< ⺘ -& 扝 - = 扝 -& 抱 - = 抱 -& 拔 - = 拔 -& 拼 - = 拼 -& 挽 - = 挽 -& 捐 - = 捐 -& 捨 - = 捨 -& 掃 - = 掃 -& 掩 - = 掩 -& 揅 - = 揅 -& 揤 - = 揤 -& 搢 - = 搢 -& 摩 - = 摩 -& 摷 - = 摷 -& 摾 - = 摾 -& 撝 - = 撝 -& 支 - <<< ⽀ -& 攴 - <<< ⽁ -& 攵 - <<< ⺙ -& 敏 - = 敏 -& 敬 - = 敬 -& 文 - <<< ⽂ -& 斗 - <<< ⽃ -& 斤 - <<< ⽄ -& 方 - <<< ⽅ -& 无 - <<< ⽆ -& 旡 - <<< ⺛ -& 旣 - = 旣 -& 日 - <<< ⽇ - <<< ㊐ - << ⺜ -& 明 - < ㍾ / 治 -& 昭 - < ㍼ / 和 -& 晉 - = 晉 -& 暑 - = 暑 -& 暜 - = 暜 -& 曰 - <<< ⽈ -& 書 - = 書 -& 最 - = 最 -& 月 - <<< ⽉ - <<< ㊊ - << ⺝ -& 有 - <<< ㊒ -& 朗 - = 朗 -& 望 - = 望 -& 朡 - = 朡 -& 木 - <<< ⽊ - <<< ㊍ -& 杓 - = 杓 -& 杞 - = 杞 -& 枅 - = 枅 -& 柺 - = 柺 -& 栟 - = 栟 -& 株 - <<< ㊑ - <<< ㍿ / 式会社 -& 桒 - = 桒 -& 梅 - = 梅 -& 梎 - = 梎 -& 椔 - = 椔 -& 楂 - = 楂 -& 榣 - = 榣 -& 槪 - = 槪 -& 檨 - = 檨 -& 櫛 - = 櫛 -& 欠 - <<< ⽋ -& 次 - = 次 -& 歔 - = 歔 -& 止 - <<< ⽌ -& 正 - <<< ㊣ -& 歲 - = 歲 -& 歹 - <<< ⽍ -& 歺 - << ⺞ -& 殟 - = 殟 -& 殳 - <<< ⽎ -& 殺 - = 殺 -& 殻 - = 殻 -& 毋 - <<< ⽏ -& 母 - <<< ⺟ -& 比 - <<< ⽐ -& 毛 - <<< ⽑ -& 氏 - <<< ⽒ -& 民 - <<< ⺠ -& 气 - <<< ⽓ -& 水 - <<< ⽔ - <<< ㊌ -& 氵 - <<< ⺡ -& 氺 - <<< ⺢ -& 汎 - = 汎 -& 汧 - = 汧 -& 沿 - = 沿 -& 泍 - = 泍 -& 注 - <<< ㊟ -& 洖 - = 洖 -& 洴 - = 洴 -& 派 - = 派 -& 流 - = 流 -& 浩 - = 浩 -& 海 - = 海 -& 浸 - = 浸 -& 涅 - = 涅 -& 淹 - = 淹 -& 港 - = 港 -& 湮 - = 湮 -& 滇 - = 滇 -& 滋 - = 滋 -& 潮 - = 潮 -& 濆 - = 濆 -& 瀛 - = 瀛 -& 瀞 - = 瀞 -& 瀹 - = 瀹 -& 灊 - = 灊 -& 火 - <<< ⽕ - <<< ㊋ -& 灬 - <<< ⺣ -& 灰 - = 灰 -& 灷 - = 灷 -& 災 - = 災 -& 炭 - = 炭 -& 煅 - = 煅 -& 熜 - = 熜 -& 爨 - = 爨 -& 爪 - <<< ⽖ -& 爫 - <<< ⺤ - << ⺥ -& 爵 - = 爵 -& 父 - <<< ⽗ -& 爻 - <<< ⽘ -& 爿 - <<< ⽙ -& 片 - <<< ⽚ -& 牐 - = 牐 -& 牙 - <<< ⽛ -& 牛 - <<< ⽜ - << ⺧ -& 特 - <<< ㊕ -& 犀 - = 犀 -& 犕 - = 犕 -& 犬 - <<< ⽝ -& 犭 - <<< ⺨ -& 獺 - = 獺 -& 玄 - <<< ⽞ -& 玉 - <<< ⽟ -& 王 - = 王 - << ⺩ -& 玥 - = 玥 -& 瑇 - = 瑇 -& 瑜 - = 瑜 -& 瑱 - = 瑱 -& 璅 - = 璅 -& 瓊 - = 瓊 -& 瓜 - <<< ⽠ -& 瓦 - <<< ⽡ -& 甘 - <<< ⽢ -& 生 - <<< ⽣ -& 甤 - = 甤 -& 用 - <<< ⽤ -& 田 - <<< ⽥ -& 甲 - <<< ㆙ -& 男 - <<< ㊚ -& 甾 - = 甾 -& 異 - = 異 -& 疋 - <<< ⽦ - << ⺪ -& 疒 - <<< ⽧ -& 瘐 - = 瘐 -& 癶 - <<< ⽨ -& 白 - <<< ⽩ -& 皮 - <<< ⽪ -& 皿 - <<< ⽫ -& 監 - <<< ㊬ -& 目 - <<< ⽬ - << ⺫ -& 直 - = 直 -& 眞 - = 眞 -& 真 - = 真 - = 真 -& 睊 - = 睊 -& 瞋 - = 瞋 -& 矛 - <<< ⽭ -& 矢 - <<< ⽮ -& 石 - <<< ⽯ -& 硎 - = 硎 -& 碌 - = 碌 -& 磌 - = 磌 -& 示 - <<< ⽰ - << ⺬ -& 礻 - <<< ⺭ -& 社 - <<< ㊓ -& 祖 - = 祖 -& 祝 - <<< ㊗ -& 福 - = 福 -& 禸 - <<< ⽱ -& 禾 - <<< ⽲ -& 秘 - <<< ㊙ -& 秫 - = 秫 -& 穀 - = 穀 -& 穊 - = 穊 -& 穏 - = 穏 -& 穴 - <<< ⽳ -& 立 - <<< ⽴ -& 竮 - = 竮 -& 竹 - <<< ⽵ - << ⺮ -& 篆 - = 篆 -& 築 - = 築 -& 米 - <<< ⽶ -& 糒 - = 糒 -& 糣 - = 糣 -& 糨 - = 糨 -& 糸 - <<< ⽷ -& 糹 - <<< ⺯ -& 紀 - = 紀 -& 絣 - = 絣 -& 緇 - = 緇 -& 縂 - = 縂 -& 繅 - = 繅 -& 纟 - <<< ⺰ -& 缶 - <<< ⽸ -& 网 - <<< ⽹ -& 罒 - <<< ⺲ - << ⺵ -& 罓 - <<< ⺱ - << ⺳ - << ⺴ -& 罺 - = 罺 -& 羊 - <<< ⽺ - << ⺶ - << ⺷ -& 羋 - <<< ⺸ -& 羕 - = 羕 -& 羽 - <<< ⽻ -& 翺 - = 翺 -& 老 - <<< ⽼ -& 耂 - <<< ⺹ -& 者 - = 者 -& 而 - <<< ⽽ -& 耒 - <<< ⽾ -& 耳 - <<< ⽿ -& 聠 - = 聠 -& 聰 - = 聰 -& 聿 - <<< ⾀ - << ⺻ -& 肀 - <<< ⺺ -& 肉 - <<< ⾁ - << ⺼ -& 肭 - = 肭 -& 育 - = 育 -& 脃 - = 脃 -& 脾 - = 脾 -& 臣 - <<< ⾂ -& 自 - <<< ⾃ -& 至 - <<< ⾄ -& 臼 - <<< ⾅ - << ⺽ -& 舁 - = 舁 - = 舁 -& 舄 - = 舄 -& 舌 - <<< ⾆ -& 舛 - <<< ⾇ -& 舟 - <<< ⾈ -& 艮 - <<< ⾉ -& 色 - <<< ⾊ -& 艸 - <<< ⾋ -& 艹 - <<< ⺾ - << ⺿ - << ⻀ -& 芋 - = 芋 -& 芑 - = 芑 -& 芝 - = 芝 -& 花 - = 花 -& 芳 - = 芳 -& 芽 - = 芽 -& 若 - = 若 -& 苦 - = 苦 -& 茝 - = 茝 -& 茣 - = 茣 -& 荓 - = 荓 -& 荣 - = 荣 -& 莭 - = 莭 -& 莽 - = 莽 -& 菊 - = 菊 -& 菌 - = 菌 -& 菜 - = 菜 -& 菧 - = 菧 -& 著 - = 著 -& 蓱 - = 蓱 -& 蓳 - = 蓳 -& 蔖 - = 蔖 -& 蕤 - = 蕤 -& 虍 - <<< ⾌ -& 虎 - <<< ⻁ -& 虐 - = 虐 -& 虜 - = 虜 -& 虧 - = 虧 -& 虩 - = 虩 -& 虫 - <<< ⾍ -& 蚈 - = 蚈 -& 蚩 - = 蚩 -& 蛢 - = 蛢 -& 蜎 - = 蜎 -& 蜨 - = 蜨 -& 蝫 - = 蝫 -& 蝹 - = 蝹 -& 螆 - = 螆 -& 蟡 - = 蟡 -& 蠁 - = 蠁 -& 血 - <<< ⾎ -& 行 - <<< ⾏ -& 衠 - = 衠 -& 衣 - = 衣 - <<< ⾐ -& 衤 - <<< ⻂ -& 裗 - = 裗 -& 裞 - = 裞 -& 裺 - = 裺 -& 襾 - <<< ⾑ -& 西 - <<< ⻄ -& 覀 - <<< ⻃ -& 見 - <<< ⾒ -& 见 - <<< ⻅ -& 角 - <<< ⻆ - = ⾓ - << ⻇ -& 言 - <<< ⾔ -& 誠 - = 誠 -& 諭 - = 諭 -& 變 - = 變 -& 讠 - <<< ⻈ -& 谷 - <<< ⾕ -& 豆 - <<< ⾖ -& 豕 - = 豕 - <<< ⾗ -& 豸 - <<< ⾘ -& 貝 - <<< ⾙ -& 財 - <<< ㊖ -& 貫 - = 貫 -& 賁 - = 賁 -& 資 - <<< ㊮ -& 贛 - = 贛 -& 贝 - <<< ⻉ -& 赤 - <<< ⾚ -& 走 - <<< ⾛ -& 起 - = 起 -& 足 - <<< ⾜ - << ⻊ -& 趼 - = 趼 -& 跋 - = 跋 -& 跰 - = 跰 -& 身 - <<< ⾝ -& 車 - <<< ⾞ -& 軔 - = 軔 -& 輸 - = 輸 -& 车 - <<< ⻋ -& 辛 - <<< ⾟ -& 辞 - = 辞 -& 辰 - <<< ⾠ -& 辵 - <<< ⾡ -& 辶 - <<< ⻌ - << ⻍ - << ⻎ -& 適 - <<< ㊜ -& 邑 - <<< ⾢ - << ⻏ -& 邔 - = 邔 -& 郱 - = 郱 -& 鄑 - = 鄑 -& 鄛 - = 鄛 -& 酉 - <<< ⾣ -& 釆 - <<< ⾤ -& 里 - <<< ⾥ -& 金 - <<< ⾦ - <<< ㊎ -& 鈸 - = 鈸 -& 鉼 - = 鉼 -& 鋗 - = 鋗 -& 鋘 - = 鋘 -& 鏹 - = 鏹 -& 鐕 - = 鐕 -& 钅 - <<< ⻐ -& 長 - <<< ⻑ - = ⾧ -& 镸 - <<< ⻒ -& 长 - <<< ⻓ -& 門 - <<< ⾨ -& 開 - = 開 -& 閷 - = 閷 -& 门 - <<< ⻔ -& 阜 - <<< ⾩ - << ⻕ -& 阝 - <<< ⻖ -& 隶 - <<< ⾪ -& 隹 - <<< ⾫ -& 雃 - = 雃 -& 雨 - <<< ⾬ - << ⻗ -& 霣 - = 霣 -& 靑 - <<< ⾭ -& 青 - <<< ⻘ -& 非 - <<< ⾮ -& 面 - <<< ⾯ -& 革 - <<< ⾰ -& 韋 - <<< ⾱ -& 韠 - = 韠 -& 韦 - <<< ⻙ -& 韭 - <<< ⾲ -& 音 - <<< ⾳ -& 頁 - <<< ⾴ -& 項 - <<< ㊠ -& 頋 - = 頋 - = 頋 -& 頩 - = 頩 -& 页 - <<< ⻚ -& 風 - <<< ⾵ -& 风 - <<< ⻛ -& 飛 - <<< ⾶ -& 飞 - <<< ⻜ -& 食 - <<< ⻝ - = ⾷ -& 飠 - <<< ⻟ - << ⻞ -& 飢 - = 飢 -& 餩 - = 餩 -& 饣 - <<< ⻠ -& 首 - <<< ⾸ - << ⻡ -& 香 - <<< ⾹ -& 馧 - = 馧 -& 馬 - <<< ⾺ -& 駂 - = 駂 -& 駾 - = 駾 -& 马 - <<< ⻢ -& 骨 - <<< ⾻ - << ⻣ -& 高 - <<< ⾼ -& 髟 - <<< ⾽ -& 鬒 - = 鬒 -& 鬥 - <<< ⾾ -& 鬯 - <<< ⾿ -& 鬲 - <<< ⿀ -& 鬼 - <<< ⿁ - << ⻤ -& 魚 - <<< ⿂ -& 鱀 - = 鱀 -& 鱼 - <<< ⻥ -& 鳥 - <<< ⿃ -& 鳽 - = 鳽 -& 鵧 - = 鵧 -& 鸟 - <<< ⻦ -& 鹵 - <<< ⿄ - << ⻧ -& 鹿 - <<< ⿅ -& 麥 - <<< ⿆ -& 麦 - <<< ⻨ -& 麻 - = 麻 - <<< ⿇ -& 黃 - <<< ⿈ -& 黄 - <<< ⻩ -& 黍 - <<< ⿉ -& 黑 - <<< ⿊ -& 黹 - = 黹 - <<< ⿋ -& 黽 - <<< ⿌ -& 黾 - = 黾 - <<< ⻪ -& 鼅 - = 鼅 -& 鼎 - <<< ⿍ -& 鼏 - = 鼏 -& 鼓 - <<< ⿎ -& 鼖 - = 鼖 -& 鼠 - <<< ⿏ -& 鼻 - = 鼻 - <<< ⿐ -& 齊 - <<< ⿑ - << ⻫ -& 齐 - <<< ⻬ -& 齒 - <<< ⿒ - << ⻭ -& 齿 - <<< ⻮ -& 龍 - <<< ⿓ - << ⻯ -& 龙 - <<< ⻰ -& 龜 - <<< ⿔ - << ⻱ - << ⻲ -& 龟 - <<< ⻳ -& 龠 - <<< ⿕ -& 﨎 - = 﨎 -& 﨏 - = 﨏 -& 﨑 - = 﨑 -& 﨓 - = 﨓 -& 﨔 - = 﨔 -& 﨟 - = 﨟 -& 﨡 - = 﨡 -& 﨣 - = 﨣 -& 﨤 - = 﨤 -& 﨧 - = 﨧 -& 﨨 - = 﨨 -& 﨩 - = 﨩 -& 㒞 - = 㒞 -& 㒹 - = 㒹 -& 㒻 - = 㒻 -& 㓟 - = 㓟 -& 㔕 - = 㔕 -& 㛮 - = 㛮 -& 㛼 - = 㛼 -& 㞁 - = 㞁 -& 㠯 - = 㠯 -& 㡢 - = 㡢 -& 㡼 - = 㡼 -& 㣇 - = 㣇 -& 㣣 - = 㣣 -& 㤜 - = 㤜 -& 㤺 - = 㤺 -& 㨮 - = 㨮 -& 㩬 - = 㩬 -& 㫤 - = 㫤 -& 㬈 - = 㬈 -& 㬙 - = 㬙 -& 㭉 - = 㭉 -& 㮝 - = 㮝 -& 㰘 - = 㰘 -& 㱎 - = 㱎 -& 㴳 - = 㴳 -& 㶖 - = 㶖 -& 㺬 - = 㺬 -& 㺸 - = 㺸 - = 㺸 -& 㼛 - = 㼛 -& 㿼 - = 㿼 -& 䀈 - = 䀈 -& 䀹 - = 䀹 -& 䁆 - = 䁆 -& 䂖 - = 䂖 -& 䃣 - = 䃣 -& 䄯 - = 䄯 -& 䈂 - = 䈂 -& 䈧 - = 䈧 -& 䊠 - = 䊠 -& 䌁 - = 䌁 -& 䌴 - = 䌴 -& 䍙 - = 䍙 -& 䏕 - = 䏕 -& 䏙 - = 䏙 -& 䐋 - = 䐋 -& 䑫 - = 䑫 -& 䔫 - = 䔫 -& 䕝 - = 䕝 -& 䕡 - = 䕡 -& 䕫 - = 䕫 -& 䗗 - = 䗗 -& 䗹 - = 䗹 -& 䘵 - = 䘵 -& 䚾 - = 䚾 -& 䛇 - = 䛇 -& 䦕 - = 䦕 -& 䧦 - = 䧦 -& 䩮 - = 䩮 -& 䩶 - = 䩶 -& 䪲 - = 䪲 -& 䬳 - = 䬳 -& 䯎 - = 䯎 -& 䳎 - = 䳎 -& 䳭 - = 䳭 -& 䳸 - = 䳸 -& 䵖 - = 䵖 -& 𠄢 - = 𠄢 -& 𠔜 - = 𠔜 -& 𠔥 - = 𠔥 -& 𠕋 - = 𠕋 -& 𠘺 - = 𠘺 -& 𠠄 - = 𠠄 -& 𠣞 - = 𠣞 -& 𠨬 - = 𠨬 -& 𠭣 - = 𠭣 -& 𡓤 - = 𡓤 -& 𡚨 - = 𡚨 -& 𡛪 - = 𡛪 -& 𡧈 - = 𡧈 -& 𡬘 - = 𡬘 -& 𡴋 - = 𡴋 -& 𡷤 - = 𡷤 -& 𡷦 - = 𡷦 -& 𢆃 - = 𢆃 -& 𢆟 - = 𢆟 -& 𢌱 - = 𢌱 - = 𢌱 -& 𢛔 - = 𢛔 -& 𢬌 - = 𢬌 -& 𢯱 - = 𢯱 -& 𣀊 - = 𣀊 -& 𣊸 - = 𣊸 -& 𣍟 - = 𣍟 -& 𣎓 - = 𣎓 -& 𣎜 - = 𣎜 -& 𣏃 - = 𣏃 -& 𣑭 - = 𣑭 -& 𣚣 - = 𣚣 -& 𣢧 - = 𣢧 -& 𣪍 - = 𣪍 -& 𣫺 - = 𣫺 -& 𣲼 - = 𣲼 -& 𣴞 - = 𣴞 -& 𣻑 - = 𣻑 -& 𣽞 - = 𣽞 -& 𣾎 - = 𣾎 -& 𤉣 - = 𤉣 -& 𤎫 - = 𤎫 -& 𤘈 - = 𤘈 -& 𤜵 - = 𤜵 -& 𤠔 - = 𤠔 -& 𤰶 - = 𤰶 -& 𤲒 - = 𤲒 -& 𤾡 - = 𤾡 -& 𤾸 - = 𤾸 -& 𥁄 - = 𥁄 -& 𥃲 - = 𥃲 -& 𥃳 - = 𥃳 -& 𥄙 - = 𥄙 -& 𥄳 - = 𥄳 -& 𥐝 - = 𥐝 -& 𥘦 - = 𥘦 -& 𥚚 - = 𥚚 -& 𥛅 - = 𥛅 -& 𥥼 - = 𥥼 -& 𥪧 - = 𥪧 - = 𥪧 -& 𥮫 - = 𥮫 -& 𥲀 - = 𥲀 -& 𥾆 - = 𥾆 -& 𦇚 - = 𦇚 -& 𦈨 - = 𦈨 -& 𦉇 - = 𦉇 -& 𦋙 - = 𦋙 -& 𦌾 - = 𦌾 -& 𦓚 - = 𦓚 -& 𦔣 - = 𦔣 -& 𦖨 - = 𦖨 -& 𦞧 - = 𦞧 -& 𦞵 - = 𦞵 -& 𦬼 - = 𦬼 -& 𦰶 - = 𦰶 -& 𦳕 - = 𦳕 -& 𦵫 - = 𦵫 -& 𦼬 - = 𦼬 -& 𦾱 - = 𦾱 -& 𧃒 - = 𧃒 -& 𧏊 - = 𧏊 -& 𧙧 - = 𧙧 -& 𧢮 - = 𧢮 -& 𧥦 - = 𧥦 -& 𧲨 - = 𧲨 -& 𧼯 - = 𧼯 -& 𨗒 - = 𨗒 -& 𨗭 - = 𨗭 -& 𨜮 - = 𨜮 -& 𨯺 - = 𨯺 -& 𨵷 - = 𨵷 -& 𩅅 - = 𩅅 -& 𩇟 - = 𩇟 -& 𩈚 - = 𩈚 -& 𩐊 - = 𩐊 -& 𩒖 - = 𩒖 -& 𩖶 - = 𩖶 -& 𩬰 - = 𩬰 -& 𪃎 - = 𪃎 -& 𪄅 - = 𪄅 -& 𪈎 - = 𪈎 -& 𪊑 - = 𪊑 -& 𪎒 - = 𪎒 -& 𪘀 - = 𪘀 +# UCA Rules +# This file contains the UCA tables for the given version, but transformed into rule syntax. +# Generated: 2006-06-10, 20:18:15 GMT [MD] +# NOTE: Since UCA handles canonical equivalents, no composites are necessary +# (except in extensions). +# For syntax description, see: http://oss.software.ibm.com/icu/userguide/Collate_Intro.html +# Copyright (c) 1991-2006 Unicode, Inc. +# VERSION: UCA=5.0.0, UCD=5.0.0 +& [last tertiary ignorable] + + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '' + = '€' + = '' + = '‚' + = 'ƒ' + = '„' + = '†' + = '‡' + = 'ˆ' + = '‰' + = 'Š' + = '‹' + = 'Œ' + = '' + = 'Ž' + = '' + = '' + = '‘' + = '’' + = '“' + = '”' + = '•' + = '–' + = '—' + = '˜' + = '™' + = 'š' + = '›' + = 'œ' + = '' + = 'ž' + = 'Ÿ' + = ͏ + = ҈ + = ҉ + = ֑ + = ֒ + = ֓ + = ֔ + = ֕ + = ֖ + = ֗ + = ֘ + = ֙ + = ֚ + = ֛ + = ֜ + = ֝ + = ֞ + = ֟ + = ֠ + = ֡ + = ֢ + = ֣ + = ֤ + = ֥ + = ֦ + = ֧ + = ֨ + = ֩ + = ֪ + = ֫ + = ֬ + = ֭ + = ֮ + = ֯ + = ֽ + = ׄ + = ׅ + = '؀' + = '؁' + = '؂' + = '؃' + = ؐ + = ؑ + = ؒ + = ؓ + = ؔ + = ؕ + = ۖ + = ۗ + = ۘ + = ۙ + = ۚ + = ۛ + = ۜ + = '۝' + = ۞ + = ۟ + = ۠ + = ۡ + = ۢ + = ۣ + = ۤ + = ۧ + = ۨ + = ۪ + = ۫ + = ۬ + = ۭ + = '܏' + = ༘ + = ༙ + = ༵ + = ༷ + = ྂ + = ྃ + = ྆ + = ྇ + = ࿆ + = ᠋ + = ᠌ + = ᠍ + = '᠎' + = '᭫' + = '᭬' + = '᭭' + = '᭮' + = '᭯' + = '᭰' + = '᭱' + = '᭲' + = '᭳' + = '​' + = '‌' + = '‍' + = '‎' + = '‏' + = '‪' + = '‫' + = '‬' + = '‭' + = '‮' + = '⁠' + = '⁡' + = '⁢' + = '⁣' + = '' + = '' + = '' + = '' + = '' + = '' + = ︀ + = ︁ + = ︂ + = ︃ + = ︄ + = ︅ + = ︆ + = ︇ + = ︈ + = ︉ + = ︊ + = ︋ + = ︌ + = ︍ + = ︎ + = ️ + = ︡ + = ︣ + = ﹳ + = '' + = '' + = '' + = '' + = 𝅥 + = 𝅦 + = 𝅧 + = 𝅨 + = 𝅩 + = 𝅭 + = 𝅮 + = 𝅯 + = 𝅰 + = 𝅱 + = 𝅲 + = '𝅳' + = '𝅴' + = '𝅵' + = '𝅶' + = '𝅷' + = '𝅸' + = '𝅹' + = '𝅺' + = 𝅻 + = 𝅼 + = 𝅽 + = 𝅾 + = 𝅿 + = 𝆀 + = 𝆁 + = 𝆂 + = 𝆅 + = 𝆆 + = 𝆇 + = 𝆈 + = 𝆉 + = 𝆊 + = 𝆋 + = 𝆪 + = 𝆫 + = 𝆬 + = 𝆭 + = 𝉂 + = 𝉃 + = 𝉄 + = '󠀁' + = '󠀠' + = '󠀡' + = '󠀢' + = '󠀣' + = '󠀤' + = '󠀥' + = '󠀦' + = '󠀧' + = '󠀨' + = '󠀩' + = '󠀪' + = '󠀫' + = '󠀬' + = '󠀭' + = '󠀮' + = '󠀯' + = '󠀰' + = '󠀱' + = '󠀲' + = '󠀳' + = '󠀴' + = '󠀵' + = '󠀶' + = '󠀷' + = '󠀸' + = '󠀹' + = '󠀺' + = '󠀻' + = '󠀼' + = '󠀽' + = '󠀾' + = '󠀿' + = '󠁀' + = '󠁁' + = '󠁂' + = '󠁃' + = '󠁄' + = '󠁅' + = '󠁆' + = '󠁇' + = '󠁈' + = '󠁉' + = '󠁊' + = '󠁋' + = '󠁌' + = '󠁍' + = '󠁎' + = '󠁏' + = '󠁐' + = '󠁑' + = '󠁒' + = '󠁓' + = '󠁔' + = '󠁕' + = '󠁖' + = '󠁗' + = '󠁘' + = '󠁙' + = '󠁚' + = '󠁛' + = '󠁜' + = '󠁝' + = '󠁞' + = '󠁟' + = '󠁠' + = '󠁡' + = '󠁢' + = '󠁣' + = '󠁤' + = '󠁥' + = '󠁦' + = '󠁧' + = '󠁨' + = '󠁩' + = '󠁪' + = '󠁫' + = '󠁬' + = '󠁭' + = '󠁮' + = '󠁯' + = '󠁰' + = '󠁱' + = '󠁲' + = '󠁳' + = '󠁴' + = '󠁵' + = '󠁶' + = '󠁷' + = '󠁸' + = '󠁹' + = '󠁺' + = '󠁻' + = '󠁼' + = '󠁽' + = '󠁾' + = '󠁿' + = 󠄀 + = 󠄁 + = 󠄂 + = 󠄃 + = 󠄄 + = 󠄅 + = 󠄆 + = 󠄇 + = 󠄈 + = 󠄉 + = 󠄊 + = 󠄋 + = 󠄌 + = 󠄍 + = 󠄎 + = 󠄏 + = 󠄐 + = 󠄑 + = 󠄒 + = 󠄓 + = 󠄔 + = 󠄕 + = 󠄖 + = 󠄗 + = 󠄘 + = 󠄙 + = 󠄚 + = 󠄛 + = 󠄜 + = 󠄝 + = 󠄞 + = 󠄟 + = 󠄠 + = 󠄡 + = 󠄢 + = 󠄣 + = 󠄤 + = 󠄥 + = 󠄦 + = 󠄧 + = 󠄨 + = 󠄩 + = 󠄪 + = 󠄫 + = 󠄬 + = 󠄭 + = 󠄮 + = 󠄯 + = 󠄰 + = 󠄱 + = 󠄲 + = 󠄳 + = 󠄴 + = 󠄵 + = 󠄶 + = 󠄷 + = 󠄸 + = 󠄹 + = 󠄺 + = 󠄻 + = 󠄼 + = 󠄽 + = 󠄾 + = 󠄿 + = 󠅀 + = 󠅁 + = 󠅂 + = 󠅃 + = 󠅄 + = 󠅅 + = 󠅆 + = 󠅇 + = 󠅈 + = 󠅉 + = 󠅊 + = 󠅋 + = 󠅌 + = 󠅍 + = 󠅎 + = 󠅏 + = 󠅐 + = 󠅑 + = 󠅒 + = 󠅓 + = 󠅔 + = 󠅕 + = 󠅖 + = 󠅗 + = 󠅘 + = 󠅙 + = 󠅚 + = 󠅛 + = 󠅜 + = 󠅝 + = 󠅞 + = 󠅟 + = 󠅠 + = 󠅡 + = 󠅢 + = 󠅣 + = 󠅤 + = 󠅥 + = 󠅦 + = 󠅧 + = 󠅨 + = 󠅩 + = 󠅪 + = 󠅫 + = 󠅬 + = 󠅭 + = 󠅮 + = 󠅯 + = 󠅰 + = 󠅱 + = 󠅲 + = 󠅳 + = 󠅴 + = 󠅵 + = 󠅶 + = 󠅷 + = 󠅸 + = 󠅹 + = 󠅺 + = 󠅻 + = 󠅼 + = 󠅽 + = 󠅾 + = 󠅿 + = 󠆀 + = 󠆁 + = 󠆂 + = 󠆃 + = 󠆄 + = 󠆅 + = 󠆆 + = 󠆇 + = 󠆈 + = 󠆉 + = 󠆊 + = 󠆋 + = 󠆌 + = 󠆍 + = 󠆎 + = 󠆏 + = 󠆐 + = 󠆑 + = 󠆒 + = 󠆓 + = 󠆔 + = 󠆕 + = 󠆖 + = 󠆗 + = 󠆘 + = 󠆙 + = 󠆚 + = 󠆛 + = 󠆜 + = 󠆝 + = 󠆞 + = 󠆟 + = 󠆠 + = 󠆡 + = 󠆢 + = 󠆣 + = 󠆤 + = 󠆥 + = 󠆦 + = 󠆧 + = 󠆨 + = 󠆩 + = 󠆪 + = 󠆫 + = 󠆬 + = 󠆭 + = 󠆮 + = 󠆯 + = 󠆰 + = 󠆱 + = 󠆲 + = 󠆳 + = 󠆴 + = 󠆵 + = 󠆶 + = 󠆷 + = 󠆸 + = 󠆹 + = 󠆺 + = 󠆻 + = 󠆼 + = 󠆽 + = 󠆾 + = 󠆿 + = 󠇀 + = 󠇁 + = 󠇂 + = 󠇃 + = 󠇄 + = 󠇅 + = 󠇆 + = 󠇇 + = 󠇈 + = 󠇉 + = 󠇊 + = 󠇋 + = 󠇌 + = 󠇍 + = 󠇎 + = 󠇏 + = 󠇐 + = 󠇑 + = 󠇒 + = 󠇓 + = 󠇔 + = 󠇕 + = 󠇖 + = 󠇗 + = 󠇘 + = 󠇙 + = 󠇚 + = 󠇛 + = 󠇜 + = 󠇝 + = 󠇞 + = 󠇟 + = 󠇠 + = 󠇡 + = 󠇢 + = 󠇣 + = 󠇤 + = 󠇥 + = 󠇦 + = 󠇧 + = 󠇨 + = 󠇩 + = 󠇪 + = 󠇫 + = 󠇬 + = 󠇭 + = 󠇮 + = 󠇯 +& [last primary ignorable] + << ̲ + << ̓ + << ̔ + << ́ + << ̀ + << ̆ + << ̂ + << ̌ + << ̊ + << ͂ + << ̈ + << ̋ + << ̃ + << ̇ + << ̸ + << ̧ + << ̨ + << ̄ + << ̅ + << ̉ + << ̍ + << ̎ + << ̏ + << ̐ + << ̑ + << ̒ + << ̕ + << ̖ + << ̗ + << ̘ + << ̙ + << ̚ + << ̛ + << ̜ + << ̝ + << ̞ + << ̟ + << ̠ + << ̡ + << ̢ + << ̣ + << ̤ + << ̥ + << ̦ + << ̩ + << ̪ + << ̫ + << ̬ + << ̭ + << ̮ + << ̯ + << ̰ + << ̱ + << ̳ + << ̴ + << ̵ + << ̶ + << ̷ + << ̹ + << ̺ + << ̻ + << ̼ + << ̽ + << ̾ + << ̿ + << ͅ + << ͆ + << ͇ + << ͈ + << ͉ + << ͊ + << ͋ + << ͌ + << ͍ + << ͎ + << ͐ + << ͑ + << ͒ + << ͓ + << ͔ + << ͕ + << ͖ + << ͗ + << ͘ + << ͙ + << ͚ + << ͛ + << ͜ + << ͝ + << ͞ + << ͟ + << ͠ + = ︢ + << ͡ + = ︠ + << ͢ + << ᷀ + << ᷁ + << ᷂ + << ᷃ + << '᷄' + << '᷅' + << '᷆' + << '᷇' + << '᷈' + << '᷉' + << '᷊' + << '᷾' + << '᷿' + << ҃ + << ҄ + << ҅ + << ҆ + << ְ + << ֱ + << ֲ + << ֳ + << ִ + << ֵ + << ֶ + << ַ + << ָ + << ׇ + << ֹ + << 'ֺ' + << ֻ + << ׂ + << ׁ + << ּ + << ֿ + << ﬞ + << ً + <<< ﹱ + <<< ﹰ + << ٌ + <<< ﹲ + << ٍ + <<< ﹴ + << َ + <<< ﹷ + <<< ﹶ + << ُ + <<< ﹹ + <<< ﹸ + << ِ + <<< ﹻ + <<< ﹺ + << ّ + <<< ﳲ + = ﳳ + = ﳴ + = ﹽ + <<< ﱞ + = ﱟ + = ﱠ + = ﱡ + = ﱢ + = ﹼ + <<< ﱣ / ٰ + << ْ + <<< ﹿ + <<< ﹾ + << ٓ + << ٔ + << ٕ + << ٖ + << ٗ + << ٘ + << ٙ + << ٚ + << ٛ + << ٜ + << ٝ + << ٞ + << ٰ + << ܑ + << ܰ + << ܱ + << ܲ + << ܳ + << ܴ + << ܵ + << ܶ + << ܷ + << ܸ + << ܹ + << ܺ + << ܻ + << ܼ + << ܽ + << ܾ + << ܿ + << ݀ + << ݁ + << ݂ + << ݃ + << ݄ + << ݅ + << ݆ + << ݇ + << ݈ + << ݉ + << ݊ + << '߫' + << '߬' + << '߭' + << '߮' + << '߯' + << '߰' + << '߱' + << '߲' + << '߳' + << ़ + << ँ + << ं + << ः + << ॑ + << ॒ + << ॓ + << ॔ + << ় + << ঁ + << ং + << ঃ + << ਼ + << ਁ + << ਂ + << ਃ + << ੰ + << ੱ + << ઼ + << ઁ + << ં + << ઃ + << ଼ + << ଁ + << ଂ + << ଃ + << ஂ + << ఁ + << ం + << ః + << ಼ + << ಂ + << ಃ + << ം + << ഃ + << ං + << ඃ + << '᬴' + << 'ᬀ' + << 'ᬁ' + << 'ᬂ' + << 'ᬃ' + << 'ᬄ' + << ꠋ + << 𐨍 + << 𐨎 + << 𐨏 + << 𐨸 + << 𐨹 + << 𐨺 + << ๎ + << ็ + << ่ + << ้ + << ๊ + << ๋ + << ์ + << ํ + << ່ + << ້ + << ໊ + << ໋ + << ໌ + << ໍ + << ༹ + << ཾ + << ཿ + << ံ + << ့ + << း + << ፟ + << ំ + << ះ + << ៈ + << ៉ + << ៊ + << ់ + << ៌ + << ៍ + << ៎ + << ៏ + << ័ + << ៑ + << ៓ + << ៝ + << ᤹ + << ᤺ + << ᤻ + << 〪 + << 〫 + << 〬 + << 〭 + << 〮 + << 〯 + << ゙ + <<< ゙ + << ゚ + <<< ゚ + << ⃐ + << ⃑ + << ⃒ + << ⃓ + << ⃔ + << ⃕ + << ⃖ + << ⃗ + << ⃘ + << ⃙ + << ⃚ + << ⃛ + << ⃜ + << ⃝ + << ⃞ + << ⃟ + << ⃠ + << ⃡ + << ⃢ + << ⃣ + << ⃤ + << ⃥ + << ⃦ + << ⃧ + << ⃨ + << ⃩ + << ⃪ + << ⃫ + << '⃬' + << '⃭' + << '⃮' + << '⃯' +& [last regular] + < ' ' + < '\u000A' + < ' ' + < ' ' + < '\u000D' + < '…' + < '\u2028' + < '\u2029' + < ' ' + <<< ' ' + <<< ' ' + = ' ' + = ' ' + = ' ' + = ' ' + = ' ' + = ' ' + = ' ' + = ' ' + <<< ' ' + = ' ' + = ' ' + < ' ' + < ـ + < 'ߺ' + < '`' + <<< ` + < ´ + = ΄ + < ˜ + < '^' + <<< ^ + < ¯ + <<<  ̄ + < ‾ + <<< ﹉ + = ﹊ + = ﹋ + = ﹌ + < ˘ + < ˙ + < ¨ + < ˚ + < ˝ + < ᾽ + = ᾿ + < ῾ + < ¸ + < ˛ + < '_' + <<< _ + <<< ﹍ + = ﹎ + = ﹏ + <<< ︳ + = ︴ + < ‗ + < ῀ + < ゛ + < ゜ + < '­' + < '-' + <<< - + <<< ﹣ + < ֊ + < '᭠' + < ᠆ + < ᠇ + < ‐ + <<< ‑ + < ‒ + < – + <<< ︲ + < — + <<< ﹘ + <<< ︱ + < ― + < ⁓ + < ⸗ + < 〜 + < 〰 + < ゠ + < ・ + <<< ・ + < ',' + <<< , + <<< ﹐ + <<< ︐ + < ՝ + < ، + < ؍ + < ٫ + < ٬ + < '߸' + < ᠂ + < ᠈ + < 、 + <<< ﹑ + <<< 、 + <<< ︑ + < ﹅ + < ﹆ + < ';' + <<< ; + <<< ﹔ + <<< ︔ + < ؛ + < ⁏ + < ':' + <<< : + <<< ⩴ / ':=' + <<< ﹕ + <<< ︓ + < ։ + < ؞ + < ܃ + < ܄ + < ܅ + < ܆ + < ܇ + < ܈ + < ፡ + < ፣ + < ፤ + < ፥ + < ፦ + < ᠄ + < ᠅ + < ༔ + < ៖ + < '᭝' + < ᛫ + < ᛬ + < ᛭ + < '!' + <<< ! + <<< ‼ / '!' + <<< ⁉ / '?' + <<< ﹗ + <<< ︕ + < ¡ + < ՜ + < '߹' + < ᥄ + < '?' + <<< ? + <<< ⁈ / '!' + <<< ⁇ / '?' + <<< ﹖ + <<< ︖ + < ¿ + < ՞ + < ؟ + < ܉ + < ፧ + < ᥅ + < ⳺ + < ⳻ + < ‽ + < '.' + <<< . + <<< ․ + <<< ‥ / '.' + <<< … / '..' + <<< ﹒ + <<< ︰ / '.' + <<< ︙ / '..' + < ᠁ + < ۔ + < ܁ + < ܂ + < ። + < ᠃ + < ᠉ + < ᙮ + < '᭜' + < ⳹ + < ⳾ + < 。 + <<< 。 + <<< ︒ + < · + < । + < ॥ + < '꡶' + < '꡷' + < ᜵ + < ᜶ + < ၊ + < ။ + < ។ + < ៕ + < '᭞' + < '᭟' + < 𐩖 + < 𐩗 + < ܀ + < '߷' + < ჻ + < ፠ + < ፨ + < ᨞ + < ᨟ + < '᭚' + < '᭛' + < ⁕ + < ⁖ + < ⁘ + < ⁙ + < ⁚ + < ⁛ + < ⁜ + < ⁝ + < ⁞ + < ⳼ + < ⳿ + < 𐄀 + < 𐄁 + < 𐄂 + < 𐎟 + < 𐏐 + < '𐤟' + < '𒑰' + < '𒑱' + < '𒑲' + < '𒑳' + < '' + <<< ' + < ‘ + < ’ + < ‚ + < ‛ + < ‹ + < › + < '"' + <<< " + < “ + < ” + < „ + < ‟ + < 〝 + < 〞 + < 〟 + < « + < » + < '(' + <<< ( + <<< ⑴ / 1')' + <<< ⑽ / 10')' + <<< ⑾ / 11')' + <<< ⑿ / 12')' + <<< ⒀ / 13')' + <<< ⒁ / 14')' + <<< ⒂ / 15')' + <<< ⒃ / 16')' + <<< ⒄ / 17')' + <<< ⒅ / 18')' + <<< ⒆ / 19')' + <<< ⑵ / 2')' + <<< ⒇ / 20')' + <<< ⑶ / 3')' + <<< ⑷ / 4')' + <<< ⑸ / 5')' + <<< ⑹ / 6')' + <<< ⑺ / 7')' + <<< ⑻ / 8')' + <<< ⑼ / 9')' + <<< ⒜ / a')' + <<< ⒝ / b')' + <<< ⒞ / c')' + <<< ⒟ / d')' + <<< ⒠ / e')' + <<< ⒡ / f')' + <<< ⒢ / g')' + <<< ⒣ / h')' + <<< ⒤ / i')' + <<< ⒥ / j')' + <<< ⒦ / k')' + <<< ⒧ / l')' + <<< ⒨ / m')' + <<< ⒩ / n')' + <<< ⒪ / o')' + <<< ⒫ / p')' + <<< ⒬ / q')' + <<< ⒭ / r')' + <<< ⒮ / s')' + <<< ⒯ / t')' + <<< ⒰ / u')' + <<< ⒱ / v')' + <<< ⒲ / w')' + <<< ⒳ / x')' + <<< ⒴ / y')' + <<< ⒵ / z')' + <<< ㈀ / ᄀ')' + <<< ㈎ / 가')' + <<< ㈁ / ᄂ')' + <<< ㈏ / 나')' + <<< ㈂ / ᄃ')' + <<< ㈐ / 다')' + <<< ㈃ / ᄅ')' + <<< ㈑ / 라')' + <<< ㈄ / ᄆ')' + <<< ㈒ / 마')' + <<< ㈅ / ᄇ')' + <<< ㈓ / 바')' + <<< ㈆ / ᄉ')' + <<< ㈔ / 사')' + <<< ㈇ / ᄋ')' + <<< ㈕ / 아')' + <<< ㈝ / 오전')' + <<< ㈞ / 오후')' + <<< ㈈ / ᄌ')' + <<< ㈖ / 자')' + <<< ㈜ / 주')' + <<< ㈉ / ᄎ')' + <<< ㈗ / 차')' + <<< ㈊ / ᄏ')' + <<< ㈘ / 카')' + <<< ㈋ / ᄐ')' + <<< ㈙ / 타')' + <<< ㈌ / ᄑ')' + <<< ㈚ / 파')' + <<< ㈍ / ᄒ')' + <<< ㈛ / 하')' + <<< ㈠ / 一')' + <<< ㈦ / 七')' + <<< ㈢ / 三')' + <<< ㈨ / 九')' + <<< ㈡ / 二')' + <<< ㈤ / 五')' + <<< ㈹ / 代')' + <<< ㈽ / 企')' + <<< ㉁ / 休')' + <<< ㈧ / 八')' + <<< ㈥ / 六')' + <<< ㈸ / 労')' + <<< ㈩ / 十')' + <<< ㈿ / 協')' + <<< ㈴ / 名')' + <<< ㈺ / 呼')' + <<< ㈣ / 四')' + <<< ㈯ / 土')' + <<< ㈻ / 学')' + <<< ㈰ / 日')' + <<< ㈪ / 月')' + <<< ㈲ / 有')' + <<< ㈭ / 木')' + <<< ㈱ / 株')' + <<< ㈬ / 水')' + <<< ㈫ / 火')' + <<< ㈵ / 特')' + <<< ㈼ / 監')' + <<< ㈳ / 社')' + <<< ㈷ / 祝')' + <<< ㉀ / 祭')' + <<< ㉂ / 自')' + <<< ㉃ / 至')' + <<< ㈶ / 財')' + <<< ㈾ / 資')' + <<< ㈮ / 金')' + <<< ﹙ + <<< ⁽ + <<< ₍ + <<< ︵ + < ')' + <<< ) + <<< ﹚ + <<< ⁾ + <<< ₎ + <<< ︶ + < '[' + <<< [ + <<< ﹇ + < ']' + <<< ] + <<< ﹈ + < '{' + <<< { + <<< ﹛ + <<< ︷ + < '}' + <<< } + <<< ﹜ + <<< ︸ + < ༺ + < ༻ + < ༼ + < ༽ + < ᚛ + < ᚜ + < ⁅ + < ⁆ + < ⧼ + < ⧽ + < ⦃ + < ⦄ + < ⦅ + <<< ⦅ + < ⦆ + <<< ⦆ + < ⦇ + < ⦈ + < ⦉ + < ⦊ + < ⦋ + < ⦌ + < ⦍ + < ⦎ + < ⦏ + < ⦐ + < ⦑ + < ⦒ + < ⦓ + < ⦔ + < ⦕ + < ⦖ + < ⦗ + < ⦘ + < ⸂ + < ⸃ + < ⸄ + < ⸅ + < ⸉ + < ⸊ + < ⸌ + < ⸍ + < ⸜ + < ⸝ + < 〈 + <<< ︿ + < 〉 + <<< ﹀ + < 《 + <<< ︽ + < 》 + <<< ︾ + < 「 + <<< 「 + <<< ﹁ + < 」 + <<< 」 + <<< ﹂ + < 『 + <<< ﹃ + < 』 + <<< ﹄ + < 【 + <<< ︻ + < 】 + <<< ︼ + < 〔 + <<< ﹝ + <<< ︹ + < 〕 + <<< ﹞ + <<< ︺ + < 〖 + <<< ︗ + < 〗 + <<< ︘ + < 〘 + < 〙 + < 〚 + < 〛 + < ﴾ + < ﴿ + < § + < ¶ + < ⁋ + < © + < ® + < '@' + <<< @ + <<< ﹫ + < '*' + <<< * + <<< ﹡ + < ⁎ + < ⁑ + < ٭ + < '/' + <<< / + < ⁄ + < '\' + <<< \ + <<< ﹨ + < '&' + <<< & + <<< ﹠ + < ⅋ + < ⁊ + < '#' + <<< # + <<< ﹟ + < '%' + <<< % + <<< ﹪ + < ٪ + < ‰ + < ‱ + < ⁒ + < † + < ‡ + < • + < ‣ + < ‧ + < ⁃ + < ⁌ + < ⁍ + < ′ + <<< ″ / ′ + <<< ‴ / ′′ + <<< ⁗ / ′′′ + < ‵ + <<< ‶ / ‵ + <<< ‷ / ‵‵ + < 〃 + < 〽 + < ‸ + < ※ + < ‿ + < ⁔ + < ⁀ + < ⁐ + < ⁁ + < ⁂ + < ⸀ + < ⸁ + < ⸆ + < ⸇ + < ⸈ + < ⸋ + < ⸎ + < ⸏ + < ⸐ + < ⸑ + < ⸒ + < ⸓ + < ⸔ + < ⸕ + < ⸖ + < ՚ + < ՛ + < ՟ + < ־ + < ׀ + < ׃ + < ׆ + < ׳ + < ״ + < ܊ + < ܋ + < ܌ + < ܍ + < ᠀ + < ᠊ + < ॰ + < ෴ + < ๚ + < ๛ + < ༄ + < ༅ + < ༆ + < ༇ + < ༈ + < ༉ + < ༊ + < ࿐ + < ࿑ + < ་ + <<< ༌ + < ། + < ༎ + < ༏ + < ༐ + < ༑ + < ༒ + < ྅ + < ᥀ + < ၌ + < ၍ + < ၎ + < ၏ + < ៗ + < ៘ + < ៙ + < ៚ + < ᙭ + < '꡴' + < '꡵' + < 𐩐 + < 𐩑 + < 𐩒 + < 𐩓 + < 𐩔 + < 𐩕 + < 𐩘 + < ʹ + < ͵ + < ʺ + < ˂ + < ˃ + < ˄ + < ˅ + < ˆ + < ˇ + < ˈ + < ˉ + < ˊ + < ˋ + < ˌ + < ˍ + < ˎ + < ˏ + < ˒ + < ˓ + < ˔ + < ˕ + < ˖ + < ˗ + < ˞ + < ˟ + < ˥ + < ˦ + < ˧ + < ˨ + < ˩ + < ˪ + < ˫ + < ˬ + < ˭ + < ˯ + < ˰ + < ˱ + < ˲ + < ˳ + < ˴ + < ˵ + < ˶ + < ˷ + < ˸ + < ˹ + < ˺ + < ˻ + < ˼ + < ˽ + < ˾ + < ˿ + < ᎐ + < ᎑ + < ᎒ + < ᎓ + < ᎔ + < ᎕ + < ᎖ + < ᎗ + < ᎘ + < ᎙ + < ꜀ + < ꜁ + < ꜂ + < ꜃ + < ꜄ + < ꜅ + < ꜆ + < ꜇ + < ꜈ + < ꜉ + < ꜊ + < ꜋ + < ꜌ + < ꜍ + < ꜎ + < ꜏ + < ꜐ + < ꜑ + < ꜒ + < ꜓ + < ꜔ + < ꜕ + < ꜖ + < 'ꜗ' + < 'ꜘ' + < 'ꜙ' + < 'ꜚ' + < '꜠' + < '꜡' + < ° + <<< ℃ / C + <<< ℉ / F + < ҂ + < ؎ + < ؏ + < ۩ + < ﷽ + < '߶' + < ৺ + < ୰ + < ௳ + < ௴ + < ௵ + < ௶ + < ௷ + < ௸ + < ௺ + < 'ೱ' + < 'ೲ' + < ꠨ + < ꠩ + < ꠪ + < ꠫ + < ๏ + < ༁ + < ༂ + < ༃ + < ༓ + < ༕ + < ༖ + < ༗ + < ༚ + < ༛ + < ༜ + < ༝ + < ༞ + < ༟ + < ༴ + < ༶ + < ༸ + < ༾ + < ༿ + < ྾ + < ྿ + < ࿀ + < ࿁ + < ࿂ + < ࿃ + < ࿄ + < ࿅ + < ࿇ + < ࿈ + < ࿉ + < ࿊ + < ࿋ + < ࿌ + < ࿏ + < ᧠ + < ᧡ + < ᧢ + < ᧣ + < ᧤ + < ᧥ + < ᧦ + < ᧧ + < ᧨ + < ᧩ + < ᧪ + < ᧫ + < ᧬ + < ᧭ + < ᧮ + < ᧯ + < ᧰ + < ᧱ + < ᧲ + < ᧳ + < ᧴ + < ᧵ + < ᧶ + < ᧷ + < ᧸ + < ᧹ + < ᧺ + < ᧻ + < ᧼ + < ᧽ + < ᧾ + < ᧿ + < '᭡' + < '᭢' + < '᭣' + < '᭤' + < '᭥' + < '᭦' + < '᭧' + < '᭨' + < '᭩' + < '᭪' + < '᭴' + < '᭵' + < '᭶' + < '᭷' + < '᭸' + < '᭹' + < '᭺' + < '᭻' + < '᭼' + < ℄ + < ℈ + < ℔ + < ℗ + < ℘ + < ℞ + < ℟ + < ℣ + < ℥ + < ℧ + < ℩ + < ℮ + < ℺ + < ⅁ + < ⅂ + < ⅃ + < ⅄ + < ⅊ + < ⅌ + < '⅍' + < ← + <<< ← + < → + <<< → + < ↑ + <<< ↑ + < ↓ + <<< ↓ + < ↔ + < ↕ + < ↖ + < ↗ + < ↘ + < ↙ + < ↜ + < ↝ + < ↞ + < ↟ + < ↠ + < ↡ + < ↢ + < ↣ + < ↤ + < ↥ + < ↦ + < ↧ + < ↨ + < ↩ + < ↪ + < ↫ + < ↬ + < ↭ + < ↯ + < ↰ + < ↱ + < ↲ + < ↳ + < ↴ + < ↵ + < ↶ + < ↷ + < ↸ + < ↹ + < ↺ + < ↻ + < ↼ + < ↽ + < ↾ + < ↿ + < ⇀ + < ⇁ + < ⇂ + < ⇃ + < ⇄ + < ⇅ + < ⇆ + < ⇇ + < ⇈ + < ⇉ + < ⇊ + < ⇋ + < ⇌ + < ⇐ + < ⇑ + < ⇒ + < ⇓ + < ⇔ + < ⇕ + < ⇖ + < ⇗ + < ⇘ + < ⇙ + < ⇚ + < ⇛ + < ⇜ + < ⇝ + < ⇞ + < ⇟ + < ⇠ + < ⇡ + < ⇢ + < ⇣ + < ⇤ + < ⇥ + < ⇦ + < ⇧ + < ⇨ + < ⇩ + < ⇪ + < ⇫ + < ⇬ + < ⇭ + < ⇮ + < ⇯ + < ⇰ + < ⇱ + < ⇲ + < ⇳ + < ⇴ + < ⇵ + < ⇶ + < ⇷ + < ⇸ + < ⇹ + < ⇺ + < ⇻ + < ⇼ + < ⇽ + < ⇾ + < ⇿ + < ∀ + < ∁ + < ∂ + <<< 𝛛 + = 𝜕 + = 𝝏 + = 𝞉 + = 𝟃 + < ∃ + < ∅ + < ∆ + < ∇ + <<< 𝛁 + = 𝛻 + = 𝜵 + = 𝝯 + = 𝞩 + < ∈ + < ∊ + < ∋ + < ∍ + < ϶ + < ∎ + < ∏ + < ∐ + < ∑ + <<< ⅀ + < '+' + <<< + + <<< ﬩ + <<< ﹢ + <<< ⁺ + <<< ₊ + < ± + < ÷ + < × + < '<' + <<< < + <<< ﹤ + < '=' + <<< = + <<< ⩵ / '=' + <<< ⩶ / '==' + <<< ﹦ + <<< ⁼ + <<< ₌ + < '>' + <<< > + <<< ﹥ + < ¬ + <<< ¬ + < '|' + <<< | + < ¦ + <<< ¦ + < ‖ + < '~' + <<< ~ + < − + <<< ⁻ + <<< ₋ + < ∓ + < ∔ + < ∕ + < ∖ + < ∗ + < ∘ + < ∙ + < √ + < ∛ + < ∜ + < ∝ + < ∞ + < ∟ + < ∠ + < ∡ + < ∢ + < ∣ + < ∥ + < ∧ + < ∨ + < ∩ + < ∪ + < ∫ + <<< ∬ / ∫ + <<< ∭ / ∫∫ + <<< ⨌ / ∫∫∫ + < ∮ + <<< ∯ / ∮ + <<< ∰ / ∮∮ + < ∱ + < ∲ + < ∳ + < ∴ + < ∵ + < ∶ + < ∷ + < ∸ + < ∹ + < ∺ + < ∻ + < ∼ + < ∽ + < ∾ + < ∿ + < ≀ + < ≂ + < ≃ + < ≅ + < ≆ + < ≈ + < ≊ + < ≋ + < ≌ + < ≍ + < ≎ + < ≏ + < ≐ + < ≑ + < ≒ + < ≓ + < ≔ + < ≕ + < ≖ + < ≗ + < ≘ + < ≙ + < ≚ + < ≛ + < ≜ + < ≝ + < ≞ + < ≟ + < ≡ + < ≣ + < ≤ + < ≥ + < ≦ + < ≧ + < ≨ + < ≩ + < ≪ + < ≫ + < ≬ + < ≲ + < ≳ + < ≶ + < ≷ + < ≺ + < ≻ + < ≼ + < ≽ + < ≾ + < ≿ + < ⊂ + < ⊃ + < ⊆ + < ⊇ + < ⊊ + < ⊋ + < ⊌ + < ⊍ + < ⊎ + < ⊏ + < ⊐ + < ⊑ + < ⊒ + < ⊓ + < ⊔ + < ⊕ + < ⊖ + < ⊗ + < ⊘ + < ⊙ + < ⊚ + < ⊛ + < ⊜ + < ⊝ + < ⊞ + < ⊟ + < ⊠ + < ⊡ + < ⊢ + < ⊣ + < ⊤ + < ⊥ + < ⊦ + < ⊧ + < ⊨ + < ⊩ + < ⊪ + < ⊫ + < ⊰ + < ⊱ + < ⊲ + < ⊳ + < ⊴ + < ⊵ + < ⊶ + < ⊷ + < ⊸ + < ⊹ + < ⊺ + < ⊻ + < ⊼ + < ⊽ + < ⊾ + < ⊿ + < ⋀ + < ⋁ + < ⋂ + < ⋃ + < ⋄ + < ⋅ + < ⋆ + < ⋇ + < ⋈ + < ⋉ + < ⋊ + < ⋋ + < ⋌ + < ⋍ + < ⋎ + < ⋏ + < ⋐ + < ⋑ + < ⋒ + < ⋓ + < ⋔ + < ⋕ + < ⋖ + < ⋗ + < ⋘ + < ⋙ + < ⋚ + < ⋛ + < ⋜ + < ⋝ + < ⋞ + < ⋟ + < ⋤ + < ⋥ + < ⋦ + < ⋧ + < ⋨ + < ⋩ + < ⋮ + < ⋯ + < ⋰ + < ⋱ + < ⋲ + < ⋳ + < ⋴ + < ⋵ + < ⋶ + < ⋷ + < ⋸ + < ⋹ + < ⋺ + < ⋻ + < ⋼ + < ⋽ + < ⋾ + < ⋿ + < ⌀ + < ⌁ + < ⌂ + < ⌃ + < ⌄ + < ⌅ + < ⌆ + < ⌇ + < ⌈ + < ⌉ + < ⌊ + < ⌋ + < ⌌ + < ⌍ + < ⌎ + < ⌏ + < ⌐ + < ⌑ + < ⌒ + < ⌓ + < ⌔ + < ⌕ + < ⌖ + < ⌗ + < ⌘ + < ⌙ + < ⌚ + < ⌛ + < ⌜ + < ⌝ + < ⌞ + < ⌟ + < ⌠ + < ⌡ + < ⌢ + < ⌣ + < ⌤ + < ⌥ + < ⌦ + < ⌧ + < ⌨ + < ⌫ + < ⌬ + < ⌭ + < ⌮ + < ⌯ + < ⌰ + < ⌱ + < ⌲ + < ⌳ + < ⌴ + < ⌵ + < ⌶ + < ⌷ + < ⌸ + < ⌹ + < ⌺ + < ⌻ + < ⌼ + < ⌽ + < ⌾ + < ⌿ + < ⍀ + < ⍁ + < ⍂ + < ⍃ + < ⍄ + < ⍅ + < ⍆ + < ⍇ + < ⍈ + < ⍉ + < ⍊ + < ⍋ + < ⍌ + < ⍍ + < ⍎ + < ⍏ + < ⍐ + < ⍑ + < ⍒ + < ⍓ + < ⍔ + < ⍕ + < ⍖ + < ⍗ + < ⍘ + < ⍙ + < ⍚ + < ⍛ + < ⍜ + < ⍝ + < ⍞ + < ⍟ + < ⍠ + < ⍡ + < ⍢ + < ⍣ + < ⍤ + < ⍥ + < ⍦ + < ⍧ + < ⍨ + < ⍩ + < ⍪ + < ⍫ + < ⍬ + < ⍭ + < ⍮ + < ⍯ + < ⍰ + < ⍱ + < ⍲ + < ⍳ + < ⍴ + < ⍵ + < ⍶ + < ⍷ + < ⍸ + < ⍹ + < ⍺ + < ⍻ + < ⍼ + < ⍽ + < ⍾ + < ⍿ + < ⎀ + < ⎁ + < ⎂ + < ⎃ + < ⎄ + < ⎅ + < ⎆ + < ⎇ + < ⎈ + < ⎉ + < ⎊ + < ⎋ + < ⎌ + < ⎍ + < ⎎ + < ⎏ + < ⎐ + < ⎑ + < ⎒ + < ⎓ + < ⎔ + < ⎕ + < ⎖ + < ⎗ + < ⎘ + < ⎙ + < ⎚ + < ⎛ + < ⎜ + < ⎝ + < ⎞ + < ⎟ + < ⎠ + < ⎡ + < ⎢ + < ⎣ + < ⎤ + < ⎥ + < ⎦ + < ⎧ + < ⎨ + < ⎩ + < ⎪ + < ⎫ + < ⎬ + < ⎭ + < ⎮ + < ⎯ + < ⎰ + < ⎱ + < ⎲ + < ⎳ + < ⎴ + < ⎵ + < ⎶ + < ⎷ + < ⎸ + < ⎹ + < ⎺ + < ⎻ + < ⎼ + < ⎽ + < ⎾ + < ⎿ + < ⏀ + < ⏁ + < ⏂ + < ⏃ + < ⏄ + < ⏅ + < ⏆ + < ⏇ + < ⏈ + < ⏉ + < ⏊ + < ⏋ + < ⏌ + < ⏍ + < ⏎ + < ⏏ + < ⏐ + < ⏑ + < ⏒ + < ⏓ + < ⏔ + < ⏕ + < ⏖ + < ⏗ + < ⏘ + < ⏙ + < ⏚ + < ⏛ + < '⏜' + < '⏝' + < '⏞' + < '⏟' + < '⏠' + < '⏡' + < '⏢' + < '⏣' + < '⏤' + < '⏥' + < '⏦' + < '⏧' + < ␀ + < ␁ + < ␂ + < ␃ + < ␄ + < ␅ + < ␆ + < ␇ + < ␈ + < ␉ + < ␊ + < ␋ + < ␌ + < ␍ + < ␎ + < ␏ + < ␐ + < ␑ + < ␒ + < ␓ + < ␔ + < ␕ + < ␖ + < ␗ + < ␘ + < ␙ + < ␚ + < ␛ + < ␜ + < ␝ + < ␞ + < ␟ + < ␠ + < ␡ + < ␢ + < ␣ + < ␤ + < ␥ + < ␦ + < ⑀ + < ⑁ + < ⑂ + < ⑃ + < ⑄ + < ⑅ + < ⑆ + < ⑇ + < ⑈ + < ⑉ + < ⑊ + < ─ + < ━ + < │ + <<< │ + < ┃ + < ┄ + < ┅ + < ┆ + < ┇ + < ┈ + < ┉ + < ┊ + < ┋ + < ┌ + < ┍ + < ┎ + < ┏ + < ┐ + < ┑ + < ┒ + < ┓ + < └ + < ┕ + < ┖ + < ┗ + < ┘ + < ┙ + < ┚ + < ┛ + < ├ + < ┝ + < ┞ + < ┟ + < ┠ + < ┡ + < ┢ + < ┣ + < ┤ + < ┥ + < ┦ + < ┧ + < ┨ + < ┩ + < ┪ + < ┫ + < ┬ + < ┭ + < ┮ + < ┯ + < ┰ + < ┱ + < ┲ + < ┳ + < ┴ + < ┵ + < ┶ + < ┷ + < ┸ + < ┹ + < ┺ + < ┻ + < ┼ + < ┽ + < ┾ + < ┿ + < ╀ + < ╁ + < ╂ + < ╃ + < ╄ + < ╅ + < ╆ + < ╇ + < ╈ + < ╉ + < ╊ + < ╋ + < ╌ + < ╍ + < ╎ + < ╏ + < ═ + < ║ + < ╒ + < ╓ + < ╔ + < ╕ + < ╖ + < ╗ + < ╘ + < ╙ + < ╚ + < ╛ + < ╜ + < ╝ + < ╞ + < ╟ + < ╠ + < ╡ + < ╢ + < ╣ + < ╤ + < ╥ + < ╦ + < ╧ + < ╨ + < ╩ + < ╪ + < ╫ + < ╬ + < ╭ + < ╮ + < ╯ + < ╰ + < ╱ + < ╲ + < ╳ + < ╴ + < ╵ + < ╶ + < ╷ + < ╸ + < ╹ + < ╺ + < ╻ + < ╼ + < ╽ + < ╾ + < ╿ + < ▀ + < ▁ + < ▂ + < ▃ + < ▄ + < ▅ + < ▆ + < ▇ + < █ + < ▉ + < ▊ + < ▋ + < ▌ + < ▍ + < ▎ + < ▏ + < ▐ + < ░ + < ▒ + < ▓ + < ▔ + < ▕ + < ▖ + < ▗ + < ▘ + < ▙ + < ▚ + < ▛ + < ▜ + < ▝ + < ▞ + < ▟ + < ■ + <<< ■ + < □ + < ▢ + < ▣ + < ▤ + < ▥ + < ▦ + < ▧ + < ▨ + < ▩ + < ▪ + < ▫ + < ▬ + < ▭ + < ▮ + < ▯ + < ▰ + < ▱ + < ▲ + < △ + < ▴ + < ▵ + < ▶ + < ▷ + < ▸ + < ▹ + < ► + < ▻ + < ▼ + < ▽ + < ▾ + < ▿ + < ◀ + < ◁ + < ◂ + < ◃ + < ◄ + < ◅ + < ◆ + < ◇ + < ◈ + < ◉ + < ◊ + < ○ + <<< ○ + < ◌ + < ◍ + < ◎ + < ● + < ◐ + < ◑ + < ◒ + < ◓ + < ◔ + < ◕ + < ◖ + < ◗ + < ◘ + < ◙ + < ◚ + < ◛ + < ◜ + < ◝ + < ◞ + < ◟ + < ◠ + < ◡ + < ◢ + < ◣ + < ◤ + < ◥ + < ◦ + < ◧ + < ◨ + < ◩ + < ◪ + < ◫ + < ◬ + < ◭ + < ◮ + < ◯ + < ◰ + < ◱ + < ◲ + < ◳ + < ◴ + < ◵ + < ◶ + < ◷ + < ◸ + < ◹ + < ◺ + < ◻ + < ◼ + < ◽ + < ◾ + < ◿ + < ☀ + < ☁ + < ☂ + < ☃ + < ☄ + < ★ + < ☆ + < ☇ + < ☈ + < ☉ + < ☊ + < ☋ + < ☌ + < ☍ + < ☎ + < ☏ + < ☐ + < ☑ + < ☒ + < ☓ + < ☔ + < ☕ + < ☖ + < ☗ + < ☘ + < ☙ + < ☚ + < ☛ + < ☜ + < ☝ + < ☞ + < ☟ + < ☠ + < ☡ + < ☢ + < ☣ + < ☤ + < ☥ + < ☦ + < ☧ + < ☨ + < ☩ + < ☪ + < ☫ + < ☬ + < ☭ + < ☮ + < ☯ + < ☸ + < ☹ + < ☺ + < ☻ + < ☼ + < ☽ + < ☾ + < ☿ + < ♀ + < ♁ + < ♂ + < ♃ + < ♄ + < ♅ + < ♆ + < ♇ + < ♈ + < ♉ + < ♊ + < ♋ + < ♌ + < ♍ + < ♎ + < ♏ + < ♐ + < ♑ + < ♒ + < ♓ + < ♔ + < ♕ + < ♖ + < ♗ + < ♘ + < ♙ + < ♚ + < ♛ + < ♜ + < ♝ + < ♞ + < ♟ + < ♠ + < ♡ + < ♢ + < ♣ + < ♤ + < ♥ + < ♦ + < ♧ + < ♨ + < ♩ + < ♪ + < ♫ + < ♬ + < ♰ + < ♱ + < ♲ + < ♳ + < ♴ + < ♵ + < ♶ + < ♷ + < ♸ + < ♹ + < ♺ + < ♻ + < ♼ + < ♽ + < ♾ + < ♿ + < ⚀ + < ⚁ + < ⚂ + < ⚃ + < ⚄ + < ⚅ + < ⚆ + < ⚇ + < ⚈ + < ⚉ + < ⚐ + < ⚑ + < ⚒ + < ⚓ + < ⚔ + < ⚕ + < ⚖ + < ⚗ + < ⚘ + < ⚙ + < ⚚ + < ⚛ + < ⚜ + < ⚠ + < ⚡ + < ⚢ + < ⚣ + < ⚤ + < ⚥ + < ⚦ + < ⚧ + < ⚨ + < ⚩ + < ⚪ + < ⚫ + < ⚬ + < ⚭ + < ⚮ + < ⚯ + < ⚰ + < ⚱ + < '⚲' + < ✁ + < ✂ + < ✃ + < ✄ + < ✆ + < ✇ + < ✈ + < ✉ + < ✌ + < ✍ + < ✎ + < ✏ + < ✐ + < ✑ + < ✒ + < ✓ + < ✔ + < ✕ + < ✖ + < ✗ + < ✘ + < ✙ + < ✚ + < ✛ + < ✜ + < ✝ + < ✞ + < ✟ + < ✠ + < ✡ + < ✢ + < ✣ + < ✤ + < ✥ + < ✦ + < ✧ + < ✩ + < ✪ + < ✫ + < ✬ + < ✭ + < ✮ + < ✯ + < ✰ + < ✱ + < ✲ + < ✳ + < ✴ + < ✵ + < ✶ + < ✷ + < ✸ + < ✹ + < ✺ + < ✻ + < ✼ + < ✽ + < ✾ + < ✿ + < ❀ + < ❁ + < ❂ + < ❃ + < ❄ + < ❅ + < ❆ + < ❇ + < ❈ + < ❉ + < ❊ + < ❋ + < ❍ + < ❏ + < ❐ + < ❑ + < ❒ + < ❖ + < ❘ + < ❙ + < ❚ + < ❛ + < ❜ + < ❝ + < ❞ + < ❡ + < ❢ + < ❣ + < ❤ + < ❥ + < ❦ + < ❧ + < ❨ + < ❩ + < ❪ + < ❫ + < ❬ + < ❭ + < ❮ + < ❯ + < ❰ + < ❱ + < ❲ + < ❳ + < ❴ + < ❵ + < ➔ + < ➘ + < ➙ + < ➚ + < ➛ + < ➜ + < ➝ + < ➞ + < ➟ + < ➠ + < ➡ + < ➢ + < ➣ + < ➤ + < ➥ + < ➦ + < ➧ + < ➨ + < ➩ + < ➪ + < ➫ + < ➬ + < ➭ + < ➮ + < ➯ + < ➱ + < ➲ + < ➳ + < ➴ + < ➵ + < ➶ + < ➷ + < ➸ + < ➹ + < ➺ + < ➻ + < ➼ + < ➽ + < ➾ + < ⟀ + < ⟁ + < ⟂ + < ⟃ + < ⟄ + < ⟅ + < ⟆ + < '⟇' + < '⟈' + < '⟉' + < '⟊' + < ⟐ + < ⟑ + < ⟒ + < ⟓ + < ⟔ + < ⟕ + < ⟖ + < ⟗ + < ⟘ + < ⟙ + < ⟚ + < ⟛ + < ⟜ + < ⟝ + < ⟞ + < ⟟ + < ⟠ + < ⟡ + < ⟢ + < ⟣ + < ⟤ + < ⟥ + < ⟦ + < ⟧ + < ⟨ + < ⟩ + < ⟪ + < ⟫ + < ⟰ + < ⟱ + < ⟲ + < ⟳ + < ⟴ + < ⟵ + < ⟶ + < ⟷ + < ⟸ + < ⟹ + < ⟺ + < ⟻ + < ⟼ + < ⟽ + < ⟾ + < ⟿ + < ⤀ + < ⤁ + < ⤂ + < ⤃ + < ⤄ + < ⤅ + < ⤆ + < ⤇ + < ⤈ + < ⤉ + < ⤊ + < ⤋ + < ⤌ + < ⤍ + < ⤎ + < ⤏ + < ⤐ + < ⤑ + < ⤒ + < ⤓ + < ⤔ + < ⤕ + < ⤖ + < ⤗ + < ⤘ + < ⤙ + < ⤚ + < ⤛ + < ⤜ + < ⤝ + < ⤞ + < ⤟ + < ⤠ + < ⤡ + < ⤢ + < ⤣ + < ⤤ + < ⤥ + < ⤦ + < ⤧ + < ⤨ + < ⤩ + < ⤪ + < ⤫ + < ⤬ + < ⤭ + < ⤮ + < ⤯ + < ⤰ + < ⤱ + < ⤲ + < ⤳ + < ⤴ + < ⤵ + < ⤶ + < ⤷ + < ⤸ + < ⤹ + < ⤺ + < ⤻ + < ⤼ + < ⤽ + < ⤾ + < ⤿ + < ⥀ + < ⥁ + < ⥂ + < ⥃ + < ⥄ + < ⥅ + < ⥆ + < ⥇ + < ⥈ + < ⥉ + < ⥊ + < ⥋ + < ⥌ + < ⥍ + < ⥎ + < ⥏ + < ⥐ + < ⥑ + < ⥒ + < ⥓ + < ⥔ + < ⥕ + < ⥖ + < ⥗ + < ⥘ + < ⥙ + < ⥚ + < ⥛ + < ⥜ + < ⥝ + < ⥞ + < ⥟ + < ⥠ + < ⥡ + < ⥢ + < ⥣ + < ⥤ + < ⥥ + < ⥦ + < ⥧ + < ⥨ + < ⥩ + < ⥪ + < ⥫ + < ⥬ + < ⥭ + < ⥮ + < ⥯ + < ⥰ + < ⥱ + < ⥲ + < ⥳ + < ⥴ + < ⥵ + < ⥶ + < ⥷ + < ⥸ + < ⥹ + < ⥺ + < ⥻ + < ⥼ + < ⥽ + < ⥾ + < ⥿ + < ⦀ + < ⦁ + < ⦂ + < ⦙ + < ⦚ + < ⦛ + < ⦜ + < ⦝ + < ⦞ + < ⦟ + < ⦠ + < ⦡ + < ⦢ + < ⦣ + < ⦤ + < ⦥ + < ⦦ + < ⦧ + < ⦨ + < ⦩ + < ⦪ + < ⦫ + < ⦬ + < ⦭ + < ⦮ + < ⦯ + < ⦰ + < ⦱ + < ⦲ + < ⦳ + < ⦴ + < ⦵ + < ⦶ + < ⦷ + < ⦸ + < ⦹ + < ⦺ + < ⦻ + < ⦼ + < ⦽ + < ⦾ + < ⦿ + < ⧀ + < ⧁ + < ⧂ + < ⧃ + < ⧄ + < ⧅ + < ⧆ + < ⧇ + < ⧈ + < ⧉ + < ⧊ + < ⧋ + < ⧌ + < ⧍ + < ⧎ + < ⧏ + < ⧐ + < ⧑ + < ⧒ + < ⧓ + < ⧔ + < ⧕ + < ⧖ + < ⧗ + < ⧘ + < ⧙ + < ⧚ + < ⧛ + < ⧜ + < ⧝ + < ⧞ + < ⧟ + < ⧠ + < ⧡ + < ⧢ + < ⧣ + < ⧤ + < ⧥ + < ⧦ + < ⧧ + < ⧨ + < ⧩ + < ⧪ + < ⧫ + < ⧬ + < ⧭ + < ⧮ + < ⧯ + < ⧰ + < ⧱ + < ⧲ + < ⧳ + < ⧴ + < ⧵ + < ⧶ + < ⧷ + < ⧸ + < ⧹ + < ⧺ + < ⧻ + < ⧾ + < ⧿ + < ⨀ + < ⨁ + < ⨂ + < ⨃ + < ⨄ + < ⨅ + < ⨆ + < ⨇ + < ⨈ + < ⨉ + < ⨊ + < ⨋ + < ⨍ + < ⨎ + < ⨏ + < ⨐ + < ⨑ + < ⨒ + < ⨓ + < ⨔ + < ⨕ + < ⨖ + < ⨗ + < ⨘ + < ⨙ + < ⨚ + < ⨛ + < ⨜ + < ⨝ + < ⨞ + < ⨟ + < ⨠ + < ⨡ + < ⨢ + < ⨣ + < ⨤ + < ⨥ + < ⨦ + < ⨧ + < ⨨ + < ⨩ + < ⨪ + < ⨫ + < ⨬ + < ⨭ + < ⨮ + < ⨯ + < ⨰ + < ⨱ + < ⨲ + < ⨳ + < ⨴ + < ⨵ + < ⨶ + < ⨷ + < ⨸ + < ⨹ + < ⨺ + < ⨻ + < ⨼ + < ⨽ + < ⨾ + < ⨿ + < ⩀ + < ⩁ + < ⩂ + < ⩃ + < ⩄ + < ⩅ + < ⩆ + < ⩇ + < ⩈ + < ⩉ + < ⩊ + < ⩋ + < ⩌ + < ⩍ + < ⩎ + < ⩏ + < ⩐ + < ⩑ + < ⩒ + < ⩓ + < ⩔ + < ⩕ + < ⩖ + < ⩗ + < ⩘ + < ⩙ + < ⩚ + < ⩛ + < ⩜ + < ⩝ + < ⩞ + < ⩟ + < ⩠ + < ⩡ + < ⩢ + < ⩣ + < ⩤ + < ⩥ + < ⩦ + < ⩧ + < ⩨ + < ⩩ + < ⩪ + < ⩫ + < ⩬ + < ⩭ + < ⩮ + < ⩯ + < ⩰ + < ⩱ + < ⩲ + < ⩳ + < ⩷ + < ⩸ + < ⩹ + < ⩺ + < ⩻ + < ⩼ + < ⩽ + < ⩾ + < ⩿ + < ⪀ + < ⪁ + < ⪂ + < ⪃ + < ⪄ + < ⪅ + < ⪆ + < ⪇ + < ⪈ + < ⪉ + < ⪊ + < ⪋ + < ⪌ + < ⪍ + < ⪎ + < ⪏ + < ⪐ + < ⪑ + < ⪒ + < ⪓ + < ⪔ + < ⪕ + < ⪖ + < ⪗ + < ⪘ + < ⪙ + < ⪚ + < ⪛ + < ⪜ + < ⪝ + < ⪞ + < ⪟ + < ⪠ + < ⪡ + < ⪢ + < ⪣ + < ⪤ + < ⪥ + < ⪦ + < ⪧ + < ⪨ + < ⪩ + < ⪪ + < ⪫ + < ⪬ + < ⪭ + < ⪮ + < ⪯ + < ⪰ + < ⪱ + < ⪲ + < ⪳ + < ⪴ + < ⪵ + < ⪶ + < ⪷ + < ⪸ + < ⪹ + < ⪺ + < ⪻ + < ⪼ + < ⪽ + < ⪾ + < ⪿ + < ⫀ + < ⫁ + < ⫂ + < ⫃ + < ⫄ + < ⫅ + < ⫆ + < ⫇ + < ⫈ + < ⫉ + < ⫊ + < ⫋ + < ⫌ + < ⫍ + < ⫎ + < ⫏ + < ⫐ + < ⫑ + < ⫒ + < ⫓ + < ⫔ + < ⫕ + < ⫖ + < ⫗ + < ⫘ + < ⫙ + < ⫚ + < ⫛ + < ⫝ + < ⫞ + < ⫟ + < ⫠ + < ⫡ + < ⫢ + < ⫣ + < ⫤ + < ⫥ + < ⫦ + < ⫧ + < ⫨ + < ⫩ + < ⫪ + < ⫫ + < ⫬ + < ⫭ + < ⫮ + < ⫯ + < ⫰ + < ⫱ + < ⫲ + < ⫳ + < ⫴ + < ⫵ + < ⫶ + < ⫷ + < ⫸ + < ⫹ + < ⫺ + < ⫻ + < ⫼ + < ⫽ + < ⫾ + < ⫿ + < ⬀ + < ⬁ + < ⬂ + < ⬃ + < ⬄ + < ⬅ + < ⬆ + < ⬇ + < ⬈ + < ⬉ + < ⬊ + < ⬋ + < ⬌ + < ⬍ + < ⬎ + < ⬏ + < ⬐ + < ⬑ + < ⬒ + < ⬓ + < '⬔' + < '⬕' + < '⬖' + < '⬗' + < '⬘' + < '⬙' + < '⬚' + < '⬠' + < '⬡' + < '⬢' + < '⬣' + < ⳥ + < ⳦ + < ⳧ + < ⳨ + < ⳩ + < ⳪ + < ⠀ + < ⠁ + < ⠂ + < ⠃ + < ⠄ + < ⠅ + < ⠆ + < ⠇ + < ⠈ + < ⠉ + < ⠊ + < ⠋ + < ⠌ + < ⠍ + < ⠎ + < ⠏ + < ⠐ + < ⠑ + < ⠒ + < ⠓ + < ⠔ + < ⠕ + < ⠖ + < ⠗ + < ⠘ + < ⠙ + < ⠚ + < ⠛ + < ⠜ + < ⠝ + < ⠞ + < ⠟ + < ⠠ + < ⠡ + < ⠢ + < ⠣ + < ⠤ + < ⠥ + < ⠦ + < ⠧ + < ⠨ + < ⠩ + < ⠪ + < ⠫ + < ⠬ + < ⠭ + < ⠮ + < ⠯ + < ⠰ + < ⠱ + < ⠲ + < ⠳ + < ⠴ + < ⠵ + < ⠶ + < ⠷ + < ⠸ + < ⠹ + < ⠺ + < ⠻ + < ⠼ + < ⠽ + < ⠾ + < ⠿ + < ⡀ + < ⡁ + < ⡂ + < ⡃ + < ⡄ + < ⡅ + < ⡆ + < ⡇ + < ⡈ + < ⡉ + < ⡊ + < ⡋ + < ⡌ + < ⡍ + < ⡎ + < ⡏ + < ⡐ + < ⡑ + < ⡒ + < ⡓ + < ⡔ + < ⡕ + < ⡖ + < ⡗ + < ⡘ + < ⡙ + < ⡚ + < ⡛ + < ⡜ + < ⡝ + < ⡞ + < ⡟ + < ⡠ + < ⡡ + < ⡢ + < ⡣ + < ⡤ + < ⡥ + < ⡦ + < ⡧ + < ⡨ + < ⡩ + < ⡪ + < ⡫ + < ⡬ + < ⡭ + < ⡮ + < ⡯ + < ⡰ + < ⡱ + < ⡲ + < ⡳ + < ⡴ + < ⡵ + < ⡶ + < ⡷ + < ⡸ + < ⡹ + < ⡺ + < ⡻ + < ⡼ + < ⡽ + < ⡾ + < ⡿ + < ⢀ + < ⢁ + < ⢂ + < ⢃ + < ⢄ + < ⢅ + < ⢆ + < ⢇ + < ⢈ + < ⢉ + < ⢊ + < ⢋ + < ⢌ + < ⢍ + < ⢎ + < ⢏ + < ⢐ + < ⢑ + < ⢒ + < ⢓ + < ⢔ + < ⢕ + < ⢖ + < ⢗ + < ⢘ + < ⢙ + < ⢚ + < ⢛ + < ⢜ + < ⢝ + < ⢞ + < ⢟ + < ⢠ + < ⢡ + < ⢢ + < ⢣ + < ⢤ + < ⢥ + < ⢦ + < ⢧ + < ⢨ + < ⢩ + < ⢪ + < ⢫ + < ⢬ + < ⢭ + < ⢮ + < ⢯ + < ⢰ + < ⢱ + < ⢲ + < ⢳ + < ⢴ + < ⢵ + < ⢶ + < ⢷ + < ⢸ + < ⢹ + < ⢺ + < ⢻ + < ⢼ + < ⢽ + < ⢾ + < ⢿ + < ⣀ + < ⣁ + < ⣂ + < ⣃ + < ⣄ + < ⣅ + < ⣆ + < ⣇ + < ⣈ + < ⣉ + < ⣊ + < ⣋ + < ⣌ + < ⣍ + < ⣎ + < ⣏ + < ⣐ + < ⣑ + < ⣒ + < ⣓ + < ⣔ + < ⣕ + < ⣖ + < ⣗ + < ⣘ + < ⣙ + < ⣚ + < ⣛ + < ⣜ + < ⣝ + < ⣞ + < ⣟ + < ⣠ + < ⣡ + < ⣢ + < ⣣ + < ⣤ + < ⣥ + < ⣦ + < ⣧ + < ⣨ + < ⣩ + < ⣪ + < ⣫ + < ⣬ + < ⣭ + < ⣮ + < ⣯ + < ⣰ + < ⣱ + < ⣲ + < ⣳ + < ⣴ + < ⣵ + < ⣶ + < ⣷ + < ⣸ + < ⣹ + < ⣺ + < ⣻ + < ⣼ + < ⣽ + < ⣾ + < ⣿ + < ⚊ + < ⚋ + < ⚌ + < ⚍ + < ⚎ + < ⚏ + < ☰ + < ☱ + < ☲ + < ☳ + < ☴ + < ☵ + < ☶ + < ☷ + < ䷀ + < ䷁ + < ䷂ + < ䷃ + < ䷄ + < ䷅ + < ䷆ + < ䷇ + < ䷈ + < ䷉ + < ䷊ + < ䷋ + < ䷌ + < ䷍ + < ䷎ + < ䷏ + < ䷐ + < ䷑ + < ䷒ + < ䷓ + < ䷔ + < ䷕ + < ䷖ + < ䷗ + < ䷘ + < ䷙ + < ䷚ + < ䷛ + < ䷜ + < ䷝ + < ䷞ + < ䷟ + < ䷠ + < ䷡ + < ䷢ + < ䷣ + < ䷤ + < ䷥ + < ䷦ + < ䷧ + < ䷨ + < ䷩ + < ䷪ + < ䷫ + < ䷬ + < ䷭ + < ䷮ + < ䷯ + < ䷰ + < ䷱ + < ䷲ + < ䷳ + < ䷴ + < ䷵ + < ䷶ + < ䷷ + < ䷸ + < ䷹ + < ䷺ + < ䷻ + < ䷼ + < ䷽ + < ䷾ + < ䷿ + < 𝌀 + < 𝌁 + < 𝌂 + < 𝌃 + < 𝌄 + < 𝌅 + < 𝌆 + < 𝌇 + < 𝌈 + < 𝌉 + < 𝌊 + < 𝌋 + < 𝌌 + < 𝌍 + < 𝌎 + < 𝌏 + < 𝌐 + < 𝌑 + < 𝌒 + < 𝌓 + < 𝌔 + < 𝌕 + < 𝌖 + < 𝌗 + < 𝌘 + < 𝌙 + < 𝌚 + < 𝌛 + < 𝌜 + < 𝌝 + < 𝌞 + < 𝌟 + < 𝌠 + < 𝌡 + < 𝌢 + < 𝌣 + < 𝌤 + < 𝌥 + < 𝌦 + < 𝌧 + < 𝌨 + < 𝌩 + < 𝌪 + < 𝌫 + < 𝌬 + < 𝌭 + < 𝌮 + < 𝌯 + < 𝌰 + < 𝌱 + < 𝌲 + < 𝌳 + < 𝌴 + < 𝌵 + < 𝌶 + < 𝌷 + < 𝌸 + < 𝌹 + < 𝌺 + < 𝌻 + < 𝌼 + < 𝌽 + < 𝌾 + < 𝌿 + < 𝍀 + < 𝍁 + < 𝍂 + < 𝍃 + < 𝍄 + < 𝍅 + < 𝍆 + < 𝍇 + < 𝍈 + < 𝍉 + < 𝍊 + < 𝍋 + < 𝍌 + < 𝍍 + < 𝍎 + < 𝍏 + < 𝍐 + < 𝍑 + < 𝍒 + < 𝍓 + < 𝍔 + < 𝍕 + < 𝍖 + < ꒐ + < ꒑ + < ꒒ + < ꒓ + < ꒔ + < ꒕ + < ꒖ + < ꒗ + < ꒘ + < ꒙ + < ꒚ + < ꒛ + < ꒜ + < ꒝ + < ꒞ + < ꒟ + < ꒠ + < ꒡ + < ꒢ + < ꒣ + < ꒤ + < ꒥ + < ꒦ + < ꒧ + < ꒨ + < ꒩ + < ꒪ + < ꒫ + < ꒬ + < ꒭ + < ꒮ + < ꒯ + < ꒰ + < ꒱ + < ꒲ + < ꒳ + < ꒴ + < ꒵ + < ꒶ + < ꒷ + < ꒸ + < ꒹ + < ꒺ + < ꒻ + < ꒼ + < ꒽ + < ꒾ + < ꒿ + < ꓀ + < ꓁ + < ꓂ + < ꓃ + < ꓄ + < ꓅ + < ꓆ + < 𐄷 + < 𐄸 + < 𐄹 + < 𐄺 + < 𐄻 + < 𐄼 + < 𐄽 + < 𐄾 + < 𐄿 + < 𐅹 + < 𐅺 + < 𐅻 + < 𐅼 + < 𐅽 + < 𐅾 + < 𐅿 + < 𐆀 + < 𐆁 + < 𐆂 + < 𐆃 + < 𐆄 + < 𐆅 + < 𐆆 + < 𐆇 + < 𐆈 + < 𐆉 + < 𝀀 + < 𝀁 + < 𝀂 + < 𝀃 + < 𝀄 + < 𝀅 + < 𝀆 + < 𝀇 + < 𝀈 + < 𝀉 + < 𝀊 + < 𝀋 + < 𝀌 + < 𝀍 + < 𝀎 + < 𝀏 + < 𝀐 + < 𝀑 + < 𝀒 + < 𝀓 + < 𝀔 + < 𝀕 + < 𝀖 + < 𝀗 + < 𝀘 + < 𝀙 + < 𝀚 + < 𝀛 + < 𝀜 + < 𝀝 + < 𝀞 + < 𝀟 + < 𝀠 + < 𝀡 + < 𝀢 + < 𝀣 + < 𝀤 + < 𝀥 + < 𝀦 + < 𝀧 + < 𝀨 + < 𝀩 + < 𝀪 + < 𝀫 + < 𝀬 + < 𝀭 + < 𝀮 + < 𝀯 + < 𝀰 + < 𝀱 + < 𝀲 + < 𝀳 + < 𝀴 + < 𝀵 + < 𝀶 + < 𝀷 + < 𝀸 + < 𝀹 + < 𝀺 + < 𝀻 + < 𝀼 + < 𝀽 + < 𝀾 + < 𝀿 + < 𝁀 + < 𝁁 + < 𝁂 + < 𝁃 + < 𝁄 + < 𝁅 + < 𝁆 + < 𝁇 + < 𝁈 + < 𝁉 + < 𝁊 + < 𝁋 + < 𝁌 + < 𝁍 + < 𝁎 + < 𝁏 + < 𝁐 + < 𝁑 + < 𝁒 + < 𝁓 + < 𝁔 + < 𝁕 + < 𝁖 + < 𝁗 + < 𝁘 + < 𝁙 + < 𝁚 + < 𝁛 + < 𝁜 + < 𝁝 + < 𝁞 + < 𝁟 + < 𝁠 + < 𝁡 + < 𝁢 + < 𝁣 + < 𝁤 + < 𝁥 + < 𝁦 + < 𝁧 + < 𝁨 + < 𝁩 + < 𝁪 + < 𝁫 + < 𝁬 + < 𝁭 + < 𝁮 + < 𝁯 + < 𝁰 + < 𝁱 + < 𝁲 + < 𝁳 + < 𝁴 + < 𝁵 + < 𝁶 + < 𝁷 + < 𝁸 + < 𝁹 + < 𝁺 + < 𝁻 + < 𝁼 + < 𝁽 + < 𝁾 + < 𝁿 + < 𝂀 + < 𝂁 + < 𝂂 + < 𝂃 + < 𝂄 + < 𝂅 + < 𝂆 + < 𝂇 + < 𝂈 + < 𝂉 + < 𝂊 + < 𝂋 + < 𝂌 + < 𝂍 + < 𝂎 + < 𝂏 + < 𝂐 + < 𝂑 + < 𝂒 + < 𝂓 + < 𝂔 + < 𝂕 + < 𝂖 + < 𝂗 + < 𝂘 + < 𝂙 + < 𝂚 + < 𝂛 + < 𝂜 + < 𝂝 + < 𝂞 + < 𝂟 + < 𝂠 + < 𝂡 + < 𝂢 + < 𝂣 + < 𝂤 + < 𝂥 + < 𝂦 + < 𝂧 + < 𝂨 + < 𝂩 + < 𝂪 + < 𝂫 + < 𝂬 + < 𝂭 + < 𝂮 + < 𝂯 + < 𝂰 + < 𝂱 + < 𝂲 + < 𝂳 + < 𝂴 + < 𝂵 + < 𝂶 + < 𝂷 + < 𝂸 + < 𝂹 + < 𝂺 + < 𝂻 + < 𝂼 + < 𝂽 + < 𝂾 + < 𝂿 + < 𝃀 + < 𝃁 + < 𝃂 + < 𝃃 + < 𝃄 + < 𝃅 + < 𝃆 + < 𝃇 + < 𝃈 + < 𝃉 + < 𝃊 + < 𝃋 + < 𝃌 + < 𝃍 + < 𝃎 + < 𝃏 + < 𝃐 + < 𝃑 + < 𝃒 + < 𝃓 + < 𝃔 + < 𝃕 + < 𝃖 + < 𝃗 + < 𝃘 + < 𝃙 + < 𝃚 + < 𝃛 + < 𝃜 + < 𝃝 + < 𝃞 + < 𝃟 + < 𝃠 + < 𝃡 + < 𝃢 + < 𝃣 + < 𝃤 + < 𝃥 + < 𝃦 + < 𝃧 + < 𝃨 + < 𝃩 + < 𝃪 + < 𝃫 + < 𝃬 + < 𝃭 + < 𝃮 + < 𝃯 + < 𝃰 + < 𝃱 + < 𝃲 + < 𝃳 + < 𝃴 + < 𝃵 + < 𝄀 + < 𝄁 + < 𝄂 + < 𝄃 + < 𝄄 + < 𝄅 + < 𝄆 + < 𝄇 + < 𝄈 + < 𝄉 + < 𝄊 + < 𝄋 + < 𝄌 + < 𝄍 + < 𝄎 + < 𝄏 + < 𝄐 + < 𝄑 + < 𝄒 + < 𝄓 + < 𝄔 + < 𝄕 + < 𝄖 + < 𝄗 + < 𝄘 + < 𝄙 + < 𝄚 + < 𝄛 + < 𝄜 + < 𝄝 + < 𝄞 + < 𝄟 + < 𝄠 + < 𝄡 + < 𝄢 + < 𝄣 + < 𝄤 + < 𝄥 + < 𝄦 + < ♭ + < ♮ + < ♯ + < 𝄪 + < 𝄫 + < 𝄬 + < 𝄭 + < 𝄮 + < 𝄯 + < 𝄰 + < 𝄱 + < 𝄲 + < 𝄳 + < 𝄴 + < 𝄵 + < 𝄶 + < 𝄷 + < 𝄸 + < 𝄹 + < 𝄺 + < 𝄻 + < 𝄼 + < 𝄽 + < 𝄾 + < 𝄿 + < 𝅀 + < 𝅁 + < 𝅂 + < 𝅃 + < 𝅄 + < 𝅅 + < 𝅆 + < 𝅇 + < 𝅈 + < 𝅉 + < 𝅊 + < 𝅋 + < 𝅌 + < 𝅍 + < 𝅎 + < 𝅏 + < 𝅐 + < 𝅑 + < 𝅒 + < 𝅓 + < 𝅔 + < 𝅕 + < 𝅖 + < 𝅗 + = 𝅗𝅥 + < 𝅘 + = 𝅘𝅥 + = 𝅘𝅥𝅮 + = 𝅘𝅥𝅯 + = 𝅘𝅥𝅰 + = 𝅘𝅥𝅱 + = 𝅘𝅥𝅲 + < 𝅙 + < 𝅚 + < 𝅛 + < 𝅜 + < 𝅝 + < 𝅪 + < 𝅫 + < 𝅬 + < 𝆃 + < 𝆄 + < 𝆌 + < 𝆍 + < 𝆎 + < 𝆏 + < 𝆐 + < 𝆑 + < 𝆒 + < 𝆓 + < 𝆔 + < 𝆕 + < 𝆖 + < 𝆗 + < 𝆘 + < 𝆙 + < 𝆚 + < 𝆛 + < 𝆜 + < 𝆝 + < 𝆞 + < 𝆟 + < 𝆠 + < 𝆡 + < 𝆢 + < 𝆣 + < 𝆤 + < 𝆥 + < 𝆦 + < 𝆧 + < 𝆨 + < 𝆩 + < 𝆮 + < 𝆯 + < 𝆰 + < 𝆱 + < 𝆲 + < 𝆳 + < 𝆴 + < 𝆵 + < 𝆶 + < 𝆷 + < 𝆸 + < 𝆹 + = 𝆹𝅥 + = 𝆹𝅥𝅮 + = 𝆹𝅥𝅯 + < 𝆺 + = 𝆺𝅥 + = 𝆺𝅥𝅮 + = 𝆺𝅥𝅯 + < 𝇁 + < 𝇂 + < 𝇃 + < 𝇄 + < 𝇅 + < 𝇆 + < 𝇇 + < 𝇈 + < 𝇉 + < 𝇊 + < 𝇋 + < 𝇌 + < 𝇍 + < 𝇎 + < 𝇏 + < 𝇐 + < 𝇑 + < 𝇒 + < 𝇓 + < 𝇔 + < 𝇕 + < 𝇖 + < 𝇗 + < 𝇘 + < 𝇙 + < 𝇚 + < 𝇛 + < 𝇜 + < 𝇝 + < 𝈀 + < 𝈁 + < 𝈂 + < 𝈃 + < 𝈄 + < 𝈅 + < 𝈆 + < 𝈇 + < 𝈈 + < 𝈉 + < 𝈊 + < 𝈋 + < 𝈌 + < 𝈍 + < 𝈎 + < 𝈏 + < 𝈐 + < 𝈑 + < 𝈒 + < 𝈓 + < 𝈔 + < 𝈕 + < 𝈖 + < 𝈗 + < 𝈘 + < 𝈙 + < 𝈚 + < 𝈛 + < 𝈜 + < 𝈝 + < 𝈞 + < 𝈟 + < 𝈠 + < 𝈡 + < 𝈢 + < 𝈣 + < 𝈤 + < 𝈥 + < 𝈦 + < 𝈧 + < 𝈨 + < 𝈩 + < 𝈪 + < 𝈫 + < 𝈬 + < 𝈭 + < 𝈮 + < 𝈯 + < 𝈰 + < 𝈱 + < 𝈲 + < 𝈳 + < 𝈴 + < 𝈵 + < 𝈶 + < 𝈷 + < 𝈸 + < 𝈹 + < 𝈺 + < 𝈻 + < 𝈼 + < 𝈽 + < 𝈾 + < 𝈿 + < 𝉀 + < 𝉁 + < 𝉅 + < ⿰ + < ⿱ + < ⿲ + < ⿳ + < ⿴ + < ⿵ + < ⿶ + < ⿷ + < ⿸ + < ⿹ + < ⿺ + < ⿻ + < ㇀ + < ㇁ + < ㇂ + < ㇃ + < ㇄ + < ㇅ + < ㇆ + < ㇇ + < ㇈ + < ㇉ + < ㇊ + < ㇋ + < ㇌ + < ㇍ + < ㇎ + < ㇏ + < 〄 + < 〒 + <<< 〶 + < 〓 + < 〠 + < 〷 + < 〾 + < 〿 + < ㆐ + < ㆑ + < ㉿ + <  + < � + < ৸ + < ৹ + < ௰ + < ௱ + < ௲ + < ፲ + < ፳ + < ፴ + < ፵ + < ፶ + < ፷ + < ፸ + < ፹ + < ፺ + < ፻ + < ፼ + < ↀ + < ↁ + < ↂ + < ⳽ + < 𐌢 + < 𐌣 + < 𐄐 + < 𐄑 + < 𐄒 + < 𐄓 + < 𐄔 + < 𐄕 + < 𐄖 + < 𐄗 + < 𐄘 + < 𐄙 + < 𐄚 + < 𐄛 + < 𐄜 + < 𐄝 + < 𐄞 + < 𐄟 + < 𐄠 + < 𐄡 + < 𐄢 + < 𐄣 + < 𐄤 + < 𐄥 + < 𐄦 + < 𐄧 + < 𐄨 + < 𐄩 + < 𐄪 + < 𐄫 + < 𐄬 + < 𐄭 + < 𐄮 + < 𐄯 + < 𐄰 + < 𐄱 + < 𐄲 + < 𐄳 + < 𐅀 + < 𐅁 + < 𐅄 + < 𐅅 + < 𐅆 + < 𐅇 + < 𐅉 + < 𐅊 + < 𐅋 + < 𐅌 + < 𐅍 + < 𐅎 + < 𐅐 + < 𐅑 + < 𐅒 + < 𐅓 + < 𐅔 + < 𐅕 + < 𐅖 + < 𐅗 + < 𐅠 + < 𐅡 + < 𐅢 + < 𐅣 + < 𐅤 + < 𐅥 + < 𐅦 + < 𐅧 + < 𐅨 + < 𐅩 + < 𐅪 + < 𐅫 + < 𐅬 + < 𐅭 + < 𐅮 + < 𐅯 + < 𐅰 + < 𐅱 + < 𐅲 + < 𐅴 + < 𐅵 + < 𐅶 + < 𐅷 + < 𐅸 + < 𐏓 + < 𐏔 + < 𐏕 + < '𐤗' + < '𐤘' + < '𐤙' + < 𐩄 + < 𐩅 + < 𐩆 + < 𐩇 + < '𒐲' + < '𒐳' + < '𒑖' + < '𒑗' + < '𒑚' + < '𒑛' + < '𒑜' + < '𒑝' + < '𒑞' + < '𒑟' + < '𒑠' + < '𒑡' + < '𒑢' + < '𝍩' + < '𝍪' + < '𝍫' + < '𝍬' + < '𝍭' + < '𝍮' + < '𝍯' + < '𝍰' + < '𝍱' + < [variable top] + < ː + < ˑ + < ๆ + < ໆ + < 々 + < 〻 + < 〱 + <<< 〲 / ゙ + < 〳 + <<< 〴 / ゙ + < 〵 + < ゝ + < ー + <<< ー + < ヽ + < ¤ + < ¢ + <<< ¢ + < '$' + <<< $ + <<< ﹩ + < £ + <<< £ + < ¥ + <<< ¥ + < ؋ + < ৲ + < ৳ + < ૱ + < ௹ + < ฿ + < ៛ + < ₠ + < ₡ + < ₢ + < ₣ + < ₤ + < ₥ + < ₦ + < ₧ + < ₩ + <<< ₩ + < ₪ + < ₫ + < € + < ₭ + < ₮ + < ₯ + < ₰ + < ₱ + < ₲ + < ₳ + < ₴ + < ₵ + < 0 + <<< 0 + <<< ㍘ / 点 + <<< 𝟎 + = 𝟘 + = 𝟢 + = 𝟬 + = 𝟶 + <<< ⓪ + = ⓿ + <<< ⁰ + <<< ₀ + << ٠ + << ۰ + << '߀' + << 𐒠 + << ० + << ০ + << ੦ + << ૦ + << ୦ + << ௦ + << ౦ + << ೦ + << ൦ + << ᥆ + << ᧐ + << ๐ + << ໐ + << ༠ + <<< ༳ + << ၀ + << ០ + << ៰ + << '᭐' + << ᠐ + << 〇 + << 𐆊 + < 1 + <<< 1 + <<< ⒈ / '.' + <<< ⒑ / 0'.' + <<< ㏩ / 0日 + <<< ㋉ / 0月 + <<< ㍢ / 0点 + <<< ⒒ / 1'.' + <<< ㏪ / 1日 + <<< ㋊ / 1月 + <<< ㍣ / 1点 + <<< ⒓ / 2'.' + <<< ㏫ / 2日 + <<< ㋋ / 2月 + <<< ㍤ / 2点 + <<< ⒔ / 3'.' + <<< ㏬ / 3日 + <<< ㍥ / 3点 + <<< ⒕ / 4'.' + <<< ㏭ / 4日 + <<< ㍦ / 4点 + <<< ⒖ / 5'.' + <<< ㏮ / 5日 + <<< ㍧ / 5点 + <<< ⒗ / 6'.' + <<< ㏯ / 6日 + <<< ㍨ / 6点 + <<< ⒘ / 7'.' + <<< ㏰ / 7日 + <<< ㍩ / 7点 + <<< ⒙ / 8'.' + <<< ㏱ / 8日 + <<< ㍪ / 8点 + <<< ⒚ / 9'.' + <<< ㏲ / 9日 + <<< ㍫ / 9点 + <<< ㏠ / 日 + <<< ㋀ / 月 + <<< ㍙ / 点 + <<< 𝟏 + = 𝟙 + = 𝟣 + = 𝟭 + = 𝟷 + <<< ① + = ⓵ + = ❶ + = ➀ + = ➊ + <<< ⑩ / 0 + = ⓾ / 0 + = ❿ / 0 + = ➉ / 0 + = ➓ / 0 + <<< ⑪ / 1 + = ⓫ / 1 + <<< ⑫ / 2 + = ⓬ / 2 + <<< ⑬ / 3 + = ⓭ / 3 + <<< ⑭ / 4 + = ⓮ / 4 + <<< ⑮ / 5 + = ⓯ / 5 + <<< ⑯ / 6 + = ⓰ / 6 + <<< ⑰ / 7 + = ⓱ / 7 + <<< ⑱ / 8 + = ⓲ / 8 + <<< ⑲ / 9 + = ⓳ / 9 + <<< ¹ + <<< ₁ + <<< ⅟ / ⁄ + <<< ½ / ⁄2 + <<< ⅓ / ⁄3 + <<< ¼ / ⁄4 + <<< ⅕ / ⁄5 + <<< ⅙ / ⁄6 + <<< ⅛ / ⁄8 + << ١ + << ۱ + << '߁' + << ፩ + << 𐒡 + << १ + << ১ + = ৴ + << ੧ + << ૧ + << ୧ + << ௧ + << ౧ + << ೧ + << ൧ + << ᥇ + << ᧑ + << ๑ + << ໑ + << ༡ + <<< ༪ + << ၁ + << ១ + << ៱ + << '᭑' + << ᠑ + << 〡 + << 𐄇 + << 𐅂 + = 𐅘 + = 𐅙 + = 𐅚 + << 𐌠 + << 𐏑 + << '𒐕' + = '𒐞' + = '𒐬' + = '𒐴' + = '𒑏' + = '𒑘' + << '𐤖' + << 𐩀 + << '𝍠' + < 2 + <<< 2 + <<< ⒉ / '.' + <<< ⒛ / 0'.' + <<< ㏳ / 0日 + <<< ㍬ / 0点 + <<< ㏴ / 1日 + <<< ㍭ / 1点 + <<< ㏵ / 2日 + <<< ㍮ / 2点 + <<< ㏶ / 3日 + <<< ㍯ / 3点 + <<< ㏷ / 4日 + <<< ㍰ / 4点 + <<< ㏸ / 5日 + <<< ㏹ / 6日 + <<< ㏺ / 7日 + <<< ㏻ / 8日 + <<< ㏼ / 9日 + <<< ㏡ / 日 + <<< ㋁ / 月 + <<< ㍚ / 点 + <<< 𝟐 + = 𝟚 + = 𝟤 + = 𝟮 + = 𝟸 + <<< ② + = ⓶ + = ❷ + = ➁ + = ➋ + <<< ⑳ / 0 + = ⓴ / 0 + <<< ㉑ / 1 + <<< ㉒ / 2 + <<< ㉓ / 3 + <<< ㉔ / 4 + <<< ㉕ / 5 + <<< ㉖ / 6 + <<< ㉗ / 7 + <<< ㉘ / 8 + <<< ㉙ / 9 + <<< ² + <<< ₂ + <<< ⅔ / ⁄3 + <<< ⅖ / ⁄5 + << ٢ + << ۲ + << '߂' + << ፪ + << 𐒢 + << २ + << ২ + = ৵ + << ੨ + << ૨ + << ୨ + << ௨ + << ౨ + << ೨ + << ൨ + << ᥈ + << ᧒ + << ๒ + << ໒ + << ༢ + <<< ༫ + << ၂ + << ២ + << ៲ + << '᭒' + << ᠒ + << 〢 + << 𐄈 + << 𐅛 + = 𐅜 + = 𐅝 + = 𐅞 + << 𐏒 + << '𒐀' + = '𒐖' + = '𒐟' + = '𒐣' + = '𒐭' + = '𒐵' + = '𒑊' + = '𒑐' + = '𒑙' + << 𐩁 + << '𝍡' + < 3 + <<< 3 + <<< ⒊ / '.' + <<< ㏽ / 0日 + <<< ㏾ / 1日 + <<< ㏢ / 日 + <<< ㋂ / 月 + <<< ㍛ / 点 + <<< 𝟑 + = 𝟛 + = 𝟥 + = 𝟯 + = 𝟹 + <<< ③ + = ⓷ + = ❸ + = ➂ + = ➌ + <<< ㉚ / 0 + <<< ㉛ / 1 + <<< ㉜ / 2 + <<< ㉝ / 3 + <<< ㉞ / 4 + <<< ㉟ / 5 + <<< ㊱ / 6 + <<< ㊲ / 7 + <<< ㊳ / 8 + <<< ㊴ / 9 + <<< ³ + <<< ₃ + <<< ¾ / ⁄4 + <<< ⅗ / ⁄5 + <<< ⅜ / ⁄8 + << ٣ + << ۳ + << '߃' + << ፫ + << 𐒣 + << ३ + << ৩ + = ৶ + << ੩ + << ૩ + << ୩ + << ௩ + << ౩ + << ೩ + << ൩ + << ᥉ + << ᧓ + << ๓ + << ໓ + << ༣ + <<< ༬ + << ၃ + << ៣ + << ៳ + << '᭓' + << ᠓ + << 〣 + << 𐄉 + << '𒐁' + = '𒐈' + = '𒐗' + = '𒐠' + = '𒐤' + = '𒐥' + = '𒐮' + = '𒐯' + = '𒐶' + = '𒐷' + = '𒐺' + = '𒐻' + = '𒑋' + = '𒑑' + << 𐩂 + << '𝍢' + < 4 + <<< 4 + <<< ⒋ / '.' + <<< ㏣ / 日 + <<< ㋃ / 月 + <<< ㍜ / 点 + <<< 𝟒 + = 𝟜 + = 𝟦 + = 𝟰 + = 𝟺 + <<< ④ + = ⓸ + = ❹ + = ➃ + = ➍ + <<< ㊵ / 0 + <<< ㊶ / 1 + <<< ㊷ / 2 + <<< ㊸ / 3 + <<< ㊹ / 4 + <<< ㊺ / 5 + <<< ㊻ / 6 + <<< ㊼ / 7 + <<< ㊽ / 8 + <<< ㊾ / 9 + <<< ⁴ + <<< ₄ + <<< ⅘ / ⁄5 + << ٤ + << ۴ + << '߄' + << ፬ + << 𐒤 + << ४ + << ৪ + = ৷ + << ੪ + << ૪ + << ୪ + << ௪ + << ౪ + << ೪ + << ൪ + << ᥊ + << ᧔ + << ๔ + << ໔ + << ༤ + <<< ༭ + << ၄ + << ៤ + << ៴ + << '᭔' + << ᠔ + << 〤 + << 𐄊 + << '𒐂' + = '𒐉' + = '𒐏' + = '𒐘' + = '𒐡' + = '𒐦' + = '𒐰' + = '𒐸' + = '𒐼' + = '𒐽' + = '𒐾' + = '𒐿' + = '𒑌' + = '𒑒' + = '𒑓' + << 𐩃 + << '𝍣' + < 5 + <<< 5 + <<< ⒌ / '.' + <<< ㏤ / 日 + <<< ㋄ / 月 + <<< ㍝ / 点 + <<< 𝟓 + = 𝟝 + = 𝟧 + = 𝟱 + = 𝟻 + <<< ⑤ + = ⓹ + = ❺ + = ➄ + = ➎ + <<< ㊿ / 0 + <<< ⁵ + <<< ₅ + <<< ⅚ / ⁄6 + <<< ⅝ / ⁄8 + << ٥ + << ۵ + << '߅' + << ፭ + << 𐒥 + << ५ + << ৫ + << ੫ + << ૫ + << ୫ + << ௫ + << ౫ + << ೫ + << ൫ + << ᥋ + << ᧕ + << ๕ + << ໕ + << ༥ + <<< ༮ + << ၅ + << ៥ + << ៵ + << '᭕' + << ᠕ + << 〥 + << 𐄋 + << 𐅃 + = 𐅈 + = 𐅏 + = 𐅟 + = 𐅳 + << 𐌡 + << '𒐃' + = '𒐊' + = '𒐐' + = '𒐙' + = '𒐢' + = '𒐧' + = '𒐱' + = '𒐹' + = '𒑍' + = '𒑔' + = '𒑕' + << '𝍤' + < 6 + <<< 6 + <<< ⒍ / '.' + <<< ㏥ / 日 + <<< ㋅ / 月 + <<< ㍞ / 点 + <<< 𝟔 + = 𝟞 + = 𝟨 + = 𝟲 + = 𝟼 + <<< ⑥ + = ⓺ + = ❻ + = ➅ + = ➏ + <<< ⁶ + <<< ₆ + << ٦ + << ۶ + << '߆' + << ፮ + << 𐒦 + << ६ + << ৬ + << ੬ + << ૬ + << ୬ + << ௬ + << ౬ + << ೬ + << ൬ + << ᥌ + << ᧖ + << ๖ + << ໖ + << ༦ + <<< ༯ + << ၆ + << ៦ + << ៶ + << '᭖' + << ᠖ + << 〦 + << 𐄌 + << '𒐄' + = '𒐋' + = '𒐑' + = '𒐚' + = '𒐨' + = '𒑀' + = '𒑎' + << '𝍥' + < 7 + <<< 7 + <<< ⒎ / '.' + <<< ㏦ / 日 + <<< ㋆ / 月 + <<< ㍟ / 点 + <<< 𝟕 + = 𝟟 + = 𝟩 + = 𝟳 + = 𝟽 + <<< ⑦ + = ⓻ + = ❼ + = ➆ + = ➐ + <<< ⁷ + <<< ₇ + <<< ⅞ / ⁄8 + << ٧ + << ۷ + << '߇' + << ፯ + << 𐒧 + << ७ + << ৭ + << ੭ + << ૭ + << ୭ + << ௭ + << ౭ + << ೭ + << ൭ + << ᥍ + << ᧗ + << ๗ + << ໗ + << ༧ + <<< ༰ + << ၇ + << ៧ + << ៷ + << '᭗' + << ᠗ + << 〧 + << 𐄍 + << '𒐅' + = '𒐌' + = '𒐒' + = '𒐛' + = '𒐩' + = '𒑁' + = '𒑂' + = '𒑃' + << '𝍦' + < 8 + <<< 8 + <<< ⒏ / '.' + <<< ㏧ / 日 + <<< ㋇ / 月 + <<< ㍠ / 点 + <<< 𝟖 + = 𝟠 + = 𝟪 + = 𝟴 + = 𝟾 + <<< ⑧ + = ⓼ + = ❽ + = ➇ + = ➑ + <<< ⁸ + <<< ₈ + << ٨ + << ۸ + << '߈' + << ፰ + << 𐒨 + << ८ + << ৮ + << ੮ + << ૮ + << ୮ + << ௮ + << ౮ + << ೮ + << ൮ + << ᥎ + << ᧘ + << ๘ + << ໘ + << ༨ + <<< ༱ + << ၈ + << ៨ + << ៸ + << '᭘' + << ᠘ + << 〨 + << 𐄎 + << '𒐆' + = '𒐍' + = '𒐓' + = '𒐜' + = '𒐪' + = '𒑄' + = '𒑅' + << '𝍧' + < 9 + <<< 9 + <<< ⒐ / '.' + <<< ㏨ / 日 + <<< ㋈ / 月 + <<< ㍡ / 点 + <<< 𝟗 + = 𝟡 + = 𝟫 + = 𝟵 + = 𝟿 + <<< ⑨ + = ⓽ + = ❾ + = ➈ + = ➒ + <<< ⁹ + <<< ₉ + << ٩ + << ۹ + << '߉' + << ፱ + << 𐒩 + << ९ + << ৯ + << ੯ + << ૯ + << ୯ + << ௯ + << ౯ + << ೯ + << ൯ + << ᥏ + << ᧙ + << ๙ + << ໙ + << ༩ + <<< ༲ + << ၉ + << ៩ + << ៹ + << '᭙' + << ᠙ + << 〩 + << 𐄏 + << '𒐇' + = '𒐎' + = '𒐔' + = '𒐝' + = '𒐫' + = '𒑆' + = '𒑇' + = '𒑈' + = '𒑉' + << '𝍨' + < a + <<< a + <<< ͣ + <<< ℀ / '/'c + <<< ℁ / '/'s + <<< ẚ / ʾ + <<< 𝐚 + = 𝑎 + = 𝒂 + = 𝒶 + = 𝓪 + = 𝔞 + = 𝕒 + = 𝖆 + = 𝖺 + = 𝗮 + = 𝘢 + = 𝙖 + = 𝚊 + <<< ⓐ + <<< A + <<< A + <<< 𝐀 + = 𝐴 + = 𝑨 + = 𝒜 + = 𝓐 + = 𝔄 + = 𝔸 + = 𝕬 + = 𝖠 + = 𝗔 + = 𝘈 + = 𝘼 + = 𝙰 + <<< Ⓐ + <<< ª + = ᵃ + <<< ₐ + <<< ㏂ / '.'m'.' + <<< ᴬ + <<< ㏟ / ∕m + <<< ㍳ / U + << æ / e + <<< Æ / e + <<< ᴭ / e + < ᴀ + < 'ⱥ' + <<< Ⱥ + < ᶏ + < ᴁ + < ᴂ + <<< ᵆ + < ɐ + <<< ᵄ + < ɑ + <<< ᵅ + < ᶐ + < ɒ + <<< ᶛ + < b + <<< b + <<< 𝐛 + = 𝑏 + = 𝒃 + = 𝒷 + = 𝓫 + = 𝔟 + = 𝕓 + = 𝖇 + = 𝖻 + = 𝗯 + = 𝘣 + = 𝙗 + = 𝚋 + <<< ⓑ + <<< B + <<< B + <<< ℬ + = 𝐁 + = 𝐵 + = 𝑩 + = 𝓑 + = 𝔅 + = 𝔹 + = 𝕭 + = 𝖡 + = 𝗕 + = 𝘉 + = 𝘽 + = 𝙱 + <<< Ⓑ + <<< ᵇ + <<< ㍴ / ar + <<< ᴮ + <<< ㏃ / q + < ʙ + < ƀ + <<< 'Ƀ' + < ᴯ + < ᴃ + < ᵬ + < ᶀ + < ɓ + <<< Ɓ + < ƃ + <<< Ƃ + < c + <<< c + <<< ͨ + = ⅽ + <<< ℅ / '/'o + <<< ℆ / '/'u + <<< 𝐜 + = 𝑐 + = 𝒄 + = 𝒸 + = 𝓬 + = 𝔠 + = 𝕔 + = 𝖈 + = 𝖼 + = 𝗰 + = 𝘤 + = 𝙘 + = 𝚌 + <<< ⓒ + <<< C + <<< C + <<< Ⅽ + <<< ℂ + = ℭ + = 𝐂 + = 𝐶 + = 𝑪 + = 𝒞 + = 𝓒 + = 𝕮 + = 𝖢 + = 𝗖 + = 𝘊 + = 𝘾 + = 𝙲 + <<< Ⓒ + <<< ᶜ + <<< ㎈ / al + <<< ㏄ / c + <<< ㏅ / d + <<< ㎝ / m + <<< ㎠ / m2 + <<< ㎤ / m3 + <<< ㏆ / ∕kg + <<< ㏇ / o'.' + < ᴄ + < ȼ + <<< Ȼ + < ƈ + <<< Ƈ + < ɕ + <<< ᶝ + < 'ↄ' + <<< Ↄ + < d + <<< đ / ̵ + <<< d + <<< ͩ + = ⅾ + <<< ȸ / b + <<< dz / z + = ʣ / z + <<< dž / ž + <<< ʥ / ʑ + <<< ʤ / ʒ + <<< ⅆ + = 𝐝 + = 𝑑 + = 𝒅 + = 𝒹 + = 𝓭 + = 𝔡 + = 𝕕 + = 𝖉 + = 𝖽 + = 𝗱 + = 𝘥 + = 𝙙 + = 𝚍 + <<< ⓓ + <<< D + <<< Đ / ̵ + <<< D + <<< Ⅾ + <<< Dz / z + <<< DZ / Z + <<< Dž / ž + <<< DŽ / Ž + <<< ⅅ + = 𝐃 + = 𝐷 + = 𝑫 + = 𝒟 + = 𝓓 + = 𝔇 + = 𝔻 + = 𝕯 + = 𝖣 + = 𝗗 + = 𝘋 + = 𝘿 + = 𝙳 + <<< Ⓓ + <<< ᵈ + <<< ㍲ / a + <<< ㏈ / B + <<< ㎗ / l + <<< ㍷ / m + <<< ㍸ / m2 + <<< ㍹ / m3 + <<< ᴰ + << ð + <<< Ð + <<< ᶞ + < ᴅ + < ᴆ + < ᵭ + < ᶁ + < ɖ + <<< Ɖ + < ɗ + <<< Ɗ + < ᶑ + < ƌ + <<< Ƌ + < ȡ + < e + <<< e + <<< ͤ + <<< ℯ + = ⅇ + = 𝐞 + = 𝑒 + = 𝒆 + = 𝓮 + = 𝔢 + = 𝕖 + = 𝖊 + = 𝖾 + = 𝗲 + = 𝘦 + = 𝙚 + = 𝚎 + <<< ⓔ + <<< E + <<< E + <<< ℰ + = 𝐄 + = 𝐸 + = 𝑬 + = 𝓔 + = 𝔈 + = 𝔼 + = 𝕰 + = 𝖤 + = 𝗘 + = 𝘌 + = 𝙀 + = 𝙴 + <<< Ⓔ + <<< ᵉ + <<< ₑ + <<< ㋍ / rg + <<< ㋎ / V + <<< ᴱ + < ᴇ + < 'ɇ' + <<< 'Ɇ' + < ᶒ + < ǝ + <<< Ǝ + <<< ᴲ + < ə + <<< Ə + <<< ᵊ + <<< ₔ + < ᶕ + < ɛ + <<< Ɛ + <<< ℇ + <<< ᵋ + < ᶓ + < ɘ + < ɚ + < ɜ + <<< ᶟ + < ᶔ + < ᴈ + <<< ᵌ + < ɝ + < ɞ + < ʚ + < ɤ + < f + <<< f + <<< ff / f + <<< ffi / fi + <<< ffl / fl + <<< fi / i + <<< fl / l + <<< ʩ / ŋ + <<< 𝐟 + = 𝑓 + = 𝒇 + = 𝒻 + = 𝓯 + = 𝔣 + = 𝕗 + = 𝖋 + = 𝖿 + = 𝗳 + = 𝘧 + = 𝙛 + = 𝚏 + <<< ⓕ + <<< F + <<< F + <<< ℻ / Ax + <<< ℱ + = 𝐅 + = 𝐹 + = 𝑭 + = 𝓕 + = 𝔉 + = 𝔽 + = 𝕱 + = 𝖥 + = 𝗙 + = 𝘍 + = 𝙁 + = 𝙵 + <<< Ⓕ + <<< ᶠ + <<< ㎙ / m + < ᵮ + < ᶂ + < ƒ + <<< Ƒ + < 'ⅎ' + <<< Ⅎ + < g + <<< g + <<< ℊ + = 𝐠 + = 𝑔 + = 𝒈 + = 𝓰 + = 𝔤 + = 𝕘 + = 𝖌 + = 𝗀 + = 𝗴 + = 𝘨 + = 𝙜 + = 𝚐 + <<< ⓖ + <<< G + <<< G + <<< 𝐆 + = 𝐺 + = 𝑮 + = 𝒢 + = 𝓖 + = 𝔊 + = 𝔾 + = 𝕲 + = 𝖦 + = 𝗚 + = 𝘎 + = 𝙂 + = 𝙶 + <<< Ⓖ + <<< ᵍ + <<< ㏿ / al + <<< ᴳ + <<< ㎇ / B + <<< ㎓ / Hz + <<< ㎬ / Pa + <<< ㏉ / y + < ɡ + <<< ᶢ + < ᵹ + < ɢ + < ǥ + <<< Ǥ + < ᶃ + < ɠ + <<< Ɠ + < ʛ + < ᵷ + < ɣ + <<< Ɣ + <<< ˠ + < ƣ + <<< Ƣ + < h + <<< ħ / ̵ + = ℏ / ̵ + <<< h + <<< ͪ + <<< ℎ + = 𝐡 + = 𝒉 + = 𝒽 + = 𝓱 + = 𝔥 + = 𝕙 + = 𝖍 + = 𝗁 + = 𝗵 + = 𝘩 + = 𝙝 + = 𝚑 + <<< ⓗ + <<< H + <<< Ħ / ̵ + <<< H + <<< ℋ + = ℌ + = ℍ + = 𝐇 + = 𝐻 + = 𝑯 + = 𝓗 + = 𝕳 + = 𝖧 + = 𝗛 + = 𝘏 + = 𝙃 + = 𝙷 + <<< Ⓗ + <<< ʰ + <<< ㏊ / a + <<< ㍱ / Pa + <<< ᴴ + <<< ㋌ / g + <<< ㏋ / P + <<< ㎐ / z + < ʜ + < ƕ + <<< Ƕ + < ɦ + <<< ʱ + < 'ⱨ' + <<< 'Ⱨ' + < 'ⱶ' + <<< 'Ⱶ' + < ɧ + < ʻ + < ʽ + < i + <<< i + <<< ͥ + = ⅰ + <<< ⅱ / i + <<< ⅲ / ii + <<< ij / j + <<< ⅳ / v + <<< ⅸ / x + <<< ℹ + = ⅈ + = 𝐢 + = 𝑖 + = 𝒊 + = 𝒾 + = 𝓲 + = 𝔦 + = 𝕚 + = 𝖎 + = 𝗂 + = 𝗶 + = 𝘪 + = 𝙞 + = 𝚒 + <<< ⓘ + <<< I + <<< I + <<< Ⅰ + <<< Ⅱ / I + <<< Ⅲ / Ii + <<< IJ / J + <<< Ⅳ / V + <<< Ⅸ / X + <<< ℐ + = ℑ + = 𝐈 + = 𝐼 + = 𝑰 + = 𝓘 + = 𝕀 + = 𝕴 + = 𝖨 + = 𝗜 + = 𝘐 + = 𝙄 + = 𝙸 + <<< Ⓘ + <<< ⁱ + <<< ᵢ + <<< ㏌ / n + <<< ᴵ + <<< ㍺ / U + < ı + <<< 𝚤 + < ɪ + <<< ᶦ + < ᴉ + <<< ᵎ + < ɨ + <<< Ɨ + <<< ᶤ + < ᵻ + <<< ᶧ + < ᶖ + < ɩ + <<< Ɩ + <<< ᶥ + < ᵼ + < j + <<< j + <<< ⅉ + = 𝐣 + = 𝑗 + = 𝒋 + = 𝒿 + = 𝓳 + = 𝔧 + = 𝕛 + = 𝖏 + = 𝗃 + = 𝗷 + = 𝘫 + = 𝙟 + = 𝚓 + <<< ⓙ + <<< J + <<< J + <<< 𝐉 + = 𝐽 + = 𝑱 + = 𝒥 + = 𝓙 + = 𝔍 + = 𝕁 + = 𝕵 + = 𝖩 + = 𝗝 + = 𝘑 + = 𝙅 + = 𝙹 + <<< Ⓙ + <<< ʲ + <<< ᴶ + < ȷ + <<< 𝚥 + < ᴊ + < 'ɉ' + <<< 'Ɉ' + < ʝ + <<< ᶨ + < ɟ + <<< ᶡ + < ʄ + < k + <<< k + <<< 𝐤 + = 𝑘 + = 𝒌 + = 𝓀 + = 𝓴 + = 𝔨 + = 𝕜 + = 𝖐 + = 𝗄 + = 𝗸 + = 𝘬 + = 𝙠 + = 𝚔 + <<< ⓚ + <<< K + <<< K + <<< 𝐊 + = 𝐾 + = 𝑲 + = 𝒦 + = 𝓚 + = 𝔎 + = 𝕂 + = 𝕶 + = 𝖪 + = 𝗞 + = 𝘒 + = 𝙆 + = 𝙺 + <<< Ⓚ + <<< ᵏ + <<< ㎄ / A + <<< ㎉ / cal + <<< ㎏ / g + <<< ㎑ / Hz + <<< ㎘ / l + <<< ㎞ / m + <<< ㎢ / m2 + <<< ㎦ / m3 + <<< ㎪ / Pa + <<< ㏏ / t + <<< ㎸ / V + <<< ㎾ / W + <<< ㏀ / Ω + <<< ᴷ + <<< ㎅ / B + <<< ㏍ / K + <<< ㏎ / M + < ᴋ + < ᶄ + < ƙ + <<< Ƙ + < 'ⱪ' + <<< 'Ⱪ' + < ʞ + < l + <<< ł / ̵ + <<< l + <<< ⅼ + <<< lj / j + <<< ʪ / s + <<< ʫ / z + <<< ℓ + = 𝐥 + = 𝑙 + = 𝒍 + = 𝓁 + = 𝓵 + = 𝔩 + = 𝕝 + = 𝖑 + = 𝗅 + = 𝗹 + = 𝘭 + = 𝙡 + = 𝚕 + <<< ⓛ + <<< L + <<< Ł / ̵ + <<< L + <<< Ⅼ + <<< Lj / j + <<< LJ / J + <<< ℒ + = 𝐋 + = 𝐿 + = 𝑳 + = 𝓛 + = 𝔏 + = 𝕃 + = 𝕷 + = 𝖫 + = 𝗟 + = 𝘓 + = 𝙇 + = 𝙻 + <<< Ⓛ + <<< ˡ + <<< ㏐ / m + <<< ㏑ / n + <<< ㏒ / og + <<< ㏓ / x + <<< ᴸ + <<< ㋏ / Td + << ŀ / · + <<< Ŀ / · + < ʟ + <<< ᶫ + < ᴌ + < ƚ + <<< Ƚ + < 'ⱡ' + <<< 'Ⱡ' + < ɫ + <<< 'Ɫ' + < ɬ + < ᶅ + <<< ᶪ + < ɭ + <<< ᶩ + < ȴ + < ɮ + < ƛ + < ʎ + < m + <<< m + <<< ͫ + = ⅿ + <<< 𝐦 + = 𝑚 + = 𝒎 + = 𝓂 + = 𝓶 + = 𝔪 + = 𝕞 + = 𝖒 + = 𝗆 + = 𝗺 + = 𝘮 + = 𝙢 + = 𝚖 + <<< ⓜ + <<< M + <<< M + <<< Ⅿ + <<< ℳ + = 𝐌 + = 𝑀 + = 𝑴 + = 𝓜 + = 𝔐 + = 𝕄 + = 𝕸 + = 𝖬 + = 𝗠 + = 𝘔 + = 𝙈 + = 𝙼 + <<< Ⓜ + <<< ᵐ + <<< ㎧ / ∕s + <<< ㎨ / ∕s2 + <<< ㎡ / 2 + <<< ㎥ / 3 + <<< ㎃ / A + <<< ㏔ / b + <<< ㎎ / g + <<< ㏕ / il + <<< ㎖ / l + <<< ㎜ / m + <<< ㎟ / m2 + <<< ㎣ / m3 + <<< ㏖ / ol + <<< ㎳ / s + <<< ㎷ / V + <<< ㎽ / W + <<< ᴹ + <<< ㎆ / B + <<< ㎒ / Hz + <<< ㎫ / Pa + <<< ㎹ / V + <<< ㎿ / W + <<< ㏁ / Ω + < ᴍ + < ᵯ + < ᶆ + < ɱ + <<< ᶬ + < n + <<< n + <<< nj / j + <<< 𝐧 + = 𝑛 + = 𝒏 + = 𝓃 + = 𝓷 + = 𝔫 + = 𝕟 + = 𝖓 + = 𝗇 + = 𝗻 + = 𝘯 + = 𝙣 + = 𝚗 + <<< ⓝ + <<< N + <<< N + <<< Nj / j + <<< NJ / J + <<< № / o + <<< ℕ + = 𝐍 + = 𝑁 + = 𝑵 + = 𝒩 + = 𝓝 + = 𝔑 + = 𝕹 + = 𝖭 + = 𝗡 + = 𝘕 + = 𝙉 + = 𝙽 + <<< Ⓝ + <<< ⁿ + <<< ㎁ / A + <<< ㎋ / F + <<< ㎚ / m + <<< ㎱ / s + <<< ㎵ / V + <<< ㎻ / W + <<< ᴺ + < ɴ + <<< ᶰ + < ᴻ + < ᴎ + < ᵰ + < ɲ + <<< Ɲ + <<< ᶮ + < ƞ + <<< Ƞ + < ᶇ + < ɳ + <<< ᶯ + < ȵ + < ŋ + <<< Ŋ + <<< ᵑ + < o + <<< ø / ̸ + <<< o + <<< ͦ + <<< ℴ + = 𝐨 + = 𝑜 + = 𝒐 + = 𝓸 + = 𝔬 + = 𝕠 + = 𝖔 + = 𝗈 + = 𝗼 + = 𝘰 + = 𝙤 + = 𝚘 + <<< ⓞ + <<< O + <<< Ø / ̸ + <<< O + <<< 𝐎 + = 𝑂 + = 𝑶 + = 𝒪 + = 𝓞 + = 𝔒 + = 𝕆 + = 𝕺 + = 𝖮 + = 𝗢 + = 𝘖 + = 𝙊 + = 𝙾 + <<< Ⓞ + <<< º + = ᵒ + <<< ₒ + <<< ㍵ / V + <<< ᴼ + << œ / e + <<< Œ / e + < ᴏ + < ᴑ + < ɶ + < ᴔ + < ᴓ + < ɔ + <<< Ɔ + <<< ᵓ + < ᴐ + < ᴒ + < ᶗ + < ᴖ + <<< ᵔ + < ᴗ + <<< ᵕ + < ɵ + <<< Ɵ + <<< ᶱ + < ɷ + < ȣ + <<< Ȣ + <<< ᴽ + < ᴕ + < p + <<< p + <<< 𝐩 + = 𝑝 + = 𝒑 + = 𝓅 + = 𝓹 + = 𝔭 + = 𝕡 + = 𝖕 + = 𝗉 + = 𝗽 + = 𝘱 + = 𝙥 + = 𝚙 + <<< ⓟ + <<< P + <<< P + <<< ℙ + = 𝐏 + = 𝑃 + = 𝑷 + = 𝒫 + = 𝓟 + = 𝔓 + = 𝕻 + = 𝖯 + = 𝗣 + = 𝘗 + = 𝙋 + = 𝙿 + <<< Ⓟ + <<< ᵖ + <<< ㏘ / '.'m'.' + <<< ㎀ / A + <<< ㍶ / c + <<< ㎊ / F + <<< ㎰ / s + <<< ㎴ / V + <<< ㎺ / W + <<< ᴾ + <<< ㎩ / a + <<< ㏗ / H + <<< ㏙ / Pm + <<< ㏚ / R + <<< ㉐ / Te + < ᴘ + < ᵽ + <<< 'Ᵽ' + < ᵱ + < ᶈ + < ƥ + <<< Ƥ + < ɸ + <<< ᶲ + < 'ⱷ' + < q + <<< q + <<< ȹ / p + <<< 𝐪 + = 𝑞 + = 𝒒 + = 𝓆 + = 𝓺 + = 𝔮 + = 𝕢 + = 𝖖 + = 𝗊 + = 𝗾 + = 𝘲 + = 𝙦 + = 𝚚 + <<< ⓠ + <<< Q + <<< Q + <<< ℚ + = 𝐐 + = 𝑄 + = 𝑸 + = 𝒬 + = 𝓠 + = 𝔔 + = 𝕼 + = 𝖰 + = 𝗤 + = 𝘘 + = 𝙌 + = 𝚀 + <<< Ⓠ + < ʠ + < 'ɋ' + <<< 'Ɋ' + < ĸ + < r + <<< r + <<< ͬ + <<< 𝐫 + = 𝑟 + = 𝒓 + = 𝓇 + = 𝓻 + = 𝔯 + = 𝕣 + = 𝖗 + = 𝗋 + = 𝗿 + = 𝘳 + = 𝙧 + = 𝚛 + <<< ⓡ + <<< R + <<< R + <<< ₨ / s + <<< ℛ + = ℜ + = ℝ + = 𝐑 + = 𝑅 + = 𝑹 + = 𝓡 + = 𝕽 + = 𝖱 + = 𝗥 + = 𝘙 + = 𝙍 + = 𝚁 + <<< Ⓡ + <<< ʳ + <<< ᵣ + <<< ㎭ / ad + <<< ㎮ / ad∕s + <<< ㎯ / ad∕s2 + <<< ᴿ + < ʀ + <<< Ʀ + < ᴙ + < 'ɍ' + <<< 'Ɍ' + < ᵲ + < ɹ + <<< ʴ + < ᴚ + < ɺ + < ᶉ + < ɻ + <<< ʵ + < ɼ + < ɽ + <<< 'Ɽ' + < ɾ + < ᵳ + < ɿ + < ʁ + <<< ʶ + < s + <<< s + <<< st / t + <<< 𝐬 + = 𝑠 + = 𝒔 + = 𝓈 + = 𝓼 + = 𝔰 + = 𝕤 + = 𝖘 + = 𝗌 + = 𝘀 + = 𝘴 + = 𝙨 + = 𝚜 + <<< ⓢ + <<< S + <<< S + <<< 𝐒 + = 𝑆 + = 𝑺 + = 𝒮 + = 𝓢 + = 𝔖 + = 𝕊 + = 𝕾 + = 𝖲 + = 𝗦 + = 𝘚 + = 𝙎 + = 𝚂 + <<< Ⓢ + <<< ˢ + <<< ℠ / m + <<< ㏛ / r + <<< ㏜ / v + << ß / s + << ſ + <<< ſt / t + < ᵴ + < ᶊ + < ʂ + <<< ᶳ + < ȿ + < ʃ + <<< Ʃ + <<< ᶴ + < ᶋ + < ƪ + < ʅ + < ᶘ + < ʆ + < t + <<< t + <<< ͭ + <<< ʨ / ɕ + <<< ƾ / s + = ʦ / s + <<< ʧ / ʃ + <<< 𝐭 + = 𝑡 + = 𝒕 + = 𝓉 + = 𝓽 + = 𝔱 + = 𝕥 + = 𝖙 + = 𝗍 + = 𝘁 + = 𝘵 + = 𝙩 + = 𝚝 + <<< ⓣ + <<< T + <<< T + <<< ℡ / El + <<< 𝐓 + = 𝑇 + = 𝑻 + = 𝒯 + = 𝓣 + = 𝔗 + = 𝕋 + = 𝕿 + = 𝖳 + = 𝗧 + = 𝘛 + = 𝙏 + = 𝚃 + <<< Ⓣ + <<< ᵗ + <<< ™ / m + <<< ᵀ + <<< ㎔ / Hz + << ᵺ / h + < ᴛ + < ŧ + <<< Ŧ + < 'ⱦ' + <<< Ⱦ + < ᵵ + < ƫ + <<< ᶵ + < ƭ + <<< Ƭ + < ʈ + <<< Ʈ + < ȶ + < ʇ + < u + <<< u + <<< ͧ + <<< 𝐮 + = 𝑢 + = 𝒖 + = 𝓊 + = 𝓾 + = 𝔲 + = 𝕦 + = 𝖚 + = 𝗎 + = 𝘂 + = 𝘶 + = 𝙪 + = 𝚞 + <<< ⓤ + <<< U + <<< U + <<< 𝐔 + = 𝑈 + = 𝑼 + = 𝒰 + = 𝓤 + = 𝔘 + = 𝕌 + = 𝖀 + = 𝖴 + = 𝗨 + = 𝘜 + = 𝙐 + = 𝚄 + <<< Ⓤ + <<< ᵘ + <<< ᵤ + <<< ᵁ + < ᴜ + <<< ᶸ + < ᴝ + <<< ᵙ + < ᴞ + < ᵫ + < ʉ + <<< 'Ʉ' + <<< ᶶ + < ᵾ + < ᶙ + < ɥ + <<< ᶣ + < ʮ + < ʯ + < ɯ + <<< Ɯ + <<< ᵚ + < ᴟ + < ɰ + <<< ᶭ + < ʊ + <<< Ʊ + <<< ᶷ + < ᵿ + < v + <<< v + <<< ͮ + = ⅴ + <<< ⅵ / i + <<< ⅶ / ii + <<< ⅷ / iii + <<< 𝐯 + = 𝑣 + = 𝒗 + = 𝓋 + = 𝓿 + = 𝔳 + = 𝕧 + = 𝖛 + = 𝗏 + = 𝘃 + = 𝘷 + = 𝙫 + = 𝚟 + <<< ⓥ + <<< V + <<< V + <<< Ⅴ + <<< Ⅵ / I + <<< Ⅶ / Ii + <<< Ⅷ / Iii + <<< 𝐕 + = 𝑉 + = 𝑽 + = 𝒱 + = 𝓥 + = 𝔙 + = 𝕍 + = 𝖁 + = 𝖵 + = 𝗩 + = 𝘝 + = 𝙑 + = 𝚅 + <<< Ⓥ + <<< ᵛ + <<< ᵥ + <<< ㏞ / ∕m + < ᴠ + < ᶌ + < ʋ + <<< Ʋ + <<< ᶹ + < 'ⱴ' + < ʌ + <<< 'Ʌ' + <<< ᶺ + < w + <<< w + <<< 𝐰 + = 𝑤 + = 𝒘 + = 𝓌 + = 𝔀 + = 𝔴 + = 𝕨 + = 𝖜 + = 𝗐 + = 𝘄 + = 𝘸 + = 𝙬 + = 𝚠 + <<< ⓦ + <<< W + <<< W + <<< 𝐖 + = 𝑊 + = 𝑾 + = 𝒲 + = 𝓦 + = 𝔚 + = 𝕎 + = 𝖂 + = 𝖶 + = 𝗪 + = 𝘞 + = 𝙒 + = 𝚆 + <<< Ⓦ + <<< ʷ + <<< ᵂ + <<< ㏝ / b + < ᴡ + < ʍ + < x + <<< x + <<< ͯ + = ⅹ + <<< ⅺ / i + <<< ⅻ / ii + <<< 𝐱 + = 𝑥 + = 𝒙 + = 𝓍 + = 𝔁 + = 𝔵 + = 𝕩 + = 𝖝 + = 𝗑 + = 𝘅 + = 𝘹 + = 𝙭 + = 𝚡 + <<< ⓧ + <<< X + <<< X + <<< Ⅹ + <<< Ⅺ / I + <<< Ⅻ / Ii + <<< 𝐗 + = 𝑋 + = 𝑿 + = 𝒳 + = 𝓧 + = 𝔛 + = 𝕏 + = 𝖃 + = 𝖷 + = 𝗫 + = 𝘟 + = 𝙓 + = 𝚇 + <<< Ⓧ + <<< ˣ + <<< ₓ + < ᶍ + < y + <<< y + <<< 𝐲 + = 𝑦 + = 𝒚 + = 𝓎 + = 𝔂 + = 𝔶 + = 𝕪 + = 𝖞 + = 𝗒 + = 𝘆 + = 𝘺 + = 𝙮 + = 𝚢 + <<< ⓨ + <<< Y + <<< Y + <<< 𝐘 + = 𝑌 + = 𝒀 + = 𝒴 + = 𝓨 + = 𝔜 + = 𝕐 + = 𝖄 + = 𝖸 + = 𝗬 + = 𝘠 + = 𝙔 + = 𝚈 + <<< Ⓨ + <<< ʸ + < ʏ + < 'ɏ' + <<< 'Ɏ' + < ƴ + <<< Ƴ + < z + <<< z + <<< ƍ / w + <<< 𝐳 + = 𝑧 + = 𝒛 + = 𝓏 + = 𝔃 + = 𝔷 + = 𝕫 + = 𝖟 + = 𝗓 + = 𝘇 + = 𝘻 + = 𝙯 + = 𝚣 + <<< ⓩ + <<< Z + <<< Z + <<< ℤ + = ℨ + = 𝐙 + = 𝑍 + = 𝒁 + = 𝒵 + = 𝓩 + = 𝖅 + = 𝖹 + = 𝗭 + = 𝘡 + = 𝙕 + = 𝚉 + <<< Ⓩ + <<< ᶻ + < ᴢ + < ƶ + <<< Ƶ + < ᵶ + < ᶎ + < ȥ + <<< Ȥ + < ʐ + <<< ᶼ + < ʑ + <<< ᶽ + < ɀ + < 'ⱬ' + <<< 'Ⱬ' + < ʒ + <<< Ʒ + <<< ᶾ + < ᴣ + < ƹ + <<< Ƹ + < ᶚ + < ƺ + < ʓ + < ȝ + <<< Ȝ + < þ + <<< Þ + < ƿ + <<< Ƿ + < ƻ + < ƨ + <<< Ƨ + < ƽ + <<< Ƽ + < ƅ + <<< Ƅ + < ʔ + < 'ɂ' + <<< Ɂ + < ˀ + < ʼ + <<< ʼn / n + < ˮ + < ʾ + < ʕ + <<< ˤ + < ʿ + < ˁ + < ᴤ + < ᴥ + <<< ᵜ + < ʡ + < ʢ + < ʖ + < ǀ + < ǁ + < ǂ + < ǃ + < ʗ + < ʘ + < ʬ + < ʭ + < α + <<< 𝛂 + = 𝛼 + = 𝜶 + = 𝝰 + = 𝞪 + <<< Α + <<< 𝚨 + = 𝛢 + = 𝜜 + = 𝝖 + = 𝞐 + < β + <<< ϐ + <<< 𝛃 + = 𝛽 + = 𝜷 + = 𝝱 + = 𝞫 + <<< Β + <<< 𝚩 + = 𝛣 + = 𝜝 + = 𝝗 + = 𝞑 + <<< ᵝ + <<< ᵦ + < γ + <<< ℽ + = 𝛄 + = 𝛾 + = 𝜸 + = 𝝲 + = 𝞬 + <<< Γ + <<< ℾ + = 𝚪 + = 𝛤 + = 𝜞 + = 𝝘 + = 𝞒 + <<< ᵞ + <<< ᵧ + < ᴦ + < δ + <<< 𝛅 + = 𝛿 + = 𝜹 + = 𝝳 + = 𝞭 + <<< Δ + <<< 𝚫 + = 𝛥 + = 𝜟 + = 𝝙 + = 𝞓 + <<< ᵟ + < ε + <<< ϵ + <<< 𝛆 + = 𝛜 + = 𝜀 + = 𝜖 + = 𝜺 + = 𝝐 + = 𝝴 + = 𝞊 + = 𝞮 + = 𝟄 + <<< Ε + <<< 𝚬 + = 𝛦 + = 𝜠 + = 𝝚 + = 𝞔 + < ϝ + <<< '𝟋' + <<< Ϝ + <<< '𝟊' + < ϛ + <<< Ϛ + < ζ + <<< 𝛇 + = 𝜁 + = 𝜻 + = 𝝵 + = 𝞯 + <<< Ζ + <<< 𝚭 + = 𝛧 + = 𝜡 + = 𝝛 + = 𝞕 + < η + <<< 𝛈 + = 𝜂 + = 𝜼 + = 𝝶 + = 𝞰 + <<< Η + <<< 𝚮 + = 𝛨 + = 𝜢 + = 𝝜 + = 𝞖 + < θ + <<< ϑ + <<< 𝛉 + = 𝛝 + = 𝜃 + = 𝜗 + = 𝜽 + = 𝝑 + = 𝝷 + = 𝞋 + = 𝞱 + = 𝟅 + <<< Θ + <<< ϴ + <<< 𝚯 + = 𝚹 + = 𝛩 + = 𝛳 + = 𝜣 + = 𝜭 + = 𝝝 + = 𝝧 + = 𝞗 + = 𝞡 + <<< ᶿ + < ι + <<< ͺ + <<< 𝛊 + = 𝜄 + = 𝜾 + = 𝝸 + = 𝞲 + <<< Ι + <<< 𝚰 + = 𝛪 + = 𝜤 + = 𝝞 + = 𝞘 + < ϳ + < κ + <<< ϰ + <<< ϗ / αι + <<< 𝛋 + = 𝛞 + = 𝜅 + = 𝜘 + = 𝜿 + = 𝝒 + = 𝝹 + = 𝞌 + = 𝞳 + = 𝟆 + <<< Κ + <<< 𝚱 + = 𝛫 + = 𝜥 + = 𝝟 + = 𝞙 + < λ + <<< 𝛌 + = 𝜆 + = 𝝀 + = 𝝺 + = 𝞴 + <<< Λ + <<< 𝚲 + = 𝛬 + = 𝜦 + = 𝝠 + = 𝞚 + < ᴧ + < μ + <<< µ + <<< 𝛍 + = 𝜇 + = 𝝁 + = 𝝻 + = 𝞵 + <<< Μ + <<< 𝚳 + = 𝛭 + = 𝜧 + = 𝝡 + = 𝞛 + <<< ㎂ / A + <<< ㎌ / F + <<< ㎍ / g + <<< ㎕ / l + <<< ㎛ / m + <<< ㎲ / s + <<< ㎶ / V + <<< ㎼ / W + < ν + <<< 𝛎 + = 𝜈 + = 𝝂 + = 𝝼 + = 𝞶 + <<< Ν + <<< 𝚴 + = 𝛮 + = 𝜨 + = 𝝢 + = 𝞜 + < ξ + <<< 𝛏 + = 𝜉 + = 𝝃 + = 𝝽 + = 𝞷 + <<< Ξ + <<< 𝚵 + = 𝛯 + = 𝜩 + = 𝝣 + = 𝞝 + < ο + <<< 𝛐 + = 𝜊 + = 𝝄 + = 𝝾 + = 𝞸 + <<< Ο + <<< 𝚶 + = 𝛰 + = 𝜪 + = 𝝤 + = 𝞞 + < π + <<< ϖ + <<< ℼ + = 𝛑 + = 𝛡 + = 𝜋 + = 𝜛 + = 𝝅 + = 𝝕 + = 𝝿 + = 𝞏 + = 𝞹 + = 𝟉 + <<< Π + <<< ℿ + = 𝚷 + = 𝛱 + = 𝜫 + = 𝝥 + = 𝞟 + < ᴨ + < ϻ + <<< Ϻ + < ϟ + <<< Ϟ + < ϙ + <<< Ϙ + < ρ + <<< ϱ + <<< 𝛒 + = 𝛠 + = 𝜌 + = 𝜚 + = 𝝆 + = 𝝔 + = 𝞀 + = 𝞎 + = 𝞺 + = 𝟈 + <<< Ρ + <<< 𝚸 + = 𝛲 + = 𝜬 + = 𝝦 + = 𝞠 + <<< ᵨ + < ᴩ + < ϼ + < σ + <<< ϲ + <<< 𝛓 + = 𝛔 + = 𝜍 + = 𝜎 + = 𝝇 + = 𝝈 + = 𝞁 + = 𝞂 + = 𝞻 + = 𝞼 + <<< Σ + <<< Ϲ + <<< 𝚺 + = 𝛴 + = 𝜮 + = 𝝨 + = 𝞢 + <<< ς + < 'ͼ' + <<< Ͼ + < 'ͻ' + <<< Ͻ + < 'ͽ' + <<< Ͽ + < τ + <<< 𝛕 + = 𝜏 + = 𝝉 + = 𝞃 + = 𝞽 + <<< Τ + <<< 𝚻 + = 𝛵 + = 𝜯 + = 𝝩 + = 𝞣 + < υ + <<< 𝛖 + = 𝜐 + = 𝝊 + = 𝞄 + = 𝞾 + <<< Υ + <<< ϒ + <<< 𝚼 + = 𝛶 + = 𝜰 + = 𝝪 + = 𝞤 + < φ + <<< ϕ + <<< 𝛗 + = 𝛟 + = 𝜑 + = 𝜙 + = 𝝋 + = 𝝓 + = 𝞅 + = 𝞍 + = 𝞿 + = 𝟇 + <<< Φ + <<< 𝚽 + = 𝛷 + = 𝜱 + = 𝝫 + = 𝞥 + <<< ᵠ + <<< ᵩ + < χ + <<< 𝛘 + = 𝜒 + = 𝝌 + = 𝞆 + = 𝟀 + <<< Χ + <<< 𝚾 + = 𝛸 + = 𝜲 + = 𝝬 + = 𝞦 + <<< ᵡ + <<< ᵪ + < ψ + <<< 𝛙 + = 𝜓 + = 𝝍 + = 𝞇 + = 𝟁 + <<< Ψ + <<< 𝚿 + = 𝛹 + = 𝜳 + = 𝝭 + = 𝞧 + < ᴪ + < ω + <<< 𝛚 + = 𝜔 + = 𝝎 + = 𝞈 + = 𝟂 + <<< Ω + <<< 𝛀 + = 𝛺 + = 𝜴 + = 𝝮 + = 𝞨 + < ϡ + <<< Ϡ + < ϸ + <<< Ϸ + < ⲁ + <<< Ⲁ + < ⲃ + <<< Ⲃ + < ⲅ + <<< Ⲅ + < ⲇ + <<< Ⲇ + < ⲉ + <<< Ⲉ + < ⲷ + <<< Ⲷ + < ⲋ + <<< Ⲋ + < ⲍ + <<< Ⲍ + < ⲏ + <<< Ⲏ + < ⲑ + <<< Ⲑ + < ⲓ + <<< Ⲓ + < ⲕ + <<< ⳤ / ⲁⲓ + <<< Ⲕ + < ⲹ + <<< Ⲹ + < ⲗ + <<< Ⲗ + < ⲙ + <<< Ⲙ + < ⲛ + <<< Ⲛ + < ⲻ + <<< Ⲻ + < ⲽ + <<< Ⲽ + < ⲝ + <<< Ⲝ + < ⲟ + <<< Ⲟ + < ⲡ + <<< Ⲡ + < ⲣ + <<< Ⲣ + < ⲥ + <<< Ⲥ + < ⲧ + <<< Ⲧ + < ⲩ + <<< Ⲩ + < ⲫ + <<< Ⲫ + < ⲭ + <<< Ⲭ + < ⲯ + <<< Ⲯ + < ⲱ + <<< Ⲱ + < ⲿ + <<< Ⲿ + < ⳁ + <<< Ⳁ + < ϣ + <<< Ϣ + < ⳃ + <<< Ⳃ + < ⳅ + <<< Ⳅ + < ⳇ + <<< Ⳇ + < ϥ + <<< Ϥ + < ϧ + <<< Ϧ + < ⳉ + <<< Ⳉ + < ϩ + <<< Ϩ + < ⳋ + <<< Ⳋ + < ⳍ + <<< Ⳍ + < ⳏ + <<< Ⳏ + < ⳑ + <<< Ⳑ + < ⳓ + <<< Ⳓ + < ⳕ + <<< Ⳕ + < ϫ + <<< Ϫ + < ⳗ + <<< Ⳗ + < ϭ + <<< Ϭ + < ⳙ + <<< Ⳙ + < ⳛ + <<< Ⳛ + < ⳝ + <<< Ⳝ + < ϯ + <<< Ϯ + < ⲳ + <<< Ⲳ + < ⲵ + <<< Ⲵ + < ⳟ + <<< Ⳟ + < ⳡ + <<< Ⳡ + < ⳣ + <<< Ⳣ + < а + <<< А + < ӑ + <<< Ӑ + < ӓ + <<< Ӓ + < ә + <<< Ә + < ӛ + <<< Ӛ + < ӕ + <<< Ӕ + < б + <<< Б + < в + <<< В + < г + <<< Г + << ґ + <<< Ґ + < ғ + <<< Ғ + < 'ӻ' + <<< 'Ӻ' + < ҕ + <<< Ҕ + < ӷ + <<< Ӷ + < д + <<< Д + < ԁ + <<< Ԁ + < ђ + <<< Ђ + < ԃ + <<< Ԃ + < ѓ + = ѓ + <<< Ѓ + = Ѓ + < ҙ + <<< Ҙ + < е + <<< Е + < ӗ + <<< Ӗ + < є + <<< Є + < ж + <<< Ж + < ӝ + <<< Ӝ + < җ + <<< Җ + < з + <<< З + < ԅ + <<< Ԅ + < 'ԑ' + <<< 'Ԑ' + < ӟ + <<< Ӟ + < ѕ + <<< Ѕ + < ӡ + <<< Ӡ + < ԇ + <<< Ԇ + < и + <<< И + < ҋ + <<< Ҋ + < ӥ + <<< Ӥ + < і + <<< І + < ї + <<< Ї + < й + <<< Й + < ј + <<< Ј + < к + <<< К + < қ + <<< Қ + < ӄ + <<< Ӄ + < ҡ + <<< Ҡ + < ҟ + <<< Ҟ + < ҝ + <<< Ҝ + < л + <<< Л + < ᴫ + < ӆ + <<< Ӆ + < 'ԓ' + <<< 'Ԓ' + < љ + <<< Љ + < ԉ + <<< Ԉ + < м + <<< М + < ӎ + <<< Ӎ + < н + <<< Н + <<< ᵸ + < ӊ + <<< Ӊ + < ң + <<< Ң + < ӈ + <<< Ӈ + < ҥ + <<< Ҥ + < њ + <<< Њ + < ԋ + <<< Ԋ + < о + <<< О + < ӧ + <<< Ӧ + < ө + <<< Ө + < ӫ + <<< Ӫ + < п + <<< П + < ҧ + <<< Ҧ + < ҁ + <<< Ҁ + < р + <<< Р + < ҏ + <<< Ҏ + < с + <<< С + < ԍ + <<< Ԍ + < ҫ + <<< Ҫ + < т + <<< Т + < ԏ + <<< Ԏ + < ҭ + <<< Ҭ + < ћ + <<< Ћ + < ќ + = ќ + <<< Ќ + = Ќ + < у + <<< У + < ў + <<< Ў + < ӱ + <<< Ӱ + < ӳ + <<< Ӳ + < ү + <<< Ү + < ұ + <<< Ұ + < ѹ + <<< Ѹ + < ф + <<< Ф + < х + <<< Х + < 'ӽ' + <<< 'Ӽ' + < 'ӿ' + <<< 'Ӿ' + < ҳ + <<< Ҳ + < һ + <<< Һ + < ѡ + <<< Ѡ + < ѿ + <<< Ѿ + < ѽ + <<< Ѽ + < ѻ + <<< Ѻ + < ц + <<< Ц + < ҵ + <<< Ҵ + < ч + <<< Ч + < ӵ + <<< Ӵ + < ҷ + <<< Ҷ + < ӌ + <<< Ӌ + < ҹ + <<< Ҹ + < ҽ + <<< Ҽ + < ҿ + <<< Ҿ + < џ + <<< Џ + < ш + <<< Ш + < щ + <<< Щ + < ъ + <<< Ъ + < ы + <<< Ы + < ӹ + <<< Ӹ + < ь + <<< Ь + < ҍ + <<< Ҍ + < ѣ + <<< Ѣ + < э + <<< Э + < ӭ + <<< Ӭ + < ю + <<< Ю + < я + <<< Я + < ѥ + <<< Ѥ + < ѧ + <<< Ѧ + < ѫ + <<< Ѫ + < ѩ + <<< Ѩ + < ѭ + <<< Ѭ + < ѯ + <<< Ѯ + < ѱ + <<< Ѱ + < ѳ + <<< Ѳ + < ѵ + <<< Ѵ + < ѷ + <<< Ѷ + < ҩ + <<< Ҩ + < 'ӏ' + <<< Ӏ + < ⰰ + <<< Ⰰ + < ⰱ + <<< Ⰱ + < ⰲ + <<< Ⰲ + < ⰳ + <<< Ⰳ + < ⰴ + <<< Ⰴ + < ⰵ + <<< Ⰵ + < ⰶ + <<< Ⰶ + < ⰷ + <<< Ⰷ + < ⰸ + <<< Ⰸ + < ⰹ + <<< Ⰹ + < ⰺ + <<< Ⰺ + < ⰻ + <<< Ⰻ + < ⰼ + <<< Ⰼ + < ⰽ + <<< Ⰽ + < ⰾ + <<< Ⰾ + < ⰿ + <<< Ⰿ + < ⱀ + <<< Ⱀ + < ⱁ + <<< Ⱁ + < ⱂ + <<< Ⱂ + < ⱃ + <<< Ⱃ + < ⱄ + <<< Ⱄ + < ⱅ + <<< Ⱅ + < ⱆ + <<< Ⱆ + < ⱇ + <<< Ⱇ + < ⱈ + <<< Ⱈ + < ⱉ + <<< Ⱉ + < ⱊ + <<< Ⱊ + < ⱋ + <<< Ⱋ + < ⱌ + <<< Ⱌ + < ⱍ + <<< Ⱍ + < ⱎ + <<< Ⱎ + < ⱏ + <<< Ⱏ + < ⱐ + <<< Ⱐ + < ⱑ + <<< Ⱑ + < ⱒ + <<< Ⱒ + < ⱓ + <<< Ⱓ + < ⱔ + <<< Ⱔ + < ⱕ + <<< Ⱕ + < ⱖ + <<< Ⱖ + < ⱗ + <<< Ⱗ + < ⱘ + <<< Ⱘ + < ⱙ + <<< Ⱙ + < ⱚ + <<< Ⱚ + < ⱛ + <<< Ⱛ + < ⱜ + <<< Ⱜ + < ⱝ + <<< Ⱝ + < ⱞ + <<< Ⱞ + < ა + < ⴀ + <<< Ⴀ + < ბ + < ⴁ + <<< Ⴁ + < გ + < ⴂ + <<< Ⴂ + < დ + < ⴃ + <<< Ⴃ + < ე + < ⴄ + <<< Ⴄ + < ვ + < ⴅ + <<< Ⴅ + < ზ + < ⴆ + <<< Ⴆ + < ჱ + < ⴡ + <<< Ⴡ + < თ + < ⴇ + <<< Ⴇ + < ი + < ⴈ + <<< Ⴈ + < კ + < ⴉ + <<< Ⴉ + < ლ + < ⴊ + <<< Ⴊ + < მ + < ⴋ + <<< Ⴋ + < ნ + <<< ჼ + < ⴌ + <<< Ⴌ + < ჲ + < ⴢ + <<< Ⴢ + < ო + < ⴍ + <<< Ⴍ + < პ + < ⴎ + <<< Ⴎ + < ჟ + < ⴏ + <<< Ⴏ + < რ + < ⴐ + <<< Ⴐ + < ს + < ⴑ + <<< Ⴑ + < ტ + < ⴒ + <<< Ⴒ + < ჳ + < ⴣ + <<< Ⴣ + < უ + < ⴓ + <<< Ⴓ + < ფ + < ⴔ + <<< Ⴔ + < ქ + < ⴕ + <<< Ⴕ + < ღ + < ⴖ + <<< Ⴖ + < ყ + < ⴗ + <<< Ⴗ + < შ + < ⴘ + <<< Ⴘ + < ჩ + < ⴙ + <<< Ⴙ + < ც + < ⴚ + <<< Ⴚ + < ძ + < ⴛ + <<< Ⴛ + < წ + < ⴜ + <<< Ⴜ + < ჭ + < ⴝ + <<< Ⴝ + < ხ + < ⴞ + <<< Ⴞ + < ჴ + < ⴤ + <<< Ⴤ + < ჯ + < ⴟ + <<< Ⴟ + < ჰ + < ⴠ + <<< Ⴠ + < ჵ + < ⴥ + <<< Ⴥ + < ჶ + < ჷ + < ჸ + < ჹ + < ჺ + < ա + <<< Ա + < բ + <<< Բ + < գ + <<< Գ + < դ + <<< Դ + < ե + <<< և / ւ + <<< Ե + < զ + <<< Զ + < է + <<< Է + < ը + <<< Ը + < թ + <<< Թ + < ժ + <<< Ժ + < ի + <<< Ի + < լ + <<< Լ + < խ + <<< Խ + < ծ + <<< Ծ + < կ + <<< Կ + < հ + <<< Հ + < ձ + <<< Ձ + < ղ + <<< Ղ + < ճ + <<< Ճ + < մ + <<< ﬔ / ե + <<< ﬕ / ի + <<< ﬗ / խ + <<< ﬓ / ն + <<< Մ + < յ + <<< Յ + < ն + <<< Ն + < շ + <<< Շ + < ո + <<< Ո + < չ + <<< Չ + < պ + <<< Պ + < ջ + <<< Ջ + < ռ + <<< Ռ + < ս + <<< Ս + < վ + <<< ﬖ / ն + <<< Վ + < տ + <<< Տ + < ր + <<< Ր + < ց + <<< Ց + < ւ + <<< Ւ + < փ + <<< Փ + < ք + <<< Ք + < օ + <<< Օ + < ֆ + <<< Ֆ + < ՙ + < א + <<< ℵ + <<< ﭏ / ל + <<< ﬡ + < ב + <<< ℶ + < ג + <<< ℷ + < ד + <<< ℸ + <<< ﬢ + < ה + <<< ﬣ + < ו + <<< װ / ו + <<< ױ / י + < ז + < ח + < ט + < י + <<< ײ / י + < כ + <<< ﬤ + <<< ך + < ל + <<< ﬥ + < מ + <<< ﬦ + <<< ם + < נ + <<< ן + < ס + < ע + <<< ﬠ + < פ + <<< ף + < צ + <<< ץ + < ק + < ר + <<< ﬧ + < ש + < ת + <<< ﬨ + < '𐤀' + < '𐤁' + < '𐤂' + < '𐤃' + < '𐤄' + < '𐤅' + < '𐤆' + < '𐤇' + < '𐤈' + < '𐤉' + < '𐤊' + < '𐤋' + < '𐤌' + < '𐤍' + < '𐤎' + < '𐤏' + < '𐤐' + < '𐤑' + < '𐤒' + < '𐤓' + < '𐤔' + < '𐤕' + < ء + <<< ٴ + <<< ﺀ + << ۽ + < آ + <<< ﺂ + <<< ﺁ + < أ + <<< ﺄ + <<< ﺃ + < ٲ + < ٱ + <<< ﭑ + <<< ﭐ + < ؤ + <<< ﺆ + <<< ﺅ + < إ + <<< ﺈ + <<< ﺇ + < ٳ + < ئ + <<< ﺋ + <<< ﲗ / ج + <<< ﲘ / ح + <<< ﲙ / خ + <<< ﲚ / م + <<< ﲛ / ه + <<< ﯻ / ى + <<< ﯸ / ې + <<< ﺌ + <<< ﳟ / م + <<< ﳠ / ه + <<< ﺊ + <<< ﯫ / ا + <<< ﱤ / ر + <<< ﱥ / ز + <<< ﱦ / م + <<< ﱧ / ن + <<< ﯭ / ە + <<< ﯯ / و + <<< ﯳ / ۆ + <<< ﯱ / ۇ + <<< ﯵ / ۈ + <<< ﯺ / ى + = ﱨ / ى + <<< ﱩ / ي + <<< ﯷ / ې + <<< ﺉ + <<< ﯪ / ا + <<< ﰀ / ج + <<< ﰁ / ح + <<< ﰂ / م + <<< ﯬ / ە + <<< ﯮ / و + <<< ﯲ / ۆ + <<< ﯰ / ۇ + <<< ﯴ / ۈ + <<< ﯹ / ى + = ﰃ / ى + <<< ﰄ / ي + <<< ﯶ / ې + < ا + <<< ٵ / ء + <<< ﺎ + <<< ﴼ / ً + <<< ﺍ + <<< ﴽ / ً + <<< ﷳ / كبر + <<< ﷲ / لله + < ٮ + < ب + <<< ﺑ + <<< ﲜ / ج + <<< ﲝ / ح + <<< ﲞ / خ + <<< ﲟ / م + <<< ﲠ / ه + <<< ﺒ + <<< ﳡ / م + <<< ﳢ / ه + <<< ﺐ + <<< ﷂ / حي + <<< ﶞ / خي + <<< ﱪ / ر + <<< ﱫ / ز + <<< ﱬ / م + <<< ﱭ / ن + <<< ﱮ / ى + <<< ﱯ / ي + <<< ﺏ + <<< ﰅ / ج + <<< ﰆ / ح + <<< ﰇ / خ + <<< ﰈ / م + <<< ﰉ / ى + <<< ﰊ / ي + < ٻ + <<< ﭔ + <<< ﭕ + <<< ﭓ + <<< ﭒ + < پ + <<< ﭘ + <<< ﭙ + <<< ﭗ + <<< ﭖ + < ڀ + <<< ﭜ + <<< ﭝ + <<< ﭛ + <<< ﭚ + < ݐ + < ݑ + < ݒ + < ݓ + < ݔ + < ݕ + < ݖ + < ة + <<< ﺔ + <<< ﺓ + < ت + <<< ﺗ + <<< ﲡ / ج + <<< ﵐ / جم + <<< ﲢ / ح + <<< ﵒ / حج + <<< ﵓ / حم + <<< ﲣ / خ + <<< ﵔ / خم + <<< ﲤ / م + <<< ﵕ / مج + <<< ﵖ / مح + <<< ﵗ / مخ + <<< ﲥ / ه + <<< ﺘ + <<< ﳣ / م + <<< ﳤ / ه + <<< ﺖ + <<< ﶠ / جى + <<< ﶟ / جي + <<< ﵑ / حج + <<< ﶢ / خى + <<< ﶡ / خي + <<< ﱰ / ر + <<< ﱱ / ز + <<< ﱲ / م + <<< ﶤ / مى + <<< ﶣ / مي + <<< ﱳ / ن + <<< ﱴ / ى + <<< ﱵ / ي + <<< ﺕ + <<< ﰋ / ج + <<< ﰌ / ح + <<< ﰍ / خ + <<< ﰎ / م + <<< ﰏ / ى + <<< ﰐ / ي + < ث + <<< ﺛ + <<< ﲦ / م + <<< ﺜ + <<< ﳥ / م + <<< ﳦ / ه + <<< ﺚ + <<< ﱶ / ر + <<< ﱷ / ز + <<< ﱸ / م + <<< ﱹ / ن + <<< ﱺ / ى + <<< ﱻ / ي + <<< ﺙ + <<< ﰑ / ج + <<< ﰒ / م + <<< ﰓ / ى + <<< ﰔ / ي + < ٹ + <<< ﭨ + <<< ﭩ + <<< ﭧ + <<< ﭦ + < ٺ + <<< ﭠ + <<< ﭡ + <<< ﭟ + <<< ﭞ + < ټ + < ٽ + < ٿ + <<< ﭤ + <<< ﭥ + <<< ﭣ + <<< ﭢ + < ج + <<< ﺟ + <<< ﲧ / ح + <<< ﲨ / م + <<< ﵙ / مح + <<< ﺠ + <<< ﺞ + <<< ﶦ / حى + <<< ﶾ / حي + <<< ﵘ / مح + <<< ﶧ / مى + <<< ﶥ / مي + <<< ﴝ / ى + <<< ﴞ / ي + <<< ﺝ + <<< ﰕ / ح + <<< ﷻ / ل' 'جلاله + <<< ﰖ / م + <<< ﴁ / ى + <<< ﴂ / ي + < ڃ + <<< ﭸ + <<< ﭹ + <<< ﭷ + <<< ﭶ + < ڄ + <<< ﭴ + <<< ﭵ + <<< ﭳ + <<< ﭲ + < چ + <<< ﭼ + <<< ﭽ + <<< ﭻ + <<< ﭺ + < ڿ + < ڇ + <<< ﮀ + <<< ﮁ + <<< ﭿ + <<< ﭾ + < ح + <<< ﺣ + <<< ﲩ / ج + <<< ﲪ / م + <<< ﺤ + <<< ﺢ + <<< ﶿ / جي + <<< ﵛ / مى + <<< ﵚ / مي + <<< ﴛ / ى + <<< ﴜ / ي + <<< ﺡ + <<< ﰗ / ج + <<< ﰘ / م + <<< ﳿ / ى + <<< ﴀ / ي + < خ + <<< ﺧ + <<< ﲫ / ج + <<< ﲬ / م + <<< ﺨ + <<< ﺦ + <<< ﴟ / ى + <<< ﴠ / ي + <<< ﺥ + <<< ﰙ / ج + <<< ﰚ / ح + <<< ﰛ / م + <<< ﴃ / ى + <<< ﴄ / ي + < ځ + < ڂ + < څ + < ݗ + < ݘ + < د + <<< ﺪ + <<< ﺩ + < ذ + <<< ﺬ + <<< ﺫ + <<< ﱛ / ٰ + < ڈ + <<< ﮉ + <<< ﮈ + < ډ + < ڊ + < ڋ + < ڌ + <<< ﮅ + <<< ﮄ + < ڍ + <<< ﮃ + <<< ﮂ + < ڎ + <<< ﮇ + <<< ﮆ + < ڏ + < ڐ + < ۮ + < ݙ + < ݚ + < ر + <<< ﺮ + <<< ﺭ + <<< ﱜ / ٰ + <<< ﷶ / سول + <<< ﷼ / یال + < ز + <<< ﺰ + <<< ﺯ + < ڑ + <<< ﮍ + <<< ﮌ + < ڒ + < ړ + < ڔ + < ڕ + < ږ + < ڗ + < ژ + <<< ﮋ + <<< ﮊ + < ڙ + < ۯ + < ݛ + < ݫ + < ݬ + < س + <<< ﺳ + <<< ﲭ / ج + <<< ﵝ / جح + <<< ﲮ / ح + <<< ﵜ / حج + <<< ﲯ / خ + <<< ﲰ / م + <<< ﵡ / مج + <<< ﵠ / مح + <<< ﵣ / مم + <<< ﴱ / ه + <<< ﺴ + <<< ﴴ / ج + <<< ﴵ / ح + <<< ﴶ / خ + <<< ﳧ / م + <<< ﳨ / ه + <<< ﺲ + <<< ﵞ / جى + <<< ﶨ / خى + <<< ﷆ / خي + <<< ﴪ / ر + <<< ﵟ / مح + <<< ﵢ / مم + <<< ﴗ / ى + <<< ﴘ / ي + <<< ﺱ + <<< ﰜ / ج + <<< ﰝ / ح + <<< ﰞ / خ + <<< ﴎ / ر + <<< ﰟ / م + <<< ﳻ / ى + <<< ﳼ / ي + < ش + <<< ﺷ + <<< ﴭ / ج + <<< ﴮ / ح + <<< ﵨ / حم + <<< ﴯ / خ + <<< ﴰ / م + <<< ﵫ / مخ + <<< ﵭ / مم + <<< ﴲ / ه + <<< ﺸ + <<< ﴷ / ج + <<< ﴸ / ح + <<< ﴹ / خ + <<< ﳩ / م + <<< ﳪ / ه + <<< ﺶ + <<< ﴥ / ج + <<< ﵩ / جي + <<< ﴦ / ح + <<< ﵧ / حم + <<< ﶪ / حي + <<< ﴧ / خ + <<< ﴩ / ر + <<< ﴨ / م + <<< ﵪ / مخ + <<< ﵬ / مم + <<< ﴙ / ى + <<< ﴚ / ي + <<< ﺵ + <<< ﴉ / ج + <<< ﴊ / ح + <<< ﴋ / خ + <<< ﴍ / ر + <<< ﴌ / م + <<< ﳽ / ى + <<< ﳾ / ي + < ښ + < ڛ + < ڜ + < ۺ + < ݜ + < ݭ + < ص + <<< ﺻ + <<< ﲱ / ح + <<< ﵥ / حح + <<< ﲲ / خ + <<< ﲳ / م + <<< ﷅ / مم + <<< ﺼ + <<< ﺺ + <<< ﵤ / حح + <<< ﶩ / حي + <<< ﴫ / ر + <<< ﵦ / مم + <<< ﴡ / ى + <<< ﴢ / ي + <<< ﺹ + <<< ﰠ / ح + <<< ﴏ / ر + <<< ﷵ / لعم + <<< ﷹ / لى + <<< ﷺ / لى' 'الله' 'عليه' 'وسلم + <<< ﷰ / لے + <<< ﰡ / م + <<< ﴅ / ى + <<< ﴆ / ي + < ض + <<< ﺿ + <<< ﲴ / ج + <<< ﲵ / ح + <<< ﲶ / خ + <<< ﵰ / خم + <<< ﲷ / م + <<< ﻀ + <<< ﺾ + <<< ﵮ / حى + <<< ﶫ / حي + <<< ﵯ / خم + <<< ﴬ / ر + <<< ﴣ / ى + <<< ﴤ / ي + <<< ﺽ + <<< ﰢ / ج + <<< ﰣ / ح + <<< ﰤ / خ + <<< ﴐ / ر + <<< ﰥ / م + <<< ﴇ / ى + <<< ﴈ / ي + < ڝ + < ڞ + < ۻ + < ط + <<< ﻃ + <<< ﲸ / ح + <<< ﴳ / م + <<< ﵲ / مح + <<< ﵳ / مم + <<< ﻄ + <<< ﴺ / م + <<< ﻂ + <<< ﵱ / مح + <<< ﵴ / مي + <<< ﴑ / ى + <<< ﴒ / ي + <<< ﻁ + <<< ﰦ / ح + <<< ﰧ / م + <<< ﳵ / ى + <<< ﳶ / ي + < ظ + <<< ﻇ + <<< ﲹ / م + <<< ﻈ + <<< ﴻ / م + <<< ﻆ + <<< ﻅ + <<< ﰨ / م + < ڟ + < ع + <<< ﻋ + <<< ﲺ / ج + <<< ﷄ / جم + <<< ﲻ / م + <<< ﵷ / مم + <<< ﻌ + <<< ﻊ + <<< ﵵ / جم + <<< ﵶ / مم + <<< ﵸ / مى + <<< ﶶ / مي + <<< ﴓ / ى + <<< ﴔ / ي + <<< ﻉ + <<< ﰩ / ج + <<< ﷷ / ليه + <<< ﰪ / م + <<< ﳷ / ى + <<< ﳸ / ي + < غ + <<< ﻏ + <<< ﲼ / ج + <<< ﲽ / م + <<< ﻐ + <<< ﻎ + <<< ﵹ / مم + <<< ﵻ / مى + <<< ﵺ / مي + <<< ﴕ / ى + <<< ﴖ / ي + <<< ﻍ + <<< ﰫ / ج + <<< ﰬ / م + <<< ﳹ / ى + <<< ﳺ / ي + < ڠ + < ۼ + < ݝ + < ݞ + < ݟ + < ف + <<< ﻓ + <<< ﲾ / ج + <<< ﲿ / ح + <<< ﳀ / خ + <<< ﵽ / خم + <<< ﳁ / م + <<< ﻔ + <<< ﻒ + <<< ﵼ / خم + <<< ﷁ / مي + <<< ﱼ / ى + <<< ﱽ / ي + <<< ﻑ + <<< ﰭ / ج + <<< ﰮ / ح + <<< ﰯ / خ + <<< ﰰ / م + <<< ﰱ / ى + <<< ﰲ / ي + < ڡ + < ڢ + < ڣ + < ڤ + <<< ﭬ + <<< ﭭ + <<< ﭫ + <<< ﭪ + < ڥ + < ڦ + <<< ﭰ + <<< ﭱ + <<< ﭯ + <<< ﭮ + < ݠ + < ݡ + < ٯ + < ق + <<< ﻗ + <<< ﳂ / ح + <<< ﳃ / م + <<< ﶴ / مح + <<< ﻘ + <<< ﻖ + <<< ﵾ / مح + <<< ﵿ / مم + <<< ﶲ / مي + <<< ﱾ / ى + <<< ﱿ / ي + <<< ﻕ + <<< ﰳ / ح + <<< ﷱ / لے + <<< ﰴ / م + <<< ﰵ / ى + <<< ﰶ / ي + < ڧ + < ڨ + < ك + <<< ﻛ + <<< ﳄ / ج + <<< ﳅ / ح + <<< ﳆ / خ + <<< ﳇ / ل + <<< ﳈ / م + <<< ﷃ / مم + <<< ﻜ + <<< ﳫ / ل + <<< ﳬ / م + <<< ﻚ + <<< ﲀ / ا + <<< ﲁ / ل + <<< ﲂ / م + <<< ﶻ / مم + <<< ﶷ / مي + <<< ﲃ / ى + <<< ﲄ / ي + <<< ﻙ + <<< ﰷ / ا + <<< ﰸ / ج + <<< ﰹ / ح + <<< ﰺ / خ + <<< ﰻ / ل + <<< ﰼ / م + <<< ﰽ / ى + <<< ﰾ / ي + < ک + <<< ﮐ + <<< ﮑ + <<< ﮏ + <<< ﮎ + < ڪ + < ګ + < ڬ + < ڭ + <<< ﯕ + <<< ﯖ + <<< ﯔ + <<< ﯓ + < ڮ + < گ + <<< ﮔ + <<< ﮕ + <<< ﮓ + <<< ﮒ + < ڰ + < ڱ + <<< ﮜ + <<< ﮝ + <<< ﮛ + <<< ﮚ + < ڲ + < ڳ + <<< ﮘ + <<< ﮙ + <<< ﮗ + <<< ﮖ + < ڴ + < ݢ + < ݣ + < ݤ + < ل + <<< ﻟ + <<< ﳉ / ج + <<< ﶃ / جج + <<< ﶺ / جم + <<< ﳊ / ح + <<< ﶵ / حم + <<< ﳋ / خ + <<< ﶆ / خم + <<< ﳌ / م + <<< ﶈ / مح + <<< ﳍ / ه + <<< ﻠ + <<< ﳭ / م + <<< ﻞ + <<< ﻶ / آ + <<< ﻸ / أ + <<< ﻺ / إ + <<< ﻼ / ا + <<< ﶄ / جج + <<< ﶼ / جم + <<< ﶬ / جي + <<< ﶀ / حم + <<< ﶂ / حى + <<< ﶁ / حي + <<< ﶅ / خم + <<< ﲅ / م + <<< ﶇ / مح + <<< ﶭ / مي + <<< ﲆ / ى + <<< ﲇ / ي + <<< ﻝ + <<< ﻵ / آ + <<< ﻷ / أ + <<< ﻹ / إ + <<< ﻻ / ا + <<< ﰿ / ج + <<< ﱀ / ح + <<< ﱁ / خ + <<< ﱂ / م + <<< ﱃ / ى + <<< ﱄ / ي + < ڵ + < ڶ + < ڷ + < ڸ + < ݪ + < م + <<< ﻣ + <<< ﳎ / ج + <<< ﶌ / جح + <<< ﶒ / جخ + <<< ﶍ / جم + <<< ﳏ / ح + <<< ﶉ / حج + <<< ﶊ / حم + <<< ﳐ / خ + <<< ﶎ / خج + <<< ﶏ / خم + <<< ﳑ / م + <<< ﻤ + <<< ﻢ + <<< ﲈ / ا + <<< ﷀ / جي + <<< ﶋ / حي + <<< ﶹ / خي + <<< ﲉ / م + <<< ﶱ / مي + <<< ﻡ + <<< ﱅ / ج + <<< ﱆ / ح + <<< ﷴ / حمد + <<< ﱇ / خ + <<< ﱈ / م + <<< ﱉ / ى + <<< ﱊ / ي + << ۾ + < ݥ + < ݦ + < ن + <<< ﻧ + <<< ﳒ / ج + <<< ﶸ / جح + <<< ﶘ / جم + <<< ﳓ / ح + <<< ﶕ / حم + <<< ﳔ / خ + <<< ﳕ / م + <<< ﳖ / ه + <<< ﻨ + <<< ﳮ / م + <<< ﳯ / ه + <<< ﻦ + <<< ﶽ / جح + <<< ﶗ / جم + <<< ﶙ / جى + <<< ﷇ / جي + <<< ﶖ / حى + <<< ﶳ / حي + <<< ﲊ / ر + <<< ﲋ / ز + <<< ﲌ / م + <<< ﶛ / مى + <<< ﶚ / مي + <<< ﲍ / ن + <<< ﲎ / ى + <<< ﲏ / ي + <<< ﻥ + <<< ﱋ / ج + <<< ﱌ / ح + <<< ﱍ / خ + <<< ﱎ / م + <<< ﱏ / ى + <<< ﱐ / ي + < ں + <<< ﮟ + <<< ﮞ + < ڻ + <<< ﮢ + <<< ﮣ + <<< ﮡ + <<< ﮠ + < ڼ + < ڽ + < ڹ + < ݧ + < ݨ + < ݩ + < ه + <<< ﻫ + <<< ﳙ / ٰ + <<< ﳗ / ج + <<< ﳘ / م + <<< ﶓ / مج + <<< ﶔ / مم + <<< ﻬ + <<< ﻪ + <<< ﻩ + <<< ﱑ / ج + <<< ﱒ / م + <<< ﱓ / ى + <<< ﱔ / ي + < ھ + <<< ﮬ + <<< ﮭ + <<< ﮫ + <<< ﮪ + < ہ + <<< ﮨ + <<< ﮩ + <<< ﮧ + <<< ﮦ + < ۃ + < ۿ + < ە + <<< ﮥ / ٔ + <<< ﮤ / ٔ + < و + <<< ۥ + <<< ٶ / ء + <<< ﻮ + <<< ﻭ + <<< ﷸ / سلم + < ۄ + < ۅ + <<< ﯡ + <<< ﯠ + < ۆ + <<< ﯚ + <<< ﯙ + < ۇ + <<< ٷ / ء + <<< ﯘ + <<< ﯗ + <<< ﯝ / ء + < ۈ + <<< ﯜ + <<< ﯛ + < ۉ + <<< ﯣ + <<< ﯢ + < ۊ + < ۋ + <<< ﯟ + <<< ﯞ + < ۏ + < ى + <<< ﯨ + <<< ﯩ + <<< ﻰ + <<< ﲐ / ٰ + <<< ﻯ + <<< ﱝ / ٰ + < ي + <<< ۦ + <<< ٸ / ء + <<< ﻳ + <<< ﳚ / ج + <<< ﳛ / ح + <<< ﳜ / خ + <<< ﳝ / م + <<< ﶝ / مم + <<< ﳞ / ه + <<< ﻴ + <<< ﳰ / م + <<< ﳱ / ه + <<< ﻲ + <<< ﶯ / جي + <<< ﶮ / حي + <<< ﲑ / ر + <<< ﲒ / ز + <<< ﲓ / م + <<< ﶜ / مم + <<< ﶰ / مي + <<< ﲔ / ن + <<< ﲕ / ى + <<< ﲖ / ي + <<< ﻱ + <<< ﱕ / ج + <<< ﱖ / ح + <<< ﱗ / خ + <<< ﱘ / م + <<< ﱙ / ى + <<< ﱚ / ي + < ی + <<< ﯾ + <<< ﯿ + <<< ﯽ + <<< ﯼ + < ۍ + < ێ + < ې + <<< ﯦ + <<< ﯧ + <<< ﯥ + <<< ﯤ + < ۑ + < ے + <<< ﮯ + <<< ﮱ / ٔ + <<< ﮮ + <<< ﮰ / ٔ + < ܐ + < ܒ + << ܭ + < ܓ + << ܔ + << ܮ + < ܖ + < ܕ + << ܯ + < ܗ + < ܘ + < ܙ + < ݍ + < ܚ + < ܛ + << ܜ + < ܝ + < ܞ + < ܟ + < ݎ + < ܠ + < ܡ + < ܢ + < ܣ + <<< ܤ + < ܥ + < ܦ + << ܧ + < ݏ + < ܨ + < ܩ + < ܪ + < ܫ + < ܬ + < ހ + < ޙ + < ޚ + < ށ + < ނ + < ރ + < ޜ + < ބ + < ޅ + < ކ + < އ + < ޢ + < ޣ + < ވ + < ޥ + < މ + < ފ + < ދ + < ޛ + < ތ + < ޘ + < ޠ + < ޡ + < ލ + < ގ + < ޤ + < ޏ + < ސ + < ޝ + < ޞ + < ޟ + < ޑ + < ޒ + < ޓ + < ޔ + < ޕ + < ޖ + < ޗ + < ޱ + < ަ + < ާ + < ި + < ީ + < ު + < ޫ + < ެ + < ޭ + < ޮ + < ޯ + < ް + < 'ߊ' + < 'ߋ' + < 'ߌ' + < 'ߍ' + < 'ߎ' + < 'ߏ' + < 'ߐ' + < 'ߑ' + < 'ߒ' + < 'ߓ' + < 'ߔ' + < 'ߕ' + < 'ߖ' + << 'ߨ' + < 'ߗ' + << 'ߩ' + < 'ߘ' + < 'ߙ' + << 'ߪ' + < 'ߚ' + < 'ߛ' + < 'ߜ' + < 'ߝ' + < 'ߞ' + < 'ߟ' + < 'ߠ' + < 'ߡ' + < 'ߢ' + < 'ߣ' + < 'ߤ' + < 'ߥ' + < 'ߦ' + < 'ߧ' + < 'ߴ' + < 'ߵ' + < ⴰ + < ⴱ + < ⴲ + < ⴳ + < ⴴ + < ⴵ + < ⴶ + < ⴷ + < ⴸ + < ⴹ + < ⴺ + < ⴻ + < ⴼ + < ⴽ + < ⴾ + < ⴿ + < ⵀ + < ⵁ + < ⵂ + < ⵃ + < ⵄ + < ⵅ + < ⵆ + < ⵇ + < ⵈ + < ⵉ + < ⵊ + < ⵋ + < ⵌ + < ⵍ + < ⵎ + < ⵏ + < ⵐ + < ⵑ + < ⵒ + < ⵓ + < ⵔ + < ⵕ + < ⵖ + < ⵗ + < ⵘ + < ⵙ + < ⵚ + < ⵛ + < ⵜ + < ⵝ + < ⵞ + < ⵟ + < ⵠ + < ⵡ + < ⵢ + < ⵣ + < ⵤ + < ⵥ + < ⵯ + < ሀ + < ሁ + < ሂ + < ሃ + < ሄ + < ህ + < ሆ + < ሇ + < ለ + < ሉ + < ሊ + < ላ + < ሌ + < ል + < ሎ + < ሏ + < ⶀ + < ሐ + < ሑ + < ሒ + < ሓ + < ሔ + < ሕ + < ሖ + < ሗ + < መ + < ሙ + < ሚ + < ማ + < ሜ + < ም + < ሞ + < ሟ + < ᎀ + < ᎁ + < ᎂ + < ᎃ + < ⶁ + < ሠ + < ሡ + < ሢ + < ሣ + < ሤ + < ሥ + < ሦ + < ሧ + < ረ + < ሩ + < ሪ + < ራ + < ሬ + < ር + < ሮ + < ሯ + < ⶂ + < ሰ + < ሱ + < ሲ + < ሳ + < ሴ + < ስ + < ሶ + < ሷ + < ⶃ + < ሸ + < ሹ + < ሺ + < ሻ + < ሼ + < ሽ + < ሾ + < ሿ + < ⶄ + < ቀ + < ቁ + < ቂ + < ቃ + < ቄ + < ቅ + < ቆ + < ቇ + < ቈ + < ቊ + < ቋ + < ቌ + < ቍ + < ቐ + < ቑ + < ቒ + < ቓ + < ቔ + < ቕ + < ቖ + < ቘ + < ቚ + < ቛ + < ቜ + < ቝ + < በ + < ቡ + < ቢ + < ባ + < ቤ + < ብ + < ቦ + < ቧ + < ᎄ + < ᎅ + < ᎆ + < ᎇ + < ⶅ + < ቨ + < ቩ + < ቪ + < ቫ + < ቬ + < ቭ + < ቮ + < ቯ + < ተ + < ቱ + < ቲ + < ታ + < ቴ + < ት + < ቶ + < ቷ + < ⶆ + < ቸ + < ቹ + < ቺ + < ቻ + < ቼ + < ች + < ቾ + < ቿ + < ⶇ + < ኀ + < ኁ + < ኂ + < ኃ + < ኄ + < ኅ + < ኆ + < ኇ + < ኈ + < ኊ + < ኋ + < ኌ + < ኍ + < ነ + < ኑ + < ኒ + < ና + < ኔ + < ን + < ኖ + < ኗ + < ⶈ + < ኘ + < ኙ + < ኚ + < ኛ + < ኜ + < ኝ + < ኞ + < ኟ + < ⶉ + < አ + < ኡ + < ኢ + < ኣ + < ኤ + < እ + < ኦ + < ኧ + < ⶊ + < ከ + < ኩ + < ኪ + < ካ + < ኬ + < ክ + < ኮ + < ኯ + < ኰ + < ኲ + < ኳ + < ኴ + < ኵ + < ኸ + < ኹ + < ኺ + < ኻ + < ኼ + < ኽ + < ኾ + < ዀ + < ዂ + < ዃ + < ዄ + < ዅ + < ወ + < ዉ + < ዊ + < ዋ + < ዌ + < ው + < ዎ + < ዏ + < ዐ + < ዑ + < ዒ + < ዓ + < ዔ + < ዕ + < ዖ + < ዘ + < ዙ + < ዚ + < ዛ + < ዜ + < ዝ + < ዞ + < ዟ + < ⶋ + < ዠ + < ዡ + < ዢ + < ዣ + < ዤ + < ዥ + < ዦ + < ዧ + < የ + < ዩ + < ዪ + < ያ + < ዬ + < ይ + < ዮ + < ዯ + < ደ + < ዱ + < ዲ + < ዳ + < ዴ + < ድ + < ዶ + < ዷ + < ⶌ + < ዸ + < ዹ + < ዺ + < ዻ + < ዼ + < ዽ + < ዾ + < ዿ + < ⶍ + < ጀ + < ጁ + < ጂ + < ጃ + < ጄ + < ጅ + < ጆ + < ጇ + < ⶎ + < ገ + < ጉ + < ጊ + < ጋ + < ጌ + < ግ + < ጎ + < ጏ + < ጐ + < ጒ + < ጓ + < ጔ + < ጕ + < ጘ + < ጙ + < ጚ + < ጛ + < ጜ + < ጝ + < ጞ + < ጟ + < ⶓ + < ⶔ + < ⶕ + < ⶖ + < ጠ + < ጡ + < ጢ + < ጣ + < ጤ + < ጥ + < ጦ + < ጧ + < ⶏ + < ጨ + < ጩ + < ጪ + < ጫ + < ጬ + < ጭ + < ጮ + < ጯ + < ⶐ + < ጰ + < ጱ + < ጲ + < ጳ + < ጴ + < ጵ + < ጶ + < ጷ + < ⶑ + < ጸ + < ጹ + < ጺ + < ጻ + < ጼ + < ጽ + < ጾ + < ጿ + < ፀ + < ፁ + < ፂ + < ፃ + < ፄ + < ፅ + < ፆ + < ፇ + < ፈ + < ፉ + < ፊ + < ፋ + < ፌ + < ፍ + < ፎ + < ፏ + < ᎈ + < ᎉ + < ᎊ + < ᎋ + < ፐ + < ፑ + < ፒ + < ፓ + < ፔ + < ፕ + < ፖ + < ፗ + < ᎌ + < ᎍ + < ᎎ + < ᎏ + < ⶒ + < ፘ + < ፙ + < ፚ + < ⶠ + < ⶡ + < ⶢ + < ⶣ + < ⶤ + < ⶥ + < ⶦ + < ⶨ + < ⶩ + < ⶪ + < ⶫ + < ⶬ + < ⶭ + < ⶮ + < ⶰ + < ⶱ + < ⶲ + < ⶳ + < ⶴ + < ⶵ + < ⶶ + < ⶸ + < ⶹ + < ⶺ + < ⶻ + < ⶼ + < ⶽ + < ⶾ + < ⷀ + < ⷁ + < ⷂ + < ⷃ + < ⷄ + < ⷅ + < ⷆ + < ⷈ + < ⷉ + < ⷊ + < ⷋ + < ⷌ + < ⷍ + < ⷎ + < ⷐ + < ⷑ + < ⷒ + < ⷓ + < ⷔ + < ⷕ + < ⷖ + < ⷘ + < ⷙ + < ⷚ + < ⷛ + < ⷜ + < ⷝ + < ⷞ + < ॐ + < ऄ + < अ + < आ + < इ + < ई + < उ + < ऊ + < ऋ + < ॠ + < ऌ + < ॡ + < ऍ + < ऎ + < ए + < ऐ + < ऑ + < ऒ + < ओ + < औ + < क + < ख + < ग + < 'ॻ' + < घ + < ङ + < च + < छ + < ज + < 'ॼ' + < झ + < ञ + < ट + < ठ + < ड + < 'ॾ' + < ढ + < ण + < त + < थ + < द + < ध + < न + < प + < फ + < ब + < 'ॿ' + < भ + < म + < य + < र + < ल + < ळ + < व + < श + < ष + < स + < ह + < ऽ + < ॽ + < ा + < ि + < ी + < ु + < ू + < ृ + < ॄ + < ॢ + < ॣ + < ॅ + < ॆ + < े + < ै + < ॉ + < ॊ + < ो + < ौ + < ् + < অ + < আ + < ই + < ঈ + < উ + < ঊ + < ঋ + < ৠ + < ঌ + < ৡ + < এ + < ঐ + < ও + < ঔ + < ক + < খ + < গ + < ঘ + < ঙ + < চ + < ছ + < জ + < ঝ + < ঞ + < ট + < ঠ + < ড + < ঢ + < ণ + < ত + <<< ৎ / ্ + < থ + < দ + < ধ + < ন + < প + < ফ + < ব + < ভ + < ম + < য + < র + < ৰ + < ল + < ৱ + < শ + < ষ + < স + < হ + < ঽ + < া + < ি + < ী + < ু + < ূ + < ৃ + < ৄ + < ৢ + < ৣ + < ে + < ৈ + < ো + < ৌ + < ্ + < ৗ + < ੴ + < ੳ + < ਉ + < ਊ + < ਓ + < ਅ + < ਆ + < ਐ + < ਔ + < ੲ + < ਇ + < ਈ + < ਏ + < ਸ + < ਹ + < ਕ + < ਖ + < ਗ + < ਘ + < ਙ + < ਚ + < ਛ + < ਜ + < ਝ + < ਞ + < ਟ + < ਠ + < ਡ + < ਢ + < ਣ + < ਤ + < ਥ + < ਦ + < ਧ + < ਨ + < ਪ + < ਫ + < ਬ + < ਭ + < ਮ + < ਯ + < ਰ + < ਲ + < ਵ + < ੜ + < ਾ + < ਿ + < ੀ + < ੁ + < ੂ + < ੇ + < ੈ + < ੋ + < ੌ + < ੍ + < ૐ + < અ + < આ + < ઇ + < ઈ + < ઉ + < ઊ + < ઋ + < ૠ + < ઌ + < ૡ + < ઍ + < એ + < ઐ + < ઑ + < ઓ + < ઔ + < ક + < ખ + < ગ + < ઘ + < ઙ + < ચ + < છ + < જ + < ઝ + < ઞ + < ટ + < ઠ + < ડ + < ઢ + < ણ + < ત + < થ + < દ + < ધ + < ન + < પ + < ફ + < બ + < ભ + < મ + < ય + < ર + < લ + < ળ + < વ + < શ + < ષ + < સ + < હ + < ઽ + < ા + < િ + < ી + < ુ + < ૂ + < ૃ + < ૄ + < ૢ + < ૣ + < ૅ + < ે + < ૈ + < ૉ + < ો + < ૌ + < ્ + < ଅ + < ଆ + < ଇ + < ଈ + < ଉ + < ଊ + < ଋ + < ୠ + < ଌ + < ୡ + < ଏ + < ଐ + < ଓ + < ଔ + < କ + < ଖ + < ଗ + < ଘ + < ଙ + < ଚ + < ଛ + < ଜ + < ଝ + < ଞ + < ଟ + < ଠ + < ଡ + < ଢ + < ଣ + < ତ + < ଥ + < ଦ + < ଧ + < ନ + < ପ + < ଫ + < ବ + < ଭ + < ମ + < ଯ + < ୟ + < ର + < ଲ + < ଳ + < ଵ + < ୱ + < ଶ + < ଷ + < ସ + < ହ + < ଽ + < ା + < ି + < ୀ + < ୁ + < ୂ + < ୃ + < େ + < ୈ + < ୋ + < ୌ + < ୍ + < ୖ + < ୗ + < ஃ + < அ + < ஆ + < இ + < ஈ + < உ + < ஊ + < எ + < ஏ + < ஐ + < ஒ + < ஓ + < ஔ + < க + < ங + < ச + < ஜ + < ஞ + < ட + < ண + < த + < ந + < ன + < ப + < ம + < ய + < ர + < ற + < ல + < ள + < ழ + < வ + < ஶ + < ஷ + < ஸ + < ஹ + < ா + < ி + < ீ + < ு + < ூ + < ெ + < ே + < ை + < ொ + < ோ + < ௌ + < ் + < ௗ + < అ + < ఆ + < ఇ + < ఈ + < ఉ + < ఊ + < ఋ + < ౠ + < ఌ + < ౡ + < ఎ + < ఏ + < ఐ + < ఒ + < ఓ + < ఔ + < క + < ఖ + < గ + < ఘ + < ఙ + < చ + < ఛ + < జ + < ఝ + < ఞ + < ట + < ఠ + < డ + < ఢ + < ణ + < త + < థ + < ద + < ధ + < న + < ప + < ఫ + < బ + < భ + < మ + < య + < ర + < ఱ + < ల + < ళ + < వ + < శ + < ష + < స + < హ + < ా + < ి + < ీ + < ు + < ూ + < ృ + < ౄ + < ె + < ే + < ై + < ొ + < ో + < ౌ + < ్ + < ౕ + < ౖ + < ಅ + < ಆ + < ಇ + < ಈ + < ಉ + < ಊ + < ಋ + < ೠ + < ಌ + < ೡ + < ಎ + < ಏ + < ಐ + < ಒ + < ಓ + < ಔ + < ಕ + < ಖ + < ಗ + < ಘ + < ಙ + < ಚ + < ಛ + < ಜ + < ಝ + < ಞ + < ಟ + < ಠ + < ಡ + < ಢ + < ಣ + < ತ + < ಥ + < ದ + < ಧ + < ನ + < ಪ + < ಫ + < ಬ + < ಭ + < ಮ + < ಯ + < ರ + < ಱ + < ಲ + < ವ + < ಶ + < ಷ + < ಸ + < ಹ + < ಳ + < ೞ + < ಽ + < ಾ + < ಿ + < ೀ + < ು + < ೂ + < ೃ + < ೄ + < 'ೢ' + < 'ೣ' + < ೆ + < ೇ + < ೈ + < ೊ + = ೊ + < ೋ + = ೋ + < ೌ + < ್ + < ೕ + < ೖ + < അ + < ആ + < ഇ + < ഈ + < ഉ + < ഊ + < ഋ + < ൠ + < ഌ + < ൡ + < എ + < ഏ + < ഐ + < ഒ + < ഓ + < ഔ + < ക + < ഖ + < ഗ + < ഘ + < ങ + < ച + < ഛ + < ജ + < ഝ + < ഞ + < ട + < ഠ + < ഡ + < ഢ + < ണ + < ത + < ഥ + < ദ + < ധ + < ന + < പ + < ഫ + < ബ + < ഭ + < മ + < യ + < ര + < റ + < ല + < ള + < ഴ + < വ + < ശ + < ഷ + < സ + < ഹ + < ാ + < ി + < ീ + < ു + < ൂ + < ൃ + < െ + < േ + < ൈ + < ൊ + < ോ + < ൌ + < ൗ + < ് + < අ + < ආ + < ඇ + < ඈ + < ඉ + < ඊ + < උ + < ඌ + < ඍ + < ඎ + < ඏ + < ඐ + < එ + < ඒ + < ඓ + < ඔ + < ඕ + < ඖ + < ක + < ඛ + < ග + < ඝ + < ඞ + < ඟ + < ච + < ඡ + < ජ + < ඣ + < ඤ + < ඥ + < ඦ + < ට + < ඨ + < ඩ + < ඪ + < ණ + < ඬ + < ත + < ථ + < ද + < ධ + < න + < ඳ + < ප + < ඵ + < බ + < භ + < ම + < ඹ + < ය + < ර + < ල + < ව + < ශ + < ෂ + < ස + < හ + < ළ + < ෆ + < ් + < ා + < ැ + < ෑ + < ි + < ී + < ු + < ූ + < ෘ + < ෙ + < ේ + < ෛ + < ො + = ො + < ෝ + = ෝ + < ෞ + < ෟ + < ෲ + < ෳ + < ꠀ + < ꠁ + < ꠂ + < ꠃ + < ꠄ + < ꠅ + < ꠆ + < ꠇ + < ꠈ + < ꠉ + < ꠊ + < ꠌ + < ꠍ + < ꠎ + < ꠏ + < ꠐ + < ꠑ + < ꠒ + < ꠓ + < ꠔ + < ꠕ + < ꠖ + < ꠗ + < ꠘ + < ꠙ + < ꠚ + < ꠛ + < ꠜ + < ꠝ + < ꠞ + < ꠟ + < ꠠ + < ꠡ + < ꠢ + < ꠣ + < ꠤ + < ꠥ + < ꠦ + < ꠧ + < 𐨀 + < 𐨁 + < 𐨂 + < 𐨃 + < 𐨅 + < 𐨆 + < 𐨌 + < 𐨐 + < 𐨑 + < 𐨒 + < 𐨓 + < 𐨕 + < 𐨖 + < 𐨗 + < 𐨙 + < 𐨚 + < 𐨛 + < 𐨜 + < 𐨝 + < 𐨞 + < 𐨟 + < 𐨠 + < 𐨡 + < 𐨢 + < 𐨣 + < 𐨤 + < 𐨥 + < 𐨦 + < 𐨧 + < 𐨨 + < 𐨩 + < 𐨪 + < 𐨫 + < 𐨬 + < 𐨭 + < 𐨮 + < 𐨯 + < 𐨰 + < 𐨱 + < 𐨲 + < 𐨳 + < 𐨿 + < ก + <<< เก / เ + <<< แก / แ + <<< โก / โ + <<< ใก / ใ + <<< ไก / ไ + < ข + <<< เข / เ + <<< แข / แ + <<< โข / โ + <<< ใข / ใ + <<< ไข / ไ + < ฃ + <<< เฃ / เ + <<< แฃ / แ + <<< โฃ / โ + <<< ใฃ / ใ + <<< ไฃ / ไ + < ค + <<< เค / เ + <<< แค / แ + <<< โค / โ + <<< ใค / ใ + <<< ไค / ไ + < ฅ + <<< เฅ / เ + <<< แฅ / แ + <<< โฅ / โ + <<< ใฅ / ใ + <<< ไฅ / ไ + < ฆ + <<< เฆ / เ + <<< แฆ / แ + <<< โฆ / โ + <<< ใฆ / ใ + <<< ไฆ / ไ + < ง + <<< เง / เ + <<< แง / แ + <<< โง / โ + <<< ใง / ใ + <<< ไง / ไ + < จ + <<< เจ / เ + <<< แจ / แ + <<< โจ / โ + <<< ใจ / ใ + <<< ไจ / ไ + < ฉ + <<< เฉ / เ + <<< แฉ / แ + <<< โฉ / โ + <<< ใฉ / ใ + <<< ไฉ / ไ + < ช + <<< เช / เ + <<< แช / แ + <<< โช / โ + <<< ใช / ใ + <<< ไช / ไ + < ซ + <<< เซ / เ + <<< แซ / แ + <<< โซ / โ + <<< ใซ / ใ + <<< ไซ / ไ + < ฌ + <<< เฌ / เ + <<< แฌ / แ + <<< โฌ / โ + <<< ใฌ / ใ + <<< ไฌ / ไ + < ญ + <<< เญ / เ + <<< แญ / แ + <<< โญ / โ + <<< ใญ / ใ + <<< ไญ / ไ + < ฎ + <<< เฎ / เ + <<< แฎ / แ + <<< โฎ / โ + <<< ใฎ / ใ + <<< ไฎ / ไ + < ฏ + <<< เฏ / เ + <<< แฏ / แ + <<< โฏ / โ + <<< ใฏ / ใ + <<< ไฏ / ไ + < ฐ + <<< เฐ / เ + <<< แฐ / แ + <<< โฐ / โ + <<< ใฐ / ใ + <<< ไฐ / ไ + < ฑ + <<< เฑ / เ + <<< แฑ / แ + <<< โฑ / โ + <<< ใฑ / ใ + <<< ไฑ / ไ + < ฒ + <<< เฒ / เ + <<< แฒ / แ + <<< โฒ / โ + <<< ใฒ / ใ + <<< ไฒ / ไ + < ณ + <<< เณ / เ + <<< แณ / แ + <<< โณ / โ + <<< ใณ / ใ + <<< ไณ / ไ + < ด + <<< เด / เ + <<< แด / แ + <<< โด / โ + <<< ใด / ใ + <<< ได / ไ + < ต + <<< เต / เ + <<< แต / แ + <<< โต / โ + <<< ใต / ใ + <<< ไต / ไ + < ถ + <<< เถ / เ + <<< แถ / แ + <<< โถ / โ + <<< ใถ / ใ + <<< ไถ / ไ + < ท + <<< เท / เ + <<< แท / แ + <<< โท / โ + <<< ใท / ใ + <<< ไท / ไ + < ธ + <<< เธ / เ + <<< แธ / แ + <<< โธ / โ + <<< ใธ / ใ + <<< ไธ / ไ + < น + <<< เน / เ + <<< แน / แ + <<< โน / โ + <<< ใน / ใ + <<< ไน / ไ + < บ + <<< เบ / เ + <<< แบ / แ + <<< โบ / โ + <<< ใบ / ใ + <<< ไบ / ไ + < ป + <<< เป / เ + <<< แป / แ + <<< โป / โ + <<< ใป / ใ + <<< ไป / ไ + < ผ + <<< เผ / เ + <<< แผ / แ + <<< โผ / โ + <<< ใผ / ใ + <<< ไผ / ไ + < ฝ + <<< เฝ / เ + <<< แฝ / แ + <<< โฝ / โ + <<< ใฝ / ใ + <<< ไฝ / ไ + < พ + <<< เพ / เ + <<< แพ / แ + <<< โพ / โ + <<< ใพ / ใ + <<< ไพ / ไ + < ฟ + <<< เฟ / เ + <<< แฟ / แ + <<< โฟ / โ + <<< ใฟ / ใ + <<< ไฟ / ไ + < ภ + <<< เภ / เ + <<< แภ / แ + <<< โภ / โ + <<< ใภ / ใ + <<< ไภ / ไ + < ม + <<< เม / เ + <<< แม / แ + <<< โม / โ + <<< ใม / ใ + <<< ไม / ไ + < ย + <<< เย / เ + <<< แย / แ + <<< โย / โ + <<< ใย / ใ + <<< ไย / ไ + < ร + <<< เร / เ + <<< แร / แ + <<< โร / โ + <<< ใร / ใ + <<< ไร / ไ + < ฤ + <<< เฤ / เ + <<< แฤ / แ + <<< โฤ / โ + <<< ใฤ / ใ + <<< ไฤ / ไ + < ล + <<< เล / เ + <<< แล / แ + <<< โล / โ + <<< ใล / ใ + <<< ไล / ไ + < ฦ + <<< เฦ / เ + <<< แฦ / แ + <<< โฦ / โ + <<< ใฦ / ใ + <<< ไฦ / ไ + < ว + <<< เว / เ + <<< แว / แ + <<< โว / โ + <<< ใว / ใ + <<< ไว / ไ + < ศ + <<< เศ / เ + <<< แศ / แ + <<< โศ / โ + <<< ใศ / ใ + <<< ไศ / ไ + < ษ + <<< เษ / เ + <<< แษ / แ + <<< โษ / โ + <<< ใษ / ใ + <<< ไษ / ไ + < ส + <<< เส / เ + <<< แส / แ + <<< โส / โ + <<< ใส / ใ + <<< ไส / ไ + < ห + <<< เห / เ + <<< แห / แ + <<< โห / โ + <<< ให / ใ + <<< ไห / ไ + < ฬ + <<< เฬ / เ + <<< แฬ / แ + <<< โฬ / โ + <<< ใฬ / ใ + <<< ไฬ / ไ + < อ + <<< เอ / เ + <<< แอ / แ + <<< โอ / โ + <<< ใอ / ใ + <<< ไอ / ไ + < ฮ + <<< เฮ / เ + <<< แฮ / แ + <<< โฮ / โ + <<< ใฮ / ใ + <<< ไฮ / ไ + < ฯ + < ะ + < ั + < า + < ำ + = ํา + < ิ + < ี + < ึ + < ื + < ุ + < ู + < ฺ + < เ + < แ + < โ + < ใ + < ไ + < ๅ + < ກ + <<< ເກ / ເ + <<< ແກ / ແ + <<< ໂກ / ໂ + <<< ໃກ / ໃ + <<< ໄກ / ໄ + < ຂ + <<< ເຂ / ເ + <<< ແຂ / ແ + <<< ໂຂ / ໂ + <<< ໃຂ / ໃ + <<< ໄຂ / ໄ + < ຄ + <<< ເຄ / ເ + <<< ແຄ / ແ + <<< ໂຄ / ໂ + <<< ໃຄ / ໃ + <<< ໄຄ / ໄ + < ງ + <<< ເງ / ເ + <<< ແງ / ແ + <<< ໂງ / ໂ + <<< ໃງ / ໃ + <<< ໄງ / ໄ + < ຈ + <<< ເຈ / ເ + <<< ແຈ / ແ + <<< ໂຈ / ໂ + <<< ໃຈ / ໃ + <<< ໄຈ / ໄ + < ຊ + <<< ເຊ / ເ + <<< ແຊ / ແ + <<< ໂຊ / ໂ + <<< ໃຊ / ໃ + <<< ໄຊ / ໄ + < ຍ + <<< ເຍ / ເ + <<< ແຍ / ແ + <<< ໂຍ / ໂ + <<< ໃຍ / ໃ + <<< ໄຍ / ໄ + < ດ + <<< ເດ / ເ + <<< ແດ / ແ + <<< ໂດ / ໂ + <<< ໃດ / ໃ + <<< ໄດ / ໄ + < ຕ + <<< ເຕ / ເ + <<< ແຕ / ແ + <<< ໂຕ / ໂ + <<< ໃຕ / ໃ + <<< ໄຕ / ໄ + < ຖ + <<< ເຖ / ເ + <<< ແຖ / ແ + <<< ໂຖ / ໂ + <<< ໃຖ / ໃ + <<< ໄຖ / ໄ + < ທ + <<< ເທ / ເ + <<< ແທ / ແ + <<< ໂທ / ໂ + <<< ໃທ / ໃ + <<< ໄທ / ໄ + < ນ + <<< ເນ / ເ + <<< ແນ / ແ + <<< ໂນ / ໂ + <<< ໃນ / ໃ + <<< ໄນ / ໄ + < ບ + <<< ເບ / ເ + <<< ແບ / ແ + <<< ໂບ / ໂ + <<< ໃບ / ໃ + <<< ໄບ / ໄ + < ປ + <<< ເປ / ເ + <<< ແປ / ແ + <<< ໂປ / ໂ + <<< ໃປ / ໃ + <<< ໄປ / ໄ + < ຜ + <<< ເຜ / ເ + <<< ແຜ / ແ + <<< ໂຜ / ໂ + <<< ໃຜ / ໃ + <<< ໄຜ / ໄ + < ຝ + <<< ເຝ / ເ + <<< ແຝ / ແ + <<< ໂຝ / ໂ + <<< ໃຝ / ໃ + <<< ໄຝ / ໄ + < ພ + <<< ເພ / ເ + <<< ແພ / ແ + <<< ໂພ / ໂ + <<< ໃພ / ໃ + <<< ໄພ / ໄ + < ຟ + <<< ເຟ / ເ + <<< ແຟ / ແ + <<< ໂຟ / ໂ + <<< ໃຟ / ໃ + <<< ໄຟ / ໄ + < ມ + <<< ເມ / ເ + <<< ແມ / ແ + <<< ໂມ / ໂ + <<< ໃມ / ໃ + <<< ໄມ / ໄ + < ຢ + <<< ເຢ / ເ + <<< ແຢ / ແ + <<< ໂຢ / ໂ + <<< ໃຢ / ໃ + <<< ໄຢ / ໄ + < ຣ + <<< ເຣ / ເ + <<< ແຣ / ແ + <<< ໂຣ / ໂ + <<< ໃຣ / ໃ + <<< ໄຣ / ໄ + < ລ + <<< ເລ / ເ + <<< ແລ / ແ + <<< ໂລ / ໂ + <<< ໃລ / ໃ + <<< ໄລ / ໄ + < ວ + <<< ເວ / ເ + <<< ແວ / ແ + <<< ໂວ / ໂ + <<< ໃວ / ໃ + <<< ໄວ / ໄ + < ສ + <<< ເສ / ເ + <<< ແສ / ແ + <<< ໂສ / ໂ + <<< ໃສ / ໃ + <<< ໄສ / ໄ + < ຫ + <<< ເຫ / ເ + <<< ແຫ / ແ + <<< ໂຫ / ໂ + <<< ໃຫ / ໃ + <<< ໄຫ / ໄ + <<< ໜ / ນ + <<< ເໜ / ນເ + <<< ແໜ / ນແ + <<< ໂໜ / ນໂ + <<< ໃໜ / ນໃ + <<< ໄໜ / ນໄ + <<< ໝ / ມ + <<< ເໝ / ມເ + <<< ແໝ / ມແ + <<< ໂໝ / ມໂ + <<< ໃໝ / ມໃ + <<< ໄໝ / ມໄ + < ອ + <<< ເອ / ເ + <<< ແອ / ແ + <<< ໂອ / ໂ + <<< ໃອ / ໃ + <<< ໄອ / ໄ + < ຮ + <<< ເຮ / ເ + <<< ແຮ / ແ + <<< ໂຮ / ໂ + <<< ໃຮ / ໃ + <<< ໄຮ / ໄ + < ຯ + < ະ + < ັ + < າ + < ຳ + = ໍາ + < ິ + < ີ + < ຶ + < ື + < ຸ + < ູ + < ົ + < ຼ + < ຽ + < ເ + < ແ + < ໂ + < ໃ + < ໄ + < ཀ + < ྐ + < ཁ + < ྑ + < ག + < ྒ + < ང + < ྔ + < ཅ + < ྕ + < ཆ + < ྖ + < ཇ + < ྗ + < ཉ + < ྙ + < ཊ + < ྚ + < ཋ + < ྛ + < ཌ + < ྜ + < ཎ + < ྞ + < ཏ + < ྟ + < ཐ + < ྠ + < ད + < ྡ + < ན + < ྣ + < པ + < ྤ + < ཕ + < ྥ + < བ + < ྦ + < མ + < ྨ + < ཙ + < ྩ + < ཚ + < ྪ + < ཛ + < ྫ + < ཝ + < ྭ + << ྺ + < ཞ + < ྮ + < ཟ + < ྯ + < འ + < ྰ + < ཡ + < ྱ + << ྻ + < ར + << ཪ + < ྲ + <<< ྲཱ / ཱ + << ྼ + < ལ + < ླ + <<< ླཱ / ཱ + < ཤ + < ྴ + < ཥ + < ྵ + < ས + < ྶ + < ཧ + < ྷ + < ཨ + <<< ༀ / ོཾ + < ྸ + < ྈ + < ྉ + < ྊ + < ྋ + < ཱ + < ི + < ཱི + < ྀ + < ཱྀ + < ུ + < ཱུ + < ྲྀ + < ཷ + = ྲཱྀ + = ྲཱྀ + < ླྀ + < ཹ + = ླཱྀ + = ླཱྀ + < ེ + < ཻ + < ོ + < ཽ + < ྄ + < 'ꡀ' + < 'ꡁ' + < 'ꡂ' + < 'ꡃ' + < 'ꡄ' + < 'ꡅ' + < 'ꡆ' + < 'ꡇ' + < 'ꡩ' + < 'ꡪ' + < 'ꡫ' + < 'ꡬ' + < 'ꡈ' + < 'ꡉ' + < 'ꡊ' + < 'ꡋ' + < 'ꡌ' + < 'ꡍ' + < 'ꡎ' + < 'ꡏ' + < 'ꡐ' + < 'ꡑ' + < 'ꡒ' + < 'ꡓ' + < 'ꡧ' + < 'ꡔ' + < 'ꡕ' + < 'ꡖ' + < 'ꡗ' + < 'ꡨ' + < 'ꡭ' + < 'ꡘ' + < 'ꡱ' + < 'ꡲ' + < 'ꡙ' + < 'ꡚ' + < 'ꡮ' + < 'ꡛ' + < 'ꡜ' + < 'ꡯ' + < 'ꡰ' + < 'ꡝ' + < 'ꡢ' + < 'ꡣ' + < 'ꡤ' + < 'ꡥ' + < 'ꡞ' + < 'ꡟ' + < 'ꡠ' + < 'ꡡ' + < 'ꡦ' + < 'ꡳ' + < ᤀ + < ᤁ + < ᤂ + < ᤃ + < ᤄ + < ᤅ + < ᤆ + < ᤇ + < ᤈ + < ᤉ + < ᤊ + < ᤋ + < ᤌ + < ᤍ + < ᤎ + < ᤏ + < ᤐ + < ᤑ + < ᤒ + < ᤓ + < ᤔ + < ᤕ + < ᤖ + < ᤗ + < ᤘ + < ᤙ + < ᤚ + < ᤛ + < ᤜ + < ᤠ + < ᤡ + < ᤢ + < ᤣ + < ᤤ + < ᤥ + < ᤦ + < ᤧ + < ᤨ + < ᤩ + < ᤪ + < ᤫ + < ᤰ + < ᤱ + < ᤲ + < ᤳ + < ᤴ + < ᤵ + < ᤶ + < ᤷ + < ᤸ + < ᜀ + < ᜁ + < ᜂ + < ᜃ + < ᜄ + < ᜅ + < ᜆ + < ᜇ + < ᜈ + < ᜉ + < ᜊ + < ᜋ + < ᜌ + < ᜎ + < ᜏ + < ᜐ + < ᜑ + < ᜒ + < ᜓ + < ᜔ + < ᜠ + < ᜡ + < ᜢ + < ᜣ + < ᜤ + < ᜥ + < ᜦ + < ᜧ + < ᜨ + < ᜩ + < ᜪ + < ᜫ + < ᜬ + < ᜭ + < ᜮ + < ᜯ + < ᜰ + < ᜱ + < ᜲ + < ᜳ + < ᜴ + < ᝀ + < ᝁ + < ᝂ + < ᝃ + < ᝄ + < ᝅ + < ᝆ + < ᝇ + < ᝈ + < ᝉ + < ᝊ + < ᝋ + < ᝌ + < ᝍ + < ᝎ + < ᝏ + < ᝐ + < ᝑ + < ᝒ + < ᝓ + < ᝠ + < ᝡ + < ᝢ + < ᝣ + < ᝤ + < ᝥ + < ᝦ + < ᝧ + < ᝨ + < ᝩ + < ᝪ + < ᝫ + < ᝬ + < ᝮ + < ᝯ + < ᝰ + < ᝲ + < ᝳ + < ᨀ + < ᨁ + < ᨂ + < ᨃ + < ᨄ + < ᨅ + < ᨆ + < ᨇ + < ᨈ + < ᨉ + < ᨊ + < ᨋ + < ᨌ + < ᨍ + < ᨎ + < ᨏ + < ᨐ + < ᨑ + < ᨒ + < ᨓ + < ᨔ + < ᨕ + < ᨖ + < ᨗ + < ᨘ + < ᨙ + < ᨚ + < ᨛ + < က + < ခ + < ဂ + < ဃ + < င + < စ + < ဆ + < ဇ + < ဈ + < ဉ + < ည + < ဋ + < ဌ + < ဍ + < ဎ + < ဏ + < တ + < ထ + < ဒ + < ဓ + < န + < ပ + < ဖ + < ဗ + < ဘ + < မ + < ယ + < ရ + < လ + < ဝ + < ၐ + < ၑ + < သ + < ဟ + < ဠ + < အ + < ဣ + < ဤ + < ဥ + < ဦ + < ဧ + < ဩ + < ဪ + < ၒ + < ၓ + < ၔ + < ၕ + < ာ + < ိ + < ီ + < ု + < ူ + < ေ + < ဲ + < ၖ + < ၗ + < ၘ + < ၙ + < ္ + < ក + < ខ + < គ + < ឃ + < ង + < ច + < ឆ + < ជ + < ឈ + < ញ + < ដ + < ឋ + < ឌ + < ឍ + < ណ + < ត + < ថ + < ទ + < ធ + < ន + < ប + < ផ + < ព + < ភ + < ម + < យ + < រ + < ល + < វ + < ឝ + < ឞ + < ស + < ហ + < ឡ + < អ + < ៜ + < ឣ + < ឤ + < ឥ + < ឦ + < ឧ + < ឨ + < ឩ + < ឪ + < ឫ + < ឬ + < ឭ + < ឮ + < ឯ + < ឰ + < ឱ + < ឲ + < ឳ + < '឴' + < '឵' + < ា + < ិ + < ី + < ឹ + < ឺ + < ុ + < ូ + < ួ + < ើ + < ឿ + < ៀ + < េ + < ែ + < ៃ + < ោ + < ៅ + < ្ + < ᥐ + < ᥑ + < ᥒ + < ᥓ + < ᥔ + < ᥕ + < ᥖ + < ᥗ + < ᥘ + < ᥙ + < ᥚ + < ᥛ + < ᥜ + < ᥝ + < ᥞ + < ᥟ + < ᥠ + < ᥡ + < ᥢ + < ᥣ + < ᥤ + < ᥥ + < ᥦ + < ᥧ + < ᥨ + < ᥩ + < ᥪ + < ᥫ + < ᥬ + < ᥭ + < ᥰ + < ᥱ + < ᥲ + < ᥳ + < ᥴ + < ᦀ + < ᦁ + < ᦂ + < ᦃ + < ᦄ + < ᦅ + < ᦆ + < ᦇ + < ᦈ + < ᦉ + < ᦊ + < ᦋ + < ᦌ + < ᦍ + < ᦎ + < ᦏ + < ᦐ + < ᦑ + < ᦒ + < ᦓ + < ᦔ + < ᦕ + < ᦖ + < ᦗ + < ᦘ + < ᦙ + < ᦚ + < ᦛ + < ᦜ + <<< ᧞ / ᦶ + <<< ᧟ / ᦶᧁ + < ᦝ + < ᦞ + < ᦟ + < ᦠ + < ᦡ + < ᦢ + < ᦣ + < ᦤ + < ᦥ + < ᦦ + < ᦧ + < ᦨ + < ᦩ + < ᦰ + < ᦱ + < ᦲ + < ᦳ + < ᦴ + < ᦵ + < ᦶ + < ᦷ + < ᦸ + < ᦹ + < ᦺ + < ᦻ + < ᦼ + < ᦽ + < ᦾ + < ᦿ + < ᧀ + < ᧁ + < ᧂ + < ᧃ + < ᧄ + < ᧅ + < ᧆ + < ᧇ + < ᧈ + < ᧉ + < 'ᬅ' + < 'ᬆ' + < 'ᬇ' + < 'ᬈ' + < 'ᬉ' + < 'ᬊ' + < 'ᬋ' + < 'ᬌ' + < 'ᬍ' + < 'ᬎ' + < 'ᬏ' + < 'ᬐ' + < 'ᬑ' + < 'ᬒ' + < 'ᬓ' + < 'ᭅ' + < 'ᭆ' + < 'ᬔ' + < 'ᬕ' + < 'ᬖ' + < 'ᬗ' + < 'ᬘ' + < 'ᬙ' + < 'ᬚ' + < 'ᬛ' + < 'ᬜ' + < 'ᬝ' + < 'ᬞ' + < 'ᬟ' + < 'ᬠ' + < 'ᬡ' + < 'ᬢ' + < 'ᭇ' + < 'ᬣ' + < 'ᬤ' + < 'ᬥ' + < 'ᬦ' + < 'ᬧ' + < 'ᭈ' + < 'ᬨ' + < 'ᬩ' + < 'ᬪ' + < 'ᬫ' + < 'ᬬ' + < 'ᬭ' + < 'ᬮ' + < 'ᬯ' + < 'ᭉ' + < 'ᬰ' + < 'ᬱ' + < 'ᬲ' + < 'ᭊ' + < 'ᭋ' + < 'ᬳ' + < 'ᬵ' + < 'ᬶ' + < 'ᬷ' + < 'ᬸ' + < 'ᬹ' + < 'ᬺ' + < 'ᬻ' + < 'ᬼ' + < 'ᬽ' + < 'ᬾ' + < 'ᬿ' + < 'ᭀ' + < 'ᭁ' + < 'ᭂ' + < 'ᭃ' + < '᭄' + < ᢀ + < ᢁ + < ᢂ + < ᢃ + < ᢄ + < ᢅ + < ᢆ + < ᡃ + < ᠠ + < ᢇ + < ᠡ + < ᡄ + < ᡝ + < ᠢ + < ᡅ + < ᡞ + < ᡳ + < ᢈ + < ᡟ + < ᠣ + < ᡆ + < ᠤ + < ᡇ + < ᡡ + < ᠥ + < ᡈ + < ᠦ + < ᡉ + < ᡠ + < ᠧ + < ᠨ + < ᠩ + < ᡊ + < ᡢ + < ᢊ + < ᢛ + < ᠪ + < ᡋ + < ᠫ + < ᡌ + < ᡦ + < ᠬ + < ᡍ + < ᠭ + < ᡎ + < ᡤ + < ᢚ + < ᡥ + < ᠮ + < ᡏ + < ᠯ + < ᠰ + < ᠱ + < ᡧ + < ᢜ + < ᢝ + < ᢢ + < ᢤ + < ᢥ + < ᠲ + < ᡐ + < ᡨ + < ᠳ + < ᡑ + < ᡩ + < ᠴ + < ᡒ + < ᡱ + < ᡜ + < ᢋ + < ᠵ + < ᡓ + < ᡪ + < ᡷ + < ᠶ + < ᡕ + < ᡲ + < ᠷ + < ᡵ + < ᠸ + < ᡖ + < ᠹ + < ᡫ + < ᡶ + < ᠺ + < ᡗ + < ᡣ + < ᡴ + < ᢉ + < ᠻ + < ᠼ + < ᡔ + < ᡮ + < ᠽ + < ᡯ + < ᡘ + < ᡬ + < ᠾ + < ᡙ + < ᡭ + < ᠿ + < ᡀ + < ᡁ + < ᡂ + < ᡚ + < ᡛ + < ᡰ + < ᢌ + < ᢞ + < ᢍ + < ᢎ + < ᢟ + < ᢏ + < ᢐ + < ᢘ + < ᢠ + < ᢑ + < ᢡ + < ᢒ + < ᢓ + < ᢨ + < ᢔ + < ᢣ + < ᢕ + < ᢙ + < ᢖ + < ᢗ + < ᢦ + < ᢧ + < ᢩ + < Ꭰ + < Ꭱ + < Ꭲ + < Ꭳ + < Ꭴ + < Ꭵ + < Ꭶ + < Ꭷ + < Ꭸ + < Ꭹ + < Ꭺ + < Ꭻ + < Ꭼ + < Ꭽ + < Ꭾ + < Ꭿ + < Ꮀ + < Ꮁ + < Ꮂ + < Ꮃ + < Ꮄ + < Ꮅ + < Ꮆ + < Ꮇ + < Ꮈ + < Ꮉ + < Ꮊ + < Ꮋ + < Ꮌ + < Ꮍ + < Ꮎ + < Ꮏ + < Ꮐ + < Ꮑ + < Ꮒ + < Ꮓ + < Ꮔ + < Ꮕ + < Ꮖ + < Ꮗ + < Ꮘ + < Ꮙ + < Ꮚ + < Ꮛ + < Ꮜ + < Ꮝ + < Ꮞ + < Ꮟ + < Ꮠ + < Ꮡ + < Ꮢ + < Ꮣ + < Ꮤ + < Ꮥ + < Ꮦ + < Ꮧ + < Ꮨ + < Ꮩ + < Ꮪ + < Ꮫ + < Ꮬ + < Ꮭ + < Ꮮ + < Ꮯ + < Ꮰ + < Ꮱ + < Ꮲ + < Ꮳ + < Ꮴ + < Ꮵ + < Ꮶ + < Ꮷ + < Ꮸ + < Ꮹ + < Ꮺ + < Ꮻ + < Ꮼ + < Ꮽ + < Ꮾ + < Ꮿ + < Ᏸ + < Ᏹ + < Ᏺ + < Ᏻ + < Ᏼ + < ᐁ + < ᐂ + < ᐃ + < ᐄ + < ᐅ + < ᐆ + < ᐇ + < ᐈ + < ᐉ + < ᐊ + < ᐋ + < ᐌ + < ᐍ + < ᐎ + < ᐏ + < ᐐ + < ᐑ + < ᐒ + < ᐓ + < ᐔ + < ᐕ + < ᐖ + < ᐗ + < ᐘ + < ᐙ + < ᐚ + < ᐛ + < ᐜ + < ᐝ + < ᐞ + < ᐟ + < ᐠ + < ᐡ + < ᐢ + < ᐣ + < ᐤ + < ᐥ + < ᐦ + < ᐧ + < ᐨ + < ᐩ + < ᐪ + < ᐫ + < ᐬ + < ᐭ + < ᐮ + < ᐯ + < ᐰ + < ᐱ + < ᐲ + < ᐳ + < ᐴ + < ᐵ + < ᐶ + < ᐷ + < ᐸ + < ᐹ + < ᐺ + < ᐻ + < ᐼ + < ᐽ + < ᐾ + < ᐿ + < ᑀ + < ᑁ + < ᑂ + < ᑃ + < ᑄ + < ᑅ + < ᑆ + < ᑇ + < ᑈ + < ᑉ + < ᑊ + < ᑋ + < ᑌ + < ᑍ + < ᑎ + < ᑏ + < ᑐ + < ᑑ + < ᑒ + < ᑓ + < ᑔ + < ᑕ + < ᑖ + < ᑗ + < ᑘ + < ᑙ + < ᑚ + < ᑛ + < ᑜ + < ᑝ + < ᑞ + < ᑟ + < ᑠ + < ᑡ + < ᑢ + < ᑣ + < ᑤ + < ᑥ + < ᑦ + < ᑧ + < ᑨ + < ᑩ + < ᑪ + < ᑫ + < ᑬ + < ᑭ + < ᑮ + < ᑯ + < ᑰ + < ᑱ + < ᑲ + < ᑳ + < ᑴ + < ᑵ + < ᑶ + < ᑷ + < ᑸ + < ᑹ + < ᑺ + < ᑻ + < ᑼ + < ᑽ + < ᑾ + < ᑿ + < ᒀ + < ᒁ + < ᒂ + < ᒃ + < ᒄ + < ᒅ + < ᒆ + < ᒇ + < ᒈ + < ᒉ + < ᒊ + < ᒋ + < ᒌ + < ᒍ + < ᒎ + < ᒏ + < ᒐ + < ᒑ + < ᒒ + < ᒓ + < ᒔ + < ᒕ + < ᒖ + < ᒗ + < ᒘ + < ᒙ + < ᒚ + < ᒛ + < ᒜ + < ᒝ + < ᒞ + < ᒟ + < ᒠ + < ᒡ + < ᒢ + < ᒣ + < ᒤ + < ᒥ + < ᒦ + < ᒧ + < ᒨ + < ᒩ + < ᒪ + < ᒫ + < ᒬ + < ᒭ + < ᒮ + < ᒯ + < ᒰ + < ᒱ + < ᒲ + < ᒳ + < ᒴ + < ᒵ + < ᒶ + < ᒷ + < ᒸ + < ᒹ + < ᒺ + < ᒻ + < ᒼ + < ᒽ + < ᒾ + < ᒿ + < ᓀ + < ᓁ + < ᓂ + < ᓃ + < ᓄ + < ᓅ + < ᓆ + < ᓇ + < ᓈ + < ᓉ + < ᓊ + < ᓋ + < ᓌ + < ᓍ + < ᓎ + < ᓏ + < ᓐ + < ᓑ + < ᓒ + < ᓓ + < ᓔ + < ᓕ + < ᓖ + < ᓗ + < ᓘ + < ᓙ + < ᓚ + < ᓛ + < ᓜ + < ᓝ + < ᓞ + < ᓟ + < ᓠ + < ᓡ + < ᓢ + < ᓣ + < ᓤ + < ᓥ + < ᓦ + < ᓧ + < ᓨ + < ᓩ + < ᓪ + < ᓫ + < ᓬ + < ᓭ + < ᓮ + < ᓯ + < ᓰ + < ᓱ + < ᓲ + < ᓳ + < ᓴ + < ᓵ + < ᓶ + < ᓷ + < ᓸ + < ᓹ + < ᓺ + < ᓻ + < ᓼ + < ᓽ + < ᓾ + < ᓿ + < ᔀ + < ᔁ + < ᔂ + < ᔃ + < ᔄ + < ᔅ + < ᔆ + < ᔇ + < ᔈ + < ᔉ + < ᔊ + < ᔋ + < ᔌ + < ᔍ + < ᔎ + < ᔏ + < ᔐ + < ᔑ + < ᔒ + < ᔓ + < ᔔ + < ᔕ + < ᔖ + < ᔗ + < ᔘ + < ᔙ + < ᔚ + < ᔛ + < ᔜ + < ᔝ + < ᔞ + < ᔟ + < ᔠ + < ᔡ + < ᔢ + < ᔣ + < ᔤ + < ᔥ + < ᔦ + < ᔧ + < ᔨ + < ᔩ + < ᔪ + < ᔫ + < ᔬ + < ᔭ + < ᔮ + < ᔯ + < ᔰ + < ᔱ + < ᔲ + < ᔳ + < ᔴ + < ᔵ + < ᔶ + < ᔷ + < ᔸ + < ᔹ + < ᔺ + < ᔻ + < ᔼ + < ᔽ + < ᔾ + < ᔿ + < ᕀ + < ᕁ + < ᕂ + < ᕃ + < ᕄ + < ᕅ + < ᕆ + < ᕇ + < ᕈ + < ᕉ + < ᕊ + < ᕋ + < ᕌ + < ᕍ + < ᕎ + < ᕏ + < ᕐ + < ᕑ + < ᕒ + < ᕓ + < ᕔ + < ᕕ + < ᕖ + < ᕗ + < ᕘ + < ᕙ + < ᕚ + < ᕛ + < ᕜ + < ᕝ + < ᕞ + < ᕟ + < ᕠ + < ᕡ + < ᕢ + < ᕣ + < ᕤ + < ᕥ + < ᕦ + < ᕧ + < ᕨ + < ᕩ + < ᕪ + < ᕫ + < ᕬ + < ᕭ + < ᕮ + < ᕯ + < ᕰ + < ᕱ + < ᕲ + < ᕳ + < ᕴ + < ᕵ + < ᕶ + < ᕷ + < ᕸ + < ᕹ + < ᕺ + < ᕻ + < ᕽ + < ᙯ + < ᕾ + < ᕿ + < ᖀ + < ᖁ + < ᖂ + < ᖃ + < ᖄ + < ᖅ + < ᖆ + < ᖇ + < ᖈ + < ᖉ + < ᖊ + < ᖋ + < ᖌ + < ᖍ + < ᙰ + < ᖎ + < ᖏ + < ᖐ + < ᖑ + < ᖒ + < ᖓ + < ᖔ + < ᖕ + < ᙱ + < ᙲ + < ᙳ + < ᙴ + < ᙵ + < ᙶ + < ᖖ + < ᖗ + < ᖘ + < ᖙ + < ᖚ + < ᖛ + < ᖜ + < ᖝ + < ᖞ + < ᖟ + < ᖠ + < ᖡ + < ᖢ + < ᖣ + < ᖤ + < ᖥ + < ᖦ + < ᕼ + < ᖧ + < ᖨ + < ᖩ + < ᖪ + < ᖫ + < ᖬ + < ᖭ + < ᖮ + < ᖯ + < ᖰ + < ᖱ + < ᖲ + < ᖳ + < ᖴ + < ᖵ + < ᖶ + < ᖷ + < ᖸ + < ᖹ + < ᖺ + < ᖻ + < ᖼ + < ᖽ + < ᖾ + < ᖿ + < ᗀ + < ᗁ + < ᗂ + < ᗃ + < ᗄ + < ᗅ + < ᗆ + < ᗇ + < ᗈ + < ᗉ + < ᗊ + < ᗋ + < ᗌ + < ᗍ + < ᗎ + < ᗏ + < ᗐ + < ᗑ + < ᗒ + < ᗓ + < ᗔ + < ᗕ + < ᗖ + < ᗗ + < ᗘ + < ᗙ + < ᗚ + < ᗛ + < ᗜ + < ᗝ + < ᗞ + < ᗟ + < ᗠ + < ᗡ + < ᗢ + < ᗣ + < ᗤ + < ᗥ + < ᗦ + < ᗧ + < ᗨ + < ᗩ + < ᗪ + < ᗫ + < ᗬ + < ᗭ + < ᗮ + < ᗯ + < ᗰ + < ᗱ + < ᗲ + < ᗳ + < ᗴ + < ᗵ + < ᗶ + < ᗷ + < ᗸ + < ᗹ + < ᗺ + < ᗻ + < ᗼ + < ᗽ + < ᗾ + < ᗿ + < ᘀ + < ᘁ + < ᘂ + < ᘃ + < ᘄ + < ᘅ + < ᘆ + < ᘇ + < ᘈ + < ᘉ + < ᘊ + < ᘋ + < ᘌ + < ᘍ + < ᘎ + < ᘏ + < ᘐ + < ᘑ + < ᘒ + < ᘓ + < ᘔ + < ᘕ + < ᘖ + < ᘗ + < ᘘ + < ᘙ + < ᘚ + < ᘛ + < ᘜ + < ᘝ + < ᘞ + < ᘟ + < ᘠ + < ᘡ + < ᘢ + < ᘣ + < ᘤ + < ᘥ + < ᘦ + < ᘧ + < ᘨ + < ᘩ + < ᘪ + < ᘫ + < ᘬ + < ᘭ + < ᘮ + < ᘯ + < ᘰ + < ᘱ + < ᘲ + < ᘳ + < ᘴ + < ᘵ + < ᘶ + < ᘷ + < ᘸ + < ᘹ + < ᘺ + < ᘻ + < ᘼ + < ᘽ + < ᘾ + < ᘿ + < ᙀ + < ᙁ + < ᙂ + < ᙃ + < ᙄ + < ᙅ + < ᙆ + < ᙇ + < ᙈ + < ᙉ + < ᙊ + < ᙋ + < ᙌ + < ᙍ + < ᙎ + < ᙏ + < ᙐ + < ᙑ + < ᙒ + < ᙓ + < ᙔ + < ᙕ + < ᙖ + < ᙗ + < ᙘ + < ᙙ + < ᙚ + < ᙛ + < ᙜ + < ᙝ + < ᙞ + < ᙟ + < ᙠ + < ᙡ + < ᙢ + < ᙣ + < ᙤ + < ᙥ + < ᙦ + < ᙧ + < ᙨ + < ᙩ + < ᙪ + < ᙫ + < ᙬ + < ᚁ + < ᚂ + < ᚃ + < ᚄ + < ᚅ + < ᚆ + < ᚇ + < ᚈ + < ᚉ + < ᚊ + < ᚋ + < ᚌ + < ᚍ + < ᚎ + < ᚏ + < ᚐ + < ᚑ + < ᚒ + < ᚓ + < ᚔ + < ᚕ + < ᚖ + < ᚗ + < ᚘ + < ᚙ + < ᚚ + < ᚠ + << ᚡ + < ᚢ + << ᚤ + << ᚥ + < ᚦ + <<< ᛰ / ᚦ + << ᚧ + < ᚨ + << ᚩ + << ᚬ + << ᚭ + << ᚮ + < ᚯ + < ᚰ + < ᚱ + < ᚲ + << ᚳ + << ᚴ + << ᚵ + << ᚶ + < ᚷ + < ᚹ + << ᛩ + < ᚺ + << ᚻ + << ᚼ + << ᚽ + < ᚾ + << ᚿ + << ᛀ + < ᛁ + << ᛂ + < ᛃ + << ᛄ + < ᛅ + <<< ᛮ / ᛚ + << ᛆ + < ᛇ + < ᛈ + << ᛕ + < ᛉ + < ᛊ + << ᛋ + << ᛪ + << ᛌ + << ᛍ + << ᛎ + < ᛏ + << ᛐ + << ᛑ + < ᛒ + << ᛓ + << ᛔ + < ᛖ + < ᛗ + << ᛘ + <<< ᛯ / ᛗ + << ᛙ + < ᛚ + << ᛛ + < ᛜ + << ᛝ + < ᛞ + < ᛟ + < ᚪ + < ᚫ + < ᚣ + < ᛠ + < ᛣ + < ᚸ + < ᛤ + < ᛡ + < ᛢ + < ᛥ + < ᛦ + << ᛧ + << ᛨ + < ᄀ + <<< ㄱ + <<< ㉠ + <<< ㉮ / ᅡ + <<< ᄀ + < ᄁ + <<< ㄲ + <<< ᄁ + < ᄂ + <<< ㄴ + <<< ㉡ + <<< ㉯ / ᅡ + <<< ᄂ + < ᄃ + <<< ㄷ + <<< ㉢ + <<< ㉰ / ᅡ + <<< ᄃ + < ᄄ + <<< ㄸ + <<< ᄄ + < ᄅ + <<< ㄹ + <<< ㉣ + <<< ㉱ / ᅡ + <<< ᄅ + < ᄆ + <<< ㅁ + <<< ㉤ + <<< ㉲ / ᅡ + <<< ᄆ + < ᄇ + <<< ㅂ + <<< ㉥ + <<< ㉳ / ᅡ + <<< ᄇ + < ᄈ + <<< ㅃ + <<< ᄈ + < ᄉ + <<< ㅅ + <<< ㉦ + <<< ㉴ / ᅡ + <<< ᄉ + < ᄊ + <<< ㅆ + <<< ᄊ + < ᄋ + <<< ㅇ + <<< ㉧ + <<< ㉵ / ᅡ + <<< ㉾ / ᅮ + <<< ᄋ + < ᄌ + <<< ㅈ + <<< ㉨ + <<< ㉶ / ᅡ + <<< ㉽ / ᅮ의 + <<< ᄌ + < ᄍ + <<< ㅉ + <<< ᄍ + < ᄎ + <<< ㅊ + <<< ㉩ + <<< ㉷ / ᅡ + <<< ㉼ / ᅡᆷ고 + <<< ᄎ + < ᄏ + <<< ㅋ + <<< ㉪ + <<< ㉸ / ᅡ + <<< ᄏ + < ᄐ + <<< ㅌ + <<< ㉫ + <<< ㉹ / ᅡ + <<< ᄐ + < ᄑ + <<< ㅍ + <<< ㉬ + <<< ㉺ / ᅡ + <<< ᄑ + < ᄒ + <<< ㅎ + <<< ㉭ + <<< ㉻ / ᅡ + <<< ᄒ + < ᄓ + < ᄔ + <<< ㅥ + < ᄕ + <<< ㅦ + < ᄖ + < ᄗ + < ᄘ + < ᄙ + < ᄚ + <<< ㅀ + <<< ᄚ + < ᄛ + < ᄜ + <<< ㅮ + < ᄝ + <<< ㅱ + < ᄞ + <<< ㅲ + < ᄟ + < ᄠ + <<< ㅳ + < ᄡ + <<< ㅄ + <<< ᄡ + < ᄢ + <<< ㅴ + < ᄣ + <<< ㅵ + < ᄤ + < ᄥ + < ᄦ + < ᄧ + <<< ㅶ + < ᄨ + < ᄩ + <<< ㅷ + < ᄪ + < ᄫ + <<< ㅸ + < ᄬ + <<< ㅹ + < ᄭ + <<< ㅺ + < ᄮ + <<< ㅻ + < ᄯ + <<< ㅼ + < ᄰ + < ᄱ + < ᄲ + <<< ㅽ + < ᄳ + < ᄴ + < ᄵ + < ᄶ + <<< ㅾ + < ᄷ + < ᄸ + < ᄹ + < ᄺ + < ᄻ + < ᄼ + < ᄽ + < ᄾ + < ᄿ + < ᅀ + <<< ㅿ + < ᅁ + < ᅂ + < ᅃ + < ᅄ + < ᅅ + < ᅆ + < ᅇ + <<< ㆀ + < ᅈ + < ᅉ + < ᅊ + < ᅋ + < ᅌ + <<< ㆁ + < ᅍ + < ᅎ + < ᅏ + < ᅐ + < ᅑ + < ᅒ + < ᅓ + < ᅔ + < ᅕ + < ᅖ + < ᅗ + <<< ㆄ + < ᅘ + <<< ㆅ + < ᅙ + <<< ㆆ + < ᅟ + < ᅠ + <<< ㅤ + <<< ᅠ + < ᅡ + <<< ㅏ + <<< ᅡ + < ᅢ + <<< ㅐ + <<< ᅢ + < ᅣ + <<< ㅑ + <<< ᅣ + < ᅤ + <<< ㅒ + <<< ᅤ + < ᅥ + <<< ㅓ + <<< ᅥ + < ᅦ + <<< ㅔ + <<< ᅦ + < ᅧ + <<< ㅕ + <<< ᅧ + < ᅨ + <<< ㅖ + <<< ᅨ + < ᅩ + <<< ㅗ + <<< ᅩ + < ᅪ + <<< ㅘ + <<< ᅪ + < ᅫ + <<< ㅙ + <<< ᅫ + < ᅬ + <<< ㅚ + <<< ᅬ + < ᅭ + <<< ㅛ + <<< ᅭ + < ᅮ + <<< ㅜ + <<< ᅮ + < ᅯ + <<< ㅝ + <<< ᅯ + < ᅰ + <<< ㅞ + <<< ᅰ + < ᅱ + <<< ㅟ + <<< ᅱ + < ᅲ + <<< ㅠ + <<< ᅲ + < ᅳ + <<< ㅡ + <<< ᅳ + < ᅴ + <<< ㅢ + <<< ᅴ + < ᅵ + <<< ㅣ + <<< ᅵ + < ᅶ + < ᅷ + < ᅸ + < ᅹ + < ᅺ + < ᅻ + < ᅼ + < ᅽ + < ᅾ + < ᅿ + < ᆀ + < ᆁ + < ᆂ + < ᆃ + < ᆄ + <<< ㆇ + < ᆅ + <<< ㆈ + < ᆆ + < ᆇ + < ᆈ + <<< ㆉ + < ᆉ + < ᆊ + < ᆋ + < ᆌ + < ᆍ + < ᆎ + < ᆏ + < ᆐ + < ᆑ + <<< ㆊ + < ᆒ + <<< ㆋ + < ᆓ + < ᆔ + <<< ㆌ + < ᆕ + < ᆖ + < ᆗ + < ᆘ + < ᆙ + < ᆚ + < ᆛ + < ᆜ + < ᆝ + < ᆞ + <<< ㆍ + < ᆟ + < ᆠ + < ᆡ + <<< ㆎ + < ᆢ + < ᆨ + < ᆩ + < ᆪ + <<< ㄳ + <<< ᆪ + < ᆫ + < ᆬ + <<< ㄵ + <<< ᆬ + < ᆭ + <<< ㄶ + <<< ᆭ + < ᆮ + < ᆯ + < ᆰ + <<< ㄺ + <<< ᆰ + < ᆱ + <<< ㄻ + <<< ᆱ + < ᆲ + <<< ㄼ + <<< ᆲ + < ᆳ + <<< ㄽ + <<< ᆳ + < ᆴ + <<< ㄾ + <<< ᆴ + < ᆵ + <<< ㄿ + <<< ᆵ + < ᆶ + < ᆷ + < ᆸ + < ᆹ + < ᆺ + < ᆻ + < ᆼ + < ᆽ + < ᆾ + < ᆿ + < ᇀ + < ᇁ + < ᇂ + < ᇃ + < ᇄ + < ᇅ + < ᇆ + < ᇇ + <<< ㅧ + < ᇈ + <<< ㅨ + < ᇉ + < ᇊ + < ᇋ + < ᇌ + <<< ㅩ + < ᇍ + < ᇎ + <<< ㅪ + < ᇏ + < ᇐ + < ᇑ + < ᇒ + < ᇓ + <<< ㅫ + < ᇔ + < ᇕ + < ᇖ + < ᇗ + <<< ㅬ + < ᇘ + < ᇙ + <<< ㅭ + < ᇚ + < ᇛ + < ᇜ + < ᇝ + <<< ㅯ + < ᇞ + < ᇟ + <<< ㅰ + < ᇠ + < ᇡ + < ᇢ + < ᇣ + < ᇤ + < ᇥ + < ᇦ + < ᇧ + < ᇨ + < ᇩ + < ᇪ + < ᇫ + < ᇬ + < ᇭ + < ᇮ + < ᇯ + < ᇰ + < ᇱ + <<< ㆂ + < ᇲ + <<< ㆃ + < ᇳ + < ᇴ + < ᇵ + < ᇶ + < ᇷ + < ᇸ + < ᇹ + < ぁ + <<< あ + <<< ァ + <<< ァ + <<< ア + <<< ア + <<< ㋐ + <<< ㌃ / ーる + <<< ㌀ / ぱーと + <<< ㌁ / るふあ + <<< ㌂ / んぺあ + < ぃ + <<< い + <<< ィ + <<< ィ + <<< イ + <<< イ + <<< ㋑ + <<< ㌄ / にんぐ + <<< ㌅ / んち + < ぅ + <<< う + <<< ゥ + <<< ゥ + <<< ウ + <<< ウ + <<< ㋒ + <<< ㌆ / おん + < ぇ + <<< え + <<< ェ + <<< ェ + <<< エ + <<< エ + <<< ㋓ + <<< ㌈ / ーかー + <<< ㌇ / すくーど + < ぉ + <<< お + <<< ォ + <<< ォ + <<< オ + <<< オ + <<< ㋔ + <<< ㌊ / ーむ + <<< ㌉ / んす + < ゕ + <<< か + <<< ヵ + <<< カ + <<< カ + <<< ㋕ + <<< ㌋ / いり + <<< ㌌ / らつと + <<< ㌍ / ろりー + <<< ㌎ / ゙ろん + <<< ㌏ / ゙んま + < き + <<< キ + <<< キ + <<< ㋖ + <<< ㌐ / ゙が + <<< ㌑ / ゙にー + <<< ㌒ / ゆりー + <<< ㌓ / ゙るだー + <<< ㌔ / ろ + <<< ㌕ / ろぐらむ + <<< ㌖ / ろめーとる + <<< ㌗ / ろわつと + < く + <<< ㇰ + <<< ク + <<< ク + <<< ㋗ + <<< ㌘ / ゙らむ + <<< ㌙ / ゙らむとん + <<< ㌚ / るぜいろ + <<< ㌛ / ろーね + < ゖ + <<< け + <<< ヶ + <<< ケ + <<< ケ + <<< ㋘ + <<< ㌜ / ーす + < こ + <<< コ + <<< コ + <<< ㋙ + <<< ヿ / と + <<< ㌞ / ーぽ + <<< ㌝ / るな + < さ + <<< サ + <<< サ + <<< ㋚ + <<< ㌟ / いくる + <<< ㌠ / んちーむ + < 〆 / め + <<< し + <<< ㇱ + <<< シ + <<< シ + <<< ㋛ + <<< ㌡ / りんぐ + < す + <<< ㇲ + <<< ス + <<< ス + <<< ㋜ + < せ + <<< セ + <<< セ + <<< ㋝ + <<< ㌢ / んち + <<< ㌣ / んと + < そ + <<< ソ + <<< ソ + <<< ㋞ + < た + <<< タ + <<< タ + <<< ㋟ + <<< ㌤ / ゙ーす + < ち + <<< チ + <<< チ + <<< ㋠ + < っ + <<< つ + <<< ッ + <<< ッ + <<< ツ + <<< ツ + <<< ㋡ + < て + <<< テ + <<< テ + <<< ㋢ + <<< ㌥ / ゙し + < と + <<< ㇳ + <<< ト + <<< ト + <<< ㋣ + <<< ㌦ / ゙る + <<< ㌧ / ん + < な + <<< ナ + <<< ナ + <<< ㋤ + <<< ㌨ / の + < に + <<< ニ + <<< ニ + <<< ㋥ + < ぬ + <<< ㇴ + <<< ヌ + <<< ヌ + <<< ㋦ + < ね + <<< ネ + <<< ネ + <<< ㋧ + < の + <<< ノ + <<< ノ + <<< ㋨ + <<< ㌩ / つと + < は + <<< ㇵ + <<< ハ + <<< ハ + <<< ㋩ + <<< ㌫ / ゚ーせんと + <<< ㌬ / ゚ーつ + <<< ㌭ / ゙ーれる + <<< ㌪ / いつ + < ひ + <<< ㇶ + <<< ヒ + <<< ヒ + <<< ㋪ + <<< ㌮ / ゚あすとる + <<< ㌯ / ゚くる + <<< ㌰ / ゚こ + <<< ㌱ / ゙る + < ふ + <<< ㇷ + <<< フ + <<< フ + <<< ㋫ + <<< ㌲ / あらつど + <<< ㌳ / いーと + <<< ㌴ / ゙つしえる + <<< ㌵ / らん + < へ + <<< ㇸ + <<< ヘ + <<< ヘ + <<< ㋬ + <<< ㌻ / ゚ーじ + <<< ㌼ / ゙ーた + <<< ㌶ / くたーる + <<< ㌷ / ゚そ + <<< ㌸ / ゚にひ + <<< ㌹ / るつ + <<< ㌺ / ゚んす + < ほ + <<< ㇹ + <<< ホ + <<< ホ + <<< ㋭ + <<< ㍁ / ーる + <<< ㍂ / ーん + <<< ㌽ / ゚いんと + <<< ㌾ / ゙ると + <<< ㌿ / ん + <<< ㍀ / ゚んど + < 〼 / す + <<< ま + <<< マ + <<< マ + <<< ㋮ + <<< ㍃ / いくろ + <<< ㍄ / いる + <<< ㍅ / つは + <<< ㍆ / るく + <<< ㍇ / んしよん + < み + <<< ミ + <<< ミ + <<< ㋯ + <<< ㍈ / くろん + <<< ㍉ / り + <<< ㍊ / りばーる + < む + <<< ㇺ + <<< ム + <<< ム + <<< ㋰ + < め + <<< メ + <<< メ + <<< ㋱ + <<< ㍍ / ーとる + <<< ㍋ / が + <<< ㍌ / がとん + < も + <<< モ + <<< モ + <<< ㋲ + < ゃ + <<< や + <<< ャ + <<< ャ + <<< ヤ + <<< ヤ + <<< ㋳ + <<< ㍎ / ーど + <<< ㍏ / ーる + < ゅ + <<< ゆ + <<< ュ + <<< ュ + <<< ユ + <<< ユ + <<< ㋴ + <<< ㍐ / あん + < ょ + <<< よ + <<< ョ + <<< ョ + <<< ヨ + <<< ヨ + <<< ㋵ + <<< ゟ / り + < ら + <<< ㇻ + <<< ラ + <<< ラ + <<< ㋶ + < り + <<< ㇼ + <<< リ + <<< リ + <<< ㋷ + <<< ㍑ / つとる + <<< ㍒ / ら + < る + <<< ㇽ + <<< ル + <<< ル + <<< ㋸ + <<< ㍔ / ーぶる + <<< ㍓ / ぴー + < れ + <<< ㇾ + <<< レ + <<< レ + <<< ㋹ + <<< ㍕ / む + <<< ㍖ / んとげん + < ろ + <<< ㇿ + <<< ロ + <<< ロ + <<< ㋺ + < ゎ + <<< わ + <<< ヮ + <<< ワ + <<< ワ + <<< ㋻ + <<< ㍗ / つと + < ゐ + <<< ヰ + <<< ㋼ + < ゑ + <<< ヱ + <<< ㋽ + < を + <<< ヲ + <<< ヲ + <<< ㋾ + < ん + <<< ン + <<< ン + < ㄅ + << ㆠ + < ㄆ + <<< ㆴ + < ㄇ + < ㄈ + < ㄪ + < ㄉ + < ㄊ + <<< ㆵ + < ㄋ + < ㄌ + < ㄍ + << ㆣ + < ㄎ + <<< ㆶ + < ㄫ + < ㆭ + < ㄏ + <<< ㆷ + < ㄐ + << ㆢ + < ㄑ + < ㄒ + < ㄬ + < ㄓ + < ㄔ + < ㄕ + < ㄖ + < ㄗ + << ㆡ + < ㄘ + < ㄙ + < ㄚ + << ㆩ + < ㄛ + << ㆧ + < ㆦ + < ㄜ + < ㄝ + < ㆤ + << ㆥ + < ㄞ + << ㆮ + < ㄟ + < ㄠ + << ㆯ + < ㄡ + < ㄢ + < ㄣ + < ㄤ + < ㆲ + < ㄥ + < ㆰ + < ㆱ + < ㆬ + < ㄦ + < ㄧ + << ㆪ + <<< ㆳ + < ㄨ + << ㆫ + << ㆨ + < ㄩ + < ꀀ + < ꀁ + < ꀂ + < ꀃ + < ꀄ + < ꀅ + < ꀆ + < ꀇ + < ꀈ + < ꀉ + < ꀊ + < ꀋ + < ꀌ + < ꀍ + < ꀎ + < ꀏ + < ꀐ + < ꀑ + < ꀒ + < ꀓ + < ꀔ + < ꀕ + < ꀖ + < ꀗ + < ꀘ + < ꀙ + < ꀚ + < ꀛ + < ꀜ + < ꀝ + < ꀞ + < ꀟ + < ꀠ + < ꀡ + < ꀢ + < ꀣ + < ꀤ + < ꀥ + < ꀦ + < ꀧ + < ꀨ + < ꀩ + < ꀪ + < ꀫ + < ꀬ + < ꀭ + < ꀮ + < ꀯ + < ꀰ + < ꀱ + < ꀲ + < ꀳ + < ꀴ + < ꀵ + < ꀶ + < ꀷ + < ꀸ + < ꀹ + < ꀺ + < ꀻ + < ꀼ + < ꀽ + < ꀾ + < ꀿ + < ꁀ + < ꁁ + < ꁂ + < ꁃ + < ꁄ + < ꁅ + < ꁆ + < ꁇ + < ꁈ + < ꁉ + < ꁊ + < ꁋ + < ꁌ + < ꁍ + < ꁎ + < ꁏ + < ꁐ + < ꁑ + < ꁒ + < ꁓ + < ꁔ + < ꁕ + < ꁖ + < ꁗ + < ꁘ + < ꁙ + < ꁚ + < ꁛ + < ꁜ + < ꁝ + < ꁞ + < ꁟ + < ꁠ + < ꁡ + < ꁢ + < ꁣ + < ꁤ + < ꁥ + < ꁦ + < ꁧ + < ꁨ + < ꁩ + < ꁪ + < ꁫ + < ꁬ + < ꁭ + < ꁮ + < ꁯ + < ꁰ + < ꁱ + < ꁲ + < ꁳ + < ꁴ + < ꁵ + < ꁶ + < ꁷ + < ꁸ + < ꁹ + < ꁺ + < ꁻ + < ꁼ + < ꁽ + < ꁾ + < ꁿ + < ꂀ + < ꂁ + < ꂂ + < ꂃ + < ꂄ + < ꂅ + < ꂆ + < ꂇ + < ꂈ + < ꂉ + < ꂊ + < ꂋ + < ꂌ + < ꂍ + < ꂎ + < ꂏ + < ꂐ + < ꂑ + < ꂒ + < ꂓ + < ꂔ + < ꂕ + < ꂖ + < ꂗ + < ꂘ + < ꂙ + < ꂚ + < ꂛ + < ꂜ + < ꂝ + < ꂞ + < ꂟ + < ꂠ + < ꂡ + < ꂢ + < ꂣ + < ꂤ + < ꂥ + < ꂦ + < ꂧ + < ꂨ + < ꂩ + < ꂪ + < ꂫ + < ꂬ + < ꂭ + < ꂮ + < ꂯ + < ꂰ + < ꂱ + < ꂲ + < ꂳ + < ꂴ + < ꂵ + < ꂶ + < ꂷ + < ꂸ + < ꂹ + < ꂺ + < ꂻ + < ꂼ + < ꂽ + < ꂾ + < ꂿ + < ꃀ + < ꃁ + < ꃂ + < ꃃ + < ꃄ + < ꃅ + < ꃆ + < ꃇ + < ꃈ + < ꃉ + < ꃊ + < ꃋ + < ꃌ + < ꃍ + < ꃎ + < ꃏ + < ꃐ + < ꃑ + < ꃒ + < ꃓ + < ꃔ + < ꃕ + < ꃖ + < ꃗ + < ꃘ + < ꃙ + < ꃚ + < ꃛ + < ꃜ + < ꃝ + < ꃞ + < ꃟ + < ꃠ + < ꃡ + < ꃢ + < ꃣ + < ꃤ + < ꃥ + < ꃦ + < ꃧ + < ꃨ + < ꃩ + < ꃪ + < ꃫ + < ꃬ + < ꃭ + < ꃮ + < ꃯ + < ꃰ + < ꃱ + < ꃲ + < ꃳ + < ꃴ + < ꃵ + < ꃶ + < ꃷ + < ꃸ + < ꃹ + < ꃺ + < ꃻ + < ꃼ + < ꃽ + < ꃾ + < ꃿ + < ꄀ + < ꄁ + < ꄂ + < ꄃ + < ꄄ + < ꄅ + < ꄆ + < ꄇ + < ꄈ + < ꄉ + < ꄊ + < ꄋ + < ꄌ + < ꄍ + < ꄎ + < ꄏ + < ꄐ + < ꄑ + < ꄒ + < ꄓ + < ꄔ + < ꄕ + < ꄖ + < ꄗ + < ꄘ + < ꄙ + < ꄚ + < ꄛ + < ꄜ + < ꄝ + < ꄞ + < ꄟ + < ꄠ + < ꄡ + < ꄢ + < ꄣ + < ꄤ + < ꄥ + < ꄦ + < ꄧ + < ꄨ + < ꄩ + < ꄪ + < ꄫ + < ꄬ + < ꄭ + < ꄮ + < ꄯ + < ꄰ + < ꄱ + < ꄲ + < ꄳ + < ꄴ + < ꄵ + < ꄶ + < ꄷ + < ꄸ + < ꄹ + < ꄺ + < ꄻ + < ꄼ + < ꄽ + < ꄾ + < ꄿ + < ꅀ + < ꅁ + < ꅂ + < ꅃ + < ꅄ + < ꅅ + < ꅆ + < ꅇ + < ꅈ + < ꅉ + < ꅊ + < ꅋ + < ꅌ + < ꅍ + < ꅎ + < ꅏ + < ꅐ + < ꅑ + < ꅒ + < ꅓ + < ꅔ + < ꅕ + < ꅖ + < ꅗ + < ꅘ + < ꅙ + < ꅚ + < ꅛ + < ꅜ + < ꅝ + < ꅞ + < ꅟ + < ꅠ + < ꅡ + < ꅢ + < ꅣ + < ꅤ + < ꅥ + < ꅦ + < ꅧ + < ꅨ + < ꅩ + < ꅪ + < ꅫ + < ꅬ + < ꅭ + < ꅮ + < ꅯ + < ꅰ + < ꅱ + < ꅲ + < ꅳ + < ꅴ + < ꅵ + < ꅶ + < ꅷ + < ꅸ + < ꅹ + < ꅺ + < ꅻ + < ꅼ + < ꅽ + < ꅾ + < ꅿ + < ꆀ + < ꆁ + < ꆂ + < ꆃ + < ꆄ + < ꆅ + < ꆆ + < ꆇ + < ꆈ + < ꆉ + < ꆊ + < ꆋ + < ꆌ + < ꆍ + < ꆎ + < ꆏ + < ꆐ + < ꆑ + < ꆒ + < ꆓ + < ꆔ + < ꆕ + < ꆖ + < ꆗ + < ꆘ + < ꆙ + < ꆚ + < ꆛ + < ꆜ + < ꆝ + < ꆞ + < ꆟ + < ꆠ + < ꆡ + < ꆢ + < ꆣ + < ꆤ + < ꆥ + < ꆦ + < ꆧ + < ꆨ + < ꆩ + < ꆪ + < ꆫ + < ꆬ + < ꆭ + < ꆮ + < ꆯ + < ꆰ + < ꆱ + < ꆲ + < ꆳ + < ꆴ + < ꆵ + < ꆶ + < ꆷ + < ꆸ + < ꆹ + < ꆺ + < ꆻ + < ꆼ + < ꆽ + < ꆾ + < ꆿ + < ꇀ + < ꇁ + < ꇂ + < ꇃ + < ꇄ + < ꇅ + < ꇆ + < ꇇ + < ꇈ + < ꇉ + < ꇊ + < ꇋ + < ꇌ + < ꇍ + < ꇎ + < ꇏ + < ꇐ + < ꇑ + < ꇒ + < ꇓ + < ꇔ + < ꇕ + < ꇖ + < ꇗ + < ꇘ + < ꇙ + < ꇚ + < ꇛ + < ꇜ + < ꇝ + < ꇞ + < ꇟ + < ꇠ + < ꇡ + < ꇢ + < ꇣ + < ꇤ + < ꇥ + < ꇦ + < ꇧ + < ꇨ + < ꇩ + < ꇪ + < ꇫ + < ꇬ + < ꇭ + < ꇮ + < ꇯ + < ꇰ + < ꇱ + < ꇲ + < ꇳ + < ꇴ + < ꇵ + < ꇶ + < ꇷ + < ꇸ + < ꇹ + < ꇺ + < ꇻ + < ꇼ + < ꇽ + < ꇾ + < ꇿ + < ꈀ + < ꈁ + < ꈂ + < ꈃ + < ꈄ + < ꈅ + < ꈆ + < ꈇ + < ꈈ + < ꈉ + < ꈊ + < ꈋ + < ꈌ + < ꈍ + < ꈎ + < ꈏ + < ꈐ + < ꈑ + < ꈒ + < ꈓ + < ꈔ + < ꈕ + < ꈖ + < ꈗ + < ꈘ + < ꈙ + < ꈚ + < ꈛ + < ꈜ + < ꈝ + < ꈞ + < ꈟ + < ꈠ + < ꈡ + < ꈢ + < ꈣ + < ꈤ + < ꈥ + < ꈦ + < ꈧ + < ꈨ + < ꈩ + < ꈪ + < ꈫ + < ꈬ + < ꈭ + < ꈮ + < ꈯ + < ꈰ + < ꈱ + < ꈲ + < ꈳ + < ꈴ + < ꈵ + < ꈶ + < ꈷ + < ꈸ + < ꈹ + < ꈺ + < ꈻ + < ꈼ + < ꈽ + < ꈾ + < ꈿ + < ꉀ + < ꉁ + < ꉂ + < ꉃ + < ꉄ + < ꉅ + < ꉆ + < ꉇ + < ꉈ + < ꉉ + < ꉊ + < ꉋ + < ꉌ + < ꉍ + < ꉎ + < ꉏ + < ꉐ + < ꉑ + < ꉒ + < ꉓ + < ꉔ + < ꉕ + < ꉖ + < ꉗ + < ꉘ + < ꉙ + < ꉚ + < ꉛ + < ꉜ + < ꉝ + < ꉞ + < ꉟ + < ꉠ + < ꉡ + < ꉢ + < ꉣ + < ꉤ + < ꉥ + < ꉦ + < ꉧ + < ꉨ + < ꉩ + < ꉪ + < ꉫ + < ꉬ + < ꉭ + < ꉮ + < ꉯ + < ꉰ + < ꉱ + < ꉲ + < ꉳ + < ꉴ + < ꉵ + < ꉶ + < ꉷ + < ꉸ + < ꉹ + < ꉺ + < ꉻ + < ꉼ + < ꉽ + < ꉾ + < ꉿ + < ꊀ + < ꊁ + < ꊂ + < ꊃ + < ꊄ + < ꊅ + < ꊆ + < ꊇ + < ꊈ + < ꊉ + < ꊊ + < ꊋ + < ꊌ + < ꊍ + < ꊎ + < ꊏ + < ꊐ + < ꊑ + < ꊒ + < ꊓ + < ꊔ + < ꊕ + < ꊖ + < ꊗ + < ꊘ + < ꊙ + < ꊚ + < ꊛ + < ꊜ + < ꊝ + < ꊞ + < ꊟ + < ꊠ + < ꊡ + < ꊢ + < ꊣ + < ꊤ + < ꊥ + < ꊦ + < ꊧ + < ꊨ + < ꊩ + < ꊪ + < ꊫ + < ꊬ + < ꊭ + < ꊮ + < ꊯ + < ꊰ + < ꊱ + < ꊲ + < ꊳ + < ꊴ + < ꊵ + < ꊶ + < ꊷ + < ꊸ + < ꊹ + < ꊺ + < ꊻ + < ꊼ + < ꊽ + < ꊾ + < ꊿ + < ꋀ + < ꋁ + < ꋂ + < ꋃ + < ꋄ + < ꋅ + < ꋆ + < ꋇ + < ꋈ + < ꋉ + < ꋊ + < ꋋ + < ꋌ + < ꋍ + < ꋎ + < ꋏ + < ꋐ + < ꋑ + < ꋒ + < ꋓ + < ꋔ + < ꋕ + < ꋖ + < ꋗ + < ꋘ + < ꋙ + < ꋚ + < ꋛ + < ꋜ + < ꋝ + < ꋞ + < ꋟ + < ꋠ + < ꋡ + < ꋢ + < ꋣ + < ꋤ + < ꋥ + < ꋦ + < ꋧ + < ꋨ + < ꋩ + < ꋪ + < ꋫ + < ꋬ + < ꋭ + < ꋮ + < ꋯ + < ꋰ + < ꋱ + < ꋲ + < ꋳ + < ꋴ + < ꋵ + < ꋶ + < ꋷ + < ꋸ + < ꋹ + < ꋺ + < ꋻ + < ꋼ + < ꋽ + < ꋾ + < ꋿ + < ꌀ + < ꌁ + < ꌂ + < ꌃ + < ꌄ + < ꌅ + < ꌆ + < ꌇ + < ꌈ + < ꌉ + < ꌊ + < ꌋ + < ꌌ + < ꌍ + < ꌎ + < ꌏ + < ꌐ + < ꌑ + < ꌒ + < ꌓ + < ꌔ + < ꌕ + < ꌖ + < ꌗ + < ꌘ + < ꌙ + < ꌚ + < ꌛ + < ꌜ + < ꌝ + < ꌞ + < ꌟ + < ꌠ + < ꌡ + < ꌢ + < ꌣ + < ꌤ + < ꌥ + < ꌦ + < ꌧ + < ꌨ + < ꌩ + < ꌪ + < ꌫ + < ꌬ + < ꌭ + < ꌮ + < ꌯ + < ꌰ + < ꌱ + < ꌲ + < ꌳ + < ꌴ + < ꌵ + < ꌶ + < ꌷ + < ꌸ + < ꌹ + < ꌺ + < ꌻ + < ꌼ + < ꌽ + < ꌾ + < ꌿ + < ꍀ + < ꍁ + < ꍂ + < ꍃ + < ꍄ + < ꍅ + < ꍆ + < ꍇ + < ꍈ + < ꍉ + < ꍊ + < ꍋ + < ꍌ + < ꍍ + < ꍎ + < ꍏ + < ꍐ + < ꍑ + < ꍒ + < ꍓ + < ꍔ + < ꍕ + < ꍖ + < ꍗ + < ꍘ + < ꍙ + < ꍚ + < ꍛ + < ꍜ + < ꍝ + < ꍞ + < ꍟ + < ꍠ + < ꍡ + < ꍢ + < ꍣ + < ꍤ + < ꍥ + < ꍦ + < ꍧ + < ꍨ + < ꍩ + < ꍪ + < ꍫ + < ꍬ + < ꍭ + < ꍮ + < ꍯ + < ꍰ + < ꍱ + < ꍲ + < ꍳ + < ꍴ + < ꍵ + < ꍶ + < ꍷ + < ꍸ + < ꍹ + < ꍺ + < ꍻ + < ꍼ + < ꍽ + < ꍾ + < ꍿ + < ꎀ + < ꎁ + < ꎂ + < ꎃ + < ꎄ + < ꎅ + < ꎆ + < ꎇ + < ꎈ + < ꎉ + < ꎊ + < ꎋ + < ꎌ + < ꎍ + < ꎎ + < ꎏ + < ꎐ + < ꎑ + < ꎒ + < ꎓ + < ꎔ + < ꎕ + < ꎖ + < ꎗ + < ꎘ + < ꎙ + < ꎚ + < ꎛ + < ꎜ + < ꎝ + < ꎞ + < ꎟ + < ꎠ + < ꎡ + < ꎢ + < ꎣ + < ꎤ + < ꎥ + < ꎦ + < ꎧ + < ꎨ + < ꎩ + < ꎪ + < ꎫ + < ꎬ + < ꎭ + < ꎮ + < ꎯ + < ꎰ + < ꎱ + < ꎲ + < ꎳ + < ꎴ + < ꎵ + < ꎶ + < ꎷ + < ꎸ + < ꎹ + < ꎺ + < ꎻ + < ꎼ + < ꎽ + < ꎾ + < ꎿ + < ꏀ + < ꏁ + < ꏂ + < ꏃ + < ꏄ + < ꏅ + < ꏆ + < ꏇ + < ꏈ + < ꏉ + < ꏊ + < ꏋ + < ꏌ + < ꏍ + < ꏎ + < ꏏ + < ꏐ + < ꏑ + < ꏒ + < ꏓ + < ꏔ + < ꏕ + < ꏖ + < ꏗ + < ꏘ + < ꏙ + < ꏚ + < ꏛ + < ꏜ + < ꏝ + < ꏞ + < ꏟ + < ꏠ + < ꏡ + < ꏢ + < ꏣ + < ꏤ + < ꏥ + < ꏦ + < ꏧ + < ꏨ + < ꏩ + < ꏪ + < ꏫ + < ꏬ + < ꏭ + < ꏮ + < ꏯ + < ꏰ + < ꏱ + < ꏲ + < ꏳ + < ꏴ + < ꏵ + < ꏶ + < ꏷ + < ꏸ + < ꏹ + < ꏺ + < ꏻ + < ꏼ + < ꏽ + < ꏾ + < ꏿ + < ꐀ + < ꐁ + < ꐂ + < ꐃ + < ꐄ + < ꐅ + < ꐆ + < ꐇ + < ꐈ + < ꐉ + < ꐊ + < ꐋ + < ꐌ + < ꐍ + < ꐎ + < ꐏ + < ꐐ + < ꐑ + < ꐒ + < ꐓ + < ꐔ + < ꐕ + < ꐖ + < ꐗ + < ꐘ + < ꐙ + < ꐚ + < ꐛ + < ꐜ + < ꐝ + < ꐞ + < ꐟ + < ꐠ + < ꐡ + < ꐢ + < ꐣ + < ꐤ + < ꐥ + < ꐦ + < ꐧ + < ꐨ + < ꐩ + < ꐪ + < ꐫ + < ꐬ + < ꐭ + < ꐮ + < ꐯ + < ꐰ + < ꐱ + < ꐲ + < ꐳ + < ꐴ + < ꐵ + < ꐶ + < ꐷ + < ꐸ + < ꐹ + < ꐺ + < ꐻ + < ꐼ + < ꐽ + < ꐾ + < ꐿ + < ꑀ + < ꑁ + < ꑂ + < ꑃ + < ꑄ + < ꑅ + < ꑆ + < ꑇ + < ꑈ + < ꑉ + < ꑊ + < ꑋ + < ꑌ + < ꑍ + < ꑎ + < ꑏ + < ꑐ + < ꑑ + < ꑒ + < ꑓ + < ꑔ + < ꑕ + < ꑖ + < ꑗ + < ꑘ + < ꑙ + < ꑚ + < ꑛ + < ꑜ + < ꑝ + < ꑞ + < ꑟ + < ꑠ + < ꑡ + < ꑢ + < ꑣ + < ꑤ + < ꑥ + < ꑦ + < ꑧ + < ꑨ + < ꑩ + < ꑪ + < ꑫ + < ꑬ + < ꑭ + < ꑮ + < ꑯ + < ꑰ + < ꑱ + < ꑲ + < ꑳ + < ꑴ + < ꑵ + < ꑶ + < ꑷ + < ꑸ + < ꑹ + < ꑺ + < ꑻ + < ꑼ + < ꑽ + < ꑾ + < ꑿ + < ꒀ + < ꒁ + < ꒂ + < ꒃ + < ꒄ + < ꒅ + < ꒆ + < ꒇ + < ꒈ + < ꒉ + < ꒊ + < ꒋ + < ꒌ + < 𐌀 + < 𐌁 + < 𐌂 + < 𐌃 + < 𐌄 + < 𐌅 + < 𐌆 + < 𐌇 + < 𐌈 + < 𐌉 + < 𐌊 + < 𐌋 + < 𐌌 + < 𐌍 + < 𐌎 + < 𐌏 + < 𐌐 + < 𐌑 + < 𐌒 + < 𐌓 + < 𐌔 + < 𐌕 + < 𐌖 + < 𐌗 + < 𐌘 + < 𐌙 + < 𐌚 + < 𐌛 + < 𐌜 + < 𐌝 + < 𐌞 + < 𐌰 + < 𐌱 + < 𐌲 + < 𐌳 + < 𐌴 + < 𐌵 + < 𐌶 + < 𐌷 + < 𐌸 + < 𐌹 + < 𐌺 + < 𐌻 + < 𐌼 + < 𐌽 + < 𐌾 + < 𐌿 + < 𐍀 + < 𐍁 + < 𐍂 + < 𐍃 + < 𐍄 + < 𐍅 + < 𐍆 + < 𐍇 + < 𐍈 + < 𐍉 + < 𐍊 + < 𐐨 + <<< 𐐀 + < 𐐩 + <<< 𐐁 + < 𐐪 + <<< 𐐂 + < 𐐫 + <<< 𐐃 + < 𐐬 + <<< 𐐄 + < 𐐭 + <<< 𐐅 + < 𐐮 + <<< 𐐆 + < 𐐯 + <<< 𐐇 + < 𐐰 + <<< 𐐈 + < 𐐱 + <<< 𐐉 + < 𐐲 + <<< 𐐊 + < 𐐳 + <<< 𐐋 + < 𐐴 + <<< 𐐌 + < 𐐵 + <<< 𐐍 + < 𐐶 + <<< 𐐎 + < 𐐷 + <<< 𐐏 + < 𐐸 + <<< 𐐐 + < 𐐹 + <<< 𐐑 + < 𐐺 + <<< 𐐒 + < 𐐻 + <<< 𐐓 + < 𐐼 + <<< 𐐔 + < 𐐽 + <<< 𐐕 + < 𐐾 + <<< 𐐖 + < 𐐿 + <<< 𐐗 + < 𐑀 + <<< 𐐘 + < 𐑁 + <<< 𐐙 + < 𐑂 + <<< 𐐚 + < 𐑃 + <<< 𐐛 + < 𐑄 + <<< 𐐜 + < 𐑅 + <<< 𐐝 + < 𐑆 + <<< 𐐞 + < 𐑇 + <<< 𐐟 + < 𐑈 + <<< 𐐠 + < 𐑉 + <<< 𐐡 + < 𐑊 + <<< 𐐢 + < 𐑋 + <<< 𐐣 + < 𐑌 + <<< 𐐤 + < 𐑍 + <<< 𐐥 + < 𐑎 + <<< 𐐦 + < 𐑏 + <<< 𐐧 + < 𐑐 + < 𐑑 + < 𐑒 + < 𐑓 + < 𐑔 + < 𐑕 + < 𐑖 + < 𐑗 + < 𐑘 + < 𐑙 + < 𐑚 + < 𐑛 + < 𐑜 + < 𐑝 + < 𐑞 + < 𐑟 + < 𐑠 + < 𐑡 + < 𐑢 + < 𐑣 + < 𐑤 + < 𐑥 + < 𐑦 + < 𐑧 + < 𐑨 + < 𐑩 + < 𐑪 + < 𐑫 + < 𐑬 + < 𐑭 + < 𐑮 + < 𐑯 + < 𐑰 + < 𐑱 + < 𐑲 + < 𐑳 + < 𐑴 + < 𐑵 + < 𐑶 + < 𐑷 + < 𐑸 + < 𐑹 + < 𐑺 + < 𐑻 + < 𐑼 + < 𐑽 + < 𐑾 + < 𐑿 + < 𐒀 + < 𐒁 + < 𐒂 + < 𐒃 + < 𐒄 + < 𐒅 + < 𐒆 + < 𐒇 + < 𐒈 + < 𐒉 + < 𐒊 + < 𐒋 + < 𐒌 + < 𐒍 + < 𐒎 + < 𐒏 + < 𐒐 + < 𐒑 + < 𐒒 + < 𐒓 + < 𐒔 + < 𐒕 + < 𐒖 + < 𐒗 + < 𐒘 + < 𐒙 + < 𐒚 + < 𐒛 + < 𐒜 + < 𐒝 + < 𐀀 + < 𐀁 + < 𐀂 + < 𐀃 + < 𐀄 + < 𐀅 + < 𐀆 + < 𐀇 + < 𐀈 + < 𐀉 + < 𐀊 + < 𐀋 + < 𐀍 + < 𐀎 + < 𐀏 + < 𐀐 + < 𐀑 + < 𐀒 + < 𐀓 + < 𐀔 + < 𐀕 + < 𐀖 + < 𐀗 + < 𐀘 + < 𐀙 + < 𐀚 + < 𐀛 + < 𐀜 + < 𐀝 + < 𐀞 + < 𐀟 + < 𐀠 + < 𐀡 + < 𐀢 + < 𐀣 + < 𐀤 + < 𐀥 + < 𐀦 + < 𐀨 + < 𐀩 + < 𐀪 + < 𐀫 + < 𐀬 + < 𐀭 + < 𐀮 + < 𐀯 + < 𐀰 + < 𐀱 + < 𐀲 + < 𐀳 + < 𐀴 + < 𐀵 + < 𐀶 + < 𐀷 + < 𐀸 + < 𐀹 + < 𐀺 + < 𐀼 + < 𐀽 + < 𐀿 + < 𐁀 + < 𐁁 + < 𐁂 + < 𐁃 + < 𐁄 + < 𐁅 + < 𐁆 + < 𐁇 + < 𐁈 + < 𐁉 + < 𐁊 + < 𐁋 + < 𐁌 + < 𐁍 + < 𐁐 + < 𐁑 + < 𐁒 + < 𐁓 + < 𐁔 + < 𐁕 + < 𐁖 + < 𐁗 + < 𐁘 + < 𐁙 + < 𐁚 + < 𐁛 + < 𐁜 + < 𐁝 + < 𐂀 + < 𐂁 + < 𐂂 + < 𐂃 + < 𐂄 + < 𐂅 + < 𐂆 + < 𐂇 + < 𐂈 + < 𐂉 + < 𐂊 + < 𐂋 + < 𐂌 + < 𐂍 + < 𐂎 + < 𐂏 + < 𐂐 + < 𐂑 + < 𐂒 + < 𐂓 + < 𐂔 + < 𐂕 + < 𐂖 + < 𐂗 + < 𐂘 + < 𐂙 + < 𐂚 + < 𐂛 + < 𐂜 + < 𐂝 + < 𐂞 + < 𐂟 + < 𐂠 + < 𐂡 + < 𐂢 + < 𐂣 + < 𐂤 + < 𐂥 + < 𐂦 + < 𐂧 + < 𐂨 + < 𐂩 + < 𐂪 + < 𐂫 + < 𐂬 + < 𐂭 + < 𐂮 + < 𐂯 + < 𐂰 + < 𐂱 + < 𐂲 + < 𐂳 + < 𐂴 + < 𐂵 + < 𐂶 + < 𐂷 + < 𐂸 + < 𐂹 + < 𐂺 + < 𐂻 + < 𐂼 + < 𐂽 + < 𐂾 + < 𐂿 + < 𐃀 + < 𐃁 + < 𐃂 + < 𐃃 + < 𐃄 + < 𐃅 + < 𐃆 + < 𐃇 + < 𐃈 + < 𐃉 + < 𐃊 + < 𐃋 + < 𐃌 + < 𐃍 + < 𐃎 + < 𐃏 + < 𐃐 + < 𐃑 + < 𐃒 + < 𐃓 + < 𐃔 + < 𐃕 + < 𐃖 + < 𐃗 + < 𐃘 + < 𐃙 + < 𐃚 + < 𐃛 + < 𐃜 + < 𐃝 + < 𐃞 + < 𐃟 + < 𐃠 + < 𐃡 + < 𐃢 + < 𐃣 + < 𐃤 + < 𐃥 + < 𐃦 + < 𐃧 + < 𐃨 + < 𐃩 + < 𐃪 + < 𐃫 + < 𐃬 + < 𐃭 + < 𐃮 + < 𐃯 + < 𐃰 + < 𐃱 + < 𐃲 + < 𐃳 + < 𐃴 + < 𐃵 + < 𐃶 + < 𐃷 + < 𐃸 + < 𐃹 + < 𐃺 + < 𐠀 + < 𐠁 + < 𐠂 + < 𐠃 + < 𐠄 + < 𐠅 + < 𐠈 + < 𐠊 + < 𐠋 + < 𐠌 + < 𐠍 + < 𐠎 + < 𐠏 + < 𐠐 + < 𐠑 + < 𐠒 + < 𐠓 + < 𐠔 + < 𐠕 + < 𐠖 + < 𐠗 + < 𐠘 + < 𐠙 + < 𐠚 + < 𐠛 + < 𐠜 + < 𐠝 + < 𐠞 + < 𐠟 + < 𐠠 + < 𐠡 + < 𐠢 + < 𐠣 + < 𐠤 + < 𐠥 + < 𐠦 + < 𐠧 + < 𐠨 + < 𐠩 + < 𐠪 + < 𐠫 + < 𐠬 + < 𐠭 + < 𐠮 + < 𐠯 + < 𐠰 + < 𐠱 + < 𐠲 + < 𐠳 + < 𐠴 + < 𐠵 + < 𐠷 + < 𐠸 + < 𐠼 + < 𐠿 + < 𐎀 + < 𐎁 + < 𐎂 + < 𐎃 + < 𐎄 + < 𐎅 + < 𐎆 + < 𐎇 + < 𐎈 + < 𐎉 + < 𐎊 + < 𐎋 + < 𐎌 + < 𐎍 + < 𐎎 + < 𐎏 + < 𐎐 + < 𐎑 + < 𐎒 + < 𐎓 + < 𐎔 + < 𐎕 + < 𐎖 + < 𐎗 + < 𐎘 + < 𐎙 + < 𐎚 + < 𐎛 + < 𐎜 + < 𐎝 + < 𐎠 + < 𐎡 + < 𐎢 + < 𐎣 + < 𐎤 + < 𐎥 + < 𐎦 + < 𐎧 + < 𐎨 + < 𐎩 + < 𐎪 + < 𐎫 + < 𐎬 + < 𐎭 + < 𐎮 + < 𐎯 + < 𐎰 + < 𐎱 + < 𐎲 + < 𐎳 + < 𐎴 + < 𐎵 + < 𐎶 + < 𐎷 + < 𐎸 + < 𐎹 + < 𐎺 + < 𐎻 + < 𐎼 + < 𐎽 + < 𐎾 + < 𐎿 + < 𐏀 + < 𐏁 + < 𐏂 + < 𐏃 + < 𐏈 + < 𐏉 + < 𐏊 + < 𐏋 + < 𐏌 + < 𐏍 + < 𐏎 + < 𐏏 + < '𒀀' + < '𒀁' + < '𒀂' + < '𒀃' + < '𒀄' + < '𒀅' + < '𒀆' + < '𒀇' + < '𒀈' + < '𒀉' + < '𒀊' + < '𒀋' + < '𒀌' + < '𒀍' + < '𒀎' + < '𒀏' + < '𒀐' + < '𒀑' + < '𒀒' + < '𒀓' + < '𒀔' + < '𒀕' + < '𒀖' + < '𒀗' + < '𒀘' + < '𒀙' + < '𒀚' + < '𒀛' + < '𒀜' + < '𒀝' + < '𒀞' + < '𒀟' + < '𒀠' + < '𒀡' + < '𒀢' + < '𒀣' + < '𒀤' + < '𒀥' + < '𒀦' + < '𒀧' + < '𒀨' + < '𒀩' + < '𒀪' + < '𒀫' + < '𒀬' + < '𒀭' + < '𒀮' + < '𒀯' + < '𒀰' + < '𒀱' + < '𒀲' + < '𒀳' + < '𒀴' + < '𒀵' + < '𒀶' + < '𒀷' + < '𒀸' + < '𒀹' + < '𒀺' + < '𒀻' + < '𒀼' + < '𒀽' + < '𒀾' + < '𒀿' + < '𒁀' + < '𒁁' + < '𒁂' + < '𒁃' + < '𒁄' + < '𒁅' + < '𒁆' + < '𒁇' + < '𒁈' + < '𒁉' + < '𒁊' + < '𒁋' + < '𒁌' + < '𒁍' + < '𒁎' + < '𒁏' + < '𒁐' + < '𒁑' + < '𒁒' + < '𒁓' + < '𒁔' + < '𒁕' + < '𒁖' + < '𒁗' + < '𒁘' + < '𒁙' + < '𒁚' + < '𒁛' + < '𒁜' + < '𒁝' + < '𒁞' + < '𒁟' + < '𒁠' + < '𒁡' + < '𒁢' + < '𒁣' + < '𒁤' + < '𒁥' + < '𒁦' + < '𒁧' + < '𒁨' + < '𒁩' + < '𒁪' + < '𒁫' + < '𒁬' + < '𒁭' + < '𒁮' + < '𒁯' + < '𒁰' + < '𒁱' + < '𒁲' + < '𒁳' + < '𒁴' + < '𒁵' + < '𒁶' + < '𒁷' + < '𒁸' + < '𒁹' + < '𒁺' + < '𒁻' + < '𒁼' + < '𒁽' + < '𒁾' + < '𒁿' + < '𒂀' + < '𒂁' + < '𒂂' + < '𒂃' + < '𒂄' + < '𒂅' + < '𒂆' + < '𒂇' + < '𒂈' + < '𒂉' + < '𒂊' + < '𒂋' + < '𒂌' + < '𒂍' + < '𒂎' + < '𒂏' + < '𒂐' + < '𒂑' + < '𒂒' + < '𒂓' + < '𒂔' + < '𒂕' + < '𒂖' + < '𒂗' + < '𒂘' + < '𒂙' + < '𒂚' + < '𒂛' + < '𒂜' + < '𒂝' + < '𒂞' + < '𒂟' + < '𒂠' + < '𒂡' + < '𒂢' + < '𒂣' + < '𒂤' + < '𒂥' + < '𒂦' + < '𒂧' + < '𒂨' + < '𒂩' + < '𒂪' + < '𒂫' + < '𒂬' + < '𒂭' + < '𒂮' + < '𒂯' + < '𒂰' + < '𒂱' + < '𒂲' + < '𒂳' + < '𒂴' + < '𒂵' + < '𒂶' + < '𒂷' + < '𒂸' + < '𒂹' + < '𒂺' + < '𒂻' + < '𒂼' + < '𒂽' + < '𒂾' + < '𒂿' + < '𒃀' + < '𒃁' + < '𒃂' + < '𒃃' + < '𒃄' + < '𒃅' + < '𒃆' + < '𒃇' + < '𒃈' + < '𒃉' + < '𒃊' + < '𒃋' + < '𒃌' + < '𒃍' + < '𒃎' + < '𒃏' + < '𒃐' + < '𒃑' + < '𒃒' + < '𒃓' + < '𒃔' + < '𒃕' + < '𒃖' + < '𒃗' + < '𒃘' + < '𒃙' + < '𒃚' + < '𒃛' + < '𒃜' + < '𒃝' + < '𒃞' + < '𒃟' + < '𒃠' + < '𒃡' + < '𒃢' + < '𒃣' + < '𒃤' + < '𒃥' + < '𒃦' + < '𒃧' + < '𒃨' + < '𒃩' + < '𒃪' + < '𒃫' + < '𒃬' + < '𒃭' + < '𒃮' + < '𒃯' + < '𒃰' + < '𒃱' + < '𒃲' + < '𒃳' + < '𒃴' + < '𒃵' + < '𒃶' + < '𒃷' + < '𒃸' + < '𒃹' + < '𒃺' + < '𒃻' + < '𒃼' + < '𒃽' + < '𒃾' + < '𒃿' + < '𒄀' + < '𒄁' + < '𒄂' + < '𒄃' + < '𒄄' + < '𒄅' + < '𒄆' + < '𒄇' + < '𒄈' + < '𒄉' + < '𒄊' + < '𒄋' + < '𒄌' + < '𒄍' + < '𒄎' + < '𒄏' + < '𒄐' + < '𒄑' + < '𒄒' + < '𒄓' + < '𒄔' + < '𒄕' + < '𒄖' + < '𒄗' + < '𒄘' + < '𒄙' + < '𒄚' + < '𒄛' + < '𒄜' + < '𒄝' + < '𒄞' + < '𒄟' + < '𒄠' + < '𒄡' + < '𒄢' + < '𒄣' + < '𒄤' + < '𒄥' + < '𒄦' + < '𒄧' + < '𒄨' + < '𒄩' + < '𒄪' + < '𒄫' + < '𒄬' + < '𒄭' + < '𒄮' + < '𒄯' + < '𒄰' + < '𒄱' + < '𒄲' + < '𒄳' + < '𒄴' + < '𒄵' + < '𒄶' + < '𒄷' + < '𒄸' + < '𒄹' + < '𒄺' + < '𒄻' + < '𒄼' + < '𒄽' + < '𒄾' + < '𒄿' + < '𒅀' + < '𒅁' + < '𒅂' + < '𒅃' + < '𒅄' + < '𒅅' + < '𒅆' + < '𒅇' + < '𒅈' + < '𒅉' + < '𒅊' + < '𒅋' + < '𒅌' + < '𒅍' + < '𒅎' + < '𒅏' + < '𒅐' + < '𒅑' + < '𒅒' + < '𒅓' + < '𒅔' + < '𒅕' + < '𒅖' + < '𒅗' + < '𒅘' + < '𒅙' + < '𒅚' + < '𒅛' + < '𒅜' + < '𒅝' + < '𒅞' + < '𒅟' + < '𒅠' + < '𒅡' + < '𒅢' + < '𒅣' + < '𒅤' + < '𒅥' + < '𒅦' + < '𒅧' + < '𒅨' + < '𒅩' + < '𒅪' + < '𒅫' + < '𒅬' + < '𒅭' + < '𒅮' + < '𒅯' + < '𒅰' + < '𒅱' + < '𒅲' + < '𒅳' + < '𒅴' + < '𒅵' + < '𒅶' + < '𒅷' + < '𒅸' + < '𒅹' + < '𒅺' + < '𒅻' + < '𒅼' + < '𒅽' + < '𒅾' + < '𒅿' + < '𒆀' + < '𒆁' + < '𒆂' + < '𒆃' + < '𒆄' + < '𒆅' + < '𒆆' + < '𒆇' + < '𒆈' + < '𒆉' + < '𒆊' + < '𒆋' + < '𒆌' + < '𒆍' + < '𒆎' + < '𒆏' + < '𒆐' + < '𒆑' + < '𒆒' + < '𒆓' + < '𒆔' + < '𒆕' + < '𒆖' + < '𒆗' + < '𒆘' + < '𒆙' + < '𒆚' + < '𒆛' + < '𒆜' + < '𒆝' + < '𒆞' + < '𒆟' + < '𒆠' + < '𒆡' + < '𒆢' + < '𒆣' + < '𒆤' + < '𒆥' + < '𒆦' + < '𒆧' + < '𒆨' + < '𒆩' + < '𒆪' + < '𒆫' + < '𒆬' + < '𒆭' + < '𒆮' + < '𒆯' + < '𒆰' + < '𒆱' + < '𒆲' + < '𒆳' + < '𒆴' + < '𒆵' + < '𒆶' + < '𒆷' + < '𒆸' + < '𒆹' + < '𒆺' + < '𒆻' + < '𒆼' + < '𒆽' + < '𒆾' + < '𒆿' + < '𒇀' + < '𒇁' + < '𒇂' + < '𒇃' + < '𒇄' + < '𒇅' + < '𒇆' + < '𒇇' + < '𒇈' + < '𒇉' + < '𒇊' + < '𒇋' + < '𒇌' + < '𒇍' + < '𒇎' + < '𒇏' + < '𒇐' + < '𒇑' + < '𒇒' + < '𒇓' + < '𒇔' + < '𒇕' + < '𒇖' + < '𒇗' + < '𒇘' + < '𒇙' + < '𒇚' + < '𒇛' + < '𒇜' + < '𒇝' + < '𒇞' + < '𒇟' + < '𒇠' + < '𒇡' + < '𒇢' + < '𒇣' + < '𒇤' + < '𒇥' + < '𒇦' + < '𒇧' + < '𒇨' + < '𒇩' + < '𒇪' + < '𒇫' + < '𒇬' + < '𒇭' + < '𒇮' + < '𒇯' + < '𒇰' + < '𒇱' + < '𒇲' + < '𒇳' + < '𒇴' + < '𒇵' + < '𒇶' + < '𒇷' + < '𒇸' + < '𒇹' + < '𒇺' + < '𒇻' + < '𒇼' + < '𒇽' + < '𒇾' + < '𒇿' + < '𒈀' + < '𒈁' + < '𒈂' + < '𒈃' + < '𒈄' + < '𒈅' + < '𒈆' + < '𒈇' + < '𒈈' + < '𒈉' + < '𒈊' + < '𒈋' + < '𒈌' + < '𒈍' + < '𒈎' + < '𒈏' + < '𒈐' + < '𒈑' + < '𒈒' + < '𒈓' + < '𒈔' + < '𒈕' + < '𒈖' + < '𒈗' + < '𒈘' + < '𒈙' + < '𒈚' + < '𒈛' + < '𒈜' + < '𒈝' + < '𒈞' + < '𒈟' + < '𒈠' + < '𒈡' + < '𒈢' + < '𒈣' + < '𒈤' + < '𒈥' + < '𒈦' + < '𒈧' + < '𒈨' + < '𒈩' + < '𒈪' + < '𒈫' + < '𒈬' + < '𒈭' + < '𒈮' + < '𒈯' + < '𒈰' + < '𒈱' + < '𒈲' + < '𒈳' + < '𒈴' + < '𒈵' + < '𒈶' + < '𒈷' + < '𒈸' + < '𒈹' + < '𒈺' + < '𒈻' + < '𒈼' + < '𒈽' + < '𒈾' + < '𒈿' + < '𒉀' + < '𒉁' + < '𒉂' + < '𒉃' + < '𒉄' + < '𒉅' + < '𒉆' + < '𒉇' + < '𒉈' + < '𒉉' + < '𒉊' + < '𒉋' + < '𒉌' + < '𒉍' + < '𒉎' + < '𒉏' + < '𒉐' + < '𒉑' + < '𒉒' + < '𒉓' + < '𒉔' + < '𒉕' + < '𒉖' + < '𒉗' + < '𒉘' + < '𒉙' + < '𒉚' + < '𒉛' + < '𒉜' + < '𒉝' + < '𒉞' + < '𒉟' + < '𒉠' + < '𒉡' + < '𒉢' + < '𒉣' + < '𒉤' + < '𒉥' + < '𒉦' + < '𒉧' + < '𒉨' + < '𒉩' + < '𒉪' + < '𒉫' + < '𒉬' + < '𒉭' + < '𒉮' + < '𒉯' + < '𒉰' + < '𒉱' + < '𒉲' + < '𒉳' + < '𒉴' + < '𒉵' + < '𒉶' + < '𒉷' + < '𒉸' + < '𒉹' + < '𒉺' + < '𒉻' + < '𒉼' + < '𒉽' + < '𒉾' + < '𒉿' + < '𒊀' + < '𒊁' + < '𒊂' + < '𒊃' + < '𒊄' + < '𒊅' + < '𒊆' + < '𒊇' + < '𒊈' + < '𒊉' + < '𒊊' + < '𒊋' + < '𒊌' + < '𒊍' + < '𒊎' + < '𒊏' + < '𒊐' + < '𒊑' + < '𒊒' + < '𒊓' + < '𒊔' + < '𒊕' + < '𒊖' + < '𒊗' + < '𒊘' + < '𒊙' + < '𒊚' + < '𒊛' + < '𒊜' + < '𒊝' + < '𒊞' + < '𒊟' + < '𒊠' + < '𒊡' + < '𒊢' + < '𒊣' + < '𒊤' + < '𒊥' + < '𒊦' + < '𒊧' + < '𒊨' + < '𒊩' + < '𒊪' + < '𒊫' + < '𒊬' + < '𒊭' + < '𒊮' + < '𒊯' + < '𒊰' + < '𒊱' + < '𒊲' + < '𒊳' + < '𒊴' + < '𒊵' + < '𒊶' + < '𒊷' + < '𒊸' + < '𒊹' + < '𒊺' + < '𒊻' + < '𒊼' + < '𒊽' + < '𒊾' + < '𒊿' + < '𒋀' + < '𒋁' + < '𒋂' + < '𒋃' + < '𒋄' + < '𒋅' + < '𒋆' + < '𒋇' + < '𒋈' + < '𒋉' + < '𒋊' + < '𒋋' + < '𒋌' + < '𒋍' + < '𒋎' + < '𒋏' + < '𒋐' + < '𒋑' + < '𒋒' + < '𒋓' + < '𒋔' + < '𒋕' + < '𒋖' + < '𒋗' + < '𒋘' + < '𒋙' + < '𒋚' + < '𒋛' + < '𒋜' + < '𒋝' + < '𒋞' + < '𒋟' + < '𒋠' + < '𒋡' + < '𒋢' + < '𒋣' + < '𒋤' + < '𒋥' + < '𒋦' + < '𒋧' + < '𒋨' + < '𒋩' + < '𒋪' + < '𒋫' + < '𒋬' + < '𒋭' + < '𒋮' + < '𒋯' + < '𒋰' + < '𒋱' + < '𒋲' + < '𒋳' + < '𒋴' + < '𒋵' + < '𒋶' + < '𒋷' + < '𒋸' + < '𒋹' + < '𒋺' + < '𒋻' + < '𒋼' + < '𒋽' + < '𒋾' + < '𒋿' + < '𒌀' + < '𒌁' + < '𒌂' + < '𒌃' + < '𒌄' + < '𒌅' + < '𒌆' + < '𒌇' + < '𒌈' + < '𒌉' + < '𒌊' + < '𒌋' + < '𒌌' + < '𒌍' + < '𒌎' + < '𒌏' + < '𒌐' + < '𒌑' + < '𒌒' + < '𒌓' + < '𒌔' + < '𒌕' + < '𒌖' + < '𒌗' + < '𒌘' + < '𒌙' + < '𒌚' + < '𒌛' + < '𒌜' + < '𒌝' + < '𒌞' + < '𒌟' + < '𒌠' + < '𒌡' + < '𒌢' + < '𒌣' + < '𒌤' + < '𒌥' + < '𒌦' + < '𒌧' + < '𒌨' + < '𒌩' + < '𒌪' + < '𒌫' + < '𒌬' + < '𒌭' + < '𒌮' + < '𒌯' + < '𒌰' + < '𒌱' + < '𒌲' + < '𒌳' + < '𒌴' + < '𒌵' + < '𒌶' + < '𒌷' + < '𒌸' + < '𒌹' + < '𒌺' + < '𒌻' + < '𒌼' + < '𒌽' + < '𒌾' + < '𒌿' + < '𒍀' + < '𒍁' + < '𒍂' + < '𒍃' + < '𒍄' + < '𒍅' + < '𒍆' + < '𒍇' + < '𒍈' + < '𒍉' + < '𒍊' + < '𒍋' + < '𒍌' + < '𒍍' + < '𒍎' + < '𒍏' + < '𒍐' + < '𒍑' + < '𒍒' + < '𒍓' + < '𒍔' + < '𒍕' + < '𒍖' + < '𒍗' + < '𒍘' + < '𒍙' + < '𒍚' + < '𒍛' + < '𒍜' + < '𒍝' + < '𒍞' + < '𒍟' + < '𒍠' + < '𒍡' + < '𒍢' + < '𒍣' + < '𒍤' + < '𒍥' + < '𒍦' + < '𒍧' + < '𒍨' + < '𒍩' + < '𒍪' + < '𒍫' + < '𒍬' + < '𒍭' + < '𒍮' +& 一 + <<< ⼀ + <<< ㊀ + <<< ㆒ +& 丁 + <<< ㆜ +& 七 + <<< ㊆ +& 三 + <<< ㊂ + <<< ㆔ +& 上 + <<< ㊤ + <<< ㆖ +& 下 + <<< ㊦ + <<< ㆘ +& 丙 + <<< ㆛ +& 丨 + <<< ⼁ +& 丬 + <<< ⺦ +& 中 + <<< ㊥ + <<< ㆗ +& 丶 + <<< ⼂ + << ⺀ +& 丸 + = 丸 +& 丽 + = 丽 +& 丿 + <<< ⼃ +& 乁 + = 乁 +& 乙 + <<< ⼄ + <<< ㆚ + << ⺄ +& 乚 + <<< ⺃ +& 乛 + <<< ⺂ +& 九 + <<< ㊈ +& 亅 + <<< ⼅ +& 二 + <<< ⼆ + <<< ㊁ + <<< ㆓ +& 五 + <<< ㊄ +& 亠 + <<< ⼇ +& 人 + <<< ⼈ + <<< ㆟ +& 亻 + <<< ⺅ +& 仌 + = 仌 +& 企 + <<< ㊭ +& 休 + <<< ㊡ +& 你 + = 你 +& 侮 + = 侮 +& 侻 + = 侻 +& 倂 + = 倂 +& 偺 + = 偺 +& 備 + = 備 +& 像 + = 像 +& 僧 + = 僧 +& 優 + <<< ㊝ +& 儿 + <<< ⼉ +& 免 + = 免 +& 兔 + = 兔 +& 兤 + = 兤 +& 入 + <<< ⼊ +& 內 + = 內 +& 八 + <<< ⼋ + <<< ㊇ +& 六 + <<< ㊅ +& 具 + = 具 +& 冂 + <<< ⼌ + << ⺆ +& 再 + = 再 +& 冒 + = 冒 +& 冕 + = 冕 +& 冖 + <<< ⼍ +& 冗 + = 冗 +& 写 + <<< ㊢ +& 冤 + = 冤 +& 冫 + <<< ⼎ +& 冬 + = 冬 +& 况 + = 况 +& 几 + <<< ⼏ + << ⺇ +& 凵 + = 凵 + <<< ⼐ +& 刀 + <<< ⼑ + << ⺈ +& 刂 + <<< ⺉ +& 刃 + = 刃 +& 切 + = 切 +& 刻 + = 刻 +& 剆 + = 剆 +& 割 + = 割 +& 剷 + = 剷 +& 力 + <<< ⼒ +& 劳 + = 劳 +& 労 + <<< ㊘ +& 勇 + = 勇 +& 勉 + = 勉 +& 勤 + = 勤 +& 勹 + <<< ⼓ +& 勺 + = 勺 +& 包 + = 包 +& 匆 + = 匆 +& 匕 + <<< ⼔ +& 北 + = 北 +& 匚 + <<< ⼕ +& 匸 + <<< ⼖ +& 医 + <<< ㊩ +& 十 + <<< ⼗ + = 〸 + <<< ㊉ +& 卄 + <<< 〹 +& 卅 + <<< 〺 +& 卉 + = 卉 +& 卑 + = 卑 +& 協 + <<< ㊯ +& 博 + = 博 +& 卜 + <<< ⼘ + << ⺊ +& 卩 + <<< ⼙ + << ⺋ +& 印 + <<< ㊞ +& 即 + = 即 +& 卽 + = 卽 +& 卿 + = 卿 + = 卿 + = 卿 +& 厂 + <<< ⼚ + << ⺁ +& 厶 + <<< ⼛ +& 又 + <<< ⼜ +& 及 + = 及 +& 叟 + = 叟 +& 口 + <<< ⼝ +& 叫 + = 叫 +& 叱 + = 叱 +& 右 + <<< ㊨ +& 吆 + = 吆 +& 名 + <<< ㊔ +& 吸 + = 吸 +& 呈 + = 呈 +& 周 + = 周 +& 咞 + = 咞 +& 咢 + = 咢 +& 哶 + = 哶 +& 唐 + = 唐 +& 啓 + = 啓 +& 啣 + = 啣 +& 善 + = 善 + = 善 +& 喙 + = 喙 +& 喫 + = 喫 +& 喳 + = 喳 +& 嗂 + = 嗂 +& 嘆 + = 嘆 +& 噑 + = 噑 +& 噴 + = 噴 +& 囗 + <<< ⼞ +& 四 + <<< ㊃ + <<< ㆕ +& 圖 + = 圖 +& 圗 + = 圗 +& 土 + <<< ⼟ + <<< ㊏ +& 地 + <<< ㆞ +& 型 + = 型 +& 城 + = 城 +& 埴 + = 埴 +& 堍 + = 堍 +& 報 + = 報 +& 堲 + = 堲 +& 墬 + = 墬 +& 士 + <<< ⼠ +& 壮 + = 壮 +& 売 + = 売 +& 壷 + = 壷 +& 夂 + <<< ⼡ +& 夆 + = 夆 +& 夊 + <<< ⼢ +& 夕 + <<< ⼣ +& 多 + = 多 +& 夜 + <<< ㊰ +& 夢 + = 夢 +& 大 + <<< ⼤ + <<< ㍽ / 正 +& 天 + <<< ㆝ +& 奢 + = 奢 +& 女 + <<< ⼥ + <<< ㊛ +& 姘 + = 姘 +& 姬 + = 姬 +& 娛 + = 娛 +& 娧 + = 娧 +& 婦 + = 婦 +& 媵 + = 媵 +& 嬈 + = 嬈 +& 嬾 + = 嬾 + = 嬾 +& 子 + <<< ⼦ +& 学 + <<< ㊫ +& 宀 + <<< ⼧ +& 宗 + <<< ㊪ +& 寃 + = 寃 +& 寘 + = 寘 +& 寧 + = 寧 +& 寳 + = 寳 +& 寸 + <<< ⼨ +& 寿 + = 寿 +& 将 + = 将 +& 小 + <<< ⼩ + << ⺌ + << ⺍ +& 尢 + = 尢 + <<< ⺐ + = ⼪ + << ⺎ +& 尣 + <<< ⺏ + << ⺑ +& 尸 + <<< ⼫ +& 屠 + = 屠 +& 屮 + = 屮 + <<< ⼬ +& 山 + <<< ⼭ +& 岍 + = 岍 +& 峀 + = 峀 +& 嵃 + = 嵃 +& 嵫 + = 嵫 +& 嵮 + = 嵮 +& 嵼 + = 嵼 +& 嶲 + = 嶲 +& 巛 + <<< ⼮ +& 巡 + = 巡 +& 巢 + = 巢 +& 工 + <<< ⼯ +& 左 + <<< ㊧ +& 己 + <<< ⼰ +& 巳 + <<< ⺒ +& 巽 + = 巽 +& 巾 + <<< ⼱ +& 帨 + = 帨 +& 帽 + = 帽 +& 幩 + = 幩 +& 干 + <<< ⼲ +& 平 + < ㍻ / 成 +& 幺 + <<< ⺓ + = ⼳ +& 广 + <<< ⼴ +& 庰 + = 庰 +& 庳 + = 庳 +& 庶 + = 庶 +& 廊 + = 廊 +& 廴 + <<< ⼵ +& 廾 + = 廾 + <<< ⼶ +& 弋 + <<< ⼷ +& 弓 + <<< ⼸ +& 弢 + = 弢 + = 弢 +& 彐 + <<< ⼹ + << ⺕ +& 彑 + <<< ⺔ +& 当 + = 当 +& 彡 + <<< ⼺ +& 形 + = 形 +& 彫 + = 彫 +& 彳 + <<< ⼻ +& 徚 + = 徚 +& 心 + <<< ⼼ + << ⺗ +& 忄 + <<< ⺖ +& 忍 + = 忍 +& 志 + = 志 +& 忹 + = 忹 +& 悁 + = 悁 +& 悔 + = 悔 +& 惇 + = 惇 +& 慈 + = 慈 +& 慌 + = 慌 + = 慌 +& 慎 + = 慎 +& 慺 + = 慺 +& 憎 + = 憎 +& 憤 + = 憤 +& 憯 + = 憯 +& 憲 + = 憲 +& 懞 + = 懞 +& 懲 + = 懲 +& 懶 + = 懶 +& 戈 + <<< ⼽ +& 成 + = 成 +& 戛 + = 戛 +& 戶 + <<< ⼾ +& 手 + <<< ⼿ +& 扌 + <<< ⺘ +& 扝 + = 扝 +& 抱 + = 抱 +& 拔 + = 拔 +& 拼 + = 拼 +& 挽 + = 挽 +& 捐 + = 捐 +& 捨 + = 捨 +& 掃 + = 掃 +& 掩 + = 掩 +& 揅 + = 揅 +& 揤 + = 揤 +& 搢 + = 搢 +& 摩 + = 摩 +& 摷 + = 摷 +& 摾 + = 摾 +& 撝 + = 撝 +& 支 + <<< ⽀ +& 攴 + <<< ⽁ +& 攵 + <<< ⺙ +& 敏 + = 敏 +& 敬 + = 敬 +& 文 + <<< ⽂ +& 斗 + <<< ⽃ +& 斤 + <<< ⽄ +& 方 + <<< ⽅ +& 无 + <<< ⽆ +& 旡 + <<< ⺛ +& 旣 + = 旣 +& 日 + <<< ⽇ + <<< ㊐ + << ⺜ +& 明 + < ㍾ / 治 +& 昭 + < ㍼ / 和 +& 晉 + = 晉 +& 暑 + = 暑 +& 暜 + = 暜 +& 曰 + <<< ⽈ +& 書 + = 書 +& 最 + = 最 +& 月 + <<< ⽉ + <<< ㊊ + << ⺝ +& 有 + <<< ㊒ +& 朗 + = 朗 +& 望 + = 望 +& 朡 + = 朡 +& 木 + <<< ⽊ + <<< ㊍ +& 杓 + = 杓 +& 杞 + = 杞 +& 枅 + = 枅 +& 柺 + = 柺 +& 栟 + = 栟 +& 株 + <<< ㊑ + <<< ㍿ / 式会社 +& 桒 + = 桒 +& 梅 + = 梅 +& 梎 + = 梎 +& 椔 + = 椔 +& 楂 + = 楂 +& 榣 + = 榣 +& 槪 + = 槪 +& 檨 + = 檨 +& 櫛 + = 櫛 +& 欠 + <<< ⽋ +& 次 + = 次 +& 歔 + = 歔 +& 止 + <<< ⽌ +& 正 + <<< ㊣ +& 歲 + = 歲 +& 歹 + <<< ⽍ +& 歺 + << ⺞ +& 殟 + = 殟 +& 殳 + <<< ⽎ +& 殺 + = 殺 +& 殻 + = 殻 +& 毋 + <<< ⽏ +& 母 + <<< ⺟ +& 比 + <<< ⽐ +& 毛 + <<< ⽑ +& 氏 + <<< ⽒ +& 民 + <<< ⺠ +& 气 + <<< ⽓ +& 水 + <<< ⽔ + <<< ㊌ +& 氵 + <<< ⺡ +& 氺 + <<< ⺢ +& 汎 + = 汎 +& 汧 + = 汧 +& 沿 + = 沿 +& 泍 + = 泍 +& 注 + <<< ㊟ +& 洖 + = 洖 +& 洴 + = 洴 +& 派 + = 派 +& 流 + = 流 +& 浩 + = 浩 +& 海 + = 海 +& 浸 + = 浸 +& 涅 + = 涅 +& 淹 + = 淹 +& 港 + = 港 +& 湮 + = 湮 +& 滇 + = 滇 +& 滋 + = 滋 +& 潮 + = 潮 +& 濆 + = 濆 +& 瀛 + = 瀛 +& 瀞 + = 瀞 +& 瀹 + = 瀹 +& 灊 + = 灊 +& 火 + <<< ⽕ + <<< ㊋ +& 灬 + <<< ⺣ +& 灰 + = 灰 +& 灷 + = 灷 +& 災 + = 災 +& 炭 + = 炭 +& 煅 + = 煅 +& 熜 + = 熜 +& 爨 + = 爨 +& 爪 + <<< ⽖ +& 爫 + <<< ⺤ + << ⺥ +& 爵 + = 爵 +& 父 + <<< ⽗ +& 爻 + <<< ⽘ +& 爿 + <<< ⽙ +& 片 + <<< ⽚ +& 牐 + = 牐 +& 牙 + <<< ⽛ +& 牛 + <<< ⽜ + << ⺧ +& 特 + <<< ㊕ +& 犀 + = 犀 +& 犕 + = 犕 +& 犬 + <<< ⽝ +& 犭 + <<< ⺨ +& 獺 + = 獺 +& 玄 + <<< ⽞ +& 玉 + <<< ⽟ +& 王 + = 王 + << ⺩ +& 玥 + = 玥 +& 瑇 + = 瑇 +& 瑜 + = 瑜 +& 瑱 + = 瑱 +& 璅 + = 璅 +& 瓊 + = 瓊 +& 瓜 + <<< ⽠ +& 瓦 + <<< ⽡ +& 甘 + <<< ⽢ +& 生 + <<< ⽣ +& 甤 + = 甤 +& 用 + <<< ⽤ +& 田 + <<< ⽥ +& 甲 + <<< ㆙ +& 男 + <<< ㊚ +& 甾 + = 甾 +& 異 + = 異 +& 疋 + <<< ⽦ + << ⺪ +& 疒 + <<< ⽧ +& 瘐 + = 瘐 +& 癶 + <<< ⽨ +& 白 + <<< ⽩ +& 皮 + <<< ⽪ +& 皿 + <<< ⽫ +& 監 + <<< ㊬ +& 目 + <<< ⽬ + << ⺫ +& 直 + = 直 +& 眞 + = 眞 +& 真 + = 真 + = 真 +& 睊 + = 睊 +& 瞋 + = 瞋 +& 矛 + <<< ⽭ +& 矢 + <<< ⽮ +& 石 + <<< ⽯ +& 硎 + = 硎 +& 碌 + = 碌 +& 磌 + = 磌 +& 示 + <<< ⽰ + << ⺬ +& 礻 + <<< ⺭ +& 社 + <<< ㊓ +& 祖 + = 祖 +& 祝 + <<< ㊗ +& 福 + = 福 +& 禸 + <<< ⽱ +& 禾 + <<< ⽲ +& 秘 + <<< ㊙ +& 秫 + = 秫 +& 穀 + = 穀 +& 穊 + = 穊 +& 穏 + = 穏 +& 穴 + <<< ⽳ +& 立 + <<< ⽴ +& 竮 + = 竮 +& 竹 + <<< ⽵ + << ⺮ +& 篆 + = 篆 +& 築 + = 築 +& 米 + <<< ⽶ +& 糒 + = 糒 +& 糣 + = 糣 +& 糨 + = 糨 +& 糸 + <<< ⽷ +& 糹 + <<< ⺯ +& 紀 + = 紀 +& 絣 + = 絣 +& 緇 + = 緇 +& 縂 + = 縂 +& 繅 + = 繅 +& 纟 + <<< ⺰ +& 缶 + <<< ⽸ +& 网 + <<< ⽹ +& 罒 + <<< ⺲ + << ⺵ +& 罓 + <<< ⺱ + << ⺳ + << ⺴ +& 罺 + = 罺 +& 羊 + <<< ⽺ + << ⺶ + << ⺷ +& 羋 + <<< ⺸ +& 羕 + = 羕 +& 羽 + <<< ⽻ +& 翺 + = 翺 +& 老 + <<< ⽼ +& 耂 + <<< ⺹ +& 者 + = 者 +& 而 + <<< ⽽ +& 耒 + <<< ⽾ +& 耳 + <<< ⽿ +& 聠 + = 聠 +& 聰 + = 聰 +& 聿 + <<< ⾀ + << ⺻ +& 肀 + <<< ⺺ +& 肉 + <<< ⾁ + << ⺼ +& 肭 + = 肭 +& 育 + = 育 +& 脃 + = 脃 +& 脾 + = 脾 +& 臣 + <<< ⾂ +& 自 + <<< ⾃ +& 至 + <<< ⾄ +& 臼 + <<< ⾅ + << ⺽ +& 舁 + = 舁 + = 舁 +& 舄 + = 舄 +& 舌 + <<< ⾆ +& 舛 + <<< ⾇ +& 舟 + <<< ⾈ +& 艮 + <<< ⾉ +& 色 + <<< ⾊ +& 艸 + <<< ⾋ +& 艹 + <<< ⺾ + << ⺿ + << ⻀ +& 芋 + = 芋 +& 芑 + = 芑 +& 芝 + = 芝 +& 花 + = 花 +& 芳 + = 芳 +& 芽 + = 芽 +& 若 + = 若 +& 苦 + = 苦 +& 茝 + = 茝 +& 茣 + = 茣 +& 荓 + = 荓 +& 荣 + = 荣 +& 莭 + = 莭 +& 莽 + = 莽 +& 菊 + = 菊 +& 菌 + = 菌 +& 菜 + = 菜 +& 菧 + = 菧 +& 著 + = 著 +& 蓱 + = 蓱 +& 蓳 + = 蓳 +& 蔖 + = 蔖 +& 蕤 + = 蕤 +& 虍 + <<< ⾌ +& 虎 + <<< ⻁ +& 虐 + = 虐 +& 虜 + = 虜 +& 虧 + = 虧 +& 虩 + = 虩 +& 虫 + <<< ⾍ +& 蚈 + = 蚈 +& 蚩 + = 蚩 +& 蛢 + = 蛢 +& 蜎 + = 蜎 +& 蜨 + = 蜨 +& 蝫 + = 蝫 +& 蝹 + = 蝹 +& 螆 + = 螆 +& 蟡 + = 蟡 +& 蠁 + = 蠁 +& 血 + <<< ⾎ +& 行 + <<< ⾏ +& 衠 + = 衠 +& 衣 + = 衣 + <<< ⾐ +& 衤 + <<< ⻂ +& 裗 + = 裗 +& 裞 + = 裞 +& 裺 + = 裺 +& 襾 + <<< ⾑ +& 西 + <<< ⻄ +& 覀 + <<< ⻃ +& 見 + <<< ⾒ +& 见 + <<< ⻅ +& 角 + <<< ⻆ + = ⾓ + << ⻇ +& 言 + <<< ⾔ +& 誠 + = 誠 +& 諭 + = 諭 +& 變 + = 變 +& 讠 + <<< ⻈ +& 谷 + <<< ⾕ +& 豆 + <<< ⾖ +& 豕 + = 豕 + <<< ⾗ +& 豸 + <<< ⾘ +& 貝 + <<< ⾙ +& 財 + <<< ㊖ +& 貫 + = 貫 +& 賁 + = 賁 +& 資 + <<< ㊮ +& 贛 + = 贛 +& 贝 + <<< ⻉ +& 赤 + <<< ⾚ +& 走 + <<< ⾛ +& 起 + = 起 +& 足 + <<< ⾜ + << ⻊ +& 趼 + = 趼 +& 跋 + = 跋 +& 跰 + = 跰 +& 身 + <<< ⾝ +& 車 + <<< ⾞ +& 軔 + = 軔 +& 輸 + = 輸 +& 车 + <<< ⻋ +& 辛 + <<< ⾟ +& 辞 + = 辞 +& 辰 + <<< ⾠ +& 辵 + <<< ⾡ +& 辶 + <<< ⻌ + << ⻍ + << ⻎ +& 適 + <<< ㊜ +& 邑 + <<< ⾢ + << ⻏ +& 邔 + = 邔 +& 郱 + = 郱 +& 鄑 + = 鄑 +& 鄛 + = 鄛 +& 酉 + <<< ⾣ +& 釆 + <<< ⾤ +& 里 + <<< ⾥ +& 金 + <<< ⾦ + <<< ㊎ +& 鈸 + = 鈸 +& 鉼 + = 鉼 +& 鋗 + = 鋗 +& 鋘 + = 鋘 +& 鏹 + = 鏹 +& 鐕 + = 鐕 +& 钅 + <<< ⻐ +& 長 + <<< ⻑ + = ⾧ +& 镸 + <<< ⻒ +& 长 + <<< ⻓ +& 門 + <<< ⾨ +& 開 + = 開 +& 閷 + = 閷 +& 门 + <<< ⻔ +& 阜 + <<< ⾩ + << ⻕ +& 阝 + <<< ⻖ +& 隶 + <<< ⾪ +& 隹 + <<< ⾫ +& 雃 + = 雃 +& 雨 + <<< ⾬ + << ⻗ +& 霣 + = 霣 +& 靑 + <<< ⾭ +& 青 + <<< ⻘ +& 非 + <<< ⾮ +& 面 + <<< ⾯ +& 革 + <<< ⾰ +& 韋 + <<< ⾱ +& 韠 + = 韠 +& 韦 + <<< ⻙ +& 韭 + <<< ⾲ +& 音 + <<< ⾳ +& 頁 + <<< ⾴ +& 項 + <<< ㊠ +& 頋 + = 頋 + = 頋 +& 頩 + = 頩 +& 页 + <<< ⻚ +& 風 + <<< ⾵ +& 风 + <<< ⻛ +& 飛 + <<< ⾶ +& 飞 + <<< ⻜ +& 食 + <<< ⻝ + = ⾷ +& 飠 + <<< ⻟ + << ⻞ +& 飢 + = 飢 +& 餩 + = 餩 +& 饣 + <<< ⻠ +& 首 + <<< ⾸ + << ⻡ +& 香 + <<< ⾹ +& 馧 + = 馧 +& 馬 + <<< ⾺ +& 駂 + = 駂 +& 駾 + = 駾 +& 马 + <<< ⻢ +& 骨 + <<< ⾻ + << ⻣ +& 高 + <<< ⾼ +& 髟 + <<< ⾽ +& 鬒 + = 鬒 +& 鬥 + <<< ⾾ +& 鬯 + <<< ⾿ +& 鬲 + <<< ⿀ +& 鬼 + <<< ⿁ + << ⻤ +& 魚 + <<< ⿂ +& 鱀 + = 鱀 +& 鱼 + <<< ⻥ +& 鳥 + <<< ⿃ +& 鳽 + = 鳽 +& 鵧 + = 鵧 +& 鸟 + <<< ⻦ +& 鹵 + <<< ⿄ + << ⻧ +& 鹿 + <<< ⿅ +& 麥 + <<< ⿆ +& 麦 + <<< ⻨ +& 麻 + = 麻 + <<< ⿇ +& 黃 + <<< ⿈ +& 黄 + <<< ⻩ +& 黍 + <<< ⿉ +& 黑 + <<< ⿊ +& 黹 + = 黹 + <<< ⿋ +& 黽 + <<< ⿌ +& 黾 + = 黾 + <<< ⻪ +& 鼅 + = 鼅 +& 鼎 + <<< ⿍ +& 鼏 + = 鼏 +& 鼓 + <<< ⿎ +& 鼖 + = 鼖 +& 鼠 + <<< ⿏ +& 鼻 + = 鼻 + <<< ⿐ +& 齊 + <<< ⿑ + << ⻫ +& 齐 + <<< ⻬ +& 齒 + <<< ⿒ + << ⻭ +& 齿 + <<< ⻮ +& 龍 + <<< ⿓ + << ⻯ +& 龙 + <<< ⻰ +& 龜 + <<< ⿔ + << ⻱ + << ⻲ +& 龟 + <<< ⻳ +& 龠 + <<< ⿕ +& 﨎 + = 﨎 +& 﨏 + = 﨏 +& 﨑 + = 﨑 +& 﨓 + = 﨓 +& 﨔 + = 﨔 +& 﨟 + = 﨟 +& 﨡 + = 﨡 +& 﨣 + = 﨣 +& 﨤 + = 﨤 +& 﨧 + = 﨧 +& 﨨 + = 﨨 +& 﨩 + = 﨩 +& 㒞 + = 㒞 +& 㒹 + = 㒹 +& 㒻 + = 㒻 +& 㓟 + = 㓟 +& 㔕 + = 㔕 +& 㛮 + = 㛮 +& 㛼 + = 㛼 +& 㞁 + = 㞁 +& 㠯 + = 㠯 +& 㡢 + = 㡢 +& 㡼 + = 㡼 +& 㣇 + = 㣇 +& 㣣 + = 㣣 +& 㤜 + = 㤜 +& 㤺 + = 㤺 +& 㨮 + = 㨮 +& 㩬 + = 㩬 +& 㫤 + = 㫤 +& 㬈 + = 㬈 +& 㬙 + = 㬙 +& 㭉 + = 㭉 +& 㮝 + = 㮝 +& 㰘 + = 㰘 +& 㱎 + = 㱎 +& 㴳 + = 㴳 +& 㶖 + = 㶖 +& 㺬 + = 㺬 +& 㺸 + = 㺸 + = 㺸 +& 㼛 + = 㼛 +& 㿼 + = 㿼 +& 䀈 + = 䀈 +& 䀹 + = 䀹 +& 䁆 + = 䁆 +& 䂖 + = 䂖 +& 䃣 + = 䃣 +& 䄯 + = 䄯 +& 䈂 + = 䈂 +& 䈧 + = 䈧 +& 䊠 + = 䊠 +& 䌁 + = 䌁 +& 䌴 + = 䌴 +& 䍙 + = 䍙 +& 䏕 + = 䏕 +& 䏙 + = 䏙 +& 䐋 + = 䐋 +& 䑫 + = 䑫 +& 䔫 + = 䔫 +& 䕝 + = 䕝 +& 䕡 + = 䕡 +& 䕫 + = 䕫 +& 䗗 + = 䗗 +& 䗹 + = 䗹 +& 䘵 + = 䘵 +& 䚾 + = 䚾 +& 䛇 + = 䛇 +& 䦕 + = 䦕 +& 䧦 + = 䧦 +& 䩮 + = 䩮 +& 䩶 + = 䩶 +& 䪲 + = 䪲 +& 䬳 + = 䬳 +& 䯎 + = 䯎 +& 䳎 + = 䳎 +& 䳭 + = 䳭 +& 䳸 + = 䳸 +& 䵖 + = 䵖 +& 𠄢 + = 𠄢 +& 𠔜 + = 𠔜 +& 𠔥 + = 𠔥 +& 𠕋 + = 𠕋 +& 𠘺 + = 𠘺 +& 𠠄 + = 𠠄 +& 𠣞 + = 𠣞 +& 𠨬 + = 𠨬 +& 𠭣 + = 𠭣 +& 𡓤 + = 𡓤 +& 𡚨 + = 𡚨 +& 𡛪 + = 𡛪 +& 𡧈 + = 𡧈 +& 𡬘 + = 𡬘 +& 𡴋 + = 𡴋 +& 𡷤 + = 𡷤 +& 𡷦 + = 𡷦 +& 𢆃 + = 𢆃 +& 𢆟 + = 𢆟 +& 𢌱 + = 𢌱 + = 𢌱 +& 𢛔 + = 𢛔 +& 𢬌 + = 𢬌 +& 𢯱 + = 𢯱 +& 𣀊 + = 𣀊 +& 𣊸 + = 𣊸 +& 𣍟 + = 𣍟 +& 𣎓 + = 𣎓 +& 𣎜 + = 𣎜 +& 𣏃 + = 𣏃 +& 𣑭 + = 𣑭 +& 𣚣 + = 𣚣 +& 𣢧 + = 𣢧 +& 𣪍 + = 𣪍 +& 𣫺 + = 𣫺 +& 𣲼 + = 𣲼 +& 𣴞 + = 𣴞 +& 𣻑 + = 𣻑 +& 𣽞 + = 𣽞 +& 𣾎 + = 𣾎 +& 𤉣 + = 𤉣 +& 𤎫 + = 𤎫 +& 𤘈 + = 𤘈 +& 𤜵 + = 𤜵 +& 𤠔 + = 𤠔 +& 𤰶 + = 𤰶 +& 𤲒 + = 𤲒 +& 𤾡 + = 𤾡 +& 𤾸 + = 𤾸 +& 𥁄 + = 𥁄 +& 𥃲 + = 𥃲 +& 𥃳 + = 𥃳 +& 𥄙 + = 𥄙 +& 𥄳 + = 𥄳 +& 𥐝 + = 𥐝 +& 𥘦 + = 𥘦 +& 𥚚 + = 𥚚 +& 𥛅 + = 𥛅 +& 𥥼 + = 𥥼 +& 𥪧 + = 𥪧 + = 𥪧 +& 𥮫 + = 𥮫 +& 𥲀 + = 𥲀 +& 𥾆 + = 𥾆 +& 𦇚 + = 𦇚 +& 𦈨 + = 𦈨 +& 𦉇 + = 𦉇 +& 𦋙 + = 𦋙 +& 𦌾 + = 𦌾 +& 𦓚 + = 𦓚 +& 𦔣 + = 𦔣 +& 𦖨 + = 𦖨 +& 𦞧 + = 𦞧 +& 𦞵 + = 𦞵 +& 𦬼 + = 𦬼 +& 𦰶 + = 𦰶 +& 𦳕 + = 𦳕 +& 𦵫 + = 𦵫 +& 𦼬 + = 𦼬 +& 𦾱 + = 𦾱 +& 𧃒 + = 𧃒 +& 𧏊 + = 𧏊 +& 𧙧 + = 𧙧 +& 𧢮 + = 𧢮 +& 𧥦 + = 𧥦 +& 𧲨 + = 𧲨 +& 𧼯 + = 𧼯 +& 𨗒 + = 𨗒 +& 𨗭 + = 𨗭 +& 𨜮 + = 𨜮 +& 𨯺 + = 𨯺 +& 𨵷 + = 𨵷 +& 𩅅 + = 𩅅 +& 𩇟 + = 𩇟 +& 𩈚 + = 𩈚 +& 𩐊 + = 𩐊 +& 𩒖 + = 𩒖 +& 𩖶 + = 𩖶 +& 𩬰 + = 𩬰 +& 𪃎 + = 𪃎 +& 𪄅 + = 𪄅 +& 𪈎 + = 𪈎 +& 𪊑 + = 𪊑 +& 𪎒 + = 𪎒 +& 𪘀 + = 𪘀 diff --git a/icuSources/data/unidata/UnicodeData.txt b/icuSources/data/unidata/UnicodeData.txt index e8f17b62..f557cdbf 100644 --- a/icuSources/data/unidata/UnicodeData.txt +++ b/icuSources/data/unidata/UnicodeData.txt @@ -382,7 +382,7 @@ 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053 -0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;; +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 @@ -408,7 +408,7 @@ 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 -019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;; +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; @@ -565,6 +565,31 @@ 0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; 0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; 0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;; 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;; 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; @@ -592,7 +617,7 @@ 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; -026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; @@ -610,7 +635,7 @@ 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; -027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;; +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6 @@ -622,10 +647,10 @@ 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE -0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;; +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 -028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;; +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; @@ -633,7 +658,7 @@ 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; -0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;; +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; @@ -829,6 +854,11 @@ 0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; 035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; 035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; @@ -851,6 +881,9 @@ 0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; 037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;; 0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; @@ -968,6 +1001,10 @@ 03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2; 03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; 03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; @@ -1159,7 +1196,7 @@ 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE -04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;; +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; @@ -1174,6 +1211,7 @@ 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; 04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; @@ -1212,8 +1250,16 @@ 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE 0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; 0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; @@ -1230,6 +1276,10 @@ 050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C 050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; 050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; @@ -1333,6 +1383,7 @@ 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;; @@ -1356,6 +1407,7 @@ 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;; @@ -1366,6 +1418,9 @@ 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; @@ -1402,6 +1457,7 @@ 0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;; 0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;; 0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;; +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; 060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; @@ -1413,6 +1469,7 @@ 0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; 0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; @@ -1465,6 +1522,12 @@ 0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; 0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; 0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; @@ -1702,6 +1765,36 @@ 074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; 074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; 074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; @@ -1752,6 +1845,65 @@ 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; @@ -1857,6 +2009,11 @@ 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; @@ -1918,6 +2075,7 @@ 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; @@ -2221,6 +2379,7 @@ 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; @@ -2237,6 +2396,7 @@ 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; @@ -2409,6 +2569,8 @@ 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -2419,6 +2581,8 @@ 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;; +0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; @@ -2787,10 +2951,10 @@ 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; -0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;; -0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;; -0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;; -0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;; +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;; +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;; +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;; +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; @@ -2922,6 +3086,8 @@ 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;; +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;; +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; @@ -3000,44 +3166,44 @@ 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; -10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;; -10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;; -10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;; -10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;; -10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;; -10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;; -10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;; -10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;; -10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;; -10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;; -10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;; -10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;; -10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;; -10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;; -10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;; -10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;; -10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;; -10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;; -10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;; -10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;; -10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;; -10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;; -10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;; -10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;; -10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;; -10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;; -10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;; -10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;; -10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;; -10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;; -10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;; -10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;; +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00; +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01; +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02; +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03; +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04; +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05; +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06; +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07; +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08; +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09; +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A; +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B; +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C; +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D; +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E; +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F; +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10; +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11; +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12; +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13; +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14; +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15; +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16; +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17; +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18; +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19; +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A; +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B; +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C; +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D; +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E; +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F; +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20; +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21; +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22; +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23; +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24; +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25; 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; @@ -3079,7 +3245,10 @@ 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; 10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;; 10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;; +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;; +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;; 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; @@ -3327,6 +3496,7 @@ 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; @@ -3390,6 +3560,7 @@ 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; @@ -3446,6 +3617,7 @@ 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; @@ -3482,6 +3654,7 @@ 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; @@ -3506,6 +3679,7 @@ 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; @@ -3536,6 +3710,7 @@ 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; @@ -3567,6 +3742,7 @@ 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; @@ -3579,6 +3755,7 @@ 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; @@ -3618,6 +3795,7 @@ 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; @@ -3637,6 +3815,8 @@ 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; @@ -3645,15 +3825,15 @@ 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; -1369;ETHIOPIC DIGIT ONE;Nd;0;L;;;1;1;N;;;;; -136A;ETHIOPIC DIGIT TWO;Nd;0;L;;;2;2;N;;;;; -136B;ETHIOPIC DIGIT THREE;Nd;0;L;;;3;3;N;;;;; -136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;;4;4;N;;;;; -136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;;5;5;N;;;;; -136E;ETHIOPIC DIGIT SIX;Nd;0;L;;;6;6;N;;;;; -136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;;7;7;N;;;;; -1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;;8;8;N;;;;; -1371;ETHIOPIC DIGIT NINE;Nd;0;L;;;9;9;N;;;;; +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; @@ -3665,6 +3845,32 @@ 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; 13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; @@ -4407,8 +4613,8 @@ 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; -169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;; -169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;; +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; @@ -4941,6 +5147,86 @@ 1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; 1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; 1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;; +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;; +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;; +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;; +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;; +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;; +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;; +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;; +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;; +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;; +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;; +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;; +19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;; 19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; 19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; 19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; @@ -4973,6 +5259,157 @@ 19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; 19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; 19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;; +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;; +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;; +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;; +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;; +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;; +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;; +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;; +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;; +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;; +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;; +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;; +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;; +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;; +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;; +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;; +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;; +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;; +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;; +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;; +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;; +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;; +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;; +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;; +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;; +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;; +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;; +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;; +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;; +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;; +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;; +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;; +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;; +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;; +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;; +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;; +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;; +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;; +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;; +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;; +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;; +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;; +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;; +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;; +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;; +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;; +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;; +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;; +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;; +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;; +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;; +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;; +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;; +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;; +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;; +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;; +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;; +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;; +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; @@ -5081,6 +5518,103 @@ 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;; 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;; 1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;; +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;;; +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;; +1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;; +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;; +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;; +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;; +1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;; +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;; +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;; +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;; +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;; +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;; +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;; +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;; +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;; +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;; +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;; +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;; +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;; +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;; +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;; +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;; +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;; +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;; +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;; +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;; +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;; +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;; +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;; +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;; +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;; +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;; +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;; +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;; +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;; +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;; +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;; +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;; +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; @@ -5584,14 +6118,14 @@ 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; -2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; -2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; -201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; -201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; -201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; -201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; -201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; -201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; +2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;Y;SINGLE TURNED COMMA QUOTATION MARK;;;; +2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;Y;SINGLE COMMA QUOTATION MARK;;;; +201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;Y;LOW SINGLE COMMA QUOTATION MARK;;;; +201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;Y;SINGLE REVERSED COMMA QUOTATION MARK;;;; +201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;Y;DOUBLE TURNED COMMA QUOTATION MARK;;;; +201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;Y;DOUBLE COMMA QUOTATION MARK;;;; +201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;Y;LOW DOUBLE COMMA QUOTATION MARK;;;; +201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;Y;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; @@ -5607,7 +6141,7 @@ 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; -202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;; +202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; @@ -5645,7 +6179,16 @@ 2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; 2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;; +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; +205D;TRICOLON;Po;0;ON;;;;;N;;;;; +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; 2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; @@ -5665,8 +6208,8 @@ 2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; -207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;; -207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;; +207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; @@ -5681,11 +6224,16 @@ 2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; -208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;; -208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;; +208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;; +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;; +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;; +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;; +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; @@ -5704,6 +6252,10 @@ 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; 20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -5731,6 +6283,11 @@ 20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; 20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;; @@ -5781,7 +6338,7 @@ 212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;; -2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;; +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; 2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; @@ -5791,6 +6348,7 @@ 2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;; +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; @@ -5806,6 +6364,9 @@ 2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; 214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; +214C;PER SIGN;So;0;ON;;;;;N;;;;; +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; @@ -5854,7 +6415,8 @@ 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; -2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;; +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; @@ -5985,7 +6547,7 @@ 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; -2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;; +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; @@ -6403,9 +6965,9 @@ 23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; 23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; -23B4;TOP SQUARE BRACKET;Ps;0;ON;;;;;N;;;;; -23B5;BOTTOM SQUARE BRACKET;Pe;0;ON;;;;;N;;;;; -23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;Po;0;ON;;;;;N;;;;; +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; 23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; @@ -6432,6 +6994,29 @@ 23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; 23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; 23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; +23DB;FUSE;So;0;ON;;;;;N;;;;; +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; +23E5;FLATNESS;So;0;ON;;;;;N;;;;; +23E6;AC CURRENT;So;0;ON;;;;;N;;;;; +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; @@ -6922,6 +7507,7 @@ 2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; 2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; +2618;SHAMROCK;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; @@ -7023,6 +7609,8 @@ 267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; 2680;DIE FACE-1;So;0;ON;;;;;N;;;;; 2681;DIE FACE-2;So;0;ON;;;;;N;;;;; 2682;DIE FACE-3;So;0;ON;;;;;N;;;;; @@ -7041,8 +7629,36 @@ 268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; 2690;WHITE FLAG;So;0;ON;;;;;N;;;;; 2691;BLACK FLAG;So;0;ON;;;;;N;;;;; +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; +2693;ANCHOR;So;0;ON;;;;;N;;;;; +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; +2696;SCALES;So;0;ON;;;;;N;;;;; +2697;ALEMBIC;So;0;ON;;;;;N;;;;; +2698;FLOWER;So;0;ON;;;;;N;;;;; +2699;GEAR;So;0;ON;;;;;N;;;;; +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; 26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; 26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; +26B0;COFFIN;So;0;ON;;;;;N;;;;; +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; +26B2;NEUTER;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; @@ -7217,6 +7833,17 @@ 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;N;;;;; +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;N;;;;; +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; 27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; 27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; 27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; @@ -8043,6 +8670,446 @@ 2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;; +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;; +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;; +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;; +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;; +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; @@ -8413,9 +9480,9 @@ 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; -301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; -301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; -301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; +301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;Y;;;;; +301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;Y;;;;; +301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;Y;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; @@ -8632,7 +9699,7 @@ 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; -30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;; +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; @@ -8811,6 +9878,22 @@ 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; @@ -8940,6 +10023,7 @@ 327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;; 327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;; +327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;; @@ -9391,7 +10475,7 @@ 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;; -9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;; +9FBB;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; @@ -9413,7 +10497,7 @@ A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; -A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;; +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; @@ -10612,6 +11696,135 @@ A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; +A802;SYLOTI NAGRI SIGN DVISVARA;Mc;0;NSM;;;;;N;;;;; +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;; D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;; D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;; @@ -10626,8 +11839,60 @@ F802;<Apple Corporate Use symbols and other, First>;So;0;ON;;;;;N;;;;; F86F;<Apple Corporate Use symbols and other, Last>;So;0;ON;;;;;N;;;;; F870;<Apple Corporate Use transcoding hints, First>;Mn;0;NSM;;;;;N;;;;; F87F;<Apple Corporate Use transcoding hints, Last>;Mn;0;NSM;;;;;N;;;;; -F880;<Apple Corporate Use mostly deprecated, First>;So;0;ON;;;;;N;;;;; -F8FF;<Apple Corporate Use mostly deprecated, Last>;So;0;ON;;;;;N;;;;; +F880;Apple Corporate deprecated metrics char;So;0;L;;;;;N;;;;; +F881;Apple Corporate deprecated metrics char;So;0;L;;;;;N;;;;; +F882;Apple Corporate Arabic ligature;Lo;0;AL;;;;;N;;;;; +F883;Apple Corporate deprecated Arabic rial;Sc;0;R;;;;;N;;;;; +F884;<Apple Corporate deprecated Thai forms, First>;Mn;0;NSM;;;;;N;;;;; +F889;<Apple Corporate deprecated Thai forms, Last>;Mn;0;NSM;;;;;N;;;;; +F88A;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F88B;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F88C;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F88D;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F88E;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F88F;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F890;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F891;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F892;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F893;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F894;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F895;Apple Corporate deprecated Thai form;Mn;107;NSM;;;;;N;;;;; +F896;<Apple Corporate deprecated Thai forms, First>;Mn;0;NSM;;;;;N;;;;; +F899;<Apple Corporate deprecated Thai forms, Last>;Mn;0;NSM;;;;;N;;;;; +F89A;<Apple Corporate mostly deprecated Hebrew misc, First>;Lo;0;R;;;;;N;;;;; +F89E;<Apple Corporate mostly deprecated Hebrew misc, Last>;Lo;0;R;;;;;N;;;;; +F89F;Apple Corporate deprecated Hebrew misc;Mn;18;NSM;;;;;N;;;;; +F8A0;Apple Corporate deprecated Euro;Sc;0;ET;;;;;N;;;;; +F8A1;Apple Corporate deprecated Japanese digit zero full stop;No;0;EN;;;0;0;N;;;;; +F8A2;Apple Corporate deprecated Japanese roman numeral thirteen;Nl;0;L;;;;13;N;;;;; +F8A3;Apple Corporate deprecated Japanese roman numeral fourteen;Nl;0;L;;;;14;N;;;;; +F8A4;Apple Corporate deprecated Japanese roman numeral fifteen;Nl;0;L;;;;15;N;;;;; +F8A5;Apple Corporate deprecated Japanese small roman numeral thirteen;Nl;0;L;;;;13;N;;;;; +F8A6;Apple Corporate deprecated Japanese small roman numeral fourteen;Nl;0;L;;;;14;N;;;;; +F8A7;Apple Corporate deprecated Japanese small roman numeral fifteen;Nl;0;L;;;;15;N;;;;; +F8A8;<Apple Corporate deprecated Japanese symbols, First>;So;0;L;;;;;N;;;;; +F8AC;<Apple Corporate deprecated Japanese symbols, Last>;So;0;L;;;;;N;;;;; +F8AD;<Apple Corporate deprecated Japanese arrows, First>;So;0;ON;;;;;N;;;;; +F8B1;<Apple Corporate deprecated Japanese arrows, Last>;So;0;ON;;;;;N;;;;; +F8B2;Apple Corporate deprecated Japanese symbol;So;0;L;;;;;N;;;;; +F8B3;Apple Corporate deprecated Japanese symbol;So;0;L;;;;;N;;;;; +F8B4;Apple Corporate deprecated Japanese punct;Pe;0;ON;;;;;N;;;;; +F8B5;<Apple Corporate deprecated Japanese punct, First>;Po;0;ON;;;;;N;;;;; +F8B7;<Apple Corporate deprecated Japanese punct, Last>;Po;0;ON;;;;;N;;;;; +F8B8;Apple Corporate deprecated kana form;Lm;0;L;;;;;N;;;;; +F8B9;Apple Corporate deprecated Japanese punct;Pd;0;ON;;;;;N;;;;; +F8BA;Apple Corporate deprecated Japanese punct;Pd;0;ON;;;;;N;;;;; +F8BB;Apple Corporate deprecated Japanese punct;Po;0;ON;;;;;N;;;;; +F8BC;Apple Corporate deprecated Japanese punct;Sm;0;ON;;;;;N;;;;; +F8BD;Apple Corporate deprecated Japanese punct;Sm;0;ON;;;;;N;;;;; +F8BE;Apple Corporate deprecated Japanese punct;Ps;0;ON;;;;;N;;;;; +F8BF;Apple Corporate deprecated Japanese punct;Pe;0;ON;;;;;N;;;;; +F8C0;Apple Corporate deprecated Japanese punct;Sm;0;ON;;;;;N;;;;; +F8C1;<Apple Corporate deprecated kana forms, First>;Lo;0;L;;;;;N;;;;; +F8D6;<Apple Corporate deprecated kana forms, Last>;Lo;0;L;;;;;N;;;;; +F8D7;<Apple Corporate deprecated symbols, First>;So;0;ON;;;;;N;;;;; +F8FE;<Apple Corporate deprecated symbols, Last>;So;0;ON;;;;;N;;;;; +F8FF;Apple Corporate logo;So;0;ON;;;;;N;;;;; F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; @@ -10989,6 +12254,112 @@ FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;; @@ -11013,7 +12384,7 @@ FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;; -FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;; +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; @@ -11658,6 +13029,16 @@ FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;; +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;; +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;; +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;; +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;; +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;; +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;; +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;; +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;; +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; @@ -11702,19 +13083,19 @@ FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;; -FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;; -FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;; -FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;; -FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;; -FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;; -FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;; +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;; -FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;; -FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;; -FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;; -FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;; +FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;; +FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;; +FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;; +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;; @@ -11871,11 +13252,11 @@ FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;; -FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;; +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;; -FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;; +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;; -FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;; +FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;; @@ -11961,7 +13342,7 @@ FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGR FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;; -FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;; +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;; @@ -12359,6 +13740,81 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; 10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; 10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; 10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; @@ -12411,7 +13867,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; 1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; 10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; -10341;GOTHIC LETTER NINETY;Lo;0;L;;;;;N;;;;; +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; 10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; 10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; 10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; @@ -12420,7 +13876,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; 10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; 10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; -1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;;N;;;;; +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; 10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; 10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; 10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; @@ -12452,6 +13908,56 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; 1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; 1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; 10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; 10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; @@ -12675,6 +14181,1080 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; 1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; 1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;; +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;; +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;; +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;; +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; @@ -13140,12 +15720,82 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; 1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; -1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;; -1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;; -1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;; -1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;; -1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;; -1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;; +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;; +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;; +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;; +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;; +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;; 1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; 1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; 1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; @@ -13227,6 +15877,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; 1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; 1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; 1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; @@ -13879,6 +16547,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;; +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;; 1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; @@ -13930,7 +16600,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -13988,7 +16658,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -14046,7 +16716,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -14104,7 +16774,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -14162,13 +16832,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;; +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;; 1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; diff --git a/icuSources/data/unidata/WordBreakProperty.txt b/icuSources/data/unidata/WordBreakProperty.txt new file mode 100644 index 00000000..78c531c7 --- /dev/null +++ b/icuSources/data/unidata/WordBreakProperty.txt @@ -0,0 +1,521 @@ +# WordBreakProperty-5.0.0.txt +# Date: 2006-06-07, 23:23:03 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Property: Word_Break + +# All code points not explicitly listed for Word_Break +# have the value Other (XX). + +# @missing: 0000..10FFFF; Other + +# ================================================ + +00AD ; Format +0600..0603 ; Format +06DD ; Format +070F ; Format +17B4..17B5 ; Format +200B ; Format +200E..200F ; Format +202A..202E ; Format +2060..2063 ; Format +206A..206F ; Format +FEFF ; Format +FFF9..FFFB ; Format +1D173..1D17A ; Format +E0001 ; Format +E0020..E007F ; Format + +# Total code points: 136 + +# ================================================ + +3031..3035 ; Katakana +309B..309C ; Katakana +30A0 ; Katakana +30A1..30FA ; Katakana +30FC..30FE ; Katakana +30FF ; Katakana +31F0..31FF ; Katakana +FF66..FF6F ; Katakana +FF70 ; Katakana +FF71..FF9D ; Katakana +FF9E..FF9F ; Katakana + +# Total code points: 176 + +# ================================================ + +0041..005A ; ALetter +0061..007A ; ALetter +00AA ; ALetter +00B5 ; ALetter +00BA ; ALetter +00C0..00D6 ; ALetter +00D8..00F6 ; ALetter +00F8..01BA ; ALetter +01BB ; ALetter +01BC..01BF ; ALetter +01C0..01C3 ; ALetter +01C4..0293 ; ALetter +0294 ; ALetter +0295..02AF ; ALetter +02B0..02C1 ; ALetter +02C6..02D1 ; ALetter +02E0..02E4 ; ALetter +02EE ; ALetter +037A ; ALetter +037B..037D ; ALetter +0386 ; ALetter +0388..038A ; ALetter +038C ; ALetter +038E..03A1 ; ALetter +03A3..03CE ; ALetter +03D0..03F5 ; ALetter +03F7..0481 ; ALetter +048A..0513 ; ALetter +0531..0556 ; ALetter +0559 ; ALetter +0561..0587 ; ALetter +05D0..05EA ; ALetter +05F0..05F2 ; ALetter +05F3 ; ALetter +0621..063A ; ALetter +0640 ; ALetter +0641..064A ; ALetter +066E..066F ; ALetter +0671..06D3 ; ALetter +06D5 ; ALetter +06E5..06E6 ; ALetter +06EE..06EF ; ALetter +06FA..06FC ; ALetter +06FF ; ALetter +0710 ; ALetter +0712..072F ; ALetter +074D..076D ; ALetter +0780..07A5 ; ALetter +07B1 ; ALetter +07CA..07EA ; ALetter +07F4..07F5 ; ALetter +07FA ; ALetter +0903 ; ALetter +0904..0939 ; ALetter +093D ; ALetter +093E..0940 ; ALetter +0949..094C ; ALetter +0950 ; ALetter +0958..0961 ; ALetter +097B..097F ; ALetter +0982..0983 ; ALetter +0985..098C ; ALetter +098F..0990 ; ALetter +0993..09A8 ; ALetter +09AA..09B0 ; ALetter +09B2 ; ALetter +09B6..09B9 ; ALetter +09BD ; ALetter +09BF..09C0 ; ALetter +09C7..09C8 ; ALetter +09CB..09CC ; ALetter +09CE ; ALetter +09DC..09DD ; ALetter +09DF..09E1 ; ALetter +09F0..09F1 ; ALetter +0A03 ; ALetter +0A05..0A0A ; ALetter +0A0F..0A10 ; ALetter +0A13..0A28 ; ALetter +0A2A..0A30 ; ALetter +0A32..0A33 ; ALetter +0A35..0A36 ; ALetter +0A38..0A39 ; ALetter +0A3E..0A40 ; ALetter +0A59..0A5C ; ALetter +0A5E ; ALetter +0A72..0A74 ; ALetter +0A83 ; ALetter +0A85..0A8D ; ALetter +0A8F..0A91 ; ALetter +0A93..0AA8 ; ALetter +0AAA..0AB0 ; ALetter +0AB2..0AB3 ; ALetter +0AB5..0AB9 ; ALetter +0ABD ; ALetter +0ABE..0AC0 ; ALetter +0AC9 ; ALetter +0ACB..0ACC ; ALetter +0AD0 ; ALetter +0AE0..0AE1 ; ALetter +0B02..0B03 ; ALetter +0B05..0B0C ; ALetter +0B0F..0B10 ; ALetter +0B13..0B28 ; ALetter +0B2A..0B30 ; ALetter +0B32..0B33 ; ALetter +0B35..0B39 ; ALetter +0B3D ; ALetter +0B40 ; ALetter +0B47..0B48 ; ALetter +0B4B..0B4C ; ALetter +0B5C..0B5D ; ALetter +0B5F..0B61 ; ALetter +0B71 ; ALetter +0B83 ; ALetter +0B85..0B8A ; ALetter +0B8E..0B90 ; ALetter +0B92..0B95 ; ALetter +0B99..0B9A ; ALetter +0B9C ; ALetter +0B9E..0B9F ; ALetter +0BA3..0BA4 ; ALetter +0BA8..0BAA ; ALetter +0BAE..0BB9 ; ALetter +0BBF ; ALetter +0BC1..0BC2 ; ALetter +0BC6..0BC8 ; ALetter +0BCA..0BCC ; ALetter +0C01..0C03 ; ALetter +0C05..0C0C ; ALetter +0C0E..0C10 ; ALetter +0C12..0C28 ; ALetter +0C2A..0C33 ; ALetter +0C35..0C39 ; ALetter +0C41..0C44 ; ALetter +0C60..0C61 ; ALetter +0C82..0C83 ; ALetter +0C85..0C8C ; ALetter +0C8E..0C90 ; ALetter +0C92..0CA8 ; ALetter +0CAA..0CB3 ; ALetter +0CB5..0CB9 ; ALetter +0CBD ; ALetter +0CBE ; ALetter +0CC0..0CC1 ; ALetter +0CC3..0CC4 ; ALetter +0CC7..0CC8 ; ALetter +0CCA..0CCB ; ALetter +0CDE ; ALetter +0CE0..0CE1 ; ALetter +0D02..0D03 ; ALetter +0D05..0D0C ; ALetter +0D0E..0D10 ; ALetter +0D12..0D28 ; ALetter +0D2A..0D39 ; ALetter +0D3F..0D40 ; ALetter +0D46..0D48 ; ALetter +0D4A..0D4C ; ALetter +0D60..0D61 ; ALetter +0D82..0D83 ; ALetter +0D85..0D96 ; ALetter +0D9A..0DB1 ; ALetter +0DB3..0DBB ; ALetter +0DBD ; ALetter +0DC0..0DC6 ; ALetter +0DD0..0DD1 ; ALetter +0DD8..0DDE ; ALetter +0DF2..0DF3 ; ALetter +0F00 ; ALetter +0F40..0F47 ; ALetter +0F49..0F6A ; ALetter +0F7F ; ALetter +0F88..0F8B ; ALetter +10A0..10C5 ; ALetter +10D0..10FA ; ALetter +10FC ; ALetter +1100..1159 ; ALetter +115F..11A2 ; ALetter +11A8..11F9 ; ALetter +1200..1248 ; ALetter +124A..124D ; ALetter +1250..1256 ; ALetter +1258 ; ALetter +125A..125D ; ALetter +1260..1288 ; ALetter +128A..128D ; ALetter +1290..12B0 ; ALetter +12B2..12B5 ; ALetter +12B8..12BE ; ALetter +12C0 ; ALetter +12C2..12C5 ; ALetter +12C8..12D6 ; ALetter +12D8..1310 ; ALetter +1312..1315 ; ALetter +1318..135A ; ALetter +1380..138F ; ALetter +13A0..13F4 ; ALetter +1401..166C ; ALetter +166F..1676 ; ALetter +1681..169A ; ALetter +16A0..16EA ; ALetter +16EE..16F0 ; ALetter +1700..170C ; ALetter +170E..1711 ; ALetter +1720..1731 ; ALetter +1740..1751 ; ALetter +1760..176C ; ALetter +176E..1770 ; ALetter +1820..1842 ; ALetter +1843 ; ALetter +1844..1877 ; ALetter +1880..18A8 ; ALetter +1900..191C ; ALetter +1923..1926 ; ALetter +1929..192B ; ALetter +1930..1931 ; ALetter +1933..1938 ; ALetter +1A00..1A16 ; ALetter +1A19..1A1B ; ALetter +1B04 ; ALetter +1B05..1B33 ; ALetter +1B35 ; ALetter +1B3B ; ALetter +1B3D..1B41 ; ALetter +1B43 ; ALetter +1B45..1B4B ; ALetter +1D00..1D2B ; ALetter +1D2C..1D61 ; ALetter +1D62..1D77 ; ALetter +1D78 ; ALetter +1D79..1D9A ; ALetter +1D9B..1DBF ; ALetter +1E00..1E9B ; ALetter +1EA0..1EF9 ; ALetter +1F00..1F15 ; ALetter +1F18..1F1D ; ALetter +1F20..1F45 ; ALetter +1F48..1F4D ; ALetter +1F50..1F57 ; ALetter +1F59 ; ALetter +1F5B ; ALetter +1F5D ; ALetter +1F5F..1F7D ; ALetter +1F80..1FB4 ; ALetter +1FB6..1FBC ; ALetter +1FBE ; ALetter +1FC2..1FC4 ; ALetter +1FC6..1FCC ; ALetter +1FD0..1FD3 ; ALetter +1FD6..1FDB ; ALetter +1FE0..1FEC ; ALetter +1FF2..1FF4 ; ALetter +1FF6..1FFC ; ALetter +2071 ; ALetter +207F ; ALetter +2090..2094 ; ALetter +2102 ; ALetter +2107 ; ALetter +210A..2113 ; ALetter +2115 ; ALetter +2119..211D ; ALetter +2124 ; ALetter +2126 ; ALetter +2128 ; ALetter +212A..212D ; ALetter +212F..2134 ; ALetter +2135..2138 ; ALetter +2139 ; ALetter +213C..213F ; ALetter +2145..2149 ; ALetter +214E ; ALetter +2160..2182 ; ALetter +2183..2184 ; ALetter +24B6..24E9 ; ALetter +2C00..2C2E ; ALetter +2C30..2C5E ; ALetter +2C60..2C6C ; ALetter +2C74..2C77 ; ALetter +2C80..2CE4 ; ALetter +2D00..2D25 ; ALetter +2D30..2D65 ; ALetter +2D6F ; ALetter +2D80..2D96 ; ALetter +2DA0..2DA6 ; ALetter +2DA8..2DAE ; ALetter +2DB0..2DB6 ; ALetter +2DB8..2DBE ; ALetter +2DC0..2DC6 ; ALetter +2DC8..2DCE ; ALetter +2DD0..2DD6 ; ALetter +2DD8..2DDE ; ALetter +3005 ; ALetter +303B ; ALetter +303C ; ALetter +3105..312C ; ALetter +3131..318E ; ALetter +31A0..31B7 ; ALetter +A000..A014 ; ALetter +A015 ; ALetter +A016..A48C ; ALetter +A717..A71A ; ALetter +A800..A801 ; ALetter +A803..A805 ; ALetter +A807..A80A ; ALetter +A80C..A822 ; ALetter +A823..A824 ; ALetter +A827 ; ALetter +A840..A873 ; ALetter +AC00..D7A3 ; ALetter +FA30..FA6A ; ALetter +FB00..FB06 ; ALetter +FB13..FB17 ; ALetter +FB1D ; ALetter +FB1F..FB28 ; ALetter +FB2A..FB36 ; ALetter +FB38..FB3C ; ALetter +FB3E ; ALetter +FB40..FB41 ; ALetter +FB43..FB44 ; ALetter +FB46..FBB1 ; ALetter +FBD3..FD3D ; ALetter +FD50..FD8F ; ALetter +FD92..FDC7 ; ALetter +FDF0..FDFB ; ALetter +FE70..FE74 ; ALetter +FE76..FEFC ; ALetter +FF21..FF3A ; ALetter +FF41..FF5A ; ALetter +FFA0..FFBE ; ALetter +FFC2..FFC7 ; ALetter +FFCA..FFCF ; ALetter +FFD2..FFD7 ; ALetter +FFDA..FFDC ; ALetter +10000..1000B ; ALetter +1000D..10026 ; ALetter +10028..1003A ; ALetter +1003C..1003D ; ALetter +1003F..1004D ; ALetter +10050..1005D ; ALetter +10080..100FA ; ALetter +10140..10174 ; ALetter +10300..1031E ; ALetter +10330..10340 ; ALetter +10341 ; ALetter +10342..10349 ; ALetter +1034A ; ALetter +10380..1039D ; ALetter +103A0..103C3 ; ALetter +103C8..103CF ; ALetter +103D1..103D5 ; ALetter +10400..1044F ; ALetter +10450..1049D ; ALetter +10800..10805 ; ALetter +10808 ; ALetter +1080A..10835 ; ALetter +10837..10838 ; ALetter +1083C ; ALetter +1083F ; ALetter +10900..10915 ; ALetter +10A00 ; ALetter +10A10..10A13 ; ALetter +10A15..10A17 ; ALetter +10A19..10A33 ; ALetter +12000..1236E ; ALetter +12400..12462 ; ALetter +1D400..1D454 ; ALetter +1D456..1D49C ; ALetter +1D49E..1D49F ; ALetter +1D4A2 ; ALetter +1D4A5..1D4A6 ; ALetter +1D4A9..1D4AC ; ALetter +1D4AE..1D4B9 ; ALetter +1D4BB ; ALetter +1D4BD..1D4C3 ; ALetter +1D4C5..1D505 ; ALetter +1D507..1D50A ; ALetter +1D50D..1D514 ; ALetter +1D516..1D51C ; ALetter +1D51E..1D539 ; ALetter +1D53B..1D53E ; ALetter +1D540..1D544 ; ALetter +1D546 ; ALetter +1D54A..1D550 ; ALetter +1D552..1D6A5 ; ALetter +1D6A8..1D6C0 ; ALetter +1D6C2..1D6DA ; ALetter +1D6DC..1D6FA ; ALetter +1D6FC..1D714 ; ALetter +1D716..1D734 ; ALetter +1D736..1D74E ; ALetter +1D750..1D76E ; ALetter +1D770..1D788 ; ALetter +1D78A..1D7A8 ; ALetter +1D7AA..1D7C2 ; ALetter +1D7C4..1D7CB ; ALetter + +# Total code points: 21149 + +# ================================================ + +0027 ; MidLetter +003A ; MidLetter +00B7 ; MidLetter +05F4 ; MidLetter +2019 ; MidLetter +2027 ; MidLetter + +# Total code points: 6 + +# ================================================ + +002C ; MidNum +002E ; MidNum +003B ; MidNum +037E ; MidNum +0589 ; MidNum +060D ; MidNum +07F8 ; MidNum +2044 ; MidNum +FE10 ; MidNum +FE13..FE14 ; MidNum + +# Total code points: 11 + +# ================================================ + +0030..0039 ; Numeric +0660..0669 ; Numeric +066B..066C ; Numeric +06F0..06F9 ; Numeric +07C0..07C9 ; Numeric +0966..096F ; Numeric +09E6..09EF ; Numeric +0A66..0A6F ; Numeric +0AE6..0AEF ; Numeric +0B66..0B6F ; Numeric +0BE6..0BEF ; Numeric +0C66..0C6F ; Numeric +0CE6..0CEF ; Numeric +0D66..0D6F ; Numeric +0E50..0E59 ; Numeric +0ED0..0ED9 ; Numeric +0F20..0F29 ; Numeric +1040..1049 ; Numeric +17E0..17E9 ; Numeric +1810..1819 ; Numeric +1946..194F ; Numeric +19D0..19D9 ; Numeric +1B50..1B59 ; Numeric +104A0..104A9 ; Numeric +1D7CE..1D7FF ; Numeric + +# Total code points: 282 + +# ================================================ + +005F ; ExtendNumLet +203F..2040 ; ExtendNumLet +2054 ; ExtendNumLet +FE33..FE34 ; ExtendNumLet +FE4D..FE4F ; ExtendNumLet +FF3F ; ExtendNumLet + +# Total code points: 10 + +# EOF diff --git a/icuSources/data/unidata/base_unidata/DerivedBidiClass.txt b/icuSources/data/unidata/base_unidata/DerivedBidiClass.txt new file mode 100644 index 00000000..d94a3f10 --- /dev/null +++ b/icuSources/data/unidata/base_unidata/DerivedBidiClass.txt @@ -0,0 +1,1452 @@ +# DerivedBidiClass-5.0.0.txt +# Date: 2006-03-09, 23:13:34 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Bidi Class (listing UnicodeData.txt, field 4: see UCD.html) +# Unlike other properties, unassigned code points in blocks +# reserved for right-to-left scripts are given either types R or AL. +# The unassigned characters that default to R are: +# Hebrew, Cypriot_Syllabary, Kharoshthi, and the ranges \u07C0-\u08FF +# \uFB1D-\uFB4F \U00010840-\U000109FF \U00010A60-\U00010FFF +# The unassigned characters that default to AL are: +# Arabic, Syriac, Arabic_Supplement, Thaana, Arabic_Presentation_Forms_A, +# Arabic_Presentation_Forms_B, minus the Noncharacter_Code_Points +# For all other cases: + +# All code points not explicitly listed for Bidi_Class +# have the value Left_To_Right (L). + +# @missing: 0000..10FFFF; Left_To_Right + +# ================================================ + +# Bidi_Class=Left_To_Right + +0041..005A ; L # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; L # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; L # L& FEMININE ORDINAL INDICATOR +00B5 ; L # L& MICRO SIGN +00BA ; L # L& MASCULINE ORDINAL INDICATOR +00C0..00D6 ; L # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; L # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; L # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; L # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; L # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; L # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; L # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294 ; L # Lo LATIN LETTER GLOTTAL STOP +0295..02AF ; L # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02B8 ; L # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y +02BB..02C1 ; L # Lm [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP +02D0..02D1 ; L # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; L # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EE ; L # Lm MODIFIER LETTER DOUBLE APOSTROPHE +037A ; L # Lm GREEK YPOGEGRAMMENI +037B..037D ; L # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +0386 ; L # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; L # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; L # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; L # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03CE ; L # L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS +03D0..03F5 ; L # L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; L # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +0482 ; L # So CYRILLIC THOUSANDS SIGN +048A..0513 ; L # L& [138] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH HOOK +0531..0556 ; L # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; L # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +055A..055F ; L # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK +0561..0587 ; L # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN +0589 ; L # Po ARMENIAN FULL STOP +0903 ; L # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; L # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093D ; L # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; L # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0949..094C ; L # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +0950 ; L # Lo DEVANAGARI OM +0958..0961 ; L # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0964..0965 ; L # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA +0966..096F ; L # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +0970 ; L # Po DEVANAGARI ABBREVIATION SIGN +097B..097F ; L # Lo [5] DEVANAGARI LETTER GGA..DEVANAGARI LETTER BBA +0982..0983 ; L # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; L # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; L # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; L # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; L # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; L # Lo BENGALI LETTER LA +09B6..09B9 ; L # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BD ; L # Lo BENGALI SIGN AVAGRAHA +09BE..09C0 ; L # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C7..09C8 ; L # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; L # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CE ; L # Lo BENGALI LETTER KHANDA TA +09D7 ; L # Mc BENGALI AU LENGTH MARK +09DC..09DD ; L # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; L # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E6..09EF ; L # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +09F0..09F1 ; L # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09F4..09F9 ; L # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN +09FA ; L # So BENGALI ISSHAR +0A03 ; L # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; L # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; L # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; L # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; L # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; L # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; L # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; L # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3E..0A40 ; L # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A59..0A5C ; L # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; L # Lo GURMUKHI LETTER FA +0A66..0A6F ; L # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0A72..0A74 ; L # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A83 ; L # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; L # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; L # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; L # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; L # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; L # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; L # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABD ; L # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; L # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC9 ; L # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; L # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0AD0 ; L # Lo GUJARATI OM +0AE0..0AE1 ; L # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE6..0AEF ; L # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0B02..0B03 ; L # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; L # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; L # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; L # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; L # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; L # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; L # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3D ; L # Lo ORIYA SIGN AVAGRAHA +0B3E ; L # Mc ORIYA VOWEL SIGN AA +0B40 ; L # Mc ORIYA VOWEL SIGN II +0B47..0B48 ; L # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; L # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B57 ; L # Mc ORIYA AU LENGTH MARK +0B5C..0B5D ; L # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; L # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B66..0B6F ; L # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0B70 ; L # So ORIYA ISSHAR +0B71 ; L # Lo ORIYA LETTER WA +0B83 ; L # Lo TAMIL SIGN VISARGA +0B85..0B8A ; L # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; L # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; L # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; L # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; L # Lo TAMIL LETTER JA +0B9E..0B9F ; L # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; L # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; L # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; L # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBE..0BBF ; L # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC1..0BC2 ; L # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; L # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; L # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BD7 ; L # Mc TAMIL AU LENGTH MARK +0BE6..0BEF ; L # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0BF0..0BF2 ; L # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND +0C01..0C03 ; L # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C05..0C0C ; L # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; L # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; L # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C33 ; L # Lo [10] TELUGU LETTER PA..TELUGU LETTER LLA +0C35..0C39 ; L # Lo [5] TELUGU LETTER VA..TELUGU LETTER HA +0C41..0C44 ; L # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C60..0C61 ; L # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C66..0C6F ; L # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C82..0C83 ; L # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C85..0C8C ; L # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; L # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; L # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; L # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; L # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBD ; L # Lo KANNADA SIGN AVAGRAHA +0CBE ; L # Mc KANNADA VOWEL SIGN AA +0CBF ; L # Mn KANNADA VOWEL SIGN I +0CC0..0CC4 ; L # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC6 ; L # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; L # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; L # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CD5..0CD6 ; L # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CDE ; L # Lo KANNADA LETTER FA +0CE0..0CE1 ; L # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE6..0CEF ; L # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0D02..0D03 ; L # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D05..0D0C ; L # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; L # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D28 ; L # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA +0D2A..0D39 ; L # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA +0D3E..0D40 ; L # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D46..0D48 ; L # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; L # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D57 ; L # Mc MALAYALAM AU LENGTH MARK +0D60..0D61 ; L # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL +0D66..0D6F ; L # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0D82..0D83 ; L # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; L # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; L # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; L # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; L # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; L # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DCF..0DD1 ; L # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD8..0DDF ; L # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DF2..0DF3 ; L # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0DF4 ; L # Po SINHALA PUNCTUATION KUNDDALIYA +0E01..0E30 ; L # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E32..0E33 ; L # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E40..0E45 ; L # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; L # Lm THAI CHARACTER MAIYAMOK +0E4F ; L # Po THAI CHARACTER FONGMAN +0E50..0E59 ; L # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE +0E5A..0E5B ; L # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT +0E81..0E82 ; L # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; L # Lo LAO LETTER KHO TAM +0E87..0E88 ; L # Lo [2] LAO LETTER NGO..LAO LETTER CO +0E8A ; L # Lo LAO LETTER SO TAM +0E8D ; L # Lo LAO LETTER NYO +0E94..0E97 ; L # Lo [4] LAO LETTER DO..LAO LETTER THO TAM +0E99..0E9F ; L # Lo [7] LAO LETTER NO..LAO LETTER FO SUNG +0EA1..0EA3 ; L # Lo [3] LAO LETTER MO..LAO LETTER LO LING +0EA5 ; L # Lo LAO LETTER LO LOOT +0EA7 ; L # Lo LAO LETTER WO +0EAA..0EAB ; L # Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG +0EAD..0EB0 ; L # Lo [4] LAO LETTER O..LAO VOWEL SIGN A +0EB2..0EB3 ; L # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EBD ; L # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; L # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; L # Lm LAO KO LA +0ED0..0ED9 ; L # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE +0EDC..0EDD ; L # Lo [2] LAO HO NO..LAO HO MO +0F00 ; L # Lo TIBETAN SYLLABLE OM +0F01..0F03 ; L # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA +0F04..0F12 ; L # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD +0F13..0F17 ; L # So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS +0F1A..0F1F ; L # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG +0F20..0F29 ; L # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +0F2A..0F33 ; L # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO +0F34 ; L # So TIBETAN MARK BSDUS RTAGS +0F36 ; L # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN +0F38 ; L # So TIBETAN MARK CHE MGO +0F3E..0F3F ; L # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F40..0F47 ; L # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6A ; L # Lo [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA +0F7F ; L # Mc TIBETAN SIGN RNAM BCAD +0F85 ; L # Po TIBETAN MARK PALUTA +0F88..0F8B ; L # Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS +0FBE..0FC5 ; L # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE +0FC7..0FCC ; L # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCF ; L # So TIBETAN SIGN RDEL NAG GSUM +0FD0..0FD1 ; L # Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN +1000..1021 ; L # Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A +1023..1027 ; L # Lo [5] MYANMAR LETTER I..MYANMAR LETTER E +1029..102A ; L # Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU +102C ; L # Mc MYANMAR VOWEL SIGN AA +1031 ; L # Mc MYANMAR VOWEL SIGN E +1038 ; L # Mc MYANMAR SIGN VISARGA +1040..1049 ; L # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +104A..104F ; L # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE +1050..1055 ; L # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; L # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +10A0..10C5 ; L # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10D0..10FA ; L # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FB ; L # Po GEORGIAN PARAGRAPH SEPARATOR +10FC ; L # Lm MODIFIER LETTER GEORGIAN NAR +1100..1159 ; L # Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH +115F..11A2 ; L # Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA +11A8..11F9 ; L # Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH +1200..1248 ; L # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA +124A..124D ; L # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; L # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; L # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; L # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; L # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; L # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; L # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; L # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; L # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; L # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; L # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; L # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; L # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; L # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; L # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1360 ; L # So ETHIOPIC SECTION MARK +1361..1368 ; L # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR +1369..137C ; L # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND +1380..138F ; L # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +13A0..13F4 ; L # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV +1401..166C ; L # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166D..166E ; L # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP +166F..1676 ; L # Lo [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA +1681..169A ; L # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; L # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EB..16ED ; L # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION +16EE..16F0 ; L # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +1700..170C ; L # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA +170E..1711 ; L # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1720..1731 ; L # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1735..1736 ; L # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION +1740..1751 ; L # Lo [18] BUHID LETTER A..BUHID LETTER HA +1760..176C ; L # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; L # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1780..17B3 ; L # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B4..17B5 ; L # Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B6 ; L # Mc KHMER VOWEL SIGN AA +17BE..17C5 ; L # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C7..17C8 ; L # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17D4..17D6 ; L # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH +17D7 ; L # Lm KHMER SIGN LEK TOO +17D8..17DA ; L # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT +17DC ; L # Lo KHMER SIGN AVAKRAHASANYA +17E0..17E9 ; L # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +1810..1819 ; L # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1820..1842 ; L # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; L # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1877 ; L # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA +1880..18A8 ; L # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA +1900..191C ; L # Lo [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA +1923..1926 ; L # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1930..1931 ; L # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1933..1938 ; L # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1946..194F ; L # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +1950..196D ; L # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; L # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19A9 ; L # Lo [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA +19B0..19C0 ; L # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY +19C1..19C7 ; L # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B +19C8..19C9 ; L # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; L # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +1A00..1A16 ; L # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A19..1A1B ; L # Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE +1A1E..1A1F ; L # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION +1B04 ; L # Mc BALINESE SIGN BISAH +1B05..1B33 ; L # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B35 ; L # Mc BALINESE VOWEL SIGN TEDUNG +1B3B ; L # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3D..1B41 ; L # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B43..1B44 ; L # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B45..1B4B ; L # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B50..1B59 ; L # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B5A..1B60 ; L # Po [7] BALINESE PANTI..BALINESE PAMENENG +1B61..1B6A ; L # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE +1B74..1B7C ; L # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1D00..1D2B ; L # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D61 ; L # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI +1D62..1D77 ; L # L& [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G +1D78 ; L # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; L # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; L # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E00..1E9B ; L # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA0..1EF9 ; L # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE +1F00..1F15 ; L # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; L # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; L # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; L # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; L # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; L # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; L # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; L # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; L # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; L # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; L # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; L # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; L # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; L # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; L # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; L # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; L # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; L # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; L # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +200E ; L # Cf LEFT-TO-RIGHT MARK +2071 ; L # L& SUPERSCRIPT LATIN SMALL LETTER I +207F ; L # L& SUPERSCRIPT LATIN SMALL LETTER N +2090..2094 ; L # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA +2102 ; L # L& DOUBLE-STRUCK CAPITAL C +2107 ; L # L& EULER CONSTANT +210A..2113 ; L # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; L # L& DOUBLE-STRUCK CAPITAL N +2119..211D ; L # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; L # L& DOUBLE-STRUCK CAPITAL Z +2126 ; L # L& OHM SIGN +2128 ; L # L& BLACK-LETTER CAPITAL Z +212A..212D ; L # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212F..2134 ; L # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; L # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; L # L& INFORMATION SOURCE +213C..213F ; L # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; L # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; L # L& TURNED SMALL F +2160..2182 ; L # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; L # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2336..237A ; L # So [69] APL FUNCTIONAL SYMBOL I-BEAM..APL FUNCTIONAL SYMBOL ALPHA +2395 ; L # So APL FUNCTIONAL SYMBOL QUAD +249C..24E9 ; L # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +26AC ; L # So MEDIUM SMALL WHITE CIRCLE +2800..28FF ; L # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 +2C00..2C2E ; L # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C30..2C5E ; L # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C60..2C6C ; L # L& [13] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SMALL LETTER Z WITH DESCENDER +2C74..2C77 ; L # L& [4] LATIN SMALL LETTER V WITH CURL..LATIN SMALL LETTER TAILLESS PHI +2C80..2CE4 ; L # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI +2D00..2D25 ; L # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D30..2D65 ; L # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ +2D6F ; L # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D80..2D96 ; L # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; L # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; L # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; L # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; L # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; L # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; L # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; L # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; L # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +3005 ; L # Lm IDEOGRAPHIC ITERATION MARK +3006 ; L # Lo IDEOGRAPHIC CLOSING MARK +3007 ; L # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; L # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3031..3035 ; L # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3038..303A ; L # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; L # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; L # Lo MASU MARK +3041..3096 ; L # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309D..309E ; L # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; L # Lo HIRAGANA DIGRAPH YORI +30A1..30FA ; L # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FC..30FE ; L # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; L # Lo KATAKANA DIGRAPH KOTO +3105..312C ; L # Lo [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN +3131..318E ; L # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +3190..3191 ; L # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK +3192..3195 ; L # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3196..319F ; L # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +31A0..31B7 ; L # Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H +31F0..31FF ; L # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3200..321C ; L # So [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U +3220..3229 ; L # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3243 ; L # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH +3260..327B ; L # So [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A +327F ; L # So KOREAN STANDARD SYMBOL +3280..3289 ; L # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +328A..32B0 ; L # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32C0..32CB ; L # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +32D0..32FE ; L # So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO +3300..3376 ; L # So [119] SQUARE APAATO..SQUARE PC +337B..33DD ; L # So [99] SQUARE ERA NAME HEISEI..SQUARE WB +33E0..33FE ; L # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +3400..4DB5 ; L # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 +4E00..9FBB ; L # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB +A000..A014 ; L # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +A015 ; L # Lm YI SYLLABLE WU +A016..A48C ; L # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A800..A801 ; L # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I +A803..A805 ; L # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; L # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80C..A822 ; L # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; L # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A827 ; L # Mc SYLOTI NAGRI VOWEL SIGN OO +A840..A873 ; L # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +AC00..D7A3 ; L # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +E000..F8FF ; L # Co [6400] <private-use-E000>..<private-use-F8FF> +F900..FA2D ; L # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D +FA30..FA6A ; L # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A +FA70..FAD9 ; L # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; L # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; L # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF21..FF3A ; L # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; L # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF66..FF6F ; L # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; L # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; L # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; L # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; L # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; L # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; L # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; L # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; L # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; L # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; L # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; L # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; L # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; L # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; L # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10100 ; L # Po AEGEAN WORD SEPARATOR LINE +10102 ; L # So AEGEAN CHECK MARK +10107..10133 ; L # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND +10137..1013F ; L # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT +10300..1031E ; L # Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU +10320..10323 ; L # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +10330..10340 ; L # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA +10341 ; L # Nl GOTHIC LETTER NINETY +10342..10349 ; L # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; L # Nl GOTHIC LETTER NINE HUNDRED +10380..1039D ; L # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +1039F ; L # Po UGARITIC WORD DIVIDER +103A0..103C3 ; L # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; L # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D0 ; L # Po OLD PERSIAN WORD DIVIDER +103D1..103D5 ; L # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; L # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; L # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104A0..104A9 ; L # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +12000..1236E ; L # Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM +12400..12462 ; L # Nl [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER +12470..12473 ; L # Po [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON +1D000..1D0F5 ; L # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D100..1D126 ; L # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 +1D12A..1D164 ; L # So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D165..1D166 ; L # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D16A..1D16C ; L # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 +1D16D..1D172 ; L # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D183..1D184 ; L # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN +1D18C..1D1A9 ; L # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH +1D1AE..1D1DD ; L # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS +1D360..1D371 ; L # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE +1D400..1D454 ; L # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; L # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; L # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; L # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; L # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; L # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; L # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; L # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; L # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; L # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; L # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; L # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; L # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; L # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; L # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; L # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; L # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; L # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; L # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; L # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; L # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; L # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; L # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; L # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; L # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; L # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; L # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; L # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; L # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; L # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; L # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; L # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; L # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; L # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; L # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; L # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; L # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; L # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; L # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; L # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +20000..2A6D6 ; L # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 +2F800..2FA1D ; L # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +F0000..FFFFD ; L # Co [65534] <private-use-F0000>..<private-use-FFFFD> +100000..10FFFD; L # Co [65534] <private-use-100000>..<private-use-10FFFD> + +# The above property value applies to 871403 code points not listed here. +# Total code points: 1102227 + +# ================================================ + +# Bidi_Class=Right_To_Left + +0590 ; R # Cn <reserved-0590> +05BE ; R # Po HEBREW PUNCTUATION MAQAF +05C0 ; R # Po HEBREW PUNCTUATION PASEQ +05C3 ; R # Po HEBREW PUNCTUATION SOF PASUQ +05C6 ; R # Po HEBREW PUNCTUATION NUN HAFUKHA +05C8..05CF ; R # Cn [8] <reserved-05C8>..<reserved-05CF> +05D0..05EA ; R # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EB..05EF ; R # Cn [5] <reserved-05EB>..<reserved-05EF> +05F0..05F2 ; R # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD +05F3..05F4 ; R # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM +05F5..05FF ; R # Cn [11] <reserved-05F5>..<reserved-05FF> +07C0..07C9 ; R # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; R # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07F4..07F5 ; R # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; R # Lm NKO LAJANYALAN +07FB..08FF ; R # Cn [261] <reserved-07FB>..<reserved-08FF> +200F ; R # Cf RIGHT-TO-LEFT MARK +FB1D ; R # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; R # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; R # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB37 ; R # Cn <reserved-FB37> +FB38..FB3C ; R # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3D ; R # Cn <reserved-FB3D> +FB3E ; R # Lo HEBREW LETTER MEM WITH DAGESH +FB3F ; R # Cn <reserved-FB3F> +FB40..FB41 ; R # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB42 ; R # Cn <reserved-FB42> +FB43..FB44 ; R # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB45 ; R # Cn <reserved-FB45> +FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED +10800..10805 ; R # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10806..10807 ; R # Cn [2] <reserved-10806>..<reserved-10807> +10808 ; R # Lo CYPRIOT SYLLABLE JO +10809 ; R # Cn <reserved-10809> +1080A..10835 ; R # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10836 ; R # Cn <reserved-10836> +10837..10838 ; R # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +10839..1083B ; R # Cn [3] <reserved-10839>..<reserved-1083B> +1083C ; R # Lo CYPRIOT SYLLABLE ZA +1083D..1083E ; R # Cn [2] <reserved-1083D>..<reserved-1083E> +1083F ; R # Lo CYPRIOT SYLLABLE ZO +10840..108FF ; R # Cn [192] <reserved-10840>..<reserved-108FF> +10900..10915 ; R # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10916..10919 ; R # No [4] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER ONE HUNDRED +1091A..1091E ; R # Cn [5] <reserved-1091A>..<reserved-1091E> +10920..109FF ; R # Cn [224] <reserved-10920>..<reserved-109FF> +10A00 ; R # Lo KHAROSHTHI LETTER A +10A04 ; R # Cn <reserved-10A04> +10A07..10A0B ; R # Cn [5] <reserved-10A07>..<reserved-10A0B> +10A10..10A13 ; R # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A14 ; R # Cn <reserved-10A14> +10A15..10A17 ; R # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A18 ; R # Cn <reserved-10A18> +10A19..10A33 ; R # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA +10A34..10A37 ; R # Cn [4] <reserved-10A34>..<reserved-10A37> +10A3B..10A3E ; R # Cn [4] <reserved-10A3B>..<reserved-10A3E> +10A40..10A47 ; R # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND +10A48..10A4F ; R # Cn [8] <reserved-10A48>..<reserved-10A4F> +10A50..10A58 ; R # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +10A59..10FFF ; R # Cn [1447] <reserved-10A59>..<reserved-10FFF> + +# Total code points: 2452 + +# ================================================ + +# Bidi_Class=European_Number + +0030..0039 ; EN # Nd [10] DIGIT ZERO..DIGIT NINE +00B2..00B3 ; EN # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B9 ; EN # No SUPERSCRIPT ONE +06F0..06F9 ; EN # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +2070 ; EN # No SUPERSCRIPT ZERO +2074..2079 ; EN # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +2080..2089 ; EN # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +2488..249B ; EN # No [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP +FF10..FF19 ; EN # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +1D7CE..1D7FF ; EN # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE + +# Total code points: 120 + +# ================================================ + +# Bidi_Class=European_Separator + +002B ; ES # Sm PLUS SIGN +002D ; ES # Pd HYPHEN-MINUS +207A..207B ; ES # Sm [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS +208A..208B ; ES # Sm [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS +2212 ; ES # Sm MINUS SIGN +FB29 ; ES # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FE62 ; ES # Sm SMALL PLUS SIGN +FE63 ; ES # Pd SMALL HYPHEN-MINUS +FF0B ; ES # Sm FULLWIDTH PLUS SIGN +FF0D ; ES # Pd FULLWIDTH HYPHEN-MINUS + +# Total code points: 12 + +# ================================================ + +# Bidi_Class=European_Terminator + +0023 ; ET # Po NUMBER SIGN +0024 ; ET # Sc DOLLAR SIGN +0025 ; ET # Po PERCENT SIGN +00A2..00A5 ; ET # Sc [4] CENT SIGN..YEN SIGN +00B0 ; ET # So DEGREE SIGN +00B1 ; ET # Sm PLUS-MINUS SIGN +066A ; ET # Po ARABIC PERCENT SIGN +09F2..09F3 ; ET # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN +0AF1 ; ET # Sc GUJARATI RUPEE SIGN +0BF9 ; ET # Sc TAMIL RUPEE SIGN +0E3F ; ET # Sc THAI CURRENCY SYMBOL BAHT +17DB ; ET # Sc KHMER CURRENCY SYMBOL RIEL +2030..2034 ; ET # Po [5] PER MILLE SIGN..TRIPLE PRIME +20A0..20B5 ; ET # Sc [22] EURO-CURRENCY SIGN..CEDI SIGN +212E ; ET # So ESTIMATED SYMBOL +2213 ; ET # Sm MINUS-OR-PLUS SIGN +FE5F ; ET # Po SMALL NUMBER SIGN +FE69 ; ET # Sc SMALL DOLLAR SIGN +FE6A ; ET # Po SMALL PERCENT SIGN +FF03 ; ET # Po FULLWIDTH NUMBER SIGN +FF04 ; ET # Sc FULLWIDTH DOLLAR SIGN +FF05 ; ET # Po FULLWIDTH PERCENT SIGN +FFE0..FFE1 ; ET # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE5..FFE6 ; ET # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN + +# Total code points: 55 + +# ================================================ + +# Bidi_Class=Arabic_Number + +0660..0669 ; AN # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +066B..066C ; AN # Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR + +# Total code points: 12 + +# ================================================ + +# Bidi_Class=Common_Separator + +002C ; CS # Po COMMA +002E..002F ; CS # Po [2] FULL STOP..SOLIDUS +003A ; CS # Po COLON +00A0 ; CS # Zs NO-BREAK SPACE +060C ; CS # Po ARABIC COMMA +202F ; CS # Zs NARROW NO-BREAK SPACE +2044 ; CS # Sm FRACTION SLASH +FE50 ; CS # Po SMALL COMMA +FE52 ; CS # Po SMALL FULL STOP +FE55 ; CS # Po SMALL COLON +FF0C ; CS # Po FULLWIDTH COMMA +FF0E..FF0F ; CS # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF1A ; CS # Po FULLWIDTH COLON + +# Total code points: 15 + +# ================================================ + +# Bidi_Class=Paragraph_Separator + +000A ; B # Cc <control-000A> +000D ; B # Cc <control-000D> +001C..001E ; B # Cc [3] <control-001C>..<control-001E> +0085 ; B # Cc <control-0085> +2029 ; B # Zp PARAGRAPH SEPARATOR + +# Total code points: 7 + +# ================================================ + +# Bidi_Class=Segment_Separator + +0009 ; S # Cc <control-0009> +000B ; S # Cc <control-000B> +001F ; S # Cc <control-001F> + +# Total code points: 3 + +# ================================================ + +# Bidi_Class=White_Space + +000C ; WS # Cc <control-000C> +0020 ; WS # Zs SPACE +1680 ; WS # Zs OGHAM SPACE MARK +180E ; WS # Zs MONGOLIAN VOWEL SEPARATOR +2000..200A ; WS # Zs [11] EN QUAD..HAIR SPACE +2028 ; WS # Zl LINE SEPARATOR +205F ; WS # Zs MEDIUM MATHEMATICAL SPACE +3000 ; WS # Zs IDEOGRAPHIC SPACE + +# Total code points: 18 + +# ================================================ + +# Bidi_Class=Other_Neutral + +0021..0022 ; ON # Po [2] EXCLAMATION MARK..QUOTATION MARK +0026..0027 ; ON # Po [2] AMPERSAND..APOSTROPHE +0028 ; ON # Ps LEFT PARENTHESIS +0029 ; ON # Pe RIGHT PARENTHESIS +002A ; ON # Po ASTERISK +003B ; ON # Po SEMICOLON +003C..003E ; ON # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN +003F..0040 ; ON # Po [2] QUESTION MARK..COMMERCIAL AT +005B ; ON # Ps LEFT SQUARE BRACKET +005C ; ON # Po REVERSE SOLIDUS +005D ; ON # Pe RIGHT SQUARE BRACKET +005E ; ON # Sk CIRCUMFLEX ACCENT +005F ; ON # Pc LOW LINE +0060 ; ON # Sk GRAVE ACCENT +007B ; ON # Ps LEFT CURLY BRACKET +007C ; ON # Sm VERTICAL LINE +007D ; ON # Pe RIGHT CURLY BRACKET +007E ; ON # Sm TILDE +00A1 ; ON # Po INVERTED EXCLAMATION MARK +00A6..00A7 ; ON # So [2] BROKEN BAR..SECTION SIGN +00A8 ; ON # Sk DIAERESIS +00A9 ; ON # So COPYRIGHT SIGN +00AB ; ON # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC ; ON # Sm NOT SIGN +00AE ; ON # So REGISTERED SIGN +00AF ; ON # Sk MACRON +00B4 ; ON # Sk ACUTE ACCENT +00B6 ; ON # So PILCROW SIGN +00B7 ; ON # Po MIDDLE DOT +00B8 ; ON # Sk CEDILLA +00BB ; ON # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC..00BE ; ON # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +00BF ; ON # Po INVERTED QUESTION MARK +00D7 ; ON # Sm MULTIPLICATION SIGN +00F7 ; ON # Sm DIVISION SIGN +02B9..02BA ; ON # Lm [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME +02C2..02C5 ; ON # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD +02C6..02CF ; ON # Lm [10] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER LOW ACUTE ACCENT +02D2..02DF ; ON # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT +02E5..02ED ; ON # Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED +02EF..02FF ; ON # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW +0374..0375 ; ON # Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN +037E ; ON # Po GREEK QUESTION MARK +0384..0385 ; ON # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0387 ; ON # Po GREEK ANO TELEIA +03F6 ; ON # Sm GREEK REVERSED LUNATE EPSILON SYMBOL +058A ; ON # Pd ARMENIAN HYPHEN +060E..060F ; ON # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA +06E9 ; ON # So ARABIC PLACE OF SAJDAH +07F6 ; ON # So NKO SYMBOL OO DENNEN +07F7..07F9 ; ON # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK +0BF3..0BF8 ; ON # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN +0BFA ; ON # So TAMIL NUMBER SIGN +0CF1..0CF2 ; ON # So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0F3A ; ON # Ps TIBETAN MARK GUG RTAGS GYON +0F3B ; ON # Pe TIBETAN MARK GUG RTAGS GYAS +0F3C ; ON # Ps TIBETAN MARK ANG KHANG GYON +0F3D ; ON # Pe TIBETAN MARK ANG KHANG GYAS +1390..1399 ; ON # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT +169B ; ON # Ps OGHAM FEATHER MARK +169C ; ON # Pe OGHAM REVERSED FEATHER MARK +17F0..17F9 ; ON # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON +1800..1805 ; ON # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS +1806 ; ON # Pd MONGOLIAN TODO SOFT HYPHEN +1807..180A ; ON # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU +1940 ; ON # So LIMBU SIGN LOO +1944..1945 ; ON # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK +19DE..19DF ; ON # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV +19E0..19FF ; ON # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC +1FBD ; ON # Sk GREEK KORONIS +1FBF..1FC1 ; ON # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FCD..1FCF ; ON # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FDD..1FDF ; ON # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FED..1FEF ; ON # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FFD..1FFE ; ON # Sk [2] GREEK OXIA..GREEK DASIA +2010..2015 ; ON # Pd [6] HYPHEN..HORIZONTAL BAR +2016..2017 ; ON # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE +2018 ; ON # Pi LEFT SINGLE QUOTATION MARK +2019 ; ON # Pf RIGHT SINGLE QUOTATION MARK +201A ; ON # Ps SINGLE LOW-9 QUOTATION MARK +201B..201C ; ON # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK +201D ; ON # Pf RIGHT DOUBLE QUOTATION MARK +201E ; ON # Ps DOUBLE LOW-9 QUOTATION MARK +201F ; ON # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020..2027 ; ON # Po [8] DAGGER..HYPHENATION POINT +2035..2038 ; ON # Po [4] REVERSED PRIME..CARET +2039 ; ON # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A ; ON # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203B..203E ; ON # Po [4] REFERENCE MARK..OVERLINE +203F..2040 ; ON # Pc [2] UNDERTIE..CHARACTER TIE +2041..2043 ; ON # Po [3] CARET INSERTION POINT..HYPHEN BULLET +2045 ; ON # Ps LEFT SQUARE BRACKET WITH QUILL +2046 ; ON # Pe RIGHT SQUARE BRACKET WITH QUILL +2047..2051 ; ON # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY +2052 ; ON # Sm COMMERCIAL MINUS SIGN +2053 ; ON # Po SWUNG DASH +2054 ; ON # Pc INVERTED UNDERTIE +2055..205E ; ON # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS +207C ; ON # Sm SUPERSCRIPT EQUALS SIGN +207D ; ON # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; ON # Pe SUPERSCRIPT RIGHT PARENTHESIS +208C ; ON # Sm SUBSCRIPT EQUALS SIGN +208D ; ON # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; ON # Pe SUBSCRIPT RIGHT PARENTHESIS +2100..2101 ; ON # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2103..2106 ; ON # So [4] DEGREE CELSIUS..CADA UNA +2108..2109 ; ON # So [2] SCRUPLE..DEGREE FAHRENHEIT +2114 ; ON # So L B BAR SYMBOL +2116..2118 ; ON # So [3] NUMERO SIGN..SCRIPT CAPITAL P +211E..2123 ; ON # So [6] PRESCRIPTION TAKE..VERSICLE +2125 ; ON # So OUNCE SIGN +2127 ; ON # So INVERTED OHM SIGN +2129 ; ON # So TURNED GREEK SMALL LETTER IOTA +213A..213B ; ON # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN +2140..2144 ; ON # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y +214A ; ON # So PROPERTY LINE +214B ; ON # Sm TURNED AMPERSAND +214C..214D ; ON # So [2] PER SIGN..AKTIESELSKAB +2153..215F ; ON # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE +2190..2194 ; ON # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW +2195..2199 ; ON # So [5] UP DOWN ARROW..SOUTH WEST ARROW +219A..219B ; ON # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +219C..219F ; ON # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW +21A0 ; ON # Sm RIGHTWARDS TWO HEADED ARROW +21A1..21A2 ; ON # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL +21A3 ; ON # Sm RIGHTWARDS ARROW WITH TAIL +21A4..21A5 ; ON # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR +21A6 ; ON # Sm RIGHTWARDS ARROW FROM BAR +21A7..21AD ; ON # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW +21AE ; ON # Sm LEFT RIGHT ARROW WITH STROKE +21AF..21CD ; ON # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; ON # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0..21D1 ; ON # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW +21D2 ; ON # Sm RIGHTWARDS DOUBLE ARROW +21D3 ; ON # So DOWNWARDS DOUBLE ARROW +21D4 ; ON # Sm LEFT RIGHT DOUBLE ARROW +21D5..21F3 ; ON # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW +21F4..2211 ; ON # Sm [30] RIGHT ARROW WITH SMALL CIRCLE..N-ARY SUMMATION +2214..22FF ; ON # Sm [236] DOT PLUS..Z NOTATION BAG MEMBERSHIP +2300..2307 ; ON # So [8] DIAMETER SIGN..WAVY LINE +2308..230B ; ON # Sm [4] LEFT CEILING..RIGHT FLOOR +230C..231F ; ON # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER +2320..2321 ; ON # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL +2322..2328 ; ON # So [7] FROWN..KEYBOARD +2329 ; ON # Ps LEFT-POINTING ANGLE BRACKET +232A ; ON # Pe RIGHT-POINTING ANGLE BRACKET +232B..2335 ; ON # So [11] ERASE TO THE LEFT..COUNTERSINK +237B ; ON # So NOT CHECK MARK +237C ; ON # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +237D..2394 ; ON # So [24] SHOULDERED OPEN BOX..SOFTWARE-FUNCTION SYMBOL +2396..239A ; ON # So [5] DECIMAL SEPARATOR KEY SYMBOL..CLEAR SCREEN SYMBOL +239B..23B3 ; ON # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM +23B4..23DB ; ON # So [40] TOP SQUARE BRACKET..FUSE +23DC..23E1 ; ON # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +23E2..23E7 ; ON # So [6] WHITE TRAPEZIUM..ELECTRICAL INTERSECTION +2400..2426 ; ON # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO +2440..244A ; ON # So [11] OCR HOOK..OCR DOUBLE BACKSLASH +2460..2487 ; ON # No [40] CIRCLED DIGIT ONE..PARENTHESIZED NUMBER TWENTY +24EA..24FF ; ON # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO +2500..25B6 ; ON # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE +25B7 ; ON # Sm WHITE RIGHT-POINTING TRIANGLE +25B8..25C0 ; ON # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE +25C1 ; ON # Sm WHITE LEFT-POINTING TRIANGLE +25C2..25F7 ; ON # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT +25F8..25FF ; ON # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE +2600..266E ; ON # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN +266F ; ON # Sm MUSIC SHARP SIGN +2670..269C ; ON # So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS +26A0..26AB ; ON # So [12] WARNING SIGN..MEDIUM BLACK CIRCLE +26AD..26B2 ; ON # So [6] MARRIAGE SYMBOL..NEUTER +2701..2704 ; ON # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS +2706..2709 ; ON # So [4] TELEPHONE LOCATION SIGN..ENVELOPE +270C..2727 ; ON # So [28] VICTORY HAND..WHITE FOUR POINTED STAR +2729..274B ; ON # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK +274D ; ON # So SHADOWED WHITE CIRCLE +274F..2752 ; ON # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE +2756 ; ON # So BLACK DIAMOND MINUS WHITE X +2758..275E ; ON # So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT +2761..2767 ; ON # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET +2768 ; ON # Ps MEDIUM LEFT PARENTHESIS ORNAMENT +2769 ; ON # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT +276A ; ON # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B ; ON # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C ; ON # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D ; ON # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E ; ON # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F ; ON # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770 ; ON # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771 ; ON # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772 ; ON # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2773 ; ON # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2774 ; ON # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT +2775 ; ON # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT +2776..2793 ; ON # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +2794 ; ON # So HEAVY WIDE-HEADED RIGHTWARDS ARROW +2798..27AF ; ON # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27B1..27BE ; ON # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW +27C0..27C4 ; ON # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C5 ; ON # Ps LEFT S-SHAPED BAG DELIMITER +27C6 ; ON # Pe RIGHT S-SHAPED BAG DELIMITER +27C7..27CA ; ON # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE +27D0..27E5 ; ON # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK +27E6 ; ON # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7 ; ON # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8 ; ON # Ps MATHEMATICAL LEFT ANGLE BRACKET +27E9 ; ON # Pe MATHEMATICAL RIGHT ANGLE BRACKET +27EA ; ON # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB ; ON # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27F0..27FF ; ON # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW +2900..2982 ; ON # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON +2983 ; ON # Ps LEFT WHITE CURLY BRACKET +2984 ; ON # Pe RIGHT WHITE CURLY BRACKET +2985 ; ON # Ps LEFT WHITE PARENTHESIS +2986 ; ON # Pe RIGHT WHITE PARENTHESIS +2987 ; ON # Ps Z NOTATION LEFT IMAGE BRACKET +2988 ; ON # Pe Z NOTATION RIGHT IMAGE BRACKET +2989 ; ON # Ps Z NOTATION LEFT BINDING BRACKET +298A ; ON # Pe Z NOTATION RIGHT BINDING BRACKET +298B ; ON # Ps LEFT SQUARE BRACKET WITH UNDERBAR +298C ; ON # Pe RIGHT SQUARE BRACKET WITH UNDERBAR +298D ; ON # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E ; ON # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F ; ON # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; ON # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991 ; ON # Ps LEFT ANGLE BRACKET WITH DOT +2992 ; ON # Pe RIGHT ANGLE BRACKET WITH DOT +2993 ; ON # Ps LEFT ARC LESS-THAN BRACKET +2994 ; ON # Pe RIGHT ARC GREATER-THAN BRACKET +2995 ; ON # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET +2996 ; ON # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET +2997 ; ON # Ps LEFT BLACK TORTOISE SHELL BRACKET +2998 ; ON # Pe RIGHT BLACK TORTOISE SHELL BRACKET +2999..29D7 ; ON # Sm [63] DOTTED FENCE..BLACK HOURGLASS +29D8 ; ON # Ps LEFT WIGGLY FENCE +29D9 ; ON # Pe RIGHT WIGGLY FENCE +29DA ; ON # Ps LEFT DOUBLE WIGGLY FENCE +29DB ; ON # Pe RIGHT DOUBLE WIGGLY FENCE +29DC..29FB ; ON # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS +29FC ; ON # Ps LEFT-POINTING CURVED ANGLE BRACKET +29FD ; ON # Pe RIGHT-POINTING CURVED ANGLE BRACKET +29FE..2AFF ; ON # Sm [258] TINY..N-ARY WHITE VERTICAL BAR +2B00..2B1A ; ON # So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE +2B20..2B23 ; ON # So [4] WHITE PENTAGON..HORIZONTAL BLACK HEXAGON +2CE5..2CEA ; ON # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA +2CF9..2CFC ; ON # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER +2CFD ; ON # No COPTIC FRACTION ONE HALF +2CFE..2CFF ; ON # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER +2E00..2E01 ; ON # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E02 ; ON # Pi LEFT SUBSTITUTION BRACKET +2E03 ; ON # Pf RIGHT SUBSTITUTION BRACKET +2E04 ; ON # Pi LEFT DOTTED SUBSTITUTION BRACKET +2E05 ; ON # Pf RIGHT DOTTED SUBSTITUTION BRACKET +2E06..2E08 ; ON # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER +2E09 ; ON # Pi LEFT TRANSPOSITION BRACKET +2E0A ; ON # Pf RIGHT TRANSPOSITION BRACKET +2E0B ; ON # Po RAISED SQUARE +2E0C ; ON # Pi LEFT RAISED OMISSION BRACKET +2E0D ; ON # Pf RIGHT RAISED OMISSION BRACKET +2E0E..2E16 ; ON # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE +2E17 ; ON # Pd DOUBLE OBLIQUE HYPHEN +2E1C ; ON # Pi LEFT LOW PARAPHRASE BRACKET +2E1D ; ON # Pf RIGHT LOW PARAPHRASE BRACKET +2E80..2E99 ; ON # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP +2E9B..2EF3 ; ON # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; ON # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +2FF0..2FFB ; ON # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +3001..3003 ; ON # Po [3] IDEOGRAPHIC COMMA..DITTO MARK +3004 ; ON # So JAPANESE INDUSTRIAL STANDARD SYMBOL +3008 ; ON # Ps LEFT ANGLE BRACKET +3009 ; ON # Pe RIGHT ANGLE BRACKET +300A ; ON # Ps LEFT DOUBLE ANGLE BRACKET +300B ; ON # Pe RIGHT DOUBLE ANGLE BRACKET +300C ; ON # Ps LEFT CORNER BRACKET +300D ; ON # Pe RIGHT CORNER BRACKET +300E ; ON # Ps LEFT WHITE CORNER BRACKET +300F ; ON # Pe RIGHT WHITE CORNER BRACKET +3010 ; ON # Ps LEFT BLACK LENTICULAR BRACKET +3011 ; ON # Pe RIGHT BLACK LENTICULAR BRACKET +3012..3013 ; ON # So [2] POSTAL MARK..GETA MARK +3014 ; ON # Ps LEFT TORTOISE SHELL BRACKET +3015 ; ON # Pe RIGHT TORTOISE SHELL BRACKET +3016 ; ON # Ps LEFT WHITE LENTICULAR BRACKET +3017 ; ON # Pe RIGHT WHITE LENTICULAR BRACKET +3018 ; ON # Ps LEFT WHITE TORTOISE SHELL BRACKET +3019 ; ON # Pe RIGHT WHITE TORTOISE SHELL BRACKET +301A ; ON # Ps LEFT WHITE SQUARE BRACKET +301B ; ON # Pe RIGHT WHITE SQUARE BRACKET +301C ; ON # Pd WAVE DASH +301D ; ON # Ps REVERSED DOUBLE PRIME QUOTATION MARK +301E..301F ; ON # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK +3020 ; ON # So POSTAL MARK FACE +3030 ; ON # Pd WAVY DASH +3036..3037 ; ON # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +303D ; ON # Po PART ALTERNATION MARK +303E..303F ; ON # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE +309B..309C ; ON # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +30A0 ; ON # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN +30FB ; ON # Po KATAKANA MIDDLE DOT +31C0..31CF ; ON # So [16] CJK STROKE T..CJK STROKE N +321D..321E ; ON # So [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU +3250 ; ON # So PARTNERSHIP SIGN +3251..325F ; ON # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +327C..327E ; ON # So [3] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED HANGUL IEUNG U +32B1..32BF ; ON # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32CC..32CF ; ON # So [4] SQUARE HG..LIMITED LIABILITY SIGN +3377..337A ; ON # So [4] SQUARE DM..SQUARE IU +33DE..33DF ; ON # So [2] SQUARE V OVER M..SQUARE A OVER M +33FF ; ON # So SQUARE GAL +4DC0..4DFF ; ON # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION +A490..A4C6 ; ON # So [55] YI RADICAL QOT..YI RADICAL KE +A700..A716 ; ON # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717..A71A ; ON # Lm [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE +A720..A721 ; ON # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A828..A82B ; ON # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 +A874..A877 ; ON # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD +FD3E ; ON # Ps ORNATE LEFT PARENTHESIS +FD3F ; ON # Pe ORNATE RIGHT PARENTHESIS +FDFD ; ON # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FE10..FE16 ; ON # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; ON # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; ON # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31..FE32 ; ON # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; ON # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE45..FE46 ; ON # Po [2] SESAME DOT..WHITE SESAME DOT +FE47 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; ON # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; ON # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE51 ; ON # Po SMALL IDEOGRAPHIC COMMA +FE54 ; ON # Po SMALL SEMICOLON +FE56..FE57 ; ON # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK +FE58 ; ON # Pd SMALL EM DASH +FE59 ; ON # Ps SMALL LEFT PARENTHESIS +FE5A ; ON # Pe SMALL RIGHT PARENTHESIS +FE5B ; ON # Ps SMALL LEFT CURLY BRACKET +FE5C ; ON # Pe SMALL RIGHT CURLY BRACKET +FE5D ; ON # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; ON # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE60..FE61 ; ON # Po [2] SMALL AMPERSAND..SMALL ASTERISK +FE64..FE66 ; ON # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; ON # Po SMALL REVERSE SOLIDUS +FE6B ; ON # Po SMALL COMMERCIAL AT +FF01..FF02 ; ON # Po [2] FULLWIDTH EXCLAMATION MARK..FULLWIDTH QUOTATION MARK +FF06..FF07 ; ON # Po [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE +FF08 ; ON # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; ON # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; ON # Po FULLWIDTH ASTERISK +FF1B ; ON # Po FULLWIDTH SEMICOLON +FF1C..FF1E ; ON # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF1F..FF20 ; ON # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF3B ; ON # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; ON # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; ON # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; ON # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; ON # Pc FULLWIDTH LOW LINE +FF40 ; ON # Sk FULLWIDTH GRAVE ACCENT +FF5B ; ON # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; ON # Sm FULLWIDTH VERTICAL LINE +FF5D ; ON # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; ON # Sm FULLWIDTH TILDE +FF5F ; ON # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; ON # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; ON # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; ON # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; ON # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64..FF65 ; ON # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +FFE2 ; ON # Sm FULLWIDTH NOT SIGN +FFE3 ; ON # Sk FULLWIDTH MACRON +FFE4 ; ON # So FULLWIDTH BROKEN BAR +FFE8 ; ON # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9..FFEC ; ON # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +FFED..FFEE ; ON # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +FFF9..FFFB ; ON # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER +10101 ; ON # Po AEGEAN WORD SEPARATOR DOT +10140..10174 ; ON # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10175..10178 ; ON # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN +10179..10189 ; ON # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN +1018A ; ON # No GREEK ZERO SIGN +1091F ; ON # Po PHOENICIAN WORD SEPARATOR +1D200..1D241 ; ON # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D245 ; ON # So GREEK MUSICAL LEIMMA +1D300..1D356 ; ON # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING + +# Total code points: 3148 + +# ================================================ + +# Bidi_Class=Boundary_Neutral + +0000..0008 ; BN # Cc [9] <control-0000>..<control-0008> +000E..001B ; BN # Cc [14] <control-000E>..<control-001B> +007F..0084 ; BN # Cc [6] <control-007F>..<control-0084> +0086..009F ; BN # Cc [26] <control-0086>..<control-009F> +00AD ; BN # Cf SOFT HYPHEN +070F ; BN # Cf SYRIAC ABBREVIATION MARK +200B..200D ; BN # Cf [3] ZERO WIDTH SPACE..ZERO WIDTH JOINER +2060..2063 ; BN # Cf [4] WORD JOINER..INVISIBLE SEPARATOR +2064..2069 ; BN # Cn [6] <reserved-2064>..<reserved-2069> +206A..206F ; BN # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES +FDD0..FDEF ; BN # Cn [32] <noncharacter-FDD0>..<noncharacter-FDEF> +FEFF ; BN # Cf ZERO WIDTH NO-BREAK SPACE +FFF0..FFF8 ; BN # Cn [9] <reserved-FFF0>..<reserved-FFF8> +FFFE..FFFF ; BN # Cn [2] <noncharacter-FFFE>..<noncharacter-FFFF> +1D173..1D17A ; BN # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +1FFFE..1FFFF ; BN # Cn [2] <noncharacter-1FFFE>..<noncharacter-1FFFF> +2FFFE..2FFFF ; BN # Cn [2] <noncharacter-2FFFE>..<noncharacter-2FFFF> +3FFFE..3FFFF ; BN # Cn [2] <noncharacter-3FFFE>..<noncharacter-3FFFF> +4FFFE..4FFFF ; BN # Cn [2] <noncharacter-4FFFE>..<noncharacter-4FFFF> +5FFFE..5FFFF ; BN # Cn [2] <noncharacter-5FFFE>..<noncharacter-5FFFF> +6FFFE..6FFFF ; BN # Cn [2] <noncharacter-6FFFE>..<noncharacter-6FFFF> +7FFFE..7FFFF ; BN # Cn [2] <noncharacter-7FFFE>..<noncharacter-7FFFF> +8FFFE..8FFFF ; BN # Cn [2] <noncharacter-8FFFE>..<noncharacter-8FFFF> +9FFFE..9FFFF ; BN # Cn [2] <noncharacter-9FFFE>..<noncharacter-9FFFF> +AFFFE..AFFFF ; BN # Cn [2] <noncharacter-AFFFE>..<noncharacter-AFFFF> +BFFFE..BFFFF ; BN # Cn [2] <noncharacter-BFFFE>..<noncharacter-BFFFF> +CFFFE..CFFFF ; BN # Cn [2] <noncharacter-CFFFE>..<noncharacter-CFFFF> +DFFFE..E0000 ; BN # Cn [3] <noncharacter-DFFFE>..<reserved-E0000> +E0001 ; BN # Cf LANGUAGE TAG +E0002..E001F ; BN # Cn [30] <reserved-E0002>..<reserved-E001F> +E0020..E007F ; BN # Cf [96] TAG SPACE..CANCEL TAG +E0080..E00FF ; BN # Cn [128] <reserved-E0080>..<reserved-E00FF> +E01F0..E0FFF ; BN # Cn [3600] <reserved-E01F0>..<reserved-E0FFF> +EFFFE..EFFFF ; BN # Cn [2] <noncharacter-EFFFE>..<noncharacter-EFFFF> +FFFFE..FFFFF ; BN # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF> +10FFFE..10FFFF; BN # Cn [2] <noncharacter-10FFFE>..<noncharacter-10FFFF> + +# Total code points: 4016 + +# ================================================ + +# Bidi_Class=Nonspacing_Mark + +0300..036F ; NSM # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0483..0486 ; NSM # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA +0488..0489 ; NSM # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0591..05BD ; NSM # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; NSM # Mn HEBREW POINT RAFE +05C1..05C2 ; NSM # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; NSM # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; NSM # Mn HEBREW POINT QAMATS QATAN +0610..0615 ; NSM # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH +064B..065E ; NSM # Mn [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS +0670 ; NSM # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; NSM # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DE ; NSM # Me ARABIC START OF RUB EL HIZB +06DF..06E4 ; NSM # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; NSM # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; NSM # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; NSM # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; NSM # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; NSM # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; NSM # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +0901..0902 ; NSM # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA +093C ; NSM # Mn DEVANAGARI SIGN NUKTA +0941..0948 ; NSM # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +094D ; NSM # Mn DEVANAGARI SIGN VIRAMA +0951..0954 ; NSM # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT +0962..0963 ; NSM # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; NSM # Mn BENGALI SIGN CANDRABINDU +09BC ; NSM # Mn BENGALI SIGN NUKTA +09C1..09C4 ; NSM # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09CD ; NSM # Mn BENGALI SIGN VIRAMA +09E2..09E3 ; NSM # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +0A01..0A02 ; NSM # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; NSM # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; NSM # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; NSM # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; NSM # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A70..0A71 ; NSM # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A81..0A82 ; NSM # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; NSM # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; NSM # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; NSM # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0ACD ; NSM # Mn GUJARATI SIGN VIRAMA +0AE2..0AE3 ; NSM # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0B01 ; NSM # Mn ORIYA SIGN CANDRABINDU +0B3C ; NSM # Mn ORIYA SIGN NUKTA +0B3F ; NSM # Mn ORIYA VOWEL SIGN I +0B41..0B43 ; NSM # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R +0B4D ; NSM # Mn ORIYA SIGN VIRAMA +0B56 ; NSM # Mn ORIYA AI LENGTH MARK +0B82 ; NSM # Mn TAMIL SIGN ANUSVARA +0BC0 ; NSM # Mn TAMIL VOWEL SIGN II +0BCD ; NSM # Mn TAMIL SIGN VIRAMA +0C3E..0C40 ; NSM # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; NSM # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; NSM # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; NSM # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0CBC ; NSM # Mn KANNADA SIGN NUKTA +0CCC..0CCD ; NSM # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CE2..0CE3 ; NSM # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D41..0D43 ; NSM # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R +0D4D ; NSM # Mn MALAYALAM SIGN VIRAMA +0DCA ; NSM # Mn SINHALA SIGN AL-LAKUNA +0DD2..0DD4 ; NSM # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; NSM # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0E31 ; NSM # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; NSM # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; NSM # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; NSM # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EB9 ; NSM # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU +0EBB..0EBC ; NSM # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO +0EC8..0ECD ; NSM # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA +0F18..0F19 ; NSM # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; NSM # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; NSM # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; NSM # Mn TIBETAN MARK TSA -PHRU +0F71..0F7E ; NSM # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; NSM # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; NSM # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F90..0F97 ; NSM # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; NSM # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; NSM # Mn TIBETAN SYMBOL PADMA GDAN +102D..1030 ; NSM # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032 ; NSM # Mn MYANMAR VOWEL SIGN AI +1036..1037 ; NSM # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW +1039 ; NSM # Mn MYANMAR SIGN VIRAMA +1058..1059 ; NSM # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +135F ; NSM # Mn ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; NSM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1732..1734 ; NSM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1752..1753 ; NSM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; NSM # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B7..17BD ; NSM # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; NSM # Mn KHMER SIGN NIKAHIT +17C9..17D3 ; NSM # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17DD ; NSM # Mn KHMER SIGN ATTHACAN +180B..180D ; NSM # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +18A9 ; NSM # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; NSM # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; NSM # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1929..192B ; NSM # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1932 ; NSM # Mn LIMBU SMALL LETTER ANUSVARA +1939..193B ; NSM # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; NSM # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1B00..1B03 ; NSM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; NSM # Mn BALINESE SIGN REREKAN +1B36..1B3A ; NSM # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; NSM # Mn BALINESE VOWEL SIGN LA LENGA +1B42 ; NSM # Mn BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; NSM # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1DC0..1DCA ; NSM # Mn [11] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER R BELOW +1DFE..1DFF ; NSM # Mn [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +20D0..20DC ; NSM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; NSM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; NSM # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; NSM # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20EF ; NSM # Mn [11] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW +302A..302F ; NSM # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK +3099..309A ; NSM # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A802 ; NSM # Mc SYLOTI NAGRI SIGN DVISVARA +A806 ; NSM # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; NSM # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; NSM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +FB1E ; NSM # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; NSM # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE23 ; NSM # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF +10A01..10A03 ; NSM # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; NSM # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; NSM # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; NSM # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; NSM # Mn KHAROSHTHI VIRAMA +1D167..1D169 ; NSM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D17B..1D182 ; NSM # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; NSM # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; NSM # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; NSM # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 892 + +# ================================================ + +# Bidi_Class=Arabic_Letter + +0600..0603 ; AL # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA +0604..060A ; AL # Cn [7] <reserved-0604>..<reserved-060A> +060B ; AL # Sc AFGHANI SIGN +060D ; AL # Po ARABIC DATE SEPARATOR +0616..061A ; AL # Cn [5] <reserved-0616>..<reserved-061A> +061B ; AL # Po ARABIC SEMICOLON +061C..061D ; AL # Cn [2] <reserved-061C>..<reserved-061D> +061E..061F ; AL # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +0620 ; AL # Cn <reserved-0620> +0621..063A ; AL # Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN +063B..063F ; AL # Cn [5] <reserved-063B>..<reserved-063F> +0640 ; AL # Lm ARABIC TATWEEL +0641..064A ; AL # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +065F ; AL # Cn <reserved-065F> +066D ; AL # Po ARABIC FIVE POINTED STAR +066E..066F ; AL # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0671..06D3 ; AL # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D4 ; AL # Po ARABIC FULL STOP +06D5 ; AL # Lo ARABIC LETTER AE +06DD ; AL # Cf ARABIC END OF AYAH +06E5..06E6 ; AL # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06EE..06EF ; AL # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06FA..06FC ; AL # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FD..06FE ; AL # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN +06FF ; AL # Lo ARABIC LETTER HEH WITH INVERTED V +0700..070D ; AL # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS +070E ; AL # Cn <reserved-070E> +0710 ; AL # Lo SYRIAC LETTER ALAPH +0712..072F ; AL # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +074B..074C ; AL # Cn [2] <reserved-074B>..<reserved-074C> +074D..076D ; AL # Lo [33] SYRIAC LETTER SOGDIAN ZHAIN..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE +076E..077F ; AL # Cn [18] <reserved-076E>..<reserved-077F> +0780..07A5 ; AL # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU +07B1 ; AL # Lo THAANA LETTER NAA +07B2..07BF ; AL # Cn [14] <reserved-07B2>..<reserved-07BF> +FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBB2..FBD2 ; AL # Cn [33] <reserved-FBB2>..<reserved-FBD2> +FBD3..FD3D ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD40..FD4F ; AL # Cn [16] <reserved-FD40>..<reserved-FD4F> +FD50..FD8F ; AL # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD90..FD91 ; AL # Cn [2] <reserved-FD90>..<reserved-FD91> +FD92..FDC7 ; AL # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDC8..FDCF ; AL # Cn [8] <reserved-FDC8>..<reserved-FDCF> +FDF0..FDFB ; AL # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; AL # Sc RIAL SIGN +FDFE..FDFF ; AL # Cn [2] <reserved-FDFE>..<reserved-FDFF> +FE70..FE74 ; AL # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE75 ; AL # Cn <reserved-FE75> +FE76..FEFC ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FEFD..FEFE ; AL # Cn [2] <reserved-FEFD>..<reserved-FEFE> + +# Total code points: 1130 + +# ================================================ + +# Bidi_Class=Left_To_Right_Override + +202D ; LRO # Cf LEFT-TO-RIGHT OVERRIDE + +# Total code points: 1 + +# ================================================ + +# Bidi_Class=Right_To_Left_Override + +202E ; RLO # Cf RIGHT-TO-LEFT OVERRIDE + +# Total code points: 1 + +# ================================================ + +# Bidi_Class=Left_To_Right_Embedding + +202A ; LRE # Cf LEFT-TO-RIGHT EMBEDDING + +# Total code points: 1 + +# ================================================ + +# Bidi_Class=Right_To_Left_Embedding + +202B ; RLE # Cf RIGHT-TO-LEFT EMBEDDING + +# Total code points: 1 + +# ================================================ + +# Bidi_Class=Pop_Directional_Format + +202C ; PDF # Cf POP DIRECTIONAL FORMATTING + +# Total code points: 1 + +# EOF diff --git a/icuSources/data/unidata/base_unidata/DerivedCoreProperties.txt b/icuSources/data/unidata/base_unidata/DerivedCoreProperties.txt new file mode 100644 index 00000000..c9505fae --- /dev/null +++ b/icuSources/data/unidata/base_unidata/DerivedCoreProperties.txt @@ -0,0 +1,5138 @@ +# DerivedCoreProperties-5.0.0.txt +# Date: 2006-03-03, 08:22:53 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Derived Property: Math +# Generated from: Sm + Other_Math + +002B ; Math +003C..003E ; Math +005E ; Math +007C ; Math +007E ; Math +00AC ; Math +00B1 ; Math +00D7 ; Math +00F7 ; Math +03D0..03D2 ; Math +03D5 ; Math +03F0..03F1 ; Math +03F4..03F5 ; Math +03F6 ; Math +2016 ; Math +2032..2034 ; Math +2040 ; Math +2044 ; Math +2052 ; Math +2061..2063 ; Math +207A..207C ; Math +207D ; Math +207E ; Math +208A..208C ; Math +208D ; Math +208E ; Math +20D0..20DC ; Math +20E1 ; Math +20E5..20E6 ; Math +20EC..20EF ; Math +2102 ; Math +210A..2113 ; Math +2115 ; Math +2119..211D ; Math +2124 ; Math +2128 ; Math +2129 ; Math +212C..212D ; Math +212F..2131 ; Math +2133..2134 ; Math +2135..2138 ; Math +213C..213F ; Math +2140..2144 ; Math +2145..2149 ; Math +214B ; Math +2190..2194 ; Math +219A..219B ; Math +21A0 ; Math +21A3 ; Math +21A6 ; Math +21AE ; Math +21CE..21CF ; Math +21D2 ; Math +21D4 ; Math +21F4..22FF ; Math +2308..230B ; Math +2320..2321 ; Math +237C ; Math +239B..23B3 ; Math +23B7 ; Math +23D0 ; Math +23DC..23E1 ; Math +25B7 ; Math +25C1 ; Math +25F8..25FF ; Math +266F ; Math +27C0..27C4 ; Math +27C5 ; Math +27C6 ; Math +27C7..27CA ; Math +27D0..27E5 ; Math +27E6 ; Math +27E7 ; Math +27E8 ; Math +27E9 ; Math +27EA ; Math +27EB ; Math +27F0..27FF ; Math +2900..2982 ; Math +2983 ; Math +2984 ; Math +2985 ; Math +2986 ; Math +2987 ; Math +2988 ; Math +2989 ; Math +298A ; Math +298B ; Math +298C ; Math +298D ; Math +298E ; Math +298F ; Math +2990 ; Math +2991 ; Math +2992 ; Math +2993 ; Math +2994 ; Math +2995 ; Math +2996 ; Math +2997 ; Math +2998 ; Math +2999..29D7 ; Math +29D8 ; Math +29D9 ; Math +29DA ; Math +29DB ; Math +29DC..29FB ; Math +29FC ; Math +29FD ; Math +29FE..2AFF ; Math +FB29 ; Math +FE61 ; Math +FE62 ; Math +FE63 ; Math +FE64..FE66 ; Math +FE68 ; Math +FF0B ; Math +FF1C..FF1E ; Math +FF3C ; Math +FF3E ; Math +FF5C ; Math +FF5E ; Math +FFE2 ; Math +FFE9..FFEC ; Math +1D400..1D454 ; Math +1D456..1D49C ; Math +1D49E..1D49F ; Math +1D4A2 ; Math +1D4A5..1D4A6 ; Math +1D4A9..1D4AC ; Math +1D4AE..1D4B9 ; Math +1D4BB ; Math +1D4BD..1D4C3 ; Math +1D4C5..1D505 ; Math +1D507..1D50A ; Math +1D50D..1D514 ; Math +1D516..1D51C ; Math +1D51E..1D539 ; Math +1D53B..1D53E ; Math +1D540..1D544 ; Math +1D546 ; Math +1D54A..1D550 ; Math +1D552..1D6A5 ; Math +1D6A8..1D6C0 ; Math +1D6C1 ; Math +1D6C2..1D6DA ; Math +1D6DB ; Math +1D6DC..1D6FA ; Math +1D6FB ; Math +1D6FC..1D714 ; Math +1D715 ; Math +1D716..1D734 ; Math +1D735 ; Math +1D736..1D74E ; Math +1D74F ; Math +1D750..1D76E ; Math +1D76F ; Math +1D770..1D788 ; Math +1D789 ; Math +1D78A..1D7A8 ; Math +1D7A9 ; Math +1D7AA..1D7C2 ; Math +1D7C3 ; Math +1D7C4..1D7CB ; Math +1D7CE..1D7FF ; Math + +# Total code points: 2024 + +# ================================================ + +# Derived Property: Alphabetic +# Generated from: Lu+Ll+Lt+Lm+Lo+Nl + Other_Alphabetic + +0041..005A ; Alphabetic +0061..007A ; Alphabetic +00AA ; Alphabetic +00B5 ; Alphabetic +00BA ; Alphabetic +00C0..00D6 ; Alphabetic +00D8..00F6 ; Alphabetic +00F8..01BA ; Alphabetic +01BB ; Alphabetic +01BC..01BF ; Alphabetic +01C0..01C3 ; Alphabetic +01C4..0293 ; Alphabetic +0294 ; Alphabetic +0295..02AF ; Alphabetic +02B0..02C1 ; Alphabetic +02C6..02D1 ; Alphabetic +02E0..02E4 ; Alphabetic +02EE ; Alphabetic +0345 ; Alphabetic +037A ; Alphabetic +037B..037D ; Alphabetic +0386 ; Alphabetic +0388..038A ; Alphabetic +038C ; Alphabetic +038E..03A1 ; Alphabetic +03A3..03CE ; Alphabetic +03D0..03F5 ; Alphabetic +03F7..0481 ; Alphabetic +048A..0513 ; Alphabetic +0531..0556 ; Alphabetic +0559 ; Alphabetic +0561..0587 ; Alphabetic +05B0..05BD ; Alphabetic +05BF ; Alphabetic +05C1..05C2 ; Alphabetic +05C4..05C5 ; Alphabetic +05C7 ; Alphabetic +05D0..05EA ; Alphabetic +05F0..05F2 ; Alphabetic +0610..0615 ; Alphabetic +0621..063A ; Alphabetic +0640 ; Alphabetic +0641..064A ; Alphabetic +064B..0657 ; Alphabetic +0659..065E ; Alphabetic +066E..066F ; Alphabetic +0670 ; Alphabetic +0671..06D3 ; Alphabetic +06D5 ; Alphabetic +06D6..06DC ; Alphabetic +06E1..06E4 ; Alphabetic +06E5..06E6 ; Alphabetic +06E7..06E8 ; Alphabetic +06ED ; Alphabetic +06EE..06EF ; Alphabetic +06FA..06FC ; Alphabetic +06FF ; Alphabetic +0710 ; Alphabetic +0711 ; Alphabetic +0712..072F ; Alphabetic +0730..073F ; Alphabetic +074D..076D ; Alphabetic +0780..07A5 ; Alphabetic +07A6..07B0 ; Alphabetic +07B1 ; Alphabetic +07CA..07EA ; Alphabetic +07F4..07F5 ; Alphabetic +07FA ; Alphabetic +0901..0902 ; Alphabetic +0903 ; Alphabetic +0904..0939 ; Alphabetic +093D ; Alphabetic +093E..0940 ; Alphabetic +0941..0948 ; Alphabetic +0949..094C ; Alphabetic +0950 ; Alphabetic +0958..0961 ; Alphabetic +0962..0963 ; Alphabetic +097B..097F ; Alphabetic +0981 ; Alphabetic +0982..0983 ; Alphabetic +0985..098C ; Alphabetic +098F..0990 ; Alphabetic +0993..09A8 ; Alphabetic +09AA..09B0 ; Alphabetic +09B2 ; Alphabetic +09B6..09B9 ; Alphabetic +09BD ; Alphabetic +09BE..09C0 ; Alphabetic +09C1..09C4 ; Alphabetic +09C7..09C8 ; Alphabetic +09CB..09CC ; Alphabetic +09CE ; Alphabetic +09D7 ; Alphabetic +09DC..09DD ; Alphabetic +09DF..09E1 ; Alphabetic +09E2..09E3 ; Alphabetic +09F0..09F1 ; Alphabetic +0A01..0A02 ; Alphabetic +0A03 ; Alphabetic +0A05..0A0A ; Alphabetic +0A0F..0A10 ; Alphabetic +0A13..0A28 ; Alphabetic +0A2A..0A30 ; Alphabetic +0A32..0A33 ; Alphabetic +0A35..0A36 ; Alphabetic +0A38..0A39 ; Alphabetic +0A3E..0A40 ; Alphabetic +0A41..0A42 ; Alphabetic +0A47..0A48 ; Alphabetic +0A4B..0A4C ; Alphabetic +0A59..0A5C ; Alphabetic +0A5E ; Alphabetic +0A70..0A71 ; Alphabetic +0A72..0A74 ; Alphabetic +0A81..0A82 ; Alphabetic +0A83 ; Alphabetic +0A85..0A8D ; Alphabetic +0A8F..0A91 ; Alphabetic +0A93..0AA8 ; Alphabetic +0AAA..0AB0 ; Alphabetic +0AB2..0AB3 ; Alphabetic +0AB5..0AB9 ; Alphabetic +0ABD ; Alphabetic +0ABE..0AC0 ; Alphabetic +0AC1..0AC5 ; Alphabetic +0AC7..0AC8 ; Alphabetic +0AC9 ; Alphabetic +0ACB..0ACC ; Alphabetic +0AD0 ; Alphabetic +0AE0..0AE1 ; Alphabetic +0AE2..0AE3 ; Alphabetic +0B01 ; Alphabetic +0B02..0B03 ; Alphabetic +0B05..0B0C ; Alphabetic +0B0F..0B10 ; Alphabetic +0B13..0B28 ; Alphabetic +0B2A..0B30 ; Alphabetic +0B32..0B33 ; Alphabetic +0B35..0B39 ; Alphabetic +0B3D ; Alphabetic +0B3E ; Alphabetic +0B3F ; Alphabetic +0B40 ; Alphabetic +0B41..0B43 ; Alphabetic +0B47..0B48 ; Alphabetic +0B4B..0B4C ; Alphabetic +0B56 ; Alphabetic +0B57 ; Alphabetic +0B5C..0B5D ; Alphabetic +0B5F..0B61 ; Alphabetic +0B71 ; Alphabetic +0B82 ; Alphabetic +0B83 ; Alphabetic +0B85..0B8A ; Alphabetic +0B8E..0B90 ; Alphabetic +0B92..0B95 ; Alphabetic +0B99..0B9A ; Alphabetic +0B9C ; Alphabetic +0B9E..0B9F ; Alphabetic +0BA3..0BA4 ; Alphabetic +0BA8..0BAA ; Alphabetic +0BAE..0BB9 ; Alphabetic +0BBE..0BBF ; Alphabetic +0BC0 ; Alphabetic +0BC1..0BC2 ; Alphabetic +0BC6..0BC8 ; Alphabetic +0BCA..0BCC ; Alphabetic +0BD7 ; Alphabetic +0C01..0C03 ; Alphabetic +0C05..0C0C ; Alphabetic +0C0E..0C10 ; Alphabetic +0C12..0C28 ; Alphabetic +0C2A..0C33 ; Alphabetic +0C35..0C39 ; Alphabetic +0C3E..0C40 ; Alphabetic +0C41..0C44 ; Alphabetic +0C46..0C48 ; Alphabetic +0C4A..0C4C ; Alphabetic +0C55..0C56 ; Alphabetic +0C60..0C61 ; Alphabetic +0C82..0C83 ; Alphabetic +0C85..0C8C ; Alphabetic +0C8E..0C90 ; Alphabetic +0C92..0CA8 ; Alphabetic +0CAA..0CB3 ; Alphabetic +0CB5..0CB9 ; Alphabetic +0CBD ; Alphabetic +0CBE ; Alphabetic +0CBF ; Alphabetic +0CC0..0CC4 ; Alphabetic +0CC6 ; Alphabetic +0CC7..0CC8 ; Alphabetic +0CCA..0CCB ; Alphabetic +0CCC ; Alphabetic +0CD5..0CD6 ; Alphabetic +0CDE ; Alphabetic +0CE0..0CE1 ; Alphabetic +0CE2..0CE3 ; Alphabetic +0D02..0D03 ; Alphabetic +0D05..0D0C ; Alphabetic +0D0E..0D10 ; Alphabetic +0D12..0D28 ; Alphabetic +0D2A..0D39 ; Alphabetic +0D3E..0D40 ; Alphabetic +0D41..0D43 ; Alphabetic +0D46..0D48 ; Alphabetic +0D4A..0D4C ; Alphabetic +0D57 ; Alphabetic +0D60..0D61 ; Alphabetic +0D82..0D83 ; Alphabetic +0D85..0D96 ; Alphabetic +0D9A..0DB1 ; Alphabetic +0DB3..0DBB ; Alphabetic +0DBD ; Alphabetic +0DC0..0DC6 ; Alphabetic +0DCF..0DD1 ; Alphabetic +0DD2..0DD4 ; Alphabetic +0DD6 ; Alphabetic +0DD8..0DDF ; Alphabetic +0DF2..0DF3 ; Alphabetic +0E01..0E30 ; Alphabetic +0E31 ; Alphabetic +0E32..0E33 ; Alphabetic +0E34..0E3A ; Alphabetic +0E40..0E45 ; Alphabetic +0E46 ; Alphabetic +0E4D ; Alphabetic +0E81..0E82 ; Alphabetic +0E84 ; Alphabetic +0E87..0E88 ; Alphabetic +0E8A ; Alphabetic +0E8D ; Alphabetic +0E94..0E97 ; Alphabetic +0E99..0E9F ; Alphabetic +0EA1..0EA3 ; Alphabetic +0EA5 ; Alphabetic +0EA7 ; Alphabetic +0EAA..0EAB ; Alphabetic +0EAD..0EB0 ; Alphabetic +0EB1 ; Alphabetic +0EB2..0EB3 ; Alphabetic +0EB4..0EB9 ; Alphabetic +0EBB..0EBC ; Alphabetic +0EBD ; Alphabetic +0EC0..0EC4 ; Alphabetic +0EC6 ; Alphabetic +0ECD ; Alphabetic +0EDC..0EDD ; Alphabetic +0F00 ; Alphabetic +0F40..0F47 ; Alphabetic +0F49..0F6A ; Alphabetic +0F71..0F7E ; Alphabetic +0F7F ; Alphabetic +0F80..0F81 ; Alphabetic +0F88..0F8B ; Alphabetic +0F90..0F97 ; Alphabetic +0F99..0FBC ; Alphabetic +1000..1021 ; Alphabetic +1023..1027 ; Alphabetic +1029..102A ; Alphabetic +102C ; Alphabetic +102D..1030 ; Alphabetic +1031 ; Alphabetic +1032 ; Alphabetic +1036 ; Alphabetic +1038 ; Alphabetic +1050..1055 ; Alphabetic +1056..1057 ; Alphabetic +1058..1059 ; Alphabetic +10A0..10C5 ; Alphabetic +10D0..10FA ; Alphabetic +10FC ; Alphabetic +1100..1159 ; Alphabetic +115F..11A2 ; Alphabetic +11A8..11F9 ; Alphabetic +1200..1248 ; Alphabetic +124A..124D ; Alphabetic +1250..1256 ; Alphabetic +1258 ; Alphabetic +125A..125D ; Alphabetic +1260..1288 ; Alphabetic +128A..128D ; Alphabetic +1290..12B0 ; Alphabetic +12B2..12B5 ; Alphabetic +12B8..12BE ; Alphabetic +12C0 ; Alphabetic +12C2..12C5 ; Alphabetic +12C8..12D6 ; Alphabetic +12D8..1310 ; Alphabetic +1312..1315 ; Alphabetic +1318..135A ; Alphabetic +135F ; Alphabetic +1380..138F ; Alphabetic +13A0..13F4 ; Alphabetic +1401..166C ; Alphabetic +166F..1676 ; Alphabetic +1681..169A ; Alphabetic +16A0..16EA ; Alphabetic +16EE..16F0 ; Alphabetic +1700..170C ; Alphabetic +170E..1711 ; Alphabetic +1712..1713 ; Alphabetic +1720..1731 ; Alphabetic +1732..1733 ; Alphabetic +1740..1751 ; Alphabetic +1752..1753 ; Alphabetic +1760..176C ; Alphabetic +176E..1770 ; Alphabetic +1772..1773 ; Alphabetic +1780..17B3 ; Alphabetic +17B6 ; Alphabetic +17B7..17BD ; Alphabetic +17BE..17C5 ; Alphabetic +17C6 ; Alphabetic +17C7..17C8 ; Alphabetic +17D7 ; Alphabetic +17DC ; Alphabetic +1820..1842 ; Alphabetic +1843 ; Alphabetic +1844..1877 ; Alphabetic +1880..18A8 ; Alphabetic +18A9 ; Alphabetic +1900..191C ; Alphabetic +1920..1922 ; Alphabetic +1923..1926 ; Alphabetic +1927..1928 ; Alphabetic +1929..192B ; Alphabetic +1930..1931 ; Alphabetic +1932 ; Alphabetic +1933..1938 ; Alphabetic +1950..196D ; Alphabetic +1970..1974 ; Alphabetic +1980..19A9 ; Alphabetic +19B0..19C0 ; Alphabetic +19C1..19C7 ; Alphabetic +19C8..19C9 ; Alphabetic +1A00..1A16 ; Alphabetic +1A17..1A18 ; Alphabetic +1A19..1A1B ; Alphabetic +1B00..1B03 ; Alphabetic +1B04 ; Alphabetic +1B05..1B33 ; Alphabetic +1B35 ; Alphabetic +1B36..1B3A ; Alphabetic +1B3B ; Alphabetic +1B3C ; Alphabetic +1B3D..1B41 ; Alphabetic +1B42 ; Alphabetic +1B43 ; Alphabetic +1B45..1B4B ; Alphabetic +1D00..1D2B ; Alphabetic +1D2C..1D61 ; Alphabetic +1D62..1D77 ; Alphabetic +1D78 ; Alphabetic +1D79..1D9A ; Alphabetic +1D9B..1DBF ; Alphabetic +1E00..1E9B ; Alphabetic +1EA0..1EF9 ; Alphabetic +1F00..1F15 ; Alphabetic +1F18..1F1D ; Alphabetic +1F20..1F45 ; Alphabetic +1F48..1F4D ; Alphabetic +1F50..1F57 ; Alphabetic +1F59 ; Alphabetic +1F5B ; Alphabetic +1F5D ; Alphabetic +1F5F..1F7D ; Alphabetic +1F80..1FB4 ; Alphabetic +1FB6..1FBC ; Alphabetic +1FBE ; Alphabetic +1FC2..1FC4 ; Alphabetic +1FC6..1FCC ; Alphabetic +1FD0..1FD3 ; Alphabetic +1FD6..1FDB ; Alphabetic +1FE0..1FEC ; Alphabetic +1FF2..1FF4 ; Alphabetic +1FF6..1FFC ; Alphabetic +2071 ; Alphabetic +207F ; Alphabetic +2090..2094 ; Alphabetic +2102 ; Alphabetic +2107 ; Alphabetic +210A..2113 ; Alphabetic +2115 ; Alphabetic +2119..211D ; Alphabetic +2124 ; Alphabetic +2126 ; Alphabetic +2128 ; Alphabetic +212A..212D ; Alphabetic +212F..2134 ; Alphabetic +2135..2138 ; Alphabetic +2139 ; Alphabetic +213C..213F ; Alphabetic +2145..2149 ; Alphabetic +214E ; Alphabetic +2160..2182 ; Alphabetic +2183..2184 ; Alphabetic +24B6..24E9 ; Alphabetic +2C00..2C2E ; Alphabetic +2C30..2C5E ; Alphabetic +2C60..2C6C ; Alphabetic +2C74..2C77 ; Alphabetic +2C80..2CE4 ; Alphabetic +2D00..2D25 ; Alphabetic +2D30..2D65 ; Alphabetic +2D6F ; Alphabetic +2D80..2D96 ; Alphabetic +2DA0..2DA6 ; Alphabetic +2DA8..2DAE ; Alphabetic +2DB0..2DB6 ; Alphabetic +2DB8..2DBE ; Alphabetic +2DC0..2DC6 ; Alphabetic +2DC8..2DCE ; Alphabetic +2DD0..2DD6 ; Alphabetic +2DD8..2DDE ; Alphabetic +3005 ; Alphabetic +3006 ; Alphabetic +3007 ; Alphabetic +3021..3029 ; Alphabetic +3031..3035 ; Alphabetic +3038..303A ; Alphabetic +303B ; Alphabetic +303C ; Alphabetic +3041..3096 ; Alphabetic +309D..309E ; Alphabetic +309F ; Alphabetic +30A1..30FA ; Alphabetic +30FC..30FE ; Alphabetic +30FF ; Alphabetic +3105..312C ; Alphabetic +3131..318E ; Alphabetic +31A0..31B7 ; Alphabetic +31F0..31FF ; Alphabetic +3400..4DB5 ; Alphabetic +4E00..9FBB ; Alphabetic +A000..A014 ; Alphabetic +A015 ; Alphabetic +A016..A48C ; Alphabetic +A717..A71A ; Alphabetic +A800..A801 ; Alphabetic +A803..A805 ; Alphabetic +A807..A80A ; Alphabetic +A80C..A822 ; Alphabetic +A823..A824 ; Alphabetic +A825..A826 ; Alphabetic +A827 ; Alphabetic +A840..A873 ; Alphabetic +AC00..D7A3 ; Alphabetic +F900..FA2D ; Alphabetic +FA30..FA6A ; Alphabetic +FA70..FAD9 ; Alphabetic +FB00..FB06 ; Alphabetic +FB13..FB17 ; Alphabetic +FB1D ; Alphabetic +FB1E ; Alphabetic +FB1F..FB28 ; Alphabetic +FB2A..FB36 ; Alphabetic +FB38..FB3C ; Alphabetic +FB3E ; Alphabetic +FB40..FB41 ; Alphabetic +FB43..FB44 ; Alphabetic +FB46..FBB1 ; Alphabetic +FBD3..FD3D ; Alphabetic +FD50..FD8F ; Alphabetic +FD92..FDC7 ; Alphabetic +FDF0..FDFB ; Alphabetic +FE70..FE74 ; Alphabetic +FE76..FEFC ; Alphabetic +FF21..FF3A ; Alphabetic +FF41..FF5A ; Alphabetic +FF66..FF6F ; Alphabetic +FF70 ; Alphabetic +FF71..FF9D ; Alphabetic +FF9E..FF9F ; Alphabetic +FFA0..FFBE ; Alphabetic +FFC2..FFC7 ; Alphabetic +FFCA..FFCF ; Alphabetic +FFD2..FFD7 ; Alphabetic +FFDA..FFDC ; Alphabetic +10000..1000B ; Alphabetic +1000D..10026 ; Alphabetic +10028..1003A ; Alphabetic +1003C..1003D ; Alphabetic +1003F..1004D ; Alphabetic +10050..1005D ; Alphabetic +10080..100FA ; Alphabetic +10140..10174 ; Alphabetic +10300..1031E ; Alphabetic +10330..10340 ; Alphabetic +10341 ; Alphabetic +10342..10349 ; Alphabetic +1034A ; Alphabetic +10380..1039D ; Alphabetic +103A0..103C3 ; Alphabetic +103C8..103CF ; Alphabetic +103D1..103D5 ; Alphabetic +10400..1044F ; Alphabetic +10450..1049D ; Alphabetic +10800..10805 ; Alphabetic +10808 ; Alphabetic +1080A..10835 ; Alphabetic +10837..10838 ; Alphabetic +1083C ; Alphabetic +1083F ; Alphabetic +10900..10915 ; Alphabetic +10A00 ; Alphabetic +10A01..10A03 ; Alphabetic +10A05..10A06 ; Alphabetic +10A0C..10A0F ; Alphabetic +10A10..10A13 ; Alphabetic +10A15..10A17 ; Alphabetic +10A19..10A33 ; Alphabetic +12000..1236E ; Alphabetic +12400..12462 ; Alphabetic +1D400..1D454 ; Alphabetic +1D456..1D49C ; Alphabetic +1D49E..1D49F ; Alphabetic +1D4A2 ; Alphabetic +1D4A5..1D4A6 ; Alphabetic +1D4A9..1D4AC ; Alphabetic +1D4AE..1D4B9 ; Alphabetic +1D4BB ; Alphabetic +1D4BD..1D4C3 ; Alphabetic +1D4C5..1D505 ; Alphabetic +1D507..1D50A ; Alphabetic +1D50D..1D514 ; Alphabetic +1D516..1D51C ; Alphabetic +1D51E..1D539 ; Alphabetic +1D53B..1D53E ; Alphabetic +1D540..1D544 ; Alphabetic +1D546 ; Alphabetic +1D54A..1D550 ; Alphabetic +1D552..1D6A5 ; Alphabetic +1D6A8..1D6C0 ; Alphabetic +1D6C2..1D6DA ; Alphabetic +1D6DC..1D6FA ; Alphabetic +1D6FC..1D714 ; Alphabetic +1D716..1D734 ; Alphabetic +1D736..1D74E ; Alphabetic +1D750..1D76E ; Alphabetic +1D770..1D788 ; Alphabetic +1D78A..1D7A8 ; Alphabetic +1D7AA..1D7C2 ; Alphabetic +1D7C4..1D7CB ; Alphabetic +20000..2A6D6 ; Alphabetic +2F800..2FA1D ; Alphabetic + +# Total code points: 93217 + +# ================================================ + +# Derived Property: Lowercase +# Generated from: Ll + Other_Lowercase + +0061..007A ; Lowercase +00AA ; Lowercase +00B5 ; Lowercase +00BA ; Lowercase +00DF..00F6 ; Lowercase +00F8..00FF ; Lowercase +0101 ; Lowercase +0103 ; Lowercase +0105 ; Lowercase +0107 ; Lowercase +0109 ; Lowercase +010B ; Lowercase +010D ; Lowercase +010F ; Lowercase +0111 ; Lowercase +0113 ; Lowercase +0115 ; Lowercase +0117 ; Lowercase +0119 ; Lowercase +011B ; Lowercase +011D ; Lowercase +011F ; Lowercase +0121 ; Lowercase +0123 ; Lowercase +0125 ; Lowercase +0127 ; Lowercase +0129 ; Lowercase +012B ; Lowercase +012D ; Lowercase +012F ; Lowercase +0131 ; Lowercase +0133 ; Lowercase +0135 ; Lowercase +0137..0138 ; Lowercase +013A ; Lowercase +013C ; Lowercase +013E ; Lowercase +0140 ; Lowercase +0142 ; Lowercase +0144 ; Lowercase +0146 ; Lowercase +0148..0149 ; Lowercase +014B ; Lowercase +014D ; Lowercase +014F ; Lowercase +0151 ; Lowercase +0153 ; Lowercase +0155 ; Lowercase +0157 ; Lowercase +0159 ; Lowercase +015B ; Lowercase +015D ; Lowercase +015F ; Lowercase +0161 ; Lowercase +0163 ; Lowercase +0165 ; Lowercase +0167 ; Lowercase +0169 ; Lowercase +016B ; Lowercase +016D ; Lowercase +016F ; Lowercase +0171 ; Lowercase +0173 ; Lowercase +0175 ; Lowercase +0177 ; Lowercase +017A ; Lowercase +017C ; Lowercase +017E..0180 ; Lowercase +0183 ; Lowercase +0185 ; Lowercase +0188 ; Lowercase +018C..018D ; Lowercase +0192 ; Lowercase +0195 ; Lowercase +0199..019B ; Lowercase +019E ; Lowercase +01A1 ; Lowercase +01A3 ; Lowercase +01A5 ; Lowercase +01A8 ; Lowercase +01AA..01AB ; Lowercase +01AD ; Lowercase +01B0 ; Lowercase +01B4 ; Lowercase +01B6 ; Lowercase +01B9..01BA ; Lowercase +01BD..01BF ; Lowercase +01C6 ; Lowercase +01C9 ; Lowercase +01CC ; Lowercase +01CE ; Lowercase +01D0 ; Lowercase +01D2 ; Lowercase +01D4 ; Lowercase +01D6 ; Lowercase +01D8 ; Lowercase +01DA ; Lowercase +01DC..01DD ; Lowercase +01DF ; Lowercase +01E1 ; Lowercase +01E3 ; Lowercase +01E5 ; Lowercase +01E7 ; Lowercase +01E9 ; Lowercase +01EB ; Lowercase +01ED ; Lowercase +01EF..01F0 ; Lowercase +01F3 ; Lowercase +01F5 ; Lowercase +01F9 ; Lowercase +01FB ; Lowercase +01FD ; Lowercase +01FF ; Lowercase +0201 ; Lowercase +0203 ; Lowercase +0205 ; Lowercase +0207 ; Lowercase +0209 ; Lowercase +020B ; Lowercase +020D ; Lowercase +020F ; Lowercase +0211 ; Lowercase +0213 ; Lowercase +0215 ; Lowercase +0217 ; Lowercase +0219 ; Lowercase +021B ; Lowercase +021D ; Lowercase +021F ; Lowercase +0221 ; Lowercase +0223 ; Lowercase +0225 ; Lowercase +0227 ; Lowercase +0229 ; Lowercase +022B ; Lowercase +022D ; Lowercase +022F ; Lowercase +0231 ; Lowercase +0233..0239 ; Lowercase +023C ; Lowercase +023F..0240 ; Lowercase +0242 ; Lowercase +0247 ; Lowercase +0249 ; Lowercase +024B ; Lowercase +024D ; Lowercase +024F..0293 ; Lowercase +0295..02AF ; Lowercase +02B0..02B8 ; Lowercase +02C0..02C1 ; Lowercase +02E0..02E4 ; Lowercase +0345 ; Lowercase +037A ; Lowercase +037B..037D ; Lowercase +0390 ; Lowercase +03AC..03CE ; Lowercase +03D0..03D1 ; Lowercase +03D5..03D7 ; Lowercase +03D9 ; Lowercase +03DB ; Lowercase +03DD ; Lowercase +03DF ; Lowercase +03E1 ; Lowercase +03E3 ; Lowercase +03E5 ; Lowercase +03E7 ; Lowercase +03E9 ; Lowercase +03EB ; Lowercase +03ED ; Lowercase +03EF..03F3 ; Lowercase +03F5 ; Lowercase +03F8 ; Lowercase +03FB..03FC ; Lowercase +0430..045F ; Lowercase +0461 ; Lowercase +0463 ; Lowercase +0465 ; Lowercase +0467 ; Lowercase +0469 ; Lowercase +046B ; Lowercase +046D ; Lowercase +046F ; Lowercase +0471 ; Lowercase +0473 ; Lowercase +0475 ; Lowercase +0477 ; Lowercase +0479 ; Lowercase +047B ; Lowercase +047D ; Lowercase +047F ; Lowercase +0481 ; Lowercase +048B ; Lowercase +048D ; Lowercase +048F ; Lowercase +0491 ; Lowercase +0493 ; Lowercase +0495 ; Lowercase +0497 ; Lowercase +0499 ; Lowercase +049B ; Lowercase +049D ; Lowercase +049F ; Lowercase +04A1 ; Lowercase +04A3 ; Lowercase +04A5 ; Lowercase +04A7 ; Lowercase +04A9 ; Lowercase +04AB ; Lowercase +04AD ; Lowercase +04AF ; Lowercase +04B1 ; Lowercase +04B3 ; Lowercase +04B5 ; Lowercase +04B7 ; Lowercase +04B9 ; Lowercase +04BB ; Lowercase +04BD ; Lowercase +04BF ; Lowercase +04C2 ; Lowercase +04C4 ; Lowercase +04C6 ; Lowercase +04C8 ; Lowercase +04CA ; Lowercase +04CC ; Lowercase +04CE..04CF ; Lowercase +04D1 ; Lowercase +04D3 ; Lowercase +04D5 ; Lowercase +04D7 ; Lowercase +04D9 ; Lowercase +04DB ; Lowercase +04DD ; Lowercase +04DF ; Lowercase +04E1 ; Lowercase +04E3 ; Lowercase +04E5 ; Lowercase +04E7 ; Lowercase +04E9 ; Lowercase +04EB ; Lowercase +04ED ; Lowercase +04EF ; Lowercase +04F1 ; Lowercase +04F3 ; Lowercase +04F5 ; Lowercase +04F7 ; Lowercase +04F9 ; Lowercase +04FB ; Lowercase +04FD ; Lowercase +04FF ; Lowercase +0501 ; Lowercase +0503 ; Lowercase +0505 ; Lowercase +0507 ; Lowercase +0509 ; Lowercase +050B ; Lowercase +050D ; Lowercase +050F ; Lowercase +0511 ; Lowercase +0513 ; Lowercase +0561..0587 ; Lowercase +1D00..1D2B ; Lowercase +1D2C..1D61 ; Lowercase +1D62..1D77 ; Lowercase +1D78 ; Lowercase +1D79..1D9A ; Lowercase +1D9B..1DBF ; Lowercase +1E01 ; Lowercase +1E03 ; Lowercase +1E05 ; Lowercase +1E07 ; Lowercase +1E09 ; Lowercase +1E0B ; Lowercase +1E0D ; Lowercase +1E0F ; Lowercase +1E11 ; Lowercase +1E13 ; Lowercase +1E15 ; Lowercase +1E17 ; Lowercase +1E19 ; Lowercase +1E1B ; Lowercase +1E1D ; Lowercase +1E1F ; Lowercase +1E21 ; Lowercase +1E23 ; Lowercase +1E25 ; Lowercase +1E27 ; Lowercase +1E29 ; Lowercase +1E2B ; Lowercase +1E2D ; Lowercase +1E2F ; Lowercase +1E31 ; Lowercase +1E33 ; Lowercase +1E35 ; Lowercase +1E37 ; Lowercase +1E39 ; Lowercase +1E3B ; Lowercase +1E3D ; Lowercase +1E3F ; Lowercase +1E41 ; Lowercase +1E43 ; Lowercase +1E45 ; Lowercase +1E47 ; Lowercase +1E49 ; Lowercase +1E4B ; Lowercase +1E4D ; Lowercase +1E4F ; Lowercase +1E51 ; Lowercase +1E53 ; Lowercase +1E55 ; Lowercase +1E57 ; Lowercase +1E59 ; Lowercase +1E5B ; Lowercase +1E5D ; Lowercase +1E5F ; Lowercase +1E61 ; Lowercase +1E63 ; Lowercase +1E65 ; Lowercase +1E67 ; Lowercase +1E69 ; Lowercase +1E6B ; Lowercase +1E6D ; Lowercase +1E6F ; Lowercase +1E71 ; Lowercase +1E73 ; Lowercase +1E75 ; Lowercase +1E77 ; Lowercase +1E79 ; Lowercase +1E7B ; Lowercase +1E7D ; Lowercase +1E7F ; Lowercase +1E81 ; Lowercase +1E83 ; Lowercase +1E85 ; Lowercase +1E87 ; Lowercase +1E89 ; Lowercase +1E8B ; Lowercase +1E8D ; Lowercase +1E8F ; Lowercase +1E91 ; Lowercase +1E93 ; Lowercase +1E95..1E9B ; Lowercase +1EA1 ; Lowercase +1EA3 ; Lowercase +1EA5 ; Lowercase +1EA7 ; Lowercase +1EA9 ; Lowercase +1EAB ; Lowercase +1EAD ; Lowercase +1EAF ; Lowercase +1EB1 ; Lowercase +1EB3 ; Lowercase +1EB5 ; Lowercase +1EB7 ; Lowercase +1EB9 ; Lowercase +1EBB ; Lowercase +1EBD ; Lowercase +1EBF ; Lowercase +1EC1 ; Lowercase +1EC3 ; Lowercase +1EC5 ; Lowercase +1EC7 ; Lowercase +1EC9 ; Lowercase +1ECB ; Lowercase +1ECD ; Lowercase +1ECF ; Lowercase +1ED1 ; Lowercase +1ED3 ; Lowercase +1ED5 ; Lowercase +1ED7 ; Lowercase +1ED9 ; Lowercase +1EDB ; Lowercase +1EDD ; Lowercase +1EDF ; Lowercase +1EE1 ; Lowercase +1EE3 ; Lowercase +1EE5 ; Lowercase +1EE7 ; Lowercase +1EE9 ; Lowercase +1EEB ; Lowercase +1EED ; Lowercase +1EEF ; Lowercase +1EF1 ; Lowercase +1EF3 ; Lowercase +1EF5 ; Lowercase +1EF7 ; Lowercase +1EF9 ; Lowercase +1F00..1F07 ; Lowercase +1F10..1F15 ; Lowercase +1F20..1F27 ; Lowercase +1F30..1F37 ; Lowercase +1F40..1F45 ; Lowercase +1F50..1F57 ; Lowercase +1F60..1F67 ; Lowercase +1F70..1F7D ; Lowercase +1F80..1F87 ; Lowercase +1F90..1F97 ; Lowercase +1FA0..1FA7 ; Lowercase +1FB0..1FB4 ; Lowercase +1FB6..1FB7 ; Lowercase +1FBE ; Lowercase +1FC2..1FC4 ; Lowercase +1FC6..1FC7 ; Lowercase +1FD0..1FD3 ; Lowercase +1FD6..1FD7 ; Lowercase +1FE0..1FE7 ; Lowercase +1FF2..1FF4 ; Lowercase +1FF6..1FF7 ; Lowercase +2071 ; Lowercase +207F ; Lowercase +2090..2094 ; Lowercase +210A ; Lowercase +210E..210F ; Lowercase +2113 ; Lowercase +212F ; Lowercase +2134 ; Lowercase +2139 ; Lowercase +213C..213D ; Lowercase +2146..2149 ; Lowercase +214E ; Lowercase +2170..217F ; Lowercase +2184 ; Lowercase +24D0..24E9 ; Lowercase +2C30..2C5E ; Lowercase +2C61 ; Lowercase +2C65..2C66 ; Lowercase +2C68 ; Lowercase +2C6A ; Lowercase +2C6C ; Lowercase +2C74 ; Lowercase +2C76..2C77 ; Lowercase +2C81 ; Lowercase +2C83 ; Lowercase +2C85 ; Lowercase +2C87 ; Lowercase +2C89 ; Lowercase +2C8B ; Lowercase +2C8D ; Lowercase +2C8F ; Lowercase +2C91 ; Lowercase +2C93 ; Lowercase +2C95 ; Lowercase +2C97 ; Lowercase +2C99 ; Lowercase +2C9B ; Lowercase +2C9D ; Lowercase +2C9F ; Lowercase +2CA1 ; Lowercase +2CA3 ; Lowercase +2CA5 ; Lowercase +2CA7 ; Lowercase +2CA9 ; Lowercase +2CAB ; Lowercase +2CAD ; Lowercase +2CAF ; Lowercase +2CB1 ; Lowercase +2CB3 ; Lowercase +2CB5 ; Lowercase +2CB7 ; Lowercase +2CB9 ; Lowercase +2CBB ; Lowercase +2CBD ; Lowercase +2CBF ; Lowercase +2CC1 ; Lowercase +2CC3 ; Lowercase +2CC5 ; Lowercase +2CC7 ; Lowercase +2CC9 ; Lowercase +2CCB ; Lowercase +2CCD ; Lowercase +2CCF ; Lowercase +2CD1 ; Lowercase +2CD3 ; Lowercase +2CD5 ; Lowercase +2CD7 ; Lowercase +2CD9 ; Lowercase +2CDB ; Lowercase +2CDD ; Lowercase +2CDF ; Lowercase +2CE1 ; Lowercase +2CE3..2CE4 ; Lowercase +2D00..2D25 ; Lowercase +FB00..FB06 ; Lowercase +FB13..FB17 ; Lowercase +FF41..FF5A ; Lowercase +10428..1044F ; Lowercase +1D41A..1D433 ; Lowercase +1D44E..1D454 ; Lowercase +1D456..1D467 ; Lowercase +1D482..1D49B ; Lowercase +1D4B6..1D4B9 ; Lowercase +1D4BB ; Lowercase +1D4BD..1D4C3 ; Lowercase +1D4C5..1D4CF ; Lowercase +1D4EA..1D503 ; Lowercase +1D51E..1D537 ; Lowercase +1D552..1D56B ; Lowercase +1D586..1D59F ; Lowercase +1D5BA..1D5D3 ; Lowercase +1D5EE..1D607 ; Lowercase +1D622..1D63B ; Lowercase +1D656..1D66F ; Lowercase +1D68A..1D6A5 ; Lowercase +1D6C2..1D6DA ; Lowercase +1D6DC..1D6E1 ; Lowercase +1D6FC..1D714 ; Lowercase +1D716..1D71B ; Lowercase +1D736..1D74E ; Lowercase +1D750..1D755 ; Lowercase +1D770..1D788 ; Lowercase +1D78A..1D78F ; Lowercase +1D7AA..1D7C2 ; Lowercase +1D7C4..1D7C9 ; Lowercase +1D7CB ; Lowercase + +# Total code points: 1791 + +# ================================================ + +# Derived Property: Uppercase +# Generated from: Lu + Other_Uppercase + +0041..005A ; Uppercase +00C0..00D6 ; Uppercase +00D8..00DE ; Uppercase +0100 ; Uppercase +0102 ; Uppercase +0104 ; Uppercase +0106 ; Uppercase +0108 ; Uppercase +010A ; Uppercase +010C ; Uppercase +010E ; Uppercase +0110 ; Uppercase +0112 ; Uppercase +0114 ; Uppercase +0116 ; Uppercase +0118 ; Uppercase +011A ; Uppercase +011C ; Uppercase +011E ; Uppercase +0120 ; Uppercase +0122 ; Uppercase +0124 ; Uppercase +0126 ; Uppercase +0128 ; Uppercase +012A ; Uppercase +012C ; Uppercase +012E ; Uppercase +0130 ; Uppercase +0132 ; Uppercase +0134 ; Uppercase +0136 ; Uppercase +0139 ; Uppercase +013B ; Uppercase +013D ; Uppercase +013F ; Uppercase +0141 ; Uppercase +0143 ; Uppercase +0145 ; Uppercase +0147 ; Uppercase +014A ; Uppercase +014C ; Uppercase +014E ; Uppercase +0150 ; Uppercase +0152 ; Uppercase +0154 ; Uppercase +0156 ; Uppercase +0158 ; Uppercase +015A ; Uppercase +015C ; Uppercase +015E ; Uppercase +0160 ; Uppercase +0162 ; Uppercase +0164 ; Uppercase +0166 ; Uppercase +0168 ; Uppercase +016A ; Uppercase +016C ; Uppercase +016E ; Uppercase +0170 ; Uppercase +0172 ; Uppercase +0174 ; Uppercase +0176 ; Uppercase +0178..0179 ; Uppercase +017B ; Uppercase +017D ; Uppercase +0181..0182 ; Uppercase +0184 ; Uppercase +0186..0187 ; Uppercase +0189..018B ; Uppercase +018E..0191 ; Uppercase +0193..0194 ; Uppercase +0196..0198 ; Uppercase +019C..019D ; Uppercase +019F..01A0 ; Uppercase +01A2 ; Uppercase +01A4 ; Uppercase +01A6..01A7 ; Uppercase +01A9 ; Uppercase +01AC ; Uppercase +01AE..01AF ; Uppercase +01B1..01B3 ; Uppercase +01B5 ; Uppercase +01B7..01B8 ; Uppercase +01BC ; Uppercase +01C4 ; Uppercase +01C7 ; Uppercase +01CA ; Uppercase +01CD ; Uppercase +01CF ; Uppercase +01D1 ; Uppercase +01D3 ; Uppercase +01D5 ; Uppercase +01D7 ; Uppercase +01D9 ; Uppercase +01DB ; Uppercase +01DE ; Uppercase +01E0 ; Uppercase +01E2 ; Uppercase +01E4 ; Uppercase +01E6 ; Uppercase +01E8 ; Uppercase +01EA ; Uppercase +01EC ; Uppercase +01EE ; Uppercase +01F1 ; Uppercase +01F4 ; Uppercase +01F6..01F8 ; Uppercase +01FA ; Uppercase +01FC ; Uppercase +01FE ; Uppercase +0200 ; Uppercase +0202 ; Uppercase +0204 ; Uppercase +0206 ; Uppercase +0208 ; Uppercase +020A ; Uppercase +020C ; Uppercase +020E ; Uppercase +0210 ; Uppercase +0212 ; Uppercase +0214 ; Uppercase +0216 ; Uppercase +0218 ; Uppercase +021A ; Uppercase +021C ; Uppercase +021E ; Uppercase +0220 ; Uppercase +0222 ; Uppercase +0224 ; Uppercase +0226 ; Uppercase +0228 ; Uppercase +022A ; Uppercase +022C ; Uppercase +022E ; Uppercase +0230 ; Uppercase +0232 ; Uppercase +023A..023B ; Uppercase +023D..023E ; Uppercase +0241 ; Uppercase +0243..0246 ; Uppercase +0248 ; Uppercase +024A ; Uppercase +024C ; Uppercase +024E ; Uppercase +0386 ; Uppercase +0388..038A ; Uppercase +038C ; Uppercase +038E..038F ; Uppercase +0391..03A1 ; Uppercase +03A3..03AB ; Uppercase +03D2..03D4 ; Uppercase +03D8 ; Uppercase +03DA ; Uppercase +03DC ; Uppercase +03DE ; Uppercase +03E0 ; Uppercase +03E2 ; Uppercase +03E4 ; Uppercase +03E6 ; Uppercase +03E8 ; Uppercase +03EA ; Uppercase +03EC ; Uppercase +03EE ; Uppercase +03F4 ; Uppercase +03F7 ; Uppercase +03F9..03FA ; Uppercase +03FD..042F ; Uppercase +0460 ; Uppercase +0462 ; Uppercase +0464 ; Uppercase +0466 ; Uppercase +0468 ; Uppercase +046A ; Uppercase +046C ; Uppercase +046E ; Uppercase +0470 ; Uppercase +0472 ; Uppercase +0474 ; Uppercase +0476 ; Uppercase +0478 ; Uppercase +047A ; Uppercase +047C ; Uppercase +047E ; Uppercase +0480 ; Uppercase +048A ; Uppercase +048C ; Uppercase +048E ; Uppercase +0490 ; Uppercase +0492 ; Uppercase +0494 ; Uppercase +0496 ; Uppercase +0498 ; Uppercase +049A ; Uppercase +049C ; Uppercase +049E ; Uppercase +04A0 ; Uppercase +04A2 ; Uppercase +04A4 ; Uppercase +04A6 ; Uppercase +04A8 ; Uppercase +04AA ; Uppercase +04AC ; Uppercase +04AE ; Uppercase +04B0 ; Uppercase +04B2 ; Uppercase +04B4 ; Uppercase +04B6 ; Uppercase +04B8 ; Uppercase +04BA ; Uppercase +04BC ; Uppercase +04BE ; Uppercase +04C0..04C1 ; Uppercase +04C3 ; Uppercase +04C5 ; Uppercase +04C7 ; Uppercase +04C9 ; Uppercase +04CB ; Uppercase +04CD ; Uppercase +04D0 ; Uppercase +04D2 ; Uppercase +04D4 ; Uppercase +04D6 ; Uppercase +04D8 ; Uppercase +04DA ; Uppercase +04DC ; Uppercase +04DE ; Uppercase +04E0 ; Uppercase +04E2 ; Uppercase +04E4 ; Uppercase +04E6 ; Uppercase +04E8 ; Uppercase +04EA ; Uppercase +04EC ; Uppercase +04EE ; Uppercase +04F0 ; Uppercase +04F2 ; Uppercase +04F4 ; Uppercase +04F6 ; Uppercase +04F8 ; Uppercase +04FA ; Uppercase +04FC ; Uppercase +04FE ; Uppercase +0500 ; Uppercase +0502 ; Uppercase +0504 ; Uppercase +0506 ; Uppercase +0508 ; Uppercase +050A ; Uppercase +050C ; Uppercase +050E ; Uppercase +0510 ; Uppercase +0512 ; Uppercase +0531..0556 ; Uppercase +10A0..10C5 ; Uppercase +1E00 ; Uppercase +1E02 ; Uppercase +1E04 ; Uppercase +1E06 ; Uppercase +1E08 ; Uppercase +1E0A ; Uppercase +1E0C ; Uppercase +1E0E ; Uppercase +1E10 ; Uppercase +1E12 ; Uppercase +1E14 ; Uppercase +1E16 ; Uppercase +1E18 ; Uppercase +1E1A ; Uppercase +1E1C ; Uppercase +1E1E ; Uppercase +1E20 ; Uppercase +1E22 ; Uppercase +1E24 ; Uppercase +1E26 ; Uppercase +1E28 ; Uppercase +1E2A ; Uppercase +1E2C ; Uppercase +1E2E ; Uppercase +1E30 ; Uppercase +1E32 ; Uppercase +1E34 ; Uppercase +1E36 ; Uppercase +1E38 ; Uppercase +1E3A ; Uppercase +1E3C ; Uppercase +1E3E ; Uppercase +1E40 ; Uppercase +1E42 ; Uppercase +1E44 ; Uppercase +1E46 ; Uppercase +1E48 ; Uppercase +1E4A ; Uppercase +1E4C ; Uppercase +1E4E ; Uppercase +1E50 ; Uppercase +1E52 ; Uppercase +1E54 ; Uppercase +1E56 ; Uppercase +1E58 ; Uppercase +1E5A ; Uppercase +1E5C ; Uppercase +1E5E ; Uppercase +1E60 ; Uppercase +1E62 ; Uppercase +1E64 ; Uppercase +1E66 ; Uppercase +1E68 ; Uppercase +1E6A ; Uppercase +1E6C ; Uppercase +1E6E ; Uppercase +1E70 ; Uppercase +1E72 ; Uppercase +1E74 ; Uppercase +1E76 ; Uppercase +1E78 ; Uppercase +1E7A ; Uppercase +1E7C ; Uppercase +1E7E ; Uppercase +1E80 ; Uppercase +1E82 ; Uppercase +1E84 ; Uppercase +1E86 ; Uppercase +1E88 ; Uppercase +1E8A ; Uppercase +1E8C ; Uppercase +1E8E ; Uppercase +1E90 ; Uppercase +1E92 ; Uppercase +1E94 ; Uppercase +1EA0 ; Uppercase +1EA2 ; Uppercase +1EA4 ; Uppercase +1EA6 ; Uppercase +1EA8 ; Uppercase +1EAA ; Uppercase +1EAC ; Uppercase +1EAE ; Uppercase +1EB0 ; Uppercase +1EB2 ; Uppercase +1EB4 ; Uppercase +1EB6 ; Uppercase +1EB8 ; Uppercase +1EBA ; Uppercase +1EBC ; Uppercase +1EBE ; Uppercase +1EC0 ; Uppercase +1EC2 ; Uppercase +1EC4 ; Uppercase +1EC6 ; Uppercase +1EC8 ; Uppercase +1ECA ; Uppercase +1ECC ; Uppercase +1ECE ; Uppercase +1ED0 ; Uppercase +1ED2 ; Uppercase +1ED4 ; Uppercase +1ED6 ; Uppercase +1ED8 ; Uppercase +1EDA ; Uppercase +1EDC ; Uppercase +1EDE ; Uppercase +1EE0 ; Uppercase +1EE2 ; Uppercase +1EE4 ; Uppercase +1EE6 ; Uppercase +1EE8 ; Uppercase +1EEA ; Uppercase +1EEC ; Uppercase +1EEE ; Uppercase +1EF0 ; Uppercase +1EF2 ; Uppercase +1EF4 ; Uppercase +1EF6 ; Uppercase +1EF8 ; Uppercase +1F08..1F0F ; Uppercase +1F18..1F1D ; Uppercase +1F28..1F2F ; Uppercase +1F38..1F3F ; Uppercase +1F48..1F4D ; Uppercase +1F59 ; Uppercase +1F5B ; Uppercase +1F5D ; Uppercase +1F5F ; Uppercase +1F68..1F6F ; Uppercase +1FB8..1FBB ; Uppercase +1FC8..1FCB ; Uppercase +1FD8..1FDB ; Uppercase +1FE8..1FEC ; Uppercase +1FF8..1FFB ; Uppercase +2102 ; Uppercase +2107 ; Uppercase +210B..210D ; Uppercase +2110..2112 ; Uppercase +2115 ; Uppercase +2119..211D ; Uppercase +2124 ; Uppercase +2126 ; Uppercase +2128 ; Uppercase +212A..212D ; Uppercase +2130..2133 ; Uppercase +213E..213F ; Uppercase +2145 ; Uppercase +2160..216F ; Uppercase +2183 ; Uppercase +24B6..24CF ; Uppercase +2C00..2C2E ; Uppercase +2C60 ; Uppercase +2C62..2C64 ; Uppercase +2C67 ; Uppercase +2C69 ; Uppercase +2C6B ; Uppercase +2C75 ; Uppercase +2C80 ; Uppercase +2C82 ; Uppercase +2C84 ; Uppercase +2C86 ; Uppercase +2C88 ; Uppercase +2C8A ; Uppercase +2C8C ; Uppercase +2C8E ; Uppercase +2C90 ; Uppercase +2C92 ; Uppercase +2C94 ; Uppercase +2C96 ; Uppercase +2C98 ; Uppercase +2C9A ; Uppercase +2C9C ; Uppercase +2C9E ; Uppercase +2CA0 ; Uppercase +2CA2 ; Uppercase +2CA4 ; Uppercase +2CA6 ; Uppercase +2CA8 ; Uppercase +2CAA ; Uppercase +2CAC ; Uppercase +2CAE ; Uppercase +2CB0 ; Uppercase +2CB2 ; Uppercase +2CB4 ; Uppercase +2CB6 ; Uppercase +2CB8 ; Uppercase +2CBA ; Uppercase +2CBC ; Uppercase +2CBE ; Uppercase +2CC0 ; Uppercase +2CC2 ; Uppercase +2CC4 ; Uppercase +2CC6 ; Uppercase +2CC8 ; Uppercase +2CCA ; Uppercase +2CCC ; Uppercase +2CCE ; Uppercase +2CD0 ; Uppercase +2CD2 ; Uppercase +2CD4 ; Uppercase +2CD6 ; Uppercase +2CD8 ; Uppercase +2CDA ; Uppercase +2CDC ; Uppercase +2CDE ; Uppercase +2CE0 ; Uppercase +2CE2 ; Uppercase +FF21..FF3A ; Uppercase +10400..10427 ; Uppercase +1D400..1D419 ; Uppercase +1D434..1D44D ; Uppercase +1D468..1D481 ; Uppercase +1D49C ; Uppercase +1D49E..1D49F ; Uppercase +1D4A2 ; Uppercase +1D4A5..1D4A6 ; Uppercase +1D4A9..1D4AC ; Uppercase +1D4AE..1D4B5 ; Uppercase +1D4D0..1D4E9 ; Uppercase +1D504..1D505 ; Uppercase +1D507..1D50A ; Uppercase +1D50D..1D514 ; Uppercase +1D516..1D51C ; Uppercase +1D538..1D539 ; Uppercase +1D53B..1D53E ; Uppercase +1D540..1D544 ; Uppercase +1D546 ; Uppercase +1D54A..1D550 ; Uppercase +1D56C..1D585 ; Uppercase +1D5A0..1D5B9 ; Uppercase +1D5D4..1D5ED ; Uppercase +1D608..1D621 ; Uppercase +1D63C..1D655 ; Uppercase +1D670..1D689 ; Uppercase +1D6A8..1D6C0 ; Uppercase +1D6E2..1D6FA ; Uppercase +1D71C..1D734 ; Uppercase +1D756..1D76E ; Uppercase +1D790..1D7A8 ; Uppercase +1D7CA ; Uppercase + +# Total code points: 1362 + +# ================================================ + +# Derived Property: ID_Start +# Characters that can start an identifier. +# Generated from Lu+Ll+Lt+Lm+Lo+Nl+Other_ID_Start +# NOTE: See UAX #31 for more information + +0041..005A ; ID_Start +0061..007A ; ID_Start +00AA ; ID_Start +00B5 ; ID_Start +00BA ; ID_Start +00C0..00D6 ; ID_Start +00D8..00F6 ; ID_Start +00F8..01BA ; ID_Start +01BB ; ID_Start +01BC..01BF ; ID_Start +01C0..01C3 ; ID_Start +01C4..0293 ; ID_Start +0294 ; ID_Start +0295..02AF ; ID_Start +02B0..02C1 ; ID_Start +02C6..02D1 ; ID_Start +02E0..02E4 ; ID_Start +02EE ; ID_Start +037A ; ID_Start +037B..037D ; ID_Start +0386 ; ID_Start +0388..038A ; ID_Start +038C ; ID_Start +038E..03A1 ; ID_Start +03A3..03CE ; ID_Start +03D0..03F5 ; ID_Start +03F7..0481 ; ID_Start +048A..0513 ; ID_Start +0531..0556 ; ID_Start +0559 ; ID_Start +0561..0587 ; ID_Start +05D0..05EA ; ID_Start +05F0..05F2 ; ID_Start +0621..063A ; ID_Start +0640 ; ID_Start +0641..064A ; ID_Start +066E..066F ; ID_Start +0671..06D3 ; ID_Start +06D5 ; ID_Start +06E5..06E6 ; ID_Start +06EE..06EF ; ID_Start +06FA..06FC ; ID_Start +06FF ; ID_Start +0710 ; ID_Start +0712..072F ; ID_Start +074D..076D ; ID_Start +0780..07A5 ; ID_Start +07B1 ; ID_Start +07CA..07EA ; ID_Start +07F4..07F5 ; ID_Start +07FA ; ID_Start +0904..0939 ; ID_Start +093D ; ID_Start +0950 ; ID_Start +0958..0961 ; ID_Start +097B..097F ; ID_Start +0985..098C ; ID_Start +098F..0990 ; ID_Start +0993..09A8 ; ID_Start +09AA..09B0 ; ID_Start +09B2 ; ID_Start +09B6..09B9 ; ID_Start +09BD ; ID_Start +09CE ; ID_Start +09DC..09DD ; ID_Start +09DF..09E1 ; ID_Start +09F0..09F1 ; ID_Start +0A05..0A0A ; ID_Start +0A0F..0A10 ; ID_Start +0A13..0A28 ; ID_Start +0A2A..0A30 ; ID_Start +0A32..0A33 ; ID_Start +0A35..0A36 ; ID_Start +0A38..0A39 ; ID_Start +0A59..0A5C ; ID_Start +0A5E ; ID_Start +0A72..0A74 ; ID_Start +0A85..0A8D ; ID_Start +0A8F..0A91 ; ID_Start +0A93..0AA8 ; ID_Start +0AAA..0AB0 ; ID_Start +0AB2..0AB3 ; ID_Start +0AB5..0AB9 ; ID_Start +0ABD ; ID_Start +0AD0 ; ID_Start +0AE0..0AE1 ; ID_Start +0B05..0B0C ; ID_Start +0B0F..0B10 ; ID_Start +0B13..0B28 ; ID_Start +0B2A..0B30 ; ID_Start +0B32..0B33 ; ID_Start +0B35..0B39 ; ID_Start +0B3D ; ID_Start +0B5C..0B5D ; ID_Start +0B5F..0B61 ; ID_Start +0B71 ; ID_Start +0B83 ; ID_Start +0B85..0B8A ; ID_Start +0B8E..0B90 ; ID_Start +0B92..0B95 ; ID_Start +0B99..0B9A ; ID_Start +0B9C ; ID_Start +0B9E..0B9F ; ID_Start +0BA3..0BA4 ; ID_Start +0BA8..0BAA ; ID_Start +0BAE..0BB9 ; ID_Start +0C05..0C0C ; ID_Start +0C0E..0C10 ; ID_Start +0C12..0C28 ; ID_Start +0C2A..0C33 ; ID_Start +0C35..0C39 ; ID_Start +0C60..0C61 ; ID_Start +0C85..0C8C ; ID_Start +0C8E..0C90 ; ID_Start +0C92..0CA8 ; ID_Start +0CAA..0CB3 ; ID_Start +0CB5..0CB9 ; ID_Start +0CBD ; ID_Start +0CDE ; ID_Start +0CE0..0CE1 ; ID_Start +0D05..0D0C ; ID_Start +0D0E..0D10 ; ID_Start +0D12..0D28 ; ID_Start +0D2A..0D39 ; ID_Start +0D60..0D61 ; ID_Start +0D85..0D96 ; ID_Start +0D9A..0DB1 ; ID_Start +0DB3..0DBB ; ID_Start +0DBD ; ID_Start +0DC0..0DC6 ; ID_Start +0E01..0E30 ; ID_Start +0E32..0E33 ; ID_Start +0E40..0E45 ; ID_Start +0E46 ; ID_Start +0E81..0E82 ; ID_Start +0E84 ; ID_Start +0E87..0E88 ; ID_Start +0E8A ; ID_Start +0E8D ; ID_Start +0E94..0E97 ; ID_Start +0E99..0E9F ; ID_Start +0EA1..0EA3 ; ID_Start +0EA5 ; ID_Start +0EA7 ; ID_Start +0EAA..0EAB ; ID_Start +0EAD..0EB0 ; ID_Start +0EB2..0EB3 ; ID_Start +0EBD ; ID_Start +0EC0..0EC4 ; ID_Start +0EC6 ; ID_Start +0EDC..0EDD ; ID_Start +0F00 ; ID_Start +0F40..0F47 ; ID_Start +0F49..0F6A ; ID_Start +0F88..0F8B ; ID_Start +1000..1021 ; ID_Start +1023..1027 ; ID_Start +1029..102A ; ID_Start +1050..1055 ; ID_Start +10A0..10C5 ; ID_Start +10D0..10FA ; ID_Start +10FC ; ID_Start +1100..1159 ; ID_Start +115F..11A2 ; ID_Start +11A8..11F9 ; ID_Start +1200..1248 ; ID_Start +124A..124D ; ID_Start +1250..1256 ; ID_Start +1258 ; ID_Start +125A..125D ; ID_Start +1260..1288 ; ID_Start +128A..128D ; ID_Start +1290..12B0 ; ID_Start +12B2..12B5 ; ID_Start +12B8..12BE ; ID_Start +12C0 ; ID_Start +12C2..12C5 ; ID_Start +12C8..12D6 ; ID_Start +12D8..1310 ; ID_Start +1312..1315 ; ID_Start +1318..135A ; ID_Start +1380..138F ; ID_Start +13A0..13F4 ; ID_Start +1401..166C ; ID_Start +166F..1676 ; ID_Start +1681..169A ; ID_Start +16A0..16EA ; ID_Start +16EE..16F0 ; ID_Start +1700..170C ; ID_Start +170E..1711 ; ID_Start +1720..1731 ; ID_Start +1740..1751 ; ID_Start +1760..176C ; ID_Start +176E..1770 ; ID_Start +1780..17B3 ; ID_Start +17D7 ; ID_Start +17DC ; ID_Start +1820..1842 ; ID_Start +1843 ; ID_Start +1844..1877 ; ID_Start +1880..18A8 ; ID_Start +1900..191C ; ID_Start +1950..196D ; ID_Start +1970..1974 ; ID_Start +1980..19A9 ; ID_Start +19C1..19C7 ; ID_Start +1A00..1A16 ; ID_Start +1B05..1B33 ; ID_Start +1B45..1B4B ; ID_Start +1D00..1D2B ; ID_Start +1D2C..1D61 ; ID_Start +1D62..1D77 ; ID_Start +1D78 ; ID_Start +1D79..1D9A ; ID_Start +1D9B..1DBF ; ID_Start +1E00..1E9B ; ID_Start +1EA0..1EF9 ; ID_Start +1F00..1F15 ; ID_Start +1F18..1F1D ; ID_Start +1F20..1F45 ; ID_Start +1F48..1F4D ; ID_Start +1F50..1F57 ; ID_Start +1F59 ; ID_Start +1F5B ; ID_Start +1F5D ; ID_Start +1F5F..1F7D ; ID_Start +1F80..1FB4 ; ID_Start +1FB6..1FBC ; ID_Start +1FBE ; ID_Start +1FC2..1FC4 ; ID_Start +1FC6..1FCC ; ID_Start +1FD0..1FD3 ; ID_Start +1FD6..1FDB ; ID_Start +1FE0..1FEC ; ID_Start +1FF2..1FF4 ; ID_Start +1FF6..1FFC ; ID_Start +2071 ; ID_Start +207F ; ID_Start +2090..2094 ; ID_Start +2102 ; ID_Start +2107 ; ID_Start +210A..2113 ; ID_Start +2115 ; ID_Start +2118 ; ID_Start +2119..211D ; ID_Start +2124 ; ID_Start +2126 ; ID_Start +2128 ; ID_Start +212A..212D ; ID_Start +212E ; ID_Start +212F..2134 ; ID_Start +2135..2138 ; ID_Start +2139 ; ID_Start +213C..213F ; ID_Start +2145..2149 ; ID_Start +214E ; ID_Start +2160..2182 ; ID_Start +2183..2184 ; ID_Start +2C00..2C2E ; ID_Start +2C30..2C5E ; ID_Start +2C60..2C6C ; ID_Start +2C74..2C77 ; ID_Start +2C80..2CE4 ; ID_Start +2D00..2D25 ; ID_Start +2D30..2D65 ; ID_Start +2D6F ; ID_Start +2D80..2D96 ; ID_Start +2DA0..2DA6 ; ID_Start +2DA8..2DAE ; ID_Start +2DB0..2DB6 ; ID_Start +2DB8..2DBE ; ID_Start +2DC0..2DC6 ; ID_Start +2DC8..2DCE ; ID_Start +2DD0..2DD6 ; ID_Start +2DD8..2DDE ; ID_Start +3005 ; ID_Start +3006 ; ID_Start +3007 ; ID_Start +3021..3029 ; ID_Start +3031..3035 ; ID_Start +3038..303A ; ID_Start +303B ; ID_Start +303C ; ID_Start +3041..3096 ; ID_Start +309B..309C ; ID_Start +309D..309E ; ID_Start +309F ; ID_Start +30A1..30FA ; ID_Start +30FC..30FE ; ID_Start +30FF ; ID_Start +3105..312C ; ID_Start +3131..318E ; ID_Start +31A0..31B7 ; ID_Start +31F0..31FF ; ID_Start +3400..4DB5 ; ID_Start +4E00..9FBB ; ID_Start +A000..A014 ; ID_Start +A015 ; ID_Start +A016..A48C ; ID_Start +A717..A71A ; ID_Start +A800..A801 ; ID_Start +A803..A805 ; ID_Start +A807..A80A ; ID_Start +A80C..A822 ; ID_Start +A840..A873 ; ID_Start +AC00..D7A3 ; ID_Start +F900..FA2D ; ID_Start +FA30..FA6A ; ID_Start +FA70..FAD9 ; ID_Start +FB00..FB06 ; ID_Start +FB13..FB17 ; ID_Start +FB1D ; ID_Start +FB1F..FB28 ; ID_Start +FB2A..FB36 ; ID_Start +FB38..FB3C ; ID_Start +FB3E ; ID_Start +FB40..FB41 ; ID_Start +FB43..FB44 ; ID_Start +FB46..FBB1 ; ID_Start +FBD3..FD3D ; ID_Start +FD50..FD8F ; ID_Start +FD92..FDC7 ; ID_Start +FDF0..FDFB ; ID_Start +FE70..FE74 ; ID_Start +FE76..FEFC ; ID_Start +FF21..FF3A ; ID_Start +FF41..FF5A ; ID_Start +FF66..FF6F ; ID_Start +FF70 ; ID_Start +FF71..FF9D ; ID_Start +FF9E..FF9F ; ID_Start +FFA0..FFBE ; ID_Start +FFC2..FFC7 ; ID_Start +FFCA..FFCF ; ID_Start +FFD2..FFD7 ; ID_Start +FFDA..FFDC ; ID_Start +10000..1000B ; ID_Start +1000D..10026 ; ID_Start +10028..1003A ; ID_Start +1003C..1003D ; ID_Start +1003F..1004D ; ID_Start +10050..1005D ; ID_Start +10080..100FA ; ID_Start +10140..10174 ; ID_Start +10300..1031E ; ID_Start +10330..10340 ; ID_Start +10341 ; ID_Start +10342..10349 ; ID_Start +1034A ; ID_Start +10380..1039D ; ID_Start +103A0..103C3 ; ID_Start +103C8..103CF ; ID_Start +103D1..103D5 ; ID_Start +10400..1044F ; ID_Start +10450..1049D ; ID_Start +10800..10805 ; ID_Start +10808 ; ID_Start +1080A..10835 ; ID_Start +10837..10838 ; ID_Start +1083C ; ID_Start +1083F ; ID_Start +10900..10915 ; ID_Start +10A00 ; ID_Start +10A10..10A13 ; ID_Start +10A15..10A17 ; ID_Start +10A19..10A33 ; ID_Start +12000..1236E ; ID_Start +12400..12462 ; ID_Start +1D400..1D454 ; ID_Start +1D456..1D49C ; ID_Start +1D49E..1D49F ; ID_Start +1D4A2 ; ID_Start +1D4A5..1D4A6 ; ID_Start +1D4A9..1D4AC ; ID_Start +1D4AE..1D4B9 ; ID_Start +1D4BB ; ID_Start +1D4BD..1D4C3 ; ID_Start +1D4C5..1D505 ; ID_Start +1D507..1D50A ; ID_Start +1D50D..1D514 ; ID_Start +1D516..1D51C ; ID_Start +1D51E..1D539 ; ID_Start +1D53B..1D53E ; ID_Start +1D540..1D544 ; ID_Start +1D546 ; ID_Start +1D54A..1D550 ; ID_Start +1D552..1D6A5 ; ID_Start +1D6A8..1D6C0 ; ID_Start +1D6C2..1D6DA ; ID_Start +1D6DC..1D6FA ; ID_Start +1D6FC..1D714 ; ID_Start +1D716..1D734 ; ID_Start +1D736..1D74E ; ID_Start +1D750..1D76E ; ID_Start +1D770..1D788 ; ID_Start +1D78A..1D7A8 ; ID_Start +1D7AA..1D7C2 ; ID_Start +1D7C4..1D7CB ; ID_Start +20000..2A6D6 ; ID_Start +2F800..2FA1D ; ID_Start + +# Total code points: 92710 + +# ================================================ + +# Derived Property: ID_Continue +# Characters that can continue an identifier. +# Generated from: ID_Start + Mn+Mc+Nd+Pc + Other_ID_Continue +# NOTE: See UAX #31 for more information + +0030..0039 ; ID_Continue +0041..005A ; ID_Continue +005F ; ID_Continue +0061..007A ; ID_Continue +00AA ; ID_Continue +00B5 ; ID_Continue +00BA ; ID_Continue +00C0..00D6 ; ID_Continue +00D8..00F6 ; ID_Continue +00F8..01BA ; ID_Continue +01BB ; ID_Continue +01BC..01BF ; ID_Continue +01C0..01C3 ; ID_Continue +01C4..0293 ; ID_Continue +0294 ; ID_Continue +0295..02AF ; ID_Continue +02B0..02C1 ; ID_Continue +02C6..02D1 ; ID_Continue +02E0..02E4 ; ID_Continue +02EE ; ID_Continue +0300..036F ; ID_Continue +037A ; ID_Continue +037B..037D ; ID_Continue +0386 ; ID_Continue +0388..038A ; ID_Continue +038C ; ID_Continue +038E..03A1 ; ID_Continue +03A3..03CE ; ID_Continue +03D0..03F5 ; ID_Continue +03F7..0481 ; ID_Continue +0483..0486 ; ID_Continue +048A..0513 ; ID_Continue +0531..0556 ; ID_Continue +0559 ; ID_Continue +0561..0587 ; ID_Continue +0591..05BD ; ID_Continue +05BF ; ID_Continue +05C1..05C2 ; ID_Continue +05C4..05C5 ; ID_Continue +05C7 ; ID_Continue +05D0..05EA ; ID_Continue +05F0..05F2 ; ID_Continue +0610..0615 ; ID_Continue +0621..063A ; ID_Continue +0640 ; ID_Continue +0641..064A ; ID_Continue +064B..065E ; ID_Continue +0660..0669 ; ID_Continue +066E..066F ; ID_Continue +0670 ; ID_Continue +0671..06D3 ; ID_Continue +06D5 ; ID_Continue +06D6..06DC ; ID_Continue +06DF..06E4 ; ID_Continue +06E5..06E6 ; ID_Continue +06E7..06E8 ; ID_Continue +06EA..06ED ; ID_Continue +06EE..06EF ; ID_Continue +06F0..06F9 ; ID_Continue +06FA..06FC ; ID_Continue +06FF ; ID_Continue +0710 ; ID_Continue +0711 ; ID_Continue +0712..072F ; ID_Continue +0730..074A ; ID_Continue +074D..076D ; ID_Continue +0780..07A5 ; ID_Continue +07A6..07B0 ; ID_Continue +07B1 ; ID_Continue +07C0..07C9 ; ID_Continue +07CA..07EA ; ID_Continue +07EB..07F3 ; ID_Continue +07F4..07F5 ; ID_Continue +07FA ; ID_Continue +0901..0902 ; ID_Continue +0903 ; ID_Continue +0904..0939 ; ID_Continue +093C ; ID_Continue +093D ; ID_Continue +093E..0940 ; ID_Continue +0941..0948 ; ID_Continue +0949..094C ; ID_Continue +094D ; ID_Continue +0950 ; ID_Continue +0951..0954 ; ID_Continue +0958..0961 ; ID_Continue +0962..0963 ; ID_Continue +0966..096F ; ID_Continue +097B..097F ; ID_Continue +0981 ; ID_Continue +0982..0983 ; ID_Continue +0985..098C ; ID_Continue +098F..0990 ; ID_Continue +0993..09A8 ; ID_Continue +09AA..09B0 ; ID_Continue +09B2 ; ID_Continue +09B6..09B9 ; ID_Continue +09BC ; ID_Continue +09BD ; ID_Continue +09BE..09C0 ; ID_Continue +09C1..09C4 ; ID_Continue +09C7..09C8 ; ID_Continue +09CB..09CC ; ID_Continue +09CD ; ID_Continue +09CE ; ID_Continue +09D7 ; ID_Continue +09DC..09DD ; ID_Continue +09DF..09E1 ; ID_Continue +09E2..09E3 ; ID_Continue +09E6..09EF ; ID_Continue +09F0..09F1 ; ID_Continue +0A01..0A02 ; ID_Continue +0A03 ; ID_Continue +0A05..0A0A ; ID_Continue +0A0F..0A10 ; ID_Continue +0A13..0A28 ; ID_Continue +0A2A..0A30 ; ID_Continue +0A32..0A33 ; ID_Continue +0A35..0A36 ; ID_Continue +0A38..0A39 ; ID_Continue +0A3C ; ID_Continue +0A3E..0A40 ; ID_Continue +0A41..0A42 ; ID_Continue +0A47..0A48 ; ID_Continue +0A4B..0A4D ; ID_Continue +0A59..0A5C ; ID_Continue +0A5E ; ID_Continue +0A66..0A6F ; ID_Continue +0A70..0A71 ; ID_Continue +0A72..0A74 ; ID_Continue +0A81..0A82 ; ID_Continue +0A83 ; ID_Continue +0A85..0A8D ; ID_Continue +0A8F..0A91 ; ID_Continue +0A93..0AA8 ; ID_Continue +0AAA..0AB0 ; ID_Continue +0AB2..0AB3 ; ID_Continue +0AB5..0AB9 ; ID_Continue +0ABC ; ID_Continue +0ABD ; ID_Continue +0ABE..0AC0 ; ID_Continue +0AC1..0AC5 ; ID_Continue +0AC7..0AC8 ; ID_Continue +0AC9 ; ID_Continue +0ACB..0ACC ; ID_Continue +0ACD ; ID_Continue +0AD0 ; ID_Continue +0AE0..0AE1 ; ID_Continue +0AE2..0AE3 ; ID_Continue +0AE6..0AEF ; ID_Continue +0B01 ; ID_Continue +0B02..0B03 ; ID_Continue +0B05..0B0C ; ID_Continue +0B0F..0B10 ; ID_Continue +0B13..0B28 ; ID_Continue +0B2A..0B30 ; ID_Continue +0B32..0B33 ; ID_Continue +0B35..0B39 ; ID_Continue +0B3C ; ID_Continue +0B3D ; ID_Continue +0B3E ; ID_Continue +0B3F ; ID_Continue +0B40 ; ID_Continue +0B41..0B43 ; ID_Continue +0B47..0B48 ; ID_Continue +0B4B..0B4C ; ID_Continue +0B4D ; ID_Continue +0B56 ; ID_Continue +0B57 ; ID_Continue +0B5C..0B5D ; ID_Continue +0B5F..0B61 ; ID_Continue +0B66..0B6F ; ID_Continue +0B71 ; ID_Continue +0B82 ; ID_Continue +0B83 ; ID_Continue +0B85..0B8A ; ID_Continue +0B8E..0B90 ; ID_Continue +0B92..0B95 ; ID_Continue +0B99..0B9A ; ID_Continue +0B9C ; ID_Continue +0B9E..0B9F ; ID_Continue +0BA3..0BA4 ; ID_Continue +0BA8..0BAA ; ID_Continue +0BAE..0BB9 ; ID_Continue +0BBE..0BBF ; ID_Continue +0BC0 ; ID_Continue +0BC1..0BC2 ; ID_Continue +0BC6..0BC8 ; ID_Continue +0BCA..0BCC ; ID_Continue +0BCD ; ID_Continue +0BD7 ; ID_Continue +0BE6..0BEF ; ID_Continue +0C01..0C03 ; ID_Continue +0C05..0C0C ; ID_Continue +0C0E..0C10 ; ID_Continue +0C12..0C28 ; ID_Continue +0C2A..0C33 ; ID_Continue +0C35..0C39 ; ID_Continue +0C3E..0C40 ; ID_Continue +0C41..0C44 ; ID_Continue +0C46..0C48 ; ID_Continue +0C4A..0C4D ; ID_Continue +0C55..0C56 ; ID_Continue +0C60..0C61 ; ID_Continue +0C66..0C6F ; ID_Continue +0C82..0C83 ; ID_Continue +0C85..0C8C ; ID_Continue +0C8E..0C90 ; ID_Continue +0C92..0CA8 ; ID_Continue +0CAA..0CB3 ; ID_Continue +0CB5..0CB9 ; ID_Continue +0CBC ; ID_Continue +0CBD ; ID_Continue +0CBE ; ID_Continue +0CBF ; ID_Continue +0CC0..0CC4 ; ID_Continue +0CC6 ; ID_Continue +0CC7..0CC8 ; ID_Continue +0CCA..0CCB ; ID_Continue +0CCC..0CCD ; ID_Continue +0CD5..0CD6 ; ID_Continue +0CDE ; ID_Continue +0CE0..0CE1 ; ID_Continue +0CE2..0CE3 ; ID_Continue +0CE6..0CEF ; ID_Continue +0D02..0D03 ; ID_Continue +0D05..0D0C ; ID_Continue +0D0E..0D10 ; ID_Continue +0D12..0D28 ; ID_Continue +0D2A..0D39 ; ID_Continue +0D3E..0D40 ; ID_Continue +0D41..0D43 ; ID_Continue +0D46..0D48 ; ID_Continue +0D4A..0D4C ; ID_Continue +0D4D ; ID_Continue +0D57 ; ID_Continue +0D60..0D61 ; ID_Continue +0D66..0D6F ; ID_Continue +0D82..0D83 ; ID_Continue +0D85..0D96 ; ID_Continue +0D9A..0DB1 ; ID_Continue +0DB3..0DBB ; ID_Continue +0DBD ; ID_Continue +0DC0..0DC6 ; ID_Continue +0DCA ; ID_Continue +0DCF..0DD1 ; ID_Continue +0DD2..0DD4 ; ID_Continue +0DD6 ; ID_Continue +0DD8..0DDF ; ID_Continue +0DF2..0DF3 ; ID_Continue +0E01..0E30 ; ID_Continue +0E31 ; ID_Continue +0E32..0E33 ; ID_Continue +0E34..0E3A ; ID_Continue +0E40..0E45 ; ID_Continue +0E46 ; ID_Continue +0E47..0E4E ; ID_Continue +0E50..0E59 ; ID_Continue +0E81..0E82 ; ID_Continue +0E84 ; ID_Continue +0E87..0E88 ; ID_Continue +0E8A ; ID_Continue +0E8D ; ID_Continue +0E94..0E97 ; ID_Continue +0E99..0E9F ; ID_Continue +0EA1..0EA3 ; ID_Continue +0EA5 ; ID_Continue +0EA7 ; ID_Continue +0EAA..0EAB ; ID_Continue +0EAD..0EB0 ; ID_Continue +0EB1 ; ID_Continue +0EB2..0EB3 ; ID_Continue +0EB4..0EB9 ; ID_Continue +0EBB..0EBC ; ID_Continue +0EBD ; ID_Continue +0EC0..0EC4 ; ID_Continue +0EC6 ; ID_Continue +0EC8..0ECD ; ID_Continue +0ED0..0ED9 ; ID_Continue +0EDC..0EDD ; ID_Continue +0F00 ; ID_Continue +0F18..0F19 ; ID_Continue +0F20..0F29 ; ID_Continue +0F35 ; ID_Continue +0F37 ; ID_Continue +0F39 ; ID_Continue +0F3E..0F3F ; ID_Continue +0F40..0F47 ; ID_Continue +0F49..0F6A ; ID_Continue +0F71..0F7E ; ID_Continue +0F7F ; ID_Continue +0F80..0F84 ; ID_Continue +0F86..0F87 ; ID_Continue +0F88..0F8B ; ID_Continue +0F90..0F97 ; ID_Continue +0F99..0FBC ; ID_Continue +0FC6 ; ID_Continue +1000..1021 ; ID_Continue +1023..1027 ; ID_Continue +1029..102A ; ID_Continue +102C ; ID_Continue +102D..1030 ; ID_Continue +1031 ; ID_Continue +1032 ; ID_Continue +1036..1037 ; ID_Continue +1038 ; ID_Continue +1039 ; ID_Continue +1040..1049 ; ID_Continue +1050..1055 ; ID_Continue +1056..1057 ; ID_Continue +1058..1059 ; ID_Continue +10A0..10C5 ; ID_Continue +10D0..10FA ; ID_Continue +10FC ; ID_Continue +1100..1159 ; ID_Continue +115F..11A2 ; ID_Continue +11A8..11F9 ; ID_Continue +1200..1248 ; ID_Continue +124A..124D ; ID_Continue +1250..1256 ; ID_Continue +1258 ; ID_Continue +125A..125D ; ID_Continue +1260..1288 ; ID_Continue +128A..128D ; ID_Continue +1290..12B0 ; ID_Continue +12B2..12B5 ; ID_Continue +12B8..12BE ; ID_Continue +12C0 ; ID_Continue +12C2..12C5 ; ID_Continue +12C8..12D6 ; ID_Continue +12D8..1310 ; ID_Continue +1312..1315 ; ID_Continue +1318..135A ; ID_Continue +135F ; ID_Continue +1369..1371 ; ID_Continue +1380..138F ; ID_Continue +13A0..13F4 ; ID_Continue +1401..166C ; ID_Continue +166F..1676 ; ID_Continue +1681..169A ; ID_Continue +16A0..16EA ; ID_Continue +16EE..16F0 ; ID_Continue +1700..170C ; ID_Continue +170E..1711 ; ID_Continue +1712..1714 ; ID_Continue +1720..1731 ; ID_Continue +1732..1734 ; ID_Continue +1740..1751 ; ID_Continue +1752..1753 ; ID_Continue +1760..176C ; ID_Continue +176E..1770 ; ID_Continue +1772..1773 ; ID_Continue +1780..17B3 ; ID_Continue +17B6 ; ID_Continue +17B7..17BD ; ID_Continue +17BE..17C5 ; ID_Continue +17C6 ; ID_Continue +17C7..17C8 ; ID_Continue +17C9..17D3 ; ID_Continue +17D7 ; ID_Continue +17DC ; ID_Continue +17DD ; ID_Continue +17E0..17E9 ; ID_Continue +180B..180D ; ID_Continue +1810..1819 ; ID_Continue +1820..1842 ; ID_Continue +1843 ; ID_Continue +1844..1877 ; ID_Continue +1880..18A8 ; ID_Continue +18A9 ; ID_Continue +1900..191C ; ID_Continue +1920..1922 ; ID_Continue +1923..1926 ; ID_Continue +1927..1928 ; ID_Continue +1929..192B ; ID_Continue +1930..1931 ; ID_Continue +1932 ; ID_Continue +1933..1938 ; ID_Continue +1939..193B ; ID_Continue +1946..194F ; ID_Continue +1950..196D ; ID_Continue +1970..1974 ; ID_Continue +1980..19A9 ; ID_Continue +19B0..19C0 ; ID_Continue +19C1..19C7 ; ID_Continue +19C8..19C9 ; ID_Continue +19D0..19D9 ; ID_Continue +1A00..1A16 ; ID_Continue +1A17..1A18 ; ID_Continue +1A19..1A1B ; ID_Continue +1B00..1B03 ; ID_Continue +1B04 ; ID_Continue +1B05..1B33 ; ID_Continue +1B34 ; ID_Continue +1B35 ; ID_Continue +1B36..1B3A ; ID_Continue +1B3B ; ID_Continue +1B3C ; ID_Continue +1B3D..1B41 ; ID_Continue +1B42 ; ID_Continue +1B43..1B44 ; ID_Continue +1B45..1B4B ; ID_Continue +1B50..1B59 ; ID_Continue +1B6B..1B73 ; ID_Continue +1D00..1D2B ; ID_Continue +1D2C..1D61 ; ID_Continue +1D62..1D77 ; ID_Continue +1D78 ; ID_Continue +1D79..1D9A ; ID_Continue +1D9B..1DBF ; ID_Continue +1DC0..1DCA ; ID_Continue +1DFE..1DFF ; ID_Continue +1E00..1E9B ; ID_Continue +1EA0..1EF9 ; ID_Continue +1F00..1F15 ; ID_Continue +1F18..1F1D ; ID_Continue +1F20..1F45 ; ID_Continue +1F48..1F4D ; ID_Continue +1F50..1F57 ; ID_Continue +1F59 ; ID_Continue +1F5B ; ID_Continue +1F5D ; ID_Continue +1F5F..1F7D ; ID_Continue +1F80..1FB4 ; ID_Continue +1FB6..1FBC ; ID_Continue +1FBE ; ID_Continue +1FC2..1FC4 ; ID_Continue +1FC6..1FCC ; ID_Continue +1FD0..1FD3 ; ID_Continue +1FD6..1FDB ; ID_Continue +1FE0..1FEC ; ID_Continue +1FF2..1FF4 ; ID_Continue +1FF6..1FFC ; ID_Continue +203F..2040 ; ID_Continue +2054 ; ID_Continue +2071 ; ID_Continue +207F ; ID_Continue +2090..2094 ; ID_Continue +20D0..20DC ; ID_Continue +20E1 ; ID_Continue +20E5..20EF ; ID_Continue +2102 ; ID_Continue +2107 ; ID_Continue +210A..2113 ; ID_Continue +2115 ; ID_Continue +2118 ; ID_Continue +2119..211D ; ID_Continue +2124 ; ID_Continue +2126 ; ID_Continue +2128 ; ID_Continue +212A..212D ; ID_Continue +212E ; ID_Continue +212F..2134 ; ID_Continue +2135..2138 ; ID_Continue +2139 ; ID_Continue +213C..213F ; ID_Continue +2145..2149 ; ID_Continue +214E ; ID_Continue +2160..2182 ; ID_Continue +2183..2184 ; ID_Continue +2C00..2C2E ; ID_Continue +2C30..2C5E ; ID_Continue +2C60..2C6C ; ID_Continue +2C74..2C77 ; ID_Continue +2C80..2CE4 ; ID_Continue +2D00..2D25 ; ID_Continue +2D30..2D65 ; ID_Continue +2D6F ; ID_Continue +2D80..2D96 ; ID_Continue +2DA0..2DA6 ; ID_Continue +2DA8..2DAE ; ID_Continue +2DB0..2DB6 ; ID_Continue +2DB8..2DBE ; ID_Continue +2DC0..2DC6 ; ID_Continue +2DC8..2DCE ; ID_Continue +2DD0..2DD6 ; ID_Continue +2DD8..2DDE ; ID_Continue +3005 ; ID_Continue +3006 ; ID_Continue +3007 ; ID_Continue +3021..3029 ; ID_Continue +302A..302F ; ID_Continue +3031..3035 ; ID_Continue +3038..303A ; ID_Continue +303B ; ID_Continue +303C ; ID_Continue +3041..3096 ; ID_Continue +3099..309A ; ID_Continue +309B..309C ; ID_Continue +309D..309E ; ID_Continue +309F ; ID_Continue +30A1..30FA ; ID_Continue +30FC..30FE ; ID_Continue +30FF ; ID_Continue +3105..312C ; ID_Continue +3131..318E ; ID_Continue +31A0..31B7 ; ID_Continue +31F0..31FF ; ID_Continue +3400..4DB5 ; ID_Continue +4E00..9FBB ; ID_Continue +A000..A014 ; ID_Continue +A015 ; ID_Continue +A016..A48C ; ID_Continue +A717..A71A ; ID_Continue +A800..A801 ; ID_Continue +A802 ; ID_Continue +A803..A805 ; ID_Continue +A806 ; ID_Continue +A807..A80A ; ID_Continue +A80B ; ID_Continue +A80C..A822 ; ID_Continue +A823..A824 ; ID_Continue +A825..A826 ; ID_Continue +A827 ; ID_Continue +A840..A873 ; ID_Continue +AC00..D7A3 ; ID_Continue +F900..FA2D ; ID_Continue +FA30..FA6A ; ID_Continue +FA70..FAD9 ; ID_Continue +FB00..FB06 ; ID_Continue +FB13..FB17 ; ID_Continue +FB1D ; ID_Continue +FB1E ; ID_Continue +FB1F..FB28 ; ID_Continue +FB2A..FB36 ; ID_Continue +FB38..FB3C ; ID_Continue +FB3E ; ID_Continue +FB40..FB41 ; ID_Continue +FB43..FB44 ; ID_Continue +FB46..FBB1 ; ID_Continue +FBD3..FD3D ; ID_Continue +FD50..FD8F ; ID_Continue +FD92..FDC7 ; ID_Continue +FDF0..FDFB ; ID_Continue +FE00..FE0F ; ID_Continue +FE20..FE23 ; ID_Continue +FE33..FE34 ; ID_Continue +FE4D..FE4F ; ID_Continue +FE70..FE74 ; ID_Continue +FE76..FEFC ; ID_Continue +FF10..FF19 ; ID_Continue +FF21..FF3A ; ID_Continue +FF3F ; ID_Continue +FF41..FF5A ; ID_Continue +FF66..FF6F ; ID_Continue +FF70 ; ID_Continue +FF71..FF9D ; ID_Continue +FF9E..FF9F ; ID_Continue +FFA0..FFBE ; ID_Continue +FFC2..FFC7 ; ID_Continue +FFCA..FFCF ; ID_Continue +FFD2..FFD7 ; ID_Continue +FFDA..FFDC ; ID_Continue +10000..1000B ; ID_Continue +1000D..10026 ; ID_Continue +10028..1003A ; ID_Continue +1003C..1003D ; ID_Continue +1003F..1004D ; ID_Continue +10050..1005D ; ID_Continue +10080..100FA ; ID_Continue +10140..10174 ; ID_Continue +10300..1031E ; ID_Continue +10330..10340 ; ID_Continue +10341 ; ID_Continue +10342..10349 ; ID_Continue +1034A ; ID_Continue +10380..1039D ; ID_Continue +103A0..103C3 ; ID_Continue +103C8..103CF ; ID_Continue +103D1..103D5 ; ID_Continue +10400..1044F ; ID_Continue +10450..1049D ; ID_Continue +104A0..104A9 ; ID_Continue +10800..10805 ; ID_Continue +10808 ; ID_Continue +1080A..10835 ; ID_Continue +10837..10838 ; ID_Continue +1083C ; ID_Continue +1083F ; ID_Continue +10900..10915 ; ID_Continue +10A00 ; ID_Continue +10A01..10A03 ; ID_Continue +10A05..10A06 ; ID_Continue +10A0C..10A0F ; ID_Continue +10A10..10A13 ; ID_Continue +10A15..10A17 ; ID_Continue +10A19..10A33 ; ID_Continue +10A38..10A3A ; ID_Continue +10A3F ; ID_Continue +12000..1236E ; ID_Continue +12400..12462 ; ID_Continue +1D165..1D166 ; ID_Continue +1D167..1D169 ; ID_Continue +1D16D..1D172 ; ID_Continue +1D17B..1D182 ; ID_Continue +1D185..1D18B ; ID_Continue +1D1AA..1D1AD ; ID_Continue +1D242..1D244 ; ID_Continue +1D400..1D454 ; ID_Continue +1D456..1D49C ; ID_Continue +1D49E..1D49F ; ID_Continue +1D4A2 ; ID_Continue +1D4A5..1D4A6 ; ID_Continue +1D4A9..1D4AC ; ID_Continue +1D4AE..1D4B9 ; ID_Continue +1D4BB ; ID_Continue +1D4BD..1D4C3 ; ID_Continue +1D4C5..1D505 ; ID_Continue +1D507..1D50A ; ID_Continue +1D50D..1D514 ; ID_Continue +1D516..1D51C ; ID_Continue +1D51E..1D539 ; ID_Continue +1D53B..1D53E ; ID_Continue +1D540..1D544 ; ID_Continue +1D546 ; ID_Continue +1D54A..1D550 ; ID_Continue +1D552..1D6A5 ; ID_Continue +1D6A8..1D6C0 ; ID_Continue +1D6C2..1D6DA ; ID_Continue +1D6DC..1D6FA ; ID_Continue +1D6FC..1D714 ; ID_Continue +1D716..1D734 ; ID_Continue +1D736..1D74E ; ID_Continue +1D750..1D76E ; ID_Continue +1D770..1D788 ; ID_Continue +1D78A..1D7A8 ; ID_Continue +1D7AA..1D7C2 ; ID_Continue +1D7C4..1D7CB ; ID_Continue +1D7CE..1D7FF ; ID_Continue +20000..2A6D6 ; ID_Continue +2F800..2FA1D ; ID_Continue +E0100..E01EF ; ID_Continue + +# Total code points: 94074 + +# ================================================ + +# Derived Property: XID_Start +# ID_Start modified for closure under NFKx +# Modified as described in UAX #15 +# NOTE: Does NOT remove the non-NFKx characters. +# Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string)) +# NOTE: See UAX #31 for more information + +0041..005A ; XID_Start +0061..007A ; XID_Start +00AA ; XID_Start +00B5 ; XID_Start +00BA ; XID_Start +00C0..00D6 ; XID_Start +00D8..00F6 ; XID_Start +00F8..01BA ; XID_Start +01BB ; XID_Start +01BC..01BF ; XID_Start +01C0..01C3 ; XID_Start +01C4..0293 ; XID_Start +0294 ; XID_Start +0295..02AF ; XID_Start +02B0..02C1 ; XID_Start +02C6..02D1 ; XID_Start +02E0..02E4 ; XID_Start +02EE ; XID_Start +037B..037D ; XID_Start +0386 ; XID_Start +0388..038A ; XID_Start +038C ; XID_Start +038E..03A1 ; XID_Start +03A3..03CE ; XID_Start +03D0..03F5 ; XID_Start +03F7..0481 ; XID_Start +048A..0513 ; XID_Start +0531..0556 ; XID_Start +0559 ; XID_Start +0561..0587 ; XID_Start +05D0..05EA ; XID_Start +05F0..05F2 ; XID_Start +0621..063A ; XID_Start +0640 ; XID_Start +0641..064A ; XID_Start +066E..066F ; XID_Start +0671..06D3 ; XID_Start +06D5 ; XID_Start +06E5..06E6 ; XID_Start +06EE..06EF ; XID_Start +06FA..06FC ; XID_Start +06FF ; XID_Start +0710 ; XID_Start +0712..072F ; XID_Start +074D..076D ; XID_Start +0780..07A5 ; XID_Start +07B1 ; XID_Start +07CA..07EA ; XID_Start +07F4..07F5 ; XID_Start +07FA ; XID_Start +0904..0939 ; XID_Start +093D ; XID_Start +0950 ; XID_Start +0958..0961 ; XID_Start +097B..097F ; XID_Start +0985..098C ; XID_Start +098F..0990 ; XID_Start +0993..09A8 ; XID_Start +09AA..09B0 ; XID_Start +09B2 ; XID_Start +09B6..09B9 ; XID_Start +09BD ; XID_Start +09CE ; XID_Start +09DC..09DD ; XID_Start +09DF..09E1 ; XID_Start +09F0..09F1 ; XID_Start +0A05..0A0A ; XID_Start +0A0F..0A10 ; XID_Start +0A13..0A28 ; XID_Start +0A2A..0A30 ; XID_Start +0A32..0A33 ; XID_Start +0A35..0A36 ; XID_Start +0A38..0A39 ; XID_Start +0A59..0A5C ; XID_Start +0A5E ; XID_Start +0A72..0A74 ; XID_Start +0A85..0A8D ; XID_Start +0A8F..0A91 ; XID_Start +0A93..0AA8 ; XID_Start +0AAA..0AB0 ; XID_Start +0AB2..0AB3 ; XID_Start +0AB5..0AB9 ; XID_Start +0ABD ; XID_Start +0AD0 ; XID_Start +0AE0..0AE1 ; XID_Start +0B05..0B0C ; XID_Start +0B0F..0B10 ; XID_Start +0B13..0B28 ; XID_Start +0B2A..0B30 ; XID_Start +0B32..0B33 ; XID_Start +0B35..0B39 ; XID_Start +0B3D ; XID_Start +0B5C..0B5D ; XID_Start +0B5F..0B61 ; XID_Start +0B71 ; XID_Start +0B83 ; XID_Start +0B85..0B8A ; XID_Start +0B8E..0B90 ; XID_Start +0B92..0B95 ; XID_Start +0B99..0B9A ; XID_Start +0B9C ; XID_Start +0B9E..0B9F ; XID_Start +0BA3..0BA4 ; XID_Start +0BA8..0BAA ; XID_Start +0BAE..0BB9 ; XID_Start +0C05..0C0C ; XID_Start +0C0E..0C10 ; XID_Start +0C12..0C28 ; XID_Start +0C2A..0C33 ; XID_Start +0C35..0C39 ; XID_Start +0C60..0C61 ; XID_Start +0C85..0C8C ; XID_Start +0C8E..0C90 ; XID_Start +0C92..0CA8 ; XID_Start +0CAA..0CB3 ; XID_Start +0CB5..0CB9 ; XID_Start +0CBD ; XID_Start +0CDE ; XID_Start +0CE0..0CE1 ; XID_Start +0D05..0D0C ; XID_Start +0D0E..0D10 ; XID_Start +0D12..0D28 ; XID_Start +0D2A..0D39 ; XID_Start +0D60..0D61 ; XID_Start +0D85..0D96 ; XID_Start +0D9A..0DB1 ; XID_Start +0DB3..0DBB ; XID_Start +0DBD ; XID_Start +0DC0..0DC6 ; XID_Start +0E01..0E30 ; XID_Start +0E32 ; XID_Start +0E40..0E45 ; XID_Start +0E46 ; XID_Start +0E81..0E82 ; XID_Start +0E84 ; XID_Start +0E87..0E88 ; XID_Start +0E8A ; XID_Start +0E8D ; XID_Start +0E94..0E97 ; XID_Start +0E99..0E9F ; XID_Start +0EA1..0EA3 ; XID_Start +0EA5 ; XID_Start +0EA7 ; XID_Start +0EAA..0EAB ; XID_Start +0EAD..0EB0 ; XID_Start +0EB2 ; XID_Start +0EBD ; XID_Start +0EC0..0EC4 ; XID_Start +0EC6 ; XID_Start +0EDC..0EDD ; XID_Start +0F00 ; XID_Start +0F40..0F47 ; XID_Start +0F49..0F6A ; XID_Start +0F88..0F8B ; XID_Start +1000..1021 ; XID_Start +1023..1027 ; XID_Start +1029..102A ; XID_Start +1050..1055 ; XID_Start +10A0..10C5 ; XID_Start +10D0..10FA ; XID_Start +10FC ; XID_Start +1100..1159 ; XID_Start +115F..11A2 ; XID_Start +11A8..11F9 ; XID_Start +1200..1248 ; XID_Start +124A..124D ; XID_Start +1250..1256 ; XID_Start +1258 ; XID_Start +125A..125D ; XID_Start +1260..1288 ; XID_Start +128A..128D ; XID_Start +1290..12B0 ; XID_Start +12B2..12B5 ; XID_Start +12B8..12BE ; XID_Start +12C0 ; XID_Start +12C2..12C5 ; XID_Start +12C8..12D6 ; XID_Start +12D8..1310 ; XID_Start +1312..1315 ; XID_Start +1318..135A ; XID_Start +1380..138F ; XID_Start +13A0..13F4 ; XID_Start +1401..166C ; XID_Start +166F..1676 ; XID_Start +1681..169A ; XID_Start +16A0..16EA ; XID_Start +16EE..16F0 ; XID_Start +1700..170C ; XID_Start +170E..1711 ; XID_Start +1720..1731 ; XID_Start +1740..1751 ; XID_Start +1760..176C ; XID_Start +176E..1770 ; XID_Start +1780..17B3 ; XID_Start +17D7 ; XID_Start +17DC ; XID_Start +1820..1842 ; XID_Start +1843 ; XID_Start +1844..1877 ; XID_Start +1880..18A8 ; XID_Start +1900..191C ; XID_Start +1950..196D ; XID_Start +1970..1974 ; XID_Start +1980..19A9 ; XID_Start +19C1..19C7 ; XID_Start +1A00..1A16 ; XID_Start +1B05..1B33 ; XID_Start +1B45..1B4B ; XID_Start +1D00..1D2B ; XID_Start +1D2C..1D61 ; XID_Start +1D62..1D77 ; XID_Start +1D78 ; XID_Start +1D79..1D9A ; XID_Start +1D9B..1DBF ; XID_Start +1E00..1E9B ; XID_Start +1EA0..1EF9 ; XID_Start +1F00..1F15 ; XID_Start +1F18..1F1D ; XID_Start +1F20..1F45 ; XID_Start +1F48..1F4D ; XID_Start +1F50..1F57 ; XID_Start +1F59 ; XID_Start +1F5B ; XID_Start +1F5D ; XID_Start +1F5F..1F7D ; XID_Start +1F80..1FB4 ; XID_Start +1FB6..1FBC ; XID_Start +1FBE ; XID_Start +1FC2..1FC4 ; XID_Start +1FC6..1FCC ; XID_Start +1FD0..1FD3 ; XID_Start +1FD6..1FDB ; XID_Start +1FE0..1FEC ; XID_Start +1FF2..1FF4 ; XID_Start +1FF6..1FFC ; XID_Start +2071 ; XID_Start +207F ; XID_Start +2090..2094 ; XID_Start +2102 ; XID_Start +2107 ; XID_Start +210A..2113 ; XID_Start +2115 ; XID_Start +2118 ; XID_Start +2119..211D ; XID_Start +2124 ; XID_Start +2126 ; XID_Start +2128 ; XID_Start +212A..212D ; XID_Start +212E ; XID_Start +212F..2134 ; XID_Start +2135..2138 ; XID_Start +2139 ; XID_Start +213C..213F ; XID_Start +2145..2149 ; XID_Start +214E ; XID_Start +2160..2182 ; XID_Start +2183..2184 ; XID_Start +2C00..2C2E ; XID_Start +2C30..2C5E ; XID_Start +2C60..2C6C ; XID_Start +2C74..2C77 ; XID_Start +2C80..2CE4 ; XID_Start +2D00..2D25 ; XID_Start +2D30..2D65 ; XID_Start +2D6F ; XID_Start +2D80..2D96 ; XID_Start +2DA0..2DA6 ; XID_Start +2DA8..2DAE ; XID_Start +2DB0..2DB6 ; XID_Start +2DB8..2DBE ; XID_Start +2DC0..2DC6 ; XID_Start +2DC8..2DCE ; XID_Start +2DD0..2DD6 ; XID_Start +2DD8..2DDE ; XID_Start +3005 ; XID_Start +3006 ; XID_Start +3007 ; XID_Start +3021..3029 ; XID_Start +3031..3035 ; XID_Start +3038..303A ; XID_Start +303B ; XID_Start +303C ; XID_Start +3041..3096 ; XID_Start +309D..309E ; XID_Start +309F ; XID_Start +30A1..30FA ; XID_Start +30FC..30FE ; XID_Start +30FF ; XID_Start +3105..312C ; XID_Start +3131..318E ; XID_Start +31A0..31B7 ; XID_Start +31F0..31FF ; XID_Start +3400..4DB5 ; XID_Start +4E00..9FBB ; XID_Start +A000..A014 ; XID_Start +A015 ; XID_Start +A016..A48C ; XID_Start +A717..A71A ; XID_Start +A800..A801 ; XID_Start +A803..A805 ; XID_Start +A807..A80A ; XID_Start +A80C..A822 ; XID_Start +A840..A873 ; XID_Start +AC00..D7A3 ; XID_Start +F900..FA2D ; XID_Start +FA30..FA6A ; XID_Start +FA70..FAD9 ; XID_Start +FB00..FB06 ; XID_Start +FB13..FB17 ; XID_Start +FB1D ; XID_Start +FB1F..FB28 ; XID_Start +FB2A..FB36 ; XID_Start +FB38..FB3C ; XID_Start +FB3E ; XID_Start +FB40..FB41 ; XID_Start +FB43..FB44 ; XID_Start +FB46..FBB1 ; XID_Start +FBD3..FC5D ; XID_Start +FC64..FD3D ; XID_Start +FD50..FD8F ; XID_Start +FD92..FDC7 ; XID_Start +FDF0..FDF9 ; XID_Start +FE71 ; XID_Start +FE73 ; XID_Start +FE77 ; XID_Start +FE79 ; XID_Start +FE7B ; XID_Start +FE7D ; XID_Start +FE7F..FEFC ; XID_Start +FF21..FF3A ; XID_Start +FF41..FF5A ; XID_Start +FF66..FF6F ; XID_Start +FF70 ; XID_Start +FF71..FF9D ; XID_Start +FFA0..FFBE ; XID_Start +FFC2..FFC7 ; XID_Start +FFCA..FFCF ; XID_Start +FFD2..FFD7 ; XID_Start +FFDA..FFDC ; XID_Start +10000..1000B ; XID_Start +1000D..10026 ; XID_Start +10028..1003A ; XID_Start +1003C..1003D ; XID_Start +1003F..1004D ; XID_Start +10050..1005D ; XID_Start +10080..100FA ; XID_Start +10140..10174 ; XID_Start +10300..1031E ; XID_Start +10330..10340 ; XID_Start +10341 ; XID_Start +10342..10349 ; XID_Start +1034A ; XID_Start +10380..1039D ; XID_Start +103A0..103C3 ; XID_Start +103C8..103CF ; XID_Start +103D1..103D5 ; XID_Start +10400..1044F ; XID_Start +10450..1049D ; XID_Start +10800..10805 ; XID_Start +10808 ; XID_Start +1080A..10835 ; XID_Start +10837..10838 ; XID_Start +1083C ; XID_Start +1083F ; XID_Start +10900..10915 ; XID_Start +10A00 ; XID_Start +10A10..10A13 ; XID_Start +10A15..10A17 ; XID_Start +10A19..10A33 ; XID_Start +12000..1236E ; XID_Start +12400..12462 ; XID_Start +1D400..1D454 ; XID_Start +1D456..1D49C ; XID_Start +1D49E..1D49F ; XID_Start +1D4A2 ; XID_Start +1D4A5..1D4A6 ; XID_Start +1D4A9..1D4AC ; XID_Start +1D4AE..1D4B9 ; XID_Start +1D4BB ; XID_Start +1D4BD..1D4C3 ; XID_Start +1D4C5..1D505 ; XID_Start +1D507..1D50A ; XID_Start +1D50D..1D514 ; XID_Start +1D516..1D51C ; XID_Start +1D51E..1D539 ; XID_Start +1D53B..1D53E ; XID_Start +1D540..1D544 ; XID_Start +1D546 ; XID_Start +1D54A..1D550 ; XID_Start +1D552..1D6A5 ; XID_Start +1D6A8..1D6C0 ; XID_Start +1D6C2..1D6DA ; XID_Start +1D6DC..1D6FA ; XID_Start +1D6FC..1D714 ; XID_Start +1D716..1D734 ; XID_Start +1D736..1D74E ; XID_Start +1D750..1D76E ; XID_Start +1D770..1D788 ; XID_Start +1D78A..1D7A8 ; XID_Start +1D7AA..1D7C2 ; XID_Start +1D7C4..1D7CB ; XID_Start +20000..2A6D6 ; XID_Start +2F800..2FA1D ; XID_Start + +# Total code points: 92687 + +# ================================================ + +# Derived Property: XID_Continue +# Mod_ID_Continue modified for closure under NFKx +# Modified as described in UAX #15 +# NOTE: Cf characters should be filtered out. +# NOTE: Does NOT remove the non-NFKx characters. +# Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string)) +# NOTE: See UAX #31 for more information + +0030..0039 ; XID_Continue +0041..005A ; XID_Continue +005F ; XID_Continue +0061..007A ; XID_Continue +00AA ; XID_Continue +00B5 ; XID_Continue +00B7 ; XID_Continue +00BA ; XID_Continue +00C0..00D6 ; XID_Continue +00D8..00F6 ; XID_Continue +00F8..01BA ; XID_Continue +01BB ; XID_Continue +01BC..01BF ; XID_Continue +01C0..01C3 ; XID_Continue +01C4..0293 ; XID_Continue +0294 ; XID_Continue +0295..02AF ; XID_Continue +02B0..02C1 ; XID_Continue +02C6..02D1 ; XID_Continue +02E0..02E4 ; XID_Continue +02EE ; XID_Continue +0300..036F ; XID_Continue +037B..037D ; XID_Continue +0386 ; XID_Continue +0388..038A ; XID_Continue +038C ; XID_Continue +038E..03A1 ; XID_Continue +03A3..03CE ; XID_Continue +03D0..03F5 ; XID_Continue +03F7..0481 ; XID_Continue +0483..0486 ; XID_Continue +048A..0513 ; XID_Continue +0531..0556 ; XID_Continue +0559 ; XID_Continue +0561..0587 ; XID_Continue +0591..05BD ; XID_Continue +05BF ; XID_Continue +05C1..05C2 ; XID_Continue +05C4..05C5 ; XID_Continue +05C7 ; XID_Continue +05D0..05EA ; XID_Continue +05F0..05F2 ; XID_Continue +0610..0615 ; XID_Continue +0621..063A ; XID_Continue +0640 ; XID_Continue +0641..064A ; XID_Continue +064B..065E ; XID_Continue +0660..0669 ; XID_Continue +066E..066F ; XID_Continue +0670 ; XID_Continue +0671..06D3 ; XID_Continue +06D5 ; XID_Continue +06D6..06DC ; XID_Continue +06DF..06E4 ; XID_Continue +06E5..06E6 ; XID_Continue +06E7..06E8 ; XID_Continue +06EA..06ED ; XID_Continue +06EE..06EF ; XID_Continue +06F0..06F9 ; XID_Continue +06FA..06FC ; XID_Continue +06FF ; XID_Continue +0710 ; XID_Continue +0711 ; XID_Continue +0712..072F ; XID_Continue +0730..074A ; XID_Continue +074D..076D ; XID_Continue +0780..07A5 ; XID_Continue +07A6..07B0 ; XID_Continue +07B1 ; XID_Continue +07C0..07C9 ; XID_Continue +07CA..07EA ; XID_Continue +07EB..07F3 ; XID_Continue +07F4..07F5 ; XID_Continue +07FA ; XID_Continue +0901..0902 ; XID_Continue +0903 ; XID_Continue +0904..0939 ; XID_Continue +093C ; XID_Continue +093D ; XID_Continue +093E..0940 ; XID_Continue +0941..0948 ; XID_Continue +0949..094C ; XID_Continue +094D ; XID_Continue +0950 ; XID_Continue +0951..0954 ; XID_Continue +0958..0961 ; XID_Continue +0962..0963 ; XID_Continue +0966..096F ; XID_Continue +097B..097F ; XID_Continue +0981 ; XID_Continue +0982..0983 ; XID_Continue +0985..098C ; XID_Continue +098F..0990 ; XID_Continue +0993..09A8 ; XID_Continue +09AA..09B0 ; XID_Continue +09B2 ; XID_Continue +09B6..09B9 ; XID_Continue +09BC ; XID_Continue +09BD ; XID_Continue +09BE..09C0 ; XID_Continue +09C1..09C4 ; XID_Continue +09C7..09C8 ; XID_Continue +09CB..09CC ; XID_Continue +09CD ; XID_Continue +09CE ; XID_Continue +09D7 ; XID_Continue +09DC..09DD ; XID_Continue +09DF..09E1 ; XID_Continue +09E2..09E3 ; XID_Continue +09E6..09EF ; XID_Continue +09F0..09F1 ; XID_Continue +0A01..0A02 ; XID_Continue +0A03 ; XID_Continue +0A05..0A0A ; XID_Continue +0A0F..0A10 ; XID_Continue +0A13..0A28 ; XID_Continue +0A2A..0A30 ; XID_Continue +0A32..0A33 ; XID_Continue +0A35..0A36 ; XID_Continue +0A38..0A39 ; XID_Continue +0A3C ; XID_Continue +0A3E..0A40 ; XID_Continue +0A41..0A42 ; XID_Continue +0A47..0A48 ; XID_Continue +0A4B..0A4D ; XID_Continue +0A59..0A5C ; XID_Continue +0A5E ; XID_Continue +0A66..0A6F ; XID_Continue +0A70..0A71 ; XID_Continue +0A72..0A74 ; XID_Continue +0A81..0A82 ; XID_Continue +0A83 ; XID_Continue +0A85..0A8D ; XID_Continue +0A8F..0A91 ; XID_Continue +0A93..0AA8 ; XID_Continue +0AAA..0AB0 ; XID_Continue +0AB2..0AB3 ; XID_Continue +0AB5..0AB9 ; XID_Continue +0ABC ; XID_Continue +0ABD ; XID_Continue +0ABE..0AC0 ; XID_Continue +0AC1..0AC5 ; XID_Continue +0AC7..0AC8 ; XID_Continue +0AC9 ; XID_Continue +0ACB..0ACC ; XID_Continue +0ACD ; XID_Continue +0AD0 ; XID_Continue +0AE0..0AE1 ; XID_Continue +0AE2..0AE3 ; XID_Continue +0AE6..0AEF ; XID_Continue +0B01 ; XID_Continue +0B02..0B03 ; XID_Continue +0B05..0B0C ; XID_Continue +0B0F..0B10 ; XID_Continue +0B13..0B28 ; XID_Continue +0B2A..0B30 ; XID_Continue +0B32..0B33 ; XID_Continue +0B35..0B39 ; XID_Continue +0B3C ; XID_Continue +0B3D ; XID_Continue +0B3E ; XID_Continue +0B3F ; XID_Continue +0B40 ; XID_Continue +0B41..0B43 ; XID_Continue +0B47..0B48 ; XID_Continue +0B4B..0B4C ; XID_Continue +0B4D ; XID_Continue +0B56 ; XID_Continue +0B57 ; XID_Continue +0B5C..0B5D ; XID_Continue +0B5F..0B61 ; XID_Continue +0B66..0B6F ; XID_Continue +0B71 ; XID_Continue +0B82 ; XID_Continue +0B83 ; XID_Continue +0B85..0B8A ; XID_Continue +0B8E..0B90 ; XID_Continue +0B92..0B95 ; XID_Continue +0B99..0B9A ; XID_Continue +0B9C ; XID_Continue +0B9E..0B9F ; XID_Continue +0BA3..0BA4 ; XID_Continue +0BA8..0BAA ; XID_Continue +0BAE..0BB9 ; XID_Continue +0BBE..0BBF ; XID_Continue +0BC0 ; XID_Continue +0BC1..0BC2 ; XID_Continue +0BC6..0BC8 ; XID_Continue +0BCA..0BCC ; XID_Continue +0BCD ; XID_Continue +0BD7 ; XID_Continue +0BE6..0BEF ; XID_Continue +0C01..0C03 ; XID_Continue +0C05..0C0C ; XID_Continue +0C0E..0C10 ; XID_Continue +0C12..0C28 ; XID_Continue +0C2A..0C33 ; XID_Continue +0C35..0C39 ; XID_Continue +0C3E..0C40 ; XID_Continue +0C41..0C44 ; XID_Continue +0C46..0C48 ; XID_Continue +0C4A..0C4D ; XID_Continue +0C55..0C56 ; XID_Continue +0C60..0C61 ; XID_Continue +0C66..0C6F ; XID_Continue +0C82..0C83 ; XID_Continue +0C85..0C8C ; XID_Continue +0C8E..0C90 ; XID_Continue +0C92..0CA8 ; XID_Continue +0CAA..0CB3 ; XID_Continue +0CB5..0CB9 ; XID_Continue +0CBC ; XID_Continue +0CBD ; XID_Continue +0CBE ; XID_Continue +0CBF ; XID_Continue +0CC0..0CC4 ; XID_Continue +0CC6 ; XID_Continue +0CC7..0CC8 ; XID_Continue +0CCA..0CCB ; XID_Continue +0CCC..0CCD ; XID_Continue +0CD5..0CD6 ; XID_Continue +0CDE ; XID_Continue +0CE0..0CE1 ; XID_Continue +0CE2..0CE3 ; XID_Continue +0CE6..0CEF ; XID_Continue +0D02..0D03 ; XID_Continue +0D05..0D0C ; XID_Continue +0D0E..0D10 ; XID_Continue +0D12..0D28 ; XID_Continue +0D2A..0D39 ; XID_Continue +0D3E..0D40 ; XID_Continue +0D41..0D43 ; XID_Continue +0D46..0D48 ; XID_Continue +0D4A..0D4C ; XID_Continue +0D4D ; XID_Continue +0D57 ; XID_Continue +0D60..0D61 ; XID_Continue +0D66..0D6F ; XID_Continue +0D82..0D83 ; XID_Continue +0D85..0D96 ; XID_Continue +0D9A..0DB1 ; XID_Continue +0DB3..0DBB ; XID_Continue +0DBD ; XID_Continue +0DC0..0DC6 ; XID_Continue +0DCA ; XID_Continue +0DCF..0DD1 ; XID_Continue +0DD2..0DD4 ; XID_Continue +0DD6 ; XID_Continue +0DD8..0DDF ; XID_Continue +0DF2..0DF3 ; XID_Continue +0E01..0E30 ; XID_Continue +0E31 ; XID_Continue +0E32..0E33 ; XID_Continue +0E34..0E3A ; XID_Continue +0E40..0E45 ; XID_Continue +0E46 ; XID_Continue +0E47..0E4E ; XID_Continue +0E50..0E59 ; XID_Continue +0E81..0E82 ; XID_Continue +0E84 ; XID_Continue +0E87..0E88 ; XID_Continue +0E8A ; XID_Continue +0E8D ; XID_Continue +0E94..0E97 ; XID_Continue +0E99..0E9F ; XID_Continue +0EA1..0EA3 ; XID_Continue +0EA5 ; XID_Continue +0EA7 ; XID_Continue +0EAA..0EAB ; XID_Continue +0EAD..0EB0 ; XID_Continue +0EB1 ; XID_Continue +0EB2..0EB3 ; XID_Continue +0EB4..0EB9 ; XID_Continue +0EBB..0EBC ; XID_Continue +0EBD ; XID_Continue +0EC0..0EC4 ; XID_Continue +0EC6 ; XID_Continue +0EC8..0ECD ; XID_Continue +0ED0..0ED9 ; XID_Continue +0EDC..0EDD ; XID_Continue +0F00 ; XID_Continue +0F18..0F19 ; XID_Continue +0F20..0F29 ; XID_Continue +0F35 ; XID_Continue +0F37 ; XID_Continue +0F39 ; XID_Continue +0F3E..0F3F ; XID_Continue +0F40..0F47 ; XID_Continue +0F49..0F6A ; XID_Continue +0F71..0F7E ; XID_Continue +0F7F ; XID_Continue +0F80..0F84 ; XID_Continue +0F86..0F87 ; XID_Continue +0F88..0F8B ; XID_Continue +0F90..0F97 ; XID_Continue +0F99..0FBC ; XID_Continue +0FC6 ; XID_Continue +1000..1021 ; XID_Continue +1023..1027 ; XID_Continue +1029..102A ; XID_Continue +102C ; XID_Continue +102D..1030 ; XID_Continue +1031 ; XID_Continue +1032 ; XID_Continue +1036..1037 ; XID_Continue +1038 ; XID_Continue +1039 ; XID_Continue +1040..1049 ; XID_Continue +1050..1055 ; XID_Continue +1056..1057 ; XID_Continue +1058..1059 ; XID_Continue +10A0..10C5 ; XID_Continue +10D0..10FA ; XID_Continue +10FC ; XID_Continue +1100..1159 ; XID_Continue +115F..11A2 ; XID_Continue +11A8..11F9 ; XID_Continue +1200..1248 ; XID_Continue +124A..124D ; XID_Continue +1250..1256 ; XID_Continue +1258 ; XID_Continue +125A..125D ; XID_Continue +1260..1288 ; XID_Continue +128A..128D ; XID_Continue +1290..12B0 ; XID_Continue +12B2..12B5 ; XID_Continue +12B8..12BE ; XID_Continue +12C0 ; XID_Continue +12C2..12C5 ; XID_Continue +12C8..12D6 ; XID_Continue +12D8..1310 ; XID_Continue +1312..1315 ; XID_Continue +1318..135A ; XID_Continue +135F ; XID_Continue +1369..1371 ; XID_Continue +1380..138F ; XID_Continue +13A0..13F4 ; XID_Continue +1401..166C ; XID_Continue +166F..1676 ; XID_Continue +1681..169A ; XID_Continue +16A0..16EA ; XID_Continue +16EE..16F0 ; XID_Continue +1700..170C ; XID_Continue +170E..1711 ; XID_Continue +1712..1714 ; XID_Continue +1720..1731 ; XID_Continue +1732..1734 ; XID_Continue +1740..1751 ; XID_Continue +1752..1753 ; XID_Continue +1760..176C ; XID_Continue +176E..1770 ; XID_Continue +1772..1773 ; XID_Continue +1780..17B3 ; XID_Continue +17B6 ; XID_Continue +17B7..17BD ; XID_Continue +17BE..17C5 ; XID_Continue +17C6 ; XID_Continue +17C7..17C8 ; XID_Continue +17C9..17D3 ; XID_Continue +17D7 ; XID_Continue +17DC ; XID_Continue +17DD ; XID_Continue +17E0..17E9 ; XID_Continue +180B..180D ; XID_Continue +1810..1819 ; XID_Continue +1820..1842 ; XID_Continue +1843 ; XID_Continue +1844..1877 ; XID_Continue +1880..18A8 ; XID_Continue +18A9 ; XID_Continue +1900..191C ; XID_Continue +1920..1922 ; XID_Continue +1923..1926 ; XID_Continue +1927..1928 ; XID_Continue +1929..192B ; XID_Continue +1930..1931 ; XID_Continue +1932 ; XID_Continue +1933..1938 ; XID_Continue +1939..193B ; XID_Continue +1946..194F ; XID_Continue +1950..196D ; XID_Continue +1970..1974 ; XID_Continue +1980..19A9 ; XID_Continue +19B0..19C0 ; XID_Continue +19C1..19C7 ; XID_Continue +19C8..19C9 ; XID_Continue +19D0..19D9 ; XID_Continue +1A00..1A16 ; XID_Continue +1A17..1A18 ; XID_Continue +1A19..1A1B ; XID_Continue +1B00..1B03 ; XID_Continue +1B04 ; XID_Continue +1B05..1B33 ; XID_Continue +1B34 ; XID_Continue +1B35 ; XID_Continue +1B36..1B3A ; XID_Continue +1B3B ; XID_Continue +1B3C ; XID_Continue +1B3D..1B41 ; XID_Continue +1B42 ; XID_Continue +1B43..1B44 ; XID_Continue +1B45..1B4B ; XID_Continue +1B50..1B59 ; XID_Continue +1B6B..1B73 ; XID_Continue +1D00..1D2B ; XID_Continue +1D2C..1D61 ; XID_Continue +1D62..1D77 ; XID_Continue +1D78 ; XID_Continue +1D79..1D9A ; XID_Continue +1D9B..1DBF ; XID_Continue +1DC0..1DCA ; XID_Continue +1DFE..1DFF ; XID_Continue +1E00..1E9B ; XID_Continue +1EA0..1EF9 ; XID_Continue +1F00..1F15 ; XID_Continue +1F18..1F1D ; XID_Continue +1F20..1F45 ; XID_Continue +1F48..1F4D ; XID_Continue +1F50..1F57 ; XID_Continue +1F59 ; XID_Continue +1F5B ; XID_Continue +1F5D ; XID_Continue +1F5F..1F7D ; XID_Continue +1F80..1FB4 ; XID_Continue +1FB6..1FBC ; XID_Continue +1FBE ; XID_Continue +1FC2..1FC4 ; XID_Continue +1FC6..1FCC ; XID_Continue +1FD0..1FD3 ; XID_Continue +1FD6..1FDB ; XID_Continue +1FE0..1FEC ; XID_Continue +1FF2..1FF4 ; XID_Continue +1FF6..1FFC ; XID_Continue +203F..2040 ; XID_Continue +2054 ; XID_Continue +2071 ; XID_Continue +207F ; XID_Continue +2090..2094 ; XID_Continue +20D0..20DC ; XID_Continue +20E1 ; XID_Continue +20E5..20EF ; XID_Continue +2102 ; XID_Continue +2107 ; XID_Continue +210A..2113 ; XID_Continue +2115 ; XID_Continue +2118 ; XID_Continue +2119..211D ; XID_Continue +2124 ; XID_Continue +2126 ; XID_Continue +2128 ; XID_Continue +212A..212D ; XID_Continue +212E ; XID_Continue +212F..2134 ; XID_Continue +2135..2138 ; XID_Continue +2139 ; XID_Continue +213C..213F ; XID_Continue +2145..2149 ; XID_Continue +214E ; XID_Continue +2160..2182 ; XID_Continue +2183..2184 ; XID_Continue +2C00..2C2E ; XID_Continue +2C30..2C5E ; XID_Continue +2C60..2C6C ; XID_Continue +2C74..2C77 ; XID_Continue +2C80..2CE4 ; XID_Continue +2D00..2D25 ; XID_Continue +2D30..2D65 ; XID_Continue +2D6F ; XID_Continue +2D80..2D96 ; XID_Continue +2DA0..2DA6 ; XID_Continue +2DA8..2DAE ; XID_Continue +2DB0..2DB6 ; XID_Continue +2DB8..2DBE ; XID_Continue +2DC0..2DC6 ; XID_Continue +2DC8..2DCE ; XID_Continue +2DD0..2DD6 ; XID_Continue +2DD8..2DDE ; XID_Continue +3005 ; XID_Continue +3006 ; XID_Continue +3007 ; XID_Continue +3021..3029 ; XID_Continue +302A..302F ; XID_Continue +3031..3035 ; XID_Continue +3038..303A ; XID_Continue +303B ; XID_Continue +303C ; XID_Continue +3041..3096 ; XID_Continue +3099..309A ; XID_Continue +309D..309E ; XID_Continue +309F ; XID_Continue +30A1..30FA ; XID_Continue +30FC..30FE ; XID_Continue +30FF ; XID_Continue +3105..312C ; XID_Continue +3131..318E ; XID_Continue +31A0..31B7 ; XID_Continue +31F0..31FF ; XID_Continue +3400..4DB5 ; XID_Continue +4E00..9FBB ; XID_Continue +A000..A014 ; XID_Continue +A015 ; XID_Continue +A016..A48C ; XID_Continue +A717..A71A ; XID_Continue +A800..A801 ; XID_Continue +A802 ; XID_Continue +A803..A805 ; XID_Continue +A806 ; XID_Continue +A807..A80A ; XID_Continue +A80B ; XID_Continue +A80C..A822 ; XID_Continue +A823..A824 ; XID_Continue +A825..A826 ; XID_Continue +A827 ; XID_Continue +A840..A873 ; XID_Continue +AC00..D7A3 ; XID_Continue +F900..FA2D ; XID_Continue +FA30..FA6A ; XID_Continue +FA70..FAD9 ; XID_Continue +FB00..FB06 ; XID_Continue +FB13..FB17 ; XID_Continue +FB1D ; XID_Continue +FB1E ; XID_Continue +FB1F..FB28 ; XID_Continue +FB2A..FB36 ; XID_Continue +FB38..FB3C ; XID_Continue +FB3E ; XID_Continue +FB40..FB41 ; XID_Continue +FB43..FB44 ; XID_Continue +FB46..FBB1 ; XID_Continue +FBD3..FC5D ; XID_Continue +FC64..FD3D ; XID_Continue +FD50..FD8F ; XID_Continue +FD92..FDC7 ; XID_Continue +FDF0..FDF9 ; XID_Continue +FE00..FE0F ; XID_Continue +FE20..FE23 ; XID_Continue +FE33..FE34 ; XID_Continue +FE4D..FE4F ; XID_Continue +FE71 ; XID_Continue +FE73 ; XID_Continue +FE77 ; XID_Continue +FE79 ; XID_Continue +FE7B ; XID_Continue +FE7D ; XID_Continue +FE7F..FEFC ; XID_Continue +FF10..FF19 ; XID_Continue +FF21..FF3A ; XID_Continue +FF3F ; XID_Continue +FF41..FF5A ; XID_Continue +FF66..FF6F ; XID_Continue +FF70 ; XID_Continue +FF71..FF9D ; XID_Continue +FF9E..FF9F ; XID_Continue +FFA0..FFBE ; XID_Continue +FFC2..FFC7 ; XID_Continue +FFCA..FFCF ; XID_Continue +FFD2..FFD7 ; XID_Continue +FFDA..FFDC ; XID_Continue +10000..1000B ; XID_Continue +1000D..10026 ; XID_Continue +10028..1003A ; XID_Continue +1003C..1003D ; XID_Continue +1003F..1004D ; XID_Continue +10050..1005D ; XID_Continue +10080..100FA ; XID_Continue +10140..10174 ; XID_Continue +10300..1031E ; XID_Continue +10330..10340 ; XID_Continue +10341 ; XID_Continue +10342..10349 ; XID_Continue +1034A ; XID_Continue +10380..1039D ; XID_Continue +103A0..103C3 ; XID_Continue +103C8..103CF ; XID_Continue +103D1..103D5 ; XID_Continue +10400..1044F ; XID_Continue +10450..1049D ; XID_Continue +104A0..104A9 ; XID_Continue +10800..10805 ; XID_Continue +10808 ; XID_Continue +1080A..10835 ; XID_Continue +10837..10838 ; XID_Continue +1083C ; XID_Continue +1083F ; XID_Continue +10900..10915 ; XID_Continue +10A00 ; XID_Continue +10A01..10A03 ; XID_Continue +10A05..10A06 ; XID_Continue +10A0C..10A0F ; XID_Continue +10A10..10A13 ; XID_Continue +10A15..10A17 ; XID_Continue +10A19..10A33 ; XID_Continue +10A38..10A3A ; XID_Continue +10A3F ; XID_Continue +12000..1236E ; XID_Continue +12400..12462 ; XID_Continue +1D165..1D166 ; XID_Continue +1D167..1D169 ; XID_Continue +1D16D..1D172 ; XID_Continue +1D17B..1D182 ; XID_Continue +1D185..1D18B ; XID_Continue +1D1AA..1D1AD ; XID_Continue +1D242..1D244 ; XID_Continue +1D400..1D454 ; XID_Continue +1D456..1D49C ; XID_Continue +1D49E..1D49F ; XID_Continue +1D4A2 ; XID_Continue +1D4A5..1D4A6 ; XID_Continue +1D4A9..1D4AC ; XID_Continue +1D4AE..1D4B9 ; XID_Continue +1D4BB ; XID_Continue +1D4BD..1D4C3 ; XID_Continue +1D4C5..1D505 ; XID_Continue +1D507..1D50A ; XID_Continue +1D50D..1D514 ; XID_Continue +1D516..1D51C ; XID_Continue +1D51E..1D539 ; XID_Continue +1D53B..1D53E ; XID_Continue +1D540..1D544 ; XID_Continue +1D546 ; XID_Continue +1D54A..1D550 ; XID_Continue +1D552..1D6A5 ; XID_Continue +1D6A8..1D6C0 ; XID_Continue +1D6C2..1D6DA ; XID_Continue +1D6DC..1D6FA ; XID_Continue +1D6FC..1D714 ; XID_Continue +1D716..1D734 ; XID_Continue +1D736..1D74E ; XID_Continue +1D750..1D76E ; XID_Continue +1D770..1D788 ; XID_Continue +1D78A..1D7A8 ; XID_Continue +1D7AA..1D7C2 ; XID_Continue +1D7C4..1D7CB ; XID_Continue +1D7CE..1D7FF ; XID_Continue +20000..2A6D6 ; XID_Continue +2F800..2FA1D ; XID_Continue +E0100..E01EF ; XID_Continue + +# Total code points: 94056 + +# ================================================ + +# Derived Property: Default_Ignorable_Code_Point +# Generated from Other_Default_Ignorable_Code_Point + Cf + Cc + Cs + Noncharacters +# - White_Space - FFF9..FFFB (Annotation Characters) + +0000..0008 ; Default_Ignorable_Code_Point +000E..001F ; Default_Ignorable_Code_Point +007F..0084 ; Default_Ignorable_Code_Point +0086..009F ; Default_Ignorable_Code_Point +00AD ; Default_Ignorable_Code_Point +034F ; Default_Ignorable_Code_Point +0600..0603 ; Default_Ignorable_Code_Point +06DD ; Default_Ignorable_Code_Point +070F ; Default_Ignorable_Code_Point +115F..1160 ; Default_Ignorable_Code_Point +17B4..17B5 ; Default_Ignorable_Code_Point +180B..180D ; Default_Ignorable_Code_Point +200B..200F ; Default_Ignorable_Code_Point +202A..202E ; Default_Ignorable_Code_Point +2060..2063 ; Default_Ignorable_Code_Point +2064..2069 ; Default_Ignorable_Code_Point +206A..206F ; Default_Ignorable_Code_Point +3164 ; Default_Ignorable_Code_Point +D800..DFFF ; Default_Ignorable_Code_Point +FDD0..FDEF ; Default_Ignorable_Code_Point +FE00..FE0F ; Default_Ignorable_Code_Point +FEFF ; Default_Ignorable_Code_Point +FFA0 ; Default_Ignorable_Code_Point +FFF0..FFF8 ; Default_Ignorable_Code_Point +FFFE..FFFF ; Default_Ignorable_Code_Point +1D173..1D17A ; Default_Ignorable_Code_Point +1FFFE..1FFFF ; Default_Ignorable_Code_Point +2FFFE..2FFFF ; Default_Ignorable_Code_Point +3FFFE..3FFFF ; Default_Ignorable_Code_Point +4FFFE..4FFFF ; Default_Ignorable_Code_Point +5FFFE..5FFFF ; Default_Ignorable_Code_Point +6FFFE..6FFFF ; Default_Ignorable_Code_Point +7FFFE..7FFFF ; Default_Ignorable_Code_Point +8FFFE..8FFFF ; Default_Ignorable_Code_Point +9FFFE..9FFFF ; Default_Ignorable_Code_Point +AFFFE..AFFFF ; Default_Ignorable_Code_Point +BFFFE..BFFFF ; Default_Ignorable_Code_Point +CFFFE..CFFFF ; Default_Ignorable_Code_Point +DFFFE..E0000 ; Default_Ignorable_Code_Point +E0001 ; Default_Ignorable_Code_Point +E0002..E001F ; Default_Ignorable_Code_Point +E0020..E007F ; Default_Ignorable_Code_Point +E0080..E00FF ; Default_Ignorable_Code_Point +E0100..E01EF ; Default_Ignorable_Code_Point +E01F0..E0FFF ; Default_Ignorable_Code_Point +EFFFE..EFFFF ; Default_Ignorable_Code_Point +FFFFE..FFFFF ; Default_Ignorable_Code_Point +10FFFE..10FFFF; Default_Ignorable_Code_Point + +# Total code points: 6346 + +# ================================================ + +# Derived Property: Grapheme_Extend +# Generated from: Me + Mn + Other_Grapheme_Extend +# Note: depending on an application's interpretation of Co (private use), +# they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither. + +0300..036F ; Grapheme_Extend +0483..0486 ; Grapheme_Extend +0488..0489 ; Grapheme_Extend +0591..05BD ; Grapheme_Extend +05BF ; Grapheme_Extend +05C1..05C2 ; Grapheme_Extend +05C4..05C5 ; Grapheme_Extend +05C7 ; Grapheme_Extend +0610..0615 ; Grapheme_Extend +064B..065E ; Grapheme_Extend +0670 ; Grapheme_Extend +06D6..06DC ; Grapheme_Extend +06DE ; Grapheme_Extend +06DF..06E4 ; Grapheme_Extend +06E7..06E8 ; Grapheme_Extend +06EA..06ED ; Grapheme_Extend +0711 ; Grapheme_Extend +0730..074A ; Grapheme_Extend +07A6..07B0 ; Grapheme_Extend +07EB..07F3 ; Grapheme_Extend +0901..0902 ; Grapheme_Extend +093C ; Grapheme_Extend +0941..0948 ; Grapheme_Extend +094D ; Grapheme_Extend +0951..0954 ; Grapheme_Extend +0962..0963 ; Grapheme_Extend +0981 ; Grapheme_Extend +09BC ; Grapheme_Extend +09BE ; Grapheme_Extend +09C1..09C4 ; Grapheme_Extend +09CD ; Grapheme_Extend +09D7 ; Grapheme_Extend +09E2..09E3 ; Grapheme_Extend +0A01..0A02 ; Grapheme_Extend +0A3C ; Grapheme_Extend +0A41..0A42 ; Grapheme_Extend +0A47..0A48 ; Grapheme_Extend +0A4B..0A4D ; Grapheme_Extend +0A70..0A71 ; Grapheme_Extend +0A81..0A82 ; Grapheme_Extend +0ABC ; Grapheme_Extend +0AC1..0AC5 ; Grapheme_Extend +0AC7..0AC8 ; Grapheme_Extend +0ACD ; Grapheme_Extend +0AE2..0AE3 ; Grapheme_Extend +0B01 ; Grapheme_Extend +0B3C ; Grapheme_Extend +0B3E ; Grapheme_Extend +0B3F ; Grapheme_Extend +0B41..0B43 ; Grapheme_Extend +0B4D ; Grapheme_Extend +0B56 ; Grapheme_Extend +0B57 ; Grapheme_Extend +0B82 ; Grapheme_Extend +0BBE ; Grapheme_Extend +0BC0 ; Grapheme_Extend +0BCD ; Grapheme_Extend +0BD7 ; Grapheme_Extend +0C3E..0C40 ; Grapheme_Extend +0C46..0C48 ; Grapheme_Extend +0C4A..0C4D ; Grapheme_Extend +0C55..0C56 ; Grapheme_Extend +0CBC ; Grapheme_Extend +0CBF ; Grapheme_Extend +0CC2 ; Grapheme_Extend +0CC6 ; Grapheme_Extend +0CCC..0CCD ; Grapheme_Extend +0CD5..0CD6 ; Grapheme_Extend +0CE2..0CE3 ; Grapheme_Extend +0D3E ; Grapheme_Extend +0D41..0D43 ; Grapheme_Extend +0D4D ; Grapheme_Extend +0D57 ; Grapheme_Extend +0DCA ; Grapheme_Extend +0DCF ; Grapheme_Extend +0DD2..0DD4 ; Grapheme_Extend +0DD6 ; Grapheme_Extend +0DDF ; Grapheme_Extend +0E31 ; Grapheme_Extend +0E34..0E3A ; Grapheme_Extend +0E47..0E4E ; Grapheme_Extend +0EB1 ; Grapheme_Extend +0EB4..0EB9 ; Grapheme_Extend +0EBB..0EBC ; Grapheme_Extend +0EC8..0ECD ; Grapheme_Extend +0F18..0F19 ; Grapheme_Extend +0F35 ; Grapheme_Extend +0F37 ; Grapheme_Extend +0F39 ; Grapheme_Extend +0F71..0F7E ; Grapheme_Extend +0F80..0F84 ; Grapheme_Extend +0F86..0F87 ; Grapheme_Extend +0F90..0F97 ; Grapheme_Extend +0F99..0FBC ; Grapheme_Extend +0FC6 ; Grapheme_Extend +102D..1030 ; Grapheme_Extend +1032 ; Grapheme_Extend +1036..1037 ; Grapheme_Extend +1039 ; Grapheme_Extend +1058..1059 ; Grapheme_Extend +135F ; Grapheme_Extend +1712..1714 ; Grapheme_Extend +1732..1734 ; Grapheme_Extend +1752..1753 ; Grapheme_Extend +1772..1773 ; Grapheme_Extend +17B7..17BD ; Grapheme_Extend +17C6 ; Grapheme_Extend +17C9..17D3 ; Grapheme_Extend +17DD ; Grapheme_Extend +180B..180D ; Grapheme_Extend +18A9 ; Grapheme_Extend +1920..1922 ; Grapheme_Extend +1927..1928 ; Grapheme_Extend +1932 ; Grapheme_Extend +1939..193B ; Grapheme_Extend +1A17..1A18 ; Grapheme_Extend +1B00..1B03 ; Grapheme_Extend +1B34 ; Grapheme_Extend +1B36..1B3A ; Grapheme_Extend +1B3C ; Grapheme_Extend +1B42 ; Grapheme_Extend +1B6B..1B73 ; Grapheme_Extend +1DC0..1DCA ; Grapheme_Extend +1DFE..1DFF ; Grapheme_Extend +200C..200D ; Grapheme_Extend +20D0..20DC ; Grapheme_Extend +20DD..20E0 ; Grapheme_Extend +20E1 ; Grapheme_Extend +20E2..20E4 ; Grapheme_Extend +20E5..20EF ; Grapheme_Extend +302A..302F ; Grapheme_Extend +3099..309A ; Grapheme_Extend +A806 ; Grapheme_Extend +A80B ; Grapheme_Extend +A825..A826 ; Grapheme_Extend +FB1E ; Grapheme_Extend +FE00..FE0F ; Grapheme_Extend +FE20..FE23 ; Grapheme_Extend +10A01..10A03 ; Grapheme_Extend +10A05..10A06 ; Grapheme_Extend +10A0C..10A0F ; Grapheme_Extend +10A38..10A3A ; Grapheme_Extend +10A3F ; Grapheme_Extend +1D165 ; Grapheme_Extend +1D167..1D169 ; Grapheme_Extend +1D16E..1D172 ; Grapheme_Extend +1D17B..1D182 ; Grapheme_Extend +1D185..1D18B ; Grapheme_Extend +1D1AA..1D1AD ; Grapheme_Extend +1D242..1D244 ; Grapheme_Extend +E0100..E01EF ; Grapheme_Extend + +# Total code points: 911 + +# ================================================ + +# Derived Property: Grapheme_Base +# Generated from: [0..10FFFF] - Cc - Cf - Cs - Co - Cn - Zl - Zp - Grapheme_Extend +# Note: depending on an application's interpretation of Co (private use), +# they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither. + +0020 ; Grapheme_Base +0021..0023 ; Grapheme_Base +0024 ; Grapheme_Base +0025..0027 ; Grapheme_Base +0028 ; Grapheme_Base +0029 ; Grapheme_Base +002A ; Grapheme_Base +002B ; Grapheme_Base +002C ; Grapheme_Base +002D ; Grapheme_Base +002E..002F ; Grapheme_Base +0030..0039 ; Grapheme_Base +003A..003B ; Grapheme_Base +003C..003E ; Grapheme_Base +003F..0040 ; Grapheme_Base +0041..005A ; Grapheme_Base +005B ; Grapheme_Base +005C ; Grapheme_Base +005D ; Grapheme_Base +005E ; Grapheme_Base +005F ; Grapheme_Base +0060 ; Grapheme_Base +0061..007A ; Grapheme_Base +007B ; Grapheme_Base +007C ; Grapheme_Base +007D ; Grapheme_Base +007E ; Grapheme_Base +00A0 ; Grapheme_Base +00A1 ; Grapheme_Base +00A2..00A5 ; Grapheme_Base +00A6..00A7 ; Grapheme_Base +00A8 ; Grapheme_Base +00A9 ; Grapheme_Base +00AA ; Grapheme_Base +00AB ; Grapheme_Base +00AC ; Grapheme_Base +00AE ; Grapheme_Base +00AF ; Grapheme_Base +00B0 ; Grapheme_Base +00B1 ; Grapheme_Base +00B2..00B3 ; Grapheme_Base +00B4 ; Grapheme_Base +00B5 ; Grapheme_Base +00B6 ; Grapheme_Base +00B7 ; Grapheme_Base +00B8 ; Grapheme_Base +00B9 ; Grapheme_Base +00BA ; Grapheme_Base +00BB ; Grapheme_Base +00BC..00BE ; Grapheme_Base +00BF ; Grapheme_Base +00C0..00D6 ; Grapheme_Base +00D7 ; Grapheme_Base +00D8..00F6 ; Grapheme_Base +00F7 ; Grapheme_Base +00F8..01BA ; Grapheme_Base +01BB ; Grapheme_Base +01BC..01BF ; Grapheme_Base +01C0..01C3 ; Grapheme_Base +01C4..0293 ; Grapheme_Base +0294 ; Grapheme_Base +0295..02AF ; Grapheme_Base +02B0..02C1 ; Grapheme_Base +02C2..02C5 ; Grapheme_Base +02C6..02D1 ; Grapheme_Base +02D2..02DF ; Grapheme_Base +02E0..02E4 ; Grapheme_Base +02E5..02ED ; Grapheme_Base +02EE ; Grapheme_Base +02EF..02FF ; Grapheme_Base +0374..0375 ; Grapheme_Base +037A ; Grapheme_Base +037B..037D ; Grapheme_Base +037E ; Grapheme_Base +0384..0385 ; Grapheme_Base +0386 ; Grapheme_Base +0387 ; Grapheme_Base +0388..038A ; Grapheme_Base +038C ; Grapheme_Base +038E..03A1 ; Grapheme_Base +03A3..03CE ; Grapheme_Base +03D0..03F5 ; Grapheme_Base +03F6 ; Grapheme_Base +03F7..0481 ; Grapheme_Base +0482 ; Grapheme_Base +048A..0513 ; Grapheme_Base +0531..0556 ; Grapheme_Base +0559 ; Grapheme_Base +055A..055F ; Grapheme_Base +0561..0587 ; Grapheme_Base +0589 ; Grapheme_Base +058A ; Grapheme_Base +05BE ; Grapheme_Base +05C0 ; Grapheme_Base +05C3 ; Grapheme_Base +05C6 ; Grapheme_Base +05D0..05EA ; Grapheme_Base +05F0..05F2 ; Grapheme_Base +05F3..05F4 ; Grapheme_Base +060B ; Grapheme_Base +060C..060D ; Grapheme_Base +060E..060F ; Grapheme_Base +061B ; Grapheme_Base +061E..061F ; Grapheme_Base +0621..063A ; Grapheme_Base +0640 ; Grapheme_Base +0641..064A ; Grapheme_Base +0660..0669 ; Grapheme_Base +066A..066D ; Grapheme_Base +066E..066F ; Grapheme_Base +0671..06D3 ; Grapheme_Base +06D4 ; Grapheme_Base +06D5 ; Grapheme_Base +06E5..06E6 ; Grapheme_Base +06E9 ; Grapheme_Base +06EE..06EF ; Grapheme_Base +06F0..06F9 ; Grapheme_Base +06FA..06FC ; Grapheme_Base +06FD..06FE ; Grapheme_Base +06FF ; Grapheme_Base +0700..070D ; Grapheme_Base +0710 ; Grapheme_Base +0712..072F ; Grapheme_Base +074D..076D ; Grapheme_Base +0780..07A5 ; Grapheme_Base +07B1 ; Grapheme_Base +07C0..07C9 ; Grapheme_Base +07CA..07EA ; Grapheme_Base +07F4..07F5 ; Grapheme_Base +07F6 ; Grapheme_Base +07F7..07F9 ; Grapheme_Base +07FA ; Grapheme_Base +0903 ; Grapheme_Base +0904..0939 ; Grapheme_Base +093D ; Grapheme_Base +093E..0940 ; Grapheme_Base +0949..094C ; Grapheme_Base +0950 ; Grapheme_Base +0958..0961 ; Grapheme_Base +0964..0965 ; Grapheme_Base +0966..096F ; Grapheme_Base +0970 ; Grapheme_Base +097B..097F ; Grapheme_Base +0982..0983 ; Grapheme_Base +0985..098C ; Grapheme_Base +098F..0990 ; Grapheme_Base +0993..09A8 ; Grapheme_Base +09AA..09B0 ; Grapheme_Base +09B2 ; Grapheme_Base +09B6..09B9 ; Grapheme_Base +09BD ; Grapheme_Base +09BF..09C0 ; Grapheme_Base +09C7..09C8 ; Grapheme_Base +09CB..09CC ; Grapheme_Base +09CE ; Grapheme_Base +09DC..09DD ; Grapheme_Base +09DF..09E1 ; Grapheme_Base +09E6..09EF ; Grapheme_Base +09F0..09F1 ; Grapheme_Base +09F2..09F3 ; Grapheme_Base +09F4..09F9 ; Grapheme_Base +09FA ; Grapheme_Base +0A03 ; Grapheme_Base +0A05..0A0A ; Grapheme_Base +0A0F..0A10 ; Grapheme_Base +0A13..0A28 ; Grapheme_Base +0A2A..0A30 ; Grapheme_Base +0A32..0A33 ; Grapheme_Base +0A35..0A36 ; Grapheme_Base +0A38..0A39 ; Grapheme_Base +0A3E..0A40 ; Grapheme_Base +0A59..0A5C ; Grapheme_Base +0A5E ; Grapheme_Base +0A66..0A6F ; Grapheme_Base +0A72..0A74 ; Grapheme_Base +0A83 ; Grapheme_Base +0A85..0A8D ; Grapheme_Base +0A8F..0A91 ; Grapheme_Base +0A93..0AA8 ; Grapheme_Base +0AAA..0AB0 ; Grapheme_Base +0AB2..0AB3 ; Grapheme_Base +0AB5..0AB9 ; Grapheme_Base +0ABD ; Grapheme_Base +0ABE..0AC0 ; Grapheme_Base +0AC9 ; Grapheme_Base +0ACB..0ACC ; Grapheme_Base +0AD0 ; Grapheme_Base +0AE0..0AE1 ; Grapheme_Base +0AE6..0AEF ; Grapheme_Base +0AF1 ; Grapheme_Base +0B02..0B03 ; Grapheme_Base +0B05..0B0C ; Grapheme_Base +0B0F..0B10 ; Grapheme_Base +0B13..0B28 ; Grapheme_Base +0B2A..0B30 ; Grapheme_Base +0B32..0B33 ; Grapheme_Base +0B35..0B39 ; Grapheme_Base +0B3D ; Grapheme_Base +0B40 ; Grapheme_Base +0B47..0B48 ; Grapheme_Base +0B4B..0B4C ; Grapheme_Base +0B5C..0B5D ; Grapheme_Base +0B5F..0B61 ; Grapheme_Base +0B66..0B6F ; Grapheme_Base +0B70 ; Grapheme_Base +0B71 ; Grapheme_Base +0B83 ; Grapheme_Base +0B85..0B8A ; Grapheme_Base +0B8E..0B90 ; Grapheme_Base +0B92..0B95 ; Grapheme_Base +0B99..0B9A ; Grapheme_Base +0B9C ; Grapheme_Base +0B9E..0B9F ; Grapheme_Base +0BA3..0BA4 ; Grapheme_Base +0BA8..0BAA ; Grapheme_Base +0BAE..0BB9 ; Grapheme_Base +0BBF ; Grapheme_Base +0BC1..0BC2 ; Grapheme_Base +0BC6..0BC8 ; Grapheme_Base +0BCA..0BCC ; Grapheme_Base +0BE6..0BEF ; Grapheme_Base +0BF0..0BF2 ; Grapheme_Base +0BF3..0BF8 ; Grapheme_Base +0BF9 ; Grapheme_Base +0BFA ; Grapheme_Base +0C01..0C03 ; Grapheme_Base +0C05..0C0C ; Grapheme_Base +0C0E..0C10 ; Grapheme_Base +0C12..0C28 ; Grapheme_Base +0C2A..0C33 ; Grapheme_Base +0C35..0C39 ; Grapheme_Base +0C41..0C44 ; Grapheme_Base +0C60..0C61 ; Grapheme_Base +0C66..0C6F ; Grapheme_Base +0C82..0C83 ; Grapheme_Base +0C85..0C8C ; Grapheme_Base +0C8E..0C90 ; Grapheme_Base +0C92..0CA8 ; Grapheme_Base +0CAA..0CB3 ; Grapheme_Base +0CB5..0CB9 ; Grapheme_Base +0CBD ; Grapheme_Base +0CBE ; Grapheme_Base +0CC0..0CC1 ; Grapheme_Base +0CC3..0CC4 ; Grapheme_Base +0CC7..0CC8 ; Grapheme_Base +0CCA..0CCB ; Grapheme_Base +0CDE ; Grapheme_Base +0CE0..0CE1 ; Grapheme_Base +0CE6..0CEF ; Grapheme_Base +0CF1..0CF2 ; Grapheme_Base +0D02..0D03 ; Grapheme_Base +0D05..0D0C ; Grapheme_Base +0D0E..0D10 ; Grapheme_Base +0D12..0D28 ; Grapheme_Base +0D2A..0D39 ; Grapheme_Base +0D3F..0D40 ; Grapheme_Base +0D46..0D48 ; Grapheme_Base +0D4A..0D4C ; Grapheme_Base +0D60..0D61 ; Grapheme_Base +0D66..0D6F ; Grapheme_Base +0D82..0D83 ; Grapheme_Base +0D85..0D96 ; Grapheme_Base +0D9A..0DB1 ; Grapheme_Base +0DB3..0DBB ; Grapheme_Base +0DBD ; Grapheme_Base +0DC0..0DC6 ; Grapheme_Base +0DD0..0DD1 ; Grapheme_Base +0DD8..0DDE ; Grapheme_Base +0DF2..0DF3 ; Grapheme_Base +0DF4 ; Grapheme_Base +0E01..0E30 ; Grapheme_Base +0E32..0E33 ; Grapheme_Base +0E3F ; Grapheme_Base +0E40..0E45 ; Grapheme_Base +0E46 ; Grapheme_Base +0E4F ; Grapheme_Base +0E50..0E59 ; Grapheme_Base +0E5A..0E5B ; Grapheme_Base +0E81..0E82 ; Grapheme_Base +0E84 ; Grapheme_Base +0E87..0E88 ; Grapheme_Base +0E8A ; Grapheme_Base +0E8D ; Grapheme_Base +0E94..0E97 ; Grapheme_Base +0E99..0E9F ; Grapheme_Base +0EA1..0EA3 ; Grapheme_Base +0EA5 ; Grapheme_Base +0EA7 ; Grapheme_Base +0EAA..0EAB ; Grapheme_Base +0EAD..0EB0 ; Grapheme_Base +0EB2..0EB3 ; Grapheme_Base +0EBD ; Grapheme_Base +0EC0..0EC4 ; Grapheme_Base +0EC6 ; Grapheme_Base +0ED0..0ED9 ; Grapheme_Base +0EDC..0EDD ; Grapheme_Base +0F00 ; Grapheme_Base +0F01..0F03 ; Grapheme_Base +0F04..0F12 ; Grapheme_Base +0F13..0F17 ; Grapheme_Base +0F1A..0F1F ; Grapheme_Base +0F20..0F29 ; Grapheme_Base +0F2A..0F33 ; Grapheme_Base +0F34 ; Grapheme_Base +0F36 ; Grapheme_Base +0F38 ; Grapheme_Base +0F3A ; Grapheme_Base +0F3B ; Grapheme_Base +0F3C ; Grapheme_Base +0F3D ; Grapheme_Base +0F3E..0F3F ; Grapheme_Base +0F40..0F47 ; Grapheme_Base +0F49..0F6A ; Grapheme_Base +0F7F ; Grapheme_Base +0F85 ; Grapheme_Base +0F88..0F8B ; Grapheme_Base +0FBE..0FC5 ; Grapheme_Base +0FC7..0FCC ; Grapheme_Base +0FCF ; Grapheme_Base +0FD0..0FD1 ; Grapheme_Base +1000..1021 ; Grapheme_Base +1023..1027 ; Grapheme_Base +1029..102A ; Grapheme_Base +102C ; Grapheme_Base +1031 ; Grapheme_Base +1038 ; Grapheme_Base +1040..1049 ; Grapheme_Base +104A..104F ; Grapheme_Base +1050..1055 ; Grapheme_Base +1056..1057 ; Grapheme_Base +10A0..10C5 ; Grapheme_Base +10D0..10FA ; Grapheme_Base +10FB ; Grapheme_Base +10FC ; Grapheme_Base +1100..1159 ; Grapheme_Base +115F..11A2 ; Grapheme_Base +11A8..11F9 ; Grapheme_Base +1200..1248 ; Grapheme_Base +124A..124D ; Grapheme_Base +1250..1256 ; Grapheme_Base +1258 ; Grapheme_Base +125A..125D ; Grapheme_Base +1260..1288 ; Grapheme_Base +128A..128D ; Grapheme_Base +1290..12B0 ; Grapheme_Base +12B2..12B5 ; Grapheme_Base +12B8..12BE ; Grapheme_Base +12C0 ; Grapheme_Base +12C2..12C5 ; Grapheme_Base +12C8..12D6 ; Grapheme_Base +12D8..1310 ; Grapheme_Base +1312..1315 ; Grapheme_Base +1318..135A ; Grapheme_Base +1360 ; Grapheme_Base +1361..1368 ; Grapheme_Base +1369..137C ; Grapheme_Base +1380..138F ; Grapheme_Base +1390..1399 ; Grapheme_Base +13A0..13F4 ; Grapheme_Base +1401..166C ; Grapheme_Base +166D..166E ; Grapheme_Base +166F..1676 ; Grapheme_Base +1680 ; Grapheme_Base +1681..169A ; Grapheme_Base +169B ; Grapheme_Base +169C ; Grapheme_Base +16A0..16EA ; Grapheme_Base +16EB..16ED ; Grapheme_Base +16EE..16F0 ; Grapheme_Base +1700..170C ; Grapheme_Base +170E..1711 ; Grapheme_Base +1720..1731 ; Grapheme_Base +1735..1736 ; Grapheme_Base +1740..1751 ; Grapheme_Base +1760..176C ; Grapheme_Base +176E..1770 ; Grapheme_Base +1780..17B3 ; Grapheme_Base +17B6 ; Grapheme_Base +17BE..17C5 ; Grapheme_Base +17C7..17C8 ; Grapheme_Base +17D4..17D6 ; Grapheme_Base +17D7 ; Grapheme_Base +17D8..17DA ; Grapheme_Base +17DB ; Grapheme_Base +17DC ; Grapheme_Base +17E0..17E9 ; Grapheme_Base +17F0..17F9 ; Grapheme_Base +1800..1805 ; Grapheme_Base +1806 ; Grapheme_Base +1807..180A ; Grapheme_Base +180E ; Grapheme_Base +1810..1819 ; Grapheme_Base +1820..1842 ; Grapheme_Base +1843 ; Grapheme_Base +1844..1877 ; Grapheme_Base +1880..18A8 ; Grapheme_Base +1900..191C ; Grapheme_Base +1923..1926 ; Grapheme_Base +1929..192B ; Grapheme_Base +1930..1931 ; Grapheme_Base +1933..1938 ; Grapheme_Base +1940 ; Grapheme_Base +1944..1945 ; Grapheme_Base +1946..194F ; Grapheme_Base +1950..196D ; Grapheme_Base +1970..1974 ; Grapheme_Base +1980..19A9 ; Grapheme_Base +19B0..19C0 ; Grapheme_Base +19C1..19C7 ; Grapheme_Base +19C8..19C9 ; Grapheme_Base +19D0..19D9 ; Grapheme_Base +19DE..19DF ; Grapheme_Base +19E0..19FF ; Grapheme_Base +1A00..1A16 ; Grapheme_Base +1A19..1A1B ; Grapheme_Base +1A1E..1A1F ; Grapheme_Base +1B04 ; Grapheme_Base +1B05..1B33 ; Grapheme_Base +1B35 ; Grapheme_Base +1B3B ; Grapheme_Base +1B3D..1B41 ; Grapheme_Base +1B43..1B44 ; Grapheme_Base +1B45..1B4B ; Grapheme_Base +1B50..1B59 ; Grapheme_Base +1B5A..1B60 ; Grapheme_Base +1B61..1B6A ; Grapheme_Base +1B74..1B7C ; Grapheme_Base +1D00..1D2B ; Grapheme_Base +1D2C..1D61 ; Grapheme_Base +1D62..1D77 ; Grapheme_Base +1D78 ; Grapheme_Base +1D79..1D9A ; Grapheme_Base +1D9B..1DBF ; Grapheme_Base +1E00..1E9B ; Grapheme_Base +1EA0..1EF9 ; Grapheme_Base +1F00..1F15 ; Grapheme_Base +1F18..1F1D ; Grapheme_Base +1F20..1F45 ; Grapheme_Base +1F48..1F4D ; Grapheme_Base +1F50..1F57 ; Grapheme_Base +1F59 ; Grapheme_Base +1F5B ; Grapheme_Base +1F5D ; Grapheme_Base +1F5F..1F7D ; Grapheme_Base +1F80..1FB4 ; Grapheme_Base +1FB6..1FBC ; Grapheme_Base +1FBD ; Grapheme_Base +1FBE ; Grapheme_Base +1FBF..1FC1 ; Grapheme_Base +1FC2..1FC4 ; Grapheme_Base +1FC6..1FCC ; Grapheme_Base +1FCD..1FCF ; Grapheme_Base +1FD0..1FD3 ; Grapheme_Base +1FD6..1FDB ; Grapheme_Base +1FDD..1FDF ; Grapheme_Base +1FE0..1FEC ; Grapheme_Base +1FED..1FEF ; Grapheme_Base +1FF2..1FF4 ; Grapheme_Base +1FF6..1FFC ; Grapheme_Base +1FFD..1FFE ; Grapheme_Base +2000..200A ; Grapheme_Base +2010..2015 ; Grapheme_Base +2016..2017 ; Grapheme_Base +2018 ; Grapheme_Base +2019 ; Grapheme_Base +201A ; Grapheme_Base +201B..201C ; Grapheme_Base +201D ; Grapheme_Base +201E ; Grapheme_Base +201F ; Grapheme_Base +2020..2027 ; Grapheme_Base +202F ; Grapheme_Base +2030..2038 ; Grapheme_Base +2039 ; Grapheme_Base +203A ; Grapheme_Base +203B..203E ; Grapheme_Base +203F..2040 ; Grapheme_Base +2041..2043 ; Grapheme_Base +2044 ; Grapheme_Base +2045 ; Grapheme_Base +2046 ; Grapheme_Base +2047..2051 ; Grapheme_Base +2052 ; Grapheme_Base +2053 ; Grapheme_Base +2054 ; Grapheme_Base +2055..205E ; Grapheme_Base +205F ; Grapheme_Base +2070 ; Grapheme_Base +2071 ; Grapheme_Base +2074..2079 ; Grapheme_Base +207A..207C ; Grapheme_Base +207D ; Grapheme_Base +207E ; Grapheme_Base +207F ; Grapheme_Base +2080..2089 ; Grapheme_Base +208A..208C ; Grapheme_Base +208D ; Grapheme_Base +208E ; Grapheme_Base +2090..2094 ; Grapheme_Base +20A0..20B5 ; Grapheme_Base +2100..2101 ; Grapheme_Base +2102 ; Grapheme_Base +2103..2106 ; Grapheme_Base +2107 ; Grapheme_Base +2108..2109 ; Grapheme_Base +210A..2113 ; Grapheme_Base +2114 ; Grapheme_Base +2115 ; Grapheme_Base +2116..2118 ; Grapheme_Base +2119..211D ; Grapheme_Base +211E..2123 ; Grapheme_Base +2124 ; Grapheme_Base +2125 ; Grapheme_Base +2126 ; Grapheme_Base +2127 ; Grapheme_Base +2128 ; Grapheme_Base +2129 ; Grapheme_Base +212A..212D ; Grapheme_Base +212E ; Grapheme_Base +212F..2134 ; Grapheme_Base +2135..2138 ; Grapheme_Base +2139 ; Grapheme_Base +213A..213B ; Grapheme_Base +213C..213F ; Grapheme_Base +2140..2144 ; Grapheme_Base +2145..2149 ; Grapheme_Base +214A ; Grapheme_Base +214B ; Grapheme_Base +214C..214D ; Grapheme_Base +214E ; Grapheme_Base +2153..215F ; Grapheme_Base +2160..2182 ; Grapheme_Base +2183..2184 ; Grapheme_Base +2190..2194 ; Grapheme_Base +2195..2199 ; Grapheme_Base +219A..219B ; Grapheme_Base +219C..219F ; Grapheme_Base +21A0 ; Grapheme_Base +21A1..21A2 ; Grapheme_Base +21A3 ; Grapheme_Base +21A4..21A5 ; Grapheme_Base +21A6 ; Grapheme_Base +21A7..21AD ; Grapheme_Base +21AE ; Grapheme_Base +21AF..21CD ; Grapheme_Base +21CE..21CF ; Grapheme_Base +21D0..21D1 ; Grapheme_Base +21D2 ; Grapheme_Base +21D3 ; Grapheme_Base +21D4 ; Grapheme_Base +21D5..21F3 ; Grapheme_Base +21F4..22FF ; Grapheme_Base +2300..2307 ; Grapheme_Base +2308..230B ; Grapheme_Base +230C..231F ; Grapheme_Base +2320..2321 ; Grapheme_Base +2322..2328 ; Grapheme_Base +2329 ; Grapheme_Base +232A ; Grapheme_Base +232B..237B ; Grapheme_Base +237C ; Grapheme_Base +237D..239A ; Grapheme_Base +239B..23B3 ; Grapheme_Base +23B4..23DB ; Grapheme_Base +23DC..23E1 ; Grapheme_Base +23E2..23E7 ; Grapheme_Base +2400..2426 ; Grapheme_Base +2440..244A ; Grapheme_Base +2460..249B ; Grapheme_Base +249C..24E9 ; Grapheme_Base +24EA..24FF ; Grapheme_Base +2500..25B6 ; Grapheme_Base +25B7 ; Grapheme_Base +25B8..25C0 ; Grapheme_Base +25C1 ; Grapheme_Base +25C2..25F7 ; Grapheme_Base +25F8..25FF ; Grapheme_Base +2600..266E ; Grapheme_Base +266F ; Grapheme_Base +2670..269C ; Grapheme_Base +26A0..26B2 ; Grapheme_Base +2701..2704 ; Grapheme_Base +2706..2709 ; Grapheme_Base +270C..2727 ; Grapheme_Base +2729..274B ; Grapheme_Base +274D ; Grapheme_Base +274F..2752 ; Grapheme_Base +2756 ; Grapheme_Base +2758..275E ; Grapheme_Base +2761..2767 ; Grapheme_Base +2768 ; Grapheme_Base +2769 ; Grapheme_Base +276A ; Grapheme_Base +276B ; Grapheme_Base +276C ; Grapheme_Base +276D ; Grapheme_Base +276E ; Grapheme_Base +276F ; Grapheme_Base +2770 ; Grapheme_Base +2771 ; Grapheme_Base +2772 ; Grapheme_Base +2773 ; Grapheme_Base +2774 ; Grapheme_Base +2775 ; Grapheme_Base +2776..2793 ; Grapheme_Base +2794 ; Grapheme_Base +2798..27AF ; Grapheme_Base +27B1..27BE ; Grapheme_Base +27C0..27C4 ; Grapheme_Base +27C5 ; Grapheme_Base +27C6 ; Grapheme_Base +27C7..27CA ; Grapheme_Base +27D0..27E5 ; Grapheme_Base +27E6 ; Grapheme_Base +27E7 ; Grapheme_Base +27E8 ; Grapheme_Base +27E9 ; Grapheme_Base +27EA ; Grapheme_Base +27EB ; Grapheme_Base +27F0..27FF ; Grapheme_Base +2800..28FF ; Grapheme_Base +2900..2982 ; Grapheme_Base +2983 ; Grapheme_Base +2984 ; Grapheme_Base +2985 ; Grapheme_Base +2986 ; Grapheme_Base +2987 ; Grapheme_Base +2988 ; Grapheme_Base +2989 ; Grapheme_Base +298A ; Grapheme_Base +298B ; Grapheme_Base +298C ; Grapheme_Base +298D ; Grapheme_Base +298E ; Grapheme_Base +298F ; Grapheme_Base +2990 ; Grapheme_Base +2991 ; Grapheme_Base +2992 ; Grapheme_Base +2993 ; Grapheme_Base +2994 ; Grapheme_Base +2995 ; Grapheme_Base +2996 ; Grapheme_Base +2997 ; Grapheme_Base +2998 ; Grapheme_Base +2999..29D7 ; Grapheme_Base +29D8 ; Grapheme_Base +29D9 ; Grapheme_Base +29DA ; Grapheme_Base +29DB ; Grapheme_Base +29DC..29FB ; Grapheme_Base +29FC ; Grapheme_Base +29FD ; Grapheme_Base +29FE..2AFF ; Grapheme_Base +2B00..2B1A ; Grapheme_Base +2B20..2B23 ; Grapheme_Base +2C00..2C2E ; Grapheme_Base +2C30..2C5E ; Grapheme_Base +2C60..2C6C ; Grapheme_Base +2C74..2C77 ; Grapheme_Base +2C80..2CE4 ; Grapheme_Base +2CE5..2CEA ; Grapheme_Base +2CF9..2CFC ; Grapheme_Base +2CFD ; Grapheme_Base +2CFE..2CFF ; Grapheme_Base +2D00..2D25 ; Grapheme_Base +2D30..2D65 ; Grapheme_Base +2D6F ; Grapheme_Base +2D80..2D96 ; Grapheme_Base +2DA0..2DA6 ; Grapheme_Base +2DA8..2DAE ; Grapheme_Base +2DB0..2DB6 ; Grapheme_Base +2DB8..2DBE ; Grapheme_Base +2DC0..2DC6 ; Grapheme_Base +2DC8..2DCE ; Grapheme_Base +2DD0..2DD6 ; Grapheme_Base +2DD8..2DDE ; Grapheme_Base +2E00..2E01 ; Grapheme_Base +2E02 ; Grapheme_Base +2E03 ; Grapheme_Base +2E04 ; Grapheme_Base +2E05 ; Grapheme_Base +2E06..2E08 ; Grapheme_Base +2E09 ; Grapheme_Base +2E0A ; Grapheme_Base +2E0B ; Grapheme_Base +2E0C ; Grapheme_Base +2E0D ; Grapheme_Base +2E0E..2E16 ; Grapheme_Base +2E17 ; Grapheme_Base +2E1C ; Grapheme_Base +2E1D ; Grapheme_Base +2E80..2E99 ; Grapheme_Base +2E9B..2EF3 ; Grapheme_Base +2F00..2FD5 ; Grapheme_Base +2FF0..2FFB ; Grapheme_Base +3000 ; Grapheme_Base +3001..3003 ; Grapheme_Base +3004 ; Grapheme_Base +3005 ; Grapheme_Base +3006 ; Grapheme_Base +3007 ; Grapheme_Base +3008 ; Grapheme_Base +3009 ; Grapheme_Base +300A ; Grapheme_Base +300B ; Grapheme_Base +300C ; Grapheme_Base +300D ; Grapheme_Base +300E ; Grapheme_Base +300F ; Grapheme_Base +3010 ; Grapheme_Base +3011 ; Grapheme_Base +3012..3013 ; Grapheme_Base +3014 ; Grapheme_Base +3015 ; Grapheme_Base +3016 ; Grapheme_Base +3017 ; Grapheme_Base +3018 ; Grapheme_Base +3019 ; Grapheme_Base +301A ; Grapheme_Base +301B ; Grapheme_Base +301C ; Grapheme_Base +301D ; Grapheme_Base +301E..301F ; Grapheme_Base +3020 ; Grapheme_Base +3021..3029 ; Grapheme_Base +3030 ; Grapheme_Base +3031..3035 ; Grapheme_Base +3036..3037 ; Grapheme_Base +3038..303A ; Grapheme_Base +303B ; Grapheme_Base +303C ; Grapheme_Base +303D ; Grapheme_Base +303E..303F ; Grapheme_Base +3041..3096 ; Grapheme_Base +309B..309C ; Grapheme_Base +309D..309E ; Grapheme_Base +309F ; Grapheme_Base +30A0 ; Grapheme_Base +30A1..30FA ; Grapheme_Base +30FB ; Grapheme_Base +30FC..30FE ; Grapheme_Base +30FF ; Grapheme_Base +3105..312C ; Grapheme_Base +3131..318E ; Grapheme_Base +3190..3191 ; Grapheme_Base +3192..3195 ; Grapheme_Base +3196..319F ; Grapheme_Base +31A0..31B7 ; Grapheme_Base +31C0..31CF ; Grapheme_Base +31F0..31FF ; Grapheme_Base +3200..321E ; Grapheme_Base +3220..3229 ; Grapheme_Base +322A..3243 ; Grapheme_Base +3250 ; Grapheme_Base +3251..325F ; Grapheme_Base +3260..327F ; Grapheme_Base +3280..3289 ; Grapheme_Base +328A..32B0 ; Grapheme_Base +32B1..32BF ; Grapheme_Base +32C0..32FE ; Grapheme_Base +3300..33FF ; Grapheme_Base +3400..4DB5 ; Grapheme_Base +4DC0..4DFF ; Grapheme_Base +4E00..9FBB ; Grapheme_Base +A000..A014 ; Grapheme_Base +A015 ; Grapheme_Base +A016..A48C ; Grapheme_Base +A490..A4C6 ; Grapheme_Base +A700..A716 ; Grapheme_Base +A717..A71A ; Grapheme_Base +A720..A721 ; Grapheme_Base +A800..A801 ; Grapheme_Base +A802 ; Grapheme_Base +A803..A805 ; Grapheme_Base +A807..A80A ; Grapheme_Base +A80C..A822 ; Grapheme_Base +A823..A824 ; Grapheme_Base +A827 ; Grapheme_Base +A828..A82B ; Grapheme_Base +A840..A873 ; Grapheme_Base +A874..A877 ; Grapheme_Base +AC00..D7A3 ; Grapheme_Base +F900..FA2D ; Grapheme_Base +FA30..FA6A ; Grapheme_Base +FA70..FAD9 ; Grapheme_Base +FB00..FB06 ; Grapheme_Base +FB13..FB17 ; Grapheme_Base +FB1D ; Grapheme_Base +FB1F..FB28 ; Grapheme_Base +FB29 ; Grapheme_Base +FB2A..FB36 ; Grapheme_Base +FB38..FB3C ; Grapheme_Base +FB3E ; Grapheme_Base +FB40..FB41 ; Grapheme_Base +FB43..FB44 ; Grapheme_Base +FB46..FBB1 ; Grapheme_Base +FBD3..FD3D ; Grapheme_Base +FD3E ; Grapheme_Base +FD3F ; Grapheme_Base +FD50..FD8F ; Grapheme_Base +FD92..FDC7 ; Grapheme_Base +FDF0..FDFB ; Grapheme_Base +FDFC ; Grapheme_Base +FDFD ; Grapheme_Base +FE10..FE16 ; Grapheme_Base +FE17 ; Grapheme_Base +FE18 ; Grapheme_Base +FE19 ; Grapheme_Base +FE30 ; Grapheme_Base +FE31..FE32 ; Grapheme_Base +FE33..FE34 ; Grapheme_Base +FE35 ; Grapheme_Base +FE36 ; Grapheme_Base +FE37 ; Grapheme_Base +FE38 ; Grapheme_Base +FE39 ; Grapheme_Base +FE3A ; Grapheme_Base +FE3B ; Grapheme_Base +FE3C ; Grapheme_Base +FE3D ; Grapheme_Base +FE3E ; Grapheme_Base +FE3F ; Grapheme_Base +FE40 ; Grapheme_Base +FE41 ; Grapheme_Base +FE42 ; Grapheme_Base +FE43 ; Grapheme_Base +FE44 ; Grapheme_Base +FE45..FE46 ; Grapheme_Base +FE47 ; Grapheme_Base +FE48 ; Grapheme_Base +FE49..FE4C ; Grapheme_Base +FE4D..FE4F ; Grapheme_Base +FE50..FE52 ; Grapheme_Base +FE54..FE57 ; Grapheme_Base +FE58 ; Grapheme_Base +FE59 ; Grapheme_Base +FE5A ; Grapheme_Base +FE5B ; Grapheme_Base +FE5C ; Grapheme_Base +FE5D ; Grapheme_Base +FE5E ; Grapheme_Base +FE5F..FE61 ; Grapheme_Base +FE62 ; Grapheme_Base +FE63 ; Grapheme_Base +FE64..FE66 ; Grapheme_Base +FE68 ; Grapheme_Base +FE69 ; Grapheme_Base +FE6A..FE6B ; Grapheme_Base +FE70..FE74 ; Grapheme_Base +FE76..FEFC ; Grapheme_Base +FF01..FF03 ; Grapheme_Base +FF04 ; Grapheme_Base +FF05..FF07 ; Grapheme_Base +FF08 ; Grapheme_Base +FF09 ; Grapheme_Base +FF0A ; Grapheme_Base +FF0B ; Grapheme_Base +FF0C ; Grapheme_Base +FF0D ; Grapheme_Base +FF0E..FF0F ; Grapheme_Base +FF10..FF19 ; Grapheme_Base +FF1A..FF1B ; Grapheme_Base +FF1C..FF1E ; Grapheme_Base +FF1F..FF20 ; Grapheme_Base +FF21..FF3A ; Grapheme_Base +FF3B ; Grapheme_Base +FF3C ; Grapheme_Base +FF3D ; Grapheme_Base +FF3E ; Grapheme_Base +FF3F ; Grapheme_Base +FF40 ; Grapheme_Base +FF41..FF5A ; Grapheme_Base +FF5B ; Grapheme_Base +FF5C ; Grapheme_Base +FF5D ; Grapheme_Base +FF5E ; Grapheme_Base +FF5F ; Grapheme_Base +FF60 ; Grapheme_Base +FF61 ; Grapheme_Base +FF62 ; Grapheme_Base +FF63 ; Grapheme_Base +FF64..FF65 ; Grapheme_Base +FF66..FF6F ; Grapheme_Base +FF70 ; Grapheme_Base +FF71..FF9D ; Grapheme_Base +FF9E..FF9F ; Grapheme_Base +FFA0..FFBE ; Grapheme_Base +FFC2..FFC7 ; Grapheme_Base +FFCA..FFCF ; Grapheme_Base +FFD2..FFD7 ; Grapheme_Base +FFDA..FFDC ; Grapheme_Base +FFE0..FFE1 ; Grapheme_Base +FFE2 ; Grapheme_Base +FFE3 ; Grapheme_Base +FFE4 ; Grapheme_Base +FFE5..FFE6 ; Grapheme_Base +FFE8 ; Grapheme_Base +FFE9..FFEC ; Grapheme_Base +FFED..FFEE ; Grapheme_Base +FFFC..FFFD ; Grapheme_Base +10000..1000B ; Grapheme_Base +1000D..10026 ; Grapheme_Base +10028..1003A ; Grapheme_Base +1003C..1003D ; Grapheme_Base +1003F..1004D ; Grapheme_Base +10050..1005D ; Grapheme_Base +10080..100FA ; Grapheme_Base +10100..10101 ; Grapheme_Base +10102 ; Grapheme_Base +10107..10133 ; Grapheme_Base +10137..1013F ; Grapheme_Base +10140..10174 ; Grapheme_Base +10175..10178 ; Grapheme_Base +10179..10189 ; Grapheme_Base +1018A ; Grapheme_Base +10300..1031E ; Grapheme_Base +10320..10323 ; Grapheme_Base +10330..10340 ; Grapheme_Base +10341 ; Grapheme_Base +10342..10349 ; Grapheme_Base +1034A ; Grapheme_Base +10380..1039D ; Grapheme_Base +1039F ; Grapheme_Base +103A0..103C3 ; Grapheme_Base +103C8..103CF ; Grapheme_Base +103D0 ; Grapheme_Base +103D1..103D5 ; Grapheme_Base +10400..1044F ; Grapheme_Base +10450..1049D ; Grapheme_Base +104A0..104A9 ; Grapheme_Base +10800..10805 ; Grapheme_Base +10808 ; Grapheme_Base +1080A..10835 ; Grapheme_Base +10837..10838 ; Grapheme_Base +1083C ; Grapheme_Base +1083F ; Grapheme_Base +10900..10915 ; Grapheme_Base +10916..10919 ; Grapheme_Base +1091F ; Grapheme_Base +10A00 ; Grapheme_Base +10A10..10A13 ; Grapheme_Base +10A15..10A17 ; Grapheme_Base +10A19..10A33 ; Grapheme_Base +10A40..10A47 ; Grapheme_Base +10A50..10A58 ; Grapheme_Base +12000..1236E ; Grapheme_Base +12400..12462 ; Grapheme_Base +12470..12473 ; Grapheme_Base +1D000..1D0F5 ; Grapheme_Base +1D100..1D126 ; Grapheme_Base +1D12A..1D164 ; Grapheme_Base +1D166 ; Grapheme_Base +1D16A..1D16C ; Grapheme_Base +1D16D ; Grapheme_Base +1D183..1D184 ; Grapheme_Base +1D18C..1D1A9 ; Grapheme_Base +1D1AE..1D1DD ; Grapheme_Base +1D200..1D241 ; Grapheme_Base +1D245 ; Grapheme_Base +1D300..1D356 ; Grapheme_Base +1D360..1D371 ; Grapheme_Base +1D400..1D454 ; Grapheme_Base +1D456..1D49C ; Grapheme_Base +1D49E..1D49F ; Grapheme_Base +1D4A2 ; Grapheme_Base +1D4A5..1D4A6 ; Grapheme_Base +1D4A9..1D4AC ; Grapheme_Base +1D4AE..1D4B9 ; Grapheme_Base +1D4BB ; Grapheme_Base +1D4BD..1D4C3 ; Grapheme_Base +1D4C5..1D505 ; Grapheme_Base +1D507..1D50A ; Grapheme_Base +1D50D..1D514 ; Grapheme_Base +1D516..1D51C ; Grapheme_Base +1D51E..1D539 ; Grapheme_Base +1D53B..1D53E ; Grapheme_Base +1D540..1D544 ; Grapheme_Base +1D546 ; Grapheme_Base +1D54A..1D550 ; Grapheme_Base +1D552..1D6A5 ; Grapheme_Base +1D6A8..1D6C0 ; Grapheme_Base +1D6C1 ; Grapheme_Base +1D6C2..1D6DA ; Grapheme_Base +1D6DB ; Grapheme_Base +1D6DC..1D6FA ; Grapheme_Base +1D6FB ; Grapheme_Base +1D6FC..1D714 ; Grapheme_Base +1D715 ; Grapheme_Base +1D716..1D734 ; Grapheme_Base +1D735 ; Grapheme_Base +1D736..1D74E ; Grapheme_Base +1D74F ; Grapheme_Base +1D750..1D76E ; Grapheme_Base +1D76F ; Grapheme_Base +1D770..1D788 ; Grapheme_Base +1D789 ; Grapheme_Base +1D78A..1D7A8 ; Grapheme_Base +1D7A9 ; Grapheme_Base +1D7AA..1D7C2 ; Grapheme_Base +1D7C3 ; Grapheme_Base +1D7C4..1D7CB ; Grapheme_Base +1D7CE..1D7FF ; Grapheme_Base +20000..2A6D6 ; Grapheme_Base +2F800..2FA1D ; Grapheme_Base + +# Total code points: 97975 + +# ================================================ + +# Derived Property: Grapheme_Link (deprecated) +# Generated from: Canonical_Combining_Class=Virama +# Use Canonical_Combining_Class=Virama directly instead + +094D ; Grapheme_Link +09CD ; Grapheme_Link +0A4D ; Grapheme_Link +0ACD ; Grapheme_Link +0B4D ; Grapheme_Link +0BCD ; Grapheme_Link +0C4D ; Grapheme_Link +0CCD ; Grapheme_Link +0D4D ; Grapheme_Link +0DCA ; Grapheme_Link +0E3A ; Grapheme_Link +0F84 ; Grapheme_Link +1039 ; Grapheme_Link +1714 ; Grapheme_Link +1734 ; Grapheme_Link +17D2 ; Grapheme_Link +1B44 ; Grapheme_Link +A806 ; Grapheme_Link +10A3F ; Grapheme_Link + +# Total code points: 19 + +# EOF diff --git a/icuSources/data/unidata/base_unidata/DerivedNumericValues.txt b/icuSources/data/unidata/base_unidata/DerivedNumericValues.txt new file mode 100644 index 00000000..bec3d54c --- /dev/null +++ b/icuSources/data/unidata/base_unidata/DerivedNumericValues.txt @@ -0,0 +1,1423 @@ +# DerivedNumericValues-5.0.0.txt +# Date: 2006-02-27, 23:41:38 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Numeric Values (from UnicodeData.txt, field 6/7/8) +# WARNING: Certain valus, such as 0.16666667, are repeating fractions +# Although they are only printed with a limited number of decimal places +# in this file, they should be expressed to the limits of the precision +# available when used. + +# ================================================ + +0F33 ; -0.5 # No TIBETAN DIGIT HALF ZERO + +# Total code points: 1 + +# ================================================ + +0030 ; 0.0 # Nd DIGIT ZERO +0660 ; 0.0 # Nd ARABIC-INDIC DIGIT ZERO +06F0 ; 0.0 # Nd EXTENDED ARABIC-INDIC DIGIT ZERO +07C0 ; 0.0 # Nd NKO DIGIT ZERO +0966 ; 0.0 # Nd DEVANAGARI DIGIT ZERO +09E6 ; 0.0 # Nd BENGALI DIGIT ZERO +0A66 ; 0.0 # Nd GURMUKHI DIGIT ZERO +0AE6 ; 0.0 # Nd GUJARATI DIGIT ZERO +0B66 ; 0.0 # Nd ORIYA DIGIT ZERO +0BE6 ; 0.0 # Nd TAMIL DIGIT ZERO +0C66 ; 0.0 # Nd TELUGU DIGIT ZERO +0CE6 ; 0.0 # Nd KANNADA DIGIT ZERO +0D66 ; 0.0 # Nd MALAYALAM DIGIT ZERO +0E50 ; 0.0 # Nd THAI DIGIT ZERO +0ED0 ; 0.0 # Nd LAO DIGIT ZERO +0F20 ; 0.0 # Nd TIBETAN DIGIT ZERO +1040 ; 0.0 # Nd MYANMAR DIGIT ZERO +17E0 ; 0.0 # Nd KHMER DIGIT ZERO +17F0 ; 0.0 # No KHMER SYMBOL LEK ATTAK SON +1810 ; 0.0 # Nd MONGOLIAN DIGIT ZERO +1946 ; 0.0 # Nd LIMBU DIGIT ZERO +19D0 ; 0.0 # Nd NEW TAI LUE DIGIT ZERO +1B50 ; 0.0 # Nd BALINESE DIGIT ZERO +2070 ; 0.0 # No SUPERSCRIPT ZERO +2080 ; 0.0 # No SUBSCRIPT ZERO +24EA ; 0.0 # No CIRCLED DIGIT ZERO +24FF ; 0.0 # No NEGATIVE CIRCLED DIGIT ZERO +3007 ; 0.0 # Nl IDEOGRAPHIC NUMBER ZERO +96F6 ; 0.0 # Lo CJK UNIFIED IDEOGRAPH-96F6 +FF10 ; 0.0 # Nd FULLWIDTH DIGIT ZERO +1018A ; 0.0 # No GREEK ZERO SIGN +104A0 ; 0.0 # Nd OSMANYA DIGIT ZERO +1D7CE ; 0.0 # Nd MATHEMATICAL BOLD DIGIT ZERO +1D7D8 ; 0.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO +1D7E2 ; 0.0 # Nd MATHEMATICAL SANS-SERIF DIGIT ZERO +1D7EC ; 0.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO +1D7F6 ; 0.0 # Nd MATHEMATICAL MONOSPACE DIGIT ZERO + +# Total code points: 37 + +# ================================================ + +215B ; 0.125 # No VULGAR FRACTION ONE EIGHTH +1245F ; 0.125 # Nl CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH + +# Total code points: 2 + +# ================================================ + +2159 ; 0.16666667 # No VULGAR FRACTION ONE SIXTH +12461 ; 0.16666667 # Nl CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH + +# Total code points: 2 + +# ================================================ + +2155 ; 0.2 # No VULGAR FRACTION ONE FIFTH + +# Total code points: 1 + +# ================================================ + +00BC ; 0.25 # No VULGAR FRACTION ONE QUARTER +10140 ; 0.25 # Nl GREEK ACROPHONIC ATTIC ONE QUARTER +12460 ; 0.25 # Nl CUNEIFORM NUMERIC SIGN ONE QUARTER ASH +12462 ; 0.25 # Nl CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER + +# Total code points: 4 + +# ================================================ + +2153 ; 0.33333333 # No VULGAR FRACTION ONE THIRD +1245A ; 0.33333333 # Nl CUNEIFORM NUMERIC SIGN ONE THIRD DISH +1245D ; 0.33333333 # Nl CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A + +# Total code points: 3 + +# ================================================ + +215C ; 0.375 # No VULGAR FRACTION THREE EIGHTHS + +# Total code points: 1 + +# ================================================ + +2156 ; 0.4 # No VULGAR FRACTION TWO FIFTHS + +# Total code points: 1 + +# ================================================ + +00BD ; 0.5 # No VULGAR FRACTION ONE HALF +0F2A ; 0.5 # No TIBETAN DIGIT HALF ONE +2CFD ; 0.5 # No COPTIC FRACTION ONE HALF +10141 ; 0.5 # Nl GREEK ACROPHONIC ATTIC ONE HALF +10175..10176 ; 0.5 # No [2] GREEK ONE HALF SIGN..GREEK ONE HALF SIGN ALTERNATE FORM + +# Total code points: 6 + +# ================================================ + +2157 ; 0.6 # No VULGAR FRACTION THREE FIFTHS + +# Total code points: 1 + +# ================================================ + +215D ; 0.625 # No VULGAR FRACTION FIVE EIGHTHS + +# Total code points: 1 + +# ================================================ + +2154 ; 0.66666667 # No VULGAR FRACTION TWO THIRDS +10177 ; 0.66666667 # No GREEK TWO THIRDS SIGN +1245B ; 0.66666667 # Nl CUNEIFORM NUMERIC SIGN TWO THIRDS DISH +1245E ; 0.66666667 # Nl CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A + +# Total code points: 4 + +# ================================================ + +00BE ; 0.75 # No VULGAR FRACTION THREE QUARTERS +10178 ; 0.75 # No GREEK THREE QUARTERS SIGN + +# Total code points: 2 + +# ================================================ + +2158 ; 0.8 # No VULGAR FRACTION FOUR FIFTHS + +# Total code points: 1 + +# ================================================ + +215A ; 0.83333333 # No VULGAR FRACTION FIVE SIXTHS +1245C ; 0.83333333 # Nl CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH + +# Total code points: 2 + +# ================================================ + +215E ; 0.875 # No VULGAR FRACTION SEVEN EIGHTHS + +# Total code points: 1 + +# ================================================ + +0031 ; 1.0 # Nd DIGIT ONE +00B9 ; 1.0 # No SUPERSCRIPT ONE +0661 ; 1.0 # Nd ARABIC-INDIC DIGIT ONE +06F1 ; 1.0 # Nd EXTENDED ARABIC-INDIC DIGIT ONE +07C1 ; 1.0 # Nd NKO DIGIT ONE +0967 ; 1.0 # Nd DEVANAGARI DIGIT ONE +09E7 ; 1.0 # Nd BENGALI DIGIT ONE +09F4 ; 1.0 # No BENGALI CURRENCY NUMERATOR ONE +0A67 ; 1.0 # Nd GURMUKHI DIGIT ONE +0AE7 ; 1.0 # Nd GUJARATI DIGIT ONE +0B67 ; 1.0 # Nd ORIYA DIGIT ONE +0BE7 ; 1.0 # Nd TAMIL DIGIT ONE +0C67 ; 1.0 # Nd TELUGU DIGIT ONE +0CE7 ; 1.0 # Nd KANNADA DIGIT ONE +0D67 ; 1.0 # Nd MALAYALAM DIGIT ONE +0E51 ; 1.0 # Nd THAI DIGIT ONE +0ED1 ; 1.0 # Nd LAO DIGIT ONE +0F21 ; 1.0 # Nd TIBETAN DIGIT ONE +1041 ; 1.0 # Nd MYANMAR DIGIT ONE +1369 ; 1.0 # No ETHIOPIC DIGIT ONE +17E1 ; 1.0 # Nd KHMER DIGIT ONE +17F1 ; 1.0 # No KHMER SYMBOL LEK ATTAK MUOY +1811 ; 1.0 # Nd MONGOLIAN DIGIT ONE +1947 ; 1.0 # Nd LIMBU DIGIT ONE +19D1 ; 1.0 # Nd NEW TAI LUE DIGIT ONE +1B51 ; 1.0 # Nd BALINESE DIGIT ONE +2081 ; 1.0 # No SUBSCRIPT ONE +215F ; 1.0 # No FRACTION NUMERATOR ONE +2160 ; 1.0 # Nl ROMAN NUMERAL ONE +2170 ; 1.0 # Nl SMALL ROMAN NUMERAL ONE +2460 ; 1.0 # No CIRCLED DIGIT ONE +2474 ; 1.0 # No PARENTHESIZED DIGIT ONE +2488 ; 1.0 # No DIGIT ONE FULL STOP +24F5 ; 1.0 # No DOUBLE CIRCLED DIGIT ONE +2776 ; 1.0 # No DINGBAT NEGATIVE CIRCLED DIGIT ONE +2780 ; 1.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT ONE +278A ; 1.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE +3021 ; 1.0 # Nl HANGZHOU NUMERAL ONE +3192 ; 1.0 # No IDEOGRAPHIC ANNOTATION ONE MARK +3220 ; 1.0 # No PARENTHESIZED IDEOGRAPH ONE +3280 ; 1.0 # No CIRCLED IDEOGRAPH ONE +4E00 ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-4E00 +58F1 ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-58F1 +58F9 ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-58F9 +5E7A ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-5E7A +5F0C ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-5F0C +FF11 ; 1.0 # Nd FULLWIDTH DIGIT ONE +10107 ; 1.0 # No AEGEAN NUMBER ONE +10142 ; 1.0 # Nl GREEK ACROPHONIC ATTIC ONE DRACHMA +10158..1015A ; 1.0 # Nl [3] GREEK ACROPHONIC HERAEUM ONE PLETHRON..GREEK ACROPHONIC HERMIONIAN ONE +10320 ; 1.0 # No OLD ITALIC NUMERAL ONE +103D1 ; 1.0 # Nl OLD PERSIAN NUMBER ONE +104A1 ; 1.0 # Nd OSMANYA DIGIT ONE +10916 ; 1.0 # No PHOENICIAN NUMBER ONE +10A40 ; 1.0 # No KHAROSHTHI DIGIT ONE +12415 ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE GESH2 +1241E ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE GESHU +1242C ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE SHARU +12434 ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE BURU +1244F ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE BAN2 +12458 ; 1.0 # Nl CUNEIFORM NUMERIC SIGN ONE ESHE3 +1D360 ; 1.0 # No COUNTING ROD UNIT DIGIT ONE +1D7CF ; 1.0 # Nd MATHEMATICAL BOLD DIGIT ONE +1D7D9 ; 1.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ONE +1D7E3 ; 1.0 # Nd MATHEMATICAL SANS-SERIF DIGIT ONE +1D7ED ; 1.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ONE +1D7F7 ; 1.0 # Nd MATHEMATICAL MONOSPACE DIGIT ONE +2092A ; 1.0 # Lo CJK UNIFIED IDEOGRAPH-2092A + +# Total code points: 70 + +# ================================================ + +0F2B ; 1.5 # No TIBETAN DIGIT HALF TWO + +# Total code points: 1 + +# ================================================ + +0032 ; 2.0 # Nd DIGIT TWO +00B2 ; 2.0 # No SUPERSCRIPT TWO +0662 ; 2.0 # Nd ARABIC-INDIC DIGIT TWO +06F2 ; 2.0 # Nd EXTENDED ARABIC-INDIC DIGIT TWO +07C2 ; 2.0 # Nd NKO DIGIT TWO +0968 ; 2.0 # Nd DEVANAGARI DIGIT TWO +09E8 ; 2.0 # Nd BENGALI DIGIT TWO +09F5 ; 2.0 # No BENGALI CURRENCY NUMERATOR TWO +0A68 ; 2.0 # Nd GURMUKHI DIGIT TWO +0AE8 ; 2.0 # Nd GUJARATI DIGIT TWO +0B68 ; 2.0 # Nd ORIYA DIGIT TWO +0BE8 ; 2.0 # Nd TAMIL DIGIT TWO +0C68 ; 2.0 # Nd TELUGU DIGIT TWO +0CE8 ; 2.0 # Nd KANNADA DIGIT TWO +0D68 ; 2.0 # Nd MALAYALAM DIGIT TWO +0E52 ; 2.0 # Nd THAI DIGIT TWO +0ED2 ; 2.0 # Nd LAO DIGIT TWO +0F22 ; 2.0 # Nd TIBETAN DIGIT TWO +1042 ; 2.0 # Nd MYANMAR DIGIT TWO +136A ; 2.0 # No ETHIOPIC DIGIT TWO +17E2 ; 2.0 # Nd KHMER DIGIT TWO +17F2 ; 2.0 # No KHMER SYMBOL LEK ATTAK PII +1812 ; 2.0 # Nd MONGOLIAN DIGIT TWO +1948 ; 2.0 # Nd LIMBU DIGIT TWO +19D2 ; 2.0 # Nd NEW TAI LUE DIGIT TWO +1B52 ; 2.0 # Nd BALINESE DIGIT TWO +2082 ; 2.0 # No SUBSCRIPT TWO +2161 ; 2.0 # Nl ROMAN NUMERAL TWO +2171 ; 2.0 # Nl SMALL ROMAN NUMERAL TWO +2461 ; 2.0 # No CIRCLED DIGIT TWO +2475 ; 2.0 # No PARENTHESIZED DIGIT TWO +2489 ; 2.0 # No DIGIT TWO FULL STOP +24F6 ; 2.0 # No DOUBLE CIRCLED DIGIT TWO +2777 ; 2.0 # No DINGBAT NEGATIVE CIRCLED DIGIT TWO +2781 ; 2.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT TWO +278B ; 2.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO +3022 ; 2.0 # Nl HANGZHOU NUMERAL TWO +3193 ; 2.0 # No IDEOGRAPHIC ANNOTATION TWO MARK +3221 ; 2.0 # No PARENTHESIZED IDEOGRAPH TWO +3281 ; 2.0 # No CIRCLED IDEOGRAPH TWO +3483 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-3483 +4E8C ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-4E8C +5169 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-5169 +5F0D ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-5F0D +5F10 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-5F10 +8CAE ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-8CAE +8CB3 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-8CB3 +8D30 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-8D30 +FF12 ; 2.0 # Nd FULLWIDTH DIGIT TWO +10108 ; 2.0 # No AEGEAN NUMBER TWO +1015B..1015E ; 2.0 # Nl [4] GREEK ACROPHONIC EPIDAUREAN TWO..GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS +103D2 ; 2.0 # Nl OLD PERSIAN NUMBER TWO +104A2 ; 2.0 # Nd OSMANYA DIGIT TWO +10A41 ; 2.0 # No KHAROSHTHI DIGIT TWO +12400 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO ASH +12416 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO GESH2 +1241F ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO GESHU +12423 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO SHAR2 +1242D ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO SHARU +12435 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO BURU +1244A ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO ASH TENU +12450 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO BAN2 +12459 ; 2.0 # Nl CUNEIFORM NUMERIC SIGN TWO ESHE3 +1D361 ; 2.0 # No COUNTING ROD UNIT DIGIT TWO +1D7D0 ; 2.0 # Nd MATHEMATICAL BOLD DIGIT TWO +1D7DA ; 2.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT TWO +1D7E4 ; 2.0 # Nd MATHEMATICAL SANS-SERIF DIGIT TWO +1D7EE ; 2.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT TWO +1D7F8 ; 2.0 # Nd MATHEMATICAL MONOSPACE DIGIT TWO +22390 ; 2.0 # Lo CJK UNIFIED IDEOGRAPH-22390 + +# Total code points: 73 + +# ================================================ + +0F2C ; 2.5 # No TIBETAN DIGIT HALF THREE + +# Total code points: 1 + +# ================================================ + +0033 ; 3.0 # Nd DIGIT THREE +00B3 ; 3.0 # No SUPERSCRIPT THREE +0663 ; 3.0 # Nd ARABIC-INDIC DIGIT THREE +06F3 ; 3.0 # Nd EXTENDED ARABIC-INDIC DIGIT THREE +07C3 ; 3.0 # Nd NKO DIGIT THREE +0969 ; 3.0 # Nd DEVANAGARI DIGIT THREE +09E9 ; 3.0 # Nd BENGALI DIGIT THREE +09F6 ; 3.0 # No BENGALI CURRENCY NUMERATOR THREE +0A69 ; 3.0 # Nd GURMUKHI DIGIT THREE +0AE9 ; 3.0 # Nd GUJARATI DIGIT THREE +0B69 ; 3.0 # Nd ORIYA DIGIT THREE +0BE9 ; 3.0 # Nd TAMIL DIGIT THREE +0C69 ; 3.0 # Nd TELUGU DIGIT THREE +0CE9 ; 3.0 # Nd KANNADA DIGIT THREE +0D69 ; 3.0 # Nd MALAYALAM DIGIT THREE +0E53 ; 3.0 # Nd THAI DIGIT THREE +0ED3 ; 3.0 # Nd LAO DIGIT THREE +0F23 ; 3.0 # Nd TIBETAN DIGIT THREE +1043 ; 3.0 # Nd MYANMAR DIGIT THREE +136B ; 3.0 # No ETHIOPIC DIGIT THREE +17E3 ; 3.0 # Nd KHMER DIGIT THREE +17F3 ; 3.0 # No KHMER SYMBOL LEK ATTAK BEI +1813 ; 3.0 # Nd MONGOLIAN DIGIT THREE +1949 ; 3.0 # Nd LIMBU DIGIT THREE +19D3 ; 3.0 # Nd NEW TAI LUE DIGIT THREE +1B53 ; 3.0 # Nd BALINESE DIGIT THREE +2083 ; 3.0 # No SUBSCRIPT THREE +2162 ; 3.0 # Nl ROMAN NUMERAL THREE +2172 ; 3.0 # Nl SMALL ROMAN NUMERAL THREE +2462 ; 3.0 # No CIRCLED DIGIT THREE +2476 ; 3.0 # No PARENTHESIZED DIGIT THREE +248A ; 3.0 # No DIGIT THREE FULL STOP +24F7 ; 3.0 # No DOUBLE CIRCLED DIGIT THREE +2778 ; 3.0 # No DINGBAT NEGATIVE CIRCLED DIGIT THREE +2782 ; 3.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT THREE +278C ; 3.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE +3023 ; 3.0 # Nl HANGZHOU NUMERAL THREE +3194 ; 3.0 # No IDEOGRAPHIC ANNOTATION THREE MARK +3222 ; 3.0 # No PARENTHESIZED IDEOGRAPH THREE +3282 ; 3.0 # No CIRCLED IDEOGRAPH THREE +4E09 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-4E09 +4EE8 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-4EE8 +53C1..53C4 ; 3.0 # Lo [4] CJK UNIFIED IDEOGRAPH-53C1..CJK UNIFIED IDEOGRAPH-53C4 +5F0E ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-5F0E +FF13 ; 3.0 # Nd FULLWIDTH DIGIT THREE +10109 ; 3.0 # No AEGEAN NUMBER THREE +104A3 ; 3.0 # Nd OSMANYA DIGIT THREE +10A42 ; 3.0 # No KHAROSHTHI DIGIT THREE +12401 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE ASH +12408 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE DISH +12417 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE GESH2 +12420 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE GESHU +12424..12425 ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE SHAR2..CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM +1242E..1242F ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE SHARU..CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM +12436..12437 ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE BURU..CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM +1243A..1243B ; 3.0 # Nl [2] CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16..CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21 +1244B ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE ASH TENU +12451 ; 3.0 # Nl CUNEIFORM NUMERIC SIGN THREE BAN2 +1D362 ; 3.0 # No COUNTING ROD UNIT DIGIT THREE +1D7D1 ; 3.0 # Nd MATHEMATICAL BOLD DIGIT THREE +1D7DB ; 3.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT THREE +1D7E5 ; 3.0 # Nd MATHEMATICAL SANS-SERIF DIGIT THREE +1D7EF ; 3.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT THREE +1D7F9 ; 3.0 # Nd MATHEMATICAL MONOSPACE DIGIT THREE +20AFD ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-20AFD +20B19 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-20B19 +22998 ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-22998 +23B1B ; 3.0 # Lo CJK UNIFIED IDEOGRAPH-23B1B + +# Total code points: 75 + +# ================================================ + +0F2D ; 3.5 # No TIBETAN DIGIT HALF FOUR + +# Total code points: 1 + +# ================================================ + +0034 ; 4.0 # Nd DIGIT FOUR +0664 ; 4.0 # Nd ARABIC-INDIC DIGIT FOUR +06F4 ; 4.0 # Nd EXTENDED ARABIC-INDIC DIGIT FOUR +07C4 ; 4.0 # Nd NKO DIGIT FOUR +096A ; 4.0 # Nd DEVANAGARI DIGIT FOUR +09EA ; 4.0 # Nd BENGALI DIGIT FOUR +09F7 ; 4.0 # No BENGALI CURRENCY NUMERATOR FOUR +0A6A ; 4.0 # Nd GURMUKHI DIGIT FOUR +0AEA ; 4.0 # Nd GUJARATI DIGIT FOUR +0B6A ; 4.0 # Nd ORIYA DIGIT FOUR +0BEA ; 4.0 # Nd TAMIL DIGIT FOUR +0C6A ; 4.0 # Nd TELUGU DIGIT FOUR +0CEA ; 4.0 # Nd KANNADA DIGIT FOUR +0D6A ; 4.0 # Nd MALAYALAM DIGIT FOUR +0E54 ; 4.0 # Nd THAI DIGIT FOUR +0ED4 ; 4.0 # Nd LAO DIGIT FOUR +0F24 ; 4.0 # Nd TIBETAN DIGIT FOUR +1044 ; 4.0 # Nd MYANMAR DIGIT FOUR +136C ; 4.0 # No ETHIOPIC DIGIT FOUR +17E4 ; 4.0 # Nd KHMER DIGIT FOUR +17F4 ; 4.0 # No KHMER SYMBOL LEK ATTAK BUON +1814 ; 4.0 # Nd MONGOLIAN DIGIT FOUR +194A ; 4.0 # Nd LIMBU DIGIT FOUR +19D4 ; 4.0 # Nd NEW TAI LUE DIGIT FOUR +1B54 ; 4.0 # Nd BALINESE DIGIT FOUR +2074 ; 4.0 # No SUPERSCRIPT FOUR +2084 ; 4.0 # No SUBSCRIPT FOUR +2163 ; 4.0 # Nl ROMAN NUMERAL FOUR +2173 ; 4.0 # Nl SMALL ROMAN NUMERAL FOUR +2463 ; 4.0 # No CIRCLED DIGIT FOUR +2477 ; 4.0 # No PARENTHESIZED DIGIT FOUR +248B ; 4.0 # No DIGIT FOUR FULL STOP +24F8 ; 4.0 # No DOUBLE CIRCLED DIGIT FOUR +2779 ; 4.0 # No DINGBAT NEGATIVE CIRCLED DIGIT FOUR +2783 ; 4.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT FOUR +278D ; 4.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR +3024 ; 4.0 # Nl HANGZHOU NUMERAL FOUR +3195 ; 4.0 # No IDEOGRAPHIC ANNOTATION FOUR MARK +3223 ; 4.0 # No PARENTHESIZED IDEOGRAPH FOUR +3283 ; 4.0 # No CIRCLED IDEOGRAPH FOUR +4E96 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-4E96 +56DB ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-56DB +8086 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-8086 +FF14 ; 4.0 # Nd FULLWIDTH DIGIT FOUR +1010A ; 4.0 # No AEGEAN NUMBER FOUR +104A4 ; 4.0 # Nd OSMANYA DIGIT FOUR +10A43 ; 4.0 # No KHAROSHTHI DIGIT FOUR +12402 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR ASH +12409 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR DISH +1240F ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR U +12418 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR GESH2 +12421 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR GESHU +12426 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR SHAR2 +12430 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR SHARU +12438 ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR BURU +1243C..1243F ; 4.0 # Nl [4] CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU..CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B +1244C ; 4.0 # Nl CUNEIFORM NUMERIC SIGN FOUR ASH TENU +12452..12453 ; 4.0 # Nl [2] CUNEIFORM NUMERIC SIGN FOUR BAN2..CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM +1D363 ; 4.0 # No COUNTING ROD UNIT DIGIT FOUR +1D7D2 ; 4.0 # Nd MATHEMATICAL BOLD DIGIT FOUR +1D7DC ; 4.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR +1D7E6 ; 4.0 # Nd MATHEMATICAL SANS-SERIF DIGIT FOUR +1D7F0 ; 4.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR +1D7FA ; 4.0 # Nd MATHEMATICAL MONOSPACE DIGIT FOUR +20064 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-20064 +200E2 ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-200E2 +2626D ; 4.0 # Lo CJK UNIFIED IDEOGRAPH-2626D + +# Total code points: 71 + +# ================================================ + +0F2E ; 4.5 # No TIBETAN DIGIT HALF FIVE + +# Total code points: 1 + +# ================================================ + +0035 ; 5.0 # Nd DIGIT FIVE +0665 ; 5.0 # Nd ARABIC-INDIC DIGIT FIVE +06F5 ; 5.0 # Nd EXTENDED ARABIC-INDIC DIGIT FIVE +07C5 ; 5.0 # Nd NKO DIGIT FIVE +096B ; 5.0 # Nd DEVANAGARI DIGIT FIVE +09EB ; 5.0 # Nd BENGALI DIGIT FIVE +0A6B ; 5.0 # Nd GURMUKHI DIGIT FIVE +0AEB ; 5.0 # Nd GUJARATI DIGIT FIVE +0B6B ; 5.0 # Nd ORIYA DIGIT FIVE +0BEB ; 5.0 # Nd TAMIL DIGIT FIVE +0C6B ; 5.0 # Nd TELUGU DIGIT FIVE +0CEB ; 5.0 # Nd KANNADA DIGIT FIVE +0D6B ; 5.0 # Nd MALAYALAM DIGIT FIVE +0E55 ; 5.0 # Nd THAI DIGIT FIVE +0ED5 ; 5.0 # Nd LAO DIGIT FIVE +0F25 ; 5.0 # Nd TIBETAN DIGIT FIVE +1045 ; 5.0 # Nd MYANMAR DIGIT FIVE +136D ; 5.0 # No ETHIOPIC DIGIT FIVE +17E5 ; 5.0 # Nd KHMER DIGIT FIVE +17F5 ; 5.0 # No KHMER SYMBOL LEK ATTAK PRAM +1815 ; 5.0 # Nd MONGOLIAN DIGIT FIVE +194B ; 5.0 # Nd LIMBU DIGIT FIVE +19D5 ; 5.0 # Nd NEW TAI LUE DIGIT FIVE +1B55 ; 5.0 # Nd BALINESE DIGIT FIVE +2075 ; 5.0 # No SUPERSCRIPT FIVE +2085 ; 5.0 # No SUBSCRIPT FIVE +2164 ; 5.0 # Nl ROMAN NUMERAL FIVE +2174 ; 5.0 # Nl SMALL ROMAN NUMERAL FIVE +2464 ; 5.0 # No CIRCLED DIGIT FIVE +2478 ; 5.0 # No PARENTHESIZED DIGIT FIVE +248C ; 5.0 # No DIGIT FIVE FULL STOP +24F9 ; 5.0 # No DOUBLE CIRCLED DIGIT FIVE +277A ; 5.0 # No DINGBAT NEGATIVE CIRCLED DIGIT FIVE +2784 ; 5.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT FIVE +278E ; 5.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE +3025 ; 5.0 # Nl HANGZHOU NUMERAL FIVE +3224 ; 5.0 # No PARENTHESIZED IDEOGRAPH FIVE +3284 ; 5.0 # No CIRCLED IDEOGRAPH FIVE +3405 ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-3405 +382A ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-382A +4E94 ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-4E94 +4F0D ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-4F0D +FF15 ; 5.0 # Nd FULLWIDTH DIGIT FIVE +1010B ; 5.0 # No AEGEAN NUMBER FIVE +10143 ; 5.0 # Nl GREEK ACROPHONIC ATTIC FIVE +10148 ; 5.0 # Nl GREEK ACROPHONIC ATTIC FIVE TALENTS +1014F ; 5.0 # Nl GREEK ACROPHONIC ATTIC FIVE STATERS +1015F ; 5.0 # Nl GREEK ACROPHONIC TROEZENIAN FIVE +10173 ; 5.0 # Nl GREEK ACROPHONIC DELPHIC FIVE MNAS +10321 ; 5.0 # No OLD ITALIC NUMERAL FIVE +104A5 ; 5.0 # Nd OSMANYA DIGIT FIVE +12403 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE ASH +1240A ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE DISH +12410 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE U +12419 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE GESH2 +12422 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE GESHU +12427 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE SHAR2 +12431 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE SHARU +12439 ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE BURU +1244D ; 5.0 # Nl CUNEIFORM NUMERIC SIGN FIVE ASH TENU +12454..12455 ; 5.0 # Nl [2] CUNEIFORM NUMERIC SIGN FIVE BAN2..CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM +1D364 ; 5.0 # No COUNTING ROD UNIT DIGIT FIVE +1D7D3 ; 5.0 # Nd MATHEMATICAL BOLD DIGIT FIVE +1D7DD ; 5.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE +1D7E7 ; 5.0 # Nd MATHEMATICAL SANS-SERIF DIGIT FIVE +1D7F1 ; 5.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE +1D7FB ; 5.0 # Nd MATHEMATICAL MONOSPACE DIGIT FIVE +20121 ; 5.0 # Lo CJK UNIFIED IDEOGRAPH-20121 + +# Total code points: 69 + +# ================================================ + +0F2F ; 5.5 # No TIBETAN DIGIT HALF SIX + +# Total code points: 1 + +# ================================================ + +0036 ; 6.0 # Nd DIGIT SIX +0666 ; 6.0 # Nd ARABIC-INDIC DIGIT SIX +06F6 ; 6.0 # Nd EXTENDED ARABIC-INDIC DIGIT SIX +07C6 ; 6.0 # Nd NKO DIGIT SIX +096C ; 6.0 # Nd DEVANAGARI DIGIT SIX +09EC ; 6.0 # Nd BENGALI DIGIT SIX +0A6C ; 6.0 # Nd GURMUKHI DIGIT SIX +0AEC ; 6.0 # Nd GUJARATI DIGIT SIX +0B6C ; 6.0 # Nd ORIYA DIGIT SIX +0BEC ; 6.0 # Nd TAMIL DIGIT SIX +0C6C ; 6.0 # Nd TELUGU DIGIT SIX +0CEC ; 6.0 # Nd KANNADA DIGIT SIX +0D6C ; 6.0 # Nd MALAYALAM DIGIT SIX +0E56 ; 6.0 # Nd THAI DIGIT SIX +0ED6 ; 6.0 # Nd LAO DIGIT SIX +0F26 ; 6.0 # Nd TIBETAN DIGIT SIX +1046 ; 6.0 # Nd MYANMAR DIGIT SIX +136E ; 6.0 # No ETHIOPIC DIGIT SIX +17E6 ; 6.0 # Nd KHMER DIGIT SIX +17F6 ; 6.0 # No KHMER SYMBOL LEK ATTAK PRAM-MUOY +1816 ; 6.0 # Nd MONGOLIAN DIGIT SIX +194C ; 6.0 # Nd LIMBU DIGIT SIX +19D6 ; 6.0 # Nd NEW TAI LUE DIGIT SIX +1B56 ; 6.0 # Nd BALINESE DIGIT SIX +2076 ; 6.0 # No SUPERSCRIPT SIX +2086 ; 6.0 # No SUBSCRIPT SIX +2165 ; 6.0 # Nl ROMAN NUMERAL SIX +2175 ; 6.0 # Nl SMALL ROMAN NUMERAL SIX +2465 ; 6.0 # No CIRCLED DIGIT SIX +2479 ; 6.0 # No PARENTHESIZED DIGIT SIX +248D ; 6.0 # No DIGIT SIX FULL STOP +24FA ; 6.0 # No DOUBLE CIRCLED DIGIT SIX +277B ; 6.0 # No DINGBAT NEGATIVE CIRCLED DIGIT SIX +2785 ; 6.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT SIX +278F ; 6.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX +3026 ; 6.0 # Nl HANGZHOU NUMERAL SIX +3225 ; 6.0 # No PARENTHESIZED IDEOGRAPH SIX +3285 ; 6.0 # No CIRCLED IDEOGRAPH SIX +516D ; 6.0 # Lo CJK UNIFIED IDEOGRAPH-516D +9646 ; 6.0 # Lo CJK UNIFIED IDEOGRAPH-9646 +9678 ; 6.0 # Lo CJK UNIFIED IDEOGRAPH-9678 +FF16 ; 6.0 # Nd FULLWIDTH DIGIT SIX +1010C ; 6.0 # No AEGEAN NUMBER SIX +104A6 ; 6.0 # Nd OSMANYA DIGIT SIX +12404 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX ASH +1240B ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX DISH +12411 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX U +1241A ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX GESH2 +12428 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX SHAR2 +12440 ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9 +1244E ; 6.0 # Nl CUNEIFORM NUMERIC SIGN SIX ASH TENU +1D365 ; 6.0 # No COUNTING ROD UNIT DIGIT SIX +1D7D4 ; 6.0 # Nd MATHEMATICAL BOLD DIGIT SIX +1D7DE ; 6.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SIX +1D7E8 ; 6.0 # Nd MATHEMATICAL SANS-SERIF DIGIT SIX +1D7F2 ; 6.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SIX +1D7FC ; 6.0 # Nd MATHEMATICAL MONOSPACE DIGIT SIX +20AEA ; 6.0 # Lo CJK UNIFIED IDEOGRAPH-20AEA + +# Total code points: 58 + +# ================================================ + +0F30 ; 6.5 # No TIBETAN DIGIT HALF SEVEN + +# Total code points: 1 + +# ================================================ + +0037 ; 7.0 # Nd DIGIT SEVEN +0667 ; 7.0 # Nd ARABIC-INDIC DIGIT SEVEN +06F7 ; 7.0 # Nd EXTENDED ARABIC-INDIC DIGIT SEVEN +07C7 ; 7.0 # Nd NKO DIGIT SEVEN +096D ; 7.0 # Nd DEVANAGARI DIGIT SEVEN +09ED ; 7.0 # Nd BENGALI DIGIT SEVEN +0A6D ; 7.0 # Nd GURMUKHI DIGIT SEVEN +0AED ; 7.0 # Nd GUJARATI DIGIT SEVEN +0B6D ; 7.0 # Nd ORIYA DIGIT SEVEN +0BED ; 7.0 # Nd TAMIL DIGIT SEVEN +0C6D ; 7.0 # Nd TELUGU DIGIT SEVEN +0CED ; 7.0 # Nd KANNADA DIGIT SEVEN +0D6D ; 7.0 # Nd MALAYALAM DIGIT SEVEN +0E57 ; 7.0 # Nd THAI DIGIT SEVEN +0ED7 ; 7.0 # Nd LAO DIGIT SEVEN +0F27 ; 7.0 # Nd TIBETAN DIGIT SEVEN +1047 ; 7.0 # Nd MYANMAR DIGIT SEVEN +136F ; 7.0 # No ETHIOPIC DIGIT SEVEN +17E7 ; 7.0 # Nd KHMER DIGIT SEVEN +17F7 ; 7.0 # No KHMER SYMBOL LEK ATTAK PRAM-PII +1817 ; 7.0 # Nd MONGOLIAN DIGIT SEVEN +194D ; 7.0 # Nd LIMBU DIGIT SEVEN +19D7 ; 7.0 # Nd NEW TAI LUE DIGIT SEVEN +1B57 ; 7.0 # Nd BALINESE DIGIT SEVEN +2077 ; 7.0 # No SUPERSCRIPT SEVEN +2087 ; 7.0 # No SUBSCRIPT SEVEN +2166 ; 7.0 # Nl ROMAN NUMERAL SEVEN +2176 ; 7.0 # Nl SMALL ROMAN NUMERAL SEVEN +2466 ; 7.0 # No CIRCLED DIGIT SEVEN +247A ; 7.0 # No PARENTHESIZED DIGIT SEVEN +248E ; 7.0 # No DIGIT SEVEN FULL STOP +24FB ; 7.0 # No DOUBLE CIRCLED DIGIT SEVEN +277C ; 7.0 # No DINGBAT NEGATIVE CIRCLED DIGIT SEVEN +2786 ; 7.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN +2790 ; 7.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN +3027 ; 7.0 # Nl HANGZHOU NUMERAL SEVEN +3226 ; 7.0 # No PARENTHESIZED IDEOGRAPH SEVEN +3286 ; 7.0 # No CIRCLED IDEOGRAPH SEVEN +3B4D ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-3B4D +4E03 ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-4E03 +67D2 ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-67D2 +FF17 ; 7.0 # Nd FULLWIDTH DIGIT SEVEN +1010D ; 7.0 # No AEGEAN NUMBER SEVEN +104A7 ; 7.0 # Nd OSMANYA DIGIT SEVEN +12405 ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN ASH +1240C ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN DISH +12412 ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN U +1241B ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN GESH2 +12429 ; 7.0 # Nl CUNEIFORM NUMERIC SIGN SEVEN SHAR2 +12441..12443 ; 7.0 # Nl [3] CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3..CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B +1D366 ; 7.0 # No COUNTING ROD UNIT DIGIT SEVEN +1D7D5 ; 7.0 # Nd MATHEMATICAL BOLD DIGIT SEVEN +1D7DF ; 7.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN +1D7E9 ; 7.0 # Nd MATHEMATICAL SANS-SERIF DIGIT SEVEN +1D7F3 ; 7.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN +1D7FD ; 7.0 # Nd MATHEMATICAL MONOSPACE DIGIT SEVEN +20001 ; 7.0 # Lo CJK UNIFIED IDEOGRAPH-20001 + +# Total code points: 59 + +# ================================================ + +0F31 ; 7.5 # No TIBETAN DIGIT HALF EIGHT + +# Total code points: 1 + +# ================================================ + +0038 ; 8.0 # Nd DIGIT EIGHT +0668 ; 8.0 # Nd ARABIC-INDIC DIGIT EIGHT +06F8 ; 8.0 # Nd EXTENDED ARABIC-INDIC DIGIT EIGHT +07C8 ; 8.0 # Nd NKO DIGIT EIGHT +096E ; 8.0 # Nd DEVANAGARI DIGIT EIGHT +09EE ; 8.0 # Nd BENGALI DIGIT EIGHT +0A6E ; 8.0 # Nd GURMUKHI DIGIT EIGHT +0AEE ; 8.0 # Nd GUJARATI DIGIT EIGHT +0B6E ; 8.0 # Nd ORIYA DIGIT EIGHT +0BEE ; 8.0 # Nd TAMIL DIGIT EIGHT +0C6E ; 8.0 # Nd TELUGU DIGIT EIGHT +0CEE ; 8.0 # Nd KANNADA DIGIT EIGHT +0D6E ; 8.0 # Nd MALAYALAM DIGIT EIGHT +0E58 ; 8.0 # Nd THAI DIGIT EIGHT +0ED8 ; 8.0 # Nd LAO DIGIT EIGHT +0F28 ; 8.0 # Nd TIBETAN DIGIT EIGHT +1048 ; 8.0 # Nd MYANMAR DIGIT EIGHT +1370 ; 8.0 # No ETHIOPIC DIGIT EIGHT +17E8 ; 8.0 # Nd KHMER DIGIT EIGHT +17F8 ; 8.0 # No KHMER SYMBOL LEK ATTAK PRAM-BEI +1818 ; 8.0 # Nd MONGOLIAN DIGIT EIGHT +194E ; 8.0 # Nd LIMBU DIGIT EIGHT +19D8 ; 8.0 # Nd NEW TAI LUE DIGIT EIGHT +1B58 ; 8.0 # Nd BALINESE DIGIT EIGHT +2078 ; 8.0 # No SUPERSCRIPT EIGHT +2088 ; 8.0 # No SUBSCRIPT EIGHT +2167 ; 8.0 # Nl ROMAN NUMERAL EIGHT +2177 ; 8.0 # Nl SMALL ROMAN NUMERAL EIGHT +2467 ; 8.0 # No CIRCLED DIGIT EIGHT +247B ; 8.0 # No PARENTHESIZED DIGIT EIGHT +248F ; 8.0 # No DIGIT EIGHT FULL STOP +24FC ; 8.0 # No DOUBLE CIRCLED DIGIT EIGHT +277D ; 8.0 # No DINGBAT NEGATIVE CIRCLED DIGIT EIGHT +2787 ; 8.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT +2791 ; 8.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT +3028 ; 8.0 # Nl HANGZHOU NUMERAL EIGHT +3227 ; 8.0 # No PARENTHESIZED IDEOGRAPH EIGHT +3287 ; 8.0 # No CIRCLED IDEOGRAPH EIGHT +516B ; 8.0 # Lo CJK UNIFIED IDEOGRAPH-516B +634C ; 8.0 # Lo CJK UNIFIED IDEOGRAPH-634C +FF18 ; 8.0 # Nd FULLWIDTH DIGIT EIGHT +1010E ; 8.0 # No AEGEAN NUMBER EIGHT +104A8 ; 8.0 # Nd OSMANYA DIGIT EIGHT +12406 ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT ASH +1240D ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT DISH +12413 ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT U +1241C ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT GESH2 +1242A ; 8.0 # Nl CUNEIFORM NUMERIC SIGN EIGHT SHAR2 +12444..12445 ; 8.0 # Nl [2] CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU..CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3 +1D367 ; 8.0 # No COUNTING ROD UNIT DIGIT EIGHT +1D7D6 ; 8.0 # Nd MATHEMATICAL BOLD DIGIT EIGHT +1D7E0 ; 8.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT +1D7EA ; 8.0 # Nd MATHEMATICAL SANS-SERIF DIGIT EIGHT +1D7F4 ; 8.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT +1D7FE ; 8.0 # Nd MATHEMATICAL MONOSPACE DIGIT EIGHT + +# Total code points: 56 + +# ================================================ + +0F32 ; 8.5 # No TIBETAN DIGIT HALF NINE + +# Total code points: 1 + +# ================================================ + +0039 ; 9.0 # Nd DIGIT NINE +0669 ; 9.0 # Nd ARABIC-INDIC DIGIT NINE +06F9 ; 9.0 # Nd EXTENDED ARABIC-INDIC DIGIT NINE +07C9 ; 9.0 # Nd NKO DIGIT NINE +096F ; 9.0 # Nd DEVANAGARI DIGIT NINE +09EF ; 9.0 # Nd BENGALI DIGIT NINE +0A6F ; 9.0 # Nd GURMUKHI DIGIT NINE +0AEF ; 9.0 # Nd GUJARATI DIGIT NINE +0B6F ; 9.0 # Nd ORIYA DIGIT NINE +0BEF ; 9.0 # Nd TAMIL DIGIT NINE +0C6F ; 9.0 # Nd TELUGU DIGIT NINE +0CEF ; 9.0 # Nd KANNADA DIGIT NINE +0D6F ; 9.0 # Nd MALAYALAM DIGIT NINE +0E59 ; 9.0 # Nd THAI DIGIT NINE +0ED9 ; 9.0 # Nd LAO DIGIT NINE +0F29 ; 9.0 # Nd TIBETAN DIGIT NINE +1049 ; 9.0 # Nd MYANMAR DIGIT NINE +1371 ; 9.0 # No ETHIOPIC DIGIT NINE +17E9 ; 9.0 # Nd KHMER DIGIT NINE +17F9 ; 9.0 # No KHMER SYMBOL LEK ATTAK PRAM-BUON +1819 ; 9.0 # Nd MONGOLIAN DIGIT NINE +194F ; 9.0 # Nd LIMBU DIGIT NINE +19D9 ; 9.0 # Nd NEW TAI LUE DIGIT NINE +1B59 ; 9.0 # Nd BALINESE DIGIT NINE +2079 ; 9.0 # No SUPERSCRIPT NINE +2089 ; 9.0 # No SUBSCRIPT NINE +2168 ; 9.0 # Nl ROMAN NUMERAL NINE +2178 ; 9.0 # Nl SMALL ROMAN NUMERAL NINE +2468 ; 9.0 # No CIRCLED DIGIT NINE +247C ; 9.0 # No PARENTHESIZED DIGIT NINE +2490 ; 9.0 # No DIGIT NINE FULL STOP +24FD ; 9.0 # No DOUBLE CIRCLED DIGIT NINE +277E ; 9.0 # No DINGBAT NEGATIVE CIRCLED DIGIT NINE +2788 ; 9.0 # No DINGBAT CIRCLED SANS-SERIF DIGIT NINE +2792 ; 9.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE +3029 ; 9.0 # Nl HANGZHOU NUMERAL NINE +3228 ; 9.0 # No PARENTHESIZED IDEOGRAPH NINE +3288 ; 9.0 # No CIRCLED IDEOGRAPH NINE +4E5D ; 9.0 # Lo CJK UNIFIED IDEOGRAPH-4E5D +5EFE ; 9.0 # Lo CJK UNIFIED IDEOGRAPH-5EFE +7396 ; 9.0 # Lo CJK UNIFIED IDEOGRAPH-7396 +FF19 ; 9.0 # Nd FULLWIDTH DIGIT NINE +1010F ; 9.0 # No AEGEAN NUMBER NINE +104A9 ; 9.0 # Nd OSMANYA DIGIT NINE +12407 ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE ASH +1240E ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE DISH +12414 ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE U +1241D ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE GESH2 +1242B ; 9.0 # Nl CUNEIFORM NUMERIC SIGN NINE SHAR2 +12446..12449 ; 9.0 # Nl [4] CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU..CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A +1D368 ; 9.0 # No COUNTING ROD UNIT DIGIT NINE +1D7D7 ; 9.0 # Nd MATHEMATICAL BOLD DIGIT NINE +1D7E1 ; 9.0 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT NINE +1D7EB ; 9.0 # Nd MATHEMATICAL SANS-SERIF DIGIT NINE +1D7F5 ; 9.0 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT NINE +1D7FF ; 9.0 # Nd MATHEMATICAL MONOSPACE DIGIT NINE + +# Total code points: 59 + +# ================================================ + +0BF0 ; 10.0 # No TAMIL NUMBER TEN +1372 ; 10.0 # No ETHIOPIC NUMBER TEN +2169 ; 10.0 # Nl ROMAN NUMERAL TEN +2179 ; 10.0 # Nl SMALL ROMAN NUMERAL TEN +2469 ; 10.0 # No CIRCLED NUMBER TEN +247D ; 10.0 # No PARENTHESIZED NUMBER TEN +2491 ; 10.0 # No NUMBER TEN FULL STOP +24FE ; 10.0 # No DOUBLE CIRCLED NUMBER TEN +277F ; 10.0 # No DINGBAT NEGATIVE CIRCLED NUMBER TEN +2789 ; 10.0 # No DINGBAT CIRCLED SANS-SERIF NUMBER TEN +2793 ; 10.0 # No DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +3038 ; 10.0 # Nl HANGZHOU NUMERAL TEN +3229 ; 10.0 # No PARENTHESIZED IDEOGRAPH TEN +3289 ; 10.0 # No CIRCLED IDEOGRAPH TEN +4EC0 ; 10.0 # Lo CJK UNIFIED IDEOGRAPH-4EC0 +5341 ; 10.0 # Lo CJK UNIFIED IDEOGRAPH-5341 +62FE ; 10.0 # Lo CJK UNIFIED IDEOGRAPH-62FE +10110 ; 10.0 # No AEGEAN NUMBER TEN +10149 ; 10.0 # Nl GREEK ACROPHONIC ATTIC TEN TALENTS +10150 ; 10.0 # Nl GREEK ACROPHONIC ATTIC TEN STATERS +10157 ; 10.0 # Nl GREEK ACROPHONIC ATTIC TEN MNAS +10160..10164 ; 10.0 # Nl [5] GREEK ACROPHONIC TROEZENIAN TEN..GREEK ACROPHONIC THESPIAN TEN +10322 ; 10.0 # No OLD ITALIC NUMERAL TEN +103D3 ; 10.0 # Nl OLD PERSIAN NUMBER TEN +10917 ; 10.0 # No PHOENICIAN NUMBER TEN +10A44 ; 10.0 # No KHAROSHTHI NUMBER TEN +1D369 ; 10.0 # No COUNTING ROD TENS DIGIT ONE + +# Total code points: 31 + +# ================================================ + +216A ; 11.0 # Nl ROMAN NUMERAL ELEVEN +217A ; 11.0 # Nl SMALL ROMAN NUMERAL ELEVEN +246A ; 11.0 # No CIRCLED NUMBER ELEVEN +247E ; 11.0 # No PARENTHESIZED NUMBER ELEVEN +2492 ; 11.0 # No NUMBER ELEVEN FULL STOP +24EB ; 11.0 # No NEGATIVE CIRCLED NUMBER ELEVEN + +# Total code points: 6 + +# ================================================ + +216B ; 12.0 # Nl ROMAN NUMERAL TWELVE +217B ; 12.0 # Nl SMALL ROMAN NUMERAL TWELVE +246B ; 12.0 # No CIRCLED NUMBER TWELVE +247F ; 12.0 # No PARENTHESIZED NUMBER TWELVE +2493 ; 12.0 # No NUMBER TWELVE FULL STOP +24EC ; 12.0 # No NEGATIVE CIRCLED NUMBER TWELVE + +# Total code points: 6 + +# ================================================ + +246C ; 13.0 # No CIRCLED NUMBER THIRTEEN +2480 ; 13.0 # No PARENTHESIZED NUMBER THIRTEEN +2494 ; 13.0 # No NUMBER THIRTEEN FULL STOP +24ED ; 13.0 # No NEGATIVE CIRCLED NUMBER THIRTEEN + +# Total code points: 4 + +# ================================================ + +246D ; 14.0 # No CIRCLED NUMBER FOURTEEN +2481 ; 14.0 # No PARENTHESIZED NUMBER FOURTEEN +2495 ; 14.0 # No NUMBER FOURTEEN FULL STOP +24EE ; 14.0 # No NEGATIVE CIRCLED NUMBER FOURTEEN + +# Total code points: 4 + +# ================================================ + +246E ; 15.0 # No CIRCLED NUMBER FIFTEEN +2482 ; 15.0 # No PARENTHESIZED NUMBER FIFTEEN +2496 ; 15.0 # No NUMBER FIFTEEN FULL STOP +24EF ; 15.0 # No NEGATIVE CIRCLED NUMBER FIFTEEN + +# Total code points: 4 + +# ================================================ + +09F9 ; 16.0 # No BENGALI CURRENCY DENOMINATOR SIXTEEN +246F ; 16.0 # No CIRCLED NUMBER SIXTEEN +2483 ; 16.0 # No PARENTHESIZED NUMBER SIXTEEN +2497 ; 16.0 # No NUMBER SIXTEEN FULL STOP +24F0 ; 16.0 # No NEGATIVE CIRCLED NUMBER SIXTEEN + +# Total code points: 5 + +# ================================================ + +16EE ; 17.0 # Nl RUNIC ARLAUG SYMBOL +2470 ; 17.0 # No CIRCLED NUMBER SEVENTEEN +2484 ; 17.0 # No PARENTHESIZED NUMBER SEVENTEEN +2498 ; 17.0 # No NUMBER SEVENTEEN FULL STOP +24F1 ; 17.0 # No NEGATIVE CIRCLED NUMBER SEVENTEEN + +# Total code points: 5 + +# ================================================ + +16EF ; 18.0 # Nl RUNIC TVIMADUR SYMBOL +2471 ; 18.0 # No CIRCLED NUMBER EIGHTEEN +2485 ; 18.0 # No PARENTHESIZED NUMBER EIGHTEEN +2499 ; 18.0 # No NUMBER EIGHTEEN FULL STOP +24F2 ; 18.0 # No NEGATIVE CIRCLED NUMBER EIGHTEEN + +# Total code points: 5 + +# ================================================ + +16F0 ; 19.0 # Nl RUNIC BELGTHOR SYMBOL +2472 ; 19.0 # No CIRCLED NUMBER NINETEEN +2486 ; 19.0 # No PARENTHESIZED NUMBER NINETEEN +249A ; 19.0 # No NUMBER NINETEEN FULL STOP +24F3 ; 19.0 # No NEGATIVE CIRCLED NUMBER NINETEEN + +# Total code points: 5 + +# ================================================ + +1373 ; 20.0 # No ETHIOPIC NUMBER TWENTY +2473 ; 20.0 # No CIRCLED NUMBER TWENTY +2487 ; 20.0 # No PARENTHESIZED NUMBER TWENTY +249B ; 20.0 # No NUMBER TWENTY FULL STOP +24F4 ; 20.0 # No NEGATIVE CIRCLED NUMBER TWENTY +3039 ; 20.0 # Nl HANGZHOU NUMERAL TWENTY +5344 ; 20.0 # Lo CJK UNIFIED IDEOGRAPH-5344 +5EFF ; 20.0 # Lo CJK UNIFIED IDEOGRAPH-5EFF +10111 ; 20.0 # No AEGEAN NUMBER TWENTY +103D4 ; 20.0 # Nl OLD PERSIAN NUMBER TWENTY +10918 ; 20.0 # No PHOENICIAN NUMBER TWENTY +10A45 ; 20.0 # No KHAROSHTHI NUMBER TWENTY +1D36A ; 20.0 # No COUNTING ROD TENS DIGIT TWO + +# Total code points: 13 + +# ================================================ + +3251 ; 21.0 # No CIRCLED NUMBER TWENTY ONE + +# Total code points: 1 + +# ================================================ + +3252 ; 22.0 # No CIRCLED NUMBER TWENTY TWO + +# Total code points: 1 + +# ================================================ + +3253 ; 23.0 # No CIRCLED NUMBER TWENTY THREE + +# Total code points: 1 + +# ================================================ + +3254 ; 24.0 # No CIRCLED NUMBER TWENTY FOUR + +# Total code points: 1 + +# ================================================ + +3255 ; 25.0 # No CIRCLED NUMBER TWENTY FIVE + +# Total code points: 1 + +# ================================================ + +3256 ; 26.0 # No CIRCLED NUMBER TWENTY SIX + +# Total code points: 1 + +# ================================================ + +3257 ; 27.0 # No CIRCLED NUMBER TWENTY SEVEN + +# Total code points: 1 + +# ================================================ + +3258 ; 28.0 # No CIRCLED NUMBER TWENTY EIGHT + +# Total code points: 1 + +# ================================================ + +3259 ; 29.0 # No CIRCLED NUMBER TWENTY NINE + +# Total code points: 1 + +# ================================================ + +1374 ; 30.0 # No ETHIOPIC NUMBER THIRTY +303A ; 30.0 # Nl HANGZHOU NUMERAL THIRTY +325A ; 30.0 # No CIRCLED NUMBER THIRTY +5345 ; 30.0 # Lo CJK UNIFIED IDEOGRAPH-5345 +10112 ; 30.0 # No AEGEAN NUMBER THIRTY +10165 ; 30.0 # Nl GREEK ACROPHONIC THESPIAN THIRTY +1D36B ; 30.0 # No COUNTING ROD TENS DIGIT THREE +20983 ; 30.0 # Lo CJK UNIFIED IDEOGRAPH-20983 + +# Total code points: 8 + +# ================================================ + +325B ; 31.0 # No CIRCLED NUMBER THIRTY ONE + +# Total code points: 1 + +# ================================================ + +325C ; 32.0 # No CIRCLED NUMBER THIRTY TWO + +# Total code points: 1 + +# ================================================ + +325D ; 33.0 # No CIRCLED NUMBER THIRTY THREE + +# Total code points: 1 + +# ================================================ + +325E ; 34.0 # No CIRCLED NUMBER THIRTY FOUR + +# Total code points: 1 + +# ================================================ + +325F ; 35.0 # No CIRCLED NUMBER THIRTY FIVE + +# Total code points: 1 + +# ================================================ + +32B1 ; 36.0 # No CIRCLED NUMBER THIRTY SIX + +# Total code points: 1 + +# ================================================ + +32B2 ; 37.0 # No CIRCLED NUMBER THIRTY SEVEN + +# Total code points: 1 + +# ================================================ + +32B3 ; 38.0 # No CIRCLED NUMBER THIRTY EIGHT + +# Total code points: 1 + +# ================================================ + +32B4 ; 39.0 # No CIRCLED NUMBER THIRTY NINE + +# Total code points: 1 + +# ================================================ + +1375 ; 40.0 # No ETHIOPIC NUMBER FORTY +32B5 ; 40.0 # No CIRCLED NUMBER FORTY +534C ; 40.0 # Lo CJK UNIFIED IDEOGRAPH-534C +10113 ; 40.0 # No AEGEAN NUMBER FORTY +1D36C ; 40.0 # No COUNTING ROD TENS DIGIT FOUR +2098C ; 40.0 # Lo CJK UNIFIED IDEOGRAPH-2098C +2099C ; 40.0 # Lo CJK UNIFIED IDEOGRAPH-2099C + +# Total code points: 7 + +# ================================================ + +32B6 ; 41.0 # No CIRCLED NUMBER FORTY ONE + +# Total code points: 1 + +# ================================================ + +32B7 ; 42.0 # No CIRCLED NUMBER FORTY TWO + +# Total code points: 1 + +# ================================================ + +32B8 ; 43.0 # No CIRCLED NUMBER FORTY THREE + +# Total code points: 1 + +# ================================================ + +32B9 ; 44.0 # No CIRCLED NUMBER FORTY FOUR + +# Total code points: 1 + +# ================================================ + +32BA ; 45.0 # No CIRCLED NUMBER FORTY FIVE + +# Total code points: 1 + +# ================================================ + +32BB ; 46.0 # No CIRCLED NUMBER FORTY SIX + +# Total code points: 1 + +# ================================================ + +32BC ; 47.0 # No CIRCLED NUMBER FORTY SEVEN + +# Total code points: 1 + +# ================================================ + +32BD ; 48.0 # No CIRCLED NUMBER FORTY EIGHT + +# Total code points: 1 + +# ================================================ + +32BE ; 49.0 # No CIRCLED NUMBER FORTY NINE + +# Total code points: 1 + +# ================================================ + +1376 ; 50.0 # No ETHIOPIC NUMBER FIFTY +216C ; 50.0 # Nl ROMAN NUMERAL FIFTY +217C ; 50.0 # Nl SMALL ROMAN NUMERAL FIFTY +32BF ; 50.0 # No CIRCLED NUMBER FIFTY +10114 ; 50.0 # No AEGEAN NUMBER FIFTY +10144 ; 50.0 # Nl GREEK ACROPHONIC ATTIC FIFTY +1014A ; 50.0 # Nl GREEK ACROPHONIC ATTIC FIFTY TALENTS +10151 ; 50.0 # Nl GREEK ACROPHONIC ATTIC FIFTY STATERS +10166..10169 ; 50.0 # Nl [4] GREEK ACROPHONIC TROEZENIAN FIFTY..GREEK ACROPHONIC THESPIAN FIFTY +10174 ; 50.0 # Nl GREEK ACROPHONIC STRATIAN FIFTY MNAS +10323 ; 50.0 # No OLD ITALIC NUMERAL FIFTY +1D36D ; 50.0 # No COUNTING ROD TENS DIGIT FIVE + +# Total code points: 15 + +# ================================================ + +1377 ; 60.0 # No ETHIOPIC NUMBER SIXTY +10115 ; 60.0 # No AEGEAN NUMBER SIXTY +1D36E ; 60.0 # No COUNTING ROD TENS DIGIT SIX + +# Total code points: 3 + +# ================================================ + +1378 ; 70.0 # No ETHIOPIC NUMBER SEVENTY +10116 ; 70.0 # No AEGEAN NUMBER SEVENTY +1D36F ; 70.0 # No COUNTING ROD TENS DIGIT SEVEN + +# Total code points: 3 + +# ================================================ + +1379 ; 80.0 # No ETHIOPIC NUMBER EIGHTY +10117 ; 80.0 # No AEGEAN NUMBER EIGHTY +1D370 ; 80.0 # No COUNTING ROD TENS DIGIT EIGHT + +# Total code points: 3 + +# ================================================ + +137A ; 90.0 # No ETHIOPIC NUMBER NINETY +10118 ; 90.0 # No AEGEAN NUMBER NINETY +10341 ; 90.0 # Nl GOTHIC LETTER NINETY +1D371 ; 90.0 # No COUNTING ROD TENS DIGIT NINE + +# Total code points: 4 + +# ================================================ + +0BF1 ; 100.0 # No TAMIL NUMBER ONE HUNDRED +137B ; 100.0 # No ETHIOPIC NUMBER HUNDRED +216D ; 100.0 # Nl ROMAN NUMERAL ONE HUNDRED +217D ; 100.0 # Nl SMALL ROMAN NUMERAL ONE HUNDRED +4F70 ; 100.0 # Lo CJK UNIFIED IDEOGRAPH-4F70 +767E ; 100.0 # Lo CJK UNIFIED IDEOGRAPH-767E +964C ; 100.0 # Lo CJK UNIFIED IDEOGRAPH-964C +10119 ; 100.0 # No AEGEAN NUMBER ONE HUNDRED +1014B ; 100.0 # Nl GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS +10152 ; 100.0 # Nl GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS +1016A ; 100.0 # Nl GREEK ACROPHONIC THESPIAN ONE HUNDRED +103D5 ; 100.0 # Nl OLD PERSIAN NUMBER HUNDRED +10919 ; 100.0 # No PHOENICIAN NUMBER ONE HUNDRED +10A46 ; 100.0 # No KHAROSHTHI NUMBER ONE HUNDRED + +# Total code points: 14 + +# ================================================ + +1011A ; 200.0 # No AEGEAN NUMBER TWO HUNDRED + +# Total code points: 1 + +# ================================================ + +1011B ; 300.0 # No AEGEAN NUMBER THREE HUNDRED +1016B ; 300.0 # Nl GREEK ACROPHONIC THESPIAN THREE HUNDRED + +# Total code points: 2 + +# ================================================ + +1011C ; 400.0 # No AEGEAN NUMBER FOUR HUNDRED + +# Total code points: 1 + +# ================================================ + +216E ; 500.0 # Nl ROMAN NUMERAL FIVE HUNDRED +217E ; 500.0 # Nl SMALL ROMAN NUMERAL FIVE HUNDRED +1011D ; 500.0 # No AEGEAN NUMBER FIVE HUNDRED +10145 ; 500.0 # Nl GREEK ACROPHONIC ATTIC FIVE HUNDRED +1014C ; 500.0 # Nl GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS +10153 ; 500.0 # Nl GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS +1016C..10170 ; 500.0 # Nl [5] GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED..GREEK ACROPHONIC NAXIAN FIVE HUNDRED + +# Total code points: 11 + +# ================================================ + +1011E ; 600.0 # No AEGEAN NUMBER SIX HUNDRED + +# Total code points: 1 + +# ================================================ + +1011F ; 700.0 # No AEGEAN NUMBER SEVEN HUNDRED + +# Total code points: 1 + +# ================================================ + +10120 ; 800.0 # No AEGEAN NUMBER EIGHT HUNDRED + +# Total code points: 1 + +# ================================================ + +10121 ; 900.0 # No AEGEAN NUMBER NINE HUNDRED +1034A ; 900.0 # Nl GOTHIC LETTER NINE HUNDRED + +# Total code points: 2 + +# ================================================ + +0BF2 ; 1000.0 # No TAMIL NUMBER ONE THOUSAND +216F ; 1000.0 # Nl ROMAN NUMERAL ONE THOUSAND +217F..2180 ; 1000.0 # Nl [2] SMALL ROMAN NUMERAL ONE THOUSAND..ROMAN NUMERAL ONE THOUSAND C D +4EDF ; 1000.0 # Lo CJK UNIFIED IDEOGRAPH-4EDF +5343 ; 1000.0 # Lo CJK UNIFIED IDEOGRAPH-5343 +10122 ; 1000.0 # No AEGEAN NUMBER ONE THOUSAND +1014D ; 1000.0 # Nl GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS +10154 ; 1000.0 # Nl GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS +10171 ; 1000.0 # Nl GREEK ACROPHONIC THESPIAN ONE THOUSAND +10A47 ; 1000.0 # No KHAROSHTHI NUMBER ONE THOUSAND + +# Total code points: 11 + +# ================================================ + +10123 ; 2000.0 # No AEGEAN NUMBER TWO THOUSAND + +# Total code points: 1 + +# ================================================ + +10124 ; 3000.0 # No AEGEAN NUMBER THREE THOUSAND + +# Total code points: 1 + +# ================================================ + +10125 ; 4000.0 # No AEGEAN NUMBER FOUR THOUSAND + +# Total code points: 1 + +# ================================================ + +2181 ; 5000.0 # Nl ROMAN NUMERAL FIVE THOUSAND +10126 ; 5000.0 # No AEGEAN NUMBER FIVE THOUSAND +10146 ; 5000.0 # Nl GREEK ACROPHONIC ATTIC FIVE THOUSAND +1014E ; 5000.0 # Nl GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS +10172 ; 5000.0 # Nl GREEK ACROPHONIC THESPIAN FIVE THOUSAND + +# Total code points: 5 + +# ================================================ + +10127 ; 6000.0 # No AEGEAN NUMBER SIX THOUSAND + +# Total code points: 1 + +# ================================================ + +10128 ; 7000.0 # No AEGEAN NUMBER SEVEN THOUSAND + +# Total code points: 1 + +# ================================================ + +10129 ; 8000.0 # No AEGEAN NUMBER EIGHT THOUSAND + +# Total code points: 1 + +# ================================================ + +1012A ; 9000.0 # No AEGEAN NUMBER NINE THOUSAND + +# Total code points: 1 + +# ================================================ + +137C ; 10000.0 # No ETHIOPIC NUMBER TEN THOUSAND +2182 ; 10000.0 # Nl ROMAN NUMERAL TEN THOUSAND +4E07 ; 10000.0 # Lo CJK UNIFIED IDEOGRAPH-4E07 +842C ; 10000.0 # Lo CJK UNIFIED IDEOGRAPH-842C +1012B ; 10000.0 # No AEGEAN NUMBER TEN THOUSAND +10155 ; 10000.0 # Nl GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS + +# Total code points: 6 + +# ================================================ + +1012C ; 20000.0 # No AEGEAN NUMBER TWENTY THOUSAND + +# Total code points: 1 + +# ================================================ + +1012D ; 30000.0 # No AEGEAN NUMBER THIRTY THOUSAND + +# Total code points: 1 + +# ================================================ + +1012E ; 40000.0 # No AEGEAN NUMBER FORTY THOUSAND + +# Total code points: 1 + +# ================================================ + +1012F ; 50000.0 # No AEGEAN NUMBER FIFTY THOUSAND +10147 ; 50000.0 # Nl GREEK ACROPHONIC ATTIC FIFTY THOUSAND +10156 ; 50000.0 # Nl GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS + +# Total code points: 3 + +# ================================================ + +10130 ; 60000.0 # No AEGEAN NUMBER SIXTY THOUSAND + +# Total code points: 1 + +# ================================================ + +10131 ; 70000.0 # No AEGEAN NUMBER SEVENTY THOUSAND + +# Total code points: 1 + +# ================================================ + +10132 ; 80000.0 # No AEGEAN NUMBER EIGHTY THOUSAND + +# Total code points: 1 + +# ================================================ + +10133 ; 90000.0 # No AEGEAN NUMBER NINETY THOUSAND + +# Total code points: 1 + +# ================================================ + +4EBF ; 100000000.0 # Lo CJK UNIFIED IDEOGRAPH-4EBF +5104 ; 100000000.0 # Lo CJK UNIFIED IDEOGRAPH-5104 + +# Total code points: 2 + +# ================================================ + +5146 ; 1000000000000.0 # Lo CJK UNIFIED IDEOGRAPH-5146 + +# Total code points: 1 + +# EOF diff --git a/icuSources/data/unidata/base_unidata/EastAsianWidth.txt b/icuSources/data/unidata/base_unidata/EastAsianWidth.txt new file mode 100644 index 00000000..13fe27ad --- /dev/null +++ b/icuSources/data/unidata/base_unidata/EastAsianWidth.txt @@ -0,0 +1,782 @@ +# EastAsianWidth-5.0.0.txt +# Date: 2006-02-15, 14:39:00 PST [KW] +# +# East Asian Width Properties +# +# This file is an informative contributory data file in the +# Unicode Character Database. +# +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# The format is two fields separated by a semicolon. +# Field 0: Unicode value +# Field 1: East Asian Width property, consisting of one of the following values: +# "N", "A", "H", "W", "F", "Na" +# - All code points, assigned or unassigned, that are not listed +# explicitly are given the value "N". +# - Characters ranges are specified as for other property files in +# the Unicode Character Database. +# +# The Unicode name of each character is provided in a comment for help +# in identifying the characters. +# +# See UAX #11: East Asian Character Width, for more information. +# +# @missing: 0000..10FFFF; N +0000..001F;N +0020..007E;Na +007F..00A0;N +00A1;A +00A2..00A3;Na +00A4;A +00A5..00A6;Na +00A7..00A8;A +00A9;N +00AA;A +00AB;N +00AC;Na +00AD..00AE;A +00AF;Na +00B0..00B4;A +00B5;N +00B6..00BA;A +00BB;N +00BC..00BF;A +00C0..00C5;N +00C6;A +00C7..00CF;N +00D0;A +00D1..00D6;N +00D7..00D8;A +00D9..00DD;N +00DE..00E1;A +00E2..00E5;N +00E6;A +00E7;N +00E8..00EA;A +00EB;N +00EC..00ED;A +00EE..00EF;N +00F0;A +00F1;N +00F2..00F3;A +00F4..00F6;N +00F7..00FA;A +00FB;N +00FC;A +00FD;N +00FE;A +00FF..0100;N +0101;A +0102..0110;N +0111;A +0112;N +0113;A +0114..011A;N +011B;A +011C..0125;N +0126..0127;A +0128..012A;N +012B;A +012C..0130;N +0131..0133;A +0134..0137;N +0138;A +0139..013E;N +013F..0142;A +0143;N +0144;A +0145..0147;N +0148..014B;A +014C;N +014D;A +014E..0151;N +0152..0153;A +0154..0165;N +0166..0167;A +0168..016A;N +016B;A +016C..01CD;N +01CE;A +01CF;N +01D0;A +01D1;N +01D2;A +01D3;N +01D4;A +01D5;N +01D6;A +01D7;N +01D8;A +01D9;N +01DA;A +01DB;N +01DC;A +01DD..0250;N +0251;A +0252..0260;N +0261;A +0262..02C3;N +02C4;A +02C5..02C6;N +02C7;A +02C8;N +02C9..02CB;A +02CC;N +02CD;A +02CE..02CF;N +02D0;A +02D1..02D7;N +02D8..02DB;A +02DC;N +02DD;A +02DE;N +02DF;A +02E0..02FF;N +0300..036F;A +0374..0375;N +037A..037E;N +0384..038A;N +038C;N +038E..0390;N +0391..03A1;A +03A3..03A9;A +03AA..03B0;N +03B1..03C1;A +03C2;N +03C3..03C9;A +03CA..03CE;N +03D0..0400;N +0401;A +0402..040F;N +0410..044F;A +0450;N +0451;A +0452..0486;N +0488..0513;N +0531..0556;N +0559..055F;N +0561..0587;N +0589..058A;N +0591..05C7;N +05D0..05EA;N +05F0..05F4;N +0600..0603;N +060B..0615;N +061B;N +061E..061F;N +0621..063A;N +0640..065E;N +0660..070D;N +070F..074A;N +074D..076D;N +0780..07B1;N +07C0..07FA;N +0901..0939;N +093C..094D;N +0950..0954;N +0958..0970;N +097B..097F;N +0981..0983;N +0985..098C;N +098F..0990;N +0993..09A8;N +09AA..09B0;N +09B2;N +09B6..09B9;N +09BC..09C4;N +09C7..09C8;N +09CB..09CE;N +09D7;N +09DC..09DD;N +09DF..09E3;N +09E6..09FA;N +0A01..0A03;N +0A05..0A0A;N +0A0F..0A10;N +0A13..0A28;N +0A2A..0A30;N +0A32..0A33;N +0A35..0A36;N +0A38..0A39;N +0A3C;N +0A3E..0A42;N +0A47..0A48;N +0A4B..0A4D;N +0A59..0A5C;N +0A5E;N +0A66..0A74;N +0A81..0A83;N +0A85..0A8D;N +0A8F..0A91;N +0A93..0AA8;N +0AAA..0AB0;N +0AB2..0AB3;N +0AB5..0AB9;N +0ABC..0AC5;N +0AC7..0AC9;N +0ACB..0ACD;N +0AD0;N +0AE0..0AE3;N +0AE6..0AEF;N +0AF1;N +0B01..0B03;N +0B05..0B0C;N +0B0F..0B10;N +0B13..0B28;N +0B2A..0B30;N +0B32..0B33;N +0B35..0B39;N +0B3C..0B43;N +0B47..0B48;N +0B4B..0B4D;N +0B56..0B57;N +0B5C..0B5D;N +0B5F..0B61;N +0B66..0B71;N +0B82..0B83;N +0B85..0B8A;N +0B8E..0B90;N +0B92..0B95;N +0B99..0B9A;N +0B9C;N +0B9E..0B9F;N +0BA3..0BA4;N +0BA8..0BAA;N +0BAE..0BB9;N +0BBE..0BC2;N +0BC6..0BC8;N +0BCA..0BCD;N +0BD7;N +0BE6..0BFA;N +0C01..0C03;N +0C05..0C0C;N +0C0E..0C10;N +0C12..0C28;N +0C2A..0C33;N +0C35..0C39;N +0C3E..0C44;N +0C46..0C48;N +0C4A..0C4D;N +0C55..0C56;N +0C60..0C61;N +0C66..0C6F;N +0C82..0C83;N +0C85..0C8C;N +0C8E..0C90;N +0C92..0CA8;N +0CAA..0CB3;N +0CB5..0CB9;N +0CBC..0CC4;N +0CC6..0CC8;N +0CCA..0CCD;N +0CD5..0CD6;N +0CDE;N +0CE0..0CE3;N +0CE6..0CEF;N +0CF1..0CF2;N +0D02..0D03;N +0D05..0D0C;N +0D0E..0D10;N +0D12..0D28;N +0D2A..0D39;N +0D3E..0D43;N +0D46..0D48;N +0D4A..0D4D;N +0D57;N +0D60..0D61;N +0D66..0D6F;N +0D82..0D83;N +0D85..0D96;N +0D9A..0DB1;N +0DB3..0DBB;N +0DBD;N +0DC0..0DC6;N +0DCA;N +0DCF..0DD4;N +0DD6;N +0DD8..0DDF;N +0DF2..0DF4;N +0E01..0E3A;N +0E3F..0E5B;N +0E81..0E82;N +0E84;N +0E87..0E88;N +0E8A;N +0E8D;N +0E94..0E97;N +0E99..0E9F;N +0EA1..0EA3;N +0EA5;N +0EA7;N +0EAA..0EAB;N +0EAD..0EB9;N +0EBB..0EBD;N +0EC0..0EC4;N +0EC6;N +0EC8..0ECD;N +0ED0..0ED9;N +0EDC..0EDD;N +0F00..0F47;N +0F49..0F6A;N +0F71..0F8B;N +0F90..0F97;N +0F99..0FBC;N +0FBE..0FCC;N +0FCF..0FD1;N +1000..1021;N +1023..1027;N +1029..102A;N +102C..1032;N +1036..1039;N +1040..1059;N +10A0..10C5;N +10D0..10FC;N +1100..1159;W +115F;W +1160..11A2;N +11A8..11F9;N +1200..1248;N +124A..124D;N +1250..1256;N +1258;N +125A..125D;N +1260..1288;N +128A..128D;N +1290..12B0;N +12B2..12B5;N +12B8..12BE;N +12C0;N +12C2..12C5;N +12C8..12D6;N +12D8..1310;N +1312..1315;N +1318..135A;N +135F..137C;N +1380..1399;N +13A0..13F4;N +1401..1676;N +1680..169C;N +16A0..16F0;N +1700..170C;N +170E..1714;N +1720..1736;N +1740..1753;N +1760..176C;N +176E..1770;N +1772..1773;N +1780..17DD;N +17E0..17E9;N +17F0..17F9;N +1800..180E;N +1810..1819;N +1820..1877;N +1880..18A9;N +1900..191C;N +1920..192B;N +1930..193B;N +1940;N +1944..196D;N +1970..1974;N +1980..19A9;N +19B0..19C9;N +19D0..19D9;N +19DE..1A1B;N +1A1E..1A1F;N +1B00..1B4B;N +1B50..1B7C;N +1D00..1DCA;N +1DFE..1E9B;N +1EA0..1EF9;N +1F00..1F15;N +1F18..1F1D;N +1F20..1F45;N +1F48..1F4D;N +1F50..1F57;N +1F59;N +1F5B;N +1F5D;N +1F5F..1F7D;N +1F80..1FB4;N +1FB6..1FC4;N +1FC6..1FD3;N +1FD6..1FDB;N +1FDD..1FEF;N +1FF2..1FF4;N +1FF6..1FFE;N +2000..200F;N +2010;A +2011..2012;N +2013..2016;A +2017;N +2018..2019;A +201A..201B;N +201C..201D;A +201E..201F;N +2020..2022;A +2023;N +2024..2027;A +2028..202F;N +2030;A +2031;N +2032..2033;A +2034;N +2035;A +2036..203A;N +203B;A +203C..203D;N +203E;A +203F..2063;N +206A..2071;N +2074;A +2075..207E;N +207F;A +2080;N +2081..2084;A +2085..208E;N +2090..2094;N +20A0..20A8;N +20A9;H +20AA..20AB;N +20AC;A +20AD..20B5;N +20D0..20EF;N +2100..2102;N +2103;A +2104;N +2105;A +2106..2108;N +2109;A +210A..2112;N +2113;A +2114..2115;N +2116;A +2117..2120;N +2121..2122;A +2123..2125;N +2126;A +2127..212A;N +212B;A +212C..214E;N +2153..2154;A +2155..215A;N +215B..215E;A +215F;N +2160..216B;A +216C..216F;N +2170..2179;A +217A..2184;N +2190..2199;A +219A..21B7;N +21B8..21B9;A +21BA..21D1;N +21D2;A +21D3;N +21D4;A +21D5..21E6;N +21E7;A +21E8..21FF;N +2200;A +2201;N +2202..2203;A +2204..2206;N +2207..2208;A +2209..220A;N +220B;A +220C..220E;N +220F;A +2210;N +2211;A +2212..2214;N +2215;A +2216..2219;N +221A;A +221B..221C;N +221D..2220;A +2221..2222;N +2223;A +2224;N +2225;A +2226;N +2227..222C;A +222D;N +222E;A +222F..2233;N +2234..2237;A +2238..223B;N +223C..223D;A +223E..2247;N +2248;A +2249..224B;N +224C;A +224D..2251;N +2252;A +2253..225F;N +2260..2261;A +2262..2263;N +2264..2267;A +2268..2269;N +226A..226B;A +226C..226D;N +226E..226F;A +2270..2281;N +2282..2283;A +2284..2285;N +2286..2287;A +2288..2294;N +2295;A +2296..2298;N +2299;A +229A..22A4;N +22A5;A +22A6..22BE;N +22BF;A +22C0..2311;N +2312;A +2313..2328;N +2329..232A;W +232B..23E7;N +2400..2426;N +2440..244A;N +2460..24E9;A +24EA;N +24EB..254B;A +254C..254F;N +2550..2573;A +2574..257F;N +2580..258F;A +2590..2591;N +2592..2595;A +2596..259F;N +25A0..25A1;A +25A2;N +25A3..25A9;A +25AA..25B1;N +25B2..25B3;A +25B4..25B5;N +25B6..25B7;A +25B8..25BB;N +25BC..25BD;A +25BE..25BF;N +25C0..25C1;A +25C2..25C5;N +25C6..25C8;A +25C9..25CA;N +25CB;A +25CC..25CD;N +25CE..25D1;A +25D2..25E1;N +25E2..25E5;A +25E6..25EE;N +25EF;A +25F0..2604;N +2605..2606;A +2607..2608;N +2609;A +260A..260D;N +260E..260F;A +2610..2613;N +2614..2615;A +2616..261B;N +261C;A +261D;N +261E;A +261F..263F;N +2640;A +2641;N +2642;A +2643..265F;N +2660..2661;A +2662;N +2663..2665;A +2666;N +2667..266A;A +266B;N +266C..266D;A +266E;N +266F;A +2670..269C;N +26A0..26B2;N +2701..2704;N +2706..2709;N +270C..2727;N +2729..273C;N +273D;A +273E..274B;N +274D;N +274F..2752;N +2756;N +2758..275E;N +2761..2775;N +2776..277F;A +2780..2794;N +2798..27AF;N +27B1..27BE;N +27C0..27CA;N +27D0..27E5;N +27E6..27EB;Na +27F0..2984;N +2985..2986;Na +2987..2B1A;N +2B20..2B23;N +2C00..2C2E;N +2C30..2C5E;N +2C60..2C6C;N +2C74..2C77;N +2C80..2CEA;N +2CF9..2D25;N +2D30..2D65;N +2D6F;N +2D80..2D96;N +2DA0..2DA6;N +2DA8..2DAE;N +2DB0..2DB6;N +2DB8..2DBE;N +2DC0..2DC6;N +2DC8..2DCE;N +2DD0..2DD6;N +2DD8..2DDE;N +2E00..2E17;N +2E1C..2E1D;N +2E80..2E99;W +2E9B..2EF3;W +2F00..2FD5;W +2FF0..2FFB;W +3000;F +3001..303E;W +303F;N +3041..3096;W +3099..30FF;W +3105..312C;W +3131..318E;W +3190..31B7;W +31C0..31CF;W +31F0..321E;W +3220..3243;W +3250..32FE;W +3300..33FF;W +3400..4DB5;W +4DC0..4DFF;N +4E00..9FBB;W +A000..A48C;W +A490..A4C6;W +A700..A71A;N +A720..A721;N +A800..A82B;N +A840..A877;N +AC00..D7A3;W +D800..DB7F;N +DB80..DBFF;N +DC00..DFFF;N +E000..F8FF;A +F900..FA2D;W +FA30..FA6A;W +FA70..FAD9;W +FB00..FB06;N +FB13..FB17;N +FB1D..FB36;N +FB38..FB3C;N +FB3E;N +FB40..FB41;N +FB43..FB44;N +FB46..FBB1;N +FBD3..FD3F;N +FD50..FD8F;N +FD92..FDC7;N +FDF0..FDFD;N +FE00..FE0F;A +FE10..FE19;W +FE20..FE23;N +FE30..FE52;W +FE54..FE66;W +FE68..FE6B;W +FE70..FE74;N +FE76..FEFC;N +FEFF;N +FF01..FF60;F +FF61..FFBE;H +FFC2..FFC7;H +FFCA..FFCF;H +FFD2..FFD7;H +FFDA..FFDC;H +FFE0..FFE6;F +FFE8..FFEE;H +FFF9..FFFC;N +FFFD;A +10000..1000B;N +1000D..10026;N +10028..1003A;N +1003C..1003D;N +1003F..1004D;N +10050..1005D;N +10080..100FA;N +10100..10102;N +10107..10133;N +10137..1018A;N +10300..1031E;N +10320..10323;N +10330..1034A;N +10380..1039D;N +1039F..103C3;N +103C8..103D5;N +10400..1049D;N +104A0..104A9;N +10800..10805;N +10808;N +1080A..10835;N +10837..10838;N +1083C;N +1083F;N +10900..10919;N +1091F;N +10A00..10A03;N +10A05..10A06;N +10A0C..10A13;N +10A15..10A17;N +10A19..10A33;N +10A38..10A3A;N +10A3F..10A47;N +10A50..10A58;N +12000..1236E;N +12400..12462;N +12470..12473;N +1D000..1D0F5;N +1D100..1D126;N +1D12A..1D1DD;N +1D200..1D245;N +1D300..1D356;N +1D360..1D371;N +1D400..1D454;N +1D456..1D49C;N +1D49E..1D49F;N +1D4A2;N +1D4A5..1D4A6;N +1D4A9..1D4AC;N +1D4AE..1D4B9;N +1D4BB;N +1D4BD..1D4C3;N +1D4C5..1D505;N +1D507..1D50A;N +1D50D..1D514;N +1D516..1D51C;N +1D51E..1D539;N +1D53B..1D53E;N +1D540..1D544;N +1D546;N +1D54A..1D550;N +1D552..1D6A5;N +1D6A8..1D7CB;N +1D7CE..1D7FF;N +20000..2A6D6;W +2A6D7..2F7FF;W +2F800..2FA1D;W +2FA1E..2FFFD;W +30000..3FFFD;W +E0001;N +E0020..E007F;N +E0100..E01EF;A +F0000..FFFFD;A +100000..10FFFD;A + +# EOF diff --git a/icuSources/data/unidata/base_unidata/GraphemeBreakProperty.txt b/icuSources/data/unidata/base_unidata/GraphemeBreakProperty.txt new file mode 100644 index 00000000..8805f362 --- /dev/null +++ b/icuSources/data/unidata/base_unidata/GraphemeBreakProperty.txt @@ -0,0 +1,1039 @@ +# GraphemeBreakProperty-5.0.0.txt +# Date: 2006-03-09, 23:14:04 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Property: Grapheme_Cluster_Break + +# All code points not explicitly listed for Grapheme_Cluster_Break +# have the value Other (XX). + +# @missing: 0000..10FFFF; Other + +# ================================================ + +000D ; CR + +# Total code points: 1 + +# ================================================ + +000A ; LF + +# Total code points: 1 + +# ================================================ + +0000..0009 ; Control +000B..000C ; Control +000E..001F ; Control +007F..009F ; Control +00AD ; Control +0600..0603 ; Control +06DD ; Control +070F ; Control +17B4..17B5 ; Control +200B ; Control +200E..200F ; Control +2028 ; Control +2029 ; Control +202A..202E ; Control +2060..2063 ; Control +206A..206F ; Control +FEFF ; Control +FFF9..FFFB ; Control +1D173..1D17A ; Control +E0001 ; Control +E0020..E007F ; Control + +# Total code points: 201 + +# ================================================ + +0300..036F ; Extend +0483..0486 ; Extend +0488..0489 ; Extend +0591..05BD ; Extend +05BF ; Extend +05C1..05C2 ; Extend +05C4..05C5 ; Extend +05C7 ; Extend +0610..0615 ; Extend +064B..065E ; Extend +0670 ; Extend +06D6..06DC ; Extend +06DE ; Extend +06DF..06E4 ; Extend +06E7..06E8 ; Extend +06EA..06ED ; Extend +0711 ; Extend +0730..074A ; Extend +07A6..07B0 ; Extend +07EB..07F3 ; Extend +0901..0902 ; Extend +093C ; Extend +0941..0948 ; Extend +094D ; Extend +0951..0954 ; Extend +0962..0963 ; Extend +0981 ; Extend +09BC ; Extend +09BE ; Extend +09C1..09C4 ; Extend +09CD ; Extend +09D7 ; Extend +09E2..09E3 ; Extend +0A01..0A02 ; Extend +0A3C ; Extend +0A41..0A42 ; Extend +0A47..0A48 ; Extend +0A4B..0A4D ; Extend +0A70..0A71 ; Extend +0A81..0A82 ; Extend +0ABC ; Extend +0AC1..0AC5 ; Extend +0AC7..0AC8 ; Extend +0ACD ; Extend +0AE2..0AE3 ; Extend +0B01 ; Extend +0B3C ; Extend +0B3E ; Extend +0B3F ; Extend +0B41..0B43 ; Extend +0B4D ; Extend +0B56 ; Extend +0B57 ; Extend +0B82 ; Extend +0BBE ; Extend +0BC0 ; Extend +0BCD ; Extend +0BD7 ; Extend +0C3E..0C40 ; Extend +0C46..0C48 ; Extend +0C4A..0C4D ; Extend +0C55..0C56 ; Extend +0CBC ; Extend +0CBF ; Extend +0CC2 ; Extend +0CC6 ; Extend +0CCC..0CCD ; Extend +0CD5..0CD6 ; Extend +0CE2..0CE3 ; Extend +0D3E ; Extend +0D41..0D43 ; Extend +0D4D ; Extend +0D57 ; Extend +0DCA ; Extend +0DCF ; Extend +0DD2..0DD4 ; Extend +0DD6 ; Extend +0DDF ; Extend +0E31 ; Extend +0E34..0E3A ; Extend +0E47..0E4E ; Extend +0EB1 ; Extend +0EB4..0EB9 ; Extend +0EBB..0EBC ; Extend +0EC8..0ECD ; Extend +0F18..0F19 ; Extend +0F35 ; Extend +0F37 ; Extend +0F39 ; Extend +0F71..0F7E ; Extend +0F80..0F84 ; Extend +0F86..0F87 ; Extend +0F90..0F97 ; Extend +0F99..0FBC ; Extend +0FC6 ; Extend +102D..1030 ; Extend +1032 ; Extend +1036..1037 ; Extend +1039 ; Extend +1058..1059 ; Extend +135F ; Extend +1712..1714 ; Extend +1732..1734 ; Extend +1752..1753 ; Extend +1772..1773 ; Extend +17B7..17BD ; Extend +17C6 ; Extend +17C9..17D3 ; Extend +17DD ; Extend +180B..180D ; Extend +18A9 ; Extend +1920..1922 ; Extend +1927..1928 ; Extend +1932 ; Extend +1939..193B ; Extend +1A17..1A18 ; Extend +1B00..1B03 ; Extend +1B34 ; Extend +1B36..1B3A ; Extend +1B3C ; Extend +1B42 ; Extend +1B6B..1B73 ; Extend +1DC0..1DCA ; Extend +1DFE..1DFF ; Extend +200C..200D ; Extend +20D0..20DC ; Extend +20DD..20E0 ; Extend +20E1 ; Extend +20E2..20E4 ; Extend +20E5..20EF ; Extend +302A..302F ; Extend +3099..309A ; Extend +A806 ; Extend +A80B ; Extend +A825..A826 ; Extend +FB1E ; Extend +FE00..FE0F ; Extend +FE20..FE23 ; Extend +10A01..10A03 ; Extend +10A05..10A06 ; Extend +10A0C..10A0F ; Extend +10A38..10A3A ; Extend +10A3F ; Extend +1D165 ; Extend +1D167..1D169 ; Extend +1D16E..1D172 ; Extend +1D17B..1D182 ; Extend +1D185..1D18B ; Extend +1D1AA..1D1AD ; Extend +1D242..1D244 ; Extend +E0100..E01EF ; Extend + +# Total code points: 911 + +# ================================================ + +1100..1159 ; L +115F ; L + +# Total code points: 91 + +# ================================================ + +1160..11A2 ; V + +# Total code points: 67 + +# ================================================ + +11A8..11F9 ; T + +# Total code points: 82 + +# ================================================ + +AC00 ; LV +AC1C ; LV +AC38 ; LV +AC54 ; LV +AC70 ; LV +AC8C ; LV +ACA8 ; LV +ACC4 ; LV +ACE0 ; LV +ACFC ; LV +AD18 ; LV +AD34 ; LV +AD50 ; LV +AD6C ; LV +AD88 ; LV +ADA4 ; LV +ADC0 ; LV +ADDC ; LV +ADF8 ; LV +AE14 ; LV +AE30 ; LV +AE4C ; LV +AE68 ; LV +AE84 ; LV +AEA0 ; LV +AEBC ; LV +AED8 ; LV +AEF4 ; LV +AF10 ; LV +AF2C ; LV +AF48 ; LV +AF64 ; LV +AF80 ; LV +AF9C ; LV +AFB8 ; LV +AFD4 ; LV +AFF0 ; LV +B00C ; LV +B028 ; LV +B044 ; LV +B060 ; LV +B07C ; LV +B098 ; LV +B0B4 ; LV +B0D0 ; LV +B0EC ; LV +B108 ; LV +B124 ; LV +B140 ; LV +B15C ; LV +B178 ; LV +B194 ; LV +B1B0 ; LV +B1CC ; LV +B1E8 ; LV +B204 ; LV +B220 ; LV +B23C ; LV +B258 ; LV +B274 ; LV +B290 ; LV +B2AC ; LV +B2C8 ; LV +B2E4 ; LV +B300 ; LV +B31C ; LV +B338 ; LV +B354 ; LV +B370 ; LV +B38C ; LV +B3A8 ; LV +B3C4 ; LV +B3E0 ; LV +B3FC ; LV +B418 ; LV +B434 ; LV +B450 ; LV +B46C ; LV +B488 ; LV +B4A4 ; LV +B4C0 ; LV +B4DC ; LV +B4F8 ; LV +B514 ; LV +B530 ; LV +B54C ; LV +B568 ; LV +B584 ; LV +B5A0 ; LV +B5BC ; LV +B5D8 ; LV +B5F4 ; LV +B610 ; LV +B62C ; LV +B648 ; LV +B664 ; LV +B680 ; LV +B69C ; LV +B6B8 ; LV +B6D4 ; LV +B6F0 ; LV +B70C ; LV +B728 ; LV +B744 ; LV +B760 ; LV +B77C ; LV +B798 ; LV +B7B4 ; LV +B7D0 ; LV +B7EC ; LV +B808 ; LV +B824 ; LV +B840 ; LV +B85C ; LV +B878 ; LV +B894 ; LV +B8B0 ; LV +B8CC ; LV +B8E8 ; LV +B904 ; LV +B920 ; LV +B93C ; LV +B958 ; LV +B974 ; LV +B990 ; LV +B9AC ; LV +B9C8 ; LV +B9E4 ; LV +BA00 ; LV +BA1C ; LV +BA38 ; LV +BA54 ; LV +BA70 ; LV +BA8C ; LV +BAA8 ; LV +BAC4 ; LV +BAE0 ; LV +BAFC ; LV +BB18 ; LV +BB34 ; LV +BB50 ; LV +BB6C ; LV +BB88 ; LV +BBA4 ; LV +BBC0 ; LV +BBDC ; LV +BBF8 ; LV +BC14 ; LV +BC30 ; LV +BC4C ; LV +BC68 ; LV +BC84 ; LV +BCA0 ; LV +BCBC ; LV +BCD8 ; LV +BCF4 ; LV +BD10 ; LV +BD2C ; LV +BD48 ; LV +BD64 ; LV +BD80 ; LV +BD9C ; LV +BDB8 ; LV +BDD4 ; LV +BDF0 ; LV +BE0C ; LV +BE28 ; LV +BE44 ; LV +BE60 ; LV +BE7C ; LV +BE98 ; LV +BEB4 ; LV +BED0 ; LV +BEEC ; LV +BF08 ; LV +BF24 ; LV +BF40 ; LV +BF5C ; LV +BF78 ; LV +BF94 ; LV +BFB0 ; LV +BFCC ; LV +BFE8 ; LV +C004 ; LV +C020 ; LV +C03C ; LV +C058 ; LV +C074 ; LV +C090 ; LV +C0AC ; LV +C0C8 ; LV +C0E4 ; LV +C100 ; LV +C11C ; LV +C138 ; LV +C154 ; LV +C170 ; LV +C18C ; LV +C1A8 ; LV +C1C4 ; LV +C1E0 ; LV +C1FC ; LV +C218 ; LV +C234 ; LV +C250 ; LV +C26C ; LV +C288 ; LV +C2A4 ; LV +C2C0 ; LV +C2DC ; LV +C2F8 ; LV +C314 ; LV +C330 ; LV +C34C ; LV +C368 ; LV +C384 ; LV +C3A0 ; LV +C3BC ; LV +C3D8 ; LV +C3F4 ; LV +C410 ; LV +C42C ; LV +C448 ; LV +C464 ; LV +C480 ; LV +C49C ; LV +C4B8 ; LV +C4D4 ; LV +C4F0 ; LV +C50C ; LV +C528 ; LV +C544 ; LV +C560 ; LV +C57C ; LV +C598 ; LV +C5B4 ; LV +C5D0 ; LV +C5EC ; LV +C608 ; LV +C624 ; LV +C640 ; LV +C65C ; LV +C678 ; LV +C694 ; LV +C6B0 ; LV +C6CC ; LV +C6E8 ; LV +C704 ; LV +C720 ; LV +C73C ; LV +C758 ; LV +C774 ; LV +C790 ; LV +C7AC ; LV +C7C8 ; LV +C7E4 ; LV +C800 ; LV +C81C ; LV +C838 ; LV +C854 ; LV +C870 ; LV +C88C ; LV +C8A8 ; LV +C8C4 ; LV +C8E0 ; LV +C8FC ; LV +C918 ; LV +C934 ; LV +C950 ; LV +C96C ; LV +C988 ; LV +C9A4 ; LV +C9C0 ; LV +C9DC ; LV +C9F8 ; LV +CA14 ; LV +CA30 ; LV +CA4C ; LV +CA68 ; LV +CA84 ; LV +CAA0 ; LV +CABC ; LV +CAD8 ; LV +CAF4 ; LV +CB10 ; LV +CB2C ; LV +CB48 ; LV +CB64 ; LV +CB80 ; LV +CB9C ; LV +CBB8 ; LV +CBD4 ; LV +CBF0 ; LV +CC0C ; LV +CC28 ; LV +CC44 ; LV +CC60 ; LV +CC7C ; LV +CC98 ; LV +CCB4 ; LV +CCD0 ; LV +CCEC ; LV +CD08 ; LV +CD24 ; LV +CD40 ; LV +CD5C ; LV +CD78 ; LV +CD94 ; LV +CDB0 ; LV +CDCC ; LV +CDE8 ; LV +CE04 ; LV +CE20 ; LV +CE3C ; LV +CE58 ; LV +CE74 ; LV +CE90 ; LV +CEAC ; LV +CEC8 ; LV +CEE4 ; LV +CF00 ; LV +CF1C ; LV +CF38 ; LV +CF54 ; LV +CF70 ; LV +CF8C ; LV +CFA8 ; LV +CFC4 ; LV +CFE0 ; LV +CFFC ; LV +D018 ; LV +D034 ; LV +D050 ; LV +D06C ; LV +D088 ; LV +D0A4 ; LV +D0C0 ; LV +D0DC ; LV +D0F8 ; LV +D114 ; LV +D130 ; LV +D14C ; LV +D168 ; LV +D184 ; LV +D1A0 ; LV +D1BC ; LV +D1D8 ; LV +D1F4 ; LV +D210 ; LV +D22C ; LV +D248 ; LV +D264 ; LV +D280 ; LV +D29C ; LV +D2B8 ; LV +D2D4 ; LV +D2F0 ; LV +D30C ; LV +D328 ; LV +D344 ; LV +D360 ; LV +D37C ; LV +D398 ; LV +D3B4 ; LV +D3D0 ; LV +D3EC ; LV +D408 ; LV +D424 ; LV +D440 ; LV +D45C ; LV +D478 ; LV +D494 ; LV +D4B0 ; LV +D4CC ; LV +D4E8 ; LV +D504 ; LV +D520 ; LV +D53C ; LV +D558 ; LV +D574 ; LV +D590 ; LV +D5AC ; LV +D5C8 ; LV +D5E4 ; LV +D600 ; LV +D61C ; LV +D638 ; LV +D654 ; LV +D670 ; LV +D68C ; LV +D6A8 ; LV +D6C4 ; LV +D6E0 ; LV +D6FC ; LV +D718 ; LV +D734 ; LV +D750 ; LV +D76C ; LV +D788 ; LV + +# Total code points: 399 + +# ================================================ + +AC01..AC1B ; LVT +AC1D..AC37 ; LVT +AC39..AC53 ; LVT +AC55..AC6F ; LVT +AC71..AC8B ; LVT +AC8D..ACA7 ; LVT +ACA9..ACC3 ; LVT +ACC5..ACDF ; LVT +ACE1..ACFB ; LVT +ACFD..AD17 ; LVT +AD19..AD33 ; LVT +AD35..AD4F ; LVT +AD51..AD6B ; LVT +AD6D..AD87 ; LVT +AD89..ADA3 ; LVT +ADA5..ADBF ; LVT +ADC1..ADDB ; LVT +ADDD..ADF7 ; LVT +ADF9..AE13 ; LVT +AE15..AE2F ; LVT +AE31..AE4B ; LVT +AE4D..AE67 ; LVT +AE69..AE83 ; LVT +AE85..AE9F ; LVT +AEA1..AEBB ; LVT +AEBD..AED7 ; LVT +AED9..AEF3 ; LVT +AEF5..AF0F ; LVT +AF11..AF2B ; LVT +AF2D..AF47 ; LVT +AF49..AF63 ; LVT +AF65..AF7F ; LVT +AF81..AF9B ; LVT +AF9D..AFB7 ; LVT +AFB9..AFD3 ; LVT +AFD5..AFEF ; LVT +AFF1..B00B ; LVT +B00D..B027 ; LVT +B029..B043 ; LVT +B045..B05F ; LVT +B061..B07B ; LVT +B07D..B097 ; LVT +B099..B0B3 ; LVT +B0B5..B0CF ; LVT +B0D1..B0EB ; LVT +B0ED..B107 ; LVT +B109..B123 ; LVT +B125..B13F ; LVT +B141..B15B ; LVT +B15D..B177 ; LVT +B179..B193 ; LVT +B195..B1AF ; LVT +B1B1..B1CB ; LVT +B1CD..B1E7 ; LVT +B1E9..B203 ; LVT +B205..B21F ; LVT +B221..B23B ; LVT +B23D..B257 ; LVT +B259..B273 ; LVT +B275..B28F ; LVT +B291..B2AB ; LVT +B2AD..B2C7 ; LVT +B2C9..B2E3 ; LVT +B2E5..B2FF ; LVT +B301..B31B ; LVT +B31D..B337 ; LVT +B339..B353 ; LVT +B355..B36F ; LVT +B371..B38B ; LVT +B38D..B3A7 ; LVT +B3A9..B3C3 ; LVT +B3C5..B3DF ; LVT +B3E1..B3FB ; LVT +B3FD..B417 ; LVT +B419..B433 ; LVT +B435..B44F ; LVT +B451..B46B ; LVT +B46D..B487 ; LVT +B489..B4A3 ; LVT +B4A5..B4BF ; LVT +B4C1..B4DB ; LVT +B4DD..B4F7 ; LVT +B4F9..B513 ; LVT +B515..B52F ; LVT +B531..B54B ; LVT +B54D..B567 ; LVT +B569..B583 ; LVT +B585..B59F ; LVT +B5A1..B5BB ; LVT +B5BD..B5D7 ; LVT +B5D9..B5F3 ; LVT +B5F5..B60F ; LVT +B611..B62B ; LVT +B62D..B647 ; LVT +B649..B663 ; LVT +B665..B67F ; LVT +B681..B69B ; LVT +B69D..B6B7 ; LVT +B6B9..B6D3 ; LVT +B6D5..B6EF ; LVT +B6F1..B70B ; LVT +B70D..B727 ; LVT +B729..B743 ; LVT +B745..B75F ; LVT +B761..B77B ; LVT +B77D..B797 ; LVT +B799..B7B3 ; LVT +B7B5..B7CF ; LVT +B7D1..B7EB ; LVT +B7ED..B807 ; LVT +B809..B823 ; LVT +B825..B83F ; LVT +B841..B85B ; LVT +B85D..B877 ; LVT +B879..B893 ; LVT +B895..B8AF ; LVT +B8B1..B8CB ; LVT +B8CD..B8E7 ; LVT +B8E9..B903 ; LVT +B905..B91F ; LVT +B921..B93B ; LVT +B93D..B957 ; LVT +B959..B973 ; LVT +B975..B98F ; LVT +B991..B9AB ; LVT +B9AD..B9C7 ; LVT +B9C9..B9E3 ; LVT +B9E5..B9FF ; LVT +BA01..BA1B ; LVT +BA1D..BA37 ; LVT +BA39..BA53 ; LVT +BA55..BA6F ; LVT +BA71..BA8B ; LVT +BA8D..BAA7 ; LVT +BAA9..BAC3 ; LVT +BAC5..BADF ; LVT +BAE1..BAFB ; LVT +BAFD..BB17 ; LVT +BB19..BB33 ; LVT +BB35..BB4F ; LVT +BB51..BB6B ; LVT +BB6D..BB87 ; LVT +BB89..BBA3 ; LVT +BBA5..BBBF ; LVT +BBC1..BBDB ; LVT +BBDD..BBF7 ; LVT +BBF9..BC13 ; LVT +BC15..BC2F ; LVT +BC31..BC4B ; LVT +BC4D..BC67 ; LVT +BC69..BC83 ; LVT +BC85..BC9F ; LVT +BCA1..BCBB ; LVT +BCBD..BCD7 ; LVT +BCD9..BCF3 ; LVT +BCF5..BD0F ; LVT +BD11..BD2B ; LVT +BD2D..BD47 ; LVT +BD49..BD63 ; LVT +BD65..BD7F ; LVT +BD81..BD9B ; LVT +BD9D..BDB7 ; LVT +BDB9..BDD3 ; LVT +BDD5..BDEF ; LVT +BDF1..BE0B ; LVT +BE0D..BE27 ; LVT +BE29..BE43 ; LVT +BE45..BE5F ; LVT +BE61..BE7B ; LVT +BE7D..BE97 ; LVT +BE99..BEB3 ; LVT +BEB5..BECF ; LVT +BED1..BEEB ; LVT +BEED..BF07 ; LVT +BF09..BF23 ; LVT +BF25..BF3F ; LVT +BF41..BF5B ; LVT +BF5D..BF77 ; LVT +BF79..BF93 ; LVT +BF95..BFAF ; LVT +BFB1..BFCB ; LVT +BFCD..BFE7 ; LVT +BFE9..C003 ; LVT +C005..C01F ; LVT +C021..C03B ; LVT +C03D..C057 ; LVT +C059..C073 ; LVT +C075..C08F ; LVT +C091..C0AB ; LVT +C0AD..C0C7 ; LVT +C0C9..C0E3 ; LVT +C0E5..C0FF ; LVT +C101..C11B ; LVT +C11D..C137 ; LVT +C139..C153 ; LVT +C155..C16F ; LVT +C171..C18B ; LVT +C18D..C1A7 ; LVT +C1A9..C1C3 ; LVT +C1C5..C1DF ; LVT +C1E1..C1FB ; LVT +C1FD..C217 ; LVT +C219..C233 ; LVT +C235..C24F ; LVT +C251..C26B ; LVT +C26D..C287 ; LVT +C289..C2A3 ; LVT +C2A5..C2BF ; LVT +C2C1..C2DB ; LVT +C2DD..C2F7 ; LVT +C2F9..C313 ; LVT +C315..C32F ; LVT +C331..C34B ; LVT +C34D..C367 ; LVT +C369..C383 ; LVT +C385..C39F ; LVT +C3A1..C3BB ; LVT +C3BD..C3D7 ; LVT +C3D9..C3F3 ; LVT +C3F5..C40F ; LVT +C411..C42B ; LVT +C42D..C447 ; LVT +C449..C463 ; LVT +C465..C47F ; LVT +C481..C49B ; LVT +C49D..C4B7 ; LVT +C4B9..C4D3 ; LVT +C4D5..C4EF ; LVT +C4F1..C50B ; LVT +C50D..C527 ; LVT +C529..C543 ; LVT +C545..C55F ; LVT +C561..C57B ; LVT +C57D..C597 ; LVT +C599..C5B3 ; LVT +C5B5..C5CF ; LVT +C5D1..C5EB ; LVT +C5ED..C607 ; LVT +C609..C623 ; LVT +C625..C63F ; LVT +C641..C65B ; LVT +C65D..C677 ; LVT +C679..C693 ; LVT +C695..C6AF ; LVT +C6B1..C6CB ; LVT +C6CD..C6E7 ; LVT +C6E9..C703 ; LVT +C705..C71F ; LVT +C721..C73B ; LVT +C73D..C757 ; LVT +C759..C773 ; LVT +C775..C78F ; LVT +C791..C7AB ; LVT +C7AD..C7C7 ; LVT +C7C9..C7E3 ; LVT +C7E5..C7FF ; LVT +C801..C81B ; LVT +C81D..C837 ; LVT +C839..C853 ; LVT +C855..C86F ; LVT +C871..C88B ; LVT +C88D..C8A7 ; LVT +C8A9..C8C3 ; LVT +C8C5..C8DF ; LVT +C8E1..C8FB ; LVT +C8FD..C917 ; LVT +C919..C933 ; LVT +C935..C94F ; LVT +C951..C96B ; LVT +C96D..C987 ; LVT +C989..C9A3 ; LVT +C9A5..C9BF ; LVT +C9C1..C9DB ; LVT +C9DD..C9F7 ; LVT +C9F9..CA13 ; LVT +CA15..CA2F ; LVT +CA31..CA4B ; LVT +CA4D..CA67 ; LVT +CA69..CA83 ; LVT +CA85..CA9F ; LVT +CAA1..CABB ; LVT +CABD..CAD7 ; LVT +CAD9..CAF3 ; LVT +CAF5..CB0F ; LVT +CB11..CB2B ; LVT +CB2D..CB47 ; LVT +CB49..CB63 ; LVT +CB65..CB7F ; LVT +CB81..CB9B ; LVT +CB9D..CBB7 ; LVT +CBB9..CBD3 ; LVT +CBD5..CBEF ; LVT +CBF1..CC0B ; LVT +CC0D..CC27 ; LVT +CC29..CC43 ; LVT +CC45..CC5F ; LVT +CC61..CC7B ; LVT +CC7D..CC97 ; LVT +CC99..CCB3 ; LVT +CCB5..CCCF ; LVT +CCD1..CCEB ; LVT +CCED..CD07 ; LVT +CD09..CD23 ; LVT +CD25..CD3F ; LVT +CD41..CD5B ; LVT +CD5D..CD77 ; LVT +CD79..CD93 ; LVT +CD95..CDAF ; LVT +CDB1..CDCB ; LVT +CDCD..CDE7 ; LVT +CDE9..CE03 ; LVT +CE05..CE1F ; LVT +CE21..CE3B ; LVT +CE3D..CE57 ; LVT +CE59..CE73 ; LVT +CE75..CE8F ; LVT +CE91..CEAB ; LVT +CEAD..CEC7 ; LVT +CEC9..CEE3 ; LVT +CEE5..CEFF ; LVT +CF01..CF1B ; LVT +CF1D..CF37 ; LVT +CF39..CF53 ; LVT +CF55..CF6F ; LVT +CF71..CF8B ; LVT +CF8D..CFA7 ; LVT +CFA9..CFC3 ; LVT +CFC5..CFDF ; LVT +CFE1..CFFB ; LVT +CFFD..D017 ; LVT +D019..D033 ; LVT +D035..D04F ; LVT +D051..D06B ; LVT +D06D..D087 ; LVT +D089..D0A3 ; LVT +D0A5..D0BF ; LVT +D0C1..D0DB ; LVT +D0DD..D0F7 ; LVT +D0F9..D113 ; LVT +D115..D12F ; LVT +D131..D14B ; LVT +D14D..D167 ; LVT +D169..D183 ; LVT +D185..D19F ; LVT +D1A1..D1BB ; LVT +D1BD..D1D7 ; LVT +D1D9..D1F3 ; LVT +D1F5..D20F ; LVT +D211..D22B ; LVT +D22D..D247 ; LVT +D249..D263 ; LVT +D265..D27F ; LVT +D281..D29B ; LVT +D29D..D2B7 ; LVT +D2B9..D2D3 ; LVT +D2D5..D2EF ; LVT +D2F1..D30B ; LVT +D30D..D327 ; LVT +D329..D343 ; LVT +D345..D35F ; LVT +D361..D37B ; LVT +D37D..D397 ; LVT +D399..D3B3 ; LVT +D3B5..D3CF ; LVT +D3D1..D3EB ; LVT +D3ED..D407 ; LVT +D409..D423 ; LVT +D425..D43F ; LVT +D441..D45B ; LVT +D45D..D477 ; LVT +D479..D493 ; LVT +D495..D4AF ; LVT +D4B1..D4CB ; LVT +D4CD..D4E7 ; LVT +D4E9..D503 ; LVT +D505..D51F ; LVT +D521..D53B ; LVT +D53D..D557 ; LVT +D559..D573 ; LVT +D575..D58F ; LVT +D591..D5AB ; LVT +D5AD..D5C7 ; LVT +D5C9..D5E3 ; LVT +D5E5..D5FF ; LVT +D601..D61B ; LVT +D61D..D637 ; LVT +D639..D653 ; LVT +D655..D66F ; LVT +D671..D68B ; LVT +D68D..D6A7 ; LVT +D6A9..D6C3 ; LVT +D6C5..D6DF ; LVT +D6E1..D6FB ; LVT +D6FD..D717 ; LVT +D719..D733 ; LVT +D735..D74F ; LVT +D751..D76B ; LVT +D76D..D787 ; LVT +D789..D7A3 ; LVT + +# Total code points: 10773 + +# EOF diff --git a/icuSources/data/unidata/base_unidata/LineBreak.txt b/icuSources/data/unidata/base_unidata/LineBreak.txt new file mode 100644 index 00000000..13833b3b --- /dev/null +++ b/icuSources/data/unidata/base_unidata/LineBreak.txt @@ -0,0 +1,1968 @@ +# LineBreak-5.0.0.txt +# Date: 2006-05-23, 11:43:00 PST [KW] +# +# Line Break Properties +# +# This file is a normative contributory data file in the +# Unicode Character Database. +# It contains both normative and informative data. +# +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# The format is two fields separated by a semicolon. +# Field 0: Unicode value +# Field 1: LineBreak property, consisting of one of the following values: +# Normative: +# "BK", "CR", "LF", "CM", "SG", "GL", "CB", "SP", "ZW", +# "NL", "WJ", "JL", "JV", "JT", "H2", "H3" +# Informative: +# "XX", "OP", "CL", "QU", "NS", "EX", "SY", +# "IS", "PR", "PO", "NU", "AL", "ID", "IN", "HY", +# "BB", "BA", "SA", "AI", "B2" +# - All code points, assigned and unassigned, that are not listed +# explicitly are given the value "XX". +# - Characters ranges are specified as for other property files in +# the Unicode Character Database. +# +# The Unicode name of each character is provided in a comment for help +# in identifying the characters. +# +# See UAX #14: Line Breaking Properties, for more information +# +# @missing: 0000..10FFFF; XX +0000..0008;CM +0009;BA +000A;LF +000B..000C;BK +000D;CR +000E..001F;CM +0020;SP +0021;EX +0022;QU +0023;AL +0024;PR +0025;PO +0026;AL +0027;QU +0028;OP +0029;CL +002A;AL +002B;PR +002C;IS +002D;HY +002E;IS +002F;SY +0030..0039;NU +003A..003B;IS +003C..003E;AL +003F;EX +0040..005A;AL +005B;OP +005C;PR +005D;CL +005E..007A;AL +007B;OP +007C;BA +007D;CL +007E;AL +007F..0084;CM +0085;NL +0086..009F;CM +00A0;GL +00A1;AI +00A2;PO +00A3..00A5;PR +00A6;AL +00A7..00A8;AI +00A9;AL +00AA;AI +00AB;QU +00AC;AL +00AD;BA +00AE..00AF;AL +00B0;PO +00B1;PR +00B2..00B3;AI +00B4;BB +00B5;AL +00B6..00BA;AI +00BB;QU +00BC..00BF;AI +00C0..00D6;AL +00D7;AI +00D8..00F6;AL +00F7;AI +00F8..02C6;AL +02C7;AI +02C8;BB +02C9..02CB;AI +02CC;BB +02CD;AI +02CE..02CF;AL +02D0;AI +02D1..02D7;AL +02D8..02DB;AI +02DC;AL +02DD;AI +02DE..02FF;AL +0300..034E;CM +034F;GL +0350..035B;CM +035C..0362;GL +0363..036F;CM +0374..0375;AL +037A..037D;AL +037E;IS +0384..038A;AL +038C;AL +038E..03A1;AL +03A3..03CE;AL +03D0..0482;AL +0483..0486;CM +0488..0489;CM +048A..0513;AL +0531..0556;AL +0559..055F;AL +0561..0587;AL +0589;IS +058A;BA +0591..05BD;CM +05BE;BA +05BF;CM +05C0;AL +05C1..05C2;CM +05C3;AL +05C4..05C5;CM +05C6;EX +05C7;CM +05D0..05EA;AL +05F0..05F4;AL +0600..0603;AL +060B;PO +060C;EX +060D;IS +060E..060F;AL +0610..0615;CM +061B;EX +061E..061F;EX +0621..063A;AL +0640..064A;AL +064B..065E;CM +0660..0669;NU +066A;EX +066B..066C;NU +066D..066F;AL +0670;CM +0671..06D3;AL +06D4;EX +06D5;AL +06D6..06DC;CM +06DD;AL +06DE..06E4;CM +06E5..06E6;AL +06E7..06E8;CM +06E9;AL +06EA..06ED;CM +06EE..06EF;AL +06F0..06F9;NU +06FA..070D;AL +070F..0710;AL +0711;CM +0712..072F;AL +0730..074A;CM +074D..076D;AL +0780..07A5;AL +07A6..07B0;CM +07B1;AL +07C0..07C9;NU +07CA..07EA;AL +07EB..07F3;CM +07F4..07F7;AL +07F8;IS +07F9;EX +07FA;AL +0901..0903;CM +0904..0939;AL +093C;CM +093D;AL +093E..094D;CM +0950;AL +0951..0954;CM +0958..0961;AL +0962..0963;CM +0964..0965;BA +0966..096F;NU +0970;AL +097B..097F;AL +0981..0983;CM +0985..098C;AL +098F..0990;AL +0993..09A8;AL +09AA..09B0;AL +09B2;AL +09B6..09B9;AL +09BC;CM +09BD;AL +09BE..09C4;CM +09C7..09C8;CM +09CB..09CD;CM +09CE;AL +09D7;CM +09DC..09DD;AL +09DF..09E1;AL +09E2..09E3;CM +09E6..09EF;NU +09F0..09F1;AL +09F2..09F3;PR +09F4..09FA;AL +0A01..0A03;CM +0A05..0A0A;AL +0A0F..0A10;AL +0A13..0A28;AL +0A2A..0A30;AL +0A32..0A33;AL +0A35..0A36;AL +0A38..0A39;AL +0A3C;CM +0A3E..0A42;CM +0A47..0A48;CM +0A4B..0A4D;CM +0A59..0A5C;AL +0A5E;AL +0A66..0A6F;NU +0A70..0A71;CM +0A72..0A74;AL +0A81..0A83;CM +0A85..0A8D;AL +0A8F..0A91;AL +0A93..0AA8;AL +0AAA..0AB0;AL +0AB2..0AB3;AL +0AB5..0AB9;AL +0ABC;CM +0ABD;AL +0ABE..0AC5;CM +0AC7..0AC9;CM +0ACB..0ACD;CM +0AD0;AL +0AE0..0AE1;AL +0AE2..0AE3;CM +0AE6..0AEF;NU +0AF1;PR +0B01..0B03;CM +0B05..0B0C;AL +0B0F..0B10;AL +0B13..0B28;AL +0B2A..0B30;AL +0B32..0B33;AL +0B35..0B39;AL +0B3C;CM +0B3D;AL +0B3E..0B43;CM +0B47..0B48;CM +0B4B..0B4D;CM +0B56..0B57;CM +0B5C..0B5D;AL +0B5F..0B61;AL +0B66..0B6F;NU +0B70..0B71;AL +0B82;CM +0B83;AL +0B85..0B8A;AL +0B8E..0B90;AL +0B92..0B95;AL +0B99..0B9A;AL +0B9C;AL +0B9E..0B9F;AL +0BA3..0BA4;AL +0BA8..0BAA;AL +0BAE..0BB9;AL +0BBE..0BC2;CM +0BC6..0BC8;CM +0BCA..0BCD;CM +0BD7;CM +0BE6..0BEF;NU +0BF0..0BF8;AL +0BF9;PR +0BFA;AL +0C01..0C03;CM +0C05..0C0C;AL +0C0E..0C10;AL +0C12..0C28;AL +0C2A..0C33;AL +0C35..0C39;AL +0C3E..0C44;CM +0C46..0C48;CM +0C4A..0C4D;CM +0C55..0C56;CM +0C60..0C61;AL +0C66..0C6F;NU +0C82..0C83;CM +0C85..0C8C;AL +0C8E..0C90;AL +0C92..0CA8;AL +0CAA..0CB3;AL +0CB5..0CB9;AL +0CBC;CM +0CBD;AL +0CBE..0CC4;CM +0CC6..0CC8;CM +0CCA..0CCD;CM +0CD5..0CD6;CM +0CDE;AL +0CE0..0CE1;AL +0CE2..0CE3;CM +0CE6..0CEF;NU +0CF1..0CF2;AL +0D02..0D03;CM +0D05..0D0C;AL +0D0E..0D10;AL +0D12..0D28;AL +0D2A..0D39;AL +0D3E..0D43;CM +0D46..0D48;CM +0D4A..0D4D;CM +0D57;CM +0D60..0D61;AL +0D66..0D6F;NU +0D82..0D83;CM +0D85..0D96;AL +0D9A..0DB1;AL +0DB3..0DBB;AL +0DBD;AL +0DC0..0DC6;AL +0DCA;CM +0DCF..0DD4;CM +0DD6;CM +0DD8..0DDF;CM +0DF2..0DF3;CM +0DF4;AL +0E01..0E3A;SA +0E3F;PR +0E40..0E4E;SA +0E4F;AL +0E50..0E59;NU +0E5A..0E5B;BA +0E81..0E82;SA +0E84;SA +0E87..0E88;SA +0E8A;SA +0E8D;SA +0E94..0E97;SA +0E99..0E9F;SA +0EA1..0EA3;SA +0EA5;SA +0EA7;SA +0EAA..0EAB;SA +0EAD..0EB9;SA +0EBB..0EBD;SA +0EC0..0EC4;SA +0EC6;SA +0EC8..0ECD;SA +0ED0..0ED9;NU +0EDC..0EDD;SA +0F00;AL +0F01..0F04;BB +0F05;AL +0F06..0F07;BB +0F08;GL +0F09..0F0A;BB +0F0B;BA +0F0C;GL +0F0D..0F11;EX +0F12;GL +0F13;AL +0F14;EX +0F15..0F17;AL +0F18..0F19;CM +0F1A..0F1F;AL +0F20..0F29;NU +0F2A..0F33;AL +0F34;BA +0F35;CM +0F36;AL +0F37;CM +0F38;AL +0F39;CM +0F3A;OP +0F3B;CL +0F3C;OP +0F3D;CL +0F3E..0F3F;CM +0F40..0F47;AL +0F49..0F6A;AL +0F71..0F7E;CM +0F7F;BA +0F80..0F84;CM +0F85;BA +0F86..0F87;CM +0F88..0F8B;AL +0F90..0F97;CM +0F99..0FBC;CM +0FBE..0FBF;BA +0FC0..0FC5;AL +0FC6;CM +0FC7..0FCC;AL +0FCF;AL +0FD0..0FD1;BB +1000..1021;SA +1023..1027;SA +1029..102A;SA +102C..1032;SA +1036..1039;SA +1040..1049;NU +104A..104B;BA +104C..104F;AL +1050..1059;SA +10A0..10C5;AL +10D0..10FC;AL +1100..1159;JL +115F;JL +1160..11A2;JV +11A8..11F9;JT +1200..1248;AL +124A..124D;AL +1250..1256;AL +1258;AL +125A..125D;AL +1260..1288;AL +128A..128D;AL +1290..12B0;AL +12B2..12B5;AL +12B8..12BE;AL +12C0;AL +12C2..12C5;AL +12C8..12D6;AL +12D8..1310;AL +1312..1315;AL +1318..135A;AL +135F;CM +1360;AL +1361;BA +1362..137C;AL +1380..1399;AL +13A0..13F4;AL +1401..1676;AL +1680;BA +1681..169A;AL +169B;OP +169C;CL +16A0..16EA;AL +16EB..16ED;BA +16EE..16F0;AL +1700..170C;AL +170E..1711;AL +1712..1714;CM +1720..1731;AL +1732..1734;CM +1735..1736;BA +1740..1751;AL +1752..1753;CM +1760..176C;AL +176E..1770;AL +1772..1773;CM +1780..17D3;SA +17D4..17D5;BA +17D6;NS +17D7;SA +17D8;BA +17D9;AL +17DA;BA +17DB;PR +17DC..17DD;SA +17E0..17E9;NU +17F0..17F9;AL +1800..1801;AL +1802..1805;BA +1806;BB +1807;AL +1808..1809;BA +180A;AL +180B..180D;CM +180E;GL +1810..1819;NU +1820..1877;AL +1880..18A8;AL +18A9;CM +1900..191C;AL +1920..192B;CM +1930..193B;CM +1940;AL +1944..1945;EX +1946..194F;NU +1950..196D;SA +1970..1974;SA +1980..19A9;SA +19B0..19C9;SA +19D0..19D9;NU +19DE..19DF;SA +19E0..1A16;AL +1A17..1A1B;CM +1A1E;BA +1A1F;AL +1B00..1B04;CM +1B05..1B33;AL +1B34..1B44;CM +1B45..1B4B;AL +1B50..1B59;NU +1B5A..1B60;BA +1B61..1B6A;AL +1B6B..1B73;CM +1B74..1B7C;AL +1D00..1DBF;AL +1DC0..1DCA;CM +1DFE..1DFF;CM +1E00..1E9B;AL +1EA0..1EF9;AL +1F00..1F15;AL +1F18..1F1D;AL +1F20..1F45;AL +1F48..1F4D;AL +1F50..1F57;AL +1F59;AL +1F5B;AL +1F5D;AL +1F5F..1F7D;AL +1F80..1FB4;AL +1FB6..1FC4;AL +1FC6..1FD3;AL +1FD6..1FDB;AL +1FDD..1FEF;AL +1FF2..1FF4;AL +1FF6..1FFE;AL +2000..2006;BA +2007;GL +2008..200A;BA +200B;ZW +200C..200F;CM +2010;BA +2011;GL +2012..2013;BA +2014;B2 +2015..2016;AI +2017;AL +2018..2019;QU +201A;OP +201B..201D;QU +201E;OP +201F;QU +2020..2021;AI +2022..2023;AL +2024..2026;IN +2027;BA +2028..2029;BK +202A..202E;CM +202F;GL +2030..2037;PO +2038;AL +2039..203A;QU +203B;AI +203C..203D;NS +203E..2043;AL +2044;IS +2045;OP +2046;CL +2047..2049;NS +204A..2055;AL +2056;BA +2057;AL +2058..205B;BA +205C;AL +205D..205F;BA +2060;WJ +2061..2063;AL +206A..206F;CM +2070..2071;AL +2074;AI +2075..207C;AL +207D;OP +207E;CL +207F;AI +2080;AL +2081..2084;AI +2085..208C;AL +208D;OP +208E;CL +2090..2094;AL +20A0..20A6;PR +20A7;PO +20A8..20B5;PR +20D0..20EF;CM +2100..2102;AL +2103;PO +2104;AL +2105;AI +2106..2108;AL +2109;PO +210A..2112;AL +2113;AI +2114..2115;AL +2116;PR +2117..2120;AL +2121..2122;AI +2123..212A;AL +212B;AI +212C..214E;AL +2153;AL +2154..2155;AI +2156..215A;AL +215B;AI +215C..215D;AL +215E;AI +215F;AL +2160..216B;AI +216C..216F;AL +2170..2179;AI +217A..2184;AL +2190..2199;AI +219A..21D1;AL +21D2;AI +21D3;AL +21D4;AI +21D5..21FF;AL +2200;AI +2201;AL +2202..2203;AI +2204..2206;AL +2207..2208;AI +2209..220A;AL +220B;AI +220C..220E;AL +220F;AI +2210;AL +2211;AI +2212..2213;PR +2214;AL +2215;AI +2216..2219;AL +221A;AI +221B..221C;AL +221D..2220;AI +2221..2222;AL +2223;AI +2224;AL +2225;AI +2226;AL +2227..222C;AI +222D;AL +222E;AI +222F..2233;AL +2234..2237;AI +2238..223B;AL +223C..223D;AI +223E..2247;AL +2248;AI +2249..224B;AL +224C;AI +224D..2251;AL +2252;AI +2253..225F;AL +2260..2261;AI +2262..2263;AL +2264..2267;AI +2268..2269;AL +226A..226B;AI +226C..226D;AL +226E..226F;AI +2270..2281;AL +2282..2283;AI +2284..2285;AL +2286..2287;AI +2288..2294;AL +2295;AI +2296..2298;AL +2299;AI +229A..22A4;AL +22A5;AI +22A6..22BE;AL +22BF;AI +22C0..2311;AL +2312;AI +2313..2328;AL +2329;OP +232A;CL +232B..23E7;AL +2400..2426;AL +2440..244A;AL +2460..24FE;AI +24FF;AL +2500..254B;AI +254C..254F;AL +2550..2574;AI +2575..257F;AL +2580..258F;AI +2590..2591;AL +2592..2595;AI +2596..259F;AL +25A0..25A1;AI +25A2;AL +25A3..25A9;AI +25AA..25B1;AL +25B2..25B3;AI +25B4..25B5;AL +25B6..25B7;AI +25B8..25BB;AL +25BC..25BD;AI +25BE..25BF;AL +25C0..25C1;AI +25C2..25C5;AL +25C6..25C8;AI +25C9..25CA;AL +25CB;AI +25CC..25CD;AL +25CE..25D1;AI +25D2..25E1;AL +25E2..25E5;AI +25E6..25EE;AL +25EF;AI +25F0..2604;AL +2605..2606;AI +2607..2608;AL +2609;AI +260A..260D;AL +260E..260F;AI +2610..2613;AL +2614..2617;AI +2618..261B;AL +261C;AI +261D;AL +261E;AI +261F..263F;AL +2640;AI +2641;AL +2642;AI +2643..265F;AL +2660..2661;AI +2662;AL +2663..2665;AI +2666;AL +2667..266A;AI +266B;AL +266C..266D;AI +266E;AL +266F;AI +2670..269C;AL +26A0..26B2;AL +2701..2704;AL +2706..2709;AL +270C..2727;AL +2729..274B;AL +274D;AL +274F..2752;AL +2756;AL +2758..275A;AL +275B..275E;QU +2761;AL +2762..2763;EX +2764..2767;AL +2768;OP +2769;CL +276A;OP +276B;CL +276C;OP +276D;CL +276E;OP +276F;CL +2770;OP +2771;CL +2772;OP +2773;CL +2774;OP +2775;CL +2776..2793;AI +2794;AL +2798..27AF;AL +27B1..27BE;AL +27C0..27C4;AL +27C5;OP +27C6;CL +27C7..27CA;AL +27D0..27E5;AL +27E6;OP +27E7;CL +27E8;OP +27E9;CL +27EA;OP +27EB;CL +27F0..2982;AL +2983;OP +2984;CL +2985;OP +2986;CL +2987;OP +2988;CL +2989;OP +298A;CL +298B;OP +298C;CL +298D;OP +298E;CL +298F;OP +2990;CL +2991;OP +2992;CL +2993;OP +2994;CL +2995;OP +2996;CL +2997;OP +2998;CL +2999..29D7;AL +29D8;OP +29D9;CL +29DA;OP +29DB;CL +29DC..29FB;AL +29FC;OP +29FD;CL +29FE..2B1A;AL +2B20..2B23;AL +2C00..2C2E;AL +2C30..2C5E;AL +2C60..2C6C;AL +2C74..2C77;AL +2C80..2CEA;AL +2CF9..2CFC;BA +2CFD;AL +2CFE..2CFF;BA +2D00..2D25;AL +2D30..2D65;AL +2D6F;AL +2D80..2D96;AL +2DA0..2DA6;AL +2DA8..2DAE;AL +2DB0..2DB6;AL +2DB8..2DBE;AL +2DC0..2DC6;AL +2DC8..2DCE;AL +2DD0..2DD6;AL +2DD8..2DDE;AL +2E00..2E0D;QU +2E0E..2E15;BA +2E16;AL +2E17;BA +2E1C..2E1D;QU +2E80..2E99;ID +2E9B..2EF3;ID +2F00..2FD5;ID +2FF0..2FFB;ID +3000;ID +3001..3002;CL +3003..3004;ID +3005;NS +3006..3007;ID +3008;OP +3009;CL +300A;OP +300B;CL +300C;OP +300D;CL +300E;OP +300F;CL +3010;OP +3011;CL +3012..3013;ID +3014;OP +3015;CL +3016;OP +3017;CL +3018;OP +3019;CL +301A;OP +301B;CL +301C;NS +301D;OP +301E..301F;CL +3020..3029;ID +302A..302F;CM +3030..303A;ID +303B..303C;NS +303D..303F;ID +3041;NS +3042;ID +3043;NS +3044;ID +3045;NS +3046;ID +3047;NS +3048;ID +3049;NS +304A..3062;ID +3063;NS +3064..3082;ID +3083;NS +3084;ID +3085;NS +3086;ID +3087;NS +3088..308D;ID +308E;NS +308F..3094;ID +3095..3096;NS +3099..309A;CM +309B..309E;NS +309F;ID +30A0..30A1;NS +30A2;ID +30A3;NS +30A4;ID +30A5;NS +30A6;ID +30A7;NS +30A8;ID +30A9;NS +30AA..30C2;ID +30C3;NS +30C4..30E2;ID +30E3;NS +30E4;ID +30E5;NS +30E6;ID +30E7;NS +30E8..30ED;ID +30EE;NS +30EF..30F4;ID +30F5..30F6;NS +30F7..30FA;ID +30FB..30FE;NS +30FF;ID +3105..312C;ID +3131..318E;ID +3190..31B7;ID +31C0..31CF;ID +31F0..31FF;NS +3200..321E;ID +3220..3243;ID +3250..32FE;ID +3300..33FF;ID +3400..4DB5;ID +4DC0..4DFF;AL +4E00..9FBB;ID +A000..A014;ID +A015;NS +A016..A48C;ID +A490..A4C6;ID +A700..A71A;AL +A720..A721;AL +A800..A801;AL +A802;CM +A803..A805;AL +A806;CM +A807..A80A;AL +A80B;CM +A80C..A822;AL +A823..A827;CM +A828..A82B;AL +A840..A873;AL +A874..A875;BB +A876..A877;EX +AC00;H2 +AC01..AC1B;H3 +AC1C;H2 +AC1D..AC37;H3 +AC38;H2 +AC39..AC53;H3 +AC54;H2 +AC55..AC6F;H3 +AC70;H2 +AC71..AC8B;H3 +AC8C;H2 +AC8D..ACA7;H3 +ACA8;H2 +ACA9..ACC3;H3 +ACC4;H2 +ACC5..ACDF;H3 +ACE0;H2 +ACE1..ACFB;H3 +ACFC;H2 +ACFD..AD17;H3 +AD18;H2 +AD19..AD33;H3 +AD34;H2 +AD35..AD4F;H3 +AD50;H2 +AD51..AD6B;H3 +AD6C;H2 +AD6D..AD87;H3 +AD88;H2 +AD89..ADA3;H3 +ADA4;H2 +ADA5..ADBF;H3 +ADC0;H2 +ADC1..ADDB;H3 +ADDC;H2 +ADDD..ADF7;H3 +ADF8;H2 +ADF9..AE13;H3 +AE14;H2 +AE15..AE2F;H3 +AE30;H2 +AE31..AE4B;H3 +AE4C;H2 +AE4D..AE67;H3 +AE68;H2 +AE69..AE83;H3 +AE84;H2 +AE85..AE9F;H3 +AEA0;H2 +AEA1..AEBB;H3 +AEBC;H2 +AEBD..AED7;H3 +AED8;H2 +AED9..AEF3;H3 +AEF4;H2 +AEF5..AF0F;H3 +AF10;H2 +AF11..AF2B;H3 +AF2C;H2 +AF2D..AF47;H3 +AF48;H2 +AF49..AF63;H3 +AF64;H2 +AF65..AF7F;H3 +AF80;H2 +AF81..AF9B;H3 +AF9C;H2 +AF9D..AFB7;H3 +AFB8;H2 +AFB9..AFD3;H3 +AFD4;H2 +AFD5..AFEF;H3 +AFF0;H2 +AFF1..B00B;H3 +B00C;H2 +B00D..B027;H3 +B028;H2 +B029..B043;H3 +B044;H2 +B045..B05F;H3 +B060;H2 +B061..B07B;H3 +B07C;H2 +B07D..B097;H3 +B098;H2 +B099..B0B3;H3 +B0B4;H2 +B0B5..B0CF;H3 +B0D0;H2 +B0D1..B0EB;H3 +B0EC;H2 +B0ED..B107;H3 +B108;H2 +B109..B123;H3 +B124;H2 +B125..B13F;H3 +B140;H2 +B141..B15B;H3 +B15C;H2 +B15D..B177;H3 +B178;H2 +B179..B193;H3 +B194;H2 +B195..B1AF;H3 +B1B0;H2 +B1B1..B1CB;H3 +B1CC;H2 +B1CD..B1E7;H3 +B1E8;H2 +B1E9..B203;H3 +B204;H2 +B205..B21F;H3 +B220;H2 +B221..B23B;H3 +B23C;H2 +B23D..B257;H3 +B258;H2 +B259..B273;H3 +B274;H2 +B275..B28F;H3 +B290;H2 +B291..B2AB;H3 +B2AC;H2 +B2AD..B2C7;H3 +B2C8;H2 +B2C9..B2E3;H3 +B2E4;H2 +B2E5..B2FF;H3 +B300;H2 +B301..B31B;H3 +B31C;H2 +B31D..B337;H3 +B338;H2 +B339..B353;H3 +B354;H2 +B355..B36F;H3 +B370;H2 +B371..B38B;H3 +B38C;H2 +B38D..B3A7;H3 +B3A8;H2 +B3A9..B3C3;H3 +B3C4;H2 +B3C5..B3DF;H3 +B3E0;H2 +B3E1..B3FB;H3 +B3FC;H2 +B3FD..B417;H3 +B418;H2 +B419..B433;H3 +B434;H2 +B435..B44F;H3 +B450;H2 +B451..B46B;H3 +B46C;H2 +B46D..B487;H3 +B488;H2 +B489..B4A3;H3 +B4A4;H2 +B4A5..B4BF;H3 +B4C0;H2 +B4C1..B4DB;H3 +B4DC;H2 +B4DD..B4F7;H3 +B4F8;H2 +B4F9..B513;H3 +B514;H2 +B515..B52F;H3 +B530;H2 +B531..B54B;H3 +B54C;H2 +B54D..B567;H3 +B568;H2 +B569..B583;H3 +B584;H2 +B585..B59F;H3 +B5A0;H2 +B5A1..B5BB;H3 +B5BC;H2 +B5BD..B5D7;H3 +B5D8;H2 +B5D9..B5F3;H3 +B5F4;H2 +B5F5..B60F;H3 +B610;H2 +B611..B62B;H3 +B62C;H2 +B62D..B647;H3 +B648;H2 +B649..B663;H3 +B664;H2 +B665..B67F;H3 +B680;H2 +B681..B69B;H3 +B69C;H2 +B69D..B6B7;H3 +B6B8;H2 +B6B9..B6D3;H3 +B6D4;H2 +B6D5..B6EF;H3 +B6F0;H2 +B6F1..B70B;H3 +B70C;H2 +B70D..B727;H3 +B728;H2 +B729..B743;H3 +B744;H2 +B745..B75F;H3 +B760;H2 +B761..B77B;H3 +B77C;H2 +B77D..B797;H3 +B798;H2 +B799..B7B3;H3 +B7B4;H2 +B7B5..B7CF;H3 +B7D0;H2 +B7D1..B7EB;H3 +B7EC;H2 +B7ED..B807;H3 +B808;H2 +B809..B823;H3 +B824;H2 +B825..B83F;H3 +B840;H2 +B841..B85B;H3 +B85C;H2 +B85D..B877;H3 +B878;H2 +B879..B893;H3 +B894;H2 +B895..B8AF;H3 +B8B0;H2 +B8B1..B8CB;H3 +B8CC;H2 +B8CD..B8E7;H3 +B8E8;H2 +B8E9..B903;H3 +B904;H2 +B905..B91F;H3 +B920;H2 +B921..B93B;H3 +B93C;H2 +B93D..B957;H3 +B958;H2 +B959..B973;H3 +B974;H2 +B975..B98F;H3 +B990;H2 +B991..B9AB;H3 +B9AC;H2 +B9AD..B9C7;H3 +B9C8;H2 +B9C9..B9E3;H3 +B9E4;H2 +B9E5..B9FF;H3 +BA00;H2 +BA01..BA1B;H3 +BA1C;H2 +BA1D..BA37;H3 +BA38;H2 +BA39..BA53;H3 +BA54;H2 +BA55..BA6F;H3 +BA70;H2 +BA71..BA8B;H3 +BA8C;H2 +BA8D..BAA7;H3 +BAA8;H2 +BAA9..BAC3;H3 +BAC4;H2 +BAC5..BADF;H3 +BAE0;H2 +BAE1..BAFB;H3 +BAFC;H2 +BAFD..BB17;H3 +BB18;H2 +BB19..BB33;H3 +BB34;H2 +BB35..BB4F;H3 +BB50;H2 +BB51..BB6B;H3 +BB6C;H2 +BB6D..BB87;H3 +BB88;H2 +BB89..BBA3;H3 +BBA4;H2 +BBA5..BBBF;H3 +BBC0;H2 +BBC1..BBDB;H3 +BBDC;H2 +BBDD..BBF7;H3 +BBF8;H2 +BBF9..BC13;H3 +BC14;H2 +BC15..BC2F;H3 +BC30;H2 +BC31..BC4B;H3 +BC4C;H2 +BC4D..BC67;H3 +BC68;H2 +BC69..BC83;H3 +BC84;H2 +BC85..BC9F;H3 +BCA0;H2 +BCA1..BCBB;H3 +BCBC;H2 +BCBD..BCD7;H3 +BCD8;H2 +BCD9..BCF3;H3 +BCF4;H2 +BCF5..BD0F;H3 +BD10;H2 +BD11..BD2B;H3 +BD2C;H2 +BD2D..BD47;H3 +BD48;H2 +BD49..BD63;H3 +BD64;H2 +BD65..BD7F;H3 +BD80;H2 +BD81..BD9B;H3 +BD9C;H2 +BD9D..BDB7;H3 +BDB8;H2 +BDB9..BDD3;H3 +BDD4;H2 +BDD5..BDEF;H3 +BDF0;H2 +BDF1..BE0B;H3 +BE0C;H2 +BE0D..BE27;H3 +BE28;H2 +BE29..BE43;H3 +BE44;H2 +BE45..BE5F;H3 +BE60;H2 +BE61..BE7B;H3 +BE7C;H2 +BE7D..BE97;H3 +BE98;H2 +BE99..BEB3;H3 +BEB4;H2 +BEB5..BECF;H3 +BED0;H2 +BED1..BEEB;H3 +BEEC;H2 +BEED..BF07;H3 +BF08;H2 +BF09..BF23;H3 +BF24;H2 +BF25..BF3F;H3 +BF40;H2 +BF41..BF5B;H3 +BF5C;H2 +BF5D..BF77;H3 +BF78;H2 +BF79..BF93;H3 +BF94;H2 +BF95..BFAF;H3 +BFB0;H2 +BFB1..BFCB;H3 +BFCC;H2 +BFCD..BFE7;H3 +BFE8;H2 +BFE9..C003;H3 +C004;H2 +C005..C01F;H3 +C020;H2 +C021..C03B;H3 +C03C;H2 +C03D..C057;H3 +C058;H2 +C059..C073;H3 +C074;H2 +C075..C08F;H3 +C090;H2 +C091..C0AB;H3 +C0AC;H2 +C0AD..C0C7;H3 +C0C8;H2 +C0C9..C0E3;H3 +C0E4;H2 +C0E5..C0FF;H3 +C100;H2 +C101..C11B;H3 +C11C;H2 +C11D..C137;H3 +C138;H2 +C139..C153;H3 +C154;H2 +C155..C16F;H3 +C170;H2 +C171..C18B;H3 +C18C;H2 +C18D..C1A7;H3 +C1A8;H2 +C1A9..C1C3;H3 +C1C4;H2 +C1C5..C1DF;H3 +C1E0;H2 +C1E1..C1FB;H3 +C1FC;H2 +C1FD..C217;H3 +C218;H2 +C219..C233;H3 +C234;H2 +C235..C24F;H3 +C250;H2 +C251..C26B;H3 +C26C;H2 +C26D..C287;H3 +C288;H2 +C289..C2A3;H3 +C2A4;H2 +C2A5..C2BF;H3 +C2C0;H2 +C2C1..C2DB;H3 +C2DC;H2 +C2DD..C2F7;H3 +C2F8;H2 +C2F9..C313;H3 +C314;H2 +C315..C32F;H3 +C330;H2 +C331..C34B;H3 +C34C;H2 +C34D..C367;H3 +C368;H2 +C369..C383;H3 +C384;H2 +C385..C39F;H3 +C3A0;H2 +C3A1..C3BB;H3 +C3BC;H2 +C3BD..C3D7;H3 +C3D8;H2 +C3D9..C3F3;H3 +C3F4;H2 +C3F5..C40F;H3 +C410;H2 +C411..C42B;H3 +C42C;H2 +C42D..C447;H3 +C448;H2 +C449..C463;H3 +C464;H2 +C465..C47F;H3 +C480;H2 +C481..C49B;H3 +C49C;H2 +C49D..C4B7;H3 +C4B8;H2 +C4B9..C4D3;H3 +C4D4;H2 +C4D5..C4EF;H3 +C4F0;H2 +C4F1..C50B;H3 +C50C;H2 +C50D..C527;H3 +C528;H2 +C529..C543;H3 +C544;H2 +C545..C55F;H3 +C560;H2 +C561..C57B;H3 +C57C;H2 +C57D..C597;H3 +C598;H2 +C599..C5B3;H3 +C5B4;H2 +C5B5..C5CF;H3 +C5D0;H2 +C5D1..C5EB;H3 +C5EC;H2 +C5ED..C607;H3 +C608;H2 +C609..C623;H3 +C624;H2 +C625..C63F;H3 +C640;H2 +C641..C65B;H3 +C65C;H2 +C65D..C677;H3 +C678;H2 +C679..C693;H3 +C694;H2 +C695..C6AF;H3 +C6B0;H2 +C6B1..C6CB;H3 +C6CC;H2 +C6CD..C6E7;H3 +C6E8;H2 +C6E9..C703;H3 +C704;H2 +C705..C71F;H3 +C720;H2 +C721..C73B;H3 +C73C;H2 +C73D..C757;H3 +C758;H2 +C759..C773;H3 +C774;H2 +C775..C78F;H3 +C790;H2 +C791..C7AB;H3 +C7AC;H2 +C7AD..C7C7;H3 +C7C8;H2 +C7C9..C7E3;H3 +C7E4;H2 +C7E5..C7FF;H3 +C800;H2 +C801..C81B;H3 +C81C;H2 +C81D..C837;H3 +C838;H2 +C839..C853;H3 +C854;H2 +C855..C86F;H3 +C870;H2 +C871..C88B;H3 +C88C;H2 +C88D..C8A7;H3 +C8A8;H2 +C8A9..C8C3;H3 +C8C4;H2 +C8C5..C8DF;H3 +C8E0;H2 +C8E1..C8FB;H3 +C8FC;H2 +C8FD..C917;H3 +C918;H2 +C919..C933;H3 +C934;H2 +C935..C94F;H3 +C950;H2 +C951..C96B;H3 +C96C;H2 +C96D..C987;H3 +C988;H2 +C989..C9A3;H3 +C9A4;H2 +C9A5..C9BF;H3 +C9C0;H2 +C9C1..C9DB;H3 +C9DC;H2 +C9DD..C9F7;H3 +C9F8;H2 +C9F9..CA13;H3 +CA14;H2 +CA15..CA2F;H3 +CA30;H2 +CA31..CA4B;H3 +CA4C;H2 +CA4D..CA67;H3 +CA68;H2 +CA69..CA83;H3 +CA84;H2 +CA85..CA9F;H3 +CAA0;H2 +CAA1..CABB;H3 +CABC;H2 +CABD..CAD7;H3 +CAD8;H2 +CAD9..CAF3;H3 +CAF4;H2 +CAF5..CB0F;H3 +CB10;H2 +CB11..CB2B;H3 +CB2C;H2 +CB2D..CB47;H3 +CB48;H2 +CB49..CB63;H3 +CB64;H2 +CB65..CB7F;H3 +CB80;H2 +CB81..CB9B;H3 +CB9C;H2 +CB9D..CBB7;H3 +CBB8;H2 +CBB9..CBD3;H3 +CBD4;H2 +CBD5..CBEF;H3 +CBF0;H2 +CBF1..CC0B;H3 +CC0C;H2 +CC0D..CC27;H3 +CC28;H2 +CC29..CC43;H3 +CC44;H2 +CC45..CC5F;H3 +CC60;H2 +CC61..CC7B;H3 +CC7C;H2 +CC7D..CC97;H3 +CC98;H2 +CC99..CCB3;H3 +CCB4;H2 +CCB5..CCCF;H3 +CCD0;H2 +CCD1..CCEB;H3 +CCEC;H2 +CCED..CD07;H3 +CD08;H2 +CD09..CD23;H3 +CD24;H2 +CD25..CD3F;H3 +CD40;H2 +CD41..CD5B;H3 +CD5C;H2 +CD5D..CD77;H3 +CD78;H2 +CD79..CD93;H3 +CD94;H2 +CD95..CDAF;H3 +CDB0;H2 +CDB1..CDCB;H3 +CDCC;H2 +CDCD..CDE7;H3 +CDE8;H2 +CDE9..CE03;H3 +CE04;H2 +CE05..CE1F;H3 +CE20;H2 +CE21..CE3B;H3 +CE3C;H2 +CE3D..CE57;H3 +CE58;H2 +CE59..CE73;H3 +CE74;H2 +CE75..CE8F;H3 +CE90;H2 +CE91..CEAB;H3 +CEAC;H2 +CEAD..CEC7;H3 +CEC8;H2 +CEC9..CEE3;H3 +CEE4;H2 +CEE5..CEFF;H3 +CF00;H2 +CF01..CF1B;H3 +CF1C;H2 +CF1D..CF37;H3 +CF38;H2 +CF39..CF53;H3 +CF54;H2 +CF55..CF6F;H3 +CF70;H2 +CF71..CF8B;H3 +CF8C;H2 +CF8D..CFA7;H3 +CFA8;H2 +CFA9..CFC3;H3 +CFC4;H2 +CFC5..CFDF;H3 +CFE0;H2 +CFE1..CFFB;H3 +CFFC;H2 +CFFD..D017;H3 +D018;H2 +D019..D033;H3 +D034;H2 +D035..D04F;H3 +D050;H2 +D051..D06B;H3 +D06C;H2 +D06D..D087;H3 +D088;H2 +D089..D0A3;H3 +D0A4;H2 +D0A5..D0BF;H3 +D0C0;H2 +D0C1..D0DB;H3 +D0DC;H2 +D0DD..D0F7;H3 +D0F8;H2 +D0F9..D113;H3 +D114;H2 +D115..D12F;H3 +D130;H2 +D131..D14B;H3 +D14C;H2 +D14D..D167;H3 +D168;H2 +D169..D183;H3 +D184;H2 +D185..D19F;H3 +D1A0;H2 +D1A1..D1BB;H3 +D1BC;H2 +D1BD..D1D7;H3 +D1D8;H2 +D1D9..D1F3;H3 +D1F4;H2 +D1F5..D20F;H3 +D210;H2 +D211..D22B;H3 +D22C;H2 +D22D..D247;H3 +D248;H2 +D249..D263;H3 +D264;H2 +D265..D27F;H3 +D280;H2 +D281..D29B;H3 +D29C;H2 +D29D..D2B7;H3 +D2B8;H2 +D2B9..D2D3;H3 +D2D4;H2 +D2D5..D2EF;H3 +D2F0;H2 +D2F1..D30B;H3 +D30C;H2 +D30D..D327;H3 +D328;H2 +D329..D343;H3 +D344;H2 +D345..D35F;H3 +D360;H2 +D361..D37B;H3 +D37C;H2 +D37D..D397;H3 +D398;H2 +D399..D3B3;H3 +D3B4;H2 +D3B5..D3CF;H3 +D3D0;H2 +D3D1..D3EB;H3 +D3EC;H2 +D3ED..D407;H3 +D408;H2 +D409..D423;H3 +D424;H2 +D425..D43F;H3 +D440;H2 +D441..D45B;H3 +D45C;H2 +D45D..D477;H3 +D478;H2 +D479..D493;H3 +D494;H2 +D495..D4AF;H3 +D4B0;H2 +D4B1..D4CB;H3 +D4CC;H2 +D4CD..D4E7;H3 +D4E8;H2 +D4E9..D503;H3 +D504;H2 +D505..D51F;H3 +D520;H2 +D521..D53B;H3 +D53C;H2 +D53D..D557;H3 +D558;H2 +D559..D573;H3 +D574;H2 +D575..D58F;H3 +D590;H2 +D591..D5AB;H3 +D5AC;H2 +D5AD..D5C7;H3 +D5C8;H2 +D5C9..D5E3;H3 +D5E4;H2 +D5E5..D5FF;H3 +D600;H2 +D601..D61B;H3 +D61C;H2 +D61D..D637;H3 +D638;H2 +D639..D653;H3 +D654;H2 +D655..D66F;H3 +D670;H2 +D671..D68B;H3 +D68C;H2 +D68D..D6A7;H3 +D6A8;H2 +D6A9..D6C3;H3 +D6C4;H2 +D6C5..D6DF;H3 +D6E0;H2 +D6E1..D6FB;H3 +D6FC;H2 +D6FD..D717;H3 +D718;H2 +D719..D733;H3 +D734;H2 +D735..D74F;H3 +D750;H2 +D751..D76B;H3 +D76C;H2 +D76D..D787;H3 +D788;H2 +D789..D7A3;H3 +D800..DB7F;SG +DB80..DBFF;SG +DC00..DFFF;SG +E000..F8FF;XX +F900..FA2D;ID +FA30..FA6A;ID +FA70..FAD9;ID +FB00..FB06;AL +FB13..FB17;AL +FB1D;AL +FB1E;CM +FB1F..FB36;AL +FB38..FB3C;AL +FB3E;AL +FB40..FB41;AL +FB43..FB44;AL +FB46..FBB1;AL +FBD3..FD3D;AL +FD3E;OP +FD3F;CL +FD50..FD8F;AL +FD92..FDC7;AL +FDF0..FDFB;AL +FDFC;PO +FDFD;AL +FE00..FE0F;CM +FE10;IS +FE11..FE12;CL +FE13..FE14;IS +FE15..FE16;EX +FE17;OP +FE18;CL +FE19;IN +FE20..FE23;CM +FE30..FE34;ID +FE35;OP +FE36;CL +FE37;OP +FE38;CL +FE39;OP +FE3A;CL +FE3B;OP +FE3C;CL +FE3D;OP +FE3E;CL +FE3F;OP +FE40;CL +FE41;OP +FE42;CL +FE43;OP +FE44;CL +FE45..FE46;ID +FE47;OP +FE48;CL +FE49..FE4F;ID +FE50;CL +FE51;ID +FE52;CL +FE54..FE55;NS +FE56..FE57;EX +FE58;ID +FE59;OP +FE5A;CL +FE5B;OP +FE5C;CL +FE5D;OP +FE5E;CL +FE5F..FE66;ID +FE68;ID +FE69;PR +FE6A;PO +FE6B;ID +FE70..FE74;AL +FE76..FEFC;AL +FEFF;WJ +FF01;EX +FF02..FF03;ID +FF04;PR +FF05;PO +FF06..FF07;ID +FF08;OP +FF09;CL +FF0A..FF0B;ID +FF0C;CL +FF0D;ID +FF0E;CL +FF0F..FF19;ID +FF1A..FF1B;NS +FF1C..FF1E;ID +FF1F;EX +FF20..FF3A;ID +FF3B;OP +FF3C;ID +FF3D;CL +FF3E..FF5A;ID +FF5B;OP +FF5C;ID +FF5D;CL +FF5E;ID +FF5F;OP +FF60..FF61;CL +FF62;OP +FF63..FF64;CL +FF65;NS +FF66;AL +FF67..FF70;NS +FF71..FF9D;AL +FF9E..FF9F;NS +FFA0..FFBE;AL +FFC2..FFC7;AL +FFCA..FFCF;AL +FFD2..FFD7;AL +FFDA..FFDC;AL +FFE0;PO +FFE1;PR +FFE2..FFE4;ID +FFE5..FFE6;PR +FFE8..FFEE;AL +FFF9..FFFB;CM +FFFC;CB +FFFD;AI +10000..1000B;AL +1000D..10026;AL +10028..1003A;AL +1003C..1003D;AL +1003F..1004D;AL +10050..1005D;AL +10080..100FA;AL +10100..10102;BA +10107..10133;AL +10137..1018A;AL +10300..1031E;AL +10320..10323;AL +10330..1034A;AL +10380..1039D;AL +1039F;BA +103A0..103C3;AL +103C8..103CF;AL +103D0;BA +103D1..103D5;AL +10400..1049D;AL +104A0..104A9;NU +10800..10805;AL +10808;AL +1080A..10835;AL +10837..10838;AL +1083C;AL +1083F;AL +10900..10919;AL +1091F;BA +10A00;AL +10A01..10A03;CM +10A05..10A06;CM +10A0C..10A0F;CM +10A10..10A13;AL +10A15..10A17;AL +10A19..10A33;AL +10A38..10A3A;CM +10A3F;CM +10A40..10A47;AL +10A50..10A57;BA +10A58;AL +12000..1236E;AL +12400..12462;AL +12470..12473;BA +1D000..1D0F5;AL +1D100..1D126;AL +1D12A..1D164;AL +1D165..1D169;CM +1D16A..1D16C;AL +1D16D..1D182;CM +1D183..1D184;AL +1D185..1D18B;CM +1D18C..1D1A9;AL +1D1AA..1D1AD;CM +1D1AE..1D1DD;AL +1D200..1D241;AL +1D242..1D244;CM +1D245;AL +1D300..1D356;AL +1D360..1D371;AL +1D400..1D454;AL +1D456..1D49C;AL +1D49E..1D49F;AL +1D4A2;AL +1D4A5..1D4A6;AL +1D4A9..1D4AC;AL +1D4AE..1D4B9;AL +1D4BB;AL +1D4BD..1D4C3;AL +1D4C5..1D505;AL +1D507..1D50A;AL +1D50D..1D514;AL +1D516..1D51C;AL +1D51E..1D539;AL +1D53B..1D53E;AL +1D540..1D544;AL +1D546;AL +1D54A..1D550;AL +1D552..1D6A5;AL +1D6A8..1D7CB;AL +1D7CE..1D7FF;NU +20000..2A6D6;ID +2F800..2FA1D;ID +E0001;CM +E0020..E007F;CM +E0100..E01EF;CM +F0000..FFFFD;XX +100000..10FFFD;XX + +# EOF diff --git a/icuSources/data/unidata/base_unidata/Scripts.txt b/icuSources/data/unidata/base_unidata/Scripts.txt new file mode 100644 index 00000000..14cb3efd --- /dev/null +++ b/icuSources/data/unidata/base_unidata/Scripts.txt @@ -0,0 +1,1538 @@ +# Scripts-5.0.0.txt +# Date: 2006-03-09, 23:14:25 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2006 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html + +# ================================================ + +# Property: Script + +# All code points not explicitly listed for Script +# have the value Unknown (Zzzz). + +# @missing: 0000..10FFFF; Unknown + +# ================================================ + +0000..001F ; Common +0020 ; Common +0021..0023 ; Common +0024 ; Common +0025..0027 ; Common +0028 ; Common +0029 ; Common +002A ; Common +002B ; Common +002C ; Common +002D ; Common +002E..002F ; Common +0030..0039 ; Common +003A..003B ; Common +003C..003E ; Common +003F..0040 ; Common +005B ; Common +005C ; Common +005D ; Common +005E ; Common +005F ; Common +0060 ; Common +007B ; Common +007C ; Common +007D ; Common +007E ; Common +007F..009F ; Common +00A0 ; Common +00A1 ; Common +00A2..00A5 ; Common +00A6..00A7 ; Common +00A8 ; Common +00A9 ; Common +00AB ; Common +00AC ; Common +00AD ; Common +00AE ; Common +00AF ; Common +00B0 ; Common +00B1 ; Common +00B2..00B3 ; Common +00B4 ; Common +00B5 ; Common +00B6 ; Common +00B7 ; Common +00B8 ; Common +00B9 ; Common +00BB ; Common +00BC..00BE ; Common +00BF ; Common +00D7 ; Common +00F7 ; Common +02B9..02C1 ; Common +02C2..02C5 ; Common +02C6..02D1 ; Common +02D2..02DF ; Common +02E5..02ED ; Common +02EE ; Common +02EF..02FF ; Common +037E ; Common +0387 ; Common +0589 ; Common +0600..0603 ; Common +060C ; Common +061B ; Common +061F ; Common +0640 ; Common +0660..0669 ; Common +06DD ; Common +0964..0965 ; Common +0970 ; Common +0E3F ; Common +10FB ; Common +16EB..16ED ; Common +1735..1736 ; Common +1802..1803 ; Common +1805 ; Common +2000..200A ; Common +200B ; Common +200E..200F ; Common +2010..2015 ; Common +2016..2017 ; Common +2018 ; Common +2019 ; Common +201A ; Common +201B..201C ; Common +201D ; Common +201E ; Common +201F ; Common +2020..2027 ; Common +2028 ; Common +2029 ; Common +202A..202E ; Common +202F ; Common +2030..2038 ; Common +2039 ; Common +203A ; Common +203B..203E ; Common +203F..2040 ; Common +2041..2043 ; Common +2044 ; Common +2045 ; Common +2046 ; Common +2047..2051 ; Common +2052 ; Common +2053 ; Common +2054 ; Common +2055..205E ; Common +205F ; Common +2060..2063 ; Common +206A..206F ; Common +2070 ; Common +2074..2079 ; Common +207A..207C ; Common +207D ; Common +207E ; Common +2080..2089 ; Common +208A..208C ; Common +208D ; Common +208E ; Common +20A0..20B5 ; Common +2100..2101 ; Common +2102 ; Common +2103..2106 ; Common +2107 ; Common +2108..2109 ; Common +210A..2113 ; Common +2114 ; Common +2115 ; Common +2116..2118 ; Common +2119..211D ; Common +211E..2123 ; Common +2124 ; Common +2125 ; Common +2127 ; Common +2128 ; Common +2129 ; Common +212C..212D ; Common +212E ; Common +212F..2131 ; Common +2133..2134 ; Common +2135..2138 ; Common +2139 ; Common +213A..213B ; Common +213C..213F ; Common +2140..2144 ; Common +2145..2149 ; Common +214A ; Common +214B ; Common +214C..214D ; Common +2153..215F ; Common +2160..2182 ; Common +2183 ; Common +2190..2194 ; Common +2195..2199 ; Common +219A..219B ; Common +219C..219F ; Common +21A0 ; Common +21A1..21A2 ; Common +21A3 ; Common +21A4..21A5 ; Common +21A6 ; Common +21A7..21AD ; Common +21AE ; Common +21AF..21CD ; Common +21CE..21CF ; Common +21D0..21D1 ; Common +21D2 ; Common +21D3 ; Common +21D4 ; Common +21D5..21F3 ; Common +21F4..22FF ; Common +2300..2307 ; Common +2308..230B ; Common +230C..231F ; Common +2320..2321 ; Common +2322..2328 ; Common +2329 ; Common +232A ; Common +232B..237B ; Common +237C ; Common +237D..239A ; Common +239B..23B3 ; Common +23B4..23DB ; Common +23DC..23E1 ; Common +23E2..23E7 ; Common +2400..2426 ; Common +2440..244A ; Common +2460..249B ; Common +249C..24E9 ; Common +24EA..24FF ; Common +2500..25B6 ; Common +25B7 ; Common +25B8..25C0 ; Common +25C1 ; Common +25C2..25F7 ; Common +25F8..25FF ; Common +2600..266E ; Common +266F ; Common +2670..269C ; Common +26A0..26B2 ; Common +2701..2704 ; Common +2706..2709 ; Common +270C..2727 ; Common +2729..274B ; Common +274D ; Common +274F..2752 ; Common +2756 ; Common +2758..275E ; Common +2761..2767 ; Common +2768 ; Common +2769 ; Common +276A ; Common +276B ; Common +276C ; Common +276D ; Common +276E ; Common +276F ; Common +2770 ; Common +2771 ; Common +2772 ; Common +2773 ; Common +2774 ; Common +2775 ; Common +2776..2793 ; Common +2794 ; Common +2798..27AF ; Common +27B1..27BE ; Common +27C0..27C4 ; Common +27C5 ; Common +27C6 ; Common +27C7..27CA ; Common +27D0..27E5 ; Common +27E6 ; Common +27E7 ; Common +27E8 ; Common +27E9 ; Common +27EA ; Common +27EB ; Common +27F0..27FF ; Common +2900..2982 ; Common +2983 ; Common +2984 ; Common +2985 ; Common +2986 ; Common +2987 ; Common +2988 ; Common +2989 ; Common +298A ; Common +298B ; Common +298C ; Common +298D ; Common +298E ; Common +298F ; Common +2990 ; Common +2991 ; Common +2992 ; Common +2993 ; Common +2994 ; Common +2995 ; Common +2996 ; Common +2997 ; Common +2998 ; Common +2999..29D7 ; Common +29D8 ; Common +29D9 ; Common +29DA ; Common +29DB ; Common +29DC..29FB ; Common +29FC ; Common +29FD ; Common +29FE..2AFF ; Common +2B00..2B1A ; Common +2B20..2B23 ; Common +2E00..2E01 ; Common +2E02 ; Common +2E03 ; Common +2E04 ; Common +2E05 ; Common +2E06..2E08 ; Common +2E09 ; Common +2E0A ; Common +2E0B ; Common +2E0C ; Common +2E0D ; Common +2E0E..2E16 ; Common +2E17 ; Common +2E1C ; Common +2E1D ; Common +2FF0..2FFB ; Common +3000 ; Common +3001..3003 ; Common +3004 ; Common +3006 ; Common +3008 ; Common +3009 ; Common +300A ; Common +300B ; Common +300C ; Common +300D ; Common +300E ; Common +300F ; Common +3010 ; Common +3011 ; Common +3012..3013 ; Common +3014 ; Common +3015 ; Common +3016 ; Common +3017 ; Common +3018 ; Common +3019 ; Common +301A ; Common +301B ; Common +301C ; Common +301D ; Common +301E..301F ; Common +3020 ; Common +3030 ; Common +3031..3035 ; Common +3036..3037 ; Common +303C ; Common +303D ; Common +303E..303F ; Common +309B..309C ; Common +30A0 ; Common +30FB ; Common +30FC ; Common +3190..3191 ; Common +3192..3195 ; Common +3196..319F ; Common +31C0..31CF ; Common +3220..3229 ; Common +322A..3243 ; Common +3250 ; Common +3251..325F ; Common +327E..327F ; Common +3280..3289 ; Common +328A..32B0 ; Common +32B1..32BF ; Common +32C0..32FE ; Common +3300..33FF ; Common +4DC0..4DFF ; Common +A700..A716 ; Common +A717..A71A ; Common +A720..A721 ; Common +FD3E ; Common +FD3F ; Common +FDFD ; Common +FE10..FE16 ; Common +FE17 ; Common +FE18 ; Common +FE19 ; Common +FE30 ; Common +FE31..FE32 ; Common +FE33..FE34 ; Common +FE35 ; Common +FE36 ; Common +FE37 ; Common +FE38 ; Common +FE39 ; Common +FE3A ; Common +FE3B ; Common +FE3C ; Common +FE3D ; Common +FE3E ; Common +FE3F ; Common +FE40 ; Common +FE41 ; Common +FE42 ; Common +FE43 ; Common +FE44 ; Common +FE45..FE46 ; Common +FE47 ; Common +FE48 ; Common +FE49..FE4C ; Common +FE4D..FE4F ; Common +FE50..FE52 ; Common +FE54..FE57 ; Common +FE58 ; Common +FE59 ; Common +FE5A ; Common +FE5B ; Common +FE5C ; Common +FE5D ; Common +FE5E ; Common +FE5F..FE61 ; Common +FE62 ; Common +FE63 ; Common +FE64..FE66 ; Common +FE68 ; Common +FE69 ; Common +FE6A..FE6B ; Common +FEFF ; Common +FF01..FF03 ; Common +FF04 ; Common +FF05..FF07 ; Common +FF08 ; Common +FF09 ; Common +FF0A ; Common +FF0B ; Common +FF0C ; Common +FF0D ; Common +FF0E..FF0F ; Common +FF10..FF19 ; Common +FF1A..FF1B ; Common +FF1C..FF1E ; Common +FF1F..FF20 ; Common +FF3B ; Common +FF3C ; Common +FF3D ; Common +FF3E ; Common +FF3F ; Common +FF40 ; Common +FF5B ; Common +FF5C ; Common +FF5D ; Common +FF5E ; Common +FF5F ; Common +FF60 ; Common +FF61 ; Common +FF62 ; Common +FF63 ; Common +FF64..FF65 ; Common +FF70 ; Common +FF9E..FF9F ; Common +FFE0..FFE1 ; Common +FFE2 ; Common +FFE3 ; Common +FFE4 ; Common +FFE5..FFE6 ; Common +FFE8 ; Common +FFE9..FFEC ; Common +FFED..FFEE ; Common +FFF9..FFFB ; Common +FFFC..FFFD ; Common +10100..10101 ; Common +10102 ; Common +10107..10133 ; Common +10137..1013F ; Common +1D000..1D0F5 ; Common +1D100..1D126 ; Common +1D12A..1D164 ; Common +1D165..1D166 ; Common +1D16A..1D16C ; Common +1D16D..1D172 ; Common +1D173..1D17A ; Common +1D183..1D184 ; Common +1D18C..1D1A9 ; Common +1D1AE..1D1DD ; Common +1D300..1D356 ; Common +1D360..1D371 ; Common +1D400..1D454 ; Common +1D456..1D49C ; Common +1D49E..1D49F ; Common +1D4A2 ; Common +1D4A5..1D4A6 ; Common +1D4A9..1D4AC ; Common +1D4AE..1D4B9 ; Common +1D4BB ; Common +1D4BD..1D4C3 ; Common +1D4C5..1D505 ; Common +1D507..1D50A ; Common +1D50D..1D514 ; Common +1D516..1D51C ; Common +1D51E..1D539 ; Common +1D53B..1D53E ; Common +1D540..1D544 ; Common +1D546 ; Common +1D54A..1D550 ; Common +1D552..1D6A5 ; Common +1D6A8..1D6C0 ; Common +1D6C1 ; Common +1D6C2..1D6DA ; Common +1D6DB ; Common +1D6DC..1D6FA ; Common +1D6FB ; Common +1D6FC..1D714 ; Common +1D715 ; Common +1D716..1D734 ; Common +1D735 ; Common +1D736..1D74E ; Common +1D74F ; Common +1D750..1D76E ; Common +1D76F ; Common +1D770..1D788 ; Common +1D789 ; Common +1D78A..1D7A8 ; Common +1D7A9 ; Common +1D7AA..1D7C2 ; Common +1D7C3 ; Common +1D7C4..1D7CB ; Common +1D7CE..1D7FF ; Common +E0001 ; Common +E0020..E007F ; Common + +# Total code points: 5020 + +# ================================================ + +0041..005A ; Latin +0061..007A ; Latin +00AA ; Latin +00BA ; Latin +00C0..00D6 ; Latin +00D8..00F6 ; Latin +00F8..01BA ; Latin +01BB ; Latin +01BC..01BF ; Latin +01C0..01C3 ; Latin +01C4..0293 ; Latin +0294 ; Latin +0295..02AF ; Latin +02B0..02B8 ; Latin +02E0..02E4 ; Latin +1D00..1D25 ; Latin +1D2C..1D5C ; Latin +1D62..1D65 ; Latin +1D6B..1D77 ; Latin +1D79..1D9A ; Latin +1D9B..1DBE ; Latin +1E00..1E9B ; Latin +1EA0..1EF9 ; Latin +2071 ; Latin +207F ; Latin +2090..2094 ; Latin +212A..212B ; Latin +2132 ; Latin +214E ; Latin +2184 ; Latin +2C60..2C6C ; Latin +2C74..2C77 ; Latin +FB00..FB06 ; Latin +FF21..FF3A ; Latin +FF41..FF5A ; Latin + +# Total code points: 1070 + +# ================================================ + +0374..0375 ; Greek +037A ; Greek +037B..037D ; Greek +0384..0385 ; Greek +0386 ; Greek +0388..038A ; Greek +038C ; Greek +038E..03A1 ; Greek +03A3..03CE ; Greek +03D0..03E1 ; Greek +03F0..03F5 ; Greek +03F6 ; Greek +03F7..03FF ; Greek +1D26..1D2A ; Greek +1D5D..1D61 ; Greek +1D66..1D6A ; Greek +1DBF ; Greek +1F00..1F15 ; Greek +1F18..1F1D ; Greek +1F20..1F45 ; Greek +1F48..1F4D ; Greek +1F50..1F57 ; Greek +1F59 ; Greek +1F5B ; Greek +1F5D ; Greek +1F5F..1F7D ; Greek +1F80..1FB4 ; Greek +1FB6..1FBC ; Greek +1FBD ; Greek +1FBE ; Greek +1FBF..1FC1 ; Greek +1FC2..1FC4 ; Greek +1FC6..1FCC ; Greek +1FCD..1FCF ; Greek +1FD0..1FD3 ; Greek +1FD6..1FDB ; Greek +1FDD..1FDF ; Greek +1FE0..1FEC ; Greek +1FED..1FEF ; Greek +1FF2..1FF4 ; Greek +1FF6..1FFC ; Greek +1FFD..1FFE ; Greek +2126 ; Greek +10140..10174 ; Greek +10175..10178 ; Greek +10179..10189 ; Greek +1018A ; Greek +1D200..1D241 ; Greek +1D242..1D244 ; Greek +1D245 ; Greek + +# Total code points: 506 + +# ================================================ + +0400..0481 ; Cyrillic +0482 ; Cyrillic +0483..0486 ; Cyrillic +0488..0489 ; Cyrillic +048A..0513 ; Cyrillic +1D2B ; Cyrillic +1D78 ; Cyrillic + +# Total code points: 277 + +# ================================================ + +0531..0556 ; Armenian +0559 ; Armenian +055A..055F ; Armenian +0561..0587 ; Armenian +058A ; Armenian +FB13..FB17 ; Armenian + +# Total code points: 90 + +# ================================================ + +0591..05BD ; Hebrew +05BE ; Hebrew +05BF ; Hebrew +05C0 ; Hebrew +05C1..05C2 ; Hebrew +05C3 ; Hebrew +05C4..05C5 ; Hebrew +05C6 ; Hebrew +05C7 ; Hebrew +05D0..05EA ; Hebrew +05F0..05F2 ; Hebrew +05F3..05F4 ; Hebrew +FB1D ; Hebrew +FB1E ; Hebrew +FB1F..FB28 ; Hebrew +FB29 ; Hebrew +FB2A..FB36 ; Hebrew +FB38..FB3C ; Hebrew +FB3E ; Hebrew +FB40..FB41 ; Hebrew +FB43..FB44 ; Hebrew +FB46..FB4F ; Hebrew + +# Total code points: 133 + +# ================================================ + +060B ; Arabic +060D ; Arabic +060E..060F ; Arabic +0610..0615 ; Arabic +061E ; Arabic +0621..063A ; Arabic +0641..064A ; Arabic +0656..065E ; Arabic +066A..066D ; Arabic +066E..066F ; Arabic +0671..06D3 ; Arabic +06D4 ; Arabic +06D5 ; Arabic +06D6..06DC ; Arabic +06DE ; Arabic +06DF..06E4 ; Arabic +06E5..06E6 ; Arabic +06E7..06E8 ; Arabic +06E9 ; Arabic +06EA..06ED ; Arabic +06EE..06EF ; Arabic +06F0..06F9 ; Arabic +06FA..06FC ; Arabic +06FD..06FE ; Arabic +06FF ; Arabic +0750..076D ; Arabic +FB50..FBB1 ; Arabic +FBD3..FD3D ; Arabic +FD50..FD8F ; Arabic +FD92..FDC7 ; Arabic +FDF0..FDFB ; Arabic +FDFC ; Arabic +FE70..FE74 ; Arabic +FE76..FEFC ; Arabic + +# Total code points: 966 + +# ================================================ + +0700..070D ; Syriac +070F ; Syriac +0710 ; Syriac +0711 ; Syriac +0712..072F ; Syriac +0730..074A ; Syriac +074D..074F ; Syriac + +# Total code points: 77 + +# ================================================ + +0780..07A5 ; Thaana +07A6..07B0 ; Thaana +07B1 ; Thaana + +# Total code points: 50 + +# ================================================ + +0901..0902 ; Devanagari +0903 ; Devanagari +0904..0939 ; Devanagari +093C ; Devanagari +093D ; Devanagari +093E..0940 ; Devanagari +0941..0948 ; Devanagari +0949..094C ; Devanagari +094D ; Devanagari +0950 ; Devanagari +0951..0954 ; Devanagari +0958..0961 ; Devanagari +0962..0963 ; Devanagari +0966..096F ; Devanagari +097B..097F ; Devanagari + +# Total code points: 107 + +# ================================================ + +0981 ; Bengali +0982..0983 ; Bengali +0985..098C ; Bengali +098F..0990 ; Bengali +0993..09A8 ; Bengali +09AA..09B0 ; Bengali +09B2 ; Bengali +09B6..09B9 ; Bengali +09BC ; Bengali +09BD ; Bengali +09BE..09C0 ; Bengali +09C1..09C4 ; Bengali +09C7..09C8 ; Bengali +09CB..09CC ; Bengali +09CD ; Bengali +09CE ; Bengali +09D7 ; Bengali +09DC..09DD ; Bengali +09DF..09E1 ; Bengali +09E2..09E3 ; Bengali +09E6..09EF ; Bengali +09F0..09F1 ; Bengali +09F2..09F3 ; Bengali +09F4..09F9 ; Bengali +09FA ; Bengali + +# Total code points: 91 + +# ================================================ + +0A01..0A02 ; Gurmukhi +0A03 ; Gurmukhi +0A05..0A0A ; Gurmukhi +0A0F..0A10 ; Gurmukhi +0A13..0A28 ; Gurmukhi +0A2A..0A30 ; Gurmukhi +0A32..0A33 ; Gurmukhi +0A35..0A36 ; Gurmukhi +0A38..0A39 ; Gurmukhi +0A3C ; Gurmukhi +0A3E..0A40 ; Gurmukhi +0A41..0A42 ; Gurmukhi +0A47..0A48 ; Gurmukhi +0A4B..0A4D ; Gurmukhi +0A59..0A5C ; Gurmukhi +0A5E ; Gurmukhi +0A66..0A6F ; Gurmukhi +0A70..0A71 ; Gurmukhi +0A72..0A74 ; Gurmukhi + +# Total code points: 77 + +# ================================================ + +0A81..0A82 ; Gujarati +0A83 ; Gujarati +0A85..0A8D ; Gujarati +0A8F..0A91 ; Gujarati +0A93..0AA8 ; Gujarati +0AAA..0AB0 ; Gujarati +0AB2..0AB3 ; Gujarati +0AB5..0AB9 ; Gujarati +0ABC ; Gujarati +0ABD ; Gujarati +0ABE..0AC0 ; Gujarati +0AC1..0AC5 ; Gujarati +0AC7..0AC8 ; Gujarati +0AC9 ; Gujarati +0ACB..0ACC ; Gujarati +0ACD ; Gujarati +0AD0 ; Gujarati +0AE0..0AE1 ; Gujarati +0AE2..0AE3 ; Gujarati +0AE6..0AEF ; Gujarati +0AF1 ; Gujarati + +# Total code points: 83 + +# ================================================ + +0B01 ; Oriya +0B02..0B03 ; Oriya +0B05..0B0C ; Oriya +0B0F..0B10 ; Oriya +0B13..0B28 ; Oriya +0B2A..0B30 ; Oriya +0B32..0B33 ; Oriya +0B35..0B39 ; Oriya +0B3C ; Oriya +0B3D ; Oriya +0B3E ; Oriya +0B3F ; Oriya +0B40 ; Oriya +0B41..0B43 ; Oriya +0B47..0B48 ; Oriya +0B4B..0B4C ; Oriya +0B4D ; Oriya +0B56 ; Oriya +0B57 ; Oriya +0B5C..0B5D ; Oriya +0B5F..0B61 ; Oriya +0B66..0B6F ; Oriya +0B70 ; Oriya +0B71 ; Oriya + +# Total code points: 81 + +# ================================================ + +0B82 ; Tamil +0B83 ; Tamil +0B85..0B8A ; Tamil +0B8E..0B90 ; Tamil +0B92..0B95 ; Tamil +0B99..0B9A ; Tamil +0B9C ; Tamil +0B9E..0B9F ; Tamil +0BA3..0BA4 ; Tamil +0BA8..0BAA ; Tamil +0BAE..0BB9 ; Tamil +0BBE..0BBF ; Tamil +0BC0 ; Tamil +0BC1..0BC2 ; Tamil +0BC6..0BC8 ; Tamil +0BCA..0BCC ; Tamil +0BCD ; Tamil +0BD7 ; Tamil +0BE6..0BEF ; Tamil +0BF0..0BF2 ; Tamil +0BF3..0BF8 ; Tamil +0BF9 ; Tamil +0BFA ; Tamil + +# Total code points: 71 + +# ================================================ + +0C01..0C03 ; Telugu +0C05..0C0C ; Telugu +0C0E..0C10 ; Telugu +0C12..0C28 ; Telugu +0C2A..0C33 ; Telugu +0C35..0C39 ; Telugu +0C3E..0C40 ; Telugu +0C41..0C44 ; Telugu +0C46..0C48 ; Telugu +0C4A..0C4D ; Telugu +0C55..0C56 ; Telugu +0C60..0C61 ; Telugu +0C66..0C6F ; Telugu + +# Total code points: 80 + +# ================================================ + +0C82..0C83 ; Kannada +0C85..0C8C ; Kannada +0C8E..0C90 ; Kannada +0C92..0CA8 ; Kannada +0CAA..0CB3 ; Kannada +0CB5..0CB9 ; Kannada +0CBC ; Kannada +0CBD ; Kannada +0CBE ; Kannada +0CBF ; Kannada +0CC0..0CC4 ; Kannada +0CC6 ; Kannada +0CC7..0CC8 ; Kannada +0CCA..0CCB ; Kannada +0CCC..0CCD ; Kannada +0CD5..0CD6 ; Kannada +0CDE ; Kannada +0CE0..0CE1 ; Kannada +0CE2..0CE3 ; Kannada +0CE6..0CEF ; Kannada +0CF1..0CF2 ; Kannada + +# Total code points: 86 + +# ================================================ + +0D02..0D03 ; Malayalam +0D05..0D0C ; Malayalam +0D0E..0D10 ; Malayalam +0D12..0D28 ; Malayalam +0D2A..0D39 ; Malayalam +0D3E..0D40 ; Malayalam +0D41..0D43 ; Malayalam +0D46..0D48 ; Malayalam +0D4A..0D4C ; Malayalam +0D4D ; Malayalam +0D57 ; Malayalam +0D60..0D61 ; Malayalam +0D66..0D6F ; Malayalam + +# Total code points: 78 + +# ================================================ + +0D82..0D83 ; Sinhala +0D85..0D96 ; Sinhala +0D9A..0DB1 ; Sinhala +0DB3..0DBB ; Sinhala +0DBD ; Sinhala +0DC0..0DC6 ; Sinhala +0DCA ; Sinhala +0DCF..0DD1 ; Sinhala +0DD2..0DD4 ; Sinhala +0DD6 ; Sinhala +0DD8..0DDF ; Sinhala +0DF2..0DF3 ; Sinhala +0DF4 ; Sinhala + +# Total code points: 80 + +# ================================================ + +0E01..0E30 ; Thai +0E31 ; Thai +0E32..0E33 ; Thai +0E34..0E3A ; Thai +0E40..0E45 ; Thai +0E46 ; Thai +0E47..0E4E ; Thai +0E4F ; Thai +0E50..0E59 ; Thai +0E5A..0E5B ; Thai + +# Total code points: 86 + +# ================================================ + +0E81..0E82 ; Lao +0E84 ; Lao +0E87..0E88 ; Lao +0E8A ; Lao +0E8D ; Lao +0E94..0E97 ; Lao +0E99..0E9F ; Lao +0EA1..0EA3 ; Lao +0EA5 ; Lao +0EA7 ; Lao +0EAA..0EAB ; Lao +0EAD..0EB0 ; Lao +0EB1 ; Lao +0EB2..0EB3 ; Lao +0EB4..0EB9 ; Lao +0EBB..0EBC ; Lao +0EBD ; Lao +0EC0..0EC4 ; Lao +0EC6 ; Lao +0EC8..0ECD ; Lao +0ED0..0ED9 ; Lao +0EDC..0EDD ; Lao + +# Total code points: 65 + +# ================================================ + +0F00 ; Tibetan +0F01..0F03 ; Tibetan +0F04..0F12 ; Tibetan +0F13..0F17 ; Tibetan +0F18..0F19 ; Tibetan +0F1A..0F1F ; Tibetan +0F20..0F29 ; Tibetan +0F2A..0F33 ; Tibetan +0F34 ; Tibetan +0F35 ; Tibetan +0F36 ; Tibetan +0F37 ; Tibetan +0F38 ; Tibetan +0F39 ; Tibetan +0F3A ; Tibetan +0F3B ; Tibetan +0F3C ; Tibetan +0F3D ; Tibetan +0F3E..0F3F ; Tibetan +0F40..0F47 ; Tibetan +0F49..0F6A ; Tibetan +0F71..0F7E ; Tibetan +0F7F ; Tibetan +0F80..0F84 ; Tibetan +0F85 ; Tibetan +0F86..0F87 ; Tibetan +0F88..0F8B ; Tibetan +0F90..0F97 ; Tibetan +0F99..0FBC ; Tibetan +0FBE..0FC5 ; Tibetan +0FC6 ; Tibetan +0FC7..0FCC ; Tibetan +0FCF ; Tibetan +0FD0..0FD1 ; Tibetan + +# Total code points: 195 + +# ================================================ + +1000..1021 ; Myanmar +1023..1027 ; Myanmar +1029..102A ; Myanmar +102C ; Myanmar +102D..1030 ; Myanmar +1031 ; Myanmar +1032 ; Myanmar +1036..1037 ; Myanmar +1038 ; Myanmar +1039 ; Myanmar +1040..1049 ; Myanmar +104A..104F ; Myanmar +1050..1055 ; Myanmar +1056..1057 ; Myanmar +1058..1059 ; Myanmar + +# Total code points: 78 + +# ================================================ + +10A0..10C5 ; Georgian +10D0..10FA ; Georgian +10FC ; Georgian +2D00..2D25 ; Georgian + +# Total code points: 120 + +# ================================================ + +1100..1159 ; Hangul +115F..11A2 ; Hangul +11A8..11F9 ; Hangul +3131..318E ; Hangul +3200..321E ; Hangul +3260..327D ; Hangul +AC00..D7A3 ; Hangul +FFA0..FFBE ; Hangul +FFC2..FFC7 ; Hangul +FFCA..FFCF ; Hangul +FFD2..FFD7 ; Hangul +FFDA..FFDC ; Hangul + +# Total code points: 11619 + +# ================================================ + +1200..1248 ; Ethiopic +124A..124D ; Ethiopic +1250..1256 ; Ethiopic +1258 ; Ethiopic +125A..125D ; Ethiopic +1260..1288 ; Ethiopic +128A..128D ; Ethiopic +1290..12B0 ; Ethiopic +12B2..12B5 ; Ethiopic +12B8..12BE ; Ethiopic +12C0 ; Ethiopic +12C2..12C5 ; Ethiopic +12C8..12D6 ; Ethiopic +12D8..1310 ; Ethiopic +1312..1315 ; Ethiopic +1318..135A ; Ethiopic +135F ; Ethiopic +1360 ; Ethiopic +1361..1368 ; Ethiopic +1369..137C ; Ethiopic +1380..138F ; Ethiopic +1390..1399 ; Ethiopic +2D80..2D96 ; Ethiopic +2DA0..2DA6 ; Ethiopic +2DA8..2DAE ; Ethiopic +2DB0..2DB6 ; Ethiopic +2DB8..2DBE ; Ethiopic +2DC0..2DC6 ; Ethiopic +2DC8..2DCE ; Ethiopic +2DD0..2DD6 ; Ethiopic +2DD8..2DDE ; Ethiopic + +# Total code points: 461 + +# ================================================ + +13A0..13F4 ; Cherokee + +# Total code points: 85 + +# ================================================ + +1401..166C ; Canadian_Aboriginal +166D..166E ; Canadian_Aboriginal +166F..1676 ; Canadian_Aboriginal + +# Total code points: 630 + +# ================================================ + +1680 ; Ogham +1681..169A ; Ogham +169B ; Ogham +169C ; Ogham + +# Total code points: 29 + +# ================================================ + +16A0..16EA ; Runic +16EE..16F0 ; Runic + +# Total code points: 78 + +# ================================================ + +1780..17B3 ; Khmer +17B4..17B5 ; Khmer +17B6 ; Khmer +17B7..17BD ; Khmer +17BE..17C5 ; Khmer +17C6 ; Khmer +17C7..17C8 ; Khmer +17C9..17D3 ; Khmer +17D4..17D6 ; Khmer +17D7 ; Khmer +17D8..17DA ; Khmer +17DB ; Khmer +17DC ; Khmer +17DD ; Khmer +17E0..17E9 ; Khmer +17F0..17F9 ; Khmer +19E0..19FF ; Khmer + +# Total code points: 146 + +# ================================================ + +1800..1801 ; Mongolian +1804 ; Mongolian +1806 ; Mongolian +1807..180A ; Mongolian +180B..180D ; Mongolian +180E ; Mongolian +1810..1819 ; Mongolian +1820..1842 ; Mongolian +1843 ; Mongolian +1844..1877 ; Mongolian +1880..18A8 ; Mongolian +18A9 ; Mongolian + +# Total code points: 152 + +# ================================================ + +3041..3096 ; Hiragana +309D..309E ; Hiragana +309F ; Hiragana + +# Total code points: 89 + +# ================================================ + +30A1..30FA ; Katakana +30FD..30FE ; Katakana +30FF ; Katakana +31F0..31FF ; Katakana +FF66..FF6F ; Katakana +FF71..FF9D ; Katakana + +# Total code points: 164 + +# ================================================ + +3105..312C ; Bopomofo +31A0..31B7 ; Bopomofo + +# Total code points: 64 + +# ================================================ + +2E80..2E99 ; Han +2E9B..2EF3 ; Han +2F00..2FD5 ; Han +3005 ; Han +3007 ; Han +3021..3029 ; Han +3038..303A ; Han +303B ; Han +3400..4DB5 ; Han +4E00..9FBB ; Han +F900..FA2D ; Han +FA30..FA6A ; Han +FA70..FAD9 ; Han +20000..2A6D6 ; Han +2F800..2FA1D ; Han + +# Total code points: 71570 + +# ================================================ + +A000..A014 ; Yi +A015 ; Yi +A016..A48C ; Yi +A490..A4C6 ; Yi + +# Total code points: 1220 + +# ================================================ + +10300..1031E ; Old_Italic +10320..10323 ; Old_Italic + +# Total code points: 35 + +# ================================================ + +10330..10340 ; Gothic +10341 ; Gothic +10342..10349 ; Gothic +1034A ; Gothic + +# Total code points: 27 + +# ================================================ + +10400..1044F ; Deseret + +# Total code points: 80 + +# ================================================ + +0300..036F ; Inherited +064B..0655 ; Inherited +0670 ; Inherited +1DC0..1DCA ; Inherited +1DFE..1DFF ; Inherited +200C..200D ; Inherited +20D0..20DC ; Inherited +20DD..20E0 ; Inherited +20E1 ; Inherited +20E2..20E4 ; Inherited +20E5..20EF ; Inherited +302A..302F ; Inherited +3099..309A ; Inherited +FE00..FE0F ; Inherited +FE20..FE23 ; Inherited +1D167..1D169 ; Inherited +1D17B..1D182 ; Inherited +1D185..1D18B ; Inherited +1D1AA..1D1AD ; Inherited +E0100..E01EF ; Inherited + +# Total code points: 461 + +# ================================================ + +1700..170C ; Tagalog +170E..1711 ; Tagalog +1712..1714 ; Tagalog + +# Total code points: 20 + +# ================================================ + +1720..1731 ; Hanunoo +1732..1734 ; Hanunoo + +# Total code points: 21 + +# ================================================ + +1740..1751 ; Buhid +1752..1753 ; Buhid + +# Total code points: 20 + +# ================================================ + +1760..176C ; Tagbanwa +176E..1770 ; Tagbanwa +1772..1773 ; Tagbanwa + +# Total code points: 18 + +# ================================================ + +1900..191C ; Limbu +1920..1922 ; Limbu +1923..1926 ; Limbu +1927..1928 ; Limbu +1929..192B ; Limbu +1930..1931 ; Limbu +1932 ; Limbu +1933..1938 ; Limbu +1939..193B ; Limbu +1940 ; Limbu +1944..1945 ; Limbu +1946..194F ; Limbu + +# Total code points: 66 + +# ================================================ + +1950..196D ; Tai_Le +1970..1974 ; Tai_Le + +# Total code points: 35 + +# ================================================ + +10000..1000B ; Linear_B +1000D..10026 ; Linear_B +10028..1003A ; Linear_B +1003C..1003D ; Linear_B +1003F..1004D ; Linear_B +10050..1005D ; Linear_B +10080..100FA ; Linear_B + +# Total code points: 211 + +# ================================================ + +10380..1039D ; Ugaritic +1039F ; Ugaritic + +# Total code points: 31 + +# ================================================ + +10450..1047F ; Shavian + +# Total code points: 48 + +# ================================================ + +10480..1049D ; Osmanya +104A0..104A9 ; Osmanya + +# Total code points: 40 + +# ================================================ + +10800..10805 ; Cypriot +10808 ; Cypriot +1080A..10835 ; Cypriot +10837..10838 ; Cypriot +1083C ; Cypriot +1083F ; Cypriot + +# Total code points: 55 + +# ================================================ + +2800..28FF ; Braille + +# Total code points: 256 + +# ================================================ + +1A00..1A16 ; Buginese +1A17..1A18 ; Buginese +1A19..1A1B ; Buginese +1A1E..1A1F ; Buginese + +# Total code points: 30 + +# ================================================ + +03E2..03EF ; Coptic +2C80..2CE4 ; Coptic +2CE5..2CEA ; Coptic +2CF9..2CFC ; Coptic +2CFD ; Coptic +2CFE..2CFF ; Coptic + +# Total code points: 128 + +# ================================================ + +1980..19A9 ; New_Tai_Lue +19B0..19C0 ; New_Tai_Lue +19C1..19C7 ; New_Tai_Lue +19C8..19C9 ; New_Tai_Lue +19D0..19D9 ; New_Tai_Lue +19DE..19DF ; New_Tai_Lue + +# Total code points: 80 + +# ================================================ + +2C00..2C2E ; Glagolitic +2C30..2C5E ; Glagolitic + +# Total code points: 94 + +# ================================================ + +2D30..2D65 ; Tifinagh +2D6F ; Tifinagh + +# Total code points: 55 + +# ================================================ + +A800..A801 ; Syloti_Nagri +A802 ; Syloti_Nagri +A803..A805 ; Syloti_Nagri +A806 ; Syloti_Nagri +A807..A80A ; Syloti_Nagri +A80B ; Syloti_Nagri +A80C..A822 ; Syloti_Nagri +A823..A824 ; Syloti_Nagri +A825..A826 ; Syloti_Nagri +A827 ; Syloti_Nagri +A828..A82B ; Syloti_Nagri + +# Total code points: 44 + +# ================================================ + +103A0..103C3 ; Old_Persian +103C8..103CF ; Old_Persian +103D0 ; Old_Persian +103D1..103D5 ; Old_Persian + +# Total code points: 50 + +# ================================================ + +10A00 ; Kharoshthi +10A01..10A03 ; Kharoshthi +10A05..10A06 ; Kharoshthi +10A0C..10A0F ; Kharoshthi +10A10..10A13 ; Kharoshthi +10A15..10A17 ; Kharoshthi +10A19..10A33 ; Kharoshthi +10A38..10A3A ; Kharoshthi +10A3F ; Kharoshthi +10A40..10A47 ; Kharoshthi +10A50..10A58 ; Kharoshthi + +# Total code points: 65 + +# ================================================ + +1B00..1B03 ; Balinese +1B04 ; Balinese +1B05..1B33 ; Balinese +1B34 ; Balinese +1B35 ; Balinese +1B36..1B3A ; Balinese +1B3B ; Balinese +1B3C ; Balinese +1B3D..1B41 ; Balinese +1B42 ; Balinese +1B43..1B44 ; Balinese +1B45..1B4B ; Balinese +1B50..1B59 ; Balinese +1B5A..1B60 ; Balinese +1B61..1B6A ; Balinese +1B6B..1B73 ; Balinese +1B74..1B7C ; Balinese + +# Total code points: 121 + +# ================================================ + +12000..1236E ; Cuneiform +12400..12462 ; Cuneiform +12470..12473 ; Cuneiform + +# Total code points: 982 + +# ================================================ + +10900..10915 ; Phoenician +10916..10919 ; Phoenician +1091F ; Phoenician + +# Total code points: 27 + +# ================================================ + +A840..A873 ; Phags_Pa +A874..A877 ; Phags_Pa + +# Total code points: 56 + +# ================================================ + +07C0..07C9 ; Nko +07CA..07EA ; Nko +07EB..07F3 ; Nko +07F4..07F5 ; Nko +07F6 ; Nko +07F7..07F9 ; Nko +07FA ; Nko + +# Total code points: 59 + +# EOF diff --git a/icuSources/data/unidata/base_unidata/UnicodeData.txt b/icuSources/data/unidata/base_unidata/UnicodeData.txt new file mode 100644 index 00000000..299f0e57 --- /dev/null +++ b/icuSources/data/unidata/base_unidata/UnicodeData.txt @@ -0,0 +1,17720 @@ +0000;<control>;Cc;0;BN;;;;;N;NULL;;;; +0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;; +0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; +0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;; +0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; +0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;; +0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; +0007;<control>;Cc;0;BN;;;;;N;BELL;;;; +0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;; +0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;; +000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;; +000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;; +000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;; +000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;; +000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;; +000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;; +0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; +0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; +0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; +0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; +0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; +0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; +0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; +0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; +0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;; +0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;; +001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;; +001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;; +001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;; +001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;; +001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;; +001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;; +0020;SPACE;Zs;0;WS;;;;;N;;;;; +0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; +0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; +0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; +0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; +0026;AMPERSAND;Po;0;ON;;;;;N;;;;; +0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; +0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; +0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; +002A;ASTERISK;Po;0;ON;;;;;N;;;;; +002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; +002C;COMMA;Po;0;CS;;;;;N;;;;; +002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; +002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; +002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; +0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; +0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; +0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; +0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; +0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; +0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; +0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; +0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; +0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; +0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; +003A;COLON;Po;0;CS;;;;;N;;;;; +003B;SEMICOLON;Po;0;ON;;;;;N;;;;; +003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; +003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; +003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; +003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; +0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; +0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; +0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; +0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; +0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; +0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; +0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; +0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; +0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; +0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; +004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; +004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; +004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; +004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; +004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; +004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; +0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; +0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; +0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; +0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; +0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; +0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; +0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; +0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; +0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; +0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; +005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; +005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; +005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; +005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; +005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; +005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; +0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; +0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 +0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 +0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 +0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 +0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 +0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 +0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 +0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 +0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 +006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A +006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B +006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C +006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D +006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E +006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F +0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 +0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 +0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 +0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 +0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 +0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 +0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 +0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 +0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 +0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 +007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A +007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; +007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; +007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; +007E;TILDE;Sm;0;ON;;;;;N;;;;; +007F;<control>;Cc;0;BN;;;;;N;DELETE;;;; +0080;<control>;Cc;0;BN;;;;;N;;;;; +0081;<control>;Cc;0;BN;;;;;N;;;;; +0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; +0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;; +0084;<control>;Cc;0;BN;;;;;N;;;;; +0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;; +0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; +0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; +0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; +0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; +008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; +008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;; +008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;; +008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; +008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; +008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; +0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; +0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; +0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; +0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; +0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; +0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; +0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; +0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; +0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;; +0099;<control>;Cc;0;BN;;;;;N;;;;; +009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; +009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; +009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; +009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; +009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; +009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; +00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;; +00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; +00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; +00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; +00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; +00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; +00A7;SECTION SIGN;So;0;ON;;;;;N;;;;; +00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;; +00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; +00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;; +00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;; +00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; +00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; +00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; +00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;; +00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; +00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; +00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;; +00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;; +00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;; +00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C +00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; +00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; +00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;; +00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; +00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;; +00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;; +00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; +00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; +00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; +00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; +00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; +00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; +00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; +00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; +00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; +00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; +00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6; +00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; +00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; +00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; +00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; +00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; +00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; +00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; +00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; +00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; +00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0; +00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; +00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; +00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; +00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; +00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; +00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; +00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; +00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; +00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; +00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; +00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; +00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; +00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; +00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE; +00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;; +00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 +00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 +00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 +00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 +00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 +00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 +00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6 +00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 +00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 +00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 +00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA +00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB +00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC +00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD +00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE +00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF +00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0 +00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 +00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 +00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 +00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 +00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 +00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 +00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 +00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 +00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA +00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB +00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC +00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD +00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE +00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 +0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; +0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 +0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; +0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 +0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; +0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 +0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; +0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 +0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; +0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 +010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; +010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A +010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; +010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C +010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; +010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E +0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; +0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 +0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; +0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 +0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; +0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 +0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; +0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 +0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; +0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 +011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; +011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A +011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; +011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C +011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; +011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E +0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; +0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 +0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; +0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 +0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; +0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 +0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; +0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 +0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; +0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 +012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; +012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A +012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; +012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C +012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; +012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E +0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; +0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 +0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; +0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 +0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; +0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 +0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; +0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 +0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;; +0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; +013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 +013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; +013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B +013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; +013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D +013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140; +0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F +0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; +0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 +0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; +0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 +0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; +0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 +0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; +0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 +0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; +014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B; +014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A +014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; +014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C +014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; +014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E +0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; +0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 +0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; +0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 +0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; +0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 +0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; +0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 +0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; +0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 +015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; +015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A +015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; +015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C +015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F; +015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E +0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; +0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 +0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163; +0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162 +0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; +0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 +0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; +0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 +0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; +0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 +016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; +016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A +016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; +016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C +016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; +016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E +0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; +0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 +0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; +0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 +0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; +0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 +0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; +0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 +0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; +0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; +017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 +017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; +017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B +017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; +017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D +017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053 +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 +0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; +0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; +0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 +0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; +0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 +0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; +0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; +0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 +0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256; +018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; +018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; +018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B +018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; +018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; +018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; +0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; +0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; +0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 +0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; +0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; +0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6 +0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; +0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; +0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; +0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D +019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; +019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; +019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; +019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 +019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275; +01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; +01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 +01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3; +01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2 +01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; +01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 +01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280; +01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; +01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 +01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; +01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; +01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; +01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; +01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC +01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; +01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; +01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF +01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; +01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; +01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; +01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 +01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; +01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 +01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; +01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; +01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 +01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; +01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; +01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; +01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC +01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; +01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 +01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; +01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; +01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; +01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; +01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 +01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5 +01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 +01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 +01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8 +01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 +01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB +01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB +01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB +01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; +01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD +01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; +01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF +01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; +01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 +01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; +01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 +01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; +01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 +01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; +01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 +01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; +01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 +01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; +01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB +01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E +01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; +01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE +01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; +01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 +01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3; +01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2 +01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; +01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 +01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; +01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 +01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; +01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 +01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; +01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA +01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; +01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC +01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; +01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE +01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; +01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2 +01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2 +01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2 +01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; +01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 +01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; +01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; +01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; +01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 +01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; +01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA +01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD; +01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC +01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; +01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE +0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; +0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 +0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; +0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 +0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; +0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 +0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; +0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 +0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; +0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 +020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; +020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A +020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; +020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C +020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; +020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E +0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; +0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 +0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; +0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 +0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; +0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 +0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; +0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 +0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219; +0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218 +021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B; +021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A +021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; +021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C +021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; +021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E +0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E; +0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;; +0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; +0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 +0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; +0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 +0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; +0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 +0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; +0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 +022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; +022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A +022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; +022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C +022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; +022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E +0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; +0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 +0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; +0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 +0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; +0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; +0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E +0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;; +0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;; +0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; +0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 +0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 +0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; +0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 +0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A +0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; +0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F +025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; +025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 +025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;; +025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; +025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; +025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; +0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 +0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;; +0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; +0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 +0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; +0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;; +0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; +0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; +0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 +0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 +026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 +026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; +026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; +026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; +026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C +0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; +0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;; +0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D +0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; +0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; +0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F +0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; +0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; +0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; +0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; +027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; +027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; +027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 +027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; +027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; +0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6 +0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; +0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; +0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 +0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; +0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; +0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; +0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; +0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 +028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 +028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 +028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; +028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; +028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; +0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; +0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; +0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 +0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; +0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; +0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; +0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; +0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; +029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; +029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; +029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; +029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;; +029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; +029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; +02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; +02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; +02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; +02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; +02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; +02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; +02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; +02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; +02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; +02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; +02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; +02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; +02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; +02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; +02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; +02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; +02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;; +02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; +02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;; +02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;; +02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;; +02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; +02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;; +02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;; +02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;; +02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;; +02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;; +02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; +02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; +02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; +02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; +02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; +02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; +02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; +02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; +02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;; +02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; +02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;; +02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;; +02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;; +02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;; +02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;; +02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; +02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; +02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; +02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; +02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; +02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; +02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; +02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; +02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; +02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; +02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;; +02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;; +02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;; +02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;; +02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;; +02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; +02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; +02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; +02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;; +02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;; +02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;; +02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;; +02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;; +02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; +02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; +02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; +02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; +02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; +02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; +02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; +02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;; +02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; +02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; +02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;; +02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; +02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; +02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;; +02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;; +02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;; +02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;; +02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;; +02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;; +02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;; +02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;; +02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;; +02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;; +0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;; +0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;; +0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; +0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; +0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; +0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; +0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;; +0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; +0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;; +0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; +030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; +030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; +030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; +030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;; +030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; +030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; +0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; +0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; +0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; +0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;; +0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;; +0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; +0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; +0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; +0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; +0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; +031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; +031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; +031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; +031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; +031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; +031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; +0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; +0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; +0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; +0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; +0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; +0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; +0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; +0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; +0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; +0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; +032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; +032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; +032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; +032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; +032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; +032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; +0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; +0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; +0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; +0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; +0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; +0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; +0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; +0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; +0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; +0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; +033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; +033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; +033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; +033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; +033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; +033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; +0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;; +0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;; +0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; +0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; +0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; +0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 +0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; +0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; +0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; +034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; +034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; +034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; +034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;; +0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;; +0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;; +0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; +035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; +035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; +035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; +0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; +0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; +0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; +0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;; +0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;; +0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;; +0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;; +0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;; +0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;; +0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;; +036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;; +036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;; +036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;; +036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; +036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; +036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; +0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; +0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; +037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF +037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;; +0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;; +0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; +0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; +0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; +0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; +0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; +038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; +038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; +038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; +038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; +0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; +0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; +0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; +0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; +0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; +0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; +0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; +0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; +0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; +0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; +039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; +039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; +039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; +039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; +039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; +039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; +03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; +03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; +03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; +03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; +03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; +03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; +03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; +03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; +03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; +03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; +03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; +03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 +03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 +03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 +03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A +03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; +03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 +03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 +03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 +03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 +03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 +03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 +03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 +03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 +03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 +03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A +03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B +03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C +03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D +03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E +03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F +03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 +03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 +03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 +03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 +03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 +03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 +03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 +03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 +03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 +03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 +03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA +03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB +03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C +03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E +03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F +03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 +03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 +03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; +03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; +03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; +03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 +03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 +03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;; +03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9; +03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8 +03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; +03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA +03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; +03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC +03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; +03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE +03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; +03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 +03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; +03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 +03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; +03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 +03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; +03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 +03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; +03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 +03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; +03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA +03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; +03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC +03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; +03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE +03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A +03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 +03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9 +03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;; +03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8; +03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395 +03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;; +03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8; +03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7 +03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2; +03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; +03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; +0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; +0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; +0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; +0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; +0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; +0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; +0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; +0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457; +0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; +0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; +040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; +040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B; +040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; +040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; +040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E; +040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; +0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; +0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; +0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; +0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; +0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; +0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; +0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; +0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; +0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; +0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; +041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; +041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; +041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; +041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; +041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; +041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; +0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; +0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; +0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; +0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; +0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; +0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; +0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; +0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; +0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; +0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; +042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; +042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; +042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; +042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; +042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; +042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; +0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 +0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 +0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 +0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 +0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 +0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 +0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 +0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 +0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 +0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 +043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A +043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B +043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C +043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D +043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E +043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F +0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 +0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 +0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 +0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 +0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 +0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 +0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 +0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 +0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 +0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 +044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A +044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B +044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C +044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D +044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E +044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F +0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 +0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 +0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402 +0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 +0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 +0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 +0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 +0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407 +0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 +0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 +045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A +045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B +045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C +045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D +045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E +045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F +0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; +0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 +0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; +0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 +0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; +0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 +0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; +0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 +0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; +0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 +046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; +046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A +046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; +046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C +046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; +046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E +0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; +0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 +0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; +0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 +0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; +0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 +0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; +0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 +0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; +0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 +047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; +047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A +047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; +047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C +047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; +047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E +0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; +0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 +0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; +0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; +0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; +0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; +0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; +0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; +0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; +048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A +048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; +048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C +048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; +048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E +0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; +0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 +0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; +0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 +0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; +0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 +0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; +0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 +0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; +0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 +049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; +049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A +049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; +049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C +049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; +049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E +04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; +04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 +04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; +04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 +04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; +04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 +04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7; +04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6 +04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; +04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 +04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; +04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA +04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; +04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC +04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; +04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE +04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; +04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 +04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; +04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 +04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5; +04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4 +04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; +04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 +04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; +04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 +04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; +04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA +04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; +04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC +04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; +04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; +04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; +04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 +04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; +04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 +04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6; +04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5 +04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; +04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 +04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA; +04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9 +04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; +04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB +04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; +04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 +04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; +04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 +04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; +04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 +04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; +04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 +04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; +04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 +04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; +04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 +04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; +04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA +04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; +04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC +04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; +04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE +04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; +04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 +04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; +04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 +04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; +04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 +04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; +04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 +04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; +04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 +04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; +04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA +04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; +04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC +04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; +04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE +04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; +04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 +04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; +04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 +04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; +04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 +04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; +04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE +0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; +0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 +0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; +0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502 +0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505; +0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504 +0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507; +0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506 +0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509; +0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508 +050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B; +050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A +050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D; +050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C +050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; +050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 +0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; +0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; +0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; +0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; +0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; +0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; +0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; +0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; +0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; +053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; +053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; +053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; +053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; +053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; +053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; +0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; +0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; +0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; +0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; +0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; +0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; +0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; +0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; +0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; +0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; +054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; +054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; +054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; +054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; +054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; +054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; +0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; +0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; +0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; +0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; +0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; +0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; +0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; +0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; +055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; +055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; +055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; +055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; +055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; +055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; +0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 +0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 +0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 +0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 +0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 +0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 +0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 +0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 +0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 +056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A +056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B +056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C +056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D +056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E +056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F +0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 +0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 +0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 +0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 +0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 +0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 +0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 +0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 +0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 +0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 +057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A +057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B +057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C +057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D +057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E +057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F +0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 +0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 +0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 +0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 +0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 +0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 +0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 +0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;; +0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; +058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; +0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; +0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; +0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; +0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; +0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; +0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;; +0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; +0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;; +0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; +059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; +059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; +059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; +059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; +059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; +059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; +05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; +05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; +05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; +05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; +05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;; +05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; +05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; +05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;; +05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; +05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;; +05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; +05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; +05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; +05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; +05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; +05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; +05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; +05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; +05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; +05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; +05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; +05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; +05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; +05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; +05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; +05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; +05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;; +05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;; +05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;; +05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; +05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;; +05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; +05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; +05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;; +05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; +05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; +05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; +05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; +05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; +05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; +05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; +05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; +05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; +05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; +05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; +05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; +05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; +05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; +05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; +05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; +05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; +05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; +05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; +05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; +05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; +05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; +05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; +05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; +05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; +05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; +05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; +05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; +05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; +05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; +05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; +0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;; +0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;; +0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;; +0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;; +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; +060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; +060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; +060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; +060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;; +0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;; +0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;; +0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; +0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; +0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; +0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; +061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; +061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; +0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; +0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; +0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; +0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; +0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; +0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; +0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; +0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; +0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; +062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; +062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; +062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; +062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; +062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; +062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; +0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; +0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; +0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; +0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; +0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; +0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; +0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; +0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; +0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; +0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; +063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; +0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; +0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; +0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; +0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; +0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; +0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; +0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; +0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; +0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; +0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; +064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; +064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; +064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; +064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; +064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; +064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; +0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; +0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; +0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; +0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; +0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; +0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; +0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; +0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; +0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; +0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; +0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; +0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; +0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; +0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; +0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; +0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; +0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; +0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; +0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; +066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; +066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; +066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; +066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;; +066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;; +0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; +0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; +0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; +0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; +0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; +0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; +0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; +0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; +0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; +0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; +067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; +067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; +067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; +067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; +067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; +067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; +0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; +0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; +0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; +0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; +0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; +0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; +0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; +0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; +0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; +0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; +068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; +068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; +068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; +068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; +0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; +0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; +0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; +0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; +0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; +0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; +0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; +0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; +0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; +069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; +06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; +06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; +06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; +06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; +06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; +06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; +06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; +06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; +06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; +06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; +06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; +06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;; +06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; +06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; +06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; +06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; +06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; +06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; +06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; +06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; +06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; +06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; +06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; +06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; +06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; +06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; +06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; +06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; +06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; +06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; +06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; +06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; +06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; +06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; +06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;; +06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; +06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; +06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; +06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; +06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; +06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; +06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; +06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; +06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; +06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; +06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; +06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; +06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;; +06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;; +06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; +06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; +06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; +06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; +06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; +06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; +06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; +06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; +06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; +06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; +06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; +06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; +06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; +06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; +06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; +06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; +06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; +06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; +06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; +06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; +06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; +06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; +06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; +06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; +06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; +06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; +06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; +06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; +0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; +0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; +0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; +0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; +0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; +0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; +0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; +0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; +0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; +070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; +070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; +070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; +070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; +070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;; +0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; +0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; +0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; +0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; +0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; +0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; +0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; +0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; +0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; +0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; +071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; +071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; +071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; +071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; +071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; +071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; +0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; +0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; +0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; +0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; +0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; +0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; +0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; +0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; +0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; +0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; +072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; +072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; +072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; +072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;; +072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;; +072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;; +0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; +0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; +0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; +0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; +0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; +0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; +0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; +0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; +0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; +0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; +073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; +073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; +073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; +073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; +073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; +073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; +0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; +0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; +0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; +0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; +0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; +0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; +074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; +074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; +074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; +074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; +0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; +0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; +0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; +0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; +0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; +0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; +0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; +0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; +0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; +078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; +078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; +078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; +078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; +078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; +078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; +0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; +0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; +0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; +0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; +0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; +0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; +0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; +0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; +0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; +0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; +079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; +079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; +079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; +079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; +079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; +079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; +07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; +07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; +07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; +07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; +07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; +07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; +07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; +07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; +07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; +07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; +07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; +07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; +07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; +07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; +07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; +07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; +07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; +07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; +0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;; +0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; +0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; +0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; +0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; +0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; +090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; +090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; +090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; +090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; +0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; +0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; +0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; +0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; +0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; +0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; +0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; +0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; +0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; +0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; +091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; +091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; +091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; +091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; +091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; +091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; +0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; +0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; +0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; +0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; +0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; +0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; +0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; +0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; +092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; +092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; +092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; +092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; +092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; +092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; +0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; +0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; +0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; +0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; +0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; +0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; +0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; +0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; +0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; +0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; +093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; +0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; +094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; +094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; +0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; +0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; +0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; +0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; +095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; +095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; +095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; +095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; +095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; +095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; +0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; +0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; +0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; +0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; +0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; +0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; +0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; +098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; +098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; +0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; +0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; +0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; +0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; +0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; +0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; +0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; +0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; +099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; +099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; +099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; +099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; +099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; +099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; +09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; +09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; +09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; +09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; +09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; +09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; +09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; +09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; +09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; +09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; +09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; +09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; +09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; +09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; +09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; +09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; +09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; +09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; +09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; +09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; +09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; +09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; +09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; +09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; +09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; +09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; +09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; +09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;; +09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;; +09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; +09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;; +09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;; +09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;; +09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;; +09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;; +09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; +09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; +0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;; +0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; +0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; +0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; +0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; +0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; +0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; +0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; +0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; +0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; +0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; +0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; +0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; +0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; +0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; +0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; +0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; +0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; +0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; +0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; +0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; +0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; +0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; +0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; +0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; +0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; +0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; +0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; +0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; +0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; +0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; +0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; +0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; +0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; +0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; +0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; +0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; +0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; +0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; +0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; +0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; +0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; +0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; +0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; +0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; +0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; +0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; +0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; +0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; +0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; +0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; +0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; +0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; +0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; +0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; +0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; +0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; +0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; +0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; +0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; +0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; +0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; +0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; +0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; +0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; +0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; +0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; +0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; +0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; +0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; +0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; +0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; +0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; +0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; +0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; +0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; +0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; +0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; +0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; +0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; +0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; +0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; +0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; +0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; +0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; +0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; +0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; +0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; +0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; +0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; +0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; +0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; +0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; +0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; +0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; +0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; +0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; +0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; +0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; +0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; +0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; +0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; +0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; +0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; +0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; +0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; +0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; +0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; +0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; +0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; +0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; +0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; +0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; +0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; +0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; +0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; +0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; +0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; +0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; +0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; +0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; +0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; +0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; +0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; +0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; +0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; +0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; +0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; +0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; +0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; +0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; +0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; +0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; +0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; +0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; +0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; +0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; +0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; +0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; +0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;; +0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; +0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; +0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; +0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; +0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; +0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; +0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; +0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; +0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; +0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; +0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; +0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;; +0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;; +0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; +0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; +0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; +0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; +0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; +0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; +0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; +0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; +0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; +0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; +0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; +0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; +0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; +0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; +0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; +0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; +0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; +0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; +0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; +0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; +0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; +0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; +0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; +0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; +0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; +0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; +0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; +0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; +0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; +0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; +0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; +0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; +0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; +0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; +0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; +0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; +0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; +0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; +0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;; +0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;; +0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;; +0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;; +0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;; +0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;; +0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;; +0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;; +0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; +0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; +0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; +0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; +0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; +0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; +0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; +0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; +0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; +0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; +0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; +0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; +0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; +0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; +0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; +0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; +0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; +0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; +0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; +0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; +0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; +0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; +0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; +0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; +0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; +0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; +0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; +0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; +0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; +0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; +0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; +0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; +0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; +0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; +0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; +0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; +0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; +0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; +0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; +0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; +0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; +0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; +0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; +0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; +0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; +0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; +0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; +0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; +0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; +0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; +0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; +0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; +0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; +0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; +0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; +0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; +0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; +0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; +0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; +0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; +0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; +0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; +0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; +0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; +0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; +0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; +0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; +0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; +0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; +0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; +0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; +0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; +0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; +0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; +0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; +0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; +0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; +0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; +0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; +0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; +0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; +0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; +0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; +0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; +0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; +0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; +0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; +0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; +0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; +0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; +0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; +0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; +0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; +0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; +0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; +0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; +0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; +0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; +0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;; +0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; +0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;; +0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; +0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; +0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; +0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; +0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; +0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;; +0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;; +0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; +0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; +0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; +0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; +0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; +0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; +0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; +0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; +0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; +0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; +0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; +0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; +0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; +0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; +0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; +0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; +0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; +0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; +0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; +0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; +0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; +0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; +0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; +0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; +0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; +0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; +0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; +0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; +0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; +0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; +0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; +0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; +0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; +0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; +0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; +0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; +0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; +0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; +0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; +0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; +0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; +0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; +0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; +0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; +0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; +0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; +0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; +0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; +0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; +0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; +0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; +0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; +0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; +0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; +0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; +0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; +0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; +0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; +0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; +0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; +0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; +0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; +0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; +0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; +0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; +0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; +0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; +0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; +0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; +0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; +0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; +0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; +0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; +0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; +0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; +0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; +0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; +0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; +0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; +0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; +0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; +0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; +0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; +0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; +0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; +0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; +0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; +0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; +0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; +0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; +0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; +0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; +0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; +0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; +0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; +0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; +0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; +0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; +0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; +0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; +0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; +0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; +0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; +0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; +0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; +0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; +0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; +0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; +0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; +0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; +0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; +0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; +0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; +0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; +0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; +0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; +0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; +0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; +0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; +0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; +0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; +0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; +0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; +0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; +0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; +0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; +0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; +0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; +0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; +0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; +0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; +0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; +0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; +0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; +0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; +0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; +0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; +0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; +0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; +0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; +0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; +0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; +0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; +0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; +0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; +0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; +0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; +0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; +0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; +0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; +0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; +0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; +0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; +0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; +0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; +0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; +0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; +0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; +0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; +0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; +0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; +0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;; +0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; +0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; +0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; +0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; +0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; +0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; +0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; +0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;; +0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; +0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; +0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; +0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; +0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; +0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; +0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; +0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;; +0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;; +0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;; +0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;; +0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;; +0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; +0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; +0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; +0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; +0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; +0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;; +0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; +0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; +0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; +0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; +0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; +0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; +0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; +0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; +0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; +0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; +0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; +0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; +0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; +0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; +0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; +0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; +0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; +0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; +0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; +0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; +0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; +0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; +0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; +0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; +0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; +0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; +0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; +0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; +0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; +0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; +0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; +0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; +0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; +0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; +0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; +0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;; +0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; +0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; +0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; +0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; +0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; +0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; +0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; +0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; +0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; +0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; +0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; +0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; +0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; +0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; +0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; +0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; +0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; +0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; +0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; +0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;; +0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;; +0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; +0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;; +0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;; +0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;; +0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;; +0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;; +0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;; +0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;; +0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;; +0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;; +0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;; +0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;; +0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;; +0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;; +0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;; +0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;; +0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;; +0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;; +0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;; +0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;; +0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;; +0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;; +0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;; +0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;; +0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;; +0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;; +0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;; +0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;; +0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;; +0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;; +0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;; +0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;; +0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; +0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; +0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; +0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; +0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; +0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; +0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; +0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; +0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; +0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; +0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;; +0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;; +0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;; +0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; +0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; +0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;; +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;; +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;; +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;; +0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; +0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; +0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; +0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; +0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; +0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; +0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; +0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; +0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; +0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; +0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; +0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; +0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; +0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; +0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; +0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; +0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; +0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; +0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; +0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; +0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; +0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; +0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; +0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; +0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; +0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; +0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; +0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; +0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; +0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; +0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; +0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; +0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; +0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; +0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; +0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;; +0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; +0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; +0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; +0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; +0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; +0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; +0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; +0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;; +0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; +0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; +0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; +0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; +0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; +0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; +0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;; +0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; +0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;; +0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; +0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; +0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; +0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; +0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;; +0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;; +0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; +0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; +0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;; +0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;; +0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; +0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; +0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;; +0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;; +0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;; +0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;; +0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;; +0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;; +0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; +0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; +0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; +0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; +0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; +0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; +0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; +0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; +0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; +0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; +0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; +0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; +0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; +0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; +0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; +0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; +0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; +0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; +0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; +0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; +0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; +0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; +0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; +0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; +0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; +0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; +0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; +0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; +0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;; +0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; +0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; +0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; +0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;; +0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;; +0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; +0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; +0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; +0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; +0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; +0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; +0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; +0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;; +0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;; +0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;; +0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;; +0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;; +0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; +0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; +0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;; +0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;; +0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;; +0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;; +0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;; +0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;; +0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;; +0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;; +0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;; +0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; +0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; +0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;; +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;; +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;; +1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; +1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; +1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; +1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; +1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; +1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; +1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; +1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; +1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; +1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; +100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; +100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; +100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; +100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; +100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; +100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; +1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; +1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; +1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; +1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; +1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; +1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; +1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; +1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; +1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; +1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; +101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; +101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; +101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; +101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; +101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; +101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; +1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; +1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; +1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; +1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; +1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; +1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; +1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; +1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; +102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; +102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; +1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; +1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; +104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; +104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; +104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; +104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; +104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; +1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; +1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; +1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00; +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01; +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02; +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03; +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04; +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05; +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06; +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07; +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08; +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09; +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A; +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B; +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C; +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D; +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E; +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F; +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10; +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11; +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12; +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13; +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14; +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15; +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16; +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17; +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18; +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19; +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A; +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B; +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C; +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D; +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E; +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F; +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20; +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21; +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22; +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23; +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24; +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25; +10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; +10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; +10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; +10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; +10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; +10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; +10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; +10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; +10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; +10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; +10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; +10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; +10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; +10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; +10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; +10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; +10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; +10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; +10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; +10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; +10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; +10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; +10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; +10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; +10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; +10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; +10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; +10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; +10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; +10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; +10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; +10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; +10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; +10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; +10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; +10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; +10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; +10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; +10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; +10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;; +10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;; +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;; +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;; +10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;; +1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; +1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; +1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; +1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; +1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;; +1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;; +1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; +1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; +1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;; +1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;; +110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; +110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; +110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; +110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;; +110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; +110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; +1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; +1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; +1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; +1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; +1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; +1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; +1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; +1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; +1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; +1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; +111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; +111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; +111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; +111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; +111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; +111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; +1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; +1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; +1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; +1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; +1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; +112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; +112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; +112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; +1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; +1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; +1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; +1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; +1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; +1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; +1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; +113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; +113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; +113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; +113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; +113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; +113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; +1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; +1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; +1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; +1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; +1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; +1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; +1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; +1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; +1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; +1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; +114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; +114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; +114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; +114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; +114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; +114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; +1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; +1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; +1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; +1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; +1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; +1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; +1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; +1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; +1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; +1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; +115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; +1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; +1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; +1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; +1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; +1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; +1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; +1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; +1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; +1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; +1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; +116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; +116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; +116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; +116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; +116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; +116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; +1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; +1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; +1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; +1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; +1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; +1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; +1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; +1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; +1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; +1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; +117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; +117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; +117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; +117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; +117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; +117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; +1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; +1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; +1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; +1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; +1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; +1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; +1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; +1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; +1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; +1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; +118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; +118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; +118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; +118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; +118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; +118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; +1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; +1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; +1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; +1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; +1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; +1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; +1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; +1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; +1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; +1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; +119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; +119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; +119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; +119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; +119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; +119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; +11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; +11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; +11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; +11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; +11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; +11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;; +11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; +11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;; +11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;; +11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; +11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;; +11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;; +11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;; +11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;; +11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;; +11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;; +11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;; +11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;; +11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; +11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; +11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;; +11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;; +11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; +11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;; +11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; +11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; +11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; +11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; +11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; +11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; +11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; +11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; +11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; +11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; +11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; +11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; +11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; +11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; +11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; +11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; +11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; +11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; +11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; +11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; +11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; +11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; +11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; +11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; +11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; +11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; +11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; +11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; +11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; +11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; +11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; +11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; +11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; +11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; +11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; +11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; +11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; +11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; +11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; +11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; +11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; +11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; +11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; +11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; +11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; +11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; +1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; +1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; +1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; +1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; +1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; +1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; +1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; +1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; +1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; +120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; +120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; +120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; +120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; +120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; +120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; +1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; +1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; +1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; +1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; +1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; +1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; +1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; +1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; +1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; +1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; +121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; +121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; +121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; +121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; +121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; +121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; +1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; +1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; +1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; +1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; +1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; +1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; +1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; +1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; +1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; +1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; +122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; +122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; +122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; +122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; +122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; +122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; +1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; +1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; +1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; +1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; +1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; +1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; +1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; +1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; +1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; +123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; +123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; +123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; +1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; +1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; +1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; +1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; +1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; +1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; +1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; +1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; +124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; +124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; +124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; +124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; +1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; +1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; +1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; +1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; +1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; +1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; +1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; +1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; +125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; +125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; +125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; +125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; +1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; +1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; +1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; +1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; +1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; +1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; +1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; +1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; +1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; +1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; +126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; +126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; +126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; +126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; +126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; +126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; +1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; +1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; +1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; +1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; +1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; +1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; +1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; +1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; +1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; +1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; +127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; +127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; +127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; +127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; +127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; +127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; +1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; +1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; +1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; +1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; +1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; +1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; +1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; +1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; +128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; +128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; +128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; +128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; +1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; +1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; +1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; +1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; +1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; +1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; +1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; +1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; +1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; +129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; +129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; +12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; +12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; +12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; +12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; +12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; +12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; +12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; +12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; +12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; +12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; +12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; +12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; +12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; +12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; +12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; +12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; +12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; +12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; +12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; +12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; +12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; +12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; +12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; +12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; +12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; +12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; +12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; +12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; +12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; +12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; +12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; +12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; +12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; +12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; +12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; +12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; +12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; +12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; +12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; +12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; +12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; +12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; +12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; +12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; +12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; +12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; +12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; +12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; +12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; +12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; +12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; +12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; +12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; +12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; +12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; +12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; +12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; +12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; +12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; +12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; +12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; +12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; +12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; +12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; +12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; +12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; +12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; +12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; +12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; +12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; +12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; +1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; +1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; +1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; +1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; +1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; +1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; +1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; +1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; +1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; +1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; +130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; +130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; +130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; +130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; +130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; +1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; +1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; +1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; +1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; +1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; +1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; +131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; +131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; +1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; +1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; +1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; +1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; +1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; +1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; +1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; +1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; +1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; +1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; +132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; +132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; +132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; +132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; +132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; +132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; +1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; +1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; +1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; +1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; +1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; +1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; +1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; +1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; +1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; +1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; +133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; +133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; +133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; +133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; +133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; +133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; +1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; +1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; +1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; +1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; +1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; +1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; +1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; +1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; +1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; +134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; +134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; +134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; +134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; +134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; +134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; +1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; +1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; +1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; +1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; +1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; +1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; +1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; +1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; +1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; +1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; +135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;; +1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; +1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; +1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; +1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; +1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; +1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; +1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; +1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; +1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; +1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; +1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; +1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; +1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; +1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; +1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; +1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; +137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; +137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; +137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; +13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; +13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; +13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; +13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;; +13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;; +13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;; +13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;; +13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;; +13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;; +13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;; +13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;; +13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;; +13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;; +13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;; +13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;; +13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;; +13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;; +13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;; +13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;; +13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;; +13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;; +13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;; +13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;; +13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;; +13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;; +13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;; +13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;; +13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;; +13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;; +13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;; +13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;; +13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;; +13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;; +13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;; +13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;; +13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;; +13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;; +13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;; +13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;; +13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;; +13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;; +13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;; +13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;; +13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;; +13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;; +13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;; +13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;; +13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;; +13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;; +13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;; +13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;; +13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;; +13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;; +13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;; +13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;; +13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;; +13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;; +13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;; +13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;; +13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;; +13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;; +13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;; +13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;; +13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;; +13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;; +13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;; +13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;; +13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;; +13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;; +13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;; +13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;; +13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;; +13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;; +13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;; +13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;; +13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;; +13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;; +13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;; +13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;; +13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;; +13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;; +13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;; +13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;; +13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;; +13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;; +1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; +1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; +1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; +1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; +1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; +1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; +1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; +1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; +1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; +140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; +140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; +140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; +140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; +140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; +140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; +1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; +1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; +1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; +1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; +1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; +1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; +1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; +1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; +1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; +1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; +141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; +141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; +141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; +141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; +141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; +1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; +1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; +1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; +1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; +1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; +1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; +1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; +1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; +1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; +1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; +142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; +142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; +142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; +142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; +142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; +142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; +1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; +1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; +1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; +1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; +1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; +1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; +1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; +1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; +1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; +1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; +143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; +143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; +143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; +143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; +143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; +143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; +1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; +1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; +1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; +1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; +1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; +1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; +1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; +1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; +1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; +1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; +144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; +144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; +144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; +144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; +144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; +144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; +1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; +1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; +1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; +1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; +1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; +1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; +1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; +1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; +1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; +1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; +145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; +145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; +145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; +145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; +145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; +145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; +1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; +1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; +1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; +1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; +1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; +1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; +1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; +1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; +1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; +1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; +146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; +146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; +146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; +146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; +146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; +146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; +1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; +1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; +1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; +1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; +1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; +1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; +1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; +1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; +1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; +1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; +147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; +147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; +147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; +147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; +147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; +147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; +1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; +1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; +1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; +1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; +1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; +1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; +1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; +1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; +1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; +1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; +148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; +148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; +148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; +148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; +148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; +148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; +1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; +1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; +1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; +1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; +1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; +1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; +1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; +1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; +1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; +1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; +149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; +149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; +149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; +149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; +149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; +149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; +14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; +14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; +14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; +14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; +14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; +14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; +14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; +14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; +14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; +14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; +14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; +14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; +14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; +14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; +14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; +14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; +14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; +14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; +14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; +14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; +14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; +14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; +14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; +14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; +14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; +14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; +14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; +14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; +14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; +14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; +14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; +14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; +14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; +14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; +14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; +14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; +14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; +14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; +14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; +14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; +14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; +14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; +14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; +14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; +14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; +14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; +14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; +14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; +14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; +14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; +14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; +14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; +14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; +14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; +14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; +14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; +14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; +14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; +14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; +14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; +14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; +14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; +14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; +14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; +14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; +14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; +14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; +14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; +14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; +14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; +14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; +14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; +14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; +14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; +14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; +14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; +14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; +14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; +14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; +14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; +14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; +14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; +14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; +14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; +14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; +14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; +14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; +14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; +14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; +14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; +14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; +14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; +14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; +14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; +14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; +14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; +1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; +1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; +1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; +1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; +1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; +1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; +1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; +1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; +1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; +1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; +150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; +150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; +150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; +150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; +150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; +150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; +1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; +1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; +1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; +1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; +1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; +1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; +1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; +1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; +1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; +1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; +151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; +151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; +151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; +151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; +151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; +151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; +1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; +1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; +1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; +1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; +1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; +1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; +1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; +1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; +1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; +1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; +152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; +152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; +152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; +152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; +152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; +152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; +1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; +1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; +1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; +1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; +1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; +1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; +1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; +1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; +1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; +1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; +153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; +153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; +153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; +153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; +153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; +153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; +1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; +1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; +1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; +1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; +1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; +1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; +1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; +1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; +1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; +1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; +154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; +154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; +154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; +154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; +154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; +154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; +1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; +1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; +1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; +1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; +1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; +1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; +1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; +1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; +1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; +1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; +155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; +155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; +155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; +155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; +155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; +155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; +1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; +1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; +1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; +1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; +1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; +1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; +1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; +1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; +1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; +1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; +156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; +156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; +156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; +156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; +156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; +156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; +1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; +1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; +1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; +1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; +1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; +1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; +1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; +1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; +1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; +1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; +157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; +157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; +157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; +157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; +157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; +157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; +1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; +1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; +1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; +1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; +1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; +1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; +1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; +1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; +1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; +1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; +158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; +158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; +158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; +158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; +158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; +158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; +1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; +1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; +1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; +1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; +1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; +1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; +1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; +1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; +1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; +1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; +159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; +159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; +159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; +159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; +159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; +159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; +15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; +15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; +15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; +15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; +15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; +15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; +15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; +15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; +15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; +15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; +15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; +15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; +15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; +15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; +15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; +15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; +15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; +15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; +15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; +15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; +15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; +15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; +15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; +15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; +15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; +15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; +15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; +15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; +15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; +15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; +15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; +15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; +15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; +15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; +15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; +15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; +15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; +15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; +15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; +15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; +15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; +15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; +15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; +15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; +15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; +15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; +15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; +15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; +15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; +15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; +15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; +15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; +15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; +15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; +15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; +15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; +15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; +15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; +15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; +15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; +15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; +15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; +15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; +15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; +15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; +15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; +15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; +15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; +15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; +15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; +15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; +15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; +15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; +15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; +15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; +15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; +15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; +15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; +15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; +15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; +15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; +15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; +15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; +15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; +15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; +15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; +15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; +15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; +15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; +15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; +15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; +15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; +15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; +15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; +15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; +15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; +1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; +1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; +1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; +1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; +1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; +1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; +1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; +1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; +1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; +1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; +160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; +160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; +160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; +160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; +160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; +160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; +1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; +1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; +1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; +1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; +1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; +1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; +1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; +1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; +1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; +1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; +161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; +161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; +161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; +161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; +161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; +161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; +1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; +1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; +1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; +1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; +1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; +1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; +1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; +1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; +1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; +1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; +162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; +162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; +162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; +162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; +162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; +162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; +1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; +1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; +1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; +1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; +1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; +1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; +1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; +1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; +1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; +1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; +163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; +163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; +163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; +163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; +163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; +163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; +1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; +1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; +1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; +1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; +1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; +1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; +1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; +1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; +1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; +1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; +164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; +164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; +164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; +164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; +164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; +164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; +1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; +1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; +1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; +1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; +1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; +1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; +1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; +1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; +1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; +1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; +165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; +165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; +165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; +165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; +165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; +165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; +1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; +1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; +1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; +1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; +1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; +1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; +1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; +1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; +1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; +1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; +166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; +166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; +166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; +166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; +166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; +166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; +1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; +1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; +1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; +1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; +1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; +1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; +1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; +1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; +1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; +1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; +1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; +1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; +1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; +1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; +1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; +1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; +1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; +168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; +168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; +168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; +168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; +168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; +168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; +1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; +1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; +1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; +1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; +1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; +1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; +1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; +1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; +1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; +1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; +169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; +16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; +16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; +16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; +16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; +16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; +16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; +16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; +16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; +16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; +16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; +16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; +16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; +16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; +16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; +16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; +16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; +16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; +16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; +16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; +16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; +16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; +16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; +16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; +16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; +16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; +16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; +16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; +16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; +16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; +16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; +16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; +16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; +16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; +16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; +16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; +16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; +16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; +16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; +16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; +16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; +16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; +16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; +16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; +16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; +16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; +16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; +16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; +16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; +16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; +16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; +16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; +16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; +16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; +16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; +16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; +16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; +16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; +16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; +16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; +16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; +16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; +16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; +16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; +16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; +16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; +16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; +16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; +16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; +16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; +16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; +16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; +16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; +16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; +16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; +16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; +16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; +16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; +16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; +16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;golden number 17;;; +16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;; +16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;; +1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;; +1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;; +1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;; +1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;; +1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;; +1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;; +1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;; +1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;; +1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;; +1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;; +170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; +170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; +170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; +170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; +170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; +1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; +1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;; +1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; +1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; +1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; +1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;; +1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;; +1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;; +1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;; +1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;; +1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;; +1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;; +172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;; +172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;; +172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;; +172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;; +172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;; +172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;; +1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;; +1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; +1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; +1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; +1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; +1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; +1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;; +1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;; +1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;; +1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;; +1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;; +1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;; +1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;; +1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;; +1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;; +174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;; +174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;; +174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;; +174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;; +174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;; +174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;; +1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;; +1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;; +1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;; +1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;; +1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;; +1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;; +1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;; +1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;; +1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;; +1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;; +1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;; +1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;; +176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;; +176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;; +176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;; +176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;; +176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;; +1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;; +1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; +1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; +1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; +1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; +1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; +1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; +1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; +1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; +1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; +1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; +178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; +178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; +178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; +178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; +178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; +178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; +1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; +1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; +1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; +1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; +1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; +1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; +1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; +1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; +1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; +1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; +179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; +179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; +179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; +179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; +179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; +179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; +17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; +17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; +17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; +17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;*;;; +17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;*;;; +17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; +17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; +17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; +17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; +17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; +17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; +17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; +17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; +17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; +17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; +17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; +17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; +17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; +17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; +17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; +17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;*;;; +17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;*;;; +17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; +17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; +17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; +17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; +17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; +17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; +17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; +17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; +17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; +17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; +17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; +17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; +17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; +17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; +17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; +17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; +17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; +17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; +17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; +17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;*;;; +17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; +17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; +17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; +17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;; +17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;*;;; +17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; +17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; +17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; +17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;; +17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;; +17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;; +17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;; +17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;; +17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;; +17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;; +17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;; +17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;; +17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;; +17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;; +17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;; +1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; +1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; +1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; +1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; +1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; +1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; +1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; +1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; +1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; +1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; +180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; +180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;; +180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; +180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; +180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;; +1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; +1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; +1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; +1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; +1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; +1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; +1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; +1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; +1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; +1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; +182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; +182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; +182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; +182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; +182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; +182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; +1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; +1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; +1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; +1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; +1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; +1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; +1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; +1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; +1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; +1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; +183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; +183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; +183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; +183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; +183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; +183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; +1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; +1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; +1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; +1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; +1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; +1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; +1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; +1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; +1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; +1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; +184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; +184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; +184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; +184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; +184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; +184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; +1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; +1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; +1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; +1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; +1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; +1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; +1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; +1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; +1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; +1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; +185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; +185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; +185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; +185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; +185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; +185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; +1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; +1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; +1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; +1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; +1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; +1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; +1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; +1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; +1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; +1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; +186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; +186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; +186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; +186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; +186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; +186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; +1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; +1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; +1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; +1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; +1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; +1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; +1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; +1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; +1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; +1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; +1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; +1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; +1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; +1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;; +1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;; +1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; +1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; +1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; +188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; +188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; +188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; +188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; +188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; +188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; +1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; +1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; +1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; +1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; +1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; +1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; +1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; +1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; +1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; +189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; +189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; +189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; +189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; +189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; +18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; +18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; +18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; +18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; +18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; +18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; +18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; +18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; +18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; +1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; +1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; +1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; +1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;; +1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;; +1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;; +1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;; +1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;; +1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;; +1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;; +190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;; +190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;; +190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;; +190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;; +190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;; +190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;; +1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;; +1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;; +1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;; +1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;; +1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;; +1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;; +1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;; +1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;; +1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;; +1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;; +191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;; +191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;; +191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;; +1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; +1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;; +192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;; +192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;; +1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; +1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; +1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;; +1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;; +1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;; +1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;; +1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;; +1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;; +1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;; +193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;; +193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;; +1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;; +1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;; +1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;; +1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;; +1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;; +1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;; +1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;; +1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;; +1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;; +1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;; +1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;; +1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;; +195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;; +195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;; +195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;; +195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;; +195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;; +195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;; +1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;; +1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;; +1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;; +1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;; +1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;; +1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;; +1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;; +1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;; +1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;; +1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;; +196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;; +196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;; +196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;; +196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;; +1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;; +1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;; +1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; +1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; +1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;; +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;; +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;; +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;; +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;; +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;; +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;; +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;; +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;; +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;; +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;; +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;; +19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;; +19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; +19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; +19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; +19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;; +19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;; +19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;; +19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;; +19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;; +19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;; +19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;; +19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;; +19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;; +19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;; +19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;; +19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;; +19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;; +19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;; +19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;; +19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;; +19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;; +19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;; +19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;; +19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;; +19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;; +19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;; +19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;; +19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;; +19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;; +19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;; +19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; +19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; +19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;; +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;; +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;; +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;; +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;; +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;; +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;; +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;; +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;; +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;; +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;; +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;; +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;; +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;; +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;; +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;; +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;; +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;; +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;; +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;; +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;; +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;; +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;; +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;; +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;; +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;; +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;; +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;; +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;; +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;; +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;; +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;; +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;; +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;; +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;; +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;; +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;; +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;; +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;; +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;; +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;; +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;; +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;; +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;; +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;; +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;; +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;; +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;; +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;; +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;; +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;; +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;; +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;; +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;; +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;; +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;; +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;; +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;; +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; +1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; +1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; +1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;; +1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;; +1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;; +1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;; +1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;; +1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;; +1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;; +1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;; +1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;; +1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;; +1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;; +1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;; +1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;; +1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;; +1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;; +1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;; +1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;; +1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;; +1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;; +1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;; +1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;; +1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;; +1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;; +1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;; +1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;; +1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;; +1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;; +1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;; +1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;; +1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;; +1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;; +1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;; +1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;; +1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;; +1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;; +1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;; +1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;; +1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;; +1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;; +1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;; +1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;; +1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;; +1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;; +1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;; +1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;; +1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;; +1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;; +1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;; +1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;; +1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;; +1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;; +1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;; +1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;; +1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;; +1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;; +1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;; +1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;; +1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;; +1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;; +1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;; +1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;; +1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;; +1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;; +1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;; +1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;; +1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;; +1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;; +1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;; +1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;; +1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;; +1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;; +1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;; +1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;; +1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;; +1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;; +1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;; +1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;; +1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;; +1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;; +1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;; +1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;; +1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;; +1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;; +1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;; +1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;; +1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;; +1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;; +1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;; +1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;; +1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;; +1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;; +1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;; +1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;; +1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;; +1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;; +1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L;<sub> 0069;;;;N;;;;; +1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L;<sub> 0072;;;;N;;;;; +1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L;<sub> 0075;;;;N;;;;; +1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L;<sub> 0076;;;;N;;;;; +1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L;<sub> 03B2;;;;N;;;;; +1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L;<sub> 03B3;;;;N;;;;; +1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L;<sub> 03C1;;;;N;;;;; +1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;; +1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;; +1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;; +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;;; +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;; +1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;; +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;; +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;; +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;; +1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;; +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;; +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;; +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;; +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;; +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;; +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;; +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;; +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;; +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;; +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;; +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;; +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;; +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;; +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;; +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;; +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;; +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;; +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;; +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;; +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;; +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;; +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;; +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;; +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;; +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;; +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;; +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;; +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;; +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;; +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;; +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;; +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; +1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 +1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; +1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 +1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; +1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 +1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; +1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 +1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; +1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 +1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; +1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A +1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; +1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C +1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; +1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E +1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; +1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 +1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; +1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 +1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; +1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 +1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; +1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 +1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; +1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 +1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; +1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A +1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; +1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C +1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; +1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E +1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; +1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 +1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; +1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 +1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; +1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 +1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; +1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 +1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; +1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 +1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; +1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A +1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; +1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C +1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; +1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E +1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; +1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 +1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; +1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 +1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; +1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 +1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; +1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 +1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; +1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 +1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; +1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A +1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; +1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C +1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; +1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E +1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; +1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 +1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; +1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 +1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; +1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 +1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; +1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 +1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; +1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 +1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; +1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A +1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; +1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C +1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; +1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E +1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; +1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 +1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; +1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 +1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; +1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 +1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; +1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 +1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; +1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 +1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; +1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A +1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; +1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C +1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; +1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E +1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; +1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 +1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; +1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 +1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; +1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 +1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; +1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 +1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; +1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 +1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; +1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A +1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; +1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C +1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; +1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E +1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; +1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 +1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; +1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 +1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; +1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 +1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; +1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 +1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; +1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 +1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; +1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A +1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; +1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C +1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; +1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E +1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; +1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 +1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; +1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 +1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; +1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 +1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; +1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 +1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; +1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 +1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; +1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A +1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; +1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C +1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; +1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E +1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; +1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 +1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; +1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 +1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; +1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 +1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; +1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; +1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; +1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; +1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; +1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 +1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; +1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 +1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; +1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 +1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; +1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 +1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; +1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 +1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; +1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 +1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; +1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA +1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; +1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC +1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; +1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE +1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; +1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 +1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; +1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 +1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; +1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 +1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; +1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 +1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; +1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 +1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; +1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA +1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; +1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC +1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; +1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE +1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; +1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 +1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; +1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 +1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; +1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 +1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; +1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 +1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; +1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 +1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; +1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA +1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; +1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC +1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; +1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE +1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; +1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 +1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; +1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 +1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; +1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 +1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; +1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 +1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; +1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 +1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; +1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA +1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; +1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC +1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; +1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE +1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; +1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 +1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; +1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 +1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; +1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 +1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; +1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 +1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; +1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 +1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; +1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA +1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; +1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC +1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; +1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE +1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; +1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 +1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; +1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 +1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; +1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 +1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; +1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 +1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; +1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 +1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 +1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 +1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A +1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B +1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C +1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D +1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E +1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F +1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; +1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; +1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; +1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; +1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; +1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; +1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; +1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; +1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 +1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 +1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A +1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B +1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C +1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D +1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; +1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; +1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; +1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; +1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; +1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; +1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 +1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 +1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A +1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B +1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C +1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D +1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E +1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F +1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; +1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; +1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; +1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; +1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; +1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; +1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; +1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; +1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 +1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 +1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A +1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B +1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C +1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D +1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E +1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F +1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; +1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; +1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; +1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; +1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; +1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; +1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; +1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; +1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 +1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 +1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A +1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B +1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C +1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D +1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; +1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; +1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; +1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; +1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; +1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; +1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; +1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 +1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; +1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B +1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; +1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D +1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; +1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F +1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; +1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; +1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; +1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; +1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 +1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 +1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A +1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B +1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C +1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D +1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E +1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F +1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; +1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; +1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; +1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; +1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; +1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; +1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; +1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; +1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA +1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB +1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 +1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 +1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA +1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB +1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA +1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB +1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 +1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 +1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA +1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB +1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA +1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB +1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 +1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 +1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A +1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B +1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C +1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D +1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E +1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F +1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; +1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; +1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; +1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; +1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; +1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; +1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; +1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; +1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 +1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 +1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A +1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B +1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C +1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D +1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E +1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F +1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; +1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; +1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; +1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; +1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; +1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; +1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; +1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; +1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 +1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 +1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA +1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB +1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC +1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD +1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE +1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF +1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; +1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; +1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; +1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; +1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; +1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; +1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; +1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; +1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 +1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 +1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; +1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC +1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; +1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; +1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; +1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; +1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; +1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; +1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; +1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; +1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;; +1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 +1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;; +1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;; +1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; +1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; +1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC +1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; +1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; +1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; +1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; +1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; +1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; +1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; +1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; +1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; +1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; +1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; +1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 +1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 +1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; +1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; +1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; +1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; +1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; +1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; +1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; +1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; +1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; +1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; +1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; +1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 +1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 +1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; +1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; +1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; +1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC +1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; +1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; +1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; +1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; +1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; +1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; +1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; +1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; +1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; +1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; +1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; +1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC +1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; +1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; +1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; +1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; +1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; +1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; +1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; +1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; +1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; +1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;; +2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; +2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; +2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;; +2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; +200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; +200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; +200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; +200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; +2010;HYPHEN;Pd;0;ON;;;;;N;;;;; +2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;; +2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; +2013;EN DASH;Pd;0;ON;;;;;N;;;;; +2014;EM DASH;Pd;0;ON;;;;;N;;;;; +2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; +2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; +2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; +2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;Y;SINGLE TURNED COMMA QUOTATION MARK;;;; +2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;Y;SINGLE COMMA QUOTATION MARK;;;; +201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;Y;LOW SINGLE COMMA QUOTATION MARK;;;; +201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;Y;SINGLE REVERSED COMMA QUOTATION MARK;;;; +201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;Y;DOUBLE TURNED COMMA QUOTATION MARK;;;; +201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;Y;DOUBLE COMMA QUOTATION MARK;;;; +201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;Y;LOW DOUBLE COMMA QUOTATION MARK;;;; +201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;Y;DOUBLE REVERSED COMMA QUOTATION MARK;;;; +2020;DAGGER;Po;0;ON;;;;;N;;;;; +2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; +2022;BULLET;Po;0;ON;;;;;N;;;;; +2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; +2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;; +2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;; +2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;; +2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; +2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; +2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; +202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; +202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; +202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; +202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; +202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; +202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;; +2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; +2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; +2032;PRIME;Po;0;ET;;;;;N;;;;; +2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;; +2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;; +2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; +2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;; +2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;; +2038;CARET;Po;0;ON;;;;;N;;;;; +2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; +203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; +203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; +203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;; +203D;INTERROBANG;Po;0;ON;;;;;N;;;;; +203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;; +203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;; +2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; +2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; +2042;ASTERISM;Po;0;ON;;;;;N;;;;; +2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; +2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; +2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; +2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; +2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;; +2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;; +2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;; +204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; +204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; +204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; +204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; +204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;; +204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;; +2050;CLOSE UP;Po;0;ON;;;;;N;;;;; +2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;; +2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; +2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; +2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;; +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; +205D;TRICOLON;Po;0;ON;;;;;N;;;;; +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; +205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; +2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; +2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; +2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; +2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; +206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; +206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; +206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; +206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; +206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; +206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; +2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; +2071;SUPERSCRIPT LATIN SMALL LETTER I;Ll;0;L;<super> 0069;;;;N;;;;; +2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; +2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; +2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;; +2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; +2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; +2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;; +207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; +207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;; +207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; +207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; +207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;; +2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;; +2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;; +2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;; +2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;; +2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;; +2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;; +2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;; +2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; +2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; +2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;; +208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; +208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;; +208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; +208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;; +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;; +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;; +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;; +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;; +20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; +20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; +20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; +20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; +20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; +20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; +20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; +20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; +20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;; +20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; +20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; +20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; +20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; +20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; +20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; +20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; +20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; +20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; +20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; +20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; +20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; +20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; +20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; +20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; +20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; +20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; +20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; +20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; +20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; +20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; +20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; +20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; +20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; +20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; +20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; +20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; +20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; +20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; +20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;; +20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;; +20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;; +20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; +20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;; +2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;; +2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;; +2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; +2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; +2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;; +2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;; +2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;; +2108;SCRUPLE;So;0;ON;;;;;N;;;;; +2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; +210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;; +210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;; +210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;; +210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;; +210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; +2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;; +2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;; +2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;; +2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; +2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;; +2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;; +2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; +2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;; +2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;; +211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;; +211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;; +211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;; +211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;; +211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; +211F;RESPONSE;So;0;ON;;;;;N;;;;; +2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;; +2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;; +2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;; +2123;VERSICLE;So;0;ON;;;;;N;;;;; +2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;; +2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; +2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; +2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; +2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;; +2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; +212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; +212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; +212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;; +212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;; +212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; +212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;; +2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;; +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; +2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;; +2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; +2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; +2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; +2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; +2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;; +213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; +213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;; +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; +213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; +213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; +213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; +2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;; +2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;; +2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; +2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; +2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;; +2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; +214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; +214C;PER SIGN;So;0;ON;;;;;N;;;;; +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 +2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; +2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; +2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; +2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; +2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; +2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; +2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; +215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; +215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; +215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; +215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; +215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; +215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;; +2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170; +2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171; +2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172; +2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173; +2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174; +2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175; +2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176; +2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177; +2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178; +2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179; +216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A; +216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B; +216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C; +216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D; +216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E; +216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F; +2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160 +2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161 +2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162 +2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163 +2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164 +2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165 +2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166 +2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167 +2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168 +2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169 +217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A +217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B +217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C +217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D +217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E +217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F +2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; +2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; +2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 +2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; +2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; +2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; +2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; +2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; +2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; +2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; +2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; +2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; +2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; +219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; +219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; +219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; +219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; +219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; +219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; +21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; +21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; +21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; +21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; +21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; +21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; +21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; +21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; +21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; +21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; +21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; +21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; +21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; +21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; +21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; +21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; +21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; +21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; +21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; +21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; +21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; +21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; +21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; +21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; +21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; +21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; +21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; +21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; +21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; +21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; +21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; +21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; +21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; +21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; +21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; +21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; +21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; +21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; +21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; +21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; +21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; +21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; +21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; +21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; +21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; +21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; +21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; +21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; +21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; +21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; +21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; +21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; +21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; +21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; +21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; +21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; +21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; +21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; +21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; +21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; +21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; +21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; +21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; +21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; +21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; +21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; +21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; +21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; +21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; +21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; +21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; +21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; +21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; +21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; +21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; +21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; +21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; +21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; +21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; +21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; +21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; +21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; +21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; +21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;; +21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; +21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +2200;FOR ALL;Sm;0;ON;;;;;N;;;;; +2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; +2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; +2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; +2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; +2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; +2206;INCREMENT;Sm;0;ON;;;;;N;;;;; +2207;NABLA;Sm;0;ON;;;;;N;;;;; +2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; +2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; +220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; +220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; +220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; +220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; +220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; +220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; +2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; +2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; +2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; +2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; +2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; +2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; +2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; +2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; +2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; +221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; +221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; +221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; +221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; +221E;INFINITY;Sm;0;ON;;;;;N;;;;; +221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; +2220;ANGLE;Sm;0;ON;;;;;Y;;;;; +2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; +2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; +2223;DIVIDES;Sm;0;ON;;;;;N;;;;; +2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; +2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; +2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; +2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; +222A;UNION;Sm;0;ON;;;;;N;;;;; +222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; +222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;; +222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;; +222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;; +2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;; +2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2234;THEREFORE;Sm;0;ON;;;;;N;;;;; +2235;BECAUSE;Sm;0;ON;;;;;N;;;;; +2236;RATIO;Sm;0;ON;;;;;N;;;;; +2237;PROPORTION;Sm;0;ON;;;;;N;;;;; +2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; +2239;EXCESS;Sm;0;ON;;;;;Y;;;;; +223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; +223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; +223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;; +223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; +223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; +2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; +2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; +2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; +2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; +2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; +2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; +224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; +224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; +224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; +2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; +2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; +2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; +2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; +2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; +2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; +2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; +2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; +2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; +225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; +225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; +225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; +225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; +225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; +225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; +2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; +2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; +2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; +2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; +2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; +2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; +2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; +2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; +226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; +226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; +226C;BETWEEN;Sm;0;ON;;;;;N;;;;; +226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; +226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; +226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; +2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; +2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; +2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; +2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; +2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; +2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; +2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; +2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; +2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; +2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; +227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; +227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; +2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; +2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; +2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; +2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; +2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; +2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; +2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; +228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; +228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; +228C;MULTISET;Sm;0;ON;;;;;Y;;;;; +228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; +228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; +228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; +2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; +2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; +2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; +2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; +2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; +2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; +2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; +229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; +229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; +229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; +229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; +229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; +22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; +22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; +22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; +22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; +22A5;UP TACK;Sm;0;ON;;;;;N;;;;; +22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; +22A7;MODELS;Sm;0;ON;;;;;Y;;;;; +22A8;TRUE;Sm;0;ON;;;;;Y;;;;; +22A9;FORCES;Sm;0;ON;;;;;Y;;;;; +22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; +22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; +22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; +22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; +22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; +22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; +22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; +22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; +22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; +22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; +22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; +22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; +22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; +22BB;XOR;Sm;0;ON;;;;;N;;;;; +22BC;NAND;Sm;0;ON;;;;;N;;;;; +22BD;NOR;Sm;0;ON;;;;;N;;;;; +22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; +22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; +22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; +22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; +22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; +22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; +22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; +22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; +22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; +22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; +22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; +22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; +22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; +22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; +22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; +22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; +22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; +22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; +22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; +22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; +22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; +22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; +22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; +22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; +22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; +22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; +22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; +22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; +22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; +22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; +22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; +22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; +22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; +22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; +22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; +22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; +22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; +22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; +22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; +22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; +22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; +22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;; +22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;; +2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; +2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; +2302;HOUSE;So;0;ON;;;;;N;;;;; +2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; +2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; +2305;PROJECTIVE;So;0;ON;;;;;N;;;;; +2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; +2307;WAVY LINE;So;0;ON;;;;;N;;;;; +2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;; +2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;; +230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;; +230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;; +230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; +230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; +230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; +230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; +2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; +2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; +2312;ARC;So;0;ON;;;;;N;;;;; +2313;SEGMENT;So;0;ON;;;;;N;;;;; +2314;SECTOR;So;0;ON;;;;;N;;;;; +2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; +2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; +2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; +2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; +2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; +231A;WATCH;So;0;ON;;;;;N;;;;; +231B;HOURGLASS;So;0;ON;;;;;N;;;;; +231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; +231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; +231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; +231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; +2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2322;FROWN;So;0;ON;;;;;N;;;;; +2323;SMILE;So;0;ON;;;;;N;;;;; +2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; +2325;OPTION KEY;So;0;ON;;;;;N;;;;; +2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; +2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; +2328;KEYBOARD;So;0;ON;;;;;N;;;;; +2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; +232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; +232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; +232C;BENZENE RING;So;0;ON;;;;;N;;;;; +232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; +232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; +232F;SYMMETRY;So;0;ON;;;;;N;;;;; +2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; +2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; +2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; +2333;SLOPE;So;0;ON;;;;;N;;;;; +2334;COUNTERBORE;So;0;ON;;;;;N;;;;; +2335;COUNTERSINK;So;0;ON;;;;;N;;;;; +2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; +2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; +2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; +2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; +233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; +233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; +233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; +233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; +233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; +233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; +2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; +2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; +2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; +2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; +2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; +2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; +2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; +2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; +2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; +2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; +234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;; +234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; +234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; +234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; +234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;; +234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; +2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; +2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;; +2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; +2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; +2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; +2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;; +2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; +2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; +2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; +2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; +235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; +235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; +235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; +235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; +235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; +235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; +2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; +2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;; +2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; +2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; +2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; +2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; +2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; +2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; +2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; +2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; +236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; +236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; +236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; +236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; +236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; +236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; +2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; +2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; +2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; +2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; +2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; +2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; +2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; +2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; +2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; +2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; +237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; +237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; +237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;; +237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; +237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; +237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; +2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; +2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; +2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; +2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; +2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; +2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; +2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; +2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; +2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; +2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;; +238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;; +238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;; +238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; +238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; +238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; +238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; +2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; +2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; +2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; +2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; +2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; +2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; +2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; +2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; +2398;NEXT PAGE;So;0;ON;;;;;N;;;;; +2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; +239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; +239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; +239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; +239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; +239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; +239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; +23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; +23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; +23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; +23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; +23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; +23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; +23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; +23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; +23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;; +23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;; +23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; +23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; +23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; +23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; +23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; +23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; +23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;; +23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;; +23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;; +23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;; +23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; +23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;; +23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; +23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; +23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;; +23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;; +23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; +23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; +23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;; +23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; +23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; +23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; +23DB;FUSE;So;0;ON;;;;;N;;;;; +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; +23E5;FLATNESS;So;0;ON;;;;;N;;;;; +23E6;AC CURRENT;So;0;ON;;;;;N;;;;; +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; +2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; +2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; +2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; +2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; +2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; +2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; +2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; +2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; +2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; +2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; +240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; +240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; +240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; +240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; +240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; +240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; +2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; +2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; +2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; +2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; +2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; +2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; +2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; +2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; +2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; +2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; +241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; +241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; +241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; +241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; +241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; +241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; +2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; +2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; +2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; +2423;OPEN BOX;So;0;ON;;;;;N;;;;; +2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; +2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; +2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; +2440;OCR HOOK;So;0;ON;;;;;N;;;;; +2441;OCR CHAIR;So;0;ON;;;;;N;;;;; +2442;OCR FORK;So;0;ON;;;;;N;;;;; +2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; +2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; +2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; +2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; +2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; +2448;OCR DASH;So;0;ON;;;;;N;;;;; +2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; +244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; +2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;; +2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;; +2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;; +2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;; +2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;; +2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;; +2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;; +2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;; +2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;; +2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;; +246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;; +246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;; +246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;; +246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;; +246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;; +246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;; +2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;; +2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;; +2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;; +2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;; +2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;; +2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;; +2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;; +2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;; +2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;; +2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;; +247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;; +247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;; +247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;; +247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;; +247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;; +247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;; +2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;; +2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;; +2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;; +2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;; +2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;; +2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;; +2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;; +2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;; +2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; +2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; +248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; +248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; +248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; +248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; +248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; +248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; +2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; +2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; +2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; +2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; +2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; +2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; +2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; +2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; +2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; +2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; +249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; +249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; +249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;; +249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;; +249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;; +249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;; +24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;; +24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;; +24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;; +24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;; +24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;; +24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;; +24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;; +24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;; +24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;; +24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;; +24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;; +24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;; +24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;; +24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;; +24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;; +24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;; +24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;; +24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;; +24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;; +24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;; +24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;; +24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;; +24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0; +24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1; +24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2; +24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3; +24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4; +24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5; +24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6; +24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7; +24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8; +24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9; +24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA; +24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB; +24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC; +24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD; +24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE; +24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF; +24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0; +24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1; +24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2; +24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3; +24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4; +24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5; +24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6; +24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7; +24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8; +24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9; +24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6 +24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7 +24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8 +24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9 +24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA +24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB +24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC +24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD +24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE +24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF +24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0 +24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1 +24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2 +24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3 +24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4 +24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5 +24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6 +24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7 +24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8 +24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9 +24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA +24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB +24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC +24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD +24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE +24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF +24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;; +24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; +24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; +24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; +24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;; +24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;; +24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;; +24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;; +24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;; +24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;; +24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;; +24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;; +24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;; +24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;; +24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;; +24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;; +24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;; +24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;; +24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;; +24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;; +24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;; +24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;; +2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; +2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; +2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; +2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; +2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; +2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; +2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; +2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; +2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; +2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; +250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; +250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; +250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; +250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; +250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; +250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; +2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; +2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; +2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; +2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; +2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; +2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; +2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; +2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; +2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; +2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; +251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; +251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; +251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; +251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; +251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; +251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; +2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; +2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; +2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; +2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; +2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; +2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; +2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; +2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; +2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; +2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; +252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; +252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; +252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; +252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; +252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; +252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; +2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; +2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; +2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; +2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; +2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; +2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; +2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; +2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; +2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; +2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; +253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; +253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; +253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; +253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; +253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; +253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; +2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; +2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; +2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; +2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; +2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; +2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; +2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; +2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; +2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; +2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; +254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; +254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; +254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; +254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; +254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; +254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; +2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; +2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; +2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; +2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; +2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; +2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; +2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; +2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; +2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; +2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; +255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; +255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; +255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; +255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; +255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; +255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; +2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; +2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; +2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; +2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; +2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; +2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; +2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; +2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; +2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; +2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; +256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; +256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; +256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; +256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; +256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; +256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; +2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; +2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; +2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; +2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; +2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; +2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; +2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; +2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; +2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; +2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; +257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; +257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; +257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; +257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; +257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; +257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; +2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; +2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; +2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; +2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2588;FULL BLOCK;So;0;ON;;;;;N;;;;; +2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; +258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; +258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; +2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; +2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; +2593;DARK SHADE;So;0;ON;;;;;N;;;;; +2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;; +2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;; +2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;; +2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;; +259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; +25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; +25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; +25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; +25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; +25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; +25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; +25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; +25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; +25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; +25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; +25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; +25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; +25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; +25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; +25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; +25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; +25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; +25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; +25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; +25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; +25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; +25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; +25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; +25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; +25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; +25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; +25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; +25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; +25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; +25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; +25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; +25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; +25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; +25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; +25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; +25C9;FISHEYE;So;0;ON;;;;;N;;;;; +25CA;LOZENGE;So;0;ON;;;;;N;;;;; +25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; +25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; +25CE;BULLSEYE;So;0;ON;;;;;N;;;;; +25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; +25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; +25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; +25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; +25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; +25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; +25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; +25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; +25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; +25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; +25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; +25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; +25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; +25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; +25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; +25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; +25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; +25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; +25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; +25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; +25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; +25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; +2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; +2601;CLOUD;So;0;ON;;;;;N;;;;; +2602;UMBRELLA;So;0;ON;;;;;N;;;;; +2603;SNOWMAN;So;0;ON;;;;;N;;;;; +2604;COMET;So;0;ON;;;;;N;;;;; +2605;BLACK STAR;So;0;ON;;;;;N;;;;; +2606;WHITE STAR;So;0;ON;;;;;N;;;;; +2607;LIGHTNING;So;0;ON;;;;;N;;;;; +2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; +2609;SUN;So;0;ON;;;;;N;;;;; +260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; +260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; +260C;CONJUNCTION;So;0;ON;;;;;N;;;;; +260D;OPPOSITION;So;0;ON;;;;;N;;;;; +260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; +260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; +2610;BALLOT BOX;So;0;ON;;;;;N;;;;; +2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; +2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; +2613;SALTIRE;So;0;ON;;;;;N;;;;; +2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;; +2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; +2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; +2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; +2618;SHAMROCK;So;0;ON;;;;;N;;;;; +2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; +261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; +261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; +261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; +261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; +261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; +261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; +2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; +2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; +2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; +2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; +2624;CADUCEUS;So;0;ON;;;;;N;;;;; +2625;ANKH;So;0;ON;;;;;N;;;;; +2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; +2627;CHI RHO;So;0;ON;;;;;N;;;;; +2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; +2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; +262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; +262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; +262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; +262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; +262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; +262F;YIN YANG;So;0;ON;;;;;N;;;;; +2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; +2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; +2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; +2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; +2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; +2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; +2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; +2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; +2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; +263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; +263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; +263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; +263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; +263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; +263F;MERCURY;So;0;ON;;;;;N;;;;; +2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; +2641;EARTH;So;0;ON;;;;;N;;;;; +2642;MALE SIGN;So;0;ON;;;;;N;;;;; +2643;JUPITER;So;0;ON;;;;;N;;;;; +2644;SATURN;So;0;ON;;;;;N;;;;; +2645;URANUS;So;0;ON;;;;;N;;;;; +2646;NEPTUNE;So;0;ON;;;;;N;;;;; +2647;PLUTO;So;0;ON;;;;;N;;;;; +2648;ARIES;So;0;ON;;;;;N;;;;; +2649;TAURUS;So;0;ON;;;;;N;;;;; +264A;GEMINI;So;0;ON;;;;;N;;;;; +264B;CANCER;So;0;ON;;;;;N;;;;; +264C;LEO;So;0;ON;;;;;N;;;;; +264D;VIRGO;So;0;ON;;;;;N;;;;; +264E;LIBRA;So;0;ON;;;;;N;;;;; +264F;SCORPIUS;So;0;ON;;;;;N;;;;; +2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; +2651;CAPRICORN;So;0;ON;;;;;N;;;;; +2652;AQUARIUS;So;0;ON;;;;;N;;;;; +2653;PISCES;So;0;ON;;;;;N;;;;; +2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; +2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; +2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; +2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; +2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; +2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; +265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; +265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; +265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; +265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; +265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; +265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; +2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; +2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; +2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; +2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; +2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; +2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; +2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; +2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; +2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; +2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; +266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; +266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; +266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; +266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; +266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; +266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; +2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; +2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; +2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; +2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;pete;;; +2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;; +2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;; +2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;; +2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;; +2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;; +2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;; +267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;; +267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; +267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; +2680;DIE FACE-1;So;0;ON;;;;;N;;;;; +2681;DIE FACE-2;So;0;ON;;;;;N;;;;; +2682;DIE FACE-3;So;0;ON;;;;;N;;;;; +2683;DIE FACE-4;So;0;ON;;;;;N;;;;; +2684;DIE FACE-5;So;0;ON;;;;;N;;;;; +2685;DIE FACE-6;So;0;ON;;;;;N;;;;; +2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;; +2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; +2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;; +2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;; +268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;; +268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;; +268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;; +268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;; +268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;; +268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; +2690;WHITE FLAG;So;0;ON;;;;;N;;;;; +2691;BLACK FLAG;So;0;ON;;;;;N;;;;; +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; +2693;ANCHOR;So;0;ON;;;;;N;;;;; +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; +2696;SCALES;So;0;ON;;;;;N;;;;; +2697;ALEMBIC;So;0;ON;;;;;N;;;;; +2698;FLOWER;So;0;ON;;;;;N;;;;; +2699;GEAR;So;0;ON;;;;;N;;;;; +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; +26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; +26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; +26B0;COFFIN;So;0;ON;;;;;N;;;;; +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; +26B2;NEUTER;So;0;ON;;;;;N;;;;; +2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; +2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; +2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; +2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; +2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; +2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; +2708;AIRPLANE;So;0;ON;;;;;N;;;;; +2709;ENVELOPE;So;0;ON;;;;;N;;;;; +270C;VICTORY HAND;So;0;ON;;;;;N;;;;; +270D;WRITING HAND;So;0;ON;;;;;N;;;;; +270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; +270F;PENCIL;So;0;ON;;;;;N;;;;; +2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; +2711;WHITE NIB;So;0;ON;;;;;N;;;;; +2712;BLACK NIB;So;0;ON;;;;;N;;;;; +2713;CHECK MARK;So;0;ON;;;;;N;;;;; +2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; +2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; +2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; +2717;BALLOT X;So;0;ON;;;;;N;;;;; +2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; +2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; +271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; +271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; +271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; +271D;LATIN CROSS;So;0;ON;;;;;N;;;;; +271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; +271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; +2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; +2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; +2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; +2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; +2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; +272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; +272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; +272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; +272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; +272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; +272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; +2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; +2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; +2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; +2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; +2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; +2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; +2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; +273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; +273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; +273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; +2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; +2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; +2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; +2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; +2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; +2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; +2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; +2747;SPARKLE;So;0;ON;;;;;N;;;;; +2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; +2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; +274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; +274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; +274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; +2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; +2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; +275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; +275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; +2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; +2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; +2766;FLORAL HEART;So;0;ON;;;;;N;;;;; +2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; +2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; +2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; +2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; +2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; +277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; +277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; +277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; +277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; +277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; +277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; +2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; +2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; +2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; +2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; +2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; +2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; +2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; +2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; +2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; +2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; +278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; +278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; +278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; +278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; +278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; +278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; +2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; +2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; +2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; +2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; +2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; +2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; +2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; +279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; +279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; +279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; +279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; +279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; +279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; +27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; +27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; +27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; +27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; +27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; +27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; +27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; +27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; +27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; +27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; +27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; +27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; +27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; +27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; +27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; +27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; +27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; +27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; +27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; +27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; +27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; +27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; +27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; +27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; +27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; +27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;N;;;;; +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;N;;;;; +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; +27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; +27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; +27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; +27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; +27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; +27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; +27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;; +27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;; +27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;; +27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;; +27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;; +27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;; +27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;; +27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;; +27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;; +27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;; +27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;; +27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;; +27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; +27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; +27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; +27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; +2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; +2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; +2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; +2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; +2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; +2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; +2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; +2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; +2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; +2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; +280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; +280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; +280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; +280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; +280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; +280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; +2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; +2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; +2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; +2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; +2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; +2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; +2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; +2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; +2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; +2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; +281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; +281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; +281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; +281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; +281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; +281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; +2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; +2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; +2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; +2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; +2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; +2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; +2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; +2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; +2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; +2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; +282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; +282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; +282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; +282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; +282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; +282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; +2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; +2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; +2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; +2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; +2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; +2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; +2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; +2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; +2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; +2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; +283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; +283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; +283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; +283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; +283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; +283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; +2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; +2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; +2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; +2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; +2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; +2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; +2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; +2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; +2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; +2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; +284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; +284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; +284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; +284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; +284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; +284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; +2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; +2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; +2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; +2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; +2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; +2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; +2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; +2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; +2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; +2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; +285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; +285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; +285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; +285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; +285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; +285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; +2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; +2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; +2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; +2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; +2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; +2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; +2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; +2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; +2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; +2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; +286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; +286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; +286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; +286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; +286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; +286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; +2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; +2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; +2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; +2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; +2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; +2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; +2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; +2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; +2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; +2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; +287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; +287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; +287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; +287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; +287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; +287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; +2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; +2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; +2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; +2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; +2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; +2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; +2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; +2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; +2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; +2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; +288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; +288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; +288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; +288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; +288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; +288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; +2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; +2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; +2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; +2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; +2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; +2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; +2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; +2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; +2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; +2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; +289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; +289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; +289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; +289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; +289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; +289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; +28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; +28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; +28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; +28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; +28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; +28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; +28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; +28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; +28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; +28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; +28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; +28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; +28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; +28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; +28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; +28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; +28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; +28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; +28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; +28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; +28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; +28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; +28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; +28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; +28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; +28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; +28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; +28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; +28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; +28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; +28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; +28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; +28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; +28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; +28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; +28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; +28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; +28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; +28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; +28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; +28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; +28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; +28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; +28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; +28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; +28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; +28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; +28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; +28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; +28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; +28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; +28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; +28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; +28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; +28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; +28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; +28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; +28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; +28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; +28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; +28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; +28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; +28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; +28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; +28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; +28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; +28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; +28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; +28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; +28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; +28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; +28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; +28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; +28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; +28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; +28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; +28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; +28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; +28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; +28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; +28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; +28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; +28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; +28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; +28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; +28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; +28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; +28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; +28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; +28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; +28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; +28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; +28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; +28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; +28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; +28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; +2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; +290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; +290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; +2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; +2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; +2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; +2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;; +292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;; +292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;; +2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;; +2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;; +2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;; +2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;; +2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;; +293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;; +293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; +2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; +2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; +294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; +294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; +294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; +294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; +294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; +2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; +2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; +2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; +2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; +2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; +2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; +2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; +2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; +2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; +2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; +295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; +295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; +295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; +295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; +295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; +295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; +2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; +2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; +2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; +2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; +2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; +296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; +296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; +296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; +296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;; +2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;; +2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;; +297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;; +297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;; +297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;; +297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;; +2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;; +2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;; +2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;; +2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;; +2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;; +2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;; +2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;; +2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;; +298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;; +298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;; +298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;; +298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;; +298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;; +298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;; +2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;; +2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;; +2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;; +2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; +2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; +2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; +2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; +2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; +2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; +2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;; +299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;; +299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; +299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;; +299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;; +299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;; +299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;; +29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; +29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; +29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;; +29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;; +29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; +29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;; +29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;; +29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;; +29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;; +29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;; +29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;; +29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;; +29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;; +29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;; +29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;; +29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; +29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; +29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; +29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;; +29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;; +29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;; +29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;; +29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;; +29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; +29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; +29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; +29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; +29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;; +29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;; +29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;; +29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;; +29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;; +29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;; +29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;; +29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;; +29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; +29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; +29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; +29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; +29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;; +29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;; +29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;; +29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;; +29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;; +29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;; +29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; +29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; +29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; +29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;; +29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;; +29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;; +29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;; +29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;; +29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;; +29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;; +29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;; +29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;; +29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; +29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;; +29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;; +29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +29FE;TINY;Sm;0;ON;;;;;N;;;;; +29FF;MINY;Sm;0;ON;;;;;N;;;;; +2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;; +2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; +2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;; +2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;; +2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;; +2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;; +2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;; +2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;; +2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; +2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;; +2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;; +2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;; +2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;; +2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;; +2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;; +2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; +2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; +2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;; +2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;; +2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;; +2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;; +2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;; +2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +2A1D;JOIN;Sm;0;ON;;;;;N;;;;; +2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;; +2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;; +2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;; +2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;; +2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; +2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;; +2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;; +2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;; +2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;; +2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; +2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;; +2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;; +2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; +2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;; +2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;; +2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; +2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; +2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;; +2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;; +2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;; +2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;; +2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;; +2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;; +2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;; +2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;; +2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;; +2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;; +2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; +2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;; +2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;; +2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; +2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; +2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; +2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; +2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; +2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; +2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; +2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; +2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; +2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;; +2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;; +2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;; +2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;; +2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;; +2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;; +2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;; +2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;; +2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;; +2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;; +2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; +2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; +2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; +2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; +2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;; +2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;; +2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; +2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; +2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; +2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; +2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;; +2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;; +2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; +2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; +2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;; +2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;; +2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;; +2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;; +2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;; +2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;; +2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; +2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; +2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;; +2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;; +2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;; +2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;; +2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;; +2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;not independent;;; +2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;; +2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;; +2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;; +2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;; +2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;; +2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;; +2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; +2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; +2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;; +2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; +2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; +2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;; +2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;; +2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;; +2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;; +2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;; +2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;; +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;; +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;; +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;; +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;; +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; +2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; +2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; +2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; +2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; +2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; +2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; +2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; +2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; +2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; +2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; +2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; +2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; +2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; +2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; +2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; +2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; +2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; +2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; +2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; +2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; +2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; +2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; +2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; +2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; +2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; +2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; +2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; +2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; +2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; +2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; +2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;; +2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; +2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; +2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; +2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; +2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; +2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; +2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; +2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; +2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; +2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; +2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; +2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; +2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; +2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; +2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; +2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; +2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; +2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; +2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; +2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; +2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; +2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; +2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; +2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; +2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; +2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; +2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; +2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; +2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; +2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; +2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; +2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; +2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; +2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; +2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; +2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; +2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; +2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; +2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; +2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; +2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; +2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; +2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; +2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; +2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; +2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; +2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; +2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; +2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; +2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; +2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; +2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; +2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; +2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; +2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; +2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; +2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; +2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; +2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; +2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; +2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; +2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; +2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; +2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; +2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; +2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; +2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; +2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; +2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; +2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; +2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; +2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; +2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; +2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; +2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; +2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; +2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; +2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; +2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; +2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; +2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; +2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; +2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; +2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;; +2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;; +2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;; +2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;; +2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;; +2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;; +2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;; +2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;; +2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;; +2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;; +2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;; +2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;; +2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;; +2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;; +2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;; +2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;; +2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;; +2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;; +2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;; +2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;; +2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;; +2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;; +2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;; +2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;; +2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;; +2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;; +2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;; +2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;; +2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;; +2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;; +2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;; +2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;; +2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;; +2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;; +2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;; +2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;; +2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;; +2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;; +2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;; +2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;; +2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;; +2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;; +2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;; +2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;; +2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;; +2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;; +2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;; +2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;; +2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;; +2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;; +2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;; +2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;; +2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;; +2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;; +2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;; +2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;; +2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;; +2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;; +2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;; +2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;; +2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;; +2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;; +2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;; +2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;; +2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;; +2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;; +2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;; +2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;; +2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;; +2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;; +2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;; +2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;; +2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;; +2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;; +2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;; +2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;; +2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;; +2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;; +2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;; +2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;; +2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;; +2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;; +2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;; +2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;; +2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;; +2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;; +2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;; +2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;; +2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;; +2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;; +2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;; +2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;; +2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;; +2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;; +2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;; +2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;; +2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;; +2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;; +2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;; +2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;; +2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;; +2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;; +2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;; +2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;; +2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;; +2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;; +2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;; +2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;; +2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;; +2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;; +2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;; +2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;; +2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;; +2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;; +2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;; +2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;; +2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;; +2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;; +2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;; +2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;; +2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;; +2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;; +2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;; +2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;; +2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;; +2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;; +2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;; +2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;; +2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;; +2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;; +2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;; +2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;; +2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;; +2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;; +2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;; +2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;; +2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;; +2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;; +2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;; +2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;; +2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;; +2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;; +2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;; +2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;; +2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;; +2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;; +2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;; +2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;; +2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;; +2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;; +2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;; +2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;; +2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;; +2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;; +2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;; +2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;; +2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;; +2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;; +2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;; +2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;; +2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;; +2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;; +2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;; +2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;; +2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;; +2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;; +2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;; +2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;; +2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;; +2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;; +2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;; +2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;; +2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;; +2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;; +2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;; +2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;; +2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;; +2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;; +2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;; +2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;; +2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;; +2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;; +2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;; +2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;; +2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;; +2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;; +2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;; +2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;; +2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;; +2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;; +2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;; +2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;; +2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;; +2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;; +2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;; +2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;; +2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;; +2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;; +2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;; +2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;; +2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;; +2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;; +2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;; +2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;; +2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;; +2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;; +2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;; +2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;; +2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;; +2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;; +2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;; +2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;; +2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;; +2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;; +2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;; +2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; +2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; +2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; +2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; +2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; +2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; +2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; +2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; +2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; +2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; +2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; +2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;; +3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; +3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; +3003;DITTO MARK;Po;0;ON;;;;;N;;;;; +3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; +3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; +3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; +3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; +3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; +3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; +300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; +300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; +300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; +300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; +300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; +300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; +3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; +3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; +3012;POSTAL MARK;So;0;ON;;;;;N;;;;; +3013;GETA MARK;So;0;ON;;;;;N;;;;; +3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; +3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; +3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; +3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; +3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; +3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; +301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; +301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; +301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; +301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;Y;;;;; +301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;Y;;;;; +301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;Y;;;;; +3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; +3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; +3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; +3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; +3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; +3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; +3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; +3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; +3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; +3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; +302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; +302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; +302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; +302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; +302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; +302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; +3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; +3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; +3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; +3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; +3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; +3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; +3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;; +3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; +3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;; +3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;; +303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;; +303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; +303C;MASU MARK;Lo;0;L;;;;;N;;;;; +303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;; +303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; +303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; +3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; +3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; +3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; +3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; +3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; +3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; +3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; +3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; +304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; +304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; +304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; +304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; +304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; +304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; +3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; +3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; +3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; +3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; +3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; +3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; +3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; +3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; +3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; +3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; +305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; +305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; +305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; +305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; +305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; +305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; +3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; +3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; +3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; +3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; +3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; +3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; +3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; +3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; +3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; +3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; +306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; +306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; +306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; +306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; +306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; +306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; +3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; +3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; +3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; +3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; +3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; +3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; +3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; +3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; +3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; +3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; +307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; +307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; +307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; +307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; +307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; +307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; +3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; +3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; +3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; +3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; +3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; +3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; +3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; +3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; +3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; +3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; +308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; +308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; +308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; +308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; +308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; +308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; +3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; +3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; +3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; +3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; +3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; +3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; +3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; +3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; +309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; +309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;; +309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;; +309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; +309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; +309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;; +30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; +30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; +30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; +30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; +30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; +30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; +30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; +30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; +30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; +30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; +30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; +30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; +30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; +30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; +30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; +30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; +30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; +30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; +30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; +30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; +30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; +30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; +30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; +30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; +30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; +30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; +30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; +30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; +30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; +30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; +30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; +30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; +30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; +30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; +30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; +30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; +30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; +30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; +30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; +30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; +30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; +30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; +30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; +30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; +30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; +30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; +30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; +30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; +30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; +30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; +30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; +30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; +30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; +30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; +30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; +30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; +30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; +30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; +30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; +30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; +30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; +30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; +30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; +30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; +30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; +30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; +30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; +30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; +30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; +30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; +30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; +30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; +30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; +30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; +30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; +30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; +30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; +30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; +30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; +30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; +30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; +30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; +30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; +30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; +30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; +30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; +30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; +30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; +30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; +30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; +30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; +30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; +30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; +30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;; +3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; +3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; +3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; +3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; +3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; +310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; +310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; +310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; +310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; +310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; +310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; +3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; +3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; +3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; +3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; +3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; +3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; +3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; +3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; +3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; +3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; +311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; +311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; +311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; +311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; +311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; +311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; +3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; +3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; +3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; +3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; +3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; +3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; +3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; +3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; +3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; +3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; +312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; +312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; +312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; +3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;; +3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; +3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; +3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;; +3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; +3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; +3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;; +3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; +3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;; +313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; +313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; +313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; +313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; +313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; +313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; +3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; +3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;; +3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;; +3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; +3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; +3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;; +3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; +3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;; +3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;; +3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; +314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;; +314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;; +314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;; +314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;; +314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;; +314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;; +3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;; +3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;; +3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;; +3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;; +3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;; +3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;; +3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;; +3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;; +3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;; +3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;; +315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;; +315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;; +315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;; +315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;; +315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;; +315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;; +3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;; +3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;; +3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;; +3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;; +3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;; +3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; +3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; +3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; +3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; +3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; +316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; +316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; +316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; +316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; +316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; +316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; +3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; +3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; +3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; +3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; +3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; +3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; +3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; +3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; +3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; +3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; +317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; +317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; +317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; +317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; +317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; +317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; +3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; +3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;; +3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; +3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; +3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; +3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; +3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; +3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;; +3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;; +3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;; +318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;; +318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;; +318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;; +318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;; +318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;; +3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;; +3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;; +3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;; +3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;; +3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;; +3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;; +3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;; +3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;; +3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;; +3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;; +319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;; +319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;; +319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;; +319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;; +319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;; +319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;; +31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; +31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; +31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; +31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; +31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; +31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; +31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; +31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; +31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; +31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; +31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; +31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; +31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; +31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; +31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; +31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; +31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; +31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; +31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; +31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; +31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; +31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; +31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; +31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; +31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; +31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; +31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; +31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;; +31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;; +31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;; +31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;; +31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;; +31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;; +31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;; +31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;; +31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;; +31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;; +31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;; +31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;; +31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;; +3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; +3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;; +3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; +3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; +3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;; +3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; +3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;; +3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;; +3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; +3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; +320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; +320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; +320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; +320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;; +320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; +320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; +3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; +3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; +3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; +3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; +3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; +3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; +3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; +3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; +3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; +3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; +321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; +321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; +321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; +321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;; +321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;; +3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;; +3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;; +3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;; +3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;; +3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;; +3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;; +3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;; +3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;; +3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;; +3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;; +322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;; +322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;; +322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;; +322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;; +322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;; +322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;; +3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;; +3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;; +3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;; +3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;; +3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;; +3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;; +3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;; +3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;; +3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;; +3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;; +323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;; +323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;; +323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;; +323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;; +323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;; +323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;; +3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;; +3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;; +3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;; +3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;; +3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;; +3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;; +3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;; +3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;; +3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;; +3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;; +3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;; +3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;; +3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;; +3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;; +325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;; +325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;; +325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;; +325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;; +325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;; +325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;; +3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; +3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;; +3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; +3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;; +3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;; +3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;; +3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;; +3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;; +3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; +3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;; +326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; +326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;; +326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;; +326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;; +326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;; +326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;; +3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;; +3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;; +3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;; +3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;; +3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;; +3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;; +3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;; +3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;; +3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;; +3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;; +327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;; +327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;; +327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;; +327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;; +327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;; +327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; +3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;; +3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;; +3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;; +3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;; +3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;; +3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;; +3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;; +3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;; +3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;; +3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;; +328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;; +328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;; +328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;; +328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;; +328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;; +328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;; +3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;; +3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;; +3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;; +3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;; +3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;; +3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;; +3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;; +3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;; +3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;; +3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;; +329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;; +329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;; +329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;; +329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;; +329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;; +329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;; +32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;; +32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;; +32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;; +32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;; +32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;; +32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; +32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;; +32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;; +32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;; +32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;; +32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;; +32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;; +32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;; +32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;; +32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;; +32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;; +32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;; +32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;; +32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;; +32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;; +32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;; +32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;; +32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;; +32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;; +32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;; +32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;; +32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;; +32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;; +32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;; +32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;; +32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;; +32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;; +32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;; +32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;; +32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;; +32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;; +32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;; +32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;; +32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;; +32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;; +32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;; +32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;; +32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;; +32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;; +32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;; +32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;; +32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;; +32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;; +32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;; +32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;; +32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;; +32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;; +32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;; +32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;; +32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;; +32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;; +32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;; +32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;; +32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;; +32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;; +32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;; +32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;; +32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;; +32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;; +32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;; +32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;; +32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;; +32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;; +32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;; +32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;; +32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;; +32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;; +32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;; +32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;; +32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;; +32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;; +32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;; +32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;; +32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;; +32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;; +32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;; +32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;; +32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;; +32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;; +32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;; +32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;; +32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;; +32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;; +32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;; +32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;; +32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;; +32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;; +32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;; +32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;; +32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;; +3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; +3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; +3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; +3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; +3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; +3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; +3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;; +3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; +3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; +3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; +330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; +330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; +330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; +330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; +330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; +330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; +3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;; +3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; +3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; +3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; +3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;; +3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; +3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; +3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; +3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; +3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; +331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; +331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; +331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; +331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; +331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; +331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; +3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; +3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; +3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; +3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; +3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; +3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;; +3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;; +3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;; +3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;; +3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; +332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; +332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; +332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; +332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; +332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; +332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; +3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;; +3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;; +3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; +3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; +3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; +3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; +3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; +3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;; +3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; +3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; +333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; +333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; +333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; +333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; +333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; +333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;; +3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; +3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; +3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; +3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; +3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; +3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; +3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; +3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; +3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; +3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;; +334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; +334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;; +334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; +334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; +334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; +334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; +3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; +3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; +3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;; +3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; +3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; +3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;; +3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; +3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; +3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;; +3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;; +335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;; +335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;; +335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;; +335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;; +335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;; +335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;; +3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;; +3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;; +3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;; +3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;; +3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;; +3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;; +3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;; +3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;; +3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;; +3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;; +336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;; +336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;; +336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;; +336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;; +336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;; +336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;; +3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;; +3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;; +3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;; +3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;; +3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;; +3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;; +3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;; +3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;; +3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;; +3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;; +337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;; +337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; +337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; +337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; +337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; +337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; +3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;; +3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;; +3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;; +3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;; +3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;; +3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;; +3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;; +3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;; +3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;; +3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; +338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;; +338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;; +338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;; +338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;; +338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;; +338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;; +3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;; +3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;; +3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;; +3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;; +3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;; +3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;; +3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;; +3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;; +3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;; +3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;; +339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;; +339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;; +339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;; +339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;; +339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;; +339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; +33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; +33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;; +33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; +33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; +33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; +33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;; +33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; +33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;; +33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; +33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;; +33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;; +33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;; +33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;; +33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;; +33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; +33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; +33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;; +33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;; +33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;; +33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;; +33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;; +33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;; +33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;; +33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;; +33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;; +33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;; +33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;; +33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;; +33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;; +33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;; +33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;; +33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;; +33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;; +33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;; +33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;; +33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;; +33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;; +33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;; +33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; +33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;; +33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;; +33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;; +33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;; +33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;; +33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;; +33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;; +33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;; +33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;; +33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;; +33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;; +33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;; +33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;; +33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;; +33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;; +33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;; +33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;; +33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;; +33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;; +33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;; +33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;; +33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;; +33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;; +33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;; +33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;; +33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;; +33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;; +33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;; +33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;; +33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;; +33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;; +33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;; +33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;; +33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;; +33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;; +33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;; +33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;; +33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;; +33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;; +33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;; +33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;; +33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;; +33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;; +33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;; +33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;; +33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;; +33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;; +33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;; +33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;; +33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;; +33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;; +33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;; +33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;; +33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;; +33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;; +33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;; +33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;; +3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;; +4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;; +4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;; +4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;; +4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;; +4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;; +4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; +4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;; +4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;; +4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;; +4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;; +4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;; +4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;; +4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;; +4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;; +4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;; +4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;; +4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;; +4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; +4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;; +4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;; +4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;; +4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;; +4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;; +4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;; +4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;; +4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;; +4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;; +4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;; +4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;; +4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;; +4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;; +4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;; +4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;; +4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;; +4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;; +4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;; +4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;; +4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;; +4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; +4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;; +4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;; +4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;; +4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; +4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;; +4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;; +4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;; +4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;; +4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;; +4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;; +4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;; +4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;; +4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;; +4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;; +4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;; +4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;; +4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;; +4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;; +4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;; +4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;; +4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;; +4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;; +4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;; +4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;; +4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; +4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; +4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;; +9FBB;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;; +A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; +A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; +A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; +A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; +A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; +A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; +A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; +A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; +A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; +A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; +A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; +A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; +A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; +A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; +A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; +A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; +A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; +A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; +A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; +A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; +A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; +A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; +A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; +A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; +A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; +A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; +A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; +A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; +A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; +A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; +A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; +A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; +A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; +A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; +A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; +A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; +A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; +A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; +A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; +A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; +A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; +A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; +A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; +A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; +A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; +A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; +A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; +A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; +A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; +A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; +A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; +A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; +A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; +A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; +A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; +A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; +A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; +A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; +A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; +A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; +A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; +A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; +A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; +A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; +A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; +A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; +A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; +A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; +A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; +A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; +A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; +A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; +A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; +A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; +A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; +A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; +A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; +A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; +A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; +A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; +A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; +A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; +A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; +A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; +A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; +A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; +A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; +A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; +A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; +A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; +A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; +A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; +A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; +A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; +A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; +A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; +A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; +A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; +A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; +A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; +A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; +A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; +A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; +A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; +A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; +A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; +A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; +A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; +A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; +A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; +A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; +A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; +A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; +A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; +A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; +A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; +A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; +A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; +A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; +A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; +A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; +A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; +A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; +A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; +A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; +A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; +A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; +A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; +A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; +A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; +A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; +A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; +A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; +A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; +A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; +A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; +A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; +A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; +A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; +A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; +A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; +A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; +A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; +A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; +A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; +A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; +A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; +A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; +A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; +A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; +A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; +A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; +A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; +A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; +A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; +A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; +A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; +A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; +A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; +A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; +A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; +A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; +A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; +A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; +A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; +A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; +A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; +A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; +A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; +A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; +A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; +A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; +A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; +A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; +A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; +A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; +A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; +A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; +A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; +A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; +A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; +A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; +A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; +A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; +A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; +A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; +A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; +A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; +A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; +A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; +A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; +A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; +A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; +A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; +A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; +A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; +A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; +A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; +A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; +A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; +A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; +A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; +A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; +A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; +A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; +A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; +A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; +A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; +A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; +A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; +A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; +A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; +A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; +A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; +A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; +A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; +A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; +A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; +A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; +A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; +A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; +A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; +A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; +A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; +A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; +A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; +A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; +A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; +A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; +A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; +A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; +A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; +A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; +A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; +A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; +A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; +A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; +A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; +A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; +A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; +A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; +A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; +A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; +A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; +A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; +A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; +A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; +A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; +A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; +A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; +A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; +A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; +A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; +A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; +A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; +A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; +A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; +A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; +A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; +A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; +A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; +A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; +A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; +A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; +A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; +A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; +A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; +A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; +A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; +A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; +A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; +A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; +A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; +A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; +A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; +A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; +A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; +A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; +A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; +A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; +A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; +A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; +A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; +A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; +A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; +A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; +A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; +A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; +A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; +A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; +A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; +A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; +A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; +A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; +A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; +A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; +A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; +A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; +A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; +A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; +A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; +A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; +A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; +A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; +A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; +A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; +A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; +A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; +A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; +A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; +A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; +A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; +A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; +A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; +A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; +A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; +A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; +A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; +A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; +A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; +A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; +A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; +A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; +A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; +A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; +A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; +A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; +A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; +A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; +A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; +A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; +A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; +A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; +A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; +A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; +A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; +A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; +A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; +A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; +A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; +A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; +A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; +A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; +A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; +A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; +A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; +A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; +A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; +A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; +A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; +A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; +A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; +A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; +A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; +A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; +A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; +A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; +A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; +A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; +A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; +A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; +A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; +A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; +A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; +A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; +A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; +A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; +A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; +A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; +A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; +A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; +A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; +A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; +A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; +A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; +A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; +A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; +A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; +A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; +A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; +A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; +A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; +A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; +A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; +A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; +A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; +A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; +A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; +A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; +A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; +A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; +A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; +A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; +A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; +A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; +A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; +A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; +A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; +A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; +A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; +A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; +A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; +A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; +A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; +A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; +A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; +A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; +A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; +A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; +A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; +A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; +A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; +A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; +A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; +A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; +A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; +A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; +A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; +A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; +A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; +A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; +A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; +A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; +A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; +A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; +A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; +A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; +A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; +A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; +A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; +A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; +A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; +A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; +A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; +A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; +A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; +A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; +A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; +A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; +A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; +A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; +A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; +A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; +A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; +A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; +A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; +A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; +A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; +A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; +A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; +A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; +A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; +A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; +A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; +A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; +A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; +A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; +A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; +A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; +A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; +A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; +A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; +A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; +A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; +A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; +A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; +A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; +A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; +A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; +A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; +A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; +A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; +A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; +A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; +A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; +A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; +A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; +A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; +A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; +A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; +A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; +A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; +A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; +A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; +A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; +A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; +A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; +A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; +A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; +A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; +A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; +A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; +A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; +A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; +A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; +A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; +A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; +A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; +A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; +A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; +A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; +A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; +A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; +A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; +A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; +A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; +A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; +A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; +A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; +A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; +A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; +A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; +A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; +A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; +A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; +A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; +A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; +A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; +A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; +A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; +A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; +A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; +A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; +A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; +A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; +A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; +A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; +A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; +A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; +A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; +A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; +A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; +A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; +A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; +A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; +A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; +A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; +A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; +A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; +A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; +A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; +A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; +A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; +A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; +A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; +A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; +A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; +A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; +A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; +A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; +A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; +A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; +A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; +A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; +A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; +A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; +A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; +A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; +A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; +A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; +A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; +A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; +A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; +A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; +A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; +A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; +A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; +A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; +A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; +A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; +A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; +A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; +A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; +A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; +A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; +A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; +A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; +A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; +A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; +A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; +A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; +A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; +A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; +A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; +A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; +A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; +A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; +A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; +A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; +A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; +A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; +A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; +A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; +A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; +A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; +A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; +A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; +A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; +A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; +A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; +A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; +A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; +A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; +A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; +A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; +A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; +A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; +A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; +A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; +A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; +A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; +A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; +A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; +A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; +A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; +A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; +A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; +A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; +A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; +A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; +A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; +A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; +A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; +A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; +A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; +A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; +A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; +A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; +A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; +A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; +A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; +A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; +A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; +A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; +A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; +A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; +A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; +A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; +A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; +A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; +A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; +A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; +A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; +A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; +A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; +A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; +A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; +A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; +A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; +A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; +A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; +A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; +A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; +A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; +A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; +A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; +A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; +A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; +A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; +A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; +A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; +A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; +A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; +A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; +A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; +A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; +A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; +A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; +A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; +A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; +A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; +A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; +A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; +A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; +A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; +A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; +A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; +A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; +A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; +A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; +A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; +A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; +A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; +A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; +A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; +A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; +A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; +A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; +A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; +A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; +A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; +A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; +A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; +A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; +A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; +A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; +A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; +A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; +A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; +A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; +A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; +A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; +A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; +A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; +A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; +A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; +A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; +A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; +A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; +A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; +A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; +A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; +A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; +A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; +A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; +A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; +A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; +A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; +A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; +A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; +A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; +A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; +A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; +A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; +A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; +A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; +A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; +A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; +A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; +A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; +A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; +A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; +A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; +A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; +A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; +A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; +A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; +A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; +A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; +A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; +A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; +A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; +A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; +A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; +A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; +A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; +A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; +A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; +A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; +A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; +A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; +A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; +A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; +A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; +A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; +A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; +A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; +A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; +A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; +A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; +A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; +A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; +A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; +A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; +A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; +A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; +A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; +A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; +A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; +A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; +A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; +A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; +A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; +A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; +A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; +A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; +A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; +A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; +A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; +A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; +A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; +A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; +A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; +A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; +A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; +A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; +A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; +A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; +A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; +A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; +A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; +A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; +A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; +A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; +A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; +A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; +A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; +A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; +A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; +A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; +A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; +A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; +A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; +A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; +A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; +A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; +A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; +A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; +A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; +A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; +A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; +A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; +A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; +A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; +A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; +A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; +A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; +A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; +A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; +A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; +A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; +A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; +A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; +A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; +A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; +A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; +A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; +A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; +A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; +A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; +A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; +A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; +A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; +A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; +A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; +A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; +A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; +A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; +A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; +A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; +A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; +A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; +A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; +A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; +A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; +A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; +A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; +A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; +A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; +A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; +A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; +A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; +A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; +A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; +A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; +A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; +A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; +A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; +A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; +A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; +A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; +A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; +A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; +A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; +A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; +A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; +A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; +A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; +A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; +A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; +A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; +A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; +A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; +A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; +A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; +A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; +A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; +A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; +A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; +A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; +A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; +A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; +A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; +A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; +A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; +A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; +A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; +A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; +A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; +A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; +A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; +A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; +A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; +A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; +A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; +A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; +A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; +A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; +A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; +A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; +A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; +A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; +A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; +A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; +A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; +A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; +A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; +A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; +A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; +A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; +A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; +A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; +A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; +A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; +A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; +A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; +A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; +A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; +A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; +A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; +A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; +A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; +A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; +A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; +A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; +A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; +A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; +A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; +A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; +A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; +A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; +A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; +A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; +A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; +A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; +A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; +A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; +A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; +A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; +A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; +A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; +A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; +A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; +A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; +A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; +A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; +A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; +A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; +A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; +A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; +A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; +A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; +A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; +A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; +A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; +A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; +A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; +A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; +A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; +A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; +A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; +A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; +A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; +A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; +A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; +A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; +A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; +A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; +A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; +A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; +A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; +A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; +A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; +A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; +A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; +A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; +A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; +A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; +A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; +A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; +A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; +A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; +A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; +A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; +A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; +A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; +A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; +A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; +A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; +A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; +A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; +A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; +A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; +A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; +A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; +A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; +A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; +A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; +A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; +A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; +A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; +A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; +A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; +A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; +A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; +A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; +A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; +A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; +A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; +A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; +A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; +A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; +A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; +A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; +A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; +A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; +A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; +A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; +A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; +A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; +A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; +A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; +A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; +A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; +A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; +A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; +A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; +A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; +A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; +A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; +A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; +A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; +A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; +A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; +A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; +A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; +A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; +A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; +A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; +A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; +A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; +A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; +A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; +A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; +A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; +A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; +A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; +A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; +A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; +A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; +A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; +A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; +A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; +A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; +A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; +A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; +A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; +A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; +A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; +A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; +A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; +A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; +A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; +A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; +A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; +A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; +A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; +A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; +A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; +A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; +A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; +A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; +A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; +A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; +A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; +A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; +A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; +A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; +A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; +A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; +A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; +A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; +A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; +A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; +A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; +A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; +A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; +A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; +A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; +A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; +A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; +A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; +A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; +A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; +A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; +A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; +A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; +A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; +A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; +A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; +A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; +A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; +A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; +A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; +A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; +A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; +A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; +A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; +A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; +A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; +A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; +A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; +A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; +A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; +A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; +A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; +A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; +A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; +A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; +A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; +A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; +A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; +A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; +A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; +A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; +A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; +A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; +A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; +A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; +A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; +A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; +A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; +A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; +A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; +A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; +A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; +A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; +A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; +A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; +A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; +A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; +A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; +A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; +A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; +A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; +A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; +A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;; +A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;; +A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; +A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; +A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; +A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; +A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; +A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; +A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; +A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; +A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; +A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; +A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; +A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; +A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; +A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; +A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; +A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; +A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;; +A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; +A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; +A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; +A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; +A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; +A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; +A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; +A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; +A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; +A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; +A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; +A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; +A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;; +A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; +A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; +A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; +A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; +A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; +A802;SYLOTI NAGRI SIGN DVISVARA;Mc;0;NSM;;;;;N;;;;; +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; +AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;; +D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;; +D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;; +DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;; +DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;; +DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;; +DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;; +DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;; +E000;<Private Use, First>;Co;0;L;;;;;N;;;;; +F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;; +F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; +F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; +F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; +F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; +F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; +F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; +F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; +F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; +F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; +F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; +F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; +F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; +F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; +F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; +F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; +F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; +F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; +F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; +F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; +F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; +F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; +F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; +F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; +F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; +F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; +F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; +F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; +F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; +F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; +F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; +F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; +F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; +F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; +F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; +F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; +F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; +F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; +F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; +F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; +F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; +F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; +F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; +F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; +F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; +F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; +F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; +F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; +F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; +F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; +F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; +F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; +F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; +F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; +F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; +F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; +F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; +F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; +F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; +F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; +F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; +F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; +F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; +F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; +F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; +F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; +F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; +F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; +F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; +F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; +F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; +F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; +F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; +F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; +F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; +F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; +F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; +F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; +F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; +F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; +F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; +F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; +F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;; +F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; +F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; +F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; +F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; +F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; +F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; +F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; +F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; +F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; +F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; +F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; +F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; +F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; +F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; +F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; +F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; +F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; +F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; +F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; +F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; +F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; +F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; +F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; +F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; +F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; +F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;; +F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; +F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; +F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; +F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; +F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; +F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; +F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; +F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;; +F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; +F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; +F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; +F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; +F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;; +F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; +F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; +F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; +F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; +F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; +F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; +F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; +F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; +F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; +F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; +F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; +F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; +F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; +F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; +F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; +F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; +F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; +F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; +F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; +F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; +F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; +F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; +F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; +F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; +F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; +F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; +F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; +F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; +F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; +F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; +F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; +F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; +F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; +F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; +F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; +F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; +F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; +F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; +F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; +F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; +F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; +F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; +F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; +F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; +F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; +F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; +F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; +F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; +F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; +F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; +F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; +F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; +F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; +F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; +F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; +F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; +F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; +F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;; +F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; +F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; +F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; +F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; +F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; +F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; +F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; +F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; +F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; +F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; +F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; +F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; +F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; +F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; +F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; +F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; +F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; +F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; +F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; +F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; +F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; +F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; +F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; +F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; +F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; +F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; +F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; +F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; +F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; +F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; +F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;; +F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; +F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;; +F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; +F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; +F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; +F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; +F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; +F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; +F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; +F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; +F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; +F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; +F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; +F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; +F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; +F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; +F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; +F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; +F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; +F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; +F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; +F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; +F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; +F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; +F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; +F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; +F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; +F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; +F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; +F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; +F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; +F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; +F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; +F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; +F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; +F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; +F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; +F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; +F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; +F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; +F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; +F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; +F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; +F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;; +F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; +F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; +FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; +FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; +FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; +FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; +FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; +FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; +FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; +FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; +FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; +FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; +FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; +FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; +FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; +FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; +FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; +FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; +FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; +FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; +FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; +FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; +FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; +FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; +FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; +FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; +FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; +FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; +FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; +FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; +FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; +FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; +FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; +FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;; +FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; +FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; +FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; +FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;; +FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; +FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; +FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; +FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; +FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; +FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; +FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; +FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; +FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; +FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; +FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;; +FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;; +FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;; +FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;; +FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;; +FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;; +FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;; +FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;; +FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;; +FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;; +FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;; +FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;; +FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;; +FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;; +FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;; +FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;; +FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;; +FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; +FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;; +FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;; +FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;; +FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;; +FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;; +FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;; +FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;; +FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;; +FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;; +FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;; +FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;; +FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;; +FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;; +FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;; +FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;; +FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;; +FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;; +FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;; +FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;; +FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;; +FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;; +FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;; +FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;; +FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;; +FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;; +FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;; +FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;; +FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;; +FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;; +FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;; +FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;; +FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;; +FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;; +FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;; +FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;; +FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;; +FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;; +FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; +FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; +FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; +FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; +FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;; +FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;; +FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;; +FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;; +FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;; +FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;; +FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;; +FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;; +FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;; +FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;; +FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;; +FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;; +FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; +FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; +FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; +FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;; +FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;; +FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;; +FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;; +FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;; +FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;; +FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;; +FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;; +FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;; +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;; +FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; +FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; +FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; +FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; +FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; +FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; +FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; +FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; +FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; +FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; +FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; +FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; +FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; +FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; +FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; +FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; +FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; +FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; +FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; +FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; +FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; +FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; +FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; +FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; +FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; +FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; +FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; +FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; +FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; +FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; +FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; +FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; +FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;; +FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;; +FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;; +FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;; +FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;; +FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;; +FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;; +FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;; +FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;; +FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;; +FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;; +FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;; +FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;; +FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;; +FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;; +FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;; +FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;; +FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;; +FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;; +FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;; +FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;; +FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;; +FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;; +FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;; +FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;; +FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;; +FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;; +FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;; +FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;; +FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;; +FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;; +FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;; +FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;; +FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;; +FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;; +FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;; +FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;; +FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;; +FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;; +FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;; +FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;; +FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;; +FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;; +FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;; +FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;; +FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;; +FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;; +FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;; +FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;; +FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;; +FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;; +FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;; +FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;; +FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;; +FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;; +FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;; +FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;; +FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;; +FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;; +FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;; +FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;; +FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;; +FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;; +FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;; +FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;; +FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;; +FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;; +FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;; +FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;; +FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;; +FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;; +FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;; +FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;; +FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;; +FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;; +FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;; +FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;; +FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;; +FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;; +FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;; +FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;; +FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;; +FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;; +FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;; +FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;; +FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;; +FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;; +FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;; +FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;; +FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;; +FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;; +FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;; +FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;; +FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;; +FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;; +FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;; +FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;; +FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;; +FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;; +FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;; +FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;; +FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;; +FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;; +FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;; +FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;; +FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;; +FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;; +FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;; +FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;; +FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;; +FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;; +FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;; +FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;; +FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;; +FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;; +FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;; +FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;; +FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;; +FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;; +FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;; +FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;; +FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;; +FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;; +FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;; +FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;; +FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;; +FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;; +FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;; +FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;; +FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;; +FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;; +FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;; +FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;; +FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;; +FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;; +FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;; +FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;; +FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;; +FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;; +FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;; +FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;; +FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;; +FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;; +FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;; +FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;; +FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;; +FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;; +FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;; +FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;; +FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;; +FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;; +FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;; +FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;; +FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;; +FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;; +FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;; +FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;; +FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;; +FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;; +FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;; +FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;; +FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;; +FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;; +FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;; +FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;; +FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;; +FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;; +FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;; +FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;; +FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;; +FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;; +FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;; +FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;; +FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;; +FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;; +FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;; +FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;; +FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;; +FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;; +FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;; +FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;; +FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;; +FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;; +FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;; +FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;; +FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;; +FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;; +FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;; +FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;; +FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;; +FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;; +FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;; +FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;; +FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;; +FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;; +FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;; +FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;; +FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;; +FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;; +FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;; +FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;; +FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;; +FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;; +FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;; +FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;; +FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;; +FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;; +FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;; +FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;; +FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;; +FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;; +FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;; +FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;; +FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;; +FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;; +FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;; +FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;; +FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;; +FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;; +FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;; +FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;; +FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;; +FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;; +FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;; +FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;; +FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;; +FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;; +FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;; +FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;; +FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;; +FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;; +FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;; +FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;; +FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;; +FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;; +FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;; +FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;; +FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;; +FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;; +FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;; +FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;; +FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;; +FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;; +FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;; +FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;; +FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;; +FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;; +FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;; +FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;; +FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;; +FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;; +FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;; +FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;; +FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;; +FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;; +FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;; +FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;; +FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;; +FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;; +FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;; +FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;; +FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;; +FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;; +FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;; +FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;; +FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;; +FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;; +FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;; +FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;; +FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;; +FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;; +FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;; +FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;; +FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;; +FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;; +FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;; +FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;; +FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;; +FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;; +FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;; +FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;; +FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;; +FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;; +FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;; +FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;; +FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;; +FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;; +FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;; +FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;; +FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;; +FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;; +FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;; +FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;; +FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;; +FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;; +FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;; +FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;; +FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;; +FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;; +FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;; +FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;; +FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;; +FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;; +FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;; +FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;; +FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;; +FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;; +FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;; +FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;; +FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;; +FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;; +FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;; +FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;; +FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;; +FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;; +FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;; +FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;; +FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;; +FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;; +FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;; +FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;; +FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;; +FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;; +FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;; +FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;; +FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;; +FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;; +FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;; +FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;; +FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;; +FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;; +FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;; +FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;; +FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;; +FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;; +FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;; +FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;; +FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;; +FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;; +FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;; +FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;; +FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;; +FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;; +FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;; +FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;; +FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;; +FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;; +FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;; +FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;; +FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;; +FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;; +FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;; +FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;; +FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;; +FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;; +FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;; +FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;; +FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;; +FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;; +FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;; +FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;; +FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;; +FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;; +FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;; +FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;; +FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;; +FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;; +FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;; +FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;; +FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;; +FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;; +FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;; +FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;; +FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;; +FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;; +FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;; +FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;; +FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;; +FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;; +FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;; +FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;; +FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;; +FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;; +FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;; +FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;; +FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;; +FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;; +FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;; +FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;; +FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;; +FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;; +FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;; +FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;; +FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;; +FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;; +FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;; +FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;; +FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;; +FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;; +FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;; +FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;; +FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;; +FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;; +FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;; +FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;; +FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;; +FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;; +FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;; +FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;; +FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;; +FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;; +FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;; +FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;; +FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;; +FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;; +FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;; +FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;; +FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;; +FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;; +FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;; +FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;; +FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;; +FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;; +FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;; +FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;; +FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;; +FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;; +FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;; +FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;; +FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;; +FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;; +FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;; +FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;; +FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;; +FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;; +FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;; +FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;; +FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;; +FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;; +FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;; +FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;; +FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;; +FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;; +FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;; +FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;; +FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;; +FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;; +FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;; +FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;; +FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;; +FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;; +FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;; +FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;; +FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;; +FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;; +FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;; +FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;; +FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;; +FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;; +FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;; +FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;; +FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;; +FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;; +FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;; +FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;; +FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;; +FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;; +FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;; +FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;; +FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;; +FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;; +FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;; +FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;; +FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;; +FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;; +FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;; +FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;; +FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;; +FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;; +FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;; +FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;; +FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;; +FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;; +FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;; +FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;; +FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;; +FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;; +FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;; +FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;; +FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;; +FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;; +FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;; +FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;; +FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;; +FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;; +FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;; +FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;; +FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;; +FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;; +FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;; +FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;; +FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;; +FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;; +FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;; +FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;; +FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;; +FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;; +FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;; +FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;; +FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;; +FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;; +FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;; +FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;; +FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;; +FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;; +FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;; +FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;; +FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;; +FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;; +FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;; +FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;; +FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;; +FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;; +FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;; +FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;; +FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;; +FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;; +FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;; +FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;; +FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;; +FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;; +FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;; +FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;; +FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;; +FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;; +FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;; +FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;; +FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;; +FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;; +FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;; +FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;; +FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;; +FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;; +FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;; +FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;; +FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;; +FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;; +FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;; +FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;; +FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;; +FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;; +FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;; +FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;; +FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;; +FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;; +FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;; +FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;; +FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;; +FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;; +FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;; +FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;; +FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;; +FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;; +FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;; +FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;; +FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;; +FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;; +FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;; +FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;; +FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;; +FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;; +FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;; +FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;; +FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;; +FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;; +FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;; +FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;; +FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;; +FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;; +FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;; +FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;; +FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;; +FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;; +FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;; +FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;; +FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;; +FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;; +FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;; +FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;; +FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;; +FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;; +FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;; +FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; +FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; +FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;; +FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; +FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; +FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; +FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; +FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;; +FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;; +FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;; +FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;; +FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;; +FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;; +FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;; +FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;; +FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;; +FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; +FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; +FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; +FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;; +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;; +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;; +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;; +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;; +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;; +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;; +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;; +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;; +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;; +FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; +FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; +FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; +FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; +FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; +FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; +FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; +FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; +FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; +FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; +FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; +FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; +FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; +FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; +FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; +FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; +FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; +FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; +FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; +FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; +FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; +FE45;SESAME DOT;Po;0;ON;;;;;N;;;;; +FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;; +FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;; +FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;; +FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;; +FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; +FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;; +FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; +FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;; +FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; +FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;; +FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;; +FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;; +FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;; +FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;; +FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;; +FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;; +FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;; +FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;; +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; +FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;; +FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;; +FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;; +FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;; +FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;; +FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;; +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;; +FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;; +FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;; +FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;; +FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;; +FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;; +FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; +FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; +FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; +FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;; +FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; +FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; +FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; +FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; +FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; +FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; +FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; +FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; +FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; +FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; +FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; +FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; +FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; +FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; +FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; +FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; +FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; +FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; +FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; +FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; +FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; +FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; +FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; +FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; +FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; +FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; +FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; +FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; +FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; +FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; +FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; +FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; +FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; +FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; +FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; +FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; +FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; +FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; +FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; +FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; +FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; +FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; +FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; +FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; +FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; +FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; +FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; +FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; +FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; +FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; +FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; +FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; +FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; +FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; +FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; +FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; +FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; +FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; +FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; +FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; +FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; +FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; +FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; +FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; +FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; +FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; +FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; +FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; +FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; +FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; +FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; +FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; +FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; +FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; +FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; +FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; +FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; +FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; +FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; +FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; +FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; +FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; +FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; +FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; +FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; +FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; +FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; +FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; +FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; +FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; +FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; +FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; +FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; +FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; +FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; +FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; +FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; +FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; +FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; +FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; +FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; +FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; +FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; +FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; +FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; +FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; +FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; +FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; +FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; +FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; +FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; +FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; +FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; +FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; +FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; +FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; +FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; +FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; +FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; +FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; +FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; +FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; +FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; +FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; +FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; +FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; +FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; +FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; +FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; +FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; +FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; +FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; +FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; +FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; +FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; +FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; +FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; +FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;; +FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;; +FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;; +FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;; +FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;; +FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;; +FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;; +FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; +FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; +FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;; +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;; +FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;; +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;; +FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;; +FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;; +FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;; +FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;; +FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;; +FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;; +FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;; +FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;; +FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;; +FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;; +FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;; +FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;; +FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;; +FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;; +FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;; +FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;; +FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;; +FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;; +FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;; +FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41; +FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42; +FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43; +FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44; +FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45; +FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46; +FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47; +FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48; +FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49; +FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A; +FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B; +FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C; +FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D; +FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E; +FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F; +FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50; +FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51; +FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52; +FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53; +FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54; +FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55; +FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56; +FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57; +FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58; +FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59; +FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A; +FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;; +FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;; +FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;; +FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; +FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; +FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; +FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21 +FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22 +FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23 +FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24 +FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25 +FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26 +FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27 +FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28 +FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29 +FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A +FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B +FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C +FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D +FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E +FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F +FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30 +FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31 +FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32 +FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33 +FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34 +FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35 +FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36 +FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37 +FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38 +FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39 +FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A +FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;; +FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; +FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;; +FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;; +FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;*;;; +FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;*;;; +FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; +FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; +FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; +FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;; +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;; +FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;; +FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;; +FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;; +FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;; +FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;; +FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;; +FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;; +FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;; +FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;; +FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;; +FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;; +FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;; +FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;; +FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;; +FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;; +FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;; +FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;; +FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;; +FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;; +FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;; +FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;; +FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;; +FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;; +FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;; +FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;; +FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;; +FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;; +FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;; +FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;; +FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;; +FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;; +FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;; +FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;; +FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;; +FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;; +FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;; +FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;; +FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;; +FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;; +FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;; +FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;; +FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;; +FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;; +FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;; +FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;; +FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;; +FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;; +FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;; +FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;; +FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;; +FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;; +FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;; +FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;; +FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;; +FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;; +FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;; +FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;; +FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;; +FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; +FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; +FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; +FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; +FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;; +FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; +FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; +FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; +FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; +FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; +FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; +FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; +FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; +FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; +FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; +FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; +FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; +FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;; +FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; +FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; +FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; +FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;; +FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; +FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;; +FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; +FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; +FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; +FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; +FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; +FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; +FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;; +FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;; +FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;; +FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;; +FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;; +FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;; +FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;; +FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;; +FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;; +FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;; +FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;; +FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;; +FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;; +FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;; +FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;; +FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;; +FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;; +FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;; +FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;; +FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;; +FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;; +FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;; +FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;; +FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;; +FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;; +FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;; +FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; +FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;; +FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;; +FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;; +FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;; +FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;; +FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;; +FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;; +FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;; +FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;; +FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; +FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; +FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; +FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; +FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; +10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; +10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;; +10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;; +10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;; +10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;; +10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;; +10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;; +10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;; +10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;; +10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;; +1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;; +1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;; +1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;; +1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;; +1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;; +10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;; +10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;; +10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;; +10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;; +10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;; +10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;; +10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;; +10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;; +10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;; +10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;; +1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;; +1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;; +1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;; +1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;; +1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;; +1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;; +10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;; +10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;; +10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;; +10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;; +10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;; +10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;; +10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;; +10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;; +10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;; +1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;; +1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;; +1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;; +1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;; +1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;; +1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;; +10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;; +10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;; +10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;; +10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;; +10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;; +10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;; +10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;; +10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;; +10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;; +10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;; +1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;; +1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;; +1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;; +1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;; +10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;; +10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;; +10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;; +10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;; +10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;; +10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;; +10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;; +10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;; +10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;; +10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;; +1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;; +1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;; +1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;; +1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;; +10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;; +10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;; +10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;; +10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;; +10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;; +10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;; +10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;; +10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;; +10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;; +10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;; +1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;; +1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;; +1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;; +1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;; +10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;; +10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;; +10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;; +10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;; +10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;; +10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;; +10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;; +10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;; +10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;; +10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;; +1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;; +1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;; +1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;; +1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;; +1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;; +1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;; +10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;; +10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;; +10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;; +10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;; +10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;; +10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;; +10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;; +10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;; +10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;; +10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;; +1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;; +1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;; +1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;; +1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;; +1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;; +1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;; +100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;; +100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;; +100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;; +100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;; +100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;; +100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;; +100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;; +100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;; +100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;; +100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;; +100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;; +100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;; +100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;; +100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;; +100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;; +100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;; +100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;; +100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;; +100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;; +100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;; +100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;; +100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;; +100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;; +100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;; +100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;; +100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;; +100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;; +100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;; +100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;; +100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;; +100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;; +100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;; +100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;; +100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;; +100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;; +100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;; +100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;; +100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;; +100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;; +100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;; +100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;; +100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;pug;;; +100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; +100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;; +100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;; +100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;; +100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;; +100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;; +100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;; +100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;; +100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;; +100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;; +100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;; +100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;; +100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;; +100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;; +100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;; +100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;; +100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;; +100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;; +100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;; +100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;; +100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;; +100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;; +100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;; +100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;; +100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;; +100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;; +100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;; +100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;; +100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;; +100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;; +100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;; +100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;; +100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;; +100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;; +100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;; +100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;; +100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;; +100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;; +100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;; +100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;; +100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;; +100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;; +100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;; +100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;; +100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;; +100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;; +100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;; +100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;; +100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;; +10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;; +10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;; +10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;; +10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;; +10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;; +10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;; +1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;; +1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;; +1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;; +1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;; +1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;; +1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;; +10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;; +10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;; +10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;; +10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;; +10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;; +10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;; +10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;; +10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;; +10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;; +10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;; +1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;; +1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;; +1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;; +1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;; +1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;; +10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;; +10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;; +10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;; +10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;; +10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;; +10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;; +10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;; +10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;; +10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;; +1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;; +1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;; +1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;; +1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;; +1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;; +10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;; +10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;; +10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;; +10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;; +10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;; +10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;; +10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;; +1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;; +1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;; +1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; +1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; +1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; +1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; +10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; +10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; +10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; +10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;; +10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;; +10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;; +10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;; +10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;; +10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;; +10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;; +1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;; +1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;; +1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;; +1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;; +1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;; +1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;Faliscan;;; +10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;; +10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;; +10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;; +10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;; +10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;; +10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;; +10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;; +10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;Faliscan;;; +10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;; +10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;; +1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;; +1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;Umbrian;;; +1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;; +1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;; +1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;; +10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;; +10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;; +10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;; +10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;; +10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;; +10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;; +10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;; +10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;; +10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;; +10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;; +10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;; +10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;; +10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;; +10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;; +1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;; +1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;; +1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;; +1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;; +1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; +1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; +10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; +10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; +10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; +10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; +10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;; +10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;; +10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; +10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; +10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; +10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; +10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; +10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; +10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;; +10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;; +10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;; +10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;; +10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;; +10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;; +10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;; +1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;; +1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;; +1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;; +1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;; +1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;; +1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;; +10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;; +10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;; +10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;; +10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;; +10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;; +10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;; +10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;; +10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;; +10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;; +10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;; +1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;; +1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;; +1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; +1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; +1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; +10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; +10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; +10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; +10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B; +10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C; +10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D; +10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E; +10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F; +10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430; +10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431; +1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432; +1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433; +1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434; +1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435; +1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436; +1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437; +10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438; +10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439; +10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A; +10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B; +10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C; +10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D; +10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E; +10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F; +10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440; +10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441; +1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442; +1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443; +1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444; +1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445; +1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446; +1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447; +10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448; +10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449; +10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A; +10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B; +10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C; +10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D; +10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E; +10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; +10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 +10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401 +1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402 +1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403 +1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404 +1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405 +1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406 +1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407 +10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408 +10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409 +10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A +10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B +10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C +10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D +10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E +10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F +10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410 +10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411 +1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412 +1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413 +1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414 +1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415 +1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416 +1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417 +10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418 +10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419 +10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A +10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B +10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C +10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D +10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E +10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F +10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420 +10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421 +1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422 +1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423 +1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424 +1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425 +1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426 +1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 +10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; +10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;; +10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;; +10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;; +10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;; +10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;; +10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;; +10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;; +10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;; +10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;; +1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;; +1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;; +1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;; +1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;; +1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;; +1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;; +10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;; +10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;; +10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;; +10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;; +10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;; +10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;; +10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;; +10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;; +10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;; +10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;; +1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;; +1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;; +1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;; +1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;; +1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;; +1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;; +10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;; +10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;; +10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;; +10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;; +10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;; +10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;; +10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;; +10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;; +10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;; +10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;; +1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;; +1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;; +1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;; +1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;; +1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;; +1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;; +10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;; +10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;; +10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;; +10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;; +10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;; +10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;; +10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;; +10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;; +10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;; +10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;; +1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;; +1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;; +1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;; +1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;; +1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;; +1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;; +10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;; +10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;; +10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;; +10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;; +10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;; +10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;; +10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;; +10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;; +10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;; +10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;; +1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;; +1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;; +1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;; +1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;; +104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; +10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; +10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; +10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;; +10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;; +10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;; +10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;; +1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;; +1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;; +1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;; +1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;; +1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;; +1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;; +10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;; +10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;; +10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;; +10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;; +10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;; +10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;; +10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;; +10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;; +10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;; +10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;; +1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;; +1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;; +1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;; +1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;; +1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;; +1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;; +10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;; +10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;; +10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;; +10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;; +10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;; +10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;; +10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;; +10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;; +10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;; +10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;; +1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;; +1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;; +1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;; +1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;; +1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;; +1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;; +10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;; +10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;; +10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;; +10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;; +10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;; +10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;; +10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;; +10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; +1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; +1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;; +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;; +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;; +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;; +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; +1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; +1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; +1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; +1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;; +1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;; +1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;; +1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;; +1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;; +1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;; +1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;; +1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;; +1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;; +1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;; +1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;; +1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;; +1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;; +1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;; +1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;; +1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;; +1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;; +1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;; +1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;; +1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;; +1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;; +1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;; +1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;; +1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;; +1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;; +1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;; +1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;; +1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;; +1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;; +1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;; +1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;; +1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;; +1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;; +1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;; +1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;; +1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;; +1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;; +1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;; +1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;; +1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;; +1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;; +1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;; +1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;; +1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;; +1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;; +1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;; +1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;; +1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;; +1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;; +1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;; +1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;; +1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;; +1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;; +1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;; +1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;; +1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;; +1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;; +1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;; +1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;; +1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;; +1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;; +1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;; +1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;; +1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;; +1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;; +1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;; +1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;; +1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;; +1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;; +1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;; +1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;; +1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;; +1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;; +1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;; +1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;; +1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;; +1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;; +1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;; +1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;; +1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;; +1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;; +1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;; +1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;; +1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;; +1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;; +1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;; +1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;; +1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;; +1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;; +1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;; +1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;; +1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;; +1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;; +1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;; +1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;; +1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;; +1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;; +1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;; +1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;; +1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;; +1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;; +1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;; +1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;; +1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;; +1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;; +1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;; +1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;; +1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;; +1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;; +1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;; +1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;; +1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;; +1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;; +1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;; +1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;; +1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;; +1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;; +1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;; +1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;; +1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;; +1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;; +1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;; +1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;; +1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;; +1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;; +1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;; +1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;; +1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;; +1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;; +1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;; +1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;; +1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;; +1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;; +1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;; +1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;; +1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;; +1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;; +1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;; +1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;; +1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;; +1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;; +1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;; +1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; +1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;; +1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;; +1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;; +1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; +1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;; +1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;; +1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;; +1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;; +1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;; +1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;; +1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;; +1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;; +1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;; +1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;; +1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;; +1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;; +1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;; +1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;; +1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;; +1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;; +1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;; +1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;; +1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;; +1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; +1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; +1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;; +1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;; +1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;; +1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;; +1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;; +1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;; +1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;; +1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;; +1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;; +1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;; +1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;; +1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;; +1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;; +1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;; +1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;; +1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;; +1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;; +1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;; +1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;; +1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;; +1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;; +1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;; +1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;; +1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;; +1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;; +1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;; +1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;; +1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;; +1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;; +1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;; +1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;; +1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;; +1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;; +1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;; +1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; +1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; +1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; +1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; +1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; +1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; +1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; +1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; +1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;; +1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;; +1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;; +1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;; +1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;; +1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;; +1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;; +1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;; +1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;; +1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;; +1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;; +1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;; +1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;; +1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;; +1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;; +1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;; +1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;; +1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;; +1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;; +1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;; +1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;; +1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;; +1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;; +1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;; +1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;; +1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;; +1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;; +1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;; +1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;; +1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;; +1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;; +1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;; +1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;; +1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;; +1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;; +1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;; +1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;; +1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;; +1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;; +1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;; +1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;; +1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;; +1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;; +1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;; +1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;; +1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;; +1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;; +1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;; +1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;; +1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;; +1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;; +1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;; +1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;; +1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;; +1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;; +1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;; +1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;; +1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;; +1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;; +1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;; +1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;; +1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;; +1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;; +1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; +1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; +1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; +1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; +1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; +1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;; +1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;; +1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;; +1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;; +1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;; +1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;; +1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;; +1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;; +1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;; +1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;; +1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;; +1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;; +1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;; +1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;; +1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;; +1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;; +1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;; +1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;; +1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;; +1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;; +1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;; +1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;; +1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;; +1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;; +1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;; +1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;; +1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;; +1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;; +1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;; +1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; +1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; +1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;; +1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;; +1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; +1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; +1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;; +1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;; +1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;; +1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;; +1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;; +1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;; +1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;; +1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;; +1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;; +1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;; +1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;; +1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;; +1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;; +1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;; +1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;; +1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;; +1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;; +1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;; +1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;; +1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;; +1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;; +1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;; +1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;; +1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;; +1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;; +1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;; +1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;; +1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;; +1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;; +1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;; +1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;; +1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;; +1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;; +1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;; +1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;; +1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;; +1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;; +1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;; +1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;; +1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;; +1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;; +1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;; +1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;; +1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;; +1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;; +1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;; +1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;; +1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;; +1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;; +1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;; +1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;; +1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;; +1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;; +1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;; +1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;; +1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;; +1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;; +1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;; +1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;; +1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;; +1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;; +1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;; +1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;; +1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;; +1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;; +1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;; +1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;; +1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;; +1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;; +1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;; +1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;; +1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;; +1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;; +1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;; +1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;; +1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;; +1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;; +1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;; +1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;; +1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;; +1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;; +1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;; +1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;; +1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;; +1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;; +1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;; +1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;; +1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;; +1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;; +1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;; +1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;; +1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;; +1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;; +1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;; +1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;; +1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;; +1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;; +1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;; +1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;; +1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;; +1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;; +1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;; +1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;; +1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;; +1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;; +1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;; +1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;; +1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;; +1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;; +1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;; +1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; +1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; +1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; +1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; +1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; +1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; +1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;; +1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;; +1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;; +1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;; +1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;; +1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;; +1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;; +1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;; +1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;; +1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;; +1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;; +1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;; +1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;; +1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;; +1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; +1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; +1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;; +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;; +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;; +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;; +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;; +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;; +1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; +1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; +1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; +1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;; +1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;; +1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;; +1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;; +1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; +1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;; +1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;; +1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;; +1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;; +1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; +1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;; +1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;; +1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;; +1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;; +1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; +1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; +1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;; +1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;; +1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;; +1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;; +1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;; +1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;; +1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;; +1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;; +1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;; +1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;; +1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;; +1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;; +1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;; +1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;; +1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;; +1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;; +1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;; +1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;; +1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;; +1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;; +1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;; +1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;; +1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;; +1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;; +1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;; +1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;; +1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;; +1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;; +1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;; +1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;; +1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;; +1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;; +1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;; +1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;; +1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;; +1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;; +1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;; +1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;; +1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;; +1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;; +1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;; +1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;; +1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;; +1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;; +1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;; +1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;; +1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;; +1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;; +1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;; +1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;; +1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;; +1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;; +1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;; +1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;; +1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;; +1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;; +1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;; +1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;; +1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; +1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; +1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; +1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; +1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; +1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; +1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;; +1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;; +1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;; +1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;; +1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;; +1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;; +1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;; +1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;; +1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;; +1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;; +1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;; +1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;; +1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;; +1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;; +1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;; +1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;; +1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;; +1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;; +1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;; +1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;; +1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;; +1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;; +1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;; +1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;; +1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;; +1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;; +1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;; +1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; +1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;; +1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;; +1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;; +1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;; +1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; +1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;; +1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;; +1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;; +1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;; +1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; +1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;; +1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;; +1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;; +1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;; +1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;; +1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;; +1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;; +1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;; +1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; +1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; +1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;; +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;; +1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; +1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; +1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; +1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; +1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; +1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; +1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; +1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; +1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; +1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; +1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; +1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; +1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; +1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; +1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; +1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; +1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; +1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; +1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; +1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; +1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; +1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; +1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; +1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; +1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; +1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; +1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; +1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; +1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; +1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; +1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; +1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; +1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; +1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; +1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; +1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; +1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; +1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; +1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; +1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; +1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; +1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; +1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; +1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; +1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; +1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; +1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; +1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; +1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; +1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; +1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; +1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; +1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; +1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; +1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; +1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; +1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; +1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; +1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; +1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; +1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; +1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; +1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; +1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; +1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; +1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; +1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; +1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; +1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; +1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; +1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; +1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; +1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; +1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; +1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; +1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; +1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; +1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; +1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; +1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; +1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; +1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; +1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; +1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; +1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; +1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; +1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; +1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; +1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; +1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; +1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; +1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; +1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; +1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; +1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; +1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; +1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; +1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; +1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; +1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; +1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; +1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; +1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; +1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; +1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; +1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; +1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; +1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; +1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; +1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; +1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; +1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; +1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; +1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; +1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; +1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; +1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; +1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; +1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; +1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; +1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; +1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; +1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; +1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; +1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; +1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; +1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; +1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; +1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; +1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; +1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; +1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; +1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; +1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; +1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; +1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; +1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; +1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; +1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; +1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; +1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; +1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; +1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; +1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; +1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; +1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; +1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; +1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; +1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; +1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; +1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; +1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; +1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; +1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; +1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; +1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; +1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; +1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; +1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; +1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; +1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; +1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; +1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; +1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; +1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; +1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; +1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; +1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; +1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; +1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; +1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; +1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; +1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; +1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; +1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; +1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; +1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; +1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; +1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; +1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; +1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; +1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; +1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; +1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; +1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; +1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; +1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; +1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; +1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; +1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; +1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; +1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; +1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; +1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; +1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; +1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; +1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; +1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; +1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; +1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; +1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; +1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; +1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; +1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; +1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; +1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; +1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; +1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; +1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; +1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; +1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; +1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; +1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; +1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; +1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; +1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; +1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; +1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; +1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; +1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; +1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; +1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; +1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; +1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;; +1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;; +1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;; +1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;; +1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;; +1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;; +1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;; +1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;; +1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;; +1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;; +1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;; +1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;; +1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; +1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;; +1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;; +1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;; +1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;; +1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;; +1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;; +1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;; +1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;; +1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;; +1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;; +1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;; +1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;; +1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; +1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;; +1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;; +1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;; +1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;; +1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;; +1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;; +1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;; +1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;; +1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;; +1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;; +1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;; +1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;; +1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; +1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;; +1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;; +1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;; +1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;; +1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;; +1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;; +1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; +1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; +1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; +1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; +1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; +1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; +1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; +1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; +1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;; +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;; +1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; +1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; +1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; +1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; +1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; +1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; +1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; +1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; +1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; +1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; +1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; +1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; +1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; +1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; +1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; +1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; +1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; +1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; +1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; +1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; +1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; +1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; +1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; +1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; +1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; +1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; +1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; +1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; +1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; +1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; +1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; +1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; +1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; +1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; +1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; +1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; +1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; +1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; +1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; +1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;; +1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;; +1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;; +1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;; +1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; +1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; +1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;; +2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;; +2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; +2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; +2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; +2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;; +2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;; +2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;; +2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;; +2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;; +2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;; +2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;; +2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;; +2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;; +2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;; +2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;; +2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;; +2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;; +2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;; +2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;; +2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;; +2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;; +2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;; +2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;; +2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;; +2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;; +2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;; +2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;; +2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;; +2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;; +2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;; +2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;; +2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;; +2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;; +2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;; +2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;; +2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;; +2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;; +2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;; +2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;; +2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;; +2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;; +2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;; +2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;; +2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;; +2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;; +2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;; +2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;; +2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;; +2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;; +2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;; +2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;; +2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;; +2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;; +2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;; +2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;; +2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;; +2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;; +2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;; +2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;; +2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;; +2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;; +2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;; +2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;; +2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;; +2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;; +2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;; +2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;; +2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;; +2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;; +2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;; +2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;; +2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;; +2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;; +2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;; +2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;; +2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;; +2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;; +2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;; +2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;; +2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;; +2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;; +2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;; +2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;; +2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;; +2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;; +2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;; +2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;; +2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;; +2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;; +2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;; +2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;; +2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;; +2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;; +2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;; +2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;; +2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;; +2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;; +2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;; +2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;; +2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;; +2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;; +2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;; +2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;; +2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;; +2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;; +2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;; +2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;; +2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;; +2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;; +2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;; +2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;; +2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;; +2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;; +2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;; +2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;; +2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;; +2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;; +2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;; +2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;; +2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;; +2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;; +2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;; +2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;; +2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;; +2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;; +2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;; +2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;; +2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;; +2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;; +2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;; +2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;; +2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;; +2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;; +2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;; +2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;; +2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;; +2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;; +2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;; +2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;; +2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;; +2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;; +2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;; +2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; +2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; +2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; +2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;; +2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; +2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; +2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; +2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;; +2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;; +2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;; +2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;; +2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;; +2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;; +2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;; +2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;; +2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;; +2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;; +2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;; +2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;; +2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;; +2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;; +2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;; +2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;; +2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;; +2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;; +2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;; +2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;; +2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;; +2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;; +2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;; +2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;; +2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;; +2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;; +2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;; +2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;; +2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;; +2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;; +2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;; +2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;; +2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;; +2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;; +2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;; +2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;; +2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;; +2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;; +2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;; +2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;; +2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;; +2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;; +2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;; +2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;; +2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;; +2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;; +2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;; +2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;; +2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;; +2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;; +2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;; +2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;; +2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;; +2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;; +2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;; +2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;; +2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;; +2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;; +2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;; +2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;; +2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;; +2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;; +2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;; +2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;; +2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;; +2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;; +2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;; +2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;; +2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;; +2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;; +2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;; +2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;; +2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;; +2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;; +2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;; +2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;; +2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;; +2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;; +2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;; +2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;; +2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;; +2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;; +2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;; +2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;; +2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;; +2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;; +2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;; +2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;; +2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;; +2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;; +2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;; +2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;; +2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;; +2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;; +2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;; +2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;; +2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;; +2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;; +2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;; +2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;; +2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;; +2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;; +2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;; +2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;; +2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;; +2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;; +2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;; +2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;; +2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;; +2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;; +2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;; +2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;; +2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;; +2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;; +2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;; +2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;; +2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;; +2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;; +2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;; +2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;; +2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;; +2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;; +2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;; +2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;; +2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;; +2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;; +2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;; +2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;; +2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;; +2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;; +2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;; +2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;; +2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;; +2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;; +2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;; +2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;; +2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;; +2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;; +2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;; +2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;; +2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;; +2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;; +2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;; +2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;; +2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;; +2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;; +2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;; +2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;; +2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;; +2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;; +2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;; +2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;; +2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;; +2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;; +2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;; +2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;; +2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;; +2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;; +2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;; +2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;; +2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;; +2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;; +2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;; +2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;; +2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;; +2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;; +2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;; +2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;; +2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;; +2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;; +2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;; +2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;; +2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;; +2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;; +2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;; +2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;; +2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;; +2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;; +2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;; +2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;; +2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;; +2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;; +2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;; +2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;; +2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;; +2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;; +2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;; +2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;; +2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;; +2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;; +2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;; +2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;; +2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;; +2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;; +2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;; +2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;; +2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;; +2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;; +2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;; +2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;; +2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;; +2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;; +2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;; +2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;; +2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;; +2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;; +2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;; +2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;; +2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;; +2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;; +2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;; +2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;; +2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;; +2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;; +2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;; +2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;; +2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;; +2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;; +2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;; +2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;; +2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;; +2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;; +2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;; +2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;; +2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;; +2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;; +2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;; +2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;; +2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;; +2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;; +2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;; +2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;; +2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;; +2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;; +2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;; +2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;; +2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;; +2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;; +2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;; +2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;; +2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;; +2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;; +2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;; +2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;; +2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;; +2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;; +2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;; +2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;; +2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;; +2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;; +2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;; +2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;; +2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;; +2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;; +2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;; +2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;; +2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;; +2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;; +2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;; +2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;; +2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;; +2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;; +2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;; +2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;; +2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;; +2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;; +2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;; +2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;; +2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;; +2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;; +2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;; +2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;; +2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;; +2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;; +2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;; +2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;; +2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;; +2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;; +2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;; +2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;; +2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;; +2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;; +2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;; +2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;; +2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;; +2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;; +2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;; +2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;; +2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;; +2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;; +2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;; +2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;; +2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;; +2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;; +2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;; +2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;; +2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;; +2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;; +2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;; +2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;; +2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;; +2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;; +2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;; +2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;; +2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;; +2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;; +2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;; +2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;; +2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;; +2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;; +2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;; +2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;; +2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;; +2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;; +2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;; +2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;; +2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;; +2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;; +2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;; +2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;; +2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;; +2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;; +2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;; +2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;; +2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;; +2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;; +2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;; +2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;; +2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;; +2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;; +2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;; +2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;; +2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;; +2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;; +2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;; +2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;; +2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;; +2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;; +2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;; +2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;; +2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;; +2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;; +2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;; +2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;; +2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;; +2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;; +2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;; +2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;; +2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;; +2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;; +2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;; +2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;; +2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;; +2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;; +2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;; +2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;; +2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;; +2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;; +2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;; +2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;; +2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;; +2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;; +2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;; +2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;; +2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;; +2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;; +2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;; +2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;; +2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;; +2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;; +2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;; +2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;; +2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;; +2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;; +2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;; +2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;; +2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;; +2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;; +2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;; +2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;; +2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;; +2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;; +2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;; +2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;; +2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;; +2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;; +2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;; +2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;; +2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;; +2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;; +2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;; +2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;; +2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;; +2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; +E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; +E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; +E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; +E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;; +E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;; +E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;; +E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;; +E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;; +E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;; +E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;; +E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;; +E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;; +E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;; +E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;; +E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;; +E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;; +E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;; +E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;; +E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;; +E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;; +E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;; +E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;; +E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;; +E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;; +E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;; +E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;; +E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;; +E003A;TAG COLON;Cf;0;BN;;;;;N;;;;; +E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;; +E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;; +E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;; +E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;; +E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;; +E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;; +E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;; +E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;; +E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;; +E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;; +E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;; +E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;; +E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;; +E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;; +E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;; +E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;; +E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;; +E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;; +E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;; +E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;; +E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;; +E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;; +E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;; +E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;; +E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;; +E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;; +E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;; +E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;; +E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;; +E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;; +E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;; +E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;; +E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; +E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;; +E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; +E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;; +E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;; +E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;; +E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;; +E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;; +E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;; +E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;; +E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;; +E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;; +E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;; +E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;; +E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;; +E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;; +E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;; +E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;; +E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;; +E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;; +E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;; +E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;; +E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;; +E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;; +E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;; +E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;; +E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;; +E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;; +E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;; +E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;; +E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;; +E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;; +E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; +E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;; +E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; +E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;; +E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;; +E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;; +E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;; +E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;; +E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;; +E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;; +E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;; +E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;; +E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;; +E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;; +E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;; +E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;; +E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;; +E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;; +E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;; +E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;; +E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;; +E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;; +E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;; +E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;; +E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;; +E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;; +E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;; +E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;; +E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;; +E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;; +E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;; +E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;; +E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;; +E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;; +E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;; +E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;; +E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;; +E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;; +E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;; +E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;; +E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;; +E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;; +E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;; +E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;; +E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;; +E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;; +E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;; +E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;; +E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;; +E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;; +E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;; +E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;; +E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;; +E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;; +E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;; +E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;; +E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;; +E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;; +E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;; +E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;; +E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;; +E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;; +E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;; +E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;; +E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;; +E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;; +E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;; +E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;; +E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;; +E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;; +E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;; +E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;; +E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;; +E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;; +E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;; +E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;; +E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;; +E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;; +E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;; +E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;; +E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;; +E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;; +E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;; +E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;; +E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;; +E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;; +E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;; +E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;; +E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;; +E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;; +E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;; +E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;; +E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;; +E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;; +E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;; +E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;; +E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;; +E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;; +E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;; +E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;; +E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;; +E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;; +E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;; +E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;; +E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;; +E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;; +E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;; +E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;; +E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;; +E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;; +E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;; +E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;; +E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;; +E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;; +E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;; +E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;; +E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;; +E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;; +E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;; +E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;; +E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;; +E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;; +E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;; +E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;; +E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;; +E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;; +E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;; +E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;; +E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;; +E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;; +E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;; +E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;; +E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;; +E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;; +E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;; +E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;; +E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;; +E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;; +E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;; +E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;; +E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;; +E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;; +E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;; +E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;; +E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;; +E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;; +E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;; +E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;; +E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;; +E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;; +E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;; +E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;; +E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;; +E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;; +E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;; +E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;; +E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;; +E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;; +E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;; +E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;; +E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;; +E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;; +E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;; +E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;; +E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;; +E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;; +E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;; +E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;; +E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;; +E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;; +E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;; +E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;; +E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;; +E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;; +E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;; +E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;; +E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;; +E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;; +E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;; +E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;; +E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;; +E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;; +E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;; +E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;; +E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;; +E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;; +E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;; +E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;; +E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;; +E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;; +E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;; +E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;; +E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;; +E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;; +E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;; +E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;; +E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;; +E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;; +E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;; +E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;; +E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;; +E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;; +E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;; +E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;; +E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;; +E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;; +E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;; +E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;; +E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;; +E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;; +E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;; +E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;; +E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;; +E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;; +E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;; +E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;; +E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;; +E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;; +E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;; +E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;; +E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;; +E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;; +E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;; +E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;; +E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;; +E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;; +E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;; +E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;; +E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;; +E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;; +E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;; +E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;; +E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;; +E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;; +E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;; +E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;; +E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;; +E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;; +E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;; +E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;; +E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;; +E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;; +E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;; +E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;; +E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;; +F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;; +FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;; +100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;; +10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;; diff --git a/icuSources/data/unidata/changes.txt b/icuSources/data/unidata/changes.txt index a406c3f6..f1c4b0a5 100644 --- a/icuSources/data/unidata/changes.txt +++ b/icuSources/data/unidata/changes.txt @@ -1,3 +1,205 @@ +* Copyright (C) 2004-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +* file name: changes.txt +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004may06 +* created by: Markus W. Scherer +* +* change log for Unicode updates + +---------------------------------------------------------------------------- *** + +Unicode 5.0 update + +*** related Jitterbugs + +5084 RFE: Update to Unicode 5.0 + +*** data files & enums & parser code + +* file preparation +- ucdstrip: + DerivedCoreProperties.txt + DerivedNormalizationProps.txt + NormalizationTest.txt + PropList.txt + Scripts.txt + GraphemeBreakProperty.txt + SentenceBreakProperty.txt + WordBreakProperty.txt +- ucdstrip and ucdmerge: + EastAsianWidth.txt + LineBreak.txt + +* my ucd2unidata.txt (needs to be updated each time with UCD and file version numbers) +copy 5.0.0\ucd\BidiMirroring.txt ..\unidata\ +copy 5.0.0\ucd\Blocks.txt ..\unidata\ +copy 5.0.0\ucd\CaseFolding.txt ..\unidata\ +copy 5.0.0\ucd\DerivedAge.txt ..\unidata\ +copy 5.0.0\ucd\extracted\DerivedBidiClass.txt ..\unidata\ +copy 5.0.0\ucd\extracted\DerivedJoiningGroup.txt ..\unidata\ +copy 5.0.0\ucd\extracted\DerivedJoiningType.txt ..\unidata\ +copy 5.0.0\ucd\extracted\DerivedNumericValues.txt ..\unidata\ +copy 5.0.0\ucd\NormalizationCorrections.txt ..\unidata\ +copy 5.0.0\ucd\PropertyAliases.txt ..\unidata\ +copy 5.0.0\ucd\PropertyValueAliases.txt ..\unidata\ +copy 5.0.0\ucd\SpecialCasing.txt ..\unidata\ +copy 5.0.0\ucd\UnicodeData.txt ..\unidata\ + +ucdstrip < 5.0.0\ucd\DerivedCoreProperties.txt > ..\unidata\DerivedCoreProperties.txt +ucdstrip < 5.0.0\ucd\DerivedNormalizationProps.txt > ..\unidata\DerivedNormalizationProps.txt +ucdstrip < 5.0.0\ucd\NormalizationTest.txt > ..\unidata\NormalizationTest.txt +ucdstrip < 5.0.0\ucd\PropList.txt > ..\unidata\PropList.txt +ucdstrip < 5.0.0\ucd\Scripts.txt > ..\unidata\Scripts.txt +ucdstrip < 5.0.0\ucd\auxiliary\GraphemeBreakProperty.txt > ..\unidata\GraphemeBreakProperty.txt +ucdstrip < 5.0.0\ucd\auxiliary\SentenceBreakProperty.txt > ..\unidata\SentenceBreakProperty.txt +ucdstrip < 5.0.0\ucd\auxiliary\WordBreakProperty.txt > ..\unidata\WordBreakProperty.txt +ucdstrip < 5.0.0\ucd\EastAsianWidth.txt | ucdmerge > ..\unidata\EastAsianWidth.txt +ucdstrip < 5.0.0\ucd\LineBreak.txt | ucdmerge > ..\unidata\LineBreak.txt + +* update FractionalUCA.txt and UCARules.txt with new canonical closure + +* genpname +- run preparse.pl + + make sure that data.h is writable + + perl preparse.pl \cvs\oss\icu > out.txt + +* uchar.h & uscript.h & uprops.h & uprops.c & genprops +- new block & script values + + script values already added in ICU 3.6 because all of ISO 15924 is now covered + +* build Unicode data source code for hardcoding core data +C:\cvs\oss\icu\source\data>NMAKE /f makedata.mak ICUMAKE=\cvs\oss\icu\source\data\ CFG=debug uni-core-data + +ICU data make path is \cvs\oss\icu\source\data\ +ICU root path is \cvs\oss\icu +Information: cannot find "ucmlocal.mk". Not building user-additional converter files. +[etc.] +Creating data file for Unicode Character Properties +Creating data file for Unicode Case Mapping Properties +Creating data file for Unicode BiDi/Shaping Properties +Creating data file for Unicode Normalization +Unicode .icu files built to "\cvs\oss\icu\source\data\out\build\icudt35l" +Unicode .c source files built to "\cvs\oss\icu\source\data\out\tmp" + +- copy the .c source files to C:\cvs\oss\icu\source\common + and rebuild the common library + +*** Unicode version numbers +- makedata.mak +- uchar.h +- configure.in + +*** LayoutEngine script information +* Run ICU4J com.ibm.icu.dev.tool.layout.ScriptNameBuilder. This generates LEScripts.h, LELanguage.h, +ScriptAndLanguageTags.h and ScriptAndLanguageTags.cpp in the working directory. (it also generates +ScriptRunData.cpp, which is no longer needed.) + +The generated files have a current copyright date and "@draft" statement. + +* copy the above files into <icu>/source/layout, replacing the old files. + +Add new default entries to the indicClassTables array in <icu>/source/layout/IndicClassTables.cpp +and the complexTable array in <icu>/source/layoutex/ParagraphLayout.cpp. (This step should be automated...) + +* rebuild the layout and layoutex libraries. + +---------------------------------------------------------------------------- *** + +Unicode 4.1 update + +*** related Jitterbugs + +4332 RFE: Update to Unicode 4.1 +4157 RBBI, TR29 4.1 updates + +*** data files & enums & parser code + +* file preparation +- ucdstrip: + DerivedCoreProperties.txt + DerivedNormalizationProps.txt + NormalizationTest.txt + GraphemeBreakProperty.txt + SentenceBreakProperty.txt + WordBreakProperty.txt +- ucdstrip and ucdmerge: + EastAsianWidth.txt + LineBreak.txt + +* add new files to the repository + GraphemeBreakProperty.txt + SentenceBreakProperty.txt + WordBreakProperty.txt + +* update FractionalUCA.txt and UCARules.txt with new canonical closure + +* genpname +- handle new enumerated properties in sub read_uchar +- run preparse.pl + +* uchar.h & uscript.h & uprops.h & uprops.c & genprops +- new binary properties + + Pattern_Syntax + + Pattern_White_Space +- new enumerated properties + + Grapheme_Cluster_Break + + Sentence_Break + + Word_Break +- new block & script & line break values + +* gencase +- case-ignorable changes + see http://www.unicode.org/versions/Unicode4.1.0/#CaseMods + now: (D47a) Word_Break=MidLetter or Mn, Me, Cf, Lm, Sk + +*** Unicode version numbers +- makedata.mak +- uchar.h +- configure.in + +*** tests +- verify that u_charMirror() round-trips +- test all new properties and some new values of old properties + +*** other code + +* hardcoded Unihan range end/limit +- Unihan range end moves from 9FA5 to 9FBB + search for both 9FA5 (end) and 9FA6 (limit) (regex 9FA[56], case-insensitive) + + do not modify BOCU/BOCSU code because that would change the encoding + and break binary compatibility! + + similarly, do not change the GB 18030 range data (ucnvmbcs.c), + NamePrepProfile.txt + + ignore trietest.c: test data is arbitrary + + ignore tstnorm.cpp: test optimization, not important + + ignore collation: 9FA[56] only appears in comments; swapCJK() uses the whole block up to 9FFF + + do change line_th.txt and word_th.txt + by replacing hardcoded ranges with the new property values + + do change gennames.c + +source\data\brkitr\line_th.txt(229): \u33E0-\u33FE \u3400-\u4DB5 \u4E00-\u9FA5 \uA000-\uA48C \uA490-\uA4C6 +source\data\brkitr\word_th.txt(23): \u33E0-\u33FE \u3400-\u4DB5 \u4E00-\u9FA5 \uA000-\uA48C \uA490-\uA4C6 +source\tools\gennames\gennames.c(971): 0x4e00, 0x9fa5, + +* case mappings +- compare new special casing context conditions with previous ones + see http://www.unicode.org/versions/Unicode4.1.0/#CaseMods + +* genpname +- consider storing only the short name if it is the same as the long name + +*** other reviews +- UAX #29 changes (grapheme/word/sentence breaks) +- UAX #14 changes (line breaks) +- Pattern_Syntax & Pattern_White_Space + +---------------------------------------------------------------------------- *** + Unicode 4.0.1 update *** related Jitterbugs diff --git a/icuSources/data/xml/brkitr/en.xml b/icuSources/data/xml/brkitr/en.xml new file mode 100644 index 00000000..02ce3395 --- /dev/null +++ b/icuSources/data/xml/brkitr/en.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:41 $"/> + <language type="en"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/brkitr/en_US.xml b/icuSources/data/xml/brkitr/en_US.xml new file mode 100644 index 00000000..99f7f58c --- /dev/null +++ b/icuSources/data/xml/brkitr/en_US.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:41 $"/> + <language type="en"/> + <territory type="US"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/brkitr/en_US_POSIX.xml b/icuSources/data/xml/brkitr/en_US_POSIX.xml new file mode 100644 index 00000000..d3a957f3 --- /dev/null +++ b/icuSources/data/xml/brkitr/en_US_POSIX.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:41 $"/> + <language type="en"/> + <territory type="US"/> + <variant type="POSIX"/> + </identity> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:breakIteratorData> + <icu:boundaries> + <icu:word icu:dependency="word_POSIX.brk"/> + </icu:boundaries> + </icu:breakIteratorData> + </special> +</ldml> + diff --git a/icuSources/data/xml/brkitr/ja.xml b/icuSources/data/xml/brkitr/ja.xml new file mode 100644 index 00000000..3a8b0362 --- /dev/null +++ b/icuSources/data/xml/brkitr/ja.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:41 $"/> + <language type="ja"/> + </identity> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:breakIteratorData> + <icu:boundaries> + <icu:word icu:dependency="word_ja.brk"/> + </icu:boundaries> + </icu:breakIteratorData> + </special> +</ldml> + diff --git a/icuSources/data/xml/brkitr/root.xml b/icuSources/data/xml/brkitr/root.xml new file mode 100644 index 00000000..afece5bb --- /dev/null +++ b/icuSources/data/xml/brkitr/root.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:41 $"/> + <language type="root"/> + </identity> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:breakIteratorData> + <icu:boundaries> + <icu:grapheme icu:dependency="char.brk"/> + <icu:word icu:dependency="word.brk"/> + <icu:line icu:dependency="line.brk"/> + <icu:sentence icu:dependency="sent.brk"/> + <icu:title icu:dependency="title.brk"/> + </icu:boundaries> + <icu:dictionaries> + <icu:dictionary type="Thai" icu:dependency="thaidict.ctd"/> + </icu:dictionaries> + </icu:breakIteratorData> + </special> +</ldml> + diff --git a/icuSources/data/xml/collation/ar.xml b/icuSources/data/xml/collation/ar.xml new file mode 100644 index 00000000..7a7ad781 --- /dev/null +++ b/icuSources/data/xml/collation/ar.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="ar"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/be.xml b/icuSources/data/xml/collation/be.xml new file mode 100644 index 00000000..845c178e --- /dev/null +++ b/icuSources/data/xml/collation/be.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="be"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/bg.xml b/icuSources/data/xml/collation/bg.xml new file mode 100644 index 00000000..2867d603 --- /dev/null +++ b/icuSources/data/xml/collation/bg.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="bg"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ca.xml b/icuSources/data/xml/collation/ca.xml new file mode 100644 index 00000000..723ae2a6 --- /dev/null +++ b/icuSources/data/xml/collation/ca.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="ca"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/cs.xml b/icuSources/data/xml/collation/cs.xml new file mode 100644 index 00000000..46ea4dc0 --- /dev/null +++ b/icuSources/data/xml/collation/cs.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="cs"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/da.xml b/icuSources/data/xml/collation/da.xml new file mode 100644 index 00000000..8bc472bd --- /dev/null +++ b/icuSources/data/xml/collation/da.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="da"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/de.xml b/icuSources/data/xml/collation/de.xml new file mode 100644 index 00000000..356027f8 --- /dev/null +++ b/icuSources/data/xml/collation/de.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="de"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/dz.xml b/icuSources/data/xml/collation/dz.xml new file mode 100644 index 00000000..99a0a32c --- /dev/null +++ b/icuSources/data/xml/collation/dz.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="dz"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/el.xml b/icuSources/data/xml/collation/el.xml new file mode 100644 index 00000000..f000d248 --- /dev/null +++ b/icuSources/data/xml/collation/el.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="el"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/en.xml b/icuSources/data/xml/collation/en.xml new file mode 100644 index 00000000..f91faf30 --- /dev/null +++ b/icuSources/data/xml/collation/en.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="en"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/en_BE.xml b/icuSources/data/xml/collation/en_BE.xml new file mode 100644 index 00000000..df0d37f7 --- /dev/null +++ b/icuSources/data/xml/collation/en_BE.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="en"/> + <territory type="BE"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/eo.xml b/icuSources/data/xml/collation/eo.xml new file mode 100644 index 00000000..0de3082b --- /dev/null +++ b/icuSources/data/xml/collation/eo.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="eo"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/es.xml b/icuSources/data/xml/collation/es.xml new file mode 100644 index 00000000..4222f99e --- /dev/null +++ b/icuSources/data/xml/collation/es.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="es"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/et.xml b/icuSources/data/xml/collation/et.xml new file mode 100644 index 00000000..11e93a6f --- /dev/null +++ b/icuSources/data/xml/collation/et.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="et"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/fa.xml b/icuSources/data/xml/collation/fa.xml new file mode 100644 index 00000000..74c89cca --- /dev/null +++ b/icuSources/data/xml/collation/fa.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="fa"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/fa_AF.xml b/icuSources/data/xml/collation/fa_AF.xml new file mode 100644 index 00000000..5b7c7565 --- /dev/null +++ b/icuSources/data/xml/collation/fa_AF.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="fa"/> + <territory type="AF"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/fi.xml b/icuSources/data/xml/collation/fi.xml new file mode 100644 index 00000000..adf02d13 --- /dev/null +++ b/icuSources/data/xml/collation/fi.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:42 $"/> + <language type="fi"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/fo.xml b/icuSources/data/xml/collation/fo.xml new file mode 100644 index 00000000..4b40981c --- /dev/null +++ b/icuSources/data/xml/collation/fo.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="fo"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/fr.xml b/icuSources/data/xml/collation/fr.xml new file mode 100644 index 00000000..5133064a --- /dev/null +++ b/icuSources/data/xml/collation/fr.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="fr"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/gu.xml b/icuSources/data/xml/collation/gu.xml new file mode 100644 index 00000000..0b4bdc55 --- /dev/null +++ b/icuSources/data/xml/collation/gu.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="gu"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/he.xml b/icuSources/data/xml/collation/he.xml new file mode 100644 index 00000000..d28c8bbd --- /dev/null +++ b/icuSources/data/xml/collation/he.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="he"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/hi.xml b/icuSources/data/xml/collation/hi.xml new file mode 100644 index 00000000..1081a0be --- /dev/null +++ b/icuSources/data/xml/collation/hi.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="hi"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/hr.xml b/icuSources/data/xml/collation/hr.xml new file mode 100644 index 00000000..54fea28b --- /dev/null +++ b/icuSources/data/xml/collation/hr.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="hr"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/hu.xml b/icuSources/data/xml/collation/hu.xml new file mode 100644 index 00000000..6e947957 --- /dev/null +++ b/icuSources/data/xml/collation/hu.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="hu"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/is.xml b/icuSources/data/xml/collation/is.xml new file mode 100644 index 00000000..df53795d --- /dev/null +++ b/icuSources/data/xml/collation/is.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="is"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/it.xml b/icuSources/data/xml/collation/it.xml new file mode 100644 index 00000000..bbdf4b5c --- /dev/null +++ b/icuSources/data/xml/collation/it.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="it"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ja.xml b/icuSources/data/xml/collation/ja.xml new file mode 100644 index 00000000..c0669bac --- /dev/null +++ b/icuSources/data/xml/collation/ja.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="ja"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/kk.xml b/icuSources/data/xml/collation/kk.xml new file mode 100644 index 00000000..22790e36 --- /dev/null +++ b/icuSources/data/xml/collation/kk.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="kk"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/kl.xml b/icuSources/data/xml/collation/kl.xml new file mode 100644 index 00000000..15c20d0c --- /dev/null +++ b/icuSources/data/xml/collation/kl.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="kl"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/kn.xml b/icuSources/data/xml/collation/kn.xml new file mode 100644 index 00000000..31529416 --- /dev/null +++ b/icuSources/data/xml/collation/kn.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="kn"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ko.xml b/icuSources/data/xml/collation/ko.xml new file mode 100644 index 00000000..adc3ec9d --- /dev/null +++ b/icuSources/data/xml/collation/ko.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="ko"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/lt.xml b/icuSources/data/xml/collation/lt.xml new file mode 100644 index 00000000..6991b080 --- /dev/null +++ b/icuSources/data/xml/collation/lt.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:43 $"/> + <language type="lt"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/lv.xml b/icuSources/data/xml/collation/lv.xml new file mode 100644 index 00000000..0e249171 --- /dev/null +++ b/icuSources/data/xml/collation/lv.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="lv"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/mk.xml b/icuSources/data/xml/collation/mk.xml new file mode 100644 index 00000000..7d44eb56 --- /dev/null +++ b/icuSources/data/xml/collation/mk.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="mk"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ml.xml b/icuSources/data/xml/collation/ml.xml new file mode 100644 index 00000000..d516fcd1 --- /dev/null +++ b/icuSources/data/xml/collation/ml.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="ml"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/collation/mr.xml b/icuSources/data/xml/collation/mr.xml new file mode 100644 index 00000000..54b40096 --- /dev/null +++ b/icuSources/data/xml/collation/mr.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="mr"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/mt.xml b/icuSources/data/xml/collation/mt.xml new file mode 100644 index 00000000..993a9776 --- /dev/null +++ b/icuSources/data/xml/collation/mt.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="mt"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/nb.xml b/icuSources/data/xml/collation/nb.xml new file mode 100644 index 00000000..47e1deca --- /dev/null +++ b/icuSources/data/xml/collation/nb.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="nb"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/nn.xml b/icuSources/data/xml/collation/nn.xml new file mode 100644 index 00000000..b401d063 --- /dev/null +++ b/icuSources/data/xml/collation/nn.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="nn"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/om.xml b/icuSources/data/xml/collation/om.xml new file mode 100644 index 00000000..cfed383b --- /dev/null +++ b/icuSources/data/xml/collation/om.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="om"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/or.xml b/icuSources/data/xml/collation/or.xml new file mode 100644 index 00000000..c9ff3909 --- /dev/null +++ b/icuSources/data/xml/collation/or.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="or"/> + </identity> +</ldml> diff --git a/icuSources/data/xml/collation/pa.xml b/icuSources/data/xml/collation/pa.xml new file mode 100644 index 00000000..ce9e9715 --- /dev/null +++ b/icuSources/data/xml/collation/pa.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="pa"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/pl.xml b/icuSources/data/xml/collation/pl.xml new file mode 100644 index 00000000..8a41bf6a --- /dev/null +++ b/icuSources/data/xml/collation/pl.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="pl"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ps.xml b/icuSources/data/xml/collation/ps.xml new file mode 100644 index 00000000..37350336 --- /dev/null +++ b/icuSources/data/xml/collation/ps.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="ps"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ro.xml b/icuSources/data/xml/collation/ro.xml new file mode 100644 index 00000000..f7516cfa --- /dev/null +++ b/icuSources/data/xml/collation/ro.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="ro"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/root.xml b/icuSources/data/xml/collation/root.xml new file mode 100644 index 00000000..b6c7fcb7 --- /dev/null +++ b/icuSources/data/xml/collation/root.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="root"/> + </identity> + <!-- + <special xmlns:icu="http://www.icu-project.org/"> + <icu:ucarules icu:uca_rules="../../ucarrules.txt"/> + <icu:depends icu:dependency="../invuca.icu"/> + <icu:depends icu:dependency="../invuca.icu"/> + </special> + --> +</ldml> + diff --git a/icuSources/data/xml/collation/ru.xml b/icuSources/data/xml/collation/ru.xml new file mode 100644 index 00000000..db1f6f2c --- /dev/null +++ b/icuSources/data/xml/collation/ru.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="ru"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/sh.xml b/icuSources/data/xml/collation/sh.xml new file mode 100644 index 00000000..eecfcebc --- /dev/null +++ b/icuSources/data/xml/collation/sh.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="sh"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/sk.xml b/icuSources/data/xml/collation/sk.xml new file mode 100644 index 00000000..77f8d517 --- /dev/null +++ b/icuSources/data/xml/collation/sk.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="sk"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/sl.xml b/icuSources/data/xml/collation/sl.xml new file mode 100644 index 00000000..5b0ee858 --- /dev/null +++ b/icuSources/data/xml/collation/sl.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="sl"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/sq.xml b/icuSources/data/xml/collation/sq.xml new file mode 100644 index 00000000..099a63a9 --- /dev/null +++ b/icuSources/data/xml/collation/sq.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="sq"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/sr.xml b/icuSources/data/xml/collation/sr.xml new file mode 100644 index 00000000..cd921106 --- /dev/null +++ b/icuSources/data/xml/collation/sr.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="sr"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/sv.xml b/icuSources/data/xml/collation/sv.xml new file mode 100644 index 00000000..4ecc475e --- /dev/null +++ b/icuSources/data/xml/collation/sv.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:44 $"/> + <language type="sv"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/ta.xml b/icuSources/data/xml/collation/ta.xml new file mode 100644 index 00000000..cdf3f4cf --- /dev/null +++ b/icuSources/data/xml/collation/ta.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="ta"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/te.xml b/icuSources/data/xml/collation/te.xml new file mode 100644 index 00000000..6b73a8c3 --- /dev/null +++ b/icuSources/data/xml/collation/te.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="te"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/th.xml b/icuSources/data/xml/collation/th.xml new file mode 100644 index 00000000..be6199ac --- /dev/null +++ b/icuSources/data/xml/collation/th.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="th"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/tr.xml b/icuSources/data/xml/collation/tr.xml new file mode 100644 index 00000000..dbc65f10 --- /dev/null +++ b/icuSources/data/xml/collation/tr.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="tr"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/uk.xml b/icuSources/data/xml/collation/uk.xml new file mode 100644 index 00000000..d1c93d90 --- /dev/null +++ b/icuSources/data/xml/collation/uk.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="uk"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/vi.xml b/icuSources/data/xml/collation/vi.xml new file mode 100644 index 00000000..dc6e49be --- /dev/null +++ b/icuSources/data/xml/collation/vi.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="vi"/> + </identity> + +</ldml> + diff --git a/icuSources/data/xml/collation/zh.xml b/icuSources/data/xml/collation/zh.xml new file mode 100644 index 00000000..4144292e --- /dev/null +++ b/icuSources/data/xml/collation/zh.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="zh"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/collation/zh_HK.xml b/icuSources/data/xml/collation/zh_HK.xml new file mode 100644 index 00000000..db7f9030 --- /dev/null +++ b/icuSources/data/xml/collation/zh_HK.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="zh"/> + <territory type="HK"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/collation/zh_Hant.xml b/icuSources/data/xml/collation/zh_Hant.xml new file mode 100644 index 00000000..378063f2 --- /dev/null +++ b/icuSources/data/xml/collation/zh_Hant.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="zh"/> + <script type="Hant"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/collation/zh_MO.xml b/icuSources/data/xml/collation/zh_MO.xml new file mode 100644 index 00000000..69d61aec --- /dev/null +++ b/icuSources/data/xml/collation/zh_MO.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="zh"/> + <territory type="MO"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/collation/zh_TW.xml b/icuSources/data/xml/collation/zh_TW.xml new file mode 100644 index 00000000..934c66e2 --- /dev/null +++ b/icuSources/data/xml/collation/zh_TW.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="zh"/> + <territory type="TW"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/collation/zh_TW_STROKE.xml b/icuSources/data/xml/collation/zh_TW_STROKE.xml new file mode 100644 index 00000000..548e20b0 --- /dev/null +++ b/icuSources/data/xml/collation/zh_TW_STROKE.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:45 $"/> + <language type="zh"/> + <territory type="TW"/> + <variant type="STROKE"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/experimental/aa.txt b/icuSources/data/xml/experimental/aa.txt new file mode 100644 index 00000000..53bba5e8 --- /dev/null +++ b/icuSources/data/xml/experimental/aa.txt @@ -0,0 +1,202 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/aa.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/aa.xml + */ +aa{ + Countries{ + BR{"Brazil"} + CN{"China"} + DE{"Germany"} + DJ{"Yabuuti"} + ER{"Eretria"} + ET{"Otobbia"} + FR{"France"} + GB{"United Kingdom"} + IN{"India"} + IT{"Italy"} + JP{"Japan"} + RU{"Russia"} + US{"United States"} + } + Currencies{ + BRL{ + "BRL", + "Brazilian Real", + } + CNY{ + "CNY", + "Chinese Yuan Renminbi", + } + DJF{ + "FD", + "DJF", + } + ERN{ + "$", + "ERN", + } + EUR{ + "€", + "Euro", + } + GBP{ + "£", + "British Pound Sterling", + } + INR{ + "=0#Rs.|1#Re.|1<Rs.", + "Indian Rupee", + } + JPY{ + "Â¥", + "Japanese Yen", + } + RUB{ + "RUB", + "Russian Ruble", + } + USD{ + "US$", + "US Dollar", + } + } + ExemplarCharacters{"[a-z]"} + Languages{ + aa{"Qafar"} + ar{"Arabic"} + de{"German"} + en{"English"} + es{"Spanish"} + fr{"French"} + hi{"Hindi"} + it{"Italian"} + ja{"Japanese"} + pt{"Portuguese"} + ru{"Russian"} + zh{"Chinese"} + } + LocaleScript{ + "Latn", + } + Scripts{ + Latn{"Latin"} + } + Version{"1.20"} + calendar{ + gregorian{ + AmPmMarkers{ + "saaku", + "carra", + } + DateTimeElements:intvector{ + 7, + 1, + } + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE, MMMM dd, yyyy", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Aca", + "Etl", + "Tal", + "Arb", + "Kam", + "Gum", + "Sab", + } + wide{ + "Acaada", + "Etleeni", + "Talaata", + "Arbaqa", + "Kamiisi", + "Gumqata", + "Sabti", + } + } + stand-alone{ + narrow{ + "A", + "E", + "T", + "A", + "K", + "G", + "S", + } + } + } + eras{ + abbreviated{ + "Yaasuusuk Duma", + "Yaasuusuk Wadir", + } + } + monthNames{ + format{ + abbreviated{ + "Qun", + "Nah", + "Cig", + "Agd", + "Cax", + "Qas", + "Qad", + "Leq", + "Way", + "Dit", + "Xim", + "Kax", + } + wide{ + "Qunxa Garablu", + "Naharsi Kudo", + "Ciggilta Kudo", + "Agda Baxisso", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Leqeeni", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu", + } + } + stand-alone{ + narrow{ + "Q", + "N", + "C", + "A", + "C", + "Q", + "Q", + "L", + "W", + "D", + "X", + "K", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/aa_DJ.txt b/icuSources/data/xml/experimental/aa_DJ.txt new file mode 100644 index 00000000..d1f120c5 --- /dev/null +++ b/icuSources/data/xml/experimental/aa_DJ.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/aa_DJ.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/aa_DJ.xml + */ +aa_DJ{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.18"} +} diff --git a/icuSources/data/xml/experimental/aa_ER.txt b/icuSources/data/xml/experimental/aa_ER.txt new file mode 100644 index 00000000..f881c411 --- /dev/null +++ b/icuSources/data/xml/experimental/aa_ER.txt @@ -0,0 +1,42 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/aa_ER.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/aa_ER.xml + */ +aa_ER{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.17"} + calendar{ + gregorian{ + monthNames{ + format{ + wide{ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/aa_ER_SAAHO.txt b/icuSources/data/xml/experimental/aa_ER_SAAHO.txt new file mode 100644 index 00000000..37c1fa81 --- /dev/null +++ b/icuSources/data/xml/experimental/aa_ER_SAAHO.txt @@ -0,0 +1,40 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/aa_ER_SAAHO.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/aa_ER_SAAHO.xml + */ +aa_ER_SAAHO{ + Version{"1.16"} + calendar{ + gregorian{ + dayNames{ + format{ + abbreviated{ + "Nab", + "San", + "Sal", + "Rab", + "Cam", + "Jum", + "Qun", + } + wide{ + "Naba Sambat", + "Sani", + "Salus", + "Rabuq", + "Camus", + "Jumqata", + "Qunxa Sambat", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/aa_ET.txt b/icuSources/data/xml/experimental/aa_ET.txt new file mode 100644 index 00000000..e9ca8528 --- /dev/null +++ b/icuSources/data/xml/experimental/aa_ET.txt @@ -0,0 +1,48 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/aa_ET.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/aa_ET.xml + */ +aa_ET{ + Currencies{ + ETB{ + "$", + "ETB", + } + } + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.18"} + calendar{ + gregorian{ + monthNames{ + format{ + wide{ + "Qunxa Garablu", + "Kudo", + "Ciggilta Kudo", + "Agda Baxis", + "Caxah Alsa", + "Qasa Dirri", + "Qado Dirri", + "Liiqen", + "Waysu", + "Diteli", + "Ximoli", + "Kaxxa Garablu", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/bs.txt b/icuSources/data/xml/experimental/bs.txt new file mode 100644 index 00000000..5d6454e2 --- /dev/null +++ b/icuSources/data/xml/experimental/bs.txt @@ -0,0 +1,111 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/bs.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/bs.xml + */ +bs{ + Currencies{ + BAM{ + "KM", + "Konvertibilna marka", + } + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + ".", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.2"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 1, + } + dayNames{ + format{ + abbreviated{ + "Ned", + "Pon", + "Uto", + "Sri", + "Čet", + "Pet", + "Sub", + } + wide{ + "Nedjelja", + "Ponedjeljak", + "Utorak", + "Srijeda", + "Četvrtak", + "Petak", + "Subota", + } + } + } + eras{ + abbreviated{ + "BC", + "AD", + } + } + monthNames{ + format{ + abbreviated{ + "Jan", + "Feb", + "Mar", + "Apr", + "Maj", + "Jun", + "Jul", + "Avg", + "Sep", + "Okt", + "Nov", + "Dec", + } + wide{ + "Januar", + "Februar", + "Mart", + "April", + "Maj", + "Juni", + "Juli", + "Avgust", + "Septembar", + "Oktobar", + "Novembar", + "Decembar", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } +} diff --git a/icuSources/data/xml/experimental/bs_BA.txt b/icuSources/data/xml/experimental/bs_BA.txt new file mode 100644 index 00000000..9d81d70b --- /dev/null +++ b/icuSources/data/xml/experimental/bs_BA.txt @@ -0,0 +1,14 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/bs_BA.xml +// * +// *************************************************************************** +bs_BA{ + /** + * Draft + */ + Version{"1.4"} +} diff --git a/icuSources/data/xml/experimental/byn.txt b/icuSources/data/xml/experimental/byn.txt new file mode 100644 index 00000000..e79ede5f --- /dev/null +++ b/icuSources/data/xml/experimental/byn.txt @@ -0,0 +1,441 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/byn.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/byn.xml + */ +byn{ + Countries{ + AD{"አንዶራ"} + AE{"የተባበሩት አረብ ኤምሬትስ"} + AL{"አልባኒያ"} + AM{"አርሜኒያ"} + AN{"ኔዘርላንድስ አንቲልስ"} + AR{"አርጀንቲና"} + AT{"ኦስትሪያ"} + AU{"አውስትሬሊያ"} + AZ{"አዘርባጃን"} + BA{"ቦስኒያ እና ሄርዞጎቪኒያ"} + BB{"ባርቤዶስ"} + BE{"ቤልጄም"} + BG{"ቡልጌሪያ"} + BH{"ባህሬን"} + BM{"ቤርሙዳ"} + BO{"ቦሊቪያ"} + BR{"ብራዚል"} + BT{"ቡህታን"} + BY{"ቤላሩስ"} + BZ{"ቤሊዘ"} + CD{"ኮንጎ"} + CF{"የመካከለኛው አፍሪካ ሪፐብሊክ"} + CH{"ስዊዘርላንድ"} + CL{"ቺሊ"} + CM{"ካሜሩን"} + CN{"ቻይና"} + CO{"ኮሎምቢያ"} + CS{"ሰርቢያ"} + CV{"ኬፕ ቬርዴ"} + CY{"ሳይፕረስ"} + CZ{"ቼክ ሪፑብሊክ"} + DE{"ጀርመን"} + DK{"ዴንማርክ"} + DM{"ዶሚኒካ"} + DO{"ዶሚኒክ ሪፑብሊክ"} + DZ{"አልጄሪያ"} + EC{"ኢኳዶር"} + EE{"ኤስቶኒያ"} + EG{"ግብጽ"} + EH{"ምዕራባዊ ሳህራ"} + ER{"ኤርትራ"} + ES{"ስፔን"} + ET{"ኢትዮጵያ"} + FI{"ፊንላንድ"} + FJ{"ፊጂ"} + FM{"ሚክሮኔዢያ"} + FR{"ፈረንሳይ"} + GB{"እንግሊዝ"} + GE{"ጆርጂያ"} + GF{"የፈረንሳይ ጉዊአና"} + GM{"ጋምቢያ"} + GN{"ጊኒ"} + GQ{"ኢኳቶሪያል ጊኒ"} + GR{"ግሪክ"} + GW{"ቢሳዎ"} + GY{"ጉያና"} + HK{"ሆንግ ኮንግ"} + HR{"ክሮኤሽያ"} + HT{"ሀይቲ"} + HU{"ሀንጋሪ"} + ID{"ኢንዶኔዢያ"} + IE{"አየርላንድ"} + IL{"እስራኤል"} + IN{"ህንድ"} + IQ{"ኢራቅ"} + IS{"አይስላንድ"} + IT{"ጣሊያን"} + JM{"ጃማይካ"} + JO{"ጆርዳን"} + JP{"ጃፓን"} + KH{"ካምቦዲያ"} + KM{"ኮሞሮስ"} + KP{"ደቡብ ኮሪያ"} + KR{"ሰሜን ኮሪያ"} + KW{"ክዌት"} + LB{"ሊባኖስ"} + LT{"ሊቱዌኒያ"} + LV{"ላትቪያ"} + LY{"ሊቢያ"} + MA{"ሞሮኮ"} + MD{"ሞልዶቫ"} + MK{"ማከዶኒያ"} + MN{"ሞንጎሊያ"} + MO{"ማካዎ"} + MR{"ሞሪቴኒያ"} + MT{"ማልታ"} + MU{"ማሩሸስ"} + MX{"ሜክሲኮ"} + MY{"ማሌዢያ"} + NA{"ናሚቢያ"} + NC{"ኒው ካሌዶኒያ"} + NG{"ናይጄሪያ"} + NL{"ኔዘርላንድ"} + NO{"ኖርዌ"} + NP{"ኔፓል"} + NZ{"ኒው ዚላንድ"} + PE{"ፔሩ"} + PF{"የፈረንሳይ ፖሊኔዢያ"} + PG{"ፓፑዋ ኒው ጊኒ"} + PL{"ፖላንድ"} + PR{"ፖርታ ሪኮ"} + RO{"ሮሜኒያ"} + RU{"ራሺያ"} + SA{"ሳውድአረቢያ"} + SD{"ሱዳን"} + SE{"ስዊድን"} + SG{"ሲንጋፖር"} + SI{"ስሎቬኒያ"} + SK{"ስሎቫኪያ"} + SN{"ሴኔጋል"} + SO{"ሱማሌ"} + SY{"ሲሪያ"} + TD{"ቻድ"} + TF{"የፈረንሳይ ደቡባዊ ግዛቶች"} + TH{"ታይላንድ"} + TJ{"ታጃኪስታን"} + TL{"ምስራቅ ቲሞር"} + TN{"ቱኒዚያ"} + TR{"ቱርክ"} + TT{"ትሪኒዳድ እና ቶባጎ"} + TZ{"ታንዛኒያ"} + UG{"ዩጋንዳ"} + US{"አሜሪካ"} + UZ{"ዩዝበኪስታን"} + VE{"ቬንዙዌላ"} + VG{"የእንግሊዝ ድንግል ደሴቶች"} + VI{"የአሜሪካ ቨርጂን ደሴቶች"} + YE{"የመን"} + ZA{"ደቡብ አፍሪካ"} + ZM{"ዛምቢያ"} + } + Currencies{ + BRL{ + "R$", + "የብራዚል ሪል", + } + CNY{ + "Y", + "የቻይና ዩአን ረንሚንቢ", + } + ERN{ + "$", + "ERN", + } + ETB{ + "$", + "የኢትዮጵያ ብር", + } + EUR{ + "€", + "አውሮ", + } + GBP{ + "£", + "የእንግሊዝ ፓውንድ ስተርሊንግ", + } + INR{ + "=0#Rs.|1#Re.|1<Rs.", + "የሕንድ ሩፒ", + } + JPY{ + "Â¥", + "የጃፓን የን", + } + RUB{ + "RUB", + "የራሻ ሩብል", + } + USD{ + "US$", + "የአሜሪካን ዶላር", + } + } + ExemplarCharacters{ + "[ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ" + "-ⷞ]" + } + Languages{ + aa{"አፋርኛ"} + ab{"አብሐዚኛ"} + af{"አፍሪቃንስኛ"} + am{"አማርኛ"} + ar{"ዐርቢኛ"} + as{"አሳሜዛዊ"} + ay{"አያማርኛ"} + az{"አዜርባይጃንኛ"} + ba{"ባስኪርኛ"} + be{"ቤላራሻኛ"} + bg{"ቡልጋሪኛ"} + bh{"ቢሃሪ"} + bi{"ቢስላምኛ"} + bn{"በንጋሊኛ"} + bo{"ትበትንኛ"} + br{"ብሬቶንኛ"} + byn{"ብሊን"} + ca{"ካታላንኛ"} + co{"ኮርሲካኛ"} + cs{"ቼክኛ"} + cy{"ወልሽ"} + da{"ዴኒሽ"} + de{"ጀርመን"} + dz{"ድዞንግኻኛ"} + el{"ግሪክኛ"} + en{"እንግሊዝኛ"} + eo{"ኤስፐራንቶ"} + es{"ስፓኒሽ"} + et{"ኤስቶኒአን"} + eu{"ባስክኛ"} + fa{"ፐርሲያኛ"} + fi{"ፊኒሽ"} + fj{"ፊጂኛ"} + fo{"ፋሮኛ"} + fr{"ፈረንሳይኛ"} + fy{"ፍሪስኛ"} + ga{"አይሪሽ"} + gd{"እስኮትስ ጌልክኛ"} + gez{"ግዕዝኛ"} + gl{"ጋለጋኛ"} + gn{"ጓራኒኛ"} + gu{"ጉጃርቲኛ"} + ha{"ሃውሳኛ"} + he{"ዕብራስጥ"} + hi{"ሐንድኛ"} + hr{"ክሮሽያንኛ"} + hu{"ሀንጋሪኛ"} + hy{"አርመናዊ"} + ia{"ኢንቴርሊንጓ"} + id{"እንዶኒሲኛ"} + ie{"እንተርሊንግወ"} + ik{"እኑፒያቅኛ"} + is{"አይስላንድኛ"} + it{"ጣሊያንኛ"} + iu{"እኑክቲቱትኛ"} + ja{"ጃፓንኛ"} + jv{"ጃቫንኛ"} + ka{"ጊዮርጊያን"} + kk{"ካዛክኛ"} + kl{"ካላሊሱትኛ"} + km{"ክመርኛ"} + kn{"ካናዳኛ"} + ko{"ኮሪያኛ"} + ks{"ካሽሚርኛ"} + ku{"ኩርድሽኛ"} + ky{"ኪርጊዝኛ"} + la{"ላቲንኛ"} + ln{"ሊንጋላኛ"} + lo{"ላውስኛ"} + lt{"ሊቱአኒያን"} + lv{"ላትቪያን"} + mg{"ማላጋስኛ"} + mi{"ማዮሪኛ"} + mk{"ማከዶኒኛ"} + ml{"ማላያላምኛ"} + mn{"ሞንጎላዊኛ"} + mo{"ሞልዳቫዊና"} + mr{"ማራዚኛ"} + ms{"ማላይኛ"} + mt{"ማልቲስኛ"} + my{"ቡርማኛ"} + na{"ናኡሩ"} + ne{"ኔፓሊኛ"} + nl{"ደች"} + no{"ኖርዌጂያን"} + oc{"ኦኪታንኛ"} + om{"ኦሮምኛ"} + or{"ኦሪያኛ"} + pa{"ፓንጃቢኛ"} + pl{"ፖሊሽ"} + ps{"ፑሽቶኛ"} + pt{"ፖርቱጋሊኛ"} + qu{"ኵቿኛ"} + rm{"ሮማንስ"} + rn{"ሩንዲኛ"} + ro{"ሮማኒያን"} + ru{"ራሽኛ"} + rw{"ኪንያርዋንድኛ"} + sa{"ሳንስክሪትኛ"} + sd{"ሲንድሂኛ"} + sg{"ሳንጎኛ"} + si{"ስንሃልኛ"} + sid{"ሲዳምኛ"} + sk{"ስሎቫክኛ"} + sl{"ስሎቪኛ"} + sm{"ሳሞአኛ"} + sn{"ሾናኛ"} + so{"ሱማልኛ"} + sq{"ልቤኒኛ"} + sr{"ሰርቢኛ"} + ss{"ስዋቲኛ"} + st{"ሶዞኛ"} + su{"ሱዳንኛ"} + sv{"ስዊድንኛ"} + sw{"ስዋሂሊኛ"} + ta{"ታሚልኛ"} + te{"ተሉጉኛ"} + tg{"ታጂኪኛ"} + th{"ታይኛ"} + ti{"ትግርኛ"} + tig{"ትግረ"} + tk{"ቱርክመንኛ"} + tl{"ታጋሎገኛ"} + tn{"ጽዋናዊኛ"} + to{"ቶንጋ"} + tr{"ቱርክኛ"} + ts{"ጾንጋኛ"} + tt{"ታታርኛ"} + tw{"ትዊኛ"} + ug{"ኡዊግሁርኛ"} + uk{"ዩክረኒኛ"} + ur{"ኡርዱኛ"} + uz{"ኡዝበክኛ"} + vi{"ቪትናምኛ"} + vo{"ቮላፑክኛ"} + wo{"ዎሎፍኛ"} + xh{"ዞሳኛ"} + yi{"ይዲሻዊኛ"} + yo{"ዮሩባዊኛ"} + za{"ዡዋንግኛ"} + zh{"ቻይንኛ"} + zu{"ዙሉኛ"} + } + LocaleScript{ + "Ethi", + } + Scripts{ + Latn{"ላቲን"} + } + Version{"1.27"} + calendar{ + gregorian{ + AmPmMarkers{ + "ፋዱስ ጃብ", + "ፋዱስ ደምቢ", + } + DateTimeElements:intvector{ + 7, + 1, + } + dayNames{ + format{ + abbreviated{ + "ሰ/ቅ", + "ሰኑ", + "ሰሊጝ", + "ለጓ", + "ኣምድ", + "ኣርብ", + "ሰ/ሽ", + } + wide{ + "ሰንበር ቅዳዅ", + "ሰኑ", + "ሰሊጝ", + "ለጓ ወሪ ለብዋ", + "ኣምድ", + "ኣርብ", + "ሰንበር ሽጓዅ", + } + } + stand-alone{ + narrow{ + "ሰ", + "ሰ", + "ሰ", + "ለ", + "ኣ", + "ኣ", + "ሰ", + } + } + } + eras{ + abbreviated{ + "ይጅ", + "ኣድ", + } + } + monthNames{ + format{ + abbreviated{ + "ልደት", + "ካብኽ", + "ክብላ", + "ፋጅኺ", + "ክቢቅ", + "ም/ት", + "ኰር", + "ማርያ", + "ያኸኒ", + "መተሉ", + "ም/ም", + "ተሕሳ", + } + wide{ + "ልደትሪ", + "ካብኽብቲ", + "ክብላ", + "ፋጅኺሪ", + "ክቢቅሪ", + "ምኪኤል ትጓ̅ኒሪ", + "ኰርኩ", + "ማርያም ትሪ", + "ያኸኒ መሳቅለሪ", + "መተሉ", + "ምኪኤል መሽወሪ", + "ተሕሳስሪ", + } + } + stand-alone{ + narrow{ + "ል", + "ካ", + "ክ", + "ፋ", + "ክ", + "ም", + "ኰ", + "ማ", + "ያ", + "መ", + "ም", + "ተ", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/byn_ER.txt b/icuSources/data/xml/experimental/byn_ER.txt new file mode 100644 index 00000000..03d00979 --- /dev/null +++ b/icuSources/data/xml/experimental/byn_ER.txt @@ -0,0 +1,35 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/byn_ER.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/byn_ER.xml + */ +byn_ER{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.17"} + calendar{ + gregorian{ + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE፡ dd MMMM ግርጋ yyyy G", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/de_LI.txt b/icuSources/data/xml/experimental/de_LI.txt new file mode 100644 index 00000000..24b450ad --- /dev/null +++ b/icuSources/data/xml/experimental/de_LI.txt @@ -0,0 +1,28 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/de_LI.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/de_LI.xml + */ +de_LI{ + NumberElements{ + ".", + "'", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.19"} +} diff --git a/icuSources/data/xml/experimental/dv.txt b/icuSources/data/xml/experimental/dv.txt new file mode 100644 index 00000000..b4a3ddf6 --- /dev/null +++ b/icuSources/data/xml/experimental/dv.txt @@ -0,0 +1,50 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/dv.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/dv.xml + */ +dv{ + Countries{ + MV{"ދިވެހި ރާއްޖެ"} + } + Currencies{ + MVR{ + "ރ.", + "MVR", + } + } + ExemplarCharacters{"[ހ-ޱ‌‍]"} + Languages{ + dv{"ދިވެހިބަސް"} + } + LocaleScript{ + "THAA", + } + NumberElements{ + ".", + ",", + "،", + "%", + "Ù ", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + NumberPatterns{ + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", + "#E0", + } + Version{"1.19"} +} diff --git a/icuSources/data/xml/experimental/dv_MV.txt b/icuSources/data/xml/experimental/dv_MV.txt new file mode 100644 index 00000000..58be3a09 --- /dev/null +++ b/icuSources/data/xml/experimental/dv_MV.txt @@ -0,0 +1,33 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/dv_MV.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/dv_MV.xml + */ +dv_MV{ + Version{"1.18"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 6, + 1, + } + DateTimePatterns{ + "hh:mm:ss a z", + "hh:mm:ss a z", + "hh:mm:ss a", + "hh:mm a", + "EEEE d MMMM yyyy", + "d MMMM yyyy", + "dd-MM-yyyy", + "d-M-yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/dz.txt b/icuSources/data/xml/experimental/dz.txt new file mode 100644 index 00000000..f5ca23f2 --- /dev/null +++ b/icuSources/data/xml/experimental/dz.txt @@ -0,0 +1,278 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/dz.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/dz.xml + */ +dz{ + Countries{ + AE{"ཡུ་ནའི་ཊེཊ་ཨ་ར བ་ཨེ་མི་རེཊསི"} + AF{"ཨཕ་ག་ནིསི་ཏཱན"} + AQ{"ཨེན་ཊཱག་ཊི་ཀ"} + AR{"ཨར་ཇེན་ཊི་ན"} + AT{"ཨས་ཊི་ཡ"} + AU{"ཨས་ཊེཡེ་ལི་ཡ"} + BD{"བངྒ་ལ་དེཤ"} + BE{"བེལ་ཇིཡམ"} + BH{"བཧ་རེན"} + BR{"བཱརཱ་ཛིལ"} + BT{"འབྲུག"} + CA{"ཀེ་ན་ཌ"} + CH{"སུའིཊ་ཛར་ལེན"} + CN{"རྒྱ་མི"} + CU{"ཀིའུ་སྦ"} + CZ{"ཅེཀ་རི་པབ་ལིཀ"} + DE{"ཇཱར་མ་ནི"} + DK{"ཌེན་མཱཀ"} + EG{"ཨི་ཇིཔཊ"} + ES{"སིཔཱེན"} + FI{"ཕིན་ལེནཌ"} + FR{"ཕརཱནསི"} + GB{"ཡུ་ནའི་ཊེཊ་ཀིང་ཌམ"} + GR{"གིརིསི"} + HK{"ཧོང་ཀོང"} + IE{"ཨའིརི་ལེནཌ"} + IL{"ཨིཛ་རཱེལ"} + IN{"རྒྱ་གར"} + IQ{"ཨི་རཀ"} + IR{"ཨི་རཱན"} + IS{"ཨའིསི་ལེནཌ"} + IT{"ཨྀཊ་ལི"} + JM{"ཇ་མའི་ཀ"} + JP{"ཇ་པཱན"} + KE{"ཀེ་ནི་ཡ"} + KH{"ཀམ་བོ་ཌི་ཡ"} + KP{"བྱང་ཀོ་རི་ཡ"} + KR{"ལྷོ་ཀོ་རི་ཡ"} + KW{"ཀུ་ཝེཊ"} + LA{"ལ་འོསུ"} + LB{"ལེ་བཱ་ནཱོན"} + LK{"ཤྲཱྀ་ལངཀ"} + MM{"མེ་མར"} + MN{"སོག་པོ"} + MS{"མོན་ས་རཊི"} + MU{"མོ་རི་ཤིཡསི"} + MV{"མཱལ་ཌིབས"} + MX{"མེཀསི་ཀོ"} + MY{"མ་ལེ་ཤི་ཡ"} + NL{"ནེ་དར་ལེནཌསི"} + NO{"ནོ་ཝེ"} + NP{"བལ་ཡུལ"} + NZ{"ནིའུ་ཛི་ལེནཌ"} + PA{"པ་ན་མཱ"} + PK{"པ་ཀིསི་ཏཱན"} + PS{"པེ་ལིསི་ཊི་ནིཡ ན་ཊེ་རི་ངོ་རི"} + PT{"པོར་ཅུ་གལ"} + QA{"ཀ་ཏར"} + SA{"སའུ་དི་ཨེ་ར་ས ྦི་ཡ"} + SE{"སུའི་ཌན"} + SI{"སིལོ་བེ་ནི་ཡ"} + TH{"ཐཱའི་ལེནཌ"} + TJ{"ཏ་ཇག་ཀིསི་ཏཱན"} + TW{"ཏའི་ཝཱན"} + US{"ཡུ་ནའིཊེཊ་སི་ཊེསི"} + UZ{"ཨུཛ་བེ་ཀིསི་ཏཱན"} + VN{"བེཊ་ནཱམ"} + ZA{"སའུཐ་ཨཕ་རི་ཀ"} + ZM{"ཛམ་བི་ཡ"} + ZW{"ཛིམ་བབ་ཝེ"} + } + ExemplarCharacters{"[ཀཁགངཅཆཇཉཏཐདནཔཕབམཙཚཛཝཞཟའཡརལཤསཧཨཱིེོུྐྒྔྕྗྙྟྡྣྤྦྨྩྫྭྱྲླྷ]"} + Keys{ + collation{"གནས་སདུད་རིམ་ སགྲིག"} + } + Languages{ + ar{"ཨེ་ར་སྦིག"} + art{"བཟོ་བཟོཝ (གཞན)"} + as{"ཨ་ས་མི་སི"} + bh{"བི་ཧ་ལི"} + bn{"བེངྒ་ལི"} + bo{"བོད་ཁ"} + cs{"ཅེཀ"} + da{"ཌེ་ནིཤ"} + de{"ཇཱར་མཱན"} + dv{"དི་བེ་ཧི"} + dz{"རྫོང་ཁ"} + egy{"ཨི་ཇིཔ་ཤཱན (སྔ་དུས་ཀྱི)"} + el{"གིརིཀ"} + en{"ཨིང་ལིཤ"} + es{"སིཔེ་ནིཤ"} + fa{"པར་ཤི་ཡན"} + fr{"ཕེ་རེནཆེ"} + ga{"ཨའི་རིཤ"} + grc{"གིརིཀ, སྔ་དུས་ཀྱི (༡༤༥༣)"} + he{"ཧི་བུརུ"} + hi{"ཧིན་དི"} + him{"ཧི་མ་ཅ་ལི"} + inc{"ཨིན་ཌིཀ (གཞན)"} + it{"ཨི་ཊ་ལི་རན"} + km{"ཁེ་མར"} + kn{"ཀ་ན་ཌ"} + ko{"ཀོ་རིཡན"} + ks{"ཀེཤ་མི་རི"} + lo{"ལའོ"} + ml{"མ་ལ་ཡ་ལམ"} + mn{"སོག་པོའི་ཁ"} + mnc{"མཱན་ཅུ"} + mni{"མ་ནི་པུ་རི"} + mr{"མ་ར་ཐི"} + my{"བར་མིསི"} + ne{"ནེ་པ་ལི"} + new{"ནི་ཝ་རི"} + nl{"ཌཆ"} + no{"ནོར་ཝི་ཇི་ཡན"} + or{"ཨོ་རི་ཡ"} + pa{"པཱན་ཇ་བི"} + pi{"པ་ལི"} + ru{"ར་ཤི་ཡན"} + sa{"སཾསྐྲྀཏ"} + si{"སིན་ཧ་ལིསི"} + ta{"ཏ་མིལ"} + te{"ཏེ་ལུ་གུ"} + th{"ཐཱའེ"} + ur{"ཨུར་དུ"} + zh{"རགྱ་མི་ཁ"} + } + LocaleScript{ + "Tibt", + } + Scripts{ + Arab{"ཨེ་རེ་སྦིག"} + Beng{"བེངྒ་ལི"} + Brai{"བེརེལ"} + Cyrl{"སིརི་ལིཀ"} + Deva{"དི་ཝ་ན་གརི"} + Grek{"གིརིཀ"} + Gujr{"གུ་ཇ་ར་ཏི"} + Guru{"གུར་མུ་ཁི"} + Hang{"ཧང་གུལ"} + Hani{"ཧཱན"} + Hans{"ལུགས་གསར ཧཱན"} + Hant{"ལུགས་རྙིང ཧཱན"} + Hebr{"ཧི་བུརུ"} + Hira{"ཧི་ར་ག་ན"} + Kana{"ཀ་ཏ་ཀ་ན"} + Khmr{"ཁེ་མར"} + Knda{"ཀ་ན་ཌ"} + Laoo{"ལའོ"} + Latn{"ལེ་ཊིན"} + Limb{"ལིམ་བུ"} + Mlym{"མ་ལ་ཡ་ལམ"} + Mong{"སོག་པོ"} + Mymr{"མི་མར"} + Orya{"ཨོ་རི་ཡ"} + Qaai{"སྔར་རྒྱུན"} + Sinh{"སིན་ཧ་ལ"} + Taml{"ཏ་མིལ"} + Telu{"ཏེ་ལུ་གུ"} + Thaa{"ཐཱ་ན"} + Tibt{"བོད"} + Zyyy{"སྤྱིར"} + } + Types{ + collation{ + traditional{"ལུགས་སྲོལ"} + } + } + Version{"1.21"} + calendar{ + gregorian{ + AmPmMarkers{ + "སྔ་ཆ་", + "ཕྱི་ཆ་", + } + DateTimeElements:intvector{ + 2, + 1, + } + DateTimePatterns{ + "ཆུ་ཚོད་ h སྐར་མ་ mm སྐར་ཆཱ་ ss a zzzz", + "ཆུ་ཚོད་ h སྐར་མ་ mm སྐར་ཆཱ་ ss a zzz", + "ཆུ་ཚོད་h:mm:ss a", + "ཆུ་ཚོད་ h སྐར་མ་ mm a", + "སྤྱི་ལོ་yyyy ཟླ་ MMMM ཚེས་ dd", + "སྤྱི་ལོ་yyyy ཟླ་ MMMM ཚེས་ dd", + "སྤྱི་ལོ་yyyy ཟླ་ MMM ཚེས་ dd", + "སྤྱི་ལོ་ yyyy ཟླ་ MMM ཚེས་ dd", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "ཟླ་", + "མིར་", + "ལྷག་", + "ཕུར་", + "སངས་", + "སྤེན་", + "ཉི་", + } + wide{ + "གཟའ་ཟླ་བ་", + "གཟའ་མིག་དམར་", + "གཟའ་ལྷག་པ་", + "གཟའ་ཕུར་བུ་", + "གཟའ་པ་སངས་", + "གཟའ་སྤེན་པ་", + "གཟའ་ཉི་མ་", + } + } + } + monthNames{ + format{ + abbreviated{ + "ཟླ་ ༡", + "ཟླ་ ༢", + "ཟླ་ ༣", + "ཟླ་ ༤", + "ཟླ་ ༥", + "ཟླ་ ༦", + "ཟླ་ ༧", + "ཟླ་ ༨", + "ཟླ་ ༩", + "ཟླ་ ༡༠", + "ཟླ་ ༡༡", + "ཟླ་ ༡༢", + } + wide{ + "སྤྱི་ཟླཝ་དངཔ་", + "སྤྱི་ཟླཝ་གཉིས་པ་", + "སྤྱི་ཟླཝ་གསུམ་པ་", + "སྤྱི་ཟླཝ་བཞི་པ་", + "སྤྱི་ཟླཝ་ལྔ་པ་", + "སྤྱི་ཟླཝ་དྲུག་པ་", + "སྤྱི་ཟླཝ་བདུན་པ་", + "སྤྱི་ཟླཝ་བརྒྱད་པ་", + "སྤྱི་ཟླཝ་དགུ་པ་", + "སྤྱི་ཟླཝ་བཅུ་པ་", + "སྤྱི་ཟླཝ་བཅུ་གཅིག་པ་", + "སྤྱི་ཟླཝ་བཅུ་གཉིས་པ་", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"'"} + alternateQuotationStart{"'"} + quotationEnd{"\""} + quotationStart{"\""} + } + zoneStrings{ + { + "Asia/Thimphu", + "Bhutan Standard Time", + "BST", + "Bhutan Standard Time", + "BST", + "ཐིམ་ཕུག", + "Bhutan Standard Time", + "BST", + } + } +} diff --git a/icuSources/data/xml/experimental/dz_BT.txt b/icuSources/data/xml/experimental/dz_BT.txt new file mode 100644 index 00000000..a4d8c685 --- /dev/null +++ b/icuSources/data/xml/experimental/dz_BT.txt @@ -0,0 +1,37 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/dz_BT.xml +// * +// *************************************************************************** +dz_BT{ + Currencies{ + BTN{ + "Nu", + "དངུལ་ཀྲམ་", + } + } + NumberElements{ + ".", + ",", + "དང་", + "བརྒ་ཆཱ", + "༠", + "#", + "-", + "E", + "‰", + "གྲངས་མེད", + "ཨང་མད", + "+", + } + NumberPatterns{ + "#,##,##0.###", + "¤#,##,##0.00", + "#,##,##0 བརྒ་ཆཱ", + "#E+00", + } + Version{"1.18"} +} diff --git a/icuSources/data/xml/experimental/el_CY.txt b/icuSources/data/xml/experimental/el_CY.txt new file mode 100644 index 00000000..0effff18 --- /dev/null +++ b/icuSources/data/xml/experimental/el_CY.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/el_CY.xml +// * +// *************************************************************************** +el_CY{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.6"} +} diff --git a/icuSources/data/xml/experimental/en_AS.txt b/icuSources/data/xml/experimental/en_AS.txt new file mode 100644 index 00000000..594d4574 --- /dev/null +++ b/icuSources/data/xml/experimental/en_AS.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_AS.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_AS.xml + */ +en_AS{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;(¤#,##0.00)", + "#,##0%", + "#E0", + } + Version{"1.17"} +} diff --git a/icuSources/data/xml/experimental/en_BZ.txt b/icuSources/data/xml/experimental/en_BZ.txt new file mode 100644 index 00000000..d1d85c19 --- /dev/null +++ b/icuSources/data/xml/experimental/en_BZ.txt @@ -0,0 +1,33 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_BZ.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_BZ.xml + */ +en_BZ{ + Version{"1.20"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 1, + } + DateTimePatterns{ + "HH:mm:ss z", + "HH:mm:ss z", + "HH:mm:ss", + "HH:mm", + "dd MMMM yyyy", + "dd MMMM yyyy", + "dd-MMM-yy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/en_GU.txt b/icuSources/data/xml/experimental/en_GU.txt new file mode 100644 index 00000000..06ac0b71 --- /dev/null +++ b/icuSources/data/xml/experimental/en_GU.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_GU.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_GU.xml + */ +en_GU{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;(¤#,##0.00)", + "#,##0%", + "#E0", + } + Version{"1.17"} +} diff --git a/icuSources/data/xml/experimental/en_JM.txt b/icuSources/data/xml/experimental/en_JM.txt new file mode 100644 index 00000000..cb62dbea --- /dev/null +++ b/icuSources/data/xml/experimental/en_JM.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_JM.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_JM.xml + */ +en_JM{ + /** + * Draft + */ + Version{"1.20"} +} diff --git a/icuSources/data/xml/experimental/en_MH.txt b/icuSources/data/xml/experimental/en_MH.txt new file mode 100644 index 00000000..2f446671 --- /dev/null +++ b/icuSources/data/xml/experimental/en_MH.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_MH.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_MH.xml + */ +en_MH{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;(¤#,##0.00)", + "#,##0%", + "#E0", + } + Version{"1.17"} +} diff --git a/icuSources/data/xml/experimental/en_MP.txt b/icuSources/data/xml/experimental/en_MP.txt new file mode 100644 index 00000000..58e4a125 --- /dev/null +++ b/icuSources/data/xml/experimental/en_MP.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_MP.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_MP.xml + */ +en_MP{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;(¤#,##0.00)", + "#,##0%", + "#E0", + } + Version{"1.17"} +} diff --git a/icuSources/data/xml/experimental/en_TT.txt b/icuSources/data/xml/experimental/en_TT.txt new file mode 100644 index 00000000..e5992be2 --- /dev/null +++ b/icuSources/data/xml/experimental/en_TT.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_TT.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_TT.xml + */ +en_TT{ + /** + * Draft + */ + Version{"1.20"} +} diff --git a/icuSources/data/xml/experimental/en_UM.txt b/icuSources/data/xml/experimental/en_UM.txt new file mode 100644 index 00000000..02f19ede --- /dev/null +++ b/icuSources/data/xml/experimental/en_UM.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/en_UM.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/en_UM.xml + */ +en_UM{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;(¤#,##0.00)", + "#,##0%", + "#E0", + } + Version{"1.17"} +} diff --git a/icuSources/data/xml/experimental/fr_MC.txt b/icuSources/data/xml/experimental/fr_MC.txt new file mode 100644 index 00000000..e30a279a --- /dev/null +++ b/icuSources/data/xml/experimental/fr_MC.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/fr_MC.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/fr_MC.xml + */ +fr_MC{ + /** + * Draft + */ + Version{"1.20"} +} diff --git a/icuSources/data/xml/experimental/gez.txt b/icuSources/data/xml/experimental/gez.txt new file mode 100644 index 00000000..3624b4fb --- /dev/null +++ b/icuSources/data/xml/experimental/gez.txt @@ -0,0 +1,436 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/gez.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/gez.xml + */ +gez{ + Countries{ + AD{"አንዶራ"} + AE{"የተባበሩት፡አረብ፡ኤምሬትስ"} + AL{"አልባኒያ"} + AM{"አርሜኒያ"} + AN{"ኔዘርላንድስ፡አንቲልስ"} + AR{"አርጀንቲና"} + AT{"ኦስትሪያ"} + AU{"አውስትሬሊያ"} + AZ{"አዘርባጃን"} + BA{"ቦስኒያ፡እና፡ሄርዞጎቪኒያ"} + BB{"ባርቤዶስ"} + BE{"ቤልጄም"} + BG{"ቡልጌሪያ"} + BH{"ባህሬን"} + BM{"ቤርሙዳ"} + BO{"ቦሊቪያ"} + BR{"ብራዚል"} + BT{"ቡህታን"} + BY{"ቤላሩስ"} + BZ{"ቤሊዘ"} + CF{"የመካከለኛው፡አፍሪካ፡ሪፐብሊክ"} + CH{"ስዊዘርላንድ"} + CL{"ቺሊ"} + CM{"ካሜሩን"} + CN{"ቻይና"} + CO{"ኮሎምቢያ"} + CS{"ሰርቢያ"} + CV{"ኬፕ፡ቬርዴ"} + CY{"ሳይፕረስ"} + CZ{"ቼክ፡ሪፑብሊክ"} + DE{"ጀርመን"} + DK{"ዴንማርክ"} + DM{"ዶሚኒካ"} + DO{"ዶሚኒክ፡ሪፑብሊክ"} + DZ{"አልጄሪያ"} + EC{"ኢኳዶር"} + EE{"ኤስቶኒያ"} + EG{"ግብጽ"} + EH{"ምዕራባዊ፡ሳህራ"} + ER{"ኤርትራ"} + ES{"ስፔን"} + ET{"ኢትዮጵያ"} + FI{"ፊንላንድ"} + FJ{"ፊጂ"} + FM{"ሚክሮኔዢያ"} + FR{"ፈረንሳይ"} + GB{"እንግሊዝ"} + GE{"ጆርጂያ"} + GF{"የፈረንሳይ፡ጉዊአና"} + GM{"ጋምቢያ"} + GN{"ጊኒ"} + GQ{"ኢኳቶሪያል፡ጊኒ"} + GR{"ግሪክ"} + GW{"ቢሳዎ"} + GY{"ጉያና"} + HK{"ሆንግ፡ኮንግ"} + HR{"ክሮኤሽያ"} + HT{"ሀይቲ"} + HU{"ሀንጋሪ"} + ID{"ኢንዶኔዢያ"} + IE{"አየርላንድ"} + IL{"እስራኤል"} + IN{"ህንድ"} + IQ{"ኢራቅ"} + IS{"አይስላንድ"} + IT{"ጣሊያን"} + JM{"ጃማይካ"} + JO{"ጆርዳን"} + JP{"ጃፓን"} + KH{"ካምቦዲያ"} + KM{"ኮሞሮስ"} + KP{"ደቡብ፡ኮሪያ"} + KR{"ሰሜን፡ኮሪያ"} + KW{"ክዌት"} + LB{"ሊባኖስ"} + LT{"ሊቱዌኒያ"} + LV{"ላትቪያ"} + LY{"ሊቢያ"} + MA{"ሞሮኮ"} + MD{"ሞልዶቫ"} + MK{"ማከዶኒያ"} + MN{"ሞንጎሊያ"} + MO{"ማካዎ"} + MR{"ሞሪቴኒያ"} + MT{"ማልታ"} + MU{"ማሩሸስ"} + MX{"ሜክሲኮ"} + MY{"ማሌዢያ"} + NA{"ናሚቢያ"} + NC{"ኒው፡ካሌዶኒያ"} + NG{"ናይጄሪያ"} + NL{"ኔዘርላንድ"} + NO{"ኖርዌ"} + NP{"ኔፓል"} + NZ{"ኒው፡ዚላንድ"} + PE{"ፔሩ"} + PF{"የፈረንሳይ፡ፖሊኔዢያ"} + PG{"ፓፑዋ፡ኒው፡ጊኒ"} + PL{"ፖላንድ"} + PR{"ፖርታ፡ሪኮ"} + RO{"ሮሜኒያ"} + RU{"ራሺያ"} + SA{"ሳውድአረቢያ"} + SD{"ሱዳን"} + SE{"ስዊድን"} + SG{"ሲንጋፖር"} + SI{"ስሎቬኒያ"} + SK{"ስሎቫኪያ"} + SN{"ሴኔጋል"} + SO{"ሱማሌ"} + SY{"ሲሪያ"} + TD{"ቻድ"} + TF{"የፈረንሳይ፡ደቡባዊ፡ግዛቶች"} + TH{"ታይላንድ"} + TJ{"ታጃኪስታን"} + TL{"ምስራቅ፡ቲሞር"} + TN{"ቱኒዚያ"} + TR{"ቱርክ"} + TT{"ትሪኒዳድ፡እና፡ቶባጎ"} + TZ{"ታንዛኒያ"} + UG{"ዩጋንዳ"} + US{"አሜሪካ"} + UZ{"ዩዝበኪስታን"} + VE{"ቬንዙዌላ"} + VG{"የእንግሊዝ፡ድንግል፡ደሴቶች"} + VI{"የአሜሪካ፡ቨርጂን፡ደሴቶች"} + YE{"የመን"} + ZA{"ደቡብ፡አፍሪካ"} + ZM{"ዛምቢያ"} + } + Currencies{ + BRL{ + "R$", + "የብራዚል ሪል", + } + CNY{ + "Y", + "የቻይና ዩአን ረንሚንቢ", + } + ETB{ + "$", + "የኢትዮጵያ ብር", + } + EUR{ + "€", + "አውሮ", + } + GBP{ + "£", + "የእንግሊዝ ፓውንድ ስተርሊንግ", + } + INR{ + "=0#Rs.|1#Re.|1<Rs.", + "የሕንድ ሩፒ", + } + JPY{ + "Â¥", + "የጃፓን የን", + } + RUB{ + "RUB", + "የራሻ ሩብል", + } + USD{ + "USD", + "የአሜሪካን ዶላር", + } + } + ExemplarCharacters{ + "[ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ" + "-ⷞ]" + } + Languages{ + aa{"አፋርኛ"} + ab{"አብሐዚኛ"} + af{"አፍሪቃንስኛ"} + am{"አምሐረኛ"} + ar{"ዐርቢኛ"} + as{"አሳሜዛዊ"} + ay{"አያማርኛ"} + az{"አዜርባይጃንኛ"} + ba{"ባስኪርኛ"} + be{"ቤላራሻኛ"} + bg{"ቡልጋሪኛ"} + bh{"ቢሃሪ"} + bi{"ቢስላምኛ"} + bn{"በንጋሊኛ"} + bo{"ትበትንኛ"} + br{"ብሬቶንኛ"} + byn{"ብሊን"} + ca{"ካታላንኛ"} + co{"ኮርሲካኛ"} + cs{"ቼክኛ"} + cy{"ወልሽ"} + da{"ዴኒሽ"} + de{"ጀርመን"} + dz{"ድዞንግኻኛ"} + el{"ግሪክኛ"} + en{"እንግሊዝኛ"} + eo{"ኤስፐራንቶ"} + es{"ስፓኒሽ"} + et{"ኤስቶኒአን"} + eu{"ባስክኛ"} + fa{"ፐርሲያኛ"} + fi{"ፊኒሽ"} + fj{"ፊጂኛ"} + fo{"ፋሮኛ"} + fr{"ፈረንሳይኛ"} + fy{"ፍሪስኛ"} + ga{"አይሪሽ"} + gd{"እስኮትስ፡ጌልክኛ"} + gez{"ግዕዝኛ"} + gl{"ጋለጋኛ"} + gn{"ጓራኒኛ"} + gu{"ጉጃርቲኛ"} + ha{"ሃውሳኛ"} + he{"ዕብራስጥ"} + hi{"ሐንድኛ"} + hr{"ክሮሽያንኛ"} + hu{"ሀንጋሪኛ"} + hy{"አርመናዊ"} + ia{"ኢንቴርሊንጓ"} + id{"እንዶኒሲኛ"} + ie{"እንተርሊንግወ"} + ik{"እኑፒያቅኛ"} + is{"አይስላንድኛ"} + it{"ጣሊያንኛ"} + iu{"እኑክቲቱትኛ"} + ja{"ጃፓንኛ"} + jv{"ጃቫንኛ"} + ka{"ጊዮርጊያን"} + kk{"ካዛክኛ"} + kl{"ካላሊሱትኛ"} + km{"ክመርኛ"} + kn{"ካናዳኛ"} + ko{"ኮሪያኛ"} + ks{"ካሽሚርኛ"} + ku{"ኩርድሽኛ"} + ky{"ኪርጊዝኛ"} + la{"ላቲንኛ"} + ln{"ሊንጋላኛ"} + lo{"ላውስኛ"} + lt{"ሊቱአኒያን"} + lv{"ላትቪያን"} + mg{"ማላጋስኛ"} + mi{"ማዮሪኛ"} + mk{"ማከዶኒኛ"} + ml{"ማላያላምኛ"} + mn{"ሞንጎላዊኛ"} + mo{"ሞልዳቫዊና"} + mr{"ማራዚኛ"} + ms{"ማላይኛ"} + mt{"ማልቲስኛ"} + my{"ቡርማኛ"} + na{"ናኡሩ"} + ne{"ኔፓሊኛ"} + nl{"ደች"} + no{"ኖርዌጂያን"} + oc{"ኦኪታንኛ"} + om{"ኦሮምኛ"} + or{"ኦሪያኛ"} + pa{"ፓንጃቢኛ"} + pl{"ፖሊሽ"} + ps{"ፑሽቶኛ"} + pt{"ፖርቱጋሊኛ"} + qu{"ኵቿኛ"} + rm{"ሮማንስ"} + rn{"ሩንዲኛ"} + ro{"ሮማኒያን"} + ru{"ራሽኛ"} + rw{"ኪንያርዋንድኛ"} + sa{"ሳንስክሪትኛ"} + sd{"ሲንድሂኛ"} + sg{"ሳንጎኛ"} + si{"ስንሃልኛ"} + sid{"ሲዳምኛ"} + sk{"ስሎቫክኛ"} + sl{"ስሎቪኛ"} + sm{"ሳሞአኛ"} + sn{"ሾናኛ"} + so{"ሱማልኛ"} + sq{"ልቤኒኛ"} + sr{"ሰርቢኛ"} + ss{"ስዋቲኛ"} + st{"ሶዞኛ"} + su{"ሱዳንኛ"} + sv{"ስዊድንኛ"} + sw{"ስዋሂሊኛ"} + ta{"ታሚልኛ"} + te{"ተሉጉኛ"} + tg{"ታጂኪኛ"} + th{"ታይኛ"} + ti{"ትግርኛ"} + tig{"ትግረ"} + tk{"ቱርክመንኛ"} + tl{"ታጋሎገኛ"} + tn{"ጽዋናዊኛ"} + to{"ቶንጋ"} + tr{"ቱርክኛ"} + ts{"ጾንጋኛ"} + tt{"ታታርኛ"} + tw{"ትዊኛ"} + ug{"ኡዊግሁርኛ"} + uk{"ዩክረኒኛ"} + ur{"ኡርዱኛ"} + uz{"ኡዝበክኛ"} + vi{"ቪትናምኛ"} + vo{"ቮላፑክኛ"} + wo{"ዎሎፍኛ"} + xh{"ዞሳኛ"} + yi{"ይዲሻዊኛ"} + yo{"ዮሩባዊኛ"} + za{"ዡዋንግኛ"} + zh{"ቻይንኛ"} + zu{"ዙሉኛ"} + } + LocaleScript{ + "Ethi", + } + Scripts{ + Latn{"ላቲን"} + } + Version{"1.27"} + calendar{ + gregorian{ + AmPmMarkers{ + "ጽባሕ", + "ምሴት", + } + DateTimeElements:intvector{ + 7, + 1, + } + dayNames{ + format{ + abbreviated{ + "እኁድ", + "ሰኑይ", + "ሠሉስ", + "ራብዕ", + "ሐሙስ", + "ዓርበ", + "ቀዳሚ", + } + wide{ + "እኁድ", + "ሰኑይ", + "ሠሉስ", + "ራብዕ", + "ሐሙስ", + "ዓርበ", + "ቀዳሚት", + } + } + stand-alone{ + narrow{ + "እ", + "ሰ", + "ሠ", + "ራ", + "ሐ", + "ዓ", + "ቀ", + } + } + } + eras{ + abbreviated{ + "ዓ/ዓ", + "ዓ/ም", + } + } + monthNames{ + format{ + abbreviated{ + "ጠሐረ", + "ከተተ", + "መገበ", + "አኀዘ", + "ግንባ", + "ሠንየ", + "ሐመለ", + "ነሐሰ", + "ከረመ", + "ጠቀመ", + "ኀደረ", + "ኀሠሠ", + } + wide{ + "ጠሐረ", + "ከተተ", + "መገበ", + "አኀዘ", + "ግንባት", + "ሠንየ", + "ሐመለ", + "ነሐሰ", + "ከረመ", + "ጠቀመ", + "ኀደረ", + "ኀሠሠ", + } + } + stand-alone{ + narrow{ + "ጠ", + "ከ", + "መ", + "አ", + "ግ", + "ሠ", + "ሐ", + "ነ", + "ከ", + "ጠ", + "ኀ", + "ኀ", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/gez_ER.txt b/icuSources/data/xml/experimental/gez_ER.txt new file mode 100644 index 00000000..e49c1428 --- /dev/null +++ b/icuSources/data/xml/experimental/gez_ER.txt @@ -0,0 +1,59 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/gez_ER.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/gez_ER.xml + */ +gez_ER{ + Currencies{ + ERN{ + "$", + "ERN", + } + USD{ + "US$", + "የአሜሪካን ዶላር", + } + } + NumberElements{ + ".", + "ወ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.18"} + calendar{ + gregorian{ + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE፥ dd MMMM መዓልት yyyy G", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/gez_ET.txt b/icuSources/data/xml/experimental/gez_ET.txt new file mode 100644 index 00000000..271faf54 --- /dev/null +++ b/icuSources/data/xml/experimental/gez_ET.txt @@ -0,0 +1,55 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/gez_ET.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/gez_ET.xml + */ +gez_ET{ + Currencies{ + USD{ + "US$", + "የአሜሪካን ዶላር", + } + } + NumberElements{ + ".", + "ወ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.19"} + calendar{ + gregorian{ + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE፥ dd MMMM መዓልት yyyy G", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/haw.txt b/icuSources/data/xml/experimental/haw.txt new file mode 100644 index 00000000..48132a82 --- /dev/null +++ b/icuSources/data/xml/experimental/haw.txt @@ -0,0 +1,101 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/haw.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/haw.xml + */ +haw{ + Countries{ + AU{"NÅ«hōlani"} + CA{"Kanakā"} + CN{"Kina"} + DE{"Kelemānia"} + DK{"Kenemaka"} + ES{"Kepania"} + FR{"Palani"} + GB{"Aupuni Mōʻī Hui PÅ« Ê»Ia"} + GR{"Helene"} + IE{"Ê»Ilelani"} + IL{"Ê»IseraÊ»ela"} + IN{"ʻĪnia"} + IT{"ʻĪkālia"} + JP{"Iāpana"} + MX{"Mekiko"} + NL{"Hōlani"} + NZ{"Aotearoa"} + PH{"ʻĀina Pilipino"} + RU{"LÅ«kia"} + US{"Ê»Amelika Hui PÅ« Ê»Ia"} + } + ExemplarCharacters{"[āēīōūaeiouhklmnpwÊ»]"} + Languages{ + haw{"ʻōlelo HawaiÊ»i"} + } + LocaleScript{ + "Latn", + } + Version{"1.15"} + calendar{ + gregorian{ + dayNames{ + format{ + abbreviated{ + "LP", + "P1", + "P2", + "P3", + "P4", + "P5", + "P6", + } + wide{ + "Lāpule", + "PoÊ»akahi", + "PoÊ»alua", + "PoÊ»akolu", + "PoÊ»ahā", + "PoÊ»alima", + "PoÊ»aono", + } + } + } + monthNames{ + format{ + abbreviated{ + "Ian.", + "Pep.", + "Mal.", + "Ê»Ap.", + "Mei", + "Iun.", + "Iul.", + "Ê»Au.", + "Kep.", + "Ê»Ok.", + "Now.", + "Kek.", + } + wide{ + "Ianuali", + "Pepeluali", + "Malaki", + "Ê»Apelila", + "Mei", + "Iune", + "Iulai", + "Ê»Aukake", + "Kepakemapa", + "Ê»Okakopa", + "Nowemapa", + "Kekemapa", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/haw_US.txt b/icuSources/data/xml/experimental/haw_US.txt new file mode 100644 index 00000000..e6c068a5 --- /dev/null +++ b/icuSources/data/xml/experimental/haw_US.txt @@ -0,0 +1,40 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/haw_US.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/haw_US.xml + */ +haw_US{ + MeasurementSystem:int{1} + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;(¤#,##0.00)", + "#,##0%", + "#E0", + } + PaperSize:intvector{ + 279, + 216, + } + Version{"1.15"} + calendar{ + gregorian{ + DateTimePatterns{ + "h:mm:ss a z", + "h:mm:ss a z", + "h:mm:ss a", + "h:mm a", + "EEEE, d MMMM yyyy", + "d MMMM yyyy", + "d MMM yyyy", + "d/M/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/iu.txt b/icuSources/data/xml/experimental/iu.txt new file mode 100644 index 00000000..da5b37a5 --- /dev/null +++ b/icuSources/data/xml/experimental/iu.txt @@ -0,0 +1,82 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/iu.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/iu.xml + */ +iu{ + ExemplarCharacters{ + "[ᐃ-ᐆᐊᐋᐱ-ᐴᐸᐹᑉᑎ-ᑑᑕᑖᑦᑭ-ᑰᑲᑳᒃᒋ-ᒎᒐ-ᒑᒡᒥ-ᒨᒪᒫᒻᓂ-ᓅᓇᓈᓐᓕ-ᓘᓚᓛᓪᓯ-ᓲᓴᓵᔅᔨ-ᔫᔭᔮᔾᕆ-ᕉᕋ-ᕌᕐᕕ-ᕚᕝᕿ-ᖃᖅ" + "ᖏᖑ-ᖖᖠ-ᖦᙱ-ᙶ]" + } + Languages{ + iu{"ᐃᓄᒃᑎᑐᑦ ᑎᑎᕋᐅᓯᖅ"} + } + LocaleScript{ + "Cans", + } + Version{"1.15"} + calendar{ + gregorian{ + dayNames{ + format{ + abbreviated{ + "ᓈᑦᓰᖑᔭ", + "ᓇᒡᒐᔾᔭᐅ", + "ᓇᒡᒐᔾᔭᐅᓕᖅᑭ", + "ᐱᖓᑦᓯᖅ", + "ᓯᑕᒻᒥᖅ", + "ᑕᓪᓕᕐᒥᖅ", + "ᓈᑦᓰᖑᔭᓕᖅᕿ", + } + wide{ + "ᓈᑦᓰᖑᔭ", + "ᓇᒡᒐᔾᔭᐅ", + "ᓇᒡᒐᔾᔭᐅᓕᖅᑭ", + "ᐱᖓᑦᓯᖅ", + "ᓯᑕᒻᒥᖅ", + "ᑕᓪᓕᕐᒥᖅ", + "ᓈᑦᓰᖑᔭᓕᖅᕿ", + } + } + } + monthNames{ + format{ + abbreviated{ + "ᔭᓐᓄᐊᓕ", + "ᕕᕝᕗᐊᓕ", + "ᒫᑦᓯ", + "ᐊᐃᑉᐳᓗ", + "ᒪᐃ", + "ᔫᓂ", + "ᔪᓚᐃ", + "ᐊᐅᒡᒍᓯ", + "ᓰᑦᑏᕝᕙ", + "ᐆᑦᑑᕝᕙ", + "ᓅᕙᐃᕝᕙ", + "ᑏᓰᕝᕙ", + } + wide{ + "ᔭᓐᓄᐊᓕ", + "ᕕᕝᕗᐊᓕ", + "ᒫᑦᓯ", + "ᐊᐃᑉᐳᓗ", + "ᒪᐃ", + "ᔫᓂ", + "ᔪᓚᐃ", + "ᐊᐅᒡᒍᓯ", + "ᓰᑦᑏᕝᕙ", + "ᐆᑦᑑᕝᕙ", + "ᓅᕙᐃᕝᕙ", + "ᑏᓰᕝᕙ", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/ka.txt b/icuSources/data/xml/experimental/ka.txt new file mode 100644 index 00000000..ed329a49 --- /dev/null +++ b/icuSources/data/xml/experimental/ka.txt @@ -0,0 +1,234 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/ka.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/ka.xml + */ +ka{ + Countries{ + AD{"ანდორა"} + AE{"არაბეთის გაერთიანებული ემირატები"} + AF{"ავღანეთი"} + AG{"ანტიგუა და ბარბუდა"} + AL{"ალბანეთი"} + AM{"სასომხეთი"} + AO{"ანგოლა"} + AR{"არგენტინა"} + AT{"ავსტრია"} + AU{"ავსტრალია"} + AZ{"აზერბაიჯანი"} + BA{"ბოსნია და ჰერცეგოვინა"} + BB{"ბარბადოსი"} + BD{"ბანგლადეში"} + BE{"ბელგია"} + BF{"ბურკინა-ფასო"} + BG{"ბულგარეთი"} + BH{"ბაჰრეინი"} + BI{"ბურუნდი"} + BJ{"ბენინი"} + BN{"ბრუნეი"} + BO{"ბოლივია"} + BR{"ბრაზილია"} + BS{"ბაჰამის კუნძულები"} + BT{"ბუტანი"} + BW{"ბოტსვანა"} + BY{"ბელორუსია"} + BZ{"ბელიზი"} + CA{"კანადა"} + CF{"ცენტრალური აფრიკის რესპუბლიკა"} + CG{"კონგო"} + CH{"შვეიცარია"} + CI{"სპილოს ძვლის სანაპირო"} + CL{"ჩილი"} + CM{"კამერუნი"} + CN{"ჩინეთი"} + CO{"კოლუმბია"} + CR{"კოსტა-რიკა"} + CS{"სერბია"} + CU{"კუბა"} + CV{"კაბო-ვერდე"} + CY{"კვიპროსი"} + CZ{"ჩეხეთის რესპუბლიკა"} + DE{"გერმანია"} + DJ{"ჯიბუტი"} + DK{"დანია"} + DM{"დომინიკა"} + DO{"დომინიკანის რესპუბლიკა"} + DZ{"ალჟირი"} + EC{"ეკვადორი"} + EE{"ესტონეთი"} + EG{"ეგვიპტე"} + EH{"დასავლეთი საჰარა"} + ER{"ერიტრეა"} + ES{"ესპანეთი"} + ET{"ეთიოპია"} + FI{"ფინეთი"} + FJ{"ფიჯი"} + FM{"მიკრონეზია"} + FR{"საფრანგეთი"} + GA{"გაბონი"} + GD{"გრენადა"} + GE{"საქართველო"} + GH{"განა"} + GM{"გამბია"} + GN{"გვინეა"} + GQ{"ეკვატორული გვინეა"} + GR{"საბერძნეთი"} + GT{"გვატემალა"} + GW{"გვინეა-ბისაუ"} + GY{"გაიანა"} + HN{"ჰონდურასი"} + HR{"ჰორვატია"} + HT{"ჰაიტი"} + HU{"უნგრეთი"} + ID{"ინდონეზია"} + IE{"ირლანდია"} + IL{"ისრაელი"} + IN{"ინდოეთი"} + IQ{"ერაყი"} + IR{"ირანი"} + IS{"ისლანდია"} + IT{"იტალია"} + JM{"იამაიკა"} + JO{"იორდანია"} + JP{"იაპონია"} + KE{"კენია"} + KG{"ყირგიზეთი"} + KH{"კამბოჯა"} + KI{"კირიბატი"} + KM{"კომორის კუნძულები"} + KN{"სენტ-კიტსი და ნევისი"} + KP{"ჩრდილოეთ კორეა"} + KR{"სამხრეთ კორეა"} + KW{"კუვეიტი"} + KZ{"ყაზახეთი"} + LA{"ლაოსი"} + LB{"ლიბანი"} + LC{"სენტ-ლუსია"} + LI{"ლიხტენშტეინი"} + LK{"შრი-ლანკა"} + LR{"ლიბერია"} + LS{"ლესოტო"} + LT{"ლიტვა"} + LU{"ლუქსემბურგი"} + LV{"ლატვია"} + LY{"ლიბია"} + MA{"მაროკო"} + MC{"მონაკო"} + MD{"მოლდოვა"} + MG{"მადაგასკარი"} + MH{"მარშალის კუნძულები"} + MK{"მაკედონია"} + ML{"მალი"} + MM{"მიანმარი"} + MN{"მონღოლეთი"} + MR{"მავრიტანია"} + MT{"მალტა"} + MU{"მავრიკია"} + MV{"მალდივის კუნძულები"} + MW{"მალავი"} + MX{"მექსიკა"} + MY{"მალაიზია"} + MZ{"მოზამბიკი"} + NA{"ნამიბია"} + NE{"ნიგერი"} + NG{"ნიგერია"} + NI{"ნიკარაგუა"} + NL{"ნიდერლანდები"} + NO{"ნორვეგია"} + NP{"ნეპალი"} + NR{"ნაურუ"} + NZ{"ახალი ზელანდია"} + OM{"ომანი"} + PA{"პანამა"} + PE{"პერუ"} + PG{"პაპუა-ახალი გვინეა"} + PH{"ფილიპინები"} + PK{"პაკისტანი"} + PL{"პოლონეთი"} + PT{"პორტუგალია"} + PW{"პალაუ"} + PY{"პარაგვაი"} + QA{"კატარი"} + RO{"რუმინეთი"} + RU{"რუსეთი"} + RW{"რუანდა"} + SA{"საუდის არაბეთი"} + SB{"სოლომონის კუნძულები"} + SC{"სეიშელის კუნძულები"} + SD{"სუდანი"} + SE{"შვეცია"} + SG{"სინგაპური"} + SI{"სლოვენია"} + SK{"სლოვაკეთი"} + SL{"სიერა-ლეონე"} + SM{"სან-მარინო"} + SN{"სენეგალი"} + SO{"სომალი"} + SR{"სურინამი"} + ST{"საო-ტომე და პრინსიპი"} + SV{"სალვადორი"} + SY{"სირია"} + SZ{"სვაზილენდი"} + TD{"ჩადი"} + TG{"ტოგო"} + TH{"ტაილანდი"} + TJ{"ტაჯიკეთი"} + TM{"თურქმენეთი"} + TN{"ტუნისი"} + TO{"ტონგა"} + TR{"თურქეთი"} + TT{"ტრინიდადი და ტობაგო"} + TV{"ტუვალუ"} + TW{"ტაივანი"} + TZ{"ტანზანია"} + UA{"უკრაინა"} + UG{"უგანდა"} + US{"ამერიკის შეერთებული შტატები"} + UY{"ურუგვაი"} + UZ{"უზბაკეთი"} + VA{"ვატიკანი"} + VC{"სენტ-ვინსენტი და გრენადინები"} + VE{"ვენესუელა"} + VN{"ვიეტნამი"} + VU{"ვანუატუ"} + WS{"სამოა"} + YE{"იემენი"} + ZA{"სამხრეთ აფრიკა"} + ZM{"ზამბია"} + ZW{"ზიმბაბვე"} + } + Currencies{ + GEL{ + "Lari", + "GEL", + } + } + ExemplarCharacters{"[Ⴀ-Ⴥა-ჺჼⴀ-â´¥]"} + Languages{ + ka{"ქართული"} + } + LocaleScript{ + "Geor", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.22"} +} diff --git a/icuSources/data/xml/experimental/ka_GE.txt b/icuSources/data/xml/experimental/ka_GE.txt new file mode 100644 index 00000000..117b2be9 --- /dev/null +++ b/icuSources/data/xml/experimental/ka_GE.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/ka_GE.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/ka_GE.xml + */ +ka_GE{ + /** + * Draft + */ + Version{"1.18"} +} diff --git a/icuSources/data/xml/experimental/km.txt b/icuSources/data/xml/experimental/km.txt new file mode 100644 index 00000000..d2ce1771 --- /dev/null +++ b/icuSources/data/xml/experimental/km.txt @@ -0,0 +1,427 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/km.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/km.xml + */ +km{ + Countries{ + AD{"អានដូរ៉ា"} + AE{"អេមីរ៉ែទអារ៉ាប់រួម"} + AF{"អាហ្វហ្គានីស្ថាន"} + AL{"អាល់បានី"} + AM{"អារមេនី"} + AO{"អង់ហ្គោឡា"} + AR{"អាហ្សង់ទីន"} + AT{"អូទ្រីស"} + AU{"អូស្ត្រាលី"} + AZ{"អាហ៊្សែរបែហ្សង់"} + BA{"បូស្ន៉ី"} + BB{"បារបាដូស"} + BD{"បង់ក្លាដេស្ហ"} + BE{"បែលហ្ស៉ិក"} + BF{"ប៊ូរគីណាហ្វាសូ"} + BG{"ប៊ុលហ្គារី"} + BH{"បារ៉ែន"} + BI{"ប៊ូរុនឌី"} + BJ{"បេណាំង"} + BN{"ប៊្រុយណេ"} + BO{"បូលីវី"} + BR{"ប្រេស៊ីល"} + BS{"បាហាម៉ា"} + BT{"ប៊ូតាន"} + BW{"បុតស្វាណា"} + BY{"បេឡារុស្ស"} + BZ{"បេលីហ្ស"} + CA{"កាណាដា"} + CF{"សាធារណរដ្ឋអាហ្វ្រិកកណ្ដាល"} + CG{"កុងហ្គោ"} + CH{"ស្វីស"} + CI{"កូដឌីវ័រ"} + CL{"ឈីលី"} + CM{"កាមេរូន"} + CN{"ចិន"} + CO{"កូឡុំប៊ី"} + CR{"កូស្តារីកា"} + CU{"គុយបា"} + CV{"កាបវែរ"} + CY{"ស៉ីពរ៍"} + CZ{"សាធារណរដ្ឋឆេក"} + DE{"អាល្លឺម៉ង់"} + DJ{"ហ្ស៉ីបូទី"} + DK{"ដាណឺម៉ាក"} + DM{"ដូមីនីកា"} + DO{"សាធារណរដ្ឋដូមីនីកែន"} + DZ{"អាល់ហ្សេរី"} + EC{"អេក្វាឌ័រ"} + EE{"អេស្តូនី"} + EG{"អេហ្ស៉ីប"} + EH{"សាហារ៉ាខាងលិច"} + ER{"អេរីទ្រា"} + ES{"អេស្ប៉ាញ"} + ET{"អេត្យូពី"} + FI{"ហ្វាំងឡង់"} + FJ{"ហ្វ៉ីហ្ស៉ី"} + FM{"មិក្រូនេស៊ី"} + FR{"បារាំង"} + GA{"ហ្គាបុង"} + GE{"ហ្សកហ្ស៉ី"} + GH{"ហ្កាណា"} + GM{"ហ្គាំប៊ី"} + GN{"ហ្គីណេ"} + GQ{"ហ្គីណេអេក្វាទ័រ"} + GR{"ក្រិច"} + GT{"ហ្គាតេម៉ាឡា"} + GW{"ហ្គីណេប៊ីសូ"} + GY{"ហ្គីយ៉ាណា"} + HK{"ហុងកុង"} + HN{"ហុងឌួរ៉ាស់"} + HR{"ក្រូអាស៊ី"} + HT{"ហៃទី"} + HU{"ហុងគ្រី"} + ID{"ឥណ្ឌូនេស៊ី"} + IE{"អៀរឡង់"} + IL{"អ៊ីស្រាអែល"} + IN{"ឥណ្ឌា"} + IQ{"អ៊ីរ៉ាក់"} + IR{"អ៊ីរ៉ង់"} + IS{"អ៉ីស្លង់"} + IT{"អ៊ីតាលី"} + JM{"ហ្សាម៉ាអ៉ិគ"} + JO{"ហ៊្សកដានី"} + JP{"ជប៉ុន"} + KE{"កេនយ៉ា"} + KG{"គៀរហ្គីស្តង់"} + KH{"កម្ពុជា"} + KI{"គិរិបាទី"} + KM{"កុំម៉ូរ៉ូស"} + KP{"សាធារណរដ្ឋប្រជាធិបតេយ្យប្រជាមានិតកូរ៉េ"} + KR{"សាធារណរដ្ឋកូរ៉េ"} + KW{"គុយវ៉ែត"} + KZ{"កាហ្សាក់ស្តាង់់"} + LA{"ឡាវ"} + LB{"លីបង់"} + LI{"លិចទេនស្តែន"} + LK{"ស្រីលង្កា"} + LR{"លីបេរីយ៉ា"} + LS{"លើសូតូ"} + LT{"លីទុយអានី"} + LU{"លុចហ្សំបួរ"} + LV{"ឡាតវីយ៉ា"} + LY{"លីប៊ី"} + MA{"ម៉ារ៉ុក"} + MC{"ម៉ូណាកូ"} + MD{"សាធារណរដ្ឋម៉ុលដាវី"} + MG{"ម៉ាដាហ្កាស្ការ"} + MK{"ម៉ាសេដន"} + ML{"ម៉ាលី"} + MM{"មីយ៉ាន់ម៉ា"} + MN{"ម៉ុងហ្គោលី"} + MR{"ម៉ូរីតានី"} + MT{"ម៉ាល់តា"} + MU{"ម៉ូរីទុស"} + MX{"ម៉ិចសិក"} + MY{"ម៉ាលេស៉ី"} + MZ{"ម៉ូហ្សាំប៊ិក"} + NA{"ណាមីប៊ី"} + NE{"នីហ្សេរ"} + NG{"នីហ្សេរីយ៉ា"} + NI{"នីការ៉ាហ្គ័រ"} + NL{"ហូល្លង់"} + NO{"ន័រវែស"} + NP{"នេប៉ាល់"} + NZ{"នូវែលហ្សេឡង់"} + OM{"អូម៉ង់"} + PA{"ប៉ាណាម៉ា"} + PE{"ប៉េរូ"} + PG{"ប៉ាពូអានូវែលហ្គីណេ"} + PH{"ហ្វ៉ីលីពីន"} + PK{"ប៉ាគីស្ថាន"} + PL{"ប៉ូលូញ"} + PR{"ព័រតូរីកូ"} + PS{"ប៉ាលេស្ទីន"} + PT{"ព័រទុយហ្កាល់"} + PY{"ប៉ារ៉ាហ្គាយ"} + QA{"កាតារ"} + RO{"រូម៉ានី"} + RU{"រូស្ស៊ី"} + RW{"រវ៉ាន់ដា"} + SA{"អារ៉ាប៊ីសាអ៊ូឌីត"} + SC{"សីសែល"} + SD{"ស៊ូដង់"} + SE{"ស៊ុយអែដ"} + SG{"សិង្ហបុរី"} + SI{"ស្លូវេនី"} + SK{"ស្លូវ៉ាគី"} + SL{"សេរ៉ាឡេអូន"} + SN{"សេនេហ្កាល់"} + SO{"សូម៉ាលី"} + SR{"សូរីណាម"} + SV{"អែលសាល់វ៉ាឌ័រ"} + SY{"ស៊ីរី"} + SZ{"សូហ្ស៉ីឡង់"} + TD{"ឆាដ"} + TG{"តូហ្គូ"} + TH{"ថៃ"} + TJ{"តាដហ្ស៉ីគីស្តង់"} + TL{"ទីម័រខាងកើត"} + TM{"ទួគមេនីស្តង់"} + TN{"ទុយនេស៊ី"} + TO{"តុងហ្គា"} + TR{"ទួរគី"} + TT{"ទ្រីនីដាដនឹងតូបាហ្គោ"} + TW{"តៃវ៉ាន់"} + TZ{"តង់ហ្សានី"} + UA{"អ៊ុយក្រែន"} + UG{"អ៊ូហ្កង់ដា"} + US{"សហរដ្ឋអាមេរិក"} + UY{"អ៊ុយរុយហ្គាយ"} + UZ{"អ៊ូហ្សបេគីស្តង់"} + VA{"វ៉ាទីកង់"} + VE{"វេនេហ្ស៊ុយឡា"} + VN{"វៀតណាម"} + WS{"សាមូអា"} + YE{"យេមែន"} + ZA{"អាហ្វ្រិកខាងត្បូង"} + ZM{"ហ្សាំប៊ី"} + ZW{"ហ្ស៊ីមបាបវ៉េ"} + } + Currencies{ + KHR{ + "៛", + "Riel", + } + } + ExemplarCharacters{"[ក-្​]"} + Languages{ + aa{"ភាសាអាហ្វារ"} + ae{"ភាសាអាវែស្តង់"} + af{"ភាសាអាហ្វ្រីកាអាន"} + an{"ភាសាអារ៉ាហ្គោន"} + ar{"ភាសាអារ៉ាប់"} + ay{"ភាសាអីម៉ារ៉ា"} + az{"ភាសាអាហ៊្សែរបែហ្សង់"} + be{"ភាសាបេឡារុស្ស"} + bg{"ភាសាប៊ុលហ្ការី"} + bh{"ភាសាបិហារ"} + bm{"ភាសាបាម្បារា"} + bn{"ភាសាបេន្កាលី"} + bo{"ភាសាទីបេ"} + ca{"ភាសាកាតាឡាន"} + cs{"ភាសាឆេក"} + da{"ភាសាដាណឺម៉ាក"} + de{"ភាសាអាល្លឺម៉ង់"} + dz{"ភាសាប៊ូតាន"} + el{"ភាសាក្រិច"} + en{"ភាសាអង់គ្លេស"} + eo{"ភាសាអេស្ពេរ៉ាន្ទោ"} + es{"ភាសាអេស្ប៉ាញ"} + et{"ភាសាអេស្តូនី"} + eu{"ភាសាបាស្កេ"} + fi{"ភាសាហ្វាំងឡង់"} + fj{"ហ្វ៉ីហ្ស៉ី"} + fr{"ភាសាបារាំង"} + ga{"ភាសាហ្កែលិគ"} + gd{"ភាសាហ្កែលិគ"} + gl{"ភាសាហ្កាលីស៉ី"} + gn{"ភាសាហ្កួរ៉ានី"} + gu{"ភាសាហ្កុយ៉ារាទី"} + he{"ភាសាហេប្រិ"} + hi{"ភាសាហ៉ិនឌី"} + hu{"ភាសាហុងគ្រី"} + hy{"ភាសាអារមេនី"} + id{"ភាសាឥណ្ឌូនេស៊ី"} + is{"ភាសាអ៉ីស្លង់"} + it{"ភាសាអ៊ីតាលី"} + ja{"ភាសាជប៉ុន"} + jv{"ភាសាយ៉ាវា"} + ka{"ភាសាហ្សកហ្ស៉ី"} + kk{"ភាសាកាហ្សាក់ស្តង់់"} + km{"ភាសាខ្មែរ"} + kn{"ភាសាកិណាដា"} + ko{"ភាសាកូរ៉េ"} + ku{"ភាសាឃឺដ"} + ky{"ភាសាគៀរហ្គីស្តង់"} + la{"ភាសាឡាតំាង"} + lo{"ភាសាឡាវ"} + lt{"ភាសាលីទុយអានី"} + lv{"ភាសាឡាតវីយ៉ា"} + mg{"ភាសាម៉ាដាហ្កាសការ"} + mi{"ភាសាម៉ោរី"} + mk{"ភាសាម៉ាសេដូនី"} + ml{"ភាសាម៉ាឡាឡាយ៉ាន"} + mn{"ភាសាម៉ុងហ្គោលី"} + mo{"ភាសាម៉ុលដាវី"} + mr{"ភាសាម៉ារាធី"} + ms{"ភាសាម៉ាលេស៉ី"} + mt{"ភាសាម៉ាល់តា"} + ne{"ភាសានេប៉ាល់"} + nl{"ភាសាហុល្លង់"} + no{"ភាសាន័រវែស"} + or{"ភាសាអូរីយ៉ា"} + pa{"ភាសាពូនយ៉ាប៊ី"} + pl{"ភាសាប៉ូឡូញ"} + pt{"ភាសាព័រទុយហ្កាល់"} + qu{"ភាសាកេទ្ជូអា"} + rn{"ភាសារូន្ឌី"} + ro{"ភាសារូម៉ានី"} + ru{"ភាសាรัរូស្ស៉ី"} + sa{"ភាសាសំស្ក្រឹត"} + sd{"ភាសាស៉ីន្ដី"} + sk{"ភាសាស្លូវ៉ាគី"} + sl{"ភាសាស្លូវ៉ានី"} + sm{"ភាសាសាមូអា"} + so{"ភាសាសូម៉ាលី"} + sq{"ភាសាអាល់បានី"} + su{"ភាំសាស៊ូដង់"} + sv{"ភាសាស៊ុយអែដ"} + sw{"ភាសាស្វាហ៉ីលី"} + ta{"ភាសាតាមីល"} + te{"ភាសាតេលូហ្គូ"} + tg{"ភាសាតាដហ្ស៉ីគីស្តង់"} + th{"ភាសាថៃ"} + tk{"ភាសាទួគមេនីស្តង់"} + to{"ភាសាតុងហ្គោ"} + tr{"ភាសាទួរគី"} + tt{"ភាសាតាតារ"} + uk{"ភាសាអ៊ុយក្រែន"} + ur{"ភាសាអ៊ូរ្ឌូ"} + uz{"ភាសាអ៊ូហ្សបេគីស្តង់"} + vi{"ភាសាវៀតណាម"} + xh{"ភាសាឃសា"} + yi{"ភាសាយីឌីហ្ស"} + yo{"ភាសាយរូបា"} + za{"ភាសាចួង"} + zh{"ភាសាចិន"} + zu{"ភាសាហ្ស៉ូលូ"} + } + LocaleScript{ + "Khmr", + } + NumberElements{ + ",", + ".", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.26"} + calendar{ + buddhist{ + DateTimePatterns{ + "H' ម៉ោង 'm' នាទី 'ss' វិនាទី​'", + "H' ម៉ោង 'm' នាទី'", + "H:mm:ss", + "H:mm", + "EEEE' ថ្ងៃ 'd' ខែ 'MMMM' ឆ្នាំ ' yyyy", + "EEEE' ថ្ងៃ 'd' ខែ 'MMMM' ឆ្នាំ ' yyyy", + "d MMMM yyyy", + "d/M/yyyy", + "{1}, {0}", + } + eras{ + abbreviated{ + "ព.ស.", + } + } + } + gregorian{ + AmPmMarkers{ + "ព្រឹក", + "ល្ងាច", + } + DateTimeElements:intvector{ + 2, + 1, + } + DateTimePatterns{ + "H' ម៉ោង 'm' នាទី 'ss' វិនាទី​' z", + "H' ម៉ោង 'm' នាទី 'ss' វិនាទី​'", + "H:mm:ss", + "H:mm", + "EEEE' ថ្ងៃ 'd' ខែ 'MMMM' ឆ្នាំ ' yyyy", + "EEEE' ថ្ងៃ 'd' ខែ 'MMMM' ឆ្នាំ ' yyyy", + "d MMMM yyyy", + "d/M/yyyy", + "{1}, {0}", + } + dayNames{ + format{ + abbreviated{ + "អា", + "ច", + "អ", + "ពុ", + "ព្រ", + "សុ", + "ស", + } + wide{ + "ថ្ងៃ​អាទិត្យ", + "ថ្ងៃ​ច័ន្ទ", + "ថ្ងៃ​អង្គារ", + "ថ្ងៃ​ពុធ", + "ថ្ងៃ​ព្រហស្បតិ៍", + "ថ្ងៃ​សុក្រ", + "ថ្ងៃ​សៅរ៍", + } + } + } + eras{ + abbreviated{ + "មុន​គ.ស.", + "គ.ស.", + } + wide{ + "មុន​គ្រិស្តសករាជ", + "គ្រិស្តសករាជ", + } + } + monthNames{ + format{ + abbreviated{ + "១", + "២", + "៣", + "៤", + "៥", + "៦", + "៧", + "៨", + "៩", + "១០", + "១១", + "១២", + } + wide{ + "មករា", + "កុម្ភៈ", + "មិនា", + "មេសា", + "ឧសភា", + "មិថុនា", + "កក្កដា", + "សីហា", + "កញ្ញា", + "តុលា", + "វិច្ឆិកា", + "ធ្នូ", + } + } + } + } + } + localPatternChars{"GyMdkHmsSEDFwWahKzYeugXZ"} +} diff --git a/icuSources/data/xml/experimental/km_KH.txt b/icuSources/data/xml/experimental/km_KH.txt new file mode 100644 index 00000000..e01ec8f8 --- /dev/null +++ b/icuSources/data/xml/experimental/km_KH.txt @@ -0,0 +1,26 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/km_KH.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/km_KH.xml + */ +km_KH{ + NumberPatterns{ + "#,##0.###", + "#,##0.00¤", + "#,##0%", + "#E0", + } + Version{"1.16"} + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"'"} + quotationStart{"'"} + } +} diff --git a/icuSources/data/xml/experimental/ky.txt b/icuSources/data/xml/experimental/ky.txt new file mode 100644 index 00000000..9c1c27c5 --- /dev/null +++ b/icuSources/data/xml/experimental/ky.txt @@ -0,0 +1,44 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/ky.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/ky.xml + */ +ky{ + Countries{ + KG{"Кыргызстан"} + } + Currencies{ + KGS{ + "сом", + "KGS", + } + } + ExemplarCharacters{"[а-я і є ї ґ]"} + Languages{ + ky{"Кыргыз"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.16"} +} diff --git a/icuSources/data/xml/experimental/ky_KG.txt b/icuSources/data/xml/experimental/ky_KG.txt new file mode 100644 index 00000000..c4af8bcb --- /dev/null +++ b/icuSources/data/xml/experimental/ky_KG.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/ky_KG.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/ky_KG.xml + */ +ky_KG{ + /** + * Draft + */ + Version{"1.18"} +} diff --git a/icuSources/data/xml/experimental/lo.txt b/icuSources/data/xml/experimental/lo.txt new file mode 100644 index 00000000..c36098d7 --- /dev/null +++ b/icuSources/data/xml/experimental/lo.txt @@ -0,0 +1,466 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/lo.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/lo.xml + */ +lo{ + Countries{ + AD{"ອັນດໍລາ"} + AE{"ສະຫະລັດອາຫລັບເອມິເລດ"} + AF{"ອັຟການິດສະຖານ"} + AI{"ອັນກິລາ"} + AL{"ແອລເບເນຍ"} + AM{"ອາມິເນຍ"} + AN{"ເນເທີແລນແອນເທິນ"} + AO{"ອັນໂກລາ"} + AR{"ອາເຈນຕິນາ່"} + AT{"ອົອດສະເຕຼຍ"} + AU{"ອົອດສະຕາລີ"} + AW{"ອາລູບາ"} + AZ{"ອາເຊີໄບຈັນ"} + BA{"ບັອດສເນຍ ແລະ ເຮີດໂກວິເນຍ"} + BB{"ບາບາຄັອດ"} + BD{"ບັງກະລາເທດ"} + BE{"ເບວຢຽມ"} + BF{"ເບີກິນາຟາໂຊ"} + BG{"ບັງກາເລຍ"} + BH{"ບາເລນ"} + BI{"ບູລັນຕິ"} + BJ{"ເບນິນ"} + BM{"ເບີມິວດາ"} + BN{"ບູຮໄນ"} + BO{"ໂບລິເວຍ"} + BR{"ບຼາຊິວ"} + BS{"ບາຮາມາສ"} + BT{"ພູຖານ"} + BW{"ບອັດສະວານາ"} + BY{"ເບນລາຮັສ"} + BZ{"ເບລິຊ"} + CA{"ການາດາ"} + CF{"ສາທາລະນະລັດອັບຟຼິກກາກາງ"} + CG{"ຄອງໂກ"} + CH{"ສະວິດເຊີແລນ"} + CI{"ຝັ່ງທະເລໄອວໍລິ"} + CL{"ຊິສິ"} + CM{"ຄາເມລູນ"} + CN{"ຈີນ"} + CO{"ໂຄລຳເບຍ"} + CR{"ຄອສຕາລິກາ"} + CS{"ເຊີເບຍ"} + CU{"ຄິວບາ"} + CV{"ເຄບວອດ"} + CY{"ໄຊປັຼດ"} + CZ{"ສາທາລະນະລັດເຊັກ"} + DE{"ເຢຍລະມັນ"} + DJ{"ຄິໂບຕິ"} + DK{"ເດນມາກ"} + DM{"ໂດເມນິກາ"} + DO{"ສາທາລະນະລັດໂດມິນິກັນ"} + DZ{"ແອລຈິເລຍ"} + EC{"ເອກວາດໍ"} + EE{"ເອສໂຕເນຍ"} + EG{"ອີຢິບ"} + EH{"ຊາຮາລາຕະເວັນຕົກ"} + ER{"ອິນຊີ"} + ES{"ສະເປນ"} + ET{"ເອທິໂອເປຍ"} + FI{"ຟິນແລນ"} + FJ{"ຟິຈິ"} + FM{"ໄມໂຄນິເຊຍ"} + FR{"ຝລັ່ງ"} + GA{"ກາບອນ"} + GB{"ສະຫະລາດຊະອານາຈັກ"} + GE{"ຈໍເຈຍ"} + GF{"ເຟັນສກິວນາ"} + GH{"ການ່າ"} + GM{"ແກມເບຍ"} + GN{"ກິວນີ"} + GP{"ກົວເດີລູບ"} + GQ{"ເອຄົວໂທເລຍລະກິນີ"} + GR{"ກິຼກ"} + GT{"ກົວເຕມາລາ"} + GW{"ກິວນີ-ບິສໂຊ"} + GY{"ກູຢານາ"} + HK{"ຮ່ອງກົງ"} + HN{"ອວນຄູຣັສ"} + HR{"ໂຄເອເຊຍ"} + HT{"ໄອທີ"} + HU{"ຮົງກາຣີ"} + ID{"ອິນໂດເນເຊຍ"} + IE{"ໄອແລນ"} + IL{"ອິສລະເອວ"} + IN{"ອິນເດຍ"} + IQ{"ອີລັກ"} + IR{"ອີລ່ານ"} + IS{"ໄອສແລນ"} + IT{"ອິຕາລີ"} + JM{"ຈາໄມກາ"} + JO{"ຈໍແດນ"} + JP{"ຍີ່ປຸ່ນ"} + KE{"ເຄນຢ່າ"} + KG{"ເດີກິດສະຖານ"} + KH{"ກຳປູເຈຍ"} + KI{"ຄີລິບາດ"} + KM{"ໂຄໂມຣອດ"} + KP{"ເກົາຫລີເໜືອ"} + KR{"ເກົາຫລີໃຕ້"} + KW{"ຄູເວດ"} + KZ{"ຄາຊັດສະຖານ"} + LA{"ລາວ"} + LB{"ເລບານອນ"} + LI{"ໄລເທນສະໄຕ"} + LK{"ສີລັງກາ"} + LR{"ລິເບີເລຍ"} + LS{"ເລໂຊໂທ"} + LT{"ລິເທີເນຍ"} + LU{"ລຸກແຊມເບີກ"} + LV{"ລຼາດເວຍ"} + LY{"ລິເບຍ"} + MA{"ໂມລັອກໂຄ"} + MC{"ໂມນາໂກ"} + MD{"ໂມນໂຄວາ"} + MG{"ມາຄາກັສກາ"} + MK{"ແມຊິໂຄເນຍ"} + ML{"ມາລິ"} + MM{"ສະຫະພາບພະມ້າ"} + MN{"ມົງໂກລີ"} + MO{"ມາເກົ້າ"} + MQ{"ມາຕິນິກ"} + MR{"ມໍລິກທາເນຍ"} + MS{"ມອນເຊີລາດ"} + MT{"ມັນຕາ"} + MU{"ມໍຣິຕຽດ"} + MX{"ແມັກຊິໂກ"} + MY{"ມາເລເຊຍ"} + MZ{"ໂມແຊມບິກ"} + NA{"ນາມິເບຍ"} + NC{"ນິວຄາລິໂຄເນຍ"} + NE{"ໄນເຈີ"} + NG{"ໄນຈີເລຍ"} + NI{"ນິຄາລາກົວ"} + NL{"ເນເທີແລນ"} + NO{"ນໍເວ"} + NP{"ເນປານ"} + NU{"ນີຢູ"} + NZ{"ນິວຊີແລນ"} + OM{"ໂອມານ"} + PA{"ປານາມາ"} + PE{"ເປລູ"} + PF{"ເຟັນຣໂພລິນີເຊຍ"} + PG{"ປາປົວນິວກີນີ"} + PH{"ຟິລິປິນ"} + PK{"ປາກິສຖານ"} + PL{"ໂປແລນ"} + PR{"ເປີໂຕລິໂກ"} + PT{"ໂປຕຸກກັນ"} + PY{"ປາລາກວຍ"} + QA{"ກາຕາ"} + RO{"ລູເມເນຍ"} + RU{"ລັດເຊຍ"} + RW{"ລາວັນດາ"} + SA{"ຊາອຸດິອາລະເບຍ"} + SC{"ເຊແຊວ"} + SD{"ຊູດານ"} + SE{"ສະວິເດັນ"} + SG{"ສິງກະໂປ"} + SI{"ສະໂລເວເນຍ"} + SK{"ສະໂລວາເກຍ"} + SL{"ເຊຍລາສິອອນ"} + SN{"ຊິນີກັນ"} + SO{"ໂຊມາເລຍ"} + SR{"ຊູລິນາມິ"} + SV{"ເອຊາວາດໍ"} + SY{"ຊິເລຍ"} + SZ{"ສະວາຊິແລນ"} + TD{"ຊາດ"} + TF{"ອານາເຂດທາງໃຕ້ຂອງຝລັ່ງເສດ"} + TG{"ໂຕໂກ"} + TH{"ປະເທດໄທ"} + TJ{"ທາຈິກິສະຖານ"} + TK{"ໂທກິໂລ"} + TL{"ຕິມໍຕາເວັນອອກ"} + TM{"ເຕຣີກເມນິສະຖານ"} + TN{"ຕູນິເຊຍ"} + TO{"ທອງກ້າ"} + TR{"ຕຸນກີ"} + TT{"ທິນິແດດ"} + TW{"ໄຕ້ຫວັນ"} + TZ{"ທານຊາເນຍ"} + UA{"ຢູເຄຼນ"} + UG{"ອູການດາ"} + US{"ສະຫະລັດອາເມລິກາ"} + UY{"ລູກວຍອຸຣ"} + UZ{"ອຸດເບກິສະຖານ"} + VA{"ວາຕິກັນ"} + VE{"ເວເນຊູເອລາ"} + VG{"ບຣິທິດເວີຈິນໄອແລນ"} + VI{"ຢູເອສເວີຈິນໄອແລນ"} + VN{"ຫວຽດນາມ"} + VU{"ວານົວຕູ"} + YE{"ເຢເມນ"} + YT{"ມາຢອດ"} + ZA{"ອາຟະລິກາໃຕ້"} + ZM{"ແຊມເບຍ"} + ZW{"ຊິມບັບເວ"} + } + Currencies{ + LAK{ + "₭", + "ກີບ", + } + } + ExemplarCharacters{"[ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜໝ​]"} + Languages{ + aa{"ອາຟາ"} + ab{"ແອບຄາເຊຍ"} + af{"ອາຟິຼກກາ"} + am{"ອຳຮາລິດ"} + ar{"ອາລາເບຍ"} + as{"ອັດສຳມິດ"} + ay{"ໄອມາລາ"} + az{"ອາເຊີໄບຈານີ"} + ba{"ບາສສີ"} + be{"ບາຍໂລລັດເຊຍ"} + bg{"ບັງກາເລຍ"} + bh{"ບິຮາລິ"} + bi{"ບິສລາມາ"} + bn{"ບຸນກາລີ"} + bo{"ທິເບດ"} + br{"ບີທັນ"} + ca{"ແຄຕາແລນ"} + co{"ຄໍຊິກ້າ"} + cs{"ເຊັກ"} + cy{"ເວວ"} + da{"ເດນໝາກ"} + de{"ເຢຍລະມັນ"} + dz{"ພູຖານີ"} + el{"ກີກ"} + en{"ອັງກິດ"} + eo{"ເອສເປີລັນໂຕ"} + es{"ສະເປນ"} + et{"ເອສໂຕເນຍ"} + eu{"ແບສ"} + fa{"ເປີເຊຍ"} + fi{"ຟິນ"} + fj{"ຟິຈິ"} + fo{"ຟາໂລດ"} + fr{"ຝັ່ລງເສດ"} + fy{"ຟິນແລນ"} + ga{"ໄອລິດ"} + gd{"ສະກັອດເຄີດ"} + gl{"ກະສິເຊຍ"} + gn{"ກົວລານີ"} + gu{"ກູຈາລາຕີ"} + ha{"ໂອຊາ"} + he{"ຢິວ"} + hi{"ຮິນດິ"} + hr{"ໂຄເອເຊຍ"} + hu{"ຮົງກາລີ"} + hy{"ອາມິເນຍ"} + ia{"ອິນເຕີລິງກວາ"} + id{"ອິນໂດເນເຊຍ"} + ie{"ອິນເຕີລິງ"} + ik{"ໄອນູປຽກ"} + is{"ໄອແລນດິດ"} + it{"ອິຕາສິ"} + iu{"ໄອນຸກຕິຕັກ"} + ja{"ຍີ່ປຸ່ນ"} + jv{"ຊະວາ"} + ka{"ຈໍເຈຍ"} + kk{"ຄາຊັກ"} + kl{"ກຼີນແລນດິດ"} + km{"ຂະເໝນ"} + kn{"ການາດາ"} + ko{"ເກົາຫລີ"} + ks{"ຄັດຊະມີລີ"} + ku{"ເຄີດ"} + ky{"ເຄວກິດ"} + la{"ລາຕິນ"} + ln{"ລິງກາລາ"} + lo{"ລາວ"} + lt{"ລິທົວເນຍ"} + lv{"ແລຕະເວຍ(ເລດທະວິດ)"} + mg{"ມາລາກາຊິ"} + mi{"ເມົາລີ"} + mk{"ແມັກຊິໂດເນຍ"} + ml{"ແມລະຢາລຳ"} + mn{"ມອງໂກຼ"} + mo{"ໂມຄາເວຍ"} + mr{"ມາລາທິ"} + ms{"ມາລາຢູ"} + mt{"ມອນຕາ"} + my{"ພະມ່າ"} + na{"ນໍລູ"} + ne{"ເນປານ"} + nl{"ອໍລັນດາ"} + no{"ນໍເວວ"} + oc{"ອອັກຊິທັນ"} + om{"ໂອໂລໂມ(ອາຟານ)"} + or{"ໂອລິຍາ"} + pa{"ປັນຈາ"} + pl{"ໂປແລນ"} + ps{"ພາສໂຕ(ພຸດໂຕ)"} + pt{"ໂປຕຸເກດ"} + qu{"ຄິວຊົວ"} + rm{"ເລໂຕ-ໂລແມນ"} + rn{"ຄິລັນສີ"} + ro{"ໂລມັນ"} + ru{"ລັດເຊຍ"} + rw{"ຄິນຍາວັນດາ"} + sa{"ສັນສະກິດ"} + sd{"ຊິນດິ"} + sg{"ສັນໂຄ"} + sh{"ເຊີໂບ-ໂຄເອທຽນ"} + si{"ສິງຫລໍ"} + sk{"ສະໂລວັກ"} + sl{"ສະໂລວາເນຍ"} + sm{"ຊາມົວ"} + sn{"ໂຊນາ"} + so{"ໂຊມາສິ"} + sq{"ແອລເບເນຍ"} + sr{"ເຊີເບຍ"} + ss{"ຊິສວາຕິ"} + st{"ເຊໂສໂທ"} + su{"ຊັນດານິສ"} + sv{"ສະວີເດນ"} + sw{"ຊະວາຮິລີ"} + ta{"ທະມິບ"} + te{"ທິລູກູ"} + tg{"ທາຈິດ"} + th{"ໄທ"} + ti{"ທິກິນຢາ"} + tk{"ເຕີກເມນ"} + tl{"ຕາກາລັອກ"} + tn{"ເຊຕະສະວານາ"} + to{"ທອງກ້າ"} + tr{"ຕຸລາກີ"} + ts{"ຊອງກາ"} + tt{"ຕາດ"} + tw{"ທະວີ"} + ug{"ອຸຍກົວ"} + uk{"ຢູເຄຼນ"} + ur{"ອິນດູ"} + uz{"ອຸດສະເບດ"} + vi{"ວຽດນາມ"} + vo{"ໂວລາພຸກ"} + wo{"ວູບ"} + xh{"ໂຊສາ"} + yi{"ຢີຄິດ"} + yo{"ໂຢລູບາ"} + za{"ຈວງ"} + zh{"ຈີນ"} + zu{"ຊູລູ"} + } + LocaleScript{ + "Laoo", + } + Version{"1.29"} + calendar{ + buddhist{ + DateTimePatterns{ + "H' ໂມງ 'm'ນາທີ 'ss' ວິນາທີ'", + "H' ໂມງ 'm'ນາທີ'", + "H:mm:ss", + "H:mm", + "EEEE'ທີ່ 'd MMMM G yyyy", + "d MMMM yyyy", + "d MMM yyyy", + "d/M/yyyy", + "{1}, {0}", + } + eras{ + abbreviated{ + "ພ.ສ.", + } + } + } + gregorian{ + AmPmMarkers{ + "ກ່ອນທ່ຽງ", + "ຫລັງທ່ຽງ", + } + DateTimePatterns{ + "H'ໂມງ 'm'ນາທີ 'ss' ວິນາທີ", + "H' ໂມງ 'm'ນາທີ'", + "H:mm:ss", + "H:mm", + "EEEE'ທີ 'd MMMM G yyyy", + "d MMMM yyyy", + "d MMM yyyy", + "d/M/yyyy", + "{1}, {0}", + } + dayNames{ + format{ + abbreviated{ + "ອາ.", + "ຈ.", + "ອ.", + "ພ.", + "ພຫ.", + "ສກ.", + "ສ.", + } + wide{ + "ວັນອາທິດ", + "ວັນຈັນ", + "ວັນອັງຄານ", + "ວັນພຸດ", + "ວັນພະຫັດ", + "ວັນສຸກ", + "ວັນເສົາ", + } + } + } + eras{ + abbreviated{ + "ປີກ່ອນຄິດສະການທີ່", + "ຄ.ສ.", + } + wide{ + "ປີກ່ອນຄິດສະການທີ່", + "ຄິດສະການທີ່", + } + } + monthNames{ + format{ + abbreviated{ + "ມ.ກ.", + "ກ.ພ.", + "ມີ.ນ.", + "ມ.ສ..", + "ພ.ພ.", + "ມິ.ຖ.", + "ກ.ລ.", + "ສ.ຫ.", + "ກ.ຍ.", + "ຕ.ລ.", + "ພ.ຈ.", + "ທ.ວ.", + } + wide{ + "ມັງກອນ", + "ກຸມພາ", + "ມີນາ", + "ເມສາ", + "ພຶດສະພາ", + "ມິຖຸນາ", + "ກໍລະກົດ", + "ສິງຫາ", + "ກັນຍາ", + "ຕຸລາ", + "ພະຈິກ", + "ທັນວາ", + } + } + } + } + } + localPatternChars{"GanjkHmsSEDFwWxhKzAeugXZ"} +} diff --git a/icuSources/data/xml/experimental/lo_LA.txt b/icuSources/data/xml/experimental/lo_LA.txt new file mode 100644 index 00000000..0cd9e823 --- /dev/null +++ b/icuSources/data/xml/experimental/lo_LA.txt @@ -0,0 +1,23 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/lo_LA.xml +// * +// *************************************************************************** +lo_LA{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00;¤-#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.19"} + delimiters{ + alternateQuotationEnd{"\""} + alternateQuotationStart{"\""} + quotationEnd{"'"} + quotationStart{"'"} + } +} diff --git a/icuSources/data/xml/experimental/mn.txt b/icuSources/data/xml/experimental/mn.txt new file mode 100644 index 00000000..fa70aa82 --- /dev/null +++ b/icuSources/data/xml/experimental/mn.txt @@ -0,0 +1,118 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/mn.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/mn.xml + */ +mn{ + Countries{ + MN{"Монгол улс"} + } + Currencies{ + MNT{ + "₮", + "MNT", + } + } + ExemplarCharacters{"[а-яієїґү]"} + Languages{ + mn{"Монгол хэл"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.18"} + calendar{ + gregorian{ + dayNames{ + format{ + abbreviated{ + "Ня", + "Да", + "Мя", + "Лх", + "Пү", + "Ба", + "Бя", + } + wide{ + "ням", + "даваа", + "мягмар", + "лхагва", + "пүрэв", + "баасан", + "бямба", + } + } + } + eras{ + abbreviated{ + "м.э.Ó©", + "м.э.", + } + wide{ + "манай эриний өмнөх", + "манай эриний", + } + } + monthNames{ + format{ + abbreviated{ + "хул", + "үхэ", + "бар", + "туу", + "луу", + "мог", + "мор", + "хон", + "бич", + "тах", + "нох", + "гах", + } + wide{ + "Хулгана", + "Үхэр", + "Бар", + "Туулай", + "Луу", + "Могой", + "Морь", + "Хонь", + "Бич", + "Тахиа", + "Нохой", + "Гахай", + } + } + } + } + } + delimiters{ + alternateQuotationEnd{"”"} + alternateQuotationStart{"“"} + quotationEnd{"’"} + quotationStart{"‘"} + } +} diff --git a/icuSources/data/xml/experimental/mn_MN.txt b/icuSources/data/xml/experimental/mn_MN.txt new file mode 100644 index 00000000..bba6fbe3 --- /dev/null +++ b/icuSources/data/xml/experimental/mn_MN.txt @@ -0,0 +1,17 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/mn_MN.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/mn_MN.xml + */ +mn_MN{ + /** + * Draft + */ + Version{"1.21"} +} diff --git a/icuSources/data/xml/experimental/sa.txt b/icuSources/data/xml/experimental/sa.txt new file mode 100644 index 00000000..d453a783 --- /dev/null +++ b/icuSources/data/xml/experimental/sa.txt @@ -0,0 +1,50 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sa.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/sa.xml + */ +sa{ + Countries{ + IN{"भारतम्"} + } + Currencies{ + INR{ + "रु", + "INR", + } + } + ExemplarCharacters{"[ँ-ह़-्ॐ-॔ॠ-ॣ०-९ॽ‌‍]"} + Languages{ + sa{"संस्कृत"} + } + LocaleScript{ + "Deva", + } + NumberElements{ + ".", + ",", + ";", + "%", + "०", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + NumberPatterns{ + "#,##,##0.###", + "¤ #,##,##0.00", + "#,##,##0%", + "#E0", + } + Version{"1.18"} +} diff --git a/icuSources/data/locales/ar_IN.txt b/icuSources/data/xml/experimental/sa_IN.txt similarity index 64% rename from icuSources/data/locales/ar_IN.txt rename to icuSources/data/xml/experimental/sa_IN.txt index 0038fbdc..54746b6b 100644 --- a/icuSources/data/locales/ar_IN.txt +++ b/icuSources/data/xml/experimental/sa_IN.txt @@ -1,19 +1,22 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2005 International Business Machines // * Corporation and others. All Rights Reserved. // * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java -// * Source File: ../../../locale/common/main/ar_IN.xml +// * Source File: ../../../../ICU4J/cldr/common/main/sa_IN.xml // * // *************************************************************************** -ar_IN{ +/** + * ICU <specials> source: ./xml/main/sa_IN.xml + */ +sa_IN{ NumberPatterns{ - "##,##,##0.###;-##,##,##0.###", - "¤ ##,##,##0.00;-¤ ##,##,##0.00", - "##,##,##0%", + "#,##,##0.###", + "¤#,##,##0.00", + "#,##,##0%", "#E0", } - Version{"1.2"} + Version{"1.18"} calendar{ gregorian{ DateTimeElements:intvector{ @@ -21,14 +24,14 @@ ar_IN{ 1, } DateTimePatterns{ - "h:mm:ss a z", - "h:mm:ss a z", - "h:mm:ss a", - "h:mm a", + "hh:mm:ss a z", + "hh:mm:ss a z", + "hh:mm:ss a", + "hh:mm a", "EEEE d MMMM yyyy", "d MMMM yyyy", "dd-MM-yyyy", - "d-M-yy", + "d-MM-yy", "{1} {0}", } weekend:intvector{ diff --git a/icuSources/data/xml/experimental/sh_BA.txt b/icuSources/data/xml/experimental/sh_BA.txt new file mode 100644 index 00000000..9f0d66f7 --- /dev/null +++ b/icuSources/data/xml/experimental/sh_BA.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sh_BA.xml +// * +// *************************************************************************** +sh_BA{ + "%%ALIAS"{"sr_Latn_BA"} +} diff --git a/icuSources/data/xml/experimental/sid.txt b/icuSources/data/xml/experimental/sid.txt new file mode 100644 index 00000000..7fd21e4b --- /dev/null +++ b/icuSources/data/xml/experimental/sid.txt @@ -0,0 +1,196 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sid.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/sid.xml + */ +sid{ + Countries{ + BR{"Brazil"} + CN{"China"} + DE{"Germany"} + ET{"Itiyoophiya"} + FR{"France"} + GB{"United Kingdom"} + IN{"India"} + IT{"Italy"} + JP{"Japan"} + RU{"Russia"} + US{"United States"} + } + Currencies{ + BRL{ + "BRL", + "Brazilian Real", + } + CNY{ + "CNY", + "Chinese Yuan Renminbi", + } + ETB{ + "$", + "ETB", + } + EUR{ + "€", + "Euro", + } + GBP{ + "£", + "British Pound Sterling", + } + INR{ + "=0#Rs.|1#Re.|1<Rs.", + "Indian Rupee", + } + JPY{ + "Â¥", + "Japanese Yen", + } + RUB{ + "RUB", + "Russian Ruble", + } + USD{ + "US$", + "US Dollar", + } + } + ExemplarCharacters{"[a-z]"} + Languages{ + ar{"Arabic"} + de{"German"} + en{"English"} + es{"Spanish"} + fr{"French"} + hi{"Hindi"} + it{"Italian"} + ja{"Japanese"} + pt{"Portuguese"} + ru{"Russian"} + sid{"Sidaamu Afo"} + zh{"Chinese"} + } + LocaleScript{ + "Latn", + } + Scripts{ + Latn{"Latin"} + } + Version{"1.19"} + calendar{ + gregorian{ + AmPmMarkers{ + "soodo", + "hawwaro", + } + DateTimeElements:intvector{ + 7, + 1, + } + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE, MMMM dd, yyyy", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "Sam", + "San", + "Mak", + "Row", + "Ham", + "Arb", + "Qid", + } + wide{ + "Sambata", + "Sanyo", + "Maakisanyo", + "Roowe", + "Hamuse", + "Arbe", + "Qidaame", + } + } + stand-alone{ + narrow{ + "S", + "S", + "M", + "R", + "H", + "A", + "Q", + } + } + } + eras{ + abbreviated{ + "YIA", + "YIG", + } + } + monthNames{ + format{ + abbreviated{ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + } + wide{ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", + } + } + stand-alone{ + narrow{ + "J", + "F", + "M", + "A", + "M", + "J", + "J", + "A", + "S", + "O", + "N", + "D", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/sid_ET.txt b/icuSources/data/xml/experimental/sid_ET.txt new file mode 100644 index 00000000..720346c7 --- /dev/null +++ b/icuSources/data/xml/experimental/sid_ET.txt @@ -0,0 +1,20 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sid_ET.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/sid_ET.xml + */ +sid_ET{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.17"} +} diff --git a/icuSources/data/xml/experimental/sr_BA.txt b/icuSources/data/xml/experimental/sr_BA.txt new file mode 100644 index 00000000..85bb0ac3 --- /dev/null +++ b/icuSources/data/xml/experimental/sr_BA.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sr_BA.xml +// * +// *************************************************************************** +sr_BA{ + "%%ALIAS"{"sr_Cyrl_BA"} +} diff --git a/icuSources/data/xml/experimental/sr_Cyrl_BA.txt b/icuSources/data/xml/experimental/sr_Cyrl_BA.txt new file mode 100644 index 00000000..992c4fcd --- /dev/null +++ b/icuSources/data/xml/experimental/sr_Cyrl_BA.txt @@ -0,0 +1,95 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sr_Cyrl_BA.xml +// * +// *************************************************************************** +sr_Cyrl_BA{ + Currencies{ + BAM{ + "КМ.", + "Конвертибилна Марка", + } + } + Languages{ + sr{"српски језик"} + } + NumberPatterns{ + "#,##0.###", + "#,##0.00 ¤", + "#,##0%", + "#E0", + } + Version{"1.7"} + calendar{ + gregorian{ + DateTimePatterns{ + "HH 'часова', mm 'минута', ss' секунди'", + "HH.mm.ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, dd. MMMM yyyy.", + "dd. MMMM yyyy.", + "yyyy-MM-dd", + "yy-MM-dd", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "нед", + "пон", + "уто", + "сри", + "чет", + "пет", + "суб", + } + wide{ + "недеља", + "понедељак", + "уторак", + "сриједа", + "четвртак", + "петак", + "субота", + } + } + } + monthNames{ + format{ + abbreviated{ + "Јан", + "Феб", + "Мар", + "Апр", + "Мај", + "Јун", + "Јул", + "Авг", + "Сеп", + "Окт", + "Нов", + "Дец", + } + wide{ + "јануар", + "фебруар", + "март", + "април", + "мај", + "јуни", + "јули", + "август", + "септембар", + "октобар", + "новембар", + "децембар", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/sr_Latn_BA.txt b/icuSources/data/xml/experimental/sr_Latn_BA.txt new file mode 100644 index 00000000..7a2ccf2f --- /dev/null +++ b/icuSources/data/xml/experimental/sr_Latn_BA.txt @@ -0,0 +1,81 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/sr_Latn_BA.xml +// * +// *************************************************************************** +sr_Latn_BA{ + Currencies{ + BAM{ + "KM.", + "Konvertibilna Marka", + } + } + Languages{ + sh{"Srpski jezik"} + } + NumberPatterns{ + "#,##0.###", + "#,##0.00 ¤", + "#,##0%", + "#E0", + } + Version{"1.7"} + calendar{ + gregorian{ + DateTimePatterns{ + "HH 'časova', mm 'minuta', ss 'sekundi'", + "HH.mm.ss z", + "HH:mm:ss", + "HH:mm", + "EEEE, dd.MMMM.yyyy.", + "dd. MMMM yyyy.", + "yyyy-MM-dd", + "yy-MM-dd", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "ned", + "pon", + "uto", + "sri", + "čet", + "pet", + "sub", + } + wide{ + "nedelja", + "ponedeljak", + "utorak", + "srijeda", + "četvrtak", + "petak", + "subota", + } + } + } + monthNames{ + format{ + wide{ + "januar", + "februar", + "mart", + "april", + "maj", + "juni", + "juli", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/syr.txt b/icuSources/data/xml/experimental/syr.txt new file mode 100644 index 00000000..1fb00516 --- /dev/null +++ b/icuSources/data/xml/experimental/syr.txt @@ -0,0 +1,52 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/syr.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/syr.xml + */ +syr{ + Countries{ + SY{"ܣܘܪܝܝܐ"} + } + Currencies{ + SYP{ + "ل.س.‏", + "SYP", + } + } + ExemplarCharacters{"[܀-܍܏-݊ݍ-ݏ‌‍]"} + Languages{ + syr{"ܣܘܪܝܝܐ"} + } + LocaleScript{ + "Syrc", + } + Version{"1.16"} + calendar{ + gregorian{ + monthNames{ + format{ + abbreviated{ + "܏ܟܢ ܏ܒ", + "ܫܒܛ", + "ܐܕܪ", + "ܢܝܣܢ", + "ܐܝܪ", + "ܚܙܝܪܢ", + "ܬܡܘܙ", + "ܐܒ", + "ܐܝܠܘܠ", + "܏ܬܫ ܏ܐ", + "܏ܬܫ ܏ܒ", + "܏ܟܢ ܏ܐ", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/syr_SY.txt b/icuSources/data/xml/experimental/syr_SY.txt new file mode 100644 index 00000000..661e3f21 --- /dev/null +++ b/icuSources/data/xml/experimental/syr_SY.txt @@ -0,0 +1,39 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/syr_SY.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/syr_SY.xml + */ +syr_SY{ + NumberPatterns{ + "#,##0.###;#,##0.###-", + "¤ #,##0.00;¤ #,##0.00-", + "#,##0%", + "#E0", + } + Version{"1.17"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 5, + 1, + } + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss", + "h:mm", + "dd MMMM, yyyy", + "dd MMMM, yyyy", + "dd/MM/yyyy", + "dd/MM/yyyy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/tig.txt b/icuSources/data/xml/experimental/tig.txt new file mode 100644 index 00000000..9205d552 --- /dev/null +++ b/icuSources/data/xml/experimental/tig.txt @@ -0,0 +1,441 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/tig.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/tig.xml + */ +tig{ + Countries{ + AD{"አንዶራ"} + AE{"የተባበሩት አረብ ኤምሬትስ"} + AL{"አልባኒያ"} + AM{"አርሜኒያ"} + AN{"ኔዘርላንድስ አንቲልስ"} + AR{"አርጀንቲና"} + AT{"ኦስትሪያ"} + AU{"አውስትሬሊያ"} + AZ{"አዘርባጃን"} + BA{"ቦስኒያ እና ሄርዞጎቪኒያ"} + BB{"ባርቤዶስ"} + BE{"ቤልጄም"} + BG{"ቡልጌሪያ"} + BH{"ባህሬን"} + BM{"ቤርሙዳ"} + BO{"ቦሊቪያ"} + BR{"ብራዚል"} + BT{"ቡህታን"} + BY{"ቤላሩስ"} + BZ{"ቤሊዘ"} + CD{"ኮንጎ"} + CF{"የመካከለኛው አፍሪካ ሪፐብሊክ"} + CH{"ስዊዘርላንድ"} + CL{"ቺሊ"} + CM{"ካሜሩን"} + CN{"ቻይና"} + CO{"ኮሎምቢያ"} + CS{"ሰርቢያ"} + CV{"ኬፕ ቬርዴ"} + CY{"ሳይፕረስ"} + CZ{"ቼክ ሪፑብሊክ"} + DE{"ጀርመን"} + DK{"ዴንማርክ"} + DM{"ዶሚኒካ"} + DO{"ዶሚኒክ ሪፑብሊክ"} + DZ{"አልጄሪያ"} + EC{"ኢኳዶር"} + EE{"ኤስቶኒያ"} + EG{"ግብጽ"} + EH{"ምዕራባዊ ሳህራ"} + ER{"ኤርትራ"} + ES{"ስፔን"} + ET{"ኢትዮጵያ"} + FI{"ፊንላንድ"} + FJ{"ፊጂ"} + FM{"ሚክሮኔዢያ"} + FR{"ፈረንሳይ"} + GB{"እንግሊዝ"} + GE{"ጆርጂያ"} + GF{"የፈረንሳይ ጉዊአና"} + GM{"ጋምቢያ"} + GN{"ጊኒ"} + GQ{"ኢኳቶሪያል ጊኒ"} + GR{"ግሪክ"} + GW{"ቢሳዎ"} + GY{"ጉያና"} + HK{"ሆንግ ኮንግ"} + HR{"ክሮኤሽያ"} + HT{"ሀይቲ"} + HU{"ሀንጋሪ"} + ID{"ኢንዶኔዢያ"} + IE{"አየርላንድ"} + IL{"እስራኤል"} + IN{"ህንድ"} + IQ{"ኢራቅ"} + IS{"አይስላንድ"} + IT{"ጣሊያን"} + JM{"ጃማይካ"} + JO{"ጆርዳን"} + JP{"ጃፓን"} + KH{"ካምቦዲያ"} + KM{"ኮሞሮስ"} + KP{"ደቡብ ኮሪያ"} + KR{"ሰሜን ኮሪያ"} + KW{"ክዌት"} + LB{"ሊባኖስ"} + LT{"ሊቱዌኒያ"} + LV{"ላትቪያ"} + LY{"ሊቢያ"} + MA{"ሞሮኮ"} + MD{"ሞልዶቫ"} + MK{"ማከዶኒያ"} + MN{"ሞንጎሊያ"} + MO{"ማካዎ"} + MR{"ሞሪቴኒያ"} + MT{"ማልታ"} + MU{"ማሩሸስ"} + MX{"ሜክሲኮ"} + MY{"ማሌዢያ"} + NA{"ናሚቢያ"} + NC{"ኒው ካሌዶኒያ"} + NG{"ናይጄሪያ"} + NL{"ኔዘርላንድ"} + NO{"ኖርዌ"} + NP{"ኔፓል"} + NZ{"ኒው ዚላንድ"} + PE{"ፔሩ"} + PF{"የፈረንሳይ ፖሊኔዢያ"} + PG{"ፓፑዋ ኒው ጊኒ"} + PL{"ፖላንድ"} + PR{"ፖርታ ሪኮ"} + RO{"ሮሜኒያ"} + RU{"ራሺያ"} + SA{"ሳውድአረቢያ"} + SD{"ሱዳን"} + SE{"ስዊድን"} + SG{"ሲንጋፖር"} + SI{"ስሎቬኒያ"} + SK{"ስሎቫኪያ"} + SN{"ሴኔጋል"} + SO{"ሱማሌ"} + SY{"ሲሪያ"} + TD{"ቻድ"} + TF{"የፈረንሳይ ደቡባዊ ግዛቶች"} + TH{"ታይላንድ"} + TJ{"ታጃኪስታን"} + TL{"ምስራቅ ቲሞር"} + TN{"ቱኒዚያ"} + TR{"ቱርክ"} + TT{"ትሪኒዳድ እና ቶባጎ"} + TZ{"ታንዛኒያ"} + UG{"ዩጋንዳ"} + US{"አሜሪካ"} + UZ{"ዩዝበኪስታን"} + VE{"ቬንዙዌላ"} + VG{"የእንግሊዝ ድንግል ደሴቶች"} + VI{"የአሜሪካ ቨርጂን ደሴቶች"} + YE{"የመን"} + ZA{"ደቡብ አፍሪካ"} + ZM{"ዛምቢያ"} + } + Currencies{ + BRL{ + "R$", + "የብራዚል ሪል", + } + CNY{ + "Y", + "የቻይና ዩአን ረንሚንቢ", + } + ERN{ + "$", + "ERN", + } + ETB{ + "$", + "የኢትዮጵያ ብር", + } + EUR{ + "€", + "አውሮ", + } + GBP{ + "£", + "የእንግሊዝ ፓውንድ ስተርሊንግ", + } + INR{ + "=0#Rs.|1#Re.|1<Rs.", + "የሕንድ ሩፒ", + } + JPY{ + "Â¥", + "የጃፓን የን", + } + RUB{ + "RUB", + "የራሻ ሩብል", + } + USD{ + "US$", + "የአሜሪካን ዶላር", + } + } + ExemplarCharacters{ + "[ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ" + "-ⷞ]" + } + Languages{ + aa{"አፋርኛ"} + ab{"አብሐዚኛ"} + af{"አፍሪቃንስኛ"} + am{"አምሐረኛ"} + ar{"ዐርቢኛ"} + as{"አሳሜዛዊ"} + ay{"አያማርኛ"} + az{"አዜርባይጃንኛ"} + ba{"ባስኪርኛ"} + be{"ቤላራሻኛ"} + bg{"ቡልጋሪኛ"} + bh{"ቢሃሪ"} + bi{"ቢስላምኛ"} + bn{"በንጋሊኛ"} + bo{"ትበትንኛ"} + br{"ብሬቶንኛ"} + byn{"ብሊን"} + ca{"ካታላንኛ"} + co{"ኮርሲካኛ"} + cs{"ቼክኛ"} + cy{"ወልሽ"} + da{"ዴኒሽ"} + de{"ጀርመን"} + dz{"ድዞንግኻኛ"} + el{"ግሪክኛ"} + en{"እንግሊዝኛ"} + eo{"ኤስፐራንቶ"} + es{"ስፓኒሽ"} + et{"ኤስቶኒአን"} + eu{"ባስክኛ"} + fa{"ፐርሲያኛ"} + fi{"ፊኒሽ"} + fj{"ፊጂኛ"} + fo{"ፋሮኛ"} + fr{"ፈረንሳይኛ"} + fy{"ፍሪስኛ"} + ga{"አይሪሽ"} + gd{"እስኮትስ ጌልክኛ"} + gez{"ግዕዝኛ"} + gl{"ጋለጋኛ"} + gn{"ጓራኒኛ"} + gu{"ጉጃርቲኛ"} + ha{"ሃውሳኛ"} + he{"ዕብራስጥ"} + hi{"ሐንድኛ"} + hr{"ክሮሽያንኛ"} + hu{"ሀንጋሪኛ"} + hy{"አርመናዊ"} + ia{"ኢንቴርሊንጓ"} + id{"እንዶኒሲኛ"} + ie{"እንተርሊንግወ"} + ik{"እኑፒያቅኛ"} + is{"አይስላንድኛ"} + it{"ጣሊያንኛ"} + iu{"እኑክቲቱትኛ"} + ja{"ጃፓንኛ"} + jv{"ጃቫንኛ"} + ka{"ጊዮርጊያን"} + kk{"ካዛክኛ"} + kl{"ካላሊሱትኛ"} + km{"ክመርኛ"} + kn{"ካናዳኛ"} + ko{"ኮሪያኛ"} + ks{"ካሽሚርኛ"} + ku{"ኩርድሽኛ"} + ky{"ኪርጊዝኛ"} + la{"ላቲንኛ"} + ln{"ሊንጋላኛ"} + lo{"ላውስኛ"} + lt{"ሊቱአኒያን"} + lv{"ላትቪያን"} + mg{"ማላጋስኛ"} + mi{"ማዮሪኛ"} + mk{"ማከዶኒኛ"} + ml{"ማላያላምኛ"} + mn{"ሞንጎላዊኛ"} + mo{"ሞልዳቫዊና"} + mr{"ማራዚኛ"} + ms{"ማላይኛ"} + mt{"ማልቲስኛ"} + my{"ቡርማኛ"} + na{"ናኡሩ"} + ne{"ኔፓሊኛ"} + nl{"ደች"} + no{"ኖርዌጂያን"} + oc{"ኦኪታንኛ"} + om{"ኦሮምኛ"} + or{"ኦሪያኛ"} + pa{"ፓንጃቢኛ"} + pl{"ፖሊሽ"} + ps{"ፑሽቶኛ"} + pt{"ፖርቱጋሊኛ"} + qu{"ኵቿኛ"} + rm{"ሮማንስ"} + rn{"ሩንዲኛ"} + ro{"ሮማኒያን"} + ru{"ራሽኛ"} + rw{"ኪንያርዋንድኛ"} + sa{"ሳንስክሪትኛ"} + sd{"ሲንድሂኛ"} + sg{"ሳንጎኛ"} + si{"ስንሃልኛ"} + sid{"ሲዳምኛ"} + sk{"ስሎቫክኛ"} + sl{"ስሎቪኛ"} + sm{"ሳሞአኛ"} + sn{"ሾናኛ"} + so{"ሱማልኛ"} + sq{"ልቤኒኛ"} + sr{"ሰርቢኛ"} + ss{"ስዋቲኛ"} + st{"ሶዞኛ"} + su{"ሱዳንኛ"} + sv{"ስዊድንኛ"} + sw{"ስዋሂሊኛ"} + ta{"ታሚልኛ"} + te{"ተሉጉኛ"} + tg{"ታጂኪኛ"} + th{"ታይኛ"} + ti{"ትግርኛ"} + tig{"ትግረ"} + tk{"ቱርክመንኛ"} + tl{"ታጋሎገኛ"} + tn{"ጽዋናዊኛ"} + to{"ቶንጋ"} + tr{"ቱርክኛ"} + ts{"ጾንጋኛ"} + tt{"ታታርኛ"} + tw{"ትዊኛ"} + ug{"ኡዊግሁርኛ"} + uk{"ዩክረኒኛ"} + ur{"ኡርዱኛ"} + uz{"ኡዝበክኛ"} + vi{"ቪትናምኛ"} + vo{"ቮላፑክኛ"} + wo{"ዎሎፍኛ"} + xh{"ዞሳኛ"} + yi{"ይዲሻዊኛ"} + yo{"ዮሩባዊኛ"} + za{"ዡዋንግኛ"} + zh{"ቻይንኛ"} + zu{"ዙሉኛ"} + } + LocaleScript{ + "Ethi", + } + Scripts{ + Latn{"ላቲን"} + } + Version{"1.28"} + calendar{ + gregorian{ + AmPmMarkers{ + "ቀደም ሰርምዕል", + "ሓቆ ስርምዕል", + } + DateTimeElements:intvector{ + 7, + 1, + } + dayNames{ + format{ + abbreviated{ + "ሰ/ዓ", + "ሰኖ", + "ታላሸ", + "ኣረር", + "ከሚሽ", + "ጅምዓ", + "ሰ/ን", + } + wide{ + "ሰንበት ዓባይ", + "ሰኖ", + "ታላሸኖ", + "ኣረርባዓ", + "ከሚሽ", + "ጅምዓት", + "ሰንበት ንኢሽ", + } + } + stand-alone{ + narrow{ + "ሰ", + "ሰ", + "ታ", + "ኣ", + "ከ", + "ጅ", + "ሰ", + } + } + } + eras{ + abbreviated{ + "ዓ/ዓ", + "ዓ/ም", + } + } + monthNames{ + format{ + abbreviated{ + "ጃንዩ", + "ፌብሩ", + "ማርች", + "ኤፕረ", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስ", + "ሴፕቴ", + "ኦክተ", + "ኖቬም", + "ዲሴም", + } + wide{ + "ጃንዩወሪ", + "ፌብሩወሪ", + "ማርች", + "ኤፕረል", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስት", + "ሴፕቴምበር", + "ኦክተውበር", + "ኖቬምበር", + "ዲሴምበር", + } + } + stand-alone{ + narrow{ + "ጃ", + "ፌ", + "ማ", + "ኤ", + "ሜ", + "ጁ", + "ጁ", + "ኦ", + "ሴ", + "ኦ", + "ኖ", + "ዲ", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/tig_ER.txt b/icuSources/data/xml/experimental/tig_ER.txt new file mode 100644 index 00000000..1489b1f1 --- /dev/null +++ b/icuSources/data/xml/experimental/tig_ER.txt @@ -0,0 +1,35 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/tig_ER.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/tig_ER.xml + */ +tig_ER{ + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.16"} + calendar{ + gregorian{ + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE፡ dd MMMM ዮም yyyy G", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/tt.txt b/icuSources/data/xml/experimental/tt.txt new file mode 100644 index 00000000..99d1fdf9 --- /dev/null +++ b/icuSources/data/xml/experimental/tt.txt @@ -0,0 +1,44 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/tt.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/tt.xml + */ +tt{ + Countries{ + RU{"Россия"} + } + Currencies{ + RUR{ + "р.", + "RUR", + } + } + ExemplarCharacters{"[а-яёіѣѳѵә]"} + Languages{ + tt{"Татар"} + } + LocaleScript{ + "Cyrl", + } + NumberElements{ + ",", + " ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + Version{"1.16"} +} diff --git a/icuSources/data/xml/experimental/tt_RU.txt b/icuSources/data/xml/experimental/tt_RU.txt new file mode 100644 index 00000000..563be214 --- /dev/null +++ b/icuSources/data/xml/experimental/tt_RU.txt @@ -0,0 +1,39 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/tt_RU.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/tt_RU.xml + */ +tt_RU{ + NumberPatterns{ + "#,##0.###", + "#,##0.00¤", + "#,##0%", + "#E0", + } + Version{"1.18"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 2, + 1, + } + DateTimePatterns{ + "h:mm:ss a", + "H:mm:ss", + "H:mm:ss", + "H:mm:ss", + "d MMMM yyyy", + "d MMMM yyyy", + "dd.MM.yyyy", + "dd.MM.yyyy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/experimental/uz_AF.txt b/icuSources/data/xml/experimental/uz_AF.txt new file mode 100644 index 00000000..3ca60d59 --- /dev/null +++ b/icuSources/data/xml/experimental/uz_AF.txt @@ -0,0 +1,11 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/uz_AF.xml +// * +// *************************************************************************** +uz_AF{ + "%%ALIAS"{"uz_Arab_AF"} +} diff --git a/icuSources/data/xml/experimental/uz_Arab.txt b/icuSources/data/xml/experimental/uz_Arab.txt new file mode 100644 index 00000000..e301aaa2 --- /dev/null +++ b/icuSources/data/xml/experimental/uz_Arab.txt @@ -0,0 +1,141 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/uz_Arab.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/uz_Arab.xml + */ +uz_Arab{ + Countries{ + AF{"افغانستان"} + } + Currencies{ + AFA{ + "افغانی", + "افغانی", + } + } + ExemplarCharacters{"[Ø¡-ؤئ-غفقل-ويً-ْٰٔټپځڅ-چډړږژښکګگڼۇۉی-ۍې]"} + Languages{ + fa{"دری"} + ps{"پشتو"} + uz{"اۉزبېک"} + } + LocaleScript{ + "Arab", + } + NumberElements{ + "Ù«", + "Ù¬", + ";", + "Ùª", + "Û°", + "#", + "−", + "×۱۰^", + "‰", + "∞", + "�", + "+", + } + NumberPatterns{ + "#,##0.###", + "#,##0.00 ¤", + "#,##0%", + "#E0", + } + Version{"1.1"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + DateTimePatterns{ + "H:mm:ss (z)", + "H:mm:ss (z)", + "H:mm:ss", + "H:mm", + "yyyy نچی ییل d نچی MMMM EEEE کونی", + "d نچی MMMM yyyy", + "d MMMM yyyy", + "yyyy/M/d", + "{1} {0}", + } + dayNames{ + format{ + abbreviated{ + "ی.", + "د.", + "س.", + "چ.", + "Ù¾.", + "ج.", + "Ø´.", + } + wide{ + "یکشنبه", + "دوشنبه", + "سه‌شنبه", + "چهارشنبه", + "پنجشنبه", + "جمعه", + "شنبه", + } + } + } + eras{ + abbreviated{ + "ق.م.", + "م.", + } + } + monthNames{ + format{ + abbreviated{ + "جنو", + "فبر", + "مار", + "اپر", + "مـی", + "جون", + "جول", + "اگس", + "سپت", + "اکت", + "نوم", + "دسم", + } + wide{ + "جنوری", + "فبروری", + "مارچ", + "اپریل", + "می", + "جون", + "جولای", + "اگست", + "سپتمبر", + "اکتوبر", + "نومبر", + "دسمبر", + } + } + } + } + } + zoneStrings{ + { + "Asia/Kabul", + "افغانستان وقتی", + "AFT", + "افغانستان وقتی", + "AFT", + "کابل", + } + } +} diff --git a/icuSources/data/xml/experimental/uz_Arab_AF.txt b/icuSources/data/xml/experimental/uz_Arab_AF.txt new file mode 100644 index 00000000..412362fe --- /dev/null +++ b/icuSources/data/xml/experimental/uz_Arab_AF.txt @@ -0,0 +1,19 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/uz_Arab_AF.xml +// * +// *************************************************************************** +uz_Arab_AF{ + Version{"1.4"} + calendar{ + gregorian{ + DateTimeElements:intvector{ + 7, + 1, + } + } + } +} diff --git a/icuSources/data/xml/experimental/wal.txt b/icuSources/data/xml/experimental/wal.txt new file mode 100644 index 00000000..6a5e05dc --- /dev/null +++ b/icuSources/data/xml/experimental/wal.txt @@ -0,0 +1,307 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/wal.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/wal.xml + */ +wal{ + Countries{ + AD{"አንዶራ"} + AE{"የተባበሩት አረብ ኤምሬትስ"} + AL{"አልባኒያ"} + AM{"አርሜኒያ"} + AN{"ኔዘርላንድስ አንቲልስ"} + AR{"አርጀንቲና"} + AT{"ኦስትሪያ"} + AU{"አውስትሬሊያ"} + AZ{"አዘርባጃን"} + BA{"ቦስኒያ እና ሄርዞጎቪኒያ"} + BB{"ባርቤዶስ"} + BE{"ቤልጄም"} + BG{"ቡልጌሪያ"} + BH{"ባህሬን"} + BM{"ቤርሙዳ"} + BO{"ቦሊቪያ"} + BR{"ብራዚል"} + BT{"ቡህታን"} + BY{"ቤላሩስ"} + BZ{"ቤሊዘ"} + CD{"ኮንጎ"} + CF{"የመካከለኛው አፍሪካ ሪፐብሊክ"} + CH{"ስዊዘርላንድ"} + CL{"ቺሊ"} + CM{"ካሜሩን"} + CN{"ቻይና"} + CO{"ኮሎምቢያ"} + CS{"ሰርቢያ"} + CV{"ኬፕ ቬርዴ"} + CY{"ሳይፕረስ"} + CZ{"ቼክ ሪፑብሊክ"} + DE{"ጀርመን"} + DK{"ዴንማርክ"} + DM{"ዶሚኒካ"} + DO{"ዶሚኒክ ሪፑብሊክ"} + DZ{"አልጄሪያ"} + EC{"ኢኳዶር"} + EE{"ኤስቶኒያ"} + EG{"ግብጽ"} + EH{"ምዕራባዊ ሳህራ"} + ER{"ኤርትራ"} + ES{"ስፔን"} + ET{"ኢትዮጵያ"} + FI{"ፊንላንድ"} + FJ{"ፊጂ"} + FM{"ሚክሮኔዢያ"} + FR{"ፈረንሳይ"} + GB{"እንግሊዝ"} + GE{"ጆርጂያ"} + GF{"የፈረንሳይ ጉዊአና"} + GM{"ጋምቢያ"} + GN{"ጊኒ"} + GQ{"ኢኳቶሪያል ጊኒ"} + GR{"ግሪክ"} + GW{"ቢሳዎ"} + GY{"ጉያና"} + HK{"ሆንግ ኮንግ"} + HR{"ክሮኤሽያ"} + HT{"ሀይቲ"} + HU{"ሀንጋሪ"} + ID{"ኢንዶኔዢያ"} + IE{"አየርላንድ"} + IL{"እስራኤል"} + IN{"ህንድ"} + IQ{"ኢራቅ"} + IS{"አይስላንድ"} + IT{"ጣሊያን"} + JM{"ጃማይካ"} + JO{"ጆርዳን"} + JP{"ጃፓን"} + KH{"ካምቦዲያ"} + KM{"ኮሞሮስ"} + KP{"ደቡብ ኮሪያ"} + KR{"ሰሜን ኮሪያ"} + KW{"ክዌት"} + LB{"ሊባኖስ"} + LT{"ሊቱዌኒያ"} + LV{"ላትቪያ"} + LY{"ሊቢያ"} + MA{"ሞሮኮ"} + MD{"ሞልዶቫ"} + MK{"ማከዶኒያ"} + MN{"ሞንጎሊያ"} + MO{"ማካዎ"} + MR{"ሞሪቴኒያ"} + MT{"ማልታ"} + MU{"ማሩሸስ"} + MX{"ሜክሲኮ"} + MY{"ማሌዢያ"} + NA{"ናሚቢያ"} + NC{"ኒው ካሌዶኒያ"} + NG{"ናይጄሪያ"} + NL{"ኔዘርላንድ"} + NO{"ኖርዌ"} + NP{"ኔፓል"} + NZ{"ኒው ዚላንድ"} + PE{"ፔሩ"} + PF{"የፈረንሳይ ፖሊኔዢያ"} + PG{"ፓፑዋ ኒው ጊኒ"} + PL{"ፖላንድ"} + PR{"ፖርታ ሪኮ"} + RO{"ሮሜኒያ"} + RU{"ራሺያ"} + SA{"ሳውድአረቢያ"} + SD{"ሱዳን"} + SE{"ስዊድን"} + SG{"ሲንጋፖር"} + SI{"ስሎቬኒያ"} + SK{"ስሎቫኪያ"} + SN{"ሴኔጋል"} + SO{"ሱማሌ"} + SY{"ሲሪያ"} + TD{"ቻድ"} + TF{"የፈረንሳይ ደቡባዊ ግዛቶች"} + TH{"ታይላንድ"} + TJ{"ታጃኪስታን"} + TL{"ምስራቅ ቲሞር"} + TN{"ቱኒዚያ"} + TR{"ቱርክ"} + TT{"ትሪኒዳድ እና ቶባጎ"} + TZ{"ታንዛኒያ"} + UG{"ዩጋንዳ"} + US{"አሜሪካ"} + UZ{"ዩዝበኪስታን"} + VE{"ቬንዙዌላ"} + VG{"የእንግሊዝ ድንግል ደሴቶች"} + VI{"የአሜሪካ ቨርጂን ደሴቶች"} + YE{"የመን"} + ZA{"ደቡብ አፍሪካ"} + ZM{"ዛምቢያ"} + } + Currencies{ + BRL{ + "R$", + "የብራዚል ሪል", + } + CNY{ + "Y", + "የቻይና ዩአን ረንሚንቢ", + } + ETB{ + "$", + "የኢትዮጵያ ብር", + } + EUR{ + "€", + "አውሮ", + } + GBP{ + "£", + "የእንግሊዝ ፓውንድ ስተርሊንግ", + } + INR{ + "=0#Rs.|1#Re.|1<Rs.", + "የሕንድ ሩፒ", + } + JPY{ + "Â¥", + "የጃፓን የን", + } + RUB{ + "RUB", + "የራሻ ሩብል", + } + USD{ + "US$", + "የአሜሪካን ዶላር", + } + } + ExemplarCharacters{ + "[ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፟-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ" + "-ⷞ]" + } + Languages{ + ar{"ዐርቢኛ"} + de{"ጀርመን"} + en{"እንግሊዝኛ"} + es{"ስፓኒሽ"} + fr{"ፈረንሳይኛ"} + hi{"ሐንድኛ"} + it{"ጣሊያንኛ"} + ja{"ጃፓንኛ"} + pt{"ፖርቱጋሊኛ"} + ru{"ራሽኛ"} + wal{"ወላይታቱ"} + zh{"ቻይንኛ"} + } + LocaleScript{ + "Ethi", + } + Scripts{ + Latn{"ላቲን"} + } + Version{"1.27"} + calendar{ + gregorian{ + AmPmMarkers{ + "ማለዶ", + "ቃማ", + } + DateTimeElements:intvector{ + 7, + 1, + } + dayNames{ + format{ + abbreviated{ + "ወጋ", + "ሳይኖ", + "ማቆሳ", + "አሩዋ", + "ሃሙሳ", + "አርባ", + "ቄራ", + } + wide{ + "ወጋ", + "ሳይኖ", + "ማቆሳኛ", + "አሩዋ", + "ሃሙሳ", + "አርባ", + "ቄራ", + } + } + stand-alone{ + narrow{ + "ወ", + "ሳ", + "ማ", + "አ", + "ሃ", + "አ", + "ቄ", + } + } + } + eras{ + abbreviated{ + "አዳ ዎዴ", + "ግሮተታ ላይታ", + } + } + monthNames{ + format{ + abbreviated{ + "ጃንዩ", + "ፌብሩ", + "ማርች", + "ኤፕረ", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስ", + "ሴፕቴ", + "ኦክተ", + "ኖቬም", + "ዲሴም", + } + wide{ + "ጃንዩወሪ", + "ፌብሩወሪ", + "ማርች", + "ኤፕረል", + "ሜይ", + "ጁን", + "ጁላይ", + "ኦገስት", + "ሴፕቴምበር", + "ኦክተውበር", + "ኖቬምበር", + "ዲሴምበር", + } + } + stand-alone{ + narrow{ + "ጃ", + "ፌ", + "ማ", + "ኤ", + "ሜ", + "ጁ", + "ጁ", + "ኦ", + "ሴ", + "ኦ", + "ኖ", + "ዲ", + } + } + } + } + } +} diff --git a/icuSources/data/xml/experimental/wal_ET.txt b/icuSources/data/xml/experimental/wal_ET.txt new file mode 100644 index 00000000..195ac38b --- /dev/null +++ b/icuSources/data/xml/experimental/wal_ET.txt @@ -0,0 +1,49 @@ +// *************************************************************************** +// * +// * Copyright (C) 2005 International Business Machines +// * Corporation and others. All Rights Reserved. +// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java +// * Source File: ../../../../ICU4J/cldr/common/main/wal_ET.xml +// * +// *************************************************************************** +/** + * ICU <specials> source: ./xml/main/wal_ET.xml + */ +wal_ET{ + NumberElements{ + ".", + "ወ", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + "+", + } + NumberPatterns{ + "#,##0.###", + "¤#,##0.00", + "#,##0%", + "#E0", + } + Version{"1.17"} + calendar{ + gregorian{ + DateTimePatterns{ + "h:mm:ss a", + "h:mm:ss a", + "h:mm:ss a", + "h:mm a", + "EEEE፥ dd MMMM ጋላሳ yyyy G", + "dd MMMM yyyy", + "dd-MMM-yyyy", + "dd/MM/yy", + "{1} {0}", + } + } + } +} diff --git a/icuSources/data/xml/main/aa.xml b/icuSources/data/xml/main/aa.xml new file mode 100644 index 00000000..9e9f56cb --- /dev/null +++ b/icuSources/data/xml/main/aa.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="aa"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/af.xml b/icuSources/data/xml/main/af.xml new file mode 100644 index 00000000..60402535 --- /dev/null +++ b/icuSources/data/xml/main/af.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="af"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/am.xml b/icuSources/data/xml/main/am.xml new file mode 100644 index 00000000..a50d2998 --- /dev/null +++ b/icuSources/data/xml/main/am.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="am"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Ethi</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ar.xml b/icuSources/data/xml/main/ar.xml new file mode 100644 index 00000000..6d393893 --- /dev/null +++ b/icuSources/data/xml/main/ar.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="ar"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Arab</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/as.xml b/icuSources/data/xml/main/as.xml new file mode 100644 index 00000000..a6af0779 --- /dev/null +++ b/icuSources/data/xml/main/as.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="as"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Beng</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/az.xml b/icuSources/data/xml/main/az.xml new file mode 100644 index 00000000..ddc8222c --- /dev/null +++ b/icuSources/data/xml/main/az.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="az"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/az_AZ.xml b/icuSources/data/xml/main/az_AZ.xml new file mode 100644 index 00000000..c9367199 --- /dev/null +++ b/icuSources/data/xml/main/az_AZ.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="az"/> + <territory type="AZ"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/main/az_Cyrl.xml b/icuSources/data/xml/main/az_Cyrl.xml new file mode 100644 index 00000000..ff34ce57 --- /dev/null +++ b/icuSources/data/xml/main/az_Cyrl.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="az"/> + <script type="Cyrl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/az_Latn.xml b/icuSources/data/xml/main/az_Latn.xml new file mode 100644 index 00000000..1ff5077f --- /dev/null +++ b/icuSources/data/xml/main/az_Latn.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="az"/> + <script type="Latn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/be.xml b/icuSources/data/xml/main/be.xml new file mode 100644 index 00000000..b1de4682 --- /dev/null +++ b/icuSources/data/xml/main/be.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="be"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/bg.xml b/icuSources/data/xml/main/bg.xml new file mode 100644 index 00000000..13681152 --- /dev/null +++ b/icuSources/data/xml/main/bg.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="bg"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/bn.xml b/icuSources/data/xml/main/bn.xml new file mode 100644 index 00000000..453a3489 --- /dev/null +++ b/icuSources/data/xml/main/bn.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="bn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Beng</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/bs.xml b/icuSources/data/xml/main/bs.xml new file mode 100644 index 00000000..f3dbb301 --- /dev/null +++ b/icuSources/data/xml/main/bs.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="bs"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/byn.xml b/icuSources/data/xml/main/byn.xml new file mode 100644 index 00000000..8b220bcf --- /dev/null +++ b/icuSources/data/xml/main/byn.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="byn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Ethi</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ca.xml b/icuSources/data/xml/main/ca.xml new file mode 100644 index 00000000..2497f55f --- /dev/null +++ b/icuSources/data/xml/main/ca.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="ca"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/cs.xml b/icuSources/data/xml/main/cs.xml new file mode 100644 index 00000000..bc1d1984 --- /dev/null +++ b/icuSources/data/xml/main/cs.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:46 $"/> + <language type="cs"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/cy.xml b/icuSources/data/xml/main/cy.xml new file mode 100644 index 00000000..d4a03323 --- /dev/null +++ b/icuSources/data/xml/main/cy.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="cy"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/da.xml b/icuSources/data/xml/main/da.xml new file mode 100644 index 00000000..2f47543f --- /dev/null +++ b/icuSources/data/xml/main/da.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="da"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/de.xml b/icuSources/data/xml/main/de.xml new file mode 100644 index 00000000..de6f828b --- /dev/null +++ b/icuSources/data/xml/main/de.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="de"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/dv.xml b/icuSources/data/xml/main/dv.xml new file mode 100644 index 00000000..5981cfed --- /dev/null +++ b/icuSources/data/xml/main/dv.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="dv"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">THAA</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/dz.xml b/icuSources/data/xml/main/dz.xml new file mode 100644 index 00000000..c92bd241 --- /dev/null +++ b/icuSources/data/xml/main/dz.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="dz"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Tibt</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/el.xml b/icuSources/data/xml/main/el.xml new file mode 100644 index 00000000..b89f80de --- /dev/null +++ b/icuSources/data/xml/main/el.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="el"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Grek</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/en.xml b/icuSources/data/xml/main/en.xml new file mode 100644 index 00000000..ae62c73f --- /dev/null +++ b/icuSources/data/xml/main/en.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="en"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/en_US_POSIX.xml b/icuSources/data/xml/main/en_US_POSIX.xml new file mode 100644 index 00000000..e4ffea2d --- /dev/null +++ b/icuSources/data/xml/main/en_US_POSIX.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="en"/> + <territory type="US"/> + <variant type="POSIX"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/main/eo.xml b/icuSources/data/xml/main/eo.xml new file mode 100644 index 00000000..508a1fb1 --- /dev/null +++ b/icuSources/data/xml/main/eo.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="eo"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/es.xml b/icuSources/data/xml/main/es.xml new file mode 100644 index 00000000..f4648628 --- /dev/null +++ b/icuSources/data/xml/main/es.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="es"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/et.xml b/icuSources/data/xml/main/et.xml new file mode 100644 index 00000000..c7d0bb99 --- /dev/null +++ b/icuSources/data/xml/main/et.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="et"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/eu.xml b/icuSources/data/xml/main/eu.xml new file mode 100644 index 00000000..3092c18a --- /dev/null +++ b/icuSources/data/xml/main/eu.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="eu"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/fa.xml b/icuSources/data/xml/main/fa.xml new file mode 100644 index 00000000..117ecbcb --- /dev/null +++ b/icuSources/data/xml/main/fa.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="fa"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Arab</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/fi.xml b/icuSources/data/xml/main/fi.xml new file mode 100644 index 00000000..b8b15e58 --- /dev/null +++ b/icuSources/data/xml/main/fi.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:47 $"/> + <language type="fi"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/fo.xml b/icuSources/data/xml/main/fo.xml new file mode 100644 index 00000000..cacb28aa --- /dev/null +++ b/icuSources/data/xml/main/fo.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="fo"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/fr.xml b/icuSources/data/xml/main/fr.xml new file mode 100644 index 00000000..1c71f68a --- /dev/null +++ b/icuSources/data/xml/main/fr.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="fr"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ga.xml b/icuSources/data/xml/main/ga.xml new file mode 100644 index 00000000..5d203685 --- /dev/null +++ b/icuSources/data/xml/main/ga.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="ga"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/gez.xml b/icuSources/data/xml/main/gez.xml new file mode 100644 index 00000000..58ce5191 --- /dev/null +++ b/icuSources/data/xml/main/gez.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="gez"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Ethi</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/gl.xml b/icuSources/data/xml/main/gl.xml new file mode 100644 index 00000000..27c5a7f1 --- /dev/null +++ b/icuSources/data/xml/main/gl.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="gl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/gu.xml b/icuSources/data/xml/main/gu.xml new file mode 100644 index 00000000..5f6cc7c4 --- /dev/null +++ b/icuSources/data/xml/main/gu.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="gu"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Gujr</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/gv.xml b/icuSources/data/xml/main/gv.xml new file mode 100644 index 00000000..72480c2c --- /dev/null +++ b/icuSources/data/xml/main/gv.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="gv"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/haw.xml b/icuSources/data/xml/main/haw.xml new file mode 100644 index 00000000..8a3ce700 --- /dev/null +++ b/icuSources/data/xml/main/haw.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="haw"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/he.xml b/icuSources/data/xml/main/he.xml new file mode 100644 index 00000000..de501228 --- /dev/null +++ b/icuSources/data/xml/main/he.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="he"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Hebr</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/hi.xml b/icuSources/data/xml/main/hi.xml new file mode 100644 index 00000000..fcd756f9 --- /dev/null +++ b/icuSources/data/xml/main/hi.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="hi"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Deva</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/hr.xml b/icuSources/data/xml/main/hr.xml new file mode 100644 index 00000000..0492882d --- /dev/null +++ b/icuSources/data/xml/main/hr.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="hr"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/hu.xml b/icuSources/data/xml/main/hu.xml new file mode 100644 index 00000000..cb3657d1 --- /dev/null +++ b/icuSources/data/xml/main/hu.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="hu"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/hy.xml b/icuSources/data/xml/main/hy.xml new file mode 100644 index 00000000..530bc647 --- /dev/null +++ b/icuSources/data/xml/main/hy.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="hy"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Armn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/id.xml b/icuSources/data/xml/main/id.xml new file mode 100644 index 00000000..2fdc189c --- /dev/null +++ b/icuSources/data/xml/main/id.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="id"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/is.xml b/icuSources/data/xml/main/is.xml new file mode 100644 index 00000000..95d76291 --- /dev/null +++ b/icuSources/data/xml/main/is.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="is"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/it.xml b/icuSources/data/xml/main/it.xml new file mode 100644 index 00000000..bb2dfa8b --- /dev/null +++ b/icuSources/data/xml/main/it.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="it"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/iu.xml b/icuSources/data/xml/main/iu.xml new file mode 100644 index 00000000..ef4d012e --- /dev/null +++ b/icuSources/data/xml/main/iu.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="iu"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cans</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/iw.xml b/icuSources/data/xml/main/iw.xml new file mode 100644 index 00000000..d1365b02 --- /dev/null +++ b/icuSources/data/xml/main/iw.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="iw"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Hebr</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ja.xml b/icuSources/data/xml/main/ja.xml new file mode 100644 index 00000000..706c9143 --- /dev/null +++ b/icuSources/data/xml/main/ja.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="ja"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Kana</icu:script> + <icu:script type="2">Hira</icu:script> + <icu:script type="3">Hani</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ka.xml b/icuSources/data/xml/main/ka.xml new file mode 100644 index 00000000..8aff2b3b --- /dev/null +++ b/icuSources/data/xml/main/ka.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="ka"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Geor</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/kk.xml b/icuSources/data/xml/main/kk.xml new file mode 100644 index 00000000..3da45bc5 --- /dev/null +++ b/icuSources/data/xml/main/kk.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="kk"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/kl.xml b/icuSources/data/xml/main/kl.xml new file mode 100644 index 00000000..5477445a --- /dev/null +++ b/icuSources/data/xml/main/kl.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="kl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/km.xml b/icuSources/data/xml/main/km.xml new file mode 100644 index 00000000..d50bb15c --- /dev/null +++ b/icuSources/data/xml/main/km.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="km"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Khmr</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/kn.xml b/icuSources/data/xml/main/kn.xml new file mode 100644 index 00000000..13436982 --- /dev/null +++ b/icuSources/data/xml/main/kn.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:48 $"/> + <language type="kn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Knda</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ko.xml b/icuSources/data/xml/main/ko.xml new file mode 100644 index 00000000..6d9ad7b9 --- /dev/null +++ b/icuSources/data/xml/main/ko.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="ko"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Hang</icu:script> + <icu:script type="2">Hani</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/kok.xml b/icuSources/data/xml/main/kok.xml new file mode 100644 index 00000000..48693de3 --- /dev/null +++ b/icuSources/data/xml/main/kok.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="kok"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Deva</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/kw.xml b/icuSources/data/xml/main/kw.xml new file mode 100644 index 00000000..ddfa0e3b --- /dev/null +++ b/icuSources/data/xml/main/kw.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="kw"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ky.xml b/icuSources/data/xml/main/ky.xml new file mode 100644 index 00000000..1040f1d8 --- /dev/null +++ b/icuSources/data/xml/main/ky.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="ky"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/lo.xml b/icuSources/data/xml/main/lo.xml new file mode 100644 index 00000000..5db63c45 --- /dev/null +++ b/icuSources/data/xml/main/lo.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="lo"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Laoo</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/lt.xml b/icuSources/data/xml/main/lt.xml new file mode 100644 index 00000000..5a2dedfd --- /dev/null +++ b/icuSources/data/xml/main/lt.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="lt"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/lv.xml b/icuSources/data/xml/main/lv.xml new file mode 100644 index 00000000..a161bf06 --- /dev/null +++ b/icuSources/data/xml/main/lv.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="lv"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/mk.xml b/icuSources/data/xml/main/mk.xml new file mode 100644 index 00000000..2a3b4157 --- /dev/null +++ b/icuSources/data/xml/main/mk.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="mk"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ml.xml b/icuSources/data/xml/main/ml.xml new file mode 100644 index 00000000..52ccad5b --- /dev/null +++ b/icuSources/data/xml/main/ml.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="ml"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Mlym</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/mn.xml b/icuSources/data/xml/main/mn.xml new file mode 100644 index 00000000..79d1b107 --- /dev/null +++ b/icuSources/data/xml/main/mn.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="mn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/mr.xml b/icuSources/data/xml/main/mr.xml new file mode 100644 index 00000000..75d060cc --- /dev/null +++ b/icuSources/data/xml/main/mr.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="mr"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Deva</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ms.xml b/icuSources/data/xml/main/ms.xml new file mode 100644 index 00000000..0c953611 --- /dev/null +++ b/icuSources/data/xml/main/ms.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="ms"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/mt.xml b/icuSources/data/xml/main/mt.xml new file mode 100644 index 00000000..59c1a1d4 --- /dev/null +++ b/icuSources/data/xml/main/mt.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="mt"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/nb.xml b/icuSources/data/xml/main/nb.xml new file mode 100644 index 00000000..57afe8cc --- /dev/null +++ b/icuSources/data/xml/main/nb.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="nb"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/nl.xml b/icuSources/data/xml/main/nl.xml new file mode 100644 index 00000000..81c98015 --- /dev/null +++ b/icuSources/data/xml/main/nl.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="nl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/nn.xml b/icuSources/data/xml/main/nn.xml new file mode 100644 index 00000000..aa960e4f --- /dev/null +++ b/icuSources/data/xml/main/nn.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="nn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/no.xml b/icuSources/data/xml/main/no.xml new file mode 100644 index 00000000..6fa85026 --- /dev/null +++ b/icuSources/data/xml/main/no.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="no"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/om.xml b/icuSources/data/xml/main/om.xml new file mode 100644 index 00000000..769c1d0b --- /dev/null +++ b/icuSources/data/xml/main/om.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="om"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/or.xml b/icuSources/data/xml/main/or.xml new file mode 100644 index 00000000..84580cdd --- /dev/null +++ b/icuSources/data/xml/main/or.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="or"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Orya</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/pa.xml b/icuSources/data/xml/main/pa.xml new file mode 100644 index 00000000..50e9bf55 --- /dev/null +++ b/icuSources/data/xml/main/pa.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="pa"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Guru</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/pl.xml b/icuSources/data/xml/main/pl.xml new file mode 100644 index 00000000..5cace1ec --- /dev/null +++ b/icuSources/data/xml/main/pl.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="pl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ps.xml b/icuSources/data/xml/main/ps.xml new file mode 100644 index 00000000..4b7fb2d4 --- /dev/null +++ b/icuSources/data/xml/main/ps.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:49 $"/> + <language type="ps"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Arab</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/pt.xml b/icuSources/data/xml/main/pt.xml new file mode 100644 index 00000000..a6239cfc --- /dev/null +++ b/icuSources/data/xml/main/pt.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="pt"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ro.xml b/icuSources/data/xml/main/ro.xml new file mode 100644 index 00000000..985276de --- /dev/null +++ b/icuSources/data/xml/main/ro.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="ro"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/root.xml b/icuSources/data/xml/main/root.xml new file mode 100644 index 00000000..87828c27 --- /dev/null +++ b/icuSources/data/xml/main/root.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="root"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Zyyy</icu:script> + </icu:scripts> + </special> + </characters> + <dates> + <calendars> + <calendar type="chinese"> + <special xmlns:icu="http://www.icu-project.org/"> + <!-- + IsLeapMonth { + "", + "*" + } + --> + <icu:isLeapMonth> + <icu:nonLeapSymbol/> + <icu:leapSymbol>*</icu:leapSymbol> + </icu:isLeapMonth> + </special> + </calendar> + </calendars> + <timeZoneNames> + <zone type=""> + <long> + <standard/> + <daylight/> + </long> + <short> + <standard/> + <daylight/> + </short> + <exemplarCity/> + </zone> + </timeZoneNames> + </dates> +</ldml> + diff --git a/icuSources/data/xml/main/ru.xml b/icuSources/data/xml/main/ru.xml new file mode 100644 index 00000000..72fd2c48 --- /dev/null +++ b/icuSources/data/xml/main/ru.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="ru"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sa.xml b/icuSources/data/xml/main/sa.xml new file mode 100644 index 00000000..8fea0d1e --- /dev/null +++ b/icuSources/data/xml/main/sa.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sa"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Deva</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sh.xml b/icuSources/data/xml/main/sh.xml new file mode 100644 index 00000000..7613693a --- /dev/null +++ b/icuSources/data/xml/main/sh.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sh"/> + </identity> +</ldml> diff --git a/icuSources/data/xml/main/sid.xml b/icuSources/data/xml/main/sid.xml new file mode 100644 index 00000000..ad8d1004 --- /dev/null +++ b/icuSources/data/xml/main/sid.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sid"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sk.xml b/icuSources/data/xml/main/sk.xml new file mode 100644 index 00000000..ed3c07cf --- /dev/null +++ b/icuSources/data/xml/main/sk.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sk"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sl.xml b/icuSources/data/xml/main/sl.xml new file mode 100644 index 00000000..3f0eea3f --- /dev/null +++ b/icuSources/data/xml/main/sl.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/so.xml b/icuSources/data/xml/main/so.xml new file mode 100644 index 00000000..d8b7db7c --- /dev/null +++ b/icuSources/data/xml/main/so.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="so"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sq.xml b/icuSources/data/xml/main/sq.xml new file mode 100644 index 00000000..bbba57d9 --- /dev/null +++ b/icuSources/data/xml/main/sq.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sq"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sr.xml b/icuSources/data/xml/main/sr.xml new file mode 100644 index 00000000..c49907cf --- /dev/null +++ b/icuSources/data/xml/main/sr.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sr"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sr_Cyrl.xml b/icuSources/data/xml/main/sr_Cyrl.xml new file mode 100644 index 00000000..4de7736e --- /dev/null +++ b/icuSources/data/xml/main/sr_Cyrl.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sr"/> + <script type="Cyrl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> diff --git a/icuSources/data/xml/main/sr_Latn.xml b/icuSources/data/xml/main/sr_Latn.xml new file mode 100644 index 00000000..5562d3ed --- /dev/null +++ b/icuSources/data/xml/main/sr_Latn.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sr"/> + <script type="Latn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sv.xml b/icuSources/data/xml/main/sv.xml new file mode 100644 index 00000000..8abae81e --- /dev/null +++ b/icuSources/data/xml/main/sv.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sv"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/sw.xml b/icuSources/data/xml/main/sw.xml new file mode 100644 index 00000000..b2a6cf84 --- /dev/null +++ b/icuSources/data/xml/main/sw.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="sw"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/syr.xml b/icuSources/data/xml/main/syr.xml new file mode 100644 index 00000000..84cc5c87 --- /dev/null +++ b/icuSources/data/xml/main/syr.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="syr"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Syrc</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ta.xml b/icuSources/data/xml/main/ta.xml new file mode 100644 index 00000000..99eb8907 --- /dev/null +++ b/icuSources/data/xml/main/ta.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="ta"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Taml</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/te.xml b/icuSources/data/xml/main/te.xml new file mode 100644 index 00000000..fda92359 --- /dev/null +++ b/icuSources/data/xml/main/te.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="te"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Telu</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/th.xml b/icuSources/data/xml/main/th.xml new file mode 100644 index 00000000..214a380c --- /dev/null +++ b/icuSources/data/xml/main/th.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="th"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Thai</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ti.xml b/icuSources/data/xml/main/ti.xml new file mode 100644 index 00000000..6264bd36 --- /dev/null +++ b/icuSources/data/xml/main/ti.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:50 $"/> + <language type="ti"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Ethi</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/tig.xml b/icuSources/data/xml/main/tig.xml new file mode 100644 index 00000000..cee8307d --- /dev/null +++ b/icuSources/data/xml/main/tig.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="tig"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Ethi</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/tr.xml b/icuSources/data/xml/main/tr.xml new file mode 100644 index 00000000..3264e06d --- /dev/null +++ b/icuSources/data/xml/main/tr.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="tr"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/tt.xml b/icuSources/data/xml/main/tt.xml new file mode 100644 index 00000000..0b9e2c59 --- /dev/null +++ b/icuSources/data/xml/main/tt.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="tt"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/uk.xml b/icuSources/data/xml/main/uk.xml new file mode 100644 index 00000000..351ae17d --- /dev/null +++ b/icuSources/data/xml/main/uk.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="uk"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ur.xml b/icuSources/data/xml/main/ur.xml new file mode 100644 index 00000000..2abe6e63 --- /dev/null +++ b/icuSources/data/xml/main/ur.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="ur"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Arab</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/ur_IN.xml b/icuSources/data/xml/main/ur_IN.xml new file mode 100644 index 00000000..cde0430c --- /dev/null +++ b/icuSources/data/xml/main/ur_IN.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="ur"/> + <territory type="IN"/> + </identity> +</ldml> \ No newline at end of file diff --git a/icuSources/data/xml/main/uz.xml b/icuSources/data/xml/main/uz.xml new file mode 100644 index 00000000..c47a3044 --- /dev/null +++ b/icuSources/data/xml/main/uz.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="uz"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/uz_Arab.xml b/icuSources/data/xml/main/uz_Arab.xml new file mode 100644 index 00000000..ef1e5b90 --- /dev/null +++ b/icuSources/data/xml/main/uz_Arab.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="uz"/> + <script type="Arab"/> + <territory type="AF"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Arab</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/uz_Cyrl.xml b/icuSources/data/xml/main/uz_Cyrl.xml new file mode 100644 index 00000000..208833ed --- /dev/null +++ b/icuSources/data/xml/main/uz_Cyrl.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="uz"/> + <script type="Cyrl"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Cyrl</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/uz_Latn.xml b/icuSources/data/xml/main/uz_Latn.xml new file mode 100644 index 00000000..b7a828cf --- /dev/null +++ b/icuSources/data/xml/main/uz_Latn.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="uz"/> + <script type="Latn"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/uz_UZ.xml b/icuSources/data/xml/main/uz_UZ.xml new file mode 100644 index 00000000..e50a9a51 --- /dev/null +++ b/icuSources/data/xml/main/uz_UZ.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="uz"/> + <territory type="UZ"/> + </identity> +</ldml> + diff --git a/icuSources/data/xml/main/vi.xml b/icuSources/data/xml/main/vi.xml new file mode 100644 index 00000000..25a48586 --- /dev/null +++ b/icuSources/data/xml/main/vi.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="vi"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Latn</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/wal.xml b/icuSources/data/xml/main/wal.xml new file mode 100644 index 00000000..bd6df6ba --- /dev/null +++ b/icuSources/data/xml/main/wal.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="wal"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Ethi</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/zh.xml b/icuSources/data/xml/main/zh.xml new file mode 100644 index 00000000..ef19b062 --- /dev/null +++ b/icuSources/data/xml/main/zh.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="zh"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Hani</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/zh_Hans.xml b/icuSources/data/xml/main/zh_Hans.xml new file mode 100644 index 00000000..e53aa2c7 --- /dev/null +++ b/icuSources/data/xml/main/zh_Hans.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml draft="true"> + <identity> + <version number="$Revision: 1.1.1.1 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="zh"/> + <script type="Hans"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Hani</icu:script> + <icu:script type="2">Bopo</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/data/xml/main/zh_Hant.xml b/icuSources/data/xml/main/zh_Hant.xml new file mode 100644 index 00000000..9f47241c --- /dev/null +++ b/icuSources/data/xml/main/zh_Hant.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Copyright (c) 2002-2006 International Business Machines Corporation and others. All rights reserved. +--> +<!DOCTYPE ldml SYSTEM "http://www.unicode.org/cldr/dtd/1.4/ldml.dtd" +[ + <!ENTITY % icu SYSTEM " http://www.unicode.org/cldr/dtd/1.4/ldmlICU.dtd"> + %icu; +] +> +<ldml> + <identity> + <version number="$Revision: 1.1.1.2 $"/> + <generation date="$Date: 2006/08/31 23:04:51 $"/> + <language type="zh"/> + <script type="Hant"/> + </identity> + <characters> + <special xmlns:icu="http://www.icu-project.org/"> + <icu:scripts> + <icu:script type="1">Hani</icu:script> + <icu:script type="2">Bopo</icu:script> + </icu:scripts> + </special> + </characters> +</ldml> + diff --git a/icuSources/extra/uconv/Makefile.in b/icuSources/extra/uconv/Makefile.in index c7b1b00b..6af8810b 100644 --- a/icuSources/extra/uconv/Makefile.in +++ b/icuSources/extra/uconv/Makefile.in @@ -1,6 +1,6 @@ ## ****************************************************************************** ## * -## * Copyright (C) 1999-2004, International Business Machines +## * Copyright (C) 1999-2006, International Business Machines ## * Corporation and others. All Rights Reserved. ## * ## ******************************************************************************* @@ -26,7 +26,7 @@ FILESEPCHAR=/ include $(srcdir)/resfiles.mk RESDIR=$(MSGNAME) -RESFILES=$(RESSRC:$(RESOURCESDIR)$(FILESEPCHAR)%.txt=$(RESDIR)/$(RESOURCESDIR)$(FILESEPCHAR)$(MSGNAME)_%.res) +RESFILES=$(RESSRC:$(RESOURCESDIR)$(FILESEPCHAR)%.txt=$(RESDIR)/%.res) ## @@ -106,7 +106,7 @@ clean-local: resclean $(RMV) $(OBJECTS) $(TARGET) resclean: - #-$(INVOKE) $(BINDIR)/pkgdata --clean -p $(RESDIR) -O pkgdata.inc -m $(PKGMODE) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst + @#-$(INVOKE) $(BINDIR)/pkgdata --clean -p $(RESDIR) -O pkgdata.inc -m $(PKGMODE) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst $(RMV) pkgdata.inc $(RESDIR) distclean-local: clean-local @@ -114,17 +114,17 @@ distclean-local: clean-local check-local: -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -pkgdata.inc: $(srcdir)/pkgdata.inc.in $(top_builddir)/config.status +pkgdata.inc: $(srcdir)/pkgdata.inc.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -%.$(SECTION): $(srcdir)/%.$(SECTION).in $(srcdir)/pkgdata.inc.in +$(TARGET_STUB_NAME).$(SECTION): $(srcdir)/$(TARGET_STUB_NAME).$(SECTION).in pkgdata.inc cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + && CONFIG_FILES=$(subdir)/$(TARGET_STUB_NAME).$(SECTION) CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) $(UCONVMSG_LIB) $(LINK.cc) $(OUTOPT)$@ $(OBJECTS) $(LIBS) @@ -137,13 +137,13 @@ endif package-resfiles: $(RESDIR)/$(RESDIR).lst pkgdata.inc - $(INVOKE) $(PKGDATA_INVOKE_OPTS) $(BINDIR)/pkgdata -p $(RESDIR) $(PKGDATA_OPTS) -m $(PKGMODE) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst + $(INVOKE) $(PKGDATA_INVOKE_OPTS) $(BINDIR)/pkgdata -p $(MSGNAME) $(PKGDATA_OPTS) -m $(PKGMODE) -s $(RESDIR) -d $(RESDIR) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst -$(RESDIR)/$(RESDIR).lst: Makefile pkgdata.inc $(srcdir)/resfiles.mk +$(RESDIR)/$(RESDIR).lst: Makefile $(srcdir)/resfiles.mk @$(MKINSTALLDIRS) $(RESDIR) @-$(RMV) $@ - @for file in $(RESFILES); do \ - echo $(CURR_FULL_DIR)/$$file >> $@; \ + @for file in $(RESFILES:$(RESDIR)/%.res=%.res); do \ + echo $$file >> $@; \ done; # no install for static mode @@ -151,14 +151,16 @@ ifneq ($(UCONVMSG_MODE),static) install-resfiles: $(RESFILES) $(MKINSTALLDIRS) $(DESTDIR)$(ICUDATA_DIR) $(INVOKE) $(BINDIR)/pkgdata -p $(RESDIR) -O pkgdata.inc -m $(PKGMODE) -d $(RESDIR) -I $(INSTALLTO) -T $(RESDIR) $(RESDIR)/$(RESDIR).lst +else +install-resfiles: endif ## $(UCONVMSG_LIB): resfiles -$(RESDIR)/$(RESOURCESDIR)/$(MSGNAME)_%.res: $(srcdir)/$(RESOURCESDIR)/%.txt +$(MSGNAME)/%.res: $(srcdir)/$(RESOURCESDIR)/%.txt $(MKINSTALLDIRS) $(@D) - $(INVOKE) $(BINDIR)/genrb -p $(MSGNAME) -e UTF-8 -s $(^D) -d $(@D) $(^F) + $(INVOKE) $(BINDIR)/genrb -e UTF-8 -s $(^D) -d $(@D) $(^F) install-man: $(ALL_MAN_FILES) $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) diff --git a/icuSources/extra/uconv/samples/eucJP.txt b/icuSources/extra/uconv/samples/eucJP.txt index f151d441..680efb1d 100644 --- a/icuSources/extra/uconv/samples/eucJP.txt +++ b/icuSources/extra/uconv/samples/eucJP.txt @@ -1,37 +1,37 @@ -¥¦¥¤¥ó¥«¥ê¥Ã¥¹¤ÎÆüËܸì -¡¡ ¡Ö¥æ¡¼¥¶¡¼¥Õ¥ì¥ó¥É¥ê¡×¡Ã¤È¡Ã¸Æ¤Ð¤ì¤ë¡Ã -¡¡¡¡¤ê¤æ¤¦¤Ï¡¢¤´¤¯ ¡ÃÉáÄ̤Ρÿͤ¬¤´¤¯¡Ã -¡¡¡¡´Øñ¤Ë ¡Ã»ÈÍÑ ¡ÃÊýË¡¤ò¡Ã¥Þ¥¹¥¿¡¼¡Ã¤Ç¤­¡¢¡Ã -¡¡¡¡ËèÆü¤Î¡Ã¥¿¥¤¥× ¡Ã ¤Î ¡Ã»Å»ö¤Ë¤¹¤° ¡Ã -¡¡¡¡ÌòΩ¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤«¤é¤­¤Æ¤¤¤ë¡£¡Ã -¡¡¡¡¤è¤Ð¤ì¤ë¡¡¡¡¡¡¡¡?¡¡¡¡¡¡ ¡¡¸Æ¤Ð¤ì¤ë -¡¡¡¡¤ê¤å¤¦¤Ï¡¢¤´¤¯¡¡?¡¡¡¡¡¡¡¡ Íýͳ¤Ï¡¢¤´¤¯ -¡¡¡¡¤Õ¤Ä¤¦¤Î¡¡¡¡¡¡¡¡?¡¡¡¡¡¡¡¡ÉáÄ̤Π-¡¡¡¡¤Ò¤È¤¬¤´¤¯¡¡¡¡¡¡?¡¡¡¡¡¡¡¡¿Í¤¬¤´¤¯ -¡¡¡¡¤«¤ó¤¿¤ó¤Ë¡¡¡¡¡¡?¡¡¡¡¡¡¡¡´Êñ¤Ë -¡¡¡¡¤·¤è¤¦¡¡¡¡¡¡¡¡¡¡?¡¡¡¡¡¡¡¡»ÈÍÑ -¡¡¡¡¤Û¤¦¤Û¤¦¤ò¡¡¡¡¡¡?¡¡¡¡¡¡¡¡ÊýË¡¤ò -¡¡¡¡¤Þ¤¤¤Ë¤Á¤Î¡¡¡¡¡¡?¡¡¡¡¡¡¡¡ËèÆü¤Î -¡¡¡¡¤·¤´¤È¤Ë¤¹¤°¡¡¡¡?¡¡¡¡¡¡¡¡»Å»ö¤Ë¤¹¤° -¡¡¡¡¤ä¤¯¤À¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤«¤é¤­¤Æ¤¤¤ë¡£? -¡¡¡¡ÌòΩ¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤«¤é¤­¤Æ¤¤¤ë¡£ -¤¢¡¡¤¤¡¡¤¦¡¡¤¨¡¡¤ª¡¡ -¤¡¡¡¤£¡¡¤¥¡¡¤§¡¡¤© -¤«¡¡¤­¡¡¤¯¡¡¤±¡¡¤³¡¡¡¡¤­¤ã ¤­¤å¡¡¤­¤ç -¤µ¡¡¤·¡¡¤¹¡¡¤»¡¡¤½¡¡¡¡¤·¤ã¡¡ ¤·¤å ¤·¤§¡¡¤·¤ç -¤¿¡¡¤Á¡¡¤Ä¡¡¤Æ¡¡¤È¡¡¡¡ ¤Á¤ã¡¡¤Á¤å¡¡¤Á¤§ ¤Á¤ç -¤Ê¡¡¤Ë¡¡¤Ì¡¡¤Í¡¡¤Î¡¡¡¡ ¤Ë¤ã¡¡ ¤Ë¤å¡¡¤Ë¤ç -¤Ï¡¡¤Ò¡¡¤Õ¡¡¤Ø¡¡¤Û¡¡¡¡ ¤Ò¤ã ¡¡¤Ò¤å ¤Ò¤ç - ¤Õ¤¡¡¡¤Õ¤£¡¡¤Õ¤§¡¡¤Õ¤© -¤Þ¡¡¤ß¡¡¤à¡¡¤á¡¡¤â¡¡¡¡ ¤ß¤ã¡¡¡¡¤ß¤å¡¡¡¡¤ß¤ç -¤ä¡¡(¤¤)¡¡¤æ (¤¨) ¤è¡¡¡¡ ¤ã¡¡¡¡¡¡¤å¡¡¡¡¡¡¤ç -¤é¡¡¤ê¡¡¤ë¡¡¤ì¡¡¤í¡¡¡¡¤ê¤ã ¤ê¤å¡¡ ¤ê¤ç -¤ï¡¡¤ð (¤¦) ¤ñ¡¡ ¤ò ¤î ¡¡¥ð¡¡¡¡¡¡¥ñ -¤ó ? ¤Ã ¥«¡¡¥± -¤¬¡¡¤®¡¡¤°¡¡¤²¡¡¤´¡¡¡¡ ¤®¤ã¡¡¤®¤å¡¡¤®¤ç - ¤°¤î¡¡¤°¤§ -¤¶¡¡¤¸¡¡¤º¡¡¤¼¡¡¤¾¡¡¡¡¤¸¤ã¡¡ ¤¸¤å¡¡ ¤¸¤§¡¡¤¸¤ç -¤À¡¡¤Â¡¡¤Å¡¡¤Ç¡¡¤É¡¡¡¡¤Â¤ã¡¡¤Â¤£¡¡ ¤Â¤å ¤Â¤§¡¡¤Â¤© -¤Ð¡¡¤Ó¡¡¤Ö¡¡¤Ù¡¡¤Ü¡¡¡¡¡¡¤Ó¤ã¡¡¤Ó¤å¡¡¤Ó¤ç -¤Ñ¡¡¤Ô¡¡¤×¡¡¤Ú¡¡¤Ý¡¡¡¡¡¡¤Ô¤ã¡¡¤Ô¤å¡¡¤Ô¤ç -¥ï¡¡¥¦¥£ ¥¦¡¡¥¦¥§ ¥¦¥©¡¡¥ô¥¡¡¡¥ô¥£¡¡¥ô¡¡¥ô¥§¡¡¥ô¥© +¥¦¥¤¥ó¥«¥ê¥Ã¥¹¤ÎÆüËܸì +¡¡ ¡Ö¥æ¡¼¥¶¡¼¥Õ¥ì¥ó¥É¥ê¡×¡Ã¤È¡Ã¸Æ¤Ð¤ì¤ë¡Ã +¡¡¡¡¤ê¤æ¤¦¤Ï¡¢¤´¤¯ ¡ÃÉáÄ̤Ρÿͤ¬¤´¤¯¡Ã +¡¡¡¡´Øñ¤Ë ¡Ã»ÈÍÑ ¡ÃÊýË¡¤ò¡Ã¥Þ¥¹¥¿¡¼¡Ã¤Ç¤­¡¢¡Ã +¡¡¡¡ËèÆü¤Î¡Ã¥¿¥¤¥× ¡Ã ¤Î ¡Ã»Å»ö¤Ë¤¹¤° ¡Ã +¡¡¡¡ÌòΩ¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤«¤é¤­¤Æ¤¤¤ë¡£¡Ã +¡¡¡¡¤è¤Ð¤ì¤ë¡¡¡¡¡¡¡¡?¡¡¡¡¡¡ ¡¡¸Æ¤Ð¤ì¤ë +¡¡¡¡¤ê¤å¤¦¤Ï¡¢¤´¤¯¡¡?¡¡¡¡¡¡¡¡ Íýͳ¤Ï¡¢¤´¤¯ +¡¡¡¡¤Õ¤Ä¤¦¤Î¡¡¡¡¡¡¡¡?¡¡¡¡¡¡¡¡ÉáÄ̤Π+¡¡¡¡¤Ò¤È¤¬¤´¤¯¡¡¡¡¡¡?¡¡¡¡¡¡¡¡¿Í¤¬¤´¤¯ +¡¡¡¡¤«¤ó¤¿¤ó¤Ë¡¡¡¡¡¡?¡¡¡¡¡¡¡¡´Êñ¤Ë +¡¡¡¡¤·¤è¤¦¡¡¡¡¡¡¡¡¡¡?¡¡¡¡¡¡¡¡»ÈÍÑ +¡¡¡¡¤Û¤¦¤Û¤¦¤ò¡¡¡¡¡¡?¡¡¡¡¡¡¡¡ÊýË¡¤ò +¡¡¡¡¤Þ¤¤¤Ë¤Á¤Î¡¡¡¡¡¡?¡¡¡¡¡¡¡¡ËèÆü¤Î +¡¡¡¡¤·¤´¤È¤Ë¤¹¤°¡¡¡¡?¡¡¡¡¡¡¡¡»Å»ö¤Ë¤¹¤° +¡¡¡¡¤ä¤¯¤À¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤«¤é¤­¤Æ¤¤¤ë¡£? +¡¡¡¡ÌòΩ¤Æ¤ë¤³¤È¤¬¤Ç¤­¤ë¤³¤È¤«¤é¤­¤Æ¤¤¤ë¡£ +¤¢¡¡¤¤¡¡¤¦¡¡¤¨¡¡¤ª¡¡ +¤¡¡¡¤£¡¡¤¥¡¡¤§¡¡¤© +¤«¡¡¤­¡¡¤¯¡¡¤±¡¡¤³¡¡¡¡¤­¤ã ¤­¤å¡¡¤­¤ç +¤µ¡¡¤·¡¡¤¹¡¡¤»¡¡¤½¡¡¡¡¤·¤ã¡¡ ¤·¤å ¤·¤§¡¡¤·¤ç +¤¿¡¡¤Á¡¡¤Ä¡¡¤Æ¡¡¤È¡¡¡¡ ¤Á¤ã¡¡¤Á¤å¡¡¤Á¤§ ¤Á¤ç +¤Ê¡¡¤Ë¡¡¤Ì¡¡¤Í¡¡¤Î¡¡¡¡ ¤Ë¤ã¡¡ ¤Ë¤å¡¡¤Ë¤ç +¤Ï¡¡¤Ò¡¡¤Õ¡¡¤Ø¡¡¤Û¡¡¡¡ ¤Ò¤ã ¡¡¤Ò¤å ¤Ò¤ç + ¤Õ¤¡¡¡¤Õ¤£¡¡¤Õ¤§¡¡¤Õ¤© +¤Þ¡¡¤ß¡¡¤à¡¡¤á¡¡¤â¡¡¡¡ ¤ß¤ã¡¡¡¡¤ß¤å¡¡¡¡¤ß¤ç +¤ä¡¡(¤¤)¡¡¤æ (¤¨) ¤è¡¡¡¡ ¤ã¡¡¡¡¡¡¤å¡¡¡¡¡¡¤ç +¤é¡¡¤ê¡¡¤ë¡¡¤ì¡¡¤í¡¡¡¡¤ê¤ã ¤ê¤å¡¡ ¤ê¤ç +¤ï¡¡¤ð (¤¦) ¤ñ¡¡ ¤ò ¤î ¡¡¥ð¡¡¡¡¡¡¥ñ +¤ó ? ¤Ã ¥«¡¡¥± +¤¬¡¡¤®¡¡¤°¡¡¤²¡¡¤´¡¡¡¡ ¤®¤ã¡¡¤®¤å¡¡¤®¤ç + ¤°¤î¡¡¤°¤§ +¤¶¡¡¤¸¡¡¤º¡¡¤¼¡¡¤¾¡¡¡¡¤¸¤ã¡¡ ¤¸¤å¡¡ ¤¸¤§¡¡¤¸¤ç +¤À¡¡¤Â¡¡¤Å¡¡¤Ç¡¡¤É¡¡¡¡¤Â¤ã¡¡¤Â¤£¡¡ ¤Â¤å ¤Â¤§¡¡¤Â¤© +¤Ð¡¡¤Ó¡¡¤Ö¡¡¤Ù¡¡¤Ü¡¡¡¡¡¡¤Ó¤ã¡¡¤Ó¤å¡¡¤Ó¤ç +¤Ñ¡¡¤Ô¡¡¤×¡¡¤Ú¡¡¤Ý¡¡¡¡¡¡¤Ô¤ã¡¡¤Ô¤å¡¡¤Ô¤ç +¥ï¡¡¥¦¥£ ¥¦¡¡¥¦¥§ ¥¦¥©¡¡¥ô¥¡¡¡¥ô¥£¡¡¥ô¡¡¥ô¥§¡¡¥ô¥© diff --git a/icuSources/extra/uconv/samples/hangul-eucKR.txt b/icuSources/extra/uconv/samples/hangul-eucKR.txt index 74cab611..90a0393b 100644 --- a/icuSources/extra/uconv/samples/hangul-eucKR.txt +++ b/icuSources/extra/uconv/samples/hangul-eucKR.txt @@ -1,2 +1,2 @@ -µµ¼­°ü -Çѱ¹ +µµ¼­°ü +Çѱ¹ diff --git a/icuSources/extra/uconv/samples/hania-eucKR.txt b/icuSources/extra/uconv/samples/hania-eucKR.txt index ddf8d458..3197f751 100644 --- a/icuSources/extra/uconv/samples/hania-eucKR.txt +++ b/icuSources/extra/uconv/samples/hania-eucKR.txt @@ -1,2 +1,2 @@ -??º§ +??º§ ?? \ No newline at end of file diff --git a/icuSources/extra/uconv/samples/iso8859-1.txt b/icuSources/extra/uconv/samples/iso8859-1.txt index a04227d3..95e57d6c 100644 --- a/icuSources/extra/uconv/samples/iso8859-1.txt +++ b/icuSources/extra/uconv/samples/iso8859-1.txt @@ -1,36 +1,18 @@ Foto ______ det formodede fødehus, hjørnet ______ Hans Jensensstræde og Bangs Boder. - (H. C. Andersens Hus, Odense). - - BARNDOMSOMGIVELSERNE</b> - Skønt H. C. Andersens barndomsomgivelser var meget fattige, blev de i hans rige fantasi - solbeskinnede. - Der findes en mandtalsliste fra nogle få år ______ H. C. Andersens fødsel. Den er ______ 1801 - og den giver klare oplysninger om, hvor mange der boede ______ Odense og hvad de var - beskæftigede ______. Den omfatter 1199 husstande. Hvis man fordeler disse ______ erhverv, - får man 102 embeds- og bestillingsmænd, 26 officerer, 12 der beskæftiger sig med - immaterielle erhverv, 81 som lever ______ handel, 36 værtshusholdere, 460 håndværkere, 39 - avlsmænd og urtemænd, 121 soldater, 97 daglejere, 139 enlige kvinder og - almissemedlemmer, 29 pensionister og rentenydere. - H. C. Andersens forældre tilhørte samfundets laveste lag. Faderen var friskomager, og - når han meldte sig ______ militærtjeneste ______ Napoleons side, har det nok ikke så meget været - idealisme som praktisk økonomi. For at sikre sig en soldats værgeløn. Han kom ikke - længere end ______ Holsten. Han fik høj feber og måtte sendes hjem. Da han kom hjem, - forværredes sygdommen og han døde. - diff --git a/icuSources/extra/uconv/samples/koi8r.txt b/icuSources/extra/uconv/samples/koi8r.txt index 08029495..578a30f1 100644 --- a/icuSources/extra/uconv/samples/koi8r.txt +++ b/icuSources/extra/uconv/samples/koi8r.txt @@ -1,6 +1,6 @@ -áÍÅÒÉËÁÎÓËÉÅ ÓÕÄÁ ÎÁÈÏÄÑÔÓÑ × ÍÅÖÄÕÎÁÒÏÄÎÙÈ ×ÏÄÁÈ. ñÐÏÎÉÑ -×ÙÒÁÚÉÌÁ ÓÅÒØÅÚÎÏÅ ÂÅÓÐÏËÏÊÓÔ×Ï ÓÏ×ÅÔÓËÉÍÉ ÄÅÊÓÔ×ÉÑÍÉ. -ðÅÎÔÁÇÏÎ ÂÅÓÐÏËÏÊÓÔ×Á ÎÅ ÐÒÏÑ×ÉÌ. óûá ÐÒÏ×ÏÄÑÔ ÐÏÄÏÂÎÏÅ ÓÌÅÖÅ- -ÎÉÅ ÚÁ ÓÏ×ÅÔÓËÉÍÉ ÓÕÄÁÍÉ × ëÁÒÉÂÓËÏÍ ÍÏÒÅ. ðÒÁ×ÄÁ, ËÏÌÉÞÅÓÔ×Ï -ÓÏ×ÅÔÓËÉÈ ÓÁÍÏÌÅÔÏ× ×ÙÚ×ÁÌÏ ÎÅËÏÔÏÒÏÅ ÕÄÉ×ÌÅÎÉÅ.. - +áÍÅÒÉËÁÎÓËÉÅ ÓÕÄÁ ÎÁÈÏÄÑÔÓÑ × ÍÅÖÄÕÎÁÒÏÄÎÙÈ ×ÏÄÁÈ. ñÐÏÎÉÑ +×ÙÒÁÚÉÌÁ ÓÅÒØÅÚÎÏÅ ÂÅÓÐÏËÏÊÓÔ×Ï ÓÏ×ÅÔÓËÉÍÉ ÄÅÊÓÔ×ÉÑÍÉ. +ðÅÎÔÁÇÏÎ ÂÅÓÐÏËÏÊÓÔ×Á ÎÅ ÐÒÏÑ×ÉÌ. óûá ÐÒÏ×ÏÄÑÔ ÐÏÄÏÂÎÏÅ ÓÌÅÖÅ- +ÎÉÅ ÚÁ ÓÏ×ÅÔÓËÉÍÉ ÓÕÄÁÍÉ × ëÁÒÉÂÓËÏÍ ÍÏÒÅ. ðÒÁ×ÄÁ, ËÏÌÉÞÅÓÔ×Ï +ÓÏ×ÅÔÓËÉÈ ÓÁÍÏÌÅÔÏ× ×ÙÚ×ÁÌÏ ÎÅËÏÔÏÒÏÅ ÕÄÉ×ÌÅÎÉÅ.. + diff --git a/icuSources/extra/uconv/samples/utf8/armenian.txt b/icuSources/extra/uconv/samples/utf8/armenian.txt index b2b24991..0cceb1bb 100644 --- a/icuSources/extra/uconv/samples/utf8/armenian.txt +++ b/icuSources/extra/uconv/samples/utf8/armenian.txt @@ -1,4 +1,4 @@ -Աեցեհի Õ«Õ´ Õ¬Õ¡Õ¾ ?ւղիե լավարար, -Ô¿ÕµÕ¡Õ¥Õ¢Õ½ Õ¹Õ¿Õ¡ÕµÕ« Õ¯Õ¡Õ½Õ¯Õ¡Õ®Õ« Õ´Õ°Õ£Õ«Õ¥... -Ô±ÕµÕ¥ÕºÕ°Õ½ Õ¯?ւզհի Õ´Õ°Õ¯Õ¥ Õ«Õ¥Õ® ?ավատր, -Ô±ÕµÕ¥ÕºÕ°Õ½ Õ¯?ւզհի ?Õ¡Õ¾Õ¡Õ¿Õ¡Õ¬ մհկիե։ +Աեցեհի Õ«Õ´ Õ¬Õ¡Õ¾ ?ւղիե լավարար, +Ô¿ÕµÕ¡Õ¥Õ¢Õ½ Õ¹Õ¿Õ¡ÕµÕ« Õ¯Õ¡Õ½Õ¯Õ¡Õ®Õ« Õ´Õ°Õ£Õ«Õ¥... +Ô±ÕµÕ¥ÕºÕ°Õ½ Õ¯?ւզհի Õ´Õ°Õ¯Õ¥ Õ«Õ¥Õ® ?ավատր, +Ô±ÕµÕ¥ÕºÕ°Õ½ Õ¯?ւզհի ?Õ¡Õ¾Õ¡Õ¿Õ¡Õ¬ մհկիե։ diff --git a/icuSources/extra/uconv/samples/utf8/banviet.txt b/icuSources/extra/uconv/samples/utf8/banviet.txt index b0245bb9..7e1f5cb0 100644 --- a/icuSources/extra/uconv/samples/utf8/banviet.txt +++ b/icuSources/extra/uconv/samples/utf8/banviet.txt @@ -1,11 +1,11 @@ -Bần chỉ là một anh nghèo xác, ngày ngày lang-thang -khắp xóm này qua xóm khác xin ăn. Quần áo -rách-mướp Bần cÅ©ng chả coi sao, chân không có giầy và -đầu cÅ©ng chẳng có mÅ©. Giời nắng hay giời mÆ°a Bần -không bao giờ quan-tâm. Một ngưòi nhÆ° Bần thì ai cÅ©ng -tưởng là không còn có gì là quí-vât nữa. Thế nhÆ°ng ta -nhầm vì Bần có cái quạt mo, Bần quí lắm. Bần quí và giữ -luôn không rời bỏ bao giờ. Giời nắng thì Bần che đầu, -giời mÆ°a Bần cÅ©ng nhờ nó mà đỡ ướt. Muốn ngồi Bần -dùng làm chiếu và đêm đến các chú muỗi vo-ve thì Bần -dùng để dánh đuổi các chú ấy. +Bần chỉ là một anh nghèo xác, ngày ngày lang-thang +khắp xóm này qua xóm khác xin ăn. Quần áo +rách-mướp Bần cÅ©ng chả coi sao, chân không có giầy và +đầu cÅ©ng chẳng có mÅ©. Giời nắng hay giời mÆ°a Bần +không bao giờ quan-tâm. Một ngưòi nhÆ° Bần thì ai cÅ©ng +tưởng là không còn có gì là quí-vât nữa. Thế nhÆ°ng ta +nhầm vì Bần có cái quạt mo, Bần quí lắm. Bần quí và giữ +luôn không rời bỏ bao giờ. Giời nắng thì Bần che đầu, +giời mÆ°a Bần cÅ©ng nhờ nó mà đỡ ướt. Muốn ngồi Bần +dùng làm chiếu và đêm đến các chú muỗi vo-ve thì Bần +dùng để dánh đuổi các chú ấy. diff --git a/icuSources/extra/uconv/samples/utf8/chinese-ulysses.txt b/icuSources/extra/uconv/samples/utf8/chinese-ulysses.txt index 724f0571..94e36623 100644 --- a/icuSources/extra/uconv/samples/utf8/chinese-ulysses.txt +++ b/icuSources/extra/uconv/samples/utf8/chinese-ulysses.txt @@ -1,222 +1,222 @@ -  俺正和首都警署的老特洛伊在凉亭山街角那儿寒喧呢,该死的,冷不丁儿的来了一名扫烟囱的背时家伙,他那长玩意儿差点儿戳进了俺那眼睛里头去。俺转回脑袋,正打算狠々地教训他一顿,没曾想一眼看见石头斜墻街那儿来了个人,道是谁呢,原来是约・哈因斯。 -  ___囉,约,俺说。你怎么样?那个扫烟囱的背时家伙,用他的长把儿刷子差点儿把我的眼睛捅掉。你看见了吗? -  ___煤烟到,运气好,约说。你刚才说话的那个老小子是谁? -  ___老特洛伊呗,俺说,原来是部队的。那家伙又是扫帚又是梯子,把交通都堵塞起来了,俺恨不得把他逮起来。 -  ___你到这片儿来干吗?约问。 -  ___没有什么屁事,俺说。兵营教堂那边,小鸡胡同口上有一个背时的大个子,不要脸的恶棍__老特洛伊就是给我透了那家伙的一点儿底__要了天主知道多少茶叶和糖,他答应每星期付三先令,说是在唐郡还有个农庄。货主是那边海梯斯堡街附近的一个小矮子,名叫摩西・赫佐格的。 -  ___割包皮的吗?#1 约说。 -==注1:尤太教男人自幼即割去包皮。== -  ___可不吗,俺说。头上去了一点儿。一个姓吉拉蒂的老管子工。我已经钉了他两个星期,可是一个便士也挤不出来。 -  ___你现在就干这勾当?约说。 -  ___可不吗,俺说。大人物落魄到这种地步:收倒帐、荒帐。可这家伙呀,像他这样臭名远扬的背时土匪,你走上一天的路也难得见到一个,一脸的麻子够装一场阵头雨的。{你就告诉他吧,}他说「我等着他呢,}他说,{我专门儿地等着他再派你来,只要他敢,}他说,{我就让法庭给他发传票,没有错儿,告他个无照营业。}他说完这话,      那模样就像要爆炸赛的。耶稣哪,那犹太小子火冒三丈的模样儿可真逗笑!{他喝我的茶。他吃我的糖。他倒不付我的帐?}[241ï¼½ - 茲有都柏林市沃德码头区凯文道十三号商人摩西・赫佐格,下称售方,出售耐久食品并送交都柏林市阿伦码头区凉亭山二十九号绅士迈克尔・ E・吉拉蒂先生,下称购方,计开一级茶叶五磅,常衡制,每常衡制磅价三先令零便士,碎晶体白糖常衡制三斯通#1,每常衡制磅价三便士,该购方由该售方供应物品后应付该售方英币一镑五先令又六便士,此款应由该购方以每周分偿办法付与售方,即每七历日付英币三先令零便士;该购方对该耐久食品不得典当、抵押、出售或作其他方式转让,该售方拥有并继续拥有全面而不可侵犯之所有权,该售方有权自由任意处理,直至此款由该购方按照此约所定方式向该售方付清为止,此约于由该售方与其财产继承人、业务继承人、委托代理人、指定受让人为一方,该购方与其财产继承人业务继承人、委托代理人、指定受让人为另一方于本日于此议定。 -==注1:「斯通」为英国重量单位,一般合十四磅。==   -  ___你是严格的滴酒不入的吗?约说。 -  ___除了 喝酒的时候,啥也不喝,俺说。 -  ___去拜访一下咱们那位朋友怎么样?约说。 -  ___谁?俺说。他呀,精神错乱上了天主的约翰那儿去了#2,可怜的家伙。 -==注2:「天主的约翰」为都柏林郡 一瘋人院。== -  ___是喝他自己的貨色喝的吧? -  ___可不嗎,俺說。威士忌加水,上了腦子。 -  ___走吧,上巴尼・基尔南酒店吧,约说。我要找公民。 -  ___就是巴尼宝贝儿吧,俺说。有什么怪事儿或是好事儿吗? -  ___屁事儿也没有,约说。我采访城标饭店那个会议了。 -  ___啥会,约?俺说。 -  ___牧牛贸易,约说,讨论口啼疫的。我要给公民透个信儿。 -  俺们绕过亚麻厂兵营,绕着法院后头,边走边聊。约这位老兄,有  的时候是挺够朋友的,可他就是老没有。耶稣 呀,俺可咽不下背时的滑头吉拉蒂这口气,白日打劫的土匪。告他个无照营业,他说。 -  在那美丽的伊尼斯菲尔#3,有那么一片土地,圣迈肯的土地。#4一座高塔在此拔地而起,四周远处都能望见。有许多大人物在此安眠,许多大名鼎々的英雄王公在此安眠如生。这片土地委实赏心悦目,上有潺々流水,水中群 鱼嬉戏,有鲂 ,有鲽鱼。有拟鲤,有大比目,有尖嘴黑绒鳕,有鲑鱼,有黄盖鲽,有菱鲆,有鲆鲽,有青鳕,还有各种杂鱼,以其他各类不计其数的水族。在西方和东方,高大的树木在和风吹拂之中,向四面八方搖晃着极其优美的枝叶,有飘々然的悬铃木,有黎巴嫩雪松,有挺拔的梧桐,有改良桉树,以及其他树木世界优良品种,这一地区应有尽有。美妙女郎散坐在美妙树木之间,唱着最美妙的歌曲,并以形々色々美妙物品为游戏,诸如金块、银鱼、大筐的鲱、整网的鳗鱼、小鳕鱼、整篓的仔鱼、紫色的海宝、活泼々的昆[242]虫。四方英雄远道来向她们求爱。从爱勃兰纳到斯里符玛奇山#1,无可匹敌的王子们来自自由世界的芒斯特省,来自公道的康诺特省,来自光滑、整洁的莱因斯特省,来自克罗阿蝉的地域,来自光辉的阿尔马郡,来自高贵的博伊尔区,是王子们,都是国王的后代。  -==注3:「伊尼斯菲尔」为爱尔兰语意为「命运之岛」系对爱尔兰的称呼之一。== -==注4:圣迈肯教堂离此不远,其地下墓穴以尸体保存良好著称。== -==注1:爱博兰纳为古地名,即今都柏林所在地。== -  一座亮晶々的宫殿耸立在那里,驾驶着为此目的而建造的船舶在大海航行的人从远处就能望见它的水晶屋顶闪々发光。当地所有的畜群 、肥犊、首批鲜果,纷々运来这里,由奥康内尔・茨赛门收费,他是世传的酋长#2 巨大的货车载来了丰富的农田的产物,有长筐装的菜花,有大盘装的菠菜、菠萝段、仰光瓜,有大筐装的蕃茄,有桶装的无花果,有成堆的瑞典萝卜、球状马铃薯,有成捆的各色甘兰、约克菜、皱叶菜,有成盘的土中珍珠洋葱头,还有浅盘装的蘑菇、蛋奶豌豆、肥巢菜、油菜、以及红的、绿的、黄的、棕的、赤褐色的甜、大、苦、熟带斑的苹果,还有小篓小篓的草莓、一篮一篮的醋栗,肉鼓々毛茸々的;可供王侯享用的草莓、新摘的紫莓。 -==注2:费茨赛门为1904 年都柏林食品商店总管,商场在基尔南酒店附近。== -  {我等着他呢,}他说,{我专门儿地等着他呢。}你给我滚到这儿来吧,吉拉蒂,你这个臭名远扬的拦路抢劫的背时土匪! -  一条路上来的,还有不计其数的牲畜群 ,有系铃带头的去势公羊、催情补饲的母羊、初剪羊毛的壮羊、羔羊、灰雁、中号菜牛、吼喘母马、截角牛犊、长毛羊、待肥育羊、卡夫头等待产牛、等外品、阉母猪、咸肉用猪、各种不同品种高级生猪、安格斯小母牛、最佳纯种去角阉牛、以及获奖的头等的奶牛与菜牛;这里不断听到蹄子声、咯々声、吼叫声、哞々声、咩々声、咆哮声、隆々声、呼噜声、吃料声、咀嚼声,有羊群、有猪群、有蹄子沉重的牛群 ,来自勒斯克、鲁希、卡里克孟的牧场,来自索孟德那水流丰富的山谷,来自麦吉利口客地那些难于攀登的石堆,来自气势宏大深不可测的香农河,来自基亚族地区那些平缓的山坡,乳房因奶过多而肿胀不堪,还有大桶的黄油、乳酪酶、农家木桶装的羔羊前胸肉、大筐的玉米,还有十打十打的禽蛋,各种大小都有,玛瑙色的和暗褐色的。 -  这么的,俺们拐近了巴尼・基尔南酒店,可不吗,公民正在那角落里头,一边跟他自个儿和那条背时的癞皮杂种狗加里欧文大会谈,一边等着天上掉下什么喝的来呢。 -  ___瞧他,俺说,克露斯金朗不离身,#3 带着他的大事业公事卷宗守着窝。 -==注3:「克露金斯朗」为爱尔兰语歌曲名,即「满々一小坛酒」。== -  背时的杂种狗发出一种悻々的声音,叫人听了毛骨悚然的。要是有人把那条恶狗的命结束了,那才是地道的善行呢。俺听说过一件真事,桑特里一名武警来送传票,是执照的事,叫这条狗啃去大半条裤子。 -  ___站住,交出来,他说。 -  ___没有事儿,公民,约说。自己人。 -  ___自己人放行,他说。 -  然后他用手揉々一只眼睛说: -  你们对时局有什么看法? -  他搞矛兵#1 和山上罗利#2 那一套呢。可是,老天在上,约倒是能对付这局面的。 -==注1:「矛兵」为十七世纪起义抗英的爱尔兰游击队。== -==注2:「山上的罗利」为十九世纪民歌中歌颂的反英农民志士。 -  ___我看是物价要涨,他说着把手顺着裤裆伸了下去。   -  老天在上,公民把爪子往膝盖上一拍说:  ___都是外国的战争造成的。 -  约在口袋里翘着大姆指说: -  ___是俄国佬想统治。   -  ___去你的吧,约,俺说。你那套背时胡扯算了吧。俺可渴坏了,半个克朗也不够解的。 -  ___你说是什么吧,公民,约说。 -  ___咱本国的酒,他说。 -  ___你呢?约说。 -  ___照着葫芦画瓢,俺说。 -  ___来三品脱,特里,约说。老伙计怎么样,公民?他说。 -  ----再好也没有,a chara#1 。他说。怎么样,加里?咱们会胜利的,是吧? - ----他说着话,一把抓住了那背时老狗的后颈皮,耶稣 啊,差不点儿把它勒死。 -==注1:爱尔兰语:「我的朋友」。   -  坐在圆塔前大石墩上的是一条好汉,肩膀宽阔、胸膛厚实、四肢强壮、眼光坦率、头发发红、雀斑斑斓、胡子蓬松、嘴巴宽大、鼻子高耸、脑袋长々、嗓音深沉、膝盖外露、两腿多毛、脸色发红、双臂多腱。他两肩之间宽达数伊尔#3,双膝嶙峋 如山岩,膝上和身体其余外露部分相同,都长着厚々的一层黄褐色刺毛,颜色和硬度都像山荊豆(Ulex Europeus#4)。两个鼻孔中伸出同样黄褐色的硬毛,鼻孔之大,可容草地 鹨在其洞穴深处筑巢。两只大眼睛的尺寸,和大头的菜花相仿,常有一滴眼泪和一丝微笑在争夺眼内地盘。#5 从他的口中深处,不时有一股发热的强气流冒出,而他的巨大心脏的博动,那响亮有力的节奏造成强大的共鸣,雷声隆々,将地面、高耸的塔顶和比塔更高的洞壁都震得颤动搖晃不已。 -==注3:「伊尔」为旧时英制长度,合45 英寸。 -==注4: -==注5:典出穆尔诗<爱琳,你眼中的眼泪和微笑>。== -  他穿一件无袖长衣,用新剥牛皮制成,下垂及膝如苏格兰短裙,腰间用一根芦苇毛草编成的绳子束住。裙子下面是鹿皮裤子,用肠线粗缝而成的。他的下肢套着用地衣紫染过的巴尔布里根裹腿,脚上套着盐渍粗牛皮靴子,靴带是同一牲口的气管。他的腰带上 挂着一大串海石子,都随着他那奇特的身体的每一个动作发出哐啷哐啷的声音,上面镌刻着粗犷 而生动的部落艺术人像,都是爱尔兰古代的男女英雄,有:库丘陵、身经百战的康恩、九个人质的尼尔、金克拉的布莱恩王、玛拉基大帝、阿特・麦克墨罗、沙恩・奥尼尔、约翰・墨菲神父、欧文・罗、派特里克・萨斯菲尔德、红色的休・奥唐奈、红色的吉姆・麦克德莫特、Soggarth Eogham O'Growney ,迈克尔・德怀尔、弗朗西・希金斯、亨利・乔伊・迈克拉肯、歌利亚、霍勒斯・惠特利、托马斯・Conneff、佩格・沃芬顿、村铁匠、Captain Moonlight、Captain 杯葛、丹蒂・lighieri、克里斯托费・哥伦布、S fursa(费萨)、S 布伦丹、马歇尔・麦克马洪、查理曼、西奥博尔德・沃尔夫・托恩、马加比家族之母、thelast of Mohicans 、卡斯蒂利亚的罗斯、the Man for Galway(戈尔韦、在蒙特卡洛砸银行的曼、在加普的曼、The Woman who didn't`本杰明・富兰克林、拿破仑・波拿巴、约翰・L・沙利文、克娄巴特拉、Savourneen Deelish、米利叶斯・凯撒、帕拉切尔苏斯、托马斯・利普顿先生、威廉・退尔、米开朗琪罗、海斯、穆罕默德、the bride of Lammermoor、隐士彼得、彼得the Packer、黑姑娘罗莎琳、巴特里克・W・莎士比亚、布赖恩・孔子、Murtagh 谷登堡、巴特里科(Patricio) 贝拉斯克斯、船长内穆(Nemo),特里斯丹和yi 瑟(Isolde)(Isult)、第一任威尔士亲王、 - - - - - - -他身旁放着一支磨尖的花岗岩长矛备用,脚边卧着一头犬族猛兽,它发出的喘hōu声表明它虽已入睡却睡不安稳。足以证明情况确实如此的,是它不时有一些低沉而粗厉的喉音,还有一些抽搐似的动作,都被它的主人用一根旧石器时代制成的粗糙大石棍敲着镇了下去。 - 不管怎么的,特里送来了那三品脱,是约请客,老天在上,俺看见他真掏出一镑钱来,差点儿把眼睛都瞪瞎了。嘿,俺说的可是千真万确的。一枚漂亮的元首。 -  ___还有的是呢,他说。 -  ___你抢了教堂里的施舍箱吗,约?俺说。 -  ___我的血汗钱,约说。是那位谨慎会员给我的消息。#6 -==注6:共济会章程禁止在外人前作有关共济会的「不谨慎的谈话」。 -  ___俺遇见你以前也见到他了,俺说。他在辟尔胡同、希腊街那一带转悠,瞪着他的鳕鱼眼珠子数鱼肠子的数目呢。 -  是谁穿过迈肯的土地来了,披着黑貂 的甲冑?奥布卢姆,罗利的儿子:就是他。罗利的儿子,他不知畏惧为何物:他是生性谨慎的人。 -  ----是为王子街老太婆,公民说,那份受津贴的机关报#1 在议会会场上受誓言约束的那个政党#2。你们看一看这份倒霉破报纸吧。他说。看一看吧,他说。<爱尔兰独立报>,请你们注意吧,帕内尔创办的为劳动者说话的报纸哩#3。听一听这份<爱尔兰一切为了爱尔兰的独立报>上的出生栏和死亡栏消息吧,我得谢々你们,还有结婚栏。 -==注1:<自由人报>(布卢姆为它拉广告)在王子街,其立场温和接近以地方自治为目标的爱尔兰议会党团,因而被要求彻底独立的民族主义者认为受其津贴。== -==注2:自十九世纪中叶起,英国议会中的爱尔兰议员曾采用起誓联合支持英国两大政党之一的办法,支持条件为该政党采取改善爱尔兰地位的政策,帕内尔在八十年代即运用此战略与英国自由党建立联合阵线,1890 年帕垮台后这一阵线逐渐解体。== -==注3:<爱尔兰独立报>为帕内尔垮台后创建,但至1891 年帕去世后方开始出版,并即为反帕的保守立场。== -  于是他高声念起来: -  ___埃克塞特市#4 邦非尔德路戈登;圣安妮海滨伊弗利的雷德曼,威廉・T ・ 雷德曼夫人生一儿子。怎么样,嗯?赖特与弗林特;文森特与吉勒特,司多克威尔市克拉彭路179 号吉勒特府罗莎与故乔治・艾尔弗雷德之女罗瑟・玛莉恩;普莱伍德与黑茲代尔在肯辛顿区圣祖德教堂,由伍斯特教长十分可敬的福里斯特博士证婚。嗯?死亡拦。伦敦白厅胡同布里斯托;纽英顿,斯托克的卡尔,死于胃炎及心脏病;切普斯托区城壕府科克伯恩..... -==注4:「埃克塞特市」为英国地名。以下公民所念均为 -  ___我认识那家伙,约说,我亲身受过罪#5。英国地名。== -==注5:「科克伯恩」可理解为「鸡巴疼」,即性病。== - ___科克伯恩。 丁赛,前海军部戴维・丁赛之妻;托顿翰市米勒,终年八十五;利物浦市堪宁街35 号韦尔什,伊莎贝拉・海伦,六月十二日。这就是咱们的民族报纸了,嗯?球!这就是那位班特里奸商马丁・墨菲的贡献了#6,嗯?   -==注6:<爱尔兰独立报>业主墨菲,营造业起家为爱尔兰班特里人。== -  ___啊,算了吧,约一边传酒一边说。感谢天主,他们抢了先。喝吧,公民。 -  ----我喝,他说。 -  ----祝你健康,约,俺说。还有在座的各位。 -  ----啊!噢!別说话了!俺等那一品脱都等得长青霉了。俺敢对天主起誓,那酒到俺胃里头,俺都听到它落在胃底上的滴嗒声了。 -  瞧呀,正当他们在痛饮欢乐之杯时,一位仪表如神的使者,一位光耀如太阳的俊美青年快步走了进来,而他的身后正走过一位面目高贵、步履庄严的长者,手捧神圣的律卷,跟他一起的是他的贵妇妻子,其出身盖世无双,其容貌娇好无比。 -  小阿尔夫・伯根钻进门来,马上躲进了巴尔尼的小间里头,笑得直不起腰来。角落里还有人坐在那儿呢,俺没有看见,喝醉了人事不知,在那里头打鼾 ,原来是鲍勃・窦 冉。俺不明白是啥事儿,阿尔夫一个劲儿朝门外做手势。老天在上,啥事儿呢原来是背时的老傻瓜丹尼斯・布林,脚上穿一双拖鞋,胳肢窝儿里夹着两本背时的大书,他老婆紧跟在他后头,可怜的倒霉女人,颠得像只小狗似的。阿尔夫简直要爆炸了。  ___你们瞅着他,他说。布林。他把都柏林全市都溜遍了,就因为有人寄给他一张明信片,上边写着卜一上,他要起..... -  他笑得弯下了腰。 -  ___起啥?俺问他。 -  ___起诉,他说。要一万镑。 -  ___见鬼!俺说。 -  背时的杂种狗开始发出低沉的吼声,那声音叫你听着毛骨耸然的感到要出事,可是公民对他肚子上踢了一脚。 -  ___安静,他说。 -  ___谁?约说。 -  ___布林,阿尔夫说。他先到约翰・亨利・门顿那儿,然后绕到考立斯_沃德事务所,然后汤姆・罗奇福德碰见他,把他支到付长官办公处去找乐子去了。天主哪,我可是笑得肚皮痛了。卜一:上。长家伙狠々地瞪了他一眼, 现在背时的老白痴到格林街找侦探去了。 -  ___长约翰什么时候绞死蒙乔伊监狱里那家伙?乔说。 -  ___伯根,鲍勃・窦 冉说,他醒了。是阿尔夫・伯根吗? -  ----是,阿尔夫说。绞死吗?等我给你们瞧。喂,特里,给咱们一小杯。那个背时的老笨蛋。一万镑 -呢。长约翰那个瞪着大眼睛的劲儿,才好看呢。卜一..... -  他又笑起来了。 -  ___你笑谁?鲍勃・窦冉说。你是伯根吗? -  ___快点儿,特里    ,阿尔夫说。 -  特伦斯・奥赖恩听到他的话,立即送来一只水晶杯,满々地装着乌黑起沫的爱尔啤酒,那是酒老板艾弗和酒老板阿迪朗两位孪生兄弟#1不停地在他们的仙酒缸里酿造的,其干炼可比长生不老的勒达的儿子们#2。因为他们善于采集啤酒花鲜美多汁的浆果,将之集堆、筛选、捣碎、酿造,再掺入酸汁,然后将此酒汁用圣火加热,这两位干练的弟兄日夜不停,两位酿酒的大王。 -==注1:艾弗和阿迪朗即第五章提到的两贵族兄弟(并非孪生),为吉尼斯啤酒厂老板。== -==注2:勒达为希腊神话中仙女,与化作天鹅的大神宙斯相亲而生二儿二女,二儿一善驯马,一善拳击。== -  于是你,生来就侠义的特伦斯,捧出那神仙饮料,用水晶杯子献给那口渴的人,那俊美如神的侠义人物。  然而他,那奥伯根族的年轻族长,决不容忍別人的慷慨行为超过自己,因而仪态大方地放下一枚以最贵重的青铜铸成的宝币。币面有精致浮雕凸像,是一位尊贵无比的女王,她是不伦瑞克贵族后裔#3,名维多利亚,凭天主之恩宠而为不列颠、爱尔兰、以及不列颠海外领地联合王国最优秀的女王殿下,宗教信仰的保护者,印度的女皇帝,她是许多民族的统治者,众人热烈爱戴的胜利者,从太阳升起的地方到太阳落下的地方,浅色的、深色的、红色的、黑色的人,统々都熟悉她、爱戴她。 -==注3:「宝币」即便士,上有维多利亚女王像,其祖父英王乔治三世为德国不伦瑞克公爵之后。== -  ___那个背时的共济会员在外面溜来溜去干什么?公民说。 -  ___这是什么?约说。 -  ___给,阿儿夫一面扔过钱去一面说。刚才谈到绞刑,我有一些你们从来没有见过的东西给你们看。刽子手书信。看这些。              [247ï¼½ -  他从口袋里掏出一扎连封代瓤儿的信件来。 -  ___你胡扯吧?俺说。 -  ___骗你不是人,阿尔夫说。你们自己看信。 -  约就拿起了信件来。 -  ___你笑的是谁?鲍勃・窦 冉说。 -  俺砸摸要出点子麻烦,鲍勃肚子里酒泛上来可是个怪角色,所以俺没话找话地说: -  ___威利・默里近来怎么样,阿尔夫? -  ___我不知道,阿尔夫说。刚才我还在卡佩尔大街上看见他呢,他和派迪・狄格南在一起。不过我正跟着那个..... -  ___你什么?约扔下信件说。和谁在一起? -  ___和狄格南呀,阿尔夫说。 -  ___是派迪吗?约说。 -  ___对呀,阿尔夫说。怎么啦? -  ___你不知道他死了吗?约说。 -  ___派迪・狄格南死了!阿尔夫说。 -  ___对了,约说。 -  ___肯定我刚见到他的,五分钟还不到呢,阿尔夫说。明々白々的。 -  ___谁死了?鲍勃・窦 冉说。 -  ___那么你看见了他的鬼魂,约说。求天主保佑我们莫遭灾祸。 -  ___什么?阿尔夫说。好基督呀,刚々五.....什么?.....而且威利・默里还和他在一起呢,两个人在靠近那家叫什么的.....什么?狄格南死了? -  ___狄格南怎么了?鲍勃・窦 冉说。谁说的.....? -  ___死了!阿尔夫说。他和你们一模一样地活着呢。 -  ___也许这样,约说。可是,人们今天上午可不客气,把他埋了。 -  ___派迪?阿尔夫说。 -  ___对了,约说。他还清了他的人生债,天主慈悲他吧。 -  ___好基督呀!阿尔夫说。 -  老天在上,他可真是你所谓的目瞪口呆了。 -  在那幽暗之中,可以感觉到幽灵的手在微々颤动,而按照密宗经典所作的祷告送达应达处之后#1,逐渐可以见到一股宝石红光隐约出现并越来越亮。由于头顶和脸部都放射吉瓦光,虚灵体呈现格外逼真形象#2。信息交流是通过脑下垂体实现的。也利用骶区与腹腔神经丛所发出的桔黄色与紫红色光线。喊他的地上名字问他现在天上何处,他表示现在正走上Pra/aya 或回归之途#3,但仍受超感觉层中较低层次上某些嗜血成分的困扰。问他越过人世界线之后最初有何感受,他表示原来看去如隔暗玻璃,然而已经超越界线的人,眼前就展开了最广阔的发展阿特曼的机会#1。问他那边的生活是否和我们的肉体生活相仿,他表示,他听灵体经验已较丰富的说,他们的住所拥有各种各样现代家庭舒适生活设备,诸如Talafana ,alavatar,atakalda,wataklasat#2应有尽有,而最高级的里手则浸沉于最纯洁的欣心浪潮之中。这时一夸脱的酪 乳应其要求送到,显然正解其渴。问他对生者有什么嘱咐,他劝告一切尚未摆脱玛耶的人#3,应认清真正道路,因为天道中人都已获得消息,现在火星和木星已出来在白羊星势力所在的东角捣乱。又问逝世者有无特殊愿望,回答是:{我们向你们仍在肉体中生活的地上朋友们致意。请注意康・凯勿推跺。}据了解,康・凯即康尼利厄斯・凯莱赫先生,他是颇受欢迎的奥尼尔夕宾仪馆的经理,死者的朋友,这次的安葬就是他安排的。临走他要求嘱咐他的亲爱的儿子派齐,他找不到的另一只靴子,现在小屋内的马桶箱下,这双靴子应送卡伦皮鞋店换底,后跟尚好不比换。他表示,这事使他在彼域心情异常不安,务请转达他的愿望。他在得到这事一定办到的保证后,表示十分满意。 -==注1:「密宗经典」为印度教经典,为欧美通神学等玄理派別所信奉。== -==注2:「吉瓦」为印度教用语,指灵魂之活力;「虚灵体」为通灵学用语,与「「实密体」相结合而成人,人出生时虚灵体比实密体出现早,人死亡时虚灵体并不立即消灭,因而灵魂有再生之可能。== -==注3:Pralaya 为通灵学梵 文术语,指人死后灵魂休养生息期。== -==注1:「阿特曼」为通灵学用语,指人的最内在的本质。== -==注2:仿梵文(因通灵学派崇尚梵文)的英语讹体:「电话、电梯、热冷(水)、卫生间」。==  -==注3:「耶玛」为印度教术语,意为虚幻。== -  奥狄格南呀,我们的朝阳,他离开尘俗世界而去了。额角放光的派特里克呀,当初他在蕨丛间奔跑的脚步是何等轻疾!号哭吧,班芭#4,刮起你的风来;号哭吧,海洋呀,刮起你的旋风来。 -==注4:「班芭」为传闻中最早开辟爱尔兰的三姐妹之一,常被奉为司死亡女神。== -  ___他又来了,公民瞪着门外说。 -  ___谁?俺说。 -  ___布卢姆,他说。他在那儿来回站岗放哨足有十分钟了。 -  可不吗,老天在上。俺瞅见他探头探脑的张望一下又溜开去了。 -  小阿尔夫可傻了眼。说真格的,傻了眼。 -  ___好基督呀!他说。我能起誓,就是他。 -  鲍勃・窦 冉把帽子推在后脑壳上,这家伙灌足了酒,可算得上是都柏林最凶恶的恶棍了,他说: -  ___谁说基督是好的? -  ___你说的是什么话,阿尔夫说。 -  谁把可怜的小个儿威利・狄格南弄走了,鲍勃・窦 冉说,还算是个好基督吗? -  ----哎呀,阿尔夫说着,想把事情对付过去算了。他总算把烦恼都结束了。 -  可是鲍勃・窦 冉大喊大叫的不答应。 -  ___我说,谁把可怜的小个儿威利・狄格南弄走,谁就是个大混蛋! -  特里走过来。给他使了个眼色叫他安静,说他们这里是个有执照的体面酒店,店内不能容许这样的话语。于是鲍勃・窦 冉哭起派迪・迪格南来,一点儿也不假。 -  ___天下最好的人哪,他抽々噎々地说,最纯洁的人品呀。 -  眼泪说来就来。信口开河。顶好快回家去,去找他娶的那位喜欢梦游的小母狗吧,追屁股法警穆尼那个女儿,她娘在哈德威克街管一所公寓房子,班塔姆・莱昂斯在那儿住过,他说她半夜两点钟一丝不 挂 地在楼梯平台上溜达,赤身露体让人看,来者不拒,不偏不倚 -一律欢迎。 -  ___最高贵,最真诚的,他说。他就这么的走了,可怜的小个子派迪・狄格南呀。 -  他用沉重心情和悲伤的眼泪,哀悼这那上天之光的陨灭。 -  老狗加里文又开始发出低沉的吼声,这回是对门边窥探的布卢姆。 -  ___进来吧,怎么啦,公民说。它不会吃掉你的。 -  于是布卢姆把鳕鱼眼睛盯住了那条狗,侧着身子踅了进来。他问特里,马丁・坎宁安在不在。 -  唷,基督麦基翁!约看那些信件之一说。你们要不要听一听 -这个? -  他读起信来。 -  ___{呈都柏林 -     都柏林行政长官 -敬启者小人愿为上述痛心案件效力小人曾于1900 å¹´2 月12 日布特尔监狱绞死约・盖恩小人又.....} -  ___让俺们看吧,约,俺说。 -  ___{在彭顿维尔监狱绞死残杀洁细・贴尔悉特的列兵阿瑟・蔡斯小人又.....} -  ___耶稣 呀,俺说。 -  ___{.....在比林顿处决极恶的杀人犯托德・史密斯时任助手.....} -  公民伸手抢信。 -  ___等着,约说。{小人套绞索有妙法套住出不来希望录用小人向长官小人费用五畿尼。 -             利物浦亨特街七号剃头师傅 -                哈・郎博尔德}    ___一个杀人不眨眼的蛮子,公民说。 -  ___那小子写的不成东西,又糟又乱的,约说。拿走吧,阿尔夫,拿得远々的。哈喽,布卢姆,你要什么?  于是他们两讨论起这一点来了,布卢姆说不想要什么不能要什么请原谅没有別的意思等々,然后他说好吧,他要一支雪加。老天,他真是个谨慎会员,没错儿。 -  ___特里,把你那些头等臭货给我们来一支,约说。 -  阿尔夫这时在给俺们讲,有一个家伙寄来一张带黑框的报丧卡片。           [250ï¼½ -  ___都是黑国剃头的,他说。只要付他们五镑现金加旅费,他们连自己的老子也愿意绞死的。 -  他还告诉俺们,底下还有两个家伙等着,只等他从活板口坠下,马上抓住他的脚后跟往下拽,周到地道地叫他断气,事情完了还把绳索剁断分段卖掉,一个脑袋能卖几个先令。 -  在那黑暗的国土上,居住着复仇心切的剃刀骑士们。他们手抓致人死命的绳索;是的,不管是谁有血案,他们都用这圈将他套往埃里伯斯#1,因为那是我绝不容许的,主是这样说的。 -==注1:「埃里伯斯」为希腊神话中人世与冥府之间的幽暗世界。 -  于是他们开始谈论死刑问题,布卢姆当然就拿出了他那些原因喽、理由喽等々一大套有关的鳕鱼理论,那条狗可是不断地嗅他。有人跟俺念叨过,这些犹太佬让狗闻着有一种特殊的气味,     -  ___有一样东西是它起不了作用的,阿尔夫说。 -  ___什么东西?约说。 -  ___被绞死的倒霉蛋的家伙,阿尔夫说。 -  ___真的吗? -  ___一点儿也不假,阿尔夫说。我听基尔曼汉监牢绞死无敌会的约布雷迪那时的狱长说的。他告诉我,他们绞过之后,把他放下的时候那玩意儿对着他们的脸直立着,像一根拨火棍儿似的。 -  ___有人说过,热情如炽 ,至死不休,约说。 -  ___这里可以用科学解释的,布卢姆说。它不过是一种自然现象,你们不明白吗,因为由于..... -  于是他说起了他那些绕脖子话头儿来了,又是现象又是科学,这个现象啦那个现象的。 -  杰出科学家卢依波尔德・布卢门德夫特教授先生已提出医学根据阐明,依照最获医学界赞许的科学传统,急性颈椎骨 折及其导致的脊髓横断可被认为必将对人体内生殖器官神经中枢产生强烈的神经节刺激,致使cor -pora caver-nosa#2 中弹性细孔迅速扩张,血流瞬即畅通,流入人体结构内所谓阴茎即男性器官部分,从而形成医学界所谓in articulo mortis per diminutionemcapitis #3 病态上升涨大的繁殖性勃起现象。 -==注2:拉丁文:「海绵体」。== -==注3:拉丁文:「死亡时断颈所致」。== - - - - -  杰出科学家卢依波尔德@布卢门德夫特教授先生已提出医学根据, -阐明依照最获赞许的医学传统,颈椎cㄤ 折与后随脊髓断裂可被认为 -必将对人体内生殖器官神经中枢造成神经节强烈刺激,致使corpora caver- -nosa#2 中弹性细孔迅速扩张,血流瞬即畅通,流入人体结构内所谓阴颈 -即男性器官部分,从而形成医学界所谓in articulo mortis per diminutionem -capitis #3 病态上升涨大的繁殖性勃起现象。 -==注2:拉丁文:「海绵体」。== -==注3:拉丁文:「死亡时断颈所致」。== - +  俺正和首都警署的老特洛伊在凉亭山街角那儿寒喧呢,该死的,冷不丁儿的来了一名扫烟囱的背时家伙,他那长玩意儿差点儿戳进了俺那眼睛里头去。俺转回脑袋,正打算狠々地教训他一顿,没曾想一眼看见石头斜墻街那儿来了个人,道是谁呢,原来是约・哈因斯。 +  ___囉,约,俺说。你怎么样?那个扫烟囱的背时家伙,用他的长把儿刷子差点儿把我的眼睛捅掉。你看见了吗? +  ___煤烟到,运气好,约说。你刚才说话的那个老小子是谁? +  ___老特洛伊呗,俺说,原来是部队的。那家伙又是扫帚又是梯子,把交通都堵塞起来了,俺恨不得把他逮起来。 +  ___你到这片儿来干吗?约问。 +  ___没有什么屁事,俺说。兵营教堂那边,小鸡胡同口上有一个背时的大个子,不要脸的恶棍__老特洛伊就是给我透了那家伙的一点儿底__要了天主知道多少茶叶和糖,他答应每星期付三先令,说是在唐郡还有个农庄。货主是那边海梯斯堡街附近的一个小矮子,名叫摩西・赫佐格的。 +  ___割包皮的吗?#1 约说。 +==注1:尤太教男人自幼即割去包皮。== +  ___可不吗,俺说。头上去了一点儿。一个姓吉拉蒂的老管子工。我已经钉了他两个星期,可是一个便士也挤不出来。 +  ___你现在就干这勾当?约说。 +  ___可不吗,俺说。大人物落魄到这种地步:收倒帐、荒帐。可这家伙呀,像他这样臭名远扬的背时土匪,你走上一天的路也难得见到一个,一脸的麻子够装一场阵头雨的。{你就告诉他吧,}他说「我等着他呢,}他说,{我专门儿地等着他再派你来,只要他敢,}他说,{我就让法庭给他发传票,没有错儿,告他个无照营业。}他说完这话,      那模样就像要爆炸赛的。耶稣哪,那犹太小子火冒三丈的模样儿可真逗笑!{他喝我的茶。他吃我的糖。他倒不付我的帐?}[241ï¼½ + 茲有都柏林市沃德码头区凯文道十三号商人摩西・赫佐格,下称售方,出售耐久食品并送交都柏林市阿伦码头区凉亭山二十九号绅士迈克尔・ E・吉拉蒂先生,下称购方,计开一级茶叶五磅,常衡制,每常衡制磅价三先令零便士,碎晶体白糖常衡制三斯通#1,每常衡制磅价三便士,该购方由该售方供应物品后应付该售方英币一镑五先令又六便士,此款应由该购方以每周分偿办法付与售方,即每七历日付英币三先令零便士;该购方对该耐久食品不得典当、抵押、出售或作其他方式转让,该售方拥有并继续拥有全面而不可侵犯之所有权,该售方有权自由任意处理,直至此款由该购方按照此约所定方式向该售方付清为止,此约于由该售方与其财产继承人、业务继承人、委托代理人、指定受让人为一方,该购方与其财产继承人业务继承人、委托代理人、指定受让人为另一方于本日于此议定。 +==注1:「斯通」为英国重量单位,一般合十四磅。==   +  ___你是严格的滴酒不入的吗?约说。 +  ___除了 喝酒的时候,啥也不喝,俺说。 +  ___去拜访一下咱们那位朋友怎么样?约说。 +  ___谁?俺说。他呀,精神错乱上了天主的约翰那儿去了#2,可怜的家伙。 +==注2:「天主的约翰」为都柏林郡 一瘋人院。== +  ___是喝他自己的貨色喝的吧? +  ___可不嗎,俺說。威士忌加水,上了腦子。 +  ___走吧,上巴尼・基尔南酒店吧,约说。我要找公民。 +  ___就是巴尼宝贝儿吧,俺说。有什么怪事儿或是好事儿吗? +  ___屁事儿也没有,约说。我采访城标饭店那个会议了。 +  ___啥会,约?俺说。 +  ___牧牛贸易,约说,讨论口啼疫的。我要给公民透个信儿。 +  俺们绕过亚麻厂兵营,绕着法院后头,边走边聊。约这位老兄,有  的时候是挺够朋友的,可他就是老没有。耶稣 呀,俺可咽不下背时的滑头吉拉蒂这口气,白日打劫的土匪。告他个无照营业,他说。 +  在那美丽的伊尼斯菲尔#3,有那么一片土地,圣迈肯的土地。#4一座高塔在此拔地而起,四周远处都能望见。有许多大人物在此安眠,许多大名鼎々的英雄王公在此安眠如生。这片土地委实赏心悦目,上有潺々流水,水中群 鱼嬉戏,有鲂 ,有鲽鱼。有拟鲤,有大比目,有尖嘴黑绒鳕,有鲑鱼,有黄盖鲽,有菱鲆,有鲆鲽,有青鳕,还有各种杂鱼,以其他各类不计其数的水族。在西方和东方,高大的树木在和风吹拂之中,向四面八方搖晃着极其优美的枝叶,有飘々然的悬铃木,有黎巴嫩雪松,有挺拔的梧桐,有改良桉树,以及其他树木世界优良品种,这一地区应有尽有。美妙女郎散坐在美妙树木之间,唱着最美妙的歌曲,并以形々色々美妙物品为游戏,诸如金块、银鱼、大筐的鲱、整网的鳗鱼、小鳕鱼、整篓的仔鱼、紫色的海宝、活泼々的昆[242]虫。四方英雄远道来向她们求爱。从爱勃兰纳到斯里符玛奇山#1,无可匹敌的王子们来自自由世界的芒斯特省,来自公道的康诺特省,来自光滑、整洁的莱因斯特省,来自克罗阿蝉的地域,来自光辉的阿尔马郡,来自高贵的博伊尔区,是王子们,都是国王的后代。  +==注3:「伊尼斯菲尔」为爱尔兰语意为「命运之岛」系对爱尔兰的称呼之一。== +==注4:圣迈肯教堂离此不远,其地下墓穴以尸体保存良好著称。== +==注1:爱博兰纳为古地名,即今都柏林所在地。== +  一座亮晶々的宫殿耸立在那里,驾驶着为此目的而建造的船舶在大海航行的人从远处就能望见它的水晶屋顶闪々发光。当地所有的畜群 、肥犊、首批鲜果,纷々运来这里,由奥康内尔・茨赛门收费,他是世传的酋长#2 巨大的货车载来了丰富的农田的产物,有长筐装的菜花,有大盘装的菠菜、菠萝段、仰光瓜,有大筐装的蕃茄,有桶装的无花果,有成堆的瑞典萝卜、球状马铃薯,有成捆的各色甘兰、约克菜、皱叶菜,有成盘的土中珍珠洋葱头,还有浅盘装的蘑菇、蛋奶豌豆、肥巢菜、油菜、以及红的、绿的、黄的、棕的、赤褐色的甜、大、苦、熟带斑的苹果,还有小篓小篓的草莓、一篮一篮的醋栗,肉鼓々毛茸々的;可供王侯享用的草莓、新摘的紫莓。 +==注2:费茨赛门为1904 年都柏林食品商店总管,商场在基尔南酒店附近。== +  {我等着他呢,}他说,{我专门儿地等着他呢。}你给我滚到这儿来吧,吉拉蒂,你这个臭名远扬的拦路抢劫的背时土匪! +  一条路上来的,还有不计其数的牲畜群 ,有系铃带头的去势公羊、催情补饲的母羊、初剪羊毛的壮羊、羔羊、灰雁、中号菜牛、吼喘母马、截角牛犊、长毛羊、待肥育羊、卡夫头等待产牛、等外品、阉母猪、咸肉用猪、各种不同品种高级生猪、安格斯小母牛、最佳纯种去角阉牛、以及获奖的头等的奶牛与菜牛;这里不断听到蹄子声、咯々声、吼叫声、哞々声、咩々声、咆哮声、隆々声、呼噜声、吃料声、咀嚼声,有羊群、有猪群、有蹄子沉重的牛群 ,来自勒斯克、鲁希、卡里克孟的牧场,来自索孟德那水流丰富的山谷,来自麦吉利口客地那些难于攀登的石堆,来自气势宏大深不可测的香农河,来自基亚族地区那些平缓的山坡,乳房因奶过多而肿胀不堪,还有大桶的黄油、乳酪酶、农家木桶装的羔羊前胸肉、大筐的玉米,还有十打十打的禽蛋,各种大小都有,玛瑙色的和暗褐色的。 +  这么的,俺们拐近了巴尼・基尔南酒店,可不吗,公民正在那角落里头,一边跟他自个儿和那条背时的癞皮杂种狗加里欧文大会谈,一边等着天上掉下什么喝的来呢。 +  ___瞧他,俺说,克露斯金朗不离身,#3 带着他的大事业公事卷宗守着窝。 +==注3:「克露金斯朗」为爱尔兰语歌曲名,即「满々一小坛酒」。== +  背时的杂种狗发出一种悻々的声音,叫人听了毛骨悚然的。要是有人把那条恶狗的命结束了,那才是地道的善行呢。俺听说过一件真事,桑特里一名武警来送传票,是执照的事,叫这条狗啃去大半条裤子。 +  ___站住,交出来,他说。 +  ___没有事儿,公民,约说。自己人。 +  ___自己人放行,他说。 +  然后他用手揉々一只眼睛说: +  你们对时局有什么看法? +  他搞矛兵#1 和山上罗利#2 那一套呢。可是,老天在上,约倒是能对付这局面的。 +==注1:「矛兵」为十七世纪起义抗英的爱尔兰游击队。== +==注2:「山上的罗利」为十九世纪民歌中歌颂的反英农民志士。 +  ___我看是物价要涨,他说着把手顺着裤裆伸了下去。   +  老天在上,公民把爪子往膝盖上一拍说:  ___都是外国的战争造成的。 +  约在口袋里翘着大姆指说: +  ___是俄国佬想统治。   +  ___去你的吧,约,俺说。你那套背时胡扯算了吧。俺可渴坏了,半个克朗也不够解的。 +  ___你说是什么吧,公民,约说。 +  ___咱本国的酒,他说。 +  ___你呢?约说。 +  ___照着葫芦画瓢,俺说。 +  ___来三品脱,特里,约说。老伙计怎么样,公民?他说。 +  ----再好也没有,a chara#1 。他说。怎么样,加里?咱们会胜利的,是吧? + ----他说着话,一把抓住了那背时老狗的后颈皮,耶稣 啊,差不点儿把它勒死。 +==注1:爱尔兰语:「我的朋友」。   +  坐在圆塔前大石墩上的是一条好汉,肩膀宽阔、胸膛厚实、四肢强壮、眼光坦率、头发发红、雀斑斑斓、胡子蓬松、嘴巴宽大、鼻子高耸、脑袋长々、嗓音深沉、膝盖外露、两腿多毛、脸色发红、双臂多腱。他两肩之间宽达数伊尔#3,双膝嶙峋 如山岩,膝上和身体其余外露部分相同,都长着厚々的一层黄褐色刺毛,颜色和硬度都像山荊豆(Ulex Europeus#4)。两个鼻孔中伸出同样黄褐色的硬毛,鼻孔之大,可容草地 鹨在其洞穴深处筑巢。两只大眼睛的尺寸,和大头的菜花相仿,常有一滴眼泪和一丝微笑在争夺眼内地盘。#5 从他的口中深处,不时有一股发热的强气流冒出,而他的巨大心脏的博动,那响亮有力的节奏造成强大的共鸣,雷声隆々,将地面、高耸的塔顶和比塔更高的洞壁都震得颤动搖晃不已。 +==注3:「伊尔」为旧时英制长度,合45 英寸。 +==注4: +==注5:典出穆尔诗<爱琳,你眼中的眼泪和微笑>。== +  他穿一件无袖长衣,用新剥牛皮制成,下垂及膝如苏格兰短裙,腰间用一根芦苇毛草编成的绳子束住。裙子下面是鹿皮裤子,用肠线粗缝而成的。他的下肢套着用地衣紫染过的巴尔布里根裹腿,脚上套着盐渍粗牛皮靴子,靴带是同一牲口的气管。他的腰带上 挂着一大串海石子,都随着他那奇特的身体的每一个动作发出哐啷哐啷的声音,上面镌刻着粗犷 而生动的部落艺术人像,都是爱尔兰古代的男女英雄,有:库丘陵、身经百战的康恩、九个人质的尼尔、金克拉的布莱恩王、玛拉基大帝、阿特・麦克墨罗、沙恩・奥尼尔、约翰・墨菲神父、欧文・罗、派特里克・萨斯菲尔德、红色的休・奥唐奈、红色的吉姆・麦克德莫特、Soggarth Eogham O'Growney ,迈克尔・德怀尔、弗朗西・希金斯、亨利・乔伊・迈克拉肯、歌利亚、霍勒斯・惠特利、托马斯・Conneff、佩格・沃芬顿、村铁匠、Captain Moonlight、Captain 杯葛、丹蒂・lighieri、克里斯托费・哥伦布、S fursa(费萨)、S 布伦丹、马歇尔・麦克马洪、查理曼、西奥博尔德・沃尔夫・托恩、马加比家族之母、thelast of Mohicans 、卡斯蒂利亚的罗斯、the Man for Galway(戈尔韦、在蒙特卡洛砸银行的曼、在加普的曼、The Woman who didn't`本杰明・富兰克林、拿破仑・波拿巴、约翰・L・沙利文、克娄巴特拉、Savourneen Deelish、米利叶斯・凯撒、帕拉切尔苏斯、托马斯・利普顿先生、威廉・退尔、米开朗琪罗、海斯、穆罕默德、the bride of Lammermoor、隐士彼得、彼得the Packer、黑姑娘罗莎琳、巴特里克・W・莎士比亚、布赖恩・孔子、Murtagh 谷登堡、巴特里科(Patricio) 贝拉斯克斯、船长内穆(Nemo),特里斯丹和yi 瑟(Isolde)(Isult)、第一任威尔士亲王、 + + + + + + +他身旁放着一支磨尖的花岗岩长矛备用,脚边卧着一头犬族猛兽,它发出的喘hōu声表明它虽已入睡却睡不安稳。足以证明情况确实如此的,是它不时有一些低沉而粗厉的喉音,还有一些抽搐似的动作,都被它的主人用一根旧石器时代制成的粗糙大石棍敲着镇了下去。 + 不管怎么的,特里送来了那三品脱,是约请客,老天在上,俺看见他真掏出一镑钱来,差点儿把眼睛都瞪瞎了。嘿,俺说的可是千真万确的。一枚漂亮的元首。 +  ___还有的是呢,他说。 +  ___你抢了教堂里的施舍箱吗,约?俺说。 +  ___我的血汗钱,约说。是那位谨慎会员给我的消息。#6 +==注6:共济会章程禁止在外人前作有关共济会的「不谨慎的谈话」。 +  ___俺遇见你以前也见到他了,俺说。他在辟尔胡同、希腊街那一带转悠,瞪着他的鳕鱼眼珠子数鱼肠子的数目呢。 +  是谁穿过迈肯的土地来了,披着黑貂 的甲冑?奥布卢姆,罗利的儿子:就是他。罗利的儿子,他不知畏惧为何物:他是生性谨慎的人。 +  ----是为王子街老太婆,公民说,那份受津贴的机关报#1 在议会会场上受誓言约束的那个政党#2。你们看一看这份倒霉破报纸吧。他说。看一看吧,他说。<爱尔兰独立报>,请你们注意吧,帕内尔创办的为劳动者说话的报纸哩#3。听一听这份<爱尔兰一切为了爱尔兰的独立报>上的出生栏和死亡栏消息吧,我得谢々你们,还有结婚栏。 +==注1:<自由人报>(布卢姆为它拉广告)在王子街,其立场温和接近以地方自治为目标的爱尔兰议会党团,因而被要求彻底独立的民族主义者认为受其津贴。== +==注2:自十九世纪中叶起,英国议会中的爱尔兰议员曾采用起誓联合支持英国两大政党之一的办法,支持条件为该政党采取改善爱尔兰地位的政策,帕内尔在八十年代即运用此战略与英国自由党建立联合阵线,1890 年帕垮台后这一阵线逐渐解体。== +==注3:<爱尔兰独立报>为帕内尔垮台后创建,但至1891 年帕去世后方开始出版,并即为反帕的保守立场。== +  于是他高声念起来: +  ___埃克塞特市#4 邦非尔德路戈登;圣安妮海滨伊弗利的雷德曼,威廉・T ・ 雷德曼夫人生一儿子。怎么样,嗯?赖特与弗林特;文森特与吉勒特,司多克威尔市克拉彭路179 号吉勒特府罗莎与故乔治・艾尔弗雷德之女罗瑟・玛莉恩;普莱伍德与黑茲代尔在肯辛顿区圣祖德教堂,由伍斯特教长十分可敬的福里斯特博士证婚。嗯?死亡拦。伦敦白厅胡同布里斯托;纽英顿,斯托克的卡尔,死于胃炎及心脏病;切普斯托区城壕府科克伯恩..... +==注4:「埃克塞特市」为英国地名。以下公民所念均为 +  ___我认识那家伙,约说,我亲身受过罪#5。英国地名。== +==注5:「科克伯恩」可理解为「鸡巴疼」,即性病。== + ___科克伯恩。 丁赛,前海军部戴维・丁赛之妻;托顿翰市米勒,终年八十五;利物浦市堪宁街35 号韦尔什,伊莎贝拉・海伦,六月十二日。这就是咱们的民族报纸了,嗯?球!这就是那位班特里奸商马丁・墨菲的贡献了#6,嗯?   +==注6:<爱尔兰独立报>业主墨菲,营造业起家为爱尔兰班特里人。== +  ___啊,算了吧,约一边传酒一边说。感谢天主,他们抢了先。喝吧,公民。 +  ----我喝,他说。 +  ----祝你健康,约,俺说。还有在座的各位。 +  ----啊!噢!別说话了!俺等那一品脱都等得长青霉了。俺敢对天主起誓,那酒到俺胃里头,俺都听到它落在胃底上的滴嗒声了。 +  瞧呀,正当他们在痛饮欢乐之杯时,一位仪表如神的使者,一位光耀如太阳的俊美青年快步走了进来,而他的身后正走过一位面目高贵、步履庄严的长者,手捧神圣的律卷,跟他一起的是他的贵妇妻子,其出身盖世无双,其容貌娇好无比。 +  小阿尔夫・伯根钻进门来,马上躲进了巴尔尼的小间里头,笑得直不起腰来。角落里还有人坐在那儿呢,俺没有看见,喝醉了人事不知,在那里头打鼾 ,原来是鲍勃・窦 冉。俺不明白是啥事儿,阿尔夫一个劲儿朝门外做手势。老天在上,啥事儿呢原来是背时的老傻瓜丹尼斯・布林,脚上穿一双拖鞋,胳肢窝儿里夹着两本背时的大书,他老婆紧跟在他后头,可怜的倒霉女人,颠得像只小狗似的。阿尔夫简直要爆炸了。  ___你们瞅着他,他说。布林。他把都柏林全市都溜遍了,就因为有人寄给他一张明信片,上边写着卜一上,他要起..... +  他笑得弯下了腰。 +  ___起啥?俺问他。 +  ___起诉,他说。要一万镑。 +  ___见鬼!俺说。 +  背时的杂种狗开始发出低沉的吼声,那声音叫你听着毛骨耸然的感到要出事,可是公民对他肚子上踢了一脚。 +  ___安静,他说。 +  ___谁?约说。 +  ___布林,阿尔夫说。他先到约翰・亨利・门顿那儿,然后绕到考立斯_沃德事务所,然后汤姆・罗奇福德碰见他,把他支到付长官办公处去找乐子去了。天主哪,我可是笑得肚皮痛了。卜一:上。长家伙狠々地瞪了他一眼, 现在背时的老白痴到格林街找侦探去了。 +  ___长约翰什么时候绞死蒙乔伊监狱里那家伙?乔说。 +  ___伯根,鲍勃・窦 冉说,他醒了。是阿尔夫・伯根吗? +  ----是,阿尔夫说。绞死吗?等我给你们瞧。喂,特里,给咱们一小杯。那个背时的老笨蛋。一万镑 +呢。长约翰那个瞪着大眼睛的劲儿,才好看呢。卜一..... +  他又笑起来了。 +  ___你笑谁?鲍勃・窦冉说。你是伯根吗? +  ___快点儿,特里    ,阿尔夫说。 +  特伦斯・奥赖恩听到他的话,立即送来一只水晶杯,满々地装着乌黑起沫的爱尔啤酒,那是酒老板艾弗和酒老板阿迪朗两位孪生兄弟#1不停地在他们的仙酒缸里酿造的,其干炼可比长生不老的勒达的儿子们#2。因为他们善于采集啤酒花鲜美多汁的浆果,将之集堆、筛选、捣碎、酿造,再掺入酸汁,然后将此酒汁用圣火加热,这两位干练的弟兄日夜不停,两位酿酒的大王。 +==注1:艾弗和阿迪朗即第五章提到的两贵族兄弟(并非孪生),为吉尼斯啤酒厂老板。== +==注2:勒达为希腊神话中仙女,与化作天鹅的大神宙斯相亲而生二儿二女,二儿一善驯马,一善拳击。== +  于是你,生来就侠义的特伦斯,捧出那神仙饮料,用水晶杯子献给那口渴的人,那俊美如神的侠义人物。  然而他,那奥伯根族的年轻族长,决不容忍別人的慷慨行为超过自己,因而仪态大方地放下一枚以最贵重的青铜铸成的宝币。币面有精致浮雕凸像,是一位尊贵无比的女王,她是不伦瑞克贵族后裔#3,名维多利亚,凭天主之恩宠而为不列颠、爱尔兰、以及不列颠海外领地联合王国最优秀的女王殿下,宗教信仰的保护者,印度的女皇帝,她是许多民族的统治者,众人热烈爱戴的胜利者,从太阳升起的地方到太阳落下的地方,浅色的、深色的、红色的、黑色的人,统々都熟悉她、爱戴她。 +==注3:「宝币」即便士,上有维多利亚女王像,其祖父英王乔治三世为德国不伦瑞克公爵之后。== +  ___那个背时的共济会员在外面溜来溜去干什么?公民说。 +  ___这是什么?约说。 +  ___给,阿儿夫一面扔过钱去一面说。刚才谈到绞刑,我有一些你们从来没有见过的东西给你们看。刽子手书信。看这些。              [247ï¼½ +  他从口袋里掏出一扎连封代瓤儿的信件来。 +  ___你胡扯吧?俺说。 +  ___骗你不是人,阿尔夫说。你们自己看信。 +  约就拿起了信件来。 +  ___你笑的是谁?鲍勃・窦 冉说。 +  俺砸摸要出点子麻烦,鲍勃肚子里酒泛上来可是个怪角色,所以俺没话找话地说: +  ___威利・默里近来怎么样,阿尔夫? +  ___我不知道,阿尔夫说。刚才我还在卡佩尔大街上看见他呢,他和派迪・狄格南在一起。不过我正跟着那个..... +  ___你什么?约扔下信件说。和谁在一起? +  ___和狄格南呀,阿尔夫说。 +  ___是派迪吗?约说。 +  ___对呀,阿尔夫说。怎么啦? +  ___你不知道他死了吗?约说。 +  ___派迪・狄格南死了!阿尔夫说。 +  ___对了,约说。 +  ___肯定我刚见到他的,五分钟还不到呢,阿尔夫说。明々白々的。 +  ___谁死了?鲍勃・窦 冉说。 +  ___那么你看见了他的鬼魂,约说。求天主保佑我们莫遭灾祸。 +  ___什么?阿尔夫说。好基督呀,刚々五.....什么?.....而且威利・默里还和他在一起呢,两个人在靠近那家叫什么的.....什么?狄格南死了? +  ___狄格南怎么了?鲍勃・窦 冉说。谁说的.....? +  ___死了!阿尔夫说。他和你们一模一样地活着呢。 +  ___也许这样,约说。可是,人们今天上午可不客气,把他埋了。 +  ___派迪?阿尔夫说。 +  ___对了,约说。他还清了他的人生债,天主慈悲他吧。 +  ___好基督呀!阿尔夫说。 +  老天在上,他可真是你所谓的目瞪口呆了。 +  在那幽暗之中,可以感觉到幽灵的手在微々颤动,而按照密宗经典所作的祷告送达应达处之后#1,逐渐可以见到一股宝石红光隐约出现并越来越亮。由于头顶和脸部都放射吉瓦光,虚灵体呈现格外逼真形象#2。信息交流是通过脑下垂体实现的。也利用骶区与腹腔神经丛所发出的桔黄色与紫红色光线。喊他的地上名字问他现在天上何处,他表示现在正走上Pra/aya 或回归之途#3,但仍受超感觉层中较低层次上某些嗜血成分的困扰。问他越过人世界线之后最初有何感受,他表示原来看去如隔暗玻璃,然而已经超越界线的人,眼前就展开了最广阔的发展阿特曼的机会#1。问他那边的生活是否和我们的肉体生活相仿,他表示,他听灵体经验已较丰富的说,他们的住所拥有各种各样现代家庭舒适生活设备,诸如Talafana ,alavatar,atakalda,wataklasat#2应有尽有,而最高级的里手则浸沉于最纯洁的欣心浪潮之中。这时一夸脱的酪 乳应其要求送到,显然正解其渴。问他对生者有什么嘱咐,他劝告一切尚未摆脱玛耶的人#3,应认清真正道路,因为天道中人都已获得消息,现在火星和木星已出来在白羊星势力所在的东角捣乱。又问逝世者有无特殊愿望,回答是:{我们向你们仍在肉体中生活的地上朋友们致意。请注意康・凯勿推跺。}据了解,康・凯即康尼利厄斯・凯莱赫先生,他是颇受欢迎的奥尼尔夕宾仪馆的经理,死者的朋友,这次的安葬就是他安排的。临走他要求嘱咐他的亲爱的儿子派齐,他找不到的另一只靴子,现在小屋内的马桶箱下,这双靴子应送卡伦皮鞋店换底,后跟尚好不比换。他表示,这事使他在彼域心情异常不安,务请转达他的愿望。他在得到这事一定办到的保证后,表示十分满意。 +==注1:「密宗经典」为印度教经典,为欧美通神学等玄理派別所信奉。== +==注2:「吉瓦」为印度教用语,指灵魂之活力;「虚灵体」为通灵学用语,与「「实密体」相结合而成人,人出生时虚灵体比实密体出现早,人死亡时虚灵体并不立即消灭,因而灵魂有再生之可能。== +==注3:Pralaya 为通灵学梵 文术语,指人死后灵魂休养生息期。== +==注1:「阿特曼」为通灵学用语,指人的最内在的本质。== +==注2:仿梵文(因通灵学派崇尚梵文)的英语讹体:「电话、电梯、热冷(水)、卫生间」。==  +==注3:「耶玛」为印度教术语,意为虚幻。== +  奥狄格南呀,我们的朝阳,他离开尘俗世界而去了。额角放光的派特里克呀,当初他在蕨丛间奔跑的脚步是何等轻疾!号哭吧,班芭#4,刮起你的风来;号哭吧,海洋呀,刮起你的旋风来。 +==注4:「班芭」为传闻中最早开辟爱尔兰的三姐妹之一,常被奉为司死亡女神。== +  ___他又来了,公民瞪着门外说。 +  ___谁?俺说。 +  ___布卢姆,他说。他在那儿来回站岗放哨足有十分钟了。 +  可不吗,老天在上。俺瞅见他探头探脑的张望一下又溜开去了。 +  小阿尔夫可傻了眼。说真格的,傻了眼。 +  ___好基督呀!他说。我能起誓,就是他。 +  鲍勃・窦 冉把帽子推在后脑壳上,这家伙灌足了酒,可算得上是都柏林最凶恶的恶棍了,他说: +  ___谁说基督是好的? +  ___你说的是什么话,阿尔夫说。 +  谁把可怜的小个儿威利・狄格南弄走了,鲍勃・窦 冉说,还算是个好基督吗? +  ----哎呀,阿尔夫说着,想把事情对付过去算了。他总算把烦恼都结束了。 +  可是鲍勃・窦 冉大喊大叫的不答应。 +  ___我说,谁把可怜的小个儿威利・狄格南弄走,谁就是个大混蛋! +  特里走过来。给他使了个眼色叫他安静,说他们这里是个有执照的体面酒店,店内不能容许这样的话语。于是鲍勃・窦 冉哭起派迪・迪格南来,一点儿也不假。 +  ___天下最好的人哪,他抽々噎々地说,最纯洁的人品呀。 +  眼泪说来就来。信口开河。顶好快回家去,去找他娶的那位喜欢梦游的小母狗吧,追屁股法警穆尼那个女儿,她娘在哈德威克街管一所公寓房子,班塔姆・莱昂斯在那儿住过,他说她半夜两点钟一丝不 挂 地在楼梯平台上溜达,赤身露体让人看,来者不拒,不偏不倚 +一律欢迎。 +  ___最高贵,最真诚的,他说。他就这么的走了,可怜的小个子派迪・狄格南呀。 +  他用沉重心情和悲伤的眼泪,哀悼这那上天之光的陨灭。 +  老狗加里文又开始发出低沉的吼声,这回是对门边窥探的布卢姆。 +  ___进来吧,怎么啦,公民说。它不会吃掉你的。 +  于是布卢姆把鳕鱼眼睛盯住了那条狗,侧着身子踅了进来。他问特里,马丁・坎宁安在不在。 +  唷,基督麦基翁!约看那些信件之一说。你们要不要听一听 +这个? +  他读起信来。 +  ___{呈都柏林 +     都柏林行政长官 +敬启者小人愿为上述痛心案件效力小人曾于1900 å¹´2 月12 日布特尔监狱绞死约・盖恩小人又.....} +  ___让俺们看吧,约,俺说。 +  ___{在彭顿维尔监狱绞死残杀洁细・贴尔悉特的列兵阿瑟・蔡斯小人又.....} +  ___耶稣 呀,俺说。 +  ___{.....在比林顿处决极恶的杀人犯托德・史密斯时任助手.....} +  公民伸手抢信。 +  ___等着,约说。{小人套绞索有妙法套住出不来希望录用小人向长官小人费用五畿尼。 +             利物浦亨特街七号剃头师傅 +                哈・郎博尔德}    ___一个杀人不眨眼的蛮子,公民说。 +  ___那小子写的不成东西,又糟又乱的,约说。拿走吧,阿尔夫,拿得远々的。哈喽,布卢姆,你要什么?  于是他们两讨论起这一点来了,布卢姆说不想要什么不能要什么请原谅没有別的意思等々,然后他说好吧,他要一支雪加。老天,他真是个谨慎会员,没错儿。 +  ___特里,把你那些头等臭货给我们来一支,约说。 +  阿尔夫这时在给俺们讲,有一个家伙寄来一张带黑框的报丧卡片。           [250ï¼½ +  ___都是黑国剃头的,他说。只要付他们五镑现金加旅费,他们连自己的老子也愿意绞死的。 +  他还告诉俺们,底下还有两个家伙等着,只等他从活板口坠下,马上抓住他的脚后跟往下拽,周到地道地叫他断气,事情完了还把绳索剁断分段卖掉,一个脑袋能卖几个先令。 +  在那黑暗的国土上,居住着复仇心切的剃刀骑士们。他们手抓致人死命的绳索;是的,不管是谁有血案,他们都用这圈将他套往埃里伯斯#1,因为那是我绝不容许的,主是这样说的。 +==注1:「埃里伯斯」为希腊神话中人世与冥府之间的幽暗世界。 +  于是他们开始谈论死刑问题,布卢姆当然就拿出了他那些原因喽、理由喽等々一大套有关的鳕鱼理论,那条狗可是不断地嗅他。有人跟俺念叨过,这些犹太佬让狗闻着有一种特殊的气味,     +  ___有一样东西是它起不了作用的,阿尔夫说。 +  ___什么东西?约说。 +  ___被绞死的倒霉蛋的家伙,阿尔夫说。 +  ___真的吗? +  ___一点儿也不假,阿尔夫说。我听基尔曼汉监牢绞死无敌会的约布雷迪那时的狱长说的。他告诉我,他们绞过之后,把他放下的时候那玩意儿对着他们的脸直立着,像一根拨火棍儿似的。 +  ___有人说过,热情如炽 ,至死不休,约说。 +  ___这里可以用科学解释的,布卢姆说。它不过是一种自然现象,你们不明白吗,因为由于..... +  于是他说起了他那些绕脖子话头儿来了,又是现象又是科学,这个现象啦那个现象的。 +  杰出科学家卢依波尔德・布卢门德夫特教授先生已提出医学根据阐明,依照最获医学界赞许的科学传统,急性颈椎骨 折及其导致的脊髓横断可被认为必将对人体内生殖器官神经中枢产生强烈的神经节刺激,致使cor +pora caver-nosa#2 中弹性细孔迅速扩张,血流瞬即畅通,流入人体结构内所谓阴茎即男性器官部分,从而形成医学界所谓in articulo mortis per diminutionemcapitis #3 病态上升涨大的繁殖性勃起现象。 +==注2:拉丁文:「海绵体」。== +==注3:拉丁文:「死亡时断颈所致」。== + + + + +  杰出科学家卢依波尔德@布卢门德夫特教授先生已提出医学根据, +阐明依照最获赞许的医学传统,颈椎cㄤ 折与后随脊髓断裂可被认为 +必将对人体内生殖器官神经中枢造成神经节强烈刺激,致使corpora caver- +nosa#2 中弹性细孔迅速扩张,血流瞬即畅通,流入人体结构内所谓阴颈 +即男性器官部分,从而形成医学界所谓in articulo mortis per diminutionem +capitis #3 病态上升涨大的繁殖性勃起现象。 +==注2:拉丁文:「海绵体」。== +==注3:拉丁文:「死亡时断颈所致」。== + diff --git a/icuSources/extra/uconv/samples/utf8/greek.txt b/icuSources/extra/uconv/samples/utf8/greek.txt index 76787696..473303fa 100644 --- a/icuSources/extra/uconv/samples/utf8/greek.txt +++ b/icuSources/extra/uconv/samples/utf8/greek.txt @@ -1,44 +1,44 @@ -<html lang="gr" dir="ltr"> -<head> -<meta http-equiv="content-type" content="text/html; charset=UNICODE-1-1-UTF-8"> -</head> -<body> - - - -[σταρτ ηερε] ΓΕΝΕΣΙΣ 1-3 -Ψηαπτερ 1 -<br> -1. -ͲΕν αρχη εποιησεν ο θεος τον ουρανον και την γην. -<br> -2. -η δε γη ην -<br> -αορατος και ακατασκευαστος, και σκοτος επανω της αβυσσου, και -<br> -πνευμα θεου επεφερετο επανω του υδατος. -<br> -3. -και ειπεν ο θεος -<br> -Γενηθητω φως. και εγενετο φως. -<br> -4. -και ειδεν ο θεος το φως οτι -<br> -καλον. και διεχωρισεν ο θεος ανα μεσον του φωτος και ανα μεσον -<br> -του σκοτους. -<br> -5. -και εκαλεσεν ο θεος το φως ημεραν και το σκοτος -<br> -εκαλεσεν νυκτα. και εγενετο εσπερα και εγενετο πρωι, ημερα μια. -<br> - - -</body> -</html> - - +<html lang="gr" dir="ltr"> +<head> +<meta http-equiv="content-type" content="text/html; charset=UNICODE-1-1-UTF-8"> +</head> +<body> + + + +[σταρτ ηερε] ΓΕΝΕΣΙΣ 1-3 +Ψηαπτερ 1 +<br> +1. +ͲΕν αρχη εποιησεν ο θεος τον ουρανον και την γην. +<br> +2. +η δε γη ην +<br> +αορατος και ακατασκευαστος, και σκοτος επανω της αβυσσου, και +<br> +πνευμα θεου επεφερετο επανω του υδατος. +<br> +3. +και ειπεν ο θεος +<br> +Γενηθητω φως. και εγενετο φως. +<br> +4. +και ειδεν ο θεος το φως οτι +<br> +καλον. και διεχωρισεν ο θεος ανα μεσον του φωτος και ανα μεσον +<br> +του σκοτους. +<br> +5. +και εκαλεσεν ο θεος το φως ημεραν και το σκοτος +<br> +εκαλεσεν νυκτα. και εγενετο εσπερα και εγενετο πρωι, ημερα μια. +<br> + + +</body> +</html> + + diff --git a/icuSources/extra/uconv/samples/utf8/hangul.txt b/icuSources/extra/uconv/samples/utf8/hangul.txt index bdfb4dba..7557f2c1 100644 --- a/icuSources/extra/uconv/samples/utf8/hangul.txt +++ b/icuSources/extra/uconv/samples/utf8/hangul.txt @@ -1,2 +1,2 @@ -도서관 -한국 +도서관 +한국 diff --git a/icuSources/extra/uconv/samples/utf8/hania.txt b/icuSources/extra/uconv/samples/utf8/hania.txt index 702b3bed..ff133eac 100644 --- a/icuSources/extra/uconv/samples/utf8/hania.txt +++ b/icuSources/extra/uconv/samples/utf8/hania.txt @@ -1,2 +1,2 @@ -圖書館 +圖書館 韓國 \ No newline at end of file diff --git a/icuSources/extra/uconv/samples/utf8/jap.txt b/icuSources/extra/uconv/samples/utf8/jap.txt index 454e2e18..7768896d 100644 --- a/icuSources/extra/uconv/samples/utf8/jap.txt +++ b/icuSources/extra/uconv/samples/utf8/jap.txt @@ -1,37 +1,37 @@ -ウインカリッスの日本語 -  「ユーザーフレンドリ」|と|呼ばれる| -  りゆうは、ごく |普通の|人がごく| -  関単に |使用 |方法を|マスター|でき、| -  毎日の|タイプ | の |仕事にすぐ | -  役立てることができることからきている。| -  よばれる    -     呼ばれる -  りゅうは、ごく -     理由は、ごく -  ふつうの    -    普通の -  ひとがごく   -    人がごく -  かんたんに   -    簡単に -  しよう     -    使用 -  ほうほうを   -    方法を -  まいにちの   -    毎日の -  しごとにすぐ  -    仕事にすぐ -  やくだてることができることからきている。- -  役立てることができることからきている。 -あ い う え お  -ぁ ぃ ぅ ぇ ぉ -か き く け こ  きゃ きゅ きょ -さ し す せ そ  しゃ  しゅ しぇ しょ -た ち つ て と   ちゃ ちゅ ちぇ ちょ -な に ぬ ね の   にゃ  にゅ にょ -は ひ ふ へ ほ   ひゃ  ひゅ ひょ - ふぁ ふぃ ふぇ ふぉ -ま み む め も   みゃ  みゅ  みょ -や (い) ゆ (え) よ   ゃ   ゅ   ょ -ら り る れ ろ  りゃ りゅ  りょ -わ ゐ (う) ゑ  を ゎ  ヰ   ヱ -ん ゔ っ カ ケ -が ぎ ぐ げ ご   ぎゃ ぎゅ ぎょ - ぐゎ ぐぇ -ざ じ ず ぜ ぞ  じゃ  じゅ  じぇ じょ -だ ぢ づ で ど  ぢゃ ぢぃ  ぢゅ ぢぇ ぢぉ -ば び ぶ べ ぼ   びゃ びゅ びょ -ぱ ぴ ぷ ぺ ぽ   ぴゃ ぴゅ ぴょ -ワ ウィ ウ ウェ ウォ ヴァ ヴィ ヴ ヴェ ヴォ +ウインカリッスの日本語 +  「ユーザーフレンドリ」|と|呼ばれる| +  りゆうは、ごく |普通の|人がごく| +  関単に |使用 |方法を|マスター|でき、| +  毎日の|タイプ | の |仕事にすぐ | +  役立てることができることからきている。| +  よばれる    -     呼ばれる +  りゅうは、ごく -     理由は、ごく +  ふつうの    -    普通の +  ひとがごく   -    人がごく +  かんたんに   -    簡単に +  しよう     -    使用 +  ほうほうを   -    方法を +  まいにちの   -    毎日の +  しごとにすぐ  -    仕事にすぐ +  やくだてることができることからきている。- +  役立てることができることからきている。 +あ い う え お  +ぁ ぃ ぅ ぇ ぉ +か き く け こ  きゃ きゅ きょ +さ し す せ そ  しゃ  しゅ しぇ しょ +た ち つ て と   ちゃ ちゅ ちぇ ちょ +な に ぬ ね の   にゃ  にゅ にょ +は ひ ふ へ ほ   ひゃ  ひゅ ひょ + ふぁ ふぃ ふぇ ふぉ +ま み む め も   みゃ  みゅ  みょ +や (い) ゆ (え) よ   ゃ   ゅ   ょ +ら り る れ ろ  りゃ りゅ  りょ +わ ゐ (う) ゑ  を ゎ  ヰ   ヱ +ん ゔ っ カ ケ +が ぎ ぐ げ ご   ぎゃ ぎゅ ぎょ + ぐゎ ぐぇ +ざ じ ず ぜ ぞ  じゃ  じゅ  じぇ じょ +だ ぢ づ で ど  ぢゃ ぢぃ  ぢゅ ぢぇ ぢぉ +ば び ぶ べ ぼ   びゃ びゅ びょ +ぱ ぴ ぷ ぺ ぽ   ぴゃ ぴゅ ぴょ +ワ ウィ ウ ウェ ウォ ヴァ ヴィ ヴ ヴェ ヴォ diff --git a/icuSources/extra/uconv/samples/utf8/korean.txt b/icuSources/extra/uconv/samples/utf8/korean.txt index 030c2ead..9628ef68 100644 --- a/icuSources/extra/uconv/samples/utf8/korean.txt +++ b/icuSources/extra/uconv/samples/utf8/korean.txt @@ -1,20 +1,20 @@ -중앙일보 - 사건/사회 - 극지탐험 협회결 -극지탐험 협회결성 체계적 연구 - 지구상의 3대 극지라 불리는 남극·북극·에베레스트를 한번이라 -도 다녀와야 정회원으로 들어갈 수 있는 한국극지협회가 발족다 -.윤석순(한·러시아극동협회 상임고문)씨과 홍석하(사람과 산 발 -행인)씨가 극지탐험과 이곳에서의 학술연구를 체계적 으로 해보자 -는데 뜻을 같이하고 협회결성에 나섰다. - 이 협회는 지난 16일 호텔신라에서 20여명의 준비위원이 참 -석한 가운데 준비위원회를 가졌으며 내년 3월 정식 출범한다. - 이 협회에는 3극오지를 모두 밟은 세계적인 산악인 허영호씨를 -비롯해 에베레스트를 올랐던 엄홍길·박영석·정승권씨 등 국내의  -저명한 산악인들이 회원으로 참여할 것으로 보인다. - 극지협회는 극지탐험가는 물론 학계·경제계인사들도 참가시킬 계 -획이다. 단순한 탐험차원을 넘어 지구상에 마지막 남은 자원의  -보고인 극지에서의 연구활동도 하겠다는 의미다. - 한국극지협회가 발족하면 우리 극지탐험이 체계화될 것으로 기대 -되고있다.협회는 극지관련자료를 데이터베이스로 축적해 오지탐험가 -들에게 제공할 계획이다. -입력시간 -ⓒ 중앙일보사 +중앙일보 - 사건/사회 - 극지탐험 협회결 +극지탐험 협회결성 체계적 연구 + 지구상의 3대 극지라 불리는 남극·북극·에베레스트를 한번이라 +도 다녀와야 정회원으로 들어갈 수 있는 한국극지협회가 발족다 +.윤석순(한·러시아극동협회 상임고문)씨과 홍석하(사람과 산 발 +행인)씨가 극지탐험과 이곳에서의 학술연구를 체계적 으로 해보자 +는데 뜻을 같이하고 협회결성에 나섰다. + 이 협회는 지난 16일 호텔신라에서 20여명의 준비위원이 참 +석한 가운데 준비위원회를 가졌으며 내년 3월 정식 출범한다. + 이 협회에는 3극오지를 모두 밟은 세계적인 산악인 허영호씨를 +비롯해 에베레스트를 올랐던 엄홍길·박영석·정승권씨 등 국내의  +저명한 산악인들이 회원으로 참여할 것으로 보인다. + 극지협회는 극지탐험가는 물론 학계·경제계인사들도 참가시킬 계 +획이다. 단순한 탐험차원을 넘어 지구상에 마지막 남은 자원의  +보고인 극지에서의 연구활동도 하겠다는 의미다. + 한국극지협회가 발족하면 우리 극지탐험이 체계화될 것으로 기대 +되고있다.협회는 극지관련자료를 데이터베이스로 축적해 오지탐험가 +들에게 제공할 계획이다. +입력시간 +ⓒ 중앙일보사 diff --git a/icuSources/extra/uconv/samples/utf8/linji.txt b/icuSources/extra/uconv/samples/utf8/linji.txt index 97f9000e..6fe5922a 100644 --- a/icuSources/extra/uconv/samples/utf8/linji.txt +++ b/icuSources/extra/uconv/samples/utf8/linji.txt @@ -1,918 +1,918 @@ -*臨濟語錄 -鎮州臨濟慧照禪師語錄序。 -延康殿學士金紫光祿大夫真。 -定府路安撫使兼馬步軍都總。 -管兼知成德軍府事馬防、撰。 -黃檗山頭、曾遭痛棒。大愚肋下、方解築拳。饒 -舌老婆、尿床鬼子。這風顛漢、再捋虎鬚。巖谷 -栽松、後人標榜。钁頭斸地、幾被活埋。肯箇後 -生、驀口自摑。辭焚机案、坐斷舌頭。不是河南、 -便歸河北。院臨古渡、運濟往來。把定要津、壁 -立萬仞。奪人奪境、陶鑄仙陀。三要三玄、鈐鎚 -衲子。常在家舍、不離途中。無位真人、面門出 -入。兩堂齊喝、賓主歷然。照用同時、本無前 -後。菱花對像、虛谷傳聲。妙應無方、不留朕 -跡。拂衣南邁、戾止大名。興化師承、東堂迎 -侍。銅瓶鐵C、掩室杜詞。松老雲閑、曠然自 -適。面壁未幾、密付將終。正法誰傳、瞎驢邊 -滅。圓覺老演、今為流通。點撿將來、故無差 -舛。唯餘一喝、尚要商量。具眼禪流、冀無賺 -舉。宣和庚子中秋日謹序。 -鎮州臨濟慧照禪師語錄。 -住三聖嗣法小師慧然集。 -府主王常侍、與諸官請師升座。師上堂云、山 -僧今日事不獲已、曲順人情、方登此座。若約 -祖宗門下、稱揚大事、直是開口不得、無爾措 -足處。山僧此日以常侍堅請、那隱綱宗。還有 -作家戰將、直下展陣開旗麼。對眾證據看。僧 -問、如何是佛法大意。師便喝。僧禮拜。師云、 -這箇師僧、卻堪持論。問、師唱誰家曲、宗風嗣 -阿誰。師云、我在黃蘗處、三度發問、三度被打。 -僧擬議。師便喝、隨後打云、不可向虛空A釘 -橛去也。有座主問、三乘十二分教、豈不是明 -佛性。師云、荒草不曾鋤。主云、佛豈賺人也。 -師云、佛在什麼處。主無語。師云、對常侍前、擬 -瞞老僧。速退速退。妨他別人諸問。復云、此日 -法筵、為一大事故。更有問話者麼。速致問來。 -爾纔開口、早勿交涉也。何以如此。不見釋尊 -云、法離文字、不屬因不在緣故。為爾信不及、 -所以今日葛藤。恐滯常侍與諸官員、眛他佛 -性。不如且退。喝一喝云、少信根人、終無了日。 -久立珍重。 -師、因一日到河府。府主王常侍、請師升座。 -時麻谷出問、大悲千手眼、那箇是正眼。師云、 -大悲千手眼、那箇是正眼、速道速道。麻谷拽 -師下座、麻谷卻坐。師近前云、不審。麻谷擬 -議。師亦拽麻谷下座、師卻坐。麻谷便出去。師 -便下座。 -上堂。云、赤肉團上有一無位真人、常從汝等 -諸人面門出入。未證據者看看。時有僧出問、 -如何是無位真人。師下禪床、把住云、道道。其 -僧擬議。師托開云、無位真人是什麼乾屎橛。 -便歸方丈。 -上堂。有僧出禮拜。師便喝。僧云、老和尚莫 -探頭好。師云、爾道落在什麼處。僧便喝。又有 -僧問、如何是佛法大意。師便喝。僧禮拜。師 -云、爾道好喝也無。僧云、草賊大敗。師云、過 -在什麼處。僧云、再犯不容。師便喝。是日兩堂 -首座相見、同時下喝。僧問師、還有賓主也無。 -師云、賓主歷然。師云、大眾、要會臨濟賓主句、 -問取堂中二首座。便下座。 -上堂。僧問、如何是佛法大意。師豎起拂子。 -僧便喝。師便打。又僧問、如何是佛法大意。師 -亦豎起拂子。僧便喝。師亦喝。僧擬議。師便 -打。師乃云、大眾、夫為法者、不避喪身失命。我 -二十年、在黃蘗先師處、三度問佛法的的大 -意、三度蒙他賜杖。如蒿枝拂著相似。如今更 -思得一頓棒喫。誰人為我行得。時有僧出眾 -云、某甲行得。師拈棒與他。其僧擬接。師便打。 -上堂。僧問、如何是劍刃上事。師云、禍事、禍 -事。僧擬議。師便打。問、祇如石室行者、踏碓忘 -卻移腳、向什麼處去。師云、沒溺深泉。師乃 -云、但有來者、不虧欠伊。總識伊來處。若與麼 -來、恰似失卻。不與麼來、無繩自縛。一切時中、 -莫亂斟酌。會與不會、都來是錯。分明與麼道。 -一任天下人貶剝。久立珍重。 -上堂。云、一人在孤峰頂上、無出身之路。一 -人在十字街頭、亦無向背。那箇在前、那箇在 -後。不作維摩詰、不作傅大士。珍重。 -上堂。云、有一人、論劫在途中、不離家舍。有 -一人、離家舍、不在途中。那箇合受人天供養。 -便下座。 -上堂。僧問、如何是第一句。師云、三要印開 -朱點側、未容擬議主賓分。問、如何是第二 -句。師云、妙解豈容無著問、漚和爭負截流機。 -問、如何是第三句。師云、看取棚頭弄傀儡、抽 -牽都來A有人。師又云、一句語須具三玄 -門、一玄門須具三要、有權有用。汝等諸人、作 -麼生會。下座。 -師晚參示眾云、有時奪人不奪境、有時奪境 -不奪人、有時人境俱奪、有時人境俱不奪。時、 -有僧問、如何是奪人不奪境。師云、煦日發生 -鋪地錦、瓔孩垂髮白如絲。僧云、如何是奪境 -不奪人。師云、王令已行天下遍、將軍塞外絕 -煙塵。僧云、如何是人境兩俱奪。師云、并汾絕 -信、獨處一方。僧云、如何是人境俱不奪。師云、 -王登寶殿、野老謳歌。師乃云、今時學佛法者、 -且要求真正見解。若得真正見解、生死不染、 -去住自由。不要求殊勝、殊勝自至。道流、祇如 -自古先德、皆有出人底路。如山僧指示人處、 -祇要爾不受人惑。要用便用、更莫遲疑。如今 -學者不得、病在甚處。病在不自信處。爾若自 -信不及、即便忙忙地徇一切境轉、被他萬 -境回換、不得自由。爾若能歇得念念馳求心、 -便與祖佛不別。爾欲得識祖佛麼。祇爾面前 -聽法底是。學人信不及、便向外馳求。設求得 -者、皆是文字勝相、終不得他活祖意。莫錯、諸 -禪德。此時不遇、萬劫千生、輪回三界、徇好 -境掇去、驢牛肚A生。道流、約山僧見處、與釋 -迦不別。今日多般用處、欠少什麼。六道神光、 -未曾間歇。若能如是見得、祇是一生無事人。 -大德、三界無安、猶如火宅。此不是爾久停住 -處。無常殺鬼、一剎那間、不揀貴賤老少。爾要 -與祖佛不別、但莫外求。爾一念心上清淨光、 -是爾屋A法身佛。爾一念心上無分別光、是 -爾屋A報身佛。爾一念心上無差別光、是爾 -屋A化身佛。此三種身、是爾即今目前聽法 -底人。祇為不向外馳求、有此功用。據經論家、 -取三種身為極則。約山僧見處、不然。此三種 -身是名言、亦是三種依。古人云、身依義立、土 -據體論。法性身、法性土、明知是光影。大德、爾 -且識取弄光影底人、是諸佛之本源、一切處 -是道流歸舍處。是爾四大色身、不解說法聽 -法。脾胃肝膽、不解說法聽法。虛空不解說法 -聽法。是什麼解說法聽法。是爾目前歷歷底、 -勿一箇形段孤明、是這箇解說法聽法。若如 -是見得、便與祖佛不別。但一切時中、更莫間 -斷、觸目皆是。祇為情生智隔、想變體殊、所以 -輪回三界、受種種苦。若約山僧見處、無不甚 -深、無不解脫。道流、心法無形、通貫十方。在眼 -曰見、在耳曰聞、在鼻嗅香、在口談論、在手執 -捉、在足運奔。本是一精明、分為六和合。一 -心既無、隨處解脫。山僧與麼說、意在什麼處。 -祇為道流一切馳求心不能歇、上他古人閑 -機境。道流、取山僧見處、坐斷報化佛頭、十地 -滿心、猶如客作兒、等妙二覺、擔枷鎖漢、羅漢 -辟支、猶如廁穢、菩提涅槃、如繫驢橛。何以如 -此、祇為道流不達三祇劫空、所以有此障礙。 -若是真正道人、終不如是。但能隨緣消舊業、 -任運著衣裳、要行即行、要坐即坐、無一念心 -希求佛果。緣何如此。古人云、若欲作業求佛、 -佛是生死大兆。大德、時光可惜。祇擬傍家波 -波地、學禪學道、認名認句、求佛求祖、求善知 -識意度。莫錯、道流。爾祇有一箇父母、更求何 -物。爾自返照看。古人云、演若達多失卻頭、求 -心歇處即無事。大德、且要平常、莫作模樣。有 -一般不識好惡禿奴、便即見神見鬼、指東劃 -西、好晴好雨。如是之流、盡須抵債、向閻老前、 -吞熱鐵丸有日。好人家男女、被這一般野狐 -精魅所著、便即捏怪。瞎屢生、索飯錢有日 -在。 -師示眾云、道流、切要求取真正見解、向天下 -橫行、免被這一般精魅惑亂。無事是貴人。但 -莫造作、祇是平常。爾擬向外傍家求過、覓腳 -手。錯了也。祇擬求佛、佛是名句。爾還識馳求 -底麼。三世十方佛祖出來、也祇為求法。如今 -參學道流、也祇為求法。得法始了。未得、依前 -輪回五道。云何是法。法者是心法。心法無形、 -通貫十方、目前現用。人信不及、便乃認名認 -句、向文字中、求意度佛法。天地懸殊。道流、山 -僧說法、說什麼法。說心地法。便能入凡入聖、 -入淨入穢、入真入俗。要且不是爾真俗凡聖、 -能與一切真俗凡聖、安著名字。真俗凡聖、與 -此人安著名字不得。道流、把得便用、更不著 -名字、號之為玄旨。山僧說法、與天下人別。祇 -如有箇文殊普賢、出來目前、各現一身問法、 -纔道咨和尚、我早辨了也。老僧穩坐、更有道 -流、來相見時、我盡辨了也。何以如此。祇為我 -見處別、外不取凡聖、內不住根本、見徹更不 -疑謬。 -師示眾云、道流、佛法無用功處、祇是平常無 -事。屙屎送尿、著衣喫飯、困來即臥。愚人笑 -我、智乃知焉。古人云、向外作工夫、總是癡 -頑漢。爾且隨處作主、立處皆真。境來回換不 -得。縱有從來習氣、五無間業、自為解脫大海。 -今時學者、總不識法、猶如觸鼻羊、逢著物安 -在口A。奴郎不辨、賓主不分。如是之流、邪心 -入道、鬧處即入。不得名為真出家人、正是真 -俗家人。夫出家者、須辨得平常真正見解、辨 -佛辨魔、辨真辨偽、辨凡辨聖。若如是辨得、名 -真出家。若魔佛不辨、正是出一家入一家。喚 -作造業眾生、未得名為真出家。祇如今有一 -箇佛魔、同體不分、如水乳合、鵝王喫乳。如明 -眼道流、魔佛俱打。爾若愛聖憎凡、生死海A -浮沈。 -問、如何是佛魔。師云、爾一念心疑處是魔。 -爾若達得萬法無生、心如幻化、更無一塵一 -法、處處清淨是佛。然佛與魔、是染淨二境。約 -山僧見處、無佛無眾生、無古無今、得者便得、 -不歷時節。無修無證、無得無失。一切時中、更 -無別法。設有一法過此者、我說如夢如化。山 -僧所說皆是。道流、即今目前孤明歷歷地聽 -者、此人處處不滯、通貫十方、三界自在。入一 -切境差別、不能回換。一剎那間、透入法界、逢 -佛說佛、逢祖說祖、逢羅漢說羅漢、逢餓鬼說 -餓鬼。向一切處、游履國土、教化眾生、未曾離 -一念。隨處清淨、光透十方、萬法一如。道流、大 -丈夫兒、今日方知本來無事。祇為爾信不及、 -念念馳求、捨頭覓頭、自不能歇。如圓頓菩 -薩、入法界現身、向淨土中、厭凡忻聖。如此之 -流、取捨未忘、染淨心在。如禪宗見解、又且不 -然。直是現今、更無時節。山僧說處、皆是一期 -藥病相治、總無實法。若如是見得、是真出家、 -日消萬兩黃金。道流、莫取次被諸方老師印 -破面門、道我解禪解道。辯似懸河、皆是造地 -獄業。若是真正學道人、不求世間過、切急 -要求真正見解。若達真正見解圓明、方始了 -畢。 -問、如何是真正見解。師云、爾但一切入凡入 -聖、入染入淨、入諸佛國土、入彌勒樓閣、入毘 -盧遮那法界、處處皆現國土、成住壞空。佛出 -于世、轉大法輪、卻入涅槃、不見有去來相貌。 -求其生死、了不可得。便入無生法界、處處游 -履國土、入華藏世界、盡見諸法空相、皆無 -實法。唯有聽法無依道人、是諸佛之母。所 -以佛從無依生。若悟無依、佛亦無得。若如是 -見得者、是真正見解。學人不了、為執名句、被 -他凡聖名礙、所以障其道眼、不得分明。祇如 -十二分教、皆是表顯之說。學者不會、便向表 -顯名句上生解。皆是依倚、落在因果、未免三 -界生死。爾若欲得生死去住、脫著自由、即今 -識取聽法底人。無形無相、無根無本、無住處、 -活撥撥地。應是萬種施設、用處祇是無處。 -所以覓著轉遠、求之轉乖。號之為祕密。道流、 -爾莫認著箇夢幻伴子。遲晚中間、便歸無常。 -爾向此世界中、覓箇什麼物作解脫。覓取一 -口飯喫、補毳過時、且要訪尋知識。莫因循逐 -樂。光陰可惜、念念無常。H則被地水火風、細 -則被生住異滅四相所逼。道流、今時且要識 -取四種無相境、免被境擺撲。 -問、如何是四種無相境。師云、爾一念心疑、被 -地來礙。爾一念心愛、被水來溺。爾一念心嗔、 -被火來燒。爾一念心喜、被風來飄。若能如是 -辨得、不被境轉、處處用境。東涌西沒、南涌北 -沒、中涌邊沒、邊涌中沒、履水如地、履地如水。 -緣何如此。為達四大如夢如幻故。道流、爾祇 -今聽法者、不是爾四大、能用爾四大。若能如 -是見得、便乃去住自由。約山僧見處、勿嫌底 -法。爾若愛聖、聖者聖之名。有一般學人、向五 -臺山A求文殊。早錯了也。五臺山無文殊。爾 -欲識文殊麼。祇爾目前用處、始終不異、處處 -不疑、此箇是活文殊。爾一念心無差別光、處 -處總是真普賢。爾一念心自能解縛、隨處解 -脫、此是觀音三昧法。互為主伴、出則一時 -出。一即三、三即一。如是解得、始好看教。 -師示眾云、如今學道人、且要自信。莫向外覓。 -總上他閑塵境、都不辨邪正。祇如有祖有佛、 -皆是教跡中事。有人拈起一句子語、或隱顯 -中出、便即疑生、照天照地、傍家尋問、也大 -忙然。大丈夫兒、莫祇麼論主論賊、論是論 -非、論色論財、論說閑話過日。山僧此間、不論 -僧俗、但有來者、盡識得伊。任伊向甚處出來、 -但有聲名文句、皆是夢幻。卻見乘境底人、是 -諸佛之玄旨。佛境不能自稱我是佛境。還是 -這箇無依道人、乘境出來。若有人出來、問我 -求佛、我即應清淨境出。有人問我菩薩、我即 -應玆悲境出。有人問我菩提、我即應淨妙境 -出。有人問我涅槃、我即應寂靜境出。境即 -萬般差別、人即不別。所以應物現形、如水中 -月。道流、爾若欲得如法、直須是大丈夫兒始 -得。若萎萎隨隨地、則不得也。夫如I嗄。 -之器、不堪貯醍醐。如大器者、直要不受 -人惑。隨處作主、立處皆真。但有來者、皆不得 -受。爾一念疑、即魔入心。如菩薩疑時、生死魔 -得便。但能息念、更莫外求。物來則照。爾但信 -現今用底、一箇事也無。爾一念心生三界、隨 -緣被境、分為六塵。爾如今應用處、欠少什麼。 -一剎那間、便入淨入穢、入彌勒樓閣、入三眼 -國土、處處遊履、唯見空名。 -問、如何是三眼國土。師云、我共爾入淨妙國 -土中、著清淨衣、說法身佛。又入無差別國土 -中、著無差別衣、說報身佛。又入解脫國土中、 -著光明衣、說化身佛。此三眼國土、皆是依變。 -約經論家、取法身為根本、報化二身為用。山 -僧見處、法身即不解說法。所以古人云、身依 -義立、土據體論。法性身、法性土、明知是建立 -之法、依通國土。空拳黃葉、用誑小兒。蒺藜夌 -刺、枯骨上覓什麼汁。心外無法、內亦不可得、 -求什麼物。爾諸方言道、有修有證。莫錯。設有 -修得者、皆是生死業。爾言六度萬行齊修。我 -見皆是造業。求佛求法、即是造地獄業。求菩 -薩、亦是造業。看經看教、亦是造業。佛與祖師、 -是無事人。所以有漏有為、無漏無為、為清淨 -業。有一般瞎禿子、飽喫飯了、便坐禪觀行、 -把捉念漏、不令放起、厭喧求靜、是外道法。祖 -師云、爾若住心看靜、舉心外照、攝心內澄、凝 -心入定、如是之流、皆是造作。是爾如今與麼 -聽法底人、作麼生擬修他證他莊嚴他。渠且 -不是修底物、不是莊嚴得底物。若教他莊嚴、 -一切物即莊嚴得。爾且莫錯。道流、爾取這一 -般老師口A語、為是真道、是善知識不思議、 -我是凡夫心、不敢測度他老宿。瞎屢生、爾一 -生祇作這箇見解、辜負這一雙眼。冷噤噤地、 -如凍凌上驢駒相似。我不敢毀善知識、怕生 -口業。道流、夫大善知識、始敢毀佛毀祖、是非 -天下、排斥三藏教、罵辱諸小兒、向逆順中覓 -人。所以我於十二年中、求一箇業性、知芥子 -許不可得。若似新婦子禪師、便即怕趁出院、 -不與飯喫、不安不樂。自古先輩、到處人不 -信、被遞出、始知是貴。若到處人盡肯、堪作什 -麼。所以師子一吼、野干腦裂。道流、諸方說、有 -道可修、有法可證。爾說證何法、修何道。爾今 -用處、欠少什麼物、修補何處。後生小阿師不 -會、便即信這般野狐精魅、許他說事、繫縛 -人、言道理行相應、護惜三業、始得成佛。如此 -說者、如春細雨。古人云、路逢達道人、第一莫 -向道。所以言、若人修道道不行、萬般邪境競 -頭生。智劍出來無一物、明頭未顯暗頭明。所 -以古人云、平常心是道。大德、覓什麼物。現今 -目前聽法無依道人、歷歷地分明、未曾欠少。 -爾若欲得與祖佛不別、但如是見、不用疑誤。 -爾心心不異、名之活祖。心若有異、則性相別。 -心不異故、即性相不別。 -問、如何是心心不異處。師云、爾擬問、早異了 -也、性相各分。道流、莫錯。世出世諸法、皆無自 -性、亦無生性。但有空名、名字亦空。爾祇麼 -認他閑名為實。大錯了也。設有、皆是依變之 -境。有箇菩提依、涅繫依、解脫依、三身依、境智 -依、菩薩依、佛依。爾向依變國土中、覓什麼物。 -乃至三乘十二分教、皆是拭不淨故紙。佛是 -幻化身、祖是老比丘。爾還是娘生已否。爾若 -求佛、即被佛魔攝。爾若求祖、即被祖魔縛。 -爾若有求皆苦。不如無事。有一般禿比丘、向 -學人道、佛是究竟、於三大阿僧祇劫、修行 -果滿、方始成道。道流、爾若道佛是究竟、緣什 -麼八十年後、向拘尸羅城、雙林樹間、側臥而死 -去。佛今何在。明知與我生死不別。爾言、三十 -二相八十種好是佛。轉輪聖王應是如來。明 -知是幻化。古人云、如來舉身相、為順世間情。 -恐人生斷見、權且立虛名。假言三十二、八十 -也空聲。有身非覺體、無相乃真形。爾道、佛有 -六通、是不可思議。一切諸天、神仙、阿修羅、大 -力鬼、亦有神通。應是佛否。道流、莫錯。祇如阿 -修羅、與天帝釋戰、戰敗領八萬四千眷屬、入 -藕絲孔中藏。莫是聖否。如山僧所舉、皆是業 -通依通。夫如佛六通者、不然。入色界不被色 -惑、入聲界不被聲惑、入香界不被香惑、入味 -界不被味惑、入觸界不被觸惑、入法界不被 -法惑。所以達六種色聲香味觸法皆是空相、 -不能繫縛此無依道人。雖是五蘊漏質、便是 -地行神通。道流、真佛無形、真法無相。爾祇麼 -幻化上頭、作模作樣。設求得者、皆是野狐精 -魅、並不是真佛、是外道見解。夫如真學道人、 -並不取佛、不取菩薩羅漢、不取三界殊勝。迥 -無獨脫、不與物拘。乾坤倒覆、我更不疑。十方 -諸佛現前、為一念心喜、三塗地獄頓現、無一 -念心怖。緣何如此。我見諸法空相、變即有、不 -變即無。三界唯心、萬法唯識。所以夢幻空花、 -何勞把捉。唯有道流、目前現今聽法底人、入 -火不燒、入水不溺、入三塗地獄、如遊園觀、入 -餓鬼畜生、而不受報。緣何如此。無嫌底法。爾 -若愛聖憎凡、生死海A沈浮。煩惱由心故有、 -無心煩惱何拘。不勞分別取相、自然得道須 -臾。爾擬傍家波波地學得、於三祇劫中、終歸 -生死。不如無事、向叢林中、床角頭交腳坐。道 -流、如諸方有學人來、主客相見了、便有一句 -子語、辨前頭善知識。被學人拈出箇機權語 -路、向善知識口角頭攛過、看爾識不識。爾若 -識得是境、把得便拋向坑子A。學人便即尋 -常、然後便索善知識語。依前奪之。學人云、上 -智哉、是大善知識。即云、爾大不識好惡。如善 -知識、把出箇境塊子、向學人面前弄。前人辨 -得、下下作主、不受境惑。善知識便即現半 -身、學人便喝。善知識又入一切差別語路中 -擺撲。學人云、不識好惡老禿奴。善知識歎曰、 -真正道流。如諸方善知識、不辨邪正。學人來 -問、菩提涅槃、三身境智、瞎老師便與他解說。 -被他學人罵著、便把棒打他、言無禮度。自是 -爾善知識無眼、不得嗔他。有一般不識好惡 -禿奴、即指東劃西、好晴好雨、好燈籠露柱。爾 -看、眉毛有幾莖。這箇具機緣。學人不會、便即 -心狂。如是之流、總是野狐精魅魍魎。被他好 -學人嗌嗌微笑、言瞎老禿奴惑亂他天下人。 -道流、出家兒且要學道。祇如山僧、往日曾向 -毘尼中留心、亦曾於經論尋討。後方知是濟 -世藥、表顯之說、遂乃一時拋卻、即訪道參禪。 -後遇大善知識、方乃道眼分明、始識得天下 -老和尚、知其邪正。不是娘生下便會、還是體 -究練磨、一朝自省。道流、爾欲得如法見解、但 -莫受人惑。向A向外、逢著便殺。逢佛殺佛、逢 -祖殺祖、逢羅漢殺羅漢、逢父母殺父母、逢 -親眷殺親眷、始得解脫、不與物拘、透脫自 -在。如諸方學道流、未有不依物出來底。山僧 -向此間、從頭打。手上出來手上打。口A出來 -口A打。眼A出來眼A打。未有一箇獨脫出 -來底。皆是上他古人閑機境。山僧無一法與 -人、祇是治病解縛。爾諸方道流、試不依物出 -來、我要共爾商量。十年五歲、並無一人。皆是 -依草附葉、竹木精靈、野狐精魅、向一切糞塊 -上亂咬。瞎漢、枉消他十方信施、道我是出家 -兒、作如是見解。向爾道、無佛無法、無修無證。 -祇與麼傍家擬求什麼物。瞎漢、頭上安頭。是 -爾欠少什麼。道流、是爾目前用底、與祖佛不 -別。祇麼不信、便向外求。莫錯。向外無法、內亦 -不可得。爾取山僧口A語、不如休歇無事去。 -已起者莫續、未起者不要放起、便勝爾十年 -行腳。約山僧見處、無如許多般、祇是平常。著 -衣喫飯、無事過時。爾諸方來者、皆是有心求 -佛求法、求解脫、求出離三界。癡人、爾要出三 -界、什麼處去。佛祖是賞繫底名句。爾欲識三 -界麼。不離爾今聽法底心地。爾一念心貪是 -欲界。爾一念心瞋是色界。爾一念心癡是無 -色界、是爾屋A家具子。三界不自道、我是三 -界。還是道流、目前靈靈地照燭萬般、酌度世 -界底人、與三界安名。大德、四大色身是無常。 -乃至脾胃肝膽、髮毛爪齒、唯見諸法空相。爾 -一念心歇得處、喚作菩提樹。爾一念心不能 -歇得處、喚作無明樹。無明無住處、無明無 -始終。爾若念念心歇不得、便上他無明樹、便 -入六道四生、披毛戴角。爾若歇得、便是清淨 -身界。爾一念不生、便是上菩提樹、三界神通 -變化、意生化身、法喜禪悅、身光自照。思衣羅 -綺千重、思食百味具足、更無橫病。菩提無住 -處、是故無得者。道流、大丈夫漢、更疑箇什麼。 -目前用處、更是阿誰。把得便用、莫著名字、號 -為玄旨。與麼見得、勿嫌底法。古人云、心隨萬 -境轉、轉處實能幽。隨流認得性、無喜亦無憂。 -道流、如禪宗見解、死活循然。參學之人、大須 -子細。如主客相見、便有言論往來。或應物現 -形、或全體作用、或把機權喜怒、或現半身、或 -乘師子、或乘象王。如有真正學人、便喝先拈 -出一箇膠盆子。善知識不辨是境、便上他境 -上、作模作樣。學人便喝。前人不肯放。此是膏 -肓之病、不堪醫。喚作客看主。或是善知識不 -拈出物、隨學人問處即奪。學人被奪、抵死不 -放。此是主看客。或有學人、應一箇清淨境、出 -善知識前。善知識辨得是境、把得拋向坑A。 -學人言、大好善知識。即云、咄哉、不識好惡。學 -人便禮拜。此喚作主看主。或有學人、披枷帶 -鎖、出善知識前。善知識更與安一重枷鎖。學 -人歡喜、彼此不辨。呼為客看客。大德、山僧如 -是所舉、皆是辨魔揀異、知其邪正。道流、寔 -情大難、佛法幽玄、解得可可地。山僧竟日與 -他說破、學者總不在意。千遍萬遍、腳底踏過、 -黑沒焌地、無一箇形段、歷歷孤明。學人信不 -及、便向名句上生解。年登半百、祇管傍家負 -死屍行、檐卻檐子天下走。索草鞋錢有日在。 -大德、山僧說向外無法、學人不會、便即向A -作解、便即倚壁坐、舌拄上齶、湛然不動、取此 -為是祖門佛法也。大錯。是爾若取不動清淨 -境為是、爾即認他無明為郎主。古人云、湛湛 -黑暗深坑、寔可怖畏。此之是也。爾若認他動 -者是、一切草木皆解動、應可是道也。所以動 -者是風大、不動者是地大。動與不動、俱無自 -性。爾若向動處捉他、他向不動處立。爾若向 -不動處捉他、他向動處立。譬如潛泉魚、鼓波 -而自躍。大德、動與不動、是二種境。還是無依 -道人、用動用不動。如諸方學人來、山僧此間、 -作三種根器斷。如中下根器來、我便奪其境、 -而不除其法。或中上根器來、我便境法俱奪。 -如上上根器來、我便境法人俱不奪。如有出 -格見解人來、山僧此間、便全體作用、不歷根 -器。大德、到這A、學人著力處不通風、石火電 -光即過了也。學人若眼定動、即沒交涉。擬心 -即差、動念即乖。有人解者、不離目前。大德、爾 -檐CB屎檐子、傍家走求佛求法。即今與麼 -馳求底、爾還識渠麼。活撥撥地、祇是勿根 -株。擁不聚、撥不散。求著即轉遠、不求還在目 -前、靈音屬耳。若人不信、徒勞百年。道流、一 -剎那間、便入華藏世界、入毘盧遮那國土、入 -解脫國土、入神通國土、入清淨國土、入法界、 -入穢入淨、入凡入聖、入餓鬼畜生、處處討覓 -尋、皆不見有生有死、唯有空名。幻化空花、不 -勞把捉、得失是非、一時放卻。道流、山僧佛法、 -的的相承、從麻谷和尚、丹霞和尚、道一和尚、 -盧山拽石頭和尚、一路行遍天下。無人信得、 -盡皆起謗。如道一和尚用處、純一無雜、學人 -三百五百、盡皆不見他意。如盧山和尚、自在 -真正、順逆用處、學人不測涯際、悉皆忙然。 -如丹霞和尚、翫珠隱顯、學人來者、皆悉被罵。 -如麻谷用處、苦如黃蘗、近皆不得。如石鞏用 -處、向箭頭上覓人、來者皆懼。如山僧今日用 -處、真正成壞、翫弄神變、入一切境、隨處無事、 -境不能換。但有來求者、我即便出看渠。渠不 -識我、我便著數般衣、學人生解、一向入我言 -句。苦哉、瞎禿子無眼人、把我著底衣、認青黃 -赤白。我脫卻入清淨境中、學人一見、便生忻 -欲。我又脫卻、學人失心、忙然狂走、言我無 -衣。我即向渠道、爾識我著衣底人否。忽爾回 -頭、認我了也。大德、爾莫認衣。衣不能動、人 -能著衣。有箇清淨衣、有箇無生衣、菩提衣、涅 -槃衣、有祖衣、有佛衣。大德、但有聲名文句、 -皆悉是衣變。從臍輪氣海中鼓激、牙齒敲磕、 -成其句義。明知是幻化。大德、外發聲語業、內 -表心所法。以思有念、皆悉是衣。爾祇麼認他 -著底衣為寔解。縱經塵劫、祇是衣通。三界循 -還、輪回生死。不如無事。相逢不相識、共語不 -知名。今時學人不得、蓋為認名字為解。大策 -子上、抄死老漢語、三重五重複子裹、不教人 -見、道是玄旨、以為保重。大錯。瞎屢生、爾向 -枯骨上、覓什麼汁。有一般不識好惡、向教中 -取意度商量、成於句義。如把屎塊子、向口A -含了、吐過與別人。猶如俗人打傳口令相似、 -一生虛過。也道我出家、被他問著佛法、便即 -杜口無詞、眼似漆突、口如楄檐。如此之類、逢 -彌勒出世、移置他方世界、寄地獄受苦。大德、 -爾波波地往諸方、覓什麼物、踏爾腳板闊。無 -佛可求、無道可成、無法可得。外求有相佛、與 -汝不相似。欲識汝本心、非合亦非離。道流、真 -佛無形、真道無體、真法無相。三法混融、和合 -一處。辨既不得、喚作忙忙業識眾生。 -問、如何是真佛真法真道、乞垂開示。師云、佛 -者心清淨是。法者心光明是。道者處處無礙 -淨光是。三即一、皆是空名、而無寔有。如真正 -學道人、念念心不間斷。自達磨大師從西土 -來、祇是覓箇不受人惑底人。後遇二祖、一言 -便了、始知從前虛用功夫。山僧今日見處、與 -祖佛不別。若第一句中得、與祖佛為師。若第 -二句中得、與人天為師。若第三句中得、自救 -不了。 -問、如何是西來意。師云、若有意、自救不了。云、 -既無意、云何二祖得法。師云、得者是不得。云、 -既若不得、云何是不得底意。師云、為爾向一 -切處馳求心不能歇。所以祖師言、咄哉丈夫、 -將頭覓頭。爾言下便自回光返照、更不別求、 -知身心與祖佛不別、當下無事、方名得法。大 -德、山僧今時、事不獲已、話度說出許多不才 -淨。爾且莫錯。據我見處、寔無許多般道理。要 -用便用、不用便休。祇如諸方說六度萬行、以 -為佛法、我道、是莊嚴門佛事門、非是佛法。乃 -至持齋持戒、擎油不A、道眼不明、盡須抵債、 -索飯錢有日在。何故如此。入道不通理、復身 -還信施。長者八十一、其樹不生耳。乃至孤峰 -獨宿、一食卯齋、長坐不臥、六時行道、皆是造 -業底人。乃至頭目髓腦、國城妻子、象馬七珍、盡 -皆捨施、如是等見、皆是苦身心故、還招苦果。 -不如無事、純一無雜。乃至十地滿心菩薩、皆 -求此道流蹤跡、了不可得。所以諸天歡喜、地 -神捧足、十方諸佛、無不稱歎。緣何如此。為今 -聽法道人、用處無蹤跡。 -問、大通智勝佛、十劫坐道場、佛法不現前、不 -得成佛道。未審此意如何。乞師指示。師云、 -大通者、是自己於處處、達其萬法無性無相、 -名為大通。智勝者、於一切處不疑、不得一法、 -名為智勝。佛者心清淨、光明透徹法界、得名 -為佛。十劫坐道場者、十波羅蜜是。佛法不現 -前者、佛本不生、法本不滅、云何更有現前。不 -得成佛道者、佛不應更作佛。古人云、佛常在 -世間、而不染世間法。道流、爾欲得作佛、莫隨 -萬物。心生種種法生、心滅種種法滅。一心不 -生、萬法無咎。世與出世、無佛無法、亦不現前、 -亦不曾失。設有者、皆是名言章句、接引小兒、 -施設藥病、表顯名句。且名句不自名句、還是 -爾目前昭昭靈靈、鑒覺聞知照燭底、安一切 -名句。大德、造五無間業、方得解脫。 -問、如何是五無間業。師云、殺父害母、出佛身 -血、破和合僧、焚燒經像等、此是五無間業。云、 -如何是父。師云、無明是父。爾一念心、求起滅 -處不得、如響應空、隨處無事、名為殺父。云、如 -何是母。師云、貪愛為母。爾一念心、入欲界中、 -求其貪愛、唯見諸法空相、處處無著、名為害 -母。云、如何是出佛身血。師云、爾向清淨法界 -中、無一念心生解、便處處黑暗、是出佛身血。 -云、如何是破和合僧。師云、爾一念心、正達煩 -惱結使、如空無所依、是破和合僧。云、如何是 -焚燒經像。師云、見因緣空、心空、法空、一念決 -定斷、迥然無事、便是焚燒經像。大德、若如是 -達得、免被他凡聖名礙。爾一念心、祇向空拳 -指上生寔解、根境法中虛捏怪。自輕而退屈 -言、我是凡夫、他是聖人。禿屢生、有甚死急、披 -他師子皮、卻作野干鳴。大丈夫漢、不作丈夫 -氣息、自家屋A物不肯信、祇麼向外覓、上他 -古人閑名句、倚陰博陽、不能特達。逢境便緣、 -逢塵便執、觸處惑起、自無准定。道流、莫取山 -僧說處。何故。說無憑據、一期間圖畫虛空、如 -彩畫像等喻。道流、莫將佛為究竟。我見猶如 -廁孔、菩薩羅漢、盡是枷鎖、縛人底物。所以文 -殊仗劍、殺於瞿曇、鴦掘持刀、害於釋氏。道流、 -無佛可得。乃至三乘五性、圓頓教跡、皆是一 -期藥病相治、並無實法。設有、皆是相似、表顯 -路布、文字差排、且如是說。道流、有一般禿子、 -便向A許著功、擬求出世之法。錯了也。若人 -求佛、是人失佛。若人求道、是人失道。若人求 -祖、是人失祖。大德、莫錯。我且不取爾解經論、 -我亦不取爾國王大臣、我亦不取爾辯似懸 -河、我亦不取爾聰明智慧、唯要爾真正見解。 -道流、設解得百本經論、不如一箇無事底阿 -師。爾解得、即輕蔑他人。勝負修羅、人我無 -明、長地獄業。如善星比丘、解十二分教、生身 -陷地獄、大地不容。不如無事休歇去。飢來喫 -飯、睡來合眼。愚人笑我、智乃知焉。道流、莫 -向文字中求。心動疲勞、吸冷氣無益。不如一 -念緣起無生、超出三乘權學菩薩。大德、莫因 -循過日。山僧往日、未有見處時、黑漫漫地。光 -陰不可空過、腹熱心忙、奔波訪道。後還得力、 -始到今日、共道流如是話度。勸諸道流、莫為 -衣食。看世界易過、善知識難遇。如優曇花時 -一現耳。爾諸方聞道有箇臨濟老漢、出來便 -擬問難、教語不得。被山僧全體作用、學人空 -開得眼、口總動不得。懵然不知以何答我。我 -向伊道、龍象蹴踏、非驢所堪。爾諸處祇指胸 -點肋、道我解禪解道、三箇兩箇、到這A不奈 -何。咄哉、爾將這箇身心、到處簸兩片皮、誑謼 -閭閻。喫鐵棒有日在。非出家兒、盡向阿修羅 -界攝。夫如至理之道、非諍論而求激揚、鏗鏘 -以摧外道。至於佛祖相承、更無別意。設有言 -教、落在化儀三乘五性、人天因果。如圓頓之 -教、又且不然。童子善財、皆不求過。大德、莫錯 -用心。如大海不停死屍。祇麼擔卻、擬天下走。 -自起見障、以礙於心。日上無雲、麗天普照。眼 -中無翳、空A無花。道流、爾欲得如法、但莫 -生疑。展則彌綸法界、收則絲髮不立。歷歷孤 -明、未曾欠少。眼不見、耳不聞、喚作什麼物。古 -人云、說似一物則不中。爾但自家看。更有什 -麼。說亦無盡、各自著力。珍重。 -勘辨。 -黃蘗、因入廚次、問飯頭、作什麼。飯頭云、揀眾 -僧米。黃蘗云、一日喫多少。飯頭云、二石五。 -黃蘗云、莫太多麼。飯頭云、猶恐少在。黃檗便 -打。飯頭卻舉似師。師云、我為汝勘這老漢。纔 -到侍立次、黃蘗舉前話。師云、飯頭不會、請和 -尚代一轉語。師便問、莫太多麼。黃檗云、何不 -道、來日更喫一頓。師云、說什麼來日、即今便 -喫。道了便掌。黃蘗云、這風顛漢、又來這A捋 -虎鬚。師便喝出去。後溈山問仰山、此二尊宿、 -意作麼生。仰山云、和尚作麼生。溈山云、養子 -方知父慈。仰山云、不然。溈山云、子又作麼生。 -仰山云、大似勾賊破家。 -師問僧、什麼處來。僧便喝。師便揖坐。僧擬議。 -師便打。師見僧來、便豎起拂子。僧禮拜。師便 -打。又見僧來、亦豎起拂子。僧不顧。師亦打。 -師、一日同普化、赴施主家齋次、師問、毛吞巨 -海、芥納須彌。為是神通妙用、本體如然。普化 -踏倒飯床。師云、太H生。普化云、這A是什麼 -所在、說H說細。師來日、又同普化赴齋。問、今 -日供養、何似昨日。普化依前踏倒飯床。師云、 -得即得、太H生。普化云、瞎漢、佛法說什麼 -H細。師乃吐舌。 -師一日、與河陽木塔長老、同在僧堂地爐內 -坐。因說、普化每日在街市、掣風掣顛。知他是 -凡是聖。言猶未了、普化入來。師便問、汝是凡 -是聖。普化云、汝且道、我是凡是聖。師便喝。 -普化以手指云、河陽新婦子、木塔老婆禪。臨 -濟小廝兒、卻具一隻眼。師云、這賊。普化云賊 -賊、便出去。 -一日、普化在僧堂前、喫生菜。師見云、大似一 -頭驢。普化便作驢鳴。師云、這賊。普化云賊賊、 -便出去。 -因普化、常於街市搖鈴云、明頭來、明頭打、暗 -頭來、暗頭打、四方八面來、旋風打、虛空來、連架 -打。師令侍者去、纔見如是道、便把住云、總不 -與麼來時如何。普化托開云、來日大悲院A -有齋。侍者回、舉似師。師云、我從來疑著這漢。 -有一老宿參師、未曾人事、便問、禮拜即是、不 -禮拜即是。師便喝。老宿便禮拜。師云、好箇草 -賊。老宿云賊賊、便出去。師云、莫道無事好。 -首座侍立次、師云、還有過也無。首座云、有。師 -云、賓家有過、主家有過。首座云、二俱有過。 -師云、過在什麼處。首座便出去。師云、莫道無 -事好。後有僧舉似南泉。南泉云、官馬相踏。 -師因入軍營赴齋、門首見員僚。師指露柱問、 -是凡是聖。員僚無語。師打露柱云、直饒道得、 -也祇是箇木橛。便入去。 -師問院主、什麼處來。主云、州中糶黃米去來。 -師云、糶得盡麼。主云、糶得盡。師以杖面前畫 -一畫云、還糶得這箇麼。主便喝。師便打。典 -座至。師舉前語。典座云、院主不會和尚意。師 -云、爾作麼生。典座便禮拜。師亦打。有座主來 -相看次、師問、座主講何經說。主云、某甲荒 -虛、粗習百法論。師云、有一人、於三乘十二分 -教明得。有一人、於三乘十二分教明不得。是 -同是別。主云、明得即同、明不得即別。樂普為 -侍者、在師後立云、座主、這A是什麼所在、說 -同說別。師回首問侍者、汝又作麼生。侍者便 -喝。師送座主回來、遂問侍者、適來是汝喝老 -僧。侍者云、是。師便打。 -師聞第二代德山垂示云、道得也三十棒、道 -不得也三十棒、師令樂普去問、道得為什麼 -也三十棒、待伊打汝、接住棒送一送、看他作 -麼生。普到彼、如教而問。德山便打。普接住送 -一送。德山便歸方丈。普回舉似師。師云、我從 -來疑著這漢。雖然如是、汝還見德山麼。普擬 -議。師便打。 -王常侍、一日訪師。同師於僧堂前看、乃問、這 -一堂僧、還看經麼。師云、不看經。侍云、還學禪 -麼。師云、不學禪。侍云、經又不看、禪又不學、 -畢竟作箇什麼。師云、總教伊成佛作祖去。侍 -云、金屑雖貴、落眼成翳。又作麼生。師云、將 -為爾是箇俗漢。 -師問杏山、如何是露地白牛。山云、吽吽。師 -云、啞那。山云、長老作麼生。師云、這畜生。 -師問樂普云、從上來、一人行棒、一人行喝。阿 -那箇親。普云、總不親。師云、親處作麼生。普 -便喝。師乃打。 -師見僧來、展開兩手。僧無語。師云、會麼。云、不 -會。師云、渾崙擘不開、與爾兩文錢。 -大覺到參。師舉起拂子。大覺敷坐具。師擲下 -拂子。大覺收坐具、入僧堂。眾僧云、這僧莫是 -和尚親故、不禮拜、又不喫棒。師聞、令喚覺。覺 -出。師云、大眾道、汝未參長老。覺云不審、便 -自歸眾。 -趙州行腳時參師。遇師洗腳次、州便問、如何 -是祖師西來意。師云、恰值老僧洗腳。州近前、 -作聽勢。師云、更要第二杓惡水潑在。州便下 -去。 -有定上座、到參問、如何是佛法大意。師下繩 -床、擒住與一掌、便托開。定佇立。傍僧云、定 -上座、何不禮拜。定方禮拜、忽然大悟。 -麻谷到參。敷坐具問、十二面觀音、阿那面 -正。師下繩床、一手收坐具、一手搊麻谷云、十 -二面觀音、向什麼處去也。麻谷轉身、擬坐繩 -床。師拈拄杖打。麻谷接卻、相捉入方丈。 -師問僧、有時一喝、如金剛王寶劍。有時一喝、 -如踞地金毛師子。有時一喝、如探竿影草。有 -時一喝、不作一喝用。汝作麼生會。僧擬議。 -師便喝。 -504b -師問一尼、善來惡來。尼便喝。師拈棒云、更道 -更道。尼又喝。師便打。 -龍牙問、如何是祖師西來意。師云、與我過禪 -板來。牙便過禪板與師。師接得便打。牙云、打 -即任打、要且無祖師意。牙後到翠微問、如何 -是祖師西來意。微云、與我過蒲團來。牙便過 -蒲團與翠微。翠微接得便打。牙云、打即任打、 -要且無祖師意。牙住院後、有僧入室請益云、 -和尚行腳時、參二尊宿因緣、還肯他也無。牙 -云、肯即深肯、要且無祖師意。 -徑山有五百眾、少人參請。黃檗令師到徑山。 -乃謂師曰、汝到彼作麼生。師云、某甲到彼、自 -有方便。師到徑山、裝腰上法堂、見徑山。徑山 -方舉頭、師便喝。徑山擬開口、師拂袖便行。尋 -有僧問徑山、這僧適來有什麼言句、便喝和 -尚。徑山云、這僧從黃檗會A來。爾要知麼、 -且問取他。徑山五百眾、太半分散。 -普化一日、於街市中、就人乞直裰。人皆與之。 -普化俱不要。師令院主買棺一具。普化歸來。 -師云、我與汝做得箇直裰了也。普化便自擔 -去、繞街市叫云、臨濟與我做直裰了也。我往 -東門遷化去。市人競隨看之。普化云、我今 -日未、來日往南門遷化去。如是三日、人皆 -不信。至第四日、無人隨看。獨出城外、自入棺 -內、倩路行人釘之。即時傳布。市人競往開棺、 -乃見全身脫去。祇聞空中鈴響、隱隱而去。 -行錄。 -師初在黃蘗會下、行業純一。首座乃歎曰、雖 -是後生、與眾有異。遂問、上座在此、多少時。師 -云、三年。首座云、曾參問也無。師云、不曾參 -問。不知問箇什麼。首座云、汝何不去問堂頭 -和尚、如何是佛法的的大意。師便去問。聲未 -絕、黃蘗便打。師下來。首座云、問話作麼生。 -師云、某甲問聲未絕、和尚便打。某甲不會。首 -座云、但更去問。師又去問。黃蘗又打。如是三 -度發問、三度被打。師來白首座云、幸蒙慈悲、 -令某甲問訊和尚。三度發問、三度被打。自恨 -障緣不領深旨。今且辭去。首座云、汝若去時、 -須辭和尚去。師禮拜退。首座先到和尚處云、 -問話底後生、甚是如法。若來辭時、方便接他。 -向後穿鑿成一株大樹、與天下人作廕涼去 -在。師去辭黃蘗。蘗云、不得往別處去。汝向高 -安灘頭大愚處去、必為汝說。師到大愚。大愚 -問、什麼處來。師云、黃蘗處來。大愚云、黃蘗 -有何言句。師云、某甲三度問佛法的的大意、 -三度被打。不知某甲有過無過。大愚云、黃蘗 -與麼老婆、為汝得徹困。更來這A、問有過無 -過。師於言下大悟云、元來黃蘗佛法無多子。 -大愚搊住云、這尿床鬼子、適來道有過無過、 -如今卻道、黃蘗佛法無多子。爾見箇什麼道 -理、速道速道。師於大愚脅下、築三拳。大愚托 -開云、汝師黃蘗、非于我事。師辭大愚、卻回黃 -蘗。黃蘗見來便問、這漢來來去去、有什麼了 -期。師云、祇為老婆心切。便人事了侍立。黃蘗 -問、什麼處去來。師云、昨奉慈旨、令參大愚 -去來。黃蘗云、大愚有何言句。師遂舉前話。黃 -蘗云、作麼生得這漢來、待痛與一頓。師云、說 -什麼待來、即今便喫。隨後便掌。黃蘗云、這風 -顛漢、卻來這A捋虎鬚。師便喝。黃蘗云、侍者、 -引這風顛漢、參堂去。後、溈山舉此話、問仰山、 -臨濟當時、得大愚力、得黃蘗力。仰山云、非但 -騎虎頭、亦解把虎尾。 -師栽松次、黃蘗問、深山A栽許多作什麼。師 -云、一與山門作境致、二與後人作標榜。道了、 -將钁頭打地三下。黃蘗云、雖然如是、子已喫 -吾三十棒了也。師又以钁頭打地三下、作噓 -噓聲。黃蘗云、吾宗到汝、大興於世。後溈山舉 -此語、問仰山、黃蘗當時、祇囑臨濟一人、更有 -人在。仰山云、有。祇是年代深遠、不欲舉似和 -尚。溈山云、雖然如是、吾亦要知。汝但舉看。仰 -山云、一人指南、吳越令行、遇大風即止。〔讖風穴和尚也。〕 -師侍立德山次、山云、今日困。師云、這老漢E -語作什麼。山便打。師掀倒繩床。山便休。 -師普請鋤地次、見黃蘗來、拄钁而立。黃蘗云、 -這漢困那。師云、钁也未舉、困箇什麼。黃蘗便 -打。師接住棒、一送送倒。黃蘗喚維那、維那扶 -起我。維那近前扶云、和尚爭容得這風顛漢 -無禮。黃蘗纔起、便打維那。師钁地云、諸方火 -葬、我這A一時活埋。後溈山問仰山、黃蘗打 -維那、意作麼生。仰山云、正賊走卻、邏蹤人 -喫棒。師一日、在僧堂前坐。見黃蘗來、便閉卻 -目。黃蘗乃作怖勢、便歸方丈。師隨至方丈禮 -謝。首座在黃蘗處侍立。黃蘗云、此僧雖是後 -生、卻知有此事。首座云、老和尚腳跟不點地、 -卻證據箇後生。黃蘗自於口上打一摑。首座 -云、知即得。 -師在堂中睡。黃蘗下來見、以拄杖打板頭一 -下。師舉頭、見是黃蘗、卻睡。黃蘗又打板頭一 -下、卻往上間、見首座坐禪、乃云、下間後生 -卻坐禪、汝這A妄想作什麼。首座云、這老漢 -作什麼。黃蘗打板頭一下、便出去。後、溈山問 -仰山、黃蘗入僧堂、意作麼生。仰山云、兩彩 -一賽。 -一日普請次、師在後行。黃蘗回頭、見師空手、 -乃問、钁頭在什麼處。師云、有一人將去了也。 -黃蘗云、近前來、共汝商量箇事。師便近前。黃 -蘗豎起钁頭云、祇這箇、天下人拈掇不起。師 -就手掣得、豎起云、為什麼卻在某甲手A。黃 -蘗云、今日大有人普請。便歸院。後溈山問仰 -山、钁頭在黃蘗手A、為什麼卻被臨濟奪卻。 -仰山云、賊是小人、智過君子。 -師為黃蘗馳書去溈山。時仰山作知客。接得 -書、便問、這箇是黃蘗底、那箇是專使底。師便 -掌。仰山約住云、老兄知是般事、便休。同去見 -溈山。溈山便問、黃蘗師兄多少眾。師云、七百 -眾。溈山云、什麼人為導首。師云、適來已達書 -了也。師卻問溈山、和尚此間多少眾。溈山云、 -一千五百眾。師云、太多生。溈山云、黃蘗師兄 -亦不少。師辭溈山。仰山送出云、汝向後北去、 -有箇住處。師云、豈有與麼事。仰山云、但去、已 -後有一人佐輔老兄在。此人祇是有頭無尾、 -有始無終。師後到鎮州、普化已在彼中。師出 -世、普化佐贊於師。師住未久、普化全身脫去。 -師因半夏上黃蘗、見和尚看經。師云、我將謂 -是箇人、元來是唵黑豆老和尚。住數日、乃辭 -去。黃蘗云、汝破夏來、不終夏去。師云、某甲 -暫來禮拜和尚。黃蘗遂打、趁令去。師行數里、 -疑此事、卻回終夏。師一日、辭黃蘗。蘗問、什麼 -處去。師云、不是河南、便歸河北。黃蘗便打。師 -約住與一掌。黃蘗大笑、乃喚侍者、將百丈先 -師禪板机案來。師云、侍者、將火來。黃蘗云、雖 -然如是、汝但將去。已後坐卻天下人舌頭去 -在。後溈山問仰山、臨濟莫辜負他黃蘗也無。 -仰山云、不然。溈山云、子又作麼生。仰山云、 -知恩方解報恩。溈山云、從上古人、還有相似 -506a -底也無。仰山云、有。祇是年代深遠、不欲舉似 -和尚。溈山云、雖然如是、吾亦要知。子但舉 -看。仰山云、祇如楞嚴會上、阿難讚佛云、將此 -深心奉塵剎、是則名為報佛恩。豈不是報恩 -之事。溈山云、如是如是。見與師齊、減師半德。 -見過於師、方堪傳授。 -師到達磨塔頭。塔主云、長老、先禮佛、先禮祖。 -師云、佛祖俱不禮。塔主云、佛祖與長老是什 -麼冤家。師便拂袖而出。 -師行腳時、到龍光。光上堂。師出問云、不展鋒 -鋩、如何得勝。光據坐。師云、大善知識、豈無方 -便。光瞪目云、嗄。師以手指云、這老漢、今日敗 -闕也。 -到三峰。平和尚問曰、什麼處來。師云、黃蘗來。 -平云、黃蘗有何言句。師云、金牛昨夜遭塗炭、 -直至如今不見蹤。平云、金風吹玉管、那箇是 -知音。師云、直透萬重關、不住清霄內。平云、 -子這一問太高生。師云、龍生金鳳子、衝破碧 -琉璃。平云、且坐喫茶。又問、近離甚處。師云、 -龍光。平云、龍光近日如何。師便出去。 -到大慈。慈在方丈內坐。師問、端居丈室時如 -何。慈云、寒松一色千年別、野老拈花萬國春。 -師云、今古永超圓智體、三山鎖斷萬重關。慈 -便喝。師亦喝。慈云、作麼。師拂袖便出。 -到襄州華嚴。嚴倚拄杖、作睡勢。師云、老和尚 -瞌睡作麼。嚴云、作家禪客、宛爾不同。師云、侍 -者、點茶來、與和尚喫。嚴乃喚維那、第三位安 -排這上座。 -到翠峰。峰問、甚處來。師云、黃蘗來。峰云、黃 -蘗有何言句、指示於人。師云、黃蘗無言句。峰 -云、為什麼無。師云、設有、亦無舉處。峰云、但 -舉看。師云、一箭過西天。 -到象田。師問、不凡不聖、請師速道。田云、老 -僧祇與麼。師便喝云、許多禿子、在這A覓什 -麼D。 -到明化。化問、來來去去作什麼。師云、祇徒 -踏破草鞋。化云、畢竟作麼生。師云、老漢話頭 -也不識。 -往鳳林。路逢一婆。婆問、甚處去。師云、鳳林 -去。婆云、恰值鳳林不在。師云、甚處去。婆便 -行。師乃喚婆。婆回頭。師便打。 -到鳳林。林問、有事相借問、得麼。師云、何得 -剜肉作瘡。林云、海月澄無影、遊魚獨自迷。師 -云、海月既無影、遊魚何得迷。鳳林云、觀風 -知浪起、翫水野帆飄。師云、孤輪獨照江山靜、 -自笑一聲天地驚。林云、任將三寸輝天地、一 -句臨機試道看。師云、路逢劍客須呈劍、不是 -詩人莫獻詩。鳳林便休。師乃有頌、大道絕同、 -任向西東、石火莫及、電光罔通。溈山問仰山、 -石火莫及、電光罔通。從上諸聖、將什麼為人。 -仰山云、和尚意作麼生。溈山云、但有言說、都 -無寔義。仰山云、不然。溈山云、子又作麼生。 -仰山云、官不容針、私通車馬。 -到金牛。牛見師來、橫按拄杖、當門踞坐。師以 -手敲拄杖三下、卻歸堂中第一位坐。牛下來 -見、乃問、夫賓主相見、各具威儀。上座從何而 -來、太無禮生。師云、老和尚道什麼。牛擬開 -口。師便打。牛作倒勢。師又打。牛云、今日不 -著便。溈山問仰山、此二尊宿、還有勝負也無。 -仰山云、勝即總勝、負即總負。 -師臨遷化時、據坐云、吾滅後、不得滅卻吾正 -法眼藏。三聖出云、爭敢滅卻和尚正法眼藏。 -師云、已後有人問爾、向他道什麼。三聖便喝。 -師云、誰知吾正法眼藏、向這瞎驢邊滅卻。言 -F、端然示寂。 -師諱義玄、曹州南華人也。俗姓邢氏。幼而 -穎異、長以孝聞。及落髮受具、居於講肆、精究 -毘尼、博賾經論。俄而歎曰、此濟世之醫方也、 -非教外別傳之旨。即更衣游方、首參黃蘗、次 -謁大愚。其機緣語句、載于行錄。既受黃蘗印 -可、尋抵河北。鎮州城東南隅、臨滹沱河側、小 -院住持。其臨濟因地得名。時普化先在彼、佯 -狂混眾、聖凡莫測。師至即佐之。師正旺化、普 -化全身脫去。乃符仰山小釋迦之懸記也。適 -丁兵革、師即棄去。太尉默君和、於城中捨宅 -為寺、亦以臨濟為額、迎師居焉。後拂衣南邁、 -至河府。府主王常侍、延以師禮。住未幾、即來 -大名府興化寺、居于東堂。師無疾、忽一日攝 -衣據坐、與三聖問答畢、寂然而逝。時唐咸通 -八年丁亥、孟陬月十日也。門人以師全身、建 -塔于大名府西北隅。G謚慧照禪師、塔號澄 -靈。合掌稽首、記師大略。住鎮州保壽嗣法小 -師廷沼謹書。 -鎮州臨濟慧照禪師語錄終。 -住大名府興化嗣法小師存獎校勘。 +*臨濟語錄 +鎮州臨濟慧照禪師語錄序。 +延康殿學士金紫光祿大夫真。 +定府路安撫使兼馬步軍都總。 +管兼知成德軍府事馬防、撰。 +黃檗山頭、曾遭痛棒。大愚肋下、方解築拳。饒 +舌老婆、尿床鬼子。這風顛漢、再捋虎鬚。巖谷 +栽松、後人標榜。钁頭斸地、幾被活埋。肯箇後 +生、驀口自摑。辭焚机案、坐斷舌頭。不是河南、 +便歸河北。院臨古渡、運濟往來。把定要津、壁 +立萬仞。奪人奪境、陶鑄仙陀。三要三玄、鈐鎚 +衲子。常在家舍、不離途中。無位真人、面門出 +入。兩堂齊喝、賓主歷然。照用同時、本無前 +後。菱花對像、虛谷傳聲。妙應無方、不留朕 +跡。拂衣南邁、戾止大名。興化師承、東堂迎 +侍。銅瓶鐵C、掩室杜詞。松老雲閑、曠然自 +適。面壁未幾、密付將終。正法誰傳、瞎驢邊 +滅。圓覺老演、今為流通。點撿將來、故無差 +舛。唯餘一喝、尚要商量。具眼禪流、冀無賺 +舉。宣和庚子中秋日謹序。 +鎮州臨濟慧照禪師語錄。 +住三聖嗣法小師慧然集。 +府主王常侍、與諸官請師升座。師上堂云、山 +僧今日事不獲已、曲順人情、方登此座。若約 +祖宗門下、稱揚大事、直是開口不得、無爾措 +足處。山僧此日以常侍堅請、那隱綱宗。還有 +作家戰將、直下展陣開旗麼。對眾證據看。僧 +問、如何是佛法大意。師便喝。僧禮拜。師云、 +這箇師僧、卻堪持論。問、師唱誰家曲、宗風嗣 +阿誰。師云、我在黃蘗處、三度發問、三度被打。 +僧擬議。師便喝、隨後打云、不可向虛空A釘 +橛去也。有座主問、三乘十二分教、豈不是明 +佛性。師云、荒草不曾鋤。主云、佛豈賺人也。 +師云、佛在什麼處。主無語。師云、對常侍前、擬 +瞞老僧。速退速退。妨他別人諸問。復云、此日 +法筵、為一大事故。更有問話者麼。速致問來。 +爾纔開口、早勿交涉也。何以如此。不見釋尊 +云、法離文字、不屬因不在緣故。為爾信不及、 +所以今日葛藤。恐滯常侍與諸官員、眛他佛 +性。不如且退。喝一喝云、少信根人、終無了日。 +久立珍重。 +師、因一日到河府。府主王常侍、請師升座。 +時麻谷出問、大悲千手眼、那箇是正眼。師云、 +大悲千手眼、那箇是正眼、速道速道。麻谷拽 +師下座、麻谷卻坐。師近前云、不審。麻谷擬 +議。師亦拽麻谷下座、師卻坐。麻谷便出去。師 +便下座。 +上堂。云、赤肉團上有一無位真人、常從汝等 +諸人面門出入。未證據者看看。時有僧出問、 +如何是無位真人。師下禪床、把住云、道道。其 +僧擬議。師托開云、無位真人是什麼乾屎橛。 +便歸方丈。 +上堂。有僧出禮拜。師便喝。僧云、老和尚莫 +探頭好。師云、爾道落在什麼處。僧便喝。又有 +僧問、如何是佛法大意。師便喝。僧禮拜。師 +云、爾道好喝也無。僧云、草賊大敗。師云、過 +在什麼處。僧云、再犯不容。師便喝。是日兩堂 +首座相見、同時下喝。僧問師、還有賓主也無。 +師云、賓主歷然。師云、大眾、要會臨濟賓主句、 +問取堂中二首座。便下座。 +上堂。僧問、如何是佛法大意。師豎起拂子。 +僧便喝。師便打。又僧問、如何是佛法大意。師 +亦豎起拂子。僧便喝。師亦喝。僧擬議。師便 +打。師乃云、大眾、夫為法者、不避喪身失命。我 +二十年、在黃蘗先師處、三度問佛法的的大 +意、三度蒙他賜杖。如蒿枝拂著相似。如今更 +思得一頓棒喫。誰人為我行得。時有僧出眾 +云、某甲行得。師拈棒與他。其僧擬接。師便打。 +上堂。僧問、如何是劍刃上事。師云、禍事、禍 +事。僧擬議。師便打。問、祇如石室行者、踏碓忘 +卻移腳、向什麼處去。師云、沒溺深泉。師乃 +云、但有來者、不虧欠伊。總識伊來處。若與麼 +來、恰似失卻。不與麼來、無繩自縛。一切時中、 +莫亂斟酌。會與不會、都來是錯。分明與麼道。 +一任天下人貶剝。久立珍重。 +上堂。云、一人在孤峰頂上、無出身之路。一 +人在十字街頭、亦無向背。那箇在前、那箇在 +後。不作維摩詰、不作傅大士。珍重。 +上堂。云、有一人、論劫在途中、不離家舍。有 +一人、離家舍、不在途中。那箇合受人天供養。 +便下座。 +上堂。僧問、如何是第一句。師云、三要印開 +朱點側、未容擬議主賓分。問、如何是第二 +句。師云、妙解豈容無著問、漚和爭負截流機。 +問、如何是第三句。師云、看取棚頭弄傀儡、抽 +牽都來A有人。師又云、一句語須具三玄 +門、一玄門須具三要、有權有用。汝等諸人、作 +麼生會。下座。 +師晚參示眾云、有時奪人不奪境、有時奪境 +不奪人、有時人境俱奪、有時人境俱不奪。時、 +有僧問、如何是奪人不奪境。師云、煦日發生 +鋪地錦、瓔孩垂髮白如絲。僧云、如何是奪境 +不奪人。師云、王令已行天下遍、將軍塞外絕 +煙塵。僧云、如何是人境兩俱奪。師云、并汾絕 +信、獨處一方。僧云、如何是人境俱不奪。師云、 +王登寶殿、野老謳歌。師乃云、今時學佛法者、 +且要求真正見解。若得真正見解、生死不染、 +去住自由。不要求殊勝、殊勝自至。道流、祇如 +自古先德、皆有出人底路。如山僧指示人處、 +祇要爾不受人惑。要用便用、更莫遲疑。如今 +學者不得、病在甚處。病在不自信處。爾若自 +信不及、即便忙忙地徇一切境轉、被他萬 +境回換、不得自由。爾若能歇得念念馳求心、 +便與祖佛不別。爾欲得識祖佛麼。祇爾面前 +聽法底是。學人信不及、便向外馳求。設求得 +者、皆是文字勝相、終不得他活祖意。莫錯、諸 +禪德。此時不遇、萬劫千生、輪回三界、徇好 +境掇去、驢牛肚A生。道流、約山僧見處、與釋 +迦不別。今日多般用處、欠少什麼。六道神光、 +未曾間歇。若能如是見得、祇是一生無事人。 +大德、三界無安、猶如火宅。此不是爾久停住 +處。無常殺鬼、一剎那間、不揀貴賤老少。爾要 +與祖佛不別、但莫外求。爾一念心上清淨光、 +是爾屋A法身佛。爾一念心上無分別光、是 +爾屋A報身佛。爾一念心上無差別光、是爾 +屋A化身佛。此三種身、是爾即今目前聽法 +底人。祇為不向外馳求、有此功用。據經論家、 +取三種身為極則。約山僧見處、不然。此三種 +身是名言、亦是三種依。古人云、身依義立、土 +據體論。法性身、法性土、明知是光影。大德、爾 +且識取弄光影底人、是諸佛之本源、一切處 +是道流歸舍處。是爾四大色身、不解說法聽 +法。脾胃肝膽、不解說法聽法。虛空不解說法 +聽法。是什麼解說法聽法。是爾目前歷歷底、 +勿一箇形段孤明、是這箇解說法聽法。若如 +是見得、便與祖佛不別。但一切時中、更莫間 +斷、觸目皆是。祇為情生智隔、想變體殊、所以 +輪回三界、受種種苦。若約山僧見處、無不甚 +深、無不解脫。道流、心法無形、通貫十方。在眼 +曰見、在耳曰聞、在鼻嗅香、在口談論、在手執 +捉、在足運奔。本是一精明、分為六和合。一 +心既無、隨處解脫。山僧與麼說、意在什麼處。 +祇為道流一切馳求心不能歇、上他古人閑 +機境。道流、取山僧見處、坐斷報化佛頭、十地 +滿心、猶如客作兒、等妙二覺、擔枷鎖漢、羅漢 +辟支、猶如廁穢、菩提涅槃、如繫驢橛。何以如 +此、祇為道流不達三祇劫空、所以有此障礙。 +若是真正道人、終不如是。但能隨緣消舊業、 +任運著衣裳、要行即行、要坐即坐、無一念心 +希求佛果。緣何如此。古人云、若欲作業求佛、 +佛是生死大兆。大德、時光可惜。祇擬傍家波 +波地、學禪學道、認名認句、求佛求祖、求善知 +識意度。莫錯、道流。爾祇有一箇父母、更求何 +物。爾自返照看。古人云、演若達多失卻頭、求 +心歇處即無事。大德、且要平常、莫作模樣。有 +一般不識好惡禿奴、便即見神見鬼、指東劃 +西、好晴好雨。如是之流、盡須抵債、向閻老前、 +吞熱鐵丸有日。好人家男女、被這一般野狐 +精魅所著、便即捏怪。瞎屢生、索飯錢有日 +在。 +師示眾云、道流、切要求取真正見解、向天下 +橫行、免被這一般精魅惑亂。無事是貴人。但 +莫造作、祇是平常。爾擬向外傍家求過、覓腳 +手。錯了也。祇擬求佛、佛是名句。爾還識馳求 +底麼。三世十方佛祖出來、也祇為求法。如今 +參學道流、也祇為求法。得法始了。未得、依前 +輪回五道。云何是法。法者是心法。心法無形、 +通貫十方、目前現用。人信不及、便乃認名認 +句、向文字中、求意度佛法。天地懸殊。道流、山 +僧說法、說什麼法。說心地法。便能入凡入聖、 +入淨入穢、入真入俗。要且不是爾真俗凡聖、 +能與一切真俗凡聖、安著名字。真俗凡聖、與 +此人安著名字不得。道流、把得便用、更不著 +名字、號之為玄旨。山僧說法、與天下人別。祇 +如有箇文殊普賢、出來目前、各現一身問法、 +纔道咨和尚、我早辨了也。老僧穩坐、更有道 +流、來相見時、我盡辨了也。何以如此。祇為我 +見處別、外不取凡聖、內不住根本、見徹更不 +疑謬。 +師示眾云、道流、佛法無用功處、祇是平常無 +事。屙屎送尿、著衣喫飯、困來即臥。愚人笑 +我、智乃知焉。古人云、向外作工夫、總是癡 +頑漢。爾且隨處作主、立處皆真。境來回換不 +得。縱有從來習氣、五無間業、自為解脫大海。 +今時學者、總不識法、猶如觸鼻羊、逢著物安 +在口A。奴郎不辨、賓主不分。如是之流、邪心 +入道、鬧處即入。不得名為真出家人、正是真 +俗家人。夫出家者、須辨得平常真正見解、辨 +佛辨魔、辨真辨偽、辨凡辨聖。若如是辨得、名 +真出家。若魔佛不辨、正是出一家入一家。喚 +作造業眾生、未得名為真出家。祇如今有一 +箇佛魔、同體不分、如水乳合、鵝王喫乳。如明 +眼道流、魔佛俱打。爾若愛聖憎凡、生死海A +浮沈。 +問、如何是佛魔。師云、爾一念心疑處是魔。 +爾若達得萬法無生、心如幻化、更無一塵一 +法、處處清淨是佛。然佛與魔、是染淨二境。約 +山僧見處、無佛無眾生、無古無今、得者便得、 +不歷時節。無修無證、無得無失。一切時中、更 +無別法。設有一法過此者、我說如夢如化。山 +僧所說皆是。道流、即今目前孤明歷歷地聽 +者、此人處處不滯、通貫十方、三界自在。入一 +切境差別、不能回換。一剎那間、透入法界、逢 +佛說佛、逢祖說祖、逢羅漢說羅漢、逢餓鬼說 +餓鬼。向一切處、游履國土、教化眾生、未曾離 +一念。隨處清淨、光透十方、萬法一如。道流、大 +丈夫兒、今日方知本來無事。祇為爾信不及、 +念念馳求、捨頭覓頭、自不能歇。如圓頓菩 +薩、入法界現身、向淨土中、厭凡忻聖。如此之 +流、取捨未忘、染淨心在。如禪宗見解、又且不 +然。直是現今、更無時節。山僧說處、皆是一期 +藥病相治、總無實法。若如是見得、是真出家、 +日消萬兩黃金。道流、莫取次被諸方老師印 +破面門、道我解禪解道。辯似懸河、皆是造地 +獄業。若是真正學道人、不求世間過、切急 +要求真正見解。若達真正見解圓明、方始了 +畢。 +問、如何是真正見解。師云、爾但一切入凡入 +聖、入染入淨、入諸佛國土、入彌勒樓閣、入毘 +盧遮那法界、處處皆現國土、成住壞空。佛出 +于世、轉大法輪、卻入涅槃、不見有去來相貌。 +求其生死、了不可得。便入無生法界、處處游 +履國土、入華藏世界、盡見諸法空相、皆無 +實法。唯有聽法無依道人、是諸佛之母。所 +以佛從無依生。若悟無依、佛亦無得。若如是 +見得者、是真正見解。學人不了、為執名句、被 +他凡聖名礙、所以障其道眼、不得分明。祇如 +十二分教、皆是表顯之說。學者不會、便向表 +顯名句上生解。皆是依倚、落在因果、未免三 +界生死。爾若欲得生死去住、脫著自由、即今 +識取聽法底人。無形無相、無根無本、無住處、 +活撥撥地。應是萬種施設、用處祇是無處。 +所以覓著轉遠、求之轉乖。號之為祕密。道流、 +爾莫認著箇夢幻伴子。遲晚中間、便歸無常。 +爾向此世界中、覓箇什麼物作解脫。覓取一 +口飯喫、補毳過時、且要訪尋知識。莫因循逐 +樂。光陰可惜、念念無常。H則被地水火風、細 +則被生住異滅四相所逼。道流、今時且要識 +取四種無相境、免被境擺撲。 +問、如何是四種無相境。師云、爾一念心疑、被 +地來礙。爾一念心愛、被水來溺。爾一念心嗔、 +被火來燒。爾一念心喜、被風來飄。若能如是 +辨得、不被境轉、處處用境。東涌西沒、南涌北 +沒、中涌邊沒、邊涌中沒、履水如地、履地如水。 +緣何如此。為達四大如夢如幻故。道流、爾祇 +今聽法者、不是爾四大、能用爾四大。若能如 +是見得、便乃去住自由。約山僧見處、勿嫌底 +法。爾若愛聖、聖者聖之名。有一般學人、向五 +臺山A求文殊。早錯了也。五臺山無文殊。爾 +欲識文殊麼。祇爾目前用處、始終不異、處處 +不疑、此箇是活文殊。爾一念心無差別光、處 +處總是真普賢。爾一念心自能解縛、隨處解 +脫、此是觀音三昧法。互為主伴、出則一時 +出。一即三、三即一。如是解得、始好看教。 +師示眾云、如今學道人、且要自信。莫向外覓。 +總上他閑塵境、都不辨邪正。祇如有祖有佛、 +皆是教跡中事。有人拈起一句子語、或隱顯 +中出、便即疑生、照天照地、傍家尋問、也大 +忙然。大丈夫兒、莫祇麼論主論賊、論是論 +非、論色論財、論說閑話過日。山僧此間、不論 +僧俗、但有來者、盡識得伊。任伊向甚處出來、 +但有聲名文句、皆是夢幻。卻見乘境底人、是 +諸佛之玄旨。佛境不能自稱我是佛境。還是 +這箇無依道人、乘境出來。若有人出來、問我 +求佛、我即應清淨境出。有人問我菩薩、我即 +應玆悲境出。有人問我菩提、我即應淨妙境 +出。有人問我涅槃、我即應寂靜境出。境即 +萬般差別、人即不別。所以應物現形、如水中 +月。道流、爾若欲得如法、直須是大丈夫兒始 +得。若萎萎隨隨地、則不得也。夫如I嗄。 +之器、不堪貯醍醐。如大器者、直要不受 +人惑。隨處作主、立處皆真。但有來者、皆不得 +受。爾一念疑、即魔入心。如菩薩疑時、生死魔 +得便。但能息念、更莫外求。物來則照。爾但信 +現今用底、一箇事也無。爾一念心生三界、隨 +緣被境、分為六塵。爾如今應用處、欠少什麼。 +一剎那間、便入淨入穢、入彌勒樓閣、入三眼 +國土、處處遊履、唯見空名。 +問、如何是三眼國土。師云、我共爾入淨妙國 +土中、著清淨衣、說法身佛。又入無差別國土 +中、著無差別衣、說報身佛。又入解脫國土中、 +著光明衣、說化身佛。此三眼國土、皆是依變。 +約經論家、取法身為根本、報化二身為用。山 +僧見處、法身即不解說法。所以古人云、身依 +義立、土據體論。法性身、法性土、明知是建立 +之法、依通國土。空拳黃葉、用誑小兒。蒺藜夌 +刺、枯骨上覓什麼汁。心外無法、內亦不可得、 +求什麼物。爾諸方言道、有修有證。莫錯。設有 +修得者、皆是生死業。爾言六度萬行齊修。我 +見皆是造業。求佛求法、即是造地獄業。求菩 +薩、亦是造業。看經看教、亦是造業。佛與祖師、 +是無事人。所以有漏有為、無漏無為、為清淨 +業。有一般瞎禿子、飽喫飯了、便坐禪觀行、 +把捉念漏、不令放起、厭喧求靜、是外道法。祖 +師云、爾若住心看靜、舉心外照、攝心內澄、凝 +心入定、如是之流、皆是造作。是爾如今與麼 +聽法底人、作麼生擬修他證他莊嚴他。渠且 +不是修底物、不是莊嚴得底物。若教他莊嚴、 +一切物即莊嚴得。爾且莫錯。道流、爾取這一 +般老師口A語、為是真道、是善知識不思議、 +我是凡夫心、不敢測度他老宿。瞎屢生、爾一 +生祇作這箇見解、辜負這一雙眼。冷噤噤地、 +如凍凌上驢駒相似。我不敢毀善知識、怕生 +口業。道流、夫大善知識、始敢毀佛毀祖、是非 +天下、排斥三藏教、罵辱諸小兒、向逆順中覓 +人。所以我於十二年中、求一箇業性、知芥子 +許不可得。若似新婦子禪師、便即怕趁出院、 +不與飯喫、不安不樂。自古先輩、到處人不 +信、被遞出、始知是貴。若到處人盡肯、堪作什 +麼。所以師子一吼、野干腦裂。道流、諸方說、有 +道可修、有法可證。爾說證何法、修何道。爾今 +用處、欠少什麼物、修補何處。後生小阿師不 +會、便即信這般野狐精魅、許他說事、繫縛 +人、言道理行相應、護惜三業、始得成佛。如此 +說者、如春細雨。古人云、路逢達道人、第一莫 +向道。所以言、若人修道道不行、萬般邪境競 +頭生。智劍出來無一物、明頭未顯暗頭明。所 +以古人云、平常心是道。大德、覓什麼物。現今 +目前聽法無依道人、歷歷地分明、未曾欠少。 +爾若欲得與祖佛不別、但如是見、不用疑誤。 +爾心心不異、名之活祖。心若有異、則性相別。 +心不異故、即性相不別。 +問、如何是心心不異處。師云、爾擬問、早異了 +也、性相各分。道流、莫錯。世出世諸法、皆無自 +性、亦無生性。但有空名、名字亦空。爾祇麼 +認他閑名為實。大錯了也。設有、皆是依變之 +境。有箇菩提依、涅繫依、解脫依、三身依、境智 +依、菩薩依、佛依。爾向依變國土中、覓什麼物。 +乃至三乘十二分教、皆是拭不淨故紙。佛是 +幻化身、祖是老比丘。爾還是娘生已否。爾若 +求佛、即被佛魔攝。爾若求祖、即被祖魔縛。 +爾若有求皆苦。不如無事。有一般禿比丘、向 +學人道、佛是究竟、於三大阿僧祇劫、修行 +果滿、方始成道。道流、爾若道佛是究竟、緣什 +麼八十年後、向拘尸羅城、雙林樹間、側臥而死 +去。佛今何在。明知與我生死不別。爾言、三十 +二相八十種好是佛。轉輪聖王應是如來。明 +知是幻化。古人云、如來舉身相、為順世間情。 +恐人生斷見、權且立虛名。假言三十二、八十 +也空聲。有身非覺體、無相乃真形。爾道、佛有 +六通、是不可思議。一切諸天、神仙、阿修羅、大 +力鬼、亦有神通。應是佛否。道流、莫錯。祇如阿 +修羅、與天帝釋戰、戰敗領八萬四千眷屬、入 +藕絲孔中藏。莫是聖否。如山僧所舉、皆是業 +通依通。夫如佛六通者、不然。入色界不被色 +惑、入聲界不被聲惑、入香界不被香惑、入味 +界不被味惑、入觸界不被觸惑、入法界不被 +法惑。所以達六種色聲香味觸法皆是空相、 +不能繫縛此無依道人。雖是五蘊漏質、便是 +地行神通。道流、真佛無形、真法無相。爾祇麼 +幻化上頭、作模作樣。設求得者、皆是野狐精 +魅、並不是真佛、是外道見解。夫如真學道人、 +並不取佛、不取菩薩羅漢、不取三界殊勝。迥 +無獨脫、不與物拘。乾坤倒覆、我更不疑。十方 +諸佛現前、為一念心喜、三塗地獄頓現、無一 +念心怖。緣何如此。我見諸法空相、變即有、不 +變即無。三界唯心、萬法唯識。所以夢幻空花、 +何勞把捉。唯有道流、目前現今聽法底人、入 +火不燒、入水不溺、入三塗地獄、如遊園觀、入 +餓鬼畜生、而不受報。緣何如此。無嫌底法。爾 +若愛聖憎凡、生死海A沈浮。煩惱由心故有、 +無心煩惱何拘。不勞分別取相、自然得道須 +臾。爾擬傍家波波地學得、於三祇劫中、終歸 +生死。不如無事、向叢林中、床角頭交腳坐。道 +流、如諸方有學人來、主客相見了、便有一句 +子語、辨前頭善知識。被學人拈出箇機權語 +路、向善知識口角頭攛過、看爾識不識。爾若 +識得是境、把得便拋向坑子A。學人便即尋 +常、然後便索善知識語。依前奪之。學人云、上 +智哉、是大善知識。即云、爾大不識好惡。如善 +知識、把出箇境塊子、向學人面前弄。前人辨 +得、下下作主、不受境惑。善知識便即現半 +身、學人便喝。善知識又入一切差別語路中 +擺撲。學人云、不識好惡老禿奴。善知識歎曰、 +真正道流。如諸方善知識、不辨邪正。學人來 +問、菩提涅槃、三身境智、瞎老師便與他解說。 +被他學人罵著、便把棒打他、言無禮度。自是 +爾善知識無眼、不得嗔他。有一般不識好惡 +禿奴、即指東劃西、好晴好雨、好燈籠露柱。爾 +看、眉毛有幾莖。這箇具機緣。學人不會、便即 +心狂。如是之流、總是野狐精魅魍魎。被他好 +學人嗌嗌微笑、言瞎老禿奴惑亂他天下人。 +道流、出家兒且要學道。祇如山僧、往日曾向 +毘尼中留心、亦曾於經論尋討。後方知是濟 +世藥、表顯之說、遂乃一時拋卻、即訪道參禪。 +後遇大善知識、方乃道眼分明、始識得天下 +老和尚、知其邪正。不是娘生下便會、還是體 +究練磨、一朝自省。道流、爾欲得如法見解、但 +莫受人惑。向A向外、逢著便殺。逢佛殺佛、逢 +祖殺祖、逢羅漢殺羅漢、逢父母殺父母、逢 +親眷殺親眷、始得解脫、不與物拘、透脫自 +在。如諸方學道流、未有不依物出來底。山僧 +向此間、從頭打。手上出來手上打。口A出來 +口A打。眼A出來眼A打。未有一箇獨脫出 +來底。皆是上他古人閑機境。山僧無一法與 +人、祇是治病解縛。爾諸方道流、試不依物出 +來、我要共爾商量。十年五歲、並無一人。皆是 +依草附葉、竹木精靈、野狐精魅、向一切糞塊 +上亂咬。瞎漢、枉消他十方信施、道我是出家 +兒、作如是見解。向爾道、無佛無法、無修無證。 +祇與麼傍家擬求什麼物。瞎漢、頭上安頭。是 +爾欠少什麼。道流、是爾目前用底、與祖佛不 +別。祇麼不信、便向外求。莫錯。向外無法、內亦 +不可得。爾取山僧口A語、不如休歇無事去。 +已起者莫續、未起者不要放起、便勝爾十年 +行腳。約山僧見處、無如許多般、祇是平常。著 +衣喫飯、無事過時。爾諸方來者、皆是有心求 +佛求法、求解脫、求出離三界。癡人、爾要出三 +界、什麼處去。佛祖是賞繫底名句。爾欲識三 +界麼。不離爾今聽法底心地。爾一念心貪是 +欲界。爾一念心瞋是色界。爾一念心癡是無 +色界、是爾屋A家具子。三界不自道、我是三 +界。還是道流、目前靈靈地照燭萬般、酌度世 +界底人、與三界安名。大德、四大色身是無常。 +乃至脾胃肝膽、髮毛爪齒、唯見諸法空相。爾 +一念心歇得處、喚作菩提樹。爾一念心不能 +歇得處、喚作無明樹。無明無住處、無明無 +始終。爾若念念心歇不得、便上他無明樹、便 +入六道四生、披毛戴角。爾若歇得、便是清淨 +身界。爾一念不生、便是上菩提樹、三界神通 +變化、意生化身、法喜禪悅、身光自照。思衣羅 +綺千重、思食百味具足、更無橫病。菩提無住 +處、是故無得者。道流、大丈夫漢、更疑箇什麼。 +目前用處、更是阿誰。把得便用、莫著名字、號 +為玄旨。與麼見得、勿嫌底法。古人云、心隨萬 +境轉、轉處實能幽。隨流認得性、無喜亦無憂。 +道流、如禪宗見解、死活循然。參學之人、大須 +子細。如主客相見、便有言論往來。或應物現 +形、或全體作用、或把機權喜怒、或現半身、或 +乘師子、或乘象王。如有真正學人、便喝先拈 +出一箇膠盆子。善知識不辨是境、便上他境 +上、作模作樣。學人便喝。前人不肯放。此是膏 +肓之病、不堪醫。喚作客看主。或是善知識不 +拈出物、隨學人問處即奪。學人被奪、抵死不 +放。此是主看客。或有學人、應一箇清淨境、出 +善知識前。善知識辨得是境、把得拋向坑A。 +學人言、大好善知識。即云、咄哉、不識好惡。學 +人便禮拜。此喚作主看主。或有學人、披枷帶 +鎖、出善知識前。善知識更與安一重枷鎖。學 +人歡喜、彼此不辨。呼為客看客。大德、山僧如 +是所舉、皆是辨魔揀異、知其邪正。道流、寔 +情大難、佛法幽玄、解得可可地。山僧竟日與 +他說破、學者總不在意。千遍萬遍、腳底踏過、 +黑沒焌地、無一箇形段、歷歷孤明。學人信不 +及、便向名句上生解。年登半百、祇管傍家負 +死屍行、檐卻檐子天下走。索草鞋錢有日在。 +大德、山僧說向外無法、學人不會、便即向A +作解、便即倚壁坐、舌拄上齶、湛然不動、取此 +為是祖門佛法也。大錯。是爾若取不動清淨 +境為是、爾即認他無明為郎主。古人云、湛湛 +黑暗深坑、寔可怖畏。此之是也。爾若認他動 +者是、一切草木皆解動、應可是道也。所以動 +者是風大、不動者是地大。動與不動、俱無自 +性。爾若向動處捉他、他向不動處立。爾若向 +不動處捉他、他向動處立。譬如潛泉魚、鼓波 +而自躍。大德、動與不動、是二種境。還是無依 +道人、用動用不動。如諸方學人來、山僧此間、 +作三種根器斷。如中下根器來、我便奪其境、 +而不除其法。或中上根器來、我便境法俱奪。 +如上上根器來、我便境法人俱不奪。如有出 +格見解人來、山僧此間、便全體作用、不歷根 +器。大德、到這A、學人著力處不通風、石火電 +光即過了也。學人若眼定動、即沒交涉。擬心 +即差、動念即乖。有人解者、不離目前。大德、爾 +檐CB屎檐子、傍家走求佛求法。即今與麼 +馳求底、爾還識渠麼。活撥撥地、祇是勿根 +株。擁不聚、撥不散。求著即轉遠、不求還在目 +前、靈音屬耳。若人不信、徒勞百年。道流、一 +剎那間、便入華藏世界、入毘盧遮那國土、入 +解脫國土、入神通國土、入清淨國土、入法界、 +入穢入淨、入凡入聖、入餓鬼畜生、處處討覓 +尋、皆不見有生有死、唯有空名。幻化空花、不 +勞把捉、得失是非、一時放卻。道流、山僧佛法、 +的的相承、從麻谷和尚、丹霞和尚、道一和尚、 +盧山拽石頭和尚、一路行遍天下。無人信得、 +盡皆起謗。如道一和尚用處、純一無雜、學人 +三百五百、盡皆不見他意。如盧山和尚、自在 +真正、順逆用處、學人不測涯際、悉皆忙然。 +如丹霞和尚、翫珠隱顯、學人來者、皆悉被罵。 +如麻谷用處、苦如黃蘗、近皆不得。如石鞏用 +處、向箭頭上覓人、來者皆懼。如山僧今日用 +處、真正成壞、翫弄神變、入一切境、隨處無事、 +境不能換。但有來求者、我即便出看渠。渠不 +識我、我便著數般衣、學人生解、一向入我言 +句。苦哉、瞎禿子無眼人、把我著底衣、認青黃 +赤白。我脫卻入清淨境中、學人一見、便生忻 +欲。我又脫卻、學人失心、忙然狂走、言我無 +衣。我即向渠道、爾識我著衣底人否。忽爾回 +頭、認我了也。大德、爾莫認衣。衣不能動、人 +能著衣。有箇清淨衣、有箇無生衣、菩提衣、涅 +槃衣、有祖衣、有佛衣。大德、但有聲名文句、 +皆悉是衣變。從臍輪氣海中鼓激、牙齒敲磕、 +成其句義。明知是幻化。大德、外發聲語業、內 +表心所法。以思有念、皆悉是衣。爾祇麼認他 +著底衣為寔解。縱經塵劫、祇是衣通。三界循 +還、輪回生死。不如無事。相逢不相識、共語不 +知名。今時學人不得、蓋為認名字為解。大策 +子上、抄死老漢語、三重五重複子裹、不教人 +見、道是玄旨、以為保重。大錯。瞎屢生、爾向 +枯骨上、覓什麼汁。有一般不識好惡、向教中 +取意度商量、成於句義。如把屎塊子、向口A +含了、吐過與別人。猶如俗人打傳口令相似、 +一生虛過。也道我出家、被他問著佛法、便即 +杜口無詞、眼似漆突、口如楄檐。如此之類、逢 +彌勒出世、移置他方世界、寄地獄受苦。大德、 +爾波波地往諸方、覓什麼物、踏爾腳板闊。無 +佛可求、無道可成、無法可得。外求有相佛、與 +汝不相似。欲識汝本心、非合亦非離。道流、真 +佛無形、真道無體、真法無相。三法混融、和合 +一處。辨既不得、喚作忙忙業識眾生。 +問、如何是真佛真法真道、乞垂開示。師云、佛 +者心清淨是。法者心光明是。道者處處無礙 +淨光是。三即一、皆是空名、而無寔有。如真正 +學道人、念念心不間斷。自達磨大師從西土 +來、祇是覓箇不受人惑底人。後遇二祖、一言 +便了、始知從前虛用功夫。山僧今日見處、與 +祖佛不別。若第一句中得、與祖佛為師。若第 +二句中得、與人天為師。若第三句中得、自救 +不了。 +問、如何是西來意。師云、若有意、自救不了。云、 +既無意、云何二祖得法。師云、得者是不得。云、 +既若不得、云何是不得底意。師云、為爾向一 +切處馳求心不能歇。所以祖師言、咄哉丈夫、 +將頭覓頭。爾言下便自回光返照、更不別求、 +知身心與祖佛不別、當下無事、方名得法。大 +德、山僧今時、事不獲已、話度說出許多不才 +淨。爾且莫錯。據我見處、寔無許多般道理。要 +用便用、不用便休。祇如諸方說六度萬行、以 +為佛法、我道、是莊嚴門佛事門、非是佛法。乃 +至持齋持戒、擎油不A、道眼不明、盡須抵債、 +索飯錢有日在。何故如此。入道不通理、復身 +還信施。長者八十一、其樹不生耳。乃至孤峰 +獨宿、一食卯齋、長坐不臥、六時行道、皆是造 +業底人。乃至頭目髓腦、國城妻子、象馬七珍、盡 +皆捨施、如是等見、皆是苦身心故、還招苦果。 +不如無事、純一無雜。乃至十地滿心菩薩、皆 +求此道流蹤跡、了不可得。所以諸天歡喜、地 +神捧足、十方諸佛、無不稱歎。緣何如此。為今 +聽法道人、用處無蹤跡。 +問、大通智勝佛、十劫坐道場、佛法不現前、不 +得成佛道。未審此意如何。乞師指示。師云、 +大通者、是自己於處處、達其萬法無性無相、 +名為大通。智勝者、於一切處不疑、不得一法、 +名為智勝。佛者心清淨、光明透徹法界、得名 +為佛。十劫坐道場者、十波羅蜜是。佛法不現 +前者、佛本不生、法本不滅、云何更有現前。不 +得成佛道者、佛不應更作佛。古人云、佛常在 +世間、而不染世間法。道流、爾欲得作佛、莫隨 +萬物。心生種種法生、心滅種種法滅。一心不 +生、萬法無咎。世與出世、無佛無法、亦不現前、 +亦不曾失。設有者、皆是名言章句、接引小兒、 +施設藥病、表顯名句。且名句不自名句、還是 +爾目前昭昭靈靈、鑒覺聞知照燭底、安一切 +名句。大德、造五無間業、方得解脫。 +問、如何是五無間業。師云、殺父害母、出佛身 +血、破和合僧、焚燒經像等、此是五無間業。云、 +如何是父。師云、無明是父。爾一念心、求起滅 +處不得、如響應空、隨處無事、名為殺父。云、如 +何是母。師云、貪愛為母。爾一念心、入欲界中、 +求其貪愛、唯見諸法空相、處處無著、名為害 +母。云、如何是出佛身血。師云、爾向清淨法界 +中、無一念心生解、便處處黑暗、是出佛身血。 +云、如何是破和合僧。師云、爾一念心、正達煩 +惱結使、如空無所依、是破和合僧。云、如何是 +焚燒經像。師云、見因緣空、心空、法空、一念決 +定斷、迥然無事、便是焚燒經像。大德、若如是 +達得、免被他凡聖名礙。爾一念心、祇向空拳 +指上生寔解、根境法中虛捏怪。自輕而退屈 +言、我是凡夫、他是聖人。禿屢生、有甚死急、披 +他師子皮、卻作野干鳴。大丈夫漢、不作丈夫 +氣息、自家屋A物不肯信、祇麼向外覓、上他 +古人閑名句、倚陰博陽、不能特達。逢境便緣、 +逢塵便執、觸處惑起、自無准定。道流、莫取山 +僧說處。何故。說無憑據、一期間圖畫虛空、如 +彩畫像等喻。道流、莫將佛為究竟。我見猶如 +廁孔、菩薩羅漢、盡是枷鎖、縛人底物。所以文 +殊仗劍、殺於瞿曇、鴦掘持刀、害於釋氏。道流、 +無佛可得。乃至三乘五性、圓頓教跡、皆是一 +期藥病相治、並無實法。設有、皆是相似、表顯 +路布、文字差排、且如是說。道流、有一般禿子、 +便向A許著功、擬求出世之法。錯了也。若人 +求佛、是人失佛。若人求道、是人失道。若人求 +祖、是人失祖。大德、莫錯。我且不取爾解經論、 +我亦不取爾國王大臣、我亦不取爾辯似懸 +河、我亦不取爾聰明智慧、唯要爾真正見解。 +道流、設解得百本經論、不如一箇無事底阿 +師。爾解得、即輕蔑他人。勝負修羅、人我無 +明、長地獄業。如善星比丘、解十二分教、生身 +陷地獄、大地不容。不如無事休歇去。飢來喫 +飯、睡來合眼。愚人笑我、智乃知焉。道流、莫 +向文字中求。心動疲勞、吸冷氣無益。不如一 +念緣起無生、超出三乘權學菩薩。大德、莫因 +循過日。山僧往日、未有見處時、黑漫漫地。光 +陰不可空過、腹熱心忙、奔波訪道。後還得力、 +始到今日、共道流如是話度。勸諸道流、莫為 +衣食。看世界易過、善知識難遇。如優曇花時 +一現耳。爾諸方聞道有箇臨濟老漢、出來便 +擬問難、教語不得。被山僧全體作用、學人空 +開得眼、口總動不得。懵然不知以何答我。我 +向伊道、龍象蹴踏、非驢所堪。爾諸處祇指胸 +點肋、道我解禪解道、三箇兩箇、到這A不奈 +何。咄哉、爾將這箇身心、到處簸兩片皮、誑謼 +閭閻。喫鐵棒有日在。非出家兒、盡向阿修羅 +界攝。夫如至理之道、非諍論而求激揚、鏗鏘 +以摧外道。至於佛祖相承、更無別意。設有言 +教、落在化儀三乘五性、人天因果。如圓頓之 +教、又且不然。童子善財、皆不求過。大德、莫錯 +用心。如大海不停死屍。祇麼擔卻、擬天下走。 +自起見障、以礙於心。日上無雲、麗天普照。眼 +中無翳、空A無花。道流、爾欲得如法、但莫 +生疑。展則彌綸法界、收則絲髮不立。歷歷孤 +明、未曾欠少。眼不見、耳不聞、喚作什麼物。古 +人云、說似一物則不中。爾但自家看。更有什 +麼。說亦無盡、各自著力。珍重。 +勘辨。 +黃蘗、因入廚次、問飯頭、作什麼。飯頭云、揀眾 +僧米。黃蘗云、一日喫多少。飯頭云、二石五。 +黃蘗云、莫太多麼。飯頭云、猶恐少在。黃檗便 +打。飯頭卻舉似師。師云、我為汝勘這老漢。纔 +到侍立次、黃蘗舉前話。師云、飯頭不會、請和 +尚代一轉語。師便問、莫太多麼。黃檗云、何不 +道、來日更喫一頓。師云、說什麼來日、即今便 +喫。道了便掌。黃蘗云、這風顛漢、又來這A捋 +虎鬚。師便喝出去。後溈山問仰山、此二尊宿、 +意作麼生。仰山云、和尚作麼生。溈山云、養子 +方知父慈。仰山云、不然。溈山云、子又作麼生。 +仰山云、大似勾賊破家。 +師問僧、什麼處來。僧便喝。師便揖坐。僧擬議。 +師便打。師見僧來、便豎起拂子。僧禮拜。師便 +打。又見僧來、亦豎起拂子。僧不顧。師亦打。 +師、一日同普化、赴施主家齋次、師問、毛吞巨 +海、芥納須彌。為是神通妙用、本體如然。普化 +踏倒飯床。師云、太H生。普化云、這A是什麼 +所在、說H說細。師來日、又同普化赴齋。問、今 +日供養、何似昨日。普化依前踏倒飯床。師云、 +得即得、太H生。普化云、瞎漢、佛法說什麼 +H細。師乃吐舌。 +師一日、與河陽木塔長老、同在僧堂地爐內 +坐。因說、普化每日在街市、掣風掣顛。知他是 +凡是聖。言猶未了、普化入來。師便問、汝是凡 +是聖。普化云、汝且道、我是凡是聖。師便喝。 +普化以手指云、河陽新婦子、木塔老婆禪。臨 +濟小廝兒、卻具一隻眼。師云、這賊。普化云賊 +賊、便出去。 +一日、普化在僧堂前、喫生菜。師見云、大似一 +頭驢。普化便作驢鳴。師云、這賊。普化云賊賊、 +便出去。 +因普化、常於街市搖鈴云、明頭來、明頭打、暗 +頭來、暗頭打、四方八面來、旋風打、虛空來、連架 +打。師令侍者去、纔見如是道、便把住云、總不 +與麼來時如何。普化托開云、來日大悲院A +有齋。侍者回、舉似師。師云、我從來疑著這漢。 +有一老宿參師、未曾人事、便問、禮拜即是、不 +禮拜即是。師便喝。老宿便禮拜。師云、好箇草 +賊。老宿云賊賊、便出去。師云、莫道無事好。 +首座侍立次、師云、還有過也無。首座云、有。師 +云、賓家有過、主家有過。首座云、二俱有過。 +師云、過在什麼處。首座便出去。師云、莫道無 +事好。後有僧舉似南泉。南泉云、官馬相踏。 +師因入軍營赴齋、門首見員僚。師指露柱問、 +是凡是聖。員僚無語。師打露柱云、直饒道得、 +也祇是箇木橛。便入去。 +師問院主、什麼處來。主云、州中糶黃米去來。 +師云、糶得盡麼。主云、糶得盡。師以杖面前畫 +一畫云、還糶得這箇麼。主便喝。師便打。典 +座至。師舉前語。典座云、院主不會和尚意。師 +云、爾作麼生。典座便禮拜。師亦打。有座主來 +相看次、師問、座主講何經說。主云、某甲荒 +虛、粗習百法論。師云、有一人、於三乘十二分 +教明得。有一人、於三乘十二分教明不得。是 +同是別。主云、明得即同、明不得即別。樂普為 +侍者、在師後立云、座主、這A是什麼所在、說 +同說別。師回首問侍者、汝又作麼生。侍者便 +喝。師送座主回來、遂問侍者、適來是汝喝老 +僧。侍者云、是。師便打。 +師聞第二代德山垂示云、道得也三十棒、道 +不得也三十棒、師令樂普去問、道得為什麼 +也三十棒、待伊打汝、接住棒送一送、看他作 +麼生。普到彼、如教而問。德山便打。普接住送 +一送。德山便歸方丈。普回舉似師。師云、我從 +來疑著這漢。雖然如是、汝還見德山麼。普擬 +議。師便打。 +王常侍、一日訪師。同師於僧堂前看、乃問、這 +一堂僧、還看經麼。師云、不看經。侍云、還學禪 +麼。師云、不學禪。侍云、經又不看、禪又不學、 +畢竟作箇什麼。師云、總教伊成佛作祖去。侍 +云、金屑雖貴、落眼成翳。又作麼生。師云、將 +為爾是箇俗漢。 +師問杏山、如何是露地白牛。山云、吽吽。師 +云、啞那。山云、長老作麼生。師云、這畜生。 +師問樂普云、從上來、一人行棒、一人行喝。阿 +那箇親。普云、總不親。師云、親處作麼生。普 +便喝。師乃打。 +師見僧來、展開兩手。僧無語。師云、會麼。云、不 +會。師云、渾崙擘不開、與爾兩文錢。 +大覺到參。師舉起拂子。大覺敷坐具。師擲下 +拂子。大覺收坐具、入僧堂。眾僧云、這僧莫是 +和尚親故、不禮拜、又不喫棒。師聞、令喚覺。覺 +出。師云、大眾道、汝未參長老。覺云不審、便 +自歸眾。 +趙州行腳時參師。遇師洗腳次、州便問、如何 +是祖師西來意。師云、恰值老僧洗腳。州近前、 +作聽勢。師云、更要第二杓惡水潑在。州便下 +去。 +有定上座、到參問、如何是佛法大意。師下繩 +床、擒住與一掌、便托開。定佇立。傍僧云、定 +上座、何不禮拜。定方禮拜、忽然大悟。 +麻谷到參。敷坐具問、十二面觀音、阿那面 +正。師下繩床、一手收坐具、一手搊麻谷云、十 +二面觀音、向什麼處去也。麻谷轉身、擬坐繩 +床。師拈拄杖打。麻谷接卻、相捉入方丈。 +師問僧、有時一喝、如金剛王寶劍。有時一喝、 +如踞地金毛師子。有時一喝、如探竿影草。有 +時一喝、不作一喝用。汝作麼生會。僧擬議。 +師便喝。 +504b +師問一尼、善來惡來。尼便喝。師拈棒云、更道 +更道。尼又喝。師便打。 +龍牙問、如何是祖師西來意。師云、與我過禪 +板來。牙便過禪板與師。師接得便打。牙云、打 +即任打、要且無祖師意。牙後到翠微問、如何 +是祖師西來意。微云、與我過蒲團來。牙便過 +蒲團與翠微。翠微接得便打。牙云、打即任打、 +要且無祖師意。牙住院後、有僧入室請益云、 +和尚行腳時、參二尊宿因緣、還肯他也無。牙 +云、肯即深肯、要且無祖師意。 +徑山有五百眾、少人參請。黃檗令師到徑山。 +乃謂師曰、汝到彼作麼生。師云、某甲到彼、自 +有方便。師到徑山、裝腰上法堂、見徑山。徑山 +方舉頭、師便喝。徑山擬開口、師拂袖便行。尋 +有僧問徑山、這僧適來有什麼言句、便喝和 +尚。徑山云、這僧從黃檗會A來。爾要知麼、 +且問取他。徑山五百眾、太半分散。 +普化一日、於街市中、就人乞直裰。人皆與之。 +普化俱不要。師令院主買棺一具。普化歸來。 +師云、我與汝做得箇直裰了也。普化便自擔 +去、繞街市叫云、臨濟與我做直裰了也。我往 +東門遷化去。市人競隨看之。普化云、我今 +日未、來日往南門遷化去。如是三日、人皆 +不信。至第四日、無人隨看。獨出城外、自入棺 +內、倩路行人釘之。即時傳布。市人競往開棺、 +乃見全身脫去。祇聞空中鈴響、隱隱而去。 +行錄。 +師初在黃蘗會下、行業純一。首座乃歎曰、雖 +是後生、與眾有異。遂問、上座在此、多少時。師 +云、三年。首座云、曾參問也無。師云、不曾參 +問。不知問箇什麼。首座云、汝何不去問堂頭 +和尚、如何是佛法的的大意。師便去問。聲未 +絕、黃蘗便打。師下來。首座云、問話作麼生。 +師云、某甲問聲未絕、和尚便打。某甲不會。首 +座云、但更去問。師又去問。黃蘗又打。如是三 +度發問、三度被打。師來白首座云、幸蒙慈悲、 +令某甲問訊和尚。三度發問、三度被打。自恨 +障緣不領深旨。今且辭去。首座云、汝若去時、 +須辭和尚去。師禮拜退。首座先到和尚處云、 +問話底後生、甚是如法。若來辭時、方便接他。 +向後穿鑿成一株大樹、與天下人作廕涼去 +在。師去辭黃蘗。蘗云、不得往別處去。汝向高 +安灘頭大愚處去、必為汝說。師到大愚。大愚 +問、什麼處來。師云、黃蘗處來。大愚云、黃蘗 +有何言句。師云、某甲三度問佛法的的大意、 +三度被打。不知某甲有過無過。大愚云、黃蘗 +與麼老婆、為汝得徹困。更來這A、問有過無 +過。師於言下大悟云、元來黃蘗佛法無多子。 +大愚搊住云、這尿床鬼子、適來道有過無過、 +如今卻道、黃蘗佛法無多子。爾見箇什麼道 +理、速道速道。師於大愚脅下、築三拳。大愚托 +開云、汝師黃蘗、非于我事。師辭大愚、卻回黃 +蘗。黃蘗見來便問、這漢來來去去、有什麼了 +期。師云、祇為老婆心切。便人事了侍立。黃蘗 +問、什麼處去來。師云、昨奉慈旨、令參大愚 +去來。黃蘗云、大愚有何言句。師遂舉前話。黃 +蘗云、作麼生得這漢來、待痛與一頓。師云、說 +什麼待來、即今便喫。隨後便掌。黃蘗云、這風 +顛漢、卻來這A捋虎鬚。師便喝。黃蘗云、侍者、 +引這風顛漢、參堂去。後、溈山舉此話、問仰山、 +臨濟當時、得大愚力、得黃蘗力。仰山云、非但 +騎虎頭、亦解把虎尾。 +師栽松次、黃蘗問、深山A栽許多作什麼。師 +云、一與山門作境致、二與後人作標榜。道了、 +將钁頭打地三下。黃蘗云、雖然如是、子已喫 +吾三十棒了也。師又以钁頭打地三下、作噓 +噓聲。黃蘗云、吾宗到汝、大興於世。後溈山舉 +此語、問仰山、黃蘗當時、祇囑臨濟一人、更有 +人在。仰山云、有。祇是年代深遠、不欲舉似和 +尚。溈山云、雖然如是、吾亦要知。汝但舉看。仰 +山云、一人指南、吳越令行、遇大風即止。〔讖風穴和尚也。〕 +師侍立德山次、山云、今日困。師云、這老漢E +語作什麼。山便打。師掀倒繩床。山便休。 +師普請鋤地次、見黃蘗來、拄钁而立。黃蘗云、 +這漢困那。師云、钁也未舉、困箇什麼。黃蘗便 +打。師接住棒、一送送倒。黃蘗喚維那、維那扶 +起我。維那近前扶云、和尚爭容得這風顛漢 +無禮。黃蘗纔起、便打維那。師钁地云、諸方火 +葬、我這A一時活埋。後溈山問仰山、黃蘗打 +維那、意作麼生。仰山云、正賊走卻、邏蹤人 +喫棒。師一日、在僧堂前坐。見黃蘗來、便閉卻 +目。黃蘗乃作怖勢、便歸方丈。師隨至方丈禮 +謝。首座在黃蘗處侍立。黃蘗云、此僧雖是後 +生、卻知有此事。首座云、老和尚腳跟不點地、 +卻證據箇後生。黃蘗自於口上打一摑。首座 +云、知即得。 +師在堂中睡。黃蘗下來見、以拄杖打板頭一 +下。師舉頭、見是黃蘗、卻睡。黃蘗又打板頭一 +下、卻往上間、見首座坐禪、乃云、下間後生 +卻坐禪、汝這A妄想作什麼。首座云、這老漢 +作什麼。黃蘗打板頭一下、便出去。後、溈山問 +仰山、黃蘗入僧堂、意作麼生。仰山云、兩彩 +一賽。 +一日普請次、師在後行。黃蘗回頭、見師空手、 +乃問、钁頭在什麼處。師云、有一人將去了也。 +黃蘗云、近前來、共汝商量箇事。師便近前。黃 +蘗豎起钁頭云、祇這箇、天下人拈掇不起。師 +就手掣得、豎起云、為什麼卻在某甲手A。黃 +蘗云、今日大有人普請。便歸院。後溈山問仰 +山、钁頭在黃蘗手A、為什麼卻被臨濟奪卻。 +仰山云、賊是小人、智過君子。 +師為黃蘗馳書去溈山。時仰山作知客。接得 +書、便問、這箇是黃蘗底、那箇是專使底。師便 +掌。仰山約住云、老兄知是般事、便休。同去見 +溈山。溈山便問、黃蘗師兄多少眾。師云、七百 +眾。溈山云、什麼人為導首。師云、適來已達書 +了也。師卻問溈山、和尚此間多少眾。溈山云、 +一千五百眾。師云、太多生。溈山云、黃蘗師兄 +亦不少。師辭溈山。仰山送出云、汝向後北去、 +有箇住處。師云、豈有與麼事。仰山云、但去、已 +後有一人佐輔老兄在。此人祇是有頭無尾、 +有始無終。師後到鎮州、普化已在彼中。師出 +世、普化佐贊於師。師住未久、普化全身脫去。 +師因半夏上黃蘗、見和尚看經。師云、我將謂 +是箇人、元來是唵黑豆老和尚。住數日、乃辭 +去。黃蘗云、汝破夏來、不終夏去。師云、某甲 +暫來禮拜和尚。黃蘗遂打、趁令去。師行數里、 +疑此事、卻回終夏。師一日、辭黃蘗。蘗問、什麼 +處去。師云、不是河南、便歸河北。黃蘗便打。師 +約住與一掌。黃蘗大笑、乃喚侍者、將百丈先 +師禪板机案來。師云、侍者、將火來。黃蘗云、雖 +然如是、汝但將去。已後坐卻天下人舌頭去 +在。後溈山問仰山、臨濟莫辜負他黃蘗也無。 +仰山云、不然。溈山云、子又作麼生。仰山云、 +知恩方解報恩。溈山云、從上古人、還有相似 +506a +底也無。仰山云、有。祇是年代深遠、不欲舉似 +和尚。溈山云、雖然如是、吾亦要知。子但舉 +看。仰山云、祇如楞嚴會上、阿難讚佛云、將此 +深心奉塵剎、是則名為報佛恩。豈不是報恩 +之事。溈山云、如是如是。見與師齊、減師半德。 +見過於師、方堪傳授。 +師到達磨塔頭。塔主云、長老、先禮佛、先禮祖。 +師云、佛祖俱不禮。塔主云、佛祖與長老是什 +麼冤家。師便拂袖而出。 +師行腳時、到龍光。光上堂。師出問云、不展鋒 +鋩、如何得勝。光據坐。師云、大善知識、豈無方 +便。光瞪目云、嗄。師以手指云、這老漢、今日敗 +闕也。 +到三峰。平和尚問曰、什麼處來。師云、黃蘗來。 +平云、黃蘗有何言句。師云、金牛昨夜遭塗炭、 +直至如今不見蹤。平云、金風吹玉管、那箇是 +知音。師云、直透萬重關、不住清霄內。平云、 +子這一問太高生。師云、龍生金鳳子、衝破碧 +琉璃。平云、且坐喫茶。又問、近離甚處。師云、 +龍光。平云、龍光近日如何。師便出去。 +到大慈。慈在方丈內坐。師問、端居丈室時如 +何。慈云、寒松一色千年別、野老拈花萬國春。 +師云、今古永超圓智體、三山鎖斷萬重關。慈 +便喝。師亦喝。慈云、作麼。師拂袖便出。 +到襄州華嚴。嚴倚拄杖、作睡勢。師云、老和尚 +瞌睡作麼。嚴云、作家禪客、宛爾不同。師云、侍 +者、點茶來、與和尚喫。嚴乃喚維那、第三位安 +排這上座。 +到翠峰。峰問、甚處來。師云、黃蘗來。峰云、黃 +蘗有何言句、指示於人。師云、黃蘗無言句。峰 +云、為什麼無。師云、設有、亦無舉處。峰云、但 +舉看。師云、一箭過西天。 +到象田。師問、不凡不聖、請師速道。田云、老 +僧祇與麼。師便喝云、許多禿子、在這A覓什 +麼D。 +到明化。化問、來來去去作什麼。師云、祇徒 +踏破草鞋。化云、畢竟作麼生。師云、老漢話頭 +也不識。 +往鳳林。路逢一婆。婆問、甚處去。師云、鳳林 +去。婆云、恰值鳳林不在。師云、甚處去。婆便 +行。師乃喚婆。婆回頭。師便打。 +到鳳林。林問、有事相借問、得麼。師云、何得 +剜肉作瘡。林云、海月澄無影、遊魚獨自迷。師 +云、海月既無影、遊魚何得迷。鳳林云、觀風 +知浪起、翫水野帆飄。師云、孤輪獨照江山靜、 +自笑一聲天地驚。林云、任將三寸輝天地、一 +句臨機試道看。師云、路逢劍客須呈劍、不是 +詩人莫獻詩。鳳林便休。師乃有頌、大道絕同、 +任向西東、石火莫及、電光罔通。溈山問仰山、 +石火莫及、電光罔通。從上諸聖、將什麼為人。 +仰山云、和尚意作麼生。溈山云、但有言說、都 +無寔義。仰山云、不然。溈山云、子又作麼生。 +仰山云、官不容針、私通車馬。 +到金牛。牛見師來、橫按拄杖、當門踞坐。師以 +手敲拄杖三下、卻歸堂中第一位坐。牛下來 +見、乃問、夫賓主相見、各具威儀。上座從何而 +來、太無禮生。師云、老和尚道什麼。牛擬開 +口。師便打。牛作倒勢。師又打。牛云、今日不 +著便。溈山問仰山、此二尊宿、還有勝負也無。 +仰山云、勝即總勝、負即總負。 +師臨遷化時、據坐云、吾滅後、不得滅卻吾正 +法眼藏。三聖出云、爭敢滅卻和尚正法眼藏。 +師云、已後有人問爾、向他道什麼。三聖便喝。 +師云、誰知吾正法眼藏、向這瞎驢邊滅卻。言 +F、端然示寂。 +師諱義玄、曹州南華人也。俗姓邢氏。幼而 +穎異、長以孝聞。及落髮受具、居於講肆、精究 +毘尼、博賾經論。俄而歎曰、此濟世之醫方也、 +非教外別傳之旨。即更衣游方、首參黃蘗、次 +謁大愚。其機緣語句、載于行錄。既受黃蘗印 +可、尋抵河北。鎮州城東南隅、臨滹沱河側、小 +院住持。其臨濟因地得名。時普化先在彼、佯 +狂混眾、聖凡莫測。師至即佐之。師正旺化、普 +化全身脫去。乃符仰山小釋迦之懸記也。適 +丁兵革、師即棄去。太尉默君和、於城中捨宅 +為寺、亦以臨濟為額、迎師居焉。後拂衣南邁、 +至河府。府主王常侍、延以師禮。住未幾、即來 +大名府興化寺、居于東堂。師無疾、忽一日攝 +衣據坐、與三聖問答畢、寂然而逝。時唐咸通 +八年丁亥、孟陬月十日也。門人以師全身、建 +塔于大名府西北隅。G謚慧照禪師、塔號澄 +靈。合掌稽首、記師大略。住鎮州保壽嗣法小 +師廷沼謹書。 +鎮州臨濟慧照禪師語錄終。 +住大名府興化嗣法小師存獎校勘。 永享九年八月十五日板在法性寺東經所。 \ No newline at end of file diff --git a/icuSources/extra/uconv/samples/utf8/many.txt b/icuSources/extra/uconv/samples/utf8/many.txt index 1422407b..73088242 100644 --- a/icuSources/extra/uconv/samples/utf8/many.txt +++ b/icuSources/extra/uconv/samples/utf8/many.txt @@ -1,18 +1,18 @@ -外国語の勉強と教え -Изучение и обучение иностранных языков -語文教學・语文教学 -Enseñanza y estudio de idiomas -Изучаване и Преподаване на Чужди Езипи -ქართული ენის შესწავლა და სწავლება -'læŋɡwidʒ 'lɘr:niŋ ænd 'ti:ʃiŋ -Lus kawm thaib qhia -Ngôn Ngữ, Sá»± học, -‭‫ללמוד וללמד את השֵפה -L'enseignement et l'étude des langues -㜊㞕㧍㒟㦮 㐀㛲㭘㒟 -Nauka języków obcych -Γλωσσική Εκμὰθηση και Διδασκαλία -‭‫ﺗﺪﺭﯾﺲ ï»­ ﯾﺎﺩﮔﯿﺮﯼ ﺯﺑﺎﻥ -Sprachlernen und -lehren -‭‫ﺗﻌﻠ‫ُّ‪‫ﻢ ﻭﺗﺪﺭﻳﺲ ﺍﻟﻌﺮﺑﻴﺔ -เรียนและสอนภาษา +外国語の勉強と教え +Изучение и обучение иностранных языков +語文教學・语文教学 +Enseñanza y estudio de idiomas +Изучаване и Преподаване на Чужди Езипи +ქართული ენის შესწავლა და სწავლება +'læŋɡwidʒ 'lɘr:niŋ ænd 'ti:ʃiŋ +Lus kawm thaib qhia +Ngôn Ngữ, Sá»± học, +‭‫ללמוד וללמד את השֵפה +L'enseignement et l'étude des langues +㜊㞕㧍㒟㦮 㐀㛲㭘㒟 +Nauka języków obcych +Γλωσσική Εκμὰθηση και Διδασκαλία +‭‫ﺗﺪﺭﯾﺲ ï»­ ﯾﺎﺩﮔﯿﺮﯼ ﺯﺑﺎﻥ +Sprachlernen und -lehren +‭‫ﺗﻌﻠ‫ُّ‪‫ﻢ ﻭﺗﺪﺭﻳﺲ ﺍﻟﻌﺮﺑﻴﺔ +เรียนและสอนภาษา diff --git a/icuSources/extra/uconv/samples/utf8/maopoem.txt b/icuSources/extra/uconv/samples/utf8/maopoem.txt index d953b53e..61aeead1 100644 --- a/icuSources/extra/uconv/samples/utf8/maopoem.txt +++ b/icuSources/extra/uconv/samples/utf8/maopoem.txt @@ -1,23 +1,23 @@ -和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年 - 和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年. - - 久有归天愿 - 终过鬼门关 - 千里来寻归宿 - 春华变苍颜 - 到处群魔乱舞 - 更有妖雾盘绕 - 暗道入阴间 - 过了阎王殿 - 险处不须看 - - 风雷动 - 旌旗奋 - 忆人寰 - 八十三年过去 - 弹指一挥间 - 中原千军逐蒋 - 城楼万众检阅 - 褒贬满载还 - 世上无难事 - 只怕我癫痫 +和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年 + 和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年. + + 久有归天愿 + 终过鬼门关 + 千里来寻归宿 + 春华变苍颜 + 到处群魔乱舞 + 更有妖雾盘绕 + 暗道入阴间 + 过了阎王殿 + 险处不须看 + + 风雷动 + 旌旗奋 + 忆人寰 + 八十三年过去 + 弹指一挥间 + 中原千军逐蒋 + 城楼万众检阅 + 褒贬满载还 + 世上无难事 + 只怕我癫痫 diff --git a/icuSources/extra/uconv/samples/utf8/russian.txt b/icuSources/extra/uconv/samples/utf8/russian.txt index 9ed63153..53ca1264 100644 --- a/icuSources/extra/uconv/samples/utf8/russian.txt +++ b/icuSources/extra/uconv/samples/utf8/russian.txt @@ -1,6 +1,6 @@ -Американские суда находятся в международных водах. Япония -выразила серьезное беспокойство советскими действиями. -Пентагон беспокойства не проявил. США проводят подобное слеже- -ние за советскими судами в Карибском море. Правда, количество -советских самолетов вызвало некоторое удивление.. - +Американские суда находятся в международных водах. Япония +выразила серьезное беспокойство советскими действиями. +Пентагон беспокойства не проявил. США проводят подобное слеже- +ние за советскими судами в Карибском море. Правда, количество +советских самолетов вызвало некоторое удивление.. + diff --git a/icuSources/extra/uconv/samples/utf8/simplechinese.txt b/icuSources/extra/uconv/samples/utf8/simplechinese.txt index 931d4a8f..70f7f6e4 100644 --- a/icuSources/extra/uconv/samples/utf8/simplechinese.txt +++ b/icuSources/extra/uconv/samples/utf8/simplechinese.txt @@ -1,14 +1,14 @@ -简介 - - CALIS 是一个专为语文教学而设计的电脑软件。在当今这个电脑时代,"电脑辅助教学"是一个极为教师与学生所喜欢的教学媒体。 - - 因为教学须要注重个别化,每一个学生有其不同的程度,如何有效地针对每一个学生给予不同的反应及立刻的指正,以及最后不同的记分,只有仰赖"电脑"去完成。 CALIS 正是扮演了这个角色。不仅减轻了老师的负担与时间,更能兼顾到每一个学生之需要。除此之外,CALIS 提供了生动的学习环境,所以更能激发学生的学习兴趣与动机。 - - WinCALIS 是 CALIS 的延伸,涵盖了更多的功能。比如:运用视窗 (window) 及滑鼠 (mouse),让教师及学生更为有效地操作;"拼音更正 "(spelling check) 提供适当的暗示,给予学生思考及改正;在编排课程方面,教师只须在显现的各类视窗中,输入所设计的教材內容〔课程內容、问题、解答、或是参考资料〕。电脑立即自动产生 SCRIPTS,教师可以不须具备太多的电脑常识或编写语言 (authoring language) 即可编著课程,让学生使用。 - - - WinCALIS更可以让教师利用激光影碟 (laserdisc)及录像机所产生的生动画面融入教学,让课程更为生动活泼。同时WinCALIS提供了不同语言的键盘输入,用者可以很容易地同时使用多种语言,只需透过滑鼠(mouse)来选择即可从一种语言到另一种语言。 - - 由于 CALIS具备了容易及灵活使用的本质,使得它已经成为 90 年代电脑辅助教学(CAI)的标准。 - - CALIS的第二具备了中文文书处理的功能。它不仅可以编写,也可以印出。您手边的这份文件即是用CALIS 编印出来的。 +简介 + + CALIS 是一个专为语文教学而设计的电脑软件。在当今这个电脑时代,"电脑辅助教学"是一个极为教师与学生所喜欢的教学媒体。 + + 因为教学须要注重个别化,每一个学生有其不同的程度,如何有效地针对每一个学生给予不同的反应及立刻的指正,以及最后不同的记分,只有仰赖"电脑"去完成。 CALIS 正是扮演了这个角色。不仅减轻了老师的负担与时间,更能兼顾到每一个学生之需要。除此之外,CALIS 提供了生动的学习环境,所以更能激发学生的学习兴趣与动机。 + + WinCALIS 是 CALIS 的延伸,涵盖了更多的功能。比如:运用视窗 (window) 及滑鼠 (mouse),让教师及学生更为有效地操作;"拼音更正 "(spelling check) 提供适当的暗示,给予学生思考及改正;在编排课程方面,教师只须在显现的各类视窗中,输入所设计的教材內容〔课程內容、问题、解答、或是参考资料〕。电脑立即自动产生 SCRIPTS,教师可以不须具备太多的电脑常识或编写语言 (authoring language) 即可编著课程,让学生使用。 + + + WinCALIS更可以让教师利用激光影碟 (laserdisc)及录像机所产生的生动画面融入教学,让课程更为生动活泼。同时WinCALIS提供了不同语言的键盘输入,用者可以很容易地同时使用多种语言,只需透过滑鼠(mouse)来选择即可从一种语言到另一种语言。 + + 由于 CALIS具备了容易及灵活使用的本质,使得它已经成为 90 年代电脑辅助教学(CAI)的标准。 + + CALIS的第二具备了中文文书处理的功能。它不仅可以编写,也可以印出。您手边的这份文件即是用CALIS 编印出来的。 diff --git a/icuSources/extra/uconv/samples/utf8/utf-8-demo.txt b/icuSources/extra/uconv/samples/utf8/utf-8-demo.txt index 2eb5dc56..fdc1d1c9 100644 --- a/icuSources/extra/uconv/samples/utf8/utf-8-demo.txt +++ b/icuSources/extra/uconv/samples/utf8/utf-8-demo.txt @@ -1,110 +1,7 @@ -UTF-8 encoded sample plain-text file -‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -Markus Kuhn <mkuhn@acm.org> — 1999-04-14 - - -The ASCII compatible UTF-8 encoding of ISO 10646 and Unicode -plain-text files is defined in RFC 2279 and in ISO 10646-1 Annex R. - - -Using Unicode/UTF-8, you can write in emails and source code things such as - -Mathematics and Sciences: - - ∮ E⋅da = Q, n → ∞, ∑ f(i) = ∏ g(i), ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), - - 2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm - -Linguistics and dictionaries: - - Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ] - -APL: - - ((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈ - -Nicer typography in plain text files: - - ╔════════════════════════════════════╗ - ║ ║ - ║ • “smart quotes” ║ - ║ ║ - ║ • „deutsche Anführungszeichen“ ║ - ║ ╭─────────╮ ║ - ║ • the euro symbol: │ € 14.95 │ ║ - ║ ╰─────────╯ ║ - ╚════════════════════════════════════╝ - -Greek (in Polytonic): - - The Greek anthem: - - Σὲ γνωρίζω ἀπὸ τὴν κόψη - τοῦ σπαθιοῦ τὴν τρομερή, - σὲ γνωρίζω ἀπὸ τὴν ὄψη - ποὺ μὲ βία μετράει τὴ γῆ. - - ᾿Απ᾿ τὰ κόκκαλα βγαλμένη - τῶν ῾Ελλήνων τὰ ἱερά - καὶ σὰν πρῶτα ἀνδρειωμένη - χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά! - - From a speech of Demosthenes in the 4th century BC: - - Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι, - ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς - λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ - τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿ - εἰς τοῦτο προήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ - πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν - οἱ τὰ τοιαῦτα λέγοντες á¼¢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι, - οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν - ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον - τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι - γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν - προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους - σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ - τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ - τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς - τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον. - - Δημοσθένους, Γ´ ᾿Ολυνθιακὸς - -Georgian: - - From a Unicode conference invitation: - - გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო - კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს, - ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს - ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი, - ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება - ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში, - ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში. - -Russian: - - From a Unicode conference invitation: - - Зарегистрируйтесь сейчас на Десятую Международную Конференцию по - Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии. - Конференция соберет широкий круг экспертов по вопросам глобального - Интернета и Unicode, локализации и интернационализации, воплощению и - применению Unicode в различных операционных системах и программных - приложениях, шрифтах, верстке и многоязычных компьютерных системах. - -Greetings in various languages: - - Hello world, Καλημέρα κόσμε - -Box drawing alignment tests: █ - ▉ - ╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳ - ║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳ - ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳ - ╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳ - ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎ - ║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏ - ╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█ - +UTF-8 encoded sample plain-text file +‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +This file is a place-holder. The original file is available from Markus Kuhn's website at http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt. + +Markus says this about copying files that are on his site: + +Please do not copy any of my publications onto your own Internet server for public access without explicit permission. If you want to refer to any of my texts, please use a hyperlink to my original and not a copy. I update some of the texts frequently and I want to prevent the confusion that arises if people read somewhere else obsolete versions that are not under my control. diff --git a/icuSources/extra/uconv/uconv.1.in b/icuSources/extra/uconv/uconv.1.in index 5838aa3d..9cd2e49e 100644 --- a/icuSources/extra/uconv/uconv.1.in +++ b/icuSources/extra/uconv/uconv.1.in @@ -2,11 +2,11 @@ .\" .\" uconv.1: manual page for the uconv utility. .\" -.\" Copyright (C) 2000-2003 IBM, Inc. and others. +.\" Copyright (C) 2000-2005 IBM, Inc. and others. .\" .\" Manual page by Yves Arrouye <yves@realnames.com>. .\" -.TH UCONV 1 "2003-dec-22" "ICU MANPAGE" "ICU @VERSION@ Manual" +.TH UCONV 1 "2005-jul-1" "ICU MANPAGE" "ICU @VERSION@ Manual" .SH NAME .B uconv \- convert data from one encoding to another @@ -431,12 +431,12 @@ inaccurate or unavailable, in which case .BR uconv will report the offset in the output stream at which the error occured. -.SH FILES -.TP 15 -.B @thepkgicudatadir@/@PACKAGE@/@VERSION@/uconvmsg.dat -Compiled resource bundle containing localized messages printed -by -.BR uconv . +.\" .SH FILES +.\" .TP 15 +.\" .B @pkgicudatadir@/@PACKAGE@/@VERSION@/uconvmsg.dat +.\" Compiled resource bundle containing localized messages printed +.\" by +.\" .BR uconv . .SH AUTHORS Jonas Utterstroem .br @@ -444,8 +444,6 @@ Yves Arrouye .SH VERSION @VERSION@ .SH COPYRIGHT -Copyright (C) 2000-2003 IBM, Inc. and others. +Copyright (C) 2000-2005 IBM, Inc. and others. .SH SEE ALSO -.BR convrtrs.txt (5) -.br .BR iconv (1) diff --git a/icuSources/extra/uconv/uconv.cpp b/icuSources/extra/uconv/uconv.cpp index 633bbca3..a743daf0 100644 --- a/icuSources/extra/uconv/uconv.cpp +++ b/icuSources/extra/uconv/uconv.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************/ @@ -8,7 +8,7 @@ /* * uconv(1): an iconv(1)-like converter using ICU. * - * Original code by Jonas Utterström <jonas.utterstrom@vittran.norrnod.se> + * Original code by Jonas Utterström <jonas.utterstrom@vittran.norrnod.se> * contributed in 1999. * * Conversion to the C conversion API and many improvements by @@ -38,10 +38,22 @@ #include "unicode/uwmsg.h" -#if (defined(WIN32) || defined(U_CYGWIN)) && !defined(__STRICT_ANSI__) +#if (defined(U_WINDOWS) || defined(U_CYGWIN)) && !defined(__STRICT_ANSI__) #include <io.h> #include <fcntl.h> +#if defined(U_WINDOWS) #define USE_FILENO_BINARY_MODE 1 +/* Windows likes to rename Unix-like functions */ +#ifndef fileno +#define fileno _fileno +#endif +#ifndef setmode +#define setmode _setmode +#endif +#ifndef O_BINARY +#define O_BINARY _O_BINARY +#endif +#endif #endif #ifdef UCONVMSG_LINK @@ -779,7 +791,7 @@ ConvertFile::convertFile(const char *pname, buf + rd, useOffsets ? fromoffsets : NULL, flush, &err); ulen = (int32_t)(unibufp - unibuf); - u.releaseBuffer(ulen); + u.releaseBuffer(U_SUCCESS(err) ? ulen : 0); // fromSawEndOfBytes indicates that ucnv_toUnicode() is done // converting all of the input bytes. @@ -1143,7 +1155,7 @@ main(int argc, char **argv) // Get and prettify pname. pname = uprv_strrchr(*argv, U_FILE_SEP_CHAR); -#ifdef WIN32 +#ifdef U_WINDOWS if (!pname) { pname = uprv_strrchr(*argv, '/'); } diff --git a/icuSources/extra/uconv/uconv.dsp b/icuSources/extra/uconv/uconv.dsp deleted file mode 100644 index fb1a4121..00000000 --- a/icuSources/extra/uconv/uconv.dsp +++ /dev/null @@ -1,281 +0,0 @@ -# Microsoft Developer Studio Project File - Name="uconv" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=uconv - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "uconv.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "uconv.mak" CFG="uconv - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "uconv - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "uconv - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "uconv - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "uconv - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "uconv - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /I "..\..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "UCONVMSG_LINK" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib uconvmsg.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" /libpath:"Release" -# Begin Custom Build -ProjDir=. -TargetPath=.\Release\uconv.exe -InputPath=.\Release\uconv.exe -InputName=uconv -SOURCE="$(InputPath)" - -"$(ProjDir)\..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "uconv - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "UCONVMSG_LINK" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib uconvmsg.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" /libpath:"Debug" -# Begin Custom Build -ProjDir=. -TargetPath=.\Debug\uconv.exe -InputPath=.\Debug\uconv.exe -InputName=uconv -SOURCE="$(InputPath)" - -"$(ProjDir)\..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "uconv - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /W3 /GX /Zi /O2 /Op /I "..\..\..\include" /I "..\..\common" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "UCONVMSG_LINK" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icuin.lib uconvmsg.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /libpath:"Release" /machine:IA64 -# Begin Custom Build -ProjDir=. -TargetPath=.\Release\uconv.exe -InputPath=.\Release\uconv.exe -InputName=uconv -SOURCE="$(InputPath)" - -"$(ProjDir)\..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "uconv - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /Op /I "..\..\..\include" /I "..\..\common" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "UCONVMSG_LINK" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icuind.lib uconvmsg.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /libpath:"Debug" /machine:IA64 -# Begin Custom Build -ProjDir=. -TargetPath=.\Debug\uconv.exe -InputPath=.\Debug\uconv.exe -InputName=uconv -SOURCE="$(InputPath)" - -"$(ProjDir)\..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "uconv - Win32 Release" -# Name "uconv - Win32 Debug" -# Name "uconv - Win64 Release" -# Name "uconv - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\uconv.cpp -# End Source File -# Begin Source File - -SOURCE=.\uwmsg.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\unicode\uwmsg.h -# End Source File -# End Group -# Begin Group "Resource Bundles" - -# PROP Default_Filter "txt" -# Begin Source File - -SOURCE=.\resources\fr.txt -# End Source File -# Begin Source File - -SOURCE=.\resources\root.txt -# End Source File -# End Group -# Begin Group "Build Scripts" - -# PROP Default_Filter "mak;mk;bat" -# Begin Source File - -SOURCE=.\makedata.mak - -!IF "$(CFG)" == "uconv - Win32 Release" - -# Begin Custom Build -ProjDir=. -InputPath=.\makedata.mak -InputName=makedata - -"Release/uconvmsg.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nmake /nologo /f $(InputName).mak icup=$(ProjDir)\..\..\.. CFG=Release - -# End Custom Build - -!ELSEIF "$(CFG)" == "uconv - Win32 Debug" - -# Begin Custom Build -ProjDir=. -InputPath=.\makedata.mak -InputName=makedata - -"Debug/uconvmsg.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nmake /nologo /f $(InputName).mak icup=$(ProjDir)\..\..\.. CFG=Debug - -# End Custom Build - -!ELSEIF "$(CFG)" == "uconv - Win64 Release" - -# Begin Custom Build -ProjDir=. -InputPath=.\makedata.mak -InputName=makedata - -"Release/uconvmsg.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nmake /nologo /f $(InputName).mak icup=$(ProjDir)\..\..\.. CFG=Release - -# End Custom Build - -!ELSEIF "$(CFG)" == "uconv - Win64 Debug" - -# Begin Custom Build -ProjDir=. -InputPath=.\makedata.mak -InputName=makedata - -"Debug/uconvmsg.lib" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nmake /nologo /f $(InputName).mak icup=$(ProjDir)\..\..\.. CFG=Debug - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\resfiles.mk -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/extra/uconv/uconv.vcproj b/icuSources/extra/uconv/uconv.vcproj index 3e3f07c9..1ef638bc 100644 --- a/icuSources/extra/uconv/uconv.vcproj +++ b/icuSources/extra/uconv/uconv.vcproj @@ -20,13 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\common" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE,UCONVMSG_LINK" + AdditionalIncludeDirectories="..\..\..\include;..\..\common" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;UCONVMSG_LINK" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/uconv.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,11 +84,14 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\common" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE,UCONVMSG_LINK" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;UCONVMSG_LINK" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/uconv.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/i18n/Makefile.in b/icuSources/i18n/Makefile.in index e5b092c5..eba8f2a8 100644 --- a/icuSources/i18n/Makefile.in +++ b/icuSources/i18n/Makefile.in @@ -1,6 +1,6 @@ #****************************************************************************** # -# Copyright (C) 1998-2004, International Business Machines +# Copyright (C) 1998-2006, International Business Machines # Corporation and others. All Rights Reserved. # #****************************************************************************** @@ -15,7 +15,6 @@ top_builddir = .. ## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk --include Makefile.local ## Build directory information subdir = i18n @@ -33,7 +32,7 @@ endif ifneq ($(ENABLE_SHARED),) SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) ifeq ($(ENABLE_SO_VERSION_DATA),1) SO_VERSION_DATA = i18n.res @@ -42,9 +41,9 @@ endif ifeq ($(OS390BATCH),1) BATCH_TARGET = $(BATCH_I18N_TARGET) BATCH_LIBS = $(BATCH_LIBICUUC) -lm -endif # OS390BATCH +endif # OS390BATCH -endif # ENABLE_SHARED +endif # ENABLE_SHARED ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET) @@ -52,36 +51,41 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) -LDFLAGS += $(LDFLAGSICUI18N) -CPPFLAGS += -I$(srcdir) -I$(top_builddir)/common -I$(top_srcdir)/common $(LIBCPPFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common $(LIBCPPFLAGS) DEFS += -DU_I18N_IMPLEMENTATION +LDFLAGS += $(LDFLAGSICUI18N) LIBS = $(LIBICUUC) $(DEFAULT_LIBS) OBJECTS = ucln_in.o \ fmtable.o format.o msgfmt.o umsg.o numfmt.o unum.o decimfmt.o dcfmtsym.o \ -ucurr.o digitlst.o \ +ucurr.o digitlst.o fmtable_cnv.o \ choicfmt.o datefmt.o smpdtfmt.o dtfmtsym.o udat.o \ -nfrs.o nfrule.o nfsubs.o rbnf.o \ +nfrs.o nfrule.o nfsubs.o rbnf.o ucsdet.o \ ucal.o calendar.o gregocal.o timezone.o simpletz.o olsontz.o \ -astro.o buddhcal.o islamcal.o japancal.o gregoimp.o hebrwcal.o chnsecal.o \ -sortkey.o bocsu.o coleitr.o coll.o ucoleitr.o \ -ucol.o ucol_bld.o ucol_cnt.o ucol_elm.o ucol_sit.o ucol_tok.o ucol_wgt.o tblcoll.o \ +astro.o buddhcal.o islamcal.o japancal.o gregoimp.o hebrwcal.o \ +coleitr.o coll.o tblcoll.o sortkey.o bocsu.o ucoleitr.o \ +ucol.o ucol_res.o ucol_bld.o ucol_sit.o ucol_tok.o ucol_wgt.o ucol_cnt.o ucol_elm.o \ strmatch.o usearch.o search.o stsearch.o \ -translit.o utrans.o esctrn.o unesctrn.o \ -funcrepl.o strrepl.o tridpars.o \ +translit.o utrans.o esctrn.o unesctrn.o funcrepl.o strrepl.o tridpars.o \ cpdtrans.o rbt.o rbt_data.o rbt_pars.o rbt_rule.o rbt_set.o \ nultrans.o remtrans.o casetrn.o titletrn.o tolowtrn.o toupptrn.o anytrans.o \ name2uni.o uni2name.o nortrans.o quant.o transreg.o \ -regexcmp.o rematch.o repattrn.o regexst.o uregex.o ulocdata.o \ -measfmt.o currfmt.o curramt.o currunit.o measure.o utmscale.o +regexcmp.o rematch.o repattrn.o regexst.o uregex.o uregexc.o \ +ulocdata.o measfmt.o currfmt.o curramt.o currunit.o measure.o utmscale.o \ +csdetect.o csmatch.o csr2022.o csrecog.o csrmbcs.o csrsbcs.o csrucode.o csrutf8.o inputext.o \ +windtfmt.o winnmfmt.o +## Header files to install +HEADERS = $(srcdir)/unicode/*.h STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) DEPS = $(OBJECTS:.o=.d) -## Header files to install -HEADERS= $(srcdir)/unicode/*.h +-include Makefile.local ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ @@ -101,7 +105,7 @@ check: all check-local all-local: $(ALL_TARGETS) -install-local: install-headers install-library +install-local: install-headers install-library install-library: all-local $(MKINSTALLDIRS) $(DESTDIR)$(libdir) @@ -155,14 +159,14 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) $(SO_VERSION_DATA) +$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) ifeq ($(OS390BATCH),1) $(BATCH_TARGET):$(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS) -endif # OS390BATCH -endif +endif # OS390BATCH +endif # ENABLE_SHARED ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -171,3 +175,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/i18n/anytrans.cpp b/icuSources/i18n/anytrans.cpp index 6c5e9415..bd76fe14 100644 --- a/icuSources/i18n/anytrans.cpp +++ b/icuSources/i18n/anytrans.cpp @@ -1,6 +1,6 @@ /* ***************************************************************** -* Copyright (c) 2002-2004, International Business Machines Corporation +* Copyright (c) 2002-2005, International Business Machines Corporation * and others. All Rights Reserved. ***************************************************************** * Date Name Description @@ -20,6 +20,7 @@ #include "tridpars.h" #include "hash.h" #include "putilimp.h" +#include "uinvchar.h" //------------------------------------------------------------ // Constants @@ -181,7 +182,7 @@ AnyTransliterator::AnyTransliterator(const UnicodeString& id, Transliterator(id, NULL), targetScript(theTargetScript) { - cache = uhash_open(uhash_hashLong, uhash_compareLong, &ec); + cache = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &ec); uhash_setValueDeleter(cache, _deleteTransliterator); target = theTarget; @@ -204,7 +205,7 @@ AnyTransliterator::AnyTransliterator(const AnyTransliterator& o) : { // Don't copy the cache contents UErrorCode ec = U_ZERO_ERROR; - cache = uhash_open(uhash_hashLong, uhash_compareLong, &ec); + cache = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &ec); uhash_setValueDeleter(cache, _deleteTransliterator); } @@ -271,7 +272,7 @@ Transliterator* AnyTransliterator::getTransliterator(UScriptCode source) const { Transliterator* t = (Transliterator*) uhash_iget(cache, (int32_t) source); if (t == NULL) { UErrorCode ec = U_ZERO_ERROR; - UnicodeString sourceName(uscript_getName(source), ""); + UnicodeString sourceName(uscript_getName(source), -1, US_INV); UnicodeString id(sourceName); id.append(TARGET_SEP).append(target); @@ -300,14 +301,19 @@ Transliterator* AnyTransliterator::getTransliterator(UScriptCode source) const { /** * Return the script code for a given name, or -1 if not found. */ -UScriptCode AnyTransliterator::scriptNameToCode(const UnicodeString& name) { +static UScriptCode scriptNameToCode(const UnicodeString& name) { char buf[128]; UScriptCode code; UErrorCode ec = U_ZERO_ERROR; - - name.extract(0, 128, buf, 128, ""); - if (uscript_getCode(buf, &code, 1, &ec) != 1 || - U_FAILURE(ec)) { + int32_t nameLen = name.length(); + UBool isInvariant = uprv_isInvariantUString(name.getBuffer(), nameLen); + + if (isInvariant) { + name.extract(0, nameLen, buf, (int32_t)sizeof(buf), US_INV); + buf[127] = 0; // Make sure that we NULL terminate the string. + } + if (!isInvariant || uscript_getCode(buf, &code, 1, &ec) != 1 || U_FAILURE(ec)) + { code = USCRIPT_INVALID_CODE; } return code; diff --git a/icuSources/i18n/anytrans.h b/icuSources/i18n/anytrans.h index 1212fd30..f37675a8 100644 --- a/icuSources/i18n/anytrans.h +++ b/icuSources/i18n/anytrans.h @@ -1,11 +1,11 @@ /* -***************************************************************** -* Copyright (c) 2002-2004, International Business Machines Corporation +*********************************************************************** +* Copyright (c) 2002-2006, International Business Machines Corporation * and others. All Rights Reserved. -***************************************************************** +*********************************************************************** * Date Name Description * 06/06/2002 aliu Creation. -***************************************************************** +*********************************************************************** */ #ifndef _ANYTRANS_H_ #define _ANYTRANS_H_ @@ -74,15 +74,11 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); @@ -124,12 +120,6 @@ private: static void registerIDs(); friend class Transliterator; // for registerIDs() - - /** - * Return the script code for a given name, or - * USCRIPT_INVALID_CODE if not found. - */ - static UScriptCode scriptNameToCode(const UnicodeString& name); }; U_NAMESPACE_END diff --git a/icuSources/i18n/astro.cpp b/icuSources/i18n/astro.cpp index 16fd0f2e..457176c8 100644 --- a/icuSources/i18n/astro.cpp +++ b/icuSources/i18n/astro.cpp @@ -1,5 +1,5 @@ /************************************************************************ - * Copyright (C) 1996-2004, International Business Machines Corporation * + * Copyright (C) 1996-2006, International Business Machines Corporation * * and others. All Rights Reserved. * ************************************************************************ * 2003-nov-07 srl Port from Java @@ -617,9 +617,9 @@ CalendarAstronomer::Equatorial& CalendarAstronomer::getSunPosition(CalendarAstro * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -double CalendarAstronomer::VERNAL_EQUINOX() { +/*double CalendarAstronomer::VERNAL_EQUINOX() { return 0; -} +}*/ /** * Constant representing the summer solstice. @@ -639,9 +639,9 @@ double CalendarAstronomer::SUMMER_SOLSTICE() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -double CalendarAstronomer::AUTUMN_EQUINOX() { +/*double CalendarAstronomer::AUTUMN_EQUINOX() { return (CalendarAstronomer::PI); -} +}*/ /** * Constant representing the winter solstice. @@ -650,9 +650,11 @@ double CalendarAstronomer::AUTUMN_EQUINOX() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -double CalendarAstronomer::WINTER_SOLSTICE() { +/*double CalendarAstronomer::WINTER_SOLSTICE() { return ((CalendarAstronomer::PI*3)/2); -} +}*/ + +CalendarAstronomer::AngleFunc::~AngleFunc() {} /** * Find the next time at which the sun's ecliptic longitude will have @@ -675,6 +677,8 @@ UDate CalendarAstronomer::getSunTime(double desired, UBool next) next); } +CalendarAstronomer::CoordFunc::~CoordFunc() {} + class RiseSetCoordFunc : public CalendarAstronomer::CoordFunc { public: virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { a.getSunPosition(result); } @@ -1124,9 +1128,9 @@ double CalendarAstronomer::getMoonPhase() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -const CalendarAstronomer::MoonAge CalendarAstronomer::NEW_MOON() { +/*const CalendarAstronomer::MoonAge CalendarAstronomer::NEW_MOON() { return CalendarAstronomer::MoonAge(0); -} +}*/ /** * Constant representing the moon's first quarter. @@ -1134,9 +1138,9 @@ const CalendarAstronomer::MoonAge CalendarAstronomer::NEW_MOON() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -const CalendarAstronomer::MoonAge CalendarAstronomer::FIRST_QUARTER() { +/*const CalendarAstronomer::MoonAge CalendarAstronomer::FIRST_QUARTER() { return CalendarAstronomer::MoonAge(CalendarAstronomer::PI/2); -} +}*/ /** * Constant representing a full moon. @@ -1159,9 +1163,9 @@ public: virtual double eval(CalendarAstronomer&a) { return a.getMoonAge(); } }; -const CalendarAstronomer::MoonAge CalendarAstronomer::LAST_QUARTER() { +/*const CalendarAstronomer::MoonAge CalendarAstronomer::LAST_QUARTER() { return CalendarAstronomer::MoonAge((CalendarAstronomer::PI*3)/2); -} +}*/ /** * Find the next or previous time at which the Moon's ecliptic @@ -1421,7 +1425,7 @@ void CalendarAstronomer::clearCache() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -UDate CalendarAstronomer::local(UDate localMillis) { +/*UDate CalendarAstronomer::local(UDate localMillis) { // TODO - srl ? TimeZone *tz = TimeZone::createDefault(); int32_t rawOffset; @@ -1430,7 +1434,7 @@ UDate CalendarAstronomer::local(UDate localMillis) { tz->getOffset(localMillis, TRUE, rawOffset, dstOffset, status); delete tz; return localMillis - rawOffset; -} +}*/ // Debugging functions UnicodeString CalendarAstronomer::Ecliptic::toString() const @@ -1488,13 +1492,14 @@ UnicodeString CalendarAstronomer::Horizon::toString() const void CalendarCache::createCache(CalendarCache** cache, UErrorCode& status) { ucln_i18n_registerCleanup(UCLN_I18N_ASTRO_CALENDAR, calendar_astro_cleanup); - *cache = new CalendarCache(32, status); if(cache == NULL) { status = U_MEMORY_ALLOCATION_ERROR; - } - if(U_FAILURE(status)) { - delete *cache; - *cache = NULL; + } else { + *cache = new CalendarCache(32, status); + if(U_FAILURE(status)) { + delete *cache; + *cache = NULL; + } } } @@ -1522,7 +1527,6 @@ int32_t CalendarCache::get(CalendarCache** cache, int32_t key, UErrorCode &statu } void CalendarCache::put(CalendarCache** cache, int32_t key, int32_t value, UErrorCode &status) { - if(U_FAILURE(status)) { return; } @@ -1543,7 +1547,7 @@ void CalendarCache::put(CalendarCache** cache, int32_t key, int32_t value, UErro } CalendarCache::CalendarCache(int32_t size, UErrorCode &status) { - fTable = uhash_openSize(uhash_hashLong, uhash_compareLong, size, &status); + fTable = uhash_openSize(uhash_hashLong, uhash_compareLong, NULL, size, &status); U_DEBUG_ASTRO_MSG(("%p: Opening.\n", fTable)); } diff --git a/icuSources/i18n/astro.h b/icuSources/i18n/astro.h index 8291d60e..18e6aa55 100644 --- a/icuSources/i18n/astro.h +++ b/icuSources/i18n/astro.h @@ -1,5 +1,5 @@ /************************************************************************ - * Copyright (C) 1996-2003, International Business Machines Corporation * + * Copyright (C) 1996-2006, International Business Machines Corporation * * and others. All Rights Reserved. * ************************************************************************ * 2003-nov-07 srl Port from Java @@ -497,7 +497,7 @@ public: * Note: In this case, "vernal" refers to the northern hemisphere's seasons. * @internal */ - static double VERNAL_EQUINOX(); +// static double VERNAL_EQUINOX(); /** * Constant representing the summer solstice. @@ -513,7 +513,7 @@ public: * Note: In this case, "autumn" refers to the northern hemisphere's seasons. * @internal */ - static double AUTUMN_EQUINOX(); +// static double AUTUMN_EQUINOX(); /** * Constant representing the winter solstice. @@ -521,7 +521,7 @@ public: * Note: In this case, "winter" refers to the northern hemisphere's seasons. * @internal */ - static double WINTER_SOLSTICE(); +// static double WINTER_SOLSTICE(); /** * Find the next time at which the sun's ecliptic longitude will have @@ -596,14 +596,14 @@ public: * For use with {@link #getMoonTime getMoonTime} * @internal */ - static const MoonAge NEW_MOON(); +// static const MoonAge NEW_MOON(); /** * Constant representing the moon's first quarter. * For use with {@link #getMoonTime getMoonTime} * @internal */ - static const MoonAge FIRST_QUARTER(); +// static const MoonAge FIRST_QUARTER(); /** * Constant representing a full moon. @@ -617,7 +617,7 @@ public: * For use with {@link #getMoonTime getMoonTime} * @internal */ - static const MoonAge LAST_QUARTER(); +// static const MoonAge LAST_QUARTER(); /** * Find the next or previous time at which the Moon's ecliptic @@ -643,18 +643,20 @@ public: //------------------------------------------------------------------------- // private - class U_I18N_API AngleFunc : public UMemory { + class AngleFunc : public UMemory { public: virtual double eval(CalendarAstronomer&) = 0; + virtual ~AngleFunc(); }; friend class AngleFunc; UDate timeOfAngle(AngleFunc& func, double desired, double periodDays, double epsilon, UBool next); - class U_I18N_API CoordFunc : public UMemory { + class CoordFunc : public UMemory { public: virtual void eval(Equatorial& result, CalendarAstronomer&) = 0; + virtual ~CoordFunc(); }; friend class CoordFunc; @@ -757,7 +759,7 @@ private: /** * @internal */ - UDate local(UDate localMillis); +// UDate local(UDate localMillis); }; U_NAMESPACE_END diff --git a/icuSources/i18n/calendar.cpp b/icuSources/i18n/calendar.cpp index caae53b4..3e03525e 100644 --- a/icuSources/i18n/calendar.cpp +++ b/icuSources/i18n/calendar.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -34,10 +34,10 @@ #include "japancal.h" #include "islamcal.h" #include "hebrwcal.h" -#include "chnsecal.h" +//#include "chnsecal.h" #include "unicode/calendar.h" #include "cpputils.h" -#include "iculserv.h" +#include "servloc.h" #include "ucln_in.h" #include "cstring.h" #include "locbased.h" @@ -110,27 +110,86 @@ static const char* fldName(UCalendarDateFields f) { } } + +#if UCAL_DEBUG_DUMP +// from CalendarTest::calToStr - but doesn't modify contents. +void ucal_dump(const Calendar &cal) { + cal.dump(); +} + +void Calendar::dump() const { + int i; + fprintf(stderr, "@calendar=%s, timeset=%c, fieldset=%c, allfields=%c, virtualset=%c, t=%.2f", + getType(), fIsTimeSet?'y':'n', fAreFieldsSet?'y':'n', fAreAllFieldsSet?'y':'n', + fAreFieldsVirtuallySet?'y':'n', + fTime); + + // can add more things here: DST, zone, etc. + fprintf(stderr, "\n"); + for(i = 0;i<UCAL_FIELD_COUNT;i++) { + int n; + const char *f = fldName((UCalendarDateFields)i); + fprintf(stderr, " %25s: %-11ld", f, fFields[i]); + if(fStamp[i] == kUnset) { + fprintf(stderr, " (unset) "); + } else if(fStamp[i] == kInternallySet) { + fprintf(stderr, " (internally set) "); + //} else if(fStamp[i] == kInternalDefault) { + // fprintf(stderr, " (internal default) "); + } else { + fprintf(stderr, " %%%d ", fStamp[i]); + } + fprintf(stderr, "\n"); + + } +} + +U_CFUNC void ucal_dump(UCalendar* cal) { + ucal_dump( *((Calendar*)cal) ); +} #endif -static const char * const gBasicCalendars[] = { "@calendar=gregorian", "@calendar=japanese", - "@calendar=buddhist", "@calendar=islamic-civil", - "@calendar=islamic", "@calendar=hebrew", "@calendar=chinese", - NULL }; +#endif + +static const char * const gCalendarKeywords[] = { + "gregorian", + "japanese", + "buddhist", + "islamic-civil", + "islamic", + "hebrew", + "chinese", + NULL +}; U_NAMESPACE_BEGIN -static UBool isStandardSupportedID( const char *id, UErrorCode& status) { +static UBool isStandardSupportedKeyword(const char *keyword, UErrorCode& status) { if(U_FAILURE(status)) { return FALSE; } - for(int32_t i=0;gBasicCalendars[i] != NULL;i++) { - if(uprv_strcmp(gBasicCalendars[i],id) == 0) { + for(int32_t i=0; gCalendarKeywords[i] != NULL; i++) { + if(uprv_strcmp(gCalendarKeywords[i], keyword) == 0) { return TRUE; } } return FALSE; } +static void getCalendarKeyword(const UnicodeString &id, char *targetBuffer, int32_t targetBufferSize) { + UnicodeString calendarKeyword = UNICODE_STRING_SIMPLE("calendar="); + int32_t calKeyLen = calendarKeyword.length(); + int32_t keyLen = 0; + + int32_t keywordIdx = id.indexOf((UChar)0x003D); /* '=' */ + if (id[0] == 0x40/*'@'*/ + && id.compareBetween(1, keywordIdx+1, calendarKeyword, 0, calKeyLen) == 0) + { + keyLen = id.extract(keywordIdx+1, id.length(), targetBuffer, targetBufferSize, US_INV); + } + targetBuffer[keyLen] = 0; +} + static Calendar *createStandardCalendar(char *calType, const Locale &canLoc, UErrorCode& status) { #ifdef U_DEBUG_CALSVC fprintf(stderr, "BasicCalendarFactory %p: creating type for %s\n", @@ -138,19 +197,19 @@ static Calendar *createStandardCalendar(char *calType, const Locale &canLoc, UEr fflush(stderr); #endif - if(!calType || !*calType || !uprv_strcmp(calType,"@calendar=gregorian")) { // Gregorian (default) + if(!calType || !*calType || !uprv_strcmp(calType,"gregorian")) { // Gregorian (default) return new GregorianCalendar(canLoc, status); - } else if(!uprv_strcmp(calType, "@calendar=japanese")) { + } else if(!uprv_strcmp(calType, "japanese")) { return new JapaneseCalendar(canLoc, status); - } else if(!uprv_strcmp(calType, "@calendar=buddhist")) { + } else if(!uprv_strcmp(calType, "buddhist")) { return new BuddhistCalendar(canLoc, status); - } else if(!uprv_strcmp(calType, "@calendar=islamic-civil")) { + } else if(!uprv_strcmp(calType, "islamic-civil")) { return new IslamicCalendar(canLoc, status, IslamicCalendar::CIVIL); - } else if(!uprv_strcmp(calType, "@calendar=islamic")) { + } else if(!uprv_strcmp(calType, "islamic")) { return new IslamicCalendar(canLoc, status, IslamicCalendar::ASTRONOMICAL); - } else if(!uprv_strcmp(calType, "@calendar=hebrew")) { + } else if(!uprv_strcmp(calType, "hebrew")) { return new HebrewCalendar(canLoc, status); - //} else if(!uprv_strcmp(calType, "@calendar=chinese")) { + //} else if(!uprv_strcmp(calType, "chinese")) { //return new ChineseCalendar(canLoc, status); } else { status = U_UNSUPPORTED_ERROR; @@ -177,24 +236,22 @@ public: virtual ~BasicCalendarFactory() {} protected: - virtual UBool isSupportedID( const UnicodeString& id, UErrorCode& status) const { - if(U_FAILURE(status)) { - return FALSE; - } - for(int32_t i=0;gBasicCalendars[i] != NULL;i++) { - UnicodeString ourId(gBasicCalendars[i],""); - if(ourId == id) { - return TRUE; - } - } - return FALSE; - } + //virtual UBool isSupportedID( const UnicodeString& id, UErrorCode& status) const { + // if(U_FAILURE(status)) { + // return FALSE; + // } + // char keyword[ULOC_FULLNAME_CAPACITY]; + // getCalendarKeyword(id, keyword, (int32_t)sizeof(keyword)); + // return isStandardSupportedKeyword(keyword, status); + //} virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const { if (U_SUCCESS(status)) { - for(int32_t i=0;gBasicCalendars[i] != NULL;i++) { - UnicodeString id(gBasicCalendars[i],""); + for(int32_t i=0;gCalendarKeywords[i] != NULL;i++) { + UnicodeString id((UChar)0x40); /* '@' a variant character */ + id.append(UNICODE_STRING_SIMPLE("calendar=")); + id.append(UnicodeString(gCalendarKeywords[i], -1, US_INV)); result.put(id, (void*)this, status); } } @@ -213,24 +270,17 @@ protected: lkey.currentLocale(curLoc); lkey.canonicalLocale(canLoc); + char keyword[ULOC_FULLNAME_CAPACITY]; UnicodeString str; - key.currentID(str); - char tmp[200]; - // Extract a char* out of it.. - int32_t len = str.length(); - int32_t actLen = sizeof(tmp)-1; - if(len > actLen) { - len = actLen; - } - str.extract(0,len,tmp); - tmp[len]=0; + key.currentID(str); + getCalendarKeyword(str, keyword, (int32_t) sizeof(keyword)); #ifdef U_DEBUG_CALSVC fprintf(stderr, "BasicCalendarFactory::create() - cur %s, can %s\n", (const char*)curLoc.getName(), (const char*)canLoc.getName()); #endif - if(!isStandardSupportedID(tmp,status)) { // Do we handle this type? + if(!isStandardSupportedKeyword(keyword,status)) { // Do we handle this type? #ifdef U_DEBUG_CALSVC fprintf(stderr, "BasicCalendarFactory - not handling %s.[%s]\n", (const char*) curLoc.getName(), tmp ); @@ -238,7 +288,7 @@ protected: return NULL; } - return createStandardCalendar(tmp, canLoc, status); + return createStandardCalendar(keyword, canLoc, status); } }; @@ -438,7 +488,7 @@ static const int32_t kCalendarLimits[UCAL_FIELD_COUNT][4] = { }; // Resource bundle tags read by this class -const char Calendar::kDateTimeElements[] = "DateTimeElements"; +static const char gDateTimeElements[] = "DateTimeElements"; // Data flow in Calendar // --------------------- @@ -635,20 +685,24 @@ Calendar::createInstance(TimeZone* zone, const Locale& aLocale, UErrorCode& succ else #endif { - char calLocaleType[ULOC_FULLNAME_CAPACITY] = {"@calendar="}; - int32_t calLocaleTypeLen = uprv_strlen(calLocaleType); - int32_t keywordCapacity = aLocale.getKeywordValue("calendar", calLocaleType+calLocaleTypeLen, sizeof(calLocaleType)-calLocaleTypeLen-1, success); + UErrorCode feErr; + char calLocaleType[ULOC_FULLNAME_CAPACITY]; + calLocaleType[0] = 0; // NULL terminate + int32_t keywordCapacity = aLocale.getKeywordValue("calendar", calLocaleType, sizeof(calLocaleType)-1, success); if (keywordCapacity == 0) { char funcEquiv[ULOC_FULLNAME_CAPACITY]; + feErr = success; + // fetch default calendar id ures_getFunctionalEquivalent(funcEquiv, sizeof(funcEquiv)-1, NULL, "calendar", "calendar", aLocale.getName(), - NULL, FALSE, &success); - keywordCapacity = uloc_getKeywordValue(funcEquiv, "calendar", calLocaleType+calLocaleTypeLen, - sizeof(calLocaleType)-calLocaleTypeLen-1, &success); - if (keywordCapacity == 0 || U_FAILURE(success)) { + NULL, FALSE, &feErr); + keywordCapacity = uloc_getKeywordValue(funcEquiv, "calendar", calLocaleType, + sizeof(calLocaleType)-1, &feErr); // This can fail if there is no data. + // Don't want to stop calendar construction just because we couldn't get this type. + if (keywordCapacity == 0 || U_FAILURE(feErr)) { // no calendar type. Default to nothing. calLocaleType[0] = 0; } @@ -674,26 +728,14 @@ Calendar::createInstance(TimeZone* zone, const Locale& aLocale, UErrorCode& succ #if !UCONFIG_NO_SERVICE if(u->getDynamicClassID() == UnicodeString::getStaticClassID()) { // It's a unicode string telling us what type of calendar to load ("gregorian", etc) - char tmp[200]; const UnicodeString& str = *(UnicodeString*)u; - // Extract a char* out of it.. - int32_t len = str.length(); - int32_t actLen = sizeof(tmp)-1; - if(len > actLen) { - len = actLen; - } - str.extract(0,len,tmp); - tmp[len]=0; -#ifdef U_DEBUG_CALSVC - fprintf(stderr, "Calendar::createInstance(%s), fetched string %s..\n", (const char*)aLocale.getName(), tmp); -#endif - // Create a Locale over this string - Locale l = Locale::createFromName(tmp); + Locale l(""); + LocaleUtility::initLocaleFromName(str, l); #ifdef U_DEBUG_CALSVC - fprintf(stderr, "looking up [%s].. should be %s\n",l.getName(), tmp); + fprintf(stderr, "Calendar::createInstance(%s), looking up [%s]\n", aLocale.getName(), l.getName()); #endif Locale actualLoc2; @@ -948,6 +990,7 @@ Calendar::clear() fIsSet[i] = FALSE; // Remove later } fIsTimeSet = fAreFieldsSet = fAreAllFieldsSet = fAreFieldsVirtuallySet = FALSE; + // fTime is not 'cleared' - may be used if no fields are set. } // ------------------------------------- @@ -2113,7 +2156,6 @@ Calendar::getActualMinimum(UCalendarDateFields field, UErrorCode& status) const * should only be called if this calendar is not lenient. * @see #isLenient * @see #validateField(int) - * @draft ICU 2.8 */ void Calendar::validateFields(UErrorCode &status) { for (int32_t field = 0; U_SUCCESS(status) && (field < UCAL_FIELD_COUNT); field++) { @@ -2129,7 +2171,6 @@ void Calendar::validateFields(UErrorCode &status) { * Generic fields can be handled by * <code>Calendar.validateField()</code>. * @see #validateField(int, int, int) - * @draft ICU 2.8 */ void Calendar::validateField(UCalendarDateFields field, UErrorCode &status) { int32_t y; @@ -2165,7 +2206,6 @@ void Calendar::validateField(UCalendarDateFields field, UErrorCode &status) { * descriptive <code>IllegalArgumentException</code>. Subclasses may * use this method in their implementation of {@link * #validateField(int)}. - * @draft ICU 2.8 */ void Calendar::validateField(UCalendarDateFields field, int32_t min, int32_t max, UErrorCode& status) { @@ -2437,7 +2477,7 @@ int32_t Calendar::handleComputeJulianDay(UCalendarDateFields bestField) { } #if defined (U_DEBUG_CAL) - fprintf(stderr, "%s:%d - bf= %s - y=%d\n", __FILE__, __LINE__, fldName(bestField), year); + fprintf(stderr, "%s:%d: bestField= %s - y=%d\n", __FILE__, __LINE__, fldName(bestField), year); #endif // Get the Julian day of the day BEFORE the start of this year. @@ -2687,15 +2727,15 @@ int32_t Calendar::handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t w int32_t minDays = getMinimalDaysInFirstWeek(); UBool jan1InPrevYear = FALSE; // January 1st in the year of WOY is the 1st week? (i.e. first week is < minimal ) - UBool nextJan1InPrevYear = FALSE; // January 1st of Year of WOY + 1 is in the first week? + //UBool nextJan1InPrevYear = FALSE; // January 1st of Year of WOY + 1 is in the first week? if((7 - first) < minDays) { jan1InPrevYear = TRUE; } - if((7 - nextFirst) < minDays) { - nextJan1InPrevYear = TRUE; - } +// if((7 - nextFirst) < minDays) { +// nextJan1InPrevYear = TRUE; +// } switch(bestField) { case UCAL_WEEK_OF_YEAR: @@ -2986,7 +3026,7 @@ Calendar::setWeekCountData(const Locale& desiredLocale, const char *type, UError CalendarData calData(desiredLocale, type, status); // If the resource data doesn't seem to be present at all, then use last-resort // hard-coded data. - UResourceBundle *dateTimeElements = calData.getByKey(kDateTimeElements, status); + UResourceBundle *dateTimeElements = calData.getByKey(gDateTimeElements, status); if (U_FAILURE(status)) { diff --git a/icuSources/i18n/casetrn.cpp b/icuSources/i18n/casetrn.cpp index 39469edb..307f80e9 100644 --- a/icuSources/i18n/casetrn.cpp +++ b/icuSources/i18n/casetrn.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -84,15 +84,13 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CaseMapTransliterator) /** * Constructs a transliterator. */ -CaseMapTransliterator::CaseMapTransliterator(const Locale &loc, const UnicodeString &id, UCaseMapFull *map) : +CaseMapTransliterator::CaseMapTransliterator(const UnicodeString &id, UCaseMapFull *map) : Transliterator(id, 0), - fLoc(loc), fLocName(NULL), fCsp(NULL), fMap(map) { UErrorCode errorCode = U_ZERO_ERROR; fCsp = ucase_getSingleton(&errorCode); // expect to get NULL if failure - fLocName=fLoc.getName(); // TODO test incremental mode with context-sensitive text (e.g. greek sigma) // TODO need to call setMaximumContextLength()?! @@ -109,9 +107,8 @@ CaseMapTransliterator::~CaseMapTransliterator() { */ CaseMapTransliterator::CaseMapTransliterator(const CaseMapTransliterator& o) : Transliterator(o), - fLoc(o.fLoc), fLocName(NULL), fCsp(o.fCsp), fMap(o.fMap) + fCsp(o.fCsp), fMap(o.fMap) { - fLocName=fLoc.getName(); } /** @@ -119,8 +116,6 @@ CaseMapTransliterator::CaseMapTransliterator(const CaseMapTransliterator& o) : */ CaseMapTransliterator& CaseMapTransliterator::operator=(const CaseMapTransliterator& o) { Transliterator::operator=(o); - fLoc = o.fLoc; - fLocName = fLoc.getName(); fCsp = o.fCsp; fMap = o.fMap; return *this; @@ -160,12 +155,13 @@ void CaseMapTransliterator::handleTransliterate(Replaceable& text, c=text.char32At(textPos); csc.cpLimit=textPos+=U16_LENGTH(c); - result=fMap(fCsp, c, utrans_rep_caseContextIterator, &csc, &s, fLocName, &locCache); + result=fMap(fCsp, c, utrans_rep_caseContextIterator, &csc, &s, "", &locCache); if(csc.b1 && isIncremental) { // fMap() tried to look beyond the context limit // wait for more input - break; + offsets.start=csc.cpStart; + return; } if(result>=0) { diff --git a/icuSources/i18n/casetrn.h b/icuSources/i18n/casetrn.h index cf3e0f95..747fa1b5 100644 --- a/icuSources/i18n/casetrn.h +++ b/icuSources/i18n/casetrn.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -24,7 +24,6 @@ #if !UCONFIG_NO_TRANSLITERATION #include "unicode/translit.h" -#include "unicode/locid.h" #include "ucase.h" U_CDECL_BEGIN @@ -51,7 +50,7 @@ public: * @param id the transliterator ID. * @param map the full case mapping function (see ucase.h) */ - CaseMapTransliterator(const Locale &loc, const UnicodeString &id, UCaseMapFull *map); + CaseMapTransliterator(const UnicodeString &id, UCaseMapFull *map); /** * Destructor. @@ -98,9 +97,7 @@ protected: UTransPosition& offsets, UBool isIncremental) const; - Locale fLoc; - const char *fLocName; - UCaseProps *fCsp; + const UCaseProps *fCsp; UCaseMapFull *fMap; }; diff --git a/icuSources/i18n/choicfmt.cpp b/icuSources/i18n/choicfmt.cpp index eeac7f38..b9caa9a3 100644 --- a/icuSources/i18n/choicfmt.cpp +++ b/icuSources/i18n/choicfmt.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -31,9 +31,10 @@ #include "unicode/numfmt.h" #include "unicode/locid.h" #include "cpputils.h" -#include "ustrfmt.h" #include "cstring.h" #include "putilimp.h" +#include <stdio.h> +#include <float.h> // ***************************************************************************** // class ChoiceFormat @@ -210,9 +211,33 @@ UnicodeString& ChoiceFormat::dtos(double value, UnicodeString& string) { - char temp[256]; + /* Buffer to contain the digits and any extra formatting stuff. */ + char temp[DBL_DIG + 16]; + char *itrPtr = temp; + char *startPtr; + + sprintf(temp, "%.*f", DBL_DIG, value); + + /* Find and convert the decimal point. + Using setlocale on some machines will cause sprintf to use a comma for certain locales. + */ + while (*itrPtr && (*itrPtr == '-' || isdigit(*itrPtr))) { + itrPtr++; + } + if (*itrPtr) { + *itrPtr = '.'; + } - uprv_dtostr(value, temp, 3, TRUE); + /* remove trailing zeros, except the one after '.' */ + startPtr = itrPtr + 1; + itrPtr = uprv_strchr(startPtr, 0); + while(--itrPtr > startPtr){ + if(*itrPtr == '0'){ + *itrPtr = 0; + }else{ + break; + } + } string = UnicodeString(temp, -1, US_INV); /* invariant codepage */ return string; } diff --git a/icuSources/i18n/coleitr.cpp b/icuSources/i18n/coleitr.cpp index 7661e854..8c1b87f4 100644 --- a/icuSources/i18n/coleitr.cpp +++ b/icuSources/i18n/coleitr.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1996-2003, International Business Machines Corporation and * +* Copyright (C) 1996-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -40,34 +40,31 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CollationElementIterator) -/* synwee : public can't remove */ -int32_t const CollationElementIterator::NULLORDER = 0xffffffff; - /* CollationElementIterator public constructor/destructor ------------------ */ CollationElementIterator::CollationElementIterator( const CollationElementIterator& other) : UObject(other), isDataOwned_(TRUE) { - UErrorCode status = U_ZERO_ERROR; - m_data_ = ucol_openElements(other.m_data_->iteratordata_.coll, NULL, 0, - &status); + UErrorCode status = U_ZERO_ERROR; + m_data_ = ucol_openElements(other.m_data_->iteratordata_.coll, NULL, 0, + &status); - *this = other; + *this = other; } CollationElementIterator::~CollationElementIterator() { - if (isDataOwned_) { - ucol_closeElements(m_data_); - } + if (isDataOwned_) { + ucol_closeElements(m_data_); + } } /* CollationElementIterator public methods --------------------------------- */ int32_t CollationElementIterator::getOffset() const { - return ucol_getOffset(m_data_); + return ucol_getOffset(m_data_); } /** @@ -77,13 +74,13 @@ int32_t CollationElementIterator::getOffset() const */ int32_t CollationElementIterator::next(UErrorCode& status) { - return ucol_next(m_data_, &status); + return ucol_next(m_data_, &status); } UBool CollationElementIterator::operator!=( const CollationElementIterator& other) const { - return !(*this == other); + return !(*this == other); } UBool CollationElementIterator::operator==( @@ -155,7 +152,7 @@ UBool CollationElementIterator::operator==( */ int32_t CollationElementIterator::previous(UErrorCode& status) { - return ucol_previous(m_data_, &status); + return ucol_previous(m_data_, &status); } /** @@ -163,13 +160,13 @@ int32_t CollationElementIterator::previous(UErrorCode& status) */ void CollationElementIterator::reset() { - ucol_reset(m_data_); + ucol_reset(m_data_); } void CollationElementIterator::setOffset(int32_t newOffset, UErrorCode& status) { - ucol_setOffset(m_data_, newOffset, &status); + ucol_setOffset(m_data_, newOffset, &status); } /** @@ -178,96 +175,96 @@ void CollationElementIterator::setOffset(int32_t newOffset, void CollationElementIterator::setText(const UnicodeString& source, UErrorCode& status) { - if (U_FAILURE(status)) { - return; - } - - int32_t length = source.length(); - UChar *string = NULL; - if (m_data_->isWritable && m_data_->iteratordata_.string != NULL) { - uprv_free(m_data_->iteratordata_.string); - } - m_data_->isWritable = TRUE; - if (length > 0) { - string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); - /* test for NULL */ - if (string == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + if (U_FAILURE(status)) { return; } - u_memcpy(string, source.getBuffer(), length); - } - else { - string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); - /* test for NULL */ - if (string == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; + + int32_t length = source.length(); + UChar *string = NULL; + if (m_data_->isWritable && m_data_->iteratordata_.string != NULL) { + uprv_free(m_data_->iteratordata_.string); + } + m_data_->isWritable = TRUE; + if (length > 0) { + string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); + /* test for NULL */ + if (string == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + u_memcpy(string, source.getBuffer(), length); + } + else { + string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); + /* test for NULL */ + if (string == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + *string = 0; } - *string = 0; - } - uprv_init_collIterate(m_data_->iteratordata_.coll, string, length, - &m_data_->iteratordata_); + uprv_init_collIterate(m_data_->iteratordata_.coll, string, length, + &m_data_->iteratordata_); - m_data_->reset_ = TRUE; + m_data_->reset_ = TRUE; } // Sets the source to the new character iterator. void CollationElementIterator::setText(CharacterIterator& source, UErrorCode& status) { - if (U_FAILURE(status)) - return; - - int32_t length = source.getLength(); - UChar *buffer = NULL; - - if (length == 0) { - buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); - /* test for NULL */ - if (buffer == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + if (U_FAILURE(status)) return; + + int32_t length = source.getLength(); + UChar *buffer = NULL; + + if (length == 0) { + buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); + /* test for NULL */ + if (buffer == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + *buffer = 0; } - *buffer = 0; - } - else { - buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); - /* test for NULL */ - if (buffer == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - /* - Using this constructor will prevent buffer from being removed when - string gets removed - */ - UnicodeString string; - source.getText(string); - u_memcpy(buffer, string.getBuffer(), length); - } - - if (m_data_->isWritable && m_data_->iteratordata_.string != NULL) { - uprv_free(m_data_->iteratordata_.string); - } - m_data_->isWritable = TRUE; - uprv_init_collIterate(m_data_->iteratordata_.coll, buffer, length, - &m_data_->iteratordata_); - m_data_->reset_ = TRUE; + else { + buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); + /* test for NULL */ + if (buffer == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + /* + Using this constructor will prevent buffer from being removed when + string gets removed + */ + UnicodeString string; + source.getText(string); + u_memcpy(buffer, string.getBuffer(), length); + } + + if (m_data_->isWritable && m_data_->iteratordata_.string != NULL) { + uprv_free(m_data_->iteratordata_.string); + } + m_data_->isWritable = TRUE; + uprv_init_collIterate(m_data_->iteratordata_.coll, buffer, length, + &m_data_->iteratordata_); + m_data_->reset_ = TRUE; } int32_t CollationElementIterator::strengthOrder(int32_t order) const { - UCollationStrength s = ucol_getStrength(m_data_->iteratordata_.coll); - // Mask off the unwanted differences. - if (s == UCOL_PRIMARY) { - order &= RuleBasedCollator::PRIMARYDIFFERENCEONLY; - } - else if (s == UCOL_SECONDARY) { - order &= RuleBasedCollator::SECONDARYDIFFERENCEONLY; - } - - return order; + UCollationStrength s = ucol_getStrength(m_data_->iteratordata_.coll); + // Mask off the unwanted differences. + if (s == UCOL_PRIMARY) { + order &= RuleBasedCollator::PRIMARYDIFFERENCEONLY; + } + else if (s == UCOL_SECONDARY) { + order &= RuleBasedCollator::SECONDARYDIFFERENCEONLY; + } + + return order; } /* CollationElementIterator private constructors/destructors --------------- */ @@ -282,42 +279,42 @@ CollationElementIterator::CollationElementIterator( UErrorCode& status) : isDataOwned_(TRUE) { - if (U_FAILURE(status)) { - return; - } - - int32_t length = sourceText.length(); - UChar *string = NULL; - - if (length > 0) { - string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); - /* test for NULL */ - if (string == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - /* - Using this constructor will prevent buffer from being removed when - string gets removed - */ - u_memcpy(string, sourceText.getBuffer(), length); - } - else { - string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); - /* test for NULL */ - if (string == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + if (U_FAILURE(status)) { return; - } - *string = 0; - } - m_data_ = ucol_openElements(order->ucollator, string, length, &status); - - /* Test for buffer overflows */ - if (U_FAILURE(status)) { - return; - } - m_data_->isWritable = TRUE; + } + + int32_t length = sourceText.length(); + UChar *string = NULL; + + if (length > 0) { + string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); + /* test for NULL */ + if (string == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + /* + Using this constructor will prevent buffer from being removed when + string gets removed + */ + u_memcpy(string, sourceText.getBuffer(), length); + } + else { + string = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); + /* test for NULL */ + if (string == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + *string = 0; + } + m_data_ = ucol_openElements(order->ucollator, string, length, &status); + + /* Test for buffer overflows */ + if (U_FAILURE(status)) { + return; + } + m_data_->isWritable = TRUE; } /** @@ -330,62 +327,62 @@ CollationElementIterator::CollationElementIterator( UErrorCode& status) : isDataOwned_(TRUE) { - if (U_FAILURE(status)) - return; - - // **** should I just drop this test? **** - /* - if ( sourceText.endIndex() != 0 ) - { - // A CollationElementIterator is really a two-layered beast. - // Internally it uses a Normalizer to munge the source text into a form - // where all "composed" Unicode characters (such as \u00FC) are split into a - // normal character and a combining accent character. - // Afterward, CollationElementIterator does its own processing to handle - // expanding and contracting collation sequences, ignorables, and so on. - - Normalizer::EMode decomp = order->getStrength() == Collator::IDENTICAL - ? Normalizer::NO_OP : order->getDecomposition(); - - text = new Normalizer(sourceText, decomp); - if (text == NULL) - status = U_MEMORY_ALLOCATION_ERROR; - } - */ - int32_t length = sourceText.getLength(); - UChar *buffer; - if (length > 0) { - buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); - /* test for NULL */ - if (buffer == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + if (U_FAILURE(status)) return; - } - /* - Using this constructor will prevent buffer from being removed when - string gets removed - */ - UnicodeString string(buffer, length, length); - ((CharacterIterator &)sourceText).getText(string); - const UChar *temp = string.getBuffer(); - u_memcpy(buffer, temp, length); - } - else { - buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); - /* test for NULL */ - if (buffer == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; + + // **** should I just drop this test? **** + /* + if ( sourceText.endIndex() != 0 ) + { + // A CollationElementIterator is really a two-layered beast. + // Internally it uses a Normalizer to munge the source text into a form + // where all "composed" Unicode characters (such as \u00FC) are split into a + // normal character and a combining accent character. + // Afterward, CollationElementIterator does its own processing to handle + // expanding and contracting collation sequences, ignorables, and so on. + + Normalizer::EMode decomp = order->getStrength() == Collator::IDENTICAL + ? Normalizer::NO_OP : order->getDecomposition(); + + text = new Normalizer(sourceText, decomp); + if (text == NULL) + status = U_MEMORY_ALLOCATION_ERROR; + } + */ + int32_t length = sourceText.getLength(); + UChar *buffer; + if (length > 0) { + buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR * length); + /* test for NULL */ + if (buffer == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + /* + Using this constructor will prevent buffer from being removed when + string gets removed + */ + UnicodeString string(buffer, length, length); + ((CharacterIterator &)sourceText).getText(string); + const UChar *temp = string.getBuffer(); + u_memcpy(buffer, temp, length); + } + else { + buffer = (UChar *)uprv_malloc(U_SIZEOF_UCHAR); + /* test for NULL */ + if (buffer == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + *buffer = 0; + } + m_data_ = ucol_openElements(order->ucollator, buffer, length, &status); + + /* Test for buffer overflows */ + if (U_FAILURE(status)) { return; - } - *buffer = 0; - } - m_data_ = ucol_openElements(order->ucollator, buffer, length, &status); - - /* Test for buffer overflows */ - if (U_FAILURE(status)) { - return; - } - m_data_->isWritable = TRUE; + } + m_data_->isWritable = TRUE; } /* CollationElementIterator protected methods ----------------------------- */ @@ -393,98 +390,100 @@ CollationElementIterator::CollationElementIterator( const CollationElementIterator& CollationElementIterator::operator=( const CollationElementIterator& other) { - if (this != &other) - { - UCollationElements *ucolelem = this->m_data_; - UCollationElements *otherucolelem = other.m_data_; - collIterate *coliter = &(ucolelem->iteratordata_); - collIterate *othercoliter = &(otherucolelem->iteratordata_); - int length = 0; - - // checking only UCOL_ITER_HASLEN is not enough here as we may be in - // the normalization buffer - length = othercoliter->endp - othercoliter->string; - - ucolelem->reset_ = otherucolelem->reset_; - ucolelem->isWritable = TRUE; - - /* create a duplicate of string */ - if (length > 0) { - coliter->string = (UChar *)uprv_malloc(length * U_SIZEOF_UCHAR); - if(coliter->string != NULL) { - uprv_memcpy(coliter->string, othercoliter->string, - length * U_SIZEOF_UCHAR); - } else { // Error: couldn't allocate memory. No copying should be done - length = 0; - } - } - else { - coliter->string = NULL; - } - - /* start and end of string */ - coliter->endp = coliter->string + length; - - /* handle writable buffer here */ - - if (othercoliter->flags & UCOL_ITER_INNORMBUF) { - uint32_t wlength = u_strlen(othercoliter->writableBuffer) + 1; - if (wlength < coliter->writableBufSize) { - uprv_memcpy(coliter->stackWritableBuffer, - othercoliter->stackWritableBuffer, - othercoliter->writableBufSize * U_SIZEOF_UCHAR); - } - else { - if (coliter->writableBuffer != coliter->stackWritableBuffer) { - uprv_free(coliter->writableBuffer); - } - coliter->writableBuffer = (UChar *)uprv_malloc( - wlength * U_SIZEOF_UCHAR); - if(coliter->writableBuffer != NULL) { - uprv_memcpy(coliter->writableBuffer, - othercoliter->writableBuffer, - wlength * U_SIZEOF_UCHAR); - coliter->writableBufSize = wlength; - } else { // Error: couldn't allocate memory for writableBuffer - coliter->writableBufSize = 0; - } - } - } - - /* current position */ - if (othercoliter->pos >= othercoliter->string && - othercoliter->pos <= othercoliter->endp) { - coliter->pos = coliter->string + - (othercoliter->pos - othercoliter->string); - } - else { - coliter->pos = coliter->writableBuffer + - (othercoliter->pos - othercoliter->writableBuffer); - } - - /* CE buffer */ - uprv_memcpy(coliter->CEs, othercoliter->CEs, - UCOL_EXPAND_CE_BUFFER_SIZE * sizeof(uint32_t)); - coliter->toReturn = coliter->CEs + - (othercoliter->toReturn - othercoliter->CEs); - coliter->CEpos = coliter->CEs + - (othercoliter->CEpos - othercoliter->CEs); - - if (othercoliter->fcdPosition != NULL) { - coliter->fcdPosition = coliter->string + - (othercoliter->fcdPosition - - othercoliter->string); - } - else { - coliter->fcdPosition = NULL; - } - coliter->flags = othercoliter->flags/*| UCOL_ITER_HASLEN*/; - coliter->origFlags = othercoliter->origFlags; - coliter->coll = othercoliter->coll; - this->isDataOwned_ = TRUE; - } - - return *this; + if (this != &other) + { + UCollationElements *ucolelem = this->m_data_; + UCollationElements *otherucolelem = other.m_data_; + collIterate *coliter = &(ucolelem->iteratordata_); + collIterate *othercoliter = &(otherucolelem->iteratordata_); + int length = 0; + + // checking only UCOL_ITER_HASLEN is not enough here as we may be in + // the normalization buffer + length = othercoliter->endp - othercoliter->string; + + ucolelem->reset_ = otherucolelem->reset_; + ucolelem->isWritable = TRUE; + + /* create a duplicate of string */ + if (length > 0) { + coliter->string = (UChar *)uprv_malloc(length * U_SIZEOF_UCHAR); + if(coliter->string != NULL) { + uprv_memcpy(coliter->string, othercoliter->string, + length * U_SIZEOF_UCHAR); + } else { // Error: couldn't allocate memory. No copying should be done + length = 0; + } + } + else { + coliter->string = NULL; + } + + /* start and end of string */ + coliter->endp = coliter->string + length; + + /* handle writable buffer here */ + + if (othercoliter->flags & UCOL_ITER_INNORMBUF) { + uint32_t wlength = u_strlen(othercoliter->writableBuffer) + 1; + if (wlength < coliter->writableBufSize) { + uprv_memcpy(coliter->stackWritableBuffer, + othercoliter->stackWritableBuffer, + wlength * U_SIZEOF_UCHAR); + } + else { + if (coliter->writableBuffer != coliter->stackWritableBuffer) { + uprv_free(coliter->writableBuffer); + } + coliter->writableBuffer = (UChar *)uprv_malloc( + wlength * U_SIZEOF_UCHAR); + if(coliter->writableBuffer != NULL) { + uprv_memcpy(coliter->writableBuffer, + othercoliter->writableBuffer, + wlength * U_SIZEOF_UCHAR); + coliter->writableBufSize = wlength; + } else { // Error: couldn't allocate memory for writableBuffer + coliter->writableBufSize = 0; + } + } + } + + /* current position */ + if (othercoliter->pos >= othercoliter->string && + othercoliter->pos <= othercoliter->endp) + { + coliter->pos = coliter->string + + (othercoliter->pos - othercoliter->string); + } + else { + coliter->pos = coliter->writableBuffer + + (othercoliter->pos - othercoliter->writableBuffer); + } + + /* CE buffer */ + int32_t CEsize = (int32_t)(othercoliter->CEpos - othercoliter->CEs); + if (CEsize > 0) { + uprv_memcpy(coliter->CEs, othercoliter->CEs, CEsize); + } + coliter->toReturn = coliter->CEs + + (othercoliter->toReturn - othercoliter->CEs); + coliter->CEpos = coliter->CEs + CEsize; + + if (othercoliter->fcdPosition != NULL) { + coliter->fcdPosition = coliter->string + + (othercoliter->fcdPosition + - othercoliter->string); + } + else { + coliter->fcdPosition = NULL; + } + coliter->flags = othercoliter->flags/*| UCOL_ITER_HASLEN*/; + coliter->origFlags = othercoliter->origFlags; + coliter->coll = othercoliter->coll; + this->isDataOwned_ = TRUE; + } + + return *this; } U_NAMESPACE_END diff --git a/icuSources/i18n/coll.cpp b/icuSources/i18n/coll.cpp index 6715a77e..c96e259c 100644 --- a/icuSources/i18n/coll.cpp +++ b/icuSources/i18n/coll.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1996-2004, International Business Machines Corporation and * +* Copyright (C) 1996-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ****************************************************************************** */ @@ -46,7 +46,7 @@ #include "ucol_imp.h" #include "cmemory.h" #include "mutex.h" -#include "iculserv.h" +#include "servloc.h" #include "ustrenum.h" #include "ucln_in.h" @@ -100,7 +100,7 @@ CollatorFactory::getDisplayName(const Locale& objectLocale, class ICUCollatorFactory : public ICUResourceBundleFactory { public: - ICUCollatorFactory(): ICUResourceBundleFactory(UnicodeString(U_ICUDATA_COLL, (char*)NULL)) { } + ICUCollatorFactory(): ICUResourceBundleFactory(UnicodeString(U_ICUDATA_COLL, -1, US_INV)) { } protected: virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const; }; @@ -125,7 +125,7 @@ ICUCollatorFactory::create(const ICUServiceKey& key, const ICUService* /* servic class ICUCollatorService : public ICULocaleService { public: ICUCollatorService() - : ICULocaleService("Collator") + : ICULocaleService(UNICODE_STRING_SIMPLE("Collator")) { UErrorCode status = U_ZERO_ERROR; registerFactory(new ICUCollatorFactory(), status); @@ -406,7 +406,9 @@ UnicodeString& U_EXPORT2 Collator::getDisplayName(const Locale& objectLocale, { #if !UCONFIG_NO_SERVICE if (hasService()) { - return gService->getDisplayName(objectLocale.getName(), name, displayLocale); + UnicodeString locNameStr; + LocaleUtility::initNameFromLocale(objectLocale, locNameStr); + return gService->getDisplayName(locNameStr, name, displayLocale); } #endif return objectLocale.getDisplayName(displayLocale, name); diff --git a/icuSources/i18n/cpdtrans.cpp b/icuSources/i18n/cpdtrans.cpp index fa3b5589..afd1fdbf 100644 --- a/icuSources/i18n/cpdtrans.cpp +++ b/icuSources/i18n/cpdtrans.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -20,7 +20,7 @@ #include "cmemory.h" // keep in sync with Transliterator -static const UChar ID_SEP = 0x002D; /*-*/ +//static const UChar ID_SEP = 0x002D; /*-*/ static const UChar ID_DELIM = 0x003B; /*;*/ static const UChar NEWLINE = 10; @@ -30,6 +30,8 @@ static const UChar COLON_COLON[] = {0x3A, 0x3A, 0}; //"::" U_NAMESPACE_BEGIN +const UChar CompoundTransliterator::PASS_STRING[] = { 0x0025, 0x0050, 0x0061, 0x0073, 0x0073, 0 }; // "%Pass" + UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CompoundTransliterator) /** @@ -51,7 +53,7 @@ CompoundTransliterator::CompoundTransliterator( int32_t transliteratorCount, UnicodeFilter* adoptedFilter) : Transliterator(joinIDs(transliterators, transliteratorCount), adoptedFilter), - trans(0), count(0), compoundRBTIndex(-1) { + trans(0), count(0), numAnonymousRBTs(0) { setTransliterators(transliterators, transliteratorCount); } @@ -68,20 +70,36 @@ CompoundTransliterator::CompoundTransliterator(const UnicodeString& id, UParseError& /*parseError*/, UErrorCode& status) : Transliterator(id, adoptedFilter), - trans(0), compoundRBTIndex(-1) { + trans(0), numAnonymousRBTs(0) { // TODO add code for parseError...currently unused, but // later may be used by parsing code... - init(id, direction, -1, 0, TRUE, status); + init(id, direction, TRUE, status); } CompoundTransliterator::CompoundTransliterator(const UnicodeString& id, UParseError& /*parseError*/, UErrorCode& status) : Transliterator(id, 0), // set filter to 0 here! - trans(0), compoundRBTIndex(-1) { + trans(0), numAnonymousRBTs(0) { // TODO add code for parseError...currently unused, but // later may be used by parsing code... - init(id, UTRANS_FORWARD, -1, 0, TRUE, status); + init(id, UTRANS_FORWARD, TRUE, status); +} + + +/** + * Private constructor for use of TransliteratorAlias + */ +CompoundTransliterator::CompoundTransliterator(const UnicodeString& newID, + UVector& list, + UnicodeFilter* adoptedFilter, + int32_t anonymousRBTs, + UParseError& /*parseError*/, + UErrorCode& status) : + Transliterator(newID, adoptedFilter), + trans(0), numAnonymousRBTs(anonymousRBTs) +{ + init(list, UTRANS_FORWARD, FALSE, status); } /** @@ -93,7 +111,7 @@ CompoundTransliterator::CompoundTransliterator(UVector& list, UParseError& /*parseError*/, UErrorCode& status) : Transliterator(EMPTY, NULL), - trans(0), compoundRBTIndex(-1) + trans(0), numAnonymousRBTs(0) { // TODO add code for parseError...currently unused, but // later may be used by parsing code... @@ -101,20 +119,14 @@ CompoundTransliterator::CompoundTransliterator(UVector& list, // assume caller will fixup ID } -/** - * Private constructor for compound RBTs. Construct a compound - * transliterator using the given idBlock, with the adoptedTrans - * inserted at the idSplitPoint. - */ -CompoundTransliterator::CompoundTransliterator(const UnicodeString& newID, - const UnicodeString& idBlock, - int32_t idSplitPoint, - Transliterator *adoptedTrans, +CompoundTransliterator::CompoundTransliterator(UVector& list, + int32_t anonymousRBTs, + UParseError& /*parseError*/, UErrorCode& status) : - Transliterator(newID, 0), - trans(0), compoundRBTIndex(-1) + Transliterator(EMPTY, NULL), + trans(0), numAnonymousRBTs(anonymousRBTs) { - init(idBlock, UTRANS_FORWARD, idSplitPoint, adoptedTrans, FALSE, status); + init(list, UTRANS_FORWARD, FALSE, status); } /** @@ -135,14 +147,11 @@ CompoundTransliterator::CompoundTransliterator(const UnicodeString& newID, */ void CompoundTransliterator::init(const UnicodeString& id, UTransDirection direction, - int32_t idSplitPoint, - Transliterator *adoptedSplitTrans, UBool fixReverseID, UErrorCode& status) { // assert(trans == 0); if (U_FAILURE(status)) { - delete adoptedSplitTrans; return; } @@ -152,12 +161,11 @@ void CompoundTransliterator::init(const UnicodeString& id, if (!TransliteratorIDParser::parseCompoundID(id, direction, regenID, list, compoundFilter)) { status = U_INVALID_ID; - delete adoptedSplitTrans; delete compoundFilter; return; } - compoundRBTIndex = TransliteratorIDParser::instantiateList(list, adoptedSplitTrans, idSplitPoint, status); + TransliteratorIDParser::instantiateList(list, status); init(list, direction, fixReverseID, status); @@ -209,11 +217,6 @@ void CompoundTransliterator::init(UVector& list, trans[i] = (Transliterator*) list.elementAt(j); } - // Fix compoundRBTIndex for REVERSE transliterators - if (compoundRBTIndex >= 0 && direction == UTRANS_REVERSE) { - compoundRBTIndex = count - 1 - compoundRBTIndex; - } - // If the direction is UTRANS_REVERSE then we may need to fix the // ID. if (direction == UTRANS_REVERSE && fixReverseID) { @@ -251,7 +254,7 @@ UnicodeString CompoundTransliterator::joinIDs(Transliterator* const transliterat * Copy constructor. */ CompoundTransliterator::CompoundTransliterator(const CompoundTransliterator& t) : - Transliterator(t), trans(0), count(0), compoundRBTIndex(-1) { + Transliterator(t), trans(0), count(0), numAnonymousRBTs(-1) { *this = t; } @@ -292,7 +295,7 @@ CompoundTransliterator& CompoundTransliterator::operator=( for (i=0; i<count; ++i) { trans[i] = t.trans[i]->clone(); } - compoundRBTIndex = t.compoundRBTIndex; + numAnonymousRBTs = t.numAnonymousRBTs; return *this; } @@ -359,7 +362,7 @@ UnicodeString& CompoundTransliterator::toRules(UnicodeString& rulesSource, // compoundRBTIndex >= 0. For the transliterator at compoundRBTIndex, // we do call toRules() recursively. rulesSource.truncate(0); - if (compoundRBTIndex >= 0 && getFilter() != NULL) { + if (numAnonymousRBTs >= 1 && getFilter() != NULL) { // If we are a compound RBT and if we have a global // filter, then emit it at the top. UnicodeString pat; @@ -367,8 +370,24 @@ UnicodeString& CompoundTransliterator::toRules(UnicodeString& rulesSource, } for (int32_t i=0; i<count; ++i) { UnicodeString rule; - if (i == compoundRBTIndex) { + + // Anonymous RuleBasedTransliterators (inline rules and + // ::BEGIN/::END blocks) are given IDs that begin with + // "%Pass": use toRules() to write all the rules to the output + // (and insert "::Null;" if we have two in a row) + if (trans[i]->getID().startsWith(PASS_STRING)) { trans[i]->toRules(rule, escapeUnprintable); + if (numAnonymousRBTs > 1 && i > 0 && trans[i - 1]->getID().startsWith(PASS_STRING)) + rule = UNICODE_STRING_SIMPLE("::Null;") + rule; + + // we also use toRules() on CompoundTransliterators (which we + // check for by looking for a semicolon in the ID)-- this gets + // the list of their child transliterators output in the right + // format + } else if (trans[i]->getID().indexOf(ID_DELIM) >= 0) { + trans[i]->toRules(rule, escapeUnprintable); + + // for everything else, use Transliterator::toRules() } else { trans[i]->Transliterator::toRules(rule, escapeUnprintable); } diff --git a/icuSources/i18n/cpdtrans.h b/icuSources/i18n/cpdtrans.h index f52b17ae..e4688fea 100644 --- a/icuSources/i18n/cpdtrans.h +++ b/icuSources/i18n/cpdtrans.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -42,13 +42,7 @@ class U_I18N_API CompoundTransliterator : public Transliterator { int32_t count; - /** - * For compound RBTs (those with an ::id block before and/or after - * the main rule block) we record the index of the RBT here. - * Otherwise, this should have a value of -1. We need this - * information to implement toRules(). - */ - int32_t compoundRBTIndex; + int32_t numAnonymousRBTs; public: @@ -197,33 +191,35 @@ public: */ static UClassID U_EXPORT2 getStaticClassID(); + /* @internal */ + static const UChar PASS_STRING[]; + private: friend class Transliterator; friend class TransliteratorAlias; // to access private ct /** - * Private constructor for compound RBTs. Construct a compound - * transliterator using the given idBlock, with the adoptedTrans - * inserted at the idSplitPoint. + * Private constructor for Transliterator. */ CompoundTransliterator(const UnicodeString& ID, - const UnicodeString& idBlock, - int32_t idSplitPoint, - Transliterator *adoptedTrans, + UVector& list, + UnicodeFilter* adoptedFilter, + int32_t numAnonymousRBTs, + UParseError& parseError, UErrorCode& status); - - /** - * Private constructor for Transliterator. - */ + + CompoundTransliterator(UVector& list, + UParseError& parseError, + UErrorCode& status); + CompoundTransliterator(UVector& list, + int32_t anonymousRBTs, UParseError& parseError, UErrorCode& status); void init(const UnicodeString& id, UTransDirection direction, - int32_t idSplitPoint, - Transliterator *adoptedRbt, UBool fixReverseID, UErrorCode& status); diff --git a/icuSources/i18n/csdetect.cpp b/icuSources/i18n/csdetect.cpp new file mode 100644 index 00000000..812bc65e --- /dev/null +++ b/icuSources/i18n/csdetect.cpp @@ -0,0 +1,387 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "unicode/ucsdet.h" + +#include "csdetect.h" +#include "csmatch.h" +#include "uenumimp.h" + +#include "cmemory.h" +#include "cstring.h" +#include "umutex.h" +#include "ucln_in.h" +#include "uarrsort.h" +#include "inputext.h" +#include "csrsbcs.h" +#include "csrmbcs.h" +#include "csrutf8.h" +#include "csrucode.h" +#include "csr2022.h" + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +U_CDECL_BEGIN +static CharsetRecognizer **fCSRecognizers = NULL; + +static int32_t fCSRecognizers_size = 0; + +static UBool U_CALLCONV csdet_cleanup(void) +{ + if (fCSRecognizers != NULL) { + for(int32_t r = 0; r < fCSRecognizers_size; r += 1) { + delete fCSRecognizers[r]; + fCSRecognizers[r] = NULL; + } + + DELETE_ARRAY(fCSRecognizers); + fCSRecognizers = NULL; + fCSRecognizers_size = 0; + } + + return TRUE; +} + +static int32_t U_CALLCONV +charsetMatchComparator(const void *context, const void *left, const void *right) +{ + const CharsetMatch **csm_l = (const CharsetMatch **) left; + const CharsetMatch **csm_r = (const CharsetMatch **) right; + + // NOTE: compare is backwards to sort from highest to lowest. + return (*csm_r)->getConfidence() - (*csm_l)->getConfidence(); +} + +U_CDECL_END + +U_NAMESPACE_BEGIN + +void CharsetDetector::setRecognizers(UErrorCode &status) +{ + UBool needsInit; + CharsetRecognizer **recognizers; + + if (U_FAILURE(status)) { + return; + } + + umtx_lock(NULL); + needsInit = (UBool) (fCSRecognizers == NULL); + umtx_unlock(NULL); + + if (needsInit) { + CharsetRecognizer *tempArray[] = { + new CharsetRecog_UTF8(), + + new CharsetRecog_UTF_16_BE(), + new CharsetRecog_UTF_16_LE(), + new CharsetRecog_UTF_32_BE(), + new CharsetRecog_UTF_32_LE(), + + new CharsetRecog_8859_1_en(), + new CharsetRecog_8859_1_da(), + new CharsetRecog_8859_1_de(), + new CharsetRecog_8859_1_es(), + new CharsetRecog_8859_1_fr(), + new CharsetRecog_8859_1_it(), + new CharsetRecog_8859_1_nl(), + new CharsetRecog_8859_1_no(), + new CharsetRecog_8859_1_pt(), + new CharsetRecog_8859_1_sv(), + new CharsetRecog_8859_2_cs(), + new CharsetRecog_8859_2_hu(), + new CharsetRecog_8859_2_pl(), + new CharsetRecog_8859_2_ro(), + new CharsetRecog_8859_5_ru(), + new CharsetRecog_8859_6_ar(), + new CharsetRecog_8859_7_el(), + new CharsetRecog_8859_8_I_he(), + new CharsetRecog_8859_8_he(), + new CharsetRecog_windows_1251(), + new CharsetRecog_windows_1256(), + new CharsetRecog_KOI8_R(), + new CharsetRecog_8859_9_tr(), + new CharsetRecog_sjis(), + new CharsetRecog_gb_18030(), + new CharsetRecog_euc_jp(), + new CharsetRecog_euc_kr(), + new CharsetRecog_big5(), + + new CharsetRecog_2022JP(), + new CharsetRecog_2022KR(), + new CharsetRecog_2022CN() + }; + int32_t rCount = ARRAY_SIZE(tempArray); + int32_t r; + + recognizers = NEW_ARRAY(CharsetRecognizer *, rCount); + + if (recognizers == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } else { + for (r = 0; r < rCount; r += 1) { + recognizers[r] = tempArray[r]; + + if (recognizers[r] == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + break; + } + } + } + + if (U_SUCCESS(status)) { + umtx_lock(NULL); + if (fCSRecognizers == NULL) { + fCSRecognizers = recognizers; + fCSRecognizers_size = rCount; + } + umtx_unlock(NULL); + } + + if (fCSRecognizers != recognizers) { + for (r = 0; r < rCount; r += 1) { + delete recognizers[r]; + recognizers[r] = NULL; + } + + DELETE_ARRAY(recognizers); + } + + recognizers = NULL; + ucln_i18n_registerCleanup(UCLN_I18N_CSDET, csdet_cleanup); + } +} + +CharsetDetector::CharsetDetector(UErrorCode &status) + : textIn(new InputText()), resultCount(0), fStripTags(FALSE), fFreshTextSet(FALSE) +{ + if (U_FAILURE(status)) { + return; + } + + setRecognizers(status); + + if (U_FAILURE(status)) { + return; + } + + resultArray = (CharsetMatch **)uprv_malloc(sizeof(CharsetMatch *)*fCSRecognizers_size); + + if (resultArray == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + + for(int32_t i = 0; i < fCSRecognizers_size; i += 1) { + resultArray[i] = new CharsetMatch(); + + if (resultArray[i] == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + break; + } + } +} + +CharsetDetector::~CharsetDetector() +{ + delete textIn; + + for(int32_t i = 0; i < fCSRecognizers_size; i += 1) { + delete resultArray[i]; + } + + uprv_free(resultArray); +} + +void CharsetDetector::setText(const char *in, int32_t len) +{ + textIn->setText(in, len); + fFreshTextSet = TRUE; +} + +UBool CharsetDetector::setStripTagsFlag(UBool flag) +{ + UBool temp = fStripTags; + fStripTags = flag; + fFreshTextSet = TRUE; + return temp; +} + +UBool CharsetDetector::getStripTagsFlag() const +{ + return fStripTags; +} + +void CharsetDetector::setDeclaredEncoding(const char *encoding, int32_t len) const +{ + textIn->setDeclaredEncoding(encoding,len); +} + +int32_t CharsetDetector::getDetectableCount() +{ + UErrorCode status = U_ZERO_ERROR; + + setRecognizers(status); + + return fCSRecognizers_size; +} + +const CharsetMatch *CharsetDetector::detect(UErrorCode &status) +{ + int32_t maxMatchesFound = 0; + + detectAll(maxMatchesFound, status); + + if(maxMatchesFound > 0) { + return resultArray[0]; + } else { + return NULL; + } +} + +const CharsetMatch * const *CharsetDetector::detectAll(int32_t &maxMatchesFound, UErrorCode &status) +{ + if(!textIn->isSet()) { + status = U_MISSING_RESOURCE_ERROR;// TODO: Need to set proper status code for input text not set + + return NULL; + } else if(fFreshTextSet) { + CharsetRecognizer *csr; + int32_t detectResults; + int32_t confidence; + + textIn->MungeInput(fStripTags); + + // Iterate over all possible charsets, remember all that + // give a match quality > 0. + resultCount = 0; + for (int32_t i = 0; i < fCSRecognizers_size; i += 1) { + csr = fCSRecognizers[i]; + detectResults = csr->match(textIn); + confidence = detectResults; + + if (confidence > 0) { + resultArray[resultCount++]->set(textIn, csr, confidence); + } + } + + for(int32_t i = resultCount; i < fCSRecognizers_size; i += 1) { + resultArray[i]->set(textIn, 0, 0); + } + + uprv_sortArray(resultArray, resultCount, sizeof resultArray[0], charsetMatchComparator, NULL, TRUE, &status); + ////Bubble sort + //for(int32_t i = resultCount; i > 1; i -= 1) { + // for(int32_t j = 0; j < i-1; j += 1) { + // if(resultArray[j]->getConfidence() < resultArray[j+1]->getConfidence()) { + // CharsetMatch *temp = resultArray[j]; + // resultArray[j] = resultArray[j+1]; + // resultArray[j+1] = temp; + // } + // } + //} + + fFreshTextSet = FALSE; + } + + maxMatchesFound = resultCount; + + return resultArray; +} + +const char *CharsetDetector::getCharsetName(int32_t index, UErrorCode &status) const +{ + if( index > fCSRecognizers_size-1 || index < 0) { + status = U_INDEX_OUTOFBOUNDS_ERROR; + + return 0; + } else { + return fCSRecognizers[index]->getName(); + } +} + +U_NAMESPACE_END + +U_CDECL_BEGIN +typedef struct { + int32_t currIndex; +} Context; + + + +static void U_CALLCONV +enumClose(UEnumeration *en) { + if(en->context != NULL) { + DELETE_ARRAY(en->context); + } + + DELETE_ARRAY(en); +} + +static int32_t U_CALLCONV +enumCount(UEnumeration *, UErrorCode *) { + return fCSRecognizers_size; +} + +static const char* U_CALLCONV +enumNext(UEnumeration *en, int32_t *resultLength, UErrorCode *status) { + if(((Context *)en->context)->currIndex >= fCSRecognizers_size) { + if(resultLength != NULL) { + *resultLength = 0; + } + return NULL; + } + const char *currName = fCSRecognizers[((Context *)en->context)->currIndex]->getName(); + if(resultLength != NULL) { + *resultLength = (int32_t)uprv_strlen(currName); + } + ((Context *)en->context)->currIndex++; + + return currName; +} + +static void U_CALLCONV +enumReset(UEnumeration *en, UErrorCode *) { + ((Context *)en->context)->currIndex = 0; +} + +static const UEnumeration gCSDetEnumeration = { + NULL, + NULL, + enumClose, + enumCount, + uenum_unextDefault, + enumNext, + enumReset +}; + +U_CAPI UEnumeration * U_EXPORT2 +ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return 0; + } + + /* Initialize recognized charsets. */ + CharsetDetector::getDetectableCount(); + + UEnumeration *en = NEW_ARRAY(UEnumeration, 1); + memcpy(en, &gCSDetEnumeration, sizeof(UEnumeration)); + en->context = (void*)NEW_ARRAY(Context, 1); + uprv_memset(en->context, 0, sizeof(Context)); + return en; +} +U_CDECL_END + +#endif diff --git a/icuSources/i18n/csdetect.h b/icuSources/i18n/csdetect.h new file mode 100644 index 00000000..1cf323e3 --- /dev/null +++ b/icuSources/i18n/csdetect.h @@ -0,0 +1,56 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSDETECT_H +#define __CSDETECT_H + +#include "unicode/uobject.h" + +#if !UCONFIG_NO_CONVERSION + +U_NAMESPACE_BEGIN + +class InputText; +class CharsetRecognizer; +class CharsetMatch; + +class CharsetDetector : public UMemory +{ +private: + InputText *textIn; + CharsetMatch **resultArray; + int32_t resultCount; + UBool fStripTags; // If true, setText() will strip tags from input text. + UBool fFreshTextSet; + static void setRecognizers(UErrorCode &status); + +public: + CharsetDetector(UErrorCode &status); + + ~CharsetDetector(); + + void setText(const char *in, int32_t len); + + const CharsetMatch * const *detectAll(int32_t &maxMatchesFound, UErrorCode &status); + + const CharsetMatch *detect(UErrorCode& status); + + void setDeclaredEncoding(const char *encoding, int32_t len) const; + + UBool setStripTagsFlag(UBool flag); + + UBool getStripTagsFlag() const; + + const char *getCharsetName(int32_t index, UErrorCode& status) const; + + static int32_t getDetectableCount(); +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSDETECT_H */ diff --git a/icuSources/i18n/csmatch.cpp b/icuSources/i18n/csmatch.cpp new file mode 100644 index 00000000..f1d25d2d --- /dev/null +++ b/icuSources/i18n/csmatch.cpp @@ -0,0 +1,61 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION +#include "unicode/unistr.h" +#include "unicode/ucnv.h" + +#include "csmatch.h" + +#include "csrecog.h" +#include "inputext.h" + +U_NAMESPACE_BEGIN + +CharsetMatch::CharsetMatch() + : csr(0), confidence(0) +{ + // nothing else to do. +} + +void CharsetMatch::set(InputText *input, CharsetRecognizer *cr, int32_t conf) +{ + textIn = input; + csr = cr; + confidence = conf; +} + +const char* CharsetMatch::getName()const +{ + return csr->getName(); +} + +const char* CharsetMatch::getLanguage()const +{ + return csr->getLanguage(); +} + +int32_t CharsetMatch::getConfidence()const +{ + return confidence; +} + +int32_t CharsetMatch::getUChars(UChar *buf, int32_t cap, UErrorCode *status) const +{ + UConverter *conv = ucnv_open(getName(), status); + int32_t result = ucnv_toUChars(conv, buf, cap, (const char *) textIn->fRawInput, textIn->fRawLength, status); + + ucnv_close(conv); + + return result; +} + +U_NAMESPACE_END + +#endif diff --git a/icuSources/i18n/csmatch.h b/icuSources/i18n/csmatch.h new file mode 100644 index 00000000..50b78a3a --- /dev/null +++ b/icuSources/i18n/csmatch.h @@ -0,0 +1,44 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSMATCH_H +#define __CSMATCH_H + +#include "unicode/uobject.h" + +#if !UCONFIG_NO_CONVERSION + +U_NAMESPACE_BEGIN + +class InputText; +class CharsetRecognizer; + +class CharsetMatch : public UMemory +{ + private: + CharsetRecognizer *csr; + InputText *textIn; + int32_t confidence; + + public: + CharsetMatch(); + + void set(InputText *input, CharsetRecognizer *cr, int32_t conf); + + const char *getName()const; + + const char *getLanguage()const; + + int32_t getConfidence()const; + + int32_t getUChars(UChar *buf, int32_t cap, UErrorCode *status) const; +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSMATCH_H */ diff --git a/icuSources/i18n/csr2022.cpp b/icuSources/i18n/csr2022.cpp new file mode 100644 index 00000000..c7165f1c --- /dev/null +++ b/icuSources/i18n/csr2022.cpp @@ -0,0 +1,172 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "cstring.h" + +#include "csr2022.h" + +U_NAMESPACE_BEGIN + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +/** + * Matching function shared among the 2022 detectors JP, CN and KR + * Counts up the number of legal an unrecognized escape sequences in + * the sample of text, and computes a score based on the total number & + * the proportion that fit the encoding. + * + * + * @param text the byte buffer containing text to analyse + * @param textLen the size of the text in the byte. + * @param escapeSequences the byte escape sequences to test for. + * @return match quality, in the range of 0-100. + */ +int32_t CharsetRecog_2022::match_2022(const uint8_t *text, int32_t textLen, const uint8_t escapeSequences[][5], int32_t escapeSequences_length) +{ + int32_t i, j; + int32_t escN; + int32_t hits = 0; + int32_t misses = 0; + int32_t shifts = 0; + int32_t quality; + + i = 0; + while(i < textLen) { + if(text[i] == 0x1B) { + escN = 0; + while(escN < escapeSequences_length) { + int32_t seq_length = uprv_strlen((const char *) escapeSequences[escN]); + const uint8_t *seq = escapeSequences[escN]; + + j = 1; + while(j < seq_length) { + if(seq[j] != text[i+j]) { + goto checkEscapes; + } + + j += 1; + } + + hits += 1; + i += seq_length-1; + goto scanInput; +checkEscapes: + escN += 1; + } + + misses += 1; + } + + if( text[i]== 0x0e || text[i] == 0x0f){ + shifts += 1; + } + +scanInput: + i += 1; + } + + if (hits == 0) { + return 0; + } + + // + // Initial quality is based on relative proportion of recongized vs. + // unrecognized escape sequences. + // All good: quality = 100; + // half or less good: quality = 0; + // linear inbetween. + quality = (100*hits - 100*misses) / (hits + misses); + + // Back off quality if there were too few escape sequences seen. + // Include shifts in this computation, so that KR does not get penalized + // for having only a single Escape sequence, but many shifts. + if (hits+shifts < 5) { + quality -= (5-(hits+shifts))*10; + } + + if (quality < 0) { + quality = 0; + } + + return quality; +} + + +static const uint8_t escapeSequences_2022JP[][5] = { + {0x1b, 0x24, 0x28, 0x43, 0x00}, // KS X 1001:1992 + {0x1b, 0x24, 0x28, 0x44, 0x00}, // JIS X 212-1990 + {0x1b, 0x24, 0x40, 0x00, 0x00}, // JIS C 6226-1978 + {0x1b, 0x24, 0x41, 0x00, 0x00}, // GB 2312-80 + {0x1b, 0x24, 0x42, 0x00, 0x00}, // JIS X 208-1983 + {0x1b, 0x26, 0x40, 0x00, 0x00}, // JIS X 208 1990, 1997 + {0x1b, 0x28, 0x42, 0x00, 0x00}, // ASCII + {0x1b, 0x28, 0x48, 0x00, 0x00}, // JIS-Roman + {0x1b, 0x28, 0x49, 0x00, 0x00}, // Half-width katakana + {0x1b, 0x28, 0x4a, 0x00, 0x00}, // JIS-Roman + {0x1b, 0x2e, 0x41, 0x00, 0x00}, // ISO 8859-1 + {0x1b, 0x2e, 0x46, 0x00, 0x00} // ISO 8859-7 +}; + +static const uint8_t escapeSequences_2022KR[][5] = { + {0x1b, 0x24, 0x29, 0x43, 0x00} +}; + +static const uint8_t escapeSequences_2022CN[][5] = { + {0x1b, 0x24, 0x29, 0x41, 0x00}, // GB 2312-80 + {0x1b, 0x24, 0x29, 0x47, 0x00}, // CNS 11643-1992 Plane 1 + {0x1b, 0x24, 0x2A, 0x48, 0x00}, // CNS 11643-1992 Plane 2 + {0x1b, 0x24, 0x29, 0x45, 0x00}, // ISO-IR-165 + {0x1b, 0x24, 0x2B, 0x49, 0x00}, // CNS 11643-1992 Plane 3 + {0x1b, 0x24, 0x2B, 0x4A, 0x00}, // CNS 11643-1992 Plane 4 + {0x1b, 0x24, 0x2B, 0x4B, 0x00}, // CNS 11643-1992 Plane 5 + {0x1b, 0x24, 0x2B, 0x4C, 0x00}, // CNS 11643-1992 Plane 6 + {0x1b, 0x24, 0x2B, 0x4D, 0x00}, // CNS 11643-1992 Plane 7 + {0x1b, 0x4e, 0x00, 0x00, 0x00}, // SS2 + {0x1b, 0x4f, 0x00, 0x00, 0x00}, // SS3 +}; + +const char *CharsetRecog_2022JP::getName() const +{ + return "ISO-2022-JP"; +} + +int32_t CharsetRecog_2022JP::match(InputText *textIn) +{ + return match_2022(textIn->fInputBytes, textIn->fInputLen, escapeSequences_2022JP, ARRAY_SIZE(escapeSequences_2022JP)); +} + +const char *CharsetRecog_2022KR::getName() const +{ + return "ISO-2022-KR"; +} + +int32_t CharsetRecog_2022KR::match(InputText *textIn) +{ + return match_2022(textIn->fInputBytes, textIn->fInputLen, escapeSequences_2022KR, ARRAY_SIZE(escapeSequences_2022KR)); +} + +const char *CharsetRecog_2022CN::getName() const +{ + return "ISO-2022-CN"; +} + +int32_t CharsetRecog_2022CN::match(InputText *textIn) +{ + return match_2022(textIn->fInputBytes, textIn->fInputLen, escapeSequences_2022CN, ARRAY_SIZE(escapeSequences_2022CN)); +} + +CharsetRecog_2022::~CharsetRecog_2022() +{ + // nothing to do +} + +U_NAMESPACE_END +#endif diff --git a/icuSources/i18n/csr2022.h b/icuSources/i18n/csr2022.h new file mode 100644 index 00000000..5d34711b --- /dev/null +++ b/icuSources/i18n/csr2022.h @@ -0,0 +1,86 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSR2022_H +#define __CSR2022_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrecog.h" + +U_NAMESPACE_BEGIN + +/** + * class CharsetRecog_2022 part of the ICU charset detection imlementation. + * This is a superclass for the individual detectors for + * each of the detectable members of the ISO 2022 family + * of encodings. + * + * The separate classes are nested within this class. + * + * @internal + */ +class CharsetRecog_2022 : public CharsetRecognizer +{ + +public: + virtual ~CharsetRecog_2022() = 0; + +protected: + + /** + * Matching function shared among the 2022 detectors JP, CN and KR + * Counts up the number of legal an unrecognized escape sequences in + * the sample of text, and computes a score based on the total number & + * the proportion that fit the encoding. + * + * + * @param text the byte buffer containing text to analyse + * @param textLen the size of the text in the byte. + * @param escapeSequences the byte escape sequences to test for. + * @return match quality, in the range of 0-100. + */ + int32_t match_2022(const uint8_t *text, int32_t textLen, const uint8_t escapeSequences[][5], int32_t escapeSequences_length); + +}; + +class CharsetRecog_2022JP :public CharsetRecog_2022 +{ +public: + virtual ~CharsetRecog_2022JP() {} + + const char *getName() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_2022KR :public CharsetRecog_2022 { +public: + virtual ~CharsetRecog_2022KR() {} + + const char *getName() const; + + int32_t match(InputText *textIn); + +}; + +class CharsetRecog_2022CN :public CharsetRecog_2022 +{ +public: + virtual ~CharsetRecog_2022CN() {} + + const char* getName() const; + + int32_t match(InputText *textIn); +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSR2022_H */ diff --git a/icuSources/i18n/csrecog.cpp b/icuSources/i18n/csrecog.cpp new file mode 100644 index 00000000..ba70b154 --- /dev/null +++ b/icuSources/i18n/csrecog.cpp @@ -0,0 +1,28 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrecog.h" + +U_NAMESPACE_BEGIN + +CharsetRecognizer::~CharsetRecognizer() +{ + // nothing to do. +} + +const char *CharsetRecognizer::getLanguage() const +{ + return ""; +} + +U_NAMESPACE_END + +#endif diff --git a/icuSources/i18n/csrecog.h b/icuSources/i18n/csrecog.h new file mode 100644 index 00000000..75cf94f4 --- /dev/null +++ b/icuSources/i18n/csrecog.h @@ -0,0 +1,42 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSRECOG_H +#define __CSRECOG_H + +#include "unicode/uobject.h" + +#if !UCONFIG_NO_CONVERSION + +#include "inputext.h" + +U_NAMESPACE_BEGIN + +class CharsetRecognizer : public UMemory +{ + public: + /** + * Get the IANA name of this charset. + * @return the charset name. + */ + virtual const char *getName() const = 0; + + /** + * Get the ISO language code for this charset. + * @return the language code, or <code>null</code> if the language cannot be determined. + */ + virtual const char *getLanguage() const; + + virtual int32_t match(InputText *textIn) = 0; + + virtual ~CharsetRecognizer(); +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSRECOG_H */ diff --git a/icuSources/i18n/csrmbcs.cpp b/icuSources/i18n/csrmbcs.cpp new file mode 100644 index 00000000..11f70a78 --- /dev/null +++ b/icuSources/i18n/csrmbcs.cpp @@ -0,0 +1,517 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrmbcs.h" + +#include <math.h> + +U_NAMESPACE_BEGIN + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define min(x,y) (((x)<(y))?(x):(y)) + +const int32_t commonChars_sjis [] = { +// TODO: This set of data comes from the character frequency- +// of-occurence analysis tool. The data needs to be moved +// into a resource and loaded from there. +0x8140, 0x8141, 0x8142, 0x8145, 0x815b, 0x8169, 0x816a, 0x8175, 0x8176, 0x82a0, +0x82a2, 0x82a4, 0x82a9, 0x82aa, 0x82ab, 0x82ad, 0x82af, 0x82b1, 0x82b3, 0x82b5, +0x82b7, 0x82bd, 0x82be, 0x82c1, 0x82c4, 0x82c5, 0x82c6, 0x82c8, 0x82c9, 0x82cc, +0x82cd, 0x82dc, 0x82e0, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82f0, 0x82f1, 0x8341, +0x8343, 0x834e, 0x834f, 0x8358, 0x835e, 0x8362, 0x8367, 0x8375, 0x8376, 0x8389, +0x838a, 0x838b, 0x838d, 0x8393, 0x8e96, 0x93fa, 0x95aa}; + +const int32_t commonChars_euc_jp[] = { +// TODO: This set of data comes from the character frequency- +// of-occurence analysis tool. The data needs to be moved +// into a resource and loaded from there. +0xa1a1, 0xa1a2, 0xa1a3, 0xa1a6, 0xa1bc, 0xa1ca, 0xa1cb, 0xa1d6, 0xa1d7, 0xa4a2, +0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4af, 0xa4b1, 0xa4b3, +0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd, 0xa4bf, 0xa4c0, 0xa4c1, 0xa4c3, 0xa4c4, +0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4de, +0xa4df, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ef, +0xa4f2, 0xa4f3, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a6, 0xa5a7, 0xa5aa, 0xa5ad, 0xa5af, +0xa5b0, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b8, 0xa5b9, 0xa5bf, 0xa5c3, 0xa5c6, 0xa5c7, +0xa5c8, 0xa5c9, 0xa5cb, 0xa5d0, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5de, 0xa5e0, 0xa5e1, +0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee, +0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1}; + +const int32_t commonChars_euc_kr[] = { +// TODO: This set of data comes from the character frequency- +// of-occurence analysis tool. The data needs to be moved +// into a resource and loaded from there. +0xb0a1, 0xb0b3, 0xb0c5, 0xb0cd, 0xb0d4, 0xb0e6, 0xb0ed, 0xb0f8, 0xb0fa, 0xb0fc, +0xb1b8, 0xb1b9, 0xb1c7, 0xb1d7, 0xb1e2, 0xb3aa, 0xb3bb, 0xb4c2, 0xb4cf, 0xb4d9, +0xb4eb, 0xb5a5, 0xb5b5, 0xb5bf, 0xb5c7, 0xb5e9, 0xb6f3, 0xb7af, 0xb7c2, 0xb7ce, +0xb8a6, 0xb8ae, 0xb8b6, 0xb8b8, 0xb8bb, 0xb8e9, 0xb9ab, 0xb9ae, 0xb9cc, 0xb9ce, +0xb9fd, 0xbab8, 0xbace, 0xbad0, 0xbaf1, 0xbbe7, 0xbbf3, 0xbbfd, 0xbcad, 0xbcba, +0xbcd2, 0xbcf6, 0xbdba, 0xbdc0, 0xbdc3, 0xbdc5, 0xbec6, 0xbec8, 0xbedf, 0xbeee, +0xbef8, 0xbefa, 0xbfa1, 0xbfa9, 0xbfc0, 0xbfe4, 0xbfeb, 0xbfec, 0xbff8, 0xc0a7, +0xc0af, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0c7, 0xc0cc, 0xc0ce, 0xc0cf, 0xc0d6, +0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6, +0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad}; + +const int32_t commonChars_big5[] = { +// TODO: This set of data comes from the character frequency- +// of-occurence analysis tool. The data needs to be moved +// into a resource and loaded from there. +0xa140, 0xa141, 0xa142, 0xa143, 0xa147, 0xa149, 0xa175, 0xa176, 0xa440, 0xa446, +0xa447, 0xa448, 0xa451, 0xa454, 0xa457, 0xa464, 0xa46a, 0xa46c, 0xa477, 0xa4a3, +0xa4a4, 0xa4a7, 0xa4c1, 0xa4ce, 0xa4d1, 0xa4df, 0xa4e8, 0xa4fd, 0xa540, 0xa548, +0xa558, 0xa569, 0xa5cd, 0xa5e7, 0xa657, 0xa661, 0xa662, 0xa668, 0xa670, 0xa6a8, +0xa6b3, 0xa6b9, 0xa6d3, 0xa6db, 0xa6e6, 0xa6f2, 0xa740, 0xa751, 0xa759, 0xa7da, +0xa8a3, 0xa8a5, 0xa8ad, 0xa8d1, 0xa8d3, 0xa8e4, 0xa8fc, 0xa9c0, 0xa9d2, 0xa9f3, +0xaa6b, 0xaaba, 0xaabe, 0xaacc, 0xaafc, 0xac47, 0xac4f, 0xacb0, 0xacd2, 0xad59, +0xaec9, 0xafe0, 0xb0ea, 0xb16f, 0xb2b3, 0xb2c4, 0xb36f, 0xb44c, 0xb44e, 0xb54c, +0xb5a5, 0xb5bd, 0xb5d0, 0xb5d8, 0xb671, 0xb7ed, 0xb867, 0xb944, 0xbad8, 0xbb44, +0xbba1, 0xbdd1, 0xc2c4, 0xc3b9, 0xc440, 0xc45f}; + +const int32_t commonChars_gb_18030[] = { +// TODO: This set of data comes from the character frequency- +// of-occurence analysis tool. The data needs to be moved +// into a resource and loaded from there. +0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1b0, 0xa1b1, 0xa1f1, 0xa1f3, 0xa3a1, 0xa3ac, +0xa3ba, 0xb1a8, 0xb1b8, 0xb1be, 0xb2bb, 0xb3c9, 0xb3f6, 0xb4f3, 0xb5bd, 0xb5c4, +0xb5e3, 0xb6af, 0xb6d4, 0xb6e0, 0xb7a2, 0xb7a8, 0xb7bd, 0xb7d6, 0xb7dd, 0xb8b4, +0xb8df, 0xb8f6, 0xb9ab, 0xb9c9, 0xb9d8, 0xb9fa, 0xb9fd, 0xbacd, 0xbba7, 0xbbd6, +0xbbe1, 0xbbfa, 0xbcbc, 0xbcdb, 0xbcfe, 0xbdcc, 0xbecd, 0xbedd, 0xbfb4, 0xbfc6, +0xbfc9, 0xc0b4, 0xc0ed, 0xc1cb, 0xc2db, 0xc3c7, 0xc4dc, 0xc4ea, 0xc5cc, 0xc6f7, +0xc7f8, 0xc8ab, 0xc8cb, 0xc8d5, 0xc8e7, 0xc9cf, 0xc9fa, 0xcab1, 0xcab5, 0xcac7, +0xcad0, 0xcad6, 0xcaf5, 0xcafd, 0xccec, 0xcdf8, 0xceaa, 0xcec4, 0xced2, 0xcee5, +0xcfb5, 0xcfc2, 0xcfd6, 0xd0c2, 0xd0c5, 0xd0d0, 0xd0d4, 0xd1a7, 0xd2aa, 0xd2b2, +0xd2b5, 0xd2bb, 0xd2d4, 0xd3c3, 0xd3d0, 0xd3fd, 0xd4c2, 0xd4da, 0xd5e2, 0xd6d0}; + +static int32_t binarySearch(const int32_t *array, int32_t len, int32_t value) +{ + int32_t start = 0, end = len-1; + int32_t mid = (start+end)/2; + + while(start <= end) { + if(array[mid] == value) { + return mid; + } + + if(array[mid] < value){ + start = mid+1; + } else { + end = mid-1; + } + + mid = (start+end)/2; + } + + return -1; +} + +IteratedChar::IteratedChar():charValue(0), index(0), nextIndex(0), error(FALSE), done(FALSE) +{ + // nothing else to do. +} + +void IteratedChar::reset() +{ + charValue = 0; + index = -1; + nextIndex = 0; + error = FALSE; + done = FALSE; +} + +int32_t IteratedChar::nextByte(InputText *det) +{ + if (nextIndex >= det->fRawLength) { + done = TRUE; + + return -1; + } + + return det->fRawInput[nextIndex++]; +} + +CharsetRecog_mbcs::~CharsetRecog_mbcs() +{ + // nothing to do. +} + +int32_t CharsetRecog_mbcs::match_mbcs(InputText *det, const int32_t commonChars[], int32_t commonCharsLen) { + int singleByteCharCount = 0; + int doubleByteCharCount = 0; + int commonCharCount = 0; + int badCharCount = 0; + int totalCharCount = 0; + int confidence = 0; + IteratedChar *iter = new IteratedChar(); + + // { + for (iter->reset(); nextChar(iter, det);) { + totalCharCount += 1; + + if (iter->error) { + badCharCount += 1; + } else { + if (iter->charValue <= 0xFF) { + singleByteCharCount += 1; + } else { + doubleByteCharCount += 1; + + if (commonChars != 0) { + if (binarySearch(commonChars, commonCharsLen, iter->charValue) >= 0){ + commonCharCount += 1; + } + } + } + } + + + if (badCharCount >= 2 && badCharCount*5 >= doubleByteCharCount) { + // Bail out early if the byte data is not matching the encoding scheme. + // break detectBlock; + delete iter; + return confidence; + } + } + + delete iter; + + if (doubleByteCharCount <= 10 && badCharCount == 0) { + // Not many multi-byte chars. + // ASCII or ISO file? It's probably not our encoding, + // but is not incompatible with our encoding, so don't give it a zero. + confidence = 10; + + return confidence; + } + + // + // No match if there are too many characters that don't fit the encoding scheme. + // (should we have zero tolerance for these?) + // + if (doubleByteCharCount < 20*badCharCount) { + confidence = 0; + + return confidence; + } + + if (commonChars == 0) { + // We have no statistics on frequently occuring characters. + // Assess confidence purely on having a reasonable number of + // multi-byte characters (the more the better) + confidence = 30 + doubleByteCharCount - 20*badCharCount; + + if (confidence > 100) { + confidence = 100; + } + } else { + // + // Frequency of occurence statistics exist. + // + + double maxVal = log10((double)doubleByteCharCount / 4); /*(float)?*/ + double scaleFactor = 90.0 / maxVal; + confidence = (int32_t)(log10((double)commonCharCount+1) * scaleFactor + 10.0); + + confidence = min(confidence, 100); + } + + if (confidence < 0) { + confidence = 0; + } + + return confidence; +} + +CharsetRecog_sjis::~CharsetRecog_sjis() +{ + // nothing to do +} + +UBool CharsetRecog_sjis::nextChar(IteratedChar* it, InputText* det) { + it->index = it->nextIndex; + it->error = FALSE; + + int32_t firstByte = it->charValue = it->nextByte(det); + + if (firstByte < 0) { + return FALSE; + } + + if (firstByte <= 0x7F || (firstByte > 0xA0 && firstByte <= 0xDF)) { + return TRUE; + } + + int32_t secondByte = it->nextByte(det); + + if (secondByte < 0) { + return FALSE; + } + it->charValue = (firstByte << 8) | secondByte; + if (! ((secondByte >= 0x40 && secondByte <= 0x7F) || (secondByte >= 0x80 && secondByte <= 0xFE))) { + // Illegal second byte value. + it->error = TRUE; + } + + return TRUE; +} + +int32_t CharsetRecog_sjis::match(InputText* det) +{ + return match_mbcs(det, commonChars_sjis, ARRAY_SIZE(commonChars_sjis)); +} + +const char *CharsetRecog_sjis::getName() const +{ + return "Shift_JIS"; +} + +const char *CharsetRecog_sjis::getLanguage() const +{ + return "ja"; +} + +CharsetRecog_euc::~CharsetRecog_euc() +{ + // nothing to do +} + +UBool CharsetRecog_euc::nextChar(IteratedChar* it, InputText* det) { + int32_t firstByte = 0; + int32_t secondByte = 0; + int32_t thirdByte = 0; + // int32_t fourthByte = 0; + + it->index = it->nextIndex; + it->error = FALSE; + firstByte = it->charValue = it->nextByte(det); + + if (firstByte < 0) { + // Ran off the end of the input data + it->done = TRUE; + + return (! it->done); + } + + if (firstByte <= 0x8D) { + // single byte char + return (! it->done); + } + + secondByte = it->nextByte(det); + it->charValue = (it->charValue << 8) | secondByte; + + if (firstByte >= 0xA1 && firstByte <= 0xFE) { + // Two byte Char + if (secondByte < 0xA1) { + it->error = TRUE; + } + + return (! it->done); + } + + if (firstByte == 0x8E) { + // Code Set 2. + // In EUC-JP, total char size is 2 bytes, only one byte of actual char value. + // In EUC-TW, total char size is 4 bytes, three bytes contribute to char value. + // We don't know which we've got. + // Treat it like EUC-JP. If the data really was EUC-TW, the following two + // bytes will look like a well formed 2 byte char. + if (secondByte < 0xA1) { + it->error = TRUE; + } + + return (! it->done); + } + + if (firstByte == 0x8F) { + // Code set 3. + // Three byte total char size, two bytes of actual char value. + thirdByte = it->nextByte(det); + it->charValue = (it->charValue << 8) | thirdByte; + + if (thirdByte < 0xa1) { + it->error = TRUE; + } + } + + return (! it->done); + +} + +CharsetRecog_euc_jp::~CharsetRecog_euc_jp() +{ + // nothing to do +} + +const char *CharsetRecog_euc_jp::getName() const +{ + return "EUC-JP"; +} + +const char *CharsetRecog_euc_jp::getLanguage() const +{ + return "ja"; +} + +int32_t CharsetRecog_euc_jp::match(InputText *det) +{ + return match_mbcs(det, commonChars_euc_jp, ARRAY_SIZE(commonChars_euc_jp)); +} + +CharsetRecog_euc_kr::~CharsetRecog_euc_kr() +{ + // nothing to do +} + +const char *CharsetRecog_euc_kr::getName() const +{ + return "EUC-KR"; +} + +const char *CharsetRecog_euc_kr::getLanguage() const +{ + return "ko"; +} + +int32_t CharsetRecog_euc_kr::match(InputText *det) +{ + return match_mbcs(det, commonChars_euc_kr, ARRAY_SIZE(commonChars_euc_kr)); +} + +CharsetRecog_big5::~CharsetRecog_big5() +{ + // nothing to do +} + +UBool CharsetRecog_big5::nextChar(IteratedChar* it, InputText* det) +{ + int32_t firstByte; + + it->index = it->nextIndex; + it->error = FALSE; + firstByte = it->charValue = it->nextByte(det); + + if (firstByte < 0) { + return FALSE; + } + + if (firstByte <= 0x7F || firstByte == 0xFF) { + // single byte character. + return TRUE; + } + + int32_t secondByte = it->nextByte(det); + + if (secondByte < 0) { + return FALSE; + } + + it->charValue = (it->charValue << 8) | secondByte; + + if (secondByte < 0x40 || + secondByte == 0x7F || + secondByte == 0xFF) { + it->error = TRUE; + } + + return TRUE; +} + +const char *CharsetRecog_big5::getName() const +{ + return "Big5"; +} + +const char *CharsetRecog_big5::getLanguage() const +{ + return "zh"; +} + +int32_t CharsetRecog_big5::match(InputText *det) +{ + return match_mbcs(det, commonChars_big5, ARRAY_SIZE(commonChars_big5)); +} + +CharsetRecog_gb_18030::~CharsetRecog_gb_18030() +{ + // nothing to do +} + +UBool CharsetRecog_gb_18030::nextChar(IteratedChar* it, InputText* det) { + int32_t firstByte = 0; + int32_t secondByte = 0; + int32_t thirdByte = 0; + int32_t fourthByte = 0; + + it->index = it->nextIndex; + it->error = FALSE; + firstByte = it->charValue = it->nextByte(det); + + if (firstByte < 0) { + // Ran off the end of the input data + it->done = TRUE; + + return (! it->done); + } + + if (firstByte <= 0x80) { + // single byte char + return (! it->done); + } + + secondByte = it->nextByte(det); + it->charValue = (it->charValue << 8) | secondByte; + + if (firstByte >= 0x81 && firstByte <= 0xFE) { + // Two byte Char + if ((secondByte >= 0x40 && secondByte <= 0x7E) || (secondByte >=80 && secondByte <= 0xFE)) { + return (! it->done); + } + + // Four byte char + if (secondByte >= 0x30 && secondByte <= 0x39) { + thirdByte = it->nextByte(det); + + if (thirdByte >= 0x81 && thirdByte <= 0xFE) { + fourthByte = it->nextByte(det); + + if (fourthByte >= 0x30 && fourthByte <= 0x39) { + it->charValue = (it->charValue << 16) | (thirdByte << 8) | fourthByte; + + return (! it->done); + } + } + } + + it->error = TRUE; + + return (! it->done); + } + + return (! it->done); +} + +const char *CharsetRecog_gb_18030::getName() const +{ + return "GB18030"; +} + +const char *CharsetRecog_gb_18030::getLanguage() const +{ + return "zh"; +} + +int32_t CharsetRecog_gb_18030::match(InputText *det) +{ + return match_mbcs(det, commonChars_gb_18030, ARRAY_SIZE(commonChars_gb_18030)); +} + +U_NAMESPACE_END +#endif diff --git a/icuSources/i18n/csrmbcs.h b/icuSources/i18n/csrmbcs.h new file mode 100644 index 00000000..69457f6c --- /dev/null +++ b/icuSources/i18n/csrmbcs.h @@ -0,0 +1,205 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSRMBCS_H +#define __CSRMBCS_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrecog.h" + +U_NAMESPACE_BEGIN + +// "Character" iterated character class. +// Recognizers for specific mbcs encodings make their "characters" available +// by providing a nextChar() function that fills in an instance of IteratedChar +// with the next char from the input. +// The returned characters are not converted to Unicode, but remain as the raw +// bytes (concatenated into an int) from the codepage data. +// +// For Asian charsets, use the raw input rather than the input that has been +// stripped of markup. Detection only considers multi-byte chars, effectively +// stripping markup anyway, and double byte chars do occur in markup too. +// +class IteratedChar : public UMemory +{ +public: + int32_t charValue; // 1-4 bytes from the raw input data + int32_t index; + int32_t nextIndex; + UBool error; + UBool done; + +public: + IteratedChar(); + void reset(); + int32_t nextByte(InputText* det); +}; + + +class CharsetRecog_mbcs : public CharsetRecognizer { + +protected: + /** + * Test the match of this charset with the input text data + * which is obtained via the CharsetDetector object. + * + * @param det The CharsetDetector, which contains the input text + * to be checked for being in this charset. + * @return Two values packed into one int (Damn java, anyhow) + * <br/> + * bits 0-7: the match confidence, ranging from 0-100 + * <br/> + * bits 8-15: The match reason, an enum-like value. + */ + int32_t match_mbcs(InputText* det, const int32_t commonChars[], int32_t commonCharsLen); + +public: + + virtual ~CharsetRecog_mbcs(); + + /** + * Get the IANA name of this charset. + * @return the charset name. + */ + + const char *getName() const = 0; + const char *getLanguage() const = 0; + int32_t match(InputText* det) = 0; + + /** + * Get the next character (however many bytes it is) from the input data + * Subclasses for specific charset encodings must implement this function + * to get characters according to the rules of their encoding scheme. + * + * This function is not a method of class IteratedChar only because + * that would require a lot of extra derived classes, which is awkward. + * @param it The IteratedChar "struct" into which the returned char is placed. + * @param det The charset detector, which is needed to get at the input byte data + * being iterated over. + * @return True if a character was returned, false at end of input. + */ + virtual UBool nextChar(IteratedChar *it, InputText *textIn) = 0; + +}; + + +/** + * Shift-JIS charset recognizer. + * + */ +class CharsetRecog_sjis : public CharsetRecog_mbcs { +public: + virtual ~CharsetRecog_sjis(); + + UBool nextChar(IteratedChar *it, InputText *det); + + int32_t match(InputText *det); + + const char *getName() const; + const char *getLanguage() const; + +}; + + +/** + * EUC charset recognizers. One abstract class that provides the common function + * for getting the next character according to the EUC encoding scheme, + * and nested derived classes for EUC_KR, EUC_JP, EUC_CN. + * + */ +class CharsetRecog_euc : public CharsetRecog_mbcs +{ +public: + virtual ~CharsetRecog_euc(); + + const char *getName() const = 0; + const char *getLanguage() const = 0; + + int32_t match(InputText* det) = 0; + /* + * (non-Javadoc) + * Get the next character value for EUC based encodings. + * Character "value" is simply the raw bytes that make up the character + * packed into an int. + */ + UBool nextChar(IteratedChar *it, InputText *det); +}; + +/** + * The charset recognize for EUC-JP. A singleton instance of this class + * is created and kept by the public CharsetDetector class + */ +class CharsetRecog_euc_jp : public CharsetRecog_euc +{ +public: + virtual ~CharsetRecog_euc_jp(); + + const char *getName() const; + const char *getLanguage() const; + + int32_t match(InputText *det); +}; + +/** + * The charset recognize for EUC-KR. A singleton instance of this class + * is created and kept by the public CharsetDetector class + */ +class CharsetRecog_euc_kr : public CharsetRecog_euc +{ +public: + virtual ~CharsetRecog_euc_kr(); + + const char *getName() const; + const char *getLanguage() const; + + int32_t match(InputText *det); +}; + +/** + * + * Big5 charset recognizer. + * + */ +class CharsetRecog_big5 : public CharsetRecog_mbcs +{ +public: + virtual ~CharsetRecog_big5(); + + UBool nextChar(IteratedChar* it, InputText* det); + + const char *getName() const; + const char *getLanguage() const; + + int32_t match(InputText *det); +}; + + +/** + * + * GB-18030 recognizer. Uses simplified Chinese statistics. + * + */ +class CharsetRecog_gb_18030 : public CharsetRecog_mbcs +{ +public: + virtual ~CharsetRecog_gb_18030(); + + UBool nextChar(IteratedChar* it, InputText* det); + + const char *getName() const; + const char *getLanguage() const; + + int32_t match(InputText *det); +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSRMBCS_H */ diff --git a/icuSources/i18n/csrsbcs.cpp b/icuSources/i18n/csrsbcs.cpp new file mode 100644 index 00000000..ddf5aedf --- /dev/null +++ b/icuSources/i18n/csrsbcs.cpp @@ -0,0 +1,1099 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION +#include "csrsbcs.h" + +#include <stdio.h> + +#define N_GRAM_SIZE 3 +#define N_GRAM_MASK 0xFFFFFF + +U_NAMESPACE_BEGIN + +NGramParser::NGramParser(const int32_t *theNgramList, const uint8_t *theCharMap) + :byteIndex(0), ngram(0) +{ + ngramList = theNgramList; + charMap = theCharMap; + + ngramCount = hitCount = 0; +} + +/* + * Binary search for value in table, which must have exactly 64 entries. + */ + +int32_t NGramParser::search(const int32_t *table, int32_t value) +{ + int32_t index = 0; + + if (table[index + 32] <= value) { + index += 32; + } + + if (table[index + 16] <= value) { + index += 16; + } + + if (table[index + 8] <= value) { + index += 8; + } + + if (table[index + 4] <= value) { + index += 4; + } + + if (table[index + 2] <= value) { + index += 2; + } + + if (table[index + 1] <= value) { + index += 1; + } + + if (table[index] > value) { + index -= 1; + } + + if (index < 0 || table[index] != value) { + return -1; + } + + return index; +} + +void NGramParser::lookup(int32_t thisNgram) +{ + ngramCount += 1; + + if (search(ngramList, thisNgram) >= 0) { + hitCount += 1; + } + +} + +void NGramParser::addByte(int32_t b) +{ + ngram = ((ngram << 8) + b) & N_GRAM_MASK; + lookup(ngram); +} + +int32_t NGramParser::nextByte(InputText *det) +{ + if (byteIndex >= det->fInputLen) { + return -1; + } + + return det->fInputBytes[byteIndex++]; +} + +int32_t NGramParser::parse(InputText *det) +{ + int32_t b; + bool ignoreSpace = FALSE; + + while ((b = nextByte(det)) >= 0) { + uint8_t mb = charMap[b]; + + // TODO: 0x20 might not be a space in all character sets... + if (mb != 0) { + if (!(mb == 0x20 && ignoreSpace)) { + addByte(mb); + } + + ignoreSpace = (mb == 0x20); + } + } + + // TODO: Is this OK? The buffer could have ended in the middle of a word... + addByte(0x20); + + double rawPercent = (double) hitCount / (double) ngramCount; + + // if (rawPercent <= 2.0) { + // return 0; + // } + + // TODO - This is a bit of a hack to take care of a case + // were we were getting a confidence of 135... + if (rawPercent > 0.33) { + return 98; + } + + return (int32_t) (rawPercent * 300.0); +} + +CharsetRecog_sbcs::CharsetRecog_sbcs() +: haveC1Bytes(FALSE) +{ + // nothing else to do +} + +CharsetRecog_sbcs::~CharsetRecog_sbcs() +{ + // nothing to do +} + +int32_t CharsetRecog_sbcs::match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t byteMap[]) +{ + NGramParser *parser = new NGramParser(ngrams, byteMap); + int32_t result; + + haveC1Bytes = det->fC1Bytes; + result = parser->parse(det); + delete parser; + + return result; +} + +static const uint8_t charMap_8859_1[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, +}; + +static const uint8_t charMap_8859_2[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20, + 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, + 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7, + 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20, +}; + +static const uint8_t charMap_8859_5[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, +}; + +static const uint8_t charMap_8859_6[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +}; + +static const uint8_t charMap_8859_7[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20, + 0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE, + 0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20, +}; + +static const uint8_t charMap_8859_8[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0x20, 0x20, 0x20, 0x20, 0x20, +}; + +static const uint8_t charMap_8859_9[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 0xFE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, +}; + +static const int32_t ngrams_windows_1251[] = { + 0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE, + 0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED, + 0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2, + 0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520, +}; + +static const uint8_t charMap_windows_1251[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, + 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, + 0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20, + 0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF, + 0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20, + 0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, +}; + +static const int32_t ngrams_windows_1256[] = { + 0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8, + 0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD, + 0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20, + 0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420, +}; + +static const uint8_t charMap_windows_1256[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, + 0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F, + 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20, + 0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF, +}; + +static const int32_t ngrams_KOI8_R[] = { + 0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1, + 0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE, + 0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1, + 0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF, +}; + +static const uint8_t charMap_KOI8_R[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, +}; + +//ISO-8859-1,2,5,6,7,8,9 Ngrams +static const int32_t ngrams_8859_1_en[] = { + 0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F, + 0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74, + 0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420, + 0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320, +}; + +static const int32_t ngrams_8859_1_da[] = { + 0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620, + 0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320, + 0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520, + 0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572, +}; + +static const int32_t ngrams_8859_1_de[] = { + 0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F, + 0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220, + 0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465, + 0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572, +}; + +static const int32_t ngrams_8859_1_es[] = { + 0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, + 0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C, + 0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064, + 0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20, +}; + +static const int32_t ngrams_8859_1_fr[] = { + 0x206175, 0x20636F, 0x206461, 0x206465, 0x206475, 0x20656E, 0x206574, 0x206C61, 0x206C65, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207365, 0x20736F, 0x20756E, + 0x20E020, 0x616E74, 0x617469, 0x636520, 0x636F6E, 0x646520, 0x646573, 0x647520, 0x652061, 0x652063, 0x652064, 0x652065, 0x65206C, 0x652070, 0x652073, 0x656E20, + 0x656E74, 0x657220, 0x657320, 0x657420, 0x657572, 0x696F6E, 0x697320, 0x697420, 0x6C6120, 0x6C6520, 0x6C6573, 0x6D656E, 0x6E2064, 0x6E6520, 0x6E7320, 0x6E7420, + 0x6F6E20, 0x6F6E74, 0x6F7572, 0x717565, 0x72206C, 0x726520, 0x732061, 0x732064, 0x732065, 0x73206C, 0x732070, 0x742064, 0x746520, 0x74696F, 0x756520, 0x757220, +}; + +static const int32_t ngrams_8859_1_it[] = { + 0x20616C, 0x206368, 0x20636F, 0x206465, 0x206469, 0x206520, 0x20696C, 0x20696E, 0x206C61, 0x207065, 0x207072, 0x20756E, 0x612063, 0x612064, 0x612070, 0x612073, + 0x61746F, 0x636865, 0x636F6E, 0x64656C, 0x646920, 0x652061, 0x652063, 0x652064, 0x652069, 0x65206C, 0x652070, 0x652073, 0x656C20, 0x656C6C, 0x656E74, 0x657220, + 0x686520, 0x692061, 0x692063, 0x692064, 0x692073, 0x696120, 0x696C20, 0x696E20, 0x696F6E, 0x6C6120, 0x6C6520, 0x6C6920, 0x6C6C61, 0x6E6520, 0x6E6920, 0x6E6F20, + 0x6E7465, 0x6F2061, 0x6F2064, 0x6F2069, 0x6F2073, 0x6F6E20, 0x6F6E65, 0x706572, 0x726120, 0x726520, 0x736920, 0x746120, 0x746520, 0x746920, 0x746F20, 0x7A696F, +}; + +static const int32_t ngrams_8859_1_nl[] = { + 0x20616C, 0x206265, 0x206461, 0x206465, 0x206469, 0x206565, 0x20656E, 0x206765, 0x206865, 0x20696E, 0x206D61, 0x206D65, 0x206F70, 0x207465, 0x207661, 0x207665, + 0x20766F, 0x207765, 0x207A69, 0x61616E, 0x616172, 0x616E20, 0x616E64, 0x617220, 0x617420, 0x636874, 0x646520, 0x64656E, 0x646572, 0x652062, 0x652076, 0x65656E, + 0x656572, 0x656E20, 0x657220, 0x657273, 0x657420, 0x67656E, 0x686574, 0x696520, 0x696E20, 0x696E67, 0x697320, 0x6E2062, 0x6E2064, 0x6E2065, 0x6E2068, 0x6E206F, + 0x6E2076, 0x6E6465, 0x6E6720, 0x6F6E64, 0x6F6F72, 0x6F7020, 0x6F7220, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x76616E, 0x766572, 0x766F6F, +}; + +static const int32_t ngrams_8859_1_no[] = { + 0x206174, 0x206176, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207365, 0x20736B, 0x20736F, 0x207374, 0x207469, + 0x207669, 0x20E520, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646574, 0x652073, 0x656420, 0x656E20, 0x656E65, 0x657220, 0x657265, 0x657420, 0x657474, + 0x666F72, 0x67656E, 0x696B6B, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6520, 0x6C6C65, 0x6D6564, 0x6D656E, 0x6E2073, 0x6E6520, 0x6E6720, 0x6E6765, 0x6E6E65, + 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722073, 0x726520, 0x736F6D, 0x737465, 0x742073, 0x746520, 0x74656E, 0x746572, 0x74696C, 0x747420, 0x747465, 0x766572, +}; + +static const int32_t ngrams_8859_1_pt[] = { + 0x206120, 0x20636F, 0x206461, 0x206465, 0x20646F, 0x206520, 0x206573, 0x206D61, 0x206E6F, 0x206F20, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, + 0x20756D, 0x612061, 0x612063, 0x612064, 0x612070, 0x616465, 0x61646F, 0x616C20, 0x617220, 0x617261, 0x617320, 0x636F6D, 0x636F6E, 0x646120, 0x646520, 0x646F20, + 0x646F73, 0x652061, 0x652064, 0x656D20, 0x656E74, 0x657320, 0x657374, 0x696120, 0x696361, 0x6D656E, 0x6E7465, 0x6E746F, 0x6F2061, 0x6F2063, 0x6F2064, 0x6F2065, + 0x6F2070, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732061, 0x732064, 0x732065, 0x732070, 0x737461, 0x746520, 0x746F20, 0x756520, 0xE36F20, 0xE7E36F, +}; + +static const int32_t ngrams_8859_1_sv[] = { + 0x206174, 0x206176, 0x206465, 0x20656E, 0x2066F6, 0x206861, 0x206920, 0x20696E, 0x206B6F, 0x206D65, 0x206F63, 0x2070E5, 0x20736B, 0x20736F, 0x207374, 0x207469, + 0x207661, 0x207669, 0x20E472, 0x616465, 0x616E20, 0x616E64, 0x617220, 0x617474, 0x636820, 0x646520, 0x64656E, 0x646572, 0x646574, 0x656420, 0x656E20, 0x657220, + 0x657420, 0x66F672, 0x67656E, 0x696C6C, 0x696E67, 0x6B6120, 0x6C6C20, 0x6D6564, 0x6E2073, 0x6E6120, 0x6E6465, 0x6E6720, 0x6E6765, 0x6E696E, 0x6F6368, 0x6F6D20, + 0x6F6E20, 0x70E520, 0x722061, 0x722073, 0x726120, 0x736B61, 0x736F6D, 0x742073, 0x746120, 0x746520, 0x746572, 0x74696C, 0x747420, 0x766172, 0xE47220, 0xF67220, +}; + +static const int32_t ngrams_8859_2_cs[] = { + 0x206120, 0x206279, 0x20646F, 0x206A65, 0x206E61, 0x206E65, 0x206F20, 0x206F64, 0x20706F, 0x207072, 0x2070F8, 0x20726F, 0x207365, 0x20736F, 0x207374, 0x20746F, + 0x207620, 0x207679, 0x207A61, 0x612070, 0x636520, 0x636820, 0x652070, 0x652073, 0x652076, 0x656D20, 0x656EED, 0x686F20, 0x686F64, 0x697374, 0x6A6520, 0x6B7465, + 0x6C6520, 0x6C6920, 0x6E6120, 0x6EE920, 0x6EEC20, 0x6EED20, 0x6F2070, 0x6F646E, 0x6F6A69, 0x6F7374, 0x6F7520, 0x6F7661, 0x706F64, 0x706F6A, 0x70726F, 0x70F865, + 0x736520, 0x736F75, 0x737461, 0x737469, 0x73746E, 0x746572, 0x746EED, 0x746F20, 0x752070, 0xBE6520, 0xE16EED, 0xE9686F, 0xED2070, 0xED2073, 0xED6D20, 0xF86564, +}; + +static const int32_t ngrams_8859_2_hu[] = { + 0x206120, 0x20617A, 0x206265, 0x206567, 0x20656C, 0x206665, 0x206861, 0x20686F, 0x206973, 0x206B65, 0x206B69, 0x206BF6, 0x206C65, 0x206D61, 0x206D65, 0x206D69, + 0x206E65, 0x20737A, 0x207465, 0x20E973, 0x612061, 0x61206B, 0x61206D, 0x612073, 0x616B20, 0x616E20, 0x617A20, 0x62616E, 0x62656E, 0x656779, 0x656B20, 0x656C20, + 0x656C65, 0x656D20, 0x656E20, 0x657265, 0x657420, 0x657465, 0x657474, 0x677920, 0x686F67, 0x696E74, 0x697320, 0x6B2061, 0x6BF67A, 0x6D6567, 0x6D696E, 0x6E2061, + 0x6E616B, 0x6E656B, 0x6E656D, 0x6E7420, 0x6F6779, 0x732061, 0x737A65, 0x737A74, 0x737AE1, 0x73E967, 0x742061, 0x747420, 0x74E173, 0x7A6572, 0xE16E20, 0xE97320, +}; + +static const int32_t ngrams_8859_2_pl[] = { + 0x20637A, 0x20646F, 0x206920, 0x206A65, 0x206B6F, 0x206D61, 0x206D69, 0x206E61, 0x206E69, 0x206F64, 0x20706F, 0x207072, 0x207369, 0x207720, 0x207769, 0x207779, + 0x207A20, 0x207A61, 0x612070, 0x612077, 0x616E69, 0x636820, 0x637A65, 0x637A79, 0x646F20, 0x647A69, 0x652070, 0x652073, 0x652077, 0x65207A, 0x65676F, 0x656A20, + 0x656D20, 0x656E69, 0x676F20, 0x696120, 0x696520, 0x69656A, 0x6B6120, 0x6B6920, 0x6B6965, 0x6D6965, 0x6E6120, 0x6E6961, 0x6E6965, 0x6F2070, 0x6F7761, 0x6F7769, + 0x706F6C, 0x707261, 0x70726F, 0x70727A, 0x727A65, 0x727A79, 0x7369EA, 0x736B69, 0x737461, 0x776965, 0x796368, 0x796D20, 0x7A6520, 0x7A6965, 0x7A7920, 0xF37720, +}; + +static const int32_t ngrams_8859_2_ro[] = { + 0x206120, 0x206163, 0x206361, 0x206365, 0x20636F, 0x206375, 0x206465, 0x206469, 0x206C61, 0x206D61, 0x207065, 0x207072, 0x207365, 0x2073E3, 0x20756E, 0x20BA69, + 0x20EE6E, 0x612063, 0x612064, 0x617265, 0x617420, 0x617465, 0x617520, 0x636172, 0x636F6E, 0x637520, 0x63E320, 0x646520, 0x652061, 0x652063, 0x652064, 0x652070, + 0x652073, 0x656120, 0x656920, 0x656C65, 0x656E74, 0x657374, 0x692061, 0x692063, 0x692064, 0x692070, 0x696520, 0x696920, 0x696E20, 0x6C6120, 0x6C6520, 0x6C6F72, + 0x6C7569, 0x6E6520, 0x6E7472, 0x6F7220, 0x70656E, 0x726520, 0x726561, 0x727520, 0x73E320, 0x746520, 0x747275, 0x74E320, 0x756920, 0x756C20, 0xBA6920, 0xEE6E20, +}; + +static const int32_t ngrams_8859_5_ru[] = { + 0x20D220, 0x20D2DE, 0x20D4DE, 0x20D7D0, 0x20D820, 0x20DAD0, 0x20DADE, 0x20DDD0, 0x20DDD5, 0x20DED1, 0x20DFDE, 0x20DFE0, 0x20E0D0, 0x20E1DE, 0x20E1E2, 0x20E2DE, + 0x20E7E2, 0x20EDE2, 0xD0DDD8, 0xD0E2EC, 0xD3DE20, 0xD5DBEC, 0xD5DDD8, 0xD5E1E2, 0xD5E220, 0xD820DF, 0xD8D520, 0xD8D820, 0xD8EF20, 0xDBD5DD, 0xDBD820, 0xDBECDD, + 0xDDD020, 0xDDD520, 0xDDD8D5, 0xDDD8EF, 0xDDDE20, 0xDDDED2, 0xDE20D2, 0xDE20DF, 0xDE20E1, 0xDED220, 0xDED2D0, 0xDED3DE, 0xDED920, 0xDEDBEC, 0xDEDC20, 0xDEE1E2, + 0xDFDEDB, 0xDFE0D5, 0xDFE0D8, 0xDFE0DE, 0xE0D0D2, 0xE0D5D4, 0xE1E2D0, 0xE1E2D2, 0xE1E2D8, 0xE1EF20, 0xE2D5DB, 0xE2DE20, 0xE2DEE0, 0xE2EC20, 0xE7E2DE, 0xEBE520, +}; + +static const int32_t ngrams_8859_6_ar[] = { + 0x20C7E4, 0x20C7E6, 0x20C8C7, 0x20D9E4, 0x20E1EA, 0x20E4E4, 0x20E5E6, 0x20E8C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E420, 0xC7E4C3, 0xC7E4C7, 0xC7E4C8, + 0xC7E4CA, 0xC7E4CC, 0xC7E4CD, 0xC7E4CF, 0xC7E4D3, 0xC7E4D9, 0xC7E4E2, 0xC7E4E5, 0xC7E4E8, 0xC7E4EA, 0xC7E520, 0xC7E620, 0xC7E6CA, 0xC820C7, 0xC920C7, 0xC920E1, + 0xC920E4, 0xC920E5, 0xC920E8, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xD920C7, 0xD9E4E9, 0xE1EA20, 0xE420C7, 0xE4C920, 0xE4E920, 0xE4EA20, + 0xE520C7, 0xE5C720, 0xE5C920, 0xE5E620, 0xE620C7, 0xE720C7, 0xE7C720, 0xE8C7E4, 0xE8E620, 0xE920C7, 0xEA20C7, 0xEA20E5, 0xEA20E8, 0xEAC920, 0xEAD120, 0xEAE620, +}; + +static const int32_t ngrams_8859_7_el[] = { + 0x20E1ED, 0x20E1F0, 0x20E3E9, 0x20E4E9, 0x20E5F0, 0x20E720, 0x20EAE1, 0x20ECE5, 0x20EDE1, 0x20EF20, 0x20F0E1, 0x20F0EF, 0x20F0F1, 0x20F3F4, 0x20F3F5, 0x20F4E7, + 0x20F4EF, 0xDFE120, 0xE120E1, 0xE120F4, 0xE1E920, 0xE1ED20, 0xE1F0FC, 0xE1F220, 0xE3E9E1, 0xE5E920, 0xE5F220, 0xE720F4, 0xE7ED20, 0xE7F220, 0xE920F4, 0xE9E120, + 0xE9EADE, 0xE9F220, 0xEAE1E9, 0xEAE1F4, 0xECE520, 0xED20E1, 0xED20E5, 0xED20F0, 0xEDE120, 0xEFF220, 0xEFF520, 0xF0EFF5, 0xF0F1EF, 0xF0FC20, 0xF220E1, 0xF220E5, + 0xF220EA, 0xF220F0, 0xF220F4, 0xF3E520, 0xF3E720, 0xF3F4EF, 0xF4E120, 0xF4E1E9, 0xF4E7ED, 0xF4E7F2, 0xF4E9EA, 0xF4EF20, 0xF4EFF5, 0xF4F9ED, 0xF9ED20, 0xFEED20, +}; + +static const int32_t ngrams_8859_8_I_he[] = { + 0x20E0E5, 0x20E0E7, 0x20E0E9, 0x20E0FA, 0x20E1E9, 0x20E1EE, 0x20E4E0, 0x20E4E5, 0x20E4E9, 0x20E4EE, 0x20E4F2, 0x20E4F9, 0x20E4FA, 0x20ECE0, 0x20ECE4, 0x20EEE0, + 0x20F2EC, 0x20F9EC, 0xE0FA20, 0xE420E0, 0xE420E1, 0xE420E4, 0xE420EC, 0xE420EE, 0xE420F9, 0xE4E5E0, 0xE5E020, 0xE5ED20, 0xE5EF20, 0xE5F820, 0xE5FA20, 0xE920E4, + 0xE9E420, 0xE9E5FA, 0xE9E9ED, 0xE9ED20, 0xE9EF20, 0xE9F820, 0xE9FA20, 0xEC20E0, 0xEC20E4, 0xECE020, 0xECE420, 0xED20E0, 0xED20E1, 0xED20E4, 0xED20EC, 0xED20EE, + 0xED20F9, 0xEEE420, 0xEF20E4, 0xF0E420, 0xF0E920, 0xF0E9ED, 0xF2EC20, 0xF820E4, 0xF8E9ED, 0xF9EC20, 0xFA20E0, 0xFA20E1, 0xFA20E4, 0xFA20EC, 0xFA20EE, 0xFA20F9, +}; + +static const int32_t ngrams_8859_8_he[] = { + 0x20E0E5, 0x20E0EC, 0x20E4E9, 0x20E4EC, 0x20E4EE, 0x20E4F0, 0x20E9F0, 0x20ECF2, 0x20ECF9, 0x20EDE5, 0x20EDE9, 0x20EFE5, 0x20EFE9, 0x20F8E5, 0x20F8E9, 0x20FAE0, + 0x20FAE5, 0x20FAE9, 0xE020E4, 0xE020EC, 0xE020ED, 0xE020FA, 0xE0E420, 0xE0E5E4, 0xE0EC20, 0xE0EE20, 0xE120E4, 0xE120ED, 0xE120FA, 0xE420E4, 0xE420E9, 0xE420EC, + 0xE420ED, 0xE420EF, 0xE420F8, 0xE420FA, 0xE4EC20, 0xE5E020, 0xE5E420, 0xE7E020, 0xE9E020, 0xE9E120, 0xE9E420, 0xEC20E4, 0xEC20ED, 0xEC20FA, 0xECF220, 0xECF920, + 0xEDE9E9, 0xEDE9F0, 0xEDE9F8, 0xEE20E4, 0xEE20ED, 0xEE20FA, 0xEEE120, 0xEEE420, 0xF2E420, 0xF920E4, 0xF920ED, 0xF920FA, 0xF9E420, 0xFAE020, 0xFAE420, 0xFAE5E9, +}; + +static const int32_t ngrams_8859_9_tr[] = { + 0x206261, 0x206269, 0x206275, 0x206461, 0x206465, 0x206765, 0x206861, 0x20696C, 0x206B61, 0x206B6F, 0x206D61, 0x206F6C, 0x207361, 0x207461, 0x207665, 0x207961, + 0x612062, 0x616B20, 0x616C61, 0x616D61, 0x616E20, 0x616EFD, 0x617220, 0x617261, 0x6172FD, 0x6173FD, 0x617961, 0x626972, 0x646120, 0x646520, 0x646920, 0x652062, + 0x65206B, 0x656469, 0x656E20, 0x657220, 0x657269, 0x657369, 0x696C65, 0x696E20, 0x696E69, 0x697220, 0x6C616E, 0x6C6172, 0x6C6520, 0x6C6572, 0x6E2061, 0x6E2062, + 0x6E206B, 0x6E6461, 0x6E6465, 0x6E6520, 0x6E6920, 0x6E696E, 0x6EFD20, 0x72696E, 0x72FD6E, 0x766520, 0x796120, 0x796F72, 0xFD6E20, 0xFD6E64, 0xFD6EFD, 0xFDF0FD, +}; + +CharsetRecog_8859_1::~CharsetRecog_8859_1() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1::getName() const +{ + return haveC1Bytes? "windows-1252" : "ISO-8859-1"; +} + +const char *CharsetRecog_8859_1_en::getLanguage() const +{ + return "en"; +} + +CharsetRecog_8859_1_en::~CharsetRecog_8859_1_en() +{ + // nothing to do +} + +int32_t CharsetRecog_8859_1_en::match(InputText *textIn) +{ + int32_t result = match_sbcs(textIn, ngrams_8859_1_en, charMap_8859_1); + + // printf("8859_1_en: result = %d\n", result); + return result; //match_sbcs(textIn, ngrams, charMap); +} + +CharsetRecog_8859_1_da::~CharsetRecog_8859_1_da() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1_da::getLanguage() const +{ + return "da"; +} + +int32_t CharsetRecog_8859_1_da::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_da, charMap_8859_1); +} + +CharsetRecog_8859_1_de::~CharsetRecog_8859_1_de() {} + +const char *CharsetRecog_8859_1_de::getLanguage() const +{ + return "de"; +} + +int32_t CharsetRecog_8859_1_de::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_de, charMap_8859_1); +} + +CharsetRecog_8859_1_es::~CharsetRecog_8859_1_es() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1_es::getLanguage() const +{ + return "es"; +} + +int32_t CharsetRecog_8859_1_es::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_es, charMap_8859_1); +} + +CharsetRecog_8859_1_fr::~CharsetRecog_8859_1_fr() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1_fr::getLanguage() const +{ + return "fr"; +} + +int32_t CharsetRecog_8859_1_fr::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_fr, charMap_8859_1); +} + +CharsetRecog_8859_1_it::~CharsetRecog_8859_1_it() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1_it::getLanguage() const +{ + return "it"; +} + +int32_t CharsetRecog_8859_1_it::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_it, charMap_8859_1); +} + +CharsetRecog_8859_1_nl::~CharsetRecog_8859_1_nl() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1_nl::getLanguage() const +{ + return "nl"; +} + +int32_t CharsetRecog_8859_1_nl::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_nl, charMap_8859_1); +} + +CharsetRecog_8859_1_no::~CharsetRecog_8859_1_no() {} + +const char *CharsetRecog_8859_1_no::getLanguage() const +{ + return "no"; +} + +int32_t CharsetRecog_8859_1_no::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_no, charMap_8859_1); +} + +CharsetRecog_8859_1_pt::~CharsetRecog_8859_1_pt() +{ + // nothing to do +} + +const char *CharsetRecog_8859_1_pt::getLanguage() const +{ + return "pt"; +} + +int32_t CharsetRecog_8859_1_pt::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_pt, charMap_8859_1); +} + +CharsetRecog_8859_1_sv::~CharsetRecog_8859_1_sv() {} + +const char *CharsetRecog_8859_1_sv::getLanguage() const +{ + return "sv"; +} + +int32_t CharsetRecog_8859_1_sv::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_1_sv, charMap_8859_1); +} + +CharsetRecog_8859_2::~CharsetRecog_8859_2() +{ + // nothing to do +} + +const char *CharsetRecog_8859_2::getName() const +{ + return haveC1Bytes? "windows-1250" : "ISO-8859-2"; +} + +CharsetRecog_8859_2_cs::~CharsetRecog_8859_2_cs() +{ + // nothing to do +} + +const char *CharsetRecog_8859_2_cs::getLanguage() const +{ + return "cs"; +} + +int32_t CharsetRecog_8859_2_cs::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_2_cs, charMap_8859_2); +} + +CharsetRecog_8859_2_hu::~CharsetRecog_8859_2_hu() +{ + // nothing to do +} + +const char *CharsetRecog_8859_2_hu::getLanguage() const +{ + return "hu"; +} + +int32_t CharsetRecog_8859_2_hu::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_2_hu, charMap_8859_2); +} + +CharsetRecog_8859_2_pl::~CharsetRecog_8859_2_pl() +{ + // nothing to do +} + +const char *CharsetRecog_8859_2_pl::getLanguage() const +{ + return "pl"; +} + +int32_t CharsetRecog_8859_2_pl::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_2_pl, charMap_8859_2); +} + +CharsetRecog_8859_2_ro::~CharsetRecog_8859_2_ro() +{ + // nothing to do +} + +const char *CharsetRecog_8859_2_ro::getLanguage() const +{ + return "ro"; +} + +int32_t CharsetRecog_8859_2_ro::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_2_ro, charMap_8859_2); +} + +CharsetRecog_8859_5::~CharsetRecog_8859_5() +{ + // nothing to do +} + +const char *CharsetRecog_8859_5::getName() const +{ + return "ISO-8859-5"; +} + +CharsetRecog_8859_5_ru::~CharsetRecog_8859_5_ru() +{ + // nothing to do +} + +const char *CharsetRecog_8859_5_ru::getLanguage() const +{ + return "ru"; +} + +int32_t CharsetRecog_8859_5_ru::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_5_ru, charMap_8859_5); +} + +CharsetRecog_8859_6::~CharsetRecog_8859_6() +{ + // nothing to do +} + +const char *CharsetRecog_8859_6::getName() const +{ + return "ISO-8859-6"; +} + +CharsetRecog_8859_6_ar::~CharsetRecog_8859_6_ar() +{ + // nothing to do +} + +const char *CharsetRecog_8859_6_ar::getLanguage() const +{ + return "ar"; +} + +int32_t CharsetRecog_8859_6_ar::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_6_ar, charMap_8859_6); +} + +CharsetRecog_8859_7::~CharsetRecog_8859_7() +{ + // nothing to do +} + +const char *CharsetRecog_8859_7::getName() const +{ + return haveC1Bytes? "windows-1253" : "ISO-8859-7"; +} + +CharsetRecog_8859_7_el::~CharsetRecog_8859_7_el() +{ + // nothing to do +} + +const char *CharsetRecog_8859_7_el::getLanguage() const +{ + return "el"; +} + +int32_t CharsetRecog_8859_7_el::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_7_el, charMap_8859_7); +} + +CharsetRecog_8859_8::~CharsetRecog_8859_8() +{ + // nothing to do +} + +const char *CharsetRecog_8859_8::getName() const +{ + return haveC1Bytes? "windows-1255" : "ISO-8859-8"; +} + +CharsetRecog_8859_8_I_he::~CharsetRecog_8859_8_I_he () +{ + // nothing to do +} + +const char *CharsetRecog_8859_8_I_he::getName() const +{ + return haveC1Bytes? "windows-1255" : "ISO-8859-8-I"; +} + +const char *CharsetRecog_8859_8_I_he::getLanguage() const +{ + return "he"; +} + +int32_t CharsetRecog_8859_8_I_he::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_8_I_he, charMap_8859_8); +} + +CharsetRecog_8859_8_he::~CharsetRecog_8859_8_he() +{ + // od ot gnihton +} + +const char *CharsetRecog_8859_8_he::getLanguage() const +{ + return "he"; +} + +int32_t CharsetRecog_8859_8_he::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_8_he, charMap_8859_8); +} + +CharsetRecog_8859_9::~CharsetRecog_8859_9() +{ + // nothing to do +} + +const char *CharsetRecog_8859_9::getName() const +{ + return haveC1Bytes? "windows-1254" : "ISO-8859-9"; +} + +CharsetRecog_8859_9_tr::~CharsetRecog_8859_9_tr () +{ + // nothing to do +} + +const char *CharsetRecog_8859_9_tr::getLanguage() const +{ + return "tr"; +} + +int32_t CharsetRecog_8859_9_tr::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_8859_9_tr, charMap_8859_9); +} + +CharsetRecog_windows_1256::~CharsetRecog_windows_1256() +{ + // nothing to do +} + +const char *CharsetRecog_windows_1256::getName() const +{ + return "windows-1256"; +} + +const char *CharsetRecog_windows_1256::getLanguage() const +{ + return "ar"; +} + +int32_t CharsetRecog_windows_1256::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_windows_1256, charMap_windows_1256); +} + +CharsetRecog_windows_1251::~CharsetRecog_windows_1251() +{ + // nothing to do +} + +const char *CharsetRecog_windows_1251::getName() const +{ + return "windows-1251"; +} + +const char *CharsetRecog_windows_1251::getLanguage() const +{ + return "ru"; +} + +int32_t CharsetRecog_windows_1251::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_windows_1251, charMap_windows_1251); +} + +CharsetRecog_KOI8_R::~CharsetRecog_KOI8_R() +{ + // nothing to do +} + +const char *CharsetRecog_KOI8_R::getName() const +{ + return "KOI8-R"; +} + +const char *CharsetRecog_KOI8_R::getLanguage() const +{ + return "ru"; +} + +int32_t CharsetRecog_KOI8_R::match(InputText *textIn) +{ + return match_sbcs(textIn, ngrams_KOI8_R, charMap_KOI8_R); +} + +U_NAMESPACE_END +#endif + diff --git a/icuSources/i18n/csrsbcs.h b/icuSources/i18n/csrsbcs.h new file mode 100644 index 00000000..456fc4df --- /dev/null +++ b/icuSources/i18n/csrsbcs.h @@ -0,0 +1,364 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSRSBCS_H +#define __CSRSBCS_H + +#include "unicode/uobject.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrecog.h" + +U_NAMESPACE_BEGIN + +class NGramParser : public UMemory +{ +private: + int32_t byteIndex; + int32_t ngram; + + const int32_t *ngramList; + const uint8_t *charMap; + + int32_t ngramCount; + int32_t hitCount; + +public: + NGramParser(const int32_t *theNgramList, const uint8_t *theCharMap); + +private: + /* + * Binary search for value in table, which must have exactly 64 entries. + */ + int32_t search(const int32_t *table, int32_t value); + + void lookup(int32_t thisNgram); + void addByte(int32_t b); + int32_t nextByte(InputText *det); + +public: + int32_t parse(InputText *det); + +}; + +class CharsetRecog_sbcs : public CharsetRecognizer +{ +protected: + UBool haveC1Bytes; + +public: + CharsetRecog_sbcs(); + + virtual ~CharsetRecog_sbcs(); + + virtual const char *getName() const = 0; + + virtual int32_t match(InputText *det) = 0; + + int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]); +}; + +class CharsetRecog_8859_1 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_1(); + + const char *getName() const; +}; + +class CharsetRecog_8859_2 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_2(); + + const char *getName() const; +}; + +class CharsetRecog_8859_5 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_5(); + + const char *getName() const; +}; + +class CharsetRecog_8859_6 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_6(); + + const char *getName() const; +}; + +class CharsetRecog_8859_7 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_7(); + + const char *getName() const; +}; + +class CharsetRecog_8859_8 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_8(); + + virtual const char *getName() const; +}; + +class CharsetRecog_8859_9 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_8859_9(); + + const char *getName() const; +}; + +class CharsetRecog_8859_1_en : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_en(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_da : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_da(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_de : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_de(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_es : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_es(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_fr : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_fr(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_it : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_it(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_nl : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_nl(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_no : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_no(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_pt : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_pt(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_1_sv : public CharsetRecog_8859_1 +{ +public: + virtual ~CharsetRecog_8859_1_sv(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_2_cs : public CharsetRecog_8859_2 +{ +public: + virtual ~CharsetRecog_8859_2_cs(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_2_hu : public CharsetRecog_8859_2 +{ +public: + virtual ~CharsetRecog_8859_2_hu(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_2_pl : public CharsetRecog_8859_2 +{ +public: + virtual ~CharsetRecog_8859_2_pl(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_2_ro : public CharsetRecog_8859_2 +{ +public: + virtual ~CharsetRecog_8859_2_ro(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_5_ru : public CharsetRecog_8859_5 +{ +public: + virtual ~CharsetRecog_8859_5_ru(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_6_ar : public CharsetRecog_8859_6 +{ +public: + virtual ~CharsetRecog_8859_6_ar(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_7_el : public CharsetRecog_8859_7 +{ +public: + virtual ~CharsetRecog_8859_7_el(); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_8_I_he : public CharsetRecog_8859_8 +{ +public: + virtual ~CharsetRecog_8859_8_I_he(); + + const char *getName() const; + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_8_he : public CharsetRecog_8859_8 +{ +public: + virtual ~CharsetRecog_8859_8_he (); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_8859_9_tr : public CharsetRecog_8859_9 +{ +public: + virtual ~CharsetRecog_8859_9_tr (); + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_windows_1256 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_windows_1256(); + + const char *getName() const; + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +class CharsetRecog_windows_1251 : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_windows_1251(); + + const char *getName() const; + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + + +class CharsetRecog_KOI8_R : public CharsetRecog_sbcs +{ +public: + virtual ~CharsetRecog_KOI8_R(); + + const char *getName() const; + + const char *getLanguage() const; + + int32_t match(InputText *textIn); +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSRSBCS_H */ diff --git a/icuSources/i18n/csrucode.cpp b/icuSources/i18n/csrucode.cpp new file mode 100644 index 00000000..99a76d85 --- /dev/null +++ b/icuSources/i18n/csrucode.cpp @@ -0,0 +1,146 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrucode.h" + +U_NAMESPACE_BEGIN + +CharsetRecog_Unicode::~CharsetRecog_Unicode() +{ + // nothing to do +} + +CharsetRecog_UTF_16_BE::~CharsetRecog_UTF_16_BE() +{ + // nothing to do +} + +const char *CharsetRecog_UTF_16_BE::getName() const +{ + return "UTF-16BE"; +} + +int32_t CharsetRecog_UTF_16_BE::match(InputText* textIn) +{ + const uint8_t *input = textIn->fRawInput; + + if (input[0] == 0xFE && input[1] == 0xFF) { + return 100; + } + + // TODO: Do some statastics to check for unsigned UTF-16BE + return 0; +} + +CharsetRecog_UTF_16_LE::~CharsetRecog_UTF_16_LE() +{ + // nothing to do +} + +const char *CharsetRecog_UTF_16_LE::getName() const +{ + return "UTF-16LE"; +} + +int32_t CharsetRecog_UTF_16_LE::match(InputText* textIn) +{ + const uint8_t *input = textIn->fRawInput; + + if (input[0] == 0xFF && input[1] == 0xFE && (input[2] != 0x00 || input[3] != 0x00)) { + return 100; + } + + // TODO: Do some statastics to check for unsigned UTF-16LE + return 0; +} + +CharsetRecog_UTF_32::~CharsetRecog_UTF_32() +{ + // nothing to do +} + +int32_t CharsetRecog_UTF_32::match(InputText* textIn) +{ + const uint8_t *input = textIn->fRawInput; + int32_t limit = (textIn->fRawLength / 4) * 4; + int32_t numValid = 0; + int32_t numInvalid = 0; + bool hasBOM = FALSE; + int32_t confidence = 0; + + if (getChar(input, 0) == 0x0000FEFFUL) { + hasBOM = TRUE; + } + + for(int32_t i = 0; i < limit; i += 4) { + int32_t ch = getChar(input, i); + + if (ch < 0 || ch >= 0x10FFFF || (ch >= 0xD800 && ch <= 0xDFFF)) { + numInvalid += 1; + } else { + numValid += 1; + } + } + + + // Cook up some sort of confidence score, based on presense of a BOM + // and the existence of valid and/or invalid multi-byte sequences. + if (hasBOM && numInvalid==0) { + confidence = 100; + } else if (hasBOM && numValid > numInvalid*10) { + confidence = 80; + } else if (numValid > 3 && numInvalid == 0) { + confidence = 100; + } else if (numValid > 0 && numInvalid == 0) { + confidence = 80; + } else if (numValid > numInvalid*10) { + // Probably corruput UTF-32BE data. Valid sequences aren't likely by chance. + confidence = 25; + } + + return confidence; +} + +CharsetRecog_UTF_32_BE::~CharsetRecog_UTF_32_BE() +{ + // nothing to do +} + +const char *CharsetRecog_UTF_32_BE::getName() const +{ + return "UTF-32BE"; +} + +int32_t CharsetRecog_UTF_32_BE::getChar(const uint8_t *input, int32_t index) const +{ + return input[index + 0] << 24 | input[index + 1] << 16 | + input[index + 2] << 8 | input[index + 3]; +} + +CharsetRecog_UTF_32_LE::~CharsetRecog_UTF_32_LE() +{ + // nothing to do +} + +const char *CharsetRecog_UTF_32_LE::getName() const +{ + return "UTF-32LE"; +} + +int32_t CharsetRecog_UTF_32_LE::getChar(const uint8_t *input, int32_t index) const +{ + return input[index + 3] << 24 | input[index + 2] << 16 | + input[index + 1] << 8 | input[index + 0]; +} + +U_NAMESPACE_END +#endif + diff --git a/icuSources/i18n/csrucode.h b/icuSources/i18n/csrucode.h new file mode 100644 index 00000000..315bad6b --- /dev/null +++ b/icuSources/i18n/csrucode.h @@ -0,0 +1,106 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSRUCODE_H +#define __CSRUCODE_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrecog.h" + +U_NAMESPACE_BEGIN + +/** + * This class matches UTF-16 and UTF-32, both big- and little-endian. The + * BOM will be used if it is present. + * + * @internal + */ +class CharsetRecog_Unicode : public CharsetRecognizer +{ + +public: + + virtual ~CharsetRecog_Unicode(); + /* (non-Javadoc) + * @see com.ibm.icu.text.CharsetRecognizer#getName() + */ + const char* getName() const = 0; + + /* (non-Javadoc) + * @see com.ibm.icu.text.CharsetRecognizer#match(com.ibm.icu.text.CharsetDetector) + */ + int32_t match(InputText* textIn) = 0; +}; + + +class CharsetRecog_UTF_16_BE : public CharsetRecog_Unicode +{ +public: + + virtual ~CharsetRecog_UTF_16_BE(); + + const char *getName() const; + + int32_t match(InputText* textIn); +}; + +class CharsetRecog_UTF_16_LE : public CharsetRecog_Unicode +{ +public: + + virtual ~CharsetRecog_UTF_16_LE(); + + const char *getName() const; + + int32_t match(InputText* textIn); +}; + +class CharsetRecog_UTF_32 : public CharsetRecog_Unicode +{ +protected: + virtual int32_t getChar(const uint8_t *input, int32_t index) const = 0; +public: + + virtual ~CharsetRecog_UTF_32(); + + const char* getName() const = 0; + + int32_t match(InputText* textIn); +}; + + +class CharsetRecog_UTF_32_BE : public CharsetRecog_UTF_32 +{ +protected: + int32_t getChar(const uint8_t *input, int32_t index) const; + +public: + + virtual ~CharsetRecog_UTF_32_BE(); + + const char *getName() const; +}; + + +class CharsetRecog_UTF_32_LE : public CharsetRecog_UTF_32 +{ +protected: + int32_t getChar(const uint8_t *input, int32_t index) const; + +public: + virtual ~CharsetRecog_UTF_32_LE(); + + const char* getName() const; +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSRUCODE_H */ diff --git a/icuSources/i18n/csrutf8.cpp b/icuSources/i18n/csrutf8.cpp new file mode 100644 index 00000000..8af5307b --- /dev/null +++ b/icuSources/i18n/csrutf8.cpp @@ -0,0 +1,111 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrutf8.h" + +U_NAMESPACE_BEGIN + +CharsetRecog_UTF8::~CharsetRecog_UTF8() +{ + // nothing to do +} + +const char *CharsetRecog_UTF8::getName() const +{ + return "UTF-8"; +} + +int32_t CharsetRecog_UTF8::match(InputText* det) { + bool hasBOM = FALSE; + int32_t numValid = 0; + int32_t numInvalid = 0; + const uint8_t *input = det->fRawInput; + int32_t i; + int32_t trailBytes = 0; + int32_t confidence; + + if (det->fRawLength >= 3 && + input[0] == 0xEF && input[1] == 0xBB && input[2] == 0xBF) { + hasBOM = TRUE; + } + + // Scan for multi-byte sequences + for (i=0; i < det->fRawLength; i += 1) { + int32_t b = input[i]; + + if ((b & 0x80) == 0) { + continue; // ASCII + } + + // Hi bit on char found. Figure out how long the sequence should be + if ((b & 0x0E0) == 0x0C0) { + trailBytes = 1; + } else if ((b & 0x0F0) == 0x0E0) { + trailBytes = 2; + } else if ((b & 0x0F8) == 0xF0) { + trailBytes = 3; + } else { + numInvalid += 1; + + if (numInvalid > 5) { + break; + } + + trailBytes = 0; + } + + // Verify that we've got the right number of trail bytes in the sequence + for (;;) { + i += 1; + + if (i >= det->fRawLength) { + break; + } + + b = input[i]; + + if ((b & 0xC0) != 0x080) { + numInvalid += 1; + break; + } + + if (--trailBytes == 0) { + numValid += 1; + break; + } + } + + } + + // Cook up some sort of confidence score, based on presense of a BOM + // and the existence of valid and/or invalid multi-byte sequences. + confidence = 0; + if (hasBOM && numInvalid == 0) { + confidence = 100; + } else if (hasBOM && numValid > numInvalid*10) { + confidence = 80; + } else if (numValid > 3 && numInvalid == 0) { + confidence = 100; + } else if (numValid > 0 && numInvalid == 0) { + confidence = 80; + } else if (numValid == 0 && numInvalid == 0) { + // Plain ASCII. + confidence = 10; + } else if (numValid > numInvalid*10) { + // Probably corruput utf-8 data. Valid sequences aren't likely by chance. + confidence = 25; + } + + return confidence; +} + +U_NAMESPACE_END +#endif diff --git a/icuSources/i18n/csrutf8.h b/icuSources/i18n/csrutf8.h new file mode 100644 index 00000000..10fe287a --- /dev/null +++ b/icuSources/i18n/csrutf8.h @@ -0,0 +1,42 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSRUTF8_H +#define __CSRUTF8_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "csrecog.h" + +U_NAMESPACE_BEGIN + +/** + * Charset recognizer for UTF-8 + * + * @internal + */ +class CharsetRecog_UTF8: public CharsetRecognizer { + + public: + + virtual ~CharsetRecog_UTF8(); + + const char *getName() const; + + /* (non-Javadoc) + * @see com.ibm.icu.text.CharsetRecognizer#match(com.ibm.icu.text.CharsetDetector) + */ + int32_t match(InputText *det); + +}; + +U_NAMESPACE_END + +#endif +#endif /* __CSRUTF8_H */ diff --git a/icuSources/i18n/datefmt.cpp b/icuSources/i18n/datefmt.cpp index b2b75816..b07622c3 100644 --- a/icuSources/i18n/datefmt.cpp +++ b/icuSources/i18n/datefmt.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -13,7 +13,7 @@ * 03/31/97 aliu Modified extensively to work with 50 locales. * 04/01/97 aliu Added support for centuries. * 08/12/97 aliu Fixed operator== to use Calendar::equivalentTo. -* 07/20/98 stephen Changed ParsePosition initialization +* 07/20/98 stephen Changed ParsePosition initialization ******************************************************************************** */ @@ -25,6 +25,9 @@ #include "unicode/datefmt.h" #include "unicode/smpdtfmt.h" +#include "cstring.h" +#include "windtfmt.h" + #if defined( U_DEBUG_CALSVC ) || defined (U_DEBUG_CAL) #include <stdio.h> #endif @@ -267,8 +270,25 @@ DateFormat::createInstance() DateFormat* U_EXPORT2 DateFormat::create(EStyle timeStyle, EStyle dateStyle, const Locale& locale) { - // Try to create a SimpleDateFormat of the desired style. UErrorCode status = U_ZERO_ERROR; +#ifdef U_WINDOWS + char buffer[8]; + int32_t count = locale.getKeywordValue("compat", buffer, sizeof(buffer), status); + + // if the locale has "@compat=host", create a host-specific DateFormat... + if (count > 0 && uprv_strcmp(buffer, "host") == 0) { + Win32DateFormat *f = new Win32DateFormat(timeStyle, dateStyle, locale, status); + + if (U_SUCCESS(status)) { + return f; + } + + delete f; + } +#endif + + + // Try to create a SimpleDateFormat of the desired style. SimpleDateFormat *f = new SimpleDateFormat(timeStyle, dateStyle, locale, status); if (U_SUCCESS(status)) return f; delete f; diff --git a/icuSources/i18n/dcfmtsym.cpp b/icuSources/i18n/dcfmtsym.cpp index d9b4d484..34074750 100644 --- a/icuSources/i18n/dcfmtsym.cpp +++ b/icuSources/i18n/dcfmtsym.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -29,7 +29,7 @@ #include "ucurrimp.h" #include "cstring.h" #include "locbased.h" - +#include "uresimp.h" // ***************************************************************************** // class DecimalFormatSymbols // ***************************************************************************** @@ -120,13 +120,13 @@ DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status, UBool useLastResortData) { *validLocale = *actualLocale = 0; - + currPattern = NULL; if (U_FAILURE(status)) return; - + const char* locStr = loc.getName(); UResourceBundle *resource = ures_open((char *)0, locStr, &status); - UResourceBundle *numberElementsRes = ures_getByKey(resource, gNumberElements, resource, &status); + UResourceBundle *numberElementsRes = ures_getByKey(resource, gNumberElements, NULL, &status); if (U_FAILURE(status)) { // Initializes with last resort data if necessary. @@ -183,7 +183,40 @@ DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status, ures_getLocaleByType(numberElementsRes, ULOC_ACTUAL_LOCALE, &status)); } + //load the currency data + UChar ucc[4]={0}; //Currency Codes are always 3 chars long + int32_t uccLen = 4; + const char* locName = loc.getName(); + uccLen = ucurr_forLocale(locName, ucc, uccLen, &status); + if(U_SUCCESS(status) && uccLen > 0) { + char cc[4]={0}; + u_UCharsToChars(ucc, cc, uccLen); + /* An explicit currency was requested */ + UErrorCode localStatus = U_ZERO_ERROR; + UResourceBundle *currency = ures_getByKeyWithFallback(resource, "Currencies", NULL, &localStatus); + currency = ures_getByKeyWithFallback(currency, cc, currency, &localStatus); + if(U_SUCCESS(localStatus) && ures_getSize(currency)>2) { // the length is 3 if more data is present + currency = ures_getByIndex(currency, 2, currency, &localStatus); + int32_t currPatternLen = 0; + currPattern = ures_getStringByIndex(currency, (int32_t)0, &currPatternLen, &localStatus); + UnicodeString decimalSep = ures_getStringByIndex(currency, (int32_t)1, NULL, &localStatus); + UnicodeString groupingSep = ures_getStringByIndex(currency, (int32_t)2, NULL, &localStatus); + if(U_SUCCESS(localStatus)){ + fSymbols[kMonetaryGroupingSeparatorSymbol] = groupingSep; + fSymbols[kMonetarySeparatorSymbol] = decimalSep; + //pattern.setTo(TRUE, currPattern, currPatternLen); + status = localStatus; + } + } + ures_close(currency); + /* else An explicit currency was requested and is unknown or locale data is malformed. */ + /* ucurr_* API will get the correct value later on. */ + }else{ + // ignore the error if no currency + status = U_ZERO_ERROR; + } } + ures_close(resource); ures_close(numberElementsRes); } @@ -222,6 +255,7 @@ DecimalFormatSymbols::initialize(const UChar** numberElements, int32_t *numberEl // TODO: read from locale data, if this makes it into CLDR fSymbols[kSignificantDigitSymbol] = (UChar)0x0040; // '@' significant digit fSymbols[kPadEscapeSymbol] = (UChar)0x002a; // TODO: '*' Hard coded for now; get from resource later + fSymbols[kMonetaryGroupingSeparatorSymbol] = fSymbols[kGroupingSeparatorSymbol]; } // initialize with default values diff --git a/icuSources/i18n/decimfmt.cpp b/icuSources/i18n/decimfmt.cpp index 9abfd52c..4cceb610 100644 --- a/icuSources/i18n/decimfmt.cpp +++ b/icuSources/i18n/decimfmt.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -325,31 +325,18 @@ DecimalFormat::construct(UErrorCode& status, if (pattern->indexOf((UChar)kCurrencySign) >= 0) { // If it looks like we are going to use a currency pattern // then do the time consuming lookup. - if (symbolsToAdopt == NULL) { - setCurrencyForLocale(uloc_getDefault(), status); - } else { - setCurrencyForSymbols(); - } + setCurrencyForSymbols(); } else { setCurrency(NULL, status); } applyPattern(*pattern, FALSE /*not localized*/,parseErr, status); -} - -/** - * Sets our currency to be the default currency for the given locale. - */ -void DecimalFormat::setCurrencyForLocale(const char* locale, UErrorCode& ec) { - const UChar* c = NULL; - if (U_SUCCESS(ec)) { - // Trap an error in mapping locale to currency. If we can't - // map, then don't fail and set the currency to "". - UErrorCode ec2 = U_ZERO_ERROR; - UChar c[4]; - ucurr_forLocale(locale, c, 4, &ec2); + + // If it was a currency format, apply the appropriate rounding by + // resetting the currency. NOTE: this copies fCurrency on top of itself. + if (fIsCurrencyFormat) { + setCurrency(getCurrency(), status); } - setCurrency(c, ec); } //------------------------------------------------------------------------------ @@ -837,7 +824,12 @@ DecimalFormat::subformat(UnicodeString& appendTo, // Gets the localized zero Unicode character. UChar32 zero = getConstSymbol(DecimalFormatSymbols::kZeroDigitSymbol).char32At(0); int32_t zeroDelta = zero - '0'; // '0' is the DigitList representation of zero - const UnicodeString *grouping = &getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol); + const UnicodeString *grouping ; + if(fIsCurrencyFormat) { + grouping = &getConstSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol); + }else{ + grouping = &getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol); + } const UnicodeString *decimal; if(fIsCurrencyFormat) { decimal = &getConstSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol); @@ -1769,7 +1761,9 @@ int32_t DecimalFormat::skipUWhiteSpace(const UnicodeString& text, int32_t pos) { int32_t DecimalFormat::compareComplexAffix(const UnicodeString& affixPat, const UnicodeString& text, int32_t pos, - UChar* currency) const { + UChar* currency) const +{ + int32_t start = pos; U_ASSERT(currency != NULL || (fCurrencyChoice != NULL && *getCurrency() != 0)); @@ -1855,7 +1849,7 @@ int32_t DecimalFormat::compareComplexAffix(const UnicodeString& affixPat, i = skipRuleWhiteSpace(affixPat, i); } } - return pos; + return pos - start; } /** @@ -2717,13 +2711,6 @@ DecimalFormat::appendAffixPattern(UnicodeString& appendTo, //------------------------------------------------------------------------------ -/* Tell the VC++ compiler not to spew out the warnings about integral size conversion */ -/* -#ifdef _WIN32 -#pragma warning( disable : 4761 ) -#endif -*/ - UnicodeString& DecimalFormat::toPattern(UnicodeString& result, UBool localized) const { diff --git a/icuSources/i18n/decimfmt.cpp.fixed b/icuSources/i18n/decimfmt.cpp.fixed new file mode 100644 index 00000000..3b91dcfa --- /dev/null +++ b/icuSources/i18n/decimfmt.cpp.fixed @@ -0,0 +1,3741 @@ +/* +******************************************************************************* +* Copyright (C) 1997-2006, International Business Machines Corporation and * +* others. All Rights Reserved. * +******************************************************************************* +* +* File DECIMFMT.CPP +* +* Modification History: +* +* Date Name Description +* 02/19/97 aliu Converted from java. +* 03/20/97 clhuang Implemented with new APIs. +* 03/31/97 aliu Moved isLONG_MIN to DigitList, and fixed it. +* 04/3/97 aliu Rewrote parsing and formatting completely, and +* cleaned up and debugged. Actually works now. +* Implemented NAN and INF handling, for both parsing +* and formatting. Extensive testing & debugging. +* 04/10/97 aliu Modified to compile on AIX. +* 04/16/97 aliu Rewrote to use DigitList, which has been resurrected. +* Changed DigitCount to int per code review. +* 07/09/97 helena Made ParsePosition into a class. +* 08/26/97 aliu Extensive changes to applyPattern; completely +* rewritten from the Java. +* 09/09/97 aliu Ported over support for exponential formats. +* 07/20/98 stephen JDK 1.2 sync up. +* Various instances of '0' replaced with 'NULL' +* Check for grouping size in subFormat() +* Brought subParse() in line with Java 1.2 +* Added method appendAffix() +* 08/24/1998 srl Removed Mutex calls. This is not a thread safe class! +* 02/22/99 stephen Removed character literals for EBCDIC safety +* 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes +* 06/28/99 stephen Fixed bugs in toPattern(). +* 06/29/99 stephen Fixed operator= to copy fFormatWidth, fPad, +* fPadPosition +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/decimfmt.h" +#include "unicode/choicfmt.h" +#include "unicode/ucurr.h" +#include "unicode/ustring.h" +#include "unicode/dcfmtsym.h" +#include "unicode/ures.h" +#include "unicode/uchar.h" +#include "unicode/curramt.h" +#include "ucurrimp.h" +#include "util.h" +#include "digitlst.h" +#include "cmemory.h" +#include "cstring.h" +#include "umutex.h" +#include "uassert.h" +#include "putilimp.h" + +U_NAMESPACE_BEGIN + +//#define FMT_DEBUG + +#ifdef FMT_DEBUG +#include <stdio.h> +static void debugout(UnicodeString s) { + char buf[2000]; + s.extract((int32_t) 0, s.length(), buf); + printf("%s", buf); +} +#define debug(x) printf("%s", x); +#else +#define debugout(x) +#define debug(x) +#endif + +// ***************************************************************************** +// class DecimalFormat +// ***************************************************************************** + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DecimalFormat) + +// Constants for characters used in programmatic (unlocalized) patterns. +#define kPatternZeroDigit ((UChar)0x0030) /*'0'*/ +#define kPatternSignificantDigit ((UChar)0x0040) /*'@'*/ +#define kPatternGroupingSeparator ((UChar)0x002C) /*','*/ +#define kPatternDecimalSeparator ((UChar)0x002E) /*'.'*/ +#define kPatternPerMill ((UChar)0x2030) +#define kPatternPercent ((UChar)0x0025) /*'%'*/ +#define kPatternDigit ((UChar)0x0023) /*'#'*/ +#define kPatternSeparator ((UChar)0x003B) /*';'*/ +#define kPatternExponent ((UChar)0x0045) /*'E'*/ +#define kPatternPlus ((UChar)0x002B) /*'+'*/ +#define kPatternMinus ((UChar)0x002D) /*'-'*/ +#define kPatternPadEscape ((UChar)0x002A) /*'*'*/ +#define kQuote ((UChar)0x0027) /*'\''*/ +/** + * The CURRENCY_SIGN is the standard Unicode symbol for currency. It + * is used in patterns and substitued with either the currency symbol, + * or if it is doubled, with the international currency symbol. If the + * CURRENCY_SIGN is seen in a pattern, then the decimal separator is + * replaced with the monetary decimal separator. + */ +#define kCurrencySign ((UChar)0x00A4) +#define kDefaultPad ((UChar)0x0020) /* */ + +const int32_t DecimalFormat::kDoubleIntegerDigits = 309; +const int32_t DecimalFormat::kDoubleFractionDigits = 340; + +const int32_t DecimalFormat::kMaxScientificIntegerDigits = 8; + +/** + * These are the tags we expect to see in normal resource bundle files associated + * with a locale. + */ +const char DecimalFormat::fgNumberPatterns[]="NumberPatterns"; + +inline int32_t _min(int32_t a, int32_t b) { return (a<b) ? a : b; } +inline int32_t _max(int32_t a, int32_t b) { return (a<b) ? b : a; } + +//------------------------------------------------------------------------------ +// Constructs a DecimalFormat instance in the default locale. + +DecimalFormat::DecimalFormat(UErrorCode& status) +: NumberFormat(), + fPosPrefixPattern(0), + fPosSuffixPattern(0), + fNegPrefixPattern(0), + fNegSuffixPattern(0), + fCurrencyChoice(0), + fMultiplier(0), + fGroupingSize(0), + fGroupingSize2(0), + fSymbols(0), + fUseSignificantDigits(FALSE), + fMinSignificantDigits(1), + fMaxSignificantDigits(6), + fMinExponentDigits(0), + fRoundingIncrement(0), + fPad(0), + fFormatWidth(0) +{ + UParseError parseError; + construct(status, parseError); +} + +//------------------------------------------------------------------------------ +// Constructs a DecimalFormat instance with the specified number format +// pattern in the default locale. + +DecimalFormat::DecimalFormat(const UnicodeString& pattern, + UErrorCode& status) +: NumberFormat(), + fPosPrefixPattern(0), + fPosSuffixPattern(0), + fNegPrefixPattern(0), + fNegSuffixPattern(0), + fCurrencyChoice(0), + fMultiplier(0), + fGroupingSize(0), + fGroupingSize2(0), + fSymbols(0), + fUseSignificantDigits(FALSE), + fMinSignificantDigits(1), + fMaxSignificantDigits(6), + fMinExponentDigits(0), + fRoundingIncrement(0), + fPad(0), + fFormatWidth(0) +{ + UParseError parseError; + construct(status, parseError, &pattern); +} + +//------------------------------------------------------------------------------ +// Constructs a DecimalFormat instance with the specified number format +// pattern and the number format symbols in the default locale. The +// created instance owns the symbols. + +DecimalFormat::DecimalFormat(const UnicodeString& pattern, + DecimalFormatSymbols* symbolsToAdopt, + UErrorCode& status) +: NumberFormat(), + fPosPrefixPattern(0), + fPosSuffixPattern(0), + fNegPrefixPattern(0), + fNegSuffixPattern(0), + fCurrencyChoice(0), + fMultiplier(0), + fGroupingSize(0), + fGroupingSize2(0), + fSymbols(0), + fUseSignificantDigits(FALSE), + fMinSignificantDigits(1), + fMaxSignificantDigits(6), + fMinExponentDigits(0), + fRoundingIncrement(0), + fPad(0), + fFormatWidth(0) +{ + UParseError parseError; + if (symbolsToAdopt == NULL) + status = U_ILLEGAL_ARGUMENT_ERROR; + construct(status, parseError, &pattern, symbolsToAdopt); +} + +DecimalFormat::DecimalFormat( const UnicodeString& pattern, + DecimalFormatSymbols* symbolsToAdopt, + UParseError& parseErr, + UErrorCode& status) +: NumberFormat(), + fPosPrefixPattern(0), + fPosSuffixPattern(0), + fNegPrefixPattern(0), + fNegSuffixPattern(0), + fCurrencyChoice(0), + fMultiplier(0), + fGroupingSize(0), + fGroupingSize2(0), + fSymbols(0), + fUseSignificantDigits(FALSE), + fMinSignificantDigits(1), + fMaxSignificantDigits(6), + fMinExponentDigits(0), + fRoundingIncrement(0), + fPad(0), + fFormatWidth(0) +{ + if (symbolsToAdopt == NULL) + status = U_ILLEGAL_ARGUMENT_ERROR; + construct(status,parseErr, &pattern, symbolsToAdopt); +} +//------------------------------------------------------------------------------ +// Constructs a DecimalFormat instance with the specified number format +// pattern and the number format symbols in the default locale. The +// created instance owns the clone of the symbols. + +DecimalFormat::DecimalFormat(const UnicodeString& pattern, + const DecimalFormatSymbols& symbols, + UErrorCode& status) +: NumberFormat(), + fPosPrefixPattern(0), + fPosSuffixPattern(0), + fNegPrefixPattern(0), + fNegSuffixPattern(0), + fCurrencyChoice(0), + fMultiplier(0), + fGroupingSize(0), + fGroupingSize2(0), + fSymbols(0), + fUseSignificantDigits(FALSE), + fMinSignificantDigits(1), + fMaxSignificantDigits(6), + fMinExponentDigits(0), + fRoundingIncrement(0), + fPad(0), + fFormatWidth(0) +{ + UParseError parseError; + construct(status, parseError, &pattern, new DecimalFormatSymbols(symbols)); +} + +//------------------------------------------------------------------------------ +// Constructs a DecimalFormat instance with the specified number format +// pattern and the number format symbols in the desired locale. The +// created instance owns the symbols. + +void +DecimalFormat::construct(UErrorCode& status, + UParseError& parseErr, + const UnicodeString* pattern, + DecimalFormatSymbols* symbolsToAdopt) +{ + fSymbols = symbolsToAdopt; // Do this BEFORE aborting on status failure!!! +// fDigitList = new DigitList(); // Do this BEFORE aborting on status failure!!! + fRoundingIncrement = NULL; + fRoundingDouble = 0.0; + fRoundingMode = kRoundHalfEven; + fPad = kPatternPadEscape; + fPadPosition = kPadBeforePrefix; + if (U_FAILURE(status)) + return; + + fPosPrefixPattern = fPosSuffixPattern = NULL; + fNegPrefixPattern = fNegSuffixPattern = NULL; + fMultiplier = 1; + fGroupingSize = 3; + fGroupingSize2 = 0; + fDecimalSeparatorAlwaysShown = FALSE; + fIsCurrencyFormat = FALSE; + fUseExponentialNotation = FALSE; + fMinExponentDigits = 0; + + if (fSymbols == NULL) + { + fSymbols = new DecimalFormatSymbols(Locale::getDefault(), status); + /* test for NULL */ + if (fSymbols == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + + UnicodeString str; + // Uses the default locale's number format pattern if there isn't + // one specified. + if (pattern == NULL) + { + int32_t len = 0; + UResourceBundle *resource = ures_open(NULL, Locale::getDefault().getName(), &status); + + resource = ures_getByKey(resource, fgNumberPatterns, resource, &status); + const UChar *resStr = ures_getStringByIndex(resource, (int32_t)0, &len, &status); + str.setTo(TRUE, resStr, len); + pattern = &str; + ures_close(resource); + } + + if (U_FAILURE(status)) + { + return; + } + + if (pattern->indexOf((UChar)kCurrencySign) >= 0) { + // If it looks like we are going to use a currency pattern + // then do the time consuming lookup. + if (symbolsToAdopt == NULL) { + setCurrencyForLocale(uloc_getDefault(), status); + } else { + setCurrencyForSymbols(); + } + } else { + setCurrency(NULL, status); + } + + applyPattern(*pattern, FALSE /*not localized*/,parseErr, status); + + // If it was a currency format, apply the appropriate rounding by + // resetting the currency. NOTE: this copies fCurrency on top of itself. + if (fIsCurrencyFormat) { + setCurrency(getCurrency(), status); + } +} + +/** + * Sets our currency to be the default currency for the given locale. + */ +void DecimalFormat::setCurrencyForLocale(const char* locale, UErrorCode& ec) { + const UChar* c = NULL; + if (U_SUCCESS(ec)) { + // Trap an error in mapping locale to currency. If we can't + // map, then don't fail and set the currency to "". + UErrorCode ec2 = U_ZERO_ERROR; + UChar c[4]; + ucurr_forLocale(locale, c, 4, &ec2); + } + setCurrency(c, ec); +} + +//------------------------------------------------------------------------------ + +DecimalFormat::~DecimalFormat() +{ +// delete fDigitList; + delete fPosPrefixPattern; + delete fPosSuffixPattern; + delete fNegPrefixPattern; + delete fNegSuffixPattern; + delete fCurrencyChoice; + delete fSymbols; + delete fRoundingIncrement; +} + +//------------------------------------------------------------------------------ +// copy constructor + +DecimalFormat::DecimalFormat(const DecimalFormat &source) +: NumberFormat(source), +// fDigitList(NULL), + fPosPrefixPattern(NULL), + fPosSuffixPattern(NULL), + fNegPrefixPattern(NULL), + fNegSuffixPattern(NULL), + fCurrencyChoice(NULL), + fSymbols(NULL), + fRoundingIncrement(NULL) +{ + *this = source; +} + +//------------------------------------------------------------------------------ +// assignment operator +// Note that fDigitList is not considered a significant part of the +// DecimalFormat because it's used as a buffer to process the numbers. + +static void _copy_us_ptr(UnicodeString** pdest, const UnicodeString* source) { + if (source == NULL) { + delete *pdest; + *pdest = NULL; + } else if (*pdest == NULL) { + *pdest = new UnicodeString(*source); + } else { + **pdest = *source; + } +} + +DecimalFormat& +DecimalFormat::operator=(const DecimalFormat& rhs) +{ + if(this != &rhs) { + NumberFormat::operator=(rhs); + fPositivePrefix = rhs.fPositivePrefix; + fPositiveSuffix = rhs.fPositiveSuffix; + fNegativePrefix = rhs.fNegativePrefix; + fNegativeSuffix = rhs.fNegativeSuffix; + _copy_us_ptr(&fPosPrefixPattern, rhs.fPosPrefixPattern); + _copy_us_ptr(&fPosSuffixPattern, rhs.fPosSuffixPattern); + _copy_us_ptr(&fNegPrefixPattern, rhs.fNegPrefixPattern); + _copy_us_ptr(&fNegSuffixPattern, rhs.fNegSuffixPattern); + if (rhs.fCurrencyChoice == 0) { + delete fCurrencyChoice; + fCurrencyChoice = 0; + } else { + fCurrencyChoice = (ChoiceFormat*) rhs.fCurrencyChoice->clone(); + } + if(rhs.fRoundingIncrement == NULL) { + delete fRoundingIncrement; + fRoundingIncrement = NULL; + } + else if(fRoundingIncrement == NULL) { + fRoundingIncrement = new DigitList(*rhs.fRoundingIncrement); + } + else { + *fRoundingIncrement = *rhs.fRoundingIncrement; + } + fRoundingDouble = rhs.fRoundingDouble; + fMultiplier = rhs.fMultiplier; + fGroupingSize = rhs.fGroupingSize; + fGroupingSize2 = rhs.fGroupingSize2; + fDecimalSeparatorAlwaysShown = rhs.fDecimalSeparatorAlwaysShown; + if(fSymbols == NULL) { + fSymbols = new DecimalFormatSymbols(*rhs.fSymbols); + } else { + *fSymbols = *rhs.fSymbols; + } + fUseExponentialNotation = rhs.fUseExponentialNotation; + fExponentSignAlwaysShown = rhs.fExponentSignAlwaysShown; + /*Bertrand A. D. Update 98.03.17*/ + fIsCurrencyFormat = rhs.fIsCurrencyFormat; + /*end of Update*/ + fMinExponentDigits = rhs.fMinExponentDigits; + // if (fDigitList == NULL) + // fDigitList = new DigitList(); + + /* sfb 990629 */ + fFormatWidth = rhs.fFormatWidth; + fPad = rhs.fPad; + fPadPosition = rhs.fPadPosition; + /* end sfb */ + fMinSignificantDigits = rhs.fMinSignificantDigits; + fMaxSignificantDigits = rhs.fMaxSignificantDigits; + fUseSignificantDigits = rhs.fUseSignificantDigits; + } + return *this; +} + +//------------------------------------------------------------------------------ + +UBool +DecimalFormat::operator==(const Format& that) const +{ + if (this == &that) + return TRUE; + + // NumberFormat::operator== guarantees this cast is safe + const DecimalFormat* other = (DecimalFormat*)&that; + +#ifdef FMT_DEBUG + // This code makes it easy to determine why two format objects that should + // be equal aren't. + UBool first = TRUE; + if (!NumberFormat::operator==(that)) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("NumberFormat::!="); + } + if (!((fPosPrefixPattern == other->fPosPrefixPattern && // both null + fPositivePrefix == other->fPositivePrefix) + || (fPosPrefixPattern != 0 && other->fPosPrefixPattern != 0 && + *fPosPrefixPattern == *other->fPosPrefixPattern))) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Pos Prefix !="); + } + if (!((fPosSuffixPattern == other->fPosSuffixPattern && // both null + fPositiveSuffix == other->fPositiveSuffix) + || (fPosSuffixPattern != 0 && other->fPosSuffixPattern != 0 && + *fPosSuffixPattern == *other->fPosSuffixPattern))) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Pos Suffix !="); + } + if (!((fNegPrefixPattern == other->fNegPrefixPattern && // both null + fNegativePrefix == other->fNegativePrefix) + || (fNegPrefixPattern != 0 && other->fNegPrefixPattern != 0 && + *fNegPrefixPattern == *other->fNegPrefixPattern))) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Neg Prefix "); + if (fNegPrefixPattern == NULL) { + debug("NULL("); + debugout(fNegativePrefix); + debug(")"); + } else { + debugout(*fNegPrefixPattern); + } + debug(" != "); + if (other->fNegPrefixPattern == NULL) { + debug("NULL("); + debugout(other->fNegativePrefix); + debug(")"); + } else { + debugout(*other->fNegPrefixPattern); + } + } + if (!((fNegSuffixPattern == other->fNegSuffixPattern && // both null + fNegativeSuffix == other->fNegativeSuffix) + || (fNegSuffixPattern != 0 && other->fNegSuffixPattern != 0 && + *fNegSuffixPattern == *other->fNegSuffixPattern))) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Neg Suffix "); + if (fNegSuffixPattern == NULL) { + debug("NULL("); + debugout(fNegativeSuffix); + debug(")"); + } else { + debugout(*fNegSuffixPattern); + } + debug(" != "); + if (other->fNegSuffixPattern == NULL) { + debug("NULL("); + debugout(other->fNegativeSuffix); + debug(")"); + } else { + debugout(*other->fNegSuffixPattern); + } + } + if (!((fRoundingIncrement == other->fRoundingIncrement) // both null + || (fRoundingIncrement != NULL && + other->fRoundingIncrement != NULL && + *fRoundingIncrement == *other->fRoundingIncrement))) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Rounding Increment !="); + } + if (fMultiplier != other->fMultiplier) { + if (first) { printf("[ "); first = FALSE; } + printf("Multiplier %ld != %ld", fMultiplier, other->fMultiplier); + } + if (fGroupingSize != other->fGroupingSize) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + printf("Grouping Size %ld != %ld", fGroupingSize, other->fGroupingSize); + } + if (fGroupingSize2 != other->fGroupingSize2) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + printf("Secondary Grouping Size %ld != %ld", fGroupingSize2, other->fGroupingSize2); + } + if (fDecimalSeparatorAlwaysShown != other->fDecimalSeparatorAlwaysShown) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + printf("Dec Sep Always %d != %d", fDecimalSeparatorAlwaysShown, other->fDecimalSeparatorAlwaysShown); + } + if (fUseExponentialNotation != other->fUseExponentialNotation) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Use Exp !="); + } + if (!(!fUseExponentialNotation || + fMinExponentDigits != other->fMinExponentDigits)) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Exp Digits !="); + } + if (*fSymbols != *(other->fSymbols)) { + if (first) { printf("[ "); first = FALSE; } else { printf(", "); } + debug("Symbols !="); + } + // TODO Add debug stuff for significant digits here + if (!first) { printf(" ]"); } +#endif + + return (NumberFormat::operator==(that) && + ((fPosPrefixPattern == other->fPosPrefixPattern && // both null + fPositivePrefix == other->fPositivePrefix) + || (fPosPrefixPattern != 0 && other->fPosPrefixPattern != 0 && + *fPosPrefixPattern == *other->fPosPrefixPattern)) && + ((fPosSuffixPattern == other->fPosSuffixPattern && // both null + fPositiveSuffix == other->fPositiveSuffix) + || (fPosSuffixPattern != 0 && other->fPosSuffixPattern != 0 && + *fPosSuffixPattern == *other->fPosSuffixPattern)) && + ((fNegPrefixPattern == other->fNegPrefixPattern && // both null + fNegativePrefix == other->fNegativePrefix) + || (fNegPrefixPattern != 0 && other->fNegPrefixPattern != 0 && + *fNegPrefixPattern == *other->fNegPrefixPattern)) && + ((fNegSuffixPattern == other->fNegSuffixPattern && // both null + fNegativeSuffix == other->fNegativeSuffix) + || (fNegSuffixPattern != 0 && other->fNegSuffixPattern != 0 && + *fNegSuffixPattern == *other->fNegSuffixPattern)) && + ((fCurrencyChoice == other->fCurrencyChoice) // both null + || (fCurrencyChoice != NULL && + other->fCurrencyChoice != NULL && + *fCurrencyChoice == *other->fCurrencyChoice)) && + ((fRoundingIncrement == other->fRoundingIncrement) // both null + || (fRoundingIncrement != NULL && + other->fRoundingIncrement != NULL && + *fRoundingIncrement == *other->fRoundingIncrement)) && + fRoundingDouble == other->fRoundingDouble && + fMultiplier == other->fMultiplier && + fGroupingSize == other->fGroupingSize && + fGroupingSize2 == other->fGroupingSize2 && + fDecimalSeparatorAlwaysShown == other->fDecimalSeparatorAlwaysShown && + fUseExponentialNotation == other->fUseExponentialNotation && + (!fUseExponentialNotation || + (fExponentSignAlwaysShown == other->fExponentSignAlwaysShown && + fMinExponentDigits == other->fMinExponentDigits)) && + *fSymbols == *(other->fSymbols) && + fIsCurrencyFormat == other->fIsCurrencyFormat && + fFormatWidth == other->fFormatWidth && + fPad == other->fPad && + fPadPosition == other->fPadPosition && + fUseSignificantDigits == other->fUseSignificantDigits && + (!fUseSignificantDigits || + (fMinSignificantDigits == other->fMinSignificantDigits && + fMaxSignificantDigits == other->fMaxSignificantDigits))); +} + +//------------------------------------------------------------------------------ + +Format* +DecimalFormat::clone() const +{ + return new DecimalFormat(*this); +} + +//------------------------------------------------------------------------------ + +UnicodeString& +DecimalFormat::format(int32_t number, + UnicodeString& appendTo, + FieldPosition& fieldPosition) const +{ + return format((int64_t)number, appendTo, fieldPosition); +} + +//------------------------------------------------------------------------------ + +UnicodeString& +DecimalFormat::format(int64_t number, + UnicodeString& appendTo, + FieldPosition& fieldPosition) const +{ + DigitList digits; + + // Clears field positions. + fieldPosition.setBeginIndex(0); + fieldPosition.setEndIndex(0); + + // If we are to do rounding, we need to move into the BigDecimal + // domain in order to do divide/multiply correctly. + // || + // In general, long values always represent real finite numbers, so + // we don't have to check for +/- Infinity or NaN. However, there + // is one case we have to be careful of: The multiplier can push + // a number near MIN_VALUE or MAX_VALUE outside the legal range. We + // check for this before multiplying, and if it happens we use doubles + // instead, trading off accuracy for range. + if (fRoundingIncrement != NULL + || (fMultiplier != 0 && (number > (U_INT64_MAX / fMultiplier) + || number < (U_INT64_MIN / fMultiplier)))) + { + digits.set(((double)number) * fMultiplier, + precision(FALSE), + !fUseExponentialNotation && !areSignificantDigitsUsed()); + } + else + { + digits.set(number * fMultiplier, precision(TRUE)); + } + + return subformat(appendTo, fieldPosition, digits, TRUE); +} + +//------------------------------------------------------------------------------ + +UnicodeString& +DecimalFormat::format( double number, + UnicodeString& appendTo, + FieldPosition& fieldPosition) const +{ + // Clears field positions. + fieldPosition.setBeginIndex(0); + fieldPosition.setEndIndex(0); + + // Special case for NaN, sets the begin and end index to be the + // the string length of localized name of NaN. + if (uprv_isNaN(number)) + { + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setBeginIndex(appendTo.length()); + + appendTo += getConstSymbol(DecimalFormatSymbols::kNaNSymbol); + + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setEndIndex(appendTo.length()); + + addPadding(appendTo, fieldPosition, 0, 0); + return appendTo; + } + + /* Detecting whether a double is negative is easy with the exception of + * the value -0.0. This is a double which has a zero mantissa (and + * exponent), but a negative sign bit. It is semantically distinct from + * a zero with a positive sign bit, and this distinction is important + * to certain kinds of computations. However, it's a little tricky to + * detect, since (-0.0 == 0.0) and !(-0.0 < 0.0). How then, you may + * ask, does it behave distinctly from +0.0? Well, 1/(-0.0) == + * -Infinity. Proper detection of -0.0 is needed to deal with the + * issues raised by bugs 4106658, 4106667, and 4147706. Liu 7/6/98. + */ + UBool isNegative = uprv_isNegative(number); + + // Do this BEFORE checking to see if value is infinite! Sets the + // begin and end index to be length of the string composed of + // localized name of Infinite and the positive/negative localized + // signs. + + number *= fMultiplier; + + // Apply rounding after multiplier + if (fRoundingIncrement != NULL) { + if (isNegative) // For rounding in the correct direction + number = -number; + number = fRoundingDouble + * round(number / fRoundingDouble, fRoundingMode, isNegative); + if (isNegative) + number = -number; + } + + // Special case for INFINITE, + if (uprv_isInfinite(number)) + { + int32_t prefixLen = appendAffix(appendTo, number, isNegative, TRUE); + + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setBeginIndex(appendTo.length()); + + appendTo += getConstSymbol(DecimalFormatSymbols::kInfinitySymbol); + + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setEndIndex(appendTo.length()); + + int32_t suffixLen = appendAffix(appendTo, number, isNegative, FALSE); + + addPadding(appendTo, fieldPosition, prefixLen, suffixLen); + return appendTo; + } + + DigitList digits; + + // This detects negativity too. + digits.set(number, precision(FALSE), + !fUseExponentialNotation && !areSignificantDigitsUsed()); + + return subformat(appendTo, fieldPosition, digits, FALSE); +} + +/** + * Round a double value to the nearest integer according to the + * given mode. + * @param a the absolute value of the number to be rounded + * @param mode a BigDecimal rounding mode + * @param isNegative true if the number to be rounded is negative + * @return the absolute value of the rounded result + */ +double DecimalFormat::round(double a, ERoundingMode mode, UBool isNegative) { + switch (mode) { + case kRoundCeiling: + return isNegative ? uprv_floor(a) : uprv_ceil(a); + case kRoundFloor: + return isNegative ? uprv_ceil(a) : uprv_floor(a); + case kRoundDown: + return uprv_floor(a); + case kRoundUp: + return uprv_ceil(a); + case kRoundHalfEven: + { + double f = uprv_floor(a); + if ((a - f) != 0.5) { + return uprv_floor(a + 0.5); + } + double g = f / 2.0; + return (g == uprv_floor(g)) ? f : (f + 1.0); + } + case kRoundHalfDown: + return ((a - uprv_floor(a)) <= 0.5) ? uprv_floor(a) : uprv_ceil(a); + case kRoundHalfUp: + return ((a - uprv_floor(a)) < 0.5) ? uprv_floor(a) : uprv_ceil(a); + } + return 1.0; +} + +UnicodeString& +DecimalFormat::format( const Formattable& obj, + UnicodeString& appendTo, + FieldPosition& fieldPosition, + UErrorCode& status) const +{ + return NumberFormat::format(obj, appendTo, fieldPosition, status); +} + +/** + * Return true if a grouping separator belongs at the given + * position, based on whether grouping is in use and the values of + * the primary and secondary grouping interval. + * @param pos the number of integer digits to the right of + * the current position. Zero indicates the position after the + * rightmost integer digit. + * @return true if a grouping character belongs at the current + * position. + */ +UBool DecimalFormat::isGroupingPosition(int32_t pos) const { + UBool result = FALSE; + if (isGroupingUsed() && (pos > 0) && (fGroupingSize > 0)) { + if ((fGroupingSize2 > 0) && (pos > fGroupingSize)) { + result = ((pos - fGroupingSize) % fGroupingSize2) == 0; + } else { + result = pos % fGroupingSize == 0; + } + } + return result; +} + +//------------------------------------------------------------------------------ + +/** + * Complete the formatting of a finite number. On entry, the fDigitList must + * be filled in with the correct digits. + */ +UnicodeString& +DecimalFormat::subformat(UnicodeString& appendTo, + FieldPosition& fieldPosition, + DigitList& digits, + UBool isInteger) const +{ + // Gets the localized zero Unicode character. + UChar32 zero = getConstSymbol(DecimalFormatSymbols::kZeroDigitSymbol).char32At(0); + int32_t zeroDelta = zero - '0'; // '0' is the DigitList representation of zero + const UnicodeString *grouping ; + if(fIsCurrencyFormat) { + grouping = &getConstSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol); + }else{ + grouping = &getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol); + } + const UnicodeString *decimal; + if(fIsCurrencyFormat) { + decimal = &getConstSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol); + } else { + decimal = &getConstSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol); + } + UBool useSigDig = areSignificantDigitsUsed(); + int32_t maxIntDig = getMaximumIntegerDigits(); + int32_t minIntDig = getMinimumIntegerDigits(); + + /* Per bug 4147706, DecimalFormat must respect the sign of numbers which + * format as zero. This allows sensible computations and preserves + * relations such as signum(1/x) = signum(x), where x is +Infinity or + * -Infinity. Prior to this fix, we always formatted zero values as if + * they were positive. Liu 7/6/98. + */ + if (digits.isZero()) + { + digits.fDecimalAt = digits.fCount = 0; // Normalize + } + + // Appends the prefix. + double doubleValue = digits.getDouble(); + int32_t prefixLen = appendAffix(appendTo, doubleValue, !digits.fIsPositive, TRUE); + + if (fUseExponentialNotation) + { + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kIntegerField) + { + fieldPosition.setBeginIndex(appendTo.length()); + fieldPosition.setEndIndex(-1); + } + else if (fieldPosition.getField() == NumberFormat::kFractionField) + { + fieldPosition.setBeginIndex(-1); + } + + int32_t minFracDig = 0; + if (useSigDig) { + maxIntDig = minIntDig = 1; + minFracDig = getMinimumSignificantDigits() - 1; + } else { + minFracDig = getMinimumFractionDigits(); + if (maxIntDig > kMaxScientificIntegerDigits) { + maxIntDig = 1; + if (maxIntDig < minIntDig) { + maxIntDig = minIntDig; + } + } + if (maxIntDig > minIntDig) { + minIntDig = 1; + } + } + + // Minimum integer digits are handled in exponential format by + // adjusting the exponent. For example, 0.01234 with 3 minimum + // integer digits is "123.4E-4". + + // Maximum integer digits are interpreted as indicating the + // repeating range. This is useful for engineering notation, in + // which the exponent is restricted to a multiple of 3. For + // example, 0.01234 with 3 maximum integer digits is "12.34e-3". + // If maximum integer digits are defined and are larger than + // minimum integer digits, then minimum integer digits are + // ignored. + int32_t exponent = digits.fDecimalAt; + if (maxIntDig > 1 && maxIntDig != minIntDig) { + // A exponent increment is defined; adjust to it. + exponent = (exponent > 0) ? (exponent - 1) / maxIntDig + : (exponent / maxIntDig) - 1; + exponent *= maxIntDig; + } else { + // No exponent increment is defined; use minimum integer digits. + // If none is specified, as in "#E0", generate 1 integer digit. + exponent -= (minIntDig > 0 || minFracDig > 0) + ? minIntDig : 1; + } + + // We now output a minimum number of digits, and more if there + // are more digits, up to the maximum number of digits. We + // place the decimal point after the "integer" digits, which + // are the first (decimalAt - exponent) digits. + int32_t minimumDigits = minIntDig + minFracDig; + // The number of integer digits is handled specially if the number + // is zero, since then there may be no digits. + int32_t integerDigits = digits.isZero() ? minIntDig : + digits.fDecimalAt - exponent; + int32_t totalDigits = digits.fCount; + if (minimumDigits > totalDigits) + totalDigits = minimumDigits; + if (integerDigits > totalDigits) + totalDigits = integerDigits; + + // totalDigits records total number of digits needs to be processed + int32_t i; + for (i=0; i<totalDigits; ++i) + { + if (i == integerDigits) + { + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setEndIndex(appendTo.length()); + + appendTo += *decimal; + + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kFractionField) + fieldPosition.setBeginIndex(appendTo.length()); + } + // Restores the digit character or pads the buffer with zeros. + UChar32 c = (UChar32)((i < digits.fCount) ? + (digits.fDigits[i] + zeroDelta) : + zero); + appendTo += c; + } + + // Record field information + if (fieldPosition.getField() == NumberFormat::kIntegerField) + { + if (fieldPosition.getEndIndex() < 0) + fieldPosition.setEndIndex(appendTo.length()); + } + else if (fieldPosition.getField() == NumberFormat::kFractionField) + { + if (fieldPosition.getBeginIndex() < 0) + fieldPosition.setBeginIndex(appendTo.length()); + fieldPosition.setEndIndex(appendTo.length()); + } + + // The exponent is output using the pattern-specified minimum + // exponent digits. There is no maximum limit to the exponent + // digits, since truncating the exponent would appendTo in an + // unacceptable inaccuracy. + appendTo += getConstSymbol(DecimalFormatSymbols::kExponentialSymbol); + + // For zero values, we force the exponent to zero. We + // must do this here, and not earlier, because the value + // is used to determine integer digit count above. + if (digits.isZero()) + exponent = 0; + + if (exponent < 0) { + appendTo += getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol); + } else if (fExponentSignAlwaysShown) { + appendTo += getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol); + } + + DigitList expDigits; + expDigits.set(exponent); + { + int expDig = fMinExponentDigits; + if (fUseExponentialNotation && expDig < 1) { + expDig = 1; + } + for (i=expDigits.fDecimalAt; i<expDig; ++i) + appendTo += (zero); + } + for (i=0; i<expDigits.fDecimalAt; ++i) + { + UChar32 c = (UChar32)((i < expDigits.fCount) ? + (expDigits.fDigits[i] + zeroDelta) : zero); + appendTo += c; + } + } + else // Not using exponential notation + { + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setBeginIndex(appendTo.length()); + + int32_t sigCount = 0; + int32_t minSigDig = getMinimumSignificantDigits(); + int32_t maxSigDig = getMaximumSignificantDigits(); + if (!useSigDig) { + minSigDig = 0; + maxSigDig = INT32_MAX; + } + + // Output the integer portion. Here 'count' is the total + // number of integer digits we will display, including both + // leading zeros required to satisfy getMinimumIntegerDigits, + // and actual digits present in the number. + int32_t count = useSigDig ? + _max(1, digits.fDecimalAt) : minIntDig; + if (digits.fDecimalAt > 0 && count < digits.fDecimalAt) { + count = digits.fDecimalAt; + } + + // Handle the case where getMaximumIntegerDigits() is smaller + // than the real number of integer digits. If this is so, we + // output the least significant max integer digits. For example, + // the value 1997 printed with 2 max integer digits is just "97". + + int32_t digitIndex = 0; // Index into digitList.fDigits[] + if (count > maxIntDig && maxIntDig >= 0) { + count = maxIntDig; + digitIndex = digits.fDecimalAt - count; + } + + int32_t sizeBeforeIntegerPart = appendTo.length(); + + int32_t i; + for (i=count-1; i>=0; --i) + { + if (i < digits.fDecimalAt && digitIndex < digits.fCount && + sigCount < maxSigDig) { + // Output a real digit + appendTo += ((UChar32)(digits.fDigits[digitIndex++] + zeroDelta)); + ++sigCount; + } + else + { + // Output a zero (leading or trailing) + appendTo += (zero); + if (sigCount > 0) { + ++sigCount; + } + } + + // Output grouping separator if necessary. + if (isGroupingPosition(i)) { + appendTo.append(*grouping); + } + } + + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kIntegerField) + fieldPosition.setEndIndex(appendTo.length()); + + // Determine whether or not there are any printable fractional + // digits. If we've used up the digits we know there aren't. + UBool fractionPresent = (!isInteger && digitIndex < digits.fCount) || + (useSigDig ? (sigCount < minSigDig) : (getMinimumFractionDigits() > 0)); + + // If there is no fraction present, and we haven't printed any + // integer digits, then print a zero. Otherwise we won't print + // _any_ digits, and we won't be able to parse this string. + if (!fractionPresent && appendTo.length() == sizeBeforeIntegerPart) + appendTo += (zero); + + // Output the decimal separator if we always do so. + if (fDecimalSeparatorAlwaysShown || fractionPresent) + appendTo += *decimal; + + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kFractionField) + fieldPosition.setBeginIndex(appendTo.length()); + + count = useSigDig ? INT32_MAX : getMaximumFractionDigits(); + if (useSigDig && (sigCount == maxSigDig || + (sigCount >= minSigDig && digitIndex == digits.fCount))) { + count = 0; + } + + for (i=0; i < count; ++i) { + // Here is where we escape from the loop. We escape + // if we've output the maximum fraction digits + // (specified in the for expression above). We also + // stop when we've output the minimum digits and + // either: we have an integer, so there is no + // fractional stuff to display, or we're out of + // significant digits. + if (!useSigDig && i >= getMinimumFractionDigits() && + (isInteger || digitIndex >= digits.fCount)) { + break; + } + + // Output leading fractional zeros. These are zeros + // that come after the decimal but before any + // significant digits. These are only output if + // abs(number being formatted) < 1.0. + if (-1-i > (digits.fDecimalAt-1)) { + appendTo += zero; + continue; + } + + // Output a digit, if we have any precision left, or a + // zero if we don't. We don't want to output noise digits. + if (!isInteger && digitIndex < digits.fCount) { + appendTo += ((UChar32)(digits.fDigits[digitIndex++] + zeroDelta)); + } else { + appendTo += zero; + } + + // If we reach the maximum number of significant + // digits, or if we output all the real digits and + // reach the minimum, then we are done. + ++sigCount; + if (useSigDig && + (sigCount == maxSigDig || + (digitIndex == digits.fCount && sigCount >= minSigDig))) { + break; + } + } + + // Record field information for caller. + if (fieldPosition.getField() == NumberFormat::kFractionField) + fieldPosition.setEndIndex(appendTo.length()); + } + + int32_t suffixLen = appendAffix(appendTo, doubleValue, !digits.fIsPositive, FALSE); + + addPadding(appendTo, fieldPosition, prefixLen, suffixLen); + return appendTo; +} + +/** + * Inserts the character fPad as needed to expand result to fFormatWidth. + * @param result the string to be padded + */ +void DecimalFormat::addPadding(UnicodeString& appendTo, + FieldPosition& fieldPosition, + int32_t prefixLen, + int32_t suffixLen) const +{ + if (fFormatWidth > 0) { + int32_t len = fFormatWidth - appendTo.length(); + if (len > 0) { + UnicodeString padding; + for (int32_t i=0; i<len; ++i) { + padding += fPad; + } + switch (fPadPosition) { + case kPadAfterPrefix: + appendTo.insert(prefixLen, padding); + break; + case kPadBeforePrefix: + appendTo.insert(0, padding); + break; + case kPadBeforeSuffix: + appendTo.insert(appendTo.length() - suffixLen, padding); + break; + case kPadAfterSuffix: + appendTo += padding; + break; + } + if (fPadPosition == kPadBeforePrefix || + fPadPosition == kPadAfterPrefix) { + fieldPosition.setBeginIndex(len + fieldPosition.getBeginIndex()); + fieldPosition.setEndIndex(len + fieldPosition.getEndIndex()); + } + } + } +} + +//------------------------------------------------------------------------------ + +void +DecimalFormat::parse(const UnicodeString& text, + Formattable& result, + UErrorCode& status) const +{ + NumberFormat::parse(text, result, status); +} + +void +DecimalFormat::parse(const UnicodeString& text, + Formattable& result, + ParsePosition& parsePosition) const { + parse(text, result, parsePosition, FALSE); +} + +Formattable& DecimalFormat::parseCurrency(const UnicodeString& text, + Formattable& result, + ParsePosition& pos) const { + parse(text, result, pos, TRUE); + return result; +} + +/** + * Parses the given text as either a number or a currency amount. + * @param text the string to parse + * @param result output parameter for the result + * @param parsePosition input-output position; on input, the + * position within text to match; must have 0 <= pos.getIndex() < + * text.length(); on output, the position after the last matched + * character. If the parse fails, the position in unchanged upon + * output. + * @param parseCurrency if true, a currency amount is parsed; + * otherwise a Number is parsed + */ +void DecimalFormat::parse(const UnicodeString& text, + Formattable& result, + ParsePosition& parsePosition, + UBool parseCurrency) const { + int32_t backup; + int32_t i = backup = parsePosition.getIndex(); + + // Handle NaN as a special case: + + // Skip padding characters, if around prefix + if (fFormatWidth > 0 && (fPadPosition == kPadBeforePrefix || + fPadPosition == kPadAfterPrefix)) { + i = skipPadding(text, i); + } + // If the text is composed of the representation of NaN, returns NaN.length + const UnicodeString *nan = &getConstSymbol(DecimalFormatSymbols::kNaNSymbol); + int32_t nanLen = (text.compare(i, nan->length(), *nan) + ? 0 : nan->length()); + if (nanLen) { + i += nanLen; + if (fFormatWidth > 0 && (fPadPosition == kPadBeforeSuffix || + fPadPosition == kPadAfterSuffix)) { + i = skipPadding(text, i); + } + parsePosition.setIndex(i); + result.setDouble(uprv_getNaN()); + return; + } + + // NaN parse failed; start over + i = backup; + + // status is used to record whether a number is infinite. + UBool status[fgStatusLength]; + UChar curbuf[4]; + UChar* currency = parseCurrency ? curbuf : NULL; + DigitList digits; + + if (!subparse(text, parsePosition, digits, status, currency)) { + parsePosition.setIndex(backup); + return; + } + + // Handle infinity + if (status[fgStatusInfinite]) { + double inf = uprv_getInfinity(); + result.setDouble(digits.fIsPositive ? inf : -inf); + } + + else { + // Do as much of the multiplier conversion as possible without + // losing accuracy. + int32_t mult = fMultiplier; // Don't modify this.multiplier + while (mult % 10 == 0) { + mult /= 10; + --digits.fDecimalAt; + } + + // Handle integral values. We want to return the most + // parsimonious type that will accommodate all of the result's + // precision. We therefore only return a long if the result fits + // entirely within a long (taking into account the multiplier) -- + // otherwise we fall through and return a double. When more + // numeric types are supported by Formattable (e.g., 64-bit + // integers, bignums) we will extend this logic to include them. + if (digits.fitsIntoLong(isParseIntegerOnly())) { + int32_t n = digits.getLong(); + if (n % mult == 0) { + result.setLong(n / mult); + } + else { // else handle the remainder + result.setDouble(((double)n) / mult); + } + } + else if (digits.fitsIntoInt64(isParseIntegerOnly())) { + int64_t n = digits.getInt64(); + if (n % mult == 0) { + result.setInt64(n / mult); + } + else { // else handle the remainder + result.setDouble(((double)n) / mult); + } + } + else { + // Handle non-integral or very large values + // Dividing by one is okay and not that costly. + result.setDouble(digits.getDouble() / mult); + } + } + + if (parseCurrency) { + UErrorCode ec = U_ZERO_ERROR; + Formattable n(result); + result.adoptObject(new CurrencyAmount(n, curbuf, ec)); + U_ASSERT(U_SUCCESS(ec)); // should always succeed + } +} + + +/* +This is an old implimentation that was preparing for 64-bit numbers in ICU. +It is very slow, and 64-bit numbers are not ANSI-C compatible. This code +is here if we change our minds. + +^^^ what is this referring to? remove? ^^^ [alan] +*/ + +/** + * Parse the given text into a number. The text is parsed beginning at + * parsePosition, until an unparseable character is seen. + * @param text the string to parse. + * @param parsePosition The position at which to being parsing. Upon + * return, the first unparsed character. + * @param digits the DigitList to set to the parsed value. + * @param status output param containing boolean status flags indicating + * whether the value was infinite and whether it was positive. + * @param currency return value for parsed currency, for generic + * currency parsing mode, or NULL for normal parsing. In generic + * currency parsing mode, any currency is parsed, not just the + * currency that this formatter is set to. + */ +UBool DecimalFormat::subparse(const UnicodeString& text, ParsePosition& parsePosition, + DigitList& digits, UBool* status, + UChar* currency) const +{ + int32_t position = parsePosition.getIndex(); + int32_t oldStart = position; + + // Match padding before prefix + if (fFormatWidth > 0 && fPadPosition == kPadBeforePrefix) { + position = skipPadding(text, position); + } + + // Match positive and negative prefixes; prefer longest match. + int32_t posMatch = compareAffix(text, position, FALSE, TRUE, currency); + int32_t negMatch = compareAffix(text, position, TRUE, TRUE, currency); + if (posMatch >= 0 && negMatch >= 0) { + if (posMatch > negMatch) { + negMatch = -1; + } else if (negMatch > posMatch) { + posMatch = -1; + } + } + if (posMatch >= 0) { + position += posMatch; + } else if (negMatch >= 0) { + position += negMatch; + } else { + parsePosition.setErrorIndex(position); + return FALSE; + } + + // Match padding before prefix + if (fFormatWidth > 0 && fPadPosition == kPadAfterPrefix) { + position = skipPadding(text, position); + } + + // process digits or Inf, find decimal position + const UnicodeString *inf = &getConstSymbol(DecimalFormatSymbols::kInfinitySymbol); + int32_t infLen = (text.compare(position, inf->length(), *inf) + ? 0 : inf->length()); + position += infLen; // infLen is non-zero when it does equal to infinity + status[fgStatusInfinite] = (UBool)infLen; + if (!infLen) + { + // We now have a string of digits, possibly with grouping symbols, + // and decimal points. We want to process these into a DigitList. + // We don't want to put a bunch of leading zeros into the DigitList + // though, so we keep track of the location of the decimal point, + // put only significant digits into the DigitList, and adjust the + // exponent as needed. + + digits.fDecimalAt = digits.fCount = 0; + UChar32 zero = getConstSymbol(DecimalFormatSymbols::kZeroDigitSymbol).char32At(0); + + const UnicodeString *decimal; + if(fIsCurrencyFormat) { + decimal = &getConstSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol); + } else { + decimal = &getConstSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol); + } + const UnicodeString *grouping = &getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol); + UBool sawDecimal = FALSE; + UBool sawDigit = FALSE; + int32_t backup = -1; + int32_t digit; + int32_t textLength = text.length(); // One less pointer to follow + int32_t groupingLen = grouping->length(); + int32_t decimalLen = decimal->length(); + + // We have to track digitCount ourselves, because digits.fCount will + // pin when the maximum allowable digits is reached. + int32_t digitCount = 0; + + for (; position < textLength; ) + { + UChar32 ch = text.char32At(position); + + /* We recognize all digit ranges, not only the Latin digit range + * '0'..'9'. We do so by using the Character.digit() method, + * which converts a valid Unicode digit to the range 0..9. + * + * The character 'ch' may be a digit. If so, place its value + * from 0 to 9 in 'digit'. First try using the locale digit, + * which may or MAY NOT be a standard Unicode digit range. If + * this fails, try using the standard Unicode digit ranges by + * calling Character.digit(). If this also fails, digit will + * have a value outside the range 0..9. + */ + digit = ch - zero; + if (digit < 0 || digit > 9) + { + digit = u_charDigitValue(ch); + } + + if (digit > 0 && digit <= 9) + { + // Cancel out backup setting (see grouping handler below) + backup = -1; + + sawDigit = TRUE; + // output a regular non-zero digit. + ++digitCount; + digits.append((char)(digit + '0')); + position += U16_LENGTH(ch); + } + else if (digit == 0) + { + // Cancel out backup setting (see grouping handler below) + backup = -1; + sawDigit = TRUE; + + // Check for leading zeros + if (digits.fCount != 0) + { + // output a regular zero digit. + ++digitCount; + digits.append((char)(digit + '0')); + } + else if (sawDecimal) + { + // If we have seen the decimal, but no significant digits yet, + // then we account for leading zeros by decrementing the + // digits.fDecimalAt into negative values. + --digits.fDecimalAt; + } + // else ignore leading zeros in integer part of number. + position += U16_LENGTH(ch); + } + else if (!text.compare(position, groupingLen, *grouping) && isGroupingUsed()) + { + // Ignore grouping characters, if we are using them, but require + // that they be followed by a digit. Otherwise we backup and + // reprocess them. + backup = position; + position += groupingLen; + } + else if (!text.compare(position, decimalLen, *decimal) && !isParseIntegerOnly() && !sawDecimal) + { + // If we're only parsing integers, or if we ALREADY saw the + // decimal, then don't parse this one. + + digits.fDecimalAt = digitCount; // Not digits.fCount! + sawDecimal = TRUE; + position += decimalLen; + } + else { + const UnicodeString *tmp; + tmp = &getConstSymbol(DecimalFormatSymbols::kExponentialSymbol); + if (!text.caseCompare(position, tmp->length(), *tmp, U_FOLD_CASE_DEFAULT)) // error code is set below if !sawDigit + { + // Parse sign, if present + int32_t pos = position + tmp->length(); + DigitList exponentDigits; + + if (pos < textLength) + { + tmp = &getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol); + if (!text.compare(pos, tmp->length(), *tmp)) + { + pos += tmp->length(); + } + else { + tmp = &getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol); + if (!text.compare(pos, tmp->length(), *tmp)) + { + pos += tmp->length(); + exponentDigits.fIsPositive = FALSE; + } + } + } + + while (pos < textLength) { + ch = text[(int32_t)pos]; + digit = ch - zero; + + if (digit < 0 || digit > 9) { + digit = u_charDigitValue(ch); + } + if (0 <= digit && digit <= 9) { + ++pos; + exponentDigits.append((char)(digit + '0')); + } else { + break; + } + } + + if (exponentDigits.fCount > 0) { + exponentDigits.fDecimalAt = exponentDigits.fCount; + digits.fDecimalAt += exponentDigits.getLong(); + position = pos; // Advance past the exponent + } + + break; // Whether we fail or succeed, we exit this loop + } + else { + break; + } + } + } + + if (backup != -1) + { + position = backup; + } + + // If there was no decimal point we have an integer + if (!sawDecimal) + { + digits.fDecimalAt += digitCount; // Not digits.fCount! + } + + // If none of the text string was recognized. For example, parse + // "x" with pattern "#0.00" (return index and error index both 0) + // parse "$" with pattern "$#0.00". (return index 0 and error index + // 1). + if (!sawDigit && digitCount == 0) { + parsePosition.setIndex(oldStart); + parsePosition.setErrorIndex(oldStart); + return FALSE; + } + } + + // Match padding before suffix + if (fFormatWidth > 0 && fPadPosition == kPadBeforeSuffix) { + position = skipPadding(text, position); + } + + // Match positive and negative suffixes; prefer longest match. + if (posMatch >= 0) { + posMatch = compareAffix(text, position, FALSE, FALSE, currency); + } + if (negMatch >= 0) { + negMatch = compareAffix(text, position, TRUE, FALSE, currency); + } + if (posMatch >= 0 && negMatch >= 0) { + if (posMatch > negMatch) { + negMatch = -1; + } else if (negMatch > posMatch) { + posMatch = -1; + } + } + + // Fail if neither or both + if ((posMatch >= 0) == (negMatch >= 0)) { + parsePosition.setErrorIndex(position); + return FALSE; + } + + position += (posMatch>=0 ? posMatch : negMatch); + + // Match padding before suffix + if (fFormatWidth > 0 && fPadPosition == kPadAfterSuffix) { + position = skipPadding(text, position); + } + + parsePosition.setIndex(position); + + digits.fIsPositive = (posMatch >= 0); + + if(parsePosition.getIndex() == oldStart) + { + parsePosition.setErrorIndex(position); + return FALSE; + } + return TRUE; +} + +/** + * Starting at position, advance past a run of pad characters, if any. + * Return the index of the first character after position that is not a pad + * character. Result is >= position. + */ +int32_t DecimalFormat::skipPadding(const UnicodeString& text, int32_t position) const { + int32_t padLen = U16_LENGTH(fPad); + while (position < text.length() && + text.char32At(position) == fPad) { + position += padLen; + } + return position; +} + +/** + * Return the length matched by the given affix, or -1 if none. + * Runs of white space in the affix, match runs of white space in + * the input. Pattern white space and input white space are + * determined differently; see code. + * @param text input text + * @param pos offset into input at which to begin matching + * @param isNegative + * @param isPrefix + * @param currency return value for parsed currency, for generic + * currency parsing mode, or null for normal parsing. In generic + * currency parsing mode, any currency is parsed, not just the + * currency that this formatter is set to. + * @return length of input that matches, or -1 if match failure + */ +int32_t DecimalFormat::compareAffix(const UnicodeString& text, + int32_t pos, + UBool isNegative, + UBool isPrefix, + UChar* currency) const { + if (fCurrencyChoice != NULL || currency != NULL) { + if (isPrefix) { + return compareComplexAffix(isNegative ? *fNegPrefixPattern : *fPosPrefixPattern, + text, pos, currency); + } else { + return compareComplexAffix(isNegative ? *fNegSuffixPattern : *fPosSuffixPattern, + text, pos, currency); + } + } + + if (isPrefix) { + return compareSimpleAffix(isNegative ? fNegativePrefix : fPositivePrefix, + text, pos); + } else { + return compareSimpleAffix(isNegative ? fNegativeSuffix : fPositiveSuffix, + text, pos); + } +} + +/** + * Return the length matched by the given affix, or -1 if none. + * Runs of white space in the affix, match runs of white space in + * the input. Pattern white space and input white space are + * determined differently; see code. + * @param affix pattern string, taken as a literal + * @param input input text + * @param pos offset into input at which to begin matching + * @return length of input that matches, or -1 if match failure + */ +int32_t DecimalFormat::compareSimpleAffix(const UnicodeString& affix, + const UnicodeString& input, + int32_t pos) { + int32_t start = pos; + for (int32_t i=0; i<affix.length(); ) { + UChar32 c = affix.char32At(i); + int32_t len = U16_LENGTH(c); + if (uprv_isRuleWhiteSpace(c)) { + // We may have a pattern like: \u200F \u0020 + // and input text like: \u200F \u0020 + // Note that U+200F and U+0020 are RuleWhiteSpace but only + // U+0020 is UWhiteSpace. So we have to first do a direct + // match of the run of RULE whitespace in the pattern, + // then match any extra characters. + UBool literalMatch = FALSE; + while (pos < input.length() && + input.char32At(pos) == c) { + literalMatch = TRUE; + i += len; + pos += len; + if (i == affix.length()) { + break; + } + c = affix.char32At(i); + len = U16_LENGTH(c); + if (!uprv_isRuleWhiteSpace(c)) { + break; + } + } + + // Advance over run in pattern + i = skipRuleWhiteSpace(affix, i); + + // Advance over run in input text + // Must see at least one white space char in input, + // unless we've already matched some characters literally. + int32_t s = pos; + pos = skipUWhiteSpace(input, pos); + if (pos == s && !literalMatch) { + return -1; + } + } else { + if (pos < input.length() && + input.char32At(pos) == c) { + i += len; + pos += len; + } else { + return -1; + } + } + } + return pos - start; +} + +/** + * Skip over a run of zero or more isRuleWhiteSpace() characters at + * pos in text. + */ +int32_t DecimalFormat::skipRuleWhiteSpace(const UnicodeString& text, int32_t pos) { + while (pos < text.length()) { + UChar32 c = text.char32At(pos); + if (!uprv_isRuleWhiteSpace(c)) { + break; + } + pos += U16_LENGTH(c); + } + return pos; +} + +/** + * Skip over a run of zero or more isUWhiteSpace() characters at pos + * in text. + */ +int32_t DecimalFormat::skipUWhiteSpace(const UnicodeString& text, int32_t pos) { + while (pos < text.length()) { + UChar32 c = text.char32At(pos); + if (!u_isUWhiteSpace(c)) { + break; + } + pos += U16_LENGTH(c); + } + return pos; +} + +/** + * Return the length matched by the given affix, or -1 if none. + * @param affixPat pattern string + * @param input input text + * @param pos offset into input at which to begin matching + * @param currency return value for parsed currency, for generic + * currency parsing mode, or null for normal parsing. In generic + * currency parsing mode, any currency is parsed, not just the + * currency that this formatter is set to. + * @return length of input that matches, or -1 if match failure + */ +int32_t DecimalFormat::compareComplexAffix(const UnicodeString& affixPat, + const UnicodeString& text, + int32_t pos, + UChar* currency) const +{ + int32_t start = pos; + U_ASSERT(currency != NULL || + (fCurrencyChoice != NULL && *getCurrency() != 0)); + + for (int32_t i=0; i<affixPat.length() && pos >= 0; ) { + UChar32 c = affixPat.char32At(i); + i += U16_LENGTH(c); + + if (c == kQuote) { + U_ASSERT(i <= affixPat.length()); + c = affixPat.char32At(i); + i += U16_LENGTH(c); + + const UnicodeString* affix = NULL; + + switch (c) { + case kCurrencySign: { + // If currency != null, then perform generic currency matching. + // Otherwise, do currency choice parsing. + UBool intl = i<affixPat.length() && + affixPat.char32At(i) == kCurrencySign; + // Parse generic currency -- anything for which we + // have a display name, or any 3-letter ISO code. + if (currency != NULL) { + // Try to parse display name for our locale; first + // determine our locale. + UErrorCode ec = U_ZERO_ERROR; + const char* loc = getLocaleID(ULOC_VALID_LOCALE, ec); + if (U_FAILURE(ec) || loc == NULL || *loc == 0) { + // applyPattern has been called; use the symbols + loc = fSymbols->getLocale().getName(); + ec = U_ZERO_ERROR; + } + // Delegate parse of display name => ISO code to Currency + ParsePosition ppos(pos); + UChar curr[4]; + uprv_parseCurrency(loc, text, ppos, curr, ec); + + // If parse succeeds, populate currency[0] + if (U_SUCCESS(ec) && ppos.getIndex() != pos) { + u_strcpy(currency, curr); + pos = ppos.getIndex(); + } else { + pos = -1; + } + } else { + if (intl) { + ++i; + pos = match(text, pos, getCurrency()); + } else { + ParsePosition ppos(pos); + Formattable result; + fCurrencyChoice->parse(text, result, ppos); + pos = (ppos.getIndex() == pos) ? -1 : ppos.getIndex(); + } + } + continue; + } + case kPatternPercent: + affix = &getConstSymbol(DecimalFormatSymbols::kPercentSymbol); + break; + case kPatternPerMill: + affix = &getConstSymbol(DecimalFormatSymbols::kPerMillSymbol); + break; + case kPatternPlus: + affix = &getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol); + break; + case kPatternMinus: + affix = &getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol); + break; + default: + // fall through to affix!=0 test, which will fail + break; + } + + if (affix != NULL) { + pos = match(text, pos, *affix); + continue; + } + } + + pos = match(text, pos, c); + if (uprv_isRuleWhiteSpace(c)) { + i = skipRuleWhiteSpace(affixPat, i); + } + } + return pos - start; +} + +/** + * Match a single character at text[pos] and return the index of the + * next character upon success. Return -1 on failure. If + * isRuleWhiteSpace(ch) then match a run of white space in text. + */ +int32_t DecimalFormat::match(const UnicodeString& text, int32_t pos, UChar32 ch) { + if (uprv_isRuleWhiteSpace(ch)) { + // Advance over run of white space in input text + // Must see at least one white space char in input + int32_t s = pos; + pos = skipUWhiteSpace(text, pos); + if (pos == s) { + return -1; + } + return pos; + } + return (pos >= 0 && text.char32At(pos) == ch) ? + (pos + U16_LENGTH(ch)) : -1; +} + +/** + * Match a string at text[pos] and return the index of the next + * character upon success. Return -1 on failure. Match a run of + * white space in str with a run of white space in text. + */ +int32_t DecimalFormat::match(const UnicodeString& text, int32_t pos, const UnicodeString& str) { + for (int32_t i=0; i<str.length() && pos >= 0; ) { + UChar32 ch = str.char32At(i); + i += U16_LENGTH(ch); + if (uprv_isRuleWhiteSpace(ch)) { + i = skipRuleWhiteSpace(str, i); + } + pos = match(text, pos, ch); + } + return pos; +} + +//------------------------------------------------------------------------------ +// Gets the pointer to the localized decimal format symbols + +const DecimalFormatSymbols* +DecimalFormat::getDecimalFormatSymbols() const +{ + return fSymbols; +} + +//------------------------------------------------------------------------------ +// De-owning the current localized symbols and adopt the new symbols. + +void +DecimalFormat::adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt) +{ + if (symbolsToAdopt == NULL) { + return; // do not allow caller to set fSymbols to NULL + } + + UBool sameSymbols = FALSE; + if (fSymbols != NULL) { + sameSymbols = (UBool)(getConstSymbol(DecimalFormatSymbols::kCurrencySymbol) == + symbolsToAdopt->getConstSymbol(DecimalFormatSymbols::kCurrencySymbol) && + getConstSymbol(DecimalFormatSymbols::kIntlCurrencySymbol) == + symbolsToAdopt->getConstSymbol(DecimalFormatSymbols::kIntlCurrencySymbol)); + delete fSymbols; + } + + fSymbols = symbolsToAdopt; + if (!sameSymbols) { + // If the currency symbols are the same, there is no need to recalculate. + setCurrencyForSymbols(); + } + expandAffixes(); +} +//------------------------------------------------------------------------------ +// Setting the symbols is equlivalent to adopting a newly created localized +// symbols. + +void +DecimalFormat::setDecimalFormatSymbols(const DecimalFormatSymbols& symbols) +{ + adoptDecimalFormatSymbols(new DecimalFormatSymbols(symbols)); +} + +/** + * Update the currency object to match the symbols. This method + * is used only when the caller has passed in a symbols object + * that may not be the default object for its locale. + */ +void +DecimalFormat::setCurrencyForSymbols() { + /*Bug 4212072 + Update the affix strings accroding to symbols in order to keep + the affix strings up to date. + [Richard/GCL] + */ + + // With the introduction of the Currency object, the currency + // symbols in the DFS object are ignored. For backward + // compatibility, we check any explicitly set DFS object. If it + // is a default symbols object for its locale, we change the + // currency object to one for that locale. If it is custom, + // we set the currency to null. + UErrorCode ec = U_ZERO_ERROR; + const UChar* c = NULL; + const char* loc = fSymbols->getLocale().getName(); + UChar intlCurrencySymbol[4]; + ucurr_forLocale(loc, intlCurrencySymbol, 4, &ec); + UnicodeString currencySymbol; + + uprv_getStaticCurrencyName(intlCurrencySymbol, loc, currencySymbol, ec); + if (U_SUCCESS(ec) + && getConstSymbol(DecimalFormatSymbols::kCurrencySymbol) == currencySymbol + && getConstSymbol(DecimalFormatSymbols::kIntlCurrencySymbol) == intlCurrencySymbol) + { + // Trap an error in mapping locale to currency. If we can't + // map, then don't fail and set the currency to "". + c = intlCurrencySymbol; + } + ec = U_ZERO_ERROR; // reset local error code! + setCurrency(c, ec); +} + + +//------------------------------------------------------------------------------ +// Gets the positive prefix of the number pattern. + +UnicodeString& +DecimalFormat::getPositivePrefix(UnicodeString& result) const +{ + result = fPositivePrefix; + return result; +} + +//------------------------------------------------------------------------------ +// Sets the positive prefix of the number pattern. + +void +DecimalFormat::setPositivePrefix(const UnicodeString& newValue) +{ + fPositivePrefix = newValue; + delete fPosPrefixPattern; + fPosPrefixPattern = 0; +} + +//------------------------------------------------------------------------------ +// Gets the negative prefix of the number pattern. + +UnicodeString& +DecimalFormat::getNegativePrefix(UnicodeString& result) const +{ + result = fNegativePrefix; + return result; +} + +//------------------------------------------------------------------------------ +// Gets the negative prefix of the number pattern. + +void +DecimalFormat::setNegativePrefix(const UnicodeString& newValue) +{ + fNegativePrefix = newValue; + delete fNegPrefixPattern; + fNegPrefixPattern = 0; +} + +//------------------------------------------------------------------------------ +// Gets the positive suffix of the number pattern. + +UnicodeString& +DecimalFormat::getPositiveSuffix(UnicodeString& result) const +{ + result = fPositiveSuffix; + return result; +} + +//------------------------------------------------------------------------------ +// Sets the positive suffix of the number pattern. + +void +DecimalFormat::setPositiveSuffix(const UnicodeString& newValue) +{ + fPositiveSuffix = newValue; + delete fPosSuffixPattern; + fPosSuffixPattern = 0; +} + +//------------------------------------------------------------------------------ +// Gets the negative suffix of the number pattern. + +UnicodeString& +DecimalFormat::getNegativeSuffix(UnicodeString& result) const +{ + result = fNegativeSuffix; + return result; +} + +//------------------------------------------------------------------------------ +// Sets the negative suffix of the number pattern. + +void +DecimalFormat::setNegativeSuffix(const UnicodeString& newValue) +{ + fNegativeSuffix = newValue; + delete fNegSuffixPattern; + fNegSuffixPattern = 0; +} + +//------------------------------------------------------------------------------ +// Gets the multiplier of the number pattern. + +int32_t DecimalFormat::getMultiplier() const +{ + return fMultiplier; +} + +//------------------------------------------------------------------------------ +// Sets the multiplier of the number pattern. +void +DecimalFormat::setMultiplier(int32_t newValue) +{ + // This shouldn't be set to 0. + // Due to compatibility with ICU4J we cannot set an error code and refuse 0. + // So the rest of the code should ignore fMultiplier when it's 0. [grhoten] + fMultiplier = newValue; +} + +/** + * Get the rounding increment. + * @return A positive rounding increment, or 0.0 if rounding + * is not in effect. + * @see #setRoundingIncrement + * @see #getRoundingMode + * @see #setRoundingMode + */ +double DecimalFormat::getRoundingIncrement() const { + return fRoundingDouble; +} + +/** + * Set the rounding increment. This method also controls whether + * rounding is enabled. + * @param newValue A positive rounding increment, or 0.0 to disable rounding. + * Negative increments are equivalent to 0.0. + * @see #getRoundingIncrement + * @see #getRoundingMode + * @see #setRoundingMode + */ +void DecimalFormat::setRoundingIncrement(double newValue) { + if (newValue > 0.0) { + if (fRoundingIncrement == NULL) { + fRoundingIncrement = new DigitList(); + } + fRoundingIncrement->set((int32_t)newValue); + fRoundingDouble = newValue; + } else { + delete fRoundingIncrement; + fRoundingIncrement = NULL; + fRoundingDouble = 0.0; + } +} + +/** + * Get the rounding mode. + * @return A rounding mode + * @see #setRoundingIncrement + * @see #getRoundingIncrement + * @see #setRoundingMode + */ +DecimalFormat::ERoundingMode DecimalFormat::getRoundingMode() const { + return fRoundingMode; +} + +/** + * Set the rounding mode. This has no effect unless the rounding + * increment is greater than zero. + * @param roundingMode A rounding mode + * @see #setRoundingIncrement + * @see #getRoundingIncrement + * @see #getRoundingMode + */ +void DecimalFormat::setRoundingMode(ERoundingMode roundingMode) { + fRoundingMode = roundingMode; +} + +/** + * Get the width to which the output of <code>format()</code> is padded. + * @return the format width, or zero if no padding is in effect + * @see #setFormatWidth + * @see #getPadCharacter + * @see #setPadCharacter + * @see #getPadPosition + * @see #setPadPosition + */ +int32_t DecimalFormat::getFormatWidth() const { + return fFormatWidth; +} + +/** + * Set the width to which the output of <code>format()</code> is padded. + * This method also controls whether padding is enabled. + * @param width the width to which to pad the result of + * <code>format()</code>, or zero to disable padding. A negative + * width is equivalent to 0. + * @see #getFormatWidth + * @see #getPadCharacter + * @see #setPadCharacter + * @see #getPadPosition + * @see #setPadPosition + */ +void DecimalFormat::setFormatWidth(int32_t width) { + fFormatWidth = (width > 0) ? width : 0; +} + +UnicodeString DecimalFormat::getPadCharacterString() const { + return fPad; +} + +void DecimalFormat::setPadCharacter(const UnicodeString &padChar) { + if (padChar.length() > 0) { + fPad = padChar.char32At(0); + } + else { + fPad = kDefaultPad; + } +} + +/** + * Get the position at which padding will take place. This is the location + * at which padding will be inserted if the result of <code>format()</code> + * is shorter than the format width. + * @return the pad position, one of <code>kPadBeforePrefix</code>, + * <code>kPadAfterPrefix</code>, <code>kPadBeforeSuffix</code>, or + * <code>kPadAfterSuffix</code>. + * @see #setFormatWidth + * @see #getFormatWidth + * @see #setPadCharacter + * @see #getPadCharacter + * @see #setPadPosition + * @see #kPadBeforePrefix + * @see #kPadAfterPrefix + * @see #kPadBeforeSuffix + * @see #kPadAfterSuffix + */ +DecimalFormat::EPadPosition DecimalFormat::getPadPosition() const { + return fPadPosition; +} + +/** + * <strong><font face=helvetica color=red>NEW</font></strong> + * Set the position at which padding will take place. This is the location + * at which padding will be inserted if the result of <code>format()</code> + * is shorter than the format width. This has no effect unless padding is + * enabled. + * @param padPos the pad position, one of <code>kPadBeforePrefix</code>, + * <code>kPadAfterPrefix</code>, <code>kPadBeforeSuffix</code>, or + * <code>kPadAfterSuffix</code>. + * @see #setFormatWidth + * @see #getFormatWidth + * @see #setPadCharacter + * @see #getPadCharacter + * @see #getPadPosition + * @see #kPadBeforePrefix + * @see #kPadAfterPrefix + * @see #kPadBeforeSuffix + * @see #kPadAfterSuffix + */ +void DecimalFormat::setPadPosition(EPadPosition padPos) { + fPadPosition = padPos; +} + +/** + * Return whether or not scientific notation is used. + * @return TRUE if this object formats and parses scientific notation + * @see #setScientificNotation + * @see #getMinimumExponentDigits + * @see #setMinimumExponentDigits + * @see #isExponentSignAlwaysShown + * @see #setExponentSignAlwaysShown + */ +UBool DecimalFormat::isScientificNotation() { + return fUseExponentialNotation; +} + +/** + * Set whether or not scientific notation is used. + * @param useScientific TRUE if this object formats and parses scientific + * notation + * @see #isScientificNotation + * @see #getMinimumExponentDigits + * @see #setMinimumExponentDigits + * @see #isExponentSignAlwaysShown + * @see #setExponentSignAlwaysShown + */ +void DecimalFormat::setScientificNotation(UBool useScientific) { + fUseExponentialNotation = useScientific; +} + +/** + * Return the minimum exponent digits that will be shown. + * @return the minimum exponent digits that will be shown + * @see #setScientificNotation + * @see #isScientificNotation + * @see #setMinimumExponentDigits + * @see #isExponentSignAlwaysShown + * @see #setExponentSignAlwaysShown + */ +int8_t DecimalFormat::getMinimumExponentDigits() const { + return fMinExponentDigits; +} + +/** + * Set the minimum exponent digits that will be shown. This has no + * effect unless scientific notation is in use. + * @param minExpDig a value >= 1 indicating the fewest exponent digits + * that will be shown. Values less than 1 will be treated as 1. + * @see #setScientificNotation + * @see #isScientificNotation + * @see #getMinimumExponentDigits + * @see #isExponentSignAlwaysShown + * @see #setExponentSignAlwaysShown + */ +void DecimalFormat::setMinimumExponentDigits(int8_t minExpDig) { + fMinExponentDigits = (int8_t)((minExpDig > 0) ? minExpDig : 1); +} + +/** + * Return whether the exponent sign is always shown. + * @return TRUE if the exponent is always prefixed with either the + * localized minus sign or the localized plus sign, false if only negative + * exponents are prefixed with the localized minus sign. + * @see #setScientificNotation + * @see #isScientificNotation + * @see #setMinimumExponentDigits + * @see #getMinimumExponentDigits + * @see #setExponentSignAlwaysShown + */ +UBool DecimalFormat::isExponentSignAlwaysShown() { + return fExponentSignAlwaysShown; +} + +/** + * Set whether the exponent sign is always shown. This has no effect + * unless scientific notation is in use. + * @param expSignAlways TRUE if the exponent is always prefixed with either + * the localized minus sign or the localized plus sign, false if only + * negative exponents are prefixed with the localized minus sign. + * @see #setScientificNotation + * @see #isScientificNotation + * @see #setMinimumExponentDigits + * @see #getMinimumExponentDigits + * @see #isExponentSignAlwaysShown + */ +void DecimalFormat::setExponentSignAlwaysShown(UBool expSignAlways) { + fExponentSignAlwaysShown = expSignAlways; +} + +//------------------------------------------------------------------------------ +// Gets the grouping size of the number pattern. For example, thousand or 10 +// thousand groupings. + +int32_t +DecimalFormat::getGroupingSize() const +{ + return fGroupingSize; +} + +//------------------------------------------------------------------------------ +// Gets the grouping size of the number pattern. + +void +DecimalFormat::setGroupingSize(int32_t newValue) +{ + fGroupingSize = newValue; +} + +//------------------------------------------------------------------------------ + +int32_t +DecimalFormat::getSecondaryGroupingSize() const +{ + return fGroupingSize2; +} + +//------------------------------------------------------------------------------ + +void +DecimalFormat::setSecondaryGroupingSize(int32_t newValue) +{ + fGroupingSize2 = newValue; +} + +//------------------------------------------------------------------------------ +// Checks if to show the decimal separator. + +UBool +DecimalFormat::isDecimalSeparatorAlwaysShown() const +{ + return fDecimalSeparatorAlwaysShown; +} + +//------------------------------------------------------------------------------ +// Sets to always show the decimal separator. + +void +DecimalFormat::setDecimalSeparatorAlwaysShown(UBool newValue) +{ + fDecimalSeparatorAlwaysShown = newValue; +} + +//------------------------------------------------------------------------------ +// Emits the pattern of this DecimalFormat instance. + +UnicodeString& +DecimalFormat::toPattern(UnicodeString& result) const +{ + return toPattern(result, FALSE); +} + +//------------------------------------------------------------------------------ +// Emits the localized pattern this DecimalFormat instance. + +UnicodeString& +DecimalFormat::toLocalizedPattern(UnicodeString& result) const +{ + return toPattern(result, TRUE); +} + +//------------------------------------------------------------------------------ +/** + * Expand the affix pattern strings into the expanded affix strings. If any + * affix pattern string is null, do not expand it. This method should be + * called any time the symbols or the affix patterns change in order to keep + * the expanded affix strings up to date. + */ +void DecimalFormat::expandAffixes() { + if (fPosPrefixPattern != 0) { + expandAffix(*fPosPrefixPattern, fPositivePrefix, 0, FALSE); + } + if (fPosSuffixPattern != 0) { + expandAffix(*fPosSuffixPattern, fPositiveSuffix, 0, FALSE); + } + if (fNegPrefixPattern != 0) { + expandAffix(*fNegPrefixPattern, fNegativePrefix, 0, FALSE); + } + if (fNegSuffixPattern != 0) { + expandAffix(*fNegSuffixPattern, fNegativeSuffix, 0, FALSE); + } +#ifdef FMT_DEBUG + UnicodeString s; + s.append("[") + .append(*fPosPrefixPattern).append("|").append(*fPosSuffixPattern) + .append(";") .append(*fNegPrefixPattern).append("|").append(*fNegSuffixPattern) + .append("]->[") + .append(fPositivePrefix).append("|").append(fPositiveSuffix) + .append(";") .append(fNegativePrefix).append("|").append(fNegativeSuffix) + .append("]\n"); + debugout(s); +#endif +} + +/** + * Expand an affix pattern into an affix string. All characters in the + * pattern are literal unless prefixed by kQuote. The following characters + * after kQuote are recognized: PATTERN_PERCENT, PATTERN_PER_MILLE, + * PATTERN_MINUS, and kCurrencySign. If kCurrencySign is doubled (kQuote + + * kCurrencySign + kCurrencySign), it is interpreted as an international + * currency sign. Any other character after a kQuote represents itself. + * kQuote must be followed by another character; kQuote may not occur by + * itself at the end of the pattern. + * + * This method is used in two distinct ways. First, it is used to expand + * the stored affix patterns into actual affixes. For this usage, doFormat + * must be false. Second, it is used to expand the stored affix patterns + * given a specific number (doFormat == true), for those rare cases in + * which a currency format references a ChoiceFormat (e.g., en_IN display + * name for INR). The number itself is taken from digitList. + * + * When used in the first way, this method has a side effect: It sets + * currencyChoice to a ChoiceFormat object, if the currency's display name + * in this locale is a ChoiceFormat pattern (very rare). It only does this + * if currencyChoice is null to start with. + * + * @param pattern the non-null, fPossibly empty pattern + * @param affix string to receive the expanded equivalent of pattern. + * Previous contents are deleted. + * @param doFormat if false, then the pattern will be expanded, and if a + * currency symbol is encountered that expands to a ChoiceFormat, the + * currencyChoice member variable will be initialized if it is null. If + * doFormat is true, then it is assumed that the currencyChoice has been + * created, and it will be used to format the value in digitList. + */ +void DecimalFormat::expandAffix(const UnicodeString& pattern, + UnicodeString& affix, + double number, + UBool doFormat) const { + affix.remove(); + for (int i=0; i<pattern.length(); ) { + UChar32 c = pattern.char32At(i); + i += U16_LENGTH(c); + if (c == kQuote) { + c = pattern.char32At(i); + i += U16_LENGTH(c); + switch (c) { + case kCurrencySign: { + // As of ICU 2.2 we use the currency object, and + // ignore the currency symbols in the DFS, unless + // we have a null currency object. This occurs if + // resurrecting a pre-2.2 object or if the user + // sets a custom DFS. + UBool intl = i<pattern.length() && + pattern.char32At(i) == kCurrencySign; + if (intl) { + ++i; + } + const UChar* currencyUChars = getCurrency(); + if (currencyUChars[0] != 0) { + UErrorCode ec = U_ZERO_ERROR; + if(intl) { + affix += currencyUChars; + } else { + int32_t len; + UBool isChoiceFormat; + const UChar* s = ucurr_getName(currencyUChars, fSymbols->getLocale().getName(), + UCURR_SYMBOL_NAME, &isChoiceFormat, &len, &ec); + if (isChoiceFormat) { + // Two modes here: If doFormat is false, we set up + // currencyChoice. If doFormat is true, we use the + // previously created currencyChoice to format the + // value in digitList. + if (!doFormat) { + // If the currency is handled by a ChoiceFormat, + // then we're not going to use the expanded + // patterns. Instantiate the ChoiceFormat and + // return. + if (fCurrencyChoice == NULL) { + // TODO Replace double-check with proper thread-safe code + ChoiceFormat* fmt = new ChoiceFormat(s, ec); + if (U_SUCCESS(ec)) { + umtx_lock(NULL); + if (fCurrencyChoice == NULL) { + // Cast away const + ((DecimalFormat*)this)->fCurrencyChoice = fmt; + fmt = NULL; + } + umtx_unlock(NULL); + delete fmt; + } + } + // We could almost return null or "" here, since the + // expanded affixes are almost not used at all + // in this situation. However, one method -- + // toPattern() -- still does use the expanded + // affixes, in order to set up a padding + // pattern. We use the CURRENCY_SIGN as a + // placeholder. + affix.append(kCurrencySign); + } else { + if (fCurrencyChoice != NULL) { + FieldPosition pos(0); // ignored + if (number < 0) { + number = -number; + } + fCurrencyChoice->format(number, affix, pos); + } else { + // We only arrive here if the currency choice + // format in the locale data is INVALID. + affix += currencyUChars; + } + } + continue; + } + affix += UnicodeString(s, len); + } + } else { + if(intl) { + affix += getConstSymbol(DecimalFormatSymbols::kIntlCurrencySymbol); + } else { + affix += getConstSymbol(DecimalFormatSymbols::kCurrencySymbol); + } + } + break; + } + case kPatternPercent: + affix += getConstSymbol(DecimalFormatSymbols::kPercentSymbol); + break; + case kPatternPerMill: + affix += getConstSymbol(DecimalFormatSymbols::kPerMillSymbol); + break; + case kPatternPlus: + affix += getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol); + break; + case kPatternMinus: + affix += getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol); + break; + default: + affix.append(c); + break; + } + } + else { + affix.append(c); + } + } +} + +/** + * Append an affix to the given StringBuffer. + * @param buf buffer to append to + * @param isNegative + * @param isPrefix + */ +int32_t DecimalFormat::appendAffix(UnicodeString& buf, double number, + UBool isNegative, UBool isPrefix) const { + if (fCurrencyChoice != 0) { + const UnicodeString* affixPat = 0; + if (isPrefix) { + affixPat = isNegative ? fNegPrefixPattern : fPosPrefixPattern; + } else { + affixPat = isNegative ? fNegSuffixPattern : fPosSuffixPattern; + } + UnicodeString affixBuf; + expandAffix(*affixPat, affixBuf, number, TRUE); + buf.append(affixBuf); + return affixBuf.length(); + } + + const UnicodeString* affix = NULL; + if (isPrefix) { + affix = isNegative ? &fNegativePrefix : &fPositivePrefix; + } else { + affix = isNegative ? &fNegativeSuffix : &fPositiveSuffix; + } + buf.append(*affix); + return affix->length(); +} + +/** + * Appends an affix pattern to the given StringBuffer, quoting special + * characters as needed. Uses the internal affix pattern, if that exists, + * or the literal affix, if the internal affix pattern is null. The + * appended string will generate the same affix pattern (or literal affix) + * when passed to toPattern(). + * + * @param appendTo the affix string is appended to this + * @param affixPattern a pattern such as fPosPrefixPattern; may be null + * @param expAffix a corresponding expanded affix, such as fPositivePrefix. + * Ignored unless affixPattern is null. If affixPattern is null, then + * expAffix is appended as a literal affix. + * @param localized true if the appended pattern should contain localized + * pattern characters; otherwise, non-localized pattern chars are appended + */ +void DecimalFormat::appendAffixPattern(UnicodeString& appendTo, + const UnicodeString* affixPattern, + const UnicodeString& expAffix, + UBool localized) const { + if (affixPattern == 0) { + appendAffixPattern(appendTo, expAffix, localized); + } else { + int i; + for (int pos=0; pos<affixPattern->length(); pos=i) { + i = affixPattern->indexOf(kQuote, pos); + if (i < 0) { + UnicodeString s; + affixPattern->extractBetween(pos, affixPattern->length(), s); + appendAffixPattern(appendTo, s, localized); + break; + } + if (i > pos) { + UnicodeString s; + affixPattern->extractBetween(pos, i, s); + appendAffixPattern(appendTo, s, localized); + } + UChar32 c = affixPattern->char32At(++i); + ++i; + if (c == kQuote) { + appendTo.append(c).append(c); + // Fall through and append another kQuote below + } else if (c == kCurrencySign && + i<affixPattern->length() && + affixPattern->char32At(i) == kCurrencySign) { + ++i; + appendTo.append(c).append(c); + } else if (localized) { + switch (c) { + case kPatternPercent: + appendTo += getConstSymbol(DecimalFormatSymbols::kPercentSymbol); + break; + case kPatternPerMill: + appendTo += getConstSymbol(DecimalFormatSymbols::kPerMillSymbol); + break; + case kPatternPlus: + appendTo += getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol); + break; + case kPatternMinus: + appendTo += getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol); + break; + default: + appendTo.append(c); + } + } else { + appendTo.append(c); + } + } + } +} + +/** + * Append an affix to the given StringBuffer, using quotes if + * there are special characters. Single quotes themselves must be + * escaped in either case. + */ +void +DecimalFormat::appendAffixPattern(UnicodeString& appendTo, + const UnicodeString& affix, + UBool localized) const { + UBool needQuote; + if(localized) { + needQuote = affix.indexOf(getConstSymbol(DecimalFormatSymbols::kZeroDigitSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kPercentSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kPerMillSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kDigitSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol)) >= 0 + || affix.indexOf(getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol)) >= 0 + || affix.indexOf(kCurrencySign) >= 0; + } + else { + needQuote = affix.indexOf(kPatternZeroDigit) >= 0 + || affix.indexOf(kPatternGroupingSeparator) >= 0 + || affix.indexOf(kPatternDecimalSeparator) >= 0 + || affix.indexOf(kPatternPercent) >= 0 + || affix.indexOf(kPatternPerMill) >= 0 + || affix.indexOf(kPatternDigit) >= 0 + || affix.indexOf(kPatternSeparator) >= 0 + || affix.indexOf(kPatternExponent) >= 0 + || affix.indexOf(kPatternPlus) >= 0 + || affix.indexOf(kPatternMinus) >= 0 + || affix.indexOf(kCurrencySign) >= 0; + } + if (needQuote) + appendTo += (UChar)0x0027 /*'\''*/; + if (affix.indexOf((UChar)0x0027 /*'\''*/) < 0) + appendTo += affix; + else { + for (int32_t j = 0; j < affix.length(); ) { + UChar32 c = affix.char32At(j); + j += U16_LENGTH(c); + appendTo += c; + if (c == 0x0027 /*'\''*/) + appendTo += c; + } + } + if (needQuote) + appendTo += (UChar)0x0027 /*'\''*/; +} + +//------------------------------------------------------------------------------ + +UnicodeString& +DecimalFormat::toPattern(UnicodeString& result, UBool localized) const +{ + result.remove(); + UChar32 zero, sigDigit = kPatternSignificantDigit; + UnicodeString digit, group; + int32_t i; + int32_t roundingDecimalPos = 0; // Pos of decimal in roundingDigits + UnicodeString roundingDigits; + int32_t padPos = (fFormatWidth > 0) ? fPadPosition : -1; + UnicodeString padSpec; + UBool useSigDig = areSignificantDigitsUsed(); + + if (localized) { + digit.append(getConstSymbol(DecimalFormatSymbols::kDigitSymbol)); + group.append(getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)); + zero = getConstSymbol(DecimalFormatSymbols::kZeroDigitSymbol).char32At(0); + if (useSigDig) { + sigDigit = getConstSymbol(DecimalFormatSymbols::kSignificantDigitSymbol).char32At(0); + } + } + else { + digit.append((UChar)kPatternDigit); + group.append((UChar)kPatternGroupingSeparator); + zero = (UChar32)kPatternZeroDigit; + } + if (fFormatWidth > 0) { + if (localized) { + padSpec.append(getConstSymbol(DecimalFormatSymbols::kPadEscapeSymbol)); + } + else { + padSpec.append((UChar)kPatternPadEscape); + } + padSpec.append(fPad); + } + if (fRoundingIncrement != NULL) { + for(i=0; i<fRoundingIncrement->fCount; ++i) { + roundingDigits.append((UChar)fRoundingIncrement->fDigits[i]); + } + roundingDecimalPos = fRoundingIncrement->fDecimalAt; + } + for (int32_t part=0; part<2; ++part) { + if (padPos == kPadBeforePrefix) { + result.append(padSpec); + } + appendAffixPattern(result, + (part==0 ? fPosPrefixPattern : fNegPrefixPattern), + (part==0 ? fPositivePrefix : fNegativePrefix), + localized); + if (padPos == kPadAfterPrefix && ! padSpec.isEmpty()) { + result.append(padSpec); + } + int32_t sub0Start = result.length(); + int32_t g = isGroupingUsed() ? _max(0, fGroupingSize) : 0; + if (g > 0 && fGroupingSize2 > 0 && fGroupingSize2 != fGroupingSize) { + g += fGroupingSize2; + } + int32_t maxDig = 0, minDig = 0, maxSigDig = 0; + if (useSigDig) { + minDig = getMinimumSignificantDigits(); + maxDig = maxSigDig = getMaximumSignificantDigits(); + } else { + minDig = getMinimumIntegerDigits(); + maxDig = getMaximumIntegerDigits(); + } + if (fUseExponentialNotation) { + if (maxDig > kMaxScientificIntegerDigits) { + maxDig = 1; + } + } else if (useSigDig) { + maxDig = _max(maxDig, g+1); + } else { + maxDig = _max(_max(g, getMinimumIntegerDigits()), + roundingDecimalPos) + 1; + } + for (i = maxDig; i > 0; --i) { + if (!fUseExponentialNotation && i<maxDig && + isGroupingPosition(i)) { + result.append(group); + } + if (useSigDig) { + // #@,@### (maxSigDig == 5, minSigDig == 2) + // 65 4321 (1-based pos, count from the right) + // Use # if pos > maxSigDig or 1 <= pos <= (maxSigDig - minSigDig) + // Use @ if (maxSigDig - minSigDig) < pos <= maxSigDig + if (maxSigDig >= i && i > (maxSigDig - minDig)) { + result.append(sigDigit); + } else { + result.append(digit); + } + } else { + if (! roundingDigits.isEmpty()) { + int32_t pos = roundingDecimalPos - i; + if (pos >= 0 && pos < roundingDigits.length()) { + result.append((UChar) (roundingDigits.char32At(pos) - kPatternZeroDigit + zero)); + continue; + } + } + if (i<=minDig) { + result.append(zero); + } else { + result.append(digit); + } + } + } + if (!useSigDig) { + if (getMaximumFractionDigits() > 0 || fDecimalSeparatorAlwaysShown) { + if (localized) { + result += getConstSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol); + } + else { + result.append((UChar)kPatternDecimalSeparator); + } + } + int32_t pos = roundingDecimalPos; + for (i = 0; i < getMaximumFractionDigits(); ++i) { + if (! roundingDigits.isEmpty() && pos < roundingDigits.length()) { + if (pos < 0) { + result.append(zero); + } + else { + result.append((UChar)(roundingDigits.char32At(pos) - kPatternZeroDigit + zero)); + } + ++pos; + continue; + } + if (i<getMinimumFractionDigits()) { + result.append(zero); + } + else { + result.append(digit); + } + } + } + if (fUseExponentialNotation) { + if (localized) { + result += getConstSymbol(DecimalFormatSymbols::kExponentialSymbol); + } + else { + result.append((UChar)kPatternExponent); + } + if (fExponentSignAlwaysShown) { + if (localized) { + result += getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol); + } + else { + result.append((UChar)kPatternPlus); + } + } + for (i=0; i<fMinExponentDigits; ++i) { + result.append(zero); + } + } + if (! padSpec.isEmpty() && !fUseExponentialNotation) { + int32_t add = fFormatWidth - result.length() + sub0Start + - ((part == 0) + ? fPositivePrefix.length() + fPositiveSuffix.length() + : fNegativePrefix.length() + fNegativeSuffix.length()); + while (add > 0) { + result.insert(sub0Start, digit); + ++maxDig; + --add; + // Only add a grouping separator if we have at least + // 2 additional characters to be added, so we don't + // end up with ",###". + if (add>1 && isGroupingPosition(maxDig)) { + result.insert(sub0Start, group); + --add; + } + } + } + if (fPadPosition == kPadBeforeSuffix && ! padSpec.isEmpty()) { + result.append(padSpec); + } + if (part == 0) { + appendAffixPattern(result, fPosSuffixPattern, fPositiveSuffix, localized); + if (fPadPosition == kPadAfterSuffix && ! padSpec.isEmpty()) { + result.append(padSpec); + } + UBool isDefault = FALSE; + if ((fNegSuffixPattern == fPosSuffixPattern && // both null + fNegativeSuffix == fPositiveSuffix) + || (fNegSuffixPattern != 0 && fPosSuffixPattern != 0 && + *fNegSuffixPattern == *fPosSuffixPattern)) + { + if (fNegPrefixPattern != NULL && fPosPrefixPattern != NULL) + { + int32_t length = fPosPrefixPattern->length(); + isDefault = fNegPrefixPattern->length() == (length+2) && + (*fNegPrefixPattern)[(int32_t)0] == kQuote && + (*fNegPrefixPattern)[(int32_t)1] == kPatternMinus && + fNegPrefixPattern->compare(2, length, *fPosPrefixPattern, 0, length) == 0; + } + if (!isDefault && + fNegPrefixPattern == NULL && fPosPrefixPattern == NULL) + { + int32_t length = fPositivePrefix.length(); + isDefault = fNegativePrefix.length() == (length+1) && + fNegativePrefix.compare(getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol)) == 0 && + fNegativePrefix.compare(1, length, fPositivePrefix, 0, length) == 0; + } + } + if (isDefault) { + break; // Don't output default negative subpattern + } else { + if (localized) { + result += getConstSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol); + } + else { + result.append((UChar)kPatternSeparator); + } + } + } else { + appendAffixPattern(result, fNegSuffixPattern, fNegativeSuffix, localized); + if (fPadPosition == kPadAfterSuffix && ! padSpec.isEmpty()) { + result.append(padSpec); + } + } + } + + return result; +} + +//------------------------------------------------------------------------------ + +void +DecimalFormat::applyPattern(const UnicodeString& pattern, UErrorCode& status) +{ + UParseError parseError; + applyPattern(pattern, FALSE, parseError, status); +} + +//------------------------------------------------------------------------------ + +void +DecimalFormat::applyPattern(const UnicodeString& pattern, + UParseError& parseError, + UErrorCode& status) +{ + applyPattern(pattern, FALSE, parseError, status); +} +//------------------------------------------------------------------------------ + +void +DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status) +{ + UParseError parseError; + applyPattern(pattern, TRUE,parseError,status); +} + +//------------------------------------------------------------------------------ + +void +DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, + UParseError& parseError, + UErrorCode& status) +{ + applyPattern(pattern, TRUE,parseError,status); +} + +//------------------------------------------------------------------------------ + +void +DecimalFormat::applyPattern(const UnicodeString& pattern, + UBool localized, + UParseError& parseError, + UErrorCode& status) +{ + if (U_FAILURE(status)) + { + return; + } + // Clear error struct + parseError.offset = -1; + parseError.preContext[0] = parseError.postContext[0] = (UChar)0; + + // Set the significant pattern symbols + UChar32 zeroDigit = kPatternZeroDigit; // '0' + UChar32 sigDigit = kPatternSignificantDigit; // '@' + UnicodeString groupingSeparator ((UChar)kPatternGroupingSeparator); + UnicodeString decimalSeparator ((UChar)kPatternDecimalSeparator); + UnicodeString percent ((UChar)kPatternPercent); + UnicodeString perMill ((UChar)kPatternPerMill); + UnicodeString digit ((UChar)kPatternDigit); // '#' + UnicodeString separator ((UChar)kPatternSeparator); + UnicodeString exponent ((UChar)kPatternExponent); + UnicodeString plus ((UChar)kPatternPlus); + UnicodeString minus ((UChar)kPatternMinus); + UnicodeString padEscape ((UChar)kPatternPadEscape); + // Substitute with the localized symbols if necessary + if (localized) { + zeroDigit = getConstSymbol(DecimalFormatSymbols::kZeroDigitSymbol).char32At(0); + sigDigit = getConstSymbol(DecimalFormatSymbols::kSignificantDigitSymbol).char32At(0); + groupingSeparator. remove().append(getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)); + decimalSeparator. remove().append(getConstSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol)); + percent. remove().append(getConstSymbol(DecimalFormatSymbols::kPercentSymbol)); + perMill. remove().append(getConstSymbol(DecimalFormatSymbols::kPerMillSymbol)); + digit. remove().append(getConstSymbol(DecimalFormatSymbols::kDigitSymbol)); + separator. remove().append(getConstSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol)); + exponent. remove().append(getConstSymbol(DecimalFormatSymbols::kExponentialSymbol)); + plus. remove().append(getConstSymbol(DecimalFormatSymbols::kPlusSignSymbol)); + minus. remove().append(getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol)); + padEscape. remove().append(getConstSymbol(DecimalFormatSymbols::kPadEscapeSymbol)); + } + UChar nineDigit = (UChar)(zeroDigit + 9); + int32_t digitLen = digit.length(); + int32_t groupSepLen = groupingSeparator.length(); + int32_t decimalSepLen = decimalSeparator.length(); + + int32_t pos = 0; + int32_t patLen = pattern.length(); + // Part 0 is the positive pattern. Part 1, if present, is the negative + // pattern. + for (int32_t part=0; part<2 && pos<patLen; ++part) { + // The subpart ranges from 0 to 4: 0=pattern proper, 1=prefix, + // 2=suffix, 3=prefix in quote, 4=suffix in quote. Subpart 0 is + // between the prefix and suffix, and consists of pattern + // characters. In the prefix and suffix, percent, perMill, and + // currency symbols are recognized and translated. + int32_t subpart = 1, sub0Start = 0, sub0Limit = 0, sub2Limit = 0; + + // It's important that we don't change any fields of this object + // prematurely. We set the following variables for the multiplier, + // grouping, etc., and then only change the actual object fields if + // everything parses correctly. This also lets us register + // the data from part 0 and ignore the part 1, except for the + // prefix and suffix. + UnicodeString prefix; + UnicodeString suffix; + int32_t decimalPos = -1; + int32_t multiplier = 1; + int32_t digitLeftCount = 0, zeroDigitCount = 0, digitRightCount = 0, sigDigitCount = 0; + int8_t groupingCount = -1; + int8_t groupingCount2 = -1; + int32_t padPos = -1; + UChar32 padChar = 0; + int32_t roundingPos = -1; + DigitList roundingInc; + int8_t expDigits = -1; + UBool expSignAlways = FALSE; + UBool isCurrency = FALSE; + + // The affix is either the prefix or the suffix. + UnicodeString* affix = &prefix; + + int32_t start = pos; + UBool isPartDone = FALSE; + UChar32 ch; + + for (; !isPartDone && pos < patLen; ) { + // Todo: account for surrogate pairs + ch = pattern.char32At(pos); + switch (subpart) { + case 0: // Pattern proper subpart (between prefix & suffix) + // Process the digits, decimal, and grouping characters. We + // record five pieces of information. We expect the digits + // to occur in the pattern ####00.00####, and we record the + // number of left digits, zero (central) digits, and right + // digits. The position of the last grouping character is + // recorded (should be somewhere within the first two blocks + // of characters), as is the position of the decimal point, + // if any (should be in the zero digits). If there is no + // decimal point, then there should be no right digits. + if (pattern.compare(pos, digitLen, digit) == 0) { + if (zeroDigitCount > 0 || sigDigitCount > 0) { + ++digitRightCount; + } else { + ++digitLeftCount; + } + if (groupingCount >= 0 && decimalPos < 0) { + ++groupingCount; + } + pos += digitLen; + } else if ((ch >= zeroDigit && ch <= nineDigit) || + ch == sigDigit) { + if (digitRightCount > 0) { + // Unexpected '0' + debug("Unexpected '0'") + status = U_UNEXPECTED_TOKEN; + syntaxError(pattern,pos,parseError); + return; + } + if (ch == sigDigit) { + ++sigDigitCount; + } else { + ++zeroDigitCount; + if (ch != zeroDigit && roundingPos < 0) { + roundingPos = digitLeftCount + zeroDigitCount; + } + if (roundingPos >= 0) { + roundingInc.append((char)(ch - zeroDigit + '0')); + } + } + if (groupingCount >= 0 && decimalPos < 0) { + ++groupingCount; + } + pos += U16_LENGTH(ch); + } else if (pattern.compare(pos, groupSepLen, groupingSeparator) == 0) { + if (decimalPos >= 0) { + // Grouping separator after decimal + debug("Grouping separator after decimal") + status = U_UNEXPECTED_TOKEN; + syntaxError(pattern,pos,parseError); + return; + } + groupingCount2 = groupingCount; + groupingCount = 0; + pos += groupSepLen; + } else if (pattern.compare(pos, decimalSepLen, decimalSeparator) == 0) { + if (decimalPos >= 0) { + // Multiple decimal separators + debug("Multiple decimal separators") + status = U_MULTIPLE_DECIMAL_SEPARATORS; + syntaxError(pattern,pos,parseError); + return; + } + // Intentionally incorporate the digitRightCount, + // even though it is illegal for this to be > 0 + // at this point. We check pattern syntax below. + decimalPos = digitLeftCount + zeroDigitCount + digitRightCount; + pos += decimalSepLen; + } else { + if (pattern.compare(pos, exponent.length(), exponent) == 0) { + if (expDigits >= 0) { + // Multiple exponential symbols + debug("Multiple exponential symbols") + status = U_MULTIPLE_EXPONENTIAL_SYMBOLS; + syntaxError(pattern,pos,parseError); + return; + } + if (groupingCount >= 0) { + // Grouping separator in exponential pattern + debug("Grouping separator in exponential pattern") + status = U_MALFORMED_EXPONENTIAL_PATTERN; + syntaxError(pattern,pos,parseError); + return; + } + pos += exponent.length(); + // Check for positive prefix + if (pos < patLen + && pattern.compare(pos, plus.length(), plus) == 0) { + expSignAlways = TRUE; + pos += plus.length(); + } + // Use lookahead to parse out the exponential part of the + // pattern, then jump into suffix subpart. + expDigits = 0; + while (pos < patLen && + pattern.char32At(pos) == zeroDigit) { + ++expDigits; + pos += U16_LENGTH(zeroDigit); + } + + // 1. Require at least one mantissa pattern digit + // 2. Disallow "#+ @" in mantissa + // 3. Require at least one exponent pattern digit + if (((digitLeftCount + zeroDigitCount) < 1 && + (sigDigitCount + digitRightCount) < 1) || + (sigDigitCount > 0 && digitLeftCount > 0) || + expDigits < 1) { + // Malformed exponential pattern + debug("Malformed exponential pattern") + status = U_MALFORMED_EXPONENTIAL_PATTERN; + syntaxError(pattern,pos,parseError); + return; + } + } + // Transition to suffix subpart + subpart = 2; // suffix subpart + affix = &suffix; + sub0Limit = pos; + continue; + } + break; + case 1: // Prefix subpart + case 2: // Suffix subpart + // Process the prefix / suffix characters + // Process unquoted characters seen in prefix or suffix + // subpart. + + // Several syntax characters implicitly begins the + // next subpart if we are in the prefix; otherwise + // they are illegal if unquoted. + if (!pattern.compare(pos, digitLen, digit) || + !pattern.compare(pos, groupSepLen, groupingSeparator) || + !pattern.compare(pos, decimalSepLen, decimalSeparator) || + (ch >= zeroDigit && ch <= nineDigit) || + ch == sigDigit) { + if (subpart == 1) { // prefix subpart + subpart = 0; // pattern proper subpart + sub0Start = pos; // Reprocess this character + continue; + } else { + status = U_UNQUOTED_SPECIAL; + syntaxError(pattern,pos,parseError); + return; + } + } else if (ch == kCurrencySign) { + affix->append(kQuote); // Encode currency + // Use lookahead to determine if the currency sign is + // doubled or not. + U_ASSERT(U16_LENGTH(kCurrencySign) == 1); + if ((pos+1) < pattern.length() && pattern[pos+1] == kCurrencySign) { + affix->append(kCurrencySign); + ++pos; // Skip over the doubled character + } + isCurrency = TRUE; + // Fall through to append(ch) + } else if (ch == kQuote) { + // A quote outside quotes indicates either the opening + // quote or two quotes, which is a quote literal. That is, + // we have the first quote in 'do' or o''clock. + U_ASSERT(U16_LENGTH(kQuote) == 1); + ++pos; + if (pos < pattern.length() && pattern[pos] == kQuote) { + affix->append(kQuote); // Encode quote + // Fall through to append(ch) + } else { + subpart += 2; // open quote + continue; + } + } else if (pattern.compare(pos, separator.length(), separator) == 0) { + // Don't allow separators in the prefix, and don't allow + // separators in the second pattern (part == 1). + if (subpart == 1 || part == 1) { + // Unexpected separator + debug("Unexpected separator") + status = U_UNEXPECTED_TOKEN; + syntaxError(pattern,pos,parseError); + return; + } + sub2Limit = pos; + isPartDone = TRUE; // Go to next part + pos += separator.length(); + break; + } else if (pattern.compare(pos, percent.length(), percent) == 0) { + // Next handle characters which are appended directly. + if (multiplier != 1) { + // Too many percent/perMill characters + debug("Too many percent characters") + status = U_MULTIPLE_PERCENT_SYMBOLS; + syntaxError(pattern,pos,parseError); + return; + } + affix->append(kQuote); // Encode percent/perMill + affix->append(kPatternPercent); // Use unlocalized pattern char + multiplier = 100; + pos += percent.length(); + break; + } else if (pattern.compare(pos, perMill.length(), perMill) == 0) { + // Next handle characters which are appended directly. + if (multiplier != 1) { + // Too many percent/perMill characters + debug("Too many perMill characters") + status = U_MULTIPLE_PERMILL_SYMBOLS; + syntaxError(pattern,pos,parseError); + return; + } + affix->append(kQuote); // Encode percent/perMill + affix->append(kPatternPerMill); // Use unlocalized pattern char + multiplier = 1000; + pos += perMill.length(); + break; + } else if (pattern.compare(pos, padEscape.length(), padEscape) == 0) { + if (padPos >= 0 || // Multiple pad specifiers + (pos+1) == pattern.length()) { // Nothing after padEscape + debug("Multiple pad specifiers") + status = U_MULTIPLE_PAD_SPECIFIERS; + syntaxError(pattern,pos,parseError); + return; + } + padPos = pos; + pos += padEscape.length(); + padChar = pattern.char32At(pos); + pos += U16_LENGTH(padChar); + break; + } else if (pattern.compare(pos, minus.length(), minus) == 0) { + affix->append(kQuote); // Encode minus + affix->append(kPatternMinus); + pos += minus.length(); + break; + } else if (pattern.compare(pos, plus.length(), plus) == 0) { + affix->append(kQuote); // Encode plus + affix->append(kPatternPlus); + pos += plus.length(); + break; + } + // Unquoted, non-special characters fall through to here, as + // well as other code which needs to append something to the + // affix. + affix->append(ch); + pos += U16_LENGTH(ch); + break; + case 3: // Prefix subpart, in quote + case 4: // Suffix subpart, in quote + // A quote within quotes indicates either the closing + // quote or two quotes, which is a quote literal. That is, + // we have the second quote in 'do' or 'don''t'. + if (ch == kQuote) { + ++pos; + if (pos < pattern.length() && pattern[pos] == kQuote) { + affix->append(kQuote); // Encode quote + // Fall through to append(ch) + } else { + subpart -= 2; // close quote + continue; + } + } + affix->append(ch); + pos += U16_LENGTH(ch); + break; + } + } + + if (sub0Limit == 0) { + sub0Limit = pattern.length(); + } + + if (sub2Limit == 0) { + sub2Limit = pattern.length(); + } + + /* Handle patterns with no '0' pattern character. These patterns + * are legal, but must be recodified to make sense. "##.###" -> + * "#0.###". ".###" -> ".0##". + * + * We allow patterns of the form "####" to produce a zeroDigitCount + * of zero (got that?); although this seems like it might make it + * possible for format() to produce empty strings, format() checks + * for this condition and outputs a zero digit in this situation. + * Having a zeroDigitCount of zero yields a minimum integer digits + * of zero, which allows proper round-trip patterns. We don't want + * "#" to become "#0" when toPattern() is called (even though that's + * what it really is, semantically). + */ + if (zeroDigitCount == 0 && sigDigitCount == 0 && + digitLeftCount > 0 && decimalPos >= 0) { + // Handle "###.###" and "###." and ".###" + int n = decimalPos; + if (n == 0) + ++n; // Handle ".###" + digitRightCount = digitLeftCount - n; + digitLeftCount = n - 1; + zeroDigitCount = 1; + } + + // Do syntax checking on the digits, decimal points, and quotes. + if ((decimalPos < 0 && digitRightCount > 0 && sigDigitCount == 0) || + (decimalPos >= 0 && + (sigDigitCount > 0 || + decimalPos < digitLeftCount || + decimalPos > (digitLeftCount + zeroDigitCount))) || + groupingCount == 0 || groupingCount2 == 0 || + (sigDigitCount > 0 && zeroDigitCount > 0) || + subpart > 2) + { // subpart > 2 == unmatched quote + debug("Syntax error") + status = U_PATTERN_SYNTAX_ERROR; + syntaxError(pattern,pos,parseError); + return; + } + + // Make sure pad is at legal position before or after affix. + if (padPos >= 0) { + if (padPos == start) { + padPos = kPadBeforePrefix; + } else if (padPos+2 == sub0Start) { + padPos = kPadAfterPrefix; + } else if (padPos == sub0Limit) { + padPos = kPadBeforeSuffix; + } else if (padPos+2 == sub2Limit) { + padPos = kPadAfterSuffix; + } else { + // Illegal pad position + debug("Illegal pad position") + status = U_ILLEGAL_PAD_POSITION; + syntaxError(pattern,pos,parseError); + return; + } + } + + if (part == 0) { + delete fPosPrefixPattern; + delete fPosSuffixPattern; + delete fNegPrefixPattern; + delete fNegSuffixPattern; + fPosPrefixPattern = new UnicodeString(prefix); + /* test for NULL */ + if (fPosPrefixPattern == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fPosSuffixPattern = new UnicodeString(suffix); + /* test for NULL */ + if (fPosSuffixPattern == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + delete fPosPrefixPattern; + return; + } + fNegPrefixPattern = 0; + fNegSuffixPattern = 0; + + fUseExponentialNotation = (expDigits >= 0); + if (fUseExponentialNotation) { + fMinExponentDigits = expDigits; + } + fExponentSignAlwaysShown = expSignAlways; + fIsCurrencyFormat = isCurrency; + int32_t digitTotalCount = digitLeftCount + zeroDigitCount + digitRightCount; + // The effectiveDecimalPos is the position the decimal is at or + // would be at if there is no decimal. Note that if + // decimalPos<0, then digitTotalCount == digitLeftCount + + // zeroDigitCount. + int32_t effectiveDecimalPos = decimalPos >= 0 ? decimalPos : digitTotalCount; + UBool isSigDig = (sigDigitCount > 0); + setSignificantDigitsUsed(isSigDig); + if (isSigDig) { + setMinimumSignificantDigits(sigDigitCount); + setMaximumSignificantDigits(sigDigitCount + digitRightCount); + } else { + int32_t minInt = effectiveDecimalPos - digitLeftCount; + setMinimumIntegerDigits(minInt); + setMaximumIntegerDigits(fUseExponentialNotation + ? digitLeftCount + getMinimumIntegerDigits() + : kDoubleIntegerDigits); + setMaximumFractionDigits(decimalPos >= 0 + ? (digitTotalCount - decimalPos) : 0); + setMinimumFractionDigits(decimalPos >= 0 + ? (digitLeftCount + zeroDigitCount - decimalPos) : 0); + } + setGroupingUsed(groupingCount > 0); + fGroupingSize = (groupingCount > 0) ? groupingCount : 0; + fGroupingSize2 = (groupingCount2 > 0 && groupingCount2 != groupingCount) + ? groupingCount2 : 0; + fMultiplier = multiplier; + setDecimalSeparatorAlwaysShown(decimalPos == 0 + || decimalPos == digitTotalCount); + if (padPos >= 0) { + fPadPosition = (EPadPosition) padPos; + // To compute the format width, first set up sub0Limit - + // sub0Start. Add in prefix/suffix length later. + + // fFormatWidth = prefix.length() + suffix.length() + + // sub0Limit - sub0Start; + fFormatWidth = sub0Limit - sub0Start; + fPad = padChar; + } else { + fFormatWidth = 0; + } + if (roundingPos >= 0) { + roundingInc.fDecimalAt = effectiveDecimalPos - roundingPos; + if (fRoundingIncrement != NULL) { + *fRoundingIncrement = roundingInc; + } else { + fRoundingIncrement = new DigitList(roundingInc); + /* test for NULL */ + if (fRoundingIncrement == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + delete fPosPrefixPattern; + delete fPosSuffixPattern; + return; + } + } + fRoundingDouble = fRoundingIncrement->getDouble(); + fRoundingMode = kRoundHalfEven; + } else { + setRoundingIncrement(0.0); + } + } else { + fNegPrefixPattern = new UnicodeString(prefix); + /* test for NULL */ + if (fNegPrefixPattern == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fNegSuffixPattern = new UnicodeString(suffix); + /* test for NULL */ + if (fNegSuffixPattern == 0) { + delete fNegPrefixPattern; + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + } + + if (pattern.length() == 0) { + delete fNegPrefixPattern; + delete fNegSuffixPattern; + fNegPrefixPattern = NULL; + fNegSuffixPattern = NULL; + if (fPosPrefixPattern != NULL) { + fPosPrefixPattern->remove(); + } else { + fPosPrefixPattern = new UnicodeString(); + /* test for NULL */ + if (fPosPrefixPattern == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + if (fPosSuffixPattern != NULL) { + fPosSuffixPattern->remove(); + } else { + fPosSuffixPattern = new UnicodeString(); + /* test for NULL */ + if (fPosSuffixPattern == 0) { + delete fPosPrefixPattern; + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + + setMinimumIntegerDigits(0); + setMaximumIntegerDigits(kDoubleIntegerDigits); + setMinimumFractionDigits(0); + setMaximumFractionDigits(kDoubleFractionDigits); + + fUseExponentialNotation = FALSE; + fIsCurrencyFormat = FALSE; + setGroupingUsed(FALSE); + fGroupingSize = 0; + fGroupingSize2 = 0; + fMultiplier = 1; + setDecimalSeparatorAlwaysShown(FALSE); + fFormatWidth = 0; + setRoundingIncrement(0.0); + } + + // If there was no negative pattern, or if the negative pattern is + // identical to the positive pattern, then prepend the minus sign to the + // positive pattern to form the negative pattern. + if (fNegPrefixPattern == NULL || + (*fNegPrefixPattern == *fPosPrefixPattern + && *fNegSuffixPattern == *fPosSuffixPattern)) { + _copy_us_ptr(&fNegSuffixPattern, fPosSuffixPattern); + if (fNegPrefixPattern == NULL) { + fNegPrefixPattern = new UnicodeString(); + /* test for NULL */ + if (fNegPrefixPattern == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } else { + fNegPrefixPattern->remove(); + } + fNegPrefixPattern->append(kQuote).append(kPatternMinus) + .append(*fPosPrefixPattern); + } +#ifdef FMT_DEBUG + UnicodeString s; + s.append("\"").append(pattern).append("\"->"); + debugout(s); +#endif + expandAffixes(); + if (fFormatWidth > 0) { + // Finish computing format width (see above) + fFormatWidth += fPositivePrefix.length() + fPositiveSuffix.length(); + } +} + +/** + * Sets the maximum number of digits allowed in the integer portion of a + * number. This override limits the integer digit count to 309. + * @see NumberFormat#setMaximumIntegerDigits + */ +void DecimalFormat::setMaximumIntegerDigits(int32_t newValue) { + NumberFormat::setMaximumIntegerDigits(_min(newValue, kDoubleIntegerDigits)); +} + +/** + * Sets the minimum number of digits allowed in the integer portion of a + * number. This override limits the integer digit count to 309. + * @see NumberFormat#setMinimumIntegerDigits + */ +void DecimalFormat::setMinimumIntegerDigits(int32_t newValue) { + NumberFormat::setMinimumIntegerDigits(_min(newValue, kDoubleIntegerDigits)); +} + +/** + * Sets the maximum number of digits allowed in the fraction portion of a + * number. This override limits the fraction digit count to 340. + * @see NumberFormat#setMaximumFractionDigits + */ +void DecimalFormat::setMaximumFractionDigits(int32_t newValue) { + NumberFormat::setMaximumFractionDigits(_min(newValue, kDoubleFractionDigits)); +} + +/** + * Sets the minimum number of digits allowed in the fraction portion of a + * number. This override limits the fraction digit count to 340. + * @see NumberFormat#setMinimumFractionDigits + */ +void DecimalFormat::setMinimumFractionDigits(int32_t newValue) { + NumberFormat::setMinimumFractionDigits(_min(newValue, kDoubleFractionDigits)); +} + +int32_t DecimalFormat::getMinimumSignificantDigits() const { + return fMinSignificantDigits; +} + +int32_t DecimalFormat::getMaximumSignificantDigits() const { + return fMaxSignificantDigits; +} + +void DecimalFormat::setMinimumSignificantDigits(int32_t min) { + if (min < 1) { + min = 1; + } + // pin max sig dig to >= min + int32_t max = _max(fMaxSignificantDigits, min); + fMinSignificantDigits = min; + fMaxSignificantDigits = max; +} + +void DecimalFormat::setMaximumSignificantDigits(int32_t max) { + if (max < 1) { + max = 1; + } + // pin min sig dig to 1..max + U_ASSERT(fMinSignificantDigits >= 1); + int32_t min = _min(fMinSignificantDigits, max); + fMinSignificantDigits = min; + fMaxSignificantDigits = max; +} + +UBool DecimalFormat::areSignificantDigitsUsed() const { + return fUseSignificantDigits; +} + +void DecimalFormat::setSignificantDigitsUsed(UBool useSignificantDigits) { + fUseSignificantDigits = useSignificantDigits; +} + +void DecimalFormat::setCurrency(const UChar* theCurrency, UErrorCode& ec) { + // If we are a currency format, then modify our affixes to + // encode the currency symbol for the given currency in our + // locale, and adjust the decimal digits and rounding for the + // given currency. + + // Note: The code is ordered so that this object is *not changed* + // until we are sure we are going to succeed. + + // NULL or empty currency is *legal* and indicates no currency. + UBool isCurr = (theCurrency && *theCurrency); + + double rounding = 0.0; + int32_t frac = 0; + if (fIsCurrencyFormat && isCurr) { + rounding = ucurr_getRoundingIncrement(theCurrency, &ec); + frac = ucurr_getDefaultFractionDigits(theCurrency, &ec); + } + + NumberFormat::setCurrency(theCurrency, ec); + if (U_FAILURE(ec)) return; + + if (fIsCurrencyFormat) { + // NULL or empty currency is *legal* and indicates no currency. + if (isCurr) { + setRoundingIncrement(rounding); + setMinimumFractionDigits(frac); + setMaximumFractionDigits(frac); + } + expandAffixes(); + } +} + +// Deprecated variant with no UErrorCode parameter +void DecimalFormat::setCurrency(const UChar* theCurrency) { + UErrorCode ec = U_ZERO_ERROR; + setCurrency(theCurrency, ec); +} + +void DecimalFormat::getEffectiveCurrency(UChar* result, UErrorCode& /*ec*/) const { + const UChar* c = getCurrency(); + if (*c == 0) { + const UnicodeString &intl = + fSymbols->getConstSymbol(DecimalFormatSymbols::kIntlCurrencySymbol); + c = intl.getBuffer(); // ok for intl to go out of scope + } + u_strncpy(result, c, 3); + result[3] = 0; +} + +/** + * Return the number of fraction digits to display, or the total + * number of digits for significant digit formats and exponential + * formats. + */ +int32_t +DecimalFormat::precision(UBool isIntegral) const { + if (areSignificantDigitsUsed()) { + return getMaximumSignificantDigits(); + } else if (fUseExponentialNotation) { + return getMinimumIntegerDigits() + getMaximumFractionDigits(); + } else { + return isIntegral ? 0 : getMaximumFractionDigits(); + } +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +//eof diff --git a/icuSources/i18n/digitlst.cpp b/icuSources/i18n/digitlst.cpp index f6d629d9..7aa329e2 100644 --- a/icuSources/i18n/digitlst.cpp +++ b/icuSources/i18n/digitlst.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -51,8 +51,6 @@ static char gDecimal = 0; static const char LONG_MIN_REP[] = "2147483648"; static const char I64_MIN_REP[] = "9223372036854775808"; -static const int64_t I64_MIN_VALUE = U_INT64_MIN; - enum { LONG_MIN_REP_LENGTH = sizeof(LONG_MIN_REP) - 1, //Ignore the NULL at the end I64_MIN_REP_LENGTH = sizeof(I64_MIN_REP) - 1 //Ignore the NULL at the end diff --git a/icuSources/i18n/digitlst.h b/icuSources/i18n/digitlst.h index 75605bd0..ceee0b04 100644 --- a/icuSources/i18n/digitlst.h +++ b/icuSources/i18n/digitlst.h @@ -219,10 +219,10 @@ public: * Zero is represented by any DigitList with fCount == 0 or with each fDigits[i] * for all i <= fCount == '0'. */ - int32_t fDecimalAt; - int32_t fCount; - UBool fIsPositive; - char *fDigits; + int32_t fDecimalAt; + int32_t fCount; + UBool fIsPositive; + char *fDigits; DecimalFormat::ERoundingMode fRoundingMode; private: diff --git a/icuSources/i18n/dtfmtsym.cpp b/icuSources/i18n/dtfmtsym.cpp index 816372ee..b7101709 100644 --- a/icuSources/i18n/dtfmtsym.cpp +++ b/icuSources/i18n/dtfmtsym.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -15,6 +15,8 @@ * 06/14/99 stephen Removed SimpleDateFormat::fgTimeZoneDataSuffix * 11/16/99 weiv Added 'Y' and 'e' to fgPatternChars * 03/27/00 weiv Keeping resource bundle around! +* 06/30/05 emmons Added eraNames, narrow month/day, standalone context +* 10/12/05 emmons Added setters for eraNames, month/day by width/context ******************************************************************************* */ @@ -24,13 +26,16 @@ #include "unicode/dtfmtsym.h" #include "unicode/smpdtfmt.h" +#include "cpputils.h" #include "ucln_in.h" #include "mutex.h" #include "cmemory.h" #include "cstring.h" #include "locbased.h" #include "gregoimp.h" - +#include "hash.h" +#include "uresimp.h" + // ***************************************************************************** // class DateFormatSymbols // ***************************************************************************** @@ -39,19 +44,22 @@ * resource data. */ -#define PATTERN_CHARS_LEN 24 +#define PATTERN_CHARS_LEN 26 /** * Unlocalized date-time pattern characters. For example: 'y', 'd', etc. All * locales use the same these unlocalized pattern characters. */ static const UChar gPatternChars[] = { - // GyMdkHmsSEDFwWahKzYeugAZ + // GyMdkHmsSEDFwWahKzYeugAZvcLQq 0x47, 0x79, 0x4D, 0x64, 0x6B, 0x48, 0x6D, 0x73, 0x53, 0x45, 0x44, 0x46, 0x77, 0x57, 0x61, 0x68, 0x4B, 0x7A, 0x59, 0x65, - 0x75, 0x67, 0x41, 0x5A, 0 + 0x75, 0x67, 0x41, 0x5A, 0x76, 0x63, 0x4c, 0x51, 0x71, 0 }; +/* length of an array */ +#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) + //------------------------------------------------------ // Strings of last resort. These are only used if we have no resource // files. They aren't designed for actual use, just for backup. @@ -77,7 +85,7 @@ static const UChar gLastResortMonthNames[13][3] = // These are the weekday names and abbreviations of last resort. static const UChar gLastResortDayNames[8][2] = { - {0x0000, 0x0000}, /* "" */ + {0x0030, 0x0000}, /* "0" */ {0x0031, 0x0000}, /* "1" */ {0x0032, 0x0000}, /* "2" */ {0x0033, 0x0000}, /* "3" */ @@ -87,6 +95,15 @@ static const UChar gLastResortDayNames[8][2] = {0x0037, 0x0000} /* "7" */ }; +// These are the quarter names and abbreviations of last resort. +static const UChar gLastResortQuarters[4][2] = +{ + {0x0031, 0x0000}, /* "1" */ + {0x0032, 0x0000}, /* "2" */ + {0x0033, 0x0000}, /* "3" */ + {0x0034, 0x0000}, /* "4" */ +}; + // These are the am/pm and BC/AD markers of last resort. static const UChar gLastResortAmPmMarkers[2][3] = { @@ -102,15 +119,38 @@ static const UChar gLastResortEras[2][3] = // These are the zone strings of last resort. -static const UChar gLastResortZoneStrings[5][4] = +static const UChar gLastResortZoneStrings[7][4] = { {0x0047, 0x004D, 0x0054, 0x0000}, /* "GMT" */ {0x0047, 0x004D, 0x0054, 0x0000}, /* "GMT" */ {0x0047, 0x004D, 0x0054, 0x0000}, /* "GMT" */ {0x0047, 0x004D, 0x0054, 0x0000}, /* "GMT" */ + {0x0047, 0x004D, 0x0054, 0x0000}, /* "GMT" */ + {0x0047, 0x004D, 0x0054, 0x0000}, /* "GMT" */ {0x0047, 0x004D, 0x0054, 0x0000} /* "GMT" */ }; +/* Sizes for the last resort string arrays */ +typedef enum LastResortSize { + kMonthNum = 13, + kMonthLen = 3, + + kDayNum = 8, + kDayLen = 2, + + kAmPmNum = 2, + kAmPmLen = 3, + + kQuarterNum = 4, + kQuarterLen = 2, + + kEraNum = 2, + kEraLen = 3, + + kZoneNum = 5, + kZoneLen = 4 +} LastResortSize; + U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateFormatSymbols) @@ -119,20 +159,37 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateFormatSymbols) * These are the tags we expect to see in normal resource bundle files associated * with a locale and calendar */ -const char gErasTag[]="eras"; -const char gAbbreviatedTag[] = "abbreviated"; -const char gMonthNamesTag[]="monthNames"; -const char gDayNamesTag[]="dayNames"; -const char gNamesWideTag[]="wide"; -const char gNamesAbbrTag[]="abbreviated"; -const char gAmPmMarkersTag[]="AmPmMarkers"; +static const char gErasTag[]="eras"; +static const char gAbbreviatedTag[] = "abbreviated"; +static const char gMonthNamesTag[]="monthNames"; +static const char gDayNamesTag[]="dayNames"; +static const char gNamesWideTag[]="wide"; +static const char gNamesAbbrTag[]="abbreviated"; +static const char gNamesNarrowTag[]="narrow"; +static const char gNamesStandaloneTag[]="stand-alone"; +static const char gAmPmMarkersTag[]="AmPmMarkers"; +static const char gQuartersTag[]="quarters"; /** * These are the tags we expect to see in time zone data resource bundle files * associated with a locale. */ -const char gZoneStringsTag[]="zoneStrings"; -const char gLocalPatternCharsTag[]="localPatternChars"; +static const char gZoneStringsTag[]="zoneStrings"; +static const char gLocalPatternCharsTag[]="localPatternChars"; + +static UMTX LOCK; + +/* + * Keep this variable in synch with max length of display strings + */ +#define UTZ_MAX_DISPLAY_STRINGS_LENGTH 7 +#define UTZ_SHORT_GENERIC "sg" +#define UTZ_SHORT_STANDARD "ss" +#define UTZ_SHORT_DAYLIGHT "sd" +#define UTZ_LONG_GENERIC "lg" +#define UTZ_LONG_STANDARD "ls" +#define UTZ_LONG_DAYLIGHT "ld" +#define UTZ_EXEMPLAR_CITY "ec" /** * Jitterbug 2974: MSVC has a bug whereby new X[0] behaves badly. @@ -142,6 +199,12 @@ static inline UnicodeString* newUnicodeStringArray(size_t count) { return new UnicodeString[count ? count : 1]; } +U_CDECL_BEGIN +static void deleteUnicodeStringArray(void* obj) { + delete[] (UnicodeString*)obj; +} +U_CDECL_END + //------------------------------------------------------ DateFormatSymbols::DateFormatSymbols(const Locale& locale, @@ -233,15 +296,43 @@ DateFormatSymbols::createZoneStrings(const UnicodeString *const * otherStrings) void DateFormatSymbols::copyData(const DateFormatSymbols& other) { assignArray(fEras, fErasCount, other.fEras, other.fErasCount); + assignArray(fEraNames, fEraNamesCount, other.fEraNames, other.fEraNamesCount); assignArray(fMonths, fMonthsCount, other.fMonths, other.fMonthsCount); assignArray(fShortMonths, fShortMonthsCount, other.fShortMonths, other.fShortMonthsCount); + assignArray(fNarrowMonths, fNarrowMonthsCount, other.fNarrowMonths, other.fNarrowMonthsCount); + assignArray(fStandaloneMonths, fStandaloneMonthsCount, other.fStandaloneMonths, other.fStandaloneMonthsCount); + assignArray(fStandaloneShortMonths, fStandaloneShortMonthsCount, other.fStandaloneShortMonths, other.fStandaloneShortMonthsCount); + assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, other.fStandaloneNarrowMonths, other.fStandaloneNarrowMonthsCount); assignArray(fWeekdays, fWeekdaysCount, other.fWeekdays, other.fWeekdaysCount); assignArray(fShortWeekdays, fShortWeekdaysCount, other.fShortWeekdays, other.fShortWeekdaysCount); + assignArray(fNarrowWeekdays, fNarrowWeekdaysCount, other.fNarrowWeekdays, other.fNarrowWeekdaysCount); + assignArray(fStandaloneWeekdays, fStandaloneWeekdaysCount, other.fStandaloneWeekdays, other.fStandaloneWeekdaysCount); + assignArray(fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, other.fStandaloneShortWeekdays, other.fStandaloneShortWeekdaysCount); + assignArray(fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, other.fStandaloneNarrowWeekdays, other.fStandaloneNarrowWeekdaysCount); assignArray(fAmPms, fAmPmsCount, other.fAmPms, other.fAmPmsCount); - - fZoneStringsRowCount = other.fZoneStringsRowCount; - fZoneStringsColCount = other.fZoneStringsColCount; - createZoneStrings((const UnicodeString**)other.fZoneStrings); + assignArray(fQuarters, fQuartersCount, other.fQuarters, other.fQuartersCount); + assignArray(fShortQuarters, fShortQuartersCount, other.fShortQuarters, other.fShortQuartersCount); + assignArray(fStandaloneQuarters, fStandaloneQuartersCount, other.fStandaloneQuarters, other.fStandaloneQuartersCount); + assignArray(fStandaloneShortQuarters, fStandaloneShortQuartersCount, other.fStandaloneShortQuarters, other.fStandaloneShortQuartersCount); + // the zoneStrings data is initialized on demand + //fZoneStringsRowCount = other.fZoneStringsRowCount; + //fZoneStringsColCount = other.fZoneStringsColCount; + //createZoneStrings((const UnicodeString**)other.fZoneStrings); + // initialize on demand + fZoneStringsHash = NULL; + fZoneIDEnumeration = NULL; + fZoneStrings = NULL; + fZoneStringsColCount = 0; + fZoneStringsRowCount = 0; + fResourceBundle = NULL; + if(other.fZoneStringsHash!=NULL){ + fZoneStringsHash = createZoneStringsHash(other.fZoneStringsHash); + fZoneIDEnumeration = other.fZoneIDEnumeration->clone(); + }else{ + UErrorCode status =U_ZERO_ERROR; + fResourceBundle = ures_clone(other.fResourceBundle, &status); + // TODO: what should be done in case of error? + } // fastCopyFrom() - see assignArray comments fLocalPatternChars.fastCopyFrom(other.fLocalPatternChars); @@ -265,12 +356,25 @@ DateFormatSymbols::~DateFormatSymbols() void DateFormatSymbols::dispose() { - if (fEras) delete[] fEras; - if (fMonths) delete[] fMonths; - if (fShortMonths) delete[] fShortMonths; - if (fWeekdays) delete[] fWeekdays; - if (fShortWeekdays) delete[] fShortWeekdays; - if (fAmPms) delete[] fAmPms; + if (fEras) delete[] fEras; + if (fEraNames) delete[] fEraNames; + if (fMonths) delete[] fMonths; + if (fShortMonths) delete[] fShortMonths; + if (fNarrowMonths) delete[] fNarrowMonths; + if (fStandaloneMonths) delete[] fStandaloneMonths; + if (fStandaloneShortMonths) delete[] fStandaloneShortMonths; + if (fStandaloneNarrowMonths) delete[] fStandaloneNarrowMonths; + if (fWeekdays) delete[] fWeekdays; + if (fShortWeekdays) delete[] fShortWeekdays; + if (fNarrowWeekdays) delete[] fNarrowWeekdays; + if (fStandaloneWeekdays) delete[] fStandaloneWeekdays; + if (fStandaloneShortWeekdays) delete[] fStandaloneShortWeekdays; + if (fStandaloneNarrowWeekdays) delete[] fStandaloneNarrowWeekdays; + if (fAmPms) delete[] fAmPms; + if (fQuarters) delete[] fQuarters; + if (fShortQuarters) delete[] fShortQuarters; + if (fStandaloneQuarters) delete[] fStandaloneQuarters; + if (fStandaloneShortQuarters) delete[] fStandaloneShortQuarters; disposeZoneStrings(); } @@ -281,7 +385,17 @@ void DateFormatSymbols::disposeZoneStrings() for (int32_t row=0; row<fZoneStringsRowCount; ++row) delete[] fZoneStrings[row]; uprv_free(fZoneStrings); + } + if(fZoneStringsHash){ + delete fZoneStringsHash; + fZoneStringsHash = NULL; + } + if(fZoneIDEnumeration){ + delete fZoneIDEnumeration; + fZoneIDEnumeration = NULL; } + ures_close(fResourceBundle); + fResourceBundle = NULL; } UBool @@ -306,29 +420,62 @@ DateFormatSymbols::operator==(const DateFormatSymbols& other) const return TRUE; } if (fErasCount == other.fErasCount && + fEraNamesCount == other.fEraNamesCount && fMonthsCount == other.fMonthsCount && fShortMonthsCount == other.fShortMonthsCount && + fNarrowMonthsCount == other.fNarrowMonthsCount && + fStandaloneMonthsCount == other.fStandaloneMonthsCount && + fStandaloneShortMonthsCount == other.fStandaloneShortMonthsCount && + fStandaloneNarrowMonthsCount == other.fStandaloneNarrowMonthsCount && fWeekdaysCount == other.fWeekdaysCount && fShortWeekdaysCount == other.fShortWeekdaysCount && + fNarrowWeekdaysCount == other.fNarrowWeekdaysCount && + fStandaloneWeekdaysCount == other.fStandaloneWeekdaysCount && + fStandaloneShortWeekdaysCount == other.fStandaloneShortWeekdaysCount && + fStandaloneNarrowWeekdaysCount == other.fStandaloneNarrowWeekdaysCount && fAmPmsCount == other.fAmPmsCount && - fZoneStringsRowCount == other.fZoneStringsRowCount && - fZoneStringsColCount == other.fZoneStringsColCount) + fQuartersCount == other.fQuartersCount && + fShortQuartersCount == other.fShortQuartersCount && + fStandaloneQuartersCount == other.fStandaloneQuartersCount && + fStandaloneShortQuartersCount == other.fStandaloneShortQuartersCount) { // Now compare the arrays themselves if (arrayCompare(fEras, other.fEras, fErasCount) && + arrayCompare(fEraNames, other.fEraNames, fEraNamesCount) && arrayCompare(fMonths, other.fMonths, fMonthsCount) && arrayCompare(fShortMonths, other.fShortMonths, fShortMonthsCount) && + arrayCompare(fNarrowMonths, other.fNarrowMonths, fNarrowMonthsCount) && + arrayCompare(fStandaloneMonths, other.fStandaloneMonths, fStandaloneMonthsCount) && + arrayCompare(fStandaloneShortMonths, other.fStandaloneShortMonths, fStandaloneShortMonthsCount) && + arrayCompare(fStandaloneNarrowMonths, other.fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount) && arrayCompare(fWeekdays, other.fWeekdays, fWeekdaysCount) && arrayCompare(fShortWeekdays, other.fShortWeekdays, fShortWeekdaysCount) && - arrayCompare(fAmPms, other.fAmPms, fAmPmsCount)) + arrayCompare(fNarrowWeekdays, other.fNarrowWeekdays, fNarrowWeekdaysCount) && + arrayCompare(fStandaloneWeekdays, other.fStandaloneWeekdays, fStandaloneWeekdaysCount) && + arrayCompare(fStandaloneShortWeekdays, other.fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount) && + arrayCompare(fStandaloneNarrowWeekdays, other.fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount) && + arrayCompare(fAmPms, other.fAmPms, fAmPmsCount) && + arrayCompare(fQuarters, other.fQuarters, fQuartersCount) && + arrayCompare(fShortQuarters, other.fShortQuarters, fShortQuartersCount) && + arrayCompare(fStandaloneQuarters, other.fStandaloneQuarters, fStandaloneQuartersCount) && + arrayCompare(fStandaloneShortQuarters, other.fStandaloneShortQuarters, fStandaloneShortQuartersCount)) { - if (fZoneStrings == other.fZoneStrings) return TRUE; - - for (int32_t row=0; row<fZoneStringsRowCount; ++row) - { - if (!arrayCompare(fZoneStrings[row], other.fZoneStrings[row], fZoneStringsColCount)) + + if(fZoneStringsHash == NULL || other.fZoneStringsHash == NULL){ + // fZoneStringsHash is not initialized compare the resource bundles + if(ures_equal(fResourceBundle, other.fResourceBundle)== FALSE){ + return FALSE; + } + }else{ + if(fZoneStringsHash->equals(*other.fZoneStringsHash) == FALSE){ return FALSE; + } + // we always make sure that we update the enumeration when the hash is + // updated. So we can be sure that once we compare the hashes the + // enumerations are also equal } + // since fZoneStrings data member is deprecated .. and may not be initialized + // so don't compare them return TRUE; } } @@ -344,6 +491,13 @@ DateFormatSymbols::getEras(int32_t &count) const return fEras; } +const UnicodeString* +DateFormatSymbols::getEraNames(int32_t &count) const +{ + count = fEraNamesCount; + return fEraNames; +} + const UnicodeString* DateFormatSymbols::getMonths(int32_t &count) const { @@ -358,6 +512,54 @@ DateFormatSymbols::getShortMonths(int32_t &count) const return fShortMonths; } +const UnicodeString* +DateFormatSymbols::getMonths(int32_t &count, DtContextType context, DtWidthType width ) const +{ + UnicodeString *returnValue = NULL; + + switch (context) { + case FORMAT : + switch(width) { + case WIDE : + count = fMonthsCount; + returnValue = fMonths; + break; + case ABBREVIATED : + count = fShortMonthsCount; + returnValue = fShortMonths; + break; + case NARROW : + count = fNarrowMonthsCount; + returnValue = fNarrowMonths; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case STANDALONE : + switch(width) { + case WIDE : + count = fStandaloneMonthsCount; + returnValue = fStandaloneMonths; + break; + case ABBREVIATED : + count = fStandaloneShortMonthsCount; + returnValue = fStandaloneShortMonths; + break; + case NARROW : + count = fStandaloneNarrowMonthsCount; + returnValue = fStandaloneNarrowMonths; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case DT_CONTEXT_COUNT : + break; + } + return returnValue; +} + const UnicodeString* DateFormatSymbols::getWeekdays(int32_t &count) const { @@ -372,6 +574,101 @@ DateFormatSymbols::getShortWeekdays(int32_t &count) const return fShortWeekdays; } +const UnicodeString* +DateFormatSymbols::getWeekdays(int32_t &count, DtContextType context, DtWidthType width) const +{ + UnicodeString *returnValue = NULL; + switch (context) { + case FORMAT : + switch(width) { + case WIDE : + count = fWeekdaysCount; + returnValue = fWeekdays; + break; + case ABBREVIATED : + count = fShortWeekdaysCount; + returnValue = fShortWeekdays; + break; + case NARROW : + count = fNarrowWeekdaysCount; + returnValue = fNarrowWeekdays; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case STANDALONE : + switch(width) { + case WIDE : + count = fStandaloneWeekdaysCount; + returnValue = fStandaloneWeekdays; + break; + case ABBREVIATED : + count = fStandaloneShortWeekdaysCount; + returnValue = fStandaloneShortWeekdays; + break; + case NARROW : + count = fStandaloneNarrowWeekdaysCount; + returnValue = fStandaloneNarrowWeekdays; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case DT_CONTEXT_COUNT : + break; + } + return returnValue; +} + +const UnicodeString* +DateFormatSymbols::getQuarters(int32_t &count, DtContextType context, DtWidthType width ) const +{ + UnicodeString *returnValue = NULL; + + switch (context) { + case FORMAT : + switch(width) { + case WIDE : + count = fQuartersCount; + returnValue = fQuarters; + break; + case ABBREVIATED : + count = fShortQuartersCount; + returnValue = fShortQuarters; + break; + case NARROW : + count = 0; + returnValue = NULL; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case STANDALONE : + switch(width) { + case WIDE : + count = fStandaloneQuartersCount; + returnValue = fStandaloneQuarters; + break; + case ABBREVIATED : + count = fStandaloneShortQuartersCount; + returnValue = fStandaloneShortQuarters; + break; + case NARROW : + count = 0; + returnValue = NULL; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case DT_CONTEXT_COUNT : + break; + } + return returnValue; +} + const UnicodeString* DateFormatSymbols::getAmPmStrings(int32_t &count) const { @@ -385,7 +682,8 @@ void DateFormatSymbols::setEras(const UnicodeString* erasArray, int32_t count) { // delete the old list if we own it - if (fEras) delete[] fEras; + if (fEras) + delete[] fEras; // we always own the new list, which we create here (we duplicate rather // than adopting the list passed in) @@ -394,11 +692,26 @@ DateFormatSymbols::setEras(const UnicodeString* erasArray, int32_t count) fErasCount = count; } +void +DateFormatSymbols::setEraNames(const UnicodeString* eraNamesArray, int32_t count) +{ + // delete the old list if we own it + if (fEraNames) + delete[] fEraNames; + + // we always own the new list, which we create here (we duplicate rather + // than adopting the list passed in) + fEraNames = newUnicodeStringArray(count); + uprv_arrayCopy(eraNamesArray,fEraNames, count); + fEraNamesCount = count; +} + void DateFormatSymbols::setMonths(const UnicodeString* monthsArray, int32_t count) { // delete the old list if we own it - if (fMonths) delete[] fMonths; + if (fMonths) + delete[] fMonths; // we always own the new list, which we create here (we duplicate rather // than adopting the list passed in) @@ -411,7 +724,8 @@ void DateFormatSymbols::setShortMonths(const UnicodeString* shortMonthsArray, int32_t count) { // delete the old list if we own it - if (fShortMonths) delete[] fShortMonths; + if (fShortMonths) + delete[] fShortMonths; // we always own the new list, which we create here (we duplicate rather // than adopting the list passed in) @@ -420,10 +734,78 @@ DateFormatSymbols::setShortMonths(const UnicodeString* shortMonthsArray, int32_t fShortMonthsCount = count; } +void +DateFormatSymbols::setMonths(const UnicodeString* monthsArray, int32_t count, DtContextType context, DtWidthType width) +{ + // delete the old list if we own it + // we always own the new list, which we create here (we duplicate rather + // than adopting the list passed in) + + switch (context) { + case FORMAT : + switch (width) { + case WIDE : + if (fMonths) + delete[] fMonths; + fMonths = newUnicodeStringArray(count); + uprv_arrayCopy( monthsArray,fMonths,count); + fMonthsCount = count; + break; + case ABBREVIATED : + if (fShortMonths) + delete[] fShortMonths; + fShortMonths = newUnicodeStringArray(count); + uprv_arrayCopy( monthsArray,fShortMonths,count); + fShortMonthsCount = count; + break; + case NARROW : + if (fNarrowMonths) + delete[] fNarrowMonths; + fNarrowMonths = newUnicodeStringArray(count); + uprv_arrayCopy( monthsArray,fNarrowMonths,count); + fNarrowMonthsCount = count; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case STANDALONE : + switch (width) { + case WIDE : + if (fStandaloneMonths) + delete[] fStandaloneMonths; + fStandaloneMonths = newUnicodeStringArray(count); + uprv_arrayCopy( monthsArray,fStandaloneMonths,count); + fStandaloneMonthsCount = count; + break; + case ABBREVIATED : + if (fStandaloneShortMonths) + delete[] fStandaloneShortMonths; + fStandaloneShortMonths = newUnicodeStringArray(count); + uprv_arrayCopy( monthsArray,fStandaloneShortMonths,count); + fStandaloneShortMonthsCount = count; + break; + case NARROW : + if (fStandaloneNarrowMonths) + delete[] fStandaloneNarrowMonths; + fStandaloneNarrowMonths = newUnicodeStringArray(count); + uprv_arrayCopy( monthsArray,fStandaloneNarrowMonths,count); + fStandaloneNarrowMonthsCount = count; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case DT_CONTEXT_COUNT : + break; + } +} + void DateFormatSymbols::setWeekdays(const UnicodeString* weekdaysArray, int32_t count) { // delete the old list if we own it - if (fWeekdays) delete[] fWeekdays; + if (fWeekdays) + delete[] fWeekdays; // we always own the new list, which we create here (we duplicate rather // than adopting the list passed in) @@ -436,15 +818,154 @@ void DateFormatSymbols::setShortWeekdays(const UnicodeString* shortWeekdaysArray, int32_t count) { // delete the old list if we own it - if (fShortWeekdays) delete[] fShortWeekdays; + if (fShortWeekdays) + delete[] fShortWeekdays; // we always own the new list, which we create here (we duplicate rather // than adopting the list passed in) fShortWeekdays = newUnicodeStringArray(count); - uprv_arrayCopy( shortWeekdaysArray,fShortWeekdays,count); + uprv_arrayCopy(shortWeekdaysArray, fShortWeekdays, count); fShortWeekdaysCount = count; } +void +DateFormatSymbols::setWeekdays(const UnicodeString* weekdaysArray, int32_t count, DtContextType context, DtWidthType width) +{ + // delete the old list if we own it + // we always own the new list, which we create here (we duplicate rather + // than adopting the list passed in) + + switch (context) { + case FORMAT : + switch (width) { + case WIDE : + if (fWeekdays) + delete[] fWeekdays; + fWeekdays = newUnicodeStringArray(count); + uprv_arrayCopy(weekdaysArray, fWeekdays, count); + fWeekdaysCount = count; + break; + case ABBREVIATED : + if (fShortWeekdays) + delete[] fShortWeekdays; + fShortWeekdays = newUnicodeStringArray(count); + uprv_arrayCopy(weekdaysArray, fShortWeekdays, count); + fShortWeekdaysCount = count; + break; + case NARROW : + if (fNarrowWeekdays) + delete[] fNarrowWeekdays; + fNarrowWeekdays = newUnicodeStringArray(count); + uprv_arrayCopy(weekdaysArray, fNarrowWeekdays, count); + fNarrowWeekdaysCount = count; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case STANDALONE : + switch (width) { + case WIDE : + if (fStandaloneWeekdays) + delete[] fStandaloneWeekdays; + fStandaloneWeekdays = newUnicodeStringArray(count); + uprv_arrayCopy(weekdaysArray, fStandaloneWeekdays, count); + fStandaloneWeekdaysCount = count; + break; + case ABBREVIATED : + if (fStandaloneShortWeekdays) + delete[] fStandaloneShortWeekdays; + fStandaloneShortWeekdays = newUnicodeStringArray(count); + uprv_arrayCopy(weekdaysArray, fStandaloneShortWeekdays, count); + fStandaloneShortWeekdaysCount = count; + break; + case NARROW : + if (fStandaloneNarrowWeekdays) + delete[] fStandaloneNarrowWeekdays; + fStandaloneNarrowWeekdays = newUnicodeStringArray(count); + uprv_arrayCopy(weekdaysArray, fStandaloneNarrowWeekdays, count); + fStandaloneNarrowWeekdaysCount = count; + break; + case DT_WIDTH_COUNT : + break; + } + break; + case DT_CONTEXT_COUNT : + break; + } +} + +void +DateFormatSymbols::setQuarters(const UnicodeString* quartersArray, int32_t count, DtContextType context, DtWidthType width) +{ + // delete the old list if we own it + // we always own the new list, which we create here (we duplicate rather + // than adopting the list passed in) + + switch (context) { + case FORMAT : + switch (width) { + case WIDE : + if (fQuarters) + delete[] fQuarters; + fQuarters = newUnicodeStringArray(count); + uprv_arrayCopy( quartersArray,fQuarters,count); + fQuartersCount = count; + break; + case ABBREVIATED : + if (fShortQuarters) + delete[] fShortQuarters; + fShortQuarters = newUnicodeStringArray(count); + uprv_arrayCopy( quartersArray,fShortQuarters,count); + fShortQuartersCount = count; + break; + case NARROW : + /* + if (fNarrowQuarters) + delete[] fNarrowQuarters; + fNarrowQuarters = newUnicodeStringArray(count); + uprv_arrayCopy( quartersArray,fNarrowQuarters,count); + fNarrowQuartersCount = count; + */ + break; + case DT_WIDTH_COUNT : + break; + } + break; + case STANDALONE : + switch (width) { + case WIDE : + if (fStandaloneQuarters) + delete[] fStandaloneQuarters; + fStandaloneQuarters = newUnicodeStringArray(count); + uprv_arrayCopy( quartersArray,fStandaloneQuarters,count); + fStandaloneQuartersCount = count; + break; + case ABBREVIATED : + if (fStandaloneShortQuarters) + delete[] fStandaloneShortQuarters; + fStandaloneShortQuarters = newUnicodeStringArray(count); + uprv_arrayCopy( quartersArray,fStandaloneShortQuarters,count); + fStandaloneShortQuartersCount = count; + break; + case NARROW : + /* + if (fStandaloneNarrowQuarters) + delete[] fStandaloneNarrowQuarters; + fStandaloneNarrowQuarters = newUnicodeStringArray(count); + uprv_arrayCopy( quartersArray,fStandaloneNarrowQuarters,count); + fStandaloneNarrowQuartersCount = count; + */ + break; + case DT_WIDTH_COUNT : + break; + } + break; + case DT_CONTEXT_COUNT : + break; + } +} + void DateFormatSymbols::setAmPmStrings(const UnicodeString* amPmsArray, int32_t count) { @@ -463,8 +984,18 @@ DateFormatSymbols::setAmPmStrings(const UnicodeString* amPmsArray, int32_t count const UnicodeString** DateFormatSymbols::getZoneStrings(int32_t& rowCount, int32_t& columnCount) const { + umtx_lock(&LOCK); + UErrorCode status = U_ZERO_ERROR; + if(fZoneStrings==NULL){ + // cast away const to get around the problem for lazy initialization + ((DateFormatSymbols*)this)->initZoneStringsArray(status); + if(U_FAILURE(status)){ + return NULL; + } + } rowCount = fZoneStringsRowCount; columnCount = fZoneStringsColCount; + umtx_unlock(&LOCK); return (const UnicodeString**)fZoneStrings; // Compiler requires cast } @@ -474,12 +1005,13 @@ DateFormatSymbols::setZoneStrings(const UnicodeString* const *strings, int32_t r // since deleting a 2-d array is a pain in the butt, we offload that task to // a separate function disposeZoneStrings(); - + UErrorCode status = U_ZERO_ERROR; // we always own the new list, which we create here (we duplicate rather // than adopting the list passed in) fZoneStringsRowCount = rowCount; fZoneStringsColCount = columnCount; createZoneStrings((const UnicodeString**)strings); + initZoneStrings((const UnicodeString**)strings, rowCount,columnCount, status); } //------------------------------------------------------ @@ -509,8 +1041,8 @@ DateFormatSymbols::setLocalPatternChars(const UnicodeString& newLocalPatternChar //------------------------------------------------------ -void -DateFormatSymbols::initField(UnicodeString **field, int32_t& length, const UResourceBundle *data, UErrorCode &status) { +static void +initField(UnicodeString **field, int32_t& length, const UResourceBundle *data, UErrorCode &status) { if (U_SUCCESS(status)) { int32_t strLen = 0; length = ures_getSize(data); @@ -529,8 +1061,8 @@ DateFormatSymbols::initField(UnicodeString **field, int32_t& length, const UReso } } -void -DateFormatSymbols::initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortSize numStr, LastResortSize strLen, UErrorCode &status) { +static void +initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortSize numStr, LastResortSize strLen, UErrorCode &status) { if (U_SUCCESS(status)) { length = numStr; *field = newUnicodeStringArray((size_t)numStr); @@ -554,25 +1086,53 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError int32_t i; int32_t len = 0; const UChar *resStr; - /* In case something goes wrong, initialize all of the data to NULL. */ fEras = NULL; fErasCount = 0; + fEraNames = NULL; + fEraNamesCount = 0; fMonths = NULL; fMonthsCount=0; fShortMonths = NULL; fShortMonthsCount=0; + fNarrowMonths = NULL; + fNarrowMonthsCount=0; + fStandaloneMonths = NULL; + fStandaloneMonthsCount=0; + fStandaloneShortMonths = NULL; + fStandaloneShortMonthsCount=0; + fStandaloneNarrowMonths = NULL; + fStandaloneNarrowMonthsCount=0; fWeekdays = NULL; fWeekdaysCount=0; fShortWeekdays = NULL; fShortWeekdaysCount=0; + fNarrowWeekdays = NULL; + fNarrowWeekdaysCount=0; + fStandaloneWeekdays = NULL; + fStandaloneWeekdaysCount=0; + fStandaloneShortWeekdays = NULL; + fStandaloneShortWeekdaysCount=0; + fStandaloneNarrowWeekdays = NULL; + fStandaloneNarrowWeekdaysCount=0; fAmPms = NULL; fAmPmsCount=0; + fQuarters = NULL; + fQuartersCount = 0; + fShortQuarters = NULL; + fShortQuartersCount = 0; + fStandaloneQuarters = NULL; + fStandaloneQuartersCount = 0; + fStandaloneShortQuarters = NULL; + fStandaloneShortQuartersCount = 0; fZoneStringsRowCount = 0; fZoneStringsColCount = 0; fZoneStrings = NULL; - - + fZoneStringsHash = NULL; + fZoneIDEnumeration = NULL; + fResourceBundle = NULL; + + if (U_FAILURE(status)) return; /** @@ -581,15 +1141,25 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError * these. */ CalendarData calData(locale, type, status); - UResourceBundle *nonCalendarData = ures_open((char*)0, locale.getName(), &status); + fResourceBundle = ures_open((char*)0, locale.getName(), &status); // load the first data item UResourceBundle *erasMain = calData.getByKey(gErasTag, status); UResourceBundle *eras = ures_getByKeyWithFallback(erasMain, gAbbreviatedTag, NULL, &status); + UErrorCode oldStatus = status; + UResourceBundle *eraNames = ures_getByKeyWithFallback(erasMain, gNamesWideTag, NULL, &status); + if ( status == U_MISSING_RESOURCE_ERROR ) { // Workaround because eras/wide was omitted from CLDR 1.3 + status = oldStatus; + eraNames = ures_getByKeyWithFallback(erasMain, gAbbreviatedTag, NULL, &status); + } + UResourceBundle *lsweekdaysData = NULL; // Data closed by calData UResourceBundle *weekdaysData = NULL; // Data closed by calData - UResourceBundle *zoneArray = ures_getByKey(nonCalendarData, gZoneStringsTag, NULL, &status); - UResourceBundle *zoneRow = ures_getByIndex(zoneArray, (int32_t)0, NULL, &status); + UResourceBundle *narrowWeekdaysData = NULL; // Data closed by calData + UResourceBundle *standaloneWeekdaysData = NULL; // Data closed by calData + UResourceBundle *standaloneShortWeekdaysData = NULL; // Data closed by calData + UResourceBundle *standaloneNarrowWeekdaysData = NULL; // Data closed by calData + U_LOCALE_BASED(locBased, *this); if (U_FAILURE(status)) { @@ -603,19 +1173,24 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError status = U_USING_FALLBACK_WARNING; initField(&fEras, fErasCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); + initField(&fEraNames, fEraNamesCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); initField(&fMonths, fMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); initField(&fShortMonths, fShortMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); + initField(&fNarrowMonths, fNarrowMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); + initField(&fStandaloneMonths, fStandaloneMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); + initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); + initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); initField(&fWeekdays, fWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); initField(&fShortWeekdays, fShortWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); + initField(&fNarrowWeekdays, fNarrowWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); + initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); + initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); + initField(&fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); initField(&fAmPms, fAmPmsCount, (const UChar *)gLastResortAmPmMarkers, kAmPmNum, kAmPmLen, status); - - fZoneStrings = (UnicodeString **)uprv_malloc(sizeof(UnicodeString *)); - /* test for NULL */ - if (fZoneStrings == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - } - fZoneStringsRowCount = 1; - initField(fZoneStrings, fZoneStringsColCount, (const UChar *)gLastResortZoneStrings, kZoneNum, kZoneLen, status); + initField(&fQuarters, fQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); + initField(&fShortQuarters, fShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); + initField(&fStandaloneQuarters, fStandaloneQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); + initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); fLocalPatternChars = gPatternChars; } goto cleanup; @@ -626,13 +1201,61 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError // are stored in a separate file locBased.setLocaleIDs(ures_getLocaleByType(eras, ULOC_VALID_LOCALE, &status), ures_getLocaleByType(eras, ULOC_ACTUAL_LOCALE, &status)); + initField(&fEras, fErasCount, eras, status); + initField(&fEraNames, fEraNamesCount, eraNames, status); + initField(&fMonths, fMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesWideTag, status), status); initField(&fShortMonths, fShortMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); + + initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesNarrowTag, status), status); + if(status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), status); + } + if ( status == U_MISSING_RESOURCE_ERROR ) { /* If format/narrow not available, use format/abbreviated */ + status = U_ZERO_ERROR; + initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); + } + + initField(&fStandaloneMonths, fStandaloneMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesWideTag, status), status); + if ( status == U_MISSING_RESOURCE_ERROR ) { /* If standalone/wide not available, use format/wide */ + status = U_ZERO_ERROR; + initField(&fStandaloneMonths, fStandaloneMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesWideTag, status), status); + } + initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); + if ( status == U_MISSING_RESOURCE_ERROR ) { /* If standalone/abbreviated not available, use format/abbreviated */ + status = U_ZERO_ERROR; + initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); + } + initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), status); + if ( status == U_MISSING_RESOURCE_ERROR ) { /* if standalone/narrow not availabe, try format/narrow */ + status = U_ZERO_ERROR; + initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesNarrowTag, status), status); + if ( status == U_MISSING_RESOURCE_ERROR ) { /* if still not there, use format/abbreviated */ + status = U_ZERO_ERROR; + initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); + } + } initField(&fAmPms, fAmPmsCount, calData.getByKey(gAmPmMarkersTag, status), status); + initField(&fQuarters, fQuartersCount, calData.getByKey2(gQuartersTag, gNamesWideTag, status), status); + initField(&fShortQuarters, fShortQuartersCount, calData.getByKey2(gQuartersTag, gNamesAbbrTag, status), status); + + initField(&fStandaloneQuarters, fStandaloneQuartersCount, calData.getByKey3(gQuartersTag, gNamesStandaloneTag, gNamesWideTag, status), status); + if(status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + initField(&fStandaloneQuarters, fStandaloneQuartersCount, calData.getByKey2(gQuartersTag, gNamesWideTag, status), status); + } + + initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calData.getByKey3(gQuartersTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); + if(status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calData.getByKey2(gQuartersTag, gNamesAbbrTag, status), status); + } + // fastCopyFrom()/setTo() - see assignArray comments - resStr = ures_getStringByKey(nonCalendarData, gLocalPatternCharsTag, &len, &status); + resStr = ures_getStringByKey(fResourceBundle, gLocalPatternCharsTag, &len, &status); fLocalPatternChars.setTo(TRUE, resStr, len); // If the locale data does not include new pattern chars, use the defaults // TODO: Consider making this an error, since this may add conflicting characters. @@ -640,36 +1263,12 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError fLocalPatternChars.append(UnicodeString(TRUE, &gPatternChars[len], PATTERN_CHARS_LEN-len)); } - /* TODO: Fix the case where the zoneStrings is not a perfect square array of information. */ - fZoneStringsRowCount = ures_getSize(zoneArray); - fZoneStringsColCount = ures_getSize(zoneRow); - fZoneStrings = (UnicodeString **)uprv_malloc(fZoneStringsRowCount * sizeof(UnicodeString *)); - /* test for NULL */ - if (fZoneStrings == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - for(i = 0; i<fZoneStringsRowCount; i++) { - *(fZoneStrings+i) = newUnicodeStringArray(fZoneStringsColCount); - /* test for NULL */ - if ((*(fZoneStrings+i)) == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - zoneRow = ures_getByIndex(zoneArray, i, zoneRow, &status); - for(int32_t j = 0; j<fZoneStringsColCount; j++) { - resStr = ures_getStringByIndex(zoneRow, j, &len, &status); - // setTo() - see assignArray comments - fZoneStrings[i][j].setTo(TRUE, resStr, len); - } - } - // {sfb} fixed to handle 1-based weekdays weekdaysData = calData.getByKey2(gDayNamesTag, gNamesWideTag, status); fWeekdaysCount = ures_getSize(weekdaysData); fWeekdays = new UnicodeString[fWeekdaysCount+1]; - /* test for NULL */ - if (fWeekdays == 0) { + /* pin the blame on system. If we cannot get a chunk of memory .. the system is dying!*/ + if (fWeekdays == NULL) { status = U_MEMORY_ALLOCATION_ERROR; goto cleanup; } @@ -696,11 +1295,98 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError fShortWeekdays[i+1].setTo(TRUE, resStr, len); } fShortWeekdaysCount++; + + narrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesNarrowTag, status); + if(status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + narrowWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status); + } + if ( status == U_MISSING_RESOURCE_ERROR ) { + status = U_ZERO_ERROR; + narrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); + } + fNarrowWeekdaysCount = ures_getSize(narrowWeekdaysData); + fNarrowWeekdays = new UnicodeString[fNarrowWeekdaysCount+1]; + /* test for NULL */ + if (fNarrowWeekdays == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup; + } + // leave fNarrowWeekdays[0] empty + for(i = 0; i<fNarrowWeekdaysCount; i++) { + resStr = ures_getStringByIndex(narrowWeekdaysData, i, &len, &status); + // setTo() - see assignArray comments + fNarrowWeekdays[i+1].setTo(TRUE, resStr, len); + } + fNarrowWeekdaysCount++; + + standaloneWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesWideTag, status); + if ( status == U_MISSING_RESOURCE_ERROR ) { + status = U_ZERO_ERROR; + standaloneWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesWideTag, status); + } + fStandaloneWeekdaysCount = ures_getSize(standaloneWeekdaysData); + fStandaloneWeekdays = new UnicodeString[fStandaloneWeekdaysCount+1]; + /* test for NULL */ + if (fStandaloneWeekdays == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup; + } + // leave fStandaloneWeekdays[0] empty + for(i = 0; i<fStandaloneWeekdaysCount; i++) { + resStr = ures_getStringByIndex(standaloneWeekdaysData, i, &len, &status); + // setTo() - see assignArray comments + fStandaloneWeekdays[i+1].setTo(TRUE, resStr, len); + } + fStandaloneWeekdaysCount++; + + standaloneShortWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status); + if ( status == U_MISSING_RESOURCE_ERROR ) { + status = U_ZERO_ERROR; + standaloneShortWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); + } + fStandaloneShortWeekdaysCount = ures_getSize(standaloneShortWeekdaysData); + fStandaloneShortWeekdays = new UnicodeString[fStandaloneShortWeekdaysCount+1]; + /* test for NULL */ + if (fStandaloneShortWeekdays == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup; + } + // leave fStandaloneShortWeekdays[0] empty + for(i = 0; i<fStandaloneShortWeekdaysCount; i++) { + resStr = ures_getStringByIndex(standaloneShortWeekdaysData, i, &len, &status); + // setTo() - see assignArray comments + fStandaloneShortWeekdays[i+1].setTo(TRUE, resStr, len); + } + fStandaloneShortWeekdaysCount++; + + standaloneNarrowWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status); + if ( status == U_MISSING_RESOURCE_ERROR ) { + status = U_ZERO_ERROR; + standaloneNarrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesNarrowTag, status); + if ( status == U_MISSING_RESOURCE_ERROR ) { + status = U_ZERO_ERROR; + standaloneNarrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); + } + } + fStandaloneNarrowWeekdaysCount = ures_getSize(standaloneNarrowWeekdaysData); + fStandaloneNarrowWeekdays = new UnicodeString[fStandaloneNarrowWeekdaysCount+1]; + /* test for NULL */ + if (fStandaloneNarrowWeekdays == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup; + } + // leave fStandaloneNarrowWeekdays[0] empty + for(i = 0; i<fStandaloneNarrowWeekdaysCount; i++) { + resStr = ures_getStringByIndex(standaloneNarrowWeekdaysData, i, &len, &status); + // setTo() - see assignArray comments + fStandaloneNarrowWeekdays[i+1].setTo(TRUE, resStr, len); + } + fStandaloneNarrowWeekdaysCount++; + cleanup: ures_close(eras); - ures_close(zoneRow); - ures_close(zoneArray); - ures_close(nonCalendarData); + ures_close(eraNames); } /** @@ -758,6 +1444,584 @@ DateFormatSymbols::getLocale(ULocDataLocaleType type, UErrorCode& status) const return locBased.getLocale(type, status); } +class TimeZoneKeysEnumeration : public StringEnumeration { +private: + UnicodeString* strings; + int32_t length; + int32_t current; + int32_t capacity; + TimeZoneKeysEnumeration(UnicodeString* oldStrs, int32_t count){ + strings = newUnicodeStringArray(count); + if(strings==NULL){ + return; + } + capacity = count; + current = 0; + for(length = 0; length<capacity; length++){ + strings[length].setTo(oldStrs[length]); + } + } +public: + static UClassID U_EXPORT2 getStaticClassID(void); + virtual UClassID getDynamicClassID(void) const; + + TimeZoneKeysEnumeration(int32_t count, UErrorCode status){ + strings = newUnicodeStringArray(count); + if(strings == NULL){ + status = U_MEMORY_ALLOCATION_ERROR; + } + length = 0; + current = 0; + capacity = count; + } + + void put(const UnicodeString& str, UErrorCode& status){ + if(length < capacity){ + strings[length++].setTo(str); + }else{ + status = U_INDEX_OUTOFBOUNDS_ERROR; + } + } + virtual ~TimeZoneKeysEnumeration() { + delete[] strings; + } + + virtual StringEnumeration * clone() const + { + return new TimeZoneKeysEnumeration(strings, length); + } + + virtual int32_t count(UErrorCode &/*status*/) const { + return length; + } + virtual const UChar* unext(int32_t *resultLength, UErrorCode& /*status*/){ + if(current < length){ + const UChar* ret = strings[current].getBuffer(); + *resultLength = strings[current].length(); + current++; + return ret; + } + return NULL; + } + + virtual const UnicodeString* snext(UErrorCode& status) { + if(U_FAILURE(status)){ + return NULL; + } + if(current < length){ + return &strings[current++]; + } + return NULL; + } + /* this method is for thread safe iteration */ + const UnicodeString* snext(int32_t& pos, UErrorCode& status)const { + if(U_FAILURE(status)){ + return NULL; + } + if(pos < length){ + return &strings[pos++]; + } + return NULL; + } + + virtual void reset(UErrorCode& /*status*/) { + current = 0; + + } +private: + UBool equals(const StringEnumeration& other) const{ + if (other.getDynamicClassID() != TimeZoneKeysEnumeration::getStaticClassID()) { + return FALSE; + } + TimeZoneKeysEnumeration& enum2 = (TimeZoneKeysEnumeration&)(other); + UErrorCode status = U_ZERO_ERROR; + + int32_t count1 = count(status); + int32_t count2 = other.count(status); + if(count1 != count2){ + return FALSE; + } + int32_t pos1 = 0; + int32_t pos2 = 0; + const UnicodeString* str1 = NULL; + const UnicodeString* str2 = NULL; + + while((str1 = snext(pos1, status))!=NULL){ + str2 = enum2.snext(pos2, status); + if(U_FAILURE(status)){ + return FALSE; + } + if(*str1 != *str2){ + // bail out at the first failure + return FALSE; + } + + } + // if we reached here that means that the enumerations are equal + return TRUE; + } +public: + virtual UBool operator==(const StringEnumeration& that)const{ + return ((this == &that) || + (getDynamicClassID() == that.getDynamicClassID() && + StringEnumeration::operator==(that) && + equals(that))); + } +}; + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TimeZoneKeysEnumeration) + +void +DateFormatSymbols::initZoneStringsArray(UErrorCode& status){ + if(fZoneStringsHash == NULL){ + initZoneStrings(status); + } + if(U_FAILURE(status)){ + return; + } + fZoneStringsRowCount = fZoneIDEnumeration->count(status); + fZoneStringsColCount = 8; + fZoneStrings = (UnicodeString **)uprv_malloc(fZoneStringsRowCount * sizeof(UnicodeString *)); + /* if we can't get a chunk of heap then the system is going down. Pin the blame on system*/ + if (fZoneStrings == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + const UnicodeString *zid = NULL; + TimeZoneKeysEnumeration *keys = (TimeZoneKeysEnumeration*) fZoneIDEnumeration; + int32_t pos = 0; + int32_t i = 0; + while((zid=keys->snext(pos,status))!=NULL){ + *(fZoneStrings+i) = newUnicodeStringArray(fZoneStringsColCount); + /* test for NULL */ + if ((*(fZoneStrings+i)) == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + UnicodeString* strings = (UnicodeString*)fZoneStringsHash->get(*zid); + fZoneStrings[i][0].setTo(*zid); + fZoneStrings[i][1].setTo(strings[TIMEZONE_LONG_STANDARD]); + fZoneStrings[i][2].setTo(strings[TIMEZONE_SHORT_STANDARD]); + fZoneStrings[i][3].setTo(strings[TIMEZONE_LONG_DAYLIGHT]); + fZoneStrings[i][4].setTo(strings[TIMEZONE_SHORT_DAYLIGHT]); + fZoneStrings[i][5].setTo(strings[TIMEZONE_EXEMPLAR_CITY]); + if(fZoneStrings[i][5].length()==0){ + fZoneStrings[i][5].setTo(strings[TIMEZONE_LONG_GENERIC]); + }else{ + fZoneStrings[i][6].setTo(strings[TIMEZONE_LONG_GENERIC]); + } + if(fZoneStrings[i][6].length()==0){ + fZoneStrings[i][6].setTo(strings[TIMEZONE_LONG_GENERIC]); + }else{ + fZoneStrings[i][7].setTo(strings[TIMEZONE_LONG_GENERIC]); + } + i++; + } +} + +U_CDECL_BEGIN +static UBool U_CALLCONV +compareTZHashValues(const UHashTok val1, const UHashTok val2){ + + const UnicodeString* array1 = (UnicodeString*) val1.pointer; + const UnicodeString* array2 = (UnicodeString*) val2.pointer; + if(array1==array2){ + return TRUE; + } + if(array1==NULL || array2==NULL){ + return FALSE; + } + for(int32_t j=0; j< UTZ_MAX_DISPLAY_STRINGS_LENGTH; j++){ + if(array1[j] != array2[j]){ + return FALSE; + } + } + return TRUE; +} +U_CDECL_END + +void +DateFormatSymbols::initZoneStrings(UErrorCode &status){ + if(U_FAILURE(status)){ + return; + } + + if(fZoneStringsHash != NULL){ + return; + } + int32_t i; + + fZoneStringsHash = new Hashtable(uhash_compareUnicodeString, compareTZHashValues, status); + if(fZoneStringsHash==NULL){ + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fZoneStringsHash->setValueDeleter(deleteUnicodeStringArray); + + if(fResourceBundle != NULL){ + UnicodeString solidus = UNICODE_STRING_SIMPLE("/"); + UnicodeString colon = UNICODE_STRING_SIMPLE(":"); + UResourceBundle zoneArray,zoneItem; + ures_initStackObject(&zoneItem); + ures_initStackObject(&zoneArray); + for(const UResourceBundle* rb = fResourceBundle; rb!=NULL; rb=ures_getParentBundle(rb)){ + ures_getByKey(rb, gZoneStringsTag, &zoneArray, &status); + if(U_FAILURE(status)){ + break; + } + while(ures_hasNext(&zoneArray)){ + UErrorCode tempStatus = U_ZERO_ERROR; + UnicodeString* array = newUnicodeStringArray(UTZ_MAX_DISPLAY_STRINGS_LENGTH); + ures_getNextResource(&zoneArray, &zoneItem, &status); + UnicodeString key(ures_getKey(&zoneItem), -1, US_INV); + key.findAndReplace(colon, solidus); + int32_t len = 0; + //fetch the strings with fine grained fallback + const UChar* str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_SHORT_STANDARD, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_SHORT_STANDARD].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_SHORT_GENERIC, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_SHORT_GENERIC].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_SHORT_DAYLIGHT, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_SHORT_DAYLIGHT].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_LONG_STANDARD, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_LONG_STANDARD].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_LONG_GENERIC, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_LONG_GENERIC].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_LONG_DAYLIGHT, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_LONG_DAYLIGHT].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + str = ures_getStringByKeyWithFallback(&zoneItem,UTZ_EXEMPLAR_CITY, &len, &tempStatus); + if(U_SUCCESS(tempStatus)){ + array[TIMEZONE_EXEMPLAR_CITY].setTo(TRUE, str, len); + }else{ + tempStatus = U_ZERO_ERROR; + } + // store the strings in hash + fZoneStringsHash->put(key, array, status); + } + ures_close(&zoneItem); + ures_close(&zoneArray); + } + int32_t length = fZoneStringsHash->count(); + TimeZoneKeysEnumeration* keysEnum = new TimeZoneKeysEnumeration(length, status); + fZoneIDEnumeration = keysEnum; + if(fZoneIDEnumeration==NULL){ + delete fZoneStringsHash; + fZoneStringsHash = NULL; + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + int32_t pos=-1; + const UnicodeString* key; + const UHashElement* elem = NULL; + while((elem = fZoneStringsHash->nextElement(pos))!= NULL){ + const UHashTok keyTok = elem->key; + key = (const UnicodeString*)keyTok.pointer; + keysEnum->put(*key, status); + } + }else{ + //last resort strings + UnicodeString* array = newUnicodeStringArray(UTZ_MAX_DISPLAY_STRINGS_LENGTH); + if(array==NULL){ + delete fZoneStringsHash; + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + int32_t length = ARRAY_LENGTH(gLastResortZoneStrings); + UnicodeString key(gLastResortZoneStrings[0]); + TimeZoneKeysEnumeration* keysEnum = new TimeZoneKeysEnumeration(length, status); + fZoneIDEnumeration = keysEnum; + if(fZoneIDEnumeration==NULL){ + delete fZoneStringsHash; + delete[] array; + fZoneStringsHash = NULL; + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + keysEnum->put(key, status); + int32_t j=1; + for(i=0; i< length; ){ + array[i++].setTo(gLastResortZoneStrings[j++]); + } + fZoneStringsHash->put(key, array, status); + } +} +void +DateFormatSymbols::initZoneStrings(const UnicodeString** strings, int32_t rowCount, int32_t columnCount, UErrorCode& status){ + if(strings==NULL || rowCount<0 || columnCount<0){ + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + TimeZoneKeysEnumeration* keysEnum = new TimeZoneKeysEnumeration(rowCount, status); + fZoneIDEnumeration = keysEnum; + if(U_FAILURE(status)){ + return; + } + if(fZoneIDEnumeration==NULL){ + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fZoneStringsHash = new Hashtable(uhash_compareUnicodeString, compareTZHashValues, status); + if(U_FAILURE(status)){ + return; + } + if(fZoneStringsHash==NULL){ + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fZoneStringsHash->setValueDeleter(deleteUnicodeStringArray); + for (int32_t row=0; row<rowCount; ++row){ + // the first string in the array is the key. + UnicodeString key = strings[row][0]; + keysEnum->put(key, status); + UnicodeString* array = newUnicodeStringArray(UTZ_MAX_DISPLAY_STRINGS_LENGTH); + if(array==NULL){ + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + for (int32_t col=1; col<columnCount; ++col) { + // fastCopyFrom() - see assignArray comments + switch (col){ + case 1: + array[TIMEZONE_LONG_STANDARD].setTo(strings[row][col]); + break; + case 2: + array[TIMEZONE_SHORT_STANDARD].setTo(strings[row][col]); + break; + case 3: + array[TIMEZONE_LONG_DAYLIGHT].setTo(strings[row][col]); + break; + case 4: + array[TIMEZONE_LONG_DAYLIGHT].setTo(strings[row][col]); + break; + case 5: + if(fZoneStringsColCount==6 || fZoneStringsColCount==8){ + array[TIMEZONE_EXEMPLAR_CITY].setTo(strings[row][col]); + }else{ + array[TIMEZONE_LONG_GENERIC].setTo(strings[row][col]); + } + break; + case 6: + if(fZoneStringsColCount==8){ + array[TIMEZONE_LONG_GENERIC].setTo(strings[row][col]); + }else{ + array[TIMEZONE_SHORT_GENERIC].setTo(strings[row][col]); + } + break; + case 7: + array[TIMEZONE_SHORT_GENERIC].setTo(strings[row][col]); + break; + default: + status = U_ILLEGAL_ARGUMENT_ERROR; + } + // populate the hash table + fZoneStringsHash->put(strings[row][0], array, status); + } + } + +} + +UnicodeString& +DateFormatSymbols::getZoneString(const UnicodeString &zid, const TimeZoneTranslationType type, + UnicodeString &result, UErrorCode &status){ + + if(fZoneStringsHash == NULL){ + //lazy initialization + initZoneStrings(status); + } + if(U_FAILURE(status)){ + return result; + } + UnicodeString* stringsArray = (UnicodeString*)fZoneStringsHash->get(zid); + if(stringsArray != NULL){ + result.setTo(stringsArray[type],0); + } + + return result; +} + +StringEnumeration* +DateFormatSymbols::createZoneStringIDs(UErrorCode &status){ + if(U_FAILURE(status)){ + return NULL; + } + if(fZoneStringsHash == NULL){ + //lazy initialization + initZoneStrings(status); + } + return fZoneIDEnumeration->clone(); +} + +/** + * Sets timezone strings. + * @draft ICU 3.6 + */ +void +DateFormatSymbols::setZoneString(const UnicodeString &zid, const TimeZoneTranslationType type, + const UnicodeString &value, UErrorCode &status){ + if(fZoneStringsHash == NULL){ + //lazy initialization + initZoneStrings(status); + } + if(U_FAILURE(status)){ + return; + } + UnicodeString* stringsArray = (UnicodeString*)fZoneStringsHash->get(zid); + if(stringsArray != NULL){ + stringsArray[type].setTo(value); + }else{ + stringsArray = newUnicodeStringArray(UTZ_MAX_DISPLAY_STRINGS_LENGTH); + if(stringsArray==NULL){ + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + stringsArray[type].setTo(value); + fZoneStringsHash->put(zid, stringsArray, status); + TimeZoneKeysEnumeration* keys = (TimeZoneKeysEnumeration*) fZoneIDEnumeration; + keys->put(zid, status); + } +} + +Hashtable* +DateFormatSymbols::createZoneStringsHash(const Hashtable* otherHash){ + UErrorCode status = U_ZERO_ERROR; + Hashtable* hash = new Hashtable(uhash_compareUnicodeString, compareTZHashValues, status); + if(hash==NULL){ + return NULL; + } + if(U_FAILURE(status)){ + return NULL; + } + hash->setValueDeleter(deleteUnicodeStringArray); + int32_t pos = -1; + const UHashElement* elem = NULL; + // walk through the hash table and create a deep clone + while((elem = otherHash->nextElement(pos))!= NULL){ + const UHashTok otherKeyTok = elem->key; + const UHashTok otherValueTok = elem->value; + UnicodeString* otherKey = (UnicodeString*)otherKeyTok.pointer; + UnicodeString* otherArray = (UnicodeString*)otherValueTok.pointer; + UnicodeString* array = newUnicodeStringArray(UTZ_MAX_DISPLAY_STRINGS_LENGTH); + if(array==NULL){ + return NULL; + } + UnicodeString key(*otherKey); + for(int32_t i=0; i<UTZ_MAX_DISPLAY_STRINGS_LENGTH; i++){ + array[i].setTo(otherArray[i]); + } + hash->put(key, array, status); + if(U_FAILURE(status)){ + delete[] array; + return NULL; + } + } + return hash; +} + + +UnicodeString& +DateFormatSymbols::getZoneID(const UnicodeString& zid, UnicodeString& result, UErrorCode& status){ + if(fZoneStringsHash == NULL){ + initZoneStrings(status); + } + if(U_FAILURE(status)){ + return result; + } + UnicodeString* strings = (UnicodeString*)fZoneStringsHash->get(zid); + if (strings != NULL) { + return result.setTo(zid,0); + } + + // Do a search through the equivalency group for the given ID + int32_t n = TimeZone::countEquivalentIDs(zid); + if (n > 1) { + int32_t i; + for (i=0; i<n; ++i) { + UnicodeString equivID = TimeZone::getEquivalentID(zid, i); + if (equivID != zid) { + strings = (UnicodeString*)fZoneStringsHash->get(equivID); + if (strings != NULL) { + return result.setTo(equivID,0); + } + } + } + }else{ + result.setTo(zid); + } + return result; +} + +void +DateFormatSymbols::getZoneType(const UnicodeString& zid, const UnicodeString& text, int32_t start, + TimeZoneTranslationType& type, UnicodeString& value, UErrorCode& status){ + if(fZoneStringsHash == NULL){ + initZoneStrings(status); + } + if(U_FAILURE(status)){ + return; + } + type = TIMEZONE_COUNT; + UnicodeString* strings = (UnicodeString*)fZoneStringsHash->get(zid); + if(strings != NULL){ + for(int32_t j=0; j<UTZ_MAX_DISPLAY_STRINGS_LENGTH; j++){ + if(strings[j].length() >0 && text.caseCompare(start, strings[j].length(), strings[j], 0)==0){ + type = (TimeZoneTranslationType)j; + value.setTo(strings[j]); + return; + } + } + } +} +void +DateFormatSymbols::findZoneIDTypeValue( UnicodeString& zid, const UnicodeString& text, int32_t start, + TimeZoneTranslationType& type, UnicodeString& value, + UErrorCode& status){ + if(fZoneStringsHash == NULL){ + initZoneStrings(status); + } + if(U_FAILURE(status)){ + return; + } + const UnicodeString* myKey = NULL; + int32_t pos = 0; + TimeZoneKeysEnumeration *keys = (TimeZoneKeysEnumeration*)fZoneIDEnumeration; + while( (myKey=keys->snext(pos, status))!= NULL){ + UnicodeString* strings = (UnicodeString*)fZoneStringsHash->get(*myKey); + if(strings != NULL){ + for(int32_t j=0; j<UTZ_MAX_DISPLAY_STRINGS_LENGTH; j++){ + if(strings[j].length()>0 && text.caseCompare(start, strings[j].length(), strings[j], 0)==0){ + type = (TimeZoneTranslationType)j; + value.setTo(strings[j]); + zid.setTo(*myKey); + return; + } + } + } + } +} U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/esctrn.cpp b/icuSources/i18n/esctrn.cpp index 95c8a1dc..93f13f58 100644 --- a/icuSources/i18n/esctrn.cpp +++ b/icuSources/i18n/esctrn.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -32,28 +32,28 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(EscapeTransliterator) /** * Factory methods */ -Transliterator* EscapeTransliterator::_createUnicode(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createEscUnicode(const UnicodeString& ID, Transliterator::Token /*context*/) { // Unicode: "U+10FFFF" hex, min=4, max=6 return new EscapeTransliterator(ID, UNIPRE, EMPTY, 16, 4, TRUE, NULL); } -Transliterator* EscapeTransliterator::_createJava(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createEscJava(const UnicodeString& ID, Transliterator::Token /*context*/) { // Java: "\\uFFFF" hex, min=4, max=4 return new EscapeTransliterator(ID, BS_u, EMPTY, 16, 4, FALSE, NULL); } -Transliterator* EscapeTransliterator::_createC(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createEscC(const UnicodeString& ID, Transliterator::Token /*context*/) { // C: "\\uFFFF" hex, min=4, max=4; \\U0010FFFF hex, min=8, max=8 return new EscapeTransliterator(ID, BS_u, EMPTY, 16, 4, TRUE, new EscapeTransliterator(EMPTY, BS_U, EMPTY, 16, 8, TRUE, NULL)); } -Transliterator* EscapeTransliterator::_createXML(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createEscXML(const UnicodeString& ID, Transliterator::Token /*context*/) { // XML: "􏿿" hex, min=1, max=6 return new EscapeTransliterator(ID, XMLPRE, SEMI, 16, 1, TRUE, NULL); } -Transliterator* EscapeTransliterator::_createXML10(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createEscXML10(const UnicodeString& ID, Transliterator::Token /*context*/) { // XML10: "&1114111;" dec, min=1, max=7 (not really "Any-Hex") return new EscapeTransliterator(ID, XML10PRE, SEMI, 10, 1, TRUE, NULL); } -Transliterator* EscapeTransliterator::_createPerl(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createEscPerl(const UnicodeString& ID, Transliterator::Token /*context*/) { // Perl: "\\x{263A}" hex, min=1, max=6 return new EscapeTransliterator(ID, PERLPRE, RBRACE, 16, 1, TRUE, NULL); } @@ -65,19 +65,19 @@ Transliterator* EscapeTransliterator::_createPerl(const UnicodeString& ID, Token void EscapeTransliterator::registerIDs() { Token t = integerToken(0); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/Unicode"), _createUnicode, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/Unicode"), _createEscUnicode, t); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/Java"), _createJava, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/Java"), _createEscJava, t); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/C"), _createC, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/C"), _createEscC, t); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/XML"), _createXML, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/XML"), _createEscXML, t); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/XML10"), _createXML10, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/XML10"), _createEscXML10, t); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/Perl"), _createPerl, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex/Perl"), _createEscPerl, t); - Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex"), _createJava, t); + Transliterator::_registerFactory(UNICODE_STRING_SIMPLE("Any-Hex"), _createEscJava, t); } /** diff --git a/icuSources/i18n/esctrn.h b/icuSources/i18n/esctrn.h index 7a571ed3..6dae51b8 100644 --- a/icuSources/i18n/esctrn.h +++ b/icuSources/i18n/esctrn.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -117,15 +117,11 @@ class U_I18N_API EscapeTransliterator : public Transliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); @@ -134,20 +130,9 @@ class U_I18N_API EscapeTransliterator : public Transliterator { /** * Implements {@link Transliterator#handleTransliterate}. */ - void handleTransliterate(Replaceable& text, UTransPosition& offset, + virtual void handleTransliterate(Replaceable& text, UTransPosition& offset, UBool isIncremental) const; - private: - - /** - * Factory methods - */ - static Transliterator* _createUnicode(const UnicodeString& ID, Token context); - static Transliterator* _createJava(const UnicodeString& ID, Token context); - static Transliterator* _createC(const UnicodeString& ID, Token context); - static Transliterator* _createXML(const UnicodeString& ID, Token context); - static Transliterator* _createXML10(const UnicodeString& ID, Token context); - static Transliterator* _createPerl(const UnicodeString& ID, Token context); }; U_NAMESPACE_END diff --git a/icuSources/i18n/fmtable.cpp b/icuSources/i18n/fmtable.cpp index 8b86d820..b767b332 100644 --- a/icuSources/i18n/fmtable.cpp +++ b/icuSources/i18n/fmtable.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -43,30 +43,43 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Formattable) // of the Measure class, which is true as of 3.0. [alan] // Return TRUE if *a == *b. -inline UBool objectEquals(const UObject* a, const UObject* b) { +static inline UBool objectEquals(const UObject* a, const UObject* b) { // LATER: return *a == *b; return *((const Measure*) a) == *((const Measure*) b); } // Return a clone of *a. -inline UObject* objectClone(const UObject* a) { +static inline UObject* objectClone(const UObject* a) { // LATER: return a->clone(); return ((const Measure*) a)->clone(); } // Return TRUE if *a is an instance of Measure. -inline UBool instanceOfMeasure(const UObject* a) { +static inline UBool instanceOfMeasure(const UObject* a) { // LATER: return a->instanceof(Measure::getStaticClassID()); return a->getDynamicClassID() == CurrencyAmount::getStaticClassID(); } +/** + * Creates a new Formattable array and copies the values from the specified + * original. + * @param array the original array + * @param count the original array count + * @return the new Formattable array. + */ +static inline Formattable* createArrayCopy(const Formattable* array, int32_t count) { + Formattable *result = new Formattable[count]; + for (int32_t i=0; i<count; ++i) result[i] = array[i]; // Don't memcpy! + return result; +} + //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. /** * Set 'ec' to 'err' only if 'ec' is not already set to a failing UErrorCode. */ -inline void setError(UErrorCode& ec, UErrorCode err) { +static inline void setError(UErrorCode& ec, UErrorCode err) { if (U_SUCCESS(ec)) { ec = err; } @@ -123,16 +136,6 @@ Formattable::Formattable(int64_t value) fValue.fInt64 = value; } -// ------------------------------------- -// Creates a formattable object with a char* string. - -Formattable::Formattable(const char* stringToCopy) - : UObject(), fType(kString) -{ - fBogus.setToBogus(); - fValue.fString = new UnicodeString(stringToCopy); -} - // ------------------------------------- // Creates a formattable object with a UnicodeString instance. diff --git a/icuSources/i18n/fmtable_cnv.cpp b/icuSources/i18n/fmtable_cnv.cpp new file mode 100644 index 00000000..9a270997 --- /dev/null +++ b/icuSources/i18n/fmtable_cnv.cpp @@ -0,0 +1,44 @@ +/* +******************************************************************************* +* Copyright (C) 1997-2005, International Business Machines Corporation and * +* others. All Rights Reserved. * +******************************************************************************* +* +* File FMTABLE.CPP +* +* Modification History: +* +* Date Name Description +* 03/25/97 clhuang Initial Implementation. +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_CONVERSION + +#include "unicode/fmtable.h" + +// ***************************************************************************** +// class Formattable +// ***************************************************************************** + +U_NAMESPACE_BEGIN + +// ------------------------------------- +// Creates a formattable object with a char* string. +// This API is useless. The API that takes a UnicodeString is actually just as good. +// This is just a grandfathered API. + +Formattable::Formattable(const char* stringToCopy) + : UObject(), fType(kString) +{ + fBogus.setToBogus(); + fValue.fString = new UnicodeString(stringToCopy); +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING || !UCONFIG_NO_CONVERSION */ + +//eof diff --git a/icuSources/i18n/funcrepl.h b/icuSources/i18n/funcrepl.h index c9cfe605..af6a3fc4 100644 --- a/icuSources/i18n/funcrepl.h +++ b/icuSources/i18n/funcrepl.h @@ -8,6 +8,9 @@ ********************************************************************** */ +#ifndef FUNCREPL_H +#define FUNCREPL_H + #include "unicode/utypes.h" #if !UCONFIG_NO_TRANSLITERATION @@ -118,5 +121,6 @@ class U_I18N_API FunctionReplacer : public UnicodeFunctor, public UnicodeReplace U_NAMESPACE_END #endif /* #if !UCONFIG_NO_TRANSLITERATION */ +#endif //eof diff --git a/icuSources/i18n/gregocal.cpp b/icuSources/i18n/gregocal.cpp index bcc82a1b..45807bfd 100644 --- a/icuSources/i18n/gregocal.cpp +++ b/icuSources/i18n/gregocal.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -144,7 +144,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GregorianCalendar) //const UDate GregorianCalendar::kPapalCutover = -12219292800000L; static const uint32_t kCutoverJulianDay = 2299161; static const UDate kPapalCutover = (2299161.0 - kEpochStartAsJulianDay) * U_MILLIS_PER_DAY; -static const UDate kPapalCutoverJulian = (2299161.0 - kEpochStartAsJulianDay); +//static const UDate kPapalCutoverJulian = (2299161.0 - kEpochStartAsJulianDay); // ------------------------------------- diff --git a/icuSources/i18n/gregoimp.cpp b/icuSources/i18n/gregoimp.cpp index 52d4e1d4..0ebb654f 100644 --- a/icuSources/i18n/gregoimp.cpp +++ b/icuSources/i18n/gregoimp.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2004, International Business Machines +* Copyright (c) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -264,7 +264,34 @@ UResourceBundle* CalendarData::getByKey2(const char *key, const char *subKey, UE return fFillin; } -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CalendarData); +UResourceBundle* CalendarData::getByKey3(const char *key, const char *contextKey, const char *subKey, UErrorCode& status) { + if(U_FAILURE(status)) { + return NULL; + } + + if(fBundle) { +#if defined (U_DEBUG_CALDATA) + fprintf(stderr, "%p: //\n"); +#endif + fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status); + fOtherFillin = ures_getByKeyWithFallback(fFillin, contextKey, fOtherFillin, &status); + fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status); +#if defined (U_DEBUG_CALDATA) + fprintf(stderr, "%p: get %s/%s/%s -> %s - from MAIN %s\n", this, key, contextKey, subKey, u_errorName(status), ures_getLocale(fFillin, &status)); +#endif + } + if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) { + status = U_ZERO_ERROR; // retry with fallback (gregorian) + fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status); + fOtherFillin = ures_getByKeyWithFallback(fFillin, contextKey, fOtherFillin, &status); + fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status); +#if defined (U_DEBUG_CALDATA) + fprintf(stderr, "%p: get %s/%s/%s -> %s - from FALLBACK %s\n",this, key, contextKey, subKey, u_errorName(status), ures_getLocale(fFillin,&status)); +#endif + } + + return fFillin; +} #endif //eof diff --git a/icuSources/i18n/gregoimp.h b/icuSources/i18n/gregoimp.h index 0adaa48e..8b1d12c7 100644 --- a/icuSources/i18n/gregoimp.h +++ b/icuSources/i18n/gregoimp.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2004, International Business Machines +* Copyright (c) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -23,7 +23,7 @@ U_NAMESPACE_BEGIN * A utility class providing mathematical functions used by time zone * and calendar code. Do not instantiate. */ -class U_I18N_API Math { +class Math { public: /** * Divide two integers, returning the floor of the quotient. @@ -130,7 +130,7 @@ class U_I18N_API Math { * Note: Unlike GregorianCalendar, all computations performed by this * class occur in the pure proleptic GregorianCalendar. */ -class U_I18N_API Grego { +class Grego { public: /** * Return TRUE if the given year is a leap year. @@ -259,10 +259,10 @@ inline int32_t Grego::gregorianShift(int32_t eyear) { } /** - * This class provides convenient access to the data needed for a calendar. + * This utility class provides convenient access to the data needed for a calendar. * @internal ICU 3.0 */ -class U_I18N_API CalendarData : public UObject { +class CalendarData : public UMemory { public: /** * Construct a CalendarData from the given locale. @@ -297,32 +297,21 @@ public: */ UResourceBundle* getByKey2(const char *key, const char *subKey, UErrorCode& status); - ~CalendarData(); - /** - * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual - * override. This method is to implement a simple version of RTTI, since not all C++ - * compilers support genuine RTTI. Polymorphic operator==() and clone() methods call - * this method. + * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()! + * data is located in: "calendar/key/contextKey/subKey" + * for example, calendar/dayNames/standalone/narrow + * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API. * - * @return The class ID for this object. All objects of a given class have the - * same class ID. Objects of other classes have different class IDs. - * @stable ICU 2.0 + * @param key Resource key to data + * @param contextKey Resource key to data + * @param subKey Resource key to data + * @param status Error Status + * @internal */ - virtual UClassID getDynamicClassID(void) const; + UResourceBundle* getByKey3(const char *key, const char *contextKey, const char *subKey, UErrorCode& status); - /** - * Return the class ID for this class. This is useful only for comparing to a return - * value from getDynamicClassID(). For example: - * - * Base* polymorphic_pointer = createPolymorphicObject(); - * if (polymorphic_pointer->getDynamicClassID() == - * Derived::getStaticClassID()) ... - * - * @return The class ID for all objects of this class. - * @stable ICU 2.0 - */ - static UClassID U_EXPORT2 getStaticClassID(void); + ~CalendarData(); private: void initData(const char *locale, const char *type, UErrorCode& status); diff --git a/icuSources/i18n/hebrwcal.cpp b/icuSources/i18n/hebrwcal.cpp index b8bd65fa..1814272b 100644 --- a/icuSources/i18n/hebrwcal.cpp +++ b/icuSources/i18n/hebrwcal.cpp @@ -1,9 +1,10 @@ /* - * Copyright (C) 2003-2004, International Business Machines Corporation - * and others. All Rights Reserved. - ****************************************************************************** +****************************************************************************** +* Copyright (C) 2003-2006, International Business Machines Corporation +* and others. All Rights Reserved. +****************************************************************************** * - * File HEBRWCAL.H + * File HEBRWCAL.CPP * * Modification History: * @@ -31,7 +32,7 @@ * time of day in sync with that of the Gregorian calendar, we use * midnight, rather than sunset the day before. */ -static const double EPOCH_MILLIS = -180799862400000.; // 1/1/1 HY +//static const double EPOCH_MILLIS = -180799862400000.; // 1/1/1 HY static const int32_t LIMITS[UCAL_FIELD_COUNT][4] = { // Minimum Greatest Least Maximum @@ -263,6 +264,14 @@ void HebrewCalendar::add(UCalendarDateFields field, int32_t amount, UErrorCode& } } +/** + * @deprecated ICU 2.6 use UCalendarDateFields instead of EDateFields + */ +void HebrewCalendar::add(EDateFields field, int32_t amount, UErrorCode& status) +{ + add((UCalendarDateFields)field, amount, status); +} + /** * Rolls (up/down) a specified amount time on the given field. For * example, to roll the current date up by three days, you can call @@ -721,7 +730,7 @@ HebrewCalendar::initializeSystemDefaultCentury() } } -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HebrewCalendar); +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HebrewCalendar) U_NAMESPACE_END diff --git a/icuSources/i18n/hebrwcal.h b/icuSources/i18n/hebrwcal.h index a9ac8446..64d19e8a 100644 --- a/icuSources/i18n/hebrwcal.h +++ b/icuSources/i18n/hebrwcal.h @@ -1,6 +1,8 @@ /* -* Copyright (C) 2003-2004, International Business Machines Corporation and others. All Rights Reserved. -******************************************************************************** +****************************************************************************** +* Copyright (C) 2003-2006, International Business Machines Corporation +* and others. All Rights Reserved. +****************************************************************************** * * File HEBRWCAL.H * @@ -9,7 +11,7 @@ * Date Name Description * 05/13/2003 srl copied from gregocal.h * 11/26/2003 srl copied from buddhcal.h -******************************************************************************** +****************************************************************************** */ #ifndef HEBRWCAL_H @@ -242,7 +244,7 @@ public: /** * @deprecated ICU 2.6 use UCalendarDateFields instead of EDateFields */ - inline virtual void add(EDateFields field, int32_t amount, UErrorCode& status) { add((UCalendarDateFields)field, amount, status); } + virtual void add(EDateFields field, int32_t amount, UErrorCode& status); /** diff --git a/icuSources/i18n/i18n.dsp b/icuSources/i18n/i18n.dsp deleted file mode 100644 index ce857541..00000000 --- a/icuSources/i18n/i18n.dsp +++ /dev/null @@ -1,2676 +0,0 @@ -# Microsoft Developer Studio Project File - Name="i18n" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=i18n - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "i18n.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "i18n.mak" CFG="i18n - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "i18n - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "i18n - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "i18n - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "i18n - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "i18n - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "I18N_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /Zi /O2 /Ob2 /I "..\..\include" /I "..\..\source\common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "I18N_EXPORTS" /D "U_I18N_IMPLEMENTATION" /FR /FD /GF /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "../common" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 icuuc.lib /nologo /base:"0x4a900000" /dll /machine:I386 /out:"..\..\bin\icuin32.dll" /implib:"..\..\lib\icuin.lib" /libpath:"..\..\lib" -# SUBTRACT LINK32 /pdb:none /debug - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "I18N_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\..\source\common" /D "_WINDOWS" /D "_USRDLL" /D "I18N_EXPORTS" /D "U_I18N_IMPLEMENTATION" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "UDATA_MAP" /FR /FD /GF /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "../common" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib /nologo /base:"0x4a900000" /dll /debug /machine:I386 /out:"..\..\bin\icuin32d.dll" /implib:"..\..\lib\icuind.lib" /pdbtype:sept /libpath:"..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "I18N_EXPORTS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /Ob2 /I "..\..\include" /I "..\..\source\common" /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "I18N_EXPORTS" /D "U_I18N_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GF /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "../common" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib /nologo /base:"0x4a900000" /dll /machine:IX86 /out:"..\..\bin\icuin32.dll" /implib:"..\..\lib\icuin.lib" /libpath:"..\..\lib" /machine:IA64 -# SUBTRACT LINK32 /debug - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "I18N_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\include" /I "..\..\source\common" /D "_WINDOWS" /D "_USRDLL" /D "I18N_EXPORTS" /D "U_I18N_IMPLEMENTATION" /D "WIN64" /D "_DEBUG" /D "_MBCS" /D "UDATA_MAP" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GF /GZ /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "../common" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib /nologo /base:"0x4a900000" /dll /incremental:no /debug /machine:IX86 /out:"..\..\bin\icuin32d.dll" /implib:"..\..\lib\icuind.lib" /pdbtype:sept /libpath:"..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "i18n - Win32 Release" -# Name "i18n - Win32 Debug" -# Name "i18n - Win64 Release" -# Name "i18n - Win64 Debug" -# Begin Group "collation" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\bocsu.c -# End Source File -# Begin Source File - -SOURCE=.\bocsu.h -# End Source File -# Begin Source File - -SOURCE=.\coleitr.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\coleitr.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\coleitr.h - -"..\..\include\unicode\coleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\coleitr.h - -"..\..\include\unicode\coleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\coleitr.h - -"..\..\include\unicode\coleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\coleitr.h - -"..\..\include\unicode\coleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\coll.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\coll.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\coll.h - -"..\..\include\unicode\coll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\coll.h - -"..\..\include\unicode\coll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\coll.h - -"..\..\include\unicode\coll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\coll.h - -"..\..\include\unicode\coll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\search.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\search.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\search.h - -"..\..\include\unicode\search.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\search.h - -"..\..\include\unicode\search.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\search.h - -"..\..\include\unicode\search.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\search.h - -"..\..\include\unicode\search.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\sortkey.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\sortkey.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\sortkey.h - -"..\..\include\unicode\sortkey.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\sortkey.h - -"..\..\include\unicode\sortkey.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\sortkey.h - -"..\..\include\unicode\sortkey.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\sortkey.h - -"..\..\include\unicode\sortkey.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\stsearch.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\stsearch.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\stsearch.h - -"..\..\include\unicode\stsearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\stsearch.h - -"..\..\include\unicode\stsearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\stsearch.h - -"..\..\include\unicode\stsearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\stsearch.h - -"..\..\include\unicode\stsearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\tblcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\tblcoll.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\tblcoll.h - -"..\..\include\unicode\tblcoll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\tblcoll.h - -"..\..\include\unicode\tblcoll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\tblcoll.h - -"..\..\include\unicode\tblcoll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\tblcoll.h - -"..\..\include\unicode\tblcoll.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucol.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucol.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucol.h - -"..\..\include\unicode\ucol.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucol.h - -"..\..\include\unicode\ucol.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucol.h - -"..\..\include\unicode\ucol.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucol.h - -"..\..\include\unicode\ucol.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucol_bld.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucol_bld.h -# End Source File -# Begin Source File - -SOURCE=.\ucol_cnt.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucol_cnt.h -# End Source File -# Begin Source File - -SOURCE=.\ucol_elm.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucol_elm.h -# End Source File -# Begin Source File - -SOURCE=.\ucol_imp.h -# End Source File -# Begin Source File - -SOURCE=.\ucol_sit.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucol_tok.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucol_tok.h -# End Source File -# Begin Source File - -SOURCE=.\ucol_wgt.c -# End Source File -# Begin Source File - -SOURCE=.\ucol_wgt.h -# End Source File -# Begin Source File - -SOURCE=.\ucoleitr.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucoleitr.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucoleitr.h - -"..\..\include\unicode\ucoleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucoleitr.h - -"..\..\include\unicode\ucoleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucoleitr.h - -"..\..\include\unicode\ucoleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucoleitr.h - -"..\..\include\unicode\ucoleitr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\usearch.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\usearch.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\usearch.h - -"..\..\include\unicode\usearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\usearch.h - -"..\..\include\unicode\usearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\usearch.h - -"..\..\include\unicode\usearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\usearch.h - -"..\..\include\unicode\usearch.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\usrchimp.h -# End Source File -# End Group -# Begin Group "formatting" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\astro.cpp -# End Source File -# Begin Source File - -SOURCE=.\astro.h -# End Source File -# Begin Source File - -SOURCE=.\buddhcal.cpp -# End Source File -# Begin Source File - -SOURCE=.\buddhcal.h -# End Source File -# Begin Source File - -SOURCE=.\calendar.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\calendar.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\calendar.h - -"..\..\include\unicode\calendar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\calendar.h - -"..\..\include\unicode\calendar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\calendar.h - -"..\..\include\unicode\calendar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\calendar.h - -"..\..\include\unicode\calendar.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\chnsecal.cpp -# End Source File -# Begin Source File - -SOURCE=.\chnsecal.h -# End Source File -# Begin Source File - -SOURCE=.\choicfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\choicfmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\choicfmt.h - -"..\..\include\unicode\choicfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\choicfmt.h - -"..\..\include\unicode\choicfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\choicfmt.h - -"..\..\include\unicode\choicfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\choicfmt.h - -"..\..\include\unicode\choicfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\curramt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\curramt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\curramt.h - -"..\..\include\unicode\curramt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\curramt.h - -"..\..\include\unicode\curramt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\curramt.h - -"..\..\include\unicode\curramt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\curramt.h - -"..\..\include\unicode\curramt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\currfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\currfmt.h -# End Source File -# Begin Source File - -SOURCE=.\currunit.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\currunit.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\currunit.h - -"..\..\include\unicode\currunit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\currunit.h - -"..\..\include\unicode\currunit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\currunit.h - -"..\..\include\unicode\currunit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\currunit.h - -"..\..\include\unicode\currunit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\datefmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\datefmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\datefmt.h - -"..\..\include\unicode\datefmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\datefmt.h - -"..\..\include\unicode\datefmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\datefmt.h - -"..\..\include\unicode\datefmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\datefmt.h - -"..\..\include\unicode\datefmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\dcfmtsym.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\dcfmtsym.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\dcfmtsym.h - -"..\..\include\unicode\dcfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\dcfmtsym.h - -"..\..\include\unicode\dcfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\dcfmtsym.h - -"..\..\include\unicode\dcfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\dcfmtsym.h - -"..\..\include\unicode\dcfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\decimfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\decimfmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\decimfmt.h - -"..\..\include\unicode\decimfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\decimfmt.h - -"..\..\include\unicode\decimfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\decimfmt.h - -"..\..\include\unicode\decimfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\decimfmt.h - -"..\..\include\unicode\decimfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\digitlst.cpp -# End Source File -# Begin Source File - -SOURCE=.\digitlst.h -# End Source File -# Begin Source File - -SOURCE=.\dtfmtsym.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\dtfmtsym.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\dtfmtsym.h - -"..\..\include\unicode\dtfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\dtfmtsym.h - -"..\..\include\unicode\dtfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\dtfmtsym.h - -"..\..\include\unicode\dtfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\dtfmtsym.h - -"..\..\include\unicode\dtfmtsym.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\fieldpos.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\fieldpos.h - -"..\..\include\unicode\fieldpos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\fieldpos.h - -"..\..\include\unicode\fieldpos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\fieldpos.h - -"..\..\include\unicode\fieldpos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\fieldpos.h - -"..\..\include\unicode\fieldpos.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\fmtable.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\fmtable.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\fmtable.h - -"..\..\include\unicode\fmtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\fmtable.h - -"..\..\include\unicode\fmtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\fmtable.h - -"..\..\include\unicode\fmtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\fmtable.h - -"..\..\include\unicode\fmtable.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\format.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\format.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\format.h - -"..\..\include\unicode\format.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\format.h - -"..\..\include\unicode\format.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\format.h - -"..\..\include\unicode\format.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\format.h - -"..\..\include\unicode\format.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\gregocal.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\gregocal.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\gregocal.h - -"..\..\include\unicode\gregocal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\gregocal.h - -"..\..\include\unicode\gregocal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\gregocal.h - -"..\..\include\unicode\gregocal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\gregocal.h - -"..\..\include\unicode\gregocal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\gregoimp.cpp -# End Source File -# Begin Source File - -SOURCE=.\gregoimp.h -# End Source File -# Begin Source File - -SOURCE=.\hebrwcal.cpp -# End Source File -# Begin Source File - -SOURCE=.\hebrwcal.h -# End Source File -# Begin Source File - -SOURCE=.\islamcal.cpp -# End Source File -# Begin Source File - -SOURCE=.\islamcal.h -# End Source File -# Begin Source File - -SOURCE=.\japancal.cpp -# End Source File -# Begin Source File - -SOURCE=.\japancal.h -# End Source File -# Begin Source File - -SOURCE=.\measfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\measfmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\measfmt.h - -"..\..\include\unicode\measfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\measfmt.h - -"..\..\include\unicode\measfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\measfmt.h - -"..\..\include\unicode\measfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\measfmt.h - -"..\..\include\unicode\measfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\measure.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\measure.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\measure.h - -"..\..\include\unicode\measure.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\measure.h - -"..\..\include\unicode\measure.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\measure.h - -"..\..\include\unicode\measure.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\measure.h - -"..\..\include\unicode\measure.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\msgfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\msgfmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\msgfmt.h - -"..\..\include\unicode\msgfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\msgfmt.h - -"..\..\include\unicode\msgfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\msgfmt.h - -"..\..\include\unicode\msgfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\msgfmt.h - -"..\..\include\unicode\msgfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\nfrlist.h -# End Source File -# Begin Source File - -SOURCE=.\nfrs.cpp -# End Source File -# Begin Source File - -SOURCE=.\nfrs.h -# End Source File -# Begin Source File - -SOURCE=.\nfrule.cpp -# End Source File -# Begin Source File - -SOURCE=.\nfrule.h -# End Source File -# Begin Source File - -SOURCE=.\nfsubs.cpp -# End Source File -# Begin Source File - -SOURCE=.\nfsubs.h -# End Source File -# Begin Source File - -SOURCE=.\numfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\numfmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\numfmt.h - -"..\..\include\unicode\numfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\numfmt.h - -"..\..\include\unicode\numfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\numfmt.h - -"..\..\include\unicode\numfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\numfmt.h - -"..\..\include\unicode\numfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\olsontz.cpp -# End Source File -# Begin Source File - -SOURCE=.\olsontz.h -# End Source File -# Begin Source File - -SOURCE=.\rbnf.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\rbnf.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\rbnf.h - -"..\..\include\unicode\rbnf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\rbnf.h - -"..\..\include\unicode\rbnf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\rbnf.h - -"..\..\include\unicode\rbnf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\rbnf.h - -"..\..\include\unicode\rbnf.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\simpletz.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\simpletz.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\simpletz.h - -"..\..\include\unicode\simpletz.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\simpletz.h - -"..\..\include\unicode\simpletz.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\simpletz.h - -"..\..\include\unicode\simpletz.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\simpletz.h - -"..\..\include\unicode\simpletz.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\smpdtfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\smpdtfmt.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\smpdtfmt.h - -"..\..\include\unicode\smpdtfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\smpdtfmt.h - -"..\..\include\unicode\smpdtfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\smpdtfmt.h - -"..\..\include\unicode\smpdtfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\smpdtfmt.h - -"..\..\include\unicode\smpdtfmt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\timezone.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\timezone.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\timezone.h - -"..\..\include\unicode\timezone.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\timezone.h - -"..\..\include\unicode\timezone.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\timezone.h - -"..\..\include\unicode\timezone.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\timezone.h - -"..\..\include\unicode\timezone.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucal.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucal.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucal.h - -"..\..\include\unicode\ucal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucal.h - -"..\..\include\unicode\ucal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucal.h - -"..\..\include\unicode\ucal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucal.h - -"..\..\include\unicode\ucal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucurr.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\ucurr.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ucurr.h - -"..\..\include\unicode\ucurr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucurr.h - -"..\..\include\unicode\ucurr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ucurr.h - -"..\..\include\unicode\ucurr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ucurr.h - -"..\..\include\unicode\ucurr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\ucurrimp.h -# End Source File -# Begin Source File - -SOURCE=.\udat.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\udat.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\udat.h - -"..\..\include\unicode\udat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\udat.h - -"..\..\include\unicode\udat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\udat.h - -"..\..\include\unicode\udat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\udat.h - -"..\..\include\unicode\udat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\umsg.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\umsg.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\umsg.h - -"..\..\include\unicode\umsg.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\umsg.h - -"..\..\include\unicode\umsg.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\umsg.h - -"..\..\include\unicode\umsg.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\umsg.h - -"..\..\include\unicode\umsg.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\umsg_imp.h -# End Source File -# Begin Source File - -SOURCE=.\unum.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\unum.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unum.h - -"..\..\include\unicode\unum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unum.h - -"..\..\include\unicode\unum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unum.h - -"..\..\include\unicode\unum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unum.h - -"..\..\include\unicode\unum.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\utmscale.c - -!IF "$(CFG)" == "i18n - Win32 Release" - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# ADD CPP /Od - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\utmscale.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utmscale.h - -"..\..\include\unicode\utmscale.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utmscale.h - -"..\..\include\unicode\utmscale.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utmscale.h - -"..\..\include\unicode\utmscale.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utmscale.h - -"..\..\include\unicode\utmscale.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "misc" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\i18n.rc -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 -# End Source File -# Begin Source File - -SOURCE=.\ucln_in.c -# End Source File -# Begin Source File - -SOURCE=.\ucln_in.h -# End Source File -# End Group -# Begin Group "regex" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\unicode\regex.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\regex.h - -"..\..\include\unicode\regex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\regex.h - -"..\..\include\unicode\regex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\regex.h - -"..\..\include\unicode\regex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\regex.h - -"..\..\include\unicode\regex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\regexcmp.cpp -# End Source File -# Begin Source File - -SOURCE=.\regexcmp.h -# End Source File -# Begin Source File - -SOURCE=.\regexcst.h -# End Source File -# Begin Source File - -SOURCE=.\regeximp.h -# End Source File -# Begin Source File - -SOURCE=.\regexst.cpp -# End Source File -# Begin Source File - -SOURCE=.\regexst.h -# End Source File -# Begin Source File - -SOURCE=.\rematch.cpp -# End Source File -# Begin Source File - -SOURCE=.\repattrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\uregex.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\uregex.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\uregex.h - -"..\..\include\unicode\uregex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\uregex.h - -"..\..\include\unicode\uregex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\uregex.h - -"..\..\include\unicode\uregex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\uregex.h - -"..\..\include\unicode\uregex.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "transforms" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\anytrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\anytrans.h -# End Source File -# Begin Source File - -SOURCE=.\casetrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\casetrn.h -# End Source File -# Begin Source File - -SOURCE=.\cpdtrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\cpdtrans.h -# End Source File -# Begin Source File - -SOURCE=.\esctrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\esctrn.h -# End Source File -# Begin Source File - -SOURCE=.\funcrepl.cpp -# End Source File -# Begin Source File - -SOURCE=.\funcrepl.h -# End Source File -# Begin Source File - -SOURCE=.\name2uni.cpp -# End Source File -# Begin Source File - -SOURCE=.\name2uni.h -# End Source File -# Begin Source File - -SOURCE=.\nortrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\nortrans.h -# End Source File -# Begin Source File - -SOURCE=.\nultrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\nultrans.h -# End Source File -# Begin Source File - -SOURCE=.\quant.cpp -# End Source File -# Begin Source File - -SOURCE=.\quant.h -# End Source File -# Begin Source File - -SOURCE=.\rbt.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbt.h -# End Source File -# Begin Source File - -SOURCE=.\rbt_data.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbt_data.h -# End Source File -# Begin Source File - -SOURCE=.\rbt_pars.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbt_pars.h -# End Source File -# Begin Source File - -SOURCE=.\rbt_rule.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbt_rule.h -# End Source File -# Begin Source File - -SOURCE=.\rbt_set.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbt_set.h -# End Source File -# Begin Source File - -SOURCE=.\remtrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\remtrans.h -# End Source File -# Begin Source File - -SOURCE=.\strmatch.cpp -# End Source File -# Begin Source File - -SOURCE=.\strmatch.h -# End Source File -# Begin Source File - -SOURCE=.\strrepl.cpp -# End Source File -# Begin Source File - -SOURCE=.\titletrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\titletrn.h -# End Source File -# Begin Source File - -SOURCE=.\tolowtrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\tolowtrn.h -# End Source File -# Begin Source File - -SOURCE=.\toupptrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\toupptrn.h -# End Source File -# Begin Source File - -SOURCE=.\translit.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\translit.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\translit.h - -"..\..\include\unicode\translit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\translit.h - -"..\..\include\unicode\translit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\translit.h - -"..\..\include\unicode\translit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\translit.h - -"..\..\include\unicode\translit.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\transreg.cpp -# End Source File -# Begin Source File - -SOURCE=.\transreg.h -# End Source File -# Begin Source File - -SOURCE=.\tridpars.cpp -# End Source File -# Begin Source File - -SOURCE=.\tridpars.h -# End Source File -# Begin Source File - -SOURCE=.\unesctrn.cpp -# End Source File -# Begin Source File - -SOURCE=.\unesctrn.h -# End Source File -# Begin Source File - -SOURCE=.\uni2name.cpp -# End Source File -# Begin Source File - -SOURCE=.\uni2name.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\unirepl.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\unirepl.h - -"..\..\include\unicode\unirepl.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\unirepl.h - -"..\..\include\unicode\unirepl.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\unirepl.h - -"..\..\include\unicode\unirepl.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\unirepl.h - -"..\..\include\unicode\unirepl.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\utrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\unicode\utrans.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\utrans.h - -"..\..\include\unicode\utrans.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\utrans.h - -"..\..\include\unicode\utrans.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\utrans.h - -"..\..\include\unicode\utrans.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\utrans.h - -"..\..\include\unicode\utrans.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "locale" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\ulocdata.c -# End Source File -# Begin Source File - -SOURCE=.\unicode\ulocdata.h - -!IF "$(CFG)" == "i18n - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ulocdata.h - -"..\..\include\unicode\ulocdata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ulocdata.h - -"..\..\include\unicode\ulocdata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ulocdata.h - -"..\..\include\unicode\ulocdata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "i18n - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ulocdata.h - -"..\..\include\unicode\ulocdata.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/i18n/i18n.rc b/icuSources/i18n/i18n.rc index 120a13fb..0ade1e07 100644 --- a/icuSources/i18n/i18n.rc +++ b/icuSources/i18n/i18n.rc @@ -1,7 +1,7 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. -// Copyright (c) 2001-2003 International Business Machines +// Copyright (c) 2001-2005 International Business Machines // Corporation and others. All Rights Reserved. // #include "../common/msvcres.h" @@ -54,8 +54,8 @@ END #define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 + FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM + PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,10 +70,10 @@ BEGIN BEGIN BLOCK "00000000" BEGIN - VALUE "Comments", "http://oss.software.ibm.com/icu/\0" + VALUE "Comments", ICU_WEBSITE "\0" VALUE "CompanyName", "IBM Corporation and others\0" VALUE "FileDescription", "IBM ICU I18N DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" #ifdef _DEBUG VALUE "OriginalFilename", "icuin" U_ICU_VERSION_SHORT "d.dll\0") @@ -82,7 +82,7 @@ BEGIN #endif VALUE "PrivateBuild", "\0" VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "SpecialBuild", "\0" END END diff --git a/icuSources/i18n/i18n.vcproj b/icuSources/i18n/i18n.vcproj index 5c5702a0..b4a9e712 100644 --- a/icuSources/i18n/i18n.vcproj +++ b/icuSources/i18n/i18n.vcproj @@ -20,15 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" - EnableIntrinsicFunctions="TRUE" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;U_I18N_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;NDEBUG;U_I18N_IMPLEMENTATION" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/i18n.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -36,16 +35,16 @@ BrowseInformation="1" WarningLevel="3" SuppressStartupBanner="TRUE" - DebugInformationFormat="3" CompileAs="0"/> <Tool Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\icuin32.dll" + OutputFile="..\..\bin\icuin36.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" - ProgramDatabaseFile=".\..\..\lib\icuin32.pdb" + ProgramDatabaseFile=".\..\..\lib\icuin36.pdb" + EnableCOMDATFolding="2" BaseAddress="0x4a900000" ImportLibrary="..\..\lib\icuin.lib"/> <Tool @@ -89,12 +88,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;U_I18N_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;_DEBUG;U_I18N_IMPLEMENTATION" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/i18n.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -108,11 +108,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\icuin32d.dll" + OutputFile="..\..\bin\icuin36d.dll" LinkIncremental="2" SuppressStartupBanner="TRUE" GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\..\..\lib\icuin32d.pdb" + ProgramDatabaseFile=".\..\..\lib\icuin36d.pdb" BaseAddress="0x4a900000" ImportLibrary="..\..\lib\icuind.lib"/> <Tool @@ -332,6 +332,9 @@ <File RelativePath=".\ucol_imp.h"> </File> + <File + RelativePath=".\ucol_res.cpp"> + </File> <File RelativePath=".\ucol_sit.cpp"> </File> @@ -432,12 +435,6 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> </FileConfiguration> </File> - <File - RelativePath=".\chnsecal.cpp"> - </File> - <File - RelativePath=".\chnsecal.h"> - </File> <File RelativePath=".\choicfmt.cpp"> </File> @@ -645,6 +642,9 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> </FileConfiguration> </File> + <File + RelativePath=".\fmtable_cnv.cpp"> + </File> <File RelativePath=".\format.cpp"> </File> @@ -1087,6 +1087,42 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> </FileConfiguration> </File> + <File + RelativePath=".\windtfmt.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + </File> + <File + RelativePath=".\windtfmt.h"> + </File> + <File + RelativePath=".\winnmfmt.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + </File> + <File + RelativePath=".\winnmfmt.h"> + </File> </Filter> <Filter Name="misc" @@ -1144,9 +1180,6 @@ <File RelativePath=".\rematch.cpp"> </File> - <File - RelativePath=".\remtrans.cpp"> - </File> <File RelativePath=".\repattrn.cpp"> </File> @@ -1172,6 +1205,9 @@ Outputs="..\..\include\unicode\$(InputFileName)"/> </FileConfiguration> </File> + <File + RelativePath=".\uregexc.cpp"> + </File> </Filter> <Filter Name="transforms" @@ -1260,6 +1296,9 @@ <File RelativePath=".\rbt_set.h"> </File> + <File + RelativePath=".\remtrans.cpp"> + </File> <File RelativePath=".\remtrans.h"> </File> @@ -1376,6 +1415,86 @@ <Tool Name="VCCustomBuildTool" CommandLine="copy "$(InputPath)" ..\..\include\unicode +" + Outputs="..\..\include\unicode\$(InputFileName)"/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="charset detect" + Filter=""> + <File + RelativePath=".\csdetect.cpp"> + </File> + <File + RelativePath=".\csdetect.h"> + </File> + <File + RelativePath=".\csmatch.cpp"> + </File> + <File + RelativePath=".\csmatch.h"> + </File> + <File + RelativePath=".\csr2022.cpp"> + </File> + <File + RelativePath=".\csr2022.h"> + </File> + <File + RelativePath=".\csrecog.cpp"> + </File> + <File + RelativePath=".\csrecog.h"> + </File> + <File + RelativePath=".\csrmbcs.cpp"> + </File> + <File + RelativePath=".\csrmbcs.h"> + </File> + <File + RelativePath=".\csrsbcs.cpp"> + </File> + <File + RelativePath=".\csrsbcs.h"> + </File> + <File + RelativePath=".\csrucode.cpp"> + </File> + <File + RelativePath=".\csrucode.h"> + </File> + <File + RelativePath=".\csrutf8.cpp"> + </File> + <File + RelativePath=".\csrutf8.h"> + </File> + <File + RelativePath=".\inputext.cpp"> + </File> + <File + RelativePath=".\inputext.h"> + </File> + <File + RelativePath=".\ucsdet.cpp"> + </File> + <File + RelativePath=".\unicode\ucsdet.h"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCustomBuildTool" + CommandLine="copy "$(InputPath)" ..\..\include\unicode +" + Outputs="..\..\include\unicode\$(InputFileName)"/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCustomBuildTool" + CommandLine="copy "$(InputPath)" ..\..\include\unicode " Outputs="..\..\include\unicode\$(InputFileName)"/> </FileConfiguration> diff --git a/icuSources/i18n/inputext.cpp b/icuSources/i18n/inputext.cpp new file mode 100644 index 00000000..a36a931a --- /dev/null +++ b/icuSources/i18n/inputext.cpp @@ -0,0 +1,162 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION + +#include "inputext.h" + +#include "cmemory.h" +#include "cstring.h" + +#include <string.h> + +U_NAMESPACE_BEGIN + +#define BUFFER_SIZE 8192 + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +InputText::InputText() + : fInputBytes(NEW_ARRAY(uint8_t, BUFFER_SIZE)), // The text to be checked. Markup will have been + // removed if appropriate. + fByteStats(NEW_ARRAY(int16_t, 256)), // byte frequency statistics for the input text. + // Value is percent, not absolute. + fDeclaredEncoding(0), + fRawInput(0), + fRawLength(0) +{ + +} + +InputText::~InputText() +{ + DELETE_ARRAY(fDeclaredEncoding); + DELETE_ARRAY(fByteStats); + DELETE_ARRAY(fInputBytes); +} + +void InputText::setText(const char *in, int32_t len) +{ + fInputLen = 0; + fC1Bytes = FALSE; + fRawInput = (const uint8_t *) in; + fRawLength = len == -1? uprv_strlen(in) : len; +} + +void InputText::setDeclaredEncoding(const char* encoding, int32_t len) +{ + if(encoding) { + if (len == -1) { + len = uprv_strlen(encoding); + } + + len += 1; // to make place for the \0 at the end. + uprv_free(fDeclaredEncoding); + fDeclaredEncoding = NEW_ARRAY(char, len); + uprv_strncpy(fDeclaredEncoding, encoding, len); + } +} + +UBool InputText::isSet() const +{ + return fRawInput != NULL; +} + +/** +* MungeInput - after getting a set of raw input data to be analyzed, preprocess +* it by removing what appears to be html markup. +* +* @internal +*/ +void InputText::MungeInput(UBool fStripTags) { + int srci = 0; + int dsti = 0; + uint8_t b; + bool inMarkup = FALSE; + int32_t openTags = 0; + int32_t badTags = 0; + + // + // html / xml markup stripping. + // quick and dirty, not 100% accurate, but hopefully good enough, statistically. + // discard everything within < brackets > + // Count how many total '<' and illegal (nested) '<' occur, so we can make some + // guess as to whether the input was actually marked up at all. + // TODO: Think about how this interacts with EBCDIC charsets that are detected. + if (fStripTags) { + for (srci = 0; srci < fRawLength && dsti < BUFFER_SIZE; srci += 1) { + b = fRawInput[srci]; + + if (b == (uint8_t)0x3C) { /* Check for the ASCII '<' */ + if (inMarkup) { + badTags += 1; + } + + inMarkup = TRUE; + openTags += 1; + } + + if (! inMarkup) { + fInputBytes[dsti++] = b; + } + + if (b == (uint8_t)0x3E) { /* Check for the ASCII '>' */ + inMarkup = FALSE; + } + } + + fInputLen = dsti; + } + + // + // If it looks like this input wasn't marked up, or if it looks like it's + // essentially nothing but markup abandon the markup stripping. + // Detection will have to work on the unstripped input. + // + if (openTags<5 || openTags/5 < badTags || + (fInputLen < 100 && fRawLength>600)) + { + int32_t limit = fRawLength; + + if (limit > BUFFER_SIZE) { + limit = BUFFER_SIZE; + } + + for (srci=0; srci<limit; srci++) { + fInputBytes[srci] = fRawInput[srci]; + } + + fInputLen = srci; + } + + // + // Tally up the byte occurence statistics. + // These are available for use by the various detectors. + // + + uprv_memset(fByteStats, 0, (sizeof fByteStats[0]) * 256); + + for (srci = 0; srci < fInputLen; srci += 1) { + fByteStats[fInputBytes[srci]] += 1; + } + + for (int32_t i = 0x80; i <= 0x9F; i += 1) { + if (fByteStats[i] != 0) { + fC1Bytes = TRUE; + break; + } + } +} + +U_NAMESPACE_END +#endif + diff --git a/icuSources/i18n/inputext.h b/icuSources/i18n/inputext.h new file mode 100644 index 00000000..1528f48e --- /dev/null +++ b/icuSources/i18n/inputext.h @@ -0,0 +1,59 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __INPUTEXT_H +#define __INPUTEXT_H + +/** + * \file + * \internal + * + * This is an internal header for the Character Set Detection code. The + * name is probably too generic... + */ + + +#include "unicode/uobject.h" + +#if !UCONFIG_NO_CONVERSION + +U_NAMESPACE_BEGIN + +class InputText : public UMemory +{ +public: + InputText(); + ~InputText(); + + void setText(const char *in, int32_t len); + void setDeclaredEncoding(const char *encoding, int32_t len); + UBool isSet() const; + void MungeInput(UBool fStripTags); + + // The text to be checked. Markup will have been + // removed if appropriate. + uint8_t *fInputBytes; + int32_t fInputLen; // Length of the byte data in fInputBytes. + // byte frequency statistics for the input text. + // Value is percent, not absolute. + // Value is rounded up, so zero really means zero occurences. + int16_t *fByteStats; + UBool fC1Bytes; // True if any bytes in the range 0x80 - 0x9F are in the input;false by default + char *fDeclaredEncoding; + + const uint8_t *fRawInput; // Original, untouched input bytes. + // If user gave us a byte array, this is it. + // If user gave us a stream, it's read to a + // buffer here. + int32_t fRawLength; // Length of data in fRawInput array. + +}; + +U_NAMESPACE_END + +#endif +#endif /* __INPUTEXT_H */ diff --git a/icuSources/i18n/japancal.cpp b/icuSources/i18n/japancal.cpp index a8e51db4..ba7483b8 100644 --- a/icuSources/i18n/japancal.cpp +++ b/icuSources/i18n/japancal.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2003-2004, International Business Machines Corporation and * +* Copyright (C) 2003-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -363,7 +363,7 @@ int32_t JapaneseCalendar::handleGetExtendedYear() year = internalGet(UCAL_EXTENDED_YEAR, 1); } else { // Subtract one because year starts at 1 - year = internalGet(UCAL_YEAR) + kEraInfo[internalGet(UCAL_ERA)].year - 1; + year = internalGet(UCAL_YEAR) + kEraInfo[internalGetEra()].year - 1; } return year; @@ -383,9 +383,9 @@ void JapaneseCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status // Note that if the year is == the current era year, then we use // the binary search to handle the month/dom comparison. #ifdef U_DEBUG_JCAL - fprintf(stderr, "== %d:%d \n", era, year); + fprintf(stderr, "== %d \n", year); #endif - + if (year > kEraInfo[kCurrentEra].year) { low = kCurrentEra; #ifdef U_DEBUG_JCAL diff --git a/icuSources/i18n/msgfmt.cpp b/icuSources/i18n/msgfmt.cpp index 5e639b28..4a6adec0 100644 --- a/icuSources/i18n/msgfmt.cpp +++ b/icuSources/i18n/msgfmt.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -31,6 +31,7 @@ #include "unicode/ustring.h" #include "unicode/ucnv_err.h" #include "unicode/uchar.h" +#include "unicode/umsg.h" #include "unicode/rbnf.h" #include "ustrfmt.h" #include "cmemory.h" @@ -1169,6 +1170,27 @@ MessageFormat::parseObject( const UnicodeString& source, result.adoptArray(tmpResult, cnt); } +UnicodeString +MessageFormat::autoQuoteApostrophe(const UnicodeString& pattern, UErrorCode& status) { + UnicodeString result; + if (U_SUCCESS(status)) { + int32_t plen = pattern.length(); + const UChar* pat = pattern.getBuffer(); + int32_t blen = plen * 2 + 1; // space for null termination, convenience + UChar* buf = result.getBuffer(blen); + if (buf == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } else { + int32_t len = umsg_autoQuoteApostrophe(pat, plen, buf, blen, &status); + result.releaseBuffer(U_SUCCESS(status) ? len : 0); + } + } + if (U_FAILURE(status)) { + result.setToBogus(); + } + return result; +} + // ------------------------------------- static Format* makeRBNF(URBNFRuleSetTag tag, const Locale& locale, const UnicodeString& defaultRuleSet, UErrorCode& ec) { @@ -1331,7 +1353,7 @@ int32_t MessageFormat::findKeyword(const UnicodeString& s, UnicodeString buffer = s; // Trims the space characters and turns all characters // in s to lower case. - buffer.trim().toLower(); + buffer.trim().toLower(""); for (int32_t i = 0; list[i]; ++i) { if (!buffer.compare(list[i], u_strlen(list[i]))) { return i; @@ -1388,7 +1410,7 @@ MessageFormat::copyAndFixQuotes(const UnicodeString& source, NumberFormat* MessageFormat::createIntegerFormat(const Locale& locale, UErrorCode& status) const { NumberFormat *temp = NumberFormat::createInstance(locale, status); - if (temp->getDynamicClassID() == DecimalFormat::getStaticClassID()) { + if (temp != NULL && temp->getDynamicClassID() == DecimalFormat::getStaticClassID()) { DecimalFormat *temp2 = (DecimalFormat*) temp; temp2->setMaximumFractionDigits(0); temp2->setDecimalSeparatorAlwaysShown(FALSE); diff --git a/icuSources/i18n/name2uni.cpp b/icuSources/i18n/name2uni.cpp index 255a4bc6..d2b898d8 100644 --- a/icuSources/i18n/name2uni.cpp +++ b/icuSources/i18n/name2uni.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -18,6 +18,7 @@ #include "name2uni.h" #include "cmemory.h" #include "uprops.h" +#include "uinvchar.h" #include "util.h" U_NAMESPACE_BEGIN @@ -57,12 +58,14 @@ U_CDECL_END NameUnicodeTransliterator::NameUnicodeTransliterator(UnicodeFilter* adoptedFilter) : Transliterator(UNICODE_STRING("Name-Any", 8), adoptedFilter) { + UnicodeSet *legalPtr = &legal; // Get the legal character set USetAdder sa = { - (USet *)&legal, // USet* == UnicodeSet* + (USet *)legalPtr, // USet* == UnicodeSet* _set_add, _set_addRange, - _set_addString + _set_addString, + NULL // don't need remove() }; uprv_getCharNameCharacters(&sa); } @@ -172,7 +175,6 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos } if (c == CLOSE_DELIM) { - int32_t len = name.length(); // Delete trailing space, if any @@ -181,27 +183,29 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos --len; } - name.extract(0, len, cbuf, ""); + if (uprv_isInvariantUString(name.getBuffer(), len)) { + name.extract(0, len, cbuf, maxLen, US_INV); - UErrorCode status = U_ZERO_ERROR; - c = u_charFromName(U_EXTENDED_CHAR_NAME, cbuf, &status); - if (U_SUCCESS(status)) { - // Lookup succeeded + UErrorCode status = U_ZERO_ERROR; + c = u_charFromName(U_EXTENDED_CHAR_NAME, cbuf, &status); + if (U_SUCCESS(status)) { + // Lookup succeeded - // assert(UTF_CHAR_LENGTH(CLOSE_DELIM) == 1); - cursor++; // advance over CLOSE_DELIM + // assert(UTF_CHAR_LENGTH(CLOSE_DELIM) == 1); + cursor++; // advance over CLOSE_DELIM - str.truncate(0); - str.append(c); - text.handleReplaceBetween(openPos, cursor, str); + str.truncate(0); + str.append(c); + text.handleReplaceBetween(openPos, cursor, str); - // Adjust indices for the change in the length of - // the string. Do not assume that str.length() == - // 1, in case of surrogates. - int32_t delta = cursor - openPos - str.length(); - cursor -= delta; - limit -= delta; - // assert(cursor == openPos + str.length()); + // Adjust indices for the change in the length of + // the string. Do not assume that str.length() == + // 1, in case of surrogates. + int32_t delta = cursor - openPos - str.length(); + cursor -= delta; + limit -= delta; + // assert(cursor == openPos + str.length()); + } } // If the lookup failed, we leave things as-is and // still switch to mode 0 and continue. diff --git a/icuSources/i18n/name2uni.h b/icuSources/i18n/name2uni.h index 96f337bf..74f6cd2a 100644 --- a/icuSources/i18n/name2uni.h +++ b/icuSources/i18n/name2uni.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -56,15 +56,11 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); diff --git a/icuSources/i18n/nfrlist.h b/icuSources/i18n/nfrlist.h index e60ee579..1a334085 100644 --- a/icuSources/i18n/nfrlist.h +++ b/icuSources/i18n/nfrlist.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2001, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: nfrlist.h @@ -36,7 +36,7 @@ protected: uint32_t fCount; uint32_t fCapacity; public: - NFRuleList(int capacity = 10) + NFRuleList(uint32_t capacity = 10) : fStuff(capacity ? (NFRule**)uprv_malloc(capacity * sizeof(NFRule*)) : NULL) , fCount(0) , fCapacity(capacity) {}; diff --git a/icuSources/i18n/nfrs.cpp b/icuSources/i18n/nfrs.cpp index a066614f..ccf42b89 100644 --- a/icuSources/i18n/nfrs.cpp +++ b/icuSources/i18n/nfrs.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: nfrs.cpp @@ -135,7 +135,7 @@ NFRuleSet::NFRuleSet(UnicodeString* descriptions, int32_t index, UErrorCode& sta if (description.length() == 0) { // throw new IllegalArgumentException("Empty rule set description"); status = U_PARSE_ERROR; - return; + return; } // if the description begins with a rule set name (the rule set @@ -701,14 +701,14 @@ NFRuleSet::appendRules(UnicodeString& result) const // followed by the regular rules... for (uint32_t i = 0; i < rules.size(); i++) { result.append(gFourSpaces); - rules[i]->appendRuleText(result); + rules[i]->_appendRuleText(result); result.append(gLineFeed); } // followed by the special rules (if they exist) if (negativeNumberRule) { result.append(gFourSpaces); - negativeNumberRule->appendRuleText(result); + negativeNumberRule->_appendRuleText(result); result.append(gLineFeed); } @@ -716,7 +716,7 @@ NFRuleSet::appendRules(UnicodeString& result) const for (uint32_t i = 0; i < 3; ++i) { if (fractionRules[i]) { result.append(gFourSpaces); - fractionRules[i]->appendRuleText(result); + fractionRules[i]->_appendRuleText(result); result.append(gLineFeed); } } @@ -770,6 +770,7 @@ static const uint8_t asciiDigits[] = { static const UChar kUMinus = (UChar)0x002d; +#ifdef RBNF_DEBUG static const char kMinus = '-'; static const uint8_t digitInfo[] = { @@ -791,7 +792,6 @@ static const uint8_t digitInfo[] = { 0xa1u, 0xa2u, 0xa3u, 0, 0, 0, 0, 0, }; -#ifdef RBNF_DEBUG int64_t util64_atoi(const char* str, uint32_t radix) { if (radix > 36) { @@ -817,7 +817,6 @@ int64_t util64_atoi(const char* str, uint32_t radix) } return result; } -#endif int64_t util64_utoi(const UChar* str, uint32_t radix) { @@ -846,7 +845,6 @@ int64_t util64_utoi(const UChar* str, uint32_t radix) return result; } -#ifdef RBNF_DEBUG uint32_t util64_toa(int64_t w, char* buf, uint32_t len, uint32_t radix, UBool raw) { if (radix > 36) { diff --git a/icuSources/i18n/nfrs.h b/icuSources/i18n/nfrs.h index d28fde1d..fcfe06be 100644 --- a/icuSources/i18n/nfrs.h +++ b/icuSources/i18n/nfrs.h @@ -79,9 +79,9 @@ int64_t util64_pow(int32_t radix, uint32_t exponent); // convert n to digit string in buffer, return length of string uint32_t util64_tou(int64_t n, UChar* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = FALSE); -int64_t util64_utoi(const UChar* str, uint32_t radix = 10); #ifdef RBNF_DEBUG +int64_t util64_utoi(const UChar* str, uint32_t radix = 10); uint32_t util64_toa(int64_t n, char* buffer, uint32_t buflen, uint32_t radix = 10, UBool raw = FALSE); int64_t util64_atoi(const char* str, uint32_t radix); #endif diff --git a/icuSources/i18n/nfrule.cpp b/icuSources/i18n/nfrule.cpp index e5c863de..d6cf1850 100644 --- a/icuSources/i18n/nfrule.cpp +++ b/icuSources/i18n/nfrule.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: nfrule.cpp @@ -29,9 +29,6 @@ U_NAMESPACE_BEGIN -extern const UChar* CSleftBracket; -extern const UChar* CSrightBracket; - NFRule::NFRule(const RuleBasedNumberFormat* _rbnf) : baseValue((int32_t)0) , radix(0) @@ -57,10 +54,11 @@ static const UChar gNine = 0x0039; static const UChar gSpace = 0x0020; static const UChar gSlash = 0x002f; static const UChar gGreaterThan = 0x003e; +static const UChar gLessThan = 0x003c; static const UChar gComma = 0x002c; static const UChar gDot = 0x002e; static const UChar gTick = 0x0027; -static const UChar gMinus = 0x002d; +//static const UChar gMinus = 0x002d; static const UChar gSemicolon = 0x003b; static const UChar gMinusX[] = {0x2D, 0x78, 0}; /* "-x" */ @@ -423,8 +421,17 @@ NFRule::extractSubstitution(const NFRuleSet* ruleSet, // otherwise the substitution token ends with the same character // it began with } else { - subEnd = ruleText.indexOf(ruleText.charAt(subStart), subStart + 1); - } + UChar c = ruleText.charAt(subStart); + subEnd = ruleText.indexOf(c, subStart + 1); + // special case for '<%foo<<' + if (c == gLessThan && subEnd != -1 && subEnd < ruleText.length() - 1 && ruleText.charAt(subEnd+1) == c) { + // ordinals use "=#,##0==%abbrev=" as their rule. Notice that the '==' in the middle + // occurs because of the juxtaposition of two different rules. The check for '<' is a hack + // to get around this. Having the duplicate at the front would cause problems with + // rules like "<<%" to format, say, percents... + ++subEnd; + } + } // if we don't find the end of the token (i.e., if we're on a single, // unmatched token character), create a null substitution positioned @@ -572,7 +579,7 @@ static void util_append64(UnicodeString& result, int64_t n) } void -NFRule::appendRuleText(UnicodeString& result) const +NFRule::_appendRuleText(UnicodeString& result) const { switch (getType()) { case kNegativeNumberRule: result.append(gMinusX); break; @@ -766,7 +773,7 @@ NFRule::doParse(const UnicodeString& text, fprintf(stderr, "doParse %x ", this); { UnicodeString rt; - appendRuleText(rt); + _appendRuleText(rt); dumpUS(stderr, rt); } diff --git a/icuSources/i18n/nfrule.h b/icuSources/i18n/nfrule.h index 757a524a..73e4fe16 100644 --- a/icuSources/i18n/nfrule.h +++ b/icuSources/i18n/nfrule.h @@ -1,6 +1,7 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2005, International Business Machines +* Corporation and others. All Rights Reserved. ******************************************************************************* */ @@ -71,7 +72,7 @@ public: UBool shouldRollBack(double number) const; - void appendRuleText(UnicodeString& result) const; + void _appendRuleText(UnicodeString& result) const; private: void parseRuleDescriptor(UnicodeString& descriptor, UErrorCode& status); diff --git a/icuSources/i18n/nfsubs.cpp b/icuSources/i18n/nfsubs.cpp index 25461981..1c1185fd 100644 --- a/icuSources/i18n/nfsubs.cpp +++ b/icuSources/i18n/nfsubs.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: nfsubs.cpp @@ -276,7 +276,7 @@ NFSubstitution::toString(UnicodeString& text) const UnicodeString temp; if (ruleSet != NULL) { ruleSet->getName(temp); - } else { + } else if (numberFormat != NULL) { numberFormat->toPattern(temp); } text.append(temp); @@ -305,7 +305,7 @@ NFSubstitution::doSubstitution(int64_t number, UnicodeString& toInsertInto, int3 // on the type of substitution this is, then just call its // rule set's format() method to format the result ruleSet->format(transformNumber(number), toInsertInto, _pos + this->pos); - } else { + } else if (numberFormat != NULL) { // or perform the transformation on the number (preserving // the result's fractional part if the formatter it set // to show it), then use that formatter's format() method @@ -348,7 +348,7 @@ NFSubstitution::doSubstitution(double number, UnicodeString& toInsertInto, int32 } else { if (ruleSet != NULL) { ruleSet->format(numberToFormat, toInsertInto, _pos + this->pos); - } else { + } else if (numberFormat != NULL) { UnicodeString temp; numberFormat->format(numberToFormat, temp); toInsertInto.insert(_pos + this->pos, temp); @@ -431,7 +431,7 @@ NFSubstitution::doParse(const UnicodeString& text, } // ...or use our DecimalFormat to parse the text - } else { + } else if (numberFormat != NULL) { numberFormat->parse(text, result, parsePosition); } @@ -681,7 +681,8 @@ ModulusSubstitution::doParse(const UnicodeString& text, ruleToUse->doParse(text, parsePosition, FALSE, upperBound, result); if (parsePosition.getIndex() != 0) { - double tempResult = result.getDouble(); + UErrorCode status = U_ZERO_ERROR; + double tempResult = result.getDouble(status); tempResult = composeRuleValue(tempResult, baseValue); result.setDouble(tempResult); } @@ -881,7 +882,7 @@ FractionalPartSubstitution::doParse(const UnicodeString& text, } if (fmt) { fmt->parse(workText, temp, workPos); - digit = temp.getLong(); + digit = temp.getLong(status); } } @@ -898,8 +899,8 @@ FractionalPartSubstitution::doParse(const UnicodeString& text, } } delete fmt; - result = dl.fCount == 0 ? 0 : dl.getDouble(); + result = dl.fCount == 0 ? 0 : dl.getDouble(); result = composeRuleValue(result, baseValue); resVal.setDouble(result); return TRUE; @@ -936,6 +937,118 @@ AbsoluteValueSubstitution::getDynamicClassID() const { // NumeratorSubstitution //=================================================================== +void +NumeratorSubstitution::doSubstitution(double number, UnicodeString& toInsertInto, int32_t apos) const { + // perform a transformation on the number being formatted that + // is dependent on the type of substitution this is + + double numberToFormat = transformNumber(number); + int64_t longNF = util64_fromDouble(numberToFormat); + + const NFRuleSet* aruleSet = getRuleSet(); + if (withZeros && aruleSet != NULL) { + // if there are leading zeros in the decimal expansion then emit them + int64_t nf =longNF; + int32_t len = toInsertInto.length(); + while ((nf *= 10) < denominator) { + toInsertInto.insert(apos + getPos(), gSpace); + aruleSet->format((int64_t)0, toInsertInto, apos + getPos()); + } + apos += toInsertInto.length() - len; + } + + // if the result is an integer, from here on out we work in integer + // space (saving time and memory and preserving accuracy) + if (numberToFormat == longNF && aruleSet != NULL) { + aruleSet->format(longNF, toInsertInto, apos + getPos()); + + // if the result isn't an integer, then call either our rule set's + // format() method or our DecimalFormat's format() method to + // format the result + } else { + if (aruleSet != NULL) { + aruleSet->format(numberToFormat, toInsertInto, apos + getPos()); + } else { + UErrorCode status = U_ZERO_ERROR; + UnicodeString temp; + getNumberFormat()->format(numberToFormat, temp, status); + toInsertInto.insert(apos + getPos(), temp); + } + } +} + +UBool +NumeratorSubstitution::doParse(const UnicodeString& text, + ParsePosition& parsePosition, + double baseValue, + double upperBound, + UBool /*lenientParse*/, + Formattable& result) const +{ + // we don't have to do anything special to do the parsing here, + // but we have to turn lenient parsing off-- if we leave it on, + // it SERIOUSLY messes up the algorithm + + // if withZeros is true, we need to count the zeros + // and use that to adjust the parse result + UErrorCode status = U_ZERO_ERROR; + int32_t zeroCount = 0; + UnicodeString workText(text); + + if (withZeros) { + ParsePosition workPos(1); + Formattable temp; + + while (workText.length() > 0 && workPos.getIndex() != 0) { + workPos.setIndex(0); + getRuleSet()->parse(workText, workPos, 1, temp); // parse zero or nothing at all + if (workPos.getIndex() == 0) { + // we failed, either there were no more zeros, or the number was formatted with digits + // either way, we're done + break; + } + + ++zeroCount; + parsePosition.setIndex(parsePosition.getIndex() + workPos.getIndex()); + workText.remove(0, workPos.getIndex()); + while (workText.length() > 0 && workText.charAt(0) == gSpace) { + workText.remove(0, 1); + parsePosition.setIndex(parsePosition.getIndex() + 1); + } + } + + workText = text; + workText.remove(0, (int32_t)parsePosition.getIndex()); + parsePosition.setIndex(0); + } + + // we've parsed off the zeros, now let's parse the rest from our current position + NFSubstitution::doParse(workText, parsePosition, withZeros ? 1 : baseValue, upperBound, FALSE, result); + + if (withZeros) { + // any base value will do in this case. is there a way to + // force this to not bother trying all the base values? + + // compute the 'effective' base and prescale the value down + int64_t n = result.getLong(status); // force conversion! + int64_t d = 1; + int32_t pow = 0; + while (d <= n) { + d *= 10; + ++pow; + } + // now add the zeros + while (zeroCount > 0) { + d *= 10; + --zeroCount; + } + // d is now our true denominator + result.setDouble((double)n/(double)d); + } + + return TRUE; +} + UBool NumeratorSubstitution::operator==(const NFSubstitution& rhs) const { @@ -950,6 +1063,8 @@ NumeratorSubstitution::getDynamicClassID() const { return getStaticClassID(); } +const UChar NumeratorSubstitution::LTLT[] = { 0x003c, 0x003c }; + //=================================================================== // NullSubstitution //=================================================================== diff --git a/icuSources/i18n/nfsubs.h b/icuSources/i18n/nfsubs.h index ec03fee9..14c60e78 100644 --- a/icuSources/i18n/nfsubs.h +++ b/icuSources/i18n/nfsubs.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: nfsubs.h @@ -470,16 +470,25 @@ public: class NumeratorSubstitution : public NFSubstitution { double denominator; int64_t ldenominator; + UBool withZeros; public: + static inline UnicodeString fixdesc(const UnicodeString& desc) { + if (desc.endsWith(LTLT, 2)) { + UnicodeString result(desc, 0, desc.length()-1); + return result; + } + return desc; + } NumeratorSubstitution(int32_t _pos, double _denominator, const NFRuleSet* _ruleSet, const RuleBasedNumberFormat* formatter, const UnicodeString& description, UErrorCode& status) - : NFSubstitution(_pos, _ruleSet, formatter, description, status), denominator(_denominator) + : NFSubstitution(_pos, _ruleSet, formatter, fixdesc(description), status), denominator(_denominator) { ldenominator = util64_fromDouble(denominator); + withZeros = description.endsWith(LTLT, 2); } virtual UBool operator==(const NFSubstitution& rhs) const; @@ -487,24 +496,22 @@ public: virtual int64_t transformNumber(int64_t number) const { return number * ldenominator; } virtual double transformNumber(double number) const { return uprv_round(number * denominator); } + virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/) const {} + virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos) const; virtual UBool doParse(const UnicodeString& text, ParsePosition& parsePosition, double baseValue, double upperBound, UBool /*lenientParse*/, - Formattable& result) const - { - // we don't have to do anything special to do the parsing here, - // but we have to turn lenient parsing off-- if we leave it on, - // it SERIOUSLY messes up the algorithm - return NFSubstitution::doParse(text, parsePosition, baseValue, upperBound, FALSE, result); - } + Formattable& result) const; + virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue / oldRuleValue; } virtual double calcUpperBound(double /*oldUpperBound*/) const { return denominator; } virtual UChar tokenChar() const { return (UChar)0x003c; } // '<' private: static const char fgClassID; - + static const UChar LTLT[2]; + public: static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } virtual UClassID getDynamicClassID(void) const; diff --git a/icuSources/i18n/nortrans.cpp b/icuSources/i18n/nortrans.cpp index 36c62c8e..4b2b702b 100644 --- a/icuSources/i18n/nortrans.cpp +++ b/icuSources/i18n/nortrans.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2003, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -166,7 +166,7 @@ void NormalizationTransliterator::handleTransliterate(Replaceable& text, UTransP fMode, 0, TRUE, &neededToNormalize, &errorCode); - output.releaseBuffer(length); + output.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); if(errorCode == U_BUFFER_OVERFLOW_ERROR) { // use a larger output string buffer and do it again from the start @@ -177,7 +177,7 @@ void NormalizationTransliterator::handleTransliterate(Replaceable& text, UTransP fMode, 0, TRUE, &neededToNormalize, &errorCode); - output.releaseBuffer(length); + output.releaseBuffer(U_SUCCESS(errorCode) ? length : 0); } if(U_FAILURE(errorCode)) { diff --git a/icuSources/i18n/nortrans.h b/icuSources/i18n/nortrans.h index 786ffc73..4dc9f271 100644 --- a/icuSources/i18n/nortrans.h +++ b/icuSources/i18n/nortrans.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -60,15 +60,11 @@ class U_I18N_API NormalizationTransliterator : public Transliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); @@ -83,7 +79,7 @@ class U_I18N_API NormalizationTransliterator : public Transliterator { * @param incremental if true, assume more text may be coming after * pos.contextLimit. Otherwise, assume the text is complete. */ - void handleTransliterate(Replaceable& text, UTransPosition& offset, + virtual void handleTransliterate(Replaceable& text, UTransPosition& offset, UBool isIncremental) const; public: diff --git a/icuSources/i18n/nultrans.cpp b/icuSources/i18n/nultrans.cpp index 1e1010e6..820c43d0 100644 --- a/icuSources/i18n/nultrans.cpp +++ b/icuSources/i18n/nultrans.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2000-2003, International Business Machines +* Copyright (c) 2000-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -18,13 +18,7 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(NullTransliterator) -// "Any-Null" -const UChar NullTransliterator::ID[] = {65,110,121,45,0x4E, 0x75, 0x6C, 0x6C, 0x00}; - -// "Null" -const UChar NullTransliterator::SHORT_ID[] = {0x4E, 0x75, 0x6C, 0x6C, 0x00}; - -NullTransliterator::NullTransliterator() : Transliterator(ID, 0) {} +NullTransliterator::NullTransliterator() : Transliterator(UNICODE_STRING_SIMPLE("Any-Null"), 0) {} NullTransliterator::~NullTransliterator() {} diff --git a/icuSources/i18n/nultrans.h b/icuSources/i18n/nultrans.h index 3af6939d..30d81594 100644 --- a/icuSources/i18n/nultrans.h +++ b/icuSources/i18n/nultrans.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2000-2004, International Business Machines +* Copyright (c) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -27,18 +27,6 @@ class U_I18N_API NullTransliterator : public Transliterator { public: - /** - * ID for this transliterator. - * @internal Use transliterator factory methods instead since this class will be removed in that release. - */ - static const UChar ID[]; // public for Transliterator - - /** - * ID for this transliterator. - * @internal Use transliterator factory methods instead since this class will be removed in that release. - */ - static const UChar SHORT_ID[]; // public for Transliterator - /** * Constructs a transliterator. * @internal Use transliterator factory methods instead since this class will be removed in that release. @@ -66,15 +54,11 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); diff --git a/icuSources/i18n/numfmt.cpp b/icuSources/i18n/numfmt.cpp index 59a548be..d0f4109b 100644 --- a/icuSources/i18n/numfmt.cpp +++ b/icuSources/i18n/numfmt.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -28,15 +28,16 @@ #include "unicode/numfmt.h" #include "unicode/locid.h" -#include "unicode/ures.h" #include "unicode/dcfmtsym.h" #include "unicode/decimfmt.h" #include "unicode/ustring.h" #include "unicode/ucurr.h" #include "unicode/curramt.h" +#include "winnmfmt.h" +#include "uresimp.h" #include "uhash.h" #include "cmemory.h" -#include "iculserv.h" +#include "servloc.h" #include "ucln_in.h" #include "cstring.h" #include "putilimp.h" @@ -71,21 +72,13 @@ static const UChar gLastResortPercentPat[] = { static const UChar gLastResortScientificPat[] = { 0x23, 0x45, 0x30, 0 /* "#E0" */ }; -// ***************************************************************************** -// class NumberFormat -// ***************************************************************************** - -U_NAMESPACE_BEGIN -UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(NumberFormat) // If the maximum base 10 exponent were 4, then the largest number would // be 99,999 which has 5 digits. -const int32_t NumberFormat::fgMaxIntegerDigits = DBL_MAX_10_EXP + 1; // Should be ~40 ? --srl -const int32_t NumberFormat::fgMinIntegerDigits = 127; +static const int32_t gMaxIntegerDigits = DBL_MAX_10_EXP + 1; // Should be ~40 ? --srl +static const int32_t gMinIntegerDigits = 127; -const int32_t NumberFormat::fgNumberPatternsCount = 3; - -const UChar * const NumberFormat::fgLastResortNumberPatterns[] = +static const UChar * const gLastResortNumberPatterns[] = { gLastResortDecimalPat, gLastResortCurrencyPat, @@ -93,14 +86,22 @@ const UChar * const NumberFormat::fgLastResortNumberPatterns[] = gLastResortScientificPat }; +// ***************************************************************************** +// class NumberFormat +// ***************************************************************************** + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(NumberFormat) + #if !UCONFIG_NO_SERVICE // ------------------------------------- // SimpleNumberFormatFactory implementation NumberFormatFactory::~NumberFormatFactory() {} SimpleNumberFormatFactory::SimpleNumberFormatFactory(const Locale& locale, UBool visible) : _visible(visible) - , _id(locale.getName()) { + LocaleUtility::initNameFromLocale(locale, _id); } SimpleNumberFormatFactory::~SimpleNumberFormatFactory() {} @@ -125,7 +126,7 @@ SimpleNumberFormatFactory::getSupportedIDs(int32_t &count, UErrorCode& status) c // default constructor NumberFormat::NumberFormat() : fGroupingUsed(TRUE), - fMaxIntegerDigits(fgMaxIntegerDigits), + fMaxIntegerDigits(gMaxIntegerDigits), fMinIntegerDigits(1), fMaxFractionDigits(3), // invariant, >= minFractionDigits fMinFractionDigits(0), @@ -555,7 +556,7 @@ protected: class ICUNumberFormatService : public ICULocaleService { public: ICUNumberFormatService() - : ICULocaleService("Number Format") + : ICULocaleService(UNICODE_STRING_SIMPLE("Number Format")) { UErrorCode status = U_ZERO_ERROR; registerFactory(new ICUNumberFormatFactory(), status); @@ -706,7 +707,7 @@ int32_t NumberFormat::getMaximumIntegerDigits() const void NumberFormat::setMaximumIntegerDigits(int32_t newValue) { - fMaxIntegerDigits = uprv_max(0, uprv_min(newValue, fgMaxIntegerDigits)); + fMaxIntegerDigits = uprv_max(0, uprv_min(newValue, gMaxIntegerDigits)); if(fMinIntegerDigits > fMaxIntegerDigits) fMinIntegerDigits = fMaxIntegerDigits; } @@ -728,7 +729,7 @@ NumberFormat::getMinimumIntegerDigits() const void NumberFormat::setMinimumIntegerDigits(int32_t newValue) { - fMinIntegerDigits = uprv_max(0, uprv_min(newValue, fgMinIntegerDigits)); + fMinIntegerDigits = uprv_max(0, uprv_min(newValue, gMinIntegerDigits)); if(fMinIntegerDigits > fMaxIntegerDigits) fMaxIntegerDigits = fMinIntegerDigits; } @@ -750,7 +751,7 @@ NumberFormat::getMaximumFractionDigits() const void NumberFormat::setMaximumFractionDigits(int32_t newValue) { - fMaxFractionDigits = uprv_max(0, uprv_min(newValue, fgMaxIntegerDigits)); + fMaxFractionDigits = uprv_max(0, uprv_min(newValue, gMaxIntegerDigits)); if(fMaxFractionDigits < fMinFractionDigits) fMinFractionDigits = fMaxFractionDigits; } @@ -772,7 +773,7 @@ NumberFormat::getMinimumFractionDigits() const void NumberFormat::setMinimumFractionDigits(int32_t newValue) { - fMinFractionDigits = uprv_max(0, uprv_min(newValue, fgMinIntegerDigits)); + fMinFractionDigits = uprv_max(0, uprv_min(newValue, gMinIntegerDigits)); if (fMaxFractionDigits < fMinFractionDigits) fMaxFractionDigits = fMinFractionDigits; } @@ -825,6 +826,36 @@ NumberFormat::makeInstance(const Locale& desiredLocale, return NULL; } +#ifdef U_WINDOWS + char buffer[8]; + int32_t count = desiredLocale.getKeywordValue("compat", buffer, sizeof(buffer), status); + + // if the locale has "@compat=host", create a host-specific NumberFormat + if (count > 0 && uprv_strcmp(buffer, "host") == 0) { + Win32NumberFormat *f = NULL; + UBool curr = TRUE; + + switch (style) { + case kNumberStyle: + curr = FALSE; + // fall-through + + case kCurrencyStyle: + f = new Win32NumberFormat(desiredLocale, curr, status); + + if (U_SUCCESS(status)) { + return f; + } + + delete f; + break; + + default: + break; + } + } +#endif + NumberFormat* f = NULL; DecimalFormatSymbols* symbolsToAdopt = NULL; UnicodeString pattern; @@ -838,12 +869,12 @@ NumberFormat::makeInstance(const Locale& desiredLocale, symbolsToAdopt = new DecimalFormatSymbols(status); // Creates a DecimalFormat instance with the last resort number patterns. - pattern.setTo(TRUE, fgLastResortNumberPatterns[style], -1); + pattern.setTo(TRUE, gLastResortNumberPatterns[style], -1); } else { // If not all the styled patterns exists for the NumberFormat in this locale, // sets the status code to failure and returns nil. - if (ures_getSize(numberPatterns) < fgNumberPatternsCount) { + if (ures_getSize(numberPatterns) < (int32_t)(sizeof(gLastResortNumberPatterns)/sizeof(gLastResortNumberPatterns[0]))) { status = U_INVALID_FORMAT_ERROR; goto cleanup; } @@ -859,37 +890,11 @@ NumberFormat::makeInstance(const Locale& desiredLocale, if (U_FAILURE(status) || symbolsToAdopt == NULL) { goto cleanup; } - - // Here we assume that the locale passed in is in the canonical - // form, e.g: pt_PT_@currency=PTE not pt_PT_PREEURO if(style==kCurrencyStyle){ - char currencyCode[8]={0}; - int32_t currencyCodeCap = sizeof(currencyCode); - const char* locName = desiredLocale.getName(); - currencyCodeCap = uloc_getKeywordValue(locName, "currency", currencyCode, currencyCodeCap, &status); - if(U_SUCCESS(status) && currencyCodeCap > 0) { - /* An explicit currency was requested */ - UErrorCode localStatus = U_ZERO_ERROR; - UResourceBundle *currency = ures_getByKeyWithFallback(resource, "Currencies", NULL, &localStatus); - currency = ures_getByKeyWithFallback(currency, currencyCode, currency, &localStatus); - if(U_SUCCESS(localStatus) && ures_getSize(currency)>2) { - currency = ures_getByIndex(currency, 2, currency, &localStatus); - int32_t currPatternLen = 0; - const UChar *currPattern = ures_getStringByIndex(currency, (int32_t)0, &currPatternLen, &localStatus); - UnicodeString decimalSep = ures_getStringByIndex(currency, (int32_t)1, NULL, &localStatus); - UnicodeString groupingSep = ures_getStringByIndex(currency, (int32_t)2, NULL, &localStatus); - if(U_SUCCESS(localStatus)){ - symbolsToAdopt->setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, groupingSep); - symbolsToAdopt->setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, decimalSep); - pattern.setTo(TRUE, currPattern, currPatternLen); - status = localStatus; - } - } - ures_close(currency); - /* else An explicit currency was requested and is unknown or locale data is malformed. */ - /* ucurr_* API will get the correct value later on. */ + const UChar* currPattern = symbolsToAdopt->getCurrencyPattern(); + if(currPattern!=NULL){ + pattern.setTo(currPattern, u_strlen(currPattern)); } - /* else no currency keyword used. */ } f = new DecimalFormat(pattern, symbolsToAdopt, status); if (U_FAILURE(status) || f == NULL) { diff --git a/icuSources/i18n/olsontz.cpp b/icuSources/i18n/olsontz.cpp index c2665dc7..43adcb16 100644 --- a/icuSources/i18n/olsontz.cpp +++ b/icuSources/i18n/olsontz.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2004, International Business Machines +* Copyright (c) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -97,7 +97,7 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top, // Size 4 is like size 3, but with an alias list at the end // Size 5 is a hybrid zone, with historical and final elements // Size 6 is like size 5, but with an alias list at the end - int32_t size = ures_getSize((UResourceBundle*) res); // cast away const + int32_t size = ures_getSize(res); if (size < 3 || size > 6) { ec = U_INVALID_FORMAT_ERROR; } @@ -106,23 +106,21 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top, int32_t i; UResourceBundle* r = ures_getByIndex(res, 0, NULL, &ec); transitionTimes = ures_getIntVector(r, &i, &ec); - ures_close(r); if ((i<0 || i>0x7FFF) && U_SUCCESS(ec)) { ec = U_INVALID_FORMAT_ERROR; } transitionCount = (int16_t) i; // Type offsets list must be of even size, with size >= 2 - r = ures_getByIndex(res, 1, NULL, &ec); + r = ures_getByIndex(res, 1, r, &ec); typeOffsets = ures_getIntVector(r, &i, &ec); - ures_close(r); if ((i<2 || i>0x7FFE || ((i&1)!=0)) && U_SUCCESS(ec)) { ec = U_INVALID_FORMAT_ERROR; } typeCount = (int16_t) i >> 1; // Type data must be of the same size as the transitions list - r = ures_getByIndex(res, 2, NULL, &ec); + r = ures_getByIndex(res, 2, r, &ec); int32_t len; typeData = ures_getBinary(r, &len, &ec); ures_close(r); @@ -135,10 +133,18 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top, if(U_SUCCESS(ec)) { int32_t jj; for(jj=0;jj<transitionCount;jj++) { - U_DEBUG_TZ_MSG((" Transition %d: time %d, typedata%d\n", jj, transitionTimes[jj], typeData[jj])); - } - for(jj=0;jj<transitionCount;jj++) { - U_DEBUG_TZ_MSG((" Type %d: offset%d\n", jj, typeOffsets[jj])); + int32_t year, month, dom, dow; + double millis=0; + double days = Math::floorDivide(((double)transitionTimes[jj])*1000.0, (double)U_MILLIS_PER_DAY, millis); + + Grego::dayToFields(days, year, month, dom, dow); + U_DEBUG_TZ_MSG((" Transition %d: time %d (%04d.%02d.%02d+%.1fh), typedata%d\n", jj, transitionTimes[jj], + year, month+1, dom, (millis/kOneHour), typeData[jj])); +// U_DEBUG_TZ_MSG((" offset%d\n", typeOffsets[jj])); + int16_t f = jj; + f <<= 1; + U_DEBUG_TZ_MSG((" offsets[%d+%d]=(%d+%d)=(%d==%d)\n", (int)f,(int)f+1,(int)typeOffsets[f],(int)typeOffsets[f+1],(int)zoneOffset(jj), + (int)typeOffsets[f]+(int)typeOffsets[f+1])); } } #endif @@ -176,7 +182,7 @@ OlsonTimeZone::OlsonTimeZone(const UResourceBundle* top, data = ures_getIntVector(r, &len, &ec); if (U_SUCCESS(ec) && len == 11) { UnicodeString emptyStr; - U_DEBUG_TZ_MSG(("zone%s, rule%s: {%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d}", zKey, ures_getKey(r), + U_DEBUG_TZ_MSG(("zone%s, rule%s: {%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d}\n", zKey, ures_getKey(r), data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10])); finalZone = new SimpleTimeZone(rawOffset, emptyStr, (int8_t)data[0], (int8_t)data[1], (int8_t)data[2], @@ -395,6 +401,18 @@ int32_t OlsonTimeZone::getRawOffset() const { return raw; } +#if defined U_DEBUG_TZ +void printTime(double ms) { + int32_t year, month, dom, dow; + double millis=0; + double days = Math::floorDivide(((double)ms), (double)U_MILLIS_PER_DAY, millis); + + Grego::dayToFields(days, year, month, dom, dow); + U_DEBUG_TZ_MSG((" findTransition: time %.1f (%04d.%02d.%02d+%.1fh)\n", ms, + year, month+1, dom, (millis/kOneHour))); + } +#endif + /** * Find the smallest i (in 0..transitionCount-1) such that time >= * transition(i), where transition(i) is either the GMT or the local @@ -408,6 +426,10 @@ int32_t OlsonTimeZone::getRawOffset() const { */ int16_t OlsonTimeZone::findTransition(double time, UBool local) const { int16_t i = 0; + U_DEBUG_TZ_MSG(("findTransition(%.1f, %s)\n", time, local?"T":"F")); +#if defined U_DEBUG_TZ + printTime(time*1000.0); +#endif if (transitionCount != 0) { // Linear search from the end is the fastest approach, since @@ -415,10 +437,41 @@ int16_t OlsonTimeZone::findTransition(double time, UBool local) const { for (i = transitionCount - 1; i > 0; --i) { int32_t transition = transitionTimes[i]; if (local) { - transition += zoneOffset(typeData[i]); + int32_t zoneOffsetPrev = zoneOffset(typeData[i-1]); + int32_t zoneOffsetCurr = zoneOffset(typeData[i]); + + // use the lowest offset ( == standard time ). as per tzregts.cpp which says: + + /** + * @bug 4084933 + * The expected behavior of TimeZone around the boundaries is: + * (Assume transition time of 2:00 AM) + * day of onset 1:59 AM STD = display name 1:59 AM ST + * 2:00 AM STD = display name 3:00 AM DT + * day of end 0:59 AM STD = display name 1:59 AM DT + * 1:00 AM STD = display name 1:00 AM ST + */ + if(zoneOffsetPrev<zoneOffsetCurr) { + transition += zoneOffsetPrev; + } else { + transition += zoneOffsetCurr; + } } if (time >= transition) { + U_DEBUG_TZ_MSG(("Found@%d: time=%.1f, localtransition=%d (orig %d) dz %d\n", i, time, transition, transitionTimes[i], + zoneOffset(typeData[i-1]))); +#if defined U_DEBUG_TZ + printTime(transition*1000.0); + printTime(transitionTimes[i]*1000.0); +#endif break; + } else { + U_DEBUG_TZ_MSG(("miss@%d: time=%.1f, localtransition=%d (orig %d) dz %d\n", i, time, transition, transitionTimes[i], + zoneOffset(typeData[i-1]))); +#if defined U_DEBUG_TZ + printTime(transition*1000.0); + printTime(transitionTimes[i]*1000.0); +#endif } } @@ -429,11 +482,13 @@ int16_t OlsonTimeZone::findTransition(double time, UBool local) const { U_ASSERT(local || time < transitionTimes[0] || time >= transitionTimes[i]); U_ASSERT(local || i == transitionCount-1 || time < transitionTimes[i+1]); + U_DEBUG_TZ_MSG(("findTransition(%.1f, %s)= trans %d\n", time, local?"T":"F", i)); i = typeData[i]; } U_ASSERT(i>=0 && i<typeCount); + U_DEBUG_TZ_MSG(("findTransition(%.1f, %s)=%d, offset %d\n", time, local?"T":"F", i, zoneOffset(i))); return i; } @@ -475,7 +530,13 @@ UBool OlsonTimeZone::useDaylightTime() const { } return FALSE; } - +int32_t +OlsonTimeZone::getDSTSavings() const{ + if(finalZone!=NULL){ + return finalZone->getDSTSavings(); + } + return TimeZone::getDSTSavings(); +} /** * TimeZone API. */ diff --git a/icuSources/i18n/olsontz.h b/icuSources/i18n/olsontz.h index ef19ee2a..6f7d71cd 100644 --- a/icuSources/i18n/olsontz.h +++ b/icuSources/i18n/olsontz.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2003-2004, International Business Machines +* Copyright (c) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -209,6 +209,8 @@ class U_I18N_API OlsonTimeZone: public TimeZone { */ virtual UBool inDaylightTime(UDate date, UErrorCode& ec) const; + virtual int32_t getDSTSavings() const; + protected: /** * Default constructor. Creates a time zone with an empty ID and diff --git a/icuSources/i18n/quant.h b/icuSources/i18n/quant.h index 532a9fe0..e10fb99e 100644 --- a/icuSources/i18n/quant.h +++ b/icuSources/i18n/quant.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2004, International Business Machines Corporation + * Copyright (C) 2001-2006, International Business Machines Corporation * and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -18,7 +18,7 @@ U_NAMESPACE_BEGIN -class Quantifier : public UnicodeFunctor, public UnicodeMatcher { +class U_I18N_API Quantifier : public UnicodeFunctor, public UnicodeMatcher { public: @@ -113,8 +113,6 @@ class Quantifier : public UnicodeFunctor, public UnicodeMatcher { private: - static void appendNumber(UnicodeString& result, int32_t n); - UnicodeFunctor* matcher; // owned uint32_t minCount; diff --git a/icuSources/i18n/rbnf.cpp b/icuSources/i18n/rbnf.cpp index ad2d71b6..f9a9ae3d 100644 --- a/icuSources/i18n/rbnf.cpp +++ b/icuSources/i18n/rbnf.cpp @@ -1,6 +1,7 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2006, International Business Machines Corporation +* and others. All Rights Reserved. ******************************************************************************* */ @@ -58,7 +59,14 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedNumberFormat) -class LocalizationInfo : public UObject { +/* +This is a utility class. It does not use ICU's RTTI. +If ICU's RTTI is needed again, you can uncomment the RTTI code and derive from UObject. +Please make sure that intltest passes on Windows in Release mode, +since the string pooling per compilation unit will mess up how RTTI works. +The RTTI code was also removed due to lack of code coverage. +*/ +class LocalizationInfo : public UMemory { protected: virtual ~LocalizationInfo() {}; uint32_t refcount; @@ -90,11 +98,11 @@ public: virtual int32_t indexForLocale(const UChar* locale) const; virtual int32_t indexForRuleSet(const UChar* ruleset) const; - virtual UClassID getDynamicClassID() const = 0; - static UClassID getStaticClassID(void); +// virtual UClassID getDynamicClassID() const = 0; +// static UClassID getStaticClassID(void); }; -UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(LocalizationInfo) +//UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(LocalizationInfo) // if both strings are NULL, this returns TRUE static UBool @@ -254,8 +262,8 @@ public: virtual const UChar* getLocaleName(int32_t index) const; virtual const UChar* getDisplayName(int32_t localeIndex, int32_t ruleIndex) const; - virtual UClassID getDynamicClassID() const; - static UClassID getStaticClassID(void); +// virtual UClassID getDynamicClassID() const; +// static UClassID getStaticClassID(void); private: void init(UErrorCode& status) const; @@ -519,21 +527,24 @@ LocDataParser::parseError(const char* /*str*/) { } const UChar* start = p - U_PARSE_CONTEXT_LEN - 1; - if (start < data) + if (start < data) { start = data; - for (UChar* x = p; --x >= start;) + } + for (UChar* x = p; --x >= start;) { if (!*x) { start = x+1; break; } + } const UChar* limit = p + U_PARSE_CONTEXT_LEN - 1; - if (limit > e) + if (limit > e) { limit = e; - u_strncpy(pe.preContext, start, p-start); + } + u_strncpy(pe.preContext, start, (int32_t)(p-start)); pe.preContext[p-start] = 0; - u_strncpy(pe.postContext, p, limit-p); + u_strncpy(pe.postContext, p, (int32_t)(limit-p)); pe.postContext[limit-p] = 0; - pe.offset = p - data; + pe.offset = (int32_t)(p - data); #ifdef DEBUG fprintf(stderr, "%s at or near character %d: ", str, p-data); @@ -565,7 +576,7 @@ LocDataParser::parseError(const char* /*str*/) { } } -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringLocalizationInfo) +//UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringLocalizationInfo) StringLocalizationInfo* StringLocalizationInfo::create(const UnicodeString& info, UParseError& perror, UErrorCode& status) { @@ -899,7 +910,7 @@ RuleBasedNumberFormat::getNumberOfRuleSetDisplayNameLocales(void) const { Locale RuleBasedNumberFormat::getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const { if (U_FAILURE(status)) { - return Locale(); + return Locale(""); } if (localizations && index >= 0 && index < localizations->getNumberOfDisplayLocales()) { UnicodeString name(TRUE, localizations->getLocaleName(index), -1); @@ -910,7 +921,7 @@ RuleBasedNumberFormat::getRuleSetDisplayNameLocale(int32_t index, UErrorCode& st bp = (char *)uprv_malloc(cap); if (bp == NULL) { status = U_MEMORY_ALLOCATION_ERROR; - return Locale(); + return Locale(""); } } name.extract(0, name.length(), bp, cap, UnicodeString::kInvariant); @@ -1204,9 +1215,10 @@ RuleBasedNumberFormat::initDefaultRuleSet() void RuleBasedNumberFormat::init(const UnicodeString& rules, LocalizationInfo* localizationInfos, - UParseError& /* pErr */, UErrorCode& status) + UParseError& pErr, UErrorCode& status) { // TODO: implement UParseError + uprv_memset(&pErr, 0, sizeof(UParseError)); // Note: this can leave ruleSets == NULL, so remaining code should check if (U_FAILURE(status)) { return; diff --git a/icuSources/i18n/rbt.cpp b/icuSources/i18n/rbt.cpp index a7d26356..c22b2bd7 100644 --- a/icuSources/i18n/rbt.cpp +++ b/icuSources/i18n/rbt.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -37,19 +37,20 @@ void RuleBasedTransliterator::_construct(const UnicodeString& rules, return; } - TransliteratorParser parser; + TransliteratorParser parser(status); parser.parse(rules, direction, parseError, status); if (U_FAILURE(status)) { return; } - if (parser.idBlock.length() != 0 || - parser.compoundFilter != NULL) { + if (parser.idBlockVector.size() != 0 || + parser.compoundFilter != NULL || + parser.dataVector.size() == 0) { status = U_INVALID_RBT_SYNTAX; // ::ID blocks disallowed in RBT return; } - fData = parser.orphanData(); + fData = (TransliterationRuleData*)parser.dataVector.orphanElementAt(0); setMaximumContextLength(fData->ruleSet.getMaximumContextLength()); } diff --git a/icuSources/i18n/rbt_data.cpp b/icuSources/i18n/rbt_data.cpp index 7902cbe4..bec4b48c 100644 --- a/icuSources/i18n/rbt_data.cpp +++ b/icuSources/i18n/rbt_data.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -22,41 +22,31 @@ U_NAMESPACE_BEGIN TransliterationRuleData::TransliterationRuleData(UErrorCode& status) - : UMemory(), ruleSet(status), - variableNames(0), variables(0) + : UMemory(), ruleSet(status), variableNames(status), + variables(0), variablesAreOwned(TRUE) { if (U_FAILURE(status)) { return; } - variableNames = new Hashtable(status); - /* test for NULL */ - if (variableNames == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - if (U_SUCCESS(status)) { - variableNames->setValueDeleter(uhash_deleteUnicodeString); - } + variableNames.setValueDeleter(uhash_deleteUnicodeString); variables = 0; variablesLength = 0; } TransliterationRuleData::TransliterationRuleData(const TransliterationRuleData& other) : UMemory(other), ruleSet(other.ruleSet), + variablesAreOwned(TRUE), variablesBase(other.variablesBase), variablesLength(other.variablesLength) { UErrorCode status = U_ZERO_ERROR; - variableNames = new Hashtable(status); - if (U_SUCCESS(status)) { - variableNames->setValueDeleter(uhash_deleteUnicodeString); - int32_t pos = -1; - const UHashElement *e; - while ((e = other.variableNames->nextElement(pos)) != 0) { - UnicodeString* value = - new UnicodeString(*(const UnicodeString*)e->value.pointer); - variableNames->put(*(UnicodeString*)e->key.pointer, value, status); - } + variableNames.setValueDeleter(uhash_deleteUnicodeString); + int32_t pos = -1; + const UHashElement *e; + while ((e = other.variableNames.nextElement(pos)) != 0) { + UnicodeString* value = + new UnicodeString(*(const UnicodeString*)e->value.pointer); + variableNames.put(*(UnicodeString*)e->key.pointer, value, status); } variables = 0; @@ -77,13 +67,12 @@ TransliterationRuleData::TransliterationRuleData(const TransliterationRuleData& } TransliterationRuleData::~TransliterationRuleData() { - delete variableNames; - if (variables != 0) { + if (variablesAreOwned && variables != 0) { for (int32_t i=0; i<variablesLength; ++i) { delete variables[i]; } - uprv_free(variables); } + uprv_free(variables); } UnicodeFunctor* diff --git a/icuSources/i18n/rbt_data.h b/icuSources/i18n/rbt_data.h index 9da86890..59134607 100644 --- a/icuSources/i18n/rbt_data.h +++ b/icuSources/i18n/rbt_data.h @@ -1,5 +1,7 @@ /* -* Copyright (C) 1999-2004, International Business Machines Corporation and others. All Rights Reserved. +********************************************************************** +* Copyright (C) 1999-2006, International Business Machines Corporation +* and others. All Rights Reserved. ********************************************************************** * Date Name Description * 11/17/99 aliu Creation. @@ -15,14 +17,13 @@ #include "unicode/uobject.h" #include "rbt_set.h" +#include "hash.h" U_NAMESPACE_BEGIN class UnicodeFunctor; -class UnicodeString; class UnicodeMatcher; class UnicodeReplacer; -class Hashtable; /** * The rule data for a RuleBasedTransliterators. RBT objects hold @@ -61,7 +62,7 @@ public: * data.variables. The stand-in also represents the UnicodeMatcher in * the stored rules. */ - Hashtable* variableNames; + Hashtable variableNames; /** * Map category variable (UChar) to set (UnicodeFunctor). @@ -74,6 +75,15 @@ public: */ UnicodeFunctor** variables; + /** + * Flag that indicates whether the variables are owned (if a single + * call to Transliterator::createFromRules() produces a CompoundTransliterator + * with more than one RuleBasedTransliterator as children, they all share + * the same variables list, so only the first one is considered to own + * the variables) + */ + UBool variablesAreOwned; + /** * The character that represents variables[0]. Characters * variablesBase through variablesBase + diff --git a/icuSources/i18n/rbt_pars.cpp b/icuSources/i18n/rbt_pars.cpp index 61177a27..f1c2cb97 100644 --- a/icuSources/i18n/rbt_pars.cpp +++ b/icuSources/i18n/rbt_pars.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1999-2004, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -32,6 +32,7 @@ #include "unicode/symtable.h" #include "tridpars.h" #include "uvector.h" +#include "hash.h" #include "util.h" #include "cmemory.h" #include "uprops.h" @@ -108,6 +109,15 @@ static const UChar HALF_ENDERS[] = { // "=><;" static const int32_t ID_TOKEN_LEN = 2; static const UChar ID_TOKEN[] = { 0x3A, 0x3A }; // ':', ':' +/* +commented out until we do real ::BEGIN/::END functionality +static const int32_t BEGIN_TOKEN_LEN = 5; +static const UChar BEGIN_TOKEN[] = { 0x42, 0x45, 0x47, 0x49, 0x4e }; // 'BEGIN' + +static const int32_t END_TOKEN_LEN = 3; +static const UChar END_TOKEN[] = { 0x45, 0x4e, 0x44 }; // 'END' +*/ + U_NAMESPACE_BEGIN //---------------------------------------------------------------------- @@ -126,8 +136,11 @@ public: const UVector* variablesVector; // alias + const Hashtable* variableNames; // alias + ParseData(const TransliterationRuleData* data = 0, - const UVector* variablesVector = 0); + const UVector* variablesVector = 0, + const Hashtable* variableNames = 0); virtual const UnicodeString* lookup(const UnicodeString& s) const; @@ -153,14 +166,15 @@ private: }; ParseData::ParseData(const TransliterationRuleData* d, - const UVector* sets) : - data(d), variablesVector(sets) {} + const UVector* sets, + const Hashtable* vNames) : + data(d), variablesVector(sets), variableNames(vNames) {} /** * Implement SymbolTable API. */ const UnicodeString* ParseData::lookup(const UnicodeString& name) const { - return (const UnicodeString*) data->variableNames->get(name); + return (const UnicodeString*) variableNames->get(name); } /** @@ -265,8 +279,6 @@ public: UBool anchorStart; UBool anchorEnd; - - UErrorCode ec; /** * The segment number from 1..n of the next '(' we see @@ -282,12 +294,13 @@ public: RuleHalf(TransliteratorParser& parser); ~RuleHalf(); - int32_t parse(const UnicodeString& rule, int32_t pos, int32_t limit); + int32_t parse(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status); int32_t parseSection(const UnicodeString& rule, int32_t pos, int32_t limit, UnicodeString& buf, const UnicodeString& illegal, - UBool isSegment); + UBool isSegment, + UErrorCode& status); /** * Remove context. @@ -308,8 +321,9 @@ public: int syntaxError(UErrorCode code, const UnicodeString& rule, - int32_t start) { - return parser.syntaxError(code, rule, start); + int32_t start, + UErrorCode& status) { + return parser.syntaxError(code, rule, start, status); } private: @@ -319,7 +333,6 @@ private: }; RuleHalf::RuleHalf(TransliteratorParser& p) : - ec(U_ZERO_ERROR), parser(p) { cursor = -1; @@ -340,13 +353,13 @@ RuleHalf::~RuleHalf() { * @return the index after the terminating character, or * if limit was reached, limit */ -int32_t RuleHalf::parse(const UnicodeString& rule, int32_t pos, int32_t limit) { +int32_t RuleHalf::parse(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status) { int32_t start = pos; text.truncate(0); - pos = parseSection(rule, pos, limit, text, ILLEGAL_TOP, FALSE); + pos = parseSection(rule, pos, limit, text, ILLEGAL_TOP, FALSE, status); if (cursorOffset > 0 && cursor != cursorOffsetPos) { - return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start); + return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start, status); } return pos; @@ -378,7 +391,7 @@ int32_t RuleHalf::parse(const UnicodeString& rule, int32_t pos, int32_t limit) { int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t limit, UnicodeString& buf, const UnicodeString& illegal, - UBool isSegment) { + UBool isSegment, UErrorCode& status) { int32_t start = pos; ParsePosition pp; UnicodeString scratch; @@ -402,19 +415,19 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l if (u_strchr(HALF_ENDERS, c) != NULL) { if (isSegment) { // Unclosed segment - return syntaxError(U_UNCLOSED_SEGMENT, rule, start); + return syntaxError(U_UNCLOSED_SEGMENT, rule, start, status); } break; } if (anchorEnd) { // Text after a presumed end anchor is a syntax err - return syntaxError(U_MALFORMED_VARIABLE_REFERENCE, rule, start); + return syntaxError(U_MALFORMED_VARIABLE_REFERENCE, rule, start, status); } if (UnicodeSet::resemblesPattern(rule, pos-1)) { pp.setIndex(pos-1); // Backup to opening '[' - buf.append(parser.parseSet(rule, pp)); - if (U_FAILURE(parser.status)) { - return syntaxError(U_MALFORMED_SET, rule, start); + buf.append(parser.parseSet(rule, pp, status)); + if (U_FAILURE(status)) { + return syntaxError(U_MALFORMED_SET, rule, start, status); } pos = pp.getIndex(); continue; @@ -422,14 +435,14 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l // Handle escapes if (c == ESCAPE) { if (pos == limit) { - return syntaxError(U_TRAILING_BACKSLASH, rule, start); + return syntaxError(U_TRAILING_BACKSLASH, rule, start, status); } UChar32 escaped = rule.unescapeAt(pos); // pos is already past '\\' if (escaped == (UChar32) -1) { - return syntaxError(U_MALFORMED_UNICODE_ESCAPE, rule, start); + return syntaxError(U_MALFORMED_UNICODE_ESCAPE, rule, start, status); } if (!parser.checkVariableRange(escaped)) { - return syntaxError(U_VARIABLE_RANGE_OVERLAP, rule, start); + return syntaxError(U_VARIABLE_RANGE_OVERLAP, rule, start, status); } buf.append(escaped); continue; @@ -450,7 +463,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l quoteStart = buf.length(); for (;;) { if (iq < 0) { - return syntaxError(U_UNTERMINATED_QUOTE, rule, start); + return syntaxError(U_UNTERMINATED_QUOTE, rule, start, status); } scratch.truncate(0); rule.extractBetween(pos, iq, scratch); @@ -468,7 +481,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l for (iq=quoteStart; iq<quoteLimit; ++iq) { if (!parser.checkVariableRange(buf.charAt(iq))) { - return syntaxError(U_VARIABLE_RANGE_OVERLAP, rule, start); + return syntaxError(U_VARIABLE_RANGE_OVERLAP, rule, start, status); } } } @@ -476,11 +489,11 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l } if (!parser.checkVariableRange(c)) { - return syntaxError(U_VARIABLE_RANGE_OVERLAP, rule, start); + return syntaxError(U_VARIABLE_RANGE_OVERLAP, rule, start, status); } if (illegal.indexOf(c) >= 0) { - syntaxError(U_ILLEGAL_CHARACTER, rule, start); + syntaxError(U_ILLEGAL_CHARACTER, rule, start, status); } switch (c) { @@ -493,7 +506,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l anchorStart = TRUE; } else { return syntaxError(U_MISPLACED_ANCHOR_START, - rule, start); + rule, start, status); } break; case SEGMENT_OPEN: @@ -508,7 +521,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l int32_t segmentNumber = nextSegmentNumber++; // 1-based // Parse the segment - pos = parseSection(rule, pos, limit, buf, ILLEGAL_SEG, TRUE); + pos = parseSection(rule, pos, limit, buf, ILLEGAL_SEG, TRUE, status); // After parsing a segment, the relevant characters are // in buf, starting at offset bufSegStart. Extract them @@ -516,12 +529,12 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l // standin for that matcher. StringMatcher* m = new StringMatcher(buf, bufSegStart, buf.length(), - segmentNumber, *parser.data); + segmentNumber, *parser.curData); // Record and associate object and segment number - parser.setSegmentObject(segmentNumber, m); + parser.setSegmentObject(segmentNumber, m, status); buf.truncate(bufSegStart); - buf.append(parser.getSegmentStandin(segmentNumber)); + buf.append(parser.getSegmentStandin(segmentNumber, status)); } break; case FUNCTION: @@ -533,13 +546,13 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l // The next character MUST be a segment open if (single == NULL || !ICU_Utility::parseChar(rule, iref, SEGMENT_OPEN)) { - return syntaxError(U_INVALID_FUNCTION, rule, start); + return syntaxError(U_INVALID_FUNCTION, rule, start, status); } Transliterator *t = single->createInstance(); delete single; if (t == NULL) { - return syntaxError(U_INVALID_FUNCTION, rule, start); + return syntaxError(U_INVALID_FUNCTION, rule, start, status); } // bufSegStart is the offset in buf to the first @@ -547,18 +560,18 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l int32_t bufSegStart = buf.length(); // Parse the segment - pos = parseSection(rule, iref, limit, buf, ILLEGAL_FUNC, TRUE); + pos = parseSection(rule, iref, limit, buf, ILLEGAL_FUNC, TRUE, status); // After parsing a segment, the relevant characters are // in buf, starting at offset bufSegStart. UnicodeString output; buf.extractBetween(bufSegStart, buf.length(), output); FunctionReplacer *r = - new FunctionReplacer(t, new StringReplacer(output, parser.data)); + new FunctionReplacer(t, new StringReplacer(output, parser.curData)); // Replace the buffer contents with a stand-in buf.truncate(bufSegStart); - buf.append(parser.generateStandInFor(r)); + buf.append(parser.generateStandInFor(r, status)); } break; case SymbolTable::SYMBOL_REF: @@ -581,9 +594,9 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l r = ICU_Utility::parseNumber(rule, pos, 10); if (r < 0) { return syntaxError(U_UNDEFINED_SEGMENT_REFERENCE, - rule, start); + rule, start, status); } - buf.append(parser.getSegmentStandin(r)); + buf.append(parser.getSegmentStandin(r, status)); } else { pp.setIndex(pos); UnicodeString name = parser.parseData-> @@ -603,13 +616,13 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l // that case appendVariableDef() will append the // special placeholder char variableLimit-1. varStart = buf.length(); - parser.appendVariableDef(name, buf); + parser.appendVariableDef(name, buf, status); varLimit = buf.length(); } } break; case DOT: - buf.append(parser.getDotStandIn()); + buf.append(parser.getDotStandIn(status)); break; case KLEENE_STAR: case ONE_OR_MORE: @@ -623,7 +636,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l { if (isSegment && buf.length() == bufStart) { // The */+ immediately follows '(' - return syntaxError(U_MISPLACED_QUANTIFIER, rule, start); + return syntaxError(U_MISPLACED_QUANTIFIER, rule, start, status); } int32_t qstart, qlimit; @@ -645,7 +658,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l } UnicodeFunctor *m = - new StringMatcher(buf, qstart, qlimit, 0, *parser.data); + new StringMatcher(buf, qstart, qlimit, 0, *parser.curData); int32_t min = 0; int32_t max = Quantifier::MAX; switch (c) { @@ -661,7 +674,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l } m = new Quantifier(m, min, max); buf.truncate(qstart); - buf.append(parser.generateStandInFor(m)); + buf.append(parser.generateStandInFor(m, status)); } break; @@ -679,31 +692,31 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l //------------------------------------------------------ case CONTEXT_ANTE: if (ante >= 0) { - return syntaxError(U_MULTIPLE_ANTE_CONTEXTS, rule, start); + return syntaxError(U_MULTIPLE_ANTE_CONTEXTS, rule, start, status); } ante = buf.length(); break; case CONTEXT_POST: if (post >= 0) { - return syntaxError(U_MULTIPLE_POST_CONTEXTS, rule, start); + return syntaxError(U_MULTIPLE_POST_CONTEXTS, rule, start, status); } post = buf.length(); break; case CURSOR_POS: if (cursor >= 0) { - return syntaxError(U_MULTIPLE_CURSORS, rule, start); + return syntaxError(U_MULTIPLE_CURSORS, rule, start, status); } cursor = buf.length(); break; case CURSOR_OFFSET: if (cursorOffset < 0) { if (buf.length() > 0) { - return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start); + return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start, status); } --cursorOffset; } else if (cursorOffset > 0) { if (buf.length() != cursorOffsetPos || cursor >= 0) { - return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start); + return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start, status); } ++cursorOffset; } else { @@ -713,7 +726,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l cursorOffsetPos = buf.length(); cursorOffset = 1; } else { - return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start); + return syntaxError(U_MISPLACED_CURSOR_OFFSET, rule, start, status); } } break; @@ -730,7 +743,7 @@ int32_t RuleHalf::parseSection(const UnicodeString& rule, int32_t pos, int32_t l !((c >= 0x0030/*'0'*/ && c <= 0x0039/*'9'*/) || (c >= 0x0041/*'A'*/ && c <= 0x005A/*'Z'*/) || (c >= 0x0061/*'a'*/ && c <= 0x007A/*'z'*/))) { - return syntaxError(U_UNQUOTED_SPECIAL, rule, start); + return syntaxError(U_UNQUOTED_SPECIAL, rule, start, status); } buf.append(c); break; @@ -793,23 +806,29 @@ UBool RuleHalf::isValidInput(TransliteratorParser& transParser) { /** * Constructor. */ -TransliteratorParser::TransliteratorParser() { - data = NULL; +TransliteratorParser::TransliteratorParser(UErrorCode &statusReturn) : +dataVector(statusReturn), +idBlockVector(statusReturn), +variablesVector(statusReturn), +segmentObjects(statusReturn) +{ + idBlockVector.setDeleter(uhash_deleteUnicodeString); + curData = NULL; compoundFilter = NULL; parseData = NULL; - variablesVector = NULL; - segmentObjects = NULL; + variableNames.setValueDeleter(uhash_deleteUnicodeString); } /** * Destructor. */ TransliteratorParser::~TransliteratorParser() { - delete data; + while (!dataVector.isEmpty()) + delete (TransliterationRuleData*)(dataVector.orphanElementAt(0)); delete compoundFilter; delete parseData; - delete variablesVector; - delete segmentObjects; + while (!variablesVector.isEmpty()) + delete (UnicodeFunctor*)variablesVector.orphanElementAt(0); } void @@ -818,9 +837,8 @@ TransliteratorParser::parse(const UnicodeString& rules, UParseError& pe, UErrorCode& ec) { if (U_SUCCESS(ec)) { - parseRules(rules, transDirection); + parseRules(rules, transDirection, ec); pe = parseError; - ec = status; } } @@ -833,15 +851,6 @@ UnicodeSet* TransliteratorParser::orphanCompoundFilter() { return f; } -/** - * Return the data object parsed by parse(). Caller owns result. - */ -TransliterationRuleData* TransliteratorParser::orphanData() { - TransliterationRuleData* d = data; - data = NULL; - return d; -} - //---------------------------------------------------------------------- // Private implementation //---------------------------------------------------------------------- @@ -855,55 +864,46 @@ TransliterationRuleData* TransliteratorParser::orphanData() { * rules */ void TransliteratorParser::parseRules(const UnicodeString& rule, - UTransDirection theDirection) { + UTransDirection theDirection, + UErrorCode& status) { // Clear error struct parseError.line = parseError.offset = -1; parseError.preContext[0] = parseError.postContext[0] = (UChar)0; - status = U_ZERO_ERROR; - delete data; - data = new TransliterationRuleData(status); + UBool parsingIDs = TRUE; + int32_t ruleCount = 0; + + while (!dataVector.isEmpty()) { + delete (TransliterationRuleData*)(dataVector.orphanElementAt(0)); + } if (U_FAILURE(status)) { return; } + idBlockVector.removeAllElements(); + curData = NULL; direction = theDirection; ruleCount = 0; delete compoundFilter; compoundFilter = NULL; - if (variablesVector == NULL) { - variablesVector = new UVector(status); - } else { - variablesVector->removeAllElements(); + while (!variablesVector.isEmpty()) { + delete (UnicodeFunctor*)variablesVector.orphanElementAt(0); } - parseData = new ParseData(0, variablesVector); + variableNames.removeAll(); + parseData = new ParseData(0, &variablesVector, &variableNames); if (parseData == NULL) { status = U_MEMORY_ALLOCATION_ERROR; return; } - parseData->data = data; - // By default, rules use part of the private use area - // E000..F8FF for variables and other stand-ins. Currently - // the range F000..F8FF is typically sufficient. The 'use - // variable range' pragma allows rule sets to modify this. - setVariableRange(0xF000, 0xF8FF); - dotStandIn = (UChar) -1; UnicodeString str; // scratch - idBlock.truncate(0); - idSplitPoint = -1; + UnicodeString idBlockResult; int32_t pos = 0; int32_t limit = rule.length(); - // The mode marks whether we are in the header ::id block, the - // rule block, or the footer ::id block. - // mode == 0: start: rule->1, ::id->0 - // mode == 1: in rules: rule->1, ::id->2 - // mode == 2: in footer rule block: rule->ERROR, ::id->2 - int32_t mode = 0; // The compound filter offset is an index into idBlockResult. // If it is 0, then the compound filter occurred at the start, @@ -913,9 +913,6 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, compoundFilter = NULL; int32_t compoundFilterOffset = -1; - // The number of ::ID block entries we have parsed - int32_t idBlockCount = 0; - while (pos < limit && U_SUCCESS(status)) { UChar c = rule.charAt(pos++); if (uprv_isRuleWhiteSpace(c)) { @@ -930,13 +927,21 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, } continue; // Either fall out or restart with next line } + + // skip empty rules + if (c == END_OF_RULE) + continue; + + // keep track of how many rules we've seen + ++ruleCount; + // We've found the start of a rule or ID. c is its first // character, and pos points past c. --pos; // Look for an ID token. Must have at least ID_TOKEN_LEN + 1 // chars left. if ((pos + ID_TOKEN_LEN + 1) <= limit && - rule.compare(pos, ID_TOKEN_LEN, ID_TOKEN) == 0) { + rule.compare(pos, ID_TOKEN_LEN, ID_TOKEN) == 0) { pos += ID_TOKEN_LEN; c = rule.charAt(pos); while (uprv_isRuleWhiteSpace(c) && pos < limit) { @@ -944,44 +949,46 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, c = rule.charAt(pos); } - if (mode == 1) { - // We have just entered the footer ::ID block - mode = 2; - // In the forward direction add elements at the end. - // In the reverse direction add elements at the start. - idSplitPoint = idBlockCount; - } int32_t p = pos; + if (!parsingIDs) { + if (curData != NULL) { + if (direction == UTRANS_FORWARD) + dataVector.addElement(curData, status); + else + dataVector.insertElementAt(curData, 0, status); + curData = NULL; + } + parsingIDs = TRUE; + } + TransliteratorIDParser::SingleID* id = TransliteratorIDParser::parseSingleID(rule, p, direction, status); if (p != pos && ICU_Utility::parseChar(rule, p, END_OF_RULE)) { // Successful ::ID parse. - + if (direction == UTRANS_FORWARD) { - idBlock.append(id->canonID).append(END_OF_RULE); + idBlockResult.append(id->canonID).append(END_OF_RULE); } else { - idBlock.insert(0, END_OF_RULE); - idBlock.insert(0, id->canonID); + idBlockResult.insert(0, END_OF_RULE); + idBlockResult.insert(0, id->canonID); } - - ++idBlockCount; - + } else { // Couldn't parse an ID. Try to parse a global filter int32_t withParens = -1; - UnicodeSet* f = TransliteratorIDParser::parseGlobalFilter(rule, p, direction, withParens, &idBlock); + UnicodeSet* f = TransliteratorIDParser::parseGlobalFilter(rule, p, direction, withParens, NULL); if (f != NULL) { if (ICU_Utility::parseChar(rule, p, END_OF_RULE) && (direction == UTRANS_FORWARD) == (withParens == 0)) { if (compoundFilter != NULL) { // Multiple compound filters - syntaxError(U_MULTIPLE_COMPOUND_FILTERS, rule, pos); + syntaxError(U_MULTIPLE_COMPOUND_FILTERS, rule, pos, status); delete f; } else { compoundFilter = f; - compoundFilterOffset = idBlockCount; + compoundFilterOffset = ruleCount; } } else { delete f; @@ -989,81 +996,98 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, } else { // Invalid ::id // Can be parsed as neither an ID nor a global filter - syntaxError(U_INVALID_ID, rule, pos); + syntaxError(U_INVALID_ID, rule, pos, status); } } delete id; - pos = p; - } else if (resemblesPragma(rule, pos, limit)) { - int32_t ppp = parsePragma(rule, pos, limit); - if (ppp < 0) { - syntaxError(U_MALFORMED_PRAGMA, rule, pos); - } - pos = ppp; } else { - // Parse a rule - pos = parseRule(rule, pos, limit); - if (U_SUCCESS(status)) { - ++ruleCount; - if (mode == 2) { - // ::id in illegal position (because a rule - // occurred after the ::id footer block) - syntaxError(U_ILLEGAL_ARGUMENT_ERROR,rule,pos); + if (parsingIDs) { + if (direction == UTRANS_FORWARD) + idBlockVector.addElement(new UnicodeString(idBlockResult), status); + else + idBlockVector.insertElementAt(new UnicodeString(idBlockResult), 0, status); + idBlockResult.remove(); + parsingIDs = FALSE; + curData = new TransliterationRuleData(status); + parseData->data = curData; + + // By default, rules use part of the private use area + // E000..F8FF for variables and other stand-ins. Currently + // the range F000..F8FF is typically sufficient. The 'use + // variable range' pragma allows rule sets to modify this. + setVariableRange(0xF000, 0xF8FF, status); + } + + if (resemblesPragma(rule, pos, limit)) { + int32_t ppp = parsePragma(rule, pos, limit, status); + if (ppp < 0) { + syntaxError(U_MALFORMED_PRAGMA, rule, pos, status); } - }else{ - syntaxError(status,rule,pos); + pos = ppp; + // Parse a rule + } else { + pos = parseRule(rule, pos, limit, status); } - mode = 1; } } - - if (idSplitPoint < 0) { - idSplitPoint = idBlockCount; - } - - if (direction == UTRANS_REVERSE) { - idSplitPoint = idBlockCount - idSplitPoint; - } - // Convert the set vector to an array - data->variablesLength = variablesVector->size(); - if(data->variablesLength == 0) { - data->variables = 0; - } else { - data->variables = (UnicodeFunctor **)uprv_malloc(data->variablesLength * sizeof(UnicodeFunctor *)); + if (parsingIDs && idBlockResult.length() > 0) { + if (direction == UTRANS_FORWARD) + idBlockVector.addElement(new UnicodeString(idBlockResult), status); + else + idBlockVector.insertElementAt(new UnicodeString(idBlockResult), 0, status); } - - // orphanElement removes the given element and shifts all other - // elements down. For performance (and code clarity) we work from - // the end back to index 0. - int32_t i; - for (i=data->variablesLength; i>0; ) { - --i; - data->variables[i] = - (UnicodeSet*) variablesVector->orphanElementAt(i); + else if (!parsingIDs && curData != NULL) { + if (direction == UTRANS_FORWARD) + dataVector.addElement(curData, status); + else + dataVector.insertElementAt(curData, 0, status); } - - // Index the rules + if (U_SUCCESS(status)) { + // Convert the set vector to an array + int32_t i, dataVectorSize = dataVector.size(); + for (i = 0; i < dataVectorSize; i++) { + TransliterationRuleData* data = (TransliterationRuleData*)dataVector.elementAt(i); + data->variablesLength = variablesVector.size(); + if (data->variablesLength == 0) { + data->variables = 0; + } else { + data->variables = (UnicodeFunctor**)uprv_malloc(data->variablesLength * sizeof(UnicodeFunctor*)); + data->variablesAreOwned = (i == 0); + } + + for (int32_t j = 0; j < data->variablesLength; j++) { + data->variables[j] = + ((UnicodeSet*)variablesVector.elementAt(j)); + } + + data->variableNames.removeAll(); + int32_t pos = -1; + const UHashElement* he = variableNames.nextElement(pos); + while (he != NULL) { + data->variableNames.put(*((UnicodeString*)(he->key.pointer)), + ((UnicodeString*)(he->value.pointer))->clone(), status); + he = variableNames.nextElement(pos); + } + } + variablesVector.removeAllElements(); // keeps them from getting deleted when we succeed + + // Index the rules if (compoundFilter != NULL) { - if ((direction == UTRANS_FORWARD && - compoundFilterOffset != 0) || - (direction == UTRANS_REVERSE && - compoundFilterOffset != idBlockCount)) { + if ((direction == UTRANS_FORWARD && compoundFilterOffset != 1) || + (direction == UTRANS_REVERSE && compoundFilterOffset != ruleCount)) { status = U_MISPLACED_COMPOUND_FILTER; } } - data->ruleSet.freeze(parseError,status); - - if (idSplitPoint < 0) { - idSplitPoint = idBlock.length(); + for (i = 0; i < dataVectorSize; i++) { + TransliterationRuleData* data = (TransliterationRuleData*)dataVector.elementAt(i); + data->ruleSet.freeze(parseError, status); } - - if (ruleCount == 0) { - delete data; - data = NULL; + if (idBlockVector.size() == 1 && ((UnicodeString*)idBlockVector.elementAt(0))->isEmpty()) { + idBlockVector.removeElementAt(0); } } } @@ -1071,14 +1095,17 @@ void TransliteratorParser::parseRules(const UnicodeString& rule, /** * Set the variable range to [start, end] (inclusive). */ -void TransliteratorParser::setVariableRange(int32_t start, int32_t end) { +void TransliteratorParser::setVariableRange(int32_t start, int32_t end, UErrorCode& status) { if (start > end || start < 0 || end > 0xFFFF) { status = U_MALFORMED_PRAGMA; return; } - data->variablesBase = variableNext = (UChar) start; // first private use - variableLimit = (UChar) (end + 1); + curData->variablesBase = (UChar) start; + if (dataVector.size() == 0) { + variableNext = (UChar) start; + variableLimit = (UChar) (end + 1); + } } /** @@ -1087,7 +1114,7 @@ void TransliteratorParser::setVariableRange(int32_t start, int32_t end) { * variable range does not overlap characters used in a rule. */ UBool TransliteratorParser::checkVariableRange(UChar32 ch) const { - return !(ch >= data->variablesBase && ch < variableLimit); + return !(ch >= curData->variablesBase && ch < variableLimit); } /** @@ -1136,7 +1163,7 @@ UBool TransliteratorParser::resemblesPragma(const UnicodeString& rule, int32_t p * @return the position index after the final ';' of the pragma, * or -1 on failure. */ -int32_t TransliteratorParser::parsePragma(const UnicodeString& rule, int32_t pos, int32_t limit) { +int32_t TransliteratorParser::parsePragma(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status) { int32_t array[2]; // resemblesPragma() has already returned true, so we @@ -1151,7 +1178,7 @@ int32_t TransliteratorParser::parsePragma(const UnicodeString& rule, int32_t pos // use nfc rules; int p = ICU_Utility::parsePattern(rule, pos, limit, PRAGMA_VARIABLE_RANGE, array); if (p >= 0) { - setVariableRange(array[0], array[1]); + setVariableRange(array[0], array[1], status); return p; } @@ -1190,7 +1217,7 @@ int32_t TransliteratorParser::parsePragma(const UnicodeString& rule, int32_t pos * indicators. Once it does a lexical breakdown of the rule at pos, it * creates a rule object and adds it to our rule list. */ -int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, int32_t limit) { +int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status) { // Locate the left side, operator, and right side int32_t start = pos; UChar op = 0; @@ -1198,11 +1225,7 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, // Set up segments data segmentStandins.truncate(0); - if (segmentObjects == NULL) { - segmentObjects = new UVector(status); - } else { - segmentObjects->removeAllElements(); - } + segmentObjects.removeAllElements(); // Use pointers to automatics to make swapping possible. RuleHalf _left(*this), _right(*this); @@ -1210,13 +1233,13 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, RuleHalf* right = &_right; undefinedVariableName.remove(); - pos = left->parse(rule, pos, limit); + pos = left->parse(rule, pos, limit, status); if (U_FAILURE(status)) { return start; } if (pos == limit || u_strchr(gOPERATORS, (op = rule.charAt(--pos))) == NULL) { - return syntaxError(U_MISSING_OPERATOR, rule, start); + return syntaxError(U_MISSING_OPERATOR, rule, start, status); } ++pos; @@ -1240,7 +1263,7 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, break; } - pos = right->parse(rule, pos, limit); + pos = right->parse(rule, pos, limit, status); if (U_FAILURE(status)) { return start; } @@ -1250,7 +1273,7 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, ++pos; } else { // RuleHalf parser must have terminated at an operator - return syntaxError(U_UNQUOTED_SPECIAL, rule, start); + return syntaxError(U_UNQUOTED_SPECIAL, rule, start, status); } } @@ -1264,19 +1287,19 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, // defined). if (undefinedVariableName.length() == 0) { // "Missing '$' or duplicate definition" - return syntaxError(U_BAD_VARIABLE_DEFINITION, rule, start); + return syntaxError(U_BAD_VARIABLE_DEFINITION, rule, start, status); } if (left->text.length() != 1 || left->text.charAt(0) != variableLimit) { // "Malformed LHS" - return syntaxError(U_MALFORMED_VARIABLE_DEFINITION, rule, start); + return syntaxError(U_MALFORMED_VARIABLE_DEFINITION, rule, start, status); } if (left->anchorStart || left->anchorEnd || right->anchorStart || right->anchorEnd) { - return syntaxError(U_MALFORMED_VARIABLE_DEFINITION, rule, start); + return syntaxError(U_MALFORMED_VARIABLE_DEFINITION, rule, start, status); } // We allow anything on the right, including an empty string. UnicodeString* value = new UnicodeString(right->text); - data->variableNames->put(undefinedVariableName, value, status); + variableNames.put(undefinedVariableName, value, status); ++variableLimit; return pos; } @@ -1286,21 +1309,21 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, if (undefinedVariableName.length() != 0) { return syntaxError(// "Undefined variable $" + undefinedVariableName, U_UNDEFINED_VARIABLE, - rule, start); + rule, start, status); } // Verify segments - if (segmentStandins.length() > segmentObjects->size()) { - syntaxError(U_UNDEFINED_SEGMENT_REFERENCE, rule, start); + if (segmentStandins.length() > segmentObjects.size()) { + syntaxError(U_UNDEFINED_SEGMENT_REFERENCE, rule, start, status); } for (i=0; i<segmentStandins.length(); ++i) { if (segmentStandins.charAt(i) == 0) { - syntaxError(U_INTERNAL_TRANSLITERATOR_ERROR, rule, start); // will never happen + syntaxError(U_INTERNAL_TRANSLITERATOR_ERROR, rule, start, status); // will never happen } } - for (i=0; i<segmentObjects->size(); ++i) { - if (segmentObjects->elementAt(i) == NULL) { - syntaxError(U_INTERNAL_TRANSLITERATOR_ERROR, rule, start); // will never happen + for (i=0; i<segmentObjects.size(); ++i) { + if (segmentObjects.elementAt(i) == NULL) { + syntaxError(U_INTERNAL_TRANSLITERATOR_ERROR, rule, start, status); // will never happen } } @@ -1353,23 +1376,23 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, !left->isValidInput(*this) || !right->isValidOutput(*this) || left->ante > left->post) { - return syntaxError(U_MALFORMED_RULE, rule, start); + return syntaxError(U_MALFORMED_RULE, rule, start, status); } // Flatten segment objects vector to an array UnicodeFunctor** segmentsArray = NULL; - if (segmentObjects->size() > 0) { - segmentsArray = (UnicodeFunctor **)uprv_malloc(segmentObjects->size() * sizeof(UnicodeFunctor *)); - segmentObjects->toArray((void**) segmentsArray); + if (segmentObjects.size() > 0) { + segmentsArray = (UnicodeFunctor **)uprv_malloc(segmentObjects.size() * sizeof(UnicodeFunctor *)); + segmentObjects.toArray((void**) segmentsArray); } - data->ruleSet.addRule(new TransliterationRule( + curData->ruleSet.addRule(new TransliterationRule( left->text, left->ante, left->post, right->text, right->cursor, right->cursorOffset, segmentsArray, - segmentObjects->size(), + segmentObjects.size(), left->anchorStart, left->anchorEnd, - data, + curData, status), status); return pos; @@ -1385,8 +1408,10 @@ int32_t TransliteratorParser::parseRule(const UnicodeString& rule, int32_t pos, * @param start position of first character of current rule */ int32_t TransliteratorParser::syntaxError(UErrorCode parseErrorCode, - const UnicodeString& rule, - int32_t pos) { + const UnicodeString& rule, + int32_t pos, + UErrorCode& status) +{ parseError.offset = pos; parseError.line = 0 ; /* we are not using line numbers */ @@ -1417,24 +1442,25 @@ int32_t TransliteratorParser::syntaxError(UErrorCode parseErrorCode, * used to represent it. */ UChar TransliteratorParser::parseSet(const UnicodeString& rule, - ParsePosition& pos) { + ParsePosition& pos, + UErrorCode& status) { UnicodeSet* set = new UnicodeSet(rule, pos, USET_IGNORE_SPACE, parseData, status); set->compact(); - return generateStandInFor(set); + return generateStandInFor(set, status); } /** * Generate and return a stand-in for a new UnicodeFunctor. Store * the matcher (adopt it). */ -UChar TransliteratorParser::generateStandInFor(UnicodeFunctor* adopted) { +UChar TransliteratorParser::generateStandInFor(UnicodeFunctor* adopted, UErrorCode& status) { // assert(obj != null); // Look up previous stand-in, if any. This is a short list // (typical n is 0, 1, or 2); linear search is optimal. - for (int32_t i=0; i<variablesVector->size(); ++i) { - if (variablesVector->elementAt(i) == adopted) { // [sic] pointer comparison - return (UChar) (data->variablesBase + i); + for (int32_t i=0; i<variablesVector.size(); ++i) { + if (variablesVector.elementAt(i) == adopted) { // [sic] pointer comparison + return (UChar) (curData->variablesBase + i); } } @@ -1443,16 +1469,16 @@ UChar TransliteratorParser::generateStandInFor(UnicodeFunctor* adopted) { status = U_VARIABLE_RANGE_EXHAUSTED; return 0; } - variablesVector->addElement(adopted, status); + variablesVector.addElement(adopted, status); return variableNext++; } /** * Return the standin for segment seg (1-based). */ -UChar TransliteratorParser::getSegmentStandin(int32_t seg) { +UChar TransliteratorParser::getSegmentStandin(int32_t seg, UErrorCode& status) { // Special character used to indicate an empty spot - UChar empty = data->variablesBase - 1; + UChar empty = curData->variablesBase - 1; while (segmentStandins.length() < seg) { segmentStandins.append(empty); } @@ -1466,7 +1492,7 @@ UChar TransliteratorParser::getSegmentStandin(int32_t seg) { // Set a placeholder in the master variables vector that will be // filled in later by setSegmentObject(). We know that we will get // called first because setSegmentObject() will call us. - variablesVector->addElement((void*) NULL, status); + variablesVector.addElement((void*) NULL, status); segmentStandins.setCharAt(seg-1, c); } return c; @@ -1475,32 +1501,32 @@ UChar TransliteratorParser::getSegmentStandin(int32_t seg) { /** * Set the object for segment seg (1-based). */ -void TransliteratorParser::setSegmentObject(int32_t seg, StringMatcher* adopted) { +void TransliteratorParser::setSegmentObject(int32_t seg, StringMatcher* adopted, UErrorCode& status) { // Since we call parseSection() recursively, nested // segments will result in segment i+1 getting parsed // and stored before segment i; be careful with the // vector handling here. - if (segmentObjects->size() < seg) { - segmentObjects->setSize(seg); + if (segmentObjects.size() < seg) { + segmentObjects.setSize(seg); } - int32_t index = getSegmentStandin(seg) - data->variablesBase; - if (segmentObjects->elementAt(seg-1) != NULL || - variablesVector->elementAt(index) != NULL) { + int32_t index = getSegmentStandin(seg, status) - curData->variablesBase; + if (segmentObjects.elementAt(seg-1) != NULL || + variablesVector.elementAt(index) != NULL) { // should never happen status = U_INTERNAL_TRANSLITERATOR_ERROR; return; } - segmentObjects->setElementAt(adopted, seg-1); - variablesVector->setElementAt(adopted, index); + segmentObjects.setElementAt(adopted, seg-1); + variablesVector.setElementAt(adopted, index); } /** * Return the stand-in for the dot set. It is allocated the first * time and reused thereafter. */ -UChar TransliteratorParser::getDotStandIn() { +UChar TransliteratorParser::getDotStandIn(UErrorCode& status) { if (dotStandIn == (UChar) -1) { - dotStandIn = generateStandInFor(new UnicodeSet(DOT_SET, status)); + dotStandIn = generateStandInFor(new UnicodeSet(DOT_SET, status), status); } return dotStandIn; } @@ -1510,8 +1536,9 @@ UChar TransliteratorParser::getDotStandIn() { * UnicodeString. */ void TransliteratorParser::appendVariableDef(const UnicodeString& name, - UnicodeString& buf) { - const UnicodeString* s = (const UnicodeString*) data->variableNames->get(name); + UnicodeString& buf, + UErrorCode& status) { + const UnicodeString* s = (const UnicodeString*) variableNames.get(name); if (s == NULL) { // We allow one undefined variable so that variable definition // statements work. For the first undefined variable we return @@ -1545,4 +1572,93 @@ Transliterator* TransliteratorParser::createBasicInstance(const UnicodeString& i U_NAMESPACE_END +U_CAPI int32_t +utrans_stripRules(const UChar *source, int32_t sourceLen, UChar *target, UErrorCode *status) { + //const UChar *sourceStart = source; + const UChar *targetStart = target; + const UChar *sourceLimit = source+sourceLen; + UChar *targetLimit = target+sourceLen; + UChar32 c = 0; + UBool quoted = FALSE; + int32_t index; + + uprv_memset(target, 0, sourceLen*U_SIZEOF_UCHAR); + + /* read the rules into the buffer */ + while (source < sourceLimit) + { + index=0; + U16_NEXT_UNSAFE(source, index, c); + source+=index; + if(c == QUOTE) { + quoted = (UBool)!quoted; + } + else if (!quoted) { + if (c == RULE_COMMENT_CHAR) { + /* skip comments and all preceding spaces */ + while (targetStart < target && *(target - 1) == 0x0020) { + target--; + } + do { + c = *(source++); + } + while (c != CR && c != LF); + } + else if (c == ESCAPE) { + UChar32 c2 = *source; + if (c2 == CR || c2 == LF) { + /* A backslash at the end of a line. */ + /* Since we're stripping lines, ignore the backslash. */ + source++; + continue; + } + if (c2 == 0x0075 && source+5 < sourceLimit) { /* \u seen. \U isn't unescaped. */ + int32_t escapeOffset = 0; + UnicodeString escapedStr(source, 5); + c2 = escapedStr.unescapeAt(escapeOffset); + + if (c2 == (UChar32)0xFFFFFFFF || escapeOffset == 0) + { + *status = U_PARSE_ERROR; + return 0; + } + if (!uprv_isRuleWhiteSpace(c2) && !u_iscntrl(c2) && !u_ispunct(c2)) { + /* It was escaped for a reason. Write what it was suppose to be. */ + source+=5; + c = c2; + } + } + else if (c2 == QUOTE) { + /* \' seen. Make sure we don't do anything when we see it again. */ + quoted = (UBool)!quoted; + } + } + } + if (c == CR || c == LF) + { + /* ignore spaces carriage returns, and all leading spaces on the next line. + * and line feed unless in the form \uXXXX + */ + quoted = FALSE; + while (source < sourceLimit) { + c = *(source); + if (c != CR && c != LF && c != 0x0020) { + break; + } + source++; + } + continue; + } + + /* Append UChar * after dissembling if c > 0xffff*/ + index=0; + U16_APPEND_UNSAFE(target, index, c); + target+=index; + } + if (target < targetLimit) { + *target = 0; + } + return (int32_t)(target-targetStart); +} + #endif /* #if !UCONFIG_NO_TRANSLITERATION */ diff --git a/icuSources/i18n/rbt_pars.h b/icuSources/i18n/rbt_pars.h index d025d00b..a9b11d34 100644 --- a/icuSources/i18n/rbt_pars.h +++ b/icuSources/i18n/rbt_pars.h @@ -1,5 +1,7 @@ /* -* Copyright (C) {1999-2003}, International Business Machines Corporation and others. All Rights Reserved. +********************************************************************** +* Copyright (C) 1999-2006, International Business Machines Corporation +* and others. All Rights Reserved. ********************************************************************** * Date Name Description * 11/17/99 aliu Creation. @@ -11,11 +13,14 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_TRANSLITERATION +#ifdef XP_CPLUSPLUS #include "unicode/uobject.h" #include "unicode/parseerr.h" #include "unicode/unorm.h" #include "rbt.h" +#include "hash.h" +#include "uvector.h" U_NAMESPACE_BEGIN @@ -24,7 +29,6 @@ class UnicodeFunctor; class ParseData; class RuleHalf; class ParsePosition; -class UVector; class StringMatcher; class TransliteratorParser : public UMemory { @@ -32,27 +36,16 @@ class TransliteratorParser : public UMemory { public: /** - * PUBLIC data member containing the parsed data object, or null if - * there were no rules. - */ - TransliterationRuleData* data; - - /** - * PUBLIC data member. - * The block of ::IDs, both at the top and at the bottom. - * Inserted into these may be additional rules at the - * idSplitPoint. + * A Vector of TransliterationRuleData objects, one for each discrete group + * of rules in the rule set */ - UnicodeString idBlock; + UVector dataVector; /** * PUBLIC data member. - * In a compound RBT, the index at which the RBT rules are - * inserted into the ID block. Index 0 means before any IDs - * in the block. Index idBlock.length() means after all IDs - * in the block. Index is a string index. + * A Vector of UnicodeStrings containing all of the ID blocks in the rule set */ - int32_t idSplitPoint; + UVector idBlockVector; /** * PUBLIC data member containing the parsed compound filter, if any. @@ -61,18 +54,12 @@ class TransliteratorParser : public UMemory { private: - // The number of rules parsed. This tells us if there were - // any actual transliterator rules, or if there were just ::ID - // block IDs. - int32_t ruleCount; - - UTransDirection direction; - /** - * We use a single error code during parsing. Rather than pass it - * through each API, we keep it here. + * The current data object for which we are parsing rules */ - UErrorCode status; + TransliterationRuleData* curData; + + UTransDirection direction; /** * Parse error information. @@ -89,8 +76,14 @@ class TransliteratorParser : public UMemory { * is copied into the array data.variables. As with data.variables, * element 0 corresponds to character data.variablesBase. */ - UVector* variablesVector; + UVector variablesVector; + /** + * Temporary table of variable names. When parsing is complete, this is + * copied into data.variableNames. + */ + Hashtable variableNames; + /** * String of standins for segments. Used during the parsing of a single * rule. segmentStandins.charAt(0) is the standin for "$1" and corresponds @@ -104,7 +97,7 @@ class TransliteratorParser : public UMemory { * segmentStandins.charAt(0) is the standin for "$1" and corresponds * to StringMatcher object segmentObjects.elementAt(0), etc. */ - UVector* segmentObjects; + UVector segmentObjects; /** * The next available stand-in for variables. This starts at some point in @@ -142,7 +135,7 @@ public: /** * Constructor. */ - TransliteratorParser(); + TransliteratorParser(UErrorCode &statusReturn); /** * Destructor. @@ -176,12 +169,6 @@ public: */ UnicodeSet* orphanCompoundFilter(); - /** - * Return the data object parsed by parse(). Caller owns result. - * @return the data object parsed by parse(). - */ - TransliterationRuleData* orphanData(); - private: /** @@ -190,7 +177,8 @@ private: * @param direction either FORWARD or REVERSE. */ void parseRules(const UnicodeString& rules, - UTransDirection direction); + UTransDirection direction, + UErrorCode& status); /** * MAIN PARSER. Parse the next rule in the given rule string, starting @@ -209,14 +197,14 @@ private: * @param limit pointer past the last character of the rule. * @return the index after the last character parsed. */ - int32_t parseRule(const UnicodeString& rule, int32_t pos, int32_t limit); + int32_t parseRule(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status); /** * Set the variable range to [start, end] (inclusive). * @param start the start value of the range. * @param end the end value of the range. */ - void setVariableRange(int32_t start, int32_t end); + void setVariableRange(int32_t start, int32_t end, UErrorCode& status); /** * Assert that the given character is NOT within the variable range. @@ -259,7 +247,7 @@ private: * @return the position index after the final ';' of the pragma, * or -1 on failure. */ - int32_t parsePragma(const UnicodeString& rule, int32_t pos, int32_t limit); + int32_t parsePragma(const UnicodeString& rule, int32_t pos, int32_t limit, UErrorCode& status); /** * Called by main parser upon syntax error. Search the rule string @@ -271,7 +259,8 @@ private: * @param start position of first character of current rule. * @return start position of first character of current rule. */ - int32_t syntaxError(UErrorCode parseErrorCode, const UnicodeString&, int32_t start); + int32_t syntaxError(UErrorCode parseErrorCode, const UnicodeString&, int32_t start, + UErrorCode& status); /** * Parse a UnicodeSet out, store it, and return the stand-in character @@ -282,7 +271,8 @@ private: * @return the stand-in character used to represent it. */ UChar parseSet(const UnicodeString& rule, - ParsePosition& pos); + ParsePosition& pos, + UErrorCode& status); /** * Generate and return a stand-in for a new UnicodeFunctor. Store @@ -290,28 +280,28 @@ private: * @param adopted the UnicodeFunctor to be adopted. * @return a stand-in for a new UnicodeFunctor. */ - UChar generateStandInFor(UnicodeFunctor* adopted); + UChar generateStandInFor(UnicodeFunctor* adopted, UErrorCode& status); /** * Return the standin for segment seg (1-based). * @param seg the given segment. * @return the standIn character for the given segment. */ - UChar getSegmentStandin(int32_t seg); + UChar getSegmentStandin(int32_t seg, UErrorCode& status); /** * Set the object for segment seg (1-based). * @param seg the given segment. * @param adopted the StringMatcher to be adopted. */ - void setSegmentObject(int32_t seg, StringMatcher* adopted); + void setSegmentObject(int32_t seg, StringMatcher* adopted, UErrorCode& status); /** * Return the stand-in for the dot set. It is allocated the first * time and reused thereafter. * @return the stand-in for the dot set. */ - UChar getDotStandIn(); + UChar getDotStandIn(UErrorCode& status); /** * Append the value of the given variable name to the given @@ -320,7 +310,8 @@ private: * @param buf the given UnicodeString to append to. */ void appendVariableDef(const UnicodeString& name, - UnicodeString& buf); + UnicodeString& buf, + UErrorCode& status); /** * Glue method to get around access restrictions in C++. @@ -344,6 +335,21 @@ private: U_NAMESPACE_END +#endif /* #ifdef XP_CPLUSPLUS */ + +/** + * Strip/convert the following from the transliterator rules: + * comments + * newlines + * white space at the beginning and end of a line + * unescape \u notation + * + * The target must be equal in size as the source. + * @internal + */ +U_CAPI int32_t +utrans_stripRules(const UChar *source, int32_t sourceLen, UChar *target, UErrorCode *status); + #endif /* #if !UCONFIG_NO_TRANSLITERATION */ #endif diff --git a/icuSources/i18n/rbt_set.cpp b/icuSources/i18n/rbt_set.cpp index 0999cc21..dbc45076 100644 --- a/icuSources/i18n/rbt_set.cpp +++ b/icuSources/i18n/rbt_set.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1999-2004, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -20,7 +20,7 @@ #include "putilimp.h" U_CDECL_BEGIN -static void U_EXPORT2 U_CALLCONV _deleteRule(void *rule) { +static void U_CALLCONV _deleteRule(void *rule) { delete (U_NAMESPACE_QUALIFIER TransliterationRule *)rule; } U_CDECL_END @@ -120,7 +120,7 @@ inline void _debugOut(const char* msg, TransliterationRule* rule, UnicodeString esc; _escape(buf, esc); CharString cbuf(esc); - printf("%s\n", (char*) cbuf); + printf("%s\n", (const char*) cbuf); } #else diff --git a/icuSources/i18n/regexcmp.cpp b/icuSources/i18n/regexcmp.cpp index f126adb4..5d71d29f 100644 --- a/icuSources/i18n/regexcmp.cpp +++ b/icuSources/i18n/regexcmp.cpp @@ -2,7 +2,7 @@ // // file: regexcmp.cpp // -// Copyright (C) 2002-2004 International Business Machines Corporation and others. +// Copyright (C) 2002-2006 International Business Machines Corporation and others. // All Rights Reserved. // // This file contains the ICU regular expression compiler, which is responsible @@ -43,11 +43,11 @@ U_NAMESPACE_BEGIN -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // Constructor. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ RegexCompile::RegexCompile(RegexPattern *rxp, UErrorCode &status) : fParenStack(status) { fStatus = &status; @@ -60,7 +60,7 @@ RegexCompile::RegexCompile(RegexPattern *rxp, UErrorCode &status) : fParenStack( fCharNum = 0; fQuoteMode = FALSE; fInBackslashQuote = FALSE; - fModeFlags = fRXPat->fFlags; + fModeFlags = fRXPat->fFlags | 0x80000000; fEOLComments = TRUE; fMatchOpenParen = -1; @@ -74,22 +74,22 @@ RegexCompile::RegexCompile(RegexPattern *rxp, UErrorCode &status) : fParenStack( -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // Destructor // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ RegexCompile::~RegexCompile() { } -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // Compile regex pattern. The state machine for rexexp pattern parsing is here. // The state tables are hand-written in the file regexcst.txt, // and converted to the form used here by a perl // script regexcst.pl // -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::compile( const UnicodeString &pat, // Source pat to be compiled. UParseError &pp, // Error position info @@ -311,7 +311,7 @@ void RegexCompile::compile( -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // doParseAction Do some action during regex pattern parsing. // Called by the parse state machine. @@ -320,7 +320,7 @@ void RegexCompile::compile( // in functions called from the parse actions defined here. // // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ UBool RegexCompile::doParseActions(EParseAction action) { UBool returnVal = TRUE; @@ -339,11 +339,10 @@ UBool RegexCompile::doParseActions(EParseAction action) fRXPat->fCompiledPat->addElement(URX_BUILD(URX_STATE_SAVE, 2), *fStatus); fRXPat->fCompiledPat->addElement(URX_BUILD(URX_JMP, 3), *fStatus); fRXPat->fCompiledPat->addElement(URX_BUILD(URX_FAIL, 0), *fStatus); - fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); - fRXPat->fCompiledPat->addElement(URX_BUILD(URX_NOP, 0), *fStatus); - fParenStack.push(-1, *fStatus); // Begin a Paren Stack Frame - fParenStack.push( 3, *fStatus); // Push location of first NOP + // Standard open nonCapture paren action emits the two NOPs and + // sets up the paren stack frame. + doParseActions((EParseAction)doOpenNonCaptureParen); break; case doPatFinish: @@ -1333,6 +1332,7 @@ UBool RegexCompile::doParseActions(EParseAction action) case doSetMatchMode: // We've got a (?i) or similar. The match mode is being changed, but // the change is not scoped to a parenthesized block. + U_ASSERT(fNewModeFlags < 0); fModeFlags = fNewModeFlags; // Prevent any string from spanning across the change of match mode. @@ -1363,6 +1363,7 @@ UBool RegexCompile::doParseActions(EParseAction action) fParenStack.push(fRXPat->fCompiledPat->size()-1, *fStatus); // The second NOP // Set the current mode flags to the new values. + U_ASSERT(fNewModeFlags < 0); fModeFlags = fNewModeFlags; } break; @@ -1391,7 +1392,7 @@ UBool RegexCompile::doParseActions(EParseAction action) } return returnVal; -}; +} @@ -1620,6 +1621,7 @@ void RegexCompile::insertOp(int32_t where) { // the compiled pattern. (Negative values are frame boundaries, and don't need fixing.) for (loc=0; loc<fParenStack.size(); loc++) { int32_t x = fParenStack.elementAti(loc); + U_ASSERT(x < code->size()); if (x>where) { x++; fParenStack.setElementAt(x, loc); @@ -1691,7 +1693,7 @@ int32_t RegexCompile::blockTopLoc(UBool reserveLoc) { // This function is called both when encountering a // real ) and at the end of the pattern. // -//------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::handleCloseParen() { int32_t patIdx; int32_t patOp; @@ -1726,6 +1728,7 @@ void RegexCompile::handleCloseParen() { // the value they had at the open paren. Saved value is // at the top of the paren stack. fModeFlags = fParenStack.popi(); + U_ASSERT(fModeFlags < 0); // DO any additional fixups, depending on the specific kind of // parentesized grouping this is @@ -1877,12 +1880,12 @@ void RegexCompile::handleCloseParen() { -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // compileSet Compile the pattern operations for a reference to a // UnicodeSet. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::compileSet(UnicodeSet *theSet) { if (theSet == NULL) { @@ -1929,7 +1932,7 @@ void RegexCompile::compileSet(UnicodeSet *theSet) } -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // compileInterval Generate the code for a {min, max} style interval quantifier. // Except for the specific opcodes used, the code is the same @@ -1945,7 +1948,7 @@ void RegexCompile::compileSet(UnicodeSet *theSet) // 5 CTR_LOOP // // In -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::compileInterval(int32_t InitOp, int32_t LoopOp) { // The CTR_INIT op at the top of the block with the {n,m} quantifier takes @@ -2049,7 +2052,7 @@ UBool RegexCompile::compileInlineInterval() { -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // matchStartType Determine how a match can start. // Used to optimize find() operations. @@ -2059,7 +2062,7 @@ UBool RegexCompile::compileInlineInterval() { // op where the min match coming in is zero, add that ops possible // starting matches to the possible starts for the overall pattern. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::matchStartType() { if (U_FAILURE(*fStatus)) { return; @@ -2240,7 +2243,7 @@ void RegexCompile::matchStartType() { // character may have distinct cased forms. Add all of them // to the set of possible starting match chars. UnicodeSet s(c, c); - s.closeOver(USET_CASE); + s.closeOver(USET_CASE_INSENSITIVE); fRXPat->fInitialChars->addAll(s); } else { // Char has no case variants. Just add it as-is to the @@ -2366,7 +2369,7 @@ void RegexCompile::matchStartType() { int32_t stringStartIdx = URX_VAL(op); UChar32 c = fRXPat->fLiteralText.char32At(stringStartIdx); UnicodeSet s(c, c); - s.closeOver(USET_CASE); + s.closeOver(USET_CASE_INSENSITIVE); fRXPat->fInitialChars->addAll(s); numInitialStrings += 2; // Matching on an initial string not possible. } @@ -2519,7 +2522,7 @@ void RegexCompile::matchStartType() { -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // minMatchLength Calculate the length of the shortest string that could // match the specified pattern. @@ -2532,7 +2535,7 @@ void RegexCompile::matchStartType() { // start and end are the range of p-code operations to be // examined. The endpoints are included in the range. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) { if (U_FAILURE(*fStatus)) { return 0; @@ -2771,7 +2774,7 @@ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) { -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // maxMatchLength Calculate the length of the longest string that could // match the specified pattern. @@ -2781,7 +2784,7 @@ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) { // value may be longer than the actual maximum; it must // never be shorter. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) { if (U_FAILURE(*fStatus)) { return 0; @@ -2958,8 +2961,8 @@ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) { // End of look-ahead ops should always be consumed by the processing at // the URX_LA_START op. - U_ASSERT(FALSE); - break; + // U_ASSERT(FALSE); + // break; case URX_LB_START: { @@ -3000,14 +3003,14 @@ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) { } -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // stripNOPs Remove any NOP operations from the compiled pattern code. // Extra NOPs are inserted for some constructs during the initial // code generation to provide locations that may be patched later. // Many end up unneeded, and are removed by this function. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::stripNOPs() { if (U_FAILURE(*fStatus)) { @@ -3125,7 +3128,7 @@ void RegexCompile::stripNOPs() { -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // OptDotStar Optimize patterns that end with a '.*' or '.+' to // just advance the input to the end. @@ -3142,7 +3145,7 @@ void RegexCompile::stripNOPs() { // [NOP | END_CAPTURE | DOLLAR | BACKSLASH_Z]* // END // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::OptDotStar() { // Scan backwards in the pattern, looking for a JMP_SAV near the end. int32_t jmpLoc; @@ -3202,12 +3205,12 @@ void RegexCompile::OptDotStar() { } -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // Error Report a rule parse error. // Only report it if no previous error has been recorded. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::error(UErrorCode e) { if (U_SUCCESS(*fStatus)) { *fStatus = e; @@ -3235,27 +3238,24 @@ static const UChar chCR = 0x0d; // New lines, for terminating c static const UChar chLF = 0x0a; static const UChar chNEL = 0x85; // NEL newline variant static const UChar chLS = 0x2028; // Unicode Line Separator -static const UChar chApos = 0x27; // single quote, for quoted chars. static const UChar chPound = 0x23; // '#', introduces a comment. static const UChar chE = 0x45; // 'E' +static const UChar chUpperN = 0x4E; +static const UChar chLowerP = 0x70; +static const UChar chUpperP = 0x50; static const UChar chBackSlash = 0x5c; // '\' introduces a char escape -static const UChar chLParen = 0x28; -static const UChar chRParen = 0x29; static const UChar chLBracket = 0x5b; static const UChar chRBracket = 0x5d; static const UChar chRBrace = 0x7d; -static const UChar chUpperN = 0x4E; -static const UChar chLowerP = 0x70; -static const UChar chUpperP = 0x50; -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // nextCharLL Low Level Next Char from the regex pattern. // Get a char from the string, keep track of input position // for error reporting. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ UChar32 RegexCompile::nextCharLL() { UChar32 ch; UnicodeString &pattern = fRXPat->fPattern; @@ -3295,12 +3295,12 @@ UChar32 RegexCompile::nextCharLL() { return ch; } -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // peekCharLL Low Level Character Scanning, sneak a peek at the next // character without actually getting it. // -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ UChar32 RegexCompile::peekCharLL() { if (fPeekChar == -1) { fPeekChar = nextCharLL(); @@ -3309,13 +3309,13 @@ UChar32 RegexCompile::peekCharLL() { } -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // nextChar for pattern scanning. At this level, we handle stripping // out comments and processing some backslash character escapes. // The rest of the pattern grammar is handled at the next level up. // -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ void RegexCompile::nextChar(RegexPatternChar &c) { fScanIndex = fNextIndex; @@ -3411,7 +3411,7 @@ void RegexCompile::nextChar(RegexPatternChar &c) { -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // scanSet Construct a UnicodeSet from the text at the current scan // position. Advance the scan position to the first character @@ -3421,11 +3421,10 @@ void RegexCompile::nextChar(RegexPatternChar &c) { // that controls pattern parsing. UnicodeSets, however, are parsed by // the UnicodeSet constructor, not by the Regex pattern parser. // -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ UnicodeSet *RegexCompile::scanSet() { UnicodeSet *uset = NULL; ParsePosition pos; - int startPos; int i; if (U_FAILURE(*fStatus)) { @@ -3433,7 +3432,6 @@ UnicodeSet *RegexCompile::scanSet() { } pos.setIndex(fScanIndex); - startPos = fScanIndex; UErrorCode localStatus = U_ZERO_ERROR; uint32_t usetFlags = 0; if (fModeFlags & UREGEX_CASE_INSENSITIVE) { @@ -3466,10 +3464,10 @@ UnicodeSet *RegexCompile::scanSet() { } return uset; -}; +} -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // scanProp Construct a UnicodeSet from the text at the current scan // position, which will be of the form \p{whaterver} @@ -3480,7 +3478,7 @@ UnicodeSet *RegexCompile::scanSet() { // Return a UnicodeSet, constructed from the \P pattern, // or NULL if the pattern is invalid. // -//--------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ UnicodeSet *RegexCompile::scanProp() { UnicodeSet *uset = NULL; @@ -3525,7 +3523,8 @@ UnicodeSet *RegexCompile::scanProp() { nextChar(fC); // Continue overall regex pattern processing with char after the '}' return uset; -}; +} U_NAMESPACE_END #endif // !UCONFIG_NO_REGULAR_EXPRESSIONS + diff --git a/icuSources/i18n/regexcmp.h b/icuSources/i18n/regexcmp.h index 6d93f5a8..3f42c875 100644 --- a/icuSources/i18n/regexcmp.h +++ b/icuSources/i18n/regexcmp.h @@ -1,7 +1,7 @@ // // regexcmp.h // -// Copyright (C) 2002-2003, International Business Machines Corporation and others. +// Copyright (C) 2002-2005, International Business Machines Corporation and others. // All Rights Reserved. // // This file contains declarations for the class RegexCompile @@ -130,8 +130,8 @@ private: UBool fInBackslashQuote; // Scan is between a '\' and the following char. UBool fEOLComments; // When scan is just after '(?', inhibit #... to // end of line comments, in favor of (?#...) comments. - int fLineNum; // Line number in input file. - int fCharNum; // Char position within the line. + int32_t fLineNum; // Line number in input file. + int32_t fCharNum; // Char position within the line. UChar32 fLastChar; // Previous char, needed to count CR-LF // as a single line, not two. UChar32 fPeekChar; // Saved char, if we've scanned ahead. @@ -147,13 +147,16 @@ private: // parsing. index by p[state][char-class] uint16_t fStack[kStackSize]; // State stack, holds state pushes - int fStackPtr; // and pops as specified in the state + int32_t fStackPtr; // and pops as specified in the state // transition rules. // // Data associated with the generation of the pcode for the match engine // int32_t fModeFlags; // Match Flags. (Case Insensitive, etc.) + // Always has high bit (31) set so that flag values + // on the paren stack are distinguished from relocatable + // pcode addresses. int32_t fNewModeFlags; // New flags, while compiling (?i, holds state // until last flag is scanned. UBool fSetModeFlag; // true for (?ismx, false for (?-ismx diff --git a/icuSources/i18n/regeximp.h b/icuSources/i18n/regeximp.h index 5446e88f..fbf70067 100644 --- a/icuSources/i18n/regeximp.h +++ b/icuSources/i18n/regeximp.h @@ -1,5 +1,5 @@ // -// Copyright (C) 2002-2004 International Business Machines Corporation +// Copyright (C) 2002-2005 International Business Machines Corporation // and others. All rights reserved. // // file: regeximp.h @@ -318,15 +318,15 @@ inline Regex8BitSet::Regex8BitSet() { inline UBool Regex8BitSet::contains(UChar32 c) { // No bounds checking! This is deliberate. return ((d[c>>3] & 1 <<(c&7)) != 0); -}; +} inline void Regex8BitSet::add(UChar32 c) { d[c>>3] |= 1 << (c&7); -}; +} inline void Regex8BitSet::init(const UnicodeSet *s) { if (s != NULL) { - for (int i=0; i<=255; i++) { + for (int32_t i=0; i<=255; i++) { if (s->contains(i)) { this->add(i); } diff --git a/icuSources/i18n/rematch.cpp b/icuSources/i18n/rematch.cpp index aabbadf9..294833ec 100644 --- a/icuSources/i18n/rematch.cpp +++ b/icuSources/i18n/rematch.cpp @@ -6,7 +6,7 @@ // /* ************************************************************************** -* Copyright (C) 2002-2004 International Business Machines Corporation * +* Copyright (C) 2002-2005 International Business Machines Corporation * * and others. All rights reserved. * ************************************************************************** */ @@ -271,7 +271,7 @@ int32_t RegexMatcher::end(UErrorCode &err) const { -int32_t RegexMatcher::end(int group, UErrorCode &err) const { +int32_t RegexMatcher::end(int32_t group, UErrorCode &err) const { if (U_FAILURE(err)) { return -1; } @@ -454,7 +454,7 @@ UBool RegexMatcher::find() { for (;;) { c = inputBuf[startPos-1]; if (((c & 0x7f) <= 0x29) && // First quickly bypass as many chars as possible - (c == 0x0a || c == 0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029 )) { + ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029 )) { if (c == 0x0d && startPos < inputLen && inputBuf[startPos] == 0x0a) { startPos++; } @@ -793,7 +793,7 @@ int32_t RegexMatcher::split(const UnicodeString &input, // // Loop through the input text, searching for the delimiter pattern // - int i; + int32_t i; int32_t numCaptureGroups = fPattern->fGroupMap->size(); for (i=0; ; i++) { if (i>=destCapacity-1) { @@ -859,7 +859,7 @@ int32_t RegexMatcher::start(UErrorCode &status) const { -int32_t RegexMatcher::start(int group, UErrorCode &status) const { +int32_t RegexMatcher::start(int32_t group, UErrorCode &status) const { if (U_FAILURE(status)) { return -1; } @@ -911,7 +911,7 @@ REStackFrame *RegexMatcher::resetStack() { fStack->removeAllElements(); int32_t *iFrame = fStack->reserveBlock(fPattern->fFrameSize, fDeferredStatus); - int i; + int32_t i; for (i=0; i<fPattern->fFrameSize; i++) { iFrame[i] = -1; } @@ -1049,7 +1049,7 @@ void RegexMatcher::MatchAt(int32_t startIdx, UErrorCode &status) { { printf("MatchAt(startIdx=%d)\n", startIdx); printf("Original Pattern: "); - int i; + int32_t i; for (i=0; i<fPattern->fPattern.length(); i++) { printf("%c", fPattern->fPattern.charAt(i)); } @@ -1181,8 +1181,6 @@ void RegexMatcher::MatchAt(int32_t startIdx, UErrorCode &status) { break; } } - break; - } break; @@ -1234,7 +1232,7 @@ void RegexMatcher::MatchAt(int32_t startIdx, UErrorCode &status) { // end of input, succeed. if (fp->fInputIdx == inputLen-1) { UChar32 c = fInput->char32At(fp->fInputIdx); - if (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029) { + if ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029) { // If not in the middle of a CR/LF sequence if ( !(c==0x0a && fp->fInputIdx>0 && inputBuf[fp->fInputIdx-1]==0x0d)) { break; @@ -1263,7 +1261,7 @@ void RegexMatcher::MatchAt(int32_t startIdx, UErrorCode &status) { // If we are positioned just before a new-line, succeed. // It makes no difference where the new-line is within the input. UChar32 c = inputBuf[fp->fInputIdx]; - if (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029) { + if ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029) { // At a line end, except for the odd chance of being in the middle of a CR/LF sequence if ( !(c==0x0a && fp->fInputIdx>0 && inputBuf[fp->fInputIdx-1]==0x0d)) { break; // At new-line at end of input. Success @@ -1293,7 +1291,7 @@ void RegexMatcher::MatchAt(int32_t startIdx, UErrorCode &status) { // unless we are at the end of input UChar c = inputBuf[fp->fInputIdx - 1]; if ((fp->fInputIdx < inputLen) && - (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029)) { + ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029)) { // It's a new-line. ^ is true. Success. break; } @@ -1545,7 +1543,7 @@ GC_Done: UChar32 c; U16_NEXT(inputBuf, fp->fInputIdx, inputLen, c); if (((c & 0x7f) <= 0x29) && // First quickly bypass as many chars as possible - (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029)) { + ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029)) { // End of line in normal mode. . does not match. fp = (REStackFrame *)fStack->popFrame(frameSize); break; @@ -1589,7 +1587,7 @@ GC_Done: UChar32 c; U16_NEXT(inputBuf, fp->fInputIdx, inputLen, c); if (((c & 0x7f) <= 0x29) && // First quickly bypass as many chars as possible - (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029)) { + ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029)) { // End of line in normal mode. . does not match. fp = (REStackFrame *)fStack->popFrame(frameSize); break; @@ -1600,7 +1598,7 @@ GC_Done: while (fp->fInputIdx < inputLen) { U16_NEXT(inputBuf, fp->fInputIdx, inputLen, c); if (((c & 0x7f) <= 0x29) && // First quickly bypass as many chars as possible - (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029)) { + ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029)) { U16_BACK_1(inputBuf, 0, fp->fInputIdx) // Scan has reached a line-end. We are done. break; @@ -2187,7 +2185,7 @@ GC_Done: UChar32 c; U16_NEXT(inputBuf, ix, inputLen, c); // c = inputBuf[ix++] if (((c & 0x7f) <= 0x29) && - (c == 0x0a || c==0x0d || c==0x0c || c==0x85 ||c==0x2028 || c==0x2029)) { + ((c<=0x0d && c>=0x0a) || c==0x85 ||c==0x2028 || c==0x2029)) { // char is a line ending. Put the input pos back to the // line ending char, and exit the scanning loop. U16_BACK_1(inputBuf, 0, ix); diff --git a/icuSources/i18n/remtrans.cpp b/icuSources/i18n/remtrans.cpp index 5c97883e..d4e616e1 100644 --- a/icuSources/i18n/remtrans.cpp +++ b/icuSources/i18n/remtrans.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2003, International Business Machines +* Copyright (c) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -13,39 +13,44 @@ #if !UCONFIG_NO_TRANSLITERATION #include "remtrans.h" +#include "unicode/unifilt.h" -static const UChar ID[] = {65, 110, 121, 45, 0x52, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x00}; /* "Any-Remove" */ +static const UChar CURR_ID[] = {65, 110, 121, 45, 0x52, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x00}; /* "Any-Remove" */ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RemoveTransliterator) +/** + * Factory method + */ +static Transliterator* RemoveTransliterator_create(const UnicodeString& /*ID*/, + Transliterator::Token /*context*/) { + /* We don't need the ID or context. We just remove data */ + return new RemoveTransliterator(); +} + /** * System registration hook. */ void RemoveTransliterator::registerIDs() { - Transliterator::_registerFactory(::ID, _create, integerToken(0)); + Transliterator::_registerFactory(::CURR_ID, RemoveTransliterator_create, integerToken(0)); Transliterator::_registerSpecialInverse(UNICODE_STRING_SIMPLE("Remove"), UNICODE_STRING_SIMPLE("Null"), FALSE); } -/** - * Factory method - */ -Transliterator* RemoveTransliterator::_create(const UnicodeString& /*ID*/, - Token /*context*/) { - /* We don't need the ID or context. We just remove data */ - return new RemoveTransliterator(); -} - -RemoveTransliterator::RemoveTransliterator() : Transliterator(::ID, 0) {} +RemoveTransliterator::RemoveTransliterator() : Transliterator(::CURR_ID, 0) {} RemoveTransliterator::~RemoveTransliterator() {} Transliterator* RemoveTransliterator::clone(void) const { - return new RemoveTransliterator(); + Transliterator* result = new RemoveTransliterator(); + if (getFilter() != 0) { + result->adoptFilter((UnicodeFilter*)(getFilter()->clone())); + } + return result; } void RemoveTransliterator::handleTransliterate(Replaceable& text, UTransPosition& index, diff --git a/icuSources/i18n/remtrans.h b/icuSources/i18n/remtrans.h index d63cd13e..24633238 100644 --- a/icuSources/i18n/remtrans.h +++ b/icuSources/i18n/remtrans.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -61,24 +61,14 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); - private: - - /** - * Factory method - */ - static Transliterator* _create(const UnicodeString& ID, Token context); }; U_NAMESPACE_END diff --git a/icuSources/i18n/repattrn.cpp b/icuSources/i18n/repattrn.cpp index ba0c4ae2..bcd11078 100644 --- a/icuSources/i18n/repattrn.cpp +++ b/icuSources/i18n/repattrn.cpp @@ -3,7 +3,7 @@ // /* *************************************************************************** -* Copyright (C) 2002-2004 International Business Machines Corporation * +* Copyright (C) 2002-2006 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** */ @@ -36,7 +36,7 @@ RegexPattern::RegexPattern() { // Lazy init of all shared global sets. RegexStaticSets::initGlobals(&fDeferredStatus); -}; +} //-------------------------------------------------------------------------- @@ -200,7 +200,7 @@ void RegexPattern::zap() { //-------------------------------------------------------------------------- RegexPattern::~RegexPattern() { zap(); -}; +} //-------------------------------------------------------------------------- @@ -211,7 +211,7 @@ RegexPattern::~RegexPattern() { RegexPattern *RegexPattern::clone() const { RegexPattern *copy = new RegexPattern(*this); return copy; -}; +} //-------------------------------------------------------------------------- @@ -271,7 +271,7 @@ RegexPattern::compile(const UnicodeString ®ex, compiler.compile(regex, pe, status); return This; -}; +} // // compile with default flags. @@ -322,8 +322,9 @@ RegexMatcher *RegexPattern::matcher(const UnicodeString &input, retMatcher->reset(input); } return retMatcher; -}; +} +#if 0 RegexMatcher *RegexPattern::matcher(const UChar * /*input*/, UErrorCode &status) const { @@ -333,7 +334,7 @@ RegexMatcher *RegexPattern::matcher(const UChar * /*input*/, } return NULL; } - +#endif //--------------------------------------------------------------------- // @@ -357,7 +358,7 @@ RegexMatcher *RegexPattern::matcher(UErrorCode &status) const { return NULL; } return retMatcher; -}; +} diff --git a/icuSources/i18n/search.cpp b/icuSources/i18n/search.cpp index c190e94b..91ece06b 100644 --- a/icuSources/i18n/search.cpp +++ b/icuSources/i18n/search.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001 IBM and others. All rights reserved. +* Copyright (C) 2001-2005 IBM and others. All rights reserved. ********************************************************************** * Date Name Description * 03/22/2000 helena Creation. @@ -315,6 +315,7 @@ SearchIterator::SearchIterator() m_search_->matchedLength = 0; m_search_->text = NULL; m_search_->textLength = 0; + m_breakiterator_ = NULL; } SearchIterator::SearchIterator(const UnicodeString &text, diff --git a/icuSources/i18n/simpletz.cpp b/icuSources/i18n/simpletz.cpp index 393d339d..111ca43f 100644 --- a/icuSources/i18n/simpletz.cpp +++ b/icuSources/i18n/simpletz.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2003, International Business Machines Corporation and * +* Copyright (C) 1997-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -27,6 +27,7 @@ #include "unicode/simpletz.h" #include "unicode/gregocal.h" +#include "unicode/smpdtfmt.h" U_NAMESPACE_BEGIN @@ -822,7 +823,7 @@ SimpleTimeZone::decodeStartRule(UErrorCode& status) status = U_ILLEGAL_ARGUMENT_ERROR; return; } - } else if (startDay > STATICMONTHLENGTH[startMonth]) { + } else if (startDay<1 || startDay > STATICMONTHLENGTH[startMonth]) { status = U_ILLEGAL_ARGUMENT_ERROR; return; } @@ -877,7 +878,7 @@ SimpleTimeZone::decodeEndRule(UErrorCode& status) status = U_ILLEGAL_ARGUMENT_ERROR; return; } - } else if (endDay > STATICMONTHLENGTH[endMonth]) { + } else if (endDay<1 || endDay > STATICMONTHLENGTH[endMonth]) { status = U_ILLEGAL_ARGUMENT_ERROR; return; } diff --git a/icuSources/i18n/smpdtfmt.cpp b/icuSources/i18n/smpdtfmt.cpp index f4e81130..28a0247f 100644 --- a/icuSources/i18n/smpdtfmt.cpp +++ b/icuSources/i18n/smpdtfmt.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -92,13 +92,15 @@ static const UChar QUOTE = 0x27; // Single quote SimpleDateFormat::~SimpleDateFormat() { delete fSymbols; + delete parsedTimeZone; // sanity check } //---------------------------------------------------------------------- SimpleDateFormat::SimpleDateFormat(UErrorCode& status) : fLocale(Locale::getDefault()), - fSymbols(NULL) + fSymbols(NULL), + parsedTimeZone(NULL) { construct(kShort, (EStyle) (kShort + kDateOffset), fLocale, status); initializeDefaultCentury(); @@ -110,7 +112,8 @@ SimpleDateFormat::SimpleDateFormat(const UnicodeString& pattern, UErrorCode &status) : fPattern(pattern), fLocale(Locale::getDefault()), - fSymbols(NULL) + fSymbols(NULL), + parsedTimeZone(NULL) { initializeSymbols(fLocale, initializeCalendar(NULL,fLocale,status), status); initialize(fLocale, status); @@ -123,7 +126,8 @@ SimpleDateFormat::SimpleDateFormat(const UnicodeString& pattern, const Locale& locale, UErrorCode& status) : fPattern(pattern), - fLocale(locale) + fLocale(locale), + parsedTimeZone(NULL) { initializeSymbols(fLocale, initializeCalendar(NULL,fLocale,status), status); initialize(fLocale, status); @@ -137,7 +141,8 @@ SimpleDateFormat::SimpleDateFormat(const UnicodeString& pattern, UErrorCode& status) : fPattern(pattern), fLocale(Locale::getDefault()), - fSymbols(symbolsToAdopt) + fSymbols(symbolsToAdopt), + parsedTimeZone(NULL) { initializeCalendar(NULL,fLocale,status); initialize(fLocale, status); @@ -151,7 +156,8 @@ SimpleDateFormat::SimpleDateFormat(const UnicodeString& pattern, UErrorCode& status) : fPattern(pattern), fLocale(Locale::getDefault()), - fSymbols(new DateFormatSymbols(symbols)) + fSymbols(new DateFormatSymbols(symbols)), + parsedTimeZone(NULL) { initializeCalendar(NULL, fLocale, status); initialize(fLocale, status); @@ -166,7 +172,8 @@ SimpleDateFormat::SimpleDateFormat(EStyle timeStyle, const Locale& locale, UErrorCode& status) : fLocale(locale), - fSymbols(NULL) + fSymbols(NULL), + parsedTimeZone(NULL) { construct(timeStyle, dateStyle, fLocale, status); if(U_SUCCESS(status)) { @@ -185,7 +192,8 @@ SimpleDateFormat::SimpleDateFormat(const Locale& locale, UErrorCode& status) : fPattern(gDefaultPattern), fLocale(locale), - fSymbols(NULL) + fSymbols(NULL), + parsedTimeZone(NULL) { if (U_FAILURE(status)) return; initializeSymbols(fLocale, initializeCalendar(NULL, fLocale, status),status); @@ -212,7 +220,8 @@ SimpleDateFormat::SimpleDateFormat(const Locale& locale, SimpleDateFormat::SimpleDateFormat(const SimpleDateFormat& other) : DateFormat(other), - fSymbols(NULL) + fSymbols(NULL), + parsedTimeZone(NULL) { *this = other; } @@ -226,6 +235,8 @@ SimpleDateFormat& SimpleDateFormat::operator=(const SimpleDateFormat& other) delete fSymbols; fSymbols = NULL; + delete parsedTimeZone; parsedTimeZone = NULL; + if (other.fSymbols) fSymbols = new DateFormatSymbols(*other.fSymbols); @@ -254,11 +265,11 @@ SimpleDateFormat::operator==(const Format& other) const if (DateFormat::operator==(other)) { // DateFormat::operator== guarantees following cast is safe SimpleDateFormat* that = (SimpleDateFormat*)&other; - return (fPattern == that->fPattern && + return (fPattern == that->fPattern && fSymbols != NULL && // Check for pathological object - that->fSymbols != NULL && // Check for pathological object - *fSymbols == *that->fSymbols && - fHaveDefaultCentury == that->fHaveDefaultCentury && + that->fSymbols != NULL && // Check for pathological object + *fSymbols == *that->fSymbols && + fHaveDefaultCentury == that->fHaveDefaultCentury && fDefaultCenturyStart == that->fDefaultCenturyStart); } return FALSE; @@ -276,6 +287,7 @@ void SimpleDateFormat::construct(EStyle timeStyle, // We will need the calendar to know what type of symbols to load. initializeCalendar(NULL, locale, status); + if (U_FAILURE(status)) return; CalendarData calData(locale, fCalendar?fCalendar->getType():NULL, status); UResourceBundle *dateTimePatterns = calData.getByKey(gDateTimePatternsTag, status); @@ -346,10 +358,13 @@ void SimpleDateFormat::construct(EStyle timeStyle, Calendar* SimpleDateFormat::initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status) { - if(!U_FAILURE(status)) { - fCalendar = Calendar::createInstance(adoptZone?adoptZone:TimeZone::createDefault(), locale, status); - } - return fCalendar; + if(!U_FAILURE(status)) { + fCalendar = Calendar::createInstance(adoptZone?adoptZone:TimeZone::createDefault(), locale, status); + } + if (U_SUCCESS(status) && fCalendar == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + return fCalendar; } void @@ -369,13 +384,6 @@ SimpleDateFormat::initialize(const Locale& locale, { if (U_FAILURE(status)) return; - // {sfb} should this be here? - if (fSymbols->fZoneStringsColCount < 1) - { - status = U_INVALID_FORMAT_ERROR; // Check for bogus locale data - return; - } - // We don't need to check that the row count is >= 1, since all 2d arrays have at // least one row fNumberFormat = NumberFormat::createInstance(locale, status); @@ -523,7 +531,12 @@ SimpleDateFormat::fgPatternIndexToCalendarField[] = /*wWa*/ UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_AM_PM, /*hKz*/ UCAL_HOUR, UCAL_HOUR, UCAL_ZONE_OFFSET, /*Yeu*/ UCAL_YEAR_WOY, UCAL_DOW_LOCAL, UCAL_EXTENDED_YEAR, - /*gAZ*/ UCAL_JULIAN_DAY, UCAL_MILLISECONDS_IN_DAY, UCAL_ZONE_OFFSET + /*gAZ*/ UCAL_JULIAN_DAY, UCAL_MILLISECONDS_IN_DAY, UCAL_ZONE_OFFSET, + /*v*/ UCAL_ZONE_OFFSET, + /*c*/ UCAL_DAY_OF_WEEK, + /*L*/ UCAL_MONTH, + /*Q*/ UCAL_MONTH, + /*q*/ UCAL_MONTH, }; // Map index into pattern character string to DateFormat field number @@ -536,7 +549,12 @@ SimpleDateFormat::fgPatternIndexToDateFormatField[] = { /*wWa*/ UDAT_WEEK_OF_YEAR_FIELD, UDAT_WEEK_OF_MONTH_FIELD, UDAT_AM_PM_FIELD, /*hKz*/ UDAT_HOUR1_FIELD, UDAT_HOUR0_FIELD, UDAT_TIMEZONE_FIELD, /*Yeu*/ UDAT_YEAR_WOY_FIELD, UDAT_DOW_LOCAL_FIELD, UDAT_EXTENDED_YEAR_FIELD, - /*gAZ*/ UDAT_JULIAN_DAY_FIELD, UDAT_MILLISECONDS_IN_DAY_FIELD, UDAT_TIMEZONE_RFC_FIELD + /*gAZ*/ UDAT_JULIAN_DAY_FIELD, UDAT_MILLISECONDS_IN_DAY_FIELD, UDAT_TIMEZONE_RFC_FIELD, + /*v*/ UDAT_TIMEZONE_GENERIC_FIELD, + /*c*/ UDAT_STANDALONE_DAY_FIELD, + /*L*/ UDAT_STANDALONE_MONTH_FIELD, + /*Q*/ UDAT_QUARTER_FIELD, + /*q*/ UDAT_STANDALONE_QUARTER_FIELD, }; //---------------------------------------------------------------------- @@ -545,15 +563,35 @@ SimpleDateFormat::fgPatternIndexToDateFormatField[] = { * Append symbols[value] to dst. Make sure the array index is not out * of bounds. */ -inline void +static inline void _appendSymbol(UnicodeString& dst, int32_t value, const UnicodeString* symbols, int32_t symbolsCount) { - U_ASSERT(value >= 0 && value < symbolsCount); - dst += symbols[value]; + U_ASSERT(0 <= value && value < symbolsCount); + if (0 <= value && value < symbolsCount) { + dst += symbols[value]; + } } +//--------------------------------------------------------------------- +inline void SimpleDateFormat::appendGMT(UnicodeString &appendTo, Calendar& cal, UErrorCode& status) const{ + int32_t value = cal.get(UCAL_ZONE_OFFSET, status) + + cal.get(UCAL_DST_OFFSET, status); + + if (value < 0) { + appendTo += gGmtMinus; + value = -value; // suppress the '-' sign for text display. + }else{ + appendTo += gGmtPlus; + } + + zeroPaddingNumber(appendTo, (int32_t)(value/U_MILLIS_PER_HOUR), 2, 2); + appendTo += (UChar)0x003A /*':'*/; + zeroPaddingNumber(appendTo, (int32_t)((value%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), 2, 2); +} + +//--------------------------------------------------------------------- void SimpleDateFormat::subFormat(UnicodeString &appendTo, UChar ch, @@ -591,8 +629,12 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, switch (patternCharIndex) { // for any "G" symbol, write out the appropriate era string + // "GGGG" is wide era name, anything else is abbreviated name case UDAT_ERA_FIELD: - _appendSymbol(appendTo, value, fSymbols->fEras, fSymbols->fErasCount); + if (count >= 4) + _appendSymbol(appendTo, value, fSymbols->fEraNames, fSymbols->fEraNamesCount); + else + _appendSymbol(appendTo, value, fSymbols->fEras, fSymbols->fErasCount); break; // for "yyyy", write out the whole year; for "yy", write out the last 2 digits @@ -609,8 +651,12 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, // for "MMMM", write out the whole month name, for "MMM", write out the month // abbreviation, for "M" or "MM", write out the month as a number with the // appropriate number of digits + // for "MMMMM", use the narrow form case UDAT_MONTH_FIELD: - if (count >= 4) + if (count == 5) + _appendSymbol(appendTo, value, fSymbols->fNarrowMonths, + fSymbols->fNarrowMonthsCount); + else if (count == 4) _appendSymbol(appendTo, value, fSymbols->fMonths, fSymbols->fMonthsCount); else if (count == 3) @@ -620,6 +666,24 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, zeroPaddingNumber(appendTo, value + 1, count, maxIntCount); break; + // for "LLLL", write out the whole month name, for "LLL", write out the month + // abbreviation, for "L" or "LL", write out the month as a number with the + // appropriate number of digits + // for "LLLLL", use the narrow form + case UDAT_STANDALONE_MONTH_FIELD: + if (count == 5) + _appendSymbol(appendTo, value, fSymbols->fStandaloneNarrowMonths, + fSymbols->fStandaloneNarrowMonthsCount); + else if (count == 4) + _appendSymbol(appendTo, value, fSymbols->fStandaloneMonths, + fSymbols->fStandaloneMonthsCount); + else if (count == 3) + _appendSymbol(appendTo, value, fSymbols->fStandaloneShortMonths, + fSymbols->fStandaloneShortMonthsCount); + else + zeroPaddingNumber(appendTo, value + 1, count, maxIntCount); + break; + // for "k" and "kk", write out the hour, adjusting midnight to appear as "24" case UDAT_HOUR_OF_DAY1_FIELD: if (value == 0) @@ -647,16 +711,38 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, } break; - // for "EEEE", write out the day-of-the-week name; otherwise, use the abbreviation + // for "EEE", write out the abbreviated day-of-the-week name + // for "EEEE", write out the wide day-of-the-week name + // for "EEEEE", use the narrow day-of-the-week name case UDAT_DAY_OF_WEEK_FIELD: - if (count >= 4) + if (count == 5) + _appendSymbol(appendTo, value, fSymbols->fNarrowWeekdays, + fSymbols->fNarrowWeekdaysCount); + else if (count == 4) _appendSymbol(appendTo, value, fSymbols->fWeekdays, fSymbols->fWeekdaysCount); - else + else _appendSymbol(appendTo, value, fSymbols->fShortWeekdays, fSymbols->fShortWeekdaysCount); break; + // for "ccc", write out the abbreviated day-of-the-week name + // for "cccc", write out the wide day-of-the-week name + // for "ccccc", use the narrow day-of-the-week name + case UDAT_STANDALONE_DAY_FIELD: + if (count == 5) + _appendSymbol(appendTo, value, fSymbols->fStandaloneNarrowWeekdays, + fSymbols->fStandaloneNarrowWeekdaysCount); + else if (count == 4) + _appendSymbol(appendTo, value, fSymbols->fStandaloneWeekdays, + fSymbols->fStandaloneWeekdaysCount); + else if (count == 3) + _appendSymbol(appendTo, value, fSymbols->fStandaloneShortWeekdays, + fSymbols->fStandaloneShortWeekdaysCount); + else + zeroPaddingNumber(appendTo, value, 1, maxIntCount); + break; + // for and "a" symbol, write out the whole AM/PM string case UDAT_AM_PM_FIELD: _appendSymbol(appendTo, value, fSymbols->fAmPms, @@ -673,43 +759,54 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, break; // for the "z" symbols, we have to check our time zone data first. If we have a - // localized name for the time zone, then "zzzz" is the whole name and anything - // shorter is the abbreviation (we also have to check for daylight savings time - // since the name will be different). If we don't have a localized time zone name, + // localized name for the time zone, then "zzzz" / "zzz" indicate whether + // daylight time is in effect (long/short) and "zz" / "z" do not (long/short). + // If we don't have a localized time zone name, // then the time zone shows up as "GMT+hh:mm" or "GMT-hh:mm" (where "hh:mm" is the // offset from GMT) regardless of how many z's were in the pattern symbol - case UDAT_TIMEZONE_FIELD: { + case UDAT_TIMEZONE_FIELD: + case UDAT_TIMEZONE_GENERIC_FIELD: { UnicodeString str; - int32_t zoneIndex = fSymbols->getZoneIndex(cal.getTimeZone().getID(str)); - if (zoneIndex == -1) { - value = cal.get(UCAL_ZONE_OFFSET, status) + - cal.get(UCAL_DST_OFFSET, status); - - if (value < 0) { - appendTo += gGmtMinus; - value = -value; // suppress the '-' sign for text display. - } - else - appendTo += gGmtPlus; - - zeroPaddingNumber(appendTo, (int32_t)(value/U_MILLIS_PER_HOUR), 2, 2); - appendTo += (UChar)0x003A /*':'*/; - zeroPaddingNumber(appendTo, (int32_t)((value%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), 2, 2); + UnicodeString zid; + UnicodeString displayString; + zid = fSymbols->getZoneID(cal.getTimeZone().getID(str), zid, status); + if(U_FAILURE(status)){ + break; } - else if (cal.get(UCAL_DST_OFFSET, status) != 0) { - if (count >= 4) - appendTo += fSymbols->fZoneStrings[zoneIndex][3]; - else - appendTo += fSymbols->fZoneStrings[zoneIndex][4]; + if (zid.length() == 0) { + appendGMT(appendTo, cal, status); } else { - if (count >= 4) - appendTo += fSymbols->fZoneStrings[zoneIndex][1]; - else - appendTo += fSymbols->fZoneStrings[zoneIndex][2]; - } + + if (patternCharIndex == UDAT_TIMEZONE_GENERIC_FIELD) { + if(count < 4){ + fSymbols->getZoneString(zid, DateFormatSymbols::TIMEZONE_SHORT_GENERIC, displayString, status); + }else{ + fSymbols->getZoneString(zid, DateFormatSymbols::TIMEZONE_LONG_GENERIC, displayString, status); + } + } else { + if (cal.get(UCAL_DST_OFFSET, status) != 0) { + if(count < 4){ + fSymbols->getZoneString(zid, DateFormatSymbols::TIMEZONE_SHORT_DAYLIGHT, displayString, status); + }else{ + fSymbols->getZoneString(zid, DateFormatSymbols::TIMEZONE_LONG_DAYLIGHT, displayString, status); + } + }else{ + if(count < 4){ + fSymbols->getZoneString(zid, DateFormatSymbols::TIMEZONE_SHORT_STANDARD, displayString, status); + }else{ + fSymbols->getZoneString(zid, DateFormatSymbols::TIMEZONE_LONG_STANDARD, displayString, status); + } + } + } + if(displayString.length()==0){ + appendGMT(appendTo, cal, status); + }else{ + appendTo += displayString; + } } - break; + } + break; case 23: // 'Z' - TIMEZONE_RFC { @@ -720,12 +817,35 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, value = -value; sign = 45/*'-'*/; } - value = (value / 3) * 5 + (value % 60); // minutes => KKmm + value = (value / 60) * 100 + (value % 60); // minutes => KKmm appendTo += sign; zeroPaddingNumber(appendTo, value, 4, 4); } break; + case UDAT_QUARTER_FIELD: + if (count >= 4) + _appendSymbol(appendTo, value/3, fSymbols->fQuarters, + fSymbols->fQuartersCount); + else if (count == 3) + _appendSymbol(appendTo, value/3, fSymbols->fShortQuarters, + fSymbols->fShortQuartersCount); + else + zeroPaddingNumber(appendTo, (value/3) + 1, count, maxIntCount); + break; + + case UDAT_STANDALONE_QUARTER_FIELD: + if (count >= 4) + _appendSymbol(appendTo, value/3, fSymbols->fStandaloneQuarters, + fSymbols->fStandaloneQuartersCount); + else if (count == 3) + _appendSymbol(appendTo, value/3, fSymbols->fStandaloneShortQuarters, + fSymbols->fStandaloneShortQuartersCount); + else + zeroPaddingNumber(appendTo, (value/3) + 1, count, maxIntCount); + break; + + // all of the other pattern symbols can be formatted as simple numbers with // appropriate zero padding default: @@ -780,6 +900,10 @@ SimpleDateFormat::parse(const UnicodeString& text, Calendar& cal, ParsePosition& UBool ambiguousYear[] = { FALSE }; int32_t count = 0; + // hack, clear parsedTimeZone, cast away const + delete parsedTimeZone; + ((SimpleDateFormat*)this)->parsedTimeZone = NULL; + // For parsing abutting numeric fields. 'abutPat' is the // offset into 'pattern' of the first of 2 or more abutting // numeric fields. 'abutStart' is the offset into 'text' @@ -974,20 +1098,38 @@ SimpleDateFormat::parse(const UnicodeString& text, Calendar& cal, ParsePosition& // front or the back of the default century. This only works because we adjust // the year correctly to start with in other cases -- see subParse(). UErrorCode status = U_ZERO_ERROR; - if (ambiguousYear[0]) // If this is true then the two-digit year == the default start year + if (ambiguousYear[0] || parsedTimeZone != NULL) // If this is true then the two-digit year == the default start year { // We need a copy of the fields, and we need to avoid triggering a call to // complete(), which will recalculate the fields. Since we can't access // the fields[] array in Calendar, we clone the entire object. This will // stop working if Calendar.clone() is ever rewritten to call complete(). Calendar *copy = cal.clone(); - UDate parsedDate = copy->getTime(status); - // {sfb} check internalGetDefaultCenturyStart - if (fHaveDefaultCentury && (parsedDate < fDefaultCenturyStart)) - { - // We can't use add here because that does a complete() first. - cal.set(UCAL_YEAR, fDefaultCenturyStartYear + 100); + if (ambiguousYear[0]) { + UDate parsedDate = copy->getTime(status); + // {sfb} check internalGetDefaultCenturyStart + if (fHaveDefaultCentury && (parsedDate < fDefaultCenturyStart)) { + // We can't use add here because that does a complete() first. + cal.set(UCAL_YEAR, fDefaultCenturyStartYear + 100); + } } + + if (parsedTimeZone != NULL) { + TimeZone *tz = parsedTimeZone; + + // the calendar represents the parse as gmt time + // we need to turn this into local time, so we add the raw offset + // then we ask the timezone to handle this local time + int32_t rawOffset = 0; + int32_t dstOffset = 0; + tz->getOffset(copy->getTime(status)+tz->getRawOffset(), TRUE, + rawOffset, dstOffset, status); + if (U_SUCCESS(status)) { + cal.set(UCAL_ZONE_OFFSET, rawOffset); + cal.set(UCAL_DST_OFFSET, dstOffset); + } + } + delete copy; } @@ -1017,6 +1159,84 @@ SimpleDateFormat::parse(const UnicodeString& text, UErrorCode& status) const } //---------------------------------------------------------------------- +int32_t SimpleDateFormat::matchQuarterString(const UnicodeString& text, + int32_t start, + UCalendarDateFields field, + const UnicodeString* data, + int32_t dataCount, + Calendar& cal) const +{ + int32_t i = 0; + int32_t count = dataCount; + + // There may be multiple strings in the data[] array which begin with + // the same prefix (e.g., Cerven and Cervenec (June and July) in Czech). + // We keep track of the longest match, and return that. Note that this + // unfortunately requires us to test all array elements. + int32_t bestMatchLength = 0, bestMatch = -1; + + // {sfb} kludge to support case-insensitive comparison + // {markus 2002oct11} do not just use caseCompareBetween because we do not know + // the length of the match after case folding + // {alan 20040607} don't case change the whole string, since the length + // can change + // TODO we need a case-insensitive startsWith function + UnicodeString lcase, lcaseText; + text.extract(start, INT32_MAX, lcaseText); + lcaseText.foldCase(); + + for (; i < count; ++i) + { + // Always compare if we have no match yet; otherwise only compare + // against potentially better matches (longer strings). + + lcase.fastCopyFrom(data[i]).foldCase(); + int32_t length = lcase.length(); + + if (length > bestMatchLength && + lcaseText.compareBetween(0, length, lcase, 0, length) == 0) + { + bestMatch = i; + bestMatchLength = length; + } + } + if (bestMatch >= 0) + { + cal.set(field, bestMatch * 3); + + // Once we have a match, we have to determine the length of the + // original source string. This will usually be == the length of + // the case folded string, but it may differ (e.g. sharp s). + lcase.fastCopyFrom(data[bestMatch]).foldCase(); + + // Most of the time, the length will be the same as the length + // of the string from the locale data. Sometimes it will be + // different, in which case we will have to figure it out by + // adding a character at a time, until we have a match. We do + // this all in one loop, where we try 'len' first (at index + // i==0). + int32_t len = data[bestMatch].length(); // 99+% of the time + int32_t n = text.length() - start; + for (i=0; i<=n; ++i) { + int32_t j=i; + if (i == 0) { + j = len; + } else if (i == len) { + continue; // already tried this when i was 0 + } + text.extract(start, j, lcaseText); + lcaseText.foldCase(); + if (lcase == lcaseText) { + return start + j; + } + } + } + + return -start; +} + +//---------------------------------------------------------------------- + int32_t SimpleDateFormat::matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field, @@ -1157,6 +1377,9 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC if (patternCharIndex == UDAT_HOUR_OF_DAY1_FIELD || patternCharIndex == UDAT_HOUR1_FIELD || (patternCharIndex == UDAT_MONTH_FIELD && count <= 2) || + (patternCharIndex == UDAT_STANDALONE_MONTH_FIELD && count <= 2) || + (patternCharIndex == UDAT_QUARTER_FIELD && count <= 2) || + (patternCharIndex == UDAT_STANDALONE_QUARTER_FIELD && count <= 2) || patternCharIndex == UDAT_YEAR_FIELD || patternCharIndex == UDAT_YEAR_WOY_FIELD || patternCharIndex == UDAT_FRACTIONAL_SECOND_FIELD) @@ -1165,16 +1388,20 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC // It would be good to unify this with the obeyCount logic below, // but that's going to be difficult. const UnicodeString* src; + if (obeyCount) { if ((start+count) > text.length()) { return -start; } + text.extractBetween(0, start + count, temp); src = &temp; } else { src = &text; } + parseInt(*src, number, pos, allowNegative); + if (pos.getIndex() == parseStart) return -start; value = number.getLong(); @@ -1182,7 +1409,12 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC switch (patternCharIndex) { case UDAT_ERA_FIELD: + if (count == 4) { + return matchString(text, start, UCAL_ERA, fSymbols->fEraNames, fSymbols->fEraNamesCount, cal); + } + return matchString(text, start, UCAL_ERA, fSymbols->fEras, fSymbols->fErasCount, cal); + case UDAT_YEAR_FIELD: // If there are 3 or more YEAR pattern characters, this indicates // that the year value is to be treated literally, without any @@ -1211,6 +1443,7 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC } cal.set(UCAL_YEAR, value); return pos.getIndex(); + case UDAT_YEAR_WOY_FIELD: // Comment is the same as for UDAT_Year_FIELDs - look above if (count <= 2 && (pos.getIndex() - start) == 2 @@ -1225,6 +1458,7 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC } cal.set(UCAL_YEAR_WOY, value); return pos.getIndex(); + case UDAT_MONTH_FIELD: if (count <= 2) // i.e., M or MM. { @@ -1233,13 +1467,12 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC // [We computed 'value' above.] cal.set(UCAL_MONTH, value - 1); return pos.getIndex(); - } - else - { + } else { // count >= 3 // i.e., MMM or MMMM // Want to be able to parse both short and long forms. // Try count == 4 first: int32_t newStart = 0; + if ((newStart = matchString(text, start, UCAL_MONTH, fSymbols->fMonths, fSymbols->fMonthsCount, cal)) > 0) return newStart; @@ -1247,12 +1480,36 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC return matchString(text, start, UCAL_MONTH, fSymbols->fShortMonths, fSymbols->fShortMonthsCount, cal); } + + case UDAT_STANDALONE_MONTH_FIELD: + if (count <= 2) // i.e., L or LL. + { + // Don't want to parse the month if it is a string + // while pattern uses numeric style: M or MM. + // [We computed 'value' above.] + cal.set(UCAL_MONTH, value - 1); + return pos.getIndex(); + } else { + // count >= 3 // i.e., LLL or LLLL + // Want to be able to parse both short and long forms. + // Try count == 4 first: + int32_t newStart = 0; + + if ((newStart = matchString(text, start, UCAL_MONTH, + fSymbols->fStandaloneMonths, fSymbols->fStandaloneMonthsCount, cal)) > 0) + return newStart; + else // count == 4 failed, now try count == 3 + return matchString(text, start, UCAL_MONTH, + fSymbols->fStandaloneShortMonths, fSymbols->fStandaloneShortMonthsCount, cal); + } + case UDAT_HOUR_OF_DAY1_FIELD: // [We computed 'value' above.] if (value == cal.getMaximum(UCAL_HOUR_OF_DAY) + 1) value = 0; cal.set(UCAL_HOUR_OF_DAY, value); return pos.getIndex(); + case UDAT_FRACTIONAL_SECOND_FIELD: // Fractional seconds left-justify i = pos.getIndex() - start; @@ -1271,6 +1528,7 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC } cal.set(UCAL_MILLISECOND, value); return pos.getIndex(); + case UDAT_DAY_OF_WEEK_FIELD: { // Want to be able to parse both short and long forms. @@ -1283,27 +1541,86 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC return matchString(text, start, UCAL_DAY_OF_WEEK, fSymbols->fShortWeekdays, fSymbols->fShortWeekdaysCount, cal); } + + case UDAT_STANDALONE_DAY_FIELD: + { + // Want to be able to parse both short and long forms. + // Try count == 4 (DDDD) first: + int32_t newStart = 0; + if ((newStart = matchString(text, start, UCAL_DAY_OF_WEEK, + fSymbols->fStandaloneWeekdays, fSymbols->fStandaloneWeekdaysCount, cal)) > 0) + return newStart; + else // DDDD failed, now try DDD + return matchString(text, start, UCAL_DAY_OF_WEEK, + fSymbols->fStandaloneShortWeekdays, fSymbols->fStandaloneShortWeekdaysCount, cal); + } + case UDAT_AM_PM_FIELD: return matchString(text, start, UCAL_AM_PM, fSymbols->fAmPms, fSymbols->fAmPmsCount, cal); + case UDAT_HOUR1_FIELD: // [We computed 'value' above.] if (value == cal.getLeastMaximum(UCAL_HOUR)+1) value = 0; cal.set(UCAL_HOUR, value); return pos.getIndex(); + + case UDAT_QUARTER_FIELD: + if (count <= 2) // i.e., Q or QQ. + { + // Don't want to parse the month if it is a string + // while pattern uses numeric style: Q or QQ. + // [We computed 'value' above.] + cal.set(UCAL_MONTH, (value - 1) * 3); + return pos.getIndex(); + } else { + // count >= 3 // i.e., QQQ or QQQQ + // Want to be able to parse both short and long forms. + // Try count == 4 first: + int32_t newStart = 0; + + if ((newStart = matchQuarterString(text, start, UCAL_MONTH, + fSymbols->fQuarters, fSymbols->fQuartersCount, cal)) > 0) + return newStart; + else // count == 4 failed, now try count == 3 + return matchQuarterString(text, start, UCAL_MONTH, + fSymbols->fShortQuarters, fSymbols->fShortQuartersCount, cal); + } + + case UDAT_STANDALONE_QUARTER_FIELD: + if (count <= 2) // i.e., q or qq. + { + // Don't want to parse the month if it is a string + // while pattern uses numeric style: q or q. + // [We computed 'value' above.] + cal.set(UCAL_MONTH, (value - 1) * 3); + return pos.getIndex(); + } else { + // count >= 3 // i.e., qqq or qqqq + // Want to be able to parse both short and long forms. + // Try count == 4 first: + int32_t newStart = 0; + + if ((newStart = matchQuarterString(text, start, UCAL_MONTH, + fSymbols->fStandaloneQuarters, fSymbols->fStandaloneQuartersCount, cal)) > 0) + return newStart; + else // count == 4 failed, now try count == 3 + return matchQuarterString(text, start, UCAL_MONTH, + fSymbols->fStandaloneShortQuarters, fSymbols->fStandaloneShortQuartersCount, cal); + } + case UDAT_TIMEZONE_FIELD: case UDAT_TIMEZONE_RFC_FIELD: + case UDAT_TIMEZONE_GENERIC_FIELD: { // First try to parse generic forms such as GMT-07:00. Do this first // in case localized DateFormatZoneData contains the string "GMT" // for a zone; in that case, we don't want to match the first three // characters of GMT+/-HH:MM etc. - UnicodeString lcaseText(text); - UnicodeString lcaseGMT(gGmt); int32_t sign = 0; int32_t offset; - int32_t gmtLen = lcaseGMT.length(); + int32_t gmtLen = u_strlen(gGmt); // For time zones that have no known names, look for strings // of the form: @@ -1311,24 +1628,20 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC // GMT[+-]hhmm or // GMT. - // {sfb} kludge for case-insensitive compare - lcaseText.toLower(); - lcaseGMT.toLower(); - - if ((text.length() - start) > gmtLen && - (lcaseText.compare(start, gmtLen, lcaseGMT, 0, gmtLen)) == 0) - { + if ((text.length() - start) >= gmtLen && + (text.caseCompare(start, gmtLen, gGmt, 0, gmtLen, U_FOLD_CASE_DEFAULT)) == 0) + { cal.set(UCAL_DST_OFFSET, 0); pos.setIndex(start + gmtLen); if( text[pos.getIndex()] == 0x002B /*'+'*/ ) - sign = 1; + sign = 1; else if( text[pos.getIndex()] == 0x002D /*'-'*/ ) - sign = -1; + sign = -1; else { - cal.set(UCAL_ZONE_OFFSET, 0 ); - return pos.getIndex(); + cal.set(UCAL_ZONE_OFFSET, 0 ); + return pos.getIndex(); } // Look for hours:minutes or hhmm. @@ -1337,66 +1650,45 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC Formattable tzNumber; fNumberFormat->parse(text, tzNumber, pos); if( pos.getIndex() == parseStart) { - return -start; + return -start; } if( text[pos.getIndex()] == 0x003A /*':'*/ ) { - // This is the hours:minutes case - offset = tzNumber.getLong() * 60; - pos.setIndex(pos.getIndex() + 1); - parseStart = pos.getIndex(); - fNumberFormat->parse(text, tzNumber, pos); - if( pos.getIndex() == parseStart) { - return -start; - } - offset += tzNumber.getLong(); + // This is the hours:minutes case + offset = tzNumber.getLong() * 60; + pos.setIndex(pos.getIndex() + 1); + parseStart = pos.getIndex(); + fNumberFormat->parse(text, tzNumber, pos); + if( pos.getIndex() == parseStart) { + return -start; + } + offset += tzNumber.getLong(); } else { - // This is the hhmm case. - offset = tzNumber.getLong(); - if( offset < 24 ) - offset *= 60; - else - offset = offset % 100 + offset / 100 * 60; + // This is the hhmm case. + offset = tzNumber.getLong(); + if( offset < 24 ) + offset *= 60; + else + offset = offset % 100 + offset / 100 * 60; } // Fall through for final processing below of 'offset' and 'sign'. - } + } else { // At this point, check for named time zones by looking through // the locale data from the DateFormatZoneData strings. // Want to be able to parse both short and long forms. - const UnicodeString *zs; - int32_t j; - - for (i = 0; i < fSymbols->fZoneStringsRowCount; i++) - { - // Checking long and short zones [1 & 2], - // and long and short daylight [3 & 4]. - for (j = 1; j <= 4; ++j) - { - zs = &fSymbols->fZoneStrings[i][j]; - // ### TODO markus 20021014: This use of caseCompare() will fail - // if the text contains a character that case-folds into multiple - // characters. In that case, zs->length() may be too long, and it does not match. - // We need a case-insensitive version of startsWith(). - // There are similar cases of such caseCompare() uses elsewhere in ICU. - if (0 == (text.caseCompare(start, zs->length(), *zs, 0))) { - TimeZone *tz = TimeZone::createTimeZone(fSymbols->fZoneStrings[i][0]); - cal.set(UCAL_ZONE_OFFSET, tz->getRawOffset()); - // Must call set() with something -- TODO -- Fix this to - // use the correct DST SAVINGS for the zone. - delete tz; - cal.set(UCAL_DST_OFFSET, j >= 3 ? U_MILLIS_PER_HOUR : 0); - return (start + fSymbols->fZoneStrings[i][j].length()); - } - } + // !!! side effect, might set parsedZoneString + UErrorCode status = U_ZERO_ERROR; + int32_t result = subParseZoneString(text, start, cal, status); + if (result != 0) { + return result; } // As a last resort, look for numeric timezones of the form // [+-]hhmm as specified by RFC 822. This code is actually // a little more permissive than RFC 822. It will try to do - // its best with numbers that aren't strictly 4 digits long. - UErrorCode status = U_ZERO_ERROR; + // its best with numbers that aren't strictly 4 digits long DecimalFormat fmt(UNICODE_STRING_SIMPLE("+####;-####"), status); if(U_FAILURE(status)) return -start; @@ -1440,6 +1732,7 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC // All efforts to parse a zone failed. return -start; } + default: // Handle "generic" fields int32_t parseStart = pos.getIndex(); @@ -1462,6 +1755,61 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC } } +int32_t +SimpleDateFormat::subParseZoneString(const UnicodeString& text, int32_t start, Calendar& cal, UErrorCode& status) const +{ + // At this point, check for named time zones by looking through + // the locale data from the DateFormatZoneData strings. + // Want to be able to parse both short and long forms. + + // optimize for calendar's current time zone + TimeZone *tz = NULL; + UnicodeString id; + UnicodeString zid, value; + DateFormatSymbols::TimeZoneTranslationType type = DateFormatSymbols::TIMEZONE_COUNT; + fSymbols->getZoneID(getTimeZone().getID(id), zid, status); + if(zid.length() > 0){ + fSymbols->findZoneIDTypeValue(zid, text, start, type, value, status); + if(type != DateFormatSymbols::TIMEZONE_COUNT) { + tz = TimeZone::createTimeZone(zid); + } + } + + if(U_FAILURE(status)){ + return 0; + } + if (tz != NULL) { // Matched any ? + // always set zone offset, needed to get correct hour in wall time + // when checking daylight savings + cal.set(UCAL_ZONE_OFFSET, tz->getRawOffset()); + if (type==DateFormatSymbols::TIMEZONE_SHORT_STANDARD || type==DateFormatSymbols::TIMEZONE_LONG_STANDARD ) { + // standard time + cal.set(UCAL_DST_OFFSET, 0); + delete tz; tz = NULL; + } else if (type==DateFormatSymbols::TIMEZONE_SHORT_DAYLIGHT || type==DateFormatSymbols::TIMEZONE_LONG_DAYLIGHT ) { + // daylight time + // !!! todo - no getDSTSavings() in ICU's timezone + // use the correct DST SAVINGS for the zone. + // cal.set(UCAL_DST_OFFSET, tz->getDSTSavings()); + cal.set(UCAL_DST_OFFSET, U_MILLIS_PER_HOUR); + delete tz; tz = NULL; + } else { + // either standard or daylight + // need to finish getting the date, then compute dst offset as appropriate + + // !!! hack for api compatibility, can't modify subParse(...) so can't + // pass this back any other way. cast away const. + ((SimpleDateFormat*)this)->parsedTimeZone = tz; + } + + return start + value.length(); + } + + + // complete failure + return 0; +} + /** * Parse an integer using fNumberFormat. This method is semantically * const, but actually may modify fNumberFormat. diff --git a/icuSources/i18n/sortkey.cpp b/icuSources/i18n/sortkey.cpp index 62546841..f6c3cf5f 100644 --- a/icuSources/i18n/sortkey.cpp +++ b/icuSources/i18n/sortkey.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1996-2003, International Business Machines Corporation and * +* Copyright (C) 1996-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -392,4 +392,12 @@ CollationKey::hashCode() const U_NAMESPACE_END +U_CAPI int32_t U_EXPORT2 +ucol_keyHashCode(const uint8_t *key, + int32_t length) +{ + CollationKey newKey(key, length); + return newKey.hashCode(); +} + #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/stsearch.cpp b/icuSources/i18n/stsearch.cpp index 0b2b08c9..7815f081 100644 --- a/icuSources/i18n/stsearch.cpp +++ b/icuSources/i18n/stsearch.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2003 IBM and others. All rights reserved. +* Copyright (C) 2001-2006 IBM and others. All rights reserved. ********************************************************************** * Date Name Description * 03/22/2000 helena Creation. @@ -21,12 +21,12 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringSearch) // public constructors and destructors ----------------------------------- -StringSearch::StringSearch(const UnicodeString &pattern, +StringSearch::StringSearch(const UnicodeString &pattern, const UnicodeString &text, - const Locale &locale, + const Locale &locale, BreakIterator *breakiter, UErrorCode &status) : - SearchIterator(text, breakiter), + SearchIterator(text, breakiter), m_collator_(), m_pattern_(pattern) { @@ -35,9 +35,9 @@ StringSearch::StringSearch(const UnicodeString &pattern, return; } - m_strsrch_ = usearch_open(m_pattern_.getBuffer(), m_pattern_.length(), - m_text_.getBuffer(), m_text_.length(), - locale.getName(), (UBreakIterator *)breakiter, + m_strsrch_ = usearch_open(m_pattern_.getBuffer(), m_pattern_.length(), + m_text_.getBuffer(), m_text_.length(), + locale.getName(), (UBreakIterator *)breakiter, &status); uprv_free(m_search_); m_search_ = NULL; @@ -46,29 +46,26 @@ StringSearch::StringSearch(const UnicodeString &pattern, // wrapper around the internal collator and rules, which (here) are // owned by this stringsearch object. this means 1) it's destructor // _should not_ delete the ucollator or rules, and 2) changes made - // to the exposed collator (setStrength etc) _should_ modify the + // to the exposed collator (setStrength etc) _should_ modify the // ucollator. thus the collator is not a copy-on-write alias, and it // needs to distinguish itself not merely from 'stand alone' colators // but also from copy-on-write ones. it needs additional state, which // setUCollator should set. if (U_SUCCESS(status)) { - int32_t length; - const UChar *rules = ucol_getRules(m_strsrch_->collator, &length); - m_collation_rules_.setTo(rules, length); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); // m_search_ has been created by the base SearchIterator class m_search_ = m_strsrch_->search; } } -StringSearch::StringSearch(const UnicodeString &pattern, +StringSearch::StringSearch(const UnicodeString &pattern, const UnicodeString &text, - RuleBasedCollator *coll, + RuleBasedCollator *coll, BreakIterator *breakiter, UErrorCode &status) : - SearchIterator(text, breakiter), + SearchIterator(text, breakiter), m_collator_(), m_pattern_(pattern) { @@ -81,32 +78,29 @@ StringSearch::StringSearch(const UnicodeString &pattern, m_strsrch_ = NULL; return; } - m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), - m_pattern_.length(), - m_text_.getBuffer(), - m_text_.length(), coll->ucollator, - (UBreakIterator *)breakiter, + m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), + m_pattern_.length(), + m_text_.getBuffer(), + m_text_.length(), coll->ucollator, + (UBreakIterator *)breakiter, &status); uprv_free(m_search_); m_search_ = NULL; if (U_SUCCESS(status)) { - int32_t length; - const UChar *rules = ucol_getRules(m_strsrch_->collator, &length); - m_collation_rules_.setTo(rules, length); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); // m_search_ has been created by the base SearchIterator class m_search_ = m_strsrch_->search; } } -StringSearch::StringSearch(const UnicodeString &pattern, +StringSearch::StringSearch(const UnicodeString &pattern, CharacterIterator &text, - const Locale &locale, + const Locale &locale, BreakIterator *breakiter, UErrorCode &status) : - SearchIterator(text, breakiter), + SearchIterator(text, breakiter), m_collator_(), m_pattern_(pattern) { @@ -114,19 +108,16 @@ StringSearch::StringSearch(const UnicodeString &pattern, m_strsrch_ = NULL; return; } - m_strsrch_ = usearch_open(m_pattern_.getBuffer(), m_pattern_.length(), - m_text_.getBuffer(), m_text_.length(), - locale.getName(), (UBreakIterator *)breakiter, + m_strsrch_ = usearch_open(m_pattern_.getBuffer(), m_pattern_.length(), + m_text_.getBuffer(), m_text_.length(), + locale.getName(), (UBreakIterator *)breakiter, &status); uprv_free(m_search_); m_search_ = NULL; if (U_SUCCESS(status)) { - int32_t length; - const UChar *rules = ucol_getRules(m_strsrch_->collator, &length); - m_collation_rules_.setTo(rules, length); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); // m_search_ has been created by the base SearchIterator class m_search_ = m_strsrch_->search; } @@ -134,10 +125,10 @@ StringSearch::StringSearch(const UnicodeString &pattern, StringSearch::StringSearch(const UnicodeString &pattern, CharacterIterator &text, - RuleBasedCollator *coll, + RuleBasedCollator *coll, BreakIterator *breakiter, UErrorCode &status) : - SearchIterator(text, breakiter), + SearchIterator(text, breakiter), m_collator_(), m_pattern_(pattern) { @@ -150,21 +141,18 @@ StringSearch::StringSearch(const UnicodeString &pattern, m_strsrch_ = NULL; return; } - m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), - m_pattern_.length(), - m_text_.getBuffer(), - m_text_.length(), coll->ucollator, - (UBreakIterator *)breakiter, + m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), + m_pattern_.length(), + m_text_.getBuffer(), + m_text_.length(), coll->ucollator, + (UBreakIterator *)breakiter, &status); uprv_free(m_search_); m_search_ = NULL; if (U_SUCCESS(status)) { - int32_t length; - const UChar *rules = ucol_getRules(m_strsrch_->collator, &length); - m_collation_rules_.setTo(rules, length); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); // m_search_ has been created by the base SearchIterator class m_search_ = m_strsrch_->search; } @@ -176,31 +164,30 @@ StringSearch::StringSearch(const StringSearch &that) : m_pattern_(that.m_pattern_) { UErrorCode status = U_ZERO_ERROR; + + // Free m_search_ from the superclass + uprv_free(m_search_); + m_search_ = NULL; + if (that.m_strsrch_ == NULL) { + // This was not a good copy m_strsrch_ = NULL; - status = U_ILLEGAL_ARGUMENT_ERROR; } else { - m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), - m_pattern_.length(), - m_text_.getBuffer(), - m_text_.length(), - that.m_strsrch_->collator, - (UBreakIterator *)that.m_breakiterator_, + // Make a deep copy + m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), + m_pattern_.length(), + m_text_.getBuffer(), + m_text_.length(), + that.m_strsrch_->collator, + (UBreakIterator *)that.m_breakiterator_, &status); - } - uprv_free(m_search_); - m_search_ = NULL; - - if (U_SUCCESS(status)) { - int32_t length; - const UChar *rules = ucol_getRules(m_strsrch_->collator, &length); - m_collation_rules_.setTo(rules, length); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); - // m_search_ has been created by the base SearchIterator class - m_search_ = m_strsrch_->search; - m_breakiterator_ = that.m_breakiterator_; + if (U_SUCCESS(status)) { + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); + // m_search_ has been created by the base SearchIterator class + m_search_ = m_strsrch_->search; + } } } @@ -227,17 +214,14 @@ StringSearch & StringSearch::operator=(const StringSearch &that) m_pattern_ = that.m_pattern_; // all m_search_ in the parent class is linked up with m_strsrch_ usearch_close(m_strsrch_); - m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), - m_pattern_.length(), - m_text_.getBuffer(), - m_text_.length(), - that.m_strsrch_->collator, + m_strsrch_ = usearch_openFromCollator(m_pattern_.getBuffer(), + m_pattern_.length(), + m_text_.getBuffer(), + m_text_.length(), + that.m_strsrch_->collator, NULL, &status); - int32_t length; - const UChar *rules = ucol_getRules(m_strsrch_->collator, &length); - m_collation_rules_.setTo(rules, length); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); m_search_ = m_strsrch_->search; } return *this; @@ -276,7 +260,7 @@ void StringSearch::setText(const UnicodeString &text, UErrorCode &status) usearch_setText(m_strsrch_, text.getBuffer(), text.length(), &status); } } - + void StringSearch::setText(CharacterIterator &text, UErrorCode &status) { if (U_SUCCESS(status)) { @@ -289,18 +273,17 @@ RuleBasedCollator * StringSearch::getCollator() const { return (RuleBasedCollator *)&m_collator_; } - + void StringSearch::setCollator(RuleBasedCollator *coll, UErrorCode &status) { if (U_SUCCESS(status)) { usearch_setCollator(m_strsrch_, coll->getUCollator(), &status); - m_collation_rules_.setTo(coll->getRules()); - m_collator_.setUCollator((UCollator *)m_strsrch_->collator, - &m_collation_rules_); + // Alias the collator + m_collator_.setUCollator((UCollator *)m_strsrch_->collator); } } - -void StringSearch::setPattern(const UnicodeString &pattern, + +void StringSearch::setPattern(const UnicodeString &pattern, UErrorCode &status) { if (U_SUCCESS(status)) { @@ -309,7 +292,7 @@ void StringSearch::setPattern(const UnicodeString &pattern, &status); } } - + const UnicodeString & StringSearch::getPattern() const { return m_pattern_; @@ -325,8 +308,8 @@ void StringSearch::reset() SearchIterator * StringSearch::safeClone(void) const { UErrorCode status = U_ZERO_ERROR; - StringSearch *result = new StringSearch(m_pattern_, m_text_, - (RuleBasedCollator *)&m_collator_, + StringSearch *result = new StringSearch(m_pattern_, m_text_, + (RuleBasedCollator *)&m_collator_, m_breakiterator_, status); /* test for NULL */ @@ -342,7 +325,7 @@ SearchIterator * StringSearch::safeClone(void) const } return result; } - + // protected method ------------------------------------------------- int32_t StringSearch::handleNext(int32_t position, UErrorCode &status) @@ -350,27 +333,27 @@ int32_t StringSearch::handleNext(int32_t position, UErrorCode &status) // values passed here are already in the pre-shift position if (U_SUCCESS(status)) { if (m_strsrch_->pattern.CELength == 0) { - m_search_->matchedIndex = - m_search_->matchedIndex == USEARCH_DONE ? + m_search_->matchedIndex = + m_search_->matchedIndex == USEARCH_DONE ? getOffset() : m_search_->matchedIndex + 1; m_search_->matchedLength = 0; - ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, + ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, &status); if (m_search_->matchedIndex == m_search_->textLength) { m_search_->matchedIndex = USEARCH_DONE; } } else { - // looking at usearch.cpp, this part is shifted out to + // looking at usearch.cpp, this part is shifted out to // StringSearch instead of SearchIterator because m_strsrch_ is // not accessible in SearchIterator - if (position + m_strsrch_->pattern.defaultShiftSize + if (position + m_strsrch_->pattern.defaultShiftSize > m_search_->textLength) { setMatchNotFound(); return USEARCH_DONE; } if (m_search_->matchedLength <= 0) { - // the flipping direction issue has already been handled + // the flipping direction issue has already been handled // in next() // for boundary check purposes. this will ensure that the // next match will not preceed the current offset @@ -393,19 +376,19 @@ int32_t StringSearch::handleNext(int32_t position, UErrorCode &status) } if (m_breakiterator_ == NULL #if !UCONFIG_NO_BREAK_ITERATION - || + || m_search_->matchedIndex == USEARCH_DONE || (m_breakiterator_->isBoundary(m_search_->matchedIndex) && - m_breakiterator_->isBoundary(m_search_->matchedIndex + + m_breakiterator_->isBoundary(m_search_->matchedIndex + m_search_->matchedLength)) #endif ) { if (m_search_->matchedIndex == USEARCH_DONE) { - ucol_setOffset(m_strsrch_->textIter, + ucol_setOffset(m_strsrch_->textIter, m_search_->textLength, &status); } else { - ucol_setOffset(m_strsrch_->textIter, + ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, &status); } return m_search_->matchedIndex; @@ -421,24 +404,24 @@ int32_t StringSearch::handlePrev(int32_t position, UErrorCode &status) // values passed here are already in the pre-shift position if (U_SUCCESS(status)) { if (m_strsrch_->pattern.CELength == 0) { - m_search_->matchedIndex = - (m_search_->matchedIndex == USEARCH_DONE ? getOffset() : + m_search_->matchedIndex = + (m_search_->matchedIndex == USEARCH_DONE ? getOffset() : m_search_->matchedIndex); if (m_search_->matchedIndex == 0) { setMatchNotFound(); } else { m_search_->matchedIndex --; - ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, + ucol_setOffset(m_strsrch_->textIter, m_search_->matchedIndex, &status); m_search_->matchedLength = 0; } } else { - // looking at usearch.cpp, this part is shifted out to + // looking at usearch.cpp, this part is shifted out to // StringSearch instead of SearchIterator because m_strsrch_ is // not accessible in SearchIterator - if (!m_search_->isOverlap && + if (!m_search_->isOverlap && position - m_strsrch_->pattern.defaultShiftSize < 0) { setMatchNotFound(); return USEARCH_DONE; @@ -456,10 +439,10 @@ int32_t StringSearch::handlePrev(int32_t position, UErrorCode &status) } if (m_breakiterator_ == NULL #if !UCONFIG_NO_BREAK_ITERATION - || + || m_search_->matchedIndex == USEARCH_DONE || (m_breakiterator_->isBoundary(m_search_->matchedIndex) && - m_breakiterator_->isBoundary(m_search_->matchedIndex + + m_breakiterator_->isBoundary(m_search_->matchedIndex + m_search_->matchedLength)) #endif ) { @@ -467,7 +450,7 @@ int32_t StringSearch::handlePrev(int32_t position, UErrorCode &status) } } } - + return m_search_->matchedIndex; } return USEARCH_DONE; diff --git a/icuSources/i18n/tblcoll.cpp b/icuSources/i18n/tblcoll.cpp index 14f7ad17..779cf4d1 100644 --- a/icuSources/i18n/tblcoll.cpp +++ b/icuSources/i18n/tblcoll.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1996-2004, International Business Machines Corporation and * +* Copyright (C) 1996-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ****************************************************************************** */ @@ -80,9 +80,9 @@ RuleBasedCollator::RuleBasedCollator(const RuleBasedCollator& that) : Collator(that) , dataIsOwned(FALSE) , isWriteThroughAlias(FALSE) -, ucollator(that.ucollator) -, urulestring(that.urulestring) +, ucollator(NULL) { + RuleBasedCollator::operator=(that); } RuleBasedCollator::RuleBasedCollator(const UnicodeString& rules, @@ -126,28 +126,27 @@ RuleBasedCollator::RuleBasedCollator(const UnicodeString& rules, decompositionMode, status); } +RuleBasedCollator::RuleBasedCollator(const uint8_t *bin, int32_t length, + const RuleBasedCollator *base, + UErrorCode &status) : +dataIsOwned(TRUE), +isWriteThroughAlias(FALSE) +{ + ucollator = ucol_openBinary(bin, length, base->ucollator, &status); +} void -RuleBasedCollator::setRuleStringFromCollator(UErrorCode& status) +RuleBasedCollator::setRuleStringFromCollator() { - urulestring = NULL; - if (U_SUCCESS(status)) - { - int32_t length; - const UChar *r = ucol_getRules(ucollator, &length); + int32_t length; + const UChar *r = ucol_getRules(ucollator, &length); - if (length > 0) { - // alias the rules string - urulestring = new UnicodeString(TRUE, r, length); - } - else { - urulestring = new UnicodeString(); - } - /* test for NULL */ - if (urulestring == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } + if (r && length > 0) { + // alias the rules string + urulestring.setTo(TRUE, r, length); + } + else { + urulestring.truncate(0); // Clear string. } } @@ -158,7 +157,6 @@ RuleBasedCollator::construct(const UnicodeString& rules, UColAttributeValue decompositionMode, UErrorCode& status) { - urulestring = 0; ucollator = ucol_openRules(rules.getBuffer(), rules.length(), decompositionMode, collationStrength, NULL, &status); @@ -166,7 +164,14 @@ RuleBasedCollator::construct(const UnicodeString& rules, dataIsOwned = TRUE; // since we own a collator now, we need to get rid of it isWriteThroughAlias = FALSE; - setRuleStringFromCollator(status); + if(ucollator == NULL) { + if(U_SUCCESS(status)) { + status = U_MEMORY_ALLOCATION_ERROR; + } + return; // Failure + } + + setRuleStringFromCollator(); } /* RuleBasedCollator public destructor ----------------------------------- */ @@ -176,10 +181,8 @@ RuleBasedCollator::~RuleBasedCollator() if (dataIsOwned) { ucol_close(ucollator); - delete urulestring; } ucollator = 0; - urulestring = 0; } /* RuleBaseCollator public methods --------------------------------------- */ @@ -221,14 +224,19 @@ RuleBasedCollator& RuleBasedCollator::operator=(const RuleBasedCollator& that) if (dataIsOwned) { ucol_close(ucollator); - ucollator = NULL; - delete urulestring; } - dataIsOwned = FALSE; + urulestring.truncate(0); // empty the rule string + dataIsOwned = TRUE; isWriteThroughAlias = FALSE; - ucollator = that.ucollator; - urulestring = that.urulestring; + + UErrorCode intStatus = U_ZERO_ERROR; + int32_t buffersize = U_COL_SAFECLONE_BUFFERSIZE; + ucollator = ucol_safeClone(that.ucollator, NULL, &buffersize, + &intStatus); + if (U_SUCCESS(intStatus)) { + setRuleStringFromCollator(); + } } return *this; } @@ -236,7 +244,7 @@ RuleBasedCollator& RuleBasedCollator::operator=(const RuleBasedCollator& that) // aliasing, not write-through Collator* RuleBasedCollator::clone() const { - return new RuleBasedCollator(*this); + return new RuleBasedCollator(*this); } CollationElementIterator* RuleBasedCollator::createCollationElementIterator @@ -282,7 +290,7 @@ CollationElementIterator* RuleBasedCollator::createCollationElementIterator */ const UnicodeString& RuleBasedCollator::getRules() const { - return (*urulestring); + return urulestring; } void RuleBasedCollator::getRules(UColRuleOption delta, UnicodeString &buffer) @@ -472,6 +480,12 @@ uint8_t* RuleBasedCollator::cloneRuleData(int32_t &length, return ucol_cloneRuleData(ucollator, &length, &status); } + +int32_t RuleBasedCollator::cloneBinary(uint8_t *buffer, int32_t capacity, UErrorCode &status) +{ + return ucol_cloneBinary(ucollator, buffer, capacity, &status); +} + void RuleBasedCollator::setAttribute(UColAttribute attr, UColAttributeValue value, UErrorCode &status) @@ -519,10 +533,11 @@ Collator* RuleBasedCollator::safeClone(void) return NULL; } - UnicodeString *r = new UnicodeString(*urulestring); - RuleBasedCollator *result = new RuleBasedCollator(ucol, r); + RuleBasedCollator *result = new RuleBasedCollator(); + result->ucollator = ucol; result->dataIsOwned = TRUE; result->isWriteThroughAlias = FALSE; + setRuleStringFromCollator(); return result; } @@ -603,21 +618,13 @@ RuleBasedCollator::setLocales(const Locale& requestedLocale, const Locale& valid // RuleBaseCollatorNew private constructor ---------------------------------- RuleBasedCollator::RuleBasedCollator() - : dataIsOwned(FALSE), isWriteThroughAlias(FALSE), ucollator(0), urulestring(0) -{ -} - -RuleBasedCollator::RuleBasedCollator(UCollator *collator, - UnicodeString *rule) - : dataIsOwned(FALSE), isWriteThroughAlias(FALSE), urulestring(0) + : dataIsOwned(FALSE), isWriteThroughAlias(FALSE), ucollator(NULL) { - ucollator = collator; - urulestring = rule; } RuleBasedCollator::RuleBasedCollator(const Locale& desiredLocale, - UErrorCode& status) : - dataIsOwned(FALSE), ucollator(0), urulestring(0) + UErrorCode& status) + : dataIsOwned(FALSE), isWriteThroughAlias(FALSE), ucollator(NULL) { if (U_FAILURE(status)) return; @@ -659,22 +666,7 @@ RuleBasedCollator::RuleBasedCollator(const Locale& desiredLocale, if (U_SUCCESS(status)) { - int32_t length; - const UChar *r = ucol_getRules(ucollator, &length); - if (length > 0) { - // alias the rules string - urulestring = new UnicodeString(TRUE, r, length); - } - else { - urulestring = new UnicodeString(); - } - /* test for NULL */ - if (urulestring == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - dataIsOwned = TRUE; - isWriteThroughAlias = FALSE; + setRuleStringFromCollator(); } } @@ -697,7 +689,7 @@ RuleBasedCollator::checkOwned() { if (!(dataIsOwned || isWriteThroughAlias)) { UErrorCode status = U_ZERO_ERROR; ucollator = ucol_safeClone(ucollator, NULL, NULL, &status); - setRuleStringFromCollator(status); + setRuleStringFromCollator(); dataIsOwned = TRUE; isWriteThroughAlias = FALSE; } diff --git a/icuSources/i18n/timezone.cpp b/icuSources/i18n/timezone.cpp index 837f4d0e..98551f62 100644 --- a/icuSources/i18n/timezone.cpp +++ b/icuSources/i18n/timezone.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and * +* Copyright (C) 1997-2006, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * @@ -107,7 +107,7 @@ static UnicodeString* OLSON_IDS = 0; #endif U_CDECL_BEGIN -static UBool U_CALLCONV timeZone_cleanup() +static UBool U_CALLCONV timeZone_cleanup(void) { #ifdef U_USE_TIMEZONE_OBSOLETE_2_8 delete []OLSON_IDS; @@ -179,39 +179,40 @@ static UBool getOlsonMeta() { static int32_t findInStringArray(UResourceBundle* array, const UnicodeString& id, UErrorCode &status) { UnicodeString copy; - copy.fastCopyFrom(id); - const UChar* buf = copy.getTerminatedBuffer(); - const UChar* u = NULL; + const UChar *u; + int32_t len; - int32_t count = ures_getSize(array); int32_t start = 0; - int32_t i; - int32_t len; - int32_t limit = count; - if(U_FAILURE(status) || (count < 1)) { + int32_t limit = ures_getSize(array); + int32_t mid; + int32_t lastMid = INT32_MAX; + if(U_FAILURE(status) || (limit < 1)) { return -1; } - U_DEBUG_TZ_MSG(("fisa: Looking for %s, between %d and %d\n", U_DEBUG_TZ_STR(buf), start, limit)); + U_DEBUG_TZ_MSG(("fisa: Looking for %s, between %d and %d\n", U_DEBUG_TZ_STR(UnicodeString(id).getTerminatedBuffer()), start, limit)); - while(U_SUCCESS(status) && (start<limit-1)) { - i = (int32_t)((start+limit)/2); - u = ures_getStringByIndex(array, i, &len, &status); - U_DEBUG_TZ_MSG(("tz: compare to %s, %d .. [%d] .. %d\n", U_DEBUG_TZ_STR(u), start, i, limit)); - int r = u_strcmp(buf,u); - if((r==0) && U_SUCCESS(status)) { - U_DEBUG_TZ_MSG(("fisa: found at %d\n", i)); - return i; + for (;;) { + mid = (int32_t)((start + limit) / 2); + if (lastMid == mid) { /* Have we moved? */ + break; /* We haven't moved, and it wasn't found. */ + } + lastMid = mid; + u = ures_getStringByIndex(array, mid, &len, &status); + if (U_FAILURE(status)) { + break; + } + U_DEBUG_TZ_MSG(("tz: compare to %s, %d .. [%d] .. %d\n", U_DEBUG_TZ_STR(u), start, mid, limit)); + copy.setTo(TRUE, u, len); + int r = id.compare(copy); + if(r==0) { + U_DEBUG_TZ_MSG(("fisa: found at %d\n", mid)); + return mid; } else if(r<0) { - limit = i; + limit = mid; } else { - start = i; + start = mid; } } - u = ures_getStringByIndex(array, start, &len, &status); - if(u_strcmp(buf,u)==0) { - U_DEBUG_TZ_MSG(("fisa: finally found at %d\n", start)); - return start; - } U_DEBUG_TZ_MSG(("fisa: not found\n")); return -1; } @@ -526,6 +527,16 @@ TimeZone::initDefault() hostStrID.truncate(hostStrID.length()-1); default_zone = createSystemTimeZone(hostStrID); + int32_t hostIDLen = hostStrID.length(); + if (default_zone != NULL && rawOffset != default_zone->getRawOffset() + && (3 <= hostIDLen && hostIDLen <= 4)) + { + // Uh oh. This probably wasn't a good id. + // It was probably an ambiguous abbreviation + delete default_zone; + default_zone = NULL; + } + #if 0 // NOTE: As of ICU 2.8, we no longer have an offsets table, since // historical zones can change offset over time. If we add @@ -686,6 +697,8 @@ void TimeZone::getOffset(UDate date, UBool local, int32_t& rawOffset, // New available IDs API as of ICU 2.4. Uses StringEnumeration API. class TZEnumeration : public StringEnumeration { +private: + // Map into to zones. Our results are zone[map[i]] for // i=0..len-1, where zone[i] is the i-th Olson zone. If map==NULL // then our results are zone[i] for i=0..len-1. Len will be zero @@ -694,6 +707,23 @@ class TZEnumeration : public StringEnumeration { int32_t len; int32_t pos; + UBool getID(int32_t i) { + UErrorCode ec = U_ZERO_ERROR; + int32_t idLen = 0; + const UChar* id = NULL; + UResourceBundle *top = ures_openDirect(0, kZONEINFO, &ec); + top = ures_getByKey(top, kNAMES, top, &ec); // dereference Zones section + id = ures_getStringByIndex(top, i, &idLen, &ec); + if(U_FAILURE(ec)) { + unistr.truncate(0); + } + else { + unistr.fastCopyFrom(UnicodeString(TRUE, id, idLen)); + } + ures_close(top); + return U_SUCCESS(ec); + } + public: TZEnumeration() : map(NULL), len(0), pos(0) { if (getOlsonMeta()) { @@ -811,25 +841,6 @@ public: pos = 0; } -private: - - UBool getID(int32_t i) { - UErrorCode ec = U_ZERO_ERROR; - int32_t idLen = 0; - const UChar* id = NULL; - UResourceBundle *top = ures_openDirect(0, kZONEINFO, &ec); - top = ures_getByKey(top, kNAMES, top, &ec); // dereference Zones section - id = ures_getStringByIndex(top, i, &idLen, &ec); - if(U_FAILURE(ec)) { - unistr.truncate(0); - } - else { - unistr.fastCopyFrom(UnicodeString(TRUE, id, idLen)); - } - ures_close(top); - return U_SUCCESS(ec); - } - public: static UClassID U_EXPORT2 getStaticClassID(void); virtual UClassID getDynamicClassID(void) const; @@ -1072,7 +1083,15 @@ TimeZone::getDisplayName(UBool daylight, EDisplayType style, UnicodeString& resu { return getDisplayName(daylight,style, Locale::getDefault(), result); } - +//-------------------------------------- +int32_t +TimeZone::getDSTSavings()const { + if (useDaylightTime()) { + return 3600000; + } + return 0; +} +//--------------------------------------- UnicodeString& TimeZone::getDisplayName(UBool daylight, EDisplayType style, const Locale& locale, UnicodeString& result) const { @@ -1099,14 +1118,17 @@ TimeZone::getDisplayName(UBool daylight, EDisplayType style, const Locale& local // and hence the same display name. // We don't cache these because they're small and cheap to create. UnicodeString tempID; - SimpleTimeZone *tz = daylight ? - // For the pure-DST zone, we use JANUARY and DECEMBER - - new SimpleTimeZone(getRawOffset(), getID(tempID), - UCAL_JANUARY , 1, 0, 0, - UCAL_DECEMBER , 31, 0, U_MILLIS_PER_DAY, status) : - new SimpleTimeZone(getRawOffset(), getID(tempID)); - + SimpleTimeZone *tz = NULL; + if(daylight && useDaylightTime()){ + // For the pure-DST zone, we use JANUARY and DECEMBER + int savings = getDSTSavings(); + tz = new SimpleTimeZone(getRawOffset(), getID(tempID), + UCAL_JANUARY, 1, 0, 0, + UCAL_FEBRUARY, 1, 0, 0, + savings, status); + }else{ + tz = new SimpleTimeZone(getRawOffset(), getID(tempID)); + } format.applyPattern(style == LONG ? ZZZZ_STR : Z_STR); Calendar *myCalendar = (Calendar*)format.getCalendar(); myCalendar->setTimeZone(*tz); // copy @@ -1114,7 +1136,7 @@ TimeZone::getDisplayName(UBool daylight, EDisplayType style, const Locale& local delete tz; FieldPosition pos(FieldPosition::DONT_CARE); - return format.format(UDate(196262345678.), result, pos); // Must use a valid date here. + return format.format(UDate(864000000L), result, pos); // Must use a valid date here. } @@ -1150,6 +1172,9 @@ TimeZone::createCustomTimeZone(const UnicodeString& id) UErrorCode success = U_ZERO_ERROR; numberFormat = NumberFormat::createInstance(success); + if(U_FAILURE(success)){ + return NULL; + } numberFormat->setParseIntegerOnly(TRUE); diff --git a/icuSources/i18n/titletrn.cpp b/icuSources/i18n/titletrn.cpp index dd3375b9..e8508717 100644 --- a/icuSources/i18n/titletrn.cpp +++ b/icuSources/i18n/titletrn.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -24,8 +24,8 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TitlecaseTransliterator) -TitlecaseTransliterator::TitlecaseTransliterator(const Locale& theLoc) : - CaseMapTransliterator(theLoc, UNICODE_STRING("Any-Title", 9), NULL) +TitlecaseTransliterator::TitlecaseTransliterator() : + CaseMapTransliterator(UNICODE_STRING("Any-Title", 9), NULL) { // Need to look back 2 characters in the case of "can't" setMaximumContextLength(2); @@ -125,16 +125,17 @@ void TitlecaseTransliterator::handleTransliterate( type=ucase_getTypeOrIgnorable(fCsp, c); if(type>=0) { // not case-ignorable if(doTitle) { - result=ucase_toFullTitle(fCsp, c, utrans_rep_caseContextIterator, &csc, &s, fLocName, &locCache); + result=ucase_toFullTitle(fCsp, c, utrans_rep_caseContextIterator, &csc, &s, "", &locCache); } else { - result=ucase_toFullLower(fCsp, c, utrans_rep_caseContextIterator, &csc, &s, fLocName, &locCache); + result=ucase_toFullLower(fCsp, c, utrans_rep_caseContextIterator, &csc, &s, "", &locCache); } doTitle = (UBool)(type==0); // doTitle=isUncased if(csc.b1 && isIncremental) { // fMap() tried to look beyond the context limit // wait for more input - break; + offsets.start=csc.cpStart; + return; } if(result>=0) { diff --git a/icuSources/i18n/titletrn.h b/icuSources/i18n/titletrn.h index b8c67d6e..ae08db88 100644 --- a/icuSources/i18n/titletrn.h +++ b/icuSources/i18n/titletrn.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -15,7 +15,6 @@ #if !UCONFIG_NO_TRANSLITERATION #include "unicode/translit.h" -#include "unicode/locid.h" #include "ucase.h" #include "casetrn.h" @@ -35,7 +34,7 @@ class U_I18N_API TitlecaseTransliterator : public CaseMapTransliterator { * Constructs a transliterator. * @param loc the given locale. */ - TitlecaseTransliterator(const Locale& loc = Locale::getDefault()); + TitlecaseTransliterator(); /** * Destructor. @@ -60,15 +59,11 @@ class U_I18N_API TitlecaseTransliterator : public CaseMapTransliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); diff --git a/icuSources/i18n/tolowtrn.cpp b/icuSources/i18n/tolowtrn.cpp index 6eab680c..267ce406 100644 --- a/icuSources/i18n/tolowtrn.cpp +++ b/icuSources/i18n/tolowtrn.cpp @@ -25,8 +25,8 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LowercaseTransliterator) /** * Constructs a transliterator. */ -LowercaseTransliterator::LowercaseTransliterator(const Locale& theLoc) : - CaseMapTransliterator(theLoc, UNICODE_STRING("Any-Lower", 9), ucase_toFullLower) +LowercaseTransliterator::LowercaseTransliterator() : + CaseMapTransliterator(UNICODE_STRING("Any-Lower", 9), ucase_toFullLower) { } diff --git a/icuSources/i18n/tolowtrn.h b/icuSources/i18n/tolowtrn.h index c5bccc03..77af67a6 100644 --- a/icuSources/i18n/tolowtrn.h +++ b/icuSources/i18n/tolowtrn.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -15,7 +15,6 @@ #if !UCONFIG_NO_TRANSLITERATION #include "unicode/translit.h" -#include "unicode/locid.h" #include "casetrn.h" U_NAMESPACE_BEGIN @@ -33,7 +32,7 @@ class U_I18N_API LowercaseTransliterator : public CaseMapTransliterator { * Constructs a transliterator. * @param loc the given locale. */ - LowercaseTransliterator(const Locale& loc = Locale::getDefault()); + LowercaseTransliterator(); /** * Destructor. @@ -58,15 +57,11 @@ class U_I18N_API LowercaseTransliterator : public CaseMapTransliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); }; diff --git a/icuSources/i18n/toupptrn.cpp b/icuSources/i18n/toupptrn.cpp index 3d099da2..0678c360 100644 --- a/icuSources/i18n/toupptrn.cpp +++ b/icuSources/i18n/toupptrn.cpp @@ -25,8 +25,8 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UppercaseTransliterator) /** * Constructs a transliterator. */ -UppercaseTransliterator::UppercaseTransliterator(const Locale& theLoc) : - CaseMapTransliterator(theLoc, UNICODE_STRING("Any-Upper", 9), ucase_toFullUpper) +UppercaseTransliterator::UppercaseTransliterator() : + CaseMapTransliterator(UNICODE_STRING("Any-Upper", 9), ucase_toFullUpper) { } diff --git a/icuSources/i18n/toupptrn.h b/icuSources/i18n/toupptrn.h index d1796832..e0f4ef5d 100644 --- a/icuSources/i18n/toupptrn.h +++ b/icuSources/i18n/toupptrn.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -15,7 +15,6 @@ #if !UCONFIG_NO_TRANSLITERATION #include "unicode/translit.h" -#include "unicode/locid.h" #include "casetrn.h" U_NAMESPACE_BEGIN @@ -33,7 +32,7 @@ class U_I18N_API UppercaseTransliterator : public CaseMapTransliterator { * Constructs a transliterator. * @param loc the given locale. */ - UppercaseTransliterator(const Locale& loc = Locale::getDefault()); + UppercaseTransliterator(); /** * Destructor. @@ -58,15 +57,11 @@ class U_I18N_API UppercaseTransliterator : public CaseMapTransliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); }; diff --git a/icuSources/i18n/translit.cpp b/icuSources/i18n/translit.cpp index 874bff99..8a990f40 100644 --- a/icuSources/i18n/translit.cpp +++ b/icuSources/i18n/translit.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -46,6 +46,7 @@ #include "uassert.h" #include "cmemory.h" #include "cstring.h" +#include "uinvchar.h" static const UChar TARGET_SEP = 0x002D; /*-*/ static const UChar ID_DELIM = 0x003B; /*;*/ @@ -106,7 +107,7 @@ UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(Transliterator) * Return TRUE if the given UTransPosition is valid for text of * the given length. */ -inline UBool positionIsValid(UTransPosition& index, int32_t len) { +static inline UBool positionIsValid(UTransPosition& index, int32_t len) { return !(index.contextStart < 0 || index.start < index.contextStart || index.limit < index.start || @@ -125,17 +126,20 @@ inline UBool positionIsValid(UTransPosition& index, int32_t len) { Transliterator::Transliterator(const UnicodeString& theID, UnicodeFilter* adoptedFilter) : UObject(), ID(theID), filter(adoptedFilter), - maximumContextLength(0) { - - // NUL-terminate the ID string - ID.getTerminatedBuffer(); + maximumContextLength(0) +{ + // NUL-terminate the ID string, which is a non-aliased copy. + ID.append((UChar)0); + ID.truncate(ID.length()-1); } /** * Destructor. */ Transliterator::~Transliterator() { - delete filter; + if (filter) { + delete filter; + } } /** @@ -143,10 +147,11 @@ Transliterator::~Transliterator() { */ Transliterator::Transliterator(const Transliterator& other) : UObject(other), ID(other.ID), filter(0), - maximumContextLength(other.maximumContextLength) { - - // NUL-terminate the ID string - ID.getTerminatedBuffer(); + maximumContextLength(other.maximumContextLength) +{ + // NUL-terminate the ID string, which is a non-aliased copy. + ID.append((UChar)0); + ID.truncate(ID.length()-1); if (other.filter != 0) { // We own the filter, so we must have our own copy @@ -154,6 +159,10 @@ Transliterator::Transliterator(const Transliterator& other) : } } +Transliterator* Transliterator::clone() const { + return NULL; +} + /** * Assignment operator. */ @@ -746,65 +755,69 @@ UnicodeString& U_EXPORT2 Transliterator::getDisplayName(const UnicodeString& id, ID.append(TARGET_SEP).append(target).append(variant); // build the char* key - char key[200]; - uprv_strcpy(key, RB_DISPLAY_NAME_PREFIX); - int32_t length=(int32_t)uprv_strlen(RB_DISPLAY_NAME_PREFIX); - ID.extract(0, (int32_t)(sizeof(key)-length), key+length, ""); + if (uprv_isInvariantUString(ID.getBuffer(), ID.length())) { + char key[200]; + uprv_strcpy(key, RB_DISPLAY_NAME_PREFIX); + int32_t length=(int32_t)uprv_strlen(RB_DISPLAY_NAME_PREFIX); + ID.extract(0, (int32_t)(sizeof(key)-length), key+length, (int32_t)(sizeof(key)-length), US_INV); - // Try to retrieve a UnicodeString from the bundle. - UnicodeString resString = bundle.getStringEx(key, status); + // Try to retrieve a UnicodeString from the bundle. + UnicodeString resString = bundle.getStringEx(key, status); - if (U_SUCCESS(status) && resString.length() != 0) { - return result = resString; // [sic] assign & return - } + if (U_SUCCESS(status) && resString.length() != 0) { + return result = resString; // [sic] assign & return + } #if !UCONFIG_NO_FORMATTING - // We have failed to get a name from the locale data. This is - // typical, since most transliterators will not have localized - // name data. The next step is to retrieve the MessageFormat - // pattern from the locale data and to use it to synthesize the - // name from the ID. - - status = U_ZERO_ERROR; - resString = bundle.getStringEx(RB_DISPLAY_NAME_PATTERN, status); - - if (U_SUCCESS(status) && resString.length() != 0) { - MessageFormat msg(resString, inLocale, status); - // Suspend checking status until later... - - // We pass either 2 or 3 Formattable objects to msg. - Formattable args[3]; - int32_t nargs; - args[0].setLong(2); // # of args to follow - args[1].setString(source); - args[2].setString(target); - nargs = 3; - - // Use display names for the scripts, if they exist - UnicodeString s; - length=(int32_t)uprv_strlen(RB_SCRIPT_DISPLAY_NAME_PREFIX); - for (int j=1; j<=2; ++j) { - status = U_ZERO_ERROR; - uprv_strcpy(key, RB_SCRIPT_DISPLAY_NAME_PREFIX); - args[j].getString(s); - s.extract(0, sizeof(key)-length-1, key+length, ""); + // We have failed to get a name from the locale data. This is + // typical, since most transliterators will not have localized + // name data. The next step is to retrieve the MessageFormat + // pattern from the locale data and to use it to synthesize the + // name from the ID. - resString = bundle.getStringEx(key, status); + status = U_ZERO_ERROR; + resString = bundle.getStringEx(RB_DISPLAY_NAME_PATTERN, status); + + if (U_SUCCESS(status) && resString.length() != 0) { + MessageFormat msg(resString, inLocale, status); + // Suspend checking status until later... + + // We pass either 2 or 3 Formattable objects to msg. + Formattable args[3]; + int32_t nargs; + args[0].setLong(2); // # of args to follow + args[1].setString(source); + args[2].setString(target); + nargs = 3; + + // Use display names for the scripts, if they exist + UnicodeString s; + length=(int32_t)uprv_strlen(RB_SCRIPT_DISPLAY_NAME_PREFIX); + for (int j=1; j<=2; ++j) { + status = U_ZERO_ERROR; + uprv_strcpy(key, RB_SCRIPT_DISPLAY_NAME_PREFIX); + args[j].getString(s); + if (uprv_isInvariantUString(s.getBuffer(), s.length())) { + s.extract(0, sizeof(key)-length-1, key+length, (int32_t)sizeof(key)-length-1, US_INV); + + resString = bundle.getStringEx(key, status); + + if (U_SUCCESS(status)) { + args[j] = resString; + } + } + } + status = U_ZERO_ERROR; + FieldPosition pos; // ignored by msg + msg.format(args, nargs, result, pos, status); if (U_SUCCESS(status)) { - args[j] = resString; + result.append(variant); + return result; } } - - status = U_ZERO_ERROR; - FieldPosition pos; // ignored by msg - msg.format(args, nargs, result, pos, status); - if (U_SUCCESS(status)) { - result.append(variant); - return result; - } - } #endif + } // We should not reach this point unless there is something // wrong with the build or the RB_DISPLAY_NAME_PATTERN has @@ -916,30 +929,26 @@ Transliterator::createInstance(const UnicodeString& ID, return NULL; } - TransliteratorIDParser::instantiateList(list, NULL, -1, status); + TransliteratorIDParser::instantiateList(list, status); if (U_FAILURE(status)) { return NULL; } U_ASSERT(list.size() > 0); Transliterator* t = NULL; - switch (list.size()) { - case 1: - t = (Transliterator*) list.elementAt(0); - break; - default: + + if (list.size() > 1 || canonID.indexOf(ID_DELIM) >= 0) { + // [NOTE: If it's a compoundID, we instantiate a CompoundTransliterator even if it only + // has one child transliterator. This is so that toRules() will return the right thing + // (without any inactive ID), but our main ID still comes out correct. That is, if we + // instantiate "(Lower);Latin-Greek;", we want the rules to come out as "::Latin-Greek;" + // even though the ID is "(Lower);Latin-Greek;". t = new CompoundTransliterator(list, parseError, status); - /* test for NULL */ - if (t == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; - } - if (U_FAILURE(status)) { - delete t; - return NULL; - } - break; } + else { + t = (Transliterator*)list.elementAt(0); + } + t->setID(canonID); if (globalFilter != NULL) { t->adoptFilter(globalFilter); @@ -989,7 +998,7 @@ Transliterator* Transliterator::createBasicInstance(const UnicodeString& id, // Other aliases are handled with TransliteratorAlias::create(). if (alias->isRuleBased()) { // Step 1. parse - TransliteratorParser parser; + TransliteratorParser parser(ec); alias->parse(parser, pe, ec); delete alias; alias = 0; @@ -1040,7 +1049,7 @@ Transliterator::createFromRules(const UnicodeString& ID, { Transliterator* t = NULL; - TransliteratorParser parser; + TransliteratorParser parser(status); parser.parse(rules, dir, parseError, status); if (U_FAILURE(status)) { @@ -1048,59 +1057,62 @@ Transliterator::createFromRules(const UnicodeString& ID, } // NOTE: The logic here matches that in TransliteratorRegistry. - if (parser.idBlock.length() == 0) { - if (parser.data == NULL) { - // No idBlock, no data -- this is just an - // alias for Null - t = new NullTransliterator(); - } else { - // No idBlock, data != 0 -- this is an - // ordinary RBT_DATA. - t = new RuleBasedTransliterator(ID, parser.orphanData(), TRUE); // TRUE == adopt data object + if (parser.idBlockVector.size() == 0 && parser.dataVector.size() == 0) { + t = new NullTransliterator(); + } + else if (parser.idBlockVector.size() == 0 && parser.dataVector.size() == 1) { + t = new RuleBasedTransliterator(ID, (TransliterationRuleData*)parser.dataVector.orphanElementAt(0), TRUE); + } + else if (parser.idBlockVector.size() == 1 && parser.dataVector.size() == 0) { + // idBlock, no data -- this is an alias. The ID has + // been munged from reverse into forward mode, if + // necessary, so instantiate the ID in the forward + // direction. + if (parser.compoundFilter != NULL) { + UnicodeString filterPattern; + parser.compoundFilter->toPattern(filterPattern, FALSE); + t = createInstance(filterPattern + UnicodeString(ID_DELIM) + + *((UnicodeString*)parser.idBlockVector.elementAt(0)), UTRANS_FORWARD, parseError, status); } - /* test for NULL */ - if (t == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; + else + t = createInstance(*((UnicodeString*)parser.idBlockVector.elementAt(0)), UTRANS_FORWARD, parseError, status); + + + if (t != NULL) { + t->setID(ID); } - } else { - if (parser.data == NULL) { - // idBlock, no data -- this is an alias. The ID has - // been munged from reverse into forward mode, if - // necessary, so instantiate the ID in the forward - // direction. - t = createInstance(parser.idBlock, UTRANS_FORWARD, parseError, status); - if (t != NULL) { - t->setID(ID); - } - } else { - // idBlock and data -- this is a compound - // RBT - UnicodeString id((UChar)0x005F); // '_' - t = new RuleBasedTransliterator(id, parser.orphanData(), TRUE); // TRUE == adopt data object - /* test for NULL */ - if (t == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; - } - t = new CompoundTransliterator(ID, parser.idBlock, parser.idSplitPoint, - t, status); - /* test for NULL */ - if (t == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; - } - if (U_FAILURE(status)) { - delete t; - t = 0; + } + else { + UVector transliterators(status); + int32_t passNumber = 1; + + int32_t limit = parser.idBlockVector.size(); + if (parser.dataVector.size() > limit) + limit = parser.dataVector.size(); + + for (int32_t i = 0; i < limit; i++) { + if (i < parser.idBlockVector.size()) { + UnicodeString* idBlock = (UnicodeString*)parser.idBlockVector.elementAt(i); + if (!idBlock->isEmpty()) { + Transliterator* temp = createInstance(*idBlock, UTRANS_FORWARD, parseError, status); + if (temp != NULL && temp->getDynamicClassID() != NullTransliterator::getStaticClassID()) + transliterators.addElement(temp, status); + else + delete temp; + } } - if (parser.compoundFilter != NULL) { - t->adoptFilter(parser.orphanCompoundFilter()); + if (!parser.dataVector.isEmpty()) { + TransliterationRuleData* data = (TransliterationRuleData*)parser.dataVector.orphanElementAt(0); + transliterators.addElement( + new RuleBasedTransliterator(UnicodeString(CompoundTransliterator::PASS_STRING) + (passNumber++), + data, TRUE), status); } - return t; } - } + t = new CompoundTransliterator(transliterators, passNumber - 1, parseError, status); + t->setID(ID); + t->adoptFilter(parser.orphanCompoundFilter()); + } return t; } @@ -1232,6 +1244,20 @@ void Transliterator::_registerInstance(Transliterator* adoptedPrototype) { registry->put(adoptedPrototype, TRUE); } +void U_EXPORT2 Transliterator::registerAlias(const UnicodeString& aliasID, + const UnicodeString& realID) { + umtx_init(®istryMutex); + Mutex lock(®istryMutex); + if (HAVE_REGISTRY) { + _registerAlias(aliasID, realID); + } +} + +void Transliterator::_registerAlias(const UnicodeString& aliasID, + const UnicodeString& realID) { + registry->put(aliasID, realID, FALSE, TRUE); +} + /** * Unregisters a transliterator or class. This may be either * a system transliterator or a user transliterator or class. @@ -1463,13 +1489,15 @@ UBool Transliterator::initializeRegistry() { for (row = 0; row < maxRows; row++) { colBund = ures_getByIndex(transIDs, row, 0, &status); if (U_SUCCESS(status)) { - UnicodeString id(ures_getKey(colBund)); + UnicodeString id(ures_getKey(colBund), -1, US_INV); UResourceBundle* res = ures_getNextResource(colBund, NULL, &status); const char* typeStr = ures_getKey(res); UChar type; u_charsToUChars(typeStr, &type, 1); if (U_SUCCESS(status)) { + int32_t len = 0; + const UChar *resString; switch (type) { case 0x66: // 'f' case 0x69: // 'i' @@ -1477,19 +1505,19 @@ UBool Transliterator::initializeRegistry() { // row[2]=resource, row[3]=direction { - UnicodeString resString = ures_getUnicodeStringByKey(res, "resource", &status); + resString = ures_getStringByKey(res, "resource", &len, &status); UBool visible = (type == 0x0066 /*f*/); UTransDirection dir = (ures_getUnicodeStringByKey(res, "direction", &status).charAt(0) == 0x0046 /*F*/) ? UTRANS_FORWARD : UTRANS_REVERSE; - registry->put(id, resString, dir, visible); + registry->put(id, UnicodeString(TRUE, resString, len), dir, TRUE, visible); } break; case 0x61: // 'a' // 'alias'; row[2]=createInstance argument - UnicodeString resString = ures_getUnicodeString(res, &status); - registry->put(id, resString, TRUE); + resString = ures_getString(res, &len, &status); + registry->put(id, UnicodeString(TRUE, resString, len), TRUE, TRUE); break; } } @@ -1519,8 +1547,8 @@ UBool Transliterator::initializeRegistry() { NormalizationTransliterator::registerIDs(); AnyTransliterator::registerIDs(); - _registerSpecialInverse(NullTransliterator::SHORT_ID, - NullTransliterator::SHORT_ID, FALSE); + _registerSpecialInverse(UNICODE_STRING_SIMPLE("Null"), + UNICODE_STRING_SIMPLE("Null"), FALSE); _registerSpecialInverse(UNICODE_STRING_SIMPLE("Upper"), UNICODE_STRING_SIMPLE("Lower"), TRUE); _registerSpecialInverse(UNICODE_STRING_SIMPLE("Title"), diff --git a/icuSources/i18n/transreg.cpp b/icuSources/i18n/transreg.cpp index 781ea87a..834e4ce8 100644 --- a/icuSources/i18n/transreg.cpp +++ b/icuSources/i18n/transreg.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -12,11 +12,8 @@ #if !UCONFIG_NO_TRANSLITERATION -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/parseerr.h" -#include "unicode/resbund.h" #include "unicode/translit.h" +#include "unicode/resbund.h" #include "unicode/uniset.h" #include "unicode/uscript.h" #include "rbt.h" @@ -28,6 +25,7 @@ #include "tridpars.h" #include "charstr.h" #include "uassert.h" +#include "locutil.h" // Enable the following symbol to add debugging code that tracks the // allocation, deletion, and use of Entry objects. BoundsChecker has @@ -42,8 +40,8 @@ // UChar constants static const UChar LOCALE_SEP = 95; // '_' -static const UChar ID_SEP = 0x002D; /*-*/ -static const UChar VARIANT_SEP = 0x002F; // '/' +//static const UChar ID_SEP = 0x002D; /*-*/ +//static const UChar VARIANT_SEP = 0x002F; // '/' // String constants static const UChar NO_VARIANT[] = { 0 }; // empty string @@ -52,7 +50,7 @@ static const UChar ANY[] = { 65, 110, 121, 0 }; // Any /** * Resource bundle key for the RuleBasedTransliterator rule. */ -static const char RB_RULE[] = "Rule"; +//static const char RB_RULE[] = "Rule"; U_NAMESPACE_BEGIN @@ -60,25 +58,25 @@ U_NAMESPACE_BEGIN // Alias //------------------------------------------------------------------ -TransliteratorAlias::TransliteratorAlias(const UnicodeString& theAliasID) : +TransliteratorAlias::TransliteratorAlias(const UnicodeString& theAliasID, + const UnicodeSet* cpdFilter) : ID(), - aliasID(theAliasID), - trans(0), - compoundFilter(0), - idSplitPoint(-1), + aliasesOrRules(theAliasID), + transes(0), + compoundFilter(cpdFilter), + direction(UTRANS_FORWARD), type(TransliteratorAlias::SIMPLE) { } TransliteratorAlias::TransliteratorAlias(const UnicodeString& theID, - const UnicodeString& idBlock, - Transliterator* adopted, - int32_t theIDSplitPoint, + const UnicodeString& idBlocks, + UVector* adoptedTransliterators, const UnicodeSet* cpdFilter) : ID(theID), - aliasID(idBlock), - trans(adopted), + aliasesOrRules(idBlocks), + transes(adoptedTransliterators), compoundFilter(cpdFilter), - idSplitPoint(theIDSplitPoint), + direction(UTRANS_FORWARD), type(TransliteratorAlias::COMPOUND) { } @@ -86,15 +84,15 @@ TransliteratorAlias::TransliteratorAlias(const UnicodeString& theID, const UnicodeString& rules, UTransDirection dir) : ID(theID), - aliasID(rules), // bad name -- rename aliasID! - trans(0), + aliasesOrRules(rules), + transes(0), compoundFilter(0), - idSplitPoint((int32_t) dir), // bad name -- rename idSplitPoint! + direction(dir), type(TransliteratorAlias::RULES) { } TransliteratorAlias::~TransliteratorAlias() { - delete trans; + delete transes; } @@ -106,23 +104,63 @@ Transliterator* TransliteratorAlias::create(UParseError& pe, Transliterator *t = NULL; switch (type) { case SIMPLE: - t = Transliterator::createInstance(aliasID, UTRANS_FORWARD, pe, ec); - break; - case COMPOUND: - t = new CompoundTransliterator(ID, aliasID, idSplitPoint, - trans, ec); - /* test for NULL */ - if (t == 0) { - ec = U_MEMORY_ALLOCATION_ERROR; + t = Transliterator::createInstance(aliasesOrRules, UTRANS_FORWARD, pe, ec); + if(U_FAILURE(ec)){ return 0; } - trans = 0; // so we don't delete it later - if (compoundFilter) { - // TODO: Is this right? Are we leaking memory here? - // I'm suspicious because of the "trans = 0" line above; - // doesn't seem to fit the cloning here. Don't have time - // to track this down right now. [alan 3.0] - t->adoptFilter((UnicodeSet*) compoundFilter->clone()); + if (compoundFilter != 0) + t->adoptFilter((UnicodeSet*)compoundFilter->clone()); + break; + case COMPOUND: + { + // the total number of transliterators in the compound is the total number of anonymous transliterators + // plus the total number of ID blocks-- we start by assuming the list begins and ends with an ID + // block and that each pair anonymous transliterators has an ID block between them. Then we go back + // to see whether there really are ID blocks at the beginning and end (by looking for U+FFFF, which + // marks the position where an anonymous transliterator goes) and adjust accordingly + int32_t anonymousRBTs = transes->size(); + int32_t transCount = anonymousRBTs * 2 + 1; + if (!aliasesOrRules.isEmpty() && aliasesOrRules[0] == (UChar)(0xffff)) + --transCount; + if (aliasesOrRules.length() >= 2 && aliasesOrRules[aliasesOrRules.length() - 1] == (UChar)(0xffff)) + --transCount; + UnicodeString noIDBlock((UChar)(0xffff)); + noIDBlock += ((UChar)(0xffff)); + int32_t pos = aliasesOrRules.indexOf(noIDBlock); + while (pos >= 0) { + --transCount; + pos = aliasesOrRules.indexOf(noIDBlock, pos + 1); + } + + UVector transliterators(ec); + UnicodeString idBlock; + int32_t blockSeparatorPos = aliasesOrRules.indexOf((UChar)(0xffff)); + while (blockSeparatorPos >= 0) { + aliasesOrRules.extract(0, blockSeparatorPos, idBlock); + aliasesOrRules.remove(0, blockSeparatorPos + 1); + if (!idBlock.isEmpty()) + transliterators.addElement(Transliterator::createInstance(idBlock, UTRANS_FORWARD, pe, ec), ec); + if (!transes->isEmpty()) + transliterators.addElement(transes->orphanElementAt(0), ec); + blockSeparatorPos = aliasesOrRules.indexOf((UChar)(0xffff)); + } + if (!aliasesOrRules.isEmpty()) + transliterators.addElement(Transliterator::createInstance(aliasesOrRules, UTRANS_FORWARD, pe, ec), ec); + while (!transes->isEmpty()) + transliterators.addElement(transes->orphanElementAt(0), ec); + + if (U_SUCCESS(ec)) { + t = new CompoundTransliterator(ID, transliterators, + (compoundFilter ? (UnicodeSet*)(compoundFilter->clone()) : 0), + anonymousRBTs, pe, ec); + if (t == 0) { + ec = U_MEMORY_ALLOCATION_ERROR; + return 0; + } + } else { + for (int32_t i = 0; i < transliterators.size(); i++) + delete (Transliterator*)(transliterators.elementAt(i)); + } } break; case RULES: @@ -143,9 +181,7 @@ void TransliteratorAlias::parse(TransliteratorParser& parser, return; } - // aliasID is really rules -- rename it! - // idSplitPoint is really UTransDirection -- rename it! - parser.parse(aliasID, (UTransDirection) idSplitPoint, pe, ec); + parser.parse(aliasesOrRules, direction, pe, ec); } //---------------------------------------------------------------------- @@ -198,37 +234,42 @@ class Spec : public UMemory { Spec &operator=(const Spec &other); // forbid copying of this class }; -Spec::Spec(const UnicodeString& theSpec) : top(theSpec) { +Spec::Spec(const UnicodeString& theSpec) +: top(theSpec), + res(0) +{ UErrorCode status = U_ZERO_ERROR; - CharString topch(top); - Locale toploc(topch); - res = new ResourceBundle(U_ICUDATA_TRANSLIT, toploc, status); - /* test for NULL */ - if (res == 0) { - return; - } - if (U_FAILURE(status) || status == U_USING_DEFAULT_WARNING) { - delete res; - res = 0; + CharString topch(theSpec); + Locale topLoc(""); + LocaleUtility::initLocaleFromName(theSpec, topLoc); + if (!topLoc.isBogus()) { + res = new ResourceBundle(U_ICUDATA_TRANSLIT, topLoc, status); + /* test for NULL */ + if (res == 0) { + return; + } + if (U_FAILURE(status) || status == U_USING_DEFAULT_WARNING) { + delete res; + res = 0; + } } // Canonicalize script name -or- do locale->script mapping status = U_ZERO_ERROR; - const int32_t capacity = 10; + static const int32_t capacity = 10; UScriptCode script[capacity]={USCRIPT_INVALID_CODE}; int32_t num = uscript_getCode(topch,script,capacity, &status); if (num > 0 && script[0] != USCRIPT_INVALID_CODE) { - scriptName = UnicodeString(uscript_getName(script[0]), ""); + scriptName = UnicodeString(uscript_getName(script[0]), -1, US_INV); } // Canonicalize top - char buf[256]; if (res != 0) { // Canonicalize locale name - status = U_ZERO_ERROR; - uloc_getName(topch, buf, sizeof(buf), &status); - if (U_SUCCESS(status) && status != U_STRING_NOT_TERMINATED_WARNING) { - top = UnicodeString(buf, ""); + UnicodeString locStr; + LocaleUtility::initNameFromLocale(topLoc, locStr); + if (!locStr.isBogus()) { + top = locStr; } } else if (scriptName.length() != 0) { // We are a script; use canonical name @@ -396,7 +437,8 @@ public: UnicodeSet* compoundFilter; // For COMPOUND_RBT union { Transliterator* prototype; // For PROTOTYPE - TransliterationRuleData* data; // For RBT_DATA, COMPOUND_RBT + TransliterationRuleData* data; // For RBT_DATA + UVector* dataVector; // For COMPOUND_RBT struct { Transliterator::Factory function; Transliterator::Token context; @@ -425,12 +467,16 @@ Entry::~Entry() { DEBUG_delEntry(this); if (entryType == PROTOTYPE) { delete u.prototype; - } else if (entryType == RBT_DATA || entryType == COMPOUND_RBT) { + } else if (entryType == RBT_DATA) { // The data object is shared between instances of RBT. The // entry object owns it. It should only be deleted when the // transliterator component is being cleaned up. Doing so // invalidates any RBTs that the user has instantiated. delete u.data; + } else if (entryType == COMPOUND_RBT) { + while (u.dataVector != NULL && !u.dataVector->isEmpty()) + delete (TransliterationRuleData*)u.dataVector->orphanElementAt(0); + delete u.dataVector; } delete compoundFilter; } @@ -455,7 +501,7 @@ void Entry::setFactory(Transliterator::Factory factory, // UObjectDeleter for Hashtable::setValueDeleter U_CDECL_BEGIN -static void U_EXPORT2 U_CALLCONV +static void U_CALLCONV deleteEntry(void* obj) { delete (Entry*) obj; } @@ -519,39 +565,41 @@ Transliterator* TransliteratorRegistry::reget(const UnicodeString& ID, entry->entryType == Entry::RULES_REVERSE || entry->entryType == Entry::LOCALE_RULES) { - entry->u.data = parser.orphanData(); - entry->stringArg = parser.idBlock; - entry->intArg = parser.idSplitPoint; - entry->compoundFilter = parser.orphanCompoundFilter(); - - // Reset entry->entryType to encapsulate the parsed data. The - // next time we instantiate this ID (including this very next - // time, at the end of this function) we won't have to parse - // again. - // NOTE: The logic here matches that in - // Transliterator::createFromRules(). - if (entry->stringArg.length() == 0) { - if (entry->u.data == 0) { - // No idBlock, no data -- this is just an - // alias for Null - entry->entryType = Entry::ALIAS; - entry->stringArg = NullTransliterator::ID; - } else { - // No idBlock, data != 0 -- this is an - // ordinary RBT_DATA - entry->entryType = Entry::RBT_DATA; - } - } else { - if (entry->u.data == 0) { - // idBlock, no data -- this is an alias. The ID has - // been munged from reverse into forward mode, if - // necessary, so instantiate the ID in the forward - // direction. - entry->entryType = Entry::ALIAS; - } else { - // idBlock and data -- this is a compound - // RBT - entry->entryType = Entry::COMPOUND_RBT; + if (parser.idBlockVector.isEmpty() && parser.dataVector.isEmpty()) { + entry->u.data = 0; + entry->entryType = Entry::ALIAS; + entry->stringArg = UNICODE_STRING_SIMPLE("Any-NULL"); + } + else if (parser.idBlockVector.isEmpty() && parser.dataVector.size() == 1) { + entry->u.data = (TransliterationRuleData*)parser.dataVector.orphanElementAt(0); + entry->entryType = Entry::RBT_DATA; + } + else if (parser.idBlockVector.size() == 1 && parser.dataVector.isEmpty()) { + entry->stringArg = *(UnicodeString*)(parser.idBlockVector.elementAt(0)); + entry->compoundFilter = parser.orphanCompoundFilter(); + entry->entryType = Entry::ALIAS; + } + else { + entry->entryType = Entry::COMPOUND_RBT; + entry->compoundFilter = parser.orphanCompoundFilter(); + entry->u.dataVector = new UVector(status); + entry->stringArg.remove(); + + int32_t limit = parser.idBlockVector.size(); + if (parser.dataVector.size() > limit) + limit = parser.dataVector.size(); + + for (int32_t i = 0; i < limit; i++) { + if (i < parser.idBlockVector.size()) { + UnicodeString* idBlock = (UnicodeString*)parser.idBlockVector.elementAt(i); + if (!idBlock->isEmpty()) + entry->stringArg += *idBlock; + } + if (!parser.dataVector.isEmpty()) { + TransliterationRuleData* data = (TransliterationRuleData*)parser.dataVector.orphanElementAt(0); + entry->u.dataVector->addElement(data, status); + entry->stringArg += (UChar)0xffff; // use U+FFFF to mark position of RBTs in ID block + } } } } @@ -580,20 +628,32 @@ void TransliteratorRegistry::put(const UnicodeString& ID, void TransliteratorRegistry::put(const UnicodeString& ID, const UnicodeString& resourceName, UTransDirection dir, + UBool readonlyResourceAlias, UBool visible) { Entry *entry = new Entry(); entry->entryType = (dir == UTRANS_FORWARD) ? Entry::RULES_FORWARD : Entry::RULES_REVERSE; - entry->stringArg = resourceName; + if (readonlyResourceAlias) { + entry->stringArg.setTo(TRUE, resourceName.getBuffer(), -1); + } + else { + entry->stringArg = resourceName; + } registerEntry(ID, entry, visible); } void TransliteratorRegistry::put(const UnicodeString& ID, const UnicodeString& alias, + UBool readonlyAliasAlias, UBool visible) { Entry *entry = new Entry(); entry->entryType = Entry::ALIAS; - entry->stringArg = alias; + if (readonlyAliasAlias) { + entry->stringArg.setTo(TRUE, alias.getBuffer(), -1); + } + else { + entry->stringArg = alias; + } registerEntry(ID, entry, visible); } @@ -988,7 +1048,7 @@ Entry* TransliteratorRegistry::findInBundle(const Spec& specToOpen, utag.append(TRANSLITERATE); } UnicodeString s(specToFind.get()); - utag.append(s.toUpper()); + utag.append(s.toUpper("")); CharString tag(utag); UErrorCode status = U_ZERO_ERROR; @@ -997,7 +1057,8 @@ Entry* TransliteratorRegistry::findInBundle(const Spec& specToOpen, continue; } - if (specToOpen.get() != subres.getLocale().getName()) { + s.truncate(0); + if (specToOpen.get() != LocaleUtility::initNameFromLocale(subres.getLocale(), s)) { continue; } @@ -1161,7 +1222,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID } return t; case Entry::ALIAS: - aliasReturn = new TransliteratorAlias(entry->stringArg); + aliasReturn = new TransliteratorAlias(entry->stringArg, entry->compoundFilter); if (aliasReturn == 0) { status = U_MEMORY_ALLOCATION_ERROR; } @@ -1174,13 +1235,19 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID return t; case Entry::COMPOUND_RBT: { - UnicodeString id((UChar)0x005F); /* "_" */ - Transliterator *t = new RuleBasedTransliterator(id, entry->u.data); - if (t == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return 0; + UVector* rbts = new UVector(status); + int32_t passNumber = 1; + for (int32_t i = 0; U_SUCCESS(status) && i < entry->u.dataVector->size(); i++) { + Transliterator* t = new RuleBasedTransliterator(UnicodeString(CompoundTransliterator::PASS_STRING) + (passNumber++), + (TransliterationRuleData*)(entry->u.dataVector->elementAt(i)), FALSE); + if (t == 0) + status = U_MEMORY_ALLOCATION_ERROR; + else + rbts->addElement(t, status); } - aliasReturn = new TransliteratorAlias(ID, entry->stringArg, t, entry->intArg, entry->compoundFilter); + if (U_FAILURE(status)) + return 0; + aliasReturn = new TransliteratorAlias(ID, entry->stringArg, rbts, entry->compoundFilter); } if (aliasReturn == 0) { status = U_MEMORY_ALLOCATION_ERROR; @@ -1199,7 +1266,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID // and possibly also into an ::id header and/or footer. Then // we modify the registry with the parsed data and retry. { - TransliteratorParser parser; + TransliteratorParser parser(status); // We use the file name, taken from another resource bundle // 2-d array at static init time, as a locale language. We're diff --git a/icuSources/i18n/transreg.h b/icuSources/i18n/transreg.h index 866ce8f4..e74cfe43 100644 --- a/icuSources/i18n/transreg.h +++ b/icuSources/i18n/transreg.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2004, International Business Machines +* Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -44,13 +44,13 @@ class TransliteratorAlias : public UMemory { * Construct a simple alias (type == SIMPLE) * @param aliasID the given id. */ - TransliteratorAlias(const UnicodeString& aliasID); + TransliteratorAlias(const UnicodeString& aliasID, const UnicodeSet* compoundFilter); /** * Construct a compound RBT alias (type == COMPOUND) */ - TransliteratorAlias(const UnicodeString& ID, const UnicodeString& idBlock, - Transliterator* adopted, int32_t idSplitPoint, + TransliteratorAlias(const UnicodeString& ID, const UnicodeString& idBlocks, + UVector* adoptedTransliterators, const UnicodeSet* compoundFilter); /** @@ -108,10 +108,10 @@ class TransliteratorAlias : public UMemory { // Here ID is the ID, aliasID is the rules string. // idSplitPoint is the UTransDirection. UnicodeString ID; - UnicodeString aliasID; // rename! holds rules for RULES type - Transliterator* trans; // owned + UnicodeString aliasesOrRules; + UVector* transes; // owned const UnicodeSet* compoundFilter; // alias - int32_t idSplitPoint; // rename! holds UTransDirection for RULES type + UTransDirection direction; enum { SIMPLE, COMPOUND, RULES } type; TransliteratorAlias(const TransliteratorAlias &other); // forbid copying of this class @@ -222,6 +222,7 @@ class TransliteratorRegistry : public UMemory { void put(const UnicodeString& ID, const UnicodeString& resourceName, UTransDirection dir, + UBool readonlyResourceAlias, UBool visible); /** @@ -231,6 +232,7 @@ class TransliteratorRegistry : public UMemory { */ void put(const UnicodeString& ID, const UnicodeString& alias, + UBool readonlyAliasAlias, UBool visible); /** diff --git a/icuSources/i18n/tridpars.cpp b/icuSources/i18n/tridpars.cpp index 3aadb70c..f0338de2 100644 --- a/icuSources/i18n/tridpars.cpp +++ b/icuSources/i18n/tridpars.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines Corporation +* Copyright (c) 2002-2006, International Business Machines Corporation * and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -33,7 +33,7 @@ static const UChar VARIANT_SEP = 0x002F; // / static const UChar OPEN_REV = 0x0028; // ( static const UChar CLOSE_REV = 0x0029; // ) -static const UChar EMPTY[] = {0}; // "" +//static const UChar EMPTY[] = {0}; // "" static const UChar ANY[] = {65,110,121,0}; // "Any" static const UChar ANY_NULL[] = {65,110,121,45,78,117,108,108,0}; // "Any-Null" @@ -437,22 +437,13 @@ UBool TransliteratorIDParser::parseCompoundID(const UnicodeString& id, int32_t d * the reverse. THIS MAY RESULT IN AN EMPTY VECTOR. Convert * SingleID entries to actual transliterators. * - * Also, optionally, insert the given transliterator at the given - * position. This effectively happens before anything else. - * * @param list vector of SingleID objects. On exit, vector * of one or more Transliterators. - * @param insert Transliterator to insert, or NULL if none. - * Adopted. - * @param insertIndex index from 0..list.size()-1, at which - * to place 'insert', or -1 if none. * @return new value of insertIndex. The index will shift if * there are empty items, like "(Lower)", with indices less than * insertIndex. */ -int32_t TransliteratorIDParser::instantiateList(UVector& list, - Transliterator* insert, - int32_t insertIndex, +void TransliteratorIDParser::instantiateList(UVector& list, UErrorCode& ec) { UVector tlist(ec); if (U_FAILURE(ec)) { @@ -463,15 +454,6 @@ int32_t TransliteratorIDParser::instantiateList(UVector& list, Transliterator* t; int32_t i; for (i=0; i<=list.size(); ++i) { // [sic]: i<=list.size() - if (insertIndex == i) { - insertIndex = tlist.size(); - tlist.addElement(insert, ec); - if (U_FAILURE(ec)) { - goto RETURN; - } - insert = NULL; - } - // We run the loop too long by one, so we can // do an insert after the last element if (i==list.size()) { @@ -525,9 +507,7 @@ int32_t TransliteratorIDParser::instantiateList(UVector& list, } } - delete insert; // Clean up in case of failure list.setDeleter(save); - return insertIndex; } /** @@ -601,6 +581,10 @@ void TransliteratorIDParser::STVtoID(const UnicodeString& source, if (variant.length() != 0) { id.append(VARIANT_SEP).append(variant); } + // NUL-terminate the ID string for getTerminatedBuffer. + // This prevents valgrind and Purify warnings. + id.append((UChar)0); + id.truncate(id.length()-1); } /** @@ -898,7 +882,7 @@ void TransliteratorIDParser::init(UErrorCode &status) { special_inverses = NULL; } umtx_unlock(&LOCK); - delete special_inverses; + delete special_inverses; /*null instance*/ ucln_i18n_registerCleanup(UCLN_I18N_TRANSLITERATOR, transliterator_cleanup); } diff --git a/icuSources/i18n/tridpars.h b/icuSources/i18n/tridpars.h index b916a9a9..e86f104f 100644 --- a/icuSources/i18n/tridpars.h +++ b/icuSources/i18n/tridpars.h @@ -1,6 +1,6 @@ /* ************************************************************************** - * Copyright (c) 2002-2004, International Business Machines Corporation * + * Copyright (c) 2002-2005, International Business Machines Corporation * * and others. All Rights Reserved. * ************************************************************************** * Date Name Description * @@ -202,23 +202,15 @@ class TransliteratorIDParser /* not : public UObject because all methods are sta * the reverse. THIS MAY RESULT IN AN EMPTY VECTOR. Convert * SingleID entries to actual transliterators. * - * Also, optionally, insert the given transliterator at the given - * position. This effectively happens before anything else. - * * @param list vector of SingleID objects. On exit, vector * of one or more Transliterators. - * @param insert Transliterator to insert, or null if none. - * @param insertIndex index from 0..list.size()-1, at which - * to place 'insert', or -1 if none. * @param ec Output param to receive a success or an error code. * @return new value of insertIndex. The index will shift if * there are empty items, like "(Lower)", with indices less than * insertIndex. */ - static int32_t instantiateList(UVector& list, - Transliterator* insert, - int32_t insertIndex, - UErrorCode& ec); + static void instantiateList(UVector& list, + UErrorCode& ec); /** * Parse an ID into pieces. Take IDs of the form T, T/V, S-T, diff --git a/icuSources/i18n/ucal.cpp b/icuSources/i18n/ucal.cpp index 5d8590f0..636adf4c 100644 --- a/icuSources/i18n/ucal.cpp +++ b/icuSources/i18n/ucal.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ @@ -13,6 +13,7 @@ #include "unicode/uloc.h" #include "unicode/calendar.h" #include "unicode/timezone.h" +#include "unicode/gregocal.h" #include "unicode/simpletz.h" #include "unicode/ustring.h" #include "unicode/strenum.h" @@ -253,6 +254,32 @@ ucal_inDaylightTime( const UCalendar* cal, return ((Calendar*)cal)->inDaylightTime(*status); } +U_DRAFT void U_EXPORT2 +ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return; + } + Calendar *cpp_cal = (Calendar *)cal; + if(cpp_cal->getDynamicClassID() != GregorianCalendar::getStaticClassID()) { + *pErrorCode = U_UNSUPPORTED_ERROR; + return; + } + ((GregorianCalendar *)cpp_cal)->setGregorianChange(date, *pErrorCode); +} + +U_DRAFT UDate U_EXPORT2 +ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode) { + if(U_FAILURE(*pErrorCode)) { + return (UDate)0; + } + Calendar *cpp_cal = (Calendar *)cal; + if(cpp_cal->getDynamicClassID() != GregorianCalendar::getStaticClassID()) { + *pErrorCode = U_UNSUPPORTED_ERROR; + return (UDate)0; + } + return ((GregorianCalendar *)cpp_cal)->getGregorianChange(); +} + U_CAPI int32_t U_EXPORT2 ucal_getAttribute( const UCalendar* cal, UCalendarAttribute attr) diff --git a/icuSources/i18n/ucln_in.c b/icuSources/i18n/ucln_in.c index 34653e07..afcf0711 100644 --- a/icuSources/i18n/ucln_in.c +++ b/icuSources/i18n/ucln_in.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2001-2004, International Business Machines * +* Copyright (C) 2001-2006, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -25,9 +25,9 @@ static cleanupFunc *gCleanupFunctions[UCLN_I18N_COUNT]; static UBool i18n_cleanup(void) { - ECleanupI18NType libType; + ECleanupI18NType libType = UCLN_I18N_START; - for (libType = UCLN_I18N_START+1; libType<UCLN_I18N_COUNT; libType++) { + while (++libType<UCLN_I18N_COUNT) { if (gCleanupFunctions[libType]) { gCleanupFunctions[libType](); diff --git a/icuSources/i18n/ucln_in.h b/icuSources/i18n/ucln_in.h index b04a25dc..6feae009 100644 --- a/icuSources/i18n/ucln_in.h +++ b/icuSources/i18n/ucln_in.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2001-2004, International Business Machines * +* Copyright (C) 2001-2006, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -38,6 +38,7 @@ typedef enum ECleanupI18NType { UCLN_I18N_COLLATOR, UCLN_I18N_UCOL, UCLN_I18N_UCOL_BLD, + UCLN_I18N_CSDET, UCLN_I18N_COUNT /* This must be last */ } ECleanupI18NType; diff --git a/icuSources/i18n/ucol.cpp b/icuSources/i18n/ucol.cpp index acc2591d..5f756b04 100644 --- a/icuSources/i18n/ucol.cpp +++ b/icuSources/i18n/ucol.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucol.cpp @@ -17,31 +17,23 @@ */ #include "unicode/utypes.h" -#include "ustrenum.h" #include "uassert.h" #if !UCONFIG_NO_COLLATION -#include "unicode/uloc.h" -#include "unicode/coll.h" -#include "unicode/tblcoll.h" #include "unicode/coleitr.h" #include "unicode/unorm.h" #include "unicode/udata.h" -#include "unicode/uchar.h" -#include "unicode/caniter.h" +#include "unicode/ustring.h" -#include "ucol_bld.h" #include "ucol_imp.h" -#include "ucol_tok.h" #include "ucol_elm.h" #include "bocsu.h" #include "unormimp.h" #include "unorm_it.h" -#include "uresimp.h" #include "umutex.h" -#include "uhash.h" +#include "cmemory.h" #include "ucln_in.h" #include "cstring.h" #include "utracimp.h" @@ -76,6 +68,14 @@ static UDataMemory* UCA_DATA_MEM = NULL; // It is cleaned in ucol_cleanup static const uint16_t *fcdTrieIndex=NULL; +// These are values from UCA required for +// implicit generation and supressing sort key compression +// they should regularly be in the UCA, but if one +// is running without UCA, it could be a problem +static int32_t maxRegularPrimary = 0xA0; +static int32_t minImplicitPrimary = 0xE0; +static int32_t maxImplicitPrimary = 0xE4; + U_CDECL_BEGIN static UBool U_CALLCONV isAcceptableUCA(void * /*context*/, @@ -169,18 +169,19 @@ inline void backupState(const collIterate *data, collIterateState *backup) backup->pos = data->pos; backup->bufferaddress = data->writableBuffer; backup->buffersize = data->writableBufSize; + backup->iteratorMove = 0; + backup->iteratorIndex = 0; if(data->iterator != NULL) { - //backup->iteratorIndex = data->iterator->getIndex(data->iterator, UITER_CURRENT); - backup->iteratorIndex = data->iterator->getState(data->iterator); - // no we try to fixup if we're using a normalizing iterator and we get UITER_NO_STATE - backup->iteratorMove = 0; - if(backup->iteratorIndex == UITER_NO_STATE) { - while((backup->iteratorIndex = data->iterator->getState(data->iterator)) == UITER_NO_STATE) { - backup->iteratorMove++; - data->iterator->move(data->iterator, -1, UITER_CURRENT); - } - data->iterator->move(data->iterator, backup->iteratorMove, UITER_CURRENT); - } + //backup->iteratorIndex = data->iterator->getIndex(data->iterator, UITER_CURRENT); + backup->iteratorIndex = data->iterator->getState(data->iterator); + // no we try to fixup if we're using a normalizing iterator and we get UITER_NO_STATE + if(backup->iteratorIndex == UITER_NO_STATE) { + while((backup->iteratorIndex = data->iterator->getState(data->iterator)) == UITER_NO_STATE) { + backup->iteratorMove++; + data->iterator->move(data->iterator, -1, UITER_CURRENT); + } + data->iterator->move(data->iterator, backup->iteratorMove, UITER_CURRENT); + } } } @@ -195,15 +196,15 @@ static inline void loadState(collIterate *data, const collIterateState *backup, UBool forwards) { - UErrorCode status = U_ZERO_ERROR; + UErrorCode status = U_ZERO_ERROR; data->flags = backup->flags; data->origFlags = backup->origFlags; if(data->iterator != NULL) { - //data->iterator->move(data->iterator, backup->iteratorIndex, UITER_ZERO); - data->iterator->setState(data->iterator, backup->iteratorIndex, &status); - if(backup->iteratorMove != 0) { - data->iterator->move(data->iterator, backup->iteratorMove, UITER_CURRENT); - } + //data->iterator->move(data->iterator, backup->iteratorIndex, UITER_ZERO); + data->iterator->setState(data->iterator, backup->iteratorIndex, &status); + if(backup->iteratorMove != 0) { + data->iterator->move(data->iterator, backup->iteratorMove, UITER_CURRENT); + } } data->pos = backup->pos; if ((data->flags & UCOL_ITER_INNORMBUF) && @@ -339,369 +340,218 @@ inline void freeHeapWritableBuffer(collIterate *data) /* Following are the open/close functions */ /* */ /****************************************************************************/ -static UCollator* -tryOpeningFromRules(UResourceBundle *collElem, UErrorCode *status) { - int32_t rulesLen = 0; - const UChar *rules = ures_getStringByKey(collElem, "Sequence", &rulesLen, status); - return ucol_openRules(rules, rulesLen, UCOL_DEFAULT, UCOL_DEFAULT, NULL, status); - -} - - -U_CAPI UCollator* -ucol_open(const char *loc, - UErrorCode *status) -{ - UTRACE_ENTRY_OC(UTRACE_UCOL_OPEN); - UTRACE_DATA1(UTRACE_INFO, "locale = \"%s\"", loc); - UCollator *result = NULL; - - u_init(status); -#if !UCONFIG_NO_SERVICE - result = Collator::createUCollator(loc, status); - if (result == NULL) -#endif - { - result = ucol_open_internal(loc, status); - } - UTRACE_EXIT_PTR_STATUS(result, *status); - return result; -} - -// API in ucol_imp.h -U_CFUNC UCollator* -ucol_open_internal(const char *loc, - UErrorCode *status) +static UCollator* +ucol_initFromBinary(const uint8_t *bin, int32_t length, + const UCollator *base, + UCollator *fillIn, + UErrorCode *status) { - const UCollator* UCA = ucol_initUCA(status); - - /* New version */ - if(U_FAILURE(*status)) return 0; - - - - UCollator *result = NULL; - UResourceBundle *b = ures_open(U_ICUDATA_COLL, loc, status); - - /* we try to find stuff from keyword */ - UResourceBundle *collations = ures_getByKey(b, "collations", NULL, status); - UResourceBundle *collElem = NULL; - char keyBuffer[256]; - // if there is a keyword, we pick it up and try to get elements - if(!uloc_getKeywordValue(loc, "collation", keyBuffer, 256, status)) { - // no keyword. we try to find the default setting, which will give us the keyword value - UResourceBundle *defaultColl = ures_getByKeyWithFallback(collations, "default", NULL, status); - if(U_SUCCESS(*status)) { - int32_t defaultKeyLen = 0; - const UChar *defaultKey = ures_getString(defaultColl, &defaultKeyLen, status); - u_UCharsToChars(defaultKey, keyBuffer, defaultKeyLen); - keyBuffer[defaultKeyLen] = 0; - } else { - *status = U_INTERNAL_PROGRAM_ERROR; - return NULL; - } - ures_close(defaultColl); - } - collElem = ures_getByKeyWithFallback(collations, keyBuffer, collElem, status); - - UResourceBundle *binary = NULL; - UErrorCode binaryStatus = U_ZERO_ERROR; - - if(*status == U_MISSING_RESOURCE_ERROR) { /* We didn't find the tailoring data, we fallback to the UCA */ - *status = U_USING_DEFAULT_WARNING; - result = ucol_initCollator(UCA->image, result, UCA, status); - // if we use UCA, real locale is root - result->rb = ures_open(U_ICUDATA_COLL, "", status); - result->elements = ures_open(U_ICUDATA_COLL, "", status); + UCollator *result = fillIn; if(U_FAILURE(*status)) { - goto clean; + return NULL; } - ures_close(b); - result->hasRealData = FALSE; - } else if(U_SUCCESS(*status)) { - binary = ures_getByKey(collElem, "%%CollationBin", NULL, &binaryStatus); - - if(binaryStatus == U_MISSING_RESOURCE_ERROR) { /* we didn't find the binary image, we should use the rules */ - binary = NULL; - result = tryOpeningFromRules(collElem, status); - if(U_FAILURE(*status)) { - goto clean; - } - } else if(U_SUCCESS(*status)) { /* otherwise, we'll pick a collation data that exists */ - int32_t len = 0; - const uint8_t *inData = ures_getBinary(binary, &len, status); - UCATableHeader *colData = (UCATableHeader *)inData; - if(uprv_memcmp(colData->UCAVersion, UCA->image->UCAVersion, sizeof(UVersionInfo)) != 0 || - uprv_memcmp(colData->UCDVersion, UCA->image->UCDVersion, sizeof(UVersionInfo)) != 0 || - colData->version[0] != UCOL_BUILDER_VERSION) { - *status = U_DIFFERENT_UCA_VERSION; - result = tryOpeningFromRules(collElem, status); - } else { - if(U_FAILURE(*status)){ - goto clean; + /* + if(base == NULL) { + // we don't support null base yet + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + */ + // We need these and we could be running without UCA + uprv_uca_initImplicitConstants(0, 0, status); + UCATableHeader *colData = (UCATableHeader *)bin; + // do we want version check here? We're trying to figure out whether collators are compatible + if((base && (uprv_memcmp(colData->UCAVersion, base->image->UCAVersion, sizeof(UVersionInfo)) != 0 || + uprv_memcmp(colData->UCDVersion, base->image->UCDVersion, sizeof(UVersionInfo)) != 0)) || + colData->version[0] != UCOL_BUILDER_VERSION) + { + *status = U_COLLATOR_VERSION_MISMATCH; + return NULL; + } + else { + if((uint32_t)length > (paddedsize(sizeof(UCATableHeader)) + paddedsize(sizeof(UColOptionSet)))) { + result = ucol_initCollator((const UCATableHeader *)bin, result, base, status); + if(U_FAILURE(*status)){ + return NULL; + } + result->hasRealData = TRUE; } - if((uint32_t)len > (paddedsize(sizeof(UCATableHeader)) + paddedsize(sizeof(UColOptionSet)))) { - result = ucol_initCollator((const UCATableHeader *)inData, result, UCA, status); - if(U_FAILURE(*status)){ - goto clean; - } - result->hasRealData = TRUE; - } else { - result = ucol_initCollator(UCA->image, result, UCA, status); - ucol_setOptionsFromHeader(result, (UColOptionSet *)(inData+((const UCATableHeader *)inData)->options), status); - if(U_FAILURE(*status)){ - goto clean; - } - result->hasRealData = FALSE; + else { + if(base) { + result = ucol_initCollator(base->image, result, base, status); + ucol_setOptionsFromHeader(result, (UColOptionSet *)(bin+((const UCATableHeader *)bin)->options), status); + if(U_FAILURE(*status)){ + return NULL; + } + result->hasRealData = FALSE; + } + else { + *status = U_USELESS_COLLATOR_ERROR; + return NULL; + } } result->freeImageOnClose = FALSE; - } - } - result->rb = b; - result->elements = collElem; - } else { /* There is another error, and we're just gonna clean up */ -clean: - ures_close(b); - ures_close(collElem); - ures_close(collations); - ures_close(binary); - return NULL; - } - - result->validLocale = NULL; // default is to use rb info - - if(loc == NULL) { - loc = ures_getLocale(result->rb, status); - } - result->requestedLocale = (char *)uprv_malloc((uprv_strlen(loc)+1)*sizeof(char)); - /* test for NULL */ - if (result->requestedLocale == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - ures_close(b); // ??? appears needed - ures_close(collElem); - ures_close(collations); - ures_close(binary); // ??? appears needed - return NULL; - } - uprv_strcpy(result->requestedLocale, loc); - - ures_close(binary); - ures_close(collations); //??? we have to decide on that. Probably affects something :) - return result; -} - - -U_CAPI void U_EXPORT2 -ucol_setReqValidLocales(UCollator *coll, char *requestedLocaleToAdopt, char *validLocaleToAdopt) -{ - if (coll) { - if (coll->validLocale) { - uprv_free(coll->validLocale); } - coll->validLocale = validLocaleToAdopt; - if (coll->requestedLocale) { // should always have - uprv_free(coll->requestedLocale); - } - coll->requestedLocale = requestedLocaleToAdopt; - } + result->validLocale = NULL; + result->requestedLocale = NULL; + result->rules = NULL; + result->rulesLength = 0; + result->freeRulesOnClose = FALSE; + result->rb = NULL; + result->elements = NULL; + return result; } -U_CAPI void U_EXPORT2 -ucol_close(UCollator *coll) +U_CAPI UCollator* U_EXPORT2 +ucol_openBinary(const uint8_t *bin, int32_t length, + const UCollator *base, + UErrorCode *status) { - UTRACE_ENTRY_OC(UTRACE_UCOL_CLOSE); - UTRACE_DATA1(UTRACE_INFO, "coll = %p", coll); - if(coll != NULL) { - // these are always owned by each UCollator struct, - // so we always free them - if(coll->validLocale != NULL) { - uprv_free(coll->validLocale); - } - if(coll->requestedLocale != NULL) { - uprv_free(coll->requestedLocale); - } - - /* Here, it would be advisable to close: */ - /* - UData for UCA (unless we stuff it in the root resb */ - /* Again, do we need additional housekeeping... HMMM! */ - UTRACE_DATA1(UTRACE_INFO, "coll->freeOnClose: %d", coll->freeOnClose); - if(coll->freeOnClose){ - /* for safeClone, if freeOnClose is FALSE, - don't free the other instance data */ - if(coll->freeOptionsOnClose != FALSE) { - if(coll->options != NULL) { - uprv_free(coll->options); - } - } - if(coll->mapping != NULL) { - /*ucmpe32_close(coll->mapping);*/ - uprv_free(coll->mapping); - } - if(coll->rules != NULL && coll->freeRulesOnClose) { - uprv_free((UChar *)coll->rules); - } - if(coll->rb != NULL) { /* pointing to read-only memory */ - ures_close(coll->rb); - } - if(coll->freeImageOnClose == TRUE) { - uprv_free((UCATableHeader *)coll->image); - } - if(coll->elements != NULL) { - ures_close(coll->elements); - } - if(coll->latinOneCEs != NULL) { - uprv_free(coll->latinOneCEs); - } - uprv_free(coll); - } - } - UTRACE_EXIT(); + return ucol_initFromBinary(bin, length, base, NULL, status); } U_CAPI UCollator* U_EXPORT2 -ucol_openRules( const UChar *rules, - int32_t rulesLength, - UColAttributeValue normalizationMode, - UCollationStrength strength, - UParseError *parseError, - UErrorCode *status) +ucol_safeClone(const UCollator *coll, void *stackBuffer, int32_t * pBufferSize, UErrorCode *status) { - uint32_t listLen = 0; - UColTokenParser src; - UColAttributeValue norm; - UParseError tErr; - - if(status == NULL || U_FAILURE(*status)){ - return 0; - } - - u_init(status); - if (U_FAILURE(*status)) { - return NULL; - } - - if(rulesLength < -1 || (rules == NULL && rulesLength != 0)) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - if(rulesLength == -1) { - rulesLength = u_strlen(rules); - } - - if(parseError == NULL){ - parseError = &tErr; - } - - switch(normalizationMode) { - case UCOL_OFF: - case UCOL_ON: - case UCOL_DEFAULT: - norm = normalizationMode; - break; - default: - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - UCollator *UCA = ucol_initUCA(status); + UCollator * localCollator; + int32_t bufferSizeNeeded = (int32_t)sizeof(UCollator); + char *stackBufferChars = (char *)stackBuffer; + int32_t imageSize = 0; + int32_t rulesSize = 0; + int32_t rulesPadding = 0; + uint8_t *image; + UChar *rules; + UBool colAllocated = FALSE; + UBool imageAllocated = FALSE; - if(U_FAILURE(*status)){ - return NULL; - } + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + if ((stackBuffer && !pBufferSize) || !coll){ + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + if (coll->rules && coll->freeRulesOnClose) { + rulesSize = (int32_t)(coll->rulesLength + 1)*sizeof(UChar); + rulesPadding = (int32_t)(bufferSizeNeeded % sizeof(UChar)); + bufferSizeNeeded += rulesSize + rulesPadding; + } - ucol_tok_initTokenList(&src, rules, rulesLength, UCA, status); - listLen = ucol_tok_assembleTokenList(&src,parseError, status); + if (stackBuffer && *pBufferSize <= 0){ /* 'preflighting' request - set needed size into *pBufferSize */ + *pBufferSize = bufferSizeNeeded; + return 0; + } - if(U_FAILURE(*status)) { - /* if status is U_ILLEGAL_ARGUMENT_ERROR, src->current points at the offending option */ - /* if status is U_INVALID_FORMAT_ERROR, src->current points after the problematic part of the rules */ - /* so something might be done here... or on lower level */ -#ifdef UCOL_DEBUG - if(*status == U_ILLEGAL_ARGUMENT_ERROR) { - fprintf(stderr, "bad option starting at offset %i\n", src.current-src.source); - } else { - fprintf(stderr, "invalid rule just before offset %i\n", src.current-src.source); + /* Pointers on 64-bit platforms need to be aligned + * on a 64-bit boundry in memory. + */ + if (U_ALIGNMENT_OFFSET(stackBuffer) != 0) { + int32_t offsetUp = (int32_t)U_ALIGNMENT_OFFSET_UP(stackBufferChars); + if (*pBufferSize > offsetUp) { + *pBufferSize -= offsetUp; + stackBufferChars += offsetUp; + } + else { + /* prevent using the stack buffer but keep the size > 0 so that we do not just preflight */ + *pBufferSize = 1; + } } -#endif - ucol_tok_closeTokenList(&src); - return NULL; - } - UCollator *result = NULL; - UCATableHeader *table = NULL; + stackBuffer = (void *)stackBufferChars; - if(src.resultLen > 0 || src.removeSet != NULL) { /* we have a set of rules, let's make something of it */ - /* also, if we wanted to remove some contractions, we should make a tailoring */ - table = ucol_assembleTailoringTable(&src, status); - if(U_SUCCESS(*status)) { - // builder version - table->version[0] = UCOL_BUILDER_VERSION; - // no tailoring information on this level - table->version[1] = table->version[2] = table->version[3] = 0; - // set UCD version - u_getUnicodeVersion(table->UCDVersion); - // set UCA version - uprv_memcpy(table->UCAVersion, UCA->image->UCAVersion, sizeof(UVersionInfo)); - result = ucol_initCollator(table, 0, UCA, status); - result->hasRealData = TRUE; - result->freeImageOnClose = TRUE; - } - } else { /* no rules, but no error either */ - // must be only options - // We will init the collator from UCA - result = ucol_initCollator(UCA->image, 0, UCA, status); - // And set only the options - UColOptionSet *opts = (UColOptionSet *)uprv_malloc(sizeof(UColOptionSet)); - /* test for NULL */ - if (opts == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; + if (stackBuffer == NULL || *pBufferSize < bufferSizeNeeded) { + /* allocate one here...*/ + stackBufferChars = (char *)uprv_malloc(bufferSizeNeeded); + colAllocated = TRUE; + if (U_SUCCESS(*status)) { + *status = U_SAFECLONE_ALLOCATED_WARNING; + } + } + localCollator = (UCollator *)stackBufferChars; + rules = (UChar *)(stackBufferChars + sizeof(UCollator) + rulesPadding); + { + UErrorCode tempStatus = U_ZERO_ERROR; + imageSize = ucol_cloneBinary(coll, NULL, 0, &tempStatus); + } + if (coll->freeImageOnClose) { + image = (uint8_t *)uprv_malloc(imageSize); + ucol_cloneBinary(coll, image, imageSize, status); + imageAllocated = TRUE; + } + else { + image = (uint8_t *)coll->image; + } + localCollator = ucol_initFromBinary(image, imageSize, coll->UCA, localCollator, status); + if (U_FAILURE(*status)) { + return NULL; } - uprv_memcpy(opts, src.opts, sizeof(UColOptionSet)); - ucol_setOptionsFromHeader(result, opts, status); - result->freeOptionsOnClose = TRUE; - result->hasRealData = FALSE; - result->freeImageOnClose = FALSE; - } - if(U_SUCCESS(*status)) { - UChar *newRules; - result->dataInfo.dataVersion[0] = UCOL_BUILDER_VERSION; - if(rulesLength > 0) { - newRules = (UChar *)uprv_malloc((rulesLength+1)*U_SIZEOF_UCHAR); - /* test for NULL */ - if (newRules == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - uprv_memcpy(newRules, rules, rulesLength*U_SIZEOF_UCHAR); - newRules[rulesLength]=0; - result->rules = newRules; - result->rulesLength = rulesLength; - result->freeRulesOnClose = TRUE; + if (coll->rules) { + if (coll->freeRulesOnClose) { + localCollator->rules = u_strcpy(rules, coll->rules); + //bufferEnd += rulesSize; + } + else { + localCollator->rules = coll->rules; + } + localCollator->freeRulesOnClose = FALSE; + localCollator->rulesLength = coll->rulesLength; } - result->rb = NULL; - result->elements = NULL; - result->validLocale = NULL; - result->requestedLocale = NULL; - ucol_setAttribute(result, UCOL_STRENGTH, strength, status); - ucol_setAttribute(result, UCOL_NORMALIZATION_MODE, norm, status); - } else { -cleanup: - if(result != NULL) { - ucol_close(result); - } else { - if(table != NULL) { - uprv_free(table); - } + + int32_t i; + for(i = 0; i < UCOL_ATTRIBUTE_COUNT; i++) { + ucol_setAttribute(localCollator, (UColAttribute)i, ucol_getAttribute(coll, (UColAttribute)i, status), status); } - result = NULL; - } + localCollator->requestedLocale = NULL; // zero copies of pointers + localCollator->validLocale = NULL; + localCollator->rb = NULL; + localCollator->elements = NULL; + localCollator->freeOnClose = colAllocated; + localCollator->freeImageOnClose = imageAllocated; + return localCollator; +} - ucol_tok_closeTokenList(&src); +U_CAPI void U_EXPORT2 +ucol_close(UCollator *coll) +{ + UTRACE_ENTRY_OC(UTRACE_UCOL_CLOSE); + UTRACE_DATA1(UTRACE_INFO, "coll = %p", coll); + if(coll != NULL) { + // these are always owned by each UCollator struct, + // so we always free them + if(coll->validLocale != NULL) { + uprv_free(coll->validLocale); + } + if(coll->requestedLocale != NULL) { + uprv_free(coll->requestedLocale); + } + if(coll->resCleaner != NULL) { + coll->resCleaner(coll); + } + if(coll->latinOneCEs != NULL) { + uprv_free(coll->latinOneCEs); + } + if(coll->options != NULL && coll->freeOptionsOnClose) { + uprv_free(coll->options); + } + if(coll->rules != NULL && coll->freeRulesOnClose) { + uprv_free((UChar *)coll->rules); + } + if(coll->image != NULL && coll->freeImageOnClose) { + uprv_free((UCATableHeader *)coll->image); + } - return result; + /* Here, it would be advisable to close: */ + /* - UData for UCA (unless we stuff it in the root resb */ + /* Again, do we need additional housekeeping... HMMM! */ + UTRACE_DATA1(UTRACE_INFO, "coll->freeOnClose: %d", coll->freeOnClose); + if(coll->freeOnClose){ + /* for safeClone, if freeOnClose is FALSE, + don't free the other instance data */ + uprv_free(coll); + } + } + UTRACE_EXIT(); } /* This one is currently used by genrb & tests. After constructing from rules (tailoring),*/ @@ -794,24 +644,6 @@ void ucol_setOptionsFromHeader(UCollator* result, UColOptionSet * opts, UErrorCo result->options = opts; } -#if 0 -// doesn't look like anybody is using this -void ucol_putOptionsToHeader(UCollator* result, UColOptionSet * opts, UErrorCode *status) { - if(U_FAILURE(*status)) { - return; - } - opts->caseFirst = result->caseFirst; - opts->caseLevel = result->caseLevel; - opts->frenchCollation = result->frenchCollation; - opts->normalizationMode = result->normalizationMode; - opts->strength = result->strength; - opts->variableTopValue = result->variableTopValue; - opts->alternateHandling = result->alternateHandling; - opts->hiraganaQ = result->hiraganaQ; - opts->numericCollation = result->numericCollation; -} -#endif - /** * Approximate determination if a character is at a contraction end. @@ -822,7 +654,7 @@ void ucol_putOptionsToHeader(UCollator* result, UColOptionSet * opts, UErrorCode */ static inline UBool ucol_contractionEndCP(UChar c, const UCollator *coll) { - if (UTF_IS_TRAIL(c)) { + if (U16_IS_TRAIL(c)) { return TRUE; } @@ -848,15 +680,14 @@ inline UBool ucol_contractionEndCP(UChar c, const UCollator *coll) { * in contraction processing. */ static -inline uint8_t i_getCombiningClass(UChar c, const UCollator *coll) { +inline uint8_t i_getCombiningClass(UChar32 c, const UCollator *coll) { uint8_t sCC = 0; - if (c >= 0x300 && ucol_unsafeCP(c, coll)) { + if ((c >= 0x300 && ucol_unsafeCP(c, coll)) || c > 0xFFFF) { sCC = u_getCombiningClass(c); } return sCC; } - UCollator* ucol_initCollator(const UCATableHeader *image, UCollator *fillIn, const UCollator *UCA, UErrorCode *status) { UChar c; UCollator *result = fillIn; @@ -876,32 +707,19 @@ UCollator* ucol_initCollator(const UCATableHeader *image, UCollator *fillIn, con } result->image = image; + result->mapping.getFoldingOffset = _getFoldingOffset; const uint8_t *mapping = (uint8_t*)result->image+result->image->mappingPosition; - /*CompactEIntArray *newUCAmapping = ucmpe32_openFromData(&mapping, status);*/ - UTrie *newUCAmapping = (UTrie *)uprv_malloc(sizeof(UTrie)); - if(newUCAmapping != NULL) { - utrie_unserialize(newUCAmapping, mapping, result->image->endExpansionCE - result->image->mappingPosition, status); - } else { - *status = U_MEMORY_ALLOCATION_ERROR; - if(result->freeOnClose == TRUE) { - uprv_free(result); - result = NULL; - } - return result; - } - if(U_SUCCESS(*status)) { - result->mapping = newUCAmapping; - } else { + utrie_unserialize(&result->mapping, mapping, result->image->endExpansionCE - result->image->mappingPosition, status); + if(U_FAILURE(*status)) { if(result->freeOnClose == TRUE) { uprv_free(result); result = NULL; } - uprv_free(newUCAmapping); return result; } /*result->latinOneMapping = (uint32_t*)((uint8_t*)result->image+result->image->latinOneMapping);*/ - result->latinOneMapping = UTRIE_GET32_LATIN1(result->mapping); + result->latinOneMapping = UTRIE_GET32_LATIN1(&result->mapping); result->contractionCEs = (uint32_t*)((uint8_t*)result->image+result->image->contractionCEs); result->contractionIndex = (UChar*)((uint8_t*)result->image+result->image->contractionIndex); result->expansion = (uint32_t*)((uint8_t*)result->image+result->image->expansion); @@ -930,14 +748,16 @@ UCollator* ucol_initCollator(const UCATableHeader *image, UCollator *fillIn, con result->hiraganaQisDefault = TRUE; result->numericCollationisDefault = TRUE; - result->scriptOrder = NULL; + /*result->scriptOrder = NULL;*/ result->rules = NULL; result->rulesLength = 0; /* get the version info from UCATableHeader and populate the Collator struct*/ - result->dataInfo.dataVersion[0] = result->image->version[0]; /* UCA Builder version*/ - result->dataInfo.dataVersion[1] = result->image->version[1]; /* UCA Tailoring rules version*/ + result->dataVersion[0] = result->image->version[0]; /* UCA Builder version*/ + result->dataVersion[1] = result->image->version[1]; /* UCA Tailoring rules version*/ + result->dataVersion[2] = 0; + result->dataVersion[3] = 0; result->unsafeCP = (uint8_t *)result->image + result->image->unsafeCP; result->minUnsafeCP = 0; @@ -969,6 +789,7 @@ UCollator* ucol_initCollator(const UCATableHeader *image, UCollator *fillIn, con result->latinOneRegenTable = FALSE; result->latinOneFailed = FALSE; result->UCA = UCA; + result->resCleaner = NULL; ucol_updateInternalState(result, status); @@ -1309,9 +1130,10 @@ static void initImplicitConstants(int minPrimary, int maxPrimary, * Supply parameters for generating implicit CEs */ U_CAPI void U_EXPORT2 -uprv_uca_initImplicitConstants(int32_t minPrimary, int32_t maxPrimary, UErrorCode *status) { +uprv_uca_initImplicitConstants(int32_t, int32_t, UErrorCode *status) { // 13 is the largest 4-byte gap we can use without getting 2 four-byte forms. - initImplicitConstants(minPrimary, maxPrimary, 0x04, 0xFE, 1, 1, status); + //initImplicitConstants(minPrimary, maxPrimary, 0x04, 0xFE, 1, 1, status); + initImplicitConstants(minImplicitPrimary, maxImplicitPrimary, 0x04, 0xFE, 1, 1, status); } U_CDECL_BEGIN @@ -1386,7 +1208,7 @@ ucol_initUCA(UErrorCode *status) { // Initalize variables for implicit generation const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)_staticUCA->image + _staticUCA->image->UCAConsts); uprv_uca_initImplicitConstants(UCAconsts->UCA_PRIMARY_IMPLICIT_MIN, UCAconsts->UCA_PRIMARY_IMPLICIT_MAX, status); - _staticUCA->mapping->getFoldingOffset = _getFoldingOffset; + //_staticUCA->mapping.getFoldingOffset = _getFoldingOffset; }else{ udata_close(result); uprv_free(newUCA); @@ -1525,8 +1347,8 @@ inline UBool collIterFCD(collIterate *collationSource) { /* trie access */ fcd = unorm_getFCD16(fcdTrieIndex, c); if (fcd != 0) { - if (UTF_IS_FIRST_SURROGATE(c)) { - if ((endP == NULL || srcP != endP) && UTF_IS_SECOND_SURROGATE(c2=*srcP)) { + if (U16_IS_LEAD(c)) { + if ((endP == NULL || srcP != endP) && U16_IS_TRAIL(c2=*srcP)) { ++srcP; fcd = unorm_getFCD16FromSurrogatePair(fcdTrieIndex, fcd, c2); } else { @@ -1546,8 +1368,8 @@ inline UBool collIterFCD(collIterate *collationSource) { c = *srcP++; /* trie access */ fcd = unorm_getFCD16(fcdTrieIndex, c); - if (fcd != 0 && UTF_IS_FIRST_SURROGATE(c)) { - if ((endP == NULL || srcP != endP) && UTF_IS_SECOND_SURROGATE(c2=*srcP)) { + if (fcd != 0 && U16_IS_LEAD(c)) { + if ((endP == NULL || srcP != endP) && U16_IS_TRAIL(c2=*srcP)) { ++srcP; fcd = unorm_getFCD16FromSurrogatePair(fcdTrieIndex, fcd, c2); } else { @@ -1580,6 +1402,9 @@ inline UBool collIterFCD(collIterate *collationSource) { /* */ /****************************************************************************/ +static uint32_t getImplicit(UChar32 cp, collIterate *collationSource); +static uint32_t getPrevImplicit(UChar32 cp, collIterate *collationSource); + /* there should be a macro version of this function in the header file */ /* This is the first function that tries to fetch a collation element */ /* If it's not succesfull or it encounters a more difficult situation */ @@ -1727,20 +1552,23 @@ inline uint32_t ucol_IGetNextCE(const UCollator *coll, collIterate *collationSou } else { - order = UTRIE_GET32_FROM_LEAD(coll->mapping, ch); + order = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch); if(order > UCOL_NOT_FOUND) { /* if a CE is special */ order = ucol_prv_getSpecialCE(coll, ch, order, collationSource, status); /* and try to get the special CE */ } if(order == UCOL_NOT_FOUND && coll->UCA) { /* We couldn't find a good CE in the tailoring */ /* if we got here, the codepoint MUST be over 0xFF - so we look directly in the trie */ - order = UTRIE_GET32_FROM_LEAD(coll->UCA->mapping, ch); + order = UTRIE_GET32_FROM_LEAD(&coll->UCA->mapping, ch); if(order > UCOL_NOT_FOUND) { /* UCA also gives us a special CE */ order = ucol_prv_getSpecialCE(coll->UCA, ch, order, collationSource, status); } } } - return order; /* return the CE */ + if(order == UCOL_NOT_FOUND) { + order = getImplicit(ch, collationSource); + } + return order; /* return the CE */ } /* ucol_getNextCE, out-of-line version for use from other files. */ @@ -1834,9 +1662,9 @@ inline UBool collPrevIterFCD(collIterate *data) /* Get the trailing combining class of the current character. */ c = *--src; - if (!UTF_IS_SURROGATE(c)) { + if (!U16_IS_SURROGATE(c)) { fcd = unorm_getFCD16(fcdTrieIndex, c); - } else if (UTF_IS_SECOND_SURROGATE(c) && start < src && UTF_IS_FIRST_SURROGATE(c2 = *(src - 1))) { + } else if (U16_IS_TRAIL(c) && start < src && U16_IS_LEAD(c2 = *(src - 1))) { --src; fcd = unorm_getFCD16(fcdTrieIndex, c2); if (fcd != 0) { @@ -1861,9 +1689,9 @@ inline UBool collPrevIterFCD(collIterate *data) } c = *--src; - if (!UTF_IS_SURROGATE(c)) { + if (!U16_IS_SURROGATE(c)) { fcd = unorm_getFCD16(fcdTrieIndex, c); - } else if (UTF_IS_SECOND_SURROGATE(c) && start < src && UTF_IS_FIRST_SURROGATE(c2 = *(src - 1))) { + } else if (U16_IS_TRAIL(c) && start < src && U16_IS_LEAD(c2 = *(src - 1))) { --src; fcd = unorm_getFCD16(fcdTrieIndex, c2); if (fcd != 0) { @@ -2083,75 +1911,38 @@ inline uint32_t ucol_IGetPrevCE(const UCollator *coll, collIterate *data, contraction */ if (ucol_contractionEndCP(ch, coll) && !isAtStartPrevIterate(data)) { - result = ucol_prv_getSpecialPrevCE(coll, ch, UCOL_CONTRACTION, data, status); - } - else { - // TODO: fix me for THAI - I reference *(data->pos-1) - if ((data->flags & UCOL_ITER_INNORMBUF) == 0 && - /*UCOL_ISTHAIBASECONSONANT(ch) &&*/ // This is from the old specs - we now rearrange unconditionally - // makes sure that we're not at the beggining of the string - //data->pos > data->string && - !collIter_bos(data) && - UCOL_ISTHAIPREVOWEL(peekCharacter(data, -1))) - //UCOL_ISTHAIPREVOWEL(*(data->pos -1))) - { - collIterateState entryState; - backupState(data, &entryState); - // we have to check if the previous character is also Thai - // if not, we can just set the result - goBackOne(data); - if(collIter_bos(data) || !UCOL_ISTHAIPREVOWEL(peekCharacter(data, -1))) { - loadState(data, &entryState, FALSE); - result = UCOL_THAI; - } else { // previous is also reordered - // we need to go back as long as they are being reordered - // count over the range of reorderable characters and see - // if there is an even or odd number of them - // if even, we should not reorder. If odd we should reorder. - int32_t noReordered = 1; // the one we already detected - while(!collIter_bos(data) && UCOL_ISTHAIPREVOWEL(peekCharacter(data, -1))) { - noReordered++; - goBackOne(data); - } - if(noReordered & 1) { // odd number of reorderables - result = UCOL_THAI; - } else { - result = UTRIE_GET32_FROM_LEAD(coll->mapping, ch); - } - loadState(data, &entryState, FALSE); - } - } - else if (ch <= 0xFF) { - result = coll->latinOneMapping[ch]; - //if (result > UCOL_NOT_FOUND) { - //result = ucol_prv_getSpecialPrevCE(coll, ch, result, data, status); - //} + result = ucol_prv_getSpecialPrevCE(coll, ch, UCOL_CONTRACTION, data, status); + } else { + if (ch <= 0xFF) { + result = coll->latinOneMapping[ch]; + } + else { + result = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch); + } + if (result > UCOL_NOT_FOUND) { + result = ucol_prv_getSpecialPrevCE(coll, ch, result, data, status); + } + if (result == UCOL_NOT_FOUND) { // Not found in master list + if (!isAtStartPrevIterate(data) && + ucol_contractionEndCP(ch, data->coll)) { + result = UCOL_CONTRACTION; + } else { + if(coll->UCA) { + result = UTRIE_GET32_FROM_LEAD(&coll->UCA->mapping, ch); + } } - else { - /*result = ucmpe32_get(coll->mapping, ch);*/ - result = UTRIE_GET32_FROM_LEAD(coll->mapping, ch); - } - if (result > UCOL_NOT_FOUND) { - result = ucol_prv_getSpecialPrevCE(coll, ch, result, data, status); - } - if (result == UCOL_NOT_FOUND) { - if (!isAtStartPrevIterate(data) && - ucol_contractionEndCP(ch, data->coll)) { - result = UCOL_CONTRACTION; - } - else { - /*result = ucmpe32_get(UCA->mapping, ch);*/ - if(coll->UCA) { - result = UTRIE_GET32_FROM_LEAD(coll->UCA->mapping, ch); - } - } - - if (result > UCOL_NOT_FOUND && coll->UCA) { - result = ucol_prv_getSpecialPrevCE(coll->UCA, ch, result, data, status); - } - } + + if (result > UCOL_NOT_FOUND) { + if(coll->UCA) { + result = ucol_prv_getSpecialPrevCE(coll->UCA, ch, result, data, status); + } } + } } + if(result == UCOL_NOT_FOUND) { + result = getPrevImplicit(ch, data); + } + } return result; } @@ -2689,12 +2480,12 @@ inline UChar * insertBufferFront(collIterate *data, UChar *pNull, UChar ch) * @param data collation iterator data */ static -inline void normalizePrevContraction(collIterate *data) +inline void normalizePrevContraction(collIterate *data, UErrorCode *status) { UChar *buffer = data->writableBuffer; uint32_t buffersize = data->writableBufSize; uint32_t nulltermsize; - UErrorCode status = U_ZERO_ERROR; + UErrorCode localstatus = U_ZERO_ERROR; UChar *pEnd = data->pos + 1; /* End normalize + 1 */ UChar *pStart; uint32_t normLen; @@ -2725,22 +2516,23 @@ inline void normalizePrevContraction(collIterate *data) } normLen = unorm_normalize(pStart, pEnd - pStart, UNORM_NFD, 0, buffer, 0, - &status); + &localstatus); if (nulltermsize <= normLen) { uint32_t size = buffersize - nulltermsize + normLen + 1; UChar *temp = (UChar *)uprv_malloc(size * sizeof(UChar)); - if(temp != NULL) { - nulltermsize = normLen + 1; - uprv_memcpy(temp + normLen, buffer, - sizeof(UChar) * (buffersize - nulltermsize)); - freeHeapWritableBuffer(data); - data->writableBuffer = temp; - data->writableBufSize = size; + if (temp == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return; } + nulltermsize = normLen + 1; + uprv_memcpy(temp + normLen, buffer, + sizeof(UChar) * (buffersize - nulltermsize)); + freeHeapWritableBuffer(data); + data->writableBuffer = temp; + data->writableBufSize = size; } - status = U_ZERO_ERROR; /* this puts the null termination infront of the normalized string instead of the end @@ -2748,7 +2540,7 @@ inline void normalizePrevContraction(collIterate *data) pStartNorm = buffer + (nulltermsize - normLen); *(pStartNorm - 1) = 0; unorm_normalize(pStart, pEnd - pStart, UNORM_NFD, 0, pStartNorm, normLen, - &status); + status); data->pos = data->writableBuffer + nulltermsize; data->origFlags = data->flags; @@ -2770,7 +2562,7 @@ inline void normalizePrevContraction(collIterate *data) * @return previous character */ static -inline UChar getPrevNormalizedChar(collIterate *data) +inline UChar getPrevNormalizedChar(collIterate *data, UErrorCode *status) { UChar prevch; UChar ch; @@ -2832,7 +2624,7 @@ inline UChar getPrevNormalizedChar(collIterate *data) UChar *backuppos = data->pos; data->pos = start; if (collPrevIterFCD(data)) { - normalizePrevContraction(data); + normalizePrevContraction(data, status); return *(data->pos - 1); } data->pos = backuppos; @@ -2879,14 +2671,14 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col UChar trail; collIterateState state; backupState(source, &state); - if (collIter_eos(source) || !(UTF16_IS_TRAIL((trail = getNextNormalizedChar(source))))) { + if (collIter_eos(source) || !(U16_IS_TRAIL((trail = getNextNormalizedChar(source))))) { // we chould have stepped one char forward and it might have turned that it // was not a trail surrogate. In that case, we have to backup. loadState(source, &state, TRUE); return 0; } else { /* TODO: CE contain the data from the previous CE + the mask. It should at least be unmasked */ - CE = UTRIE_GET32_FROM_OFFSET_TRAIL(coll->mapping, CE&0xFFFFFF, trail); + CE = UTRIE_GET32_FROM_OFFSET_TRAIL(&coll->mapping, CE&0xFFFFFF, trail); if(CE == UCOL_NOT_FOUND) { // there are tailored surrogates in this block, but not this one. // We need to backup loadState(source, &state, TRUE); @@ -2897,93 +2689,6 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col } } break; - case THAI_TAG: - /* Thai/Lao reordering */ - if (((source->flags) & UCOL_ITER_INNORMBUF) /* Already Swapped || */ - || collIter_eos(source)) /* At end of string. No swap possible */ - { - // Treat Thai as a length one expansion */ - CEOffset = (uint32_t *)coll->image+getExpansionOffset(CE); /* find the offset to expansion table */ - CE = *CEOffset++; - } - else - { - // Move the prevowel and the following base Consonant into the normalization buffer - // with their order swapped - // Note: this operation might activate the normalization buffer. We have to check for - // that and act accordingly. - UChar thCh = getNextNormalizedChar(source); - UChar32 cp = 0; - if(U16_IS_LEAD(thCh)) { - if(!collIter_eos(source)) { - collIterateState thaiState; - backupState(source, &thaiState); - UChar trailCh = getNextNormalizedChar(source); - if(U16_IS_TRAIL(trailCh)) { - cp = U16_GET_SUPPLEMENTARY(thCh, trailCh); - } else { - loadState(source, &thaiState, TRUE); - cp = (UChar32)thCh; - } - } else { - cp = (UChar32)thCh; - } - } else { - cp = (UChar32)thCh; - } - // Now we have the character that needs to be decomposed - // if the normalizing buffer was not used, we can just use our structure and be happy. - if((source->flags & UCOL_ITER_INNORMBUF) == 0) { - // decompose into writable buffer - int32_t decompLen = unorm_getDecomposition(cp, FALSE, &(source->writableBuffer[1]), UCOL_WRITABLE_BUFFER_SIZE-1); - if(decompLen < 0) { - decompLen = -decompLen; - } - // reorder Thai and the character after it - if(decompLen >= 2 && U16_IS_LEAD(source->writableBuffer[1]) && U16_IS_TRAIL(source->writableBuffer[2])) { - source->writableBuffer[0] = source->writableBuffer[1]; - source->writableBuffer[1] = source->writableBuffer[2]; - source->writableBuffer[2] = ch; - } else { - source->writableBuffer[0] = source->writableBuffer[1]; - source->writableBuffer[1] = ch; - } - // zero terminate, since normalization buffer is always zero terminated - source->writableBuffer[decompLen+1] = 0; // we added the prevowel - if(source->pos) { - source->fcdPosition = source->pos; // Indicate where to continue in main input string - // after exhausting the writableBuffer - } - source->pos = source->writableBuffer; - source->origFlags = source->flags; - source->flags |= UCOL_ITER_INNORMBUF; - source->flags &= ~(UCOL_ITER_NORM | UCOL_ITER_HASLEN | UCOL_USE_ITERATOR); - } - else { - // stuff is already normalized... what to do here??? - - // if we are in the normalization buffer, thCh must be in it - // prove by contradiction - // if thCh is not in the normalization buffer, - // that means that trailCh is the normalization buffer - // that means that trailCh is a trail surrogate by the above - // bounding if block, this is a contradiction because there - // are no characters at the moment that decomposes to an - // unmatched surrogate. qed. - if (cp >= 0x10000) { - source->writableBuffer[0] = source->writableBuffer[1]; - source->writableBuffer[1] = source->writableBuffer[2]; - source->writableBuffer[2] = ch; - } - else { - source->writableBuffer[0] = source->writableBuffer[1]; - source->writableBuffer[1] = ch; - } - source->pos = source->writableBuffer; - } - CE = UCOL_IGNORABLE; - } - break; case SPEC_PROC_TAG: { // Special processing is getting a CE that is preceded by a certain prefix @@ -3010,7 +2715,7 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col CE = *(coll->contractionCEs + (UCharOffset - coll->contractionIndex)); break; } - schar = getPrevNormalizedChar(source); + schar = getPrevNormalizedChar(source, status); goBackOne(source); while(schar > (tchar = *UCharOffset)) { /* since the contraction codepoints should be ordered, we skip all that are smaller */ @@ -3025,42 +2730,6 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col } else { - // if there is a completely ignorable code point in the middle of - // a prefix, we need to act as if it's not there - // assumption: 'real' noncharacters (*fffe, *ffff, fdd0-fdef are set to zero) - // lone surrogates cannot be set to zero as it would break other processing - uint32_t isZeroCE = UTRIE_GET32_FROM_LEAD(coll->mapping, schar); - // it's easy for BMP code points - if(isZeroCE == 0) { - continue; - } else if(UTF_IS_TRAIL(schar) || UTF_IS_LEAD(schar)) { - // for supplementary code points, we have to check the next one - // situations where we are going to ignore - // 1. beginning of the string: schar is a lone surrogate - // 2. schar is a lone surrogate - // 3. schar is a trail surrogate in a valid surrogate sequence - // that is explicitly set to zero. - if (!collIter_bos(source)) { - UChar lead; - if(UTF_IS_LEAD(lead = getPrevNormalizedChar(source))) { - isZeroCE = UTRIE_GET32_FROM_LEAD(coll->mapping, lead); - if(getCETag(isZeroCE) == SURROGATE_TAG) { - uint32_t finalCE = UTRIE_GET32_FROM_OFFSET_TRAIL(coll->mapping, isZeroCE&0xFFFFFF, schar); - if(finalCE == 0) { - // this is a real, assigned completely ignorable code point - goBackOne(source); - continue; - } - } - } else { - // lone surrogate, completely ignorable - continue; - } - } else { - // lone surrogate at the beggining, completely ignorable - continue; - } - } // Source string char was not in the table. // We have not found the prefix. CE = *(coll->contractionCEs + @@ -3091,7 +2760,7 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col /* This should handle contractions */ collIterateState state; backupState(source, &state); - uint32_t firstCE = UCOL_NOT_FOUND; + uint32_t firstCE = *(coll->contractionCEs + ((UChar *)coll->image+getContractOffset(CE) - coll->contractionIndex)); //UCOL_NOT_FOUND; const UChar *UCharOffset; UChar schar, tchar; @@ -3133,42 +2802,19 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col } else { - // if there is a completely ignorable code point in the middle of - // contraction, we need to act as if it's not there - uint32_t isZeroCE = UTRIE_GET32_FROM_LEAD(coll->mapping, schar); - // it's easy for BMP code points - if(isZeroCE == 0) { - continue; - } else if(UTF_IS_LEAD(schar)) { - if(!collIter_eos(source)) { - backupState(source, &state); - UChar trail = getNextNormalizedChar(source); - if(UTF_IS_TRAIL(trail)) { // do stuff with trail - if(getCETag(isZeroCE) == SURROGATE_TAG) { - uint32_t finalCE = UTRIE_GET32_FROM_OFFSET_TRAIL(coll->mapping, isZeroCE&0xFFFFFF, trail); - if(finalCE == 0) { - continue; - } - } - } else { - // broken surrogate sequence, thus completely ignorable - loadState(source, &state, TRUE); - continue; - } - loadState(source, &state, TRUE); - } else { // no more characters, so broken surrogate pair... - // this contraction will ultimately fail, but not because of us - continue; - } - } // else if(UTF_IS_LEAD(schar)) - // Source string char was not in contraction table. // Unless we have a discontiguous contraction, we have finished // with this contraction. + UChar32 miss = schar; + if(U16_IS_LEAD(schar)) { // in order to do the proper detection, we + // need to see if we're dealing with a supplementary + miss = U16_GET_SUPPLEMENTARY(schar, getNextNormalizedChar(source)); + } + uint8_t sCC; - if (schar < 0x300 || + if (miss < 0x300 || maxCC == 0 || - (sCC = i_getCombiningClass(schar, coll)) == 0 || + (sCC = i_getCombiningClass(miss, coll)) == 0 || sCC>maxCC || (allSame != 0 && sCC == maxCC) || collIter_eos(source)) { @@ -3176,6 +2822,9 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col goBackOne(source); // back up the source string by one, // because the character we just looked at was // not part of the contraction. */ + if(U_IS_SUPPLEMENTARY(miss)) { + goBackOne(source); + } CE = *(coll->contractionCEs + (ContractionStart - coll->contractionIndex)); } else { @@ -3187,9 +2836,13 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col /* find the next character if schar is not a base character and we are not yet at the end of the string */ tempchar = getNextNormalizedChar(source); + // probably need another supplementary thingie here goBackOne(source); if (i_getCombiningClass(tempchar, coll) == 0) { goBackOne(source); + if(U_IS_SUPPLEMENTARY(miss)) { + goBackOne(source); + } /* Spit out the last char of the string, wasn't tasty enough */ CE = *(coll->contractionCEs + (ContractionStart - coll->contractionIndex)); @@ -3284,9 +2937,9 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col */ uint32_t size; uint32_t i; /* general counter */ - collIterateState digitState; if (source->coll->numericCollation == UCOL_ON){ + collIterateState digitState = {0,0,0,0,0,0,0,0}; UChar32 char32 = 0; uint32_t digIndx = 0; @@ -3339,22 +2992,23 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col */ digIndx++; for(;;){ - // Make sure we have enough space. - if (digIndx >= ((numTempBufSize - 2) * 2) + 1) - { - numTempBufSize *= 2; - if (numTempBuf == stackNumTempBuf){ - numTempBuf = (uint8_t *)uprv_malloc(sizeof(uint8_t) * numTempBufSize); - uprv_memcpy(numTempBuf, stackNumTempBuf, UCOL_MAX_BUFFER); - }else - uprv_realloc(numTempBuf, numTempBufSize); - } + // Make sure we have enough space. + if (digIndx >= ((numTempBufSize - 2) * 2) + 1) + { + numTempBufSize *= 2; + if (numTempBuf == stackNumTempBuf){ + numTempBuf = (uint8_t *)uprv_malloc(sizeof(uint8_t) * numTempBufSize); + uprv_memcpy(numTempBuf, stackNumTempBuf, UCOL_MAX_BUFFER); + } else { + uprv_realloc(numTempBuf, numTempBufSize); + } + } // Skipping over leading zeroes. - if (digVal != 0 || nonZeroValReached){ - if (digVal != 0 && !nonZeroValReached) - nonZeroValReached = TRUE; - + if (digVal != 0) { + nonZeroValReached = TRUE; + } + if (nonZeroValReached) { /* We parse the digit string into base 100 numbers (this fits into a byte). We only add to the buffer in twos, thus if we are parsing an odd character, @@ -3421,7 +3075,7 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col loadState(source, &digitState, TRUE); //goBackOne(source); } - goBackOne(source); + goBackOne(source); break; } } else { @@ -3483,20 +3137,6 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col CEOffset = (uint32_t *)coll->image+getExpansionOffset(CE); /* find the offset to expansion table */ CE = *CEOffset++; break; -#if 0 - CEOffset = (uint32_t *)coll->image+getExpansionOffset(CE); /* find the offset to expansion table */ - size = getExpansionCount(CE); - CE = *CEOffset++; - if(size != 0) { /* if there are less than 16 elements in expansion, we don't terminate */ - for(i = 1; i<size; i++) { - *(source->CEpos++) = *CEOffset++; - } - } else { /* else, we do */ - while(*CEOffset != 0) { - *(source->CEpos++) = *CEOffset++; - } - } -#endif } return CE; } @@ -3556,18 +3196,12 @@ uint32_t ucol_prv_getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, col // return the first CE, but first put the rest into the expansion buffer if (!source->coll->image->jamoSpecial) { // FAST PATH - /**(source->CEpos++) = ucmpe32_get(UCA->mapping, V);*/ - /**(source->CEpos++) = UTRIE_GET32_FROM_LEAD(UCA->mapping, V);*/ - *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(coll->mapping, V); + *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(&coll->mapping, V); if (T != TBase) { - /**(source->CEpos++) = ucmpe32_get(UCA->mapping, T);*/ - /**(source->CEpos++) = UTRIE_GET32_FROM_LEAD(UCA->mapping, T);*/ - *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(coll->mapping, T); + *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(&coll->mapping, T); } - /*return ucmpe32_get(UCA->mapping, L);*/ // return first one - /*return UTRIE_GET32_FROM_LEAD(UCA->mapping, L);*/ - return UTRIE_GET32_FROM_LEAD(coll->mapping, L); + return UTRIE_GET32_FROM_LEAD(&coll->mapping, L); } else { // Jamo is Special // Since Hanguls pass the FCD check, it is @@ -3661,78 +3295,6 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, /* if you have encountered it here, it means that a */ /* broken sequence was encountered and this is an error */ return 0; - case THAI_TAG: - if ((source->flags & UCOL_ITER_INNORMBUF) || /* Already Swapped || */ - source->string == source->pos || /* At start of string.|| */ - /* previous char not Thai prevowel */ - /*UCOL_ISTHAIBASECONSONANT(*(source->pos)) == FALSE ||*/ // This is from the old specs - we now rearrange unconditionally - UCOL_ISTHAIPREVOWEL(peekCharacter(source, -1)) == FALSE) - //UCOL_ISTHAIPREVOWEL(*(source->pos - 1)) == FALSE) - { - /* Treat Thai as a length one expansion */ - /* find the offset to expansion table */ - CEOffset = (uint32_t *)coll->image+getExpansionOffset(CE); - CE = *CEOffset ++; - } - else - { - /* - Move the prevowel and the following base Consonant into the - normalization buffer with their order swapped - */ - UChar32 cp = (UChar32)peekCharacter(source, 0); - UBool reorder = TRUE; - - int32_t decompLen = unorm_getDecomposition(cp, FALSE, source->writableBuffer, UCOL_WRITABLE_BUFFER_SIZE-1); - if(decompLen < 0) { - decompLen = -decompLen; // there was no decomposition - } else { // we need to check if we will hit a contraction trigger because of decomposition - int32_t i = decompLen; - for(i = 0; i < decompLen; i++) { - if(ucol_contractionEndCP(source->writableBuffer[i], coll)) { - reorder = FALSE; - } - } - } - - UChar *tempbuffer = source->writableBuffer + - (source->writableBufSize - 1); - uprv_memcpy(tempbuffer-decompLen + 1, source->writableBuffer, sizeof(UChar)*decompLen); - if(reorder) { - *(tempbuffer - decompLen) = *(tempbuffer - decompLen + 1); - *(tempbuffer - decompLen + 1) = peekCharacter(source, -1); - } else { - *(tempbuffer - decompLen) = peekCharacter(source, -1); - } - *(tempbuffer - decompLen - 1) = 0; - - -/* - UChar *tempbuffer = source->writableBuffer + - (source->writableBufSize - 1); - *(tempbuffer - 2) = 0; - *(tempbuffer - 1) = peekCharacter(source, 0); - *(tempbuffer) = peekCharacter(source, -1); -*/ - /* - Indicate where to continue in main input string after exhausting - the writableBuffer - */ - if (source->pos - 1 == source->string) { - source->fcdPosition = NULL; - } else { - source->fcdPosition = source->pos-2; - } - - source->pos = tempbuffer+1; // we're doing predecrement, right? - source->origFlags = source->flags; - source->flags |= UCOL_ITER_INNORMBUF; - source->flags &= ~(UCOL_ITER_NORM | UCOL_ITER_HASLEN); - - //CE = UCOL_IGNORABLE; - return(UCOL_IGNORABLE); - } - break; case SPEC_PROC_TAG: { // Special processing is getting a CE that is preceded by a certain prefix @@ -3756,7 +3318,7 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, CE = *(coll->contractionCEs + (UCharOffset - coll->contractionIndex)); break; } - schar = getPrevNormalizedChar(source); + schar = getPrevNormalizedChar(source, status); goBackOne(source); while(schar > (tchar = *UCharOffset)) { /* since the contraction codepoints should be ordered, we skip all that are smaller */ @@ -3775,11 +3337,11 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, // a prefix, we need to act as if it's not there // assumption: 'real' noncharacters (*fffe, *ffff, fdd0-fdef are set to zero) // lone surrogates cannot be set to zero as it would break other processing - uint32_t isZeroCE = UTRIE_GET32_FROM_LEAD(coll->mapping, schar); + uint32_t isZeroCE = UTRIE_GET32_FROM_LEAD(&coll->mapping, schar); // it's easy for BMP code points if(isZeroCE == 0) { continue; - } else if(UTF_IS_TRAIL(schar) || UTF_IS_LEAD(schar)) { + } else if(U16_IS_TRAIL(schar) || U16_IS_LEAD(schar)) { // for supplementary code points, we have to check the next one // situations where we are going to ignore // 1. beginning of the string: schar is a lone surrogate @@ -3788,10 +3350,10 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, // that is explicitly set to zero. if (!collIter_bos(source)) { UChar lead; - if(UTF_IS_LEAD(lead = getPrevNormalizedChar(source))) { - isZeroCE = UTRIE_GET32_FROM_LEAD(coll->mapping, lead); + if(U16_IS_LEAD(lead = getPrevNormalizedChar(source, status))) { + isZeroCE = UTRIE_GET32_FROM_LEAD(&coll->mapping, lead); if(getCETag(isZeroCE) == SURROGATE_TAG) { - uint32_t finalCE = UTRIE_GET32_FROM_OFFSET_TRAIL(coll->mapping, isZeroCE&0xFFFFFF, schar); + uint32_t finalCE = UTRIE_GET32_FROM_OFFSET_TRAIL(&coll->mapping, isZeroCE&0xFFFFFF, schar); if(finalCE == 0) { // this is a real, assigned completely ignorable code point goBackOne(source); @@ -3847,13 +3409,11 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, *(UCharOffset --) = 0; noChars = 0; // have to swap thai characters - while (ucol_unsafeCP(schar, coll) || UCOL_ISTHAIPREVOWEL(peekCharacter(source, -1))) { - // we might have ended here after trying to reorder Thai, but seeing that there are unsafe points - // in the backward processing + while (ucol_unsafeCP(schar, coll)) { *(UCharOffset) = schar; noChars++; UCharOffset --; - schar = getPrevNormalizedChar(source); + schar = getPrevNormalizedChar(source, status); goBackOne(source); // TODO: when we exhaust the contraction buffer, // it needs to get reallocated. The problem is @@ -3973,9 +3533,9 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, */ //uint32_t size; uint32_t i; /* general counter */ - collIterateState state; if (source->coll->numericCollation == UCOL_ON){ + collIterateState state = {0,0,0,0,0,0,0,0}; UChar32 char32 = 0; uint32_t digIndx = 0; @@ -4003,7 +3563,7 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, if (U16_IS_TRAIL (ch)){ if (!collIter_bos(source)){ - UChar lead = getPrevNormalizedChar(source); + UChar lead = getPrevNormalizedChar(source, status); if(U16_IS_LEAD(lead)) { char32 = U16_GET_SUPPLEMENTARY(lead,ch); goBackOne(source); @@ -4084,14 +3644,14 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, ++trailingZeroCount; if (!collIter_bos(source)){ - ch = getPrevNormalizedChar(source); + ch = getPrevNormalizedChar(source, status); //goBackOne(source); if (U16_IS_TRAIL(ch)){ backupState(source, &state); if (!collIter_bos(source)) { goBackOne(source); - UChar lead = getPrevNormalizedChar(source); + UChar lead = getPrevNormalizedChar(source, status); if(U16_IS_LEAD(lead)) { char32 = U16_GET_SUPPLEMENTARY(lead,ch); } else { @@ -4177,33 +3737,6 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, CEOffset = (uint32_t *)coll->image + getExpansionOffset(CE); CE = *(CEOffset++); break; -#if 0 - /* find the offset to expansion table */ - CEOffset = (uint32_t *)coll->image + getExpansionOffset(CE); - size = getExpansionCount(CE); - if (size != 0) { - /* - if there are less than 16 elements in expansion, we don't terminate - */ - uint32_t count; - for (count = 0; count < size; count++) { - *(source->CEpos ++) = *CEOffset++; - } - } - else { - /* else, we do */ - while (*CEOffset != 0) { - *(source->CEpos ++) = *CEOffset ++; - } - } - source->toReturn = source->CEpos - 1; - // in case of one element expansion, we - // want to immediately return CEpos - if(source->toReturn == source->CEs) { - source->CEpos = source->CEs; - } - return *(source->toReturn); -#endif } } case HANGUL_SYLLABLE_TAG: /* AC00-D7AF*/ @@ -4237,16 +3770,10 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, */ if (!source->coll->image->jamoSpecial) { - /**(source->CEpos ++) = ucmpe32_get(UCA->mapping, L);*/ - /**(source->CEpos++) = UTRIE_GET32_FROM_LEAD(UCA->mapping, L);*/ - *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(coll->mapping, L); - /**(source->CEpos ++) = ucmpe32_get(UCA->mapping, V);*/ - /**(source->CEpos++) = UTRIE_GET32_FROM_LEAD(UCA->mapping, V);*/ - *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(coll->mapping, V); + *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(&coll->mapping, L); + *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(&coll->mapping, V); if (T != TBase) - /**(source->CEpos ++) = ucmpe32_get(UCA->mapping, T);*/ - /**(source->CEpos++) = UTRIE_GET32_FROM_LEAD(UCA->mapping, T);*/ - *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(coll->mapping, T); + *(source->CEpos++) = UTRIE_GET32_FROM_LEAD(&coll->mapping, T); source->toReturn = source->CEpos - 1; return *(source->toReturn); @@ -4310,7 +3837,7 @@ uint32_t ucol_prv_getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE, prevChar = *prev; /* Handles Han and Supplementary characters here.*/ - if (UTF_IS_FIRST_SURROGATE(prevChar)) { + if (U16_IS_LEAD(prevChar)) { cp = ((((uint32_t)prevChar)<<10UL)+(ch)-(((uint32_t)0xd800<<10UL)+0xdc00-0x10000)); source->pos = prev; } else { @@ -4554,7 +4081,7 @@ ucol_getSortKeyWithAllocation(const UCollator *coll, /* or if we run out of space while making a sortkey and want to return ASAP */ int32_t ucol_getSortKeySize(const UCollator *coll, collIterate *s, int32_t currentSize, UColAttributeValue strength, int32_t len) { UErrorCode status = U_ZERO_ERROR; - const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)coll->UCA->image + coll->image->UCAConsts); + //const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)coll->UCA->image + coll->image->UCAConsts); uint8_t compareSec = (uint8_t)((strength >= UCOL_SECONDARY)?0:0xFF); uint8_t compareTer = (uint8_t)((strength >= UCOL_TERTIARY)?0:0xFF); uint8_t compareQuad = (uint8_t)((strength >= UCOL_QUATERNARY)?0:0xFF); @@ -4655,7 +4182,8 @@ int32_t ucol_getSortKeySize(const UCollator *coll, collIterate *s, int32_t curre leadPrimary = 0; } else if(primary1<UCOL_BYTE_FIRST_NON_LATIN_PRIMARY || //(primary1 > (UCOL_RESET_TOP_VALUE>>24) && primary1 < (UCOL_NEXT_TOP_VALUE>>24))) { - (primary1 > (*UCAconsts->UCA_LAST_NON_VARIABLE>>24) && primary1 < (*UCAconsts->UCA_FIRST_IMPLICIT>>24))) { + //(primary1 > (*UCAconsts->UCA_LAST_NON_VARIABLE>>24) && primary1 < (*UCAconsts->UCA_FIRST_IMPLICIT>>24))) { + (primary1 > maxRegularPrimary && primary1 < minImplicitPrimary)) { /* not compressible */ leadPrimary = 0; currentSize+=2; @@ -4716,7 +4244,10 @@ int32_t ucol_getSortKeySize(const UCollator *coll, collIterate *s, int32_t curre } } - if(doCase) { + if(doCase && (primary1 > 0 || strength >= UCOL_SECONDARY)) { + // do the case level if we need to do it. We don't want to calculate + // case level for primary ignorables if we have only primary strength and case level + // otherwise we would break well formedness of CEs if (caseShift == 0) { currentSize++; caseShift = UCOL_CASE_SHIFT_START; @@ -4895,7 +4426,7 @@ ucol_calcSortKey(const UCollator *coll, UBool allocateSKBuffer, UErrorCode *status) { - const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)coll->UCA->image + coll->image->UCAConsts); + //const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)coll->UCA->image + coll->image->UCAConsts); uint32_t i = 0; /* general purpose counter */ @@ -4935,7 +4466,7 @@ ucol_calcSortKey(const UCollator *coll, UBool shifted = (coll->alternateHandling == UCOL_SHIFTED); //UBool qShifted = shifted && (compareQuad == 0); UBool doHiragana = (coll->hiraganaQ == UCOL_ON) && (compareQuad == 0); - const uint8_t *scriptOrder = coll->scriptOrder; + /*const uint8_t *scriptOrder = coll->scriptOrder;*/ uint32_t variableTopValue = coll->variableTopValue; // TODO: UCOL_COMMON_BOT4 should be a function of qShifted. If we have no @@ -5003,7 +4534,10 @@ ucol_calcSortKey(const UCollator *coll, } return keyLen; } - uint8_t *primarySafeEnd = primaries + resultLength - 2; + uint8_t *primarySafeEnd = primaries + resultLength - 1; + if(strength > UCOL_PRIMARY) { + primarySafeEnd--; + } uint32_t minBufferSize = UCOL_MAX_BUFFER; @@ -5061,11 +4595,9 @@ ucol_calcSortKey(const UCollator *coll, primary2 = (uint8_t)((order >>= 8) & UCOL_BYTE_SIZE_MASK); primary1 = (uint8_t)(order >> 8); - if(notIsContinuation) { - if(scriptOrder != NULL) { - primary1 = scriptOrder[primary1]; - } - } + /*if(notIsContinuation && scriptOrder != NULL) { + primary1 = scriptOrder[primary1]; + }*/ if(shifted && ((notIsContinuation && order <= variableTopValue && primary1 > 0) || (!notIsContinuation && wasShifted)) @@ -5112,7 +4644,8 @@ ucol_calcSortKey(const UCollator *coll, *primaries++ = primary1; leadPrimary = 0; } else if(primary1<UCOL_BYTE_FIRST_NON_LATIN_PRIMARY || - (primary1 > (*UCAconsts->UCA_LAST_NON_VARIABLE>>24) && primary1 < (*UCAconsts->UCA_FIRST_IMPLICIT>>24))) { + //(primary1 > (*UCAconsts->UCA_LAST_NON_VARIABLE>>24) && primary1 < (*UCAconsts->UCA_FIRST_IMPLICIT>>24))) { + (primary1 > maxRegularPrimary && primary1 < minImplicitPrimary)) { /* not compressible */ leadPrimary = 0; *primaries++ = primary1; @@ -5174,7 +4707,10 @@ ucol_calcSortKey(const UCollator *coll, } } - if(doCase) { + if(doCase && (primary1 > 0 || strength >= UCOL_SECONDARY)) { + // do the case level if we need to do it. We don't want to calculate + // case level for primary ignorables if we have only primary strength and case level + // otherwise we would break well formedness of CEs doCaseShift(&cases, caseShift); if(notIsContinuation) { caseBits = (uint8_t)(tertiary & 0xC0); @@ -5215,9 +4751,10 @@ ucol_calcSortKey(const UCollator *coll, if (tertiary == tertiaryCommon && notIsContinuation) { ++count3; } else { - if((tertiary > tertiaryCommon && tertiaryCommon == UCOL_COMMON3_NORMAL) - || (tertiary <= tertiaryCommon && tertiaryCommon == UCOL_COMMON3_UPPERFIRST)) { + if(tertiary > tertiaryCommon && tertiaryCommon == UCOL_COMMON3_NORMAL) { tertiary += tertiaryAddition; + } else if(tertiary <= tertiaryCommon && tertiaryCommon == UCOL_COMMON3_UPPERFIRST) { + tertiary -= tertiaryAddition; } if (count3 > 0) { if ((tertiary > tertiaryCommon)) { @@ -5271,7 +4808,10 @@ ucol_calcSortKey(const UCollator *coll, primStart = reallocateBuffer(&primaries, *result, prim, &resultLength, 2*sks, status); if(U_SUCCESS(*status)) { *result = primStart; - primarySafeEnd = primStart + resultLength - 2; + primarySafeEnd = primStart + resultLength - 1; + if(strength > UCOL_PRIMARY) { + primarySafeEnd--; + } } else { IInit_collIterate(coll, (UChar *)source, len, &s); if(source == normSource) { @@ -5501,7 +5041,7 @@ ucol_calcSortKeySimpleTertiary(const UCollator *coll, { U_ALIGN_CODE(16); - const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)coll->UCA->image + coll->image->UCAConsts); + //const UCAConstants *UCAconsts = (UCAConstants *)((uint8_t *)coll->UCA->image + coll->image->UCAConsts); uint32_t i = 0; /* general purpose counter */ /* Stack allocated buffers for buffers we use */ @@ -5640,7 +5180,8 @@ ucol_calcSortKeySimpleTertiary(const UCollator *coll, leadPrimary = 0; } else if(primary1<UCOL_BYTE_FIRST_NON_LATIN_PRIMARY || //(primary1 > (UCOL_RESET_TOP_VALUE>>24) && primary1 < (UCOL_NEXT_TOP_VALUE>>24))) - (primary1 > (*UCAconsts->UCA_LAST_NON_VARIABLE>>24) && primary1 < (*UCAconsts->UCA_FIRST_IMPLICIT>>24))) { + //(primary1 > (*UCAconsts->UCA_LAST_NON_VARIABLE>>24) && primary1 < (*UCAconsts->UCA_FIRST_IMPLICIT>>24))) { + (primary1 > maxRegularPrimary && primary1 < minImplicitPrimary)) { /* not compressible */ leadPrimary = 0; *primaries++ = primary1; @@ -5917,12 +5458,15 @@ enum { /** When we do French we need to reverse secondary values. However, continuations * need to stay the same. So if you had abc1c2c3de, you need to have edc1c2c3ba */ - UCOL_PSK_USED_ELEMENTS_SHIFT = 7, - UCOL_PSK_USED_ELEMENTS_MASK = 0x3FF, - UCOL_PSK_ITER_SKIP_SHIFT = 17, - UCOL_PSK_ITER_SKIP_MASK = 0x7FFF + UCOL_PSK_BOCSU_BYTES_SHIFT = 7, + UCOL_PSK_BOCSU_BYTES_MASK = 3, + UCOL_PSK_CONSUMED_CES_SHIFT = 9, + UCOL_PSK_CONSUMED_CES_MASK = 0x7FFFF }; +// macro calculating the number of expansion CEs available +#define uprv_numAvailableExpCEs(s) (s).CEpos - (s).toReturn + /** main sortkey part procedure. On the first call, * you should pass in a collator, an iterator, empty state @@ -5960,14 +5504,10 @@ enum { * 4 - was shifted. Whether the previous iteration finished in the * shifted state. * 5, 6 - French continuation bytes written. See the comment in the enum - * 7..16 - Used elements. Number of CEs that were already used from the - * expansion buffer or number of bytes from a bocu sequence on + * 7,8 - Bocsu bytes used. Number of bytes from a bocu sequence on * the identical level. - * 17..31 - iterator skip. Number of move operations iterator needs to - * skip from the current state in order to continue. This is used - * only if normalization is turned on, since the normalizing iterator - * can return undefined state, which means that it's in the middle - * of normalizing sequence. + * 9..31 - CEs consumed. Number of getCE or next32 operations performed + * since thes last successful update of the iterator state. */ U_CAPI int32_t U_EXPORT2 ucol_nextSortKeyPart(const UCollator *coll, @@ -5995,7 +5535,6 @@ ucol_nextSortKeyPart(const UCollator *coll, UTRACE_EXIT_VALUE(0); return 0; } - /** Setting up situation according to the state we got from the previous iteration */ // The state of the iterator from the previous invocation uint32_t iterState = state[0]; @@ -6008,13 +5547,13 @@ ucol_nextSortKeyPart(const UCollator *coll, int32_t byteCountOrFrenchDone = (state[1] >> UCOL_PSK_BYTE_COUNT_OR_FRENCH_DONE_SHIFT) & UCOL_PSK_BYTE_COUNT_OR_FRENCH_DONE_MASK; // number of bytes in the continuation buffer for French int32_t usedFrench = (state[1] >> UCOL_PSK_USED_FRENCH_SHIFT) & UCOL_PSK_USED_FRENCH_MASK; - // Skip the CEs that we got from an extraction - // and delivered in the previous call - int32_t usedElements = (state[1] >> UCOL_PSK_USED_ELEMENTS_SHIFT) & UCOL_PSK_USED_ELEMENTS_MASK; - // Number of times to skip because the iterator returned - // UITER_NO_STATE when it was stopped in the last iteration, so we had to save the - // last valid state. - int32_t iterSkips = (state[1] >> UCOL_PSK_ITER_SKIP_SHIFT) & UCOL_PSK_ITER_SKIP_MASK; + // Number of bytes already written from a bocsu sequence. Since + // the longes bocsu sequence is 4 long, this can be up to 3. + int32_t bocsuBytesUsed = (state[1] >> UCOL_PSK_BOCSU_BYTES_SHIFT) & UCOL_PSK_BOCSU_BYTES_MASK; + // Number of elements that need to be consumed in this iteration because + // the iterator returned UITER_NO_STATE at the end of the last iteration, + // so we had to save the last valid state. + int32_t cces = (state[1] >> UCOL_PSK_CONSUMED_CES_SHIFT) & UCOL_PSK_CONSUMED_CES_MASK; /** values that depend on the collator attributes */ // strength of the collator. @@ -6109,36 +5648,21 @@ ucol_nextSortKeyPart(const UCollator *coll, } } - // Then, we may have to move more, if the normalizing iterator - // was going through a normalizing sequence. - if(iterSkips) { - // if we are on secondary level AND we do French, we need to go backward instead of forward - if(level == UCOL_PSK_SECONDARY && doingFrench) { - s.iterator->move(s.iterator, -iterSkips, UITER_CURRENT); - } else { - s.iterator->move(s.iterator, iterSkips, UITER_CURRENT); - } - } - // Number of expansion CEs that were already consumed in the - // previous iteration for the last code point processed. We - // want to clean out the expansion buffer, so that we can - // get correct CEs. This value is persistent over iterations, - // since we can have several iterations on the one expansion - // buffer. - int32_t consumedExpansionCEs = usedElements; - // Number of bytes already writted from a bocsu sequence. Since - // the longes bocsu sequence is 4 long, this can be up to 3. It - // shares the state field with consumedExpansionCEs value, since - // they cannot simultanously appear on the same level - int32_t bocsuBytesUsed = 0; - // Clean out the expansion buffer unless we are on - // identical level. In that case we use this field - // to store the number of bytes already written - // from the previous bocsu sequence. - if(level < UCOL_PSK_IDENTICAL && usedElements != 0) { - while(usedElements-->0) { + // This variable tells us whether we can attempt to update the state + // of iterator. Situations where we don't want to update iterator state + // are the existence of expansion CEs that are not yet processed, and + // finishing the case level without enough space in the buffer to insert + // a level terminator. + UBool canUpdateState = TRUE; + + // Consume all the CEs that were consumed at the end of the previous + // iteration without updating the iterator state. On identical level, + // consume the code points. + int32_t counter = cces; + if(level < UCOL_PSK_IDENTICAL) { + while(counter-->0) { // If we're doing French and we are on the secondary level, // we go backwards. if(level == UCOL_PSK_SECONDARY && doingFrench) { @@ -6152,22 +5676,19 @@ ucol_nextSortKeyPart(const UCollator *coll, UTRACE_EXIT_STATUS(*status); return 0; } + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; + } } } else { - bocsuBytesUsed = usedElements; + while(counter-->0) { + uiter_next32(s.iterator); + } } - // This variable prevents the adjusting of iterator - // skip variable when we are the first time on a - // level. I hope there is a better way to do it, but - // I could not think of it. - UBool firstTimeOnLevel = TRUE; // French secondary needs to know whether the iterator state of zero came from previous level OR // from a new invocation... UBool wasDoingPrimary = FALSE; - // Case level is kind of goofy. This variable tells us that - // we are still not done with the case level. - UBool dontAdvanceIteratorBecauseWeNeedALevelTerminator = FALSE; // destination buffer byte counter. When this guy // gets to count, we're done with the iteration int32_t i = 0; @@ -6192,19 +5713,15 @@ ucol_nextSortKeyPart(const UCollator *coll, // We should save the state only if we // are sure that we are done with the // previous iterator state - if(consumedExpansionCEs == 0 && byteCountOrFrenchDone == 0) { + if(canUpdateState && byteCountOrFrenchDone == 0) { newState = s.iterator->getState(s.iterator); - if(newState != UITER_NO_STATE) { + if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - if(!firstTimeOnLevel && !byteCountOrFrenchDone) { - iterSkips++; - } + cces = 0; } } - firstTimeOnLevel = FALSE; CE = ucol_IGetNextCE(coll, &s, status); + cces++; if(CE==UCOL_NO_MORE_CES) { // Add the level separator terminatePSKLevel(level, maxLevel, i, dest); @@ -6212,6 +5729,7 @@ ucol_nextSortKeyPart(const UCollator *coll, // Restart the iteration an move to the // second level s.iterator->move(s.iterator, 0, UITER_START); + cces = 0; level = UCOL_PSK_SECONDARY; break; } @@ -6227,24 +5745,18 @@ ucol_nextSortKeyPart(const UCollator *coll, if((CE &=0xff)!=0) { if(i==count) { /* overflow */ - byteCountOrFrenchDone=1; + byteCountOrFrenchDone = 1; + cces--; goto saveState; } dest[i++]=(uint8_t)CE; } } } - if(s.CEpos - s.toReturn || (s.pos && *s.pos != 0)) { - // s.pos != NULL means there is a normalization buffer in effect - // in iterative case, this means that we are doing Thai (maybe discontiguos) - consumedExpansionCEs++; + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; } else { - consumedExpansionCEs = 0; - } - if(s.pos && *s.pos == 0) { - // maybe it is the end of Thai - we have to have - // an extra skip - iterSkips++; + canUpdateState = TRUE; } } /* fall through to next level */ @@ -6258,26 +5770,23 @@ ucol_nextSortKeyPart(const UCollator *coll, // We should save the state only if we // are sure that we are done with the // previous iterator state - if(consumedExpansionCEs == 0) { + if(canUpdateState) { newState = s.iterator->getState(s.iterator); if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - if(!firstTimeOnLevel) { - iterSkips++; - } + cces = 0; } } - firstTimeOnLevel = FALSE; CE = ucol_IGetNextCE(coll, &s, status); + cces++; if(CE==UCOL_NO_MORE_CES) { // Add the level separator terminatePSKLevel(level, maxLevel, i, dest); - byteCountOrFrenchDone=0; + byteCountOrFrenchDone = 0; // Restart the iteration an move to the // second level s.iterator->move(s.iterator, 0, UITER_START); + cces = 0; level = UCOL_PSK_CASE; break; } @@ -6287,13 +5796,10 @@ ucol_nextSortKeyPart(const UCollator *coll, dest[i++]=(uint8_t)CE; } } - if(s.CEpos - s.toReturn || (s.pos && *s.pos != 0)) { - consumedExpansionCEs++; + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; } else { - consumedExpansionCEs = 0; - } - if(s.pos && *s.pos == 0) { - iterSkips++; + canUpdateState = TRUE; } } } else { // French secondary processing @@ -6304,28 +5810,25 @@ ucol_nextSortKeyPart(const UCollator *coll, // moved to end. if(wasDoingPrimary) { s.iterator->move(s.iterator, 0, UITER_LIMIT); + cces = 0; } for(;;) { if(i == count) { goto saveState; } - if(consumedExpansionCEs == 0) { + if(canUpdateState) { newState = s.iterator->getState(s.iterator); if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - if(!firstTimeOnLevel) { - iterSkips++; - } - } + cces = 0; + } } - firstTimeOnLevel = FALSE; CE = ucol_IGetPrevCE(coll, &s, status); + cces++; if(CE==UCOL_NO_MORE_CES) { // Add the level separator terminatePSKLevel(level, maxLevel, i, dest); - byteCountOrFrenchDone=0; + byteCountOrFrenchDone = 0; // Restart the iteration an move to the next level s.iterator->move(s.iterator, 0, UITER_START); level = UCOL_PSK_CASE; @@ -6351,13 +5854,10 @@ ucol_nextSortKeyPart(const UCollator *coll, } } } - if(s.CEpos - s.toReturn || (s.pos && *s.pos != 0)) { - consumedExpansionCEs++; + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; } else { - consumedExpansionCEs = 0; - } - if(s.pos && *s.pos == 0) { - iterSkips++; + canUpdateState = TRUE; } } } @@ -6378,29 +5878,25 @@ ucol_nextSortKeyPart(const UCollator *coll, // We should save the state only if we // are sure that we are done with the // previous iterator state - if(consumedExpansionCEs == 0) { + if(canUpdateState) { newState = s.iterator->getState(s.iterator); if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - if(!firstTimeOnLevel) { - iterSkips++; - } + cces = 0; } } - firstTimeOnLevel = FALSE; CE = ucol_IGetNextCE(coll, &s, status); + cces++; if(CE==UCOL_NO_MORE_CES) { // On the case level we might have an unfinished // case byte. Add one if it's started. if(caseShift != UCOL_CASE_SHIFT_START) { dest[i++] = caseByte; } - // This is kind of tricky - situation where - // we need to keep the iterator in the old - // state, but don't need to bring anything - // to the next invocation + cces = 0; + // We have finished processing CEs on this level. + // However, we don't know if we have enough space + // to add a case level terminator. if(i < count) { // Add the level separator terminatePSKLevel(level, maxLevel, i, dest); @@ -6409,13 +5905,16 @@ ucol_nextSortKeyPart(const UCollator *coll, s.iterator->move(s.iterator, 0, UITER_START); level = UCOL_PSK_TERTIARY; } else { - dontAdvanceIteratorBecauseWeNeedALevelTerminator = TRUE; + canUpdateState = FALSE; } break; } if(!isShiftedCE(CE, LVT, &wasShifted)) { - if(!isContinuation(CE)) { + if(!isContinuation(CE) && ((CE & UCOL_PRIMARYMASK) != 0 || strength > UCOL_PRIMARY)) { + // do the case level if we need to do it. We don't want to calculate + // case level for primary ignorables if we have only primary strength and case level + // otherwise we would break well formedness of CEs CE = (uint8_t)(CE & UCOL_BYTE_SIZE_MASK); caseBits = (uint8_t)(CE & 0xC0); // this copies the case level logic from the @@ -6453,13 +5952,10 @@ ucol_nextSortKeyPart(const UCollator *coll, } } // Not sure this is correct for the case level - revisit - if(s.CEpos - s.toReturn || (s.pos && *s.pos != 0)) { - consumedExpansionCEs++; + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; } else { - consumedExpansionCEs = 0; - } - if(s.pos && *s.pos == 0) { - iterSkips++; + canUpdateState = TRUE; } } } else { @@ -6475,26 +5971,23 @@ ucol_nextSortKeyPart(const UCollator *coll, // We should save the state only if we // are sure that we are done with the // previous iterator state - if(consumedExpansionCEs == 0) { + if(canUpdateState) { newState = s.iterator->getState(s.iterator); if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - if(!firstTimeOnLevel) { - iterSkips++; - } + cces = 0; } } - firstTimeOnLevel = FALSE; CE = ucol_IGetNextCE(coll, &s, status); + cces++; if(CE==UCOL_NO_MORE_CES) { // Add the level separator terminatePSKLevel(level, maxLevel, i, dest); - byteCountOrFrenchDone=0; + byteCountOrFrenchDone = 0; // Restart the iteration an move to the // second level s.iterator->move(s.iterator, 0, UITER_START); + cces = 0; level = UCOL_PSK_QUATERNARY; break; } @@ -6513,13 +6006,10 @@ ucol_nextSortKeyPart(const UCollator *coll, dest[i++]=(uint8_t)CE; } } - if(s.CEpos - s.toReturn || (s.pos && *s.pos != 0)) { - consumedExpansionCEs++; + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; } else { - consumedExpansionCEs = 0; - } - if(s.pos && *s.pos == 0) { - iterSkips++; + canUpdateState = TRUE; } } } else { @@ -6537,27 +6027,24 @@ ucol_nextSortKeyPart(const UCollator *coll, // We should save the state only if we // are sure that we are done with the // previous iterator state - if(consumedExpansionCEs == 0) { + if(canUpdateState) { newState = s.iterator->getState(s.iterator); if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - if(!firstTimeOnLevel) { - iterSkips++; - } + cces = 0; } } - firstTimeOnLevel = FALSE; CE = ucol_IGetNextCE(coll, &s, status); + cces++; if(CE==UCOL_NO_MORE_CES) { // Add the level separator terminatePSKLevel(level, maxLevel, i, dest); //dest[i++] = UCOL_LEVELTERMINATOR; - byteCountOrFrenchDone=0; + byteCountOrFrenchDone = 0; // Restart the iteration an move to the // second level s.iterator->move(s.iterator, 0, UITER_START); + cces = 0; level = UCOL_PSK_QUIN; break; } @@ -6572,7 +6059,7 @@ ucol_nextSortKeyPart(const UCollator *coll, if((CE &=0xff)!=0) { if(i==count) { /* overflow */ - byteCountOrFrenchDone=1; + byteCountOrFrenchDone = 1; goto saveState; } dest[i++]=(uint8_t)CE; @@ -6588,13 +6075,10 @@ ucol_nextSortKeyPart(const UCollator *coll, } } } - if(s.CEpos - s.toReturn || (s.pos && *s.pos != 0)) { - consumedExpansionCEs++; + if(uprv_numAvailableExpCEs(s)) { + canUpdateState = FALSE; } else { - consumedExpansionCEs = 0; - } - if(s.pos && *s.pos == 0) { - iterSkips++; + canUpdateState = TRUE; } } } else { @@ -6659,13 +6143,12 @@ ucol_nextSortKeyPart(const UCollator *coll, newState = s.iterator->getState(s.iterator); if(newState != UITER_NO_STATE) { iterState = newState; - iterSkips = 0; - } else { - iterSkips++; - } + cces = 0; + } uint8_t buff[4]; second = uiter_next32(s.iterator); + cces++; // end condition for identical level if(second == U_SENTINEL) { @@ -6707,37 +6190,23 @@ ucol_nextSortKeyPart(const UCollator *coll, saveState: // Now we need to return stuff. First we want to see whether we have // done everything for the current state of iterator. - if(consumedExpansionCEs || byteCountOrFrenchDone - || dontAdvanceIteratorBecauseWeNeedALevelTerminator) { + if(byteCountOrFrenchDone + || canUpdateState == FALSE + || (newState = s.iterator->getState(s.iterator)) == UITER_NO_STATE) { // Any of above mean that the previous transaction // wasn't finished and that we should store the // previous iterator state. state[0] = iterState; } else { - // The transaction is complete. We will continue in - // next iteration. - if((newState = s.iterator->getState(s.iterator))!= UITER_NO_STATE) { + // The transaction is complete. We will continue in the next iteration. state[0] = s.iterator->getState(s.iterator); - iterSkips = 0; - } else { - state[0] = iterState; - iterSkips++; - } + cces = 0; } - // Store the number of elements processed. On CE levels, this is - // the number of expansion CEs processed. On identical level, this - // is the number of bocsu bytes written. - if(level < UCOL_PSK_IDENTICAL) { - if((consumedExpansionCEs & UCOL_PSK_USED_ELEMENTS_MASK) != consumedExpansionCEs) { - *status = U_INDEX_OUTOFBOUNDS_ERROR; - } - state[1] = (consumedExpansionCEs & UCOL_PSK_USED_ELEMENTS_MASK) << UCOL_PSK_USED_ELEMENTS_SHIFT; - } else { - if((bocsuBytesUsed & UCOL_PSK_USED_ELEMENTS_MASK) != bocsuBytesUsed) { - *status = U_INDEX_OUTOFBOUNDS_ERROR; - } - state[1] = (bocsuBytesUsed & UCOL_PSK_USED_ELEMENTS_MASK) << UCOL_PSK_USED_ELEMENTS_SHIFT; + // Store the number of bocsu bytes written. + if((bocsuBytesUsed & UCOL_PSK_BOCSU_BYTES_MASK) != bocsuBytesUsed) { + *status = U_INDEX_OUTOFBOUNDS_ERROR; } + state[1] = (bocsuBytesUsed & UCOL_PSK_BOCSU_BYTES_MASK) << UCOL_PSK_BOCSU_BYTES_SHIFT; // Next we put in the level of comparison state[1] |= ((level & UCOL_PSK_LEVEL_MASK) << UCOL_PSK_LEVEL_SHIFT); @@ -6753,12 +6222,12 @@ saveState: if(wasShifted) { state[1] |= 1 << UCOL_PSK_WAS_SHIFTED_SHIFT; } - // Check for iterSkips overflow - if((iterSkips & UCOL_PSK_ITER_SKIP_MASK) != iterSkips) { + // Check for cces overflow + if((cces & UCOL_PSK_CONSUMED_CES_MASK) != cces) { *status = U_INDEX_OUTOFBOUNDS_ERROR; } - // Store iterSkips - state[1] |= ((iterSkips & UCOL_PSK_ITER_SKIP_MASK) << UCOL_PSK_ITER_SKIP_SHIFT); + // Store cces + state[1] |= ((cces & UCOL_PSK_CONSUMED_CES_MASK) << UCOL_PSK_CONSUMED_CES_SHIFT); // Check for French overflow if((usedFrench & UCOL_PSK_USED_FRENCH_MASK) != usedFrench) { @@ -6847,63 +6316,6 @@ ucol_getBound(const uint8_t *source, } } -static -inline void uprv_appendByteToHexString(char *dst, uint8_t val) { - uint32_t len = (uint32_t)uprv_strlen(dst); - *(dst+len) = T_CString_itosOffset((val >> 4)); - *(dst+len+1) = T_CString_itosOffset((val & 0xF)); - *(dst+len+2) = 0; -} - -/* this function makes a string with representation of a sortkey */ -U_CAPI char* U_EXPORT2 ucol_sortKeyToString(const UCollator *coll, const uint8_t *sortkey, char *buffer, uint32_t *len) { - int32_t strength = UCOL_PRIMARY; - uint32_t res_size = 0; - UBool doneCase = FALSE; - - char *current = buffer; - const uint8_t *currentSk = sortkey; - - uprv_strcpy(current, "["); - - while(strength <= UCOL_QUATERNARY && strength <= coll->strength) { - if(strength > UCOL_PRIMARY) { - uprv_strcat(current, " . "); - } - while(*currentSk != 0x01 && *currentSk != 0x00) { /* print a level */ - uprv_appendByteToHexString(current, *currentSk++); - uprv_strcat(current, " "); - } - if(coll->caseLevel == UCOL_ON && strength == UCOL_SECONDARY && doneCase == FALSE) { - doneCase = TRUE; - } else if(coll->caseLevel == UCOL_OFF || doneCase == TRUE || strength != UCOL_SECONDARY) { - strength ++; - } - uprv_appendByteToHexString(current, *currentSk++); /* This should print '01' */ - if(strength == UCOL_QUATERNARY && coll->alternateHandling == UCOL_NON_IGNORABLE) { - break; - } - } - - if(coll->strength == UCOL_IDENTICAL) { - uprv_strcat(current, " . "); - while(*currentSk != 0) { - uprv_appendByteToHexString(current, *currentSk++); - uprv_strcat(current, " "); - } - - uprv_appendByteToHexString(current, *currentSk++); - } - uprv_strcat(current, "]"); - - if(res_size > *len) { - return NULL; - } - - return buffer; -} - - /****************************************************************************/ /* Following are the functions that deal with the properties of a collator */ /* there are new APIs and some compatibility APIs */ @@ -7001,9 +6413,9 @@ ucol_setUpLatinOne(UCollator *coll, UErrorCode *status) { if(ch < 0x100) { CE = coll->latinOneMapping[ch]; } else { - CE = UTRIE_GET32_FROM_LEAD(coll->mapping, ch); + CE = UTRIE_GET32_FROM_LEAD(&coll->mapping, ch); if(CE == UCOL_NOT_FOUND && coll->UCA) { - CE = UTRIE_GET32_FROM_LEAD(coll->UCA->mapping, ch); + CE = UTRIE_GET32_FROM_LEAD(&coll->UCA->mapping, ch); } } if(CE < UCOL_NOT_FOUND) { @@ -7032,8 +6444,7 @@ ucol_setUpLatinOne(UCollator *coll, UErrorCode *status) { { if((CE & 0x00FFF000) != 0) { *status = U_UNSUPPORTED_ERROR; - coll->latinOneFailed = TRUE; - return FALSE; + goto cleanup_after_failure; } const UChar *UCharOffset = (UChar *)coll->image+getContractOffset(CE); @@ -7089,90 +6500,91 @@ ucol_setUpLatinOne(UCollator *coll, UErrorCode *status) { primShift = 24; secShift = 24; terShift = 24; if(contractionOffset == coll->latinOneTableLen) { // we need to reallocate if(!ucol_resizeLatinOneTable(coll, 2*coll->latinOneTableLen, status)) { - coll->latinOneFailed = TRUE; - return FALSE; + goto cleanup_after_failure; } } } while(*UCharOffset != 0xFFFF); } break; default: - coll->latinOneFailed = TRUE; - result = FALSE; - break; + goto cleanup_after_failure; } } } - ucol_closeElements(it); // compact table if(contractionOffset < coll->latinOneTableLen) { if(!ucol_resizeLatinOneTable(coll, contractionOffset, status)) { - coll->latinOneFailed = TRUE; - return FALSE; + goto cleanup_after_failure; } } + ucol_closeElements(it); return result; + +cleanup_after_failure: + // status should already be set before arriving here. + coll->latinOneFailed = TRUE; + ucol_closeElements(it); + return FALSE; } void ucol_updateInternalState(UCollator *coll, UErrorCode *status) { - if(U_SUCCESS(*status)) { - if(coll->caseFirst == UCOL_UPPER_FIRST) { - coll->caseSwitch = UCOL_CASE_SWITCH; - } else { - coll->caseSwitch = UCOL_NO_CASE_SWITCH; - } + if(U_SUCCESS(*status)) { + if(coll->caseFirst == UCOL_UPPER_FIRST) { + coll->caseSwitch = UCOL_CASE_SWITCH; + } else { + coll->caseSwitch = UCOL_NO_CASE_SWITCH; + } - if(coll->caseLevel == UCOL_ON || coll->caseFirst == UCOL_OFF) { - coll->tertiaryMask = UCOL_REMOVE_CASE; - coll->tertiaryCommon = UCOL_COMMON3_NORMAL; - coll->tertiaryAddition = UCOL_FLAG_BIT_MASK_CASE_SW_OFF; - coll->tertiaryTop = UCOL_COMMON_TOP3_CASE_SW_OFF; - coll->tertiaryBottom = UCOL_COMMON_BOT3; - } else { - coll->tertiaryMask = UCOL_KEEP_CASE; - coll->tertiaryAddition = UCOL_FLAG_BIT_MASK_CASE_SW_ON; - if(coll->caseFirst == UCOL_UPPER_FIRST) { - coll->tertiaryCommon = UCOL_COMMON3_UPPERFIRST; - coll->tertiaryTop = UCOL_COMMON_TOP3_CASE_SW_UPPER; - coll->tertiaryBottom = UCOL_COMMON_BOTTOM3_CASE_SW_UPPER; - } else { - coll->tertiaryCommon = UCOL_COMMON3_NORMAL; - coll->tertiaryTop = UCOL_COMMON_TOP3_CASE_SW_LOWER; - coll->tertiaryBottom = UCOL_COMMON_BOTTOM3_CASE_SW_LOWER; - } - } + if(coll->caseLevel == UCOL_ON || coll->caseFirst == UCOL_OFF) { + coll->tertiaryMask = UCOL_REMOVE_CASE; + coll->tertiaryCommon = UCOL_COMMON3_NORMAL; + coll->tertiaryAddition = UCOL_FLAG_BIT_MASK_CASE_SW_OFF; + coll->tertiaryTop = UCOL_COMMON_TOP3_CASE_SW_OFF; + coll->tertiaryBottom = UCOL_COMMON_BOT3; + } else { + coll->tertiaryMask = UCOL_KEEP_CASE; + coll->tertiaryAddition = UCOL_FLAG_BIT_MASK_CASE_SW_ON; + if(coll->caseFirst == UCOL_UPPER_FIRST) { + coll->tertiaryCommon = UCOL_COMMON3_UPPERFIRST; + coll->tertiaryTop = UCOL_COMMON_TOP3_CASE_SW_UPPER; + coll->tertiaryBottom = UCOL_COMMON_BOTTOM3_CASE_SW_UPPER; + } else { + coll->tertiaryCommon = UCOL_COMMON3_NORMAL; + coll->tertiaryTop = UCOL_COMMON_TOP3_CASE_SW_LOWER; + coll->tertiaryBottom = UCOL_COMMON_BOTTOM3_CASE_SW_LOWER; + } + } - /* Set the compression values */ - uint8_t tertiaryTotal = (uint8_t)(coll->tertiaryTop - UCOL_COMMON_BOT3-1); - coll->tertiaryTopCount = (uint8_t)(UCOL_PROPORTION3*tertiaryTotal); /* we multilply double with int, but need only int */ - coll->tertiaryBottomCount = (uint8_t)(tertiaryTotal - coll->tertiaryTopCount); + /* Set the compression values */ + uint8_t tertiaryTotal = (uint8_t)(coll->tertiaryTop - UCOL_COMMON_BOT3-1); + coll->tertiaryTopCount = (uint8_t)(UCOL_PROPORTION3*tertiaryTotal); /* we multilply double with int, but need only int */ + coll->tertiaryBottomCount = (uint8_t)(tertiaryTotal - coll->tertiaryTopCount); - if(coll->caseLevel == UCOL_OFF && coll->strength == UCOL_TERTIARY - && coll->frenchCollation == UCOL_OFF && coll->alternateHandling == UCOL_NON_IGNORABLE) { - coll->sortKeyGen = ucol_calcSortKeySimpleTertiary; - } else { - coll->sortKeyGen = ucol_calcSortKey; - } - if(coll->caseLevel == UCOL_OFF && coll->strength <= UCOL_TERTIARY && coll->numericCollation == UCOL_OFF - && coll->alternateHandling == UCOL_NON_IGNORABLE && !coll->latinOneFailed) { - if(coll->latinOneCEs == NULL || coll->latinOneRegenTable) { - if(ucol_setUpLatinOne(coll, status)) { // if we succeed in building latin1 table, we'll use it - //fprintf(stderr, "F"); - coll->latinOneUse = TRUE; - } else { - coll->latinOneUse = FALSE; - } - if(*status == U_UNSUPPORTED_ERROR) { - *status = U_ZERO_ERROR; - } - } else { // latin1Table exists and it doesn't need to be regenerated, just use it - coll->latinOneUse = TRUE; - } + if(coll->caseLevel == UCOL_OFF && coll->strength == UCOL_TERTIARY + && coll->frenchCollation == UCOL_OFF && coll->alternateHandling == UCOL_NON_IGNORABLE) { + coll->sortKeyGen = ucol_calcSortKeySimpleTertiary; + } else { + coll->sortKeyGen = ucol_calcSortKey; + } + if(coll->caseLevel == UCOL_OFF && coll->strength <= UCOL_TERTIARY && coll->numericCollation == UCOL_OFF + && coll->alternateHandling == UCOL_NON_IGNORABLE && !coll->latinOneFailed) { + if(coll->latinOneCEs == NULL || coll->latinOneRegenTable) { + if(ucol_setUpLatinOne(coll, status)) { // if we succeed in building latin1 table, we'll use it + //fprintf(stderr, "F"); + coll->latinOneUse = TRUE; } else { coll->latinOneUse = FALSE; } + if(*status == U_UNSUPPORTED_ERROR) { + *status = U_ZERO_ERROR; + } + } else { // latin1Table exists and it doesn't need to be regenerated, just use it + coll->latinOneUse = TRUE; } - + } else { + coll->latinOneUse = FALSE; + } + } } U_CAPI uint32_t U_EXPORT2 @@ -7417,204 +6829,6 @@ ucol_getStrength(const UCollator *coll) /* there are new APIs and some compatibility APIs */ /****************************************************************************/ -U_CAPI UCollator* U_EXPORT2 -ucol_safeClone(const UCollator *coll, void *stackBuffer, int32_t * pBufferSize, UErrorCode *status) -{ - UCollator * localCollator; - int32_t bufferSizeNeeded = (int32_t)sizeof(UCollator); - char *stackBufferChars = (char *)stackBuffer; - - if (status == NULL || U_FAILURE(*status)){ - return 0; - } - if ((stackBuffer && !pBufferSize) || !coll){ - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - /* Pointers on 64-bit platforms need to be aligned - * on a 64-bit boundry in memory. - */ - if (U_ALIGNMENT_OFFSET(stackBuffer) != 0) { - int32_t offsetUp = (int32_t)U_ALIGNMENT_OFFSET_UP(stackBufferChars); - *pBufferSize -= offsetUp; - stackBufferChars += offsetUp; - } - stackBuffer = (void *)stackBufferChars; - - if (stackBuffer && *pBufferSize <= 0){ /* 'preflighting' request - set needed size into *pBufferSize */ - *pBufferSize = bufferSizeNeeded; - return 0; - } - if (!stackBuffer || *pBufferSize < bufferSizeNeeded) { - /* allocate one here...*/ - int32_t length; - const UChar * rules = ucol_getRules(coll, &length); - - localCollator = ucol_openRules(rules, - length, - ucol_getAttribute(coll, UCOL_NORMALIZATION_MODE, status), - ucol_getStrength(coll), - NULL, - status); - if (U_SUCCESS(*status)) - { - *status = U_SAFECLONE_ALLOCATED_WARNING; - } - } else { - localCollator = (UCollator *)stackBuffer; - uprv_memcpy(localCollator, coll, sizeof(UCollator)); - localCollator->freeOnClose = FALSE; - localCollator->requestedLocale = NULL; // zero copies of pointers - localCollator->validLocale = NULL; - } - return localCollator; -} - -U_CAPI int32_t U_EXPORT2 -ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int32_t bufferLen) { - UErrorCode status = U_ZERO_ERROR; - int32_t len = 0; - int32_t UCAlen = 0; - const UChar* ucaRules = 0; - const UChar *rules = ucol_getRules(coll, &len); - if(delta == UCOL_FULL_RULES) { - /* take the UCA rules and append real rules at the end */ - /* UCA rules will be probably coming from the root RB */ - ucaRules = ures_getStringByKey(coll->rb,"%%UCARULES",&UCAlen,&status); - /* - UResourceBundle* cresb = ures_getByKeyWithFallback(coll->rb, "collations", NULL, &status); - UResourceBundle* uca = ures_getByKeyWithFallback(cresb, "UCA", NULL, &status); - ucaRules = ures_getStringByKey(uca,"Sequence",&UCAlen,&status); - ures_close(uca); - ures_close(cresb); - */ - } - if(U_FAILURE(status)) { - return 0; - } - if(buffer!=0 && bufferLen>0){ - *buffer=0; - if(UCAlen > 0) { - u_memcpy(buffer, ucaRules, uprv_min(UCAlen, bufferLen)); - } - if(len > 0 && bufferLen > UCAlen) { - u_memcpy(buffer+UCAlen, rules, uprv_min(len, bufferLen-UCAlen)); - } - } - return u_terminateUChars(buffer, bufferLen, len+UCAlen, &status); -} - -static const UChar _NUL = 0; - -U_CAPI const UChar* U_EXPORT2 -ucol_getRules( const UCollator *coll, - int32_t *length) -{ - if(coll->rules != NULL) { - *length = coll->rulesLength; - return coll->rules; - } else { - UErrorCode status = U_ZERO_ERROR; - if(coll->elements != NULL) { - if(U_SUCCESS(status)) { - /*Semantic const */ - ((UCollator *)coll)->rules = ures_getStringByKey(coll->elements, "Sequence", length, &status); - ((UCollator *)coll)->rulesLength = *length; - ((UCollator *)coll)->freeRulesOnClose = FALSE; - return coll->rules; - } - } - *length = 0; - return &_NUL; - } -} - -U_CAPI int32_t U_EXPORT2 -ucol_getDisplayName( const char *objLoc, - const char *dispLoc, - UChar *result, - int32_t resultLength, - UErrorCode *status) -{ - - if(U_FAILURE(*status)) return -1; - UnicodeString dst; - if(!(result==NULL && resultLength==0)) { - // NULL destination for pure preflighting: empty dummy string - // otherwise, alias the destination buffer - dst.setTo(result, 0, resultLength); - } - Collator::getDisplayName(Locale(objLoc), Locale(dispLoc), dst); - return dst.extract(result, resultLength, *status); -} - -U_CAPI const char* U_EXPORT2 -ucol_getAvailable(int32_t index) -{ - return uloc_getAvailable(index); -} - -U_CAPI int32_t U_EXPORT2 -ucol_countAvailable() -{ - return uloc_countAvailable(); -} - -#if !UCONFIG_NO_SERVICE -U_CAPI UEnumeration* U_EXPORT2 -ucol_openAvailableLocales(UErrorCode *status) { - // This is a wrapper over Collator::getAvailableLocales() - if (U_FAILURE(*status)) { - return NULL; - } - StringEnumeration *s = Collator::getAvailableLocales(); - if (s == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - return uenum_openStringEnumeration(s, status); -} -#endif - -// Note: KEYWORDS[0] != RESOURCE_NAME - alan - -static const char* RESOURCE_NAME = "collations"; - -static const char* KEYWORDS[] = { "collation" }; - -#define KEYWORD_COUNT (sizeof(KEYWORDS)/sizeof(KEYWORDS[0])) - -U_CAPI UEnumeration* U_EXPORT2 -ucol_getKeywords(UErrorCode *status) { - UEnumeration *result = NULL; - if (U_SUCCESS(*status)) { - return uenum_openCharStringsEnumeration(KEYWORDS, KEYWORD_COUNT, status); - } - return result; -} - -U_CAPI UEnumeration* U_EXPORT2 -ucol_getKeywordValues(const char *keyword, UErrorCode *status) { - // hard-coded to accept exactly one collation keyword - // modify if additional collation keyword is added later - if (U_SUCCESS(*status) && - keyword==NULL || uprv_strcmp(keyword, KEYWORDS[0])!=0) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - return ures_getKeywordValues(U_ICUDATA_COLL, RESOURCE_NAME, status); -} - -U_CAPI int32_t U_EXPORT2 -ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity, - const char* keyword, const char* locale, - UBool* isAvailable, UErrorCode* status) { - // N.B.: Resource name is "collations" but keyword is "collation" - return ures_getFunctionalEquivalent(result, resultCapacity, U_ICUDATA_COLL, - "collations", keyword, locale, - isAvailable, TRUE, status); -} - U_CAPI void U_EXPORT2 ucol_getVersion(const UCollator* coll, UVersionInfo versionInfo) @@ -7659,9 +6873,7 @@ ucol_isTailored(const UCollator *coll, const UChar u, UErrorCode *status) { return FALSE; } } else { /* regular */ - /*CE = ucmpe32_get(coll->mapping, u);*/ - CE = UTRIE_GET32_FROM_LEAD(coll->mapping, u); - + CE = UTRIE_GET32_FROM_LEAD(&coll->mapping, u); } if(isContraction(CE)) { @@ -7845,7 +7057,7 @@ static inline void UCOL_INIT_CEBUF(ucol_CEBuf *b) { (b)->buf = (b)->pos = (b)->localArray; (b)->endp = (b)->buf + UCOL_CEBUF_SIZE; -}; +} static void ucol_CEBuf_Expand(ucol_CEBuf *b, collIterate *ci) { @@ -7874,12 +7086,13 @@ inline void UCOL_CEBUF_PUT(ucol_CEBuf *b, uint32_t ce, collIterate *ci) { ucol_CEBuf_Expand(b, ci); } *(b)->pos++ = ce; -}; +} /* This is a trick string compare function that goes in and uses sortkeys to compare */ /* It is used when compare gets in trouble and needs to bail out */ static UCollationResult ucol_compareUsingSortKeys(collIterate *sColl, - collIterate *tColl) + collIterate *tColl, + UErrorCode *status) { uint8_t sourceKey[UCOL_MAX_BUFFER], targetKey[UCOL_MAX_BUFFER]; uint8_t *sourceKeyP = sourceKey; @@ -7888,31 +7101,32 @@ static UCollationResult ucol_compareUsingSortKeys(collIterate *sColl, const UCollator *coll = sColl->coll; UChar *source = NULL; UChar *target = NULL; + int32_t result = UCOL_EQUAL; UChar sStackBuf[256], tStackBuf[256]; int32_t sourceLength = (sColl->flags&UCOL_ITER_HASLEN)?(sColl->endp-sColl->string):-1; int32_t targetLength = (tColl->flags&UCOL_ITER_HASLEN)?(tColl->endp-tColl->string):-1; // TODO: Handle long strings. Do the same in ucol_checkIdent. if(sColl->flags & UCOL_USE_ITERATOR) { - sColl->iterator->move(sColl->iterator, 0, UITER_START); - tColl->iterator->move(tColl->iterator, 0, UITER_START); - source = sStackBuf; - UChar *sBufp = source; - target = tStackBuf; - UChar *tBufp = target; - while(sColl->iterator->hasNext(sColl->iterator)) { - *sBufp++ = (UChar)sColl->iterator->next(sColl->iterator); - } - while(tColl->iterator->hasNext(tColl->iterator)) { - *tBufp++ = (UChar)tColl->iterator->next(tColl->iterator); - } - sourceLength = sBufp - source; - targetLength = tBufp - target; + sColl->iterator->move(sColl->iterator, 0, UITER_START); + tColl->iterator->move(tColl->iterator, 0, UITER_START); + source = sStackBuf; + UChar *sBufp = source; + target = tStackBuf; + UChar *tBufp = target; + while(sColl->iterator->hasNext(sColl->iterator)) { + *sBufp++ = (UChar)sColl->iterator->next(sColl->iterator); + } + while(tColl->iterator->hasNext(tColl->iterator)) { + *tBufp++ = (UChar)tColl->iterator->next(tColl->iterator); + } + sourceLength = sBufp - source; + targetLength = tBufp - target; } else { // no iterators - sourceLength = (sColl->flags&UCOL_ITER_HASLEN)?(sColl->endp-sColl->string):-1; - targetLength = (tColl->flags&UCOL_ITER_HASLEN)?(tColl->endp-tColl->string):-1; - source = sColl->string; - target = tColl->string; + sourceLength = (sColl->flags&UCOL_ITER_HASLEN)?(sColl->endp-sColl->string):-1; + targetLength = (tColl->flags&UCOL_ITER_HASLEN)?(tColl->endp-tColl->string):-1; + source = sColl->string; + target = tColl->string; } @@ -7920,26 +7134,31 @@ static UCollationResult ucol_compareUsingSortKeys(collIterate *sColl, sourceKeyLen = ucol_getSortKey(coll, source, sourceLength, sourceKeyP, sourceKeyLen); if(sourceKeyLen > UCOL_MAX_BUFFER) { sourceKeyP = (uint8_t*)uprv_malloc(sourceKeyLen*sizeof(uint8_t)); - if(sourceKeyP != NULL) { - sourceKeyLen = ucol_getSortKey(coll, source, sourceLength, sourceKeyP, sourceKeyLen); + if(sourceKeyP == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup_and_do_compare; } + sourceKeyLen = ucol_getSortKey(coll, source, sourceLength, sourceKeyP, sourceKeyLen); } targetKeyLen = ucol_getSortKey(coll, target, targetLength, targetKeyP, targetKeyLen); if(targetKeyLen > UCOL_MAX_BUFFER) { targetKeyP = (uint8_t*)uprv_malloc(targetKeyLen*sizeof(uint8_t)); - if(targetKeyP != NULL) { - targetKeyLen = ucol_getSortKey(coll, target, targetLength, targetKeyP, targetKeyLen); + if(targetKeyP == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup_and_do_compare; } + targetKeyLen = ucol_getSortKey(coll, target, targetLength, targetKeyP, targetKeyLen); } - int32_t result = uprv_strcmp((const char*)sourceKeyP, (const char*)targetKeyP); + result = uprv_strcmp((const char*)sourceKeyP, (const char*)targetKeyP); - if(sourceKeyP != sourceKey) { +cleanup_and_do_compare: + if(sourceKeyP != NULL && sourceKeyP != sourceKey) { uprv_free(sourceKeyP); } - if(targetKeyP != targetKey) { + if(targetKeyP != NULL && targetKeyP != targetKey) { uprv_free(targetKeyP); } @@ -7982,7 +7201,7 @@ ucol_strcollRegular( collIterate *sColl, collIterate *tColl, UBool doHiragana = (coll->hiraganaQ == UCOL_ON) && checkQuad; if(doHiragana && shifted) { - return (ucol_compareUsingSortKeys(sColl, tColl)); + return (ucol_compareUsingSortKeys(sColl, tColl, status)); } uint8_t caseSwitch = coll->caseSwitch; uint8_t tertiaryMask = coll->tertiaryMask; @@ -8265,8 +7484,15 @@ ucol_strcollRegular( collIterate *sColl, collIterate *tColl, for(;;) { while((secS & UCOL_REMOVE_CASE) == 0) { if(!isContinuation(*sCE++)) { - secS =*(sCE-1) & UCOL_TERT_CASE_MASK; - secS ^= caseSwitch; + secS =*(sCE-1); + if(((secS & UCOL_PRIMARYMASK) != 0) || strength > UCOL_PRIMARY) { + // primary ignorables should not be considered on the case level when the strength is primary + // otherwise, the CEs stop being well-formed + secS &= UCOL_TERT_CASE_MASK; + secS ^= caseSwitch; + } else { + secS = 0; + } } else { secS = 0; } @@ -8274,8 +7500,15 @@ ucol_strcollRegular( collIterate *sColl, collIterate *tColl, while((secT & UCOL_REMOVE_CASE) == 0) { if(!isContinuation(*tCE++)) { - secT = *(tCE-1) & UCOL_TERT_CASE_MASK; - secT ^= caseSwitch; + secT = *(tCE-1); + if(((secT & UCOL_PRIMARYMASK) != 0) || strength > UCOL_PRIMARY) { + // primary ignorables should not be considered on the case level when the strength is primary + // otherwise, the CEs stop being well-formed + secT &= UCOL_TERT_CASE_MASK; + secT ^= caseSwitch; + } else { + secT = 0; + } } else { secT = 0; } @@ -8460,7 +7693,7 @@ ucol_getLatinOneContraction(const UCollator *coll, int32_t strength, return UCOL_BAIL_OUT_CE; } // skip completely ignorables - uint32_t isZeroCE = UTRIE_GET32_FROM_LEAD(coll->mapping, schar); + uint32_t isZeroCE = UTRIE_GET32_FROM_LEAD(&coll->mapping, schar); if(isZeroCE == 0) { // we have to ignore completely ignorables (*index)++; continue; @@ -8496,7 +7729,7 @@ ucol_strcollUseLatin1( const UCollator *coll, UChar sChar = 0, tChar = 0; uint32_t sOrder=0, tOrder=0; - UBool endOfSource = FALSE, endOfTarget = FALSE; + UBool endOfSource = FALSE; uint32_t *elements = coll->latinOneCEs; @@ -8620,7 +7853,7 @@ endOfPrimLoop: if(strength >= UCOL_SECONDARY) { // adjust the table beggining elements += coll->latinOneTableLen; - endOfSource = FALSE; endOfTarget = FALSE; + endOfSource = FALSE; if(coll->frenchCollation == UCOL_OFF) { // non French // This loop is a simplified copy of primary loop @@ -8734,7 +7967,7 @@ endOfSecLoop: // tertiary loop is the same as secondary (except no French) elements += coll->latinOneTableLen; sIndex = 0; tIndex = 0; - endOfSource = FALSE; endOfTarget = FALSE; + endOfSource = FALSE; for(;;) { while(sOrder==0) { if(sIndex==sLen) { @@ -8846,9 +8079,6 @@ ucol_strcollIter( const UCollator *coll, while((sChar = sColl.iterator->next(sColl.iterator)) == (tChar = tColl.iterator->next(tColl.iterator))) { - if(UCOL_ISTHAIPREVOWEL(sChar)) { - break; - } if(sChar == U_SENTINEL) { result = UCOL_EQUAL; goto end_compare; @@ -8943,9 +8173,6 @@ ucol_strcoll( const UCollator *coll, if ( *pSrc != *pTarg || *pSrc == 0) { break; } - if(UCOL_ISTHAIPREVOWEL(*pSrc)) { - break; - } pSrc++; pTarg++; } @@ -8979,9 +8206,6 @@ ucol_strcoll( const UCollator *coll, if (*pSrc != *pTarg) { break; } - if(UCOL_ISTHAIPREVOWEL(*pSrc)) { // they are the same here, so any will do - break; - } pSrc++; pTarg++; } @@ -9073,206 +8297,6 @@ ucol_equal( const UCollator *coll, == UCOL_EQUAL); } -/* returns the locale name the collation data comes from */ -U_CAPI const char * U_EXPORT2 -ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status) { - return ucol_getLocaleByType(coll, type, status); -} - -U_CAPI const char * U_EXPORT2 -ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status) { - const char *result = NULL; - if(status == NULL || U_FAILURE(*status)) { - return NULL; - } - UTRACE_ENTRY(UTRACE_UCOL_GETLOCALE); - UTRACE_DATA1(UTRACE_INFO, "coll=%p", coll); - - switch(type) { - case ULOC_ACTUAL_LOCALE: - // validLocale is set only if service registration has explicitly set the - // requested and valid locales. if this is the case, the actual locale - // is considered to be the valid locale. - if (coll->validLocale != NULL) { - result = coll->validLocale; - } else if(coll->elements != NULL) { - result = ures_getLocale(coll->elements, status); - } - break; - case ULOC_VALID_LOCALE: - if (coll->validLocale != NULL) { - result = coll->validLocale; - } else if(coll->rb != NULL) { - result = ures_getLocale(coll->rb, status); - } - break; - case ULOC_REQUESTED_LOCALE: - result = coll->requestedLocale; - break; - default: - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - UTRACE_DATA1(UTRACE_INFO, "result = %s", result); - UTRACE_EXIT_STATUS(*status); - return result; -} - -U_CAPI USet * U_EXPORT2 -ucol_getTailoredSet(const UCollator *coll, UErrorCode *status) -{ - if(status == NULL || U_FAILURE(*status)) { - return NULL; - } - if(coll == NULL || coll->UCA == NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - } - UParseError parseError; - UColTokenParser src; - int32_t rulesLen = 0; - const UChar *rules = ucol_getRules(coll, &rulesLen); - const UChar *current = NULL; - UBool startOfRules = TRUE; - // we internally use the C++ class, for the following reasons: - // 1. we need to utilize canonical iterator, which is a C++ only class - // 2. canonical iterator returns UnicodeStrings - USet cannot take them - // 3. USet is internally really UnicodeSet, C is just a wrapper - UnicodeSet *tailored = new UnicodeSet(); - UnicodeString pattern; - UnicodeString empty; - CanonicalIterator it(empty, *status); - - - // The idea is to tokenize the rule set. For each non-reset token, - // we add all the canonicaly equivalent FCD sequences - ucol_tok_initTokenList(&src, rules, rulesLen, coll->UCA, status); - while ((current = ucol_tok_parseNextToken(&src, startOfRules, &parseError, status)) != NULL) { - startOfRules = FALSE; - if(src.parsedToken.strength != UCOL_TOK_RESET) { - const UChar *stuff = src.source+(src.parsedToken.charsOffset); - it.setSource(UnicodeString(stuff, src.parsedToken.charsLen), *status); - pattern = it.next(); - while(!pattern.isBogus()) { - if(Normalizer::quickCheck(pattern, UNORM_FCD, *status) != UNORM_NO) { - tailored->add(pattern); - } - pattern = it.next(); - } - } - } - ucol_tok_closeTokenList(&src); - return (USet *)tailored; -} - -U_CAPI UBool U_EXPORT2 -ucol_equals(const UCollator *source, const UCollator *target) { - UErrorCode status = U_ZERO_ERROR; - // if pointers are equal, collators are equal - if(source == target) { - return TRUE; - } - int32_t i = 0, j = 0; - // if any of attributes are different, collators are not equal - for(i = 0; i < UCOL_ATTRIBUTE_COUNT; i++) { - if(ucol_getAttribute(source, (UColAttribute)i, &status) != ucol_getAttribute(target, (UColAttribute)i, &status) || U_FAILURE(status)) { - return FALSE; - } - } - - int32_t sourceRulesLen = 0, targetRulesLen = 0; - const UChar *sourceRules = ucol_getRules(source, &sourceRulesLen); - const UChar *targetRules = ucol_getRules(target, &targetRulesLen); - - if(sourceRulesLen == targetRulesLen && u_strncmp(sourceRules, targetRules, sourceRulesLen) == 0) { - // all the attributes are equal and the rules are equal - collators are equal - return(TRUE); - } - // hard part, need to construct tree from rules and see if they yield the same tailoring - UBool result = TRUE; - UParseError parseError; - UColTokenParser sourceParser, targetParser; - int32_t sourceListLen = 0, targetListLen = 0; - ucol_tok_initTokenList(&sourceParser, sourceRules, sourceRulesLen, source->UCA, &status); - ucol_tok_initTokenList(&targetParser, targetRules, targetRulesLen, target->UCA, &status); - sourceListLen = ucol_tok_assembleTokenList(&sourceParser, &parseError, &status); - targetListLen = ucol_tok_assembleTokenList(&targetParser, &parseError, &status); - - if(sourceListLen != targetListLen) { - // different number of resets - result = FALSE; - } else { - UColToken *sourceReset = NULL, *targetReset = NULL; - UChar *sourceResetString = NULL, *targetResetString = NULL; - int32_t sourceStringLen = 0, targetStringLen = 0; - for(i = 0; i < sourceListLen; i++) { - sourceReset = sourceParser.lh[i].reset; - sourceResetString = sourceParser.source+(sourceReset->source & 0xFFFFFF); - sourceStringLen = sourceReset->source >> 24; - for(j = 0; j < sourceListLen; j++) { - targetReset = targetParser.lh[j].reset; - targetResetString = targetParser.source+(targetReset->source & 0xFFFFFF); - targetStringLen = targetReset->source >> 24; - if(sourceStringLen == targetStringLen && (u_strncmp(sourceResetString, targetResetString, sourceStringLen) == 0)) { - sourceReset = sourceParser.lh[i].first; - targetReset = targetParser.lh[j].first; - while(sourceReset != NULL && targetReset != NULL) { - sourceResetString = sourceParser.source+(sourceReset->source & 0xFFFFFF); - sourceStringLen = sourceReset->source >> 24; - targetResetString = targetParser.source+(targetReset->source & 0xFFFFFF); - targetStringLen = targetReset->source >> 24; - if(sourceStringLen != targetStringLen || (u_strncmp(sourceResetString, targetResetString, sourceStringLen) != 0)) { - result = FALSE; - goto returnResult; - } - // probably also need to check the expansions - if(sourceReset->expansion) { - if(!targetReset->expansion) { - result = FALSE; - goto returnResult; - } else { - // compare expansions - sourceResetString = sourceParser.source+(sourceReset->expansion& 0xFFFFFF); - sourceStringLen = sourceReset->expansion >> 24; - targetResetString = targetParser.source+(targetReset->expansion & 0xFFFFFF); - targetStringLen = targetReset->expansion >> 24; - if(sourceStringLen != targetStringLen || (u_strncmp(sourceResetString, targetResetString, sourceStringLen) != 0)) { - result = FALSE; - goto returnResult; - } - } - } else { - if(targetReset->expansion) { - result = FALSE; - goto returnResult; - } - } - sourceReset = sourceReset->next; - targetReset = targetReset->next; - } - if(sourceReset != targetReset) { // at least one is not NULL - // there are more tailored elements in one list - result = FALSE; - goto returnResult; - } - - - break; - } - } - // couldn't find the reset anchor, so the collators are not equal - if(j == sourceListLen) { - result = FALSE; - goto returnResult; - } - } - } - -returnResult: - ucol_tok_closeTokenList(&sourceParser); - ucol_tok_closeTokenList(&targetParser); - return result; - -} - U_CAPI void U_EXPORT2 ucol_getUCAVersion(const UCollator* coll, UVersionInfo info) { if(coll && coll->UCA) { @@ -9289,10 +8313,16 @@ ucol_cloneBinary(const UCollator *coll, if(U_FAILURE(*status)) { return length; } + if(capacity < 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return length; + } if(coll->hasRealData == TRUE) { length = coll->image->size; if(length <= capacity) { uprv_memcpy(buffer, coll->image, length); + } else { + *status = U_BUFFER_OVERFLOW_ERROR; } } else { length = (int32_t)(paddedsize(sizeof(UCATableHeader))+paddedsize(sizeof(UColOptionSet))); @@ -9328,62 +8358,18 @@ ucol_cloneBinary(const UCollator *coll, /* copy the collator options */ uprv_memcpy(buffer+paddedsize(sizeof(UCATableHeader)), coll->options, sizeof(UColOptionSet)); + } else { + *status = U_BUFFER_OVERFLOW_ERROR; } } return length; } -U_CAPI UCollator* U_EXPORT2 -ucol_openBinary(const uint8_t *bin, int32_t length, - const UCollator *base, - UErrorCode *status) +U_CAPI void U_EXPORT2 +ucol_forgetUCA(void) { - UCollator *result = NULL; - if(U_FAILURE(*status)){ - return NULL; - } - if(base == NULL) { - // we don't support null base yet - *status = U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - UCATableHeader *colData = (UCATableHeader *)bin; - // do we want version check here? We're trying to figure out whether collators are compatible - if(uprv_memcmp(colData->UCAVersion, base->image->UCAVersion, sizeof(UVersionInfo)) != 0 || - uprv_memcmp(colData->UCDVersion, base->image->UCDVersion, sizeof(UVersionInfo)) != 0 || - colData->version[0] != UCOL_BUILDER_VERSION) { - *status = U_COLLATOR_VERSION_MISMATCH; - return NULL; - } else { - if((uint32_t)length > (paddedsize(sizeof(UCATableHeader)) + paddedsize(sizeof(UColOptionSet)))) { - result = ucol_initCollator((const UCATableHeader *)bin, result, base, status); - if(U_FAILURE(*status)){ - return NULL; - } - result->hasRealData = TRUE; - } else { - if(base) { - result = ucol_initCollator(base->image, result, base, status); - ucol_setOptionsFromHeader(result, (UColOptionSet *)(bin+((const UCATableHeader *)bin)->options), status); - if(U_FAILURE(*status)){ - return NULL; - } - result->hasRealData = FALSE; - } else { - *status = U_USELESS_COLLATOR_ERROR; - return NULL; - } - } - result->freeImageOnClose = FALSE; - } - result->validLocale = NULL; - result->requestedLocale = NULL; - result->rules = NULL; - result->rulesLength = 0; - result->freeRulesOnClose = FALSE; - result->rb = NULL; - result->elements = NULL; - return result; + _staticUCA = NULL; + UCA_DATA_MEM = NULL; } #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/ucol_bld.cpp b/icuSources/i18n/ucol_bld.cpp index cfc5d6d3..1191a86b 100644 --- a/icuSources/i18n/ucol_bld.cpp +++ b/icuSources/i18n/ucol_bld.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -67,29 +67,73 @@ isAcceptableInvUCA(void * /*context*/, } U_CDECL_END +/* + * Takes two CEs (lead and continuation) and + * compares them as CEs should be compared: + * primary vs. primary, secondary vs. secondary + * tertiary vs. tertiary + */ +static int32_t compareCEs(uint32_t source0, uint32_t source1, uint32_t target0, uint32_t target1) { + uint32_t s1 = source0, s2, t1 = target0, t2; + if(isContinuation(source1)) { + s2 = source1; + } else { + s2 = 0; + } + if(isContinuation(target1)) { + t2 = target1; + } else { + t2 = 0; + } + + uint32_t s = 0, t = 0; + if(s1 == t1 && s2 == t2) { + return 0; + } + s = (s1 & 0xFFFF0000)|((s2 & 0xFFFF0000)>>16); + t = (t1 & 0xFFFF0000)|((t2 & 0xFFFF0000)>>16); + if(s < t) { + return -1; + } else if(s > t) { + return 1; + } else { + s = (s1 & 0x0000FF00) | (s2 & 0x0000FF00)>>8; + t = (t1 & 0x0000FF00) | (t2 & 0x0000FF00)>>8; + if(s < t) { + return -1; + } else if(s > t) { + return 1; + } else { + s = (s1 & 0x000000FF)<<8 | (s2 & 0x000000FF); + t = (t1 & 0x000000FF)<<8 | (t2 & 0x000000FF); + if(s < t) { + return -1; + } else { + return 1; + } + } + } +} + static int32_t ucol_inv_findCE(const UColTokenParser *src, uint32_t CE, uint32_t SecondCE) { uint32_t bottom = 0, top = src->invUCA->tableSize; uint32_t i = 0; uint32_t first = 0, second = 0; uint32_t *CETable = (uint32_t *)((uint8_t *)src->invUCA+src->invUCA->table); + int32_t res = 0; while(bottom < top-1) { i = (top+bottom)/2; first = *(CETable+3*i); second = *(CETable+3*i+1); - if(first > CE) { + res = compareCEs(first, second, CE, SecondCE); + if(res > 0) { top = i; - } else if(first < CE) { + } else if(res < 0) { bottom = i; } else { - if(second > SecondCE) { - top = i; - } else if(second < SecondCE) { - bottom = i; - } else { - break; - } + break; } } @@ -177,15 +221,20 @@ U_CAPI int32_t U_EXPORT2 ucol_inv_getPrevCE(const UColTokenParser *src, } U_CAPI uint32_t U_EXPORT2 ucol_getCEStrengthDifference(uint32_t CE, uint32_t contCE, - uint32_t prevCE, uint32_t prevContCE) { - uint32_t strength = UCOL_TERTIARY; - while(((prevCE & strengthMask[strength]) != (CE & strengthMask[strength]) - || (prevContCE & strengthMask[strength]) != (contCE & strengthMask[strength])) - && strength) { - strength--; + uint32_t prevCE, uint32_t prevContCE) +{ + if(prevCE == CE && prevContCE == contCE) { + return UCOL_IDENTICAL; + } + if((prevCE & strengthMask[UCOL_PRIMARY]) != (CE & strengthMask[UCOL_PRIMARY]) + || (prevContCE & strengthMask[UCOL_PRIMARY]) != (contCE & strengthMask[UCOL_PRIMARY])) { + return UCOL_PRIMARY; } - return strength; - + if((prevCE & strengthMask[UCOL_SECONDARY]) != (CE & strengthMask[UCOL_SECONDARY]) + || (prevContCE & strengthMask[UCOL_SECONDARY]) != (contCE & strengthMask[UCOL_SECONDARY])) { + return UCOL_SECONDARY; + } + return UCOL_TERTIARY; } @@ -284,7 +333,7 @@ U_CFUNC void ucol_inv_getGapPositions(UColTokenParser *src, UColTokListHeader *l //if(lh->baseCE >= PRIMARY_IMPLICIT_MIN && lh->baseCE < PRIMARY_IMPLICIT_MAX ) { /* implicits - */ lh->pos[0] = 0; t1 = lh->baseCE; - t2 = lh->baseContCE; + t2 = lh->baseContCE & UCOL_REMOVE_CONTINUATION; lh->gapsLo[0] = (t1 & UCOL_PRIMARYMASK) | (t2 & UCOL_PRIMARYMASK) >> 16; lh->gapsLo[1] = (t1 & UCOL_SECONDARYMASK) << 16 | (t2 & UCOL_SECONDARYMASK) << 8; lh->gapsLo[2] = (UCOL_TERTIARYORDER(t1)) << 24 | (UCOL_TERTIARYORDER(t2)) << 16; @@ -292,7 +341,7 @@ U_CFUNC void ucol_inv_getGapPositions(UColTokenParser *src, UColTokListHeader *l primaryCE = uprv_uca_getImplicitFromRaw(uprv_uca_getRawFromImplicit(primaryCE)+1); t1 = primaryCE & UCOL_PRIMARYMASK | 0x0505; - t2 = (primaryCE << 16) & UCOL_PRIMARYMASK | UCOL_CONTINUATION_MARKER; + t2 = (primaryCE << 16) & UCOL_PRIMARYMASK; // | UCOL_CONTINUATION_MARKER; lh->gapsHi[0] = (t1 & UCOL_PRIMARYMASK) | (t2 & UCOL_PRIMARYMASK) >> 16; lh->gapsHi[1] = (t1 & UCOL_SECONDARYMASK) << 16 | (t2 & UCOL_SECONDARYMASK) << 8; @@ -301,12 +350,12 @@ U_CFUNC void ucol_inv_getGapPositions(UColTokenParser *src, UColTokListHeader *l //} else if(lh->baseCE == UCOL_RESET_TOP_VALUE && lh->baseContCE == 0) { lh->pos[0] = 0; t1 = lh->baseCE; - t2 = lh->baseContCE; + t2 = lh->baseContCE&UCOL_REMOVE_CONTINUATION; lh->gapsLo[0] = (t1 & UCOL_PRIMARYMASK) | (t2 & UCOL_PRIMARYMASK) >> 16; lh->gapsLo[1] = (t1 & UCOL_SECONDARYMASK) << 16 | (t2 & UCOL_SECONDARYMASK) << 8; lh->gapsLo[2] = (UCOL_TERTIARYORDER(t1)) << 24 | (UCOL_TERTIARYORDER(t2)) << 16; t1 = lh->nextCE; - t2 = lh->nextContCE; + t2 = lh->nextContCE&UCOL_REMOVE_CONTINUATION; lh->gapsHi[0] = (t1 & UCOL_PRIMARYMASK) | (t2 & UCOL_PRIMARYMASK) >> 16; lh->gapsHi[1] = (t1 & UCOL_SECONDARYMASK) << 16 | (t2 & UCOL_SECONDARYMASK) << 8; lh->gapsHi[2] = (UCOL_TERTIARYORDER(t1)) << 24 | (UCOL_TERTIARYORDER(t2)) << 16; @@ -638,17 +687,19 @@ U_CFUNC void ucol_doCE(UColTokenParser *src, uint32_t *CEparts, UColToken *tok, // we want to set case bits here and now, not later. // Case bits handling - tok->CEs[0] &= 0xFFFFFF3F; // Clean the case bits field - int32_t cSize = (tok->source & 0xFF000000) >> 24; - UChar *cPoints = (tok->source & 0x00FFFFFF) + src->source; + if(tok->CEs[0] != 0) { // case bits should be set only for non-ignorables + tok->CEs[0] &= 0xFFFFFF3F; // Clean the case bits field + int32_t cSize = (tok->source & 0xFF000000) >> 24; + UChar *cPoints = (tok->source & 0x00FFFFFF) + src->source; - if(cSize > 1) { - // Do it manually - tok->CEs[0] |= ucol_uprv_getCaseBits(src->UCA, cPoints, cSize, status); - } else { - // Copy it from the UCA - uint32_t caseCE = ucol_getFirstCE(src->UCA, cPoints[0], status); - tok->CEs[0] |= (caseCE & 0xC0); + if(cSize > 1) { + // Do it manually + tok->CEs[0] |= ucol_uprv_getCaseBits(src->UCA, cPoints, cSize, status); + } else { + // Copy it from the UCA + uint32_t caseCE = ucol_getFirstCE(src->UCA, cPoints[0], status); + tok->CEs[0] |= (caseCE & 0xC0); + } } #if UCOL_DEBUG==2 @@ -857,13 +908,6 @@ U_CFUNC void ucol_createElements(UColTokenParser *src, tempUCATable *t, UColTokL el.cSize = (tok->source >> 24); uprv_memcpy(el.uchars, (tok->source & 0x00FFFFFF) + src->source, el.cSize*sizeof(UChar)); } - - if(UCOL_ISTHAIPREVOWEL(el.cPoints[0])) { - el.isThai = TRUE; - } else { - el.isThai = FALSE; - } - if(src->UCA != NULL) { for(i = 0; i<el.cSize; i++) { if(UCOL_ISJAMO(el.cPoints[i])) { @@ -872,44 +916,12 @@ U_CFUNC void ucol_createElements(UColTokenParser *src, tempUCATable *t, UColTokL } } -#if 0 - // we do case bits in doCE now, since we will mess up expansions otherwise. - // Case bits handling - el.CEs[0] &= 0xFFFFFF3F; // Clean the case bits field - if(el.cSize > 1) { - // Do it manually - el.CEs[0] |= ucol_uprv_getCaseBits(src->UCA, el.cPoints, el.cSize, status); - } else { - // Copy it from the UCA - uint32_t caseCE = ucol_getFirstCE(src->UCA, el.cPoints[0], status); - el.CEs[0] |= (caseCE & 0xC0); - } -#endif - /* and then, add it */ #if UCOL_DEBUG==2 fprintf(stderr, "Adding: %04X with %08X\n", el.cPoints[0], el.CEs[0]); #endif uprv_uca_addAnElement(t, &el, status); -#if 0 - if(el.cSize > 1) { // this is a contraction, we should check whether a composed form should also be included - UChar composed[256]; - uint32_t compLen = unorm_normalize(el.cPoints, el.cSize, UNORM_NFC, 0, composed, 256, status);; - - if(compLen != el.cSize || uprv_memcmp(composed, el.cPoints, el.cSize*sizeof(UChar))) { - // composed form of a contraction is different than the decomposed form! - // do it! -#ifdef UCOL_DEBUG - fprintf(stderr, "Adding composed for %04X->%04X\n", *element->cPoints, *composed); -#endif - el.cSize = compLen; - uprv_memcpy(el.cPoints, composed, el.cSize*sizeof(UChar)); - uprv_uca_addAnElement(t, &el, status); - } - } -#endif - #if UCOL_DEBUG_DUPLICATES if(*status != U_ZERO_ERROR) { fprintf(stderr, "replaced CE for %04X with CE for %04X\n", el.cPoints[0], tok->debugSource); @@ -1190,7 +1202,7 @@ UCATableHeader *ucol_assembleTailoringTable(UColTokenParser *src, UErrorCode *st } // Add completely ignorable elements - utrie_enum(t->UCA->mapping, NULL, _processUCACompleteIgnorables, t); + utrie_enum(&t->UCA->mapping, NULL, _processUCACompleteIgnorables, t); // canonical closure diff --git a/icuSources/i18n/ucol_bld.h b/icuSources/i18n/ucol_bld.h index a55bff83..67a28a36 100644 --- a/icuSources/i18n/ucol_bld.h +++ b/icuSources/i18n/ucol_bld.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,6 +28,7 @@ #include "unicode/utypes.h" #if !UCONFIG_NO_COLLATION +#if !UCONFIG_NO_COLLATION_BUILDER #include "ucol_imp.h" #include "ucol_tok.h" @@ -55,6 +56,7 @@ typedef struct { uint32_t fHigh; /*forbidden High */ } ucolCEGenerator; +#endif /* #if !UCONFIG_NO_COLLATION_BUILDER */ #endif /* #if !UCONFIG_NO_COLLATION */ #endif diff --git a/icuSources/i18n/ucol_cnt.cpp b/icuSources/i18n/ucol_cnt.cpp index 0e57a3bb..68e9cfb4 100644 --- a/icuSources/i18n/ucol_cnt.cpp +++ b/icuSources/i18n/ucol_cnt.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -26,8 +26,6 @@ #include "ucol_cnt.h" #include "cmemory.h" -U_NAMESPACE_BEGIN - static void uprv_growTable(ContractionTable *tbl, UErrorCode *status) { if(tbl->position == tbl->size) { uint32_t *newData = (uint32_t *)uprv_realloc(tbl->CEs, 2*tbl->size*sizeof(uint32_t)); @@ -55,15 +53,15 @@ uprv_cnttab_open(UNewTrie *mapping, UErrorCode *status) { } CntTable *tbl = (CntTable *)uprv_malloc(sizeof(CntTable)); if(tbl == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } tbl->mapping = mapping; tbl->elements = (ContractionTable **)uprv_malloc(INIT_EXP_TABLE_SIZE*sizeof(ContractionTable *)); if(tbl->elements == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(tbl); - return NULL; + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(tbl); + return NULL; } tbl->capacity = INIT_EXP_TABLE_SIZE; uprv_memset(tbl->elements, 0, INIT_EXP_TABLE_SIZE*sizeof(ContractionTable *)); @@ -79,22 +77,22 @@ uprv_cnttab_open(UNewTrie *mapping, UErrorCode *status) { static ContractionTable *addATableElement(CntTable *table, uint32_t *key, UErrorCode *status) { ContractionTable *el = (ContractionTable *)uprv_malloc(sizeof(ContractionTable)); if(el == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } el->CEs = (uint32_t *)uprv_malloc(INIT_EXP_TABLE_SIZE*sizeof(uint32_t)); if(el->CEs == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(el); - return NULL; + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(el); + return NULL; } el->codePoints = (UChar *)uprv_malloc(INIT_EXP_TABLE_SIZE*sizeof(UChar)); if(el->codePoints == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(el->CEs); - uprv_free(el); - return NULL; + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(el->CEs); + uprv_free(el); + return NULL; } el->position = 0; @@ -111,20 +109,20 @@ static ContractionTable *addATableElement(CntTable *table, uint32_t *key, UError if(table->size == table->capacity) { ContractionTable **newElements = (ContractionTable **)uprv_malloc(table->capacity*2*sizeof(ContractionTable *)); // do realloc -/* table->elements = (ContractionTable **)realloc(table->elements, table->capacity*2*sizeof(ContractionTable *));*/ + /* table->elements = (ContractionTable **)realloc(table->elements, table->capacity*2*sizeof(ContractionTable *));*/ if(newElements == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(el->codePoints); - uprv_free(el->CEs); - uprv_free(el); - return NULL; + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(el->codePoints); + uprv_free(el->CEs); + uprv_free(el); + return NULL; } else { - ContractionTable **oldElements = table->elements; - uprv_memcpy(newElements, oldElements, table->capacity*sizeof(ContractionTable *)); - uprv_memset(newElements+table->capacity, 0, table->capacity*sizeof(ContractionTable *)); - table->capacity *= 2; - table->elements = newElements; - uprv_free(oldElements); + ContractionTable **oldElements = table->elements; + uprv_memcpy(newElements, oldElements, table->capacity*sizeof(ContractionTable *)); + uprv_memset(newElements+table->capacity, 0, table->capacity*sizeof(ContractionTable *)); + table->capacity *= 2; + table->elements = newElements; + uprv_free(oldElements); } } @@ -145,8 +143,8 @@ uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *sta } table->offsets = (int32_t *)uprv_malloc(table->size*sizeof(int32_t)); if(table->offsets == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return 0; + *status = U_MEMORY_ALLOCATION_ERROR; + return 0; } @@ -162,10 +160,10 @@ uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *sta } table->CEs = (uint32_t *)uprv_malloc(table->position*sizeof(uint32_t)); if(table->CEs == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(table->offsets); - table->offsets = NULL; - return 0; + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(table->offsets); + table->offsets = NULL; + return 0; } uprv_memset(table->CEs, '?', table->position*sizeof(uint32_t)); @@ -174,12 +172,12 @@ uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *sta } table->codePoints = (UChar *)uprv_malloc(table->position*sizeof(UChar)); if(table->codePoints == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(table->offsets); - table->offsets = NULL; - uprv_free(table->CEs); - table->CEs = NULL; - return 0; + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(table->offsets); + table->offsets = NULL; + uprv_free(table->CEs); + table->CEs = NULL; + return 0; } uprv_memset(table->codePoints, '?', table->position*sizeof(UChar)); @@ -191,14 +189,14 @@ uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *sta int32_t size = table->elements[i]->position; uint8_t ccMax = 0, ccMin = 255, cc = 0; for(j = 1; j<size; j++) { - cc = u_getCombiningClass(table->elements[i]->codePoints[j]); - if(cc>ccMax) { - ccMax = cc; - } - if(cc<ccMin) { - ccMin = cc; - } - *(cpPointer+j) = table->elements[i]->codePoints[j]; + cc = u_getCombiningClass(table->elements[i]->codePoints[j]); + if(cc>ccMax) { + ccMax = cc; + } + if(cc<ccMin) { + ccMin = cc; + } + *(cpPointer+j) = table->elements[i]->codePoints[j]; } *cpPointer = ((ccMin==ccMax)?1:0 << 8) | ccMax; @@ -233,97 +231,112 @@ uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *sta } static ContractionTable *uprv_cnttab_cloneContraction(ContractionTable *t, UErrorCode *status) { - ContractionTable *r = (ContractionTable *)uprv_malloc(sizeof(ContractionTable)); - if(r == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - - r->position = t->position; - r->size = t->size; - - r->codePoints = (UChar *)uprv_malloc(sizeof(UChar)*t->size); - r->CEs = (uint32_t *)uprv_malloc(sizeof(uint32_t)*t->size); - - /* test for NULL */ - if((r->codePoints == NULL) || (r->CEs == NULL)) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - uprv_memcpy(r->codePoints, t->codePoints, sizeof(UChar)*t->size); - uprv_memcpy(r->CEs, t->CEs, sizeof(uint32_t)*t->size); - - return r; + ContractionTable *r = (ContractionTable *)uprv_malloc(sizeof(ContractionTable)); + if(r == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + + r->position = t->position; + r->size = t->size; + + r->codePoints = (UChar *)uprv_malloc(sizeof(UChar)*t->size); + if(r->codePoints == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(r); + return NULL; + } + r->CEs = (uint32_t *)uprv_malloc(sizeof(uint32_t)*t->size); + if(r->CEs == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(r->codePoints); + uprv_free(r); + return NULL; + } + uprv_memcpy(r->codePoints, t->codePoints, sizeof(UChar)*t->size); + uprv_memcpy(r->CEs, t->CEs, sizeof(uint32_t)*t->size); + + return r; } U_CAPI CntTable* U_EXPORT2 uprv_cnttab_clone(CntTable *t, UErrorCode *status) { - if(U_FAILURE(*status)) { - return NULL; - } - int32_t i = 0; - CntTable *r = (CntTable *)uprv_malloc(sizeof(CntTable)); - /* test for NULL */ - if (r == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - r->position = t->position; - r->size = t->size; - r->capacity = t->capacity; - - r->mapping = t->mapping; - - r->elements = (ContractionTable **)uprv_malloc(t->capacity*sizeof(ContractionTable *)); - /* test for NULL */ - if (r->elements == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - //uprv_memcpy(r->elements, t->elements, t->capacity*sizeof(ContractionTable *)); - - for(i = 0; i<t->size; i++) { - r->elements[i] = uprv_cnttab_cloneContraction(t->elements[i], status); - } - - if(t->CEs != NULL) { - r->CEs = (uint32_t *)uprv_malloc(t->position*sizeof(uint32_t)); - /* test for NULL */ - if (r->CEs == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; + if(U_FAILURE(*status)) { return NULL; } - uprv_memcpy(r->CEs, t->CEs, t->position*sizeof(uint32_t)); - } else { - r->CEs = NULL; - } - - if(t->codePoints != NULL) { - r->codePoints = (UChar *)uprv_malloc(t->position*sizeof(UChar)); + int32_t i = 0; + CntTable *r = (CntTable *)uprv_malloc(sizeof(CntTable)); /* test for NULL */ - if (r->codePoints == NULL) { + if (r == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return NULL; } - uprv_memcpy(r->codePoints, t->codePoints, t->position*sizeof(UChar)); - } else { - r->codePoints = NULL; - } + r->position = t->position; + r->size = t->size; + r->capacity = t->capacity; + + r->mapping = t->mapping; - if(t->offsets != NULL) { - r->offsets = (int32_t *)uprv_malloc(t->size*sizeof(int32_t)); + r->elements = (ContractionTable **)uprv_malloc(t->capacity*sizeof(ContractionTable *)); /* test for NULL */ - if (r->offsets == NULL) { + if (r->elements == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(r); return NULL; } - uprv_memcpy(r->offsets, t->offsets, t->size*sizeof(int32_t)); - } else { - r->offsets = NULL; - } + //uprv_memcpy(r->elements, t->elements, t->capacity*sizeof(ContractionTable *)); - return r; + for(i = 0; i<t->size; i++) { + r->elements[i] = uprv_cnttab_cloneContraction(t->elements[i], status); + } + + if(t->CEs != NULL) { + r->CEs = (uint32_t *)uprv_malloc(t->position*sizeof(uint32_t)); + /* test for NULL */ + if (r->CEs == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(r->elements); + uprv_free(r); + return NULL; + } + uprv_memcpy(r->CEs, t->CEs, t->position*sizeof(uint32_t)); + } else { + r->CEs = NULL; + } + + if(t->codePoints != NULL) { + r->codePoints = (UChar *)uprv_malloc(t->position*sizeof(UChar)); + /* test for NULL */ + if (r->codePoints == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(r->CEs); + uprv_free(r->elements); + uprv_free(r); + return NULL; + } + uprv_memcpy(r->codePoints, t->codePoints, t->position*sizeof(UChar)); + } else { + r->codePoints = NULL; + } + + if(t->offsets != NULL) { + r->offsets = (int32_t *)uprv_malloc(t->size*sizeof(int32_t)); + /* test for NULL */ + if (r->offsets == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(r->codePoints); + uprv_free(r->CEs); + uprv_free(r->elements); + uprv_free(r); + return NULL; + } + uprv_memcpy(r->offsets, t->offsets, t->size*sizeof(int32_t)); + } else { + r->offsets = NULL; + } + + return r; } U_CAPI void U_EXPORT2 @@ -352,7 +365,7 @@ uprv_cnttab_changeLastCE(CntTable *table, uint32_t element, uint32_t value, UErr } if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) { - return 0; + return 0; } tbl->CEs[tbl->position-1] = value; @@ -365,12 +378,12 @@ uprv_cnttab_changeLastCE(CntTable *table, uint32_t element, uint32_t value, UErr U_CAPI uint32_t U_EXPORT2 uprv_cnttab_insertContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t value, UErrorCode *status) { - element &= 0xFFFFFF; ContractionTable *tbl = NULL; if(U_FAILURE(*status)) { return 0; } + element &= 0xFFFFFF; if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) { tbl = addATableElement(table, &element, status); @@ -457,40 +470,40 @@ static ContractionTable *_cnttab_getContractionTable(CntTable *table, uint32_t e ContractionTable *tbl = NULL; if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) { - return NULL; + return NULL; } else { - return tbl; + return tbl; } } static int32_t _cnttab_findCP(ContractionTable *tbl, UChar codePoint) { uint32_t position = 0; if(tbl == NULL) { - return -1; + return -1; } while(codePoint > tbl->codePoints[position]) { - position++; - if(position > tbl->position) { - return -1; - } + position++; + if(position > tbl->position) { + return -1; + } } if (codePoint == tbl->codePoints[position]) { - return position; + return position; } else { - return -1; + return -1; } } static uint32_t _cnttab_getCE(ContractionTable *tbl, int32_t position) { - if(tbl == NULL) { - return UCOL_NOT_FOUND; - } - if((uint32_t)position > tbl->position || position == -1) { - return UCOL_NOT_FOUND; - } else { - return tbl->CEs[position]; - } + if(tbl == NULL) { + return UCOL_NOT_FOUND; + } + if((uint32_t)position > tbl->position || position == -1) { + return UCOL_NOT_FOUND; + } else { + return tbl->CEs[position]; + } } U_CAPI int32_t U_EXPORT2 @@ -528,20 +541,16 @@ uprv_cnttab_isTailored(CntTable *table, uint32_t element, UChar *ztString, UErro } while(*(ztString)!=0) { - element = uprv_cnttab_findCE(table, element, *(ztString), status); - if(element == UCOL_NOT_FOUND) { - return FALSE; - } - if(!isCntTableElement(element)) { - return TRUE; - } - ztString++; - } - if(uprv_cnttab_getCE(table, element, 0, status) != UCOL_NOT_FOUND) { - return TRUE; - } else { - return FALSE; + element = uprv_cnttab_findCE(table, element, *(ztString), status); + if(element == UCOL_NOT_FOUND) { + return FALSE; + } + if(!isCntTableElement(element)) { + return TRUE; + } + ztString++; } + return (UBool)(uprv_cnttab_getCE(table, element, 0, status) != UCOL_NOT_FOUND); } U_CAPI uint32_t U_EXPORT2 @@ -555,25 +564,23 @@ uprv_cnttab_changeContraction(CntTable *table, uint32_t element, UChar codePoint } if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) { - return 0; + return 0; } uint32_t position = 0; while(codePoint > tbl->codePoints[position]) { - position++; - if(position > tbl->position) { - return UCOL_NOT_FOUND; - } + position++; + if(position > tbl->position) { + return UCOL_NOT_FOUND; + } } if (codePoint == tbl->codePoints[position]) { - tbl->CEs[position] = newCE; - return element; + tbl->CEs[position] = newCE; + return element; } else { - return UCOL_NOT_FOUND; + return UCOL_NOT_FOUND; } } -U_NAMESPACE_END - #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/ucol_cnt.h b/icuSources/i18n/ucol_cnt.h index 51cdf525..c16211fc 100644 --- a/icuSources/i18n/ucol_cnt.h +++ b/icuSources/i18n/ucol_cnt.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -31,7 +31,7 @@ #include "ucol_elm.h" #include "ucol_imp.h" -U_NAMESPACE_BEGIN +U_CDECL_BEGIN #define UPRV_CNTTAB_NEWELEMENT 0xFFFFFF @@ -98,7 +98,7 @@ uprv_cnttab_findCE(CntTable *table, uint32_t element, UChar codePoint, UErrorCod U_CAPI UBool U_EXPORT2 uprv_cnttab_isTailored(CntTable *table, uint32_t element, UChar *ztString, UErrorCode *status); -U_NAMESPACE_END +U_CDECL_END #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/ucol_elm.cpp b/icuSources/i18n/ucol_elm.cpp index dd070391..ab3bf408 100644 --- a/icuSources/i18n/ucol_elm.cpp +++ b/icuSources/i18n/ucol_elm.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -36,12 +36,10 @@ #include "unicode/caniter.h" #include "cmemory.h" -U_NAMESPACE_BEGIN - static uint32_t uprv_uca_processContraction(CntTable *contractions, UCAElements *element, uint32_t existingCE, UErrorCode *status); U_CDECL_BEGIN -static int32_t U_EXPORT2 U_CALLCONV +static int32_t U_CALLCONV prefixLookupHash(const UHashTok e) { UCAElements *element = (UCAElements *)e.pointer; UChar buf[256]; @@ -54,7 +52,7 @@ prefixLookupHash(const UHashTok e) { return uhash_hashUChars(key); } -static int8_t U_EXPORT2 U_CALLCONV +static int8_t U_CALLCONV prefixLookupComp(const UHashTok e1, const UHashTok e2) { UCAElements *element1 = (UCAElements *)e1.pointer; UCAElements *element2 = (UCAElements *)e2.pointer; @@ -109,29 +107,30 @@ static int32_t uprv_uca_addExpansion(ExpansionTable *expansions, uint32_t value, U_CAPI tempUCATable* U_EXPORT2 uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollator *UCA, UColCETags initTag, UColCETags supplementaryInitTag, UErrorCode *status) { + MaxJamoExpansionTable *maxjet; + MaxExpansionTable *maxet; tempUCATable *t = (tempUCATable *)uprv_malloc(sizeof(tempUCATable)); /* test for NULL */ if (t == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return NULL; } - MaxExpansionTable *maxet = (MaxExpansionTable *)uprv_malloc( - sizeof(MaxExpansionTable)); - /* test for NULL */ + uprv_memset(t, 0, sizeof(tempUCATable)); + + maxet = (MaxExpansionTable *)uprv_malloc(sizeof(MaxExpansionTable)); if (maxet == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(t); - return NULL; + goto allocation_failure; } - MaxJamoExpansionTable *maxjet = (MaxJamoExpansionTable *)uprv_malloc( - sizeof(MaxJamoExpansionTable)); - /* test for NULL */ + uprv_memset(maxet, 0, sizeof(MaxExpansionTable)); + t->maxExpansions = maxet; + + maxjet = (MaxJamoExpansionTable *)uprv_malloc(sizeof(MaxJamoExpansionTable)); if (maxjet == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(t); - uprv_free(maxet); - return NULL; + goto allocation_failure; } + uprv_memset(maxjet, 0, sizeof(MaxJamoExpansionTable)); + t->maxJamoExpansions = maxjet; + t->image = image; t->options = opts; @@ -139,11 +138,7 @@ uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollat t->expansions = (ExpansionTable *)uprv_malloc(sizeof(ExpansionTable)); /* test for NULL */ if (t->expansions == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(t); - uprv_free(maxet); - uprv_free(maxjet); - return NULL; + goto allocation_failure; } uprv_memset(t->expansions, 0, sizeof(ExpansionTable)); /*t->mapping = ucmpe32_open(UCOL_SPECIAL_FLAG | (initTag<<24), UCOL_SPECIAL_FLAG | (SURROGATE_TAG<<24), UCOL_SPECIAL_FLAG | (LEAD_SURROGATE_TAG<<24), status);*/ @@ -153,13 +148,12 @@ uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollat UCOL_SPECIAL_FLAG | (initTag<<24), UCOL_SPECIAL_FLAG | (supplementaryInitTag << 24), TRUE); // Do your own mallocs for the structure, array and have linear Latin 1 - t->prefixLookup = uhash_open(prefixLookupHash, prefixLookupComp, status); + t->prefixLookup = uhash_open(prefixLookupHash, prefixLookupComp, NULL, status); uhash_setValueDeleter(t->prefixLookup, uhash_freeBlock); t->contractions = uprv_cnttab_open(t->mapping, status); /* copy UCA's maxexpansion and merge as we go along */ - t->maxExpansions = maxet; if (UCA != NULL) { /* adding an extra initial value for easier manipulation */ maxet->size = (UCA->lastEndExpansionCE - UCA->endExpansionCE) @@ -169,16 +163,13 @@ uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollat (uint32_t *)uprv_malloc(sizeof(uint32_t) * maxet->size); /* test for NULL */ if (maxet->endExpansionCE == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + goto allocation_failure; } maxet->expansionCESize = (uint8_t *)uprv_malloc(sizeof(uint8_t) * maxet->size); /* test for NULL */ if (maxet->expansionCESize == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(maxet->endExpansionCE); - return NULL; + goto allocation_failure; } /* initialized value */ *(maxet->endExpansionCE) = 0; @@ -191,7 +182,6 @@ uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollat else { maxet->size = 0; } - t->maxJamoExpansions = maxjet; maxjet->endExpansionCE = NULL; maxjet->isV = NULL; maxjet->size = 0; @@ -203,19 +193,21 @@ uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollat t->unsafeCP = (uint8_t *)uprv_malloc(UCOL_UNSAFECP_TABLE_SIZE); /* test for NULL */ if (t->unsafeCP == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return NULL; + goto allocation_failure; } t->contrEndCP = (uint8_t *)uprv_malloc(UCOL_UNSAFECP_TABLE_SIZE); /* test for NULL */ if (t->contrEndCP == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - uprv_free(t->unsafeCP); - return NULL; + goto allocation_failure; } uprv_memset(t->unsafeCP, 0, UCOL_UNSAFECP_TABLE_SIZE); uprv_memset(t->contrEndCP, 0, UCOL_UNSAFECP_TABLE_SIZE); -return t; + return t; + +allocation_failure: + uprv_uca_closeTempTable(t); + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; } U_CAPI tempUCATable* U_EXPORT2 @@ -281,6 +273,7 @@ uprv_uca_cloneTempTable(tempUCATable *t, UErrorCode *status) { r->maxExpansions->position = t->maxExpansions->position; if(t->maxExpansions->endExpansionCE != NULL) { r->maxExpansions->endExpansionCE = (uint32_t *)uprv_malloc(sizeof(uint32_t)*t->maxExpansions->size); + uprv_memset(r->maxExpansions->endExpansionCE, 0xDB, sizeof(uint32_t)*t->maxExpansions->size); /* test for NULL */ if (r->maxExpansions->endExpansionCE == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; @@ -292,6 +285,7 @@ uprv_uca_cloneTempTable(tempUCATable *t, UErrorCode *status) { } if(t->maxExpansions->expansionCESize != NULL) { r->maxExpansions->expansionCESize = (uint8_t *)uprv_malloc(sizeof(uint8_t)*t->maxExpansions->size); + uprv_memset(r->maxExpansions->expansionCESize, 0xDB, sizeof(uint8_t)*t->maxExpansions->size); /* test for NULL */ if (r->maxExpansions->expansionCESize == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; @@ -367,21 +361,26 @@ uprv_uca_cloneTempTable(tempUCATable *t, UErrorCode *status) { U_CAPI void U_EXPORT2 uprv_uca_closeTempTable(tempUCATable *t) { if(t != NULL) { - uprv_free(t->expansions->CEs); - uprv_free(t->expansions); + if (t->expansions != NULL) { + uprv_free(t->expansions->CEs); + uprv_free(t->expansions); + } if(t->contractions != NULL) { uprv_cnttab_close(t->contractions); } - /*ucmpe32_close(t->mapping);*/ - utrie_close(t->mapping); + if (t->mapping != NULL) { + utrie_close(t->mapping); + } if(t->prefixLookup != NULL) { uhash_close(t->prefixLookup); } - uprv_free(t->maxExpansions->endExpansionCE); - uprv_free(t->maxExpansions->expansionCESize); - uprv_free(t->maxExpansions); + if (t->maxExpansions != NULL) { + uprv_free(t->maxExpansions->endExpansionCE); + uprv_free(t->maxExpansions->expansionCESize); + uprv_free(t->maxExpansions); + } if (t->maxJamoExpansions->size > 0) { uprv_free(t->maxJamoExpansions->endExpansionCE); @@ -594,6 +593,8 @@ static int uprv_uca_setMaxJamoExpansion(UChar ch, /* test for NULL */; if (maxexpansion->isV == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(maxexpansion->endExpansionCE); + maxexpansion->endExpansionCE = NULL; return 0; } *(maxexpansion->isV) = 0; @@ -602,20 +603,27 @@ static int uprv_uca_setMaxJamoExpansion(UChar ch, } if (maxexpansion->position + 1 == maxexpansion->size) { - uint32_t *neweece = (uint32_t *)uprv_realloc(maxexpansion->endExpansionCE, - 2 * maxexpansion->size * sizeof(uint32_t)); - UBool *newisV = (UBool *)uprv_realloc(maxexpansion->isV, - 2 * maxexpansion->size * sizeof(UBool)); - if (neweece == NULL || newisV == NULL) { + maxexpansion->size *= 2; + maxexpansion->endExpansionCE = (uint32_t *)uprv_realloc(maxexpansion->endExpansionCE, + maxexpansion->size * sizeof(uint32_t)); + if (maxexpansion->endExpansionCE == NULL) { #ifdef UCOL_DEBUG fprintf(stderr, "out of memory for maxExpansions\n"); #endif *status = U_MEMORY_ALLOCATION_ERROR; - return -1; + return 0; + } + maxexpansion->isV = (UBool *)uprv_realloc(maxexpansion->isV, + maxexpansion->size * sizeof(UBool)); + if (maxexpansion->isV == NULL) { +#ifdef UCOL_DEBUG + fprintf(stderr, "out of memory for maxExpansions\n"); +#endif + *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(maxexpansion->endExpansionCE); + maxexpansion->endExpansionCE = NULL; + return 0; } - maxexpansion->endExpansionCE = neweece; - maxexpansion->isV = newisV; - maxexpansion->size *= 2; } uint32_t *pendexpansionce = maxexpansion->endExpansionCE; @@ -1016,14 +1024,7 @@ uprv_uca_addAnElement(tempUCATable *t, UCAElements *element, UErrorCode *status) element->mapCE = 0; // clear mapCE so that we can catch expansions if(element->noOfCEs == 1) { - if(element->isThai == FALSE) { - element->mapCE = element->CEs[0]; - } else { /* add thai - totally bad here */ - expansion = (uint32_t)(UCOL_SPECIAL_FLAG | (THAI_TAG<<UCOL_TAG_SHIFT) - | ((uprv_uca_addExpansion(expansions, element->CEs[0], status)+(headersize>>2))<<4) - | 0x1); - element->mapCE = expansion; - } + element->mapCE = element->CEs[0]; } else { /* ICU 2.1 long primaries */ /* unfortunately, it looks like we have to look for a long primary here */ @@ -1075,6 +1076,9 @@ uprv_uca_addAnElement(tempUCATable *t, UCAElements *element, UErrorCode *status) (uint8_t)element->noOfCEs, t->maxJamoExpansions, status); + if (U_FAILURE(*status)) { + return 0; + } } } } @@ -1083,10 +1087,10 @@ uprv_uca_addAnElement(tempUCATable *t, UCAElements *element, UErrorCode *status) // processed differently if numeric collation is on. UChar32 uniChar = 0; //printElement(element); - if ((element->cSize == 2) && U16_IS_LEAD(element->uchars[0])){ - uniChar = U16_GET_SUPPLEMENTARY(element->uchars[0], element->uchars[1]); + if ((element->cSize == 2) && U16_IS_LEAD(element->cPoints[0])){ + uniChar = U16_GET_SUPPLEMENTARY(element->cPoints[0], element->cPoints[1]); } else if (element->cSize == 1){ - uniChar = element->uchars[0]; + uniChar = element->cPoints[0]; } // Here, we either have one normal CE OR mapCE is set. Therefore, we stuff only @@ -1425,15 +1429,15 @@ uprv_uca_assembleTable(tempUCATable *t, UErrorCode *status) { /* copy max expansion table */ myData->endExpansionCE = tableOffset; - myData->endExpansionCECount = maxexpansion->position; + myData->endExpansionCECount = maxexpansion->position - 1; /* not copying the first element which is a dummy */ uprv_memcpy(dataStart + tableOffset, maxexpansion->endExpansionCE + 1, - maxexpansion->position * sizeof(uint32_t)); - tableOffset += (uint32_t)(paddedsize(maxexpansion->position * sizeof(uint32_t))); + (maxexpansion->position - 1) * sizeof(uint32_t)); + tableOffset += (uint32_t)(paddedsize((maxexpansion->position)* sizeof(uint32_t))); myData->expansionCESize = tableOffset; uprv_memcpy(dataStart + tableOffset, maxexpansion->expansionCESize + 1, - maxexpansion->position * sizeof(uint8_t)); - tableOffset += (uint32_t)(paddedsize(maxexpansion->position * sizeof(uint8_t))); + (maxexpansion->position - 1) * sizeof(uint8_t)); + tableOffset += (uint32_t)(paddedsize((maxexpansion->position)* sizeof(uint8_t))); /* Unsafe chars table. Finish it off, then copy it. */ uprv_uca_unsafeCPAddCCNZ(t, status); @@ -1485,19 +1489,19 @@ U_CDECL_BEGIN static UBool U_CALLCONV _enumCategoryRangeClosureCategory(const void *context, UChar32 start, UChar32 limit, UCharCategory type) { - UErrorCode *status = ((enumStruct *)context)->status; - tempUCATable *t = ((enumStruct *)context)->t; - UCollator *tempColl = ((enumStruct *)context)->tempColl; - UCollationElements* colEl = ((enumStruct *)context)->colEl; - UCAElements el; - UChar decomp[256] = { 0 }; - int32_t noOfDec = 0; - - UChar32 u32 = 0; - UChar comp[2]; - uint32_t len = 0; - if (type != U_UNASSIGNED && type != U_PRIVATE_USE_CHAR) { // if the range is assigned - we might ommit more categories later + UErrorCode *status = ((enumStruct *)context)->status; + tempUCATable *t = ((enumStruct *)context)->t; + UCollator *tempColl = ((enumStruct *)context)->tempColl; + UCollationElements* colEl = ((enumStruct *)context)->colEl; + UCAElements el; + UChar decomp[256] = { 0 }; + int32_t noOfDec = 0; + + UChar32 u32 = 0; + UChar comp[2]; + uint32_t len = 0; + for(u32 = start; u32 < limit; u32++) { noOfDec = unorm_getDecomposition(u32, FALSE, decomp, 256); //if((noOfDec = unorm_normalize(comp, len, UNORM_NFD, 0, decomp, 256, status)) > 1 @@ -1523,21 +1527,17 @@ _enumCategoryRangeClosureCategory(const void *context, UChar32 start, UChar32 li el.prefixSize = 0; UCAElements *prefix=(UCAElements *)uhash_get(t->prefixLookup, &el); + el.cPoints = comp; + el.cSize = len; + el.prefix = el.prefixChars; + el.prefixSize = 0; if(prefix == NULL) { - el.cPoints = comp; - el.cSize = len; - el.prefix = el.prefixChars; - el.prefixSize = 0; el.noOfCEs = 0; ucol_setText(colEl, decomp, noOfDec, status); while((el.CEs[el.noOfCEs] = ucol_next(colEl, status)) != (uint32_t)UCOL_NULLORDER) { el.noOfCEs++; } } else { - el.cPoints = comp; - el.cSize = len; - el.prefix = el.prefixChars; - el.prefixSize = 0; el.noOfCEs = 1; el.CEs[0] = prefix->mapCE; // This character uses a prefix. We have to add it @@ -1546,12 +1546,6 @@ _enumCategoryRangeClosureCategory(const void *context, UChar32 start, UChar32 li // Since unsafeCPSet is static in ucol_elm, we are going // to wrap it up in the uprv_uca_unsafeCPAddCCNZ function } - if(UCOL_ISTHAIPREVOWEL(el.cPoints[0])) { - el.isThai = TRUE; - } else { - el.isThai = FALSE; - } - uprv_uca_addAnElement(t, &el, status); } } @@ -1600,8 +1594,6 @@ uprv_uca_canonicalClosure(tempUCATable *t, UErrorCode *status) return context.noOfClosures; } -U_NAMESPACE_END - #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/ucol_elm.h b/icuSources/i18n/ucol_elm.h index 3ffd204a..5e980e26 100644 --- a/icuSources/i18n/ucol_elm.h +++ b/icuSources/i18n/ucol_elm.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -33,7 +33,7 @@ #include <stdio.h> #endif -U_NAMESPACE_BEGIN +U_CDECL_BEGIN typedef struct { uint32_t *CEs; @@ -62,8 +62,8 @@ typedef struct { typedef struct { uint32_t *endExpansionCE; UBool *isV; - int position; - int size; + int32_t position; + int32_t size; uint8_t maxLSize; uint8_t maxVSize; uint8_t maxTSize; @@ -72,8 +72,8 @@ typedef struct { typedef struct { uint32_t *endExpansionCE; uint8_t *expansionCESize; - int position; - int size; + int32_t position; + int32_t size; } MaxExpansionTable; typedef struct { @@ -103,7 +103,7 @@ uprv_uca_canonicalClosure(tempUCATable *t, UErrorCode *status); #define paddedsize(something) ((something)+((((something)%4)!=0)?(4-(something)%4):0)) #define headersize (paddedsize(sizeof(UCATableHeader))+paddedsize(sizeof(UColOptionSet))) -U_NAMESPACE_END +U_CDECL_END #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/ucol_imp.h b/icuSources/i18n/ucol_imp.h index f8b11c66..db6e2dc4 100644 --- a/icuSources/i18n/ucol_imp.h +++ b/icuSources/i18n/ucol_imp.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -43,7 +43,7 @@ #include "unicode/ucol.h" #include "utrie.h" -#include "unicode/ures.h" +#include "uresimp.h" #include "unicode/udata.h" #include "unicode/uiter.h" @@ -58,7 +58,7 @@ * The following describes the formats for collation binaries * (UCA & tailorings) and for the inverse UCA table. * Substructures are described in the collation design document at - * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm + * http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm * * ------------------------------------------------------------- * @@ -261,7 +261,7 @@ minimum number for special Jamo #define NFC_ZERO_CC_BLOCK_LIMIT_ 0x300 -struct collIterate { +typedef struct collIterate { UChar *string; /* Original string */ /* UChar *start; Pointer to the start of the source string. Either points to string or to writableBuffer */ @@ -280,7 +280,7 @@ struct collIterate { UChar stackWritableBuffer[UCOL_WRITABLE_BUFFER_SIZE]; /* A writable buffer. */ UCharIterator *iterator; /*int32_t iteratorIndex;*/ -}; +} collIterate; /* struct used internally in getSpecial*CE. @@ -558,7 +558,7 @@ enum { UCOL_BYTE_FIRST_TAILORED = 0x04, UCOL_BYTE_COMMON = 0x05, UCOL_BYTE_FIRST_UCA = UCOL_BYTE_COMMON, - UCOL_CODAN_PLACEHOLDER = 0x24, + UCOL_CODAN_PLACEHOLDER = 0x27, UCOL_BYTE_LAST_LATIN_PRIMARY = 0x4C, UCOL_BYTE_FIRST_NON_LATIN_PRIMARY = 0x4D, UCOL_BYTE_UNSHIFTED_MAX = 0xFF @@ -848,22 +848,28 @@ SortKeyGenerator(const UCollator *coll, UBool allocatePrimary, UErrorCode *status); +typedef void U_CALLCONV +ResourceCleaner(UCollator *coll); + + struct UCollator { UColOptionSet *options; SortKeyGenerator *sortKeyGen; uint32_t *latinOneCEs; char* validLocale; char* requestedLocale; + const UChar *rules; + const UCollator *UCA; + ResourceCleaner *resCleaner; UResourceBundle *rb; UResourceBundle *elements; const UCATableHeader *image; - /*CompactEIntArray *mapping;*/ - UTrie *mapping; + UTrie mapping; const uint32_t *latinOneMapping; const uint32_t *expansion; const UChar *contractionIndex; const uint32_t *contractionCEs; - const uint8_t *scriptOrder; + /*const uint8_t *scriptOrder;*/ const uint32_t *endExpansionCE; /* array of last ces in an expansion ce. corresponds to expansionCESize */ @@ -877,12 +883,9 @@ struct UCollator { UChar minUnsafeCP; /* Smallest unsafe Code Point. */ UChar minContrEndCP; /* Smallest code point at end of a contraction */ - const UChar *rules; int32_t rulesLength; int32_t latinOneTableLen; - /*UErrorCode errorCode;*/ /* internal error code */ - uint32_t variableTopValue; UColAttributeValue frenchCollation; UColAttributeValue alternateHandling; /* attribute for handling variable elements*/ @@ -923,9 +926,7 @@ struct UCollator { uint8_t tertiaryTopCount; uint8_t tertiaryBottomCount; - UDataInfo dataInfo; /* Data info of UCA table */ - const UCollator *UCA; - + UVersionInfo dataVersion; /* Data info of UCA table */ }; U_CDECL_END @@ -954,7 +955,6 @@ U_CFUNC void ucol_updateInternalState(UCollator *coll, UErrorCode *status); U_CAPI uint32_t U_EXPORT2 ucol_getFirstCE(const UCollator *coll, UChar u, UErrorCode *status); -U_CAPI char* U_EXPORT2 ucol_sortKeyToString(const UCollator *coll, const uint8_t *sortkey, char *buffer, uint32_t *len); U_CAPI UBool U_EXPORT2 ucol_isTailored(const UCollator *coll, const UChar u, UErrorCode *status); U_CAPI const InverseUCATableHeader* U_EXPORT2 ucol_initInverseUCA(UErrorCode *status); diff --git a/icuSources/i18n/ucol_res.cpp b/icuSources/i18n/ucol_res.cpp new file mode 100644 index 00000000..578fa8a3 --- /dev/null +++ b/icuSources/i18n/ucol_res.cpp @@ -0,0 +1,719 @@ +/* +******************************************************************************* +* Copyright (C) 1996-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* file name: ucol_res.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* Description: +* This file contains dependencies that the collation run-time doesn't normally +* need. This mainly contains resource bundle usage and collation meta information +* +* Modification history +* Date Name Comments +* 1996-1999 various members of ICU team maintained C API for collation framework +* 02/16/2001 synwee Added internal method getPrevSpecialCE +* 03/01/2001 synwee Added maxexpansion functionality. +* 03/16/2001 weiv Collation framework is rewritten in C and made UCA compliant +* 12/08/2004 grhoten Split part of ucol.cpp into ucol_res.cpp +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_COLLATION +#include "unicode/uloc.h" +#include "unicode/coll.h" +#include "unicode/tblcoll.h" +#include "unicode/caniter.h" +#include "unicode/ustring.h" + +#include "ucol_bld.h" +#include "ucol_imp.h" +#include "ucol_tok.h" +#include "ucol_elm.h" +#include "uresimp.h" +#include "ustr_imp.h" +#include "cstring.h" +#include "umutex.h" +#include "ustrenum.h" +#include "putilimp.h" +#include "utracimp.h" +#include "cmemory.h" + +U_CDECL_BEGIN +static void U_CALLCONV +ucol_prv_closeResources(UCollator *coll) { + if(coll->rb != NULL) { /* pointing to read-only memory */ + ures_close(coll->rb); + } + if(coll->elements != NULL) { + ures_close(coll->elements); + } +} +U_CDECL_END + +/****************************************************************************/ +/* Following are the open/close functions */ +/* */ +/****************************************************************************/ +static UCollator* +tryOpeningFromRules(UResourceBundle *collElem, UErrorCode *status) { + int32_t rulesLen = 0; + const UChar *rules = ures_getStringByKey(collElem, "Sequence", &rulesLen, status); + return ucol_openRules(rules, rulesLen, UCOL_DEFAULT, UCOL_DEFAULT, NULL, status); + +} + + +// API in ucol_imp.h + +U_CFUNC UCollator* +ucol_open_internal(const char *loc, + UErrorCode *status) +{ + const UCollator* UCA = ucol_initUCA(status); + + /* New version */ + if(U_FAILURE(*status)) return 0; + + + + UCollator *result = NULL; + UResourceBundle *b = ures_open(U_ICUDATA_COLL, loc, status); + + /* we try to find stuff from keyword */ + UResourceBundle *collations = ures_getByKey(b, "collations", NULL, status); + UResourceBundle *collElem = NULL; + char keyBuffer[256]; + // if there is a keyword, we pick it up and try to get elements + if(!uloc_getKeywordValue(loc, "collation", keyBuffer, 256, status)) { + // no keyword. we try to find the default setting, which will give us the keyword value + UErrorCode intStatus = U_ZERO_ERROR; + // finding default value does not affect collation fallback status + UResourceBundle *defaultColl = ures_getByKeyWithFallback(collations, "default", NULL, &intStatus); + if(U_SUCCESS(intStatus)) { + int32_t defaultKeyLen = 0; + const UChar *defaultKey = ures_getString(defaultColl, &defaultKeyLen, &intStatus); + u_UCharsToChars(defaultKey, keyBuffer, defaultKeyLen); + keyBuffer[defaultKeyLen] = 0; + } else { + *status = U_INTERNAL_PROGRAM_ERROR; + return NULL; + } + ures_close(defaultColl); + } + collElem = ures_getByKeyWithFallback(collations, keyBuffer, collElem, status); + + UResourceBundle *binary = NULL; + + if(*status == U_MISSING_RESOURCE_ERROR) { /* We didn't find the tailoring data, we fallback to the UCA */ + *status = U_USING_DEFAULT_WARNING; + result = ucol_initCollator(UCA->image, result, UCA, status); + // if we use UCA, real locale is root + result->rb = ures_open(U_ICUDATA_COLL, "", status); + result->elements = ures_open(U_ICUDATA_COLL, "", status); + if(U_FAILURE(*status)) { + goto clean; + } + ures_close(b); + result->hasRealData = FALSE; + } else if(U_SUCCESS(*status)) { + int32_t len = 0; + UErrorCode binaryStatus = U_ZERO_ERROR; + + binary = ures_getByKey(collElem, "%%CollationBin", NULL, &binaryStatus); + + if(binaryStatus == U_MISSING_RESOURCE_ERROR) { /* we didn't find the binary image, we should use the rules */ + binary = NULL; + result = tryOpeningFromRules(collElem, status); + if(U_FAILURE(*status)) { + goto clean; + } + } else if(U_SUCCESS(*status)) { /* otherwise, we'll pick a collation data that exists */ + const uint8_t *inData = ures_getBinary(binary, &len, status); + UCATableHeader *colData = (UCATableHeader *)inData; + if(uprv_memcmp(colData->UCAVersion, UCA->image->UCAVersion, sizeof(UVersionInfo)) != 0 || + uprv_memcmp(colData->UCDVersion, UCA->image->UCDVersion, sizeof(UVersionInfo)) != 0 || + colData->version[0] != UCOL_BUILDER_VERSION) + { + *status = U_DIFFERENT_UCA_VERSION; + result = tryOpeningFromRules(collElem, status); + } else { + if(U_FAILURE(*status)){ + goto clean; + } + if((uint32_t)len > (paddedsize(sizeof(UCATableHeader)) + paddedsize(sizeof(UColOptionSet)))) { + result = ucol_initCollator((const UCATableHeader *)inData, result, UCA, status); + if(U_FAILURE(*status)){ + goto clean; + } + result->hasRealData = TRUE; + } else { + result = ucol_initCollator(UCA->image, result, UCA, status); + ucol_setOptionsFromHeader(result, (UColOptionSet *)(inData+((const UCATableHeader *)inData)->options), status); + if(U_FAILURE(*status)){ + goto clean; + } + result->hasRealData = FALSE; + } + result->freeImageOnClose = FALSE; + } + } + result->rb = b; + result->elements = collElem; + len = 0; + binaryStatus = U_ZERO_ERROR; + result->rules = ures_getStringByKey(result->elements, "Sequence", &len, &binaryStatus); + result->rulesLength = len; + result->freeRulesOnClose = FALSE; + } else { /* There is another error, and we're just gonna clean up */ + goto clean; + } + + result->validLocale = NULL; // default is to use rb info + + if(loc == NULL) { + loc = ures_getLocale(result->rb, status); + } + result->requestedLocale = (char *)uprv_malloc((uprv_strlen(loc)+1)*sizeof(char)); + /* test for NULL */ + if (result->requestedLocale == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + goto clean; + } + uprv_strcpy(result->requestedLocale, loc); + + ures_close(binary); + ures_close(collations); //??? we have to decide on that. Probably affects something :) + result->resCleaner = ucol_prv_closeResources; + return result; + +clean: + ures_close(b); + ures_close(collElem); + ures_close(collations); + ures_close(binary); + return NULL; +} + +U_CAPI UCollator* +ucol_open(const char *loc, + UErrorCode *status) +{ + UTRACE_ENTRY_OC(UTRACE_UCOL_OPEN); + UTRACE_DATA1(UTRACE_INFO, "locale = \"%s\"", loc); + UCollator *result = NULL; + + u_init(status); +#if !UCONFIG_NO_SERVICE + result = Collator::createUCollator(loc, status); + if (result == NULL) +#endif + { + result = ucol_open_internal(loc, status); + } + UTRACE_EXIT_PTR_STATUS(result, *status); + return result; +} + +U_CAPI UCollator* U_EXPORT2 +ucol_openRules( const UChar *rules, + int32_t rulesLength, + UColAttributeValue normalizationMode, + UCollationStrength strength, + UParseError *parseError, + UErrorCode *status) +{ + uint32_t listLen = 0; + UColTokenParser src; + UColAttributeValue norm; + UParseError tErr; + + if(status == NULL || U_FAILURE(*status)){ + return 0; + } + + u_init(status); + if (U_FAILURE(*status)) { + return NULL; + } + + if(rules == NULL || rulesLength < -1) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + if(rulesLength == -1) { + rulesLength = u_strlen(rules); + } + + if(parseError == NULL){ + parseError = &tErr; + } + + switch(normalizationMode) { + case UCOL_OFF: + case UCOL_ON: + case UCOL_DEFAULT: + norm = normalizationMode; + break; + default: + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + UCollator *UCA = ucol_initUCA(status); + + if(U_FAILURE(*status)){ + return NULL; + } + + ucol_tok_initTokenList(&src, rules, rulesLength, UCA, status); + listLen = ucol_tok_assembleTokenList(&src,parseError, status); + + if(U_FAILURE(*status)) { + /* if status is U_ILLEGAL_ARGUMENT_ERROR, src->current points at the offending option */ + /* if status is U_INVALID_FORMAT_ERROR, src->current points after the problematic part of the rules */ + /* so something might be done here... or on lower level */ +#ifdef UCOL_DEBUG + if(*status == U_ILLEGAL_ARGUMENT_ERROR) { + fprintf(stderr, "bad option starting at offset %i\n", src.current-src.source); + } else { + fprintf(stderr, "invalid rule just before offset %i\n", src.current-src.source); + } +#endif + ucol_tok_closeTokenList(&src); + return NULL; + } + UCollator *result = NULL; + UCATableHeader *table = NULL; + + if(src.resultLen > 0 || src.removeSet != NULL) { /* we have a set of rules, let's make something of it */ + /* also, if we wanted to remove some contractions, we should make a tailoring */ + table = ucol_assembleTailoringTable(&src, status); + if(U_SUCCESS(*status)) { + // builder version + table->version[0] = UCOL_BUILDER_VERSION; + // no tailoring information on this level + table->version[1] = table->version[2] = table->version[3] = 0; + // set UCD version + u_getUnicodeVersion(table->UCDVersion); + // set UCA version + uprv_memcpy(table->UCAVersion, UCA->image->UCAVersion, sizeof(UVersionInfo)); + result = ucol_initCollator(table, 0, UCA, status); + result->hasRealData = TRUE; + result->freeImageOnClose = TRUE; + } + } else { /* no rules, but no error either */ + // must be only options + // We will init the collator from UCA + result = ucol_initCollator(UCA->image, 0, UCA, status); + // And set only the options + UColOptionSet *opts = (UColOptionSet *)uprv_malloc(sizeof(UColOptionSet)); + /* test for NULL */ + if (opts == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup; + } + uprv_memcpy(opts, src.opts, sizeof(UColOptionSet)); + ucol_setOptionsFromHeader(result, opts, status); + result->freeOptionsOnClose = TRUE; + result->hasRealData = FALSE; + result->freeImageOnClose = FALSE; + } + + if(U_SUCCESS(*status)) { + UChar *newRules; + result->dataVersion[0] = UCOL_BUILDER_VERSION; + if(rulesLength > 0) { + newRules = (UChar *)uprv_malloc((rulesLength+1)*U_SIZEOF_UCHAR); + /* test for NULL */ + if (newRules == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + goto cleanup; + } + uprv_memcpy(newRules, rules, rulesLength*U_SIZEOF_UCHAR); + newRules[rulesLength]=0; + result->rules = newRules; + result->rulesLength = rulesLength; + result->freeRulesOnClose = TRUE; + } + result->rb = NULL; + result->elements = NULL; + result->validLocale = NULL; + result->requestedLocale = NULL; + ucol_setAttribute(result, UCOL_STRENGTH, strength, status); + ucol_setAttribute(result, UCOL_NORMALIZATION_MODE, norm, status); + } else { +cleanup: + if(result != NULL) { + ucol_close(result); + } else { + if(table != NULL) { + uprv_free(table); + } + } + result = NULL; + } + + ucol_tok_closeTokenList(&src); + + return result; +} + +U_CAPI int32_t U_EXPORT2 +ucol_getRulesEx(const UCollator *coll, UColRuleOption delta, UChar *buffer, int32_t bufferLen) { + UErrorCode status = U_ZERO_ERROR; + int32_t len = 0; + int32_t UCAlen = 0; + const UChar* ucaRules = 0; + const UChar *rules = ucol_getRules(coll, &len); + if(delta == UCOL_FULL_RULES) { + /* take the UCA rules and append real rules at the end */ + /* UCA rules will be probably coming from the root RB */ + ucaRules = ures_getStringByKey(coll->rb,"UCARules",&UCAlen,&status); + /* + UResourceBundle* cresb = ures_getByKeyWithFallback(coll->rb, "collations", NULL, &status); + UResourceBundle* uca = ures_getByKeyWithFallback(cresb, "UCA", NULL, &status); + ucaRules = ures_getStringByKey(uca,"Sequence",&UCAlen,&status); + ures_close(uca); + ures_close(cresb); + */ + } + if(U_FAILURE(status)) { + return 0; + } + if(buffer!=0 && bufferLen>0){ + *buffer=0; + if(UCAlen > 0) { + u_memcpy(buffer, ucaRules, uprv_min(UCAlen, bufferLen)); + } + if(len > 0 && bufferLen > UCAlen) { + u_memcpy(buffer+UCAlen, rules, uprv_min(len, bufferLen-UCAlen)); + } + } + return u_terminateUChars(buffer, bufferLen, len+UCAlen, &status); +} + +static const UChar _NUL = 0; + +U_CAPI const UChar* U_EXPORT2 +ucol_getRules( const UCollator *coll, + int32_t *length) +{ + if(coll->rules != NULL) { + *length = coll->rulesLength; + return coll->rules; + } + else { + *length = 0; + return &_NUL; + } +} + +U_CAPI UBool U_EXPORT2 +ucol_equals(const UCollator *source, const UCollator *target) { + UErrorCode status = U_ZERO_ERROR; + // if pointers are equal, collators are equal + if(source == target) { + return TRUE; + } + int32_t i = 0, j = 0; + // if any of attributes are different, collators are not equal + for(i = 0; i < UCOL_ATTRIBUTE_COUNT; i++) { + if(ucol_getAttribute(source, (UColAttribute)i, &status) != ucol_getAttribute(target, (UColAttribute)i, &status) || U_FAILURE(status)) { + return FALSE; + } + } + + int32_t sourceRulesLen = 0, targetRulesLen = 0; + const UChar *sourceRules = ucol_getRules(source, &sourceRulesLen); + const UChar *targetRules = ucol_getRules(target, &targetRulesLen); + + if(sourceRulesLen == targetRulesLen && u_strncmp(sourceRules, targetRules, sourceRulesLen) == 0) { + // all the attributes are equal and the rules are equal - collators are equal + return(TRUE); + } + // hard part, need to construct tree from rules and see if they yield the same tailoring + UBool result = TRUE; + UParseError parseError; + UColTokenParser sourceParser, targetParser; + int32_t sourceListLen = 0, targetListLen = 0; + ucol_tok_initTokenList(&sourceParser, sourceRules, sourceRulesLen, source->UCA, &status); + ucol_tok_initTokenList(&targetParser, targetRules, targetRulesLen, target->UCA, &status); + sourceListLen = ucol_tok_assembleTokenList(&sourceParser, &parseError, &status); + targetListLen = ucol_tok_assembleTokenList(&targetParser, &parseError, &status); + + if(sourceListLen != targetListLen) { + // different number of resets + result = FALSE; + } else { + UColToken *sourceReset = NULL, *targetReset = NULL; + UChar *sourceResetString = NULL, *targetResetString = NULL; + int32_t sourceStringLen = 0, targetStringLen = 0; + for(i = 0; i < sourceListLen; i++) { + sourceReset = sourceParser.lh[i].reset; + sourceResetString = sourceParser.source+(sourceReset->source & 0xFFFFFF); + sourceStringLen = sourceReset->source >> 24; + for(j = 0; j < sourceListLen; j++) { + targetReset = targetParser.lh[j].reset; + targetResetString = targetParser.source+(targetReset->source & 0xFFFFFF); + targetStringLen = targetReset->source >> 24; + if(sourceStringLen == targetStringLen && (u_strncmp(sourceResetString, targetResetString, sourceStringLen) == 0)) { + sourceReset = sourceParser.lh[i].first; + targetReset = targetParser.lh[j].first; + while(sourceReset != NULL && targetReset != NULL) { + sourceResetString = sourceParser.source+(sourceReset->source & 0xFFFFFF); + sourceStringLen = sourceReset->source >> 24; + targetResetString = targetParser.source+(targetReset->source & 0xFFFFFF); + targetStringLen = targetReset->source >> 24; + if(sourceStringLen != targetStringLen || (u_strncmp(sourceResetString, targetResetString, sourceStringLen) != 0)) { + result = FALSE; + goto returnResult; + } + // probably also need to check the expansions + if(sourceReset->expansion) { + if(!targetReset->expansion) { + result = FALSE; + goto returnResult; + } else { + // compare expansions + sourceResetString = sourceParser.source+(sourceReset->expansion& 0xFFFFFF); + sourceStringLen = sourceReset->expansion >> 24; + targetResetString = targetParser.source+(targetReset->expansion & 0xFFFFFF); + targetStringLen = targetReset->expansion >> 24; + if(sourceStringLen != targetStringLen || (u_strncmp(sourceResetString, targetResetString, sourceStringLen) != 0)) { + result = FALSE; + goto returnResult; + } + } + } else { + if(targetReset->expansion) { + result = FALSE; + goto returnResult; + } + } + sourceReset = sourceReset->next; + targetReset = targetReset->next; + } + if(sourceReset != targetReset) { // at least one is not NULL + // there are more tailored elements in one list + result = FALSE; + goto returnResult; + } + + + break; + } + } + // couldn't find the reset anchor, so the collators are not equal + if(j == sourceListLen) { + result = FALSE; + goto returnResult; + } + } + } + +returnResult: + ucol_tok_closeTokenList(&sourceParser); + ucol_tok_closeTokenList(&targetParser); + return result; + +} + +U_CAPI int32_t U_EXPORT2 +ucol_getDisplayName( const char *objLoc, + const char *dispLoc, + UChar *result, + int32_t resultLength, + UErrorCode *status) +{ + + if(U_FAILURE(*status)) return -1; + UnicodeString dst; + if(!(result==NULL && resultLength==0)) { + // NULL destination for pure preflighting: empty dummy string + // otherwise, alias the destination buffer + dst.setTo(result, 0, resultLength); + } + Collator::getDisplayName(Locale(objLoc), Locale(dispLoc), dst); + return dst.extract(result, resultLength, *status); +} + +U_CAPI const char* U_EXPORT2 +ucol_getAvailable(int32_t index) +{ + return uloc_getAvailable(index); +} + +U_CAPI int32_t U_EXPORT2 +ucol_countAvailable() +{ + return uloc_countAvailable(); +} + +#if !UCONFIG_NO_SERVICE +U_CAPI UEnumeration* U_EXPORT2 +ucol_openAvailableLocales(UErrorCode *status) { + // This is a wrapper over Collator::getAvailableLocales() + if (U_FAILURE(*status)) { + return NULL; + } + StringEnumeration *s = Collator::getAvailableLocales(); + if (s == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + return uenum_openStringEnumeration(s, status); +} +#endif + +// Note: KEYWORDS[0] != RESOURCE_NAME - alan + +static const char* RESOURCE_NAME = "collations"; + +static const char* KEYWORDS[] = { "collation" }; + +#define KEYWORD_COUNT (sizeof(KEYWORDS)/sizeof(KEYWORDS[0])) + +U_CAPI UEnumeration* U_EXPORT2 +ucol_getKeywords(UErrorCode *status) { + UEnumeration *result = NULL; + if (U_SUCCESS(*status)) { + return uenum_openCharStringsEnumeration(KEYWORDS, KEYWORD_COUNT, status); + } + return result; +} + +U_CAPI UEnumeration* U_EXPORT2 +ucol_getKeywordValues(const char *keyword, UErrorCode *status) { + // hard-coded to accept exactly one collation keyword + // modify if additional collation keyword is added later + if (U_SUCCESS(*status) && + keyword==NULL || uprv_strcmp(keyword, KEYWORDS[0])!=0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + return ures_getKeywordValues(U_ICUDATA_COLL, RESOURCE_NAME, status); +} + +U_CAPI int32_t U_EXPORT2 +ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity, + const char* keyword, const char* locale, + UBool* isAvailable, UErrorCode* status) { + // N.B.: Resource name is "collations" but keyword is "collation" + return ures_getFunctionalEquivalent(result, resultCapacity, U_ICUDATA_COLL, + "collations", keyword, locale, + isAvailable, TRUE, status); +} + +/* returns the locale name the collation data comes from */ +U_CAPI const char * U_EXPORT2 +ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status) { + return ucol_getLocaleByType(coll, type, status); +} + +U_CAPI const char * U_EXPORT2 +ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status) { + const char *result = NULL; + if(status == NULL || U_FAILURE(*status)) { + return NULL; + } + UTRACE_ENTRY(UTRACE_UCOL_GETLOCALE); + UTRACE_DATA1(UTRACE_INFO, "coll=%p", coll); + + switch(type) { + case ULOC_ACTUAL_LOCALE: + // validLocale is set only if service registration has explicitly set the + // requested and valid locales. if this is the case, the actual locale + // is considered to be the valid locale. + if (coll->validLocale != NULL) { + result = coll->validLocale; + } else if(coll->elements != NULL) { + result = ures_getLocale(coll->elements, status); + } + break; + case ULOC_VALID_LOCALE: + if (coll->validLocale != NULL) { + result = coll->validLocale; + } else if(coll->rb != NULL) { + result = ures_getLocale(coll->rb, status); + } + break; + case ULOC_REQUESTED_LOCALE: + result = coll->requestedLocale; + break; + default: + *status = U_ILLEGAL_ARGUMENT_ERROR; + } + UTRACE_DATA1(UTRACE_INFO, "result = %s", result); + UTRACE_EXIT_STATUS(*status); + return result; +} + +U_CAPI void U_EXPORT2 +ucol_setReqValidLocales(UCollator *coll, char *requestedLocaleToAdopt, char *validLocaleToAdopt) +{ + if (coll) { + if (coll->validLocale) { + uprv_free(coll->validLocale); + } + coll->validLocale = validLocaleToAdopt; + if (coll->requestedLocale) { // should always have + uprv_free(coll->requestedLocale); + } + coll->requestedLocale = requestedLocaleToAdopt; + } +} + +U_CAPI USet * U_EXPORT2 +ucol_getTailoredSet(const UCollator *coll, UErrorCode *status) +{ + if(status == NULL || U_FAILURE(*status)) { + return NULL; + } + if(coll == NULL || coll->UCA == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + UParseError parseError; + UColTokenParser src; + int32_t rulesLen = 0; + const UChar *rules = ucol_getRules(coll, &rulesLen); + const UChar *current = NULL; + UBool startOfRules = TRUE; + // we internally use the C++ class, for the following reasons: + // 1. we need to utilize canonical iterator, which is a C++ only class + // 2. canonical iterator returns UnicodeStrings - USet cannot take them + // 3. USet is internally really UnicodeSet, C is just a wrapper + UnicodeSet *tailored = new UnicodeSet(); + UnicodeString pattern; + UnicodeString empty; + CanonicalIterator it(empty, *status); + + + // The idea is to tokenize the rule set. For each non-reset token, + // we add all the canonicaly equivalent FCD sequences + ucol_tok_initTokenList(&src, rules, rulesLen, coll->UCA, status); + while ((current = ucol_tok_parseNextToken(&src, startOfRules, &parseError, status)) != NULL) { + startOfRules = FALSE; + if(src.parsedToken.strength != UCOL_TOK_RESET) { + const UChar *stuff = src.source+(src.parsedToken.charsOffset); + it.setSource(UnicodeString(stuff, src.parsedToken.charsLen), *status); + pattern = it.next(); + while(!pattern.isBogus()) { + if(Normalizer::quickCheck(pattern, UNORM_FCD, *status) != UNORM_NO) { + tailored->add(pattern); + } + pattern = it.next(); + } + } + } + ucol_tok_closeTokenList(&src); + return (USet *)tailored; +} + +#endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/i18n/ucol_sit.cpp b/icuSources/i18n/ucol_sit.cpp index a27ef83c..7fa8fb54 100644 --- a/icuSources/i18n/ucol_sit.cpp +++ b/icuSources/i18n/ucol_sit.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucol_sit.cpp @@ -13,6 +13,8 @@ * 03/12/2004 weiv Creation */ +#include "unicode/ustring.h" + #include "utracimp.h" #include "ucol_imp.h" #include "ucol_tok.h" @@ -424,6 +426,68 @@ ucol_sit_calculateWholeLocale(CollatorSpec *s) { } } + +U_CAPI void U_EXPORT2 +ucol_prepareShortStringOpen( const char *definition, + UBool, + UParseError *parseError, + UErrorCode *status) +{ + if(U_FAILURE(*status)) return; + + UParseError internalParseError; + + if(!parseError) { + parseError = &internalParseError; + } + parseError->line = 0; + parseError->offset = 0; + parseError->preContext[0] = 0; + parseError->postContext[0] = 0; + + + // first we want to pick stuff out of short string. + // we'll end up with an UCA version, locale and a bunch of + // settings + + // analyse the string in order to get everything we need. + const char *string = definition; + CollatorSpec s; + ucol_sit_initCollatorSpecs(&s); + string = ucol_sit_readSpecs(&s, definition, parseError, status); + ucol_sit_calculateWholeLocale(&s); + + char buffer[internalBufferSize]; + uprv_memset(buffer, 0, internalBufferSize); + uloc_canonicalize(s.locale, buffer, internalBufferSize, status); + + UResourceBundle *b = ures_open(U_ICUDATA_COLL, buffer, status); + /* we try to find stuff from keyword */ + UResourceBundle *collations = ures_getByKey(b, "collations", NULL, status); + UResourceBundle *collElem = NULL; + char keyBuffer[256]; + // if there is a keyword, we pick it up and try to get elements + if(!uloc_getKeywordValue(buffer, "collation", keyBuffer, 256, status)) { + // no keyword. we try to find the default setting, which will give us the keyword value + UResourceBundle *defaultColl = ures_getByKeyWithFallback(collations, "default", NULL, status); + if(U_SUCCESS(*status)) { + int32_t defaultKeyLen = 0; + const UChar *defaultKey = ures_getString(defaultColl, &defaultKeyLen, status); + u_UCharsToChars(defaultKey, keyBuffer, defaultKeyLen); + keyBuffer[defaultKeyLen] = 0; + } else { + *status = U_INTERNAL_PROGRAM_ERROR; + return; + } + ures_close(defaultColl); + } + collElem = ures_getByKeyWithFallback(collations, keyBuffer, collElem, status); + ures_close(collElem); + ures_close(collations); + ures_close(b); +} + + U_CAPI UCollator* U_EXPORT2 ucol_openFromShortString( const char *definition, UBool forceDefaults, @@ -461,7 +525,7 @@ ucol_openFromShortString( const char *definition, uprv_memset(buffer, 0, internalBufferSize); uloc_canonicalize(s.locale, buffer, internalBufferSize, status); - UCollator *result = ucol_open(s.locale, status); + UCollator *result = ucol_open(buffer, status); int32_t i = 0; for(i = 0; i < UCOL_ATTRIBUTE_COUNT; i++) { @@ -882,50 +946,96 @@ ucol_getAttributeOrDefault(const UCollator *coll, UColAttribute attr, UErrorCode struct contContext { const UCollator *coll; USet *conts; + USet *expansions; USet *removedContractions; + UBool addPrefixes; UErrorCode *status; }; static void -addContraction(const UCollator *coll, USet *contractions, UChar *buffer, int32_t bufLen, - uint32_t CE, int32_t rightIndex, UErrorCode *status) +addSpecial(contContext *context, UChar *buffer, int32_t bufLen, + uint32_t CE, int32_t leftIndex, int32_t rightIndex, UErrorCode *status) { - if(rightIndex == bufLen-1) { - *status = U_INTERNAL_PROGRAM_ERROR; - return; - } + const UCollator *coll = context->coll; + USet *contractions = context->conts; + USet *expansions = context->expansions; + UBool addPrefixes = context->addPrefixes; + const UChar *UCharOffset = (UChar *)coll->image+getContractOffset(CE); uint32_t newCE = *(coll->contractionCEs + (UCharOffset - coll->contractionIndex)); // we might have a contraction that ends from previous level - if(newCE != UCOL_NOT_FOUND && rightIndex > 1) { - uset_addString(contractions, buffer, rightIndex); - } + if(newCE != UCOL_NOT_FOUND) { + if(isSpecial(CE) && getCETag(CE) == CONTRACTION_TAG && isSpecial(newCE) && getCETag(newCE) == SPEC_PROC_TAG && addPrefixes) { + addSpecial(context, buffer, bufLen, newCE, leftIndex, rightIndex, status); + } + if(contractions && rightIndex-leftIndex > 1) { + uset_addString(contractions, buffer+leftIndex, rightIndex-leftIndex); + if(expansions && isSpecial(CE) && getCETag(CE) == EXPANSION_TAG) { + uset_addString(expansions, buffer+leftIndex, rightIndex-leftIndex); + } + } + } UCharOffset++; - while(*UCharOffset != 0xFFFF) { - newCE = *(coll->contractionCEs + (UCharOffset - coll->contractionIndex)); - buffer[rightIndex] = *UCharOffset; - if(isSpecial(newCE) && getCETag(newCE) == CONTRACTION_TAG) { - addContraction(coll, contractions, buffer, bufLen, newCE, rightIndex + 1, status); - } else { - uset_addString(contractions, buffer, rightIndex + 1); - } - UCharOffset++; + // check whether we're doing contraction or prefix + if(getCETag(CE) == SPEC_PROC_TAG && addPrefixes) { + if(leftIndex == 0) { + *status = U_INTERNAL_PROGRAM_ERROR; + return; + } + --leftIndex; + while(*UCharOffset != 0xFFFF) { + newCE = *(coll->contractionCEs + (UCharOffset - coll->contractionIndex)); + buffer[leftIndex] = *UCharOffset; + if(isSpecial(newCE) && (getCETag(newCE) == CONTRACTION_TAG || getCETag(newCE) == SPEC_PROC_TAG)) { + addSpecial(context, buffer, bufLen, newCE, leftIndex, rightIndex, status); + } else { + if(contractions) { + uset_addString(contractions, buffer+leftIndex, rightIndex-leftIndex); + } + if(expansions && isSpecial(newCE) && getCETag(newCE) == EXPANSION_TAG) { + uset_addString(expansions, buffer+leftIndex, rightIndex-leftIndex); + } + } + UCharOffset++; + } + } else if(getCETag(CE) == CONTRACTION_TAG) { + if(rightIndex == bufLen-1) { + *status = U_INTERNAL_PROGRAM_ERROR; + return; + } + while(*UCharOffset != 0xFFFF) { + newCE = *(coll->contractionCEs + (UCharOffset - coll->contractionIndex)); + buffer[rightIndex] = *UCharOffset; + if(isSpecial(newCE) && (getCETag(newCE) == CONTRACTION_TAG || getCETag(newCE) == SPEC_PROC_TAG)) { + addSpecial(context, buffer, bufLen, newCE, leftIndex, rightIndex+1, status); + } else { + if(contractions) { + uset_addString(contractions, buffer+leftIndex, rightIndex+1-leftIndex); + } + if(expansions && isSpecial(newCE) && getCETag(newCE) == EXPANSION_TAG) { + uset_addString(expansions, buffer+leftIndex, rightIndex+1-leftIndex); + } + } + UCharOffset++; + } } + } U_CDECL_BEGIN static UBool U_CALLCONV -_processContractions(const void *context, UChar32 start, UChar32 limit, uint32_t CE) +_processSpecials(const void *context, UChar32 start, UChar32 limit, uint32_t CE) { UErrorCode *status = ((contContext *)context)->status; - USet *unsafe = ((contContext *)context)->conts; + USet *expansions = ((contContext *)context)->expansions; USet *removed = ((contContext *)context)->removedContractions; - const UCollator *coll = ((contContext *)context)->coll; + UBool addPrefixes = ((contContext *)context)->addPrefixes; UChar contraction[internalBufferSize]; - if(isSpecial(CE) && getCETag(CE) == CONTRACTION_TAG) { + if(isSpecial(CE)) { + if(((getCETag(CE) == SPEC_PROC_TAG && addPrefixes) || getCETag(CE) == CONTRACTION_TAG)) { while(start < limit && U_SUCCESS(*status)) { // if there are suppressed contractions, we don't // want to add them. @@ -935,10 +1045,15 @@ _processContractions(const void *context, UChar32 start, UChar32 limit, uint32_t } // we start our contraction from middle, since we don't know if it // will grow toward right or left - contraction[0] = (UChar)start; - addContraction(coll, unsafe, contraction, internalBufferSize, CE, 1, status); + contraction[internalBufferSize/2] = (UChar)start; + addSpecial(((contContext *)context), contraction, internalBufferSize, CE, internalBufferSize/2, internalBufferSize/2+1, status); start++; } + } else if(expansions && getCETag(CE) == EXPANSION_TAG) { + while(start < limit && U_SUCCESS(*status)) { + uset_add(expansions, start++); + } + } } if(U_FAILURE(*status)) { return FALSE; @@ -947,11 +1062,6 @@ _processContractions(const void *context, UChar32 start, UChar32 limit, uint32_t } } -static int32_t U_CALLCONV -_getTrieFoldingOffset(uint32_t data) -{ - return (int32_t)(data&0xFFFFFF); -} U_CDECL_END @@ -970,47 +1080,60 @@ U_CAPI int32_t U_EXPORT2 ucol_getContractions( const UCollator *coll, USet *contractions, UErrorCode *status) +{ + ucol_getContractionsAndExpansions(coll, contractions, NULL, FALSE, status); + return uset_getItemCount(contractions); +} + +/** + * Get a set containing the expansions defined by the collator. The set includes + * both the UCA expansions and the expansions defined by the tailoring + * @param coll collator + * @param conts the set to hold the result + * @param addPrefixes add the prefix contextual elements to contractions + * @param status to hold the error code + * + * @draft ICU 3.4 + */ +U_CAPI void U_EXPORT2 +ucol_getContractionsAndExpansions( const UCollator *coll, + USet *contractions, + USet *expansions, + UBool addPrefixes, + UErrorCode *status) { if(U_FAILURE(*status)) { - return 0; + return; } - if(coll == NULL || contractions == NULL) { + if(coll == NULL) { *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; + return; } - uset_clear(contractions); + if(contractions) { + uset_clear(contractions); + } + if(expansions) { + uset_clear(expansions); + } int32_t rulesLen = 0; const UChar* rules = ucol_getRules(coll, &rulesLen); UColTokenParser src; ucol_tok_initTokenList(&src, rules, rulesLen, coll->UCA, status); - contContext c = { NULL, contractions, src.removeSet, status }; - - coll->mapping->getFoldingOffset = _getTrieFoldingOffset; - - // TODO: if you're supressing contractions in the tailoring - // you want to remove (or rather not include) contractions - // from the UCA. - // Probably want to pass a set of contraction starters that - // are suppressed. However, we don't want a dependency on - // the builder, so this is going to be hard to pull off. + contContext c = { NULL, contractions, expansions, src.removeSet, addPrefixes, status }; // Add the UCA contractions c.coll = coll->UCA; - utrie_enum(coll->UCA->mapping, NULL, _processContractions, &c); + utrie_enum(&coll->UCA->mapping, NULL, _processSpecials, &c); // This is collator specific. Add contractions from a collator c.coll = coll; c.removedContractions = NULL; - utrie_enum(coll->mapping, NULL, _processContractions, &c); + utrie_enum(&coll->mapping, NULL, _processSpecials, &c); ucol_tok_closeTokenList(&src); - - return uset_getItemCount(contractions); - } - U_CAPI int32_t U_EXPORT2 ucol_getUnsafeSet( const UCollator *coll, USet *unsafe, diff --git a/icuSources/i18n/ucol_tok.cpp b/icuSources/i18n/ucol_tok.cpp index c0f460a8..9d43d88e 100644 --- a/icuSources/i18n/ucol_tok.cpp +++ b/icuSources/i18n/ucol_tok.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -31,7 +31,7 @@ #include "util.h" U_CDECL_BEGIN -static int32_t U_EXPORT2 U_CALLCONV +static int32_t U_CALLCONV uhash_hashTokens(const UHashTok k) { int32_t hash = 0; @@ -54,7 +54,7 @@ uhash_hashTokens(const UHashTok k) return hash; } -static UBool U_EXPORT2 U_CALLCONV +static UBool U_CALLCONV uhash_compareTokens(const UHashTok key1, const UHashTok key2) { //uint32_t p1 = (uint32_t) key1.integer; @@ -1554,7 +1554,7 @@ uint32_t ucol_tok_assembleTokenList(UColTokenParser *src, UParseError *parseErro } else { /* there is both explicit and implicit expansion. We need to make a combination */ uprv_memcpy(src->extraCurrent, src->source + (expandNext & 0xFFFFFF), (expandNext >> 24)*sizeof(UChar)); uprv_memcpy(src->extraCurrent+(expandNext >> 24), src->source + src->parsedToken.extensionOffset, src->parsedToken.extensionLen*sizeof(UChar)); - sourceToken->expansion = (uint32_t)(((expandNext >> 24) + src->parsedToken.extensionLen)<<24 | (src->extraCurrent - src->source)); + sourceToken->expansion = (uint32_t)(((expandNext >> 24) + src->parsedToken.extensionLen)<<24 | (uint32_t)(src->extraCurrent - src->source)); src->extraCurrent += (expandNext >> 24) + src->parsedToken.extensionLen; } } @@ -1583,7 +1583,7 @@ uint32_t ucol_tok_assembleTokenList(UColTokenParser *src, UParseError *parseErro /* if the previous token was also a reset, */ /*this means that we have two consecutive resets */ /* and we want to remove the previous one if empty*/ - if(ListList[src->resultLen-1].first == NULL) { + if(src->resultLen > 0 && ListList[src->resultLen-1].first == NULL) { src->resultLen--; } } @@ -1820,7 +1820,7 @@ void ucol_tok_initTokenList(UColTokenParser *src, const UChar *rules, const uint if(U_FAILURE(*status)) { return; } - src->tailored = uhash_open(uhash_hashTokens, uhash_compareTokens, status); + src->tailored = uhash_open(uhash_hashTokens, uhash_compareTokens, NULL, status); if(U_FAILURE(*status)) { return; } diff --git a/icuSources/i18n/ucol_tok.h b/icuSources/i18n/ucol_tok.h index 3a598488..efd0a021 100644 --- a/icuSources/i18n/ucol_tok.h +++ b/icuSources/i18n/ucol_tok.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -43,7 +43,7 @@ /* this is space for the extra strings that need to be unquoted */ /* during the parsing of the rules */ -#define UCOL_TOK_EXTRA_RULE_SPACE_SIZE 2048 +#define UCOL_TOK_EXTRA_RULE_SPACE_SIZE 4096 typedef struct UColToken UColToken; typedef struct { diff --git a/icuSources/i18n/ucol_wgt.c b/icuSources/i18n/ucol_wgt.c index c0fbaaaf..f5313449 100644 --- a/icuSources/i18n/ucol_wgt.c +++ b/icuSources/i18n/ucol_wgt.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -31,11 +31,6 @@ # include <stdio.h> #endif -#if defined(UCOL_DEBUG) && defined(WIN32) - /* turn off "unreferenced formal parameter" */ -# pragma warning(disable: 4100) -#endif - /* collation element weight allocation -------------------------------------- */ /* helper functions for CE weights */ @@ -124,7 +119,7 @@ lengthenRange(WeightRange *range, uint32_t maxByte, uint32_t countBytes) { } /* for uprv_sortArray: sort ranges in weight order */ -static U_INLINE int32_t U_CALLCONV +static int32_t U_CALLCONV compareRanges(const void *context, const void *left, const void *right) { uint32_t l, r; diff --git a/icuSources/i18n/ucoleitr.cpp b/icuSources/i18n/ucoleitr.cpp index f386fb4e..d31a90f8 100644 --- a/icuSources/i18n/ucoleitr.cpp +++ b/icuSources/i18n/ucoleitr.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 2001-2003, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * @@ -31,19 +31,6 @@ typedef struct collIterate collIterator; /* public methods ---------------------------------------------------- */ -/** -* Since this is going to be deprecated, I'll leave it as it is -*/ -U_CAPI int32_t U_EXPORT2 -ucol_keyHashCode(const uint8_t *key, - int32_t length) -{ - - CollationKey newKey(key, length); - return newKey.hashCode(); -} - - U_CAPI UCollationElements* U_EXPORT2 ucol_openElements(const UCollator *coll, const UChar *text, @@ -115,15 +102,16 @@ U_CAPI int32_t U_EXPORT2 ucol_next(UCollationElements *elems, UErrorCode *status) { - uint32_t result; + int32_t result; if (U_FAILURE(*status)) { return UCOL_NULLORDER; } elems->reset_ = FALSE; - result = ucol_getNextCE(elems->iteratordata_.coll, &elems->iteratordata_, - status); + result = (int32_t)ucol_getNextCE(elems->iteratordata_.coll, + &elems->iteratordata_, + status); if (result == UCOL_NO_MORE_CES) { result = UCOL_NULLORDER; @@ -140,7 +128,7 @@ ucol_previous(UCollationElements *elems, } else { - uint32_t result; + int32_t result; if (elems->reset_ && (elems->iteratordata_.pos == elems->iteratordata_.string)) { @@ -155,8 +143,9 @@ ucol_previous(UCollationElements *elems, elems->reset_ = FALSE; - result = ucol_getPrevCE(elems->iteratordata_.coll, &(elems->iteratordata_), - status); + result = (int32_t)ucol_getPrevCE(elems->iteratordata_.coll, + &(elems->iteratordata_), + status); if (result == UCOL_NO_MORE_CES) { result = UCOL_NULLORDER; diff --git a/icuSources/i18n/ucsdet.cpp b/icuSources/i18n/ucsdet.cpp new file mode 100644 index 00000000..114f896f --- /dev/null +++ b/icuSources/i18n/ucsdet.cpp @@ -0,0 +1,234 @@ +/* + ******************************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ******************************************************************************** + */ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION +#include "unicode/ucsdet.h" +#include "csdetect.h" +#include "csmatch.h" + +#include "cmemory.h" + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +U_CDECL_BEGIN + +U_CAPI UCharsetDetector * U_EXPORT2 +ucsdet_open(UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return 0; + } + + CharsetDetector* csd = new CharsetDetector(*status); + + if (U_FAILURE(*status)) { + delete csd; + csd = NULL; + } + + return (UCharsetDetector *) csd; +} + +U_CAPI void U_EXPORT2 +ucsdet_close(UCharsetDetector *ucsd) +{ + CharsetDetector *csd = (CharsetDetector *) ucsd; + delete csd; +} + +U_CAPI void U_EXPORT2 +ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return; + } + + if (ucsd == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + CharsetDetector *csd = (CharsetDetector *) ucsd; + + csd->setText(textIn, len); +} + +U_CAPI const char * U_EXPORT2 +ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return NULL; + } + + if (ucsm == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + CharsetMatch *csm = (CharsetMatch *) ucsm; + + return csm->getName(); +} + +U_CAPI int32_t U_EXPORT2 +ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return 0; + } + + if (ucsm == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + CharsetMatch *csm = (CharsetMatch *) ucsm; + + return csm->getConfidence(); +} + +U_CAPI const char * U_EXPORT2 +ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return NULL; + } + + if (ucsm == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + CharsetMatch *csm = (CharsetMatch *) ucsm; + + return csm->getLanguage(); +} + +U_CAPI const UCharsetMatch * U_EXPORT2 +ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return NULL; + } + + if (ucsd == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + CharsetDetector *csd = (CharsetDetector *) ucsd; + + return (const UCharsetMatch *) csd->detect(*status); +} + +U_CAPI void U_EXPORT2 +ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return; + } + + if (ucsd == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + CharsetDetector *csd = (CharsetDetector *) ucsd; + + csd->setDeclaredEncoding(encoding,length); +} + +U_CAPI const UCharsetMatch** +ucsdet_detectAll(UCharsetDetector *ucsd, + int32_t *maxMatchesFound, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return NULL; + } + + if (ucsd == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + CharsetDetector *csd = (CharsetDetector *) ucsd; + + return (const UCharsetMatch**)csd->detectAll(*maxMatchesFound,*status); +} + +// U_CAPI const char * U_EXPORT2 +// ucsdet_getDetectableCharsetName(const UCharsetDetector *csd, int32_t index, UErrorCode *status) +// { +// if(U_FAILURE(*status)) { +// return 0; +// } +// return csd->getCharsetName(index,*status); +// } + +// U_CAPI int32_t U_EXPORT2 +// ucsdet_getDetectableCharsetsCount(const UCharsetDetector *csd, UErrorCode *status) +// { +// if(U_FAILURE(*status)) { +// return -1; +// } +// return UCharsetDetector::getDetectableCount(); +// } + +U_CAPI UBool U_EXPORT2 +ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd) +{ + // todo: could use an error return... + if (ucsd == NULL) { + return FALSE; + } + + CharsetDetector *csd = (CharsetDetector *) ucsd; + + return csd->getStripTagsFlag(); +} + +U_CAPI UBool U_EXPORT2 +ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter) +{ + // todo: could use an error return... + if (ucsd == NULL) { + return FALSE; + } + + CharsetDetector *csd = (CharsetDetector *) ucsd; + UBool prev = csd->getStripTagsFlag(); + + csd->setStripTagsFlag(filter); + + return prev; +} + +U_CAPI int32_t U_EXPORT2 +ucsdet_getUChars(const UCharsetMatch *ucsm, + UChar *buf, int32_t cap, UErrorCode *status) +{ + if(U_FAILURE(*status)) { + return 0; + } + + if (ucsm == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + CharsetMatch *csm = (CharsetMatch *) ucsm; + + return csm->getUChars(buf, cap, status); +} +U_CDECL_END + +#endif diff --git a/icuSources/i18n/ucurr.cpp b/icuSources/i18n/ucurr.cpp index 29332db1..00d05245 100644 --- a/icuSources/i18n/ucurr.cpp +++ b/icuSources/i18n/ucurr.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -21,6 +21,7 @@ #include "uassert.h" #include "mutex.h" #include "ucln_in.h" +#include "uenumimp.h" //------------------------------------------------------------ // Constants @@ -719,6 +720,381 @@ ucurr_getRoundingIncrement(const UChar* currency, UErrorCode* ec) { return double(data[1]) / POW10[data[0]]; } +U_CDECL_BEGIN + +typedef struct UCurrencyContext { + uint32_t currType; /* UCurrCurrencyType */ + uint32_t listIdx; +} UCurrencyContext; + +/* +Please keep this list in alphabetical order. +You can look at the CLDR supplemental data or ISO-4217 for the meaning of some +of these items. +ISO-4217: http://www.iso.org/iso/en/prods-services/popstds/currencycodeslist.html +*/ +static const struct CurrencyList { + const char *currency; + uint32_t currType; +} gCurrencyList[] = { + {"ADP", UCURR_COMMON|UCURR_DEPRECATED}, + {"AED", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"AFA", UCURR_COMMON|UCURR_DEPRECATED}, + {"AFN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ALL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"AMD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ANG", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"AOA", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"AOK", UCURR_COMMON|UCURR_DEPRECATED}, + {"AON", UCURR_COMMON|UCURR_DEPRECATED}, + {"AOR", UCURR_COMMON|UCURR_DEPRECATED}, + {"ARA", UCURR_COMMON|UCURR_DEPRECATED}, + {"ARP", UCURR_COMMON|UCURR_DEPRECATED}, + {"ARS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ATS", UCURR_COMMON|UCURR_DEPRECATED}, + {"AUD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"AWG", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"AZM", UCURR_COMMON|UCURR_DEPRECATED}, + {"AZN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BAD", UCURR_COMMON|UCURR_DEPRECATED}, + {"BAM", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BBD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BDT", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BEC", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"BEF", UCURR_COMMON|UCURR_DEPRECATED}, + {"BEL", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"BGL", UCURR_COMMON|UCURR_DEPRECATED}, + {"BGN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BHD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BIF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BMD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BND", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BOB", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BOP", UCURR_COMMON|UCURR_DEPRECATED}, + {"BOV", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"BRB", UCURR_COMMON|UCURR_DEPRECATED}, + {"BRC", UCURR_COMMON|UCURR_DEPRECATED}, + {"BRE", UCURR_COMMON|UCURR_DEPRECATED}, + {"BRL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BRN", UCURR_COMMON|UCURR_DEPRECATED}, + {"BRR", UCURR_COMMON|UCURR_DEPRECATED}, + {"BSD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BTN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BUK", UCURR_COMMON|UCURR_DEPRECATED}, + {"BWP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BYB", UCURR_COMMON|UCURR_DEPRECATED}, + {"BYR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BZD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CAD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CDF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CHE", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"CHF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CHW", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"CLF", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"CLP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CNX", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"CNY", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"COP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"COU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"CRC", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CSD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CSK", UCURR_COMMON|UCURR_DEPRECATED}, + {"CUP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CVE", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CYP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CZK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"DDM", UCURR_COMMON|UCURR_DEPRECATED}, + {"DEM", UCURR_COMMON|UCURR_DEPRECATED}, + {"DJF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"DKK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"DOP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"DZD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ECS", UCURR_COMMON|UCURR_DEPRECATED}, + {"ECV", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"EEK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"EGP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"EQE", UCURR_COMMON|UCURR_DEPRECATED}, + {"ERN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ESA", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"ESB", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"ESP", UCURR_COMMON|UCURR_DEPRECATED}, + {"ETB", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"EUR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"FIM", UCURR_COMMON|UCURR_DEPRECATED}, + {"FJD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"FKP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"FRF", UCURR_COMMON|UCURR_DEPRECATED}, + {"GBP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GEK", UCURR_COMMON|UCURR_DEPRECATED}, + {"GEL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GHC", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GIP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GMD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GNF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GNS", UCURR_COMMON|UCURR_DEPRECATED}, + {"GQE", UCURR_COMMON|UCURR_DEPRECATED}, + {"GRD", UCURR_COMMON|UCURR_DEPRECATED}, + {"GTQ", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GWE", UCURR_COMMON|UCURR_DEPRECATED}, + {"GWP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GYD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"HKD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"HNL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"HRD", UCURR_COMMON|UCURR_DEPRECATED}, + {"HRK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"HTG", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"HUF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"IDR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"IEP", UCURR_COMMON|UCURR_DEPRECATED}, + {"ILP", UCURR_COMMON|UCURR_DEPRECATED}, + {"ILS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"INR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"IQD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"IRR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ISK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ITL", UCURR_COMMON|UCURR_DEPRECATED}, + {"JMD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"JOD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"JPY", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KES", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KGS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KHR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KMF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KPW", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KRW", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KWD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KYD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"KZT", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LAK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LBP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LKR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LRD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LSL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LSM", UCURR_COMMON|UCURR_DEPRECATED}, + {"LTL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LTT", UCURR_COMMON|UCURR_DEPRECATED}, + {"LUC", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"LUF", UCURR_COMMON|UCURR_DEPRECATED}, + {"LUL", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"LVL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LVR", UCURR_COMMON|UCURR_DEPRECATED}, + {"LYD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MAD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MAF", UCURR_COMMON|UCURR_DEPRECATED}, + {"MDL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MGA", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MGF", UCURR_COMMON|UCURR_DEPRECATED}, + {"MKD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MLF", UCURR_COMMON|UCURR_DEPRECATED}, + {"MMK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MNT", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MOP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MRO", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MTL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MTP", UCURR_COMMON|UCURR_DEPRECATED}, + {"MUR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MVR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MWK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MXN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MXP", UCURR_COMMON|UCURR_DEPRECATED}, + {"MXV", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"MYR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MZE", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MZM", UCURR_COMMON|UCURR_DEPRECATED}, + {"MZN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"NAD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"NGN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"NIC", UCURR_COMMON|UCURR_DEPRECATED}, + {"NIO", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"NLG", UCURR_COMMON|UCURR_DEPRECATED}, + {"NOK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"NPR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"NZD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"OMR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PAB", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PEI", UCURR_COMMON|UCURR_DEPRECATED}, + {"PEN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PES", UCURR_COMMON|UCURR_DEPRECATED}, + {"PGK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PHP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PKR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PLN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"PLZ", UCURR_COMMON|UCURR_DEPRECATED}, + {"PTE", UCURR_COMMON|UCURR_DEPRECATED}, + {"PYG", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"QAR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"RHD", UCURR_COMMON|UCURR_DEPRECATED}, + {"ROL", UCURR_COMMON|UCURR_DEPRECATED}, + {"RON", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"RUB", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"RUR", UCURR_COMMON|UCURR_DEPRECATED}, + {"RWF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SAR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SBD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SCR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SDD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SDP", UCURR_COMMON|UCURR_DEPRECATED}, + {"SEK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SGD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SHP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SIT", UCURR_COMMON|UCURR_DEPRECATED}, + {"SKK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SLL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SOS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SRD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SRG", UCURR_COMMON|UCURR_DEPRECATED}, + {"STD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SUR", UCURR_COMMON|UCURR_DEPRECATED}, + {"SVC", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SYP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SZL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"THB", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TJR", UCURR_COMMON|UCURR_DEPRECATED}, + {"TJS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TMM", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TND", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TOP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TPE", UCURR_COMMON|UCURR_DEPRECATED}, + {"TRL", UCURR_COMMON|UCURR_DEPRECATED}, + {"TRY", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TTD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TWD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"TZS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"UAH", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"UAK", UCURR_COMMON|UCURR_DEPRECATED}, + {"UGS", UCURR_COMMON|UCURR_DEPRECATED}, + {"UGX", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"USD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"USN", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"USS", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"UYP", UCURR_COMMON|UCURR_DEPRECATED}, + {"UYU", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"UZS", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"VEB", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"VND", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"VUV", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"WST", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"XAF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"XAG", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XAU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XBA", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XBB", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XBC", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XBD", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XCD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"XDR", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XEU", UCURR_UNCOMMON|UCURR_DEPRECATED}, + {"XFO", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XFU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XOF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"XPD", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XPF", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"XPT", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XRE", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XTS", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XXX", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"YDD", UCURR_COMMON|UCURR_DEPRECATED}, + {"YER", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"YUD", UCURR_COMMON|UCURR_DEPRECATED}, + {"YUM", UCURR_COMMON|UCURR_DEPRECATED}, + {"YUN", UCURR_COMMON|UCURR_DEPRECATED}, + {"ZAL", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"ZAR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ZMK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"ZRN", UCURR_COMMON|UCURR_DEPRECATED}, + {"ZRZ", UCURR_COMMON|UCURR_DEPRECATED}, + {"ZWD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + { NULL, 0 } // Leave here to denote the end of the list. +}; + +#define UCURR_MATCHES_BITMASK(variable, typeToMatch) \ + ((typeToMatch) == UCURR_ALL || ((variable) & (typeToMatch)) == (typeToMatch)) + +static int32_t U_CALLCONV +ucurr_countCurrencyList(UEnumeration *enumerator, UErrorCode * /*pErrorCode*/) { + UCurrencyContext *myContext = (UCurrencyContext *)(enumerator->context); + uint32_t currType = myContext->currType; + int32_t count = 0; + + /* Count the number of items matching the type we are looking for. */ + for (int32_t idx = 0; gCurrencyList[idx].currency != NULL; idx++) { + if (UCURR_MATCHES_BITMASK(gCurrencyList[idx].currType, currType)) { + count++; + } + } + return count; +} + +static const char* U_CALLCONV +ucurr_nextCurrencyList(UEnumeration *enumerator, + int32_t* resultLength, + UErrorCode * /*pErrorCode*/) +{ + UCurrencyContext *myContext = (UCurrencyContext *)(enumerator->context); + + /* Find the next in the list that matches the type we are looking for. */ + while (myContext->listIdx < (sizeof(gCurrencyList)/sizeof(gCurrencyList[0]))-1) { + const struct CurrencyList *currItem = &gCurrencyList[myContext->listIdx++]; + if (UCURR_MATCHES_BITMASK(currItem->currType, myContext->currType)) + { + if (resultLength) { + *resultLength = 3; /* Currency codes are only 3 chars long */ + } + return currItem->currency; + } + } + /* We enumerated too far. */ + if (resultLength) { + *resultLength = 0; + } + return NULL; +} + +static void U_CALLCONV +ucurr_resetCurrencyList(UEnumeration *enumerator, UErrorCode * /*pErrorCode*/) { + ((UCurrencyContext *)(enumerator->context))->listIdx = 0; +} + +static void U_CALLCONV +ucurr_closeCurrencyList(UEnumeration *enumerator) { + uprv_free(enumerator->context); + uprv_free(enumerator); +} + +static const UEnumeration gEnumCurrencyList = { + NULL, + NULL, + ucurr_closeCurrencyList, + ucurr_countCurrencyList, + uenum_unextDefault, + ucurr_nextCurrencyList, + ucurr_resetCurrencyList +}; +U_CDECL_END + +U_CAPI UEnumeration * U_EXPORT2 +ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode) { + UEnumeration *myEnum = NULL; + UCurrencyContext *myContext; + + myEnum = (UEnumeration*)uprv_malloc(sizeof(UEnumeration)); + if (myEnum == NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memcpy(myEnum, &gEnumCurrencyList, sizeof(UEnumeration)); + myContext = (UCurrencyContext*)uprv_malloc(sizeof(UCurrencyContext)); + if (myContext == NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + uprv_free(myEnum); + return NULL; + } + myContext->currType = currType; + myContext->listIdx = 0; + myEnum->context = myContext; + return myEnum; +} + #endif /* #if !UCONFIG_NO_FORMATTING */ //eof diff --git a/icuSources/i18n/udat.cpp b/icuSources/i18n/udat.cpp index eb6966f7..7834b4cb 100644 --- a/icuSources/i18n/udat.cpp +++ b/icuSources/i18n/udat.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ @@ -35,54 +35,48 @@ udat_open(UDateFormatStyle timeStyle, int32_t patternLength, UErrorCode *status) { - if(U_FAILURE(*status)) - { + DateFormat *fmt; + if(U_FAILURE(*status)) { return 0; } - if(timeStyle != UDAT_IGNORE) - { - DateFormat *fmt; - if(locale == 0) + if(timeStyle != UDAT_IGNORE) { + if(locale == 0) { fmt = DateFormat::createDateTimeInstance((DateFormat::EStyle)dateStyle, (DateFormat::EStyle)timeStyle); - else + } + else { fmt = DateFormat::createDateTimeInstance((DateFormat::EStyle)dateStyle, (DateFormat::EStyle)timeStyle, Locale(locale)); - - if(fmt == 0) { - *status = U_MEMORY_ALLOCATION_ERROR; - return 0; } + } + else { + UnicodeString pat((UBool)(patternLength == -1), pattern, patternLength); - if(tzID != 0) { - TimeZone *zone = TimeZone::createTimeZone(UnicodeString((UBool)(tzIDLength == -1), tzID, tzIDLength)); - if(zone == 0) { - *status = U_MEMORY_ALLOCATION_ERROR; - delete fmt; - return 0; - } - fmt->adoptTimeZone(zone); + if(locale == 0) { + fmt = new SimpleDateFormat(pat, *status); + } + else { + fmt = new SimpleDateFormat(pat, Locale(locale), *status); } - - return (UDateFormat*)fmt; } - else - { - const UnicodeString pat = UnicodeString((UBool)(patternLength == -1), pattern, patternLength); - UDateFormat *retVal = 0; - if(locale == 0) - retVal = (UDateFormat*)new SimpleDateFormat(pat, *status); - else - retVal = (UDateFormat*)new SimpleDateFormat(pat, Locale(locale), *status); + if(fmt == 0) { + *status = U_MEMORY_ALLOCATION_ERROR; + return 0; + } - if(retVal == 0) { + if(tzID != 0) { + TimeZone *zone = TimeZone::createTimeZone(UnicodeString((UBool)(tzIDLength == -1), tzID, tzIDLength)); + if(zone == 0) { *status = U_MEMORY_ALLOCATION_ERROR; + delete fmt; return 0; } - return retVal; + fmt->adoptTimeZone(zone); } + + return (UDateFormat*)fmt; } @@ -321,49 +315,35 @@ udat_getSymbols(const UDateFormat *fmt, const DateFormatSymbols *syms = ((SimpleDateFormat*)fmt)->getDateFormatSymbols(); int32_t count; - const UnicodeString *res; + const UnicodeString *res = NULL; switch(type) { case UDAT_ERAS: res = syms->getEras(count); - if(index < count) { - return res[index].extract(result, resultLength, *status); - } + break; + + case UDAT_ERA_NAMES: + res = syms->getEraNames(count); break; case UDAT_MONTHS: res = syms->getMonths(count); - if(index < count) { - return res[index].extract(result, resultLength, *status); - } break; case UDAT_SHORT_MONTHS: res = syms->getShortMonths(count); - if(index < count) { - return res[index].extract(result, resultLength, *status); - } break; case UDAT_WEEKDAYS: res = syms->getWeekdays(count); - if(index < count) { - return res[index].extract(result, resultLength, *status); - } break; case UDAT_SHORT_WEEKDAYS: res = syms->getShortWeekdays(count); - if(index < count) { - return res[index].extract(result, resultLength, *status); - } break; case UDAT_AM_PMS: res = syms->getAmPmStrings(count); - if(index < count) { - return res[index].extract(result, resultLength, *status); - } break; case UDAT_LOCALIZED_CHARS: @@ -377,8 +357,60 @@ udat_getSymbols(const UDateFormat *fmt, syms->getLocalPatternChars(res1); return res1.extract(result, resultLength, *status); } + + case UDAT_NARROW_MONTHS: + res = syms->getMonths(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); + break; + + case UDAT_NARROW_WEEKDAYS: + res = syms->getWeekdays(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); + break; + + case UDAT_STANDALONE_MONTHS: + res = syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + break; + + case UDAT_STANDALONE_SHORT_MONTHS: + res = syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + break; + + case UDAT_STANDALONE_NARROW_MONTHS: + res = syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); + break; + + case UDAT_STANDALONE_WEEKDAYS: + res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + break; + + case UDAT_STANDALONE_SHORT_WEEKDAYS: + res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + break; + + case UDAT_STANDALONE_NARROW_WEEKDAYS: + res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); + break; + + case UDAT_QUARTERS: + res = syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE); + break; + + case UDAT_SHORT_QUARTERS: + res = syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); + break; + + case UDAT_STANDALONE_QUARTERS: + res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + break; + + case UDAT_STANDALONE_SHORT_QUARTERS: + res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + break; + } + if(index < count) { + return res[index].extract(result, resultLength, *status); + } return 0; } @@ -418,6 +450,59 @@ udat_countSymbols( const UDateFormat *fmt, case UDAT_LOCALIZED_CHARS: count = 1; break; + + case UDAT_ERA_NAMES: + syms->getEraNames(count); + break; + + case UDAT_NARROW_MONTHS: + syms->getMonths(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); + break; + + case UDAT_NARROW_WEEKDAYS: + syms->getWeekdays(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); + break; + + case UDAT_STANDALONE_MONTHS: + syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + break; + + case UDAT_STANDALONE_SHORT_MONTHS: + syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + break; + + case UDAT_STANDALONE_NARROW_MONTHS: + syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); + break; + + case UDAT_STANDALONE_WEEKDAYS: + syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + break; + + case UDAT_STANDALONE_SHORT_WEEKDAYS: + syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + break; + + case UDAT_STANDALONE_NARROW_WEEKDAYS: + syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); + break; + + case UDAT_QUARTERS: + syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE); + break; + + case UDAT_SHORT_QUARTERS: + syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); + break; + + case UDAT_STANDALONE_QUARTERS: + syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + break; + + case UDAT_STANDALONE_SHORT_QUARTERS: + syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + break; + } return count; @@ -473,6 +558,13 @@ public: setSymbol(syms->fEras, syms->fErasCount, index, value, valueLength, errorCode); } + static void + setEraName(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fEraNames, syms->fEraNamesCount, index, value, valueLength, errorCode); + } + static void setMonth(DateFormatSymbols *syms, int32_t index, const UChar *value, int32_t valueLength, UErrorCode &errorCode) @@ -487,6 +579,34 @@ public: setSymbol(syms->fShortMonths, syms->fShortMonthsCount, index, value, valueLength, errorCode); } + static void + setNarrowMonth(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fNarrowMonths, syms->fNarrowMonthsCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneMonth(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneMonths, syms->fStandaloneMonthsCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneShortMonth(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneShortMonths, syms->fStandaloneShortMonthsCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneNarrowMonth(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneNarrowMonths, syms->fStandaloneNarrowMonthsCount, index, value, valueLength, errorCode); + } + static void setWeekday(DateFormatSymbols *syms, int32_t index, const UChar *value, int32_t valueLength, UErrorCode &errorCode) @@ -501,6 +621,62 @@ public: setSymbol(syms->fShortWeekdays, syms->fShortWeekdaysCount, index, value, valueLength, errorCode); } + static void + setNarrowWeekday(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fNarrowWeekdays, syms->fNarrowWeekdaysCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneWeekday(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneWeekdays, syms->fStandaloneWeekdaysCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneShortWeekday(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneShortWeekdays, syms->fStandaloneShortWeekdaysCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneNarrowWeekday(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneNarrowWeekdays, syms->fStandaloneNarrowWeekdaysCount, index, value, valueLength, errorCode); + } + + static void + setQuarter(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fQuarters, syms->fQuartersCount, index, value, valueLength, errorCode); + } + + static void + setShortQuarter(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fShortQuarters, syms->fShortQuartersCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneQuarter(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneQuarters, syms->fStandaloneQuartersCount, index, value, valueLength, errorCode); + } + + static void + setStandaloneShortQuarter(DateFormatSymbols *syms, int32_t index, + const UChar *value, int32_t valueLength, UErrorCode &errorCode) + { + setSymbol(syms->fStandaloneShortQuarters, syms->fStandaloneShortQuartersCount, index, value, valueLength, errorCode); + } + static void setAmPm(DateFormatSymbols *syms, int32_t index, const UChar *value, int32_t valueLength, UErrorCode &errorCode) @@ -526,6 +702,7 @@ udat_setSymbols( UDateFormat *format, int32_t valueLength, UErrorCode *status) { + if(U_FAILURE(*status)) return; DateFormatSymbols *syms = (DateFormatSymbols *)((SimpleDateFormat *)format)->getDateFormatSymbols(); @@ -535,6 +712,10 @@ udat_setSymbols( UDateFormat *format, DateFormatSymbolsSingleSetter::setEra(syms, index, value, valueLength, *status); break; + case UDAT_ERA_NAMES: + DateFormatSymbolsSingleSetter::setEraName(syms, index, value, valueLength, *status); + break; + case UDAT_MONTHS: DateFormatSymbolsSingleSetter::setMonth(syms, index, value, valueLength, *status); break; @@ -543,6 +724,22 @@ udat_setSymbols( UDateFormat *format, DateFormatSymbolsSingleSetter::setShortMonth(syms, index, value, valueLength, *status); break; + case UDAT_NARROW_MONTHS: + DateFormatSymbolsSingleSetter::setNarrowMonth(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_MONTHS: + DateFormatSymbolsSingleSetter::setStandaloneMonth(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_SHORT_MONTHS: + DateFormatSymbolsSingleSetter::setStandaloneShortMonth(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_NARROW_MONTHS: + DateFormatSymbolsSingleSetter::setStandaloneNarrowMonth(syms, index, value, valueLength, *status); + break; + case UDAT_WEEKDAYS: DateFormatSymbolsSingleSetter::setWeekday(syms, index, value, valueLength, *status); break; @@ -551,6 +748,38 @@ udat_setSymbols( UDateFormat *format, DateFormatSymbolsSingleSetter::setShortWeekday(syms, index, value, valueLength, *status); break; + case UDAT_NARROW_WEEKDAYS: + DateFormatSymbolsSingleSetter::setNarrowWeekday(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_WEEKDAYS: + DateFormatSymbolsSingleSetter::setStandaloneWeekday(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_SHORT_WEEKDAYS: + DateFormatSymbolsSingleSetter::setStandaloneShortWeekday(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_NARROW_WEEKDAYS: + DateFormatSymbolsSingleSetter::setStandaloneNarrowWeekday(syms, index, value, valueLength, *status); + break; + + case UDAT_QUARTERS: + DateFormatSymbolsSingleSetter::setQuarter(syms, index, value, valueLength, *status); + break; + + case UDAT_SHORT_QUARTERS: + DateFormatSymbolsSingleSetter::setShortQuarter(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_QUARTERS: + DateFormatSymbolsSingleSetter::setStandaloneQuarter(syms, index, value, valueLength, *status); + break; + + case UDAT_STANDALONE_SHORT_QUARTERS: + DateFormatSymbolsSingleSetter::setStandaloneShortQuarter(syms, index, value, valueLength, *status); + break; + case UDAT_AM_PMS: DateFormatSymbolsSingleSetter::setAmPm(syms, index, value, valueLength, *status); break; @@ -558,6 +787,11 @@ udat_setSymbols( UDateFormat *format, case UDAT_LOCALIZED_CHARS: DateFormatSymbolsSingleSetter::setLocalPatternChars(syms, value, valueLength, *status); break; + + default: + *status = U_UNSUPPORTED_ERROR; + break; + } } diff --git a/icuSources/i18n/ulocdata.c b/icuSources/i18n/ulocdata.c index fffe2faa..68c3d1d0 100644 --- a/icuSources/i18n/ulocdata.c +++ b/icuSources/i18n/ulocdata.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2003-2004, International Business Machines * +* Copyright (C) 2003-2005, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -11,52 +11,167 @@ * indentation:4 * * created on: 2003Oct21 -* created by: Ram Viswanadha +* created by: Ram Viswanadha,John Emmons */ +#include "cmemory.h" +#include "unicode/ustring.h" #include "unicode/ulocdata.h" -#define EXEMPLAR_CHARS "ExemplarCharacters" #define MEASUREMENT_SYSTEM "MeasurementSystem" #define PAPER_SIZE "PaperSize" -U_CAPI USet* U_EXPORT2 -ulocdata_getExemplarSet(USet *fillIn, const char *localeID, - uint32_t options, UErrorCode *status){ +/** A locale data object. + * For usage in C programs. + * @draft ICU 3.4 + */ +struct ULocaleData { + /** + * Controls the "No Substitute" behavior of this locale data object + */ + UBool noSubstitute; + + /** + * Pointer to the resource bundle associated with this locale data object + */ + UResourceBundle *bundle; +}; + +U_CAPI ULocaleData* U_EXPORT2 +ulocdata_open(const char *localeID, UErrorCode *status) +{ + ULocaleData *uld; + + if (U_FAILURE(*status)) { + return NULL; + } + + uld = (ULocaleData *)uprv_malloc(sizeof(ULocaleData)); + if (uld == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return(NULL); + } + + + uld->noSubstitute = FALSE; + uld->bundle = ures_open(NULL, localeID, status); + + if (U_FAILURE(*status)) { + uprv_free(uld); + return NULL; + } + + return uld; +} + +U_CAPI void U_EXPORT2 +ulocdata_close(ULocaleData *uld) +{ + if ( uld != NULL ) { + ures_close(uld->bundle); + uprv_free(uld); + } +} + +U_CAPI void U_EXPORT2 +ulocdata_setNoSubstitute(ULocaleData *uld, UBool setting) +{ + uld->noSubstitute = setting; +} + +U_CAPI UBool U_EXPORT2 +ulocdata_getNoSubstitute(ULocaleData *uld) +{ + return uld->noSubstitute; +} + +U_CAPI USet* U_EXPORT2 +ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn, + uint32_t options, ULocaleDataExemplarSetType extype, UErrorCode *status){ - UResourceBundle *bundle = NULL; + const char* exemplarSetTypes[] = { "ExemplarCharacters", "AuxExemplarCharacters" }; const UChar *exemplarChars = NULL; int32_t len = 0; UErrorCode localStatus = U_ZERO_ERROR; - if (U_FAILURE(*status)){ + if (U_FAILURE(*status)) return NULL; - } - bundle = ures_open(NULL, localeID, status); - if (U_FAILURE(*status)) { - return NULL; + exemplarChars = ures_getStringByKey(uld->bundle, exemplarSetTypes[extype], &len, &localStatus); + if ( (localStatus == U_USING_DEFAULT_WARNING) && uld->noSubstitute ) { + localStatus = U_MISSING_RESOURCE_ERROR; } - - exemplarChars = ures_getStringByKey(bundle, EXEMPLAR_CHARS, &len, &localStatus); - if (U_FAILURE(localStatus) || (*status != U_USING_DEFAULT_WARNING && localStatus != U_ZERO_ERROR)) { + + if (localStatus != U_ZERO_ERROR) { *status = localStatus; } - if(fillIn != NULL){ + if (U_FAILURE(*status)) + return NULL; + + if(fillIn != NULL) uset_applyPattern(fillIn, exemplarChars, len, USET_IGNORE_SPACE | options, status); - }else{ + else fillIn = uset_openPatternOptions(exemplarChars, len, USET_IGNORE_SPACE | options, status); - } - ures_close(bundle); - return fillIn; } +U_CAPI int32_t U_EXPORT2 +ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type, + UChar *result, int32_t resultLength, UErrorCode *status){ + + const char* delimiterKeys[] = { "quotationStart", + "quotationEnd", + "alternateQuotationStart", + "alternateQuotationEnd" }; + + + UResourceBundle *delimiterBundle; + int32_t len = 0; + const UChar *delimiter = NULL; + UErrorCode localStatus = U_ZERO_ERROR; + + if (U_FAILURE(*status)) + return 0; + + delimiterBundle = ures_getByKey(uld->bundle, "delimiters", NULL, &localStatus); + + if ( (localStatus == U_USING_DEFAULT_WARNING) && uld->noSubstitute ) { + localStatus = U_MISSING_RESOURCE_ERROR; + } + + if (localStatus != U_ZERO_ERROR) { + *status = localStatus; + } + + if (U_FAILURE(*status)){ + ures_close(delimiterBundle); + return 0; + } + + delimiter = ures_getStringByKey(delimiterBundle, delimiterKeys[type], &len, &localStatus); + ures_close(delimiterBundle); + + if ( (localStatus == U_USING_DEFAULT_WARNING) && uld->noSubstitute ) { + localStatus = U_MISSING_RESOURCE_ERROR; + } + + if (localStatus != U_ZERO_ERROR) { + *status = localStatus; + } + + if (U_FAILURE(*status)){ + return 0; + } + + u_strncpy(result,delimiter,resultLength); + return len; +} + U_CAPI UMeasurementSystem U_EXPORT2 ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status){ diff --git a/icuSources/i18n/umsg.cpp b/icuSources/i18n/umsg.cpp index 2e3ea198..8a58ee04 100644 --- a/icuSources/i18n/umsg.cpp +++ b/icuSources/i18n/umsg.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -30,6 +30,7 @@ #include "unicode/unistr.h" #include "cpputils.h" #include "uassert.h" +#include "ustr_imp.h" U_NAMESPACE_USE @@ -601,18 +602,105 @@ umsg_vparse(const UMessageFormat *fmt, delete [] args; } -U_CAPI const char* U_EXPORT2 -umsg_getLocaleByType(const UMessageFormat *fmt, - ULocDataLocaleType type, - UErrorCode* status) +#define SINGLE_QUOTE ((UChar)0x0027) +#define CURLY_BRACE_LEFT ((UChar)0x007B) +#define CURLY_BRACE_RIGHT ((UChar)0x007D) + +#define STATE_INITIAL 0 +#define STATE_SINGLE_QUOTE 1 +#define STATE_IN_QUOTE 2 +#define STATE_MSG_ELEMENT 3 + +#define MAppend(c) if (len < destCapacity) dest[len++] = c; else len++ + +int32_t umsg_autoQuoteApostrophe(const UChar* pattern, + int32_t patternLength, + UChar* dest, + int32_t destCapacity, + UErrorCode* ec) { - if (fmt == NULL) { - if (U_SUCCESS(*status)) { - *status = U_ILLEGAL_ARGUMENT_ERROR; + int32_t state = STATE_INITIAL; + int32_t braceCount = 0; + int32_t len = 0; + + if (ec == NULL || U_FAILURE(*ec)) { + return -1; + } + + if (pattern == NULL || patternLength < -1 || (dest == NULL && destCapacity > 0)) { + *ec = U_ILLEGAL_ARGUMENT_ERROR; + return -1; + } + + if (patternLength == -1) { + patternLength = u_strlen(pattern); + } + + for (int i = 0; i < patternLength; ++i) { + UChar c = pattern[i]; + switch (state) { + case STATE_INITIAL: + switch (c) { + case SINGLE_QUOTE: + state = STATE_SINGLE_QUOTE; + break; + case CURLY_BRACE_LEFT: + state = STATE_MSG_ELEMENT; + ++braceCount; + break; + } + break; + + case STATE_SINGLE_QUOTE: + switch (c) { + case SINGLE_QUOTE: + state = STATE_INITIAL; + break; + case CURLY_BRACE_LEFT: + case CURLY_BRACE_RIGHT: + state = STATE_IN_QUOTE; + break; + default: + MAppend(SINGLE_QUOTE); + state = STATE_INITIAL; + break; + } + break; + + case STATE_IN_QUOTE: + switch (c) { + case SINGLE_QUOTE: + state = STATE_INITIAL; + break; + } + break; + + case STATE_MSG_ELEMENT: + switch (c) { + case CURLY_BRACE_LEFT: + ++braceCount; + break; + case CURLY_BRACE_RIGHT: + if (--braceCount == 0) { + state = STATE_INITIAL; + } + break; + } + break; + + default: // Never happens. + break; } - return NULL; + + MAppend(c); } - return ((Format*)fmt)->getLocaleID(type, *status); + + // End of scan + if (state == STATE_SINGLE_QUOTE || state == STATE_IN_QUOTE) { + MAppend(SINGLE_QUOTE); + } + + return u_terminateUChars(dest, destCapacity, len, ec); } #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/unesctrn.cpp b/icuSources/i18n/unesctrn.cpp index 93008b00..45ced8b1 100644 --- a/icuSources/i18n/unesctrn.cpp +++ b/icuSources/i18n/unesctrn.cpp @@ -75,28 +75,39 @@ static const UChar SPEC_Any[] = { UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UnescapeTransliterator) +static UChar* copySpec(const UChar* spec) { + int32_t len = 0; + while (spec[len] != END) { + ++len; + } + ++len; + UChar *result = (UChar *)uprv_malloc(len*sizeof(UChar)); + uprv_memcpy(result, spec, len*sizeof(result[0])); + return result; +} + /** * Factory methods. Ignore the context. */ -Transliterator* UnescapeTransliterator::_createUnicode(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createUnicode(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_Unicode); } -Transliterator* UnescapeTransliterator::_createJava(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createJava(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_Java); } -Transliterator* UnescapeTransliterator::_createC(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createC(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_C); } -Transliterator* UnescapeTransliterator::_createXML(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createXML(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_XML); } -Transliterator* UnescapeTransliterator::_createXML10(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createXML10(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_XML10); } -Transliterator* UnescapeTransliterator::_createPerl(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createPerl(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_Perl); } -Transliterator* UnescapeTransliterator::_createAny(const UnicodeString& ID, Token /*context*/) { +static Transliterator* _createAny(const UnicodeString& ID, Transliterator::Token /*context*/) { return new UnescapeTransliterator(ID, SPEC_Any); } @@ -151,17 +162,6 @@ Transliterator* UnescapeTransliterator::clone() const { return new UnescapeTransliterator(*this); } -UChar* UnescapeTransliterator::copySpec(const UChar* spec) { - int32_t len = 0; - while (spec[len] != END) { - ++len; - } - ++len; - UChar *result = (UChar *)uprv_malloc(len*sizeof(UChar)); - uprv_memcpy(result, spec, len*sizeof(result[0])); - return result; -} - /** * Implements {@link Transliterator#handleTransliterate}. */ diff --git a/icuSources/i18n/unesctrn.h b/icuSources/i18n/unesctrn.h index 69184899..2418bce7 100644 --- a/icuSources/i18n/unesctrn.h +++ b/icuSources/i18n/unesctrn.h @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (c) 2001-2004, International Business Machines + * Copyright (c) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -79,15 +79,11 @@ class U_I18N_API UnescapeTransliterator : public Transliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); @@ -102,24 +98,9 @@ class U_I18N_API UnescapeTransliterator : public Transliterator { * @param incremental if true, assume more text may be coming after * pos.contextLimit. Otherwise, assume the text is complete. */ - void handleTransliterate(Replaceable& text, UTransPosition& offset, + virtual void handleTransliterate(Replaceable& text, UTransPosition& offset, UBool isIncremental) const; - private: - - /** - * Factory methods - */ - static Transliterator* _createUnicode(const UnicodeString& ID, Token context); - static Transliterator* _createJava(const UnicodeString& ID, Token context); - static Transliterator* _createC(const UnicodeString& ID, Token context); - static Transliterator* _createXML(const UnicodeString& ID, Token context); - static Transliterator* _createXML10(const UnicodeString& ID, Token context); - static Transliterator* _createPerl(const UnicodeString& ID, Token context); - static Transliterator* _createAny(const UnicodeString& ID, Token context); - - static UChar* copySpec(const UChar* spec); - }; U_NAMESPACE_END diff --git a/icuSources/i18n/uni2name.cpp b/icuSources/i18n/uni2name.cpp index 648e466c..dcc49d75 100644 --- a/icuSources/i18n/uni2name.cpp +++ b/icuSources/i18n/uni2name.cpp @@ -98,7 +98,7 @@ void UnicodeNameTransliterator::handleTransliterate(Replaceable& text, UTransPos status = U_ZERO_ERROR; if ((len = u_charName(c, U_EXTENDED_CHAR_NAME, buf, maxLen, &status)) >0 && !U_FAILURE(status)) { str.truncate(OPEN_DELIM_LEN); - str.append(UnicodeString(buf, len, "")).append(CLOSE_DELIM); + str.append(UnicodeString(buf, len, US_INV)).append(CLOSE_DELIM); text.handleReplaceBetween(cursor, cursor+clen, str); len += OPEN_DELIM_LEN + 1; // adjust for delimiters cursor += len; // advance cursor and adjust for new text diff --git a/icuSources/i18n/uni2name.h b/icuSources/i18n/uni2name.h index 84551151..3e9412fe 100644 --- a/icuSources/i18n/uni2name.h +++ b/icuSources/i18n/uni2name.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -55,15 +55,11 @@ class U_I18N_API UnicodeNameTransliterator : public Transliterator { /** * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @draft ICU 2.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @draft ICU 2.2 */ static UClassID U_EXPORT2 getStaticClassID(); diff --git a/icuSources/i18n/unicode/calendar.h b/icuSources/i18n/unicode/calendar.h index c9743587..14fdd817 100644 --- a/icuSources/i18n/unicode/calendar.h +++ b/icuSources/i18n/unicode/calendar.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -27,22 +27,22 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Calendar object + */ #if !UCONFIG_NO_FORMATTING #include "unicode/uobject.h" #include "unicode/locid.h" #include "unicode/timezone.h" #include "unicode/ucal.h" +#include "unicode/umisc.h" U_NAMESPACE_BEGIN class ICUServiceFactory; -/** - * @internal - */ -typedef const void* URegistryKey; - /** * @internal */ @@ -1587,7 +1587,7 @@ protected: * computed. This occurs only in setTimeInMillis(). A calendar set * to this state will compute all fields from the time if it becomes * necessary, but otherwise will delay such computation. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UBool fAreFieldsVirtuallySet; @@ -1796,7 +1796,7 @@ protected: * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} * is more than one. * - * @draft ICU 2.8 + * @stable ICU 2.8 */ int32_t weekNumber(int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek); @@ -1896,17 +1896,6 @@ private: */ void updateTime(UErrorCode& status); - /** - * The resource tag for the resource where the week-count data is stored. - */ - static const char kDateTimeElements[]; - - /** - * The resource tag where the default calendar is stored. - */ - static const char kDefaultCalendar[]; - - /** * The Gregorian year, as computed by computeGregorianFields() and * returned by getGregorianYear(). @@ -2098,7 +2087,7 @@ private: * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const; diff --git a/icuSources/i18n/unicode/choicfmt.h b/icuSources/i18n/unicode/choicfmt.h index 410ff19d..409966a4 100644 --- a/icuSources/i18n/unicode/choicfmt.h +++ b/icuSources/i18n/unicode/choicfmt.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -24,6 +24,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Choice Format. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/unistr.h" @@ -60,7 +65,7 @@ class MessageFormat; * * <p>or equivalently,</p> * - * <pre> 0#are no files|1#is one file|1<are many files</pre> + * \htmlonly<pre> 0#are no files|1#is one file|1<are many files</pre>\endhtmlonly * * <p>The pattern consists of a number or <em>range specifiers</em> * separated by vertical bars '|' (U+007C). There is no @@ -151,7 +156,7 @@ class MessageFormat; * <p><strong>Notes</strong></p> * * <p>The first limit value does not define a range boundary. For - * example, in the pattern "<code>1.0#a|2.0#b</code>", the + * example, in the pattern \htmlonly"<code>1.0#a|2.0#b</code>"\endhtmlonly, the * intervals are [-Inf, 2.0) and [2.0, +Inf]. It appears that the first * interval should be [1.0, 2.0). However, since all values that are too * small are mapped to range zero, the first interval is effectively @@ -507,7 +512,7 @@ public: * @param pos On input: an alignment field, if desired. * On output: the offsets of the alignment field. * @return Reference to 'appendTo' parameter. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual UnicodeString& format(int64_t number, UnicodeString& appendTo, diff --git a/icuSources/i18n/unicode/coleitr.h b/icuSources/i18n/unicode/coleitr.h index 2c2d61d9..51b5d288 100644 --- a/icuSources/i18n/unicode/coleitr.h +++ b/icuSources/i18n/unicode/coleitr.h @@ -1,6 +1,6 @@ /* ****************************************************************************** - * Copyright (C) 1997-2004, International Business Machines + * Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** */ @@ -29,6 +29,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Collation Element Iterator. + */ + #if !UCONFIG_NO_COLLATION #include "unicode/uobject.h" @@ -52,18 +57,11 @@ U_NAMESPACE_BEGIN * the given collation object. * For example, consider the following in Spanish: * <pre> -* \code * "ca" -> the first key is key('c') and second key is key('a'). -* "cha" -> the first key is key('ch') and second key is key('a'). -* \endcode -* </pre> +* "cha" -> the first key is key('ch') and second key is key('a').</pre> * And in German, -* <pre> -* \code -* "æb"-> the first key is key('a'), the second key is key('e'), and -* the third key is key('b'). -* \endcode -* </pre> +* <pre> \htmlonly "æb"-> the first key is key('a'), the second key is key('e'), and +* the third key is key('b'). \endhtmlonly </pre> * The key of a character, is an integer composed of primary order(short), * secondary order(char), and tertiary order(char). Java strictly defines the * size and signedness of its primitive data types. Therefore, the static @@ -123,11 +121,13 @@ public: // CollationElementIterator public data member ------------------------------ - /** - * NULLORDER indicates that an error has occured while processing - * @stable ICU 2.0 - */ - static int32_t const NULLORDER; + enum { + /** + * NULLORDER indicates that an error has occured while processing + * @stable ICU 2.0 + */ + NULLORDER = (int32_t)0xffffffff + }; // CollationElementIterator public constructor/destructor ------------------- diff --git a/icuSources/i18n/unicode/coll.h b/icuSources/i18n/unicode/coll.h index d72d23f4..a01fabc0 100644 --- a/icuSources/i18n/unicode/coll.h +++ b/icuSources/i18n/unicode/coll.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1996-2004, International Business Machines * +* Copyright (C) 1996-2006, International Business Machines * * Corporation and others. All Rights Reserved. * ****************************************************************************** */ @@ -46,6 +46,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Collation Service. + */ + #if !UCONFIG_NO_COLLATION #include "unicode/uobject.h" @@ -53,17 +58,13 @@ #include "unicode/normlzr.h" #include "unicode/locid.h" #include "unicode/uniset.h" +#include "unicode/umisc.h" U_NAMESPACE_BEGIN class StringEnumeration; #if !UCONFIG_NO_SERVICE -/** - * @stable ICU 2.6 - */ -typedef const void* URegistryKey; - /** * @stable ICU 2.6 */ @@ -83,7 +84,7 @@ class CollationKey; * <em>Important: </em>The ICU collation service has been reimplemented * in order to achieve better performance and UCA compliance. * For details, see the -* <a href="http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> +* <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> * collation design document</a>. * <p> * <code>Collator</code> is an abstract base class. Subclasses implement @@ -185,7 +186,7 @@ public: * Diacritical differences on the same base letter represent a secondary * difference. Set comparison level to SECONDARY to ignore tertiary * differences. Use this to set the strength of a Collator object.<br> - * Example of secondary difference, "ä" >> "a". + * Example of secondary difference, "ä" >> "a". * * Uppercase and lowercase versions of the same character represents a * tertiary difference. Set comparison level to TERTIARY to include all @@ -195,7 +196,7 @@ public: * * Two characters are considered "identical" when they have the same unicode * spellings.<br> - * For example, "ä" == "ä". + * For example, "ä" == "ä". * * UCollationStrength is also used to determine the strength of sort keys * generated from Collator objects. @@ -618,7 +619,7 @@ public: * @param status input-output error code * @return a string enumeration over locale strings. The caller is * responsible for closing the result. - * @draft ICU 3.0 + * @stable ICU 3.0 */ static StringEnumeration* U_EXPORT2 getKeywords(UErrorCode& status); @@ -631,7 +632,7 @@ public: * @param status input-output error code * @return a string enumeration over collation keyword values, or NULL * upon error. The caller is responsible for deleting the result. - * @draft ICU 3.0 + * @stable ICU 3.0 */ static StringEnumeration* U_EXPORT2 getKeywordValues(const char *keyword, UErrorCode& status); @@ -648,7 +649,7 @@ public: * applications who wish to cache collators, or otherwise reuse * collators when possible. The functional equivalent may change * over time. For more information, please see the <a - * href="http://oss.software.ibm.com/icu/userguide/locale.html#services"> + * href="http://icu.sourceforge.net/userguide/locale.html#services"> * Locales and Services</a> section of the ICU User Guide. * @param keyword a particular keyword as enumerated by * ucol_getKeywords. @@ -660,7 +661,7 @@ public: * @param status reference to input-output error code * @return the functionally equivalent collation locale, or the root * locale upon error. - * @draft ICU 3.0 + * @stable ICU 3.0 */ static Locale U_EXPORT2 getFunctionalEquivalent(const char* keyword, const Locale& locale, UBool& isAvailable, UErrorCode& status); @@ -978,7 +979,7 @@ public: /** * Destructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~CollatorFactory(); diff --git a/icuSources/i18n/unicode/curramt.h b/icuSources/i18n/unicode/curramt.h index 5c66064c..c33e6f1f 100644 --- a/icuSources/i18n/unicode/curramt.h +++ b/icuSources/i18n/unicode/curramt.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2004, International Business Machines +* Copyright (c) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -18,13 +18,19 @@ #include "unicode/measure.h" #include "unicode/currunit.h" +/** + * \file + * \brief C++ API: Currency Amount Object. + */ + U_NAMESPACE_BEGIN /** + * * A currency together with a numeric amount, such as 200 USD. * * @author Alan Liu - * @draft ICU 3.0 + * @stable ICU 3.0 */ class U_I18N_API CurrencyAmount: public Measure { public: @@ -36,7 +42,7 @@ class U_I18N_API CurrencyAmount: public Measure { * NULL and must have length 3 * @param ec input-output error code. If the amount or the isoCode * is invalid, then this will be set to a failing value. - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyAmount(const Formattable& amount, const UChar* isoCode, UErrorCode &ec); @@ -49,33 +55,33 @@ class U_I18N_API CurrencyAmount: public Measure { * NULL and must have length 3 * @param ec input-output error code. If the isoCode is invalid, * then this will be set to a failing value. - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyAmount(double amount, const UChar* isoCode, UErrorCode &ec); /** * Copy constructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyAmount(const CurrencyAmount& other); /** * Assignment operator - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyAmount& operator=(const CurrencyAmount& other); /** * Return a polymorphic clone of this object. The result will * have the same class as returned by getDynamicClassID(). - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UObject* clone() const; /** * Destructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~CurrencyAmount(); @@ -85,7 +91,7 @@ class U_I18N_API CurrencyAmount: public Measure { * @return The class ID for this object. All objects of a given * class have the same class ID. Objects of other classes have * different class IDs. - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UClassID getDynamicClassID() const; @@ -93,19 +99,19 @@ class U_I18N_API CurrencyAmount: public Measure { * Returns the class ID for this class. This is used to compare to * the return value of getDynamicClassID(). * @return The class ID for all objects of this class. - * @draft ICU 3.0 + * @stable ICU 3.0 */ static UClassID U_EXPORT2 getStaticClassID(); /** * Return the currency unit object of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ inline const CurrencyUnit& getCurrency() const; /** * Return the ISO currency code of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ inline const UChar* getISOCurrency() const; }; diff --git a/icuSources/i18n/unicode/currunit.h b/icuSources/i18n/unicode/currunit.h index a4e6df7d..ecd94110 100644 --- a/icuSources/i18n/unicode/currunit.h +++ b/icuSources/i18n/unicode/currunit.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2004, International Business Machines +* Copyright (c) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -17,6 +17,11 @@ #include "unicode/measunit.h" +/** + * \file + * \brief C++ API: Currency Unit Information. + */ + U_NAMESPACE_BEGIN /** @@ -25,7 +30,7 @@ U_NAMESPACE_BEGIN * subclasses MeasureUnit, for use with Measure and MeasureFormat. * * @author Alan Liu - * @draft ICU 3.0 + * @stable ICU 3.0 */ class U_I18N_API CurrencyUnit: public MeasureUnit { public: @@ -35,39 +40,39 @@ class U_I18N_API CurrencyUnit: public MeasureUnit { * NULL and must have length 3 * @param ec input-output error code. If the isoCode is invalid, * then this will be set to a failing value. - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyUnit(const UChar* isoCode, UErrorCode &ec); /** * Copy constructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyUnit(const CurrencyUnit& other); /** * Assignment operator - * @draft ICU 3.0 + * @stable ICU 3.0 */ CurrencyUnit& operator=(const CurrencyUnit& other); /** * Return a polymorphic clone of this object. The result will * have the same class as returned by getDynamicClassID(). - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UObject* clone() const; /** * Destructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~CurrencyUnit(); /** * Equality operator. Return true if this object is equal * to the given object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UBool operator==(const UObject& other) const; @@ -77,7 +82,7 @@ class U_I18N_API CurrencyUnit: public MeasureUnit { * @return The class ID for this object. All objects of a given * class have the same class ID. Objects of other classes have * different class IDs. - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UClassID getDynamicClassID() const; @@ -85,13 +90,13 @@ class U_I18N_API CurrencyUnit: public MeasureUnit { * Returns the class ID for this class. This is used to compare to * the return value of getDynamicClassID(). * @return The class ID for all objects of this class. - * @draft ICU 3.0 + * @stable ICU 3.0 */ static UClassID U_EXPORT2 getStaticClassID(); /** * Return the ISO currency code of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ inline const UChar* getISOCurrency() const; diff --git a/icuSources/i18n/unicode/datefmt.h b/icuSources/i18n/unicode/datefmt.h index e2959225..ad2c55b2 100644 --- a/icuSources/i18n/unicode/datefmt.h +++ b/icuSources/i18n/unicode/datefmt.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -29,6 +29,11 @@ #include "unicode/format.h" #include "unicode/locid.h" +/** + * \file + * \brief C++ API: Abstract class for converting dates. + */ + U_NAMESPACE_BEGIN class TimeZone; diff --git a/icuSources/i18n/unicode/dcfmtsym.h b/icuSources/i18n/unicode/dcfmtsym.h index 80375d70..ac040c06 100644 --- a/icuSources/i18n/unicode/dcfmtsym.h +++ b/icuSources/i18n/unicode/dcfmtsym.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -32,6 +32,12 @@ #include "unicode/uobject.h" #include "unicode/locid.h" +/** + * \file + * \brief C++ API: Symbols for formatting numbers. + */ + + U_NAMESPACE_BEGIN /** @@ -113,8 +119,12 @@ public: /** Nan symbol */ kNaNSymbol, /** Significant digit symbol - * @draft ICU 3.0 */ + * @stable ICU 3.0 */ kSignificantDigitSymbol, + /** The monetary grouping separator + * @draft ICU 3.6 + */ + kMonetaryGroupingSeparatorSymbol, /** count symbol constants */ kFormatSymbolCount }; @@ -208,7 +218,7 @@ public: /** * Returns the locale for this object. Two flavors are available: * valid and actual locale. - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; @@ -271,6 +281,12 @@ public: */ inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const; + /** + * Returns that pattern stored in currecy info. Internal API for use by NumberFormat API. + * @internal + */ + inline const UChar* getCurrencyPattern(void) const; + private: /** * Private symbol strings. @@ -299,6 +315,7 @@ private: char actualLocale[ULOC_FULLNAME_CAPACITY]; char validLocale[ULOC_FULLNAME_CAPACITY]; + const UChar* currPattern; }; // ------------------------------------- @@ -341,7 +358,10 @@ DecimalFormatSymbols::getLocale() const { return locale; } - +inline const UChar* +DecimalFormatSymbols::getCurrencyPattern() const { + return currPattern; +} U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/unicode/decimfmt.h b/icuSources/i18n/unicode/decimfmt.h index 4fe6d32c..296906fb 100644 --- a/icuSources/i18n/unicode/decimfmt.h +++ b/icuSources/i18n/unicode/decimfmt.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -25,7 +25,11 @@ #define DECIMFMT_H #include "unicode/utypes.h" - +/** + * \file + * \brief C++ API: Formats decimal numbers. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/dcfmtsym.h" @@ -803,7 +807,7 @@ public: * @param pos On input: an alignment field, if desired. * On output: the offsets of the alignment field. * @return Reference to 'appendTo' parameter. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual UnicodeString& format(int64_t number, UnicodeString& appendTo, @@ -877,7 +881,7 @@ public: * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @return Reference to 'appendTo' parameter. - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeString& format(int64_t number, UnicodeString& appendTo) const; @@ -1115,7 +1119,7 @@ public: * The width is counted in 16-bit code units. * @return the format width, or zero if no padding is in effect * @see #setFormatWidth - * @see #getPadCharacter + * @see #getPadCharacterString * @see #setPadCharacter * @see #getPadPosition * @see #setPadPosition @@ -1131,7 +1135,7 @@ public: * format(), or zero to disable padding. A negative * width is equivalent to 0. * @see #getFormatWidth - * @see #getPadCharacter + * @see #getPadCharacterString * @see #setPadCharacter * @see #getPadPosition * @see #setPadPosition @@ -1162,7 +1166,7 @@ public: * padChar.char32At(0) will be used as the pad character. * @see #setFormatWidth * @see #getFormatWidth - * @see #getPadCharacter + * @see #getPadCharacterString * @see #getPadPosition * @see #setPadPosition * @stable ICU 2.0 @@ -1179,7 +1183,7 @@ public: * @see #setFormatWidth * @see #getFormatWidth * @see #setPadCharacter - * @see #getPadCharacter + * @see #getPadCharacterString * @see #setPadPosition * @see #kPadBeforePrefix * @see #kPadAfterPrefix @@ -1200,7 +1204,7 @@ public: * @see #setFormatWidth * @see #getFormatWidth * @see #setPadCharacter - * @see #getPadCharacter + * @see #getPadCharacterString * @see #getPadPosition * @see #kPadBeforePrefix * @see #kPadAfterPrefix @@ -1536,7 +1540,7 @@ public: * displayed. This value has no effect unless areSignificantDigitsUsed() * returns true. * @return the fewest significant digits that will be shown - * @draft ICU 3.0 + * @stable ICU 3.0 */ int32_t getMinimumSignificantDigits() const; @@ -1545,7 +1549,7 @@ public: * displayed. This value has no effect unless areSignificantDigitsUsed() * returns true. * @return the most significant digits that will be shown - * @draft ICU 3.0 + * @stable ICU 3.0 */ int32_t getMaximumSignificantDigits() const; @@ -1556,7 +1560,7 @@ public: * <code>min</code>, then it is set to <code>min</code>. This * value has no effect unless areSignificantDigits() returns true. * @param min the fewest significant digits to be shown - * @draft ICU 3.0 + * @stable ICU 3.0 */ void setMinimumSignificantDigits(int32_t min); @@ -1568,7 +1572,7 @@ public: * This value has no effect unless areSignificantDigits() returns * true. * @param max the most significant digits to be shown - * @draft ICU 3.0 + * @stable ICU 3.0 */ void setMaximumSignificantDigits(int32_t max); @@ -1576,7 +1580,7 @@ public: * Returns true if significant digits are in use, or false if * integer and fraction digit counts are in use. * @return true if significant digits are in use - * @draft ICU 3.0 + * @stable ICU 3.0 */ UBool areSignificantDigitsUsed() const; @@ -1585,7 +1589,7 @@ public: * fraction digit counts are in use. * @param useSignificantDigits true to use significant digits, or * false to use integer and fraction digit counts - * @draft ICU 3.0 + * @stable ICU 3.0 */ void setSignificantDigitsUsed(UBool useSignificantDigits); @@ -1600,7 +1604,7 @@ public: * to use. It need not be null-terminated. May be the empty * string or NULL to indicate no currency. * @param ec input-output error code - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec); @@ -1614,7 +1618,7 @@ public: /** * The resource tags we use to retrieve decimal format data from * locale resource bundles. - * @stable ICU 2.0 + * @deprecated ICU 3.4. This string has no public purpose. Please don't use it. */ static const char fgNumberPatterns[]; @@ -1778,8 +1782,6 @@ private: void setCurrencyForSymbols(); - void setCurrencyForLocale(const char* locale, UErrorCode& ec); - /** * Constants. */ @@ -1859,7 +1861,7 @@ protected: * this number, it wouldn't make sense anyway, and this is just to make sure * that someone turning on scientific mode with default settings doesn't * end up with lots of zeroes. - * @draft ICU 2.8 + * @stable ICU 2.8 */ static const int32_t kMaxScientificIntegerDigits; }; diff --git a/icuSources/i18n/unicode/dtfmtsym.h b/icuSources/i18n/unicode/dtfmtsym.h index dfe3b868..d758cf77 100644 --- a/icuSources/i18n/unicode/dtfmtsym.h +++ b/icuSources/i18n/unicode/dtfmtsym.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -26,10 +26,16 @@ #include "unicode/locid.h" #include "unicode/ures.h" +/** + * \file + * \brief C++ API: Symbols for formatting dates. + */ + U_NAMESPACE_BEGIN /* forward declaration */ class SimpleDateFormat; +class Hashtable; /** * DateFormatSymbols is a public class for encapsulating localizable date-time @@ -187,6 +193,23 @@ public: */ void setEras(const UnicodeString* eras, int32_t count); + /** + * Gets era name strings. For example: "Anno Domini" and "Before Christ". + * + * @param count Filled in with length of the array. + * @return the era name strings. + * @draft ICU 3.4 + */ + const UnicodeString* getEraNames(int32_t& count) const; + + /** + * Sets era name strings. For example: "Anno Domini" and "Before Christ". + * @param eraNames Array of era name strings (DateFormatSymbols retains ownership.) + * @param count Filled in with length of the array. + * @draft ICU 3.6 + */ + void setEraNames(const UnicodeString* eraNames, int32_t count); + /** * Gets month strings. For example: "January", "February", etc. * @param count Filled in with length of the array. @@ -221,6 +244,48 @@ public: */ void setShortMonths(const UnicodeString* shortMonths, int32_t count); + /** + * Selector for date formatting context + * @draft ICU 3.6 + */ + enum DtContextType { + FORMAT, + STANDALONE, + DT_CONTEXT_COUNT + }; + + /** + * Selector for date formatting width + * @draft ICU 3.6 + */ + enum DtWidthType { + ABBREVIATED, + WIDE, + NARROW, + DT_WIDTH_COUNT + }; + + /** + * Gets month strings by width and context. For example: "January", "February", etc. + * @param count Filled in with length of the array. + * @param context The formatting context, either FORMAT or STANDALONE + * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW. + * @return the month strings. (DateFormatSymbols retains ownership.) + * @draft ICU 3.4 + */ + const UnicodeString* getMonths(int32_t& count, DtContextType context, DtWidthType width) const; + + /** + * Sets month strings by width and context. For example: "January", "February", etc. + * + * @param months The new month strings. (not adopted; caller retains ownership) + * @param count Filled in with length of the array. + * @param context The formatting context, either FORMAT or STANDALONE + * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW. + * @draft ICU 3.6 + */ + void setMonths(const UnicodeString* months, int32_t count, DtContextType context, DtWidthType width); + /** * Gets weekday strings. For example: "Sunday", "Monday", etc. * @param count Filled in with length of the array. @@ -229,6 +294,7 @@ public: */ const UnicodeString* getWeekdays(int32_t& count) const; + /** * Sets weekday strings. For example: "Sunday", "Monday", etc. * @param weekdays the new weekday strings. (not adopted; caller retains ownership) @@ -253,6 +319,49 @@ public: */ void setShortWeekdays(const UnicodeString* shortWeekdays, int32_t count); + /** + * Gets weekday strings by width and context. For example: "Sunday", "Monday", etc. + * @param count Filled in with length of the array. + * @param context The formatting context, either FORMAT or STANDALONE + * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW + * @return the month strings. (DateFormatSymbols retains ownership.) + * @draft ICU 3.4 + */ + const UnicodeString* getWeekdays(int32_t& count, DtContextType context, DtWidthType width) const; + + /** + * Sets weekday strings by width and context. For example: "Sunday", "Monday", etc. + * @param weekdays The new weekday strings. (not adopted; caller retains ownership) + * @param count Filled in with length of the array. + * @param context The formatting context, either FORMAT or STANDALONE + * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW + * @draft ICU 3.6 + */ + void setWeekdays(const UnicodeString* weekdays, int32_t count, DtContextType context, DtWidthType width); + + /** + * Gets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc. + * @param count Filled in with length of the array. + * @param context The formatting context, either FORMAT or STANDALONE + * @param width The width of returned strings, either WIDE or ABBREVIATED. There + * are no NARROW quarters. + * @return the quarter strings. (DateFormatSymbols retains ownership.) + * @draft ICU 3.6 + */ + const UnicodeString* getQuarters(int32_t& count, DtContextType context, DtWidthType width) const; + + /** + * Sets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc. + * + * @param quarters The new quarter strings. (not adopted; caller retains ownership) + * @param count Filled in with length of the array. + * @param context The formatting context, either FORMAT or STANDALONE + * @param width The width of returned strings, either WIDE or ABBREVIATED. There + * are no NARROW quarters. + * @draft ICU 3.6 + */ + void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width); + /** * Gets AM/PM strings. For example: "AM" and "PM". * @param count Filled in with length of the array. @@ -274,7 +383,7 @@ public: * @param rowCount Output param to receive number of rows. * @param columnCount Output param to receive number of columns. * @return The timezone strings as a 2-d array. (DateFormatSymbols retains ownership.) - * @stable ICU 2.0 + * @deprecated ICU 3.6 */ const UnicodeString** getZoneStrings(int32_t& rowCount, int32_t& columnCount) const; @@ -313,7 +422,7 @@ public: /** * Returns the locale for this object. Two flavors are available: * valid and actual locale. - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; @@ -331,6 +440,55 @@ public: */ static UClassID U_EXPORT2 getStaticClassID(); + /** + * The translation type of the translated zone strings + * @internal ICU 3.6 + */ + enum TimeZoneTranslationType { + TIMEZONE_SHORT_GENERIC, + TIMEZONE_SHORT_STANDARD, + TIMEZONE_SHORT_DAYLIGHT, + TIMEZONE_LONG_GENERIC, + TIMEZONE_LONG_STANDARD, + TIMEZONE_LONG_DAYLIGHT, + TIMEZONE_EXEMPLAR_CITY, + TIMEZONE_COUNT + }; + + /** + * Creates an enumeration of time zone IDs. The object is owned by the caller and should delete it after use. + * The time zone IDs are just for programmatic lookup. NOT LOCALIZED!!! + * @param status Input/output parameter, set to success or + * failure code upon return. + * @return A new StringEnumeration object + * @internal ICU 3.6 + */ + virtual StringEnumeration* createZoneStringIDs(UErrorCode &status); + + /** + * Gets timezone string give the key and translation type + * @param ID The ID of zone strings, e.g: "America/Los_Angeles". + * The time zone ID is for programmatic lookup. + * @param type The translation type requested + * @param result Output parameter to recieve the translation string + * @param status Input/output parameter, set to success or + * failure code upon return. + * @return the input UnicodeString parameter for chaining + * @internal ICU 3.6 + */ + UnicodeString& getZoneString(const UnicodeString &ID, const TimeZoneTranslationType type, UnicodeString &result, UErrorCode &status); + + /** + * Sets timezone string for the given the ID and translation type + * @param ID The ID of zone strings, e.g: "America/Los_Angeles". + * The time zone ID is for programmatic lookup. + * @param type The translation type to set the value for + * @param value The string with which current translation needs to be replaced + * @param status Input/output parameter, set to success or + * @internal ICU 3.6 + */ + void setZoneString(const UnicodeString &ID, const TimeZoneTranslationType type, const UnicodeString &value, UErrorCode &status); + private: friend class SimpleDateFormat; @@ -342,6 +500,12 @@ private: UnicodeString* fEras; int32_t fErasCount; + /** + * Era name strings. For example: "Anno Domini" and "Before Christ". + */ + UnicodeString* fEraNames; + int32_t fEraNamesCount; + /** * Month strings. For example: "January", "February", etc. */ @@ -354,6 +518,30 @@ private: UnicodeString* fShortMonths; int32_t fShortMonthsCount; + /** + * Narrow month strings. For example: "J", "F", etc. + */ + UnicodeString* fNarrowMonths; + int32_t fNarrowMonthsCount; + + /** + * Standalone Month strings. For example: "January", "February", etc. + */ + UnicodeString* fStandaloneMonths; + int32_t fStandaloneMonthsCount; + + /** + * Standalone Short month strings. For example: "Jan", "Feb", etc. + */ + UnicodeString* fStandaloneShortMonths; + int32_t fStandaloneShortMonthsCount; + + /** + * Standalone Narrow month strings. For example: "J", "F", etc. + */ + UnicodeString* fStandaloneNarrowMonths; + int32_t fStandaloneNarrowMonthsCount; + /** * Weekday strings. For example: "Sunday", "Monday", etc. */ @@ -366,18 +554,69 @@ private: UnicodeString* fShortWeekdays; int32_t fShortWeekdaysCount; + /** + * Narrow weekday strings. For example: "Sun", "Mon", etc. + */ + UnicodeString* fNarrowWeekdays; + int32_t fNarrowWeekdaysCount; + + /** + * Standalone Weekday strings. For example: "Sunday", "Monday", etc. + */ + UnicodeString* fStandaloneWeekdays; + int32_t fStandaloneWeekdaysCount; + + /** + * Standalone Short weekday strings. For example: "Sun", "Mon", etc. + */ + UnicodeString* fStandaloneShortWeekdays; + int32_t fStandaloneShortWeekdaysCount; + + /** + * Standalone Narrow weekday strings. For example: "Sun", "Mon", etc. + */ + UnicodeString* fStandaloneNarrowWeekdays; + int32_t fStandaloneNarrowWeekdaysCount; + /** * Ampm strings. For example: "AM" and "PM". */ UnicodeString* fAmPms; int32_t fAmPmsCount; + /** + * Quarter strings. For example: "1st quarter", "2nd quarter", etc. + */ + UnicodeString *fQuarters; + int32_t fQuartersCount; + + /** + * Short quarters. For example: "Q1", "Q2", etc. + */ + UnicodeString *fShortQuarters; + int32_t fShortQuartersCount; + + /** + * Standalone quarter strings. For example: "1st quarter", "2nd quarter", etc. + */ + UnicodeString *fStandaloneQuarters; + int32_t fStandaloneQuartersCount; + + /** + * Standalone short quarter strings. For example: "Q1", "Q2", etc. + */ + UnicodeString *fStandaloneShortQuarters; + int32_t fStandaloneShortQuartersCount; + /** * The format data of all the timezones in this locale. */ UnicodeString** fZoneStrings; int32_t fZoneStringsRowCount; int32_t fZoneStringsColCount; + StringEnumeration* fZoneIDEnumeration; + Hashtable* fZoneStringsHash; + UResourceBundle* fResourceBundle; /** * Localized date-time pattern characters. For example: use 'u' as 'y'. @@ -391,30 +630,8 @@ private: char validLocale[ULOC_FULLNAME_CAPACITY]; char actualLocale[ULOC_FULLNAME_CAPACITY]; - - /* Sizes for the last resort string arrays */ - typedef enum LastResortSize { - kMonthNum = 13, - kMonthLen = 3, - - kDayNum = 8, - kDayLen = 2, - - kAmPmNum = 2, - kAmPmLen = 3, - - kEraNum = 2, - kEraLen = 3, - - kZoneNum = 5, - kZoneLen = 4 - } LastResortSize; - DateFormatSymbols(); // default constructor not implemented - void initField(UnicodeString **field, int32_t& length, const UResourceBundle *data, UErrorCode &status); - void initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortSize numStr, LastResortSize strLen, UErrorCode &status); - /** * Called by the constructors to actually load data from the resources * @@ -490,6 +707,61 @@ private: * Delete just the zone strings. */ void disposeZoneStrings(void); + /** + * Initializes the zoneStrings hash and keys StringEnumeration after reading the zoneStrings resource + */ + void initZoneStrings(UErrorCode &status); + /** + * initialzes the zoneStrings has and keys enumeration after reading the strings[][]. Required for backwards + * compatibility of setZoneStrings method + */ + void initZoneStrings(const UnicodeString** strings, int32_t rowCount, int32_t collumnCount, UErrorCode& status); + /** + * initialization of the fZoneStrings data member + */ + void initZoneStringsArray(UErrorCode& status); + /** + * Creates a deep clone of the Hashtable + */ + Hashtable* createZoneStringsHash(const Hashtable* otherHash); + + /** + * Fetches the key from the hashtable for a given ID. + * e.g: for a given ID such as PST returns "Americal/Los_Angeles" + * Used by SimpleDateFormat class. + * @param ID The id of the time zone for which the key needs to be fetched + * @param result Output parameter to recieve the key. + * @return the input UnicodeString object for chaining + */ + UnicodeString& getZoneID(const UnicodeString& zid, UnicodeString& result, UErrorCode& status); + + /** + * Fetches the zone type and zone string from the hashtable for a given key. + * e.g: for key: "Americal/Los_Angeles", text: "2004/1/1 PT 1:00" and start:9 + * returns TIMEZONE_SHORT_GENERIC and "PT". + * Used by SimpleDateFormat class. + * @param ID the name of the timezone + * @param text the string containing the time zone translation + * @param start The position in string where time zone string starts + * @param type output parameter to recieve the type of time zone string + * @param value output parameter to recieve the the acutal time zone string + */ + void getZoneType(const UnicodeString& zid, const UnicodeString& text, int32_t start, TimeZoneTranslationType& type, UnicodeString& value, UErrorCode& status); + + /** + * Fetches the zone type and zone string from the hashtable by cycling through all elements in the hashtable. + * e.g: text: "2004/1/1 PT 1:00" and start:9 + * returns "Americal/Los_Angeles", TIMEZONE_SHORT_GENERIC and "PT". Used by SimpleDateFormat class. + * Used by SimpleDateFormat class. + * @param ID output parameter to recieve the key name of the time zone + * @param text the string containing the time zone translation + * @param start The position in string where time zone string starts + * @param type output parameter to recieve the type of time zone string + * @param value output parameter to recieve the the acutal time zone string + * @param status output parameter to recive the error information + */ + void findZoneIDTypeValue(UnicodeString& zid, const UnicodeString& text, int32_t start, TimeZoneTranslationType& type, UnicodeString& value, UErrorCode& status); + }; U_NAMESPACE_END diff --git a/icuSources/i18n/unicode/fieldpos.h b/icuSources/i18n/unicode/fieldpos.h index bb46a970..62c6a6fc 100644 --- a/icuSources/i18n/unicode/fieldpos.h +++ b/icuSources/i18n/unicode/fieldpos.h @@ -1,6 +1,6 @@ /* ******************************************************************************** - * Copyright (C) 1997-2004, International Business Machines + * Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -24,6 +24,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: FieldPosition identifies the fields in a formatted output. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/uobject.h" @@ -173,7 +178,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ FieldPosition *clone() const; diff --git a/icuSources/i18n/unicode/fmtable.h b/icuSources/i18n/unicode/fmtable.h index c2aeec7f..94ee3284 100644 --- a/icuSources/i18n/unicode/fmtable.h +++ b/icuSources/i18n/unicode/fmtable.h @@ -1,6 +1,6 @@ /* ******************************************************************************** -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * @@ -17,6 +17,10 @@ #include "unicode/utypes.h" #include "unicode/unistr.h" +/** + * \file + * \brief C++ API: Formattable is a thin wrapper for primitive numeric types. + */ #if !UCONFIG_NO_FORMATTING @@ -84,10 +88,11 @@ public: /** * Creates a Formattable object with an int64_t number * @param ll the int64_t number. - * @draft ICU 2.8 + * @stable ICU 2.8 */ Formattable(int64_t ll); +#if !UCONFIG_NO_CONVERSION /** * Creates a Formattable object with a char string pointer. * Assumes that the char string is null terminated. @@ -95,6 +100,7 @@ public: * @stable ICU 2.0 */ Formattable(const char* strToCopy); +#endif /** * Creates a Formattable object with a UnicodeString object to copy from. @@ -121,7 +127,7 @@ public: /** * Creates a Formattable object that adopts the given UObject. * @param objectToAdopt the UObject to set this object to - * @draft ICU 3.0 + * @stable ICU 3.0 */ Formattable(UObject* objectToAdopt); @@ -170,7 +176,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ Formattable *clone() const; @@ -219,14 +225,14 @@ public: /** * Selector indicating a 64-bit integer value. Use getInt64 * to retrieve the value. - * @draft ICU 2.8 + * @stable ICU 2.8 */ kInt64, /** * Selector indicating a UObject value. Use getObject to * retrieve the value. - * @draft ICU 3.0 + * @stable ICU 3.0 */ kObject }; @@ -242,7 +248,7 @@ public: * Returns TRUE if the data type of this Formattable object * is kDouble, kLong, or kInt64. * @return TRUE if this is a pure numeric object - * @draft ICU 3.0 + * @stable ICU 3.0 */ UBool isNumeric() const; @@ -264,7 +270,7 @@ public: * the status is set to U_INVALID_FORMAT_ERROR. * @param status the error code * @return the double value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ double getDouble(UErrorCode& status) const; @@ -290,7 +296,7 @@ public: * the status is set to U_INVALID_FORMAT_ERROR. * @param status the error code * @return the long value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ int32_t getLong(UErrorCode& status) const; @@ -298,7 +304,7 @@ public: * Gets the int64 value of this object. If this object is not of type * kInt64 then the result is undefined. * @return the int64 value of this object. - * @draft ICU 2.8 + * @stable ICU 2.8 */ int64_t getInt64(void) const { return fValue.fInt64; } @@ -315,7 +321,7 @@ public: * the status is set to U_INVALID_FORMAT_ERROR. * @param status the error code * @return the int64 value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ int64_t getInt64(UErrorCode& status) const; @@ -333,7 +339,7 @@ public: * undefined. * @param status the error code. * @return the Date value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDate getDate(UErrorCode& status) const; @@ -354,7 +360,7 @@ public: * @param result Output param to receive the Date value of this object. * @param status the error code. * @return A reference to 'result'. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UnicodeString& getString(UnicodeString& result, UErrorCode& status) const; @@ -373,7 +379,7 @@ public: * U_INVALID_FORMAT_ERROR and the result is a bogus string. * @param status the error code. * @return a const reference to the string value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ const UnicodeString& getString(UErrorCode& status) const; @@ -391,7 +397,7 @@ public: * and the result is a bogus string. * @param status the error code. * @return a reference to the string value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UnicodeString& getString(UErrorCode& status); @@ -412,7 +418,7 @@ public: * @param count fill-in with the count of this object. * @param status the error code. * @return the array value of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ const Formattable* getArray(int32_t& count, UErrorCode& status) const; @@ -430,7 +436,7 @@ public: * Returns a pointer to the UObject contained within this * formattable, or NULL if this object does not contain a UObject. * @return a UObject pointer, or NULL - * @draft ICU 3.0 + * @stable ICU 3.0 */ const UObject* getObject() const; @@ -454,7 +460,7 @@ public: * Sets the int64 value of this object and changes the type to * kInt64. * @param ll the new int64 value to be set. - * @draft ICU 2.8 + * @stable ICU 2.8 */ void setInt64(int64_t ll); @@ -503,7 +509,7 @@ public: * the type to kObject. After this call, the caller must not * delete the given object. * @param objectToAdopt the UObject value to be adopted - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptObject(UObject* objectToAdopt); @@ -536,15 +542,6 @@ private: */ void dispose(void); - /** - * Creates a new Formattable array and copies the values from the specified - * original. - * @param array the original array - * @param count the original array count - * @return the new Formattable array. - */ - static Formattable* createArrayCopy(const Formattable* array, int32_t count); - UnicodeString* getBogus() const; union { @@ -563,14 +560,6 @@ private: UnicodeString fBogus; // Bogus string when it's needed. }; -inline Formattable* -Formattable::createArrayCopy(const Formattable* array, int32_t count) -{ - Formattable *result = new Formattable[count]; - for (int32_t i=0; i<count; ++i) result[i] = array[i]; // Don't memcpy! - return result; -} - inline UDate Formattable::getDate(UErrorCode& status) const { if (fType != kDate) { if (U_SUCCESS(status)) { diff --git a/icuSources/i18n/unicode/format.h b/icuSources/i18n/unicode/format.h index 180c1f2a..7f17b52f 100644 --- a/icuSources/i18n/unicode/format.h +++ b/icuSources/i18n/unicode/format.h @@ -1,6 +1,7 @@ /* ******************************************************************************** -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2006, International Business Machines Corporation and others. +* All Rights Reserved. ******************************************************************************** * * File FORMAT.H @@ -23,6 +24,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Base class for all formats. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/unistr.h" @@ -231,7 +237,7 @@ public: * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; @@ -244,7 +250,7 @@ public: const char* getLocaleID(ULocDataLocaleType type, UErrorCode &status) const; protected: - /** @draft ICU 2.8 */ + /** @stable ICU 2.8 */ void setLocaleIDs(const char* valid, const char* actual); protected: diff --git a/icuSources/i18n/unicode/gregocal.h b/icuSources/i18n/unicode/gregocal.h index 5cd03910..f2d1b0b1 100644 --- a/icuSources/i18n/unicode/gregocal.h +++ b/icuSources/i18n/unicode/gregocal.h @@ -1,5 +1,6 @@ /* -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2006, International Business Machines Corporation and others. +* All Rights Reserved. ******************************************************************************** * * File GREGOCAL.H @@ -29,9 +30,14 @@ #include "unicode/calendar.h" +/** + * \file + * \brief C++ API: Concrete class which provides the standard calendar. + */ + U_NAMESPACE_BEGIN -/** +/** * Concrete class which provides the standard calendar used by most of the world. * <P> * The standard (Gregorian) calendar has 2 eras, BC and AD. @@ -393,7 +399,7 @@ public: * @param field the time field. * @param status error result. * @return the minimum value that this field could have, given the current date. - * @draft ICU 3.0 + * @stable ICU 3.0 */ int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const; diff --git a/icuSources/i18n/unicode/measfmt.h b/icuSources/i18n/unicode/measfmt.h index f3adae5d..a5af55e9 100644 --- a/icuSources/i18n/unicode/measfmt.h +++ b/icuSources/i18n/unicode/measfmt.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2004, International Business Machines +* Copyright (c) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -17,9 +17,15 @@ #include "unicode/format.h" +/** + * \file + * \brief C++ API: Formatter for measure objects. + */ + U_NAMESPACE_BEGIN /** + * * A formatter for measure objects. This is an abstract base class. * * <p>To format or parse a measure object, first create a formatter @@ -30,7 +36,7 @@ U_NAMESPACE_BEGIN * * @see Format * @author Alan Liu - * @draft ICU 3.0 + * @stable ICU 3.0 */ class U_I18N_API MeasureFormat : public Format { @@ -42,7 +48,7 @@ class U_I18N_API MeasureFormat : public Format { * @param locale desired locale * @param ec input-output error code * @return a formatter object, or NULL upon error - * @draft ICU 3.0 + * @stable ICU 3.0 */ static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale, UErrorCode& ec); @@ -52,7 +58,7 @@ class U_I18N_API MeasureFormat : public Format { * locale. * @param ec input-output error code * @return a formatter object, or NULL upon error - * @draft ICU 3.0 + * @stable ICU 3.0 */ static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec); @@ -60,7 +66,7 @@ class U_I18N_API MeasureFormat : public Format { /** * Default constructor. - * @draft ICU 3.0 + * @stable ICU 3.0 */ MeasureFormat(); }; diff --git a/icuSources/i18n/unicode/measunit.h b/icuSources/i18n/unicode/measunit.h index 7e884b19..9a210e65 100644 --- a/icuSources/i18n/unicode/measunit.h +++ b/icuSources/i18n/unicode/measunit.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2004, International Business Machines +* Copyright (c) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -17,6 +17,11 @@ #include "unicode/fmtable.h" +/** + * \file + * \brief C++ API: A unit for measuring a quantity. + */ + U_NAMESPACE_BEGIN /** @@ -26,34 +31,34 @@ U_NAMESPACE_BEGIN * <p>This is an abstract class. * * @author Alan Liu - * @draft ICU 3.0 + * @stable ICU 3.0 */ class U_I18N_API MeasureUnit: public UObject { public: /** * Return a polymorphic clone of this object. The result will * have the same class as returned by getDynamicClassID(). - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UObject* clone() const = 0; /** * Destructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~MeasureUnit(); /** * Equality operator. Return true if this object is equal * to the given object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UBool operator==(const UObject& other) const = 0; protected: /** * Default constructor. - * @draft ICU 3.0 + * @stable ICU 3.0 */ MeasureUnit(); }; diff --git a/icuSources/i18n/unicode/measure.h b/icuSources/i18n/unicode/measure.h index 10f6daf8..6b7a0497 100644 --- a/icuSources/i18n/unicode/measure.h +++ b/icuSources/i18n/unicode/measure.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2004, International Business Machines +* Copyright (c) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -13,6 +13,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: MeasureUnit object. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/fmtable.h" @@ -35,7 +40,7 @@ class MeasureUnit; * <p>This is an abstract class. * * @author Alan Liu - * @draft ICU 3.0 + * @stable ICU 3.0 */ class U_I18N_API Measure: public UObject { public: @@ -47,40 +52,40 @@ class U_I18N_API Measure: public UObject { * @param adoptedUnit the unit object, which must not be NULL * @param ec input-output error code. If the amount or the unit * is invalid, then this will be set to a failing value. - * @draft ICU 3.0 + * @stable ICU 3.0 */ Measure(const Formattable& number, MeasureUnit* adoptedUnit, UErrorCode& ec); /** * Copy constructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ Measure(const Measure& other); /** * Assignment operator - * @draft ICU 3.0 + * @stable ICU 3.0 */ Measure& operator=(const Measure& other); /** * Return a polymorphic clone of this object. The result will * have the same class as returned by getDynamicClassID(). - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UObject* clone() const = 0; /** * Destructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~Measure(); /** * Equality operator. Return true if this object is equal * to the given object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UBool operator==(const UObject& other) const; @@ -88,20 +93,20 @@ class U_I18N_API Measure: public UObject { * Return a reference to the numeric value of this object. The * numeric value may be of any numeric type supported by * Formattable. - * @draft ICU 3.0 + * @stable ICU 3.0 */ inline const Formattable& getNumber() const; /** * Return a reference to the unit of this object. - * @draft ICU 3.0 + * @stable ICU 3.0 */ inline const MeasureUnit& getUnit() const; protected: /** * Default constructor. - * @draft ICU 3.0 + * @stable ICU 3.0 */ Measure(); diff --git a/icuSources/i18n/unicode/msgfmt.h b/icuSources/i18n/unicode/msgfmt.h index 3ba4d37b..815cabbb 100644 --- a/icuSources/i18n/unicode/msgfmt.h +++ b/icuSources/i18n/unicode/msgfmt.h @@ -1,5 +1,5 @@ /* -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2006, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************** * * File MSGFMT.H @@ -19,6 +19,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Formats messages in a language-neutral way. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/format.h" @@ -31,6 +36,7 @@ class NumberFormat; class DateFormat; /** + * * A MessageFormat produces concatenated messages in a * language-neutral way. It should be used for all string * concatenations that are visible to end users. @@ -179,6 +185,21 @@ class DateFormat; * If a pattern is used, then unquoted braces in the pattern, if any, * must match: that is, "ab {0} de" and "ab '}' de" are ok, but "ab * {0'}' de" and "ab } de" are not. + * <p> + * <dl><dt><b>Warning:</b><dd>The rules for using quotes within message + * format patterns unfortunately have shown to be somewhat confusing. + * In particular, it isn't always obvious to localizers whether single + * quotes need to be doubled or not. Make sure to inform localizers about + * the rules, and tell them (for example, by using comments in resource + * bundle source files) which strings will be processed by MessageFormat. + * Note that localizers may need to use single quotes in translated + * strings where the original version doesn't have them. + * <br>Note also that the simplest way to avoid the problem is to + * use the real apostrophe (single quote) character U+2019 (') for + * human-readable text, and to use the ASCII apostrophe (U+0027 ' ) + * only in program syntax, like quoting in MessageFormat. + * See the annotations for U+0027 Apostrophe in The Unicode Standard.</p> + * </dl> * <P> * The argumentIndex is a non-negative integer, which corresponds to the * index of the arguments presented in an array to be formatted. The @@ -573,6 +594,28 @@ public: Formattable& result, ParsePosition& pos) const; + /** + * Convert an 'apostrophe-friendly' pattern into a standard + * pattern. Standard patterns treat all apostrophes as + * quotes, which is problematic in some languages, e.g. + * French, where apostrophe is commonly used. This utility + * assumes that only an unpaired apostrophe immediately before + * a brace is a true quote. Other unpaired apostrophes are paired, + * and the resulting standard pattern string is returned. + * + * <p><b>Note</b> it is not guaranteed that the returned pattern + * is indeed a valid pattern. The only effect is to convert + * between patterns having different quoting semantics. + * + * @param pattern the 'apostrophe-friendly' patttern to convert + * @param status Input/output error code. If the pattern + * cannot be parsed, the failure code is set. + * @return the standard equivalent of the original pattern + * @stable ICU 3.4 + */ + static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern, + UErrorCode& status); + /** * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. * This method is to implement a simple version of RTTI, since not all diff --git a/icuSources/i18n/unicode/numfmt.h b/icuSources/i18n/unicode/numfmt.h index 248c7b01..b27ed470 100644 --- a/icuSources/i18n/unicode/numfmt.h +++ b/icuSources/i18n/unicode/numfmt.h @@ -1,5 +1,7 @@ /* -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +******************************************************************************** +* Copyright (C) 1997-2006, International Business Machines Corporation and others. +* All Rights Reserved. ******************************************************************************** * * File NUMFMT.H @@ -22,6 +24,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Abstract base class for all number formats. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/unistr.h" @@ -34,14 +41,10 @@ U_NAMESPACE_BEGIN #if !UCONFIG_NO_SERVICE class NumberFormatFactory; class StringEnumeration; - -/** - * @internal - */ -typedef const void* URegistryKey; #endif /** + * * Abstract base class for all number formats. Provides interface for * formatting and parsing a number. Also provides methods for * determining which locales have number formats, and what their names @@ -265,7 +268,7 @@ public: * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @return Reference to 'appendTo' parameter. - * @draft ICU 2.8 + * @stable ICU 2.8 */ UnicodeString& format( int64_t number, UnicodeString& appendTo) const; @@ -312,7 +315,7 @@ public: * @param pos On input: an alignment field, if desired. * On output: the offsets of the alignment field. * @return Reference to 'appendTo' parameter. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual UnicodeString& format(int64_t number, UnicodeString& appendTo, @@ -639,7 +642,7 @@ public: * to use. It need not be null-terminated. May be the empty * string or NULL to indicate no currency. * @param ec input-output error code - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual void setCurrency(const UChar* theCurrency, UErrorCode& ec); @@ -707,10 +710,6 @@ protected: */ virtual void getEffectiveCurrency(UChar* result, UErrorCode& ec) const; -private: - static const int32_t fgMaxIntegerDigits; - static const int32_t fgMinIntegerDigits; - private: enum EStyles { @@ -740,8 +739,6 @@ private: * @return A new NumberFormat instance. */ static NumberFormat* makeInstance(const Locale& desiredLocale, EStyles choice, UErrorCode& success); - static const int32_t fgNumberPatternsCount; - static const UChar* const fgLastResortNumberPatterns[]; UBool fGroupingUsed; int32_t fMaxIntegerDigits; @@ -771,7 +768,7 @@ public: /** * Destructor - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~NumberFormatFactory(); @@ -802,7 +799,7 @@ public: /** * A NumberFormatFactory that supports a single locale. It can be visible or invisible. - * @draft ICU 3.0 + * @stable ICU 2.6 */ class U_I18N_API SimpleNumberFormatFactory : public NumberFormatFactory { protected: @@ -825,7 +822,7 @@ public: SimpleNumberFormatFactory(const Locale& locale, UBool visible = TRUE); /** - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual ~SimpleNumberFormatFactory(); diff --git a/icuSources/i18n/unicode/rbnf.h b/icuSources/i18n/unicode/rbnf.h index 56b0f8fc..030565eb 100644 --- a/icuSources/i18n/unicode/rbnf.h +++ b/icuSources/i18n/unicode/rbnf.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and others. +* Copyright (C) 1997-2006, International Business Machines Corporation and others. * All Rights Reserved. ******************************************************************************* */ @@ -10,6 +10,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Rule Based Number Format + */ + /** * \def U_HAVE_RBNF * This will be 0 if RBNF support is not included in ICU @@ -17,7 +22,7 @@ * * @stable ICU 2.4 */ -#if defined(U_INT64_T_UNAVAILABLE) || UCONFIG_NO_FORMATTING +#if UCONFIG_NO_FORMATTING #define U_HAVE_RBNF 0 #else #define U_HAVE_RBNF 1 @@ -52,17 +57,13 @@ class Collator; #endif /** - * \brief C++ API: RuleBasedNumberFormat - * - * <h2> Rule Based Number Format C++ API </h2> - * - * <p>A class that formats numbers according to a set of rules. This number formatter is + * The RuleBasedNumberFormat class formats numbers according to a set of rules. This number formatter is * typically used for spelling out numeric values in words (e.g., 25,3476 as * "twenty-five thousand three hundred seventy-six" or "vingt-cinq mille trois * cents soixante-seize" or * "fünfundzwanzigtausenddreihundertsechsundsiebzig"), but can also be used for * other complicated formatting tasks, such as formatting a number of seconds as hours, - * minutes and seconds (e.g., 3,730 as "1:02:10").</p> + * minutes and seconds (e.g., 3,730 as "1:02:10"). * * <p>The resources contain three predefined formatters for each locale: spellout, which * spells out a value in words (123 is "one hundred twenty-three"); ordinal, which @@ -513,7 +514,7 @@ public: * syntax. * @param perror The parse error if an error was encountered. * @param status The status indicating whether the constructor succeeded. - * @draft ICU 3.2 + * @stable ICU 3.2 */ RuleBasedNumberFormat(const UnicodeString& rules, UParseError& perror, UErrorCode& status); @@ -538,7 +539,7 @@ public: * names in the description. These will be copied by the constructor. * @param perror The parse error if an error was encountered. * @param status The status indicating whether the constructor succeeded. - * @draft ICU 3.2 + * @stable ICU 3.2 */ RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations, UParseError& perror, UErrorCode& status); @@ -585,7 +586,7 @@ public: * lenient parsing. * @param perror The parse error if an error was encountered. * @param status The status indicating whether the constructor succeeded. - * @draft ICU 3.2 + * @stable ICU 3.2 */ RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations, const Locale& locale, UParseError& perror, UErrorCode& status); @@ -676,7 +677,7 @@ public: /** * Return the number of locales for which we have localized rule set display names. * @return the number of locales for which we have localized rule set display names. - * @draft ICU 3.2 + * @stable ICU 3.2 */ virtual int32_t getNumberOfRuleSetDisplayNameLocales(void) const; @@ -686,7 +687,7 @@ public: * @param status set to a failure code when this function fails * @return the locale * @see #getNumberOfRuleSetDisplayNameLocales - * @draft ICU 3.2 + * @stable ICU 3.2 */ virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const; @@ -701,7 +702,7 @@ public: * display name is desired * @return the display name for the given index, which might be bogus if there is an error * @see #getRuleSetName - * @draft ICU 3.2 + * @stable ICU 3.2 */ virtual UnicodeString getRuleSetDisplayName(int32_t index, const Locale& locale = Locale::getDefault()); @@ -711,8 +712,8 @@ public: * The locale is matched against the locales for which there is display name data, using * normal fallback rules. If no locale matches, the default display name is returned. * @return the display name for the rule set - * @draft ICU 3.2 - * @see #getRuleSetDisplayNames + * @stable ICU 3.2 + * @see #getRuleSetDisplayName */ virtual UnicodeString getRuleSetDisplayName(const UnicodeString& ruleSetName, const Locale& locale = Locale::getDefault()); @@ -857,7 +858,7 @@ public: * @param parsePosition On entry, contains the position of the first character * in "text" to examine. On exit, has been updated to contain the position * of the first character in "text" that wasn't consumed by the parse. - * @see #setLenientParseMode + * @see #setLenient * @stable ICU 2.0 */ virtual void parse(const UnicodeString& text, @@ -917,7 +918,7 @@ public: * Returns true if lenient-parse mode is turned on. Lenient parsing is off * by default. * @return true if lenient-parse mode is turned on. - * @see #setLenientParseMode + * @see #setLenient * @stable ICU 2.0 */ virtual inline UBool isLenient(void) const; @@ -938,7 +939,7 @@ public: * Return the name of the current default rule set. If the current rule set is * not public, returns a bogus (and empty) UnicodeString. * @return the name of the current default rule set - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UnicodeString getDefaultRuleSetName() const; diff --git a/icuSources/i18n/unicode/regex.h b/icuSources/i18n/unicode/regex.h index cfea208e..979082a3 100644 --- a/icuSources/i18n/unicode/regex.h +++ b/icuSources/i18n/unicode/regex.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: regex.h @@ -282,7 +282,7 @@ private: * * @internal */ - virtual RegexMatcher *matcher(const UChar *input, + RegexMatcher *matcher(const UChar *input, UErrorCode &status) const; public: @@ -530,7 +530,7 @@ public: * @param startIndex The input string index at which to begin matching. * @param status A reference to a UErrorCode to receive any errors. * @return TRUE if there is a match - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual UBool matches(int32_t startIndex, UErrorCode &status); @@ -563,7 +563,7 @@ public: * @param startIndex The input string index at which to begin matching. * @param status A reference to a UErrorCode to receive any errors. * @return TRUE if there is a match. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual UBool lookingAt(int32_t startIndex, UErrorCode &status); @@ -652,7 +652,7 @@ public: * @return the start position of substring matched by the specified group. * @stable ICU 2.4 */ - virtual int32_t start(int group, UErrorCode &status) const; + virtual int32_t start(int32_t group, UErrorCode &status) const; /** @@ -680,7 +680,7 @@ public: * Return -1 if the capture group exists in the pattern but was not part of the match. * @stable ICU 2.4 */ - virtual int32_t end(int group, UErrorCode &status) const; + virtual int32_t end(int32_t group, UErrorCode &status) const; /** @@ -701,7 +701,7 @@ public: * the specified position in the input string. * * @return this RegexMatcher. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual RegexMatcher &reset(int32_t index, UErrorCode &status); diff --git a/icuSources/i18n/unicode/search.h b/icuSources/i18n/unicode/search.h index 474ae91e..a2fb2a8c 100644 --- a/icuSources/i18n/unicode/search.h +++ b/icuSources/i18n/unicode/search.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2003 IBM and others. All rights reserved. +* Copyright (C) 2001-2005 IBM and others. All rights reserved. ********************************************************************** * Date Name Description * 03/22/2000 helena Creation. @@ -12,6 +12,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: SearchIterator object. + */ + #if !UCONFIG_NO_COLLATION #include "unicode/uobject.h" @@ -32,6 +37,7 @@ typedef struct USearch USearch; U_NAMESPACE_BEGIN /** + * * <tt>SearchIterator</tt> is an abstract base class that provides * methods to search for a pattern within a text string. Instances of * <tt>SearchIterator</tt> maintain a current position and scans over the diff --git a/icuSources/i18n/unicode/simpletz.h b/icuSources/i18n/unicode/simpletz.h index a9af38e5..bb7c9d14 100644 --- a/icuSources/i18n/unicode/simpletz.h +++ b/icuSources/i18n/unicode/simpletz.h @@ -1,5 +1,5 @@ /* -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) {1997-2005}, International Business Machines Corporation and others. All Rights Reserved. * * ******************************************************************************** * @@ -25,6 +25,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: SimpleTimeZone is a concrete subclass of TimeZone. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/timezone.h" @@ -600,7 +605,7 @@ public: /** * Redeclared TimeZone method. This implementation simply calls * the base class method, which otherwise would be hidden. - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const; @@ -640,7 +645,7 @@ public: * are in effect. A positive number, typically one hour (3600000). * @stable ICU 2.0 */ - int32_t getDSTSavings(void) const; + virtual int32_t getDSTSavings(void) const; /** * Queries if this TimeZone uses Daylight Savings Time. diff --git a/icuSources/i18n/unicode/smpdtfmt.h b/icuSources/i18n/unicode/smpdtfmt.h index 335c7651..4c219594 100644 --- a/icuSources/i18n/unicode/smpdtfmt.h +++ b/icuSources/i18n/unicode/smpdtfmt.h @@ -1,5 +1,5 @@ /* -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2006, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************* * * File SMPDTFMT.H @@ -25,6 +25,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Format and parse dates in a language-independent manner. + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/datefmt.h" @@ -35,6 +40,7 @@ class DateFormatSymbols; class DateFormat; /** + * * SimpleDateFormat is a concrete class for formatting and parsing dates in a * language-independent manner. It allows for formatting (millis -> text), * parsing (text -> millis), and normalization. Formats/Parses a date or time, @@ -78,8 +84,9 @@ class DateFormat; * a am/pm marker (Text) PM * k hour in day (1~24) (Number) 24 * K hour in am/pm (0~11) (Number) 0 - * z time zone (Text) Pacific Standard Time + * z time zone (Time) Pacific Standard Time * Z time zone (RFC 822) (Number) -0800 + * v time zone (generic) (Text) Pacific Time * g Julian day (Number) 2451334 * A milliseconds in day (Number) 69540000 * ' escape for text (Delimiter) 'Date=' @@ -113,11 +120,11 @@ class DateFormat; * \code * Format Pattern Result * -------------- ------- - * "yyyy.MM.dd G 'at' HH:mm:ss z" ->> 1996.07.10 AD at 15:08:56 PDT + * "yyyy.MM.dd G 'at' HH:mm:ss vvvv" ->> 1996.07.10 AD at 15:08:56 Pacific Time * "EEE, MMM d, ''yy" ->> Wed, July 10, '96 * "h:mm a" ->> 12:08 PM * "hh 'o''clock' a, zzzz" ->> 12 o'clock PM, Pacific Daylight Time - * "K:mm a, z" ->> 0:00 PM, PST + * "K:mm a, vvv" ->> 0:00 PM, PT * "yyyyy.MMMMM.dd GGG hh:mm aaa" ->> 1996.July.10 AD 12:08 PM * \endcode * </pre> @@ -716,6 +723,21 @@ private: int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field, const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; + /** + * Private code-size reduction function used by subParse. + * @param text the time text being parsed. + * @param start where to start parsing. + * @param field the date field being parsed. + * @param stringArray the string array to parsed. + * @param stringArrayCount the size of the array. + * @param cal a Calendar set to the date and time to be formatted + * into a date/time string. + * @return the new start position if matching succeeded; a negative number + * indicating matching failure, otherwise. + */ + int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field, + const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; + /** * Private member function that converts the parsed date strings into * timeFields. Returns -start (for ParsePosition) if failed. @@ -765,6 +787,25 @@ private: */ void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); + /** + * Given text, a start in the text, and a row index, return the column index that + * of the zone name that matches (case insensitive) at start, or 0 if none matches. + * + int32_t matchZoneString(const UnicodeString& text, int32_t start, int32_t zi) const; + */ + + /** + * Given text, a start in the text, and a calendar, return the next offset in the text + * after matching the zone string. If we fail to match, return 0. Update the calendar + * as appropriate. + */ + int32_t subParseZoneString(const UnicodeString& text, int32_t start, Calendar& cal, UErrorCode& status) const; + + /** + * append the gmt string + */ + inline void appendGMT(UnicodeString &appendTo, Calendar& cal, UErrorCode& status) const; + /** * Used to map pattern characters to Calendar field identifiers. */ @@ -806,6 +847,8 @@ private: */ /*transient*/ int32_t fDefaultCenturyStartYear; + /*transient*/ TimeZone* parsedTimeZone; // here to avoid api change + UBool fHaveDefaultCentury; }; diff --git a/icuSources/i18n/unicode/sortkey.h b/icuSources/i18n/unicode/sortkey.h index 4e550450..ef202dd9 100644 --- a/icuSources/i18n/unicode/sortkey.h +++ b/icuSources/i18n/unicode/sortkey.h @@ -1,7 +1,8 @@ /* - * Copyright (C) 1996-2004, International Business Machines Corporation and others. + ***************************************************************************** + * Copyright (C) 1996-2006, International Business Machines Corporation and others. * All Rights Reserved. - ***************************************************************************************** + ***************************************************************************** * * File sortkey.h * @@ -14,7 +15,7 @@ * 6/20/97 helena Java class name change. * 8/18/97 helena Added internal API documentation. * 6/26/98 erm Changed to use byte arrays and memcmp. - ***************************************************************************************** + ***************************************************************************** */ #ifndef SORTKEY_H @@ -22,6 +23,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Keys for comparing strings multiple times. + */ + #if !UCONFIG_NO_COLLATION #include "unicode/uobject.h" @@ -34,6 +40,7 @@ U_NAMESPACE_BEGIN class RuleBasedCollator; /** + * * Collation keys are generated by the Collator class. Use the CollationKey objects * instead of Collator to compare strings multiple times. A CollationKey * preprocesses the comparison information from the Collator object to @@ -102,7 +109,6 @@ public: * Creates a collation key based on the collation key values. * @param values the collation key values * @param count number of collation key values, including trailing nulls. - * @see #createBits * @deprecated ICU 2.8 Use Collator::getSortKey(...) instead */ CollationKey(const uint8_t* values, diff --git a/icuSources/i18n/unicode/stsearch.h b/icuSources/i18n/unicode/stsearch.h index 565f1e6a..3844315a 100644 --- a/icuSources/i18n/unicode/stsearch.h +++ b/icuSources/i18n/unicode/stsearch.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004 IBM and others. All rights reserved. +* Copyright (C) 2001-2006 IBM and others. All rights reserved. ********************************************************************** * Date Name Description * 03/22/2000 helena Creation. @@ -12,6 +12,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Service for searching text based on RuleBasedCollator. + */ + #if !UCONFIG_NO_COLLATION #include "unicode/tblcoll.h" @@ -20,19 +25,20 @@ U_NAMESPACE_BEGIN -/** +/** + * * <tt>StringSearch</tt> is a <tt>SearchIterator</tt> that provides * language-sensitive text searching based on the comparison rules defined * in a {@link RuleBasedCollator} object. * StringSearch ensures that language eccentricity can be - * handled, e.g. for the German collator, characters ß and SS will be matched + * handled, e.g. for the German collator, characters ß and SS will be matched * if case is chosen to be ignored. - * See the <a href="http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> + * See the <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> * "ICU Collation Design Document"</a> for more information. * <p> * The algorithm implemented is a modified form of the Boyer Moore's search. * For more information see - * <a href=http://oss.software.ibm.com/icu/docs/papers/efficient_text_searching_in_java.html> + * <a href="http://icu.sourceforge.net/docs/papers/efficient_text_searching_in_java.html"> * "Efficient Text Searching in Java"</a>, published in <i>Java Report</i> * in February, 1999, for further information on the algorithm. * <p> @@ -49,7 +55,7 @@ U_NAMESPACE_BEGIN * there exists no non-ignorable combining mark before or after S? * in S respectively. * </pre> - * Option 2. will be the default· + * Option 2. will be the default. * <p> * This search has APIs similar to that of other text iteration mechanisms * such as the break iterators in <tt>BreakIterator</tt>. Using these @@ -270,7 +276,7 @@ public: * @return a clone of this object * * @see getDynamicClassID - * @draft ICU 2.8 + * @stable ICU 2.8 */ StringSearch *clone() const; @@ -495,11 +501,6 @@ private : */ UnicodeString m_pattern_; /** - * Corresponding collation rules - * @stable ICU 2.0 - */ - UnicodeString m_collation_rules_; - /** * String search struct data * @stable ICU 2.0 */ diff --git a/icuSources/i18n/unicode/tblcoll.h b/icuSources/i18n/unicode/tblcoll.h index 531a6996..c83a6ac2 100644 --- a/icuSources/i18n/unicode/tblcoll.h +++ b/icuSources/i18n/unicode/tblcoll.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 1996-2004, International Business Machines Corporation and +* Copyright (C) 1996-2006, International Business Machines Corporation and * others. All Rights Reserved. ****************************************************************************** */ @@ -56,6 +56,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: RuleBasedCollator class provides the simple implementation of Collator. + */ + #if !UCONFIG_NO_COLLATION #include "unicode/coll.h" @@ -82,20 +87,20 @@ class CollationElementIterator; * <em>Important: </em>The ICU collation service has been reimplemented * in order to achieve better performance and UCA compliance. * For details, see the - * <a href="http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> + * <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> * collation design document</a>. * <p> * RuleBasedCollator is a thin C++ wrapper over the C implementation. * <p> * For more information about the collation service see - * <a href="http://oss.software.ibm.com/icu/userguide/Collate_Intro.html">the users guide</a>. + * <a href="http://icu.sourceforge.net/userguide/Collate_Intro.html">the users guide</a>. * <p> * Collation service provides correct sorting orders for most locales supported in ICU. * If specific data for a locale is not available, the orders eventually falls back * to the <a href="http://www.unicode.org/unicode/reports/tr10/">UCA sort order</a>. * <p> * Sort ordering may be customized by providing your own set of rules. For more on - * this subject see the <a href="http://oss.software.ibm.com/icu/userguide/Collate_Customization.html"> + * this subject see the <a href="http://icu.sourceforge.net/userguide/Collate_Customization.html"> * Collation customization</a> section of the users guide. * <p> * Note, RuleBasedCollator is not to be subclassed. @@ -171,6 +176,27 @@ public: */ RuleBasedCollator(const RuleBasedCollator& other); + + /** Opens a collator from a collator binary image created using + * cloneBinary. Binary image used in instantiation of the + * collator remains owned by the user and should stay around for + * the lifetime of the collator. The API also takes a base collator + * which usualy should be UCA. + * @param bin binary image owned by the user and required through the + * lifetime of the collator + * @param length size of the image. If negative, the API will try to + * figure out the length of the image + * @param base fallback collator, usually UCA. Base is required to be + * present through the lifetime of the collator. Currently + * it cannot be NULL. + * @param status for catching errors + * @return newly created collator + * @see cloneBinary + * @draft ICU 3.4 + */ + RuleBasedCollator(const uint8_t *bin, int32_t length, + const RuleBasedCollator *base, + UErrorCode &status); // destructor -------------------------------------------------------------- /** @@ -476,6 +502,19 @@ public: */ uint8_t *cloneRuleData(int32_t &length, UErrorCode &status); + + /** Creates a binary image of a collator. This binary image can be stored and + * later used to instantiate a collator using ucol_openBinary. + * This API supports preflighting. + * @param buffer a fill-in buffer to receive the binary image + * @param capacity capacity of the destination buffer + * @param status for catching errors + * @return size of the image + * @see ucol_openBinary + * @draft ICU 3.4 + */ + int32_t cloneBinary(uint8_t *buffer, int32_t capacity, UErrorCode &status); + /** * Returns current rules. Delta defines whether full rules are returned or * just the tailoring. @@ -654,7 +693,7 @@ private: /** * Rule UnicodeString */ - UnicodeString *urulestring; + UnicodeString urulestring; // friend classes -------------------------------------------------------- @@ -681,13 +720,6 @@ private: */ RuleBasedCollator(); - /** - * Constructor that takes in a UCollator struct - * @param collator UCollator struct - * @param rule the rule for the collator. - */ - RuleBasedCollator(UCollator *collator, UnicodeString *rule); - /** * RuleBasedCollator constructor. This constructor takes a locale. The * only caller of this class should be Collator::createInstance(). If @@ -737,7 +769,7 @@ private: * @param collator new ucollator data * @param rules corresponding collation rules */ - void setUCollator(UCollator *collator, UnicodeString *rules); + void setUCollator(UCollator *collator); public: /** @@ -762,7 +794,7 @@ private: void checkOwned(void); // utility to init rule string used by checkOwned and construct - void setRuleStringFromCollator(UErrorCode& status); + void setRuleStringFromCollator(); /** * Converts C's UCollationResult to EComparisonResult @@ -799,17 +831,16 @@ inline void RuleBasedCollator::setUCollator(const Locale &locale, } -inline void RuleBasedCollator::setUCollator(UCollator *collator, - UnicodeString *rules) +inline void RuleBasedCollator::setUCollator(UCollator *collator) { + if (ucollator && dataIsOwned) { ucol_close(ucollator); - delete urulestring; } ucollator = collator; - urulestring = rules; dataIsOwned = FALSE; isWriteThroughAlias = TRUE; + setRuleStringFromCollator(); } inline const UCollator * RuleBasedCollator::getUCollator() diff --git a/icuSources/i18n/unicode/timezone.h b/icuSources/i18n/unicode/timezone.h index 79838e90..ef90ee13 100644 --- a/icuSources/i18n/unicode/timezone.h +++ b/icuSources/i18n/unicode/timezone.h @@ -1,5 +1,5 @@ /* -* Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) {1997-2005}, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************** * * File TIMEZONE.H @@ -28,6 +28,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: TimeZone object + */ + #if !UCONFIG_NO_FORMATTING #include "unicode/uobject.h" @@ -39,6 +44,7 @@ U_NAMESPACE_BEGIN class StringEnumeration; /** + * * <code>TimeZone</code> represents a time zone offset, and also figures out daylight * savings. * @@ -412,7 +418,7 @@ public: * typically one hour. * @param ec input-output error code * - * @draft ICU 2.8 + * @stable ICU 2.8 */ virtual void getOffset(UDate date, UBool local, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& ec) const; @@ -596,7 +602,23 @@ public: * @stable ICU 2.0 */ virtual UClassID getDynamicClassID(void) const = 0; - + + /** + * Returns the amount of time to be added to local standard time + * to get local wall clock time. + * <p> + * The default implementation always returns 3600000 milliseconds + * (i.e., one hour) if this time zone observes Daylight Saving + * Time. Otherwise, 0 (zero) is returned. + * <p> + * If an underlying TimeZone implementation subclass supports + * historical Daylight Saving Time changes, this method returns + * the known latest daylight saving value. + * + * @return the amount of saving time in milliseconds + * @draft ICU 3.6 + */ + virtual int32_t getDSTSavings() const; protected: /** diff --git a/icuSources/i18n/unicode/translit.h b/icuSources/i18n/unicode/translit.h index 415c0885..117325ff 100644 --- a/icuSources/i18n/unicode/translit.h +++ b/icuSources/i18n/unicode/translit.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -12,6 +12,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: Tranforms text from one format to another. + */ + #if !UCONFIG_NO_TRANSLITERATION #include "unicode/uobject.h" @@ -30,6 +35,7 @@ class NormalizationTransliterator; class TransliteratorIDParser; /** + * * <code>Transliterator</code> is an abstract class that * transliterates text from one format to another. The most common * kind of transliterator is a script, or alphabet, transliterator. @@ -343,6 +349,7 @@ protected: friend class TransliteratorParser; // for parseID() friend class TransliteratorIDParser; // for createBasicInstance() + friend class TransliteratorAlias; // for setID() public: @@ -366,7 +373,7 @@ public: * @see #registerInstance * @stable ICU 2.0 */ - virtual Transliterator* clone() const { return 0; } + virtual Transliterator* clone() const; /** * Transliterates a segment of a string, with optional filtering. @@ -599,8 +606,8 @@ protected: * [<code>pos.start</code>, <code>pos.limit</code>) without * applying the filter. End user code should call <code> * transliterate()</code> instead of this method. Subclass code - * should call <code>filteredTransliterate()</code> instead of - * this method.<p> + * and wrapping transliterators should call + * <code>filteredTransliterate()</code> instead of this method.<p> * * @param text the buffer holding transliterated and * untransliterated text @@ -621,7 +628,8 @@ protected: UTransPosition& pos, UBool incremental) const = 0; - /** +public: + /** * Transliterate a substring of text, as specified by index, taking filters * into account. This method is for subclasses that need to delegate to * another transliterator, such as CompoundTransliterator. @@ -636,9 +644,6 @@ protected: UTransPosition& index, UBool incremental) const; - friend class CompoundTransliterator; // for filteredTransliterate() - friend class AnyTransliterator; // for filteredTransliterate() - private: /** @@ -884,7 +889,7 @@ public: * @return the number of transliterators that compose this * transliterator, or 1 if this transliterator is not composed of * multiple transliterators - * @draft ICU 3.0 + * @stable ICU 3.0 */ int32_t countElements() const; @@ -905,7 +910,7 @@ public: * transliterator, if this transliterator is made up of multiple * transliterators, otherwise a reference to this object if given * an index of 0 - * @draft ICU 3.0 + * @stable ICU 3.0 */ const Transliterator& getElement(int32_t index, UErrorCode& ec) const; @@ -975,7 +980,7 @@ public: Token context); /** - * Registers a instance <tt>obj</tt> of a subclass of + * Registers an instance <tt>obj</tt> of a subclass of * <code>Transliterator</code> with the system. When * <tt>createInstance()</tt> is called with an ID string that is * equal to <tt>obj->getID()</tt>, then <tt>obj->clone()</tt> is @@ -993,6 +998,23 @@ public: */ static void U_EXPORT2 registerInstance(Transliterator* adoptedObj); + /** + * Registers an ID string as an alias of another ID string. + * That is, after calling this function, <tt>createInstance(aliasID)</tt> + * will return the same thing as <tt>createInstance(realID)</tt>. + * This is generally used to create shorter, more mnemonic aliases + * for long compound IDs. + * + * @param aliasID The new ID being registered. + * @param realID The ID that the new ID is to be an alias for. + * This can be a compound ID and can include filters and should + * refer to transliterators that have already been registered with + * the framework, although this isn't checked. + * @draft ICU 3.6 + */ + static void U_EXPORT2 registerAlias(const UnicodeString& aliasID, + const UnicodeString& realID); + protected: /** @@ -1013,6 +1035,11 @@ protected: */ static void _registerInstance(Transliterator* adoptedObj); + /** + * @internal + */ + static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID); + /** * Register two targets as being inverses of one another. For * example, calling registerSpecialInverse("NFC", "NFD", true) causes @@ -1076,7 +1103,7 @@ public: * @return a newly-created StringEnumeration over the transliterators * available at the time of the call. The caller should delete this object * when done using it. - * @draft ICU 3.0 + * @stable ICU 3.0 */ static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec); @@ -1272,8 +1299,9 @@ inline int32_t Transliterator::getMaximumContextLength(void) const { inline void Transliterator::setID(const UnicodeString& id) { ID = id; - // NUL-terminate the ID string - ID.getTerminatedBuffer(); + // NUL-terminate the ID string, which is a non-aliased copy. + ID.append((UChar)0); + ID.truncate(ID.length()-1); } inline Transliterator::Token Transliterator::integerToken(int32_t i) { diff --git a/icuSources/i18n/unicode/ucal.h b/icuSources/i18n/unicode/ucal.h index 8bde9109..30e4bfa8 100644 --- a/icuSources/i18n/unicode/ucal.h +++ b/icuSources/i18n/unicode/ucal.h @@ -1,5 +1,7 @@ /* -* Copyright (C) 1996-2004, International Business Machines Corporation and others. All Rights Reserved. +******************************************************************************* +* Copyright (C) 1996-2006, International Business Machines Corporation and +* others. All Rights Reserved. ******************************************************************************* */ @@ -161,119 +163,238 @@ typedef enum UCalendarType UCalendarType; */ enum UCalendarDateFields { /** - * Era field + * Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar. + * This is a calendar-specific value. * @stable ICU 2.6 */ UCAL_ERA, + /** - * Year field + * Field number indicating the year. This is a calendar-specific value. * @stable ICU 2.6 */ UCAL_YEAR, + /** - * Month field + * Field number indicating the month. This is a calendar-specific value. + * The first month of the year is + * <code>JANUARY</code>; the last depends on the number of months in a year. + * @see #UCAL_JANUARY + * @see #UCAL_FEBRUARY + * @see #UCAL_MARCH + * @see #UCAL_APRIL + * @see #UCAL_MAY + * @see #UCAL_JUNE + * @see #UCAL_JULY + * @see #UCAL_AUGUST + * @see #UCAL_SEPTEMBER + * @see #UCAL_OCTOBER + * @see #UCAL_NOVEMBER + * @see #UCAL_DECEMBER + * @see #UCAL_UNDECIMBER * @stable ICU 2.6 */ UCAL_MONTH, + /** - * Week of year field + * Field number indicating the + * week number within the current year. The first week of the year, as + * defined by <code>UCAL_FIRST_DAY_OF_WEEK</code> and <code>UCAL_MINIMAL_DAYS_IN_FIRST_WEEK</code> + * attributes, has value 1. Subclasses define + * the value of <code>UCAL_WEEK_OF_YEAR</code> for days before the first week of + * the year. + * @see ucal_setAttribute * @stable ICU 2.6 */ UCAL_WEEK_OF_YEAR, - /** - * Week of month field + + /** + * Field number indicating the + * week number within the current month. The first week of the month, as + * defined by <code>UCAL_FIRST_DAY_OF_WEEK</code> and <code>UCAL_MINIMAL_DAYS_IN_FIRST_WEEK</code> + * attributes, has value 1. Subclasses define + * the value of <code>WEEK_OF_MONTH</code> for days before the first week of + * the month. + * @see #getFirstDayOfWeek + * @see #getMinimalDaysInFirstWeek * @stable ICU 2.6 */ UCAL_WEEK_OF_MONTH, - /** - * Date field + + /** + * Field number indicating the + * day of the month. This is a synonym for <code>DAY_OF_MONTH</code>. + * The first day of the month has value 1. + * @see #DAY_OF_MONTH * @stable ICU 2.6 */ UCAL_DATE, - /** - * Day of year field + + /** + * Field number indicating the day + * number within the current year. The first day of the year has value 1. * @stable ICU 2.6 */ UCAL_DAY_OF_YEAR, - /** - * Day of week field + + /** + * Field number indicating the day + * of the week. This field takes values <code>SUNDAY</code>, + * <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>, + * <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>. + * @see #SUNDAY + * @see #MONDAY + * @see #TUESDAY + * @see #WEDNESDAY + * @see #THURSDAY + * @see #FRIDAY + * @see #SATURDAY + * @stable ICU 2.0 * @stable ICU 2.6 */ UCAL_DAY_OF_WEEK, - /** - * Day of week in month field + + /** + * Field number indicating the + * ordinal number of the day of the week within the current month. Together + * with the <code>DAY_OF_WEEK</code> field, this uniquely specifies a day + * within a month. Unlike <code>WEEK_OF_MONTH</code> and + * <code>WEEK_OF_YEAR</code>, this field's value does <em>not</em> depend on + * <code>getFirstDayOfWeek()</code> or + * <code>getMinimalDaysInFirstWeek()</code>. <code>DAY_OF_MONTH 1</code> + * through <code>7</code> always correspond to <code>DAY_OF_WEEK_IN_MONTH + * 1</code>; <code>8</code> through <code>15</code> correspond to + * <code>DAY_OF_WEEK_IN_MONTH 2</code>, and so on. + * <code>DAY_OF_WEEK_IN_MONTH 0</code> indicates the week before + * <code>DAY_OF_WEEK_IN_MONTH 1</code>. Negative values count back from the + * end of the month, so the last Sunday of a month is specified as + * <code>DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1</code>. Because + * negative values count backward they will usually be aligned differently + * within the month than positive values. For example, if a month has 31 + * days, <code>DAY_OF_WEEK_IN_MONTH -1</code> will overlap + * <code>DAY_OF_WEEK_IN_MONTH 5</code> and the end of <code>4</code>. + * @see #DAY_OF_WEEK + * @see #WEEK_OF_MONTH * @stable ICU 2.6 */ UCAL_DAY_OF_WEEK_IN_MONTH, - /** - * AM/PM field + + /** + * Field number indicating + * whether the <code>HOUR</code> is before or after noon. + * E.g., at 10:04:15.250 PM the <code>AM_PM</code> is <code>PM</code>. + * @see #UCAL_AM + * @see #UCAL_PM + * @see #UCAL_HOUR * @stable ICU 2.6 */ UCAL_AM_PM, - /** - * Hour field + + /** + * Field number indicating the + * hour of the morning or afternoon. <code>HOUR</code> is used for the 12-hour + * clock. + * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10. + * @see #UCAL_AM_PM + * @see #UCAL_HOUR_OF_DAY * @stable ICU 2.6 */ UCAL_HOUR, - /** - * Hour of day field + + /** + * Field number indicating the + * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock. + * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22. + * @see #UCAL_HOUR * @stable ICU 2.6 */ UCAL_HOUR_OF_DAY, - /** - * Minute field + + /** + * Field number indicating the + * minute within the hour. + * E.g., at 10:04:15.250 PM the <code>UCAL_MINUTE</code> is 4. * @stable ICU 2.6 */ UCAL_MINUTE, - /** - * Second field + + /** + * Field number indicating the + * second within the minute. + * E.g., at 10:04:15.250 PM the <code>UCAL_SECOND</code> is 15. * @stable ICU 2.6 */ UCAL_SECOND, - /** - * Millisecond field + + /** + * Field number indicating the + * millisecond within the second. + * E.g., at 10:04:15.250 PM the <code>UCAL_MILLISECOND</code> is 250. * @stable ICU 2.6 */ UCAL_MILLISECOND, - /** - * Zone offset field + + /** + * Field number indicating the + * raw offset from GMT in milliseconds. * @stable ICU 2.6 */ UCAL_ZONE_OFFSET, - /** - * DST offset field + + /** + * Field number indicating the + * daylight savings offset in milliseconds. * @stable ICU 2.6 */ UCAL_DST_OFFSET, - /** - * Year / week of year + + /** + * Field number + * indicating the extended year corresponding to the + * <code>UCAL_WEEK_OF_YEAR</code> field. This may be one greater or less + * than the value of <code>UCAL_EXTENDED_YEAR</code>. * @stable ICU 2.6 */ UCAL_YEAR_WOY, - /** - * Day of week, localized (1..7) + + /** + * Field number + * indicating the localized day of week. This will be a value from 1 + * to 7 inclusive, with 1 being the localized first day of the week. * @stable ICU 2.6 */ -#ifndef U_HIDE_DRAFT_API - UCAL_DOW_LOCAL, + /** - * Year of this calendar system, encompassing all supra-year fields. For example, in Gregorian/Julian calendars, positive Extended Year values indicate years AD, 1 BC = 0 extended, 2 BC = -1 extended, and so on. - * @draft ICU 2.8 + * Year of this calendar system, encompassing all supra-year fields. For example, + * in Gregorian/Julian calendars, positive Extended Year values indicate years AD, + * 1 BC = 0 extended, 2 BC = -1 extended, and so on. + * @stable ICU 2.8 */ UCAL_EXTENDED_YEAR, - /** - * Modified Julian day number, encompassing all date-related fields. Demarcates at local midnight. - * @draft ICU 2.8 + + /** + * Field number + * indicating the modified Julian day number. This is different from + * the conventional Julian day number in two regards. First, it + * demarcates days at local zone midnight, rather than noon GMT. + * Second, it is a local number; that is, it depends on the local time + * zone. It can be thought of as a single number that encompasses all + * the date-related fields. + * @stable ICU 2.8 */ UCAL_JULIAN_DAY, + /** - * Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves <em>exactly</em> like a composite of all time-related fields, not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This reflects the fact that is must be combined with the DST_OFFSET field to obtain a unique local time value. - * @draft ICU 2.8 + * Ranges from 0 to 23:59:59.999 (regardless of DST). This field behaves <em>exactly</em> + * like a composite of all time-related fields, not including the zone fields. As such, + * it also reflects discontinuities of those fields on DST transition days. On a day + * of DST onset, it will jump forward. On a day of DST cessation, it will jump + * backward. This reflects the fact that it must be combined with the DST_OFFSET field + * to obtain a unique local time value. + * @stable ICU 2.8 */ UCAL_MILLISECONDS_IN_DAY, - -#endif /* U_HIDE_DRAFT_API */ /** * Field count @@ -281,15 +402,15 @@ enum UCalendarDateFields { */ UCAL_FIELD_COUNT, -#ifndef U_HIDE_DRAFT_API - - /** + /** + * Field number indicating the + * day of the month. This is a synonym for <code>UCAL_DATE</code>. + * The first day of the month has value 1. + * @see #UCAL_DATE * Synonym for UCAL_DATE - * @draft ICU 2.8 + * @stable ICU 2.8 **/ UCAL_DAY_OF_MONTH=UCAL_DATE - -#endif /*U_HIDE_DRAFT_API*/ }; /** @stable ICU 2.0 */ @@ -350,7 +471,10 @@ enum UCalendarMonths { UCAL_NOVEMBER, /** December */ UCAL_DECEMBER, - /** Undecimber */ + /** Value of the <code>UCAL_MONTH</code> field indicating the + * thirteenth month of the year. Although the Gregorian calendar + * does not use this value, lunar calendars do. + */ UCAL_UNDECIMBER }; @@ -381,7 +505,7 @@ typedef enum UCalendarAMPMs UCalendarAMPMs; * * @stable ICU 2.6 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_STABLE UEnumeration* U_EXPORT2 ucal_openTimeZones(UErrorCode* ec); /** @@ -400,7 +524,7 @@ ucal_openTimeZones(UErrorCode* ec); * * @stable ICU 2.6 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_STABLE UEnumeration* U_EXPORT2 ucal_openCountryTimeZones(const char* country, UErrorCode* ec); /** @@ -419,7 +543,7 @@ ucal_openCountryTimeZones(const char* country, UErrorCode* ec); * * @stable ICU 2.6 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec); /** @@ -431,7 +555,7 @@ ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec); * * @stable ICU 2.6 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec); /** @@ -450,7 +574,7 @@ ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec); * * @stable ICU 2.6 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec); /** @@ -556,6 +680,52 @@ U_STABLE UBool U_EXPORT2 ucal_inDaylightTime(const UCalendar* cal, UErrorCode* status ); +/** + * Sets the GregorianCalendar change date. This is the point when the switch from + * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October + * 15, 1582. Previous to this time and date will be Julian dates. + * + * This function works only for Gregorian calendars. If the UCalendar is not + * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR + * error code is set. + * + * @param cal The calendar object. + * @param date The given Gregorian cutover date. + * @param pErrorCode Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * + * @see GregorianCalendar::setGregorianChange + * @see ucal_getGregorianChange + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode); + +/** + * Gets the Gregorian Calendar change date. This is the point when the switch from + * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October + * 15, 1582. Previous to this time and date will be Julian dates. + * + * This function works only for Gregorian calendars. If the UCalendar is not + * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR + * error code is set. + * + * @param cal The calendar object. + * @param pErrorCode Pointer to a standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return The Gregorian cutover time for this calendar. + * + * @see GregorianCalendar::getGregorianChange + * @see ucal_setGregorianChange + * @draft ICU 3.6 + */ +U_DRAFT UDate U_EXPORT2 +ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode); + /** * Types of UCalendar attributes * @stable ICU 2.0 @@ -927,9 +1097,9 @@ ucal_countAvailableTZIDs(int32_t rawOffset); * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale name - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ -U_DRAFT const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status); #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/unicode/ucol.h b/icuSources/i18n/unicode/ucol.h index 7ef0cb62..ed4c13c1 100644 --- a/icuSources/i18n/unicode/ucol.h +++ b/icuSources/i18n/unicode/ucol.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (c) 1996-2004, International Business Machines Corporation and others. +* Copyright (c) 1996-2006, International Business Machines Corporation and others. * All Rights Reserved. ******************************************************************************* */ @@ -29,11 +29,11 @@ * <em>Important: </em>The ICU collation service has been reimplemented * in order to achieve better performance and UCA compliance. * For details, see the - * <a href="http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> + * <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> * collation design document</a>. * <p> * For more information about the collation service see - * <a href="http://oss.software.ibm.com/icu/userguide/Collate_Intro.html">the users guide</a>. + * <a href="http://icu.sourceforge.net/userguide/Collate_Intro.html">the users guide</a>. * <p> * Collation service provides correct sorting orders for most locales supported in ICU. * If specific data for a locale is not available, the orders eventually falls back @@ -41,7 +41,7 @@ * <p> * Sort ordering may be customized by providing your own set of rules. For more on * this subject see the - * <a href="http://oss.software.ibm.com/icu/userguide/Collate_Customization.html"> + * <a href="http://icu.sourceforge.net/userguide/Collate_Customization.html"> * Collation customization</a> section of the users guide. * <p> * @see UCollationResult @@ -50,15 +50,6 @@ * @see UCollationElements */ -/** A collation element iterator. -* For usage in C programs. -*/ -struct collIterate; -/** structure representing collation element iterator instance - * @stable ICU 2.0 - */ -typedef struct collIterate collIterate; - /** A collator. * For usage in C programs. */ @@ -149,7 +140,7 @@ typedef enum { * Diacritical differences on the same base letter represent a secondary * difference. Set comparison level to UCOL_SECONDARY to ignore tertiary * differences. Use this to set the strength of a Collator object. - * Example of secondary difference, "ä" >> "a". + * Example of secondary difference, "ä" >> "a". * * Uppercase and lowercase versions of the same character represents a * tertiary difference. Set comparison level to UCOL_TERTIARY to include @@ -159,7 +150,7 @@ typedef enum { * * Two characters are considered "identical" when they have the same * unicode spellings. UCOL_IDENTICAL. - * For example, "ä" == "ä". + * For example, "ä" == "ä". * * UCollationStrength is also used to determine the strength of sort keys * generated from UCollator objects @@ -173,12 +164,12 @@ typedef UColAttributeValue UCollationStrength; * @stable ICU 2.0 */ typedef enum { - /** Attribute for direction of secondary weights - used in French.\ + /** Attribute for direction of secondary weights - used in French. * Acceptable values are UCOL_ON, which results in secondary weights * being considered backwards and UCOL_OFF which treats secondary * weights in the order they appear.*/ UCOL_FRENCH_COLLATION, - /** Attribute for handling variable elements.\ + /** Attribute for handling variable elements. * Acceptable values are UCOL_NON_IGNORABLE (default) * which treats all the codepoints with non-ignorable * primary weights in the same way, @@ -187,7 +178,7 @@ typedef enum { * to be ignored on primary level and moved to the quaternary * level.*/ UCOL_ALTERNATE_HANDLING, - /** Controls the ordering of upper and lower case letters.\ + /** Controls the ordering of upper and lower case letters. * Acceptable values are UCOL_OFF (default), which orders * upper and lower case letters in accordance to their tertiary * weights, UCOL_UPPER_FIRST which forces upper case letters to @@ -195,45 +186,41 @@ typedef enum { * the opposite. */ UCOL_CASE_FIRST, /** Controls whether an extra case level (positioned before the third - * level) is generated or not.\ Acceptable values are UCOL_OFF (default), + * level) is generated or not. Acceptable values are UCOL_OFF (default), * when case level is not generated, and UCOL_ON which causes the case - * level to be generated.\ Contents of the case level are affected by - * the value of UCOL_CASE_FIRST attribute.\ A simple way to ignore + * level to be generated. Contents of the case level are affected by + * the value of UCOL_CASE_FIRST attribute. A simple way to ignore * accent differences in a string is to set the strength to UCOL_PRIMARY * and enable case level. */ UCOL_CASE_LEVEL, /** Controls whether the normalization check and necessary normalizations - * are performed.\ When set to UCOL_OFF (default) no normalization check - * is performed.\ The correctness of the result is guaranteed only if the - * input data is in so-called FCD form (see users manual for more info).\ - * When set to UCOL_ON, an incremental check is performed to see whether the input data - * is in the FCD form.\ If the data is not in the FCD form, incremental - * NFD normalization is performed. */ + * are performed. When set to UCOL_OFF (default) no normalization check + * is performed. The correctness of the result is guaranteed only if the + * input data is in so-called FCD form (see users manual for more info). + * When set to UCOL_ON, an incremental check is performed to see whether + * the input data is in the FCD form. If the data is not in the FCD form, + * incremental NFD normalization is performed. */ UCOL_NORMALIZATION_MODE, /** An alias for UCOL_NORMALIZATION_MODE attribute */ UCOL_DECOMPOSITION_MODE = UCOL_NORMALIZATION_MODE, - /** The strength attribute.\ Can be either UCOL_PRIMARY, UCOL_SECONDARY, - * UCOL_TERTIARY, UCOL_QUATERNARY or UCOL_IDENTICAL.\ The usual strength - * for most locales (except Japanese) is tertiary.\ Quaternary strength + /** The strength attribute. Can be either UCOL_PRIMARY, UCOL_SECONDARY, + * UCOL_TERTIARY, UCOL_QUATERNARY or UCOL_IDENTICAL. The usual strength + * for most locales (except Japanese) is tertiary. Quaternary strength * is useful when combined with shifted setting for alternate handling * attribute and for JIS x 4061 collation, when it is used to distinguish * between Katakana and Hiragana (this is achieved by setting the - * UCOL_HIRAGANA_QUATERNARY mode to on.\ Otherwise, quaternary level + * UCOL_HIRAGANA_QUATERNARY mode to on. Otherwise, quaternary level * is affected only by the number of non ignorable code points in - * the string.\ Identical strength is rarely useful, as it amounts + * the string. Identical strength is rarely useful, as it amounts * to codepoints of the NFD form of the string. */ UCOL_STRENGTH, - /** when turned on, this attribute - * positions Hiragana before all - * non-ignorables on quaternary level - * This is a sneaky way to produce JIS - * sort order */ + /** When turned on, this attribute positions Hiragana before all + * non-ignorables on quaternary level This is a sneaky way to produce JIS + * sort order */ UCOL_HIRAGANA_QUATERNARY_MODE, - /** when turned on, this attribute - * generates a collation key - * for the numeric value of substrings - * of digits. This is a way to get '100' - * to sort AFTER '2'.*/ + /** When turned on, this attribute generates a collation key + * for the numeric value of substrings of digits. + * This is a way to get '100' to sort AFTER '2'. */ UCOL_NUMERIC_COLLATION, UCOL_ATTRIBUTE_COUNT } UColAttribute; @@ -286,7 +273,7 @@ ucol_open(const char *loc, UErrorCode *status); * occurred during parsing. This argument can currently be set * to NULL, but at users own risk. Please provide a real structure. * @param status A pointer to an UErrorCode to receive any errors - * @return A pointer to a UCollator.\ It is not guaranteed that NULL be returned in case + * @return A pointer to a UCollator. It is not guaranteed that NULL be returned in case * of error - please use status argument to check for errors. * @see ucol_open * @see ucol_safeClone @@ -305,7 +292,7 @@ ucol_openRules( const UChar *rules, * Open a collator defined by a short form string. * The structure and the syntax of the string is defined in the "Naming collators" * section of the users guide: - * http://oss.software.ibm.com/icu/userguide/Collate_Concepts.html#Naming_Collators + * http://icu.sourceforge.net/userguide/Collate_Concepts.html#Naming_Collators * Attributes are overriden by the subsequent attributes. So, for "S2_S3", final * strength will be 3. 3066bis locale overrides individual locale parts. * The call to this function is equivalent to a call to ucol_open, followed by a @@ -332,10 +319,10 @@ ucol_openRules( const UChar *rules, * @see ucol_setVariableTop * @see ucol_getShortDefinitionString * @see ucol_normalizeShortDefinitionString - * @draft ICU 3.0 + * @stable ICU 3.0 * */ -U_CAPI UCollator* U_EXPORT2 +U_STABLE UCollator* U_EXPORT2 ucol_openFromShortString( const char *definition, UBool forceDefaults, UParseError *parseError, @@ -352,18 +339,33 @@ ucol_openFromShortString( const char *definition, * @param status to hold the error code * @return the size of the contraction set * - * @draft ICU 3.0 + * @deprecated ICU 3.4, use ucol_getContractionsAndExpansions instead */ -U_CAPI int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 ucol_getContractions( const UCollator *coll, USet *conts, UErrorCode *status); +/** + * Get a set containing the expansions defined by the collator. The set includes + * both the UCA expansions and the expansions defined by the tailoring + * @param coll collator + * @param contractions if not NULL, the set to hold the contractions + * @param expansions if not NULL, the set to hold the expansions + * @param addPrefixes add the prefix contextual elements to contractions + * @param status to hold the error code + * + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ucol_getContractionsAndExpansions( const UCollator *coll, + USet *contractions, USet *expansions, + UBool addPrefixes, UErrorCode *status); /** * Close a UCollator. - * Once closed, a UCollator should not be used.\ Every open collator should - * be closed.\ Otherwise, a memory leak will result. + * Once closed, a UCollator should not be used. Every open collator should + * be closed. Otherwise, a memory leak will result. * @param coll The UCollator to close. * @see ucol_open * @see ucol_openRules @@ -544,9 +546,9 @@ ucol_countAvailable(void); * @param status input-output error code * @return a string enumeration over locale strings. The caller is * responsible for closing the result. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_STABLE UEnumeration* U_EXPORT2 ucol_openAvailableLocales(UErrorCode *status); #endif @@ -557,9 +559,9 @@ ucol_openAvailableLocales(UErrorCode *status); * @param status input-output error code * @return a string enumeration over locale strings. The caller is * responsible for closing the result. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_STABLE UEnumeration* U_EXPORT2 ucol_getKeywords(UErrorCode *status); /** @@ -571,9 +573,9 @@ ucol_getKeywords(UErrorCode *status); * @param status input-output error code * @return a string enumeration over collation keyword values, or NULL * upon error. The caller is responsible for closing the result. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UEnumeration* U_EXPORT2 +U_STABLE UEnumeration* U_EXPORT2 ucol_getKeywordValues(const char *keyword, UErrorCode *status); /** @@ -589,7 +591,7 @@ ucol_getKeywordValues(const char *keyword, UErrorCode *status); * applications who wish to cache collators, or otherwise reuse * collators when possible. The functional equivalent may change * over time. For more information, please see the <a - * href="http://oss.software.ibm.com/icu/userguide/locale.html#services"> + * href="http://icu.sourceforge.net/userguide/locale.html#services"> * Locales and Services</a> section of the ICU User Guide. * @param result fillin for the functionally equivalent locale * @param resultCapacity capacity of the fillin buffer @@ -604,9 +606,9 @@ ucol_getKeywordValues(const char *keyword, UErrorCode *status); * @return the actual buffer size needed for the locale. If greater * than resultCapacity, the returned full name will be truncated and * an error code will be returned. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getFunctionalEquivalent(char* result, int32_t resultCapacity, const char* keyword, const char* locale, UBool* isAvailable, UErrorCode* status); @@ -629,7 +631,7 @@ ucol_getRules( const UCollator *coll, * This string will be normalized. * The structure and the syntax of the string is defined in the "Naming collators" * section of the users guide: - * http://oss.software.ibm.com/icu/userguide/Collate_Concepts.html#Naming_Collators + * http://icu.sourceforge.net/userguide/Collate_Concepts.html#Naming_Collators * This API supports preflighting. * @param coll a collator * @param locale a locale that will appear as a collators locale in the resulting @@ -641,9 +643,9 @@ ucol_getRules( const UCollator *coll, * @return length of the resulting string * @see ucol_openFromShortString * @see ucol_normalizeShortDefinitionString - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_getShortDefinitionString(const UCollator *coll, const char *locale, char *buffer, @@ -667,10 +669,10 @@ ucol_getShortDefinitionString(const UCollator *coll, * @see ucol_openFromShortString * @see ucol_getShortDefinitionString * - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_normalizeShortDefinitionString(const char *source, char *destination, int32_t capacity, @@ -804,9 +806,9 @@ ucol_getVersion(const UCollator* coll, UVersionInfo info); * UCA version number (3.1.1, 4.0). * @param coll The UCollator to query. * @param info the version # information, the result will be filled in - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 ucol_getUCAVersion(const UCollator* coll, UVersionInfo info); /** @@ -992,9 +994,9 @@ ucol_getLocale(const UCollator *coll, ULocDataLocaleType type, UErrorCode *statu * @return real locale name from which the collation data comes. * If the collator was instantiated from rules, returns * NULL. - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ -U_DRAFT const char * U_EXPORT2 +U_STABLE const char * U_EXPORT2 ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode *status); /** @@ -1010,12 +1012,14 @@ ucol_getLocaleByType(const UCollator *coll, ULocDataLocaleType type, UErrorCode U_STABLE USet * U_EXPORT2 ucol_getTailoredSet(const UCollator *coll, UErrorCode *status); +#ifndef U_HIDE_INTERNAL_API /** * Returned by ucol_collatorToIdentifier to signify that collator is * not encodable as an identifier. * @internal ICU 3.0 */ #define UCOL_SIT_COLLATOR_NOT_ENCODABLE 0x80000000 +#endif /* U_HIDE_INTERNAL_API */ /** * Get a 31-bit identifier given a collator. @@ -1127,6 +1131,10 @@ U_INTERNAL UBool U_EXPORT2 ucol_equals(const UCollator *source, const UCollator *target); /** Calculates the set of unsafe code points, given a collator. + * A character is unsafe if you could append any character and cause the ordering to alter significantly. + * Collation sorts in normalized order, so anything that rearranges in normalization can cause this. + * Thus if you have a character like a_umlaut, and you add a lower_dot to it, + * then it normalizes to a_lower_dot + umlaut, and sorts differently. * @param coll Collator * @param unsafe a fill-in set to receive the unsafe points * @param status for catching errors @@ -1138,6 +1146,38 @@ ucol_getUnsafeSet( const UCollator *coll, USet *unsafe, UErrorCode *status); +/** Reset UCA's static pointers. You don't want to use this, unless your static memory can go away. + * @internal ICU 3.2.1 + */ +U_INTERNAL void U_EXPORT2 +ucol_forgetUCA(void); + +/** Touches all resources needed for instantiating a collator from a short string definition, + * thus filling up the cache. + * @param definition A short string containing a locale and a set of attributes. + * Attributes not explicitly mentioned are left at the default + * state for a locale. + * @param parseError if not NULL, structure that will get filled with error's pre + * and post context in case of error. + * @param forceDefaults if FALSE, the settings that are the same as the collator + * default settings will not be applied (for example, setting + * French secondary on a French collator would not be executed). + * If TRUE, all the settings will be applied regardless of the + * collator default value. If the definition + * strings are to be cached, should be set to FALSE. + * @param status Error code. Apart from regular error conditions connected to + * instantiating collators (like out of memory or similar), this + * API will return an error if an invalid attribute or attribute/value + * combination is specified. + * @see ucol_openFromShortString + * @internal ICU 3.2.1 + */ +U_INTERNAL void U_EXPORT2 +ucol_prepareShortStringOpen( const char *definition, + UBool forceDefaults, + UParseError *parseError, + UErrorCode *status); + /** Creates a binary image of a collator. This binary image can be stored and * later used to instantiate a collator using ucol_openBinary. * This API supports preflighting. @@ -1147,9 +1187,9 @@ ucol_getUnsafeSet( const UCollator *coll, * @param status for catching errors * @return size of the image * @see ucol_openBinary - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucol_cloneBinary(const UCollator *coll, uint8_t *buffer, int32_t capacity, UErrorCode *status); @@ -1169,9 +1209,9 @@ ucol_cloneBinary(const UCollator *coll, * @param status for catching errors * @return newly created collator * @see ucol_cloneBinary - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT UCollator* U_EXPORT2 +U_STABLE UCollator* U_EXPORT2 ucol_openBinary(const uint8_t *bin, int32_t length, const UCollator *base, UErrorCode *status); diff --git a/icuSources/i18n/unicode/ucsdet.h b/icuSources/i18n/unicode/ucsdet.h new file mode 100644 index 00000000..27e2e34e --- /dev/null +++ b/icuSources/i18n/unicode/ucsdet.h @@ -0,0 +1,350 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + * file name: ucsdet.h + * encoding: US-ASCII + * indentation:4 + * + * created on: 2005Aug04 + * created by: Andy Heninger + * + * ICU Character Set Detection, API for C + * + * Draft version 18 Oct 2005 + * + */ + +#ifndef __UCSDET_H +#define __UCSDET_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_CONVERSION +#include "unicode/uenum.h" + +/** + * \file + * \brief C API: Charset Detection API + * + * This API provides a facility for detecting the + * charset or encoding of character data in an unknown text format. + * The input data can be from an array of bytes. + * <p> + * Character set detection is at best an imprecise operation. The detection + * process will attempt to identify the charset that best matches the characteristics + * of the byte data, but the process is partly statistical in nature, and + * the results can not be guaranteed to always be correct. + * <p> + * For best accuracy in charset detection, the input data should be primarily + * in a single language, and a minimum of a few hundred bytes worth of plain text + * in the language are needed. The detection process will attempt to + * ignore html or xml style markup that could otherwise obscure the content. + */ + + +struct UCharsetDetector; +/** + * Structure representing a charset detector + * @draft ICU 3.6 + */ +typedef struct UCharsetDetector UCharsetDetector; + +struct UCharsetMatch; +/** + * Opaque structure representing a match that was identified + * from a charset detection operation. + * @draft ICU 3.6 + */ +typedef struct UCharsetMatch UCharsetMatch; + +/** + * Open a charset detector. + * + * @param status Any error conditions occurring during the open + * operation are reported back in this variable. + * @return the newly opened charset detector. + * @draft ICU 3.6 + */ +U_DRAFT UCharsetDetector * U_EXPORT2 +ucsdet_open(UErrorCode *status); + +/** + * Close a charset detector. All storage and any other resources + * owned by this charset detector will be released. Failure to + * close a charset detector when finished with it can result in + * memory leaks in the application. + * + * @param ucsd The charset detector to be closed. + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ucsdet_close(UCharsetDetector *ucsd); + +/** + * Set the input byte data whose charset is to detected. + * + * Ownership of the input text byte array remains with the caller. + * The input string must not be altered or deleted until the charset + * detector is either closed or reset to refer to different input text. + * + * @param ucsd the charset detector to be used. + * @param textIn the input text of unknown encoding. . + * @param len the length of the input text, or -1 if the text + * is NUL terminated. + * @param status any error conditions are reported back in this variable. + * + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status); + + +/** Set the declared encoding for charset detection. + * The declared encoding of an input text is an encoding obtained + * by the user from an http header or xml declaration or similar source that + * can be provided as an additional hint to the charset detector. + * + * How and whether the declared encoding will be used during the + * detection process is TBD. + * + * @param ucsd the charset detector to be used. + * @param encoding an encoding for the current data obtained from + * a header or declaration or other source outside + * of the byte data itself. + * @param length the length of the encoding name, or -1 if the name string + * is NUL terminated. + * @param status any error conditions are reported back in this variable. + * + * @draft ICU 3.6 + */ +U_DRAFT void U_EXPORT2 +ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status); + + +/** + * Return the charset that best matches the supplied input data. + * + * Note though, that because the detection + * only looks at the start of the input data, + * there is a possibility that the returned charset will fail to handle + * the full set of input data. + * <p> + * The returned UCharsetMatch object is owned by the UCharsetDetector. + * It will remain valid until the detector input is reset, or until + * the detector is closed. + * <p> + * The function will fail if + * <ul> + * <li>no charset appears to match the data.</li> + * <li>no input text has been provided</li> + * </ul> + * + * @param ucsd the charset detector to be used. + * @param status any error conditions are reported back in this variable. + * @return a UCharsetMatch representing the best matching charset, + * or NULL if no charset matches the byte data. + * + * @draft ICU 3.6 + */ +U_DRAFT const UCharsetMatch * U_EXPORT2 +ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status); + + +/** + * Find all charset matches that appear to be consistent with the input, + * returning an array of results. The results are ordered with the + * best quality match first. + * + * Because the detection only looks at a limited amount of the + * input byte data, some of the returned charsets may fail to handle + * the all of input data. + * <p> + * The returned UCharsetMatch objects are owned by the UCharsetDetector. + * They will remain valid until the detector is closed or modified + * + * <p> + * Return an error if + * <ul> + * <li>no charsets appear to match the input data.</li> + * <li>no input text has been provided</li> + * </ul> + * + * @param ucsd the charset detector to be used. + * @param matchesFound pointer to a variable that will be set to the + * number of charsets identified that are consistent with + * the input data. Output only. + * @param status any error conditions are reported back in this variable. + * @return A pointer to an array of pointers to UCharSetMatch objects. + * This array, and the UCharSetMatch instances to which it refers, + * are owned by the UCharsetDetector, and will remain valid until + * the detector is closed or modified. + * @draft ICU 3.4 + */ +U_DRAFT const UCharsetMatch ** U_EXPORT2 +ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *status); + + + +/** + * Get the name of the charset represented by a UCharsetMatch. + * + * The storage for the returned name string is owned by the + * UCharsetMatch, and will remain valid while the UCharsetMatch + * is valid. + * + * The name returned is suitable for use with the ICU conversion APIs. + * + * @param ucsm The charset match object. + * @param status Any error conditions are reported back in this variable. + * @return The name of the matching charset. + * + * @draft ICU 3.6 + */ +U_DRAFT const char * U_EXPORT2 +ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status); + +/** + * Get a confidence number for the quality of the match of the byte + * data with the charset. Confidence numbers range from zero to 100, + * with 100 representing complete confidence and zero representing + * no confidence. + * + * The confidence values are somewhat arbitrary. They define an + * an ordering within the results for any single detection operation + * but are not generally comparable between the results for different input. + * + * A confidence value of ten does have a general meaning - it is used + * for charsets that can represent the input data, but for which there + * is no other indication that suggests that the charset is the correct one. + * Pure 7 bit ASCII data, for example, is compatible with a + * great many charsets, most of which will appear as possible matches + * with a confidence of 10. + * + * @param ucsm The charset match object. + * @param status Any error conditions are reported back in this variable. + * @return A confidence number for the charset match. + * + * @draft ICU 3.6 + */ +U_DRAFT int32_t U_EXPORT2 +ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status); + +/** + * Get the RFC 3066 code for the language of the input data. + * + * The Charset Detection service is intended primarily for detecting + * charsets, not language. For some, but not all, charsets, a language is + * identified as a byproduct of the detection process, and that is what + * is returned by this function. + * + * CAUTION: + * 1. Language information is not available for input data encoded in + * all charsets. In particular, no language is identified + * for UTF-8 input data. + * + * 2. Closely related languages may sometimes be confused. + * + * If more accurate language detection is required, a linguistic + * analysis package should be used. + * + * The storage for the returned name string is owned by the + * UCharsetMatch, and will remain valid while the UCharsetMatch + * is valid. + * + * @param ucsm The charset match object. + * @param status Any error conditions are reported back in this variable. + * @return The RFC 3066 code for the language of the input data, or + * an empty string if the language could not be determined. + * + * @draft ICU 3.6 + */ +U_DRAFT const char * U_EXPORT2 +ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status); + + +/** + * Get the entire input text as a UChar string, placing it into + * a caller-supplied buffer. A terminating + * NUL character will be appended to the buffer if space is available. + * + * The number of UChars in the output string, not including the terminating + * NUL, is returned. + * + * If the supplied buffer is smaller than required to hold the output, + * the contents of the buffer are undefined. The full output string length + * (in UChars) is returned as always, and can be used to allocate a buffer + * of the correct size. + * + * + * @param ucsm The charset match object. + * @param buf A UChar buffer to be filled with the converted text data. + * @param cap The capacity of the buffer in UChars. + * @param status Any error conditions are reported back in this variable. + * @return The number of UChars in the output string. + * + * @draft ICU 3.6 + */ +U_DRAFT int32_t U_EXPORT2 +ucsdet_getUChars(const UCharsetMatch *ucsm, + UChar *buf, int32_t cap, UErrorCode *status); + + + +/** + * Get an iterator over the set of all detectable charsets - + * over the charsets that are known to the charset detection + * service. + * + * The returned UEnumeration provides access to the names of + * the charsets. + * + * The state of the Charset detector that is passed in does not + * affect the result of this function, but requiring a valid, open + * charset detector as a parameter insures that the charset detection + * service has been safely initialized and that the required detection + * data is available. + * + * @param ucsd a Charset detector. + * @param status Any error conditions are reported back in this variable. + * @return an iterator providing access to the detectable charset names. + * @draft ICU 3.6 + */ + +U_DRAFT UEnumeration * U_EXPORT2 +ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status); + + +/** + * Test whether input filtering is enabled for this charset detector. + * Input filtering removes text that appears to be HTML or xml + * markup from the input before applying the code page detection + * heuristics. + * + * @param ucsd The charset detector to check. + * @return TRUE if filtering is enabled. + * @draft ICU 3.4 + */ +U_DRAFT UBool U_EXPORT2 +ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd); + + +/** + * Enable filtering of input text. If filtering is enabled, + * text within angle brackets ("<" and ">") will be removed + * before detection, which will remove most HTML or xml markup. + * + * @param ucsd the charset detector to be modified. + * @param filter <code>true</code> to enable input text filtering. + * @return The previous setting. + * + * @draft ICU 3.6 + */ +U_DRAFT UBool U_EXPORT2 +ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter); + +#endif +#endif /* __UCSDET_H */ + + diff --git a/icuSources/i18n/unicode/ucurr.h b/icuSources/i18n/unicode/ucurr.h index 2718dc73..0aa8dba4 100644 --- a/icuSources/i18n/unicode/ucurr.h +++ b/icuSources/i18n/unicode/ucurr.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -8,6 +8,12 @@ #define _UCURR_H_ #include "unicode/utypes.h" +#include "unicode/uenum.h" + +/** + * \file + * \brief C API: Encapsulates information about a currency. + */ #if !UCONFIG_NO_FORMATTING @@ -41,9 +47,9 @@ * @return length of the currency string. It should always be 3. If 0, * currency couldn't be found or the input values are * invalid. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucurr_forLocale(const char* locale, UChar* buff, int32_t buffCapacity, @@ -73,7 +79,7 @@ typedef enum UCurrNameStyle { #if !UCONFIG_NO_SERVICE /** - * @internal + * @stable ICU 2.6 */ typedef const void* UCurrRegistryKey; @@ -139,9 +145,9 @@ ucurr_getName(const UChar* currency, * @param ec input-output error code * @return a non-negative number of fraction digits to be * displayed, or 0 if there is an error - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ucurr_getDefaultFractionDigits(const UChar* currency, UErrorCode* ec); @@ -152,12 +158,68 @@ ucurr_getDefaultFractionDigits(const UChar* currency, * @param ec input-output error code * @return the non-negative rounding increment, or 0.0 if none, * or 0.0 if there is an error - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT double U_EXPORT2 +U_STABLE double U_EXPORT2 ucurr_getRoundingIncrement(const UChar* currency, UErrorCode* ec); +/** + * Selector constants for ucurr_openCurrencies(). + * + * @see ucurr_openCurrencies + * @stable ICU 3.2 + */ +typedef enum UCurrCurrencyType { + /** + * Select all ISO-4217 currency codes. + * @stable ICU 3.2 + */ + UCURR_ALL = INT32_MAX, + /** + * Select only ISO-4217 commonly used currency codes. + * These currencies can be found in common use, and they usually have + * bank notes or coins associated with the currency code. + * This does not include fund codes, precious metals and other + * various ISO-4217 codes limited to special financial products. + * @stable ICU 3.2 + */ + UCURR_COMMON = 1, + /** + * Select ISO-4217 uncommon currency codes. + * These codes respresent fund codes, precious metals and other + * various ISO-4217 codes limited to special financial products. + * A fund code is a monetary resource associated with a currency. + * @stable ICU 3.2 + */ + UCURR_UNCOMMON = 2, + /** + * Select only deprecated ISO-4217 codes. + * These codes are no longer in general public use. + * @stable ICU 3.2 + */ + UCURR_DEPRECATED = 4, + /** + * Select only non-deprecated ISO-4217 codes. + * These codes are in general public use. + * @stable ICU 3.2 + */ + UCURR_NON_DEPRECATED = 8 +} UCurrCurrencyType; + +/** + * Provides a UEnumeration object for listing ISO-4217 codes. + * @param currType You can use one of several UCurrCurrencyType values for this + * variable. You can also | (or) them together to get a specific list of + * currencies. Most people will want to use the (UCURR_CURRENCY|UCURR_NON_DEPRECATED) value to + * get a list of current currencies. + * @param pErrorCode Error code + * @stable ICU 3.2 + */ +U_STABLE UEnumeration * U_EXPORT2 +ucurr_openISOCurrencies(uint32_t currType, UErrorCode *pErrorCode); + + #ifdef XP_CPLUSPLUS #include "unicode/unistr.h" #include "unicode/parsepos.h" @@ -182,7 +244,7 @@ U_NAMESPACE_BEGIN * * @internal */ -void +U_INTERNAL void uprv_parseCurrency(const char* locale, const UnicodeString& text, ParsePosition& pos, diff --git a/icuSources/i18n/unicode/udat.h b/icuSources/i18n/unicode/udat.h index ab63378c..03376ed9 100644 --- a/icuSources/i18n/unicode/udat.h +++ b/icuSources/i18n/unicode/udat.h @@ -1,6 +1,7 @@ /* ******************************************************************************* -* Copyright (C) 1996-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1996-2006, International Business Machines Corporation and others. +* All Rights Reserved. ******************************************************************************* */ @@ -160,34 +161,34 @@ typedef enum UDateFormatStyle { /** * FieldPosition and UFieldPosition selectors for format fields * defined by DateFormat and UDateFormat. - * @draft ICU 3.0 + * @stable ICU 3.0 */ typedef enum UDateFormatField { /** * FieldPosition and UFieldPosition selector for 'G' field alignment, * corresponding to the UCAL_ERA field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_ERA_FIELD = 0, /** * FieldPosition and UFieldPosition selector for 'y' field alignment, * corresponding to the UCAL_YEAR field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_YEAR_FIELD = 1, /** * FieldPosition and UFieldPosition selector for 'M' field alignment, * corresponding to the UCAL_MONTH field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_MONTH_FIELD = 2, /** * FieldPosition and UFieldPosition selector for 'd' field alignment, * corresponding to the UCAL_DATE field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_DATE_FIELD = 3, @@ -196,7 +197,7 @@ typedef enum UDateFormatField { * corresponding to the UCAL_HOUR_OF_DAY field. * UDAT_HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock. * For example, 23:59 + 01:00 results in 24:59. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_HOUR_OF_DAY1_FIELD = 4, @@ -205,70 +206,70 @@ typedef enum UDateFormatField { * corresponding to the UCAL_HOUR_OF_DAY field. * UDAT_HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock. * For example, 23:59 + 01:00 results in 00:59. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_HOUR_OF_DAY0_FIELD = 5, /** * FieldPosition and UFieldPosition selector for 'm' field alignment, * corresponding to the UCAL_MINUTE field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_MINUTE_FIELD = 6, /** * FieldPosition and UFieldPosition selector for 's' field alignment, * corresponding to the UCAL_SECOND field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_SECOND_FIELD = 7, /** * FieldPosition and UFieldPosition selector for 'S' field alignment, * corresponding to the UCAL_MILLISECOND field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_FRACTIONAL_SECOND_FIELD = 8, /** * FieldPosition and UFieldPosition selector for 'E' field alignment, * corresponding to the UCAL_DAY_OF_WEEK field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_DAY_OF_WEEK_FIELD = 9, /** * FieldPosition and UFieldPosition selector for 'D' field alignment, * corresponding to the UCAL_DAY_OF_YEAR field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_DAY_OF_YEAR_FIELD = 10, /** * FieldPosition and UFieldPosition selector for 'F' field alignment, * corresponding to the UCAL_DAY_OF_WEEK_IN_MONTH field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11, /** * FieldPosition and UFieldPosition selector for 'w' field alignment, * corresponding to the UCAL_WEEK_OF_YEAR field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_WEEK_OF_YEAR_FIELD = 12, /** * FieldPosition and UFieldPosition selector for 'W' field alignment, * corresponding to the UCAL_WEEK_OF_MONTH field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_WEEK_OF_MONTH_FIELD = 13, /** * FieldPosition and UFieldPosition selector for 'a' field alignment, * corresponding to the UCAL_AM_PM field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_AM_PM_FIELD = 14, @@ -277,7 +278,7 @@ typedef enum UDateFormatField { * corresponding to the UCAL_HOUR field. * UDAT_HOUR1_FIELD is used for the one-based 12-hour clock. * For example, 11:30 PM + 1 hour results in 12:30 AM. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_HOUR1_FIELD = 15, @@ -286,7 +287,7 @@ typedef enum UDateFormatField { * corresponding to the UCAL_HOUR field. * UDAT_HOUR0_FIELD is used for the zero-based 12-hour clock. * For example, 11:30 PM + 1 hour results in 00:30 AM. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_HOUR0_FIELD = 16, @@ -294,42 +295,42 @@ typedef enum UDateFormatField { * FieldPosition and UFieldPosition selector for 'z' field alignment, * corresponding to the UCAL_ZONE_OFFSET and * UCAL_DST_OFFSET fields. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_TIMEZONE_FIELD = 17, /** * FieldPosition and UFieldPosition selector for 'Y' field alignment, * corresponding to the UCAL_YEAR_WOY field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_YEAR_WOY_FIELD = 18, /** * FieldPosition and UFieldPosition selector for 'e' field alignment, * corresponding to the UCAL_DOW_LOCAL field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_DOW_LOCAL_FIELD = 19, /** * FieldPosition and UFieldPosition selector for 'u' field alignment, * corresponding to the UCAL_EXTENDED_YEAR field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_EXTENDED_YEAR_FIELD = 20, /** * FieldPosition and UFieldPosition selector for 'g' field alignment, * corresponding to the UCAL_JULIAN_DAY field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_JULIAN_DAY_FIELD = 21, /** * FieldPosition and UFieldPosition selector for 'A' field alignment, * corresponding to the UCAL_MILLISECONDS_IN_DAY field. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_MILLISECONDS_IN_DAY_FIELD = 22, @@ -337,19 +338,63 @@ typedef enum UDateFormatField { * FieldPosition and UFieldPosition selector for 'Z' field alignment, * corresponding to the UCAL_ZONE_OFFSET and * UCAL_DST_OFFSET fields. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UDAT_TIMEZONE_RFC_FIELD = 23, +#ifndef U_HIDE_DRAFT_API + + /** + * FieldPosition and UFieldPosition selector for 'v' field alignment, + * corresponding to the UCAL_ZONE_OFFSET field. + * @draft ICU 3.4 + */ + UDAT_TIMEZONE_GENERIC_FIELD = 24, + /** + * FieldPosition selector for 'c' field alignment, + * corresponding to the {@link Calendar#DAY} field. + * This displays the stand alone day name, if available. + * @draft ICU 3.4 + */ + UDAT_STANDALONE_DAY_FIELD = 25, + + /** + * FieldPosition selector for 'L' field alignment, + * corresponding to the {@link Calendar#MONTH} field. + * This displays the stand alone month name, if available. + * @draft ICU 3.4 + */ + UDAT_STANDALONE_MONTH_FIELD = 26, + + /** + * FieldPosition selector for "Q" field alignment, + * corresponding to quarters. This is implemented + * using the {@link Calendar#MONTH} field. This + * displays the quarter. + * @draft ICU 3.6 + */ + UDAT_QUARTER_FIELD = 27, + /** + * FieldPosition selector for the "q" field alignment, + * corresponding to stand-alone quarters. This is + * implemented using the {@link Calendar#MONTH} field. + * This displays the stand-alone quarter. + * @draft ICU 3.6 + */ + UDAT_STANDALONE_QUARTER_FIELD = 28, + +#endif /*U_HIDE_DRAFT_API*/ + + /** * Number of FieldPosition and UFieldPosition selectors for * DateFormat and UDateFormat. * Valid selectors range from 0 to UDAT_FIELD_COUNT-1. * This value is subject to change if new fields are defined * in the future. - * @draft ICU 3.0 + * @stable ICU 3.0 */ - UDAT_FIELD_COUNT = 24 + UDAT_FIELD_COUNT = 29 } UDateFormatField; @@ -651,7 +696,29 @@ typedef enum UDateFormatSymbolType { /** The AM/PM names, for example AM */ UDAT_AM_PMS, /** The localized characters */ - UDAT_LOCALIZED_CHARS + UDAT_LOCALIZED_CHARS, + /** The long era names, for example Anno Domini */ + UDAT_ERA_NAMES, + /** The narrow month names, for example F */ + UDAT_NARROW_MONTHS, + /** The narrow weekday names, for example N */ + UDAT_NARROW_WEEKDAYS, + /** Standalone context versions of months */ + UDAT_STANDALONE_MONTHS, + UDAT_STANDALONE_SHORT_MONTHS, + UDAT_STANDALONE_NARROW_MONTHS, + /** Standalone context versions of weekdays */ + UDAT_STANDALONE_WEEKDAYS, + UDAT_STANDALONE_SHORT_WEEKDAYS, + UDAT_STANDALONE_NARROW_WEEKDAYS, + /** The quarters, for example 1st Quarter */ + UDAT_QUARTERS, + /** The short quarter names, for example Q1 */ + UDAT_SHORT_QUARTERS, + /** Standalone context versions of quarters */ + UDAT_STANDALONE_QUARTERS, + UDAT_STANDALONE_SHORT_QUARTERS + } UDateFormatSymbolType; struct UDateFormatSymbols; @@ -731,9 +798,9 @@ udat_setSymbols( UDateFormat *format, * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale name - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ -U_DRAFT const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 udat_getLocaleByType(const UDateFormat *fmt, ULocDataLocaleType type, UErrorCode* status); diff --git a/icuSources/i18n/unicode/ulocdata.h b/icuSources/i18n/unicode/ulocdata.h index edcdcb9f..667fc155 100644 --- a/icuSources/i18n/unicode/ulocdata.h +++ b/icuSources/i18n/unicode/ulocdata.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * * -* Copyright (C) 2003-2004, International Business Machines * +* Copyright (C) 2003-2006, International Business Machines * * Corporation and others. All Rights Reserved. * * * ****************************************************************************** @@ -21,18 +21,102 @@ #include "unicode/uloc.h" #include "unicode/uset.h" +/** + * \file + * \brief C API: Provides access to locale data. + */ + +/** Forward declaration of the ULocaleData structure. @draft ICU 3.6 */ +struct ULocaleData; + +/** A locale data object. @draft ICU 3.6 */ +typedef struct ULocaleData ULocaleData; + + + +/** The possible types of exemplar character sets. + * @draft ICU 3.4 + */ +typedef enum ULocaleDataExemplarSetType { +#ifndef U_HIDE_DRAFT_API + ULOCDATA_ES_STANDARD=0, /* Basic set */ + ULOCDATA_ES_AUXILIARY=1, /* Auxiliary set */ +#endif + ULOCDATA_ES_COUNT=3 +} ULocaleDataExemplarSetType; + +/** The possible types of delimiters. + * @draft ICU 3.4 + */ +typedef enum ULocaleDataDelimiterType { +#ifndef U_HIDE_DRAFT_API + ULOCDATA_QUOTATION_START = 0, /* Quotation start */ + ULOCDATA_QUOTATION_END = 1, /* Quotation end */ + ULOCDATA_ALT_QUOTATION_START = 2, /* Alternate quotation start */ + ULOCDATA_ALT_QUOTATION_END = 3, /* Alternate quotation end */ +#endif + ULOCDATA_DELIMITER_COUNT = 4 +} ULocaleDataDelimiterType; + +/** + * Opens a locale data object for the given locale + * + * @param localeID Specifies the locale associated with this locale + * data object. + * @param status Pointer to error status code. + * @draft ICU 3.4 + */ +U_DRAFT ULocaleData* U_EXPORT2 +ulocdata_open(const char *localeID, UErrorCode *status); + +/** + * Closes a locale data object. + * + * @param uld The locale data object to close + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ulocdata_close(ULocaleData *uld); + +/** + * Sets the "no Substitute" attribute of the locale data + * object. If true, then any methods associated with the + * locale data object will return null when there is no + * data available for that method, given the locale ID + * supplied to ulocdata_open(). + * + * @param uld The locale data object to set. + * @param setting Value of the "no substitute" attribute. + * @draft ICU 3.4 + */ +U_DRAFT void U_EXPORT2 +ulocdata_setNoSubstitute(ULocaleData *uld, UBool setting); + +/** + * Retrieves the current "no Substitute" value of the locale data + * object. If true, then any methods associated with the + * locale data object will return null when there is no + * data available for that method, given the locale ID + * supplied to ulocdata_open(). + * + * @param uld Pointer to the The locale data object to set. + * @return UBool Value of the "no substitute" attribute. + * @draft ICU 3.4 + */ +U_DRAFT UBool U_EXPORT2 +ulocdata_getNoSubstitute(ULocaleData *uld); /** * Returns the set of exemplar characters for a locale. * + * @param uld Pointer to the locale data object from which the + * exemplar character set is to be retrieved. * @param fillIn Pointer to a USet object to receive the * exemplar character set for the given locale. Previous * contents of fillIn are lost. <em>If fillIn is NULL, * then a new USet is created and returned. The caller * owns the result and must dispose of it by calling * uset_close.</em> - * @param localeID Locale id for which the exemplar character set - * is to be retrieved. * @param options Bitmask for options to apply to the exemplar pattern. * Specify zero to retrieve the exemplar set as it is * defined in the locale data. Specify @@ -40,38 +124,54 @@ * exemplar set. See uset_applyPattern for a complete * list of valid options. The USET_IGNORE_SPACE bit is * always set, regardless of the value of 'options'. + * @param extype Specifies the type of exemplar set to be retrieved. * @param status Pointer to an input-output error code value; * must not be NULL. * @return USet* Either fillIn, or if fillIn is NULL, a pointer to * a newly-allocated USet that the user must close. - * @draft ICU 3.0 + * @draft ICU 3.4 */ U_DRAFT USet* U_EXPORT2 -ulocdata_getExemplarSet(USet *fillIn, const char *localeID, - uint32_t options, UErrorCode *status); +ulocdata_getExemplarSet(ULocaleData *uld, USet *fillIn, + uint32_t options, ULocaleDataExemplarSetType extype, UErrorCode *status); + +/** + * Returns one of the delimiter strings associated with a locale. + * + * @param uld Pointer to the locale data object from which the + * delimiter string is to be retrieved. + * @param type the type of delimiter to be retrieved. + * @param result A pointer to a buffer to receive the result. + * @param resultLength The maximum size of result. + * @param status Pointer to an error code value + * @return int32_t The total buffer size needed; if greater than resultLength, + * the output was truncated. + * @draft ICU 3.4 + */ +U_DRAFT int32_t U_EXPORT2 +ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type, UChar *result, int32_t resultLength, UErrorCode *status); -#ifndef U_HIDE_DRAFT_API /** * Enumeration for representing the measurement systems. - * @draft ICU 2.8 + * @stable ICU 2.8 */ typedef enum UMeasurementSystem { UMS_SI, /** Measurement system specified by SI otherwise known as Metric system. */ UMS_US, /** Measurement system followed in the United States of America. */ UMS_LIMIT } UMeasurementSystem; -#endif /*U_HIDE_DRAFT_API */ /** * Returns the measurement system used in the locale specified by the localeID. + * Please note that this API will change in ICU 3.6 and will use an ulocdata object. * * @param localeID The id of the locale for which the measurement system to be retrieved. * @param status Must be a valid pointer to an error code value, * which must not indicate a failure before the function call. * @return UMeasurementSystem the measurement system used in the locale. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT UMeasurementSystem U_EXPORT2 +U_STABLE UMeasurementSystem U_EXPORT2 ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status); /** @@ -81,15 +181,16 @@ ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status); * the values are rounded off. * So for A4 size paper the height and width are 297 mm and 210 mm repectively, * and for US letter size the height and width are 279 mm and 216 mm respectively. + * Please note that this API will change in ICU 3.6 and will use an ulocdata object. * * @param localeID The id of the locale for which the paper size information to be retrieved. * @param height A pointer to int to recieve the height information. * @param width A pointer to int to recieve the width information. * @param status Must be a valid pointer to an error code value, * which must not indicate a failure before the function call. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 ulocdata_getPaperSize(const char *localeID, int32_t *height, int32_t *width, UErrorCode *status); #endif diff --git a/icuSources/i18n/unicode/umsg.h b/icuSources/i18n/unicode/umsg.h index cd160e2e..32ed063c 100644 --- a/icuSources/i18n/unicode/umsg.h +++ b/icuSources/i18n/unicode/umsg.h @@ -1,6 +1,7 @@ /* ******************************************************************************* -* Copyright (C) 1996-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1996-2006, International Business Machines Corporation +* and others. All Rights Reserved. ******************************************************************************* * * file name: umsg.h @@ -154,6 +155,21 @@ * If a pattern is used, then unquoted braces in the pattern, if any, * must match: that is, "ab {0} de" and "ab '}' de" are ok, but "ab * {0'}' de" and "ab } de" are not. + * <p> + * <dl><dt><b>Warning:</b><dd>The rules for using quotes within message + * format patterns unfortunately have shown to be somewhat confusing. + * In particular, it isn't always obvious to localizers whether single + * quotes need to be doubled or not. Make sure to inform localizers about + * the rules, and tell them (for example, by using comments in resource + * bundle source files) which strings will be processed by MessageFormat. + * Note that localizers may need to use single quotes in translated + * strings where the original version doesn't have them. + * <br>Note also that the simplest way to avoid the problem is to + * use the real apostrophe (single quote) character U+2019 (') for + * human-readable text, and to use the ASCII apostrophe (U+0027 ' ) + * only in program syntax, like quoting in MessageFormat. + * See the annotations for U+0027 Apostrophe in The Unicode Standard.</p> + * </dl> * <P> * The argument is a number from 0 to 9, which corresponds to the * arguments presented in an array to be formatted. @@ -597,18 +613,34 @@ umsg_vparse(const UMessageFormat *fmt, /** - * Get the locale for this message format object. - * You can choose between valid and actual locale. - * @param fmt The formatter to get the locale from - * @param type type of the locale we're looking for (valid or actual) - * @param status error code for the operation - * @return the locale name - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * Convert an 'apostrophe-friendly' pattern into a standard + * pattern. Standard patterns treat all apostrophes as + * quotes, which is problematic in some languages, e.g. + * French, where apostrophe is commonly used. This utility + * assumes that only an unpaired apostrophe immediately before + * a brace is a true quote. Other unpaired apostrophes are paired, + * and the resulting standard pattern string is returned. + * + * <p><b>Note</b> it is not guaranteed that the returned pattern + * is indeed a valid pattern. The only effect is to convert + * between patterns having different quoting semantics. + * + * @param pattern the 'apostrophe-friendly' patttern to convert + * @param patternLength the length of pattern, or -1 if unknown and pattern is null-terminated + * @param dest the buffer for the result, or NULL if preflight only + * @param destCapacity the length of the buffer, or 0 if preflighting + * @param ec the error code + * @return the length of the resulting text, not including trailing null + * if buffer has room for the trailing null, it is provided, otherwise + * not + * @stable ICU 3.4 */ -U_STABLE const char* U_EXPORT2 -umsg_getLocaleByType(const UMessageFormat *fmt, - ULocDataLocaleType type, - UErrorCode* status); +U_STABLE int32_t U_EXPORT2 +umsg_autoQuoteApostrophe(const UChar* pattern, + int32_t patternLength, + UChar* dest, + int32_t destCapacity, + UErrorCode* ec); #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/unicode/unirepl.h b/icuSources/i18n/unicode/unirepl.h index 668e42eb..6b7746b2 100644 --- a/icuSources/i18n/unicode/unirepl.h +++ b/icuSources/i18n/unicode/unirepl.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines Corporation +* Copyright (c) 2002-2005, International Business Machines Corporation * and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -12,6 +12,11 @@ #include "unicode/utypes.h" +/** + * \file + * \brief C++ API: UnicodeReplacer + */ + U_NAMESPACE_BEGIN class Replaceable; diff --git a/icuSources/i18n/unicode/unum.h b/icuSources/i18n/unicode/unum.h index 387ed951..c3bbc1e7 100644 --- a/icuSources/i18n/unicode/unum.h +++ b/icuSources/i18n/unicode/unum.h @@ -1,6 +1,7 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines Corporation and others. All Rights Reserved. +* Copyright (C) 1997-2006, International Business Machines Corporation and others. +* All Rights Reserved. * Modification History: * * Date Name Description @@ -133,7 +134,7 @@ typedef void* UNumberFormat; typedef enum UNumberFormatStyle { /** * Decimal format defined by pattern - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_PATTERN_DECIMAL=0, /** Decimal format */ @@ -148,17 +149,17 @@ typedef enum UNumberFormatStyle { UNUM_SPELLOUT, /** * Ordinal rule-based format - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_ORDINAL, /** * Duration rule-based format - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_DURATION, /** * Rule-based format defined by pattern - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_PATTERN_RULEBASED, /** Default format */ @@ -221,7 +222,7 @@ typedef enum UNumberFormatPadPosition { * @see DecimalFormat * @stable ICU 2.0 */ -U_CAPI UNumberFormat* U_EXPORT2 +U_STABLE UNumberFormat* U_EXPORT2 unum_open( UNumberFormatStyle style, const UChar* pattern, int32_t patternLength, @@ -236,7 +237,7 @@ unum_open( UNumberFormatStyle style, * @param fmt The formatter to close. * @stable ICU 2.0 */ -U_CAPI void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_close(UNumberFormat* fmt); /** @@ -247,7 +248,7 @@ unum_close(UNumberFormat* fmt); * @return A pointer to a UNumberFormat identical to fmt. * @stable ICU 2.0 */ -U_CAPI UNumberFormat* U_EXPORT2 +U_STABLE UNumberFormat* U_EXPORT2 unum_clone(const UNumberFormat *fmt, UErrorCode *status); @@ -272,7 +273,7 @@ unum_clone(const UNumberFormat *fmt, * @see UFieldPosition * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_format( const UNumberFormat* fmt, int32_t number, UChar* result, @@ -301,7 +302,7 @@ unum_format( const UNumberFormat* fmt, * @see UFieldPosition * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_formatInt64(const UNumberFormat *fmt, int64_t number, UChar* result, @@ -330,7 +331,7 @@ unum_formatInt64(const UNumberFormat *fmt, * @see UFieldPosition * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_formatDouble( const UNumberFormat* fmt, double number, UChar* result, @@ -357,9 +358,9 @@ unum_formatDouble( const UNumberFormat* fmt, * @see unum_formatDouble * @see unum_parseDoubleCurrency * @see UFieldPosition - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_formatDoubleCurrency(const UNumberFormat* fmt, double number, UChar* currency, @@ -385,7 +386,7 @@ unum_formatDoubleCurrency(const UNumberFormat* fmt, * @see unum_formatDouble * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_parse( const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -407,9 +408,9 @@ unum_parse( const UNumberFormat* fmt, * @see unum_format * @see unum_formatInt64 * @see unum_formatDouble -* @draft ICU 2.8 +* @stable ICU 2.8 */ -U_CAPI int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 unum_parseInt64(const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -433,7 +434,7 @@ unum_parseInt64(const UNumberFormat* fmt, * @see unum_formatDouble * @stable ICU 2.0 */ -U_CAPI double U_EXPORT2 +U_STABLE double U_EXPORT2 unum_parseDouble( const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -457,9 +458,9 @@ unum_parseDouble( const UNumberFormat* fmt, * @return the parsed double * @see unum_parseDouble * @see unum_formatDoubleCurrency - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT double U_EXPORT2 +U_STABLE double U_EXPORT2 unum_parseDoubleCurrency(const UNumberFormat* fmt, const UChar* text, int32_t textLength, @@ -483,7 +484,7 @@ unum_parseDoubleCurrency(const UNumberFormat* fmt, * @see DecimalFormat * @stable ICU 2.0 */ -U_CAPI void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_applyPattern( UNumberFormat *format, UBool localized, const UChar *pattern, @@ -502,7 +503,7 @@ unum_applyPattern( UNumberFormat *format, * @see unum_countAvailable * @stable ICU 2.0 */ -U_CAPI const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 unum_getAvailable(int32_t index); /** @@ -514,7 +515,7 @@ unum_getAvailable(int32_t index); * @see unum_getAvailable * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_countAvailable(void); /** The possible UNumberFormat numeric attributes @stable ICU 2.0 */ @@ -552,16 +553,16 @@ typedef enum UNumberFormatAttribute { /** Secondary grouping size */ UNUM_SECONDARY_GROUPING_SIZE, /** Use significant digits - * @draft ICU 3.0 */ + * @stable ICU 3.0 */ UNUM_SIGNIFICANT_DIGITS_USED, /** Minimum significant digits - * @draft ICU 3.0 */ + * @stable ICU 3.0 */ UNUM_MIN_SIGNIFICANT_DIGITS, /** Maximum significant digits - * @draft ICU 3.0 */ + * @stable ICU 3.0 */ UNUM_MAX_SIGNIFICANT_DIGITS, /** Lenient parse mode used by rule-based formats. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_LENIENT_PARSE } UNumberFormatAttribute; @@ -582,7 +583,7 @@ typedef enum UNumberFormatAttribute { * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_getAttribute(const UNumberFormat* fmt, UNumberFormatAttribute attr); @@ -605,7 +606,7 @@ unum_getAttribute(const UNumberFormat* fmt, * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_CAPI void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setAttribute( UNumberFormat* fmt, UNumberFormatAttribute attr, int32_t newValue); @@ -625,7 +626,7 @@ unum_setAttribute( UNumberFormat* fmt, * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_CAPI double U_EXPORT2 +U_STABLE double U_EXPORT2 unum_getDoubleAttribute(const UNumberFormat* fmt, UNumberFormatAttribute attr); @@ -643,7 +644,7 @@ unum_getDoubleAttribute(const UNumberFormat* fmt, * @see unum_setTextAttribute * @stable ICU 2.0 */ -U_CAPI void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setDoubleAttribute( UNumberFormat* fmt, UNumberFormatAttribute attr, double newValue); @@ -664,14 +665,14 @@ typedef enum UNumberFormatTextAttribute { UNUM_CURRENCY_CODE, /** * The default rule set. This is only available with rule-based formatters. - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_DEFAULT_RULESET, /** * The public rule sets. This is only available with rule-based formatters. * This is a read-only attribute. The public rulesets are returned as a * single string, with each ruleset name delimited by ';' (semicolon). - * @draft ICU 3.0 + * @stable ICU 3.0 */ UNUM_PUBLIC_RULESETS } UNumberFormatTextAttribute; @@ -694,7 +695,7 @@ typedef enum UNumberFormatTextAttribute { * @see unum_setAttribute * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_getTextAttribute( const UNumberFormat* fmt, UNumberFormatTextAttribute tag, UChar* result, @@ -717,7 +718,7 @@ unum_getTextAttribute( const UNumberFormat* fmt, * @see unum_setAttribute * @stable ICU 2.0 */ -U_CAPI void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setTextAttribute( UNumberFormat* fmt, UNumberFormatTextAttribute tag, const UChar* newValue, @@ -740,15 +741,13 @@ unum_setTextAttribute( UNumberFormat* fmt, * @see DecimalFormat * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_toPattern( const UNumberFormat* fmt, UBool isPatternLocalized, UChar* result, int32_t resultLength, UErrorCode* status); -/** The maximum size for a textual number format symbol. @internal*/ -#define UNFSYMBOLSMAXSIZE 10 /** * Constants for specifying a number format symbol. @@ -756,42 +755,50 @@ unum_toPattern( const UNumberFormat* fmt, */ typedef enum UNumberFormatSymbol { /** The decimal separator */ - UNUM_DECIMAL_SEPARATOR_SYMBOL, + UNUM_DECIMAL_SEPARATOR_SYMBOL = 0, /** The grouping separator */ - UNUM_GROUPING_SEPARATOR_SYMBOL, + UNUM_GROUPING_SEPARATOR_SYMBOL = 1, /** The pattern separator */ - UNUM_PATTERN_SEPARATOR_SYMBOL, + UNUM_PATTERN_SEPARATOR_SYMBOL = 2, /** The percent sign */ - UNUM_PERCENT_SYMBOL, + UNUM_PERCENT_SYMBOL = 3, /** Zero*/ - UNUM_ZERO_DIGIT_SYMBOL, + UNUM_ZERO_DIGIT_SYMBOL = 4, /** Character representing a digit in the pattern */ - UNUM_DIGIT_SYMBOL, + UNUM_DIGIT_SYMBOL = 5, /** The minus sign */ - UNUM_MINUS_SIGN_SYMBOL, + UNUM_MINUS_SIGN_SYMBOL = 6, /** The plus sign */ - UNUM_PLUS_SIGN_SYMBOL, + UNUM_PLUS_SIGN_SYMBOL = 7, /** The currency symbol */ - UNUM_CURRENCY_SYMBOL, + UNUM_CURRENCY_SYMBOL = 8, /** The international currency symbol */ - UNUM_INTL_CURRENCY_SYMBOL, + UNUM_INTL_CURRENCY_SYMBOL = 9, /** The monetary separator */ - UNUM_MONETARY_SEPARATOR_SYMBOL, + UNUM_MONETARY_SEPARATOR_SYMBOL = 10, /** The exponential symbol */ - UNUM_EXPONENTIAL_SYMBOL, + UNUM_EXPONENTIAL_SYMBOL = 11, /** Per mill symbol */ - UNUM_PERMILL_SYMBOL, + UNUM_PERMILL_SYMBOL = 12, /** Escape padding character */ - UNUM_PAD_ESCAPE_SYMBOL, + UNUM_PAD_ESCAPE_SYMBOL = 13, /** Infinity symbol */ - UNUM_INFINITY_SYMBOL, + UNUM_INFINITY_SYMBOL = 14, /** Nan symbol */ - UNUM_NAN_SYMBOL, + UNUM_NAN_SYMBOL = 15, /** Significant digit symbol - * @draft ICU 3.0 */ - UNUM_SIGNIFICANT_DIGIT_SYMBOL, + * @stable ICU 3.0 */ + UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16, + +#ifndef U_HIDE_DRAFT_API + /** The monetary grouping separator + * @draft ICU 3.6 + */ + UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17, +#endif /*U_HIDE_DRAFT_API*/ + /** count symbol constants */ - UNUM_FORMAT_SYMBOL_COUNT + UNUM_FORMAT_SYMBOL_COUNT = 18 } UNumberFormatSymbol; /** @@ -810,7 +817,7 @@ typedef enum UNumberFormatSymbol { * @see unum_setSymbol * @stable ICU 2.0 */ -U_CAPI int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 unum_getSymbol(const UNumberFormat *fmt, UNumberFormatSymbol symbol, UChar *buffer, @@ -830,7 +837,7 @@ unum_getSymbol(const UNumberFormat *fmt, * @see unum_getSymbol * @stable ICU 2.0 */ -U_CAPI void U_EXPORT2 +U_STABLE void U_EXPORT2 unum_setSymbol(UNumberFormat *fmt, UNumberFormatSymbol symbol, const UChar *value, @@ -845,9 +852,9 @@ unum_setSymbol(UNumberFormat *fmt, * @param type type of the locale we're looking for (valid or actual) * @param status error code for the operation * @return the locale name - * @draft ICU 2.8 likely to change in ICU 3.0, based on feedback + * @stable ICU 2.8 */ -U_CAPI const char* U_EXPORT2 +U_STABLE const char* U_EXPORT2 unum_getLocaleByType(const UNumberFormat *fmt, ULocDataLocaleType type, UErrorCode* status); diff --git a/icuSources/i18n/unicode/uregex.h b/icuSources/i18n/unicode/uregex.h index 5c37bc84..862cf344 100644 --- a/icuSources/i18n/unicode/uregex.h +++ b/icuSources/i18n/unicode/uregex.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: regex.h @@ -29,27 +29,27 @@ #include "unicode/parseerr.h" -#ifndef U_HIDE_DRAFT_API - struct URegularExpression; /** * Structure represeting a compiled regular rexpression, plus the results * of a match operation. - * @draft ICU 3.0 + * @stable ICU 3.0 */ typedef struct URegularExpression URegularExpression; -#endif /* U_HIDE_DRAFT_API */ - /** * Constants for Regular Expression Match Modes. * @stable ICU 2.4 */ typedef enum URegexpFlag{ - /** Forces normalization of pattern and strings. @draft ICU 2.4 */ - UREGEX_CANON_EQ = 128, +#ifndef U_HIDE_DRAFT_API + /** Forces normalization of pattern and strings. + Not implemented yet, just a placeholder, hence draft. + @draft ICU 2.4 */ + UREGEX_CANON_EQ = 128, +#endif /** Enable case insensitive matching. @stable ICU 2.4 */ UREGEX_CASE_INSENSITIVE = 2, @@ -71,7 +71,7 @@ typedef enum URegexpFlag{ * Warning: Unicode word boundaries are quite different from * traditional regular expression word boundaries. See * http://unicode.org/reports/tr29/#Word_Boundaries - * @draft ICU 2.8 + * @stable ICU 2.8 */ UREGEX_UWORD = 256 } URegexpFlag; @@ -94,10 +94,10 @@ typedef enum URegexpFlag{ * error within the source regular expression string. If this * information is not wanted, pass NULL for this parameter. * @param status Receives error detected by this function. - * @draft ICU 3.0 + * @stable ICU 3.0 * */ -U_DRAFT URegularExpression * U_EXPORT2 +U_STABLE URegularExpression * U_EXPORT2 uregex_open( const UChar *pattern, int32_t patternLength, uint32_t flags, @@ -125,14 +125,15 @@ uregex_open( const UChar *pattern, * @return The URegularExpression object representing the compiled * pattern. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT URegularExpression * U_EXPORT2 +#if !UCONFIG_NO_CONVERSION +U_STABLE URegularExpression * U_EXPORT2 uregex_openC( const char *pattern, uint32_t flags, UParseError *pe, UErrorCode *status); - +#endif @@ -141,9 +142,9 @@ uregex_openC( const char *pattern, * was holding. * * @param regexp The regular expression to be closed. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_close(URegularExpression *regexp); /** @@ -162,9 +163,9 @@ uregex_close(URegularExpression *regexp); * @param regexp The compiled regular expression to be cloned. * @param status Receives indication of any errors encountered * @return the cloned copy of the compiled regular expression. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT URegularExpression * U_EXPORT2 +U_STABLE URegularExpression * U_EXPORT2 uregex_clone(const URegularExpression *regexp, UErrorCode *status); /** @@ -181,9 +182,9 @@ uregex_clone(const URegularExpression *regexp, UErrorCode *status); * owned by the regular expression object, and must not be * altered or deleted by the application. The returned string * will remain valid until the regular expression is closed. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT const UChar * U_EXPORT2 +U_STABLE const UChar * U_EXPORT2 uregex_pattern(const URegularExpression *regexp, int32_t *patLength, UErrorCode *status); @@ -195,9 +196,9 @@ uregex_pattern(const URegularExpression *regexp, * @param regexp The compiled regular expression. * @return The match mode flags * @see URegexpFlag - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_flags(const URegularExpression *regexp, UErrorCode *status); @@ -220,9 +221,9 @@ uregex_flags(const URegularExpression *regexp, * @param textLength The length of the subject text, or -1 if the string * is NUL terminated. * @param status Receives errors detected by this function. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_setText(URegularExpression *regexp, const UChar *text, int32_t textLength, @@ -242,9 +243,9 @@ uregex_setText(URegularExpression *regexp, * @param status Receives errors detected by this function. * @return Poiner to the subject text string currently associated with * this regular expression. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT const UChar * U_EXPORT2 +U_STABLE const UChar * U_EXPORT2 uregex_getText(URegularExpression *regexp, int32_t *textLength, UErrorCode *status); @@ -257,9 +258,9 @@ uregex_getText(URegularExpression *regexp, * @param startIndex The input string index at which to begin matching. * @param status Receives errors detected by this function. * @return TRUE if there is a match - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_matches(URegularExpression *regexp, int32_t startIndex, UErrorCode *status); @@ -277,9 +278,9 @@ uregex_matches(URegularExpression *regexp, * @param startIndex The input string index at which to begin matching. * @param status A reference to a UErrorCode to receive any errors. * @return TRUE if there is a match. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_lookingAt(URegularExpression *regexp, int32_t startIndex, UErrorCode *status); @@ -294,9 +295,9 @@ uregex_lookingAt(URegularExpression *regexp, * @param startIndex The position in the input string to begin the search * @param status A reference to a UErrorCode to receive any errors. * @return TRUE if a match is found. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_find(URegularExpression *regexp, int32_t startIndex, UErrorCode *status); @@ -312,9 +313,9 @@ uregex_find(URegularExpression *regexp, * @param status A reference to a UErrorCode to receive any errors. * @return TRUE if a match is found. * @see uregex_reset - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT UBool U_EXPORT2 +U_STABLE UBool U_EXPORT2 uregex_findNext(URegularExpression *regexp, UErrorCode *status); @@ -323,9 +324,9 @@ uregex_findNext(URegularExpression *regexp, * @param regexp The compiled regular expression. * @param status A reference to a UErrorCode to receive any errors. * @return the number of capture groups - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_groupCount(URegularExpression *regexp, UErrorCode *status); @@ -343,9 +344,9 @@ uregex_groupCount(URegularExpression *regexp, * @param status A reference to a UErrorCode to receive any errors. * @return Length of matching data, * or -1 if no applicable match. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_group(URegularExpression *regexp, int32_t groupNum, UChar *dest, @@ -365,9 +366,9 @@ uregex_group(URegularExpression *regexp, * @param status A reference to a UErrorCode to receive any errors. * @return the starting position in the input of the text matched * by the specified group. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_start(URegularExpression *regexp, int32_t groupNum, UErrorCode *status); @@ -383,9 +384,9 @@ uregex_start(URegularExpression *regexp, * @param groupNum The capture group number * @param status A reference to a UErrorCode to receive any errors. * @return the index of the position following the last matched character. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_end(URegularExpression *regexp, int32_t groupNum, UErrorCode *status); @@ -400,9 +401,9 @@ uregex_end(URegularExpression *regexp, * @param index The position in the text at which a * uregex_findNext() should begin searching. * @param status A reference to a UErrorCode to receive any errors. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 uregex_reset(URegularExpression *regexp, int32_t index, UErrorCode *status); @@ -429,11 +430,11 @@ uregex_reset(URegularExpression *regexp, * and replace operation. In the event that the * destination capacity is inadequate, the return value * is still the full length of the untruncated string. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_replaceAll(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar *destBuf, int32_t destCapacity, @@ -462,11 +463,11 @@ uregex_replaceAll(URegularExpression *regexp, * and replace operation. In the event that the * destination capacity is inadequate, the return value * is still the full length of the untruncated string. - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_replaceFirst(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar *destBuf, int32_t destCapacity, @@ -516,12 +517,12 @@ uregex_replaceFirst(URegularExpression *regexp, * destCapacity is inadequate, the full length of the * untruncated output string is returned. * - * @draft ICU 3.0 + * @stable ICU 3.0 * */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_appendReplacement(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar **destBuf, int32_t *destCapacity, @@ -550,9 +551,9 @@ uregex_appendReplacement(URegularExpression *regexp, * destCapacity is inadequate, the full length of the * untruncated output string is returned. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_appendTail(URegularExpression *regexp, UChar **destBuf, int32_t *destCapacity, @@ -570,6 +571,22 @@ uregex_appendTail(URegularExpression *regexp, * Each of the fields is copied from the input string to the destination * buffer, and the NUL terminated. The position of each field within * the destination buffer is returned in the destFields array. + * + * Note: another choice for the design of this function would be to not + * copy the resulting fields at all, but to return indexes and + * lengths within the source text. + * Advantages would be + * o Faster. No Copying. + * o Nothing extra needed when field data may contain embedded NUL chars. + * o Less memory needed if working on large data. + * Disadvantages + * o Less consistent with C++ split, which copies into an + * array of UnicodeStrings. + * o No NUL termination, extracted fields would be less convenient + * to use in most cases. + * o Possible problems in the future, when support Unicode Normalization + * could cause the fields to not correspond exactly to + * a range of the source text. * * @param regexp The compiled regular expression. * @param destBuf A (UChar *) buffer to receive the fields that @@ -597,25 +614,9 @@ uregex_appendTail(URegularExpression *regexp, * positions are used. * @param status A reference to a UErrorCode to receive any errors. * @return The number of fields into which the input string was split. - * @draft ICU 3.0 - * - * Note: another choice for the design of this function would be to not - * copy the resulting fields at all, but to return indexes and - * lengths within the source text. - * Advantages would be - * o Faster. No Copying. - * o Nothing extra needed when field data may contain embedded NUL chars. - * o Less memory needed if working on large data. - * Disadvantages - * o Less consistent with C++ split, which copies into an - * array of UnicodeStrings. - * o No NUL termination, extracted fields would be less convenient - * to use in most cases. - * o Possible problems in the future, when support Unicode Normalization - * could cause the fields to not correspond exactly to - * a range of the source text. + * @stable ICU 3.0 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 uregex_split( URegularExpression *regexp, UChar *destBuf, int32_t destCapacity, diff --git a/icuSources/i18n/unicode/usearch.h b/icuSources/i18n/unicode/usearch.h index 61637871..64b9e451 100644 --- a/icuSources/i18n/unicode/usearch.h +++ b/icuSources/i18n/unicode/usearch.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004 IBM and others. All rights reserved. +* Copyright (C) 2001-2005 IBM and others. All rights reserved. ********************************************************************** * Date Name Description * 06/28/2001 synwee Creation. @@ -24,14 +24,14 @@ * C Apis for an engine that provides language-sensitive text searching based * on the comparison rules defined in a <tt>UCollator</tt> data struct, * see <tt>ucol.h</tt>. This ensures that language eccentricity can be - * handled, e.g. for the German collator, characters ß and SS will be matched + * handled, e.g. for the German collator, characters ß and SS will be matched * if case is chosen to be ignored. - * See the <a href="http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> + * See the <a href="http://dev.icu-project.org/cgi-bin/viewcvs.cgi/~checkout~/icuhtml/design/collation/ICU_collation_design.htm"> * "ICU Collation Design Document"</a> for more information. * <p> * The algorithm implemented is a modified form of the Boyer Moore's search. * For more information see - * <a href="http://oss.software.ibm.com/icu/docs/papers/efficient_text_searching_in_java.html"> + * <a href="http://icu.sourceforge.net/docs/papers/efficient_text_searching_in_java.html"> * "Efficient Text Searching in Java"</a>, published in <i>Java Report</i> * in February, 1999, for further information on the algorithm. * <p> @@ -45,10 +45,10 @@ * option 1. Some canonical equivalent of P matches some canonical equivalent * of S' * option 2. P matches S' and if P starts or ends with a combining mark, - * there exists no non-ignorable combining mark before or after S’ + * there exists no non-ignorable combining mark before or after S' * in S respectively. * </pre> - * Option 2. will be the default· + * Option 2. will be the default. * <p> * This search has APIs similar to that of other text iteration mechanisms * such as the break iterators in <tt>ubrk.h</tt>. Using these diff --git a/icuSources/i18n/unicode/utmscale.h b/icuSources/i18n/unicode/utmscale.h index dd3ffb30..1ab9c215 100644 --- a/icuSources/i18n/unicode/utmscale.h +++ b/icuSources/i18n/unicode/utmscale.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2004, International Business Machines Corporation and +* Copyright (C) 2004 - 2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -39,62 +39,62 @@ * </tr> * * <tr> - * <td>JAVA_TIME</td> + * <td>UDTS_JAVA_TIME</td> * <td>int64_t</td> * <td>milliseconds</td> * <td>Jan 1, 1970</td> * </tr> * <tr> * - * <td>UNIX_TIME</td> + * <td>UDTS_UNIX_TIME</td> * <td>int32_t or int64_t</td> * <td>seconds</td> * <td>Jan 1, 1970</td> * </tr> * <tr> - * <td>ICU4C_TIME</td> + * <td>UDTS_ICU4C_TIME</td> * * <td>double</td> * <td>milliseconds</td> * <td>Jan 1, 1970</td> * </tr> * <tr> - * <td>WINDOWS_FILE_TIME</td> + * <td>UDTS_WINDOWS_FILE_TIME</td> * <td>int64_t</td> * * <td>ticks (100 nanoseconds)</td> * <td>Jan 1, 1601</td> * </tr> * <tr> - * <td>WINDOWS_DATE_TIME</td> + * <td>UDTS_DOTNET_DATE_TIME</td> * <td>int64_t</td> * <td>ticks (100 nanoseconds)</td> * * <td>Jan 1, 0001</td> * </tr> * <tr> - * <td>MAC_OLD_TIME</td> - * <td>int32_t</td> + * <td>UDTS_MAC_OLD_TIME</td> + * <td>int32_t or int64_t</td> * <td>seconds</td> * <td>Jan 1, 1904</td> * * </tr> * <tr> - * <td>MAC_TIME</td> + * <td>UDTS_MAC_TIME</td> * <td>double</td> * <td>seconds</td> * <td>Jan 1, 2001</td> * </tr> * * <tr> - * <td>EXCEL_TIME</td> + * <td>UDTS_EXCEL_TIME</td> * <td>?</td> * <td>days</td> * <td>Dec 31, 1899</td> * </tr> * <tr> * - * <td>DB2_TIME</td> + * <td>UDTS_DB2_TIME</td> * <td>?</td> * <td>days</td> * <td>Dec 31, 1899</td> @@ -161,12 +161,12 @@ * *<p> * So what to use for this pivot? Java time has plenty of range, but cannot represent - * Windows datetimes without severe loss of precision. ICU4C time addresses this by using a + * .NET <code>System.DateTime</code> values without severe loss of precision. ICU4C time addresses this by using a * <code>double</code> that is otherwise equivalent to the Java time. However, there are disadvantages * with <code>doubles</code>. They provide for much more graceful degradation in arithmetic operations. * But they only have 53 bits of accuracy, which means that they will lose precision when * converting back and forth to ticks. What would really be nice would be a - * long double (80 bits -- 64 bit mantissa), but that is not supported on most systems. + * <code>long double</code> (80 bits -- 64 bit mantissa), but that is not supported on most systems. * *<p> * The Unix extended time uses a structure with two components: time in seconds and a @@ -177,12 +177,12 @@ * have a fixed size. * *<p> - * Because of these issues, we ended up concluding that the Windows datetime would be the - * best pivot. However, we use the full range allowed by the datatype, allowing for - * datetimes back to 29,000 BC and up to 29,000 AD. This time scale is very fine grained, - * does not lose precision, and covers a range that will meet almost all requirements. - * It will not handle the range that Java times do, but frankly, being able to handle dates - * before 29,000 BC or after 29,000 AD is of very limited interest. + * Because of these issues, we ended up concluding that the .NET framework's + * <code>System.DateTime</code> would be the best pivot. However, we use the full range + * allowed by the datatype, allowing for datetimes back to 29,000 BC and up to 29,000 AD. + * This time scale is very fine grained, does not lose precision, and covers a range that + * will meet almost all requirements. It will not handle the range that Java times do, + * but frankly, being able to handle dates before 29,000 BC or after 29,000 AD is of very limited interest. * */ @@ -190,14 +190,14 @@ * <code>UDateTimeScale</code> values are used to specify the time scale used for * conversion into or out if the universal time scale. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ typedef enum UDateTimeScale { /** * Used in the JDK. Data is a Java <code>long</code> (<code>int64_t</code>). Value * is milliseconds since January 1, 1970. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_JAVA_TIME = 0, @@ -205,7 +205,7 @@ typedef enum UDateTimeScale { * Used on Unix systems. Data is <code>int32_t</code> or <code>int64_t</code>. Value * is seconds since January 1, 1970. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_UNIX_TIME, @@ -213,7 +213,7 @@ typedef enum UDateTimeScale { * Used in IUC4C. Data is a <code>double</code>. Value * is milliseconds since January 1, 1970. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_ICU4C_TIME, @@ -221,23 +221,23 @@ typedef enum UDateTimeScale { * Used in Windows for file times. Data is an <code>int64_t</code>. Value * is ticks (1 tick == 100 nanoseconds) since January 1, 1601. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_WINDOWS_FILE_TIME, /** - * Used in Windows for dates and times (?). Data is an <code>int64_t</code>. Value + * Used in the .NET framework's <code>System.DateTime</code> structure. Data is an <code>int64_t</code>. Value * is ticks (1 tick == 100 nanoseconds) since January 1, 0001. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ - UDTS_WINDOWS_DATE_TIME, + UDTS_DOTNET_DATE_TIME, /** - * Used in older Macintosh systems. Data is an <code>int32_t</code>. Value + * Used in older Macintosh systems. Data is <code>int32_t</code> or <code>int64_t</code>. Value * is seconds since January 1, 1904. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_MAC_OLD_TIME, @@ -245,7 +245,7 @@ typedef enum UDateTimeScale { * Used in newer Macintosh systems. Data is a <code>double</code>. Value * is seconds since January 1, 2001. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_MAC_TIME, @@ -253,7 +253,7 @@ typedef enum UDateTimeScale { * Used in Excel. Data is an <code>?unknown?</code>. Value * is days since December 31, 1899. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_EXCEL_TIME, @@ -261,26 +261,32 @@ typedef enum UDateTimeScale { * Used in DB2. Data is an <code>?unknown?</code>. Value * is days since December 31, 1899. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UDTS_DB2_TIME, /** - * The first unused time scale value. - * - * @draft ICU 3.2 + * The first unused time scale value. The limit of this enum */ UDTS_MAX_SCALE } UDateTimeScale; +/** + * <code>UTimeScaleValue</code> values are used to specify the time scale values + * to <code>utmscale_getTimeScaleValue</code>. + * + * @see utmscale_getTimeScaleValue + * + * @stable ICU 3.2 + */ typedef enum UTimeScaleValue { /** * The constant used to select the units vale * for a time scale. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @stable ICU 3.2 */ UTSV_UNITS_VALUE = 0, @@ -288,52 +294,53 @@ typedef enum UTimeScaleValue { * The constant used to select the epoch offset value * for a time scale. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @stable ICU 3.2 */ - UTSV_EPOCH_OFFSET_VALUE, + UTSV_EPOCH_OFFSET_VALUE=1, /** * The constant used to select the minimum from value * for a time scale. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @stable ICU 3.2 */ - UTSV_FROM_MIN_VALUE, + UTSV_FROM_MIN_VALUE=2, /** * The constant used to select the maximum from value * for a time scale. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @stable ICU 3.2 */ - UTSV_FROM_MAX_VALUE, + UTSV_FROM_MAX_VALUE=3, /** * The constant used to select the minimum to value * for a time scale. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @stable ICU 3.2 */ - UTSV_TO_MIN_VALUE, + UTSV_TO_MIN_VALUE=4, /** * The constant used to select the maximum to value * for a time scale. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @stable ICU 3.2 */ - UTSV_TO_MAX_VALUE, + UTSV_TO_MAX_VALUE=5, +#ifndef U_HIDE_INTERNAL_API /** * The constant used to select the epoch plus one value * for a time scale. @@ -341,11 +348,11 @@ typedef enum UTimeScaleValue { * NOTE: This is an internal value. DO NOT USE IT. May not * actually be equal to the epoch offset value plus one. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @internal ICU 3.2 */ - UTSV_EPOCH_OFFSET_PLUS_1_VALUE, + UTSV_EPOCH_OFFSET_PLUS_1_VALUE=6, /** * The constant used to select the epoch plus one value @@ -354,11 +361,11 @@ typedef enum UTimeScaleValue { * NOTE: This is an internal value. DO NOT USE IT. May not * actually be equal to the epoch offset value plus one. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @draft ICU 3.2 + * @internal ICU 3.2 */ - UTSV_EPOCH_OFFSET_MINUS_1_VALUE, + UTSV_EPOCH_OFFSET_MINUS_1_VALUE=7, /** * The constant used to select the units round value @@ -366,11 +373,11 @@ typedef enum UTimeScaleValue { * * NOTE: This is an internal value. DO NOT USE IT. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @internal + * @internal ICU 3.2 */ - UTSV_UNITS_ROUND_VALUE, + UTSV_UNITS_ROUND_VALUE=8, /** * The constant used to select the minimum safe rounding value @@ -378,11 +385,11 @@ typedef enum UTimeScaleValue { * * NOTE: This is an internal value. DO NOT USE IT. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @internal + * @internal ICU 3.2 */ - UTSV_MIN_ROUND_VALUE, + UTSV_MIN_ROUND_VALUE=9, /** * The constant used to select the maximum safe rounding value @@ -390,22 +397,21 @@ typedef enum UTimeScaleValue { * * NOTE: This is an internal value. DO NOT USE IT. * - * @see utms_getTimeScaleValue + * @see utmscale_getTimeScaleValue * - * @internal + * @internal ICU 3.2 */ - UTSV_MAX_ROUND_VALUE, + UTSV_MAX_ROUND_VALUE=10, + +#endif /* U_HIDE_INTERNAL_API */ /** - * The number of time scale values. - * - * NOTE: This is an internal value. DO NOT USE IT. + * The number of time scale values, in other words limit of this enum. * - * @see utms_getTimeScaleValue - * - * @internal + * @see utmscale_getTimeScaleValue */ - UTSV_MAX_SCALE_VALUE + UTSV_MAX_SCALE_VALUE=11 + } UTimeScaleValue; /** @@ -416,9 +422,9 @@ typedef enum UTimeScaleValue { * @param status The status code. Set to <code>U_ILLEGAL_ARGUMENT_ERROR</code> if arguments are invalid. * @return - the value. * - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status); /* Conversion to 'universal time scale' */ @@ -432,9 +438,9 @@ U_DRAFT int64_t U_EXPORT2 * * @return The datetime converted to the universal time scale * - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status); /* Conversion from 'universal time scale' */ @@ -448,9 +454,9 @@ U_DRAFT int64_t U_EXPORT2 * * @return The datetime converted to the given time scale * - * @draft ICU 3.2 + * @stable ICU 3.2 */ -U_DRAFT int64_t U_EXPORT2 +U_STABLE int64_t U_EXPORT2 utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status); #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/unicode/utrans.h b/icuSources/i18n/unicode/utrans.h index dc0597ee..a460a34c 100644 --- a/icuSources/i18n/unicode/utrans.h +++ b/icuSources/i18n/unicode/utrans.h @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1997-2004, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * Date Name Description @@ -182,9 +182,9 @@ typedef struct UTransPosition { * @param pErrorCode a pointer to the UErrorCode * @return a transliterator pointer that may be passed to other * utrans_xxx() functions, or NULL if the open call fails. - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT UTransliterator* U_EXPORT2 +U_STABLE UTransliterator* U_EXPORT2 utrans_openU(const UChar *id, int32_t idLength, UTransDirection dir, @@ -247,9 +247,9 @@ utrans_close(UTransliterator* trans); * @return the NUL-terminated ID string. This pointer remains * valid until utrans_close() is called on this transliterator. * - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT const UChar * U_EXPORT2 +U_STABLE const UChar * U_EXPORT2 utrans_getUnicodeID(const UTransliterator *trans, int32_t *resultLength); @@ -278,9 +278,9 @@ utrans_register(UTransliterator* adoptedTrans, * * @param id an ID to unregister * @param idLength the length of id, or -1 if id is zero-terminated - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 utrans_unregisterID(const UChar* id, int32_t idLength); /** @@ -324,9 +324,9 @@ utrans_countAvailableIDs(void); * @return UEnumeration for the available transliterators. * Close with uenum_close(). * - * @draft ICU 2.8 + * @stable ICU 2.8 */ -U_DRAFT UEnumeration * U_EXPORT2 +U_STABLE UEnumeration * U_EXPORT2 utrans_openIDs(UErrorCode *pErrorCode); /******************************************************************** diff --git a/icuSources/i18n/uregex.cpp b/icuSources/i18n/uregex.cpp index c249d676..9aab85e5 100644 --- a/icuSources/i18n/uregex.cpp +++ b/icuSources/i18n/uregex.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 2004-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: regex.cpp @@ -159,32 +159,6 @@ ErrorExit: } - - - -//---------------------------------------------------------------------------------------- -// -// uregex_openC -// -//---------------------------------------------------------------------------------------- -U_CAPI URegularExpression * U_EXPORT2 -uregex_openC( const char *pattern, - uint32_t flags, - UParseError *pe, - UErrorCode *status) { - if (U_FAILURE(*status)) { - return NULL; - } - if (pattern == NULL) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return NULL; - } - - UnicodeString patString(pattern); - URegularExpression *re = uregex_open(patString.getBuffer(), patString.length(), flags, pe, status); - return re; -} - //---------------------------------------------------------------------------------------- // // uregex_close @@ -235,16 +209,16 @@ uregex_clone(const URegularExpression *source, UErrorCode *status) { // Note: fText is not cloned. return clone; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_pattern // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI const UChar * U_EXPORT2 uregex_pattern(const URegularExpression *regexp, int32_t *patLength, @@ -257,14 +231,14 @@ uregex_pattern(const URegularExpression *regexp, *patLength = regexp->fPatStringLen; } return regexp->fPatString; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_flags // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_flags(const URegularExpression *regexp, UErrorCode *status) { if (validateRE(regexp, status, FALSE) == FALSE) { @@ -272,14 +246,14 @@ uregex_flags(const URegularExpression *regexp, UErrorCode *status) { } int32_t flags = regexp->fPat->flags(); return flags; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_setText // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI void U_EXPORT2 uregex_setText(URegularExpression *regexp, const UChar *text, @@ -298,15 +272,15 @@ uregex_setText(URegularExpression *regexp, regexp->fTextString.setTo(isTerminated, text, textLength); regexp->fMatcher->reset(regexp->fTextString); -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_getText // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI const UChar * U_EXPORT2 uregex_getText(URegularExpression *regexp, int32_t *textLength, @@ -318,14 +292,14 @@ uregex_getText(URegularExpression *regexp, *textLength = regexp->fTextLength; } return regexp->fText; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_matches // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI UBool U_EXPORT2 uregex_matches(URegularExpression *regexp, int32_t startIndex, @@ -335,15 +309,15 @@ uregex_matches(URegularExpression *regexp, } UBool result = regexp->fMatcher->matches(startIndex, *status); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_lookingAt // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI UBool U_EXPORT2 uregex_lookingAt(URegularExpression *regexp, int32_t startIndex, @@ -353,15 +327,15 @@ uregex_lookingAt(URegularExpression *regexp, } UBool result = regexp->fMatcher->lookingAt(startIndex, *status); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_find // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI UBool U_EXPORT2 uregex_find(URegularExpression *regexp, int32_t startIndex, @@ -371,13 +345,13 @@ uregex_find(URegularExpression *regexp, } UBool result = regexp->fMatcher->find(startIndex, *status); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_findNext // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI UBool U_EXPORT2 uregex_findNext(URegularExpression *regexp, UErrorCode *status) { @@ -386,13 +360,13 @@ uregex_findNext(URegularExpression *regexp, } UBool result = regexp->fMatcher->find(); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_groupCount // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_groupCount(URegularExpression *regexp, UErrorCode *status) { @@ -401,14 +375,14 @@ uregex_groupCount(URegularExpression *regexp, } int32_t result = regexp->fMatcher->groupCount(); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_group // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_group(URegularExpression *regexp, int32_t groupNum, @@ -453,14 +427,14 @@ uregex_group(URegularExpression *regexp, u_memcpy(dest, ®exp->fText[startIx], copyLength); } return fullLength; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_start // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_start(URegularExpression *regexp, int32_t groupNum, @@ -470,14 +444,14 @@ uregex_start(URegularExpression *regexp, } int32_t result = regexp->fMatcher->start(groupNum, *status); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_end // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_end(URegularExpression *regexp, int32_t groupNum, @@ -487,13 +461,13 @@ uregex_end(URegularExpression *regexp, } int32_t result = regexp->fMatcher->end(groupNum, *status); return result; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_reset // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI void U_EXPORT2 uregex_reset(URegularExpression *regexp, int32_t index, @@ -502,17 +476,17 @@ uregex_reset(URegularExpression *regexp, return; } regexp->fMatcher->reset(index, *status); -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_replaceAll // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_replaceAll(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar *destBuf, int32_t destCapacity, @@ -536,17 +510,17 @@ uregex_replaceAll(URegularExpression *regexp, len += uregex_appendTail(regexp, &destBuf, &destCapacity, status); return len; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_replaceFirst // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_replaceFirst(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar *destBuf, int32_t destCapacity, @@ -572,14 +546,14 @@ uregex_replaceFirst(URegularExpression *regexp, len += uregex_appendTail(regexp, &destBuf, &destCapacity, status); return len; -}; +} -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_appendReplacement // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // @@ -590,7 +564,7 @@ U_NAMESPACE_BEGIN class RegexCImpl { public: inline static int32_t appendReplacement(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar **destBuf, int32_t *destCapacity, @@ -637,7 +611,7 @@ static inline void appendToBuf(UChar c, int32_t *idx, UChar *buf, int32_t bufCap // appendReplacement, the actual implementation. // int32_t RegexCImpl::appendReplacement(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar **destBuf, int32_t *destCapacity, @@ -720,7 +694,7 @@ int32_t RegexCImpl::appendReplacement(URegularExpression *regexp, u_unescapeAt(unescape_charAt, &replIdx, // Index is updated by unescapeAt replacementLength, // Length of replacement text - replacementText); + (void *)replacementText); if (escapedChar != (UChar32)0xFFFFFFFF) { if (escapedChar <= 0xffff) { @@ -836,7 +810,7 @@ int32_t RegexCImpl::appendReplacement(URegularExpression *regexp, // U_CAPI int32_t U_EXPORT2 uregex_appendReplacement(URegularExpression *regexp, - UChar *replacementText, + const UChar *replacementText, int32_t replacementLength, UChar **destBuf, int32_t *destCapacity, @@ -846,11 +820,11 @@ uregex_appendReplacement(URegularExpression *regexp, } -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_appendTail // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ int32_t RegexCImpl::appendTail(URegularExpression *regexp, UChar **destBuf, int32_t *destCapacity, @@ -948,7 +922,7 @@ int32_t RegexCImpl::appendTail(URegularExpression *regexp, } return destIdx; -}; +} U_CAPI int32_t U_EXPORT2 @@ -960,14 +934,14 @@ uregex_appendTail(URegularExpression *regexp, } -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // copyString Internal utility to copy a string to an output buffer, // while managing buffer overflow and preflight size // computation. NUL termination is added to destination, // and the NUL is counted in the output size. // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ static void copyString(UChar *destBuffer, // Destination buffer. int32_t destCapacity, // Total capacity of dest buffer int32_t *destIndex, // Index into dest buffer. Updated on return. @@ -989,16 +963,19 @@ static void copyString(UChar *destBuffer, // Destination buffer. break; } } - destBuffer[di++] = 0; + if (di<destCapacity) { + destBuffer[di] = 0; + } + di++; *destIndex = di; } -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ // // uregex_split // -//---------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------ U_CAPI int32_t U_EXPORT2 uregex_split( URegularExpression *regexp, UChar *destBuf, @@ -1117,15 +1094,12 @@ uregex_split( URegularExpression *regexp, if (requiredCapacity != NULL) { *requiredCapacity = destIdx; } - if (*requiredCapacity > destCapacity) { + if (destIdx > destCapacity) { *status = U_BUFFER_OVERFLOW_ERROR; } return i+1; } - - - - #endif // !UCONFIG_NO_REGULAR_EXPRESSIONS + diff --git a/icuSources/i18n/uregexc.cpp b/icuSources/i18n/uregexc.cpp new file mode 100644 index 00000000..837bab0f --- /dev/null +++ b/icuSources/i18n/uregexc.cpp @@ -0,0 +1,39 @@ +/* +******************************************************************************* +* Copyright (C) 2003-2005, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* file name: regexc.cpp +* description: The purpose of this function is to separate the codepage +* conversion from the rest of the uregex_ API. This can removes any +* dependency on codepage conversion, which reduces the overhead of +*/ + +#include "unicode/uregex.h" +#include "unicode/unistr.h" + +//---------------------------------------------------------------------------------------- +// +// uregex_openC +// +//---------------------------------------------------------------------------------------- +#if !UCONFIG_NO_CONVERSION && !UCONFIG_NO_REGULAR_EXPRESSIONS + +U_CAPI URegularExpression * U_EXPORT2 +uregex_openC( const char *pattern, + uint32_t flags, + UParseError *pe, + UErrorCode *status) { + if (U_FAILURE(*status)) { + return NULL; + } + if (pattern == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + UnicodeString patString(pattern); + URegularExpression *re = uregex_open(patString.getBuffer(), patString.length(), flags, pe, status); + return re; +} +#endif diff --git a/icuSources/i18n/usearch.cpp b/icuSources/i18n/usearch.cpp index 8c14c0b9..74798e88 100644 --- a/icuSources/i18n/usearch.cpp +++ b/icuSources/i18n/usearch.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004 IBM and others. All rights reserved. +* Copyright (C) 2001-2006 IBM and others. All rights reserved. ********************************************************************** * Date Name Description * 07/02/2001 synwee Creation. @@ -20,6 +20,8 @@ #include "cmemory.h" #include "ucln_in.h" +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + // internal definition --------------------------------------------------- #define LAST_BYTE_MASK_ 0xFF @@ -118,7 +120,7 @@ inline void initializeFCD(UErrorCode *status) * @return fcd value */ static -inline uint16_t getFCD(const UChar *str, int32_t *offset, +uint16_t getFCD(const UChar *str, int32_t *offset, int32_t strlength) { int32_t temp = *offset; @@ -432,7 +434,7 @@ inline void initialize(UStringSearch *strsrch, UErrorCode *status) * @param end target text end offset */ static -inline UBool isBreakUnit(const UStringSearch *strsrch, int32_t start, +UBool isBreakUnit(const UStringSearch *strsrch, int32_t start, int32_t end) { #if !UCONFIG_NO_BREAK_ITERATION @@ -896,32 +898,50 @@ static inline UBool checkIdentical(const UStringSearch *strsrch, int32_t start, int32_t end) { + UChar t2[32], p2[32]; int32_t length = end - start; if (strsrch->strength != UCOL_IDENTICAL) { return TRUE; } - UErrorCode status = U_ZERO_ERROR; - int decomplength = unorm_decompose(NULL, -1, + UErrorCode status = U_ZERO_ERROR, status2 = U_ZERO_ERROR; + int32_t decomplength = unorm_decompose(t2, LENGTHOF(t2), strsrch->search->text + start, length, FALSE, 0, &status); - if (decomplength != unorm_decompose(NULL, -1, strsrch->pattern.text, + // use separate status2 in case of buffer overflow + if (decomplength != unorm_decompose(p2, LENGTHOF(p2), + strsrch->pattern.text, strsrch->pattern.textLength, - FALSE, 0, &status)) { - return FALSE; - } - decomplength ++; - UChar *text = (UChar *)uprv_malloc(decomplength * sizeof(UChar)); - UChar *pattern = (UChar *)uprv_malloc(decomplength * sizeof(UChar)); - unorm_decompose(text, decomplength, strsrch->search->text + start, - length, FALSE, 0, &status); - unorm_decompose(pattern, decomplength, strsrch->pattern.text, - strsrch->pattern.textLength, FALSE, 0, &status); - UBool result = (uprv_memcmp(pattern, text, decomplength * sizeof(UChar)) - == 0); - uprv_free(text); - uprv_free(pattern); - return result; + FALSE, 0, &status2)) { + return FALSE; // lengths are different + } + + // compare contents + UChar *text, *pattern; + if(U_SUCCESS(status)) { + text = t2; + pattern = p2; + } else if(status==U_BUFFER_OVERFLOW_ERROR) { + status = U_ZERO_ERROR; + // allocate one buffer for both decompositions + text = (UChar *)uprv_malloc(decomplength * 2 * U_SIZEOF_UCHAR); + pattern = text + decomplength; + unorm_decompose(text, decomplength, strsrch->search->text + start, + length, FALSE, 0, &status); + unorm_decompose(pattern, decomplength, strsrch->pattern.text, + strsrch->pattern.textLength, FALSE, 0, &status); + } else { + // NFD failed, make sure that u_memcmp() does not overrun t2 & p2 + // and that we don't uprv_free() an undefined text pointer + text = pattern = t2; + decomplength = 0; + } + UBool result = (UBool)(u_memcmp(pattern, text, decomplength) == 0); + if(text != t2) { + uprv_free(text); + } + // return FALSE if NFD failed + return U_SUCCESS(status) && result; } /** @@ -2470,11 +2490,13 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator( #endif if (pattern == NULL || text == NULL || collator == NULL) { *status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; } // string search does not really work when numeric collation is turned on if(ucol_getAttribute(collator, UCOL_NUMERIC_COLLATION, status) == UCOL_ON) { *status = U_UNSUPPORTED_ERROR; + return NULL; } if (U_SUCCESS(*status)) { diff --git a/icuSources/i18n/utmscale.c b/icuSources/i18n/utmscale.c index 12ff5794..dd35007b 100644 --- a/icuSources/i18n/utmscale.c +++ b/icuSources/i18n/utmscale.c @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2004, International Business Machines Corporation and +* Copyright (C) 2004-2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -19,103 +19,41 @@ #define hours (minutes * 60) #define days (hours * 24) -#define TIME_SCALE_CHECK(scale,status) \ - if(scale < 0 || scale >= UDTS_MAX_SCALE) { \ - *status = U_ILLEGAL_ARGUMENT_ERROR; \ - return 0; \ - } - -typedef struct -{ - int64_t units; - int64_t epochOffset; - - int64_t fromMin; - int64_t fromMax; - int64_t toMin; - int64_t toMax; - - int64_t epochOffsetP1; - int64_t epochOffsetM1; - int64_t unitsRound; - int64_t minRound; - int64_t maxRound; -} InternalTimeScaleData; - -static const InternalTimeScaleData timeScaleTable[] = { +/* Constants generated by ICU4J com.ibm.icu.dev.tool.timescale.GenerateCTimeScaleData. */ +static const int64_t timeScaleTable[UDTS_MAX_SCALE][UTSV_MAX_SCALE_VALUE] = { /* units epochOffset fromMin fromMax toMin toMax epochOffsetP1 epochOffsetM1 unitsRound minRound maxRound */ - {milliseconds, INT64_C(62135769600000), INT64_C(-984472973285477), INT64_C(860201434085477), INT64_C(-9223372036854774999), INT64_C(9223372036854774999), INT64_C(62135769600001), INT64_C(62135769599999), INT64_C(5000), INT64_C(-9223372036854770808), INT64_C(9223372036854770807)}, - {seconds, INT64_C(62135769600), INT64_C(-984472973285), INT64_C(860201434085), U_INT64_MIN, INT64_C(9223372036854775807), INT64_C(62135769601), INT64_C(62135769599), INT64_C(5000000), INT64_C(-9223372036849775808), INT64_C(9223372036849775807)}, - {milliseconds, INT64_C(62135769600000), INT64_C(-984472973285477), INT64_C(860201434085477), INT64_C(-9223372036854774999), INT64_C(9223372036854774999), INT64_C(62135769600001), INT64_C(62135769599999), INT64_C(5000), INT64_C(-9223372036854770808), INT64_C(9223372036854770807)}, - {ticks, INT64_C(504912960000000000), U_INT64_MIN, INT64_C(8718459076854775807), INT64_C(-8718459076854775808), INT64_C(9223372036854775807), INT64_C(504912960000000000), INT64_C(504912960000000000), INT64_C(0), U_INT64_MIN, INT64_C(9223372036854775807)}, - {ticks, INT64_C(0), U_INT64_MIN, INT64_C(9223372036854775807), U_INT64_MIN, INT64_C(9223372036854775807), INT64_C(0), INT64_C(0), INT64_C(0), U_INT64_MIN, INT64_C(9223372036854775807)}, - {seconds, INT64_C(60052924800), INT64_C(-982390128485), INT64_C(862284278885), U_INT64_MIN, INT64_C(9223372036854775807), INT64_C(60052924801), INT64_C(60052924799), INT64_C(5000000), INT64_C(-9223372036849775808), INT64_C(9223372036849775807)}, - {seconds, INT64_C(63114076800), INT64_C(-985451280485), INT64_C(859223126885), U_INT64_MIN, INT64_C(9223372036854775807), INT64_C(63114076801), INT64_C(63114076799), INT64_C(5000000), INT64_C(-9223372036849775808), INT64_C(9223372036849775807)}, - {days, INT64_C(693596), INT64_C(-11368795), INT64_C(9981603), U_INT64_MIN, INT64_C(9223372036854775807), INT64_C(693597), INT64_C(693595), INT64_C(432000000000), INT64_C(-9223371604854775808), INT64_C(9223371604854775807)}, - {days, INT64_C(693596), INT64_C(-11368795), INT64_C(9981603), U_INT64_MIN, INT64_C(9223372036854775807), INT64_C(693597), INT64_C(693595), INT64_C(432000000000), INT64_C(-9223371604854775808), INT64_C(9223371604854775807)}, + {milliseconds, INT64_C(62135596800000), INT64_C(-984472800485477), INT64_C(860201606885477), INT64_C(-9223372036854774999), INT64_C(9223372036854774999), INT64_C(62135596800001), INT64_C(62135596799999), INT64_C(5000), INT64_C(-9223372036854770808), INT64_C(9223372036854770807)}, + {seconds, INT64_C(62135596800), INT64_C(-984472800485), INT64_C(860201606885), U_INT64_MIN, U_INT64_MAX, INT64_C(62135596801), INT64_C(62135596799), INT64_C(5000000), INT64_C(-9223372036849775808), INT64_C(9223372036849775807)}, + {milliseconds, INT64_C(62135596800000), INT64_C(-984472800485477), INT64_C(860201606885477), INT64_C(-9223372036854774999), INT64_C(9223372036854774999), INT64_C(62135596800001), INT64_C(62135596799999), INT64_C(5000), INT64_C(-9223372036854770808), INT64_C(9223372036854770807)}, + {ticks, INT64_C(504911232000000000), U_INT64_MIN, INT64_C(8718460804854775807), INT64_C(-8718460804854775808), U_INT64_MAX, INT64_C(504911232000000000), INT64_C(504911232000000000), INT64_C(0), U_INT64_MIN, U_INT64_MAX}, + {ticks, INT64_C(0), U_INT64_MIN, U_INT64_MAX, U_INT64_MIN, U_INT64_MAX, INT64_C(0), INT64_C(0), INT64_C(0), U_INT64_MIN, U_INT64_MAX}, + {seconds, INT64_C(60052752000), INT64_C(-982389955685), INT64_C(862284451685), U_INT64_MIN, U_INT64_MAX, INT64_C(60052752001), INT64_C(60052751999), INT64_C(5000000), INT64_C(-9223372036849775808), INT64_C(9223372036849775807)}, + {seconds, INT64_C(63113904000), INT64_C(-985451107685), INT64_C(859223299685), U_INT64_MIN, U_INT64_MAX, INT64_C(63113904001), INT64_C(63113903999), INT64_C(5000000), INT64_C(-9223372036849775808), INT64_C(9223372036849775807)}, + {days, INT64_C(693594), INT64_C(-11368793), INT64_C(9981605), U_INT64_MIN, U_INT64_MAX, INT64_C(693595), INT64_C(693593), INT64_C(432000000000), INT64_C(-9223371604854775808), INT64_C(9223371604854775807)}, + {days, INT64_C(693594), INT64_C(-11368793), INT64_C(9981605), U_INT64_MIN, U_INT64_MAX, INT64_C(693595), INT64_C(693593), INT64_C(432000000000), INT64_C(-9223371604854775808), INT64_C(9223371604854775807)}, }; U_CAPI int64_t U_EXPORT2 utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status) { - const InternalTimeScaleData *internalData; - if (status == NULL || U_FAILURE(*status)) { return 0; } - if (timeScale < 0 || timeScale >= UDTS_MAX_SCALE) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return 0; - } - - internalData = &timeScaleTable[timeScale]; - - switch (value) + if (timeScale < UDTS_JAVA_TIME || UDTS_MAX_SCALE <= timeScale + || value < UTSV_UNITS_VALUE || UTSV_MAX_SCALE_VALUE <= value) { - case UTSV_UNITS_VALUE: - return internalData->units; - - case UTSV_EPOCH_OFFSET_VALUE: - return internalData->epochOffset; - - case UTSV_FROM_MIN_VALUE: - return internalData->fromMin; - - case UTSV_FROM_MAX_VALUE: - return internalData->fromMax; - - case UTSV_TO_MIN_VALUE: - return internalData->toMin; - - case UTSV_TO_MAX_VALUE: - return internalData->toMax; - - case UTSV_EPOCH_OFFSET_PLUS_1_VALUE: - return internalData->epochOffsetP1; - - case UTSV_EPOCH_OFFSET_MINUS_1_VALUE: - return internalData->epochOffsetM1; - - case UTSV_UNITS_ROUND_VALUE: - return internalData->unitsRound; - - case UTSV_MIN_ROUND_VALUE: - return internalData->minRound; - - case UTSV_MAX_ROUND_VALUE: - return internalData->maxRound; - - default: *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } + + return timeScaleTable[timeScale][value]; } U_CAPI int64_t U_EXPORT2 utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status) { - const InternalTimeScaleData *data; + const int64_t *data; if (status == NULL || U_FAILURE(*status)) { return 0; @@ -126,20 +64,20 @@ utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *stat return 0; } - data = &timeScaleTable[timeScale]; + data = (const int64_t *)(&timeScaleTable[timeScale]); - if (otherTime < data->fromMin || otherTime > data->fromMax) { + if (otherTime < data[UTSV_FROM_MIN_VALUE] || otherTime > data[UTSV_FROM_MAX_VALUE]) { *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } - return (otherTime + data->epochOffset) * data->units; + return (otherTime + data[UTSV_EPOCH_OFFSET_VALUE]) * data[UTSV_UNITS_VALUE]; } U_CAPI int64_t U_EXPORT2 utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status) { - const InternalTimeScaleData *data; + const int64_t *data; if (status == NULL || U_FAILURE(*status)) { return 0; @@ -150,26 +88,26 @@ utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *st return 0; } - data = &timeScaleTable[timeScale]; + data = (const int64_t *)(&timeScaleTable[timeScale]); - if (universalTime < data->toMin || universalTime > data->toMax) { + if (universalTime < data[UTSV_TO_MIN_VALUE] || universalTime > data[UTSV_TO_MAX_VALUE]) { *status = U_ILLEGAL_ARGUMENT_ERROR; return 0; } if (universalTime < 0) { - if (universalTime < data->minRound) { - return (universalTime + data->unitsRound) / data->units - data->epochOffsetP1; + if (universalTime < data[UTSV_MIN_ROUND_VALUE]) { + return (universalTime + data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_PLUS_1_VALUE]; } - return (universalTime - data->unitsRound) / data->units - data->epochOffset; + return (universalTime - data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_VALUE]; } - if (universalTime > data->maxRound) { - return (universalTime - data->unitsRound) / data->units - data->epochOffsetM1; + if (universalTime > data[UTSV_MAX_ROUND_VALUE]) { + return (universalTime - data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_MINUS_1_VALUE]; } - return (universalTime + data->unitsRound) / data->units - data->epochOffset; + return (universalTime + data[UTSV_UNITS_ROUND_VALUE]) / data[UTSV_UNITS_VALUE] - data[UTSV_EPOCH_OFFSET_VALUE]; } #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/i18n/utrans.cpp b/icuSources/i18n/utrans.cpp index 3535117a..11da9d79 100644 --- a/icuSources/i18n/utrans.cpp +++ b/icuSources/i18n/utrans.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1997-2004, International Business Machines + * Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * Date Name Description @@ -64,14 +64,14 @@ public: * * @draft ICU 2.2 */ - virtual inline UClassID getDynamicClassID() const; + virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. * * @draft ICU 2.2 */ - static inline UClassID U_EXPORT2 getStaticClassID(); + static UClassID U_EXPORT2 getStaticClassID(); protected: @@ -186,7 +186,7 @@ utrans_open(const char* id, int32_t rulesLength, /* -1 if null-terminated */ UParseError* parseError, /* may be Null */ UErrorCode* status) { - UnicodeString ID(id, ""); // use invariant converter + UnicodeString ID(id, -1, US_INV); // use invariant converter return utrans_openU(ID.getBuffer(), ID.length(), dir, rules, rulesLength, parseError, status); @@ -242,7 +242,7 @@ U_CAPI int32_t U_EXPORT2 utrans_getID(const UTransliterator* trans, char* buf, int32_t bufCapacity) { - return ((Transliterator*) trans)->getID().extract(0, 0x7fffffff, buf, bufCapacity, ""); + return ((Transliterator*) trans)->getID().extract(0, 0x7fffffff, buf, bufCapacity, US_INV); } U_CAPI void U_EXPORT2 @@ -261,7 +261,7 @@ utrans_unregisterID(const UChar* id, int32_t idLength) { U_CAPI void U_EXPORT2 utrans_unregister(const char* id) { - UnicodeString ID(id, ""); // use invariant converter + UnicodeString ID(id, -1, US_INV); // use invariant converter Transliterator::unregister(ID); } @@ -299,7 +299,7 @@ U_CAPI int32_t U_EXPORT2 utrans_getAvailableID(int32_t index, char* buf, // may be NULL int32_t bufCapacity) { - return Transliterator::getAvailableID(index).extract(0, 0x7fffffff, buf, bufCapacity, ""); + return Transliterator::getAvailableID(index).extract(0, 0x7fffffff, buf, bufCapacity, US_INV); } /* Transliterator UEnumeration ---------------------------------------------- */ diff --git a/icuSources/i18n/windtfmt.cpp b/icuSources/i18n/windtfmt.cpp new file mode 100644 index 00000000..19766b1f --- /dev/null +++ b/icuSources/i18n/windtfmt.cpp @@ -0,0 +1,315 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINDTFMT.CPP +* +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/ures.h" +#include "unicode/format.h" +#include "unicode/fmtable.h" +#include "unicode/datefmt.h" +#include "unicode/msgfmt.h" +#include "unicode/calendar.h" +#include "unicode/gregocal.h" +#include "unicode/locid.h" +#include "unicode/unistr.h" +#include "unicode/ustring.h" +#include "unicode/timezone.h" +#include "unicode/utmscale.h" + +#include "cmemory.h" +#include "uresimp.h" +#include "windtfmt.h" +#include "wintz.h" + +# define WIN32_LEAN_AND_MEAN +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +#include <windows.h> + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Win32DateFormat) + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +#define STACK_BUFFER_SIZE 64 + +UnicodeString *getTimeDateFormat(const Calendar *cal, const Locale *locale, UErrorCode &status) +{ + UnicodeString *result = NULL; + const char *type = cal->getType(); + const char *base = locale->getBaseName(); + UResourceBundle *topBundle = ures_open((char *) 0, base, &status); + UResourceBundle *calBundle = ures_getByKey(topBundle, "calendar", NULL, &status); + UResourceBundle *typBundle = ures_getByKeyWithFallback(calBundle, type, NULL, &status); + UResourceBundle *patBundle = ures_getByKeyWithFallback(typBundle, "DateTimePatterns", NULL, &status); + + if (status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + typBundle = ures_getByKeyWithFallback(calBundle, "gregorian", typBundle, &status); + patBundle = ures_getByKeyWithFallback(typBundle, "DateTimePatterns", patBundle, &status); + } + + if (U_FAILURE(status)) { + UChar defaultPattern[] = {0x007B, 0x0031, 0x007D, 0x0020, 0x007B, 0x0030, 0x007D, 0x0000}; // "{1} {0}" + return new UnicodeString(defaultPattern, ARRAY_SIZE(defaultPattern)); + } + + int32_t resStrLen = 0; + const UChar *resStr = ures_getStringByIndex(patBundle, (int32_t)DateFormat::kDateTime, &resStrLen, &status); + + result = new UnicodeString(TRUE, resStr, resStrLen); + + ures_close(patBundle); + ures_close(typBundle); + ures_close(calBundle); + ures_close(topBundle); + + return result; +} + +// TODO: Range-check timeStyle, dateStyle +Win32DateFormat::Win32DateFormat(DateFormat::EStyle timeStyle, DateFormat::EStyle dateStyle, const Locale &locale, UErrorCode &status) + : DateFormat(), fDateTimeMsg(NULL), fTimeStyle(timeStyle), fDateStyle(dateStyle), fLocale(&locale), fZoneID() +{ + if (U_SUCCESS(status)) { + fLCID = locale.getLCID(); + fTZI = NEW_ARRAY(TIME_ZONE_INFORMATION, 1); + uprv_memset(fTZI, 0, sizeof(TIME_ZONE_INFORMATION)); + adoptCalendar(Calendar::createInstance(locale, status)); + } +} + +Win32DateFormat::Win32DateFormat(const Win32DateFormat &other) + : DateFormat(other) +{ + *this = other; +} + +Win32DateFormat::~Win32DateFormat() +{ +// delete fCalendar; + uprv_free(fTZI); + delete fDateTimeMsg; +} + +Win32DateFormat &Win32DateFormat::operator=(const Win32DateFormat &other) +{ + // The following handles fCalendar + DateFormat::operator=(other); + +// delete fCalendar; + + this->fDateTimeMsg = other.fDateTimeMsg; + this->fTimeStyle = other.fTimeStyle; + this->fDateStyle = other.fDateStyle; + this->fLCID = other.fLCID; +// this->fCalendar = other.fCalendar->clone(); + this->fZoneID = other.fZoneID; + + this->fTZI = NEW_ARRAY(TIME_ZONE_INFORMATION, 1); + *this->fTZI = *other.fTZI; + + return *this; +} + +Format *Win32DateFormat::clone(void) const +{ + return new Win32DateFormat(*this); +} + +// TODO: Is just ignoring pos the right thing? +UnicodeString &Win32DateFormat::format(Calendar &cal, UnicodeString &appendTo, FieldPosition &pos) const +{ + FILETIME ft; + SYSTEMTIME st_gmt; + SYSTEMTIME st_local; + TIME_ZONE_INFORMATION tzi = *fTZI; + UErrorCode status = U_ZERO_ERROR; + const TimeZone &tz = cal.getTimeZone(); + int64_t uct, uft; + + setTimeZoneInfo(&tzi, tz); + + uct = utmscale_fromInt64((int64_t) cal.getTime(status), UDTS_ICU4C_TIME, &status); + uft = utmscale_toInt64(uct, UDTS_WINDOWS_FILE_TIME, &status); + + ft.dwLowDateTime = (DWORD) (uft & 0xFFFFFFFF); + ft.dwHighDateTime = (DWORD) ((uft >> 32) & 0xFFFFFFFF); + + FileTimeToSystemTime(&ft, &st_gmt); + SystemTimeToTzSpecificLocalTime(&tzi, &st_gmt, &st_local); + + + if (fDateStyle != DateFormat::kNone && fTimeStyle != DateFormat::kNone) { + UnicodeString *date = new UnicodeString(); + UnicodeString *time = new UnicodeString(); + UnicodeString *pattern = fDateTimeMsg; + Formattable timeDateArray[2]; + + formatDate(&st_local, *date); + formatTime(&st_local, *time); + + timeDateArray[0].adoptString(time); + timeDateArray[1].adoptString(date); + + if (strcmp(fCalendar->getType(), cal.getType()) != 0) { + pattern = getTimeDateFormat(&cal, fLocale, status); + } + + MessageFormat::format(*pattern, timeDateArray, 2, appendTo, status); + } else if (fDateStyle != DateFormat::kNone) { + formatDate(&st_local, appendTo); + } else if (fTimeStyle != DateFormat::kNone) { + formatTime(&st_local, appendTo); + } + + return appendTo; +} + +void Win32DateFormat::parse(const UnicodeString& text, Calendar& cal, ParsePosition& pos) const +{ + pos.setErrorIndex(pos.getIndex()); +} + +void Win32DateFormat::adoptCalendar(Calendar *newCalendar) +{ + if (fCalendar == NULL || strcmp(fCalendar->getType(), newCalendar->getType()) != 0) { + UErrorCode status = U_ZERO_ERROR; + + if (fDateStyle != DateFormat::kNone && fTimeStyle != DateFormat::kNone) { + delete fDateTimeMsg; + fDateTimeMsg = getTimeDateFormat(newCalendar, fLocale, status); + } + } + + delete fCalendar; + fCalendar = newCalendar; + + fZoneID = setTimeZoneInfo(fTZI, fCalendar->getTimeZone()); +} + +void Win32DateFormat::setCalendar(const Calendar &newCalendar) +{ + adoptCalendar(newCalendar.clone()); +} + +void Win32DateFormat::adoptTimeZone(TimeZone *zoneToAdopt) +{ + fZoneID = setTimeZoneInfo(fTZI, *zoneToAdopt); + fCalendar->adoptTimeZone(zoneToAdopt); +} + +void Win32DateFormat::setTimeZone(const TimeZone& zone) +{ + fZoneID = setTimeZoneInfo(fTZI, zone); + fCalendar->setTimeZone(zone); +} + +static const DWORD dfFlags[] = {DATE_LONGDATE, DATE_LONGDATE, DATE_SHORTDATE, DATE_SHORTDATE}; + +void Win32DateFormat::formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) const +{ + int result; + UChar stackBuffer[STACK_BUFFER_SIZE]; + UChar *buffer = stackBuffer; + + result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE); + + if (result == 0) { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0); + + buffer = NEW_ARRAY(UChar, newLength); + GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, newLength); + } + } + + appendTo.append(buffer, (int32_t) wcslen(buffer)); + + if (buffer != stackBuffer) { + DELETE_ARRAY(buffer); + } +} + +static const DWORD tfFlags[] = {0, 0, 0, TIME_NOSECONDS}; + +void Win32DateFormat::formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) const +{ + int result; + UChar stackBuffer[STACK_BUFFER_SIZE]; + UChar *buffer = stackBuffer; + + result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE); + + if (result == 0) { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0); + + buffer = NEW_ARRAY(UChar, newLength); + GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, newLength); + } + } + + appendTo.append(buffer, (int32_t) wcslen(buffer)); + + if (buffer != stackBuffer) { + DELETE_ARRAY(buffer); + } +} + +UnicodeString Win32DateFormat::setTimeZoneInfo(TIME_ZONE_INFORMATION *tzi, const TimeZone &zone) const +{ + UnicodeString zoneID; + + zone.getID(zoneID); + + if (zoneID.compare(fZoneID) != 0) { + UnicodeString icuid; + + zone.getID(icuid); + if (! uprv_getWindowsTimeZoneInfo(tzi, icuid.getBuffer(), icuid.length())) { + UBool found = FALSE; + int32_t ec = TimeZone::countEquivalentIDs(icuid); + + for (int z = 0; z < ec; z += 1) { + UnicodeString equiv = TimeZone::getEquivalentID(icuid, z); + + if (found = uprv_getWindowsTimeZoneInfo(tzi, equiv.getBuffer(), equiv.length())) { + break; + } + } + + if (! found) { + GetTimeZoneInformation(tzi); + } + } + } + + return zoneID; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS + diff --git a/icuSources/i18n/windtfmt.h b/icuSources/i18n/windtfmt.h new file mode 100644 index 00000000..364822d5 --- /dev/null +++ b/icuSources/i18n/windtfmt.h @@ -0,0 +1,148 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINDTFMT.H +* +******************************************************************************** +*/ + +#ifndef __WINDTFMT +#define __WINDTFMT + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/format.h" +#include "unicode/datefmt.h" +#include "unicode/calendar.h" +#include "unicode/ustring.h" +#include "unicode/locid.h" + +/** + * \file + * \brief C++ API: Format dates using Windows API. + */ + +U_CDECL_BEGIN +// Forward declarations for Windows types... +typedef struct _SYSTEMTIME SYSTEMTIME; +typedef struct _TIME_ZONE_INFORMATION TIME_ZONE_INFORMATION; +U_CDECL_END + +U_NAMESPACE_BEGIN + +class Win32DateFormat : public DateFormat +{ +public: + Win32DateFormat(DateFormat::EStyle timeStyle, DateFormat::EStyle dateStyle, const Locale &locale, UErrorCode &status); + + Win32DateFormat(const Win32DateFormat &other); + + virtual ~Win32DateFormat(); + + virtual Format *clone(void) const; + + Win32DateFormat &operator=(const Win32DateFormat &other); + + UnicodeString &format(Calendar &cal, UnicodeString &appendTo, FieldPosition &pos) const; + + UnicodeString& format(UDate date, UnicodeString& appendTo) const; + + void parse(const UnicodeString& text, Calendar& cal, ParsePosition& pos) const; + + /** + * Set the calendar to be used by this date format. Initially, the default + * calendar for the specified or default locale is used. The caller should + * not delete the Calendar object after it is adopted by this call. + * + * @param calendarToAdopt Calendar object to be adopted. + * @draft ICU 3.6 + */ + virtual void adoptCalendar(Calendar* calendarToAdopt); + + /** + * Set the calendar to be used by this date format. Initially, the default + * calendar for the specified or default locale is used. + * + * @param newCalendar Calendar object to be set. + * + * @draft ICU 3.6 + */ + virtual void setCalendar(const Calendar& newCalendar); + + /** + * Sets the time zone for the calendar of this DateFormat object. The caller + * no longer owns the TimeZone object and should not delete it after this call. + * + * @param zoneToAdopt the TimeZone to be adopted. + * + * @draft ICU 3.6 + */ + virtual void adoptTimeZone(TimeZone* zoneToAdopt); + + /** + * Sets the time zone for the calendar of this DateFormat object. + * @param zone the new time zone. + * + * @draft ICU 3.6 + */ + virtual void setTimeZone(const TimeZone& zone); + + /** + * Return the class ID for this class. This is useful only for comparing to + * a return value from getDynamicClassID(). For example: + * <pre> + * . Base* polymorphic_pointer = createPolymorphicObject(); + * . if (polymorphic_pointer->getDynamicClassID() == + * . erived::getStaticClassID()) ... + * </pre> + * @return The class ID for all objects of this class. + * @draft ICU 3.6 + */ + static UClassID U_EXPORT2 getStaticClassID(void); + + /** + * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This + * method is to implement a simple version of RTTI, since not all C++ + * compilers support genuine RTTI. Polymorphic operator==() and clone() + * methods call this method. + * + * @return The class ID for this object. All objects of a + * given class have the same class ID. Objects of + * other classes have different class IDs. + * @draft ICU 3.6 + */ + virtual UClassID getDynamicClassID(void) const; + +private: + void formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) const; + void formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) const; + + UnicodeString setTimeZoneInfo(TIME_ZONE_INFORMATION *tzi, const TimeZone &zone) const; + + UnicodeString *fDateTimeMsg; + DateFormat::EStyle fTimeStyle; + DateFormat::EStyle fDateStyle; + const Locale *fLocale; + int32_t fLCID; + UnicodeString fZoneID; + TIME_ZONE_INFORMATION *fTZI; +}; + +inline UnicodeString &Win32DateFormat::format(UDate date, UnicodeString& appendTo) const { + return DateFormat::format(date, appendTo); +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS + +#endif // __WINDTFMT diff --git a/icuSources/i18n/winnmfmt.cpp b/icuSources/i18n/winnmfmt.cpp new file mode 100644 index 00000000..32b1cd7c --- /dev/null +++ b/icuSources/i18n/winnmfmt.cpp @@ -0,0 +1,345 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINNMFMT.CPP +* +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +#include "winnmfmt.h" + +#include "unicode/format.h" +#include "unicode/numfmt.h" +#include "unicode/locid.h" +#include "unicode/ustring.h" + +#include "cmemory.h" +#include "uassert.h" +#include "locmap.h" + +# define WIN32_LEAN_AND_MEAN +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +#include <windows.h> +#include <stdio.h> + +U_NAMESPACE_BEGIN + +union FormatInfo +{ + NUMBERFMTW number; + CURRENCYFMTW currency; +}; + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Win32NumberFormat) + +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +#define STACK_BUFFER_SIZE 32 + +/* + * Turns a string of the form "3;2;0" into the grouping UINT + * needed for NUMBERFMT and CURRENCYFMT. If the string does not + * end in ";0" then the return value should be multiplied by 10. + * (e.g. "3" => 30, "3;2" => 320) + */ +static UINT getGrouping(const char *grouping) +{ + UINT g = 0; + const char *s; + + for (s = grouping; *s != '\0'; s += 1) { + if (*s > '0' && *s < '9') { + g = g * 10 + (*s - '0'); + } else if (*s != ';') { + break; + } + } + + if (*s != '0') { + g *= 10; + } + + return g; +} + +static void getNumberFormat(NUMBERFMTW *fmt, int32_t lcid) +{ + char buf[10]; + + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_IDIGITS, (LPWSTR) &fmt->NumDigits, sizeof(UINT)); + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ILZERO, (LPWSTR) &fmt->LeadingZero, sizeof(UINT)); + + GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10); + fmt->Grouping = getGrouping(buf); + + fmt->lpDecimalSep = NEW_ARRAY(UChar, 6); + GetLocaleInfoW(lcid, LOCALE_SDECIMAL, fmt->lpDecimalSep, 6); + + fmt->lpThousandSep = NEW_ARRAY(UChar, 6); + GetLocaleInfoW(lcid, LOCALE_STHOUSAND, fmt->lpThousandSep, 6); + + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT)); +} + +static void freeNumberFormat(NUMBERFMTW *fmt) +{ + DELETE_ARRAY(fmt->lpThousandSep); + DELETE_ARRAY(fmt->lpDecimalSep); +} + +static void getCurrencyFormat(CURRENCYFMTW *fmt, int32_t lcid) +{ + char buf[10]; + + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRDIGITS, (LPWSTR) &fmt->NumDigits, sizeof(UINT)); + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ILZERO, (LPWSTR) &fmt->LeadingZero, sizeof(UINT)); + + GetLocaleInfoA(lcid, LOCALE_SMONGROUPING, buf, sizeof(buf)); + fmt->Grouping = getGrouping(buf); + + fmt->lpDecimalSep = NEW_ARRAY(UChar, 6); + GetLocaleInfoW(lcid, LOCALE_SMONDECIMALSEP, fmt->lpDecimalSep, 6); + + fmt->lpThousandSep = NEW_ARRAY(UChar, 6); + GetLocaleInfoW(lcid, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6); + + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT)); + GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT)); + + fmt->lpCurrencySymbol = NEW_ARRAY(UChar, 8); + GetLocaleInfoW(lcid, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8); +} + +static void freeCurrencyFormat(CURRENCYFMTW *fmt) +{ + DELETE_ARRAY(fmt->lpCurrencySymbol); + DELETE_ARRAY(fmt->lpThousandSep); + DELETE_ARRAY(fmt->lpDecimalSep); +} + +// TODO: keep locale too? +Win32NumberFormat::Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status) + : NumberFormat(), fCurrency(currency), fFractionDigitsSet(FALSE) +{ + if (!U_FAILURE(status)) { + fLCID = locale.getLCID(); + + fFormatInfo = (FormatInfo*)uprv_malloc(sizeof(FormatInfo)); + + if (fCurrency) { + getCurrencyFormat(&fFormatInfo->currency, fLCID); + } else { + getNumberFormat(&fFormatInfo->number, fLCID); + } + } +} + +Win32NumberFormat::Win32NumberFormat(const Win32NumberFormat &other) + : NumberFormat(other) +{ + *this = other; +} + +Win32NumberFormat::~Win32NumberFormat() +{ + if (fCurrency) { + freeCurrencyFormat(&fFormatInfo->currency); + } else { + freeNumberFormat(&fFormatInfo->number); + } + + uprv_free(fFormatInfo); +} + +Win32NumberFormat &Win32NumberFormat::operator=(const Win32NumberFormat &other) +{ + NumberFormat::operator=(other); + + this->fCurrency = other.fCurrency; + this->fLCID = other.fLCID; + this->fFractionDigitsSet = other.fFractionDigitsSet; + + if (fCurrency) { + freeCurrencyFormat(&fFormatInfo->currency); + getCurrencyFormat(&fFormatInfo->currency, fLCID); + } else { + freeNumberFormat(&fFormatInfo->number); + getNumberFormat(&fFormatInfo->number, fLCID); + } + + return *this; +} + +Format *Win32NumberFormat::clone(void) const +{ + return new Win32NumberFormat(*this); +} + +UnicodeString& Win32NumberFormat::format(double number, UnicodeString& appendTo, FieldPosition& pos) const +{ + return format(getMaximumFractionDigits(), appendTo, L"%.16f", number); +} + +UnicodeString& Win32NumberFormat::format(int32_t number, UnicodeString& appendTo, FieldPosition& pos) const +{ + return format(getMinimumFractionDigits(), appendTo, L"%I32d", number); +} + +UnicodeString& Win32NumberFormat::format(int64_t number, UnicodeString& appendTo, FieldPosition& pos) const +{ + return format(getMinimumFractionDigits(), appendTo, L"%I64d", number); +} + +// TODO: cache Locale and NumberFormat? Could keep locale passed to constructor... +void Win32NumberFormat::parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const +{ + UErrorCode status = U_ZERO_ERROR; + Locale loc(uprv_convertToPosix(fLCID, &status)); + NumberFormat *nf = fCurrency? NumberFormat::createCurrencyInstance(loc, status) : NumberFormat::createInstance(loc, status); + + nf->parse(text, result, parsePosition); + delete nf; +} +void Win32NumberFormat::setMaximumFractionDigits(int32_t newValue) +{ + fFractionDigitsSet = TRUE; + NumberFormat::setMaximumFractionDigits(newValue); +} + +void Win32NumberFormat::setMinimumFractionDigits(int32_t newValue) +{ + fFractionDigitsSet = TRUE; + NumberFormat::setMinimumFractionDigits(newValue); +} + +UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appendTo, wchar_t *fmt, ...) const +{ + wchar_t nStackBuffer[STACK_BUFFER_SIZE]; + wchar_t *nBuffer = nStackBuffer; + va_list args; + int result; + + nBuffer[0] = 0x0000; + + /* Due to the arguments causing a result to be <= 23 characters (+2 for NULL and minus), + we don't need to reallocate the buffer. */ + va_start(args, fmt); + result = _vsnwprintf(nBuffer, STACK_BUFFER_SIZE, fmt, args); + va_end(args); + + /* Just to make sure of the above statement, we add this assert */ + U_ASSERT(result >=0); + // The following code is not used because _vscwprintf isn't available on MinGW at the moment. + /*if (result < 0) { + int newLength; + + va_start(args, fmt); + newLength = _vscwprintf(fmt, args); + va_end(args); + + nBuffer = NEW_ARRAY(UChar, newLength + 1); + + va_start(args, fmt); + result = _vsnwprintf(nBuffer, newLength + 1, fmt, args); + va_end(args); + }*/ + + // vswprintf is sensitive to the locale set by setlocale. For some locales + // it doesn't use "." as the decimal separator, which is what GetNumberFormatW + // and GetCurrencyFormatW both expect to see. + // + // To fix this, we scan over the string and replace the first non-digits, except + // for a leading "-", with a "." + // + // Note: (nBuffer[0] == L'-') will evaluate to 1 if there is a leading '-' in the + // number, and 0 otherwise. + for (wchar_t *p = &nBuffer[nBuffer[0] == L'-']; *p != L'\0'; p += 1) { + if (*p < L'0' || *p > L'9') { + *p = L'.'; + break; + } + } + + UChar stackBuffer[STACK_BUFFER_SIZE]; + UChar *buffer = stackBuffer; + FormatInfo formatInfo; + + formatInfo = *fFormatInfo; + buffer[0] = 0x0000; + + if (fCurrency) { + if (fFractionDigitsSet) { + formatInfo.currency.NumDigits = (UINT) numDigits; + } + + if (!isGroupingUsed()) { + formatInfo.currency.Grouping = 0; + } + + result = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, STACK_BUFFER_SIZE); + + if (result == 0) { + DWORD lastError = GetLastError(); + + if (lastError == ERROR_INSUFFICIENT_BUFFER) { + int newLength = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, NULL, 0); + + buffer = NEW_ARRAY(UChar, newLength); + buffer[0] = 0x0000; + GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, newLength); + } + } + } else { + if (fFractionDigitsSet) { + formatInfo.number.NumDigits = (UINT) numDigits; + } + + if (!isGroupingUsed()) { + formatInfo.number.Grouping = 0; + } + + result = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, STACK_BUFFER_SIZE); + + if (result == 0) { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + int newLength = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, NULL, 0); + + buffer = NEW_ARRAY(UChar, newLength); + buffer[0] = 0x0000; + GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, newLength); + } + } + } + + appendTo.append(buffer, (int32_t) wcslen(buffer)); + + if (buffer != stackBuffer) { + DELETE_ARRAY(buffer); + } + + /*if (nBuffer != nStackBuffer) { + DELETE_ARRAY(nBuffer); + }*/ + + return appendTo; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS diff --git a/icuSources/i18n/winnmfmt.h b/icuSources/i18n/winnmfmt.h new file mode 100644 index 00000000..b67c0669 --- /dev/null +++ b/icuSources/i18n/winnmfmt.h @@ -0,0 +1,168 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINNMFMT.H +* +******************************************************************************** +*/ + +#ifndef __WINNMFMT +#define __WINNMFMT + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#include "unicode/format.h" +#include "unicode/datefmt.h" +#include "unicode/calendar.h" +#include "unicode/ustring.h" +#include "unicode/locid.h" + +#if !UCONFIG_NO_FORMATTING + +/** + * \file + * \brief C++ API: Format numbers using Windows API. + */ + +U_NAMESPACE_BEGIN + +union FormatInfo; + +class Win32NumberFormat : public NumberFormat +{ +public: + Win32NumberFormat(const Locale &locale, UBool currency, UErrorCode &status); + + Win32NumberFormat(const Win32NumberFormat &other); + + virtual ~Win32NumberFormat(); + + virtual Format *clone(void) const; + + Win32NumberFormat &operator=(const Win32NumberFormat &other); + + /** + * Format a double number. Concrete subclasses must implement + * these pure virtual methods. + * + * @param number The value to be formatted. + * @param appendTo Output parameter to receive result. + * Result is appended to existing contents. + * @param pos On input: an alignment field, if desired. + * On output: the offsets of the alignment field. + * @return Reference to 'appendTo' parameter. + * @draft ICU 3.6 + */ + virtual UnicodeString& format(double number, + UnicodeString& appendTo, + FieldPosition& pos) const; + /** + * Format a long number. Concrete subclasses must implement + * these pure virtual methods. + * + * @param number The value to be formatted. + * @param appendTo Output parameter to receive result. + * Result is appended to existing contents. + * @param pos On input: an alignment field, if desired. + * On output: the offsets of the alignment field. + * @return Reference to 'appendTo' parameter. + * @draft ICU 3.6 + */ + virtual UnicodeString& format(int32_t number, + UnicodeString& appendTo, + FieldPosition& pos) const; + + /** + * Format an int64 number. + * + * @param number The value to be formatted. + * @param appendTo Output parameter to receive result. + * Result is appended to existing contents. + * @param pos On input: an alignment field, if desired. + * On output: the offsets of the alignment field. + * @return Reference to 'appendTo' parameter. + * @draft ICU 3.6 + */ + virtual UnicodeString& format(int64_t number, + UnicodeString& appendTo, + FieldPosition& pos) const; + +// Use the default behavior for the following. +// virtual UnicodeString &format(double number, UnicodeString &appendTo) const; +// virtual UnicodeString &format(int32_t number, UnicodeString &appendTo) const; +// virtual UnicodeString &format(int64_t number, UnicodeString &appendTo) const; + + virtual void parse(const UnicodeString& text, Formattable& result, ParsePosition& parsePosition) const; + + /** + * Sets the maximum number of digits allowed in the fraction portion of a + * number. maximumFractionDigits must be >= minimumFractionDigits. If the + * new value for maximumFractionDigits is less than the current value + * of minimumFractionDigits, then minimumFractionDigits will also be set to + * the new value. + * @param newValue the new value to be set. + * @see getMaximumFractionDigits + * @draft ICU 3.6 + */ + virtual void setMaximumFractionDigits(int32_t newValue); + + /** + * Sets the minimum number of digits allowed in the fraction portion of a + * number. minimumFractionDigits must be <= maximumFractionDigits. If the + * new value for minimumFractionDigits exceeds the current value + * of maximumFractionDigits, then maximumIntegerDigits will also be set to + * the new value + * @param newValue the new value to be set. + * @see getMinimumFractionDigits + * @draft ICU 3.6 + */ + virtual void setMinimumFractionDigits(int32_t newValue); + + /** + * Return the class ID for this class. This is useful only for comparing to + * a return value from getDynamicClassID(). For example: + * <pre> + * . Base* polymorphic_pointer = createPolymorphicObject(); + * . if (polymorphic_pointer->getDynamicClassID() == + * . erived::getStaticClassID()) ... + * </pre> + * @return The class ID for all objects of this class. + * @stable ICU 2.0 + */ + static UClassID U_EXPORT2 getStaticClassID(void); + + /** + * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This + * method is to implement a simple version of RTTI, since not all C++ + * compilers support genuine RTTI. Polymorphic operator==() and clone() + * methods call this method. + * + * @return The class ID for this object. All objects of a + * given class have the same class ID. Objects of + * other classes have different class IDs. + * @stable ICU 2.0 + */ + virtual UClassID getDynamicClassID(void) const; + +private: + UnicodeString &format(int32_t numDigits, UnicodeString &appendTo, wchar_t *format, ...) const; + + UBool fCurrency; + int32_t fLCID; + FormatInfo *fFormatInfo; + UBool fFractionDigitsSet; + +}; + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS + +#endif // __WINNMFMT diff --git a/icuSources/icudefs.mk.in b/icuSources/icudefs.mk.in index 331c8363..674780bb 100644 --- a/icuSources/icudefs.mk.in +++ b/icuSources/icudefs.mk.in @@ -3,7 +3,7 @@ # # Yves Arrouye. # -# Copyright (C) 2000-2004, International Business Machines Corporation and others. +# Copyright (C) 2000-2005, International Business Machines Corporation and others. # All Rights Reserved. # @@ -44,7 +44,8 @@ ICUDATA_DIR = @pkgicudatadir@/$(PACKAGE)$(ICULIBSUFFIX)/$(VERSION) ICUDATA_BASENAME_VERSION = $(ICUPREFIX)dt@LIB_VERSION_MAJOR@ ICUDATA_ENTRY_POINT = $(ICUDATA_BASENAME_VERSION) -ICUDATA_PLATFORM_NAME = $(ICUDATA_BASENAME_VERSION)@ICUDATA_CHAR@ +ICUDATA_CHAR = @ICUDATA_CHAR@ +ICUDATA_PLATFORM_NAME = $(ICUDATA_BASENAME_VERSION)$(ICUDATA_CHAR) PKGDATA_LIBSTATICNAME = -L $(STATIC_PREFIX)$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX) ifeq ($(strip $(PKGDATA_MODE)),) PKGDATA_MODE=@DATA_PACKAGING_MODE@ @@ -154,6 +155,7 @@ LDLIBRARYPATH_ENVVAR = LD_LIBRARY_PATH # Versioned target for a shared library. FINAL_SO_TARGET = $(SO_TARGET).$(SO_TARGET_VERSION) MIDDLE_SO_TARGET = $(SO_TARGET).$(SO_TARGET_VERSION_MAJOR) +SHARED_OBJECT = $(FINAL_SO_TARGET) ## How ICU libraries are named... ex. $(LIBICU)uc$(SO) # Prefix for the ICU library names @@ -172,6 +174,7 @@ endif STATIC_PREFIX = s LIBSICU = $(LIBPREFIX)$(STATIC_PREFIX)$(ICUPREFIX) A = a +SOBJ = $(SO) # Force removal [for make clean] RMV = rm -rf @@ -215,7 +218,7 @@ LIBICUTOOLUTIL= -L$(LIBDIR) -l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(TOOLUTIL_S LIBICUIO= -L$(LIBDIR) -l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(SO_TARGET_VERSION_SUFFIX) # Invoke, set library path for all ICU libraries. -INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(LIBDIR):$(top_builddir)/stubdata:$(top_builddir)/tools/ctestfw:$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER) +INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(LIBRARY_PATH_PREFIX)$(LIBDIR):$(top_builddir)/stubdata:$(top_builddir)/tools/ctestfw:$$$(LDLIBRARYPATH_ENVVAR) $(LEAK_CHECKER) # Platform-specific setup include @platform_make_fragment@ diff --git a/icuSources/io/Makefile.in b/icuSources/io/Makefile.in index 5f7a42aa..6f470eee 100644 --- a/icuSources/io/Makefile.in +++ b/icuSources/io/Makefile.in @@ -1,10 +1,10 @@ #****************************************************************************** # -# Copyright (C) 1999-2004, International Business Machines +# Copyright (C) 1999-2006, International Business Machines # Corporation and others. All Rights Reserved. # #****************************************************************************** -## Makefile.in for ICU - io/libustdio.so +## Makefile.in for ICU - icuio.so ## Stephen F. Booth ## Source directory information @@ -32,18 +32,18 @@ endif ifneq ($(ENABLE_SHARED),) SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) ifeq ($(ENABLE_SO_VERSION_DATA),1) SO_VERSION_DATA = io.res endif ifeq ($(OS390BATCH),1) -BATCH_TARGET = $(BATCH_ICUIO_TARGET) +BATCH_TARGET = $(BATCH_IO_TARGET) BATCH_LIBS = $(BATCH_LIBICUUC) $(BATCH_LIBICUI18N) -lm endif # OS390BATCH -endif +endif # ENABLE_SHARED ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET) @@ -51,24 +51,31 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) -LDFLAGS += $(LDFLAGSICUIO) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n $(LIBCPPFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n $(LIBCPPFLAGS) DEFS += -DU_IO_IMPLEMENTATION +LDFLAGS += $(LDFLAGSICUIO) LIBS = $(LIBICUUC) $(LIBICUI18N) $(DEFAULT_LIBS) OBJECTS = locbund.o ufile.o ufmt_cmn.o uprintf.o uprntf_p.o \ uscanf.o uscanf_p.o ustdio.o sprintf.o sscanf.o \ -ustream.o - -STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) +ustream.o ucln_io.o +## Header files to install HEADERS = $(srcdir)/unicode/*.h +STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) + DEPS = $(OBJECTS:.o=.d) +-include Makefile.local + ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check check-local +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local install-library install-headers dist \ +dist-local check check-local ## Clear suffix list .SUFFIXES : @@ -83,7 +90,7 @@ check: all check-local all-local: $(ALL_TARGETS) -install-local: all-local install-headers install-library +install-local: install-headers install-library install-library: all-local $(MKINSTALLDIRS) $(DESTDIR)$(libdir) @@ -116,7 +123,6 @@ install-headers: $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode || exit; \ done - dist-local: clean-local: @@ -138,15 +144,14 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) $(SO_VERSION_DATA) +$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) ifeq ($(OS390BATCH),1) -$(BATCH_TARGET): $(OBJECTS) +$(BATCH_TARGET):$(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS) -endif # OS390BATCH - -endif +endif # OS390BATCH +endif # ENABLE_SHARED ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -155,3 +160,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/io/io.dsp b/icuSources/io/io.dsp deleted file mode 100644 index 4dc7c965..00000000 --- a/icuSources/io/io.dsp +++ /dev/null @@ -1,336 +0,0 @@ -# Microsoft Developer Studio Project File - Name="io" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=io - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "io.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "io.mak" CFG="io - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "io - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "io - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "io - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "io - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "io - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\include" /I "..\common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /D "U_IO_IMPLEMENTATION" /FD /GF /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /dll /machine:I386 /out:"..\..\bin\icuio32.dll" /implib:"..\..\lib/icuio.lib" /libpath:"..\..\lib\\" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "io - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /D "U_IO_IMPLEMENTATION" /FR /FD /GF /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /dll /debug /machine:I386 /out:"..\..\bin\icuio32d.dll" /implib:"..\..\lib\icuiod.lib" /pdbtype:sept /libpath:"debug" /libpath:"..\..\lib\\" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "io - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\include" /I "..\common" /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /D "U_IO_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GF /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icuin.lib /nologo /dll /machine:IX86 /out:"..\..\bin\icuio32.dll" /implib:"..\..\lib/icuio.lib" /libpath:"..\..\lib\\" /machine:IA64 - -!ELSEIF "$(CFG)" == "io - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\include" /I "..\common" /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IO_EXPORTS" /D "U_IO_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GF /GZ /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icuind.lib /nologo /dll /incremental:no /debug /machine:IX86 /out:"..\..\bin\icuio32d.dll" /implib:"..\..\lib\icuiod.lib" /pdbtype:sept /libpath:"debug" /libpath:"..\..\lib\\" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "io - Win32 Release" -# Name "io - Win32 Debug" -# Name "io - Win64 Release" -# Name "io - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\locbund.c -# End Source File -# Begin Source File - -SOURCE=.\sprintf.c -# End Source File -# Begin Source File - -SOURCE=.\sscanf.c -# End Source File -# Begin Source File - -SOURCE=.\ufile.c -# End Source File -# Begin Source File - -SOURCE=.\ufmt_cmn.c -# End Source File -# Begin Source File - -SOURCE=.\uprintf.c -# End Source File -# Begin Source File - -SOURCE=.\uprntf_p.c -# End Source File -# Begin Source File - -SOURCE=.\uscanf.c -# End Source File -# Begin Source File - -SOURCE=.\uscanf_p.c -# End Source File -# Begin Source File - -SOURCE=.\ustdio.c -# End Source File -# Begin Source File - -SOURCE=.\ustream.cpp -# ADD CPP /Ze -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\locbund.h -# End Source File -# Begin Source File - -SOURCE=.\sprintf.h -# End Source File -# Begin Source File - -SOURCE=.\ufile.h -# End Source File -# Begin Source File - -SOURCE=.\ufmt_cmn.h -# End Source File -# Begin Source File - -SOURCE=.\uprintf.h -# End Source File -# Begin Source File - -SOURCE=.\uprntf_p.h -# End Source File -# Begin Source File - -SOURCE=.\uscanf.h -# End Source File -# Begin Source File - -SOURCE=.\uscanf_p.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\ustdio.h - -!IF "$(CFG)" == "io - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ustdio.h - -"..\..\include\unicode\ustdio.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "io - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ustdio.h - -"..\..\include\unicode\ustdio.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "io - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ustdio.h - -"..\..\include\unicode\ustdio.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "io - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ustdio.h - -"..\..\include\unicode\ustdio.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\unicode\ustream.h - -!IF "$(CFG)" == "io - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\ustream.h - -"..\..\include\unicode\ustream.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "io - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\ustream.h - -"..\..\include\unicode\ustream.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "io - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\ustream.h - -"..\..\include\unicode\ustream.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "io - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\ustream.h - -"..\..\include\unicode\ustream.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\io.rc -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/io/io.rc b/icuSources/io/io.rc index a2064930..c088e196 100644 --- a/icuSources/io/io.rc +++ b/icuSources/io/io.rc @@ -1,7 +1,7 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. -// Copyright (c) 2001-2004 International Business Machines +// Copyright (c) 2001-2005 International Business Machines // Corporation and others. All Rights Reserved. // #include "../common/msvcres.h" @@ -54,8 +54,8 @@ END #define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 + FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM + PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,10 +70,10 @@ BEGIN BEGIN BLOCK "00000000" BEGIN - VALUE "Comments", "http://oss.software.ibm.com/icu/\0" + VALUE "Comments", ICU_WEBSITE "\0" VALUE "CompanyName", "IBM Corporation and others\0" VALUE "FileDescription", "IBM ICU I/O DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" #ifdef _DEBUG VALUE "OriginalFilename", "icuio" U_ICU_VERSION_SHORT "d.dll\0") @@ -82,7 +82,7 @@ BEGIN #endif VALUE "PrivateBuild", "\0" VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "SpecialBuild", "\0" END END diff --git a/icuSources/io/io.vcproj b/icuSources/io/io.vcproj index d7a576f1..afc6a66e 100644 --- a/icuSources/io/io.vcproj +++ b/icuSources/io/io.vcproj @@ -20,15 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;U_IO_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;NDEBUG;U_IO_IMPLEMENTATION" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/icuio.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -41,10 +40,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\icuio32.dll" + OutputFile="..\..\bin\icuio36.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" - ProgramDatabaseFile=".\..\..\lib\icuio32.pdb" + ProgramDatabaseFile=".\..\..\lib\icuio36.pdb" + EnableCOMDATFolding="2" BaseAddress="0x4ab00000" ImportLibrary="..\..\lib\icuio.lib"/> <Tool @@ -88,13 +88,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;U_IO_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;_DEBUG;U_IO_IMPLEMENTATION" BasicRuntimeChecks="3" RuntimeLibrary="3" BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/icuio.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -108,11 +108,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\icuio32d.dll" + OutputFile="..\..\bin\icuio36d.dll" LinkIncremental="2" SuppressStartupBanner="TRUE" GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\..\..\lib\icuio32d.pdb" + ProgramDatabaseFile=".\..\..\lib\icuio36d.pdb" BaseAddress="0x4ab00000" ImportLibrary="..\..\lib\icuiod.lib"/> <Tool @@ -160,6 +160,9 @@ <File RelativePath=".\sscanf.c"> </File> + <File + RelativePath=".\ucln_io.c"> + </File> <File RelativePath=".\ufile.c"> </File> @@ -203,6 +206,9 @@ <File RelativePath=".\locbund.h"> </File> + <File + RelativePath=".\ucln_io.h"> + </File> <File RelativePath=".\ufile.h"> </File> diff --git a/icuSources/io/locbund.c b/icuSources/io/locbund.c index 3d0f9cf5..fd493584 100644 --- a/icuSources/io/locbund.c +++ b/icuSources/io/locbund.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -12,12 +12,10 @@ * * Date Name Description * 11/18/98 stephen Creation. -* 12/10/1999 bobbyr@optiosoftware.com Fix for memory leak + string allocation bugs +* 12/10/1999 bobbyr(at)optiosoftware.com Fix for memory leak + string allocation bugs ******************************************************************************* */ -#include <stdlib.h> - #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING @@ -25,9 +23,52 @@ #include "locbund.h" #include "cmemory.h" +#include "cstring.h" +#include "ucln_io.h" +#include "umutex.h" #include "unicode/ustring.h" #include "unicode/uloc.h" +static UBool isFormatsInitialized = FALSE; +static UNumberFormat *gPosixNumberFormat[ULOCALEBUNDLE_NUMBERFORMAT_COUNT]; + +U_CDECL_BEGIN +static UBool U_CALLCONV locbund_cleanup(void) { + int32_t style; + for (style = 0; style < ULOCALEBUNDLE_NUMBERFORMAT_COUNT; style++) { + unum_close(gPosixNumberFormat[style]); + gPosixNumberFormat[style] = NULL; + } + isFormatsInitialized = FALSE; + return TRUE; +} +U_CDECL_END + + +static U_INLINE UNumberFormat * copyInvariantFormatter(ULocaleBundle *result, UNumberFormatStyle style) { + if (result->fNumberFormat[style-1] == NULL) { + UErrorCode status = U_ZERO_ERROR; + UBool needsInit; + + UMTX_CHECK(NULL, gPosixNumberFormat[style-1] == NULL, needsInit); + if (needsInit) { + UNumberFormat *formatAlias = unum_open(style, NULL, 0, "en_US_POSIX", NULL, &status); + + /* Cache upon first request. */ + if (U_SUCCESS(status)) { + umtx_lock(NULL); + gPosixNumberFormat[style-1] = formatAlias; + ucln_io_registerCleanup(UCLN_IO_LOCBUND, locbund_cleanup); + umtx_unlock(NULL); + } + } + + /* Copy the needed formatter. */ + result->fNumberFormat[style-1] = unum_clone(gPosixNumberFormat[style-1], &status); + } + return result->fNumberFormat[style-1]; +} + ULocaleBundle* u_locbund_init(ULocaleBundle *result, const char *loc) { @@ -39,7 +80,7 @@ u_locbund_init(ULocaleBundle *result, const char *loc) if (loc == NULL) { loc = uloc_getDefault(); } - + uprv_memset(result, 0, sizeof(ULocaleBundle)); len = (int32_t)strlen(loc); @@ -47,9 +88,11 @@ u_locbund_init(ULocaleBundle *result, const char *loc) if(result->fLocale == 0) { return 0; } - - strcpy(result->fLocale, loc); - + + uprv_strcpy(result->fLocale, loc); + + result->isInvariantLocale = uprv_strcmp(result->fLocale, "en_US_POSIX") == 0; + return result; } @@ -122,14 +165,19 @@ u_locbund_getNumberFormat(ULocaleBundle *bundle, UNumberFormatStyle style) if (style >= UNUM_IGNORE) { formatAlias = bundle->fNumberFormat[style-1]; if (formatAlias == NULL) { - UErrorCode status = U_ZERO_ERROR; - formatAlias = unum_open(style, NULL, 0, bundle->fLocale, NULL, &status); - if (U_FAILURE(status)) { - unum_close(formatAlias); - formatAlias = NULL; + if (bundle->isInvariantLocale) { + formatAlias = copyInvariantFormatter(bundle, style); } else { - bundle->fNumberFormat[style-1] = formatAlias; + UErrorCode status = U_ZERO_ERROR; + formatAlias = unum_open(style, NULL, 0, bundle->fLocale, NULL, &status); + if (U_FAILURE(status)) { + unum_close(formatAlias); + formatAlias = NULL; + } + else { + bundle->fNumberFormat[style-1] = formatAlias; + } } } } diff --git a/icuSources/io/locbund.h b/icuSources/io/locbund.h index 5ec24edf..f4ff449b 100644 --- a/icuSources/io/locbund.h +++ b/icuSources/io/locbund.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006s, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -31,6 +31,7 @@ typedef struct ULocaleBundle { char *fLocale; UNumberFormat *fNumberFormat[ULOCALEBUNDLE_NUMBERFORMAT_COUNT]; + UBool isInvariantLocale; } ULocaleBundle; diff --git a/icuSources/io/ucln_io.c b/icuSources/io/ucln_io.c new file mode 100644 index 00000000..01a88e81 --- /dev/null +++ b/icuSources/io/ucln_io.c @@ -0,0 +1,51 @@ +/* +****************************************************************************** +* * +* Copyright (C) 2001-2006, International Business Machines * +* Corporation and others. All Rights Reserved. * +* * +****************************************************************************** +* file name: ucln_io.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2006August11 +* created by: George Rhoten +*/ + +#include "ucln.h" +#include "ucln_io.h" +#include "umutex.h" +#include "uassert.h" + +/* Leave this copyright notice here! It needs to go somewhere in this library. */ +static const char copyright[] = U_COPYRIGHT_STRING; + +static cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT]; + +static UBool io_cleanup(void) +{ + ECleanupIOType libType = UCLN_IO_START; + + while (++libType<UCLN_IO_COUNT) { + if (gCleanupFunctions[libType]) + { + gCleanupFunctions[libType](); + gCleanupFunctions[libType] = NULL; + } + } + return TRUE; +} + +void ucln_io_registerCleanup(ECleanupIOType type, + cleanupFunc *func) +{ + U_ASSERT(UCLN_IO_START < type && type < UCLN_IO_COUNT); + ucln_registerCleanup(UCLN_IO, io_cleanup); + if (UCLN_IO_START < type && type < UCLN_IO_COUNT) + { + gCleanupFunctions[type] = func; + } +} + diff --git a/icuSources/io/ucln_io.h b/icuSources/io/ucln_io.h new file mode 100644 index 00000000..e26c1b68 --- /dev/null +++ b/icuSources/io/ucln_io.h @@ -0,0 +1,37 @@ +/* +****************************************************************************** +* * +* Copyright (C) 2001-2006, International Business Machines * +* Corporation and others. All Rights Reserved. * +* * +****************************************************************************** +* file name: ucln_io.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2006August11 +* created by: George Rhoten +*/ + +#ifndef __UCLN_IO_H__ +#define __UCLN_IO_H__ + +#include "unicode/utypes.h" +#include "ucln.h" + +/* +Please keep the order of enums declared in same order +as the functions are suppose to be called. */ +typedef enum ECleanupIOType { + UCLN_IO_START = -1, + UCLN_IO_LOCBUND, + UCLN_IO_COUNT /* This must be last */ +} ECleanupIOType; + +/* Main library cleanup registration function. */ +/* See common/ucln.h for details on adding a cleanup function. */ +U_CFUNC void U_EXPORT2 ucln_io_registerCleanup(ECleanupIOType type, + cleanupFunc *func); + +#endif diff --git a/icuSources/io/ufile.c b/icuSources/io/ufile.c index c1870ecb..4afabf5b 100644 --- a/icuSources/io/ufile.c +++ b/icuSources/io/ufile.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -20,8 +20,13 @@ /* define for fileno. */ #ifndef _XOPEN_SOURCE +#if __STDC_VERSION__ >= 199901L +/* It is invalid to compile an XPG3, XPG4, XPG4v2 or XPG5 application using c99 */ +#define _XOPEN_SOURCE 600 +#else #define _XOPEN_SOURCE 4 #endif +#endif #include "locmap.h" #include "unicode/ustdio.h" @@ -32,7 +37,7 @@ #include "cstring.h" #include "cmemory.h" -#ifdef WIN32 +#if defined(U_WINDOWS) && !defined(fileno) /* Windows likes to rename Unix-like functions */ #define fileno _fileno #endif @@ -42,19 +47,27 @@ u_finit(FILE *f, const char *locale, const char *codepage) { - UErrorCode status = U_ZERO_ERROR; - UFILE *result = (UFILE*) uprv_malloc(sizeof(UFILE)); - if(result == NULL || f == NULL) { + UErrorCode status = U_ZERO_ERROR; + UFILE *result; + if(f == NULL) { + return 0; + } + result = (UFILE*) uprv_malloc(sizeof(UFILE)); + if(result == NULL) { return 0; } uprv_memset(result, 0, sizeof(UFILE)); result->fFileno = fileno(f); -#ifdef WIN32 +#ifdef U_WINDOWS if (0 <= result->fFileno && result->fFileno <= 2) { /* stdin, stdout and stderr need to be special cased for Windows 98 */ +#if _MSC_VER >= 1400 + result->fFile = &__iob_func()[_fileno(f)]; +#else result->fFile = &_iob[_fileno(f)]; +#endif } else #endif @@ -68,10 +81,6 @@ u_finit(FILE *f, #if !UCONFIG_NO_FORMATTING /* if locale is 0, use the default */ - if(locale == 0) { - locale = uloc_getDefault(); - } - if(u_locbund_init(&result->str.fBundle, locale) == 0) { /* DO NOT FCLOSE HERE! */ uprv_free(result); @@ -142,10 +151,6 @@ u_fstropen(UChar *stringBuf, #if !UCONFIG_NO_FORMATTING /* if locale is 0, use the default */ - if(locale == 0) { - locale = uloc_getDefault(); - } - if(u_locbund_init(&result->str.fBundle, locale) == 0) { /* DO NOT FCLOSE HERE! */ uprv_free(result); diff --git a/icuSources/io/ufile.h b/icuSources/io/ufile.h index 8be6d731..4a261789 100644 --- a/icuSources/io/ufile.h +++ b/icuSources/io/ufile.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -76,10 +76,11 @@ struct UFILE { * Like u_file_write but takes a flush parameter */ U_CAPI int32_t U_EXPORT2 -u_file_write_flush( const UChar *chars, - int32_t count, - UFILE *f, - UBool flush); +u_file_write_flush( const UChar *chars, + int32_t count, + UFILE *f, + UBool flushIO, + UBool flushTranslit); /** * Fill a UFILE's buffer with converted codepage data. diff --git a/icuSources/io/ufmt_cmn.c b/icuSources/io/ufmt_cmn.c index 855f1475..e4e09033 100644 --- a/icuSources/io/ufmt_cmn.c +++ b/icuSources/io/ufmt_cmn.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -39,7 +39,7 @@ ufmt_digitvalue(UChar c) ((c>=LOWERCASE_A)&&(c<=LOWERCASE_Z)) || ((c>=UPPERCASE_A)&&(c<=UPPERCASE_Z)) ) { - return c - 0x0030 - (c >= 0x0041 ? (c >= 0x0061 ? 39 : 7) : 0); + return c - DIGIT_0 - (c >= 0x0041 ? (c >= 0x0061 ? 39 : 7) : 0); } else { @@ -56,8 +56,8 @@ ufmt_isdigit(UChar c, return (UBool)(digitVal < radix && digitVal >= 0); } -#define TO_UC_DIGIT(a) a <= 9 ? (0x0030 + a) : (0x0037 + a) -#define TO_LC_DIGIT(a) a <= 9 ? (0x0030 + a) : (0x0057 + a) +#define TO_UC_DIGIT(a) a <= 9 ? (DIGIT_0 + a) : (0x0037 + a) +#define TO_LC_DIGIT(a) a <= 9 ? (DIGIT_0 + a) : (0x0057 + a) void ufmt_64tou(UChar *buffer, @@ -81,7 +81,7 @@ ufmt_64tou(UChar *buffer, /* pad with zeroes to make it minDigits long */ if(minDigits != -1 && length < minDigits) { while(length < minDigits && length < *len) - buffer[length++] = 0x0030; /*zero padding */ + buffer[length++] = DIGIT_0; /*zero padding */ } /* reverse the buffer */ @@ -158,37 +158,64 @@ ufmt_uto64(const UChar *buffer, return result; } +#define NIBBLE_PER_BYTE 2 void * ufmt_utop(const UChar *buffer, int32_t *len) { - /* - TODO: Fix this code so that it will work with pointers that are 2<=sizeof(void*)<=16 - */ - const UChar *limit; - int32_t count; - int64_t result; + int32_t count, resultIdx, incVal, offset; + /* This union allows the pointer to be written as an array. */ + union { + void *ptr; + uint8_t bytes[sizeof(void*)]; + } result; - - /* intialize parameters */ - limit = buffer + *len; - count = 0; - result = 0; - - /* iterate through buffer */ - /* limit to sixteen iterations since that is the max that an int64_t can contain for pointer work */ - while(ufmt_isdigit(*buffer, 16) && buffer < limit) { - - /* read the next digit */ - result *= 16; - result += ufmt_digitvalue(*buffer++); - - /* increment our count */ + /* intialize variables */ + count = 0; + offset = 0; + result.ptr = NULL; + + /* Skip the leading zeros */ + while(buffer[count] == DIGIT_0 || u_isspace(buffer[count])) { + count++; + offset++; + } + + /* iterate through buffer, stop when you hit the end */ + while(ufmt_isdigit(buffer[count], 16) && count < *len) { + /* increment the count consumed */ ++count; } + + /* detect overflow */ + if (count - offset > (int32_t)(sizeof(void*)*NIBBLE_PER_BYTE)) { + offset = count - (int32_t)(sizeof(void*)*NIBBLE_PER_BYTE); + } + /* Initialize the direction of the input */ +#if U_IS_BIG_ENDIAN + incVal = -1; + resultIdx = (int32_t)(sizeof(void*) - 1); +#else + incVal = 1; + resultIdx = 0; +#endif + /* Write how much was consumed. */ *len = count; - return (void *)result; + while(--count >= offset) { + /* Get the first nibble of the byte */ + uint8_t byte = (uint8_t)ufmt_digitvalue(buffer[count]); + + if (count > offset) { + /* Get the second nibble of the byte when available */ + byte = (uint8_t)(byte + (ufmt_digitvalue(buffer[--count]) << 4)); + } + /* Write the byte into the array */ + result.bytes[resultIdx] = byte; + resultIdx += incVal; + } + + return result.ptr; } UChar* diff --git a/icuSources/io/unicode/ustdio.h b/icuSources/io/unicode/ustdio.h index cc0b6d7a..4675e77c 100644 --- a/icuSources/io/unicode/ustdio.h +++ b/icuSources/io/unicode/ustdio.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -89,37 +89,61 @@ * \brief C API: Unicode stdio-like API * * <h2>Unicode stdio-like C API</h2> -General printf format:<br> -%[format modifier][width][.precision][type modifier][format] - -General scanf format:<br> -%[*][format modifier][width][type modifier][format] - + * + * <p>This API provides an stdio-like API wrapper around ICU's other + * formatting and parsing APIs. It is meant to ease the transition of adding + * Unicode support to a preexisting applications using stdio. The following + * is a small list of noticable differences between stdio and ICU I/O's + * ustdio implementation.</p> + * + * <ul> + * <li>Locale specific formatting and parsing is only done with file IO.</li> + * <li>u_fstropen can be used to simulate file IO with strings. + * This is similar to the iostream API, and it allows locale specific + * formatting and parsing to be used.</li> + * <li>This API provides uniform formatting and parsing behavior between + * platforms (unlike the standard stdio implementations found on various + * platforms).</li> + * <li>This API is better suited for text data handling than binary data + * handling when compared to the typical stdio implementation.</li> + * <li>You can specify a Transliterator while using the file IO.</li> + * <li>You can specify a file's codepage separately from the default + * system codepage.</li> + * </ul> + * + * <h2>Formatting and Parsing Specification</h2> + * + * General printf format:<br> + * %[format modifier][width][.precision][type modifier][format] + * + * General scanf format:<br> + * %[*][format modifier][width][type modifier][format] + * <table cellspacing="3"> -<tr><td>format</td><td>default<br>type</td><td>description</td></tr> -<tr><td>%E</td><td>double</td><td>Scientific with an uppercase exponent</td></tr> -<tr><td>%e</td><td>double</td><td>Scientific with a lowercase exponent</td></tr> -<tr><td>%G</td><td>double</td><td>Use %E or %f for best format</td></tr> -<tr><td>%g</td><td>double</td><td>Use %e or %f for best format</td></tr> -<tr><td>%f</td><td>double</td><td>Simple floating point without the exponent</td></tr> -<tr><td>%X</td><td>int32_t</td><td>ustdio special uppercase hex radix formatting</td></tr> -<tr><td>%x</td><td>int32_t</td><td>ustdio special lowercase hex radix formatting</td></tr> -<tr><td>%d</td><td>int32_t</td><td>Decimal format</td></tr> -<tr><td>%i</td><td>int32_t</td><td>Same as %d</td></tr> -<tr><td>%n</td><td>int32_t</td><td>count (write the number of UTF-16 codeunits read/written)</td></tr> -<tr><td>%o</td><td>int32_t</td><td>ustdio special octal radix formatting</td></tr> -<tr><td>%u</td><td>uint32_t</td><td>Decimal format</td></tr> -<tr><td>%p</td><td>void *</td><td>Prints the pointer value</td></tr> -<tr><td>%s</td><td>char *</td><td>Use default converter or specified converter from fopen</td></tr> -<tr><td>%c</td><td>char</td><td>Use default converter or specified converter from fopen<br> -When width is specified, this acts like a non-NULL-terminated char * string.<br> +<tr><td>format</td><td>default<br>printf<br>type</td><td>default<br>scanf<br>type</td><td>description</td></tr> +<tr><td>%E</td><td>double</td><td>float</td><td>Scientific with an uppercase exponent</td></tr> +<tr><td>%e</td><td>double</td><td>float</td><td>Scientific with a lowercase exponent</td></tr> +<tr><td>%G</td><td>double</td><td>float</td><td>Use %E or %f for best format</td></tr> +<tr><td>%g</td><td>double</td><td>float</td><td>Use %e or %f for best format</td></tr> +<tr><td>%f</td><td>double</td><td>float</td><td>Simple floating point without the exponent</td></tr> +<tr><td>%X</td><td>int32_t</td><td>int32_t</td><td>ustdio special uppercase hex radix formatting</td></tr> +<tr><td>%x</td><td>int32_t</td><td>int32_t</td><td>ustdio special lowercase hex radix formatting</td></tr> +<tr><td>%d</td><td>int32_t</td><td>int32_t</td><td>Decimal format</td></tr> +<tr><td>%i</td><td>int32_t</td><td>int32_t</td><td>Same as %d</td></tr> +<tr><td>%n</td><td>int32_t</td><td>int32_t</td><td>count (write the number of UTF-16 codeunits read/written)</td></tr> +<tr><td>%o</td><td>int32_t</td><td>int32_t</td><td>ustdio special octal radix formatting</td></tr> +<tr><td>%u</td><td>uint32_t</td><td>uint32_t</td><td>Decimal format</td></tr> +<tr><td>%p</td><td>void *</td><td>void *</td><td>Prints the pointer value</td></tr> +<tr><td>%s</td><td>char *</td><td>char *</td><td>Use default converter or specified converter from fopen</td></tr> +<tr><td>%c</td><td>char</td><td>char</td><td>Use default converter or specified converter from fopen<br> +When width is specified for scanf, this acts like a non-NULL-terminated char * string.<br> By default, only one char is written.</td></tr> -<tr><td>%S</td><td>UChar *</td><td>Null terminated UTF-16 string</td></tr> -<tr><td>%C</td><td>UChar</td><td>16-bit Unicode code unit<br> -When width is specified, this acts like a non-NULL-terminated UChar * string<br> +<tr><td>%S</td><td>UChar *</td><td>UChar *</td><td>Null terminated UTF-16 string</td></tr> +<tr><td>%C</td><td>UChar</td><td>UChar</td><td>16-bit Unicode code unit<br> +When width is specified for scanf, this acts like a non-NULL-terminated UChar * string<br> By default, only one codepoint is written.</td></tr> -<tr><td>%[]</td><td>UChar *</td><td>(scanf only) Null terminated UTF-16 string which contains the filtered set of characters specified by the UnicodeSet</td></tr> -<tr><td>%%</td><td>N/A</td><td>Show a percent sign</td></tr> +<tr><td>%[]</td><td> </td><td>UChar *</td><td>Null terminated UTF-16 string which contains the filtered set of characters specified by the UnicodeSet</td></tr> +<tr><td>%%</td><td> </td><td> </td><td>Show a percent sign</td></tr> </table> Format modifiers @@ -162,13 +186,14 @@ scanf modifier /** * When an end of file is encountered, this value can be returned. * @see u_fgetc - * @draft 3.0 + * @stable 3.0 */ #define U_EOF 0xFFFF -/** Forward declaration of a Unicode-aware file @draft 3.0 */ +/** Forward declaration of a Unicode-aware file @stable 3.0 */ typedef struct UFILE UFILE; +#ifndef U_HIDE_DRAFT_API /** * Enum for which direction of stream a transliterator applies to. * @see u_fsettransliterator @@ -180,6 +205,8 @@ typedef enum { U_READWRITE =3 /* == (U_READ | U_WRITE) */ } UFileDirection; +#endif /* U_HIDE_DRAFT_API */ + /** * Open a UFILE. * A UFILE is a wrapper around a FILE* that is locale and codepage aware. @@ -197,7 +224,7 @@ typedef enum { * @return A new UFILE, or NULL if an error occurred. * @draft 3.0 */ -U_CAPI UFILE* U_EXPORT2 +U_DRAFT UFILE* U_EXPORT2 u_fopen(const char *filename, const char *perm, const char *locale, @@ -216,7 +243,7 @@ u_fopen(const char *filename, * @return A new UFILE, or NULL if an error occurred. * @draft 3.0 */ -U_CAPI UFILE* U_EXPORT2 +U_DRAFT UFILE* U_EXPORT2 u_finit(FILE *f, const char *locale, const char *codepage); @@ -235,7 +262,7 @@ u_finit(FILE *f, * @return A new UFILE, or NULL if an error occurred. * @draft 3.0 */ -U_CAPI UFILE* U_EXPORT2 +U_DRAFT UFILE* U_EXPORT2 u_fstropen(UChar *stringBuf, int32_t capacity, const char *locale); @@ -245,7 +272,7 @@ u_fstropen(UChar *stringBuf, * @param file The UFILE to close. * @draft 3.0 */ -U_CAPI void U_EXPORT2 +U_DRAFT void U_EXPORT2 u_fclose(UFILE *file); /** @@ -256,7 +283,7 @@ u_fclose(UFILE *file); * not end of file. * @draft 3.0 */ -U_CAPI UBool U_EXPORT2 +U_DRAFT UBool U_EXPORT2 u_feof(UFILE *f); /** @@ -267,7 +294,7 @@ u_feof(UFILE *f); * @param file The UFILE to flush. * @draft 3.0 */ -U_CAPI void U_EXPORT2 +U_DRAFT void U_EXPORT2 u_fflush(UFILE *file); /** @@ -275,7 +302,7 @@ u_fflush(UFILE *file); * @param file The UFILE to rewind. * @draft 3.0 */ -U_CAPI void +U_DRAFT void u_frewind(UFILE *file); /** @@ -284,7 +311,7 @@ u_frewind(UFILE *file); * @return A FILE*, owned by the UFILE. The FILE <EM>must not</EM> be closed. * @draft 3.0 */ -U_CAPI FILE* U_EXPORT2 +U_DRAFT FILE* U_EXPORT2 u_fgetfile(UFILE *f); #if !UCONFIG_NO_FORMATTING @@ -297,7 +324,7 @@ u_fgetfile(UFILE *f); * @return The locale whose conventions are used to format and parse output. * @draft 3.0 */ -U_CAPI const char* U_EXPORT2 +U_DRAFT const char* U_EXPORT2 u_fgetlocale(UFILE *file); /** @@ -308,7 +335,7 @@ u_fgetlocale(UFILE *file); * @return NULL if successful, otherwise a negative number. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fsetlocale(UFILE *file, const char *locale); @@ -323,7 +350,7 @@ u_fsetlocale(UFILE *file, * or NULL if an error occurred. * @draft 3.0 */ -U_CAPI const char* U_EXPORT2 +U_DRAFT const char* U_EXPORT2 u_fgetcodepage(UFILE *file); /** @@ -341,7 +368,7 @@ u_fgetcodepage(UFILE *file); * @see u_frewind * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fsetcodepage(const char *codepage, UFILE *file); @@ -352,7 +379,7 @@ u_fsetcodepage(const char *codepage, * @return alias to the converter * @draft 3.0 */ -U_CAPI UConverter* U_EXPORT2 u_fgetConverter(UFILE *f); +U_DRAFT UConverter* U_EXPORT2 u_fgetConverter(UFILE *f); #if !UCONFIG_NO_FORMATTING @@ -366,7 +393,7 @@ U_CAPI UConverter* U_EXPORT2 u_fgetConverter(UFILE *f); * @return The number of Unicode characters written to <TT>f</TT>. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fprintf(UFILE *f, const char *patternSpecification, ... ); @@ -383,7 +410,7 @@ u_fprintf(UFILE *f, * @see u_fprintf * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vfprintf(UFILE *f, const char *patternSpecification, va_list ap); @@ -396,7 +423,7 @@ u_vfprintf(UFILE *f, * @return The number of Unicode characters written to <TT>f</TT>. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fprintf_u(UFILE *f, const UChar *patternSpecification, ... ); @@ -413,7 +440,7 @@ u_fprintf_u(UFILE *f, * @see u_fprintf_u * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vfprintf_u(UFILE *f, const UChar *patternSpecification, va_list ap); @@ -428,7 +455,7 @@ u_vfprintf_u(UFILE *f, * @see u_file_write * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fputs(const UChar *s, UFILE *f); @@ -439,7 +466,7 @@ u_fputs(const UChar *s, * @return The character written if successful, EOF otherwise. * @draft 3.0 */ -U_CAPI UChar32 U_EXPORT2 +U_DRAFT UChar32 U_EXPORT2 u_fputc(UChar32 uc, UFILE *f); @@ -454,7 +481,7 @@ u_fputc(UChar32 uc, * @see u_fputs * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_file_write(const UChar *ustring, int32_t count, UFILE *f); @@ -472,7 +499,7 @@ u_file_write(const UChar *ustring, * if an error occurred. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fscanf(UFILE *f, const char *patternSpecification, ... ); @@ -490,7 +517,7 @@ u_fscanf(UFILE *f, * @see u_fscanf * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vfscanf(UFILE *f, const char *patternSpecification, va_list ap); @@ -504,7 +531,7 @@ u_vfscanf(UFILE *f, * if an error occurred. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_fscanf_u(UFILE *f, const UChar *patternSpecification, ... ); @@ -522,7 +549,7 @@ u_fscanf_u(UFILE *f, * @see u_fscanf_u * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vfscanf_u(UFILE *f, const UChar *patternSpecification, va_list ap); @@ -540,7 +567,7 @@ u_vfscanf_u(UFILE *f, * @return A pointer to <TT>s</TT>, or NULL if no characters were available. * @draft 3.0 */ -U_CAPI UChar* U_EXPORT2 +U_DRAFT UChar* U_EXPORT2 u_fgets(UChar *s, int32_t n, UFILE *f); @@ -554,7 +581,7 @@ u_fgets(UChar *s, * @return The UChar value read, or U+FFFF if no character was available. * @draft 3.0 */ -U_CAPI UChar U_EXPORT2 +U_DRAFT UChar U_EXPORT2 u_fgetc(UFILE *f); /** @@ -567,7 +594,7 @@ u_fgetc(UFILE *f); * @see u_unescape() * @draft 3.0 */ -U_CAPI UChar32 U_EXPORT2 +U_DRAFT UChar32 U_EXPORT2 u_fgetcx(UFILE *f); /** @@ -581,7 +608,7 @@ u_fgetcx(UFILE *f); * @return The UChar32 value put back if successful, U_EOF otherwise. * @draft 3.0 */ -U_CAPI UChar32 U_EXPORT2 +U_DRAFT UChar32 U_EXPORT2 u_fungetc(UChar32 c, UFILE *f); @@ -595,7 +622,7 @@ u_fungetc(UChar32 c, * @return The number of Unicode characters read. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_file_read(UChar *chars, int32_t count, UFILE *f); @@ -619,7 +646,7 @@ u_file_read(UChar *chars, * on the result of this function. * @draft 3.0 */ -U_CAPI UTransliterator* U_EXPORT2 +U_DRAFT UTransliterator* U_EXPORT2 u_fsettransliterator(UFILE *file, UFileDirection direction, UTransliterator *adopt, UErrorCode *status); @@ -640,7 +667,7 @@ u_fsettransliterator(UFILE *file, UFileDirection direction, * does not include the terminating null character. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_sprintf(UChar *buffer, const char *patternSpecification, ... ); @@ -661,7 +688,7 @@ u_sprintf(UChar *buffer, * does not include the terminating null character. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_snprintf(UChar *buffer, int32_t count, const char *patternSpecification, @@ -680,7 +707,7 @@ u_snprintf(UChar *buffer, * @see u_sprintf * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vsprintf(UChar *buffer, const char *patternSpecification, va_list ap); @@ -704,7 +731,7 @@ u_vsprintf(UChar *buffer, * @see u_sprintf * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vsnprintf(UChar *buffer, int32_t count, const char *patternSpecification, @@ -719,7 +746,7 @@ u_vsnprintf(UChar *buffer, * @return The number of Unicode characters written to <TT>buffer</TT>. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_sprintf_u(UChar *buffer, const UChar *patternSpecification, ... ); @@ -739,7 +766,7 @@ u_sprintf_u(UChar *buffer, * @return The number of Unicode characters written to <TT>buffer</TT>. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_snprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification, @@ -758,7 +785,7 @@ u_snprintf_u(UChar *buffer, * @see u_sprintf_u * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vsprintf_u(UChar *buffer, const UChar *patternSpecification, va_list ap); @@ -782,7 +809,7 @@ u_vsprintf_u(UChar *buffer, * @see u_sprintf_u * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vsnprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification, @@ -800,7 +827,7 @@ u_vsnprintf_u(UChar *buffer, * if an error occurred. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_sscanf(const UChar *buffer, const char *patternSpecification, ... ); @@ -819,7 +846,7 @@ u_sscanf(const UChar *buffer, * @see u_sscanf * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vsscanf(const UChar *buffer, const char *patternSpecification, va_list ap); @@ -834,7 +861,7 @@ u_vsscanf(const UChar *buffer, * if an error occurred. * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_sscanf_u(const UChar *buffer, const UChar *patternSpecification, ... ); @@ -853,7 +880,7 @@ u_sscanf_u(const UChar *buffer, * @see u_sscanf_u * @draft 3.0 */ -U_CAPI int32_t U_EXPORT2 +U_DRAFT int32_t U_EXPORT2 u_vsscanf_u(const UChar *buffer, const UChar *patternSpecification, va_list ap); diff --git a/icuSources/io/unicode/ustream.h b/icuSources/io/unicode/ustream.h index e620da13..6f5352f0 100644 --- a/icuSources/io/unicode/ustream.h +++ b/icuSources/io/unicode/ustream.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006 International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * FILE NAME : ustream.h @@ -17,24 +17,42 @@ #include "unicode/unistr.h" - /** - * Write the contents of a UnicodeString to an ostream. This functions writes - * the characters in a UnicodeString to an ostream. The UChars in the - * UnicodeString are truncated to char, leading to undefined results with - * anything not in the Latin1 character set. + * \file + * \brief C++ API: Unicode iostream like API + * + * At this time, this API is very limited. It contains + * operator<< and operator>> for UnicodeString manipulation with the + * C++ I/O stream API. */ + #if U_IOSTREAM_SOURCE >= 199711 -#include <iostream> +#include <istream> +#include <ostream> U_NAMESPACE_BEGIN + +/** + * Write the contents of a UnicodeString to a C++ ostream. This functions writes + * the characters in a UnicodeString to an ostream. The UChars in the + * UnicodeString are converted to the char based ostream with the default + * converter. + * @stable 3.0 + */ U_IO_API std::ostream & U_EXPORT2 operator<<(std::ostream& stream, const UnicodeString& s); +/** + * Write the contents from a C++ istream to a UnicodeString. The UChars in the + * UnicodeString are converted from the char based istream with the default + * converter. + * @stable 3.0 + */ U_IO_API std::istream & U_EXPORT2 operator>>(std::istream& stream, UnicodeString& s); U_NAMESPACE_END #elif U_IOSTREAM_SOURCE >= 198506 -#include <iostream.h> +#include <istream.h> +#include <ostream.h> U_NAMESPACE_BEGIN U_IO_API ostream & U_EXPORT2 operator<<(ostream& stream, const UnicodeString& s); diff --git a/icuSources/io/uprintf.h b/icuSources/io/uprintf.h index 6d38cc37..4b538451 100644 --- a/icuSources/io/uprintf.h +++ b/icuSources/io/uprintf.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -34,6 +34,7 @@ typedef struct u_printf_spec_info { int32_t fPrecision; /* Precision */ int32_t fWidth; /* Width */ + UChar fOrigSpec; /* Conversion specification */ UChar fSpec; /* Conversion specification */ UChar fPadChar; /* Padding character */ diff --git a/icuSources/io/uprntf_p.c b/icuSources/io/uprntf_p.c index a1fb9459..08236762 100644 --- a/icuSources/io/uprntf_p.c +++ b/icuSources/io/uprntf_p.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -225,17 +225,12 @@ u_printf_string_handler(const u_printf_stream_handler *handler, /* width = minimum # of characters to write */ /* precision = maximum # of characters to write */ - - /* precision takes precedence over width */ - /* determine if the string should be truncated */ - if(info->fPrecision != -1 && len > info->fPrecision) { - written = handler->write(context, s, info->fPrecision); - } - /* determine if the string should be padded */ - else { - written = handler->pad_and_justify(context, info, s, len); + if (info->fPrecision != -1 && info->fPrecision < len) { + len = info->fPrecision; } + written = handler->pad_and_justify(context, info, s, len); + /* clean up */ if (gNullStr != s && buffer != s) { uprv_free(s); @@ -265,16 +260,9 @@ u_printf_char_handler(const u_printf_stream_handler *handler, /* width = minimum # of characters to write */ /* precision = maximum # of characters to write */ + /* precision is ignored when handling a char */ - /* precision takes precedence over width */ - /* determine if the string should be truncated */ - if(info->fPrecision != -1 && len > info->fPrecision) { - written = handler->write(context, s, info->fPrecision); - } - else { - /* determine if the string should be padded */ - written = handler->pad_and_justify(context, info, s, len); - } + written = handler->pad_and_justify(context, info, s, len); return written; } @@ -627,7 +615,13 @@ u_printf_scientific_handler(const u_printf_stream_handler *handler, /* set the appropriate flags and number of decimal digits on the formatter */ if(info->fPrecision != -1) { /* set the # of decimal digits */ - unum_setAttribute(format, UNUM_FRACTION_DIGITS, info->fPrecision); + if (info->fOrigSpec == (UChar)0x65 /* e */ || info->fOrigSpec == (UChar)0x45 /* E */) { + unum_setAttribute(format, UNUM_FRACTION_DIGITS, info->fPrecision); + } + else { + unum_setAttribute(format, UNUM_MIN_FRACTION_DIGITS, 1); + unum_setAttribute(format, UNUM_MAX_FRACTION_DIGITS, info->fPrecision); + } } else if(info->fAlt) { /* '#' means always show decimal point */ @@ -766,17 +760,13 @@ u_printf_ustring_handler(const u_printf_stream_handler *handler, /* width = minimum # of characters to write */ /* precision = maximum # of characters to write */ - - /* precision takes precedence over width */ - /* determine if the string should be truncated */ - if(info->fPrecision != -1 && len > info->fPrecision) { - written = handler->write(context, arg, info->fPrecision); - } - else { - /* determine if the string should be padded */ - written = handler->pad_and_justify(context, info, arg, len); + if (info->fPrecision != -1 && info->fPrecision < len) { + len = info->fPrecision; } + /* determine if the string should be padded */ + written = handler->pad_and_justify(context, info, arg, len); + return written; } @@ -790,20 +780,12 @@ u_printf_uchar_handler(const u_printf_stream_handler *handler, int32_t written = 0; UChar arg = (UChar)(args[0].int64Value); - /* width = minimum # of characters to write */ /* precision = maximum # of characters to write */ + /* precision is ignored when handling a uchar */ - /* precision takes precedence over width */ - /* determine if the char should be printed */ - if(info->fPrecision != -1 && info->fPrecision < 1) { - /* write nothing */ - written = 0; - } - else { - /* determine if the string should be padded */ - written = handler->pad_and_justify(context, info, &arg, 1); - } + /* determine if the string should be padded */ + written = handler->pad_and_justify(context, info, &arg, 1); return written; } @@ -1100,19 +1082,10 @@ u_printf_parse(const u_printf_stream_handler *streamHandler, spec.fPrecisionPos = -1; spec.fArgPos = -1; + uprv_memset(info, 0, sizeof(*info)); info->fPrecision = -1; info->fWidth = -1; - info->fSpec = 0x0000; info->fPadChar = 0x0020; - info->fAlt = FALSE; - info->fSpace = FALSE; - info->fLeft = FALSE; - info->fShowSign = FALSE; - info->fZero = FALSE; - info->fIsLongDouble = FALSE; - info->fIsShort = FALSE; - info->fIsLong = FALSE; - info->fIsLongLong = FALSE; /* skip over the initial '%' */ alias++; @@ -1311,6 +1284,7 @@ u_printf_parse(const u_printf_stream_handler *streamHandler, /* finally, get the specifier letter */ info->fSpec = *alias++; + info->fOrigSpec = info->fSpec; /* fill in the precision and width, if specified out of line */ @@ -1320,14 +1294,12 @@ u_printf_parse(const u_printf_stream_handler *streamHandler, /* read the width from the argument list */ info->fWidth = va_arg(ap, int32_t); } - else { - /* handle positional parameter */ - } + /* else handle positional parameter */ /* if it's negative, take the absolute value and set left alignment */ if(info->fWidth < 0) { - info->fWidth *= -1; - info->fLeft = TRUE; + info->fWidth *= -1; /* Make positive */ + info->fLeft = TRUE; } } @@ -1337,9 +1309,7 @@ u_printf_parse(const u_printf_stream_handler *streamHandler, /* read the precision from the argument list */ info->fPrecision = va_arg(ap, int32_t); } - else { - /* handle positional parameter */ - } + /* else handle positional parameter */ /* if it's negative, set it to zero */ if(info->fPrecision < 0) diff --git a/icuSources/io/uscanf_p.c b/icuSources/io/uscanf_p.c index 17e98138..804f9a55 100644 --- a/icuSources/io/uscanf_p.c +++ b/icuSources/io/uscanf_p.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -306,6 +306,7 @@ typedef struct u_scanf_info { } u_scanf_info; #define USCANF_NUM_FMT_HANDLERS 108 +#define USCANF_SYMBOL_BUFFER_SIZE 8 /* We do not use handlers for 0-0x1f */ #define USCANF_BASE_FMT_HANDLERS 0x20 @@ -332,6 +333,43 @@ u_scanf_skip_leading_ws(UFILE *input, return count; } +/* TODO: Is always skipping the prefix symbol as a positive sign a good idea in all locales? */ +static int32_t +u_scanf_skip_leading_positive_sign(UFILE *input, + UNumberFormat *format, + UErrorCode *status) +{ + UChar c; + int32_t count = 0; + UBool isNotEOF; + UChar plusSymbol[USCANF_SYMBOL_BUFFER_SIZE]; + int32_t symbolLen; + UErrorCode localStatus = U_ZERO_ERROR; + + if (U_SUCCESS(*status)) { + symbolLen = unum_getSymbol(format, + UNUM_PLUS_SIGN_SYMBOL, + plusSymbol, + sizeof(plusSymbol)/sizeof(*plusSymbol), + &localStatus); + + if (U_SUCCESS(localStatus)) { + /* skip all leading ws in the input */ + while( (isNotEOF = ufile_getch(input, &c)) && (count < symbolLen && c == plusSymbol[count]) ) + { + count++; + } + + /* put the final character back on the input */ + if(isNotEOF) { + u_fungetc(c, input); + } + } + } + + return count; +} + static int32_t u_scanf_simple_percent_handler(UFILE *input, u_scanf_spec_info *info, @@ -366,6 +404,7 @@ u_scanf_count_handler(UFILE *input, else *(int32_t*)(args[0].ptrValue) = (int32_t)(UINT32_MAX & info->fWidth); } + *argConverted = 0; /* we converted 0 args */ return 0; @@ -383,17 +422,18 @@ u_scanf_double_handler(UFILE *input, double num; UNumberFormat *format; int32_t parsePos = 0; + int32_t skipped; UErrorCode status = U_ZERO_ERROR; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -406,11 +446,19 @@ u_scanf_double_handler(UFILE *input, if(format == 0) return 0; + /* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */ + skipped += u_scanf_skip_leading_positive_sign(input, format, &status); + /* parse the number */ num = unum_parseDouble(format, input->str.fPos, len, &parsePos, &status); if (!info->fSkipArg) { - *(double*)(args[0].ptrValue) = num; + if (info->fIsLong) + *(double*)(args[0].ptrValue) = num; + else if (info->fIsLongDouble) + *(long double*)(args[0].ptrValue) = num; + else + *(float*)(args[0].ptrValue) = (float)num; } /* mask off any necessary bits */ @@ -422,7 +470,7 @@ u_scanf_double_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return parsePos; + return parsePos + skipped; } static int32_t @@ -437,17 +485,18 @@ u_scanf_scientific_handler(UFILE *input, double num; UNumberFormat *format; int32_t parsePos = 0; + int32_t skipped; UErrorCode status = U_ZERO_ERROR; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -460,11 +509,19 @@ u_scanf_scientific_handler(UFILE *input, if(format == 0) return 0; + /* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */ + skipped += u_scanf_skip_leading_positive_sign(input, format, &status); + /* parse the number */ num = unum_parseDouble(format, input->str.fPos, len, &parsePos, &status); if (!info->fSkipArg) { - *(double*)(args[0].ptrValue) = num; + if (info->fIsLong) + *(double*)(args[0].ptrValue) = num; + else if (info->fIsLongDouble) + *(long double*)(args[0].ptrValue) = num; + else + *(float*)(args[0].ptrValue) = (float)num; } /* mask off any necessary bits */ @@ -476,7 +533,7 @@ u_scanf_scientific_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return parsePos; + return parsePos + skipped; } static int32_t @@ -487,12 +544,13 @@ u_scanf_scidbl_handler(UFILE *input, int32_t *fmtConsumed, int32_t *argConverted) { - int32_t len; + int32_t len; double num; UNumberFormat *scientificFormat, *genericFormat; /*int32_t scientificResult, genericResult;*/ double scientificResult, genericResult; int32_t scientificParsePos = 0, genericParsePos = 0, parsePos = 0; + int32_t skipped; UErrorCode scientificStatus = U_ZERO_ERROR; UErrorCode genericStatus = U_ZERO_ERROR; @@ -504,13 +562,13 @@ u_scanf_scidbl_handler(UFILE *input, /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -524,6 +582,9 @@ u_scanf_scidbl_handler(UFILE *input, if(scientificFormat == 0 || genericFormat == 0) return 0; + /* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */ + skipped += u_scanf_skip_leading_positive_sign(input, genericFormat, &genericStatus); + /* parse the number using each format*/ scientificResult = unum_parseDouble(scientificFormat, input->str.fPos, len, @@ -548,7 +609,12 @@ u_scanf_scidbl_handler(UFILE *input, input->str.fPos += parsePos; if (!info->fSkipArg) { - *(double*)(args[0].ptrValue) = num; + if (info->fIsLong) + *(double*)(args[0].ptrValue) = num; + else if (info->fIsLongDouble) + *(long double*)(args[0].ptrValue) = num; + else + *(float*)(args[0].ptrValue) = (float)num; } /* mask off any necessary bits */ @@ -557,7 +623,7 @@ u_scanf_scidbl_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return parsePos; + return parsePos + skipped; } static int32_t @@ -572,18 +638,19 @@ u_scanf_integer_handler(UFILE *input, void *num = (void*) (args[0].ptrValue); UNumberFormat *format; int32_t parsePos = 0; + int32_t skipped; UErrorCode status = U_ZERO_ERROR; int64_t result; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -596,6 +663,9 @@ u_scanf_integer_handler(UFILE *input, if(format == 0) return 0; + /* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */ + skipped += u_scanf_skip_leading_positive_sign(input, format, &status); + /* parse the number */ result = unum_parseInt64(format, input->str.fPos, len, &parsePos, &status); @@ -614,7 +684,7 @@ u_scanf_integer_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return parsePos; + return parsePos + skipped; } static int32_t @@ -641,17 +711,18 @@ u_scanf_percent_handler(UFILE *input, double num; UNumberFormat *format; int32_t parsePos = 0; + int32_t skipped; UErrorCode status = U_ZERO_ERROR; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -664,6 +735,9 @@ u_scanf_percent_handler(UFILE *input, if(format == 0) return 0; + /* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */ + skipped += u_scanf_skip_leading_positive_sign(input, format, &status); + /* parse the number */ num = unum_parseDouble(format, input->str.fPos, len, &parsePos, &status); @@ -698,12 +772,13 @@ u_scanf_string_handler(UFILE *input, char *limit; UErrorCode status = U_ZERO_ERROR; int32_t count; + int32_t skipped = 0; UChar c; UBool isNotEOF = FALSE; /* skip all ws in the input */ if (info->fIsString) { - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); } /* get the string one character at a time, truncating to the width */ @@ -762,7 +837,7 @@ u_scanf_string_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return count; + return count + skipped; } static int32_t @@ -791,12 +866,13 @@ u_scanf_ustring_handler(UFILE *input, UChar *arg = (UChar*)(args[0].ptrValue); UChar *alias = arg; int32_t count; + int32_t skipped = 0; UChar c; UBool isNotEOF = FALSE; /* skip all ws in the input */ if (info->fIsString) { - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); } /* get the string one character at a time, truncating to the width */ @@ -830,7 +906,7 @@ u_scanf_ustring_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return count; + return count + skipped; } static int32_t @@ -860,17 +936,18 @@ u_scanf_spellout_handler(UFILE *input, double num; UNumberFormat *format; int32_t parsePos = 0; + int32_t skipped; UErrorCode status = U_ZERO_ERROR; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -883,6 +960,10 @@ u_scanf_spellout_handler(UFILE *input, if(format == 0) return 0; + /* Skip the positive prefix. ICU normally can't handle this due to strict parsing. */ + /* This is not applicable to RBNF. */ + /*skipped += u_scanf_skip_leading_positive_sign(input, format, &status);*/ + /* parse the number */ num = unum_parseDouble(format, input->str.fPos, len, &parsePos, &status); @@ -899,7 +980,7 @@ u_scanf_spellout_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return parsePos; + return parsePos + skipped; } static int32_t @@ -911,17 +992,18 @@ u_scanf_hex_handler(UFILE *input, int32_t *argConverted) { int32_t len; + int32_t skipped; void *num = (void*) (args[0].ptrValue); int64_t result; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -954,7 +1036,7 @@ u_scanf_hex_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return len; + return len + skipped; } static int32_t @@ -965,18 +1047,19 @@ u_scanf_octal_handler(UFILE *input, int32_t *fmtConsumed, int32_t *argConverted) { - int32_t len; - void *num = (void*) (args[0].ptrValue); - int64_t result; + int32_t len; + int32_t skipped; + void *num = (void*) (args[0].ptrValue); + int64_t result; /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) @@ -1000,7 +1083,7 @@ u_scanf_octal_handler(UFILE *input, /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return len; + return len + skipped; } static int32_t @@ -1012,55 +1095,25 @@ u_scanf_pointer_handler(UFILE *input, int32_t *argConverted) { int32_t len; + int32_t skipped; void *result; void **p = (void**)(args[0].ptrValue); /* skip all ws in the input */ - u_scanf_skip_leading_ws(input, info->fPadChar); + skipped = u_scanf_skip_leading_ws(input, info->fPadChar); /* fill the input's internal buffer */ ufile_fill_uchar_buffer(input); /* determine the size of the input's buffer */ - len = input->str.fLimit - input->str.fPos; + len = (int32_t)(input->str.fLimit - input->str.fPos); /* truncate to the width, if specified */ if(info->fWidth != -1) { len = ufmt_min(len, info->fWidth); } -#ifdef OS400 - /* TODO: Fix this code so that it will work on all platforms */ - { - int64_t result[2]; - int32_t lenOrig = len; - - /* Make sure that we don't consume too much */ - if (len > (int32_t)(sizeof(int64_t)*2)) { - len = (int32_t)(sizeof(int64_t)*2); - } - - /* parse the pointer - set first half of big endian pointer */ - result[0] = (int64_t)ufmt_utop(input->str.fPos, &len); - - /* update the input's position to reflect consumed data */ - input->str.fPos += len; - len = lenOrig - len; - - /* Make sure that we don't consume too much */ - if (len > (int32_t)(sizeof(int64_t)*2)) { - len = (int32_t)(sizeof(int64_t)*2); - } - - /* parse the pointer - set second half of big endian pointer */ - result[1] = (int64_t)ufmt_utop(input->str.fPos, &len); - - if (!info->fSkipArg) { - p = *((void **)result); - } - } -#else /* Make sure that we don't consume too much */ if (len > (int32_t)(sizeof(void*)*2)) { len = (int32_t)(sizeof(void*)*2); @@ -1073,14 +1126,12 @@ u_scanf_pointer_handler(UFILE *input, *p = result; } -#endif - /* update the input's position to reflect consumed data */ input->str.fPos += len; /* we converted 1 arg */ *argConverted = !info->fSkipArg; - return len; + return len + skipped; } static int32_t diff --git a/icuSources/io/ustdio.c b/icuSources/io/ustdio.c index 8ffd9050..04dd2f95 100644 --- a/icuSources/io/ustdio.c +++ b/icuSources/io/ustdio.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -36,11 +36,8 @@ #define DELIM_LS 0x2028 #define DELIM_PS 0x2029 -/* Leave this copyright notice here! */ -static const char copyright[] = U_COPYRIGHT_STRING; - /* TODO: is this correct for all codepages? Should we just use \n and let the converter handle it? */ -#ifdef WIN32 +#ifdef U_WINDOWS static const UChar DELIMITERS [] = { DELIM_CR, DELIM_LF, 0x0000 }; static const uint32_t DELIMITERS_LEN = 2; /* TODO: Default newline writing should be detected based upon the converter being used. */ @@ -233,7 +230,7 @@ ufile_flush_translit(UFILE *f) return; #endif - u_file_write_flush(NULL, 0, f, TRUE); + u_file_write_flush(NULL, 0, f, FALSE, TRUE); } @@ -283,58 +280,57 @@ u_fputc(UChar32 uc, U16_APPEND(buf, idx, sizeof(buf)/sizeof(*buf), uc, isError); if (isError) { - return EOF; + return U_EOF; } - return u_file_write(buf, idx, f) == idx ? uc : EOF; + return u_file_write(buf, idx, f) == idx ? uc : U_EOF; } U_CAPI int32_t U_EXPORT2 -u_file_write_flush( const UChar *chars, - int32_t count, - UFILE *f, - UBool flush) +u_file_write_flush(const UChar *chars, + int32_t count, + UFILE *f, + UBool flushIO, + UBool flushTranslit) { /* Set up conversion parameters */ UErrorCode status = U_ZERO_ERROR; const UChar *mySource = chars; - const UChar *sourceAlias = chars; const UChar *mySourceEnd; char charBuffer[UFILE_CHARBUFFER_SIZE]; char *myTarget = charBuffer; int32_t written = 0; int32_t numConverted = 0; - if (!f->fFile) { - int32_t charsLeft = f->str.fLimit - f->str.fPos; - if (flush && charsLeft > count) { - count++; - } - written = ufmt_min(count, charsLeft); - u_strncpy(f->str.fPos, chars, written); - f->str.fPos += written; - return written; - } - if (count < 0) { count = u_strlen(chars); } - mySourceEnd = chars + count; #if !UCONFIG_NO_TRANSLITERATION if((f->fTranslit) && (f->fTranslit->translit)) { /* Do the transliteration */ - mySource = u_file_translit(f, chars, &count, flush); - sourceAlias = mySource; - mySourceEnd = mySource + count; + mySource = u_file_translit(f, chars, &count, flushTranslit); } #endif + /* Write to a string. */ + if (!f->fFile) { + int32_t charsLeft = (int32_t)(f->str.fLimit - f->str.fPos); + if (flushIO && charsLeft > count) { + count++; + } + written = ufmt_min(count, charsLeft); + u_strncpy(f->str.fPos, mySource, written); + f->str.fPos += written; + return written; + } + + mySourceEnd = mySource + count; + /* Perform the conversion in a loop */ do { status = U_ZERO_ERROR; - sourceAlias = mySource; if(f->fConverter != NULL) { /* We have a valid converter */ ucnv_fromUnicode(f->fConverter, &myTarget, @@ -342,7 +338,7 @@ u_file_write_flush( const UChar *chars, &mySource, mySourceEnd, NULL, - flush, + flushIO, &status); } else { /*weiv: do the invariant conversion */ u_UCharsToChars(mySource, myTarget, count); @@ -372,7 +368,7 @@ u_file_write( const UChar *chars, int32_t count, UFILE *f) { - return u_file_write_flush(chars,count,f,FALSE); + return u_file_write_flush(chars,count,f,FALSE,FALSE); } @@ -421,7 +417,7 @@ ufile_fill_uchar_buffer(UFILE *f) if (f->fFileno == 0) { /* Special case. Read from stdin one line at a time. */ char *retStr = fgets(charBuffer, ufmt_min(maxCPBytes, UFILE_CHARBUFFER_SIZE), f->fFile); - bytesRead = (retStr ? uprv_strlen(charBuffer) : 0); + bytesRead = (int32_t)(retStr ? uprv_strlen(charBuffer) : 0); } else { /* A normal file */ @@ -501,11 +497,11 @@ u_fgets(UChar *s, alias = str->fPos; /* Find how much to copy */ - if (dataSize < n) { + if (dataSize < (n - count)) { limit = str->fLimit; } else { - limit = alias + n; + limit = alias + (n - count); } if (!currDelim) { @@ -519,6 +515,12 @@ u_fgets(UChar *s, if (CAN_HAVE_COMBINED_STRING_DELIMITER(*alias)) { currDelim = *alias; } + else { + currDelim = 1; /* This isn't a newline, but it's used to say + that we should break later. We've checked all + possible newline combinations even across buffer + boundaries. */ + } count++; *(sItr++) = *(alias++); } diff --git a/icuSources/io/ustream.cpp b/icuSources/io/ustream.cpp index 2a547ad4..0426c804 100644 --- a/icuSources/io/ustream.cpp +++ b/icuSources/io/ustream.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * FILE NAME : ustream.cpp @@ -57,7 +57,7 @@ operator<<(STD_OSTREAM& stream, const UnicodeString& str) // write this chunk if(s > buffer) { - stream.write(buffer, s - buffer); + stream.write(buffer, (int32_t)(s - buffer)); } } while(errorCode == U_BUFFER_OVERFLOW_ERROR); u_releaseDefaultConverter(converter); @@ -103,20 +103,25 @@ operator>>(STD_ISTREAM& stream, UnicodeString& str) } /* Was the character consumed? */ if (us != uBuffer) { - U16_GET(uBuffer, 0, 0, us-uBuffer, ch32); - if (u_isWhitespace(ch32)) { - if (!intialWhitespace) { - buffer[idx++] = ch; - while (idx > 0) { - stream.putback(buffer[--idx]); + /* Reminder: ibm-1390 & JISX0213 can output 2 Unicode code points */ + int32_t uBuffSize = us-uBuffer; + int32_t uBuffIdx = 0; + while (uBuffIdx < uBuffSize) { + U16_NEXT(uBuffer, uBuffIdx, uBuffSize, ch32); + if (u_isWhitespace(ch32)) { + if (!intialWhitespace) { + buffer[idx++] = ch; + while (idx > 0) { + stream.putback(buffer[--idx]); + } + goto STOP_READING; } - break; + /* else skip intialWhitespace */ + } + else { + str.append(ch32); + intialWhitespace = FALSE; } - /* else skip intialWhitespace */ - } - else { - str.append(ch32); - intialWhitespace = FALSE; } idx = 0; } @@ -124,6 +129,7 @@ operator>>(STD_ISTREAM& stream, UnicodeString& str) buffer[idx++] = ch; } } +STOP_READING: u_releaseDefaultConverter(converter); } diff --git a/icuSources/layout/AnchorTables.cpp b/icuSources/layout/AnchorTables.cpp index 94980da6..24f3cf31 100644 --- a/icuSources/layout/AnchorTables.cpp +++ b/icuSources/layout/AnchorTables.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -41,9 +41,10 @@ void AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstanc } default: - // Unknown format, set the anchor point to (0, 0) - anchor.fX = 0; - anchor.fY = 0; + // unknown format: just use x, y coordinate, like format 1... + const Format1AnchorTable *f1 = (const Format1AnchorTable *) this; + + f1->getAnchor(fontInstance, anchor); break; } } diff --git a/icuSources/layout/ArabicLayoutEngine.cpp b/icuSources/layout/ArabicLayoutEngine.cpp index 265d884a..42444743 100644 --- a/icuSources/layout/ArabicLayoutEngine.cpp +++ b/icuSources/layout/ArabicLayoutEngine.cpp @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -34,16 +34,25 @@ le_bool CharSubstitutionFilter::accept(LEGlyphID glyph) const UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine) ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable) + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) { - /**/ fFeatureOrder = ArabicShaping::getFeatureOrder(); + fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; } -ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode) +ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) { - // fFeatureOrder = ArabicShaping::getFeatureOrder(); + fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); + + // NOTE: We don't need to set fFeatureOrder to TRUE here + // because this constructor is only called by the constructor + // for UnicodeArabicOpenTypeLayoutEngine, which uses a pre-built + // GSUB table that has the features in the correct order. + + //fFeatureOrder = TRUE; } ArabicOpenTypeLayoutEngine::~ArabicOpenTypeLayoutEngine() @@ -55,7 +64,7 @@ ArabicOpenTypeLayoutEngine::~ArabicOpenTypeLayoutEngine() // Output: characters, char indices, tags // Returns: output character count le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, - LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success) + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) { if (LE_FAILURE(success)) { return 0; @@ -66,14 +75,26 @@ le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[] return 0; } - glyphStorage.adoptGlyphCount(count); + outChars = LE_NEW_ARRAY(LEUnicode, count); + + if (outChars == NULL) { + success = LE_MEMORY_ALLOCATION_ERROR; + return 0; + } + + glyphStorage.allocateGlyphArray(count, rightToLeft, success); glyphStorage.allocateAuxData(success); if (LE_FAILURE(success)) { - success = LE_MEMORY_ALLOCATION_ERROR; + LE_DELETE_ARRAY(outChars); return 0; } + CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage); + + // Note: This processes the *original* character array so we can get context + // for the first and last characters. This is OK because only the marks + // will have been reordered, and they don't contribute to shaping. ArabicShaping::shape(chars, offset, count, max, rightToLeft, glyphStorage); return count; @@ -105,8 +126,8 @@ void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], l } } -UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode) - : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode) +UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) + : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) { fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable; fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; @@ -143,14 +164,14 @@ le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage & glyphStorage.adoptCharIndicesArray(tempGlyphStorage); - ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, glyphStorage, success); + ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, TRUE, glyphStorage, success); LE_DELETE_ARRAY(tempChars); return tempGlyphCount; } -void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, LEGlyphStorage &glyphStorage, LEErrorCode &success) +void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, le_bool /*filterZeroWidth*/, LEGlyphStorage &glyphStorage, LEErrorCode &success) { if (LE_FAILURE(success)) { return; diff --git a/icuSources/layout/ArabicLayoutEngine.h b/icuSources/layout/ArabicLayoutEngine.h index 3a115567..68378985 100644 --- a/icuSources/layout/ArabicLayoutEngine.h +++ b/icuSources/layout/ArabicLayoutEngine.h @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -44,12 +44,12 @@ public: * * @see LayoutEngine::layoutEngineFactory * @see OpenTypeLayoutEngine - * @see ScriptAndLangaugeTags.h for script and language codes + * @see ScriptAndLanguageTags.h for script and language codes * * @internal */ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable); + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); /** * This constructor is used when the font requires a "canned" GSUB table which can't be known @@ -60,11 +60,12 @@ public: * @param langaugeCode - the language * * @see OpenTypeLayoutEngine - * @see ScriptAndLangaugeTags.h for script and language codes + * @see ScriptAndLanguageTags.h for script and language codes * * @internal */ - ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); /** * The destructor, virtual for correct polymorphic invocation. @@ -164,7 +165,8 @@ public: * * @internal */ - UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); /** * The destructor, virtual for correct polymorphic invocation. @@ -205,13 +207,14 @@ protected: * @param count - the number of characters to be mapped * @param reverse - if <code>TRUE</code>, the output will be in reverse order * @param mirror - if <code>TRUE</code>, do character mirroring + * @param filterZeroWidth - if <code>TRUE</code> replace ZWJ / ZWNJ with a glyph with no contours. * @param glyphStorage - the glyph storage object. Glyph and char index arrays will be updated. * * @param success - set to an error code if the operation fails * * @internal */ - virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, + virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage, LEErrorCode &success); /** diff --git a/icuSources/layout/ArabicShaping.cpp b/icuSources/layout/ArabicShaping.cpp index c26bb57e..f8692ed1 100644 --- a/icuSources/layout/ArabicShaping.cpp +++ b/icuSources/layout/ArabicShaping.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -8,35 +8,20 @@ #include "OpenTypeTables.h" #include "ArabicShaping.h" #include "LEGlyphStorage.h" +#include "ClassDefinitionTables.h" U_NAMESPACE_BEGIN -enum { - _c_ = ArabicShaping::ST_NOSHAPE_DUAL, - _d_ = ArabicShaping::ST_DUAL, - _n_ = ArabicShaping::ST_NONE, - _r_ = ArabicShaping::ST_RIGHT, - _t_ = ArabicShaping::ST_TRANSPARENT, - _x_ = ArabicShaping::ST_NOSHAPE_NONE -}; - +// This table maps Unicode joining types to +// ShapeTypes. const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] = { - _t_, _t_, _t_, _t_, _t_, _t_, _x_, _x_, _x_, _x_, _x_, _n_, _x_, _x_, _x_, _n_, // 0x610 - 0x61f - _x_, _n_, _r_, _r_, _r_, _r_, _d_, _r_, _d_, _r_, _d_, _d_, _d_, _d_, _d_, _r_, // 0x620 - 0x62f - _r_, _r_, _r_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _x_, _x_, _x_, _x_, _x_, // 0x630 - 0x63f - _c_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _r_, _d_, _d_, _t_, _t_, _t_, _t_, _t_, // 0x640 - 0x64f - _t_, _t_, _t_, _t_, _t_, _t_, _t_, _t_, _t_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, // 0x650 - 0x65f - _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _d_, _d_, // 0x660 - 0x66f - _t_, _r_, _r_, _r_, _n_, _r_, _r_, _r_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x670 - 0x67f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, // 0x680 - 0x68f - _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x690 - 0x69f - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x6a0 - 0x6af - _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x6b0 - 0x6bf - _r_, _d_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _r_, _d_, _r_, _d_, _r_, // 0x6c0 - 0x6cf - _d_, _d_, _r_, _r_, _n_, _r_, _t_, _t_, _t_, _t_, _t_, _t_, _t_, _x_, _t_, _t_, // 0x6d0 - 0x6df - _t_, _t_, _t_, _t_, _t_, _n_, _n_, _t_, _t_, _n_, _t_, _t_, _t_, _t_, _r_, _r_, // 0x6e0 - 0x6ef - _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _d_, _d_, _d_, _n_, _n_, _d_ // 0x6f0 - 0x6ff + ArabicShaping::ST_NOSHAPE_NONE, // [U] + ArabicShaping::ST_NOSHAPE_DUAL, // [C] + ArabicShaping::ST_DUAL, // [D] + ArabicShaping::ST_LEFT, // [L] + ArabicShaping::ST_RIGHT, // [R] + ArabicShaping::ST_TRANSPARENT // [T] }; /* @@ -48,76 +33,90 @@ const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] = */ ArabicShaping::ShapeType ArabicShaping::getShapeType(LEUnicode c) { - if (c >= 0x0610 && c <= 0x206f) { - if (c < 0x0700) { - return shapeTypes[c - 0x0610]; - } else if (c == 0x200c) { // ZWNJ - return ST_NOSHAPE_NONE; - } else if (c == 0x200d) { // ZWJ - return ST_NOSHAPE_DUAL; - } else if (c >= 0x202a && c <= 0x202e) { // LRE - RLO - return ST_TRANSPARENT; - } else if (c >= 0x206a && c <= 0x206f) { // Inhibit Symmetric Swapping - Nominal Digit Shapes - return ST_TRANSPARENT; - } + const ClassDefinitionTable *joiningTypes = (const ClassDefinitionTable *) ArabicShaping::shapingTypeTable; + le_int32 joiningType = joiningTypes->getGlyphClass(c); + + if (joiningType >= 0 && joiningType < ArabicShaping::JT_COUNT) { + return ArabicShaping::shapeTypes[joiningType]; } - return ST_NOSHAPE_NONE; + return ArabicShaping::ST_NOSHAPE_NONE; } -static const LETag isolFeatureTag = LE_ISOL_FEATURE_TAG; -static const LETag initFeatureTag = LE_INIT_FEATURE_TAG; -static const LETag mediFeatureTag = LE_MEDI_FEATURE_TAG; -static const LETag finaFeatureTag = LE_FINA_FEATURE_TAG; -static const LETag ligaFeatureTag = LE_LIGA_FEATURE_TAG; -static const LETag msetFeatureTag = LE_MSET_FEATURE_TAG; -static const LETag markFeatureTag = LE_MARK_FEATURE_TAG; -static const LETag ccmpFeatureTag = LE_CCMP_FEATURE_TAG; -static const LETag rligFeatureTag = LE_RLIG_FEATURE_TAG; -static const LETag caltFeatureTag = LE_CALT_FEATURE_TAG; -static const LETag dligFeatureTag = LE_DLIG_FEATURE_TAG; -static const LETag cswhFeatureTag = LE_CSWH_FEATURE_TAG; -static const LETag cursFeatureTag = LE_CURS_FEATURE_TAG; -static const LETag kernFeatureTag = LE_KERN_FEATURE_TAG; -static const LETag mkmkFeatureTag = LE_MKMK_FEATURE_TAG; - -static const LETag emptyTag = 0x00000000; // '' - -static const LETag featureOrder[] = -{ - ccmpFeatureTag, isolFeatureTag, finaFeatureTag, mediFeatureTag, initFeatureTag, rligFeatureTag, - caltFeatureTag, ligaFeatureTag, dligFeatureTag, cswhFeatureTag, msetFeatureTag, cursFeatureTag, - kernFeatureTag, markFeatureTag, mkmkFeatureTag, emptyTag +#define isolFeatureTag LE_ISOL_FEATURE_TAG +#define initFeatureTag LE_INIT_FEATURE_TAG +#define mediFeatureTag LE_MEDI_FEATURE_TAG +#define finaFeatureTag LE_FINA_FEATURE_TAG +#define ligaFeatureTag LE_LIGA_FEATURE_TAG +#define msetFeatureTag LE_MSET_FEATURE_TAG +#define markFeatureTag LE_MARK_FEATURE_TAG +#define ccmpFeatureTag LE_CCMP_FEATURE_TAG +#define rligFeatureTag LE_RLIG_FEATURE_TAG +#define caltFeatureTag LE_CALT_FEATURE_TAG +#define dligFeatureTag LE_DLIG_FEATURE_TAG +#define cswhFeatureTag LE_CSWH_FEATURE_TAG +#define cursFeatureTag LE_CURS_FEATURE_TAG +#define kernFeatureTag LE_KERN_FEATURE_TAG +#define mkmkFeatureTag LE_MKMK_FEATURE_TAG + +// NOTE: +// The isol, fina, init and medi features must be +// defined in the above order, and have masks that +// are all in the same nibble. +#define isolFeatureMask 0x80000000UL +#define finaFeatureMask 0x40000000UL +#define initFeatureMask 0x20000000UL +#define mediFeatureMask 0x10000000UL +#define ccmpFeatureMask 0x08000000UL +#define rligFeatureMask 0x04000000UL +#define caltFeatureMask 0x02000000UL +#define ligaFeatureMask 0x01000000UL +#define dligFeatureMask 0x00800000UL +#define cswhFeatureMask 0x00400000UL +#define msetFeatureMask 0x00200000UL +#define cursFeatureMask 0x00100000UL +#define kernFeatureMask 0x00080000UL +#define markFeatureMask 0x00040000UL +#define mkmkFeatureMask 0x00020000UL + +#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask) + +#define SHAPE_MASK 0xF0000000UL + +static const FeatureMap featureMap[] = { + {ccmpFeatureTag, ccmpFeatureMask}, + {isolFeatureTag, isolFeatureMask}, + {finaFeatureTag, finaFeatureMask}, + {mediFeatureTag, mediFeatureMask}, + {initFeatureTag, initFeatureMask}, + {rligFeatureTag, rligFeatureMask}, + {caltFeatureTag, caltFeatureMask}, + {ligaFeatureTag, ligaFeatureMask}, + {dligFeatureTag, dligFeatureMask}, + {cswhFeatureTag, cswhFeatureMask}, + {msetFeatureTag, msetFeatureMask}, + {cursFeatureTag, cursFeatureMask}, + {kernFeatureTag, kernFeatureMask}, + {markFeatureTag, markFeatureMask}, + {mkmkFeatureTag, mkmkFeatureMask} }; -const LETag ArabicShaping::tagArray[] = +const FeatureMap *ArabicShaping::getFeatureMap(le_int32 &count) { - isolFeatureTag, ligaFeatureTag, msetFeatureTag, markFeatureTag, ccmpFeatureTag, rligFeatureTag, - caltFeatureTag, dligFeatureTag, cswhFeatureTag, cursFeatureTag, kernFeatureTag, mkmkFeatureTag, emptyTag, - - finaFeatureTag, ligaFeatureTag, msetFeatureTag, markFeatureTag, ccmpFeatureTag, rligFeatureTag, - caltFeatureTag, dligFeatureTag, cswhFeatureTag, cursFeatureTag, kernFeatureTag, mkmkFeatureTag, emptyTag, + count = LE_ARRAY_SIZE(featureMap); - initFeatureTag, ligaFeatureTag, msetFeatureTag, markFeatureTag, ccmpFeatureTag, rligFeatureTag, - caltFeatureTag, dligFeatureTag, cswhFeatureTag, cursFeatureTag, kernFeatureTag, mkmkFeatureTag, emptyTag, - - mediFeatureTag, ligaFeatureTag, msetFeatureTag, markFeatureTag, ccmpFeatureTag, rligFeatureTag, - caltFeatureTag, dligFeatureTag, cswhFeatureTag, cursFeatureTag, kernFeatureTag, mkmkFeatureTag, emptyTag -}; - -#define TAGS_PER_GLYPH ((sizeof ArabicShaping::tagArray / sizeof ArabicShaping::tagArray[0]) / 4) - -const LETag *ArabicShaping::getFeatureOrder() -{ - return featureOrder; + return featureMap; } void ArabicShaping::adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage) { LEErrorCode success = LE_NO_ERROR; - const LETag *glyphTags = (const LETag *) glyphStorage.getAuxData(outIndex, success); + FeatureMask featureMask = (FeatureMask) glyphStorage.getAuxData(outIndex, success); + FeatureMask shape = featureMask & SHAPE_MASK; + + shape >>= shapeOffset; - glyphStorage.setAuxData(outIndex, (void *) &glyphTags[TAGS_PER_GLYPH * shapeOffset], success); + glyphStorage.setAuxData(outIndex, ((featureMask & ~SHAPE_MASK) | shape), success); } void ArabicShaping::shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax, @@ -174,7 +173,7 @@ void ArabicShaping::shape(const LEUnicode *chars, le_int32 offset, le_int32 char LEUnicode c = chars[in]; ShapeType t = getShapeType(c); - glyphStorage.setAuxData(out, (void *) tagArray, success); + glyphStorage.setAuxData(out, ISOL_FEATURES, success); if ((t & MASK_TRANSPARENT) != 0) { continue; diff --git a/icuSources/layout/ArabicShaping.h b/icuSources/layout/ArabicShaping.h index 9a1ad899..9bf5acad 100644 --- a/icuSources/layout/ArabicShaping.h +++ b/icuSources/layout/ArabicShaping.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -21,6 +21,18 @@ class LEGlyphStorage; class ArabicShaping /* not : public UObject because all methods are static */ { public: + // Joining types + enum JoiningTypes + { + JT_NON_JOINING = 0, + JT_JOIN_CAUSING = 1, + JT_DUAL_JOINING = 2, + JT_LEFT_JOINING = 3, + JT_RIGHT_JOINING = 4, + JT_TRANSPARENT = 5, + JT_COUNT = 6 + }; + // shaping bit masks enum ShapingBitMasks { @@ -47,16 +59,15 @@ public: static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax, le_bool rightToLeft, LEGlyphStorage &glyphStorage); - static const LETag *getFeatureOrder(); + static const FeatureMap *getFeatureMap(le_int32 &count); private: // forbid instantiation ArabicShaping(); - static const LETag tagArray[]; - static ShapeType getShapeType(LEUnicode c); + static const le_uint8 shapingTypeTable[]; static const ShapeType shapeTypes[]; static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage); diff --git a/icuSources/layout/AttachmentPosnSubtables.h b/icuSources/layout/AttachmentPosnSubtables.h index 12849e4f..7f8406dc 100644 --- a/icuSources/layout/AttachmentPosnSubtables.h +++ b/icuSources/layout/AttachmentPosnSubtables.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -27,7 +27,8 @@ struct AttachmentPositioningSubtable : GlyphPositioningSubtable Offset markArrayOffset; Offset baseArrayOffset; - le_int32 getBaseCoverage(LEGlyphID baseGlyphId) const; + inline le_int32 getBaseCoverage(LEGlyphID baseGlyphId) const; + le_uint32 process(GlyphIterator *glyphIterator) const; }; diff --git a/icuSources/layout/CanonData.cpp b/icuSources/layout/CanonData.cpp index 42fc268c..c341c623 100644 --- a/icuSources/layout/CanonData.cpp +++ b/icuSources/layout/CanonData.cpp @@ -1,9 +1,11 @@ /* * - * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved. * * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 03/31/2005 08:15:27 AM HST */ #include "LETypes.h" @@ -3658,22 +3660,95 @@ const le_uint8 CanonShaping::glyphSubstitutionTable[] = { }; const le_uint8 CanonShaping::glyphDefinitionTable[] = { - 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x27, - 0x06, 0x0C, 0x06, 0x0F, 0x00, 0x01, 0x06, 0x10, 0x06, 0x15, 0x00, 0x03, 0x06, 0x1B, 0x06, 0x1B, - 0x00, 0x01, 0x06, 0x1F, 0x06, 0x1F, 0x00, 0x01, 0x06, 0x21, 0x06, 0x21, 0x00, 0x01, 0x06, 0x22, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x28, + 0x06, 0x0B, 0x06, 0x0F, 0x00, 0x01, 0x06, 0x10, 0x06, 0x15, 0x00, 0x03, 0x06, 0x1B, 0x06, 0x1B, + 0x00, 0x01, 0x06, 0x1E, 0x06, 0x1F, 0x00, 0x01, 0x06, 0x21, 0x06, 0x21, 0x00, 0x01, 0x06, 0x22, 0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x3A, 0x00, 0x01, 0x06, 0x40, 0x06, 0x4A, 0x00, 0x01, - 0x06, 0x4B, 0x06, 0x58, 0x00, 0x03, 0x06, 0x60, 0x06, 0x6F, 0x00, 0x01, 0x06, 0x70, 0x06, 0x70, + 0x06, 0x4B, 0x06, 0x5E, 0x00, 0x03, 0x06, 0x60, 0x06, 0x6F, 0x00, 0x01, 0x06, 0x70, 0x06, 0x70, 0x00, 0x03, 0x06, 0x71, 0x06, 0xBF, 0x00, 0x01, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x02, 0x06, 0xC1, 0x06, 0xC1, 0x00, 0x01, 0x06, 0xC2, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 0x06, 0xD2, 0x00, 0x01, 0x06, 0xD3, 0x06, 0xD3, 0x00, 0x02, 0x06, 0xD4, 0x06, 0xD5, 0x00, 0x01, 0x06, 0xD6, 0x06, 0xDC, 0x00, 0x03, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x03, 0x06, 0xE5, 0x06, 0xE6, 0x00, 0x01, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x03, 0x06, 0xE9, 0x06, 0xE9, 0x00, 0x01, 0x06, 0xEA, 0x06, 0xED, 0x00, 0x03, - 0x06, 0xEE, 0x06, 0xFF, 0x00, 0x01, 0xFB, 0x50, 0xFB, 0xB1, 0x00, 0x01, 0xFB, 0xD3, 0xFB, 0xDC, - 0x00, 0x01, 0xFB, 0xDD, 0xFB, 0xDD, 0x00, 0x02, 0xFB, 0xDE, 0xFB, 0xE9, 0x00, 0x01, 0xFB, 0xEA, - 0xFB, 0xFB, 0x00, 0x02, 0xFB, 0xFC, 0xFB, 0xFF, 0x00, 0x01, 0xFC, 0x00, 0xFC, 0x5D, 0x00, 0x02, - 0xFC, 0x64, 0xFC, 0xF1, 0x00, 0x02, 0xFC, 0xF5, 0xFD, 0x3D, 0x00, 0x02, 0xFD, 0x50, 0xFD, 0x8F, - 0x00, 0x02, 0xFD, 0x92, 0xFD, 0xC7, 0x00, 0x02, 0xFD, 0xF0, 0xFD, 0xFC, 0x00, 0x02, 0xFE, 0x80, - 0xFE, 0xF4, 0x00, 0x01, 0xFE, 0xF5, 0xFE, 0xFC, 0x00, 0x02 + 0x06, 0xEE, 0x06, 0xFF, 0x00, 0x01, 0x07, 0x50, 0x07, 0x6D, 0x00, 0x01, 0xFB, 0x50, 0xFB, 0xB1, + 0x00, 0x01, 0xFB, 0xD3, 0xFB, 0xDC, 0x00, 0x01, 0xFB, 0xDD, 0xFB, 0xDD, 0x00, 0x02, 0xFB, 0xDE, + 0xFB, 0xE9, 0x00, 0x01, 0xFB, 0xEA, 0xFB, 0xFB, 0x00, 0x02, 0xFB, 0xFC, 0xFB, 0xFF, 0x00, 0x01, + 0xFC, 0x00, 0xFC, 0x5D, 0x00, 0x02, 0xFC, 0x64, 0xFC, 0xF1, 0x00, 0x02, 0xFC, 0xF5, 0xFD, 0x3D, + 0x00, 0x02, 0xFD, 0x50, 0xFD, 0x8F, 0x00, 0x02, 0xFD, 0x92, 0xFD, 0xC7, 0x00, 0x02, 0xFD, 0xF0, + 0xFD, 0xFC, 0x00, 0x02, 0xFE, 0x80, 0xFE, 0xF4, 0x00, 0x01, 0xFE, 0xF5, 0xFE, 0xFC, 0x00, 0x02, + 0x00, 0x02, 0x00, 0xC1, 0x03, 0x00, 0x03, 0x14, 0x00, 0xE6, 0x03, 0x15, 0x03, 0x15, 0x00, 0xE8, + 0x03, 0x16, 0x03, 0x19, 0x00, 0xDC, 0x03, 0x1A, 0x03, 0x1A, 0x00, 0xE8, 0x03, 0x1B, 0x03, 0x1B, + 0x00, 0xD8, 0x03, 0x1C, 0x03, 0x20, 0x00, 0xDC, 0x03, 0x21, 0x03, 0x22, 0x00, 0xCA, 0x03, 0x23, + 0x03, 0x26, 0x00, 0xDC, 0x03, 0x27, 0x03, 0x28, 0x00, 0xCA, 0x03, 0x29, 0x03, 0x33, 0x00, 0xDC, + 0x03, 0x34, 0x03, 0x38, 0x00, 0x01, 0x03, 0x39, 0x03, 0x3C, 0x00, 0xDC, 0x03, 0x3D, 0x03, 0x44, + 0x00, 0xE6, 0x03, 0x45, 0x03, 0x45, 0x00, 0xF0, 0x03, 0x46, 0x03, 0x46, 0x00, 0xE6, 0x03, 0x47, + 0x03, 0x49, 0x00, 0xDC, 0x03, 0x4A, 0x03, 0x4C, 0x00, 0xE6, 0x03, 0x4D, 0x03, 0x4E, 0x00, 0xDC, + 0x03, 0x50, 0x03, 0x52, 0x00, 0xE6, 0x03, 0x53, 0x03, 0x56, 0x00, 0xDC, 0x03, 0x57, 0x03, 0x57, + 0x00, 0xE6, 0x03, 0x58, 0x03, 0x58, 0x00, 0xE8, 0x03, 0x59, 0x03, 0x5A, 0x00, 0xDC, 0x03, 0x5B, + 0x03, 0x5B, 0x00, 0xE6, 0x03, 0x5C, 0x03, 0x5C, 0x00, 0xE9, 0x03, 0x5D, 0x03, 0x5E, 0x00, 0xEA, + 0x03, 0x5F, 0x03, 0x5F, 0x00, 0xE9, 0x03, 0x60, 0x03, 0x61, 0x00, 0xEA, 0x03, 0x62, 0x03, 0x62, + 0x00, 0xE9, 0x03, 0x63, 0x03, 0x6F, 0x00, 0xE6, 0x04, 0x83, 0x04, 0x86, 0x00, 0xE6, 0x05, 0x91, + 0x05, 0x91, 0x00, 0xDC, 0x05, 0x92, 0x05, 0x95, 0x00, 0xE6, 0x05, 0x96, 0x05, 0x96, 0x00, 0xDC, + 0x05, 0x97, 0x05, 0x98, 0x00, 0xE6, 0x05, 0x99, 0x05, 0x99, 0x00, 0xE8, 0x05, 0x9A, 0x05, 0x9A, + 0x00, 0xDE, 0x05, 0x9B, 0x05, 0x9B, 0x00, 0xDC, 0x05, 0x9C, 0x05, 0xA1, 0x00, 0xE6, 0x05, 0xA2, + 0x05, 0xA7, 0x00, 0xDC, 0x05, 0xA8, 0x05, 0xA8, 0x00, 0xE6, 0x05, 0xA9, 0x05, 0xA9, 0x00, 0xE8, + 0x05, 0xAA, 0x05, 0xAA, 0x00, 0xDC, 0x05, 0xAB, 0x05, 0xAC, 0x00, 0xE6, 0x05, 0xAD, 0x05, 0xAD, + 0x00, 0xDE, 0x05, 0xAE, 0x05, 0xAE, 0x00, 0xE8, 0x05, 0xAF, 0x05, 0xAF, 0x00, 0xE6, 0x05, 0xB0, + 0x05, 0xB8, 0x00, 0xDC, 0x05, 0xB9, 0x05, 0xB9, 0x00, 0x1B, 0x05, 0xBB, 0x05, 0xBB, 0x00, 0xDC, + 0x05, 0xBC, 0x05, 0xBC, 0x00, 0x15, 0x05, 0xBD, 0x05, 0xBD, 0x00, 0xDC, 0x05, 0xBF, 0x05, 0xBF, + 0x00, 0x17, 0x05, 0xC1, 0x05, 0xC1, 0x00, 0x0A, 0x05, 0xC2, 0x05, 0xC2, 0x00, 0x0B, 0x05, 0xC4, + 0x05, 0xC4, 0x00, 0xE6, 0x05, 0xC5, 0x05, 0xC5, 0x00, 0xDC, 0x05, 0xC7, 0x05, 0xC7, 0x00, 0x12, + 0x06, 0x10, 0x06, 0x15, 0x00, 0xE6, 0x06, 0x4B, 0x06, 0x4C, 0x00, 0x1F, 0x06, 0x4D, 0x06, 0x4D, + 0x00, 0x1E, 0x06, 0x4E, 0x06, 0x4F, 0x00, 0x1F, 0x06, 0x50, 0x06, 0x50, 0x00, 0x1E, 0x06, 0x51, + 0x06, 0x51, 0x00, 0x1C, 0x06, 0x52, 0x06, 0x52, 0x00, 0x1F, 0x06, 0x53, 0x06, 0x53, 0x00, 0x20, + 0x06, 0x54, 0x06, 0x55, 0x00, 0x1B, 0x06, 0x56, 0x06, 0x56, 0x00, 0x1D, 0x06, 0x57, 0x06, 0x58, + 0x00, 0x1F, 0x06, 0x59, 0x06, 0x5B, 0x00, 0xE6, 0x06, 0x5C, 0x06, 0x5C, 0x00, 0xDC, 0x06, 0x5D, + 0x06, 0x5E, 0x00, 0xE6, 0x06, 0x70, 0x06, 0x70, 0x00, 0x1D, 0x06, 0xD6, 0x06, 0xDC, 0x00, 0xE6, + 0x06, 0xDF, 0x06, 0xE0, 0x00, 0xE6, 0x06, 0xE1, 0x06, 0xE1, 0x00, 0x1F, 0x06, 0xE2, 0x06, 0xE2, + 0x00, 0xE6, 0x06, 0xE3, 0x06, 0xE3, 0x00, 0xDC, 0x06, 0xE4, 0x06, 0xE4, 0x00, 0xE6, 0x06, 0xE7, + 0x06, 0xE8, 0x00, 0xE6, 0x06, 0xEA, 0x06, 0xEA, 0x00, 0xDC, 0x06, 0xEB, 0x06, 0xEC, 0x00, 0xE6, + 0x06, 0xED, 0x06, 0xED, 0x00, 0xDC, 0x07, 0x11, 0x07, 0x11, 0x00, 0x24, 0x07, 0x30, 0x07, 0x30, + 0x00, 0xE6, 0x07, 0x31, 0x07, 0x31, 0x00, 0xDC, 0x07, 0x32, 0x07, 0x33, 0x00, 0xE6, 0x07, 0x34, + 0x07, 0x34, 0x00, 0xDC, 0x07, 0x35, 0x07, 0x36, 0x00, 0xE6, 0x07, 0x37, 0x07, 0x39, 0x00, 0xDC, + 0x07, 0x3A, 0x07, 0x3A, 0x00, 0xE6, 0x07, 0x3B, 0x07, 0x3C, 0x00, 0xDC, 0x07, 0x3D, 0x07, 0x3D, + 0x00, 0xE6, 0x07, 0x3E, 0x07, 0x3E, 0x00, 0xDC, 0x07, 0x3F, 0x07, 0x41, 0x00, 0xE6, 0x07, 0x42, + 0x07, 0x42, 0x00, 0xDC, 0x07, 0x43, 0x07, 0x43, 0x00, 0xE6, 0x07, 0x44, 0x07, 0x44, 0x00, 0xDC, + 0x07, 0x45, 0x07, 0x45, 0x00, 0xE6, 0x07, 0x46, 0x07, 0x46, 0x00, 0xDC, 0x07, 0x47, 0x07, 0x47, + 0x00, 0xE6, 0x07, 0x48, 0x07, 0x48, 0x00, 0xDC, 0x07, 0x49, 0x07, 0x4A, 0x00, 0xE6, 0x09, 0x3C, + 0x09, 0x3C, 0x00, 0x07, 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x09, 0x09, 0x51, 0x09, 0x51, 0x00, 0xE6, + 0x09, 0x52, 0x09, 0x52, 0x00, 0xDC, 0x09, 0x53, 0x09, 0x54, 0x00, 0xE6, 0x09, 0xBC, 0x09, 0xBC, + 0x00, 0x07, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x09, 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x07, 0x0A, 0x4D, + 0x0A, 0x4D, 0x00, 0x09, 0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x07, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x09, + 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x07, 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x09, 0x0B, 0xCD, 0x0B, 0xCD, + 0x00, 0x09, 0x0C, 0x4D, 0x0C, 0x4D, 0x00, 0x09, 0x0C, 0x55, 0x0C, 0x55, 0x00, 0x54, 0x0C, 0x56, + 0x0C, 0x56, 0x00, 0x5B, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x07, 0x0C, 0xCD, 0x0C, 0xCD, 0x00, 0x09, + 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x09, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x09, 0x0E, 0x38, 0x0E, 0x39, + 0x00, 0x67, 0x0E, 0x3A, 0x0E, 0x3A, 0x00, 0x09, 0x0E, 0x48, 0x0E, 0x4B, 0x00, 0x6B, 0x0E, 0xB8, + 0x0E, 0xB9, 0x00, 0x76, 0x0E, 0xC8, 0x0E, 0xCB, 0x00, 0x7A, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0xDC, + 0x0F, 0x35, 0x0F, 0x35, 0x00, 0xDC, 0x0F, 0x37, 0x0F, 0x37, 0x00, 0xDC, 0x0F, 0x39, 0x0F, 0x39, + 0x00, 0xD8, 0x0F, 0x71, 0x0F, 0x71, 0x00, 0x81, 0x0F, 0x72, 0x0F, 0x72, 0x00, 0x82, 0x0F, 0x74, + 0x0F, 0x74, 0x00, 0x84, 0x0F, 0x7A, 0x0F, 0x7D, 0x00, 0x82, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x82, + 0x0F, 0x82, 0x0F, 0x83, 0x00, 0xE6, 0x0F, 0x84, 0x0F, 0x84, 0x00, 0x09, 0x0F, 0x86, 0x0F, 0x87, + 0x00, 0xE6, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0xDC, 0x10, 0x37, 0x10, 0x37, 0x00, 0x07, 0x10, 0x39, + 0x10, 0x39, 0x00, 0x09, 0x13, 0x5F, 0x13, 0x5F, 0x00, 0xE6, 0x17, 0x14, 0x17, 0x14, 0x00, 0x09, + 0x17, 0x34, 0x17, 0x34, 0x00, 0x09, 0x17, 0xD2, 0x17, 0xD2, 0x00, 0x09, 0x17, 0xDD, 0x17, 0xDD, + 0x00, 0xE6, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0xE4, 0x19, 0x39, 0x19, 0x39, 0x00, 0xDE, 0x19, 0x3A, + 0x19, 0x3A, 0x00, 0xE6, 0x19, 0x3B, 0x19, 0x3B, 0x00, 0xDC, 0x1A, 0x17, 0x1A, 0x17, 0x00, 0xE6, + 0x1A, 0x18, 0x1A, 0x18, 0x00, 0xDC, 0x1D, 0xC0, 0x1D, 0xC1, 0x00, 0xE6, 0x1D, 0xC2, 0x1D, 0xC2, + 0x00, 0xDC, 0x1D, 0xC3, 0x1D, 0xC3, 0x00, 0xE6, 0x20, 0xD0, 0x20, 0xD1, 0x00, 0xE6, 0x20, 0xD2, + 0x20, 0xD3, 0x00, 0x01, 0x20, 0xD4, 0x20, 0xD7, 0x00, 0xE6, 0x20, 0xD8, 0x20, 0xDA, 0x00, 0x01, + 0x20, 0xDB, 0x20, 0xDC, 0x00, 0xE6, 0x20, 0xE1, 0x20, 0xE1, 0x00, 0xE6, 0x20, 0xE5, 0x20, 0xE6, + 0x00, 0x01, 0x20, 0xE7, 0x20, 0xE7, 0x00, 0xE6, 0x20, 0xE8, 0x20, 0xE8, 0x00, 0xDC, 0x20, 0xE9, + 0x20, 0xE9, 0x00, 0xE6, 0x20, 0xEA, 0x20, 0xEB, 0x00, 0x01, 0x30, 0x2A, 0x30, 0x2A, 0x00, 0xDA, + 0x30, 0x2B, 0x30, 0x2B, 0x00, 0xE4, 0x30, 0x2C, 0x30, 0x2C, 0x00, 0xE8, 0x30, 0x2D, 0x30, 0x2D, + 0x00, 0xDE, 0x30, 0x2E, 0x30, 0x2F, 0x00, 0xE0, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x08, 0xA8, 0x06, + 0xA8, 0x06, 0x00, 0x09, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x1A, 0xFE, 0x20, 0xFE, 0x23, 0x00, 0xE6, + 0x0A, 0x0D, 0x0A, 0x0D, 0x00, 0xDC, 0x0A, 0x0F, 0x0A, 0x0F, 0x00, 0xE6, 0x0A, 0x38, 0x0A, 0x38, + 0x00, 0xE6, 0x0A, 0x39, 0x0A, 0x39, 0x00, 0x01, 0x0A, 0x3A, 0x0A, 0x3A, 0x00, 0xDC, 0x0A, 0x3F, + 0x0A, 0x3F, 0x00, 0x09, 0xD1, 0x65, 0xD1, 0x66, 0x00, 0xD8, 0xD1, 0x67, 0xD1, 0x69, 0x00, 0x01, + 0xD1, 0x6D, 0xD1, 0x6D, 0x00, 0xE2, 0xD1, 0x6E, 0xD1, 0x72, 0x00, 0xD8, 0xD1, 0x7B, 0xD1, 0x82, + 0x00, 0xDC, 0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA, + 0xD1, 0xAD, 0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6 }; U_NAMESPACE_END diff --git a/icuSources/layout/CanonShaping.cpp b/icuSources/layout/CanonShaping.cpp new file mode 100644 index 00000000..ea109a77 --- /dev/null +++ b/icuSources/layout/CanonShaping.cpp @@ -0,0 +1,81 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + */ + +#include "LETypes.h" +#include "LEGlyphStorage.h" +#include "CanonShaping.h" +#include "GlyphDefinitionTables.h" +#include "ClassDefinitionTables.h" + +U_NAMESPACE_BEGIN + +void CanonShaping::sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit) +{ + for (le_int32 j = index + 1; j < limit; j += 1) { + le_int32 i; + le_int32 v = indices[j]; + le_int32 c = combiningClasses[v]; + + for (i = j - 1; i >= index; i -= 1) { + if (c >= combiningClasses[indices[i]]) { + break; + } + + indices[i + 1] = indices[i]; + } + + indices[i + 1] = v; + } +} + +void CanonShaping::reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft, + LEUnicode *outChars, LEGlyphStorage &glyphStorage) +{ + const GlyphDefinitionTableHeader *gdefTable = (const GlyphDefinitionTableHeader *) glyphDefinitionTable; + const ClassDefinitionTable *classTable = gdefTable->getMarkAttachClassDefinitionTable(); + le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount); + le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount); + LEErrorCode status = LE_NO_ERROR; + le_int32 i; + + for (i = 0; i < charCount; i += 1) { + combiningClasses[i] = classTable->getGlyphClass((LEGlyphID) inChars[i]); + indices[i] = i; + } + + for (i = 0; i < charCount; i += 1) { + if (combiningClasses[i] != 0) { + le_int32 mark; + + for (mark = i; mark < charCount; mark += 1) { + if (combiningClasses[mark] == 0) { + break; + } + } + + sortMarks(indices, combiningClasses, i, mark); + } + } + + le_int32 out = 0, dir = 1; + + if (rightToLeft) { + out = charCount - 1; + dir = -1; + } + + for (i = 0; i < charCount; i += 1, out += dir) { + le_int32 index = indices[i]; + + outChars[i] = inChars[index]; + glyphStorage.setCharIndex(out, index, status); + } + + LE_DELETE_ARRAY(indices); + LE_DELETE_ARRAY(combiningClasses); +} + +U_NAMESPACE_END diff --git a/icuSources/layout/CanonShaping.h b/icuSources/layout/CanonShaping.h index 6b6c82aa..cdf19595 100644 --- a/icuSources/layout/CanonShaping.h +++ b/icuSources/layout/CanonShaping.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -11,11 +11,19 @@ U_NAMESPACE_BEGIN -class CanonShaping /* not : public UObject because all members are static */ +class LEGlyphStorage; + +class U_LAYOUT_API CanonShaping /* not : public UObject because all members are static */ { public: static const le_uint8 glyphSubstitutionTable[]; static const le_uint8 glyphDefinitionTable[]; + + static void reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft, + LEUnicode *outChars, LEGlyphStorage &glyphStorage); + +private: + static void sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit); }; U_NAMESPACE_END diff --git a/icuSources/layout/ContextualSubstSubtables.cpp b/icuSources/layout/ContextualSubstSubtables.cpp index a1541b9f..1d8f28c8 100644 --- a/icuSources/layout/ContextualSubstSubtables.cpp +++ b/icuSources/layout/ContextualSubstSubtables.cpp @@ -1,6 +1,5 @@ /* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -325,7 +324,11 @@ le_uint32 ChainingContextualSubstitutionSubtable::process(const LookupProcessor } } -static const LETag emptyTag = 0; +// NOTE: This could be a #define, but that seems to confuse +// the Visual Studio .NET 2003 compiler on the calls to the +// GlyphIterator constructor. It somehow can't decide if +// emptyFeatureList matches an le_uint32 or an le_uint16... +static const FeatureMask emptyFeatureList = 0x00000000UL; le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const @@ -342,7 +345,7 @@ le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LookupPro (const ChainSubRuleSetTable *) ((char *) this + chainSubRuleSetTableOffset); le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount); le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyTag); + GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) { Offset chainSubRuleTableOffset = @@ -414,7 +417,7 @@ le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LookupPro (const ChainSubClassSetTable *) ((char *) this + chainSubClassSetTableOffset); le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount); le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyTag); + GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) { Offset chainSubClassRuleTableOffset = @@ -476,7 +479,7 @@ le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LookupPro const Offset *lookaheadCoverageTableOffsetArray = &inputCoverageTableOffsetArray[inputGlyphCount + 1]; le_uint16 substCount = (le_uint16) SWAPW(lookaheadCoverageTableOffsetArray[lookaheadGlyphCount]); le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyTag); + GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); if (! tempIterator.prev(backtrkGlyphCount)) { return 0; diff --git a/icuSources/layout/CursiveAttachmentSubtables.cpp b/icuSources/layout/CursiveAttachmentSubtables.cpp index 3f4bf766..40c38fa4 100644 --- a/icuSources/layout/CursiveAttachmentSubtables.cpp +++ b/icuSources/layout/CursiveAttachmentSubtables.cpp @@ -1,18 +1,14 @@ /* - * %W% %E% - * - * (C) Copyright IBM Corp. 1998, 1999, 2000, 2001, 2002 - All Rights Reserved + * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved * */ #include "LETypes.h" -#include "LEFontInstance.h" #include "OpenTypeTables.h" #include "GlyphPositioningTables.h" #include "CursiveAttachmentSubtables.h" #include "AnchorTables.h" #include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" #include "OpenTypeUtilities.h" #include "LESwaps.h" @@ -25,72 +21,26 @@ le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const le_uint16 eeCount = SWAPW(entryExitCount); if (coverageIndex < 0 || coverageIndex >= eeCount) { - glyphIterator->resetCursiveLastExitPoint(); + glyphIterator->setCursiveGlyph(); return 0; } - LEPoint entryAnchor, exitAnchor, pixels; - - if (glyphIterator->hasCursiveLastExitPoint() && entryExitRecords[coverageIndex].entryAnchor != 0) { - Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor); + LEPoint entryAnchor, exitAnchor; + Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor); + Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor); + if (entryOffset != 0) { const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset); entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor); - glyphIterator->getCursiveLastExitPoint(exitAnchor); - - float anchorDiffX = exitAnchor.fX - entryAnchor.fX; - float anchorDiffY = exitAnchor.fY - entryAnchor.fY; - float baselineAdjustment = glyphIterator->getCursiveBaselineAdjustment(); - - if (glyphIterator->isRightToLeft()) { - LEPoint secondAdvance; - - fontInstance->getGlyphAdvance(glyphID, pixels); - fontInstance->pixelsToUnits(pixels, secondAdvance); - - glyphIterator->adjustCurrGlyphPositionAdjustment(0, anchorDiffY + baselineAdjustment, -(anchorDiffX + secondAdvance.fX), 0); - } else { - LEPoint firstAdvance; - - fontInstance->getGlyphAdvance(glyphIterator->getCursiveLastGlyphID(), pixels); - fontInstance->pixelsToUnits(pixels, firstAdvance); - - glyphIterator->adjustCursiveLastGlyphPositionAdjustment(0, 0, anchorDiffX - firstAdvance.fX, 0); - glyphIterator->adjustCurrGlyphPositionAdjustment(0, anchorDiffY + baselineAdjustment, 0, 0); - } - - glyphIterator->setCursiveBaselineAdjustment(anchorDiffY + baselineAdjustment); + glyphIterator->setCursiveEntryPoint(entryAnchor); } - Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor); - if (exitOffset != 0) { const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset); exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor); - - if (!glyphIterator->hasCursiveFirstExitPoint()) { - glyphIterator->setCursiveFirstExitPoint(); - } - - glyphIterator->setCursiveLastExitPoint(exitAnchor); - } else { - /* - * We've got a glyph which is covered but doesn't have an - * exit point. We call setCursiveLastExitPoint just to set - * the position of this glyph, then resetCursiveLastExitPoint - * to do any baseline adjustments that are required for the - * sequence of attached glyphs. - * - * NOTE: we don't really care about the value of - * extiAnchor, because after we reset the last exit - * point, it won't be used. This is a bit of a hack. - * There should probably be a setCursiveLastExitPoint - * call that doesn't take an anchor... - */ - glyphIterator->setCursiveLastExitPoint(exitAnchor); - glyphIterator->resetCursiveLastExitPoint(); + glyphIterator->setCursiveExitPoint(exitAnchor); } return 1; diff --git a/icuSources/layout/CursiveAttachmentSubtables.h b/icuSources/layout/CursiveAttachmentSubtables.h index f93b0f1a..5eefb2f9 100644 --- a/icuSources/layout/CursiveAttachmentSubtables.h +++ b/icuSources/layout/CursiveAttachmentSubtables.h @@ -1,7 +1,6 @@ /* - * %W% %E% * - * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -14,13 +13,14 @@ */ #include "LETypes.h" -#include "LEFontInstance.h" #include "OpenTypeTables.h" #include "GlyphPositioningTables.h" -#include "GlyphIterator.h" U_NAMESPACE_BEGIN +class LEFontInstance; +class GlyphIterator; + struct EntryExitRecord { Offset entryAnchor; diff --git a/icuSources/layout/DefaultCharMapper.h b/icuSources/layout/DefaultCharMapper.h index d2449fcb..d9aafdcb 100644 --- a/icuSources/layout/DefaultCharMapper.h +++ b/icuSources/layout/DefaultCharMapper.h @@ -1,7 +1,5 @@ /* - * %W% %W% - * - * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -36,6 +34,7 @@ private: static const le_int32 controlCharsCount; static const LEUnicode32 mirroredChars[]; + static const LEUnicode32 srahCderorrim[]; static const le_int32 mirroredCharsCount; diff --git a/icuSources/layout/DeviceTables.cpp b/icuSources/layout/DeviceTables.cpp index 1882ede5..a26b3be3 100644 --- a/icuSources/layout/DeviceTables.cpp +++ b/icuSources/layout/DeviceTables.cpp @@ -1,15 +1,13 @@ /* * @(#)DeviceTables.cpp 1.5 00/03/15 * - * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved * */ #include "LETypes.h" #include "OpenTypeTables.h" #include "DeviceTables.h" -#include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" #include "LESwaps.h" U_NAMESPACE_BEGIN diff --git a/icuSources/layout/DeviceTables.h b/icuSources/layout/DeviceTables.h index 2370b3c5..864bba1a 100644 --- a/icuSources/layout/DeviceTables.h +++ b/icuSources/layout/DeviceTables.h @@ -1,7 +1,7 @@ /* * @(#)DeviceTables.h 1.5 00/03/15 * - * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -15,8 +15,6 @@ #include "LETypes.h" #include "OpenTypeTables.h" -#include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" U_NAMESPACE_BEGIN diff --git a/icuSources/layout/GXLayoutEngine.cpp b/icuSources/layout/GXLayoutEngine.cpp index fbd36677..84327019 100644 --- a/icuSources/layout/GXLayoutEngine.cpp +++ b/icuSources/layout/GXLayoutEngine.cpp @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -17,7 +17,7 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine) GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable) - : LayoutEngine(fontInstance, scriptCode, languageCode), fMorphTable(morphTable) + : LayoutEngine(fontInstance, scriptCode, languageCode, 0), fMorphTable(morphTable) { // nothing else to do? } @@ -39,7 +39,7 @@ le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, return 0; } - mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, glyphStorage, success); + mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, TRUE, glyphStorage, success); if (LE_FAILURE(success)) { return 0; diff --git a/icuSources/layout/GlyphIterator.cpp b/icuSources/layout/GlyphIterator.cpp index 20bcc860..91c5d568 100644 --- a/icuSources/layout/GlyphIterator.cpp +++ b/icuSources/layout/GlyphIterator.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -15,12 +15,11 @@ U_NAMESPACE_BEGIN -GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustment *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags, LETag theFeatureTag, - const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader) +GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags, + FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader) : direction(1), position(-1), nextLimit(-1), prevLimit(-1), - cursiveFirstPosition(-1), cursiveLastPosition(-1), cursiveBaselineAdjustment(0), glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments), - srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureTag(theFeatureTag), + srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask), glyphClassDefinitionTable(NULL), markAttachClassDefinitionTable(NULL) { @@ -49,19 +48,16 @@ GlyphIterator::GlyphIterator(GlyphIterator &that) nextLimit = that.nextLimit; prevLimit = that.prevLimit; - cursiveFirstPosition = that.cursiveFirstPosition; - cursiveLastPosition = that.cursiveLastPosition; - glyphPositionAdjustments = that.glyphPositionAdjustments; srcIndex = that.srcIndex; destIndex = that.destIndex; lookupFlags = that.lookupFlags; - featureTag = that.featureTag; + featureMask = that.featureMask; glyphClassDefinitionTable = that.glyphClassDefinitionTable; markAttachClassDefinitionTable = that.markAttachClassDefinitionTable; } -GlyphIterator::GlyphIterator(GlyphIterator &that, LETag newFeatureTag) +GlyphIterator::GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask) : glyphStorage(that.glyphStorage) { direction = that.direction; @@ -69,14 +65,11 @@ GlyphIterator::GlyphIterator(GlyphIterator &that, LETag newFeatureTag) nextLimit = that.nextLimit; prevLimit = that.prevLimit; - cursiveFirstPosition = that.cursiveFirstPosition; - cursiveLastPosition = that.cursiveLastPosition; - glyphPositionAdjustments = that.glyphPositionAdjustments; srcIndex = that.srcIndex; destIndex = that.destIndex; lookupFlags = that.lookupFlags; - featureTag = newFeatureTag; + featureMask = newFeatureMask; glyphClassDefinitionTable = that.glyphClassDefinitionTable; markAttachClassDefinitionTable = that.markAttachClassDefinitionTable; } @@ -89,15 +82,11 @@ GlyphIterator::GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags) nextLimit = that.nextLimit; prevLimit = that.prevLimit; - - cursiveFirstPosition = that.cursiveFirstPosition; - cursiveLastPosition = that.cursiveLastPosition; - glyphPositionAdjustments = that.glyphPositionAdjustments; srcIndex = that.srcIndex; destIndex = that.destIndex; lookupFlags = newLookupFlags; - featureTag = that.featureTag; + featureMask = that.featureMask; glyphClassDefinitionTable = that.glyphClassDefinitionTable; markAttachClassDefinitionTable = that.markAttachClassDefinitionTable; } @@ -107,11 +96,11 @@ GlyphIterator::~GlyphIterator() // nothing to do, right? } -void GlyphIterator::reset(le_uint16 newLookupFlags, LETag newFeatureTag) +void GlyphIterator::reset(le_uint16 newLookupFlags, FeatureMask newFeatureMask) { - position = prevLimit; - featureTag = newFeatureTag; - lookupFlags = newLookupFlags; + position = prevLimit; + featureMask = newFeatureMask; + lookupFlags = newLookupFlags; } LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count) @@ -152,16 +141,6 @@ le_bool GlyphIterator::baselineIsLogicalEnd() const return (lookupFlags & lfBaselineIsLogicalEnd) != 0; } -le_bool GlyphIterator::hasCursiveFirstExitPoint() const -{ - return cursiveFirstPosition >= 0; -} - -le_bool GlyphIterator::hasCursiveLastExitPoint() const -{ - return cursiveLastPosition >= 0; -} - LEGlyphID GlyphIterator::getCurrGlyphID() const { if (direction < 0) { @@ -177,39 +156,10 @@ LEGlyphID GlyphIterator::getCurrGlyphID() const return glyphStorage[position]; } -LEGlyphID GlyphIterator::getCursiveLastGlyphID() const +void GlyphIterator::getCursiveEntryPoint(LEPoint &entryPoint) const { if (direction < 0) { - if (cursiveLastPosition <= nextLimit || cursiveLastPosition >= prevLimit) { - return 0xFFFF; - } - } else { - if (cursiveLastPosition <= prevLimit || cursiveLastPosition >= nextLimit) { - return 0xFFFF; - } - } - - return glyphStorage[cursiveLastPosition]; -} - -void GlyphIterator::getCursiveLastExitPoint(LEPoint &exitPoint) const -{ - if (cursiveLastPosition >= 0) { - exitPoint = cursiveLastExitPoint; - } -} - -float GlyphIterator::getCursiveBaselineAdjustment() const -{ - return cursiveBaselineAdjustment; -} - -void GlyphIterator::getCurrGlyphPositionAdjustment(GlyphPositionAdjustment &adjustment) const -{ - if (direction < 0) - { - if (position <= nextLimit || position >= prevLimit) - { + if (position <= nextLimit || position >= prevLimit) { return; } } else { @@ -218,24 +168,22 @@ void GlyphIterator::getCurrGlyphPositionAdjustment(GlyphPositionAdjustment &adju } } - adjustment = glyphPositionAdjustments[position]; + glyphPositionAdjustments->getEntryPoint(position, entryPoint); } -void GlyphIterator::getCursiveLastPositionAdjustment(GlyphPositionAdjustment &adjustment) const +void GlyphIterator::getCursiveExitPoint(LEPoint &exitPoint) const { - if (direction < 0) - { - if (cursiveLastPosition <= nextLimit || cursiveLastPosition >= prevLimit) - { + if (direction < 0) { + if (position <= nextLimit || position >= prevLimit) { return; } } else { - if (cursiveLastPosition <= prevLimit || cursiveLastPosition >= nextLimit) { + if (position <= prevLimit || position >= nextLimit) { return; } } - adjustment = glyphPositionAdjustments[cursiveLastPosition]; + glyphPositionAdjustments->getExitPoint(position, exitPoint); } void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID) @@ -247,10 +195,6 @@ void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID) void GlyphIterator::setCurrStreamPosition(le_int32 newPosition) { - cursiveFirstPosition = -1; - cursiveLastPosition = -1; - cursiveBaselineAdjustment = 0; - if (direction < 0) { if (newPosition >= prevLimit) { position = prevLimit; @@ -277,21 +221,6 @@ void GlyphIterator::setCurrStreamPosition(le_int32 newPosition) next(); } -void GlyphIterator::setCurrGlyphPositionAdjustment(const GlyphPositionAdjustment *adjustment) -{ - if (direction < 0) { - if (position <= nextLimit || position >= prevLimit) { - return; - } - } else { - if (position <= prevLimit || position >= nextLimit) { - return; - } - } - - glyphPositionAdjustments[position] = *adjustment; -} - void GlyphIterator::setCurrGlyphBaseOffset(le_int32 baseOffset) { if (direction < 0) { @@ -304,7 +233,7 @@ void GlyphIterator::setCurrGlyphBaseOffset(le_int32 baseOffset) } } - glyphPositionAdjustments[position].setBaseOffset(baseOffset); + glyphPositionAdjustments->setBaseOffset(position, baseOffset); } void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust, @@ -320,10 +249,10 @@ void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, fl } } - glyphPositionAdjustments[position].adjustXPlacement(xPlacementAdjust); - glyphPositionAdjustments[position].adjustYPlacement(yPlacementAdjust); - glyphPositionAdjustments[position].adjustXAdvance(xAdvanceAdjust); - glyphPositionAdjustments[position].adjustYAdvance(yAdvanceAdjust); + glyphPositionAdjustments->adjustXPlacement(position, xPlacementAdjust); + glyphPositionAdjustments->adjustYPlacement(position, yPlacementAdjust); + glyphPositionAdjustments->adjustXAdvance(position, xAdvanceAdjust); + glyphPositionAdjustments->adjustYAdvance(position, yAdvanceAdjust); } void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust, @@ -339,13 +268,13 @@ void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust, float } } - glyphPositionAdjustments[position].setXPlacement(xPlacementAdjust); - glyphPositionAdjustments[position].setYPlacement(yPlacementAdjust); - glyphPositionAdjustments[position].setXAdvance(xAdvanceAdjust); - glyphPositionAdjustments[position].setYAdvance(yAdvanceAdjust); + glyphPositionAdjustments->setXPlacement(position, xPlacementAdjust); + glyphPositionAdjustments->setYPlacement(position, yPlacementAdjust); + glyphPositionAdjustments->setXAdvance(position, xAdvanceAdjust); + glyphPositionAdjustments->setYAdvance(position, yAdvanceAdjust); } -void GlyphIterator::setCursiveFirstExitPoint() +void GlyphIterator::setCursiveEntryPoint(LEPoint &entryPoint) { if (direction < 0) { if (position <= nextLimit || position >= prevLimit) { @@ -357,31 +286,10 @@ void GlyphIterator::setCursiveFirstExitPoint() } } - cursiveFirstPosition = position; -} - -void GlyphIterator::resetCursiveLastExitPoint() -{ - if ((lookupFlags & lfBaselineIsLogicalEnd) != 0 && cursiveFirstPosition >= 0 && cursiveLastPosition >= 0) { - le_int32 savePosition = position, saveLimit = nextLimit; - - position = cursiveFirstPosition - direction; - nextLimit = cursiveLastPosition + direction; - - while (nextInternal()) { - glyphPositionAdjustments[position].adjustYPlacement(-cursiveBaselineAdjustment); - } - - position = savePosition; - nextLimit = saveLimit; - } - - cursiveLastPosition = -1; - cursiveFirstPosition = -1; - cursiveBaselineAdjustment = 0; + glyphPositionAdjustments->setEntryPoint(position, entryPoint, baselineIsLogicalEnd()); } -void GlyphIterator::setCursiveLastExitPoint(LEPoint &exitPoint) +void GlyphIterator::setCursiveExitPoint(LEPoint &exitPoint) { if (direction < 0) { if (position <= nextLimit || position >= prevLimit) { @@ -393,33 +301,22 @@ void GlyphIterator::setCursiveLastExitPoint(LEPoint &exitPoint) } } - cursiveLastPosition = position; - cursiveLastExitPoint = exitPoint; - + glyphPositionAdjustments->setExitPoint(position, exitPoint, baselineIsLogicalEnd()); } -void GlyphIterator::setCursiveBaselineAdjustment(float adjustment) -{ - cursiveBaselineAdjustment = adjustment; -} - -void GlyphIterator::adjustCursiveLastGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust, - float xAdvanceAdjust, float yAdvanceAdjust) +void GlyphIterator::setCursiveGlyph() { if (direction < 0) { - if (cursiveLastPosition <= nextLimit || cursiveLastPosition >= prevLimit) { + if (position <= nextLimit || position >= prevLimit) { return; } } else { - if (cursiveLastPosition <= prevLimit || cursiveLastPosition >= nextLimit) { + if (position <= prevLimit || position >= nextLimit) { return; } } - glyphPositionAdjustments[cursiveLastPosition].adjustXPlacement(xPlacementAdjust); - glyphPositionAdjustments[cursiveLastPosition].adjustYPlacement(yPlacementAdjust); - glyphPositionAdjustments[cursiveLastPosition].adjustXAdvance(xAdvanceAdjust); - glyphPositionAdjustments[cursiveLastPosition].adjustYAdvance(yAdvanceAdjust); + glyphPositionAdjustments->setCursiveGlyph(position, baselineIsLogicalEnd()); } le_bool GlyphIterator::filterGlyph(le_uint32 index) const @@ -469,27 +366,16 @@ le_bool GlyphIterator::filterGlyph(le_uint32 index) const } } -static const LETag emptyTag = 0; -static const LETag defaultTag = 0xFFFFFFFF; - le_bool GlyphIterator::hasFeatureTag() const { - if (featureTag == defaultTag || featureTag == emptyTag) { + if (featureMask == 0) { return TRUE; } LEErrorCode success = LE_NO_ERROR; - const LETag *tagList = (const LETag *) glyphStorage.getAuxData(position, success); + FeatureMask fm = glyphStorage.getAuxData(position, success); - if (tagList != NULL) { - for (le_int32 tag = 0; tagList[tag] != emptyTag; tag += 1) { - if (tagList[tag] == featureTag) { - return TRUE; - } - } - } - - return FALSE; + return (fm & featureMask) != 0; } le_bool GlyphIterator::findFeatureTag() diff --git a/icuSources/layout/GlyphIterator.h b/icuSources/layout/GlyphIterator.h index 610a0342..6ecf83a9 100644 --- a/icuSources/layout/GlyphIterator.h +++ b/icuSources/layout/GlyphIterator.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -15,20 +15,20 @@ #include "LETypes.h" #include "OpenTypeTables.h" #include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" U_NAMESPACE_BEGIN class LEGlyphStorage; +class GlyphPositionAdjustments; class GlyphIterator : public UMemory { public: - GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustment *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags, LETag theFeatureTag, - const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader); + GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags, + FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader); GlyphIterator(GlyphIterator &that); - GlyphIterator(GlyphIterator &that, LETag newFeatureTag); + GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask); GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags); @@ -44,24 +44,18 @@ public: le_bool ignoresMarks() const; le_bool baselineIsLogicalEnd() const; - le_bool hasCursiveFirstExitPoint() const; - le_bool hasCursiveLastExitPoint() const; LEGlyphID getCurrGlyphID() const; le_int32 getCurrStreamPosition() const; - void getCurrGlyphPositionAdjustment(GlyphPositionAdjustment &adjustment) const; le_int32 getMarkComponent(le_int32 markPosition) const; le_bool findMark2Glyph(); - void getCursiveLastExitPoint(LEPoint &exitPoint) const; - LEGlyphID getCursiveLastGlyphID() const; - float getCursiveBaselineAdjustment() const; - void getCursiveLastPositionAdjustment(GlyphPositionAdjustment &adjustment) const; + void getCursiveEntryPoint(LEPoint &entryPoint) const; + void getCursiveExitPoint(LEPoint &exitPoint) const; void setCurrGlyphID(TTGlyphID glyphID); void setCurrStreamPosition(le_int32 position); - void setCurrGlyphPositionAdjustment(const GlyphPositionAdjustment *adjustment); void setCurrGlyphBaseOffset(le_int32 baseOffset); void adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust, float xAdvanceAdjust, float yAdvanceAdjust); @@ -69,12 +63,9 @@ public: void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust, float xAdvanceAdjust, float yAdvanceAdjust); - void setCursiveFirstExitPoint(); - void resetCursiveLastExitPoint(); - void setCursiveLastExitPoint(LEPoint &exitPoint); - void setCursiveBaselineAdjustment(float adjustment); - void adjustCursiveLastGlyphPositionAdjustment(float xPlacmentAdjust, float yPlacementAdjust, - float xAdvanceAdjust, float yAdvanceAdjust); + void setCursiveEntryPoint(LEPoint &entryPoint); + void setCursiveExitPoint(LEPoint &exitPoint); + void setCursiveGlyph(); LEGlyphID *insertGlyphs(le_int32 count); le_int32 applyInsertions(); @@ -89,16 +80,15 @@ private: le_int32 position; le_int32 nextLimit; le_int32 prevLimit; - le_int32 cursiveFirstPosition; - le_int32 cursiveLastPosition; - float cursiveBaselineAdjustment; - LEPoint cursiveLastExitPoint; + LEGlyphStorage &glyphStorage; - GlyphPositionAdjustment *glyphPositionAdjustments; - le_int32 srcIndex; - le_int32 destIndex; - le_uint16 lookupFlags; - LETag featureTag; + GlyphPositionAdjustments *glyphPositionAdjustments; + + le_int32 srcIndex; + le_int32 destIndex; + le_uint16 lookupFlags; + FeatureMask featureMask; + const GlyphClassDefinitionTable *glyphClassDefinitionTable; const MarkAttachClassDefinitionTable *markAttachClassDefinitionTable; diff --git a/icuSources/layout/GlyphPositionAdjustments.cpp b/icuSources/layout/GlyphPositionAdjustments.cpp new file mode 100644 index 00000000..c7e57ef1 --- /dev/null +++ b/icuSources/layout/GlyphPositionAdjustments.cpp @@ -0,0 +1,166 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + */ + +#include "LETypes.h" +#include "GlyphPositionAdjustments.h" +#include "LEGlyphStorage.h" +#include "LEFontInstance.h" + +U_NAMESPACE_BEGIN + +#define CHECK_ALLOCATE_ARRAY(array, type, size) \ + if (array == NULL) { \ + array = (type *) new type[size]; \ + } + +GlyphPositionAdjustments::GlyphPositionAdjustments(le_int32 glyphCount) + : fGlyphCount(glyphCount), fEntryExitPoints(NULL), fAdjustments(NULL) +{ + fAdjustments = (Adjustment *) new Adjustment[glyphCount]; +} + +GlyphPositionAdjustments::~GlyphPositionAdjustments() +{ + delete[] fEntryExitPoints; + delete[] fAdjustments; +} + +const LEPoint *GlyphPositionAdjustments::getEntryPoint(le_int32 index, LEPoint &entryPoint) const +{ + if (fEntryExitPoints == NULL) { + return NULL; + } + + return fEntryExitPoints[index].getEntryPoint(entryPoint); +} + +const LEPoint *GlyphPositionAdjustments::getExitPoint(le_int32 index, LEPoint &exitPoint)const +{ + if (fEntryExitPoints == NULL) { + return NULL; + } + + return fEntryExitPoints[index].getExitPoint(exitPoint); +} + +void GlyphPositionAdjustments::setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd) +{ + CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount); + + fEntryExitPoints[index].setEntryPoint(newEntryPoint, baselineIsLogicalEnd); +} + +void GlyphPositionAdjustments::setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd) +{ + CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount); + + fEntryExitPoints[index].setExitPoint(newExitPoint, baselineIsLogicalEnd); +} + +void GlyphPositionAdjustments::setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd) +{ + CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount); + + fEntryExitPoints[index].setCursiveGlyph(baselineIsLogicalEnd); +} + +void GlyphPositionAdjustments::applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance) +{ + if (! hasCursiveGlyphs()) { + return; + } + + le_int32 start = 0, end = fGlyphCount, dir = 1; + le_int32 firstExitPoint = -1, lastExitPoint = -1; + LEPoint entryAnchor, exitAnchor, pixels; + LEGlyphID lastExitGlyphID = 0; + float baselineAdjustment = 0; + + // This removes a possible warning about + // using exitAnchor before it's been initialized. + exitAnchor.fX = exitAnchor.fY = 0; + + if (rightToLeft) { + start = fGlyphCount - 1; + end = -1; + dir = -1; + } + + for (le_int32 i = start; i != end; i += dir) { + LEGlyphID glyphID = glyphStorage[i]; + + if (isCursiveGlyph(i)) { + if (lastExitPoint >= 0 && getEntryPoint(i, entryAnchor) != NULL) { + float anchorDiffX = exitAnchor.fX - entryAnchor.fX; + float anchorDiffY = exitAnchor.fY - entryAnchor.fY; + + baselineAdjustment += anchorDiffY; + adjustYPlacement(i, baselineAdjustment); + + if (rightToLeft) { + LEPoint secondAdvance; + + fontInstance->getGlyphAdvance(glyphID, pixels); + fontInstance->pixelsToUnits(pixels, secondAdvance); + + adjustXAdvance(i, -(anchorDiffX + secondAdvance.fX)); + } else { + LEPoint firstAdvance; + + fontInstance->getGlyphAdvance(lastExitGlyphID, pixels); + fontInstance->pixelsToUnits(pixels, firstAdvance); + + adjustXAdvance(lastExitPoint, anchorDiffX - firstAdvance.fX); + } + } + + lastExitPoint = i; + + if (getExitPoint(i, exitAnchor) != NULL) { + if (firstExitPoint < 0) { + firstExitPoint = i; + } + + lastExitGlyphID = glyphID; + } else { + if (baselineIsLogicalEnd(i) && firstExitPoint >= 0 && lastExitPoint >= 0) { + le_int32 limit = lastExitPoint + dir; + + for (le_int32 j = firstExitPoint; j != limit; j += dir) { + if (isCursiveGlyph(j)) { + adjustYPlacement(j, -baselineAdjustment); + } + } + } + + firstExitPoint = lastExitPoint = -1; + baselineAdjustment = 0; + } + } + } +} + +LEPoint *GlyphPositionAdjustments::EntryExitPoint::getEntryPoint(LEPoint &entryPoint) const +{ + if (fFlags & EEF_HAS_ENTRY_POINT) { + entryPoint = fEntryPoint; + return &entryPoint; + } + + return NULL; +} + +LEPoint *GlyphPositionAdjustments::EntryExitPoint::getExitPoint(LEPoint &exitPoint) const +{ + if (fFlags & EEF_HAS_EXIT_POINT) { + exitPoint = fExitPoint; + return &exitPoint; + } + + return NULL; +} + +U_NAMESPACE_END diff --git a/icuSources/layout/GlyphPositionAdjustments.h b/icuSources/layout/GlyphPositionAdjustments.h index 871eda4a..31146e56 100644 --- a/icuSources/layout/GlyphPositionAdjustments.h +++ b/icuSources/layout/GlyphPositionAdjustments.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -17,129 +17,346 @@ U_NAMESPACE_BEGIN -class GlyphPositionAdjustment : public UMemory { -public: +class LEGlyphStorage; +class LEFontInstance; - GlyphPositionAdjustment(); - GlyphPositionAdjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff = -1); - ~GlyphPositionAdjustment(); +class GlyphPositionAdjustments : public UMemory +{ +private: + class Adjustment : public UMemory { + public: - float getXPlacement(); - float getYPlacement(); - float getXAdvance(); - float getYAdvance(); + inline Adjustment(); + inline Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff = -1); + inline ~Adjustment(); - le_int32 getBaseOffset(); + inline float getXPlacement() const; + inline float getYPlacement() const; + inline float getXAdvance() const; + inline float getYAdvance() const; - void setXPlacement(float newXPlacement); - void setYPlacement(float newYPlacement); - void setXAdvance(float newXAdvance); - void setYAdvance(float newYAdvance); + inline le_int32 getBaseOffset() const; - void setBaseOffset(le_int32 newBaseOffset); + inline void setXPlacement(float newXPlacement); + inline void setYPlacement(float newYPlacement); + inline void setXAdvance(float newXAdvance); + inline void setYAdvance(float newYAdvance); - void adjustXPlacement(float xAdjustment); - void adjustYPlacement(float yAdjustment); - void adjustXAdvance(float xAdjustment); - void adjustYAdvance(float yAdjustment); + inline void setBaseOffset(le_int32 newBaseOffset); -private: - float xPlacement; - float yPlacement; - float xAdvance; - float yAdvance; + inline void adjustXPlacement(float xAdjustment); + inline void adjustYPlacement(float yAdjustment); + inline void adjustXAdvance(float xAdjustment); + inline void adjustYAdvance(float yAdjustment); + + private: + float xPlacement; + float yPlacement; + float xAdvance; + float yAdvance; + + le_int32 baseOffset; + + // allow copying of this class because all of its fields are simple types + }; + + class EntryExitPoint : public UMemory + { + public: + inline EntryExitPoint(); + inline ~EntryExitPoint(); + + inline le_bool isCursiveGlyph() const; + inline le_bool baselineIsLogicalEnd() const; + + LEPoint *getEntryPoint(LEPoint &entryPoint) const; + LEPoint *getExitPoint(LEPoint &exitPoint) const; + + inline void setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd); + inline void setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd); + inline void setCursiveGlyph(le_bool baselineIsLogicalEnd); + + private: + enum EntryExitFlags + { + EEF_HAS_ENTRY_POINT = 0x80000000L, + EEF_HAS_EXIT_POINT = 0x40000000L, + EEF_IS_CURSIVE_GLYPH = 0x20000000L, + EEF_BASELINE_IS_LOGICAL_END = 0x10000000L + }; + + le_uint32 fFlags; + LEPoint fEntryPoint; + LEPoint fExitPoint; + }; - le_int32 baseOffset; + le_int32 fGlyphCount; + EntryExitPoint *fEntryExitPoints; + Adjustment *fAdjustments; - // allow copying of this class because all of its fields are simple types + GlyphPositionAdjustments(); + +public: + GlyphPositionAdjustments(le_int32 glyphCount); + ~GlyphPositionAdjustments(); + + inline le_bool hasCursiveGlyphs() const; + inline le_bool isCursiveGlyph(le_int32 index) const; + inline le_bool baselineIsLogicalEnd(le_int32 index) const; + + const LEPoint *getEntryPoint(le_int32 index, LEPoint &entryPoint) const; + const LEPoint *getExitPoint(le_int32 index, LEPoint &exitPoint) const; + + inline float getXPlacement(le_int32 index) const; + inline float getYPlacement(le_int32 index) const; + inline float getXAdvance(le_int32 index) const; + inline float getYAdvance(le_int32 index) const; + + inline le_int32 getBaseOffset(le_int32 index) const; + + inline void setXPlacement(le_int32 index, float newXPlacement); + inline void setYPlacement(le_int32 index, float newYPlacement); + inline void setXAdvance(le_int32 index, float newXAdvance); + inline void setYAdvance(le_int32 index, float newYAdvance); + + inline void setBaseOffset(le_int32 index, le_int32 newBaseOffset); + + inline void adjustXPlacement(le_int32 index, float xAdjustment); + inline void adjustYPlacement(le_int32 index, float yAdjustment); + inline void adjustXAdvance(le_int32 index, float xAdjustment); + inline void adjustYAdvance(le_int32 index, float yAdjustment); + + void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd); + void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd); + void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd); + + void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance); }; -inline GlyphPositionAdjustment::GlyphPositionAdjustment() +inline GlyphPositionAdjustments::Adjustment::Adjustment() : xPlacement(0), yPlacement(0), xAdvance(0), yAdvance(0), baseOffset(-1) { // nothing else to do! } -inline GlyphPositionAdjustment::GlyphPositionAdjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff) +inline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff) : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv), baseOffset(baseOff) { // nothing else to do! } -inline GlyphPositionAdjustment::~GlyphPositionAdjustment() +inline GlyphPositionAdjustments::Adjustment::~Adjustment() { // nothing to do! } -inline float GlyphPositionAdjustment::getXPlacement() +inline float GlyphPositionAdjustments::Adjustment::getXPlacement() const { return xPlacement; } -inline float GlyphPositionAdjustment::getYPlacement() +inline float GlyphPositionAdjustments::Adjustment::getYPlacement() const { return yPlacement; } -inline float GlyphPositionAdjustment::getXAdvance() +inline float GlyphPositionAdjustments::Adjustment::getXAdvance() const { return xAdvance; } -inline float GlyphPositionAdjustment::getYAdvance() +inline float GlyphPositionAdjustments::Adjustment::getYAdvance() const { return yAdvance; } -inline le_int32 GlyphPositionAdjustment::getBaseOffset() +inline le_int32 GlyphPositionAdjustments::Adjustment::getBaseOffset() const { return baseOffset; } -inline void GlyphPositionAdjustment::setXPlacement(float newXPlacement) +inline void GlyphPositionAdjustments::Adjustment::setXPlacement(float newXPlacement) { xPlacement = newXPlacement; } -inline void GlyphPositionAdjustment::setYPlacement(float newYPlacement) +inline void GlyphPositionAdjustments::Adjustment::setYPlacement(float newYPlacement) { yPlacement = newYPlacement; } -inline void GlyphPositionAdjustment::setXAdvance(float newXAdvance) +inline void GlyphPositionAdjustments::Adjustment::setXAdvance(float newXAdvance) { xAdvance = newXAdvance; } -inline void GlyphPositionAdjustment::setYAdvance(float newYAdvance) +inline void GlyphPositionAdjustments::Adjustment::setYAdvance(float newYAdvance) { yAdvance = newYAdvance; } -inline void GlyphPositionAdjustment::setBaseOffset(le_int32 newBaseOffset) +inline void GlyphPositionAdjustments::Adjustment::setBaseOffset(le_int32 newBaseOffset) { baseOffset = newBaseOffset; } -inline void GlyphPositionAdjustment::adjustXPlacement(float xAdjustment) +inline void GlyphPositionAdjustments::Adjustment::adjustXPlacement(float xAdjustment) { xPlacement += xAdjustment; } -inline void GlyphPositionAdjustment::adjustYPlacement(float yAdjustment) +inline void GlyphPositionAdjustments::Adjustment::adjustYPlacement(float yAdjustment) { yPlacement += yAdjustment; } -inline void GlyphPositionAdjustment::adjustXAdvance(float xAdjustment) +inline void GlyphPositionAdjustments::Adjustment::adjustXAdvance(float xAdjustment) { xAdvance += xAdjustment; } -inline void GlyphPositionAdjustment::adjustYAdvance(float yAdjustment) +inline void GlyphPositionAdjustments::Adjustment::adjustYAdvance(float yAdjustment) { yAdvance += yAdjustment; } +inline GlyphPositionAdjustments::EntryExitPoint::EntryExitPoint() + : fFlags(0) +{ + fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fExitPoint.fY = 0; +} + +inline GlyphPositionAdjustments::EntryExitPoint::~EntryExitPoint() +{ + // nothing special to do +} + +inline le_bool GlyphPositionAdjustments::EntryExitPoint::isCursiveGlyph() const +{ + return (fFlags & EEF_IS_CURSIVE_GLYPH) != 0; +} + +inline le_bool GlyphPositionAdjustments::EntryExitPoint::baselineIsLogicalEnd() const +{ + return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0; +} + +inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd) +{ + if (baselineIsLogicalEnd) { + fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END); + } else { + fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH); + } + + fEntryPoint = newEntryPoint; +} + +inline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd) +{ + if (baselineIsLogicalEnd) { + fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END); + } else { + fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH); + } + + fExitPoint = newExitPoint; +} + +inline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(le_bool baselineIsLogicalEnd) +{ + if (baselineIsLogicalEnd) { + fFlags |= (EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END); + } else { + fFlags |= EEF_IS_CURSIVE_GLYPH; + } +} + +inline le_bool GlyphPositionAdjustments::isCursiveGlyph(le_int32 index) const +{ + return fEntryExitPoints != NULL && fEntryExitPoints[index].isCursiveGlyph(); +} + +inline le_bool GlyphPositionAdjustments::baselineIsLogicalEnd(le_int32 index) const +{ + return fEntryExitPoints != NULL && fEntryExitPoints[index].baselineIsLogicalEnd(); +} + +inline float GlyphPositionAdjustments::getXPlacement(le_int32 index) const +{ + return fAdjustments[index].getXPlacement(); +} + +inline float GlyphPositionAdjustments::getYPlacement(le_int32 index) const +{ + return fAdjustments[index].getYPlacement(); +} + +inline float GlyphPositionAdjustments::getXAdvance(le_int32 index) const +{ + return fAdjustments[index].getXAdvance(); +} + +inline float GlyphPositionAdjustments::getYAdvance(le_int32 index) const +{ + return fAdjustments[index].getYAdvance(); +} + + +inline le_int32 GlyphPositionAdjustments::getBaseOffset(le_int32 index) const +{ + return fAdjustments[index].getBaseOffset(); +} + +inline void GlyphPositionAdjustments::setXPlacement(le_int32 index, float newXPlacement) +{ + fAdjustments[index].setXPlacement(newXPlacement); +} + +inline void GlyphPositionAdjustments::setYPlacement(le_int32 index, float newYPlacement) +{ + fAdjustments[index].setYPlacement(newYPlacement); +} + +inline void GlyphPositionAdjustments::setXAdvance(le_int32 index, float newXAdvance) +{ + fAdjustments[index].setXAdvance(newXAdvance); +} + +inline void GlyphPositionAdjustments::setYAdvance(le_int32 index, float newYAdvance) +{ + fAdjustments[index].setYAdvance(newYAdvance); +} + +inline void GlyphPositionAdjustments::setBaseOffset(le_int32 index, le_int32 newBaseOffset) +{ + fAdjustments[index].setBaseOffset(newBaseOffset); +} + +inline void GlyphPositionAdjustments::adjustXPlacement(le_int32 index, float xAdjustment) +{ + fAdjustments[index].adjustXPlacement(xAdjustment); +} + +inline void GlyphPositionAdjustments::adjustYPlacement(le_int32 index, float yAdjustment) +{ + fAdjustments[index].adjustYPlacement(yAdjustment); +} + +inline void GlyphPositionAdjustments::adjustXAdvance(le_int32 index, float xAdjustment) +{ + fAdjustments[index].adjustXAdvance(xAdjustment); +} + +inline void GlyphPositionAdjustments::adjustYAdvance(le_int32 index, float yAdjustment) +{ + fAdjustments[index].adjustYAdvance(yAdjustment); +} + +inline le_bool GlyphPositionAdjustments::hasCursiveGlyphs() const +{ + return fEntryExitPoints != NULL; +} + U_NAMESPACE_END #endif diff --git a/icuSources/layout/GlyphPositioningTables.cpp b/icuSources/layout/GlyphPositioningTables.cpp index 5607711d..b9187b4a 100644 --- a/icuSources/layout/GlyphPositioningTables.cpp +++ b/icuSources/layout/GlyphPositioningTables.cpp @@ -1,6 +1,5 @@ /* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -9,21 +8,24 @@ #include "OpenTypeTables.h" #include "Lookups.h" #include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" #include "GlyphPositioningTables.h" #include "GlyphPosnLookupProc.h" +#include "CursiveAttachmentSubtables.h" #include "LEGlyphStorage.h" +#include "GlyphPositionAdjustments.h" U_NAMESPACE_BEGIN -void GlyphPositioningTableHeader::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustment *glyphPositionAdjustments, le_bool rightToLeft, +void GlyphPositioningTableHeader::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft, LETag scriptTag, LETag languageTag, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEFontInstance *fontInstance, const LETag *featureOrder) const + const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const { - GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureOrder); + GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap, featureMapCount, featureOrder); processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance); + + glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance); } U_NAMESPACE_END diff --git a/icuSources/layout/GlyphPositioningTables.h b/icuSources/layout/GlyphPositioningTables.h index f79a0bf3..a07c8c26 100644 --- a/icuSources/layout/GlyphPositioningTables.h +++ b/icuSources/layout/GlyphPositioningTables.h @@ -1,6 +1,5 @@ /* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -13,23 +12,24 @@ */ #include "LETypes.h" -#include "LEFontInstance.h" #include "OpenTypeTables.h" #include "Lookups.h" #include "GlyphLookupTables.h" -#include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" U_NAMESPACE_BEGIN -class LEGlyphStorage; +class LEFontInstance; +class LEGlyphStorage; +class LEGlyphFilter; +class GlyphPositionAdjustments; +struct GlyphDefinitionTableHeader; struct GlyphPositioningTableHeader : public GlyphLookupTableHeader { - void process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustment *glyphPositionAdjustments, + void process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft, LETag scriptTag, LETag languageTag, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEFontInstance *fontInstance, const LETag *featureOrder) const; + const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const; }; enum GlyphPositioningSubtableTypes diff --git a/icuSources/layout/GlyphPosnLookupProc.cpp b/icuSources/layout/GlyphPosnLookupProc.cpp index 71dafed8..6f923a13 100644 --- a/icuSources/layout/GlyphPosnLookupProc.cpp +++ b/icuSources/layout/GlyphPosnLookupProc.cpp @@ -1,6 +1,5 @@ /* - * - * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998 - 2005 - All Rights Reserved * */ @@ -34,13 +33,13 @@ typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubt GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor( const GlyphPositioningTableHeader *glyphPositioningTableHeader, - LETag scriptTag, LETag languageTag, const LETag *featureOrder) + LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) : LookupProcessor( (char *) glyphPositioningTableHeader, SWAPW(glyphPositioningTableHeader->scriptListOffset), SWAPW(glyphPositioningTableHeader->featureListOffset), SWAPW(glyphPositioningTableHeader->lookupListOffset), - scriptTag, languageTag, featureOrder) + scriptTag, languageTag, featureMap, featureMapCount, featureOrder) { // anything? } diff --git a/icuSources/layout/GlyphPosnLookupProc.h b/icuSources/layout/GlyphPosnLookupProc.h index 08ca7e82..ee360656 100644 --- a/icuSources/layout/GlyphPosnLookupProc.h +++ b/icuSources/layout/GlyphPosnLookupProc.h @@ -1,6 +1,5 @@ /* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -28,7 +27,7 @@ class GlyphPositioningLookupProcessor : public LookupProcessor { public: GlyphPositioningLookupProcessor(const GlyphPositioningTableHeader *glyphPositioningTableHeader, - LETag scriptTag, LETag languageTag, const LETag *featureOrder); + LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder); virtual ~GlyphPositioningLookupProcessor(); diff --git a/icuSources/layout/GlyphSubstLookupProc.cpp b/icuSources/layout/GlyphSubstLookupProc.cpp index a033badf..eb25680c 100644 --- a/icuSources/layout/GlyphSubstLookupProc.cpp +++ b/icuSources/layout/GlyphSubstLookupProc.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -27,13 +27,13 @@ U_NAMESPACE_BEGIN GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor( const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader, - LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const LETag *featureOrder) + LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) : LookupProcessor( (char *) glyphSubstitutionTableHeader, SWAPW(glyphSubstitutionTableHeader->scriptListOffset), SWAPW(glyphSubstitutionTableHeader->featureListOffset), SWAPW(glyphSubstitutionTableHeader->lookupListOffset), - scriptTag, languageTag, featureOrder), fFilter(filter) + scriptTag, languageTag, featureMap, featureMapCount, featureOrder), fFilter(filter) { // anything? } diff --git a/icuSources/layout/GlyphSubstLookupProc.h b/icuSources/layout/GlyphSubstLookupProc.h index 4471b63a..d8c5684a 100644 --- a/icuSources/layout/GlyphSubstLookupProc.h +++ b/icuSources/layout/GlyphSubstLookupProc.h @@ -1,7 +1,5 @@ /* - * %W% %E% - * - * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -30,7 +28,7 @@ class GlyphSubstitutionLookupProcessor : public LookupProcessor { public: GlyphSubstitutionLookupProcessor(const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader, - LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter = NULL, const LETag *featureOrder = NULL); + LETag scriptTag, LETag languageTag, const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder); virtual ~GlyphSubstitutionLookupProcessor(); diff --git a/icuSources/layout/GlyphSubstitutionTables.cpp b/icuSources/layout/GlyphSubstitutionTables.cpp index 8ae4fc8f..661b30f3 100644 --- a/icuSources/layout/GlyphSubstitutionTables.cpp +++ b/icuSources/layout/GlyphSubstitutionTables.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -9,7 +9,6 @@ #include "OpenTypeTables.h" #include "Lookups.h" #include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" #include "GlyphSubstitutionTables.h" #include "GlyphSubstLookupProc.h" #include "ScriptAndLanguage.h" @@ -20,9 +19,9 @@ U_NAMESPACE_BEGIN le_int32 GlyphSubstitutionTableHeader::process(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEGlyphFilter *filter, const LETag *featureOrder) const + const LEGlyphFilter *filter, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const { - GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureOrder); + GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder); return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL); } diff --git a/icuSources/layout/GlyphSubstitutionTables.h b/icuSources/layout/GlyphSubstitutionTables.h index 98a33ad2..620da29c 100644 --- a/icuSources/layout/GlyphSubstitutionTables.h +++ b/icuSources/layout/GlyphSubstitutionTables.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -13,22 +13,21 @@ */ #include "LETypes.h" -#include "LEGlyphFilter.h" #include "OpenTypeTables.h" #include "Lookups.h" #include "GlyphLookupTables.h" -#include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" U_NAMESPACE_BEGIN -class LEGlyphStorage; +class LEGlyphStorage; +class LEGlyphFilter; +struct GlyphDefinitionTableHeader; struct GlyphSubstitutionTableHeader : public GlyphLookupTableHeader { le_int32 process(LEGlyphStorage &glyphStorage, le_bool rightToLeft, LETag scriptTag, LETag languageTag, - const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, - const LEGlyphFilter *filter = NULL, const LETag *featureOrder = NULL) const; + const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEGlyphFilter *filter, + const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const; }; enum GlyphSubstitutionSubtableTypes diff --git a/icuSources/layout/HanLayoutEngine.cpp b/icuSources/layout/HanLayoutEngine.cpp index d319b1c5..37b6cf4b 100644 --- a/icuSources/layout/HanLayoutEngine.cpp +++ b/icuSources/layout/HanLayoutEngine.cpp @@ -1,7 +1,7 @@ /* * HanLayoutEngine.cpp: OpenType processing for Han fonts. * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved. */ #include "LETypes.h" @@ -13,16 +13,37 @@ #include "HanLayoutEngine.h" #include "ScriptAndLanguageTags.h" #include "LEGlyphStorage.h" +#include "OpenTypeTables.h" U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HanOpenTypeLayoutEngine) +#define loclFeatureTag LE_LOCL_FEATURE_TAG +#define smplFeatureTag LE_SMPL_FEATURE_TAG +#define tradFeatureTag LE_TRAD_FEATURE_TAG + +#define loclFeatureMask 0x80000000UL +#define smplFeatureMask 0x40000000UL +#define tradFeatureMask 0x20000000UL + +static const FeatureMap featureMap[] = +{ + {loclFeatureTag, loclFeatureMask}, + {smplFeatureTag, smplFeatureMask}, + {tradFeatureTag, tradFeatureMask} +}; + +static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap); + +#define features (loclFeatureMask) + HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable) + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) { - // nothing else to do... + fFeatureMap = featureMap; + fFeatureMapCount = featureMapCount; } HanOpenTypeLayoutEngine::~HanOpenTypeLayoutEngine() @@ -30,14 +51,6 @@ HanOpenTypeLayoutEngine::~HanOpenTypeLayoutEngine() // nothing to do } -static const LETag emptyTag = 0x00000000; - -static const LETag loclFeatureTag = LE_LOCL_FEATURE_TAG; -static const LETag smplFeatureTag = LE_SMPL_FEATURE_TAG; -static const LETag tradFeatureTag = LE_TRAD_FEATURE_TAG; - -static const LETag features[] = {loclFeatureTag, emptyTag}; - le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success) { @@ -62,7 +75,7 @@ le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], l // flag from the language tag lookups, so we can use these features // with the default LangSys... for (le_int32 i = 0; i < count; i += 1) { - glyphStorage.setAuxData(i, (void *) features, success); + glyphStorage.setAuxData(i, features, success); } return count; diff --git a/icuSources/layout/HanLayoutEngine.h b/icuSources/layout/HanLayoutEngine.h index eaeb5635..6f683e1e 100644 --- a/icuSources/layout/HanLayoutEngine.h +++ b/icuSources/layout/HanLayoutEngine.h @@ -2,7 +2,7 @@ /* * HanLayoutEngine.h: OpenType processing for Han fonts. * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved. */ #ifndef __HANLAYOUTENGINE_H @@ -47,7 +47,7 @@ public: * @internal */ HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable); + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); /** diff --git a/icuSources/layout/HangulLayoutEngine.cpp b/icuSources/layout/HangulLayoutEngine.cpp new file mode 100644 index 00000000..6eb5b7ef --- /dev/null +++ b/icuSources/layout/HangulLayoutEngine.cpp @@ -0,0 +1,338 @@ +/* + * HangulLayoutEngine.cpp: OpenType processing for Han fonts. + * + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved. + */ + +#include "LETypes.h" +#include "LEScripts.h" +#include "LELanguages.h" + +#include "LayoutEngine.h" +#include "OpenTypeLayoutEngine.h" +#include "HangulLayoutEngine.h" +#include "ScriptAndLanguageTags.h" +#include "LEGlyphStorage.h" +#include "OpenTypeTables.h" + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HangulOpenTypeLayoutEngine) + + +#define FEATURE_MAP(name) {name ## FeatureTag, name ## FeatureMask} + +#define LJMO_FIRST 0x1100 +#define LJMO_LAST 0x1159 +#define LJMO_FILL 0x115F +#define LJMO_COUNT 19 + +#define VJMO_FIRST 0x1161 +#define VJMO_LAST 0x11A2 +#define VJMO_FILL 0x1160 +#define VJMO_COUNT 21 + +#define TJMO_FIRST 0x11A7 +#define TJMO_LAST 0x11F9 +#define TJMO_COUNT 28 + +#define HSYL_FIRST 0xAC00 +#define HSYL_COUNT 11172 +#define HSYL_LVCNT (VJMO_COUNT * TJMO_COUNT) + +// Character classes +enum +{ + CC_L = 0, + CC_V, + CC_T, + CC_LV, + CC_LVT, + CC_X, + CC_COUNT +}; + +// Action flags +#define AF_L 1 +#define AF_V 2 +#define AF_T 4 + +// Actions +#define a_N 0 +#define a_L (AF_L) +#define a_V (AF_V) +#define a_T (AF_T) +#define a_VT (AF_V | AF_T) +#define a_LV (AF_L | AF_V) +#define a_LVT (AF_L | AF_V | AF_T) + +typedef struct +{ + int32_t newState; + int32_t actionFlags; +} StateTransition; + +static const StateTransition stateTable[][CC_COUNT] = +{ +// L V T LV LVT X + { {1, a_L}, {2, a_LV}, {3, a_LVT}, {2, a_LV}, {3, a_LVT}, {4, a_T}}, // 0 - start + { {1, a_L}, {2, a_V}, {3, a_VT}, {2, a_LV}, {3, a_LVT}, {-1, a_V}}, // 1 - L+ + {{-1, a_N}, {2, a_V}, {3, a_T}, {-1, a_N}, {-1, a_N}, {-1, a_N}}, // 2 - L+V+ + {{-1, a_N}, {-1, a_N}, {3, a_T}, {-1, a_N}, {-1, a_N}, {-1, a_N}}, // 3 - L+V+T* + {{-1, a_N}, {-1, a_N}, {-1, a_N}, {-1, a_N}, {-1, a_N}, {4, a_T}} // 4 - X+ +}; + + +#define ccmpFeatureTag LE_CCMP_FEATURE_TAG +#define ljmoFeatureTag LE_LJMO_FEATURE_TAG +#define vjmoFeatureTag LE_VJMO_FEATURE_TAG +#define tjmoFeatureTag LE_TJMO_FEATURE_TAG + +#define ccmpFeatureMask 0x80000000UL +#define ljmoFeatureMask 0x40000000UL +#define vjmoFeatureMask 0x20000000UL +#define tjmoFeatureMask 0x10000000UL + +static const FeatureMap featureMap[] = +{ + {ccmpFeatureTag, ccmpFeatureMask}, + {ljmoFeatureTag, ljmoFeatureMask}, + {vjmoFeatureTag, vjmoFeatureMask}, + {tjmoFeatureTag, tjmoFeatureMask} +}; + +static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap); + +#define nullFeatures 0 +#define ljmoFeatures (ccmpFeatureMask | ljmoFeatureMask) +#define vjmoFeatures (ccmpFeatureMask | vjmoFeatureMask | ljmoFeatureMask | tjmoFeatureMask) +#define tjmoFeatures (ccmpFeatureMask | tjmoFeatureMask | ljmoFeatureMask | vjmoFeatureMask) + +static le_int32 compose(LEUnicode lead, LEUnicode vowel, LEUnicode trail, LEUnicode &syllable) +{ + le_int32 lIndex = lead - LJMO_FIRST; + le_int32 vIndex = vowel - VJMO_FIRST; + le_int32 tIndex = trail - TJMO_FIRST; + le_int32 result = 3; + + if ((lIndex < 0 || lIndex >= LJMO_COUNT ) || (vIndex < 0 || vIndex >= VJMO_COUNT)) { + return 0; + } + + if (tIndex <= 0 || tIndex >= TJMO_COUNT) { + tIndex = 0; + result = 2; + } + + syllable = (LEUnicode) ((lIndex * VJMO_COUNT + vIndex) * TJMO_COUNT + tIndex + HSYL_FIRST); + + return result; +} + +static le_int32 decompose(LEUnicode syllable, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail) +{ + le_int32 sIndex = syllable - HSYL_FIRST; + + if (sIndex < 0 || sIndex >= HSYL_COUNT) { + return 0; + } + + lead = LJMO_FIRST + (sIndex / HSYL_LVCNT); + vowel = VJMO_FIRST + (sIndex % HSYL_LVCNT) / TJMO_COUNT; + trail = TJMO_FIRST + (sIndex % TJMO_COUNT); + + if (trail == TJMO_FIRST) { + return 2; + } + + return 3; +} + +static le_int32 getCharClass(LEUnicode ch, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail) +{ + lead = LJMO_FILL; + vowel = VJMO_FILL; + trail = TJMO_FIRST; + + if (ch >= LJMO_FIRST && ch <= LJMO_LAST) { + lead = ch; + return CC_L; + } + + if (ch >= VJMO_FIRST && ch <= VJMO_LAST) { + vowel = ch; + return CC_V; + } + + if (ch > TJMO_FIRST && ch <= TJMO_LAST) { + trail = ch; + return CC_T; + } + + le_int32 c = decompose(ch, lead, vowel, trail); + + if (c == 2) { + return CC_LV; + } + + if (c == 3) { + return CC_LVT; + } + + trail = ch; + return CC_X; +} + +HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/, + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, gsubTable) +{ + fFeatureMap = featureMap; + fFeatureMapCount = featureMapCount; + fFeatureOrder = TRUE; +} + +HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/, + le_int32 typoFlags) + : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags) +{ + fFeatureMap = featureMap; + fFeatureMapCount = featureMapCount; + fFeatureOrder = TRUE; +} + +HangulOpenTypeLayoutEngine::~HangulOpenTypeLayoutEngine() +{ + // nothing to do +} + +le_int32 HangulOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) +{ + if (LE_FAILURE(success)) { + return 0; + } + + if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) { + success = LE_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + le_int32 worstCase = count * 3; + + outChars = LE_NEW_ARRAY(LEUnicode, worstCase); + + if (outChars == NULL) { + success = LE_MEMORY_ALLOCATION_ERROR; + return 0; + } + + glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success); + glyphStorage.allocateAuxData(success); + + if (LE_FAILURE(success)) { + LE_DELETE_ARRAY(outChars); + return 0; + } + + le_int32 outCharCount = 0; + le_int32 limit = offset + count; + le_int32 i = offset; + + while (i < limit) { + le_int32 state = 0; + le_int32 inStart = i; + le_int32 outStart = outCharCount; + + while( i < limit) { + LEUnicode lead = 0; + LEUnicode vowel = 0; + LEUnicode trail = 0; + int32_t chClass = getCharClass(chars[i], lead, vowel, trail); + const StateTransition transition = stateTable[state][chClass]; + + if (chClass == CC_X) { + /* Any character of type X will be stored as a trail jamo */ + if ((transition.actionFlags & AF_T) != 0) { + outChars[outCharCount] = trail; + glyphStorage.setCharIndex(outCharCount, i-offset, success); + glyphStorage.setAuxData(outCharCount++, nullFeatures, success); + } + } else { + /* Any Hangul will be fully decomposed. Output the decomposed characters. */ + if ((transition.actionFlags & AF_L) != 0) { + outChars[outCharCount] = lead; + glyphStorage.setCharIndex(outCharCount, i-offset, success); + glyphStorage.setAuxData(outCharCount++, ljmoFeatures, success); + } + + if ((transition.actionFlags & AF_V) != 0) { + outChars[outCharCount] = vowel; + glyphStorage.setCharIndex(outCharCount, i-offset, success); + glyphStorage.setAuxData(outCharCount++, vjmoFeatures, success); + } + + if ((transition.actionFlags & AF_T) != 0) { + outChars[outCharCount] = trail; + glyphStorage.setCharIndex(outCharCount, i-offset, success); + glyphStorage.setAuxData(outCharCount++, tjmoFeatures, success); + } + } + + state = transition.newState; + + /* Negative next state means stop. */ + if (state < 0) { + break; + } + + i += 1; + } + + le_int32 inLength = i - inStart; + le_int32 outLength = outCharCount - outStart; + + /* + * See if the syllable can be composed into a single character. There are 5 + * possible cases: + * + * Input Decomposed to Compose to + * LV L, V LV + * LVT L, V, T LVT + * L, V L, V LV, DEL + * LV, T L, V, T LVT, DEL + * L, V, T L, V, T LVT, DEL, DEL + */ + if ((inLength >= 1 && inLength <= 3) && (outLength == 2 || outLength == 3)) { + LEUnicode syllable = 0x0000; + LEUnicode lead = outChars[outStart]; + LEUnicode vowel = outChars[outStart + 1]; + LEUnicode trail = outLength == 3? outChars[outStart + 2] : TJMO_FIRST; + + /* + * If the composition consumes the whole decomposed syllable, + * we can use it. + */ + if (compose(lead, vowel, trail, syllable) == outLength) { + outCharCount = outStart; + outChars[outCharCount] = syllable; + glyphStorage.setCharIndex(outCharCount, inStart-offset, success); + glyphStorage.setAuxData(outCharCount++, nullFeatures, success); + + /* + * Replace the rest of the input characters with DEL. + */ + for(le_int32 d = inStart + 1; d < i; d += 1) { + outChars[outCharCount] = 0xFFFF; + glyphStorage.setCharIndex(outCharCount, d - offset, success); + glyphStorage.setAuxData(outCharCount++, nullFeatures, success); + } + } + } + } + + glyphStorage.adoptGlyphCount(outCharCount); + return outCharCount; +} + +U_NAMESPACE_END diff --git a/icuSources/layout/HangulLayoutEngine.h b/icuSources/layout/HangulLayoutEngine.h new file mode 100644 index 00000000..e77c3b97 --- /dev/null +++ b/icuSources/layout/HangulLayoutEngine.h @@ -0,0 +1,125 @@ + +/* + * + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved + * + */ + +#ifndef __HANGULAYOUTENGINE_H +#define __HANGULAYOUTENGINE_H + +#include "LETypes.h" +#include "LEFontInstance.h" +#include "LEGlyphFilter.h" +#include "LayoutEngine.h" +#include "OpenTypeLayoutEngine.h" + +#include "GlyphSubstitutionTables.h" +#include "GlyphDefinitionTables.h" +#include "GlyphPositioningTables.h" + +U_NAMESPACE_BEGIN + +class MPreFixups; +class LEGlyphStorage; + +/** + * This class implements OpenType layout for Old Hangul OpenType fonts, as + * specified by Microsoft in "Creating and Supporting OpenType Fonts for + * The Korean Hangul Script" (http://www.microsoft.com/typography/otfntdev/hangulot/default.htm) + * + * This class overrides the characterProcessing method to do Hangul character processing. + * (See the MS spec. for more details) + * + * @internal + */ +class HangulOpenTypeLayoutEngine : public OpenTypeLayoutEngine +{ +public: + /** + * This is the main constructor. It constructs an instance of HangulOpenTypeLayoutEngine for + * a particular font, script and language. It takes the GSUB table as a parameter since + * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an + * Hangul OpenType font. + * + * @param fontInstance - the font + * @param scriptCode - the script + * @param langaugeCode - the language + * @param gsubTable - the GSUB table + * + * @see LayoutEngine::layoutEngineFactory + * @see OpenTypeLayoutEngine + * @see ScriptAndLangaugeTags.h for script and language codes + * + * @internal + */ + HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); + + /** + * This constructor is used when the font requires a "canned" GSUB table which can't be known + * until after this constructor has been invoked. + * + * @param fontInstance - the font + * @param scriptCode - the script + * @param langaugeCode - the language + * + * @see OpenTypeLayoutEngine + * @see ScriptAndLangaugeTags.h for script and language codes + * + * @internal + */ + HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); + + /** + * The destructor, virtual for correct polymorphic invocation. + * + * @internal + */ + virtual ~HangulOpenTypeLayoutEngine(); + + /** + * ICU "poor man's RTTI", returns a UClassID for the actual class. + * + * @stable ICU 2.8 + */ + virtual UClassID getDynamicClassID() const; + + /** + * ICU "poor man's RTTI", returns a UClassID for this class. + * + * @stable ICU 2.8 + */ + static UClassID getStaticClassID(); + +protected: + + /** + * This method does Hangul OpenType character processing. It assigns the OpenType feature + * tags to the characters, and may compose a character sequence into a modern Hangul syllable, + * or decompose a modern Hangul syllable if it forms part of an old Hangul syllable. + * + * Input parameters: + * @param chars - the input character context + * @param offset - the index of the first character to process + * @param count - the number of characters to process + * @param max - the number of characters in the input context + * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run + * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set. + * the auxillary data array will be set to the feature tags. + * + * Output parameters: + * @param success - set to an error code if the operation fails + * + * @return the output character count + * + * @internal + */ + virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success); +}; + +U_NAMESPACE_END +#endif + diff --git a/icuSources/layout/IndicClassTables.cpp b/icuSources/layout/IndicClassTables.cpp index 46e1b782..a190afa7 100644 --- a/icuSources/layout/IndicClassTables.cpp +++ b/icuSources/layout/IndicClassTables.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -12,66 +12,63 @@ U_NAMESPACE_BEGIN -#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) - -enum -{ - // Split matra table indices - _x1 = 1 << IndicClassTable::CF_INDEX_SHIFT, - _x2 = 2 << IndicClassTable::CF_INDEX_SHIFT, - _x3 = 3 << IndicClassTable::CF_INDEX_SHIFT, - _x4 = 4 << IndicClassTable::CF_INDEX_SHIFT, - _x5 = 5 << IndicClassTable::CF_INDEX_SHIFT, - _x6 = 6 << IndicClassTable::CF_INDEX_SHIFT, - _x7 = 7 << IndicClassTable::CF_INDEX_SHIFT, - _x8 = 8 << IndicClassTable::CF_INDEX_SHIFT, - _x9 = 9 << IndicClassTable::CF_INDEX_SHIFT, - - // simple classes - _xx = IndicClassTable::CC_RESERVED, - _ma = IndicClassTable::CC_VOWEL_MODIFIER | IndicClassTable::CF_POS_ABOVE, - _mp = IndicClassTable::CC_VOWEL_MODIFIER | IndicClassTable::CF_POS_AFTER, - _sa = IndicClassTable::CC_STRESS_MARK | IndicClassTable::CF_POS_ABOVE, - _sb = IndicClassTable::CC_STRESS_MARK | IndicClassTable::CF_POS_BELOW, - _iv = IndicClassTable::CC_INDEPENDENT_VOWEL, - _i2 = IndicClassTable::CC_INDEPENDENT_VOWEL_2, - _ct = IndicClassTable::CC_CONSONANT | IndicClassTable::CF_CONSONANT, - _cn = IndicClassTable::CC_CONSONANT_WITH_NUKTA | IndicClassTable::CF_CONSONANT, - _nu = IndicClassTable::CC_NUKTA, - _dv = IndicClassTable::CC_DEPENDENT_VOWEL, - _dl = _dv | IndicClassTable::CF_POS_BEFORE, - _db = _dv | IndicClassTable::CF_POS_BELOW, - _da = _dv | IndicClassTable::CF_POS_ABOVE, - _dr = _dv | IndicClassTable::CF_POS_AFTER, - _lm = _dv | IndicClassTable::CF_LENGTH_MARK, - _l1 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_1 | IndicClassTable::CF_POS_BEFORE, - _a1 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_1 | IndicClassTable::CF_POS_ABOVE, - _r2 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_2 | IndicClassTable::CF_POS_AFTER, - _m2 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_2 | IndicClassTable::CF_LENGTH_MARK, - _m3 = IndicClassTable::CC_SPLIT_VOWEL_PIECE_3 | IndicClassTable::CF_LENGTH_MARK, - _vr = IndicClassTable::CC_VIRAMA, - - // split matras - _s1 = _dv | _x1, - _s2 = _dv | _x2, - _s3 = _dv | _x3, - _s4 = _dv | _x4, - _s5 = _dv | _x5, - _s6 = _dv | _x6, - _s7 = _dv | _x7, - _s8 = _dv | _x8, - _s9 = _dv | _x9, - - // consonants with special forms - // NOTE: this assumes that no consonants with nukta have - // special forms... (Bengali RA?) - _bb = _ct | IndicClassTable::CF_BELOW_BASE, - _pb = _ct | IndicClassTable::CF_POST_BASE, - _vt = _bb | IndicClassTable::CF_VATTU, - _rv = _vt | IndicClassTable::CF_REPH, - _rp = _pb | IndicClassTable::CF_REPH, - _rb = _bb | IndicClassTable::CF_REPH -}; +// Split matra table indices +#define _x1 (1 << CF_INDEX_SHIFT) +#define _x2 (2 << CF_INDEX_SHIFT) +#define _x3 (3 << CF_INDEX_SHIFT) +#define _x4 (4 << CF_INDEX_SHIFT) +#define _x5 (5 << CF_INDEX_SHIFT) +#define _x6 (6 << CF_INDEX_SHIFT) +#define _x7 (7 << CF_INDEX_SHIFT) +#define _x8 (8 << CF_INDEX_SHIFT) +#define _x9 (9 << CF_INDEX_SHIFT) + +// simple classes +#define _xx (CC_RESERVED) +#define _ma (CC_VOWEL_MODIFIER | CF_POS_ABOVE) +#define _mp (CC_VOWEL_MODIFIER | CF_POS_AFTER) +#define _sa (CC_STRESS_MARK | CF_POS_ABOVE) +#define _sb (CC_STRESS_MARK | CF_POS_BELOW) +#define _iv (CC_INDEPENDENT_VOWEL) +#define _i2 (CC_INDEPENDENT_VOWEL_2) +#define _i3 (CC_INDEPENDENT_VOWEL_3) +#define _ct (CC_CONSONANT | CF_CONSONANT) +#define _cn (CC_CONSONANT_WITH_NUKTA | CF_CONSONANT) +#define _nu (CC_NUKTA) +#define _dv (CC_DEPENDENT_VOWEL) +#define _dl (_dv | CF_POS_BEFORE) +#define _db (_dv | CF_POS_BELOW) +#define _da (_dv | CF_POS_ABOVE) +#define _dr (_dv | CF_POS_AFTER) +#define _lm (_dv | CF_LENGTH_MARK) +#define _l1 (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_BEFORE) +#define _a1 (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_ABOVE) +#define _b2 (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_BELOW) +#define _r2 (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_AFTER) +#define _m2 (CC_SPLIT_VOWEL_PIECE_2 | CF_LENGTH_MARK) +#define _m3 (CC_SPLIT_VOWEL_PIECE_3 | CF_LENGTH_MARK) +#define _vr (CC_VIRAMA) + +// split matras +#define _s1 (_dv | _x1) +#define _s2 (_dv | _x2) +#define _s3 (_dv | _x3) +#define _s4 (_dv | _x4) +#define _s5 (_dv | _x5) +#define _s6 (_dv | _x6) +#define _s7 (_dv | _x7) +#define _s8 (_dv | _x8) +#define _s9 (_dv | _x9) + +// consonants with special forms +// NOTE: this assumes that no consonants with nukta have +// special forms... (Bengali RA?) +#define _bb (_ct | CF_BELOW_BASE) +#define _pb (_ct | CF_POST_BASE) +#define _vt (_bb | CF_VATTU) +#define _rv (_vt | CF_REPH) +#define _rp (_pb | CF_REPH) +#define _rb (_bb | CF_REPH) // // Character class tables @@ -103,13 +100,13 @@ static const IndicClassTable::CharClass bengCharClasses[] = static const IndicClassTable::CharClass punjCharClasses[] = { _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _xx, _iv, // 0A00 - 0A0F - _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A10 - 0A1F + _iv, _xx, _xx, _i3, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A10 - 0A1F _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _bb, // 0A20 - 0A2F - _vt, _xx, _ct, _ct, _xx, _bb, _ct, _xx, _ct, _bb, _xx, _xx, _nu, _xx, _dr, _dl, // 0A30 - 0A3F - _dr, _db, _db, _xx, _xx, _xx, _xx, _da, _da, _xx, _xx, _da, _da, _vr, _xx, _xx, // 0A40 - 0A4F - _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _cn, _cn, _cn, _cn, _xx, _cn, _xx, // 0A50 - 0A5F + _vt, _xx, _ct, _cn, _xx, _bb, _cn, _xx, _ct, _bb, _xx, _xx, _nu, _xx, _dr, _dl, // 0A30 - 0A3F + _dr, _b2, _db, _xx, _xx, _xx, _xx, _da, _da, _xx, _xx, _a1, _da, _vr, _xx, _xx, // 0A40 - 0A4F + _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _cn, _cn, _cn, _ct, _xx, _cn, _xx, // 0A50 - 0A5F _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0A60 - 0A6F - _ma, _ma, _ct, _ct, _xx // 0A70 - 0A74 + _ma, _ma, _xx, _xx, _xx // 0A70 - 0A74 }; static const IndicClassTable::CharClass gujrCharClasses[] = @@ -125,19 +122,19 @@ static const IndicClassTable::CharClass gujrCharClasses[] = static const IndicClassTable::CharClass oryaCharClasses[] = { - _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F + _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0B10 - 0B1F _ct, _ct, _ct, _ct, _bb, _ct, _ct, _ct, _bb, _xx, _ct, _ct, _bb, _bb, _bb, _pb, // 0B20 - 0B2F - _rv, _xx, _bb, _bb, _xx, _xx, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _da, // 0B30 - 0B3F + _rb, _xx, _bb, _bb, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _da, // 0B30 - 0B3F _dr, _db, _db, _db, _xx, _xx, _xx, _l1, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, // 0B40 - 0B4F _xx, _xx, _xx, _xx, _xx, _xx, _m2, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 0B50 - 0B5F _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F - _xx // 0B70 + _xx, _ct // 0B70 - 0B71 }; static const IndicClassTable::CharClass tamlCharClasses[] = { - _xx, _xx, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F + _xx, _xx, _ma, _xx, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F _iv, _xx, _iv, _iv, _iv, _ct, _xx, _xx, _xx, _ct, _ct, _xx, _ct, _xx, _ct, _ct, // 0B90 - 0B9F _xx, _xx, _xx, _ct, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _ct, _ct, // 0BA0 - 0BAF _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0BB0 - 0BBF @@ -188,6 +185,18 @@ static const IndicClassTable::CharClass mlymCharClasses[] = _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0D50 - 0D5F _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0D60 - 0D6F }; + +static const IndicClassTable::CharClass sinhCharClasses[] = +{ + _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0D80 - 0D8F + _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F + _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF + _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF + _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _vr, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF + _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF + _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF + _xx, _xx, _dr, _dr, _xx // 0DF0 - 0DF4 +}; // // Split matra tables @@ -201,10 +210,13 @@ static const SplitMatra tamlSplitTable[] = {{0x0BC6, 0x0BBE}, {0x0BC7, 0x0BBE}, static const SplitMatra teluSplitTable[] = {{0x0C46, 0x0C56}}; static const SplitMatra kndaSplitTable[] = {{0x0CBF, 0x0CD5}, {0x0CC6, 0x0CD5}, {0x0CC6, 0x0CD6}, {0x0CC6, 0x0CC2}, - {0x0CC6, 0x0CC2, 0x0CD5}}; + {0x0CC6, 0x0CC2, 0x0CD5}}; static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}}; + +static const SplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF,0x0DCA}, + {0x0DD9, 0x0DDF}}; // // Script Flags // @@ -212,15 +224,16 @@ static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, // FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil // FIXME: reformed Malayalam needs to reorder VATTU to before base glyph... // FIXME: eyelash RA only for Devanagari?? -#define DEVA_SCRIPT_FLAGS (IndicClassTable::SF_EYELASH_RA | IndicClassTable::SF_NO_POST_BASE_LIMIT) -#define BENG_SCRIPT_FLAGS (IndicClassTable::SF_REPH_AFTER_BELOW | IndicClassTable::SF_NO_POST_BASE_LIMIT) -#define PUNJ_SCRIPT_FLAGS (IndicClassTable::SF_NO_POST_BASE_LIMIT) -#define GUJR_SCRIPT_FLAGS (IndicClassTable::SF_NO_POST_BASE_LIMIT) -#define ORYA_SCRIPT_FLAGS (IndicClassTable::SF_REPH_AFTER_BELOW | IndicClassTable::SF_NO_POST_BASE_LIMIT) -#define TAML_SCRIPT_FLAGS (IndicClassTable::SF_MPRE_FIXUP | IndicClassTable::SF_NO_POST_BASE_LIMIT) -#define TELU_SCRIPT_FLAGS (IndicClassTable::SF_MATRAS_AFTER_BASE | 3) -#define KNDA_SCRIPT_FLAGS (IndicClassTable::SF_MATRAS_AFTER_BASE | 3) -#define MLYM_SCRIPT_FLAGS (IndicClassTable::SF_MPRE_FIXUP | IndicClassTable::SF_NO_POST_BASE_LIMIT) +#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3) +#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3) +#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH) +#define SINH_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT) // // Indic Class Tables @@ -233,7 +246,7 @@ static const IndicClassTable punjClassTable = {0x0A00, 0x0A74, 2, PUNJ_SCRIPT_FL static const IndicClassTable gujrClassTable = {0x0A80, 0x0AEF, 2, GUJR_SCRIPT_FLAGS, gujrCharClasses, NULL}; -static const IndicClassTable oryaClassTable = {0x0B00, 0x0B70, 3, ORYA_SCRIPT_FLAGS, oryaCharClasses, oryaSplitTable}; +static const IndicClassTable oryaClassTable = {0x0B00, 0x0B71, 3, ORYA_SCRIPT_FLAGS, oryaCharClasses, oryaSplitTable}; static const IndicClassTable tamlClassTable = {0x0B80, 0x0BF2, 3, TAML_SCRIPT_FLAGS, tamlCharClasses, tamlSplitTable}; @@ -243,10 +256,12 @@ static const IndicClassTable kndaClassTable = {0x0C80, 0x0CEF, 4, KNDA_SCRIPT_FL static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable}; +static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 3, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable}; + // // IndicClassTable addresses // -static const IndicClassTable * const indicClassTables[] = { +static const IndicClassTable * const indicClassTables[scriptCodeCount] = { NULL, /* 'zyyy' (COMMON) */ NULL, /* 'qaai' (INHERITED) */ NULL, /* 'arab' (ARABIC) */ @@ -254,7 +269,7 @@ static const IndicClassTable * const indicClassTables[] = { &bengClassTable, /* 'beng' (BENGALI) */ NULL, /* 'bopo' (BOPOMOFO) */ NULL, /* 'cher' (CHEROKEE) */ - NULL, /* 'qaac' (COPTIC) */ + NULL, /* 'copt' (COPTIC) */ NULL, /* 'cyrl' (CYRILLIC) */ NULL, /* 'dsrt' (DESERET) */ &devaClassTable, /* 'deva' (DEVANAGARI) */ @@ -280,7 +295,7 @@ static const IndicClassTable * const indicClassTables[] = { NULL, /* 'ital' (OLD-ITALIC) */ &oryaClassTable, /* 'orya' (ORIYA) */ NULL, /* 'runr' (RUNIC) */ - NULL, /* 'sinh' (SINHALA) */ + &sinhClassTable, /* 'sinh' (SINHALA) */ NULL, /* 'syrc' (SYRIAC) */ &tamlClassTable, /* 'taml' (TAMIL) */ &teluClassTable, /* 'telu' (TELUGU) */ @@ -301,7 +316,56 @@ static const IndicClassTable * const indicClassTables[] = { NULL, /* 'shaw' (SHAVIAN) */ NULL, /* 'tale' (TAI_LE) */ NULL, /* 'ugar' (UGARITIC) */ - NULL /* 'hrkt' (KATAKANA_OR_HIRAGANA) */ + NULL, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */ + NULL, /* 'bugi' (BUGINESE) */ + NULL, /* 'glag' (GLAGOLITIC) */ + NULL, /* 'khar' (KHAROSHTHI) */ + NULL, /* 'sylo' (SYLOTI_NAGRI) */ + NULL, /* 'talu' (NEW_TAI_LUE) */ + NULL, /* 'tfng' (TIFINAGH) */ + NULL, /* 'xpeo' (OLD_PERSIAN) */ + NULL, /* 'bali' (BALINESE) */ + NULL, /* 'batk' (BATK) */ + NULL, /* 'blis' (BLIS) */ + NULL, /* 'brah' (BRAH) */ + NULL, /* 'cham' (CHAM) */ + NULL, /* 'cirt' (CIRT) */ + NULL, /* 'cyrs' (CYRS) */ + NULL, /* 'egyd' (EGYD) */ + NULL, /* 'egyh' (EGYH) */ + NULL, /* 'egyp' (EGYP) */ + NULL, /* 'geok' (GEOK) */ + NULL, /* 'hans' (HANS) */ + NULL, /* 'hant' (HANT) */ + NULL, /* 'hmng' (HMNG) */ + NULL, /* 'hung' (HUNG) */ + NULL, /* 'inds' (INDS) */ + NULL, /* 'java' (JAVA) */ + NULL, /* 'kali' (KALI) */ + NULL, /* 'latf' (LATF) */ + NULL, /* 'latg' (LATG) */ + NULL, /* 'lepc' (LEPC) */ + NULL, /* 'lina' (LINA) */ + NULL, /* 'mand' (MAND) */ + NULL, /* 'maya' (MAYA) */ + NULL, /* 'mero' (MERO) */ + NULL, /* 'nko ' (NKO) */ + NULL, /* 'orkh' (ORKH) */ + NULL, /* 'perm' (PERM) */ + NULL, /* 'phag' (PHAGS_PA) */ + NULL, /* 'phnx' (PHOENICIAN) */ + NULL, /* 'plrd' (PLRD) */ + NULL, /* 'roro' (RORO) */ + NULL, /* 'sara' (SARA) */ + NULL, /* 'syre' (SYRE) */ + NULL, /* 'syrj' (SYRJ) */ + NULL, /* 'syrn' (SYRN) */ + NULL, /* 'teng' (TENG) */ + NULL, /* 'vai ' (VAII) */ + NULL, /* 'visp' (VISP) */ + NULL, /* 'xsux' (CUNEIFORM) */ + NULL, /* 'zxxx' (ZXXX) */ + NULL /* 'zzzz' (UNKNOWN) */ }; IndicClassTable::CharClass IndicClassTable::getCharClass(LEUnicode ch) const @@ -341,4 +405,15 @@ le_int32 IndicReordering::getWorstCaseExpansion(le_int32 scriptCode) return classTable->getWorstCaseExpansion(); } +le_bool IndicReordering::getFilterZeroWidth(le_int32 scriptCode) +{ + const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode); + + if (classTable == NULL) { + return TRUE; + } + + return classTable->getFilterZeroWidth(); +} + U_NAMESPACE_END diff --git a/icuSources/layout/IndicLayoutEngine.cpp b/icuSources/layout/IndicLayoutEngine.cpp index 3b776a0d..ec83e73e 100644 --- a/icuSources/layout/IndicLayoutEngine.cpp +++ b/icuSources/layout/IndicLayoutEngine.cpp @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -25,16 +25,20 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicOpenTypeLayoutEngine) IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable), fMPreFixups(NULL) + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable), fMPreFixups(NULL) { - fFeatureOrder = IndicReordering::getFeatureOrder(); + fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; + + fFilterZeroWidth = IndicReordering::getFilterZeroWidth(fScriptCode); } -IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode) - : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode), fMPreFixups(NULL) +IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fMPreFixups(NULL) { - fFeatureOrder = IndicReordering::getFeatureOrder(); + fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; } IndicOpenTypeLayoutEngine::~IndicOpenTypeLayoutEngine() diff --git a/icuSources/layout/IndicLayoutEngine.h b/icuSources/layout/IndicLayoutEngine.h index e5abc021..af0f4c97 100644 --- a/icuSources/layout/IndicLayoutEngine.h +++ b/icuSources/layout/IndicLayoutEngine.h @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -55,7 +55,7 @@ public: * @internal */ IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable); + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); /** * This constructor is used when the font requires a "canned" GSUB table which can't be known @@ -70,7 +70,8 @@ public: * * @internal */ - IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); /** * The destructor, virtual for correct polymorphic invocation. diff --git a/icuSources/layout/IndicReordering.cpp b/icuSources/layout/IndicReordering.cpp index ae290428..7554d453 100644 --- a/icuSources/layout/IndicReordering.cpp +++ b/icuSources/layout/IndicReordering.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -13,42 +13,82 @@ U_NAMESPACE_BEGIN -class ReorderingOutput : public UMemory { +#define loclFeatureTag LE_LOCL_FEATURE_TAG +#define initFeatureTag LE_INIT_FEATURE_TAG +#define nuktFeatureTag LE_NUKT_FEATURE_TAG +#define akhnFeatureTag LE_AKHN_FEATURE_TAG +#define rphfFeatureTag LE_RPHF_FEATURE_TAG +#define blwfFeatureTag LE_BLWF_FEATURE_TAG +#define halfFeatureTag LE_HALF_FEATURE_TAG +#define pstfFeatureTag LE_PSTF_FEATURE_TAG +#define vatuFeatureTag LE_VATU_FEATURE_TAG +#define presFeatureTag LE_PRES_FEATURE_TAG +#define blwsFeatureTag LE_BLWS_FEATURE_TAG +#define abvsFeatureTag LE_ABVS_FEATURE_TAG +#define pstsFeatureTag LE_PSTS_FEATURE_TAG +#define halnFeatureTag LE_HALN_FEATURE_TAG + +#define blwmFeatureTag LE_BLWM_FEATURE_TAG +#define abvmFeatureTag LE_ABVM_FEATURE_TAG +#define distFeatureTag LE_DIST_FEATURE_TAG + +#define loclFeatureMask 0x80000000UL +#define rphfFeatureMask 0x40000000UL +#define blwfFeatureMask 0x20000000UL +#define halfFeatureMask 0x10000000UL +#define pstfFeatureMask 0x08000000UL +#define nuktFeatureMask 0x04000000UL +#define akhnFeatureMask 0x02000000UL +#define vatuFeatureMask 0x01000000UL +#define presFeatureMask 0x00800000UL +#define blwsFeatureMask 0x00400000UL +#define abvsFeatureMask 0x00200000UL +#define pstsFeatureMask 0x00100000UL +#define halnFeatureMask 0x00080000UL +#define blwmFeatureMask 0x00040000UL +#define abvmFeatureMask 0x00020000UL +#define distFeatureMask 0x00010000UL +#define initFeatureMask 0x00008000UL + +class IndicReorderingOutput : public UMemory { private: - le_int32 fOutIndex; + le_int32 fOutIndex; LEUnicode *fOutChars; LEGlyphStorage &fGlyphStorage; - LEUnicode fMpre; - le_int32 fMpreIndex; + LEUnicode fMpre; + le_int32 fMpreIndex; - LEUnicode fMbelow; - le_int32 fMbelowIndex; + LEUnicode fMbelow; + le_int32 fMbelowIndex; - LEUnicode fMabove; - le_int32 fMaboveIndex; + LEUnicode fMabove; + le_int32 fMaboveIndex; - LEUnicode fMpost; - le_int32 fMpostIndex; + LEUnicode fMpost; + le_int32 fMpostIndex; - LEUnicode fLengthMark; - le_int32 fLengthMarkIndex; + LEUnicode fLengthMark; + le_int32 fLengthMarkIndex; - const LETag *fMatraTags; + LEUnicode fVirama; + le_int32 fViramaIndex; + + FeatureMask fMatraFeatures; - le_int32 fMPreOutIndex; + le_int32 fMPreOutIndex; MPreFixups *fMPreFixups; - LEUnicode fVMabove; - LEUnicode fVMpost; - le_int32 fVMIndex; - const LETag *fVMTags; + LEUnicode fVMabove; + LEUnicode fVMpost; + le_int32 fVMIndex; + FeatureMask fVMFeatures; - LEUnicode fSMabove; - LEUnicode fSMbelow; - le_int32 fSMIndex; - const LETag *fSMTags; + LEUnicode fSMabove; + LEUnicode fSMbelow; + le_int32 fSMIndex; + FeatureMask fSMFeatures; void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass) { @@ -56,24 +96,27 @@ private: if (IndicClassTable::isLengthMark(matraClass)) { fLengthMark = matra; fLengthMarkIndex = matraIndex; + } else if (IndicClassTable::isVirama(matraClass)) { + fVirama = matra; + fViramaIndex = matraIndex; } else { - switch (matraClass & IndicClassTable::CF_POS_MASK) { - case IndicClassTable::CF_POS_BEFORE: + switch (matraClass & CF_POS_MASK) { + case CF_POS_BEFORE: fMpre = matra; fMpreIndex = matraIndex; break; - case IndicClassTable::CF_POS_BELOW: + case CF_POS_BELOW: fMbelow = matra; fMbelowIndex = matraIndex; break; - case IndicClassTable::CF_POS_ABOVE: + case CF_POS_ABOVE: fMabove = matra; fMaboveIndex = matraIndex; break; - case IndicClassTable::CF_POS_AFTER: + case CF_POS_AFTER: fMpost = matra; fMpostIndex = matraIndex; break; @@ -86,36 +129,52 @@ private: } public: - ReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups) + IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups) : fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage), fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0), - fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fMatraTags(NULL), - fMPreOutIndex(-1), fMPreFixups(mpreFixups), - fVMabove(0), fVMpost(0), fVMIndex(0), fVMTags(NULL), - fSMabove(0), fSMbelow(0), fSMIndex(0), fSMTags(NULL) + fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fVirama(0), fViramaIndex(0), + fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups), + fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0), + fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0) { // nothing else to do... } - ~ReorderingOutput() + ~IndicReorderingOutput() { // nothing to do here... } void reset() { - fMpre = fMbelow = fMabove = fMpost = fLengthMark = 0; + fMpre = fMbelow = fMabove = fMpost = fLengthMark = fVirama = 0; fMPreOutIndex = -1; fVMabove = fVMpost = 0; fSMabove = fSMbelow = 0; } - le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, const LETag *matraTags) + void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures) + { + LEErrorCode success = LE_NO_ERROR; + + fOutChars[fOutIndex] = ch; + + fGlyphStorage.setCharIndex(fOutIndex, charIndex, success); + fGlyphStorage.setAuxData(fOutIndex, charFeatures, success); + + fOutIndex += 1; + } + + le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, FeatureMask matraFeatures, le_bool wordStart) { IndicClassTable::CharClass matraClass = classTable->getCharClass(matra); - fMatraTags = matraTags; + fMatraFeatures = matraFeatures; + + if (wordStart) { + fMatraFeatures |= initFeatureMask; + } if (IndicClassTable::isMatra(matraClass)) { if (IndicClassTable::isSplitMatra(matraClass)) { @@ -138,20 +197,20 @@ public: return FALSE; } - void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier, le_uint32 vowelModifierIndex, const LETag *vowelModifierTags) + void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier, le_uint32 vowelModifierIndex, FeatureMask vowelModifierFeatures) { IndicClassTable::CharClass vmClass = classTable->getCharClass(vowelModifier); fVMIndex = vowelModifierIndex; - fVMTags = vowelModifierTags; + fVMFeatures = vowelModifierFeatures; if (IndicClassTable::isVowelModifier(vmClass)) { - switch (vmClass & IndicClassTable::CF_POS_MASK) { - case IndicClassTable::CF_POS_ABOVE: + switch (vmClass & CF_POS_MASK) { + case CF_POS_ABOVE: fVMabove = vowelModifier; break; - case IndicClassTable::CF_POS_AFTER: + case CF_POS_AFTER: fVMpost = vowelModifier; break; @@ -162,20 +221,20 @@ public: } } - void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark, le_uint32 stressMarkIndex, const LETag *stressMarkTags) + void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark, le_uint32 stressMarkIndex, FeatureMask stressMarkFeatures) { IndicClassTable::CharClass smClass = classTable->getCharClass(stressMark); fSMIndex = stressMarkIndex; - fSMTags = stressMarkTags; + fSMFeatures = stressMarkFeatures; if (IndicClassTable::isStressMark(smClass)) { - switch (smClass & IndicClassTable::CF_POS_MASK) { - case IndicClassTable::CF_POS_ABOVE: + switch (smClass & CF_POS_MASK) { + case CF_POS_ABOVE: fSMabove = stressMark; break; - case IndicClassTable::CF_POS_BELOW: + case CF_POS_BELOW: fSMbelow = stressMark; break; @@ -193,82 +252,78 @@ public: } } + // Handles virama in Sinhala split vowels. + void writeVirama() + { + if (fVirama != 0) { + writeChar(fVirama, fViramaIndex, fMatraFeatures); + } + } + void writeMpre() { if (fMpre != 0) { fMPreOutIndex = fOutIndex; - writeChar(fMpre, fMpreIndex, fMatraTags); + writeChar(fMpre, fMpreIndex, fMatraFeatures); } } void writeMbelow() { if (fMbelow != 0) { - writeChar(fMbelow, fMbelowIndex, fMatraTags); + writeChar(fMbelow, fMbelowIndex, fMatraFeatures); } } void writeMabove() { if (fMabove != 0) { - writeChar(fMabove, fMaboveIndex, fMatraTags); + writeChar(fMabove, fMaboveIndex, fMatraFeatures); } } void writeMpost() { if (fMpost != 0) { - writeChar(fMpost, fMpostIndex, fMatraTags); + writeChar(fMpost, fMpostIndex, fMatraFeatures); } } void writeLengthMark() { if (fLengthMark != 0) { - writeChar(fLengthMark, fLengthMarkIndex, fMatraTags); + writeChar(fLengthMark, fLengthMarkIndex, fMatraFeatures); } } void writeVMabove() { if (fVMabove != 0) { - writeChar(fVMabove, fVMIndex, fVMTags); + writeChar(fVMabove, fVMIndex, fVMFeatures); } } void writeVMpost() { if (fVMpost != 0) { - writeChar(fVMpost, fVMIndex, fVMTags); + writeChar(fVMpost, fVMIndex, fVMFeatures); } } void writeSMabove() { if (fSMabove != 0) { - writeChar(fSMabove, fSMIndex, fSMTags); + writeChar(fSMabove, fSMIndex, fSMFeatures); } } void writeSMbelow() { if (fSMbelow != 0) { - writeChar(fSMbelow, fSMIndex, fSMTags); + writeChar(fSMbelow, fSMIndex, fSMFeatures); } } - void writeChar(LEUnicode ch, le_uint32 charIndex, const LETag *charTags) - { - LEErrorCode success = LE_NO_ERROR; - - fOutChars[fOutIndex] = ch; - - fGlyphStorage.setCharIndex(fOutIndex, charIndex, success); - fGlyphStorage.setAuxData(fOutIndex, (void *) charTags, success); - - fOutIndex += 1; - } - le_int32 getOutputIndex() { return fOutIndex; @@ -280,66 +335,60 @@ enum C_DOTTED_CIRCLE = 0x25CC }; -static const LETag emptyTag = 0x00000000; // '' - -static const LETag nuktFeatureTag = LE_NUKT_FEATURE_TAG; -static const LETag akhnFeatureTag = LE_AKHN_FEATURE_TAG; -static const LETag rphfFeatureTag = LE_RPHF_FEATURE_TAG; -static const LETag blwfFeatureTag = LE_BLWF_FEATURE_TAG; -static const LETag halfFeatureTag = LE_HALF_FEATURE_TAG; -static const LETag pstfFeatureTag = LE_PSTF_FEATURE_TAG; -static const LETag vatuFeatureTag = LE_VATU_FEATURE_TAG; -static const LETag presFeatureTag = LE_PRES_FEATURE_TAG; -static const LETag blwsFeatureTag = LE_BLWS_FEATURE_TAG; -static const LETag abvsFeatureTag = LE_ABVS_FEATURE_TAG; -static const LETag pstsFeatureTag = LE_PSTS_FEATURE_TAG; -static const LETag halnFeatureTag = LE_HALN_FEATURE_TAG; - -static const LETag blwmFeatureTag = LE_BLWM_FEATURE_TAG; -static const LETag abvmFeatureTag = LE_ABVM_FEATURE_TAG; -static const LETag distFeatureTag = LE_DIST_FEATURE_TAG; - -// These are in the order in which the features need to be applied -// for correct processing -static const LETag featureOrder[] = -{ - nuktFeatureTag, akhnFeatureTag, rphfFeatureTag, blwfFeatureTag, halfFeatureTag, pstfFeatureTag, - vatuFeatureTag, presFeatureTag, blwsFeatureTag, abvsFeatureTag, pstsFeatureTag, halnFeatureTag, - blwmFeatureTag, abvmFeatureTag, distFeatureTag, emptyTag -}; +// TODO: Find better names for these! +#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask) +#define tagArray3 (pstfFeatureMask | tagArray4) +#define tagArray2 (halfFeatureMask | tagArray3) +#define tagArray1 (blwfFeatureMask | tagArray2) +#define tagArray0 (rphfFeatureMask | tagArray1) -// The order of these is determined so that the tag array of each glyph can start -// at an offset into this array -// FIXME: do we want a seperate tag array for each kind of character?? -// FIXME: are there cases where this ordering causes glyphs to get tags -// that they shouldn't? -static const LETag tagArray[] = +static const FeatureMap featureMap[] = { - rphfFeatureTag, blwfFeatureTag, halfFeatureTag, pstfFeatureTag, nuktFeatureTag, akhnFeatureTag, - vatuFeatureTag, presFeatureTag, blwsFeatureTag, abvsFeatureTag, pstsFeatureTag, halnFeatureTag, - blwmFeatureTag, abvmFeatureTag, distFeatureTag, emptyTag + {loclFeatureTag, loclFeatureMask}, + {initFeatureTag, initFeatureMask}, + {nuktFeatureTag, nuktFeatureMask}, + {akhnFeatureTag, akhnFeatureMask}, + {rphfFeatureTag, rphfFeatureMask}, + {blwfFeatureTag, blwfFeatureMask}, + {halfFeatureTag, halfFeatureMask}, + {pstfFeatureTag, pstfFeatureMask}, + {vatuFeatureTag, vatuFeatureMask}, + {presFeatureTag, presFeatureMask}, + {blwsFeatureTag, blwsFeatureMask}, + {abvsFeatureTag, abvsFeatureMask}, + {pstsFeatureTag, pstsFeatureMask}, + {halnFeatureTag, halnFeatureMask}, + {blwmFeatureTag, blwmFeatureMask}, + {abvmFeatureTag, abvmFeatureMask}, + {distFeatureTag, distFeatureMask} }; -static const le_int8 stateTable[][IndicClassTable::CC_COUNT] = -{ -// xx vm sm iv i2 ct cn nu dv s1 s2 s3 vr zw - { 1, 1, 1, 5, 8, 3, 2, 1, 5, 9, 5, 1, 1, 1}, // 0 - ground state - {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state - {-1, 6, 1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1}, // 2 - consonant - {-1, 6, 1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, -1}, // 3 - consonant with nukta - {-1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant virama - {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels - {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark - {-1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - ZWJ, ZWNJ - {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 - independent vowels that can take a virama - {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, 10, 5, -1, -1}, // 9 - first part of split vowel - {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1} // 10 - second part of split vowel +static const le_int32 featureCount = LE_ARRAY_SIZE(featureMap); +static const le_int8 stateTable[][CC_COUNT] = +{ +// xx vm sm iv i2 i3 ct cn nu dv s1 s2 s3 vr zw + { 1, 6, 1, 5, 8, 11, 3, 2, 1, 5, 9, 5, 5, 1, 1}, // 0 - ground state + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state + {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, 12}, // 2 - consonant with nukta + {-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 12}, // 3 - consonant + {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant virama + {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels + {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark + {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - consonant virama ZWJ, consonant ZWJ virama + {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 - independent vowels that can take a virama + {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, -1, -1}, // 9 - first part of split vowel + {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1}, // 10 - second part of split vowel + {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1}, // 11 - independent vowels that can take an iv + {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1} // 12 - consonant ZWJ (TODO: Take everything else that can be after a consonant?) }; -const LETag *IndicReordering::getFeatureOrder() + +const FeatureMap *IndicReordering::getFeatureMap(le_int32 &count) { - return featureOrder; + count = featureCount; + + return featureMap; } le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount) @@ -350,7 +399,7 @@ le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const while (cursor < charCount) { IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]); - state = stateTable[state][charClass & IndicClassTable::CF_CLASS_MASK]; + state = stateTable[state][charClass & CF_CLASS_MASK]; if (state < 0) { break; @@ -369,12 +418,13 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le MPreFixups *mpreFixups = NULL; const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode); - if (classTable->scriptFlags & IndicClassTable::SF_MPRE_FIXUP) { + if (classTable->scriptFlags & SF_MPRE_FIXUP) { mpreFixups = new MPreFixups(charCount); } - ReorderingOutput output(outChars, glyphStorage, mpreFixups); + IndicReorderingOutput output(outChars, glyphStorage, mpreFixups); le_int32 i, prev = 0; + le_bool lastInWord = FALSE; while (prev < charCount) { le_int32 syllable = findSyllable(classTable, chars, prev, charCount); @@ -384,66 +434,72 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le if (classTable->isStressMark(chars[markStart - 1])) { markStart -= 1; - output.noteStressMark(classTable, chars[markStart], markStart, &tagArray[1]); + output.noteStressMark(classTable, chars[markStart], markStart, tagArray1); } - if (classTable->isVowelModifier(chars[markStart - 1])) { + if (markStart != prev && classTable->isVowelModifier(chars[markStart - 1])) { markStart -= 1; - output.noteVowelModifier(classTable, chars[markStart], markStart, &tagArray[1]); + output.noteVowelModifier(classTable, chars[markStart], markStart, tagArray1); } matra = markStart - 1; - while (output.noteMatra(classTable, chars[matra], matra, &tagArray[1]) && matra != prev) { + while (output.noteMatra(classTable, chars[matra], matra, tagArray1, !lastInWord) && matra != prev) { matra -= 1; } - switch (classTable->getCharClass(chars[prev]) & IndicClassTable::CF_CLASS_MASK) { - case IndicClassTable::CC_RESERVED: - case IndicClassTable::CC_INDEPENDENT_VOWEL: - case IndicClassTable::CC_ZERO_WIDTH_MARK: + lastInWord = TRUE; + + switch (classTable->getCharClass(chars[prev]) & CF_CLASS_MASK) { + case CC_RESERVED: + lastInWord = FALSE; + /* fall through */ + + case CC_INDEPENDENT_VOWEL: + case CC_ZERO_WIDTH_MARK: for (i = prev; i < syllable; i += 1) { - output.writeChar(chars[i], i, &tagArray[1]); + output.writeChar(chars[i], i, tagArray1); } break; - case IndicClassTable::CC_NUKTA: - case IndicClassTable::CC_VIRAMA: - output.writeChar(C_DOTTED_CIRCLE, prev, &tagArray[1]); - output.writeChar(chars[prev], prev, &tagArray[1]); + case CC_NUKTA: + case CC_VIRAMA: + output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1); + output.writeChar(chars[prev], prev, tagArray1); break; - case IndicClassTable::CC_DEPENDENT_VOWEL: - case IndicClassTable::CC_SPLIT_VOWEL_PIECE_1: - case IndicClassTable::CC_SPLIT_VOWEL_PIECE_2: - case IndicClassTable::CC_SPLIT_VOWEL_PIECE_3: - case IndicClassTable::CC_VOWEL_MODIFIER: - case IndicClassTable::CC_STRESS_MARK: + case CC_DEPENDENT_VOWEL: + case CC_SPLIT_VOWEL_PIECE_1: + case CC_SPLIT_VOWEL_PIECE_2: + case CC_SPLIT_VOWEL_PIECE_3: + case CC_VOWEL_MODIFIER: + case CC_STRESS_MARK: output.writeMpre(); - output.writeChar(C_DOTTED_CIRCLE, prev, &tagArray[1]); + output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1); output.writeMbelow(); output.writeSMbelow(); output.writeMabove(); - if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) != 0) { + if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) { output.writeMpost(); } - if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) != 0) { + if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) { output.writeVMabove(); output.writeSMabove(); // FIXME: there are no SM's in these scripts... } - if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) == 0) { + if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) { output.writeMpost(); } output.writeLengthMark(); + output.writeVirama(); - if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) == 0) { + if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) { output.writeVMabove(); output.writeSMabove(); } @@ -451,9 +507,10 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le output.writeVMpost(); break; - case IndicClassTable::CC_INDEPENDENT_VOWEL_2: - case IndicClassTable::CC_CONSONANT: - case IndicClassTable::CC_CONSONANT_WITH_NUKTA: + case CC_INDEPENDENT_VOWEL_2: + case CC_INDEPENDENT_VOWEL_3: + case CC_CONSONANT: + case CC_CONSONANT_WITH_NUKTA: { le_uint32 length = markStart - prev; le_int32 lastConsonant = markStart - 1; @@ -464,7 +521,7 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le baseLimit += 2; // Check for eyelash RA, if the script supports it - if ((classTable->scriptFlags & IndicClassTable::SF_EYELASH_RA) != 0 && + if ((classTable->scriptFlags & SF_EYELASH_RA) != 0 && chars[baseLimit] == C_SIGN_ZWJ) { if (length > 3) { baseLimit += 1; @@ -480,11 +537,11 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le le_int32 baseConsonant = lastConsonant; le_int32 postBase = lastConsonant + 1; - le_int32 postBaseLimit = classTable->scriptFlags & IndicClassTable::SF_POST_BASE_LIMIT_MASK; + le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK; le_bool seenVattu = FALSE; le_bool seenBelowBaseForm = FALSE; - if (classTable->isNukta(chars[postBase])) { + if (postBase < markStart && classTable->isNukta(chars[postBase])) { postBase += 1; } @@ -522,9 +579,9 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le // Write eyelash RA // NOTE: baseLimit == prev + 3 iff eyelash RA present... if (baseLimit == prev + 3) { - output.writeChar(chars[prev], prev, &tagArray[2]); - output.writeChar(chars[prev + 1], prev + 1, &tagArray[2]); - output.writeChar(chars[prev + 2], prev + 2, &tagArray[2]); + output.writeChar(chars[prev], prev, tagArray2); + output.writeChar(chars[prev + 1], prev + 1, tagArray2); + output.writeChar(chars[prev + 2], prev + 2, tagArray2); } // write any pre-base consonants @@ -533,21 +590,21 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le for (i = baseLimit; i < baseConsonant; i += 1) { LEUnicode ch = chars[i]; // Don't put 'blwf' on first consonant. - const LETag *tag = (i == baseLimit? &tagArray[2] : &tagArray[1]); + FeatureMask features = (i == baseLimit? tagArray2 : tagArray1); IndicClassTable::CharClass charClass = classTable->getCharClass(ch); if (IndicClassTable::isConsonant(charClass)) { if (IndicClassTable::isVattu(charClass) && supressVattu) { - tag = &tagArray[4]; + features = tagArray4; } supressVattu = IndicClassTable::isVattu(charClass); } else if (IndicClassTable::isVirama(charClass) && chars[i + 1] == C_SIGN_ZWNJ) { - tag = &tagArray[4]; + features = tagArray4; } - output.writeChar(ch, i, tag); + output.writeChar(ch, i, features); } le_int32 bcSpan = baseConsonant + 1; @@ -569,10 +626,10 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le // write base consonant for (i = baseConsonant; i < bcSpan; i += 1) { - output.writeChar(chars[i], i, &tagArray[4]); + output.writeChar(chars[i], i, tagArray4); } - if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) != 0) { + if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) { output.writeMbelow(); output.writeSMbelow(); // FIXME: there are no SMs in these scripts... output.writeMabove(); @@ -582,26 +639,26 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le // write below-base consonants if (baseConsonant != lastConsonant) { for (i = bcSpan + 1; i < postBase; i += 1) { - output.writeChar(chars[i], i, &tagArray[1]); + output.writeChar(chars[i], i, tagArray1); } if (postBase > lastConsonant) { // write halant that was after base consonant - output.writeChar(chars[bcSpan], bcSpan, &tagArray[1]); + output.writeChar(chars[bcSpan], bcSpan, tagArray1); } } // write Mbelow, SMbelow, Mabove - if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) == 0) { + if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) { output.writeMbelow(); output.writeSMbelow(); output.writeMabove(); } - if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) != 0) { + if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) { if (baseLimit == prev + 2) { - output.writeChar(chars[prev], prev, &tagArray[0]); - output.writeChar(chars[prev + 1], prev + 1, &tagArray[0]); + output.writeChar(chars[prev], prev, tagArray0); + output.writeChar(chars[prev + 1], prev + 1, tagArray0); } output.writeVMabove(); @@ -613,31 +670,32 @@ le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le if (baseConsonant != lastConsonant) { if (postBase <= lastConsonant) { for (i = postBase; i <= lastConsonant; i += 1) { - output.writeChar(chars[i], i, &tagArray[3]); + output.writeChar(chars[i], i, tagArray3); } // write halant that was after base consonant - output.writeChar(chars[bcSpan], bcSpan, &tagArray[1]); + output.writeChar(chars[bcSpan], bcSpan, tagArray1); } // write the training halant, if there is one if (lastConsonant < matra && classTable->isVirama(chars[matra])) { - output.writeChar(chars[matra], matra, &tagArray[4]); + output.writeChar(chars[matra], matra, tagArray4); } } // write Mpost - if ((classTable->scriptFlags & IndicClassTable::SF_MATRAS_AFTER_BASE) == 0) { + if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) { output.writeMpost(); } output.writeLengthMark(); + output.writeVirama(); // write reph - if ((classTable->scriptFlags & IndicClassTable::SF_REPH_AFTER_BELOW) == 0) { + if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) { if (baseLimit == prev + 2) { - output.writeChar(chars[prev], prev, &tagArray[0]); - output.writeChar(chars[prev + 1], prev + 1, &tagArray[0]); + output.writeChar(chars[prev], prev, tagArray0); + output.writeChar(chars[prev + 1], prev + 1, tagArray0); } output.writeVMabove(); diff --git a/icuSources/layout/IndicReordering.h b/icuSources/layout/IndicReordering.h index f38ef936..5a1938e9 100644 --- a/icuSources/layout/IndicReordering.h +++ b/icuSources/layout/IndicReordering.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -18,11 +18,56 @@ U_NAMESPACE_BEGIN // Characters that get refered to by name... -enum -{ - C_SIGN_ZWNJ = 0x200C, - C_SIGN_ZWJ = 0x200D -}; +#define C_SIGN_ZWNJ 0x200C +#define C_SIGN_ZWJ 0x200D + +// Character class values +#define CC_RESERVED 0U +#define CC_VOWEL_MODIFIER 1U +#define CC_STRESS_MARK 2U +#define CC_INDEPENDENT_VOWEL 3U +#define CC_INDEPENDENT_VOWEL_2 4U +#define CC_INDEPENDENT_VOWEL_3 5U +#define CC_CONSONANT 6U +#define CC_CONSONANT_WITH_NUKTA 7U +#define CC_NUKTA 8U +#define CC_DEPENDENT_VOWEL 9U +#define CC_SPLIT_VOWEL_PIECE_1 10U +#define CC_SPLIT_VOWEL_PIECE_2 11U +#define CC_SPLIT_VOWEL_PIECE_3 12U +#define CC_VIRAMA 13U +#define CC_ZERO_WIDTH_MARK 14U +#define CC_COUNT 15U + +// Character class flags +#define CF_CLASS_MASK 0x0000FFFFU + +#define CF_CONSONANT 0x80000000U + +#define CF_REPH 0x40000000U +#define CF_VATTU 0x20000000U +#define CF_BELOW_BASE 0x10000000U +#define CF_POST_BASE 0x08000000U +#define CF_LENGTH_MARK 0x04000000U + +#define CF_POS_BEFORE 0x00300000U +#define CF_POS_BELOW 0x00200000U +#define CF_POS_ABOVE 0x00100000U +#define CF_POS_AFTER 0x00000000U +#define CF_POS_MASK 0x00300000U + +#define CF_INDEX_MASK 0x000F0000U +#define CF_INDEX_SHIFT 16 + +// Script flag bits +#define SF_MATRAS_AFTER_BASE 0x80000000U +#define SF_REPH_AFTER_BELOW 0x40000000U +#define SF_EYELASH_RA 0x20000000U +#define SF_MPRE_FIXUP 0x10000000U +#define SF_FILTER_ZERO_WIDTH 0x08000000U + +#define SF_POST_BASE_LIMIT_MASK 0x0000FFFFU +#define SF_NO_POST_BASE_LIMIT 0x00007FFFU typedef LEUnicode SplitMatra[3]; @@ -31,61 +76,8 @@ class LEGlyphStorage; struct IndicClassTable { - enum CharClassValues - { - CC_RESERVED = 0, - CC_VOWEL_MODIFIER = 1, - CC_STRESS_MARK = 2, - CC_INDEPENDENT_VOWEL = 3, - CC_INDEPENDENT_VOWEL_2 = 4, - CC_CONSONANT = 5, - CC_CONSONANT_WITH_NUKTA = 6, - CC_NUKTA = 7, - CC_DEPENDENT_VOWEL = 8, - CC_SPLIT_VOWEL_PIECE_1 = 9, - CC_SPLIT_VOWEL_PIECE_2 = 10, - CC_SPLIT_VOWEL_PIECE_3 = 11, - CC_VIRAMA = 12, - CC_ZERO_WIDTH_MARK = 13, - CC_COUNT = 14 - }; - - enum CharClassFlags - { - CF_CLASS_MASK = 0x0000FFFF, - - CF_CONSONANT = 0x80000000, - - CF_REPH = 0x40000000, - CF_VATTU = 0x20000000, - CF_BELOW_BASE = 0x10000000, - CF_POST_BASE = 0x08000000, - CF_LENGTH_MARK = 0x04000000, - - CF_POS_BEFORE = 0x00300000, - CF_POS_BELOW = 0x00200000, - CF_POS_ABOVE = 0x00100000, - CF_POS_AFTER = 0x00000000, - CF_POS_MASK = 0x00300000, - - CF_INDEX_MASK = 0x000F0000, - CF_INDEX_SHIFT = 16 - }; - typedef le_uint32 CharClass; - - enum ScriptFlagBits - { - SF_MATRAS_AFTER_BASE = 0x80000000, - SF_REPH_AFTER_BELOW = 0x40000000, - SF_EYELASH_RA = 0x20000000, - SF_MPRE_FIXUP = 0x10000000, - - SF_POST_BASE_LIMIT_MASK = 0x0000FFFF, - SF_NO_POST_BASE_LIMIT = 0x00007FFF - }; - - typedef le_int32 ScriptFlags; + typedef le_uint32 ScriptFlags; LEUnicode firstChar; LEUnicode lastChar; @@ -94,38 +86,40 @@ struct IndicClassTable const CharClass *classTable; const SplitMatra *splitMatraTable; - le_int32 getWorstCaseExpansion() const; + inline le_int32 getWorstCaseExpansion() const; + inline le_bool getFilterZeroWidth() const; CharClass getCharClass(LEUnicode ch) const; - const SplitMatra *getSplitMatra(CharClass charClass) const; - - le_bool isVowelModifier(LEUnicode ch) const; - le_bool isStressMark(LEUnicode ch) const; - le_bool isConsonant(LEUnicode ch) const; - le_bool isReph(LEUnicode ch) const; - le_bool isVirama(LEUnicode ch) const; - le_bool isNukta(LEUnicode ch) const; - le_bool isVattu(LEUnicode ch) const; - le_bool isMatra(LEUnicode ch) const; - le_bool isSplitMatra(LEUnicode ch) const; - le_bool isLengthMark(LEUnicode ch) const; - le_bool hasPostOrBelowBaseForm(LEUnicode ch) const; - le_bool hasPostBaseForm(LEUnicode ch) const; - le_bool hasBelowBaseForm(LEUnicode ch) const; - - static le_bool isVowelModifier(CharClass charClass); - static le_bool isStressMark(CharClass charClass); - static le_bool isConsonant(CharClass charClass); - static le_bool isReph(CharClass charClass); - static le_bool isVirama(CharClass charClass); - static le_bool isNukta(CharClass charClass); - static le_bool isVattu(CharClass charClass); - static le_bool isMatra(CharClass charClass); - static le_bool isSplitMatra(CharClass charClass); - static le_bool isLengthMark(CharClass charClass); - static le_bool hasPostOrBelowBaseForm(CharClass charClass); - static le_bool hasPostBaseForm(CharClass charClass); - static le_bool hasBelowBaseForm(CharClass charClass); + + inline const SplitMatra *getSplitMatra(CharClass charClass) const; + + inline le_bool isVowelModifier(LEUnicode ch) const; + inline le_bool isStressMark(LEUnicode ch) const; + inline le_bool isConsonant(LEUnicode ch) const; + inline le_bool isReph(LEUnicode ch) const; + inline le_bool isVirama(LEUnicode ch) const; + inline le_bool isNukta(LEUnicode ch) const; + inline le_bool isVattu(LEUnicode ch) const; + inline le_bool isMatra(LEUnicode ch) const; + inline le_bool isSplitMatra(LEUnicode ch) const; + inline le_bool isLengthMark(LEUnicode ch) const; + inline le_bool hasPostOrBelowBaseForm(LEUnicode ch) const; + inline le_bool hasPostBaseForm(LEUnicode ch) const; + inline le_bool hasBelowBaseForm(LEUnicode ch) const; + + inline static le_bool isVowelModifier(CharClass charClass); + inline static le_bool isStressMark(CharClass charClass); + inline static le_bool isConsonant(CharClass charClass); + inline static le_bool isReph(CharClass charClass); + inline static le_bool isVirama(CharClass charClass); + inline static le_bool isNukta(CharClass charClass); + inline static le_bool isVattu(CharClass charClass); + inline static le_bool isMatra(CharClass charClass); + inline static le_bool isSplitMatra(CharClass charClass); + inline static le_bool isLengthMark(CharClass charClass); + inline static le_bool hasPostOrBelowBaseForm(CharClass charClass); + inline static le_bool hasPostBaseForm(CharClass charClass); + inline static le_bool hasBelowBaseForm(CharClass charClass); static const IndicClassTable *getScriptClassTable(le_int32 scriptCode); }; @@ -134,13 +128,15 @@ class IndicReordering /* not : public UObject because all methods are static */ public: static le_int32 getWorstCaseExpansion(le_int32 scriptCode); + static le_bool getFilterZeroWidth(le_int32 scriptCode); + static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode, LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups **outMPreFixups); static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage); - static const LETag *getFeatureOrder(); + static const FeatureMap *getFeatureMap(le_int32 &count); private: // do not instantiate @@ -155,6 +151,11 @@ inline le_int32 IndicClassTable::getWorstCaseExpansion() const return worstCaseExpansion; } +inline le_bool IndicClassTable::getFilterZeroWidth() const +{ + return (scriptFlags & SF_FILTER_ZERO_WIDTH) != 0; +} + inline const SplitMatra *IndicClassTable::getSplitMatra(CharClass charClass) const { le_int32 index = (charClass & CF_INDEX_MASK) >> CF_INDEX_SHIFT; diff --git a/icuSources/layout/KernTable.cpp b/icuSources/layout/KernTable.cpp new file mode 100644 index 00000000..fc6a6f7d --- /dev/null +++ b/icuSources/layout/KernTable.cpp @@ -0,0 +1,205 @@ +/* + * @(#)KernTable.cpp 1.1 04/10/13 + * + * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved + * + */ + +#include "KernTable.h" +#include "LEFontInstance.h" +#include "LEGlyphStorage.h" + +#include "LESwaps.h" + +#include <stdio.h> + +#define DEBUG 0 + +U_NAMESPACE_BEGIN + +struct PairInfo { + le_uint32 key; // sigh, MSVC compiler gags on union here + le_int16 value; // fword, kern value in funits +}; +#define KERN_PAIRINFO_SIZE 6 + +struct Subtable_0 { + le_uint16 nPairs; + le_uint16 searchRange; + le_uint16 entrySelector; + le_uint16 rangeShift; +}; +#define KERN_SUBTABLE_0_HEADER_SIZE 8 + +// Kern table version 0 only +struct SubtableHeader { + le_uint16 version; + le_uint16 length; + le_uint16 coverage; +}; +#define KERN_SUBTABLE_HEADER_SIZE 6 + +// Version 0 only, version 1 has different layout +struct KernTableHeader { + le_uint16 version; + le_uint16 nTables; +}; +#define KERN_TABLE_HEADER_SIZE 4 + +#define COVERAGE_HORIZONTAL 0x1 +#define COVERAGE_MINIMUM 0x2 +#define COVERAGE_CROSS 0x4 +#define COVERAGE_OVERRIDE 0x8 + +/* + * This implementation has support for only one subtable, so if the font has + * multiple subtables, only the first will be used. If this turns out to + * be a problem in practice we should add it. + * + * This also supports only version 0 of the kern table header, only + * Apple supports the latter. + * + * This implementation isn't careful about the kern table flags, and + * might invoke kerning when it is not supposed to. That too I'm + * leaving for a bug fix. + * + * TODO: support multiple subtables + * TODO: respect header flags + */ +KernTable::KernTable(const LEFontInstance* font, const void* tableData) + : pairs(0), font(font) +{ + const KernTableHeader* header = (const KernTableHeader*)tableData; + if (header == 0) { +#if DEBUG + fprintf(stderr, "no kern data\n"); +#endif + return; + } + +#if DEBUG + // dump first 32 bytes of header + for (int i = 0; i < 64; ++i) { + fprintf(stderr, "%0.2x ", ((const char*)tableData)[i]&0xff); + if (((i+1)&0xf) == 0) { + fprintf(stderr, "\n"); + } else if (((i+1)&0x7) == 0) { + fprintf(stderr, " "); + } + } +#endif + + if (header->version == 0 && SWAPW(header->nTables) > 0) { + const SubtableHeader* subhead = (const SubtableHeader*)((char*)tableData + KERN_TABLE_HEADER_SIZE); + if (subhead->version == 0) { + coverage = SWAPW(subhead->coverage); + if (coverage & COVERAGE_HORIZONTAL) { // only handle horizontal kerning + const Subtable_0* table = (const Subtable_0*)((char*)subhead + KERN_SUBTABLE_HEADER_SIZE); + nPairs = SWAPW(table->nPairs); + searchRange = SWAPW(table->searchRange); + entrySelector = SWAPW(table->entrySelector); + rangeShift = SWAPW(table->rangeShift); + pairs = (const PairInfo*)((char*)table + KERN_SUBTABLE_0_HEADER_SIZE); + +#if DEBUG + fprintf(stderr, "coverage: %0.4x nPairs: %d pairs 0x%x\n", coverage, nPairs, pairs); + fprintf(stderr, " searchRange: %d entrySelector: %d rangeShift: %d\n", searchRange, entrySelector, rangeShift); + + { + // dump part of the pair list + char ids[256]; + for (int i = 256; --i >= 0;) { + LEGlyphID id = font->mapCharToGlyph(i); + if (id < 256) { + ids[id] = (char)i; + } + } + + const PairInfo* p = pairs; + for (i = 0; i < nPairs; ++i, p = (const PairInfo*)((char*)p+KERN_PAIRINFO_SIZE)) { + le_uint32 k = SWAPL(p->key); + le_uint16 left = (k >> 16) & 0xffff; + le_uint16 right = k & 0xffff; + if (left < 256 && right < 256) { + char c = ids[left]; + if (c > 0x20 && c < 0x7f) { + fprintf(stderr, "%c/", c & 0xff); + } else { + fprintf(stderr, "%0.2x/", c & 0xff); + } + c = ids[right]; + if (c > 0x20 && c < 0x7f) { + fprintf(stderr, "%c ", c & 0xff); + } else { + fprintf(stderr, "%0.2x ", c & 0xff); + } + } + } + } +#endif + } + } + } +} + + +/* + * Process the glyph positions. The positions array has two floats for each + * glyph, plus a trailing pair to mark the end of the last glyph. + */ +void KernTable::process(LEGlyphStorage& storage) +{ + if (pairs) { + LEErrorCode success = LE_NO_ERROR; + + le_uint32 key = storage[0]; // no need to mask off high bits + float adjust = 0; + for (int i = 1, e = storage.getGlyphCount(); i < e; ++i) { + key = key << 16 | (storage[i] & 0xffff); + + // argh, to do a binary search, we need to have the pair list in sorted order + // but it is not in sorted order on win32 platforms because of the endianness difference + // so either I have to swap the element each time I examine it, or I have to swap + // all the elements ahead of time and store them in the font + + const PairInfo* p = pairs; + const PairInfo* tp = (const PairInfo*)((char*)p + rangeShift); + if (key > SWAPL(tp->key)) { + p = tp; + } + +#if DEBUG + fprintf(stderr, "binary search for %0.8x\n", key); +#endif + + le_uint32 probe = searchRange; + while (probe > KERN_PAIRINFO_SIZE) { + probe >>= 1; + tp = (const PairInfo*)((char*)p + probe); + le_uint32 tkey = SWAPL(tp->key); +#if DEBUG + fprintf(stdout, " %.3d (%0.8x)\n", ((char*)tp - (char*)pairs)/KERN_PAIRINFO_SIZE, tkey); +#endif + if (tkey <= key) { + if (tkey == key) { + le_int16 value = SWAPW(tp->value); +#if DEBUG + fprintf(stdout, "binary found kerning pair %x:%x at %d, value: 0x%x (%g)\n", + storage[i-1], storage[i], i, value & 0xffff, font->xUnitsToPoints(value)); + fflush(stdout); +#endif + adjust += font->xUnitsToPoints(value); + break; + } + p = tp; + } + } + + storage.adjustPosition(i, adjust, 0, success); + } + storage.adjustPosition(storage.getGlyphCount(), adjust, 0, success); + } +} + +U_NAMESPACE_END + diff --git a/icuSources/layout/KernTable.h b/icuSources/layout/KernTable.h new file mode 100644 index 00000000..b8322cf1 --- /dev/null +++ b/icuSources/layout/KernTable.h @@ -0,0 +1,51 @@ +/* + * @(#)KernTable.h 1.1 04/10/13 + * + * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved + * + */ + +#ifndef __KERNTABLE_H +#define __KERNTABLE_H + +#ifndef __LETYPES_H +#include "LETypes.h" +#endif + +#include "LETypes.h" +//#include "LEFontInstance.h" +//#include "LEGlyphStorage.h" + +#include <stdio.h> + +U_NAMESPACE_BEGIN +struct PairInfo; +class LEFontInstance; +class LEGlyphStorage; + +/** + * Windows type 0 kerning table support only for now. + */ +class U_LAYOUT_API KernTable +{ + private: + le_uint16 coverage; + le_uint16 nPairs; + const PairInfo* pairs; + const LEFontInstance* font; + le_uint16 searchRange; + le_uint16 entrySelector; + le_uint16 rangeShift; + + public: + KernTable(const LEFontInstance* font, const void* tableData); + + /* + * Process the glyph positions. + */ + void process(LEGlyphStorage& storage); +}; + +U_NAMESPACE_END + +#endif diff --git a/icuSources/layout/KhmerLayoutEngine.cpp b/icuSources/layout/KhmerLayoutEngine.cpp new file mode 100644 index 00000000..7538eac5 --- /dev/null +++ b/icuSources/layout/KhmerLayoutEngine.cpp @@ -0,0 +1,81 @@ + +/* + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + * This file is a modification of the ICU file IndicLayoutEngine.cpp + * by Jens Herden and Javier Sola for Khmer language + * + */ + + +#include "OpenTypeLayoutEngine.h" +#include "KhmerLayoutEngine.h" +#include "LEGlyphStorage.h" +#include "KhmerReordering.h" + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(KhmerOpenTypeLayoutEngine) + +KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) +{ + fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; +} + +KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) +{ + fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; +} + +KhmerOpenTypeLayoutEngine::~KhmerOpenTypeLayoutEngine() +{ + // nothing to do +} + +// Input: characters +// Output: characters, char indices, tags +// Returns: output character count +le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) +{ + if (LE_FAILURE(success)) { + return 0; + } + + if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) { + success = LE_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + le_int32 worstCase = count * 3; // worst case is 3 for Khmer TODO check if 2 is enough + + outChars = LE_NEW_ARRAY(LEUnicode, worstCase); + + if (outChars == NULL) { + success = LE_MEMORY_ALLOCATION_ERROR; + return 0; + } + + glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success); + glyphStorage.allocateAuxData(success); + + if (LE_FAILURE(success)) { + LE_DELETE_ARRAY(outChars); + return 0; + } + + // NOTE: assumes this allocates featureTags... + // (probably better than doing the worst case stuff here...) + le_int32 outCharCount = KhmerReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage); + + glyphStorage.adoptGlyphCount(outCharCount); + return outCharCount; +} + +U_NAMESPACE_END diff --git a/icuSources/layout/KhmerLayoutEngine.h b/icuSources/layout/KhmerLayoutEngine.h new file mode 100644 index 00000000..56b79e97 --- /dev/null +++ b/icuSources/layout/KhmerLayoutEngine.h @@ -0,0 +1,129 @@ + +/* + * + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + * This file is a modification of the ICU file IndicLayoutEngine.h + * by Jens Herden and Javier Sola for Khmer language + * + */ + +#ifndef __KHMERLAYOUTENGINE_H +#define __KHMERLAYOUTENGINE_H + +// #include "LETypes.h" +// #include "LEFontInstance.h" +// #include "LEGlyphFilter.h" +// #include "LayoutEngine.h" +// #include "OpenTypeLayoutEngine.h" + +// #include "GlyphSubstitutionTables.h" +// #include "GlyphDefinitionTables.h" +// #include "GlyphPositioningTables.h" + +U_NAMESPACE_BEGIN + +// class MPreFixups; +// class LEGlyphStorage; + +/** + * This class implements OpenType layout for Khmer OpenType fonts, as + * specified by Microsoft in "Creating and Supporting OpenType Fonts for + * Khmer Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm) TODO: change url + * + * This class overrides the characterProcessing method to do Khmer character processing + * and reordering (See the MS spec. for more details) + * + * @internal + */ +class KhmerOpenTypeLayoutEngine : public OpenTypeLayoutEngine +{ +public: + /** + * This is the main constructor. It constructs an instance of KhmerOpenTypeLayoutEngine for + * a particular font, script and language. It takes the GSUB table as a parameter since + * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an + * Khmer OpenType font. + * + * @param fontInstance - the font + * @param scriptCode - the script + * @param langaugeCode - the language + * @param gsubTable - the GSUB table + * + * @see LayoutEngine::layoutEngineFactory + * @see OpenTypeLayoutEngine + * @see ScriptAndLangaugeTags.h for script and language codes + * + * @internal + */ + KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); + + /** + * This constructor is used when the font requires a "canned" GSUB table which can't be known + * until after this constructor has been invoked. + * + * @param fontInstance - the font + * @param scriptCode - the script + * @param langaugeCode - the language + * + * @see OpenTypeLayoutEngine + * @see ScriptAndLangaugeTags.h for script and language codes + * + * @internal + */ + KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); + + /** + * The destructor, virtual for correct polymorphic invocation. + * + * @internal + */ + virtual ~KhmerOpenTypeLayoutEngine(); + + /** + * ICU "poor man's RTTI", returns a UClassID for the actual class. + * + * @stable ICU 2.8 + */ + virtual UClassID getDynamicClassID() const; + + /** + * ICU "poor man's RTTI", returns a UClassID for this class. + * + * @stable ICU 2.8 + */ + static UClassID getStaticClassID(); + +protected: + + /** + * This method does Khmer OpenType character processing. It assigns the OpenType feature + * tags to the characters, and may generate output characters which have been reordered. + * It may also split some vowels, resulting in more output characters than input characters. + * + * Input parameters: + * @param chars - the input character context + * @param offset - the index of the first character to process + * @param count - the number of characters to process + * @param max - the number of characters in the input context + * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run + * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set. + * the auxillary data array will be set to the feature tags. + * + * Output parameters: + * @param success - set to an error code if the operation fails + * + * @return the output character count + * + * @internal + */ + virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success); + +}; + +U_NAMESPACE_END +#endif + diff --git a/icuSources/layout/KhmerReordering.cpp b/icuSources/layout/KhmerReordering.cpp new file mode 100644 index 00000000..afdd8f62 --- /dev/null +++ b/icuSources/layout/KhmerReordering.cpp @@ -0,0 +1,491 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved + * + * This file is a modification of the ICU file IndicReordering.cpp + * by Jens Herden and Javier Sola for Khmer language + * + */ + +#include "LETypes.h" +#include "OpenTypeTables.h" +#include "KhmerReordering.h" +#include "LEGlyphStorage.h" + + +U_NAMESPACE_BEGIN + +// Characters that get refered to by name... +enum +{ + C_SIGN_ZWNJ = 0x200C, + C_SIGN_ZWJ = 0x200D, + C_DOTTED_CIRCLE = 0x25CC, + C_RO = 0x179A, + C_VOWEL_AA = 0x17B6, + C_SIGN_NIKAHIT = 0x17C6, + C_VOWEL_E = 0x17C1, + C_COENG = 0x17D2 +}; + + +enum +{ + // simple classes, they are used in the statetable (in this file) to control the length of a syllable + // they are also used to know where a character should be placed (location in reference to the base character) + // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to + // indicate error in syllable construction + _xx = KhmerClassTable::CC_RESERVED, + _sa = KhmerClassTable::CC_SIGN_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_POS_ABOVE, + _sp = KhmerClassTable::CC_SIGN_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE| KhmerClassTable::CF_POS_AFTER, + _c1 = KhmerClassTable::CC_CONSONANT | KhmerClassTable::CF_CONSONANT, + _c2 = KhmerClassTable::CC_CONSONANT2 | KhmerClassTable::CF_CONSONANT, + _c3 = KhmerClassTable::CC_CONSONANT3 | KhmerClassTable::CF_CONSONANT, + _rb = KhmerClassTable::CC_ROBAT | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE, + _cs = KhmerClassTable::CC_CONSONANT_SHIFTER | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_SHIFTER, + _dl = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BEFORE | KhmerClassTable::CF_DOTTED_CIRCLE, + _db = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BELOW | KhmerClassTable::CF_DOTTED_CIRCLE, + _da = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_ABOVE_VOWEL, + _dr = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE, + _co = KhmerClassTable::CC_COENG | KhmerClassTable::CF_COENG | KhmerClassTable::CF_DOTTED_CIRCLE, + + // split vowel + _va = _da | KhmerClassTable::CF_SPLIT_VOWEL, + _vr = _dr | KhmerClassTable::CF_SPLIT_VOWEL +}; + + +// Character class tables +// _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs... +// _sa Sign placed above the base +// _sp Sign placed after the base +// _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants) +// _c2 Consonant of type 2 (only RO) +// _c3 Consonant of type 3 +// _rb Khmer sign robat u17CC. combining mark for subscript consonants +// _cd Consonant-shifter +// _dl Dependent vowel placed before the base (left of the base) +// _db Dependent vowel placed below the base +// _da Dependent vowel placed above the base +// _dr Dependent vowel placed behind the base (right of the base) +// _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following +// it to create a subscript consonant or independent vowel +// _va Khmer split vowel in wich the first part is before the base and the second one above the base +// _vr Khmer split vowel in wich the first part is before the base and the second one behind (right of) the base + +static const KhmerClassTable::CharClass khmerCharClasses[] = +{ + _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, // 1780 - 178F + _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c2, _c1, _c1, _c1, _c3, _c3, // 1790 - 179F + _c1, _c3, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, // 17A0 - 17AF + _c1, _c1, _c1, _c1, _dr, _dr, _dr, _da, _da, _da, _da, _db, _db, _db, _va, _vr, // 17B0 - 17BF + _vr, _dl, _dl, _dl, _vr, _vr, _sa, _sp, _sp, _cs, _cs, _sa, _rb, _sa, _sa, _sa, // 17C0 - 17CF + _sa, _sa, _co, _sa, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _sa, _xx, _xx, // 17D0 - 17DF +}; + + +// +// Khmer Class Tables +// + +// +// The range of characters defined in the above table is defined here. FOr Khmer 1780 to 17DF +// Even if the Khmer range is bigger, all other characters are not combinable, and therefore treated +// as _xx +static const KhmerClassTable khmerClassTable = {0x1780, 0x17df, khmerCharClasses}; + + +// Below we define how a character in the input string is either in the khmerCharClasses table +// (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear +// within the syllable, but are not in the table) we also get their type back, or an unknown object +// in which case we get _xx (CC_RESERVED) back +KhmerClassTable::CharClass KhmerClassTable::getCharClass(LEUnicode ch) const +{ + + if (ch == C_SIGN_ZWJ) { + return CC_ZERO_WIDTH_J_MARK; + } + + if (ch == C_SIGN_ZWNJ) { + return CC_ZERO_WIDTH_NJ_MARK; + } + + if (ch < firstChar || ch > lastChar) { + return CC_RESERVED; + } + + return classTable[ch - firstChar]; +} + +const KhmerClassTable *KhmerClassTable::getKhmerClassTable() +{ + return &khmerClassTable; +} + + + +class KhmerReorderingOutput : public UMemory { +private: + le_int32 fOutIndex; + LEUnicode *fOutChars; + + LEGlyphStorage &fGlyphStorage; + + +public: + KhmerReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage) + : fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage) + { + // nothing else to do... + } + + ~KhmerReorderingOutput() + { + // nothing to do here... + } + + void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures) + { + LEErrorCode success = LE_NO_ERROR; + + fOutChars[fOutIndex] = ch; + + fGlyphStorage.setCharIndex(fOutIndex, charIndex, success); + fGlyphStorage.setAuxData(fOutIndex, charFeatures, success); + + fOutIndex += 1; + } + + le_int32 getOutputIndex() + { + return fOutIndex; + } +}; + + +#define blwfFeatureTag LE_BLWF_FEATURE_TAG +#define pstfFeatureTag LE_PSTF_FEATURE_TAG +#define presFeatureTag LE_PRES_FEATURE_TAG +#define blwsFeatureTag LE_BLWS_FEATURE_TAG +#define abvsFeatureTag LE_ABVS_FEATURE_TAG +#define pstsFeatureTag LE_PSTS_FEATURE_TAG + +#define blwmFeatureTag LE_BLWM_FEATURE_TAG +#define abvmFeatureTag LE_ABVM_FEATURE_TAG +#define distFeatureTag LE_DIST_FEATURE_TAG + +#define prefFeatureTag LE_PREF_FEATURE_TAG +#define abvfFeatureTag LE_ABVF_FEATURE_TAG +#define cligFeatureTag LE_CLIG_FEATURE_TAG +#define mkmkFeatureTag LE_MKMK_FEATURE_TAG + +#define prefFeatureMask 0x80000000UL +#define blwfFeatureMask 0x40000000UL +#define abvfFeatureMask 0x20000000UL +#define pstfFeatureMask 0x10000000UL +#define presFeatureMask 0x08000000UL +#define blwsFeatureMask 0x04000000UL +#define abvsFeatureMask 0x02000000UL +#define pstsFeatureMask 0x01000000UL +#define cligFeatureMask 0x00800000UL +#define distFeatureMask 0x00400000UL +#define blwmFeatureMask 0x00200000UL +#define abvmFeatureMask 0x00100000UL +#define mkmkFeatureMask 0x00080000UL + +#define tagPref (prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask) +#define tagAbvf (abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask) +#define tagPstf (blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask) +#define tagBlwf (blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask) +#define tagDefault (prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask) + + + +// These are in the order in which the features need to be applied +// for correct processing +static const FeatureMap featureMap[] = +{ + // Shaping features + {prefFeatureTag, prefFeatureMask}, + {blwfFeatureTag, blwfFeatureMask}, + {abvfFeatureTag, abvfFeatureMask}, + {pstfFeatureTag, pstfFeatureMask}, + {presFeatureTag, presFeatureMask}, + {blwsFeatureTag, blwsFeatureMask}, + {abvsFeatureTag, abvsFeatureMask}, + {pstsFeatureTag, pstsFeatureMask}, + {cligFeatureTag, cligFeatureMask}, + + // Positioning features + {distFeatureTag, distFeatureMask}, + {blwmFeatureTag, blwmFeatureMask}, + {abvmFeatureTag, abvmFeatureMask}, + {mkmkFeatureTag, mkmkFeatureMask}, +}; + +static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap); + +// The stateTable is used to calculate the end (the length) of a well +// formed Khmer Syllable. +// +// Each horizontal line is ordered exactly the same way as the values in KhmerClassTable +// CharClassValues in KhmerReordering.h This coincidence of values allows the +// follow up of the table. +// +// Each line corresponds to a state, which does not necessarily need to be a type +// of component... for example, state 2 is a base, with is always a first character +// in the syllable, but the state could be produced a consonant of any type when +// it is the first character that is analysed (in ground state). +// +// Differentiating 3 types of consonants is necessary in order to +// forbid the use of certain combinations, such as having a second +// coeng after a coeng RO, +// The inexistent possibility of having a type 3 after another type 3 is permitted, +// eliminating it would very much complicate the table, and it does not create typing +// problems, as the case above. +// +// The table is quite complex, in order to limit the number of coeng consonants +// to 2 (by means of the table). +// +// There a peculiarity, as far as Unicode is concerned: +// - The consonant-shifter is considered in two possible different +// locations, the one considered in Unicode 3.0 and the one considered in +// Unicode 4.0. (there is a backwards compatibility problem in this standard). + + +// xx independent character, such as a number, punctuation sign or non-khmer char +// +// c1 Khmer consonant of type 1 or an independent vowel +// that is, a letter in which the subscript for is only under the +// base, not taking any space to the right or to the left +// +// c2 Khmer consonant of type 2, the coeng form takes space under +// and to the left of the base (only RO is of this type) +// +// c3 Khmer consonant of type 3. Its subscript form takes space under +// and to the right of the base. +// +// cs Khmer consonant shifter +// +// rb Khmer robat +// +// co coeng character (u17D2) +// +// dv dependent vowel (including split vowels, they are treated in the same way). +// even if dv is not defined above, the component that is really tested for is +// KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels +// +// zwj Zero Width joiner +// +// zwnj Zero width non joiner +// +// sa above sign +// +// sp post sign +// +// there are lines with equal content but for an easier understanding +// (and maybe change in the future) we did not join them +// +static const le_int8 khmerStateTable[][KhmerClassTable::CC_COUNT] = +{ + +// xx c1 c2 c3 zwnj cs rb co dv sa sp zwj + { 1, 2, 2, 2, 1, 1, 1, 6, 1, 1, 1, 2}, // 0 - ground state + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state (or sign to the right of the syllable) + {-1, -1, -1, -1, 3, 4, 5, 6, 16, 17, 1, -1}, // 2 - Base consonant + {-1, -1, -1, -1, -1, 4, -1, -1, 16, -1, -1, -1}, // 3 - First ZWNJ before a register shifter + // It can only be followed by a shifter or a vowel + {-1, -1, -1, -1, 15, -1, -1, 6, 16, 17, 1, 14}, // 4 - First register shifter + {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1, 1, -1}, // 5 - Robat + {-1, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - First Coeng + {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14}, // 7 - First consonant of type 1 after coeng + {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17, 1, 14}, // 8 - First consonant of type 2 after coeng + {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14}, // 9 - First consonant or type 3 after ceong + {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, // 10 - Second Coeng (no register shifter before) + {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 11 - Second coeng consonant (or ind. vowel) no register shifter before + {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter + {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 13 - Second register shifter + {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 14 - ZWJ before vowel + {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 15 - ZWNJ before vowel + {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 1, 18}, // 16 - dependent vowel + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 18}, // 17 - sign above + {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, // 18 - ZWJ after vowel + {-1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, // 19 - Third coeng + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1}, // 20 - dependent vowel after a Robat + +}; + + +const FeatureMap *KhmerReordering::getFeatureMap(le_int32 &count) +{ + count = featureMapCount; + + return featureMap; +} + + +// Given an input string of characters and a location in which to start looking +// calculate, using the state table, which one is the last character of the syllable +// that starts in the starting position. +le_int32 KhmerReordering::findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount) +{ + le_int32 cursor = prev; + le_int8 state = 0; + + while (cursor < charCount) { + KhmerClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & KhmerClassTable::CF_CLASS_MASK); + + state = khmerStateTable[state][charClass]; + + if (state < 0) { + break; + } + + cursor += 1; + } + + return cursor; +} + + +// This is the real reordering function as applied to the Khmer language + +le_int32 KhmerReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 /*scriptCode*/, + LEUnicode *outChars, LEGlyphStorage &glyphStorage) +{ + const KhmerClassTable *classTable = KhmerClassTable::getKhmerClassTable(); + + KhmerReorderingOutput output(outChars, glyphStorage); + KhmerClassTable::CharClass charClass; + le_int32 i, prev = 0, coengRo; + + + // This loop only exits when we reach the end of a run, which may contain + // several syllables. + while (prev < charCount) { + le_int32 syllable = findSyllable(classTable, chars, prev, charCount); + + // write a pre vowel or the pre part of a split vowel first + // and look out for coeng + ro. RO is the only vowel of type 2, and + // therefore the only one that requires saving space before the base. + coengRo = -1; // There is no Coeng Ro, if found this value will change + for (i = prev; i < syllable; i += 1) { + charClass = classTable->getCharClass(chars[i]); + + // if a split vowel, write the pre part. In Khmer the pre part + // is the same for all split vowels, same glyph as pre vowel C_VOWEL_E + if (charClass & KhmerClassTable::CF_SPLIT_VOWEL) { + output.writeChar(C_VOWEL_E, i, tagPref); + break; // there can be only one vowel + } + + // if a vowel with pos before write it out + if (charClass & KhmerClassTable::CF_POS_BEFORE) { + output.writeChar(chars[i], i, tagPref); + break; // there can be only one vowel + } + + // look for coeng + ro and remember position + // works because coeng + ro is always in front of a vowel (if there is a vowel) + // and because CC_CONSONANT2 is enough to identify it, as it is the only consonant + // with this flag + if ( (charClass & KhmerClassTable::CF_COENG) && (i + 1 < syllable) && + ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == KhmerClassTable::CC_CONSONANT2) ) + { + coengRo = i; + } + } + + // write coeng + ro if found + if (coengRo > -1) { + output.writeChar(C_COENG, coengRo, tagPref); + output.writeChar(C_RO, coengRo + 1, tagPref); + } + + // shall we add a dotted circle? + // If in the position in which the base should be (first char in the string) there is + // a character that has the Dotted circle flag (a character that cannot be a base) + // then write a dotted circle + if (classTable->getCharClass(chars[prev]) & KhmerClassTable::CF_DOTTED_CIRCLE) { + output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault); + } + + // copy what is left to the output, skipping before vowels and coeng Ro if they are present + for (i = prev; i < syllable; i += 1) { + charClass = classTable->getCharClass(chars[i]); + + // skip a before vowel, it was already processed + if (charClass & KhmerClassTable::CF_POS_BEFORE) { + continue; + } + + // skip coeng + ro, it was already processed + if (i == coengRo) { + i += 1; + continue; + } + + switch (charClass & KhmerClassTable::CF_POS_MASK) { + case KhmerClassTable::CF_POS_ABOVE : + output.writeChar(chars[i], i, tagAbvf); + break; + + case KhmerClassTable::CF_POS_AFTER : + output.writeChar(chars[i], i, tagPstf); + break; + + case KhmerClassTable::CF_POS_BELOW : + output.writeChar(chars[i], i, tagBlwf); + break; + + default: + // assign the correct flags to a coeng consonant + // Consonants of type 3 are taged as Post forms and those type 1 as below forms + if ( (charClass & KhmerClassTable::CF_COENG) && i + 1 < syllable ) { + if ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) + == KhmerClassTable::CC_CONSONANT3) { + output.writeChar(chars[i], i, tagPstf); + i += 1; + output.writeChar(chars[i], i, tagPstf); + } + else { + output.writeChar(chars[i], i, tagBlwf); + i += 1; + output.writeChar(chars[i], i, tagBlwf); + } + break; + } + // if a shifter is followed by an above vowel change the shifter to below form, + // an above vowel can have two possible positions i + 1 or i + 3 + // (position i+1 corresponds to unicode 3, position i+3 to Unicode 4) + // and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two + // different positions, right after the shifter or after a vowel (Unicode 4) + if ( (charClass & KhmerClassTable::CF_SHIFTER) && (i + 1 < syllable) ) { + if ((classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_ABOVE_VOWEL) + || (i + 2 < syllable + && ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA) + && ( (classTable->getCharClass(chars[i + 2]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT)) + || (i + 3 < syllable && (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_ABOVE_VOWEL)) + || (i + 4 < syllable + && ( (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA) + && ( (classTable->getCharClass(chars[i + 4]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) ) ) + { + output.writeChar(chars[i], i, tagBlwf); + break; + } + + } + // default - any other characters + output.writeChar(chars[i], i, tagDefault); + break; + } // switch + } // for + + prev = syllable; // move the pointer to the start of next syllable + } + + return output.getOutputIndex(); +} + + +U_NAMESPACE_END diff --git a/icuSources/layout/KhmerReordering.h b/icuSources/layout/KhmerReordering.h new file mode 100644 index 00000000..eecd12df --- /dev/null +++ b/icuSources/layout/KhmerReordering.h @@ -0,0 +1,132 @@ +/* + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + * This file is a modification of the ICU file IndicReordering.h + * by Jens Herden and Javier Sola for Khmer language + * + */ + +#ifndef __KHMERREORDERING_H +#define __KHMERREORDERING_H + +/** + * \file + * \internal + */ + +#include "LETypes.h" +#include "OpenTypeTables.h" + +U_NAMESPACE_BEGIN + +class LEGlyphStorage; + +// Vocabulary +// Base -> A consonant or an independent vowel in its full (not subscript) form. It is the +// center of the syllable, it can be souranded by coeng (subscript) consonants, vowels, +// split vowels, signs... but there is only one base in a syllable, it has to be coded as +// the first character of the syllable. +// split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant). +// Khmer language has five of them. Khmer split vowels either have one part before the +// base and one after the base or they have a part before the base and a part above the base. +// The first part of all Khmer split vowels is the same character, identical to +// the glyph of Khmer dependent vowel SRA EI +// coeng --> modifier used in Khmer to construct coeng (subscript) consonants +// Differently than indian languages, the coeng modifies the consonant that follows it, +// not the one preceding it Each consonant has two forms, the base form and the subscript form +// the base form is the normal one (using the consonants code-point), the subscript form is +// displayed when the combination coeng + consonant is encountered. +// Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant +// Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO) +// Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA) +// Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds +// if it is attached to a consonant of the first series or a consonant of the second series +// Most consonants have an equivalent in the other series, but some of theme exist only in +// one series (for example SA). If we want to use the consonant SA with a vowel sound that +// can only be done with a vowel sound that corresponds to a vowel accompanying a consonant +// of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN +// x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and +// MUSIKATOAN a second series consonant to have a first series vowel sound. +// Consonant shifter are both normally supercript marks, but, when they are followed by a +// superscript, they change shape and take the form of subscript dependent vowel SRA U. +// If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they +// should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should +// be placed after the coeng consonant. +// Dependent vowel -> In khmer dependent vowels can be placed above, below, before or after the base +// Each vowel has its own position. Only one vowel per syllable is allowed. +// Signs -> Khmer has above signs and post signs. Only one above sign and/or one post sign are +// Allowed in a syllable. +// +// + +struct KhmerClassTable // This list must include all types of components that can be used inside a syllable +{ + enum CharClassValues // order is important here! This order must be the same that is found in each horizontal + // line in the statetable for Khmer (file KhmerReordering.cpp). + { + CC_RESERVED = 0, + CC_CONSONANT = 1, // consonant of type 1 or independent vowel + CC_CONSONANT2 = 2, // Consonant of type 2 + CC_CONSONANT3 = 3, // Consonant of type 3 + CC_ZERO_WIDTH_NJ_MARK = 4, // Zero Width non joiner character (0x200C) + CC_CONSONANT_SHIFTER = 5, + CC_ROBAT = 6, // Khmer special diacritic accent -treated differently in state table + CC_COENG = 7, // Subscript consonant combining character + CC_DEPENDENT_VOWEL = 8, + CC_SIGN_ABOVE = 9, + CC_SIGN_AFTER = 10, + CC_ZERO_WIDTH_J_MARK = 11, // Zero width joiner character + CC_COUNT = 12 // This is the number of character classes + }; + + enum CharClassFlags + { + CF_CLASS_MASK = 0x0000FFFF, + + CF_CONSONANT = 0x01000000, // flag to speed up comparing + CF_SPLIT_VOWEL = 0x02000000, // flag for a split vowel -> the first part is added in front of the syllable + CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with this flag is the first in a syllable + CF_COENG = 0x08000000, // flag to speed up comparing + CF_SHIFTER = 0x10000000, // flag to speed up comparing + CF_ABOVE_VOWEL = 0x20000000, // flag to speed up comparing + + // position flags + CF_POS_BEFORE = 0x00080000, + CF_POS_BELOW = 0x00040000, + CF_POS_ABOVE = 0x00020000, + CF_POS_AFTER = 0x00010000, + CF_POS_MASK = 0x000f0000 + }; + + typedef le_uint32 CharClass; + + typedef le_int32 ScriptFlags; + + LEUnicode firstChar; // for Khmer this will become x1780 + LEUnicode lastChar; // and this x17DF + const CharClass *classTable; + + CharClass getCharClass(LEUnicode ch) const; + + static const KhmerClassTable *getKhmerClassTable(); +}; + + +class KhmerReordering /* not : public UObject because all methods are static */ { +public: + static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode, + LEUnicode *outChars, LEGlyphStorage &glyphStorage); + + static const FeatureMap *getFeatureMap(le_int32 &count); + +private: + // do not instantiate + KhmerReordering(); + + static le_int32 findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount); + +}; + + +U_NAMESPACE_END +#endif diff --git a/icuSources/layout/LEFontInstance.cpp b/icuSources/layout/LEFontInstance.cpp index 0bbb6279..eba239c1 100644 --- a/icuSources/layout/LEFontInstance.cpp +++ b/icuSources/layout/LEFontInstance.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2004, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -20,6 +20,16 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEFontInstance) +LECharMapper::~LECharMapper() +{ + // nothing to do. +} + +LEFontInstance::~LEFontInstance() +{ + // nothing to do +} + const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const { @@ -37,7 +47,7 @@ const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int } void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, - le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const + le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const { le_int32 i, out = 0, dir = 1; @@ -58,7 +68,7 @@ void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, } } - glyphStorage[out] = mapCharToGlyph(code, mapper); + glyphStorage[out] = mapCharToGlyph(code, mapper, filterZeroWidth); if (code >= 0x10000) { i += 1; @@ -68,6 +78,11 @@ void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, } LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const +{ + return mapCharToGlyph(ch, mapper, TRUE); +} + +LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const { LEUnicode32 mappedChar = mapper->mapChar(ch); @@ -75,11 +90,60 @@ LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *map return 0xFFFF; } - if (mappedChar == 0x200C || mappedChar == 0x200D) { - return 1; + if (filterZeroWidth && (mappedChar == 0x200C || mappedChar == 0x200D)) { + return canDisplay(mappedChar)? 0x0001 : 0xFFFF; } return mapCharToGlyph(mappedChar); } + +le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const +{ + return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0; +} + +float LEFontInstance::xUnitsToPoints(float xUnits) const +{ + return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM(); +} + +float LEFontInstance::yUnitsToPoints(float yUnits) const +{ + return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM(); +} + +void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const +{ + points.fX = xUnitsToPoints(units.fX); + points.fY = yUnitsToPoints(units.fY); +} + +float LEFontInstance::xPixelsToUnits(float xPixels) const +{ + return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm(); +} + +float LEFontInstance::yPixelsToUnits(float yPixels) const +{ + return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm(); +} + +void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const +{ + units.fX = xPixelsToUnits(pixels.fX); + units.fY = yPixelsToUnits(pixels.fY); +} + +void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const +{ + pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX(); + pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY(); +} + +le_int32 LEFontInstance::getLineHeight() const +{ + return getAscent() + getDescent() + getLeading(); +} + U_NAMESPACE_END diff --git a/icuSources/layout/LEFontInstance.h b/icuSources/layout/LEFontInstance.h index 2a6714eb..451d7f2e 100644 --- a/icuSources/layout/LEFontInstance.h +++ b/icuSources/layout/LEFontInstance.h @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -9,6 +9,10 @@ #define __LEFONTINSTANCE_H #include "LETypes.h" +/** + * \file + * \brief C++ API: Layout Engine Font Instance object + */ U_NAMESPACE_BEGIN @@ -19,16 +23,16 @@ U_NAMESPACE_BEGIN * and character mirroring - replacing a character which has both a left and a right * hand form with the opposite form. * - * @draft ICU 2.2 + * @stable ICU 3.2 */ class LECharMapper /* not : public UObject because this is an interface/mixin class */ { public: /** * Destructor. - * @draft ICU 2.4 + * @stable ICU 3.2 */ - virtual inline ~LECharMapper() {}; + virtual ~LECharMapper(); /** * This method does the adjustments. @@ -46,7 +50,7 @@ public: * This is a forward reference to the class which holds the per-glyph * storage. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ class LEGlyphStorage; @@ -72,7 +76,7 @@ class LEGlyphStorage; * methods with some default behavior such as returning constant values, or using the * values from the first subfont. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ class U_LAYOUT_API LEFontInstance : public UObject { @@ -84,7 +88,7 @@ public: * * @stable ICU 2.8 */ - virtual inline ~LEFontInstance() {}; + virtual ~LEFontInstance(); /** * Get a physical font which can render the given text. For composite fonts, @@ -135,7 +139,7 @@ public: * * @see LEScripts.h * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const; @@ -175,7 +179,7 @@ public: * * @return <code>TRUE</code> if the font can render ch. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_bool canDisplay(LEUnicode32 ch) const; @@ -205,13 +209,32 @@ public: * @param count - the number of characters * @param reverse - if <code>TRUE</code>, store the glyph indices in reverse order. * @param mapper - the character mapper. + * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours. * @param glyphStorage - the object which contains the output glyph array * * @see LECharMapper * - * @draft ICU 3.0 + * @draft ICU 3.6 + */ + virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const; + + /** + * This method maps a single character to a glyph index, using the + * font's character to glyph map. The default implementation of this + * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>. + * + * @param ch - the character + * @param mapper - the character mapper + * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours. + * + * @return the glyph index + * + * @see LECharMapper + * + * @draft ICU 3.6 */ - virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, LEGlyphStorage &glyphStorage) const; + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const; + /** * This method maps a single character to a glyph index, using the @@ -225,7 +248,7 @@ public: * * @see LECharMapper * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const; @@ -239,7 +262,7 @@ public: * * @return the glyph index * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const = 0; @@ -253,7 +276,7 @@ public: * @param glyph - the glyph index * @param advance - the X and Y pixel values will be stored here * - * @draft ICU 2.2 + * @stable ICU 3.2 */ virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const = 0; @@ -299,7 +322,7 @@ public: * * @return points in the X direction * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual float xUnitsToPoints(float xUnits) const; @@ -311,7 +334,7 @@ public: * * @return points in the Y direction * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual float yUnitsToPoints(float yUnits) const; @@ -321,7 +344,7 @@ public: * @param units - X and Y design units * @param points - set to X and Y points * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual void unitsToPoints(LEPoint &units, LEPoint &points) const; @@ -333,7 +356,7 @@ public: * * @return font design units in the X direction * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual float xPixelsToUnits(float xPixels) const; @@ -345,7 +368,7 @@ public: * * @return font design units in the Y direction * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual float yPixelsToUnits(float yPixels) const; @@ -355,7 +378,7 @@ public: * @param pixels - X and Y pixel * @param units - set to X and Y font design units * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual void pixelsToUnits(LEPoint &pixels, LEPoint &units) const; @@ -368,7 +391,7 @@ public: * * @see transformFunits * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual float getScaleFactorX() const = 0; @@ -380,7 +403,7 @@ public: * * @see transformFunits * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual float getScaleFactorY() const = 0; @@ -397,7 +420,7 @@ public: * @see getScaleFactorX * @see getScaleFactorY * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const; @@ -411,7 +434,7 @@ public: * * @stable ICU 2.8 */ - static float fixedToFloat(le_int32 fixed); + static inline float fixedToFloat(le_int32 fixed); /** * This is a convenience method used to convert @@ -423,7 +446,7 @@ public: * * @stable ICU 2.8 */ - static le_int32 floatToFixed(float theFloat); + static inline le_int32 floatToFixed(float theFloat); // // These methods won't ever be called by the LayoutEngine, @@ -437,7 +460,7 @@ public: * @return the font's ascent, in points. This value * will always be positive. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getAscent() const = 0; @@ -447,7 +470,7 @@ public: * @return the font's descent, in points. This value * will always be positive. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getDescent() const = 0; @@ -457,7 +480,7 @@ public: * @return the font's leading, in points. This value * will always be positive. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getLeading() const = 0; @@ -469,69 +492,26 @@ public: * @return the line height, in points. This vaule will * always be positive. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getLineHeight() const; /** * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ static UClassID getStaticClassID(); }; -inline le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const -{ - return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0; -} - -inline float LEFontInstance::xUnitsToPoints(float xUnits) const -{ - return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM(); -} - -inline float LEFontInstance::yUnitsToPoints(float yUnits) const -{ - return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM(); -} - -inline void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const -{ - points.fX = xUnitsToPoints(units.fX); - points.fY = yUnitsToPoints(units.fY); -} - -inline float LEFontInstance::xPixelsToUnits(float xPixels) const -{ - return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm(); -} - -inline float LEFontInstance::yPixelsToUnits(float yPixels) const -{ - return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm(); -} - -inline void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const -{ - units.fX = xPixelsToUnits(pixels.fX); - units.fY = yPixelsToUnits(pixels.fY); -} - -inline void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const -{ - pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX(); - pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY(); -} - inline float LEFontInstance::fixedToFloat(le_int32 fixed) { return (float) (fixed / 65536.0); @@ -542,11 +522,6 @@ inline le_int32 LEFontInstance::floatToFixed(float theFloat) return (le_int32) (theFloat * 65536.0); } -inline le_int32 LEFontInstance::getLineHeight() const -{ - return getAscent() + getDescent() + getLeading(); -} - U_NAMESPACE_END #endif diff --git a/icuSources/layout/LEGlyphFilter.h b/icuSources/layout/LEGlyphFilter.h index 8fbae220..f8fa1731 100644 --- a/icuSources/layout/LEGlyphFilter.h +++ b/icuSources/layout/LEGlyphFilter.h @@ -21,7 +21,7 @@ class LEGlyphFilter /* not : public UObject because this is an interface/mixin c public: /** * Destructor. - * @draft ICU 2.4 + * @internal */ virtual ~LEGlyphFilter(); diff --git a/icuSources/layout/LEGlyphStorage.cpp b/icuSources/layout/LEGlyphStorage.cpp index 36da0f7e..42824c36 100644 --- a/icuSources/layout/LEGlyphStorage.cpp +++ b/icuSources/layout/LEGlyphStorage.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1998-2004, International Business Machines + * Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -13,6 +13,11 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEGlyphStorage) +LEInsertionCallback::~LEInsertionCallback() +{ + // nothing to do... +} + LEGlyphStorage::LEGlyphStorage() : fGlyphCount(0), fGlyphs(NULL), fCharIndices(NULL), fPositions(NULL), fAuxData(NULL), fInsertionList(NULL), fSrcIndex(0), fDestIndex(0) @@ -114,6 +119,11 @@ le_int32 LEGlyphStorage::allocatePositions(LEErrorCode &success) return -1; } + if (fPositions != NULL) { + success = LE_INTERNAL_ERROR; + return -1; + } + fPositions = LE_NEW_ARRAY(float, 2 * (fGlyphCount + 1)); if (fPositions == NULL) { @@ -131,7 +141,12 @@ le_int32 LEGlyphStorage::allocateAuxData(LEErrorCode &success) return -1; } - fAuxData = LE_NEW_ARRAY(void *, fGlyphCount); + if (fAuxData != NULL) { + success = LE_INTERNAL_ERROR; + return -1; + } + + fAuxData = LE_NEW_ARRAY(le_uint32, fGlyphCount); if (fAuxData == NULL) { success = LE_MEMORY_ALLOCATION_ERROR; @@ -302,7 +317,7 @@ void LEGlyphStorage::setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErr fCharIndices[glyphIndex] = charIndex; } -void LEGlyphStorage::getAuxData(void *auxData[], LEErrorCode &success) const +void LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode &success) const { if (LE_FAILURE(success)) { return; @@ -321,26 +336,26 @@ void LEGlyphStorage::getAuxData(void *auxData[], LEErrorCode &success) const LE_ARRAY_COPY(auxData, fAuxData, fGlyphCount); } -void *LEGlyphStorage::getAuxData(le_int32 glyphIndex, LEErrorCode &success) const +le_uint32 LEGlyphStorage::getAuxData(le_int32 glyphIndex, LEErrorCode &success) const { if (LE_FAILURE(success)) { - return NULL; + return 0; } if (fAuxData == NULL) { success = LE_NO_LAYOUT_ERROR; - return NULL; + return 0; } if (glyphIndex < 0 || glyphIndex >= fGlyphCount) { success = LE_INDEX_OUT_OF_BOUNDS_ERROR; - return NULL; + return 0; } return fAuxData[glyphIndex]; } -void LEGlyphStorage::setAuxData(le_int32 glyphIndex, void *auxData, LEErrorCode &success) +void LEGlyphStorage::setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success) { if (LE_FAILURE(success)) { return; @@ -505,7 +520,7 @@ le_int32 LEGlyphStorage::applyInsertions() fCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount); if (fAuxData != NULL) { - fAuxData = (void **) LE_GROW_ARRAY(fAuxData, newGlyphCount); + fAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount); } fSrcIndex = fGlyphCount - 1; diff --git a/icuSources/layout/LEGlyphStorage.h b/icuSources/layout/LEGlyphStorage.h index 90051b9f..99f82c66 100644 --- a/icuSources/layout/LEGlyphStorage.h +++ b/icuSources/layout/LEGlyphStorage.h @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1998-2004, International Business Machines + * Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -11,6 +11,11 @@ #include "LETypes.h" #include "LEInsertionList.h" +/** + * \file + * \brief C++ API: This class encapsulates the per-glyph storage used by the ICU LayoutEngine. + */ + U_NAMESPACE_BEGIN /** @@ -24,7 +29,7 @@ U_NAMESPACE_BEGIN * * @see LEInsertionList.h * - * @draft ICU 3.0 + * @draft ICU 3.6 */ class U_LAYOUT_API LEGlyphStorage : public UObject, protected LEInsertionCallback { @@ -62,7 +67,7 @@ private: * * @internal */ - void **fAuxData; + le_uint32 *fAuxData; /** @@ -100,7 +105,7 @@ protected: * * @see LEInsertionList.h * - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]); @@ -110,11 +115,15 @@ public: * Allocates an empty <code>LEGlyphStorage</code> object. You must call * <code>allocateGlyphArray, allocatePositions and allocateAuxData</code> * to allocate the data. + * + * @stable ICU 3.0 */ LEGlyphStorage(); /** * The destructor. This will deallocate all of the arrays. + * + * @stable ICU 3.0 */ ~LEGlyphStorage(); @@ -123,12 +132,9 @@ public: * * @return the number of glyphs in the glyph array * - * @draft ICU 3.0 + * @stable ICU 3.0 */ - le_int32 getGlyphCount() const - { - return fGlyphCount; - }; + inline le_int32 getGlyphCount() const; /** * This method copies the glyph array into a caller supplied array. @@ -138,7 +144,7 @@ public: * @param glyphs - the destiniation glyph array * @param success - set to an error code if the operation fails * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const; @@ -152,7 +158,7 @@ public: * @param extraBits - this value will be ORed with each glyph index * @param success - set to an error code if the operation fails * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const; @@ -164,7 +170,7 @@ public: * @param charIndices - the destiniation character index array * @param success - set to an error code if the operation fails * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const; @@ -177,7 +183,7 @@ public: * @param indexBase - an offset which will be added to each index * @param success - set to an error code if the operation fails * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const; @@ -190,7 +196,7 @@ public: * @param positions - the destiniation position array * @param success - set to an error code if the operation fails * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void getGlyphPositions(float positions[], LEErrorCode &success) const; @@ -206,7 +212,7 @@ public: * @param y - the glyph's Y position * @param success - set to an error code if the operation fails * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const; @@ -220,7 +226,7 @@ public: * @param success set to an error code if the storage cannot be allocated of if the initial * glyph count is not positive. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success); @@ -232,7 +238,7 @@ public: * * @return the number of X, Y position pairs allocated. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ le_int32 allocatePositions(LEErrorCode &success); @@ -243,7 +249,7 @@ public: * * @return the size of the auxillary data array. * - * @draft ICU 3.0 + * @draft ICU 3.6 */ le_int32 allocateAuxData(LEErrorCode &success); @@ -253,9 +259,9 @@ public: * @param auxData the auxillary data array will be copied to this address * @param success set to an error code if the data cannot be copied * - * @draft ICU 3.0 + * @draft ICU 3.6 */ - void getAuxData(void *auxData[], LEErrorCode &success) const; + void getAuxData(le_uint32 auxData[], LEErrorCode &success) const; /** * Get the glyph ID for a particular glyph. @@ -265,7 +271,7 @@ public: * * @return the glyph ID * - * @draft ICU 3.0 + * @stable ICU 3.0 */ LEGlyphID getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const; @@ -277,7 +283,7 @@ public: * * @return the character index * - * @draft ICU 3.0 + * @stable ICU 3.0 */ le_int32 getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const; @@ -290,9 +296,9 @@ public: * * @return the auxillary data * - * @draft ICU 3.0 + * @draft ICU 3.6 */ - void *getAuxData(le_int32 glyphIndex, LEErrorCode &success) const; + le_uint32 getAuxData(le_int32 glyphIndex, LEErrorCode &success) const; /** * This operator allows direct access to the glyph array @@ -302,9 +308,9 @@ public: * * @return a reference to the given location in the glyph array * - * @draft ICU 3.0 + * @stable ICU 3.0 */ - LEGlyphID &operator[](le_int32 glyphIndex) const; + inline LEGlyphID &operator[](le_int32 glyphIndex) const; /** * Call this method to replace a single glyph in the glyph array @@ -320,7 +326,7 @@ public: * * @see LEInsetionList.h * - * @draft ICU 3.0 + * @stable ICU 3.0 */ LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount); @@ -334,7 +340,7 @@ public: * * @see LEInsertionList.h * - * @draft ICU 3.0 + * @stable ICU 3.0 */ le_int32 applyInsertions(); @@ -345,7 +351,7 @@ public: * @param glyphID the new glyph ID * @param success will be set to an error code if the glyph ID cannot be set. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success); @@ -356,7 +362,7 @@ public: * @param charIndex the new char index * @param success will be set to an error code if the char index cannot be set. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success); @@ -368,7 +374,7 @@ public: * @param y the new Y position * @param success will be set to an error code if the position cannot be set. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success); @@ -380,7 +386,7 @@ public: * @param yAdjust the adjustment to the glyph's Y position * @param success will be set to an error code if the glyph's position cannot be adjusted. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success); @@ -391,9 +397,9 @@ public: * @param auxData the new auxillary data * @param success will be set to an error code if the auxillary data cannot be set. * - * @draft ICU 3.0 + * @draft ICU 3.6 */ - void setAuxData(le_int32 glyphIndex, void *auxData, LEErrorCode &success); + void setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success); /** * Delete the glyph array and replace it with the one @@ -403,7 +409,7 @@ public: * @param from the <code>LEGlyphStorage</code> object from which * to get the new glyph array. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptGlyphArray(LEGlyphStorage &from); @@ -415,7 +421,7 @@ public: * @param from the <code>LEGlyphStorage</code> object from which * to get the new char indices array. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptCharIndicesArray(LEGlyphStorage &from); @@ -427,7 +433,7 @@ public: * @param from the <code>LEGlyphStorage</code> object from which * to get the new position array. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptPositionArray(LEGlyphStorage &from); @@ -439,7 +445,7 @@ public: * @param from the <code>LEGlyphStorage</code> object from which * to get the new auxillary data array. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptAuxDataArray(LEGlyphStorage &from); @@ -450,7 +456,7 @@ public: * @param from the <code>LEGlyphStorage</code> object from which * to get the new glyph count. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptGlyphCount(LEGlyphStorage &from); @@ -459,7 +465,7 @@ public: * * @param newGlyphCount the new glyph count. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void adoptGlyphCount(le_int32 newGlyphCount); @@ -469,25 +475,30 @@ public: * to layout a different characer array. (This method is also called * by the destructor) * - * @draft ICU 3.0 + * @stable ICU 3.0 */ void reset(); /** * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 3.0 + * @stable ICU 3.0 */ static UClassID getStaticClassID(); }; +inline le_int32 LEGlyphStorage::getGlyphCount() const +{ + return fGlyphCount; +} + inline LEGlyphID &LEGlyphStorage::operator[](le_int32 glyphIndex) const { return fGlyphs[glyphIndex]; diff --git a/icuSources/layout/LEInsertionList.h b/icuSources/layout/LEInsertionList.h index 2d67c2a5..a8942952 100644 --- a/icuSources/layout/LEInsertionList.h +++ b/icuSources/layout/LEInsertionList.h @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 1998-2004, International Business Machines + * Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -20,7 +20,7 @@ struct InsertionRecord; * * @internal */ -class LEInsertionCallback +class U_LAYOUT_API LEInsertionCallback { public: /** @@ -37,6 +37,11 @@ public: * @internal */ virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]) = 0; + + /** + * The destructor + */ + virtual ~LEInsertionCallback(); }; /** diff --git a/icuSources/layout/LELanguages.h b/icuSources/layout/LELanguages.h index 533b5f54..563ddcfd 100644 --- a/icuSources/layout/LELanguages.h +++ b/icuSources/layout/LELanguages.h @@ -1,9 +1,11 @@ /* * - * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2006. All Rights Reserved. * * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 08/21/2006 02:35:14 PM HST */ #ifndef __LELANGUAGES_H @@ -11,6 +13,11 @@ #include "LETypes.h" +/** + * \file + * \brief C++ API: List of language codes for LayoutEngine + */ + U_NAMESPACE_BEGIN /** @@ -18,7 +25,7 @@ U_NAMESPACE_BEGIN * this is just a list of languages which the LayoutEngine * supports. * - * @draft ICU 2.6 + * @draft ICU 3.6 */ enum LanguageCodes { diff --git a/icuSources/layout/LEScripts.h b/icuSources/layout/LEScripts.h index aa1e9d24..f8e7ac5b 100644 --- a/icuSources/layout/LEScripts.h +++ b/icuSources/layout/LEScripts.h @@ -1,9 +1,11 @@ /* * - * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2006. All Rights Reserved. * * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 08/21/2006 02:35:13 PM HST */ #ifndef __LESCRIPTS_H @@ -11,13 +13,18 @@ #include "LETypes.h" +/** + * \file + * \brief C++ API: Constants for Unicode script values + */ + U_NAMESPACE_BEGIN /** * Constants for Unicode script values, generated using * ICU4J's <code>UScript</code> class. * - * @draft ICU 2.6 + * @draft ICU 3.6 */ enum ScriptCodes { @@ -28,7 +35,7 @@ enum ScriptCodes { bengScriptCode = 4, bopoScriptCode = 5, cherScriptCode = 6, - qaacScriptCode = 7, + coptScriptCode = 7, cyrlScriptCode = 8, dsrtScriptCode = 9, devaScriptCode = 10, @@ -76,8 +83,57 @@ enum ScriptCodes { taleScriptCode = 52, ugarScriptCode = 53, hrktScriptCode = 54, + bugiScriptCode = 55, + glagScriptCode = 56, + kharScriptCode = 57, + syloScriptCode = 58, + taluScriptCode = 59, + tfngScriptCode = 60, + xpeoScriptCode = 61, + baliScriptCode = 62, + batkScriptCode = 63, + blisScriptCode = 64, + brahScriptCode = 65, + chamScriptCode = 66, + cirtScriptCode = 67, + cyrsScriptCode = 68, + egydScriptCode = 69, + egyhScriptCode = 70, + egypScriptCode = 71, + geokScriptCode = 72, + hansScriptCode = 73, + hantScriptCode = 74, + hmngScriptCode = 75, + hungScriptCode = 76, + indsScriptCode = 77, + javaScriptCode = 78, + kaliScriptCode = 79, + latfScriptCode = 80, + latgScriptCode = 81, + lepcScriptCode = 82, + linaScriptCode = 83, + mandScriptCode = 84, + mayaScriptCode = 85, + meroScriptCode = 86, + nkooScriptCode = 87, + orkhScriptCode = 88, + permScriptCode = 89, + phagScriptCode = 90, + phnxScriptCode = 91, + plrdScriptCode = 92, + roroScriptCode = 93, + saraScriptCode = 94, + syreScriptCode = 95, + syrjScriptCode = 96, + syrnScriptCode = 97, + tengScriptCode = 98, + vaiiScriptCode = 99, + vispScriptCode = 100, + xsuxScriptCode = 101, + zxxxScriptCode = 102, + zzzzScriptCode = 103, - scriptCodeCount = 55 + scriptCodeCount = 104 }; U_NAMESPACE_END diff --git a/icuSources/layout/LESwaps.h b/icuSources/layout/LESwaps.h index 2dc9ba68..974e7db3 100644 --- a/icuSources/layout/LESwaps.h +++ b/icuSources/layout/LESwaps.h @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -10,6 +10,11 @@ #include "LETypes.h" +/** + * \file + * \brief C++ API: Endian independent access to data for LayoutEngine + */ + U_NAMESPACE_BEGIN /** diff --git a/icuSources/layout/LETypes.h b/icuSources/layout/LETypes.h index dbb77adb..51da9cb5 100644 --- a/icuSources/layout/LETypes.h +++ b/icuSources/layout/LETypes.h @@ -1,7 +1,6 @@ - /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -21,6 +20,11 @@ U_NAMESPACE_BEGIN +/*! + * \file + * \brief Basic definitions for the ICU LayoutEngine + */ + /** * A type used for signed, 32-bit integers. * @@ -91,7 +95,7 @@ typedef le_uint32 LETag; * Used for 16-bit glyph indices as they're represented * in TrueType font tables. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ typedef le_uint16 TTGlyphID; @@ -102,7 +106,7 @@ typedef le_uint16 TTGlyphID; * order 8 bits are client defined. The LayoutEngine * will never change or look at the client defined bits. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ typedef le_uint32 LEGlyphID; @@ -110,7 +114,7 @@ typedef le_uint32 LEGlyphID; * Used to mask off the glyph ID part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_GLYPH_MASK 0x0000FFFF @@ -119,7 +123,7 @@ typedef le_uint32 LEGlyphID; * into the low-order bits. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_GLYPH_SHIFT 0 @@ -128,7 +132,7 @@ typedef le_uint32 LEGlyphID; * Used to mask off the sub-font ID part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_SUB_FONT_MASK 0x00FF0000 @@ -137,7 +141,7 @@ typedef le_uint32 LEGlyphID; * into the low-order bits. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_SUB_FONT_SHIFT 16 @@ -146,7 +150,7 @@ typedef le_uint32 LEGlyphID; * Used to mask off the client-defined part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_CLIENT_MASK 0xFF000000 @@ -155,7 +159,7 @@ typedef le_uint32 LEGlyphID; * into the low-order bits. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_CLIENT_SHIFT 24 @@ -164,7 +168,7 @@ typedef le_uint32 LEGlyphID; * A convenience macro to get the Glyph ID part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_GET_GLYPH(gid) ((gid & LE_GLYPH_MASK) >> LE_GLYPH_SHIFT) @@ -172,7 +176,7 @@ typedef le_uint32 LEGlyphID; * A convenience macro to get the sub-font ID part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_GET_SUB_FONT(gid) ((gid & LE_SUB_FONT_MASK) >> LE_SUB_FONT_SHIFT) @@ -180,7 +184,7 @@ typedef le_uint32 LEGlyphID; * A convenience macro to get the client-defined part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_GET_CLIENT(gid) ((gid & LE_CLIENT_MASK) >> LE_CLIENT_SHIFT) @@ -189,7 +193,7 @@ typedef le_uint32 LEGlyphID; * A convenience macro to set the Glyph ID part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_SET_GLYPH(gid, glyph) ((gid & ~LE_GLYPH_MASK) | ((glyph << LE_GLYPH_SHIFT) & LE_GLYPH_MASK)) @@ -197,7 +201,7 @@ typedef le_uint32 LEGlyphID; * A convenience macro to set the sub-font ID part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_SET_SUB_FONT(gid, font) ((gid & ~LE_SUB_FONT_MASK) | ((font << LE_SUB_FONT_SHIFT) & LE_SUB_FONT_MASK)) @@ -205,7 +209,7 @@ typedef le_uint32 LEGlyphID; * A convenience macro to set the client-defined part of an LEGlyphID. * * @see LEGlyphID - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_SET_CLIENT(gid, client) ((gid & ~LE_CLIENT_MASK) | ((client << LE_CLIENT_SHIFT) & LE_CLIENT_MASK)) @@ -262,6 +266,14 @@ struct LEPoint typedef struct LEPoint LEPoint; #endif + +/** + * A convenience macro to get the length of an array. + * + * @internal + */ +#define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + #ifdef LE_USE_CMEMORY /** * A convenience macro for copying an array. @@ -303,7 +315,7 @@ typedef struct LEPoint LEPoint; * WARNING: THIS MACRO WILL ONLY WORK CORRECTLY IF * THE ARGUMENT CHARACTERS ARE ASCII. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define LE_MAKE_TAG(a, b, c, d) \ (((le_uint32)(a) << 24) | \ @@ -315,194 +327,194 @@ typedef struct LEPoint LEPoint; * This enumeration defines constants for the standard * TrueType, OpenType and AAT table tags. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ enum LETableTags { - LE_ACNT_TABLE_TAG = 0x61636E74UL, /* 'acnt' */ - LE_AVAR_TABLE_TAG = 0x61766172UL, /* 'avar' */ - LE_BASE_TABLE_TAG = 0x42415345UL, /* 'BASE' */ - LE_BDAT_TABLE_TAG = 0x62646174UL, /* 'bdat' */ - LE_BHED_TABLE_TAG = 0x62686564UL, /* 'bhed' */ - LE_BLOC_TABLE_TAG = 0x626C6F63UL, /* 'bloc' */ - LE_BSLN_TABLE_TAG = 0x62736C6EUL, /* 'bsln' */ - LE_CFF__TABLE_TAG = 0x43464620UL, /* 'CFF ' */ - LE_CMAP_TABLE_TAG = 0x636D6170UL, /* 'cmap' */ - LE_CVAR_TABLE_TAG = 0x63766172UL, /* 'cvar' */ - LE_CVT__TABLE_TAG = 0x63767420UL, /* 'cvt ' */ - LE_DSIG_TABLE_TAG = 0x44534947UL, /* 'DSIG' */ - LE_EBDT_TABLE_TAG = 0x45424454UL, /* 'EBDT' */ - LE_EBLC_TABLE_TAG = 0x45424C43UL, /* 'EBLC' */ - LE_EBSC_TABLE_TAG = 0x45425343UL, /* 'EBSC' */ - LE_FDSC_TABLE_TAG = 0x66647363UL, /* 'fdsc' */ - LE_FEAT_TABLE_TAG = 0x66656174UL, /* 'feat' */ - LE_FMTX_TABLE_TAG = 0x666D7478UL, /* 'fmtx' */ - LE_FPGM_TABLE_TAG = 0x6670676DUL, /* 'fpgm' */ - LE_FVAR_TABLE_TAG = 0x66766172UL, /* 'fvar' */ - LE_GASP_TABLE_TAG = 0x67617370UL, /* 'gasp' */ - LE_GDEF_TABLE_TAG = 0x47444546UL, /* 'GDEF' */ - LE_GLYF_TABLE_TAG = 0x676C7966UL, /* 'glyf' */ - LE_GPOS_TABLE_TAG = 0x47504F53UL, /* 'GPOS' */ - LE_GSUB_TABLE_TAG = 0x47535542UL, /* 'GSUB' */ - LE_GVAR_TABLE_TAG = 0x67766172UL, /* 'gvar' */ - LE_HDMX_TABLE_TAG = 0x68646D78UL, /* 'hdmx' */ - LE_HEAD_TABLE_TAG = 0x68656164UL, /* 'head' */ - LE_HHEA_TABLE_TAG = 0x68686561UL, /* 'hhea' */ - LE_HMTX_TABLE_TAG = 0x686D7478UL, /* 'hmtx' */ - LE_HSTY_TABLE_TAG = 0x68737479UL, /* 'hsty' */ - LE_JUST_TABLE_TAG = 0x6A757374UL, /* 'just' */ - LE_JSTF_TABLE_TAG = 0x4A535446UL, /* 'JSTF' */ - LE_KERN_TABLE_TAG = 0x6B65726EUL, /* 'kern' */ - LE_LCAR_TABLE_TAG = 0x6C636172UL, /* 'lcar' */ - LE_LOCA_TABLE_TAG = 0x6C6F6361UL, /* 'loca' */ - LE_LTSH_TABLE_TAG = 0x4C545348UL, /* 'LTSH' */ - LE_MAXP_TABLE_TAG = 0x6D617870UL, /* 'maxp' */ - LE_MORT_TABLE_TAG = 0x6D6F7274UL, /* 'mort' */ - LE_MORX_TABLE_TAG = 0x6D6F7278UL, /* 'morx' */ - LE_NAME_TABLE_TAG = 0x6E616D65UL, /* 'name' */ - LE_OPBD_TABLE_TAG = 0x6F706264UL, /* 'opbd' */ - LE_OS_2_TABLE_TAG = 0x4F532F32UL, /* 'OS/2' */ - LE_PCLT_TABLE_TAG = 0x50434C54UL, /* 'PCLT' */ - LE_POST_TABLE_TAG = 0x706F7374UL, /* 'post' */ - LE_PREP_TABLE_TAG = 0x70726570UL, /* 'prep' */ - LE_PROP_TABLE_TAG = 0x70726F70UL, /* 'prop' */ - LE_TRAK_TABLE_TAG = 0x7472616BUL, /* 'trak' */ - LE_VDMX_TABLE_TAG = 0x56444D58UL, /* 'VDMX' */ - LE_VHEA_TABLE_TAG = 0x76686561UL, /* 'vhea' */ - LE_VMTX_TABLE_TAG = 0x766D7478UL, /* 'vmtx' */ - LE_VORG_TABLE_TAG = 0x564F5247UL, /* 'VORG' */ - LE_ZAPF_TABLE_TAG = 0x5A617066UL /* 'Zapf' */ + LE_ACNT_TABLE_TAG = 0x61636E74UL, /**< 'acnt' */ + LE_AVAR_TABLE_TAG = 0x61766172UL, /**< 'avar' */ + LE_BASE_TABLE_TAG = 0x42415345UL, /**< 'BASE' */ + LE_BDAT_TABLE_TAG = 0x62646174UL, /**< 'bdat' */ + LE_BHED_TABLE_TAG = 0x62686564UL, /**< 'bhed' */ + LE_BLOC_TABLE_TAG = 0x626C6F63UL, /**< 'bloc' */ + LE_BSLN_TABLE_TAG = 0x62736C6EUL, /**< 'bsln' */ + LE_CFF__TABLE_TAG = 0x43464620UL, /**< 'CFF ' */ + LE_CMAP_TABLE_TAG = 0x636D6170UL, /**< 'cmap' */ + LE_CVAR_TABLE_TAG = 0x63766172UL, /**< 'cvar' */ + LE_CVT__TABLE_TAG = 0x63767420UL, /**< 'cvt ' */ + LE_DSIG_TABLE_TAG = 0x44534947UL, /**< 'DSIG' */ + LE_EBDT_TABLE_TAG = 0x45424454UL, /**< 'EBDT' */ + LE_EBLC_TABLE_TAG = 0x45424C43UL, /**< 'EBLC' */ + LE_EBSC_TABLE_TAG = 0x45425343UL, /**< 'EBSC' */ + LE_FDSC_TABLE_TAG = 0x66647363UL, /**< 'fdsc' */ + LE_FEAT_TABLE_TAG = 0x66656174UL, /**< 'feat' */ + LE_FMTX_TABLE_TAG = 0x666D7478UL, /**< 'fmtx' */ + LE_FPGM_TABLE_TAG = 0x6670676DUL, /**< 'fpgm' */ + LE_FVAR_TABLE_TAG = 0x66766172UL, /**< 'fvar' */ + LE_GASP_TABLE_TAG = 0x67617370UL, /**< 'gasp' */ + LE_GDEF_TABLE_TAG = 0x47444546UL, /**< 'GDEF' */ + LE_GLYF_TABLE_TAG = 0x676C7966UL, /**< 'glyf' */ + LE_GPOS_TABLE_TAG = 0x47504F53UL, /**< 'GPOS' */ + LE_GSUB_TABLE_TAG = 0x47535542UL, /**< 'GSUB' */ + LE_GVAR_TABLE_TAG = 0x67766172UL, /**< 'gvar' */ + LE_HDMX_TABLE_TAG = 0x68646D78UL, /**< 'hdmx' */ + LE_HEAD_TABLE_TAG = 0x68656164UL, /**< 'head' */ + LE_HHEA_TABLE_TAG = 0x68686561UL, /**< 'hhea' */ + LE_HMTX_TABLE_TAG = 0x686D7478UL, /**< 'hmtx' */ + LE_HSTY_TABLE_TAG = 0x68737479UL, /**< 'hsty' */ + LE_JUST_TABLE_TAG = 0x6A757374UL, /**< 'just' */ + LE_JSTF_TABLE_TAG = 0x4A535446UL, /**< 'JSTF' */ + LE_KERN_TABLE_TAG = 0x6B65726EUL, /**< 'kern' */ + LE_LCAR_TABLE_TAG = 0x6C636172UL, /**< 'lcar' */ + LE_LOCA_TABLE_TAG = 0x6C6F6361UL, /**< 'loca' */ + LE_LTSH_TABLE_TAG = 0x4C545348UL, /**< 'LTSH' */ + LE_MAXP_TABLE_TAG = 0x6D617870UL, /**< 'maxp' */ + LE_MORT_TABLE_TAG = 0x6D6F7274UL, /**< 'mort' */ + LE_MORX_TABLE_TAG = 0x6D6F7278UL, /**< 'morx' */ + LE_NAME_TABLE_TAG = 0x6E616D65UL, /**< 'name' */ + LE_OPBD_TABLE_TAG = 0x6F706264UL, /**< 'opbd' */ + LE_OS_2_TABLE_TAG = 0x4F532F32UL, /**< 'OS/2' */ + LE_PCLT_TABLE_TAG = 0x50434C54UL, /**< 'PCLT' */ + LE_POST_TABLE_TAG = 0x706F7374UL, /**< 'post' */ + LE_PREP_TABLE_TAG = 0x70726570UL, /**< 'prep' */ + LE_PROP_TABLE_TAG = 0x70726F70UL, /**< 'prop' */ + LE_TRAK_TABLE_TAG = 0x7472616BUL, /**< 'trak' */ + LE_VDMX_TABLE_TAG = 0x56444D58UL, /**< 'VDMX' */ + LE_VHEA_TABLE_TAG = 0x76686561UL, /**< 'vhea' */ + LE_VMTX_TABLE_TAG = 0x766D7478UL, /**< 'vmtx' */ + LE_VORG_TABLE_TAG = 0x564F5247UL, /**< 'VORG' */ + LE_ZAPF_TABLE_TAG = 0x5A617066UL /**< 'Zapf' */ }; /** * This enumeration defines constants for all * the common OpenType feature tags. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ enum LEFeatureTags { - LE_AALT_FEATURE_TAG = 0x61616C74UL, /* 'aalt' */ - LE_ABVF_FEATURE_TAG = 0x61627666UL, /* 'abvf' */ - LE_ABVM_FEATURE_TAG = 0x6162766DUL, /* 'abvm' */ - LE_ABVS_FEATURE_TAG = 0x61627673UL, /* 'abvs' */ - LE_AFRC_FEATURE_TAG = 0x61667263UL, /* 'afrc' */ - LE_AKHN_FEATURE_TAG = 0x616B686EUL, /* 'akhn' */ - LE_BLWF_FEATURE_TAG = 0x626C7766UL, /* 'blwf' */ - LE_BLWM_FEATURE_TAG = 0x626C776DUL, /* 'blwm' */ - LE_BLWS_FEATURE_TAG = 0x626C7773UL, /* 'blws' */ - LE_CALT_FEATURE_TAG = 0x63616C74UL, /* 'calt' */ - LE_CASE_FEATURE_TAG = 0x63617365UL, /* 'case' */ - LE_CCMP_FEATURE_TAG = 0x63636D70UL, /* 'ccmp' */ - LE_CLIG_FEATURE_TAG = 0x636C6967UL, /* 'clig' */ - LE_CPSP_FEATURE_TAG = 0x63707370UL, /* 'cpsp' */ - LE_CSWH_FEATURE_TAG = 0x63737768UL, /* 'cswh' */ - LE_CURS_FEATURE_TAG = 0x63757273UL, /* 'curs' */ - LE_C2SC_FEATURE_TAG = 0x63327363UL, /* 'c2sc' */ - LE_C2PC_FEATURE_TAG = 0x63327063UL, /* 'c2pc' */ - LE_DIST_FEATURE_TAG = 0x64697374UL, /* 'dist' */ - LE_DLIG_FEATURE_TAG = 0x646C6967UL, /* 'dlig' */ - LE_DNOM_FEATURE_TAG = 0x646E6F6DUL, /* 'dnom' */ - LE_EXPT_FEATURE_TAG = 0x65787074UL, /* 'expt' */ - LE_FALT_FEATURE_TAG = 0x66616C74UL, /* 'falt' */ - LE_FIN2_FEATURE_TAG = 0x66696E32UL, /* 'fin2' */ - LE_FIN3_FEATURE_TAG = 0x66696E33UL, /* 'fin3' */ - LE_FINA_FEATURE_TAG = 0x66696E61UL, /* 'fina' */ - LE_FRAC_FEATURE_TAG = 0x66726163UL, /* 'frac' */ - LE_FWID_FEATURE_TAG = 0x66776964UL, /* 'fwid' */ - LE_HALF_FEATURE_TAG = 0x68616C66UL, /* 'half' */ - LE_HALN_FEATURE_TAG = 0x68616C6EUL, /* 'haln' */ - LE_HALT_FEATURE_TAG = 0x68616C74UL, /* 'halt' */ - LE_HIST_FEATURE_TAG = 0x68697374UL, /* 'hist' */ - LE_HKNA_FEATURE_TAG = 0x686B6E61UL, /* 'hkna' */ - LE_HLIG_FEATURE_TAG = 0x686C6967UL, /* 'hlig' */ - LE_HNGL_FEATURE_TAG = 0x686E676CUL, /* 'hngl' */ - LE_HWID_FEATURE_TAG = 0x68776964UL, /* 'hwid' */ - LE_INIT_FEATURE_TAG = 0x696E6974UL, /* 'init' */ - LE_ISOL_FEATURE_TAG = 0x69736F6CUL, /* 'isol' */ - LE_ITAL_FEATURE_TAG = 0x6974616CUL, /* 'ital' */ - LE_JALT_FEATURE_TAG = 0x6A616C74UL, /* 'jalt' */ - LE_JP78_FEATURE_TAG = 0x6A703738UL, /* 'jp78' */ - LE_JP83_FEATURE_TAG = 0x6A703833UL, /* 'jp83' */ - LE_JP90_FEATURE_TAG = 0x6A703930UL, /* 'jp90' */ - LE_KERN_FEATURE_TAG = 0x6B65726EUL, /* 'kern' */ - LE_LFBD_FEATURE_TAG = 0x6C666264UL, /* 'lfbd' */ - LE_LIGA_FEATURE_TAG = 0x6C696761UL, /* 'liga' */ - LE_LJMO_FEATURE_TAG = 0x6C6A6D6FUL, /* 'ljmo' */ - LE_LNUM_FEATURE_TAG = 0x6C6E756DUL, /* 'lnum' */ - LE_LOCL_FEATURE_TAG = 0x6C6F636CUL, /* 'locl' */ - LE_MARK_FEATURE_TAG = 0x6D61726BUL, /* 'mark' */ - LE_MED2_FEATURE_TAG = 0x6D656432UL, /* 'med2' */ - LE_MEDI_FEATURE_TAG = 0x6D656469UL, /* 'medi' */ - LE_MGRK_FEATURE_TAG = 0x6D67726BUL, /* 'mgrk' */ - LE_MKMK_FEATURE_TAG = 0x6D6B6D6BUL, /* 'mkmk' */ - LE_MSET_FEATURE_TAG = 0x6D736574UL, /* 'mset' */ - LE_NALT_FEATURE_TAG = 0x6E616C74UL, /* 'nalt' */ - LE_NLCK_FEATURE_TAG = 0x6E6C636BUL, /* 'nlck' */ - LE_NUKT_FEATURE_TAG = 0x6E756B74UL, /* 'nukt' */ - LE_NUMR_FEATURE_TAG = 0x6E756D72UL, /* 'numr' */ - LE_ONUM_FEATURE_TAG = 0x6F6E756DUL, /* 'onum' */ - LE_OPBD_FEATURE_TAG = 0x6F706264UL, /* 'opbd' */ - LE_ORDN_FEATURE_TAG = 0x6F72646EUL, /* 'ordn' */ - LE_ORNM_FEATURE_TAG = 0x6F726E6DUL, /* 'ornm' */ - LE_PALT_FEATURE_TAG = 0x70616C74UL, /* 'palt' */ - LE_PCAP_FEATURE_TAG = 0x70636170UL, /* 'pcap' */ - LE_PNUM_FEATURE_TAG = 0x706E756DUL, /* 'pnum' */ - LE_PREF_FEATURE_TAG = 0x70726566UL, /* 'pref' */ - LE_PRES_FEATURE_TAG = 0x70726573UL, /* 'pres' */ - LE_PSTF_FEATURE_TAG = 0x70737466UL, /* 'pstf' */ - LE_PSTS_FEATURE_TAG = 0x70737473UL, /* 'psts' */ - LE_PWID_FEATURE_TAG = 0x70776964UL, /* 'pwid' */ - LE_QWID_FEATURE_TAG = 0x71776964UL, /* 'qwid' */ - LE_RAND_FEATURE_TAG = 0x72616E64UL, /* 'rand' */ - LE_RLIG_FEATURE_TAG = 0x726C6967UL, /* 'rlig' */ - LE_RPHF_FEATURE_TAG = 0x72706866UL, /* 'rphf' */ - LE_RTBD_FEATURE_TAG = 0x72746264UL, /* 'rtbd' */ - LE_RTLA_FEATURE_TAG = 0x72746C61UL, /* 'rtla' */ - LE_RUBY_FEATURE_TAG = 0x72756279UL, /* 'ruby' */ - LE_SALT_FEATURE_TAG = 0x73616C74UL, /* 'salt' */ - LE_SINF_FEATURE_TAG = 0x73696E66UL, /* 'sinf' */ - LE_SIZE_FEATURE_TAG = 0x73697A65UL, /* 'size' */ - LE_SMCP_FEATURE_TAG = 0x736D6370UL, /* 'smcp' */ - LE_SMPL_FEATURE_TAG = 0x736D706CUL, /* 'smpl' */ - LE_SS01_FEATURE_TAG = 0x73733031UL, /* 'ss01' */ - LE_SS02_FEATURE_TAG = 0x73733032UL, /* 'ss02' */ - LE_SS03_FEATURE_TAG = 0x73733033UL, /* 'ss03' */ - LE_SS04_FEATURE_TAG = 0x73733034UL, /* 'ss04' */ - LE_SS05_FEATURE_TAG = 0x73733035UL, /* 'ss05' */ - LE_SS06_FEATURE_TAG = 0x73733036UL, /* 'ss06' */ - LE_SS07_FEATURE_TAG = 0x73733037UL, /* 'ss07' */ - LE_SS08_FEATURE_TAG = 0x73733038UL, /* 'ss08' */ - LE_SS09_FEATURE_TAG = 0x73733039UL, /* 'ss09' */ - LE_SS10_FEATURE_TAG = 0x73733130UL, /* 'ss10' */ - LE_SS11_FEATURE_TAG = 0x73733131UL, /* 'ss11' */ - LE_SS12_FEATURE_TAG = 0x73733132UL, /* 'ss12' */ - LE_SS13_FEATURE_TAG = 0x73733133UL, /* 'ss13' */ - LE_SS14_FEATURE_TAG = 0x73733134UL, /* 'ss14' */ - LE_SS15_FEATURE_TAG = 0x73733135UL, /* 'ss15' */ - LE_SS16_FEATURE_TAG = 0x73733136UL, /* 'ss16' */ - LE_SS17_FEATURE_TAG = 0x73733137UL, /* 'ss17' */ - LE_SS18_FEATURE_TAG = 0x73733138UL, /* 'ss18' */ - LE_SS19_FEATURE_TAG = 0x73733139UL, /* 'ss19' */ - LE_SS20_FEATURE_TAG = 0x73733230UL, /* 'ss20' */ - LE_SUBS_FEATURE_TAG = 0x73756273UL, /* 'subs' */ - LE_SUPS_FEATURE_TAG = 0x73757073UL, /* 'sups' */ - LE_SWSH_FEATURE_TAG = 0x73777368UL, /* 'swsh' */ - LE_TITL_FEATURE_TAG = 0x7469746CUL, /* 'titl' */ - LE_TJMO_FEATURE_TAG = 0x746A6D6FUL, /* 'tjmo' */ - LE_TNAM_FEATURE_TAG = 0x746E616DUL, /* 'tnam' */ - LE_TNUM_FEATURE_TAG = 0x746E756DUL, /* 'tnum' */ - LE_TRAD_FEATURE_TAG = 0x74726164UL, /* 'trad' */ - LE_TWID_FEATURE_TAG = 0x74776964UL, /* 'twid' */ - LE_UNIC_FEATURE_TAG = 0x756E6963UL, /* 'unic' */ - LE_VALT_FEATURE_TAG = 0x76616C74UL, /* 'valt' */ - LE_VATU_FEATURE_TAG = 0x76617475UL, /* 'vatu' */ - LE_VERT_FEATURE_TAG = 0x76657274UL, /* 'vert' */ - LE_VHAL_FEATURE_TAG = 0x7668616CUL, /* 'vhal' */ - LE_VJMO_FEATURE_TAG = 0x766A6D6FUL, /* 'vjmo' */ - LE_VKNA_FEATURE_TAG = 0x766B6E61UL, /* 'vkna' */ - LE_VKRN_FEATURE_TAG = 0x766B726EUL, /* 'vkrn' */ - LE_VPAL_FEATURE_TAG = 0x7670616CUL, /* 'vpal' */ - LE_VRT2_FEATURE_TAG = 0x76727432UL, /* 'vrt2' */ - LE_ZERO_FEATURE_TAG = 0x7A65726FUL /* 'zero' */ + LE_AALT_FEATURE_TAG = 0x61616C74UL, /**< 'aalt' */ + LE_ABVF_FEATURE_TAG = 0x61627666UL, /**< 'abvf' */ + LE_ABVM_FEATURE_TAG = 0x6162766DUL, /**< 'abvm' */ + LE_ABVS_FEATURE_TAG = 0x61627673UL, /**< 'abvs' */ + LE_AFRC_FEATURE_TAG = 0x61667263UL, /**< 'afrc' */ + LE_AKHN_FEATURE_TAG = 0x616B686EUL, /**< 'akhn' */ + LE_BLWF_FEATURE_TAG = 0x626C7766UL, /**< 'blwf' */ + LE_BLWM_FEATURE_TAG = 0x626C776DUL, /**< 'blwm' */ + LE_BLWS_FEATURE_TAG = 0x626C7773UL, /**< 'blws' */ + LE_CALT_FEATURE_TAG = 0x63616C74UL, /**< 'calt' */ + LE_CASE_FEATURE_TAG = 0x63617365UL, /**< 'case' */ + LE_CCMP_FEATURE_TAG = 0x63636D70UL, /**< 'ccmp' */ + LE_CLIG_FEATURE_TAG = 0x636C6967UL, /**< 'clig' */ + LE_CPSP_FEATURE_TAG = 0x63707370UL, /**< 'cpsp' */ + LE_CSWH_FEATURE_TAG = 0x63737768UL, /**< 'cswh' */ + LE_CURS_FEATURE_TAG = 0x63757273UL, /**< 'curs' */ + LE_C2SC_FEATURE_TAG = 0x63327363UL, /**< 'c2sc' */ + LE_C2PC_FEATURE_TAG = 0x63327063UL, /**< 'c2pc' */ + LE_DIST_FEATURE_TAG = 0x64697374UL, /**< 'dist' */ + LE_DLIG_FEATURE_TAG = 0x646C6967UL, /**< 'dlig' */ + LE_DNOM_FEATURE_TAG = 0x646E6F6DUL, /**< 'dnom' */ + LE_EXPT_FEATURE_TAG = 0x65787074UL, /**< 'expt' */ + LE_FALT_FEATURE_TAG = 0x66616C74UL, /**< 'falt' */ + LE_FIN2_FEATURE_TAG = 0x66696E32UL, /**< 'fin2' */ + LE_FIN3_FEATURE_TAG = 0x66696E33UL, /**< 'fin3' */ + LE_FINA_FEATURE_TAG = 0x66696E61UL, /**< 'fina' */ + LE_FRAC_FEATURE_TAG = 0x66726163UL, /**< 'frac' */ + LE_FWID_FEATURE_TAG = 0x66776964UL, /**< 'fwid' */ + LE_HALF_FEATURE_TAG = 0x68616C66UL, /**< 'half' */ + LE_HALN_FEATURE_TAG = 0x68616C6EUL, /**< 'haln' */ + LE_HALT_FEATURE_TAG = 0x68616C74UL, /**< 'halt' */ + LE_HIST_FEATURE_TAG = 0x68697374UL, /**< 'hist' */ + LE_HKNA_FEATURE_TAG = 0x686B6E61UL, /**< 'hkna' */ + LE_HLIG_FEATURE_TAG = 0x686C6967UL, /**< 'hlig' */ + LE_HNGL_FEATURE_TAG = 0x686E676CUL, /**< 'hngl' */ + LE_HWID_FEATURE_TAG = 0x68776964UL, /**< 'hwid' */ + LE_INIT_FEATURE_TAG = 0x696E6974UL, /**< 'init' */ + LE_ISOL_FEATURE_TAG = 0x69736F6CUL, /**< 'isol' */ + LE_ITAL_FEATURE_TAG = 0x6974616CUL, /**< 'ital' */ + LE_JALT_FEATURE_TAG = 0x6A616C74UL, /**< 'jalt' */ + LE_JP78_FEATURE_TAG = 0x6A703738UL, /**< 'jp78' */ + LE_JP83_FEATURE_TAG = 0x6A703833UL, /**< 'jp83' */ + LE_JP90_FEATURE_TAG = 0x6A703930UL, /**< 'jp90' */ + LE_KERN_FEATURE_TAG = 0x6B65726EUL, /**< 'kern' */ + LE_LFBD_FEATURE_TAG = 0x6C666264UL, /**< 'lfbd' */ + LE_LIGA_FEATURE_TAG = 0x6C696761UL, /**< 'liga' */ + LE_LJMO_FEATURE_TAG = 0x6C6A6D6FUL, /**< 'ljmo' */ + LE_LNUM_FEATURE_TAG = 0x6C6E756DUL, /**< 'lnum' */ + LE_LOCL_FEATURE_TAG = 0x6C6F636CUL, /**< 'locl' */ + LE_MARK_FEATURE_TAG = 0x6D61726BUL, /**< 'mark' */ + LE_MED2_FEATURE_TAG = 0x6D656432UL, /**< 'med2' */ + LE_MEDI_FEATURE_TAG = 0x6D656469UL, /**< 'medi' */ + LE_MGRK_FEATURE_TAG = 0x6D67726BUL, /**< 'mgrk' */ + LE_MKMK_FEATURE_TAG = 0x6D6B6D6BUL, /**< 'mkmk' */ + LE_MSET_FEATURE_TAG = 0x6D736574UL, /**< 'mset' */ + LE_NALT_FEATURE_TAG = 0x6E616C74UL, /**< 'nalt' */ + LE_NLCK_FEATURE_TAG = 0x6E6C636BUL, /**< 'nlck' */ + LE_NUKT_FEATURE_TAG = 0x6E756B74UL, /**< 'nukt' */ + LE_NUMR_FEATURE_TAG = 0x6E756D72UL, /**< 'numr' */ + LE_ONUM_FEATURE_TAG = 0x6F6E756DUL, /**< 'onum' */ + LE_OPBD_FEATURE_TAG = 0x6F706264UL, /**< 'opbd' */ + LE_ORDN_FEATURE_TAG = 0x6F72646EUL, /**< 'ordn' */ + LE_ORNM_FEATURE_TAG = 0x6F726E6DUL, /**< 'ornm' */ + LE_PALT_FEATURE_TAG = 0x70616C74UL, /**< 'palt' */ + LE_PCAP_FEATURE_TAG = 0x70636170UL, /**< 'pcap' */ + LE_PNUM_FEATURE_TAG = 0x706E756DUL, /**< 'pnum' */ + LE_PREF_FEATURE_TAG = 0x70726566UL, /**< 'pref' */ + LE_PRES_FEATURE_TAG = 0x70726573UL, /**< 'pres' */ + LE_PSTF_FEATURE_TAG = 0x70737466UL, /**< 'pstf' */ + LE_PSTS_FEATURE_TAG = 0x70737473UL, /**< 'psts' */ + LE_PWID_FEATURE_TAG = 0x70776964UL, /**< 'pwid' */ + LE_QWID_FEATURE_TAG = 0x71776964UL, /**< 'qwid' */ + LE_RAND_FEATURE_TAG = 0x72616E64UL, /**< 'rand' */ + LE_RLIG_FEATURE_TAG = 0x726C6967UL, /**< 'rlig' */ + LE_RPHF_FEATURE_TAG = 0x72706866UL, /**< 'rphf' */ + LE_RTBD_FEATURE_TAG = 0x72746264UL, /**< 'rtbd' */ + LE_RTLA_FEATURE_TAG = 0x72746C61UL, /**< 'rtla' */ + LE_RUBY_FEATURE_TAG = 0x72756279UL, /**< 'ruby' */ + LE_SALT_FEATURE_TAG = 0x73616C74UL, /**< 'salt' */ + LE_SINF_FEATURE_TAG = 0x73696E66UL, /**< 'sinf' */ + LE_SIZE_FEATURE_TAG = 0x73697A65UL, /**< 'size' */ + LE_SMCP_FEATURE_TAG = 0x736D6370UL, /**< 'smcp' */ + LE_SMPL_FEATURE_TAG = 0x736D706CUL, /**< 'smpl' */ + LE_SS01_FEATURE_TAG = 0x73733031UL, /**< 'ss01' */ + LE_SS02_FEATURE_TAG = 0x73733032UL, /**< 'ss02' */ + LE_SS03_FEATURE_TAG = 0x73733033UL, /**< 'ss03' */ + LE_SS04_FEATURE_TAG = 0x73733034UL, /**< 'ss04' */ + LE_SS05_FEATURE_TAG = 0x73733035UL, /**< 'ss05' */ + LE_SS06_FEATURE_TAG = 0x73733036UL, /**< 'ss06' */ + LE_SS07_FEATURE_TAG = 0x73733037UL, /**< 'ss07' */ + LE_SS08_FEATURE_TAG = 0x73733038UL, /**< 'ss08' */ + LE_SS09_FEATURE_TAG = 0x73733039UL, /**< 'ss09' */ + LE_SS10_FEATURE_TAG = 0x73733130UL, /**< 'ss10' */ + LE_SS11_FEATURE_TAG = 0x73733131UL, /**< 'ss11' */ + LE_SS12_FEATURE_TAG = 0x73733132UL, /**< 'ss12' */ + LE_SS13_FEATURE_TAG = 0x73733133UL, /**< 'ss13' */ + LE_SS14_FEATURE_TAG = 0x73733134UL, /**< 'ss14' */ + LE_SS15_FEATURE_TAG = 0x73733135UL, /**< 'ss15' */ + LE_SS16_FEATURE_TAG = 0x73733136UL, /**< 'ss16' */ + LE_SS17_FEATURE_TAG = 0x73733137UL, /**< 'ss17' */ + LE_SS18_FEATURE_TAG = 0x73733138UL, /**< 'ss18' */ + LE_SS19_FEATURE_TAG = 0x73733139UL, /**< 'ss19' */ + LE_SS20_FEATURE_TAG = 0x73733230UL, /**< 'ss20' */ + LE_SUBS_FEATURE_TAG = 0x73756273UL, /**< 'subs' */ + LE_SUPS_FEATURE_TAG = 0x73757073UL, /**< 'sups' */ + LE_SWSH_FEATURE_TAG = 0x73777368UL, /**< 'swsh' */ + LE_TITL_FEATURE_TAG = 0x7469746CUL, /**< 'titl' */ + LE_TJMO_FEATURE_TAG = 0x746A6D6FUL, /**< 'tjmo' */ + LE_TNAM_FEATURE_TAG = 0x746E616DUL, /**< 'tnam' */ + LE_TNUM_FEATURE_TAG = 0x746E756DUL, /**< 'tnum' */ + LE_TRAD_FEATURE_TAG = 0x74726164UL, /**< 'trad' */ + LE_TWID_FEATURE_TAG = 0x74776964UL, /**< 'twid' */ + LE_UNIC_FEATURE_TAG = 0x756E6963UL, /**< 'unic' */ + LE_VALT_FEATURE_TAG = 0x76616C74UL, /**< 'valt' */ + LE_VATU_FEATURE_TAG = 0x76617475UL, /**< 'vatu' */ + LE_VERT_FEATURE_TAG = 0x76657274UL, /**< 'vert' */ + LE_VHAL_FEATURE_TAG = 0x7668616CUL, /**< 'vhal' */ + LE_VJMO_FEATURE_TAG = 0x766A6D6FUL, /**< 'vjmo' */ + LE_VKNA_FEATURE_TAG = 0x766B6E61UL, /**< 'vkna' */ + LE_VKRN_FEATURE_TAG = 0x766B726EUL, /**< 'vkrn' */ + LE_VPAL_FEATURE_TAG = 0x7670616CUL, /**< 'vpal' */ + LE_VRT2_FEATURE_TAG = 0x76727432UL, /**< 'vrt2' */ + LE_ZERO_FEATURE_TAG = 0x7A65726FUL /**< 'zero' */ }; /** @@ -512,19 +524,19 @@ enum LEFeatureTags { */ enum LEErrorCode { /* informational */ - LE_NO_SUBFONT_WARNING = U_USING_DEFAULT_WARNING, + LE_NO_SUBFONT_WARNING = U_USING_DEFAULT_WARNING, /**< The font does not contain subfonts. */ /* success */ - LE_NO_ERROR = U_ZERO_ERROR, + LE_NO_ERROR = U_ZERO_ERROR, /**< No error, no warning. */ /* failures */ - LE_ILLEGAL_ARGUMENT_ERROR = U_ILLEGAL_ARGUMENT_ERROR, - LE_MEMORY_ALLOCATION_ERROR = U_MEMORY_ALLOCATION_ERROR, - LE_INDEX_OUT_OF_BOUNDS_ERROR = U_INDEX_OUTOFBOUNDS_ERROR, - LE_NO_LAYOUT_ERROR = U_UNSUPPORTED_ERROR, - LE_INTERNAL_ERROR = U_INTERNAL_PROGRAM_ERROR, - LE_FONT_FILE_NOT_FOUND_ERROR = U_FILE_ACCESS_ERROR, - LE_MISSING_FONT_TABLE_ERROR = U_MISSING_RESOURCE_ERROR + LE_ILLEGAL_ARGUMENT_ERROR = U_ILLEGAL_ARGUMENT_ERROR, /**< An illegal argument was detected. */ + LE_MEMORY_ALLOCATION_ERROR = U_MEMORY_ALLOCATION_ERROR, /**< Memory allocation error. */ + LE_INDEX_OUT_OF_BOUNDS_ERROR = U_INDEX_OUTOFBOUNDS_ERROR, /**< Trying to access an index that is out of bounds. */ + LE_NO_LAYOUT_ERROR = U_UNSUPPORTED_ERROR, /**< You must call layoutChars() first. */ + LE_INTERNAL_ERROR = U_INTERNAL_PROGRAM_ERROR, /**< An internal error was encountered. */ + LE_FONT_FILE_NOT_FOUND_ERROR = U_FILE_ACCESS_ERROR, /**< The requested font file cannot be opened. */ + LE_MISSING_FONT_TABLE_ERROR = U_MISSING_RESOURCE_ERROR /**< The requested font table does not exist. */ }; #ifndef XP_CPLUSPLUS diff --git a/icuSources/layout/LayoutEngine.cpp b/icuSources/layout/LayoutEngine.cpp index 4a3d6bb0..b211f2d3 100644 --- a/icuSources/layout/LayoutEngine.cpp +++ b/icuSources/layout/LayoutEngine.cpp @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -13,8 +13,11 @@ #include "ArabicLayoutEngine.h" #include "CanonShaping.h" #include "HanLayoutEngine.h" +#include "HangulLayoutEngine.h" #include "IndicLayoutEngine.h" +#include "KhmerLayoutEngine.h" #include "ThaiLayoutEngine.h" +#include "TibetanLayoutEngine.h" #include "GXLayoutEngine.h" #include "ScriptAndLanguageTags.h" #include "CharSubstitutionFilter.h" @@ -27,9 +30,9 @@ #include "DefaultCharMapper.h" -U_NAMESPACE_BEGIN +#include "KernTable.h" -#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) +U_NAMESPACE_BEGIN const LEUnicode32 DefaultCharMapper::controlChars[] = { 0x0009, 0x000A, 0x000D, @@ -38,29 +41,7 @@ const LEUnicode32 DefaultCharMapper::controlChars[] = { 0x206A, 0x206B, 0x206C, 0x206D, 0x206E, 0x206F }; -const le_int32 DefaultCharMapper::controlCharsCount = ARRAY_SIZE(controlChars); - -const LEUnicode32 DefaultCharMapper::mirroredChars[] = { - 0x0028, 0x0029, // ascii paired punctuation - 0x003c, 0x003e, - 0x005b, 0x005d, - 0x007b, 0x007d, - 0x2045, 0x2046, // math symbols (not complete) - 0x207d, 0x207e, - 0x208d, 0x208e, - 0x2264, 0x2265, - 0x3008, 0x3009, // chinese paired punctuation - 0x300a, 0x300b, - 0x300c, 0x300d, - 0x300e, 0x300f, - 0x3010, 0x3011, - 0x3014, 0x3015, - 0x3016, 0x3017, - 0x3018, 0x3019, - 0x301a, 0x301b -}; - -const le_int32 DefaultCharMapper::mirroredCharsCount = ARRAY_SIZE(mirroredChars); +const le_int32 DefaultCharMapper::controlCharsCount = LE_ARRAY_SIZE(controlChars); LEUnicode32 DefaultCharMapper::mapChar(LEUnicode32 ch) const { @@ -73,12 +54,10 @@ LEUnicode32 DefaultCharMapper::mapChar(LEUnicode32 ch) const } if (fMirror) { - le_int32 index = OpenTypeUtilities::search((le_uint32) ch, (le_uint32 *)mirroredChars, mirroredCharsCount); + le_int32 index = OpenTypeUtilities::search((le_uint32) ch, (le_uint32 *)DefaultCharMapper::mirroredChars, DefaultCharMapper::mirroredCharsCount); if (mirroredChars[index] == ch) { - le_int32 mirrorOffset = ((index & 1) == 0) ? 1 : -1; - - return mirroredChars[index + mirrorOffset]; + return DefaultCharMapper::srahCderorrim[index]; } } @@ -107,14 +86,22 @@ CharSubstitutionFilter::~CharSubstitutionFilter() UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine) -static const LETag emptyTag = 0x00000000; +#define ccmpFeatureTag LE_CCMP_FEATURE_TAG -static const LETag ccmpFeatureTag = LE_CCMP_FEATURE_TAG; +#define ccmpFeatureMask 0x80000000UL + +#define canonFeatures (ccmpFeatureMask) + +static const FeatureMap canonFeatureMap[] = +{ + {ccmpFeatureTag, ccmpFeatureMask} +}; -static const LETag canonFeatures[] = {ccmpFeatureTag, emptyTag}; +static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap); -LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode) - : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode) +LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) + : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode), + fTypoFlags(typoFlags) { fGlyphStorage = new LEGlyphStorage(); } @@ -122,7 +109,7 @@ LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCo le_int32 LayoutEngine::getGlyphCount() const { return fGlyphStorage->getGlyphCount(); -}; +} void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const { @@ -157,7 +144,7 @@ void LayoutEngine::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEE } le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, - LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) + LEUnicode *&outChars, LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success) { if (LE_FAILURE(success)) { return 0; @@ -175,9 +162,32 @@ le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 off if (canonGSUBTable->coversScript(scriptTag)) { CharSubstitutionFilter *substitutionFilter = new CharSubstitutionFilter(fFontInstance); + const LEUnicode *inChars = &chars[offset]; + LEUnicode *reordered = NULL; + LEGlyphStorage fakeGlyphStorage; - glyphStorage.allocateGlyphArray(count, rightToLeft, success); - glyphStorage.allocateAuxData(success); + fakeGlyphStorage.allocateGlyphArray(count, rightToLeft, success); + + if (LE_FAILURE(success)) { + return 0; + } + + // This is the cheapest way to get mark reordering only for Hebrew. + // We could just do the mark reordering for all scripts, but most + // of them probably don't need it... + if (fScriptCode == hebrScriptCode) { + reordered = LE_NEW_ARRAY(LEUnicode, count); + + if (reordered == NULL) { + success = LE_MEMORY_ALLOCATION_ERROR; + return 0; + } + + CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, fakeGlyphStorage); + inChars = reordered; + } + + fakeGlyphStorage.allocateAuxData(success); if (LE_FAILURE(success)) { return 0; @@ -189,17 +199,21 @@ le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 off } for (i = 0; i < count; i += 1, out += dir) { - glyphStorage[out] = (LEGlyphID) chars[offset + i]; - glyphStorage.setAuxData(out, (void *) canonFeatures, success); + fakeGlyphStorage[out] = (LEGlyphID) inChars[i]; + fakeGlyphStorage.setAuxData(out, canonFeatures, success); } - outCharCount = canonGSUBTable->process(glyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, NULL); + if (reordered != NULL) { + LE_DELETE_ARRAY(reordered); + } + + outCharCount = canonGSUBTable->process(fakeGlyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE); - out = (rightToLeft? count - 1 : 0); + out = (rightToLeft? outCharCount - 1 : 0); outChars = LE_NEW_ARRAY(LEUnicode, outCharCount); for (i = 0; i < outCharCount; i += 1, out += dir) { - outChars[out] = (LEUnicode) LE_GET_GLYPH(glyphStorage[i]); + outChars[out] = (LEUnicode) LE_GET_GLYPH(fakeGlyphStorage[i]); } delete substitutionFilter; @@ -224,10 +238,10 @@ le_int32 LayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, l le_int32 outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success); if (outChars != NULL) { - mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft, glyphStorage, success); + mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft, TRUE, glyphStorage, success); LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work... } else { - mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success); + mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, TRUE, glyphStorage, success); } return glyphStorage.getGlyphCount(); @@ -263,7 +277,7 @@ void LayoutEngine::positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y } void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/, - LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success) + LEGlyphStorage &glyphStorage, LEErrorCode &success) { if (LE_FAILURE(success)) { return; @@ -274,6 +288,13 @@ void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset return; } + if (fTypoFlags & 0x1) { /* kerning enabled */ + static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG; + + KernTable kt(fFontInstance, getFontTable(kernTableTag)); + kt.process(glyphStorage); + } + // default is no adjustments return; } @@ -361,7 +382,7 @@ const void *LayoutEngine::getFontTable(LETag tableTag) const return fFontInstance->getFontTable(tableTag); } -void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, +void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage, LEErrorCode &success) { if (LE_FAILURE(success)) { @@ -372,7 +393,7 @@ void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le DefaultCharMapper charMapper(TRUE, mirror); - fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, glyphStorage); + fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, filterZeroWidth, glyphStorage); } // Input: characters, font? @@ -391,6 +412,10 @@ le_int32 LayoutEngine::layoutChars(const LEUnicode chars[], le_int32 offset, le_ } le_int32 glyphCount; + + if (fGlyphStorage->getGlyphCount() > 0) { + fGlyphStorage->reset(); + } glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft, *fGlyphStorage, success); positionGlyphs(*fGlyphStorage, x, y, success); @@ -405,6 +430,12 @@ void LayoutEngine::reset() } LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success) +{ + // 3 -> kerning and ligatures + return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, 3, success); +} + +LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success) { static const le_uint32 gsubTableTag = LE_GSUB_TABLE_TAG; static const le_uint32 mortTableTag = LE_MORT_TABLE_TAG; @@ -429,11 +460,16 @@ LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstan case guruScriptCode: case tamlScriptCode: case teluScriptCode: - result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable); + case sinhScriptCode: + result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); break; case arabScriptCode: - result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable); + result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); + break; + + case hangScriptCode: + result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); break; case haniScriptCode: @@ -445,20 +481,28 @@ LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstan case zhtLanguageCode: case zhsLanguageCode: if (gsubTable->coversScriptAndLanguage(scriptTag, languageTag, TRUE)) { - result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable); + result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); break; } // note: falling through to default case. default: - result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable); + result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); break; } break; + case tibtScriptCode: + result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); + break; + + case khmrScriptCode: + result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); + break; + default: - result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable); + result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable); break; } } else { @@ -477,25 +521,26 @@ LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstan case guruScriptCode: case tamlScriptCode: case teluScriptCode: + case sinhScriptCode: { - result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode); + result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); break; } case arabScriptCode: //case hebrScriptCode: - result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode); + result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); break; //case hebrScriptCode: - // return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode); + // return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); case thaiScriptCode: - result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode); + result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); break; default: - result = new LayoutEngine(fontInstance, scriptCode, languageCode); + result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags); break; } } @@ -509,7 +554,7 @@ LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstan } LayoutEngine::~LayoutEngine() { - reset(); + delete fGlyphStorage; } U_NAMESPACE_END diff --git a/icuSources/layout/LayoutEngine.h b/icuSources/layout/LayoutEngine.h index fb20000f..172d4e17 100644 --- a/icuSources/layout/LayoutEngine.h +++ b/icuSources/layout/LayoutEngine.h @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -10,6 +10,11 @@ #include "LETypes.h" +/** + * \file + * \brief C++ API: Virtual base class for complex text layout. + */ + U_NAMESPACE_BEGIN class LEFontInstance; @@ -95,6 +100,13 @@ protected: */ le_int32 fLanguageCode; + /** + * The typographic control flags + * + * @internal + */ + le_int32 fTypoFlags; + /** * This constructs an instance for a given font, script and language. Subclass constructors * must call this constructor. @@ -102,13 +114,15 @@ protected: * @param fontInstance - the font for the text * @param scriptCode - the script for the text * @param languageCode - the language for the text + * @param typoFlags - the typographic control flags for the text. Set bit 1 if kerning + * is desired, set bit 2 if ligature formation is desired. Others are reserved. * * @see LEFontInstance * @see ScriptAndLanguageTags.h * * @internal */ - LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + LayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags); /** * This overrides the default no argument constructor to make it @@ -240,6 +254,7 @@ protected: * @param count - the number of characters to be mapped * @param reverse - if <code>TRUE</code>, the output will be in reverse order * @param mirror - if <code>TRUE</code>, do character mirroring + * @param filterZeroWidth - if <code>TRUE</code> replace ZWJ / ZWNJ with a glyph with no contours. * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char * indices arrays will be filled in. * @param success - set to an error code if the operation fails @@ -248,7 +263,7 @@ protected: * * @internal */ - virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, LEGlyphStorage &glyphStorage, LEErrorCode &success); + virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage, LEErrorCode &success); /** * This is a convenience method that forces the advance width of mark @@ -299,7 +314,7 @@ public: /** * This method will invoke the layout steps in their correct order by calling - * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods.. It will + * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods. It will * compute the glyph, character index and position arrays. * * @param chars - the input character context @@ -313,8 +328,12 @@ public: * * @return the number of glyphs in the glyph array * - * Note; the glyph, character index and position array can be accessed - * using the getter method below. + * Note: The glyph, character index and position array can be accessed + * using the getter methods below. + * + * Note: If you call this method more than once, you must call the reset() + * method first to free the glyph, character index and position arrays + * allocated by the previous call. * * @stable ICU 2.8 */ @@ -438,6 +457,12 @@ public: */ static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success); + /** + * Override of existing call that provides flags to control typography. + * @draft ICU 3.4 + */ + static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode &success); + /** * ICU "poor man's RTTI", returns a UClassID for the actual class. * diff --git a/icuSources/layout/LookupProcessor.cpp b/icuSources/layout/LookupProcessor.cpp index 2fc88448..107fd496 100644 --- a/icuSources/layout/LookupProcessor.cpp +++ b/icuSources/layout/LookupProcessor.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -12,19 +12,13 @@ #include "Lookups.h" #include "ScriptAndLanguage.h" #include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" +#include "GlyphIterator.h" #include "LookupProcessor.h" #include "LEGlyphStorage.h" #include "LESwaps.h" U_NAMESPACE_BEGIN -const LETag LookupProcessor::notSelected = 0x00000000; -const LETag LookupProcessor::defaultFeature = 0xFFFFFFFF; - -static const LETag emptyTag = 0x00000000; - - le_uint32 LookupProcessor::applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const { @@ -48,7 +42,7 @@ le_uint32 LookupProcessor::applyLookupTable(const LookupTable *lookupTable, Glyp return 1; } -le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustment *glyphPositionAdjustments, +le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance) const { @@ -64,13 +58,13 @@ le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdj for (le_uint16 order = 0; order < lookupOrderCount; order += 1) { le_uint16 lookup = lookupOrderArray[order]; - LETag selectTag = lookupSelectArray[lookup]; + FeatureMask selectMask = lookupSelectArray[lookup]; - if (selectTag != notSelected) { + if (selectMask != 0) { const LookupTable *lookupTable = lookupListTable->getLookupTable(lookup); le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags); - glyphIterator.reset(lookupFlags, selectTag); + glyphIterator.reset(lookupFlags, selectMask); while (glyphIterator.findFeatureTag()) { le_uint32 delta = 1; @@ -98,7 +92,7 @@ le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIt return delta; } -le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, LETag featureTag, le_int32 order) +le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order) { le_uint16 lookupCount = featureTable? SWAPW(featureTable->lookupCount) : 0; le_int32 store = order; @@ -106,10 +100,8 @@ le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, LETag for (le_uint16 lookup = 0; lookup < lookupCount; lookup += 1) { le_uint16 lookupListIndex = SWAPW(featureTable->lookupListIndexArray[lookup]); - if (lookupSelectArray[lookupListIndex] == notSelected) { - lookupSelectArray[lookupListIndex] = featureTag; - lookupOrderArray[store++] = lookupListIndex; - } + lookupSelectArray[lookupListIndex] |= featureMask; + lookupOrderArray[store++] = lookupListIndex; } return store - order; @@ -117,9 +109,9 @@ le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, LETag LookupProcessor::LookupProcessor(const char *baseAddress, Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset, - LETag scriptTag, LETag languageTag, const LETag *featureOrder) + LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures) : lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), - requiredFeatureTag(notSelected), lookupOrderArray(NULL), lookupOrderCount(0) + lookupOrderArray(NULL), lookupOrderCount(0) { const ScriptListTable *scriptListTable = NULL; const LangSysTable *langSysTable = NULL; @@ -152,39 +144,66 @@ LookupProcessor::LookupProcessor(const char *baseAddress, requiredFeatureIndex = SWAPW(langSysTable->reqFeatureIndex); - lookupSelectArray = LE_NEW_ARRAY(LETag, lookupListCount); + lookupSelectArray = LE_NEW_ARRAY(FeatureMask, lookupListCount); for (int i = 0; i < lookupListCount; i += 1) { - lookupSelectArray[i] = notSelected; + lookupSelectArray[i] = 0; } le_int32 count, order = 0; - const FeatureTable *featureTable = 0; + le_int32 featureReferences = 0; + const FeatureTable *featureTable = NULL; LETag featureTag; - lookupOrderArray = LE_NEW_ARRAY(le_uint16, lookupListCount); + const FeatureTable *requiredFeatureTable = NULL; + LETag requiredFeatureTag = 0x00000000U; + + // Count the total number of lookups referenced by all features. This will + // be the maximum number of entries in the lookupOrderArray. We can't use + // lookupListCount because some lookups might be referenced by more than + // one feature. + for (le_int32 feature = 0; feature < featureCount; feature += 1) { + le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); + + featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag); + featureReferences += SWAPW(featureTable->lookupCount); + } if (requiredFeatureIndex != 0xFFFF) { - featureTable = featureListTable->getFeatureTable(requiredFeatureIndex, &featureTag); - order += selectLookups(featureTable, defaultFeature, order); + requiredFeatureTable = featureListTable->getFeatureTable(requiredFeatureIndex, &requiredFeatureTag); + featureReferences += SWAPW(featureTable->lookupCount); } - if (featureOrder != NULL) { - if (order > 1) { - OpenTypeUtilities::sort(lookupOrderArray, order); + lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences); + + for (le_int32 f = 0; f < featureMapCount; f += 1) { + FeatureMap fm = featureMap[f]; + count = 0; + + // If this is the required feature, add its lookups + if (requiredFeatureTag == fm.tag) { + count += selectLookups(requiredFeatureTable, fm.mask, order); } - for (le_int32 tag = 0; featureOrder[tag] != emptyTag; tag += 1) { - featureTag = featureOrder[tag]; - count = 0; + if (orderFeatures) { + // If we added lookups from the required feature, sort them + if (count > 1) { + OpenTypeUtilities::sort(lookupOrderArray, order); + } for (le_uint16 feature = 0; feature < featureCount; feature += 1) { le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); + + // don't add the required feature to the list more than once... + // TODO: Do we need this check? (Spec. says required feature won't be in feature list...) + if (featureIndex == requiredFeatureIndex) { + continue; + } featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag); - if (featureTag == featureOrder[tag]) { - count += selectLookups(featureTable, featureTag, order + count); + if (featureTag == fm.tag) { + count += selectLookups(featureTable, fm.mask, order + count); } } @@ -193,24 +212,51 @@ LookupProcessor::LookupProcessor(const char *baseAddress, } order += count; - } - } else { - for (le_uint16 feature = 0; feature < featureCount; feature += 1) { - le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); + } else { + for (le_uint16 feature = 0; feature < featureCount; feature += 1) { + le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); - // don't add the required feature to the list more than once... - if (featureIndex == requiredFeatureIndex) { - continue; - } + // don't add the required feature to the list more than once... + // NOTE: This check is commented out because the spec. says that + // the required feature won't be in the feature list, and because + // any duplicate entries will be removed below. +#if 0 + if (featureIndex == requiredFeatureIndex) { + continue; + } +#endif - featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag); - count = selectLookups(featureTable, featureTag, order); - order += count; + featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag); + + if (featureTag == fm.tag) { + order += selectLookups(featureTable, fm.mask, order); + } + } } + } + + if (!orderFeatures && (order > 1)) { + OpenTypeUtilities::sort(lookupOrderArray, order); + + // If there's no specified feature order, + // we will apply the lookups in the order + // that they're in the font. If a particular + // lookup may be referenced by more than one feature, + // it will apprear in the lookupOrderArray more than + // once, so remove any duplicate entries in the sorted array. + le_int32 out = 1; + + for (le_int32 in = 1; in < order; in += 1) { + if (lookupOrderArray[out - 1] != lookupOrderArray[in]) { + if (out != in) { + lookupOrderArray[out] = lookupOrderArray[in]; + } - if (order > 1) { - OpenTypeUtilities::sort(lookupOrderArray, order); + out += 1; + } } + + order = out; } lookupOrderCount = order; @@ -224,6 +270,6 @@ LookupProcessor::~LookupProcessor() { LE_DELETE_ARRAY(lookupOrderArray); LE_DELETE_ARRAY(lookupSelectArray); -}; +} U_NAMESPACE_END diff --git a/icuSources/layout/LookupProcessor.h b/icuSources/layout/LookupProcessor.h index e8257e9e..bc05ae63 100644 --- a/icuSources/layout/LookupProcessor.h +++ b/icuSources/layout/LookupProcessor.h @@ -1,7 +1,7 @@ /* * %W% %E% * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -16,22 +16,24 @@ #include "LETypes.h" #include "LEFontInstance.h" #include "OpenTypeTables.h" -#include "Lookups.h" -#include "Features.h" -#include "GlyphDefinitionTables.h" -#include "GlyphPositionAdjustments.h" -#include "GlyphIterator.h" +//#include "Lookups.h" +//#include "Features.h" U_NAMESPACE_BEGIN -class LEGlyphStorage; +class LEFontInstance; +class LEGlyphStorage; +class GlyphIterator; +class GlyphPositionAdjustments; +struct FeatureTable; +struct FeatureListTable; +struct GlyphDefinitionTableHeader; +struct LookupSubtable; +struct LookupTable; class LookupProcessor : public UMemory { public: - static const LETag notSelected; - static const LETag defaultFeature; - - le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustment *glyphPositionAdjustments, + le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance) const; le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const; @@ -44,19 +46,18 @@ public: virtual ~LookupProcessor(); protected: - LookupProcessor(const char *baseAddress, + LookupProcessor(const char *baseAddress, Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset, - LETag scriptTag, LETag languageTag, const LETag *featureOrder); + LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures); - LookupProcessor(); + LookupProcessor(); - le_int32 selectLookups(const FeatureTable *featureTable, LETag featureTag, le_int32 order); + le_int32 selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order); const LookupListTable *lookupListTable; const FeatureListTable *featureListTable; - LETag *lookupSelectArray; - LETag requiredFeatureTag; + FeatureMask *lookupSelectArray; le_uint16 *lookupOrderArray; le_uint32 lookupOrderCount; diff --git a/icuSources/layout/Lookups.h b/icuSources/layout/Lookups.h index 8bf23d2f..2316b573 100644 --- a/icuSources/layout/Lookups.h +++ b/icuSources/layout/Lookups.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -33,7 +33,8 @@ struct LookupSubtable le_uint16 subtableFormat; Offset coverageTableOffset; - le_int32 getGlyphCoverage(LEGlyphID glyphID) const; + inline le_int32 getGlyphCoverage(LEGlyphID glyphID) const; + le_int32 getGlyphCoverage(Offset tableOffset, LEGlyphID glyphID) const; }; diff --git a/icuSources/layout/Makefile.in b/icuSources/layout/Makefile.in index ad96f2fc..b1224521 100644 --- a/icuSources/layout/Makefile.in +++ b/icuSources/layout/Makefile.in @@ -1,13 +1,18 @@ -## Copyright (c) 1999-2004, International Business Machines Corporation and -## others. All Rights Reserved. +#****************************************************************************** +# +# Copyright (C) 1999-2006, International Business Machines +# Corporation and others. All Rights Reserved. +# +#****************************************************************************** ## Makefile.in for ICU - layout -## Install directory information +## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. +## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk ## Build directory information @@ -26,7 +31,7 @@ endif ifneq ($(ENABLE_SHARED),) SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) ifeq ($(ENABLE_SO_VERSION_DATA),1) SO_VERSION_DATA = layout.res @@ -45,13 +50,15 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) -LDFLAGS += $(LDFLAGSICULE) -CPPFLAGS += -I$(srcdir) -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/unicode -I$(srcdir)/.. $(LIBCPPFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(srcdir) -I$(srcdir)/.. -I$(top_srcdir)/common -I$(srcdir)/unicode $(LIBCPPFLAGS) DEFS += -DU_LAYOUT_IMPLEMENTATION +LDFLAGS += $(LDFLAGSICULE) LIBS = $(LIBICUUC) $(DEFAULT_LIBS) -OBJECTS = loengine.o \ -LEFontInstance.o \ +OBJECTS = LEFontInstance.o \ OpenTypeLayoutEngine.o \ ThaiLayoutEngine.o \ ThaiShaping.o \ @@ -78,6 +85,7 @@ AlternateSubstSubtables.o \ AnchorTables.o \ ArabicShaping.o \ CanonData.o \ +CanonShaping.o \ ClassDefinitionTables.o \ ContextualSubstSubtables.o \ CoverageTables.o \ @@ -90,6 +98,7 @@ GlyphDefinitionTables.o \ GlyphIterator.o \ GlyphLookupTables.o \ GlyphPosnLookupProc.o \ +GlyphPositionAdjustments.o \ GlyphPositioningTables.o \ GlyphSubstLookupProc.o \ GlyphSubstitutionTables.o \ @@ -104,24 +113,33 @@ MarkArrays.o \ MarkToBasePosnSubtables.o \ MarkToLigaturePosnSubtables.o \ MarkToMarkPosnSubtables.o \ +MirroredCharData.o \ MPreFixups.o \ MultipleSubstSubtables.o \ OpenTypeUtilities.o \ PairPositioningSubtables.o \ ScriptAndLanguage.o \ ScriptAndLanguageTags.o \ +ShapingTypeData.o \ SinglePositioningSubtables.o \ SingleSubstitutionSubtables.o \ SubstitutionLookups.o \ -ValueRecords.o +ValueRecords.o \ +KhmerLayoutEngine.o \ +KhmerReordering.o \ +TibetanLayoutEngine.o \ +TibetanReordering.o \ +HangulLayoutEngine.o \ +KernTable.o + +## Header files to install +HEADERS= $(srcdir)/LayoutEngine.h $(srcdir)/LE*.h STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) DEPS = $(OBJECTS:.o=.d) -## Header files to install -HEADERS= $(srcdir)/LayoutEngine.h $(srcdir)/LE*.h -LOHEADERS= $(srcdir)/unicode/loengine.h +-include Makefile.local ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ @@ -141,7 +159,7 @@ check: all check-local all-local: $(ALL_TARGETS) -install-local: install-headers install-library +install-local: install-headers install-library install-library: all-local $(MKINSTALLDIRS) $(DESTDIR)$(libdir) @@ -167,23 +185,18 @@ ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB)) endif endif - install-headers: $(MKINSTALLDIRS) $(DESTDIR)$(includedir)/layout @for file in $(HEADERS); do \ echo "$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout || exit; \ done - @for file in $(LOHEADERS); do \ - echo "$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode"; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode || exit; \ - done dist-local: clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) - $(RMV) $(OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA) + $(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA) distclean-local: clean-local $(RMV) Makefile @@ -200,15 +213,14 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) $(SO_VERSION_DATA) +$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) ifeq ($(OS390BATCH),1) -$(BATCH_TARGET): $(OBJECTS) +$(BATCH_TARGET):$(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS) endif # OS390BATCH - -endif +endif # ENABLE_SHARED ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -218,4 +230,3 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) endif endif - diff --git a/icuSources/layout/MarkToMarkPosnSubtables.cpp b/icuSources/layout/MarkToMarkPosnSubtables.cpp index 66d1b9dd..3f571f5e 100644 --- a/icuSources/layout/MarkToMarkPosnSubtables.cpp +++ b/icuSources/layout/MarkToMarkPosnSubtables.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -65,6 +65,11 @@ le_int32 MarkToMarkPositioningSubtable::process(GlyphIterator *glyphIterator, co const AnchorTable *anchorTable = (const AnchorTable *) ((char *) mark2Array + anchorTableOffset); LEPoint mark2Anchor, markAdvance, pixels; + if (anchorTableOffset == 0) { + // this seems to mean that the marks don't attach... + return 0; + } + anchorTable->getAnchor(mark2Glyph, fontInstance, mark2Anchor); fontInstance->getGlyphAdvance(markGlyph, pixels); diff --git a/icuSources/layout/MirroredCharData.cpp b/icuSources/layout/MirroredCharData.cpp new file mode 100644 index 00000000..b8133717 --- /dev/null +++ b/icuSources/layout/MirroredCharData.cpp @@ -0,0 +1,108 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved. + * + * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS + * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 07/20/2005 10:43:59 AM PDT + */ + +#include "LETypes.h" +#include "DefaultCharMapper.h" + +U_NAMESPACE_BEGIN + +const LEUnicode32 DefaultCharMapper::mirroredChars[] = { + 0x0028, 0x0029, 0x003C, 0x003E, 0x005B, 0x005D, 0x007B, 0x007D, + 0x00AB, 0x00BB, 0x2039, 0x203A, 0x2045, 0x2046, 0x207D, 0x207E, + 0x208D, 0x208E, 0x2208, 0x2209, 0x220A, 0x220B, 0x220C, 0x220D, + 0x2215, 0x223C, 0x223D, 0x2243, 0x2252, 0x2253, 0x2254, 0x2255, + 0x2264, 0x2265, 0x2266, 0x2267, 0x2268, 0x2269, 0x226A, 0x226B, + 0x226E, 0x226F, 0x2270, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, + 0x2276, 0x2277, 0x2278, 0x2279, 0x227A, 0x227B, 0x227C, 0x227D, + 0x227E, 0x227F, 0x2280, 0x2281, 0x2282, 0x2283, 0x2284, 0x2285, + 0x2286, 0x2287, 0x2288, 0x2289, 0x228A, 0x228B, 0x228F, 0x2290, + 0x2291, 0x2292, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22A8, 0x22A9, + 0x22AB, 0x22B0, 0x22B1, 0x22B2, 0x22B3, 0x22B4, 0x22B5, 0x22B6, + 0x22B7, 0x22C9, 0x22CA, 0x22CB, 0x22CC, 0x22CD, 0x22D0, 0x22D1, + 0x22D6, 0x22D7, 0x22D8, 0x22D9, 0x22DA, 0x22DB, 0x22DC, 0x22DD, + 0x22DE, 0x22DF, 0x22E0, 0x22E1, 0x22E2, 0x22E3, 0x22E4, 0x22E5, + 0x22E6, 0x22E7, 0x22E8, 0x22E9, 0x22EA, 0x22EB, 0x22EC, 0x22ED, + 0x22F0, 0x22F1, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x22FA, + 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x2308, 0x2309, 0x230A, 0x230B, + 0x2329, 0x232A, 0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D, + 0x276E, 0x276F, 0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775, + 0x27C3, 0x27C4, 0x27C5, 0x27C6, 0x27D5, 0x27D6, 0x27DD, 0x27DE, + 0x27E2, 0x27E3, 0x27E4, 0x27E5, 0x27E6, 0x27E7, 0x27E8, 0x27E9, + 0x27EA, 0x27EB, 0x2983, 0x2984, 0x2985, 0x2986, 0x2987, 0x2988, + 0x2989, 0x298A, 0x298B, 0x298C, 0x298D, 0x298E, 0x298F, 0x2990, + 0x2991, 0x2992, 0x2993, 0x2994, 0x2995, 0x2996, 0x2997, 0x2998, + 0x29B8, 0x29C0, 0x29C1, 0x29C4, 0x29C5, 0x29CF, 0x29D0, 0x29D1, + 0x29D2, 0x29D4, 0x29D5, 0x29D8, 0x29D9, 0x29DA, 0x29DB, 0x29F5, + 0x29F8, 0x29F9, 0x29FC, 0x29FD, 0x2A2B, 0x2A2C, 0x2A2D, 0x2A2E, + 0x2A34, 0x2A35, 0x2A3C, 0x2A3D, 0x2A64, 0x2A65, 0x2A79, 0x2A7A, + 0x2A7D, 0x2A7E, 0x2A7F, 0x2A80, 0x2A81, 0x2A82, 0x2A83, 0x2A84, + 0x2A8B, 0x2A8C, 0x2A91, 0x2A92, 0x2A93, 0x2A94, 0x2A95, 0x2A96, + 0x2A97, 0x2A98, 0x2A99, 0x2A9A, 0x2A9B, 0x2A9C, 0x2AA1, 0x2AA2, + 0x2AA6, 0x2AA7, 0x2AA8, 0x2AA9, 0x2AAA, 0x2AAB, 0x2AAC, 0x2AAD, + 0x2AAF, 0x2AB0, 0x2AB3, 0x2AB4, 0x2ABB, 0x2ABC, 0x2ABD, 0x2ABE, + 0x2ABF, 0x2AC0, 0x2AC1, 0x2AC2, 0x2AC3, 0x2AC4, 0x2AC5, 0x2AC6, + 0x2ACD, 0x2ACE, 0x2ACF, 0x2AD0, 0x2AD1, 0x2AD2, 0x2AD3, 0x2AD4, + 0x2AD5, 0x2AD6, 0x2ADE, 0x2AE3, 0x2AE4, 0x2AE5, 0x2AEC, 0x2AED, + 0x2AF7, 0x2AF8, 0x2AF9, 0x2AFA, 0x2E02, 0x2E03, 0x2E04, 0x2E05, + 0x2E09, 0x2E0A, 0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x3008, 0x3009, + 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, + 0x3014, 0x3015, 0x3016, 0x3017, 0x3018, 0x3019, 0x301A, 0x301B, + 0xFF08, 0xFF09, 0xFF1C, 0xFF1E, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, + 0xFF5F, 0xFF60, 0xFF62, 0xFF63 +}; + +const LEUnicode32 DefaultCharMapper::srahCderorrim[] = { + 0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, + 0x00BB, 0x00AB, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, + 0x208E, 0x208D, 0x220B, 0x220C, 0x220D, 0x2208, 0x2209, 0x220A, + 0x29F5, 0x223D, 0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254, + 0x2265, 0x2264, 0x2267, 0x2266, 0x2269, 0x2268, 0x226B, 0x226A, + 0x226F, 0x226E, 0x2271, 0x2270, 0x2273, 0x2272, 0x2275, 0x2274, + 0x2277, 0x2276, 0x2279, 0x2278, 0x227B, 0x227A, 0x227D, 0x227C, + 0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282, 0x2285, 0x2284, + 0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A, 0x2290, 0x228F, + 0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3, + 0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5, 0x22B4, 0x22B7, + 0x22B6, 0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0, + 0x22D7, 0x22D6, 0x22D9, 0x22D8, 0x22DB, 0x22DA, 0x22DD, 0x22DC, + 0x22DF, 0x22DE, 0x22E1, 0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4, + 0x22E7, 0x22E6, 0x22E9, 0x22E8, 0x22EB, 0x22EA, 0x22ED, 0x22EC, + 0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x22F2, + 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308, 0x230B, 0x230A, + 0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D, 0x276C, + 0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772, 0x2775, 0x2774, + 0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27D6, 0x27D5, 0x27DE, 0x27DD, + 0x27E3, 0x27E2, 0x27E5, 0x27E4, 0x27E7, 0x27E6, 0x27E9, 0x27E8, + 0x27EB, 0x27EA, 0x2984, 0x2983, 0x2986, 0x2985, 0x2988, 0x2987, + 0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F, 0x298E, 0x298D, + 0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998, 0x2997, + 0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2, + 0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215, + 0x29F9, 0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D, + 0x2A35, 0x2A34, 0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79, + 0x2A7E, 0x2A7D, 0x2A80, 0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83, + 0x2A8C, 0x2A8B, 0x2A92, 0x2A91, 0x2A94, 0x2A93, 0x2A96, 0x2A95, + 0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C, 0x2A9B, 0x2AA2, 0x2AA1, + 0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA, 0x2AAD, 0x2AAC, + 0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE, 0x2ABD, + 0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5, + 0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3, + 0x2AD6, 0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC, + 0x2AF8, 0x2AF7, 0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04, + 0x2E0A, 0x2E09, 0x2E0D, 0x2E0C, 0x2E1D, 0x2E1C, 0x3009, 0x3008, + 0x300B, 0x300A, 0x300D, 0x300C, 0x300F, 0x300E, 0x3011, 0x3010, + 0x3015, 0x3014, 0x3017, 0x3016, 0x3019, 0x3018, 0x301B, 0x301A, + 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B, 0xFF5D, 0xFF5B, + 0xFF60, 0xFF5F, 0xFF63, 0xFF62 +}; + +const le_int32 DefaultCharMapper::mirroredCharsCount = 332; + +U_NAMESPACE_END diff --git a/icuSources/layout/OpenTypeLayoutEngine.cpp b/icuSources/layout/OpenTypeLayoutEngine.cpp index 9709e6ac..fbbfc0e6 100644 --- a/icuSources/layout/OpenTypeLayoutEngine.cpp +++ b/icuSources/layout/OpenTypeLayoutEngine.cpp @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -12,12 +12,14 @@ #include "LayoutEngine.h" #include "OpenTypeLayoutEngine.h" #include "ScriptAndLanguageTags.h" +#include "CharSubstitutionFilter.h" #include "GlyphSubstitutionTables.h" #include "GlyphDefinitionTables.h" #include "GlyphPositioningTables.h" #include "LEGlyphStorage.h" +#include "GlyphPositionAdjustments.h" #include "GDEFMarkFilter.h" @@ -25,27 +27,68 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(OpenTypeLayoutEngine) -static const LETag emptyTag = 0x00000000; - -static const LETag ccmpFeatureTag = LE_CCMP_FEATURE_TAG; -static const LETag ligaFeatureTag = LE_LIGA_FEATURE_TAG; -static const LETag cligFeatureTag = LE_CLIG_FEATURE_TAG; -static const LETag kernFeatureTag = LE_KERN_FEATURE_TAG; -static const LETag markFeatureTag = LE_MARK_FEATURE_TAG; -static const LETag mkmkFeatureTag = LE_MKMK_FEATURE_TAG; - -static const LETag defaultFeatures[] = {ccmpFeatureTag, ligaFeatureTag, cligFeatureTag, kernFeatureTag, markFeatureTag, mkmkFeatureTag, emptyTag}; +#define ccmpFeatureTag LE_CCMP_FEATURE_TAG +#define ligaFeatureTag LE_LIGA_FEATURE_TAG +#define cligFeatureTag LE_CLIG_FEATURE_TAG +#define kernFeatureTag LE_KERN_FEATURE_TAG +#define markFeatureTag LE_MARK_FEATURE_TAG +#define mkmkFeatureTag LE_MKMK_FEATURE_TAG + +// 'dlig' not used at the moment +#define dligFeatureTag 0x646C6967 + +// 'palt' +#define paltFeatureTag 0x70616C74 + +#define ccmpFeatureMask 0x80000000UL +#define ligaFeatureMask 0x40000000UL +#define cligFeatureMask 0x20000000UL +#define kernFeatureMask 0x10000000UL +#define paltFeatureMask 0x08000000UL +#define markFeatureMask 0x04000000UL +#define mkmkFeatureMask 0x02000000UL + +#define minimalFeatures (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask) +#define ligaFeatures (ligaFeatureMask | cligFeatureMask | minimalFeatures) +#define kernFeatures (kernFeatureMask | paltFeatureMask | minimalFeatures) +#define kernAndLigaFeatures (ligaFeatures | kernFeatures) + +static const FeatureMap featureMap[] = +{ + {ccmpFeatureTag, ccmpFeatureMask}, + {ligaFeatureTag, ligaFeatureMask}, + {cligFeatureTag, cligFeatureMask}, + {kernFeatureTag, kernFeatureMask}, + {paltFeatureTag, paltFeatureMask}, + {markFeatureTag, markFeatureMask}, + {mkmkFeatureTag, mkmkFeatureMask} +}; +static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap); OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable) - : LayoutEngine(fontInstance, scriptCode, languageCode), fFeatureList(defaultFeatures), fFeatureOrder(NULL), - fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL) + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureMask(minimalFeatures), + fFeatureMap(featureMap), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE), + fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL), fFilterZeroWidth(TRUE) { static const le_uint32 gdefTableTag = LE_GDEF_TABLE_TAG; static const le_uint32 gposTableTag = LE_GPOS_TABLE_TAG; const GlyphPositioningTableHeader *gposTable = (const GlyphPositioningTableHeader *) getFontTable(gposTableTag); + // todo: switch to more flags and bitfield rather than list of feature tags? + switch (typoFlags & ~0x80000000L) { + case 0: break; // default + case 1: fFeatureMask = kernFeatures; break; + case 2: fFeatureMask = ligaFeatures; break; + case 3: fFeatureMask = kernAndLigaFeatures; break; + default: break; + } + + if (typoFlags & 0x80000000L) { + fSubstitutionFilter = new CharSubstitutionFilter(fontInstance); + } + setScriptAndLanguageTags(); fGDEFTable = (const GlyphDefinitionTableHeader *) getFontTable(gdefTableTag); @@ -64,15 +107,20 @@ void OpenTypeLayoutEngine::reset() LayoutEngine::reset(); } -OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode) - : LayoutEngine(fontInstance, scriptCode, languageCode), fFeatureOrder(NULL), - fGSUBTable(NULL), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL) +OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags) + : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags), fFeatureOrder(FALSE), + fGSUBTable(NULL), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL), fFilterZeroWidth(TRUE) { setScriptAndLanguageTags(); } OpenTypeLayoutEngine::~OpenTypeLayoutEngine() { + if (fTypoFlags & 0x80000000L) { + delete fSubstitutionFilter; + } + reset(); } @@ -122,7 +170,7 @@ le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_i glyphStorage.allocateAuxData(success); for (le_int32 i = 0; i < outCharCount; i += 1) { - glyphStorage.setAuxData(i, (void *) fFeatureList, success); + glyphStorage.setAuxData(i, fFeatureMask, success); } return outCharCount; @@ -142,14 +190,15 @@ le_int32 OpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 return 0; } - mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success); + mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, fFilterZeroWidth, glyphStorage, success); if (LE_FAILURE(success)) { return 0; } if (fGSUBTable != NULL) { - count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter, fFeatureOrder); + count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter, + fFeatureMap, fFeatureMapCount, fFeatureOrder); } return count; @@ -186,6 +235,10 @@ le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 o outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, fakeGlyphStorage, success); + if (LE_FAILURE(success)) { + return 0; + } + if (outChars != NULL) { fakeGlyphCount = glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success); LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work... @@ -195,6 +248,10 @@ le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 o //adjustGlyphs(chars, offset, count, rightToLeft, fakeGlyphs, fakeGlyphCount); } + if (LE_FAILURE(success)) { + return 0; + } + outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success); return outGlyphCount; @@ -216,7 +273,7 @@ void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int3 le_int32 glyphCount = glyphStorage.getGlyphCount(); if (glyphCount > 0 && fGPOSTable != NULL) { - GlyphPositionAdjustment *adjustments = new GlyphPositionAdjustment[glyphCount]; + GlyphPositionAdjustments *adjustments = new GlyphPositionAdjustments(glyphCount); le_int32 i; if (adjustments == NULL) { @@ -228,23 +285,24 @@ void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int3 // Don't need to do this if we allocate // the adjustments array w/ new... for (i = 0; i < glyphCount; i += 1) { - adjustments[i].setXPlacement(0); - adjustments[i].setYPlacement(0); + adjustments->setXPlacement(i, 0); + adjustments->setYPlacement(i, 0); - adjustments[i].setXAdvance(0); - adjustments[i].setYAdvance(0); + adjustments->setXAdvance(i, 0); + adjustments->setYAdvance(i, 0); - adjustments[i].setBaseOffset(-1); + adjustments->setBaseOffset(i, -1); } #endif - fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, fFontInstance, fFeatureOrder); + fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, fFontInstance, + fFeatureMap, fFeatureMapCount, fFeatureOrder); float xAdjust = 0, yAdjust = 0; for (i = 0; i < glyphCount; i += 1) { - float xAdvance = adjustments[i].getXAdvance(); - float yAdvance = adjustments[i].getYAdvance(); + float xAdvance = adjustments->getXAdvance(i); + float yAdvance = adjustments->getYAdvance(i); float xPlacement = 0; float yPlacement = 0; @@ -256,9 +314,9 @@ void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int3 yAdjust += yKerning; #endif - for (le_int32 base = i; base >= 0; base = adjustments[base].getBaseOffset()) { - xPlacement += adjustments[base].getXPlacement(); - yPlacement += adjustments[base].getYPlacement(); + for (le_int32 base = i; base >= 0; base = adjustments->getBaseOffset(base)) { + xPlacement += adjustments->getXPlacement(base); + yPlacement += adjustments->getYPlacement(base); } xPlacement = fFontInstance->xUnitsToPoints(xPlacement); @@ -271,7 +329,7 @@ void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int3 glyphStorage.adjustPosition(glyphCount, xAdjust, -yAdjust, success); - delete[] adjustments; + delete adjustments; } #if 0 diff --git a/icuSources/layout/OpenTypeLayoutEngine.h b/icuSources/layout/OpenTypeLayoutEngine.h index 61cf1317..eab5832e 100644 --- a/icuSources/layout/OpenTypeLayoutEngine.h +++ b/icuSources/layout/OpenTypeLayoutEngine.h @@ -1,8 +1,5 @@ - /* - * %W% %E% - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved * */ @@ -45,7 +42,7 @@ U_NAMESPACE_BEGIN * * @internal */ -class OpenTypeLayoutEngine : public LayoutEngine +class U_LAYOUT_API OpenTypeLayoutEngine : public LayoutEngine { public: /** @@ -65,7 +62,7 @@ public: * @internal */ OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable); + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); /** * This constructor is used when the font requires a "canned" GSUB table which can't be known @@ -77,7 +74,8 @@ public: * * @internal */ - OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); /** * The destructor, virtual for correct polymorphic invocation. @@ -124,6 +122,13 @@ public: */ static UClassID getStaticClassID(); + /** + * The array of language tags, indexed by language code. + * + * @internal + */ + static const LETag languageTags[]; + private: /** @@ -137,28 +142,39 @@ private: */ static const LETag scriptTags[]; +protected: /** - * The array of language tags, indexed by language code. + * A set of "default" features. The default characterProcessing method + * will apply all of these features to every glyph. + * + * @internal */ - static const LETag languageTags[]; + FeatureMask fFeatureMask; -protected: /** - * A list of "default" features. The default characterProcessing method - * will apply all of these tags to every glyph. + * A set of mappings from feature tags to feature masks. These may + * be in the order in which the featues should be applied, but they + * don't need to be. * * @internal */ - const LETag *fFeatureList; + const FeatureMap *fFeatureMap; /** - * A list of tags in the order in which the features in - * the font should be applied, as opposed to using the - * order of the lookups in the font. + * The length of the feature map. * * @internal */ - const LETag *fFeatureOrder; + le_int32 fFeatureMapCount; + + /** + * <code>TRUE</code> if the features in the + * feature map are in the order in which they + * must be applied. + * + * @internal + */ + le_bool fFeatureOrder; /** * The address of the GSUB table. @@ -205,6 +221,14 @@ protected: */ LETag fLangSysTag; + /** + * <code>TRUE</code> if <code>mapCharsToGlyphs</code> should replace ZWJ / ZWNJ with a glyph + * with no contours. + * + * @internal + */ + le_bool fFilterZeroWidth; + /** * This method does the OpenType character processing. It assigns the OpenType feature * tags to the characters, and may generate output characters that differ from the input diff --git a/icuSources/layout/OpenTypeTables.h b/icuSources/layout/OpenTypeTables.h index c94a5cbd..510dd019 100644 --- a/icuSources/layout/OpenTypeTables.h +++ b/icuSources/layout/OpenTypeTables.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -21,13 +21,14 @@ U_NAMESPACE_BEGIN typedef le_uint16 Offset; typedef le_uint8 ATag[4]; typedef le_uint32 fixed32; +typedef le_uint32 FeatureMask; #define SWAPT(atag) ((LETag) ((atag[0] << 24) + (atag[1] << 16) + (atag[2] << 8) + atag[3])) struct TagAndOffsetRecord { - ATag tag; - Offset offset; + ATag tag; + Offset offset; }; struct GlyphRangeRecord @@ -37,5 +38,11 @@ struct GlyphRangeRecord le_int16 rangeValue; }; +struct FeatureMap +{ + LETag tag; + FeatureMask mask; +}; + U_NAMESPACE_END #endif diff --git a/icuSources/layout/PairPositioningSubtables.cpp b/icuSources/layout/PairPositioningSubtables.cpp index 7b31ac86..709aa48e 100644 --- a/icuSources/layout/PairPositioningSubtables.cpp +++ b/icuSources/layout/PairPositioningSubtables.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -11,7 +11,6 @@ #include "PairPositioningSubtables.h" #include "ValueRecords.h" #include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" #include "OpenTypeUtilities.h" #include "LESwaps.h" @@ -68,20 +67,13 @@ le_uint32 PairPositioningFormat1Subtable::process(GlyphIterator *glyphIterator, } if (valueFormat1 != 0) { - GlyphPositionAdjustment adjustment; - - tempIterator.getCurrGlyphPositionAdjustment(adjustment); - pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, adjustment, fontInstance); - tempIterator.setCurrGlyphPositionAdjustment(&adjustment); + pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance); } if (valueFormat2 != 0) { const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &pairValueRecord->valueRecord1 + valueRecord1Size); - GlyphPositionAdjustment adjustment; - glyphIterator->getCurrGlyphPositionAdjustment(adjustment); - valueRecord2->adjustPosition(SWAPW(valueFormat2), (char *) this, adjustment, fontInstance); - glyphIterator->setCurrGlyphPositionAdjustment(&adjustment); + valueRecord2->adjustPosition(SWAPW(valueFormat2), (char *) this, *glyphIterator, fontInstance); } return 2; @@ -111,20 +103,13 @@ le_uint32 PairPositioningFormat2Subtable::process(GlyphIterator *glyphIterator, if (valueFormat1 != 0) { - GlyphPositionAdjustment adjustment; - - tempIterator.getCurrGlyphPositionAdjustment(adjustment); - class2Record->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, adjustment, fontInstance); - tempIterator.setCurrGlyphPositionAdjustment(&adjustment); + class2Record->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance); } if (valueFormat2 != 0) { const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &class2Record->valueRecord1 + valueRecord1Size); - GlyphPositionAdjustment adjustment; - glyphIterator->getCurrGlyphPositionAdjustment(adjustment); - valueRecord2->adjustPosition(SWAPW(valueFormat2), (const char *) this, adjustment, fontInstance); - glyphIterator->setCurrGlyphPositionAdjustment(&adjustment); + valueRecord2->adjustPosition(SWAPW(valueFormat2), (const char *) this, *glyphIterator, fontInstance); } return 2; diff --git a/icuSources/layout/ScriptAndLanguageTags.cpp b/icuSources/layout/ScriptAndLanguageTags.cpp index ddbce262..a9171336 100644 --- a/icuSources/layout/ScriptAndLanguageTags.cpp +++ b/icuSources/layout/ScriptAndLanguageTags.cpp @@ -1,9 +1,11 @@ /* * - * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2006. All Rights Reserved. * * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 08/21/2006 02:35:14 PM HST */ #include "LETypes.h" @@ -20,7 +22,7 @@ const LETag OpenTypeLayoutEngine::scriptTags[] = { bengScriptTag, /* 'beng' (BENGALI) */ bopoScriptTag, /* 'bopo' (BOPOMOFO) */ cherScriptTag, /* 'cher' (CHEROKEE) */ - qaacScriptTag, /* 'qaac' (COPTIC) */ + coptScriptTag, /* 'copt' (COPTIC) */ cyrlScriptTag, /* 'cyrl' (CYRILLIC) */ dsrtScriptTag, /* 'dsrt' (DESERET) */ devaScriptTag, /* 'deva' (DEVANAGARI) */ @@ -37,7 +39,7 @@ const LETag OpenTypeLayoutEngine::scriptTags[] = { kndaScriptTag, /* 'knda' (KANNADA) */ kanaScriptTag, /* 'kana' (KATAKANA) */ khmrScriptTag, /* 'khmr' (KHMER) */ - laooScriptTag, /* 'laoo' (LAO) */ + laooScriptTag, /* 'lao ' (LAO) */ latnScriptTag, /* 'latn' (LATIN) */ mlymScriptTag, /* 'mlym' (MALAYALAM) */ mongScriptTag, /* 'mong' (MONGOLIAN) */ @@ -54,7 +56,7 @@ const LETag OpenTypeLayoutEngine::scriptTags[] = { thaiScriptTag, /* 'thai' (THAI) */ tibtScriptTag, /* 'tibt' (TIBETAN) */ cansScriptTag, /* 'cans' (CANADIAN_ABORIGINAL) */ - yiiiScriptTag, /* 'yiii' (YI) */ + yiiiScriptTag, /* 'yi ' (YI) */ tglgScriptTag, /* 'tglg' (TAGALOG) */ hanoScriptTag, /* 'hano' (HANUNOO) */ buhdScriptTag, /* 'buhd' (BUHID) */ @@ -67,7 +69,56 @@ const LETag OpenTypeLayoutEngine::scriptTags[] = { shawScriptTag, /* 'shaw' (SHAVIAN) */ taleScriptTag, /* 'tale' (TAI_LE) */ ugarScriptTag, /* 'ugar' (UGARITIC) */ - hrktScriptTag /* 'hrkt' (KATAKANA_OR_HIRAGANA) */ + hrktScriptTag, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */ + bugiScriptTag, /* 'bugi' (BUGINESE) */ + glagScriptTag, /* 'glag' (GLAGOLITIC) */ + kharScriptTag, /* 'khar' (KHAROSHTHI) */ + syloScriptTag, /* 'sylo' (SYLOTI_NAGRI) */ + taluScriptTag, /* 'talu' (NEW_TAI_LUE) */ + tfngScriptTag, /* 'tfng' (TIFINAGH) */ + xpeoScriptTag, /* 'xpeo' (OLD_PERSIAN) */ + baliScriptTag, /* 'bali' (BALINESE) */ + batkScriptTag, /* 'batk' (BATK) */ + blisScriptTag, /* 'blis' (BLIS) */ + brahScriptTag, /* 'brah' (BRAH) */ + chamScriptTag, /* 'cham' (CHAM) */ + cirtScriptTag, /* 'cirt' (CIRT) */ + cyrsScriptTag, /* 'cyrs' (CYRS) */ + egydScriptTag, /* 'egyd' (EGYD) */ + egyhScriptTag, /* 'egyh' (EGYH) */ + egypScriptTag, /* 'egyp' (EGYP) */ + geokScriptTag, /* 'geok' (GEOK) */ + hansScriptTag, /* 'hans' (HANS) */ + hantScriptTag, /* 'hant' (HANT) */ + hmngScriptTag, /* 'hmng' (HMNG) */ + hungScriptTag, /* 'hung' (HUNG) */ + indsScriptTag, /* 'inds' (INDS) */ + javaScriptTag, /* 'java' (JAVA) */ + kaliScriptTag, /* 'kali' (KALI) */ + latfScriptTag, /* 'latf' (LATF) */ + latgScriptTag, /* 'latg' (LATG) */ + lepcScriptTag, /* 'lepc' (LEPC) */ + linaScriptTag, /* 'lina' (LINA) */ + mandScriptTag, /* 'mand' (MAND) */ + mayaScriptTag, /* 'maya' (MAYA) */ + meroScriptTag, /* 'mero' (MERO) */ + nkooScriptTag, /* 'nko ' (NKO) */ + orkhScriptTag, /* 'orkh' (ORKH) */ + permScriptTag, /* 'perm' (PERM) */ + phagScriptTag, /* 'phag' (PHAGS_PA) */ + phnxScriptTag, /* 'phnx' (PHOENICIAN) */ + plrdScriptTag, /* 'plrd' (PLRD) */ + roroScriptTag, /* 'roro' (RORO) */ + saraScriptTag, /* 'sara' (SARA) */ + syreScriptTag, /* 'syre' (SYRE) */ + syrjScriptTag, /* 'syrj' (SYRJ) */ + syrnScriptTag, /* 'syrn' (SYRN) */ + tengScriptTag, /* 'teng' (TENG) */ + vaiiScriptTag, /* 'vai ' (VAII) */ + vispScriptTag, /* 'visp' (VISP) */ + xsuxScriptTag, /* 'xsux' (CUNEIFORM) */ + zxxxScriptTag, /* 'zxxx' (ZXXX) */ + zzzzScriptTag /* 'zzzz' (UNKNOWN) */ }; const LETag OpenTypeLayoutEngine::languageTags[] = { diff --git a/icuSources/layout/ScriptAndLanguageTags.h b/icuSources/layout/ScriptAndLanguageTags.h index b61783a5..7fb6f5e6 100644 --- a/icuSources/layout/ScriptAndLanguageTags.h +++ b/icuSources/layout/ScriptAndLanguageTags.h @@ -1,9 +1,11 @@ /* * - * (C) Copyright IBM Corp. 1998-2004. All Rights Reserved. + * (C) Copyright IBM Corp. 1998-2006. All Rights Reserved. * * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 08/21/2006 02:35:14 PM HST */ #ifndef __SCRIPTANDLANGUAGES_H @@ -11,13 +13,13 @@ #include "LETypes.h" -U_NAMESPACE_BEGIN - /** * \file * \internal */ +U_NAMESPACE_BEGIN + const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */ const LETag qaaiScriptTag = 0x71616169; /* 'qaai' (INHERITED) */ const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */ @@ -25,7 +27,7 @@ const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */ const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */ const LETag bopoScriptTag = 0x626F706F; /* 'bopo' (BOPOMOFO) */ const LETag cherScriptTag = 0x63686572; /* 'cher' (CHEROKEE) */ -const LETag qaacScriptTag = 0x71616163; /* 'qaac' (COPTIC) */ +const LETag coptScriptTag = 0x636F7074; /* 'copt' (COPTIC) */ const LETag cyrlScriptTag = 0x6379726C; /* 'cyrl' (CYRILLIC) */ const LETag dsrtScriptTag = 0x64737274; /* 'dsrt' (DESERET) */ const LETag devaScriptTag = 0x64657661; /* 'deva' (DEVANAGARI) */ @@ -42,7 +44,7 @@ const LETag hiraScriptTag = 0x68697261; /* 'hira' (HIRAGANA) */ const LETag kndaScriptTag = 0x6B6E6461; /* 'knda' (KANNADA) */ const LETag kanaScriptTag = 0x6B616E61; /* 'kana' (KATAKANA) */ const LETag khmrScriptTag = 0x6B686D72; /* 'khmr' (KHMER) */ -const LETag laooScriptTag = 0x6C616F6F; /* 'laoo' (LAO) */ +const LETag laooScriptTag = 0x6C616F20; /* 'lao ' (LAO) */ const LETag latnScriptTag = 0x6C61746E; /* 'latn' (LATIN) */ const LETag mlymScriptTag = 0x6D6C796D; /* 'mlym' (MALAYALAM) */ const LETag mongScriptTag = 0x6D6F6E67; /* 'mong' (MONGOLIAN) */ @@ -59,7 +61,7 @@ const LETag thaaScriptTag = 0x74686161; /* 'thaa' (THAANA) */ const LETag thaiScriptTag = 0x74686169; /* 'thai' (THAI) */ const LETag tibtScriptTag = 0x74696274; /* 'tibt' (TIBETAN) */ const LETag cansScriptTag = 0x63616E73; /* 'cans' (CANADIAN_ABORIGINAL) */ -const LETag yiiiScriptTag = 0x79696969; /* 'yiii' (YI) */ +const LETag yiiiScriptTag = 0x79692020; /* 'yi ' (YI) */ const LETag tglgScriptTag = 0x74676C67; /* 'tglg' (TAGALOG) */ const LETag hanoScriptTag = 0x68616E6F; /* 'hano' (HANUNOO) */ const LETag buhdScriptTag = 0x62756864; /* 'buhd' (BUHID) */ @@ -73,6 +75,55 @@ const LETag shawScriptTag = 0x73686177; /* 'shaw' (SHAVIAN) */ const LETag taleScriptTag = 0x74616C65; /* 'tale' (TAI_LE) */ const LETag ugarScriptTag = 0x75676172; /* 'ugar' (UGARITIC) */ const LETag hrktScriptTag = 0x68726B74; /* 'hrkt' (KATAKANA_OR_HIRAGANA) */ +const LETag bugiScriptTag = 0x62756769; /* 'bugi' (BUGINESE) */ +const LETag glagScriptTag = 0x676C6167; /* 'glag' (GLAGOLITIC) */ +const LETag kharScriptTag = 0x6B686172; /* 'khar' (KHAROSHTHI) */ +const LETag syloScriptTag = 0x73796C6F; /* 'sylo' (SYLOTI_NAGRI) */ +const LETag taluScriptTag = 0x74616C75; /* 'talu' (NEW_TAI_LUE) */ +const LETag tfngScriptTag = 0x74666E67; /* 'tfng' (TIFINAGH) */ +const LETag xpeoScriptTag = 0x7870656F; /* 'xpeo' (OLD_PERSIAN) */ +const LETag baliScriptTag = 0x62616C69; /* 'bali' (BALINESE) */ +const LETag batkScriptTag = 0x6261746B; /* 'batk' (BATK) */ +const LETag blisScriptTag = 0x626C6973; /* 'blis' (BLIS) */ +const LETag brahScriptTag = 0x62726168; /* 'brah' (BRAH) */ +const LETag chamScriptTag = 0x6368616D; /* 'cham' (CHAM) */ +const LETag cirtScriptTag = 0x63697274; /* 'cirt' (CIRT) */ +const LETag cyrsScriptTag = 0x63797273; /* 'cyrs' (CYRS) */ +const LETag egydScriptTag = 0x65677964; /* 'egyd' (EGYD) */ +const LETag egyhScriptTag = 0x65677968; /* 'egyh' (EGYH) */ +const LETag egypScriptTag = 0x65677970; /* 'egyp' (EGYP) */ +const LETag geokScriptTag = 0x67656F6B; /* 'geok' (GEOK) */ +const LETag hansScriptTag = 0x68616E73; /* 'hans' (HANS) */ +const LETag hantScriptTag = 0x68616E74; /* 'hant' (HANT) */ +const LETag hmngScriptTag = 0x686D6E67; /* 'hmng' (HMNG) */ +const LETag hungScriptTag = 0x68756E67; /* 'hung' (HUNG) */ +const LETag indsScriptTag = 0x696E6473; /* 'inds' (INDS) */ +const LETag javaScriptTag = 0x6A617661; /* 'java' (JAVA) */ +const LETag kaliScriptTag = 0x6B616C69; /* 'kali' (KALI) */ +const LETag latfScriptTag = 0x6C617466; /* 'latf' (LATF) */ +const LETag latgScriptTag = 0x6C617467; /* 'latg' (LATG) */ +const LETag lepcScriptTag = 0x6C657063; /* 'lepc' (LEPC) */ +const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINA) */ +const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MAND) */ +const LETag mayaScriptTag = 0x6D617961; /* 'maya' (MAYA) */ +const LETag meroScriptTag = 0x6D65726F; /* 'mero' (MERO) */ +const LETag nkooScriptTag = 0x6E6B6F20; /* 'nko ' (NKO) */ +const LETag orkhScriptTag = 0x6F726B68; /* 'orkh' (ORKH) */ +const LETag permScriptTag = 0x7065726D; /* 'perm' (PERM) */ +const LETag phagScriptTag = 0x70686167; /* 'phag' (PHAGS_PA) */ +const LETag phnxScriptTag = 0x70686E78; /* 'phnx' (PHOENICIAN) */ +const LETag plrdScriptTag = 0x706C7264; /* 'plrd' (PLRD) */ +const LETag roroScriptTag = 0x726F726F; /* 'roro' (RORO) */ +const LETag saraScriptTag = 0x73617261; /* 'sara' (SARA) */ +const LETag syreScriptTag = 0x73797265; /* 'syre' (SYRE) */ +const LETag syrjScriptTag = 0x7379726A; /* 'syrj' (SYRJ) */ +const LETag syrnScriptTag = 0x7379726E; /* 'syrn' (SYRN) */ +const LETag tengScriptTag = 0x74656E67; /* 'teng' (TENG) */ +const LETag vaiiScriptTag = 0x76616920; /* 'vai ' (VAII) */ +const LETag vispScriptTag = 0x76697370; /* 'visp' (VISP) */ +const LETag xsuxScriptTag = 0x78737578; /* 'xsux' (CUNEIFORM) */ +const LETag zxxxScriptTag = 0x7A787878; /* 'zxxx' (ZXXX) */ +const LETag zzzzScriptTag = 0x7A7A7A7A; /* 'zzzz' (UNKNOWN) */ const LETag nullScriptTag = 0x00000000; /* '' (NULL) */ diff --git a/icuSources/layout/ShapingTypeData.cpp b/icuSources/layout/ShapingTypeData.cpp new file mode 100644 index 00000000..5b2aafb3 --- /dev/null +++ b/icuSources/layout/ShapingTypeData.cpp @@ -0,0 +1,85 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved. + * + * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS + * YOU REALLY KNOW WHAT YOU'RE DOING. + * + * Generated on: 07/21/2005 10:31:02 AM PDT + */ + +#include "LETypes.h" +#include "ArabicShaping.h" + +U_NAMESPACE_BEGIN + +const le_uint8 ArabicShaping::shapingTypeTable[] = { + 0x00, 0x02, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05, + 0x04, 0x83, 0x04, 0x86, 0x00, 0x05, 0x04, 0x88, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xB9, + 0x00, 0x05, 0x05, 0xBB, 0x05, 0xBD, 0x00, 0x05, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x05, 0x05, 0xC1, + 0x05, 0xC2, 0x00, 0x05, 0x05, 0xC4, 0x05, 0xC5, 0x00, 0x05, 0x05, 0xC7, 0x05, 0xC7, 0x00, 0x05, + 0x06, 0x10, 0x06, 0x15, 0x00, 0x05, 0x06, 0x22, 0x06, 0x25, 0x00, 0x04, 0x06, 0x26, 0x06, 0x26, + 0x00, 0x02, 0x06, 0x27, 0x06, 0x27, 0x00, 0x04, 0x06, 0x28, 0x06, 0x28, 0x00, 0x02, 0x06, 0x29, + 0x06, 0x29, 0x00, 0x04, 0x06, 0x2A, 0x06, 0x2E, 0x00, 0x02, 0x06, 0x2F, 0x06, 0x32, 0x00, 0x04, + 0x06, 0x33, 0x06, 0x3A, 0x00, 0x02, 0x06, 0x40, 0x06, 0x40, 0x00, 0x01, 0x06, 0x41, 0x06, 0x47, + 0x00, 0x02, 0x06, 0x48, 0x06, 0x48, 0x00, 0x04, 0x06, 0x49, 0x06, 0x4A, 0x00, 0x02, 0x06, 0x4B, + 0x06, 0x5E, 0x00, 0x05, 0x06, 0x6E, 0x06, 0x6F, 0x00, 0x02, 0x06, 0x70, 0x06, 0x70, 0x00, 0x05, + 0x06, 0x71, 0x06, 0x73, 0x00, 0x04, 0x06, 0x75, 0x06, 0x77, 0x00, 0x04, 0x06, 0x78, 0x06, 0x87, + 0x00, 0x02, 0x06, 0x88, 0x06, 0x99, 0x00, 0x04, 0x06, 0x9A, 0x06, 0xBF, 0x00, 0x02, 0x06, 0xC0, + 0x06, 0xC0, 0x00, 0x04, 0x06, 0xC1, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 0x06, 0xCB, 0x00, 0x04, + 0x06, 0xCC, 0x06, 0xCC, 0x00, 0x02, 0x06, 0xCD, 0x06, 0xCD, 0x00, 0x04, 0x06, 0xCE, 0x06, 0xCE, + 0x00, 0x02, 0x06, 0xCF, 0x06, 0xCF, 0x00, 0x04, 0x06, 0xD0, 0x06, 0xD1, 0x00, 0x02, 0x06, 0xD2, + 0x06, 0xD3, 0x00, 0x04, 0x06, 0xD5, 0x06, 0xD5, 0x00, 0x04, 0x06, 0xD6, 0x06, 0xDC, 0x00, 0x05, + 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x05, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x05, 0x06, 0xEA, 0x06, 0xED, + 0x00, 0x05, 0x06, 0xEE, 0x06, 0xEF, 0x00, 0x04, 0x06, 0xFA, 0x06, 0xFC, 0x00, 0x02, 0x06, 0xFF, + 0x06, 0xFF, 0x00, 0x02, 0x07, 0x0F, 0x07, 0x0F, 0x00, 0x05, 0x07, 0x10, 0x07, 0x10, 0x00, 0x04, + 0x07, 0x11, 0x07, 0x11, 0x00, 0x05, 0x07, 0x12, 0x07, 0x14, 0x00, 0x02, 0x07, 0x15, 0x07, 0x19, + 0x00, 0x04, 0x07, 0x1A, 0x07, 0x1D, 0x00, 0x02, 0x07, 0x1E, 0x07, 0x1E, 0x00, 0x04, 0x07, 0x1F, + 0x07, 0x27, 0x00, 0x02, 0x07, 0x28, 0x07, 0x28, 0x00, 0x04, 0x07, 0x29, 0x07, 0x29, 0x00, 0x02, + 0x07, 0x2A, 0x07, 0x2A, 0x00, 0x04, 0x07, 0x2B, 0x07, 0x2B, 0x00, 0x02, 0x07, 0x2C, 0x07, 0x2C, + 0x00, 0x04, 0x07, 0x2D, 0x07, 0x2E, 0x00, 0x02, 0x07, 0x2F, 0x07, 0x2F, 0x00, 0x04, 0x07, 0x30, + 0x07, 0x4A, 0x00, 0x05, 0x07, 0x4D, 0x07, 0x4D, 0x00, 0x04, 0x07, 0x4E, 0x07, 0x58, 0x00, 0x02, + 0x07, 0x59, 0x07, 0x5B, 0x00, 0x04, 0x07, 0x5C, 0x07, 0x6A, 0x00, 0x02, 0x07, 0x6B, 0x07, 0x6C, + 0x00, 0x04, 0x07, 0x6D, 0x07, 0x6D, 0x00, 0x02, 0x07, 0xA6, 0x07, 0xB0, 0x00, 0x05, 0x09, 0x01, + 0x09, 0x02, 0x00, 0x05, 0x09, 0x3C, 0x09, 0x3C, 0x00, 0x05, 0x09, 0x41, 0x09, 0x48, 0x00, 0x05, + 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x05, 0x09, 0x51, 0x09, 0x54, 0x00, 0x05, 0x09, 0x62, 0x09, 0x63, + 0x00, 0x05, 0x09, 0x81, 0x09, 0x81, 0x00, 0x05, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x05, 0x09, 0xC1, + 0x09, 0xC4, 0x00, 0x05, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x05, 0x09, 0xE2, 0x09, 0xE3, 0x00, 0x05, + 0x0A, 0x01, 0x0A, 0x02, 0x00, 0x05, 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x05, 0x0A, 0x41, 0x0A, 0x42, + 0x00, 0x05, 0x0A, 0x47, 0x0A, 0x48, 0x00, 0x05, 0x0A, 0x4B, 0x0A, 0x4D, 0x00, 0x05, 0x0A, 0x70, + 0x0A, 0x71, 0x00, 0x05, 0x0A, 0x81, 0x0A, 0x82, 0x00, 0x05, 0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x05, + 0x0A, 0xC1, 0x0A, 0xC5, 0x00, 0x05, 0x0A, 0xC7, 0x0A, 0xC8, 0x00, 0x05, 0x0A, 0xCD, 0x0A, 0xCD, + 0x00, 0x05, 0x0A, 0xE2, 0x0A, 0xE3, 0x00, 0x05, 0x0B, 0x01, 0x0B, 0x01, 0x00, 0x05, 0x0B, 0x3C, + 0x0B, 0x3C, 0x00, 0x05, 0x0B, 0x3F, 0x0B, 0x3F, 0x00, 0x05, 0x0B, 0x41, 0x0B, 0x43, 0x00, 0x05, + 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x05, 0x0B, 0x56, 0x0B, 0x56, 0x00, 0x05, 0x0B, 0x82, 0x0B, 0x82, + 0x00, 0x05, 0x0B, 0xC0, 0x0B, 0xC0, 0x00, 0x05, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x05, 0x0C, 0x3E, + 0x0C, 0x40, 0x00, 0x05, 0x0C, 0x46, 0x0C, 0x48, 0x00, 0x05, 0x0C, 0x4A, 0x0C, 0x4D, 0x00, 0x05, + 0x0C, 0x55, 0x0C, 0x56, 0x00, 0x05, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x05, 0x0C, 0xBF, 0x0C, 0xBF, + 0x00, 0x05, 0x0C, 0xC6, 0x0C, 0xC6, 0x00, 0x05, 0x0C, 0xCC, 0x0C, 0xCD, 0x00, 0x05, 0x0D, 0x41, + 0x0D, 0x43, 0x00, 0x05, 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x05, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x05, + 0x0D, 0xD2, 0x0D, 0xD4, 0x00, 0x05, 0x0D, 0xD6, 0x0D, 0xD6, 0x00, 0x05, 0x0E, 0x31, 0x0E, 0x31, + 0x00, 0x05, 0x0E, 0x34, 0x0E, 0x3A, 0x00, 0x05, 0x0E, 0x47, 0x0E, 0x4E, 0x00, 0x05, 0x0E, 0xB1, + 0x0E, 0xB1, 0x00, 0x05, 0x0E, 0xB4, 0x0E, 0xB9, 0x00, 0x05, 0x0E, 0xBB, 0x0E, 0xBC, 0x00, 0x05, + 0x0E, 0xC8, 0x0E, 0xCD, 0x00, 0x05, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0x05, 0x0F, 0x35, 0x0F, 0x35, + 0x00, 0x05, 0x0F, 0x37, 0x0F, 0x37, 0x00, 0x05, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0x05, 0x0F, 0x71, + 0x0F, 0x7E, 0x00, 0x05, 0x0F, 0x80, 0x0F, 0x84, 0x00, 0x05, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0x05, + 0x0F, 0x90, 0x0F, 0x97, 0x00, 0x05, 0x0F, 0x99, 0x0F, 0xBC, 0x00, 0x05, 0x0F, 0xC6, 0x0F, 0xC6, + 0x00, 0x05, 0x10, 0x2D, 0x10, 0x30, 0x00, 0x05, 0x10, 0x32, 0x10, 0x32, 0x00, 0x05, 0x10, 0x36, + 0x10, 0x37, 0x00, 0x05, 0x10, 0x39, 0x10, 0x39, 0x00, 0x05, 0x10, 0x58, 0x10, 0x59, 0x00, 0x05, + 0x13, 0x5F, 0x13, 0x5F, 0x00, 0x05, 0x17, 0x12, 0x17, 0x14, 0x00, 0x05, 0x17, 0x32, 0x17, 0x34, + 0x00, 0x05, 0x17, 0x52, 0x17, 0x53, 0x00, 0x05, 0x17, 0x72, 0x17, 0x73, 0x00, 0x05, 0x17, 0xB4, + 0x17, 0xB5, 0x00, 0x05, 0x17, 0xB7, 0x17, 0xBD, 0x00, 0x05, 0x17, 0xC6, 0x17, 0xC6, 0x00, 0x05, + 0x17, 0xC9, 0x17, 0xD3, 0x00, 0x05, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0x05, 0x18, 0x0B, 0x18, 0x0D, + 0x00, 0x05, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0x05, 0x19, 0x20, 0x19, 0x22, 0x00, 0x05, 0x19, 0x27, + 0x19, 0x28, 0x00, 0x05, 0x19, 0x32, 0x19, 0x32, 0x00, 0x05, 0x19, 0x39, 0x19, 0x3B, 0x00, 0x05, + 0x1A, 0x17, 0x1A, 0x18, 0x00, 0x05, 0x1D, 0xC0, 0x1D, 0xC3, 0x00, 0x05, 0x20, 0x0B, 0x20, 0x0B, + 0x00, 0x05, 0x20, 0x0D, 0x20, 0x0D, 0x00, 0x01, 0x20, 0x0E, 0x20, 0x0F, 0x00, 0x05, 0x20, 0x2A, + 0x20, 0x2E, 0x00, 0x05, 0x20, 0x60, 0x20, 0x63, 0x00, 0x05, 0x20, 0x6A, 0x20, 0x6F, 0x00, 0x05, + 0x20, 0xD0, 0x20, 0xEB, 0x00, 0x05, 0x30, 0x2A, 0x30, 0x2F, 0x00, 0x05, 0x30, 0x99, 0x30, 0x9A, + 0x00, 0x05, 0xA8, 0x06, 0xA8, 0x06, 0x00, 0x05, 0xA8, 0x0B, 0xA8, 0x0B, 0x00, 0x05, 0xA8, 0x25, + 0xA8, 0x26, 0x00, 0x05, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x05, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x05, + 0xFE, 0x20, 0xFE, 0x23, 0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB, + 0x00, 0x05 +}; + +U_NAMESPACE_END diff --git a/icuSources/layout/SinglePositioningSubtables.cpp b/icuSources/layout/SinglePositioningSubtables.cpp index 42b6b44a..e8759d21 100644 --- a/icuSources/layout/SinglePositioningSubtables.cpp +++ b/icuSources/layout/SinglePositioningSubtables.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -11,7 +11,6 @@ #include "SinglePositioningSubtables.h" #include "ValueRecords.h" #include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" #include "LESwaps.h" U_NAMESPACE_BEGIN @@ -48,13 +47,7 @@ le_uint32 SinglePositioningFormat1Subtable::process(GlyphIterator *glyphIterator le_int32 coverageIndex = getGlyphCoverage(glyph); if (coverageIndex >= 0) { - GlyphPositionAdjustment adjustment; - - glyphIterator->getCurrGlyphPositionAdjustment(adjustment); - - valueRecord.adjustPosition(SWAPW(valueFormat), (const char *) this, adjustment, fontInstance); - - glyphIterator->setCurrGlyphPositionAdjustment(&adjustment); + valueRecord.adjustPosition(SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance); return 1; } @@ -68,13 +61,7 @@ le_uint32 SinglePositioningFormat2Subtable::process(GlyphIterator *glyphIterator le_int16 coverageIndex = (le_int16) getGlyphCoverage(glyph); if (coverageIndex >= 0) { - GlyphPositionAdjustment adjustment; - - glyphIterator->getCurrGlyphPositionAdjustment(adjustment); - - valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this, adjustment, fontInstance); - - glyphIterator->setCurrGlyphPositionAdjustment(&adjustment); + valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance); return 1; } diff --git a/icuSources/layout/ThaiLayoutEngine.cpp b/icuSources/layout/ThaiLayoutEngine.cpp index ee7504e8..38f8a327 100644 --- a/icuSources/layout/ThaiLayoutEngine.cpp +++ b/icuSources/layout/ThaiLayoutEngine.cpp @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -17,8 +17,8 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine) -ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode) - : LayoutEngine(fontInstance, scriptCode, languageCode) +ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) + : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) { fErrorChar = 0x25CC; @@ -83,7 +83,7 @@ le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offse } glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, glyphStorage); - mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, glyphStorage, success); + mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, TRUE, glyphStorage, success); LE_DELETE_ARRAY(outChars); diff --git a/icuSources/layout/ThaiLayoutEngine.h b/icuSources/layout/ThaiLayoutEngine.h index 1d72679d..aad7addf 100644 --- a/icuSources/layout/ThaiLayoutEngine.h +++ b/icuSources/layout/ThaiLayoutEngine.h @@ -1,7 +1,7 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -43,7 +43,7 @@ public: * * @internal */ - ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags); /** * The destructor, virtual for correct polymorphic invocation. diff --git a/icuSources/layout/ThaiShaping.h b/icuSources/layout/ThaiShaping.h index da854ccd..4c6d6a51 100644 --- a/icuSources/layout/ThaiShaping.h +++ b/icuSources/layout/ThaiShaping.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -77,7 +77,8 @@ private: static const le_uint8 classTable[]; static const StateTransition thaiStateTable[][classCount]; - static StateTransition getTransition(le_uint8 state, le_uint8 currClass); + inline static StateTransition getTransition(le_uint8 state, le_uint8 currClass); + static le_uint8 doTransition(StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex); diff --git a/icuSources/layout/TibetanLayoutEngine.cpp b/icuSources/layout/TibetanLayoutEngine.cpp new file mode 100644 index 00000000..be97ab5b --- /dev/null +++ b/icuSources/layout/TibetanLayoutEngine.cpp @@ -0,0 +1,87 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + * Developed at DIT - Government of Bhutan + * + * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> + * + * This file is a modification of the ICU file KhmerReordering.cpp + * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan + * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding. + * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola + * + */ + + +#include "OpenTypeLayoutEngine.h" +#include "TibetanLayoutEngine.h" +#include "LEGlyphStorage.h" +#include "TibetanReordering.h" + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TibetanOpenTypeLayoutEngine) + +TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) +{ + fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; +} + +TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) +{ + fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; +} + +TibetanOpenTypeLayoutEngine::~TibetanOpenTypeLayoutEngine() +{ + // nothing to do +} + +// Input: characters +// Output: characters, char indices, tags +// Returns: output character count +le_int32 TibetanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) +{ + if (LE_FAILURE(success)) { + return 0; + } + + if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) { + success = LE_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + le_int32 worstCase = count * 3; // worst case is 3 for Khmer TODO check if 2 is enough + + outChars = LE_NEW_ARRAY(LEUnicode, worstCase); + + if (outChars == NULL) { + success = LE_MEMORY_ALLOCATION_ERROR; + return 0; + } + + glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success); + glyphStorage.allocateAuxData(success); + + if (LE_FAILURE(success)) { + LE_DELETE_ARRAY(outChars); + return 0; + } + + // NOTE: assumes this allocates featureTags... + // (probably better than doing the worst case stuff here...) + le_int32 outCharCount = TibetanReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage); + + glyphStorage.adoptGlyphCount(outCharCount); + return outCharCount; +} + +U_NAMESPACE_END diff --git a/icuSources/layout/TibetanLayoutEngine.h b/icuSources/layout/TibetanLayoutEngine.h new file mode 100644 index 00000000..9deb4f02 --- /dev/null +++ b/icuSources/layout/TibetanLayoutEngine.h @@ -0,0 +1,129 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + * Developed at DIT - Government of Bhutan + * + * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> + * + * This file is a modification of the ICU file KhmerReordering.cpp + * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan + * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding. + * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola + * + */ + +#ifndef __TIBETANLAYOUTENGINE_H +#define __TIBETANLAYOUTENGINE_H + +// #include "LETypes.h" +// #include "LEFontInstance.h" +// #include "LEGlyphFilter.h" +// #include "LayoutEngine.h" +// #include "OpenTypeLayoutEngine.h" + +// #include "GlyphSubstitutionTables.h" +// #include "GlyphDefinitionTables.h" +// #include "GlyphPositioningTables.h" + +U_NAMESPACE_BEGIN + +// class MPreFixups; +// class LEGlyphStorage; + +/** + * This class implements OpenType layout for Dzongkha and Tibetan OpenType fonts + * + * @internal + */ +class TibetanOpenTypeLayoutEngine : public OpenTypeLayoutEngine +{ +public: + /** + * This is the main constructor. It constructs an instance of TibetanOpenTypeLayoutEngine for + * a particular font, script and language. It takes the GSUB table as a parameter since + * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an + * Tibetan OpenType font. + * + * @param fontInstance - the font + * @param scriptCode - the script + * @param langaugeCode - the language + * @param gsubTable - the GSUB table + * + * @see LayoutEngine::layoutEngineFactory + * @see OpenTypeLayoutEngine + * @see ScriptAndLangaugeTags.h for script and language codes + * + * @internal + */ + TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); + + /** + * This constructor is used when the font requires a "canned" GSUB table which can't be known + * until after this constructor has been invoked. + * + * @param fontInstance - the font + * @param scriptCode - the script + * @param langaugeCode - the language + * + * @see OpenTypeLayoutEngine + * @see ScriptAndLangaugeTags.h for script and language codes + * + * @internal + */ + TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags); + + /** + * The destructor, virtual for correct polymorphic invocation. + * + * @internal + */ + virtual ~TibetanOpenTypeLayoutEngine(); + + /** + * ICU "poor man's RTTI", returns a UClassID for the actual class. + * + * @draft ICU 3.6 + */ + virtual UClassID getDynamicClassID() const; + + /** + * ICU "poor man's RTTI", returns a UClassID for this class. + * + * @draft ICU 3.6 + */ + static UClassID getStaticClassID(); + +protected: + + /** + * This method does Tibetan OpenType character processing. It assigns the OpenType feature + * tags to the characters, and may generate output characters which have been reordered. + * It may also split some vowels, resulting in more output characters than input characters. + * + * Input parameters: + * @param chars - the input character context + * @param offset - the index of the first character to process + * @param count - the number of characters to process + * @param max - the number of characters in the input context + * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run + * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set. + * the auxillary data array will be set to the feature tags. + * + * Output parameters: + * @param success - set to an error code if the operation fails + * + * @return the output character count + * + * @internal + */ + virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, + LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success); + +}; + +U_NAMESPACE_END +#endif + diff --git a/icuSources/layout/TibetanReordering.cpp b/icuSources/layout/TibetanReordering.cpp new file mode 100644 index 00000000..1ddcbfed --- /dev/null +++ b/icuSources/layout/TibetanReordering.cpp @@ -0,0 +1,381 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved + * + * Developed at DIT - Government of Bhutan + * + * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> + * + * This file is a modification of the ICU file KhmerReordering.cpp + * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan + * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding. + * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola + * + */ + +//#include <stdio.h> +#include "LETypes.h" +#include "OpenTypeTables.h" +#include "TibetanReordering.h" +#include "LEGlyphStorage.h" + + +U_NAMESPACE_BEGIN + +// Characters that get refered to by name... +enum +{ + C_DOTTED_CIRCLE = 0x25CC, + C_PRE_NUMBER_MARK = 0x0F3F + }; + + +enum +{ + // simple classes, they are used in the statetable (in this file) to control the length of a syllable + // they are also used to know where a character should be placed (location in reference to the base character) + // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to + // indicate error in syllable construction + _xx = TibetanClassTable::CC_RESERVED, + _ba = TibetanClassTable::CC_BASE, + _sj = TibetanClassTable::CC_SUBJOINED | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, + _tp = TibetanClassTable::CC_TSA_PHRU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE, + _ac = TibetanClassTable::CC_A_CHUNG | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, + _cs = TibetanClassTable::CC_COMP_SANSKRIT | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, + _ha = TibetanClassTable::CC_HALANTA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, + _bv = TibetanClassTable::CC_BELOW_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, + _av = TibetanClassTable::CC_ABOVE_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE, + _an = TibetanClassTable::CC_ANUSVARA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE, + _cb = TibetanClassTable::CC_CANDRABINDU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE, + _vs = TibetanClassTable::CC_VISARGA | TibetanClassTable::CF_DOTTED_CIRCLE| TibetanClassTable::CF_POS_AFTER, + _as = TibetanClassTable::CC_ABOVE_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE, + _bs = TibetanClassTable::CC_BELOW_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, + _di = TibetanClassTable::CC_DIGIT | TibetanClassTable::CF_DIGIT, + _pd = TibetanClassTable::CC_PRE_DIGIT_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_PREDIGIT | TibetanClassTable::CF_POS_BEFORE , + _bd = TibetanClassTable::CC_POST_BELOW_DIGIT_M | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_AFTER +}; + + +// Character class tables +//_xx Non Combining characters +//_ba Base Consonants +//_sj Subjoined consonants +//_tp Tsa - phru +//_ac A-chung, Vowel Lengthening mark +//_cs Precomposed Sanskrit vowel + subjoined consonants +//_ha Halanta/Virama +//_bv Below vowel +//_av above vowel +//_an Anusvara +//_cb Candrabindu +//_vs Visaraga/Post mark +//_as Upper Stress marks +//_bs Lower Stress marks +//_di Digit +//_pd Number pre combining, Needs reordering +//_bd Other number combining marks + +static const TibetanClassTable::CharClass tibetanCharClasses[] = +{ + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + _xx, _ba, _xx, _xx, _ba, _ba, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0F00 - 0F0F 0 + _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _bd, _bd, _xx, _xx, _xx, _xx, _xx, _xx, // 0F10 - 0F1F 1 + _di, _di, _di, _di, _di, _di, _di, _di, _di, _di, _xx, _xx, _xx, _xx, _xx, _xx, // 0F20 - 0F2F 2 + _xx, _xx, _xx, _xx, _xx, _bs, _xx, _bs, _xx, _tp, _xx, _xx, _xx, _xx, _bd, _pd, // 0F30 - 0F3F 3 + _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F40 - 0F4F 4 + _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F50 - 0F5F 5 + _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, _xx, // 0F60 - 0F6F 6 + _xx, _ac, _av, _cs, _bv, _bv, _cs, _cs, _cs, _cs, _av, _av, _av, _av, _an, _vs, // 0F70 - 0F7F 7 + _av, _cs, _cb, _cb, _ha, _xx, _as, _as, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, // 0F80 - 0F8F 8 + _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0F90 - 0F9F 9 + _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0FA0 - 0FAF a + _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, // 0FB0 - 0FBF b + _xx, _xx, _xx, _xx, _xx, _xx, _bs, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FC0 - 0FCF c + _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx,// 0FD0 - 0FDF d + _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FE0 - 0FEF e + _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FF0 - 0FFF f +}; + + +// +// Tibetan Class Tables +// + +// +// The range of characters defined in the above table is defined here. For Tibetan 0F00 to 0FFF +// Even if the Tibetan range is bigger, most of the characters are not combinable, and therefore treated +// as _xx +static const TibetanClassTable tibetanClassTable = {0x0F00, 0x0FFF, tibetanCharClasses}; + + +// Below we define how a character in the input string is either in the tibetanCharClasses table +// (in which case we get its type back), or an unknown object in which case we get _xx (CC_RESERVED) back +TibetanClassTable::CharClass TibetanClassTable::getCharClass(LEUnicode ch) const +{ + if (ch < firstChar || ch > lastChar) { + return CC_RESERVED; + } + + return classTable[ch - firstChar]; +} + +const TibetanClassTable *TibetanClassTable::getTibetanClassTable() +{ + return &tibetanClassTable; +} + + + +class TibetanReorderingOutput : public UMemory { +private: + le_int32 fOutIndex; + LEUnicode *fOutChars; + + LEGlyphStorage &fGlyphStorage; + + +public: + TibetanReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage) + : fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage) + { + // nothing else to do... + } + + ~TibetanReorderingOutput() + { + // nothing to do here... + } + + void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask featureMask) + { + LEErrorCode success = LE_NO_ERROR; + + fOutChars[fOutIndex] = ch; + + fGlyphStorage.setCharIndex(fOutIndex, charIndex, success); + fGlyphStorage.setAuxData(fOutIndex, featureMask, success); + + fOutIndex += 1; + } + + le_int32 getOutputIndex() + { + return fOutIndex; + } +}; + + +//TODO remove unused flags +#define ccmpFeatureTag LE_CCMP_FEATURE_TAG +#define blwfFeatureTag LE_BLWF_FEATURE_TAG +#define pstfFeatureTag LE_PSTF_FEATURE_TAG +#define presFeatureTag LE_PRES_FEATURE_TAG +#define blwsFeatureTag LE_BLWS_FEATURE_TAG +#define abvsFeatureTag LE_ABVS_FEATURE_TAG +#define pstsFeatureTag LE_PSTS_FEATURE_TAG + +#define blwmFeatureTag LE_BLWM_FEATURE_TAG +#define abvmFeatureTag LE_ABVM_FEATURE_TAG +#define distFeatureTag LE_DIST_FEATURE_TAG + +#define prefFeatureTag LE_PREF_FEATURE_TAG +#define abvfFeatureTag LE_ABVF_FEATURE_TAG +#define cligFeatureTag LE_CLIG_FEATURE_TAG +#define mkmkFeatureTag LE_MKMK_FEATURE_TAG + +// Shaping features +#define prefFeatureMask 0x80000000UL +#define blwfFeatureMask 0x40000000UL +#define abvfFeatureMask 0x20000000UL +#define pstfFeatureMask 0x10000000UL +#define presFeatureMask 0x08000000UL +#define blwsFeatureMask 0x04000000UL +#define abvsFeatureMask 0x02000000UL +#define pstsFeatureMask 0x01000000UL +#define cligFeatureMask 0x00800000UL +#define ccmpFeatureMask 0x00040000UL + +// Positioning features +#define distFeatureMask 0x00400000UL +#define blwmFeatureMask 0x00200000UL +#define abvmFeatureMask 0x00100000UL +#define mkmkFeatureMask 0x00080000UL + +#define tagPref (ccmpFeatureMask | prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask) +#define tagAbvf (ccmpFeatureMask | abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask) +#define tagPstf (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask) +#define tagBlwf (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask) +#define tagDefault (ccmpFeatureMask | prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask) + + + +// These are in the order in which the features need to be applied +// for correct processing +static const FeatureMap featureMap[] = +{ + // Shaping features + {ccmpFeatureTag, ccmpFeatureMask}, + {prefFeatureTag, prefFeatureMask}, + {blwfFeatureTag, blwfFeatureMask}, + {abvfFeatureTag, abvfFeatureMask}, + {pstfFeatureTag, pstfFeatureMask}, + {presFeatureTag, presFeatureMask}, + {blwsFeatureTag, blwsFeatureMask}, + {abvsFeatureTag, abvsFeatureMask}, + {pstsFeatureTag, pstsFeatureMask}, + {cligFeatureTag, cligFeatureMask}, + + // Positioning features + {distFeatureTag, distFeatureMask}, + {blwmFeatureTag, blwmFeatureMask}, + {abvmFeatureTag, abvmFeatureMask}, + {mkmkFeatureTag, mkmkFeatureMask}, +}; + +static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap); + +// The stateTable is used to calculate the end (the length) of a well +// formed Tibetan Syllable. +// +// Each horizontal line is ordered exactly the same way as the values in TibetanClassTable +// CharClassValues in TibetanReordering.h This coincidence of values allows the +// follow up of the table. +// +// Each line corresponds to a state, which does not necessarily need to be a type +// of component... for example, state 2 is a base, with is always a first character +// in the syllable, but the state could be produced a consonant of any type when +// it is the first character that is analysed (in ground state). +// +static const le_int8 tibetanStateTable[][TibetanClassTable::CC_COUNT] = +{ + + + //Dzongkha state table + //xx ba sj tp ac cs ha bv av an cb vs as bs di pd bd + { 1, 2, 4, 3, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, 20, 21, 21,}, // 0 - ground state + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 1 - exit state (or sign to the right of the syllable) + {-1, -1, 4, 3, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 2 - Base consonant + {-1, -1, 5, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 3 - Tsa phru after base + {-1, -1, 4, 6, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 4 - Subjoined consonant after base + {-1, -1, 5, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 5 - Subjoined consonant after tsa phru + {-1, -1, -1, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 6 - Tsa phru after subjoined consonant + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 7 - Pre Composed Sanskrit + {-1, -1, -1, -1, -1, -1, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 8 - A-chung + {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, -1, 19, 19, -1, -1, -1,}, // 9 - Halanta + {-1, -1, -1, -1, -1, -1, -1, 11, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 10 - below vowel 1 + {-1, -1, -1, -1, -1, -1, -1, 12, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 11 - below vowel 2 + {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 12 - below vowel 3 + {-1, -1, -1, -1, -1, -1, -1, -1, 14, 17, 17, 18, 19, 19, -1, -1, -1,}, // 13 - Anusvara before vowel + {-1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 17, 18, 19, 19, -1, -1, -1,}, // 14 - above vowel 1 + {-1, -1, -1, -1, -1, -1, -1, -1, 16, 17, 17, 18, 19, 19, -1, -1, -1,}, // 15 - above vowel 2 + {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 18, 19, 19, -1, -1, -1,}, // 16 - above vowel 3 + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, 19, -1, -1, -1,}, // 17 - Anusvara or Candrabindu after vowel + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 18 - Visarga + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 19 - strss mark + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21,}, // 20 - digit + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 21 - digit mark + + +}; + + +const FeatureMap *TibetanReordering::getFeatureMap(le_int32 &count) +{ + count = featureMapCount; + + return featureMap; +} + + +// Given an input string of characters and a location in which to start looking +// calculate, using the state table, which one is the last character of the syllable +// that starts in the starting position. +le_int32 TibetanReordering::findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount) +{ + le_int32 cursor = prev; + le_int8 state = 0; + + while (cursor < charCount) { + TibetanClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & TibetanClassTable::CF_CLASS_MASK); + + state = tibetanStateTable[state][charClass]; + + if (state < 0) { + break; + } + + cursor += 1; + } + + return cursor; +} + + +// This is the real reordering function as applied to the Tibetan language + +le_int32 TibetanReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32, + LEUnicode *outChars, LEGlyphStorage &glyphStorage) +{ + const TibetanClassTable *classTable = TibetanClassTable::getTibetanClassTable(); + + TibetanReorderingOutput output(outChars, glyphStorage); + TibetanClassTable::CharClass charClass; + le_int32 i, prev = 0; + + // This loop only exits when we reach the end of a run, which may contain + // several syllables. + while (prev < charCount) { + le_int32 syllable = findSyllable(classTable, chars, prev, charCount); + + // shall we add a dotted circle? + // If in the position in which the base should be (first char in the string) there is + // a character that has the Dotted circle flag (a character that cannot be a base) + // then write a dotted circle + if (classTable->getCharClass(chars[prev]) & TibetanClassTable::CF_DOTTED_CIRCLE) { + output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault); + } + + // copy the rest to output, inverting the pre-number mark if present after a digit. + for (i = prev; i < syllable; i += 1) { + charClass = classTable->getCharClass(chars[i]); + + if ((TibetanClassTable::CF_DIGIT & charClass) + && ( classTable->getCharClass(chars[i+1]) & TibetanClassTable::CF_PREDIGIT)) + { + output.writeChar(C_PRE_NUMBER_MARK, i, tagPref); + output.writeChar(chars[i], i+1 , tagPref); + i += 1; + } else { + switch (charClass & TibetanClassTable::CF_POS_MASK) { + + // If the present character is a number, and the next character is a pre-number combining mark + // then the two characters are reordered + + case TibetanClassTable::CF_POS_ABOVE : + output.writeChar(chars[i], i, tagAbvf); + break; + + case TibetanClassTable::CF_POS_AFTER : + output.writeChar(chars[i], i, tagPstf); + break; + + case TibetanClassTable::CF_POS_BELOW : + output.writeChar(chars[i], i, tagBlwf); + break; + + default: + // default - any other characters + output.writeChar(chars[i], i, tagDefault); + break; + } // switch + } // if + } // for + + prev = syllable; // move the pointer to the start of next syllable + } + + return output.getOutputIndex(); +} + + +U_NAMESPACE_END diff --git a/icuSources/layout/TibetanReordering.h b/icuSources/layout/TibetanReordering.h new file mode 100644 index 00000000..cafcf564 --- /dev/null +++ b/icuSources/layout/TibetanReordering.h @@ -0,0 +1,151 @@ +/* + * + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved + * + * Developed at DIT - Government of Bhutan + * + * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> + * + * This file is a modification of the ICU file KhmerReordering.h + * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan + * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding. + * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola + * + */ + +#ifndef __TIBETANREORDERING_H +#define __TIBETANORDERING_H + +/** + * \file + * \internal + */ + +// #include "LETypes.h" +// #include "OpenTypeTables.h" + +U_NAMESPACE_BEGIN + +class LEGlyphStorage; + +// Vocabulary +// Base -> A consonant in its full (not subscript) form. It is the +// center of the syllable, it can be souranded by subjoined consonants, vowels, +// signs... but there is only one base in a stack, it has to be coded as +// the first character of the syllable.Included here are also groups of base + subjoined +// which are represented by one single code point in unicode (e.g. 0F43) Also other characters that might take +// subjoined consonants or other combining characters. +// Subjoined -> Subjoined consonants and groups of subjoined consonants which have a single code-point +// to repersent the group (even if each subjoined consonant is represented independently +// by anothe code-point +// Tsa Phru --> Tsa Phru character, Bhutanese people will always place it right after the base, but sometimes, due to +// "normalization" +// is placed after all the subjoined consonants, and it is also permitted there. +// A Chung Vowel lengthening mark --> . 0F71 It is placed after the base and any subjoined consonants but before any vowels +// Precomposed Sanskrit vowels --> The are combinations of subjoined consonants + vowels that have been assigned +// a given code-point (in spite of each single part of them having also a code-point +// They are avoided, and users are encouraged to use the combination of code-points that +// represents the same sound instead of using this combined characters. This is included here +// for compatibility with possible texts that use them (they are not in the Dzongkha keyboard). +// Halanta -> The Halanta or Virama character 0F84 indicates that a consonant should not use its inheernt vowel, +// in spite of not having other vowels present. It is usually placed immediatly after a base consonant, +// but in some special cases it can also be placed after a subjoined consonant, so this is also +// permitted in this algorithm. (Halanta is always displayed in Tibetan not used as a connecting char) +// +// Subjoined vowels -> Dependent vowels (matras) placed below the base and below all subjoined consonants. There +// might be as much as three subjoined vowels in a given stack (only one in general text, but up +// to three for abreviations, they have to be permitted). +// Superscript vowels -> There are three superscript vowels, and they can be repeated or combined (up to three +// times. They can combine with subjoined vowels, and are always coded after these. +// Anusvara --> Nasalisation sign. Traditioinally placed in absence of vowels, but also after vowels. In some +// special cases it can be placed before a vowel, so this is also permitted +// Candrabindu -> Forms of the Anusvara with different glyphs (and different in identity) which can be placed +// without vowel or after the vowel, but never before. Cannot combine with Anusvara. +// Stress marks -> Marks placed above or below a syllable, affecting the whole syllable. They are combining +// marks, so they have to be attached to a specific stack. The are using to emphasise a syllable. +// +// Digits -> Digits are not considered as non-combining characters because there are a few characters which +// combine with them, so they have to be considered independently. +// Digit combining marks -> dependent marks that combine with digits. +// +// TODO +// There are a number of characters in the CJK block that are used in Tibetan script, two of these are symbols +// are used as bases for combining glyphs, and have not been encoded in Tibetan. As these characters are outside +// of the tibetan block, they have not been treated in this program. + + +struct TibetanClassTable // This list must include all types of components that can be used inside a syllable +{ + enum CharClassValues // order is important here! This order must be the same that is found in each horizontal + // line in the statetable for Tibetan (file TibetanReordering.cpp). It assigns one number + // to each type of character that has to be considered when analysing the order in which + // characters can be placed + { + CC_RESERVED = 0, //Non Combining Characters + CC_BASE = 1, // Base Consonants, Base Consonants with Subjoined attached in code point, Sanskrit base marks + CC_SUBJOINED = 2, // Subjoined Consonats, combination of more than Subjoined Consonants in the code point + CC_TSA_PHRU = 3, // Tsa-Phru character 0F39 + CC_A_CHUNG = 4, // Vowel Lenthening a-chung mark 0F71 + CC_COMP_SANSKRIT = 5, // Precomposed Sanskrit vowels including Subjoined characters and vowels + CC_HALANTA = 6, // Halanta Character 0F84 + CC_BELOW_VOWEL = 7, // Subjoined vowels + CC_ABOVE_VOWEL = 8, // Superscript vowels + CC_ANUSVARA = 9, // Tibetan sign Rjes Su Nga Ro 0F7E + CC_CANDRABINDU = 10, // Tibetan sign Sna Ldan and Nyi Zla Naa Da 0F82, 0F83 + CC_VISARGA = 11, // Tibetan sign Rnam Bcad (0F7F) + CC_ABOVE_S_MARK = 12, // Stress Marks placed above the text + CC_BELOW_S_MARK = 13, // Stress Marks placed below the text + CC_DIGIT = 14, // Dzongkha Digits + CC_PRE_DIGIT_MARK = 15, // Mark placed before the digit + CC_POST_BELOW_DIGIT_M = 16, // Mark placed below or after the digit + CC_COUNT = 17 // This is the number of character classes + }; + + enum CharClassFlags + { + CF_CLASS_MASK = 0x0000FFFF, + + CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with this flag is the first in a syllable + CF_DIGIT = 0x01000000, // flag to speed up comparaisson + CF_PREDIGIT = 0x02000000, // flag to detect pre-digit marks for reordering + + // position flags + CF_POS_BEFORE = 0x00080000, + CF_POS_BELOW = 0x00040000, + CF_POS_ABOVE = 0x00020000, + CF_POS_AFTER = 0x00010000, + CF_POS_MASK = 0x000f0000 + }; + + typedef le_uint32 CharClass; + + typedef le_int32 ScriptFlags; + + LEUnicode firstChar; // for Tibetan this will become xOF00 + LEUnicode lastChar; // and this x0FFF + const CharClass *classTable; + + CharClass getCharClass(LEUnicode ch) const; + + static const TibetanClassTable *getTibetanClassTable(); +}; + + +class TibetanReordering /* not : public UObject because all methods are static */ { +public: + static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode, + LEUnicode *outChars, LEGlyphStorage &glyphStorage); + + static const FeatureMap *getFeatureMap(le_int32 &count); + +private: + // do not instantiate + TibetanReordering(); + + static le_int32 findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount); + +}; + + +U_NAMESPACE_END +#endif diff --git a/icuSources/layout/ValueRecords.cpp b/icuSources/layout/ValueRecords.cpp index 4a42c91a..6731ea4b 100644 --- a/icuSources/layout/ValueRecords.cpp +++ b/icuSources/layout/ValueRecords.cpp @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -10,7 +10,6 @@ #include "ValueRecords.h" #include "DeviceTables.h" #include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" #include "LESwaps.h" U_NAMESPACE_BEGIN @@ -35,17 +34,22 @@ le_int16 ValueRecord::getFieldValue(le_int16 index, ValueFormat valueFormat, Val return SWAPW(value); } -void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, GlyphPositionAdjustment &positionAdjustment, +void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, const LEFontInstance *fontInstance) const { + float xPlacementAdjustment = 0; + float yPlacementAdjustment = 0; + float xAdvanceAdjustment = 0; + float yAdvanceAdjustment = 0; + if ((valueFormat & vfbXPlacement) != 0) { le_int16 value = getFieldValue(valueFormat, vrfXPlacement); LEPoint pixels; fontInstance->transformFunits(value, 0, pixels); - positionAdjustment.adjustXPlacement(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYPlacement(fontInstance->yPixelsToUnits(pixels.fY)); + xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } if ((valueFormat & vfbYPlacement) != 0) { @@ -54,8 +58,8 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp fontInstance->transformFunits(0, value, pixels); - positionAdjustment.adjustXPlacement(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYPlacement(fontInstance->yPixelsToUnits(pixels.fY)); + xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } if ((valueFormat & vfbXAdvance) != 0) { @@ -64,8 +68,8 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp fontInstance->transformFunits(value, 0, pixels); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(pixels.fY)); + xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } if ((valueFormat & vfbYAdvance) != 0) { @@ -74,8 +78,8 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp fontInstance->transformFunits(0, value, pixels); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(pixels.fY)); + xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } // FIXME: The device adjustments should really be transformed, but @@ -92,7 +96,7 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 xAdj = dt->getAdjustment(xppem); - positionAdjustment.adjustXPlacement(fontInstance->xPixelsToUnits(xAdj)); + xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj); } } @@ -103,7 +107,7 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 yAdj = dt->getAdjustment(yppem); - positionAdjustment.adjustYPlacement(fontInstance->yPixelsToUnits(yAdj)); + yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj); } } @@ -114,7 +118,7 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 xAdj = dt->getAdjustment(xppem); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(xAdj)); + xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj); } } @@ -125,23 +129,31 @@ void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, Glyp const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 yAdj = dt->getAdjustment(yppem); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(yAdj)); + yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj); } } } + + glyphIterator.adjustCurrGlyphPositionAdjustment( + xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment); } -void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphPositionAdjustment &positionAdjustment, +void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, const LEFontInstance *fontInstance) const { + float xPlacementAdjustment = 0; + float yPlacementAdjustment = 0; + float xAdvanceAdjustment = 0; + float yAdvanceAdjustment = 0; + if ((valueFormat & vfbXPlacement) != 0) { le_int16 value = getFieldValue(index, valueFormat, vrfXPlacement); LEPoint pixels; fontInstance->transformFunits(value, 0, pixels); - positionAdjustment.adjustXPlacement(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYPlacement(fontInstance->yPixelsToUnits(pixels.fY)); + xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } if ((valueFormat & vfbYPlacement) != 0) { @@ -150,8 +162,8 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const fontInstance->transformFunits(0, value, pixels); - positionAdjustment.adjustXPlacement(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYPlacement(fontInstance->yPixelsToUnits(pixels.fY)); + xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } if ((valueFormat & vfbXAdvance) != 0) { @@ -160,8 +172,8 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const fontInstance->transformFunits(value, 0, pixels); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(pixels.fY)); + xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } if ((valueFormat & vfbYAdvance) != 0) { @@ -170,8 +182,8 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const fontInstance->transformFunits(0, value, pixels); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(pixels.fX)); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(pixels.fY)); + xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX); + yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY); } // FIXME: The device adjustments should really be transformed, but @@ -188,7 +200,7 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 xAdj = dt->getAdjustment(xppem); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(xAdj)); + xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj); } } @@ -199,7 +211,7 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 yAdj = dt->getAdjustment(yppem); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(yAdj)); + yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj); } } @@ -210,7 +222,7 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 xAdj = dt->getAdjustment(xppem); - positionAdjustment.adjustXAdvance(fontInstance->xPixelsToUnits(xAdj)); + xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj); } } @@ -221,10 +233,13 @@ void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const const DeviceTable *dt = (const DeviceTable *) (base + dtOffset); le_int16 yAdj = dt->getAdjustment(yppem); - positionAdjustment.adjustYAdvance(fontInstance->yPixelsToUnits(yAdj)); + yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj); } } } + + glyphIterator.adjustCurrGlyphPositionAdjustment( + xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment); } le_int16 ValueRecord::getSize(ValueFormat valueFormat) diff --git a/icuSources/layout/ValueRecords.h b/icuSources/layout/ValueRecords.h index c68d7cc7..83db7b31 100644 --- a/icuSources/layout/ValueRecords.h +++ b/icuSources/layout/ValueRecords.h @@ -1,6 +1,6 @@ /* * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -16,7 +16,6 @@ #include "LEFontInstance.h" #include "OpenTypeTables.h" #include "GlyphIterator.h" -#include "GlyphPositionAdjustments.h" U_NAMESPACE_BEGIN @@ -29,9 +28,9 @@ struct ValueRecord le_int16 getFieldValue(ValueFormat valueFormat, ValueRecordField field) const; le_int16 getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const; - void adjustPosition(ValueFormat valueFormat, const char *base, GlyphPositionAdjustment &positionAdjustment, + void adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, const LEFontInstance *fontInstance) const; - void adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphPositionAdjustment &positionAdjustment, + void adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, const LEFontInstance *fontInstance) const; static le_int16 getSize(ValueFormat valueFormat); diff --git a/icuSources/layout/layout.dsp b/icuSources/layout/layout.dsp deleted file mode 100644 index 78c462d3..00000000 --- a/icuSources/layout/layout.dsp +++ /dev/null @@ -1,1175 +0,0 @@ -# Microsoft Developer Studio Project File - Name="layout" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=layout - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "layout.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "layout.mak" CFG="layout - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "layout - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "layout - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "layout - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "layout - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "layout - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\include" /I "..\common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /D "U_LAYOUT_IMPLEMENTATION" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 ..\..\lib\icuuc.lib /nologo /dll /machine:I386 /out:"..\..\bin\icule32.dll" /implib:"..\..\lib\icule.lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "layout___Win32_Debug" -# PROP BASE Intermediate_Dir "layout___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /D "U_LAYOUT_IMPLEMENTATION" /FR /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 ..\..\lib\icuucd.lib /nologo /dll /debug /machine:I386 /out:"..\..\bin\icule32d.dll" /implib:"..\..\lib\iculed.lib" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\include" /I "..\common" /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /D "U_LAYOUT_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 ..\..\lib\icuuc.lib /nologo /dll /machine:IX86 /out:"..\..\bin\icule32.dll" /implib:"..\..\lib\icule.lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "layout___Win64_Debug" -# PROP BASE Intermediate_Dir "layout___Win64_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\include" /I "..\common" /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUT_EXPORTS" /D "U_LAYOUT_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "..\common" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 ..\..\lib\icuucd.lib /nologo /dll /incremental:no /debug /machine:IX86 /out:"..\..\bin\icule32d.dll" /implib:"..\..\lib\iculed.lib" /pdbtype:sept /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "layout - Win32 Release" -# Name "layout - Win32 Debug" -# Name "layout - Win64 Release" -# Name "layout - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\AlternateSubstSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\AnchorTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\ArabicLayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\ArabicShaping.cpp -# End Source File -# Begin Source File - -SOURCE=.\CanonData.cpp -# End Source File -# Begin Source File - -SOURCE=.\ClassDefinitionTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\ContextualGlyphSubstProc.cpp -# End Source File -# Begin Source File - -SOURCE=.\ContextualSubstSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\CoverageTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\CursiveAttachmentSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\DeviceTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\ExtensionSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\Features.cpp -# End Source File -# Begin Source File - -SOURCE=.\GDEFMarkFilter.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphDefinitionTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphIterator.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphLookupTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphPositioningTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphPosnLookupProc.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphSubstitutionTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\GlyphSubstLookupProc.cpp -# End Source File -# Begin Source File - -SOURCE=.\GXLayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\HanLayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\IndicClassTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\IndicLayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\IndicRearrangementProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\IndicReordering.cpp -# End Source File -# Begin Source File - -SOURCE=.\LayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\LEFontInstance.cpp -# End Source File -# Begin Source File - -SOURCE=.\LEGlyphStorage.cpp -# End Source File -# Begin Source File - -SOURCE=.\LEInsertionList.cpp -# End Source File -# Begin Source File - -SOURCE=.\LigatureSubstProc.cpp -# End Source File -# Begin Source File - -SOURCE=.\LigatureSubstSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\loengine.cpp -# End Source File -# Begin Source File - -SOURCE=.\LookupProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\Lookups.cpp -# End Source File -# Begin Source File - -SOURCE=.\LookupTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\MarkArrays.cpp -# End Source File -# Begin Source File - -SOURCE=.\MarkToBasePosnSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\MarkToLigaturePosnSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\MarkToMarkPosnSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\MorphTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\MPreFixups.cpp -# End Source File -# Begin Source File - -SOURCE=.\MultipleSubstSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\NonContextualGlyphSubstProc.cpp -# End Source File -# Begin Source File - -SOURCE=.\OpenTypeLayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\OpenTypeUtilities.cpp -# End Source File -# Begin Source File - -SOURCE=.\PairPositioningSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\ScriptAndLanguage.cpp -# End Source File -# Begin Source File - -SOURCE=.\ScriptAndLanguageTags.cpp -# End Source File -# Begin Source File - -SOURCE=.\SegmentArrayProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\SegmentSingleProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\SimpleArrayProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\SinglePositioningSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\SingleSubstitutionSubtables.cpp -# End Source File -# Begin Source File - -SOURCE=.\SingleTableProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\StateTableProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\SubstitutionLookups.cpp -# End Source File -# Begin Source File - -SOURCE=.\SubtableProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\ThaiLayoutEngine.cpp -# End Source File -# Begin Source File - -SOURCE=.\ThaiShaping.cpp -# End Source File -# Begin Source File - -SOURCE=.\ThaiStateTables.cpp -# End Source File -# Begin Source File - -SOURCE=.\TrimmedArrayProcessor.cpp -# End Source File -# Begin Source File - -SOURCE=.\ValueRecords.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\AlternateSubstSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\AnchorTables.h -# End Source File -# Begin Source File - -SOURCE=.\ArabicLayoutEngine.h -# End Source File -# Begin Source File - -SOURCE=.\ArabicShaping.h -# End Source File -# Begin Source File - -SOURCE=.\AttachmentPosnSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\CanonShaping.h -# End Source File -# Begin Source File - -SOURCE=.\CharSubstitutionFilter.h -# End Source File -# Begin Source File - -SOURCE=.\ClassDefinitionTables.h -# End Source File -# Begin Source File - -SOURCE=.\ContextualGlyphInsertion.h -# End Source File -# Begin Source File - -SOURCE=.\ContextualGlyphSubstitution.h -# End Source File -# Begin Source File - -SOURCE=.\ContextualGlyphSubstProc.h -# End Source File -# Begin Source File - -SOURCE=.\ContextualSubstSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\CoverageTables.h -# End Source File -# Begin Source File - -SOURCE=.\CursiveAttachmentSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\DefaultCharMapper.h -# End Source File -# Begin Source File - -SOURCE=.\DeviceTables.h -# End Source File -# Begin Source File - -SOURCE=.\ExtensionSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\Features.h -# End Source File -# Begin Source File - -SOURCE=.\GDEFMarkFilter.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphDefinitionTables.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphIterator.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphLookupTables.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphPositionAdjustments.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphPositioningTables.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphPosnLookupProc.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphSubstitutionTables.h -# End Source File -# Begin Source File - -SOURCE=.\GlyphSubstLookupProc.h -# End Source File -# Begin Source File - -SOURCE=.\GXLayoutEngine.h -# End Source File -# Begin Source File - -SOURCE=.\HanLayoutEngine.h -# End Source File -# Begin Source File - -SOURCE=.\HindiFeatureTags.h -# End Source File -# Begin Source File - -SOURCE=.\IndicLayoutEngine.h -# End Source File -# Begin Source File - -SOURCE=.\IndicRearrangement.h -# End Source File -# Begin Source File - -SOURCE=.\IndicRearrangementProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\IndicReordering.h -# End Source File -# Begin Source File - -SOURCE=.\LayoutEngine.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LayoutEngine.h - -"..\..\include\layout\LayoutEngine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LayoutEngine.h - -"..\..\include\layout\LayoutEngine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LayoutEngine.h - -"..\..\include\layout\LayoutEngine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LayoutEngine.h - -"..\..\include\layout\LayoutEngine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LayoutTables.h -# End Source File -# Begin Source File - -SOURCE=.\LEFontInstance.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LEFontInstance.h - -"..\..\include\layout\LEFontInstance.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LEFontInstance.h - -"..\..\include\layout\LEFontInstance.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LEFontInstance.h - -"..\..\include\layout\LEFontInstance.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LEFontInstance.h - -"..\..\include\layout\LEFontInstance.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LEGlyphFilter.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LEGlyphFilter.h - -"..\..\include\layout\LEGlyphFilter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LEGlyphFilter.h - -"..\..\include\layout\LEGlyphFilter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LEGlyphFilter.h - -"..\..\include\layout\LEGlyphFilter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LEGlyphFilter.h - -"..\..\include\layout\LEGlyphFilter.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LEGlyphStorage.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LEGlyphStorage.h - -"..\..\include\layout\LEGlyphStorage.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LEGlyphStorage.h - -"..\..\include\layout\LEGlyphStorage.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LEGlyphStorage.h - -"..\..\include\layout\LEGlyphStorage.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LEGlyphStorage.h - -"..\..\include\layout\LEGlyphStorage.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LEInsertionList.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LEInsertionList.h - -"..\..\include\layout\LEInsertionList.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LEInsertionList.h - -"..\..\include\layout\LEInsertionList.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LEInsertionList.h - -"..\..\include\layout\LEInsertionList.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LEInsertionList.h - -"..\..\include\layout\LEInsertionList.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LELanguages.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LELanguages.h - -"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LELanguages.h - -"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LELanguages.h - -"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LELanguages.h - -"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LEScripts.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LEScripts.h - -"..\..\include\layout\LEScripts.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LEScripts.h - -"..\..\include\layout\LEScripts.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LEScripts.h - -"..\..\include\layout\LEScripts.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LEScripts.h - -"..\..\include\layout\LEScripts.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LESwaps.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LESwaps.h - -"..\..\include\layout\LESwaps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LESwaps.h - -"..\..\include\layout\LESwaps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LESwaps.h - -"..\..\include\layout\LESwaps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LESwaps.h - -"..\..\include\layout\LESwaps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LETypes.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\LETypes.h - -"..\..\include\layout\LETypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\LETypes.h - -"..\..\include\layout\LETypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\LETypes.h - -"..\..\include\layout\LETypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\LETypes.h - -"..\..\include\layout\LETypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LigatureSubstitution.h -# End Source File -# Begin Source File - -SOURCE=.\LigatureSubstProc.h -# End Source File -# Begin Source File - -SOURCE=.\LigatureSubstSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\loengine.h - -!IF "$(CFG)" == "layout - Win32 Release" - -# Begin Custom Build -InputPath=.\unicode\loengine.h - -"..\..\include\unicode\loengine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# Begin Custom Build -InputPath=.\unicode\loengine.h - -"..\..\include\unicode\loengine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Release" - -# Begin Custom Build -InputPath=.\unicode\loengine.h - -"..\..\include\unicode\loengine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ELSEIF "$(CFG)" == "layout - Win64 Debug" - -# Begin Custom Build -InputPath=.\unicode\loengine.h - -"..\..\include\unicode\loengine.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\unicode - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\LookupProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\Lookups.h -# End Source File -# Begin Source File - -SOURCE=.\LookupTables.h -# End Source File -# Begin Source File - -SOURCE=.\MarkArrays.h -# End Source File -# Begin Source File - -SOURCE=.\MarkToBasePosnSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\MarkToLigaturePosnSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\MarkToMarkPosnSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\MorphStateTables.h -# End Source File -# Begin Source File - -SOURCE=.\MorphTables.h -# End Source File -# Begin Source File - -SOURCE=.\MPreFixups.h -# End Source File -# Begin Source File - -SOURCE=.\MultipleSubstSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\NonContextualGlyphSubst.h -# End Source File -# Begin Source File - -SOURCE=.\NonContextualGlyphSubstProc.h -# End Source File -# Begin Source File - -SOURCE=.\OpenTypeLayoutEngine.h -# End Source File -# Begin Source File - -SOURCE=.\OpenTypeTables.h -# End Source File -# Begin Source File - -SOURCE=.\OpenTypeUtilities.h -# End Source File -# Begin Source File - -SOURCE=.\PairPositioningSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\ScriptAndLanguage.h -# End Source File -# Begin Source File - -SOURCE=.\ScriptAndLanguageTags.h -# End Source File -# Begin Source File - -SOURCE=.\SegmentArrayProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\SegmentSingleProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\SimpleArrayProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\SinglePositioningSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\SingleSubstitutionSubtables.h -# End Source File -# Begin Source File - -SOURCE=.\SingleTableProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\StateTableProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\StateTables.h -# End Source File -# Begin Source File - -SOURCE=.\SubstitutionLookups.h -# End Source File -# Begin Source File - -SOURCE=.\SubtableProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\ThaiLayoutEngine.h -# End Source File -# Begin Source File - -SOURCE=.\ThaiShaping.h -# End Source File -# Begin Source File - -SOURCE=.\TrimmedArrayProcessor.h -# End Source File -# Begin Source File - -SOURCE=.\ValueRecords.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\layout.rc -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/layout/layout.rc b/icuSources/layout/layout.rc index 4298b05a..91a6a3eb 100644 --- a/icuSources/layout/layout.rc +++ b/icuSources/layout/layout.rc @@ -1,7 +1,7 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. -// Copyright (c) 2001-2003 International Business Machines +// Copyright (c) 2001-2005 International Business Machines // Corporation and others. All Rights Reserved. // #include "../common/msvcres.h" @@ -54,8 +54,8 @@ END #define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 + FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM + PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,10 +70,10 @@ BEGIN BEGIN BLOCK "00000000" BEGIN - VALUE "Comments", "http://oss.software.ibm.com/icu/\0" + VALUE "Comments", ICU_WEBSITE "\0" VALUE "CompanyName", "IBM Corporation and others\0" VALUE "FileDescription", "IBM ICU Layout DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" #ifdef _DEBUG VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT "d.dll\0") @@ -82,7 +82,7 @@ BEGIN #endif VALUE "PrivateBuild", "\0" VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "SpecialBuild", "\0" END END diff --git a/icuSources/layout/layout.vcproj b/icuSources/layout/layout.vcproj index 795bc652..12ab9c54 100644 --- a/icuSources/layout/layout.vcproj +++ b/icuSources/layout/layout.vcproj @@ -22,12 +22,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;U_LAYOUT_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;_DEBUG;U_LAYOUT_IMPLEMENTATION" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/layout.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -41,11 +42,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\icule32d.dll" + OutputFile="..\..\bin\icule36d.dll" LinkIncremental="2" SuppressStartupBanner="TRUE" GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\..\..\lib\icule32d.pdb" + ProgramDatabaseFile=".\..\..\lib\icule36d.pdb" BaseAddress="0x4ac00000" ImportLibrary="..\..\lib\iculed.lib"/> <Tool @@ -87,14 +88,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;U_LAYOUT_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;NDEBUG;U_LAYOUT_IMPLEMENTATION" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/layout.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -106,10 +107,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\icule32.dll" + OutputFile="..\..\bin\icule36.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" - ProgramDatabaseFile=".\..\..\lib\icule32.pdb" + ProgramDatabaseFile=".\..\..\lib\icule36.pdb" + EnableCOMDATFolding="2" BaseAddress="0x4ac00000" ImportLibrary="..\..\lib\icule.lib"/> <Tool @@ -163,6 +165,9 @@ <File RelativePath=".\CanonData.cpp"> </File> + <File + RelativePath=".\CanonShaping.cpp"> + </File> <File RelativePath=".\ClassDefinitionTables.cpp"> </File> @@ -199,6 +204,9 @@ <File RelativePath="GlyphLookupTables.cpp"> </File> + <File + RelativePath=".\GlyphPositionAdjustments.cpp"> + </File> <File RelativePath=".\GlyphPositioningTables.cpp"> </File> @@ -214,6 +222,9 @@ <File RelativePath=".\GXLayoutEngine.cpp"> </File> + <File + RelativePath=".\HangulLayoutEngine.cpp"> + </File> <File RelativePath=".\HanLayoutEngine.cpp"> </File> @@ -229,6 +240,15 @@ <File RelativePath=".\IndicReordering.cpp"> </File> + <File + RelativePath=".\KernTable.cpp"> + </File> + <File + RelativePath=".\KhmerLayoutEngine.cpp"> + </File> + <File + RelativePath=".\KhmerReordering.cpp"> + </File> <File RelativePath=".\LayoutEngine.cpp"> </File> @@ -247,9 +267,6 @@ <File RelativePath=".\LigatureSubstSubtables.cpp"> </File> - <File - RelativePath=".\loengine.cpp"> - </File> <File RelativePath=".\LookupProcessor.cpp"> </File> @@ -271,6 +288,9 @@ <File RelativePath=".\MarkToMarkPosnSubtables.cpp"> </File> + <File + RelativePath=".\MirroredCharData.cpp"> + </File> <File RelativePath=".\MorphTables.cpp"> </File> @@ -304,6 +324,9 @@ <File RelativePath=".\SegmentSingleProcessor.cpp"> </File> + <File + RelativePath=".\ShapingTypeData.cpp"> + </File> <File RelativePath=".\SimpleArrayProcessor.cpp"> </File> @@ -334,6 +357,12 @@ <File RelativePath=".\ThaiStateTables.cpp"> </File> + <File + RelativePath=".\TibetanLayoutEngine.cpp"> + </File> + <File + RelativePath=".\TibetanReordering.cpp"> + </File> <File RelativePath=".\TrimmedArrayProcessor.cpp"> </File> @@ -429,10 +458,10 @@ RelativePath=".\GXLayoutEngine.h"> </File> <File - RelativePath=".\HanLayoutEngine.h"> + RelativePath=".\HangulLayoutEngine.h"> </File> <File - RelativePath=".\HindiFeatureTags.h"> + RelativePath=".\HanLayoutEngine.h"> </File> <File RelativePath=".\IndicLayoutEngine.h"> @@ -446,6 +475,15 @@ <File RelativePath=".\IndicReordering.h"> </File> + <File + RelativePath=".\KernTable.h"> + </File> + <File + RelativePath=".\KhmerLayoutEngine.h"> + </File> + <File + RelativePath=".\KhmerReordering.h"> + </File> <File RelativePath=".\LayoutEngine.h"> <FileConfiguration @@ -629,25 +667,6 @@ <File RelativePath=".\LigatureSubstSubtables.h"> </File> - <File - RelativePath=".\unicode\loengine.h"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\unicode -" - Outputs="..\..\include\unicode\$(InputFileName)"/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCustomBuildTool" - CommandLine="copy "$(InputPath)" ..\..\include\unicode -" - Outputs="..\..\include\unicode\$(InputFileName)"/> - </FileConfiguration> - </File> <File RelativePath=".\LookupProcessor.h"> </File> @@ -741,6 +760,12 @@ <File RelativePath=".\ThaiShaping.h"> </File> + <File + RelativePath=".\TibetanLayoutEngine.h"> + </File> + <File + RelativePath=".\TibetanReordering.h"> + </File> <File RelativePath=".\TrimmedArrayProcessor.h"> </File> diff --git a/icuSources/layout/loengine.cpp b/icuSources/layout/loengine.cpp deleted file mode 100644 index 384459be..00000000 --- a/icuSources/layout/loengine.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#include "unicode/loengine.h" - - -/* - * This file is needed to make sure that the - * inline methods defined in loengine.h are - * exported by the build... - */ - -#ifndef U_HIDE_OBSOLETE_API -UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICULayoutEngine) -#endif diff --git a/icuSources/layout/unicode/loengine.h b/icuSources/layout/unicode/loengine.h deleted file mode 100644 index 76612cd0..00000000 --- a/icuSources/layout/unicode/loengine.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved - * - */ - -#ifndef __LOENGINE_H -#define __LOENGINE_H - -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/uscript.h" -#include "unicode/unistr.h" - -#include "layout/LETypes.h" -#include "layout/LayoutEngine.h" - -U_NAMESPACE_BEGIN - -/** - * This is a wrapper class designed to allow ICU clients to - * use LayoutEngine in a way that is consistent with the rest - * of ICU. - * - * (LayoutEngine was developed seperately from ICU and - * the same source is used in non-ICU environments, so it cannot - * be changed to match ICU coding conventions). - * - * This class is designed for clients who wish to use LayoutEngine - * to layout complex text. If you need to subclass LayoutEngine, - * you'll need to use the LayoutEngine interfaces directly. - * - * Basically, it creates an instance of LayoutEngine, stashes - * it in fLayoutEngine, and uses it to implement the layout - * functionality. - * - * Use the createInstance method to create an ICULayoutEngine. Use - * delete to destroy it. The layoutChars method computes the glyphs - * and positions, and saves them in the ICULayoutEngine object. - * Use getGlyphs, getPositions and getCharIndices to retreive this - * data. - * - * You'll also need an implementation of LEFontInstance for your platform. - * - * @see LayoutEngine.h - * @see LEFontInstance.h - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ -#ifndef U_HIDE_OBSOLETE_API -class U_LAYOUT_API ICULayoutEngine : public UObject { -private: - /** - * This holds the instance of LayoutEngine that does all - * the work. - */ - LayoutEngine *fLayoutEngine; - - /** - * This no argument constructor is private so that clients - * can't envoke it. Clients should use createInstance. - * - * @see createInstance - */ - ICULayoutEngine(); - - /** - * The main constructor. It is defined as private to - * stop clients from invoking it. Clients should use - * createInstance. - * - * @param layoutEngine - the LayoutEngine that this instance wraps. - * - * @see createInstance - */ - ICULayoutEngine(LayoutEngine *layoutEngine); - -public: - - /** - * The destructor. At least on Windows it needs to be - * virtual to ensure that it deletes the object from the - * same heap that createInstance will allocate it from. We - * don't know why this is... - * - * @see createInstance - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - virtual ~ICULayoutEngine(); - - /** - * This method computes the glyph, character index and position arrays - * for the input characters. - * - * @param chars - the input character context - * @param startOffset - the starting offset of the characters to process - * @param endOffset - the ending offset of the characters to process - * @param maxOffset - the number of characters in the input context - * @param rightToLeft - TRUE if the characers are in a right to left directional run - * @param x - the initial X position - * @param y - the initial Y position - * @param success - output parameter set to an error code if the operation fails - * - * @return the number of glyphs in the glyph array - * - * Note; the glyph, character index and position array can be accessed - * using the getter method below. - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - int32_t layoutChars(const UChar chars[], - int32_t startOffset, - int32_t endOffset, - int32_t maxOffset, - UBool rightToLeft, - float x, float y, - UErrorCode &success); - - - /** - * This method computes the glyph, character index and position arrays - * for the input characters. - * - * @param str - the input character context - * @param startOffset - the starting offset of the characters to process - * @param endOffset - the ending offset of the characters to process - * @param rightToLeft - TRUE if the characers are in a right to left directional run - * @param x - the initial X position - * @param y - the initial Y position - * @param success - output parameter set to an error code if the operation fails - * - * @return the number of glyphs in the glyph array - * - * Note; the glyph, character index and position array can be accessed - * using the getter method below. - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - int32_t layoutString(const UnicodeString &str, - int32_t startOffset, - int32_t endOffset, - UBool rightToLeft, - float x, float y, - UErrorCode &success); - - /** - * This method returns the number of glyphs in the glyph array. Note - * that the number of glyphs will be greater than or equal to the number - * of characters used to create the LayoutEngine. - * - * @return the number of glyphs in the glyph array - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - int32_t countGlyphs() const; - - /** - * This method copies the glyph array into a caller supplied array. - * The caller must ensure that the array is large enough to hold all - * the glyphs. - * - * @param glyphs - the destiniation glyph array - * @param success - output parameter set to an error code if the operation fails - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - void getGlyphs(uint32_t glyphs[], UErrorCode &success); - - /** - * This method copies the character index array into a caller supplied array. - * The caller must ensure that the array is large enough to hold a character - * index for each glyph. - * - * @param charIndices - the destiniation character index array - * @param success - output parameter set to an error code if the operation fails - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - void getCharIndices(int32_t charIndices[], UErrorCode &success); - - /** - * This method copies the character index array into a caller supplied array. - * The caller must ensure that the array is large enough to hold a character - * index for each glyph. - * - * @param charIndices - the destiniation character index array - * @param indexBase - an offset which will be added to each index - * @param success - output parameter set to an error code if the operation fails - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - void getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success); - - /** - * This method copies the position array into a caller supplied array. - * The caller must ensure that the array is large enough to hold an - * X and Y position for each glyph, plus an extra X and Y for the - * advance of the last glyph. - * - * @param positions - the destiniation position array - * @param success - output parameter set to an error code if the operation fails - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - void getGlyphPositions(float positions[], UErrorCode &success); - - /** - * This method returns the X and Y position of the glyph at the - * given index. - * - * Input parameters: - * @param glyphIndex - the index of the glyph - * - * Output parameters: - * @param x - the glyph's X position - * @param y - the glyph's Y position - * @param success - output parameter set to an error code if the operation fails - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - void getGlyphPosition(int32_t glyphIndex, float &x, float &y, UErrorCode &success); - - /** - * This method returns an ICULayoutEngine capable of laying out text - * in the given font, script and langauge. - * - * @param fontInstance - the font of the text - * @param scriptCode - the script of the text - * @param locale - used to determine the language of the text - * @param success - output parameter set to an error code if the operation fails - * - * @return an ICULayoutEngine which can layout text in the given font. - * - * NOTE: currently, locale is ignored... - * - * @see LEFontInstance - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - static ICULayoutEngine *createInstance(const LEFontInstance *fontInstance, - UScriptCode scriptCode, Locale &locale, - UErrorCode &success); - - /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - virtual UClassID getDynamicClassID() const; - - /** - * ICU "poor man's RTTI", returns a UClassID for this class. - * - * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. - */ - static UClassID getStaticClassID(); -}; - -inline ICULayoutEngine::ICULayoutEngine() -{ - // nothing at all... -} - -inline ICULayoutEngine::ICULayoutEngine(LayoutEngine *layoutEngine) - : fLayoutEngine(layoutEngine) -{ - // nothing else to do -} - -inline ICULayoutEngine::~ICULayoutEngine() -{ - delete fLayoutEngine; - fLayoutEngine = 0; -} - -inline int32_t ICULayoutEngine::layoutChars(const UChar chars[], - int32_t startOffset, - int32_t endOffset, - int32_t maxOffset, - UBool rightToLeft, - float x, float y, - UErrorCode &success) -{ - // NOTE: call reset() so that clients can safely reuse - fLayoutEngine->reset(); - return fLayoutEngine->layoutChars(chars, - startOffset, - endOffset - startOffset, - maxOffset, - rightToLeft, - x, y, - (LEErrorCode &) success); -} - -inline int32_t ICULayoutEngine::layoutString(const UnicodeString &str, - int32_t startOffset, - int32_t endOffset, - UBool rightToLeft, - float x, float y, - UErrorCode &success) -{ - // NOTE: call reset() so that clients can safely reuse - fLayoutEngine->reset(); - return fLayoutEngine->layoutChars(str.getBuffer(), - startOffset, - endOffset - startOffset, - str.length(), - rightToLeft, - x, y, - (LEErrorCode &) success); -} - -inline int32_t ICULayoutEngine::countGlyphs() const -{ - return fLayoutEngine->getGlyphCount(); -} - -inline void ICULayoutEngine::getGlyphs(uint32_t glyphs[], UErrorCode &success) -{ - fLayoutEngine->getGlyphs(glyphs, (LEErrorCode &) success); -} - -inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], UErrorCode &success) -{ - fLayoutEngine->getCharIndices(charIndices, (LEErrorCode &) success); -} - -inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success) -{ - fLayoutEngine->getCharIndices(charIndices, indexBase, (LEErrorCode &) success); -} - -inline void ICULayoutEngine::getGlyphPositions(float positions[], UErrorCode &success) -{ - fLayoutEngine->getGlyphPositions(positions, (LEErrorCode &) success); -} - -inline void ICULayoutEngine::getGlyphPosition(int32_t glyphIndex, float &x, float &y, UErrorCode &success) -{ - fLayoutEngine->getGlyphPosition(glyphIndex, x, y, (LEErrorCode &) success); -} - -inline ICULayoutEngine *ICULayoutEngine::createInstance(const LEFontInstance *fontInstance, - UScriptCode scriptCode, - Locale &locale, UErrorCode &success) -{ - LayoutEngine *engine = LayoutEngine::layoutEngineFactory(fontInstance, - (le_int32) scriptCode, - 0, - (LEErrorCode &) success); - - return new ICULayoutEngine(engine); -} -#endif // U_HIDE_OBSOLETE_API - -U_NAMESPACE_END -#endif diff --git a/icuSources/layoutex/Makefile.in b/icuSources/layoutex/Makefile.in index 5f8c6faa..dcfee970 100644 --- a/icuSources/layoutex/Makefile.in +++ b/icuSources/layoutex/Makefile.in @@ -1,13 +1,18 @@ -## Copyright (c) 1999-2004, International Business Machines Corporation and -## others. All Rights Reserved. +#****************************************************************************** +# +# Copyright (C) 1999-2005, International Business Machines +# Corporation and others. All Rights Reserved. +# +#****************************************************************************** ## Makefile.in for ICU - layout -## Install directory information +## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. +## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk ## Build directory information @@ -26,7 +31,7 @@ endif ifneq ($(ENABLE_SHARED),) SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) ifeq ($(ENABLE_SO_VERSION_DATA),1) SO_VERSION_DATA = layoutex.res @@ -45,21 +50,26 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) -LDFLAGS += $(LDFLAGSICULX) -CPPFLAGS += -I$(srcdir) -I$(srcdir)/unicode -I$(srcdir)/.. -I$(top_builddir)/common -I$(top_srcdir)/common $(LIBCPPFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(srcdir) -I$(srcdir)/unicode -I$(srcdir)/.. -I$(top_srcdir)/common $(LIBCPPFLAGS) DEFS += -DU_LAYOUTEX_IMPLEMENTATION +LDFLAGS += $(LDFLAGSICULX) LIBS = $(LIBICUUC) $(LIBICULE) $(DEFAULT_LIBS) OBJECTS = ParagraphLayout.o \ RunArrays.o \ LXUtilities.o +## Header files to install +HEADERS= $(srcdir)/layout/ParagraphLayout.h $(srcdir)/layout/RunArrays.h + STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) DEPS = $(OBJECTS:.o=.d) -## Header files to install -HEADERS= $(srcdir)/layout/ParagraphLayout.h $(srcdir)/layout/RunArrays.h +-include Makefile.local ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ @@ -79,7 +89,7 @@ check: all check-local all-local: $(ALL_TARGETS) -install-local: install-headers install-library +install-local: install-headers install-library install-library: all-local $(MKINSTALLDIRS) $(DESTDIR)$(libdir) @@ -98,14 +108,13 @@ endif ifneq ($(IMPORT_LIB_EXT),) $(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir) ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB)) - cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(IMPORT_LIB)) && ln -s $(FINAL_IMPORT_LIB) $(notdir $(IMPORT_LIB)) + cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(IMPORT_LIB)) endif ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB)) cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(MIDDLE_IMPORT_LIB)) endif endif - install-headers: $(MKINSTALLDIRS) $(DESTDIR)$(includedir)/layout @for file in $(HEADERS); do \ @@ -117,7 +126,7 @@ dist-local: clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) - $(RMV) $(OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA) + $(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA) distclean-local: clean-local $(RMV) Makefile @@ -134,15 +143,14 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) $(SO_VERSION_DATA) +$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) ifeq ($(OS390BATCH),1) -$(BATCH_TARGET): $(OBJECTS) +$(BATCH_TARGET):$(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS) endif # OS390BATCH - -endif +endif # ENABLE_SHARED ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -152,4 +160,3 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) endif endif - diff --git a/icuSources/layoutex/ParagraphLayout.cpp b/icuSources/layoutex/ParagraphLayout.cpp index c0316b4b..ba5ac417 100644 --- a/icuSources/layoutex/ParagraphLayout.cpp +++ b/icuSources/layoutex/ParagraphLayout.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 2002-2004, International Business Machines + * Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -10,6 +10,7 @@ * BreakIterator... */ #include "layout/LETypes.h" +#include "layout/LEScripts.h" #include "layout/LELanguages.h" #include "layout/LayoutEngine.h" #include "layout/LEFontInstance.h" @@ -131,7 +132,7 @@ le_int32 StyleRuns::getRuns(le_int32 runLimits[], le_int32 styleIndices[]) * process, rather for all scripts which require * complex processing for correct rendering. */ -static const le_bool complexTable[] = { +static const le_bool complexTable[scriptCodeCount] = { FALSE , /* Zyyy */ FALSE, /* Qaai */ TRUE, /* Arab */ @@ -139,7 +140,7 @@ static const le_bool complexTable[] = { TRUE, /* Beng */ FALSE, /* Bopo */ FALSE, /* Cher */ - FALSE, /* Qaac */ + FALSE, /* Copt=Qaac */ FALSE, /* Cyrl */ FALSE, /* Dsrt */ TRUE, /* Deva */ @@ -186,7 +187,56 @@ static const le_bool complexTable[] = { FALSE, /* Shaw */ FALSE, /* Tale */ FALSE, /* Ugar */ - FALSE /* Hrkt */ + FALSE, /* Hrkt */ + FALSE, /* Bugi */ + FALSE, /* Glag */ + FALSE, /* Khar */ + FALSE, /* Sylo */ + FALSE, /* Talu */ + FALSE, /* Tfng */ + FALSE, /* Xpeo */ + FALSE, /* Bali */ + FALSE, /* Batk */ + FALSE, /* Blis */ + FALSE, /* Brah */ + FALSE, /* Cham */ + FALSE, /* Cirt */ + FALSE, /* Cyrs */ + FALSE, /* Egyd */ + FALSE, /* Egyh */ + FALSE, /* Egyp */ + FALSE, /* Geok */ + FALSE, /* Hans */ + FALSE, /* Hant */ + FALSE, /* Hmng */ + FALSE, /* Hung */ + FALSE, /* Inds */ + FALSE, /* Java */ + FALSE, /* Kali */ + FALSE, /* Latf */ + FALSE, /* Latg */ + FALSE, /* Lepc */ + FALSE, /* Lina */ + FALSE, /* Mand */ + FALSE, /* Maya */ + FALSE, /* Mero */ + FALSE, /* Nkoo */ + FALSE, /* Orkh */ + FALSE, /* Perm */ + FALSE, /* Phag */ + FALSE, /* Phnx */ + FALSE, /* Plrd */ + FALSE, /* Roro */ + FALSE, /* Sara */ + FALSE, /* Syre */ + FALSE, /* Syrj */ + FALSE, /* Syrn */ + FALSE, /* Teng */ + FALSE, /* Taii */ + FALSE, /* Visp */ + FALSE, /* Xsux */ + FALSE, /* Zxxx */ + FALSE /* Zzzz */ }; @@ -450,14 +500,17 @@ le_bool ParagraphLayout::isComplex(const LEUnicode chars[], le_int32 count) UErrorCode scriptStatus = U_ZERO_ERROR; UScriptCode scriptCode = USCRIPT_INVALID_CODE; UScriptRun *sr = uscript_openRun(chars, count, &scriptStatus); + le_bool result = FALSE; while (uscript_nextRun(sr, NULL, NULL, &scriptCode)) { if (isComplex(scriptCode)) { - return TRUE; + result = TRUE; + break; } } - return FALSE; + uscript_closeRun(sr); + return result; } le_int32 ParagraphLayout::getAscent() const diff --git a/icuSources/layoutex/layout/ParagraphLayout.h b/icuSources/layoutex/layout/ParagraphLayout.h index 7aeb54d3..bce2e2d4 100644 --- a/icuSources/layoutex/layout/ParagraphLayout.h +++ b/icuSources/layoutex/layout/ParagraphLayout.h @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 2002-2004, International Business Machines + * Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -9,6 +9,11 @@ #define __PARAGRAPHLAYOUT_H +/** + * \file + * \brief C++ API: Paragraph Layout + */ + /* * ParagraphLayout doesn't make much sense without * BreakIterator... @@ -50,7 +55,7 @@ public: * @see ParagraphLayout * @see ParagraphLayout::VisualRun * - * @draft ICU 2.6 + * @stable ICU 3.2 */ class U_LAYOUTEX_API Line : public UObject { @@ -61,7 +66,7 @@ public: * clients responsibility to destroy the objects, so the destructor * is public. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ ~Line(); @@ -70,9 +75,9 @@ public: * * @return the number of visual runs. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 countRuns() const; + inline le_int32 countRuns() const; /** * Get the ascent of the line. This is the maximum ascent @@ -80,7 +85,7 @@ public: * * @return the ascent of the line. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 getAscent() const; @@ -90,7 +95,7 @@ public: * * @return the descent of the line. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 getDescent() const; @@ -100,7 +105,7 @@ public: * * @return the leading of the line. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 getLeading() const; @@ -111,7 +116,7 @@ public: * * @return the width of the line. * - * @draft ICU 2.8 + * @stable ICU 2.8 */ le_int32 getWidth() const; @@ -128,23 +133,23 @@ public: * * @see ParagraphLayout::VisualRun * - * @draft ICU 2.6 + * @stable ICU 3.2 */ const VisualRun *getVisualRun(le_int32 runIndex) const; /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } private: @@ -165,9 +170,9 @@ public: VisualRun **fRuns; - Line(); - Line(const Line &other); - Line &operator=(const Line & /*other*/) { return *this; }; + inline Line(); + inline Line(const Line &other); + inline Line &operator=(const Line & /*other*/) { return *this; }; void computeMetrics(); @@ -188,7 +193,7 @@ public: * * @see ParagraphLayout::Line * - * @draft ICU 2.6 + * @stable ICU 3.2 */ class U_LAYOUTEX_API VisualRun : public UObject { @@ -203,9 +208,9 @@ public: * * @see LEFontInstance * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - const LEFontInstance *getFont() const; + inline const LEFontInstance *getFont() const; /** * Get the direction of the visual run. @@ -213,18 +218,18 @@ public: * @return the direction of the run. This will be UBIDI_LTR if the * run is left-to-right and UBIDI_RTL if the line is right-to-left. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - UBiDiDirection getDirection() const; + inline UBiDiDirection getDirection() const; /** * Get the number of glyphs in the visual run. * * @return the number of glyphs. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getGlyphCount() const; + inline le_int32 getGlyphCount() const; /** * Get the glyphs in the visual run. Glyphs with the values <code>0xFFFE</code> and @@ -234,9 +239,9 @@ public: * is owned by the <code>VisualRun</code> object and must not be deleted. * It will remain valid as long as the <code>VisualRun</code> object is valid. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - const LEGlyphID *getGlyphs() const; + inline const LEGlyphID *getGlyphs() const; /** * Get the (x, y) positions of the glyphs in the visual run. To simplify storage @@ -249,9 +254,9 @@ public: * is owned by the <code>VisualRun</code> object and must not be deleted. * It will remain valid as long as the <code>VisualRun</code> object is valid. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - const float *getPositions() const; + inline const float *getPositions() const; /** * Get the glyph-to-character map for this visual run. This maps the indices into @@ -261,9 +266,9 @@ public: * is owned by the <code>VisualRun</code> object and must not be deleted. * It will remain valid as long as the <code>VisualRun</code> object is valid. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - const le_int32 *getGlyphToCharMap() const; + inline const le_int32 *getGlyphToCharMap() const; /** * A convenience method which returns the ascent value for the font @@ -271,9 +276,9 @@ public: * * @return the ascent value of this run's font. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getAscent() const; + inline le_int32 getAscent() const; /** * A convenience method which returns the descent value for the font @@ -281,9 +286,9 @@ public: * * @return the descent value of this run's font. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getDescent() const; + inline le_int32 getDescent() const; /** * A convenience method which returns the leading value for the font @@ -291,23 +296,23 @@ public: * * @return the leading value of this run's font. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getLeading() const; + inline le_int32 getLeading() const; /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } private: @@ -328,11 +333,11 @@ public: friend class Line; - VisualRun(); - VisualRun(const VisualRun &other); - VisualRun &operator=(const VisualRun &other) { return *this; }; + inline VisualRun(); + inline VisualRun(const VisualRun &other); + inline VisualRun &operator=(const VisualRun &/*other*/) { return *this; }; - VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, + inline VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]); ~VisualRun(); @@ -379,7 +384,7 @@ public: * @see LayoutEngine.h * @see RunArrays.h * - * @draft ICU 2.8 + * @stable ICU 2.8 */ ParagraphLayout(const LEUnicode chars[], le_int32 count, const FontRuns *fontRuns, @@ -393,7 +398,7 @@ public: * The destructor. Virtual so that it works correctly with * sublcasses. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ ~ParagraphLayout(); @@ -414,7 +419,7 @@ public: * * @return <code>TRUE</code> if the paragraph contains complex text. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ static le_bool isComplex(const LEUnicode chars[], le_int32 count, const FontRuns *fontRuns); #else @@ -428,7 +433,7 @@ public: * * @return <code>TRUE</code> if any of the text requires complex processing. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ static le_bool isComplex(const LEUnicode chars[], le_int32 count); @@ -441,9 +446,9 @@ public: * * @return the resolved paragraph level. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - UBiDiLevel getParagraphLevel(); + inline UBiDiLevel getParagraphLevel(); /** * Return the directionality of the text in the paragraph. @@ -452,9 +457,9 @@ public: * <code>UBIDI_RTL</code> if the text is all right to left, * or <code>UBIDI_MIXED</code> if the text has mixed direction. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - UBiDiDirection getTextDirection(); + inline UBiDiDirection getTextDirection(); /** * Return the max ascent value for all the fonts @@ -462,7 +467,7 @@ public: * * @return the ascent value. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getAscent() const; @@ -472,7 +477,7 @@ public: * * @return the decent value. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getDescent() const; @@ -482,7 +487,7 @@ public: * * @return the leading value. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual le_int32 getLeading() const; @@ -490,9 +495,9 @@ public: * Reset line breaking to start from the beginning of the paragraph. * * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - void reflow(); + inline void reflow(); /** * Return a <code>ParagraphLayout::Line</code> object which represents next line @@ -509,23 +514,23 @@ public: * * @see ParagraphLayout::Line * - * @draft ICU 2.6 + * @stable ICU 3.2 */ Line *nextLine(float width); /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } private: @@ -553,7 +558,7 @@ private: ParagraphLayout() {}; ParagraphLayout(const ParagraphLayout & /*other*/) : UObject( ){}; - ParagraphLayout &operator=(const ParagraphLayout & /*other*/) { return *this; }; + inline ParagraphLayout &operator=(const ParagraphLayout & /*other*/) { return *this; }; void computeLevels(UBiDiLevel paragraphLevel); @@ -703,7 +708,7 @@ inline ParagraphLayout::VisualRun::VisualRun() // nothing } -inline ParagraphLayout::VisualRun::VisualRun(const VisualRun &other) +inline ParagraphLayout::VisualRun::VisualRun(const VisualRun &/*other*/) : UObject(), fFont(NULL), fDirection(UBIDI_LTR), fGlyphCount(0), fGlyphs(NULL), fPositions(NULL), fGlyphToCharMap(NULL) { // nothing diff --git a/icuSources/layoutex/layout/RunArrays.h b/icuSources/layoutex/layout/RunArrays.h index f745bd54..27f928b4 100644 --- a/icuSources/layoutex/layout/RunArrays.h +++ b/icuSources/layoutex/layout/RunArrays.h @@ -1,6 +1,6 @@ /* ********************************************************************** - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -15,12 +15,17 @@ #include "unicode/utypes.h" #include "unicode/locid.h" +/** + * \file + * \brief C++ API: base class for building classes which represent data that is associated with runs of text. + */ + U_NAMESPACE_BEGIN /** * The initial size of an array if it is unspecified. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define INITIAL_CAPACITY 16 @@ -28,7 +33,7 @@ U_NAMESPACE_BEGIN * When an array needs to grow, it will double in size until * it becomes this large, then it will grow by this amount. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ #define CAPACITY_GROW_LIMIT 128 @@ -38,7 +43,7 @@ U_NAMESPACE_BEGIN * maintains an array of limit indices into the text, subclasses * provide one or more arrays of data. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ class U_LAYOUTEX_API RunArray : public UObject { @@ -52,9 +57,9 @@ public: * * @param count is the number of entries in the limit array. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - RunArray(const le_int32 *limits, le_int32 count); + inline RunArray(const le_int32 *limits, le_int32 count); /** * Construct an empty <code>RunArray</code> object. Clients can add limit @@ -65,14 +70,14 @@ public: * * @see add * - * @draft ICU 2.6 + * @stable ICU 3.2 */ RunArray(le_int32 initialCapacity); /** * The destructor; virtual so that subclass destructors are invoked as well. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual ~RunArray(); @@ -81,9 +86,19 @@ public: * * @return the number of entries in the limit indices array. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getCount() const; + inline le_int32 getCount() const; + + /** + * Reset the limit indices array. This method sets the number of entries in the + * limit indices array to zero. It does not delete the array. + * + * Note: Subclass arrays will also be reset and not deleted. + * + * @draft ICU 3.6 + */ + inline void reset(); /** * Get the last limit index. This is the number of characters in @@ -91,9 +106,9 @@ public: * * @return the last limit index. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getLimit() const; + inline le_int32 getLimit() const; /** * Get the limit index for a particular run of text. @@ -102,9 +117,9 @@ public: * * @return the limit index for the run, or -1 if <code>run</code> is out of bounds. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - le_int32 getLimit(le_int32 run) const; + inline le_int32 getLimit(le_int32 run) const; /** * Add a limit index to the limit indices array and return the run index @@ -128,23 +143,23 @@ public: * @see init * @see grow * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 add(le_int32 limit); /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } protected: /** @@ -157,7 +172,7 @@ protected: * * @see add * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual void init(le_int32 capacity); @@ -171,7 +186,7 @@ protected: * * @see add * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual void grow(le_int32 capacity); @@ -182,7 +197,7 @@ protected: * <code>add</code> method won't change the arrays * and the destructor won't delete them. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_bool fClientArrays; @@ -195,9 +210,9 @@ private: le_int32 ensureCapacity(); - RunArray(); - RunArray(const RunArray & /*other*/); - RunArray &operator=(const RunArray & /*other*/) { return *this; }; + inline RunArray(); + inline RunArray(const RunArray & /*other*/); + inline RunArray &operator=(const RunArray & /*other*/) { return *this; }; const le_int32 *fLimits; le_int32 fCount; @@ -227,6 +242,11 @@ inline le_int32 RunArray::getCount() const return fCount; } +inline void RunArray::reset() +{ + fCount = 0; +} + inline le_int32 RunArray::getLimit(le_int32 run) const { if (run < 0 || run >= fCount) { @@ -245,7 +265,7 @@ inline le_int32 RunArray::getLimit() const * The <code>FontRuns</code> class associates pointers to <code>LEFontInstance</code> * objects with runs of text. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ class U_LAYOUTEX_API FontRuns : public RunArray { @@ -263,9 +283,9 @@ public: * * @param count is the number of entries in the two arrays. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - FontRuns(const LEFontInstance **fonts, const le_int32 *limits, le_int32 count); + inline FontRuns(const LEFontInstance **fonts, const le_int32 *limits, le_int32 count); /** * Construct an empty <code>FontRuns</code> object. Clients can add font and limit @@ -276,14 +296,14 @@ public: * * @see add * - * @draft ICU 2.6 + * @stable ICU 3.2 */ FontRuns(le_int32 initialCapacity); /** * The destructor; virtual so that subclass destructors are invoked as well. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual ~FontRuns(); @@ -298,7 +318,7 @@ public: * * @see RunArray::getLimit * - * @draft ICU 2.6 + * @stable ICU 3.2 */ const LEFontInstance *getFont(le_int32 run) const; @@ -323,23 +343,23 @@ public: * * @return the run index where the font and limit index were stored, or -1 if the data cannot be stored. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 add(const LEFontInstance *font, le_int32 limit); /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } protected: virtual void init(le_int32 capacity); @@ -347,9 +367,9 @@ protected: private: - FontRuns(); - FontRuns(const FontRuns &other); - FontRuns &operator=(const FontRuns & /*other*/) { return *this; }; + inline FontRuns(); + inline FontRuns(const FontRuns &other); + inline FontRuns &operator=(const FontRuns & /*other*/) { return *this; }; /** * The address of this static class variable serves as this class's ID @@ -382,7 +402,7 @@ inline FontRuns::FontRuns(const LEFontInstance **fonts, const le_int32 *limits, * The <code>LocaleRuns</code> class associates pointers to <code>Locale</code> * objects with runs of text. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ class U_LAYOUTEX_API LocaleRuns : public RunArray { @@ -400,9 +420,9 @@ public: * * @param count is the number of entries in the two arrays. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - LocaleRuns(const Locale **locales, const le_int32 *limits, le_int32 count); + inline LocaleRuns(const Locale **locales, const le_int32 *limits, le_int32 count); /** * Construct an empty <code>LocaleRuns</code> object. Clients can add locale and limit @@ -413,14 +433,14 @@ public: * * @see add * - * @draft ICU 2.6 + * @stable ICU 3.2 */ LocaleRuns(le_int32 initialCapacity); /** * The destructor; virtual so that subclass destructors are invoked as well. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual ~LocaleRuns(); @@ -435,7 +455,7 @@ public: * * @see RunArray::getLimit * - * @draft ICU 2.6 + * @stable ICU 3.2 */ const Locale *getLocale(le_int32 run) const; @@ -460,23 +480,23 @@ public: * * @return the run index where the locale and limit index were stored, or -1 if the data cannot be stored. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 add(const Locale *locale, le_int32 limit); /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } protected: virtual void init(le_int32 capacity); @@ -484,9 +504,9 @@ protected: private: - LocaleRuns(); - LocaleRuns(const LocaleRuns &other); - LocaleRuns &operator=(const LocaleRuns & /*other*/) { return *this; }; + inline LocaleRuns(); + inline LocaleRuns(const LocaleRuns &other); + inline LocaleRuns &operator=(const LocaleRuns & /*other*/) { return *this; }; /** * The address of this static class variable serves as this class's ID @@ -518,7 +538,7 @@ inline LocaleRuns::LocaleRuns(const Locale **locales, const le_int32 *limits, le /** * The <code>ValueRuns</code> class associates integer values with runs of text. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ class U_LAYOUTEX_API ValueRuns : public RunArray { @@ -535,9 +555,9 @@ public: * * @param count is the number of entries in the two arrays. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - ValueRuns(const le_int32 *values, const le_int32 *limits, le_int32 count); + inline ValueRuns(const le_int32 *values, const le_int32 *limits, le_int32 count); /** * Construct an empty <code>ValueRuns</code> object. Clients can add value and limit @@ -548,14 +568,14 @@ public: * * @see add * - * @draft ICU 2.6 + * @stable ICU 3.2 */ ValueRuns(le_int32 initialCapacity); /** * The destructor; virtual so that subclass destructors are invoked as well. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ virtual ~ValueRuns(); @@ -570,7 +590,7 @@ public: * * @see RunArray::getLimit * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 getValue(le_int32 run) const; @@ -594,23 +614,23 @@ public: * * @return the run index where the value and limit index were stored, or -1 if the data cannot be stored. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ le_int32 add(le_int32 value, le_int32 limit); /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @draft ICU 2.6 + * @stable ICU 3.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } protected: virtual void init(le_int32 capacity); @@ -618,9 +638,9 @@ protected: private: - ValueRuns(); - ValueRuns(const ValueRuns &other); - ValueRuns &operator=(const ValueRuns & /*other*/) { return *this; }; + inline ValueRuns(); + inline ValueRuns(const ValueRuns &other); + inline ValueRuns &operator=(const ValueRuns & /*other*/) { return *this; }; /** * The address of this static class variable serves as this class's ID diff --git a/icuSources/layoutex/layoutex.dsp b/icuSources/layoutex/layoutex.dsp deleted file mode 100644 index 6b39d3fc..00000000 --- a/icuSources/layoutex/layoutex.dsp +++ /dev/null @@ -1,277 +0,0 @@ -# Microsoft Developer Studio Project File - Name="layoutex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=layoutex - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "layoutex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "layoutex.mak" CFG="layoutex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "layoutex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "layoutex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "layoutex - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "layoutex - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "layoutex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUTEX_EXPORTS" /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\include" /I "..\common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "U_LAYOUTEX_IMPLEMENTATION" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 ..\..\lib\icuuc.lib ..\..\lib\icule.lib /nologo /dll /machine:I386 /out:"..\..\bin\iculx32.dll" /implib:"..\..\lib\iculx.lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "layoutex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUTEX_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\include" /I "..\common" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "U_LAYOUTEX_IMPLEMENTATION" /FR /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 ..\..\lib\icuucd.lib ..\..\lib\iculed.lib /nologo /dll /debug /machine:I386 /out:"..\..\bin\iculx32d.dll" /implib:"..\..\lib\iculxd.lib" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "layoutex - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUTEX_EXPORTS" /FD /c -# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /Op /I "..\..\include" /I "..\common" /D "NDEBUG" /D "WIN64" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "U_LAYOUTEX_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 ..\..\lib\icuuc.lib ..\..\lib\icule.lib /nologo /dll /machine:IX86 /out:"..\..\bin\iculx32.dll" /implib:"..\..\lib\iculx.lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "layoutex - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\lib\" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LAYOUTEX_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /Op /I "..\..\include" /I "..\common" /D "_DEBUG" /D "WIN64" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "U_LAYOUTEX_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 ..\..\lib\icuucd.lib ..\..\lib\iculed.lib /nologo /dll /incremental:no /debug /machine:IX86 /out:"..\..\bin\iculx32d.dll" /implib:"..\..\lib\iculxd.lib" /pdbtype:sept /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "layoutex - Win32 Release" -# Name "layoutex - Win32 Debug" -# Name "layoutex - Win64 Release" -# Name "layoutex - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\LXUtilities.cpp -# End Source File -# Begin Source File - -SOURCE=.\ParagraphLayout.cpp -# End Source File -# Begin Source File - -SOURCE=.\RunArrays.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\LXUtilities.h -# End Source File -# Begin Source File - -SOURCE=.\layout\ParagraphLayout.h - -!IF "$(CFG)" == "layoutex - Win32 Release" - -# Begin Custom Build -InputPath=.\layout\ParagraphLayout.h - -"..\..\include\layout\ParagraphLayout.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layoutex - Win32 Debug" - -# Begin Custom Build -InputPath=.\layout\ParagraphLayout.h - -"..\..\include\layout\ParagraphLayout.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layoutex - Win64 Release" - -# Begin Custom Build -InputPath=.\layout\ParagraphLayout.h - -"..\..\include\layout\ParagraphLayout.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layoutex - Win64 Debug" - -# Begin Custom Build -InputPath=.\layout\ParagraphLayout.h - -"..\..\include\layout\ParagraphLayout.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\layout\RunArrays.h - -!IF "$(CFG)" == "layoutex - Win32 Release" - -# Begin Custom Build -InputPath=.\layout\RunArrays.h - -"..\..\include\layout\RunArrays.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layoutex - Win32 Debug" - -# Begin Custom Build -InputPath=.\layout\RunArrays.h - -"..\..\include\layout\RunArrays.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layoutex - Win64 Release" - -# Begin Custom Build -InputPath=.\layout\RunArrays.h - -"..\..\include\layout\RunArrays.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ELSEIF "$(CFG)" == "layoutex - Win64 Debug" - -# Begin Custom Build -InputPath=.\layout\RunArrays.h - -"..\..\include\layout\RunArrays.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\include\layout - -# End Custom Build - -!ENDIF - -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\layoutex.rc -# ADD BASE RSC /l 0x409 -# ADD RSC /l 0x409 /i "..\common" -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/layoutex/layoutex.rc b/icuSources/layoutex/layoutex.rc index 2e1c359c..b9ed308a 100644 --- a/icuSources/layoutex/layoutex.rc +++ b/icuSources/layoutex/layoutex.rc @@ -1,7 +1,7 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. -// Copyright (c) 2001-2003 International Business Machines +// Copyright (c) 2001-2005 International Business Machines // Corporation and others. All Rights Reserved. // #include "../common/msvcres.h" @@ -54,8 +54,8 @@ END #define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0" VS_VERSION_INFO VERSIONINFO - FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 - PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0 + FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM + PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,10 +70,10 @@ BEGIN BEGIN BLOCK "00000000" BEGIN - VALUE "Comments", "http://oss.software.ibm.com/icu/\0" + VALUE "Comments", ICU_WEBSITE "\0" VALUE "CompanyName", "IBM Corporation and others\0" VALUE "FileDescription", "IBM ICU Layout Extensions DLL\0" - VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0" #ifdef _DEBUG VALUE "OriginalFilename", "iculx" U_ICU_VERSION_SHORT "d.dll\0") @@ -82,7 +82,7 @@ BEGIN #endif VALUE "PrivateBuild", "\0" VALUE "ProductName", "International Components for Unicode\0" - VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, 0) + VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM) VALUE "SpecialBuild", "\0" END END diff --git a/icuSources/layoutex/layoutex.vcproj b/icuSources/layoutex/layoutex.vcproj index 021a4488..4eae6ffd 100644 --- a/icuSources/layoutex/layoutex.vcproj +++ b/icuSources/layoutex/layoutex.vcproj @@ -20,13 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_USRDLL;U_LAYOUTEX_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;NDEBUG;U_LAYOUTEX_IMPLEMENTATION" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/layoutex.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -38,10 +39,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\iculx32.dll" + OutputFile="..\..\bin\iculx36.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" - ProgramDatabaseFile=".\..\..\lib\iculx32.pdb" + ProgramDatabaseFile=".\..\..\lib\iculx36.pdb" + EnableCOMDATFolding="2" BaseAddress="0x4ac80000" ImportLibrary="..\..\lib\iculx.lib"/> <Tool @@ -83,10 +85,14 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\..\include,..\common" - PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_USRDLL;U_LAYOUTEX_IMPLEMENTATION" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\include;..\common" + PreprocessorDefinitions="WIN32;_DEBUG;U_LAYOUTEX_IMPLEMENTATION" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/layoutex.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -100,11 +106,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - OutputFile="..\..\bin\iculx32d.dll" + OutputFile="..\..\bin\iculx36d.dll" LinkIncremental="2" SuppressStartupBanner="TRUE" GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\..\..\lib\iculx32d.pdb" + ProgramDatabaseFile=".\..\..\lib\iculx36d.pdb" BaseAddress="0x4ac80000" ImportLibrary="..\..\lib\iculxd.lib"/> <Tool diff --git a/icuSources/runConfigureICU b/icuSources/runConfigureICU index e1986053..c59e507f 100755 --- a/icuSources/runConfigureICU +++ b/icuSources/runConfigureICU @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 1999-2004, International Business Machines Corporation and +# Copyright (c) 1999-2006, International Business Machines Corporation and # others. All Rights Reserved. # runConfigureICU: This script will run the "configure" script for the appropriate platform @@ -29,32 +29,26 @@ Options: -h, --help Print this message and exit The following names can be supplied as the argument for platform: - AIX4.3xlC Use IBM's xlC on AIX 4.3 - AIX4.3xlC_nothreads Use IBM's xlC on AIX 4.3 with no multithreading - AIX4.3VA Use IBM's Visual Age xlC_r compiler on AIX 4.3 - AIXGCC Use GCC on AIX - ALPHA/LINUXGCC Use GCC on Alpha/Linux systems - ALPHA/LINUXCCC Use Compaq C compiler on Alpha/Linux systems - BeOS Use the GNU C++ compiler on BeOS - Cygwin Use the GNU C++ compiler on Cygwin - Cygwin/MSVC Use the Microsoft Visual C++ compiler on Cygwin - FreeBSD Use the GNU C++ compiler on Free BSD - HP-UX11ACC Use the Advanced C++ compiler on HP-UX 11 - HP-UX11CC Use HP's C++ compiler on HP-UX 11 - LinuxRedHat Use the GNU C++ compiler on Linux - LINUX/ECC Use the Intel ECC compiler on Linux - LINUX/ICC Use the Intel ICC compiler on Linux - LINUX/VA Use IBM's Visual Age compiler on Power PC Linux - MacOSX Use the GNU C++ compiler on MacOS X (Darwin) - QNX Use QNX's QCC compiler on QNX/Neutrino - SOLARISCC Use Sun's CC compiler on Solaris - SOLARISCC/W4.2 Use Sun's Workshop 4.2 CC compiler on Solaris - SOLARISGCC Use the GNU C++ compiler on Solaris - SOLARISX86 Use Sun's CC compiler on Solaris x86 - TRU64V5.1/CXX Use Compaq's cxx compiler on Tru64 (OSF) - zOS Use IBM's cxx compiler on z/OS (os/390) - zOSV1R2 Use IBM's cxx compiler for z/OS 1.2 - OS390V2R10 Use IBM's cxx compiler for OS/390 2.10 + AIX Use the IBM Visual Age xlc_r/xlC_r compilers on AIX + AIX/GCC Use the GNU gcc/g++ compilers on AIX + BeOS Use the GNU gcc/g++ compilers on BeOS + Cygwin Use the GNU gcc/g++ compilers on Cygwin + Cygwin/MSVC Use the Microsoft Visual C++ compiler on Cygwin + Cygwin/ICL Use the Intel C++ compiler on Cygwin + FreeBSD Use the GNU gcc/g++ compilers on Free BSD + HP-UX/ACC Use the HP ANSI C/Advanced C++ compilers on HP-UX 11 + Linux Use the GNU gcc/g++ compilers on Linux + Linux/ECC Use the Intel ECC compiler on Linux + Linux/ICC Use the Intel ICC compiler on Linux + Linux/VA Use the IBM Visual Age compiler on Power PC Linux + MacOSX Use the GNU gcc/g++ compilers on MacOS X (Darwin) + QNX Use the QNX QCC compiler on QNX/Neutrino + Solaris Use the Sun cc/CC compilers on Solaris + Solaris/GCC Use the GNU gcc/g++ compilers on Solaris + SolarisX86 Use the Sun cc/CC compilers on Solaris x86 + TRU64V5.1/CXX Use the Compaq cxx compiler on Tru64 (OSF) + zOS Use the IBM cxx compiler on z/OS (os/390) + zOSV1R2 Use the IBM cxx compiler for z/OS 1.2 EOE fi @@ -126,84 +120,46 @@ then fi case $platform in - AIX4.3xlC) - THE_OS=AIX - THE_COMP="xlC_r" - CC=/usr/ibmcxx/bin/xlc_r; export CC - CXX=/usr/ibmcxx/bin/xlC_r; export CXX - RELEASE_CFLAGS="-O -qmaxmem=-1" - RELEASE_CXXFLAGS="-O -qmaxmem=-1" - ;; - AIX4.3xlC_nothreads) - THE_OS=AIX - THE_COMP="xlC" - CC=/usr/ibmcxx/bin/xlc; export CC - CXX=/usr/ibmcxx/bin/xlC; export CXX - AIX_SHLIB=/usr/ibmcxx/bin/makeC++SharedLib; export AIX_SHLIB - RELEASE_CFLAGS="-O -qmaxmem=-1" - RELEASE_CXXFLAGS="-O -qmaxmem=-1" - OPTS="$OPTS --enable-threads=no" - ;; - AIX4.3VA) + AIX) THE_OS=AIX THE_COMP="xlC_r" CC=`which xlc_r`; export CC CXX=`which xlC_r`; export CXX RELEASE_CFLAGS="-O2 -qmaxmem=-1" RELEASE_CXXFLAGS="-O2 -qmaxmem=-1" - #LDFLAGS=-L/usr/lpp/xlC/lib; export LDFLAGS ;; -# For no threads use --enable-threads=no. Visual Age makes no distinction between xlC and xlC_r or any other _r programs. - AIXGCC) + AIX/GCC) THE_OS=AIX - THE_COMP="gcc" - CC=`which gcc`; export CC - CXX=`which g++`; export CXX - ;; - SOLARISX86) - THE_OS="SOLARIS X86" - THE_COMP="Sun's CC" - CC=`which cc`; export CC - CXX=`which CC`; export CXX - CXX_FLAGS="-w";export CXX_FLAGS - C_FLAGS="-w";export C_FLAGS - LDFLAGS="-L -lCrun";export LDFLAGS - RELEASE_CFLAGS=-xO3 - RELEASE_CXXFLAGS=-O3 + THE_COMP="the GNU C++" + CC=gcc; export CC + CXX=g++; export CXX ;; - SOLARISCC) + Solaris) THE_OS=SOLARIS THE_COMP="Sun's CC" CC=`which cc`; export CC CXX=`which CC`; export CXX - RELEASE_CFLAGS=-xO4 - RELEASE_CXXFLAGS=-O4 + RELEASE_CFLAGS="-xO4 -xlibmil" + RELEASE_CXXFLAGS="-O4 -xlibmil" ;; - SOLARISCC/W4.2) + Solaris/GCC) THE_OS=SOLARIS + THE_COMP="the GNU C++" + CC=gcc; export CC + CXX=g++; export CXX + RELEASE_CFLAGS=-O1 + RELEASE_CXXFLAGS=-O3 + ;; + SolarisX86) + THE_OS="SOLARIS X86" THE_COMP="Sun's CC" CC=`which cc`; export CC CXX=`which CC`; export CXX - RELEASE_CFLAGS=-x04 - RELEASE_CXXFLAGS="-O4 +d" - ;; - SOLARISGCC) - THE_OS=SOLARIS - THE_COMP="the GNU C++" - CXXFLAGS="$CXXFLAGS -I/usr/local/include/g++"; export CXXFLAGS - LDFLAGS="$LDFLAGS -R/usr/local/lib"; export LDFLAGS - RELEASE_CXXFLAGS=-O - RELEASE_CFLAGS=-O3 - ;; - HP-UX11CC) - THE_OS="HP-UX 11" - THE_COMP="HP's CC" - CC=cc; export CC - CXX=CC; export CXX - RELEASE_CFLAGS='+O2 +Ofltacc' - RELEASE_CXXFLAGS='+O2 +Ofltacc' + LDFLAGS="-L -lCrun";export LDFLAGS + RELEASE_CFLAGS=-xO3 + RELEASE_CXXFLAGS=-O3 ;; - HP-UX11ACC) + HP-UX/ACC) THE_OS="HP-UX 11" THE_COMP="aCC" CC=cc; export CC @@ -211,33 +167,7 @@ case $platform in RELEASE_CFLAGS='+O2 +Ofltacc' RELEASE_CXXFLAGS='+O2 +Ofltacc' ;; - TRU64V5.1/CXX) - THE_OS="OSF1" - THE_COMP="Compaq cxx" - CC=cc; export CC - CXX=cxx; export CXX - ;; - ALPHA/LINUXCCC) - THE_OS="Linux" - THE_COMP="Compaq's CC" - CC=ccc; export CC - CXX=cxx; export CXX - RELEASE_CFLAGS='-O4' - RELEASE_CXXFLAGS='-O4' - ;; - ALPHA/LINUXGCC) - THE_OS="Linux" - THE_COMP="the GNU C++" - CC=gcc; export CC - CXX=g++; export CXX - ;; - LinuxRedHat*) - THE_OS="Linux" - THE_COMP="the GNU C++" - CC=gcc; export CC - CXX=g++; export CXX - ;; - LINUX/ECC) + Linux/ECC) THE_OS="Linux" THE_COMP="Intel ECC 7.1" CC=ecc; export CC @@ -245,15 +175,15 @@ case $platform in RELEASE_CFLAGS='-O2' RELEASE_CXXFLAGS='-O2' ;; - LINUX/ICC) + Linux/ICC) THE_OS="Linux" - THE_COMP="Intel ICC 6.0" - CC=icc; export CC - CXX=icpc; export CXX - RELEASE_CFLAGS='-O0' - RELEASE_CXXFLAGS='-O0' + THE_COMP="Intel ICC 9.0" + CC=`which icc`; export CC + CXX=`which icpc`; export CXX + RELEASE_CFLAGS='-O' + RELEASE_CXXFLAGS='-O' ;; - LINUX/VA) + Linux/VA) THE_OS="Linux" THE_COMP="IBM Visual Age C++ Compiler" CC=`which xlc_r`; export CC @@ -261,6 +191,12 @@ case $platform in RELEASE_CFLAGS="-O2 -qmaxmem=-1" RELEASE_CXXFLAGS="-O2 -qmaxmem=-1" ;; + Linux*) + THE_OS="Linux" + THE_COMP="the GNU C++" + CC=gcc; export CC + CXX=g++; export CXX + ;; Cygwin) THE_OS="Cygwin" THE_COMP="the GNU C++" @@ -272,11 +208,23 @@ case $platform in THE_COMP="Microsoft Visual C++" CC=cl; export CC CXX=cl; export CXX - RELEASE_CFLAGS='/O2 /Ob2' - RELEASE_CXXFLAGS='/O2 /Ob2' - # The real debug flags are defined by the mh file because configure can't handle them. - DEBUG_CFLAGS= - DEBUG_CXXFLAGS= + RELEASE_CFLAGS='/O2 /Ob2 /Op' + RELEASE_CXXFLAGS='/O2 /Ob2 /Op' + DEBUG_CFLAGS='/Zi' + DEBUG_CXXFLAGS='/Zi' + DEBUG_LDFLAGS='/DEBUG' + ;; + Cygwin/ICL) + THE_OS="Windows with Cygwin" + THE_COMP="Intel C++" + CC=icl; export CC + CXX=icl; export CXX + # The Intel compiler has optimization bugs. So we disable optimization. + RELEASE_CFLAGS='/Od' + RELEASE_CXXFLAGS='/Od' + DEBUG_CFLAGS='/Zi' + DEBUG_CXXFLAGS='/Zi' + DEBUG_LDFLAGS='/DEBUG' ;; MacOSX) THE_OS="MacOS X (Darwin)" @@ -290,6 +238,12 @@ case $platform in CC=gcc; export CC CXX=g++; export CXX ;; + TRU64V5.1/CXX) + THE_OS="OSF1" + THE_COMP="Compaq cxx" + CC=cc; export CC + CXX=cxx; export CXX + ;; QNX) THE_OS="QNX" THE_COMP="QNX cc" @@ -313,11 +267,11 @@ case $platform in ;; zOS) THE_OS="z/OS (OS/390)" - THE_COMP="z/OS 1.2 (through OS/390 v2r10) C/C++" + THE_COMP="z/OS C/C++" CC=cc; export CC CXX=cxx; export CXX - export RELEASE_CFLAGS='-2' - export RELEASE_CXXFLAGS='-2' + export RELEASE_CFLAGS="-2 -Wc,'inline(auto,noreport,500,2500)'" + export RELEASE_CXXFLAGS="-2 -Wc,'inline(auto,noreport,300,2500)'" ;; zOSV1R2) THE_OS="z/OS 1.2" @@ -326,24 +280,11 @@ case $platform in CXX=cxx; export CXX export COMPILE_LINK_ENVVAR='_CXX_CVERSION=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000' export _CXX_CVERSION=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000 - export LDFLAGS=-Wl,"compat=pm3" - export CFLAGS='-Wc,"target(zOSV1R2)"' - export CXXFLAGS='-Wc,"target(zOSV1R2)"' - export RELEASE_CFLAGS='-2' - export RELEASE_CXXFLAGS='-2' - ;; - OS390V2R10) - THE_OS="OS/390 2.10" - THE_COMP="OS/390 2.10 C/C++" - CC=cc; export CC - CXX=cxx; export CXX - export COMPILE_LINK_ENVVAR='_CXX_CVERSION=0x220A0000 _C89_CVERSION=0x220A0000 _CC_CVERSION=0x220A0000 _CXX_PVERSION=0x220A0000 _C89_PVERSION=0x220A0000 _CC_PVERSION=0x220A0000' - export _CXX_CVERSION=0x220A0000 _C89_CVERSION=0x220A0000 _CC_CVERSION=0x220A0000 _CXX_PVERSION=0x220A0000 _C89_PVERSION=0x220A0000 _CC_PVERSION=0x220A0000 - export LDFLAGS=-Wl,"compat=pm3" - export CFLAGS='-Wc,"target(OSV2R10)"' - export CXXFLAGS='-Wc,"target(OSV2R10)"' - export RELEASE_CFLAGS='-2' - export RELEASE_CXXFLAGS='-2' + export LDFLAGS="-Wl,'compat=pm3'" + export CFLAGS="-Wc,'target(zOSV1R2)'" + export CXXFLAGS="-Wc,'target(zOSV1R2)'" + export RELEASE_CFLAGS="-2 -Wc,'inline(auto,noreport,500,2500)'" + export RELEASE_CXXFLAGS="-2 -Wc,'inline(auto,noreport,300,2500)'" ;; *) >&2 echo "$me: unrecognized platform \"$platform\" (use --help for help)" diff --git a/icuSources/samples/Makefile.in b/icuSources/samples/Makefile.in index bd708031..03923fec 100644 --- a/icuSources/samples/Makefile.in +++ b/icuSources/samples/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU samples -## Copyright (c) 1999-2003, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Install directory information @@ -20,7 +20,7 @@ include @platform_make_fragment@ CLEANFILES = *~ SUBDIRS = date cal -ALLSUBDIRS = break case datefmt msgfmt numfmt props translit ucnv udata ufortune uresb ustring citer +ALLSUBDIRS = break case csdet datefmt msgfmt numfmt props translit ucnv udata ufortune uresb ustring citer uciter8 ## List of phony targets .PHONY : all all-local all-recursive install install-local \ diff --git a/icuSources/samples/all/all.dsp b/icuSources/samples/all/all.dsp deleted file mode 100644 index 6d4a33be..00000000 --- a/icuSources/samples/all/all.dsp +++ /dev/null @@ -1,85 +0,0 @@ -# Microsoft Developer Studio Project File - Name="all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=all - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "all.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "all.mak" CFG="all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "all - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "all - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "all - Win32 Release" -# Name "all - Win32 Debug" -# End Target -# End Project diff --git a/icuSources/samples/all/all.dsw b/icuSources/samples/all/all.dsw deleted file mode 100644 index d6b139ae..00000000 --- a/icuSources/samples/all/all.dsw +++ /dev/null @@ -1,347 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "all"=.\all.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name cal - End Project Dependency - Begin Project Dependency - Project_Dep_Name date - End Project Dependency - Begin Project Dependency - Project_Dep_Name datefmt - End Project Dependency - Begin Project Dependency - Project_Dep_Name layout - End Project Dependency - Begin Project Dependency - Project_Dep_Name msgfmt - End Project Dependency - Begin Project Dependency - Project_Dep_Name numfmt - End Project Dependency - Begin Project Dependency - Project_Dep_Name props - End Project Dependency - Begin Project Dependency - Project_Dep_Name reader - End Project Dependency - Begin Project Dependency - Project_Dep_Name resources - End Project Dependency - Begin Project Dependency - Project_Dep_Name scsu - End Project Dependency - Begin Project Dependency - Project_Dep_Name search - End Project Dependency - Begin Project Dependency - Project_Dep_Name translit - End Project Dependency - Begin Project Dependency - Project_Dep_Name ucnv - End Project Dependency - Begin Project Dependency - Project_Dep_Name ufortune - End Project Dependency - Begin Project Dependency - Project_Dep_Name uresb - End Project Dependency - Begin Project Dependency - Project_Dep_Name ustring - End Project Dependency - Begin Project Dependency - Project_Dep_Name writer - End Project Dependency - Begin Project Dependency - Project_Dep_Name break - End Project Dependency - Begin Project Dependency - Project_Dep_Name case - End Project Dependency - Begin Project Dependency - Project_Dep_Name strsrch - End Project Dependency - Begin Project Dependency - Project_Dep_Name uciter8 - End Project Dependency - Begin Project Dependency - Project_Dep_Name ugrep - End Project Dependency -}}} - -############################################################################### - -Project: "break"=..\break\break.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "cal"=..\cal\cal.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "case"=..\case\case.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "date"=..\date\date.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "datefmt"=..\datefmt\datefmt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "layout"=..\layout\layout.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "legacy"=..\legacy\legacy.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "msgfmt"=..\msgfmt\msgfmt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "numfmt"=..\numfmt\numfmt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "props"=..\props\props.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "reader"=..\udata\reader.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "resources"=..\uresb\resources.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "strsrch"=..\strsrch\strsrch.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "translit"=..\translit\translit.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "uciter8"=..\uciter8\uciter8.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ucnv"=..\ucnv\ucnv.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ufortune"=..\ufortune\ufortune.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ugrep"=..\ugrep\ugrep.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "uresb"=..\uresb\uresb.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ustring"=..\ustring\ustring.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "writer"=..\udata\writer.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/all/all.sln b/icuSources/samples/all/all.sln index c60a60bd..0ac1779b 100644 --- a/icuSources/samples/all/all.sln +++ b/icuSources/samples/all/all.sln @@ -73,6 +73,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ugrep", "..\ugrep\ugrep.vcp EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uresb", "..\uresb\uresb.vcproj", "{5AD1AEF5-E13B-4411-BDD8-FF735FADAE1B}" ProjectSection(ProjectDependencies) = postProject + {AB75D6BC-660C-4225-A601-CC40294E775E} = {AB75D6BC-660C-4225-A601-CC40294E775E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ustring", "..\ustring\ustring.vcproj", "{3A28CC89-98B6-4E9E-B688-DF5651819759}" @@ -83,6 +84,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "writer", "..\udata\writer.v ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "citer", "..\citer\citer.vcproj", "{247E2681-6C84-408B-B40C-5DB50BC5E18F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "coll", "..\coll\coll.vcproj", "{D7209337-9F39-4BCC-AAEA-982632FD846E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -173,6 +182,14 @@ Global {45D0BE49-661A-41A5-AD81-986655688801}.Debug.Build.0 = Debug|Win32 {45D0BE49-661A-41A5-AD81-986655688801}.Release.ActiveCfg = Release|Win32 {45D0BE49-661A-41A5-AD81-986655688801}.Release.Build.0 = Release|Win32 + {247E2681-6C84-408B-B40C-5DB50BC5E18F}.Debug.ActiveCfg = Debug|Win32 + {247E2681-6C84-408B-B40C-5DB50BC5E18F}.Debug.Build.0 = Debug|Win32 + {247E2681-6C84-408B-B40C-5DB50BC5E18F}.Release.ActiveCfg = Release|Win32 + {247E2681-6C84-408B-B40C-5DB50BC5E18F}.Release.Build.0 = Release|Win32 + {D7209337-9F39-4BCC-AAEA-982632FD846E}.Debug.ActiveCfg = Debug|Win32 + {D7209337-9F39-4BCC-AAEA-982632FD846E}.Debug.Build.0 = Debug|Win32 + {D7209337-9F39-4BCC-AAEA-982632FD846E}.Release.ActiveCfg = Release|Win32 + {D7209337-9F39-4BCC-AAEA-982632FD846E}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/icuSources/samples/break/break.dsp b/icuSources/samples/break/break.dsp deleted file mode 100644 index c660974e..00000000 --- a/icuSources/samples/break/break.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="break" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=break - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "break.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "break.mak" CFG="break - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "break - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "break - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "break - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "break - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "break - Win32 Release" -# Name "break - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\break.cpp -# End Source File -# Begin Source File - -SOURCE=.\ubreak.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/break/break.dsw b/icuSources/samples/break/break.dsw deleted file mode 100644 index e2f6cf5c..00000000 --- a/icuSources/samples/break/break.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "break"=.\break.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/break/break.vcproj b/icuSources/samples/break/break.vcproj index 7e006f31..f94feab1 100644 --- a/icuSources/samples/break/break.vcproj +++ b/icuSources/samples/break/break.vcproj @@ -26,6 +26,7 @@ StringPooling="TRUE" RuntimeLibrary="4" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/break.pch" AssemblerListingLocation=".\Release/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuuc.lib icuin.lib" OutputFile=".\Release/break.exe" LinkIncremental="1" @@ -89,6 +89,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS" BasicRuntimeChecks="3" RuntimeLibrary="5" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/break.pch" AssemblerListingLocation=".\Debug/" @@ -102,7 +103,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuucd.lib icuind.lib" OutputFile=".\Debug/break.exe" LinkIncremental="2" diff --git a/icuSources/samples/break/readme.txt b/icuSources/samples/break/readme.txt index 58227505..dbb69a5a 100644 --- a/icuSources/samples/break/readme.txt +++ b/icuSources/samples/break/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. break: Boundary Analysis This sample demonstrates @@ -8,12 +8,12 @@ This sample demonstrates Files: break.cpp Main source file in C++ ubreak.c Main source file in C - break.dsw Windows MSVC workspace. Double-click this to get started. - break.dsp Windows MSVC project file + break.sln Windows MSVC workspace. Double-click this to get started. + break.vcproj Windows MSVC project file To Build break on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\break\break.dsw + 2. In MSVC, open the workspace file icu\samples\break\break.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/cal/cal.dsp b/icuSources/samples/cal/cal.dsp deleted file mode 100644 index 807f6fb3..00000000 --- a/icuSources/samples/cal/cal.dsp +++ /dev/null @@ -1,110 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cal" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cal - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "cal.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "cal.mak" CFG="cal - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cal - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cal - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cal - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "cal - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "cal - Win32 Release" -# Name "cal - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\cal.c -# End Source File -# Begin Source File - -SOURCE=.\uprint.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\uprint.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/cal/cal.dsw b/icuSources/samples/cal/cal.dsw deleted file mode 100644 index a662a4bf..00000000 --- a/icuSources/samples/cal/cal.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "cal"=.\cal.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/cal/cal.vcproj b/icuSources/samples/cal/cal.vcproj index 99b1886a..15269509 100644 --- a/icuSources/samples/cal/cal.vcproj +++ b/icuSources/samples/cal/cal.vcproj @@ -27,6 +27,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/cal.pch" AssemblerListingLocation=".\Release/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuuc.lib icuin.lib" OutputFile=".\Release/cal.exe" LinkIncremental="1" @@ -86,6 +86,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/cal.pch" AssemblerListingLocation=".\Debug/" @@ -100,7 +101,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuucd.lib icuind.lib" OutputFile=".\Debug/cal.exe" LinkIncremental="2" diff --git a/icuSources/samples/cal/readme.txt b/icuSources/samples/cal/readme.txt index e291cd6b..69d08e88 100644 --- a/icuSources/samples/cal/readme.txt +++ b/icuSources/samples/cal/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. icucal: a sample program which displays the calendar. This sample demonstrates @@ -10,12 +10,12 @@ Files: cal.c Main source file uprint.h codepage output convenience header uprint.h codepage output convenience implementation - cal.dsw Windows MSVC workspace. Double-click this to get started. - cal.dsp Windows MSVC project file + cal.sln Windows MSVC workspace. Double-click this to get started. + cal.vcproj Windows MSVC project file To Build icucal on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\cal\cal.dsw + 2. In MSVC, open the workspace file icu\samples\cal\cal.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/case/case.dsp b/icuSources/samples/case/case.dsp deleted file mode 100644 index b26014ea..00000000 --- a/icuSources/samples/case/case.dsp +++ /dev/null @@ -1,106 +0,0 @@ -# Microsoft Developer Studio Project File - Name="case" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=case - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "case.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "case.mak" CFG="case - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "case - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "case - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "case - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib icuio.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "case - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".." /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icuiod.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "case - Win32 Release" -# Name "case - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\case.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucase.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/case/case.dsw b/icuSources/samples/case/case.dsw deleted file mode 100644 index db415edf..00000000 --- a/icuSources/samples/case/case.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "case"=.\case.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/case/case.vcproj b/icuSources/samples/case/case.vcproj index 32e064bc..e557583d 100644 --- a/icuSources/samples/case/case.vcproj +++ b/icuSources/samples/case/case.vcproj @@ -25,6 +25,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="5" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/case.pch" AssemblerListingLocation=".\Debug/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuucd.lib icuind.lib icuiod.lib" OutputFile=".\Debug/case.exe" LinkIncremental="2" @@ -87,6 +87,7 @@ StringPooling="TRUE" RuntimeLibrary="4" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/case.pch" AssemblerListingLocation=".\Release/" @@ -99,7 +100,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuuc.lib icuin.lib icuio.lib" OutputFile=".\Release/case.exe" LinkIncremental="1" diff --git a/icuSources/samples/case/readme.txt b/icuSources/samples/case/readme.txt index 6a4a5591..893bb575 100644 --- a/icuSources/samples/case/readme.txt +++ b/icuSources/samples/case/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2003, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2003-2005, International Business Machines Corporation and others. All Rights Reserved. case: case mapping This sample demonstrates @@ -8,12 +8,13 @@ This sample demonstrates Files: case.cpp Main source file in C++ ucase.c Main source file in C - case.dsp Windows MSVC project file + case.sln Windows MSVC workspace. Double-click this to get started. + case.vcproj Windows MSVC project file To Build case on Windows 1. Install and build ICU - 2. In MSVC, open the project file icu\samples\case\case.dsp - (or, use the workspace All, in icu\samples\all\all.dsw ) + 2. In MSVC, open the solution file icu\samples\case\case.sln + (or, use the workspace All, in icu\samples\all\all.sln ) 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/citer/Makefile b/icuSources/samples/citer/Makefile new file mode 100644 index 00000000..712272a1 --- /dev/null +++ b/icuSources/samples/citer/Makefile @@ -0,0 +1,22 @@ +# Copyright (c) 2003-2005 IBM, Inc. and others +# sample code makefile + +# Usage: +# - configure, build, install ICU (make install) +# - make sure "icu-config" (in the ICU installed bin directory) is on +# the path +# - do 'make' in this directory + +# Name of your target +TARGET=citer + +# All object files (C or C++) +OBJECTS=citer.o + +# Load in standard makefile definitions +include ../defs.mk + +LDFLAGS += $(LDFLAGS_USTDIO) + +# the actual rules (this is a simple sample) +include ../rules.mk diff --git a/icuSources/samples/citer/citer.cpp b/icuSources/samples/citer/citer.cpp index 7561e74d..cc7fa5cb 100644 --- a/icuSources/samples/citer/citer.cpp +++ b/icuSources/samples/citer/citer.cpp @@ -1,8 +1,8 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2003, International Business Machines -* Corporation and others. All Rights Reserved. +* Copyright (C) 2002-2005, International Business Machines +* Corporation and others. All Rights Reserved. * ******************************************************************************* */ @@ -11,173 +11,185 @@ #include "unicode/schriter.h" #include "unicode/ustring.h" #include <stdio.h> -#include <iostream.h> #include <unicode/brkiter.h> +#include <unicode/ustdio.h> #include <stdlib.h> -void printUnicodeString(const UnicodeString &s) { - char charBuf[1000]; - s.extract(0, s.length(), charBuf, sizeof(charBuf)-1, 0); - charBuf[sizeof(charBuf)-1] = 0; - cout << charBuf; +static UFILE *out; + +void printUnicodeString(const UnicodeString &s) +{ + u_fprintf(out, "%S", s); } -void printUChar(UChar32 ch) { - char charBuf[1000]; - charBuf[sizeof(charBuf)-1] = 0; - if(ch < 127) { - cout << (char) ch; - } else if (ch == CharacterIterator::DONE) { - cout << "[CharacterIterator::DONE = 0xFFFF]"; - } else { - cout << "[" << ch << "]"; - } +void printUChar(UChar32 ch) +{ + if(ch < 127) { + u_fprintf(out, "%C", (UChar) ch); + } else if (ch == CharacterIterator::DONE) { + u_fprintf(out, "[CharacterIterator::DONE = 0xFFFF]"); + } else { + u_fprintf(out, "[%X]", ch); + } } class Test { public: - void TestUChariter(); - void TestStringiter(); + void TestUChariter(); + void TestStringiter(); }; void Test::TestUChariter() { - const char testChars[] = "Now is the time for all good men to come " - "to the aid of their country."; - - UnicodeString testString(testChars,""); - const UChar *testText = testString.getTerminatedBuffer(); - - UCharCharacterIterator iter(testText, u_strlen(testText)); - UCharCharacterIterator* test2 = (UCharCharacterIterator*)iter.clone(); - - cout << "testText = " << testChars; - - if (iter != *test2 ) { - printf("clone() or equals() failed: Two clones tested unequal\n"); - } - - UnicodeString result1, result2; - // getting and comparing the text within the iterators - iter.getText(result1); - test2->getText(result2); - if (result1 != result2) { - printf("iter.getText() != clone.getText()\n"); - } - - cout << endl; - // Demonstrates seeking forward using the iterator. - cout << "Forward = "; - - UChar c = iter.first(); - printUChar(c); // The first char - int32_t i = 0; - - if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) { - printf("startIndex() or endIndex() failed\n"); - } - - - // Testing forward iteration... - do { - if (c == CharacterIterator::DONE && i != u_strlen(testText)) { - printf("Iterator reached end prematurely"); - } - else if (c != testText[i]) { - printf("Character mismatch at position %d\n" + i); - } - if (iter.current() != c) { - printf("current() isn't working right"); - } - if (iter.getIndex() != i) { - printf("getIndex() isn't working right\n"); + const char testChars[] = "Now is the time for all good men to come " + "to the aid of their country."; + + UnicodeString testString(testChars,""); + const UChar *testText = testString.getTerminatedBuffer(); + + UCharCharacterIterator iter(testText, u_strlen(testText)); + UCharCharacterIterator* test2 = (UCharCharacterIterator*)iter.clone(); + + u_fprintf(out, "testText = %s", testChars); + + if (iter != *test2 ) { + printf("clone() or equals() failed: Two clones tested unequal\n"); } - if (c != CharacterIterator::DONE) { - c = iter.next(); - i++; + + UnicodeString result1, result2; + // getting and comparing the text within the iterators + iter.getText(result1); + test2->getText(result2); + if (result1 != result2) { + printf("iter.getText() != clone.getText()\n"); + } + + u_fprintf(out, "\n"); + + // Demonstrates seeking forward using the iterator. + u_fprintf(out, "Forward = "); + + UChar c = iter.first(); + printUChar(c); // The first char + int32_t i = 0; + + if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) { + printf("startIndex() or endIndex() failed\n"); } - cout << "|"; - printUChar(c); + + // Testing forward iteration... + do { + if (c == CharacterIterator::DONE && i != u_strlen(testText)) { + printf("Iterator reached end prematurely"); + } + else if (c != testText[i]) { + printf("Character mismatch at position %d\n" + i); + } + if (iter.current() != c) { + printf("current() isn't working right"); + } + if (iter.getIndex() != i) { + printf("getIndex() isn't working right\n"); + } + if (c != CharacterIterator::DONE) { + c = iter.next(); + i++; + } - } while (c != CharacterIterator::DONE); - - delete test2; - cout << endl; + u_fprintf(out, "|"); + printUChar(c); + + } while (c != CharacterIterator::DONE); + + delete test2; + u_fprintf(out, "\n"); } void Test::TestStringiter() { - const char testChars[] = "Now is the time for all good men to come " - "to the aid of their country."; - - UnicodeString testString(testChars,""); - const UChar *testText = testString.getTerminatedBuffer(); - - StringCharacterIterator iter(testText, u_strlen(testText)); - StringCharacterIterator* test2 = (StringCharacterIterator*)iter.clone(); - - if (iter != *test2 ) { - printf("clone() or equals() failed: Two clones tested unequal\n"); - } - - UnicodeString result1, result2; - // getting and comparing the text within the iterators - iter.getText(result1); - test2->getText(result2); - if (result1 != result2) { - printf("getText() failed\n"); - } - - cout << "Backwards: "; - UChar c = iter.last(); - printUChar(c); - int32_t i = iter.endIndex(); - i--; // already printed out the last char - if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) { - printf("startIndex() or endIndex() failed\n"); - } - - // Testing backward iteration over a range... - do { - if (c == CharacterIterator::DONE) { - printf("Iterator reached end prematurely\n"); - } - else if (c != testText[i]) { - printf("Character mismatch at position %d\n" + i); - } - if (iter.current() != c) { - printf("current() isn't working right\n"); - } - if (iter.getIndex() != i) { - printf("getIndex() isn't working right [%d should be %d]\n", iter.getIndex(), i); + const char testChars[] = "Now is the time for all good men to come " + "to the aid of their country."; + + UnicodeString testString(testChars,""); + const UChar *testText = testString.getTerminatedBuffer(); + + StringCharacterIterator iter(testText, u_strlen(testText)); + StringCharacterIterator* test2 = (StringCharacterIterator*)iter.clone(); + + if (iter != *test2 ) { + printf("clone() or equals() failed: Two clones tested unequal\n"); } - if (c != CharacterIterator::DONE) { - c = iter.previous(); - i--; + + UnicodeString result1, result2; + // getting and comparing the text within the iterators + iter.getText(result1); + test2->getText(result2); + if (result1 != result2) { + printf("getText() failed\n"); } - cout << "|"; + + u_fprintf(out, "Backwards: "); + + UChar c = iter.last(); + int32_t i = iter.endIndex(); + printUChar(c); - } while (c != CharacterIterator::DONE); + i--; // already printed out the last char + + if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) { + printf("startIndex() or endIndex() failed\n"); + } + + // Testing backward iteration over a range... + do { + if (c == CharacterIterator::DONE) { + printf("Iterator reached end prematurely\n"); + } + else if (c != testText[i]) { + printf("Character mismatch at position %d\n" + i); + } + if (iter.current() != c) { + printf("current() isn't working right\n"); + } + if (iter.getIndex() != i) { + printf("getIndex() isn't working right [%d should be %d]\n", iter.getIndex(), i); + } + if (c != CharacterIterator::DONE) { + c = iter.previous(); + i--; + } - cout << endl; - delete test2; + u_fprintf(out, "|"); + printUChar(c); + } while (c != CharacterIterator::DONE); + + u_fprintf(out, "\n"); + delete test2; } /* Creating and using text boundaries */ int main( void ) { - cout << "ICU Iterator Sample Program (C++)\n\n"; - - Test t; - - cout << endl; - cout << "Test::TestUCharIter()" << endl; - t.TestUChariter(); - cout << "-----" << endl; - cout << "Test::TestStringchariter()" << endl; - t.TestStringiter(); - cout << "-----" << endl; - - return 0; + UErrorCode status = U_ZERO_ERROR; + + out = u_finit(stdout, NULL, NULL); + + u_fprintf(out, "ICU Iteration Sample Program (C++)\n\n"); + + Test t; + + u_fprintf(out, "\n"); + u_fprintf(out, "Test::TestUCharIter()\n"); + + t.TestUChariter(); + + u_fprintf(out, "-----\n"); + u_fprintf(out, "Test::TestStringchariter()\n"); + + t.TestStringiter(); + + u_fprintf(out, "-----\n"); + + return 0; } diff --git a/icuSources/samples/citer/citer.vcproj b/icuSources/samples/citer/citer.vcproj new file mode 100644 index 00000000..b4b58b5c --- /dev/null +++ b/icuSources/samples/citer/citer.vcproj @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="citer" + ProjectGUID="{247E2681-6C84-408B-B40C-5DB50BC5E18F}" + Keyword="Win32Proj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\..\include" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="5" + TreatWChar_tAsBuiltInType="TRUE" + UsePrecompiledHeader="2" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icuind.lib icuiod.lib" + OutputFile="./Debug/citer.exe" + LinkIncremental="2" + AdditionalLibraryDirectories="..\..\..\lib" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/citer.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories="..\..\..\include" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + RuntimeLibrary="4" + TreatWChar_tAsBuiltInType="TRUE" + UsePrecompiledHeader="2" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icuin.lib icuio.lib" + OutputFile="./Release/citer.exe" + LinkIncremental="1" + AdditionalLibraryDirectories="..\..\..\lib" + GenerateDebugInformation="TRUE" + SubSystem="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath=".\citer.cpp"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/samples/citer/readme.txt b/icuSources/samples/citer/readme.txt index 2519e742..6eb8cdb2 100644 --- a/icuSources/samples/citer/readme.txt +++ b/icuSources/samples/citer/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2003, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2003-2005, International Business Machines Corporation and others. All Rights Reserved. citer: Character Iteration This sample demonstrates @@ -7,12 +7,12 @@ This sample demonstrates Files: citer.cpp Main source file in C++ - citer.dsw Windows MSVC workspace. Double-click this to get started. - citer.dsp Windows MSVC project file + citer.sln Windows MSVC workspace. Double-click this to get started. + citer.vcproj Windows MSVC project file To Build citer on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\citer\citer.dsw + 2. In MSVC, open the workspace file icu\samples\citer\citer.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/coll/coll.cpp b/icuSources/samples/coll/coll.cpp index 402ba4b4..28e52392 100644 --- a/icuSources/samples/coll/coll.cpp +++ b/icuSources/samples/coll/coll.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (C) 2002-2003 IBM, Inc. All Rights Reserved. + * Copyright (C) 2002-2006 IBM, Inc. All Rights Reserved. * ********************************************************************/ @@ -86,7 +86,8 @@ UBool processOptions(int argc, const char **argv, OptSpec opts[]) { for (int argNum = 1; argNum < argc; argNum ++) { const char *pArgName = argv[argNum]; - for (OptSpec *pOpt = opts; pOpt->name != 0; pOpt ++) { + OptSpec *pOpt; + for (pOpt = opts; pOpt->name != 0; pOpt ++) { if (strcmp(pOpt->name, pArgName) == 0) { switch (pOpt->type) { case OptSpec::FLAG: diff --git a/icuSources/samples/coll/coll.dsp b/icuSources/samples/coll/coll.dsp deleted file mode 100644 index 0d20b000..00000000 --- a/icuSources/samples/coll/coll.dsp +++ /dev/null @@ -1,101 +0,0 @@ -# Microsoft Developer Studio Project File - Name="coll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=coll - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "coll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "coll.mak" CFG="coll - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "coll - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "coll - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "coll - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuind.lib icuucd.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "coll - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuind.lib icuucd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "coll - Win32 Release" -# Name "coll - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\coll.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/coll/coll.dsw b/icuSources/samples/coll/coll.dsw deleted file mode 100644 index 03f02a6c..00000000 --- a/icuSources/samples/coll/coll.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "coll"=.\coll.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/coll/coll.vcproj b/icuSources/samples/coll/coll.vcproj index 3d117873..6b34f962 100644 --- a/icuSources/samples/coll/coll.vcproj +++ b/icuSources/samples/coll/coll.vcproj @@ -1,8 +1,9 @@ -<?xml version="1.0" encoding = "Windows-1252"?> +<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="7.00" + Version="7.10" Name="coll" + ProjectGUID="{D7209337-9F39-4BCC-AAEA-982632FD846E}" SccProjectName="" SccLocalPath=""> <Platforms> @@ -26,6 +27,7 @@ StringPooling="TRUE" RuntimeLibrary="0" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/coll.pch" AssemblerListingLocation=".\Release/" @@ -38,7 +40,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuind.lib icuucd.lib" OutputFile=".\Release/coll.exe" LinkIncremental="1" @@ -61,8 +62,14 @@ Culture="1033"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> <Configuration Name="Debug|Win32" @@ -79,6 +86,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="1" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/coll.pch" AssemblerListingLocation=".\Debug/" @@ -93,7 +101,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuind.lib icuucd.lib" OutputFile=".\Debug/coll.exe" LinkIncremental="2" @@ -117,10 +124,18 @@ Culture="1033"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> </Configurations> + <References> + </References> <Files> <Filter Name="Source Files" diff --git a/icuSources/samples/coll/readme.txt b/icuSources/samples/coll/readme.txt index 827f5de0..b5aa4acf 100644 --- a/icuSources/samples/coll/readme.txt +++ b/icuSources/samples/coll/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. coll: a sample program which compares 2 strings with a user-defined collator. This sample demonstrates @@ -7,12 +7,12 @@ This sample demonstrates Files: coll.c Main source file - coll.dsw Windows MSVC workspace. Double-click this to get started. - coll.dsp Windows MSVC project file + coll.sln Windows MSVC workspace. Double-click this to get started. + coll.vcproj Windows MSVC project file To Build coll on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\coll\coll.dsw + 2. In MSVC, open the workspace file icu\samples\coll\coll.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/csdet/Makefile.in b/icuSources/samples/csdet/Makefile.in new file mode 100644 index 00000000..3f0963df --- /dev/null +++ b/icuSources/samples/csdet/Makefile.in @@ -0,0 +1,93 @@ +## Makefile.in for ICU - samples/csdet +## Copyright (c) 2006, International Business Machines Corporation and +## others. All Rights Reserved. + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../.. + +include $(top_builddir)/icudefs.mk + +## Platform-specific setup +include @platform_make_fragment@ + +## Build directory information +subdir = samples/csdet + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) + +## Target information +TARGET = csdet + +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir) + +LIBS = $(LIBICUUC) $(LIBICUI18N) @LIBS@ @LIB_M@ + + +OBJECTS=csdet.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) + +install-local: + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(OBJECTS) $(TARGET) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: all-local + $(INVOKE) ./$(TARGET) $(top_srcdir)/extra/uconv/samples/danish-ISO-8859-1.txt + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +# The following two rules make it possible to +# compile scrptrun.cpp from the extra/scrptrun directory. +# they were copied from the default rules in mh-linux which +# is probably OK because this sample will only run on Linux... +scrptrun.d: $(top_srcdir)/extra/scrptrun/scrptrun.cpp + $(SHELL) -ec '$(GEN_DEPS.cc) $< \ + | sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \ + [ -s $@ ] || rm -f $@' + +scrptrun.o: $(top_srcdir)/extra/scrptrun/scrptrun.cpp + $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< + +$(TARGET) : $(OBJECTS) + $(LINK.cc) -o $@ $^ $(LIBS) + +invoke: + ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) $(INVOCATION) + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif diff --git a/icuSources/samples/csdet/csdet.c b/icuSources/samples/csdet/csdet.c new file mode 100644 index 00000000..b0c89f28 --- /dev/null +++ b/icuSources/samples/csdet/csdet.c @@ -0,0 +1,73 @@ +/* + ******************************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ******************************************************************************** + */ + +#include "unicode/utypes.h" +#include "unicode/ucsdet.h" + +#include <string.h> +#include <stdio.h> + +#define BUFFER_SIZE 8192 + +int main(int argc, char *argv[]) +{ + static char buffer[BUFFER_SIZE]; + int32_t arg; + + if( argc <= 1 ) { + printf("Usage: %s [filename]...\n", argv[0]); + return -1; + } + + for(arg = 1; arg < argc; arg += 1) { + FILE *file; + char *filename = argv[arg]; + int32_t inputLength, match, matchCount = 0; + UCharsetDetector* csd; + const UCharsetMatch **csm; + UErrorCode status = U_ZERO_ERROR; + + if (arg > 1) { + printf("\n"); + } + + file = fopen(filename, "rb"); + + if (file == NULL) { + printf("Cannot open file \"%s\"\n\n", filename); + continue; + } + + printf("%s:\n", filename); + + inputLength = (int32_t) fread(buffer, 1, BUFFER_SIZE, file); + + fclose(file); + + csd = ucsdet_open(&status); + ucsdet_setText(csd, buffer, inputLength, &status); + + csm = ucsdet_detectAll(csd, &matchCount, &status); + + for(match = 0; match < matchCount; match += 1) { + const char *name = ucsdet_getName(csm[match], &status); + const char *lang = ucsdet_getLanguage(csm[match], &status); + int32_t confidence = ucsdet_getConfidence(csm[match], &status); + + if (lang == NULL || strlen(lang) == 0) { + lang = "**"; + } + + printf("%s (%s) %d\n", name, lang, confidence); + } + + ucsdet_close(csd); + } + + return 0; +} + diff --git a/icuSources/samples/csdet/csdet.sln b/icuSources/samples/csdet/csdet.sln new file mode 100644 index 00000000..981a69fd --- /dev/null +++ b/icuSources/samples/csdet/csdet.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "csdet", "csdet.vcproj", "{683745AD-3BC2-4B89-898B-93490D7F2757}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {683745AD-3BC2-4B89-898B-93490D7F2757}.Debug.ActiveCfg = Debug|Win32 + {683745AD-3BC2-4B89-898B-93490D7F2757}.Debug.Build.0 = Debug|Win32 + {683745AD-3BC2-4B89-898B-93490D7F2757}.Release.ActiveCfg = Release|Win32 + {683745AD-3BC2-4B89-898B-93490D7F2757}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/icuSources/samples/csdet/csdet.vcproj b/icuSources/samples/csdet/csdet.vcproj new file mode 100644 index 00000000..28df93c1 --- /dev/null +++ b/icuSources/samples/csdet/csdet.vcproj @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="csdet" + ProjectGUID="{683745AD-3BC2-4B89-898B-93490D7F2757}" + Keyword="Win32Proj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="../../../include" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + MinimalRebuild="TRUE" + BasicRuntimeChecks="3" + RuntimeLibrary="5" + TreatWChar_tAsBuiltInType="TRUE" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="4"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icuind.lib" + OutputFile="$(OutDir)/csdet.exe" + LinkIncremental="2" + AdditionalLibraryDirectories="../../../lib" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/csdet.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories="../../../include" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + RuntimeLibrary="4" + TreatWChar_tAsBuiltInType="TRUE" + UsePrecompiledHeader="0" + WarningLevel="3" + Detect64BitPortabilityProblems="TRUE" + DebugInformationFormat="3"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icuin.lib" + OutputFile="$(OutDir)/csdet.exe" + LinkIncremental="1" + AdditionalLibraryDirectories="../../../lib" + GenerateDebugInformation="TRUE" + SubSystem="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath=".\csdet.c"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/samples/date/date.dsp b/icuSources/samples/date/date.dsp deleted file mode 100644 index 9816b413..00000000 --- a/icuSources/samples/date/date.dsp +++ /dev/null @@ -1,110 +0,0 @@ -# Microsoft Developer Studio Project File - Name="date" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=date - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "date.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "date.mak" CFG="date - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "date - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "date - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "date - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "date - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "date - Win32 Release" -# Name "date - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\date.c -# End Source File -# Begin Source File - -SOURCE=.\uprint.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\uprint.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/date/date.dsw b/icuSources/samples/date/date.dsw deleted file mode 100644 index 3cc43d87..00000000 --- a/icuSources/samples/date/date.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "date"=.\date.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/date/date.vcproj b/icuSources/samples/date/date.vcproj index 501da735..bee51c63 100644 --- a/icuSources/samples/date/date.vcproj +++ b/icuSources/samples/date/date.vcproj @@ -26,6 +26,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/date.pch" AssemblerListingLocation=".\Release/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuuc.lib icuin.lib" OutputFile=".\Release/date.exe" LinkIncremental="1" @@ -86,6 +86,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/date.pch" AssemblerListingLocation=".\Debug/" @@ -99,7 +100,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuucd.lib icuind.lib" OutputFile=".\Debug/date.exe" LinkIncremental="2" diff --git a/icuSources/samples/date/readme.txt b/icuSources/samples/date/readme.txt index 64341a31..3ba36d51 100644 --- a/icuSources/samples/date/readme.txt +++ b/icuSources/samples/date/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. icudate: a sample program which displays the current date This sample demonstrates @@ -8,14 +8,14 @@ This sample demonstrates Files: date.c Main source file - uprint.h codepage output convenience header - uprint.h codepage output convenience implementation - date.dsw Windows MSVC workspace. Double-click this to get started. - date.dsp Windows MSVC project file + uprint.h codepage output convenience header + uprint.h codepage output convenience implementation + date.sln Windows MSVC workspace. Double-click this to get started. + date.vcproj Windows MSVC project file To Build icudate on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\date\date.dsw + 2. In MSVC, open the workspace file icu\samples\date\date.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/datecal/Makefile b/icuSources/samples/datecal/Makefile index a368cec7..89e728c8 100644 --- a/icuSources/samples/datecal/Makefile +++ b/icuSources/samples/datecal/Makefile @@ -1,4 +1,4 @@ -# Copyright (c) 2000-2003 IBM, Inc. and others +# Copyright (c) 2000-2006 IBM, Inc. and others # sample code makefile # Usage: @@ -12,7 +12,7 @@ TARGET=datecal # All object files (C or C++) -OBJECTS=datecal.o cdatcal.o +OBJECTS=cal.o ccal.o #### rules # Load in standard makefile definitions diff --git a/icuSources/samples/datefmt/README.TXT b/icuSources/samples/datefmt/README.TXT index edfd311d..2463d645 100644 --- a/icuSources/samples/datefmt/README.TXT +++ b/icuSources/samples/datefmt/README.TXT @@ -1,14 +1,14 @@ -Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. This is an exercise for the ICU Workshop (September 2000). ** Workshop homepage is: - http://oss.software.ibm.com/icu/docs/workshop_2000/agenda.html + http://icu.sourceforge.net/docs/workshop_2000/agenda.html Day 2: September 12th 2000 Pre-requsit: 1. All the hardware and software requirements from Day 1. 2. Attended or fully understand Day 1 material. 3. Read through the ICU user's guide at - http://oss.software.ibm.com/icu/userguide/. + http://icu.sourceforge.net/userguide/. #Date/Time/Number Formatting Support 9:30am - 10:30am @@ -29,7 +29,7 @@ Microsoft Visual C++ 6.0. It should work on other ICU releases and other platforms as well. MSVC: - Open the file "datefmt.dsw" in Microsoft Visual C++. + Open the file "datefmt.sln" in Microsoft Visual C++. Unix: - Build and install ICU with a prefix, for example '--prefix=/home/srl/ICU' diff --git a/icuSources/samples/datefmt/datefmt.dsp b/icuSources/samples/datefmt/datefmt.dsp deleted file mode 100644 index aca57eaa..00000000 --- a/icuSources/samples/datefmt/datefmt.dsp +++ /dev/null @@ -1,106 +0,0 @@ -# Microsoft Developer Studio Project File - Name="datefmt" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=datefmt - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "datefmt.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "datefmt.mak" CFG="datefmt - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "datefmt - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "datefmt - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "datefmt - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "datefmt - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "datefmt - Win32 Release" -# Name "datefmt - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\main.cpp -# End Source File -# Begin Source File - -SOURCE=.\util.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/datefmt/datefmt.dsw b/icuSources/samples/datefmt/datefmt.dsw deleted file mode 100644 index e0f2f0ed..00000000 --- a/icuSources/samples/datefmt/datefmt.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "datefmt"=.\datefmt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/datefmt/datefmt.vcproj b/icuSources/samples/datefmt/datefmt.vcproj index 3ef44c12..d3a83790 100644 --- a/icuSources/samples/datefmt/datefmt.vcproj +++ b/icuSources/samples/datefmt/datefmt.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/datefmt.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuucd.lib icuind.lib" OutputFile=".\Debug/datefmt.exe" LinkIncremental="2" @@ -89,6 +89,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/datefmt.pch" AssemblerListingLocation=".\Release/" @@ -101,7 +102,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="icuuc.lib icuin.lib" OutputFile=".\Release/datefmt.exe" LinkIncremental="1" diff --git a/icuSources/samples/defs.mk b/icuSources/samples/defs.mk index 2e927f20..7b91c4ba 100644 --- a/icuSources/samples/defs.mk +++ b/icuSources/samples/defs.mk @@ -1,4 +1,4 @@ -# Copyright (c) 2002-2004 IBM, Inc. and others +# Copyright (c) 2002-2005 IBM, Inc. and others # Sample code makefile definitions CLEANFILES=*~ $(TARGET).out @@ -14,7 +14,7 @@ LDFLAGS =$(shell icu-config --ldflags) LDFLAGS_USTDIO =$(shell icu-config --ldflags-icuio) INVOKE=$(shell icu-config --invoke) GENRB=$(shell icu-config --invoke=genrb) -GENRBOPT=--package-name $(RESNAME) +GENRBOPT= PKGDATA=$(shell icu-config --invoke=pkgdata) SO=$(shell icu-config --so) PKGDATAOPTS=-v -d . @@ -25,4 +25,4 @@ RESMODE=$(shell icu-config --icudata-mode) ### Project independent things (common) ### We depend on gmake for the bulk of the work -RMV=rm -rf \ No newline at end of file +RMV=rm -rf diff --git a/icuSources/samples/layout/FontMap.GDI b/icuSources/samples/layout/FontMap.GDI index d8bc55f8..198c0221 100644 --- a/icuSources/samples/layout/FontMap.GDI +++ b/icuSources/samples/layout/FontMap.GDI @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2003, International Business Machines +# Copyright (C) 2001-2005, International Business Machines # Corporation and others. All Rights Reserved. # # This is a sample FontMap file for Windows. @@ -6,6 +6,6 @@ # in the "Fonts" folder. DEVANAGARI: Raghindi - THAI: Thonburi + THAI: AngsanaDSE DEFAULT: Code2000 diff --git a/icuSources/samples/layout/FontMap.Gnome b/icuSources/samples/layout/FontMap.Gnome index 51306622..1f57bb48 100644 --- a/icuSources/samples/layout/FontMap.Gnome +++ b/icuSources/samples/layout/FontMap.Gnome @@ -1,8 +1,8 @@ -# Copyright (C) 2001-2004, International Business Machines +# Copyright (C) 2001-2005, International Business Machines # Corporation and others. All Rights Reserved. # This is a sample FontMap file for Linux. # Fonts are specified by file names. DEVANAGARI: raghu.ttf - THAI: THONBURI.TTF + THAI: angsd___.ttf DEFAULT: CODE2000.TTF diff --git a/icuSources/samples/layout/FontMap.cpp b/icuSources/samples/layout/FontMap.cpp index 00e3c4dc..485351b4 100644 --- a/icuSources/samples/layout/FontMap.cpp +++ b/icuSources/samples/layout/FontMap.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** - * Copyright (C) 1998-2003, International Business Machines Corporation and * + * Copyright (C) 1998-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ****************************************************************************** */ @@ -23,6 +23,7 @@ FontMap::FontMap(const char *fileName, le_int16 pointSize, GUISupport *guiSuppor : fPointSize(pointSize), fFontCount(0), fAscent(0), fDescent(0), fLeading(0), fGUISupport(guiSupport) { le_int32 defaultFont = -1, i, script; + le_bool haveFonts = FALSE; for (i = 0; i < scriptCodeCount; i += 1) { fFontIndices[i] = -1; @@ -63,18 +64,17 @@ FontMap::FontMap(const char *fileName, le_int16 pointSize, GUISupport *guiSuppor if (strcmp(scriptName, "DEFAULT") == 0) { defaultFont = getFontIndex(fontName); + haveFonts = TRUE; continue; } - uscript_getCode(scriptName, &scriptCode, 1, &scriptStatus); + le_int32 fillCount = uscript_getCode(scriptName, &scriptCode, 1, &scriptStatus); - if (U_FAILURE(scriptStatus) || scriptStatus == U_USING_FALLBACK_WARNING || - scriptStatus == U_USING_DEFAULT_WARNING) { + if (U_FAILURE(scriptStatus) || fillCount <= 0 || + scriptStatus == U_USING_FALLBACK_WARNING || scriptStatus == U_USING_DEFAULT_WARNING) { sprintf(errorMessage, "The script name %s is invalid.", line); fGUISupport->postErrorMessage(errorMessage, "Font Map Error"); - status = LE_ILLEGAL_ARGUMENT_ERROR; - fclose(file); - return; + continue; } script = (le_int32) scriptCode; @@ -85,6 +85,7 @@ FontMap::FontMap(const char *fileName, le_int16 pointSize, GUISupport *guiSuppor } fFontIndices[script] = getFontIndex(fontName); + haveFonts = TRUE; } if (defaultFont >= 0) { @@ -95,6 +96,12 @@ FontMap::FontMap(const char *fileName, le_int16 pointSize, GUISupport *guiSuppor } } + if (! haveFonts) { + sprintf(errorMessage, "The font map file %s does not contain any valid scripts.", fileName); + fGUISupport->postErrorMessage(errorMessage, "Font Map Error"); + status = LE_ILLEGAL_ARGUMENT_ERROR; + } + fclose(file); } diff --git a/icuSources/samples/layout/GDIFontInstance.cpp b/icuSources/samples/layout/GDIFontInstance.cpp index e66b28f2..d3451e9a 100644 --- a/icuSources/samples/layout/GDIFontInstance.cpp +++ b/icuSources/samples/layout/GDIFontInstance.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -55,6 +55,8 @@ void GDISurface::drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, { TTGlyphID *ttGlyphs = LE_NEW_ARRAY(TTGlyphID, count); le_int32 *dx = LE_NEW_ARRAY(le_int32, count); + float *ps = LE_NEW_ARRAY(float, count * 2 + 2); + le_int32 out = 0; RECT clip; clip.top = 0; @@ -63,13 +65,15 @@ void GDISurface::drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, clip.right = width; for (le_int32 g = 0; g < count; g += 1) { - ttGlyphs[g] = (TTGlyphID) LE_GET_GLYPH(glyphs[g]); - - if (ttGlyphs[g] == 0xFFFF || ttGlyphs[g] == 0xFFFE) { - ttGlyphs[g] = 0x0002; + TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyphs[g]); + + if (ttGlyph < 0xFFFE) { + ttGlyphs[out] = ttGlyph; + dx[out] = (le_int32) (positions[g * 2 + 2] - positions[g * 2]); + ps[out * 2] = positions[g * 2]; + ps[out * 2 + 1] = positions[g * 2 + 1]; + out += 1; } - - dx[g] = (le_int32) (positions[g * 2 + 2] - positions[g * 2]); } le_int32 dyStart, dyEnd; @@ -78,20 +82,21 @@ void GDISurface::drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, dyStart = dyEnd = 0; - while (dyEnd < count) { - float yOffset = positions[dyStart * 2 + 1]; - float xOffset = positions[dyStart * 2]; + while (dyEnd < out) { + float yOffset = ps[dyStart * 2 + 1]; + float xOffset = ps[dyStart * 2]; - while (dyEnd < count && yOffset == positions[dyEnd * 2 + 1]) { + while (dyEnd < out && yOffset == ps[dyEnd * 2 + 1]) { dyEnd += 1; } ExtTextOut(fHdc, x + (le_int32) xOffset, y + (le_int32) yOffset - font->getAscent(), ETO_CLIPPED | ETO_GLYPH_INDEX, &clip, - &ttGlyphs[dyStart], dyEnd - dyStart, (INT *) &dx[dyStart]); + (LPCWSTR) &ttGlyphs[dyStart], dyEnd - dyStart, (INT *) &dx[dyStart]); dyStart = dyEnd; } + LE_DELETE_ARRAY(ps); LE_DELETE_ARRAY(dx); LE_DELETE_ARRAY(ttGlyphs); } diff --git a/icuSources/samples/layout/GDIGUISupport.h b/icuSources/samples/layout/GDIGUISupport.h index 24b83502..ad4c7143 100644 --- a/icuSources/samples/layout/GDIGUISupport.h +++ b/icuSources/samples/layout/GDIGUISupport.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2001, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -20,7 +20,7 @@ class GDIGUISupport : public GUISupport { public: GDIGUISupport() {}; - ~GDIGUISupport() {}; + virtual ~GDIGUISupport() {}; virtual void postErrorMessage(const char *message, const char *title); }; diff --git a/icuSources/samples/layout/GUISupport.h b/icuSources/samples/layout/GUISupport.h index cf598bc7..f41b7cec 100644 --- a/icuSources/samples/layout/GUISupport.h +++ b/icuSources/samples/layout/GUISupport.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2001, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -18,7 +18,7 @@ class GUISupport { public: GUISupport() {}; - ~GUISupport() {}; + virtual ~GUISupport() {}; virtual void postErrorMessage(const char *message, const char *title) = 0; }; diff --git a/icuSources/samples/layout/GnomeFontInstance.cpp b/icuSources/samples/layout/GnomeFontInstance.cpp index 2f727025..afab1748 100644 --- a/icuSources/samples/layout/GnomeFontInstance.cpp +++ b/icuSources/samples/layout/GnomeFontInstance.cpp @@ -2,7 +2,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -34,7 +34,7 @@ GnomeSurface::~GnomeSurface() } void GnomeSurface::drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, le_int32 count, - const float *positions, le_int32 x, le_int32 y, le_int32 width, le_int32 height) + const float *positions, le_int32 x, le_int32 y, le_int32 /*width*/, le_int32 /*height*/) { GnomeFontInstance *gFont = (GnomeFontInstance *) font; TT_Instance instance = gFont->getFont(); @@ -42,7 +42,7 @@ void GnomeSurface::drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyph le_int32 *dy = LE_NEW_ARRAY(le_int32, count); le_int32 xOffset, yOffset; TT_Raster_Map *raster; - TT_Error error; +// TT_Error error; for (le_int32 g = 0; g < count; g += 1) { dx[g] = (le_int32) (positions[g * 2 + 2] - positions[g * 2]); diff --git a/icuSources/samples/layout/GnomeGUISupport.h b/icuSources/samples/layout/GnomeGUISupport.h index 9986ea05..e88ef128 100644 --- a/icuSources/samples/layout/GnomeGUISupport.h +++ b/icuSources/samples/layout/GnomeGUISupport.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2001, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -20,7 +20,7 @@ class GnomeGUISupport : public GUISupport { public: GnomeGUISupport() {}; - ~GnomeGUISupport() {}; + virtual ~GnomeGUISupport() {}; virtual void postErrorMessage(const char *message, const char *title); }; diff --git a/icuSources/samples/layout/Sample.txt b/icuSources/samples/layout/Sample.txt index fabac0ef..367821b7 100644 --- a/icuSources/samples/layout/Sample.txt +++ b/icuSources/samples/layout/Sample.txt @@ -1 +1 @@ -The LayoutEngine does all the work necessary to display Unicode text written in languages with complex writing systems such as Hindi (हिन्दी) Thai (ไทย) and Arabic (العربية). Here's a sample of some text written in Sanskrit: श्रीमद् भगवद्गीता अध्याय अर्जुन विषाद योग धृतराष्ट्र उवाच। धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः मामकाः पाण्डवाश्चैव किमकुर्वत संजय Here's a sample of some text written in Arabic: أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية and here's a sample of some text written in Thai: บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์ +The LayoutEngine does all the work necessary to display Unicode text written in languages with complex writing systems such as Hindi (हिन्दी) Thai (ไทย) and Arabic (العربية). Here's a sample of some text written in Sanskrit: श्रीमद् भगवद्गीता अध्याय अर्जुन विषाद योग धृतराष्ट्र उवाच। धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः मामकाः पाण्डवाश्चैव किमकुर्वत संजय Here's a sample of some text written in Arabic: أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية and here's a sample of some text written in Thai: บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์ diff --git a/icuSources/samples/layout/ScriptCompositeFontInstance.h b/icuSources/samples/layout/ScriptCompositeFontInstance.h index e628383b..24146176 100644 --- a/icuSources/samples/layout/ScriptCompositeFontInstance.h +++ b/icuSources/samples/layout/ScriptCompositeFontInstance.h @@ -1,7 +1,7 @@ /* * %W% %E% * - * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved * */ @@ -136,7 +136,7 @@ private: static const char fgClassID; }; -inline const void *ScriptCompositeFontInstance::getFontTable(LETag tableTag) const +inline const void *ScriptCompositeFontInstance::getFontTable(LETag /*tableTag*/) const { return NULL; } diff --git a/icuSources/samples/layout/UnicodeReader.cpp b/icuSources/samples/layout/UnicodeReader.cpp index 19989055..ab5a7ef7 100644 --- a/icuSources/samples/layout/UnicodeReader.cpp +++ b/icuSources/samples/layout/UnicodeReader.cpp @@ -1,6 +1,6 @@ /* ****************************************************************************** - * Copyright (C) 1998-2003, International Business Machines Corporation and * + * Copyright (C) 1998-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ****************************************************************************** */ @@ -32,7 +32,7 @@ const UChar *UnicodeReader::readFile(const char *fileName, GUISupport *guiSuppor char *byteBuffer; char startBytes[4] = {'\xA5', '\xA5', '\xA5', '\xA5'}; char errorMessage[128]; - char *cp = ""; + const char *cp = ""; int32_t signatureLength = 0; f = fopen(fileName, "rb"); diff --git a/icuSources/samples/layout/gnomelayout.cpp b/icuSources/samples/layout/gnomelayout.cpp index 75edb50d..43a56966 100644 --- a/icuSources/samples/layout/gnomelayout.cpp +++ b/icuSources/samples/layout/gnomelayout.cpp @@ -2,7 +2,7 @@ /* ****************************************************************************** * * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** * @@ -46,7 +46,7 @@ static GSList *appList = NULL; GtkWidget *newSample(const gchar *fileName); void closeSample(GtkWidget *sample); -void showabout(GtkWidget *widget, gpointer data) +void showabout(GtkWidget */*widget*/, gpointer /*data*/) { GtkWidget *aboutBox; const gchar *writtenBy[] = { @@ -64,7 +64,7 @@ void showabout(GtkWidget *widget, gpointer data) gtk_widget_show(aboutBox); } -void notimpl(GtkObject *object, gpointer data) +void notimpl(GtkObject */*object*/, gpointer /*data*/) { gnome_ok_dialog("Not implemented..."); } @@ -77,7 +77,7 @@ gchar *prettyTitle(const gchar *path) return title; } -void openOK(GtkObject *object, gpointer data) +void openOK(GtkObject */*object*/, gpointer data) { GtkFileSelection *fileselection = GTK_FILE_SELECTION(data); GtkWidget *app = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(fileselection), "app")); @@ -110,7 +110,7 @@ void openOK(GtkObject *object, gpointer data) g_free(fileName); } -void openfile(GtkObject *object, gpointer data) +void openfile(GtkObject */*object*/, gpointer data) { GtkWidget *app = GTK_WIDGET(data); GtkWidget *fileselection; @@ -142,29 +142,29 @@ void openfile(GtkObject *object, gpointer data) gtk_main(); } -void newapp(GtkObject *object, gpointer data) +void newapp(GtkObject */*object*/, gpointer /*data*/) { GtkWidget *app = newSample("Sample.txt"); gtk_widget_show_all(app); } -void closeapp(GtkWidget *widget, gpointer data) +void closeapp(GtkWidget */*widget*/, gpointer data) { GtkWidget *app = GTK_WIDGET(data); closeSample(app); } -void shutdown(GtkObject *object, gpointer data) +void shutdown(GtkObject */*object*/, gpointer /*data*/) { gtk_main_quit(); } GnomeUIInfo fileMenu[] = { - GNOMEUIINFO_MENU_NEW_ITEM("_New Sample", - "Create a new Gnome Layout Sample", + GNOMEUIINFO_MENU_NEW_ITEM((gchar *) "_New Sample", + (gchar *) "Create a new Gnome Layout Sample", newapp, NULL), GNOMEUIINFO_MENU_OPEN_ITEM(openfile, NULL), @@ -183,12 +183,12 @@ GnomeUIInfo helpMenu[] = GnomeUIInfo mainMenu[] = { - GNOMEUIINFO_SUBTREE(N_("File"), fileMenu), - GNOMEUIINFO_SUBTREE(N_("Help"), helpMenu), + GNOMEUIINFO_SUBTREE(N_((gchar *) "File"), fileMenu), + GNOMEUIINFO_SUBTREE(N_((gchar *) "Help"), helpMenu), GNOMEUIINFO_END }; -gint eventDelete(GtkWidget *widget, GdkEvent *event, gpointer data) +gint eventDelete(GtkWidget *widget, GdkEvent */*event*/, gpointer /*data*/) { closeSample(widget); @@ -196,7 +196,7 @@ gint eventDelete(GtkWidget *widget, GdkEvent *event, gpointer data) return TRUE; } -gint eventConfigure(GtkWidget *widget, GdkEventConfigure *event, Context *context) +gint eventConfigure(GtkWidget */*widget*/, GdkEventConfigure *event, Context *context) { if (context->paragraph != NULL) { context->width = event->width; @@ -210,7 +210,7 @@ gint eventConfigure(GtkWidget *widget, GdkEventConfigure *event, Context *contex return TRUE; } -gint eventExpose(GtkWidget *widget, GdkEvent *event, Context *context) +gint eventExpose(GtkWidget *widget, GdkEvent */*event*/, Context *context) { if (context->paragraph != NULL) { gint maxLines = context->paragraph->getLineCount() - 1; diff --git a/icuSources/samples/layout/layout.cpp b/icuSources/samples/layout/layout.cpp index 8935fdc0..332e03d9 100644 --- a/icuSources/samples/layout/layout.cpp +++ b/icuSources/samples/layout/layout.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -137,7 +137,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if (LE_FAILURE(fontStatus)) { ReleaseDC(hwnd, hdc); - return 0; + return -1; } context = new Context(); @@ -321,7 +321,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case IDM_HELP_ABOUTLAYOUTSAMPLE: MessageBox(hwnd, TEXT("Windows Layout Sample 0.1\n") - TEXT("Copyright (C) 1998-2002 By International Business Machines Corporation and others.\n") + TEXT("Copyright (C) 1998-2005 By International Business Machines Corporation and others.\n") TEXT("Author: Eric Mader"), szAppName, MB_ICONINFORMATION | MB_OK); return 0; @@ -334,7 +334,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { context = (Context *) GetWindowLong(hwnd, 0); - if (context->paragraph != NULL) { + if (context != NULL && context->paragraph != NULL) { delete context->paragraph; } diff --git a/icuSources/samples/layout/layout.dsp b/icuSources/samples/layout/layout.dsp deleted file mode 100644 index 0f51080c..00000000 --- a/icuSources/samples/layout/layout.dsp +++ /dev/null @@ -1,196 +0,0 @@ -# Microsoft Developer Studio Project File - Name="layout" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=layout - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "layout.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "layout.mak" CFG="layout - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "layout - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "layout - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "layout - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /I "..\..\..\include\layout" /I "..\..\common" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D "UNICODE" /D _WIN32_WINNT=0X500 /D "LE_USE_CMEMORY" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 ..\..\..\lib\iculx.lib ..\..\..\lib\icule.lib ..\..\..\lib\icuuc.lib ..\..\..\lib\icuin.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "layout - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\include\layout" /I "..\..\common" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "UNICODE" /D _WIN32_WINNT=0X500 /D "LE_USE_CMEMORY" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 ..\..\..\lib\iculxd.lib ..\..\..\lib\iculed.lib ..\..\..\lib\icuucd.lib ..\..\..\lib\icuind.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "layout - Win32 Release" -# Name "layout - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\cmaps.cpp -# End Source File -# Begin Source File - -SOURCE=.\FontMap.cpp -# End Source File -# Begin Source File - -SOURCE=.\FontTableCache.cpp -# End Source File -# Begin Source File - -SOURCE=.\GDIFontInstance.cpp -# End Source File -# Begin Source File - -SOURCE=.\GDIFontMap.cpp -# End Source File -# Begin Source File - -SOURCE=.\GDIGUISupport.cpp -# End Source File -# Begin Source File - -SOURCE=.\layout.cpp -# End Source File -# Begin Source File - -SOURCE=.\LayoutSample.rc -# End Source File -# Begin Source File - -SOURCE=.\paragraph.cpp -# End Source File -# Begin Source File - -SOURCE=.\ScriptCompositeFontInstance.cpp -# End Source File -# Begin Source File - -SOURCE=.\UnicodeReader.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\cmaps.h -# End Source File -# Begin Source File - -SOURCE=.\FontMap.h -# End Source File -# Begin Source File - -SOURCE=.\FontTableCache.h -# End Source File -# Begin Source File - -SOURCE=.\GDIFontInstance.h -# End Source File -# Begin Source File - -SOURCE=.\GDIFontMap.h -# End Source File -# Begin Source File - -SOURCE=.\GDIGUISupport.h -# End Source File -# Begin Source File - -SOURCE=.\GUISupport.h -# End Source File -# Begin Source File - -SOURCE=.\paragraph.h -# End Source File -# Begin Source File - -SOURCE=.\RenderingSurface.h -# End Source File -# Begin Source File - -SOURCE=.\resource.h -# End Source File -# Begin Source File - -SOURCE=.\ScriptCompositeFontInstance.h -# End Source File -# Begin Source File - -SOURCE=.\sfnt.h -# End Source File -# Begin Source File - -SOURCE=.\UnicodeReader.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/layout/layout.dsw b/icuSources/samples/layout/layout.dsw deleted file mode 100644 index 611d964b..00000000 --- a/icuSources/samples/layout/layout.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "layout"=.\layout.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/layout/layout.vcproj b/icuSources/samples/layout/layout.vcproj index 0217997a..1cf41042 100644 --- a/icuSources/samples/layout/layout.vcproj +++ b/icuSources/samples/layout/layout.vcproj @@ -27,6 +27,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/layout.pch" AssemblerListingLocation=".\Release/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="..\..\..\lib\iculx.lib ..\..\..\lib\icule.lib ..\..\..\lib\icuuc.lib ..\..\..\lib\icuin.lib odbc32.lib odbccp32.lib" OutputFile=".\Release/layout.exe" LinkIncremental="1" @@ -86,6 +86,7 @@ PreprocessorDefinitions="_DEBUG,WIN32,UNICODE,_WIN32_WINNT=0X500,LE_USE_CMEMORY" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/layout.pch" AssemblerListingLocation=".\Debug/" @@ -99,7 +100,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" AdditionalDependencies="..\..\..\lib\iculxd.lib ..\..\..\lib\iculed.lib ..\..\..\lib\icuucd.lib ..\..\..\lib\icuind.lib odbc32.lib odbccp32.lib" OutputFile=".\Debug/layout.exe" LinkIncremental="2" diff --git a/icuSources/samples/layout/paragraph.cpp b/icuSources/samples/layout/paragraph.cpp index 2ac4504e..315ca04a 100644 --- a/icuSources/samples/layout/paragraph.cpp +++ b/icuSources/samples/layout/paragraph.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -14,6 +14,7 @@ #include "unicode/utypes.h" #include "unicode/uchar.h" #include "unicode/ubidi.h" +#include "unicode/ustring.h" #include "layout/ParagraphLayout.h" @@ -26,29 +27,133 @@ #define MARGIN 10 #define LINE_GROW 32 +#define PARA_GROW 8 + +#define CH_LF 0x000A +#define CH_CR 0x000D +#define CH_LSEP 0x2028 +#define CH_PSEP 0x2029 + +static LEUnicode *skipLineEnd(LEUnicode *ptr) +{ + if (ptr[0] == CH_CR && ptr[1] == CH_LF) { + ptr += 1; + } + + return ptr + 1; +} + +static le_int32 findRun(const RunArray *runArray, le_int32 offset) +{ + le_int32 runCount = runArray->getCount(); + + for (le_int32 run = 0; run < runCount; run += 1) { + if (runArray->getLimit(run) > offset) { + return run; + } + } + + return -1; +} + +static void subsetFontRuns(const FontRuns *fontRuns, le_int32 start, le_int32 limit, FontRuns *sub) +{ + le_int32 startRun = findRun(fontRuns, start); + le_int32 endRun = findRun(fontRuns, limit - 1); + + sub->reset(); + + for (le_int32 run = startRun; run <= endRun; run += 1) { + const LEFontInstance *runFont = fontRuns->getFont(run); + le_int32 runLimit = fontRuns->getLimit(run) - start; + + if (run == endRun) { + runLimit = limit - start; + } + + sub->add(runFont, runLimit); + } +} Paragraph::Paragraph(const LEUnicode chars[], int32_t charCount, const FontRuns *fontRuns, LEErrorCode &status) - : fParagraphLayout(NULL), fLineCount(0), fLinesMax(0), fLinesGrow(LINE_GROW), fLines(NULL), fChars(NULL), - fLineHeight(-1), fAscent(-1), fWidth(-1), fHeight(-1) + : fParagraphLayout(NULL), fParagraphCount(0), fParagraphMax(PARA_GROW), fParagraphGrow(PARA_GROW), + fLineCount(0), fLinesMax(LINE_GROW), fLinesGrow(LINE_GROW), fLines(NULL), fChars(NULL), + fLineHeight(-1), fAscent(-1), fWidth(-1), fHeight(-1), fParagraphLevel(UBIDI_DEFAULT_LTR) { + static const LEUnicode separators[] = {CH_LF, CH_CR, CH_LSEP, CH_PSEP}; + if (LE_FAILURE(status)) { return; } + le_int32 ascent = 0; + le_int32 descent = 0; + le_int32 leading = 0; + LocaleRuns *locales = NULL; + FontRuns fr(0); + + fLines = LE_NEW_ARRAY(const ParagraphLayout::Line *, fLinesMax); + fParagraphLayout = LE_NEW_ARRAY(ParagraphLayout *, fParagraphMax); - fChars = LE_NEW_ARRAY(LEUnicode, charCount); + fChars = LE_NEW_ARRAY(LEUnicode, charCount + 1); LE_ARRAY_COPY(fChars, chars, charCount); + fChars[charCount] = 0; - fParagraphLayout = new ParagraphLayout(fChars, charCount, fontRuns, NULL, NULL, locales, UBIDI_DEFAULT_LTR, FALSE, status); + LEUnicode *pStart = &fChars[0]; - if (LE_FAILURE(status)) { - return; - } + while (*pStart != 0) { + LEUnicode *pEnd = u_strpbrk(pStart, separators); + le_int32 pAscent, pDescent, pLeading; + ParagraphLayout *paragraphLayout = NULL; - le_int32 ascent = fParagraphLayout->getAscent(); - le_int32 descent = fParagraphLayout->getDescent(); - le_int32 leading = fParagraphLayout->getLeading(); + if (pEnd == NULL) { + pEnd = &fChars[charCount]; + } + + if (pEnd != pStart) { + subsetFontRuns(fontRuns, pStart - fChars, pEnd - fChars, &fr); + + paragraphLayout = new ParagraphLayout(pStart, pEnd - pStart, &fr, NULL, NULL, locales, fParagraphLevel, FALSE, status); + + if (LE_FAILURE(status)) { + break; // return? something else? + } + + if (fParagraphLevel == UBIDI_DEFAULT_LTR) { + fParagraphLevel = paragraphLayout->getParagraphLevel(); + } + + pAscent = paragraphLayout->getAscent(); + pDescent = paragraphLayout->getDescent(); + pLeading = paragraphLayout->getLeading(); + + if (pAscent > ascent) { + ascent = pAscent; + } + + if (pDescent > descent) { + descent = pDescent; + } + + if (pLeading > leading) { + leading = pLeading; + } + } + + if (fParagraphCount >= fParagraphMax) { + fParagraphLayout = (ParagraphLayout **) LE_GROW_ARRAY(fParagraphLayout, fParagraphMax + fParagraphGrow); + fParagraphMax += fParagraphGrow; + } + + fParagraphLayout[fParagraphCount++] = paragraphLayout; + + if (*pEnd == 0) { + break; + } + + pStart = skipLineEnd(pEnd); + } fLineHeight = ascent + descent + leading; fAscent = ascent; @@ -65,6 +170,16 @@ Paragraph::~Paragraph() LE_DELETE_ARRAY(fChars); } +void Paragraph::addLine(const ParagraphLayout::Line *line) +{ + if (fLineCount >= fLinesMax) { + fLines = (const ParagraphLayout::Line **) LE_GROW_ARRAY(fLines, fLinesMax + fLinesGrow); + fLinesMax += fLinesGrow; + } + + fLines[fLineCount++] = line; +} + void Paragraph::breakLines(le_int32 width, le_int32 height) { fHeight = height; @@ -78,26 +193,26 @@ void Paragraph::breakLines(le_int32 width, le_int32 height) float lineWidth = (float) (width - 2 * MARGIN); const ParagraphLayout::Line *line; - le_int32 li; // Free the old LineInfo's... - for (li = 0; li < fLineCount; li += 1) { + for (le_int32 li = 0; li < fLineCount; li += 1) { delete fLines[li]; } - li = 0; - fParagraphLayout->reflow(); - while ((line = fParagraphLayout->nextLine(lineWidth)) != NULL) { - // grow the line array, if we need to. - if (li >= fLinesMax) { - fLines = (const ParagraphLayout::Line **) LE_GROW_ARRAY(fLines, fLinesMax + fLinesGrow); - fLinesMax += fLinesGrow; - } + fLineCount = 0; - fLines[li++] = line; - } + for (le_int32 p = 0; p < fParagraphCount; p += 1) { + ParagraphLayout *paragraphLayout = fParagraphLayout[p]; - fLineCount = li; + if (paragraphLayout != NULL) { + paragraphLayout->reflow(); + while ((line = paragraphLayout->nextLine(lineWidth)) != NULL) { + addLine(line); + } + } else { + addLine(NULL); + } + } } void Paragraph::draw(RenderingSurface *surface, le_int32 firstLine, le_int32 lastLine) @@ -109,24 +224,27 @@ void Paragraph::draw(RenderingSurface *surface, le_int32 firstLine, le_int32 las for (li = firstLine; li <= lastLine; li += 1) { const ParagraphLayout::Line *line = fLines[li]; - le_int32 runCount = line->countRuns(); - le_int32 run; - if (fParagraphLayout->getParagraphLevel() == UBIDI_RTL) { - le_int32 lastX = line->getWidth(); + if (line != NULL) { + le_int32 runCount = line->countRuns(); + le_int32 run; + + if (fParagraphLevel == UBIDI_RTL) { + le_int32 lastX = line->getWidth(); - x = (fWidth - lastX - MARGIN); - } + x = (fWidth - lastX - MARGIN); + } - for (run = 0; run < runCount; run += 1) { - const ParagraphLayout::VisualRun *visualRun = line->getVisualRun(run); - le_int32 glyphCount = visualRun->getGlyphCount(); - const LEFontInstance *font = visualRun->getFont(); - const LEGlyphID *glyphs = visualRun->getGlyphs(); - const float *positions = visualRun->getPositions(); + for (run = 0; run < runCount; run += 1) { + const ParagraphLayout::VisualRun *visualRun = line->getVisualRun(run); + le_int32 glyphCount = visualRun->getGlyphCount(); + const LEFontInstance *font = visualRun->getFont(); + const LEGlyphID *glyphs = visualRun->getGlyphs(); + const float *positions = visualRun->getPositions(); - surface->drawGlyphs(font, glyphs, glyphCount, positions, x, y, fWidth, fHeight); + surface->drawGlyphs(font, glyphs, glyphCount, positions, x, y, fWidth, fHeight); + } } y += fLineHeight; diff --git a/icuSources/samples/layout/paragraph.h b/icuSources/samples/layout/paragraph.h index 67db5eb3..6972fac3 100644 --- a/icuSources/samples/layout/paragraph.h +++ b/icuSources/samples/layout/paragraph.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -14,6 +14,7 @@ #define __PARAGRAPH_H #include "unicode/utypes.h" +#include "unicode/ubidi.h" #include "layout/LEFontInstance.h" #include "layout/ParagraphLayout.h" @@ -46,11 +47,17 @@ public: static Paragraph *paragraphFactory(const char *fileName, const LEFontInstance *font, GUISupport *guiSupport); private: - ParagraphLayout *fParagraphLayout; + void addLine(const ParagraphLayout::Line *line); - le_int32 fLineCount; - le_int32 fLinesMax; - le_int32 fLinesGrow; + ParagraphLayout **fParagraphLayout; + + le_int32 fParagraphCount; + le_int32 fParagraphMax; + le_int32 fParagraphGrow; + + le_int32 fLineCount; + le_int32 fLinesMax; + le_int32 fLinesGrow; const ParagraphLayout::Line **fLines; LEUnicode *fChars; @@ -59,6 +66,7 @@ private: le_int32 fAscent; le_int32 fWidth; le_int32 fHeight; + UBiDiLevel fParagraphLevel; }; inline le_int32 Paragraph::getLineHeight() diff --git a/icuSources/samples/layout/readme.html b/icuSources/samples/layout/readme.html index a1878793..fd108cca 100644 --- a/icuSources/samples/layout/readme.html +++ b/icuSources/samples/layout/readme.html @@ -1,153 +1,186 @@ -<!-- -Copyright (c) 2001-2003 International Business Machines -Corporation and others. All Rights Reserved. ---> - <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <html> -<head> - <meta http-equiv="Content-Type" - content="text/html; charset=iso-8859-1"> - <meta name="Author" content="Eric Mader"> - <meta name="GENERATOR" - content="Mozilla/4.72 [en] (Windows NT 5.0; U) [Netscape]"> - <title>Readme file for the ICU LayoutEngine demo - - -

    What is the layout demo?

    -The layout demo displays a paragraph of text that is laid out using the -LayoutEngine. There are two versions of this demo, "layout.exe" which -runs on Windows 2000, and "gnomelayout" which runs on Linux. Both -programs read a file containing the Unicode text to display, and a file -that says which font to use to display each script.
    -  -

    How do I build the layout demo?

    -First, you need to build ICU, including the LayoutEngine. -

    On Windows, the layout project should be listed as a dependency of -all, so layout will build when you build all. If it doesn't for some -reason, just select the layout project in the project toolbar and build -it.

    -

    On Linux systems, you need to add the "--enable-layout=yes" option -when you invoke the runConfigureICU script. When you've done that, -layout should build when you do "make all install"

    -

    To build the demo on Windows, just open the layout project in -<icu>\source\samples\layout and build it.

    -

    On Linux systems, connect to <top-build-dir>/samples/layout -and do "make all"  To build the layout demo on Linux, you'll need -the gnome-libs-devel and freetype-devel packages, which should be part -of your Linux distribution. The demo uses the FreeType 1 library, and -the make files assume that the FreeType header files are in -/usr/include/freetype1, and that the freetype library is -/usr/lib/libttf.so. This is how RedHat Linux 7.2 installs FreeType 1. If -your system is different, you may need to add sym links to where the -files are stored on your system, or  modify -<top-src-dir>/samples/layout/Makefile.in to reference the files -correctly for your system.

    -

    How do I run the demo?

    -Before you can run the demo, you'll need to get the fonts it uses. For -legal reasons, we can't include these fonts with ICU, but you can -download them from the web. To do this, you'll need access to a -computer running Windows. Here's how to get the fonts: -

    Download the 1.3 version of the JDK from the IBM developerWorks Java technology zone -page. From this page, follow the "Tools and products" link on the left -hand side, and then the link for the "IBM Developer Kit for Linux", or -the "IBM Developer Kit for Windows(R), Release 1.3.0". You'll need to -register with them if you haven't downloaded before. Download and -install the "Runtime Environment Package." You'll need one font from -this package. If you've let the installer use it's defaults, the fonts -will be in C:\Program Files\IBM\Java13\jre\lib\fonts. The file you want -is "Thonburi.ttf" On Windows, copy this font file to your Fonts folder, -on Linux, copy this font file to the directory from which you'll run -the layout demo.

    -

    Next is the Hindi font. Go to the  NCST site and download  -raghu.ttf. Be sure to look at the  README -file before you download the font. On Linux, you can download raghu.ttf -into the directory from which you'll run the layout demo. On Windows, -you'll need to install it in your Fonts folder.

    -

    There's still one more font to get, the Code2000 Unicode font.Go to -James Kass'  Unicode -Support In Your Browser page and click on the link that says "Click -Here to download Code2000 shareware demo Unicode font." This will -download a .ZIP file which contains CODE2000.TTF and CODE2000.HTM. -Expand this .ZIP file. If you're going to run the layout demo on Linux, -put the CODE2000.TTF file in the directory from which you'll run the -demo. On Windows, copy the font to your fonts folder.

    -

    Note: The Code2000 font is -shareware. If you want to use it for longer than a trial period, you -should send a shareware fee to James. Directions for how to do this are -in CODE2000.HTM.

    -

    That's it! Now all you have to do is run letest (CTRL+F5 in Visual -C++, or "./gnomelayout" in Linux)

    -

    How can I customize the layout demo?

    -The text that the layout demo displays is read from the file -"Sample.txt." You can change the text by editing this file using a -Unicode-aware text editor. (it is in UTF8 format with a BOM as the first -character; the demo can also read UTF16 and UTF32 format files) -Remember that the text will be displayed in a single paragraph; you can -include CR and LF characters in the text, but they will be ignored. -

    If you add scripts to the text other than Arabic, Devanagari, Latin -or Thai, you'll need to find a font which contains the characters in -that script, and add an entry to the FontMap file ("FontMap.GDI" on -Windows, "FontMap.Gnome" on Linux) This file contains a single entry per -line. Each entry contains a script name followed by a colon, and then a -font name.

    -

    Here is the list of legal script names:

    -
    ARABIC
    - ARMENIAN
    - BENGALI
    - BOPOMOFO
    - BUHID
    - CANADIAN_ABORIGINAL
    - CHEROKEE
    - CYRILLIC
    - DESERET
    - DEVANAGARI
    - ETHIOPIC
    - GEORGIAN
    - GOTHIC
    - GREEK
    - GUJARATI
    - GURMUKHI
    - HAN
    - HANGUL
    - HANUNOO
    - HEBREW
    - HIRAGANA
    - KANNADA
    - KATAKANA
    - KHMER
    - LATIN
    - MALAYALAM
    - MONGOLIAN
    - MYANMAR
    - OGHAM
    - OLD_ITALIC
    - ORIYA
    - RUNIC
    - SINHALA
    - SYRIAC
    - TAGALOG
    + + + + + + Readme file for the ICU LayoutEngine demo + + +

    + What is the layout demo?

    + The layout demo displays a paragraph of text that is laid out using the + LayoutEngine. There are two versions of this demo, "layout.exe" which runs on + Windows 2000, and "gnomelayout" which runs on Linux. Both programs read a file + containing the Unicode text to display, and a file that says which font to use + to display each script. +
    +   +

    + How do I build the layout demo?

    + First, you need to build ICU, including the LayoutEngine. +

    On Windows, the layout project should be listed as a dependency of all, so + layout will build when you build all. If it doesn't for some reason, just + select the layout project in the project toolbar and build it. +

    +

    On Linux systems, you need to add the "--enable-layout=yes" option when you + invoke the runConfigureICU script. When you've done that, layout should build + when you do "make all install" +

    +

    To build the demo on Windows, just open the layout project in + <icu>\source\samples\layout and build it.

    +

    On Linux systems, connect to <top-build-dir>/samples/layout and do "make + all"  To build the layout demo on Linux, you'll need the gnome-libs-devel + and freetype-devel packages, which should be part of your Linux distribution. + The demo uses the FreeType 1 library, and the make files assume that the + FreeType header files are in /usr/include/freetype1, and that the freetype + library is /usr/lib/libttf.so. This is how RedHat Linux 7.2 installs FreeType + 1. If your system is different, you may need to add sym links to where the + files are stored on your system, or  modify + <top-src-dir>/samples/layout/Makefile.in to reference the files correctly + for your system.
    +   +

    +

    + How do I run the demo?

    + Before you can run the demo, you'll need to get the fonts it uses. For legal + reasons, we can't include these fonts with ICU, but you can download them from + the web. To do this, you'll need access to a computer running Windows. Here's + how to get the fonts: +

    First, download the Thai font. Go to + into-asia.com and click on the link for the Angsana font. This will + download a .ZIP file. Extract the font file, angsd___.ttf On Windows, copy this + font file to your Fonts folder, on Linux, copy this font file to the directory + from which you'll run the layout demo.

    +

    Next is the Hindi font. Go to the  NCST site and download  + raghu.ttf. Be sure to look at the  + README file before you download the font. On Linux, you can download + raghu.ttf into the directory from which you'll run the layout demo. On Windows, + you'll need to install it in your Fonts folder.

    +

    There's still one more font to get, the Code2000 Unicode font.Go to James Kass' +  Unicode Support In Your Browser + page and click on the link that says "Click Here to download Code2000 shareware + demo Unicode font." This will download a .ZIP file which contains CODE2000.TTF + and CODE2000.HTM. Expand this .ZIP file. If you're going to run the layout demo + on Linux, put the CODE2000.TTF file in the directory from which you'll run the + demo. On Windows, copy the font to your fonts folder.

    +

    Note: + The Code2000 font is shareware. If you want to use it for longer than a trial + period, you should send a shareware fee to James. Directions for how to do this + are in CODE2000.HTM.

    +

    That's it! Now all you have to do is run letest (CTRL+F5 in Visual C++, or + "./gnomelayout" in Linux) +

    +

    + How can I customize the layout demo?

    + The text that the layout demo displays is read from the file "Sample.txt." You + can change the text by editing this file using a Unicode-aware text editor. (it + is in UTF8 format with a BOM as the first character; the demo can also read + UTF16 and UTF32 format files) Remember that the text will be displayed in a + single paragraph; you can include CR and LF characters in the text, but they + will be ignored. +

    If you add scripts to the text other than Arabic, Devanagari, Latin or Thai, + you'll need to find a font which contains the characters in that script, and + add an entry to the FontMap file ("FontMap.GDI" on Windows, "FontMap.Gnome" on + Linux) This file contains a single entry per line. Each entry contains a script + name followed by a colon, and then a font name. +

    +

    Here is the list of legal script names: +

    +
    ARABIC +
    + ARMENIAN +
    + BENGALI +
    + BOPOMOFO +
    + BUHID
    + CANADIAN_ABORIGINAL +
    + CHEROKEE +
    + CYRILLIC +
    + DESERET +
    + DEVANAGARI +
    + ETHIOPIC +
    + GEORGIAN +
    + GOTHIC +
    + GREEK +
    + GUJARATI +
    + GURMUKHI +
    + HAN +
    + HANGUL +
    + HANUNOO
    + HEBREW +
    + HIRAGANA +
    + KANNADA +
    + KATAKANA +
    + KHMER +
    + LATIN +
    + MALAYALAM +
    + MONGOLIAN +
    + MYANMAR +
    + OGHAM +
    + OLD_ITALIC +
    + ORIYA +
    + RUNIC +
    + SINHALA +
    + SYRIAC +
    + TAGALOG
    TAGBANWA

    - TAMIL
    - TELUGU
    - THAANA
    - THAI
    - TIBETAN
    - YI
    -
    -You can also use the script name "DEFAULT" to represent all scripts -which you don't explicitly list in the FontMap file.
    -
    -On Windows use the full name of the font as it appears in the Windows -Fonts folder (eg. "Times New Roman") On Linux, use the file name of the -font file (e.g. "Times.TTF") If you're running on Windows, you'll need -to install the new fonts in your Fonts folder. If you're running on -Linux, put them in the directory from which you'll run the demo.

    -  - + TAMIL +
    + TELUGU +
    + THAANA +
    + THAI +
    + TIBETAN +
    + YI
    +
    You can also use the script name "DEFAULT" to represent + all scripts which you don't explicitly list in the FontMap file.
    +
    + On Windows use the full name of the font as it appears in the Windows Fonts + folder (eg. "Times New Roman") On Linux, use the file name of the font file + (e.g. "Times.TTF") If you're running on Windows, you'll need to install the new + fonts in your Fonts folder. If you're running on Linux, put them in the + directory from which you'll run the demo. +
    +   +
    +   + diff --git a/icuSources/samples/legacy/legacy.cpp b/icuSources/samples/legacy/legacy.cpp index e3a4b924..85fc0e66 100644 --- a/icuSources/samples/legacy/legacy.cpp +++ b/icuSources/samples/legacy/legacy.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001, International Business Machines +* Copyright (C) 2001 - 2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -22,8 +22,8 @@ #include "unicode/utypes.h" #include "unicode/ustring.h" -void test_current(UChar data[][5], uint32_t size, uint32_t maxLen, uint8_t keys[][32]); -void test_legacy(UChar data[][5], uint32_t size, uint32_t maxlen, uint8_t keys[][32]); +extern "C" void test_current(UChar data[][5], uint32_t size, uint32_t maxLen, uint8_t keys[][32]); +extern "C" void test_legacy(UChar data[][5], uint32_t size, uint32_t maxlen, uint8_t keys[][32]); void printZTUChar(const UChar *str) { while(*str != 0) { diff --git a/icuSources/samples/legacy/legacy.dsp b/icuSources/samples/legacy/legacy.dsp deleted file mode 100644 index 98ea084f..00000000 --- a/icuSources/samples/legacy/legacy.dsp +++ /dev/null @@ -1,112 +0,0 @@ -# Microsoft Developer Studio Project File - Name="legacy" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=legacy - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "legacy.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "legacy.mak" CFG="legacy - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "legacy - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "legacy - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "legacy - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib ../../../../icu-1-8-1/lib/icuuc.lib ../../../../icu-1-8-1/lib/icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "legacy - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib ../../../../icu-1-8-1/lib/icuucd.lib ../../../../icu-1-8-1/lib/icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "legacy - Win32 Release" -# Name "legacy - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\legacy.cpp -# End Source File -# Begin Source File - -SOURCE=.\newcol.cpp -# End Source File -# Begin Source File - -SOURCE=.\oldcol.cpp -# ADD CPP /I "../../../../icu-1-8-1/include" -# SUBTRACT CPP /I "../../../include" -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/legacy/legacy.dsw b/icuSources/samples/legacy/legacy.dsw deleted file mode 100644 index f0af63f1..00000000 --- a/icuSources/samples/legacy/legacy.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "legacy"=.\legacy.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/legacy/legacy.sln b/icuSources/samples/legacy/legacy.sln index b49dc8fc..181de147 100644 --- a/icuSources/samples/legacy/legacy.sln +++ b/icuSources/samples/legacy/legacy.sln @@ -1,12 +1,12 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 +Microsoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "legacy", "legacy.vcproj", "{57F56795-1802-4605-88A0-013AAE9998F6}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution + Debug = Debug + Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {57F56795-1802-4605-88A0-013AAE9998F6}.Debug.ActiveCfg = Debug|Win32 diff --git a/icuSources/samples/legacy/legacy.vcproj b/icuSources/samples/legacy/legacy.vcproj index 6c1f2f93..3177a469 100644 --- a/icuSources/samples/legacy/legacy.vcproj +++ b/icuSources/samples/legacy/legacy.vcproj @@ -26,6 +26,7 @@ StringPooling="TRUE" RuntimeLibrary="4" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/legacy.pch" AssemblerListingLocation=".\Release/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=msgfmt - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "msgfmt.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "msgfmt.mak" CFG="msgfmt - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "msgfmt - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "msgfmt - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "msgfmt - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib kernel32.lib user32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "msgfmt - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "msgfmt - Win32 Release" -# Name "msgfmt - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\main.cpp -# End Source File -# Begin Source File - -SOURCE=.\util.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/msgfmt/msgfmt.dsw b/icuSources/samples/msgfmt/msgfmt.dsw deleted file mode 100644 index fb8667c5..00000000 --- a/icuSources/samples/msgfmt/msgfmt.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "msgfmt"=.\msgfmt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/msgfmt/msgfmt.vcproj b/icuSources/samples/msgfmt/msgfmt.vcproj index 753e04cf..798770a4 100644 --- a/icuSources/samples/msgfmt/msgfmt.vcproj +++ b/icuSources/samples/msgfmt/msgfmt.vcproj @@ -27,6 +27,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/msgfmt.pch" AssemblerListingLocation=".\Release/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=numfmt - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "numfmt.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "numfmt.mak" CFG="numfmt - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "numfmt - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "numfmt - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "numfmt - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "numfmt - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "numfmt - Win32 Release" -# Name "numfmt - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\capi.c -# End Source File -# Begin Source File - -SOURCE=.\main.cpp -# End Source File -# Begin Source File - -SOURCE=.\util.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\util.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/numfmt/numfmt.dsw b/icuSources/samples/numfmt/numfmt.dsw deleted file mode 100644 index 2a65f2cd..00000000 --- a/icuSources/samples/numfmt/numfmt.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "numfmt"=.\numfmt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/numfmt/numfmt.vcproj b/icuSources/samples/numfmt/numfmt.vcproj index 5b4041de..fdaedc87 100644 --- a/icuSources/samples/numfmt/numfmt.vcproj +++ b/icuSources/samples/numfmt/numfmt.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/numfmt.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=props - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "props.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "props.mak" CFG="props - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "props - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "props - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "props - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "props - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "props - Win32 Release" -# Name "props - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\props.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/props/props.dsw b/icuSources/samples/props/props.dsw deleted file mode 100644 index fd730ac1..00000000 --- a/icuSources/samples/props/props.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "props"=.\props.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/props/props.vcproj b/icuSources/samples/props/props.vcproj index 8d4a755a..b3abcece 100644 --- a/icuSources/samples/props/props.vcproj +++ b/icuSources/samples/props/props.vcproj @@ -26,6 +26,7 @@ StringPooling="TRUE" RuntimeLibrary="3" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/props.pch" AssemblerListingLocation=".\Release/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> name != 0; pOpt ++) { + OptSpec *pOpt; + for (pOpt = opts; pOpt->name != 0; pOpt ++) { if (strcmp(pOpt->name, pArgName) == 0) { switch (pOpt->type) { case OptSpec::FLAG: diff --git a/icuSources/samples/strsrch/strsrch.dsp b/icuSources/samples/strsrch/strsrch.dsp deleted file mode 100644 index cd316435..00000000 --- a/icuSources/samples/strsrch/strsrch.dsp +++ /dev/null @@ -1,101 +0,0 @@ -# Microsoft Developer Studio Project File - Name="strsrch" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=strsrch - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "strsrch.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "strsrch.mak" CFG="strsrch - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "strsrch - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "strsrch - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "strsrch - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuind.lib icuucd.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "strsrch - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuind.lib icuucd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "strsrch - Win32 Release" -# Name "strsrch - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\strsrch.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/strsrch/strsrch.dsw b/icuSources/samples/strsrch/strsrch.dsw deleted file mode 100644 index 6ad8a985..00000000 --- a/icuSources/samples/strsrch/strsrch.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "strsrch"=.\strsrch.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/strsrch/strsrch.vcproj b/icuSources/samples/strsrch/strsrch.vcproj index 76ff1c15..d07b18a3 100644 --- a/icuSources/samples/strsrch/strsrch.vcproj +++ b/icuSources/samples/strsrch/strsrch.vcproj @@ -25,6 +25,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="1" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/strsrch.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=translit - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "translit.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "translit.mak" CFG="translit - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "translit - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "translit - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "translit - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "translit - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "translit - Win32 Release" -# Name "translit - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\main.cpp -# End Source File -# Begin Source File - -SOURCE=.\unaccent.cpp -# End Source File -# Begin Source File - -SOURCE=.\util.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\unaccent.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/translit/translit.dsw b/icuSources/samples/translit/translit.dsw deleted file mode 100644 index 9772b7fc..00000000 --- a/icuSources/samples/translit/translit.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "translit"=.\translit.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/translit/translit.vcproj b/icuSources/samples/translit/translit.vcproj index f4675e0e..2e93988b 100644 --- a/icuSources/samples/translit/translit.vcproj +++ b/icuSources/samples/translit/translit.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/translit.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=uciter8 - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "uciter8.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "uciter8.mak" CFG="uciter8 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "uciter8 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "uciter8 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "uciter8 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "uciter8 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib kernel32.lib user32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "uciter8 - Win32 Release" -# Name "uciter8 - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\uciter8.c -# End Source File -# Begin Source File - -SOURCE=.\uit_len8.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\uit_len8.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/uciter8/uciter8.dsw b/icuSources/samples/uciter8/uciter8.dsw deleted file mode 100644 index 4c3fee18..00000000 --- a/icuSources/samples/uciter8/uciter8.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "uciter8"=.\uciter8.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/uciter8/uciter8.sln b/icuSources/samples/uciter8/uciter8.sln index 0cbfa9c0..03abbf2a 100644 --- a/icuSources/samples/uciter8/uciter8.sln +++ b/icuSources/samples/uciter8/uciter8.sln @@ -1,12 +1,12 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 +Microsoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uciter8", "uciter8.vcproj", "{94379DD9-E6CC-47AC-8E62-0A4ABD8EB121}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution + Debug = Debug + Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {94379DD9-E6CC-47AC-8E62-0A4ABD8EB121}.Debug.ActiveCfg = Debug|Win32 diff --git a/icuSources/samples/uciter8/uciter8.vcproj b/icuSources/samples/uciter8/uciter8.vcproj index 56a3d515..86568185 100644 --- a/icuSources/samples/uciter8/uciter8.vcproj +++ b/icuSources/samples/uciter8/uciter8.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/uciter8.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> =4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ - illegal=1; - break; - case 3: - trail=s[(i)++]; - (c)=((c)<<6)|(trail&0x3f); - if(c<0x110) { - illegal|=(trail&0xc0)^0x80; - } else { - /* code point>0x10ffff, outside Unicode */ - illegal=1; - break; - } - case 2: - trail=s[(i)++]; - (c)=((c)<<6)|(trail&0x3f); - illegal|=(trail&0xc0)^0x80; - case 1: - trail=s[(i)++]; - (c)=((c)<<6)|(trail&0x3f); - illegal|=(trail&0xc0)^0x80; - break; - case 0: - return U_SENTINEL; - /* no default branch to optimize switch() - all values are covered */ - } - - /* correct sequence - all trail bytes have (b7..b6)==(10)? */ - /* illegal is also set if count>=4 */ - if(illegal || (c)0 && U8_IS_TRAIL(s[i])) { - ++(i); - --count; - } - c=U_SENTINEL; - } - } else /* too few bytes left */ { - /* error handling */ - int32_t i0=i; - /* don't just set (i)=(length) in case there is an illegal sequence */ - while((i)<(length) && U8_IS_TRAIL(s[i])) { - ++(i); - } - c=U_SENTINEL; - } - *pi=i; - return c; -} - -static UChar32 -lenient8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c) { - int32_t i=*pi; - uint8_t b, count=1, shift=6; - - /* extract value bits from the last trail byte */ - c&=0x3f; - - for(;;) { - if(i<=start) { - /* no lead byte at all */ - return U_SENTINEL; - } - - /* read another previous byte */ - b=s[--i]; - if((uint8_t)(b-0x80)<0x7e) { /* 0x80<=b<0xfe */ - if(b&0x40) { - /* lead byte, this will always end the loop */ - uint8_t shouldCount=U8_COUNT_TRAIL_BYTES(b); - - if(count==shouldCount) { - /* set the new position */ - *pi=i; - U8_MASK_LEAD_BYTE(b, count); - c|=(UChar32)b<=4 || c>0x10ffff || c=4) { - count=3; - } - c=U_SENTINEL; - } else { - /* exit with correct c */ - } - } else { - /* the lead byte does not match the number of trail bytes */ - /* only set the position to the lead byte if it would - include the trail byte that we started with */ - if(count=0x80) { \ if(U8_IS_LEAD(c)) { \ - (c)=lenient8_nextCharSafeBody(s, &(i), (int32_t)(length), c); \ + (c)=utf8_nextCharSafeBody((const uint8_t *)s, &(i), (int32_t)(length), c, -2); \ } else { \ (c)=U_SENTINEL; \ } \ @@ -196,10 +63,10 @@ lenient8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 } #define L8_PREV(s, start, i, c) { \ - (c)=(s)[--(i)]; \ + (c)=(uint8_t)(s)[--(i)]; \ if((c)>=0x80) { \ if((c)<=0xbf) { \ - (c)=lenient8_prevCharSafeBody(s, start, &(i), c); \ + (c)=utf8_prevCharSafeBody((const uint8_t *)s, start, &(i), c, -2); \ } else { \ (c)=U_SENTINEL; \ } \ diff --git a/icuSources/samples/ucnv/data01.txt b/icuSources/samples/ucnv/data01.txt index dddcc95e..5b53359c 100644 --- a/icuSources/samples/ucnv/data01.txt +++ b/icuSources/samples/ucnv/data01.txt @@ -1,15 +1,15 @@ --*- Coding: utf-8 ; -*- // for emacs -[some latin, devanagari, and cyrillic text] -raj Rajasthani राजेस्थानी - Konkani कोंकणी - Haryanvi हरियानवी -rm Rhaeto-Romance रहेय्टो-रोमान्स -rn Kirundi किरून्दी -ro Romanian रूमानीयन् -ru Russian रुसी футбол -том -атом -Нева -Fid-dinja hawn aktar imÄ¡ienen minn nies f'sensiehom. -Il-mistoqsija oħt il-għerf. (Asking is the sister of knowing.) -aфутбол중앙일보-の“日本語” +-*- Coding: utf-8 ; -*- // for emacs +[some latin, devanagari, and cyrillic text] +raj Rajasthani राजेस्थानी + Konkani कोंकणी + Haryanvi हरियानवी +rm Rhaeto-Romance रहेय्टो-रोमान्स +rn Kirundi किरून्दी +ro Romanian रूमानीयन् +ru Russian रुसी футбол +том +атом +Нева +Fid-dinja hawn aktar imÄ¡ienen minn nies f'sensiehom. +Il-mistoqsija oħt il-għerf. (Asking is the sister of knowing.) +aфутбол중앙일보-の“日本語” diff --git a/icuSources/samples/ucnv/data06.txt b/icuSources/samples/ucnv/data06.txt index d5a71b49..1d7858e1 100644 --- a/icuSources/samples/ucnv/data06.txt +++ b/icuSources/samples/ucnv/data06.txt @@ -1,90 +1,90 @@ -// ******************************************************************************* -// * -// * Copyright (C) 1997-2000, International Business Machines -// * Corporation and others. All Rights Reserved. -// * -// ******************************************************************************* - - - -fa { - - Version { "x0.0" } - - - DayAbbreviations { - "ی∔", - "د∔", - "س∔", - "چ∔", - "پ∔", - "ج∔", - "ش∔", - } - DayNames { - "یی‌شنبه", - "دوشنبه", - "سه‌شنبه", - "چهارشنبه", - "پنج‌شنبه", - "جمعه", - "شنبه", - } - MonthAbbreviations { - "ژان", - "فور", - "مار", - "آور", - "مـه", - "ژون", - "ژوی", - "اوت", - "سپت", - "اكت", - "نوا", - "دسا", - "", - } - MonthNames { - "ژانویه", - "فورویه", - "مارس", - "آوریل", - "مه", - "ژوئن", - "ژوئیه", - "اوت", - "سپتامبر", - "اكتبر", - "نوامبر", - "دسامبر", - "", - } - NumberElements { - "Ù«", - "Ù¬", - ";", - "%", - "0", - "#", - "-", - "E", - "‰", - "∞", - "�", - } - NumberPatterns { - "#,##0.###;-#,##0.###", - "#,##0.#¤;#,##0.#- ¤", - "#,##0%", - } - LocaleID{ "29"} - // /**************** Info Below is needed ****************/ - // CollationElements{} - // Countries{} - // Eras{} - // Languages{} - // ShortLanguage { } - // localPatternChars{} - // +// ******************************************************************************* +// * +// * Copyright (C) 1997-2000, International Business Machines +// * Corporation and others. All Rights Reserved. +// * +// ******************************************************************************* + + + +fa { + + Version { "x0.0" } + + + DayAbbreviations { + "ی∔", + "د∔", + "س∔", + "چ∔", + "پ∔", + "ج∔", + "ش∔", + } + DayNames { + "یی‌شنبه", + "دوشنبه", + "سه‌شنبه", + "چهارشنبه", + "پنج‌شنبه", + "جمعه", + "شنبه", + } + MonthAbbreviations { + "ژان", + "فور", + "مار", + "آور", + "مـه", + "ژون", + "ژوی", + "اوت", + "سپت", + "اكت", + "نوا", + "دسا", + "", + } + MonthNames { + "ژانویه", + "فورویه", + "مارس", + "آوریل", + "مه", + "ژوئن", + "ژوئیه", + "اوت", + "سپتامبر", + "اكتبر", + "نوامبر", + "دسامبر", + "", + } + NumberElements { + "Ù«", + "Ù¬", + ";", + "%", + "0", + "#", + "-", + "E", + "‰", + "∞", + "�", + } + NumberPatterns { + "#,##0.###;-#,##0.###", + "#,##0.#¤;#,##0.#- ¤", + "#,##0%", + } + LocaleID{ "29"} + // /**************** Info Below is needed ****************/ + // CollationElements{} + // Countries{} + // Eras{} + // Languages{} + // ShortLanguage { } + // localPatternChars{} + // } \ No newline at end of file diff --git a/icuSources/samples/ucnv/readme.txt b/icuSources/samples/ucnv/readme.txt index 55e82758..34c81ad6 100644 --- a/icuSources/samples/ucnv/readme.txt +++ b/icuSources/samples/ucnv/readme.txt @@ -1,4 +1,4 @@ -Copyright (C) 2002-2003, International Business Machines +Copyright (C) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. convsamp: a sample program which demonstrates using ICU conversion @@ -13,12 +13,12 @@ Files: convsamp.c Main source file flagcb.h codepage output convenience header flagcb.c codepage output convenience implementation - ucnv.dsw Windows MSVC workspace. Double-click this to get started. - ucnv.dsp Windows MSVC project file + ucnv.sln Windows MSVC workspace. Double-click this to get started. + ucnv.vcproj Windows MSVC project file To Build ucnv on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\ucnv\ucnv.dsw + 2. In MSVC, open the workspace file icu\samples\ucnv\ucnv.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/ucnv/ucnv.dsp b/icuSources/samples/ucnv/ucnv.dsp deleted file mode 100644 index 1f8380bb..00000000 --- a/icuSources/samples/ucnv/ucnv.dsp +++ /dev/null @@ -1,108 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ucnv" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ucnv - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ucnv.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ucnv.mak" CFG="ucnv - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ucnv - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ucnv - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ucnv - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "ucnv - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "ucnv - Win32 Release" -# Name "ucnv - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\convsamp.cpp -# End Source File -# Begin Source File - -SOURCE=.\flagcb.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\flagcb.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/ucnv/ucnv.dsw b/icuSources/samples/ucnv/ucnv.dsw deleted file mode 100644 index 118ef9b9..00000000 --- a/icuSources/samples/ucnv/ucnv.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ucnv"=.\ucnv.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/ucnv/ucnv.vcproj b/icuSources/samples/ucnv/ucnv.vcproj index 1e4b7115..248a3c39 100644 --- a/icuSources/samples/ucnv/ucnv.vcproj +++ b/icuSources/samples/ucnv/ucnv.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/ucnv.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=reader - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "reader.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "reader.mak" CFG="reader - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "reader - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "reader - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "reader - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /I "..\..\tools\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "reader - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "reader___Win32_Debug" -# PROP BASE Intermediate_Dir "reader___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\tools\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "reader - Win32 Release" -# Name "reader - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\reader.c - -!IF "$(CFG)" == "reader - Win32 Release" - -!ELSEIF "$(CFG)" == "reader - Win32 Debug" - -# ADD CPP /I "..\..\icu\include" - -!ENDIF - -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/udata/reader.vcproj b/icuSources/samples/udata/reader.vcproj index ad00eedd..605213a1 100644 --- a/icuSources/samples/udata/reader.vcproj +++ b/icuSources/samples/udata/reader.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\reader_Win32_Debug/reader.pch" AssemblerListingLocation=".\reader_Win32_Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "writer"=".\writer.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/udata/writer.dsp b/icuSources/samples/udata/writer.dsp deleted file mode 100644 index bb966791..00000000 --- a/icuSources/samples/udata/writer.dsp +++ /dev/null @@ -1,102 +0,0 @@ -# Microsoft Developer Studio Project File - Name="writer" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=writer - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "writer.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "writer.mak" CFG="writer - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "writer - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "writer - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "writer - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /I "..\..\tools\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "writer - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "writer___Win32_Debug" -# PROP BASE Intermediate_Dir "writer___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\tools\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "writer - Win32 Release" -# Name "writer - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\writer.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/udata/writer.vcproj b/icuSources/samples/udata/writer.vcproj index 3bc4938c..b29aa8f2 100644 --- a/icuSources/samples/udata/writer.vcproj +++ b/icuSources/samples/udata/writer.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/writer.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ufortune - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ufortune.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ufortune.mak" CFG="ufortune - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ufortune - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ufortune - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ufortune - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib resources\fortune_resources.lib icuio.lib kernel32.lib user32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" - -!ELSEIF "$(CFG)" == "ufortune - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib resources\fortune_resources.lib icuiod.lib kernel32.lib user32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "ufortune - Win32 Release" -# Name "ufortune - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\ufortune.c - -!IF "$(CFG)" == "ufortune - Win32 Release" - -!ELSEIF "$(CFG)" == "ufortune - Win32 Debug" - -!ENDIF - -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# Begin Source File - -SOURCE=.\resources\es.txt -# End Source File -# Begin Source File - -SOURCE=".\resources\res-file-list.txt" - -!IF "$(CFG)" == "ufortune - Win32 Release" - -# PROP Ignore_Default_Tool 1 -# Begin Custom Build -TargetDir=.\Release -InputPath=".\resources\res-file-list.txt" - -"phony-output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - cd resources - nmake -f fortune_resources.mak - copy Fortune_Resources.DLL ..\$(TargetDir) - -# End Custom Build - -!ELSEIF "$(CFG)" == "ufortune - Win32 Debug" - -# PROP Ignore_Default_Tool 1 -# Begin Custom Build -TargetDir=.\Debug -InputPath=".\resources\res-file-list.txt" - -"phony-output" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - cd resources - nmake -f fortune_resources.mak - copy Fortune_Resources.DLL ..\$(TargetDir) - -# End Custom Build - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\resources\root.txt - -!IF "$(CFG)" == "ufortune - Win32 Release" - -!ELSEIF "$(CFG)" == "ufortune - Win32 Debug" - -!ENDIF - -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/samples/ufortune/ufortune.dsw b/icuSources/samples/ufortune/ufortune.dsw deleted file mode 100644 index 2b3c7e38..00000000 --- a/icuSources/samples/ufortune/ufortune.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ufortune"=.\ufortune.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/ufortune/ufortune.vcproj b/icuSources/samples/ufortune/ufortune.vcproj index b6e812b8..3aea76e5 100644 --- a/icuSources/samples/ufortune/ufortune.vcproj +++ b/icuSources/samples/ufortune/ufortune.vcproj @@ -26,6 +26,7 @@ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/ufortune.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ugrep - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ugrep.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ugrep.mak" CFG="ugrep - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ugrep - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ugrep - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ugrep - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /Ob2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib icuuc.lib icuin.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib" /fixed:no -# SUBTRACT LINK32 /pdb:none /debug - -!ELSEIF "$(CFG)" == "ugrep - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib icuucd.lib icuind.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib" - -!ENDIF - -# Begin Target - -# Name "ugrep - Win32 Release" -# Name "ugrep - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\ugrep.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/ugrep/ugrep.dsw b/icuSources/samples/ugrep/ugrep.dsw deleted file mode 100644 index de33a254..00000000 --- a/icuSources/samples/ugrep/ugrep.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ugrep"=.\ugrep.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/ugrep/ugrep.vcproj b/icuSources/samples/ugrep/ugrep.vcproj index c6d471a5..c8a16f2e 100644 --- a/icuSources/samples/ugrep/ugrep.vcproj +++ b/icuSources/samples/ugrep/ugrep.vcproj @@ -28,6 +28,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/ugrep.pch" AssemblerListingLocation=".\Release/" @@ -90,6 +91,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/ugrep.pch" AssemblerListingLocation=".\Debug/" diff --git a/icuSources/samples/uresb/Makefile b/icuSources/samples/uresb/Makefile index 43120e15..488cdb74 100644 --- a/icuSources/samples/uresb/Makefile +++ b/icuSources/samples/uresb/Makefile @@ -1,4 +1,4 @@ -# Copyright (c) 2000-2004 IBM, Inc. and others +# Copyright (c) 2000-2005 IBM, Inc. and others # conversion sample code # Usage: # - configure, build, install ICU @@ -16,13 +16,13 @@ ifeq ($(strip $(ICU_PATH)),) ICU_PATH=$(ICU_DEFAULT_PATH) endif -GENRBOPT = -s. -d. --package-name $(PKG) +GENRBOPT = -s. -d. # Name of your target TARGET=uresb PKG=$(TARGET) RES_SRC=root.txt en.txt sr.txt -RESOURCES=$(RES_SRC:%.txt=$(PKG)_%.res) +RESOURCES=$(RES_SRC:%.txt=%.res) # All object files (C or C++) OBJECTS=uresb.o @@ -45,16 +45,16 @@ LDFLAGS += -L$(ICU_PATH)/source/tools/toolutil $(shell icu-config --ldflags-tool distclean clean: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -$(RMV) $(OBJECTS) $(TARGET) + -$(RMV) $(OBJECTS) $(TARGET) $(RESOURCES) ## resources -$(PKG)_%.res: %.txt +%.res: %.txt @echo "generating $@" $(GENRB) $(GENRBOPT) $^ ## Special for a special codepage -$(PKG)_sr.res : sr.txt +sr.res : sr.txt @echo "generating $@" $(GENRB) $(GENRBOPT) -e cp1251 $? @@ -75,14 +75,3 @@ $(TARGET).report: check $(TARGET).cpp - - - - - - - - - - - diff --git a/icuSources/samples/uresb/readme.txt b/icuSources/samples/uresb/readme.txt index a088452d..362975f1 100644 --- a/icuSources/samples/uresb/readme.txt +++ b/icuSources/samples/uresb/readme.txt @@ -1,4 +1,4 @@ -Copyright (c) 2001-2003 International Business Machines +Copyright (c) 2001-2005 International Business Machines Corporation and others. All Rights Reserved. uresb: Resource Bundle @@ -9,8 +9,8 @@ This sample demonstrates Files: uresb.c Main source file in C - uresb.dsw Windows MSVC workspace. Double-click this to get started. - uresb.dsp Windows MSVC project file + uresb.sln Windows MSVC workspace. Double-click this to get started. + uresb.vcproj Windows MSVC project file resources.dsp Windows project file for resources resources.mak Windows makefile for resources @@ -20,7 +20,7 @@ Files: To Build uresb on Windows 1. Install and build ICU - 2. In MSVC, open the workspace file icu\samples\uresb\uresb.dsw + 2. In MSVC, open the workspace file icu\samples\uresb\uresb.sln 3. Choose a Debug or Release build. 4. Build. diff --git a/icuSources/samples/uresb/resources.dsp b/icuSources/samples/uresb/resources.dsp deleted file mode 100644 index af7c0304..00000000 --- a/icuSources/samples/uresb/resources.dsp +++ /dev/null @@ -1,97 +0,0 @@ -# Microsoft Developer Studio Project File - Name="resources" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) External Target" 0x0106 - -CFG=resources - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "resources.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "resources.mak" CFG="resources - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "resources - Win32 Release" (based on "Win32 (x86) External Target") -!MESSAGE "resources - Win32 Debug" (based on "Win32 (x86) External Target") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" - -!IF "$(CFG)" == "resources - Win32 Release" - -# PROP BASE Use_MFC -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Cmd_Line "NMAKE /f resources.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "resources.exe" -# PROP BASE Bsc_Name "resources.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Cmd_Line "nmake /f "resources.mak"" -# PROP Rebuild_Opt "/a" -# PROP Target_File "resources.exe" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "resources - Win32 Debug" - -# PROP BASE Use_MFC -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "resources___Win32_Debug" -# PROP BASE Intermediate_Dir "resources___Win32_Debug" -# PROP BASE Cmd_Line "NMAKE /f resources.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "resources.exe" -# PROP BASE Bsc_Name "resources.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "resources___Win32_Debug" -# PROP Intermediate_Dir "resources___Win32_Debug" -# PROP Cmd_Line "nmake /f "resources.mak"" -# PROP Rebuild_Opt "/a" -# PROP Target_File "resources.exe" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "resources - Win32 Release" -# Name "resources - Win32 Debug" - -!IF "$(CFG)" == "resources - Win32 Release" - -!ELSEIF "$(CFG)" == "resources - Win32 Debug" - -!ENDIF - -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/uresb/resources.mak b/icuSources/samples/uresb/resources.mak index 3ee4a69c..0c8225fb 100644 --- a/icuSources/samples/uresb/resources.mak +++ b/icuSources/samples/uresb/resources.mak @@ -1,8 +1,9 @@ -## Copyright (c) 2001-2003 International Business Machines +## Copyright (c) 2001-2005 International Business Machines ## Corporation and others. All Rights Reserved. -TARGETS = uresb_en.res uresb_root.res uresb_sr.res +PACKAGE_NAME = uresb +TARGETS = en.res root.res sr.res GENRB = ..\..\..\bin\genrb.exe -GENRBOPT = -s. -d. --package-name uresb +GENRBOPT = -s . -d . all : $(TARGETS) @echo All targets are up to date @@ -10,13 +11,12 @@ all : $(TARGETS) clean : -erase $(TARGETS) - -uresb_en.res : en.txt +en.res : en.txt $(GENRB) $(GENRBOPT) $? -uresb_root.res : root.txt +root.res : root.txt $(GENRB) $(GENRBOPT) $? -uresb_sr.res : sr.txt +sr.res : sr.txt $(GENRB) $(GENRBOPT) --encoding cp1251 $? diff --git a/icuSources/samples/uresb/sr.txt b/icuSources/samples/uresb/sr.txt index 435ad003..698d4fcb 100644 --- a/icuSources/samples/uresb/sr.txt +++ b/icuSources/samples/uresb/sr.txt @@ -1,47 +1,47 @@ -// Copyright (c) 2001-2003 International Business Machines -// Corporation and others. All Rights Reserved. -// Use --encoding cp1251 for genrb - -sr { - errorcodes { - "Íåìà ãðåøêå", - "Èëåãàëàí àðãóìåíò", - "Íåäîñòà¼óžè ðåñóðñ", - "Ôîðìàò ¼å ëîø", - "Ãðåøêà ó ïðèñòóïó äàòîòåöè", - "Èíòåðíà ãðåøêà ó ïðîãðàìó", - "Ãðåøêà ó ïàðñèðàœó ïîäàòàêà", - "Ãðåøêà ó çàóçèìàœó ìåìîðè¼å", - "Ãðåøêà ó îïñåãó èíäåêñà", - "Ãðåøêà ó ïàðñèðàœó ïîäàòàêà", - "Ïðîíàåí ¼å ëîø ñèìáîë", - "Ïðîíàåí ¼å ïðåêèíóò ñèìáîë", - "Ïðîíàåí ¼å èëåãàëàí ñèìáîë", - "Ëîø ôîðìàò òàáåëå", - "Ëîøà äàòîòåêà òàáåëå", - "Áàôåð ñå ïðåëèî", - "Íåïîçíàòà ãðåøêà", - "Ëîø òèï ðåñóðñà", - "Ëîøà åñêå¼ï ñåêâåíöà", - "Íåïîäðæàíà åñêå¼ï ñåêâåíöà" - } - helpTopics { - udata { "This is udata help topic" } - resourcebundles { "This is resource bundle help topic" } - collation { "This is collation help topic" } - breakit { "This is break iterator help topic" } - translit { "This is transliteration help topic" } - unicode { "This is unicode help topic" } - format { "This is format help topic" } - } - - helpKeywords { - udata { "udata" } - resourcebundles { "resources" } - collation { "collation" } - breakit { "breakit" } - translit { "transliteration" } - unicode { "unicode" } - format { "format" } - } -} +// Copyright (c) 2001-2003 International Business Machines +// Corporation and others. All Rights Reserved. +// Use --encoding cp1251 for genrb + +sr { + errorcodes { + "Íåìà ãðåøêå", + "Èëåãàëàí àðãóìåíò", + "Íåäîñòà¼óžè ðåñóðñ", + "Ôîðìàò ¼å ëîø", + "Ãðåøêà ó ïðèñòóïó äàòîòåöè", + "Èíòåðíà ãðåøêà ó ïðîãðàìó", + "Ãðåøêà ó ïàðñèðàœó ïîäàòàêà", + "Ãðåøêà ó çàóçèìàœó ìåìîðè¼å", + "Ãðåøêà ó îïñåãó èíäåêñà", + "Ãðåøêà ó ïàðñèðàœó ïîäàòàêà", + "Ïðîíàåí ¼å ëîø ñèìáîë", + "Ïðîíàåí ¼å ïðåêèíóò ñèìáîë", + "Ïðîíàåí ¼å èëåãàëàí ñèìáîë", + "Ëîø ôîðìàò òàáåëå", + "Ëîøà äàòîòåêà òàáåëå", + "Áàôåð ñå ïðåëèî", + "Íåïîçíàòà ãðåøêà", + "Ëîø òèï ðåñóðñà", + "Ëîøà åñêå¼ï ñåêâåíöà", + "Íåïîäðæàíà åñêå¼ï ñåêâåíöà" + } + helpTopics { + udata { "This is udata help topic" } + resourcebundles { "This is resource bundle help topic" } + collation { "This is collation help topic" } + breakit { "This is break iterator help topic" } + translit { "This is transliteration help topic" } + unicode { "This is unicode help topic" } + format { "This is format help topic" } + } + + helpKeywords { + udata { "udata" } + resourcebundles { "resources" } + collation { "collation" } + breakit { "breakit" } + translit { "transliteration" } + unicode { "unicode" } + format { "format" } + } +} diff --git a/icuSources/samples/uresb/uresb.c b/icuSources/samples/uresb/uresb.c index 9534b96e..db2d5789 100644 --- a/icuSources/samples/uresb/uresb.c +++ b/icuSources/samples/uresb/uresb.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -95,9 +95,9 @@ main(int argc, char* argv[]) { "error in command line argument \"%s\"\n", argv[-argc]); } - if(argc<0 || options[0].doesOccur || options[1].doesOccur) { + if(argc<2 || options[0].doesOccur || options[1].doesOccur) { fprintf(stderr, - "usage: %s [-options]\n", + "usage: %s [-options] locale(s)\n", argv[0]); return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; } @@ -122,8 +122,8 @@ main(int argc, char* argv[]) { } } else { strcpy(resPathBuffer, currdir); - strcat(resPathBuffer, U_FILE_SEP_STRING); - strcat(resPathBuffer, "uresb"); + /*strcat(resPathBuffer, U_FILE_SEP_STRING); + strcat(resPathBuffer, "uresb");*/ resPath = resPathBuffer; /* we'll just dump uresb samples resources */ } @@ -139,7 +139,7 @@ main(int argc, char* argv[]) { } if(options[6].doesOccur) { - VERBOSE = TRUE; + VERBOSE = TRUE; } outerr = u_finit(stderr, locale, encoding); @@ -149,7 +149,7 @@ main(int argc, char* argv[]) { status = U_ZERO_ERROR; arg = getLongPathname(argv[i]); - printf("uresb: processing file \"%s\" in path \"%s\"\n", arg, resPath); + u_fprintf(out, "uresb: processing file \"%s\" in path \"%s\"\n", arg, resPath); bundle = ures_open(resPath, arg, &status); if(U_SUCCESS(status)) { u_fprintf(out, "%s\n", arg); @@ -219,7 +219,6 @@ static UChar *quotedString(const UChar *string) { } void printOutBundle(UFILE *out, UResourceBundle *resource, int32_t indent, UErrorCode *status) { - int32_t noOfElements = ures_getSize(resource); int32_t i = 0; const char *key = ures_getKey(resource); @@ -355,7 +354,7 @@ void printOutBundle(UFILE *out, UResourceBundle *resource, int32_t indent, UErro } void reportError(UErrorCode *status) { - u_fprintf(outerr, "Error %d : %U happened!\n", *status, getErrorName(*status)); + u_fprintf(outerr, "Error %d(%s) : %U happened!\n", *status, u_errorName(*status), getErrorName(*status)); } @@ -379,3 +378,4 @@ const UChar *getErrorName(UErrorCode errorNumber) { } } + diff --git a/icuSources/samples/uresb/uresb.dsp b/icuSources/samples/uresb/uresb.dsp deleted file mode 100644 index 2812f68a..00000000 --- a/icuSources/samples/uresb/uresb.dsp +++ /dev/null @@ -1,111 +0,0 @@ -# Microsoft Developer Studio Project File - Name="uresb" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=uresb - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "uresb.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "uresb.mak" CFG="uresb - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "uresb - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "uresb - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "uresb - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../include" /I "../../tools/toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0xc1a /d "NDEBUG" -# ADD RSC /l 0xc1a /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuio.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib/" /libpath:"../../tools/toolutil/" - -!ELSEIF "$(CFG)" == "uresb - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../../tools/toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0xc1a /d "_DEBUG" -# ADD RSC /l 0xc1a /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuiod.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib/" /libpath:"../../tools/toolutil/" -# SUBTRACT LINK32 /verbose -# Begin Custom Build -InputPath=.\Debug\uresb.exe -InputName=uresb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(InputPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "uresb - Win32 Release" -# Name "uresb - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\uresb.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/uresb/uresb.dsw b/icuSources/samples/uresb/uresb.dsw deleted file mode 100644 index a7ed2cd2..00000000 --- a/icuSources/samples/uresb/uresb.dsw +++ /dev/null @@ -1,44 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "resources"=.\resources.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "uresb"=.\uresb.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name resources - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/uresb/uresb.vcproj b/icuSources/samples/uresb/uresb.vcproj index 487152c5..11b4b2a1 100644 --- a/icuSources/samples/uresb/uresb.vcproj +++ b/icuSources/samples/uresb/uresb.vcproj @@ -26,6 +26,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/uresb.pch" AssemblerListingLocation=".\Release/" @@ -38,7 +39,6 @@ Name="VCCustomBuildTool"/> + Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=ustring - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ustring.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ustring.mak" CFG="ustring - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ustring - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "ustring - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ustring - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "ustring - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib kernel32.lib user32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ENDIF - -# Begin Target - -# Name "ustring - Win32 Release" -# Name "ustring - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\ustring.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/samples/ustring/ustring.dsw b/icuSources/samples/ustring/ustring.dsw deleted file mode 100644 index a5f19f26..00000000 --- a/icuSources/samples/ustring/ustring.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ustring"=.\ustring.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/samples/ustring/ustring.vcproj b/icuSources/samples/ustring/ustring.vcproj index 9a7184aa..f881123b 100644 --- a/icuSources/samples/ustring/ustring.vcproj +++ b/icuSources/samples/ustring/ustring.vcproj @@ -27,6 +27,7 @@ StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/ustring.pch" AssemblerListingLocation=".\Release/" @@ -39,7 +40,6 @@ Name="VCCustomBuildTool"/> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=stubdata - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "stubdata.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "stubdata.mak" CFG="stubdata - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "stubdata - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "stubdata - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "stubdata - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "stubdata - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "stubdata - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib /nologo /dll /machine:I386 /out:"..\..\bin\icudt32.dll" /implib:"..\..\lib\icudt.lib" -# SUBTRACT LINK32 /pdb:none -# Begin Special Build Tool -ProjDir=. -SOURCE="$(InputPath)" -PreLink_Cmds=echo "File with stubdata build time, used as a dependency to trigger fresh data build, since stubdata dll will overwrite the real one." > $(ProjDir)\stubdatabuilt.txt -# End Special Build Tool - -!ELSEIF "$(CFG)" == "stubdata - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /GX /ZI /Od /I "..\common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib /nologo /dll /machine:I386 /out:"..\..\bin\icudt32.dll" /implib:"..\..\lib\icudt.lib" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none -# Begin Special Build Tool -ProjDir=. -SOURCE="$(InputPath)" -PreLink_Cmds=echo "File with stubdata build time, used as a dependency to trigger fresh data build, since stubdata dll will overwrite the real one." > $(ProjDir)\stubdatabuilt.txt -# End Special Build Tool - -!ELSEIF "$(CFG)" == "stubdata - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\common" /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 kernel32.lib user32.lib /nologo /dll /machine:IX86 /out:"..\..\bin\icudt32.dll" /implib:"..\..\lib\icudt.lib" /machine:IA64 -# Begin Special Build Tool -ProjDir=. -SOURCE="$(InputPath)" -PreLink_Cmds=echo "File with stubdata build time, used as a dependency to trigger fresh data build, since stubdata dll will overwrite the real one." > $(ProjDir)\stubdatabuilt.txt -# End Special Build Tool - -!ELSEIF "$(CFG)" == "stubdata - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /GX /Zi /Od /I "..\common" /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "STUBDATA_EXPORTS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Wp64 /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 kernel32.lib user32.lib /nologo /dll /incremental:no /machine:IX86 /out:"..\..\bin\icudt32.dll" /implib:"..\..\lib\icudt.lib" /pdbtype:sept /machine:IA64 -# Begin Special Build Tool -ProjDir=. -SOURCE="$(InputPath)" -PreLink_Cmds=echo "File with stubdata build time, used as a dependency to trigger fresh data build, since stubdata dll will overwrite the real one." > $(ProjDir)\stubdatabuilt.txt -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "stubdata - Win32 Release" -# Name "stubdata - Win32 Debug" -# Name "stubdata - Win64 Release" -# Name "stubdata - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\stubdata.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/stubdata/stubdata.vcproj b/icuSources/stubdata/stubdata.vcproj index b620b235..f1f6a5a0 100644 --- a/icuSources/stubdata/stubdata.vcproj +++ b/icuSources/stubdata/stubdata.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> > 4)); + *(dst+len+1) = T_CString_itosOffset((val & 0xF)); + *(dst+len+2) = 0; +} + +/* this function makes a string with representation of a sortkey */ +static char* U_EXPORT2 sortKeyToString(const UCollator *coll, const uint8_t *sortkey, char *buffer, uint32_t *len) { + int32_t strength = UCOL_PRIMARY; + uint32_t res_size = 0; + UBool doneCase = FALSE; + + char *current = buffer; + const uint8_t *currentSk = sortkey; + + uprv_strcpy(current, "["); + + while(strength <= UCOL_QUATERNARY && strength <= coll->strength) { + if(strength > UCOL_PRIMARY) { + uprv_strcat(current, " . "); + } + while(*currentSk != 0x01 && *currentSk != 0x00) { /* print a level */ + uprv_appendByteToHexString(current, *currentSk++); + uprv_strcat(current, " "); + } + if(coll->caseLevel == UCOL_ON && strength == UCOL_SECONDARY && doneCase == FALSE) { + doneCase = TRUE; + } else if(coll->caseLevel == UCOL_OFF || doneCase == TRUE || strength != UCOL_SECONDARY) { + strength ++; + } + uprv_appendByteToHexString(current, *currentSk++); /* This should print '01' */ + if(strength == UCOL_QUATERNARY && coll->alternateHandling == UCOL_NON_IGNORABLE) { + break; + } + } + + if(coll->strength == UCOL_IDENTICAL) { + uprv_strcat(current, " . "); + while(*currentSk != 0) { + uprv_appendByteToHexString(current, *currentSk++); + uprv_strcat(current, " "); + } + + uprv_appendByteToHexString(current, *currentSk++); + } + uprv_strcat(current, "]"); + + if(res_size > *len) { + return NULL; + } + + return buffer; +} + void addAllCollTest(TestNode** root) { @@ -279,7 +335,8 @@ static void doTestVariant(UCollator* myCollation, const UChar source[], const UC partialSKResult = compareUsingPartials(myCollation, source, sLen, target, tLen, partialSizes[i], &status); if(partialSKResult != result) { - log_err("Partial sortkey comparison returned wrong result: %s, %s (size %i)\n", + log_err("Partial sortkey comparison returned wrong result (%i exp. %i): %s, %s (size %i)\n", + partialSKResult, result, aescstrdup(source,-1), aescstrdup(target,-1), partialSizes[i]); } @@ -333,11 +390,11 @@ static void doTestVariant(UCollator* myCollation, const UChar source[], const UC gSortklen2 = uprv_strlen((const char *)sortKey2)+1; if(sortklen1 != gSortklen1){ log_err("SortKey length does not match Expected: %i Got: %i\n",sortklen1, gSortklen1); - log_verbose("Generated sortkey: %s\n", ucol_sortKeyToString(myCollation, sortKey1, buffer, &len)); + log_verbose("Generated sortkey: %s\n", sortKeyToString(myCollation, sortKey1, buffer, &len)); } if(sortklen2!= gSortklen2){ log_err("SortKey length does not match Expected: %i Got: %i\n", sortklen2, gSortklen2); - log_verbose("Generated sortkey: %s\n", ucol_sortKeyToString(myCollation, sortKey2, buffer, &len)); + log_verbose("Generated sortkey: %s\n", sortKeyToString(myCollation, sortKey2, buffer, &len)); } if(temp < 0) { @@ -552,9 +609,8 @@ void genericLocaleStarterWithResult(const char *locale, const char *s[], uint32_ ucol_close(coll); } -#if 0 /* currently not used with options */ -void genericRulesStarterWithOptions(const char *rules, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize) { +void genericRulesStarterWithOptionsAndResult(const char *rules, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize, UCollationResult result) { UErrorCode status = U_ZERO_ERROR; UChar rlz[RULE_BUFFER_LEN] = { 0 }; uint32_t rlen = u_unescape(rules, rlz, RULE_BUFFER_LEN); @@ -570,15 +626,14 @@ void genericRulesStarterWithOptions(const char *rules, const char *s[], uint32_t ucol_setAttribute(coll, attrs[i], values[i], &status); } - genericOrderingTest(coll, s, size); + genericOrderingTestWithResult(coll, s, size, result); } else { log_err("Unable to open collator with rules %s\n", rules); } ucol_close(coll); } -#endif -void genericLocaleStarterWithOptions(const char *locale, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize) { +void genericLocaleStarterWithOptionsAndResult(const char *locale, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize, UCollationResult result) { UErrorCode status = U_ZERO_ERROR; uint32_t i; @@ -593,14 +648,18 @@ void genericLocaleStarterWithOptions(const char *locale, const char *s[], uint32 ucol_setAttribute(coll, attrs[i], values[i], &status); } - genericOrderingTest(coll, s, size); + genericOrderingTestWithResult(coll, s, size, result); } else { log_err("Unable to open collator for locale %s\n", locale); } ucol_close(coll); } -void genericRulesTestWithResult(const char *rules, const char *s[], uint32_t size, UCollationResult result) { +void genericLocaleStarterWithOptions(const char *locale, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize) { + genericLocaleStarterWithOptionsAndResult(locale, s, size, attrs, values, attsize, UCOL_LESS); +} + +void genericRulesStarterWithResult(const char *rules, const char *s[], uint32_t size, UCollationResult result) { UErrorCode status = U_ZERO_ERROR; UChar rlz[RULE_BUFFER_LEN] = { 0 }; uint32_t rlen = u_unescape(rules, rlz, RULE_BUFFER_LEN); @@ -620,7 +679,7 @@ void genericRulesTestWithResult(const char *rules, const char *s[], uint32_t siz } void genericRulesStarter(const char *rules, const char *s[], uint32_t size) { - genericRulesTestWithResult(rules, s, size, UCOL_LESS); + genericRulesStarterWithResult(rules, s, size, UCOL_LESS); } static void TestTertiary() @@ -800,10 +859,8 @@ static void TestJB581(void) /* Now, do the same comparison with keys */ sourceKeyOut = ucol_getSortKey(myCollator, source, -1, sourceKeyArray, 100); targetKeyOut = ucol_getSortKey(myCollator, target, -1, targetKeyArray, 100); - result = 0; bufferLen = ((targetKeyOut > 100) ? 100 : targetKeyOut); - result = memcmp(sourceKeyArray, targetKeyArray, bufferLen); - if (result != 0) + if (memcmp(sourceKeyArray, targetKeyArray, bufferLen) != 0) { log_err("Comparing two strings with sort keys in C failed.\n"); } diff --git a/icuSources/test/cintltst/callcoll.h b/icuSources/test/cintltst/callcoll.h index 70cf316a..af2cd940 100644 --- a/icuSources/test/cintltst/callcoll.h +++ b/icuSources/test/cintltst/callcoll.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -42,8 +42,10 @@ void genericOrderingTest(UCollator *coll, const char *s[], uint32_t size); void genericLocaleStarter(const char *locale, const char *s[], uint32_t size); void genericLocaleStarterWithResult(const char *locale, const char *s[], uint32_t size, UCollationResult result); void genericLocaleStarterWithOptions(const char *locale, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize); -void genericRulesTestWithResult(const char *rules, const char *s[], uint32_t size, UCollationResult result); +void genericLocaleStarterWithOptionsAndResult(const char *locale, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize, UCollationResult result); +void genericRulesStarterWithResult(const char *rules, const char *s[], uint32_t size, UCollationResult result); void genericRulesStarter(const char *rules, const char *s[], uint32_t size); +void genericRulesStarterWithOptionsAndResult(const char *rules, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize, UCollationResult result); UBool hasCollationElements(const char *locName); diff --git a/icuSources/test/cintltst/calltest.c b/icuSources/test/cintltst/calltest.c index 5c05489c..b9dc7187 100644 --- a/icuSources/test/cintltst/calltest.c +++ b/icuSources/test/cintltst/calltest.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1996-2004, International Business Machines Corporation and + * Copyright (c) 1996-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -28,7 +28,6 @@ void addUTF16Test(TestNode** root); void addUTF8Test(TestNode** root); void addUTransTest(TestNode** root); void addPUtilTest(TestNode** root); -void addCompactArrayTest(TestNode** root); void addTestDeprecatedAPI(TestNode** root); void addUCharTransformTest(TestNode** root); void addUSetTest(TestNode** root); @@ -37,6 +36,9 @@ void addIDNATest(TestNode** root); void addHeapMutexTest(TestNode **root); void addUTraceTest(TestNode** root); void addURegexTest(TestNode** root); +void addUTextTest(TestNode** root); +void addUCsdetTest(TestNode** root); + void addAllTests(TestNode** root) { @@ -48,7 +50,6 @@ void addAllTests(TestNode** root) addConvert(root); addUCharTransformTest(root); addStandardNamesTest(root); - addCompactArrayTest(root); #if !UCONFIG_NO_FORMATTING addFormatTest(root); #endif @@ -73,5 +74,7 @@ void addAllTests(TestNode** root) #if !UCONFIG_NO_REGULAR_EXPRESSIONS addURegexTest(root); #endif + addUTextTest(root); + addUCsdetTest(root); } diff --git a/icuSources/test/cintltst/capitst.c b/icuSources/test/cintltst/capitst.c index ead9a247..b989eef8 100644 --- a/icuSources/test/cintltst/capitst.c +++ b/icuSources/test/cintltst/capitst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -114,6 +114,7 @@ void addCollAPITest(TestNode** root) /*addTest(root, &TestGetDefaultRules, "tscoll/capitst/TestGetDefaultRules");*/ addTest(root, &TestDecomposition, "tscoll/capitst/TestDecomposition"); addTest(root, &TestSafeClone, "tscoll/capitst/TestSafeClone"); + addTest(root, &TestCloneBinary, "tscoll/capitst/TestCloneBinary"); addTest(root, &TestGetSetAttr, "tscoll/capitst/TestGetSetAttr"); addTest(root, &TestBounds, "tscoll/capitst/TestBounds"); addTest(root, &TestGetLocale, "tscoll/capitst/TestGetLocale"); @@ -123,6 +124,7 @@ void addCollAPITest(TestNode** root) addTest(root, &TestMergeSortKeys, "tscoll/capitst/TestMergeSortKeys"); addTest(root, &TestShortString, "tscoll/capitst/TestShortString"); addTest(root, &TestGetContractionsAndUnsafes, "tscoll/capitst/TestGetContractionsAndUnsafes"); + addTest(root, &TestOpenBinary, "tscoll/capitst/TestOpenBinary"); } void TestGetSetAttr(void) { @@ -278,9 +280,13 @@ void TestProperty() ICU 2.2 currVersionArray = {0x21, 0x40, 0x04, 0x04}; ICU 2.4 currVersionArray = {0x21, 0x40, 0x04, 0x04}; ICU 2.6 currVersionArray = {0x21, 0x40, 0x03, 0x03}; + ICU 2.8 currVersionArray = {0x29, 0x80, 0x00, 0x04}; + ICU 3.4 currVersionArray = {0x31, 0xC0, 0x00, 0x04}; */ - UVersionInfo currVersionArray = {0x29, 0x80, 0x00, 0x04}; - UVersionInfo currUCAVersionArray = {4, 0, 0, 0}; + UVersionInfo currVersionArray = {0x31, 0xC0, 0x00, 0x05}; + /* ICU 3.4 had UCA 4.1 */ + /*UVersionInfo currUCAVersionArray = {4, 1, 0, 0};*/ + UVersionInfo currUCAVersionArray = {5, 0, 0, 0}; UVersionInfo versionArray = {0, 0, 0, 0}; UVersionInfo versionUCAArray = {0, 0, 0, 0}; @@ -634,11 +640,13 @@ void TestDecomposition() { ucol_close(vi_VN); } -#define CLONETEST_COLLATOR_COUNT 3 +#define CLONETEST_COLLATOR_COUNT 4 void TestSafeClone() { UChar* test1; UChar* test2; + static const UChar umlautUStr[] = {0x00DC, 0}; + static const UChar oeStr[] = {0x0055, 0x0045, 0}; UCollator * someCollators [CLONETEST_COLLATOR_COUNT]; UCollator * someClonedCollators [CLONETEST_COLLATOR_COUNT]; UCollator * col; @@ -646,6 +654,8 @@ void TestSafeClone() { int8_t testSize = 6; /* Leave this here to test buffer alingment in memory*/ uint8_t buffer [CLONETEST_COLLATOR_COUNT] [U_COL_SAFECLONE_BUFFERSIZE]; int32_t bufferSize = U_COL_SAFECLONE_BUFFERSIZE; + const char sampleRuleChars[] = "&Z < CH"; + UChar sampleRule[sizeof(sampleRuleChars)]; int index; if (TestBufferSize()) { @@ -657,14 +667,16 @@ void TestSafeClone() { test2=(UChar*)malloc(sizeof(UChar) * testSize); u_uastrcpy(test1, "abCda"); u_uastrcpy(test2, "abcda"); + u_uastrcpy(sampleRule, sampleRuleChars); /* one default collator & two complex ones */ someCollators[0] = ucol_open("en_US", &err); someCollators[1] = ucol_open("ko", &err); someCollators[2] = ucol_open("ja_JP", &err); + someCollators[3] = ucol_openRules(sampleRule, -1, UCOL_ON, UCOL_TERTIARY, NULL, &err); if(U_FAILURE(err)) { - log_data_err("Couldn't open one or more collators\n"); - return; + log_data_err("Couldn't open one or more collators\n"); + return; } /* Check the various error & informational states: */ @@ -733,28 +745,117 @@ void TestSafeClone() { err = U_ZERO_ERROR; + /* Test that a cloned collator doesn't accidentally use UCA. */ + col=ucol_open("de@collation=phonebook", &err); + bufferSize = U_COL_SAFECLONE_BUFFERSIZE; + someClonedCollators[0] = ucol_safeClone(col, buffer[0], &bufferSize, &err); + doAssert( (ucol_greater(col, umlautUStr, u_strlen(umlautUStr), oeStr, u_strlen(oeStr))), "Original German phonebook collation sorts differently than expected"); + doAssert( (ucol_greater(someClonedCollators[0], umlautUStr, u_strlen(umlautUStr), oeStr, u_strlen(oeStr))), "Cloned German phonebook collation sorts differently than expected"); + if (!ucol_equals(someClonedCollators[0], col)) { + log_err("FAIL: Cloned German phonebook collator is not equal to original.\n"); + } + ucol_close(col); + ucol_close(someClonedCollators[0]); + + err = U_ZERO_ERROR; + /* change orig & clone & make sure they are independent */ for (index = 0; index < CLONETEST_COLLATOR_COUNT; index++) { + ucol_setStrength(someCollators[index], UCOL_IDENTICAL); + bufferSize = 1; + err = U_ZERO_ERROR; + ucol_close(ucol_safeClone(someCollators[index], buffer[index], &bufferSize, &err)); + if (err != U_SAFECLONE_ALLOCATED_WARNING) { + log_err("FAIL: collator number %d was not allocated.\n", index); + } + bufferSize = U_COL_SAFECLONE_BUFFERSIZE; + err = U_ZERO_ERROR; someClonedCollators[index] = ucol_safeClone(someCollators[index], buffer[index], &bufferSize, &err); + if (someClonedCollators[index] == NULL + || someClonedCollators[index] < (UCollator *)buffer[index] + || someClonedCollators[index] > (UCollator *)(buffer[index]+(U_COL_SAFECLONE_BUFFERSIZE-1))) + { + log_err("FAIL: Cloned collator didn't use provided buffer.\n"); + return; + } + if (!ucol_equals(someClonedCollators[index], someCollators[index])) { + log_err("FAIL: Cloned collator is not equal to original at index = %d.\n", index); + } - ucol_setStrength(someClonedCollators[index], UCOL_TERTIARY); + /* Check the usability */ ucol_setStrength(someCollators[index], UCOL_PRIMARY); - ucol_setAttribute(someClonedCollators[index], UCOL_CASE_LEVEL, UCOL_OFF, &err); ucol_setAttribute(someCollators[index], UCOL_CASE_LEVEL, UCOL_OFF, &err); - doAssert( (ucol_greater(someClonedCollators[index], test1, u_strlen(test1), test2, u_strlen(test2))), "Result should be \"abCda\" >>> \"abcda\" "); doAssert( (ucol_equal(someCollators[index], test1, u_strlen(test1), test2, u_strlen(test2))), "Result should be \"abcda\" == \"abCda\""); - ucol_close(someClonedCollators[index]); + /* Close the original to make sure that the clone is usable. */ ucol_close(someCollators[index]); + + ucol_setStrength(someClonedCollators[index], UCOL_TERTIARY); + ucol_setAttribute(someClonedCollators[index], UCOL_CASE_LEVEL, UCOL_OFF, &err); + doAssert( (ucol_greater(someClonedCollators[index], test1, u_strlen(test1), test2, u_strlen(test2))), "Result should be \"abCda\" >>> \"abcda\" "); + + ucol_close(someClonedCollators[index]); } free(test1); free(test2); } +void TestCloneBinary(){ + UErrorCode err = U_ZERO_ERROR; + UCollator * col = ucol_open("en_US", &err); + UCollator * c; + int32_t size; + uint8_t * buffer; + + if (U_FAILURE(err)) { + log_data_err("Couldn't open collator. Error: %s\n", u_errorName(err)); + return; + } + + size = ucol_cloneBinary(col, NULL, 0, &err); + if(size==0 || err!=U_BUFFER_OVERFLOW_ERROR) { + log_err("ucol_cloneBinary - couldn't check size. Error: %s\n", u_errorName(err)); + return; + } + err = U_ZERO_ERROR; + + buffer = (uint8_t *) malloc(size); + ucol_cloneBinary(col, buffer, size, &err); + if(U_FAILURE(err)) { + log_err("ucol_cloneBinary - couldn't clone.. Error: %s\n", u_errorName(err)); + free(buffer); + return; + } + + /* how to check binary result ? */ + + c = ucol_openBinary(buffer, size, col, &err); + if(U_FAILURE(err)) { + log_err("ucol_openBinary failed. Error: %s\n", u_errorName(err)); + } else { + UChar t[] = {0x41, 0x42, 0x43, 0}; /* ABC */ + uint8_t *k1, *k2; + int l1, l2; + l1 = ucol_getSortKey(col, t, -1, NULL,0); + l2 = ucol_getSortKey(c, t, -1, NULL,0); + k1 = (uint8_t *) malloc(sizeof(uint8_t) * l1); + k2 = (uint8_t *) malloc(sizeof(uint8_t) * l2); + ucol_getSortKey(col, t, -1, k1, l1); + ucol_getSortKey(col, t, -1, k2, l2); + if (strcmp((char *)k1,(char *)k2) != 0){ + log_err("ucol_openBinary - new collator should equal to old one\n"); + }; + free(k1); + free(k2); + } + free(buffer); + ucol_close(c); + ucol_close(col); +} /* ---------------------------------------------------------------------------- ctor -- Tests the getSortKey @@ -763,10 +864,14 @@ void TestSortKey() { uint8_t *sortk1 = NULL, *sortk2 = NULL, *sortk3 = NULL, *sortkEmpty = NULL; uint8_t sortk2_compat[] = { - /* 2.6.1 key */ - 0x26, 0x28, 0x2A, 0x2C, 0x26, 0x01, - 0x09, 0x01, 0x09, 0x01, 0x25, 0x01, - 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 + /* 3.6 key, from UCA 5.0 */ + 0x29, 0x2b, 0x2d, 0x2f, 0x29, 0x01, + 0x09, 0x01, 0x09, 0x01, 0x28, 0x01, + 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 + /* 3.4 key, from UCA 4.1 */ + /* 0x28, 0x2a, 0x2c, 0x2e, 0x28, 0x01, 0x09, 0x01, 0x09, 0x01, 0x27, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 */ + /* 2.6.1 key */ + /* 0x26, 0x28, 0x2A, 0x2C, 0x26, 0x01, 0x09, 0x01, 0x09, 0x01, 0x25, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 */ /* 2.2 key */ /*0x1D, 0x1F, 0x21, 0x23, 0x1D, 0x01, 0x09, 0x01, 0x09, 0x01, 0x1C, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00*/ /* 2.0 key */ @@ -1731,7 +1836,7 @@ static void TestShortString(void) int32_t expectedOffset; uint32_t expectedIdentifier; } testCases[] = { - {"LDE_RDE_KPHONEBOOK_T0041_ZLATN","B2600_KPHONEBOOK_LDE", "de@collation=phonebook", U_USING_FALLBACK_WARNING, 0, 0 }, + {"LDE_RDE_KPHONEBOOK_T0041_ZLATN","B2900_KPHONEBOOK_LDE", "de@collation=phonebook", U_USING_FALLBACK_WARNING, 0, 0 }, {"LEN_RUS_NO_AS_S4","AS_LEN_NO_S4", NULL, U_USING_FALLBACK_WARNING, 0, 0 }, {"LDE_VPHONEBOOK_EO_SI","EO_KPHONEBOOK_LDE_SI", "de@collation=phonebook", U_ZERO_ERROR, 0, 0 }, {"LDE_Kphonebook","KPHONEBOOK_LDE", "de@collation=phonebook", U_ZERO_ERROR, 0, 0 }, @@ -1808,11 +1913,11 @@ static void TestShortString(void) if(idFromSS != identifier) { log_err("FD = %i, id didn't round trip. %08X vs %08X (%s)\n", - j, idFromSS, identifier, testCases[i]); + j, idFromSS, identifier, testCases[i].input); } if(strcmp(fromIDBuffer, fromIDRoundtrip)) { log_err("FD = %i, SS didn't round trip. %s vs %s (%s)\n", - j, fromIDBuffer, fromIDRoundtrip, testCases[i]); + j, fromIDBuffer, fromIDRoundtrip, testCases[i].input); } } @@ -1867,12 +1972,16 @@ TestGetContractionsAndUnsafes(void) const char* locale; const char* inConts; const char* outConts; + const char* inExp; + const char* outExp; const char* unsafeCodeUnits; const char* safeCodeUnits; } tests[] = { { "ru", "[{\\u0474\\u030F}{\\u0475\\u030F}{\\u04D8\\u0308}{\\u04D9\\u0308}{\\u04E8\\u0308}{\\u04E9\\u0308}]", "[{\\u0430\\u0306}{\\u0410\\u0306}{\\u0430\\u0308}{\\u0410\\u0306}{\\u0433\\u0301}{\\u0413\\u0301}]", + "[\\u00e6]", + "[a]", "[\\u0474\\u0475\\u04d8\\u04d9\\u04e8\\u04e9]", "[aAbB\\u0430\\u0410\\u0433\\u0413]" }, @@ -1880,20 +1989,26 @@ TestGetContractionsAndUnsafes(void) "[{\\u0474\\u030F}{\\u0475\\u030F}{\\u04D8\\u0308}{\\u04D9\\u0308}{\\u04E8\\u0308}{\\u04E9\\u0308}" "{\\u0430\\u0306}{\\u0410\\u0306}{\\u0430\\u0308}{\\u0410\\u0306}{\\u0433\\u0301}{\\u0413\\u0301}]", "[]", + "[\\u00e6]", + "[a]", "[\\u0474\\u0475\\u04D8\\u04D9\\u04E8\\u04E9\\u0430\\u0410\\u0433\\u0413]", "[aAbBxv]", }, - { "ja", - "[{\\u309d\\u3099}{\\u30fd\\u3099}]", - "[{lj}{nj}]", - "[\\u3099\\u309d\\u30fd]", - "[\\u30a6\\u3044\\uff73]" - }, { "sh", "[{C\\u0301}{C\\u030C}{C\\u0341}{DZ\\u030C}{Dz\\u030C}{D\\u017D}{D\\u017E}{lj}{nj}]", "[{\\u309d\\u3099}{\\u30fd\\u3099}]", + "[\\u00e6]", + "[a]", "[nlcdzNLCDZ]", "[jabv]" + }, + { "ja", + "[{\\u3053\\u3099\\u309D}{\\u3053\\u3099\\u309D\\u3099}{\\u3053\\u3099\\u309E}{\\u3053\\u3099\\u30FC}{\\u3053\\u309D}{\\u3053\\u309D\\u3099}{\\u3053\\u309E}{\\u3053\\u30FC}{\\u30B3\\u3099\\u30FC}{\\u30B3\\u3099\\u30FD}{\\u30B3\\u3099\\u30FD\\u3099}{\\u30B3\\u3099\\u30FE}{\\u30B3\\u30FC}{\\u30B3\\u30FD}{\\u30B3\\u30FD\\u3099}{\\u30B3\\u30FE}]", + "[{\\u30FD\\u3099}{\\u309D\\u3099}{\\u3053\\u3099}{\\u30B3\\u3099}{lj}{nj}]", + "[\\u30FE\\u00e6]", + "[a]", + "[\\u3099]", + "[]" } }; @@ -1905,31 +2020,110 @@ TestGetContractionsAndUnsafes(void) int32_t i = 0; int32_t noConts = 0; USet *conts = uset_open(0,0); + USet *exp = uset_open(0, 0); USet *set = uset_open(0,0); - UChar buffer[32768]; + int32_t setBufferLen = 65536; + UChar buffer[65536]; int32_t setLen = 0; for(i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { log_verbose("Testing locale: %s\n", tests[i].locale); coll = ucol_open(tests[i].locale, &status); - noConts = ucol_getContractions(coll, conts, &status); + ucol_getContractionsAndExpansions(coll, conts, exp, TRUE, &status); doSetsTest(conts, set, tests[i].inConts, tests[i].outConts, &status); - setLen = uset_toPattern(conts, buffer, 32768, TRUE, &status); + setLen = uset_toPattern(conts, buffer, setBufferLen, TRUE, &status); if(U_SUCCESS(status)) { - log_verbose("%i: %s\n", noConts, aescstrdup(buffer, setLen)); + /*log_verbose("Contractions %i: %s\n", uset_getItemCount(conts), aescstrdup(buffer, setLen));*/ } else { log_err("error %s. %i\n", u_errorName(status), setLen); + status = U_ZERO_ERROR; + } + doSetsTest(exp, set, tests[i].inExp, tests[i].outExp, &status); + setLen = uset_toPattern(exp, buffer, setBufferLen, TRUE, &status); + if(U_SUCCESS(status)) { + /*log_verbose("Expansions %i: %s\n", uset_getItemCount(exp), aescstrdup(buffer, setLen));*/ + } else { + log_err("error %s. %i\n", u_errorName(status), setLen); + status = U_ZERO_ERROR; } noConts = ucol_getUnsafeSet(coll, conts, &status); doSetsTest(conts, set, tests[i].unsafeCodeUnits, tests[i].safeCodeUnits, &status); + setLen = uset_toPattern(conts, buffer, setBufferLen, TRUE, &status); + if(U_SUCCESS(status)) { + log_verbose("Unsafe %i: %s\n", uset_getItemCount(exp), aescstrdup(buffer, setLen)); + } else { + log_err("error %s. %i\n", u_errorName(status), setLen); + status = U_ZERO_ERROR; + } ucol_close(coll); } uset_close(conts); + uset_close(exp); uset_close(set); } +static void +TestOpenBinary(void) +{ + UErrorCode status = U_ZERO_ERROR; + /* + char rule[] = "&h < d < c < b"; + char *wUCA[] = { "a", "h", "d", "c", "b", "i" }; + char *noUCA[] = {"d", "c", "b", "a", "h", "i" }; + */ + /* we have to use Cyrillic letters because latin-1 always gets copied */ + const char rule[] = "&\\u0452 < \\u0434 < \\u0433 < \\u0432"; /* &dje < d < g < v */ + const char *wUCA[] = { "\\u0430", "\\u0452", "\\u0434", "\\u0433", "\\u0432", "\\u0435" }; /* a, dje, d, g, v, e */ + const char *noUCA[] = {"\\u0434", "\\u0433", "\\u0432", "\\u0430", "\\u0435", "\\u0452" }; /* d, g, v, a, e, dje */ + + UChar uRules[256]; + int32_t uRulesLen = u_unescape(rule, uRules, 256); + + UCollator *coll = ucol_openRules(uRules, uRulesLen, UCOL_DEFAULT, UCOL_DEFAULT, NULL, &status); + UCollator *UCA = ucol_open("root", &status); + UCollator *cloneNOUCA = NULL, *cloneWUCA = NULL; + + uint8_t imageBuffer[32768]; + uint8_t *image = imageBuffer; + int32_t imageBufferCapacity = 32768; + + int32_t imageSize; + + if((coll==NULL)||(UCA==NULL)||(U_FAILURE(status))) { + log_data_err("could not load collators or error occured: %s\n", + u_errorName(status)); + return; + } + imageSize = ucol_cloneBinary(coll, image, imageBufferCapacity, &status); + if(U_FAILURE(status)) { + image = (uint8_t *)malloc(imageSize*sizeof(uint8_t)); + status = U_ZERO_ERROR; + imageSize = ucol_cloneBinary(coll, imageBuffer, imageSize, &status); + } + + + cloneWUCA = ucol_openBinary(image, imageSize, UCA, &status); + cloneNOUCA = ucol_openBinary(image, imageSize, NULL, &status); + + genericOrderingTest(coll, wUCA, sizeof(wUCA)/sizeof(wUCA[0])); + + genericOrderingTest(cloneWUCA, wUCA, sizeof(wUCA)/sizeof(wUCA[0])); + genericOrderingTest(cloneNOUCA, noUCA, sizeof(noUCA)/sizeof(noUCA[0])); + + + + if(image != imageBuffer) { + free(image); + } + ucol_close(coll); + ucol_close(cloneNOUCA); + ucol_close(cloneWUCA); + ucol_close(UCA); + +} + #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/cintltst/capitst.h b/icuSources/test/cintltst/capitst.h index e9885f54..d329cb79 100644 --- a/icuSources/test/cintltst/capitst.h +++ b/icuSources/test/cintltst/capitst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -21,6 +21,7 @@ #if !UCONFIG_NO_COLLATION #include "cintltst.h" +#include "callcoll.h" #define MAX_TOKEN_LEN 16 @@ -71,6 +72,11 @@ **/ void TestSafeClone(void); + /** + * Test ucol_cloneBinary(), ucol_openBinary() + **/ + void TestCloneBinary(void); + /** * Test getting bounds for a sortkey */ @@ -115,7 +121,10 @@ */ static void TestGetContractionsAndUnsafes(void); - + /** + * Test funny stuff with open binary + */ + static void TestOpenBinary(void); #endif /* #if !UCONFIG_NO_COLLATION */ #endif diff --git a/icuSources/test/cintltst/cbiapts.c b/icuSources/test/cintltst/cbiapts.c index 86f3f793..fe597ae1 100644 --- a/icuSources/test/cintltst/cbiapts.c +++ b/icuSources/test/cintltst/cbiapts.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -28,10 +28,11 @@ #include "unicode/ubrk.h" #include "unicode/ustring.h" #include "unicode/ucnv.h" +#include "unicode/utext.h" #include "cintltst.h" #include "cbiapts.h" -#define TEST_ASSET_SUCCESS(status) {if (U_FAILURE(status)) { \ +#define TEST_ASSERT_SUCCESS(status) {if (U_FAILURE(status)) { \ log_err("Failure at file %s, line %d, error = %s\n", __FILE__, __LINE__, u_errorName(status));}} #define TEST_ASSERT(expr) {if ((expr)==FALSE) { \ @@ -41,6 +42,7 @@ static void TestBreakIteratorSafeClone(void); static void TestBreakIteratorRules(void); static void TestBreakIteratorRuleError(void); static void TestBreakIteratorStatusVec(void); +static void TestBreakIteratorUText(void); void addBrkIterAPITest(TestNode** root); @@ -51,6 +53,7 @@ void addBrkIterAPITest(TestNode** root) addTest(root, &TestBreakIteratorRules, "tstxtbd/cbiapts/TestBreakIteratorRules"); addTest(root, &TestBreakIteratorRuleError, "tstxtbd/cbiapts/TestBreakIteratorRuleError"); addTest(root, &TestBreakIteratorStatusVec, "tstxtbd/cbiapts/TestBreakIteratorStatusVec"); + addTest(root, &TestBreakIteratorUText, "tstxtbd/cbiapts/TestBreakIteratorUText"); } #define CLONETEST_ITERATOR_COUNT 2 @@ -187,11 +190,11 @@ static void TestBreakIteratorCAPI() /*trying to open an illegal iterator*/ bogus = ubrk_open((UBreakIteratorType)5, "en_US", text, u_strlen(text), &status); if(U_SUCCESS(status)){ - log_err("FAIL: Error in ubrk_open() for BOGUS breakiterator. Expected U_MEMORY_ALLOCATION_ERROR\n"); + log_err("FAIL: Error in ubrk_open() for BOGUS breakiterator. Expected U_ILLEGAL_ARGUMENT_ERROR\n"); } if(U_FAILURE(status)){ - if(status != U_MEMORY_ALLOCATION_ERROR){ - log_err("FAIL: Error in ubrk_open() for BOGUS breakiterator. Expected U_MEMORY_ALLOCATION_ERROR\n Got %s\n", myErrorName(status)); + if(status != U_ILLEGAL_ARGUMENT_ERROR){ + log_err("FAIL: Error in ubrk_open() for BOGUS breakiterator. Expected U_ILLEGAL_ARGUMENT_ERROR\n Got %s\n", myErrorName(status)); } } status=U_ZERO_ERROR; @@ -302,7 +305,7 @@ static void TestBreakIteratorCAPI() /*---- */ -/*Testing ubrk_open and ubrk_close()*/ + /*Testing ubrk_open and ubrk_close()*/ log_verbose("\nTesting open and close for us locale\n"); b = ubrk_open(UBRK_WORD, "fr_FR", text, u_strlen(text), &status); if (U_FAILURE(status)) { @@ -310,6 +313,33 @@ static void TestBreakIteratorCAPI() } ubrk_close(b); + /* Test setText and setUText */ + { + UChar s1[] = {0x41, 0x42, 0x20, 0}; + UChar s2[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0}; + UText *ut = NULL; + UBreakIterator *bb; + int j; + + log_verbose("\nTesting ubrk_setText() and ubrk_setUText()\n"); + status = U_ZERO_ERROR; + bb = ubrk_open(UBRK_WORD, "en_US", NULL, 0, &status); + TEST_ASSERT_SUCCESS(status); + ubrk_setText(bb, s1, -1, &status); + TEST_ASSERT_SUCCESS(status); + ubrk_first(bb); + j = ubrk_next(bb); + TEST_ASSERT(j == 2); + ut = utext_openUChars(ut, s2, -1, &status); + ubrk_setUText(bb, ut, &status); + TEST_ASSERT_SUCCESS(status); + j = ubrk_next(bb); + TEST_ASSERT(j == 5); + + ubrk_close(bb); + utext_close(ut); + } + ubrk_close(word); ubrk_close(sentence); ubrk_close(line); @@ -601,26 +631,78 @@ static void TestBreakIteratorStatusVec() { bi = ubrk_openRules(rules, -1, testString, -1, NULL, &status); - TEST_ASSET_SUCCESS(status); + TEST_ASSERT_SUCCESS(status); TEST_ASSERT(bi != NULL); + /* The TEST_ASSERT above should change too... */ + if (bi != NULL) { + pos = ubrk_next(bi); + TEST_ASSERT(pos == 1); + + memset(vals, -1, sizeof(vals)); + numVals = ubrk_getRuleStatusVec(bi, vals, 10, &status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(numVals == 2); + TEST_ASSERT(vals[0] == 100); + TEST_ASSERT(vals[1] == 300); + TEST_ASSERT(vals[2] == -1); + + numVals = ubrk_getRuleStatusVec(bi, vals, 0, &status); + TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); + TEST_ASSERT(numVals == 2); + } + + ubrk_close(bi); +} + + +/* + * static void TestBreakIteratorUText(void); + * + * Test that ubrk_setUText() is present and works for a simple case. + */ +static void TestBreakIteratorUText(void) { + const char *UTF8Str = "\x41\xc3\x85\x5A\x20\x41\x52\x69\x6E\x67"; /* c3 85 is utf-8 for A with a ring on top */ + /* 0 1 2 34567890 */ + + UErrorCode status = U_ZERO_ERROR; + UBreakIterator *bi = NULL; + int32_t pos = 0; + + + UText *ut = utext_openUTF8(NULL, UTF8Str, -1, &status); + TEST_ASSERT_SUCCESS(status); + + bi = ubrk_open(UBRK_WORD, "en_US", NULL, 0, &status); + if (U_FAILURE(status)) { + log_err("Failure at file %s, line %d, error = %s\n", __FILE__, __LINE__, u_errorName(status)); + return; + } + + ubrk_setUText(bi, ut, &status); + if (U_FAILURE(status)) { + log_err("Failure at file %s, line %d, error = %s\n", __FILE__, __LINE__, u_errorName(status)); + return; + } + + pos = ubrk_first(bi); + TEST_ASSERT(pos == 0); + pos = ubrk_next(bi); - TEST_ASSERT(pos == 1); + TEST_ASSERT(pos == 4); - memset(vals, -1, sizeof(vals)); - numVals = ubrk_getRuleStatusVec(bi, vals, 10, &status); - TEST_ASSET_SUCCESS(status); - TEST_ASSERT(numVals == 2); - TEST_ASSERT(vals[0] == 100); - TEST_ASSERT(vals[1] == 300); - TEST_ASSERT(vals[2] == -1); + pos = ubrk_next(bi); + TEST_ASSERT(pos == 5); - numVals = ubrk_getRuleStatusVec(bi, vals, 0, &status); - TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); - TEST_ASSERT(numVals == 2); + pos = ubrk_next(bi); + TEST_ASSERT(pos == 10); + pos = ubrk_next(bi); + TEST_ASSERT(pos == UBRK_DONE); ubrk_close(bi); + utext_close(ut); } + #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/test/cintltst/cbiditst.c b/icuSources/test/cintltst/cbiditst.c index 21f0d35c..bf7dab2d 100644 --- a/icuSources/test/cintltst/cbiditst.c +++ b/icuSources/test/cintltst/cbiditst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* file name: cbiditst.cpp @@ -18,10 +18,12 @@ #include "unicode/ustring.h" #include "unicode/ubidi.h" #include "unicode/ushape.h" -#include "cmemory.h" #include "cbiditst.h" #include "cstring.h" +/* the following include is needed for sprintf */ +#include +#define MAXLEN MAX_STRING_LENGTH #define LENGTHOF(array) (sizeof(array)/sizeof((array)[0])) /* prototypes ---------------------------------------------------------------*/ @@ -67,6 +69,29 @@ doLOGICALArabicDeShapingTest(void); static void TestReorder(void); +static void TestFailureRecovery(void); + +static void TestMultipleParagraphs(void); + +/* new BIDI API */ +static void doReorderingModeBidiTest(void); +static void doReorderRunsTest(void); +static void doBidiStreamingTest(void); +static void doBidiClassOverrideTest(void); +static const char* inverseBasic(UBiDi *pBiDi, const UChar *src, int32_t srcLen, + uint32_t option, UBiDiLevel level, char *result); +static UBool assertRoundTrip(UBiDi *pBiDi, int32_t tc, int32_t outIndex, + const char *srcChars, const char *destChars, + const UChar *dest, int32_t destLen, int mode, + int option, UBiDiLevel level); +static UBool checkResultLength(UBiDi *pBiDi, const char *srcChars, + const char *destChars, const UChar *dest, + int32_t destLen, const char *mode, + const char *option, UBiDiLevel level); +static UBool testMaps(UBiDi *pBiDi, int32_t stringIndex, const char *src, + const char *dest, const char *mode, const char* option, + UBiDiLevel level, UBool forward); + /* helpers ------------------------------------------------------------------ */ static const char *levelString="..............................................................."; @@ -75,7 +100,7 @@ static void initCharFromDirProps(void); static UChar * -getStringFromDirProps(const uint8_t *dirProps, int32_t length); +getStringFromDirProps(const uint8_t *dirProps, int32_t length, UChar *buffer); static void printUnicode(const UChar *s, int32_t length, const UBiDiLevel *levels); @@ -90,6 +115,13 @@ addComplexTest(TestNode** root) { addTest(root, doBiDiTest, "complex/bidi/BiDiTest"); addTest(root, doInverseBiDiTest, "complex/bidi/inverse"); addTest(root, TestReorder,"complex/bidi/TestReorder"); + addTest(root, TestFailureRecovery,"complex/bidi/TestFailureRecovery"); + addTest(root, TestMultipleParagraphs,"complex/bidi/multipleParagraphs"); + addTest(root, doReorderingModeBidiTest, "complex/bidi/TestReorderingMode"); + addTest(root, doReorderRunsTest, "complex/bidi/TestReorderRunsOnly"); + addTest(root, doBidiStreamingTest, "complex/bidi/TestStreamingMode"); + addTest(root, doBidiClassOverrideTest, "complex/bidi/TestClassOverride"); + addTest(root, doArabicShapingTest, "complex/arabic-shaping/ArabicShapingTest"); addTest(root, doLamAlefSpecialVLTRArabicShapingTest, "complex/arabic-shaping/lamalef"); addTest(root, doTashkeelSpecialVLTRArabicShapingTest, "complex/arabic-shaping/tashkeel"); @@ -105,7 +137,7 @@ charFromDirPropTest(void) { for(i=0; i=0x0100 */ + +static void buildPseudoTables(void) +/* + The rules for pseudo-Bidi are as follows: + - [ == LRE + - ] == RLE + - { == LRO + - } == RLO + - ^ == PDF + - @ == LRM + - & == RLM + - A-F == Arabic Letters 0631-0636 + - G-Z == Hebrew letters 05d7-05ea + - 0-5 == western digits 0030-0035 + - 6-9 == Arabic-Indic digits 0666-0669 + - ` == Combining Grave Accent 0300 (NSM) + - ~ == Delete 007f (BN) + - | == Paragraph Separator 2029 (B) + - _ == Info Separator 1 001f (S) + All other characters represent themselves as Latin-1, with the corresponding + Bidi properties. +*/ +{ + int i; + UChar uchar; + uint8_t c; + /* initialize all tables to unknown */ + for (i=0; i < TABLE_SIZE; i++) { + pseudoToUChar[i] = 0xFFFD; + UCharToPseudo[i] = '?'; + UCharToPseud2[i] = '?'; + } + /* initialize non letters or digits */ + pseudoToUChar[(uint8_t) 0 ] = 0x0000; UCharToPseudo[0x00] = (uint8_t) 0 ; + pseudoToUChar[(uint8_t)' '] = 0x0020; UCharToPseudo[0x20] = (uint8_t)' '; + pseudoToUChar[(uint8_t)'!'] = 0x0021; UCharToPseudo[0x21] = (uint8_t)'!'; + pseudoToUChar[(uint8_t)'"'] = 0x0022; UCharToPseudo[0x22] = (uint8_t)'"'; + pseudoToUChar[(uint8_t)'#'] = 0x0023; UCharToPseudo[0x23] = (uint8_t)'#'; + pseudoToUChar[(uint8_t)'$'] = 0x0024; UCharToPseudo[0x24] = (uint8_t)'$'; + pseudoToUChar[(uint8_t)'%'] = 0x0025; UCharToPseudo[0x25] = (uint8_t)'%'; + pseudoToUChar[(uint8_t)'\'']= 0x0027; UCharToPseudo[0x27] = (uint8_t)'\''; + pseudoToUChar[(uint8_t)'('] = 0x0028; UCharToPseudo[0x28] = (uint8_t)'('; + pseudoToUChar[(uint8_t)')'] = 0x0029; UCharToPseudo[0x29] = (uint8_t)')'; + pseudoToUChar[(uint8_t)'*'] = 0x002A; UCharToPseudo[0x2A] = (uint8_t)'*'; + pseudoToUChar[(uint8_t)'+'] = 0x002B; UCharToPseudo[0x2B] = (uint8_t)'+'; + pseudoToUChar[(uint8_t)','] = 0x002C; UCharToPseudo[0x2C] = (uint8_t)','; + pseudoToUChar[(uint8_t)'-'] = 0x002D; UCharToPseudo[0x2D] = (uint8_t)'-'; + pseudoToUChar[(uint8_t)'.'] = 0x002E; UCharToPseudo[0x2E] = (uint8_t)'.'; + pseudoToUChar[(uint8_t)'/'] = 0x002F; UCharToPseudo[0x2F] = (uint8_t)'/'; + pseudoToUChar[(uint8_t)':'] = 0x003A; UCharToPseudo[0x3A] = (uint8_t)':'; + pseudoToUChar[(uint8_t)';'] = 0x003B; UCharToPseudo[0x3B] = (uint8_t)';'; + pseudoToUChar[(uint8_t)'<'] = 0x003C; UCharToPseudo[0x3C] = (uint8_t)'<'; + pseudoToUChar[(uint8_t)'='] = 0x003D; UCharToPseudo[0x3D] = (uint8_t)'='; + pseudoToUChar[(uint8_t)'>'] = 0x003E; UCharToPseudo[0x3E] = (uint8_t)'>'; + pseudoToUChar[(uint8_t)'?'] = 0x003F; UCharToPseudo[0x3F] = (uint8_t)'?'; + pseudoToUChar[(uint8_t)'\\']= 0x005C; UCharToPseudo[0x5C] = (uint8_t)'\\'; + /* initialize specially used characters */ + pseudoToUChar[(uint8_t)'`'] = 0x0300; UCharToPseud2[0x00] = (uint8_t)'`'; /* NSM */ + pseudoToUChar[(uint8_t)'@'] = 0x200E; UCharToPseud2[0x0E] = (uint8_t)'@'; /* LRM */ + pseudoToUChar[(uint8_t)'&'] = 0x200F; UCharToPseud2[0x0F] = (uint8_t)'&'; /* RLM */ + pseudoToUChar[(uint8_t)'_'] = 0x001F; UCharToPseudo[0x1F] = (uint8_t)'_'; /* S */ + pseudoToUChar[(uint8_t)'|'] = 0x2029; UCharToPseud2[0x29] = (uint8_t)'|'; /* B */ + pseudoToUChar[(uint8_t)'['] = 0x202A; UCharToPseud2[0x2A] = (uint8_t)'['; /* LRE */ + pseudoToUChar[(uint8_t)']'] = 0x202B; UCharToPseud2[0x2B] = (uint8_t)']'; /* RLE */ + pseudoToUChar[(uint8_t)'^'] = 0x202C; UCharToPseud2[0x2C] = (uint8_t)'^'; /* PDF */ + pseudoToUChar[(uint8_t)'{'] = 0x202D; UCharToPseud2[0x2D] = (uint8_t)'{'; /* LRO */ + pseudoToUChar[(uint8_t)'}'] = 0x202E; UCharToPseud2[0x2E] = (uint8_t)'}'; /* RLO */ + pseudoToUChar[(uint8_t)'~'] = 0x007F; UCharToPseudo[0x7F] = (uint8_t)'~'; /* BN */ + /* initialize western digits */ + for (i = 0, uchar = 0x0030; i < 6; i++, uchar++) { + c = (uint8_t)columns[i]; + pseudoToUChar[c] = uchar; + UCharToPseudo[uchar & 0x00ff] = c; + } + /* initialize Hindi digits */ + for (i = 6, uchar = 0x0666; i < 10; i++, uchar++) { + c = (uint8_t)columns[i]; + pseudoToUChar[c] = uchar; + UCharToPseud2[uchar & 0x00ff] = c; + } + /* initialize Arabic letters */ + for (i = 10, uchar = 0x0631; i < 16; i++, uchar++) { + c = (uint8_t)columns[i]; + pseudoToUChar[c] = uchar; + UCharToPseud2[uchar & 0x00ff] = c; + } + /* initialize Hebrew letters */ + for (i = 16, uchar = 0x05D7; i < 36; i++, uchar++) { + c = (uint8_t)columns[i]; + pseudoToUChar[c] = uchar; + UCharToPseud2[uchar & 0x00ff] = c; + } + /* initialize Latin lower case letters */ + for (i = 36, uchar = 0x0061; i < 62; i++, uchar++) { + c = (uint8_t)columns[i]; + pseudoToUChar[c] = uchar; + UCharToPseudo[uchar & 0x00ff] = c; + } + tablesInitialized = TRUE; +} + +/*----------------------------------------------------------------------*/ + +static int pseudoToU16( const int length, const char * input, UChar * output ) +/* This function converts a pseudo-Bidi string into a UChar string. + It returns the length of the UChar string. +*/ +{ + int i; + if (!tablesInitialized) { + buildPseudoTables(); + } + for (i = 0; i < length; i++) + output[i] = pseudoToUChar[(uint8_t)input[i]]; + return length; +} + +/*----------------------------------------------------------------------*/ + +static int u16ToPseudo( const int length, const UChar * input, char * output ) +/* This function converts a UChar string into a pseudo-Bidi string. + It returns the length of the pseudo-Bidi string. +*/ +{ + int i; + UChar uchar; + if (!tablesInitialized) { + buildPseudoTables(); + } + for (i = 0; i < length; i++) + { + uchar = input[i]; + output[i] = uchar < 0x0100 ? UCharToPseudo[uchar] : + UCharToPseud2[uchar & 0x00ff]; + } + output[length] = '\0'; + return length; +} + +static char * formatLevels(UBiDi *bidi, char *buffer) { + UErrorCode ec = U_ZERO_ERROR; + const UBiDiLevel* gotLevels = ubidi_getLevels(bidi, &ec); + int len = ubidi_getLength(bidi); + char c; + int i, k; + + if(U_FAILURE(ec)) { + strcpy(buffer, "BAD LEVELS"); + return buffer; + } + for (i=0; i= sizeof columns) + c = '+'; + else + c = columns[k]; + buffer[i] = c; + } + buffer[len] = '\0'; + return buffer; +} + static void TestReorder(){ static const char* const logicalOrder[] ={ - "DEL(\\u062F\\u0625)ADD(\\u062F.\\u0625.\\u200F)", - "DEL(\\u0645\\u0627\\u064A\\u0648) ADD(\\u0623\\u064A\\u0627\\u0631)", - "DEL(\\u0644\\u0644)ADD(\\u0644.\\u0644.\\u0029\\u0644)\\u0644.\\u200F", - "DEL(\\u0631\\u064A)ADD(\\u0631.\\u064A.) \\u0631.\\u064A.\\u200F", - "DAY 2 \\u0646 \\u0627\\u0644\\u0627\\u062B\\u0646\\u064A\\u0646 DAYABBR", - "DAY 3 \\u062B \\u0627\\u0644\\u062B\\u0644\\u0627\\u062B\\u0627\\u0621 DAYABBR", - "DAY 4 \\u0631 \\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621 DAYABBR", - "DAY 5 \\u062E \\u0627\\u0644\\u062E\\u0645\\u064A\\u0633 DAYABBR", - "DAY 6 \\u062C \\u0627\\u0644\\u062C\\u0645\\u0639\\u0629 DAYABBR", - "DAY 7 \\u0633 \\u0627\\u0644\\u0633\\u0628\\u062A DAYABBR", - "HELLO\\u0627\\u0644\\u0633\\u0628\\u062A", + "del(KC)add(K.C.&)", + "del(QDVT) add(BVDL)", + "del(PQ)add(R.S.)T)U.&", + "del(LV)add(L.V.) L.V.&", + "day 0 R DPDHRVR dayabbr", + "day 1 H DPHPDHDA dayabbr", + "day 2 L DPBLENDA dayabbr", + "day 3 J DPJQVM dayabbr", + "day 4 I DPIQNF dayabbr", + "day 5 M DPMEG dayabbr", + "helloDPMEG", }; static const char* const visualOrder[]={ - "DEL(\\u0625\\u062F)ADD(\\u200F.\\u0625.\\u062F)", - "DEL(\\u0648\\u064A\\u0627\\u0645) ADD(\\u0631\\u0627\\u064A\\u0623)", - "DEL(\\u0644\\u0644)ADD(\\u0644\\u0029.\\u0644.\\u0644)\\u200F.\\u0644", - /* I am doutful about this... - * what I would expect is : - * DEL(\\u064A\\u0631)ADD(.\\u064A.\\u0631) \\u200F.\\u064A.\\u0631 - */ - "DEL(\\u064A\\u0631)ADD(\\u200F.\\u064A.\\u0631 (.\\u064A.\\u0631", - "DAY 2 \\u0646\\u064A\\u0646\\u062B\\u0627\\u0644\\u0627 \\u0646 DAYABBR", - "DAY 3 \\u0621\\u0627\\u062B\\u0627\\u0644\\u062B\\u0644\\u0627 \\u062B DAYABBR", - "DAY 4 \\u0621\\u0627\\u0639\\u0628\\u0631\\u0623\\u0644\\u0627 \\u0631 DAYABBR", - "DAY 5 \\u0633\\u064A\\u0645\\u062E\\u0644\\u0627 \\u062E DAYABBR", - "DAY 6 \\u0629\\u0639\\u0645\\u062C\\u0644\\u0627 \\u062C DAYABBR", - "DAY 7 \\u062A\\u0628\\u0633\\u0644\\u0627 \\u0633 DAYABBR", - "HELLO\\u062A\\u0628\\u0633\\u0644\\u0627", + "del(CK)add(&.C.K)", + "del(TVDQ) add(LDVB)", + "del(QP)add(&.U(T(.S.R", + "del(VL)add(&.V.L (.V.L", + "day 0 RVRHDPD R dayabbr", + "day 1 ADHDPHPD H dayabbr", + "day 2 ADNELBPD L dayabbr", + "day 3 MVQJPD J dayabbr", + "day 4 FNQIPD I dayabbr", + "day 5 GEMPD M dayabbr", + "helloGEMPD", }; static const char* const visualOrder1[]={ - ")\\u062F.\\u0625.\\u200F(DDA)\\u062F\\u0625(LED", - ")\\u0623\\u064A\\u0627\\u0631(DDA )\\u0645\\u0627\\u064A\\u0648(LED", - "\\u0644.\\u0644.(\\u0644(\\u0644.\\u200F(DDA)\\u0644\\u0644(LED", - "\\u0631.\\u064A.( \\u0631.\\u064A.\\u200F(DDA)\\u0631\\u064A(LED", - "RBBAYAD \\u0646 \\u0627\\u0644\\u0627\\u062B\\u0646\\u064A\\u0646 2 YAD", - "RBBAYAD \\u062B \\u0627\\u0644\\u062B\\u0644\\u0627\\u062B\\u0627\\u0621 3 YAD", - "RBBAYAD \\u0631 \\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621 4 YAD", - "RBBAYAD \\u062E \\u0627\\u0644\\u062E\\u0645\\u064A\\u0633 5 YAD", - "RBBAYAD \\u062C \\u0627\\u0644\\u062C\\u0645\\u0639\\u0629 6 YAD", - "RBBAYAD \\u0633 \\u0627\\u0644\\u0633\\u0628\\u062A 7 YAD", - "\\u0627\\u0644\\u0633\\u0628\\u062AOLLEH", + ")K.C.&(dda)KC(led", + ")BVDL(dda )QDVT(led", + "R.S.(T(U.&(dda)PQ(led", + "L.V.( L.V.&(dda)LV(led", + "rbbayad R DPDHRVR 0 yad", + "rbbayad H DPHPDHDA 1 yad", + "rbbayad L DPBLENDA 2 yad", + "rbbayad J DPJQVM 3 yad", + "rbbayad I DPIQNF 4 yad", + "rbbayad M DPMEG 5 yad", + "DPMEGolleh", }; static const char* const visualOrder2[]={ - "\\u200E)\\u200E\\u062F.\\u0625.\\u200F\\u200E(DDA)\\u200E\\u062F\\u0625\\u200E(LED", - "\\u200E)\\u200E\\u0623\\u064A\\u0627\\u0631\\u200E(DDA )\\u200E\\u0645\\u0627\\u064A\\u0648\\u200E(LED", - "\\u0644.\\u0644.)\\u0644)\\u0644.\\u200F\\u200E(DDA)\\u200E\\u0644\\u0644\\u200E(LED", - "\\u0631.\\u064A.) \\u0631.\\u064A.\\u200F\\u200E(DDA)\\u200E\\u0631\\u064A\\u200E(LED", - "RBBAYAD \\u200E\\u0646 \\u0627\\u0644\\u0627\\u062B\\u0646\\u064A\\u0646\\u200E 2 YAD", - "RBBAYAD \\u200E\\u062B \\u0627\\u0644\\u062B\\u0644\\u0627\\u062B\\u0627\\u0621\\u200E 3 YAD", - "RBBAYAD \\u200E\\u0631 \\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621\\u200E 4 YAD", - "RBBAYAD \\u200E\\u062E \\u0627\\u0644\\u062E\\u0645\\u064A\\u0633\\u200E 5 YAD", - "RBBAYAD \\u200E\\u062C \\u0627\\u0644\\u062C\\u0645\\u0639\\u0629\\u200E 6 YAD", - "RBBAYAD \\u200E\\u0633 \\u0627\\u0644\\u0633\\u0628\\u062A\\u200E 7 YAD", - "\\u0627\\u0644\\u0633\\u0628\\u062AOLLEH", + "@)@K.C.&@(dda)@KC@(led", + "@)@BVDL@(dda )@QDVT@(led", + "R.S.)T)U.&@(dda)@PQ@(led", + "L.V.) L.V.&@(dda)@LV@(led", + "rbbayad @R DPDHRVR@ 0 yad", + "rbbayad @H DPHPDHDA@ 1 yad", + "rbbayad @L DPBLENDA@ 2 yad", + "rbbayad @J DPJQVM@ 3 yad", + "rbbayad @I DPIQNF@ 4 yad", + "rbbayad @M DPMEG@ 5 yad", + "DPMEGolleh", }; static const char* const visualOrder3[]={ - ")\\u062F.\\u0625.\\u200F(DDA)\\u062F\\u0625(LED", - ")\\u0623\\u064A\\u0627\\u0631(DDA )\\u0645\\u0627\\u064A\\u0648(LED", - "\\u0644.\\u0644.)\\u0644)\\u0644.\\u200F(\\u0644\\u0644)DDA(LED", - "\\u0631.\\u064A.) \\u0631.\\u064A.\\u200F(\\u0631\\u064A)DDA(LED", - "RBBAYAD \\u0627\\u0644\\u0627\\u062B\\u0646\\u064A\\u0646 \\u0646 2 YAD", - "RBBAYAD \\u0627\\u0644\\u062B\\u0644\\u0627\\u062B\\u0627\\u0621 \\u062B 3 YAD", - "RBBAYAD \\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621 \\u0631 4 YAD", - "RBBAYAD \\u0627\\u0644\\u062E\\u0645\\u064A\\u0633 \\u062E 5 YAD", - "RBBAYAD \\u0627\\u0644\\u062C\\u0645\\u0639\\u0629 \\u062C", - "RBBAYAD \\u0627\\u0644\\u0633\\u0628\\u062A \\u0633 7 YAD", - "\\u0627\\u0644\\u0633\\u0628\\u062AOLLEH" + ")K.C.&(KC)dda(led", + ")BVDL(ddaQDVT) (led", + "R.S.)T)U.&(PQ)dda(led", + "L.V.) L.V.&(LV)dda(led", + "rbbayad DPDHRVR R 0 yad", + "rbbayad DPHPDHDA H 1 yad", + "rbbayad DPBLENDA L 2 yad", + "rbbayad DPJQVM J 3 yad", + "rbbayad DPIQNF I 4 yad", + "rbbayad DPMEG M 5 yad", + "DPMEGolleh" }; static const char* const visualOrder4[]={ - "DEL(ADD(\\u0625\\u062F(.\\u0625.\\u062F)", - "DEL( (\\u0648\\u064A\\u0627\\u0645ADD(\\u0631\\u0627\\u064A\\u0623)", - "DEL(ADD(\\u0644\\u0644(.\\u0644(\\u0644(.\\u0644.\\u0644", - "DEL(ADD(\\u064A\\u0631(.\\u064A.\\u0631 (.\\u064A.\\u0631", - "DAY 2 \\u0646 \\u0646\\u064A\\u0646\\u062B\\u0627\\u0644\\u0627 DAYABBR", - "DAY 3 \\u062B \\u0621\\u0627\\u062B\\u0627\\u0644\\u062B\\u0644\\u0627 DAYABBR", - "DAY 4 \\u0631 \\u0621\\u0627\\u0639\\u0628\\u0631\\u0623\\u0644\\u0627 DAYABBR", - "DAY 5 \\u062E \\u0633\\u064A\\u0645\\u062E\\u0644\\u0627 DAYABBR", - "DAY 6 \\u062C \\u0629\\u0639\\u0645\\u062C\\u0644\\u0627 DAYABBR", - "DAY 7 \\u0633 \\u062A\\u0628\\u0633\\u0644\\u0627 DAYABBR ", - "HELLO\\u062A\\u0628\\u0633\\u0644\\u0627" + "del(add(CK(.C.K)", + "del( (TVDQadd(LDVB)", + "del(add(QP(.U(T(.S.R", + "del(add(VL(.V.L (.V.L", + "day 0 R RVRHDPD dayabbr", + "day 1 H ADHDPHPD dayabbr", + "day 2 L ADNELBPD dayabbr", + "day 3 J MVQJPD dayabbr", + "day 4 I FNQIPD dayabbr", + "day 5 M GEMPD dayabbr", + "helloGEMPD" }; + char formatChars[MAXLEN]; UErrorCode ec = U_ZERO_ERROR; UBiDi* bidi = ubidi_open(); - int i=0; - for(;i<(sizeof(logicalOrder)/sizeof(logicalOrder[0]));i++){ - int32_t srcSize = (int32_t)uprv_strlen(logicalOrder[i]); + int i; + for(i=0;i0); @@ -627,6 +792,7 @@ testReordering(UBiDi *pBiDi, int testNumber) { } while(--runLength>0); } } + log_verbose("\n"); /* print all the maps */ log_verbose("logical maps:\n"); @@ -643,11 +809,11 @@ testReordering(UBiDi *pBiDi, int testNumber) { } log_verbose("\nvisual maps:\n"); - for(i=0; i4.5 */ + ".123->4.5", +/* (2) 678 */ + "678", +/* (3) .678->8.9 */ + ".678->8.9", +/* (4) JIH1.2,3MLK */ + "JIH1.2,3MLK", +/* (5) FE.>12-> */ + "FE.>12->", +/* (6) JIH.>12->a */ + "JIH.>12->a", +/* (7) CBA.>67->89=a */ + "CBA.>67->89=a", +/* (8) CBA.123->xyz */ + "CBA.123->xyz", +/* (9) .>12->xyz */ + ".>12->xyz", +/* (10) a.>67->xyz */ + "a.>67->xyz", +/* (11) 123JIH */ + "123JIH", +/* (12) 123 JIH */ + "123 JIH" +}; + +static const char* const textOut[] = { +/* TC 0: 123 */ + "123", /* (0) */ +/* TC 1: .123->4.5 */ + ".123->4.5", /* (1) */ + "4.5<-123.", /* (2) */ +/* TC 2: 678 */ + "678", /* (3) */ +/* TC 3: .678->8.9 */ + ".8.9<-678", /* (4) */ + "8.9<-678.", /* (5) */ + ".678->8.9", /* (6) */ +/* TC 4: MLK1.2,3JIH */ + "KLM1.2,3HIJ", /* (7) */ +/* TC 5: FE.>12-> */ + "12<.EF->", /* (8) */ + "<-12<.EF", /* (9) */ + "EF.>@12->", /* (10) */ +/* TC 6: JIH.>12->a */ + "12<.HIJ->a", /* (11) */ + "a<-12<.HIJ", /* (12) */ + "HIJ.>@12->a", /* (13) */ + "a&<-12<.HIJ", /* (14) */ +/* TC 7: CBA.>67->89=a */ + "ABC.>@67->89=a", /* (15) */ + "a=89<-67<.ABC", /* (16) */ + "a&=89<-67<.ABC", /* (17) */ + "89<-67<.ABC=a", /* (18) */ +/* TC 8: CBA.123->xyz */ + "123.ABC->xyz", /* (19) */ + "xyz<-123.ABC", /* (20) */ + "ABC.@123->xyz", /* (21) */ + "xyz&<-123.ABC", /* (22) */ +/* TC 9: .>12->xyz */ + ".>12->xyz", /* (23) */ + "xyz<-12<.", /* (24) */ + "xyz&<-12<.", /* (25) */ +/* TC 10: a.>67->xyz */ + "a.>67->xyz", /* (26) */ + "a.>@67@->xyz", /* (27) */ + "xyz<-67<.a", /* (28) */ +/* TC 11: 123JIH */ + "123HIJ", /* (29) */ + "HIJ123", /* (30) */ +/* TC 12: 123 JIH */ + "123 HIJ", /* (31) */ + "HIJ 123", /* (32) */ +}; + +#define NO UBIDI_MAP_NOWHERE +#define MAX_MAP_LENGTH 20 + +static const int32_t forwardMap[][MAX_MAP_LENGTH] = { +/* TC 0: 123 */ + { 0, 1, 2 }, /* (0) */ +/* TC 1: .123->4.5 */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, /* (1) */ + { 8, 5, 6, 7, 4, 3, 0, 1, 2 }, /* (2) */ +/* TC 2: 678 */ + { 0, 1, 2 }, /* (3) */ +/* TC 3: .678->8.9 */ + { 0, 6, 7, 8, 5, 4, 1, 2, 3 }, /* (4) */ + { 8, 5, 6, 7, 4, 3, 0, 1, 2 }, /* (5) */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, /* (6) */ +/* TC 4: MLK1.2,3JIH */ + { 10, 9, 8, 3, 4, 5, 6, 7, 2, 1, 0 }, /* (7) */ +/* TC 5: FE.>12-> */ + { 5, 4, 3, 2, 0, 1, 6, 7 }, /* (8) */ + { 7, 6, 5, 4, 2, 3, 1, 0 }, /* (9) */ + { 1, 0, 2, 3, 5, 6, 7, 8 }, /* (10) */ +/* TC 6: JIH.>12->a */ + { 6, 5, 4, 3, 2, 0, 1, 7, 8, 9 }, /* (11) */ + { 9, 8, 7, 6, 5, 3, 4, 2, 1, 0 }, /* (12) */ + { 2, 1, 0, 3, 4, 6, 7, 8, 9, 10 }, /* (13) */ + { 10, 9, 8, 7, 6, 4, 5, 3, 2, 0 }, /* (14) */ +/* TC 7: CBA.>67->89=a */ + { 2, 1, 0, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13 }, /* (15) */ + { 12, 11, 10, 9, 8, 6, 7, 5, 4, 2, 3, 1, 0 }, /* (16) */ + { 13, 12, 11, 10, 9, 7, 8, 6, 5, 3, 4, 2, 0 }, /* (17) */ + { 10, 9, 8, 7, 6, 4, 5, 3, 2, 0, 1, 11, 12 }, /* (18) */ +/* TC 8: CBA.123->xyz */ + { 6, 5, 4, 3, 0, 1, 2, 7, 8, 9, 10, 11 }, /* (19) */ + { 11, 10, 9, 8, 5, 6, 7, 4, 3, 0, 1, 2 }, /* (20) */ + { 2, 1, 0, 3, 5, 6, 7, 8, 9, 10, 11, 12 }, /* (21) */ + { 12, 11, 10, 9, 6, 7, 8, 5, 4, 0, 1, 2 }, /* (22) */ +/* TC 9: .>12->xyz */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, /* (23) */ + { 8, 7, 5, 6, 4, 3, 0, 1, 2 }, /* (24) */ + { 9, 8, 6, 7, 5, 4, 0, 1, 2 }, /* (25) */ +/* TC 10: a.>67->xyz */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, /* (26) */ + { 0, 1, 2, 4, 5, 7, 8, 9, 10, 11 }, /* (27) */ + { 9, 8, 7, 5, 6, 4, 3, 0, 1, 2 }, /* (28) */ +/* TC 11: 123JIH */ + { 0, 1, 2, 5, 4, 3 }, /* (29) */ + { 3, 4, 5, 2, 1, 0 }, /* (30) */ +/* TC 12: 123 JIH */ + { 0, 1, 2, 3, 6, 5, 4 }, /* (31) */ + { 4, 5, 6, 3, 2, 1, 0 }, /* (32) */ +}; + +static const int32_t inverseMap[][MAX_MAP_LENGTH] = { +/* TC 0: 123 */ + { 0, 1, 2 }, /* (0) */ +/* TC 1: .123->4.5 */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, /* (1) */ + { 6, 7, 8, 5, 4, 1, 2, 3, 0 }, /* (2) */ +/* TC 2: 678 */ + { 0, 1, 2 }, /* (3) */ +/* TC 3: .678->8.9 */ + { 0, 6, 7, 8, 5, 4, 1, 2, 3 }, /* (4) */ + { 6, 7, 8, 5, 4, 1, 2, 3, 0 }, /* (5) */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, /* (6) */ +/* TC 4: MLK1.2,3JIH */ + { 10, 9, 8, 3, 4, 5, 6, 7, 2, 1, 0 }, /* (7) */ +/* TC 5: FE.>12-> */ + { 4, 5, 3, 2, 1, 0, 6, 7 }, /* (8) */ + { 7, 6, 4, 5, 3, 2, 1, 0 }, /* (9) */ + { 1, 0, 2, 3, NO, 4, 5, 6, 7 }, /* (10) */ +/* TC 6: JIH.>12->a */ + { 5, 6, 4, 3, 2, 1, 0, 7, 8, 9 }, /* (11) */ + { 9, 8, 7, 5, 6, 4, 3, 2, 1, 0 }, /* (12) */ + { 2, 1, 0, 3, 4, NO, 5, 6, 7, 8, 9 }, /* (13) */ + { 9, NO, 8, 7, 5, 6, 4, 3, 2, 1, 0 }, /* (14) */ +/* TC 7: CBA.>67->89=a */ + { 2, 1, 0, 3, 4, NO, 5, 6, 7, 8, 9, 10, 11, 12 }, /* (15) */ + { 12, 11, 9, 10, 8, 7, 5, 6, 4, 3, 2, 1, 0 }, /* (16) */ + { 12, NO, 11, 9, 10, 8, 7, 5, 6, 4, 3, 2, 1, 0 }, /* (17) */ + { 9, 10, 8, 7, 5, 6, 4, 3, 2, 1, 0, 11, 12 }, /* (18) */ +/* TC 8: CBA.123->xyz */ + { 4, 5, 6, 3, 2, 1, 0, 7, 8, 9, 10, 11 }, /* (19) */ + { 9, 10, 11, 8, 7, 4, 5, 6, 3, 2, 1, 0 }, /* (20) */ + { 2, 1, 0, 3, NO, 4, 5, 6, 7, 8, 9, 10, 11 }, /* (21) */ + { 9, 10, 11, NO, 8, 7, 4, 5, 6, 3, 2, 1, 0 }, /* (22) */ +/* TC 9: .>12->xyz */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, /* (23) */ + { 6, 7, 8, 5, 4, 2, 3, 1, 0 }, /* (24) */ + { 6, 7, 8, NO, 5, 4, 2, 3, 1, 0 }, /* (25) */ +/* TC 10: a.>67->xyz */ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, /* (26) */ + { 0, 1, 2, NO, 3, 4, NO, 5, 6, 7, 8, 9 }, /* (27) */ + { 7, 8, 9, 6, 5, 3, 4, 2, 1, 0 }, /* (28) */ +/* TC 11: 123JIH */ + { 0, 1, 2, 5, 4, 3 }, /* (29) */ + { 5, 4, 3, 0, 1, 2 }, /* (30) */ +/* TC 12: 123 JIH */ + { 0, 1, 2, 3, 6, 5, 4 }, /* (31) */ + { 6, 5, 4, 3, 0, 1, 2 }, /* (32) */ +}; + +static const char outIndices[TC_COUNT][MODES_COUNT - 1][OPTIONS_COUNT] + [LEVELS_COUNT] = { + { /* TC 0: 123 */ + {{ 0, 0}, { 0, 0}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 0, 0}, { 0, 0}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 0, 0}, { 0, 0}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 0, 0}, { 0, 0}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 1: .123->4.5 */ + {{ 1, 2}, { 1, 2}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 2}, { 1, 2}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 2}, { 1, 2}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 2}, { 1, 2}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 2: 678 */ + {{ 3, 3}, { 3, 3}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 3, 3}, { 3, 3}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 3, 3}, { 3, 3}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 3, 3}, { 3, 3}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 3: .678->8.9 */ + {{ 6, 5}, { 6, 5}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 4, 5}, { 4, 5}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 6, 5}, { 6, 5}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 6, 5}, { 6, 5}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 4: MLK1.2,3JIH */ + {{ 7, 7}, { 7, 7}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 7, 7}, { 7, 7}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 7, 7}, { 7, 7}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 7, 7}, { 7, 7}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 5: FE.>12-> */ + {{ 8, 9}, { 8, 9}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{10, 9}, { 8, 9}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 8, 9}, { 8, 9}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{10, 9}, { 8, 9}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 6: JIH.>12->a */ + {{11, 12}, {11, 12}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{13, 14}, {11, 12}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{11, 12}, {11, 12}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{13, 14}, {11, 12}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 7: CBA.>67->89=a */ + {{18, 16}, {18, 16}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{18, 17}, {18, 16}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{18, 16}, {18, 16}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{15, 17}, {18, 16}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 8: CBA.>124->xyz */ + {{19, 20}, {19, 20}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{21, 22}, {19, 20}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{19, 20}, {19, 20}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{21, 22}, {19, 20}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 9: .>12->xyz */ + {{23, 24}, {23, 24}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{23, 25}, {23, 24}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{23, 24}, {23, 24}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{23, 25}, {23, 24}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 10: a.>67->xyz */ + {{26, 26}, {26, 26}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{26, 27}, {26, 28}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{26, 28}, {26, 28}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{26, 27}, {26, 28}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 11: 124JIH */ + {{30, 30}, {30, 30}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{29, 30}, {29, 30}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{30, 30}, {30, 30}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{30, 30}, {30, 30}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + }, + { /* TC 12: 124 JIH */ + {{32, 32}, {32, 32}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{31, 32}, {31, 32}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{31, 32}, {31, 32}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{31, 32}, {31, 32}} /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + } +}; + +static UBool +assertRoundTrip(UBiDi *pBiDi, int32_t tc, int32_t outIndex, const char *srcChars, + const char *destChars, const UChar *dest, int32_t destLen, + int mode, int option, UBiDiLevel level) { + + static const char roundtrip[TC_COUNT][MODES_COUNT][OPTIONS_COUNT] + [LEVELS_COUNT] = { + { /* TC 0: 123 */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 1: .123->4.5 */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 2: 678 */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 3: .678->8.9 */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 0, 0}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 4: MLK1.2,3JIH */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 5: FE.>12-> */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 0, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 6: JIH.>12->a */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 0, 0}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 7: CBA.>67->89=a */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 0, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 0, 0}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 8: CBA.>123->xyz */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 0, 0}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 9: .>12->xyz */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 0}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 10: a.>67->xyz */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 0}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 11: 123JIH */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + }, + { /* TC 12: 123 JIH */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_GROUP_NUMBERS_WITH_R */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_LIKE_DIRECT */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}}, /* UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL */ + {{ 1, 1}, { 1, 1}} /* UBIDI_REORDER_INVERSE_NUMBERS_AS_L */ + } + }; + + #define SET_ROUND_TRIP_MODE(mode) \ + ubidi_setReorderingMode(pBiDi, mode); \ + desc = #mode; \ + break; + + UErrorCode rc = U_ZERO_ERROR; + UChar dest2[MAXLEN]; + int32_t destLen2; + const char* desc; + char destChars2[MAXLEN]; + char destChars3[MAXLEN]; + + switch (modes[mode].value) { + case UBIDI_REORDER_NUMBERS_SPECIAL: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL) + case UBIDI_REORDER_GROUP_NUMBERS_WITH_R: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_GROUP_NUMBERS_WITH_R) + case UBIDI_REORDER_RUNS_ONLY: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_RUNS_ONLY) + case UBIDI_REORDER_INVERSE_NUMBERS_AS_L: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_DEFAULT) + case UBIDI_REORDER_INVERSE_LIKE_DIRECT: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_DEFAULT) + case UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_NUMBERS_SPECIAL) + default: + SET_ROUND_TRIP_MODE(UBIDI_REORDER_INVERSE_LIKE_DIRECT) + } + ubidi_setReorderingOptions(pBiDi, UBIDI_OPTION_REMOVE_CONTROLS); + + ubidi_setPara(pBiDi, dest, destLen, level, NULL, &rc); + assertSuccessful("ubidi_setPara", &rc); + *dest2 = 0; + destLen2 = ubidi_writeReordered(pBiDi, dest2, MAXLEN, UBIDI_DO_MIRRORING, + &rc); + assertSuccessful("ubidi_writeReordered", &rc); + + u16ToPseudo(destLen, dest, destChars3); + u16ToPseudo(destLen2, dest2, destChars2); + if (strcmp(srcChars, destChars2)) { + if (roundtrip[tc][mode][option][level]) { + log_err("\nRound trip failed for case=%d mode=%d option=%d.\n" + "%20s %s\n%20s %s\n%20s %s\n%20s %s\n%20s %s" + "\n%20s %u\n", tc, mode, option, + "Original text:", srcChars, + "Round-tripped text:", destChars2, + "Intermediate text:", destChars3, + "Reordering mode:", modes[mode].description, + "Reordering option:", options[option].description, + "Paragraph level:", level); + } + else { + log_verbose("\nExpected round trip failure for case=%d mode=%d option=%d.\n" + "%20s %s\n%20s %s\n%20s %s\n%20s %s\n%20s %s" + "\n%20s %u\n", tc, mode, option, + "Original text:", srcChars, + "Round-tripped text:", destChars2, + "Intermediate text:", destChars3, + "Reordering mode:", modes[mode].description, + "Reordering option:", options[option].description, + "Paragraph level:", level); + } + return FALSE; + } + if (!checkResultLength(pBiDi, destChars, destChars2, dest2, destLen2, + desc, "UBIDI_OPTION_REMOVE_CONTROLS", level)) { + return FALSE; + } + if (outIndex > -1 && !testMaps(pBiDi, outIndex, srcChars, destChars, + desc, "UBIDI_OPTION_REMOVE_CONTROLS", + level, FALSE)) { + return FALSE; + } + return TRUE; +} + +static UBool +checkResultLength(UBiDi *pBiDi, const char *srcChars, const char *destChars, + const UChar *dest, int32_t destLen, const char* mode, + const char* option, UBiDiLevel level) { + int32_t actualLen; + if (strcmp(mode, "UBIDI_REORDER_INVERSE_NUMBERS_AS_L") == 0) + actualLen = strlen(destChars); + else + actualLen = ubidi_getResultLength(pBiDi); + if (actualLen != destLen) { + log_err("\nubidi_getResultLength failed.\n%20s %7d\n%20s %7d\n" + "%20s %s\n%20s %s\n%20s %s\n%20s %s\n%20s %u\n", + "Expected:", destLen, "Actual:", actualLen, + "Input:", srcChars, "Output:", destChars, + "Reordering mode:", mode, "Reordering option:", option, + "Paragraph level:", level); + return FALSE; + } + return TRUE; +} + +static void +doReorderRunsTest(void) { + static const struct { + const char* textIn; + const char* textOut[2][2]; + const char noroundtrip[2]; + } testCases[] = { + {"ab 234 896 de", {{"de 896 ab 234", "de 896 ab 234"}, + {"ab 234 @896@ de", "de 896 ab 234"}}, {0, 0}}, + {"abcGHI", {{"GHIabc", "GHIabc"}, {"GHIabc", "GHIabc"}}, {0, 0}}, + {"a.>67->", {{"<-67<.a", "<-67<.a"}, {"<-67<.a", "<-67<.a"}}, {0, 0}}, + {"-=%$123/ *", {{"* /%$123=-", "* /%$123=-"}, + {"* /%$123=-", "* /%$123=-"}}, {0, 0}}, + {"abc->12..>JKL", {{"JKL<..12<-abc", "JKL<..abc->12"}, + {"JKL<..12<-abc", "JKL<..abc->12"}}, {0, 0}}, + {"JKL->12..>abc", {{"abc<..JKL->12", "abc<..12<-JKL"}, + {"abc<..JKL->12", "abc<..12<-JKL"}}, {0, 0}}, + {"123->abc", {{"abc<-123", "abc<-123"}, + {"abc&<-123", "abc<-123"}}, {1, 0}}, + {"123->JKL", {{"JKL<-123", "123->JKL"}, + {"JKL<-123", "JKL<-@123"}}, {0, 1}}, + {"*>12.>34->JKL", {{"JKL<-34<.12<*", "12.>34->JKL<*"}, + {"JKL<-34<.12<*", "JKL<-@34<.12<*"}}, {0, 1}}, + {"*>67.>89->JKL", {{"67.>89->JKL<*", "67.>89->JKL<*"}, + {"67.>89->JKL<*", "67.>89->JKL<*"}}, {0, 0}}, + {"* /abc-=$%123", {{"$%123=-abc/ *", "abc-=$%123/ *"}, + {"$%123=-abc/ *", "abc-=$%123/ *"}}, {0, 0}}, + {"* /$%def-=123", {{"123=-def%$/ *", "def-=123%$/ *"}, + {"123=-def%$/ *", "def-=123%$/ *"}}, {0, 0}}, + {"-=GHI* /123%$", {{"GHI* /123%$=-", "123%$/ *GHI=-"}, + {"GHI* /123%$=-", "123%$/ *GHI=-"}}, {0, 0}}, + {"-=%$JKL* /123", {{"JKL* /%$123=-", "123/ *JKL$%=-"}, + {"JKL* /%$123=-", "123/ *JKL$%=-"}}, {0, 0}}, + {"ab =#CD *?450", {{"CD *?450#= ab", "450?* CD#= ab"}, + {"CD *?450#= ab", "450?* CD#= ab"}}, {0, 0}}, + {"ab 234 896 de", {{"de 896 ab 234", "de 896 ab 234"}, + {"ab 234 @896@ de", "de 896 ab 234"}}, {0, 0}}, + {"abc-=%$LMN* /123", {{"LMN* /%$123=-abc", "123/ *LMN$%=-abc"}, + {"LMN* /%$123=-abc", "123/ *LMN$%=-abc"}}, {0, 0}}, + {"123->JKL&MN&P", {{"JKLMNP<-123", "123->JKLMNP"}, + {"JKLMNP<-123", "JKLMNP<-@123"}}, {0, 1}} + }; + UBiDi *pBiDi = getBiDiObject(); + UBiDi *pL2VBiDi = getBiDiObject(); + UChar src[MAXLEN], dest[MAXLEN], visual1[MAXLEN], visual2[MAXLEN]; + char destChars[MAXLEN], vis1Chars[MAXLEN], vis2Chars[MAXLEN]; + int32_t srcLen, destLen, vis1Len, vis2Len, option, i, j, nCases; + UErrorCode rc = U_ZERO_ERROR; + UBiDiLevel level; + if(!pL2VBiDi) { + ubidi_close(pBiDi); /* in case this one was allocated */ + return; + } + ubidi_setReorderingMode(pBiDi, UBIDI_REORDER_RUNS_ONLY); + ubidi_setReorderingOptions(pL2VBiDi, UBIDI_OPTION_REMOVE_CONTROLS); + + for (option = 0; option < 2; option++) { + ubidi_setReorderingOptions(pBiDi, option==0 ? UBIDI_OPTION_REMOVE_CONTROLS + : UBIDI_OPTION_INSERT_MARKS); + for (i = 0, nCases = LENGTHOF(testCases); i < nCases; i++) { + srcLen = strlen(testCases[i].textIn); + pseudoToU16(srcLen, testCases[i].textIn, src); + for(j = 0; j < 2; j++) { + level = paraLevels[j]; + ubidi_setPara(pBiDi, src, srcLen, level, NULL, &rc); + assertSuccessful("ubidi_setPara", &rc); + *dest = 0; + destLen = ubidi_writeReordered(pBiDi, dest, MAXLEN, UBIDI_DO_MIRRORING, &rc); + assertSuccessful("ubidi_writeReordered", &rc); + u16ToPseudo(destLen, dest, destChars); + assertStringsEqual(testCases[i].textOut[option][level], destChars, + testCases[i].textIn, "UBIDI_REORDER_RUNS_ONLY", + option==0 ? "0" : "UBIDI_OPTION_INSERT_MARKS", + pBiDi); + + if((option==0) && testCases[i].noroundtrip[level]) { + continue; + } + ubidi_setPara(pL2VBiDi, src, srcLen, level, NULL, &rc); + assertSuccessful("ubidi_setPara1", &rc); + *visual1 = 0; + vis1Len = ubidi_writeReordered(pL2VBiDi, visual1, MAXLEN, UBIDI_DO_MIRRORING, &rc); + assertSuccessful("ubidi_writeReordered1", &rc); + u16ToPseudo(vis1Len, visual1, vis1Chars); + ubidi_setPara(pL2VBiDi, dest, destLen, level^1, NULL, &rc); + assertSuccessful("ubidi_setPara2", &rc); + *visual2 = 0; + vis2Len = ubidi_writeReordered(pL2VBiDi, visual2, MAXLEN, UBIDI_DO_MIRRORING, &rc); + assertSuccessful("ubidi_writeReordered2", &rc); + u16ToPseudo(vis2Len, visual2, vis2Chars); + assertStringsEqual(vis1Chars, vis2Chars, + testCases[i].textIn, "UBIDI_REORDER_RUNS_ONLY (2)", + option==0 ? "0" : "UBIDI_OPTION_INSERT_MARKS", + pBiDi); + } + } + } + ubidi_close(pBiDi); + ubidi_close(pL2VBiDi); +} + +static void +doReorderingModeBidiTest() { + + UChar src[MAXLEN], dest[MAXLEN]; + char destChars[MAXLEN]; + UBiDi *pBiDi = NULL, *pBiDi2 = NULL, *pBiDi3 = NULL; + UErrorCode rc; + int tc, mode, option, level; + uint32_t modeValue, modeBack, optionValue, optionBack; + int32_t srcLen, destLen, index; + const char *expectedChars; + UBool testOK = TRUE; + + log_verbose("\n*** Bidi reordering mode test ***\n"); + + pBiDi = getBiDiObject(); + pBiDi2 = getBiDiObject(); + pBiDi3 = getBiDiObject(); + if(!pBiDi3) { + ubidi_close(pBiDi); /* in case this one was allocated */ + ubidi_close(pBiDi2); /* in case this one was allocated */ + return; + } + + ubidi_setInverse(pBiDi2, TRUE); + + for (tc = 0; tc < TC_COUNT; tc++) { + const char* srcChars = textIn[tc]; + srcLen = strlen(srcChars); + pseudoToU16(srcLen, srcChars, src); + + for (mode = 0; mode < MODES_COUNT; mode++) { + modeValue = modes[mode].value; + ubidi_setReorderingMode(pBiDi, modeValue); + modeBack = ubidi_getReorderingMode(pBiDi); + if (modeValue != modeBack) { + log_err("Error while setting reordering mode to %d, returned %d\n", + modeValue, modeBack); + } + + for (option = 0; option < OPTIONS_COUNT; option++) { + optionValue = options[option].value; + ubidi_setReorderingOptions(pBiDi, optionValue); + optionBack = ubidi_getReorderingOptions(pBiDi); + if (optionValue != optionBack) { + log_err("Error while setting reordering option to %d, returned %d\n", + optionValue, optionBack); + } + + for (level = 0; level < LEVELS_COUNT; level++) { + log_verbose("starting test %d mode=%d option=%d level=%d\n", + tc, modes[mode].value, options[option].value, level); + rc = U_ZERO_ERROR; + ubidi_setPara(pBiDi, src, srcLen, paraLevels[level], NULL, &rc); + assertSuccessful("ubidi_setPara", &rc); + + *dest = 0; + destLen = ubidi_writeReordered(pBiDi, dest, MAXLEN, + UBIDI_DO_MIRRORING, &rc); + assertSuccessful("ubidi_writeReordered", &rc); + u16ToPseudo(destLen, dest, destChars); + + if (modes[mode].value == UBIDI_REORDER_INVERSE_NUMBERS_AS_L) { + index = -1; + expectedChars = inverseBasic(pBiDi2, src, srcLen, + options[option].value, paraLevels[level], destChars); + } + else { + index = outIndices[tc][mode][option][level]; + expectedChars = textOut[index]; + } + if (!assertStringsEqual(expectedChars, destChars, srcChars, + modes[mode].description, + options[option].description, + pBiDi)) { + testOK = FALSE; + } + else if (options[option].value == UBIDI_OPTION_INSERT_MARKS && + !assertRoundTrip(pBiDi3, tc, index, srcChars, + destChars, dest, destLen, + mode, option, paraLevels[level])) { + testOK = FALSE; + } + else if (!checkResultLength(pBiDi, srcChars, destChars, + dest, destLen, modes[mode].description, + options[option].description, + paraLevels[level])) { + testOK = FALSE; + } + else if (index > -1 && !testMaps(pBiDi, index, srcChars, + destChars, modes[mode].description, + options[option].description, paraLevels[level], + TRUE)) { + testOK = FALSE; + } + } + } + } + } + if (testOK == TRUE) { + log_verbose("\nReordering mode test OK\n"); + } + ubidi_close(pBiDi3); + ubidi_close(pBiDi2); + ubidi_close(pBiDi); +} + +static const char* inverseBasic(UBiDi *pBiDi, const UChar *src, int32_t srcLen, + uint32_t option, UBiDiLevel level, char *result) { + UErrorCode rc = U_ZERO_ERROR; + int32_t destLen; + UChar dest2 [MAXLEN]; + + if (pBiDi == NULL || src == NULL) { + return NULL; + } + ubidi_setReorderingOptions(pBiDi, option); + ubidi_setPara(pBiDi, src, srcLen, level, NULL, &rc); + assertSuccessful("ubidi_setPara", &rc); + + *dest2 = 0; + destLen = ubidi_writeReordered(pBiDi, dest2, MAXLEN, + UBIDI_DO_MIRRORING, &rc); + assertSuccessful("ubidi_writeReordered", &rc); + u16ToPseudo(destLen, dest2, result); + return result; +} + +#define NULL_CHAR '\0' + +static void +doBidiStreamingTest() { +#define MAXPORTIONS 10 + + static const struct { + const char* textIn; + short int chunk; + short int nPortions[2]; + char portionLens[2][MAXPORTIONS]; + const char* message[2]; + } testData[] = { + { "123\\u000A" + "abc45\\u000D" + "67890\\u000A" + "\\u000D" + "02468\\u000D" + "ghi", + 6, { 6, 6 }, {{ 6, 4, 6, 1, 6, 3}, { 4, 6, 6, 1, 6, 3 }}, + {"6, 4, 6, 1, 6, 3", "4, 6, 6, 1, 6, 3"} + }, + { "abcd\\u000Afgh\\u000D12345\\u000A456", + 6, { 4, 4 }, {{ 6, 3, 6, 3 }, { 5, 4, 6, 3 }}, + {"6, 3, 6, 3", "5, 4, 6, 3"} + }, + { "abcd\\u000Afgh\\u000D12345\\u000A45\\u000D", + 6, { 4, 4 }, {{ 6, 3, 6, 3 }, { 5, 4, 6, 3 }}, + {"6, 3, 6, 3", "5, 4, 6, 3"} + }, + { "abcde\\u000Afghi", + 10, { 1, 2 }, {{ 10 }, { 6, 4 }}, + {"10", "6, 4"} + } + }; + UChar src[MAXLEN]; + UBiDi *pBiDi = NULL; + UChar *pSrc; + UErrorCode rc = U_ZERO_ERROR; + int32_t srcLen, processedLen, chunk, len, nPortions; + int i, j, levelIndex; + UBiDiLevel level; + int nTests = LENGTHOF(testData), nLevels = LENGTHOF(paraLevels); + UBool mismatch, testOK = TRUE; + char processedLenStr[MAXPORTIONS * 5]; + + log_verbose("\n*** Bidi streaming test ***\n"); + + pBiDi = getBiDiObject(); + + ubidi_orderParagraphsLTR(pBiDi, TRUE); + + for (levelIndex = 0; levelIndex < nLevels; levelIndex++) { + for (i = 0; i < nTests; i++) { + srcLen = u_unescape(testData[i].textIn, src, MAXLEN); + chunk = testData[i].chunk; + nPortions = testData[i].nPortions[levelIndex]; + level = paraLevels[levelIndex]; + *processedLenStr = NULL_CHAR; + + mismatch = FALSE; + + ubidi_setReorderingOptions(pBiDi, UBIDI_OPTION_STREAMING); + for (j = 0, pSrc = src; j < MAXPORTIONS && srcLen > 0; j++) { + + len = chunk < srcLen ? chunk : srcLen; + ubidi_setPara(pBiDi, pSrc, len, level, NULL, &rc); + assertSuccessful("ubidi_setPara", &rc); + + processedLen = ubidi_getProcessedLength(pBiDi); + if (processedLen == 0) { + ubidi_setReorderingOptions(pBiDi, UBIDI_OPTION_DEFAULT); + j--; + continue; + } + ubidi_setReorderingOptions(pBiDi, UBIDI_OPTION_STREAMING); + + mismatch = j >= nPortions || + processedLen != testData[i].portionLens[levelIndex][j]; + + sprintf(processedLenStr + j * 4, "%4d", processedLen); + srcLen -= processedLen, pSrc += processedLen; + } + + if (mismatch || j != nPortions) { + testOK = FALSE; + log_err("\nProcessed lengths mismatch.\n" + "\tParagraph level: %u\n" + "\tInput string: %s\n" + "\tActually processed portion lengths: { %s }\n" + "\tExpected portion lengths : { %s }\n", + paraLevels[levelIndex], testData[i].textIn, + processedLenStr, testData[i].message[levelIndex]); + } + } + } + ubidi_close(pBiDi); + if (testOK == TRUE) { + log_verbose("\nBiDi streaming test OK\n"); + } +} + +U_CDECL_BEGIN + +static UCharDirection U_CALLCONV +overrideBidiClass(const void *context, UChar32 c) { + +#define DEF U_BIDI_CLASS_DEFAULT + + static const UCharDirection customClasses[] = { + /* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 00-07 */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 08-0F */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 10-17 */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 18-1F */ + DEF, DEF, DEF, DEF, DEF, DEF, R, DEF, /* 20-27 */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 28-2F */ + EN, EN, EN, EN, EN, EN, AN, AN, /* 30-37 */ + AN, AN, DEF, DEF, DEF, DEF, DEF, DEF, /* 38-3F */ + L, AL, AL, AL, AL, AL, AL, R, /* 40-47 */ + R, R, R, R, R, R, R, R, /* 48-4F */ + R, R, R, R, R, R, R, R, /* 50-57 */ + R, R, R, LRE, DEF, RLE, PDF, S, /* 58-5F */ + NSM, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 60-67 */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 68-6F */ + DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, /* 70-77 */ + DEF, DEF, DEF, LRO, B, RLO, BN, DEF /* 78-7F */ + }; + static const int nEntries = LENGTHOF(customClasses); + + return c >= nEntries ? U_BIDI_CLASS_DEFAULT : customClasses[c]; +} + +U_CDECL_END + +static void verifyCallbackParams(UBiDiClassCallback* fn, const void* context, + UBiDiClassCallback* expectedFn, + const void* expectedContext, + int32_t sizeOfContext) { + if (fn != expectedFn) { + log_err("Class callback pointer is not set properly.\n"); + } + if (context != expectedContext) { + log_err("Class callback context is not set properly.\n"); + } + else if (context != NULL && + memcmp(context, expectedContext, sizeOfContext)) { + log_err("Callback context content doesn't match the expected one.\n"); + } +} + +static void doBidiClassOverrideTest(void) { + static const char* const textSrc = "JIH.>12->a \\u05D0\\u05D1 6 ABC78"; + static const char* const textResult = "12<.HIJ->a 78CBA 6 \\u05D1\\u05D0"; + + UChar src[MAXLEN], dest[MAXLEN]; + UErrorCode rc = U_ZERO_ERROR; + UBiDi *pBiDi = NULL; + UBiDiClassCallback* oldFn = NULL; + UBiDiClassCallback* newFn = overrideBidiClass; + const void* oldContext = NULL; + int32_t srcLen, destLen, textSrcSize = (int32_t)uprv_strlen(textSrc); + char* destChars = NULL; + + log_verbose("\n*** Bidi class override test ***\n"); + + pBiDi = getBiDiObject(); + if(!pBiDi) { + return; + } + + ubidi_getClassCallback(pBiDi, &oldFn, &oldContext); + verifyCallbackParams(oldFn, oldContext, NULL, NULL, 0); + + ubidi_setClassCallback(pBiDi, newFn, textSrc, &oldFn, &oldContext, &rc); + if (!assertSuccessful("ubidi_setClassCallback", &rc)) { + ubidi_close(pBiDi); + return; + } + verifyCallbackParams(oldFn, oldContext, NULL, NULL, 0); + + ubidi_getClassCallback(pBiDi, &oldFn, &oldContext); + verifyCallbackParams(oldFn, oldContext, newFn, textSrc, textSrcSize); + + ubidi_setClassCallback(pBiDi, newFn, textSrc, &oldFn, &oldContext, &rc); + if (!assertSuccessful("ubidi_setClassCallback", &rc)) { + ubidi_close(pBiDi); + return; + } + verifyCallbackParams(oldFn, oldContext, newFn, textSrc, textSrcSize); + + srcLen = u_unescape(textSrc, src, MAXLEN); + ubidi_setPara(pBiDi, src, srcLen, UBIDI_LTR, NULL, &rc); + assertSuccessful("ubidi_setPara", &rc); + + destLen = ubidi_writeReordered(pBiDi, dest, MAXLEN, + UBIDI_DO_MIRRORING, &rc); + assertSuccessful("ubidi_writeReordered", &rc); + + destChars = aescstrdup(dest, destLen); + if (uprv_strcmp(textResult, destChars)) { + log_err("\nActual and expected output mismatch.\n" + "%20s %s\n%20s %s\n%20s %s\n", + "Input:", textSrc, "Actual output:", destChars, + "Expected output:", textResult); + } + else { + log_verbose("\nClass override test OK\n"); + } + ubidi_close(pBiDi); +} + +static char * formatMap(const int32_t * map, int len, char * buffer) +{ + int32_t i, k; + char c; + for (i = 0; i < len; i++) { + k = map[i]; + if (k < 0) + c = '-'; + else if (k >= sizeof columns) + c = '+'; + else + c = columns[k]; + buffer[i] = c; + } + buffer[len] = '\0'; + return buffer; +} + +static UBool +testMaps(UBiDi *pBiDi, int32_t stringIndex, const char *src, const char *dest, + const char *mode, const char* option, UBiDiLevel level, UBool forward) +{ + int32_t actualLogicalMap[MAX_MAP_LENGTH]; + int32_t actualVisualMap[MAX_MAP_LENGTH]; + int32_t getIndexMap[MAX_MAP_LENGTH]; + int32_t i, srcLen, resLen, index; + const int32_t *expectedLogicalMap, *expectedVisualMap; + UErrorCode rc = U_ZERO_ERROR; + UBool testOK = TRUE; + + if (forward) { + expectedLogicalMap = forwardMap[stringIndex]; + expectedVisualMap = inverseMap[stringIndex]; + } + else { + expectedLogicalMap = inverseMap[stringIndex]; + expectedVisualMap = forwardMap[stringIndex]; + } + ubidi_getLogicalMap(pBiDi, actualLogicalMap, &rc); + if (!assertSuccessful("ubidi_getLogicalMap", &rc)) { + testOK = FALSE; + } + srcLen = ubidi_getProcessedLength(pBiDi); + if (memcmp(expectedLogicalMap, actualLogicalMap, srcLen * sizeof(int32_t))) { + char expChars[MAX_MAP_LENGTH]; + char actChars[MAX_MAP_LENGTH]; + log_err("\nubidi_getLogicalMap() returns unexpected map for output string " + "index %d\n" + "source: %s\n" + "dest : %s\n" + "Scale : %s\n" + "ExpMap: %s\n" + "Actual: %s\n" + "Paragraph level : %d == %d\n" + "Reordering mode : %s == %d\n" + "Reordering option: %s == %d\n" + "Forward flag : %d\n", + stringIndex, src, dest, columns, + formatMap(expectedLogicalMap, srcLen, expChars), + formatMap(actualLogicalMap, srcLen, actChars), + level, ubidi_getParaLevel(pBiDi), + mode, ubidi_getReorderingMode(pBiDi), + option, ubidi_getReorderingOptions(pBiDi), + forward + ); + testOK = FALSE; + } + resLen = ubidi_getResultLength(pBiDi); + ubidi_getVisualMap(pBiDi, actualVisualMap, &rc); + assertSuccessful("ubidi_getVisualMap", &rc); + if (memcmp(expectedVisualMap, actualVisualMap, resLen * sizeof(int32_t))) { + char expChars[MAX_MAP_LENGTH]; + char actChars[MAX_MAP_LENGTH]; + log_err("\nubidi_getVisualMap() returns unexpected map for output string " + "index %d\n" + "source: %s\n" + "dest : %s\n" + "Scale : %s\n" + "ExpMap: %s\n" + "Actual: %s\n" + "Paragraph level : %d == %d\n" + "Reordering mode : %s == %d\n" + "Reordering option: %s == %d\n" + "Forward flag : %d\n", + stringIndex, src, dest, columns, + formatMap(expectedVisualMap, resLen, expChars), + formatMap(actualVisualMap, resLen, actChars), + level, ubidi_getParaLevel(pBiDi), + mode, ubidi_getReorderingMode(pBiDi), + option, ubidi_getReorderingOptions(pBiDi), + forward + ); + testOK = FALSE; + } + for (i = 0; i < srcLen; i++) { + index = ubidi_getVisualIndex(pBiDi, i, &rc); + assertSuccessful("ubidi_getVisualIndex", &rc); + getIndexMap[i] = index; + } + if (memcmp(actualLogicalMap, getIndexMap, srcLen * sizeof(int32_t))) { + char actChars[MAX_MAP_LENGTH]; + char gotChars[MAX_MAP_LENGTH]; + log_err("\nMismatch between ubidi_getLogicalMap and ubidi_getVisualIndex for output string " + "index %d\n" + "source: %s\n" + "dest : %s\n" + "Scale : %s\n" + "ActMap: %s\n" + "IdxMap: %s\n" + "Paragraph level : %d == %d\n" + "Reordering mode : %s == %d\n" + "Reordering option: %s == %d\n" + "Forward flag : %d\n", + stringIndex, src, dest, columns, + formatMap(actualLogicalMap, srcLen, actChars), + formatMap(getIndexMap, srcLen, gotChars), + level, ubidi_getParaLevel(pBiDi), + mode, ubidi_getReorderingMode(pBiDi), + option, ubidi_getReorderingOptions(pBiDi), + forward + ); + testOK = FALSE; + } + for (i = 0; i < resLen; i++) { + index = ubidi_getLogicalIndex(pBiDi, i, &rc); + assertSuccessful("ubidi_getLogicalIndex", &rc); + getIndexMap[i] = index; + } + if (memcmp(actualVisualMap, getIndexMap, resLen * sizeof(int32_t))) { + char actChars[MAX_MAP_LENGTH]; + char gotChars[MAX_MAP_LENGTH]; + log_err("\nMismatch between ubidi_getVisualMap and ubidi_getLogicalIndex for output string " + "index %d\n" + "source: %s\n" + "dest : %s\n" + "Scale : %s\n" + "ActMap: %s\n" + "IdxMap: %s\n" + "Paragraph level : %d == %d\n" + "Reordering mode : %s == %d\n" + "Reordering option: %s == %d\n" + "Forward flag : %d\n", + stringIndex, src, dest, columns, + formatMap(actualVisualMap, resLen, actChars), + formatMap(getIndexMap, resLen, gotChars), + level, ubidi_getParaLevel(pBiDi), + mode, ubidi_getReorderingMode(pBiDi), + option, ubidi_getReorderingOptions(pBiDi), + forward + ); + testOK = FALSE; + } + return testOK; +} + diff --git a/icuSources/test/cintltst/cbkittst.c b/icuSources/test/cintltst/cbkittst.c index 2a588e85..4d258655 100644 --- a/icuSources/test/cintltst/cbkittst.c +++ b/icuSources/test/cintltst/cbkittst.c @@ -20,14 +20,12 @@ #include "cintltst.h" void addBrkIterAPITest(TestNode**); -void addBrkIterRegrTest(TestNode**); void addBreakIter(TestNode** root); void addBreakIter(TestNode** root) { addBrkIterAPITest(root); - addBrkIterRegrTest(root); } #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/test/cintltst/ccaltst.c b/icuSources/test/cintltst/ccaltst.c index e0a3e706..08a81699 100644 --- a/icuSources/test/cintltst/ccaltst.c +++ b/icuSources/test/cintltst/ccaltst.c @@ -1,16 +1,16 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ -/******************************************************************************** +/****************************************************************************** * * File CCALTST.C * * Modification History: * Name Description * Madhu Katragadda Creation -*********************************************************************************/ +*******************************************************************************/ /* C API AND FUNCTIONALITY TEST FOR CALENDAR (ucol.h)*/ @@ -28,6 +28,8 @@ #include "ccaltst.h" #include "cformtst.h" +void TestGregorianChange(void); + void addCalTest(TestNode** root); void addCalTest(TestNode** root) @@ -40,7 +42,7 @@ void addCalTest(TestNode** root) addTest(root, &TestGetLimits, "tsformat/ccaltst/TestGetLimits"); addTest(root, &TestDOWProgression, "tsformat/ccaltst/TestDOWProgression"); addTest(root, &TestGMTvsLocal, "tsformat/ccaltst/TestGMTvsLocal"); - + addTest(root, &TestGregorianChange, "tsformat/ccaltst/TestGregorianChange"); } /* "GMT" */ @@ -795,6 +797,7 @@ static void TestAddRollExtensive() return; } status=U_ZERO_ERROR; + ucal_clear(cal); ucal_setDateTime(cal, 1999, UCAL_FEBRUARY, 28, 10, 30, 45, &status); if(U_FAILURE(status)){ log_err("error is setting the datetime: %s\n", u_errorName(status)); @@ -893,7 +896,7 @@ static void TestGetLimits() val = ucal_get(cal, UCAL_DAY_OF_WEEK, &status); min = ucal_getLimit(cal, UCAL_DAY_OF_WEEK, UCAL_MINIMUM, &status); max = ucal_getLimit(cal, UCAL_DAY_OF_WEEK, UCAL_MAXIMUM, &status); - if ( (min != UCAL_SUNDAY || max != UCAL_SATURDAY ) && (min > val > max) && (val != UCAL_FRIDAY)){ + if ( (min != UCAL_SUNDAY || max != UCAL_SATURDAY ) && (min > val && val > max) && (val != UCAL_FRIDAY)){ log_err("FAIL: Min/max bad\n"); log_err("FAIL: Day of week %d out of range\n", val); log_err("FAIL: FAIL: Day of week should be SUNDAY Got %d\n", val); @@ -904,7 +907,7 @@ static void TestGetLimits() val = ucal_get(cal, UCAL_DAY_OF_WEEK_IN_MONTH, &status); min = ucal_getLimit(cal, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_MINIMUM, &status); max = ucal_getLimit(cal, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_MAXIMUM, &status); - if ( (min != 0 || max != 5 ) && (min > val > max) && (val != 1)){ + if ( (min != 0 || max != 5 ) && (min > val && val > max) && (val != 1)){ log_err("FAIL: Min/max bad\n"); log_err("FAIL: Day of week in month %d out of range\n", val); log_err("FAIL: FAIL: Day of week in month should be SUNDAY Got %d\n", val); @@ -936,7 +939,7 @@ static void TestGetLimits() ac_min=ucal_getLimit(cal, UCAL_MINUTE, UCAL_ACTUAL_MINIMUM, &status); ac_max=ucal_getLimit(cal, UCAL_SECOND, UCAL_ACTUAL_MAXIMUM, &status); if( (min!=0 || max!= 11 || gr_min!=0 || le_max!=60 || ac_min!=0 || ac_max!=60) && - (min>val>max) && val!=4){ + (min>val && val>max) && val!=4){ log_err("FAIL: Min/max bad\n"); log_err("FAIL: Hour of Day %d out of range\n", val); @@ -1272,4 +1275,50 @@ static void verify2(const char* msg, UCalendar* c, UDateFormat* dat, int32_t yea } +void TestGregorianChange() { + static const UChar utc[] = { 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0 }; /* "Etc/GMT" */ + const int32_t dayMillis = 86400 * INT64_C(1000); /* 1 day = 86400 seconds */ + UCalendar *cal; + UDate date; + UErrorCode errorCode = U_ZERO_ERROR; + + /* Test ucal_setGregorianChange() on a Gregorian calendar. */ + errorCode = U_ZERO_ERROR; + cal = ucal_open(utc, -1, "", UCAL_GREGORIAN, &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucal_open(UTC) failed: %s\n", u_errorName(errorCode)); + return; + } + ucal_setGregorianChange(cal, -365 * (dayMillis * (UDate)1), &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucal_setGregorianChange(1969) failed: %s\n", u_errorName(errorCode)); + } else { + date = ucal_getGregorianChange(cal, &errorCode); + if(U_FAILURE(errorCode) || date != -365 * (dayMillis * (UDate)1)) { + log_err("ucal_getGregorianChange() failed: %s, date = %f\n", u_errorName(errorCode), date); + } + } + ucal_close(cal); + + /* Test ucal_setGregorianChange() on a non-Gregorian calendar where it should fail. */ + errorCode = U_ZERO_ERROR; + cal = ucal_open(utc, -1, "th@calendar=buddhist", UCAL_TRADITIONAL, &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucal_open(UTC, non-Gregorian) failed: %s\n", u_errorName(errorCode)); + return; + } + ucal_setGregorianChange(cal, -730 * (dayMillis * (UDate)1), &errorCode); + if(errorCode != U_UNSUPPORTED_ERROR) { + log_err("ucal_setGregorianChange(non-Gregorian calendar) did not yield U_UNSUPPORTED_ERROR but %s\n", + u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + date = ucal_getGregorianChange(cal, &errorCode); + if(errorCode != U_UNSUPPORTED_ERROR) { + log_err("ucal_getGregorianChange(non-Gregorian calendar) did not yield U_UNSUPPORTED_ERROR but %s\n", + u_errorName(errorCode)); + } + ucal_close(cal); +} + #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/cintltst/ccapitst.c b/icuSources/test/cintltst/ccapitst.c index bc08e506..daa73bd5 100644 --- a/icuSources/test/cintltst/ccapitst.c +++ b/icuSources/test/cintltst/ccapitst.c @@ -1,16 +1,16 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ -/******************************************************************************** +/******************************************************************************* * * File CU_CAPITST.C * * Modification History: * Name Description * Madhu Katragadda Ported for C API -********************************************************************************* +******************************************************************************** */ #include #include @@ -22,11 +22,12 @@ #include "unicode/putil.h" #include "unicode/ustring.h" #include "ucnv_bld.h" /* for sizeof(UConverter) */ +#include "cmemory.h" /* for UAlignedMemory */ #include "cintltst.h" #include "ccapitst.h" /* for not including "cstring.h" -begin*/ -#ifdef WIN32 +#ifdef U_WINDOWS # define ctest_stricmp(str1, str2) U_STANDARD_CPP_NAMESPACE _stricmp(str1, str2) #elif defined(POSIX) # define ctest_stricmp(str1, str2) U_STANDARD_CPP_NAMESPACE strcasecmp(str1, str2) @@ -100,11 +101,20 @@ static void TestCCSID(void); static void TestJ932(void); static void TestJ1968(void); static void TestLMBCSMaxChar(void); + +#if !UCONFIG_NO_LEGACY_CONVERSION static void TestConvertSafeCloneCallback(void); +#endif + static void TestEBCDICSwapLFNL(void); static void TestConvertEx(void); static void TestConvertAlgorithmic(void); void TestDefaultConverterError(void); /* defined in cctest.c */ +static void TestToUCountPending(void); +static void TestFromUCountPending(void); +static void TestDefaultName(void); +static void TestCompareNames(void); +static void TestSubstString(void); void addTestConvert(TestNode** root); @@ -115,8 +125,12 @@ void addTestConvert(TestNode** root) addTest(root, &TestFlushCache, "tsconv/ccapitst/TestFlushCache"); addTest(root, &TestAlias, "tsconv/ccapitst/TestAlias"); addTest(root, &TestDuplicateAlias, "tsconv/ccapitst/TestDuplicateAlias"); - addTest(root, &TestConvertSafeClone, "tsconv/ccapitst/TestConvertSafeClone"); - addTest(root, &TestConvertSafeCloneCallback,"tsconv/ccapitst/TestConvertSafeCloneCallback"); + addTest(root, &TestConvertSafeClone, "tsconv/ccapitst/TestConvertSafeClone"); + +#if !UCONFIG_NO_LEGACY_CONVERSION + addTest(root, &TestConvertSafeCloneCallback,"tsconv/ccapitst/TestConvertSafeCloneCallback"); +#endif + addTest(root, &TestCCSID, "tsconv/ccapitst/TestCCSID"); addTest(root, &TestJ932, "tsconv/ccapitst/TestJ932"); addTest(root, &TestJ1968, "tsconv/ccapitst/TestJ1968"); @@ -125,6 +139,11 @@ void addTestConvert(TestNode** root) addTest(root, &TestConvertEx, "tsconv/ccapitst/TestConvertEx"); addTest(root, &TestConvertAlgorithmic, "tsconv/ccapitst/TestConvertAlgorithmic"); addTest(root, &TestDefaultConverterError, "tsconv/ccapitst/TestDefaultConverterError"); + addTest(root, &TestToUCountPending, "tsconv/ccapitst/TestToUCountPending"); + addTest(root, &TestFromUCountPending, "tsconv/ccapitst/TestFromUCountPending"); + addTest(root, &TestDefaultName, "tsconv/ccapitst/TestDefaultName"); + addTest(root, &TestCompareNames, "tsconv/ccapitst/TestCompareNames"); + addTest(root, &TestSubstString, "tsconv/ccapitst/TestSubstString"); } static void ListNames(void) { @@ -150,7 +169,10 @@ static void ListNames(void) { count1++; log_verbose("read \"%s\", length %i\n", string, len); } - err = U_ZERO_ERROR; + if (U_FAILURE(err)) { + log_err("FAILURE! uenum_next(allNamesEnum...) set an error: %s\n", u_errorName(err)); + err = U_ZERO_ERROR; + } uenum_reset(allNamesEnum, &err); while ((string = uenum_next(allNamesEnum, &len, &err))) { count2++; @@ -238,6 +260,7 @@ static void ListNames(void) { static void TestConvert() { +#if !UCONFIG_NO_LEGACY_CONVERSION char myptr[4]; char save[4]; int32_t testLong1 = 0; @@ -508,23 +531,6 @@ static void TestConvert() log_verbose("getName(someConverters[1]) returned %s\n", ucnv_getName(someConverters[1], &err)); } - /*Testing ucnv_getDefaultName() and ucnv_setDefaultNAme()*/ - { - static char defaultName[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; - strcpy(defaultName, ucnv_getDefaultName()); - - log_verbose("getDefaultName returned %s\n", defaultName); - - /*change the default name by setting it */ - ucnv_setDefaultName("changed"); - if(strcmp(ucnv_getDefaultName(), "changed")==0) - log_verbose("setDefaultName o.k"); - else - log_err("setDefaultName failed"); - /*set the default name back*/ - ucnv_setDefaultName(defaultName); - } - ucnv_close(someConverters[0]); ucnv_close(someConverters[1]); ucnv_close(someConverters[2]); @@ -710,28 +716,37 @@ static void TestConvert() /*getDisplayName*/ log_verbose("\n---Testing ucnv_getDisplayName()...\n"); locale=CodePagesLocale[codepage_index]; - displayname=(UChar*)malloc(1 * sizeof(UChar)); len=0; - disnamelen = ucnv_getDisplayName(myConverter,locale,displayname, len, &err); - if(err==U_BUFFER_OVERFLOW_ERROR) - { + displayname=NULL; + disnamelen = ucnv_getDisplayName(myConverter, locale, displayname, len, &err); + if(err==U_BUFFER_OVERFLOW_ERROR) { err=U_ZERO_ERROR; - displayname=(UChar*)realloc(displayname, (disnamelen+1) * sizeof(UChar)); + displayname=(UChar*)malloc((disnamelen+1) * sizeof(UChar)); ucnv_getDisplayName(myConverter,locale,displayname,disnamelen+1, &err); - if(U_FAILURE(err)) - { - log_err("getDisplayName failed the error is %s\n", myErrorName(err)); + if(U_FAILURE(err)) { + log_err("getDisplayName failed. The error is %s\n", myErrorName(err)); } - else + else { log_verbose(" getDisplayName o.k.\n"); + } + free(displayname); + displayname=NULL; + } + else { + log_err("getDisplayName preflight doesn't work. Error is %s\n", myErrorName(err)); } /*test ucnv_getDiaplayName with error condition*/ - log_verbose("\n---Testing ucnv_getDisplayName()...\n"); err= U_ILLEGAL_ARGUMENT_ERROR; - len=ucnv_getDisplayName(myConverter,locale,displayname,disnamelen+1, &err); + len=ucnv_getDisplayName(myConverter,locale,NULL,0, &err); if( len !=0 ){ log_err("ucnv_getDisplayName() with err != U_ZERO_ERROR is supposed to return 0\n"); } + /*test ucnv_getDiaplayName with error condition*/ + err=U_ZERO_ERROR; + len=ucnv_getDisplayName(NULL,locale,NULL,0, &err); + if( len !=0 || U_SUCCESS(err)){ + log_err("ucnv_getDisplayName(NULL) with cnv == NULL is supposed to return 0\n"); + } err=U_ZERO_ERROR; /* testing ucnv_setFromUCallBack() and ucnv_getFromUCallBack()*/ @@ -1046,7 +1061,6 @@ static void TestConvert() fclose(ucs_file_in); ucnv_close(myConverter); - free(displayname); if (uchar1 != 0) free(uchar1); if (uchar2 != 0) free(uchar2); if (uchar3 != 0) free(uchar3); @@ -1056,6 +1070,7 @@ static void TestConvert() free((void*)output_cp_buffer); free((void*)ucs_file_buffer); free((void*)my_ucs_file_buffer); +#endif } static UConverterFromUCallback otherUnicodeAction(UConverterFromUCallback MIA) @@ -1070,6 +1085,7 @@ static UConverterToUCallback otherCharAction(UConverterToUCallback MIA) } static void TestFlushCache(void) { +#if !UCONFIG_NO_LEGACY_CONVERSION UErrorCode err = U_ZERO_ERROR; UConverter* someConverters[5]; int flushCount = 0; @@ -1139,7 +1155,7 @@ static void TestFlushCache(void) { log_verbose("Flush cache ok\n"); else log_data_err("Flush Cache failed line %d, expected 1 got %d \n", __LINE__, flushCount); - +#endif } /** @@ -1304,7 +1320,7 @@ static void TestAlias() { for (i = 0; i < CONVERTERS_NAMES_LENGTH; ++i) { const char* mapBack = ucnv_getAlias(CONVERTERS_NAMES[i].alias, 0, &status); if(!mapBack) { - log_data_err("Couldn't get alias for %s. You probably have no data\n", CONVERTERS_NAMES[i]); + log_data_err("Couldn't get alias for %s. You probably have no data\n", CONVERTERS_NAMES[i].name); continue; } if (0 != strcmp(mapBack, CONVERTERS_NAMES[i].name)) { @@ -1388,6 +1404,7 @@ static void TSCC_fromU(const void *context, UErrorCode subErr = U_ZERO_ERROR; TSCCContext *newCtx; TSCCContext *junkCtx; + TSCCContext **pjunkCtx = &junkCtx; /* "recreate" it */ log_verbose("TSCC_fromU: cloning..\n"); @@ -1398,7 +1415,7 @@ static void TSCC_fromU(const void *context, } /* now, SET it */ - ucnv_getFromUCallBack(fromUArgs->converter, &junkFrom, (const void**)&junkCtx); + ucnv_getFromUCallBack(fromUArgs->converter, &junkFrom, (const void**)pjunkCtx); ucnv_setFromUCallBack(fromUArgs->converter, junkFrom, newCtx, NULL, NULL, &subErr); if(U_FAILURE(subErr)) { @@ -1434,6 +1451,7 @@ static void TSCC_toU(const void *context, UErrorCode subErr = U_ZERO_ERROR; TSCCContext *newCtx; TSCCContext *junkCtx; + TSCCContext **pjunkCtx = &junkCtx; /* "recreate" it */ log_verbose("TSCC_toU: cloning..\n"); @@ -1444,7 +1462,7 @@ static void TSCC_toU(const void *context, } /* now, SET it */ - ucnv_getToUCallBack(toUArgs->converter, &junkFrom, (const void**)&junkCtx); + ucnv_getToUCallBack(toUArgs->converter, &junkFrom, (const void**)pjunkCtx); ucnv_setToUCallBack(toUArgs->converter, junkFrom, newCtx, NULL, NULL, &subErr); if(U_FAILURE(subErr)) { @@ -1479,11 +1497,13 @@ static void TSCC_print_log(TSCCContext *q, const char *name) } } +#if !UCONFIG_NO_LEGACY_CONVERSION static void TestConvertSafeCloneCallback() { UErrorCode err = U_ZERO_ERROR; TSCCContext from1, to1; TSCCContext *from2, *from3, *to2, *to3; + TSCCContext **pfrom2 = &from2, **pfrom3 = &from3, **pto2 = &to2, **pto3 = &to3; char hunk[8192]; int32_t hunkSize = 8192; UConverterFromUCallback junkFrom; @@ -1521,8 +1541,8 @@ static void TestConvertSafeCloneCallback() log_verbose("Cloned to conv2=%p.\n", conv2); /********** from *********************/ - ucnv_getFromUCallBack(conv2, &junkFrom, (const void**)&from2); - ucnv_getFromUCallBack(conv1, &junkFrom, (const void**)&from3); + ucnv_getFromUCallBack(conv2, &junkFrom, (const void**)pfrom2); + ucnv_getFromUCallBack(conv1, &junkFrom, (const void**)pfrom3); TSCC_print_log(from2, "from2"); TSCC_print_log(from3, "from3(==from1)"); @@ -1554,8 +1574,8 @@ static void TestConvertSafeCloneCallback() } /********** to *********************/ - ucnv_getToUCallBack(conv2, &junkTo, (const void**)&to2); - ucnv_getToUCallBack(conv1, &junkTo, (const void**)&to3); + ucnv_getToUCallBack(conv2, &junkTo, (const void**)pto2); + ucnv_getToUCallBack(conv1, &junkTo, (const void**)pto3); TSCC_print_log(to2, "to2"); TSCC_print_log(to3, "to3(==to1)"); @@ -1643,6 +1663,7 @@ static void TestConvertSafeCloneCallback() free(from2); /* from1 is stack based */ } } +#endif static UBool containsAnyOtherByte(uint8_t *p, int32_t length, uint8_t b) { @@ -1660,28 +1681,39 @@ static void TestConvertSafeClone() { /* one 'regular' & all the 'private stateful' converters */ static const char *const names[] = { +#if !UCONFIG_NO_LEGACY_CONVERSION "ibm-1047", "ISO_2022,locale=zh,version=1", +#endif "SCSU", +#if !UCONFIG_NO_LEGACY_CONVERSION "HZ", "lmbcs", "ISCII,version=0", "ISO_2022,locale=kr,version=1", "ISO_2022,locale=jp,version=2", +#endif "BOCU-1", "UTF-7", +#if !UCONFIG_NO_LEGACY_CONVERSION "IMAP-mailbox-name", "ibm-1047-s390" +#else + "IMAP=mailbox-name" +#endif }; + /* store the actual sizes of each converter */ + int32_t actualSizes[LENGTHOF(names)]; + static const int32_t bufferSizes[] = { U_CNV_SAFECLONE_BUFFERSIZE, (int32_t)(3*sizeof(UConverter))/2, /* 1.5*sizeof(UConverter) */ (int32_t)sizeof(UConverter)/2 /* 0.5*sizeof(UConverter) */ }; - char charBuffer [21]; /* Leave at an odd number for alignment testing */ - uint8_t buffer [3] [U_CNV_SAFECLONE_BUFFERSIZE]; + char charBuffer[21]; /* Leave at an odd number for alignment testing */ + uint8_t buffer[3] [U_CNV_SAFECLONE_BUFFERSIZE]; int32_t bufferSize, maxBufferSize; const char *maxName; UConverter * cnv, *cnv2; @@ -1690,9 +1722,9 @@ static void TestConvertSafeClone() char *pCharBuffer; const char *pConstCharBuffer; const char *charBufferLimit = charBuffer + sizeof(charBuffer)/sizeof(*charBuffer); - UChar uniBuffer [] = {0x0058, 0x0059, 0x005A}; /* "XYZ" */ - UChar uniCharBuffer [20]; - char charSourceBuffer [] = { 0x1b, 0x24, 0x42 }; + UChar uniBuffer[] = {0x0058, 0x0059, 0x005A}; /* "XYZ" */ + UChar uniCharBuffer[20]; + char charSourceBuffer[] = { 0x1b, 0x24, 0x42 }; const char *pCharSource = charSourceBuffer; const char *pCharSourceLimit = charSourceBuffer + sizeof(charSourceBuffer); UChar *pUCharTarget = uniCharBuffer; @@ -1797,10 +1829,10 @@ static void TestConvertSafeClone() if(j == 0) { /* preflight to get maxBufferSize */ - bufferSize = 0; - ucnv_safeClone(cnv, NULL, &bufferSize, &err); - if(bufferSize > maxBufferSize) { - maxBufferSize = bufferSize; + actualSizes[index] = 0; + ucnv_safeClone(cnv, NULL, &actualSizes[index], &err); + if(actualSizes[index] > maxBufferSize) { + maxBufferSize = actualSizes[index]; maxName = names[index]; } } @@ -1813,6 +1845,12 @@ static void TestConvertSafeClone() /* close the original immediately to make sure that the clone works by itself */ ucnv_close(cnv); + if( actualSizes[index] <= (bufferSizes[j] - (int32_t)sizeof(UAlignedMemory)) && + err == U_SAFECLONE_ALLOCATED_WARNING + ) { + log_err("ucnv_safeClone(%s) did a heap clone although the buffer was large enough\n", names[index]); + } + /* check if the clone function overwrote any bytes that it is not supposed to touch */ if(bufferSize <= bufferSizes[j]) { /* used the stack buffer */ @@ -1869,9 +1907,14 @@ static void TestConvertSafeClone() log_verbose("ucnv_safeClone(): sizeof(UConverter)=%lu max preflighted clone size=%d (%s) U_CNV_SAFECLONE_BUFFERSIZE=%d\n", sizeof(UConverter), maxBufferSize, maxName, (int)U_CNV_SAFECLONE_BUFFERSIZE); + if(maxBufferSize > U_CNV_SAFECLONE_BUFFERSIZE) { + log_err("ucnv_safeClone(): max preflighted clone size=%d (%s) is larger than U_CNV_SAFECLONE_BUFFERSIZE=%d\n", + maxBufferSize, maxName, (int)U_CNV_SAFECLONE_BUFFERSIZE); + } } static void TestCCSID() { +#if !UCONFIG_NO_LEGACY_CONVERSION UConverter *cnv; UErrorCode errorCode; int32_t ccsids[]={ 37, 850, 943, 949, 950, 1047, 1252, 1392, 33722 }; @@ -1898,6 +1941,7 @@ static void TestCCSID() { ucnv_close(cnv); } +#endif } /* jitterbug 932: ucnv_convert() bugs --------------------------------------- */ @@ -1935,6 +1979,7 @@ TestJ932(void) */ static void bug1() { +#if !UCONFIG_NO_LEGACY_CONVERSION static char char_in[CHUNK_SIZE+32]; static char char_out[CHUNK_SIZE*2]; @@ -1974,6 +2019,7 @@ static void bug1() log_err("error j932 bug 1: expected success, got U_TRUNCATED_CHAR_FOUND\n"); } } +#endif } /* bug2: pre-flighting loop bug: simple overflow causes bug */ @@ -2048,6 +2094,7 @@ static void bug2() */ static void bug3() { +#if !UCONFIG_NO_LEGACY_CONVERSION static char char_in[CHUNK_SIZE*4]; static char target[5]; UErrorCode err = U_ZERO_ERROR; @@ -2102,6 +2149,7 @@ static void bug3() */ log_data_err("error j932 bug 3b: expected 0x%04x, got 0x%04x\n", sizeof(char_in) * 2, size); } +#endif } static void @@ -2210,6 +2258,7 @@ convertExMultiStreaming(UConverter *srcCnv, UConverter *targetCnv, } static void TestConvertEx() { +#if !UCONFIG_NO_LEGACY_CONVERSION static const uint8_t utf8[]={ /* 4e00 30a1 ff61 0410 */ @@ -2338,12 +2387,24 @@ static void TestConvertEx() { log_err("ucnv_convertEx(*source==NULL) sets %s\n", u_errorName(errorCode)); } + /* streaming conversion without a pivot buffer */ + errorCode=U_ZERO_ERROR; + src=srcBuffer; + pivotSource=pivotBuffer; + ucnv_convertEx(cnv2, cnv1, &target, targetBuffer+sizeof(targetBuffer), &src, NULL, + NULL, &pivotSource, &pivotTarget, pivotBuffer+1, TRUE, FALSE, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { + log_err("ucnv_convertEx(pivotStart==NULL) sets %s\n", u_errorName(errorCode)); + } + ucnv_close(cnv1); ucnv_close(cnv2); +#endif } static void TestConvertAlgorithmic() { +#if !UCONFIG_NO_LEGACY_CONVERSION static const uint8_t utf8[]={ /* 4e00 30a1 ff61 0410 */ @@ -2464,6 +2525,7 @@ TestConvertAlgorithmic() { log_err("ucnv_fromAlgorithmic(illegal alg. type) sets %s\n", u_errorName(errorCode)); } ucnv_close(cnv); +#endif } static void TestLMBCSMaxChar(void) { @@ -2623,6 +2685,7 @@ static void TestJ1968(void) { } +#if !UCONFIG_NO_LEGACY_CONVERSION static void testSwap(const char *name, UBool swap) { /* @@ -2776,3 +2839,410 @@ TestEBCDICSwapLFNL() { testSwap(tests[i].name, tests[i].swap); } } +#else +static void +TestEBCDICSwapLFNL() { + /* test nothing... */ +} +#endif + +static const UVersionInfo ICU_34 = {3,4,0,0}; + +static void TestFromUCountPending(){ +#if !UCONFIG_NO_LEGACY_CONVERSION + UErrorCode status = U_ZERO_ERROR; +/* const UChar expectedUnicode[] = { 0x20ac, 0x0005, 0x0006, 0x000b, 0xdbc4, 0xde34, 0xd84d, 0xdc56, 0xfffd}; */ + static const struct { + UChar input[6]; + int32_t len; + int32_t exp; + }fromUnicodeTests[] = { + /*m:n conversion*/ + {{0xdbc4},1,1}, + {{ 0xdbc4, 0xde34, 0xd84d},3,1}, + {{ 0xdbc4, 0xde34, 0xd900},3,3}, + }; + int i; + UConverter* cnv = ucnv_openPackage(loadTestData(&status), "test3", &status); + if(U_FAILURE(status)){ + log_err("Could not create converter for test3. Error: %s\n", u_errorName(status)); + return; + } + for(i=0; i x ( \x07 |0) + \U00101234\U00050005 -> y (+ \x07+\x00+\x01\x02\x0e+\x05 |0) + \U00101234\U00050005\U00060006 -> z (++ \x07+\x00+\x01\x02\x0f+\x09 |0) + \U00060007 -> unassigned + */ + static const UChar head[] = {0xDBC4,0xDE34,0xD900,0xDC05,0x0000};/* \U00101234\U00050005 */ + static const UChar middle[] = {0xD940,0x0000}; /* first half of \U00060006 or \U00060007 */ + static const UChar tail[] = {0xDC07,0x0000};/* second half of \U00060007 */ + char tgt[10]; + char* target = tgt; + char* targetLimit = target + 2; /* expect overflow from converting \U00101234\U00050005 */ + const UChar* source = head; + const UChar* sourceLimit = source + u_strlen(head); + int32_t len = 0; + ucnv_reset(cnv); + ucnv_fromUnicode(cnv,&target, targetLimit, &source, sourceLimit, NULL, FALSE, &status); + len = ucnv_fromUCountPending(cnv, &status); + if(U_FAILURE(status)){ + log_err("ucnv_fromUnicode call did not succeed. Error: %s\n", u_errorName(status)); + status = U_ZERO_ERROR; + } + if(len!=4){ + log_err("ucnv_fromUInputHeld did not return correct length for head\n"); + } + source = middle; + sourceLimit = source + u_strlen(middle); + ucnv_fromUnicode(cnv,&target, targetLimit, &source, sourceLimit, NULL, FALSE, &status); + len = ucnv_fromUCountPending(cnv, &status); + if(U_FAILURE(status)){ + log_err("ucnv_fromUnicode call did not succeed. Error: %s\n", u_errorName(status)); + status = U_ZERO_ERROR; + } + if(len!=5){ + log_err("ucnv_fromUInputHeld did not return correct length for middle\n"); + } + source = tail; + sourceLimit = source + u_strlen(tail); + ucnv_fromUnicode(cnv,&target, targetLimit, &source, sourceLimit, NULL, FALSE, &status); + if(status != U_BUFFER_OVERFLOW_ERROR){ + log_err("ucnv_fromUnicode call did not succeed. Error: %s\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + len = ucnv_fromUCountPending(cnv, &status); + /* middle[1] is pending, tail has not been consumed */ + if(U_FAILURE(status)){ + log_err("ucnv_fromUInputHeld call did not succeed. Error: %s\n", u_errorName(status)); + } + if(len!=1){ + log_err("ucnv_fromUInputHeld did not return correct length for tail\n"); + } + } + ucnv_close(cnv); +#endif +} + +static void +TestToUCountPending(){ +#if !UCONFIG_NO_LEGACY_CONVERSION + UErrorCode status = U_ZERO_ERROR; + static const struct { + char input[6]; + int32_t len; + int32_t exp; + }toUnicodeTests[] = { + /*m:n conversion*/ + {{0x05, 0x01, 0x02},3,3}, + {{0x01, 0x02},2,2}, + {{0x07, 0x00, 0x01, 0x02},4,4}, + }; + + int i; + UConverterToUCallback *oldToUAction= NULL; + UConverter* cnv = ucnv_openPackage(loadTestData(&status), "test3", &status); + if(U_FAILURE(status)){ + log_err("Could not create converter for test3. Error: %s\n", u_errorName(status)); + return; + } + ucnv_setToUCallBack(cnv, UCNV_TO_U_CALLBACK_STOP, NULL, oldToUAction, NULL, &status); + for(i=0; i x ( \x01\x02\x03\x0a |0) + 0x01, 0x02, 0x03, 0x0b -> y ( \x01\x02\x03\x0b |0) + 0x01, 0x02, 0x03, 0x0d -> z ( \x01\x02\x03\x0d |3) + 0x01, 0x02, 0x03, 0x0a + 0x01, 0x02, 0x03, 0x0b + 0x01 + many more -> z (see test4 "many bytes, and bytes per UChar") + */ + UChar tgt[10]; + UChar* target = tgt; + UChar* targetLimit = target + 1; /* expect overflow from converting */ + const char* source = head; + const char* sourceLimit = source + strlen(head); + int32_t len = 0; + cnv = ucnv_openPackage(loadTestData(&status), "test4", &status); + if(U_FAILURE(status)){ + log_err("Could not create converter for test3. Error: %s\n", u_errorName(status)); + return; + } + ucnv_setToUCallBack(cnv, UCNV_TO_U_CALLBACK_STOP, NULL, oldToUAction, NULL, &status); + ucnv_toUnicode(cnv,&target, targetLimit, &source, sourceLimit, NULL, FALSE, &status); + len = ucnv_toUCountPending(cnv,&status); + if(U_FAILURE(status)){ + log_err("ucnv_toUnicode call did not succeed. Error: %s\n", u_errorName(status)); + } + if(len != 4){ + log_err("Did not get the expected len for head.\n"); + } + source=mid; + sourceLimit = source+strlen(mid); + ucnv_toUnicode(cnv,&target, targetLimit, &source, sourceLimit, NULL, FALSE, &status); + len = ucnv_toUCountPending(cnv,&status); + if(U_FAILURE(status)){ + log_err("ucnv_toUnicode call did not succeed. Error: %s\n", u_errorName(status)); + } + if(len != 8){ + log_err("Did not get the expected len for mid.\n"); + } + + source=tail; + sourceLimit = source+strlen(tail); + targetLimit = target; + ucnv_toUnicode(cnv,&target, targetLimit, &source, sourceLimit, NULL, FALSE, &status); + if(status != U_BUFFER_OVERFLOW_ERROR){ + log_err("ucnv_toUnicode call did not succeed. Error: %s\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + len = ucnv_toUCountPending(cnv,&status); + /* mid[4] is pending, tail has not been consumed */ + if(U_FAILURE(status)){ + log_err("ucnv_toUCountPending call did not succeed. Error: %s\n", u_errorName(status)); + } + if(len != 4){ + log_err("Did not get the expected len for tail.\n"); + } + ucnv_close(cnv); + } +#endif +} + +static void TestOneDefaultNameChange(const char *name) { + UErrorCode status = U_ZERO_ERROR; + UConverter *cnv; + ucnv_setDefaultName(name); + if(strcmp(ucnv_getDefaultName(), name)==0) + log_verbose("setDefaultName of %s works.\n", name); + else + log_err("setDefaultName of %s failed\n", name); + cnv=ucnv_open(NULL, &status); + if (U_FAILURE(status) || cnv == NULL) { + log_err("opening the default converter of %s failed\n", name); + return; + } + if(strcmp(ucnv_getName(cnv, &status), name)==0) + log_verbose("ucnv_getName of %s works.\n", name); + else + log_err("ucnv_getName of %s failed\n", name); + ucnv_close(cnv); +} + +static void TestDefaultName(void) { + /*Testing ucnv_getDefaultName() and ucnv_setDefaultNAme()*/ + static char defaultName[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; + strcpy(defaultName, ucnv_getDefaultName()); + + log_verbose("getDefaultName returned %s\n", defaultName); + + /*change the default name by setting it */ + TestOneDefaultNameChange("UTF-8"); +#if !UCONFIG_NO_LEGACY_CONVERSION + TestOneDefaultNameChange("ISCII,version=1"); + TestOneDefaultNameChange("ISCII,version=2"); +#endif + TestOneDefaultNameChange("ISO-8859-1"); + + /*set the default name back*/ + ucnv_setDefaultName(defaultName); +} + +/* Test that ucnv_compareNames() matches names according to spec. ----------- */ + +static U_INLINE int +sign(int n) { + if(n==0) { + return 0; + } else if(n<0) { + return -1; + } else /* n>0 */ { + return 1; + } +} + +static void +compareNames(const char **names) { + const char *relation, *name1, *name2; + int rel, result; + + relation=*names++; + if(*relation=='=') { + rel = 0; + } else if(*relation=='<') { + rel = -1; + } else { + rel = 1; + } + + name1=*names++; + if(name1==NULL) { + return; + } + while((name2=*names++)!=NULL) { + result=ucnv_compareNames(name1, name2); + if(sign(result)!=rel) { + log_err("ucnv_compareNames(\"%s\", \"%s\")=%d, sign!=%d\n", name1, name2, result, rel); + } + name1=name2; + } +} + +static void +TestCompareNames() { + static const char *equalUTF8[]={ "=", "UTF-8", "utf_8", "u*T@f08", "Utf 8", NULL }; + static const char *equalIBM[]={ "=", "ibm-37", "IBM037", "i-B-m 00037", "ibm-0037", "IBM00037", NULL }; + static const char *lessMac[]={ "<", "macos-0_1-10.2", "macos-1-10.0.2", "macos-1-10.2", NULL }; + static const char *lessUTF080[]={ "<", "UTF-0008", "utf$080", "u*T@f0800", "Utf 0000000009", NULL }; + + compareNames(equalUTF8); + compareNames(equalIBM); + compareNames(lessMac); + compareNames(lessUTF080); +} + +static void +TestSubstString() { + static const UChar surrogate[1]={ 0xd900 }; + char buffer[16]; + + static const UChar sub[5]={ 0x61, 0x62, 0x63, 0x64, 0x65 }; + static const char subChars[5]={ 0x61, 0x62, 0x63, 0x64, 0x65 }; + UConverter *cnv; + UErrorCode errorCode; + int32_t length; + int8_t len8; + + /* UTF-16/32: test that the BOM is output before the sub character */ + errorCode=U_ZERO_ERROR; + cnv=ucnv_open("UTF-16", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucnv_open(UTF-16) failed - %s\n", u_errorName(errorCode)); + return; + } + length=ucnv_fromUChars(cnv, buffer, (int32_t)sizeof(buffer), surrogate, 1, &errorCode); + ucnv_close(cnv); + if(U_FAILURE(errorCode) || + length!=4 || + NULL == ucnv_detectUnicodeSignature(buffer, length, NULL, &errorCode) + ) { + log_err("ucnv_fromUChars(UTF-16, U+D900) did not write a BOM\n"); + } + + errorCode=U_ZERO_ERROR; + cnv=ucnv_open("UTF-32", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucnv_open(UTF-32) failed - %s\n", u_errorName(errorCode)); + return; + } + length=ucnv_fromUChars(cnv, buffer, (int32_t)sizeof(buffer), surrogate, 1, &errorCode); + ucnv_close(cnv); + if(U_FAILURE(errorCode) || + length!=8 || + NULL == ucnv_detectUnicodeSignature(buffer, length, NULL, &errorCode) + ) { + log_err("ucnv_fromUChars(UTF-32, U+D900) did not write a BOM\n"); + } + + /* Simple API test of ucnv_setSubstString() + ucnv_getSubstChars(). */ + errorCode=U_ZERO_ERROR; + cnv=ucnv_open("ISO-8859-1", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucnv_open(ISO-8859-1) failed - %s\n", u_errorName(errorCode)); + return; + } + ucnv_setSubstString(cnv, sub, LENGTHOF(sub), &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucnv_setSubstString(ISO-8859-1, sub[5]) failed - %s\n", u_errorName(errorCode)); + } else { + len8 = sizeof(buffer); + ucnv_getSubstChars(cnv, buffer, &len8, &errorCode); + /* Stateless converter, we expect the string converted to charset bytes. */ + if(U_FAILURE(errorCode) || len8!=sizeof(subChars) || 0!=uprv_memcmp(buffer, subChars, len8)) { + log_err("ucnv_getSubstChars(ucnv_setSubstString(ISO-8859-1, sub[5])) failed - %s\n", u_errorName(errorCode)); + } + } + ucnv_close(cnv); + +#if !UCONFIG_NO_LEGACY_CONVERSION + errorCode=U_ZERO_ERROR; + cnv=ucnv_open("HZ", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucnv_open(HZ) failed - %s\n", u_errorName(errorCode)); + return; + } + ucnv_setSubstString(cnv, sub, LENGTHOF(sub), &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucnv_setSubstString(HZ, sub[5]) failed - %s\n", u_errorName(errorCode)); + } else { + len8 = sizeof(buffer); + ucnv_getSubstChars(cnv, buffer, &len8, &errorCode); + /* Stateful converter, we expect that the Unicode string was set and that we get an empty char * string now. */ + if(U_FAILURE(errorCode) || len8!=0) { + log_err("ucnv_getSubstChars(ucnv_setSubstString(HZ, sub[5])) failed - %s\n", u_errorName(errorCode)); + } + } + ucnv_close(cnv); +#endif + /* + * Further testing of ucnv_setSubstString() is done via intltest convert. + * We do not test edge cases of illegal arguments and similar because the + * function implementation uses all of its parameters in calls to other + * functions with UErrorCode parameters. + */ +} diff --git a/icuSources/test/cintltst/ccolltst.c b/icuSources/test/cintltst/ccolltst.c index 45ccee40..5a71a7ad 100644 --- a/icuSources/test/cintltst/ccolltst.c +++ b/icuSources/test/cintltst/ccolltst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -31,9 +31,8 @@ void addCollTest(TestNode** root); void addCollTest(TestNode** root) { addCollAPITest(root); - addCurrencyTest(root); + addCurrencyCollTest(root); addNormTest(root); - addDanishCollTest(root); addGermanCollTest(root); addSpanishCollTest(root); addFrenchCollTest(root); diff --git a/icuSources/test/cintltst/ccolltst.h b/icuSources/test/cintltst/ccolltst.h index e3caf193..d3e7f51d 100644 --- a/icuSources/test/cintltst/ccolltst.h +++ b/icuSources/test/cintltst/ccolltst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -34,7 +34,7 @@ void reportCResult( const UChar source[], const UChar target[], UChar* appendCompareResult(UCollationResult result, UChar* target); void addCollAPITest(TestNode**); -void addCurrencyTest(TestNode**); +void addCurrencyCollTest(TestNode**); void addNormTest(TestNode**); void addDanishCollTest(TestNode**); void addGermanCollTest(TestNode**); diff --git a/icuSources/test/cintltst/ccurrtst.c b/icuSources/test/cintltst/ccurrtst.c index e79cfc7b..a768be7c 100644 --- a/icuSources/test/cintltst/ccurrtst.c +++ b/icuSources/test/cintltst/ccurrtst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -29,7 +29,7 @@ #define ARRAY_LENGTH(array) (sizeof array / sizeof array[0]) -void addCurrencyTest(TestNode** root) +void addCurrencyCollTest(TestNode** root) { addTest(root, &currTest, "tscoll/ccurrtst/currTest"); diff --git a/icuSources/test/cintltst/cdantst.c b/icuSources/test/cintltst/cdantst.c deleted file mode 100644 index 9a1e7612..00000000 --- a/icuSources/test/cintltst/cdantst.c +++ /dev/null @@ -1,245 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ -/******************************************************************************** -* -* File CDANTST.C -* -* Modification History: -* Name Description -* Madhu Katragadda Ported for C API -*********************************************************************************/ -/** - * CollationDanishTest is a third level test class. This tests the locale - * specific primary, secondary and tertiary rules. For example, the ignorable - * character '-' in string "black-bird". The en_US locale uses the default - * collation rules as its sorting sequence. - */ - -#include -#include - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "unicode/ucol.h" -#include "unicode/uloc.h" -#include "cintltst.h" -#include "ccolltst.h" -#include "cdantst.h" -#include "callcoll.h" -#include "unicode/ustring.h" - -static UCollator *myCollation; -const static UChar testSourceCases[][MAX_TOKEN_LEN] = { - {(UChar)0x004C /* 'L' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00FC, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00E4, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00F6, (UChar)0x0077 /* 'w' */, (UChar)0x0077 /* 'w' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00E4, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00FC, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */} -}; - -const static UChar testTargetCases[][MAX_TOKEN_LEN] = { - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00FC, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0079 /* 'y' */, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00F6, (UChar)0x0077 /* 'w' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, (UChar)0x0061 /* 'a' */, (UChar)0x0073 /* 's' */, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, (UChar)0x0077 /* 'w' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00F6, (UChar)0x0077 /* 'w' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, (UChar)0x0079 /* 'y' */, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */} -}; - -const static UCollationResult results[] = { - UCOL_LESS, - UCOL_LESS, - UCOL_GREATER, - UCOL_LESS, - UCOL_LESS, - /* test primary > 5*/ - UCOL_EQUAL, - UCOL_LESS, - UCOL_EQUAL -}; - -const static UChar testBugs[][MAX_TOKEN_LEN] = { - {(UChar)0x0041 /* 'A' */, (UChar)0x002F /* '/' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0052 /* 'R' */, 0x00C9, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0041 /* 'A' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0043 /* 'C' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {0x00C7, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0043 /* 'C' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {0x00C7, (UChar)0x0043 /* 'C' */,(UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x002E /* '.' */, (UChar)0x0053 /* 'S' */, (UChar)0x002E /* '.' */, (UChar)0x0042 /* 'B' */, (UChar)0x002E /* '.' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0053 /* 'S' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0000 /* '\0' */}, - {0x00D0, /*0x0110,*/ (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {0x00D0, /*0x0110,*/ (UChar)0x0043 /* 'C' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0045 /* 'E' */, (UChar)0x004B /* 'K' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0052 /* 'R' */, (UChar)0x0041 /* 'A' */, (UChar)0x005F /* '_' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, (UChar)0x0042 /* 'B' */, (UChar)0x0045 /* 'E' */, (UChar)0x004A /* 'J' */, (UChar)0x0044 /* 'D' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0045 /* 'E' */, (UChar)0x004B /* 'K' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0052 /* 'R' */, (UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0055 /* 'U' */, (UChar)0x0044 /* 'D' */, 0}, - {(UChar)0x0048 /* 'H' */, 0x00D8, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0048 /* 'H' */, (UChar)0x0041 /* 'A' */, (UChar)0x0041 /* 'A' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0048 /* 'H' */, 0x00C5, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0042 /* 'B' */, (UChar)0x004F /* 'O' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0048 /* 'H' */, (UChar)0x0041 /* 'A' */, (UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0056 /* 'V' */, 0x00C6, (UChar)0x0052 /* 'R' */, (UChar)0x004B /* 'K' */, (UChar)0x0053 /* 'S' */, (UChar)0x0042 /* 'B' */, (UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x004B /* 'K' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006B /* 'k' */, (UChar)0x0061 /* 'a' */, (UChar)0x0072 /* 'r' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004B /* 'K' */, (UChar)0x0061 /* 'a' */, (UChar)0x0072 /* 'r' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004E /* 'N' */, (UChar)0x0049 /* 'I' */, (UChar)0x0045 /* 'E' */, (UChar)0x004C /* 'L' */, (UChar)0x0053 /* 'S' */, (UChar)0x0020 /* ' ' */, (UChar)0x004A /* 'J' */, 0x00D8, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004E /* 'N' */, (UChar)0x0049 /* 'I' */, (UChar)0x0045 /* 'E' */, (UChar)0x004C /* 'L' */, (UChar)0x0053 /* 'S' */, (UChar)0x002D /* '-' */, (UChar)0x004A /* 'J' */, 0x00D8, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004E /* 'N' */, (UChar)0x0049 /* 'I' */, (UChar)0x0045 /* 'E' */, (UChar)0x004C /* 'L' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, 0x00C9, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, 0x00C9, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x004C /* 'L' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0056 /* 'V' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0048 /* 'H' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, 0x00DC, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0048 /* 'H' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x004C /* 'L' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, 0x00DC, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x004D /* 'M' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {0x00DF, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0053 /* 'S' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0020 /* ' ' */, (UChar)0x0056 /* 'V' */, (UChar)0x0049 /* 'I' */, (UChar)0x004C /* 'L' */, (UChar)0x0044 /* 'D' */, (UChar)0x004D /* 'M' */, (UChar)0x004F /* 'O' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x004B /* 'K' */, 0x00C6, (UChar)0x0052 /* 'R' */, 0}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x004D /* 'M' */, (UChar)0x0020 /* ' ' */, (UChar)0x0050 /* 'P' */, (UChar)0x0045 /* 'E' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x004D /* 'M' */, (UChar)0x004C /* 'L' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0054 /* 'T' */, (UChar)0x0048 /* 'H' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0056 /* 'V' */, (UChar)0x0041 /* 'A' */, (UChar)0x004C /* 'L' */, (UChar)0x0044 /* 'D' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0054 /* 'T' */, (UChar)0x0048 /* 'H' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0056 /* 'V' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x0055 /* 'U' */, (UChar)0x0052 /* 'R' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0054 /* 'T' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0047 /* 'G' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {0x00FE, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0056 /* 'V' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, 0x00D0, /*0x0110,*/ (UChar)0x0055 /* 'U' */, (UChar)0x0052 /* 'R' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0056 /* 'V' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, 0x00C5, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0056 /* 'V' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0041 /* 'A' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0056 /* 'V' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, 0x00C5, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {0x00C6, (UChar)0x0042 /* 'B' */, (UChar)0x004C /* 'L' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {0x00C4, (UChar)0x0042 /* 'B' */, (UChar)0x004C /* 'L' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {0x00D8, (UChar)0x0042 /* 'B' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */}, - {0x00D6, (UChar)0x0042 /* 'B' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */} -}; - -const static UChar testNTList[][MAX_TOKEN_LEN] = { - {(UChar)0x0061 /* 'a' */, (UChar)0x006E /* 'n' */, (UChar)0x0064 /* 'd' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0061 /* 'a' */, (UChar)0x0071 /* 'q' */, (UChar)0x0075 /* 'u' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x006D /* 'm' */, (UChar)0x0069 /* 'i' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x006F /* 'o' */, (UChar)0x0074 /* 't' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x006F /* 'o' */, (UChar)0x0074 /* 't' */, 0x00e9, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, 0x00f4, (UChar)0x0074 /* 't' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, 0x00f4, (UChar)0x0074 /* 't' */, 0x00e9, (UChar)0x0000 /* '\0' */}, - {0x010d, (UChar)0x0075 /* 'u' */, 0x010d, 0x0113, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0043 /* 'C' */, (UChar)0x007A /* 'z' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0068 /* 'h' */, (UChar)0x0069 /* 'i' */, 0x0161, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, (UChar)0x0069 /* 'i' */, (UChar)0x0073 /* 's' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0069 /* 'i' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x006D /* 'm' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, 0x00f5, (UChar)0x0075 /* 'u' */, (UChar)0x0067 /* 'g' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, 0x00f2, (UChar)0x007A /* 'z' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, 0x010d, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00fc, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0079 /* 'y' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, 0x00e4, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00f6, (UChar)0x0077 /* 'w' */, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, 0x00e0, 0x0161, (UChar)0x0074 /* 't' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, 0x00ee, (UChar)0x0072 /* 'r' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, (UChar)0x0079 /* 'y' */, (UChar)0x006E /* 'n' */, (UChar)0x0064 /* 'd' */, (UChar)0x0069 /* 'i' */, (UChar)0x0067 /* 'g' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004D /* 'M' */, 0x00e4, (UChar)0x006E /* 'n' */, (UChar)0x006E /* 'n' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, 0x00f6, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0074 /* 't' */, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0070 /* 'p' */, (UChar)0x0069 /* 'i' */, 0x00f1, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0070 /* 'p' */, (UChar)0x0069 /* 'i' */, (UChar)0x006E /* 'n' */, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0070 /* 'p' */, (UChar)0x0079 /* 'y' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {0x0161, 0x00e0, (UChar)0x0072 /* 'r' */, (UChar)0x0061 /* 'a' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, (UChar)0x0061 /* 'a' */, (UChar)0x0076 /* 'v' */, (UChar)0x006F /* 'o' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0000 /* '\0' */}, - {0x0160, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0062 /* 'b' */, 0x016b, (UChar)0x0072 /* 'r' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0069 /* 'i' */, (UChar)0x0065 /* 'e' */, (UChar)0x0074 /* 't' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {0x015b, (UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0062 /* 'b' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, (UChar)0x0075 /* 'u' */, (UChar)0x0062 /* 'b' */, (UChar)0x0074 /* 't' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, (UChar)0x0079 /* 'y' */, (UChar)0x006D /* 'm' */, (UChar)0x0062 /* 'b' */, (UChar)0x006F /* 'o' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, 0x00e4, (UChar)0x006D /* 'm' */, (UChar)0x0074 /* 't' */, (UChar)0x006C /* 'l' */, (UChar)0x0069 /* 'i' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0077 /* 'w' */, (UChar)0x0061 /* 'a' */, (UChar)0x0066 /* 'f' */, (UChar)0x0066 /* 'f' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0076 /* 'v' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x006B /* 'k' */, (UChar)0x0065 /* 'e' */, (UChar)0x0068 /* 'h' */, (UChar)0x0072 /* 'r' */, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0077 /* 'w' */, (UChar)0x006F /* 'o' */, (UChar)0x006F /* 'o' */, (UChar)0x0064 /* 'd' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0076 /* 'v' */, (UChar)0x006F /* 'o' */, (UChar)0x0078 /* 'x' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0076 /* 'v' */, 0x00e4, (UChar)0x0067 /* 'g' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0079 /* 'y' */, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0079 /* 'y' */, (UChar)0x0075 /* 'u' */, (UChar)0x0061 /* 'a' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0079 /* 'y' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x0063 /* 'c' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {0x017e, (UChar)0x0061 /* 'a' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {0x017e, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {0x017d, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, 0x0113, (UChar)0x0076 /* 'v' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x007A /* 'z' */, (UChar)0x006F /* 'o' */, (UChar)0x006F /* 'o' */, 0}, - {(UChar)0x005A /* 'Z' */, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0065 /* 'e' */, (UChar)0x0064 /* 'd' */, (UChar)0x0072 /* 'r' */, (UChar)0x0069 /* 'i' */, (UChar)0x006A /* 'j' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x005A /* 'Z' */, 0x00fc, (UChar)0x0072 /* 'r' */, (UChar)0x0069 /* 'i' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x007A /* 'z' */, (UChar)0x0079 /* 'y' */, (UChar)0x0073 /* 's' */, (UChar)0x006B /* 'k' */, 0}, - {0x00e4, (UChar)0x006E /* 'n' */, (UChar)0x0064 /* 'd' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */} -}; - - -void addDanishCollTest(TestNode** root) -{ - - - /*addTest(root, &TestTertiary, "tscoll/cdantst/TestTertiary");*/ - /*addTest(root, &TestPrimary, "tscoll/cdantst/TestPrimary");*/ - -} - - - -static void TestTertiary( ) -{ - - int32_t i,j; - UErrorCode status = U_ZERO_ERROR; - myCollation = ucol_open("da_DK", &status); - if(U_FAILURE(status)){ - log_err("ERROR: in creation of rule based collator: %s\n", myErrorName(status)); - return; - } - ucol_setStrength(myCollation, UCOL_TERTIARY); - for (i = 0; i < 5 ; i++) - { - doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); - } - j = 0; - log_verbose("Test internet data list : "); - for (i = 0; i < 53; i++) { - for (j = i+1; j < 54; j++) { - doTest(myCollation, testBugs[i], testBugs[j], UCOL_LESS); - } - } - log_verbose("Test NT data list : "); - for (i = 0; i < 52; i++) { - for (j = i+1; j < 53; j++) { - doTest(myCollation, testNTList[i], testNTList[j], UCOL_LESS); - } - } - ucol_close(myCollation); -} - -static void TestPrimary() -{ - int32_t i; - UErrorCode status = U_ZERO_ERROR; - myCollation = ucol_open("da_DK", &status); - if(U_FAILURE(status)){ - log_err("ERROR: %s: in creation of rule based collator: %s\n", __FILE__, myErrorName(status)); - return; - } - ucol_setStrength(myCollation, UCOL_PRIMARY); - for (i = 5; i < 8 ; i++) - { - doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); - } - ucol_close(myCollation); -} - -#endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/cintltst/cdantst.h b/icuSources/test/cintltst/cdantst.h deleted file mode 100644 index c2641377..00000000 --- a/icuSources/test/cintltst/cdantst.h +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ -/******************************************************************************** -* -* File CDANTST.H -* -* Modification History: -* Name Description -* Madhu Katragadda Converted to C -*********************************************************************************/ -/** - * CollationDanishTest is a third level test class. This tests the locale - * specific primary, secondary and tertiary rules. For example, the ignorable - * character '-' in string "black-bird". The en_US locale uses the default - * collation rules as its sorting sequence. - */ - -#ifndef _CDANCOLLTST -#define _CDANCOLLTST - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "cintltst.h" - -#define MAX_TOKEN_LEN 24 - - - /* performs test with strength PRIMARY */ -static void TestPrimary(void); - - /* perform test with strength TERTIARY*/ -static void TestTertiary(void); - - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/icuSources/test/cintltst/cdattst.c b/icuSources/test/cintltst/cdattst.c index f4b039e7..3fcdb47e 100644 --- a/icuSources/test/cintltst/cdattst.c +++ b/icuSources/test/cintltst/cdattst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -32,6 +32,7 @@ #include static void TestExtremeDates(void); +static void TestAllLocales(void); #define LEN(a) (sizeof(a)/sizeof(a[0])) @@ -45,6 +46,7 @@ void addDateForTest(TestNode** root) TESTCASE(TestSymbols); TESTCASE(TestDateFormatCalendar); TESTCASE(TestExtremeDates); + TESTCASE(TestAllLocales); } /* Testing the DateFormat API */ static void TestDateFormat() @@ -124,9 +126,9 @@ static void TestDateFormat() for(i=0;i @@ -108,6 +110,8 @@ int main(int argc, const char* const argv[]) TestNode *root; const char *warnOrErr = "Failure"; const char** argv2; + UDate startTime, endTime; + int32_t diffTime; /* initial check for the default converter */ UErrorCode errorCode = U_ZERO_ERROR; @@ -116,6 +120,8 @@ int main(int argc, const char* const argv[]) U_MAIN_INIT_ARGS(argc, argv); + startTime = uprv_getUTCtime(); + argv2 = (const char**) malloc(sizeof(char*) * argc); if (argv2 == NULL) { printf("*** Error: Out of memory (too many cmd line args?)\n"); @@ -258,6 +264,15 @@ int main(int argc, const char* const argv[]) } /* End of loop that repeats the entire test, if requested. (Normally doesn't loop) */ free((void*)argv2); + + endTime = uprv_getUTCtime(); + diffTime = (int32_t)(endTime - startTime); + printf("Elapsed Time: %02d:%02d:%02d.%03d\n", + (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR), + (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), + (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND), + (int)(diffTime%U_MILLIS_PER_SECOND)); + return nerrors ? 1 : 0; } @@ -300,60 +315,6 @@ static void ctest_appendToDataDirectory(const char *toAppend) } */ -void -ctest_pathnameInContext( char* fullname, int32_t maxsize, const char* relPath ) -{ - char mainDirBuffer[1024]; - char* mainDir = NULL; - const char *dataDirectory = ctest_dataOutDir(); - const char inpSepChar = '|'; - char* tmp; - int32_t lenMainDir; - int32_t lenRelPath; - -#ifdef XP_MAC - Str255 volName; - int16_t volNum; - OSErr err = GetVol( volName, &volNum ); - if (err != noErr) - volName[0] = 0; - mainDir = (char*) &(volName[1]); - mainDir[volName[0]] = 0; -#else - if (dataDirectory != NULL) { - strcpy(mainDirBuffer, dataDirectory); - strcat(mainDirBuffer, ".." U_FILE_SEP_STRING); - } else { - mainDirBuffer[0]='\0'; - } - mainDir = mainDirBuffer; -#endif - - lenMainDir = (int32_t)strlen(mainDir); - if(lenMainDir > 0 && mainDir[lenMainDir - 1] != U_FILE_SEP_CHAR) { - mainDir[lenMainDir++] = U_FILE_SEP_CHAR; - mainDir[lenMainDir] = 0; - } - - if (relPath[0] == '|') - relPath++; - lenRelPath = (int32_t)strlen(relPath); - if (maxsize < lenMainDir + lenRelPath + 2) { - fullname[0] = 0; - return; - } - strcpy(fullname, mainDir); - /*strcat(fullname, U_FILE_SEP_STRING);*/ - strcat(fullname, relPath); - strchr(fullname, inpSepChar); - tmp = strchr(fullname, inpSepChar); - while (tmp) { - *tmp = U_FILE_SEP_CHAR; - tmp = strchr(tmp+1, inpSepChar); - } -} - - /* returns the path to icu/source/data */ const char * ctest_dataSrcDir() { @@ -562,12 +523,18 @@ char *aescstrdup(const UChar* unichars,int32_t length){ } const char* loadTestData(UErrorCode* err){ - const char* directory=NULL; - UResourceBundle* test =NULL; - char* tdpath=NULL; - const char* tdrelativepath = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING; if( _testDataPath == NULL){ + const char* directory=NULL; + UResourceBundle* test =NULL; + char* tdpath=NULL; + const char* tdrelativepath; +#if defined (U_TOPBUILDDIR) + tdrelativepath = "test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING; + directory = U_TOPBUILDDIR; +#else + tdrelativepath = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING; directory= ctest_dataOutDir(); +#endif tdpath = (char*) ctst_malloc(sizeof(char) *(( strlen(directory) * strlen(tdrelativepath)) + 10)); @@ -725,5 +692,15 @@ U_CFUNC UBool assertEquals(const char* message, const char* expected, #endif return TRUE; } +/*-------------------------------------------------------------------- + * Time bomb - allows temporary behavior that expires at a given + * release + *-------------------------------------------------------------------- + */ +U_CFUNC UBool isICUVersionAtLeast(const UVersionInfo x) { + UVersionInfo v; + u_getVersion(v); + return (uprv_memcmp(v, x, U_MAX_VERSION_LENGTH) >= 0); +} #endif diff --git a/icuSources/test/cintltst/cintltst.dsp b/icuSources/test/cintltst/cintltst.dsp deleted file mode 100644 index f0346d6d..00000000 --- a/icuSources/test/cintltst/cintltst.dsp +++ /dev/null @@ -1,653 +0,0 @@ -# Microsoft Developer Studio Project File - Name="cintltst" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=cintltst - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "cintltst.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "cintltst.mak" CFG="cintltst - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cintltst - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cintltst - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "cintltst - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "cintltst - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cintltst - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MT /Za /W3 /GX /O2 /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib ctestfw.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib\\" - -!ELSEIF "$(CFG)" == "cintltst - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MTd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icutud.lib ctestfwd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /incremental:no - -!ELSEIF "$(CFG)" == "cintltst - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icuin.lib ctestfw.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib\\" /machine:IA64 - -!ELSEIF "$(CFG)" == "cintltst - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icuind.lib ctestfwd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib\\" /machine:IA64 -# SUBTRACT LINK32 /profile - -!ENDIF - -# Begin Target - -# Name "cintltst - Win32 Release" -# Name "cintltst - Win32 Debug" -# Name "cintltst - Win64 Release" -# Name "cintltst - Win64 Debug" -# Begin Group "bidi" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cbididat.c -# End Source File -# Begin Source File - -SOURCE=.\cbiditst.c -# End Source File -# Begin Source File - -SOURCE=.\cbiditst.h -# End Source File -# End Group -# Begin Group "break iteration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cbiapts.c -# End Source File -# Begin Source File - -SOURCE=.\cbiapts.h -# End Source File -# Begin Source File - -SOURCE=.\cbkittst.c -# End Source File -# Begin Source File - -SOURCE=.\cregrtst.c -# End Source File -# Begin Source File - -SOURCE=.\cregrtst.h -# End Source File -# End Group -# Begin Group "collation" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\callcoll.c -# End Source File -# Begin Source File - -SOURCE=.\callcoll.h -# End Source File -# Begin Source File - -SOURCE=.\capitst.c -# End Source File -# Begin Source File - -SOURCE=.\capitst.h -# End Source File -# Begin Source File - -SOURCE=.\ccolltst.c -# End Source File -# Begin Source File - -SOURCE=.\ccolltst.h -# End Source File -# Begin Source File - -SOURCE=.\cctest.c -# End Source File -# Begin Source File - -SOURCE=.\ccurrtst.c -# End Source File -# Begin Source File - -SOURCE=.\ccurrtst.h -# End Source File -# Begin Source File - -SOURCE=.\cdantst.c -# End Source File -# Begin Source File - -SOURCE=.\cdantst.h -# End Source File -# Begin Source File - -SOURCE=.\cdetst.c -# End Source File -# Begin Source File - -SOURCE=.\cdetst.h -# End Source File -# Begin Source File - -SOURCE=.\cestst.c -# End Source File -# Begin Source File - -SOURCE=.\cestst.h -# End Source File -# Begin Source File - -SOURCE=.\cfintst.c -# End Source File -# Begin Source File - -SOURCE=.\cfintst.h -# End Source File -# Begin Source File - -SOURCE=.\cfrtst.c -# End Source File -# Begin Source File - -SOURCE=.\cfrtst.h -# End Source File -# Begin Source File - -SOURCE=.\cg7coll.c -# End Source File -# Begin Source File - -SOURCE=.\cg7coll.h -# End Source File -# Begin Source File - -SOURCE=.\citertst.c -# End Source File -# Begin Source File - -SOURCE=.\citertst.h -# End Source File -# Begin Source File - -SOURCE=.\cjaptst.c -# End Source File -# Begin Source File - -SOURCE=.\cjaptst.h -# End Source File -# Begin Source File - -SOURCE=.\cmsccoll.c -# End Source File -# Begin Source File - -SOURCE=.\colutil.c -# End Source File -# Begin Source File - -SOURCE=.\cturtst.c -# End Source File -# Begin Source File - -SOURCE=.\cturtst.h -# End Source File -# Begin Source File - -SOURCE=.\encoll.c -# End Source File -# Begin Source File - -SOURCE=.\encoll.h -# End Source File -# Begin Source File - -SOURCE=.\usrchdat.c -# End Source File -# Begin Source File - -SOURCE=.\usrchtst.c -# End Source File -# End Group -# Begin Group "collections" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\chashtst.c -# End Source File -# Begin Source File - -SOURCE=.\sorttest.c -# End Source File -# Begin Source File - -SOURCE=.\trietest.c -# End Source File -# Begin Source File - -SOURCE=.\ucmptst.c -# End Source File -# Begin Source File - -SOURCE=.\uenumtst.c -# End Source File -# End Group -# Begin Group "conversion" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\bocu1tst.c -# End Source File -# Begin Source File - -SOURCE=.\ccapitst.c -# End Source File -# Begin Source File - -SOURCE=.\ccapitst.h -# End Source File -# Begin Source File - -SOURCE=.\cconvtst.c -# End Source File -# Begin Source File - -SOURCE=.\eurocreg.c -# End Source File -# Begin Source File - -SOURCE=.\nccbtst.c -# End Source File -# Begin Source File - -SOURCE=.\nccbtst.h -# End Source File -# Begin Source File - -SOURCE=.\ncnvfbts.c -# End Source File -# Begin Source File - -SOURCE=.\ncnvfbts.h -# End Source File -# Begin Source File - -SOURCE=.\ncnvtst.c -# End Source File -# Begin Source File - -SOURCE=.\nucnvtst.c -# End Source File -# Begin Source File - -SOURCE=.\nucnvtst.h -# End Source File -# Begin Source File - -SOURCE=.\stdnmtst.c -# End Source File -# End Group -# Begin Group "data & memory" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\udatatst.c -# ADD CPP /Ze -# End Source File -# End Group -# Begin Group "formatting" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\calltest.c -# End Source File -# Begin Source File - -SOURCE=.\ccaltst.c -# End Source File -# Begin Source File - -SOURCE=.\ccaltst.h -# End Source File -# Begin Source File - -SOURCE=.\cdattst.c -# End Source File -# Begin Source File - -SOURCE=.\cdattst.h -# End Source File -# Begin Source File - -SOURCE=.\cdtdptst.c -# End Source File -# Begin Source File - -SOURCE=.\cdtdptst.h -# End Source File -# Begin Source File - -SOURCE=.\cdtrgtst.c -# End Source File -# Begin Source File - -SOURCE=.\cdtrgtst.h -# End Source File -# Begin Source File - -SOURCE=.\cformtst.c -# End Source File -# Begin Source File - -SOURCE=.\cformtst.h -# End Source File -# Begin Source File - -SOURCE=.\cmsgtst.c -# End Source File -# Begin Source File - -SOURCE=.\cmsgtst.h -# End Source File -# Begin Source File - -SOURCE=.\cnmdptst.c -# End Source File -# Begin Source File - -SOURCE=.\cnmdptst.h -# End Source File -# Begin Source File - -SOURCE=.\cnumtst.c -# End Source File -# Begin Source File - -SOURCE=.\cnumtst.h -# End Source File -# Begin Source File - -SOURCE=.\utmstest.c -# End Source File -# End Group -# Begin Group "locales & resources" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cldrtest.c -# End Source File -# Begin Source File - -SOURCE=.\cloctst.c -# End Source File -# Begin Source File - -SOURCE=.\cloctst.h -# End Source File -# Begin Source File - -SOURCE=.\cposxtst.c -# End Source File -# Begin Source File - -SOURCE=.\crestst.c -# End Source File -# Begin Source File - -SOURCE=.\crestst.h -# End Source File -# Begin Source File - -SOURCE=.\creststn.c -# End Source File -# Begin Source File - -SOURCE=.\creststn.h -# End Source File -# End Group -# Begin Group "misc" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cintltst.c -# End Source File -# Begin Source File - -SOURCE=.\cintltst.h -# End Source File -# Begin Source File - -SOURCE=.\ctstdep.c -# End Source File -# Begin Source File - -SOURCE=.\cutiltst.c -# End Source File -# Begin Source File - -SOURCE=.\hpmufn.c -# End Source File -# Begin Source File - -SOURCE=.\putiltst.c -# End Source File -# Begin Source File - -SOURCE=.\tracetst.c -# End Source File -# End Group -# Begin Group "normalization" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cnormtst.c -# End Source File -# Begin Source File - -SOURCE=.\cnormtst.h -# End Source File -# End Group -# Begin Group "properties & sets" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cucdapi.c -# End Source File -# Begin Source File - -SOURCE=.\cucdtst.c -# End Source File -# Begin Source File - -SOURCE=.\cucdtst.h -# End Source File -# Begin Source File - -SOURCE=.\usettest.c -# End Source File -# End Group -# Begin Group "regex" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\reapits.c -# End Source File -# End Group -# Begin Group "strings" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cstrcase.c -# End Source File -# Begin Source File - -SOURCE=.\cstrtest.c -# End Source File -# Begin Source File - -SOURCE=.\custrtrn.c -# End Source File -# Begin Source File - -SOURCE=.\custrtst.c -# End Source File -# Begin Source File - -SOURCE=.\utf16tst.c -# End Source File -# Begin Source File - -SOURCE=.\utf8tst.c -# End Source File -# End Group -# Begin Group "transforms" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\utransts.c -# End Source File -# End Group -# Begin Group "sprep & idna" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\idnatest.c -# End Source File -# Begin Source File - -SOURCE=.\nfsprep.c -# End Source File -# Begin Source File - -SOURCE=.\nfsprep.h -# End Source File -# Begin Source File - -SOURCE=.\spreptst.c -# End Source File -# Begin Source File - -SOURCE=.\sprpdata.c -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/test/cintltst/cintltst.h b/icuSources/test/cintltst/cintltst.h index 199496e0..e750424b 100644 --- a/icuSources/test/cintltst/cintltst.h +++ b/icuSources/test/cintltst/cintltst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -22,6 +22,7 @@ The main root for C API tests #include "unicode/utypes.h" #include "unicode/putil.h" #include "unicode/ctest.h" +#include #ifndef U_USE_DEPRECATED_API #define U_USE_DEPRECATED_API 1 @@ -40,15 +41,6 @@ U_CFUNC const char* ctest_dataOutDir(void); */ U_CFUNC const char* ctest_dataSrcDir(void); -/** - *complete a relative path to a full pathname, and convert to platform-specific syntax. - * The character seperating directories for the relative path is '|'. - * @fullname the full path name - * @maxsize the maximum size of the string - * @relPath the relative path name - */ -U_CFUNC void ctest_pathnameInContext(char* fullname, int32_t maxsize, const char* relPath ) ; - U_CFUNC UChar* CharsToUChars(const char* chars); /** @@ -106,4 +98,11 @@ U_CFUNC UBool assertTrue(const char* msg, int condition); U_CFUNC UBool assertEquals(const char* msg, const char* expectedString, const char* actualString); +/** + * Time bomb - allows temporary behavior that expires at a given + * release + * + */ +U_CFUNC UBool isICUVersionAtLeast(const UVersionInfo x); + #endif diff --git a/icuSources/test/cintltst/cintltst.vcproj b/icuSources/test/cintltst/cintltst.vcproj index 34479a83..6f6a923d 100644 --- a/icuSources/test/cintltst/cintltst.vcproj +++ b/icuSources/test/cintltst/cintltst.vcproj @@ -22,13 +22,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\tools\ctestfw,..\..\common,..\..\i18n,..\..\tools\toolutil" + AdditionalIncludeDirectories="..\..\..\include;..\..\tools\ctestfw;..\..\common;..\..\i18n;..\..\tools\toolutil" PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/cintltst.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -83,16 +83,15 @@ CharacterSet="2"> - - - - - - - - @@ -282,9 +269,6 @@ - - @@ -334,6 +318,9 @@ + + - - @@ -408,6 +392,9 @@ + + @@ -443,6 +430,9 @@ + + @@ -487,9 +477,6 @@ - - @@ -509,6 +496,9 @@ + + diff --git a/icuSources/test/cintltst/cldrtest.c b/icuSources/test/cintltst/cldrtest.c index 053b109e..fe4716ed 100644 --- a/icuSources/test/cintltst/cldrtest.c +++ b/icuSources/test/cintltst/cldrtest.c @@ -1,11 +1,12 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ #include "cintltst.h" #include "unicode/ures.h" +#include "unicode/ucurr.h" #include "unicode/ustring.h" #include "unicode/uset.h" #include "unicode/udat.h" @@ -15,13 +16,58 @@ #include "locmap.h" #include "uresimp.h" -static UBool isCurrencyPreEuro(const char* currencyKey){ +/*-------------------------------------------------------------------- + Time bomb - allows temporary behavior that expires at a given + release + ---------------------------------------------------------------------*/ +static const UVersionInfo ICU_37 = {3,7,0,0}; + +/* +returns a new UnicodeSet that is a flattened form of the original +UnicodeSet. +*/ +static USet* +createFlattenSet(USet *origSet, UErrorCode *status) { + + + USet *newSet = NULL; + int32_t origItemCount = 0; + int32_t idx, graphmeSize; + UChar32 start, end; + UChar graphme[64]; + if (U_FAILURE(*status)) { + log_err("createFlattenSet called with %s\n", u_errorName(*status)); + return NULL; + } + newSet = uset_open(1, 0); + origItemCount = uset_getItemCount(origSet); + for (idx = 0; idx < origItemCount; idx++) { + graphmeSize = uset_getItem(origSet, idx, + &start, &end, + graphme, (int32_t)(sizeof(graphme)/sizeof(graphme[0])), + status); + if (U_FAILURE(*status)) { + log_err("ERROR: uset_getItem returned %s\n", u_errorName(*status)); + *status = U_ZERO_ERROR; + } + if (graphmeSize) { + uset_addAllCodePoints(newSet, graphme, graphmeSize); + } + else { + uset_addRange(newSet, start, end); + } + } + return newSet; +} +static UBool +isCurrencyPreEuro(const char* currencyKey){ if( strcmp(currencyKey, "PTE") == 0 || strcmp(currencyKey, "ESP") == 0 || strcmp(currencyKey, "LUF") == 0 || strcmp(currencyKey, "GRD") == 0 || strcmp(currencyKey, "BEF") == 0 || - strcmp(currencyKey, "ITL") == 0 ){ + strcmp(currencyKey, "ITL") == 0 || + strcmp(currencyKey, "EEK") == 0){ return TRUE; } return FALSE; @@ -115,26 +161,8 @@ TestKeyInRootRecursive(UResourceBundle *root, const char *rootName, if (U_SUCCESS(errorCode) && (ures_getType(subSubBundle) == URES_ARRAY || ures_getType(subSubRootBundle) == URES_ARRAY)) { - /* TODO: Properly check for 2D arrays and zoneStrings */ - if (subBundleKey != NULL && strcmp(subBundleKey, "zoneStrings") == 0) { -/* int32_t minSize = ures_getSize(subBundle); - int32_t idx; - - for (idx = 0; idx < minSize; idx++) { - UResourceBundle *subSubBundleAtIndex = ures_getByIndex(subBundle, idx, NULL, &errorCode); - if (ures_getSize(subSubBundleAtIndex) != 6) { - log_err("zoneStrings at index %d has wrong size for locale \"%s\". array size=%d\n", - idx, - locale, - ures_getSize(subSubBundleAtIndex)); - } - ures_close(subSubBundleAtIndex); - }*/ - } - else { - /* Here is one of the recursive parts */ - TestKeyInRootRecursive(subRootBundle, rootName, subBundle, locale); - } + /* Here is one of the recursive parts */ + TestKeyInRootRecursive(subRootBundle, rootName, subBundle, locale); } else { int32_t minSize = ures_getSize(subRootBundle); @@ -281,7 +309,8 @@ TestKeyInRootRecursive(UResourceBundle *root, const char *rootName, subBundleKey, ures_getKey(currentBundle), locale); - } else if (strcmp(subBundleKey, "localPatternChars") == 0) { + } else if (strcmp(subBundleKey, "localPatternChars") == 0 && + isICUVersionAtLeast(ICU_37)) { /* Check well-formedness of localPatternChars. First, the * length must match the number of fields defined by * DateFormat. Second, each character in the string must @@ -346,8 +375,13 @@ TestKeyInRootRecursive(UResourceBundle *root, const char *rootName, #endif } else if (ures_getType(subBundle) == URES_TABLE) { - /* Here is one of the recursive parts */ - TestKeyInRootRecursive(subRootBundle, rootName, subBundle, locale); + if (strcmp(subBundleKey, "availableFormats")!=0) { + /* Here is one of the recursive parts */ + TestKeyInRootRecursive(subRootBundle, rootName, subBundle, locale); + } + else { + log_verbose("Skipping key %s in %s\n", subBundleKey, locale); + } } else if (ures_getType(subBundle) == URES_BINARY || ures_getType(subBundle) == URES_INT) { /* Can't do anything to check it */ @@ -418,7 +452,7 @@ TestLocaleStructure(void) { int32_t locCount = uloc_countAvailable(); int32_t locIndex; UErrorCode errorCode = U_ZERO_ERROR; - const char *currLoc; + const char *currLoc, *resolvedLoc; /* TODO: Compare against parent's data too. This code can't handle fallbacks that some tools do already. */ /* char locName[ULOC_FULLNAME_CAPACITY]; @@ -477,6 +511,13 @@ TestLocaleStructure(void) { log_verbose("WARNING: The locale %s is experimental! It shouldn't be listed as an installed locale.\n", currLoc); } + resolvedLoc = ures_getLocaleByType(currentLocale, ULOC_ACTUAL_LOCALE, &errorCode); + if (strcmp(resolvedLoc, currLoc) != 0) { + /* All locales have at least a Version resource. + If it's absolutely empty, then the previous test will fail too.*/ + log_err("Locale resolves to different locale. Is %s an alias of %s?\n", + currLoc, resolvedLoc); + } TestKeyInRootRecursive(root, "root", currentLocale, currLoc); testLCID(currentLocale, currLoc); @@ -728,17 +769,21 @@ findStringSetMismatch(const char *currLoc, const UChar *string, int32_t langSize const UChar *exemplarCharacters, int32_t exemplarLen, UBool ignoreNumbers) { UErrorCode errorCode = U_ZERO_ERROR; - USet *exemplarSet = uset_openPatternOptions(exemplarCharacters, exemplarLen, USET_CASE_INSENSITIVE, &errorCode); + USet *origSet = uset_openPatternOptions(exemplarCharacters, exemplarLen, USET_CASE_INSENSITIVE, &errorCode); + USet *exemplarSet = createFlattenSet(origSet, &errorCode); int32_t strIdx; + uset_close(origSet); if (U_FAILURE(errorCode)) { - log_err("%s: error uset_openPattern returned %s\n", currLoc, u_errorName(errorCode)); + log_err("%s: error uset_openPattern returned %s\n", currLoc, u_errorName(errorCode)); return -1; } for (strIdx = 0; strIdx < langSize; strIdx++) { if (!uset_contains(exemplarSet, string[strIdx]) - && string[strIdx] != 0x0020 && string[strIdx] != 0x00A0 && string[strIdx] != 0x002e && string[strIdx] != 0x002c && string[strIdx] != 0x002d && string[strIdx] != 0x0027) { + && string[strIdx] != 0x0020 && string[strIdx] != 0x00A0 && string[strIdx] != 0x002e && string[strIdx] != 0x002c && string[strIdx] != 0x002d && string[strIdx] != 0x0027 + && string[strIdx] != 0x200C && string[strIdx] != 0x200D) { if (!ignoreNumbers || (ignoreNumbers && (string[strIdx] < 0x30 || string[strIdx] > 0x39))) { + uset_close(exemplarSet); return strIdx; } } @@ -746,7 +791,19 @@ findStringSetMismatch(const char *currLoc, const UChar *string, int32_t langSize uset_close(exemplarSet); return -1; } - +/* include non-invariant chars */ +static int32_t +myUCharsToChars(const UChar* us, char* cs, int32_t len){ + int32_t i=0; + for(; i< len; i++){ + if(us[i] < 0x7f){ + cs[i] = (char)us[i]; + }else{ + return -1; + } + } + return i; +} static void findSetMatch( UScriptCode *scriptCodes, int32_t scriptsLen, USet *exemplarSet, @@ -788,7 +845,7 @@ findSetMatch( UScriptCode *scriptCodes, int32_t scriptsLen, UChar32 end = 0; UChar *str = NULL; int32_t strCapacity = 0; - + strCapacity = uset_getItem(exemplarSet, i, &start, &end, str, strCapacity, &status); if(U_SUCCESS(status)){ int32_t j; @@ -800,6 +857,16 @@ findSetMatch( UScriptCode *scriptCodes, int32_t scriptsLen, } } if(existsInScript == FALSE){ + for( j = 0; j < scriptsLen; j++){ + UChar toPattern[500]={'\0'}; + char pat[500]={'\0'}; + int32_t len = uset_toPattern(scripts[j], toPattern, 500, TRUE, &status); + len = myUCharsToChars(toPattern, pat, len); + log_err("uset_indexOf(\\u%04X)=%i uset_indexOf(\\u%04X)=%i\n", start, uset_indexOf(scripts[0], start), end, uset_indexOf(scripts[0], end)); + if(len!=-1){ + log_err("Pattern: %s\n",pat); + } + } log_err("ExemplarCharacters and LocaleScript containment test failed for locale %s. \n", locale); } }else{ @@ -979,10 +1046,12 @@ static void VerifyTranslation(void) { /* test that the scripts are a superset of exemplar characters. */ { - USet *exemplarSet = ulocdata_getExemplarSet(NULL,currLoc, 0, &errorCode); + ULocaleData *uld = ulocdata_open(currLoc,&errorCode); + USet *exemplarSet = ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &errorCode); /* test if exemplar characters are part of script code */ findSetMatch(scripts, numScripts, exemplarSet, currLoc); uset_close(exemplarSet); + ulocdata_close(uld); } /* test that the paperSize API works */ @@ -1026,6 +1095,7 @@ static void TestExemplarSet(void){ UErrorCode ec = U_ZERO_ERROR; UEnumeration* avail; USet* exemplarSets[2]; + USet* unassignedSet; UScriptCode code[MAX_SCRIPTS_PER_LOCALE]; USet* codeSets[MAX_SCRIPTS_PER_LOCALE]; int32_t codeLen; @@ -1036,7 +1106,9 @@ static void TestExemplarSet(void){ int32_t strLen; UChar32 start, end; - exemplarSets[0] = exemplarSets[1] = NULL; + unassignedSet = NULL; + exemplarSets[0] = NULL; + exemplarSets[1] = NULL; for (i=0; i @@ -18,6 +18,8 @@ #include #include "cintltst.h" #include "cstring.h" +#include "uparse.h" +#include "uresimp.h" #include "unicode/putil.h" #include "unicode/ubrk.h" @@ -36,6 +38,8 @@ static void TestNullDefault(void); static void TestNonexistentLanguageExemplars(void); +static void TestLanguageExemplarsFallbacks(void); + void PrintDataTable(); /*--------------------------------------------------- @@ -62,7 +66,7 @@ static const char* rawData2[LOCALE_INFO_SIZE][LOCALE_SIZE] = { /* ISO-3 country */ { "USA", "FRA", "ESP", "GRC", "NOR", "CHN", "DEU", "", "JPN" }, /* LCID */ - { "409", "40c", "403", "408", "814", "804", "407", "a", "411" }, + { "409", "40c", "403", "408", "814", "804", "10407", "40a", "411" }, /* display language (English) */ { "English", "French", "Catalan", "Greek", "Norwegian", "Chinese", "German", "Spanish", "Japanese" }, @@ -80,14 +84,14 @@ static const char* rawData2[LOCALE_INFO_SIZE][LOCALE_SIZE] = { /* display language (French) */ { "anglais", "fran\\u00E7ais", "catalan", "grec", "norv\\u00E9gien", "chinois", "allemand", "espagnol", "japonais" }, /* display script code (French) */ - { "", "", "", "", "", "han simplifi\\u00E9", "", "", "" }, + { "", "", "", "", "", "id\\u00e9ogrammes han (variante simplifi\\u00e9e)", "", "", "" }, /* display country (French) */ { "\\u00C9tats-Unis", "France", "Espagne", "Gr\\u00E8ce", "Norv\\u00E8ge", "Chine", "Allemagne", "", "Japon" }, /* display variant (French) */ { "", "", "", "", "NY", "", "", "", "" }, /* display name (French) */ { "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)", - "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "chinois (han simplifi\\u00E9, Chine)", + "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "chinois (id\\u00e9ogrammes han (variante simplifi\\u00e9e), Chine)", "allemand (Allemagne, Ordonnancement=Ordre de l\\u2019annuaire)", "espagnol (Ordonnancement=Ordre traditionnel)", "japonais (Japon, Calendrier=Calendrier japonais)" }, /* display language (Catalan) */ @@ -204,7 +208,6 @@ void addLocaleTest(TestNode** root) TESTCASE(TestUninstalledISO3Names); TESTCASE(TestSimpleDisplayNames); TESTCASE(TestVariantParsing); - /*TESTCASE(MoreVariants);*/ TESTCASE(TestKeywordVariants); TESTCASE(TestKeywordVariantParsing); TESTCASE(TestCanonicalization); @@ -216,7 +219,15 @@ void addLocaleTest(TestNode** root) TESTCASE(TestGetLocale); TESTCASE(TestDisplayNameWarning); TESTCASE(TestNonexistentLanguageExemplars); - TESTCASE(TestAcceptLanguage); + TESTCASE(TestLanguageExemplarsFallbacks); + TESTCASE(TestCalendar); + TESTCASE(TestDateFormat); + TESTCASE(TestCollation); + TESTCASE(TestULocale); + TESTCASE(TestUResourceBundle); + TESTCASE(TestDisplayName); + TESTCASE(TestAcceptLanguage); + TESTCASE(TestGetLocaleForLCID); } @@ -567,6 +578,13 @@ static void TestDisplayNames() if(errorCode!=U_USING_DEFAULT_WARNING || length!=2 || buffer[0]!=0x71 || buffer[1]!=0x71) { log_err("error getting the display string for an unknown language - %s\n", u_errorName(errorCode)); } + + /* test that we get a default warning for a display name where one component is unknown (4255) */ + errorCode=U_ZERO_ERROR; + length=uloc_getDisplayName("qq_US_POSIX", "en_US", buffer, LENGTHOF(buffer), &errorCode); + if(errorCode!=U_USING_DEFAULT_WARNING) { + log_err("error getting the display name for a locale with an unknown language - %s\n", u_errorName(errorCode)); + } { int32_t i; @@ -867,7 +885,7 @@ static void TestISOFunctions() { test = *(str+count); -#if 0 +#if U_CHARSET_FAMILY==U_ASCII_FAMILY { /* This code only works on ASCII machines where the keys are stored in ASCII order */ const char *key; @@ -916,7 +934,7 @@ static void TestISOFunctions() if(!strcmp(test,"ZR")) log_err("FAIL getISOCountries() has obsolete country code %s\n", test); } - expect=239; + expect=244; if(count!=expect) { log_err("There is an error in getISOCountries, got %d, expected %d \n", count, expect); @@ -1338,35 +1356,6 @@ static void TestObsoleteNames(void) } -static void MoreVariants(void) -{ - struct { - const char *localeID; - const char *keyword; - const char *expectedValue; - } testCases[] = { - { "de_DE_EURO@collation=PHONEBOOK", "collation", "PHONEBOOK" }, - { "es_ES.utf8@euro", "collation", ""}, - { "es_ES.hello.utf8@euro", "", "" }, - { " s pa c e d _ more spaces _ spaced variant ", "", ""} - }; - - UErrorCode status = U_ZERO_ERROR; - - int32_t i = 0; - int32_t resultLen = 0; - char buffer[256]; - - for(i = 0; i < sizeof(testCases)/sizeof(testCases[0]); i++) { - *buffer = 0; - resultLen = uloc_getName(testCases[i].localeID, buffer, 256, &status); - if(uprv_strcmp(testCases[i].expectedValue, buffer) != 0) { - log_err("Expected to extract \"%s\" from \"%s\" for keyword \"%s\". Got \"%s\" instead\n", - testCases[i].expectedValue, testCases[i].localeID, testCases[i].keyword, buffer); - } - } -} - static void TestKeywordVariants(void) { struct { @@ -1439,6 +1428,14 @@ static void TestKeywordVariants(void) } j++; } + j = 0; + uenum_reset(keywords, &status); + while((keyword = uenum_next(keywords, &keywordLen, &status))) { + if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { + log_err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); + } + j++; + } } uenum_close(keywords); } @@ -1604,7 +1601,7 @@ static void TestKeywordSetError(void) for(i=0;i<=2;i++) { /* 1- test a short buffer with growing text */ - blen=strlen(kwSetTestCases[i].l)+1; + blen=(int32_t)strlen(kwSetTestCases[i].l)+1; memset(buffer,'%',1023); strcpy(buffer,kwSetTestCases[i].l); status = U_ZERO_ERROR; @@ -1626,7 +1623,7 @@ static void TestKeywordSetError(void) for(i=3;i<=4;i++) { /* 2- test a short buffer - text the same size or shrinking */ - blen=strlen(kwSetTestCases[i].l)+1; + blen=(int32_t)strlen(kwSetTestCases[i].l)+1; memset(buffer,'%',1023); strcpy(buffer,kwSetTestCases[i].l); status = U_ZERO_ERROR; @@ -1706,7 +1703,7 @@ static void TestCanonicalization(void) { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" }, { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" }, { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" }, - { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" }, + { "zh_TW_STROKE", "zh_TW_STROKE", "zh_Hant_TW@collation=stroke" }, { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" }, { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" }, { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" }, @@ -1720,12 +1717,13 @@ static void TestCanonicalization(void) { "en-BOONT", "en_BOONT", "en__BOONT" }, /* registered name */ { "de-1901", "de_1901", "de__1901" }, /* registered name */ { "de-1906", "de_1906", "de__1906" }, /* registered name */ - { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_SP" }, /* .NET name */ - { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_SP" }, /* .NET name */ + { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_CS" }, /* .NET name */ + { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_CS" }, /* .NET name */ + { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_CS" }, /* Linux name */ { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */ { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */ { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */ - { "zh-CHT", "zh_CHT", "zh_TW" }, /* .NET name This may change back to zh_Hant */ + { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */ /* posix behavior that used to be performed by getName */ { "mr.utf8", "mr.utf8", "mr" }, @@ -1753,7 +1751,10 @@ static void TestCanonicalization(void) { "root@kw=foo", "root@kw=foo", "root@kw=foo" }, { "@calendar=gregorian", "@calendar=gregorian", "@calendar=gregorian" }, { "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese", "ja_JP@calendar=Japanese" }, - { "ja_JP", "ja_JP", "ja_JP" } + { "ja_JP", "ja_JP", "ja_JP" }, + + /* test case for "i-default" */ + { "i-default", NULL, NULL } }; static const char* label[] = { "getName", "canonicalize" }; @@ -1767,6 +1768,11 @@ static void TestCanonicalization(void) const char* expected = (j==0) ? testCases[i].getNameID : testCases[i].canonicalID; *buffer = 0; status = U_ZERO_ERROR; + + if (expected == NULL) { + expected = uloc_getDefault(); + } + /* log_verbose("testing %s -> %s\n", testCases[i], testCases[i].canonicalID); */ origResultLen = _canonicalize(j, testCases[i].localeID, NULL, 0, &status); if (status != U_BUFFER_OVERFLOW_ERROR) { @@ -2044,24 +2050,14 @@ static void TestDisplayNameWarning(void) { } -/** - * Compare the ICU version against the given major/minor version. - */ -static int32_t _cmpversion(const char* version) { - UVersionInfo x, icu; - u_versionFromString(x, version); - u_getVersion(icu); - return memcmp(icu, x, U_MAX_VERSION_LENGTH); -} - /** * Compare two locale IDs. If they are equal, return 0. If `string' * starts with `prefix' plus an additional element, that is, string == * prefix + '_' + x, then return 1. Otherwise return a value < 0. */ static UBool _loccmp(const char* string, const char* prefix) { - int32_t slen = uprv_strlen(string), - plen = uprv_strlen(prefix); + int32_t slen = (int32_t)uprv_strlen(string), + plen = (int32_t)uprv_strlen(prefix); int32_t c = uprv_strncmp(string, prefix, plen); /* 'root' is less than everything */ if (uprv_strcmp(prefix, "root") == 0) { @@ -2104,7 +2100,7 @@ static void TestGetLocale(void) { NULL, 0, NULL, 0, &ec); if (U_FAILURE(ec)) { - log_err("udat_open failed\n"); + log_err("udat_open failed.Error %s\n", u_errorName(ec)); return; } valid = udat_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); @@ -2167,6 +2163,8 @@ static void TestGetLocale(void) { #endif /* === umsg === */ +#if 0 + /* commented out by weiv 01/12/2005. umsg_getLocaleByType is to be removed */ #if !UCONFIG_NO_FORMATTING { UMessageFormat *obj; @@ -2204,6 +2202,7 @@ static void TestGetLocale(void) { } umsg_close(obj); } +#endif #endif /* === ubrk === */ @@ -2217,7 +2216,7 @@ static void TestGetLocale(void) { 0, &ec); if (U_FAILURE(ec)) { - log_err("ubrk_open failed\n"); + log_err("ubrk_open failed. Error: %s \n", u_errorName(ec)); return; } valid = ubrk_getLocaleByType(obj, ULOC_VALID_LOCALE, &ec); @@ -2256,12 +2255,33 @@ static void TestGetLocale(void) { static void TestNonexistentLanguageExemplars(void) { /* JB 4068 - Nonexistent language */ UErrorCode ec = U_ZERO_ERROR; - USet *nothing = ulocdata_getExemplarSet(NULL, "qqq", 0, &ec); - uset_close(nothing); + ULocaleData *uld = ulocdata_open("qqq",&ec); if (ec != U_USING_DEFAULT_WARNING) { log_err("Exemplar set for \"qqq\", expecting U_USING_DEFAULT_WARNING, but got %s\n", u_errorName(ec)); } + uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec)); + ulocdata_close(uld); +} + +static void TestLanguageExemplarsFallbacks(void) { + /* Test that en_US fallsback, but en doesn't fallback. */ + UErrorCode ec = U_ZERO_ERROR; + ULocaleData *uld = ulocdata_open("en_US",&ec); + uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec)); + if (ec != U_USING_FALLBACK_WARNING) { + log_err("Exemplar set for \"en_US\", expecting U_USING_FALLBACK_WARNING, but got %s\n", + u_errorName(ec)); + } + ulocdata_close(uld); + ec = U_ZERO_ERROR; + uld = ulocdata_open("en",&ec); + uset_close(ulocdata_getExemplarSet(uld, NULL, 0, ULOCDATA_ES_STANDARD, &ec)); + if (ec != U_ZERO_ERROR) { + log_err("Exemplar set for \"en\", expecting U_ZERO_ERROR, but got %s\n", + u_errorName(ec)); + } + ulocdata_close(uld); } static void TestAcceptLanguage(void) { @@ -2325,3 +2345,367 @@ static void TestAcceptLanguage(void) { } } } + +static const char* LOCALE_ALIAS[][2] = { + {"in", "id"}, + {"in_ID", "id_ID"}, + {"iw", "he"}, + {"iw_IL", "he_IL"}, + {"ji", "yi"}, + {"en_BU", "en_MM"}, + {"en_DY", "en_BJ"}, + {"en_HV", "en_BF"}, + {"en_NH", "en_VU"}, + {"en_RH", "en_ZW"}, + {"en_TP", "en_TL"}, + {"en_ZR", "en_CD"} +}; +static UBool isLocaleAvailable(UResourceBundle* resIndex, const char* loc){ + UErrorCode status = U_ZERO_ERROR; + int32_t len = 0; + ures_getStringByKey(resIndex, loc,&len, &status); + if(U_FAILURE(status)){ + return FALSE; + } + return TRUE; +} + +static void TestCalendar() { +#if !UCONFIG_NO_FORMATTING + int i; + UErrorCode status = U_ZERO_ERROR; + UResourceBundle *resIndex = ures_open(NULL,"res_index", &status); + if(U_FAILURE(status)){ + log_err("Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); + return; + } + for (i=0; i maxOutputLength) { maxOutputLength = outputLength; U_ASSERT(outputLength < sizeof(output)); @@ -3296,7 +3296,7 @@ static void TestNewJapanese(void) { static const char *test2[] = { "\\u306f\\u309d", /* H\\u309d */ - /*"\\u30cf\\u30fd",*/ /* K\\u30fd */ + "\\u30cf\\u30fd", /* K\\u30fd */ "\\u306f\\u306f", /* HH */ "\\u306f\\u30cf", /* HK */ "\\u30cf\\u30cf", /* KK */ @@ -3379,7 +3379,7 @@ static void TestStrCollIdenticalPrefix(void) { "ab\\ud9b0\\udc70", "ab\\ud9b0\\udc71" }; - genericRulesTestWithResult(rule, test, sizeof(test)/sizeof(test[0]), UCOL_EQUAL); + genericRulesStarterWithResult(rule, test, sizeof(test)/sizeof(test[0]), UCOL_EQUAL); } /* Contractions should have all their canonically equivalent */ /* strings included */ @@ -3398,7 +3398,7 @@ static void TestContractionClosure(void) { for(i = 0; i<(sizeof(tests)/sizeof(tests[0])); i++) { - genericRulesTestWithResult(tests[i].rules, tests[i].data, tests[i].len, UCOL_EQUAL); + genericRulesStarterWithResult(tests[i].rules, tests[i].data, tests[i].len, UCOL_EQUAL); } } @@ -3560,7 +3560,7 @@ static void TestRuleOptions(void) { }, { "&[last variable] 256) return; + + /* we mark the position where the null byte should be written in advance */ + sortkey[sortkey_length-1] = 0xAA; + + /* we set the buffer size one byte higher than needed */ + sortkey_length = ucol_getSortKey(coll, ustr, ustr_length, sortkey, + sortkey_length+1); + + /* no error occurs (for me) */ + if (sortkey[sortkey_length-1] == 0xAA) { + log_err("Hit bug at first try\n"); + } + + /* we mark the position where the null byte should be written again */ + sortkey[sortkey_length-1] = 0xAA; + + /* this time we set the buffer size to the exact amount needed */ + sortkey_length = ucol_getSortKey(coll, ustr, ustr_length, sortkey, + sortkey_length); + + /* now the trailing null byte is not written */ + if (sortkey[sortkey_length-1] == 0xAA) { + log_err("Hit bug at second try\n"); + } + + ucol_close(coll); +} + +/* Regression test for Thai partial sort key problem */ +static void +TestJ5232(void) +{ + const static char *test[] = { + "\\u0e40\\u0e01\\u0e47\\u0e1a\\u0e40\\u0e25\\u0e47\\u0e21", + "\\u0e40\\u0e01\\u0e47\\u0e1a\\u0e40\\u0e25\\u0e48\\u0e21" + }; + + genericLocaleStarter("th", test, sizeof(test)/sizeof(test[0])); +} + + + #define TEST(x) addTest(root, &x, "tscoll/cmsccoll/" # x) void addMiscCollTest(TestNode** root) @@ -4686,6 +4815,11 @@ void addMiscCollTest(TestNode** root) TEST(TestBeforeTightening); /*TEST(TestMoreBefore);*/ TEST(TestTailorNULL); + TEST(TestThaiSortKey); + TEST(TestUpperFirstQuaternary); + TEST(TestJ4960); + TEST(TestJ5223); + TEST(TestJ5232); } #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/cintltst/cmsgtst.c b/icuSources/test/cintltst/cmsgtst.c index c41eee59..f35a755a 100644 --- a/icuSources/test/cintltst/cmsgtst.c +++ b/icuSources/test/cintltst/cmsgtst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -42,7 +42,7 @@ static const char* const txt_testResultStrings[] = { "Quotes ', {, a 1 {0}", "Quotes ', {, a 1 {0}", "You deposited 1 times an amount of $3,456.00 on 1/12/70", - "{2,time,full}, for 3,456, 1 is 5:46:40 AM PST and full date is Monday, January 12, 1970", + "{2,time,full}, for 3,456, 1 is 5:46:40 AM PT and full date is Monday, January 12, 1970", "{1,number,percent} for 1 is 345,600%" }; @@ -257,7 +257,7 @@ static void MessageFormatTest( void ) /*test u_formatMessage() with sample patterns */ -static void TestSampleMessageFormat() +static void TestSampleMessageFormat(void) { UChar *str; UChar *result; @@ -368,7 +368,7 @@ static void TestNewFormatAndParseAPI(void) UDate d1,d; UDateFormat *def1; UErrorCode status = U_ZERO_ERROR; - double value = 0.0; + int32_t value = 0; UChar ret[30]; UParseError parseError; UMessageFormat* fmt = NULL; @@ -432,7 +432,7 @@ static void TestNewFormatAndParseAPI(void) if(U_FAILURE(status)){ log_err("ERROR: error in parsing: test#5: %s\n", myErrorName(status)); } - if(value!=7.00 && u_strcmp(str,ret)!=0) + if(value!=7 && u_strcmp(str,ret)!=0) log_err("FAIL: Error in parseMessage on test#5 \n"); else log_verbose("PASS: parseMessage successful on test#5\n"); @@ -474,7 +474,7 @@ static void TestSampleFormatAndParseWithError(void) UDate d1,d; UDateFormat *def1; UErrorCode status = U_ZERO_ERROR; - double value = 0.0; + int32_t value = 0; UChar ret[30]; UParseError parseError; @@ -528,7 +528,7 @@ static void TestSampleFormatAndParseWithError(void) if(U_FAILURE(status)){ log_err("ERROR: error in parsing: test#5: %s\n", myErrorName(status)); } - if(value!=7.00 && u_strcmp(str,ret)!=0) + if(value!=7 && u_strcmp(str,ret)!=0) log_err("FAIL: Error in parseMessage on test#5 \n"); else log_verbose("PASS: parseMessage successful on test#5\n"); @@ -557,7 +557,7 @@ static void TestSampleFormatAndParseWithError(void) } /* Test u_formatMessage() and u_parseMessage() , format and parse sequence and round trip */ -static void TestSampleFormatAndParse() +static void TestSampleFormatAndParse(void) { UChar *result, *tzID, *str; @@ -568,7 +568,7 @@ static void TestSampleFormatAndParse() UDate d1,d; UDateFormat *def1; UErrorCode status = U_ZERO_ERROR; - double value = 0.0; + int32_t value = 0; UChar ret[30]; ctest_setTimeZone(NULL, &status); @@ -621,7 +621,7 @@ static void TestSampleFormatAndParse() if(U_FAILURE(status)){ log_err("ERROR: error in parsing: test#5: %s\n", myErrorName(status)); } - if(value!=7.00 && u_strcmp(str,ret)!=0) + if(value!=7 && u_strcmp(str,ret)!=0) log_err("FAIL: Error in parseMessage on test#5 \n"); else log_verbose("PASS: parseMessage successful on test#5\n"); @@ -650,7 +650,7 @@ static void TestSampleFormatAndParse() } /* test message format with a choice option */ -static void TestMsgFormatChoice() +static void TestMsgFormatChoice(void) { UChar* str; UErrorCode status = U_ZERO_ERROR; @@ -737,7 +737,7 @@ static void TestMsgFormatChoice() } /*test u_parseMessage() with various test patterns */ -static void TestParseMessage() +static void TestParseMessage(void) { UChar pattern[100]; UChar source[100]; @@ -998,10 +998,11 @@ static void OpenMessageFormatTest(void) umsg_toPattern(f1,result,256,&status); if(U_FAILURE(status) ){ log_err("umsg_toPattern method failed. Error: %s \n",u_errorName(status)); - } - if(u_strcmp(result,pattern)!=0){ - u_UCharsToChars(result,cresult,256); - log_err("umsg_toPattern method failed. Expected: %s Got: %s \n",PAT,cresult); + } else { + if(u_strcmp(result,pattern)!=0){ + u_UCharsToChars(result,cresult,256); + log_err("umsg_toPattern method failed. Expected: %s Got: %s \n",PAT,cresult); + } } /* umsg_format umsg_parse */ @@ -1032,6 +1033,19 @@ static void MessageLength(void) } } +static void TestErrorChaining(void) { + UErrorCode status = U_USELESS_COLLATOR_ERROR; + + umsg_open(NULL, 0, NULL, NULL, &status); + umsg_applyPattern(NULL, NULL, 0, NULL, &status); + umsg_clone(NULL, &status); + umsg_close(NULL); + + /* All of this code should have done nothing. */ + if (status != U_USELESS_COLLATOR_ERROR) { + log_err("Status got changed to %s\n", u_errorName(status)); + } +} void addMsgForTest(TestNode** root); @@ -1049,6 +1063,7 @@ void addMsgForTest(TestNode** root) addTest(root, &TestParseMessageWithValist, "tsformat/cmsgtst/TestParseMessageWithValist"); addTest(root, &TestJ904, "tsformat/cmsgtst/TestJ904"); addTest(root, &MessageLength, "tsformat/cmsgtst/MessageLength"); + addTest(root, &TestErrorChaining, "tsformat/cmsgtst/TestErrorChaining"); } #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/cintltst/cnmdptst.c b/icuSources/test/cintltst/cnmdptst.c index 5847aefc..24982323 100644 --- a/icuSources/test/cintltst/cnmdptst.c +++ b/icuSources/test/cintltst/cnmdptst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ********************************************************************/ /******************************************************************************* @@ -194,42 +194,44 @@ static void TestExponential(void) double a; UErrorCode status = U_ZERO_ERROR; #ifdef OS390 - double val[] = { 0.01234, 123456789, 1.23e75, -3.141592653e-78 }; + static const double val[] = { 0.01234, 123456789, 1.23e75, -3.141592653e-78 }; #else - double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; + static const double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; #endif - const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; - int32_t lval[] = { 0, -1, 1, 123456789 }; + static const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; + static const int32_t lval[] = { 0, -1, 1, 123456789 }; - const char* valFormat[] = + static const char* valFormat[] = { "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", - "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", - "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", - "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" + "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", + "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", + "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" }; - const char* lvalFormat[] = + static const char* lvalFormat[] = { "0E0", "-1E0", "1E0", "1.2346E8", - "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", - "0E000", "-1E000", "1E000", "123.4568E006", - "0E0", "[1E0]", "1E0", "1.235E8" + "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", + "0E000", "-1E000", "1E000", "123.4568E006", + "0E0", "[1E0]", "1E0", "1.235E8" }; - double valParse[] = + static const double valParse[] = { #ifdef OS390 0.01234, 123460000, 1.23E75, -3.1416E-78, - 0.01234, 123460000, 1.23E75, -3.1416E-78, - 0.01234, 123456800, 1.23E75, -3.141593E-78, - 0.01234, 123500000, 1.23E75, -3.142E-78 + 0.01234, 123460000, 1.23E75, -3.1416E-78, + 0.01234, 123456800, 1.23E75, -3.141593E-78, + 0.01234, 123500000, 1.23E75, -3.142E-78 #else - 0.01234, 123460000, 1.23E300, -3.1416E-271, - 0.01234, 123460000, 1.23E300, -3.1416E-271, - 0.01234, 123456800, 1.23E300, -3.141593E-271, - 0.01234, 123500000, 1.23E300, -3.142E-271 + /* We define the whole IEEE 754 number in the 4th column because + Visual Age 7 has a bug in rounding numbers. */ + 0.01234, 123460000, 1.23E300, -3.1415999999999999E-271, + 0.01234, 123460000, 1.23E300, -3.1415999999999999E-271, + 0.01234, 123456800, 1.23E300, -3.1415929999999999E-271, + 0.01234, 123500000, 1.23E300, -3.1420000000000001E-271 #endif }; - int32_t lvalParse[] = + static const int32_t lvalParse[] = { 0, -1, 1, 123460000, 0, -1, 1, 123460000, @@ -417,25 +419,31 @@ static void TestCurrency(void) { str=NULL; currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,locale[i],NULL, &status); + if(U_FAILURE(status)){ log_err("Error in the construction of number format with style currency:\n%s\n", myErrorName(status)); + } else { + lneed=0; + lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); + if(status==U_BUFFER_OVERFLOW_ERROR){ + status=U_ZERO_ERROR; + str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); + pos.field = 0; + unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); + } + + if(U_FAILURE(status)) { + log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); + } else { + u_charsToUChars(result[i], res, (int32_t)strlen(result[i])+1); + + if (u_strcmp(str, res) != 0){ + log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i], aescstrdup(str, -1), locale[i]); + } + } } - lneed=0; - lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); - if(status==U_BUFFER_OVERFLOW_ERROR){ - status=U_ZERO_ERROR; - str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); - pos.field = 0; - unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); - } - if(U_FAILURE(status)) { - log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); - } - u_charsToUChars(result[i], res, (int32_t)strlen(result[i])+1); - if (u_strcmp(str, res) != 0){ - log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i], aescstrdup(str, -1), locale[i]); - } + unum_close(currencyFmt); free(str); } @@ -459,7 +467,7 @@ static void TestCurrencyPreEuro(void) }; const char* result[]={ - "\\u20A7 2", "2 F", "\\u00A31.50", "1,50 mk", "1,50 F", "\\u20A4 2", + "\\u20A7 2", "2 F", "\\u00A31.50", "1,50 mk", "2 F", "\\u20A4 2", "1$50 Esc.", "\\u00F6S 1,50", "1,50 \\u0394\\u03C1\\u03C7", "2 \\u20A7", "1,50 FB", "\\u00a31.50", "1,50 BF", "1,50 DM", "1,50 BF", "\\u20A7 2", "1,50 F", "\\u20A7 2", "fl 1,50" @@ -475,27 +483,33 @@ static void TestCurrencyPreEuro(void) continue; } currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,curID,NULL, &status); + if(U_FAILURE(status)){ log_err("Error in the construction of number format with style currency:\n%s\n", myErrorName(status)); + } else { + lneed=0; + lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); + + if(status==U_BUFFER_OVERFLOW_ERROR){ + status=U_ZERO_ERROR; + str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); + pos.field = 0; + unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); + } + + if(U_FAILURE(status)) { + log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); + } else { + res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); + u_unescape(result[i],res,(int32_t)(strlen(result[i])+1)); + + if (u_strcmp(str, res) != 0){ + log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); + } + } } - lneed=0; - lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); - if(status==U_BUFFER_OVERFLOW_ERROR){ - status=U_ZERO_ERROR; - str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); - pos.field = 0; - unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); - } - if(U_FAILURE(status)) { - log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); - } - res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); - u_unescape(result[i],res,(int32_t)(strlen(result[i])+1)); - if (u_strcmp(str, res) != 0){ - log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); - } - + unum_close(currencyFmt); free(str); free(res); @@ -539,41 +553,47 @@ static void TestCurrencyObject(void) if(U_FAILURE(status)){ log_err("Error in the construction of number format with style currency:\n%s\n", myErrorName(status)); - } - if (*currency[i]) { - u_uastrcpy(isoCode, currency[i]); - unum_setTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, - isoCode, u_strlen(isoCode), &status); + } else { + if (*currency[i]) { + u_uastrcpy(isoCode, currency[i]); + unum_setTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, + isoCode, u_strlen(isoCode), &status); + + if(U_FAILURE(status)) { + log_err("FAIL: can't set currency code %s\n", myErrorName(status) ); + } + } + + unum_getTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, + isoCode, sizeof(isoCode), &status); + if(U_FAILURE(status)) { - log_err("FAIL: can't set currency code %s\n", myErrorName(status) ); + log_err("FAIL: can't get currency code %s\n", myErrorName(status) ); + } + + u_UCharsToChars(isoCode,cStr,u_strlen(isoCode)); + log_verbose("ISO code %s\n", cStr); + if (*currency[i] && uprv_strcmp(cStr, currency[i])) { + log_err("FAIL: currency should be %s, but is %s\n", currency[i], cStr); + } + + lneed=0; + lneed= unum_formatDouble(currencyFmt, 1234.56, NULL, lneed, NULL, &status); + if(status==U_BUFFER_OVERFLOW_ERROR){ + status=U_ZERO_ERROR; + str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); + pos.field = 0; + unum_formatDouble(currencyFmt, 1234.56, str, lneed+1, &pos, &status); + } + if(U_FAILURE(status)) { + log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); + } else { + res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); + u_unescape(result[i],res, (int32_t)(strlen(result[i])+1)); + if (u_strcmp(str, res) != 0){ + log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); + } } - } - unum_getTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, - isoCode, sizeof(isoCode), &status); - if(U_FAILURE(status)) { - log_err("FAIL: can't get currency code %s\n", myErrorName(status) ); - } - u_UCharsToChars(isoCode,cStr,u_strlen(isoCode)); - log_verbose("ISO code %s\n", cStr); - if (*currency[i] && uprv_strcmp(cStr, currency[i])) { - log_err("FAIL: currency should be %s, but is %s\n", currency[i], cStr); - } - - lneed=0; - lneed= unum_formatDouble(currencyFmt, 1234.56, NULL, lneed, NULL, &status); - if(status==U_BUFFER_OVERFLOW_ERROR){ - status=U_ZERO_ERROR; - str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); - pos.field = 0; - unum_formatDouble(currencyFmt, 1234.56, str, lneed+1, &pos, &status); - } - if(U_FAILURE(status)) { - log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); - } - res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); - u_unescape(result[i],res, (int32_t)(strlen(result[i])+1)); - if (u_strcmp(str, res) != 0){ - log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); } unum_close(currencyFmt); @@ -593,16 +613,19 @@ static void TestRounding487(void) - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ /* nnf = unum_open(UNUM_DEFAULT, NULL, &status); */ nnf = unum_open(UNUM_DEFAULT, NULL,0,"en_US",NULL, &status); + if(U_FAILURE(status)){ log_err("FAIL: failure in the construction of number format: %s\n", myErrorName(status)); + } else { + roundingTest(nnf, 0.00159999, 4, "0.0016"); + roundingTest(nnf, 0.00995, 4, "0.01"); + + roundingTest(nnf, 12.3995, 3, "12.4"); + + roundingTest(nnf, 12.4999, 0, "12"); + roundingTest(nnf, - 19.5, 0, "-20"); } - roundingTest(nnf, 0.00159999, 4, "0.0016"); - roundingTest(nnf, 0.00995, 4, "0.01"); - - roundingTest(nnf, 12.3995, 3, "12.4"); - - roundingTest(nnf, 12.4999, 0, "12"); - roundingTest(nnf, - 19.5, 0, "-20"); + unum_close(nnf); } @@ -652,19 +675,26 @@ static void TestDoubleAttribute(void) UNumberFormatAttribute attr; UNumberFormatStyle style= UNUM_DEFAULT; UNumberFormat *def; - def=unum_open(style, NULL,0,NULL,NULL, &status); + log_verbose("\nTesting get and set DoubleAttributes\n"); - attr=UNUM_ROUNDING_INCREMENT; - dvalue=unum_getDoubleAttribute(def, attr); - for (i = 0; i<9 ; i++) - { - dvalue = mydata[i]; - unum_setDoubleAttribute(def, attr, dvalue); - if(unum_getDoubleAttribute(def,attr)!=mydata[i]) - log_err("Fail: error in setting and getting double attributes for UNUM_ROUNDING_INCREMENT\n"); - else - log_verbose("Pass: setting and getting double attributes for UNUM_ROUNDING_INCREMENT works fine\n"); + def=unum_open(style, NULL,0,NULL,NULL, &status); + + if (U_FAILURE(status)) { + log_err("Fail: error creating a default number formatter\n"); + } else { + attr=UNUM_ROUNDING_INCREMENT; + dvalue=unum_getDoubleAttribute(def, attr); + for (i = 0; i<9 ; i++) + { + dvalue = mydata[i]; + unum_setDoubleAttribute(def, attr, dvalue); + if(unum_getDoubleAttribute(def,attr)!=mydata[i]) + log_err("Fail: error in setting and getting double attributes for UNUM_ROUNDING_INCREMENT\n"); + else + log_verbose("Pass: setting and getting double attributes for UNUM_ROUNDING_INCREMENT works fine\n"); + } } + unum_close(def); } diff --git a/icuSources/test/cintltst/cnumtst.c b/icuSources/test/cintltst/cnumtst.c index c5d8598a..cc366b9c 100644 --- a/icuSources/test/cintltst/cnumtst.c +++ b/icuSources/test/cintltst/cnumtst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -44,6 +44,7 @@ void addNumForTest(TestNode** root) TESTCASE(TestNumberFormatPadding); TESTCASE(TestInt64Format); TESTCASE(TestNonExistentCurrency); + TESTCASE(TestCurrencyRegression); TESTCASE(TestRBNFFormat); } @@ -96,7 +97,7 @@ static void TestNumberFormat() int32_t resultlength; int32_t resultlengthneeded; int32_t parsepos; - double d1; + double d1 = -1.0; int32_t l1; double d = -10456.37; double a = 1234.56, a1 = 1235.0; @@ -119,8 +120,13 @@ static void TestNumberFormat() status = U_ZERO_ERROR; log_verbose("Testing unum_open() with default style and locale\n"); def=unum_open(style, NULL,0,NULL, NULL,&status); + + /* Might as well pack it in now if we can't even get a default NumberFormat... */ if(U_FAILURE(status)) - log_err("Error in creating NumberFormat default using unum_open(): %s\n", myErrorName(status)); + { + log_err("Error in creating default NumberFormat using unum_open(): %s\n", myErrorName(status)); + return; + } log_verbose("\nTesting unum_open() with french locale and default style(decimal)\n"); fr=unum_open(style,NULL,0, "fr_FR",NULL, &status); @@ -242,7 +248,7 @@ free(result); { log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status)); } - if(u_strcmp(result, temp1)==0) + if(result && u_strcmp(result, temp1)==0) log_verbose("Pass: Number Formatting using unum_formatDouble() Successful\n"); else log_err("FAIL: Error in number formatting using unum_formatDouble()\n"); @@ -256,10 +262,14 @@ free(result); /* Testing unum_parse() and unum_parseDouble() */ log_verbose("\nTesting unum_parseDouble()\n"); /* for (i = 0; i < 100000; i++)*/ + if (result != NULL) { parsepos=0; d1=unum_parseDouble(cur_def, result, u_strlen(result), &parsepos, &status); } + else { + log_err("result is NULL\n"); + } if(U_FAILURE(status)) { log_err("parse failed. The error is : %s\n", myErrorName(status)); @@ -299,26 +309,31 @@ free(result); if (pos2.beginIndex == 1 && pos2.endIndex == 6) { log_verbose("Pass: Complete number formatting using unum_format() successful\n"); } else { - log_err("Fail: Error in complete number Formatting using unum_formatDouble()\nGot: b=%d end=%d\nExpected: b=1 end=6", + log_err("Fail: Error in complete number Formatting using unum_formatDouble()\nGot: b=%d end=%d\nExpected: b=1 end=6\n", pos1.beginIndex, pos1.endIndex); } log_verbose("\nTesting unum_parseDoubleCurrency\n"); parsepos=0; - d1=unum_parseDoubleCurrency(cur_def, result, u_strlen(result), &parsepos, temp2, &status); - if (U_FAILURE(status)) { - log_err("parse failed. The error is : %s\n", myErrorName(status)); - } - /* Note: a==1234.56, but on parse expect a1=1235.0 */ - if (d1!=a1) { - log_err("Fail: Error in parsing currency, got %f, expected %f\n", d1, a1); - } else { - log_verbose("Pass: parsed currency ammount successfully\n"); + if (result == NULL) { + log_err("result is NULL\n"); } - if (u_strcmp(temp2, temp)==0) { - log_verbose("Pass: parsed correct currency\n"); - } else { - log_err("Fail: parsed incorrect currency\n"); + else { + d1=unum_parseDoubleCurrency(cur_def, result, u_strlen(result), &parsepos, temp2, &status); + if (U_FAILURE(status)) { + log_err("parse failed. The error is : %s\n", myErrorName(status)); + } + /* Note: a==1234.56, but on parse expect a1=1235.0 */ + if (d1!=a1) { + log_err("Fail: Error in parsing currency, got %f, expected %f\n", d1, a1); + } else { + log_verbose("Pass: parsed currency ammount successfully\n"); + } + if (u_strcmp(temp2, temp)==0) { + log_verbose("Pass: parsed correct currency\n"); + } else { + log_err("Fail: parsed incorrect currency\n"); + } } free(result); @@ -1281,4 +1296,61 @@ static void TestRBNFFormat() { } } +static void TestCurrencyRegression(void) { +/* + I've found a case where unum_parseDoubleCurrency is not doing what I +expect. The value I pass in is $1234567890q123460000.00 and this +returns with a status of zero error & a parse pos of 22 (I would +expect a parse error at position 11). + +I stepped into DecimalFormat::subparse() and it looks like it parses +the first 10 digits and then stops parsing at the q but doesn't set an +error. Then later in DecimalFormat::parse() the value gets crammed +into a long (which greatly truncates the value). + +This is very problematic for me 'cause I try to remove chars that are +invalid but this allows my users to enter bad chars and truncates +their data! +*/ + + UChar buf[1024]; + UChar currency[8]; + char acurrency[16]; + double d; + UNumberFormat *cur; + int32_t pos; + UErrorCode status = U_ZERO_ERROR; + const int32_t expected = 11; + + currency[0]=0; + u_uastrcpy(buf, "$1234567890q643210000.00"); + cur = unum_open(UNUM_CURRENCY, NULL,0,"en_US", NULL, &status); + + if(U_FAILURE(status)) { + log_err("unum_open failed: %s\n", u_errorName(status)); + return; + } + + status = U_ZERO_ERROR; /* so we can test it later. */ + pos = 0; + + d = unum_parseDoubleCurrency(cur, + buf, + -1, + &pos, /* 0 = start */ + currency, + &status); + + u_austrcpy(acurrency, currency); + + if(U_FAILURE(status) || (pos != expected)) { + log_err("unum_parseDoubleCurrency should have failed with pos %d, but gave: value %.9f, err %s, pos=%d, currency [%s]\n", + expected, d, u_errorName(status), pos, acurrency); + } else { + log_verbose("unum_parseDoubleCurrency failed, value %.9f err %s, pos %d, currency [%s]\n", d, u_errorName(status), pos, acurrency); + } + + unum_close(cur); +} + #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/cintltst/cnumtst.h b/icuSources/test/cintltst/cnumtst.h index 9f7aae2f..93851dc7 100644 --- a/icuSources/test/cintltst/cnumtst.h +++ b/icuSources/test/cintltst/cnumtst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -50,6 +50,12 @@ static void TestNonExistentCurrency(void); **/ static void TestRBNFFormat(void); +/** + * Test some Currency stuff + **/ +static void TestCurrencyRegression(void); + + #endif /* #if !UCONFIG_NO_FORMATTING */ #endif diff --git a/icuSources/test/cintltst/cregrtst.c b/icuSources/test/cintltst/cregrtst.c deleted file mode 100644 index 06c4f0fd..00000000 --- a/icuSources/test/cintltst/cregrtst.c +++ /dev/null @@ -1,1804 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ -/******************************************************************************** -* -* File CREGRTST.C -* -* Modification History: -* Name Description -* Madhu Katragadda Ported for C API, added extra functions and tests -********************************************************************************* -*/ - -/* C FUNCTIONALITY AND REGRESSION TEST FOR BREAKITERATOR */ - -#include - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/uloc.h" -#include "unicode/ubrk.h" -#include "unicode/uchar.h" -#include "unicode/ustring.h" -#include "cintltst.h" -#include "cregrtst.h" -#include "ccolltst.h" -#include "cstring.h" - -/* -------------------------------------------------------------------------- */ -/** - * "Vector" structure for holding test tables - * (this strucure is actually a linked list, but we use the name and API of the - * java.util.Vector class to keep as much of our test code as possible the same.) - */ -struct Vector1 { - UChar *text; - struct Vector1 *link; -}; -typedef struct Vector1 Vector; - -void addElement(Vector *q, const char* string) -{ - - Vector *p; - - p=(Vector*)malloc(sizeof(Vector)); - p->text=(UChar*)malloc(sizeof(UChar) * (uprv_strlen(string)+1)); - u_uastrcpy(p->text, string); - p->link=NULL; - while(q->link!=NULL) - q=q->link; - q->link=p; - -} -UChar* addElement2(Vector *q, const UChar* string) -{ - Vector *p; - - p=(Vector*)malloc(sizeof(Vector)); - p->text=(UChar*)malloc(sizeof(UChar) * (u_strlen(string)+1)); - u_strcpy(p->text, string); - p->link=NULL; - while(q->link!=NULL) - q=q->link; - q->link=p; - - return (UChar *)string; - -} - -void cleanupVector(Vector *q) { - Vector *p; - while(q != NULL) { - p = q->link; - free(q->text); - free(q); - q = p; - } -} - -int32_t Count(Vector *q) -{ - int32_t c=0; - while(q!=NULL){ - q=q->link; - c++; - } - return c; -} - -UChar* elementAt(Vector *q, int32_t pos) -{ - int32_t i=0; - if(q==NULL) - return NULL; - for(i=0;ilink; - return (q->text); -} -/* Just to make it easier to use with UChar array.*/ - -UChar* UCharToUCharArray(const UChar uchar) -{ - UChar *buffer; - UChar *alias; - buffer=(UChar*)malloc(sizeof(uchar) * 2); - alias=buffer; - *alias=uchar; - alias++; - *alias=0x0000; - return buffer; -} - - -UChar* extractBetween(int32_t start, int32_t end, UChar* text) -{ - UChar* result; - UChar* temp; - temp=(UChar*)malloc(sizeof(UChar) * ((u_strlen(text)-start)+1)); - result=(UChar*)malloc(sizeof(UChar) * ((end-start)+1)); - u_strcpy(temp, &text[start]); - u_strncpy(result, temp, end-start); - result[end-start] = 0; - free(temp); - return result; -} -/* -------------------------------------------------------------------------------------- */ -/** - * BrealIterator Regression Test is medium top level test class for everything in the C BreakIterator API - * (ubrk.h and ubrk.c). - */ - - - -const UChar cannedTestArray[] = { - 0x0001, 0x0002, 0x0003, 0x0004, 0x0020, 0x0021, 0x005c, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0028, 0x0029, - 0x002b, 0x002d, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x003c, 0x003d, 0x003e, 0x0041, 0x0042, 0x0043, 0x0044, - 0x0045, 0x005B, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x007b, 0x007d, 0x007c, - 0x002c, 0x00a0, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00ab, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b2, 0x00b3, 0x00b4, 0x00b9, 0x00bb, 0x00bc, 0x00bd, 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x0300, - 0x0301, 0x0302, 0x0303, 0x0304, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x0903, 0x093e, 0x093f, 0x0940, 0x0949, - 0x0f3a, 0x0f3b, 0x2000, 0x2001, 0x2002, 0x200c, 0x200d, 0x200e, 0x200f, 0x2010, 0x2011, 0x2012, 0x2028, 0x2029, - 0x202a, 0x203e, 0x203f, 0x2040, 0x20dd, 0x20de, 0x20df, 0x20e0, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x0000 -}; - - - - -/*--------------------------------------------- */ -/* setup methods */ -/*--------------------------------------------- */ - -void AllocateTextBoundary() -{ - - cannedTestChars=(UChar*)malloc(sizeof(UChar) * (u_strlen(cannedTestArray) + 10)); - u_uastrcpy(cannedTestChars,""); - u_uastrcpy(cannedTestChars,"0x0000"); - u_strcat(cannedTestChars, cannedTestArray); - -} - -void FreeTextBoundary() -{ - free(cannedTestChars); -} - -/*Add Word Data*/ -void addTestWordData() -{ - int32_t elems; - - - wordSelectionData=(Vector*)malloc(sizeof(Vector)); - wordSelectionData->text=(UChar*)malloc(sizeof(UChar) * 6); - u_uastrcpy(wordSelectionData->text, "12,34"); - wordSelectionData->link=NULL; - - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, UCharToUCharArray((UChar)(0x00A2)))); /*cent sign */ - free(addElement2(wordSelectionData, UCharToUCharArray((UChar)(0x00A3)))); /*pound sign */ - free(addElement2(wordSelectionData, UCharToUCharArray((UChar)(0x00A4)))); /*currency sign */ - free(addElement2(wordSelectionData, UCharToUCharArray((UChar)(0x00A5)))); /*yen sign */ - addElement(wordSelectionData, "alpha-beta-gamma"); - addElement(wordSelectionData, "."); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "Badges"); - addElement(wordSelectionData, "?"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "BADGES"); - addElement(wordSelectionData, "!"); - addElement(wordSelectionData, "?"); - addElement(wordSelectionData, "!"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "We"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "don't"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "need"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "no"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "STINKING"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "BADGES"); - addElement(wordSelectionData, "!"); - addElement(wordSelectionData, "!"); - addElement(wordSelectionData, "!"); - - addElement(wordSelectionData, "012.566,5"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "123.3434,900"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "1000,233,456.000"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "1,23.322%"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "123.1222"); - - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "$123,000.20"); - - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "179.01%"); - - addElement(wordSelectionData, "Hello"); - addElement(wordSelectionData, ","); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "how"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "are"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "you"); - addElement(wordSelectionData, " "); - addElement(wordSelectionData, "X"); - addElement(wordSelectionData, " "); - - addElement(wordSelectionData, "Now"); - addElement(wordSelectionData, "\r"); - addElement(wordSelectionData, "is"); - addElement(wordSelectionData, "\n"); - addElement(wordSelectionData, "the"); - addElement(wordSelectionData, "\r\n"); - addElement(wordSelectionData, "time"); - addElement(wordSelectionData, "\n"); - addElement(wordSelectionData, "\r"); - addElement(wordSelectionData, "for"); - addElement(wordSelectionData, "\r"); - addElement(wordSelectionData, "\r"); - addElement(wordSelectionData, "all"); - addElement(wordSelectionData, " "); - - /* to test for bug #4097779 */ - free(addElement2(wordSelectionData, CharsToUChars("aa\\u0300a"))); - addElement(wordSelectionData, " "); - - /* to test for bug #4098467 - What follows is a string of Korean characters (I found it in the Yellow Pages - ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed - it correctly), first as precomposed syllables, and then as conjoining jamo. - Both sequences should be semantically identical and break the same way. - precomposed syllables... */ - free(addElement2(wordSelectionData, CharsToUChars("\\uc0c1\\ud56d"))); - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, CharsToUChars("\\ud55c\\uc778"))); - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, CharsToUChars("\\uc5f0\\ud569"))); - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, CharsToUChars("\\uc7a5\\ub85c\\uad50\\ud68c"))); - addElement(wordSelectionData, " "); - /* conjoining jamo... */ - free(addElement2(wordSelectionData, CharsToUChars("\\u1109\\u1161\\u11bc\\u1112\\u1161\\u11bc"))); - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, CharsToUChars("\\u1112\\u1161\\u11ab\\u110b\\u1175\\u11ab"))); - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, CharsToUChars("\\u110b\\u1167\\u11ab\\u1112\\u1161\\u11b8"))); - addElement(wordSelectionData, " "); - free(addElement2(wordSelectionData, CharsToUChars("\\u110c\\u1161\\u11bc\\u1105\\u1169\\u1100\\u116d\\u1112\\u116c"))); - addElement(wordSelectionData, " "); - - /* this is a test for bug #4117554: the ideographic iteration mark (U+3005) should - count as a Kanji character for the purposes of word breaking */ - addElement(wordSelectionData, "abc"); - free(addElement2(wordSelectionData, CharsToUChars("\\u4e01\\u4e02\\u3005\\u4e03\\u4e03"))); - addElement(wordSelectionData, "abc"); - - elems= Count(wordSelectionData); - log_verbose("In word, the no: of words are: %d\n", elems); - testWordText = createTestData(wordSelectionData, elems); - - -} - -const UChar kParagraphSeparator = 0x2029; -const UChar kLineSeparator = 0x2028; - -/** - * Add Sentence Data - */ -void addTestSentenceData() -{ - int32_t elems; - UChar temp[100]; - UChar *td; - - sentenceSelectionData=(Vector*)malloc(sizeof(Vector)); - sentenceSelectionData->text=(UChar*)malloc(sizeof(UChar) * (strlen("This is a simple sample sentence. ")+1)); - u_uastrcpy(sentenceSelectionData->text, "This is a simple sample sentence. "); - sentenceSelectionData->link=NULL; - - /* addElement(sentenceSelectionData, "This is a simple sample sentence. "); */ - addElement(sentenceSelectionData, "(This is it.) "); - addElement(sentenceSelectionData, "This is a simple sample sentence. "); - addElement(sentenceSelectionData, "\"This isn\'t it.\" "); - addElement(sentenceSelectionData, "Hi! "); - addElement(sentenceSelectionData, "This is a simple sample sentence. "); - addElement(sentenceSelectionData, "It does not have to make any sense as you can see. "); - addElement(sentenceSelectionData, "Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. "); - addElement(sentenceSelectionData, "Che la dritta via aveo smarrita. "); - addElement(sentenceSelectionData, "He said, that I said, that you said!! "); - - u_uastrcpy(temp, "Don't rock the boat"); - td = UCharToUCharArray(kParagraphSeparator); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - addElement(sentenceSelectionData, "Because I am the daddy, that is why. "); - addElement(sentenceSelectionData, "Not on my time (el timo.)! "); - - u_uastrcpy(temp, "So what!!"); - td = UCharToUCharArray(kParagraphSeparator); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - addElement(sentenceSelectionData, "\"But now,\" he said, \"I know!\" "); - addElement(sentenceSelectionData, "Harris thumbed down several, including \"Away We Go\" (which became the huge success Oklahoma!). "); - addElement(sentenceSelectionData, "One species, B. anthracis, is highly virulent.\n"); - addElement(sentenceSelectionData, "Wolf said about Sounder:\"Beautifully thought-out and directed.\" "); - addElement(sentenceSelectionData, "Have you ever said, \"This is where\tI shall live\"? "); - addElement(sentenceSelectionData, "He answered, \"You may not!\" "); - addElement(sentenceSelectionData, "Another popular saying is: \"How do you do?\". "); - addElement(sentenceSelectionData, "Yet another popular saying is: \'I\'m fine thanks.\' "); - addElement(sentenceSelectionData, "What is the proper use of the abbreviation pp.? "); - addElement(sentenceSelectionData, "Yes, I am definatelly 12\" tall!!"); - - /* test for bug #4113835: \n and \r count as spaces, not as paragraph breaks */ - u_uastrcpy(temp, "Now\ris\nthe\r\ntime\n\rfor\r\rall"); - td = UCharToUCharArray(kParagraphSeparator); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - /* test for bug #4117554: Treat fullwidth variants of .!? the same as their - normal counterparts */ - free(addElement2(sentenceSelectionData, CharsToUChars("I know I'm right\\uff0e "))); - free(addElement2(sentenceSelectionData, CharsToUChars("Right\\uff1f "))); - free(addElement2(sentenceSelectionData, CharsToUChars("Right\\uff01 "))); - - /* test for bug #4117554: Break sentence between a sentence terminator and - opening punctuation */ - addElement(sentenceSelectionData, "no?"); - u_uastrcpy(temp, "(yes)"); - td = CharsToUChars("\\u2029"); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - /* test for bug #4158381: Don't break sentence after period if it isn't - followed by a space */ - addElement(sentenceSelectionData, "Test Flags.Flag class. "); - u_uastrcpy(temp, "Another test."); - td = CharsToUChars("\\u2029"); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - /* test for bug #4158381: No breaks when there are no terminators around */ - addElement(sentenceSelectionData, "

    Provides a set of "lightweight" (all-javaTM language) components that, to the maximum degree possible, work the same on all platforms. "); - u_uastrcpy(temp, "Another test."); - td = CharsToUChars("\\u2029"); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - /* test for bug #4143071: Make sure sentences that end with digits work right */ - addElement(sentenceSelectionData, "Today is the 27th of May, 1998. "); - addElement(sentenceSelectionData, "Tomorrow with be 28 May 1998. "); - u_uastrcpy(temp, "The day after will be the 30th."); - td = CharsToUChars("\\u2029"); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - /* test for bug #4152416: Make sure sentences ending with a capital - letter are treated correctly */ - addElement(sentenceSelectionData, "The type of all primitive boolean values accessed in the target VM. "); - u_uastrcpy(temp, "Calls to xxx will return an implementor of this interface."); - td = CharsToUChars("\\u2029"); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - - /* test for bug #4152117: Make sure sentence breaking is handling - punctuation correctly */ - addElement(sentenceSelectionData, "Constructs a randomly generated BigInteger, uniformly distributed over the range 0 to (2numBits - 1), inclusive. "); - addElement(sentenceSelectionData, "The uniformity of the distribution assumes that a fair source of random bits is provided in rnd. "); - u_uastrcpy(temp, "Note that this constructor always constructs a non-negative BigInteger."); - td = CharsToUChars("\\u2029"); - u_strcat(temp, td); - free(td); - addElement2(sentenceSelectionData, temp); - - elems = Count(sentenceSelectionData); - log_verbose("In sentence: the no: of sentences are %d\n", elems); - testSentenceText = createTestData(sentenceSelectionData, elems); - - -} - -/** - * Add Line Data - */ - -void addTestLineData() -{ - int32_t elems; - - lineSelectionData=(Vector*)malloc(sizeof(Vector)); - lineSelectionData->text=(UChar*)malloc(sizeof(UChar) * 7); - u_uastrcpy(lineSelectionData->text, "Multi-"); - lineSelectionData->link=NULL; - - /* lineSelectionData->addElement("Multi-"); */ - addElement(lineSelectionData, "Level "); - addElement(lineSelectionData, "example "); - addElement(lineSelectionData, "of "); - addElement(lineSelectionData, "a "); - addElement(lineSelectionData, "semi-"); - addElement(lineSelectionData, "idiotic "); - addElement(lineSelectionData, "non-"); - addElement(lineSelectionData, "sensical "); - addElement(lineSelectionData, "(non-"); - addElement(lineSelectionData, "important) "); - addElement(lineSelectionData, "sentence. "); - - addElement(lineSelectionData, "Hi "); - addElement(lineSelectionData, "Hello "); - addElement(lineSelectionData, "How\n"); - addElement(lineSelectionData, "are\r"); - - - free(addElement2(lineSelectionData, CharsToUChars("you\\u2028"))); /* lineSeperator */ - - addElement(lineSelectionData, "fine.\t"); - addElement(lineSelectionData, "good. "); - - addElement(lineSelectionData, "Now\r"); - addElement(lineSelectionData, "is\n"); - addElement(lineSelectionData, "the\r\n"); - addElement(lineSelectionData, "time\n"); - addElement(lineSelectionData, "\r"); - addElement(lineSelectionData, "for\r"); - addElement(lineSelectionData, "\r"); - addElement(lineSelectionData, "all "); - - /* to test for bug #4068133 */ - free(addElement2(lineSelectionData, CharsToUChars("\\u96f6"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u4e00\\u3002"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u4e8c\\u3001"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u4e09\\u3002\\u3001"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u56db\\u3001\\u3002\\u3001"))); - - - free(addElement2(lineSelectionData, CharsToUChars("\\u4e94,"))); - - free(addElement2(lineSelectionData, CharsToUChars("\\u516d."))); - - free(addElement2(lineSelectionData, CharsToUChars("\\u4e03.\\u3001,\\u3002"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u516b"))); - - /* to test for bug #4086052 */ - free(addElement2(lineSelectionData, CharsToUChars("foo\\u00a0bar "))); - - /* to test for bug #4097920 */ - addElement(lineSelectionData, "dog,"); - addElement(lineSelectionData, "cat,"); - addElement(lineSelectionData, "mouse "); - addElement(lineSelectionData, "(one)"); - addElement(lineSelectionData, "(two)\n"); - - /* to test for bug #4035266 */ - addElement(lineSelectionData, "The "); - addElement(lineSelectionData, "balance "); - addElement(lineSelectionData, "is "); - addElement(lineSelectionData, "$-23,456.78, "); - addElement(lineSelectionData, "not "); - addElement(lineSelectionData, "-$32,456.78!\n"); - - /* to test for bug #4098467 - What follows is a string of Korean characters (I found it in the Yellow Pages - ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed - it correctly), first as precomposed syllables, and then as conjoining jamo. - Both sequences should be semantically identical and break the same way. - precomposed syllables... */ - free(addElement2(lineSelectionData, CharsToUChars("\\uc0c1\\ud56d "))); - free(addElement2(lineSelectionData, CharsToUChars("\\ud55c\\uc778 "))); - free(addElement2(lineSelectionData, CharsToUChars("\\uc5f0\\ud569 "))); - free(addElement2(lineSelectionData, CharsToUChars("\\uc7a5\\ub85c\\uad50\\ud68c "))); - /* conjoining jamo... */ - free(addElement2(lineSelectionData, CharsToUChars("\\u1109\\u1161\\u11bc\\u1112\\u1161\\u11bc "))); - free(addElement2(lineSelectionData, CharsToUChars("\\u1112\\u1161\\u11ab\\u110b\\u1175\\u11ab "))); - free(addElement2(lineSelectionData, CharsToUChars("\\u110b\\u1167\\u11ab\\u1112\\u1161\\u11b8 "))); - free(addElement2(lineSelectionData, CharsToUChars("\\u110c\\u1161\\u11bc\\u1105\\u1169\\u1100\\u116d\\u1112\\u116c"))); - - /* to test for bug #4117554: Fullwidth .!? should be treated as postJwrd */ - free(addElement2(lineSelectionData, CharsToUChars("\\u4e01\\uff0e"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u4e02\\uff01"))); - free(addElement2(lineSelectionData, CharsToUChars("\\u4e03\\uff1f"))); - - elems = Count(lineSelectionData); - log_verbose("In line: the no: of lines are %d\n", elems); - testLineText = createTestData(lineSelectionData, elems); - - -} - -/* - -const UChar* graveS = "S" + (UniChar)0x0300; -const UChar* acuteBelowI = "i" + UCharToUCharArray(0x0317); -const UChar* acuteE = "e" + UCharToUCharArray(0x0301); -const UChar* circumflexA = "a" + UCharToUCharArray(0x0302); -const UChar* tildeE = "e" + UCharToUCharArray(0x0303); -*/ - -/** - * Add Character Data - */ -void addTestCharacterData() -{ - int32_t elems; - UChar temp[10]; - UChar *td; - - characterSelectionData=(Vector*)malloc(sizeof(Vector)); - characterSelectionData->text=(UChar*)malloc(sizeof(UChar) * 2); - u_uastrcpy(characterSelectionData->text, "B"); - characterSelectionData->link=NULL; - - u_uastrcpy(temp, "S"); - td = UCharToUCharArray(0x0317); - u_strcat(temp, td); - free(td); - /*u_strcat(temp, UCharToUCharArray(0x0317));*/ - addElement2(characterSelectionData, temp); /* graveS */ - - u_uastrcpy(temp, "i"); - td = UCharToUCharArray(0x0301); - u_strcat(temp, td); - free(td); - /*u_strcat(temp, UCharToUCharArray(0x0301));*/ - addElement2(characterSelectionData, temp); /* acuteBelowI */ - - addElement(characterSelectionData, "m"); - addElement(characterSelectionData, "p"); - addElement(characterSelectionData, "l"); - - u_uastrcpy(temp, "e"); - td = UCharToUCharArray(0x0301); - u_strcat(temp, td); - free(td); - addElement2(characterSelectionData, temp);/* acuteE */ - - addElement(characterSelectionData, " "); - addElement(characterSelectionData, "s"); - - u_uastrcpy(temp, "a"); - td = UCharToUCharArray(0x0302); - u_strcat(temp, td); - free(td); - addElement2(characterSelectionData, temp);/* circumflexA */ - - addElement(characterSelectionData, "m"); - addElement(characterSelectionData, "p"); - addElement(characterSelectionData, "l"); - - u_uastrcpy(temp, "e"); - td = UCharToUCharArray(0x0303); - u_strcat(temp, td); - free(td); - addElement2(characterSelectionData, temp); /* tildeE */ - - addElement(characterSelectionData, "."); - addElement(characterSelectionData, "w"); - - u_uastrcpy(temp, "a"); - td = UCharToUCharArray(0x0302); - u_strcat(temp, td); - free(td); - addElement2(characterSelectionData, temp);/* circumflexA */ - - addElement(characterSelectionData, "w"); - addElement(characterSelectionData, "a"); - addElement(characterSelectionData, "f"); - addElement(characterSelectionData, "q"); - addElement(characterSelectionData, "\n"); - addElement(characterSelectionData, "\r"); - addElement(characterSelectionData, "\r\n"); - addElement(characterSelectionData, "\n"); - addElement(characterSelectionData, "E"); - /* to test for bug #4098467 - What follows is a string of Korean characters (I found it in the Yellow Pages - ad for the Korean Presbyterian Church of San Francisco, and I hope I transcribed - it correctly), first as precomposed syllables, and then as conjoining jamo. - Both sequences should be semantically identical and break the same way. - precomposed syllables... */ - free(addElement2(characterSelectionData, CharsToUChars("\\uc0c1"))); - free(addElement2(characterSelectionData, CharsToUChars("\\ud56d"))); - addElement(characterSelectionData, " "); - free(addElement2(characterSelectionData, CharsToUChars("\\ud55c"))); - free(addElement2(characterSelectionData, CharsToUChars("\\uc778"))); - addElement(characterSelectionData, " "); - free(addElement2(characterSelectionData, CharsToUChars("\\uc5f0"))); - free(addElement2(characterSelectionData, CharsToUChars("\\ud569"))); - addElement(characterSelectionData, " "); - free(addElement2(characterSelectionData, CharsToUChars("\\uc7a5"))); - free(addElement2(characterSelectionData, CharsToUChars("\\ub85c"))); - free(addElement2(characterSelectionData, CharsToUChars("\\uad50"))); - free(addElement2(characterSelectionData, CharsToUChars("\\ud68c"))); - addElement(characterSelectionData, " "); - /* conjoining jamo... */ - free(addElement2(characterSelectionData, CharsToUChars("\\u1109\\u1161\\u11bc"))); - free(addElement2(characterSelectionData, CharsToUChars("\\u1112\\u1161\\u11bc"))); - addElement(characterSelectionData, " "); - free(addElement2(characterSelectionData, CharsToUChars("\\u1112\\u1161\\u11ab"))); - free(addElement2(characterSelectionData, CharsToUChars("\\u110b\\u1175\\u11ab"))); - addElement(characterSelectionData, " "); - free(addElement2(characterSelectionData, CharsToUChars("\\u110b\\u1167\\u11ab"))); - free(addElement2(characterSelectionData, CharsToUChars("\\u1112\\u1161\\u11b8"))); - addElement(characterSelectionData, " "); - free(addElement2(characterSelectionData, CharsToUChars("\\u110c\\u1161\\u11bc"))); - free(addElement2(characterSelectionData, CharsToUChars("\\u1105\\u1169"))); - free(addElement2(characterSelectionData, CharsToUChars("\\u1100\\u116d"))); - free(addElement2(characterSelectionData, CharsToUChars("\\u1112\\u116c"))); - - elems = Count(characterSelectionData); - log_verbose("In character: the no: of characters are %d", elems); - testCharacterText = createTestData(characterSelectionData, elems); -} - -UChar* createTestData(Vector *select, int32_t e) -{ - int32_t i, len; - UChar* result; - result=(UChar*)malloc(sizeof(UChar) * 2); - u_uastrcpy(result, ""); - i=0; - while (i= 75) - return; - } - } - } - } - - /* it does break after hyphens (unless they're followed by a digit, a non-spacing mark, - a currency symbol, a non-breaking space, or a line or paragraph separator) */ - ustr = CharsToUChars("-\\u00ad\\u2010\\u2012\\u2013\\u2014"); - u_strcpy(dashes, ustr); - free(ustr); - - for (i = 0; i < sLen; i++) { - work[0] = s[i]; - for (j = 0; j < u_strlen(dashes); j++) { - work[1] = dashes[j]; - for (k = 0; k < sLen; k++) { - c = s[k]; - if (u_charType(c) == U_DECIMAL_DIGIT_NUMBER || - u_charType(c) == U_OTHER_NUMBER || - u_charType(c) == U_NON_SPACING_MARK || - u_charType(c) == U_ENCLOSING_MARK || - u_charType(c) == U_CURRENCY_SYMBOL || - u_charType(c) == U_SPACE_SEPARATOR || - u_charType(c) == U_DASH_PUNCTUATION || - u_charType(c) == U_CONTROL_CHAR || - u_charType(c) == U_FORMAT_CHAR || - c == '\n' || c == '\r' || c == 0x2028 || c == 0x2029 || - c == 0x0003 || c == 0x00a0 || c == 0x2007 || c == 0x2011 || - c == 0xfeff) - continue; - work[2] = c; - ubrk_setText(e, work, u_strlen(work), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in setting text on the word break Iterator in testLineInvaiants:\n %s \n", myErrorName(status)); - return; - } - saw2 = FALSE; - for (l = ubrk_first(e); l != UBRK_DONE; l = ubrk_next(e)) - if (l == 2) - saw2 = TRUE; - if (!saw2) { - log_err("Didn't get break between U+%s and U+%s\n", austrdup(UCharToUCharArray(work[1])), - austrdup(UCharToUCharArray(work[2])) ); - errorCount++; - if (errorCount >= 75) - return; - } - } - } - } - ubrk_close(e); - free(s); -FreeTextBoundary(); -} -/*--------------------------------------------- - CharacterBreak tests - --------------------------------------------- */ - -void TestForwardCharacterSelection() -{ - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *e; - addTestCharacterData(); - e = ubrk_open(UBRK_CHARACTER, "en_US", testCharacterText, u_strlen(testCharacterText), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - log_verbose("Testing forward character selection.....\n"); - doForwardSelectionTest(e, testCharacterText, characterSelectionData); - ubrk_close(e); - cleanupVector(characterSelectionData); - free(testCharacterText); - /*free(characterSelectionData);*/ -} - -void TestFirstCharacterSelection() -{ - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *e; - addTestCharacterData(); - e = ubrk_open(UBRK_CHARACTER, "en_US", testCharacterText, u_strlen(testCharacterText), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - log_verbose("Testing first character selection.....\n"); - doFirstSelectionTest(e, testCharacterText, characterSelectionData); - ubrk_close(e); - cleanupVector(characterSelectionData); - free(testCharacterText); - /*free(characterSelectionData);*/ -} - -void TestLastCharacterSelection() -{ - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *e; - addTestCharacterData(); - e = ubrk_open(UBRK_CHARACTER, "en_US", testCharacterText, u_strlen(testCharacterText), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - log_verbose("Testing last character selection.....\n"); - doLastSelectionTest(e, testCharacterText, characterSelectionData); - ubrk_close(e); - cleanupVector(characterSelectionData); - free(testCharacterText); - /*free(characterSelectionData);*/ -} - -void TestBackwardCharacterSelection() -{ - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *e; - addTestCharacterData(); - e = ubrk_open(UBRK_CHARACTER, "en_US", testCharacterText, u_strlen(testCharacterText), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - log_verbose("Testing backward character selection.....\n"); - doBackwardSelectionTest(e, testCharacterText, characterSelectionData); - ubrk_close(e); - cleanupVector(characterSelectionData); - free(testCharacterText); - /*free(characterSelectionData);*/ -} - -void TestForwardCharacterIndexSelection() -{ - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *e; - addTestCharacterData(); - e = ubrk_open(UBRK_CHARACTER, "en_US", testCharacterText, u_strlen(testCharacterText), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - log_verbose("Testing forward index character selection.....\n"); - doForwardIndexSelectionTest(e, testCharacterText, characterSelectionData); - ubrk_close(e); - cleanupVector(characterSelectionData); - free(testCharacterText); - /*free(characterSelectionData);*/ -} - -void TestBackwardCharacterIndexSelection() -{ - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *e; - addTestCharacterData(); - e = ubrk_open(UBRK_CHARACTER, "en_US", testCharacterText, u_strlen(testCharacterText), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - log_verbose("Testing backward character index selection.....\n"); - doBackwardSelectionTest(e, testCharacterText, characterSelectionData); - ubrk_close(e); - cleanupVector(characterSelectionData); - free(testCharacterText); - /*free(characterSelectionData);*/ -} - -void TestCharacterInvariants() -{ - UChar *s; - UChar *tempStr; - -AllocateTextBoundary(); - s=(UChar*)malloc(sizeof(UChar) * (u_strlen(cannedTestChars) + 15)); - u_strcpy(s, cannedTestChars); - tempStr = CharsToUChars("\\u1100\\u1101\\u1102\\u1160\\u1161\\u1162\\u11a8\\u11a9\\u11aa"); - u_strcat(s, tempStr); - free(tempStr); - log_verbose("Testing character break invariant.....\n"); - doBreakInvariantTest(UBRK_CHARACTER, s); - u_strcpy(s, cannedTestChars); - tempStr = CharsToUChars("\\u1100\\u1101\\u1102\\u1160\\u1161\\u1162\\u11a8\\u11a9\\u11aa"); - u_strcat(s, tempStr); - free(tempStr); - log_verbose("Testing character other invariant.....\n"); - doOtherInvariantTest(UBRK_CHARACTER, s); - free(s); -FreeTextBoundary(); -} -/*--------------------------------------------- - other tests - --------------------------------------------- */ - - -void TestPreceding() -{ - int32_t p1, p2, p3, p4, f, p; - UBreakIterator *e; - UChar words3[15]; - UErrorCode status = U_ZERO_ERROR; - u_uastrcpy(words3, "aaa bbb ccc"); - log_verbose("Testting preceding...\n"); - e = ubrk_open(UBRK_WORD, "en_US", words3, u_strlen(words3), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in ubrk_open() for word breakiterator: %s\n", myErrorName(status)); - } - - ubrk_first(e); - p1 = ubrk_next(e); - p2 = ubrk_next(e); - p3 = ubrk_next(e); - p4 = ubrk_next(e); - f = ubrk_following(e, p2+1); - p = ubrk_preceding(e, p2+1); - - if (f!=p3) log_err("Error in TestPreceding: %d!=%d\n", (int32_t)f, (int32_t)p3); - if (p!=p2) log_err("Error in TestPreceding: %d!=%d\n", (int32_t)p, (int32_t)p2); - - ubrk_close(e); -} - -/** - * @bug 4068137 - */ -void TestEndBehaviour() -{ - int32_t end, previous; - UErrorCode status = U_ZERO_ERROR; - UBreakIterator* wb; - UChar testString[5]; - u_uastrcpy(testString, "boo"); - log_verbose("Testing end behaviour\n"); - wb = ubrk_open(UBRK_WORD, "en_US", testString, u_strlen(testString), &status); - if(U_FAILURE(status)){ - log_err("FAIL: Error in opening the word break Iterator: %s\n", myErrorName(status)); - return; - } - - - end=ubrk_last(wb); - previous=ubrk_previous(wb); - log_verbose("end= %d and previous=%d %d\n", end, previous, ubrk_previous(wb)); - - - ubrk_close(wb); -} - - -/*--------------------------------------------- - Test implementation routines - --------------------------------------------- */ - -void doForwardSelectionTest(UBreakIterator* iterator, UChar* testText, Vector* result) -{ - UChar *expectedResult, *selectionResult; - int32_t lastOffset, offset; - int32_t forwardSelectionCounter = 0; - int32_t forwardSelectionOffset = 0; - - log_verbose("doForwardSelectionTest text of length: %d\n", u_strlen(testText)); - - - lastOffset = ubrk_first(iterator); - offset = ubrk_next(iterator); - while(offset!=UBRK_DONE && forwardSelectionCounter < Count(result)) { - - if (offset != ubrk_current(iterator)){ - log_err("current() failed: it returned %d and offset was %d\n", ubrk_current(iterator), offset); - } - expectedResult =elementAt(result, forwardSelectionCounter); - forwardSelectionOffset += u_strlen(expectedResult); - - selectionResult=extractBetween(lastOffset, offset, testText); - if (offset != forwardSelectionOffset) { - log_err("\n*** Selection #%d\n expected : %s - length %d\n\rselected : %s - length %d\n", - forwardSelectionCounter, austrdup(expectedResult), u_strlen(expectedResult), - austrdup(selectionResult), u_strlen(selectionResult) ); - } - log_verbose("#%d [\"%d\",\"%d\"] : %s\n", forwardSelectionCounter, lastOffset, offset, - austrdup(selectionResult)); - - forwardSelectionCounter++; - lastOffset = offset; - offset = ubrk_next(iterator); - free(selectionResult); - } - if (forwardSelectionCounter < Count(result) - 1){ - log_err("\n*** Selection #%d not found at offset %d !!!\n", forwardSelectionCounter, offset); - } - else if (forwardSelectionCounter >= Count(result) && offset != UBRK_DONE){ - log_err("\n*** Selection #%d should not exist at offset %d !!!\n", forwardSelectionCounter, offset); - } -} -void doBackwardSelectionTest(UBreakIterator* iterator, UChar* testText, Vector* result) -{ - UChar* expectedResult; - UChar* selectionResult; - int32_t backwardSelectionCounter, neededOffset, lastOffset, offset; - backwardSelectionCounter = (Count(result) - 1); - neededOffset = u_strlen(testText); - lastOffset = ubrk_last(iterator); - offset = ubrk_previous(iterator); - - log_verbose("doBackwardSelectionTest text of length: %d\n", u_strlen(testText)); - while(offset != UBRK_DONE) - { - expectedResult = elementAt(result, backwardSelectionCounter); - neededOffset -= u_strlen(expectedResult); - selectionResult=extractBetween(offset, lastOffset, testText); - if(offset != neededOffset) { - log_err("\n*** Selection #%d\nExpected : %d > %s < \n\rSelected : %d > %s < \n", - backwardSelectionCounter, neededOffset, austrdup(expectedResult), - offset, austrdup(selectionResult) ); - } - - log_verbose("#%d : %s\n", backwardSelectionCounter, selectionResult); - backwardSelectionCounter--; - lastOffset = offset; - offset = ubrk_previous(iterator); - free(selectionResult); - } - if (backwardSelectionCounter >= 0 && offset != UBRK_DONE){ - log_err("*** Selection #%d not found!!!\n", backwardSelectionCounter); - } -} - -void doFirstSelectionTest(UBreakIterator* iterator, UChar* testText, Vector* result) -{ - int32_t selectionStart, selectionEnd; - UChar* expectedFirstSelection=NULL; - UChar* tempFirst = NULL; - UBool success = TRUE; - - log_verbose("doFirstSelectionTest.......\n"); - - selectionStart = ubrk_first(iterator); - selectionEnd = ubrk_next(iterator); - if(selectionEnd != UBRK_DONE) { - - tempFirst=extractBetween(selectionStart, selectionEnd, testText); - expectedFirstSelection = elementAt(result,0); - - if(u_strcmp(tempFirst,expectedFirstSelection)!=0) { - log_err("\n### Error in doFirstSelectionTest. First selection not equal to what expected\n"); - log_err("Expected: %s - length %d\n\rSelected: %s - length %d\n", - austrdup(expectedFirstSelection), u_strlen(expectedFirstSelection), - austrdup(tempFirst), u_strlen(tempFirst)); - success = FALSE; - } - } - else if (selectionStart != 0 || u_strlen(testText)!= 0) { - log_err("\n### Error in doFirstSelectionTest. Could not get first selection.\n\r start= %d end= %d\n", - selectionStart, selectionEnd); - success = FALSE; - } - - if(success) { - log_verbose("doFirstSelectionTest\n\nExpexcted first selection: %s\nCalculated first selection: %s is correct\n", - austrdup(expectedFirstSelection), austrdup(tempFirst) ); - - } - if(tempFirst!= NULL) { - free(tempFirst); - } - -} - -void doLastSelectionTest(UBreakIterator* iterator, UChar* testText, Vector* result) -{ - int32_t selectionEnd, selectionStart; - UChar *expectedLastSelection=NULL; - UChar *tempLast = NULL; - UBool success = TRUE; - - log_verbose("doLastSelectionTest.......\n"); - - selectionEnd = ubrk_last(iterator); - selectionStart = ubrk_previous(iterator); - - - if(selectionStart != UBRK_DONE) { - tempLast=extractBetween(selectionStart, selectionEnd, testText); - expectedLastSelection = elementAt(result,Count(result)-1); - if(u_strcmp(tempLast,expectedLastSelection)!=0) { - log_err("\n\n### Error in doLastSelectionTest. Last selection not equal to what expected.\n"); - log_err("Expected: %s - length %d\n\r Selected: %s - length %d\n", - austrdup(expectedLastSelection), u_strlen(expectedLastSelection), - austrdup(tempLast), u_strlen(tempLast) ); - success = FALSE; - - } - } - else if (selectionEnd != 0 || u_strlen(testText)!= 0) { - log_err("\n### Error in doLastSelectionTest. Could not get last selection. [%d,%d]\n", selectionStart, - selectionEnd); - success = FALSE; - } - if(success) { - log_verbose("doLastSelectionTest\n\nExpected Last selection: %s \n", austrdup(expectedLastSelection)); - log_verbose("Calculated last Selection: %s is correct\n", austrdup(tempLast) ); - } - - if(tempLast!=NULL) { - free(tempLast); - } -} - -/** - * @bug 4052418 4068139 - */ -void doForwardIndexSelectionTest(UBreakIterator* iterator, UChar* testText, Vector* result) -{ - int32_t arrayCount, textLength; - int32_t selBegin, selEnd, current, entry, pos; - int32_t offset; - - log_verbose("doForwardIndexSelectionTest text of length: %d\n", u_strlen(testText)); - arrayCount = Count(result); - textLength = u_strlen(testText); - - for(offset = 0; offset < textLength; offset++) { - selBegin = ubrk_preceding(iterator, offset); - selEnd = ubrk_following(iterator, offset); - - entry = 0; - pos = 0; - if (selBegin != UBRK_DONE) { - while (pos < selBegin && entry < arrayCount) { - pos += u_strlen(elementAt(result, entry)); - ++entry; - } - if (pos != selBegin) { - log_err("With offset = %d, got back spurious %d from preceding\n", offset, selBegin); - continue; - } - else { - pos += u_strlen(elementAt(result, entry)); - ++entry; - } - } - current=ubrk_current(iterator); - if(pos==current){ - if (pos != selEnd) { - log_err("With offset = %d, got back erroneous %d from follwoing\n", offset, selEnd); - continue; - } - } - } -} - -/** - * @bug 4052418 4068139 - */ -void doBackwardIndexSelectionTest(UBreakIterator* iterator, UChar* testText, Vector* result) -{ - int32_t arrayCount, textLength; - int32_t selBegin, selEnd, current, entry, pos; - int32_t offset; - - log_verbose("doBackwardIndexSelectionTest text of length: %d\n", u_strlen(testText)); - arrayCount = Count(result); - textLength = u_strlen(testText); - - for(offset = textLength-1; offset >= 0; offset--) { - selBegin = ubrk_preceding(iterator, offset); - selEnd = ubrk_following(iterator, offset); - - entry = 0; - pos = 0; - if (selBegin != UBRK_DONE) { - while (pos < selBegin && entry < arrayCount) { - pos += u_strlen(elementAt(result, entry)); - ++entry; - } - if (pos != selBegin) { - log_err("With offset = %d, got back spurious %d from preceding\n", offset, selBegin); - continue; - } - else { - pos += u_strlen(elementAt(result, entry)); - ++entry; - } - } - current=ubrk_current(iterator); - if(pos==current){ - if (pos != selEnd) { - log_err("With offset = %d, got back erroneous %d from following\n", offset, selEnd); - continue; - } - } - } -} - - - -void doBreakInvariantTest(UBreakIteratorType type, UChar* testChars) -{ - int l,k; - UBreakIterator *tb; - int32_t i, j; - UErrorCode status = U_ZERO_ERROR; - UChar work[4]; - UChar breaks[10]; - UChar c; - UChar *ustr; - UBool seen2; - int errorCount = 0; - status=U_ZERO_ERROR; - - u_uastrcpy(work, "aaa"); - - log_verbose("doBreakInvariantTest text of length: %d\n", u_strlen(testChars)); - /* a break should always occur after CR (unless followed by LF), LF, PS, and LS */ - - ustr = CharsToUChars("\r\n\\u2029\\u2028"); - u_strcpy(breaks, ustr); - free(ustr); - - tb = ubrk_open(type, "en_US", work, u_strlen(work), &status); - - for (i = 0; i < u_strlen(breaks); i++) { - work[1] = breaks[i]; - for (j = 0; j < u_strlen(testChars); j++) { - work[0] = testChars[j]; - for (k = 0; k < u_strlen(testChars); k++) { - c = testChars[k]; - - /* if a cr is followed by lf, ps, ls or etx, don't do the check (that's - not supposed to work) */ - if (work[1] == '\r' && (c == '\n' || c == 0x2029 - || c == 0x2028 || c == 0x0003)) - continue; - - work[2] = testChars[k]; - ubrk_setText(tb, work, u_strlen(work), &status); - if(U_FAILURE(status)){ - log_err("ERROR in opening the breakIterator in doVariant Function: %s\n", myErrorName(status)); - } - seen2 = FALSE; - for (l = ubrk_first(tb); l != UBRK_DONE; l = ubrk_next(tb)) { - if (l == 2) - seen2 = TRUE; - } - if (!seen2) { - log_err("No break between U+%s and U+%s\n", austrdup(UCharToUCharArray(work[1])), - austrdup(UCharToUCharArray(work[2])) ); - errorCount++; - if (errorCount >= 75) - return; - } - } - } - } - ubrk_close(tb); -} - -void doOtherInvariantTest(UBreakIteratorType type , UChar* testChars) -{ - int32_t k; - UBreakIterator *tb; - int32_t i, j; - UErrorCode status = U_ZERO_ERROR; - UChar work[5]; - UChar c; - int32_t errorCount = 0; - status=U_ZERO_ERROR; - - u_uastrcpy(work, "a\r\na"); - - log_verbose("doOtherInvariantTest text of length: %d\n", u_strlen(testChars)); - - tb = ubrk_open(type, "en_us", work, u_strlen(work), &status); - - /* a break should never occur between CR and LF */ - for (i = 0; i < u_strlen(testChars); i++) { - work[0] = testChars[i]; - for (j = 0; j < u_strlen(testChars); j++) { - work[3] = testChars[j]; - ubrk_setText(tb, work, u_strlen(work), &status); - if(U_FAILURE(status)){ - log_err("ERROR in opening the breakIterator in doVariant Function: %s\n", myErrorName(status)); - } - for ( k = ubrk_first(tb); k != UBRK_DONE; k = ubrk_next(tb)) - if (k == 2) { - log_err("Break between CR and LF in string U+%s, U+d U+a U+%s\n", - austrdup(UCharToUCharArray(work[0])), austrdup(UCharToUCharArray(work[3])) ); - errorCount++; - if (errorCount >= 75) - return; - } - } - } - - /* a break should never occur before a non-spacing mark, unless the preceding - character is CR, LF, PS, or LS */ - u_uastrcpy(work,"aaaa"); - for (i = 0; i < u_strlen(testChars); i++) { - c = testChars[i]; - if (c == '\n' || c == '\r' || c == 0x2029 || c == 0x2028 || c == 0x0003) - continue; - work[1] = c; - for (j = 0; j < u_strlen(testChars); j++) { - c = testChars[j]; - if ((u_charType(c) != U_NON_SPACING_MARK) && - (u_charType(c) != U_ENCLOSING_MARK)) - continue; - work[2] = c; - ubrk_setText(tb, work, u_strlen(work), &status); - if(U_FAILURE(status)){ - log_err("ERROR in opening the breakIterator in doOtherVariant Function %s\n", myErrorName(status)); - } - for (k = ubrk_first(tb); k != UBRK_DONE; k = ubrk_next(tb)) - if (k == 2) { - log_err("Break between U+%s and U+%s\n", austrdup(UCharToUCharArray(work[1])), - austrdup(UCharToUCharArray(work[2])) ); - errorCount++; - if (errorCount >= 75) - return; - } - } - } - ubrk_close(tb); -} - -void sample(UBreakIterator* tb, UChar* text) -{ - - int32_t start, end; - UChar* substring; - log_verbose("-------------------------\n"); - log_verbose("%s of length %d\n", austrdup(text), u_strlen(text)); - - start = ubrk_first(tb); - for (end = ubrk_next(tb); end != UBRK_DONE; end = ubrk_next(tb)) { - substring=extractBetween(start, end, text); - log_err("[%d,%d] \"%s\" \n", start, end, austrdup(substring) ); - start = end; - free(substring); - } - -} - -void addBrkIterRegrTest(TestNode** root); - -void addBrkIterRegrTest(TestNode** root) -{ - -#if 0 - /* These tests are removed becaue - * 1. The test data is completely redundant with that in the C++ break iterator tests - * 2. The data here is stale, and I don't want to copy all of the changes from the C++ tests, and - * 3. The C API is covered by the API tests. - */ - - addTest(root, &TestForwardWordSelection, "tstxtbd/cregrtst/TestForwardWordSelection" ); - addTest(root, &TestBackwardWordSelection, "tstxtbd/cregrtst/TestBackwardWordSelection" ); - addTest(root, &TestFirstWordSelection, "tstxtbd/cregrtst/TestFirstWordSelection" ); - addTest(root, &TestLastWordSelection, "tstxtbd/cregrtst/TestLastWordSelection" ); - addTest(root, &TestForwardWordIndexSelection, "tstxtbd/cregrtst/TestForwardWordIndexSelection"); - addTest(root, &TestBackwardWordIndexSelection, "tstxtbd/cregrtst/TestBackwardWordIndexSelection"); - addTest(root, &TestForwardSentenceSelection, "tstxtbd/cregrtst/TestForwardSentenceSelection"); - addTest(root, &TestBackwardSentenceSelection, "tstxtbd/cregrtst/TestBackwardSentenceSelection"); - addTest(root, &TestFirstSentenceSelection, "tstxtbd/cregrtst/TestFirstSentenceSelection"); - addTest(root, &TestLastSentenceSelection, "tstxtbd/cregrtst/TestLastSentenceSelection"); - addTest(root, &TestForwardSentenceIndexSelection, "tstxtbd/cregrtst/TestForwardSentenceIndexSelection"); - addTest(root, &TestBackwardSentenceIndexSelection, "tstxtbd/cregrtst/TestBackwardSentenceIndexSelection"); - - addTest(root, &TestForwardLineSelection, "tstxtbd/cregrtst/TestForwardLineSelection"); - addTest(root, &TestBackwardLineSelection, "tstxtbd/cregrtst/TestBackwardLineSelection"); - addTest(root, &TestFirstLineSelection, "tstxtbd/cregrtst/TestFirstLineSelection"); - addTest(root, &TestLastLineSelection, "tstxtbd/cregrtst/TestLastLineSelection"); - addTest(root, &TestForwardLineIndexSelection, "tstxtbd/cregrtst/TestForwardLineIndexSelection"); - addTest(root, &TestBackwardLineIndexSelection, "tstxtbd/cregrtst/TestBackwardLineIndexSelection"); - - addTest(root, &TestForwardCharacterSelection, "tstxtbd/cregrtst/TestForwardCharacterSelection"); - addTest(root, &TestBackwardCharacterSelection, "tstxtbd/cregrtst/TestBackwardCharacterSelection"); - addTest(root, &TestFirstCharacterSelection, "tstxtbd/cregrtst/TestFirstCharacterSelection"); - addTest(root, &TestLastCharacterSelection, "tstxtbd/cregrtst/TestLastCharacterSelection"); - addTest(root, &TestForwardCharacterIndexSelection, "tstxtbd/cregrtst/TestForwardCharacterIndexSelection"); - addTest(root, &TestBackwardCharacterIndexSelection, "tstxtbd/cregrtst/TestBackwardCharacterIndexSelection"); - - addTest(root, &TestPreceding, "tstxtbd/cregrtst/TestPreceding"); - addTest(root, &TestEndBehaviour, "tstxtbd/cregrtst/TestEndBehaviour"); - - addTest(root, &TestWordInvariants, "tstxtbd/cregrtst/TestWordInvariants"); - addTest(root, &TestSentenceInvariants, "tstxtbd/cregrtst/TestSentenceInvariants"); - addTest(root, &TestCharacterInvariants, "tstxtbd/cregrtst/TestCharacterInvariants"); - addTest(root, &TestLineInvariants, "tstxtbd/cregrtst/TestLineInvariants"); -#endif - -} - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/test/cintltst/cregrtst.h b/icuSources/test/cintltst/cregrtst.h deleted file mode 100644 index 8a8973fc..00000000 --- a/icuSources/test/cintltst/cregrtst.h +++ /dev/null @@ -1,222 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ -/******************************************************************************** -* -* File CREGRTST.H -* -* Modification History: -* Name Description -* Madhu Katragadda Converted to C, added extra functions and tests -********************************************************************************* -*/ - -/*C API functionality and regression test for BreakIterator*/ - -#ifndef _CBRKITREGTEST -#define _CBRKITREGTEST - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "cintltst.h" - - -struct Vector1; -/* Internal functions used */ - void addElement(struct Vector1*, const char*); - UChar * addElement2(struct Vector1*, const UChar*); - void cleanupVector(struct Vector1*); - int32_t Count(struct Vector1*); - UChar* elementAt(struct Vector1*, int32_t); -/* Internal Functions used */ - UChar* extractBetween(int32_t start, int32_t end, UChar* text); - UChar* CharsToUCharArray(const char*); - UChar* UCharToUCharArray(const UChar uchar); - - void AllocateTextBoundary(void); - void FreeTextBoundary(void); - -/* The test functions */ - - /** - * Test word break using doForwardSelectionTest - **/ - void TestForwardWordSelection(void); - /** - * Test word break using doFirstSelectionTest - **/ - void TestFirstWordSelection(void); - /** - * Test word break using doLastSelectionTest - **/ - void TestLastWordSelection(void); - /** - * Test word break using doBackwardSelectionTest - **/ - void TestBackwardWordSelection(void); - /** - * Test word break using doForwardIndexSelectionTest - **/ - void TestForwardWordIndexSelection(void); - /** - * Test word break using doBackwardIndexSelectionTest - **/ - void TestBackwardWordIndexSelection(void); - - /** - * Test sentence break using doForwardSelectionTest - **/ - void TestForwardSentenceSelection(void); - /** - * Test sentence break using doBackwardSelectionTest - **/ - void TestBackwardSentenceSelection(void); - /** - * Test sentence break using doFirstSelectionTest - **/ - void TestFirstSentenceSelection(void); - /** - * Test sentence break using doLastSelectionTest - **/ - void TestLastSentenceSelection(void); - /** - * Test sentence break using doForwardIndexSelectionTest - **/ - void TestForwardSentenceIndexSelection(void); - /** - * Test sentence break using doBackwardIndexSelectionTest - **/ - void TestBackwardSentenceIndexSelection(void); - - /** - * Test line break using doForwardSelectionTest - **/ - void TestForwardLineSelection(void); - /** - * Test line break using doBackwardSelectionTest - **/ - void TestBackwardLineSelection(void); - /** - * Test line break using doFirstSelectionTest - **/ - void TestFirstLineSelection(void); - /** - * Test line break using doLastSelectionTest - **/ - void TestLastLineSelection(void); - /** - * Test line break using doForwardIndexSelectionTest - **/ - void TestForwardLineIndexSelection(void); - /** - * Test line break using doBackwardIndexSelectionTest - **/ - void TestBackwardLineIndexSelection(void); - - /** - * Test character break using doForwardSelectionTest - **/ - void TestForwardCharacterSelection(void); - /** - * Test character break using doBackwardSelectionTest - **/ - void TestBackwardCharacterSelection(void); - /** - * Test character break using doFirstSelectionTest - **/ - void TestFirstCharacterSelection(void); - /** - * Test character break using doLastSelectionTest - **/ - void TestLastCharacterSelection(void); - /** - * Test character break using doForwardIndexSelectionTest - **/ - void TestForwardCharacterIndexSelection(void); - /** - * Test character break using doBackwardIndexSelectionTest - **/ - void TestBackwardCharacterIndexSelection(void); - - - /** - * test methods ubrk_preceding(), ubrk_following() - **/ - void TestPreceding(void); - void TestEndBehaviour(void); - - void TestWordInvariants(void); - void TestSentenceInvariants(void); - void TestCharacterInvariants(void); - void TestLineInvariants(void); -/*-----------------*/ -/* Internal functions to prepare test data */ - - void addTestWordData(void); - void addTestSentenceData(void); - void addTestLineData(void); - void addTestCharacterData(void); - UChar* createTestData(struct Vector1*, int32_t); - -/* Test Implementation routines*/ - - /** - * Perform tests of BreakIterator forward functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doForwardSelectionTest(UBreakIterator*, UChar* testText, struct Vector1* result); - /** - * Perform tests of BreakIterator backward functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doBackwardSelectionTest(UBreakIterator*, UChar* testText, struct Vector1* result); - /** - * Perform tests of BreakIterator first selection functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doFirstSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result); - /** - * Perform tests of BreakIterator last selection functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doLastSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result); - /** - * Perform tests of BreakIterator backward index functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doForwardIndexSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result); - /** - * Perform tests of BreakIterator multiple selection functionality - * on different kinds of iterators (word, sentence, line and character) - **/ - void doBackwardIndexSelectionTest(UBreakIterator* iterator, UChar* testText, struct Vector1* result); - - void doBreakInvariantTest(UBreakIteratorType type, UChar* testChars); - - void doOtherInvariantTest(UBreakIteratorType type , UChar* testChars); - /** - * Perform tests with short sample code - **/ - void sample(UBreakIterator* tb, UChar* text); - - -struct Vector1* wordSelectionData; -struct Vector1* sentenceSelectionData; -struct Vector1* lineSelectionData; -struct Vector1* characterSelectionData; - -UChar* testWordText; -UChar* testSentenceText; -UChar* testLineText; -UChar* testCharacterText; - - -static UChar *cannedTestChars; - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ - -#endif diff --git a/icuSources/test/cintltst/crestst.c b/icuSources/test/cintltst/crestst.c index b6cec878..dce4e10f 100644 --- a/icuSources/test/cintltst/crestst.c +++ b/icuSources/test/cintltst/crestst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************* @@ -459,7 +459,7 @@ static void TestFallback() static void TestOpenDirect(void) { - UResourceBundle *idna_rules, *item; + UResourceBundle *idna_rules, *casing, *te_IN, *ne, *item; UErrorCode errorCode; /* @@ -468,7 +468,7 @@ TestOpenDirect(void) { * from root or similar */ errorCode=U_ZERO_ERROR; - idna_rules=ures_openDirect("testdata", "idna_rules", &errorCode); + idna_rules=ures_openDirect(loadTestData(&errorCode), "idna_rules", &errorCode); if(U_FAILURE(errorCode)) { log_err("ures_openDirect(\"idna_rules\") failed: %s\n", u_errorName(errorCode)); return; @@ -489,7 +489,7 @@ TestOpenDirect(void) { } /* try an item in root, must fail */ - item=ures_getByKey(idna_rules, "Languages", NULL, &errorCode); + item=ures_getByKey(idna_rules, "ShortLanguage", NULL, &errorCode); if(U_FAILURE(errorCode)) { errorCode=U_ZERO_ERROR; } else { @@ -527,6 +527,80 @@ TestOpenDirect(void) { return; } ures_close(idna_rules); + + /* + * ICU 3.6 has new resource bundle syntax and data for bundles that do not + * participate in locale fallback. Now, + * - ures_open() works like ures_openDirect() on a bundle with a top-level + * type of ":table(nofallback)" _if_ the bundle exists + * - ures_open() will continue to find a root bundle if the requested one + * does not exist, unlike ures_openDirect() + * + * Test with a different bundle than above to avoid confusion in the cache. + */ + + /* + * verify that ures_open("casing"), which now has a nofallback declaration, + * does not enable fallbacks + */ + errorCode=U_ZERO_ERROR; + casing=ures_open("testdata", "casing", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ures_open(\"casing\") failed: %s\n", u_errorName(errorCode)); + return; + } + + errorCode=U_ZERO_ERROR; + item=ures_getByKey(casing, "Info", NULL, &errorCode); + if(U_FAILURE(errorCode)) { + log_err("casing.getByKey(Info) failed - %s\n", u_errorName(errorCode)); + } else { + ures_close(item); + } + + errorCode=U_ZERO_ERROR; + item=ures_getByKey(casing, "ShortLanguage", NULL, &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("casing.getByKey(root key) succeeded despite nofallback declaration - %s\n", u_errorName(errorCode)); + ures_close(item); + } + ures_close(casing); + + /* + * verify that ures_open("ne") finds the root bundle but + * ures_openDirect("ne") does not + */ + errorCode=U_ZERO_ERROR; + ne=ures_open("testdata", "ne", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ures_open(\"ne\") failed (expected to get root): %s\n", u_errorName(errorCode)); + } + if(errorCode!=U_USING_DEFAULT_WARNING || 0!=uprv_strcmp("root", ures_getLocale(ne, &errorCode))) { + log_err("ures_open(\"ne\") found something other than \"root\" - %s\n", u_errorName(errorCode)); + } + ures_close(ne); + + errorCode=U_ZERO_ERROR; + ne=ures_openDirect("testdata", "ne", &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("ures_openDirect(\"ne\") succeeded unexpectedly\n"); + ures_close(ne); + } + + /* verify that ures_openDirect("te_IN") does not enable fallbacks */ + errorCode=U_ZERO_ERROR; + te_IN=ures_openDirect("testdata", "te_IN", &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ures_open(\"te_IN\") failed: %s\n", u_errorName(errorCode)); + return; + } + errorCode=U_ZERO_ERROR; + item=ures_getByKey(te_IN, "ShortLanguage", NULL, &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("te_IN.getByKey(root key) succeeded despite use of ures_openDirect() - %s\n", u_errorName(errorCode)); + ures_close(item); + } + ures_close(te_IN); } static int32_t diff --git a/icuSources/test/cintltst/creststn.c b/icuSources/test/cintltst/creststn.c index 6a3eaca1..f2cfa9cd 100644 --- a/icuSources/test/cintltst/creststn.c +++ b/icuSources/test/cintltst/creststn.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -25,6 +25,7 @@ #include "cstring.h" #include "unicode/uchar.h" #include "ucol_imp.h" /* for U_ICUDATA_COLL */ +#include "ubrkimpl.h" /* for U_ICUDATA_BRKITR */ #define RESTEST_HEAP_CHECK 0 #include "unicode/uloc.h" @@ -127,7 +128,19 @@ typedef enum E_Where E_Where; #define CONFIRM_INT_EQ(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of %d\n", action, actual, expected); } #define CONFIRM_INT_GE(actual,expected) if ((actual)>=(expected)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of x >= %d\n", action, actual, expected); } #define CONFIRM_INT_NE(actual,expected) if ((expected)!=(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of x != %d\n", action, actual, expected); } -#define CONFIRM_ErrorCode(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %s instead of %s\n", action, myErrorName(actual), myErrorName(expected)); } +/*#define CONFIRM_ErrorCode(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %s instead of %s\n", action, myErrorName(actual), myErrorName(expected)); } */ +static void +CONFIRM_ErrorCode(UErrorCode actual,UErrorCode expected) +{ + if ((expected)==(actual)) + { + record_pass(); + } else { + record_fail(); + /*log_err("%s returned %s instead of %s\n", action, myErrorName(actual), myErrorName(expected)); */ + log_err("returned %s instead of %s\n", myErrorName(actual), myErrorName(expected)); + } +} /* Array of our test objects */ @@ -161,6 +174,9 @@ static int32_t bundles_count = sizeof(param) / sizeof(param[0]); static void TestDecodedBundle(void); static void TestGetKeywordValues(void); static void TestGetFunctionalEquivalent(void); +static void TestCLDRStyleAliases(void); +static void TestFallbackCodes(void); +static void TestGetUTF8String(void); /***************************************************************************************/ @@ -171,7 +187,7 @@ void addNEWResourceBundleTest(TestNode** root) addTest(root, &TestErrorCodes, "tsutil/creststn/TestErrorCodes"); addTest(root, &TestEmptyBundle, "tsutil/creststn/TestEmptyBundle"); addTest(root, &TestConstruction1, "tsutil/creststn/TestConstruction1"); - addTest(root, &TestResourceBundles, "tsutil/creststn/TestResourceBundle"); + addTest(root, &TestResourceBundles, "tsutil/creststn/TestResourceBundles"); addTest(root, &TestFallback, "tsutil/creststn/TestFallback"); addTest(root, &TestGetVersion, "tsutil/creststn/TestGetVersion"); addTest(root, &TestGetVersionColl, "tsutil/creststn/TestGetVersionColl"); @@ -187,7 +203,11 @@ void addNEWResourceBundleTest(TestNode** root) addTest(root, &TestGetKeywordValues, "tsutil/creststn/TestGetKeywordValues"); addTest(root, &TestGetFunctionalEquivalent,"tsutil/creststn/TestGetFunctionalEquivalent"); addTest(root, &TestJB3763, "tsutil/creststn/TestJB3763"); - + addTest(root, &TestXPath, "tsutil/creststn/TestXPath"); + addTest(root, &TestCLDRStyleAliases, "tsutil/creststn/TestCLDRStyleAliases"); + addTest(root, &TestFallbackCodes, "tsutil/creststn/TestFallbackCodes"); + addTest(root, &TestStackReuse, "tsutil/creststn/TestStackReuse"); + addTest(root, &TestGetUTF8String, "tsutil/creststn/TestGetUTF8String"); } @@ -399,7 +419,7 @@ static void TestDecodedBundle(){ int32_t num =0; const char *testdatapath = loadTestData(&error); resB = ures_open(testdatapath, "iscii", &error); - srcFromRes=ures_getStringByKey(resB,"str",&len,&error); + srcFromRes=tres_getString(resB,-1,"str",&len,&error); if(U_FAILURE(error)){ #if UCONFIG_NO_LEGACY_CONVERSION log_info("Couldn't load iscii.bin from test data bundle, (because UCONFIG_NO_LEGACY_CONVERSION is turned on)\n"); @@ -451,7 +471,7 @@ static void TestNewTypes() { theBundle = ures_open(testdatapath, "testtypes", &status); - empty = ures_getStringByKey(theBundle, "emptystring", &len, &status); + empty = tres_getString(theBundle, -1, "emptystring", &len, &status); if(empty && (*empty != 0 || len != 0)) { log_err("Empty string returned invalid value\n"); } @@ -468,7 +488,7 @@ static void TestNewTypes() { res = ures_getByKey(theBundle, "zerotest", res, &status); CONFIRM_ErrorCode(status, U_ZERO_ERROR); CONFIRM_INT_EQ(ures_getType(res), URES_STRING); - zeroString=ures_getString(res, &len, &status); + zeroString=tres_getString(res, -1, NULL, &len, &status); if(U_SUCCESS(status)){ CONFIRM_ErrorCode(status, U_ZERO_ERROR); CONFIRM_INT_EQ(len, 7); @@ -554,7 +574,7 @@ static void TestNewTypes() { /* this tests if escapes are preserved or not */ { - const UChar* str = ures_getStringByKey(theBundle,"testescape",&len,&status); + const UChar* str = tres_getString(theBundle,-1,"testescape",&len,&status); CONFIRM_ErrorCode(status, U_ZERO_ERROR); if(U_SUCCESS(status)){ u_charsToUChars(expect,uExpect,(int32_t)strlen(expect)+1); @@ -593,7 +613,7 @@ static void TestNewTypes() { patternLen = (int32_t)uprv_strlen(pattern); expectedEscaped = (UChar*)malloc(U_SIZEOF_UCHAR * patternLen); - got = ures_getStringByKey(theBundle,"test_unescaping",&len,&status); + got = tres_getString(theBundle,-1,"test_unescaping",&len,&status); expectedLen = u_unescape(pattern,expectedEscaped,patternLen); if(got==NULL || u_strncmp(expectedEscaped,got,expectedLen)!=0 || expectedLen != len){ log_err("genrb failed to unescape string\n"); @@ -610,7 +630,7 @@ static void TestNewTypes() { } /* test for jitterbug#1435 */ { - const UChar* str = ures_getStringByKey(theBundle,"test_underscores",&len,&status); + const UChar* str = tres_getString(theBundle,-1,"test_underscores",&len,&status); expect ="test message ...."; u_charsToUChars(expect,uExpect,(int32_t)strlen(expect)+1); CONFIRM_ErrorCode(status, U_ZERO_ERROR); @@ -619,6 +639,7 @@ static void TestNewTypes() { } } /* test for jitterbug#2626 */ +#if !UCONFIG_NO_COLLATION { UResourceBundle* resB = NULL; const UChar* str = NULL; @@ -627,7 +648,7 @@ static void TestNewTypes() { status = U_ZERO_ERROR; resB = ures_getByKey(theBundle, "collations", resB, &status); resB = ures_getByKey(resB, "standard", resB, &status); - str = ures_getStringByKey(resB,"Sequence",&strLength,&status); + str = tres_getString(resB,-1,"Sequence",&strLength,&status); if(!str || U_FAILURE(status)) { log_data_err("Could not load collations from theBundle: %s\n", u_errorName(status)); } else if(u_strcmp(my,str) != 0){ @@ -635,6 +656,7 @@ static void TestNewTypes() { } ures_close(resB); } +#endif { const char *sourcePath = ctest_dataSrcDir(); int32_t srcPathLen = (int32_t)strlen(sourcePath); @@ -650,7 +672,7 @@ static void TestNewTypes() { status = U_ZERO_ERROR; { int32_t strLen =0; - const UChar* str = ures_getStringByKey(theBundle, "testincludeUTF",&strLen,&status); + const UChar* str = tres_getString(theBundle, -1, "testincludeUTF",&strLen,&status); strcpy(path, "riwords.txt"); path[strlen("riwords.txt")]=0; if(U_FAILURE(status)){ @@ -687,7 +709,7 @@ static void TestNewTypes() { status = U_ZERO_ERROR; { int32_t strLen =0; - const UChar* str = ures_getStringByKey(theBundle, "testinclude",&strLen,&status); + const UChar* str = tres_getString(theBundle, -1, "testinclude",&strLen,&status); strcpy(path, "translit_rules.txt"); path[strlen("translit_rules.txt")]=0; @@ -760,7 +782,7 @@ static void TestEmptyTypes() { res = ures_getByKey(theBundle, "emptyexplicitstring", res, &status); CONFIRM_ErrorCode(status, U_ZERO_ERROR); CONFIRM_INT_EQ(ures_getType(res), URES_STRING); - zeroString=ures_getString(res, &len, &status); + zeroString=tres_getString(res, -1, NULL, &len, &status); if(U_SUCCESS(status)){ CONFIRM_ErrorCode(status, U_ZERO_ERROR); CONFIRM_INT_EQ(len, 0); @@ -775,7 +797,7 @@ static void TestEmptyTypes() { res = ures_getByKey(theBundle, "emptystring", res, &status); CONFIRM_ErrorCode(status, U_ZERO_ERROR); CONFIRM_INT_EQ(ures_getType(res), URES_STRING); - zeroString=ures_getString(res, &len, &status); + zeroString=tres_getString(res, -1, NULL, &len, &status); if(U_SUCCESS(status)){ CONFIRM_ErrorCode(status, U_ZERO_ERROR); CONFIRM_INT_EQ(len, 0); @@ -958,6 +980,7 @@ static void TestAPI() { const char* testdatapath; UChar* utestdatapath=NULL; char convOutput[256]; + UChar largeBuffer[1025]; UResourceBundle *teRes = NULL; UResourceBundle *teFillin=NULL; UResourceBundle *teFillin2=NULL; @@ -974,13 +997,43 @@ static void TestAPI() { utestdatapath = (UChar*) malloc((len+10)*sizeof(UChar)); u_charsToUChars(testdatapath, utestdatapath, (int32_t)strlen(testdatapath)+1); - /*u_uastrcpy(utestdatapath, testdatapath);*/ +#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) && U_FILE_SEP_CHAR == '\\' + { + /* Convert all backslashes to forward slashes so that we can make sure that ures_openU + can handle invariant characters. */ + UChar *backslash; + while ((backslash = u_strchr(utestdatapath, 0x005C))) { + *backslash = 0x002F; + } + } +#endif + + u_memset(largeBuffer, 0x0030, sizeof(largeBuffer)/sizeof(largeBuffer[0])); + largeBuffer[sizeof(largeBuffer)/sizeof(largeBuffer[0])-1] = 0; /*Test ures_openU */ + status = U_ZERO_ERROR; + ures_close(ures_openU(largeBuffer, "root", &status)); + if(status != U_ILLEGAL_ARGUMENT_ERROR){ + log_err("ERROR: ures_openU() worked when the path is very large. It returned %s\n", myErrorName(status)); + } + + status = U_ZERO_ERROR; + ures_close(ures_openU(NULL, "root", &status)); + if(U_FAILURE(status)){ + log_err("ERROR: ures_openU() failed path = NULL with %s\n", myErrorName(status)); + } + + status = U_ILLEGAL_ARGUMENT_ERROR; + if(ures_openU(NULL, "root", &status) != NULL){ + log_err("ERROR: ures_openU() worked with error status with %s\n", myErrorName(status)); + } + + status = U_ZERO_ERROR; teRes=ures_openU(utestdatapath, "te", &status); if(U_FAILURE(status)){ - log_err("ERROR: ures_openU() failed path =%s with %s", austrdup(utestdatapath), myErrorName(status)); + log_err("ERROR: ures_openU() failed path =%s with %s\n", austrdup(utestdatapath), myErrorName(status)); return; } /*Test ures_getLocale() */ @@ -1009,7 +1062,8 @@ static void TestAPI() { } key=ures_getKey(teFillin); /*if(strcmp(key, "%%CollationBin") != 0){*/ - if(strcmp(key, "array_2d_in_Root_te") != 0){ + /*if(strcmp(key, "array_2d_in_Root_te") != 0){*/ /* added "aliasClient" that goes first */ + if(strcmp(key, "a") != 0){ log_err("ERROR: ures_getNextResource() failed\n"); } #endif @@ -1020,7 +1074,7 @@ static void TestAPI() { if(U_FAILURE(status)){ log_err("ERROR: ures_getByIndex on string resource failed\n"); } - if(strcmp(u_austrcpy(convOutput, ures_getString(teFillin2, &len, &status)), "TE") != 0){ + if(strcmp(u_austrcpy(convOutput, tres_getString(teFillin2, -1, NULL, &len, &status)), "TE") != 0){ status=U_ZERO_ERROR; log_err("ERROR: ures_getByIndex on string resource fetched the key=%s, expected \"TE\" \n", austrdup(ures_getString(teFillin2, &len, &status))); } @@ -1119,15 +1173,15 @@ static void TestErrorConditions(){ log_verbose("Testing ures_openFillIn with UResourceBundle = NULL.....\n"); status=U_ZERO_ERROR; ures_openFillIn(NULL, testdatapath, "te", &status); - if(status != U_INTERNAL_PROGRAM_ERROR){ - log_err("ERROR: ures_openFillIn with UResourceBundle= NULL should fail. Expected U_INTERNAL_PROGRAM_ERROR, Got: %s\n", + if(status != U_ILLEGAL_ARGUMENT_ERROR){ + log_err("ERROR: ures_openFillIn with UResourceBundle= NULL should fail. Expected U_ILLEGAL_ARGUMENT_ERROR, Got: %s\n", myErrorName(status)); } /*Test ures_getLocale() with status != U_ZERO_ERROR*/ status=U_ZERO_ERROR; teRes=ures_openU(utestdatapath, "te", &status); if(U_FAILURE(status)){ - log_err("ERROR: ures_openU() failed path =%s with %s", austrdup(utestdatapath), myErrorName(status)); + log_err("ERROR: ures_openU() failed path =%s with %s\n", austrdup(utestdatapath), myErrorName(status)); return; } status=U_ILLEGAL_ARGUMENT_ERROR; @@ -1373,9 +1427,9 @@ static void TestGetVersionColl(){ return; } /* test NUL termination of UCARules */ - rules = ures_getStringByKey(resB,"%%UCARULES",&len, &status); + rules = tres_getString(resB,-1,"UCARules",&len, &status); if(!rules || U_FAILURE(status)) { - log_data_err("Could not load %%UCARULES for locale %s\n", locName); + log_data_err("Could not load UCARules for locale %s\n", locName); continue; } if(u_strlen(rules) != len){ @@ -1466,8 +1520,8 @@ static void TestConstruction1() log_err("construction of %s did not succeed : %s \n", locale, myErrorName(status)); return; } - result1= ures_getStringByKey(test1, "string_in_Root_te_te_IN", &len1, &err); - result2= ures_getStringByKey(test2, "string_in_Root_te_te_IN", &len2, &err); + result1= tres_getString(test1, -1, "string_in_Root_te_te_IN", &len1, &err); + result2= tres_getString(test2, -1, "string_in_Root_te_te_IN", &len2, &err); if (U_FAILURE(err) || len1==0 || len2==0) { log_err("Something threw an error in TestConstruction(): %s\n", myErrorName(status)); return; @@ -1634,7 +1688,7 @@ static UBool testTag(const char* frag, status = U_ZERO_ERROR; len=0; - string=ures_getStringByKey(theBundle, tag, &len, &status); + string=tres_getString(theBundle, -1, tag, &len, &status); if(U_SUCCESS(status)) { expected_string=(UChar*)malloc(sizeof(UChar)*(u_strlen(base) + 4)); u_strcpy(expected_string,base); @@ -1680,7 +1734,7 @@ static UBool testTag(const char* frag, u_strcat(expected_string, element); arrayItem1=ures_getNextResource(array, arrayItem1, &status); if(U_SUCCESS(status)){ - CONFIRM_EQ(ures_getString(arrayItem1, &len, &status),expected_string); + CONFIRM_EQ(tres_getString(arrayItem1, -1, NULL, &len, &status),expected_string); } } @@ -1772,7 +1826,7 @@ static UBool testTag(const char* frag, u_strcat(expected_string, element); arrayItem1=ures_getNextResource(tableRow, arrayItem1, &status); if(U_SUCCESS(status)){ - const UChar *stringValue=ures_getString(arrayItem1, &len, &status); + const UChar *stringValue=tres_getString(arrayItem1, -1, NULL, &len, &status); CONFIRM_EQ(stringValue, expected_string); } } @@ -1889,7 +1943,7 @@ static UBool testTag(const char* frag, }else{ record_fail(); } - t=(UChar*)ures_getString(tagelement, &len, &status); + t=(UChar*)tres_getString(tagelement, -1, NULL, &len, &status); if(!U_FAILURE(status)){ string=t; } @@ -1958,11 +2012,11 @@ static void TestFallback() /* clear it out.. just do some calls to get the gears turning */ - junk = ures_getStringByKey(fr_FR, "LocaleID", &resultLen, &status); + junk = tres_getString(fr_FR, -1, "LocaleID", &resultLen, &status); status = U_ZERO_ERROR; - junk = ures_getStringByKey(fr_FR, "LocaleString", &resultLen, &status); + junk = tres_getString(fr_FR, -1, "LocaleString", &resultLen, &status); status = U_ZERO_ERROR; - junk = ures_getStringByKey(fr_FR, "LocaleID", &resultLen, &status); + junk = tres_getString(fr_FR, -1, "LocaleID", &resultLen, &status); status = U_ZERO_ERROR; /* OK first one. This should be a Default value. */ @@ -1977,7 +2031,7 @@ static void TestFallback() ures_close(subResource); /* and this is a Fallback, to fr */ - junk = ures_getStringByKey(fr_FR, "Countries", &resultLen, &status); + junk = tres_getString(fr_FR, -1, "Countries", &resultLen, &status); if(status != U_USING_FALLBACK_WARNING) { log_data_err("Expected U_USING_FALLBACK_ERROR when trying to get Countries from fr_FR, got %d\n", @@ -1994,18 +2048,20 @@ static void TestFallback() UResourceBundle* myResB = ures_open(NULL,"no_NO_NY",&err); UResourceBundle* resLocID = ures_getByKey(myResB, "Version", NULL, &err); UResourceBundle* tResB; - static const UChar versionStr[] = { 0x0031, 0x002E, 0x0032, 0}; + const UChar* version = NULL; + static const UChar versionStr[] = { 0x0031, 0x002E, 0x0033, 0x0037, 0x0000}; if(err != U_ZERO_ERROR){ log_data_err("Expected U_ZERO_ERROR when trying to test no_NO_NY aliased to nn_NO for Version err=%s\n",u_errorName(err)); return; } - if(u_strcmp(ures_getString(resLocID, &resultLen, &err), versionStr) != 0){ + version = tres_getString(resLocID, -1, NULL, &resultLen, &err); + if(u_strcmp(version, versionStr) != 0){ log_data_err("ures_getString(resLocID, &resultLen, &err) returned an unexpected version value\n"); } - tResB = ures_getByKey(myResB, "calendar", NULL, &err); + tResB = ures_getByKey(myResB, "zoneStrings", NULL, &err); if(err != U_USING_FALLBACK_WARNING){ - log_err("Expected U_USING_FALLBACK_ERROR when trying to test no_NO_NY aliased with nn_NO_NY for calendar err=%s\n",u_errorName(err)); + log_err("Expected U_USING_FALLBACK_ERROR when trying to test no_NO_NY aliased with nn_NO_NY for zoneStrings err=%s\n",u_errorName(err)); } ures_close(resLocID); ures_close(myResB); @@ -2028,8 +2084,8 @@ static void TestResourceLevelAliasing(void) { UResourceBundle *en = NULL, *uk = NULL, *testtypes = NULL; const char* testdatapath = NULL; const UChar *string = NULL, *sequence = NULL; - const uint8_t *binary = NULL, *binSequence = NULL; - int32_t strLen = 0, seqLen = 0, binLen = 0, binSeqLen = 0; + /*const uint8_t *binary = NULL, *binSequence = NULL;*/ + int32_t strLen = 0, seqLen = 0;/*, binLen = 0, binSeqLen = 0;*/ char buffer[100]; char *s; @@ -2041,12 +2097,18 @@ static void TestResourceLevelAliasing(void) { } aliasB = ures_open(testdatapath, "testaliases", &status); - + + if(U_FAILURE(status)) + { + log_err("Could not load testaliases.res %s \n",myErrorName(status)); + return; + } /* this should fail - circular alias */ tb = ures_getByKey(aliasB, "aaa", tb, &status); if(status != U_TOO_MANY_ALIASES_ERROR) { log_err("Failed to detect circular alias\n"); - } else { + } + else { status = U_ZERO_ERROR; } tb = ures_getByKey(aliasB, "aab", tb, &status); @@ -2065,7 +2127,6 @@ static void TestResourceLevelAliasing(void) { } else { status = U_ZERO_ERROR; } - /* testing referencing/composed alias */ uk = ures_findResource("ja/LocaleScript/2", uk, &status); if((uk == NULL) || U_FAILURE(status)) { @@ -2073,16 +2134,16 @@ static void TestResourceLevelAliasing(void) { goto cleanup; } - sequence = ures_getString(uk, &seqLen, &status); + sequence = tres_getString(uk, -1, NULL, &seqLen, &status); tb = ures_getByKey(aliasB, "referencingalias", tb, &status); - string = ures_getString(tb, &strLen, &status); + string = tres_getString(tb, -1, NULL, &strLen, &status); if(seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) { log_err("Referencing alias didn't get the right string\n"); } - string = ures_getStringByKey(aliasB, "referencingalias", &strLen, &status); + string = tres_getString(aliasB, -1, "referencingalias", &strLen, &status); if(seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) { log_err("Referencing alias didn't get the right string\n"); } @@ -2092,7 +2153,7 @@ static void TestResourceLevelAliasing(void) { checkStatus(__LINE__, U_ZERO_ERROR, status); tb = ures_getByIndex(tb, 2, tb, &status); checkStatus(__LINE__, U_ZERO_ERROR, status); - string = ures_getString(tb, &strLen, &status); + string = tres_getString(tb, -1, NULL, &strLen, &status); checkStatus(__LINE__, U_ZERO_ERROR, status); if(U_FAILURE(status)) { @@ -2101,28 +2162,34 @@ static void TestResourceLevelAliasing(void) { log_err("Referencing alias didn't get the right string\n"); } - /* check whether the binary collation data is properly referenced by an alias */ - uk = ures_findResource("th/BreakDictionaryData", uk, &status); - binSequence = ures_getBinary(uk, &binSeqLen, &status); - - tb = ures_getByKey(aliasB, "BreakDictionaryData", tb, &status); - binary = ures_getBinary(tb, &binLen, &status); - - if(U_FAILURE(status)) { - log_err("%s trying to read binary BreakDictionaryData\n"); - } else if(binSeqLen != binLen || uprv_memcmp(binSequence, binary, binSeqLen) != 0) { - log_err("Referencing alias didn't get the right data\n"); + + { + UResourceBundle* ja = ures_open(U_ICUDATA_BRKITR,"ja", &status); + const UChar *got = NULL, *exp=NULL; + int32_t gotLen = 0, expLen=0; + ja = ures_getByKey(ja, "boundaries", ja, &status); + exp = tres_getString(ja, -1, "word", &expLen, &status); + + tb = ures_getByKey(aliasB, "boundaries", tb, &status); + got = tres_getString(tb, -1, "word", &gotLen, &status); + + if(U_FAILURE(status)) { + log_err("%s trying to read str boundaries\n"); + } else if(gotLen != expLen || u_strncmp(exp, got, gotLen) != 0) { + log_err("Referencing alias didn't get the right data\n"); + } + ures_close(ja); + status = U_ZERO_ERROR; } - /* simple alias */ testtypes = ures_open(testdatapath, "testtypes", &status); strcpy(buffer, "menu/file/open"); s = buffer; uk = ures_findSubResource(testtypes, s, uk, &status); - sequence = ures_getString(uk, &seqLen, &status); + sequence = tres_getString(uk, -1, NULL, &seqLen, &status); tb = ures_getByKey(aliasB, "simplealias", tb, &status); - string = ures_getString(tb, &strLen, &status); + string = tres_getString(tb, -1, NULL, &strLen, &status); if(U_FAILURE(status) || seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) { log_err("Referencing alias didn't get the right string\n"); @@ -2132,10 +2199,10 @@ static void TestResourceLevelAliasing(void) { tb = ures_getByKey(aliasB, "zoneTests", tb, &status); tb = ures_getByKey(tb, "zoneAlias2", tb, &status); - string = ures_getString(tb, &strLen, &status); + string = tres_getString(tb, -1, NULL, &strLen, &status); en = ures_findResource("en/zoneStrings/3/0", en, &status); - sequence = ures_getString(en, &seqLen, &status); + sequence = tres_getString(en, -1, NULL, &seqLen, &status); if(U_FAILURE(status) || seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) { log_err("Referencing alias didn't get the right string\n"); @@ -2166,23 +2233,35 @@ static void TestResourceLevelAliasing(void) { log_err("Couldn't get testGetStringByKeyAliasing resource\n"); } for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) { - result = ures_getStringByKey(tb, keys[i], &resultLen, &status); + result = tres_getString(tb, -1, keys[i], &resultLen, &status); + if(U_FAILURE(status)){ + log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status)); + continue; + } uBufferLen = u_unescape(strings[i], uBuffer, 256); if(resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { log_err("Didn't get correct string while accesing alias table by key (%s)\n", keys[i]); } } for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) { - result = ures_getStringByIndex(tb, i, &resultLen, &status); + result = tres_getString(tb, i, NULL, &resultLen, &status); + if(U_FAILURE(status)){ + log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status)); + continue; + } uBufferLen = u_unescape(strings[i], uBuffer, 256); - if(resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { + if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { log_err("Didn't get correct string while accesing alias table by index (%s)\n", strings[i]); } } for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) { result = ures_getNextString(tb, &resultLen, &key, &status); + if(U_FAILURE(status)){ + log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status)); + continue; + } uBufferLen = u_unescape(strings[i], uBuffer, 256); - if(resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { + if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { log_err("Didn't get correct string while iterating over alias table (%s)\n", strings[i]); } } @@ -2191,20 +2270,35 @@ static void TestResourceLevelAliasing(void) { log_err("Couldn't get testGetStringByIndexAliasing resource\n"); } for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) { - result = ures_getStringByIndex(tb, i, &resultLen, &status); + result = tres_getString(tb, i, NULL, &resultLen, &status); + if(U_FAILURE(status)){ + log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status)); + continue; + } uBufferLen = u_unescape(strings[i], uBuffer, 256); - if(resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { + if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { log_err("Didn't get correct string while accesing alias by index in an array (%s)\n", strings[i]); } } for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) { result = ures_getNextString(tb, &resultLen, &key, &status); + if(U_FAILURE(status)){ + log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status)); + continue; + } uBufferLen = u_unescape(strings[i], uBuffer, 256); - if(resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { + if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) { log_err("Didn't get correct string while iterating over aliases in an array (%s)\n", strings[i]); } } } + tb = ures_getByKey(aliasB, "testAliasToTree", tb, &status); + if(U_FAILURE(status)){ + log_err("Fetching the resource with key \"testAliasToTree\" failed. Error: %s\n", u_errorName(status)); + } + if (strcmp(ures_getKey(tb), "collations") != 0) { + log_err("ures_getKey(aliasB) unexpectedly returned %s instead of \"collations\"\n", ures_getKey(tb)); + } cleanup: ures_close(aliasB); ures_close(tb); @@ -2220,8 +2314,13 @@ static void TestDirectAccess(void) { char buffer[100]; char *s; + /*const char* testdatapath=loadTestData(&status); + if(U_FAILURE(status)){ + log_err("Could not load testdata.dat %s \n",myErrorName(status)); + return; + }*/ - t = ures_findResource("en/zoneStrings/3/2", t, &status); + t = ures_findResource("/testdata/te/zoneStrings/3/2", t, &status); if(U_FAILURE(status)) { log_err("Couldn't access indexed resource, error %s\n", u_errorName(status)); status = U_ZERO_ERROR; @@ -2231,7 +2330,7 @@ static void TestDirectAccess(void) { log_err("Got a strange key, expected NULL, got %s\n", key); } } - t = ures_findResource("en/zoneStrings/3", t, &status); + t = ures_findResource("en/calendar/gregorian/DateTimePatterns/3", t, &status); if(U_FAILURE(status)) { log_err("Couldn't access indexed resource, error %s\n", u_errorName(status)); status = U_ZERO_ERROR; @@ -2275,7 +2374,7 @@ static void TestDirectAccess(void) { } } - t = ures_findResource("root/calendar/islamic-civil/DateTimePatterns", t, &status); + t = ures_findResource("root/calendar/islamic-civil/DateTime", t, &status); if(U_SUCCESS(status)) { log_err("This resource does not exist. How did it get here?\n"); } @@ -2292,7 +2391,7 @@ static void TestDirectAccess(void) { t2 = ures_open(NULL, "he", &status); t2 = ures_getByKeyWithFallback(t2, "calendar", t2, &status); t2 = ures_getByKeyWithFallback(t2, "islamic-civil", t2, &status); - t2 = ures_getByKeyWithFallback(t2, "DateTimePatterns", t2, &status); + t2 = ures_getByKeyWithFallback(t2, "DateTime", t2, &status); if(U_SUCCESS(status)) { log_err("This resource does not exist. How did it get here?\n"); } @@ -2313,7 +2412,7 @@ static void TestDirectAccess(void) { t2 = ures_open(NULL, "root", &status); t2 = ures_getByKeyWithFallback(t2, "calendar", t2, &status); t2 = ures_getByKeyWithFallback(t2, "islamic-civil", t2, &status); - t2 = ures_getByKeyWithFallback(t2, "DateTimePatterns", t2, &status); + t2 = ures_getByKeyWithFallback(t2, "DateTime", t2, &status); if(U_SUCCESS(status)) { log_err("This resource does not exist. How did it get here?\n"); } @@ -2417,10 +2516,10 @@ static void TestGetFunctionalEquivalentOf(const char *path, const char *resName, log_verbose("got: %c %s\n", expectAvail?'t':'f',equivLocale); if((gotAvail != expectAvail) || strcmp(equivLocale, expectLocale)) { - log_err("FAIL: got avail=%c, loc=%s but expected #%d: %c\t%s\t-> loc=%s\n", - gotAvail?'t':'f', equivLocale, - i/3, - expectAvail?'t':'f', inLocale, expectLocale); + log_err("FAIL: got avail=%c, loc=%s but expected #%d: %c\t%s\t-> loc=%s\n", + gotAvail?'t':'f', equivLocale, + i/3, + expectAvail?'t':'f', inLocale, expectLocale); } } @@ -2454,13 +2553,21 @@ static void TestGetFunctionalEquivalent(void) { "t", "hi@collation=direct", "hi@collation=direct", "f", "hi_AU@collation=direct;currency=CHF;calendar=buddhist", "hi@collation=direct", "f", "hi_AU@collation=standard;currency=CHF;calendar=buddhist", "hi", - NULL + "t", "de_DE@collation=pinyin", "de", /* bug 4582 tests */ + "f", "de_DE_BONN@collation=pinyin", "de", + "t", "nl", "root", + "t", "nl_NL", "root", + "f", "nl_NL_EEXT", "root", + "t", "nl@collation=stroke", "root", + "t", "nl_NL@collation=stroke", "root", + "f", "nl_NL_EEXT@collation=stroke", "root", + NULL }; static const char *calCases[] = { /* avail locale equiv */ - "t", "en_US", "en@calendar=gregorian", - "f", "ja_JP_TOKYO", "ja@calendar=gregorian", + "t", "en_US_POSIX", "en_US@calendar=gregorian", + "f", "ja_JP_TOKYO", "ja_JP@calendar=gregorian", "f", "ja_JP_TOKYO@calendar=japanese", "ja@calendar=japanese", "t", "sr@calendar=gregorian", "sr@calendar=gregorian", "t", "en", "en@calendar=gregorian", @@ -2494,3 +2601,329 @@ static void TestGetFunctionalEquivalent(void) { #endif } +static void TestXPath(void) { + UErrorCode status = U_ZERO_ERROR; + UResourceBundle *rb = NULL, *alias = NULL; + int32_t len = 0; + const UChar* result = NULL; + const UChar expResult[] = { 0x0063, 0x006F, 0x0072, 0x0072, 0x0065, 0x0063, 0x0074, 0x0000 }; /* "correct" */ + /*const UChar expResult[] = { 0x0074, 0x0065, 0x0069, 0x006E, 0x0064, 0x0065, 0x0073, 0x0074, 0x0000 }; *//*teindest*/ + + const char *testdatapath=loadTestData(&status); + if(U_FAILURE(status)) + { + log_err("Could not load testdata.dat %s \n",myErrorName(status)); + return; + } + + log_verbose("Testing ures_open()......\n"); + + rb = ures_open(testdatapath, "te_IN", &status); + if(U_FAILURE(status)) { + log_err("Could not open te_IN (%s)\n", myErrorName(status)); + return; + } + alias = ures_getByKey(rb, "rootAliasClient", alias, &status); + if(U_FAILURE(status)) { + log_err("Couldn't find the aliased resource (%s)\n", myErrorName(status)); + ures_close(rb); + return; + } + + result = tres_getString(alias, -1, NULL, &len, &status); + if(U_FAILURE(status) || result == NULL || u_strcmp(result, expResult)) { + log_err("Couldn't get correct string value (%s)\n", myErrorName(status)); + } + + alias = ures_getByKey(rb, "aliasClient", alias, &status); + if(U_FAILURE(status)) { + log_err("Couldn't find the aliased resource (%s)\n", myErrorName(status)); + ures_close(rb); + return; + } + + result = tres_getString(alias, -1, NULL, &len, &status); + if(U_FAILURE(status) || result == NULL || u_strcmp(result, expResult)) { + log_err("Couldn't get correct string value (%s)\n", myErrorName(status)); + } + + alias = ures_getByKey(rb, "nestedRootAliasClient", alias, &status); + if(U_FAILURE(status)) { + log_err("Couldn't find the aliased resource (%s)\n", myErrorName(status)); + ures_close(rb); + return; + } + + result = tres_getString(alias, -1, NULL, &len, &status); + if(U_FAILURE(status) || result == NULL || u_strcmp(result, expResult)) { + log_err("Couldn't get correct string value (%s)\n", myErrorName(status)); + } + + ures_close(alias); + ures_close(rb); +} +static void TestCLDRStyleAliases(void) { + UErrorCode status = U_ZERO_ERROR; + UResourceBundle *rb = NULL, *alias = NULL, *a=NULL; + int32_t i, len; + char resource[256]; + const UChar *result = NULL; + UChar expected[256]; + const char *expects[7] = { "", "a41", "a12", "a03", "ar4" }; + const char *testdatapath=loadTestData(&status); + if(U_FAILURE(status)) { + log_err("Could not load testdata.dat %s \n",myErrorName(status)); + return; + } + log_verbose("Testing CLDR style aliases......\n"); + + rb = ures_open(testdatapath, "te_IN_REVISED", &status); + if(U_FAILURE(status)) { + log_err("Could not open te_IN (%s)\n", myErrorName(status)); + return; + } + alias = ures_getByKey(rb, "a", alias, &status); + if(U_FAILURE(status)) { + log_err("Couldn't find the aliased with name \"a\" resource (%s)\n", myErrorName(status)); + ures_close(rb); + return; + } + for(i = 1; i < 5 ; i++) { + resource[0]='a'; + resource[1]='0'+i; + resource[2]=0; + /* instead of sprintf(resource, "a%i", i); */ + a = ures_getByKeyWithFallback(alias, resource, a, &status); + result = tres_getString(a, -1, NULL, &len, &status); + u_charsToUChars(expects[i], expected, strlen(expects[i])+1); + if(U_FAILURE(status) || !result || u_strcmp(result, expected)) { + log_err("CLDR style aliases failed resource with name \"%s\" resource, exp %s, got %S (%s)\n", resource, expects[i], result, myErrorName(status)); + status = U_ZERO_ERROR; + } + } + + ures_close(a); + ures_close(alias); + ures_close(rb); +} + +static void TestFallbackCodes(void) { + UErrorCode status = U_ZERO_ERROR; + const char *testdatapath=loadTestData(&status); + + UResourceBundle *res = ures_open(testdatapath, "te_IN", &status); + + UResourceBundle *r = NULL, *fall = NULL; + + r = ures_getByKey(res, "tagged_array_in_Root_te_te_IN", r, &status); + + status = U_ZERO_ERROR; + fall = ures_getByKeyWithFallback(r, "tag2", fall, &status); + + if(status != U_ZERO_ERROR) { + log_err("Expected error code to be U_ZERO_ERROR, got %s\n", u_errorName(status)); + status = U_ZERO_ERROR; + } + + fall = ures_getByKeyWithFallback(r, "tag7", fall, &status); + + if(status != U_USING_FALLBACK_WARNING) { + log_err("Expected error code to be U_USING_FALLBACK_WARNING, got %s\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + + fall = ures_getByKeyWithFallback(r, "tag1", fall, &status); + + if(status != U_USING_DEFAULT_WARNING) { + log_err("Expected error code to be U_USING_DEFAULT_WARNING, got %s\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + + ures_close(fall); + ures_close(r); + ures_close(res); +} + +/* This test will crash if this doesn't work. Results don't need testing. */ +static void TestStackReuse(void) { + UResourceBundle table; + UErrorCode errorCode = U_ZERO_ERROR; + UResourceBundle *rb = ures_open(NULL, "en_US", &errorCode); + + if(U_FAILURE(errorCode)) { + log_err("Could not load en_US locale. status=%s\n",myErrorName(errorCode)); + return; + } + ures_initStackObject(&table); + ures_getByKeyWithFallback(rb, "Types", &table, &errorCode); + ures_getByKeyWithFallback(&table, "collation", &table, &errorCode); + ures_close(rb); + ures_close(&table); +} + +/* Test ures_getUTF8StringXYZ() --------------------------------------------- */ + +/* + * Replace most ures_getStringXYZ() with this function which wraps the + * desired call and also calls the UTF-8 variant and checks that it works. + */ +extern const UChar * +tres_getString(const UResourceBundle *resB, + int32_t index, const char *key, + int32_t *length, + UErrorCode *status) { + char buffer8[16]; + char *p8; + const UChar *s16; + const char *s8; + UChar32 c16, c8; + int32_t length16, length8, i16, i8; + UBool forceCopy; + + if(length == NULL) { + length = &length16; + } + if(index >= 0) { + s16 = ures_getStringByIndex(resB, index, length, status); + } else if(key != NULL) { + s16 = ures_getStringByKey(resB, key, length, status); + } else { + s16 = ures_getString(resB, length, status); + } + if(U_FAILURE(*status)) { + return s16; + } + length16 = *length; + + /* try the UTF-8 variant of ures_getStringXYZ() */ + for(forceCopy = FALSE; forceCopy <= TRUE; ++forceCopy) { + p8 = buffer8; + length8 = (int32_t)sizeof(buffer8); + if(index >= 0) { + s8 = ures_getUTF8StringByIndex(resB, index, p8, &length8, forceCopy, status); + } else if(key != NULL) { + s8 = ures_getUTF8StringByKey(resB, key, p8, &length8, forceCopy, status); + } else { + s8 = ures_getUTF8String(resB, p8, &length8, forceCopy, status); + } + if(*status == U_INVALID_CHAR_FOUND) { + /* the UTF-16 string contains an unpaired surrogate, can't test UTF-8 variant */ + return s16; + } + if(*status == U_BUFFER_OVERFLOW_ERROR) { + *status = U_ZERO_ERROR; + p8 = (char *)malloc(++length8); + if(p8 == NULL) { + return s16; + } + if(index >= 0) { + s8 = ures_getUTF8StringByIndex(resB, index, p8, &length8, forceCopy, status); + } else if(key != NULL) { + s8 = ures_getUTF8StringByKey(resB, key, p8, &length8, forceCopy, status); + } else { + s8 = ures_getUTF8String(resB, p8, &length8, forceCopy, status); + } + } + if(U_FAILURE(*status)) { + /* something unexpected happened */ + if(p8 != buffer8) { + free(p8); + } + return s16; + } + + if(forceCopy && s8 != p8) { + log_err("ures_getUTF8String(%p, %ld, '%s') did not write the string to dest\n", + resB, (long)index, key); + } + + /* verify NUL-termination */ + if((p8 != buffer8 || length8 < sizeof(buffer8)) && s8[length8] != 0) { + log_err("ures_getUTF8String(%p, %ld, '%s') did not NUL-terminate\n", + resB, (long)index, key); + } + /* verify correct string */ + i16 = i8 = 0; + while(i16 < length16 && i8 < length8) { + U16_NEXT(s16, i16, length16, c16); + U8_NEXT(s8, i8, length8, c8); + if(c16 != c8) { + log_err("ures_getUTF8String(%p, %ld, '%s') got a bad string, c16=U+%04lx!=U+%04lx=c8 before i16=%ld\n", + resB, (long)index, key, (long)c16, (long)c8, (long)i16); + } + } + /* verify correct length */ + if(i16 < length16) { + log_err("ures_getUTF8String(%p, %ld, '%s') UTF-8 string too short, length8=%ld, length16=%ld\n", + resB, (long)index, key, (long)length8, (long)length16); + } + if(i8 < length8) { + log_err("ures_getUTF8String(%p, %ld, '%s') UTF-8 string too long, length8=%ld, length16=%ld\n", + resB, (long)index, key, (long)length8, (long)length16); + } + + /* clean up */ + if(p8 != buffer8) { + free(p8); + } + } + return s16; +} + +/* + * API tests for ures_getUTF8String(). + * Most cases are handled by tres_getString(), which leaves argument checking + * to be tested here. + * Since the variants share most of their implementation, we only need to test + * one of them. + * We also need not test for checking arguments which will be checked by the + * UTF-16 ures_getStringXYZ() that are called internally. + */ +static void +TestGetUTF8String() { + UResourceBundle *res; + const char *testdatapath; + char buffer8[16]; + const char *s8; + int32_t length8; + UErrorCode status; + + status = U_ZERO_ERROR; + testdatapath = loadTestData(&status); + if(U_FAILURE(status)) { + log_err("Could not load testdata.dat - %s\n", u_errorName(status)); + return; + } + + res = ures_open(testdatapath, "", &status); + if(U_FAILURE(status)) { + log_err("Unable to ures_open(testdata, \"\") - %s\n", u_errorName(status)); + return; + } + + /* one good call */ + status = U_ZERO_ERROR; + length8 = (int32_t)sizeof(buffer8); + s8 = ures_getUTF8StringByKey(res, "string_only_in_Root", buffer8, &length8, FALSE, &status); + if(status != U_ZERO_ERROR) { + log_err("ures_getUTF8StringByKey(testdata/root string) malfunctioned - %s\n", u_errorName(status)); + } + + /* negative capacity */ + status = U_ZERO_ERROR; + length8 = -1; + s8 = ures_getUTF8StringByKey(res, "string_only_in_Root", buffer8, &length8, FALSE, &status); + if(status != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("ures_getUTF8StringByKey(capacity<0) malfunctioned - %s\n", u_errorName(status)); + } + + /* capacity>0 but dest=NULL */ + status = U_ZERO_ERROR; + length8 = (int32_t)sizeof(buffer8); + s8 = ures_getUTF8StringByKey(res, "string_only_in_Root", NULL, &length8, FALSE, &status); + if(status != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("ures_getUTF8StringByKey(dest=NULL capacity>0) malfunctioned - %s\n", u_errorName(status)); + } + + ures_close(res); +} diff --git a/icuSources/test/cintltst/creststn.h b/icuSources/test/cintltst/creststn.h index 3f539232..f6becdb9 100644 --- a/icuSources/test/cintltst/creststn.h +++ b/icuSources/test/cintltst/creststn.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /*************************************************************************** @@ -18,8 +18,17 @@ /* C TEST FOR NEW RESOURCEBUNDLE API*/ #include "cintltst.h" - - +/* + * Test wrapper for ures_getStringXYZ(), for testing other variants of + * these functions as well. + * If index>=0, calls ures_getStringByIndex(). + * If key!=NULL, calls ures_getStringByKey(). + */ +extern const UChar * +tres_getString(const UResourceBundle *resB, + int32_t index, const char *key, + int32_t *length, + UErrorCode *status); void addNEWResourceBundleTest(TestNode**); @@ -60,6 +69,10 @@ static void TestErrorCodes(void); static void TestJB3763(void); +static void TestXPath(void); + +static void TestStackReuse(void); + /** * extensive subtests called by TestResourceBundles **/ diff --git a/icuSources/test/cintltst/cstrcase.c b/icuSources/test/cintltst/cstrcase.c index 2960670f..cdbb8535 100644 --- a/icuSources/test/cintltst/cstrcase.c +++ b/icuSources/test/cintltst/cstrcase.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -16,19 +16,20 @@ * Test file for string casing C API functions. */ +#include #include "unicode/utypes.h" #include "unicode/uchar.h" #include "unicode/ustring.h" #include "unicode/uloc.h" #include "unicode/ubrk.h" +#include "unicode/ucasemap.h" #include "cmemory.h" #include "cintltst.h" -#include "cucdtst.h" /* test string case mapping functions --------------------------------------- */ -U_CFUNC void -TestCaseLower() { +static void +TestCaseLower(void) { static const UChar beforeLower[]= { 0x61, 0x42, 0x49, 0x3a3, 0xdf, 0x3a3, 0x2f, 0xd93f, 0xdfff }, @@ -125,8 +126,8 @@ buffer[length]==0 ? "yes" : "no", } } -U_CFUNC void -TestCaseUpper() { +static void +TestCaseUpper(void) { static const UChar beforeUpper[]= { 0x61, 0x42, 0x69, 0x3c2, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xd93f, 0xdfff }, @@ -221,8 +222,8 @@ TestCaseUpper() { #if !UCONFIG_NO_BREAK_ITERATION -U_CFUNC void -TestCaseTitle() { +static void +TestCaseTitle(void) { static const UChar beforeTitle[]= { 0x61, 0x42, 0x20, 0x69, 0x3c2, 0x20, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xd93f, 0xdfff }, @@ -329,14 +330,24 @@ TestCaseTitle() { /* test case folding and case-insensitive string compare -------------------- */ -U_CFUNC void -TestCaseFolding() { +static void +TestCaseFolding(void) { + /* + * CaseFolding.txt says about i and its cousins: + * 0049; C; 0069; # LATIN CAPITAL LETTER I + * 0049; T; 0131; # LATIN CAPITAL LETTER I + * + * 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE + * 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE + * That's all. + * See CaseFolding.txt and the Unicode Standard for how to apply the case foldings. + */ static const UChar32 simple[]={ /* input, default, exclude special i */ 0x61, 0x61, 0x61, 0x49, 0x69, 0x131, - 0x130, 0x69, 0x69, + 0x130, 0x130, 0x69, 0x131, 0x131, 0x131, 0xdf, 0xdf, 0xdf, 0xfb03, 0xfb03, 0xfb03, @@ -545,8 +556,8 @@ TestCaseFolding() { } } -U_CFUNC void -TestCaseCompare() { +static void +TestCaseCompare(void) { static const UChar mixed[]= { 0x61, 0x42, 0x131, 0x3a3, 0xdf, 0xfb03, 0xd93f, 0xdfff, 0 }, @@ -633,3 +644,151 @@ TestCaseCompare() { log_err("error: u_memcasecmp(mixed, different, 5, default)=%ld instead of positive\n", result); } } + +/* test UCaseMap ------------------------------------------------------------ */ + +/* + * API test for UCaseMap; + * test cases for actual case mappings using UCaseMap see + * intltest utility/UnicodeStringTest/StringCaseTest/TestCasing + */ +static void +TestUCaseMap(void) { + static const char + aBc[] ={ 0x61, 0x42, 0x63, 0 }, + abc[] ={ 0x61, 0x62, 0x63, 0 }, + ABCg[]={ 0x41, 0x42, 0x43, 0x67, 0 }, + defg[]={ 0x64, 0x65, 0x66, 0x67, 0 }; + char utf8Out[8]; + + UCaseMap *csm; + const char *locale; + uint32_t options; + int32_t length; + UErrorCode errorCode; + + errorCode=U_ZERO_ERROR; + csm=ucasemap_open("tur", 0xa5, &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucasemap_open(\"tur\") failed - %s\n", u_errorName(errorCode)); + return; + } + locale=ucasemap_getLocale(csm); + if(0!=strcmp(locale, "tr")) { + log_err("ucasemap_getLocale(ucasemap_open(\"tur\"))==%s!=\"tr\"\n", locale); + } + /* overly long locale IDs get truncated to their language code to avoid unnecessary allocation */ + ucasemap_setLocale(csm, "I-kLInGOn-the-quick-brown-fox-jumps-over-the-lazy-dog", &errorCode); + locale=ucasemap_getLocale(csm); + if(0!=strcmp(locale, "i-klingon")) { + log_err("ucasemap_getLocale(ucasemap_setLocale(\"I-kLInGOn-the-quick-br...\"))==%s!=\"i-klingon\"\n", locale); + } + + errorCode=U_ZERO_ERROR; + options=ucasemap_getOptions(csm); + if(options!=0xa5) { + log_err("ucasemap_getOptions(ucasemap_open(0xa5))==0x%lx!=0xa5\n", (long)options); + } + ucasemap_setOptions(csm, 0x333333, &errorCode); + options=ucasemap_getOptions(csm); + if(options!=0x333333) { + log_err("ucasemap_getOptions(ucasemap_setOptions(0x333333))==0x%lx!=0x333333\n", (long)options); + } + + /* test case mapping API; not all permutations necessary due to shared implementation code */ + + /* NUL terminated source */ + errorCode=U_ZERO_ERROR; + length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); + if(U_FAILURE(errorCode) || length!=3 || 0!=strcmp(abc, utf8Out)) { + log_err("ucasemap_utf8ToLower(aBc\\0) failed\n"); + } + + /* incoming failure code */ + errorCode=U_PARSE_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); + if(errorCode!=U_PARSE_ERROR || 0!=strcmp(defg, utf8Out)) { + log_err("ucasemap_utf8ToLower(failure) failed\n"); + } + + /* overlapping input & output */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, aBc); + length=ucasemap_utf8ToUpper(csm, utf8Out, 2, utf8Out+1, 2, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(aBc, utf8Out)) { + log_err("ucasemap_utf8ToUpper(overlap 1) failed\n"); + } + + /* overlap in the other direction */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, aBc); + length=ucasemap_utf8ToUpper(csm, utf8Out+1, 2, utf8Out, 2, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(aBc, utf8Out)) { + log_err("ucasemap_utf8ToUpper(overlap 2) failed\n"); + } + + /* NULL destination */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToLower(csm, NULL, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { + log_err("ucasemap_utf8ToLower(dest=NULL) failed\n"); + } + + /* destCapacity<0 */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToLower(csm, utf8Out, -2, aBc, -1, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { + log_err("ucasemap_utf8ToLower(destCapacity<0) failed\n"); + } + + /* NULL source */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), NULL, -1, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { + log_err("ucasemap_utf8ToLower(src=NULL) failed\n"); + } + + /* srcLength<-1 */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -2, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { + log_err("ucasemap_utf8ToLower(srcLength<-1) failed\n"); + } + + /* buffer overflow */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToUpper(csm, utf8Out, 2, aBc, 3, &errorCode); + if(errorCode!=U_BUFFER_OVERFLOW_ERROR || length!=3 || 0!=strcmp(defg+2, utf8Out+2)) { + log_err("ucasemap_utf8ToUpper(overflow) failed\n"); + } + + /* dest not terminated (leaves g from defg alone) */ + errorCode=U_ZERO_ERROR; + strcpy(utf8Out, defg); + length=ucasemap_utf8ToUpper(csm, utf8Out, 3, aBc, 3, &errorCode); + if(errorCode!=U_STRING_NOT_TERMINATED_WARNING || length!=3 || 0!=strcmp(ABCg, utf8Out)) { + log_err("ucasemap_utf8ToUpper(overflow) failed\n"); + } + + ucasemap_close(csm); +} + +void addCaseTest(TestNode** root); + +void addCaseTest(TestNode** root) { + /* cstrcase.c functions, declared in cucdtst.h */ + addTest(root, &TestCaseLower, "tsutil/cstrcase/TestCaseLower"); + addTest(root, &TestCaseUpper, "tsutil/cstrcase/TestCaseUpper"); +#if !UCONFIG_NO_BREAK_ITERATION + addTest(root, &TestCaseTitle, "tsutil/cstrcase/TestCaseTitle"); +#endif + addTest(root, &TestCaseFolding, "tsutil/cstrcase/TestCaseFolding"); + addTest(root, &TestCaseCompare, "tsutil/cstrcase/TestCaseCompare"); + addTest(root, &TestUCaseMap, "tsutil/cstrcase/TestUCaseMap"); +} diff --git a/icuSources/test/cintltst/cstrtest.c b/icuSources/test/cintltst/cstrtest.c index 99dcb37b..ea6fe5cb 100644 --- a/icuSources/test/cintltst/cstrtest.c +++ b/icuSources/test/cintltst/cstrtest.c @@ -95,6 +95,14 @@ static void TestAPI(void) if(uprv_stricmp(src, "1AF") != 0 || i != 3){ log_err("FAIL: ****integerToString(src, 431, 16); failed. Expected: \"1AF\", Got: %s\n", src); } + i = T_CString_int64ToString(src, U_INT64_MAX, 10); + if(uprv_strcmp(src, "9223372036854775807") != 0 || i != 19){ + log_err("FAIL: ****integerToString(src, 9223372036854775807, 10); failed. Got: %s\n", src); + } + i = T_CString_int64ToString(src, U_INT64_MAX, 16); + if(uprv_stricmp(src, "7FFFFFFFFFFFFFFF") != 0 || i != 16){ + log_err("FAIL: ****integerToString(src, 7FFFFFFFFFFFFFFF, 16); failed. Got: %s\n", src); + } uprv_strcpy(src, "this is lower case"); if(T_CString_stricmp(src, "THIS is lower CASE") != 0){ @@ -257,6 +265,9 @@ TestInvariant() { if(!uprv_isInvariantUString(invariantUChars, -1)) { log_err("uprv_isInvariantUString(invariantUChars) failed\n"); } + if(!uprv_isInvariantString(invariantChars+strlen(invariantChars), 1)) { + log_err("uprv_isInvariantString(\"\\0\") failed\n"); + } for(i=0; i<(sizeof(variantChars)-1); ++i) { if(uprv_isInvariantString(variantChars+i, 1)) { diff --git a/icuSources/test/cintltst/cucdapi.c b/icuSources/test/cintltst/cucdapi.c index 287f9077..4a919c40 100644 --- a/icuSources/test/cintltst/cucdapi.c +++ b/icuSources/test/cintltst/cucdapi.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -11,6 +11,8 @@ #include "cintltst.h" #include "cucdapi.h" +#define ARRAY_SIZE(array) (int32_t)(sizeof array / sizeof array[0]) + void TestUScriptCodeAPI(){ int i =0; int numErrors =0; @@ -84,7 +86,7 @@ void TestUScriptCodeAPI(){ { UErrorCode err = U_ZERO_ERROR; int32_t capacity=0; - UScriptCode jaCode[]={ USCRIPT_KATAKANA,USCRIPT_HIRAGANA,USCRIPT_HAN}; + UScriptCode jaCode[]={USCRIPT_KATAKANA, USCRIPT_HIRAGANA, USCRIPT_HAN }; UScriptCode script[10]={USCRIPT_INVALID_CODE}; int32_t num = uscript_getCode("ja",script,capacity, &err); /* preflight */ @@ -194,7 +196,7 @@ void TestUScriptCodeAPI(){ 0x0001D1AA, /* USCRIPT_INHERITED*/ 0x00020000, /* USCRIPT_HAN*/ 0x00000D02, /* USCRIPT_MALAYALAM*/ - 0x00000D00, /* USCRIPT_COMMON */ + 0x00000D00, /* USCRIPT_UNKNOWN (new Zzzz value in Unicode 5.0) */ 0x00000000, /* USCRIPT_COMMON*/ 0x0001D169, /* USCRIPT_INHERITED*/ 0x0001D182, /* USCRIPT_INHERITED*/ @@ -221,7 +223,7 @@ void TestUScriptCodeAPI(){ USCRIPT_INHERITED, USCRIPT_HAN , USCRIPT_MALAYALAM, - USCRIPT_COMMON, + USCRIPT_UNKNOWN, USCRIPT_COMMON, USCRIPT_INHERITED , USCRIPT_INHERITED , @@ -283,10 +285,59 @@ void TestUScriptCodeAPI(){ for(i=0; (UScriptCode)i< USCRIPT_CODE_LIMIT; i++){ const char* name = uscript_getName((UScriptCode)i); if(name==NULL || strcmp(name,"")==0){ - log_err("uscript_getName failed for code : %i\n",i); + log_err("uscript_getName failed for code %i: name is NULL or \"\"\n",i); } } } - + { + /* + * These script codes were originally added to ICU pre-3.6, so that ICU would + * have all ISO 15924 script codes. ICU was then based on Unicode 4.1. + * These script codes were added with only short names because we don't + * want to invent long names ourselves. + * Unicode 5 and later encode some of these scripts and give them long names. + * Whenever this happens, the long script names here need to be updated. + */ + static const char* expectedLong[] = { + "Balinese", "Batk", "Blis", "Brah", "Cham", "Cirt", "Cyrs", "Egyd", "Egyh", "Egyp", + "Geok", "Hans", "Hant", "Hmng", "Hung", "Inds", "Java", "Kali", "Latf", "Latg", + "Lepc", "Lina", "Mand", "Maya", "Mero", "Nko", "Orkh", "Perm", "Phags_Pa", "Phoenician", + "Plrd", "Roro", "Sara", "Syre", "Syrj", "Syrn", "Teng", "Vaii", "Visp", "Cuneiform", + "Zxxx", "Unknown", + }; + static const char* expectedShort[] = { + "Bali", "Batk", "Blis", "Brah", "Cham", "Cirt", "Cyrs", "Egyd", "Egyh", "Egyp", + "Geok", "Hans", "Hant", "Hmng", "Hung", "Inds", "Java", "Kali", "Latf", "Latg", + "Lepc", "Lina", "Mand", "Maya", "Mero", "Nkoo", "Orkh", "Perm", "Phag", "Phnx", + "Plrd", "Roro", "Sara", "Syre", "Syrj", "Syrn", "Teng", "Vaii", "Visp", "Xsux", + "Zxxx", "Zzzz", + }; + int32_t j = 0; + for(i=USCRIPT_BALINESE; (UScriptCode)i1){ + log_err("uscript_getCode did not return expected number of codes for script %s. EXPECTED: 1 GOT: %i\n", expectedShort[i], len); + } + if(fillIn[0]!= (UScriptCode)(USCRIPT_BALINESE+i)){ + log_err("uscript_getCode did not return expected code for script %s. EXPECTED: %i GOT: %i\n", expectedShort[i], (USCRIPT_BALINESE+i), fillIn[0] ); + } + } + } } diff --git a/icuSources/test/cintltst/cucdtst.c b/icuSources/test/cintltst/cucdtst.c index 21077a47..0aa15aff 100644 --- a/icuSources/test/cintltst/cucdtst.c +++ b/icuSources/test/cintltst/cucdtst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -27,6 +27,7 @@ #include "putilimp.h" #include "uparse.h" #include "ucase.h" +#include "ubidi_props.h" #include "uprops.h" #include "uset_imp.h" #include "usc_impl.h" @@ -58,11 +59,50 @@ static void TestPropertyNames(void); static void TestPropertyValues(void); static void TestConsistency(void); static void TestUCase(void); +static void TestUBiDiProps(void); +static void TestCaseFolding(void); /* internal methods used */ static int32_t MakeProp(char* str); static int32_t MakeDir(char* str); +/* helpers ------------------------------------------------------------------ */ + +static void +parseUCDFile(const char *filename, + char *fields[][2], int32_t fieldCount, + UParseLineFn *lineFn, void *context, + UErrorCode *pErrorCode) { + char path[256]; + char backupPath[256]; + + if(U_FAILURE(*pErrorCode)) { + return; + } + + /* Look inside ICU_DATA first */ + strcpy(path, u_getDataDirectory()); + strcat(path, ".." U_FILE_SEP_STRING "unidata" U_FILE_SEP_STRING); + strcat(path, filename); + + /* As a fallback, try to guess where the source data was located + * at the time ICU was built, and look there. + */ + strcpy(backupPath, ctest_dataSrcDir()); + strcat(backupPath, U_FILE_SEP_STRING); + strcat(backupPath, "unidata" U_FILE_SEP_STRING); + strcat(backupPath, filename); + + u_parseDelimitedFile(path, ';', fields, fieldCount, lineFn, context, pErrorCode); + if(*pErrorCode==U_FILE_ACCESS_ERROR) { + *pErrorCode=U_ZERO_ERROR; + u_parseDelimitedFile(backupPath, ';', fields, fieldCount, lineFn, context, pErrorCode); + } + if(U_FAILURE(*pErrorCode)) { + log_err("error parsing %s: %s\n", filename, u_errorName(*pErrorCode)); + } +} + /* test data ---------------------------------------------------------------- */ static const UChar LAST_CHAR_CODE_IN_FILE = 0xFFFD; @@ -147,6 +187,8 @@ void addUnicodeTest(TestNode** root) addTest(root, &TestPropertyValues, "tsutil/cucdtst/TestPropertyValues"); addTest(root, &TestConsistency, "tsutil/cucdtst/TestConsistency"); addTest(root, &TestUCase, "tsutil/cucdtst/TestUCase"); + addTest(root, &TestUBiDiProps, "tsutil/cucdtst/TestUBiDiProps"); + addTest(root, &TestCaseFolding, "tsutil/cucdtst/TestCaseFolding"); } /*==================================================== */ @@ -169,7 +211,8 @@ Checks LetterLike Symbols which were previously a source of confusion */ for (i=0x2100;i<0x2138;i++) { - if(i!=0x2126 && i!=0x212a && i!=0x212b) + /* Unicode 5.0 adds lowercase U+214E (TURNED SMALL F) to U+2132 (TURNED CAPITAL F) */ + if(i!=0x2126 && i!=0x212a && i!=0x212b && i!=0x2132) { if (i != (int)u_tolower(i)) /* itself */ log_err("Failed case conversion with itself: U+%04x\n", i); @@ -282,57 +325,77 @@ Checks LetterLike Symbols which were previously a source of confusion } } -/* compare two sets, which is not easy with the current (ICU 2.4) C API... */ - +/* compare two sets and verify that their difference or intersection is empty */ static UBool showADiffB(const USet *a, const USet *b, const char *a_name, const char *b_name, UBool expect, UBool diffIsError) { + USet *aa; int32_t i, start, end, length; - UBool equal; UErrorCode errorCode; + /* + * expect: + * TRUE -> a-b should be empty, that is, b should contain all of a + * FALSE -> a&b should be empty, that is, a should contain none of b (and vice versa) + */ + if(expect ? uset_containsAll(b, a) : uset_containsNone(a, b)) { + return TRUE; + } + + /* clone a to aa because a is const */ + aa=uset_open(1, 0); + if(aa==NULL) { + /* unusual problem - out of memory? */ + return FALSE; + } + uset_addAll(aa, a); + + /* compute the set in question */ + if(expect) { + /* a-b */ + uset_removeAll(aa, b); + } else { + /* a&b */ + uset_retainAll(aa, b); + } + + /* aa is not empty because of the initial tests above; show its contents */ errorCode=U_ZERO_ERROR; - equal=TRUE; i=0; for(;;) { - length=uset_getItem(a, i, &start, &end, NULL, 0, &errorCode); + length=uset_getItem(aa, i, &start, &end, NULL, 0, &errorCode); if(errorCode==U_INDEX_OUTOFBOUNDS_ERROR) { - return equal; /* done */ + break; /* done */ } if(U_FAILURE(errorCode)) { - log_err("error comparing %s with %s at item %d: %s\n", + log_err("error comparing %s with %s at difference item %d: %s\n", a_name, b_name, i, u_errorName(errorCode)); - return FALSE; + break; } if(length!=0) { - return equal; /* done with code points, got a string or -1 */ + break; /* done with code points, got a string or -1 */ } - if(expect!=uset_containsRange(b, start, end)) { - equal=FALSE; - while(start<=end) { - if(expect!=uset_contains(b, start)) { - if(diffIsError) { - if(expect) { - log_err("error: %s contains U+%04x but %s does not\n", a_name, start, b_name); - } else { - log_err("error: %s and %s both contain U+%04x but should not intersect\n", a_name, b_name, start); - } - } else { - if(expect) { - log_verbose("info: %s contains U+%04x but %s does not\n", a_name, start, b_name); - } else { - log_verbose("info: %s and %s both contain U+%04x but should not intersect\n", a_name, b_name, start); - } - } - } - ++start; + if(diffIsError) { + if(expect) { + log_err("error: %s contains U+%04x..U+%04x but %s does not\n", a_name, start, end, b_name); + } else { + log_err("error: %s and %s both contain U+%04x..U+%04x but should not intersect\n", a_name, b_name, start, end); + } + } else { + if(expect) { + log_verbose("info: %s contains U+%04x..U+%04x but %s does not\n", a_name, start, end, b_name); + } else { + log_verbose("info: %s and %s both contain U+%04x..U+%04x but should not intersect\n", a_name, b_name, start, end); } } ++i; } + + uset_close(aa); + return FALSE; } static UBool @@ -353,8 +416,12 @@ static UBool compareUSets(const USet *a, const USet *b, const char *a_name, const char *b_name, UBool diffIsError) { + /* + * Use an arithmetic & not a logical && so that both branches + * are always taken and all differences are shown. + */ return - showAMinusB(a, b, a_name, b_name, diffIsError) && + showAMinusB(a, b, a_name, b_name, diffIsError) & showAMinusB(b, a, b_name, a_name, diffIsError); } @@ -1157,8 +1224,6 @@ enumDefaultsRange(const void *context, UChar32 start, UChar32 limit, UCharCatego /* tests for several properties */ static void TestUnicodeData() { - char newPath[256]; - char backupPath[256]; UVersionInfo expectVersionArray; UVersionInfo versionArray; char *fields[15][2]; @@ -1166,17 +1231,6 @@ static void TestUnicodeData() UChar32 c; int8_t type; - /* Look inside ICU_DATA first */ - strcpy(newPath, u_getDataDirectory()); - strcat(newPath, ".." U_FILE_SEP_STRING "unidata" U_FILE_SEP_STRING "UnicodeData.txt"); - - /* As a fallback, try to guess where the source data was located - * at the time ICU was built, and look there. - */ - strcpy(backupPath, ctest_dataSrcDir()); - strcat(backupPath, U_FILE_SEP_STRING); - strcat(backupPath, "unidata" U_FILE_SEP_STRING "UnicodeData.txt"); - u_versionFromString(expectVersionArray, U_UNICODE_VERSION); u_getUnicodeVersion(versionArray); if(memcmp(versionArray, expectVersionArray, U_MAX_VERSION_LENGTH) != 0) @@ -1198,13 +1252,8 @@ static void TestUnicodeData() } errorCode=U_ZERO_ERROR; - u_parseDelimitedFile(newPath, ';', fields, 15, unicodeDataLineFn, NULL, &errorCode); - if(errorCode==U_FILE_ACCESS_ERROR) { - errorCode=U_ZERO_ERROR; - u_parseDelimitedFile(backupPath, ';', fields, 15, unicodeDataLineFn, NULL, &errorCode); - } + parseUCDFile("UnicodeData.txt", fields, 15, unicodeDataLineFn, NULL, &errorCode); if(U_FAILURE(errorCode)) { - log_err("error parsing UnicodeData.txt: %s\n", u_errorName(errorCode)); return; /* if we couldn't parse UnicodeData.txt, we should return */ } @@ -1656,7 +1705,8 @@ TestCharNames() { NULL, uset_add, uset_addRange, - uset_addString + uset_addString, + NULL /* don't need remove() */ }; sa.set=set; uprv_getCharNameCharacters(&sa); @@ -1754,6 +1804,16 @@ TestCharNames() { static void TestMirroring() { + USet *set; + UErrorCode errorCode; + + UChar32 start, end, c2, c3; + int32_t i; + + U_STRING_DECL(mirroredPattern, "[:Bidi_Mirrored:]", 17); + + U_STRING_INIT(mirroredPattern, "[:Bidi_Mirrored:]", 17); + log_verbose("Testing u_isMirrored()\n"); if(!(u_isMirrored(0x28) && u_isMirrored(0xbb) && u_isMirrored(0x2045) && u_isMirrored(0x232a) && !u_isMirrored(0x27) && !u_isMirrored(0x61) && !u_isMirrored(0x284) && !u_isMirrored(0x3400) @@ -1764,11 +1824,32 @@ TestMirroring() { log_verbose("Testing u_charMirror()\n"); if(!(u_charMirror(0x3c)==0x3e && u_charMirror(0x5d)==0x5b && u_charMirror(0x208d)==0x208e && u_charMirror(0x3017)==0x3016 && + u_charMirror(0xbb)==0xab && u_charMirror(0x2215)==0x29F5 && u_charMirror(0x29F5)==0x2215 && /* large delta between the code points */ u_charMirror(0x2e)==0x2e && u_charMirror(0x6f3)==0x6f3 && u_charMirror(0x301c)==0x301c && u_charMirror(0xa4ab)==0xa4ab ) ) { log_err("u_charMirror() does not work correctly\n"); } + + /* verify that Bidi_Mirroring_Glyph roundtrips */ + errorCode=U_ZERO_ERROR; + set=uset_openPattern(mirroredPattern, 17, &errorCode); + + if (U_FAILURE(errorCode)) { + log_data_err("uset_openPattern(mirroredPattern, 17, &errorCode) failed!"); + } else { + for(i=0; 0==uset_getItem(set, i, &start, &end, NULL, 0, &errorCode); ++i) { + do { + c2=u_charMirror(start); + c3=u_charMirror(c2); + if(c3!=start) { + log_err("u_charMirror() does not roundtrip: U+%04lx->U+%04lx->U+%04lx\n", (long)start, (long)c2, (long)c3); + } + } while(++start<=end); + } + } + + uset_close(set); } @@ -2156,7 +2237,7 @@ TestAdditionalProperties() { { 0xfa11, UCHAR_UNIFIED_IDEOGRAPH, TRUE }, { 0xfa12, UCHAR_UNIFIED_IDEOGRAPH, FALSE }, - { -1, 0x401, 0 }, + { -1, 0x401, 0 }, /* version break for Unicode 4.0.1 */ { 0x002e, UCHAR_S_TERM, TRUE }, { 0x0061, UCHAR_S_TERM, FALSE }, @@ -2171,9 +2252,10 @@ TestAdditionalProperties() { /* UCHAR_BIDI_CLASS tested for assigned characters in TestUnicodeData() */ /* test default Bidi classes for unassigned code points */ { 0x0590, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, - { 0x05a2, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, + { 0x05cf, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, { 0x05ed, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, - { 0x07f2, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, + { 0x07f2, UCHAR_BIDI_CLASS, U_DIR_NON_SPACING_MARK }, /* Nko, new in Unicode 5.0 */ + { 0x07fe, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, /* unassigned R */ { 0x08ba, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, { 0xfb37, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, { 0xfb42, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, @@ -2259,7 +2341,6 @@ TestAdditionalProperties() { { 0x232A, UCHAR_LINE_BREAK, U_LB_CLOSE_PUNCTUATION }, { 0x3401, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, { 0x4e02, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, - { 0xac03, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, { 0x20004, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, { 0xf905, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, { 0xdb7e, UCHAR_LINE_BREAK, U_LB_SURROGATE }, @@ -2309,6 +2390,49 @@ TestAdditionalProperties() { { 0xd7a4, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, + { -1, 0x410, 0 }, /* version break for Unicode 4.1 */ + + { 0x00d7, UCHAR_PATTERN_SYNTAX, TRUE }, + { 0xfe45, UCHAR_PATTERN_SYNTAX, TRUE }, + { 0x0061, UCHAR_PATTERN_SYNTAX, FALSE }, + + { 0x0020, UCHAR_PATTERN_WHITE_SPACE, TRUE }, + { 0x0085, UCHAR_PATTERN_WHITE_SPACE, TRUE }, + { 0x200f, UCHAR_PATTERN_WHITE_SPACE, TRUE }, + { 0x00a0, UCHAR_PATTERN_WHITE_SPACE, FALSE }, + { 0x3000, UCHAR_PATTERN_WHITE_SPACE, FALSE }, + + { 0x1d200, UCHAR_BLOCK, UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION }, + { 0x2c8e, UCHAR_BLOCK, UBLOCK_COPTIC }, + { 0xfe17, UCHAR_BLOCK, UBLOCK_VERTICAL_FORMS }, + + { 0x1a00, UCHAR_SCRIPT, USCRIPT_BUGINESE }, + { 0x2cea, UCHAR_SCRIPT, USCRIPT_COPTIC }, + { 0xa82b, UCHAR_SCRIPT, USCRIPT_SYLOTI_NAGRI }, + { 0x103d0, UCHAR_SCRIPT, USCRIPT_OLD_PERSIAN }, + + { 0xcc28, UCHAR_LINE_BREAK, U_LB_H2 }, + { 0xcc29, UCHAR_LINE_BREAK, U_LB_H3 }, + { 0xac03, UCHAR_LINE_BREAK, U_LB_H3 }, + { 0x115f, UCHAR_LINE_BREAK, U_LB_JL }, + { 0x11aa, UCHAR_LINE_BREAK, U_LB_JT }, + { 0x11a1, UCHAR_LINE_BREAK, U_LB_JV }, + + { 0xb2c9, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_LVT }, + { 0x036f, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_EXTEND }, + { 0x0000, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_CONTROL }, + { 0x1160, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_V }, + + { 0x05f4, UCHAR_WORD_BREAK, U_WB_MIDLETTER }, + { 0x4ef0, UCHAR_WORD_BREAK, U_WB_OTHER }, + { 0x19d9, UCHAR_WORD_BREAK, U_WB_NUMERIC }, + { 0x2044, UCHAR_WORD_BREAK, U_WB_MIDNUM }, + + { 0xfffd, UCHAR_SENTENCE_BREAK, U_SB_OTHER }, + { 0x1ffc, UCHAR_SENTENCE_BREAK, U_SB_UPPER }, + { 0xff63, UCHAR_SENTENCE_BREAK, U_SB_CLOSE }, + { 0x2028, UCHAR_SENTENCE_BREAK, U_SB_SEP }, + /* undefined UProperty values */ { 0x61, 0x4a7, 0 }, { 0x234bc, 0x15ed, 0 } @@ -2349,21 +2473,60 @@ TestAdditionalProperties() { ) { log_err("error: u_getIntPropertyMinValue() wrong\n"); } - - if( u_getIntPropertyMaxValue(UCHAR_DASH)!=1 || - u_getIntPropertyMaxValue(UCHAR_ID_CONTINUE)!=1 || - u_getIntPropertyMaxValue(UCHAR_BINARY_LIMIT-1)!=1 || - u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)!=(int32_t)U_CHAR_DIRECTION_COUNT-1 || - u_getIntPropertyMaxValue(UCHAR_BLOCK)!=(int32_t)UBLOCK_COUNT-1 || - u_getIntPropertyMaxValue(UCHAR_LINE_BREAK)!=(int32_t)U_LB_COUNT-1 || - u_getIntPropertyMaxValue(UCHAR_SCRIPT)!=(int32_t)USCRIPT_CODE_LIMIT-1 || - u_getIntPropertyMaxValue(0x2345)!=-1 /*JB#2410*/ || - u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE) != (int32_t) (U_DT_COUNT - 1) || - u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP) != (int32_t) (U_JG_COUNT -1) || - u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE) != (int32_t) (U_JT_COUNT -1) || - u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH) != (int32_t) (U_EA_COUNT -1) - ) { - log_err("error: u_getIntPropertyMaxValue() wrong\n"); + if( u_getIntPropertyMaxValue(UCHAR_DASH)!=1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_DASH) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_ID_CONTINUE)!=1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_ID_CONTINUE) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_BINARY_LIMIT-1)!=1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_BINARY_LIMIT-1) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)!=(int32_t)U_CHAR_DIRECTION_COUNT-1 ) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_BLOCK)!=(int32_t)UBLOCK_COUNT-1 ) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_BLOCK) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_LINE_BREAK)!=(int32_t)U_LB_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_LINE_BREAK) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_SCRIPT)!=(int32_t)USCRIPT_CODE_LIMIT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_SCRIPT) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE)!=(int32_t)U_NT_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_GENERAL_CATEGORY)!=(int32_t)U_CHAR_CATEGORY_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_GENERAL_CATEGORY) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE)!=(int32_t)U_HST_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK)!=(int32_t)U_GCB_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK)!=(int32_t)U_SB_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK) wrong\n"); + } + if(u_getIntPropertyMaxValue(UCHAR_WORD_BREAK)!=(int32_t)U_WB_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_WORD_BREAK) wrong\n"); + } + /*JB#2410*/ + if( u_getIntPropertyMaxValue(0x2345)!=-1) { + log_err("error: u_getIntPropertyMaxValue(0x2345) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE) != (int32_t) (U_DT_COUNT - 1)) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP) != (int32_t) (U_JG_COUNT -1)) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE) != (int32_t) (U_JT_COUNT -1)) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE) wrong\n"); + } + if( u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH) != (int32_t) (U_EA_COUNT -1)) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH) wrong\n"); } /* test u_hasBinaryProperty() and u_getIntPropertyValue() */ @@ -2624,7 +2787,7 @@ TestPropertyValues(void) { max); } - /* Script should return 0 for an invalid code point. */ + /* Script should return USCRIPT_INVALID_CODE for an invalid code point. */ for (i=0; i<2; ++i) { int32_t script; const char* desc; @@ -2644,7 +2807,7 @@ TestPropertyValues(void) { } /* We don't explicitly test ec. It should be U_FAILURE but it isn't documented as such. */ - if (script != 0) { + if (script != (int32_t)USCRIPT_INVALID_CODE) { log_err("FAIL: %s = %d, exp. 0\n", desc, script); } @@ -2686,12 +2849,28 @@ TestConsistency() { U_STRING_DECL(formatPattern, "[:Cf:]", 6); U_STRING_DECL(alphaPattern, "[:Alphabetic:]", 14); + U_STRING_DECL(mathBlocksPattern, + "[[:block=Mathematical Operators:][:block=Miscellaneous Mathematical Symbols-A:][:block=Miscellaneous Mathematical Symbols-B:][:block=Supplemental Mathematical Operators:][:block=Mathematical Alphanumeric Symbols:]]", + 1+32+46+46+45+43+1+1); /* +1 for NUL */ + U_STRING_DECL(mathPattern, "[:Math:]", 8); + U_STRING_DECL(unassignedPattern, "[:Cn:]", 6); + U_STRING_DECL(unknownPattern, "[:sc=Unknown:]", 14); + U_STRING_DECL(reservedPattern, "[[:Cn:][:Co:][:Cs:]]", 20); + U_STRING_INIT(hyphenPattern, "[:Hyphen:]", 10); U_STRING_INIT(dashPattern, "[:Dash:]", 8); U_STRING_INIT(lowerPattern, "[:Lowercase:]", 13); U_STRING_INIT(formatPattern, "[:Cf:]", 6); U_STRING_INIT(alphaPattern, "[:Alphabetic:]", 14); + U_STRING_INIT(mathBlocksPattern, + "[[:block=Mathematical Operators:][:block=Miscellaneous Mathematical Symbols-A:][:block=Miscellaneous Mathematical Symbols-B:][:block=Supplemental Mathematical Operators:][:block=Mathematical Alphanumeric Symbols:]]", + 1+32+46+46+45+43+1+1); /* +1 for NUL */ + U_STRING_INIT(mathPattern, "[:Math:]", 8); + U_STRING_INIT(unassignedPattern, "[:Cn:]", 6); + U_STRING_INIT(unknownPattern, "[:sc=Unknown:]", 14); + U_STRING_INIT(reservedPattern, "[[:Cn:][:Co:][:Cs:]]", 20); + /* * It used to be that UCD.html and its precursors said * "Those dashes used to mark connections between pieces of words, @@ -2811,14 +2990,63 @@ TestConsistency() { uset_close(set2); #endif + + /* verify that all assigned characters in Math blocks are exactly Math characters */ + errorCode=U_ZERO_ERROR; + set1=uset_openPattern(mathBlocksPattern, -1, &errorCode); + set2=uset_openPattern(mathPattern, 8, &errorCode); + set3=uset_openPattern(unassignedPattern, 6, &errorCode); + if(U_SUCCESS(errorCode)) { + uset_retainAll(set2, set1); /* [math blocks]&[:Math:] */ + uset_complement(set3); /* assigned characters */ + uset_retainAll(set1, set3); /* [math blocks]&[assigned] */ + compareUSets(set1, set2, + "[assigned Math block chars]", "[math blocks]&[:Math:]", + TRUE); + } else { + log_err("error opening [math blocks] or [:Math:] or [:Cn:] - %s\n", u_errorName(errorCode)); + } + uset_close(set1); + uset_close(set2); + uset_close(set3); + + /* new in Unicode 5.0: exactly all unassigned+PUA+surrogate code points have script=Unknown */ + errorCode=U_ZERO_ERROR; + set1=uset_openPattern(unknownPattern, 14, &errorCode); + set2=uset_openPattern(reservedPattern, 20, &errorCode); + if(U_SUCCESS(errorCode)) { + compareUSets(set1, set2, + "[:sc=Unknown:]", "[[:Cn:][:Co:][:Cs:]]", + TRUE); + } else { + log_err("error opening [:sc=Unknown:] or [[:Cn:][:Co:][:Cs:]] - %s\n", u_errorName(errorCode)); + } + uset_close(set1); + uset_close(set2); } +/* + * Starting with ICU4C 3.4, the core Unicode properties files + * (uprops.icu, ucase.icu, ubidi.icu, unorm.icu) + * are hardcoded in the common DLL and therefore not included + * in the data package any more. + * Test requiring these files are disabled so that + * we need not jump through hoops (like adding snapshots of these files + * to testdata). + * See Jitterbug 4497. + */ +#define HARDCODED_DATA_4497 1 + /* API coverage for ucase.c */ static void TestUCase() { +#if !HARDCODED_DATA_4497 UDataMemory *pData; UCaseProps *csp; +#endif + const UCaseProps *ccsp; UErrorCode errorCode; +#if !HARDCODED_DATA_4497 /* coverage for ucase_openBinary() */ errorCode=U_ZERO_ERROR; pData=udata_open(NULL, UCASE_DATA_TYPE, UCASE_DATA_NAME, &errorCode); @@ -2842,4 +3070,261 @@ static void TestUCase() { ucase_close(csp); udata_close(pData); +#endif + + /* coverage for ucase_getDummy() */ + errorCode=U_ZERO_ERROR; + ccsp=ucase_getDummy(&errorCode); + if(ucase_tolower(ccsp, 0x41)!=0x41) { + log_err("ucase_tolower(dummy, A)!=A\n"); + } +} + +/* API coverage for ubidi_props.c */ +static void TestUBiDiProps() { +#if !HARDCODED_DATA_4497 + UDataMemory *pData; + UBiDiProps *bdp; +#endif + const UBiDiProps *cbdp; + UErrorCode errorCode; + +#if !HARDCODED_DATA_4497 + /* coverage for ubidi_openBinary() */ + errorCode=U_ZERO_ERROR; + pData=udata_open(NULL, UBIDI_DATA_TYPE, UBIDI_DATA_NAME, &errorCode); + if(U_FAILURE(errorCode)) { + log_data_err("unable to open " UBIDI_DATA_NAME "." UBIDI_DATA_TYPE ": %s\n", + u_errorName(errorCode)); + return; + } + + bdp=ubidi_openBinary((const uint8_t *)pData->pHeader, -1, &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ubidi_openBinary() fails for the contents of " UBIDI_DATA_NAME "." UBIDI_DATA_TYPE ": %s\n", + u_errorName(errorCode)); + udata_close(pData); + return; + } + + if(0x2215!=ubidi_getMirror(bdp, 0x29F5)) { /* verify some data */ + log_err("ubidi_openBinary() does not seem to return working UBiDiProps\n"); + } + + ubidi_closeProps(bdp); + udata_close(pData); +#endif + + /* coverage for ubidi_getDummy() */ + errorCode=U_ZERO_ERROR; + cbdp=ubidi_getDummy(&errorCode); + if(ubidi_getClass(cbdp, 0x20)!=0) { + log_err("ubidi_getClass(dummy, space)!=0\n"); + } +} + +/* test case folding, compare return values with CaseFolding.txt ------------ */ + +/* bit set for which case foldings for a character have been tested already */ +enum { + CF_SIMPLE=1, + CF_FULL=2, + CF_TURKIC=4, + CF_ALL=7 +}; + +static void +testFold(UChar32 c, int which, + UChar32 simple, UChar32 turkic, + const UChar *full, int32_t fullLength, + const UChar *turkicFull, int32_t turkicFullLength) { + UChar s[2], t[32]; + UChar32 c2; + int32_t length, length2; + + UErrorCode errorCode=U_ZERO_ERROR; + + length=0; + U16_APPEND_UNSAFE(s, length, c); + + if((which&CF_SIMPLE)!=0 && (c2=u_foldCase(c, 0))!=simple) { + log_err("u_foldCase(U+%04lx, default)=U+%04lx != U+%04lx\n", (long)c, (long)c2, (long)simple); + } + if((which&CF_FULL)!=0) { + length2=u_strFoldCase(t, LENGTHOF(t), s, length, 0, &errorCode); + if(length2!=fullLength || 0!=u_memcmp(t, full, fullLength)) { + log_err("u_strFoldCase(U+%04lx, default) does not fold properly\n", (long)c); + } + } + if((which&CF_TURKIC)!=0) { + if((c2=u_foldCase(c, U_FOLD_CASE_EXCLUDE_SPECIAL_I))!=turkic) { + log_err("u_foldCase(U+%04lx, turkic)=U+%04lx != U+%04lx\n", (long)c, (long)c2, (long)simple); + } + + length2=u_strFoldCase(t, LENGTHOF(t), s, length, U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); + if(length2!=turkicFullLength || 0!=u_memcmp(t, turkicFull, length2)) { + log_err("u_strFoldCase(U+%04lx, turkic) does not fold properly\n", (long)c); + } + } +} + +/* test that c case-folds to itself */ +static void +testFoldToSelf(UChar32 c, int which) { + UChar s[2]; + int32_t length; + + length=0; + U16_APPEND_UNSAFE(s, length, c); + testFold(c, which, c, c, s, length, s, length); +} + +struct CaseFoldingData { + USet *notSeen; + UChar32 prev, prevSimple; + UChar prevFull[32]; + int32_t prevFullLength; + int which; +}; +typedef struct CaseFoldingData CaseFoldingData; + +static void U_CALLCONV +caseFoldingLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode) { + CaseFoldingData *pData=(CaseFoldingData *)context; + char *end; + UChar full[32]; + UChar32 c, prev, simple; + int32_t count; + int which; + char status; + + /* get code point */ + c=(UChar32)strtoul(u_skipWhitespace(fields[0][0]), &end, 16); + end=(char *)u_skipWhitespace(end); + if(end<=fields[0][0] || end!=fields[0][1]) { + log_err("syntax error in CaseFolding.txt field 0 at %s\n", fields[0][0]); + *pErrorCode=U_PARSE_ERROR; + return; + } + + /* get the status of this mapping */ + status=*u_skipWhitespace(fields[1][0]); + if(status!='C' && status!='S' && status!='F' && status!='T') { + log_err("unrecognized status field in CaseFolding.txt at %s\n", fields[0][0]); + *pErrorCode=U_PARSE_ERROR; + return; + } + + /* get the mapping */ + count=u_parseString(fields[2][0], full, 32, (uint32_t *)&simple, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + log_err("error parsing CaseFolding.txt mapping at %s\n", fields[0][0]); + return; + } + + /* there is a simple mapping only if there is exactly one code point (count is in UChars) */ + if(count==0 || count>2 || (count==2 && U16_IS_SINGLE(full[1]))) { + simple=c; + } + + if(c!=(prev=pData->prev)) { + /* + * Test remaining mappings for the previous code point. + * If a turkic folding was not mentioned, then it should fold the same + * as the regular simple case folding. + */ + UChar s[2]; + int32_t length; + + length=0; + U16_APPEND_UNSAFE(s, length, prev); + testFold(prev, (~pData->which)&CF_ALL, + prev, pData->prevSimple, + s, length, + pData->prevFull, pData->prevFullLength); + pData->prev=pData->prevSimple=c; + length=0; + U16_APPEND_UNSAFE(pData->prevFull, length, c); + pData->prevFullLength=length; + pData->which=0; + } + + /* + * Turn the status into a bit set of case foldings to test. + * Remember non-Turkic case foldings as defaults for Turkic mode. + */ + switch(status) { + case 'C': + which=CF_SIMPLE|CF_FULL; + pData->prevSimple=simple; + u_memcpy(pData->prevFull, full, count); + pData->prevFullLength=count; + break; + case 'S': + which=CF_SIMPLE; + pData->prevSimple=simple; + break; + case 'F': + which=CF_FULL; + u_memcpy(pData->prevFull, full, count); + pData->prevFullLength=count; + break; + case 'T': + which=CF_TURKIC; + break; + default: + which=0; + break; /* won't happen because of test above */ + } + + testFold(c, which, simple, simple, full, count, full, count); + + /* remember which case foldings of c have been tested */ + pData->which|=which; + + /* remove c from the set of ones not mentioned in CaseFolding.txt */ + uset_remove(pData->notSeen, c); +} + +static void +TestCaseFolding() { + CaseFoldingData data={ NULL }; + char *fields[3][2]; + UErrorCode errorCode; + + static char *lastLine= (char *)"10FFFF; C; 10FFFF;"; + + errorCode=U_ZERO_ERROR; + /* test BMP & plane 1 - nothing interesting above */ + data.notSeen=uset_open(0, 0x1ffff); + data.prevFullLength=1; /* length of full case folding of U+0000 */ + + parseUCDFile("CaseFolding.txt", fields, 3, caseFoldingLineFn, &data, &errorCode); + if(U_SUCCESS(errorCode)) { + int32_t i, start, end; + + /* add a pseudo-last line to finish testing of the actual last one */ + fields[0][0]=lastLine; + fields[0][1]=lastLine+6; + fields[1][0]=lastLine+7; + fields[1][1]=lastLine+9; + fields[2][0]=lastLine+10; + fields[2][1]=lastLine+17; + caseFoldingLineFn(&data, fields, 3, &errorCode); + + /* verify that all code points that are not mentioned in CaseFolding.txt fold to themselves */ + for(i=0; + 0==uset_getItem(data.notSeen, i, &start, &end, NULL, 0, &errorCode) && + U_SUCCESS(errorCode); + ++i + ) { + do { + testFoldToSelf(start, CF_ALL); + } while(++start<=end); + } + } + + uset_close(data.notSeen); } diff --git a/icuSources/test/cintltst/cucdtst.h b/icuSources/test/cintltst/cucdtst.h deleted file mode 100644 index 336476a0..00000000 --- a/icuSources/test/cintltst/cucdtst.h +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ -/******************************************************************************** -* -* File CUCDTST.H -* -* Modification History: -* Name Description -* Madhu Katragadda Converted to C, added tests for string functions -********************************************************************************* -*/ -/* C API TEST For Unicode */ - -#ifndef _CUCDTST -#define _CUCDTST - -/* cstrcase.c */ -U_CFUNC void TestCaseLower(void); -U_CFUNC void TestCaseUpper(void); -U_CFUNC void TestCaseTitle(void); -U_CFUNC void TestCaseFolding(void); -U_CFUNC void TestCaseCompare(void); - -#endif diff --git a/icuSources/test/cintltst/currtest.c b/icuSources/test/cintltst/currtest.c new file mode 100644 index 00000000..93bbee0a --- /dev/null +++ b/icuSources/test/cintltst/currtest.c @@ -0,0 +1,204 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING +#include "unicode/unum.h" +#include "unicode/ucurr.h" +#include "unicode/ustring.h" +#include "cintltst.h" +#include "cstring.h" + +static void expectInList(const char *isoCurrency, uint32_t currencyType, UBool isExpected) { + UErrorCode status = U_ZERO_ERROR; + const char *foundCurrency = NULL; + const char *currentCurrency; + UEnumeration *en = ucurr_openISOCurrencies(currencyType, &status); + if (U_FAILURE(status)) { + log_err("Error: ucurr_openISOCurrencies returned %s\n", myErrorName(status)); + return; + } + + while ((currentCurrency = uenum_next(en, NULL, &status)) != NULL) { + if (strcmp(isoCurrency, currentCurrency) == 0) { + foundCurrency = currentCurrency; + break; + } + } + + if ((foundCurrency != NULL) != isExpected) { + log_err("Error: could not find %s as expected. isExpected = %s type=0x%X\n", + isoCurrency, isExpected ? "TRUE" : "FALSE", currencyType); + } + uenum_close(en); +} + +static void TestEnumList(void) { + expectInList("ADP", UCURR_ALL, TRUE); /* First in list */ + expectInList("ZWD", UCURR_ALL, TRUE); /* Last in list */ + + expectInList("USD", UCURR_ALL, TRUE); + expectInList("USD", UCURR_COMMON, TRUE); + expectInList("USD", UCURR_UNCOMMON, FALSE); + expectInList("USD", UCURR_DEPRECATED, FALSE); + expectInList("USD", UCURR_NON_DEPRECATED, TRUE); + expectInList("USD", UCURR_COMMON|UCURR_DEPRECATED, FALSE); + expectInList("USD", UCURR_COMMON|UCURR_NON_DEPRECATED, TRUE); + expectInList("USD", UCURR_UNCOMMON|UCURR_DEPRECATED, FALSE); + expectInList("USD", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE); + + expectInList("USN", UCURR_ALL, TRUE); + expectInList("USN", UCURR_COMMON, FALSE); + expectInList("USN", UCURR_UNCOMMON, TRUE); + expectInList("USN", UCURR_DEPRECATED, FALSE); + expectInList("USN", UCURR_NON_DEPRECATED, TRUE); + expectInList("USN", UCURR_COMMON|UCURR_DEPRECATED, FALSE); + expectInList("USN", UCURR_COMMON|UCURR_NON_DEPRECATED, FALSE); + expectInList("USN", UCURR_UNCOMMON|UCURR_DEPRECATED, FALSE); + expectInList("USN", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, TRUE); + + expectInList("DEM", UCURR_ALL, TRUE); + expectInList("DEM", UCURR_COMMON, TRUE); + expectInList("DEM", UCURR_UNCOMMON, FALSE); + expectInList("DEM", UCURR_DEPRECATED, TRUE); + expectInList("DEM", UCURR_NON_DEPRECATED, FALSE); + expectInList("DEM", UCURR_COMMON|UCURR_DEPRECATED, TRUE); + expectInList("DEM", UCURR_COMMON|UCURR_NON_DEPRECATED, FALSE); + expectInList("DEM", UCURR_UNCOMMON|UCURR_DEPRECATED, FALSE); + expectInList("DEM", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE); + + expectInList("XEU", UCURR_ALL, TRUE); + expectInList("XEU", UCURR_COMMON, FALSE); + expectInList("XEU", UCURR_UNCOMMON, TRUE); + expectInList("XEU", UCURR_DEPRECATED, TRUE); + expectInList("XEU", UCURR_NON_DEPRECATED, FALSE); + expectInList("XEU", UCURR_COMMON|UCURR_DEPRECATED, FALSE); + expectInList("XEU", UCURR_COMMON|UCURR_NON_DEPRECATED, FALSE); + expectInList("XEU", UCURR_UNCOMMON|UCURR_DEPRECATED, TRUE); + expectInList("XEU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE); + +} + +static void TestEnumListReset(void) { + UErrorCode status = U_ZERO_ERROR; + const char *currency1; + const char *currency2; + UEnumeration *en = ucurr_openISOCurrencies(UCURR_ALL, &status); + if (U_FAILURE(status)) { + log_err("Error: ucurr_openISOCurrencies returned %s\n", myErrorName(status)); + return; + } + + currency1 = uenum_next(en, NULL, &status); + uenum_reset(en, &status); + currency2 = uenum_next(en, NULL, &status); + if (U_FAILURE(status)) { + log_err("Error: uenum_next or uenum_reset returned %s\n", myErrorName(status)); + return; + } + /* The first item's pointer in the list should be the same between resets. */ + if (currency1 != currency2) { + log_err("Error: reset doesn't work %s != %s\n", currency1, currency2); + } + uenum_close(en); +} + +static int32_t checkItemCount(uint32_t currencyType) { + UErrorCode status = U_ZERO_ERROR; + int32_t originalCount, count; + UEnumeration *en = ucurr_openISOCurrencies(currencyType, &status); + int32_t expectedLen = 3, len; + if (U_FAILURE(status)) { + log_err("Error: ucurr_openISOCurrencies returned %s\n", myErrorName(status)); + return -1; + } + + originalCount = uenum_count(en, &status); + for (count=0;;count++) { + const char *str = uenum_next(en, &len, &status); + if (str == NULL || len != expectedLen || strlen(str) != expectedLen) { + break; + } + } + + if (originalCount != count) { + log_err("Error: uenum_count returned the wrong value (type = 0x%X). Got: %d Expected %d\n", + currencyType, count, originalCount); + } + if (U_FAILURE(status)) { + log_err("Error: uenum_next got an error: %s\n", u_errorName(status)); + } + uenum_close(en); + return count; +} + +static void TestEnumListCount(void) { + checkItemCount(UCURR_ALL); + checkItemCount(UCURR_COMMON); + checkItemCount(UCURR_UNCOMMON); + checkItemCount(UCURR_DEPRECATED); + checkItemCount(UCURR_NON_DEPRECATED); + checkItemCount(UCURR_COMMON|UCURR_DEPRECATED); + checkItemCount(UCURR_COMMON|UCURR_NON_DEPRECATED); + checkItemCount(UCURR_UNCOMMON|UCURR_DEPRECATED); + checkItemCount(UCURR_UNCOMMON|UCURR_NON_DEPRECATED); + + if (checkItemCount(UCURR_DEPRECATED|UCURR_NON_DEPRECATED) != 0) { + log_err("Error: UCURR_DEPRECATED|UCURR_NON_DEPRECATED should return 0 items\n"); + } + if (checkItemCount(UCURR_COMMON|UCURR_UNCOMMON) != 0) { + log_err("Error: UCURR_DEPRECATED|UCURR_NON_DEPRECATED should return 0 items\n"); + } +} + +static void TestFractionDigitOverride(void) { + UErrorCode status = U_ZERO_ERROR; + UNumberFormat *fmt = unum_open(UNUM_CURRENCY, NULL, 0, "hu_HU", NULL, &status); + UChar buffer[256]; + UChar expectedBuf[256]; + const char expectedFirst[] = "123,46 Ft"; + const char expectedSecond[] = "123 Ft"; + const char expectedThird[] = "123,456 Ft"; + if (U_FAILURE(status)) { + log_err("Error: unum_open returned %s\n", myErrorName(status)); + return; + } + /* Make sure that you can format normal fraction digits. */ + unum_formatDouble(fmt, 123.456, buffer, sizeof(buffer)/sizeof(buffer[0]), NULL, &status); + u_charsToUChars(expectedFirst, expectedBuf, strlen(expectedFirst)+1); + if (u_strcmp(buffer, expectedBuf) != 0) { + log_err("Error: unum_formatDouble didn't return %s\n", expectedFirst); + } + /* Make sure that you can format no fraction digits. */ + unum_setAttribute(fmt, UNUM_FRACTION_DIGITS, 0); + unum_formatDouble(fmt, 123.456, buffer, sizeof(buffer)/sizeof(buffer[0]), NULL, &status); + u_charsToUChars(expectedSecond, expectedBuf, strlen(expectedSecond)+1); + if (u_strcmp(buffer, expectedBuf) != 0) { + log_err("Error: unum_formatDouble didn't return %s\n", expectedSecond); + } + /* Make sure that you can format more fraction digits. */ + unum_setAttribute(fmt, UNUM_FRACTION_DIGITS, 3); + unum_formatDouble(fmt, 123.456, buffer, sizeof(buffer)/sizeof(buffer[0]), NULL, &status); + u_charsToUChars(expectedThird, expectedBuf, strlen(expectedThird)+1); + if (u_strcmp(buffer, expectedBuf) != 0) { + log_err("Error: unum_formatDouble didn't return %s\n", expectedThird); + } + unum_close(fmt); +} + +void addCurrencyTest(TestNode** root); + +#define TESTCASE(x) addTest(root, &x, "tsformat/currtest/" #x) + +void addCurrencyTest(TestNode** root) +{ + TESTCASE(TestEnumList); + TESTCASE(TestEnumListReset); + TESTCASE(TestEnumListCount); + TESTCASE(TestFractionDigitOverride); +} + +#endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/cintltst/custrtrn.c b/icuSources/test/cintltst/custrtrn.c index 66ada233..0335a005 100644 --- a/icuSources/test/cintltst/custrtrn.c +++ b/icuSources/test/cintltst/custrtrn.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2001-2004, International Business Machines Corporation and + * Copyright (c) 2001-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -22,6 +22,8 @@ #include "unicode/ures.h" #include "ustr_imp.h" #include "cintltst.h" +#include "cmemory.h" +#include "cstring.h" #include "cwchar.h" #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) @@ -30,6 +32,7 @@ void addUCharTransformTest(TestNode** root); static void Test_UChar_UTF32_API(void); static void Test_UChar_UTF8_API(void); +static void Test_FromUTF8Lenient(void); static void Test_UChar_WCHART_API(void); static void Test_widestrs(void); static void Test_WCHART_LongString(void); @@ -39,6 +42,7 @@ addUCharTransformTest(TestNode** root) { addTest(root, &Test_UChar_UTF32_API, "custrtrn/Test_UChar_UTF32_API"); addTest(root, &Test_UChar_UTF8_API, "custrtrn/Test_UChar_UTF8_API"); + addTest(root, &Test_FromUTF8Lenient, "custrtrn/Test_FromUTF8Lenient"); addTest(root, &Test_UChar_WCHART_API, "custrtrn/Test_UChar_WCHART_API"); addTest(root, &Test_widestrs, "custrtrn/Test_widestrs"); addTest(root, &Test_WCHART_LongString, "custrtrn/Test_WCHART_LongString"); @@ -270,16 +274,21 @@ static void Test_UChar_UTF8_API(void){ int32_t u8DestLen =0; UBool failed = FALSE; int i= 0; + int32_t numSubstitutions; + { /* preflight */ + u8Temp[0] = 0x12; u_strToUTF8(u8Target,u8TargetLength, &u8DestLen, uSrc, uSrcLen,&err); - if(err == U_BUFFER_OVERFLOW_ERROR){ + if(err == U_BUFFER_OVERFLOW_ERROR && u8Temp[0] == 0x12){ err = U_ZERO_ERROR; u8Target = (char*) malloc (sizeof(uint8_t) * (u8DestLen+1)); u8TargetLength = u8DestLen; - + + u8Target[u8TargetLength] = (char)0xfe; + u8DestLen = -1; u_strToUTF8(u8Target,u8TargetLength, &u8DestLen, uSrc, uSrcLen,&err); - if(U_FAILURE(err)){ + if(U_FAILURE(err) || u8DestLen != u8TargetLength || u8Target[u8TargetLength] != (char)0xfe){ log_err("u_strToUTF8 failed after preflight. Error: %s\n", u_errorName(err)); return; } @@ -308,16 +317,19 @@ static void Test_UChar_UTF8_API(void){ u8SrcLen = u8DestLen; /* preflight */ + uTemp[0] = 0x1234; u_strFromUTF8(uTarget,uTargetLength,&uDestLen,u8Src,u8SrcLen,&err); - if(err == U_BUFFER_OVERFLOW_ERROR){ + if(err == U_BUFFER_OVERFLOW_ERROR && uTemp[0] == 0x1234){ err = U_ZERO_ERROR; uTarget = (UChar*) malloc( sizeof(UChar) * (uDestLen+1)); uTargetLength = uDestLen; + uTarget[uTargetLength] = 0xfff0; + uDestLen = -1; u_strFromUTF8(uTarget,uTargetLength,&uDestLen,u8Src,u8SrcLen,&err); } else { - log_err("Should have gotten U_BUFFER_OVERFLOW_ERROR"); + log_err("error: u_strFromUTF8(preflight) should have gotten U_BUFFER_OVERFLOW_ERROR\n"); } /*for(i=0; i< uDestLen; i++){ printf("0x%04X, ",uTarget[i]); @@ -325,7 +337,10 @@ static void Test_UChar_UTF8_API(void){ printf("\n"); } }*/ - + + if(U_FAILURE(err) || uDestLen != uTargetLength || uTarget[uTargetLength] != 0xfff0) { + failed = TRUE; + } for(i=0; i< uSrcLen; i++){ if(uTarget[i] != src16[i]){ log_verbose("u_strFromUTF8() failed expected: \\u%04X got: \\u%04X at index: %i \n", src16[i] ,uTarget[i],i); @@ -333,7 +348,7 @@ static void Test_UChar_UTF8_API(void){ } } if(failed){ - log_err("u_strToUTF8() failed \n"); + log_err("error: u_strFromUTF8(after preflighting) failed\n"); } free(u8Target); @@ -414,10 +429,14 @@ static void Test_UChar_UTF8_API(void){ { static const UChar withLead16[]={ 0x1800, 0xd89a, 0x0061 }, - withTrail16[]={ 0x1800, 0xdcba, 0x0061, 0 }; + withTrail16[]={ 0x1800, 0xdcba, 0x0061, 0 }, + withTrail16SubFFFD[]={ 0x1800, 0xfffd, 0x0061, 0 }, /* sub==U+FFFD */ + withTrail16Sub50005[]={ 0x1800, 0xd900, 0xdc05, 0x0061, 0 }; /* sub==U+50005 */ static const uint8_t withLead8[]={ 0xe1, 0xa0, 0x80, 0xed, 0xa2, 0x9a, 0x61 }, - withTrail8[]={ 0xe1, 0xa0, 0x80, 0xed, 0xb2, 0xba, 0x61 }; + withTrail8[]={ 0xe1, 0xa0, 0x80, 0xed, 0xb2, 0xba, 0x61, 0 }, + withTrail8Sub1A[]={ 0xe1, 0xa0, 0x80, 0x1a, 0x61, 0 }, /* sub==U+001A */ + withTrail8SubFFFD[]={ 0xe1, 0xa0, 0x80, 0xef, 0xbf, 0xbd, 0x61, 0 }; /* sub==U+FFFD */ UChar out16[10]; char out8[10]; @@ -429,8 +448,384 @@ static void Test_UChar_UTF8_API(void){ ) { log_err("error: u_strTo/FromUTF8(string with single surrogate) fails to report error\n"); } + + /* test error handling with substitution characters */ + + /* from UTF-8 with length */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out16[0]=0x55aa; + uDestLen=0; + u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, + (const char *)withTrail8, uprv_strlen((const char *)withTrail8), + 0x50005, &numSubstitutions, + &err); + if(U_FAILURE(err) || uDestLen!=u_strlen(withTrail16Sub50005) || + 0!=u_memcmp(withTrail16Sub50005, out16, uDestLen+1) || + numSubstitutions!=1) { + log_err("error: u_strFromUTF8WithSub(length) failed\n"); + } + + /* from UTF-8 with NUL termination */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out16[0]=0x55aa; + uDestLen=0; + u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, + (const char *)withTrail8, -1, + 0xfffd, &numSubstitutions, + &err); + if(U_FAILURE(err) || uDestLen!=u_strlen(withTrail16SubFFFD) || + 0!=u_memcmp(withTrail16SubFFFD, out16, uDestLen+1) || + numSubstitutions!=1) { + log_err("error: u_strFromUTF8WithSub(NUL termination) failed\n"); + } + + /* preflight from UTF-8 with NUL termination */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out16[0]=0x55aa; + uDestLen=0; + u_strFromUTF8WithSub(out16, 1, &uDestLen, + (const char *)withTrail8, -1, + 0x50005, &numSubstitutions, + &err); + if(err!=U_BUFFER_OVERFLOW_ERROR || uDestLen!=u_strlen(withTrail16Sub50005) || numSubstitutions!=1) { + log_err("error: u_strFromUTF8WithSub(preflight/NUL termination) failed\n"); + } + + /* to UTF-8 with length */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out8[0]=(char)0xf5; + u8DestLen=0; + u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, + withTrail16, u_strlen(withTrail16), + 0xfffd, &numSubstitutions, + &err); + if(U_FAILURE(err) || u8DestLen!=uprv_strlen((const char *)withTrail8SubFFFD) || + 0!=uprv_memcmp((const char *)withTrail8SubFFFD, out8, u8DestLen+1) || + numSubstitutions!=1) { + log_err("error: u_strToUTF8WithSub(length) failed\n"); + } + + /* to UTF-8 with NUL termination */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out8[0]=(char)0xf5; + u8DestLen=0; + u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, + withTrail16, -1, + 0x1a, &numSubstitutions, + &err); + if(U_FAILURE(err) || u8DestLen!=uprv_strlen((const char *)withTrail8Sub1A) || + 0!=uprv_memcmp((const char *)withTrail8Sub1A, out8, u8DestLen+1) || + numSubstitutions!=1) { + log_err("error: u_strToUTF8WithSub(NUL termination) failed\n"); + } + + /* preflight to UTF-8 with NUL termination */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out8[0]=(char)0xf5; + u8DestLen=0; + u_strToUTF8WithSub(out8, 1, &u8DestLen, + withTrail16, -1, + 0xfffd, &numSubstitutions, + &err); + if(err!=U_BUFFER_OVERFLOW_ERROR || u8DestLen!=uprv_strlen((const char *)withTrail8SubFFFD) || + numSubstitutions!=1) { + log_err("error: u_strToUTF8WithSub(preflight/NUL termination) failed\n"); + } + + /* test that numSubstitutions==0 if there are no substitutions */ + + /* from UTF-8 with length (just first 3 bytes which are valid) */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out16[0]=0x55aa; + uDestLen=0; + u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, + (const char *)withTrail8, 3, + 0x50005, &numSubstitutions, + &err); + if(U_FAILURE(err) || uDestLen!=1 || + 0!=u_memcmp(withTrail16Sub50005, out16, uDestLen) || + numSubstitutions!=0) { + log_err("error: u_strFromUTF8WithSub(no subs) failed\n"); + } + + /* to UTF-8 with length (just first UChar which is valid) */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out8[0]=(char)0xf5; + u8DestLen=0; + u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, + withTrail16, 1, + 0xfffd, &numSubstitutions, + &err); + if(U_FAILURE(err) || u8DestLen!=3 || + 0!=uprv_memcmp((const char *)withTrail8SubFFFD, out8, u8DestLen) || + numSubstitutions!=0) { + log_err("error: u_strToUTF8WithSub(no subs) failed\n"); + } + + /* test that numSubstitutions==0 if subchar==U_SENTINEL (no subchar) */ + + /* from UTF-8 with length (just first 3 bytes which are valid) */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out16[0]=0x55aa; + uDestLen=0; + u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, + (const char *)withTrail8, 3, + U_SENTINEL, &numSubstitutions, + &err); + if(U_FAILURE(err) || uDestLen!=1 || + 0!=u_memcmp(withTrail16Sub50005, out16, uDestLen) || + numSubstitutions!=0) { + log_err("error: u_strFromUTF8WithSub(no subchar) failed\n"); + } + + /* to UTF-8 with length (just first UChar which is valid) */ + err=U_ZERO_ERROR; + numSubstitutions=-1; + out8[0]=(char)0xf5; + u8DestLen=0; + u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, + withTrail16, 1, + U_SENTINEL, &numSubstitutions, + &err); + if(U_FAILURE(err) || u8DestLen!=3 || + 0!=uprv_memcmp((const char *)withTrail8SubFFFD, out8, u8DestLen) || + numSubstitutions!=0) { + log_err("error: u_strToUTF8WithSub(no subchar) failed\n"); + } + } +} + +/* compare if two strings are equal, but match 0xfffd in the second string with anything in the first */ +static UBool +equalAnyFFFD(const UChar *s, const UChar *t, int32_t length) { + UChar c1, c2; + + while(length>0) { + c1=*s++; + c2=*t++; + if(c1!=c2 && c2!=0xfffd) { + return FALSE; + } + --length; } + return TRUE; } + +/* test u_strFromUTF8Lenient() */ +static void +Test_FromUTF8Lenient(void) { + /* + * Multiple input strings, each NUL-terminated. + * Terminate with a string starting with 0xff. + */ + static const uint8_t bytes[]={ + /* well-formed UTF-8 */ + 0x61, 0xc3, 0x9f, 0xe0, 0xa0, 0x80, 0xf0, 0xa0, 0x80, 0x80, + 0x62, 0xc3, 0xa0, 0xe0, 0xa0, 0x81, 0xf0, 0xa0, 0x80, 0x81, 0, + + /* various malformed sequences */ + 0xc3, 0xc3, 0x9f, 0xc3, 0xa0, 0xe0, 0x80, 0x8a, 0xf0, 0x41, 0x42, 0x43, 0, + + /* truncated input */ + 0xc3, 0, + 0xe0, 0, + 0xe0, 0xa0, 0, + 0xf0, 0, + 0xf0, 0x90, 0, + 0xf0, 0x90, 0x80, 0, + + /* empty string */ + 0, + + /* finish */ + 0xff, 0 + }; + + /* Multiple output strings, each NUL-terminated. 0xfffd matches anything. */ + static const UChar uchars[]={ + 0x61, 0xdf, 0x800, 0xd840, 0xdc00, + 0x62, 0xe0, 0x801, 0xd840, 0xdc01, 0, + + 0xfffd, 0x9f, 0xe0, 0xa, 0xfffd, 0xfffd, 0, + + 0xfffd, 0, + 0xfffd, 0, + 0xfffd, 0, + 0xfffd, 0, + 0xfffd, 0, + 0xfffd, 0, + + 0, + + 0 + }; + + UChar dest[64]; + const char *pb; + const UChar *pu, *pDest; + int32_t srcLength, destLength0, destLength; + int number; + UErrorCode errorCode; + + /* verify checking for some illegal arguments */ + dest[0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, 1, &destLength, NULL, -1, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0x1234) { + log_err("u_strFromUTF8Lenient(src=NULL) failed\n"); + } + + dest[0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(NULL, 1, &destLength, (const char *)bytes, -1, &errorCode); + if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { + log_err("u_strFromUTF8Lenient(dest=NULL[1]) failed\n"); + } + + dest[0]=0x1234; + destLength=-1; + errorCode=U_MEMORY_ALLOCATION_ERROR; + pDest=u_strFromUTF8Lenient(dest, 1, &destLength, (const char *)bytes, -1, &errorCode); + if(errorCode!=U_MEMORY_ALLOCATION_ERROR || dest[0]!=0x1234) { + log_err("u_strFromUTF8Lenient(U_MEMORY_ALLOCATION_ERROR) failed\n"); + } + + dest[0]=0x1234; + destLength=-1; + errorCode=U_MEMORY_ALLOCATION_ERROR; + pDest=u_strFromUTF8Lenient(dest, 1, &destLength, (const char *)bytes, -1, NULL); + if(dest[0]!=0x1234) { + log_err("u_strFromUTF8Lenient(pErrorCode=NULL) failed\n"); + } + + /* test normal behavior */ + number=0; /* string number for log_err() */ + + for(pb=(const char *)bytes, pu=uchars; + *pb!=(char)0xff; + pb+=srcLength+1, pu+=destLength0+1, ++number + ) { + srcLength=uprv_strlen(pb); + destLength0=u_strlen(pu); + + /* preflighting with NUL-termination */ + dest[0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(NULL, 0, &destLength, pb, -1, &errorCode); + if (errorCode!= (destLength0==0 ? U_STRING_NOT_TERMINATED_WARNING : U_BUFFER_OVERFLOW_ERROR) || + pDest!=NULL || dest[0]!=0x1234 || destLength!=destLength0 + ) { + log_err("u_strFromUTF8Lenient(%d preflighting with NUL-termination) failed\n", number); + } + + /* preflighting/some capacity with NUL-termination */ + if(srcLength>0) { + dest[destLength0-1]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, destLength0-1, &destLength, pb, -1, &errorCode); + if (errorCode!=U_BUFFER_OVERFLOW_ERROR || + dest[destLength0-1]!=0x1234 || destLength!=destLength0 + ) { + log_err("u_strFromUTF8Lenient(%d preflighting/some capacity with NUL-termination) failed\n", number); + } + } + + /* conversion with NUL-termination, much capacity */ + dest[0]=dest[destLength0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, LENGTHOF(dest), &destLength, pb, -1, &errorCode); + if (errorCode!=U_ZERO_ERROR || + pDest!=dest || dest[destLength0]!=0 || + destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) + ) { + log_err("u_strFromUTF8Lenient(%d conversion with NUL-termination, much capacity) failed\n", number); + } + + /* conversion with NUL-termination, exact capacity */ + dest[0]=dest[destLength0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, destLength0, &destLength, pb, -1, &errorCode); + if (errorCode!=U_STRING_NOT_TERMINATED_WARNING || + pDest!=dest || dest[destLength0]!=0x1234 || + destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) + ) { + log_err("u_strFromUTF8Lenient(%d conversion with NUL-termination, exact capacity) failed\n", number); + } + + /* preflighting with length */ + dest[0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(NULL, 0, &destLength, pb, srcLength, &errorCode); + if (errorCode!= (destLength0==0 ? U_STRING_NOT_TERMINATED_WARNING : U_BUFFER_OVERFLOW_ERROR) || + pDest!=NULL || dest[0]!=0x1234 || destLength!=srcLength + ) { + log_err("u_strFromUTF8Lenient(%d preflighting with length) failed\n", number); + } + + /* preflighting/some capacity with length */ + if(srcLength>0) { + dest[srcLength-1]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, srcLength-1, &destLength, pb, srcLength, &errorCode); + if (errorCode!=U_BUFFER_OVERFLOW_ERROR || + dest[srcLength-1]!=0x1234 || destLength!=srcLength + ) { + log_err("u_strFromUTF8Lenient(%d preflighting/some capacity with length) failed\n", number); + } + } + + /* conversion with length, much capacity */ + dest[0]=dest[destLength0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, LENGTHOF(dest), &destLength, pb, srcLength, &errorCode); + if (errorCode!=U_ZERO_ERROR || + pDest!=dest || dest[destLength0]!=0 || + destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) + ) { + log_err("u_strFromUTF8Lenient(%d conversion with length, much capacity) failed\n", number); + } + + /* conversion with length, srcLength capacity */ + dest[0]=dest[srcLength]=dest[destLength0]=0x1234; + destLength=-1; + errorCode=U_ZERO_ERROR; + pDest=u_strFromUTF8Lenient(dest, srcLength, &destLength, pb, srcLength, &errorCode); + if(srcLength==destLength0) { + if (errorCode!=U_STRING_NOT_TERMINATED_WARNING || + pDest!=dest || dest[destLength0]!=0x1234 || + destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) + ) { + log_err("u_strFromUTF8Lenient(%d conversion with length, srcLength capacity/not terminated) failed\n", number); + } + } else { + if (errorCode!=U_ZERO_ERROR || + pDest!=dest || dest[destLength0]!=0 || + destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) + ) { + log_err("u_strFromUTF8Lenient(%d conversion with length, srcLength capacity/terminated) failed\n", number); + } + } + } +} + static const uint16_t src16j[] = { 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x000D, 0x000A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x000D, 0x000A, @@ -462,6 +857,7 @@ static const uint16_t src16WithNulls[] = { }; static void Test_UChar_WCHART_API(void){ +#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) UErrorCode err = U_ZERO_ERROR; const UChar* uSrc = src16j; int32_t uSrcLen = sizeof(src16j)/2; @@ -473,6 +869,27 @@ static void Test_UChar_WCHART_API(void){ int32_t uDestLen = 0; int i =0; { + /* Bad UErrorCode arguments. Make sure that the API doesn't crash, and that Purify doesn't complain. */ + if (u_strFromWCS(NULL,0,NULL,NULL,0,NULL) != NULL) { + log_err("u_strFromWCS() should return NULL with a bad argument\n"); + } + if (u_strToWCS(NULL,0,NULL,NULL,0,NULL) != NULL) { + log_err("u_strToWCS() should return NULL with a bad argument\n"); + } + + /* Bad UErrorCode arguments. */ + err = U_ZERO_ERROR; + u_strFromWCS(NULL,0,NULL,NULL,0,&err); + if (err != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("u_strFromWCS() didn't fail as expected with bad arguments. Error: %s \n", u_errorName(err)); + } + err = U_ZERO_ERROR; + u_strToWCS(NULL,0,NULL,NULL,0,&err); + if (err != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("u_strToWCS() didn't fail as expected with bad arguments. Error: %s \n", u_errorName(err)); + } + err = U_ZERO_ERROR; + /* pre-flight*/ u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); @@ -648,10 +1065,14 @@ static void Test_UChar_WCHART_API(void){ u_errorName(err), wDestLen, buffer[3]); } } +#else + log_info("Not testing u_str*WCS because (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) and wchar is neither utf16 nor utf32"); +#endif } static void Test_widestrs() { +#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) wchar_t ws[100]; UChar rts[100]; int32_t wcap = sizeof(ws) / sizeof(*ws); @@ -686,10 +1107,14 @@ static void Test_widestrs() if(wl != rtl){ log_err("u_strFromWCS: wcs = %S, wl = %d,rts = %s, rtl = %d!\n", wcs, wl, u_austrcpy(astr, rts), rtl); } +#else + log_info("Not testing u_str*WCS because (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) and wchar is neither utf16 nor utf32"); +#endif } static void Test_WCHART_LongString(){ +#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) UErrorCode status = U_ZERO_ERROR; const char* testdatapath=loadTestData(&status); UResourceBundle *theBundle = ures_open(testdatapath, "testtypes", &status); @@ -746,6 +1171,8 @@ Test_WCHART_LongString(){ free(uDest); /* close the bundle */ ures_close(theBundle); - +#else + log_info("Not testing u_str*WCS because (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) and wchar is neither utf16 nor utf32"); +#endif } diff --git a/icuSources/test/cintltst/custrtst.c b/icuSources/test/cintltst/custrtst.c index 358dd006..76cae0be 100644 --- a/icuSources/test/cintltst/custrtst.c +++ b/icuSources/test/cintltst/custrtst.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -16,15 +16,11 @@ * Tests of ustring.h Unicode string API functions. */ -#include "unicode/utypes.h" #include "unicode/ustring.h" -#include "unicode/uloc.h" #include "unicode/ucnv.h" #include "unicode/uiter.h" #include "cintltst.h" -#include "cucdtst.h" #include -#include #define LENGTHOF(array) (sizeof(array)/sizeof((array)[0])) @@ -42,6 +38,7 @@ static void TestUnescape(void); static void TestCountChar32(void); static void TestUCharIterator(void); static void TestUNormIterator(void); +static void TestBadUNormIterator(void); void addUStringTest(TestNode** root); @@ -55,15 +52,7 @@ void addUStringTest(TestNode** root) addTest(root, &TestCountChar32, "tsutil/custrtst/TestCountChar32"); addTest(root, &TestUCharIterator, "tsutil/custrtst/TestUCharIterator"); addTest(root, &TestUNormIterator, "tsutil/custrtst/TestUNormIterator"); - - /* cstrcase.c functions, declared in cucdtst.h */ - addTest(root, &TestCaseLower, "tsutil/custrtst/TestCaseLower"); - addTest(root, &TestCaseUpper, "tsutil/custrtst/TestCaseUpper"); -#if !UCONFIG_NO_BREAK_ITERATION - addTest(root, &TestCaseTitle, "tsutil/custrtst/TestCaseTitle"); -#endif - addTest(root, &TestCaseFolding, "tsutil/custrtst/TestCaseFolding"); - addTest(root, &TestCaseCompare, "tsutil/custrtst/TestCaseCompare"); + addTest(root, &TestBadUNormIterator, "tsutil/custrtst/TestBadUNormIterator"); } /* test data for TestStringFunctions ---------------------------------------- */ @@ -1533,6 +1522,11 @@ TestUNormIterator() { /* test nothing */ } +static void +TestBadUNormIterator(void) { + /* test nothing, as well */ +} + #else #include "unicode/unorm.h" @@ -1555,6 +1549,14 @@ compareIterNoIndexes(UCharIterator *iter1, const char *n1, UChar32 c1, c2; UErrorCode errorCode; + /* code coverage for unorm_it.c/unormIteratorGetIndex() */ + if( + iter2->getIndex(iter2, UITER_START)!=0 || + iter2->getIndex(iter2, UITER_LENGTH)!=UITER_UNKNOWN_INDEX + ) { + log_err("UNormIterator.getIndex() failed\n"); + } + /* set into the middle */ iter1->move(iter1, middle, UITER_ZERO); iter2->move(iter2, middle, UITER_ZERO); @@ -1786,4 +1788,30 @@ TestUNormIterator() { testUNormIteratorWithText(surrogateText, length, length, "UCharIterSurrEnd", "UNormIterSurrEnd1"); } +static void +TestBadUNormIterator(void) { +#if !UCONFIG_NO_NORMALIZATION + UErrorCode status = U_ILLEGAL_ESCAPE_SEQUENCE; + UNormIterator *uni; + + unorm_setIter(NULL, NULL, UNORM_NONE, &status); + if (status != U_ILLEGAL_ESCAPE_SEQUENCE) { + log_err("unorm_setIter changed the error code to: %s\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + unorm_setIter(NULL, NULL, UNORM_NONE, &status); + if (status != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("unorm_setIter didn't react correctly to bad arguments: %s\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + uni=unorm_openIter(NULL, 0, &status); + if(U_FAILURE(status)) { + log_err("unorm_openIter() fails: %s\n", u_errorName(status)); + return; + } + unorm_setIter(uni, NULL, UNORM_NONE, &status); + unorm_closeIter(uni); +#endif +} + #endif diff --git a/icuSources/test/cintltst/cutiltst.c b/icuSources/test/cintltst/cutiltst.c index c19b23de..2bb339c6 100644 --- a/icuSources/test/cintltst/cutiltst.c +++ b/icuSources/test/cintltst/cutiltst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************** @@ -18,6 +18,7 @@ void addLocaleTest(TestNode**); void addCLDRTest(TestNode**); void addUnicodeTest(TestNode**); void addUStringTest(TestNode**); +void addCaseTest(TestNode**); void addResourceBundleTest(TestNode**); void addNEWResourceBundleTest(TestNode**); void addHashtableTest(TestNode** root); @@ -37,6 +38,7 @@ void addUtility(TestNode** root) addCLDRTest(root); addUnicodeTest(root); addUStringTest(root); + addCaseTest(root); addResourceBundleTest(root); addNEWResourceBundleTest(root); addHashtableTest(root); diff --git a/icuSources/test/cintltst/eurocreg.c b/icuSources/test/cintltst/eurocreg.c index f82d9f75..a070374b 100644 --- a/icuSources/test/cintltst/eurocreg.c +++ b/icuSources/test/cintltst/eurocreg.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1999-2003, International Business Machines Corporation and + * Copyright (c) 1999-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ #include "unicode/utypes.h" @@ -11,6 +11,7 @@ void TestEuroRegression(void); void addTestEuroRegression(TestNode** root); +#if !UCONFIG_NO_LEGACY_CONVERSION void addTestEuroRegression(TestNode** root) { addTest(root, &TestEuroRegression, "tsconv/eurocreg/TestEuroRegression"); @@ -87,7 +88,7 @@ char convertersToCheck[][15] = { "cp1253", /* "cp819", "cp13488",*/ - "cpibm4971", + "ibm-4971", /*"ibm-9061",*/ /* was "cp869" changed 2002nov25 */ /* "cp813",*/ /*"ibm-9044",*/ /* was "cp852" changed 2002nov25 */ @@ -105,7 +106,7 @@ char convertersToCheck[][15] = { "ibm-5123", /* was "cp1027" changed 2003jan08 */ /* "cp300",*/ /* "cp4930",*/ - "cp1364", + "ibm-1364", /* "cp1362" removed 2000nov28 */ "cp1363", /* "cp1114", removed 2002jul3 @@ -179,3 +180,9 @@ UBool isEuroAware(UConverter* myConv) } } +#else +void addTestEuroRegression(TestNode** root) +{ + /* test nothing... */ +} +#endif diff --git a/icuSources/test/cintltst/hpmufn.c b/icuSources/test/cintltst/hpmufn.c index 1848abcd..ef7d2023 100644 --- a/icuSources/test/cintltst/hpmufn.c +++ b/icuSources/test/cintltst/hpmufn.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 200-20043, International Business Machines Corporation and + * Copyright (c) 2003-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* @@ -123,6 +123,7 @@ static void TestHeapFunctions() { UErrorCode status = U_ZERO_ERROR; UResourceBundle *rb = NULL; char *icuDataDir; + UVersionInfo unicodeVersion = {0,0,0,0}; UTraceEntry *traceEntryFunc; /* Tracing function ptrs. We need to save */ UTraceExit *traceExitFunc; /* and restore them across calls to */ @@ -136,6 +137,20 @@ static void TestHeapFunctions() { utrace_getFunctions(&traceContext, &traceEntryFunc, &traceExitFunc, &traceDataFunc); traceLevel = utrace_getLevel(); + /* Verify that ICU can be cleaned up and reinitialized successfully. + * Failure here usually means that some ICU service didn't clean up successfully, + * probably because some earlier test accidently left something open. */ + u_cleanup(); + utrace_setFunctions(traceContext, traceEntryFunc, traceExitFunc, traceDataFunc); + utrace_setLevel(traceLevel); + status = U_ZERO_ERROR; + u_setDataDirectory(icuDataDir); + u_init(&status); + TEST_STATUS(status, U_ZERO_ERROR); + if (U_FAILURE(status)) { + return; + } + /* Can not set memory functions if ICU is already initialized */ u_setMemoryFunctions(&gContext, myMemAlloc, myMemRealloc, myMemFree, &status); TEST_STATUS(status, U_INVALID_STATE_ERROR); @@ -187,6 +202,10 @@ static void TestHeapFunctions() { utrace_setFunctions(traceContext, traceEntryFunc, traceExitFunc, traceDataFunc); utrace_setLevel(traceLevel); u_setDataDirectory(icuDataDir); + u_getUnicodeVersion(unicodeVersion); + if (unicodeVersion[0] <= 0) { + log_err("Properties doesn't reinitialize without u_init.\n"); + } status = U_ZERO_ERROR; u_init(&status); TEST_STATUS(status, U_ZERO_ERROR); @@ -282,6 +301,20 @@ static void TestMutexFunctions() { utrace_getFunctions(&traceContext, &traceEntryFunc, &traceExitFunc, &traceDataFunc); traceLevel = utrace_getLevel(); + /* Verify that ICU can be cleaned up and reinitialized successfully. + * Failure here usually means that some ICU service didn't clean up successfully, + * probably because some earlier test accidently left something open. */ + u_cleanup(); + utrace_setFunctions(traceContext, traceEntryFunc, traceExitFunc, traceDataFunc); + utrace_setLevel(traceLevel); + status = U_ZERO_ERROR; + u_setDataDirectory(icuDataDir); + u_init(&status); + TEST_STATUS(status, U_ZERO_ERROR); + if (U_FAILURE(status)) { + return; + } + /* Can not set mutex functions if ICU is already initialized */ u_setMutexFunctions(&gContext, myMutexInit, myMutexDestroy, myMutexLock, myMutexUnlock, &status); TEST_STATUS(status, U_INVALID_STATE_ERROR); @@ -372,11 +405,12 @@ static void TestMutexFunctions() { int gIncCount = 0; int gDecCount = 0; const void *gIncDecContext; +const void *gExpectedContext = &gIncDecContext; static int32_t U_CALLCONV myIncFunc(const void *context, int32_t *p) { int32_t retVal; - TEST_ASSERT(context == gIncDecContext); + TEST_ASSERT(context == gExpectedContext); gIncCount++; retVal = ++(*p); return retVal; @@ -384,7 +418,7 @@ static int32_t U_CALLCONV myIncFunc(const void *context, int32_t *p) { static int32_t U_CALLCONV myDecFunc(const void *context, int32_t *p) { int32_t retVal; - TEST_ASSERT(context == gIncDecContext); + TEST_ASSERT(context == gExpectedContext); gDecCount++; retVal = --(*p); return retVal; @@ -404,14 +438,31 @@ static void TestIncDecFunctions() { const void *traceContext; int32_t traceLevel; + /* Save ICU's data dir and tracing functions so that they can be resored + after cleanup and reinit. */ + dataDir = safeGetICUDataDirectory(); + utrace_getFunctions(&traceContext, &traceEntryFunc, &traceExitFunc, &traceDataFunc); + traceLevel = utrace_getLevel(); + + /* Verify that ICU can be cleaned up and reinitialized successfully. + * Failure here usually means that some ICU service didn't clean up successfully, + * probably because some earlier test accidently left something open. */ + u_cleanup(); + utrace_setFunctions(traceContext, traceEntryFunc, traceExitFunc, traceDataFunc); + utrace_setLevel(traceLevel); + status = U_ZERO_ERROR; + u_setDataDirectory(dataDir); + u_init(&status); + TEST_STATUS(status, U_ZERO_ERROR); + if (U_FAILURE(status)) { + return; + } + /* Can not set mutex functions if ICU is already initialized */ u_setAtomicIncDecFunctions(&gIncDecContext, myIncFunc, myDecFunc, &status); TEST_STATUS(status, U_INVALID_STATE_ERROR); - /* Un-initialize ICU */ - dataDir = safeGetICUDataDirectory(); - utrace_getFunctions(&traceContext, &traceEntryFunc, &traceExitFunc, &traceDataFunc); - traceLevel = utrace_getLevel(); + /* Clean up ICU */ u_cleanup(); utrace_setFunctions(traceContext, traceEntryFunc, traceExitFunc, traceDataFunc); utrace_setLevel(traceLevel); @@ -426,8 +477,10 @@ static void TestIncDecFunctions() { /* u_setIncDecFunctions() should work with null or non-null context pointer */ status = U_ZERO_ERROR; + gExpectedContext = NULL; u_setAtomicIncDecFunctions(NULL, myIncFunc, myDecFunc, &status); TEST_STATUS(status, U_ZERO_ERROR); + gExpectedContext = &gIncDecContext; u_setAtomicIncDecFunctions(&gIncDecContext, myIncFunc, myDecFunc, &status); TEST_STATUS(status, U_ZERO_ERROR); @@ -437,6 +490,7 @@ static void TestIncDecFunctions() { u_setDataDirectory(dataDir); u_init(&status); TEST_STATUS(status, U_ZERO_ERROR); + gExpectedContext = &gIncDecContext; u_setAtomicIncDecFunctions(&gIncDecContext, myIncFunc, myDecFunc, &status); TEST_STATUS(status, U_INVALID_STATE_ERROR); diff --git a/icuSources/test/cintltst/idnatest.c b/icuSources/test/cintltst/idnatest.c index c7d5c1c9..49b51675 100644 --- a/icuSources/test/cintltst/idnatest.c +++ b/icuSources/test/cintltst/idnatest.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2007, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -34,6 +34,9 @@ static void TestIDNToUnicode(void); static void TestIDNToASCII(void); static void TestCompare(void); static void TestUnicode32Norm(void); +static void TestJB4490(void); +static void TestJB4475(void); +static void TestLength(void); void addIDNATest(TestNode** root); @@ -59,6 +62,9 @@ addIDNATest(TestNode** root) addTest(root, &TestIDNToASCII, "idna/TestIDNToASCII"); addTest(root, &TestCompare, "idna/TestCompare"); addTest(root, &TestUnicode32Norm,"idna/TestUnicode32Norm"); + addTest(root, &TestJB4490, "idna/TestJB4490"); + addTest(root, &TestJB4475, "idna/TestJB4475"); + addTest(root, &TestLength, "idna/TestLength"); } static void @@ -331,8 +337,10 @@ static UChar unicodeIn[][41] ={ 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432, 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443, 0x0441, 0x0441, 0x043a, 0x0438 + }, + { + 0x0054,0x0045,0x0053,0x0054 } - }; static const char *asciiIn[] = { @@ -358,7 +366,8 @@ static const char *asciiIn[] = { "XN--db8CBHEJLGH4E0AL", "xn--hxargifdar", /* Greek */ "xn--bonusaa-5bb1da", /* Maltese */ - "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", /* Russian (Cyrillic)*/ + "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", /* Russian (Cyrillic)*/ + "TEST" }; @@ -410,7 +419,7 @@ static const char *domainNames[] = { /*"\\u00CF\\u0082.com",*/ /*"\\u00CE\\u00B2\\u00C3\\u009Fss.com",*/ /*"\\u00E2\\u0098\\u00BA.com",*/ - "\\u00C3\\u00BC.com", + "\\u00C3\\u00BC.com" }; @@ -654,6 +663,102 @@ static void TestUnicode32Norm() { } } +static void TestJB4490(){ + static const UChar data[][50]= { + {0x00F5,0x00dE,0x00dF,0x00dD, 0x0000}, + {0xFB00,0xFB01} + }; + UChar output1[40] = {0}; + UChar output2[40] = {0}; + int32_t i; + for(i=0; i< sizeof(data)/sizeof(data[0]); i++){ + const UChar* src1 = data[i]; + int32_t src1Len = u_strlen(src1); + UChar* dest1 = output1; + int32_t dest1Len = 40; + UErrorCode status = U_ZERO_ERROR; + UParseError ps; + UChar* src2 = NULL; + int32_t src2Len = 0; + UChar* dest2 = output2; + int32_t dest2Len = 40; + dest1Len = uidna_toASCII(src1, src1Len, dest1, dest1Len,UIDNA_DEFAULT, &ps, &status); + if(U_FAILURE(status)){ + log_err("uidna_toUnicode failed with error %s.\n", u_errorName(status)); + } + src2 = dest1; + src2Len = dest1Len; + dest2Len = uidna_toUnicode(src2, src2Len, dest2, dest2Len, UIDNA_DEFAULT, &ps, &status); + if(U_FAILURE(status)){ + log_err("uidna_toUnicode failed with error %s.\n", u_errorName(status)); + } + } +} + +static void TestJB4475(){ + + static const UChar input[][10] = { + {0x0054,0x0045,0x0053,0x0054,0x0000},/* TEST */ + {0x0074,0x0065,0x0073,0x0074,0x0000} /* test */ + }; + int i; + UChar output[40] = {0}; + for(i=0; i< sizeof(input)/sizeof(input[0]); i++){ + const UChar* src = input[i]; + int32_t srcLen = u_strlen(src); + UChar* dest = output; + int32_t destLen = 40; + UErrorCode status = U_ZERO_ERROR; + UParseError ps; + + destLen = uidna_toASCII(src, srcLen, dest, destLen,UIDNA_DEFAULT, &ps, &status); + if(U_FAILURE(status)){ + log_err("uidna_toASCII failed with error %s.\n", u_errorName(status)); + } + if(u_strncmp(input[i], dest, srcLen)!=0){ + log_err("uidna_toASCII did not return the expected output.\n"); + } + } +} +static void TestLength(){ + { + static const char* cl = "my_very_very_very_very_very_very_very_long_and_incredibly_uncreative_domain_label"; + UChar ul[128] = {'\0'}; + UChar dest[256] = {'\0'}; + int32_t destLen = LENGTHOF(dest); + UErrorCode status = U_ZERO_ERROR; + UParseError ps; + int32_t len = (int32_t)strlen(cl); + u_charsToUChars(cl, ul, len+1); + destLen = uidna_toUnicode(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); + if(status != U_ZERO_ERROR){ + log_err("uidna_toUnicode failed with error %s.\n", u_errorName(status)); + } + status = U_ZERO_ERROR; + destLen = LENGTHOF(dest); + len = -1; + destLen = uidna_toUnicode(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); + if(status != U_ZERO_ERROR){ + log_err("uidna_toUnicode failed with error %s.\n", u_errorName(status)); + } + + status = U_ZERO_ERROR; + destLen = LENGTHOF(dest); + len = -1; + destLen = uidna_toASCII(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); + if(status != U_IDNA_LABEL_TOO_LONG_ERROR){ + log_err("uidna_toASCII failed with error %s.\n", u_errorName(status)); + } + + status = U_ZERO_ERROR; + destLen = LENGTHOF(dest); + len = -1; + destLen = uidna_toASCII(ul, len, dest, destLen, UIDNA_DEFAULT, &ps, &status); + if(status != U_IDNA_LABEL_TOO_LONG_ERROR){ + log_err("uidna_toASCII failed with error %s.\n", u_errorName(status)); + } + } +} #endif /* diff --git a/icuSources/test/cintltst/nccbtst.c b/icuSources/test/cintltst/nccbtst.c index 553c5b6e..d82d37b9 100644 --- a/icuSources/test/cintltst/nccbtst.c +++ b/icuSources/test/cintltst/nccbtst.c @@ -1,15 +1,16 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* +******************************************************************************** * File NCCBTST.C * * Modification History: * Name Description * Madhu Katragadda 7/21/1999 Testing error callback routines -************************************************************************************** +******************************************************************************** */ #include #include @@ -23,6 +24,7 @@ #include "unicode/utypes.h" #include "unicode/ustring.h" #include "nccbtst.h" +#include "unicode/ucnv_cb.h" #define NEW_MAX_BUFFER 999 #define nct_min(x,y) ((xibm-930 with skip with untaken fallbacks did not match.\n"); } } +#endif { static const UChar usasciiFromU[] = { 0x61, 0x80, 0x4e00, 0x31, 0xd800, 0xdfff, 0x39 }; @@ -213,6 +227,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) log_err("u->US-ASCII with skip did not match.\n"); } +#if !UCONFIG_NO_LEGACY_CONVERSION /* SBCS NLTC codepage 367 for US-ASCII */ if(!testConvertFromUnicode(usasciiFromU, sizeof(usasciiFromU)/U_SIZEOF_UCHAR, usasciiFromUBytes, sizeof(usasciiFromUBytes), @@ -222,6 +237,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) ) { log_err("u->ibm-367 with skip did not match.\n"); } +#endif /* ISO-Latin-1 */ if(!testConvertFromUnicode(latin1FromU, sizeof(latin1FromU)/U_SIZEOF_UCHAR, @@ -233,6 +249,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) log_err("u->LATIN_1 with skip did not match.\n"); } +#if !UCONFIG_NO_LEGACY_CONVERSION /* windows-1252 */ if(!testConvertFromUnicode(latin1FromU, sizeof(latin1FromU)/U_SIZEOF_UCHAR, latin1FromUBytes, sizeof(latin1FromUBytes), @@ -365,6 +382,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) }; +#endif static const UChar SCSU_inputText[]={ 0x0041, 0xd801/*illegal*/, 0x0042, }; @@ -379,6 +397,8 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) 2, }; + +#if !UCONFIG_NO_LEGACY_CONVERSION /* ISCII */ static const UChar iscii_inputText[]={ 0x0041, 0x3712/*unassigned*/, 0x0042, }; static const uint8_t to_iscii[]={ @@ -456,7 +476,8 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) if(!testConvertFromUnicodeWithContext(hz_inputText1, sizeof(hz_inputText1)/sizeof(hz_inputText1[0]), to_hz1, sizeof(to_hz1), "hz", UCNV_FROM_U_CALLBACK_SKIP, from_hzOffs1, NULL, 0,UCNV_SKIP_STOP_ON_ILLEGAL,U_ILLEGAL_CHAR_FOUND )) - log_err("u-> hz with skip & UCNV_SKIP_STOP_ON_ILLEGAL did not match.\n"); + log_err("u-> hz with skip & UCNV_SKIP_STOP_ON_ILLEGAL did not match.\n"); +#endif /*SCSU*/ if(!testConvertFromUnicode(SCSU_inputText, sizeof(SCSU_inputText)/sizeof(SCSU_inputText[0]), @@ -464,6 +485,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) UCNV_FROM_U_CALLBACK_SKIP, from_SCSUOffs, NULL, 0 )) log_err("u-> SCSU with skip did not match.\n"); +#if !UCONFIG_NO_LEGACY_CONVERSION /*ISCII*/ if(!testConvertFromUnicode(iscii_inputText, sizeof(iscii_inputText)/sizeof(iscii_inputText[0]), to_iscii, sizeof(to_iscii), "ISCII,version=0", @@ -474,7 +496,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) to_iscii1, sizeof(to_iscii1), "ISCII,version=0", UCNV_FROM_U_CALLBACK_SKIP, from_isciiOffs1, NULL, 0,UCNV_SKIP_STOP_ON_ILLEGAL,U_ILLEGAL_CHAR_FOUND )) log_err("u-> iscii with skip & UCNV_SKIP_STOP_ON_ILLEGAL did not match.\n"); - +#endif } log_verbose("Testing fromUnicode for BOCU-1 with UCNV_TO_U_CALLBACK_SKIP\n"); @@ -625,6 +647,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) /*to Unicode*/ log_verbose("Testing toUnicode with UCNV_TO_U_CALLBACK_SKIP \n"); +#if !UCONFIG_NO_LEGACY_CONVERSION { static const UChar IBM_949skiptoUnicode[]= {0x0000, 0xAC00, 0xAC01, 0xD700 }; @@ -656,6 +679,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) UCNV_TO_U_CALLBACK_SKIP, fromIBM930Offs, NULL, 0,"i",U_ILLEGAL_CHAR_FOUND )) log_err("ibm-930->u with skip did not match.\n"); } +#endif { static const uint8_t usasciiToUBytes[] = { 0x61, 0x80, 0x31 }; @@ -676,6 +700,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) log_err("US-ASCII->u with skip did not match.\n"); } +#if !UCONFIG_NO_LEGACY_CONVERSION /* SBCS NLTC codepage 367 for US-ASCII */ if(!testConvertToUnicode(usasciiToUBytes, sizeof(usasciiToUBytes), usasciiToU, sizeof(usasciiToU)/U_SIZEOF_UCHAR, @@ -685,6 +710,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) ) { log_err("ibm-367->u with skip did not match.\n"); } +#endif /* ISO-Latin-1 */ if(!testConvertToUnicode(latin1ToUBytes, sizeof(latin1ToUBytes), @@ -696,6 +722,7 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) log_err("LATIN_1->u with skip did not match.\n"); } +#if !UCONFIG_NO_LEGACY_CONVERSION /* windows-1252 */ if(!testConvertToUnicode(latin1ToUBytes, sizeof(latin1ToUBytes), latin1ToU, sizeof(latin1ToU)/U_SIZEOF_UCHAR, @@ -705,8 +732,10 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) ) { log_err("windows-1252->u with skip did not match.\n"); } +#endif } +#if !UCONFIG_NO_LEGACY_CONVERSION { static const uint8_t sampleTxtEBCIDIC_STATEFUL [] ={ 0x0e, 0x5d, 0x5f , 0x41, 0x79, 0x41, 0x44 @@ -869,6 +898,8 @@ static void TestSkip(int32_t inputsize, int32_t outputsize) log_err("LMBCS->u with skip did not match.\n"); } +#endif + log_verbose("Testing to Unicode for UTF-8 with UCNV_TO_U_CALLBACK_SKIP \n"); { const uint8_t sampleText1[] = { 0x31, 0xe4, 0xba, 0x8c, @@ -1068,7 +1099,10 @@ static void TestStop(int32_t inputsize, int32_t outputsize) gInBufferSize = inputsize; gOutBufferSize = outputsize; + /*From Unicode*/ + +#if !UCONFIG_NO_LEGACY_CONVERSION if(!testConvertFromUnicode(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expstopIBM_949, sizeof(expstopIBM_949), "ibm-949", UCNV_FROM_U_CALLBACK_STOP, toIBM949Offsstop, NULL, 0 )) @@ -1200,6 +1234,8 @@ static void TestStop(int32_t inputsize, int32_t outputsize) } +#endif + log_verbose("Testing fromUnicode for SCSU with UCNV_FROM_U_CALLBACK_STOP \n"); { static const UChar SCSU_inputText[]={ 0x0041, 0xd801/*illegal*/, 0x0042, }; @@ -1218,7 +1254,10 @@ static void TestStop(int32_t inputsize, int32_t outputsize) log_err("u-> SCSU with skip did not match.\n"); } + /*to Unicode*/ + +#if !UCONFIG_NO_LEGACY_CONVERSION if(!testConvertToUnicode(expstopIBM_949, sizeof(expstopIBM_949), IBM_949stoptoUnicode, sizeof(IBM_949stoptoUnicode)/sizeof(IBM_949stoptoUnicode[0]),"ibm-949", UCNV_TO_U_CALLBACK_STOP, fromIBM949Offs, NULL, 0 )) @@ -1275,6 +1314,8 @@ static void TestStop(int32_t inputsize, int32_t outputsize) UCNV_TO_U_CALLBACK_STOP, from_euc_twOffs, NULL, 0 )) log_err("euc-tw->u with stop did not match.\n"); } +#endif + log_verbose("Testing toUnicode for UTF-8 with UCNV_TO_U_CALLBACK_STOP \n"); { static const uint8_t sampleText1[] = { 0x31, 0xe4, 0xba, 0x8c, @@ -1331,6 +1372,8 @@ static void TestSub(int32_t inputsize, int32_t outputsize) gOutBufferSize = outputsize; /*from unicode*/ + +#if !UCONFIG_NO_LEGACY_CONVERSION if(!testConvertFromUnicode(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expsubIBM_949, sizeof(expsubIBM_949), "ibm-949", UCNV_FROM_U_CALLBACK_SUBSTITUTE, toIBM949Offssub, NULL, 0 )) @@ -1384,6 +1427,7 @@ static void TestSub(int32_t inputsize, int32_t outputsize) UCNV_FROM_U_CALLBACK_SUBSTITUTE, from_euc_twOffs, NULL, 0 )) log_err("u-> euc-tw with substitute did not match.\n"); } +#endif log_verbose("Testing fromUnicode for SCSU with UCNV_FROM_U_CALLBACK_SUBSTITUTE \n"); { @@ -1493,6 +1537,8 @@ static void TestSub(int32_t inputsize, int32_t outputsize) } /*to unicode*/ + +#if !UCONFIG_NO_LEGACY_CONVERSION if(!testConvertToUnicode(expsubIBM_949, sizeof(expsubIBM_949), IBM_949subtoUnicode, sizeof(IBM_949subtoUnicode)/sizeof(IBM_949subtoUnicode[0]),"ibm-949", UCNV_TO_U_CALLBACK_SUBSTITUTE, fromIBM949Offs, NULL, 0 )) @@ -1557,10 +1603,9 @@ static void TestSub(int32_t inputsize, int32_t outputsize) euc_jptoUnicode, sizeof(euc_jptoUnicode)/sizeof(euc_jptoUnicode[0]),"euc-jp", UCNV_TO_U_CALLBACK_SUBSTITUTE, from_euc_jpOffs, NULL, 0 ,"i", U_ILLEGAL_CHAR_FOUND)) log_err("euc-jp->u with substitute did not match.\n"); - - - } +#endif + log_verbose("Testing toUnicode for UTF-8 with UCNV_TO_U_CALLBACK_SUBSTITUTE \n"); { const uint8_t sampleText1[] = { 0x31, 0xe4, 0xba, 0x8c, @@ -1585,6 +1630,7 @@ static void TestSub(int32_t inputsize, int32_t outputsize) log_err("scsu->u with stop did not match.\n");; } +#if !UCONFIG_NO_LEGACY_CONVERSION log_verbose("Testing ibm-930 subchar/subchar1\n"); { static const UChar u1[]={ 0x6d63, 0x6d64, 0x6d65, 0x6d66, 0xdf }; @@ -1623,6 +1669,7 @@ static void TestSub(int32_t inputsize, int32_t outputsize) log_err("gb18030->u with substitute did not match.\n"); } } +#endif log_verbose("Testing UTF-7 toUnicode with substitute callbacks\n"); { @@ -1750,6 +1797,8 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize) gOutBufferSize = outputsize; /*from Unicode*/ + +#if !UCONFIG_NO_LEGACY_CONVERSION if(!testConvertFromUnicode(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expsubwvalIBM_949, sizeof(expsubwvalIBM_949), "ibm-949", UCNV_FROM_U_CALLBACK_ESCAPE, toIBM949Offs, NULL, 0 )) @@ -2187,11 +2236,12 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize) UCNV_FROM_U_CALLBACK_ESCAPE, from_isciiOffs, NULL, 0 )) log_err("u-> iscii with subst with value did not match.\n"); } - +#endif log_verbose("Testing toUnicode with UCNV_TO_U_CALLBACK_ESCAPE \n"); /*to Unicode*/ { +#if !UCONFIG_NO_LEGACY_CONVERSION static const uint8_t sampleTxtToU[]= { 0x00, 0x9f, 0xaf, 0x81, 0xad, /*unassigned*/ 0x89, 0xd3 }; @@ -2302,7 +2352,7 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize) 0x42,}; static const int32_t from_isciiOffs [] ={0,1,2,2,2,2,3,4,5,5,5,5,6 }; - +#endif /*UTF8*/ static const uint8_t sampleTxtUTF8[]={ @@ -2341,7 +2391,8 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize) 9 }; - + +#if !UCONFIG_NO_LEGACY_CONVERSION if(!testConvertToUnicode(sampleTxtToU, sizeof(sampleTxtToU), IBM_943toUnicode, sizeof(IBM_943toUnicode)/sizeof(IBM_943toUnicode[0]),"ibm-943", UCNV_TO_U_CALLBACK_ESCAPE, fromIBM943Offs, NULL, 0 )) @@ -2424,6 +2475,8 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize) isciitoUnicode, sizeof(isciitoUnicode)/sizeof(isciitoUnicode[0]),"ISCII,version=0", UCNV_TO_U_CALLBACK_ESCAPE, from_isciiOffs, NULL, 0)) log_err("ISCII ->u with substitute with value did not match.\n"); +#endif + if(!testConvertToUnicode(sampleTxtUTF8, sizeof(sampleTxtUTF8), UTF8ToUnicode, sizeof(UTF8ToUnicode)/sizeof(UTF8ToUnicode[0]),"UTF-8", UCNV_TO_U_CALLBACK_ESCAPE, fromUTF8, NULL, 0)) @@ -2435,6 +2488,7 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize) } } +#if !UCONFIG_NO_LEGACY_CONVERSION static void TestLegalAndOthers(int32_t inputsize, int32_t outputsize) { static const UChar legalText[] = { 0x0000, 0xAC00, 0xAC01, 0xD700 }; @@ -2522,8 +2576,7 @@ static void TestEBCDIC_STATEFUL_Sub(int32_t inputsize, int32_t outputsize) UCNV_FROM_U_CALLBACK_SUBSTITUTE, offset_930_subvaried, mySubChar, 1 )) log_err("u-> ibm-930(EBCDIC_STATEFUL) with subst(setSubChar=0x3f) did not match.\n"); } - - +#endif UBool testConvertFromUnicode(const UChar *source, int sourceLen, const uint8_t *expect, int expectLen, const char *codepage, UConverterFromUCallback callback , const int32_t *expectOffsets, @@ -2533,28 +2586,28 @@ UBool testConvertFromUnicode(const UChar *source, int sourceLen, const uint8_t UErrorCode status = U_ZERO_ERROR; UConverter *conv = 0; - uint8_t junkout[NEW_MAX_BUFFER]; /* FIX */ + char junkout[NEW_MAX_BUFFER]; /* FIX */ int32_t junokout[NEW_MAX_BUFFER]; /* FIX */ const UChar *src; - uint8_t *end; - uint8_t *targ; + char *end; + char *targ; int32_t *offs; int i; int32_t realBufferSize; - uint8_t *realBufferEnd; + char *realBufferEnd; const UChar *realSourceEnd; const UChar *sourceLimit; UBool checkOffsets = TRUE; UBool doFlush; char junk[9999]; char offset_str[9999]; - uint8_t *p; + char *p; UConverterFromUCallback oldAction = NULL; const void* oldContext = NULL; for(i=0;i #include @@ -61,8 +61,12 @@ static void setNuConvTestName(const char *codepage, const char *direction) static void TestSurrogateBehaviour(void); static void TestErrorBehaviour(void); + +#if !UCONFIG_NO_LEGACY_CONVERSION static void TestToUnicodeErrorBehaviour(void); static void TestGetNextErrorBehaviour(void); +#endif + static void TestRegressionUTF8(void); static void TestRegressionUTF32(void); static void TestAvailableConverters(void); @@ -115,8 +119,12 @@ void addExtraTests(TestNode** root) { addTest(root, &TestSurrogateBehaviour, "tsconv/ncnvtst/TestSurrogateBehaviour"); addTest(root, &TestErrorBehaviour, "tsconv/ncnvtst/TestErrorBehaviour"); + +#if !UCONFIG_NO_LEGACY_CONVERSION addTest(root, &TestToUnicodeErrorBehaviour, "tsconv/ncnvtst/ToUnicodeErrorBehaviour"); addTest(root, &TestGetNextErrorBehaviour, "tsconv/ncnvtst/TestGetNextErrorBehaviour"); +#endif + addTest(root, &TestAvailableConverters, "tsconv/ncnvtst/TestAvailableConverters"); addTest(root, &TestFlushInternalBuffer, "tsconv/ncnvtst/TestFlushInternalBuffer"); addTest(root, &TestResetBehaviour, "tsconv/ncnvtst/TestResetBehaviour"); @@ -132,10 +140,13 @@ static void TestSurrogateBehaviour(){ { UChar sampleText[] = {0x0031, 0xd801, 0xdc01, 0x0032}; const uint8_t expected[] = {0x31, 0x1a, 0x32}; + +#if !UCONFIG_NO_LEGACY_CONVERSION /*SBCS*/ if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expected, sizeof(expected), "ibm-920", 0 , TRUE, U_ZERO_ERROR)) log_err("u-> ibm-920 [UCNV_SBCS] not match.\n"); +#endif /*LATIN_1*/ if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), @@ -143,6 +154,8 @@ static void TestSurrogateBehaviour(){ log_err("u-> LATIN_1 not match.\n"); } + +#if !UCONFIG_NO_LEGACY_CONVERSION log_verbose("Testing for DBCS and MBCS\n"); { UChar sampleText[] = {0x00a1, 0xd801, 0xdc01, 0x00a4}; @@ -164,6 +177,7 @@ static void TestSurrogateBehaviour(){ expected, sizeof(expected), "ibm-1363", offsets, TRUE, U_ZERO_ERROR)) log_err("u-> ibm-1363 [UCNV_MBCS] not match.\n"); } + log_verbose("Testing for ISO-2022-jp\n"); { UChar sampleText[] = { 0x4e00, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -182,6 +196,7 @@ static void TestSurrogateBehaviour(){ expected, sizeof(expected), "iso-2022-jp", offsets , TRUE, U_ZERO_ERROR)) log_err("u-> not match.\n"); } + log_verbose("Testing for ISO-2022-cn\n"); { static const UChar sampleText[] = { 0x4e00, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -211,6 +226,7 @@ static void TestSurrogateBehaviour(){ expected, sizeof(expected), "iso-2022-cn", offsets , TRUE, U_ZERO_ERROR)) log_err("u-> not match.\n"); } + log_verbose("Testing for ISO-2022-kr\n"); { static const UChar sampleText[] = { 0x4e00,0xd801, 0xdc01, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -240,6 +256,7 @@ static void TestSurrogateBehaviour(){ expected, sizeof(expected), "iso-2022-kr", offsets , TRUE, U_ZERO_ERROR)) log_err("u-> iso-2022-kr [UCNV_DBCS] not match.\n"); } + log_verbose("Testing for HZ\n"); { static const UChar sampleText[] = { 0x4e00, 0xd801, 0xdc01, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -262,11 +279,13 @@ static void TestSurrogateBehaviour(){ /*hz*/ if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expected, sizeof(expected), "HZ", 0 , TRUE, U_ZERO_ERROR)) - log_err("u-> not match.\n"); + log_err("u-> HZ not match.\n"); if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expected, sizeof(expected), "HZ", offsets , TRUE, U_ZERO_ERROR)) - log_err("u-> not match.\n"); + log_err("u-> HZ not match.\n"); } +#endif + /*UTF-8*/ log_verbose("Testing for UTF8\n"); { @@ -295,21 +314,18 @@ static void TestSurrogateBehaviour(){ if(!convertToU(expected, sizeof(expected), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "UTF8", 0, TRUE, U_ZERO_ERROR )) - log_err("UTF8 -> did not match.\n"); + log_err("UTF8 -> u did not match.\n"); if(!convertToU(expected, sizeof(expected), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "UTF8", 0, FALSE, U_ZERO_ERROR )) - log_err("UTF8 -> did not match.\n"); + log_err("UTF8 -> u did not match.\n"); if(!convertToU(expected, sizeof(expected), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "UTF8", fromOffsets, TRUE, U_ZERO_ERROR )) - log_err("UTF8 -> did not match.\n"); + log_err("UTF8 ->u did not match.\n"); if(!convertToU(expected, sizeof(expected), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "UTF8", fromOffsets, FALSE, U_ZERO_ERROR )) - log_err("UTF8 -> did not match.\n"); + log_err("UTF8 -> u did not match.\n"); } - - - } /*test various error behaviours*/ @@ -322,6 +338,7 @@ static void TestErrorBehaviour(){ static const uint8_t expected[] = { 0x31, 0x1a}; static const uint8_t expected2[] = { 0x31, 0x1a, 0x32}; +#if !UCONFIG_NO_LEGACY_CONVERSION /*SBCS*/ if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expected, sizeof(expected), "ibm-920", 0, TRUE, U_ZERO_ERROR)) @@ -332,7 +349,7 @@ static void TestErrorBehaviour(){ if(!convertFromU(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expected2, sizeof(expected2), "ibm-920", 0, TRUE, U_ZERO_ERROR)) log_err("u-> ibm-920 [UCNV_SBCS] did not match\n"); - +#endif /*LATIN_1*/ if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), @@ -347,7 +364,7 @@ static void TestErrorBehaviour(){ log_err("u-> LATIN_1 did not match\n"); } - +#if !UCONFIG_NO_LEGACY_CONVERSION log_verbose("Testing for DBCS and MBCS\n"); { static const UChar sampleText[] = { 0x00a1, 0xd801}; @@ -368,10 +385,6 @@ static void TestErrorBehaviour(){ static const uint8_t expected4MBCS[] = { 0x61, 0x8f, 0xa2, 0xc3, 0xf4, 0xfe}; static const int32_t offsets4MBCS[] = { 0x00, 0x01, 0x01, 0x01, 0x02, 0x02 }; - - - - /*DBCS*/ if(!convertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedSUB, sizeof(expectedSUB), "ibm-1363", 0, TRUE, U_ZERO_ERROR)) @@ -427,6 +440,7 @@ static void TestErrorBehaviour(){ expected4MBCS, sizeof(expected4MBCS), "euc-jp", offsets4MBCS, FALSE, U_ZERO_ERROR)) log_err("u-> euc-jp [UCNV_MBCS] \n"); } + /*iso-2022-jp*/ log_verbose("Testing for iso-2022-jp\n"); { @@ -466,6 +480,7 @@ static void TestErrorBehaviour(){ expected4MBCS, sizeof(expected4MBCS), "iso-2022-jp", offsets4MBCS, FALSE, U_ZERO_ERROR)) log_err("u-> iso-2022-jp [UCNV_MBCS] \n"); } + /*iso-2022-cn*/ log_verbose("Testing for iso-2022-cn\n"); { @@ -516,6 +531,7 @@ static void TestErrorBehaviour(){ expected4MBCS, sizeof(expected4MBCS), "iso-2022-cn", offsets4MBCS, FALSE, U_ZERO_ERROR)) log_err("u-> iso-2022-cn [UCNV_MBCS] \n"); } + /*iso-2022-kr*/ log_verbose("Testing for iso-2022-kr\n"); { @@ -607,10 +623,10 @@ static void TestErrorBehaviour(){ expected4MBCS, sizeof(expected4MBCS), "HZ", offsets4MBCS, FALSE, U_ZERO_ERROR)) log_err("u-> HZ [UCNV_MBCS] \n"); } - - +#endif } +#if !UCONFIG_NO_LEGACY_CONVERSION /*test different convertToUnicode error behaviours*/ static void TestToUnicodeErrorBehaviour() { @@ -662,6 +678,7 @@ static void TestGetNextErrorBehaviour(){ } ucnv_close(cnv); } +#endif #define MAX_UTF16_LEN 2 #define MAX_UTF8_LEN 4 @@ -697,8 +714,42 @@ static void TestRegressionUTF8(){ log_err("UTF8->Unicode did not match.\n"); } } + free(standardForm); free(utf8); + + { + static const char src8[] = { (char)0xCC, (char)0x81, (char)0xCC, (char)0x80 }; + static const UChar expected[] = { 0x0301, 0x0300 }; + UConverter *conv8; + UErrorCode err = U_ZERO_ERROR; + UChar pivotBuffer[100]; + const UChar* const pivEnd = pivotBuffer + 100; + const char* srcBeg; + const char* srcEnd; + UChar* pivBeg; + + conv8 = ucnv_open("UTF-8", &err); + + srcBeg = src8; + pivBeg = pivotBuffer; + srcEnd = src8 + 3; + ucnv_toUnicode(conv8, &pivBeg, pivEnd, &srcBeg, srcEnd, 0, FALSE, &err); + if (srcBeg != srcEnd) { + log_err("Did not consume whole buffer on first call.\n"); + } + + srcEnd = src8 + 4; + ucnv_toUnicode(conv8, &pivBeg, pivEnd, &srcBeg, srcEnd, 0, TRUE, &err); + if (srcBeg != srcEnd) { + log_err("Did not consume whole buffer on second call.\n"); + } + + if (U_FAILURE(err) || (int32_t)(pivBeg - pivotBuffer) != 2 || u_strncmp(pivotBuffer, expected, 2) != 0) { + log_err("Did not get expected results for UTF-8.\n"); + } + ucnv_close(conv8); + } } #define MAX_UTF32_LEN 1 @@ -735,6 +786,106 @@ static void TestRegressionUTF32(){ } free(standardForm); free(utf32); + + { + /* Check for lone surrogate error handling. */ + static const UChar sampleBadStartSurrogate[] = { 0x0031, 0xD800, 0x0032 }; + static const UChar sampleBadEndSurrogate[] = { 0x0031, 0xDC00, 0x0032 }; + static const uint8_t expectedUTF32BE[] = { + 0x00, 0x00, 0x00, 0x31, + 0x00, 0x00, 0xff, 0xfd, + 0x00, 0x00, 0x00, 0x32 + }; + static const uint8_t expectedUTF32LE[] = { + 0x31, 0x00, 0x00, 0x00, + 0xfd, 0xff, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x00 + }; + static const int32_t offsetsUTF32[] = { + 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02 + }; + + if(!convertFromU(sampleBadStartSurrogate, sizeof(sampleBadStartSurrogate)/sizeof(sampleBadStartSurrogate[0]), + expectedUTF32BE, sizeof(expectedUTF32BE), "UTF-32BE", offsetsUTF32, TRUE, U_ZERO_ERROR)) + log_err("u->UTF-32BE\n"); + if(!convertFromU(sampleBadEndSurrogate, sizeof(sampleBadEndSurrogate)/sizeof(sampleBadEndSurrogate[0]), + expectedUTF32BE, sizeof(expectedUTF32BE), "UTF-32BE", offsetsUTF32, TRUE, U_ZERO_ERROR)) + log_err("u->UTF-32BE\n"); + + if(!convertFromU(sampleBadStartSurrogate, sizeof(sampleBadStartSurrogate)/sizeof(sampleBadStartSurrogate[0]), + expectedUTF32LE, sizeof(expectedUTF32LE), "UTF-32LE", offsetsUTF32, TRUE, U_ZERO_ERROR)) + log_err("u->UTF-32LE\n"); + if(!convertFromU(sampleBadEndSurrogate, sizeof(sampleBadEndSurrogate)/sizeof(sampleBadEndSurrogate[0]), + expectedUTF32LE, sizeof(expectedUTF32LE), "UTF-32LE", offsetsUTF32, TRUE, U_ZERO_ERROR)) + log_err("u->UTF-32LE\n"); + } + + { + static const char srcBE[] = { 0, 0, 0, 0x31, 0, 0, 0, 0x30 }; + static const UChar expected[] = { 0x0031, 0x0030 }; + UConverter *convBE; + UErrorCode err = U_ZERO_ERROR; + UChar pivotBuffer[100]; + const UChar* const pivEnd = pivotBuffer + 100; + const char* srcBeg; + const char* srcEnd; + UChar* pivBeg; + + convBE = ucnv_open("UTF-32BE", &err); + + srcBeg = srcBE; + pivBeg = pivotBuffer; + srcEnd = srcBE + 5; + ucnv_toUnicode(convBE, &pivBeg, pivEnd, &srcBeg, srcEnd, 0, FALSE, &err); + if (srcBeg != srcEnd) { + log_err("Did not consume whole buffer on first call.\n"); + } + + srcEnd = srcBE + 8; + ucnv_toUnicode(convBE, &pivBeg, pivEnd, &srcBeg, srcEnd, 0, TRUE, &err); + if (srcBeg != srcEnd) { + log_err("Did not consume whole buffer on second call.\n"); + } + + if (U_FAILURE(err) || (int32_t)(pivBeg - pivotBuffer) != 2 || u_strncmp(pivotBuffer, expected, 2) != 0) { + log_err("Did not get expected results for UTF-32BE.\n"); + } + ucnv_close(convBE); + } + { + static const char srcLE[] = { 0x31, 0, 0, 0, 0x30, 0, 0, 0 }; + static const UChar expected[] = { 0x0031, 0x0030 }; + UConverter *convLE; + UErrorCode err = U_ZERO_ERROR; + UChar pivotBuffer[100]; + const UChar* const pivEnd = pivotBuffer + 100; + const char* srcBeg; + const char* srcEnd; + UChar* pivBeg; + + convLE = ucnv_open("UTF-32LE", &err); + + srcBeg = srcLE; + pivBeg = pivotBuffer; + srcEnd = srcLE + 5; + ucnv_toUnicode(convLE, &pivBeg, pivEnd, &srcBeg, srcEnd, 0, FALSE, &err); + if (srcBeg != srcEnd) { + log_err("Did not consume whole buffer on first call.\n"); + } + + srcEnd = srcLE + 8; + ucnv_toUnicode(convLE, &pivBeg, pivEnd, &srcBeg, srcEnd, 0, TRUE, &err); + if (srcBeg != srcEnd) { + log_err("Did not consume whole buffer on second call.\n"); + } + + if (U_FAILURE(err) || (int32_t)(pivBeg - pivotBuffer) != 2 || u_strncmp(pivotBuffer, expected, 2) != 0) { + log_err("Did not get expected results for UTF-32LE.\n"); + } + ucnv_close(convLE); + } } /*Walk through the available converters*/ @@ -784,6 +935,7 @@ static void TestWithBufferSize(int32_t insize, int32_t outsize){ log_err("u-> UTF8 did not match.\n"); } +#if !UCONFIG_NO_LEGACY_CONVERSION log_verbose("Testing fromUnicode with UCNV_FROM_U_CALLBACK_ESCAPE \n"); { UChar inputTest[] = { 0x0061, 0xd801, 0xdc01, 0xd801, 0x0061 }; @@ -799,6 +951,7 @@ static void TestWithBufferSize(int32_t insize, int32_t outsize){ (UConverterFromUCallback)UCNV_FROM_U_CALLBACK_ESCAPE, offset,FALSE)) log_err("u-> ibm-943 with subst with value did not match.\n"); } +#endif log_verbose("Testing fromUnicode for UTF-8 with UCNV_TO_U_CALLBACK_SUBSTITUTE \n"); { @@ -812,7 +965,7 @@ static void TestWithBufferSize(int32_t insize, int32_t outsize){ log_err("utf8->u with substitute did not match.\n");; } - +#if !UCONFIG_NO_LEGACY_CONVERSION log_verbose("Testing toUnicode with UCNV_TO_U_CALLBACK_ESCAPE \n"); /*to Unicode*/ { @@ -830,7 +983,7 @@ static void TestWithBufferSize(int32_t insize, int32_t outsize){ log_err("ibm-943->u with substitute with value did not match.\n"); } - +#endif } static UBool convertFromU( const UChar *source, int sourceLen, const uint8_t *expect, int expectLen, @@ -838,13 +991,13 @@ static UBool convertFromU( const UChar *source, int sourceLen, const uint8_t *e { int32_t i=0; - uint8_t *p=0; + char *p=0; const UChar *src; - uint8_t buffer[MAX_LENGTH]; + char buffer[MAX_LENGTH]; int32_t offsetBuffer[MAX_LENGTH]; int32_t *offs=0; - uint8_t *targ; - uint8_t *targetLimit; + char *targ; + char *targetLimit; UChar *sourceLimit=0; UErrorCode status = U_ZERO_ERROR; UConverter *conv = 0; @@ -857,7 +1010,7 @@ static UBool convertFromU( const UChar *source, int sourceLen, const uint8_t *e log_verbose("Converter %s opened..\n", ucnv_getName(conv, &status)); for(i=0; i did not match.\n"); } + log_verbose("Testing Reset for ISO-2022-jp\n"); { static const UChar sampleText[] = { 0x4e00, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -1429,6 +1584,7 @@ static void TestResetBehaviour(void){ log_err("iso-2022-jp -> did not match.\n"); } + log_verbose("Testing Reset for ISO-2022-cn\n"); { static const UChar sampleText[] = { 0x4e00, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -1472,6 +1628,7 @@ static void TestResetBehaviour(void){ offsets1, TRUE)) log_err("iso-2022-cn -> did not match.\n"); } + log_verbose("Testing Reset for ISO-2022-kr\n"); { UChar sampleText[] = { 0x4e00,0xd801, 0xdc01, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -1519,6 +1676,7 @@ static void TestResetBehaviour(void){ offsets1, TRUE)) log_err("iso-2022-kr -> did not match.\n"); } + log_verbose("Testing Reset for HZ\n"); { static const UChar sampleText[] = { 0x4e00, 0xd801, 0xdc01, 0x04e01, 0x0031, 0xd801, 0xdc01, 0x0032}; @@ -1562,6 +1720,8 @@ static void TestResetBehaviour(void){ offsets1, TRUE)) log_err("hz -> did not match.\n"); } +#endif + /*UTF-8*/ log_verbose("Testing for UTF8\n"); { @@ -1692,13 +1852,17 @@ TestTruncated() { { "UTF-32", { 0, 0, 0x4e }, 3 }, { "UTF-32", { 0xff }, 1 }, { "UTF-32", { 0, 0, 0xfe, 0xff, 0 }, 5 }, - { "SCSU", { 0x0e, 0x4e }, 2 }, /* SQU 0x4e */ + +#if !UCONFIG_NO_LEGACY_CONVERSION { "BOCU-1", { 0xd5 }, 1 }, { "Shift-JIS", { 0xe0 }, 1 }, { "ibm-939", { 0x0e, 0x41 }, 2 } /* SO 0x41 */ +#else + { "BOCU-1", { 0xd5 }, 1 ,} +#endif }; int32_t i; @@ -1732,11 +1896,14 @@ TestUnicodeSet() { "SCSU", "BOCU-1", "CESU-8", +#if !UCONFIG_NO_LEGACY_CONVERSION "gb18030", +#endif "IMAP-mailbox-name" }; static const char *const lmbcsNames[]={ +#if !UCONFIG_NO_LEGACY_CONVERSION "LMBCS-1", "LMBCS-2", "LMBCS-3", @@ -1749,16 +1916,23 @@ TestUnicodeSet() { "LMBCS-17", "LMBCS-18", "LMBCS-19" +#endif }; static const NameRange nameRanges[]={ { "US-ASCII", 0, 0x7f, -1, -1, 0x80, 0x10ffff }, +#if !UCONFIG_NO_LEGACY_CONVERSION { "ibm-367", 0, 0x7f, -1, -1, 0x80, 0x10ffff }, +#endif { "ISO-8859-1", 0, 0x7f, -1, -1, 0x100, 0x10ffff }, +#if !UCONFIG_NO_LEGACY_CONVERSION { "UTF-8", 0, 0xd7ff, 0xe000, 0x10ffff, 0xd800, 0xdfff }, { "windows-1251", 0, 0x7f, 0x410, 0x44f, 0x3000, 0xd7ff }, { "HZ", 0x410, 0x44f, 0x4e00, 0x4eff, 0xac00, 0xd7ff }, { "shift-jis", 0x3041, 0x3093, 0x30a1, 0x30f3, 0x900, 0x1cff } +#else + { "UTF-8", 0, 0xd7ff, 0xe000, 0x10ffff, 0xd800, 0xdfff } +#endif }; /* open an empty set */ @@ -1865,5 +2039,17 @@ TestUnicodeSet() { ucnv_close(cnv); } + errorCode = U_ZERO_ERROR; + ucnv_getUnicodeSet(NULL, set, UCNV_ROUNDTRIP_SET, &errorCode); + if (errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("error: ucnv_getUnicodeSet(NULL) returned wrong status code %s\n", u_errorName(errorCode)); + } + errorCode = U_PARSE_ERROR; + /* Make sure that it does nothing if an error is passed in. Difficult to proper test for. */ + ucnv_getUnicodeSet(NULL, NULL, UCNV_ROUNDTRIP_SET, &errorCode); + if (errorCode != U_PARSE_ERROR) { + log_err("error: ucnv_getUnicodeSet(NULL) returned wrong status code %s\n", u_errorName(errorCode)); + } + uset_close(set); } diff --git a/icuSources/test/cintltst/nfsprep.c b/icuSources/test/cintltst/nfsprep.c index fc7e2482..fc046820 100644 --- a/icuSources/test/cintltst/nfsprep.c +++ b/icuSources/test/cintltst/nfsprep.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -132,46 +132,6 @@ CLEANUP: return u_terminateChars(dest, destCapacity, reqLength, status); } -static void -syntaxError( const UChar* rules, - int32_t pos, - int32_t rulesLen, - UParseError* parseError){ - int32_t start, stop; - if(parseError == NULL){ - return; - } - if(pos == rulesLen && rulesLen >0){ - pos--; - } - parseError->offset = pos; - parseError->line = 0 ; /* we are not using line numbers */ - - /* for pre-context */ - start = (pos <=U_PARSE_CONTEXT_LEN)? 0 : (pos - (U_PARSE_CONTEXT_LEN-1)); - stop = pos; - - u_memcpy(parseError->preContext,rules+start,stop-start); - /* null terminate the buffer */ - parseError->preContext[stop-start] = 0; - - /* for post-context */ - start = pos; - if(startpostContext,rules+start,stop-start); - /* null terminate the buffer */ - parseError->postContext[stop-start]= 0; - } - -} - - /* sorted array for binary search*/ static const char* special_prefixes[]={ "\x0041\x004e\x004f\x004e\x0059\x004d\x004f\x0055\x0053", diff --git a/icuSources/test/cintltst/nucnvtst.c b/icuSources/test/cintltst/nucnvtst.c index b67c69d9..baecb458 100644 --- a/icuSources/test/cintltst/nucnvtst.c +++ b/icuSources/test/cintltst/nucnvtst.c @@ -1,16 +1,16 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ -/******************************************************************************** +/******************************************************************************* * * File CCONVTST.C * * Modification History: * Name Description * Steven R. Loomis 7/8/1999 Adding input buffer test -********************************************************************************* +******************************************************************************** */ #include #include "cstring.h" @@ -44,12 +44,16 @@ static void TestUTF32(void); static void TestUTF32BE(void); static void TestUTF32LE(void); static void TestLATIN1(void); + +#if !UCONFIG_NO_LEGACY_CONVERSION static void TestSBCS(void); static void TestDBCS(void); static void TestMBCS(void); + #ifdef U_ENABLE_GENERIC_ISO_2022 static void TestISO_2022(void); #endif + static void TestISO_2022_JP(void); static void TestISO_2022_JP_1(void); static void TestISO_2022_JP_2(void); @@ -59,7 +63,11 @@ static void TestISO_2022_CN(void); static void TestISO_2022_CN_EXT(void); static void TestJIS(void); static void TestHZ(void); +#endif + static void TestSCSU(void); + +#if !UCONFIG_NO_LEGACY_CONVERSION static void TestEBCDIC_STATEFUL(void); static void TestGB18030(void); static void TestLMBCS(void); @@ -67,16 +75,19 @@ static void TestJitterbug255(void); static void TestEBCDICUS4XML(void); static void TestJitterbug915(void); static void TestISCII(void); + +static void TestCoverageMBCS(void); +static void TestJitterbug2346(void); +static void TestJitterbug2411(void); +#endif + +static void TestRoundTrippingAllUTF(void); static void TestConv(const uint16_t in[], int len, const char* conv, const char* lang, char byteArr[], int byteArrLen); -static void TestRoundTrippingAllUTF(void); -static void TestCoverageMBCS(void); -static void TestJitterbug2346(void); -static void TestJitterbug2411(void); void addTestNewConvert(TestNode** root); /* open a converter, using test data if it begins with '@' */ @@ -229,15 +240,22 @@ void addTestNewConvert(TestNode** root) addTest(root, &TestUTF32, "tsconv/nucnvtst/TestUTF32"); addTest(root, &TestUTF32BE, "tsconv/nucnvtst/TestUTF32BE"); addTest(root, &TestUTF32LE, "tsconv/nucnvtst/TestUTF32LE"); + +#if !UCONFIG_NO_LEGACY_CONVERSION addTest(root, &TestLMBCS, "tsconv/nucnvtst/TestLMBCS"); +#endif addTest(root, &TestLATIN1, "tsconv/nucnvtst/TestLATIN1"); + +#if !UCONFIG_NO_LEGACY_CONVERSION addTest(root, &TestSBCS, "tsconv/nucnvtst/TestSBCS"); addTest(root, &TestDBCS, "tsconv/nucnvtst/TestDBCS"); addTest(root, &TestMBCS, "tsconv/nucnvtst/TestMBCS"); + #ifdef U_ENABLE_GENERIC_ISO_2022 addTest(root, &TestISO_2022, "tsconv/nucnvtst/TestISO_2022"); #endif + addTest(root, &TestISO_2022_JP, "tsconv/nucnvtst/TestISO_2022_JP"); addTest(root, &TestJIS, "tsconv/nucnvtst/TestJIS"); addTest(root, &TestISO_2022_JP_1, "tsconv/nucnvtst/TestISO_2022_JP_1"); @@ -248,20 +266,35 @@ void addTestNewConvert(TestNode** root) addTest(root, &TestISO_2022_CN_EXT, "tsconv/nucnvtst/TestISO_2022_CN_EXT"); addTest(root, &TestJitterbug915, "tsconv/nucnvtst/TestJitterbug915"); addTest(root, &TestHZ, "tsconv/nucnvtst/TestHZ"); +#endif + addTest(root, &TestSCSU, "tsconv/nucnvtst/TestSCSU"); + +#if !UCONFIG_NO_LEGACY_CONVERSION addTest(root, &TestEBCDIC_STATEFUL, "tsconv/nucnvtst/TestEBCDIC_STATEFUL"); addTest(root, &TestGB18030, "tsconv/nucnvtst/TestGB18030"); addTest(root, &TestJitterbug255, "tsconv/nucnvtst/TestJitterbug255"); addTest(root, &TestEBCDICUS4XML, "tsconv/nucnvtst/TestEBCDICUS4XML"); addTest(root, &TestISCII, "tsconv/nucnvtst/TestISCII"); + #if !UCONFIG_NO_COLLATION addTest(root, &TestJitterbug981, "tsconv/nucnvtst/TestJitterbug981"); #endif + addTest(root, &TestJitterbug1293, "tsconv/nucnvtst/TestJitterbug1293"); +#endif + + +#if !UCONFIG_NO_LEGACY_CONVERSION addTest(root, &TestCoverageMBCS, "tsconv/nucnvtst/TestCoverageMBCS"); +#endif + addTest(root, &TestRoundTrippingAllUTF, "tsconv/nucnvtst/TestRoundTrippingAllUTF"); + +#if !UCONFIG_NO_LEGACY_CONVERSION addTest(root, &TestJitterbug2346, "tsconv/nucnvtst/TestJitterbug2346"); addTest(root, &TestJitterbug2411, "tsconv/nucnvtst/TestJitterbug2411"); +#endif } @@ -294,23 +327,23 @@ static ETestConvertResult testConvertFromU( const UChar *source, int sourceLen, { UErrorCode status = U_ZERO_ERROR; UConverter *conv = 0; - uint8_t junkout[NEW_MAX_BUFFER]; /* FIX */ + char junkout[NEW_MAX_BUFFER]; /* FIX */ int32_t junokout[NEW_MAX_BUFFER]; /* FIX */ - uint8_t *p; + char *p; const UChar *src; - uint8_t *end; - uint8_t *targ; + char *end; + char *targ; int32_t *offs; int i; int32_t realBufferSize; - uint8_t *realBufferEnd; + char *realBufferEnd; const UChar *realSourceEnd; const UChar *sourceLimit; UBool checkOffsets = TRUE; UBool doFlush; for(i=0;i h1 h2 h3 . EBCDIC_STATEFUL */ - const uint8_t expectedIBM930[] = + static const uint8_t expectedIBM930[] = { 0xF1, 0xF2, 0xF3, 0x00, 0x0E, 0x45, 0x41, 0x45, 0x42, 0x45, 0x43, 0x0F, 0x4B }; - int32_t toIBM930Offs[] = + static const int32_t toIBM930Offs[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, }; - int32_t fmIBM930Offs[] = + static const int32_t fmIBM930Offs[] = { 0x0000, 0x0001, 0x0002, 0x0003, 0x0005, 0x0007, 0x0009, 0x000c}; /* 1 2 3 0 h1 h2 h3 . MBCS*/ - const uint8_t expectedIBM943[] = + static const uint8_t expectedIBM943[] = { 0x31, 0x32, 0x33, 0x00, 0x88, 0xea, 0x93, 0xf1, 0x8e, 0x4f, 0x2e }; - int32_t toIBM943Offs [] = + static const int32_t toIBM943Offs [] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07 }; - int32_t fmIBM943Offs[] = + static const int32_t fmIBM943Offs[] = { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0006, 0x0008, 0x000a}; /* 1 2 3 0 h1 h2 h3 . DBCS*/ - const uint8_t expectedIBM9027[] = + static const uint8_t expectedIBM9027[] = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c, 0x41, 0x4c, 0x48, 0x4c, 0x55, 0xfe, 0xfe}; - int32_t toIBM9027Offs [] = + static const int32_t toIBM9027Offs [] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07}; /* 1 2 3 0 . SBCS*/ - const uint8_t expectedIBM920[] = + static const uint8_t expectedIBM920[] = { 0x31, 0x32, 0x33, 0x00, 0x1a, 0x1a, 0x1a, 0x2e }; - int32_t toIBM920Offs [] = + static const int32_t toIBM920Offs [] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; /* 1 2 3 0 . SBCS*/ - const uint8_t expectedISO88593[] = + static const uint8_t expectedISO88593[] = { 0x31, 0x32, 0x33, 0x00, 0x1a, 0x1a, 0x1a, 0x2E }; - int32_t toISO88593Offs[] = + static const int32_t toISO88593Offs[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; - /* 1 2 3 0 . LATIN_1*/ - const uint8_t expectedLATIN1[] = + /* 1 2 3 0 . LATIN_1*/ + static const uint8_t expectedLATIN1[] = { 0x31, 0x32, 0x33, 0x00, 0x1a, 0x1a, 0x1a, 0x2E }; - int32_t toLATIN1Offs[] = + static const int32_t toLATIN1Offs[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; /* etc */ - const uint8_t expectedUTF16BE[] = + static const uint8_t expectedUTF16BE[] = { 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x00, 0x4e, 0x00, 0x4e, 0x8c, 0x4e, 0x09, 0x00, 0x2e }; - int32_t toUTF16BEOffs[]= + static const int32_t toUTF16BEOffs[]= { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07}; - int32_t fmUTF16BEOffs[] = + static const int32_t fmUTF16BEOffs[] = { 0x0000, 0x0002, 0x0004, 0x0006, 0x0008, 0x000a, 0x000c, 0x000e }; - const uint8_t expectedUTF16LE[] = + static const uint8_t expectedUTF16LE[] = { 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x8c, 0x4e, 0x09, 0x4e, 0x2e, 0x00 }; - int32_t toUTF16LEOffs[]= + static const int32_t toUTF16LEOffs[]= { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07}; - int32_t fmUTF16LEOffs[] = + static const int32_t fmUTF16LEOffs[] = { 0x0000, 0x0002, 0x0004, 0x0006, 0x0008, 0x000a, 0x000c, 0x000e }; - const uint8_t expectedUTF32BE[] = + static const uint8_t expectedUTF32BE[] = { 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, @@ -701,7 +734,7 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x00, 0x00, 0x4e, 0x8c, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, 0x00, 0x2e }; - int32_t toUTF32BEOffs[]= + static const int32_t toUTF32BEOffs[]= { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, @@ -711,10 +744,10 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08 }; - int32_t fmUTF32BEOffs[] = + static const int32_t fmUTF32BEOffs[] = { 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x001c }; - const uint8_t expectedUTF32LE[] = + static const uint8_t expectedUTF32LE[] = { 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, @@ -723,7 +756,7 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x8c, 0x4e, 0x00, 0x00, 0x09, 0x4e, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00 }; - int32_t toUTF32LEOffs[]= + static const int32_t toUTF32LEOffs[]= { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, @@ -733,7 +766,7 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08 }; - int32_t fmUTF32LEOffs[] = + static const int32_t fmUTF32LEOffs[] = { 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x001c }; @@ -742,45 +775,46 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) /** Test chars #2 **/ /* Sahha [health], slashed h's */ - const UChar malteseUChars[] = { 0x0053, 0x0061, 0x0127, 0x0127, 0x0061 }; - const uint8_t expectedMaltese913[] = { 0x53, 0x61, 0xB1, 0xB1, 0x61 }; + static const UChar malteseUChars[] = { 0x0053, 0x0061, 0x0127, 0x0127, 0x0061 }; + static const uint8_t expectedMaltese913[] = { 0x53, 0x61, 0xB1, 0xB1, 0x61 }; /* LMBCS */ - const UChar LMBCSUChars[] = { 0x0027, 0x010A, 0x0000, 0x0127, 0x2666, 0x0220 }; - const uint8_t expectedLMBCS[] = { 0x27, 0x06, 0x04, 0x00, 0x01, 0x73, 0x01, 0x04, 0x14, 0x02, 0x20 }; - int32_t toLMBCSOffs[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x04 , 0x05, 0x05, 0x05 }; - int32_t fmLMBCSOffs[] = { 0x0000, 0x0001, 0x0003, 0x0004, 0x0006, 0x0008}; + static const UChar LMBCSUChars[] = { 0x0027, 0x010A, 0x0000, 0x0127, 0x2666, 0x0220 }; + static const uint8_t expectedLMBCS[] = { 0x27, 0x06, 0x04, 0x00, 0x01, 0x73, 0x01, 0x04, 0x14, 0x02, 0x20 }; + static const int32_t toLMBCSOffs[] = { 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x04 , 0x05, 0x05, 0x05 }; + static const int32_t fmLMBCSOffs[] = { 0x0000, 0x0001, 0x0003, 0x0004, 0x0006, 0x0008}; /*********************************** START OF CODE finally *************/ - gInBufferSize = insize; - gOutBufferSize = outsize; + gInBufferSize = insize; + gOutBufferSize = outsize; - log_verbose("\n\n\nTesting conversions with InputBufferSize = %d, OutputBufferSize = %d\n", gInBufferSize, gOutBufferSize); + log_verbose("\n\n\nTesting conversions with InputBufferSize = %d, OutputBufferSize = %d\n", gInBufferSize, gOutBufferSize); -#if 1 /*UTF-8*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedUTF8, sizeof(expectedUTF8), "UTF8", toUTF8Offs,FALSE ); log_verbose("Test surrogate behaviour for UTF8\n"); { - const UChar testinput[]={ 0x20ac, 0xd801, 0xdc01, 0xdc01 }; - const uint8_t expectedUTF8test2[]= { 0xe2, 0x82, 0xac, + static const UChar testinput[]={ 0x20ac, 0xd801, 0xdc01, 0xdc01 }; + static const uint8_t expectedUTF8test2[]= { 0xe2, 0x82, 0xac, 0xf0, 0x90, 0x90, 0x81, 0xef, 0xbf, 0xbd }; - int32_t offsets[]={ 0, 0, 0, 1, 1, 1, 1, 3, 3, 3 }; + static const int32_t offsets[]={ 0, 0, 0, 1, 1, 1, 1, 3, 3, 3 }; testConvertFromU(testinput, sizeof(testinput)/sizeof(testinput[0]), expectedUTF8test2, sizeof(expectedUTF8test2), "UTF8", offsets,FALSE ); } -#ifdef U_ENABLE_GENERIC_ISO_2022 + +#if !UCONFIG_NO_LEGACY_CONVERSION && defined(U_ENABLE_GENERIC_ISO_2022) /*ISO-2022*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedISO2022, sizeof(expectedISO2022), "ISO_2022", toISO2022Offs,FALSE ); #endif + /*UTF16 LE*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedUTF16LE, sizeof(expectedUTF16LE), "utf-16le", toUTF16LEOffs,FALSE ); @@ -793,9 +827,12 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) /*UTF32 BE*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedUTF32BE, sizeof(expectedUTF32BE), "utf-32be", toUTF32BEOffs,FALSE ); + /*LATIN_1*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedLATIN1, sizeof(expectedLATIN1), "LATIN_1", toLATIN1Offs,FALSE ); + +#if !UCONFIG_NO_LEGACY_CONVERSION /*EBCDIC_STATEFUL*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedIBM930, sizeof(expectedIBM930), "ibm-930", toIBM930Offs,FALSE ); @@ -816,20 +853,20 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) /*SBCS*/ testConvertFromU(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expectedISO88593, sizeof(expectedISO88593), "iso-8859-3", toISO88593Offs,FALSE ); +#endif /****/ -#endif -#if 1 /*UTF-8*/ testConvertToU(expectedUTF8, sizeof(expectedUTF8), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "utf8", fmUTF8Offs,FALSE); -#ifdef U_ENABLE_GENERIC_ISO_2022 +#if !UCONFIG_NO_LEGACY_CONVERSION && defined(U_ENABLE_GENERIC_ISO_2022) /*ISO-2022*/ testConvertToU(expectedISO2022, sizeof(expectedISO2022), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "ISO_2022", fmISO2022Offs,FALSE); #endif + /*UTF16 LE*/ testConvertToU(expectedUTF16LE, sizeof(expectedUTF16LE), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "utf-16le", fmUTF16LEOffs,FALSE); @@ -842,17 +879,21 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) /*UTF32 BE*/ testConvertToU(expectedUTF32BE, sizeof(expectedUTF32BE), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "utf-32be", fmUTF32BEOffs,FALSE); + +#if !UCONFIG_NO_LEGACY_CONVERSION /*EBCDIC_STATEFUL*/ testConvertToU(expectedIBM930, sizeof(expectedIBM930), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "ibm-930", fmIBM930Offs,FALSE); /*MBCS*/ testConvertToU(expectedIBM943, sizeof(expectedIBM943), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "ibm-943", fmIBM943Offs,FALSE); +#endif /* Try it again to make sure it still works */ testConvertToU(expectedUTF16LE, sizeof(expectedUTF16LE), sampleText, sizeof(sampleText)/sizeof(sampleText[0]), "utf-16le", fmUTF16LEOffs,FALSE); +#if !UCONFIG_NO_LEGACY_CONVERSION testConvertToU(expectedMaltese913, sizeof(expectedMaltese913), malteseUChars, sizeof(malteseUChars)/sizeof(malteseUChars[0]), "latin3", NULL,FALSE); @@ -864,6 +905,7 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) expectedLMBCS, sizeof(expectedLMBCS), "LMBCS-1", toLMBCSOffs,FALSE ); testConvertToU(expectedLMBCS, sizeof(expectedLMBCS), LMBCSUChars, sizeof(LMBCSUChars)/sizeof(LMBCSUChars[0]), "LMBCS-1", fmLMBCSOffs,FALSE); +#endif /* UTF-7 examples are mostly from http://www.imc.org/rfc2152 */ { @@ -1066,7 +1108,6 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x02, 0x62 }; - static const uint16_t utf32Expected[]={ 0x0061, 0xfffd, /* 0x110000 out of range */ @@ -1078,13 +1119,34 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x0162, 0x0262 }; - static const int32_t utf32Offsets[]={ 0, 4, 8, 8, 12, 16, 20, 24, 28 }; + static const uint8_t utf32ExpectedBack[]={ + 0x00, 0x00, 0x00, 0x61, + 0x00, 0x00, 0xff, 0xfd, /* 0x110000 out of range */ + 0x00, 0x10, 0xff, 0xff, /* 0x10FFFF in range */ + 0x00, 0x00, 0x00, 0x62, + 0x00, 0x00, 0xff, 0xfd, /* 0xffffffff out of range */ + 0x00, 0x00, 0xff, 0xfd, /* 0x7fffffff out of range */ + 0x00, 0x00, 0x01, 0x62, + 0x00, 0x00, 0x02, 0x62 + }; + static const int32_t utf32OffsetsBack[]={ + 0,0,0,0, + 1,1,1,1, + 2,2,2,2, + 4,4,4,4, + 5,5,5,5, + 6,6,6,6, + 7,7,7,7, + 8,8,8,8 + }; + testConvertToU(utf32, sizeof(utf32), utf32Expected, sizeof(utf32Expected)/sizeof(utf32Expected[0]), "utf-32be", utf32Offsets ,FALSE); - + testConvertFromU(utf32Expected, sizeof(utf32Expected)/sizeof(utf32Expected[0]), + utf32ExpectedBack, sizeof(utf32ExpectedBack), "utf-32be", utf32OffsetsBack, FALSE); } /* Test UTF-32LE bad data handling*/ @@ -1111,13 +1173,33 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize ) 0x0162, 0x0262 }; - static const int32_t utf32Offsets[]={ 0, 4, 8, 8, 12, 16, 20, 24, 28 }; + static const uint8_t utf32ExpectedBack[]={ + 0x61, 0x00, 0x00, 0x00, + 0xfd, 0xff, 0x00, 0x00, /* 0x110000 out of range */ + 0xff, 0xff, 0x10, 0x00, /* 0x10FFFF in range */ + 0x62, 0x00, 0x00, 0x00, + 0xfd, 0xff, 0x00, 0x00, /* 0xffffffff out of range */ + 0xfd, 0xff, 0x00, 0x00, /* 0x7fffffff out of range */ + 0x62, 0x01, 0x00, 0x00, + 0x62, 0x02, 0x00, 0x00 + }; + static const int32_t utf32OffsetsBack[]={ + 0,0,0,0, + 1,1,1,1, + 2,2,2,2, + 4,4,4,4, + 5,5,5,5, + 6,6,6,6, + 7,7,7,7, + 8,8,8,8 + }; testConvertToU(utf32, sizeof(utf32), utf32Expected, sizeof(utf32Expected)/sizeof(utf32Expected[0]), "utf-32le", utf32Offsets,FALSE ); - + testConvertFromU(utf32Expected, sizeof(utf32Expected)/sizeof(utf32Expected[0]), + utf32ExpectedBack, sizeof(utf32ExpectedBack), "utf-32le", utf32OffsetsBack, FALSE); } } @@ -1237,6 +1319,7 @@ static void TestConverterType(const char *convName, UConverterType convType) { static void TestConverterTypesAndStarters() { +#if !UCONFIG_NO_LEGACY_CONVERSION UConverter* myConverter; UErrorCode err = U_ZERO_ERROR; UBool mystarters[256]; @@ -1297,19 +1380,33 @@ static void TestConverterTypesAndStarters() TestConverterType("ibm-930", UCNV_EBCDIC_STATEFUL); TestConverterType("ibm-878", UCNV_SBCS); +#endif + TestConverterType("iso-8859-1", UCNV_LATIN_1); + TestConverterType("ibm-1208", UCNV_UTF8); + TestConverterType("utf-8", UCNV_UTF8); TestConverterType("UTF-16BE", UCNV_UTF16_BigEndian); TestConverterType("UTF-16LE", UCNV_UTF16_LittleEndian); TestConverterType("UTF-32BE", UCNV_UTF32_BigEndian); TestConverterType("UTF-32LE", UCNV_UTF32_LittleEndian); -#ifdef U_ENABLE_GENERIC_ISO_2022 + +#if !UCONFIG_NO_LEGACY_CONVERSION + +#if defined(U_ENABLE_GENERIC_ISO_2022) TestConverterType("iso-2022", UCNV_ISO_2022); #endif + TestConverterType("hz", UCNV_HZ); +#endif + TestConverterType("scsu", UCNV_SCSU); + +#if !UCONFIG_NO_LEGACY_CONVERSION TestConverterType("x-iscii-de", UCNV_ISCII); +#endif + TestConverterType("ascii", UCNV_US_ASCII); TestConverterType("utf-7", UCNV_UTF7); TestConverterType("IMAP-mailbox-name", UCNV_IMAP_MAILBOX); @@ -1365,7 +1462,7 @@ static void TestAmbiguous() { UErrorCode status = U_ZERO_ERROR; UConverter *ascii_cnv = 0, *sjis_cnv = 0, *cnv; - const char target[] = { + static const char target[] = { /* "\\usr\\local\\share\\data\\icutest.txt" */ 0x5c, 0x75, 0x73, 0x72, 0x5c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, @@ -1391,6 +1488,7 @@ static void TestAmbiguous() } } +#if !UCONFIG_NO_LEGACY_CONVERSION sjis_cnv = ucnv_open("ibm-943", &status); if (U_FAILURE(status)) { @@ -1405,7 +1503,7 @@ static void TestAmbiguous() return; } /* convert target from SJIS to Unicode */ - sjisLength = ucnv_toUChars(sjis_cnv, sjisResult, sizeof(sjisResult)/U_SIZEOF_UCHAR, target, strlen(target), &status); + sjisLength = ucnv_toUChars(sjis_cnv, sjisResult, sizeof(sjisResult)/U_SIZEOF_UCHAR, target, (int32_t)strlen(target), &status); if (U_FAILURE(status)) { log_err("Failed to convert the SJIS string.\n"); @@ -1414,7 +1512,7 @@ static void TestAmbiguous() return; } /* convert target from Latin-1 to Unicode */ - asciiLength = ucnv_toUChars(ascii_cnv, asciiResult, sizeof(asciiResult)/U_SIZEOF_UCHAR, target, strlen(target), &status); + asciiLength = ucnv_toUChars(ascii_cnv, asciiResult, sizeof(asciiResult)/U_SIZEOF_UCHAR, target, (int32_t)strlen(target), &status); if (U_FAILURE(status)) { log_err("Failed to convert the Latin-1 string.\n"); @@ -1443,6 +1541,7 @@ static void TestAmbiguous() } ucnv_close(sjis_cnv); ucnv_close(ascii_cnv); +#endif } static void @@ -2668,14 +2767,14 @@ static void TestToAndFromUChars(const uint16_t* source, const UChar* sourceLimit uTarget = uBuf; uTargetLimit = uBuf+ uBufSize*5; ucnv_reset(cnv); - numCharsInTarget=ucnv_fromUChars( cnv , cTarget, (cTargetLimit-cTarget),uSource,(uSourceLimit-uSource), &errorCode); + numCharsInTarget=ucnv_fromUChars(cnv, cTarget, (int32_t)(cTargetLimit-cTarget), uSource, (int32_t)(uSourceLimit-uSource), &errorCode); if(U_FAILURE(errorCode)){ log_err("ucnv_fromUnicode conversion failed reason %s\n", u_errorName(errorCode)); return; } cSource = cBuf; test =uBuf; - ucnv_toUChars(cnv,uTarget,(uTargetLimit-uTarget),cSource,numCharsInTarget,&errorCode); + ucnv_toUChars(cnv,uTarget,(int32_t)(uTargetLimit-uTarget),cSource,numCharsInTarget,&errorCode); if(U_FAILURE(errorCode)){ log_err("ucnv_toUChars conversion failed, reason %s\n", u_errorName(errorCode)); return; @@ -2910,8 +3009,8 @@ TestHZ() { uBuf = (UChar*)malloc(uBufSize * sizeof(UChar)*5); cBuf =(char*)malloc(uBufSize * sizeof(char) * 5); - uSource = (const UChar*)&in[0]; - uSourceLimit=(const UChar*)&in[sizeof(in)/2]; + uSource = (const UChar*)in; + uSourceLimit=(const UChar*)in + (sizeof(in)/sizeof(in[0])); cTarget = cBuf; cTargetLimit = cBuf +uBufSize*5; uTarget = uBuf; @@ -2930,7 +3029,7 @@ TestHZ() { log_err("ucnv_toUnicode conversion failed reason %s\n", u_errorName(errorCode)); return; } - uSource = (const UChar*)&in[0]; + uSource = (const UChar*)in; while(uSource&@*/ }; - const uint16_t expectedISO2022JIS[] = { + static const uint16_t expectedISO2022JIS[] = { 0x0041, 0x0042, 0xFF81, 0xFF82, 0x3000 }; - int32_t toISO2022JISOffs[]={ + static const int32_t toISO2022JISOffs[]={ 3,4, 8,9, 16 }; - const uint8_t sampleTextJIS7[] = { + static const uint8_t sampleTextJIS7[] = { 0x1b,0x28,0x48,0x41,0x42, /*JIS7-Roman*/ 0x1b,0x28,0x49,0x41,0x42, /*Katakana Set*/ 0x1b,0x24,0x42,0x21,0x21, @@ -4016,7 +4118,7 @@ TestJIS(){ 0x21,0x22, 0x1b,0x26,0x40,0x1b,0x24,0x42,0x21,0x21 /*recognize and ignore &@*/ }; - const uint16_t expectedISO2022JIS7[] = { + static const uint16_t expectedISO2022JIS7[] = { 0x0041, 0x0042, 0xFF81, 0xFF82, 0x3000, @@ -4024,14 +4126,14 @@ TestJIS(){ 0x3001, 0x3000 }; - int32_t toISO2022JIS7Offs[]={ + static const int32_t toISO2022JIS7Offs[]={ 3,4, 8,9, 13,16, 17, 19,27 }; - const uint8_t sampleTextJIS8[] = { + static const uint8_t sampleTextJIS8[] = { 0x1b,0x28,0x48,0x41,0x42, /*JIS8-Roman*/ 0xa1,0xc8,0xd9,/*Katakana Set*/ 0x1b,0x28,0x42, @@ -4039,14 +4141,14 @@ TestJIS(){ 0xb1,0xc3, /*Katakana Set*/ 0x1b,0x24,0x42,0x21,0x21 }; - const uint16_t expectedISO2022JIS8[] = { + static const uint16_t expectedISO2022JIS8[] = { 0x0041, 0x0042, 0xff61, 0xff88, 0xff99, 0x0041, 0x0042, 0xff71, 0xff83, 0x3000 }; - int32_t toISO2022JIS8Offs[]={ + static const int32_t toISO2022JIS8Offs[]={ 3, 4, 5, 6, 7, 11, 12, 13, 14, 18, @@ -4072,7 +4174,7 @@ static void TestJitterbug915(){ \x1b$+L\x1bO!#\x1bO",\x1bO#N\x1bO!n\x1bO#q / *plane 6 * / \x1b$+M\x1bO"q\x1bO!N\x1bO!j\x1bO#:\x1bO#o / *plane 7 * / */ - static char cSource[]={ + static const char cSource[]={ 0x1B, 0x24, 0x29, 0x47, 0x0E, 0x23, 0x21, 0x23, 0x22, 0x23, 0x23, 0x23, 0x24, 0x23, 0x25, 0x23, 0x26, 0x23, 0x27, 0x23, 0x28, 0x23, 0x29, 0x23, 0x2A, 0x23, 0x2B, 0x0F, 0x2F, 0x2A, @@ -4110,7 +4212,7 @@ static void TestJitterbug915(){ char* ctarget=cTarget; char* ctargetLimit=cTarget+sizeof(cTarget); const char* csource=cSource; - char* tempSrc = cSource; + const char* tempSrc = cSource; UErrorCode err=U_ZERO_ERROR; UConverter* conv =ucnv_open("ISO_2022_CN_EXT",&err); @@ -4205,8 +4307,8 @@ TestISO_2022_CN_EXT() { uBuf = (UChar*)malloc(uBufSize * sizeof(UChar)*5); cBuf =(char*)malloc(uBufSize * sizeof(char) * 10); - uSource = (const UChar*)&in[0]; - uSourceLimit=(const UChar*)&in[sizeof(in)/2]; + uSource = (const UChar*)in; + uSourceLimit=(const UChar*)in + (sizeof(in)/sizeof(in[0])); cTarget = cBuf; cTargetLimit = cBuf +uBufSize*5; uTarget = uBuf; @@ -4225,7 +4327,7 @@ TestISO_2022_CN_EXT() { log_err("ucnv_toUnicode conversion failed reason %s\n", u_errorName(errorCode)); return; } - uSource = (const UChar*)&in[0]; + uSource = (const UChar*)in; while(uSource= spaceNeeded) { - TEST_ASSERT_SUCCESS(status); + uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 2, &status); + TEST_ASSERT_SUCCESS(status); + + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + TEST_ASSERT(numFields == 2); TEST_ASSERT_STRING("first ", fields[0], TRUE); - TEST_ASSERT_STRING(" second", fields[1], TRUE); - TEST_ASSERT_STRING(" third", fields[2], TRUE); - } else { - TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); + TEST_ASSERT_STRING(" second: third", fields[1], TRUE); + TEST_ASSERT(!memcmp(&fields[2],&minus1,sizeof(UChar*))); + + spaceNeeded = u_strlen(textToSplit) - + (numFields - 1) + /* Field delimiters do not appear in output */ + numFields; /* Each field gets a NUL terminator */ + + TEST_ASSERT(spaceNeeded == requiredCapacity); + + /* Split with a range of output buffer sizes. */ + spaceNeeded = u_strlen(textToSplit) - + (numFields - 1) + /* Field delimiters do not appear in output */ + numFields; /* Each field gets a NUL terminator */ + + for (sz=0; sz < spaceNeeded+1; sz++) { + memset(fields, -1, sizeof(fields)); + status = U_ZERO_ERROR; + numFields = + uregex_split(re, buf, sz, &requiredCapacity, fields, 10, &status); + if (sz >= spaceNeeded) { + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT_STRING("first ", fields[0], TRUE); + TEST_ASSERT_STRING(" second", fields[1], TRUE); + TEST_ASSERT_STRING(" third", fields[2], TRUE); + } else { + TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); + } + TEST_ASSERT(numFields == 3); + TEST_ASSERT(fields[3] == NULL); + TEST_ASSERT(spaceNeeded == requiredCapacity); + } } - TEST_ASSERT(numFields == 3); - TEST_ASSERT(fields[3] == NULL); - TEST_ASSERT(spaceNeeded == requiredCapacity); } + uregex_close(re); } @@ -826,20 +871,26 @@ static void TestRegexCAPI(void) { uregex_setText(re, textToSplit, -1, &status); TEST_ASSERT_SUCCESS(status); - memset(fields, -1, sizeof(fields)); - numFields = - uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 10, &status); - TEST_ASSERT_SUCCESS(status); - TEST_ASSERT(numFields == 5); - TEST_ASSERT_STRING("first ", fields[0], TRUE); - TEST_ASSERT_STRING("tag-a", fields[1], TRUE); - TEST_ASSERT_STRING(" second", fields[2], TRUE); - TEST_ASSERT_STRING("tag-b", fields[3], TRUE); - TEST_ASSERT_STRING(" third", fields[4], TRUE); - TEST_ASSERT(fields[5] == NULL); - spaceNeeded = strlen("first .tag-a. second.tag-b. third."); /* "." at NUL positions */ - TEST_ASSERT(spaceNeeded == requiredCapacity); + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + memset(fields, -1, sizeof(fields)); + numFields = + uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 10, &status); + TEST_ASSERT_SUCCESS(status); + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + TEST_ASSERT(numFields == 5); + TEST_ASSERT_STRING("first ", fields[0], TRUE); + TEST_ASSERT_STRING("tag-a", fields[1], TRUE); + TEST_ASSERT_STRING(" second", fields[2], TRUE); + TEST_ASSERT_STRING("tag-b", fields[3], TRUE); + TEST_ASSERT_STRING(" third", fields[4], TRUE); + TEST_ASSERT(fields[5] == NULL); + spaceNeeded = strlen("first .tag-a. second.tag-b. third."); /* "." at NUL positions */ + TEST_ASSERT(spaceNeeded == requiredCapacity); + } + } /* Split with too few output strings available (2) */ status = U_ZERO_ERROR; @@ -847,13 +898,17 @@ static void TestRegexCAPI(void) { numFields = uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 2, &status); TEST_ASSERT_SUCCESS(status); - TEST_ASSERT(numFields == 2); - TEST_ASSERT_STRING("first ", fields[0], TRUE); - TEST_ASSERT_STRING(" second third", fields[1], TRUE); - TEST_ASSERT(!memcmp(&fields[2],&minus1,sizeof(UChar*))); - spaceNeeded = strlen("first . second third."); /* "." at NUL positions */ - TEST_ASSERT(spaceNeeded == requiredCapacity); + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + TEST_ASSERT(numFields == 2); + TEST_ASSERT_STRING("first ", fields[0], TRUE); + TEST_ASSERT_STRING(" second third", fields[1], TRUE); + TEST_ASSERT(!memcmp(&fields[2],&minus1,sizeof(UChar*))); + + spaceNeeded = strlen("first . second third."); /* "." at NUL positions */ + TEST_ASSERT(spaceNeeded == requiredCapacity); + } /* Split with too few output strings available (3) */ status = U_ZERO_ERROR; @@ -861,14 +916,18 @@ static void TestRegexCAPI(void) { numFields = uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 3, &status); TEST_ASSERT_SUCCESS(status); - TEST_ASSERT(numFields == 3); - TEST_ASSERT_STRING("first ", fields[0], TRUE); - TEST_ASSERT_STRING("tag-a", fields[1], TRUE); - TEST_ASSERT_STRING(" second third", fields[2], TRUE); - TEST_ASSERT(!memcmp(&fields[3],&minus1,sizeof(UChar*))); - spaceNeeded = strlen("first .tag-a. second third."); /* "." at NUL positions */ - TEST_ASSERT(spaceNeeded == requiredCapacity); + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + TEST_ASSERT(numFields == 3); + TEST_ASSERT_STRING("first ", fields[0], TRUE); + TEST_ASSERT_STRING("tag-a", fields[1], TRUE); + TEST_ASSERT_STRING(" second third", fields[2], TRUE); + TEST_ASSERT(!memcmp(&fields[3],&minus1,sizeof(UChar*))); + + spaceNeeded = strlen("first .tag-a. second third."); /* "." at NUL positions */ + TEST_ASSERT(spaceNeeded == requiredCapacity); + } /* Split with just enough output strings available (5) */ status = U_ZERO_ERROR; @@ -876,41 +935,103 @@ static void TestRegexCAPI(void) { numFields = uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 5, &status); TEST_ASSERT_SUCCESS(status); - TEST_ASSERT(numFields == 5); - TEST_ASSERT_STRING("first ", fields[0], TRUE); - TEST_ASSERT_STRING("tag-a", fields[1], TRUE); - TEST_ASSERT_STRING(" second", fields[2], TRUE); - TEST_ASSERT_STRING("tag-b", fields[3], TRUE); - TEST_ASSERT_STRING(" third", fields[4], TRUE); - TEST_ASSERT(!memcmp(&fields[5],&minus1,sizeof(UChar*))); - spaceNeeded = strlen("first .tag-a. second.tag-b. third."); /* "." at NUL positions */ - TEST_ASSERT(spaceNeeded == requiredCapacity); + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + TEST_ASSERT(numFields == 5); + TEST_ASSERT_STRING("first ", fields[0], TRUE); + TEST_ASSERT_STRING("tag-a", fields[1], TRUE); + TEST_ASSERT_STRING(" second", fields[2], TRUE); + TEST_ASSERT_STRING("tag-b", fields[3], TRUE); + TEST_ASSERT_STRING(" third", fields[4], TRUE); + TEST_ASSERT(!memcmp(&fields[5],&minus1,sizeof(UChar*))); + spaceNeeded = strlen("first .tag-a. second.tag-b. third."); /* "." at NUL positions */ + TEST_ASSERT(spaceNeeded == requiredCapacity); + } /* Split, end of text is a field delimiter. */ status = U_ZERO_ERROR; sz = strlen("first second"); uregex_setText(re, textToSplit, sz, &status); TEST_ASSERT_SUCCESS(status); - memset(fields, -1, sizeof(fields)); - numFields = - uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 9, &status); - TEST_ASSERT_SUCCESS(status); - TEST_ASSERT(numFields == 4); - TEST_ASSERT_STRING("first ", fields[0], TRUE); - TEST_ASSERT_STRING("tag-a", fields[1], TRUE); - TEST_ASSERT_STRING(" second", fields[2], TRUE); - TEST_ASSERT_STRING("tag-b", fields[3], TRUE); - TEST_ASSERT(fields[4] == NULL); - TEST_ASSERT(fields[8] == NULL); - TEST_ASSERT(!memcmp(&fields[9],&minus1,sizeof(UChar*))); - spaceNeeded = strlen("first .tag-a. second.tag-b."); /* "." at NUL positions */ - TEST_ASSERT(spaceNeeded == requiredCapacity); + + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + memset(fields, -1, sizeof(fields)); + numFields = + uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 9, &status); + TEST_ASSERT_SUCCESS(status); + + /* The TEST_ASSERT_SUCCESS call above should change too... */ + if(U_SUCCESS(status)) { + TEST_ASSERT(numFields == 4); + TEST_ASSERT_STRING("first ", fields[0], TRUE); + TEST_ASSERT_STRING("tag-a", fields[1], TRUE); + TEST_ASSERT_STRING(" second", fields[2], TRUE); + TEST_ASSERT_STRING("tag-b", fields[3], TRUE); + TEST_ASSERT(fields[4] == NULL); + TEST_ASSERT(fields[8] == NULL); + TEST_ASSERT(!memcmp(&fields[9],&minus1,sizeof(UChar*))); + spaceNeeded = strlen("first .tag-a. second.tag-b."); /* "." at NUL positions */ + TEST_ASSERT(spaceNeeded == requiredCapacity); + } + } uregex_close(re); } } +static void TestBug4315(void) { + UErrorCode theICUError = U_ZERO_ERROR; + URegularExpression *theRegEx; + UChar *textBuff; + const char *thePattern; + UChar theString[100]; + UChar *destFields[24]; + int32_t neededLength1; + int32_t neededLength2; + + int32_t wordCount = 0; + int32_t destFieldsSize = 24; + + thePattern = "ck "; + u_uastrcpy(theString, "The quick brown fox jumped over the slow black turtle."); + + /* open a regex */ + theRegEx = uregex_openC(thePattern, 0, NULL, &theICUError); + TEST_ASSERT_SUCCESS(theICUError); + + /* set the input string */ + uregex_setText(theRegEx, theString, u_strlen(theString), &theICUError); + TEST_ASSERT_SUCCESS(theICUError); + + /* split */ + /*explicitly pass NULL and 0 to force the overflow error -> this is where the + * error occurs! */ + wordCount = uregex_split(theRegEx, NULL, 0, &neededLength1, destFields, + destFieldsSize, &theICUError); + + TEST_ASSERT(theICUError == U_BUFFER_OVERFLOW_ERROR); + TEST_ASSERT(wordCount==3); + + if(theICUError == U_BUFFER_OVERFLOW_ERROR) + { + theICUError = U_ZERO_ERROR; + textBuff = (UChar *) malloc(sizeof(UChar) * (neededLength1 + 1)); + wordCount = uregex_split(theRegEx, textBuff, neededLength1+1, &neededLength2, + destFields, destFieldsSize, &theICUError); + TEST_ASSERT(wordCount==3); + TEST_ASSERT_SUCCESS(theICUError); + TEST_ASSERT(neededLength1 == neededLength2); + TEST_ASSERT_STRING("The qui", destFields[0], TRUE); + TEST_ASSERT_STRING("brown fox jumped over the slow bla", destFields[1], TRUE); + TEST_ASSERT_STRING("turtle.", destFields[2], TRUE); + TEST_ASSERT(destFields[3] == NULL); + free(textBuff); + } + uregex_close(theRegEx); +} + #endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ diff --git a/icuSources/test/cintltst/sorttest.c b/icuSources/test/cintltst/sorttest.c index 96ab6c9c..c99ce507 100644 --- a/icuSources/test/cintltst/sorttest.c +++ b/icuSources/test/cintltst/sorttest.c @@ -23,16 +23,10 @@ #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) -/* compare only the top 28 bits of int32_t items (bits 3..0 contain the original index) */ -static int32_t U_CALLCONV -_int32Top28Comparator(const void *context, const void *left, const void *right) { - return (*(const int32_t *)left>>4) - (*(const int32_t *)right>>4); -} - static void SortTest(void) { uint16_t small[]={ 8, 1, 2, 5, 4, 3, 7, 6 }; - int32_t medium[]={ 10, 8, 1, 2, 5, 5, 6, 4, 3, 9, 7, 5 }; + int32_t medium[]={ 10, 8, 1, 2, 5, 5, -1, 6, 4, 3, 9, 7, 5 }; uint32_t large[]={ 21, 10, 20, 19, 11, 12, 13, 10, 10, 10, 10, 8, 1, 2, 5, 10, 10, 4, 17, 18, 3, 9, 10, 7, 6, 14, 15, 16 }; @@ -59,7 +53,7 @@ SortTest(void) { } /* sort medium array (stable) */ - uprv_sortArray(medium, LENGTHOF(medium), sizeof(medium[0]), _int32Top28Comparator, NULL, TRUE, &errorCode); + uprv_sortArray(medium, LENGTHOF(medium), sizeof(medium[0]), uprv_int32Comparator, NULL, TRUE, &errorCode); if(U_FAILURE(errorCode)) { log_err("uprv_sortArray(medium) failed - %s\n", u_errorName(errorCode)); return; diff --git a/icuSources/test/cintltst/spreptst.c b/icuSources/test/cintltst/spreptst.c index 9d82c03b..b68bc47c 100644 --- a/icuSources/test/cintltst/spreptst.c +++ b/icuSources/test/cintltst/spreptst.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -37,6 +37,8 @@ static void Test_nfs4_mixed_prep_data(void); static void Test_nfs4_cs_prep(void); static void Test_nfs4_cis_prep(void); static void Test_nfs4_mixed_prep(void); +static void TestBEAMWarning(void); +static void TestCoverage(void); void addUStringPrepTest(TestNode** root) @@ -47,6 +49,8 @@ addUStringPrepTest(TestNode** root) addTest(root, &Test_nfs4_cs_prep, "spreptst/Test_nfs4_cs_prep"); addTest(root, &Test_nfs4_cis_prep, "spreptst/Test_nfs4_cis_prep"); addTest(root, &Test_nfs4_mixed_prep, "spreptst/Test_nfs4_mixed_prep"); + addTest(root, &TestBEAMWarning, "spreptst/TestBEAMWarning"); + addTest(root, &TestCoverage, "spreptst/TestCoverage"); } static void @@ -290,6 +294,12 @@ unescapeData(const char* src, int32_t srcLen, static void Test_nfs4_cis_prep(void){ int32_t i=0; + UErrorCode loadStatus = U_ZERO_ERROR; + loadTestData(&loadStatus); + if (U_FAILURE(loadStatus)) { + log_err("Test could not initialize. Got %s\n", u_errorName(loadStatus)); + return; + } for(i=0;i< (int32_t)(sizeof(conformanceTestCases)/sizeof(conformanceTestCases[0]));i++){ const char* src = conformanceTestCases[i].in; @@ -403,6 +413,13 @@ static const char* mixed_prep_data[] ={ static void Test_nfs4_mixed_prep(void){ + UErrorCode loadStatus = U_ZERO_ERROR; + loadTestData(&loadStatus); + if (U_FAILURE(loadStatus)) { + log_err("Test could not initialize. Got %s\n", u_errorName(loadStatus)); + return; + } + { int32_t i=0; char src[MAX_BUFFER_SIZE]; @@ -550,6 +567,45 @@ Test_nfs4_cs_prep(void){ } } + + +static void TestBEAMWarning(){ + UErrorCode status = U_ZERO_ERROR; + UParseError parseError; + UStringPrepProfile* profile = NULL; + /* get the test data path */ + const char *testdatapath = NULL; + UChar src =0x0000; + testdatapath = loadTestData(&status); + /* open the profile */ + profile = usprep_open(testdatapath, "nfscis", &status); + usprep_prepare(profile,&src , 0, NULL, 0, USPREP_DEFAULT, &parseError, &status); + + usprep_close(profile); +} + +static void TestCoverage(void) { + UErrorCode status = U_USELESS_COLLATOR_ERROR; + UParseError parseError; + + usprep_open(NULL, NULL, &status); + if (status != U_USELESS_COLLATOR_ERROR) { + log_err("usprep_open didn't react correctly to a bad UErrorCode\n"); + } + usprep_prepare(NULL, NULL, 0, NULL, 0, USPREP_DEFAULT, &parseError, &status); + if (status != U_USELESS_COLLATOR_ERROR) { + log_err("usprep_prepare didn't react correctly to a bad UErrorCode\n"); + } + status = U_ZERO_ERROR; + usprep_prepare(NULL, NULL, 0, NULL, 0, USPREP_DEFAULT, &parseError, &status); + if (status != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("usprep_prepare didn't check its arguments\n"); + } + + /* Don't crash */ + usprep_close(NULL); +} + #endif /* diff --git a/icuSources/test/cintltst/stdnmtst.c b/icuSources/test/cintltst/stdnmtst.c index b4e6445f..7bfa257c 100644 --- a/icuSources/test/cintltst/stdnmtst.c +++ b/icuSources/test/cintltst/stdnmtst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2000-2003, International Business Machines Corporation and + * Copyright (c) 2000-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* @@ -100,7 +100,7 @@ static void TestStandardName() /*dotestname("cp1252", "MIME", "windows-1252") &&*/ dotestname("ascii", "MIME", "US-ASCII") && dotestname("csiso2022jp2", "MIME", "ISO-2022-JP-2") && - dotestname("Iso20-22__cN", "MIME", "ISO-2022-CN") && + dotestname("Iso20-22__cN", "IANA", "ISO-2022-CN") && dotestname("ascii", "IANA", "ANSI_X3.4-1968") && dotestname("cp850", "IANA", "IBM850") && dotestname("crazy", "MIME", NULL) && @@ -122,13 +122,18 @@ static int dotestconv(const char *name, const char *standard, const char *expect if (tag && !expected) { log_err("FAIL: Unexpectedly found %s canonical name for %s, got %s\n", standard, name, tag); res = 0; - } else if (!tag && expected) { + } + else if (!tag && expected) { log_err("FAIL: could not find %s canonical name for %s\n", (standard ? "\"\"" : standard), name); res = 0; - } else if (expected && (name == tag || uprv_strcmp(expected, tag)) && error == U_ZERO_ERROR) { + } + else if (expected && (name == tag || uprv_strcmp(expected, tag) != 0)) { log_err("FAIL: expected %s for %s canonical name for %s, got %s\n", expected, standard, name, tag); res = 0; } + else { + log_verbose("PASS: (\"%s\", \"%s\") -> %s == %s \n", name, standard, tag, expected); + } return res; } @@ -147,10 +152,10 @@ static void TestCanonicalName() dotestconv("ibm-5305", "IANA", NULL) && /* mapping does not exist */ dotestconv("cp1208", "", "UTF-8") && /* default name due to ordering */ dotestconv("UTF16_BigEndian", "", "UTF-16BE") && /* non-default name due to ordering */ - dotestconv("ISO-2022-CN", "MIME", "ISO_2022,locale=zh,version=0") &&/* default name */ - dotestconv("Shift_JIS", "MIME", "ibm-943_P14A-1999") &&/* ambiguous alias */ + dotestconv("ISO-2022-CN", "IANA", "ISO_2022,locale=zh,version=0") &&/* default name */ + dotestconv("Shift_JIS", "MIME", "ibm-943_P15A-2003") &&/* ambiguous alias */ dotestconv("Shift_JIS", "", "ibm-943_P130-1999") &&/* ambiguous alias */ - dotestconv("ibm-943", "", "ibm-943_P14A-1999") &&/* ambiguous alias */ + dotestconv("ibm-943", "", "ibm-943_P15A-2003") &&/* ambiguous alias */ dotestconv("ibm-943", "IBM", "ibm-943_P130-1999") &&/* ambiguous alias */ dotestconv("ibm-1363", "", "ibm-1363_P11B-1998") &&/* ambiguous alias */ dotestconv("ibm-1363", "IBM", "ibm-1363_P110-1997") &&/* ambiguous alias */ @@ -165,8 +170,9 @@ static void TestCanonicalName() static UBool doTestNames(const char *name, const char *standard, const char **expected, int32_t size) { UErrorCode err = U_ZERO_ERROR; UEnumeration *myEnum = ucnv_openStandardNames(name, standard, &err); + const char *enumName, *testName; int32_t enumCount = uenum_count(myEnum, &err); - int32_t idx, repeatTimes = 3; + int32_t idx, len, repeatTimes = 3; if (size != enumCount) { log_err("FAIL: different size arrays. Got %d. Expected %d\n", enumCount, size); return 0; @@ -178,9 +184,8 @@ static UBool doTestNames(const char *name, const char *standard, const char **ex log_verbose("\n%s %s\n", name, standard); while (repeatTimes-- > 0) { for (idx = 0; idx < enumCount; idx++) { - int32_t len; - const char *enumName = uenum_next(myEnum, &len, &err); - const char *testName = expected[idx]; + enumName = uenum_next(myEnum, &len, &err); + testName = expected[idx]; if (uprv_strcmp(enumName, testName) != 0 || U_FAILURE(err) || len != (int32_t)uprv_strlen(expected[idx])) { @@ -190,6 +195,13 @@ static UBool doTestNames(const char *name, const char *standard, const char **ex log_verbose("%s\n", enumName); err = U_ZERO_ERROR; } + if (enumCount >= 0) { + /* one past the list of all names must return NULL */ + enumName = uenum_next(myEnum, &len, &err); + if (enumName != NULL || len != 0 || U_FAILURE(err)) { + log_err("FAIL: uenum_next(past the list) did not return NULL[0] with U_SUCCESS(). name=%s standard=%s len=%d err=%s\n", name, standard, len, u_errorName(err)); + } + } log_verbose("\n reset\n"); uenum_reset(myEnum, &err); if (U_FAILURE(err)) { diff --git a/icuSources/test/cintltst/tracetst.c b/icuSources/test/cintltst/tracetst.c index 4fc36be4..54268ac8 100644 --- a/icuSources/test/cintltst/tracetst.c +++ b/icuSources/test/cintltst/tracetst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2003-2004, International Business Machines Corporation and + * Copyright (c) 2003-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* @@ -290,8 +290,11 @@ static void TestTraceAPI() { test_format("a 64 bit ptr %p", 50, 0, "a 64 bit ptr 1000200030004000", __LINE__, ptr); } else if (sizeof(void *) == 16) { /* iSeries */ - int32_t massiveBigEndianPtr[] = { 0x10002000, 0x30004000, 0x50006000, 0x70008000 }; - ptr = *((void **)massiveBigEndianPtr); + union { + int32_t arr[4]; + void *ptr; + } massiveBigEndianPtr = {{ 0x10002000, 0x30004000, 0x50006000, 0x70008000 }}; + ptr = massiveBigEndianPtr.ptr; test_format("a 128 bit ptr %p", 50, 0, "a 128 bit ptr 10002000300040005000600070008000", __LINE__, ptr); } else { TEST_ASSERT(FALSE); diff --git a/icuSources/test/cintltst/trietest.c b/icuSources/test/cintltst/trietest.c index 61c9e62b..37a98c85 100644 --- a/icuSources/test/cintltst/trietest.c +++ b/icuSources/test/cintltst/trietest.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 2001-2003, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -449,6 +449,7 @@ testTrieRanges(const char *testName, const CheckRange checkRanges[], int32_t countCheckRanges, UBool dataIs32, UBool latin1Linear) { UTrieGetFoldingOffset *getFoldingOffset; + UNewTrieGetFoldedValue *getFoldedValue; const CheckRange *enumRanges; UNewTrie *newTrie; UTrie trie={ 0 }; @@ -498,13 +499,24 @@ testTrieRanges(const char *testName, if(dataIs32) { getFoldingOffset=_testFoldingOffset32; + getFoldedValue=_testFoldedValue32; } else { getFoldingOffset=_testFoldingOffset16; + getFoldedValue=_testFoldedValue16; + } + + /* + * code coverage for utrie.c/defaultGetFoldedValue(), + * pick some combination of parameters for selecting the UTrie defaults + */ + if(!dataIs32 && latin1Linear) { + getFoldingOffset=NULL; + getFoldedValue=NULL; } errorCode=U_ZERO_ERROR; length=utrie_serialize(newTrie, storageHolder.storage, sizeof(storageHolder.storage), - dataIs32 ? _testFoldedValue32 : _testFoldedValue16, + getFoldedValue, (UBool)!dataIs32, &errorCode); if(U_FAILURE(errorCode)) { @@ -541,7 +553,9 @@ testTrieRanges(const char *testName, log_err("error: utrie_unserialize() failed, %s\n", u_errorName(errorCode)); return; } - trie.getFoldingOffset=getFoldingOffset; + if(getFoldingOffset!=NULL) { + trie.getFoldingOffset=getFoldingOffset; + } if(dataIs32!=(trie.data32!=NULL)) { log_err("error: trie serialization (%s) did not preserve 32-bitness\n", testName); @@ -781,18 +795,77 @@ TrieTest(void) { checkRanges3, ARRAY_LENGTH(checkRanges3)); } -#if 1 +/* test utrie_unserializeDummy() -------------------------------------------- */ + +static int32_t U_CALLCONV +dummyGetFoldingOffset(uint32_t data) { + return -1; /* never get non-initialValue data for supplementary code points */ +} + +static void +dummyTest(UBool make16BitTrie) { + static int32_t mem[UTRIE_DUMMY_SIZE/4]; + + UTrie trie; + UErrorCode errorCode; + UChar32 c; + + uint32_t value, initialValue, leadUnitValue; + + if(make16BitTrie) { + initialValue=0x313; + leadUnitValue=0xaffe; + } else { + initialValue=0x01234567; + leadUnitValue=0x89abcdef; + } + + errorCode=U_ZERO_ERROR; + utrie_unserializeDummy(&trie, mem, sizeof(mem), initialValue, leadUnitValue, make16BitTrie, &errorCode); + if(U_FAILURE(errorCode)) { + log_err("utrie_unserializeDummy(make16BitTrie=%d) failed - %s\n", make16BitTrie, u_errorName(errorCode)); + return; + } + trie.getFoldingOffset=dummyGetFoldingOffset; + + /* test that all code points have initialValue */ + for(c=0; c<=0x10ffff; ++c) { + if(make16BitTrie) { + UTRIE_GET16(&trie, c, value); + } else { + UTRIE_GET32(&trie, c, value); + } + if(value!=initialValue) { + log_err("UTRIE_GET%s(dummy, U+%04lx)=0x%lx instead of 0x%lx\n", + make16BitTrie ? "16" : "32", (long)c, (long)value, (long)initialValue); + } + } + + /* test that the lead surrogate code units have leadUnitValue */ + for(c=0xd800; c<=0xdbff; ++c) { + if(make16BitTrie) { + value=UTRIE_GET16_FROM_LEAD(&trie, c); + } else { + value=UTRIE_GET32_FROM_LEAD(&trie, c); + } + if(value!=leadUnitValue) { + log_err("UTRIE_GET%s_FROM_LEAD(dummy, U+%04lx)=0x%lx instead of 0x%lx\n", + make16BitTrie ? "16" : "32", (long)c, (long)value, (long)leadUnitValue); + } + } +} + +static void +DummyTrieTest(void) { + dummyTest(TRUE); + dummyTest(FALSE); +} + void addTrieTest(TestNode** root); void addTrieTest(TestNode** root) { addTest(root, &TrieTest, "tsutil/trietest/TrieTest"); + addTest(root, &DummyTrieTest, "tsutil/trietest/DummyTrieTest"); } -#else -/* standalone utrie development */ -int main(int argc, const char *argv[]) { - TrieTest(); - return 0; -} -#endif diff --git a/icuSources/test/cintltst/ucmptst.c b/icuSources/test/cintltst/ucmptst.c deleted file mode 100644 index 98c1998d..00000000 --- a/icuSources/test/cintltst/ucmptst.c +++ /dev/null @@ -1,201 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1998-2004, International Business Machines Corporation - * and others. All Rights Reserved. - ********************************************************************/ -/* -* File test.c -* -* Modification History: -* -* Date Name Description -* 07/28/2000 Madhu Creation -******************************************************************************* -*/ - -#include "unicode/utypes.h" -#include "ucmp8.h" -#include "cmemory.h" -#include "cintltst.h" -#include "ucol_imp.h" - - -static void TestUCMP8API(void); - -void addCompactArrayTest(TestNode** root); - - -void -addCompactArrayTest(TestNode** root) -{ - addTest(root, &TestUCMP8API, "ucmptst/TestUCMP8API"); -} - -static void query(CompactByteArray *array) { - int32_t i = 0; - const uint8_t *valuesSet=(uint8_t *)ucmp8_getArray(array); - for(i =0 ; i< 10; i++ ){ - if(valuesSet[0] != (uint8_t)0xFD ){ - log_err("ERROR: did not get the values expected values\n"); - break; - } - } -} - -static void TestUCMP8API(){ - UErrorCode status = U_ZERO_ERROR; - CompactByteArray* ucmp8Array=NULL; - CompactByteArray* pAliaser=NULL; - CompactByteArray* pAdopter=NULL; - - CompactByteArray aliaser; - CompactByteArray adopter; - - - CompactByteArray ucmp8Array1; - CompactByteArray ucmp8Array2; - CompactByteArray ucmp8Clone; - int8_t *values; - uint8_t *valuesSet; - static const int8_t TEST_DEFAULT_VALUE = (int8_t)0xFF; - - - /*ucmp8_open*/ - log_verbose("Testing ucmp8_open()\n"); - ucmp8Array=ucmp8_open(TEST_DEFAULT_VALUE); - if(ucmp8Array == NULL){ - log_err("ERROR: ucmp8_open() failed\n"); - } - if( (int32_t)ucmp8_getCount(ucmp8Array) != (int32_t)ucmp8_getkUnicodeCount()) { - log_err("ERROR: ucmp8_open failed\n"); - } - - /*ucmp8_init*/ - log_verbose("Testing ucmp8_init()\n"); - ucmp8_init(&ucmp8Array1, TEST_DEFAULT_VALUE); - if( (int32_t)ucmp8_getCount(&ucmp8Array1) != (int32_t)ucmp8_getkUnicodeCount() || - ucmp8_getIndex(&ucmp8Array1) == NULL || - ucmp8_getArray(&ucmp8Array1) == NULL || - ucmp8Array1.fBogus != FALSE){ - log_err("Error: ucmp8_init() failed\n"); - } - /*ucmp8_initBogus*/ - log_verbose("Testing ucmp8_initBogus()\n"); - ucmp8_initBogus(&ucmp8Array2); - if((int32_t)ucmp8_getCount(&ucmp8Array2) != ucmp8Array2.fCount || - ucmp8_getIndex(&ucmp8Array2) != NULL || - ucmp8_getArray(&ucmp8Array2) != NULL || - ucmp8Array2.fBogus != TRUE){ - log_err("Error: ucmp8_initBogus() failed\n"); - } - /*ucmp8_getkBlockCount*/ - if(ucmp8_getkBlockCount() != 128 ){ - log_err("Error in ucmp8_getkBlockCount()\n"); - } - values=(int8_t*)ucmp8_getArray(&ucmp8Array1); - if((uint8_t)values[0] != (uint8_t)TEST_DEFAULT_VALUE){ - log_err("Error: getArray() or init failed\n"); - } - - /*ucmp8_compact*/ - if(ucmp8Array1.fCompact == TRUE){ - log_err("Error: ucmp8_open failed Got compact for expanded data\n"); - } - ucmp8_compact(&ucmp8Array1, 1); - if(ucmp8Array1.fCompact != TRUE){ - log_err("Error: ucmp8_compact failed\n"); - } - /*ucmp8_set*/ - ucmp8_set(&ucmp8Array1, 0, (uint8_t)0xFE); - valuesSet=(uint8_t*)ucmp8_getArray(&ucmp8Array1); - if(valuesSet[0] != (uint8_t)0xFE ){ - log_err("ERROR: ucmp8_set() failed\n"); - } - if(ucmp8Array1.fCompact == TRUE){ - log_err("Error: ucmp8_set didn't expand the compact data \n"); - } - - /*ucmp8_set*/ - ucmp8_compact(&ucmp8Array1, 1); - ucmp8_set(&ucmp8Array1, 0, (uint8_t)0xFD); - valuesSet=(uint8_t*)ucmp8_getArray(&ucmp8Array1); - if(valuesSet[0] != (uint8_t)0xFD ){ - log_err("ERROR: ucmp8_set() failed\n"); - } - if(ucmp8Array1.fCompact == TRUE){ - log_err("Error: ucmp8_set didn't expand the compact data \n"); - } - /*ucmp8_setRange*/ - ucmp8_compact(&ucmp8Array1, 1); - ucmp8_setRange(&ucmp8Array1, 0, 10, (uint8_t)0xFD); - query(&ucmp8Array1); - - log_verbose("Testing ucmp8_flattenMem()\n"); - { - int32_t len = 0; - int32_t size = ucmp8_flattenMem(&ucmp8Array1, NULL); - uint8_t *buff = malloc(size); - uint8_t *buffLocation = buff; - len = ucmp8_flattenMem(&ucmp8Array1, buff); - - if(size != len || size == 0 || len == 0 || buff == NULL) { - log_err("Unable to flatten!\n"); - } else { - log_verbose("Testing ucmp8_initFromData()\n"); - ucmp8_initFromData(&ucmp8Clone, (const uint8_t **)&buffLocation, &status); - if(U_FAILURE(status) || ucmp8_isBogus(&ucmp8Clone) == TRUE || (buffLocation-buff) != len){ - log_err("ERROR: ucmp8_initFromData() failed\n"); - status = U_ZERO_ERROR; - } else { - query(&ucmp8Clone); - ucmp8_close(&ucmp8Clone); - } - } - free(buff); - } - -/* -openAdopt, initAdopt, openAlias, initAlias -*/ - log_verbose("Testing aliasers and adopters\n"); - { - int32_t count = ucmp8_getCount(&ucmp8Array1); - const uint16_t *tIndex = ucmp8_getIndex(&ucmp8Array1); - const int8_t *tValues = ucmp8_getArray(&ucmp8Array1); - uint16_t *index = (uint16_t *)uprv_malloc(UCMP8_kIndexCount*sizeof(uint16_t)); - - values = (int8_t *)uprv_malloc(count); - - memcpy(index, tIndex, UCMP8_kIndexCount*sizeof(uint16_t)); - memcpy(values, tValues, count); - - ucmp8_initAlias(&aliaser, index, values, count); - query(&aliaser); - ucmp8_close(&aliaser); - - pAliaser = ucmp8_openAlias(index, values, count); - query(pAliaser); - ucmp8_close(pAliaser); - - ucmp8_initAdopt(&adopter, index, values, count); /* TODO: BAD API. Adopted memory MUST be allocated with uprv_malloc */ - query(&adopter); - ucmp8_close(&adopter); - - index = (uint16_t *)uprv_malloc(UCMP8_kIndexCount*sizeof(uint16_t)); - values = (int8_t *)uprv_malloc(count); - - memcpy(index, tIndex, UCMP8_kIndexCount*sizeof(uint16_t)); - memcpy(values, tValues, count); - - pAdopter = ucmp8_openAdopt(index, values, count); /* TODO: BAD API */ - query(pAdopter); - ucmp8_close(pAdopter); - - } - ucmp8_close(&ucmp8Array1); - ucmp8_close(&ucmp8Array2); - ucmp8_close(ucmp8Array); - -} - - diff --git a/icuSources/test/cintltst/ucsdetst.c b/icuSources/test/cintltst/ucsdetst.c new file mode 100644 index 00000000..3c884e47 --- /dev/null +++ b/icuSources/test/cintltst/ucsdetst.c @@ -0,0 +1,356 @@ +/* + **************************************************************************** + * Copyright (c) 2005-2006, International Business Machines Corporation and * + * others. All Rights Reserved. * + **************************************************************************** + */ + +#include "unicode/utypes.h" + +#include "unicode/ucsdet.h" +#include "unicode/ucnv.h" +#include "unicode/ustring.h" + +#include "cintltst.h" + +#include +#include + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define NEW_ARRAY(type,count) (type *) ctst_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) + +static void TestConstruction(void); +static void TestUTF8(void); +static void TestUTF16(void); +static void TestC1Bytes(void); +static void TestInputFilter(void); +static void TestChaining(void); + +void addUCsdetTest(TestNode** root); + +void addUCsdetTest(TestNode** root) +{ + addTest(root, &TestConstruction, "ucsdetst/TestConstruction"); + addTest(root, &TestUTF8, "ucsdetst/TestUTF8"); + addTest(root, &TestUTF16, "ucsdetst/TestUTF16"); + addTest(root, &TestC1Bytes, "ucsdetst/TestC1Bytes"); + addTest(root, &TestInputFilter, "ucsdetst/TestInputFilter"); + addTest(root, &TestChaining, "ucsdetst/TestErrorChaining"); +} + +static int32_t preflight(const UChar *src, int32_t length, UConverter *cnv) +{ + UErrorCode status; + char buffer[1024]; + char *dest, *destLimit = buffer + sizeof(buffer); + const UChar *srcLimit = src + length; + int32_t result = 0; + + do { + dest = buffer; + status = U_ZERO_ERROR; + ucnv_fromUnicode(cnv, &dest, destLimit, &src, srcLimit, 0, TRUE, &status); + result += (int32_t) (dest - buffer); + } while (status == U_BUFFER_OVERFLOW_ERROR); + + return result; +} + +static UChar *unescape(const char *src, int32_t *length) +{ + int32_t charCount = u_unescape(src, NULL, 0); + UChar *chars = NEW_ARRAY(UChar, charCount + 1); + + u_unescape(src, chars, charCount); + + *length = charCount; + return chars; +} + +static char *extractBytes(const UChar *src, int32_t length, const char *codepage, int32_t *byteLength) +{ + UErrorCode status = U_ZERO_ERROR; + UConverter *cnv = ucnv_open(codepage, &status); + int32_t byteCount = preflight(src, length, cnv); + const UChar *srcLimit = src + length; + char *bytes = NEW_ARRAY(char, byteCount + 1); + char *dest = bytes, *destLimit = bytes + byteCount + 1; + + ucnv_fromUnicode(cnv, &dest, destLimit, &src, srcLimit, 0, TRUE, &status); + ucnv_close(cnv); + + *byteLength = byteCount; + return bytes; +} + +static void freeBytes(char *bytes) +{ + DELETE_ARRAY(bytes); +} + +static void TestConstruction(void) +{ + UErrorCode status = U_ZERO_ERROR; + UCharsetDetector *csd = ucsdet_open(&status); + UEnumeration *e = ucsdet_getAllDetectableCharsets(csd, &status); + const char *name; + int32_t count = uenum_count(e, &status); + int32_t i, length; + + for(i = 0; i < count; i += 1) { + name = uenum_next(e, &length, &status); + + if(name == NULL || length <= 0) { + log_err("ucsdet_getAllDetectableCharsets() returned a null or empty name!\n"); + } + } + /* one past the list of all names must return NULL */ + name = uenum_next(e, &length, &status); + if(name != NULL || length != 0 || U_FAILURE(status)) { + log_err("ucsdet_getAllDetectableCharsets(past the list) returned a non-null name!\n"); + } + + uenum_close(e); + ucsdet_close(csd); +} + +static void TestUTF8(void) +{ + UErrorCode status = U_ZERO_ERROR; + const char *ss = "This is a string with some non-ascii characters that will " + "be converted to UTF-8, then shoved through the detection process. " + "\\u0391\\u0392\\u0393\\u0394\\u0395" + "Sure would be nice if our source could contain Unicode directly!"; + int32_t byteLength = 0, sLength = 0, dLength = 0; + UChar *s = unescape(ss, &sLength); + char *bytes = extractBytes(s, sLength, "UTF-8", &byteLength); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + UChar *detected = NEW_ARRAY(UChar, sLength); + + ucsdet_setText(csd, bytes, byteLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("Detection failure for UTF-8: got no matches.\n"); + goto bail; + } + + dLength = ucsdet_getUChars(match, detected, sLength, &status); + + if (u_strCompare(detected, dLength, s, sLength, FALSE) != 0) { + log_err("Round-trip test failed!\n"); + } + + ucsdet_setDeclaredEncoding(csd, "UTF-8", 5, &status); /* for coverage */ + +bail: + DELETE_ARRAY(detected); + freeBytes(bytes); + ucsdet_close(csd); +} + +static void TestUTF16(void) +{ + UErrorCode status = U_ZERO_ERROR; + /* Notice the BOM on the start of this string */ + UChar chars[] = { + 0xFEFF, 0x0623, 0x0648, 0x0631, 0x0648, 0x0628, 0x0627, 0x002C, + 0x0020, 0x0628, 0x0631, 0x0645, 0x062c, 0x064a, 0x0627, 0x062a, + 0x0020, 0x0627, 0x0644, 0x062d, 0x0627, 0x0633, 0x0648, 0x0628, + 0x0020, 0x002b, 0x0020, 0x0627, 0x0646, 0x062a, 0x0631, 0x0646, + 0x064a, 0x062a, 0x0000}; + int32_t beLength = 0, leLength = 0, cLength = ARRAY_SIZE(chars); + char *beBytes = extractBytes(chars, cLength, "UTF-16BE", &beLength); + char *leBytes = extractBytes(chars, cLength, "UTF-16LE", &leLength); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + const char *name; + int32_t conf; + + ucsdet_setText(csd, beBytes, beLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("Encoding detection failure for UTF-16BE: got no matches.\n"); + goto try_le; + } + + name = ucsdet_getName(match, &status); + conf = ucsdet_getConfidence(match, &status); + + if (strcmp(name, "UTF-16BE") != 0) { + log_err("Encoding detection failure for UTF-16BE: got %s\n", name); + } + + if (conf != 100) { + log_err("Did not get 100%% confidence for UTF-16BE: got %d\n", conf); + } + +try_le: + ucsdet_setText(csd, leBytes, leLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("Encoding detection failure for UTF-16LE: got no matches.\n"); + goto bail; + } + + name = ucsdet_getName(match, &status); + conf = ucsdet_getConfidence(match, &status); + + + if (strcmp(name, "UTF-16LE") != 0) { + log_err("Enconding detection failure for UTF-16LE: got %s\n", name); + } + + if (conf != 100) { + log_err("Did not get 100%% confidence for UTF-16LE: got %d\n", conf); + } + +bail: + freeBytes(leBytes); + freeBytes(beBytes); + ucsdet_close(csd); +} + +static void TestC1Bytes(void) +{ +#if !UCONFIG_NO_LEGACY_CONVERSION + UErrorCode status = U_ZERO_ERROR; + const char *ssISO = "This is a small sample of some English text. Just enough to be sure that it detects correctly."; + const char *ssWindows = "This is another small sample of some English text. Just enough to be sure that it detects correctly. It also includes some \\u201CC1\\u201D bytes."; + int32_t sISOLength = 0, sWindowsLength = 0; + UChar *sISO = unescape(ssISO, &sISOLength); + UChar *sWindows = unescape(ssWindows, &sWindowsLength); + int32_t lISO = 0, lWindows = 0; + char *bISO = extractBytes(sISO, sISOLength, "ISO-8859-1", &lISO); + char *bWindows = extractBytes(sWindows, sWindowsLength, "windows-1252", &lWindows); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + const char *name; + + ucsdet_setText(csd, bWindows, lWindows, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("English test with C1 bytes got no matches.\n"); + goto bail; + } + + name = ucsdet_getName(match, &status); + + if (strcmp(name, "windows-1252") != 0) { + log_err("English text with C1 bytes does not detect as windows-1252, but as %s\n", name); + } + + ucsdet_setText(csd, bISO, lISO, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("English text without C1 bytes got no matches.\n"); + goto bail; + } + + name = ucsdet_getName(match, &status); + + if (strcmp(name, "ISO-8859-1") != 0) { + log_err("English text without C1 bytes does not detect as ISO-8859-1, but as %s\n", name); + } + +bail: + freeBytes(bWindows); + freeBytes(bISO); + + ucsdet_close(csd); +#endif +} + +static void TestInputFilter(void) +{ + UErrorCode status = U_ZERO_ERROR; + const char *ss = " Un tr\\u00E8s petit peu de Fran\\u00E7ais. "; + int32_t sLength = 0; + UChar *s = unescape(ss, &sLength); + int32_t byteLength = 0; + char *bytes = extractBytes(s, sLength, "ISO-8859-1", &byteLength); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + const char *lang, *name; + + ucsdet_enableInputFilter(csd, TRUE); + + if (!ucsdet_isInputFilterEnabled(csd)) { + log_err("ucsdet_enableInputFilter(csd, TRUE) did not enable input filter!\n"); + } + + + ucsdet_setText(csd, bytes, byteLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("Turning on the input filter resulted in no matches.\n"); + goto turn_off; + } + + name = ucsdet_getName(match, &status); + + if (name == NULL || strcmp(name, "ISO-8859-1") != 0) { + log_err("Turning on the input filter resulted in %s rather than ISO-8859-1\n", name); + } else { + lang = ucsdet_getLanguage(match, &status); + + if (lang == NULL || strcmp(lang, "fr") != 0) { + log_err("Input filter did not strip markup!\n"); + } + } + +turn_off: + ucsdet_enableInputFilter(csd, FALSE); + ucsdet_setText(csd, bytes, byteLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + log_err("Turning off the input filter resulted in no matches.\n"); + goto bail; + } + + name = ucsdet_getName(match, &status); + + if (name == NULL || strcmp(name, "ISO-8859-1") != 0) { + log_err("Turning off the input filter resulted in %s rather than ISO-8859-1\n", name); + } else { + lang = ucsdet_getLanguage(match, &status); + + if (lang == NULL || strcmp(lang, "en") != 0) { + log_err("Unfiltered input did not detect as English!\n"); + } + } + +bail: + freeBytes(bytes); + ucsdet_close(csd); +} + +static void TestChaining(void) { + UErrorCode status = U_USELESS_COLLATOR_ERROR; + + ucsdet_open(&status); + ucsdet_setText(NULL, NULL, 0, &status); + ucsdet_getName(NULL, &status); + ucsdet_getConfidence(NULL, &status); + ucsdet_getLanguage(NULL, &status); + ucsdet_detect(NULL, &status); + ucsdet_setDeclaredEncoding(NULL, NULL, 0, &status); + ucsdet_detectAll(NULL, NULL, &status); + ucsdet_getUChars(NULL, NULL, 0, &status); + ucsdet_getUChars(NULL, NULL, 0, &status); + ucsdet_close(NULL); + + /* All of this code should have done nothing. */ + if (status != U_USELESS_COLLATOR_ERROR) { + log_err("Status got changed to %s\n", u_errorName(status)); + } +} diff --git a/icuSources/test/cintltst/udatatst.c b/icuSources/test/cintltst/udatatst.c index 674348ca..b68ec82a 100644 --- a/icuSources/test/cintltst/udatatst.c +++ b/icuSources/test/cintltst/udatatst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1998-2004, International Business Machines Corporation and + * Copyright (c) 1998-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* @@ -20,11 +20,13 @@ #include "unicode/ucnv.h" #include "unicode/ures.h" #include "unicode/ustring.h" +#include "unicode/uclean.h" #include "cmemory.h" #include "cstring.h" #include "filestrm.h" #include "udatamem.h" #include "cintltst.h" +#include "ubrkimpl.h" #include #include @@ -32,7 +34,7 @@ #include #include -#ifdef WIN32 +#ifdef U_WINDOWS #include #else #include @@ -67,6 +69,10 @@ static void TestErrorConditions(void); static void TestAppData(void); static void TestICUDataName(void); static void TestSwapData(void); +static void PointerTableOfContents(void); +static void SetBadCommonData(void); +static void TestUDataFileAccess(void); + void addUDataTest(TestNode** root); @@ -83,6 +89,9 @@ addUDataTest(TestNode** root) addTest(root, &TestAppData, "udatatst/TestAppData" ); addTest(root, &TestICUDataName, "udatatst/TestICUDataName" ); addTest(root, &TestSwapData, "udatatst/TestSwapData" ); + addTest(root, &PointerTableOfContents, "udatatst/PointerTableOfContents" ); + addTest(root, &SetBadCommonData, "udatatst/SetBadCommonData" ); + addTest(root, &TestUDataFileAccess, "udatatst/TestUDataFileAccess" ); } #if 0 @@ -103,7 +112,7 @@ static void TestUDataOpen(){ UErrorCode status=U_ZERO_ERROR; const char* memMap[][2]={ {"root", "res"}, - {"unorm", "icu"}, + {"pnames", "icu"}, {"cnvalias", "icu"}, {"unames", "icu"}, {"ibm-37_P100-1995", "cnv"} @@ -350,7 +359,7 @@ static void TestUDataSetAppData(){ log_verbose("Testing udata_setAppData() with %s\n", filePath); -#if defined(WIN32) || defined(U_CYGWIN) +#if defined(U_WINDOWS) || defined(U_CYGWIN) fileHandle = open( filePath, O_RDONLY | O_BINARY ); #else fileHandle = open( filePath, O_RDONLY); @@ -383,6 +392,21 @@ static void TestUDataSetAppData(){ goto cleanupAndReturn; } + /* + * First we try some monkey business and try to do bad things. + */ + + status=U_ZERO_ERROR; + udata_setAppData("appData1", NULL, &status); + if (status != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("FAIL: TestUDataSetAppData(): udata_setAppData(\"appData1\", NULL, status) should have failed." + " It returned status of %s\n", u_errorName(status)); + goto cleanupAndReturn; + } + /* The following call should fail. + If the following works with a bad UErrorCode, then later calls to appData1 should fail. */ + udata_setAppData("appData1", fileBuf, &status); + /* * Got testdata.dat into memory, now we try setAppData using the memory image. */ @@ -428,6 +452,62 @@ cleanupAndReturn: return; } +static char *safeGetICUDataDirectory() { + const char *dataDir = u_getDataDirectory(); /* Returned string vanashes with u_cleanup */ + char *retStr = NULL; + if (dataDir != NULL) { + retStr = (char *)malloc(strlen(dataDir)+1); + strcpy(retStr, dataDir); + } + return retStr; +} + +static void TestUDataFileAccess(){ + UErrorCode status; + char *icuDataDir; + icuDataDir = safeGetICUDataDirectory(); /* save icu data dir, so we can put it back + * after doing u_cleanup(). */ + + /** UDATA_NO_FILES, ICU does not access the file system for data loading. */ + status=U_ZERO_ERROR; + u_cleanup(); + udata_setFileAccess(UDATA_NO_FILES,&status); + u_init(&status); + if(U_FAILURE(status) && *icuDataDir == 0){ + log_data_err("udata_setFileAccess(UDATA_NO_FILES) failed with ICU_DATA=\"\" err=%s\n", u_errorName(status)); + } + + /** UDATA_ONLY_PACKAGES, ICU only loads data from packages, not from single files. */ + status=U_ZERO_ERROR; + u_cleanup(); + udata_setFileAccess(UDATA_ONLY_PACKAGES,&status); + u_init(&status); + + /** UDATA_PACKAGES_FIRST, ICU loads data from packages first, and only from single files + if the data cannot be found in a package. */ + status=U_ZERO_ERROR; + u_cleanup(); + udata_setFileAccess(UDATA_PACKAGES_FIRST,&status); + u_init(&status); + + /** UDATA_FILES_FIRST, ICU looks for data in single files first, then in packages. (default) */ + status=U_ZERO_ERROR; + u_cleanup(); + udata_setFileAccess(UDATA_FILES_FIRST,&status); + u_init(&status); + + /** An alias for the default access mode. */ + status=U_ZERO_ERROR; + u_cleanup(); + udata_setFileAccess(UDATA_DEFAULT_ACCESS,&status); + u_setDataDirectory(icuDataDir); + u_init(&status); + if(U_FAILURE(status)){ + log_err("%s\n", u_errorName(status)); + } + free(icuDataDir); +} + static UBool U_CALLCONV isAcceptable1(void *context, @@ -521,10 +601,12 @@ static void TestUDataOpenChoiceDemo1() { const char* name[]={ "cnvalias", "unames", - "test" + "test", + "nam" }; const char* type="icu"; const char* testPath="testdata"; + const char* fullTestDataPath = loadTestData(&status); result=udata_openChoice(NULL, "icu", name[0], isAcceptable1, NULL, &status); if(U_FAILURE(status)){ @@ -534,6 +616,7 @@ static void TestUDataOpenChoiceDemo1() { udata_close(result); } + status=U_ZERO_ERROR; result=udata_openChoice(NULL, type, name[1], isAcceptable1, NULL, &status); if(U_FAILURE(status)){ status=U_ZERO_ERROR; @@ -542,11 +625,15 @@ static void TestUDataOpenChoiceDemo1() { log_err("FAIL: udata_openChoice() failed name=%s, type=%s, \n errorcode=%s\n", name[1], type, myErrorName(status)); } } + else { + log_err("FAIL: udata_openChoice() unexpectedly passed. name=%s, type=%s, \n errorcode=%s\n", name[1], type, myErrorName(status)); + } if(U_SUCCESS(status)){ udata_close(result); } + status=U_ZERO_ERROR; result=udata_openChoice(testPath, type, name[2], isAcceptable1, NULL, &status); if(U_FAILURE(status)){ status=U_ZERO_ERROR; @@ -555,10 +642,26 @@ static void TestUDataOpenChoiceDemo1() { log_err("FAIL: udata_openChoice() failed path=%s name=%s, type=%s, \n errorcode=%s\n", testPath, name[2], type, myErrorName(status)); } } + else { + log_err("FAIL: udata_openChoice() unexpectedly passed. name=%s, type=%s, \n errorcode=%s\n", name[2], type, myErrorName(status)); + } if(U_SUCCESS(status)){ udata_close(result); } + + status=U_ZERO_ERROR; + type="typ"; + result=udata_openChoice(fullTestDataPath, type, name[3], isAcceptable1, NULL, &status); + if(status != U_INVALID_FORMAT_ERROR){ + log_err("FAIL: udata_openChoice() did not fail as expected. name=%s, type=%s, \n errorcode=%s\n", name[3], type, myErrorName(status)); + } + + status=U_USELESS_COLLATOR_ERROR; + result=udata_openChoice(fullTestDataPath, type, name[3], isAcceptable1, NULL, &status); + if(status != U_USELESS_COLLATOR_ERROR){ + log_err("FAIL: udata_openChoice() did not fail as expected. name=%s, type=%s, \n errorcode=%s\n", name[3], type, myErrorName(status)); + } } static UBool U_CALLCONV @@ -1021,6 +1124,97 @@ static void TestICUDataName() /* test data swapping ------------------------------------------------------- */ +#ifdef OS400 +/* See comments in genccode.c on when this special implementation can be removed. */ +static const struct { + double bogus; + const char *bytes; +} gOffsetTOCAppDataItem1={ 0.0, /* alignment bytes */ + "\x00\x14" /* sizeof(UDataInfo) *//* MappedData { */ + "\xda" + "\x27" /* } */ + "\x00\x14" /* sizeof(UDataInfo) *//* UDataInfo { */ + "\0\0" + "\1" /* U_IS_BIG_ENDIAN */ + "\1" /* U_CHARSET_FAMILY */ + "\2" /* U_SIZEOF_WHAR_T */ + "\0" + "\x31\x31\x31\x31" + "\0\0\0\0" + "\0\0\0\0" /* } */ +}; +#else +static const struct { + double bogus; + MappedData bytes1; + UDataInfo bytes2; + uint8_t bytes3; +} gOffsetTOCAppDataItem1={ + 0.0, /* alignment bytes */ + { sizeof(UDataInfo), 0xda, 0x27 }, /* MappedData */ + + {sizeof(UDataInfo), + 0, + + U_IS_BIG_ENDIAN, + U_CHARSET_FAMILY, + sizeof(UChar), + 0, + + {0x31, 0x31, 0x31, 0x31}, /* dataFormat="1111" */ + {0, 0, 0, 0}, /* formatVersion */ + {0, 0, 0, 0}} /* dataVersion */ +}; +#endif + +static const UChar gOffsetTOCGarbage[] = { /* "I have been very naughty!" */ + 0x49, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6E, + 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6E, 0x61, 0x75, 0x67, 0x68, 0x74, 0x79, 0x21 +}; + +/* Original source: icu/source/tools/genccode */ +static const struct { + uint16_t headerSize; + uint8_t magic1, magic2; + UDataInfo info; + char padding[8]; + uint32_t count, reserved; + const struct { + const char *const name; + const void *const data; + } toc[3]; +} gOffsetTOCAppData_dat = { + 32, /* headerSize */ + 0xda, /* magic1, (see struct MappedData in udata.c) */ + 0x27, /* magic2 */ + { /*UDataInfo */ + sizeof(UDataInfo), /* size */ + 0, /* reserved */ + U_IS_BIG_ENDIAN, + U_CHARSET_FAMILY, + sizeof(UChar), + 0, /* reserved */ + { /* data format identifier */ + 0x54, 0x6f, 0x43, 0x50}, /* "ToCP" */ + {1, 0, 0, 0}, /* format version major, minor, milli, micro */ + {0, 0, 0, 0} /* dataVersion */ + }, + {0,0,0,0,0,0,0,0}, /* Padding[8] */ + 3, /* count */ + 0, /* Reserved */ + { /* TOC structure */ + { "OffsetTOCAppData/a/b", &gOffsetTOCAppDataItem1 }, + { "OffsetTOCAppData/gOffsetTOCAppDataItem1", &gOffsetTOCAppDataItem1 }, + { "OffsetTOCAppData/gOffsetTOCGarbage", &gOffsetTOCGarbage } + } +}; + +/* Unfortunately, trie dictionaries are in a C++ header */ +int32_t +triedict_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode); + /* test cases for maximum data swapping code coverage */ static const struct { const char *name, *type; @@ -1037,6 +1231,8 @@ static const struct { {"el", "res", ures_swap}, /* ICU's root */ {"root", "res", ures_swap}, + /* Test a 32-bit key table. This is large. */ + {"*testtable32", "res", ures_swap}, /* ICU 2.6 resource bundle - data format 1.0, without indexes[] (little-endian ASCII) */ {"*icu26_testtypes", "res", ures_swap}, @@ -1064,7 +1260,9 @@ static const struct { {"gb18030", "cnv", ucnv_swap}, /* MBCS conversion table file with extension */ {"*test4x", "cnv", ucnv_swap}, +#endif +#if !UCONFIG_NO_CONVERSION /* alias table */ {"cnvalias", "icu", ucnv_swapAliases}, #endif @@ -1075,25 +1273,41 @@ static const struct { #if !UCONFIG_NO_BREAK_ITERATION {"char", "brk", ubrk_swap}, + {"thaidict", "ctd", triedict_swap}, #endif /* the last item should not be #if'ed so that it can reliably omit the last comma */ /* Unicode properties */ - {"unames", "icu", uchar_swapNames}, {"pnames", "icu", upname_swap}, +#if 0 + /* + * Starting with ICU4C 3.4, the core Unicode properties files + * (uprops.icu, ucase.icu, ubidi.icu, unorm.icu) + * are hardcoded in the common DLL and therefore not included + * in the data package any more. + * Their swapping code is moved from the common DLL to the icuswap tool so that + * we need not jump through hoops (like adding snapshots of these files + * to testdata) for code coverage in tests. + * See Jitterbug 4497. + */ #if !UCONFIG_NO_NORMALIZATION {"unorm", "icu", unorm_swap}, #endif {"uprops", "icu", uprops_swap}, - {"ucase", "icu", ucase_swap} + {"ucase", "icu", ucase_swap}, + {"ubidi", "icu", ubidi_swap}, +#endif + {"unames", "icu", uchar_swapNames} }; -#define SWAP_BUFFER_SIZE 1000000 +/* Large enough for the largest swappable data item. */ +#define SWAP_BUFFER_SIZE 1800000 static void U_CALLCONV printError(void *context, const char *fmt, va_list args) { vlog_info("[swap] ", fmt, args); + log_err("\n"); /* Register error */ } static void @@ -1105,10 +1319,26 @@ TestSwapCase(UDataMemory *pData, const char *name, int32_t length, dataLength, length2, headerLength; UErrorCode errorCode; + UErrorCode badStatus; UBool inEndian, oppositeEndian; uint8_t inCharset, oppositeCharset; + /* First we check that swapFn handles failures as expected. */ + errorCode = U_UNSUPPORTED_ERROR; + length = swapFn(NULL, NULL, 0, buffer, &errorCode); + if (length != 0 || errorCode != U_UNSUPPORTED_ERROR) { + log_err("%s() did not fail as expected - %s\n", name, u_errorName(errorCode)); + } + errorCode = U_ZERO_ERROR; + length = swapFn(NULL, NULL, 0, buffer, &errorCode); + if (length != 0 || errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("%s() did not fail as expected with bad arguments - %s\n", name, u_errorName(errorCode)); + } + + + /* Continue with the rest of the tests. */ + errorCode = U_ZERO_ERROR; inData=udata_getMemory(pData); /* @@ -1151,6 +1381,20 @@ TestSwapCase(UDataMemory *pData, const char *name, } } + /* + Check error checking of swappable data not specific to this swapper. + This should always fail. + */ + badStatus = U_ZERO_ERROR; + length=swapFn(ds, &gOffsetTOCAppData_dat, -1, NULL, &badStatus); + if(badStatus != U_UNSUPPORTED_ERROR) { + log_err("swapFn(%s->!isBig+same charset) unexpectedly succeeded on bad data - %s\n", + name, u_errorName(errorCode)); + udata_closeSwapper(ds); + return; + } + + /* Now allow errors to be printed */ ds->printError=printError; /* preflight the length */ @@ -1285,13 +1529,18 @@ TestSwapCase(UDataMemory *pData, const char *name, } } +static void U_CALLCONV +printErrorToString(void *context, const char *fmt, va_list args) { + vsprintf((char *)context, fmt, args); +} + static void TestSwapData() { char name[100]; + UDataSwapper *ds; UDataMemory *pData; uint8_t *buffer; const char *pkg, *nm; - UErrorCode errorCode; int32_t i; @@ -1301,6 +1550,59 @@ TestSwapData() { return; } + /* Test that printError works as expected. */ + errorCode=U_USELESS_COLLATOR_ERROR; + ds=udata_openSwapper(U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + !U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + &errorCode); + if (ds != NULL || errorCode != U_USELESS_COLLATOR_ERROR) { + log_err("udata_openSwapper should have returned NULL with bad argument\n", name); + } + errorCode=U_ZERO_ERROR; + ds=udata_openSwapper(U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + !U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + &errorCode); + ds->printError=printErrorToString; + ds->printErrorContext=name; + udata_printError(ds, "This %s a %s", "is", "test"); + udata_closeSwapper(ds); + if (strcmp(name, "This is a test") != 0) { + log_err("udata_printError can't properly print error messages. Got = %s\n", name); + } + errorCode = U_USELESS_COLLATOR_ERROR; + ds=udata_openSwapperForInputData(NULL, 0, + !U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + &errorCode); + if (ds != NULL || errorCode != U_USELESS_COLLATOR_ERROR) { + log_err("udata_openSwapperForInputData should have returned NULL with bad argument\n", name); + } + errorCode=U_ZERO_ERROR; + ds=udata_openSwapperForInputData(NULL, 0, + !U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + &errorCode); + if (ds != NULL || errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("udata_openSwapperForInputData should have returned NULL with bad argument\n", name); + } + errorCode=U_ZERO_ERROR; + memset(buffer, 0, sizeof(2*SWAP_BUFFER_SIZE)); + ds=udata_openSwapperForInputData(buffer, 2*SWAP_BUFFER_SIZE, + !U_IS_BIG_ENDIAN, U_ASCII_FAMILY, + &errorCode); + if (ds != NULL || errorCode != U_UNSUPPORTED_ERROR) { + log_err("udata_openSwapperForInputData should have returned NULL with bad argument\n", name); + } + errorCode=U_ZERO_ERROR; + + /* Test argument checking. ucol_swapBinary is normally tested via ures_swap, and isn't normally called directly. */ +#if !UCONFIG_NO_COLLATION + ucol_swapBinary(NULL, NULL, -1, NULL, NULL); + ucol_swapBinary(NULL, NULL, -1, NULL, &errorCode); + if (errorCode != U_ILLEGAL_ARGUMENT_ERROR) { + log_err("ucol_swapBinary did not fail as expected\n", name); + } + errorCode=U_ZERO_ERROR; +#endif + for(i=0; i=0x80) { \ + if(U8_IS_LEAD(c)) { \ + (c)=utf8_nextCharSafeBody((const uint8_t *)s, &(i), (int32_t)(length), c, -2); \ + } else { \ + (c)=U_SENTINEL; \ + } \ + } \ +} + +#define L8_PREV(s, start, i, c) { \ + (c)=(uint8_t)(s)[--(i)]; \ + if((c)>=0x80) { \ + if((c)<=0xbf) { \ + (c)=utf8_prevCharSafeBody((const uint8_t *)s, start, &(i), c, -2); \ + } else { \ + (c)=U_SENTINEL; \ + } \ + } \ +} + +/* -------------------------------------------------------------------------- */ + static void printUChars(const uint8_t *uchars, int16_t len); static void TestCodeUnitValues(void); @@ -30,6 +68,7 @@ static void TestFwdBack(void); static void TestSetChar(void); static void TestAppendChar(void); static void TestAppend(void); +static void TestSurrogates(void); void addUTF8Test(TestNode** root); @@ -44,6 +83,7 @@ addUTF8Test(TestNode** root) addTest(root, &TestSetChar, "utf8tst/TestSetChar" ); addTest(root, &TestAppendChar, "utf8tst/TestAppendChar" ); addTest(root, &TestAppend, "utf8tst/TestAppend" ); + addTest(root, &TestSurrogates, "utf8tst/TestSurrogates" ); } static void TestCodeUnitValues() @@ -817,6 +857,97 @@ static void TestAppend() { } } +static void +TestSurrogates() { + static const uint8_t b[]={ + 0xc3, 0x9f, /* 00DF */ + 0xed, 0x9f, 0xbf, /* D7FF */ + 0xed, 0xa0, 0x81, /* D801 */ + 0xed, 0xbf, 0xbe, /* DFFE */ + 0xee, 0x80, 0x80, /* E000 */ + 0xf0, 0x97, 0xbf, 0xbe /* 17FFE */ + }; + static const UChar32 cp[]={ + 0xdf, 0xd7ff, 0xd801, 0xdffe, 0xe000, 0x17ffe + }; + + UChar32 cu, cs, cl; + int32_t i, j, k, iu, is, il, length; + + k=0; /* index into cp[] */ + length=LENGTHOF(b); + for(i=0; i=0 : cs!=cu) { + log_err("U8_NEXT(b[%ld])=U+%04lX != U+%04lX\n", (long)i, (long)cs, (long)cu); + } + + /* L8_NEXT() returns surrogate code points like U8_NEXT_UNSAFE() */ + if(cl!=cu) { + log_err("L8_NEXT(b[%ld])=U+%04lX != U+%04lX\n", (long)i, (long)cl, (long)cu); + } + + if(is!=iu || il!=iu) { + log_err("U8_NEXT(b[%ld]) or L8_NEXT(b[%ld]) did not advance the index correctly\n", (long)i, (long)i); + } + + ++k; /* next code point */ + i=iu; /* advance by one UTF-8 sequence */ + } + + while(i>0) { + --k; /* previous code point */ + + j=i; + U8_PREV_UNSAFE(b, j, cu); + iu=j; + + j=i; + U8_PREV(b, 0, j, cs); + is=j; + + j=i; + L8_PREV(b, 0, j, cl); + il=j; + + if(cu!=cp[k]) { + log_err("U8_PREV_UNSAFE(b[%ld])=U+%04lX != U+%04lX\n", (long)i, (long)cu, (long)cp[k]); + } + + /* U8_PREV() returns <0 for surrogate code points */ + if(U_IS_SURROGATE(cu) ? cs>=0 : cs!=cu) { + log_err("U8_PREV(b[%ld])=U+%04lX != U+%04lX\n", (long)i, (long)cs, (long)cu); + } + + /* L8_PREV() returns surrogate code points like U8_PREV_UNSAFE() */ + if(cl!=cu) { + log_err("L8_PREV(b[%ld])=U+%04lX != U+%04lX\n", (long)i, (long)cl, (long)cu); + } + + if(is!=iu || il !=iu) { + log_err("U8_PREV(b[%ld]) or L8_PREV(b[%ld]) did not advance the index correctly\n", (long)i, (long)i); + } + + i=iu; /* go back by one UTF-8 sequence */ + } +} + static void printUChars(const uint8_t *uchars, int16_t len){ int16_t i=0; for(i=0; i #include +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + #define LOOP_COUNT 10000 static void TestAPI(void); static void TestData(void); static void TestMonkey(void); +static void TestDotNet(void); void addUtmsTest(TestNode** root); @@ -29,6 +33,7 @@ void addUtmsTest(TestNode** root) addTest(root, &TestAPI, "tsformat/utmstest/TestAPI"); addTest(root, &TestData, "tsformat/utmstest/TestData"); addTest(root, &TestMonkey, "tsformat/utmstest/TestMonkey"); + addTest(root, &TestDotNet, "tsformat/utmstest/TestDotNet"); } /** @@ -339,4 +344,143 @@ static void TestMonkey(void) } } +struct DotNetDateTimeTicks { + int32_t year; + int32_t month; + int32_t day; + int64_t ticks; +}; +typedef struct DotNetDateTimeTicks DotNetDateTimeTicks; + +/* + * This data was generated by C++.Net code like + * Console::WriteLine(L" {{ {0}, 1, 1, INT64_C({1}) }},", year, DateTime(year, 1, 1).Ticks); + * with the DateTime constructor taking int values for year, month, and date. + */ +static const DotNetDateTimeTicks dotNetDateTimeTicks[]={ + /* year, month, day, ticks */ + { 100, 1, 1, INT64_C(31241376000000000) }, + { 100, 3, 1, INT64_C(31292352000000000) }, + { 200, 1, 1, INT64_C(62798112000000000) }, + { 200, 3, 1, INT64_C(62849088000000000) }, + { 300, 1, 1, INT64_C(94354848000000000) }, + { 300, 3, 1, INT64_C(94405824000000000) }, + { 400, 1, 1, INT64_C(125911584000000000) }, + { 400, 3, 1, INT64_C(125963424000000000) }, + { 500, 1, 1, INT64_C(157469184000000000) }, + { 500, 3, 1, INT64_C(157520160000000000) }, + { 600, 1, 1, INT64_C(189025920000000000) }, + { 600, 3, 1, INT64_C(189076896000000000) }, + { 700, 1, 1, INT64_C(220582656000000000) }, + { 700, 3, 1, INT64_C(220633632000000000) }, + { 800, 1, 1, INT64_C(252139392000000000) }, + { 800, 3, 1, INT64_C(252191232000000000) }, + { 900, 1, 1, INT64_C(283696992000000000) }, + { 900, 3, 1, INT64_C(283747968000000000) }, + { 1000, 1, 1, INT64_C(315253728000000000) }, + { 1000, 3, 1, INT64_C(315304704000000000) }, + { 1100, 1, 1, INT64_C(346810464000000000) }, + { 1100, 3, 1, INT64_C(346861440000000000) }, + { 1200, 1, 1, INT64_C(378367200000000000) }, + { 1200, 3, 1, INT64_C(378419040000000000) }, + { 1300, 1, 1, INT64_C(409924800000000000) }, + { 1300, 3, 1, INT64_C(409975776000000000) }, + { 1400, 1, 1, INT64_C(441481536000000000) }, + { 1400, 3, 1, INT64_C(441532512000000000) }, + { 1500, 1, 1, INT64_C(473038272000000000) }, + { 1500, 3, 1, INT64_C(473089248000000000) }, + { 1600, 1, 1, INT64_C(504595008000000000) }, + { 1600, 3, 1, INT64_C(504646848000000000) }, + { 1700, 1, 1, INT64_C(536152608000000000) }, + { 1700, 3, 1, INT64_C(536203584000000000) }, + { 1800, 1, 1, INT64_C(567709344000000000) }, + { 1800, 3, 1, INT64_C(567760320000000000) }, + { 1900, 1, 1, INT64_C(599266080000000000) }, + { 1900, 3, 1, INT64_C(599317056000000000) }, + { 2000, 1, 1, INT64_C(630822816000000000) }, + { 2000, 3, 1, INT64_C(630874656000000000) }, + { 2100, 1, 1, INT64_C(662380416000000000) }, + { 2100, 3, 1, INT64_C(662431392000000000) }, + { 2200, 1, 1, INT64_C(693937152000000000) }, + { 2200, 3, 1, INT64_C(693988128000000000) }, + { 2300, 1, 1, INT64_C(725493888000000000) }, + { 2300, 3, 1, INT64_C(725544864000000000) }, + { 2400, 1, 1, INT64_C(757050624000000000) }, + { 2400, 3, 1, INT64_C(757102464000000000) }, + { 2500, 1, 1, INT64_C(788608224000000000) }, + { 2500, 3, 1, INT64_C(788659200000000000) }, + { 2600, 1, 1, INT64_C(820164960000000000) }, + { 2600, 3, 1, INT64_C(820215936000000000) }, + { 2700, 1, 1, INT64_C(851721696000000000) }, + { 2700, 3, 1, INT64_C(851772672000000000) }, + { 2800, 1, 1, INT64_C(883278432000000000) }, + { 2800, 3, 1, INT64_C(883330272000000000) }, + { 2900, 1, 1, INT64_C(914836032000000000) }, + { 2900, 3, 1, INT64_C(914887008000000000) }, + { 3000, 1, 1, INT64_C(946392768000000000) }, + { 3000, 3, 1, INT64_C(946443744000000000) }, + { 1, 1, 1, INT64_C(0) }, + { 1601, 1, 1, INT64_C(504911232000000000) }, + { 1899, 12, 31, INT64_C(599265216000000000) }, + { 1904, 1, 1, INT64_C(600527520000000000) }, + { 1970, 1, 1, INT64_C(621355968000000000) }, + { 2001, 1, 1, INT64_C(631139040000000000) }, + { 9900, 3, 1, INT64_C(3123873216000000000) }, + { 9999, 12, 31, INT64_C(3155378112000000000) } +}; + +/* + * ICU's Universal Time Scale is designed to be tick-for-tick compatible with + * .Net System.DateTime. Verify that this is so for the + * .Net-supported date range (years 1-9999 AD). + * This requires a proleptic Gregorian calendar because that's what .Net uses. + * Proleptic: No Julian/Gregorian switchover, or a switchover before + * any date that we test, that is, before 0001 AD. + */ +static void +TestDotNet() { + static const UChar utc[] = { 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0 }; /* "Etc/GMT" */ + const int32_t dayMillis = 86400 * INT64_C(1000); /* 1 day = 86400 seconds */ + const int64_t dayTicks = 86400 * INT64_C(10000000); + const DotNetDateTimeTicks *dt; + UCalendar *cal; + UErrorCode errorCode; + UDate icuDate; + int64_t ticks, millis; + int32_t i; + + /* Open a proleptic Gregorian calendar. */ + errorCode = U_ZERO_ERROR; + cal = ucal_open(utc, -1, "", UCAL_GREGORIAN, &errorCode); + ucal_setGregorianChange(cal, -1000000 * (dayMillis * (UDate)1), &errorCode); + if(U_FAILURE(errorCode)) { + log_err("ucal_open(UTC/proleptic Gregorian) failed: %s\n", u_errorName(errorCode)); + ucal_close(cal); + return; + } + for(i = 0; i < LENGTHOF(dotNetDateTimeTicks); ++i) { + /* Test conversion from .Net/Universal time to ICU time. */ + dt = dotNetDateTimeTicks + i; + millis = utmscale_toInt64(dt->ticks, UDTS_ICU4C_TIME, &errorCode); + ucal_clear(cal); + ucal_setDate(cal, dt->year, dt->month - 1, dt->day, &errorCode); /* Java & ICU use January = month 0. */ + icuDate = ucal_getMillis(cal, &errorCode); + if(millis != icuDate) { + /* Print days not millis to stay within printf() range. */ + log_err("utmscale_toInt64(ticks[%d], ICU4C)=%dd != %dd=ucal_getMillis(%04d-%02d-%02d)\n", + (int)i, (int)(millis/dayMillis), (int)(icuDate/dayMillis), (int)dt->year, (int)dt->month, (int)dt->day); + } + + /* Test conversion from ICU time to .Net/Universal time. */ + ticks = utmscale_fromInt64((int64_t)icuDate, UDTS_ICU4C_TIME, &errorCode); + if(ticks != dt->ticks) { + /* Print days not ticks to stay within printf() range. */ + log_err("utmscale_fromInt64(date[%d], ICU4C)=%dd != %dd=.Net System.DateTime(%04d-%02d-%02d).Ticks\n", + (int)i, (int)(ticks/dayTicks), (int)(dt->ticks/dayTicks), (int)dt->year, (int)dt->month, (int)dt->day); + } + } + + ucal_close(cal); +} + #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/cintltst/utransts.c b/icuSources/test/cintltst/utransts.c index b472fe16..ec99292a 100644 --- a/icuSources/test/cintltst/utransts.c +++ b/icuSources/test/cintltst/utransts.c @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1997-2004, International Business Machines + * Copyright (C) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * Date Name Description @@ -605,6 +605,7 @@ static void _expect(const UTransliterator* trans, int32_t limit; UTransPosition pos; XReplaceable xrep; + XReplaceable *xrepPtr = &xrep; UReplaceableCallbacks xrepVtable; u_uastrcpy(from, cfrom); @@ -659,7 +660,7 @@ static void _expect(const UTransliterator* trans, InitXReplaceableCallbacks(&xrepVtable); InitXReplaceable(&xrep, cfrom); limit = u_strlen(from); - utrans_trans(trans, (UReplaceable*)&xrep, &xrepVtable, 0, &limit, &status); + utrans_trans(trans, (UReplaceable*)xrepPtr, &xrepVtable, 0, &limit, &status); if (U_FAILURE(status)) { log_err("FAIL: utrans_trans() failed, error=%s\n", u_errorName(status)); @@ -682,8 +683,8 @@ static void _expect(const UTransliterator* trans, InitXReplaceable(&xrep, cfrom); pos.start = pos.contextStart = 0; pos.limit = pos.contextLimit = u_strlen(from); - utrans_transIncremental(trans, (UReplaceable*)&xrep, &xrepVtable, &pos, &status); - utrans_trans(trans, (UReplaceable*)&xrep, &xrepVtable, pos.start, &pos.limit, &status); + utrans_transIncremental(trans, (UReplaceable*)xrepPtr, &xrepVtable, &pos, &status); + utrans_trans(trans, (UReplaceable*)xrepPtr, &xrepVtable, pos.start, &pos.limit, &status); if (U_FAILURE(status)) { log_err("FAIL: utrans_transIncremental() failed, error=%s\n", u_errorName(status)); diff --git a/icuSources/test/collperf/collperf.cpp b/icuSources/test/collperf/collperf.cpp deleted file mode 100644 index bd916c5c..00000000 --- a/icuSources/test/collperf/collperf.cpp +++ /dev/null @@ -1,1749 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (C) 2001 IBM, Inc. All Rights Reserved. - * - ********************************************************************/ -/******************************************************************************** -* -* File CALLCOLL.C -* -* Modification History: -* Name Description -* Andy Heninger First Version -* -********************************************************************************* -*/ - -// -// This program tests string collation and sort key generation performance. -// Three APIs can be teste: ICU C , Unix strcoll, strxfrm and Windows LCMapString -// A file of names is required as input, one per line. It must be in utf-8 or utf-16 format, -// and include a byte order mark. Either LE or BE format is OK. -// - -const char gUsageString[] = - "usage: collperf options...\n" - "-help Display this message.\n" - "-file file_name utf-16 format file of names.\n" - "-locale name ICU locale to use. Default is en_US\n" - "-rules file_name Collation rules file (overrides locale)\n" - "-langid 0x1234 Windows Language ID number. Default to value for -locale option\n" - " see http://msdn.microsoft.com/library/psdk/winbase/nls_8xo3.htm\n" - "-win Run test using Windows native services. (ICU is default)\n" - "-unix Run test using Unix strxfrm, strcoll services.\n" - "-uselen Use API with string lengths. Default is null-terminated strings\n" - "-usekeys Run tests using sortkeys rather than strcoll\n" - "-strcmp Run tests using u_strcmp rather than strcoll\n" - "-strcmpCPO Run tests using u_strcmpCodePointOrder rather than strcoll\n" - "-loop nnnn Loopcount for test. Adjust for reasonable total running time.\n" - "-iloop n Inner Loop Count. Default = 1. Number of calls to function\n" - " under test at each call point. For measuring test overhead.\n" - "-terse Terse numbers-only output. Intended for use by scripts.\n" - "-french French accent ordering\n" - "-frenchoff No French accent ordering (for use with French locales.)\n" - "-norm Normalizing mode on\n" - "-shifted Shifted mode\n" - "-lower Lower case first\n" - "-upper Upper case first\n" - "-case Enable separate case level\n" - "-level n Sort level, 1 to 5, for Primary, Secndary, Tertiary, Quaternary, Identical\n" - "-keyhist Produce a table sort key size vs. string length\n" - "-binsearch Binary Search timing test\n" - "-keygen Sort Key Generation timing test\n" - "-qsort Quicksort timing test\n" - "-iter Iteration Performance Test\n" - "-dump Display strings, sort keys and CEs.\n" - ; - - - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#else -// -// Stubs for Windows API functions when building on UNIXes. -// -typedef int DWORD; -inline int CompareStringW(DWORD, DWORD, UChar *, int, UChar *, int) {return 0;}; -#include -unsigned long timeGetTime() { - struct timeval t; - gettimeofday(&t, 0); - unsigned long val = t.tv_sec * 1000; // Let it overflow. Who cares. - val += t.tv_usec / 1000; - return val; -}; -inline int LCMapStringW(DWORD, DWORD, UChar *, int, UChar *, int) {return 0;}; -const int LCMAP_SORTKEY = 0; -#define MAKELCID(a,b) 0 -const int SORT_DEFAULT = 0; -#endif - - - -// -// Command line option variables -// These global variables are set according to the options specified -// on the command line by the user. -char * opt_fName = 0; -char * opt_locale = "en_US"; -int opt_langid = 0; // Defaults to value corresponding to opt_locale. -char * opt_rules = 0; -UBool opt_help = FALSE; -int opt_loopCount = 1; -int opt_iLoopCount = 1; -UBool opt_terse = FALSE; -UBool opt_qsort = FALSE; -UBool opt_binsearch = FALSE; -UBool opt_icu = TRUE; -UBool opt_win = FALSE; // Run with Windows native functions. -UBool opt_unix = FALSE; // Run with UNIX strcoll, strxfrm functions. -UBool opt_uselen = FALSE; -UBool opt_usekeys = FALSE; -UBool opt_strcmp = FALSE; -UBool opt_strcmpCPO = FALSE; -UBool opt_norm = FALSE; -UBool opt_keygen = FALSE; -UBool opt_french = FALSE; -UBool opt_frenchoff = FALSE; -UBool opt_shifted = FALSE; -UBool opt_lower = FALSE; -UBool opt_upper = FALSE; -UBool opt_case = FALSE; -int opt_level = 0; -UBool opt_keyhist = FALSE; -UBool opt_itertest = FALSE; -UBool opt_dump = FALSE; - - - -// -// Definitions for the command line options -// -struct OptSpec { - const char *name; - enum {FLAG, NUM, STRING} type; - void *pVar; -}; - -OptSpec opts[] = { - {"-file", OptSpec::STRING, &opt_fName}, - {"-locale", OptSpec::STRING, &opt_locale}, - {"-langid", OptSpec::NUM, &opt_langid}, - {"-rules", OptSpec::STRING, &opt_rules}, - {"-qsort", OptSpec::FLAG, &opt_qsort}, - {"-binsearch", OptSpec::FLAG, &opt_binsearch}, - {"-iter", OptSpec::FLAG, &opt_itertest}, - {"-win", OptSpec::FLAG, &opt_win}, - {"-unix", OptSpec::FLAG, &opt_unix}, - {"-uselen", OptSpec::FLAG, &opt_uselen}, - {"-usekeys", OptSpec::FLAG, &opt_usekeys}, - {"-strcmp", OptSpec::FLAG, &opt_strcmp}, - {"-strcmpCPO", OptSpec::FLAG, &opt_strcmpCPO}, - {"-norm", OptSpec::FLAG, &opt_norm}, - {"-french", OptSpec::FLAG, &opt_french}, - {"-frenchoff", OptSpec::FLAG, &opt_frenchoff}, - {"-shifted", OptSpec::FLAG, &opt_shifted}, - {"-lower", OptSpec::FLAG, &opt_lower}, - {"-upper", OptSpec::FLAG, &opt_upper}, - {"-case", OptSpec::FLAG, &opt_case}, - {"-level", OptSpec::NUM, &opt_level}, - {"-keyhist", OptSpec::FLAG, &opt_keyhist}, - {"-keygen", OptSpec::FLAG, &opt_keygen}, - {"-loop", OptSpec::NUM, &opt_loopCount}, - {"-iloop", OptSpec::NUM, &opt_iLoopCount}, - {"-terse", OptSpec::FLAG, &opt_terse}, - {"-dump", OptSpec::FLAG, &opt_dump}, - {"-help", OptSpec::FLAG, &opt_help}, - {"-?", OptSpec::FLAG, &opt_help}, - {0, OptSpec::FLAG, 0} -}; - - -//--------------------------------------------------------------------------- -// -// Global variables pointing to and describing the test file -// -//--------------------------------------------------------------------------- - -// -// struct Line -// -// Each line from the source file (containing a name, presumably) gets -// one of these structs. -// -struct Line { - UChar *name; - int len; - char *winSortKey; - char *icuSortKey; - char *unixSortKey; - char *unixName; -}; - - - -Line *gFileLines; // Ptr to array of Line structs, one per line in the file. -int gNumFileLines; -UCollator *gCol; -DWORD gWinLCID; - -Line **gSortedLines; -Line **gRandomLines; -int gCount; - - - -//--------------------------------------------------------------------------- -// -// ProcessOptions() Function to read the command line options. -// -//--------------------------------------------------------------------------- -UBool ProcessOptions(int argc, const char **argv, OptSpec opts[]) -{ - int i; - int argNum; - const char *pArgName; - OptSpec *pOpt; - - for (argNum=1; argNumname != 0; pOpt++) { - if (strcmp(pOpt->name, pArgName) == 0) { - switch (pOpt->type) { - case OptSpec::FLAG: - *(UBool *)(pOpt->pVar) = TRUE; - break; - case OptSpec::STRING: - argNum ++; - if (argNum >= argc) { - fprintf(stderr, "value expected for \"%s\" option.\n", pOpt->name); - return FALSE; - } - *(const char **)(pOpt->pVar) = argv[argNum]; - break; - case OptSpec::NUM: - argNum ++; - if (argNum >= argc) { - fprintf(stderr, "value expected for \"%s\" option.\n", pOpt->name); - return FALSE; - } - char *endp; - i = strtol(argv[argNum], &endp, 0); - if (endp == argv[argNum]) { - fprintf(stderr, "integer value expected for \"%s\" option.\n", pOpt->name); - return FALSE; - } - *(int *)(pOpt->pVar) = i; - } - break; - } - } - if (pOpt->name == 0) - { - fprintf(stderr, "Unrecognized option \"%s\"\n", pArgName); - return FALSE; - } - } -return TRUE; -} - -//--------------------------------------------------------------------------------------- -// -// Comparison functions for use by qsort. -// -// Six flavors, ICU or Windows, SortKey or String Compare, Strings with length -// or null terminated. -// -//--------------------------------------------------------------------------------------- -int ICUstrcmpK(const void *a, const void *b) { - gCount++; - int t = strcmp((*(Line **)a)->icuSortKey, (*(Line **)b)->icuSortKey); - return t; -} - - -int ICUstrcmpL(const void *a, const void *b) { - gCount++; - UCollationResult t; - t = ucol_strcoll(gCol, (*(Line **)a)->name, (*(Line **)a)->len, (*(Line **)b)->name, (*(Line **)b)->len); - if (t == UCOL_LESS) return -1; - if (t == UCOL_GREATER) return +1; - return 0; -} - - -int ICUstrcmp(const void *a, const void *b) { - gCount++; - UCollationResult t; - t = ucol_strcoll(gCol, (*(Line **)a)->name, -1, (*(Line **)b)->name, -1); - if (t == UCOL_LESS) return -1; - if (t == UCOL_GREATER) return +1; - return 0; -} - - -int Winstrcmp(const void *a, const void *b) { - gCount++; - int t; - t = CompareStringW(gWinLCID, 0, (*(Line **)a)->name, -1, (*(Line **)b)->name, -1); - return t-2; -} - - -int UNIXstrcmp(const void *a, const void *b) { - gCount++; - int t; - t = strcoll((*(Line **)a)->unixName, (*(Line **)b)->unixName); - return t; -} - - -int WinstrcmpL(const void *a, const void *b) { - gCount++; - int t; - t = CompareStringW(gWinLCID, 0, (*(Line **)a)->name, (*(Line **)a)->len, (*(Line **)b)->name, (*(Line **)b)->len); - return t-2; -} - - -int WinstrcmpK(const void *a, const void *b) { - gCount++; - int t = strcmp((*(Line **)a)->winSortKey, (*(Line **)b)->winSortKey); - return t; -} - - -//--------------------------------------------------------------------------------------- -// -// Function for sorting the names (lines) into a random order. -// Order is based on a hash of the ICU Sort key for the lines -// The randomized order is used as input for the sorting timing tests. -// -//--------------------------------------------------------------------------------------- -int ICURandomCmp(const void *a, const void *b) { - char *ask = (*(Line **)a)->icuSortKey; - char *bsk = (*(Line **)b)->icuSortKey; - int aVal = 0; - int bVal = 0; - int retVal; - while (*ask != 0) { - aVal += aVal*37 + *ask++; - } - while (*bsk != 0) { - bVal += bVal*37 + *bsk++; - } - retVal = -1; - if (aVal == bVal) { - retVal = 0; - } - else if (aVal > bVal) { - retVal = 1; - } - return retVal; -} - -//--------------------------------------------------------------------------------------- -// -// doKeyGen() Key Generation Timing Test -// -//--------------------------------------------------------------------------------------- -void doKeyGen() -{ - int line; - int loops; - int iLoop; - int t; - int len=-1; - - // Adjust loop count to compensate for file size. Should be order n - double dLoopCount = double(opt_loopCount) * (1000. / double(gNumFileLines)); - int adj_loopCount = int(dLoopCount); - if (adj_loopCount < 1) adj_loopCount = 1; - - - unsigned long startTime = timeGetTime(); - - if (opt_win) { - for (loops=0; loopsname, (gSortedLines[guess])->name); - } - gCount++; - if (r== 0) - break; - if (r < 0) - hi = guess; - else - lo = guess; - } - } - } - elapsedTime = timeGetTime() - startTime; - break; - } - - - if (opt_icu) - { - unsigned long startTime = timeGetTime(); - UCollationResult r; - for (loops=0; loopslen; - } - int hi = gNumFileLines-1; - int lo = 0; - int guess = -1; - for (;;) { - int newGuess = (hi + lo) / 2; - if (newGuess == guess) - break; - guess = newGuess; - int ri; - if (opt_usekeys) { - for (iLoop=0; iLoop < opt_iLoopCount; iLoop++) { - ri = strcmp((gSortedLines[line])->icuSortKey, (gSortedLines[guess])->icuSortKey); - } - gCount++; - r=UCOL_GREATER; if(ri<0) {r=UCOL_LESS;} else if (ri==0) {r=UCOL_EQUAL;} - } - else - { - if (opt_uselen) { - guessLen = (gSortedLines[guess])->len; - } - for (iLoop=0; iLoop < opt_iLoopCount; iLoop++) { - r = ucol_strcoll(gCol, (gSortedLines[line])->name, lineLen, (gSortedLines[guess])->name, guessLen); - } - gCount++; - } - if (r== UCOL_EQUAL) - break; - if (r == UCOL_LESS) - hi = guess; - else - lo = guess; - } - } - } - elapsedTime = timeGetTime() - startTime; - break; - } - - if (opt_win) - { - unsigned long startTime = timeGetTime(); - int r; - for (loops=0; loopslen; - } - int hi = gNumFileLines-1; - int lo = 0; - int guess = -1; - for (;;) { - int newGuess = (hi + lo) / 2; - if (newGuess == guess) - break; - guess = newGuess; - if (opt_usekeys) { - for (iLoop=0; iLoop < opt_iLoopCount; iLoop++) { - r = strcmp((gSortedLines[line])->winSortKey, (gSortedLines[guess])->winSortKey); - } - gCount++; - r+=2; - } - else - { - if (opt_uselen) { - guessLen = (gSortedLines[guess])->len; - } - for (iLoop=0; iLoop < opt_iLoopCount; iLoop++) { - r = CompareStringW(gWinLCID, 0, (gSortedLines[line])->name, lineLen, (gSortedLines[guess])->name, guessLen); - } - if (r == 0) { - if (opt_terse == FALSE) { - fprintf(stderr, "Error returned from Windows CompareStringW.\n"); - } - exit(-1); - } - gCount++; - } - if (r== 2) // strings == - break; - if (r == 1) // line < guess - hi = guess; - else // line > guess - lo = guess; - } - } - } - elapsedTime = timeGetTime() - startTime; - break; - } - - if (opt_unix) - { - unsigned long startTime = timeGetTime(); - int r; - for (loops=0; loopsunixSortKey, (gSortedLines[guess])->unixSortKey); - } - gCount++; - } - else - { - for (iLoop=0; iLoop < opt_iLoopCount; iLoop++) { - r = strcoll((gSortedLines[line])->unixName, (gSortedLines[guess])->unixName); - } - errno = 0; - if (errno != 0) { - fprintf(stderr, "Error %d returned from strcoll.\n", errno); - exit(-1); - } - gCount++; - } - if (r == 0) // strings == - break; - if (r < 0) // line < guess - hi = guess; - else // line > guess - lo = guess; - } - } - } - elapsedTime = timeGetTime() - startTime; - break; - } - break; - } - - int ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount); - if (opt_terse == FALSE) { - printf("binary search: total # of string compares = %d\n", gCount); - printf("binary search: compares per loop = %d\n", gCount / loops); - printf("binary search: time per compare = %d ns\n", ns); - } else { - printf("%d, ", ns); - } - -} - - - - -//--------------------------------------------------------------------------------------- -// -// doQSort() The quick sort timing test. Uses the C library qsort function. -// -//--------------------------------------------------------------------------------------- -void doQSort() { - int i; - Line **sortBuf = new Line *[gNumFileLines]; - - // Adjust loop count to compensate for file size. QSort should be n log(n) - double dLoopCount = double(opt_loopCount) * 3000. / (log10(gNumFileLines) * double(gNumFileLines)); - if (opt_usekeys) dLoopCount *= 5; - int adj_loopCount = int(dLoopCount); - if (adj_loopCount < 1) adj_loopCount = 1; - - - gCount = 0; - unsigned long startTime = timeGetTime(); - if (opt_win && opt_usekeys) { - for (i=0; i maxLen) maxLen = gFileLines[i].len; - } - - // Allocate arrays to hold the histogram data - int *accumulatedLen = new int[maxLen+1]; - int *numKeysOfSize = new int[maxLen+1]; - for (i=0; i<=maxLen; i++) { - accumulatedLen[i] = 0; - numKeysOfSize[i] = 0; - } - - // Fill the arrays... - for (i=0; i 0) { - printf("%d, %f, %f\n", i, (float)accumulatedLen[i] / (float)numKeysOfSize[i], - (float)accumulatedLen[i] / (float)(numKeysOfSize[i] * i)); - } - } -} - -//--------------------------------------------------------------------------------------- -// -// doForwardIterTest(UBool) Forward iteration test -// argument null-terminated string used -// -//--------------------------------------------------------------------------------------- -void doForwardIterTest(UBool haslen) { - int count = 0; - - UErrorCode error = U_ZERO_ERROR; - printf("\n\nPerforming forward iteration performance test with "); - - if (haslen) { - printf("non-null terminated data -----------\n"); - } - else { - printf("null terminated data -----------\n"); - } - printf("performance test on strings from file -----------\n"); - - UChar dummytext[] = {0, 0}; - UCollationElements *iter = ucol_openElements(gCol, NULL, 0, &error); - ucol_setText(iter, dummytext, 1, &error); - - gCount = 0; - unsigned long startTime = timeGetTime(); - while (count < opt_loopCount) { - int linecount = 0; - while (linecount < gNumFileLines) { - UChar *str = gFileLines[linecount].name; - int strlen = haslen?gFileLines[linecount].len:-1; - ucol_setText(iter, str, strlen, &error); - while (ucol_next(iter, &error) != UCOL_NULLORDER) { - gCount++; - } - - linecount ++; - } - count ++; - } - unsigned long elapsedTime = timeGetTime() - startTime; - printf("elapsedTime %d\n", elapsedTime); - - // empty loop recalculation - count = 0; - startTime = timeGetTime(); - while (count < opt_loopCount) { - int linecount = 0; - while (linecount < gNumFileLines) { - UChar *str = gFileLines[linecount].name; - int strlen = haslen?gFileLines[linecount].len:-1; - ucol_setText(iter, str, strlen, &error); - linecount ++; - } - count ++; - } - elapsedTime -= (timeGetTime() - startTime); - printf("elapsedTime %d\n", elapsedTime); - - ucol_closeElements(iter); - - int ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount); - printf("Total number of strings compared %d in %d loops\n", gNumFileLines, - opt_loopCount); - printf("Average time per ucol_next() nano seconds %d\n", ns); - - printf("performance test on skipped-5 concatenated strings from file -----------\n"); - - UChar *str; - int strlen = 0; - // appending all the strings - int linecount = 0; - while (linecount < gNumFileLines) { - strlen += haslen?gFileLines[linecount].len: - u_strlen(gFileLines[linecount].name); - linecount ++; - } - str = (UChar *)malloc(sizeof(UChar) * strlen); - int strindex = 0; - linecount = 0; - while (strindex < strlen) { - int len = 0; - len += haslen?gFileLines[linecount].len: - u_strlen(gFileLines[linecount].name); - memcpy(str + strindex, gFileLines[linecount].name, - sizeof(UChar) * len); - strindex += len; - linecount ++; - } - - printf("Total size of strings %d\n", strlen); - - gCount = 0; - count = 0; - - if (!haslen) { - strlen = -1; - } - iter = ucol_openElements(gCol, str, strlen, &error); - if (!haslen) { - strlen = u_strlen(str); - } - strlen -= 5; // any left over characters are not iterated, - // this is to ensure the backwards and forwards iterators - // gets the same position - startTime = timeGetTime(); - while (count < opt_loopCount) { - int count5 = 5; - strindex = 0; - ucol_setOffset(iter, strindex, &error); - while (TRUE) { - if (ucol_next(iter, &error) == UCOL_NULLORDER) { - break; - } - gCount++; - count5 --; - if (count5 == 0) { - strindex += 10; - if (strindex > strlen) { - break; - } - ucol_setOffset(iter, strindex, &error); - count5 = 5; - } - } - count ++; - } - - elapsedTime = timeGetTime() - startTime; - printf("elapsedTime %d\n", elapsedTime); - - // empty loop recalculation - int tempgCount = 0; - count = 0; - startTime = timeGetTime(); - while (count < opt_loopCount) { - int count5 = 5; - strindex = 0; - ucol_setOffset(iter, strindex, &error); - while (TRUE) { - tempgCount ++; - count5 --; - if (count5 == 0) { - strindex += 10; - if (strindex > strlen) { - break; - } - ucol_setOffset(iter, strindex, &error); - count5 = 5; - } - } - count ++; - } - elapsedTime -= (timeGetTime() - startTime); - printf("elapsedTime %d\n", elapsedTime); - - ucol_closeElements(iter); - - printf("gCount %d\n", gCount); - ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount); - printf("Average time per ucol_next() nano seconds %d\n", ns); -} - -//--------------------------------------------------------------------------------------- -// -// doBackwardIterTest(UBool) Backwards iteration test -// argument null-terminated string used -// -//--------------------------------------------------------------------------------------- -void doBackwardIterTest(UBool haslen) { - int count = 0; - UErrorCode error = U_ZERO_ERROR; - printf("\n\nPerforming backward iteration performance test with "); - - if (haslen) { - printf("non-null terminated data -----------\n"); - } - else { - printf("null terminated data -----------\n"); - } - - printf("performance test on strings from file -----------\n"); - - UCollationElements *iter = ucol_openElements(gCol, NULL, 0, &error); - UChar dummytext[] = {0, 0}; - ucol_setText(iter, dummytext, 1, &error); - - gCount = 0; - unsigned long startTime = timeGetTime(); - while (count < opt_loopCount) { - int linecount = 0; - while (linecount < gNumFileLines) { - UChar *str = gFileLines[linecount].name; - int strlen = haslen?gFileLines[linecount].len:-1; - ucol_setText(iter, str, strlen, &error); - while (ucol_previous(iter, &error) != UCOL_NULLORDER) { - gCount ++; - } - - linecount ++; - } - count ++; - } - unsigned long elapsedTime = timeGetTime() - startTime; - - printf("elapsedTime %d\n", elapsedTime); - - // empty loop recalculation - count = 0; - startTime = timeGetTime(); - while (count < opt_loopCount) { - int linecount = 0; - while (linecount < gNumFileLines) { - UChar *str = gFileLines[linecount].name; - int strlen = haslen?gFileLines[linecount].len:-1; - ucol_setText(iter, str, strlen, &error); - linecount ++; - } - count ++; - } - elapsedTime -= (timeGetTime() - startTime); - - printf("elapsedTime %d\n", elapsedTime); - ucol_closeElements(iter); - - int ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount); - printf("Total number of strings compared %d in %d loops\n", gNumFileLines, - opt_loopCount); - printf("Average time per ucol_previous() nano seconds %d\n", ns); - - printf("performance test on skipped-5 concatenated strings from file -----------\n"); - - UChar *str; - int strlen = 0; - // appending all the strings - int linecount = 0; - while (linecount < gNumFileLines) { - strlen += haslen?gFileLines[linecount].len: - u_strlen(gFileLines[linecount].name); - linecount ++; - } - str = (UChar *)malloc(sizeof(UChar) * strlen); - int strindex = 0; - linecount = 0; - while (strindex < strlen) { - int len = 0; - len += haslen?gFileLines[linecount].len: - u_strlen(gFileLines[linecount].name); - memcpy(str + strindex, gFileLines[linecount].name, - sizeof(UChar) * len); - strindex += len; - linecount ++; - } - - printf("Total size of strings %d\n", strlen); - - gCount = 0; - count = 0; - - if (!haslen) { - strlen = -1; - } - - iter = ucol_openElements(gCol, str, strlen, &error); - if (!haslen) { - strlen = u_strlen(str); - } - - startTime = timeGetTime(); - while (count < opt_loopCount) { - int count5 = 5; - strindex = 5; - ucol_setOffset(iter, strindex, &error); - while (TRUE) { - if (ucol_previous(iter, &error) == UCOL_NULLORDER) { - break; - } - gCount ++; - count5 --; - if (count5 == 0) { - strindex += 10; - if (strindex > strlen) { - break; - } - ucol_setOffset(iter, strindex, &error); - count5 = 5; - } - } - count ++; - } - - elapsedTime = timeGetTime() - startTime; - printf("elapsedTime %d\n", elapsedTime); - - // empty loop recalculation - count = 0; - int tempgCount = 0; - startTime = timeGetTime(); - while (count < opt_loopCount) { - int count5 = 5; - strindex = 5; - ucol_setOffset(iter, strindex, &error); - while (TRUE) { - tempgCount ++; - count5 --; - if (count5 == 0) { - strindex += 10; - if (strindex > strlen) { - break; - } - ucol_setOffset(iter, strindex, &error); - count5 = 5; - } - } - count ++; - } - elapsedTime -= (timeGetTime() - startTime); - printf("elapsedTime %d\n", elapsedTime); - ucol_closeElements(iter); - - printf("gCount %d\n", gCount); - ns = (int)(float(1000000) * (float)elapsedTime / (float)gCount); - printf("Average time per ucol_previous() nano seconds %d\n", ns); -} - -//--------------------------------------------------------------------------------------- -// -// doIterTest() Iteration test -// -//--------------------------------------------------------------------------------------- -void doIterTest() { - doForwardIterTest(opt_uselen); - doBackwardIterTest(opt_uselen); -} - - -//---------------------------------------------------------------------------------------- -// -// UnixConvert -- Convert the lines of the file to the encoding for UNIX -// Since it appears that Unicode support is going in the general -// direction of the use of UTF-8 locales, that is the approach -// that is used here. -// -//---------------------------------------------------------------------------------------- -void UnixConvert() { - int line; - - UConverter *cvrtr; // An ICU code page converter. - UErrorCode status = U_ZERO_ERROR; - - - cvrtr = ucnv_open("utf-8", &status); // we are just doing UTF-8 locales for now. - if (U_FAILURE(status)) { - fprintf(stderr, "ICU Converter open failed.: %d\n", &status); - exit(-1); - } - - for (line=0; line < gNumFileLines; line++) { - int sizeNeeded = ucnv_fromUChars(cvrtr, - 0, // ptr to target buffer. - 0, // length of target buffer. - gFileLines[line].name, - -1, // source is null terminated - &status); - if (status != U_BUFFER_OVERFLOW_ERROR && status != U_ZERO_ERROR) { - fprintf(stderr, "Conversion from Unicode, something is wrong.\n"); - exit(-1); - } - status = U_ZERO_ERROR; - gFileLines[line].unixName = new char[sizeNeeded+1]; - sizeNeeded = ucnv_fromUChars(cvrtr, - gFileLines[line].unixName, // ptr to target buffer. - sizeNeeded+1, // length of target buffer. - gFileLines[line].name, - -1, // source is null terminated - &status); - if (U_FAILURE(status)) { - fprintf(stderr, "ICU Conversion Failed.: %d\n", status); - exit(-1); - } - gFileLines[line].unixName[sizeNeeded] = 0; - }; - ucnv_close(cvrtr); -} - - -//---------------------------------------------------------------------------------------- -// -// class UCharFile Class to hide all the gorp to read a file in -// and produce a stream of UChars. -// -//---------------------------------------------------------------------------------------- -class UCharFile { -public: - UCharFile(const char *fileName); - ~UCharFile(); - UChar get(); - UBool eof() {return fEof;}; - UBool error() {return fError;}; - -private: - UCharFile (const UCharFile &other) {}; // No copy constructor. - UCharFile & operator = (const UCharFile &other) {return *this;}; // No assignment op - - FILE *fFile; - const char *fName; - UBool fEof; - UBool fError; - UChar fPending2ndSurrogate; - - enum {UTF16LE, UTF16BE, UTF8} fEncoding; -}; - -UCharFile::UCharFile(const char * fileName) { - fEof = FALSE; - fError = FALSE; - fName = fileName; - fFile = fopen(fName, "rb"); - fPending2ndSurrogate = 0; - if (fFile == NULL) { - fprintf(stderr, "Can not open file \"%s\"\n", opt_fName); - fError = TRUE; - return; - } - // - // Look for the byte order mark at the start of the file. - // - int BOMC1, BOMC2, BOMC3; - BOMC1 = fgetc(fFile); - BOMC2 = fgetc(fFile); - - if (BOMC1 == 0xff && BOMC2 == 0xfe) { - fEncoding = UTF16LE; } - else if (BOMC1 == 0xfe && BOMC2 == 0xff) { - fEncoding = UTF16BE; } - else if (BOMC1 == 0xEF && BOMC2 == 0xBB && (BOMC3 = fgetc(fFile)) == 0xBF ) { - fEncoding = UTF8; } - else - { - fprintf(stderr, "collperf: file \"%s\" encoding must be UTF-8 or UTF-16, and " - "must include a BOM.\n", fileName); - fError = true; - return; - } -} - - -UCharFile::~UCharFile() { - fclose(fFile); -} - - - -UChar UCharFile::get() { - UChar c; - switch (fEncoding) { - case UTF16LE: - { - int cL, cH; - cL = fgetc(fFile); - cH = fgetc(fFile); - c = cL | (cH << 8); - if (cH == EOF) { - c = 0; - fEof = TRUE; - } - break; - } - case UTF16BE: - { - int cL, cH; - cH = fgetc(fFile); - cL = fgetc(fFile); - c = cL | (cH << 8); - if (cL == EOF) { - c = 0; - fEof = TRUE; - } - break; - } - case UTF8: - { - if (fPending2ndSurrogate != 0) { - c = fPending2ndSurrogate; - fPending2ndSurrogate = 0; - break; - } - - int ch = fgetc(fFile); // Note: c and ch are separate cause eof test doesn't work on UChar type. - if (ch == EOF) { - c = 0; - fEof = TRUE; - break; - } - - if (ch <= 0x7f) { - // It's ascii. No further utf-8 conversion. - c = ch; - break; - } - - // Figure out the lenght of the char and read the rest of the bytes - // into a temp array. - int nBytes; - if (ch >= 0xF0) {nBytes=4;} - else if (ch >= 0xE0) {nBytes=3;} - else if (ch >= 0xC0) {nBytes=2;} - else { - fprintf(stderr, "utf-8 encoded file contains corrupt data.\n"); - fError = TRUE; - return 0; - } - - unsigned char bytes[10]; - bytes[0] = (unsigned char)ch; - int i; - for (i=1; i= 0xc0) { - fprintf(stderr, "utf-8 encoded file contains corrupt data.\n"); - fError = TRUE; - return 0; - } - } - - // Convert the bytes from the temp array to a Unicode char. - i = 0; - uint32_t cp; - UTF8_NEXT_CHAR_UNSAFE(bytes, i, cp); - c = (UChar)cp; - - if (cp >= 0x10000) { - // The code point needs to be broken up into a utf-16 surrogate pair. - // Process first half this time through the main loop, and - // remember the other half for the next time through. - UChar utf16Buf[3]; - i = 0; - UTF16_APPEND_CHAR_UNSAFE(utf16Buf, i, cp); - fPending2ndSurrogate = utf16Buf[1]; - c = utf16Buf[0]; - } - break; - }; - } - return c; -} - -//---------------------------------------------------------------------------------------- -// -// openRulesCollator - Command line specified a rules file. Read it in -// and open a collator with it. -// -//---------------------------------------------------------------------------------------- -UCollator *openRulesCollator() { - UCharFile f(opt_rules); - if (f.error()) { - return 0; - } - - int bufLen = 10000; - UChar *buf = (UChar *)malloc(bufLen * sizeof(UChar)); - int i = 0; - - for(;;) { - buf[i] = f.get(); - if (f.eof()) { - break; - } - if (f.error()) { - return 0; - } - i++; - if (i >= bufLen) { - bufLen += 10000; - buf = (UChar *)realloc(buf, bufLen); - } - } - buf[i] = 0; - - UErrorCode status = U_ZERO_ERROR; - UCollator *coll = ucol_openRules(buf, u_strlen(buf), UCOL_OFF, - UCOL_DEFAULT_STRENGTH, NULL, &status); - if (U_FAILURE(status)) { - fprintf(stderr, "ICU ucol_openRules() open failed.: %d\n", status); - return 0; - } - free(buf); - return coll; -} - - - - - -//---------------------------------------------------------------------------------------- -// -// Main -- process command line, read in and pre-process the test file, -// call other functions to do the actual tests. -// -//---------------------------------------------------------------------------------------- -int main(int argc, const char** argv) { - if (ProcessOptions(argc, argv, opts) != TRUE || opt_help || opt_fName == 0) { - printf(gUsageString); - exit (1); - } - - // Make sure that we've only got one API selected. - if (opt_unix || opt_win) opt_icu = FALSE; - if (opt_unix) opt_win = FALSE; - - // - // Set up an ICU collator - // - UErrorCode status = U_ZERO_ERROR; - - if (opt_rules != 0) { - gCol = openRulesCollator(); - if (gCol == 0) {return -1;} - } - else { - gCol = ucol_open(opt_locale, &status); - if (U_FAILURE(status)) { - fprintf(stderr, "Collator creation failed.: %d\n", status); - return -1; - } - } - if (status==U_USING_DEFAULT_WARNING && opt_terse==FALSE) { - fprintf(stderr, "Warning, U_USING_DEFAULT_WARNING for %s\n", opt_locale); - } - if (status==U_USING_FALLBACK_WARNING && opt_terse==FALSE) { - fprintf(stderr, "Warning, U_USING_FALLBACK_ERROR for %s\n", opt_locale); - } - - if (opt_norm) { - ucol_setAttribute(gCol, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); - } - if (opt_french && opt_frenchoff) { - fprintf(stderr, "collperf: Error, specified both -french and -frenchoff options."); - exit(-1); - } - if (opt_french) { - ucol_setAttribute(gCol, UCOL_FRENCH_COLLATION, UCOL_ON, &status); - } - if (opt_frenchoff) { - ucol_setAttribute(gCol, UCOL_FRENCH_COLLATION, UCOL_OFF, &status); - } - if (opt_lower) { - ucol_setAttribute(gCol, UCOL_CASE_FIRST, UCOL_LOWER_FIRST, &status); - } - if (opt_upper) { - ucol_setAttribute(gCol, UCOL_CASE_FIRST, UCOL_UPPER_FIRST, &status); - } - if (opt_case) { - ucol_setAttribute(gCol, UCOL_CASE_LEVEL, UCOL_ON, &status); - } - if (opt_shifted) { - ucol_setAttribute(gCol, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status); - } - if (opt_level != 0) { - switch (opt_level) { - case 1: - ucol_setAttribute(gCol, UCOL_STRENGTH, UCOL_PRIMARY, &status); - break; - case 2: - ucol_setAttribute(gCol, UCOL_STRENGTH, UCOL_SECONDARY, &status); - break; - case 3: - ucol_setAttribute(gCol, UCOL_STRENGTH, UCOL_TERTIARY, &status); - break; - case 4: - ucol_setAttribute(gCol, UCOL_STRENGTH, UCOL_QUATERNARY, &status); - break; - case 5: - ucol_setAttribute(gCol, UCOL_STRENGTH, UCOL_IDENTICAL, &status); - break; - default: - fprintf(stderr, "-level param must be between 1 and 5\n"); - exit(-1); - } - } - - if (U_FAILURE(status)) { - fprintf(stderr, "Collator attribute setting failed.: %d\n", status); - return -1; - } - - - // - // Set up a Windows LCID - // - if (opt_langid != 0) { - gWinLCID = MAKELCID(opt_langid, SORT_DEFAULT); - } - else { - gWinLCID = uloc_getLCID(opt_locale); - } - - - // - // Set the UNIX locale - // - if (opt_unix) { - if (setlocale(LC_ALL, opt_locale) == 0) { - fprintf(stderr, "setlocale(LC_ALL, %s) failed.\n", opt_locale); - exit(-1); - } - } - - // Read in the input file. - // File assumed to be utf-16. - // Lines go onto heap buffers. Global index array to line starts is created. - // Lines themselves are null terminated. - // - - UCharFile f(opt_fName); - if (f.error()) { - exit(-1); - } - - const int MAXLINES = 40000; - gFileLines = new Line[MAXLINES]; - UChar buf[1024]; - int column = 0; - - // Read the file, split into lines, and save in memory. - // Loop runs once per utf-16 value from the input file, - // (The number of bytes read from file per loop iteration depends on external encoding.) - for (;;) { - - UChar c = f.get(); - if (f.error()){ - exit(-1); - } - - - // We now have a good UTF-16 value in c. - - // Watch for CR, LF, EOF; these finish off a line. - if (c == 0xd) { - continue; - } - - if (f.eof() || c == 0x0a || c==0x2028) { // Unipad inserts 2028 line separators! - buf[column++] = 0; - if (column > 1) { - gFileLines[gNumFileLines].name = new UChar[column]; - gFileLines[gNumFileLines].len = column-1; - memcpy(gFileLines[gNumFileLines].name, buf, column * sizeof(UChar)); - gNumFileLines++; - column = 0; - if (gNumFileLines >= MAXLINES) { - fprintf(stderr, "File too big. Max number of lines is %d\n", MAXLINES); - exit(-1); - } - - } - if (c == 0xa || c == 0x2028) - continue; - else - break; // EOF - } - buf[column++] = c; - if (column >= 1023) - { - static UBool warnFlag = TRUE; - if (warnFlag) { - fprintf(stderr, "Warning - file line longer than 1023 chars truncated.\n"); - warnFlag = FALSE; - } - column--; - } - } - - if (opt_terse == FALSE) { - printf("file \"%s\", %d lines.\n", opt_fName, gNumFileLines); - } - - - // Convert the lines to the UNIX encoding. - if (opt_unix) { - UnixConvert(); - } - - // - // Pre-compute ICU sort keys for the lines of the file. - // - int line; - int t; - - for (line=0; line sizeof(buf)) { - t = ucol_getSortKey(gCol, gFileLines[line].name, -1, (unsigned char *)gFileLines[line].icuSortKey , t); - } - else - { - memcpy(gFileLines[line].icuSortKey, buf, t); - } - } - - - - // - // Pre-compute Windows sort keys for the lines of the file. - // - for (line=0; line sizeof(buf)) { - t = LCMapStringW(gWinLCID, LCMAP_SORTKEY, gFileLines[line].name, -1, (unsigned short *)(gFileLines[line].winSortKey), t); - } - else - { - memcpy(gFileLines[line].winSortKey, buf, t); - } - } - - // - // Pre-compute UNIX sort keys for the lines of the file. - // - if (opt_unix) { - for (line=0; line sizeof(buf)) { - t = strxfrm(gFileLines[line].unixSortKey, gFileLines[line].unixName, sizeof(buf)); - } - else - { - memcpy(gFileLines[line].unixSortKey, buf, t); - } - } - } - - - // - // Dump file lines, CEs, Sort Keys if requested. - // - if (opt_dump) { - int i; - for (line=0; line 0x7e) { - printf("\\u%.4x", c); - } - else { - printf("%c", c); - } - } - printf("\n"); - - printf(" CEs: "); - UCollationElements *CEiter = ucol_openElements(gCol, gFileLines[line].name, -1, &status); - int32_t ce; - i = 0; - for (;;) { - ce = ucol_next(CEiter, &status); - if (ce == UCOL_NULLORDER) { - break; - } - printf(" %.8x", ce); - if (++i > 8) { - printf("\n "); - i = 0; - } - } - printf("\n"); - ucol_closeElements(CEiter); - - - printf(" ICU Sort Key: "); - for (i=0; ; i++) { - unsigned char c = gFileLines[line].icuSortKey[i]; - printf("%02x ", c); - if (c == 0) { - break; - } - if (i > 0 && i % 20 == 0) { - printf("\n "); - } - } - printf("\n"); - } - } - - - // - // Pre-sort the lines. - // - int i; - gSortedLines = new Line *[gNumFileLines]; - for (i=0; i -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=collperf - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "collperf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "collperf.mak" CFG="collperf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "collperf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "collperf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "collperf - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "collperf - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "collperf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /Ob2 /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib ctestfw.lib icutu.lib kernel32.lib user32.lib advapi32.lib shell32.lib winmm.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib\\" - -!ELSEIF "$(CFG)" == "collperf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icutud.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib\\" - -!ELSEIF "$(CFG)" == "collperf - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /Op /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icuin.lib ctestfw.lib icutu.lib kernel32.lib user32.lib advapi32.lib shell32.lib winmm.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib\\" /machine:IA64 - -!ELSEIF "$(CFG)" == "collperf - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /Op /I "..\..\..\include" /I "..\..\tools\ctestfw" /I "..\..\common" /I "..\..\i18n" /I "..\..\tools\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icuind.lib icutud.lib winmm.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib\\" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "collperf - Win32 Release" -# Name "collperf - Win32 Debug" -# Name "collperf - Win64 Release" -# Name "collperf - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\collperf.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/collperf/readme.html b/icuSources/test/collperf/readme.html deleted file mode 100644 index 40940d10..00000000 --- a/icuSources/test/collperf/readme.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - collperf - - - - -

    collperf

    -

    collperf is a test program for comparing collation performance and key lengths of ICU, Windows native collation -and Unix/POSIX collation. It operates on a file of lines (names, for example), and performs one of three tests:

    - -
      -
    1. Sort Key generation. Report on key lengths and key generation times. -
    2. Binary search. Report the average time required to look up each of the names (file lines) from the file in - a sorted list of all of the names. -
    3. Quick Sort. Report the time required to sort the file in memory, using the C library qsort function. The file - order is randomized prior to the sort. -
    - -

    -

    Usage Summary

    - -
    -

    - - - - -
    -

    collperf -help -

    -
    Usage: strperf options...
    --help                  Display this message.
    --file file_name        utf-16 format file of names
    --locale name           ICU locale to use. Default is en_US
    --langid 0x1234         Windows Language ID number. Default 0x409 (en_US)
    -                       see http://msdn.microsoft.com/library/psdk/winbase/nls_8xo3.htm
    --win                   Run test using Windows native services. (ICU is default)
    --unix                  Run test using Unix strxfrm, strcoll services.
    --uselen                Use API with string lengths. Default is null-terminated strings
    --usekeys               Run tests using sortkeys rather than strcoll
    --loop nnnn             Loopcount for test. Adjust for reasonable total running time.
    --terse                 Terse numbers-only output. Intended for use by scripts.
    --french                French accent ordering
    --norm                  Normalizing mode on
    --shifted               Shifted mode
    --lower                 Lower case first
    --upper                 Upper case first
    --case                  Enable separate case level
    --level n               Sort level, 1 to 5, for Primary, Secndary, Tertiary, Quaternary, Identical
    --binsearch             Binary Search timing test
    --keygen                Sort Key Generation timing test
    --qsort                 Quicksort timing test
    -
    -
    -

    -
    - -

    Example

    - -
    -

    - - - - -
    C:\>collperf -loop 200 -file latin.txt -keygen -shifted -level 4
    - file "latin.txt", 7604 lines.
    - Sort Key Generation: total # of keys = 197704
    - Sort Key Generation: time per key = 4253 ns
    - Key Length / character = 1.730054
    - -

    - -

    - - - - \ No newline at end of file diff --git a/icuSources/test/hdrtst/Makefile.in b/icuSources/test/hdrtst/Makefile.in index 0594d169..ff8d964b 100644 --- a/icuSources/test/hdrtst/Makefile.in +++ b/icuSources/test/hdrtst/Makefile.in @@ -1,5 +1,5 @@ ## -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## ## @@ -33,7 +33,7 @@ all: @echo Please read this Makefile for more information. @echo run \'$(MAKE) check\' to run the test -check: dtest ctest cpptest lotest doclean +check: dtest ctest cpptest lotest doclean drafttest deprtest internaltest obsoletetest @echo "All header tests have finished. If deprecation #errors appeared, " @echo " add files to hdrtst/dfiles.txt" @echo "#################################################################" @@ -108,10 +108,81 @@ ctest: RES=$$? ; \ echo $$RES ; \ done + +drafttest: + @echo "U_HIDE_DRAFT_API Test #######################################################" + @rm -f Makefile.sub + @echo Building test harness for header files in ../../common and ../../i18n + @echo 'the number after the hyphen (-) refers to the exit code - should be zero!' + @for file in `ls $(prefix)/include/unicode/*.h | fgrep -v -f $(srcdir)/pfiles.txt`; do \ + incfile=`basename $$file .h` ; \ + echo -n " unicode/$$incfile.h - " ; \ + echo '#define U_HIDE_DRAFT_API' > hd_$$incfile.c; \ + echo '#include "'unicode/$$incfile'.h"' >> ht_$$incfile.c ; \ + echo 'void junk(void);' >> hd_$$incfile.c ; \ + echo 'void junk(){}' >> hd_$$incfile.c ; \ + $(COMPILE.cc) -c $(cppflags) hd_$$incfile.c ; \ + RES=$$? ; \ + echo $$RES ; \ + done + +deprtest: + @echo "U_HIDE_DEPRECATED_API Test #######################################################" + @rm -f Makefile.sub + @echo Building test harness for header files in ../../common and ../../i18n + @echo 'the number after the hyphen (-) refers to the exit code - should be zero!' + @for file in `ls $(prefix)/include/unicode/*.h | fgrep -v -f $(srcdir)/pfiles.txt`; do \ + incfile=`basename $$file .h` ; \ + echo -n " unicode/$$incfile.h - " ; \ + echo '#define U_HIDE_DEPRECATED_API' > hdp_$$incfile.c; \ + echo '#include "'unicode/$$incfile'.h"' >> hdp_$$incfile.c ; \ + echo 'void junk(void);' >> hdp_$$incfile.c ; \ + echo 'void junk(){}' >> hdp_$$incfile.c ; \ + $(COMPILE.cc) -c $(cppflags) hdp_$$incfile.c ; \ + RES=$$? ; \ + echo $$RES ; \ + done +internaltest: + @echo "U_HIDE_INTERNAL_API Test #######################################################" + @rm -f Makefile.sub + @echo Building test harness for header files in ../../common and ../../i18n + @echo 'the number after the hyphen (-) refers to the exit code - should be zero!' + @for file in `ls $(prefix)/include/unicode/*.h | fgrep -v -f $(srcdir)/pfiles.txt`; do \ + incfile=`basename $$file .h` ; \ + echo -n " unicode/$$incfile.h - " ; \ + echo '#define U_HIDE_INTERNAL_API' > hin_$$incfile.c; \ + echo '#include "'unicode/$$incfile'.h"' >> hin_$$incfile.c ; \ + echo 'void junk(void);' >> hin_$$incfile.c ; \ + echo 'void junk(){}' >> hin_$$incfile.c ; \ + $(COMPILE.cc) -c $(cppflags) hin_$$incfile.c ; \ + RES=$$? ; \ + echo $$RES ; \ + done + +obsoletetest: + @echo "U_HIDE_OBSOLETE_API Test #######################################################" + @rm -f Makefile.sub + @echo Building test harness for header files in ../../common and ../../i18n + @echo 'the number after the hyphen (-) refers to the exit code - should be zero!' + @for file in `ls $(prefix)/include/unicode/*.h | fgrep -v -f $(srcdir)/pfiles.txt`; do \ + incfile=`basename $$file .h` ; \ + echo -n " unicode/$$incfile.h - " ; \ + echo '#define U_HIDE_OBSOLETE_API' > hob_$$incfile.c; \ + echo '#include "'unicode/$$incfile'.h"' >> hob_$$incfile.c ; \ + echo 'void junk(void);' >> hob_$$incfile.c ; \ + echo 'void junk(){}' >> hob_$$incfile.c ; \ + $(COMPILE.cc) -c $(cppflags) hob_$$incfile.c ; \ + RES=$$? ; \ + echo $$RES ; \ + done + clean: -@rm -f *.h *.c *.cpp *.o *.junk distclean: clean -@rm -f Makefile + +.PHONY: doclean check all cpptest lotest dtest ctest clean distclean + diff --git a/icuSources/test/intltest/Makefile.in b/icuSources/test/intltest/Makefile.in index 40f10cce..990a7c67 100644 --- a/icuSources/test/intltest/Makefile.in +++ b/icuSources/test/intltest/Makefile.in @@ -1,6 +1,10 @@ +#****************************************************************************** +# +# Copyright (C) 1999-2006, International Business Machines +# Corporation and others. All Rights Reserved. +# +#****************************************************************************** ## Makefile.in for ICU - test/intltest -## Copyright (c) 1999-2004, International Business Machines Corporation and -## others. All Rights Reserved. ## Source directory information srcdir = @srcdir@ @@ -8,6 +12,7 @@ top_srcdir = @top_srcdir@ top_builddir = ../.. +## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk ## Build directory information @@ -20,20 +25,28 @@ CLEANFILES = *~ $(DEPS) TARGET = intltest$(EXEEXT) BUILDDIR := $(CURR_SRCCODE_FULL_DIR)/../../ +# Simplify the path for Unix BUILDDIR := $(BUILDDIR:test/intltest/../../=) -BUILDDIR := $(BUILDDIR:test\\\\intltest/../../=) +# Simplify the path for Windows +BUILDDIR := $(BUILDDIR:test\\intltest/../../=) +# Simplify the path for Windows 98 +BUILDDIR := $(BUILDDIR:TEST\\INTLTEST/../../=) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"' LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) -OBJECTS = allcoll.o apicoll.o astrotst.o callimts.o calregts.o caltest.o \ -caltztst.o canittst.o citrtest.o cntabcol.o convtest.o currcoll.o dacoll.o \ +OBJECTS = aliastst.o allcoll.o apicoll.o astrotst.o callimts.o calregts.o caltest.o \ +caltztst.o canittst.o citrtest.o cntabcol.o convtest.o currcoll.o \ dadrcoll.o dcfmapts.o decoll.o dtfmapts.o dtfmrgts.o dtfmtrtts.o dtfmttst.o \ encoll.o escoll.o ficoll.o frcoll.o g7coll.o intltest.o \ itercoll.o itformat.o itmajor.o itutil.o jacoll.o lcukocol.o \ loctest.o miscdtfm.o mnkytst.o msfmrgts.o nmfmapts.o nmfmtrt.o \ -numfmtst.o numrgts.o pptest.o regcoll.o restest.o restsnew.o sdtfmtts.o svccoll.o tchcfmt.o \ +numfmtst.o numrgts.o pptest.o regcoll.o restest.o restsnew.o rndmcoll.o \ +sdtfmtts.o svccoll.o tchcfmt.o \ tfsmalls.o tmsgfmt.o trcoll.o tscoll.o tsdate.o tsdcfmsy.o tsdtfmsy.o \ tsmthred.o tsnmfmt.o tsputil.o tstnrapi.o tstnorm.o tzbdtest.o \ tzregts.o tztest.o ucdtest.o usettest.o ustrtest.o strcase.o transtst.o strtest.o thcoll.o \ @@ -41,14 +54,17 @@ itrbbi.o rbbiapts.o rbbitst.o ittrans.o transapi.o cpdtrtst.o \ testutil.o transrt.o trnserr.o normconf.o sfwdchit.o \ jamotest.o srchtest.o reptest.o regextst.o \ itrbnf.o itrbnfrt.o itrbnfp.o ucaconf.o icusvtst.o \ -uobjtest.o idnaref.o nptrans.o punyref.o testidn.o testidna.o incaltst.o \ -calcasts.o v32test.o textfile.o tokiter.o +uobjtest.o idnaref.o idnaconf.o nptrans.o punyref.o testidn.o testidna.o incaltst.o \ +calcasts.o v32test.o uvectest.o textfile.o tokiter.o utxttest.o wbnf.o \ +windttst.o winnmtst.o winutil.o csdetest.o DEPS = $(OBJECTS:.o=.d) +-include Makefile.local + ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ +.PHONY : all all-local install install-local clean clean-local \ distclean distclean-local dist dist-local check check-local ## Clear suffix list @@ -75,8 +91,6 @@ clean-local: distclean-local: clean-local $(RMV) Makefile --include Makefile.local - check-local: all-local $(INVOKE) ./$(TARGET) $(INTLTEST_OPTS) || true diff --git a/icuSources/test/intltest/aliastst.cpp b/icuSources/test/intltest/aliastst.cpp new file mode 100644 index 00000000..3abb2959 --- /dev/null +++ b/icuSources/test/intltest/aliastst.cpp @@ -0,0 +1,287 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ + +#include "aliastst.h" +#include "unicode/calendar.h" +#include "unicode/smpdtfmt.h" +#include "unicode/datefmt.h" +#include "unicode/unistr.h" +#include "unicode/coll.h" +#include "unicode/resbund.h" +#include +#include +#include + +const char* _LOCALE_ALIAS[][2] = { + {"in", "id"}, + {"in_ID", "id_ID"}, + {"iw", "he"}, + {"iw_IL", "he_IL"}, + {"ji", "yi"}, + {"en_BU", "en_MM"}, + {"en_DY", "en_BJ"}, + {"en_HV", "en_BF"}, + {"en_NH", "en_VU"}, + {"en_RH", "en_ZW"}, + {"en_TP", "en_TL"}, + {"en_ZR", "en_CD"} +}; + +const int _LOCALE_NUMBER = 12; + +void LocaleAliasTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ){ + switch (index) { + TESTCASE(0, TestCalendar); + TESTCASE(1, TestDateFormat); + TESTCASE(2, TestCollation); + TESTCASE(3, TestULocale); + TESTCASE(4, TestUResourceBundle); + TESTCASE(5, TestDisplayName); + // keep the last index in sync with the condition in default: + + default: + if (index <= 5) { // keep this in sync with the last index! + name = "(test omitted by !UCONFIG_NO_FORMATTING)"; + } else { + name = ""; + } + break; //needed to end loop + } +} + +void LocaleAliasTest::TestCalendar() { +#if !UCONFIG_NO_FORMATTING + UErrorCode status = U_ZERO_ERROR; + for (int i=0; i<_LOCALE_NUMBER; i++) { + Locale oldLoc(_LOCALE_ALIAS[i][0]); + Locale newLoc(_LOCALE_ALIAS[i][1]); + if(!isLocaleAvailable(_LOCALE_ALIAS[i][1])){ + logln(UnicodeString(newLoc.getName())+" is not available. Skipping!"); + continue; + } + logln("\nold locale:%s new locale:%s",oldLoc.getName(),newLoc.getName()); + Calendar* c1 = Calendar::createInstance(oldLoc, status); + Calendar* c2 = Calendar::createInstance(newLoc, status); + + //Test function "getLocale(ULocale.VALID_LOCALE)" + const char* l1 = c1->getLocaleID(ULOC_VALID_LOCALE, status); + const char* l2 = c2->getLocaleID(ULOC_VALID_LOCALE, status); + if (strcmp(newLoc.getName(), l1)!=0) { + errln("CalendarTest: newLoc!=l1: newLoc= "+UnicodeString(newLoc.getName()) +" l1= "+UnicodeString(l1)); + } + if (strcmp(l1, l2)!=0) { + errln("CalendarTest: l1!=l2: l1= "+UnicodeString(l1) +" l2= "+UnicodeString(l2)); + } + if(!(c1==c2)){ + errln("CalendarTest: c1!=c2. newLoc= "+UnicodeString(newLoc.getName()) +" oldLoc= "+UnicodeString(oldLoc.getName())); + } + logln("Calendar(getLocale) old:"+UnicodeString(l1)+" new:"+UnicodeString(l2)); + delete c1; + delete c2; + } +#endif +} +void LocaleAliasTest::TestDateFormat() { +#if !UCONFIG_NO_FORMATTING + UErrorCode status = U_ZERO_ERROR; + for (int i=0; i<_LOCALE_NUMBER; i++) { + Locale oldLoc(_LOCALE_ALIAS[i][0]); + Locale newLoc(_LOCALE_ALIAS[i][1]); + if(!isLocaleAvailable(_LOCALE_ALIAS[i][1])){ + logln(UnicodeString(newLoc.getName())+" is not available. Skipping!"); + continue; + } + logln("\nold locale:%s new locale:%s",oldLoc.getName(),newLoc.getName()); + + DateFormat* df1 = DateFormat::createDateInstance(DateFormat::FULL, oldLoc); + DateFormat* df2 = DateFormat::createDateInstance(DateFormat::FULL, newLoc); + + //Test function "getLocale" + const char* l1 = df1->getLocaleID(ULOC_VALID_LOCALE, status); + const char* l2 = df2->getLocaleID(ULOC_VALID_LOCALE, status); + if (strcmp(newLoc.getName(), l1)!=0) { + errln("CalendarTest: newLoc!=l1: newLoc= "+UnicodeString(newLoc.getName()) +" l1= "+UnicodeString(l1)); + } + if (strcmp(l1, l2)!=0) { + errln("TestDateFormat: l1!=l2: l1= "+UnicodeString(l1) +" l2= "+UnicodeString(l2)); + } + if(!(df1==df2)){ + errln("TestDateFormat: c1!=c2. newLoc= "+UnicodeString(newLoc.getName()) +" oldLoc= "+UnicodeString(oldLoc.getName())); + } + logln("DateFormat(getLocale) old:%s new:%s",l1,l2); + + delete df1; + delete df2; + } +#endif +} +void LocaleAliasTest::TestCollation() { +#if !UCONFIG_NO_COLLATION + UErrorCode status = U_ZERO_ERROR; + for (int i=0; i<_LOCALE_NUMBER; i++) { + Locale oldLoc(_LOCALE_ALIAS[i][0]); + Locale newLoc(_LOCALE_ALIAS[i][1]); + if(!isLocaleAvailable(_LOCALE_ALIAS[i][1])){ + logln(UnicodeString(newLoc.getName())+" is not available. Skipping!"); + continue; + } + logln("\nold locale:%s new locale:%s",oldLoc.getName(),newLoc.getName()); + + Collator* c1 = Collator::createInstance(oldLoc, status); + Collator* c2 = Collator::createInstance(newLoc, status); + + Locale l1 = c1->getLocale(ULOC_VALID_LOCALE, status); + Locale l2 = c2->getLocale(ULOC_VALID_LOCALE, status); + + if (strcmp(newLoc.getName(), l1.getName())!=0) { + errln("CalendarTest: newLoc!=l1: newLoc= "+UnicodeString(newLoc.getName()) +" l1= "+UnicodeString(l1.getName())); + } + if (strcmp(l1.getName(), l2.getName())!=0) { + errln("CollationTest: l1!=l2: l1= "+UnicodeString(l1.getName()) +" l2= "+UnicodeString(l2.getName())); + } + if(!(c1==c2)){ + errln("CollationTest: c1!=c2. newLoc= "+UnicodeString(newLoc.getName()) +" oldLoc= "+UnicodeString(oldLoc.getName())); + } + logln("Collator(getLocale) old:%s new:%s", l1.getName(), l2.getName()); + delete c1; + delete c2; + } +#endif +} +void LocaleAliasTest::TestULocale() { + for (int i=0; i<_LOCALE_NUMBER; i++) { + Locale oldLoc(_LOCALE_ALIAS[i][0]); + Locale newLoc(_LOCALE_ALIAS[i][1]); + if(!isLocaleAvailable(_LOCALE_ALIAS[i][1])){ + logln(UnicodeString(newLoc.getName())+" is not available. Skipping!"); + continue; + } + logln("\nold locale:%s new locale:%s",oldLoc.getName(),newLoc.getName()); + + UnicodeString name1, name2; + oldLoc.getDisplayName(name1); + newLoc.getDisplayName(name2); + if (name1!=name2) { + errln("DisplayNames are not equal. newLoc= "+UnicodeString(newLoc.getName()) +" oldLoc= "+UnicodeString(oldLoc.getName())); + } + log("ULocale(getDisplayName) old:"); + log(name1); + log(" new:"); + logln(name2); + } +} +LocaleAliasTest::LocaleAliasTest(){ + UErrorCode status = U_ZERO_ERROR; + resIndex = ures_open(NULL,"res_index", &status); + if(U_FAILURE(status)){ + errln("Could not open res_index.res. Exiting. Error: %s\n", u_errorName(status)); + resIndex=NULL; + } + defLocale = Locale::getDefault(); + Locale::setDefault(Locale::getUS(), status); +} +LocaleAliasTest::~LocaleAliasTest(){ + /* reset the default locale */ + UErrorCode status = U_ZERO_ERROR; + Locale::setDefault(defLocale, status); + ures_close(resIndex); + if(U_FAILURE(status)){ + errln("Could not reset the default locale. Exiting. Error: %s\n", u_errorName(status)); + } +} +UBool LocaleAliasTest::isLocaleAvailable(const char* loc){ + if(resIndex==NULL){ + return FALSE; + } + UErrorCode status = U_ZERO_ERROR; + int32_t len = 0; + ures_getStringByKey(resIndex, loc,&len, &status); + if(U_FAILURE(status)){ + return FALSE; + } + return TRUE; +} +void LocaleAliasTest::TestDisplayName() { + int32_t availableNum =0; + const Locale* available = Locale::getAvailableLocales(availableNum); + for (int i=0; i<_LOCALE_NUMBER; i++) { + Locale oldLoc(_LOCALE_ALIAS[i][0]); + Locale newLoc(_LOCALE_ALIAS[i][1]); + if(!isLocaleAvailable(_LOCALE_ALIAS[i][1])){ + logln(UnicodeString(newLoc.getName())+" is not available. Skipping!"); + continue; + } + for(int j=0; jgetStringEx("locale", status); + } + rb2 = new ResourceBundle(testdatapath, newLoc, status); + if (U_FAILURE(U_ZERO_ERROR)){ + + } else { + us2 = rb2->getStringEx("locale", status); + } + UnicodeString uNewLoc(newLoc.getName()); + if (us1.compare(uNewLoc)!=0 || us1.compare(us2)!=0 || status!=U_ZERO_ERROR) { + + } + log("UResourceBundle(getStringEx) old:"); + log(us1); + log(" new:"); + logln(us2); + + if (rb1!=NULL) { + delete rb1; + } + if (rb2!=NULL) { + delete rb2; + } + } + +} diff --git a/icuSources/test/intltest/aliastst.h b/icuSources/test/intltest/aliastst.h new file mode 100644 index 00000000..e9a0db46 --- /dev/null +++ b/icuSources/test/intltest/aliastst.h @@ -0,0 +1,30 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ +#ifndef _ALIASTST +#define _ALIASTST + +#include "intltest.h" +#include "unicode/locid.h" +#include "unicode/ures.h" + +class LocaleAliasTest: public IntlTest { +public: + void TestCalendar(); + void TestDateFormat(); + void TestCollation(); + void TestULocale(); + void TestUResourceBundle(); + void TestDisplayName(); + void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); + LocaleAliasTest(); + virtual ~LocaleAliasTest(); +private: + UResourceBundle* resIndex; + UBool isLocaleAvailable(const char*); + Locale defLocale; +}; + +#endif diff --git a/icuSources/test/intltest/apicoll.cpp b/icuSources/test/intltest/apicoll.cpp index ceae01a0..ff8404f8 100644 --- a/icuSources/test/intltest/apicoll.cpp +++ b/icuSources/test/intltest/apicoll.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ //=============================================================================== @@ -39,9 +39,11 @@ #include "unicode/chariter.h" #include "unicode/schriter.h" #include "unicode/ustring.h" +#include "unicode/ucol.h" #include "sfwdchit.h" #include "cmemory.h" +#include void CollationAPITest::doAssert(UBool condition, const char *message) @@ -99,8 +101,10 @@ CollationAPITest::TestProperty(/* char* par */) ICU 2.2 currVersionArray = {0x21, 0x40, 0x04, 0x04}; ICU 2.4 currVersionArray = {0x21, 0x40, 0x04, 0x04}; ICU 2.6 currVersionArray = {0x21, 0x40, 0x03, 0x03}; + ICU 2.8 currVersionArray = {0x29, 0x80, 0x00, 0x04}; + ICU 3.4 currVersionArray = {0x31, 0xC0, 0x00, 0x04}; */ - UVersionInfo currVersionArray = {0x29, 0x80, 0x00, 0x04}; + UVersionInfo currVersionArray = {0x31, 0xC0, 0x00, 0x05}; UVersionInfo versionArray; int i = 0; @@ -910,12 +914,43 @@ CollationAPITest::TestDuplicate(/* char* par */) } Collator *col2 = col1->clone(); doAssert((*col1 == *col2), "Cloned object is not equal to the orginal"); - UnicodeString ruleset("< a, A < b, B < c, C < d, D, e, E"); - RuleBasedCollator *col3 = new RuleBasedCollator(ruleset, status); + UnicodeString *ruleset = new UnicodeString("< a, A < b, B < c, C < d, D, e, E"); + RuleBasedCollator *col3 = new RuleBasedCollator(*ruleset, status); doAssert((*col1 != *col3), "Cloned object is equal to some dummy"); *col3 = *((RuleBasedCollator*)col1); doAssert((*col1 == *col3), "Copied object is not equal to the orginal"); + + if (U_FAILURE(status)) { + logln("Collation tailoring failed."); + return; + } + + UCollationResult res; + UnicodeString first((UChar)0x0061); + UnicodeString second((UChar)0x0062); + UnicodeString copiedEnglishRules(((RuleBasedCollator*)col1)->getRules()); + delete col1; + delete ruleset; + + // Try using the cloned collators after deleting the original data + res = col2->compare(first, second, status); + if(res != UCOL_LESS) { + errln("a should be less then b after tailoring"); + } + if (((RuleBasedCollator*)col2)->getRules() != copiedEnglishRules) { + errln(UnicodeString("English rule difference. ") + + copiedEnglishRules + UnicodeString("\ngetRules=") + ((RuleBasedCollator*)col2)->getRules()); + } + res = col3->compare(first, second, status); + if(res != UCOL_LESS) { + errln("a should be less then b after tailoring"); + } + if (col3->getRules() != copiedEnglishRules) { + errln(UnicodeString("English rule difference. ") + + copiedEnglishRules + UnicodeString("\ngetRules=") + col3->getRules()); + } + delete col2; delete col3; } @@ -1017,11 +1052,23 @@ void CollationAPITest::TestSortKey() col->setAttribute(UCOL_STRENGTH, UCOL_IDENTICAL, status); uint8_t key2compat[] = { - /* 2.6.1 key */ + /* 3.6 key, from UCA 5.0 */ + 0x29, 0x2b, 0x2d, 0x2f, 0x29, 0x01, + 0x09, 0x01, 0x09, 0x01, 0x28, 0x01, + 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 + + /* 3.4 key, from UCA 4.1 */ + /* + 0x28, 0x2a, 0x2c, 0x2e, 0x28, 0x01, + 0x09, 0x01, 0x09, 0x01, 0x27, 0x01, + 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 + */ + /* 2.6.1 key */ + /* 0x26, 0x28, 0x2A, 0x2C, 0x26, 0x01, 0x09, 0x01, 0x09, 0x01, 0x25, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00 - + */ /* 2.2 key */ /* 0x1D, 0x1F, 0x21, 0x23, 0x1D, 0x01, @@ -2136,6 +2183,56 @@ void CollationAPITest::TestNULLCharTailoring() delete coll; } +void CollationAPITest::TestClone() { + logln("\ninit c0"); + UErrorCode status = U_ZERO_ERROR; + RuleBasedCollator* c0 = (RuleBasedCollator*)Collator::createInstance(status); + c0->setStrength(Collator::TERTIARY); + dump("c0", c0, status); + + logln("\ninit c1"); + RuleBasedCollator* c1 = (RuleBasedCollator*)Collator::createInstance(status); + c1->setStrength(Collator::TERTIARY); + UColAttributeValue val = c1->getAttribute(UCOL_CASE_FIRST, status); + if(val == UCOL_LOWER_FIRST){ + c1->setAttribute(UCOL_CASE_FIRST, UCOL_UPPER_FIRST, status); + }else{ + c1->setAttribute(UCOL_CASE_FIRST, UCOL_LOWER_FIRST, status); + } + dump("c0", c0, status); + dump("c1", c1, status); + + logln("\ninit c2"); + RuleBasedCollator* c2 = (RuleBasedCollator*)c1->clone(); + val = c2->getAttribute(UCOL_CASE_FIRST, status); + if(val == UCOL_LOWER_FIRST){ + c2->setAttribute(UCOL_CASE_FIRST, UCOL_UPPER_FIRST, status); + }else{ + c2->setAttribute(UCOL_CASE_FIRST, UCOL_LOWER_FIRST, status); + } + if(U_FAILURE(status)){ + errln("set and get attributes of collator failed. %s\n", u_errorName(status)); + return; + } + dump("c0", c0, status); + dump("c1", c1, status); + dump("c2", c2, status); + if(*c1 == *c2){ + errln("The cloned objects refer to same data"); + } + delete c0; + delete c1; + delete c2; +} + + void CollationAPITest::dump(UnicodeString msg, RuleBasedCollator* c, UErrorCode& status) { + const char* bigone = "One"; + const char* littleone = "one"; + + logln(msg + " " + c->compare(bigone, littleone) + + " s: " + c->getStrength() + + " u: " + c->getAttribute(UCOL_CASE_FIRST, status)); +} void CollationAPITest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par */) { if (exec) logln("TestSuite CollationAPITest: "); @@ -2163,6 +2260,7 @@ void CollationAPITest::runIndexedTest( int32_t index, UBool exec, const char* &n case 20: name = "TestUClassID"; if (exec) TestUClassID(); break; case 21: name = "TestSubclass"; if (exec) TestSubclass(); break; case 22: name = "TestNULLCharTailoring"; if (exec) TestNULLCharTailoring(); break; + case 23: name = "TestClone"; if (exec) TestClone(); break; default: name = ""; break; } } diff --git a/icuSources/test/intltest/apicoll.h b/icuSources/test/intltest/apicoll.h index d08400c1..f3a4d2a7 100644 --- a/icuSources/test/intltest/apicoll.h +++ b/icuSources/test/intltest/apicoll.h @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -164,11 +164,14 @@ public: */ void TestNULLCharTailoring(); + void TestClone(); private: // If this is too small for the test data, just increase it. // Just don't make it too large, otherwise the executable will get too big enum EToken_Len { MAX_TOKEN_LEN = 16 }; + void dump(UnicodeString msg, RuleBasedCollator* c, UErrorCode& status); + }; #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/intltest/astrotst.cpp b/icuSources/test/intltest/astrotst.cpp index 0a40f540..ba7b5711 100644 --- a/icuSources/test/intltest/astrotst.cpp +++ b/icuSources/test/intltest/astrotst.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1996-2004, International Business Machines Corporation and + * Copyright (c) 1996-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -277,6 +277,10 @@ void AstroTest::TestSunriseTimes(void) { DateFormat *df_t = DateFormat::createTimeInstance(DateFormat::MEDIUM,Locale::getUS()); DateFormat *df_d = DateFormat::createDateInstance(DateFormat::MEDIUM,Locale::getUS()); DateFormat *df_dt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::MEDIUM, Locale::getUS()); + if(!df_t || !df_d || !df_dt) { + errln("couldn't create dateformats."); + return; + } df_t->adoptTimeZone(tz->clone()); df_d->adoptTimeZone(tz->clone()); df_dt->adoptTimeZone(tz->clone()); diff --git a/icuSources/test/intltest/calcasts.cpp b/icuSources/test/intltest/calcasts.cpp index ff99fa0a..17b9caea 100644 --- a/icuSources/test/intltest/calcasts.cpp +++ b/icuSources/test/intltest/calcasts.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2003-2004, International Business Machines Corporation + * Copyright (c) 2003-2005, International Business Machines Corporation * and others. All Rights Reserved. ******************************************************************** * Calendar Case Test is a type of CalendarTest which compares the @@ -168,6 +168,13 @@ void CalendarCaseTest::IslamicCivil() }; UnicodeString result; DateFormat *fmt = DateFormat::createDateInstance(DateFormat::kFull, Locale("ar_JO@calendar=islamic-civil")); + if (fmt == NULL) { + dataerrln("Error calling DateFormat::createDateInstance"); + delete c; + delete fmt; + return; + } + fmt->setTimeZone(*TimeZone::getGMT()); fmt->format((UDate)2486076.5, result); if (result != expectedUChars) { diff --git a/icuSources/test/intltest/callimts.cpp b/icuSources/test/intltest/callimts.cpp index a0e9333f..40ad122b 100644 --- a/icuSources/test/intltest/callimts.cpp +++ b/icuSources/test/intltest/callimts.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -91,6 +91,10 @@ CalendarLimitTest::TestCalendarLimit() if (failure(status, "Calendar::createInstance")) return; cal->adoptTimeZone(TimeZone::createTimeZone("GMT")); DateFormat *fmt = DateFormat::createDateTimeInstance(); + if(!fmt || !cal) { + dataerrln("can't open cal and/or fmt"); + return; + } fmt->adoptCalendar(cal); ((SimpleDateFormat*) fmt)->applyPattern("HH:mm:ss.SSS zzz, EEEE, MMMM d, yyyy G"); diff --git a/icuSources/test/intltest/calregts.cpp b/icuSources/test/intltest/calregts.cpp index 3b2a98c2..14595641 100644 --- a/icuSources/test/intltest/calregts.cpp +++ b/icuSources/test/intltest/calregts.cpp @@ -1,7 +1,7 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and - * others. All Rights Reserved. + * Copyright (c) 1997-2006, International Business Machines Corporation + * and others. All Rights Reserved. ********************************************************************/ #include "unicode/utypes.h" @@ -215,6 +215,16 @@ CalendarRegressionTest::test4031502() UErrorCode status = U_ZERO_ERROR; StringEnumeration* ids = TimeZone::createEnumeration(); UBool bad = FALSE; + TimeZone* tz =TimeZone::createTimeZone("Asia/Riyadh87"); + failure(status, "new TimeZone"); + GregorianCalendar *cl = new GregorianCalendar(tz, status); + failure(status, "new GregorianCalendar"); + cl->clear(); + cl->set(1900, 15, 5, 5, 8, 13); + cl->get(UCAL_HOUR, status); + failure(status, "cl->get(UCAL_HOUR, status)"); + status = U_ZERO_ERROR; + delete cl; for (int32_t i=0; icount(status); ++i) { TimeZone *zone = TimeZone::createTimeZone(*ids->snext(status)); GregorianCalendar *cal = new GregorianCalendar(zone, status); @@ -539,6 +549,9 @@ void CalendarRegressionTest::dowTest(UBool lenient) errln("FAIL: actual minimum differs from minimum"); } if(cal->getActualMinimum(Calendar::DAY_OF_WEEK, status) != min) { + errln("FAIL: actual minimum (Calendar::DAY_OF_WEEK, status) differs from minimum"); + } + if(cal->getActualMinimum(Calendar::DAY_OF_WEEK) != min) { errln("FAIL: actual minimum (Calendar::DAY_OF_WEEK) differs from minimum"); } if(((Calendar*)cal)->getActualMinimum(UCAL_DAY_OF_WEEK, status) != min) { @@ -1352,6 +1365,7 @@ void CalendarRegressionTest::test4125881() return; } DateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"),status); + if(!assertSuccess("trying to construct", status))return; cal->clear(); for (int32_t y=-20; y<=10; ++y) { cal->set(UCAL_ERA, y < 1 ? GregorianCalendar::BC : GregorianCalendar::AD); @@ -1381,6 +1395,7 @@ void CalendarRegressionTest::test4125892() { return; } DateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"),status); + if(!assertSuccess("trying to construct", status))return; cal->clear(); cal->set(UCAL_ERA, GregorianCalendar::BC); cal->set(UCAL_YEAR, 81); // 81 BC is a leap year (proleptically) @@ -1946,7 +1961,7 @@ void CalendarRegressionTest::TestJ81() { UErrorCode status = U_ZERO_ERROR; UnicodeString temp, temp2, temp3; int32_t i; - GregorianCalendar cal(TimeZone::createTimeZone("GMT"), status); + GregorianCalendar cal(TimeZone::createTimeZone("GMT"), Locale::getUS(), status); SimpleDateFormat fmt("HH:mm 'w'w 'd'D E d MMM yyyy", Locale::getUS(), status); if (U_FAILURE(status)) { errln("Error: Cannot create calendar or format"); diff --git a/icuSources/test/intltest/caltest.cpp b/icuSources/test/intltest/caltest.cpp index 0ec15c2d..8f021a82 100644 --- a/icuSources/test/intltest/caltest.cpp +++ b/icuSources/test/intltest/caltest.cpp @@ -1,6 +1,6 @@ /************************************************************************ * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ************************************************************************/ @@ -567,7 +567,7 @@ void CalendarTest::TestDisambiguation765() { UErrorCode status = U_ZERO_ERROR; - Calendar *c = Calendar::createInstance(status); + Calendar *c = Calendar::createInstance("en_US", status); if (U_FAILURE(status)) { errln("Calendar::createInstance failed"); return; } c->setLenient(FALSE); c->clear(); @@ -676,15 +676,19 @@ CalendarTest::verify765(const UnicodeString& msg, Calendar* c, int32_t year, int { UnicodeString str; UErrorCode status = U_ZERO_ERROR; - if (c->get(UCAL_YEAR, status) == year && - c->get(UCAL_MONTH, status) == month && - c->get(UCAL_DATE, status) == day) { + int32_t y = c->get(UCAL_YEAR, status); + int32_t m = c->get(UCAL_MONTH, status); + int32_t d = c->get(UCAL_DATE, status); + if ( y == year && + m == month && + d == day) { if (U_FAILURE(status)) { errln("FAIL: Calendar::get failed"); return; } logln("PASS: " + msg + dateToString(c->getTime(status), str)); if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } } else { - errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day); + errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day + + "; got " + (int32_t)y + "/" + (int32_t)(m + 1) + "/" + (int32_t)d + " for Locale: " + c->getLocaleID(ULOC_ACTUAL_LOCALE,status)); if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } } } @@ -1338,7 +1342,11 @@ void CalendarTest::yearAddTest(Calendar& cal, UErrorCode& status) { int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); int32_t dow = cal.get(UCAL_DOW_LOCAL, status); UDate t = cal.getTime(status); - + + if(U_FAILURE(status)){ + errln(UnicodeString("Failed to create Calendar for locale. Error: ") + UnicodeString(u_errorName(status))); + return; + } UnicodeString str, str2; SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), status); fmt.setCalendar(cal); diff --git a/icuSources/test/intltest/caltest.h b/icuSources/test/intltest/caltest.h index fce3d978..577b4734 100644 --- a/icuSources/test/intltest/caltest.h +++ b/icuSources/test/intltest/caltest.h @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ diff --git a/icuSources/test/intltest/canittst.cpp b/icuSources/test/intltest/canittst.cpp index 419f3f61..8e97744c 100644 --- a/icuSources/test/intltest/canittst.cpp +++ b/icuSources/test/intltest/canittst.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************** * @@ -72,7 +72,7 @@ void CanonicalIteratorTest::TestExhaustive() { UErrorCode status = U_ZERO_ERROR; CanonicalIterator it("", status); UChar32 i = 0; - UnicodeString s, decomp, comp; + UnicodeString s; // Test static and dynamic class IDs if(it.getDynamicClassID() != CanonicalIterator::getStaticClassID()){ errln("CanonicalIterator::getStaticClassId ! = CanonicalIterator.getDynamicClassID"); @@ -90,33 +90,10 @@ void CanonicalIteratorTest::TestExhaustive() { || type == U_SURROGATE) continue; s = i; + characterTest(s, i, it); + s += (UChar32)0x0345; //"\\u0345"; - - Normalizer::decompose(s, FALSE, 0, decomp, status); - Normalizer::compose(s, FALSE, 0, comp, status); - - // skip characters that don't have either decomp. - // need quick test for this! - if (s == decomp && s == comp) { - continue; - } - - it.setSource(s, status); - UBool gotDecomp = FALSE; - UBool gotComp = FALSE; - UBool gotSource = FALSE; - - while (TRUE) { - UnicodeString item = it.next(); - if (item.isBogus()) break; - if (item == s) gotSource = TRUE; - if (item == decomp) gotDecomp = TRUE; - if (item == comp) gotComp = TRUE; - } - - if (!gotSource || !gotDecomp || !gotComp) { - errln("FAIL CanonicalIterator: " + s + (int)i); - } + characterTest(s, i, it); } } @@ -191,6 +168,38 @@ void CanonicalIteratorTest::TestBasic() { delete set; } +void CanonicalIteratorTest::characterTest(UnicodeString &s, UChar32 ch, CanonicalIterator &it) +{ + UErrorCode status = U_ZERO_ERROR; + UnicodeString decomp, comp; + UBool gotDecomp = FALSE; + UBool gotComp = FALSE; + UBool gotSource = FALSE; + + Normalizer::decompose(s, FALSE, 0, decomp, status); + Normalizer::compose(s, FALSE, 0, comp, status); + + // skip characters that don't have either decomp. + // need quick test for this! + if (s == decomp && s == comp) { + return; + } + + it.setSource(s, status); + + while (TRUE) { + UnicodeString item = it.next(); + if (item.isBogus()) break; + if (item == s) gotSource = TRUE; + if (item == decomp) gotDecomp = TRUE; + if (item == comp) gotComp = TRUE; + } + + if (!gotSource || !gotDecomp || !gotComp) { + errln("FAIL CanonicalIterator: " + s + (int)ch); + } +} + void CanonicalIteratorTest::expectEqual(const UnicodeString &message, const UnicodeString &item, const UnicodeString &a, const UnicodeString &b) { if (!(a==b)) { errln("FAIL: " + message + getReadable(item)); diff --git a/icuSources/test/intltest/canittst.h b/icuSources/test/intltest/canittst.h index fec1c2c6..650cc089 100644 --- a/icuSources/test/intltest/canittst.h +++ b/icuSources/test/intltest/canittst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2003, International Business Machines Corporation and + * Copyright (c) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************** * @@ -27,6 +27,7 @@ class Transliterator; U_NAMESPACE_END #include "unicode/translit.h" +#include "unicode/caniter.h" #include "intltest.h" #include "hash.h" @@ -45,6 +46,7 @@ public: //static UnicodeString collectionToString(Collection col); private: void expectEqual(const UnicodeString &message, const UnicodeString &item, const UnicodeString &a, const UnicodeString &b); + void characterTest(UnicodeString &s, UChar32 ch, CanonicalIterator &it); Transliterator *nameTrans; Transliterator *hexTrans; diff --git a/icuSources/test/intltest/citrtest.cpp b/icuSources/test/intltest/citrtest.cpp index dd390cd4..75bd1e58 100644 --- a/icuSources/test/intltest/citrtest.cpp +++ b/icuSources/test/intltest/citrtest.cpp @@ -1,12 +1,12 @@ -/******************************************************************** +/**************************************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. * Modification History: * * Date Name Description * 05/22/2000 Madhu Added tests for testing new API for utf16 support and more - **********************************************************************/ + ****************************************************************************************/ #include #include "unicode/chariter.h" @@ -40,13 +40,13 @@ public: virtual void getText(UnicodeString& result) { text.extract(0,text.length(),result); } + static UClassID getStaticClassID(void){ + return (UClassID)(&fgClassID); + } virtual UClassID getDynamicClassID(void) const{ return getStaticClassID(); } - static UClassID getStaticClassID(void){ - return (UClassID)(&fgClassID); - } virtual UBool operator==(const ForwardCharacterIterator& /*that*/) const{ return TRUE; } @@ -143,7 +143,7 @@ CharIterTest::CharIterTest() } void CharIterTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) { - if (exec) logln("TestSuite LocaleTest: "); + if (exec) logln("TestSuite CharIterTest: "); switch (index) { case 0: name = "TestConstructionAndEquality"; if (exec) TestConstructionAndEquality(); break; case 1: name = "TestConstructionAndEqualityUChariter"; if (exec) TestConstructionAndEqualityUChariter(); break; @@ -911,36 +911,51 @@ void CharIterTest::TestUCharIterator() { if(cIter.getIndex(&cIter, (enum UCharIteratorOrigin)-1) != -1) { - errln("error: UCharIterator(char iter).getIndex did not return error value"); + errln("error: UCharIterator(char iter).getIndex did not return error value"); } if(cIter.move(&cIter, 0, (enum UCharIteratorOrigin)-1) != -1) { - errln("error: UCharIterator(char iter).move did not return error value"); + errln("error: UCharIterator(char iter).move did not return error value"); } if(rIter.getIndex(&rIter, (enum UCharIteratorOrigin)-1) != -1) { - errln("error: UCharIterator(repl iter).getIndex did not return error value"); + errln("error: UCharIterator(repl iter).getIndex did not return error value"); } if(rIter.move(&rIter, 0, (enum UCharIteratorOrigin)-1) != -1) { - errln("error: UCharIterator(repl iter).move did not return error value"); + errln("error: UCharIterator(repl iter).move did not return error value"); } if(sIter.getIndex(&sIter, (enum UCharIteratorOrigin)-1) != -1) { - errln("error: UCharIterator(string iter).getIndex did not return error value"); + errln("error: UCharIterator(string iter).getIndex did not return error value"); } if(sIter.move(&sIter, 0, (enum UCharIteratorOrigin)-1) != -1) { - errln("error: UCharIterator(string iter).move did not return error value"); + errln("error: UCharIterator(string iter).move did not return error value"); } + /* Testing function coverage on bad input */ + UErrorCode status = U_ZERO_ERROR; + uiter_setString(&sIter, NULL, 1); + uiter_setState(&sIter, 1, &status); + if (status != U_UNSUPPORTED_ERROR) { + errln("error: uiter_setState returned %s instead of U_UNSUPPORTED_ERROR", u_errorName(status)); + } + status = U_ZERO_ERROR; + uiter_setState(NULL, 1, &status); + if (status != U_ILLEGAL_ARGUMENT_ERROR) { + errln("error: uiter_setState returned %s instead of U_ILLEGAL_ARGUMENT_ERROR", u_errorName(status)); + } + if (uiter_getState(&sIter) != UITER_NO_STATE) { + errln("error: uiter_getState did not return UITER_NO_STATE on bad input"); + } } // subclass test, and completing API coverage ------------------------------- @@ -1102,14 +1117,14 @@ public: } // RTTI - virtual UClassID getDynamicClassID() const { - return getStaticClassID(); - } - static UClassID getStaticClassID() { return (UClassID)(&fgClassID); } + virtual UClassID getDynamicClassID() const { + return getStaticClassID(); + } + private: // dummy string data UChar s[4]; diff --git a/icuSources/test/intltest/cntabcol.cpp b/icuSources/test/intltest/cntabcol.cpp index 49f254c2..28f38cb6 100644 --- a/icuSources/test/intltest/cntabcol.cpp +++ b/icuSources/test/intltest/cntabcol.cpp @@ -1,8 +1,8 @@ /******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ +* COPYRIGHT: +* Copyright (c) 1997-2006, International Business Machines Corporation and +* others. All Rights Reserved. +********************************************************************/ #include "unicode/utypes.h" @@ -13,168 +13,223 @@ U_NAMESPACE_USE ContractionTableTest::ContractionTableTest() { - status = U_ZERO_ERROR; - /*testMapping = ucmpe32_open(0, 0, 0, &status);*/ - testMapping = utrie_open(NULL, NULL, 0, 0, 0, TRUE); + testMapping = utrie_open(NULL, NULL, 0, 0, 0, TRUE); } ContractionTableTest::~ContractionTableTest() { - /*ucmpe32_close(testMapping);*/ - utrie_close(testMapping); + utrie_close(testMapping); } void ContractionTableTest::TestGrowTable(/* char* par */) { - uint32_t i = 0, res = 0; - testTable = uprv_cnttab_open(testMapping, &status); + UErrorCode status = U_ZERO_ERROR; + uint32_t i = 0, res = 0; + testTable = uprv_cnttab_open(testMapping, &status); - // fill up one contraction so that it has to expand - for(i = 0; i<65536; i++) { - uprv_cnttab_addContraction(testTable, 0, (UChar)i, i, &status); - if(U_FAILURE(status)) { - errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); - break; - } - } - // test whether the filled up contraction really contains the data we input - if(U_SUCCESS(status)) { + // fill up one contraction so that it has to expand for(i = 0; i<65536; i++) { - res = uprv_cnttab_getCE(testTable, 0, i, &status); - if(U_FAILURE(status)) { - errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); - break; - } - if(res != i) { - errln("Error: expected %i, got %i\n", i, res); - break; - } - } - } - uprv_cnttab_close(testTable); + uprv_cnttab_addContraction(testTable, 0, (UChar)i, i, &status); + if(U_FAILURE(status)) { + errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); + break; + } + } + // test whether the filled up contraction really contains the data we input + if(U_SUCCESS(status)) { + for(i = 0; i<65536; i++) { + res = uprv_cnttab_getCE(testTable, 0, i, &status); + if(U_FAILURE(status)) { + errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); + break; + } + if(res != i) { + errln("Error: expected %i, got %i\n", i, res); + break; + } + } + } + uprv_cnttab_close(testTable); } void ContractionTableTest::TestSetContraction(){ - testTable = uprv_cnttab_open(testMapping, &status); - // This should make a new contraction - uprv_cnttab_setContraction(testTable, 1, 0, 0x41, 0x41, &status); - if(U_FAILURE(status)) { - errln("Error setting a non existing contraction error = %i (%s)\n", status, u_errorName(status)); - } - // if we try to change the non existing offset, we should get an error - status = U_ZERO_ERROR; - // currently this tests whether there is enough space, maybe it should test whether the element is actually in - // range. Also, maybe a silent growing should take place.... - uprv_cnttab_setContraction(testTable, 1, 0x401, 0x41, 0x41, &status); - if(status != U_INDEX_OUTOFBOUNDS_ERROR) { - errln("changing a non-existing offset should have resulted in an error\n"); - } - status = U_ZERO_ERROR; - uprv_cnttab_close(testTable); + UErrorCode status = U_ZERO_ERROR; + testTable = uprv_cnttab_open(testMapping, &status); + // This should make a new contraction + uprv_cnttab_setContraction(testTable, 1, 0, 0x41, 0x41, &status); + if(U_FAILURE(status)) { + errln("Error setting a non existing contraction error = %i (%s)\n", status, u_errorName(status)); + } + // if we try to change the non existing offset, we should get an error + status = U_ZERO_ERROR; + // currently this tests whether there is enough space, maybe it should test whether the element is actually in + // range. Also, maybe a silent growing should take place.... + uprv_cnttab_setContraction(testTable, 1, 0x401, 0x41, 0x41, &status); + if(status != U_INDEX_OUTOFBOUNDS_ERROR) { + errln("changing a non-existing offset should have resulted in an error\n"); + } + status = U_ZERO_ERROR; + uprv_cnttab_close(testTable); } void ContractionTableTest::TestAddATableElement(){ - testTable = uprv_cnttab_open(testMapping, &status); - uint32_t i = 0, res = 0; + UErrorCode status = U_ZERO_ERROR; + testTable = uprv_cnttab_open(testMapping, &status); + uint32_t i = 0, res = 0; - // fill up one contraction so that it has to expand - for(i = 0; i<0x1000; i++) { - uprv_cnttab_addContraction(testTable, i, (UChar)i, i, &status); - if(U_FAILURE(status)) { - errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); - break; - } - } - // test whether the filled up contraction really contains the data we input - if(U_SUCCESS(status)) { + // fill up one contraction so that it has to expand for(i = 0; i<0x1000; i++) { - res = uprv_cnttab_getCE(testTable, i, 0, &status); - if(U_FAILURE(status)) { - errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); - break; - } - if(res != i) { - errln("Error: expected %i, got %i\n", i, res); - break; - } - } - } - uprv_cnttab_close(testTable); + uprv_cnttab_addContraction(testTable, i, (UChar)i, i, &status); + if(U_FAILURE(status)) { + errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); + break; + } + } + // test whether the filled up contraction really contains the data we input + if(U_SUCCESS(status)) { + for(i = 0; i<0x1000; i++) { + res = uprv_cnttab_getCE(testTable, i, 0, &status); + if(U_FAILURE(status)) { + errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); + break; + } + if(res != i) { + errln("Error: expected %i, got %i\n", i, res); + break; + } + } + } + uprv_cnttab_close(testTable); } void ContractionTableTest::TestClone(){ - testTable = uprv_cnttab_open(testMapping, &status); - int32_t i = 0, res = 0; - // we must construct table in order to copy codepoints and CEs - // fill up one contraction so that it has to expand - for(i = 0; i<0x500; i++) { - uprv_cnttab_addContraction(testTable, i, (UChar)i, i, &status); - if(U_FAILURE(status)) { - errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); - break; - } - } - uprv_cnttab_constructTable(testTable, 0, &status); - if(U_FAILURE(status)) { - errln("Error constructing table error = %i (%s)\n", status, u_errorName(status)); - } else { - testClone = uprv_cnttab_clone(testTable, &status); - if(U_SUCCESS(status)) { - for(i = 0; i<0x500; i++) { - res = uprv_cnttab_getCE(testTable, i, 0, &status); + UErrorCode status = U_ZERO_ERROR; + testTable = uprv_cnttab_open(testMapping, &status); + int32_t i = 0, res = 0; + // we must construct table in order to copy codepoints and CEs + // fill up one contraction so that it has to expand + for(i = 0; i<0x500; i++) { + uprv_cnttab_addContraction(testTable, i, (UChar)i, i, &status); if(U_FAILURE(status)) { - errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); - break; + errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); + break; } - if(res != i) { - errln("Error: expected %i, got %i\n", i, res); - break; + } + uprv_cnttab_constructTable(testTable, 0, &status); + if(U_FAILURE(status)) { + errln("Error constructing table error = %i (%s)\n", status, u_errorName(status)); + } else { + testClone = uprv_cnttab_clone(testTable, &status); + if(U_SUCCESS(status)) { + for(i = 0; i<0x500; i++) { + res = uprv_cnttab_getCE(testTable, i, 0, &status); + if(U_FAILURE(status)) { + errln("Error occurred at position %i, error = %i (%s)\n", i, status, u_errorName(status)); + break; + } + if(res != i) { + errln("Error: expected %i, got %i\n", i, res); + break; + } + } } - } - } - uprv_cnttab_close(testClone); - } - uprv_cnttab_close(testTable); - testTable = uprv_cnttab_open(testMapping, &status); - if(U_FAILURE(status)) { - errln("Error opening table error = %i (%s)\n", status, u_errorName(status)); - } - uprv_cnttab_close(testTable); + uprv_cnttab_close(testClone); + } + uprv_cnttab_close(testTable); + testTable = uprv_cnttab_open(testMapping, &status); + if(U_FAILURE(status)) { + errln("Error opening table error = %i (%s)\n", status, u_errorName(status)); + } + uprv_cnttab_close(testTable); } void ContractionTableTest::TestChangeContraction(){ - testTable = uprv_cnttab_open(testMapping, &status); - uint32_t i = 0, res = 0; - res = uprv_cnttab_changeContraction(testTable, 0, 0x41, 0xAB, &status); - if(res != 0) { - errln("found a non existing contraction!\n"); - } - - for(i = 0; i < 0x20; i+=2) { - uprv_cnttab_addContraction(testTable, 0, (UChar)i, i, &status); - } - - res = uprv_cnttab_changeContraction(testTable, 0, 0x41, 0xAB, &status); - if(res != UCOL_NOT_FOUND) { - errln("managed to change a non existing contraction!\n"); - } - - for(i = 1; i < 0x20; i+=2) { - res = uprv_cnttab_changeContraction(testTable, 0, (UChar)i, 0xAB, &status); + UErrorCode status = U_ZERO_ERROR; + testTable = uprv_cnttab_open(testMapping, &status); + uint32_t i = 0, res = 0; + res = uprv_cnttab_changeContraction(testTable, 0, 0x41, 0xAB, &status); + if(res != 0) { + errln("found a non existing contraction!\n"); + } + + for(i = 0; i < 0x20; i+=2) { + uprv_cnttab_addContraction(testTable, 0, (UChar)i, i, &status); + } + + res = uprv_cnttab_changeContraction(testTable, 0, 0x41, 0xAB, &status); if(res != UCOL_NOT_FOUND) { - errln("managed to change a non existing contraction!\n"); + errln("managed to change a non existing contraction!\n"); + } + + for(i = 1; i < 0x20; i+=2) { + res = uprv_cnttab_changeContraction(testTable, 0, (UChar)i, 0xAB, &status); + if(res != UCOL_NOT_FOUND) { + errln("managed to change a non existing contraction!\n"); + } } - } - uprv_cnttab_close(testTable); + uprv_cnttab_close(testTable); } void ContractionTableTest::TestChangeLastCE(){ - testTable = uprv_cnttab_open(testMapping, &status); - uint32_t res = uprv_cnttab_changeLastCE(testTable, 1, 0xABCD, &status); - if(res!=0) { - errln("managed to change the last CE in an non-existing contraction!\n"); - } - uprv_cnttab_close(testTable); + UErrorCode status = U_ZERO_ERROR; + testTable = uprv_cnttab_open(testMapping, &status); + uint32_t res = uprv_cnttab_changeLastCE(testTable, 1, 0xABCD, &status); + if(res!=0) { + errln("managed to change the last CE in an non-existing contraction!\n"); + } + uprv_cnttab_close(testTable); } +void ContractionTableTest::TestErrorCodeChecking(){ + UErrorCode status = U_REGEX_SET_CONTAINS_STRING; + + uprv_cnttab_open(NULL, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_clone(NULL, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_changeLastCE(NULL, 0, 0, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_insertContraction(NULL, 0, 0, 0, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_addContraction(NULL, 0, 0, 0, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_setContraction(NULL, 0, 0, 0, 0, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_findCP(NULL, 0, 0, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + if (uprv_cnttab_getCE(NULL, 0, 0, &status) != UCOL_NOT_FOUND) { + errln("uprv_cnttab_getCE didn't return UCOL_NOT_FOUND\n"); + } + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + if (uprv_cnttab_findCE(NULL, 0, 0, &status) != UCOL_NOT_FOUND) { + errln("uprv_cnttab_findCE didn't return UCOL_NOT_FOUND\n"); + } + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_isTailored(NULL, 0, NULL, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } + uprv_cnttab_changeContraction(NULL, 0, 0, 0, &status); + if (status != U_REGEX_SET_CONTAINS_STRING) { + errln("Status was incorrectly modified to %s\n", u_errorName(status)); + } +} void ContractionTableTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) { @@ -186,6 +241,7 @@ void ContractionTableTest::runIndexedTest( int32_t index, UBool exec, const char case 3: name = "TestClone"; if (exec) TestClone(/* par */); break; case 4: name = "TestChangeContraction"; if (exec) TestChangeContraction(/* par */); break; case 5: name = "TestChangeLastCE"; if (exec) TestChangeLastCE(/* par */); break; + case 6: name = "TestErrorCodeChecking"; if (exec) TestErrorCodeChecking(/* par */); break; default: name = ""; break; } } diff --git a/icuSources/test/intltest/cntabcol.h b/icuSources/test/intltest/cntabcol.h index 0badb914..0e35d7de 100644 --- a/icuSources/test/intltest/cntabcol.h +++ b/icuSources/test/intltest/cntabcol.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -29,11 +29,11 @@ public: void TestClone(); void TestChangeContraction(); void TestChangeLastCE(); + void TestErrorCodeChecking(); private: CntTable *testTable, *testClone; /*CompactEIntArray *testMapping;*/ UNewTrie *testMapping; - UErrorCode status; }; #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/intltest/convtest.cpp b/icuSources/test/intltest/convtest.cpp index 791ed3c7..05da2ce1 100644 --- a/icuSources/test/intltest/convtest.cpp +++ b/icuSources/test/intltest/convtest.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -183,7 +183,7 @@ ConversionTest::TestFromUnicode() { char charset[100], cbopt[4]; const char *option; UnicodeString s, unicode, invalidUChars; - int32_t offsetsLength; + int32_t offsetsLength, index; UConverterFromUCallback callback; TestDataModule *dataModule; @@ -242,15 +242,17 @@ ConversionTest::TestFromUnicode() { } s=testCase->getString("callback", errorCode); + cc.setSub=0; // default: no subchar - // read NUL-separated subchar first, if any - length=u_strlen(p=s.getTerminatedBuffer()); - if(++length0) { + // read NUL-separated subchar first, if any // copy the subchar from Latin-1 characters // start after the NUL + p=s.getTerminatedBuffer(); + length=index+1; p+=length; length=s.length()-length; - if(length>=(int32_t)sizeof(cc.subchar)) { + if(length<=0 || length>=(int32_t)sizeof(cc.subchar)) { errorCode=U_ILLEGAL_ARGUMENT_ERROR; } else { int32_t j; @@ -260,13 +262,26 @@ ConversionTest::TestFromUnicode() { } // NUL-terminate the subchar cc.subchar[j]=0; + cc.setSub=1; } // remove the NUL and subchar from s - s.truncate(u_strlen(s.getBuffer())); - } else { - // no subchar - cc.subchar[0]=0; + s.truncate(index); + } else if((index=s.indexOf((UChar)0x3d))>0) /* '=' */ { + // read a substitution string, separated by an equal sign + p=s.getBuffer()+index+1; + length=s.length()-(index+1); + if(length<0 || length>=LENGTHOF(cc.subString)) { + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + } else { + u_memcpy(cc.subString, p, length); + // NUL-terminate the subString + cc.subString[length]=0; + cc.setSub=-1; + } + + // remove the equal sign and subString from s + s.truncate(index); } s.extract(0, 0x7fffffff, cbopt, sizeof(cbopt), ""); @@ -325,6 +340,7 @@ ConversionTest::TestGetUnicodeSet() { ParsePosition pos; UnicodeSet cnvSet, mapSet, mapnotSet, diffSet; + UnicodeSet *cnvSetPtr = &cnvSet; UConverter *cnv; TestDataModule *dataModule; @@ -395,7 +411,7 @@ ConversionTest::TestGetUnicodeSet() { continue; } - ucnv_getUnicodeSet(cnv, (USet *)&cnvSet, (UConverterUnicodeSet)which, &errorCode); + ucnv_getUnicodeSet(cnv, (USet *)cnvSetPtr, (UConverterUnicodeSet)which, &errorCode); ucnv_close(cnv); if(U_FAILURE(errorCode)) { @@ -1051,10 +1067,19 @@ ConversionTest::FromUnicodeCase(ConversionCase &cc, UConverterFromUCallback call // set the subchar int32_t length; - if((length=(int32_t)strlen(cc.subchar))!=0) { + if(cc.setSub>0) { + length=(int32_t)strlen(cc.subchar); ucnv_setSubstChars(cnv, cc.subchar, (int8_t)length, &errorCode); if(U_FAILURE(errorCode)) { - errln("fromUnicode[%d](%s cb=\"%s\" fb=%d flush=%d) ucnv_setSubChars() failed - %s", + errln("fromUnicode[%d](%s cb=\"%s\" fb=%d flush=%d) ucnv_setSubstChars() failed - %s", + cc.caseNr, cc.charset, cc.cbopt, cc.fallbacks, cc.finalFlush, u_errorName(errorCode)); + ucnv_close(cnv); + return FALSE; + } + } else if(cc.setSub<0) { + ucnv_setSubstString(cnv, cc.subString, -1, &errorCode); + if(U_FAILURE(errorCode)) { + errln("fromUnicode[%d](%s cb=\"%s\" fb=%d flush=%d) ucnv_setSubstString() failed - %s", cc.caseNr, cc.charset, cc.cbopt, cc.fallbacks, cc.finalFlush, u_errorName(errorCode)); ucnv_close(cnv); return FALSE; diff --git a/icuSources/test/intltest/convtest.h b/icuSources/test/intltest/convtest.h index b98aec0c..8fbde250 100644 --- a/icuSources/test/intltest/convtest.h +++ b/icuSources/test/intltest/convtest.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -29,7 +29,9 @@ struct ConversionCase { int32_t caseNr; const char *charset, *cbopt, *name; + UChar subString[16]; char subchar[8]; + int8_t setSub; const uint8_t *bytes; int32_t bytesLength; diff --git a/icuSources/test/intltest/cpdtrtst.cpp b/icuSources/test/intltest/cpdtrtst.cpp index e23ec1fd..d02ceed9 100644 --- a/icuSources/test/intltest/cpdtrtst.cpp +++ b/icuSources/test/intltest/cpdtrtst.cpp @@ -1,6 +1,6 @@ /*************************************************************************** * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2005, International Business Machines * Corporation and others. All Rights Reserved. * ************************************************************************ @@ -193,12 +193,17 @@ void CompoundTransliteratorTest::TestGetCount(){ CompoundTransliterator *ct1=new CompoundTransliterator("Halfwidth-Fullwidth;Fullwidth-Halfwidth", parseError, status); CompoundTransliterator *ct2=new CompoundTransliterator("Any-Hex;Hex-Any;Cyrillic-Latin;Latin-Cyrillic", parseError, status); CompoundTransliterator *ct3=(CompoundTransliterator*)ct1; + if (U_FAILURE(status)) { + errln("FAILED: CompoundTransliterator constructor failed"); + return; + } CompoundTransliterator *ct4=new CompoundTransliterator("Latin-Devanagari", parseError, status); CompoundTransliterator *ct5=new CompoundTransliterator(*ct4); if (U_FAILURE(status)) { errln("FAILED: CompoundTransliterator constructor failed"); - } else + return; + } if(ct1->getCount() == ct2->getCount() || ct1->getCount() != ct3->getCount() || ct2->getCount() == ct3->getCount() || ct4->getCount() != ct5->getCount() || ct4->getCount() == ct1->getCount() || diff --git a/icuSources/test/intltest/csdetest.cpp b/icuSources/test/intltest/csdetest.cpp new file mode 100644 index 00000000..821afad3 --- /dev/null +++ b/icuSources/test/intltest/csdetest.cpp @@ -0,0 +1,518 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + + +#include "unicode/utypes.h" +#include "unicode/ucsdet.h" +#include "unicode/ucnv.h" +#include "unicode/unistr.h" +#include "unicode/putil.h" + +#include "intltest.h" +#include "csdetest.h" + +#include "xmlparser.h" + +#include +#include + +#ifdef DEBUG_DETECT +#include +#endif + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define NEW_ARRAY(type,count) (type *) /*uprv_*/malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) /*uprv_*/free((void *) (array)) + +#define CH_SPACE 0x0020 +#define CH_SLASH 0x002F + +//--------------------------------------------------------------------------- +// +// Test class boilerplate +// +//--------------------------------------------------------------------------- +CharsetDetectionTest::CharsetDetectionTest() +{ +} + + +CharsetDetectionTest::~CharsetDetectionTest() +{ +} + + + +void CharsetDetectionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) +{ + if (exec) logln("TestSuite CharsetDetectionTest: "); + switch (index) { + case 0: name = "ConstructionTest"; + if (exec) ConstructionTest(); + break; + + case 1: name = "UTF8Test"; + if (exec) UTF8Test(); + break; + + case 2: name = "UTF16Test"; + if (exec) UTF16Test(); + break; + + case 3: name = "C1BytesTest"; + if (exec) C1BytesTest(); + break; + + case 4: name = "InputFilterTest"; + if (exec) InputFilterTest(); + break; + + case 5: name = "DetectionTest"; + if (exec) DetectionTest(); + break; + + default: name = ""; + break; //needed to end loop + } +} + +static UnicodeString *split(const UnicodeString &src, UChar ch, int32_t &splits) +{ + int32_t offset = -1; + + splits = 1; + while((offset = src.indexOf(ch, offset + 1)) >= 0) { + splits += 1; + } + + UnicodeString *result = new UnicodeString[splits]; + + int32_t start = 0; + int32_t split = 0; + int32_t end; + + while((end = src.indexOf(ch, start)) >= 0) { + src.extractBetween(start, end, result[split++]); + start = end + 1; + } + + src.extractBetween(start, src.length(), result[split]); + + return result; +} + +static char *extractBytes(const UnicodeString &source, const char *codepage, int32_t &length) +{ + int32_t sLength = source.length(); + char *bytes = NULL; + + length = source.extract(0, sLength, NULL, codepage); + + if (length > 0) { + bytes = NEW_ARRAY(char, length + 1); + source.extract(0, sLength, bytes, codepage); + } + + return bytes; +} + +static void freeBytes(char *bytes) +{ + DELETE_ARRAY(bytes); +} + +void CharsetDetectionTest::checkEncoding(const UnicodeString &testString, const UnicodeString &encoding, const UnicodeString &id) +{ + int32_t splits = 0; + int32_t testLength = testString.length(); + UnicodeString *eSplit = split(encoding, CH_SLASH, splits); + UErrorCode status = U_ZERO_ERROR; + int32_t cpLength = eSplit[0].length(); + char codepage[64]; + + u_UCharsToChars(eSplit[0].getBuffer(), codepage, cpLength); + codepage[cpLength] = '\0'; + + UCharsetDetector *csd = ucsdet_open(&status); + + int32_t byteLength = 0; + char *bytes = extractBytes(testString, codepage, byteLength); + + if (bytes == NULL) { +#if !UCONFIG_NO_LEGACY_CONVERSION + errln("Can't open a " + encoding + " converter for " + id); +#endif + return; + } + + ucsdet_setText(csd, bytes, byteLength, &status); + + int32_t matchCount = 0; + const UCharsetMatch **matches = ucsdet_detectAll(csd, &matchCount, &status); + + + UnicodeString name(ucsdet_getName(matches[0], &status)); + UnicodeString lang(ucsdet_getLanguage(matches[0], &status)); + UChar *decoded = NULL; + int32_t dLength = 0; + + if (matchCount == 0) { + errln("Encoding detection failure for " + id + ": expected " + eSplit[0] + ", got no matches"); + goto bail; + } + + if (name.compare(eSplit[0]) != 0) { + errln("Encoding detection failure for " + id + ": expected " + eSplit[0] + ", got " + name); + +#ifdef DEBUG_DETECT + for (int32_t m = 0; m < matchCount; m += 1) { + const char *name = ucsdet_getName(matches[m], &status); + const char *lang = ucsdet_getLanguage(matches[m], &status); + int32_t confidence = ucsdet_getConfidence(matches[m], &status); + + printf("%s (%s) %d\n", name, lang, confidence); + } +#endif + goto bail; + } + + if (splits > 1 && lang.compare(eSplit[1]) != 0) { + errln("Language detection failure for " + id + ", " + eSplit[0] + ": expected " + eSplit[1] + ", got " + lang); + goto bail; + } + + decoded = NEW_ARRAY(UChar, testLength); + dLength = ucsdet_getUChars(matches[0], decoded, testLength, &status); + + if (testString.compare(decoded, dLength) != 0) { + errln("Round-trip error for " + id + ", " + eSplit[0] + ": getUChars() didn't yeild the original string."); + +#ifdef DEBUG_DETECT + for(int32_t i = 0; i < testLength; i += 1) { + if(testString[i] != decoded[i]) { + printf("Strings differ at byte %d\n", i); + break; + } + } +#endif + + } + + DELETE_ARRAY(decoded); + +bail: + freeBytes(bytes); + ucsdet_close(csd); + delete[] eSplit; +} + +const char *CharsetDetectionTest::getPath(char buffer[2048], const char *filename) { + UErrorCode status = U_ZERO_ERROR; + const char *testDataDirectory = IntlTest::getSourceTestData(status); + + if (U_FAILURE(status)) { + errln("ERROR: getPath() failed - %s", u_errorName(status)); + return NULL; + } + + strcpy(buffer, testDataDirectory); + strcat(buffer, filename); + return buffer; +} + +void CharsetDetectionTest::ConstructionTest() +{ + UErrorCode status = U_ZERO_ERROR; + UCharsetDetector *csd = ucsdet_open(&status); + UEnumeration *e = ucsdet_getAllDetectableCharsets(csd, &status); + int32_t count = uenum_count(e, &status); + +#ifdef DEBUG_DETECT + printf("There are %d recognizers.\n", count); +#endif + + for(int32_t i = 0; i < count; i += 1) { + int32_t length; + const char *name = uenum_next(e, &length, &status); + + if(name == NULL || length <= 0) { + errln("ucsdet_getAllDetectableCharsets() returned a null or empty name!"); + } + +#ifdef DEBUG_DETECT + printf("%s\n", name); +#endif + } + + uenum_close(e); + ucsdet_close(csd); +} + +void CharsetDetectionTest::UTF8Test() +{ + UErrorCode status = U_ZERO_ERROR; + UnicodeString ss = "This is a string with some non-ascii characters that will " + "be converted to UTF-8, then shoved through the detection process. " + "\\u0391\\u0392\\u0393\\u0394\\u0395" + "Sure would be nice if our source could contain Unicode directly!"; + UnicodeString s = ss.unescape(); + int32_t byteLength = 0, sLength = s.length(); + char *bytes = extractBytes(s, "UTF-8", byteLength); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + UChar *detected = NEW_ARRAY(UChar, sLength); + + ucsdet_setText(csd, bytes, byteLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("Detection failure for UTF-8: got no matches."); + goto bail; + } + + ucsdet_getUChars(match, detected, sLength, &status); + + if (s.compare(detected, sLength) != 0) { + errln("Round-trip test failed!"); + } + + ucsdet_setDeclaredEncoding(csd, "UTF-8", 5, &status); /* for coverage */ + +bail: + DELETE_ARRAY(detected); + freeBytes(bytes); + ucsdet_close(csd); +} + +void CharsetDetectionTest::UTF16Test() +{ + UErrorCode status = U_ZERO_ERROR; + /* Notice the BOM on the start of this string */ + UChar chars[] = { + 0xFEFF, 0x0623, 0x0648, 0x0631, 0x0648, 0x0628, 0x0627, 0x002C, + 0x0020, 0x0628, 0x0631, 0x0645, 0x062c, 0x064a, 0x0627, 0x062a, + 0x0020, 0x0627, 0x0644, 0x062d, 0x0627, 0x0633, 0x0648, 0x0628, + 0x0020, 0x002b, 0x0020, 0x0627, 0x0646, 0x062a, 0x0631, 0x0646, + 0x064a, 0x062a, 0x0000}; + UnicodeString s(chars); + int32_t beLength = 0, leLength = 0; + char *beBytes = extractBytes(s, "UTF-16BE", beLength); + char *leBytes = extractBytes(s, "UTF-16LE", leLength); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + const char *name; + int32_t conf; + + ucsdet_setText(csd, beBytes, beLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("Encoding detection failure for UTF-16BE: got no matches."); + goto try_le; + } + + name = ucsdet_getName(match, &status); + conf = ucsdet_getConfidence(match, &status); + + if (strcmp(name, "UTF-16BE") != 0) { + errln("Encoding detection failure for UTF-16BE: got %s", name); + goto try_le; // no point in looking at confidence if we got the wrong character set. + } + + if (conf != 100) { + errln("Did not get 100%% confidence for UTF-16BE: got %d", conf); + } + +try_le: + ucsdet_setText(csd, leBytes, leLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("Encoding detection failure for UTF-16LE: got no matches."); + goto bail; + } + + name = ucsdet_getName(match, &status); + conf = ucsdet_getConfidence(match, &status); + + + if (strcmp(name, "UTF-16LE") != 0) { + errln("Enconding detection failure for UTF-16LE: got %s", name); + goto bail; // no point in looking at confidence if we got the wrong character set. + } + + if (conf != 100) { + errln("Did not get 100%% confidence for UTF-16LE: got %d", conf); + } + +bail: + freeBytes(leBytes); + freeBytes(beBytes); + ucsdet_close(csd); +} + +void CharsetDetectionTest::InputFilterTest() +{ + UErrorCode status = U_ZERO_ERROR; + UnicodeString ss = " Un tr\\u00E8s petit peu de Fran\\u00E7ais. "; + UnicodeString s = ss.unescape(); + int32_t byteLength = 0; + char *bytes = extractBytes(s, "ISO-8859-1", byteLength); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + const char *lang, *name; + + ucsdet_enableInputFilter(csd, TRUE); + + if (!ucsdet_isInputFilterEnabled(csd)) { + errln("ucsdet_enableInputFilter(csd, TRUE) did not enable input filter!"); + } + + + ucsdet_setText(csd, bytes, byteLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("Turning on the input filter resulted in no matches."); + goto turn_off; + } + + name = ucsdet_getName(match, &status); + + if (name == NULL || strcmp(name, "ISO-8859-1") != 0) { + errln("Turning on the input filter resulted in %s rather than ISO-8859-1.", name); + } else { + lang = ucsdet_getLanguage(match, &status); + + if (lang == NULL || strcmp(lang, "fr") != 0) { + errln("Input filter did not strip markup!"); + } + } + +turn_off: + ucsdet_enableInputFilter(csd, FALSE); + ucsdet_setText(csd, bytes, byteLength, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("Turning off the input filter resulted in no matches."); + goto bail; + } + + name = ucsdet_getName(match, &status); + + if (name == NULL || strcmp(name, "ISO-8859-1") != 0) { + errln("Turning off the input filter resulted in %s rather than ISO-8859-1.", name); + } else { + lang = ucsdet_getLanguage(match, &status); + + if (lang == NULL || strcmp(lang, "en") != 0) { + errln("Unfiltered input did not detect as English!"); + } + } + +bail: + freeBytes(bytes); + ucsdet_close(csd); +} + +void CharsetDetectionTest::C1BytesTest() +{ +#if !UCONFIG_NO_LEGACY_CONVERSION + UErrorCode status = U_ZERO_ERROR; + UnicodeString sISO = "This is a small sample of some English text. Just enough to be sure that it detects correctly."; + UnicodeString ssWindows = "This is another small sample of some English text. Just enough to be sure that it detects correctly. It also includes some \\u201CC1\\u201D bytes."; + UnicodeString sWindows = ssWindows.unescape(); + int32_t lISO = 0, lWindows = 0; + char *bISO = extractBytes(sISO, "ISO-8859-1", lISO); + char *bWindows = extractBytes(sWindows, "windows-1252", lWindows); + UCharsetDetector *csd = ucsdet_open(&status); + const UCharsetMatch *match; + const char *name; + + ucsdet_setText(csd, bWindows, lWindows, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("English test with C1 bytes got no matches."); + goto bail; + } + + name = ucsdet_getName(match, &status); + + if (strcmp(name, "windows-1252") != 0) { + errln("English text with C1 bytes does not detect as windows-1252, but as %s", name); + } + + ucsdet_setText(csd, bISO, lISO, &status); + match = ucsdet_detect(csd, &status); + + if (match == NULL) { + errln("English text without C1 bytes got no matches."); + goto bail; + } + + name = ucsdet_getName(match, &status); + + if (strcmp(name, "ISO-8859-1") != 0) { + errln("English text without C1 bytes does not detect as ISO-8859-1, but as %s", name); + } + +bail: + freeBytes(bWindows); + freeBytes(bISO); + + ucsdet_close(csd); +#endif +} + +void CharsetDetectionTest::DetectionTest() +{ +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + UErrorCode status = U_ZERO_ERROR; + char path[2048]; + const char *testFilePath = getPath(path, "csdetest.xml"); + + if (testFilePath == NULL) { + return; /* Couldn't get path: error message already output. */ + } + + UXMLParser *parser = UXMLParser::createParser(status); + if (!assertSuccess("UXMLParser::createParser",status)) return; + UXMLElement *root = parser->parseFile(testFilePath, status); + if (!assertSuccess( "parseFile",status)) return; + + UnicodeString test_case = UNICODE_STRING_SIMPLE("test-case"); + UnicodeString id_attr = UNICODE_STRING_SIMPLE("id"); + UnicodeString enc_attr = UNICODE_STRING_SIMPLE("encodings"); + + const UXMLElement *testCase; + int32_t tc = 0; + + while((testCase = root->nextChildElement(tc)) != NULL) { + if (testCase->getTagName().compare(test_case) == 0) { + const UnicodeString *id = testCase->getAttribute(id_attr); + const UnicodeString *encodings = testCase->getAttribute(enc_attr); + const UnicodeString text = testCase->getText(TRUE); + int32_t encodingCount; + UnicodeString *encodingList = split(*encodings, CH_SPACE, encodingCount); + + for(int32_t e = 0; e < encodingCount; e += 1) { + checkEncoding(text, encodingList[e], *id); + } + + delete[] encodingList; + } + } + + delete root; + delete parser; +#endif +} + + diff --git a/icuSources/test/intltest/csdetest.h b/icuSources/test/intltest/csdetest.h new file mode 100644 index 00000000..223a640a --- /dev/null +++ b/icuSources/test/intltest/csdetest.h @@ -0,0 +1,39 @@ +/* + ********************************************************************** + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + ********************************************************************** + */ + +#ifndef __CSDETEST_H +#define __CSDETEST_H + +#include "unicode/utypes.h" +#include "unicode/unistr.h" + +#include "intltest.h" + +class CharsetDetectionTest: public IntlTest { +public: + + CharsetDetectionTest(); + virtual ~CharsetDetectionTest(); + + virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ); + + virtual void ConstructionTest(); + virtual void UTF8Test(); + virtual void UTF16Test(); + virtual void C1BytesTest(); + virtual void InputFilterTest(); + virtual void DetectionTest(); + +private: + void checkEncoding(const UnicodeString &testString, + const UnicodeString &encoding, const UnicodeString &id); + + virtual const char *getPath(char buffer[2048], const char *filename); + +}; + +#endif diff --git a/icuSources/test/intltest/dacoll.cpp b/icuSources/test/intltest/dacoll.cpp deleted file mode 100644 index ee499422..00000000 --- a/icuSources/test/intltest/dacoll.cpp +++ /dev/null @@ -1,241 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "unicode/coll.h" -#include "unicode/tblcoll.h" -#include "unicode/unistr.h" -#include "unicode/sortkey.h" -#include "dacoll.h" - -#include "sfwdchit.h" - -CollationDanishTest::CollationDanishTest() -: myCollation(0) -{ - UErrorCode status = U_ZERO_ERROR; - myCollation = Collator::createInstance(Locale("da", "DK", ""),status); - if(!myCollation || U_FAILURE(status)) { - errln(__FILE__ "failed to create! err " + UnicodeString(u_errorName(status))); - /* if it wasn't already: */ - delete myCollation; - myCollation = NULL; - } - -} - -CollationDanishTest::~CollationDanishTest() -{ - delete myCollation; -} - -const UChar CollationDanishTest::testSourceCases[][CollationDanishTest::MAX_TOKEN_LEN] -= { - {(UChar)0x004C /* 'L' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00FC, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00E4, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00F6, (UChar)0x0077 /* 'w' */, (UChar)0x0077 /* 'w' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00E4, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00FC, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */} -}; - -const UChar CollationDanishTest::testTargetCases[][CollationDanishTest::MAX_TOKEN_LEN] -= { - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00FC, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0079 /* 'y' */, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00F6, (UChar)0x0077 /* 'w' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, (UChar)0x0061 /* 'a' */, (UChar)0x0073 /* 's' */, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, (UChar)0x0077 /* 'w' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00F6, (UChar)0x0077 /* 'w' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, (UChar)0x0079 /* 'y' */, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */} -}; - -const Collator::EComparisonResult CollationDanishTest::results[] = { - Collator::LESS, - Collator::LESS, - Collator::GREATER, - Collator::LESS, - Collator::LESS, - /* test primary > 5*/ - Collator::EQUAL, - Collator::LESS, - Collator::EQUAL -}; - -const UChar CollationDanishTest::testBugs[][CollationDanishTest::MAX_TOKEN_LEN] = { - {(UChar)0x0041 /* 'A' */, (UChar)0x002F /* '/' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0052 /* 'R' */, 0x00C9, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0041 /* 'A' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0041 /* 'A' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0043 /* 'C' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {0x00C7, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0043 /* 'C' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {0x00C7, (UChar)0x0043 /* 'C' */,(UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x002E /* '.' */, (UChar)0x0053 /* 'S' */, (UChar)0x002E /* '.' */, (UChar)0x0042 /* 'B' */, (UChar)0x002E /* '.' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0053 /* 'S' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0044 /* 'D' */, (UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0000 /* '\0' */}, - {0x00D0, /*0x0110,*/ (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {0x00D0, /*0x0110,*/ (UChar)0x0043 /* 'C' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0045 /* 'E' */, (UChar)0x004B /* 'K' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0052 /* 'R' */, (UChar)0x0041 /* 'A' */, (UChar)0x005F /* '_' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, (UChar)0x0042 /* 'B' */, (UChar)0x0045 /* 'E' */, (UChar)0x004A /* 'J' */, (UChar)0x0044 /* 'D' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0045 /* 'E' */, (UChar)0x004B /* 'K' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0052 /* 'R' */, (UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0055 /* 'U' */, (UChar)0x0044 /* 'D' */, 0}, - {(UChar)0x0048 /* 'H' */, 0x00D8, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0048 /* 'H' */, (UChar)0x0041 /* 'A' */, (UChar)0x0041 /* 'A' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0048 /* 'H' */, 0x00C5, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0042 /* 'B' */, (UChar)0x004F /* 'O' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0048 /* 'H' */, (UChar)0x0041 /* 'A' */, (UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x0044 /* 'D' */, (UChar)0x0056 /* 'V' */, 0x00C6, (UChar)0x0052 /* 'R' */, (UChar)0x004B /* 'K' */, (UChar)0x0053 /* 'S' */, (UChar)0x0042 /* 'B' */, (UChar)0x0041 /* 'A' */, (UChar)0x004E /* 'N' */, (UChar)0x004B /* 'K' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006B /* 'k' */, (UChar)0x0061 /* 'a' */, (UChar)0x0072 /* 'r' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004B /* 'K' */, (UChar)0x0061 /* 'a' */, (UChar)0x0072 /* 'r' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004E /* 'N' */, (UChar)0x0049 /* 'I' */, (UChar)0x0045 /* 'E' */, (UChar)0x004C /* 'L' */, (UChar)0x0053 /* 'S' */, (UChar)0x0020 /* ' ' */, (UChar)0x004A /* 'J' */, 0x00D8, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004E /* 'N' */, (UChar)0x0049 /* 'I' */, (UChar)0x0045 /* 'E' */, (UChar)0x004C /* 'L' */, (UChar)0x0053 /* 'S' */, (UChar)0x002D /* '-' */, (UChar)0x004A /* 'J' */, 0x00D8, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004E /* 'N' */, (UChar)0x0049 /* 'I' */, (UChar)0x0045 /* 'E' */, (UChar)0x004C /* 'L' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, 0x00C9, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, 0x00C9, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x004C /* 'L' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0045 /* 'E' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0056 /* 'V' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0048 /* 'H' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, 0x00DC, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0048 /* 'H' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x004C /* 'L' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, 0x00DC, (UChar)0x0054 /* 'T' */, (UChar)0x0054 /* 'T' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x004D /* 'M' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0053 /* 'S' */, (UChar)0x0000 /* '\0' */}, - {0x00DF, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0053 /* 'S' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x0020 /* ' ' */, (UChar)0x0056 /* 'V' */, (UChar)0x0049 /* 'I' */, (UChar)0x004C /* 'L' */, (UChar)0x0044 /* 'D' */, (UChar)0x004D /* 'M' */, (UChar)0x004F /* 'O' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0045 /* 'E' */, (UChar)0x004B /* 'K' */, 0x00C6, (UChar)0x0052 /* 'R' */, 0}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x004D /* 'M' */, (UChar)0x0020 /* ' ' */, (UChar)0x0050 /* 'P' */, (UChar)0x0045 /* 'E' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x004D /* 'M' */, (UChar)0x004C /* 'L' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0054 /* 'T' */, (UChar)0x0048 /* 'H' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0056 /* 'V' */, (UChar)0x0041 /* 'A' */, (UChar)0x004C /* 'L' */, (UChar)0x0044 /* 'D' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0054 /* 'T' */, (UChar)0x0048 /* 'H' */, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0056 /* 'V' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x0055 /* 'U' */, (UChar)0x0052 /* 'R' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0054 /* 'T' */, (UChar)0x0048 /* 'H' */, (UChar)0x0059 /* 'Y' */, (UChar)0x0047 /* 'G' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0045 /* 'E' */, (UChar)0x004E /* 'N' */, (UChar)0x0000 /* '\0' */}, - {0x00FE, (UChar)0x004F /* 'O' */, (UChar)0x0052 /* 'R' */, (UChar)0x0056 /* 'V' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, 0x00D0, /*0x0110,*/ (UChar)0x0055 /* 'U' */, (UChar)0x0052 /* 'R' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0056 /* 'V' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, 0x00C5, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0056 /* 'V' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0041 /* 'A' */, (UChar)0x0041 /* 'A' */, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0041 /* 'A' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0056 /* 'V' */, (UChar)0x0045 /* 'E' */, (UChar)0x0053 /* 'S' */, (UChar)0x0054 /* 'T' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, 0x00C5, (UChar)0x0052 /* 'R' */, (UChar)0x0044 /* 'D' */, (UChar)0x002C /* ',' */, (UChar)0x0020 /* ' ' */, (UChar)0x0042 /* 'B' */, (UChar)0x0000 /* '\0' */}, - {0x00C6, (UChar)0x0042 /* 'B' */, (UChar)0x004C /* 'L' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {0x00C4, (UChar)0x0042 /* 'B' */, (UChar)0x004C /* 'L' */, (UChar)0x0045 /* 'E' */, (UChar)0x0000 /* '\0' */}, - {0x00D8, (UChar)0x0042 /* 'B' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */}, - {0x00D6, (UChar)0x0042 /* 'B' */, (UChar)0x0045 /* 'E' */, (UChar)0x0052 /* 'R' */, (UChar)0x0047 /* 'G' */, (UChar)0x0000 /* '\0' */} -}; - -const UChar CollationDanishTest::testNTList[][CollationDanishTest::MAX_TOKEN_LEN] = { - {(UChar)0x0061 /* 'a' */, (UChar)0x006E /* 'n' */, (UChar)0x0064 /* 'd' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0061 /* 'a' */, (UChar)0x0071 /* 'q' */, (UChar)0x0075 /* 'u' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x006D /* 'm' */, (UChar)0x0069 /* 'i' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x006F /* 'o' */, (UChar)0x0074 /* 't' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, (UChar)0x006F /* 'o' */, (UChar)0x0074 /* 't' */, 0x00e9, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, 0x00f4, (UChar)0x0074 /* 't' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0063 /* 'c' */, 0x00f4, (UChar)0x0074 /* 't' */, 0x00e9, (UChar)0x0000 /* '\0' */}, - {0x010d, (UChar)0x0075 /* 'u' */, 0x010d, 0x0113, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0043 /* 'C' */, (UChar)0x007A /* 'z' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0068 /* 'h' */, (UChar)0x0069 /* 'i' */, 0x0161, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, (UChar)0x0069 /* 'i' */, (UChar)0x0073 /* 's' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0069 /* 'i' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x006D /* 'm' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, 0x00f5, (UChar)0x0075 /* 'u' */, (UChar)0x0067 /* 'g' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, 0x00f2, (UChar)0x007A /* 'z' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, 0x010d, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00fc, (UChar)0x0062 /* 'b' */, (UChar)0x0065 /* 'e' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, (UChar)0x0079 /* 'y' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006C /* 'l' */, 0x00e4, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004C /* 'L' */, 0x00f6, (UChar)0x0077 /* 'w' */, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, 0x00e0, 0x0161, (UChar)0x0074 /* 't' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, 0x00ee, (UChar)0x0072 /* 'r' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, (UChar)0x0079 /* 'y' */, (UChar)0x006E /* 'n' */, (UChar)0x0064 /* 'd' */, (UChar)0x0069 /* 'i' */, (UChar)0x0067 /* 'g' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x004D /* 'M' */, 0x00e4, (UChar)0x006E /* 'n' */, (UChar)0x006E /* 'n' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x006D /* 'm' */, 0x00f6, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0074 /* 't' */, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0070 /* 'p' */, (UChar)0x0069 /* 'i' */, 0x00f1, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0070 /* 'p' */, (UChar)0x0069 /* 'i' */, (UChar)0x006E /* 'n' */, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0070 /* 'p' */, (UChar)0x0079 /* 'y' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {0x0161, 0x00e0, (UChar)0x0072 /* 'r' */, (UChar)0x0061 /* 'a' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, (UChar)0x0061 /* 'a' */, (UChar)0x0076 /* 'v' */, (UChar)0x006F /* 'o' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0000 /* '\0' */}, - {0x0160, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0062 /* 'b' */, 0x016b, (UChar)0x0072 /* 'r' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0053 /* 'S' */, (UChar)0x0069 /* 'i' */, (UChar)0x0065 /* 'e' */, (UChar)0x0074 /* 't' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {0x015b, (UChar)0x006C /* 'l' */, (UChar)0x0075 /* 'u' */, (UChar)0x0062 /* 'b' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, (UChar)0x0075 /* 'u' */, (UChar)0x0062 /* 'b' */, (UChar)0x0074 /* 't' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, (UChar)0x0079 /* 'y' */, (UChar)0x006D /* 'm' */, (UChar)0x0062 /* 'b' */, (UChar)0x006F /* 'o' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0073 /* 's' */, 0x00e4, (UChar)0x006D /* 'm' */, (UChar)0x0074 /* 't' */, (UChar)0x006C /* 'l' */, (UChar)0x0069 /* 'i' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0077 /* 'w' */, (UChar)0x0061 /* 'a' */, (UChar)0x0066 /* 'f' */, (UChar)0x0066 /* 'f' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0076 /* 'v' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x006B /* 'k' */, (UChar)0x0065 /* 'e' */, (UChar)0x0068 /* 'h' */, (UChar)0x0072 /* 'r' */, (UChar)0x0074 /* 't' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0077 /* 'w' */, (UChar)0x006F /* 'o' */, (UChar)0x006F /* 'o' */, (UChar)0x0064 /* 'd' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0076 /* 'v' */, (UChar)0x006F /* 'o' */, (UChar)0x0078 /* 'x' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0076 /* 'v' */, 0x00e4, (UChar)0x0067 /* 'g' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0079 /* 'y' */, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0079 /* 'y' */, (UChar)0x0075 /* 'u' */, (UChar)0x0061 /* 'a' */, (UChar)0x006E /* 'n' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x0079 /* 'y' */, (UChar)0x0075 /* 'u' */, (UChar)0x0063 /* 'c' */, (UChar)0x0063 /* 'c' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {0x017e, (UChar)0x0061 /* 'a' */, (UChar)0x006C /* 'l' */, (UChar)0x0000 /* '\0' */}, - {0x017e, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {0x017d, (UChar)0x0065 /* 'e' */, (UChar)0x006E /* 'n' */, 0x0113, (UChar)0x0076 /* 'v' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x007A /* 'z' */, (UChar)0x006F /* 'o' */, (UChar)0x006F /* 'o' */, 0}, - {(UChar)0x005A /* 'Z' */, (UChar)0x0076 /* 'v' */, (UChar)0x0069 /* 'i' */, (UChar)0x0065 /* 'e' */, (UChar)0x0064 /* 'd' */, (UChar)0x0072 /* 'r' */, (UChar)0x0069 /* 'i' */, (UChar)0x006A /* 'j' */, (UChar)0x0061 /* 'a' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x005A /* 'Z' */, 0x00fc, (UChar)0x0072 /* 'r' */, (UChar)0x0069 /* 'i' */, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0000 /* '\0' */}, - {(UChar)0x007A /* 'z' */, (UChar)0x0079 /* 'y' */, (UChar)0x0073 /* 's' */, (UChar)0x006B /* 'k' */, 0}, - {0x00e4, (UChar)0x006E /* 'n' */, (UChar)0x0064 /* 'd' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0000 /* '\0' */} -}; - -void CollationDanishTest::TestTertiary(/* char* par */) -{ - int32_t i = 0; - myCollation->setStrength(Collator::TERTIARY); - UErrorCode status = U_ZERO_ERROR; - /* problem in strcollinc for unfinshed contractions */ - if(U_FAILURE(status)){ - errln("ERROR: in setting normalization mode of the Danish collator\n"); - return; - } - for (i = 0; i < 5 ; i++) { - doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); - } - int32_t j = 0; - logln("Test internet data list : "); - for (i = 0; i < 53; i++) { - for (j = i+1; j < 54; j++) { - doTest(myCollation, testBugs[i], testBugs[j], Collator::LESS); - } - } - logln("Test NT data list : "); - for (i = 0; i < 52; i++) { - for (j = i+1; j < 53; j++) { - doTest(myCollation, testNTList[i], testNTList[j], Collator::LESS); - } - } -} - -void CollationDanishTest::TestPrimary(/* char* par */) -{ - int32_t i; - myCollation->setStrength(Collator::PRIMARY); - for (i = 5; i < 8; i++) { - doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); - } -} - -void CollationDanishTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) -{ - if (exec) logln("TestSuite CollationDanishTest: "); - - if((!myCollation) && exec) { - errln(__FILE__ " cannot test - failed to create collator."); - name = ""; - return; - } - switch (index) { - case 0: name = "TestPrimary"; if (exec) TestPrimary(/* par */); break; - case 1: name = "TestTertiary"; if (exec) TestTertiary(/* par */); break; - default: name = ""; break; - } -} - -#endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/intltest/dacoll.h b/icuSources/test/intltest/dacoll.h deleted file mode 100644 index b168e92d..00000000 --- a/icuSources/test/intltest/dacoll.h +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ - -/** - * CollationDanishTest is a third level test class. This tests the locale - * specific primary and tertiary rules. For example, a-ring sorts after z - * and a-umlaut sorts before ae ligatures. Additional test strings from the - * internet are also included. - */ - -#ifndef _DACOLL -#define _DACOLL - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_COLLATION - -#include "tscoll.h" - -class CollationDanishTest: public IntlTestCollator { -public: - // If this is too small for the test data, just increase it. - // Just don't make it too large, otherwise the executable will get too big - enum EToken_Len { MAX_TOKEN_LEN = 24 }; - - CollationDanishTest(); - virtual ~CollationDanishTest(); - void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); - - // perform tests with strength PRIMARY - void TestPrimary(/* char* par */); - - // perform test with strength TERTIARY - void TestTertiary(/* char* par */); - -private: - static const UChar testBugs[][MAX_TOKEN_LEN]; - static const UChar testNTList[][MAX_TOKEN_LEN]; - static const UChar testSourceCases[][MAX_TOKEN_LEN]; - static const UChar testTargetCases[][MAX_TOKEN_LEN]; - static const Collator::EComparisonResult results[]; - - Collator *myCollation; -}; - -#endif /* #if !UCONFIG_NO_COLLATION */ - -#endif diff --git a/icuSources/test/intltest/dadrcoll.cpp b/icuSources/test/intltest/dadrcoll.cpp index 738ed133..1b993840 100644 --- a/icuSources/test/intltest/dadrcoll.cpp +++ b/icuSources/test/intltest/dadrcoll.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -39,11 +39,13 @@ sequences(status) { driver = TestDataModule::getTestDataModule("DataDrivenCollationTest", *this, status); sequences.setDeleter(deleteSeqElement); + UCA = (RuleBasedCollator*)Collator::createInstance("root", status); } DataDrivenCollatorTest::~DataDrivenCollatorTest() { delete driver; + delete UCA; } void DataDrivenCollatorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par */) @@ -162,7 +164,7 @@ DataDrivenCollatorTest::processArguments(Collator *col, const UChar *start, int3 } } -void +void DataDrivenCollatorTest::processTest(TestData *testData) { Collator *col = NULL; const UChar *arguments = NULL; @@ -201,7 +203,21 @@ DataDrivenCollatorTest::processTest(TestData *testData) { errln("No collator definition!"); } } - if(col != NULL) { + + int32_t cloneSize = 0; + uint8_t* cloneBuf = NULL; + RuleBasedCollator* clone = NULL; + if(col != NULL){ + RuleBasedCollator* rbc = (RuleBasedCollator*)col; + cloneSize = rbc->cloneBinary(NULL, 0, intStatus); + intStatus = U_ZERO_ERROR; + cloneBuf = (uint8_t*) malloc(cloneSize); + cloneSize = rbc->cloneBinary(cloneBuf, cloneSize, intStatus); + clone = new RuleBasedCollator(cloneBuf, cloneSize, UCA, intStatus); + if(U_FAILURE(intStatus)){ + errln("Could not clone the RuleBasedCollator. Error: %s", u_errorName(intStatus)); + intStatus= U_ZERO_ERROR; + } // get attributes testSetting = settings->getString("Arguments", intStatus); if(U_SUCCESS(intStatus)) { @@ -209,6 +225,9 @@ DataDrivenCollatorTest::processTest(TestData *testData) { argLen = testSetting.length(); arguments = testSetting.getBuffer(); processArguments(col, arguments, argLen); + if(clone != NULL){ + processArguments(clone, arguments, argLen); + } if(U_FAILURE(status)) { errln("Couldn't process arguments"); break; @@ -221,16 +240,22 @@ DataDrivenCollatorTest::processTest(TestData *testData) { UnicodeString sequence = currentCase->getString("sequence", status); if(U_SUCCESS(status)) { processSequence(col, sequence); + if(clone != NULL){ + processSequence(clone, sequence); + } } } } else { errln("Couldn't instantiate a collator!"); } + delete clone; + free(cloneBuf); delete col; col = NULL; } } + void DataDrivenCollatorTest::processSequence(Collator* col, const UnicodeString &sequence) { Collator::EComparisonResult relation = Collator::EQUAL; diff --git a/icuSources/test/intltest/dadrcoll.h b/icuSources/test/intltest/dadrcoll.h index c9e99257..b76f40db 100644 --- a/icuSources/test/intltest/dadrcoll.h +++ b/icuSources/test/intltest/dadrcoll.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -51,6 +51,7 @@ private: TestDataModule *driver; UErrorCode status; UVector sequences; + RuleBasedCollator *UCA; // needed for opening collators from binary images }; #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/intltest/dcfmapts.cpp b/icuSources/test/intltest/dcfmapts.cpp index 8a798dac..792385da 100644 --- a/icuSources/test/intltest/dcfmapts.cpp +++ b/icuSources/test/intltest/dcfmapts.cpp @@ -26,11 +26,13 @@ void IntlTestDecimalFormatAPI::runIndexedTest( int32_t index, UBool exec, const if (exec) { logln((UnicodeString)"DecimalFormat API test---"); logln((UnicodeString)""); UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; Locale::setDefault(Locale::getEnglish(), status); if(U_FAILURE(status)) { errln((UnicodeString)"ERROR: Could not set default locale, test may not give correct results"); } testAPI(/*par*/); + Locale::setDefault(saveLocale, status); } break; case 1: name = "Rounding test"; diff --git a/icuSources/test/intltest/dtfmapts.cpp b/icuSources/test/intltest/dtfmapts.cpp index 971213c2..db443f1e 100644 --- a/icuSources/test/intltest/dtfmapts.cpp +++ b/icuSources/test/intltest/dtfmapts.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -29,11 +29,13 @@ void IntlTestDateFormatAPI::runIndexedTest( int32_t index, UBool exec, const cha if (exec) { logln("DateFormat API test---"); logln(""); UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; Locale::setDefault(Locale::getEnglish(), status); if(U_FAILURE(status)) { errln("ERROR: Could not set default locale, test may not give correct results"); } testAPI(/*par*/); + Locale::setDefault(saveLocale, status); } break; @@ -67,6 +69,13 @@ void IntlTestDateFormatAPI::TestEquals(void) while (Calendar::getNow() == start) ; // Wait for time to change DateFormat *b = DateFormat::createInstance(); + if (a == NULL || b == NULL){ + dataerrln("Error calling DateFormat::createInstance()"); + delete a; + delete b; + return; + } + if (!(*a == *b)) errln("FAIL: DateFormat objects created at different times are unequal."); @@ -100,16 +109,23 @@ void IntlTestDateFormatAPI::testAPI(/* char* par */) DateFormat *it = DateFormat::createDateInstance(DateFormat::MEDIUM, Locale::getItalian()); DateFormat *de = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG, Locale::getGerman()); -// ======= Test equality + if (def == NULL || fr == NULL || it == NULL || de == NULL){ + dataerrln("Error creating instnaces."); + } +// ======= Test equality +if (fr != NULL && def != NULL) +{ logln("Testing equality operator"); if( *fr == *it ) { errln("ERROR: == failed"); } +} // ======= Test various format() methods - +if (fr != NULL && it != NULL && de != NULL) +{ logln("Testing various format() methods"); UDate d = 837039928046.0; @@ -130,9 +146,11 @@ void IntlTestDateFormatAPI::testAPI(/* char* par */) res3 = de->format(d, res3); logln( (UnicodeString) "" + d + " formatted to " + res3); +} // ======= Test parse() - +if (def != NULL) +{ logln("Testing parse()"); UnicodeString text("02/03/76 2:50 AM, CST"); @@ -155,10 +173,11 @@ void IntlTestDateFormatAPI::testAPI(/* char* par */) result3 = def->parse(text, pos01); logln(text + " parsed into " + result3); - +} // ======= Test getters and setters - +if (fr != NULL && it != NULL && de != NULL) +{ logln("Testing getters and setters"); int32_t count = 0; @@ -198,7 +217,7 @@ void IntlTestDateFormatAPI::testAPI(/* char* par */) if( de->getTimeZone() != it->getTimeZone()) { errln("ERROR: adopt or set TimeZone() failed"); } - +} // ======= Test getStaticClassID() logln("Testing getStaticClassID()"); diff --git a/icuSources/test/intltest/dtfmrgts.cpp b/icuSources/test/intltest/dtfmrgts.cpp index 6e007bcb..b4d5ee4a 100644 --- a/icuSources/test/intltest/dtfmrgts.cpp +++ b/icuSources/test/intltest/dtfmrgts.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -69,8 +69,15 @@ void DateFormatRegressionTest::Test4029195(void) logln((UnicodeString) "today: " + today); SimpleDateFormat *sdf = (SimpleDateFormat*) DateFormat::createDateInstance(); - failure(status, "SimpleDateFormat::createDateInstance"); + if (failure(status, "SimpleDateFormat::createDateInstance")) { + return; + } UnicodeString pat; + if(sdf == NULL){ + dataerrln("Error calling DateFormat::createDateTimeInstance"); + return; + } + pat = sdf->toPattern(pat); logln("pattern: " + pat); UnicodeString fmtd; @@ -114,6 +121,11 @@ void DateFormatRegressionTest::Test4052408(void) DateFormat *fmt = DateFormat::createDateTimeInstance(DateFormat::SHORT, DateFormat::SHORT, Locale::getUS()); + if (fmt == NULL) { + dataerrln("Error calling DateFormat::createDateTimeInstance"); + return; + } + UDate dt = date(97, UCAL_MAY, 3, 8, 55); UnicodeString str; str = fmt->format(dt, str); @@ -267,7 +279,7 @@ void DateFormatRegressionTest::Test4059917(void) UnicodeString myDate; fmt = new SimpleDateFormat( UnicodeString("yyyy/MM/dd"), status ); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; myDate = "1997/01/01"; aux917( fmt, myDate ); @@ -275,7 +287,7 @@ void DateFormatRegressionTest::Test4059917(void) fmt = NULL; fmt = new SimpleDateFormat( UnicodeString("yyyyMMdd"), status ); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; myDate = "19970101"; aux917( fmt, myDate ); @@ -323,12 +335,18 @@ void DateFormatRegressionTest::Test4060212(void) logln("Using yyyy-DDD.hh:mm:ss"); UErrorCode status = U_ZERO_ERROR; SimpleDateFormat *formatter = new SimpleDateFormat(UnicodeString("yyyy-DDD.hh:mm:ss"), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; ParsePosition pos(0); UDate myDate = formatter->parse( dateString, pos ); UnicodeString myString; DateFormat *fmt = DateFormat::createDateTimeInstance( DateFormat::FULL, DateFormat::LONG); + if (fmt == NULL) { + dataerrln("Error calling DateFormat::createDateTimeInstance"); + delete formatter; + return; + } + myString = fmt->format( myDate, myString); logln( myString ); @@ -344,7 +362,7 @@ void DateFormatRegressionTest::Test4060212(void) delete formatter; formatter = NULL; formatter = new SimpleDateFormat(UnicodeString("yyyy-ddd.hh:mm:ss"), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; pos.setIndex(0); myDate = formatter->parse( dateString, pos ); myString = fmt->format( myDate, myString ); @@ -417,7 +435,16 @@ void DateFormatRegressionTest::Test4065240(void) TimeZone::adoptDefault(TimeZone::createTimeZone("EST")); curDate = date(98, 0, 1); shortdate = DateFormat::createDateInstance(DateFormat::SHORT); + if (shortdate == NULL){ + dataerrln("Error calling DateFormat::createDateInstance"); + return; + } + fulldate = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG); + if (fulldate == NULL){ + dataerrln("Error calling DateFormat::createDateTimeInstance"); + return; + } strShortDate = "The current date (short form) is "; UnicodeString temp; temp = shortdate->format(curDate, temp); @@ -454,7 +481,6 @@ void DateFormatRegressionTest::Test4065240(void) failure(status, "Locale::setDefault"); TimeZone::setDefault(*saveZone); //} - delete shortdate; delete fulldate; delete saveZone; @@ -478,7 +504,14 @@ void DateFormatRegressionTest::Test4071441(void) { DateFormat *fmtA = DateFormat::createInstance(); DateFormat *fmtB = DateFormat::createInstance(); - + + if (fmtA == NULL || fmtB == NULL){ + dataerrln("Error calling DateFormat::createInstance"); + delete fmtA; + delete fmtB; + return; + } + // {sfb} Is it OK to cast away const here? Calendar *calA = (Calendar*) fmtA->getCalendar(); Calendar *calB = (Calendar*) fmtB->getCalendar(); @@ -670,7 +703,7 @@ void DateFormatRegressionTest::Test4101483(void) { UErrorCode status = U_ZERO_ERROR; SimpleDateFormat *sdf = new SimpleDateFormat(UnicodeString("z"), Locale::getUS(), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; FieldPosition fp(UDAT_TIMEZONE_FIELD); //Date d = date(9234567890L); UDate d = 9234567890.0; @@ -703,7 +736,7 @@ void DateFormatRegressionTest::Test4103340(void) // and some arbitrary time UDate d = date(97, 3, 1, 1, 1, 1); SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("MMMM"), Locale::getUS(), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; UnicodeString s; s = dateToString(d, s); @@ -762,7 +795,7 @@ void DateFormatRegressionTest::Test4104136(void) delete sdf; return; } - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; UnicodeString pattern = "'time' hh:mm"; sdf->applyPattern(pattern); logln("pattern: \"" + pattern + "\""); @@ -969,7 +1002,7 @@ void DateFormatRegressionTest::Test4134203(void) UErrorCode status = U_ZERO_ERROR; UnicodeString dateFormat = "MM/dd/yy HH:mm:ss zzz"; SimpleDateFormat *fmt = new SimpleDateFormat(dateFormat, status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; ParsePosition p0(0); UDate d = fmt->parse("01/22/92 04:52:00 GMT", p0); logln(dateToString(d)); @@ -991,7 +1024,7 @@ void DateFormatRegressionTest::Test4151631(void) logln("pattern=" + pattern); UErrorCode status = U_ZERO_ERROR; SimpleDateFormat *format = new SimpleDateFormat(pattern, Locale::getUS(), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; UnicodeString result; FieldPosition pos(FieldPosition::DONT_CARE); result = format->format(date(1998-1900, UCAL_JUNE, 30, 13, 30, 0), result, pos); @@ -1015,7 +1048,7 @@ void DateFormatRegressionTest::Test4151706(void) UnicodeString dateString("Thursday, 31-Dec-98 23:00:00 GMT"); UErrorCode status = U_ZERO_ERROR; SimpleDateFormat fmt(UnicodeString("EEEE, dd-MMM-yy HH:mm:ss z"), Locale::getUS(), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; //try { UDate d = fmt.parse(dateString, status); failure(status, "fmt->parse"); @@ -1042,8 +1075,10 @@ DateFormatRegressionTest::Test4162071(void) UnicodeString format("EEE', 'dd-MMM-yyyy HH:mm:ss z"); // RFC 822/1123 UErrorCode status = U_ZERO_ERROR; SimpleDateFormat df(format, Locale::getUS(), status); - if(U_FAILURE(status)) + if(U_FAILURE(status)) { errln("Couldn't create SimpleDateFormat"); + return; + } //try { UDate x = df.parse(dateString, status); @@ -1197,6 +1232,11 @@ void DateFormatRegressionTest::Test714(void) DateFormat *fmt = DateFormat::createDateTimeInstance(DateFormat::NONE, DateFormat::MEDIUM, Locale::getUS()); + if (fmt == NULL) { + dataerrln("Error calling DateFormat::createDateTimeInstance"); + return; + } + UnicodeString s; UnicodeString tests = (UnicodeString) "7:25:43 AM" ; @@ -1284,6 +1324,15 @@ void DateFormatRegressionTest::Test1684(void) UnicodeString pattern("yyyy MM WW EEE",""); Calendar *cal = new GregorianCalendar(status); SimpleDateFormat *sdf = new SimpleDateFormat(pattern,status); + if (U_FAILURE(status)) { + dataerrln("Error constructing SimpleDateFormat"); + for(i=0;isetFirstDayOfWeek(UCAL_SUNDAY); cal->setMinimalDaysInFirstWeek(1); @@ -1368,7 +1417,7 @@ void DateFormatRegressionTest::Test1684(void) } else { logln(info); } - + for(i=0;i 0, we don't run each exhaustive possibility. // There are 24 total possible tests per each locale. A SPARSENESS @@ -54,6 +54,7 @@ DateFormatRoundTripTest::runIndexedTest( int32_t index, UBool exec, const char* optionv = (par && *par=='v'); switch (index) { CASE(0,TestDateFormatRoundTrip) + CASE(1, TestCentury) default: name = ""; break; } } @@ -82,6 +83,26 @@ DateFormatRoundTripTest::failure(UErrorCode status, const char* msg, const Unico return FALSE; } +void DateFormatRoundTripTest::TestCentury() +{ + UErrorCode status = U_ZERO_ERROR; + Locale locale("es_PA"); + UnicodeString pattern = "MM/dd/yy hh:mm:ss a z"; + SimpleDateFormat fmt(pattern, locale, status); + if(!assertSuccess("trying to construct", status))return; + UDate date[] = {-55018555891590.05, 0, 0}; + UnicodeString result[2]; + + fmt.format(date[0], result[0]); + date[1] = fmt.parse(result[0], status); + fmt.format(date[1], result[1]); + date[2] = fmt.parse(result[1], status); + + if (date[1] != date[2] || result[0] != result[1]) { + errln("Round trip failure: \"%S\" (%f), \"%S\" (%f)", result[0].getBuffer(), date[1], result[1].getBuffer(), date[2]); + } +} + // == void DateFormatRoundTripTest::TestDateFormatRoundTrip() @@ -90,6 +111,7 @@ void DateFormatRoundTripTest::TestDateFormatRoundTrip() getFieldCal = Calendar::createInstance(status); failure(status, "Calendar::createInstance"); + if(!assertSuccess("trying to construct", status))return; int32_t locCount = 0; @@ -255,7 +277,7 @@ void DateFormatRoundTripTest::test(DateFormat *fmt, const Locale &origLocale, UB // patterns we have, but it may be a problem later. UBool hasEra = (pat.indexOf(UnicodeString("G")) != -1); - UBool hasZone = (pat.indexOf(UnicodeString("z")) != -1); + UBool hasZone = (pat.indexOf(UnicodeString("Z")) != -1) || (pat.indexOf(UnicodeString("z")) != -1) || (pat.indexOf(UnicodeString("v")) != -1); // Because patterns contain incomplete data representing the Date, // we must be careful of how we do the roundtrip. We start with @@ -289,7 +311,7 @@ void DateFormatRoundTripTest::test(DateFormat *fmt, const Locale &origLocale, UB for(loop = 0; loop < DEPTH; ++loop) { if (loop > 0) { d[loop] = fmt->parse(s[loop-1], status); - failure(status, "fmt->parse", s[loop-1]); + failure(status, "fmt->parse", s[loop-1]+" in locale: " + origLocale.getName()); status = U_ZERO_ERROR; /* any error would have been reported */ } diff --git a/icuSources/test/intltest/dtfmtrtts.h b/icuSources/test/intltest/dtfmtrtts.h index 62db9e42..1749d0e6 100644 --- a/icuSources/test/intltest/dtfmtrtts.h +++ b/icuSources/test/intltest/dtfmtrtts.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -30,6 +30,7 @@ public: virtual ~DateFormatRoundTripTest(); void TestDateFormatRoundTrip(void); + void TestCentury(void); void test(const Locale& loc); void test(DateFormat *fmt, const Locale &origLocale, UBool timeOnly = FALSE ); int32_t getField(UDate d, int32_t f); diff --git a/icuSources/test/intltest/dtfmttst.cpp b/icuSources/test/intltest/dtfmttst.cpp index 9a215aa0..7d18605e 100644 --- a/icuSources/test/intltest/dtfmttst.cpp +++ b/icuSources/test/intltest/dtfmttst.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -19,6 +19,21 @@ #include "cmemory.h" #include "cstring.h" #include "caltest.h" // for fieldName + +#ifdef U_WINDOWS +#include "windttst.h" +#endif + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define ASSERT_OK(status) if(U_FAILURE(status)) {errln(#status " = %s", u_errorName(status)); return; } + +//-------------------------------------------------------------------- +// Time bomb - allows temporary behavior that expires at a given +// release +//-------------------------------------------------------------------- +static const UVersionInfo ICU_37 = {3,7,0,0}; + // ***************************************************************************** // class DateFormatTest // ***************************************************************************** @@ -51,6 +66,15 @@ void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &nam TESTCASE(21,TestInvalidPattern); TESTCASE(22,TestGeneral); TESTCASE(23,TestGreekMay); + TESTCASE(24,TestGenericTime); + TESTCASE(25,TestGenericTimeZoneOrder); + TESTCASE(26,TestTimeZoneStringsAPI); + TESTCASE(27,TestHost); + TESTCASE(28,TestEras); + TESTCASE(29,TestNarrowNames); + TESTCASE(30,TestStandAloneDays); + TESTCASE(31,TestStandAloneMonths); + TESTCASE(32,TestQuarters); default: name = ""; break; } } @@ -162,9 +186,19 @@ DateFormatTest::TestEquals() { DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL); DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL); + if ( fmtA == NULL || fmtB == NULL){ + dataerrln("Error calling DateFormat::createDateTimeInstance"); + delete fmtA; + delete fmtB; + return; + } + if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL"); delete fmtA; delete fmtB; + + TimeZone* test = TimeZone::createTimeZone("PDT"); + delete test; } // ------------------------------------- @@ -180,15 +214,29 @@ DateFormatTest::TestTwoDigitYearDSTParse(void) SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status); //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH); UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", ""); - int32_t hour = 2; - + TimeZone* defaultTZ = TimeZone::createDefault(); + TimeZone* PST = TimeZone::createTimeZone("PST"); + int32_t defaultOffset = defaultTZ->getRawOffset(); + int32_t PSTOffset = PST->getRawOffset(); + int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000); + // hour is the expected hour of day, in units of seconds + hour = ((hour < 0) ? hour + 24 : hour) * 60*60; + UnicodeString str; + + if(U_FAILURE(status)) { + errln("Could not set up test. exitting"); + return; + } + UDate d = fmt->parse(*s, status); logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str)); int32_t y, m, day, hr, min, sec; dateToFields(d, y, m, day, hr, min, sec); + hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0; + hr = hr*60*60; if (hr != hour) - errln((UnicodeString)"FAIL: Should parse to hour " + hour); + errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr); if (U_FAILURE(status)) errln((UnicodeString)"FAIL: " + (int32_t)status); @@ -196,6 +244,8 @@ DateFormatTest::TestTwoDigitYearDSTParse(void) delete s; delete fmt; delete fullFmt; + delete PST; + delete defaultTZ; } // ------------------------------------- @@ -226,7 +276,7 @@ DateFormatTest::escape(UnicodeString& s) /** * This MUST be kept in sync with DateFormatSymbols.gPatternChars. */ -static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZ"; +static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQq"; /** * A list of the names of all the fields in DateFormat. @@ -256,7 +306,12 @@ static const char* DATEFORMAT_FIELD_NAMES[] = { "EXTENDED_YEAR_FIELD", "JULIAN_DAY_FIELD", "MILLISECONDS_IN_DAY_FIELD", - "TIMEZONE_RFC_FIELD" + "TIMEZONE_RFC_FIELD", + "GENERIC_TIMEZONE_FIELD", + "STAND_ALONE_DAY_FIELD", + "STAND_ALONE_MONTH_FIELD", + "QUARTER_FIELD", + "STAND_ALONE_QUARTER_FIELD" }; static const int32_t DATEFORMAT_FIELD_NAMES_LENGTH = @@ -273,7 +328,13 @@ void DateFormatTest::TestFieldPosition() { // Verify data DateFormatSymbols rootSyms(Locale(""), ec); assertSuccess("DateFormatSymbols", ec); - assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf)); + + // local pattern chars not accurate when CLDR 1.4 data + // first introduced... + if(isICUVersionAtLeast(ICU_37)) { + assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf)); + } + assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars()); assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT); assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS)); @@ -294,23 +355,27 @@ void DateFormatTest::TestFieldPosition() { } } dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec); - + if(U_FAILURE(ec)){ + errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec))); + return; + } UDate aug13 = 871508052513.0; // Expected output field values for above DateFormats on aug13 // Fields are given in order of DateFormat field number const char* EXPECTED[] = { "", "1997", "August", "13", "", "", "34", "12", "", - "Wednesday", "", "", "", "", "PM", "2", "", "PDT", "", "", "", "", "", "", + "Wednesday", "", "", "", "", "PM", "2", "", "", "", "", "", "", "", "", "PT", "", "", "", "", "", "1997", "ao\\u00FBt", "13", "", "14", "34", "", "", - "mercredi", "", "", "", "", "", "", "", "HAP (\\u00C9UA)", "", "", "", "", "", "", + "mercredi", "", "", "", "", "", "", "", "HAP (\\u00C9UA)", "", "", "", "", "", "", "", "", "", "", "", "AD", "1997", "8", "13", "14", "14", "34", "12", "5", - "Wed", "225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4", "1997", "2450674", "52452513", "-0700", + "Wed", "225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4", "1997", "2450674", "52452513", "-0700", "PT", "4", "8", "3", "3", - "AD", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130", + "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130", "Wednesday", "0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "0004", "1997", "2450674", "52452513", "-0700", + "Pacific Time", "Wednesday", "August", "3rd quarter", "3rd quarter" }; const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]); @@ -331,7 +396,8 @@ void DateFormatTest::TestFieldPosition() { for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) { FieldPosition pos(i); - df->format(aug13, buf.remove(), pos); + buf.remove(); + df->format(aug13, buf, pos); UnicodeString field; buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field); assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i], @@ -360,7 +426,7 @@ void DateFormatTest::TestGeneral() { "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567", "y/M/d H:mm:ss.SSSS", "pf", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.568", "2004/3/10 16:36:31.5680", }; - expect(DATA, sizeof(DATA)/sizeof(DATA[0]), Locale("en", "", "")); + expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", "")); } // ------------------------------------- @@ -375,6 +441,7 @@ DateFormatTest::TestPartialParse994() { UErrorCode status = U_ZERO_ERROR; SimpleDateFormat* f = new SimpleDateFormat(status); + ASSERT_OK(status); UDate null = 0; tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42)); tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null); @@ -436,6 +503,7 @@ DateFormatTest::TestRunTogetherPattern985() UnicodeString now, then; //UBool flag; SimpleDateFormat *formatter = new SimpleDateFormat(format, status); + ASSERT_OK(status); UDate date1 = Calendar::getNow(); ((DateFormat*)formatter)->format(date1, now); logln(now); @@ -462,6 +530,7 @@ DateFormatTest::TestRunTogetherPattern917() SimpleDateFormat* fmt; UnicodeString myDate; fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status); + ASSERT_OK(status); myDate = "1997/02/03"; testIt917(fmt, myDate, date(97, 2 - 1, 3)); delete fmt; @@ -508,6 +577,11 @@ DateFormatTest::TestCzechMonths459() { UErrorCode status = U_ZERO_ERROR; DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", "")); + if (fmt == NULL){ + dataerrln("Error calling DateFormat::createDateInstance()"); + return; + } + UnicodeString pattern; logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern)); UDate june = date(97, UCAL_JUNE, 15); @@ -552,12 +626,14 @@ DateFormatTest::TestLetterDPattern212() expLittleD = expBigD; // Expect the same, with default lenient parsing logln((UnicodeString)"dateString= " + dateString); SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status); + ASSERT_OK(status); ParsePosition pos(0); UDate myDate = formatter->parse(dateString, pos); logln((UnicodeString)"Using " + bigD + " -> " + myDate); if (myDate != expBigD) errln((UnicodeString)"FAIL: Expected " + dateToString(expBigD)); delete formatter; formatter = new SimpleDateFormat(littleD, status); + ASSERT_OK(status); pos = ParsePosition(0); myDate = formatter->parse(dateString, pos); logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate)); @@ -580,6 +656,10 @@ DateFormatTest::TestDayOfYearPattern195() UDate expected = date(year, month, day); logln((UnicodeString)"Test Date: " + dateToString(today)); SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance(); + if (sdf == NULL){ + dataerrln("Error calling DateFormat::createDateInstance()"); + return; + } tryPattern(*sdf, today, 0, expected); tryPattern(*sdf, today, "G yyyy DDD", expected); delete sdf; @@ -621,6 +701,7 @@ DateFormatTest::TestQuotePattern161() { UErrorCode status = U_ZERO_ERROR; SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status); + ASSERT_OK(status); UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28); UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString); UnicodeString exp("08/13/1997 at 10:42:28 AM "); @@ -648,6 +729,10 @@ DateFormatTest::TestBadInput135() }; int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0])); DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG); + if(full==NULL) { + errln("could not create date time instance"); + return; + } UnicodeString expected("March 1, 2000 1:23:45 AM "); for (int32_t i = 0; i < strings_length;++i) { const char* text = strings[i]; @@ -656,6 +741,10 @@ DateFormatTest::TestBadInput135() for (int32_t k = 0; k < looks_length;++k) { DateFormat::EStyle timeLook = looks[k]; DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook); + if (df == NULL){ + dataerrln("Error calling DateFormat::createDateTimeInstance()"); + continue; + } UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": "; //try { UDate when = df->parse(text, status); @@ -905,11 +994,11 @@ DateFormatTest::TestDateFormatZone146() UDate greenwichdate = greenwichcalendar->getTime(status); // format every way UnicodeString DATA [] = { - UnicodeString("simple format: "), UnicodeString("04/04/97 23:00 GMT"), + UnicodeString("simple format: "), UnicodeString("04/04/97 23:00 GMT+00:00"), UnicodeString("MM/dd/yy HH:mm z"), - UnicodeString("full format: "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT"), + UnicodeString("full format: "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT+00:00"), UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"), - UnicodeString("long format: "), UnicodeString("April 4, 1997 11:00:00 PM GMT"), + UnicodeString("long format: "), UnicodeString("April 4, 1997 11:00:00 PM GMT+00:00"), UnicodeString("MMMM d, yyyy h:mm:ss a z"), UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"), UnicodeString("dd-MMM-yy h:mm:ss a"), @@ -956,9 +1045,16 @@ DateFormatTest::TestLocaleDateFormat() // Bug 495 UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00 h 00 HAP (\\u00C9UA)" ); expectedFRENCH = expectedFRENCH.unescape(); //UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 o'clock AM PDT" ); - UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 AM PDT" ); + UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 AM PT" ); logln((UnicodeString)"Date set to : " + dateToString(testDate)); UnicodeString out; + if (dfUS == NULL || dfFrench == NULL){ + dataerrln("Error calling DateFormat::createDateTimeInstance)"); + delete dfUS; + delete dfFrench; + return; + } + dfFrench->format(testDate, out); logln((UnicodeString)"Date Formated with French Locale " + out); if (!(out == expectedFRENCH)) @@ -1119,6 +1215,7 @@ void DateFormatTest::TestWhiteSpaceParsing() { void DateFormatTest::TestInvalidPattern() { UErrorCode ec = U_ZERO_ERROR; SimpleDateFormat f(UnicodeString("Yesterday"), ec); + ASSERT_OK(ec); UnicodeString out; FieldPosition pos; f.format((UDate)0, out, pos); @@ -1141,6 +1238,273 @@ void DateFormatTest::TestGreekMay() { } } +void DateFormatTest::TestStandAloneMonths() +{ + const char *EN_DATA[] = { + "yyyy MM dd HH:mm:ss", + + "yyyy LLLL dd H:mm:ss", "fp", "2004 03 10 16:36:31", "2004 March 10 16:36:31", "2004 03 10 16:36:31", + "yyyy LLL dd H:mm:ss", "fp", "2004 03 10 16:36:31", "2004 Mar 10 16:36:31", "2004 03 10 16:36:31", + "yyyy LLLL dd H:mm:ss", "F", "2004 03 10 16:36:31", "2004 March 10 16:36:31", + "yyyy LLL dd H:mm:ss", "pf", "2004 Mar 10 16:36:31", "2004 03 10 16:36:31", "2004 Mar 10 16:36:31", + + "LLLL", "fp", "1970 01 01 0:00:00", "January", "1970 01 01 0:00:00", + "LLLL", "fp", "1970 02 01 0:00:00", "February", "1970 02 01 0:00:00", + "LLLL", "fp", "1970 03 01 0:00:00", "March", "1970 03 01 0:00:00", + "LLLL", "fp", "1970 04 01 0:00:00", "April", "1970 04 01 0:00:00", + "LLLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00", + "LLLL", "fp", "1970 06 01 0:00:00", "June", "1970 06 01 0:00:00", + "LLLL", "fp", "1970 07 01 0:00:00", "July", "1970 07 01 0:00:00", + "LLLL", "fp", "1970 08 01 0:00:00", "August", "1970 08 01 0:00:00", + "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00", + "LLLL", "fp", "1970 10 01 0:00:00", "October", "1970 10 01 0:00:00", + "LLLL", "fp", "1970 11 01 0:00:00", "November", "1970 11 01 0:00:00", + "LLLL", "fp", "1970 12 01 0:00:00", "December", "1970 12 01 0:00:00", + + "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00", + "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00", + "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00", + "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00", + "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00", + "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00", + "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00", + "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00", + "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00", + "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00", + "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00", + "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00", + }; + + const char *CS_DATA[] = { + "yyyy MM dd HH:mm:ss", + + "yyyy LLLL dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 duben 10 16:36:31", "2004 04 10 16:36:31", + "yyyy MMMM dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31", "2004 04 10 16:36:31", + "yyyy LLL dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 4. 10 16:36:31", "2004 04 10 16:36:31", + "yyyy LLLL dd H:mm:ss", "F", "2004 04 10 16:36:31", "2004 duben 10 16:36:31", + "yyyy MMMM dd H:mm:ss", "F", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31", + "yyyy LLLL dd H:mm:ss", "pf", "2004 duben 10 16:36:31", "2004 04 10 16:36:31", "2004 duben 10 16:36:31", + "yyyy MMMM dd H:mm:ss", "pf", "2004 dubna 10 16:36:31", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31", + + "LLLL", "fp", "1970 01 01 0:00:00", "leden", "1970 01 01 0:00:00", + "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor", "1970 02 01 0:00:00", + "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen", "1970 03 01 0:00:00", + "LLLL", "fp", "1970 04 01 0:00:00", "duben", "1970 04 01 0:00:00", + "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten", "1970 05 01 0:00:00", + "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven", "1970 06 01 0:00:00", + "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec", "1970 07 01 0:00:00", + "LLLL", "fp", "1970 08 01 0:00:00", "srpen", "1970 08 01 0:00:00", + "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00", + "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen", "1970 10 01 0:00:00", + "LLLL", "fp", "1970 11 01 0:00:00", "listopad", "1970 11 01 0:00:00", + "LLLL", "fp", "1970 12 01 0:00:00", "prosinec", "1970 12 01 0:00:00", + + "LLL", "fp", "1970 01 01 0:00:00", "1.", "1970 01 01 0:00:00", + "LLL", "fp", "1970 02 01 0:00:00", "2.", "1970 02 01 0:00:00", + "LLL", "fp", "1970 03 01 0:00:00", "3.", "1970 03 01 0:00:00", + "LLL", "fp", "1970 04 01 0:00:00", "4.", "1970 04 01 0:00:00", + "LLL", "fp", "1970 05 01 0:00:00", "5.", "1970 05 01 0:00:00", + "LLL", "fp", "1970 06 01 0:00:00", "6.", "1970 06 01 0:00:00", + "LLL", "fp", "1970 07 01 0:00:00", "7.", "1970 07 01 0:00:00", + "LLL", "fp", "1970 08 01 0:00:00", "8.", "1970 08 01 0:00:00", + "LLL", "fp", "1970 09 01 0:00:00", "9.", "1970 09 01 0:00:00", + "LLL", "fp", "1970 10 01 0:00:00", "10.", "1970 10 01 0:00:00", + "LLL", "fp", "1970 11 01 0:00:00", "11.", "1970 11 01 0:00:00", + "LLL", "fp", "1970 12 01 0:00:00", "12.", "1970 12 01 0:00:00", + }; + + expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", "")); + expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", "")); +} + +void DateFormatTest::TestStandAloneDays() +{ + const char *EN_DATA[] = { + "yyyy MM dd HH:mm:ss", + + "cccc", "fp", "1970 01 04 0:00:00", "Sunday", "1970 01 04 0:00:00", + "cccc", "fp", "1970 01 05 0:00:00", "Monday", "1970 01 05 0:00:00", + "cccc", "fp", "1970 01 06 0:00:00", "Tuesday", "1970 01 06 0:00:00", + "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00", + "cccc", "fp", "1970 01 01 0:00:00", "Thursday", "1970 01 01 0:00:00", + "cccc", "fp", "1970 01 02 0:00:00", "Friday", "1970 01 02 0:00:00", + "cccc", "fp", "1970 01 03 0:00:00", "Saturday", "1970 01 03 0:00:00", + + "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00", + "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00", + "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00", + "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00", + "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00", + "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00", + "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00", + }; + + const char *CS_DATA[] = { + "yyyy MM dd HH:mm:ss", + + "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble", "1970 01 04 0:00:00", + "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00", + "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD", "1970 01 06 0:00:00", + "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda", "1970 01 07 0:00:00", + "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek", "1970 01 01 0:00:00", + "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek", "1970 01 02 0:00:00", + "cccc", "fp", "1970 01 03 0:00:00", "sobota", "1970 01 03 0:00:00", + + "ccc", "fp", "1970 01 04 0:00:00", "ne", "1970 01 04 0:00:00", + "ccc", "fp", "1970 01 05 0:00:00", "po", "1970 01 05 0:00:00", + "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00", + "ccc", "fp", "1970 01 07 0:00:00", "st", "1970 01 07 0:00:00", + "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00", + "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00", + "ccc", "fp", "1970 01 03 0:00:00", "so", "1970 01 03 0:00:00", + }; + + expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", "")); + expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", "")); +} + +void DateFormatTest::TestNarrowNames() +{ + const char *EN_DATA[] = { + "yyyy MM dd HH:mm:ss", + + "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31", + "yyyy LLLLL dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31", + + "MMMMM", "1970 01 01 0:00:00", "J", + "MMMMM", "1970 02 01 0:00:00", "F", + "MMMMM", "1970 03 01 0:00:00", "M", + "MMMMM", "1970 04 01 0:00:00", "A", + "MMMMM", "1970 05 01 0:00:00", "M", + "MMMMM", "1970 06 01 0:00:00", "J", + "MMMMM", "1970 07 01 0:00:00", "J", + "MMMMM", "1970 08 01 0:00:00", "A", + "MMMMM", "1970 09 01 0:00:00", "S", + "MMMMM", "1970 10 01 0:00:00", "O", + "MMMMM", "1970 11 01 0:00:00", "N", + "MMMMM", "1970 12 01 0:00:00", "D", + + "LLLLL", "1970 01 01 0:00:00", "J", + "LLLLL", "1970 02 01 0:00:00", "F", + "LLLLL", "1970 03 01 0:00:00", "M", + "LLLLL", "1970 04 01 0:00:00", "A", + "LLLLL", "1970 05 01 0:00:00", "M", + "LLLLL", "1970 06 01 0:00:00", "J", + "LLLLL", "1970 07 01 0:00:00", "J", + "LLLLL", "1970 08 01 0:00:00", "A", + "LLLLL", "1970 09 01 0:00:00", "S", + "LLLLL", "1970 10 01 0:00:00", "O", + "LLLLL", "1970 11 01 0:00:00", "N", + "LLLLL", "1970 12 01 0:00:00", "D", + + "EEEEE", "1970 01 04 0:00:00", "S", + "EEEEE", "1970 01 05 0:00:00", "M", + "EEEEE", "1970 01 06 0:00:00", "T", + "EEEEE", "1970 01 07 0:00:00", "W", + "EEEEE", "1970 01 01 0:00:00", "T", + "EEEEE", "1970 01 02 0:00:00", "F", + "EEEEE", "1970 01 03 0:00:00", "S", + + "ccccc", "1970 01 04 0:00:00", "S", + "ccccc", "1970 01 05 0:00:00", "M", + "ccccc", "1970 01 06 0:00:00", "T", + "ccccc", "1970 01 07 0:00:00", "W", + "ccccc", "1970 01 01 0:00:00", "T", + "ccccc", "1970 01 02 0:00:00", "F", + "ccccc", "1970 01 03 0:00:00", "S", + }; + + const char *CS_DATA[] = { + "yyyy MM dd HH:mm:ss", + + "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31", + "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31", + + "MMMMM", "1970 01 01 0:00:00", "l", + "MMMMM", "1970 02 01 0:00:00", "\\u00FA", + "MMMMM", "1970 03 01 0:00:00", "b", + "MMMMM", "1970 04 01 0:00:00", "d", + "MMMMM", "1970 05 01 0:00:00", "k", + "MMMMM", "1970 06 01 0:00:00", "\\u010D", + "MMMMM", "1970 07 01 0:00:00", "\\u010D", + "MMMMM", "1970 08 01 0:00:00", "s", + "MMMMM", "1970 09 01 0:00:00", "z", + "MMMMM", "1970 10 01 0:00:00", "\\u0159", + "MMMMM", "1970 11 01 0:00:00", "l", + "MMMMM", "1970 12 01 0:00:00", "p", + + "LLLLL", "1970 01 01 0:00:00", "l", + "LLLLL", "1970 02 01 0:00:00", "\\u00FA", + "LLLLL", "1970 03 01 0:00:00", "b", + "LLLLL", "1970 04 01 0:00:00", "d", + "LLLLL", "1970 05 01 0:00:00", "k", + "LLLLL", "1970 06 01 0:00:00", "\\u010D", + "LLLLL", "1970 07 01 0:00:00", "\\u010D", + "LLLLL", "1970 08 01 0:00:00", "s", + "LLLLL", "1970 09 01 0:00:00", "z", + "LLLLL", "1970 10 01 0:00:00", "\\u0159", + "LLLLL", "1970 11 01 0:00:00", "l", + "LLLLL", "1970 12 01 0:00:00", "p", + + "EEEEE", "1970 01 04 0:00:00", "N", + "EEEEE", "1970 01 05 0:00:00", "P", + "EEEEE", "1970 01 06 0:00:00", "\\u00DA", + "EEEEE", "1970 01 07 0:00:00", "S", + "EEEEE", "1970 01 01 0:00:00", "\\u010C", + "EEEEE", "1970 01 02 0:00:00", "P", + "EEEEE", "1970 01 03 0:00:00", "S", + + "ccccc", "1970 01 04 0:00:00", "N", + "ccccc", "1970 01 05 0:00:00", "P", + "ccccc", "1970 01 06 0:00:00", "\\u00DA", + "ccccc", "1970 01 07 0:00:00", "S", + "ccccc", "1970 01 01 0:00:00", "\\u010C", + "ccccc", "1970 01 02 0:00:00", "P", + "ccccc", "1970 01 03 0:00:00", "S", + }; + + expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", "")); + expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", "")); +} + +void DateFormatTest::TestEras() +{ + const char *EN_DATA[] = { + "yyyy MM dd", + + "MMMM dd yyyy G", "fp", "1951 07 17", "July 17 1951 AD", "1951 07 17", + "MMMM dd yyyy GG", "fp", "1951 07 17", "July 17 1951 AD", "1951 07 17", + "MMMM dd yyyy GGG", "fp", "1951 07 17", "July 17 1951 AD", "1951 07 17", + "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17", + + "MMMM dd yyyy G", "fp", "-438 07 17", "July 17 0439 BC", "-438 07 17", + "MMMM dd yyyy GG", "fp", "-438 07 17", "July 17 0439 BC", "-438 07 17", + "MMMM dd yyyy GGG", "fp", "-438 07 17", "July 17 0439 BC", "-438 07 17", + "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17", + }; + + expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", "")); +} + +void DateFormatTest::TestQuarters() +{ + const char *EN_DATA[] = { + "yyyy MM dd", + + "Q", "fp", "1970 01 01", "1", "1970 01 01", + "QQ", "fp", "1970 04 01", "02", "1970 04 01", + "QQQ", "fp", "1970 07 01", "Q3", "1970 07 01", + "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01", + + "q", "fp", "1970 01 01", "1", "1970 01 01", + "qq", "fp", "1970 04 01", "02", "1970 04 01", + "qqq", "fp", "1970 07 01", "Q3", "1970 07 01", + "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01", + }; + + expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", "")); +} + /** * Test parsing. Input is an array that starts with the following * header: @@ -1265,16 +1629,16 @@ void DateFormatTest::expect(const char** data, int32_t data_length, // 'f' const char* datestr = data[i++]; const char* string = data[i++]; - UDate date = ref.parse(datestr, ec); + UDate date = ref.parse(ctou(datestr), ec); if (!assertSuccess("parse", ec)) return; assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")", - string, + ctou(string), fmt.format(date, str.remove())); // 'p' datestr = data[i++]; - date = ref.parse(datestr, ec); + date = ref.parse(ctou(datestr), ec); if (!assertSuccess("parse", ec)) return; - UDate parsedate = fmt.parse(string, ec); + UDate parsedate = fmt.parse(ctou(string), ec); if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) { assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", univ.format(date, str.remove()), @@ -1286,9 +1650,9 @@ void DateFormatTest::expect(const char** data, int32_t data_length, // 'p' const char* string = data[i++]; const char* datestr = data[i++]; - UDate date = ref.parse(datestr, ec); + UDate date = ref.parse(ctou(datestr), ec); if (!assertSuccess("parse", ec)) return; - UDate parsedate = fmt.parse(string, ec); + UDate parsedate = fmt.parse(ctou(string), ec); if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) { assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", univ.format(date, str.remove()), @@ -1297,17 +1661,17 @@ void DateFormatTest::expect(const char** data, int32_t data_length, // 'f' string = data[i++]; assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")", - string, + ctou(string), fmt.format(date, str.remove())); } else if (uprv_strcmp(control, "F") == 0) { const char* datestr = data[i++]; const char* string = data[i++]; - UDate date = ref.parse(datestr, ec); + UDate date = ref.parse(ctou(datestr), ec); if (!assertSuccess("parse", ec)) return; assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")", - string, + ctou(string), fmt.format(date, str.remove())); UDate parsedate = fmt.parse(string, ec); @@ -1325,6 +1689,240 @@ void DateFormatTest::expect(const char** data, int32_t data_length, } } +/** + * Test formatting. Input is an array that starts + * with the following header: + * + * [0] = pattern string to parse [i+2] with + * + * followed by test cases, each of which is 3 array elements: + * + * [i] = pattern, or null to reuse prior pattern + * [i+1] = data string a + * [i+2] = data string b + * + * Examples: + * Format date [i+1] and expect string [i+2]. + * + * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567" + */ +void DateFormatTest::expectFormat(const char** data, int32_t data_length, + const Locale& loc) { + int32_t i = 0; + UErrorCode ec = U_ZERO_ERROR; + UnicodeString str, str2; + SimpleDateFormat fmt("", loc, ec); + SimpleDateFormat ref(data[i++], loc, ec); + SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec); + if (!assertSuccess("construct SimpleDateFormat", ec)) return; + + UnicodeString currentPat; + + while (i 1:30a PST (later) + "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST", + "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PDT", + "y/M/d H:mm vvv", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT", // 1:30a PT -> 1:30a PST (later) + "y/M/d H:mm vvv", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT", + "y/M/d H:mm vvv", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PT", + "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30", // 1:30a PT -> 1:30a PST (later) + }; + const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]); + expect(ZDATA, ZDATA_length, en); + + UErrorCode status = U_ZERO_ERROR; + + logln("cross format/parse tests"); + UnicodeString basepat("yy/MM/dd H:mm "); + SimpleDateFormat formats[] = { + SimpleDateFormat(basepat + "vvv", en, status), + SimpleDateFormat(basepat + "vvvv", en, status), + SimpleDateFormat(basepat + "zzz", en, status), + SimpleDateFormat(basepat + "zzzz", en, status) + }; + ASSERT_OK(status); + const int32_t formats_length = sizeof(formats)/sizeof(formats[0]); + + UnicodeString test; + SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status); + ASSERT_OK(status); + const UnicodeString times[] = { + "2004 01 02 03:04 PST", + "2004 07 08 09:10 PDT" + }; + int32_t times_length = sizeof(times)/sizeof(times[0]); + for (int i = 0; i < times_length; ++i) { + UDate d = univ.parse(times[i], status); + logln(UnicodeString("\ntime: ") + d); + for (int j = 0; j < formats_length; ++j) { + test.remove(); + formats[j].format(d, test); + logln("\ntest: '" + test + "'"); + for (int k = 0; k < formats_length; ++k) { + UDate t = formats[k].parse(test, status); + if (U_SUCCESS(status)) { + if (d != t) { + errln((UnicodeString)"FAIL: format " + k + + " incorrectly parsed output of format " + j + + " (" + test + "), returned " + + dateToString(t) + " instead of " + dateToString(d)); + } else { + logln((UnicodeString)"OK: format " + k + " parsed ok"); + } + } else if (status == U_PARSE_ERROR) { + errln((UnicodeString)"FAIL: format " + k + + " could not parse output of format " + j + + " (" + test + ")"); + } + } + } + } +} + +void DateFormatTest::TestGenericTimeZoneOrder() { + // generic times should parse the same no matter what the placement of the time zone string + // should work for standard and daylight times + + const char* XDATA[] = { + "yyyy MM dd HH:mm zzz", + // standard time, explicit daylight/standard + "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST", + "y/M/d zzz H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00", + "zzz y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00", + + // standard time, generic + "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time", + "y/M/d vvvv H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00", + "vvvv y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00", + + // dahylight time, explicit daylight/standard + "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT", + "y/M/d zzz H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00", + "zzz y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00", + + // daylight time, generic + "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time", + "y/M/d vvvv H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 Pacific Time 1:00", + "vvvv y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "Pacific Time 2004/7/1 1:00", + }; + const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]); + Locale en("en"); + expect(XDATA, XDATA_length, en); +} + +void DateFormatTest::TestTimeZoneStringsAPI() { + // Verify data + UErrorCode status = U_ZERO_ERROR; + DateFormatSymbols symbols(Locale::getUS(), status); + StringEnumeration* keys = symbols.createZoneStringIDs(status); + if(U_FAILURE(status)){ + errln("Could not create the StringEnumeration for Locale::getUS(). Error: %s", u_errorName(status)); + return; + } + + StringEnumeration* keys2 = symbols.createZoneStringIDs(status); + ASSERT_OK(status); + if(*keys2!=*keys){ + errln("operator!= failed for TimeZoneStringsEnum"); + } + const UnicodeString* key = NULL; + + while( (key = keys->snext(status))!=NULL){ + logln(prettify(*key)); + } + if(U_FAILURE(status)){ + errln("Could not iterate over the StringEnumeration. Error: %s", u_errorName(status)); + return; + } + UnicodeString expectedKey("America/Los_Angeles"); + UnicodeString expectedStrs[DateFormatSymbols::TIMEZONE_COUNT]; + expectedStrs[DateFormatSymbols::TIMEZONE_SHORT_GENERIC].setTo("PT"); + expectedStrs[DateFormatSymbols::TIMEZONE_SHORT_STANDARD].setTo("PST"); + expectedStrs[DateFormatSymbols::TIMEZONE_SHORT_DAYLIGHT].setTo("PDT"); + expectedStrs[DateFormatSymbols::TIMEZONE_LONG_GENERIC].setTo("Pacific Time"); + expectedStrs[DateFormatSymbols::TIMEZONE_LONG_STANDARD].setTo("Pacific Standard Time"); + expectedStrs[DateFormatSymbols::TIMEZONE_LONG_DAYLIGHT].setTo("Pacific Daylight Time"); + expectedStrs[DateFormatSymbols::TIMEZONE_EXEMPLAR_CITY].setTo("Los Angeles"); + for(int32_t i=0; i @@ -24,15 +24,24 @@ class WrongListener : public EventListener { class ICUNSubclass : public ICUNotifier { public: - UBool acceptsListener(const EventListener& l) const { + UBool acceptsListener(const EventListener& /*l*/) const { return TRUE; // return l instanceof MyListener; } - virtual void notifyListener(EventListener& l) const { + virtual void notifyListener(EventListener& /*l*/) const { } }; +// This factory does nothing +class LKFSubclass0 : public LocaleKeyFactory { +public: + LKFSubclass0() + : LocaleKeyFactory(VISIBLE, "LKFSubclass0") + { + } +}; + class LKFSubclass : public LocaleKeyFactory { Hashtable table; @@ -62,22 +71,22 @@ class Integer : public UObject { virtual ~Integer() { } - virtual UBool operator==(const UObject& other) const - { - return other.getDynamicClassID() == getStaticClassID() && - _val == ((Integer&)other)._val; - } - public: /** * UObject boilerplate. */ + static UClassID getStaticClassID() { + return (UClassID)&fgClassID; + } + virtual UClassID getDynamicClassID() const { return getStaticClassID(); } - static UClassID getStaticClassID() { - return (UClassID)&fgClassID; + virtual UBool operator==(const UObject& other) const + { + return other.getDynamicClassID() == getStaticClassID() && + _val == ((Integer&)other)._val; } public: @@ -460,6 +469,25 @@ ICUServiceTest::testAPI_One() /* ****************************************************************** */ +class TestStringSimpleKeyService : public ICUService { +public: + + virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status) + { + // We could put this type check into ICUService itself, but we'd still + // have to implement cloneInstance. Otherwise we could just tell the service + // what the object type is when we create it, and the default implementation + // could handle everything for us. Phooey. + if (obj && obj->getDynamicClassID() == UnicodeString::getStaticClassID()) { + return ICUService::createSimpleFactory(obj, id, visible, status); + } + return NULL; + } + + virtual UObject* cloneInstance(UObject* instance) const { + return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL; + } +}; class TestStringService : public ICUService { public: @@ -497,14 +525,14 @@ class AnonymousStringFactory : public ICUServiceFactory return result; } - virtual UClassID getDynamicClassID() const { - return getStaticClassID(); - } - static UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual UClassID getDynamicClassID() const { + return getStaticClassID(); + } + private: static const char fgClassID; }; @@ -573,14 +601,14 @@ class TestMultipleKeyStringFactory : public ICUServiceFactory { return result; } - virtual UClassID getDynamicClassID() const { - return getStaticClassID(); - } - static UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual UClassID getDynamicClassID() const { + return getStaticClassID(); + } + private: static const char fgClassID; }; @@ -668,7 +696,7 @@ ICUServiceTest::testAPI_Two() { UErrorCode status = U_ZERO_ERROR; UVector names(userv_deleteStringPair, NULL, status); - service.getDisplayNames(names, Locale::getGerman(), status); + service.getDisplayNames(names, status); for (int i = 0; i < names.size(); ++i) { const StringPair* pair = (const StringPair*)names[i]; logln(" " + pair->displayName + " --> " + pair->id); @@ -1014,7 +1042,7 @@ void ICUServiceTest::testLocale() { service.registerInstance(root, "", status); service.registerInstance(german, "de", status); service.registerInstance(germany, Locale::getGermany(), status); - service.registerInstance(japanese, "ja", status); + service.registerInstance(japanese, (UnicodeString)"ja", TRUE, status); service.registerInstance(japan, Locale::getJapan(), status); { @@ -1225,14 +1253,14 @@ class WrapFactory : public ICUServiceFactory { /** * UObject boilerplate. */ - virtual UClassID getDynamicClassID() const { - return getStaticClassID(); - } - static UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual UClassID getDynamicClassID() const { + return getStaticClassID(); + } + private: static const char fgClassID; static UnicodeString* greetingID; @@ -1303,18 +1331,45 @@ void ICUServiceTest::testCoverage() } // ICUService - TestStringService service; - service.registerFactory(sf, status); - - { - UnicodeString* result = (UnicodeString*)service.get("object", status); - if (result) { - logln("object is: " + *result); - delete result; - } else { - errln("could not get object"); - } - } + { + TestStringService service; + service.registerFactory(sf, status); + + { + UnicodeString* result = (UnicodeString*)service.get("object", status); + if (result) { + logln("object is: " + *result); + delete result; + } else { + errln("could not get object"); + } + } + } + } + + // ICUServiceKey + { + UErrorCode status = U_ZERO_ERROR; + UnicodeString* howdy = new UnicodeString("Howdy"); + + TestStringSimpleKeyService service; + service.registerInstance(howdy, "Greetings", status); + { + UnicodeString* result = (UnicodeString*)service.get("Greetings", status); + if (result) { + logln("object is: " + *result); + delete result; + } else { + errln("could not get object"); + } + } + + UVector ids(uhash_deleteUnicodeString, uhash_compareUnicodeString, status); + // yuck, this is awkward to use. All because we pass null in an overload. + // TODO: change this. + UnicodeString str("Greet"); + service.getVisibleIDs(ids, &str, status); + confirmIdentical("no fallback of greet", ids.size(), 0); } // ICULocaleService @@ -1374,15 +1429,40 @@ void ICUServiceTest::testCoverage() } delete obj; delete key; - } + key = LocaleKey::createWithCanonicalFallback(&primary, &fallback, 123, status); + if (U_SUCCESS(status)) { + UnicodeString str; + key->currentDescriptor(str); + key->parsePrefix(str); + if (str != "123") { + errln("did not get expected prefix"); + } + delete key; + } + + // coverage, getSupportedIDs is either overridden or the calling method is + LKFSubclass0 lkFactory; + Hashtable table0; + lkFactory.updateVisibleIDs(table0, status); + if (table0.count() != 0) { + errln("LKF returned non-empty hashtable"); + } -#if 0 - // ResourceBundleFactory - ICUResourceBundleFactory rbf = new ICUResourceBundleFactory(); - logln("RB: " + rbf.create(lkey, null)); - // ICUNotifier + // ResourceBundleFactory + key = LocaleKey::createWithCanonicalFallback(&primary, &fallback, status); + ICUResourceBundleFactory rbf; + UObject* icurb = rbf.create(*key, NULL, status); + if (icurb != NULL) { + logln("got resource bundle for key"); + delete icurb; + } + delete key; + } + + #if 0 + // ICUNotifier ICUNotifier nf = new ICUNSubclass(); try { nf.addListener(null); diff --git a/icuSources/test/intltest/idnaconf.cpp b/icuSources/test/intltest/idnaconf.cpp new file mode 100644 index 00000000..cf199438 --- /dev/null +++ b/icuSources/test/intltest/idnaconf.cpp @@ -0,0 +1,352 @@ +/* + ******************************************************************************* + * + * Copyright (C) 2005-2006, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * + * created on: 2005jun15 + * created by: Raymond Yang + */ + +#if !UCONFIG_NO_IDNA + +#include +#include +#include +#include "unicode/utypes.h" +#include "unicode/ucnv.h" +#include "unicode/ustring.h" +#include "unicode/uidna.h" + +#include "idnaconf.h" + +static const UChar C_TAG[] = {0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0}; // ===== +static const UChar C_NAMEZONE[] = {0x6E, 0x61, 0x6D, 0x65, 0x7A, 0x6F, 0x6E, 0x65, 0}; // namezone +static const UChar C_NAMEBASE[] = {0x6E, 0x61, 0x6D, 0x65, 0x62, 0x61, 0x73, 0x65, 0}; // namebase +static const UChar C_NAMEUTF8[] = {0x6E, 0x61, 0x6D, 0x65, 0x75, 0x74, 0x66, 0x38, 0}; // nameutf8 + +static const UChar C_TYPE[] = {0x74, 0x79, 0x70, 0x65, 0}; // type +static const UChar C_TOASCII[] = {0x74, 0x6F, 0x61, 0x73, 0x63, 0x69, 0x69, 0}; // toascii +static const UChar C_TOUNICODE[] = {0x74, 0x6F, 0x75, 0x6E, 0x69, 0x63, 0x6F, 0x64, 0x65, 0}; // tounicode + +static const UChar C_PASSFAIL[] = {0x70, 0x61, 0x73, 0x73, 0x66, 0x61, 0x69, 0x6C, 0}; // passfail +static const UChar C_PASS[] = {0x70, 0x61, 0x73, 0x73, 0}; // pass +static const UChar C_FAIL[] = {0x66, 0x61, 0x69, 0x6C, 0}; // fail + +static const UChar C_DESC[] = {0x64, 0x65, 0x73, 0x63, 0}; // desc +static const UChar C_USESTD3ASCIIRULES[] = {0x55, 0x73, 0x65, 0x53, 0x54, 0x44, + 0x33, 0x41, 0x53, 0x43, 0x49, 0x49, 0x52, 0x75, 0x6C, 0x65, 0x73, 0}; // UseSTD3ASCIIRules + +IdnaConfTest::IdnaConfTest(){ + base = NULL; + len = 0; + curOffset = 0; + + type = option = passfail = -1; + namebase.setToBogus(); + namezone.setToBogus(); +} +IdnaConfTest::~IdnaConfTest(){ + delete [] base; +} + +#if !UCONFIG_NO_IDNA +/* this function is modified from RBBITest::ReadAndConvertFile() + * + */ +UBool IdnaConfTest::ReadAndConvertFile(){ + + char * source = NULL; + size_t source_len; + + // read the test data file to memory + FILE* f = NULL; + UErrorCode status = U_ZERO_ERROR; + + const char *path = IntlTest::getSourceTestData(status); + if (U_FAILURE(status)) { + errln("%s", u_errorName(status)); + return FALSE; + } + + const char* name = "idna_conf.txt"; // test data file + int t = strlen(path) + strlen(name) + 1; + char* absolute_name = new char[t]; + strcpy(absolute_name, path); + strcat(absolute_name, name); + f = fopen(absolute_name, "rb"); + delete [] absolute_name; + + if (f == NULL){ + errln("fopen error on %s", name); + return FALSE; + } + + fseek( f, 0, SEEK_END); + if ((source_len = ftell(f)) <= 0){ + errln("Error reading test data file."); + fclose(f); + return FALSE; + } + + source = new char[source_len]; + fseek(f, 0, SEEK_SET); + if (fread(source, 1, source_len, f) != source_len) { + errln("Error reading test data file."); + delete [] source; + fclose(f); + return FALSE; + } + fclose(f); + + // convert the UTF-8 encoded stream to UTF-16 stream + UConverter* conv = ucnv_open("utf-8", &status); + int dest_len = ucnv_toUChars(conv, + NULL, // dest, + 0, // destCapacity, + source, + source_len, + &status); + if (status == U_BUFFER_OVERFLOW_ERROR) { + // Buffer Overflow is expected from the preflight operation. + status = U_ZERO_ERROR; + UChar * dest = NULL; + dest = new UChar[ dest_len + 1]; + ucnv_toUChars(conv, dest, dest_len + 1, source, source_len, &status); + // Do not know the "if possible" behavior of ucnv_toUChars() + // Do it by ourself. + dest[dest_len] = 0; + len = dest_len; + base = dest; + delete [] source; + ucnv_close(conv); + return TRUE; // The buffer will owned by caller. + } + errln("UConverter error: %s", u_errorName(status)); + delete [] source; + ucnv_close(conv); + return FALSE; +} + +int IdnaConfTest::isNewlineMark(){ + static const UChar LF = 0x0a; + static const UChar CR = 0x0d; + UChar c = base[curOffset]; + // CR LF + if ( c == CR && curOffset + 1 < len && base[curOffset + 1] == LF){ + return 2; + } + + // CR or LF + if ( c == CR || c == LF) { + return 1; + } + + return 0; +} + +/* Read a logical line. + * + * All lines ending in a backslash (\) and immediately followed by a newline + * character are joined with the next line in the source file forming logical + * lines from the physical lines. + * + */ +UBool IdnaConfTest::ReadOneLine(UnicodeString& buf){ + if ( !(curOffset < len) ) return FALSE; // stream end + + static const UChar BACKSLASH = 0x5c; + buf.remove(); + int t = 0; + while (curOffset < len){ + if ((t = isNewlineMark())) { // end of line + curOffset += t; + break; + } + UChar c = base[curOffset]; + if (c == BACKSLASH && curOffset < len -1){ // escaped new line mark + if ((t = isNewlineMark())){ + curOffset += 1 + t; // BACKSLAH and NewlineMark + continue; + } + }; + buf.append(c); + curOffset++; + } + return TRUE; +} + +// +//=============================================================== +// + +/* Explain tag to a native value + * + * Since is always larger than the native value, + * the operation will replace the tag directly in the buffer, + * and, of course, will shift tail elements. + */ +void IdnaConfTest::ExplainCodePointTag(UnicodeString& buf){ + buf.append((UChar)0); // add a terminal NULL + UChar* bufBase = buf.getBuffer(buf.length()); + UChar* p = bufBase; + while (*p != 0){ + if ( *p != 0x3C){ // < + *bufBase++ = *p++; + } else { + p++; // skip < + UChar32 cp = 0; + for ( ;*p != 0x3E; p++){ // > + if (0x30 <= *p && *p <= 0x39){ // 0-9 + cp = (cp * 16) + (*p - 0x30); + } else if (0x61 <= *p && *p <= 0x66){ // a-f + cp = (cp * 16) + (*p - 0x61) + 10; + } else if (0x41 <= *p && *p <= 0x46) {// A-F + cp = (cp * 16) + (*p - 0x41) + 10; + } + // no else. hope everything is good. + } + p++; // skip > + if (U_IS_BMP(cp)){ + *bufBase++ = cp; + } else { + *bufBase++ = U16_LEAD(cp); + *bufBase++ = U16_TRAIL(cp); + } + } + } + *bufBase = 0; // close our buffer + buf.releaseBuffer(); +} + +void IdnaConfTest::Call(){ + if (type == -1 || option == -1 || passfail == -1 || namebase.isBogus() || namezone.isBogus()){ + errln("Incomplete record"); + } else { + UErrorCode status = U_ZERO_ERROR; + UChar result[200] = {0,}; // simple life + const UChar *p = namebase.getTerminatedBuffer(); + const int p_len = namebase.length(); + + if (type == 0 && option == 0){ + uidna_IDNToASCII(p, p_len, result, 200, UIDNA_USE_STD3_RULES, NULL, &status); + } else if (type == 0 && option == 1){ + uidna_IDNToASCII(p, p_len, result, 200, UIDNA_ALLOW_UNASSIGNED, NULL, &status); + } else if (type == 1 && option == 0){ + uidna_IDNToUnicode(p, p_len, result, 200, UIDNA_USE_STD3_RULES, NULL, &status); + } else if (type == 1 && option == 1){ + uidna_IDNToUnicode(p, p_len, result, 200, UIDNA_ALLOW_UNASSIGNED, NULL, &status); + } + if (passfail == 0){ + if (U_FAILURE(status)){ + id.append(" should pass, but failed."); + errln(id); + } else{ + if (namezone.compare(result, -1) == 0){ + // expected + logln(UnicodeString("namebase: ") + prettify(namebase) + UnicodeString(" result: ") + prettify(result)); + } else { + id.append(" no error, but result is not as expected."); + errln(id); + } + } + } else if (passfail == 1){ + if (U_FAILURE(status)){ + // expected + // TODO: Uncomment this when U_IDNA_ZERO_LENGTH_LABEL_ERROR is added to u_errorName + //logln("Got the expected error: " + UnicodeString(u_errorName(status))); + } else{ + if (namebase.compare(result, -1) == 0){ + // garbage in -> garbage out + logln(UnicodeString("ICU will not recognize malformed ACE-Prefixes or incorrect ACE-Prefixes. ") + UnicodeString("namebase: ") + prettify(namebase) + UnicodeString(" result: ") + prettify(result)); + } else { + id.append(" should fail, but not failed. "); + id.append(u_errorName(status)); + errln(id); + } + } + } + } + type = option = passfail = -1; + namebase.setToBogus(); + namezone.setToBogus(); + id.remove(); + return; +} + +void IdnaConfTest::Test(void){ + if (!ReadAndConvertFile())return; + + UnicodeString s; + UnicodeString key; + UnicodeString value; + + // skip everything before the first "=====" and "=====" itself + do { + if (!ReadOneLine(s)) { + errln("End of file prematurely found"); + break; + } + } + while (s.compare(C_TAG, -1) != 0); //"=====" + + while(ReadOneLine(s)){ + s.trim(); + key.remove(); + value.remove(); + if (s.compare(C_TAG, -1) == 0){ //"=====" + Call(); + } else { + // explain key:value + int p = s.indexOf((UChar)0x3A); // : + key.setTo(s,0,p).trim(); + value.setTo(s,p+1).trim(); + if (key.compare(C_TYPE, -1) == 0){ + if (value.compare(C_TOASCII, -1) == 0) { + type = 0; + } else if (value.compare(C_TOUNICODE, -1) == 0){ + type = 1; + } + } else if (key.compare(C_PASSFAIL, -1) == 0){ + if (value.compare(C_PASS, -1) == 0){ + passfail = 0; + } else if (value.compare(C_FAIL, -1) == 0){ + passfail = 1; + } + } else if (key.compare(C_DESC, -1) == 0){ + if (value.indexOf(C_USESTD3ASCIIRULES, u_strlen(C_USESTD3ASCIIRULES), 0) == -1){ + option = 1; // not found + } else { + option = 0; + } + id.setTo(value, 0, value.indexOf((UChar)0x20)); // space + } else if (key.compare(C_NAMEZONE, -1) == 0){ + ExplainCodePointTag(value); + namezone.setTo(value); + } else if (key.compare(C_NAMEBASE, -1) == 0){ + ExplainCodePointTag(value); + namebase.setTo(value); + } + // just skip other lines + } + } + + Call(); // for last record +} +#else +void IdnaConfTest::Test(void) +{ + // test nothing... +} +#endif + +void IdnaConfTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/){ + switch (index) { + TESTCASE(0,Test); + default: name = ""; break; + } +} + +#endif diff --git a/icuSources/test/intltest/idnaconf.h b/icuSources/test/intltest/idnaconf.h new file mode 100644 index 00000000..35e9063a --- /dev/null +++ b/icuSources/test/intltest/idnaconf.h @@ -0,0 +1,49 @@ +/* + ******************************************************************************* + * + * Copyright (C) 2005, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * + * created on: 2005jun15 + * created by: Raymond Yang + */ + +#ifndef IDNA_CONF_TEST_H +#define IDNA_CONF_TEST_H + +#include "intltest.h" +#include "unicode/ustring.h" + + +class IdnaConfTest: public IntlTest { +public: + void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL); + IdnaConfTest(); + virtual ~IdnaConfTest(); +private: + void Test(void); + + // for test file handling + UChar* base; + int len ; + int curOffset; + + UBool ReadAndConvertFile(); + int isNewlineMark(); + UBool ReadOneLine(UnicodeString&); + + // for parsing one test record + UnicodeString id; // for debug & error output + UnicodeString namebase; + UnicodeString namezone; + int type; // 0 toascii, 1 tounicode + int option; // 0 UseSTD3ASCIIRules, 1 ALLOW_UNASSIGNED + int passfail; // 0 pass, 1 fail + + void ExplainCodePointTag(UnicodeString& buf); + void Call(); +}; + +#endif /*IDNA_CONF_TEST_H*/ diff --git a/icuSources/test/intltest/idnaref.cpp b/icuSources/test/intltest/idnaref.cpp index f629bea6..8db476e8 100644 --- a/icuSources/test/intltest/idnaref.cpp +++ b/icuSources/test/intltest/idnaref.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2007, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -34,7 +34,7 @@ static const UChar ACE_PREFIX[] ={ 0x0078,0x006E,0x002d,0x002d } ; #define MAX_LABEL_LENGTH 63 #define HYPHEN 0x002D /* The Max length of the labels should not be more than 64 */ -#define MAX_LABEL_BUFFER_SIZE 100 +#define MAX_LABEL_BUFFER_SIZE 100 #define MAX_IDN_BUFFER_SIZE 300 #define CAPITAL_A 0x0041 @@ -43,7 +43,7 @@ static const UChar ACE_PREFIX[] ={ 0x0078,0x006E,0x002d,0x002d } ; #define FULL_STOP 0x002E -inline static UBool +inline static UBool startsWithPrefix(const UChar* src , int32_t srcLength){ UBool startsWithPrefix = TRUE; @@ -59,7 +59,7 @@ startsWithPrefix(const UChar* src , int32_t srcLength){ return startsWithPrefix; } -inline static UChar +inline static UChar toASCIILower(UChar ch){ if(CAPITAL_A <= ch && ch <= CAPITAL_Z){ return ch + LOWER_CASE_DELTA; @@ -68,7 +68,7 @@ toASCIILower(UChar ch){ } inline static int32_t -compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, +compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, const UChar* s2, int32_t s2Len){ if(s1Len != s2Len){ return (s1Len > s2Len) ? s1Len : s2Len; @@ -81,10 +81,10 @@ compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, if(i == s1Len) { return 0; } - + c1 = s1[i]; c2 = s2[i]; - + /* Case-insensitive comparison */ if(c1!=c2) { rc=(int32_t)toASCIILower(c1)-(int32_t)toASCIILower(c2); @@ -93,7 +93,7 @@ compareCaseInsensitiveASCII(const UChar* s1, int32_t s1Len, } } } - + } static UErrorCode getError(enum punycode_status status){ @@ -125,8 +125,8 @@ static inline int32_t convertUCharsToASCII(const UChar* src,char* dest, int32_t } return i; } -// wrapper around the reference Punycode implementation -static int32_t convertToPuny(const UChar* src, int32_t srcLength, +// wrapper around the reference Punycode implementation +static int32_t convertToPuny(const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, UErrorCode& status){ uint32_t b1Stack[MAX_LABEL_BUFFER_SIZE]; @@ -149,7 +149,7 @@ static int32_t convertToPuny(const UChar* src, int32_t srcLength, } status = U_ZERO_ERROR; // reset error - + u_strToUTF32((UChar32*)b1,b1Len,&b1Len,src,srcLength,&status); } if(U_FAILURE(status)){ @@ -160,7 +160,7 @@ static int32_t convertToPuny(const UChar* src, int32_t srcLength, error = punycode_encode(b1Len,b1,caseFlags, (uint32_t*)&b2Len, b2); status = getError(error); - + if(status == U_BUFFER_OVERFLOW_ERROR){ /* we do not have enough room so grow the buffer*/ b2 = (char*) uprv_malloc( b2Len * sizeof(char)); @@ -177,7 +177,7 @@ static int32_t convertToPuny(const UChar* src, int32_t srcLength, if(U_FAILURE(status)){ goto CLEANUP; } - + if(b2Len < destCapacity){ convertASCIIToUChars(b2,dest,b2Len); }else{ @@ -236,18 +236,17 @@ CLEANUP: } uprv_free(caseFlags); - return destLen; + return destLen; } - U_CFUNC int32_t U_EXPORT2 -idnaref_toASCII(const UChar* src, int32_t srcLength, +idnaref_toASCII(const UChar* src, int32_t srcLength, UChar* dest, int32_t destCapacity, int32_t options, UParseError* parseError, UErrorCode* status){ - + if(status == NULL || U_FAILURE(*status)){ return 0; } @@ -258,8 +257,8 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, UChar b1Stack[MAX_LABEL_BUFFER_SIZE], b2Stack[MAX_LABEL_BUFFER_SIZE]; //initialize pointers to stack buffers UChar *b1 = b1Stack, *b2 = b2Stack; - int32_t b1Len, b2Len, - b1Capacity = MAX_LABEL_BUFFER_SIZE, + int32_t b1Len=0, b2Len=0, + b1Capacity = MAX_LABEL_BUFFER_SIZE, b2Capacity = MAX_LABEL_BUFFER_SIZE , reqLength=0; @@ -268,25 +267,47 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, UBool useSTD3ASCIIRules = (UBool)((options & IDNAREF_USE_STD3_RULES) != 0); UBool* caseFlags = NULL; - + // assume the source contains all ascii codepoints UBool srcIsASCII = TRUE; // assume the source contains all LDH codepoints - UBool srcIsLDH = TRUE; + UBool srcIsLDH = TRUE; int32_t j=0; -// UParseError parseError; - // step 2 + NamePrepTransform* prep = TestIDNA::getInstance(*status); if(U_FAILURE(*status)){ goto CLEANUP; } - b1Len = prep->process(src,srcLength,b1, b1Capacity,allowUnassigned,parseError,*status); + if(srcLength == -1){ + srcLength = u_strlen(src); + } + if(srcLength > b1Capacity){ + b1 = (UChar*) uprv_malloc(srcLength * U_SIZEOF_UCHAR); + if(b1==NULL){ + *status = U_MEMORY_ALLOCATION_ERROR; + goto CLEANUP; + } + b1Capacity = srcLength; + } + // step 1 + for( j=0;j 0x7F){ + srcIsASCII = FALSE; + } + b1[b1Len++] = src[j]; + } + // step 2 + b1Len = prep->process(src,srcLength,b1, b1Capacity,allowUnassigned,parseError,*status); + if(*status == U_BUFFER_OVERFLOW_ERROR){ // redo processing of string /* we do not have enough room so grow the buffer*/ + if(b1 != b1Stack){ + uprv_free(b1); + } b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR); if(b1==NULL){ *status = U_MEMORY_ALLOCATION_ERROR; @@ -294,7 +315,7 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - + b1Len = prep->process(src,srcLength,b1, b1Len,allowUnassigned, parseError, *status); } // error bail out @@ -302,15 +323,21 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, goto CLEANUP; } + if(b1Len == 0){ + *status = U_IDNA_ZERO_LENGTH_LABEL_ERROR; + goto CLEANUP; + } + + srcIsASCII = TRUE; // step 3 & 4 for( j=0;j 0x7F){ + if(b1[j] > 0x7F){// check if output of usprep_prepare is all ASCII srcIsASCII = FALSE; }else if(prep->isLDHChar(b1[j])==FALSE){ // if the char is in ASCII range verify that it is an LDH character{ srcIsLDH = FALSE; } } - + if(useSTD3ASCIIRules == TRUE){ // verify 3a and 3b if( srcIsLDH == FALSE /* source contains some non-LDH characters */ @@ -339,14 +366,14 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, if(*status == U_BUFFER_OVERFLOW_ERROR){ // redo processing of string /* we do not have enough room so grow the buffer*/ - b2 = (UChar*) uprv_malloc(b2Len * U_SIZEOF_UCHAR); + b2 = (UChar*) uprv_malloc(b2Len * U_SIZEOF_UCHAR); if(b2 == NULL){ *status = U_MEMORY_ALLOCATION_ERROR; goto CLEANUP; } *status = U_ZERO_ERROR; // reset error - + b2Len = convertToPuny(b1, b1Len, b2, b2Len, *status); //b2Len = u_strToPunycode(b2,b2Len,b1,b1Len, caseFlags, status); @@ -367,7 +394,7 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, uprv_memcpy(dest+ACE_PREFIX_LENGTH, b2, b2Len * U_SIZEOF_UCHAR); }else{ - *status = U_IDNA_ACE_PREFIX_ERROR; + *status = U_IDNA_ACE_PREFIX_ERROR; goto CLEANUP; } } @@ -384,7 +411,7 @@ CLEANUP: uprv_free(b2); } uprv_free(caseFlags); - + // delete prep; return u_terminateUChars(dest, destCapacity, reqLength, status); @@ -407,18 +434,18 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, } - + UChar b1Stack[MAX_LABEL_BUFFER_SIZE], b2Stack[MAX_LABEL_BUFFER_SIZE], b3Stack[MAX_LABEL_BUFFER_SIZE]; //initialize pointers to stack buffers UChar *b1 = b1Stack, *b2 = b2Stack, *b1Prime=NULL, *b3=b3Stack; int32_t b1Len, b2Len, b1PrimeLen, b3Len, - b1Capacity = MAX_LABEL_BUFFER_SIZE, + b1Capacity = MAX_LABEL_BUFFER_SIZE, b2Capacity = MAX_LABEL_BUFFER_SIZE, b3Capacity = MAX_LABEL_BUFFER_SIZE, reqLength=0; // UParseError parseError; - + NamePrepTransform* prep = TestIDNA::getInstance(*status); b1Len = 0; UBool* caseFlags = NULL; @@ -434,7 +461,7 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, if(U_FAILURE(*status)){ goto CLEANUP; } - // step 1: find out if all the codepoints in src are ASCII + // step 1: find out if all the codepoints in src are ASCII if(srcLength==-1){ srcLength = 0; for(;src[srcLength]!=0;){ @@ -476,7 +503,7 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - + b1Len = prep->process(src,srcLength,b1, b1Len,allowUnassigned, parseError, *status); } //bail out on error @@ -520,12 +547,12 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - + b2Len = convertFromPuny(b1Prime,b1PrimeLen, b2, b2Len, *status); //b2Len = u_strFromPunycode(b2, b2Len,b1Prime,b1PrimeLen,caseFlags, status); } - - + + //step 6:Apply toASCII b3Len = idnaref_toASCII(b2,b2Len,b3,b3Capacity,options,parseError, status); @@ -539,9 +566,9 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - + b3Len = idnaref_toASCII(b2,b2Len,b3,b3Len, options, parseError, status); - + } //bail out on error if(U_FAILURE(*status)){ @@ -550,7 +577,7 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, //step 7: verify if(compareCaseInsensitiveASCII(b1, b1Len, b3, b3Len) !=0){ - *status = U_IDNA_VERIFICATION_ERROR; + *status = U_IDNA_VERIFICATION_ERROR; goto CLEANUP; } @@ -571,7 +598,7 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength, // failPos is always set the index of failure uprv_syntaxError(src,failPos, srcLength,parseError); }else if(src[0] == HYPHEN){ - // fail position is 0 + // fail position is 0 uprv_syntaxError(src,0,srcLength,parseError); }else{ // the last index in the source is always length-1 @@ -597,7 +624,7 @@ CLEANUP: uprv_free(b2); } uprv_free(caseFlags); - + // delete prep; return u_terminateUChars(dest, destCapacity, reqLength, status); @@ -620,7 +647,7 @@ getNextSeparator(UChar *src,int32_t srcLength,NamePrepTransform* prep, if(prep->isLabelSeparator(src[i],*status)){ *limit = src + (i+1); // go past the delimiter return i; - + } } }else{ @@ -659,7 +686,7 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength, // UParseError parseError; NamePrepTransform* prep = TestIDNA::getInstance(*status); - + //initialize pointers to stack buffers UChar b1Stack[MAX_LABEL_BUFFER_SIZE]; UChar *b1 = b1Stack; @@ -668,7 +695,7 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength, UChar* labelStart = (UChar*)src; int32_t remainingLen = srcLength; int32_t b1Capacity = MAX_LABEL_BUFFER_SIZE; - + //get the options // UBool allowUnassigned = (UBool)((options & IDNAREF_ALLOW_UNASSIGNED) != 0); // UBool useSTD3ASCIIRules = (UBool)((options & IDNAREF_USE_STD3_RULES) != 0); @@ -681,32 +708,35 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength, if(srcLength == -1){ for(;;){ - + if(*delimiter == 0){ break; } labelLen = getNextSeparator(labelStart, -1, prep, &delimiter, &done, status); - - b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Capacity, - options, parseError, status); - - if(*status == U_BUFFER_OVERFLOW_ERROR){ - // redo processing of string - /* we do not have enough room so grow the buffer*/ - b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR); - if(b1==NULL){ - *status = U_MEMORY_ALLOCATION_ERROR; - goto CLEANUP; - } + b1Len = 0; + if(!(labelLen==0 && done)){// make sure this is not a root label separator. - *status = U_ZERO_ERROR; // reset error - - b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Len, + b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Capacity, options, parseError, status); - + + if(*status == U_BUFFER_OVERFLOW_ERROR){ + // redo processing of string + /* we do not have enough room so grow the buffer*/ + b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR); + if(b1==NULL){ + *status = U_MEMORY_ALLOCATION_ERROR; + goto CLEANUP; + } + + *status = U_ZERO_ERROR; // reset error + + b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Len, + options, parseError, status); + + } } - + if(U_FAILURE(*status)){ goto CLEANUP; } @@ -730,13 +760,13 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength, } }else{ for(;;){ - + if(delimiter == src+srcLength){ break; } labelLen = getNextSeparator(labelStart, remainingLen, prep, &delimiter, &done, status); - + b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Capacity, options,parseError, status); @@ -750,12 +780,12 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - - b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Len, + + b1Len = idnaref_toASCII(labelStart, labelLen, b1, b1Len, options, parseError, status); - + } - + if(U_FAILURE(*status)){ goto CLEANUP; } @@ -782,11 +812,11 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength, CLEANUP: - + if(b1 != b1Stack){ uprv_free(b1); } - + // delete prep; return u_terminateUChars(dest, destCapacity, reqLength, status); @@ -798,7 +828,7 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, int32_t options, UParseError* parseError, UErrorCode* status){ - + if(status == NULL || U_FAILURE(*status)){ return 0; } @@ -808,11 +838,11 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, } int32_t reqLength = 0; - + UBool done = FALSE; NamePrepTransform* prep = TestIDNA::getInstance(*status); - + //initialize pointers to stack buffers UChar b1Stack[MAX_LABEL_BUFFER_SIZE]; UChar *b1 = b1Stack; @@ -821,24 +851,27 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, UChar* labelStart = (UChar*)src; int32_t remainingLen = srcLength; int32_t b1Capacity = MAX_LABEL_BUFFER_SIZE; - + //get the options // UBool allowUnassigned = (UBool)((options & IDNAREF_ALLOW_UNASSIGNED) != 0); // UBool useSTD3ASCIIRules = (UBool)((options & IDNAREF_USE_STD3_RULES) != 0); - + if(U_FAILURE(*status)){ goto CLEANUP; } - + if(srcLength == -1){ for(;;){ - + if(*delimiter == 0){ break; } labelLen = getNextSeparator(labelStart, -1, prep, &delimiter, &done, status); - + + if(labelLen==0 && done==FALSE){ + *status = U_IDNA_ZERO_LENGTH_LABEL_ERROR; + } b1Len = idnaref_toUnicode(labelStart, labelLen, b1, b1Capacity, options, parseError, status); @@ -852,12 +885,12 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - - b1Len = idnaref_toUnicode( labelStart, labelLen, b1, b1Len, + + b1Len = idnaref_toUnicode( labelStart, labelLen, b1, b1Len, options, parseError, status); - + } - + if(U_FAILURE(*status)){ goto CLEANUP; } @@ -880,13 +913,17 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, } }else{ for(;;){ - + if(delimiter == src+srcLength){ break; } labelLen = getNextSeparator(labelStart, remainingLen, prep, &delimiter, &done, status); - + + if(labelLen==0 && done==FALSE){ + *status = U_IDNA_ZERO_LENGTH_LABEL_ERROR; + } + b1Len = idnaref_toUnicode( labelStart,labelLen, b1, b1Capacity, options, parseError, status); @@ -900,12 +937,12 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, } *status = U_ZERO_ERROR; // reset error - - b1Len = idnaref_toUnicode( labelStart, labelLen, b1, b1Len, + + b1Len = idnaref_toUnicode( labelStart, labelLen, b1, b1Len, options, parseError, status); - + } - + if(U_FAILURE(*status)){ goto CLEANUP; } @@ -931,13 +968,13 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength, } CLEANUP: - + if(b1 != b1Stack){ uprv_free(b1); } - + // delete prep; - + return u_terminateUChars(dest, destCapacity, reqLength, status); } @@ -955,7 +992,7 @@ idnaref_compare( const UChar *s1, int32_t length1, UChar *b1 = b1Stack, *b2 = b2Stack; int32_t b1Len, b2Len, b1Capacity = MAX_IDN_BUFFER_SIZE, b2Capacity = MAX_IDN_BUFFER_SIZE; int32_t result = -1; - + UParseError parseError; b1Len = idnaref_IDNToASCII(s1, length1, b1, b1Capacity, options, &parseError, status); @@ -969,9 +1006,9 @@ idnaref_compare( const UChar *s1, int32_t length1, } *status = U_ZERO_ERROR; // reset error - + b1Len = idnaref_IDNToASCII(s1,length1,b1,b1Len, options, &parseError, status); - + } b2Len = idnaref_IDNToASCII(s2,length2,b2,b2Capacity,options, &parseError, status); @@ -985,9 +1022,9 @@ idnaref_compare( const UChar *s1, int32_t length1, } *status = U_ZERO_ERROR; // reset error - + b2Len = idnaref_IDNToASCII(s2,length2,b2,b2Len,options, &parseError, status); - + } // when toASCII is applied all label separators are replaced with FULL_STOP result = compareCaseInsensitiveASCII(b1,b1Len,b2,b2Len); diff --git a/icuSources/test/intltest/incaltst.cpp b/icuSources/test/intltest/incaltst.cpp index 24ca9f40..a765e0c4 100644 --- a/icuSources/test/intltest/incaltst.cpp +++ b/icuSources/test/intltest/incaltst.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -9,6 +9,7 @@ #include "unicode/utypes.h" #include "string.h" #include "unicode/locid.h" +#include "japancal.h" #if !UCONFIG_NO_FORMATTING @@ -73,6 +74,7 @@ void IntlCalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &n CASE(3,TestJapanese); CASE(4,TestBuddhistFormat); CASE(5,TestJapaneseFormat); + CASE(6,TestJapanese3860); default: name = ""; break; } } @@ -141,6 +143,10 @@ void IntlCalendarTest::quasiGregorianTest(Calendar& cal, const Locale& gcl, cons // due to the JDK 1.4 incorporation of historical time zones. //java.util.Calendar grego = java.util.Calendar.getInstance(); Calendar *grego = Calendar::createInstance(gcl, status); + if (U_FAILURE(status)) { + dataerrln("Error calling Calendar::createInstance"); + return; + } int32_t tz1 = cal.get(UCAL_ZONE_OFFSET,status); int32_t tz2 = grego -> get (UCAL_ZONE_OFFSET, status); @@ -426,7 +432,7 @@ void IntlCalendarTest::TestJapaneseFormat() { UDate aDate = 999932400000.0; SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yy G"), Locale("en_US@calendar=japanese"), status); - SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yy G"), Locale("en_US@calendar=gregorian"), status); + SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status); CHECK(status, "creating date format instance"); if(!fmt) { errln("Coudln't create en_US instance"); @@ -537,6 +543,104 @@ void IntlCalendarTest::TestJapaneseFormat() { } } +void IntlCalendarTest::TestJapanese3860() +{ + Calendar *cal; + UErrorCode status = U_ZERO_ERROR; + cal = Calendar::createInstance("ja_JP@calendar=japanese", status); + CHECK(status, UnicodeString("Creating ja_JP@calendar=japanese calendar")); + Calendar *cal2 = cal->clone(); + SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("HH:mm:ss.S MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status); + UnicodeString str; + + + { + // Test simple parse/format with adopt + UDate aDate = 0; + + // Test parse with missing era (should default to current era, heisei) + // Test parse with incomplete information + logln("Testing parse w/ missing era..."); + SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y.M.d"), Locale("ja_JP@calendar=japanese"), status); + CHECK(status, "creating date format instance"); + if(!fmt) { + errln("Coudln't create en_US instance"); + } else { + UErrorCode s2 = U_ZERO_ERROR; + cal2->clear(); + UnicodeString samplestr("1.1.9"); + logln(UnicodeString() + "Test Year: " + samplestr); + aDate = fmt->parse(samplestr, s2); + ParsePosition pp=0; + fmt->parse(samplestr, *cal2, pp); + CHECK(s2, "parsing the 1.1.9 string"); + logln("*cal2 after 119 parse:"); + str.remove(); + fmt2->format(aDate, str); + logln(UnicodeString() + "as Gregorian Calendar: " + str); + + cal2->setTime(aDate, s2); + int32_t gotYear = cal2->get(UCAL_YEAR, s2); + int32_t gotEra = cal2->get(UCAL_ERA, s2); + int32_t expectYear = 1; + int32_t expectEra = JapaneseCalendar::kCurrentEra; + if((gotYear!=1) || (gotEra != expectEra)) { + errln(UnicodeString("parse "+samplestr+" of 'y.m.d' as Japanese Calendar, expected year ") + expectYear + + UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); + } else { + logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra); + } + delete fmt; + } + } + +#if 0 + // this will NOT work - *all the time*. If it is the 1st of the month, for example it will get Jan 1 heisei 1 => jan 1 showa 64, wrong era. + { + // Test simple parse/format with adopt + UDate aDate = 0; + + // Test parse with missing era (should default to current era, heisei) + // Test parse with incomplete information + logln("Testing parse w/ just year..."); + SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y"), Locale("ja_JP@calendar=japanese"), status); + CHECK(status, "creating date format instance"); + if(!fmt) { + errln("Coudln't create en_US instance"); + } else { + UErrorCode s2 = U_ZERO_ERROR; + cal2->clear(); + UnicodeString samplestr("1"); + logln(UnicodeString() + "Test Year: " + samplestr); + aDate = fmt->parse(samplestr, s2); + ParsePosition pp=0; + fmt->parse(samplestr, *cal2, pp); + CHECK(s2, "parsing the 1 string"); + logln("*cal2 after 1 parse:"); + str.remove(); + fmt2->format(aDate, str); + logln(UnicodeString() + "as Gregorian Calendar: " + str); + + cal2->setTime(aDate, s2); + int32_t gotYear = cal2->get(UCAL_YEAR, s2); + int32_t gotEra = cal2->get(UCAL_ERA, s2); + int32_t expectYear = 1; + int32_t expectEra = JapaneseCalendar::kCurrentEra; + if((gotYear!=1) || (gotEra != expectEra)) { + errln(UnicodeString("parse "+samplestr+" of 'y' as Japanese Calendar, expected year ") + expectYear + + UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); + } else { + logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra); + } + delete fmt; + } + } +#endif + delete cal2; + delete cal; + delete fmt2; +} + void IntlCalendarTest::simpleTest(const Locale& loc, const UnicodeString& expect, UDate expectDate, UErrorCode& status) { UnicodeString tmp; diff --git a/icuSources/test/intltest/incaltst.h b/icuSources/test/intltest/incaltst.h index 1839879f..b4d52d64 100644 --- a/icuSources/test/intltest/incaltst.h +++ b/icuSources/test/intltest/incaltst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -29,6 +29,7 @@ public: void TestJapanese(void); void TestJapaneseFormat(void); + void TestJapanese3860(void); protected: // Test a Gregorian-Like calendar diff --git a/icuSources/test/intltest/intltest.cpp b/icuSources/test/intltest/intltest.cpp index 26d2b6a2..3f440b8f 100644 --- a/icuSources/test/intltest/intltest.cpp +++ b/icuSources/test/intltest/intltest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -33,6 +33,11 @@ #include "umutex.h" #include "uassert.h" #include "cmemory.h" +#include "uoptions.h" + +#include "putilimp.h" // for uprv_getUTCtime() +#include "unicode/locid.h" + #ifdef XP_MAC_CONSOLE #include @@ -87,10 +92,10 @@ Int64ToUnicodeString(int64_t num) char buffer[64]; // nos changed from 10 to 64 char danger = 'p'; // guard against overrunning the buffer (rtg) -#ifdef WIN32 +#ifdef U_WINDOWS sprintf(buffer, "%I64d", num); #else - sprintf(buffer, "%lld", num); + sprintf(buffer, "%lld", (long long)num); #endif assert(danger == 'p'); @@ -340,68 +345,6 @@ IntlTest::prettify(const UnicodeString &source, UBool parseBackslash) return target; } -#if defined(_WIN32) || defined(WIN32) || defined(__OS2__) || defined(OS2) -#define PREV_DIR ".." -#else -#define PREV_DIR "/../" -#endif - -void -IntlTest::pathnameInContext( char* fullname, int32_t maxsize, const char* relPath ) //nosmac -{ - const char* mainDir; - char sepChar; - const char inpSepChar = '|'; - - // So what's going on is that ICU_DATA during tests points to: - // ICU | source | data - //and we want ICU | source | - // - // We'll add | test | testdata - // - // So, just add a .. here - back up one level - - mainDir = u_getDataDirectory(); - sepChar = U_FILE_SEP_CHAR; - char sepString[] = U_FILE_SEP_STRING; - -#if defined(XP_MAC) - Str255 volName; - int16_t volNum; - OSErr err = GetVol( volName, &volNum ); - if (err != noErr) - volName[0] = 0; - mainDir = (char*) &(volName[1]); - mainDir[volName[0]] = 0; -#else - char mainDirBuffer[255]; - if(mainDir!=NULL) { - strcpy(mainDirBuffer, mainDir); - strcat(mainDirBuffer, PREV_DIR); - } else { - mainDirBuffer[0]='\0'; - } - mainDir=mainDirBuffer; -#endif - - if (relPath[0] == '|') - relPath++; - int32_t lenMainDir = strlen(mainDir); - int32_t lenRelPath = strlen(relPath); - if (maxsize < lenMainDir + lenRelPath + 2) { - fullname[0] = 0; - return; - } - strcpy(fullname, mainDir); - strcat(fullname, sepString); - strcat(fullname, relPath); - char* tmp = strchr(fullname, inpSepChar); - while (tmp) { - *tmp = sepChar; - tmp = strchr(tmp+1, inpSepChar); - } -} - /* IntlTest::setICU_DATA - if the ICU_DATA environment variable is not already * set, try to deduce the directory in which ICU was built, * and set ICU_DATA to "icu/source/data" in that location. @@ -541,15 +484,28 @@ void it_errln( UnicodeString message ) IntlTest::gTest->errln( message ); } +void it_dataerr( UnicodeString message ) +{ + if (IntlTest::gTest) + IntlTest::gTest->dataerr( message ); +} + +void it_dataerrln( UnicodeString message ) +{ + if (IntlTest::gTest) + IntlTest::gTest->dataerrln( message ); +} IntlTest::IntlTest() { caller = NULL; - path = NULL; + testPath = NULL; LL_linestart = TRUE; errorCount = 0; + dataErrorCount = 0; verbose = FALSE; no_err_msg = FALSE; + warn_on_missing_data = FALSE; quick = FALSE; leaks = FALSE; testoutfp = stdout; @@ -572,12 +528,12 @@ UBool IntlTest::callTest( IntlTest& testToBeCalled, char* par ) { execCount--; // correct a previously assumed test-exec, as this only calls a subtest testToBeCalled.setCaller( this ); - return testToBeCalled.runTest( path, par ); + return testToBeCalled.runTest( testPath, par ); } void IntlTest::setPath( char* pathVal ) { - this->path = pathVal; + this->testPath = pathVal; } UBool IntlTest::setVerbose( UBool verboseVal ) @@ -587,6 +543,13 @@ UBool IntlTest::setVerbose( UBool verboseVal ) return rval; } +UBool IntlTest::setWarnOnMissingData( UBool warn_on_missing_dataVal ) +{ + UBool rval = this->warn_on_missing_data; + this->warn_on_missing_data = warn_on_missing_dataVal; + return rval; +} + UBool IntlTest::setNoErrMsg( UBool no_err_msgVal ) { UBool rval = this->no_err_msg; @@ -613,6 +576,11 @@ int32_t IntlTest::getErrors( void ) return errorCount; } +int32_t IntlTest::getDataErrors( void ) +{ + return dataErrorCount; +} + UBool IntlTest::runTest( char* name, char* par ) { UBool rval; @@ -621,10 +589,10 @@ UBool IntlTest::runTest( char* name, char* par ) if (name) pos = strchr( name, delim ); // check if name contains path (by looking for '/') if (pos) { - path = pos+1; // store subpath for calling subtest + testPath = pos+1; // store subpath for calling subtest *pos = 0; // split into two strings }else{ - path = NULL; + testPath = NULL; } if (!name || (name[0] == 0) || (strcmp(name, "*") == 0)) { @@ -773,7 +741,15 @@ int32_t IntlTest::IncErrorCount( void ) return errorCount; } -void IntlTest::err() { +int32_t IntlTest::IncDataErrorCount( void ) +{ + dataErrorCount++; + if (caller) caller->IncDataErrorCount(); + return dataErrorCount; +} + +void IntlTest::err() +{ IncErrorCount(); } @@ -789,6 +765,28 @@ void IntlTest::errln( const UnicodeString &message ) if (!no_err_msg) LL_message( message, TRUE ); } +void IntlTest::dataerr( const UnicodeString &message ) +{ + IncDataErrorCount(); + + if (!warn_on_missing_data) { + IncErrorCount(); + } + + if (!no_err_msg) LL_message( message, FALSE ); +} + +void IntlTest::dataerrln( const UnicodeString &message ) +{ + IncDataErrorCount(); + + if (!warn_on_missing_data) { + IncErrorCount(); + } + + if (!no_err_msg) LL_message( message, TRUE ); +} + /* convenience functions that include sprintf formatting */ void IntlTest::log(const char *fmt, ...) { @@ -865,6 +863,17 @@ void IntlTest::errln(const char *fmt, ...) errln(UnicodeString(buffer, "")); } +void IntlTest::dataerrln(const char *fmt, ...) +{ + char buffer[4000]; + va_list ap; + + va_start(ap, fmt); + vsprintf(buffer, fmt, ap); + va_end(ap); + dataerrln(UnicodeString(buffer, "")); +} + void IntlTest::printErrors() { IntlTest::LL_message(errorList, TRUE); @@ -904,6 +913,7 @@ void IntlTest::LL_message( UnicodeString message, UBool newline ) // stream out the message length = message.extract(0, message.length(), buffer, sizeof(buffer)); if (length > 0) { + length = length > 10000 ? 10000 : length; fwrite(buffer, sizeof(*buffer), length, (FILE *)testoutfp); } @@ -968,27 +978,16 @@ main(int argc, char* argv[]) UBool name = FALSE; UBool leaks = FALSE; UBool warnOnMissingData = FALSE; + UBool defaultDataFound = FALSE; UErrorCode errorCode = U_ZERO_ERROR; UConverter *cnv = NULL; const char *warnOrErr = "Failure"; + UDate startTime, endTime; + int32_t diffTime; -#ifdef XP_MAC_CONSOLE - argc = ccommand( &argv ); -#endif - - /* Initialize ICU */ - IntlTest::setICU_DATA(); // Must set data directory before u_init() is called. - u_init(&errorCode); - if (U_FAILURE(errorCode)) { - fprintf(stderr, - "#### %s: u_init() failed, error is \"%s\".\n" - "#### Most commonly indicates that the ICU data is not accesible.\n" - "#### Check setting of ICU_DATA, or check that ICU data library is available\n" - "#### ICU_DATA is currently set to \"%s\"\n", argv[0], u_errorName(errorCode), u_getDataDirectory()); - u_cleanup(); - return 1; - } + U_MAIN_INIT_ARGS(argc, argv); + startTime = uprv_getUTCtime(); for (int i = 1; i < argc; ++i) { if (argv[i][0] == '-') { @@ -1053,31 +1052,55 @@ main(int argc, char* argv[]) major.setNoErrMsg( no_err_msg ); major.setQuick( quick ); major.setLeaks( leaks ); + major.setWarnOnMissingData( warnOnMissingData ); fprintf(stdout, "-----------------------------------------------\n"); fprintf(stdout, " IntlTest (C++) Test Suite for \n"); fprintf(stdout, " International Components for Unicode %s\n", U_ICU_VERSION); fprintf(stdout, "-----------------------------------------------\n"); fprintf(stdout, " Options: \n"); - fprintf(stdout, " all (a) : %s\n", (all? "On" : "Off")); - fprintf(stdout, " Verbose (v) : %s\n", (verbose? "On" : "Off")); - fprintf(stdout, " No error messages (n) : %s\n", (no_err_msg? "On" : "Off")); - fprintf(stdout, " Exhaustive (e) : %s\n", (!quick? "On" : "Off")); - fprintf(stdout, " Leaks (l) : %s\n", (leaks? "On" : "Off")); + fprintf(stdout, " all (a) : %s\n", (all? "On" : "Off")); + fprintf(stdout, " Verbose (v) : %s\n", (verbose? "On" : "Off")); + fprintf(stdout, " No error messages (n) : %s\n", (no_err_msg? "On" : "Off")); + fprintf(stdout, " Exhaustive (e) : %s\n", (!quick? "On" : "Off")); + fprintf(stdout, " Leaks (l) : %s\n", (leaks? "On" : "Off")); + fprintf(stdout, " Warn on missing data (w) : %s\n", (warnOnMissingData? "On" : "Off")); fprintf(stdout, "-----------------------------------------------\n"); - // Check that u_init() works + /* Check whether ICU will initialize without forcing the build data directory into + * the ICU_DATA path. Success here means either the data dll contains data, or that + * this test program was run with ICU_DATA set externally. Failure of this check + * is normal when ICU data is not packaged into a shared library. + * + * Whether or not this test succeeds, we want to cleanup and reinitialize + * with a data path so that data loading from individual files can be tested. + */ + u_init(&errorCode); + if (U_FAILURE(errorCode)) { + fprintf(stderr, + "#### Note: ICU Init without build-specific setDataDirectory() failed.\n"); + defaultDataFound = FALSE; + } + else { + defaultDataFound = TRUE; + } + u_cleanup(); errorCode = U_ZERO_ERROR; + + /* Initialize ICU */ + if (!defaultDataFound) { + IntlTest::setICU_DATA(); // Must set data directory before u_init() is called. + } u_init(&errorCode); if (U_FAILURE(errorCode)) { - fprintf(stdout, - "*** u_init() failed with error code = %s\n" - "*** Check the ICU_DATA environment variable and\n" - "*** check that the data files are present.\n", - u_errorName(errorCode)); - if(!warnOnMissingData) { - fprintf(stdout, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); - return 1; - } + fprintf(stderr, + "#### ERROR! %s: u_init() failed with status = \"%s\".\n" + "*** Check the ICU_DATA environment variable and \n" + "*** check that the data files are present.\n", argv[0], u_errorName(errorCode)); + if(warnOnMissingData == 0) { + fprintf(stderr, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n"); + u_cleanup(); + return 1; + } } @@ -1128,6 +1151,8 @@ main(int argc, char* argv[]) } } + Locale originalLocale; // Save the default locale for comparison later on. + /* TODO: Add option to call u_cleanup and rerun tests. */ if (all) { major.runTest(); @@ -1164,18 +1189,34 @@ main(int argc, char* argv[]) free(_testDataPath); _testDataPath = 0; + Locale lastDefaultLocale; + if (originalLocale != lastDefaultLocale) { + major.errln("FAILURE: A test changed the default locale without resetting it."); + } + fprintf(stdout, "\n--------------------------------------\n"); if (major.getErrors() == 0) { /* Call it twice to make sure that the defaults were reset. */ /* Call it before the OK message to verify proper cleanup. */ u_cleanup(); - u_cleanup(); + u_cleanup(); fprintf(stdout, "OK: All tests passed without error.\n"); + + if (major.getDataErrors() != 0) { + fprintf(stdout, "\t*WARNING* some data-loading errors were ignored by the -w option.\n"); + } }else{ fprintf(stdout, "Errors in total: %ld.\n", (long)major.getErrors()); major.printErrors(); + + if (major.getDataErrors() != 0) { + fprintf(stdout, "\t*Note* some errors are data-loading related. If the data used is not the \n" + "\tstock ICU data (i.e some have been added or removed), consider using\n" + "\tthe '-w' option to turn these errors into warnings.\n"); + } + /* Call afterwards to display errors. */ u_cleanup(); } @@ -1185,6 +1226,13 @@ main(int argc, char* argv[]) if (execCount <= 0) { fprintf(stdout, "***** Not all called tests actually exist! *****\n"); } + endTime = uprv_getUTCtime(); + diffTime = (int32_t)(endTime - startTime); + printf("Elapsed Time: %02d:%02d:%02d.%03d\n", + (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR), + (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), + (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND), + (int)(diffTime%U_MILLIS_PER_SECOND)); return major.getErrors(); } diff --git a/icuSources/test/intltest/intltest.dsp b/icuSources/test/intltest/intltest.dsp deleted file mode 100644 index 5746e0cd..00000000 --- a/icuSources/test/intltest/intltest.dsp +++ /dev/null @@ -1,1011 +0,0 @@ -# Microsoft Developer Studio Project File - Name="intltest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=intltest - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "intltest.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "intltest.mak" CFG="intltest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "intltest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "intltest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "intltest - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "intltest - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "intltest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MT /Za /W3 /GX /Zi /Ox /Ob0 /I "..\..\..\include" /I "..\..\..\source\common" /I "..\..\..\source\i18n" /I "..\..\tools\toolutil" /I "..\..\tools\ctestfw" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib icutu.lib ctestfw.lib /nologo /subsystem:console /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "intltest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MTd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\..\..\source\i18n" /I "..\..\tools\toolutil" /I "..\..\tools\ctestfw" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "UDATA_MAP_DLL" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icutud.lib ctestfwd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" /warn:3 -# SUBTRACT LINK32 /pdb:none /map - -!ELSEIF "$(CFG)" == "intltest - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\..\include" /I "..\..\..\source\common" /I "..\..\..\source\i18n" /I "..\..\tools\toolutil" /I "..\..\tools\ctestfw" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icuin.lib icutu.lib ctestfw.lib /nologo /subsystem:console /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "intltest - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\..\..\source\i18n" /I "..\..\tools\toolutil" /I "..\..\tools\ctestfw" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "UDATA_MAP_DLL" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icuind.lib icutud.lib ctestfwd.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib\\" /libpath:"..\..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "intltest - Win32 Release" -# Name "intltest - Win32 Debug" -# Name "intltest - Win64 Release" -# Name "intltest - Win64 Debug" -# Begin Group "break iteration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\itrbbi.cpp -# End Source File -# Begin Source File - -SOURCE=.\itrbbi.h -# End Source File -# Begin Source File - -SOURCE=.\rbbiapts.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbiapts.h -# End Source File -# Begin Source File - -SOURCE=.\rbbitst.cpp -# End Source File -# Begin Source File - -SOURCE=.\rbbitst.h -# End Source File -# End Group -# Begin Group "collation" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\allcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\allcoll.h -# End Source File -# Begin Source File - -SOURCE=.\apicoll.cpp - -!IF "$(CFG)" == "intltest - Win32 Release" - -!ELSEIF "$(CFG)" == "intltest - Win32 Debug" - -# ADD CPP /MTd - -!ELSEIF "$(CFG)" == "intltest - Win64 Release" - -!ELSEIF "$(CFG)" == "intltest - Win64 Debug" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\apicoll.h -# End Source File -# Begin Source File - -SOURCE=.\cntabcol.cpp -# End Source File -# Begin Source File - -SOURCE=.\cntabcol.h -# End Source File -# Begin Source File - -SOURCE=.\currcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\currcoll.h -# End Source File -# Begin Source File - -SOURCE=.\dacoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\dacoll.h -# End Source File -# Begin Source File - -SOURCE=.\dadrcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\dadrcoll.h -# End Source File -# Begin Source File - -SOURCE=.\decoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\decoll.h -# End Source File -# Begin Source File - -SOURCE=.\encoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\encoll.h -# End Source File -# Begin Source File - -SOURCE=.\escoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\escoll.h -# End Source File -# Begin Source File - -SOURCE=.\ficoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\ficoll.h -# End Source File -# Begin Source File - -SOURCE=.\frcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\frcoll.h -# End Source File -# Begin Source File - -SOURCE=.\g7coll.cpp -# End Source File -# Begin Source File - -SOURCE=.\g7coll.h -# End Source File -# Begin Source File - -SOURCE=.\itercoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\itercoll.h -# End Source File -# Begin Source File - -SOURCE=.\jacoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\jacoll.h -# End Source File -# Begin Source File - -SOURCE=.\lcukocol.cpp -# End Source File -# Begin Source File - -SOURCE=.\lcukocol.h -# End Source File -# Begin Source File - -SOURCE=.\mnkytst.cpp -# End Source File -# Begin Source File - -SOURCE=.\mnkytst.h -# End Source File -# Begin Source File - -SOURCE=.\regcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\regcoll.h -# End Source File -# Begin Source File - -SOURCE=.\srchtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\srchtest.h -# End Source File -# Begin Source File - -SOURCE=.\svccoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\svccoll.h -# End Source File -# Begin Source File - -SOURCE=.\thcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\thcoll.h -# End Source File -# Begin Source File - -SOURCE=.\trcoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\trcoll.h -# End Source File -# Begin Source File - -SOURCE=.\tscoll.cpp -# End Source File -# Begin Source File - -SOURCE=.\tscoll.h -# End Source File -# Begin Source File - -SOURCE=.\ucaconf.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucaconf.h -# End Source File -# End Group -# Begin Group "collections" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\v32test.cpp -# End Source File -# Begin Source File - -SOURCE=.\v32test.h -# End Source File -# End Group -# Begin Group "configuration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\strtest.cpp -# ADD CPP /Ze -# End Source File -# Begin Source File - -SOURCE=.\strtest.h -# End Source File -# Begin Source File - -SOURCE=.\tsmthred.cpp -# ADD CPP /Ze -# End Source File -# Begin Source File - -SOURCE=.\tsmthred.h -# End Source File -# Begin Source File - -SOURCE=.\tsputil.cpp -# End Source File -# Begin Source File - -SOURCE=.\tsputil.h -# End Source File -# End Group -# Begin Group "conversion" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\convtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\convtest.h -# End Source File -# End Group -# Begin Group "data & memory" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\uobjtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\uobjtest.h -# End Source File -# End Group -# Begin Group "formatting" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\astrotst.cpp -# End Source File -# Begin Source File - -SOURCE=.\astrotst.h -# End Source File -# Begin Source File - -SOURCE=.\calcasts.cpp -# End Source File -# Begin Source File - -SOURCE=.\calcasts.h -# End Source File -# Begin Source File - -SOURCE=.\callimts.cpp -# End Source File -# Begin Source File - -SOURCE=.\callimts.h -# End Source File -# Begin Source File - -SOURCE=.\calregts.cpp -# End Source File -# Begin Source File - -SOURCE=.\calregts.h -# End Source File -# Begin Source File - -SOURCE=.\caltest.cpp -# End Source File -# Begin Source File - -SOURCE=.\caltest.h -# End Source File -# Begin Source File - -SOURCE=.\caltztst.cpp -# End Source File -# Begin Source File - -SOURCE=.\caltztst.h -# End Source File -# Begin Source File - -SOURCE=.\dcfmapts.cpp -# End Source File -# Begin Source File - -SOURCE=.\dcfmapts.h -# End Source File -# Begin Source File - -SOURCE=.\dtfmapts.cpp -# End Source File -# Begin Source File - -SOURCE=.\dtfmapts.h -# End Source File -# Begin Source File - -SOURCE=.\dtfmrgts.cpp -# End Source File -# Begin Source File - -SOURCE=.\dtfmrgts.h -# End Source File -# Begin Source File - -SOURCE=.\dtfmtrtts.cpp -# End Source File -# Begin Source File - -SOURCE=.\dtfmtrtts.h -# End Source File -# Begin Source File - -SOURCE=.\dtfmttst.cpp -# End Source File -# Begin Source File - -SOURCE=.\dtfmttst.h -# End Source File -# Begin Source File - -SOURCE=.\incaltst.cpp -# End Source File -# Begin Source File - -SOURCE=.\incaltst.h -# End Source File -# Begin Source File - -SOURCE=.\itformat.cpp -# End Source File -# Begin Source File - -SOURCE=.\itformat.h -# End Source File -# Begin Source File - -SOURCE=.\itrbnf.cpp -# End Source File -# Begin Source File - -SOURCE=.\itrbnf.h -# End Source File -# Begin Source File - -SOURCE=.\itrbnfp.cpp -# End Source File -# Begin Source File - -SOURCE=.\itrbnfp.h -# End Source File -# Begin Source File - -SOURCE=.\itrbnfrt.cpp -# End Source File -# Begin Source File - -SOURCE=.\itrbnfrt.h -# End Source File -# Begin Source File - -SOURCE=.\miscdtfm.cpp -# End Source File -# Begin Source File - -SOURCE=.\miscdtfm.h -# End Source File -# Begin Source File - -SOURCE=.\msfmrgts.cpp -# End Source File -# Begin Source File - -SOURCE=.\msfmrgts.h -# End Source File -# Begin Source File - -SOURCE=.\nmfmapts.cpp -# End Source File -# Begin Source File - -SOURCE=.\nmfmapts.h -# End Source File -# Begin Source File - -SOURCE=.\nmfmtrt.cpp -# End Source File -# Begin Source File - -SOURCE=.\nmfmtrt.h -# End Source File -# Begin Source File - -SOURCE=.\numfmtst.cpp -# End Source File -# Begin Source File - -SOURCE=.\numfmtst.h -# End Source File -# Begin Source File - -SOURCE=.\numrgts.cpp -# End Source File -# Begin Source File - -SOURCE=.\numrgts.h -# End Source File -# Begin Source File - -SOURCE=.\pptest.cpp -# End Source File -# Begin Source File - -SOURCE=.\pptest.h -# End Source File -# Begin Source File - -SOURCE=.\sdtfmtts.cpp -# End Source File -# Begin Source File - -SOURCE=.\sdtfmtts.h -# End Source File -# Begin Source File - -SOURCE=.\tchcfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\tchcfmt.h -# End Source File -# Begin Source File - -SOURCE=.\tfsmalls.cpp -# End Source File -# Begin Source File - -SOURCE=.\tfsmalls.h -# End Source File -# Begin Source File - -SOURCE=.\tmsgfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\tmsgfmt.h -# End Source File -# Begin Source File - -SOURCE=.\tsdate.cpp -# End Source File -# Begin Source File - -SOURCE=.\tsdate.h -# End Source File -# Begin Source File - -SOURCE=.\tsdcfmsy.cpp -# End Source File -# Begin Source File - -SOURCE=.\tsdcfmsy.h -# End Source File -# Begin Source File - -SOURCE=.\tsdtfmsy.cpp -# End Source File -# Begin Source File - -SOURCE=.\tsdtfmsy.h -# End Source File -# Begin Source File - -SOURCE=.\tsnmfmt.cpp -# End Source File -# Begin Source File - -SOURCE=.\tsnmfmt.h -# End Source File -# Begin Source File - -SOURCE=.\tzbdtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\tzbdtest.h -# End Source File -# Begin Source File - -SOURCE=.\tzregts.cpp -# End Source File -# Begin Source File - -SOURCE=.\tzregts.h -# End Source File -# Begin Source File - -SOURCE=.\tztest.cpp -# End Source File -# Begin Source File - -SOURCE=.\tztest.h -# End Source File -# End Group -# Begin Group "locales & resources" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\loctest.cpp -# End Source File -# Begin Source File - -SOURCE=.\loctest.h -# End Source File -# Begin Source File - -SOURCE=.\restest.cpp -# End Source File -# Begin Source File - -SOURCE=.\restest.h -# End Source File -# Begin Source File - -SOURCE=.\restsnew.cpp -# End Source File -# Begin Source File - -SOURCE=.\restsnew.h -# End Source File -# End Group -# Begin Group "idna" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\idnaref.cpp -# End Source File -# Begin Source File - -SOURCE=.\idnaref.h -# End Source File -# Begin Source File - -SOURCE=.\nptrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\nptrans.h -# End Source File -# Begin Source File - -SOURCE=.\punyref.c -# End Source File -# Begin Source File - -SOURCE=.\punyref.h -# End Source File -# Begin Source File - -SOURCE=.\testidn.cpp -# End Source File -# Begin Source File - -SOURCE=.\testidna.cpp -# End Source File -# Begin Source File - -SOURCE=.\testidna.h -# End Source File -# End Group -# Begin Group "misc" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\intltest.cpp -# End Source File -# Begin Source File - -SOURCE=.\intltest.h -# End Source File -# Begin Source File - -SOURCE=.\itmajor.cpp -# End Source File -# Begin Source File - -SOURCE=.\itmajor.h -# End Source File -# Begin Source File - -SOURCE=.\itutil.cpp -# End Source File -# Begin Source File - -SOURCE=.\itutil.h -# End Source File -# Begin Source File - -SOURCE=.\testutil.cpp -# End Source File -# Begin Source File - -SOURCE=.\testutil.h -# End Source File -# Begin Source File - -SOURCE=.\textfile.cpp -# End Source File -# Begin Source File - -SOURCE=.\textfile.h -# End Source File -# Begin Source File - -SOURCE=.\tokiter.cpp -# End Source File -# Begin Source File - -SOURCE=.\tokiter.h -# End Source File -# End Group -# Begin Group "normalization" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\canittst.cpp -# End Source File -# Begin Source File - -SOURCE=.\canittst.h -# End Source File -# Begin Source File - -SOURCE=.\normconf.cpp -# End Source File -# Begin Source File - -SOURCE=.\normconf.h -# End Source File -# Begin Source File - -SOURCE=.\tstnorm.cpp -# End Source File -# Begin Source File - -SOURCE=.\tstnorm.h -# End Source File -# Begin Source File - -SOURCE=.\tstnrapi.cpp -# End Source File -# End Group -# Begin Group "properties & sets" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\ucdtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\ucdtest.h -# End Source File -# Begin Source File - -SOURCE=.\usettest.cpp -# End Source File -# Begin Source File - -SOURCE=.\usettest.h -# End Source File -# End Group -# Begin Group "regex" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\regextst.cpp -# End Source File -# Begin Source File - -SOURCE=.\regextst.h -# End Source File -# End Group -# Begin Group "registration" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\icusvtst.cpp -# End Source File -# Begin Source File - -SOURCE=.\icusvtst.h -# End Source File -# End Group -# Begin Group "strings" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\citrtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\citrtest.h -# End Source File -# Begin Source File - -SOURCE=.\reptest.cpp -# End Source File -# Begin Source File - -SOURCE=.\reptest.h -# End Source File -# Begin Source File - -SOURCE=.\sfwdchit.cpp -# End Source File -# Begin Source File - -SOURCE=.\sfwdchit.h -# End Source File -# Begin Source File - -SOURCE=.\strcase.cpp -# End Source File -# Begin Source File - -SOURCE=.\ustrtest.cpp -# End Source File -# Begin Source File - -SOURCE=.\ustrtest.h -# End Source File -# End Group -# Begin Group "transforms" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\cpdtrtst.cpp -# End Source File -# Begin Source File - -SOURCE=.\cpdtrtst.h -# End Source File -# Begin Source File - -SOURCE=.\ittrans.cpp -# End Source File -# Begin Source File - -SOURCE=.\ittrans.h -# End Source File -# Begin Source File - -SOURCE=.\jamotest.cpp -# End Source File -# Begin Source File - -SOURCE=.\jamotest.h -# End Source File -# Begin Source File - -SOURCE=.\transapi.cpp -# End Source File -# Begin Source File - -SOURCE=.\transapi.h -# End Source File -# Begin Source File - -SOURCE=.\transrt.cpp -# End Source File -# Begin Source File - -SOURCE=.\transrt.h -# End Source File -# Begin Source File - -SOURCE=.\transtst.cpp -# End Source File -# Begin Source File - -SOURCE=.\transtst.h -# End Source File -# Begin Source File - -SOURCE=.\trnserr.cpp -# End Source File -# Begin Source File - -SOURCE=.\trnserr.h -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/test/intltest/intltest.h b/icuSources/test/intltest/intltest.h index a918e74a..975893ba 100644 --- a/icuSources/test/intltest/intltest.h +++ b/icuSources/test/intltest/intltest.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -78,8 +78,10 @@ public: virtual UBool setNoErrMsg( UBool no_err_msg = TRUE ); virtual UBool setQuick( UBool quick = TRUE ); virtual UBool setLeaks( UBool leaks = TRUE ); + virtual UBool setWarnOnMissingData( UBool warn_on_missing_data = TRUE ); virtual int32_t getErrors( void ); + virtual int32_t getDataErrors (void ); virtual void setCaller( IntlTest* callingTest ); // for internal use only virtual void setPath( char* path ); // for internal use only @@ -102,6 +104,10 @@ public: virtual void errln( const UnicodeString &message ); + virtual void dataerr( const UnicodeString &message ); + + virtual void dataerrln( const UnicodeString &message ); + // convenience functions: sprintf() + errln() etc. void log(const char *fmt, ...); void logln(const char *fmt, ...); @@ -109,6 +115,8 @@ public: void infoln(const char *fmt, ...); void err(const char *fmt, ...); void errln(const char *fmt, ...); + void dataerr(const char *fmt, ...); + void dataerrln(const char *fmt, ...); // Print ALL named errors encountered so far void printErrors(); @@ -166,21 +174,25 @@ protected: virtual int32_t IncErrorCount( void ); + virtual int32_t IncDataErrorCount( void ); + virtual UBool callTest( IntlTest& testToBeCalled, char* par ); - UBool verbose; - UBool no_err_msg; - UBool quick; - UBool leaks; + UBool verbose; + UBool no_err_msg; + UBool quick; + UBool leaks; + UBool warn_on_missing_data; private: - UBool LL_linestart; + UBool LL_linestart; int32_t LL_indentlevel; int32_t errorCount; + int32_t dataErrorCount; IntlTest* caller; - char* path; // specifies subtests + char* testPath; // specifies subtests //FILE *testoutfp; void *testoutfp; @@ -195,10 +207,6 @@ protected: static UnicodeString prettify(const UnicodeString &source, UBool parseBackslash=FALSE); static UnicodeString &appendHex(uint32_t number, int32_t digits, UnicodeString &target); - /* complete a relative path to a full pathname, and convert to platform-specific syntax. */ - /* The character seperating directories for the relative path is '|'. */ - static void pathnameInContext( char* fullname, int32_t maxsize, const char* relpath ); - public: static void setICU_DATA(); // Set up ICU_DATA if necessary. @@ -226,6 +234,8 @@ void it_infoln( void ); void it_err(void); void it_err( UnicodeString message ); void it_errln( UnicodeString message ); +void it_dataerr( UnicodeString message ); +void it_dataerrln( UnicodeString message ); /** * This is a variant of cintltst/ccolltst.c:CharsToUChars(). diff --git a/icuSources/test/intltest/intltest.vcproj b/icuSources/test/intltest/intltest.vcproj index 15c4c714..67fe8756 100644 --- a/icuSources/test/intltest/intltest.vcproj +++ b/icuSources/test/intltest/intltest.vcproj @@ -22,13 +22,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\..\..\source\i18n,..\..\tools\toolutil,..\..\tools\ctestfw" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\..\i18n;..\..\tools\toolutil;..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/intltest.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -83,15 +83,13 @@ CharacterSet="2"> - - - - @@ -264,6 +256,12 @@ + + + + @@ -300,10 +298,22 @@ + + + + + + + + @@ -316,6 +326,18 @@ Filter=""> + + + + + + @@ -562,10 +584,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -597,6 +661,12 @@ + + + + @@ -655,6 +725,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/icuSources/test/intltest/itformat.cpp b/icuSources/test/intltest/itformat.cpp index c7233002..c5e30d2a 100644 --- a/icuSources/test/intltest/itformat.cpp +++ b/icuSources/test/intltest/itformat.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ diff --git a/icuSources/test/intltest/itmajor.cpp b/icuSources/test/intltest/itmajor.cpp index bcb74d14..97b89ea4 100644 --- a/icuSources/test/intltest/itmajor.cpp +++ b/icuSources/test/intltest/itmajor.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1998-2004, International Business Machines Corporation and + * Copyright (c) 1998-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -32,6 +32,7 @@ #include "icusvtst.h" #include "testidna.h" #include "convtest.h" +#include "csdetest.h" #define CASE_SUITE(id, suite) case id: \ name = #suite; \ @@ -169,6 +170,15 @@ void MajorTestLevel::runIndexedTest( int32_t index, UBool exec, const char* &nam #endif break; + case 13: name = "csdet"; + if (exec) { + logln("TestSuite CharsetDetection---"); logln(); + CharsetDetectionTest test; + callTest(test, par); + } + + break; + default: name = ""; break; } diff --git a/icuSources/test/intltest/itrbnf.cpp b/icuSources/test/intltest/itrbnf.cpp index b9dd923b..a44c8c7e 100644 --- a/icuSources/test/intltest/itrbnf.cpp +++ b/icuSources/test/intltest/itrbnf.cpp @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1996-2004, International Business Machines Corporation and * + * Copyright (C) 1996-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -19,6 +19,8 @@ #include "unicode/ustring.h" #include "unicode/decimfmt.h" #include "unicode/udata.h" +#include "testutil.h" + //#include "llong.h" #include @@ -60,6 +62,8 @@ void IntlTestRBNF::runIndexedTest(int32_t index, UBool exec, const char* &name, TESTCASE(12, TestBelgianFrenchSpellout); TESTCASE(13, TestSmallValues); TESTCASE(14, TestLocalizations); + TESTCASE(15, TestAllLocales); + TESTCASE(16, TestHebrewFraction); #else TESTCASE(0, TestRBNFDisabled); #endif @@ -71,6 +75,60 @@ void IntlTestRBNF::runIndexedTest(int32_t index, UBool exec, const char* &name, #if U_HAVE_RBNF +void IntlTestRBNF::TestHebrewFraction() { + // this is the expected output for 123.45, with no '<' in it. + UChar text1[] = { + 0x05de, 0x05d0, 0x05d4, 0x0020, + 0x05e2, 0x05e9, 0x05e8, 0x05d9, 0x05dd, 0x0020, + 0x05d5, 0x05e9, 0x05dc, 0x05d5, 0x05e9, 0x0020, + 0x05e0, 0x05e7, 0x05d5, 0x05d3, 0x05d4, 0x0020, + 0x05d0, 0x05e8, 0x05d1, 0x05e2, 0x05d9, 0x05dd, 0x0020, + 0x05d5, 0x05d7, 0x05de, 0x05e9, 0x0000, + }; + UChar text2[] = { + 0x05DE, 0x05D0, 0x05D4, 0x0020, + 0x05E2, 0x05E9, 0x05E8, 0x05D9, 0x05DD, 0x0020, + 0x05D5, 0x05E9, 0x05DC, 0x05D5, 0x05E9, 0x0020, + 0x05E0, 0x05E7, 0x05D5, 0x05D3, 0x05D4, 0x0020, + 0x05D0, 0x05E4, 0x05E1, 0x0020, + 0x05D0, 0x05E4, 0x05E1, 0x0020, + 0x05D0, 0x05E8, 0x05D1, 0x05E2, 0x05D9, 0x05DD, 0x0020, + 0x05D5, 0x05D7, 0x05DE, 0x05E9, 0x0000, + }; + UErrorCode status = U_ZERO_ERROR; + RuleBasedNumberFormat* formatter = new RuleBasedNumberFormat(URBNF_SPELLOUT, "he_IL", status); + UnicodeString result; + Formattable parseResult; + ParsePosition pp(0); + { + UnicodeString expected(text1); + formatter->format(123.45, result); + if (result != expected) { + errln((UnicodeString)"expected '" + TestUtility::hex(expected) + "'\nbut got: '" + TestUtility::hex(result) + "'"); + } else { + formatter->parse(result, parseResult, pp); + if (parseResult.getDouble() != 123.45) { + errln("expected 123.45 but got: %g", parseResult.getDouble()); + } + } + } + { + UnicodeString expected(text2); + result.remove(); + formatter->format(123.0045, result); + if (result != expected) { + errln((UnicodeString)"expected '" + TestUtility::hex(expected) + "'\nbut got: '" + TestUtility::hex(result) + "'"); + } else { + pp.setIndex(0); + formatter->parse(result, parseResult, pp); + if (parseResult.getDouble() != 123.0045) { + errln("expected 123.0045 but got: %g", parseResult.getDouble()); + } + } + } + delete formatter; +} + void IntlTestRBNF::TestAPI() { // This test goes through the APIs that were not tested before. @@ -122,6 +180,12 @@ IntlTestRBNF::TestAPI() { if(!(ruleCtorResult == *formatter)) { errln("Formatter constructed from the original rules should be semantically equivalent to the original!"); } + + // Jitterbug 4452, for coverage + RuleBasedNumberFormat nf(spelloutRules, (UnicodeString)"", Locale::getUS(), perror, status); + if(!(nf == *formatter)) { + errln("Formatter constructed from the original rules should be semantically equivalent to the original!"); + } } ures_close(en); } @@ -230,6 +294,24 @@ IntlTestRBNF::TestAPI() { logln("Formatted 4, expected " + expected + " got " + result); } + result.remove(); + FieldPosition pos; + formatter->format((int64_t)4, result, pos, status = U_ZERO_ERROR); + if(result != expected) { + errln("Formatted 4 int64_t, expected " + expected + " got " + result); + } else { + logln("Formatted 4 int64_t, expected " + expected + " got " + result); + } + + //Jitterbug 4452, for coverage + result.remove(); + FieldPosition pos2; + formatter->format((int64_t)4, formatter->getRuleSetName(0), result, pos2, status = U_ZERO_ERROR); + if(result != expected) { + errln("Formatted 4 int64_t, expected " + expected + " got " + result); + } else { + logln("Formatted 4 int64_t, expected " + expected + " got " + result); + } // clean up logln("Cleaning up"); @@ -1521,10 +1603,17 @@ IntlTestRBNF::TestLocalizations(void) Locale locale0("en__VALLEY@turkey=gobblegobble"); Locale locale1("de_DE_FOO"); Locale locale2("ja_JP"); - logln(formatter0.getRuleSetDisplayName(0, locale0)); - logln(formatter0.getRuleSetDisplayName(0, locale1)); - logln(formatter0.getRuleSetDisplayName(0, locale2)); - // TODO: check against intended result + UnicodeString name = formatter0.getRuleSetName(0); + if ( formatter0.getRuleSetDisplayName(0, locale0) == "Main" + && formatter0.getRuleSetDisplayName(0, locale1) == "das Main" + && formatter0.getRuleSetDisplayName(0, locale2) == "%main" + && formatter0.getRuleSetDisplayName(name, locale0) == "Main" + && formatter0.getRuleSetDisplayName(name, locale1) == "das Main" + && formatter0.getRuleSetDisplayName(name, locale2) == "%main"){ + logln("getRuleSetDisplayName tested"); + }else { + errln("failed to getRuleSetDisplayName"); + } } for (i = 0; i < formatter0.getNumberOfRuleSetDisplayNameLocales(); ++i) { @@ -1607,14 +1696,46 @@ IntlTestRBNF::TestLocalizations(void) } } +void +IntlTestRBNF::TestAllLocales() +{ + const char* names[] = { + " (spellout) ", + " (ordinal) ", + " (duration) " + }; + int32_t count = 0; + const Locale* locales = Locale::getAvailableLocales(count); + for (int i = 0; i < count; ++i) { + const Locale* loc = &locales[i]; + for (int j = 0; j < 3; ++j) { + UErrorCode status = U_ZERO_ERROR; + RuleBasedNumberFormat* f = new RuleBasedNumberFormat((URBNFRuleSetTag)j, *loc, status); + if (U_SUCCESS(status)) { + double n = 45.678; + UnicodeString str; + f->format(n, str); + delete f; + + logln(UnicodeString(loc->getName()) + UnicodeString(names[j]) + + UnicodeString("success: 45.678 -> ") + str); + } else { + errln(UnicodeString(loc->getName()) + UnicodeString(names[j]) + + UnicodeString("ERROR could not instantiate -> ") + UnicodeString(u_errorName(status))); + } + } + } +} + void IntlTestRBNF::doTest(RuleBasedNumberFormat* formatter, const char* testData[][2], UBool testParsing) { // man, error reporting would be easier with printf-style syntax for unicode string and formattable UErrorCode status = U_ZERO_ERROR; + DecimalFormatSymbols dfs("en", status); // NumberFormat* decFmt = NumberFormat::createInstance(Locale::getUS(), status); - NumberFormat* decFmt = new DecimalFormat("#,###.################", status); + DecimalFormat decFmt("#,###.################", dfs, status); if (U_FAILURE(status)) { errln("FAIL: could not create NumberFormat"); } else { @@ -1624,7 +1745,7 @@ IntlTestRBNF::doTest(RuleBasedNumberFormat* formatter, const char* testData[][2] log("[%i] %s = ", i, numString); Formattable expectedNumber; - decFmt->parse(numString, expectedNumber, status); + decFmt.parse(numString, expectedNumber, status); if (U_FAILURE(status)) { errln("FAIL: decFmt could not parse %s", numString); break; @@ -1634,14 +1755,14 @@ IntlTestRBNF::doTest(RuleBasedNumberFormat* formatter, const char* testData[][2] formatter->format(expectedNumber, actualString/* , pos*/, status); if (U_FAILURE(status)) { UnicodeString msg = "Fail: formatter could not format "; - decFmt->format(expectedNumber, msg, status); + decFmt.format(expectedNumber, msg, status); errln(msg); break; } else { UnicodeString expectedString = UnicodeString(expectedWords).unescape(); if (actualString != expectedString) { UnicodeString msg = "FAIL: check failed for "; - decFmt->format(expectedNumber, msg, status); + decFmt.format(expectedNumber, msg, status); msg.append(", expected "); msg.append(expectedString); msg.append(" but got "); @@ -1665,9 +1786,9 @@ IntlTestRBNF::doTest(RuleBasedNumberFormat* formatter, const char* testData[][2] UnicodeString msg = "FAIL: parse failed for "; msg.append(actualString); msg.append(", expected "); - decFmt->format(expectedNumber, msg, status); + decFmt.format(expectedNumber, msg, status); msg.append(", but got "); - decFmt->format(parsedNumber, msg, status); + decFmt.format(parsedNumber, msg, status); errln(msg); break; } @@ -1677,7 +1798,6 @@ IntlTestRBNF::doTest(RuleBasedNumberFormat* formatter, const char* testData[][2] } } } - delete decFmt; } } diff --git a/icuSources/test/intltest/itrbnf.h b/icuSources/test/intltest/itrbnf.h index db4e118f..8d50b25c 100644 --- a/icuSources/test/intltest/itrbnf.h +++ b/icuSources/test/intltest/itrbnf.h @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1996-2004, International Business Machines Corporation and * + * Copyright (C) 1996-2005, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -107,6 +107,16 @@ class IntlTestRBNF : public IntlTest { */ virtual void TestLocalizations(); + /** + * Test that all locales construct ok. + */ + virtual void TestAllLocales(); + + /** + * Test that hebrew fractions format without trailing '<' + */ + virtual void TestHebrewFraction(); + protected: virtual void doTest(RuleBasedNumberFormat* formatter, const char* testData[][2], UBool testParsing); virtual void doLenientParseTest(RuleBasedNumberFormat* formatter, const char* testData[][2]); diff --git a/icuSources/test/intltest/itutil.cpp b/icuSources/test/intltest/itutil.cpp index 2a5d6bd8..b7aafc82 100644 --- a/icuSources/test/intltest/itutil.cpp +++ b/icuSources/test/intltest/itutil.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -21,7 +21,10 @@ #include "tsmthred.h" #include "tsputil.h" #include "uobjtest.h" +#include "utxttest.h" #include "v32test.h" +#include "uvectest.h" +#include "aliastst.h" //#include "custrtest.h" //#include "ccitrtst.h" //#include "cloctest.h" @@ -130,16 +133,33 @@ void IntlTestUtilities::runIndexedTest( int32_t index, UBool exec, const char* & } break;; - /* - case 8: - name = "LocaleTest"; + case 11: + name = "UVectorTest"; + if(exec) { + logln ("UVectorTest---"); logln(""); + UVectorTest test; + callTest( test, par ); + } + break;; + + case 12: + name = "UTextTest"; + if(exec) { + logln ("UTextTest---"); logln(""); + UTextTest test; + callTest( test, par ); + } + break; + + case 13: + name = "LocaleAliasTest"; if (exec) { - logln("LocaleTest---"); logln(""); - CLocaleTest test; + logln("LocaleAliasTest---"); logln(""); + LocaleAliasTest test; callTest( test, par ); } break; - */ + default: name = ""; break; //needed to end loop } } diff --git a/icuSources/test/intltest/loctest.cpp b/icuSources/test/intltest/loctest.cpp index 3f9e1f16..06264a7f 100644 --- a/icuSources/test/intltest/loctest.cpp +++ b/icuSources/test/intltest/loctest.cpp @@ -1,11 +1,10 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ #include "loctest.h" -#include #include "unicode/decimfmt.h" #include "unicode/ucurr.h" #include "unicode/smpdtfmt.h" @@ -13,7 +12,7 @@ #include "unicode/brkiter.h" #include "unicode/coll.h" #include "cstring.h" -#include "uassert.h" +#include const char* rawData[33][8] = { @@ -50,14 +49,14 @@ const char* rawData[33][8] = { // display langage (French) { "anglais", "fran\\u00E7ais", "catalan", "grec", "norv\\u00E9gien", "italien", "xx", "chinois" }, // display script (French) - { "", "", "", "", "", "", "", "han simplifi\\u00E9" }, + { "", "", "", "", "", "", "", "id\\u00E9ogrammes han (variante simplifi\\u00E9e)" }, // display country (French) { "\\u00C9tats-Unis", "France", "Espagne", "Gr\\u00E8ce", "Norv\\u00E8ge", "", "YY", "Chine" }, // display variant (French) { "", "", "", "", "NY", "", "", "" }, // display name (French) //{ "anglais (Etats-Unis)", "francais (France)", "catalan (Espagne)", "grec (Grece)", "norvegien (Norvege,Nynorsk)", "italien", "xx (YY)" }, - { "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)", "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "italien", "xx (YY)", "chinois (han simplifi\\u00E9, Chine)" }, // STILL not right + { "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)", "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)", "italien", "xx (YY)", "chinois (id\\u00E9ogrammes han (variante simplifi\\u00E9e), Chine)" }, // STILL not right /* display language (Catalan) */ @@ -119,38 +118,25 @@ const char* rawData[33][8] = { { "English (United States)", "French (France)", "Catalan (Spain)", "Greek (Greece)", "Norwegian (Norway,NY)", "Italian", "xx (YY)", "" } }; -// * test macros + /* Usage: - test_compare( Function to be performed, - Test of the function, - expected result of the test, - printable result - ) + test_assert( Test (should be TRUE) ) Example: - test_compare(i=3,i,3, someNumberFormatter(i)); - test_compare(0,1+1,2,someNumberFormatter(1+1)); - - Note that in the second example the expression is 0, because the fcn produces it's own result. + test_assert(i==3); - Macro is ugly but makes the tests pretty. + the macro is ugly but makes the tests pretty. */ -#define test_compare(expression,test,expected,printableResult) \ +#define test_assert(test) \ { \ - expression; \ - \ - if((test) != (expected)) \ - errln("FAIL: " + UnicodeString(#expression) + "; -> " + printableResult + "\n" + \ - " (" + UnicodeString(#test) + " != " + UnicodeString(#expected) + ")" ); \ + if(!(test)) \ + errln("FAIL: " #test " was not true. In " __FILE__ " on line %d", __LINE__ ); \ else \ - logln(UnicodeString(#expression) + " -> " + printableResult + " (" + UnicodeString(#test) + ")"); \ + logln("PASS: asserted " #test); \ } - - - /* Usage: test_assert_print( Test (should be TRUE), printable ) @@ -164,13 +150,13 @@ const char* rawData[33][8] = { #define test_assert_print(test,print) \ { \ if(!(test)) \ - errln("FAIL: " + UnicodeString(#test) + " was not true." + "-> " + UnicodeString(print) ); \ + errln("FAIL: " #test " was not true. " + UnicodeString(print) ); \ else \ - logln("PASS: asserted " + UnicodeString(#test) + "-> " + UnicodeString(print)); \ + logln("PASS: asserted " #test "-> " + UnicodeString(print)); \ } -#define test_dumpLocale(l) { UnicodeString s(l.getName(),""); logln(#l + UnicodeString(" = ") + s); } +#define test_dumpLocale(l) { logln(#l " = " + UnicodeString(l.getName(), "")); } LocaleTest::LocaleTest() : dataTable(NULL) @@ -504,25 +490,12 @@ LocaleTest::TestDisplayNames() if(s.isEmpty()) { errln("unable to get any default-locale display string for the country of fr_FR\n"); } -} - -/* - Usage: - test_assert( Test (should be TRUE) ) - - Example: - test_assert(i==3); - - the macro is ugly but makes the tests pretty. -*/ - -#define test_assert(test) \ - { \ - if(!(test)) \ - errln("FAIL: " + UnicodeString(#test) + " was not true. " + UnicodeString(__FILE__ " line ") + __LINE__ ); \ - else \ - logln("PASS: asserted " + UnicodeString(#test) ); \ + s.remove(); + Locale("zh", "Hant").getDisplayScript(s); + if(s.isEmpty()) { + errln("unable to get any default-locale display string for the country of zh_Hant\n"); } +} void LocaleTest::TestSimpleObjectStuff() { Locale test1("aa", "AA"); @@ -872,8 +845,8 @@ LocaleTest::TestGetLangsAndCountries() ; /* TODO: Change this test to be more like the cloctst version? */ - if (testCount != 468) - errln("Expected getISOLanguages() to return 468 languages; it returned %d", testCount); + if (testCount != 485) + errln("Expected getISOLanguages() to return 481 languages; it returned %d", testCount); else { for (i = 0; i < 15; i++) { int32_t j; @@ -903,9 +876,9 @@ LocaleTest::TestGetLangsAndCountries() for(testCount=0;test[testCount];testCount++) ; - if (testCount != 239) - errln("Expected getISOLanguages to return 238 languages; it returned" + testCount); - else { + if (testCount != 244){ + errln("Expected getISOCountries to return 240 countries; it returned %d", testCount); + }else { for (i = 0; i < spot2Len; i++) { int32_t j; for (j = 0; j < testCount; j++) @@ -920,7 +893,7 @@ LocaleTest::TestGetLangsAndCountries() errln("Couldn't find " + spotCheck2[i] + " in country list."); } } - for (i = 0; i < testCount; i++) { + for (i = 0; i < testCount; i++) { UnicodeString testee(test[i],""); UnicodeString uc(test[i],""); if (testee != uc.toUpper()) @@ -1032,7 +1005,7 @@ LocaleTest::TestAtypicalLocales() "espagnol (Allemagne)", "Croatie", CharsToUnicodeString("Su\\u00E8de"), - CharsToUnicodeString("R\\u00E9publique dominicaine"), + CharsToUnicodeString("Dominicaine, r\\u00E9publique"), "Belgique" }; UnicodeString spanishDisplayNames [] = { CharsToUnicodeString("alem\\u00E1n (Canad\\u00E1)"), @@ -1046,18 +1019,19 @@ LocaleTest::TestAtypicalLocales() CharsToUnicodeString("B\\u00E9lgica") }; // De-Anglicizing root required the change from // English display names to ISO Codes - ram 2003/09/26 - UnicodeString bengaliDisplayNames [] = { "de (CA)", - "ja (ZA)", - "ru (MX)", - "en (FR)", - "es (DE)", - "HR", - "SE", - "DO", - "BE" }; + UnicodeString invDisplayNames [] = { "German (Canada)", + "Japanese (South Africa)", + "Russian (Mexico)", + "English (France)", + "Spanish (Germany)", + "Croatia", + "Sweden", + "Dominican Republic", + "Belgium" }; int32_t i; UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; Locale::setDefault(Locale::getUS(), status); for (i = 0; i < 9; ++i) { UnicodeString name; @@ -1091,17 +1065,18 @@ LocaleTest::TestAtypicalLocales() for (i = 0; i < 9; i++) { UnicodeString name; - localesToTest[i].getDisplayName(Locale("be", "ES"), name); + localesToTest[i].getDisplayName(Locale("inv", "IN"), name); logln(name + " Locale fallback to be, and data fallback to root"); - if (name != bengaliDisplayNames[i]) - errln("Lookup in Bengali failed: expected \"" + bengaliDisplayNames[i] - + "\", got \"" + name + "\""); - localesToTest[i].getDisplayName(Locale("be", "EG"), name); + if (name != invDisplayNames[i]) + errln("Lookup in INV failed: expected \"" + prettify(invDisplayNames[i]) + + "\", got \"" + prettify(name) + "\""); + localesToTest[i].getDisplayName(Locale("inv", "BD"), name); logln(name + " Data fallback to root"); - if (name != bengaliDisplayNames[i]) - errln("Lookup in Bengali failed: expected \"" + bengaliDisplayNames[i] - + "\", got \"" + name + "\""); + if (name != invDisplayNames[i]) + errln("Lookup in INV failed: expected \"" + prettify(invDisplayNames[i]) + + "\", got \"" + prettify(name )+ "\""); } + Locale::setDefault(saveLocale, status); } #if !UCONFIG_NO_FORMATTING @@ -1186,6 +1161,12 @@ LocaleTest::TestEuroSupport() UnicodeString temp; NumberFormat *nf = NumberFormat::createCurrencyInstance(loc, status); UnicodeString pos; + + if (U_FAILURE(status)) { + dataerrln("Error calling NumberFormat::createCurrencyInstance(%s)", *locales); + continue; + } + nf->format(271828.182845, pos); UnicodeString neg; nf->format(-271828.182845, neg); @@ -1305,6 +1286,10 @@ LocaleTest::Test4139940() UDate mydate = date(98,3,13); // A Monday UErrorCode status = U_ZERO_ERROR; SimpleDateFormat df_full("EEEE", mylocale, status); + if(U_FAILURE(status)){ + errln(UnicodeString("Could not create SimpleDateFormat object for locale hu. Error: " )+ UnicodeString(u_errorName(status))); + return; + } UnicodeString str; FieldPosition pos(FieldPosition::DONT_CARE); df_full.format(mydate, str, pos); @@ -1424,7 +1409,10 @@ LocaleTest::Test4147552() "norsk (Noreg, NY)" //"Norsk (Noreg, Nynorsk)" }; + UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; + Locale::setDefault(Locale::getEnglish(), status); for (int32_t i = 0; i < 3; ++i) { Locale loc = locales[i]; UnicodeString temp; @@ -1436,6 +1424,7 @@ LocaleTest::Test4147552() norwegianDisplayNames[i] + ", got " + loc.getDisplayName(loc, temp)); } + Locale::setDefault(saveLocale, status); } void @@ -1631,6 +1620,16 @@ LocaleTest::TestKeywordVariants(void) { } } } + keywords->reset(status); // Make sure that reset works. + for(j = 0;;) { + if((keyword = keywords->next(&keywordLen, status)) == NULL) { + break; + } + if(strcmp(keyword, testCases[i].expectedKeywords[j]) != 0) { + err("Expected to get keyword value %s, got %s\n", testCases[i].expectedKeywords[j], keyword); + } + j++; + } } delete keywords; } @@ -1770,6 +1769,12 @@ void LocaleTest::TestGetLocale(void) { } else { _checklocs("Calendar", req, valid, actual); } + /* Make sure that it fails correctly */ + ec = U_FILE_ACCESS_ERROR; + if (cal->getLocale(ULOC_VALID_LOCALE, ec).getName()[0] != 0) { + errln("FAIL: Calendar::getLocale() failed to fail correctly. It should have returned \"\""); + } + ec = U_ZERO_ERROR; } delete cal; #endif @@ -1778,11 +1783,14 @@ void LocaleTest::TestGetLocale(void) { #if !UCONFIG_NO_FORMATTING req = "fr_FR_NICE"; DecimalFormat* dec = (DecimalFormat*) - NumberFormat::createInstance(Locale::createFromName(req), ec); - U_ASSERT(dec->getDynamicClassID() == DecimalFormat::getStaticClassID()); + NumberFormat::createInstance(Locale::createFromName(req), ec); if (U_FAILURE(ec)) { errln("FAIL: NumberFormat::createInstance failed"); } else { + if (dec->getDynamicClassID() != DecimalFormat::getStaticClassID()) { + errln("FAIL: NumberFormat::createInstance does not return a DecimalFormat"); + return; + } valid = dec->getLocale(ULOC_VALID_LOCALE, ec); actual = dec->getLocale(ULOC_ACTUAL_LOCALE, ec); if (U_FAILURE(ec)) { @@ -1792,7 +1800,10 @@ void LocaleTest::TestGetLocale(void) { } const DecimalFormatSymbols* sym = dec->getDecimalFormatSymbols(); - U_ASSERT(sym != 0); + if (sym == NULL) { + errln("FAIL: getDecimalFormatSymbols returned NULL"); + return; + } valid = sym->getLocale(ULOC_VALID_LOCALE, ec); actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); if (U_FAILURE(ec)) { @@ -1810,25 +1821,34 @@ void LocaleTest::TestGetLocale(void) { SimpleDateFormat* dat = (SimpleDateFormat*) DateFormat::createDateInstance(DateFormat::kDefault, Locale::createFromName(req)); - U_ASSERT(dat != 0); - U_ASSERT(dat->getDynamicClassID() == SimpleDateFormat::getStaticClassID()); - valid = dat->getLocale(ULOC_VALID_LOCALE, ec); - actual = dat->getLocale(ULOC_ACTUAL_LOCALE, ec); - if (U_FAILURE(ec)) { - errln("FAIL: SimpleDateFormat::getLocale() failed"); + if (dat == 0){ + dataerrln("Error calling DateFormat::createDateInstance()"); } else { - _checklocs("SimpleDateFormat", req, valid, actual); - } + if (dat->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) { + errln("FAIL: NumberFormat::createInstance does not return a DecimalFormat"); + return; + } + valid = dat->getLocale(ULOC_VALID_LOCALE, ec); + actual = dat->getLocale(ULOC_ACTUAL_LOCALE, ec); + if (U_FAILURE(ec)) { + errln("FAIL: SimpleDateFormat::getLocale() failed"); + } else { + _checklocs("SimpleDateFormat", req, valid, actual); + } - const DateFormatSymbols* sym = dat->getDateFormatSymbols(); - U_ASSERT(sym != 0); - valid = sym->getLocale(ULOC_VALID_LOCALE, ec); - actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); - if (U_FAILURE(ec)) { - errln("FAIL: DateFormatSymbols::getLocale() failed"); - } else { - _checklocs("DateFormatSymbols", req, valid, actual); - } + const DateFormatSymbols* sym = dat->getDateFormatSymbols(); + if (sym == NULL) { + errln("FAIL: getDateFormatSymbols returned NULL"); + return; + } + valid = sym->getLocale(ULOC_VALID_LOCALE, ec); + actual = sym->getLocale(ULOC_ACTUAL_LOCALE, ec); + if (U_FAILURE(ec)) { + errln("FAIL: DateFormatSymbols::getLocale() failed"); + } else { + _checklocs("DateFormatSymbols", req, valid, actual); + } + } delete dat; #endif @@ -2031,7 +2051,7 @@ void LocaleTest::TestCanonicalization(void) { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" }, { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" }, { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" }, - { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" }, + { "zh_TW_STROKE", "zh_TW_STROKE", "zh_Hant_TW@collation=stroke" }, { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" }, { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" }, { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" }, @@ -2047,12 +2067,13 @@ void LocaleTest::TestCanonicalization(void) { "en-BOONT", "BOGUS", "en__BOONT" }, /* registered name */ { "de-1901", "de_1901", "de__1901" }, /* registered name */ { "de-1906", "de_1906", "de__1906" }, /* registered name */ - { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_SP" }, /* .NET name */ - { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_SP" }, /* .NET name */ + { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_CS" }, /* .NET name */ + { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_CS" }, /* .NET name */ + { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_CS" }, /* Linux name */ { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */ { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */ { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */ - { "zh-CHT", "zh_CHT", "zh_TW" }, /* .NET name This may change back to zh_Hant */ + { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */ /* posix behavior that used to be performed by getName */ { "mr.utf8", "mr.utf8", "mr" }, diff --git a/icuSources/test/intltest/miscdtfm.cpp b/icuSources/test/intltest/miscdtfm.cpp index c0b5660d..0a5fb0bb 100644 --- a/icuSources/test/intltest/miscdtfm.cpp +++ b/icuSources/test/intltest/miscdtfm.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -122,7 +122,7 @@ DateFormatMiscTests::test4097450() { log(dformat[i] + "\t" + dstring[i] + "\t"); formatter = new SimpleDateFormat(dformat[i], status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; //try { UnicodeString str; FieldPosition pos(FieldPosition::DONT_CARE); @@ -157,9 +157,9 @@ DateFormatMiscTests::test4099975() { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); - failure(status, "new DateFormatSymbols"); + if(failure(status, "new DateFormatSymbols")) return; SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols, status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; UnicodeString format0; format0 = df->format(d, format0); UnicodeString localizedPattern0; @@ -189,9 +189,9 @@ DateFormatMiscTests::test4099975() { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); - failure(status, "new DateFormatSymbols"); + if(failure(status, "new DateFormatSymbols")) return; SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; df->setDateFormatSymbols(*symbols); UnicodeString format0; format0 = df->format(d, format0); @@ -220,9 +220,9 @@ DateFormatMiscTests::test4099975() { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); - failure(status, "new DateFormatSymbols"); + if(failure(status, "new DateFormatSymbols")) return; SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), symbols, status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; UnicodeString format0; format0 = df->format(d, format0); UnicodeString localizedPattern0; @@ -251,7 +251,7 @@ DateFormatMiscTests::test4099975() DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); failure(status, "new DateFormatSymbols"); SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status); - failure(status, "new SimpleDateFormat"); + if(failure(status, "new SimpleDateFormat")) return; df-> adoptDateFormatSymbols(symbols); UnicodeString format0; format0 = df->format(d, format0); @@ -308,11 +308,17 @@ DateFormatMiscTests::test4117335() 0x6e96, 0x6642 }; + UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593}; + UnicodeString jstLong(jstLongC, 5, 5); UnicodeString jstShort = "JST"; - + UnicodeString tzID = "Asia/Tokyo"; + + UnicodeString jdtLong(jdtLongC, 5, 5); + + UnicodeString jdtShort = "JDT"; UErrorCode status = U_ZERO_ERROR; DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status); if(U_FAILURE(status)) { @@ -338,24 +344,32 @@ DateFormatMiscTests::test4117335() int32_t rowCount, colCount; const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount); - logln(UnicodeString("Long zone name = ") + zones[rowCount-3][1]); - if (zones[rowCount-3][1] != jstLong) { - errln("*** Should have been " + prettify(jstLong)); + //don't hard code the index .. compute it. + int32_t index = -1; + for (int32_t i = 0; i < rowCount; ++i) { + if (tzID == (zones[i][0])) { + index = i; + break; + } + } + logln(UnicodeString("Long zone name = ") + zones[index][1]); + if (zones[index][1] != jstLong) { + errln("*** Should have been " + prettify(jstLong)+ " but it is: " + prettify(zones[index][1])); //throw new Exception("Error in long TZ name"); } - logln(UnicodeString("Short zone name = ") + zones[rowCount-3][2]); - if (zones[rowCount-3][2] != jstShort) { - errln("*** Should have been " + jstShort); + logln(UnicodeString("Short zone name = ") + zones[index][2]); + if (zones[index][2] != jstShort) { + errln("*** Should have been " + prettify(jstShort) + " but it is: " + prettify(zones[index][2])); //throw new Exception("Error in short TZ name"); } - logln(UnicodeString("Long zone name = ") + zones[rowCount-3][3]); - if (zones[rowCount-3][3] != jstLong) { - errln("*** Should have been " + jstLong); + logln(UnicodeString("Long zone name = ") + zones[index][3]); + if (zones[index][3] != jdtLong) { + errln("*** Should have been " + prettify(jstLong) + " but it is: " + prettify(zones[index][3])); //throw new Exception("Error in long TZ name"); } - logln(UnicodeString("SHORT zone name = ") + zones[rowCount-3][4]); - if (zones[rowCount-3][4] != jstShort) { - errln("*** Should have been " + jstShort); + logln(UnicodeString("SHORT zone name = ") + zones[index][4]); + if (zones[index][4] != jdtShort) { + errln("*** Should have been " + prettify(jstShort)+ " but it is: " + prettify(zones[index][4])); //throw new Exception("Error in short TZ name"); } delete symbols; diff --git a/icuSources/test/intltest/msfmrgts.cpp b/icuSources/test/intltest/msfmrgts.cpp index 343d135a..97465a09 100644 --- a/icuSources/test/intltest/msfmrgts.cpp +++ b/icuSources/test/intltest/msfmrgts.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -757,8 +757,12 @@ void MessageFormatRegressionTest::Test4118594() pp.setIndex(0); Formattable *newobjs = mf->parse(result, pp, count1); // newobjs now equals {new Double(3.1)} - if (newobjs[0].getDouble() != 3.1) - errln( UnicodeString("newobjs[0] = ") + newobjs[0].getDouble()); + if (newobjs == NULL) { + dataerrln("Error calling MessageFormat::parse"); + } else { + if (newobjs[0].getDouble() != 3.1) + errln( UnicodeString("newobjs[0] = ") + newobjs[0].getDouble()); + } delete [] objs; delete [] newobjs; diff --git a/icuSources/test/intltest/nmfmapts.cpp b/icuSources/test/intltest/nmfmapts.cpp index 8d8875e0..117b2ed3 100644 --- a/icuSources/test/intltest/nmfmapts.cpp +++ b/icuSources/test/intltest/nmfmapts.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -28,22 +28,26 @@ void IntlTestNumberFormatAPI::runIndexedTest( int32_t index, UBool exec, const c if (exec) { logln("NumberFormat API test---"); logln(""); UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; Locale::setDefault(Locale::getEnglish(), status); if(U_FAILURE(status)) { errln("ERROR: Could not set default locale, test may not give correct results"); } testAPI(/* par */); + Locale::setDefault(saveLocale, status); } break; case 1: name = "NumberFormatRegistration"; if (exec) { logln("NumberFormat Registration test---"); logln(""); UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; Locale::setDefault(Locale::getEnglish(), status); if(U_FAILURE(status)) { errln("ERROR: Could not set default locale, test may not give correct results"); } testRegistration(); + Locale::setDefault(saveLocale, status); } break; default: name = ""; break; @@ -96,15 +100,18 @@ void IntlTestNumberFormatAPI::testAPI(/* char* par */) } // ======= Test equality - +if (per_fr != NULL && cur_fr != NULL) +{ logln("Testing equality operator"); if( *per_fr == *cur_fr || ! ( *per_fr != *cur_fr) ) { errln("ERROR: == failed"); } +} // ======= Test various format() methods - +if (cur_fr != NULL) +{ logln("Testing various format() methods"); double d = -10456.0037; @@ -140,12 +147,14 @@ void IntlTestNumberFormatAPI::testAPI(/* char* par */) errln("ERROR: format(Formattable [long]) failed"); } logln((UnicodeString) "" + fL.getLong() + " formatted to " + res6); - +} // ======= Test parse() - +if (fr != NULL) +{ logln("Testing parse()"); + double d = -10456.0037; UnicodeString text("-10,456.0037"); Formattable result1, result2, result3; ParsePosition pos(0), pos01(0); @@ -170,10 +179,11 @@ void IntlTestNumberFormatAPI::testAPI(/* char* par */) errln("ERROR: Roundtrip failed (via parse()) for " + text); } logln(text + " parsed into " + (int32_t) result3.getDouble()); - +} // ======= Test getters and setters - +if (fr != NULL && def != NULL) +{ logln("Testing getters and setters"); int32_t count = 0; @@ -213,7 +223,7 @@ void IntlTestNumberFormatAPI::testAPI(/* char* par */) if(fr->getMinimumFractionDigits() != def->getMinimumFractionDigits() ) { errln("ERROR: setMinimumFractionDigits() failed"); } - +} // ======= Test getStaticClassID() @@ -311,60 +321,65 @@ IntlTestNumberFormatAPI::testRegistration() NumberFormat::unregister(key, status); // restore for other tests NumberFormat* f5 = NumberFormat::createCurrencyInstance(SRC_LOC, status); UNumberFormat* uf5 = unum_open(UNUM_CURRENCY, NULL, 0, SRC_LOC.getName(),NULL, &status); - - float n = 1234.567f; - UnicodeString res0, res1, res2, res3, res4, res5; - UChar ures3[50]; - UChar ures4[50]; - UChar ures5[50]; - - f0->format(n, res0); - f1->format(n, res1); - f2->format(n, res2); - f3->format(n, res3); - f4->format(n, res4); - f5->format(n, res5); - - unum_formatDouble(uf3, n, ures3, 50, NULL, &status); - unum_formatDouble(uf4, n, ures4, 50, NULL, &status); - unum_formatDouble(uf5, n, ures5, 50, NULL, &status); - - logln((UnicodeString)"f0 swap int: " + res0); - logln((UnicodeString)"f1 src int: " + res1); - logln((UnicodeString)"f2 src cur: " + res2); - logln((UnicodeString)"f3 reg cur: " + res3); - logln((UnicodeString)"f4 reg int: " + res4); - logln((UnicodeString)"f5 unreg cur: " + res5); - log("uf3 reg cur: "); - logln(ures3); - log("uf4 reg int: "); - logln(ures4); - log("uf5 ureg cur: "); - logln(ures5); - - if (f3 == f3a) { - errln("did not get new instance from service"); + + if (U_FAILURE(status)) { + dataerrln("Error creating instnaces."); + return; } else { - delete f3a; - } - if (res3 != res0) { - errln("registered service did not match"); - } - if (res4 != res1) { - errln("registered service did not inherit"); - } - if (res5 != res2) { - errln("unregistered service did not match original"); - } + float n = 1234.567f; + UnicodeString res0, res1, res2, res3, res4, res5; + UChar ures3[50]; + UChar ures4[50]; + UChar ures5[50]; + + f0->format(n, res0); + f1->format(n, res1); + f2->format(n, res2); + f3->format(n, res3); + f4->format(n, res4); + f5->format(n, res5); + + unum_formatDouble(uf3, n, ures3, 50, NULL, &status); + unum_formatDouble(uf4, n, ures4, 50, NULL, &status); + unum_formatDouble(uf5, n, ures5, 50, NULL, &status); + + logln((UnicodeString)"f0 swap int: " + res0); + logln((UnicodeString)"f1 src int: " + res1); + logln((UnicodeString)"f2 src cur: " + res2); + logln((UnicodeString)"f3 reg cur: " + res3); + logln((UnicodeString)"f4 reg int: " + res4); + logln((UnicodeString)"f5 unreg cur: " + res5); + log("uf3 reg cur: "); + logln(ures3); + log("uf4 reg int: "); + logln(ures4); + log("uf5 ureg cur: "); + logln(ures5); + + if (f3 == f3a) { + errln("did not get new instance from service"); + } else { + delete f3a; + } + if (res3 != res0) { + errln("registered service did not match"); + } + if (res4 != res1) { + errln("registered service did not inherit"); + } + if (res5 != res2) { + errln("unregistered service did not match original"); + } - if (res0 != ures3) { - errln("registered service did not match / unum"); - } - if (res1 != ures4) { - errln("registered service did not inherit / unum"); - } - if (res2 != ures5) { - errln("unregistered service did not match original / unum"); + if (res0 != ures3) { + errln("registered service did not match / unum"); + } + if (res1 != ures4) { + errln("registered service did not inherit / unum"); + } + if (res2 != ures5) { + errln("unregistered service did not match original / unum"); + } } unum_close(uf5); diff --git a/icuSources/test/intltest/nmfmtrt.cpp b/icuSources/test/intltest/nmfmtrt.cpp index 36bc7c44..0a6e9e81 100644 --- a/icuSources/test/intltest/nmfmtrt.cpp +++ b/icuSources/test/intltest/nmfmtrt.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -90,18 +90,21 @@ NumberFormatRoundTripTest::start() logln("Default Locale"); fmt = NumberFormat::createInstance(status); - failure(status, "NumberFormat::createInstance"); - test(fmt); + if (!failure(status, "NumberFormat::createInstance")){ + test(fmt); + } delete fmt; fmt = NumberFormat::createCurrencyInstance(status); - failure(status, "NumberFormat::createCurrencyInstance"); - test(fmt); + if (!failure(status, "NumberFormat::createCurrencyInstance")){ + test(fmt); + } delete fmt; fmt = NumberFormat::createPercentInstance(status); - failure(status, "NumberFormat::createPercentInstance"); - test(fmt); + if (!failure(status, "NumberFormat::createPercentInstance")){ + test(fmt); + } delete fmt; @@ -222,7 +225,9 @@ void NumberFormatRoundTripTest::test(NumberFormat *fmt, const Formattable& value) { fmt->setMaximumFractionDigits(999); - + if(fmt->getDynamicClassID() == DecimalFormat::getStaticClassID()) { + ((DecimalFormat *)fmt)->setRoundingIncrement(0.0); + } UErrorCode status = U_ZERO_ERROR; UnicodeString s, s2, temp; if(isDouble(value)) diff --git a/icuSources/test/intltest/nptrans.cpp b/icuSources/test/intltest/nptrans.cpp index c84f7b23..eae8db5d 100644 --- a/icuSources/test/intltest/nptrans.cpp +++ b/icuSources/test/intltest/nptrans.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003, International Business Machines + * Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -166,7 +166,6 @@ int32_t NamePrepTransform::map(const UChar* src, int32_t srcLength, U16_NEXT(buffer, bufIndex, bufLen, ch); if(unassigned.contains(ch)){ status = U_IDNA_UNASSIGNED_ERROR; - rsource.releaseBuffer(); return 0; } } diff --git a/icuSources/test/intltest/numfmtst.cpp b/icuSources/test/intltest/numfmtst.cpp index e6bf04c2..04e10108 100644 --- a/icuSources/test/intltest/numfmtst.cpp +++ b/icuSources/test/intltest/numfmtst.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* Modification History: @@ -24,6 +24,7 @@ #include "tokiter.h" #include "charstr.h" #include "putilimp.h" +#include "winnmtst.h" #include #include @@ -76,7 +77,12 @@ void NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &n CASE(27,TestCases); CASE(28,TestCurrencyNames); - + CASE(29,TestCurrencyAmount); + CASE(30,TestCurrencyUnit); + CASE(31,TestCoverage); + CASE(32,TestJB3832); + CASE(33,TestHost); + CASE(34,TestCurrencyFormat); default: name = ""; break; } } @@ -110,10 +116,56 @@ NumberFormatTest::TestAPI(void) status = U_ZERO_ERROR; } + result.remove(); + int64_t ll = 12; + test->format(ll, result); + if (result != "12.00"){ + errln("format int64_t error"); + } + delete test; } } +class StubNumberForamt :public NumberFormat{ +public: + StubNumberForamt(){}; + virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const { + return appendTo; + } + virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const { + return appendTo.append((UChar)0x0033); + } + virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const { + return NumberFormat::format(number, appendTo, pos); + } + virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const { + return appendTo; + } + virtual void parse(const UnicodeString& , + Formattable& , + ParsePosition& ) const {} + virtual void parse( const UnicodeString& , + Formattable& , + UErrorCode& ) const {} + virtual UClassID getDynamicClassID(void) const { + static char classID = 0; + return (UClassID)&classID; + } + virtual Format* clone() const {return NULL;} +}; + +void +NumberFormatTest::TestCoverage(void){ + StubNumberForamt stub; + UnicodeString agent("agent"); + FieldPosition pos; + int64_t num = 4; + if (stub.format(num, agent, pos) != UnicodeString("agent3")){ + errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)"); + }; +} + // Test various patterns void NumberFormatTest::TestPatterns(void) @@ -595,7 +647,8 @@ static const char* testCases[][2]= { {"eu_ES_PREEURO", "\\u20A7 1.150" }, {"gl_ES_PREEURO", "\\u20A7 1.150" }, {"it_IT_PREEURO", "\\u20A4 1.150" }, - {"pt_PT_PREEURO", "1,150$50 Esc."} + {"pt_PT_PREEURO", "1,150$50 Esc."}, + {"en_US@currency=JPY", "\\u00A51,150"} }; /** * Test localized currency patterns. @@ -605,6 +658,11 @@ NumberFormatTest::TestCurrency(void) { UErrorCode status = U_ZERO_ERROR; NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status); + if (U_FAILURE(status)) { + dataerrln("Error calling NumberFormat::createCurrencyInstance()"); + return; + } + UnicodeString s; currencyFmt->format(1.50, s); logln((UnicodeString)"Un pauvre ici a..........." + s); if (!(s=="1,50 $")) @@ -748,6 +806,11 @@ NumberFormatTest::TestRounding487(void) { UErrorCode status = U_ZERO_ERROR; NumberFormat *nf = NumberFormat::createInstance(status); + if (U_FAILURE(status)) { + dataerrln("Error calling NumberFormat::createInstance()"); + return; + } + roundingTest(*nf, 0.00159999, 4, "0.0016"); roundingTest(*nf, 0.00995, 4, "0.01"); @@ -1419,6 +1482,8 @@ void NumberFormatTest::TestCurrencyNames(void) { // USD { "US$", "US Dollar" } // 04/04/1792- UErrorCode ec = U_ZERO_ERROR; static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ + static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/ + static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/ UBool isChoiceFormat; int32_t len; // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK @@ -1435,9 +1500,69 @@ void NumberFormatTest::TestCurrencyNames(void) { &isChoiceFormat, &len, &ec))); assertSuccess("ucurr_getName", ec); + // Test that a default or fallback warning is being returned. JB 4239. + (void) ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat, + &len, &ec); + assertTrue("ucurr_getName (fallback)", + U_USING_FALLBACK_WARNING == ec, TRUE); + (void) ucurr_getName(CAD, "vi", UCURR_LONG_NAME, &isChoiceFormat, + &len, &ec); + assertTrue("ucurr_getName (default)", + U_USING_DEFAULT_WARNING == ec, TRUE); + + // Test that a default warning is being returned when falling back to root. JB 4536. + (void) ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat, + &len, &ec); + assertTrue("ucurr_getName (default to root)", + U_USING_DEFAULT_WARNING == ec, TRUE); + // TODO add more tests later } +void NumberFormatTest::TestCurrencyUnit(void){ + UErrorCode ec = U_ZERO_ERROR; + static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ + CurrencyUnit cu(USD, ec); + assertSuccess("CurrencyUnit", ec); + + const UChar * r = cu.getISOCurrency(); // who is the buffer owner ? + assertEquals("getISOCurrency()", USD, r); + + CurrencyUnit cu2(cu); + if (!(cu2 == cu)){ + errln("CurrencyUnit copy constructed object should be same"); + } + + CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone(); + if (!(*cu3 == cu)){ + errln("CurrencyUnit cloned object should be same"); + } + delete cu3; +} + +void NumberFormatTest::TestCurrencyAmount(void){ + UErrorCode ec = U_ZERO_ERROR; + static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ + CurrencyAmount ca(9, USD, ec); + assertSuccess("CurrencyAmount", ec); + + CurrencyAmount ca2(ca); + if (!(ca2 == ca)){ + errln("CurrencyAmount copy constructed object should be same"); + } + + ca2=ca; + if (!(ca2 == ca)){ + errln("CurrencyAmount assigned object should be same"); + } + + CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone(); + if (!(*ca3 == ca)){ + errln("CurrencyAmount cloned object should be same"); + } + delete ca3; +} + void NumberFormatTest::TestSymbolsWithBadLocale(void) { Locale locDefault; Locale locBad("x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME"); @@ -1462,7 +1587,8 @@ void NumberFormatTest::TestSymbolsWithBadLocale(void) { + prettify(mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum))); if (mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum).length() == 0 - && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol) + && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol + && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) { errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); } @@ -1672,6 +1798,10 @@ void NumberFormatTest::TestCases() { delete ref; ref = new DecimalFormat(tok, new DecimalFormatSymbols(Locale::getUS(), ec), ec); + if (U_FAILURE(ec)) { + dataerrln("Error constructing DecimalFormat"); + goto error; + } break; case 1: // loc= @@ -1972,6 +2102,7 @@ void NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale, assertSuccess("ucurr_forLocale", ec); fmt.setCurrency(curr, ec); assertSuccess("DecimalFormat::setCurrency", ec); + fmt.setCurrency(curr); //Deprecated variant, for coverage only } UnicodeString s; fmt.format(value, s); @@ -2045,5 +2176,85 @@ void NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, ", expected " + pos + " " + width + " " + pad); } } +void NumberFormatTest::TestJB3832(){ + const char* localeID = "pt_PT@currency=PTE"; + Locale loc(localeID); + UErrorCode status = U_ZERO_ERROR; + UnicodeString expected("1,150$50 Esc."); + UnicodeString s; + NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status); + if(U_FAILURE(status)){ + errln("Could not create currency formatter for locale %s", localeID); + return; + } + currencyFmt->format(1150.50, s); + if(s!=expected){ + errln(UnicodeString("FAIL: Expected: ")+expected + + UnicodeString(" Got: ") + s + + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); + } + if (U_FAILURE(status)){ + errln("FAIL: Status %s", u_errorName(status)); + } + delete currencyFmt; +} + +void NumberFormatTest::TestHost() +{ +#ifdef U_WINDOWS + Win32NumberTest::testLocales(this); +#endif +} + +void NumberFormatTest::TestCurrencyFormat() +{ + // This test is here to increase code coverage. + UErrorCode status = U_ZERO_ERROR; + MeasureFormat *cloneObj; + UnicodeString str; + Formattable toFormat, result; + static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0}; + + Locale saveDefaultLocale = Locale::getDefault(); + Locale::setDefault( Locale::getUK(), status ); + if (U_FAILURE(status)) { + errln("couldn't set default Locale!"); + return; + } + + MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status); + Locale::setDefault( saveDefaultLocale, status ); + if (U_FAILURE(status)){ + errln("FAIL: Status %s", u_errorName(status)); + return; + } + cloneObj = (MeasureFormat *)measureObj->clone(); + if (cloneObj == NULL) { + errln("Clone doesn't work"); + return; + } + toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status)); + measureObj->format(toFormat, str, status); + measureObj->parseObject(str, result, status); + if (U_FAILURE(status)){ + errln("FAIL: Status %s", u_errorName(status)); + } + if (result != toFormat) { + errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); + } + status = U_ZERO_ERROR; + str.truncate(0); + cloneObj->format(toFormat, str, status); + cloneObj->parseObject(str, result, status); + if (U_FAILURE(status)){ + errln("FAIL: Status %s", u_errorName(status)); + } + if (result != toFormat) { + errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); + } + delete measureObj; + delete cloneObj; + +} #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/intltest/numfmtst.h b/icuSources/test/intltest/numfmtst.h index 07ab0aa1..2c7e5bbe 100644 --- a/icuSources/test/intltest/numfmtst.h +++ b/icuSources/test/intltest/numfmtst.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -28,6 +28,9 @@ class NumberFormatTest: public CalendarTimeZoneTest { * Test APIs (to increase code coverage) */ void TestAPI(void); + + void TestCoverage(void); + /** * Test the handling of quotes **/ @@ -102,6 +105,10 @@ class NumberFormatTest: public CalendarTimeZoneTest { void TestCurrencyNames(void); + void TestCurrencyAmount(void); + + void TestCurrencyUnit(void); + void TestSymbolsWithBadLocale(void); void TestAdoptDecimalFormatSymbols(void); @@ -109,9 +116,14 @@ class NumberFormatTest: public CalendarTimeZoneTest { void TestPerMill(void); void TestIllegalPatterns(void); - + void TestCases(void); + void TestJB3832(void); + + void TestHost(void); + + void TestCurrencyFormat(void); private: static UBool equalValue(const Formattable& a, const Formattable& b); @@ -153,20 +165,6 @@ class NumberFormatTest: public CalendarTimeZoneTest { void expectCurrency(NumberFormat& nf, const Locale& locale, double value, const UnicodeString& string); - void expectPat(DecimalFormat& fmt, const UnicodeString& exp); - - void expectPat(DecimalFormat& fmt, const char *exp) { - expectPat(fmt, UnicodeString(exp, "")); - } - - void expectPad(DecimalFormat& fmt, const UnicodeString& pat, - int32_t pos); - - void expectPad(DecimalFormat& fmt, const char *pat, - int32_t pos) { - expectPad(fmt, pat, pos, 0, (UChar)0); - } - void expectPad(DecimalFormat& fmt, const UnicodeString& pat, int32_t pos, int32_t width, UChar pad); @@ -183,6 +181,20 @@ class NumberFormatTest: public CalendarTimeZoneTest { expectPad(fmt, UnicodeString(pat, ""), pos, width, pad); } + void expectPat(DecimalFormat& fmt, const UnicodeString& exp); + + void expectPat(DecimalFormat& fmt, const char *exp) { + expectPat(fmt, UnicodeString(exp, "")); + } + + void expectPad(DecimalFormat& fmt, const UnicodeString& pat, + int32_t pos); + + void expectPad(DecimalFormat& fmt, const char *pat, + int32_t pos) { + expectPad(fmt, pat, pos, 0, (UChar)0); + } + // internal utility routine static UnicodeString& escape(UnicodeString& s); diff --git a/icuSources/test/intltest/numrgts.cpp b/icuSources/test/intltest/numrgts.cpp index bfc26475..cb82463c 100644 --- a/icuSources/test/intltest/numrgts.cpp +++ b/icuSources/test/intltest/numrgts.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -19,8 +19,77 @@ #include "unicode/resbund.h" #include "unicode/calendar.h" #include "unicode/datefmt.h" +#include "unicode/ucurr.h" #include "putilimp.h" +class MyNumberFormatTest : public NumberFormat +{ +public: + + virtual UClassID getDynamicClassID(void) const; + + virtual UnicodeString& format( double number, + UnicodeString& toAppendTo, + FieldPosition& pos, + UErrorCode& status) const + { + return NumberFormat::format(number, toAppendTo, pos, status); + } + + /* Just keep this here to make some of the compilers happy */ + virtual UnicodeString& format(const Formattable& obj, + UnicodeString& toAppendTo, + FieldPosition& pos, + UErrorCode& status) const + { + return NumberFormat::format(obj, toAppendTo, pos, status); + } + + /* Just use one of the format functions */ + virtual UnicodeString& format( double /* number */, + UnicodeString& toAppendTo, + FieldPosition& /* pos */) const + { + toAppendTo = ""; + return toAppendTo; + } + + /* + public Number parse(String text, ParsePosition parsePosition) + { return new Integer(0); } + */ + + /* Just use one of the parse functions */ + virtual void parse( const UnicodeString& /* text */, + Formattable& result, + ParsePosition& /* parsePosition */) const + { + result.setLong((int32_t)0); + } + + virtual void parse( const UnicodeString& text, + Formattable& result, + UErrorCode& status) const + { + NumberFormat::parse(text, result, status); + } + virtual Format* clone() const + { return NULL; } + + virtual UnicodeString& format(int32_t, + UnicodeString& foo, + FieldPosition&) const + { return foo.remove(); } + + virtual UnicodeString& format(int64_t, + UnicodeString& foo, + FieldPosition&) const + { return foo.remove(); } + + virtual void applyPattern(const UnicodeString&, UParseError&, UErrorCode&){ + } +}; + int32_t gMyNumberFormatTestClassID; UClassID MyNumberFormatTest::getDynamicClassID() const { @@ -312,7 +381,10 @@ NumberFormatRegressionTest::assignFloatValue(float returnfloat) logln(UnicodeString(" VALUE ") + returnfloat); UErrorCode status = U_ZERO_ERROR; NumberFormat *nfcommon = NumberFormat::createCurrencyInstance(Locale::getUS(), status); - failure(status, "NumberFormat::createCurrencyInstance", Locale::getUS()); + if (failure(status, "NumberFormat::createCurrencyInstance", Locale::getUS())){ + delete nfcommon; + return returnfloat; + } nfcommon->setGroupingUsed(FALSE); UnicodeString stringValue; @@ -383,7 +455,10 @@ void NumberFormatRegressionTest::Test4071492 (void) double x = 0.00159999; UErrorCode status = U_ZERO_ERROR; NumberFormat *nf = NumberFormat::createInstance(status); - failure(status, "NumberFormat::createInstance", Locale::getUS()); + if (failure(status, "NumberFormat::createInstance", Locale::getUS())) { + delete nf; + return; + } nf->setMaximumFractionDigits(4); UnicodeString out; FieldPosition pos(FieldPosition::DONT_CARE); @@ -804,11 +879,11 @@ void NumberFormatRegressionTest::Test4070798 (void) 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x39, 0x20, 0x46 }; UChar chars3 [] = { - 0x2d, 0x35, 0x37, 0x38, 0x00a0, 0x39, 0x39, 0x39, 0x25 + 0x2d, 0x35, 0x37, 0x38, 0x00a0, 0x39, 0x39, 0x39, 0x00a0, 0x25 }; UnicodeString expectedDefault(chars1, 10, 10); UnicodeString expectedCurrency(chars2, 10, 10); - UnicodeString expectedPercent(chars3, 9, 9); + UnicodeString expectedPercent(chars3, 10, 10); UErrorCode status = U_ZERO_ERROR; char loc[256]={0}; @@ -880,15 +955,18 @@ void NumberFormatRegressionTest::Test4071005 (void) 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x39, 0x20, 0x24 }; UChar chars3 [] = { - 0x2d, 0x35, 0x37, 0x38, 0x00a0, 0x39, 0x39, 0x39, 0x25 + 0x2d, 0x35, 0x37, 0x38, 0x00a0, 0x39, 0x39, 0x39, 0x00a0, 0x25 }; UnicodeString expectedDefault(chars1, 10, 10); UnicodeString expectedCurrency(chars2, 10, 10); - UnicodeString expectedPercent(chars3, 9, 9); + UnicodeString expectedPercent(chars3, 10, 10); UErrorCode status = U_ZERO_ERROR; formatter = NumberFormat::createInstance(Locale::getCanadaFrench(), status); - failure(status, "NumberFormat::createNumberInstance", Locale::getCanadaFrench()); + if (failure(status, "NumberFormat::createNumberInstance", Locale::getCanadaFrench())){ + delete formatter; + return; + }; tempString = formatter->format (-5789.9876, tempString); if (tempString == expectedDefault) { @@ -950,7 +1028,10 @@ void NumberFormatRegressionTest::Test4071014 (void) char loc[256]={0}; uloc_canonicalize("de_DE_PREEURO", loc, 256, &status); formatter = NumberFormat::createInstance(Locale(loc), status); - failure(status, "NumberFormat::createNumberInstance", loc); + if (failure(status, "NumberFormat::createNumberInstance", loc)){ + delete formatter; + return; + } tempString.remove(); tempString = formatter->format (-5789.9876, tempString); @@ -1013,7 +1094,10 @@ void NumberFormatRegressionTest::Test4071859 (void) char loc[256]={0}; uloc_canonicalize("it_IT_PREEURO", loc, 256, &status); formatter = NumberFormat::createInstance(Locale(loc), status); - failure(status, "NumberFormat::createNumberInstance"); + if (failure(status, "NumberFormat::createNumberInstance")){ + delete formatter; + return; + }; tempString = formatter->format (-5789.9876, tempString); if (tempString == expectedDefault) { @@ -1102,6 +1186,12 @@ void NumberFormatRegressionTest::Test4098741(void) //try { UErrorCode status = U_ZERO_ERROR; NumberFormat *fmt = NumberFormat::createPercentInstance(status); + if (U_FAILURE(status)) { + dataerrln("Error calling NumberFormat::createPercentInstance"); + delete fmt; + return; + } + fmt->setMaximumFractionDigits(20); UnicodeString temp; logln(fmt->format(.001, temp)); @@ -1594,6 +1684,21 @@ void NumberFormatRegressionTest::Test4122840(void) DecimalFormat *fmt2 = new DecimalFormat(buf, *symbols, status); failure(status, "new DecimalFormat"); + // Get the currency (if there is one) so we can set the rounding and fraction + const UChar *currency = fmt1->getCurrency(); + if (*currency != 0) { + double rounding = ucurr_getRoundingIncrement(currency, &status); + int32_t frac = ucurr_getDefaultFractionDigits(currency, &status); + if (U_SUCCESS(status)) { + fmt2->setRoundingIncrement(rounding); + fmt2->setMinimumFractionDigits(frac); + fmt2->setMaximumFractionDigits(frac); + } + else { + failure(status, "Fetching currency rounding/fractions"); + } + } + UnicodeString result2; fmt2->format(1.111, result2, pos); @@ -1777,7 +1882,10 @@ void NumberFormatRegressionTest::Test4145457() { //try { UErrorCode status = U_ZERO_ERROR; NumberFormat *nff = NumberFormat::createInstance(status); - failure(status, "NumberFormat::createInstance"); + if (failure(status, "NumberFormat::createInstance")){ + delete nff; + return; + }; if(nff->getDynamicClassID() != DecimalFormat::getStaticClassID()) { errln("DecimalFormat needed to continue"); return; @@ -2012,7 +2120,10 @@ static double _u_abs(double a) { return a<0?-a:a; } void NumberFormatRegressionTest::Test4167494(void) { UErrorCode status = U_ZERO_ERROR; NumberFormat *fmt = NumberFormat::createInstance(Locale::getUS(), status); - failure(status, "NumberFormat::createInstance"); + if (failure(status, "NumberFormat::createInstance")){ + delete fmt; + return; + }; double a = DBL_MAX * 0.99; // DBL_MAX itself overflows to +Inf UnicodeString s; @@ -2045,7 +2156,10 @@ void NumberFormatRegressionTest::Test4167494(void) { void NumberFormatRegressionTest::Test4170798(void) { UErrorCode status = U_ZERO_ERROR; NumberFormat *nf = NumberFormat::createInstance(Locale::getUS(), status); - failure(status, "NumberFormat::createInstance"); + if (failure(status, "NumberFormat::createInstance")){ + delete nf; + return; + }; if(nf->getDynamicClassID() != DecimalFormat::getStaticClassID()) { errln("DecimalFormat needed to continue"); return; @@ -2287,6 +2401,17 @@ void NumberFormatRegressionTest::Test4212072(void) { if (U_FAILURE(status)) { continue; } + + // Make sure we set the currency attributes appropriately + if (j == 1) { // Currency format + f2.setCurrency(f2.getCurrency(), status); + } + failure(status, + UnicodeString("setCurrency() for (") + pat + ")", avail[i]); + if (U_FAILURE(status)) { + continue; + } + if (*df != f2) { UnicodeString l, p; errln(UnicodeString("FAIL: ") + type[j] + avail[i].getDisplayName(l) + @@ -2309,7 +2434,10 @@ void NumberFormatRegressionTest::Test4212072(void) { void NumberFormatRegressionTest::Test4216742(void) { UErrorCode status = U_ZERO_ERROR; DecimalFormat *fmt = (DecimalFormat*) NumberFormat::createInstance(Locale::getUS(), status); - failure(status, "createInstance", Locale::getUS()); + if (failure(status, "createInstance", Locale::getUS())){ + delete fmt; + return; + }; int32_t DATA[] = { INT32_MIN, INT32_MAX, -100000000, 100000000 }; int DATA_length = (int)(sizeof(DATA) / sizeof(DATA[0])); for (int i=0; isetMaximumFractionDigits(2); for (int i=0; isetMinimumFractionDigits(1); nf->setMaximumFractionDigits(1); double a = -0.09; diff --git a/icuSources/test/intltest/numrgts.h b/icuSources/test/intltest/numrgts.h index 30024b00..e20141cd 100644 --- a/icuSources/test/intltest/numrgts.h +++ b/icuSources/test/intltest/numrgts.h @@ -19,8 +19,8 @@ /** * Performs regression test for MessageFormat **/ -class NumberFormatRegressionTest: public IntlTest { - +class NumberFormatRegressionTest: public IntlTest { + // IntlTest override void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ); public: @@ -97,74 +97,6 @@ protected: UBool failure(UErrorCode status, const UnicodeString& msg, const Locale& l); }; -class MyNumberFormatTest : public NumberFormat -{ -public: - - virtual UClassID getDynamicClassID(void) const; - - virtual UnicodeString& format( double number, - UnicodeString& toAppendTo, - FieldPosition& pos, - UErrorCode& status) const - { - return NumberFormat::format(number, toAppendTo, pos, status); - } - - /* Just keep this here to make some of the compilers happy */ - virtual UnicodeString& format(const Formattable& obj, - UnicodeString& toAppendTo, - FieldPosition& pos, - UErrorCode& status) const - { - return NumberFormat::format(obj, toAppendTo, pos, status); - } - - /* Just use one of the format functions */ - virtual UnicodeString& format( double /* number */, - UnicodeString& toAppendTo, - FieldPosition& /* pos */) const - { - toAppendTo = ""; - return toAppendTo; - } - - /* - public Number parse(String text, ParsePosition parsePosition) - { return new Integer(0); } - */ - - /* Just use one of the parse functions */ - virtual void parse( const UnicodeString& /* text */, - Formattable& result, - ParsePosition& /* parsePosition */) const - { - result.setLong((int32_t)0); - } - - virtual void parse( const UnicodeString& text, - Formattable& result, - UErrorCode& status) const - { - NumberFormat::parse(text, result, status); - } - virtual Format* clone() const - { return NULL; } - - virtual UnicodeString& format(int32_t, - UnicodeString& foo, - FieldPosition&) const - { return foo.remove(); } - - virtual UnicodeString& format(int64_t, - UnicodeString& foo, - FieldPosition&) const - { return foo.remove(); } - - virtual void applyPattern(const UnicodeString&, UParseError&, UErrorCode&){ - } -}; - #endif /* #if !UCONFIG_NO_FORMATTING */ #endif // _NUMBERFORMATREGRESSIONTEST_ diff --git a/icuSources/test/intltest/pptest.cpp b/icuSources/test/intltest/pptest.cpp index 61ec4e78..2159183b 100644 --- a/icuSources/test/intltest/pptest.cpp +++ b/icuSources/test/intltest/pptest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -173,7 +173,10 @@ void ParsePositionTest::TestFieldPosition_example() UErrorCode status = U_ZERO_ERROR; NumberFormat *nf = NumberFormat::createInstance(status); - failure(status, "NumberFormat::createInstance"); + if (failure(status, "NumberFormat::createInstance")){ + delete nf; + return; + }; if(nf->getDynamicClassID() != DecimalFormat::getStaticClassID()) { errln("NumberFormat::createInstance returned unexpected class type"); diff --git a/icuSources/test/intltest/punyref.c b/icuSources/test/intltest/punyref.c index 542b9a20..c61a8b61 100644 --- a/icuSources/test/intltest/punyref.c +++ b/icuSources/test/intltest/punyref.c @@ -1,11 +1,11 @@ /* ******************************************************************************* * - * Copyright (C) 2003, International Business Machines + * Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* - * file name: nameprep.h + * file name: punyref.h * encoding: US-ASCII * tab size: 8 (not used) * indentation:4 diff --git a/icuSources/test/intltest/rbbiapts.cpp b/icuSources/test/intltest/rbbiapts.cpp index 86792f97..54f4db99 100644 --- a/icuSources/test/intltest/rbbiapts.cpp +++ b/icuSources/test/intltest/rbbiapts.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1999-2004, International Business Machines Corporation and + * Copyright (c) 1999-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /************************************************************************ @@ -20,7 +20,9 @@ #include "rbbiapts.h" #include "rbbidata.h" #include "cstring.h" +#include "ubrkimpl.h" #include "unicode/ustring.h" +#include "unicode/utext.h" /** * API Test the RuleBasedBreakIterator class @@ -75,7 +77,7 @@ void RBBIAPITest::TestCloneEquals() // source and dest iterator produce the same next() after assignment. // deleting one doesn't disable the other. logln("Testing assignment"); - RuleBasedBreakIterator *bix = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getEnglish(), status); + RuleBasedBreakIterator *bix = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); if(U_FAILURE(status)){ errln((UnicodeString)"FAIL : in construction"); return; @@ -146,8 +148,8 @@ void RBBIAPITest::TestCloneEquals() void RBBIAPITest::TestBoilerPlate() { UErrorCode status = U_ZERO_ERROR; - BreakIterator* a = BreakIterator::createLineInstance(Locale("hi"), status); - BreakIterator* b = BreakIterator::createLineInstance(Locale("hi_IN"),status); + BreakIterator* a = BreakIterator::createWordInstance(Locale("hi"), status); + BreakIterator* b = BreakIterator::createWordInstance(Locale("hi_IN"),status); if (U_FAILURE(status)) { errln("Creation of break iterator failed %s", u_errorName(status)); return; @@ -155,7 +157,7 @@ void RBBIAPITest::TestBoilerPlate() if(*a!=*b){ errln("Failed: boilerplate method operator!= does not return correct results"); } - BreakIterator* c = BreakIterator::createLineInstance(Locale("th"),status); + BreakIterator* c = BreakIterator::createWordInstance(Locale("ja"),status); if(a && c){ if(*c==*a){ errln("Failed: boilerplate method opertator== does not return correct results"); @@ -258,8 +260,10 @@ void RBBIAPITest::TestGetSetAdoptText() CharacterIterator* text3= new StringCharacterIterator(str2, 3, 10, 3); // "ond str" wordIter1->setText(str1); - if(wordIter1->getText() != *text1) - errln((UnicodeString)"ERROR:1 error in setText or getText "); + CharacterIterator *tci = &wordIter1->getText(); + UnicodeString tstr; + tci->getText(tstr); + TEST_ASSERT(tstr == str1); if(wordIter1->current() != 0) errln((UnicodeString)"ERROR:1 setText did not set the iteration position to the beginning of the text, it is" + wordIter1->current() + (UnicodeString)"\n"); @@ -271,9 +275,14 @@ void RBBIAPITest::TestGetSetAdoptText() charIter1->adoptText(text1Clone); - if( wordIter1->getText() == charIter1->getText() || - wordIter1->getText() != *text2 || charIter1->getText() != *text1 ) - errln((UnicodeString)"ERROR:2 error is getText or setText()"); + TEST_ASSERT(wordIter1->getText() != charIter1->getText()); + tci = &wordIter1->getText(); + tci->getText(tstr); + TEST_ASSERT(tstr == str2); + tci = &charIter1->getText(); + tci->getText(tstr); + TEST_ASSERT(tstr == str1); + RuleBasedBreakIterator* rb=(RuleBasedBreakIterator*)wordIter1->clone(); rb->adoptText(text1); @@ -284,13 +293,76 @@ void RBBIAPITest::TestGetSetAdoptText() errln((UnicodeString)"ERROR:2 error in adoptText "); // Adopt where iterator range is less than the entire orignal source string. + // (With the change of the break engine to working with UText internally, + // CharacterIterators starting at positions other than zero are not supported) rb->adoptText(text3); - if(rb->preceding(2) != 3) { - errln((UnicodeString)"ERROR:3 error in adoptText "); - } - if(rb->following(11) != BreakIterator::DONE) { - errln((UnicodeString)"ERROR:4 error in adoptText "); - } + TEST_ASSERT(rb->preceding(2) == 0); + TEST_ASSERT(rb->following(11) == BreakIterator::DONE); + //if(rb->preceding(2) != 3) { + // errln((UnicodeString)"ERROR:3 error in adoptText "); + //} + //if(rb->following(11) != BreakIterator::DONE) { + // errln((UnicodeString)"ERROR:4 error in adoptText "); + //} + + // UText API + // + // Quick test to see if UText is working at all. + // + const char *s1 = "\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64"; /* "hello world" in UTF-8 */ + const char *s2 = "\x73\x65\x65\x20\x79\x61"; /* "see ya" in UTF-8 */ + // 012345678901 + + status = U_ZERO_ERROR; + UText *ut = utext_openUTF8(NULL, s1, -1, &status); + wordIter1->setText(ut, status); + TEST_ASSERT_SUCCESS(status); + + int32_t pos; + pos = wordIter1->first(); + TEST_ASSERT(pos==0); + pos = wordIter1->next(); + TEST_ASSERT(pos==5); + pos = wordIter1->next(); + TEST_ASSERT(pos==6); + pos = wordIter1->next(); + TEST_ASSERT(pos==11); + pos = wordIter1->next(); + TEST_ASSERT(pos==UBRK_DONE); + + status = U_ZERO_ERROR; + UText *ut2 = utext_openUTF8(NULL, s2, -1, &status); + TEST_ASSERT_SUCCESS(status); + wordIter1->setText(ut2, status); + TEST_ASSERT_SUCCESS(status); + + pos = wordIter1->first(); + TEST_ASSERT(pos==0); + pos = wordIter1->next(); + TEST_ASSERT(pos==3); + pos = wordIter1->next(); + TEST_ASSERT(pos==4); + + pos = wordIter1->last(); + TEST_ASSERT(pos==6); + pos = wordIter1->previous(); + TEST_ASSERT(pos==4); + pos = wordIter1->previous(); + TEST_ASSERT(pos==3); + pos = wordIter1->previous(); + TEST_ASSERT(pos==0); + pos = wordIter1->previous(); + TEST_ASSERT(pos==UBRK_DONE); + + status = U_ZERO_ERROR; + UnicodeString sEmpty; + UText *gut2 = utext_openUnicodeString(NULL, &sEmpty, &status); + wordIter1->getUText(gut2, status); + TEST_ASSERT_SUCCESS(status); + utext_close(gut2); + + utext_close(ut); + utext_close(ut2); delete wordIter1; delete charIter1; @@ -590,7 +662,7 @@ void RBBIAPITest::TestRuleStatus() { UErrorCode status=U_ZERO_ERROR; - RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getDefault(), status); + RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getEnglish(), status); if(U_FAILURE(status)) { errln("FAIL : in construction"); } else { @@ -805,17 +877,17 @@ void RBBIAPITest::TestBug2190() { void RBBIAPITest::TestRegistration() { #if !UCONFIG_NO_SERVICE UErrorCode status = U_ZERO_ERROR; - BreakIterator* thai_word = BreakIterator::createWordInstance("th_TH", status); + BreakIterator* ja_word = BreakIterator::createWordInstance("ja_JP", status); // ok to not delete these if we exit because of error? - BreakIterator* thai_char = BreakIterator::createCharacterInstance("th_TH", status); + BreakIterator* ja_char = BreakIterator::createCharacterInstance("ja_JP", status); BreakIterator* root_word = BreakIterator::createWordInstance("", status); BreakIterator* root_char = BreakIterator::createCharacterInstance("", status); - URegistryKey key = BreakIterator::registerInstance(thai_word, "xx", UBRK_WORD, status); + URegistryKey key = BreakIterator::registerInstance(ja_word, "xx", UBRK_WORD, status); { - if (thai_word && *thai_word == *root_word) { - errln("thai not different from root"); + if (ja_word && *ja_word == *root_word) { + errln("japan not different from root"); } } @@ -823,7 +895,7 @@ void RBBIAPITest::TestRegistration() { BreakIterator* result = BreakIterator::createWordInstance("xx_XX", status); UBool fail = TRUE; if(result){ - fail = *result != *thai_word; + fail = *result != *ja_word; } delete result; if (fail) { @@ -832,14 +904,14 @@ void RBBIAPITest::TestRegistration() { } { - BreakIterator* result = BreakIterator::createCharacterInstance("th_TH", status); + BreakIterator* result = BreakIterator::createCharacterInstance("ja_JP", status); UBool fail = TRUE; if(result){ - fail = *result != *thai_char; + fail = *result != *ja_char; } delete result; if (fail) { - errln("bad result for th_TH/char"); + errln("bad result for ja_JP/char"); } } @@ -879,7 +951,7 @@ void RBBIAPITest::TestRegistration() { } { - BreakIterator* result = BreakIterator::createWordInstance("xx", status); + BreakIterator* result = BreakIterator::createWordInstance("en_US", status); BreakIterator* root = BreakIterator::createWordInstance("", status); UBool fail = TRUE; if(root){ @@ -924,8 +996,8 @@ void RBBIAPITest::TestRegistration() { } - // that_word was adopted by factory - delete thai_char; + // ja_word was adopted by factory + delete ja_char; delete root_word; delete root_char; #endif @@ -936,7 +1008,7 @@ void RBBIAPITest::RoundtripRule(const char *dataFile) { UParseError parseError; parseError.line = 0; parseError.offset = 0; - UDataMemory *data = udata_open(NULL, "brk", dataFile, &status); + UDataMemory *data = udata_open(U_ICUDATA_BRKITR, "brk", dataFile, &status); uint32_t length; const UChar *builtSource; const uint8_t *rbbiRules; @@ -972,8 +1044,8 @@ void RBBIAPITest::TestRoundtripRules() { RoundtripRule("line"); RoundtripRule("char"); if (!quick) { - RoundtripRule("word_th"); - RoundtripRule("line_th"); + RoundtripRule("word_ja"); + RoundtripRule("word_POSIX"); } } @@ -991,16 +1063,14 @@ void RBBIAPITest::runIndexedTest( int32_t index, UBool exec, const char* &name, case 2: name = "TestHashCode"; if (exec) TestHashCode(); break; case 3: name = "TestGetSetAdoptText"; if (exec) TestGetSetAdoptText(); break; case 4: name = "TestIteration"; if (exec) TestIteration(); break; - case 5: name = "extra"; break; // Extra - case 6: name = "extra"; break; // Extra - case 7: name = "TestBuilder"; if (exec) TestBuilder(); break; - case 8: name = "TestQuoteGrouping"; if (exec) TestQuoteGrouping(); break; - case 9: name = "TestRuleStatus"; if (exec) TestRuleStatus(); break; - case 10: name = "TestRuleStatusVec"; if (exec) TestRuleStatusVec(); break; - case 11: name = "TestBug2190"; if (exec) TestBug2190(); break; - case 12: name = "TestRegistration"; if (exec) TestRegistration(); break; - case 13: name = "TestBoilerPlate"; if (exec) TestBoilerPlate(); break; - case 14: name = "TestRoundtripRules"; if (exec) TestRoundtripRules(); break; + case 5: name = "TestBuilder"; if (exec) TestBuilder(); break; + case 6: name = "TestQuoteGrouping"; if (exec) TestQuoteGrouping(); break; + case 7: name = "TestRuleStatus"; if (exec) TestRuleStatus(); break; + case 8: name = "TestRuleStatusVec"; if (exec) TestRuleStatusVec(); break; + case 9: name = "TestBug2190"; if (exec) TestBug2190(); break; + case 10: name = "TestRegistration"; if (exec) TestRegistration(); break; + case 11: name = "TestBoilerPlate"; if (exec) TestBoilerPlate(); break; + case 12: name = "TestRoundtripRules"; if (exec) TestRoundtripRules(); break; default: name = ""; break; // needed to end loop } diff --git a/icuSources/test/intltest/rbbitst.cpp b/icuSources/test/intltest/rbbitst.cpp index d8feb991..34deb932 100644 --- a/icuSources/test/intltest/rbbitst.cpp +++ b/icuSources/test/intltest/rbbitst.cpp @@ -1,3801 +1,4231 @@ -/******************************************************************** - * COPYRIGHT: - * Copyright (c) 1999-2004, International Business Machines Corporation and - * others. All Rights Reserved. - ********************************************************************/ -/************************************************************************ -* Date Name Description -* 12/15/99 Madhu Creation. -* 01/12/2000 Madhu Updated for changed API and added new tests -************************************************************************/ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_BREAK_ITERATION - -#include "unicode/utypes.h" -#include "unicode/brkiter.h" -#include "unicode/rbbi.h" -#include "unicode/uchar.h" -#include "unicode/utf16.h" -#include "unicode/ucnv.h" -#include "unicode/schriter.h" -#include "unicode/uniset.h" -#include "unicode/regex.h" // TODO: make conditional on regexp being built. -#include "unicode/ustring.h" - -#include "intltest.h" -#include "rbbitst.h" -#include -#include "uvector.h" -#include "uvectr32.h" -#include -#include -#include - - - -//--------------------------------------------------------------------------- -// -// class BITestData Holds a set of Break iterator test data and results -// Includes -// - the string data to be broken -// - a vector of the expected break positions. -// - a vector of source line numbers for the data, -// (to help see where errors occured.) -// - The expected break tag values. -// - Vectors of actual break positions and tag values. -// - Functions for comparing actual with expected and -// reporting errors. -// -//---------------------------------------------------------------------------- -class BITestData { -public: - UnicodeString fDataToBreak; - UVector fExpectedBreakPositions; - UVector fExpectedTags; - UVector fLineNum; - UVector fActualBreakPositions; // Test Results. - UVector fActualTags; - - BITestData(UErrorCode &status); - void addDataChunk(const char *data, int32_t tag, int32_t lineNum, UErrorCode status); - void checkResults(const char *heading, RBBITest *test); - void err(const char *heading, RBBITest *test, int32_t expectedIdx, int32_t actualIdx); - void clearResults(); -}; - -// -// Constructor. -// -BITestData::BITestData(UErrorCode &status) -: fExpectedBreakPositions(status), fExpectedTags(status), fLineNum(status), fActualBreakPositions(status), - fActualTags(status) -{ -}; - -// -// addDataChunk. Add a section (non-breaking) piece if data to the test data. -// The macro form collects the line number, which is helpful -// when tracking down failures. -// -// A null data item is inserted at the start of each test's data -// to put the starting zero into the data list. The position saved for -// each non-null item is its ending position. -// -#define ADD_DATACHUNK(td, data, tag, status) td.addDataChunk(data, tag, __LINE__, status); -void BITestData::addDataChunk(const char *data, int32_t tag, int32_t lineNum, UErrorCode status) { - if (U_FAILURE(status)) {return;} - if (data != NULL) { - fDataToBreak.append(CharsToUnicodeString(data)); - } - fExpectedBreakPositions.addElement(fDataToBreak.length(), status); - fExpectedTags.addElement(tag, status); - fLineNum.addElement(lineNum, status); -}; - - -// -// checkResults. Compare the actual and expected break positions, report any differences. -// -void BITestData::checkResults(const char *heading, RBBITest *test) { - int32_t expectedIndex = 0; - int32_t actualIndex = 0; - - for (;;) { - // If we've run through both the expected and actual results vectors, we're done. - // break out of the loop. - if (expectedIndex >= fExpectedBreakPositions.size() && - actualIndex >= fActualBreakPositions.size()) { - break; - } - - - if (expectedIndex >= fExpectedBreakPositions.size()) { - err(heading, test, expectedIndex-1, actualIndex); - actualIndex++; - continue; - } - - if (actualIndex >= fActualBreakPositions.size()) { - err(heading, test, expectedIndex, actualIndex-1); - expectedIndex++; - continue; - } - - if (fActualBreakPositions.elementAti(actualIndex) != fExpectedBreakPositions.elementAti(expectedIndex)) { - err(heading, test, expectedIndex, actualIndex); - // Try to resync the positions of the indices, to avoid a rash of spurious erros. - if (fActualBreakPositions.elementAti(actualIndex) < fExpectedBreakPositions.elementAti(expectedIndex)) { - actualIndex++; - } else { - expectedIndex++; - } - continue; - } - - if (fActualTags.elementAti(actualIndex) != fExpectedTags.elementAti(expectedIndex)) { - test->errln("%s, tag mismatch. Test Line = %d, expected tag=%d, got %d", - heading, fLineNum.elementAt(expectedIndex), - fExpectedTags.elementAti(expectedIndex), fActualTags.elementAti(actualIndex)); - } - - actualIndex++; - expectedIndex++; - } -} - -// -// err - An error was found. Report it, along with information about where the -// incorrectly broken test data appeared in the source file. -// -void BITestData::err(const char *heading, RBBITest *test, int32_t expectedIdx, int32_t actualIdx) -{ - int32_t expected = fExpectedBreakPositions.elementAti(expectedIdx); - int32_t actual = fActualBreakPositions.elementAti(actualIdx); - int32_t o = 0; - int32_t line = fLineNum.elementAti(expectedIdx); - if (expectedIdx > 0) { - // The line numbers are off by one because a premature break occurs somewhere - // within the previous item, rather than at the start of the current (expected) item. - // We want to report the offset of the unexpected break from the start of - // this previous item. - o = actual - fExpectedBreakPositions.elementAti(expectedIdx-1); - } - if (actual < expected) { - test->errln("%s unexpected break at offset %d in test item from line %d", heading, o, line); - } else { - test->errln("%s Failed to find break at end of item from line %d", heading, line); - } -} - - -void BITestData::clearResults() { - fActualBreakPositions.removeAllElements(); - fActualTags.removeAllElements(); -} - - -//----------------------------------------------------------------------------------- -// -// Cannned Test Characters -// -//----------------------------------------------------------------------------------- - -static const UChar cannedTestArray[] = { - 0x0001, 0x0002, 0x0003, 0x0004, 0x0020, 0x0021, '\\', 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0028, 0x0029, 0x002b, 0x002d, 0x0030, 0x0031, - 0x0032, 0x0033, 0x0034, 0x003c, 0x003d, 0x003e, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x005b, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x007b, - 0x007d, 0x007c, 0x002c, 0x00a0, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00ab, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b2, 0x00b3, - 0x00b4, 0x00b9, 0x00bb, 0x00bc, 0x00bd, 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x0300, 0x0301, 0x0302, 0x0303, - 0x0304, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x0903, 0x093e, 0x093f, 0x0940, 0x0949, 0x0f3a, 0x0f3b, 0x2000, - 0x2001, 0x2002, 0x200c, 0x200d, 0x200e, 0x200f, 0x2010, 0x2011, 0x2012, 0x2028, 0x2029, 0x202a, 0x203e, 0x203f, - 0x2040, 0x20dd, 0x20de, 0x20df, 0x20e0, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x0000 -}; - -static UnicodeString* cannedTestChars = 0; - -#define halfNA "\\u0928\\u094d\\u200d" -#define halfSA "\\u0938\\u094d\\u200d" -#define halfCHA "\\u091a\\u094d\\u200d" -#define halfKA "\\u0915\\u094d\\u200d" -#define deadTA "\\u0924\\u094d" - -//-------------------------------------------------------------------------------------- -// -// RBBITest constructor and destructor -// -//-------------------------------------------------------------------------------------- - -RBBITest::RBBITest() { - UnicodeString temp(cannedTestArray); - cannedTestChars = new UnicodeString(); - *cannedTestChars += (UChar)0x0000; - *cannedTestChars += temp; -} - - -RBBITest::~RBBITest() { - delete cannedTestChars; -} - - -static const int T_NUMBER = 100; -static const int T_LETTER = 200; -static const int T_H_OR_K = 300; -static const int T_IDEO = 400; - - - - - - -//-------------------------------------------------------------------- -//Testing the BreakIterator for devanagari script -//-------------------------------------------------------------------- - -#define deadRA "\\u0930\\u094d" /*deadform RA = devanagari RA + virama*/ -#define deadPHA "\\u092b\\u094d" /*deadform PHA = devanagari PHA + virama*/ -#define deadTTHA "\\u0920\\u094d" -#define deadPA "\\u092a\\u094d" -#define deadSA "\\u0938\\u094d" -#define visarga "\\u0903" /*devanagari visarga looks like a english colon*/ - - - - - - -//----------------------------------------------------------------------------------- -// -// Test for status {tag} return value from break rules. -// TODO: a more thorough test. -// -//----------------------------------------------------------------------------------- -void RBBITest::TestStatusReturn() { - UnicodeString rulesString1 = "$Letters = [:L:];\n" - "$Numbers = [:N:];\n" - "$Letters+{1};\n" - "$Numbers+{2};\n" - "Help\\ {4}/me\\!;\n" - "[^$Letters $Numbers];\n" - "!.*;\n"; - UnicodeString testString1 = "abc123..abc Help me Help me!"; - // 01234567890123456789012345678 - int32_t bounds1[] = {0, 3, 6, 7, 8, 11, 12, 16, 17, 19, 20, 25, 27, 28, -1}; - int32_t brkStatus[] = {0, 1, 2, 0, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, -1}; - - UErrorCode status=U_ZERO_ERROR; - UParseError parseError; - - RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); - if(U_FAILURE(status)) { - errln("FAIL : in construction"); - } else { - int32_t pos; - int32_t i = 0; - bi->setText(testString1); - for (pos=bi->first(); pos!= BreakIterator::DONE; pos=bi->next()) { - if (pos != bounds1[i]) { - errln("FAIL: expected break at %d, got %d\n", bounds1[i], pos); - break; - } - - int tag = bi->getRuleStatus(); - if (tag != brkStatus[i]) { - errln("FAIL: break at %d, expected tag %d, got tag %d\n", pos, brkStatus[i], tag); - break; - } - i++; - } - } - delete bi; -} - - -static void printStringBreaks(UnicodeString ustr, int expected[], - int expectedcount) -{ - UErrorCode status = U_ZERO_ERROR; - char name[100]; - printf("code alpha extend alphanum type line name\n"); - int j; - for (j = 0; j < ustr.length(); j ++) { - if (expectedcount > 0) { - int k; - for (k = 0; k < expectedcount; k ++) { - if (j == expected[k]) { - printf("------------------------------------------------ %d\n", - j); - } - } - } - UChar32 c = ustr.char32At(j); - if (c > 0xffff) { - j ++; - } - u_charName(c, U_UNICODE_CHAR_NAME, name, 100, &status); - printf("%7x %5d %6d %8d %4s %4s %s\n", (int)c, - u_isUAlphabetic(c), - u_hasBinaryProperty(c, UCHAR_GRAPHEME_EXTEND), - u_isalnum(c), - u_getPropertyValueName(UCHAR_GENERAL_CATEGORY, - u_charType(c), - U_SHORT_PROPERTY_NAME), - u_getPropertyValueName(UCHAR_LINE_BREAK, - u_getIntPropertyValue(c, - UCHAR_LINE_BREAK), - U_SHORT_PROPERTY_NAME), - name); - } -} - -void RBBITest::TestThaiLineBreak() { - UErrorCode status = U_ZERO_ERROR; - BITestData thaiLineSelection(status); - - // \u0e2f-- the Thai paiyannoi character-- isn't a letter. It's a symbol that - // represents elided letters at the end of a long word. It should be bound to - // the end of the word and not treated as an independent punctuation mark. - - - ADD_DATACHUNK(thaiLineSelection, NULL, 0, status); // Break at start of data - ADD_DATACHUNK(thaiLineSelection, "\\u0e2a\\u0e16\\u0e32\\u0e19\\u0e35\\u0e2f", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e08\\u0e30", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e14\\u0e21", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e08\\u0e49\\u0e32", 0, status); -// ADD_DATACHUNK(thaiLineSelection, "\\u0e2b\\u0e19\\u0e49\\u0e32", 0, status); -// ADD_DATACHUNK(thaiLineSelection, "\\u0e17\\u0e35\\u0e48", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48", 0, status); - // the commented-out lines (I think) are the preferred result; this line is what our current dictionary is giving us - ADD_DATACHUNK(thaiLineSelection, "\\u0e2d\\u0e2d\\u0e01", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e21\\u0e32", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e23\\u0e48\\u0e07", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e1a\\u0e32\\u0e22", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e15\\u0e47\\u0e21", 0, status); - - // the one time where the paiyannoi occurs somewhere other than at the end - // of a word is in the Thai abbrevation for "etc.", which both begins and - // ends with a paiyannoi - ADD_DATACHUNK(thaiLineSelection, "\\u0e2f\\u0e25\\u0e2f", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e17\\u0e35\\u0e48", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e19\\u0e31\\u0e49\\u0e19", 0, status); - - RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createLineInstance( - Locale("th"), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for Thai locale in TestThaiLineBreak.\n"); - return; - } - - generalIteratorTest(*e, thaiLineSelection); - delete e; -} - - - -void RBBITest::TestMixedThaiLineBreak() -{ - UErrorCode status = U_ZERO_ERROR; - BITestData thaiLineSelection(status); - - ADD_DATACHUNK(thaiLineSelection, NULL, 0, status); // Break at start of data - - // Arabic numerals should always be separated from surrounding Thai text -/* - ADD_DATACHUNK(thaiLineSelection, "\\u0e04\\u0e48\\u0e32", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e07\\u0e34\\u0e19", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e1a\\u0e32\\u0e17", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e41\\u0e15\\u0e30", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e14\\u0e31\\u0e1a", 0, status); - thaiLineSelection->addElement("39"); - ADD_DATACHUNK(thaiLineSelection, "\\u0e1a\\u0e32\\u0e17 ", 0, status); - - // words in non-Thai scripts should always be separated from surrounding Thai text - ADD_DATACHUNK(thaiLineSelection, "\\u0e17\\u0e14", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e2a\\u0e2d\\u0e1a", 0, status); - thaiLineSelection->addElement("Java"); - ADD_DATACHUNK(thaiLineSelection, "\\u0e1a\\u0e19", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e04\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e44\\u0e2d\\u0e1a\\u0e35\\u0e40\\u0e2d\\u0e47\\u0e21 ", 0, status); - - // Thai numerals should always be separated from the text surrounding them - ADD_DATACHUNK(thaiLineSelection, "\\u0e04\\u0e48\\u0e32", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e07\\u0e34\\u0e19", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e1a\\u0e32\\u0e17", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e41\\u0e15\\u0e30", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e14\\u0e31\\u0e1a", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e53\\u0e59", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e1a\\u0e32\\u0e17 ", 0, status); - - // Thai text should interact correctly with punctuation and symbols - ADD_DATACHUNK(thaiLineSelection, "\\u0e44\\u0e2d\\u0e1a\\u0e35\\u0e40\\u0e2d\\u0e47\\u0e21", 0, status); -// ADD_DATACHUNK(thaiLineSelection, "(\\u0e1b\\u0e23\\u0e30\\u0e40\\u0e17\\u0e28", 0, status); -// ADD_DATACHUNK(thaiLineSelection, "\\u0e44\\u0e17\\u0e22)", 0, status); -ADD_DATACHUNK(thaiLineSelection, "(\\u0e1b\\u0e23\\u0e30\\u0e40\\u0e17\\u0e28\\u0e44\\u0e17\\u0e22)", 0, status); -// I believe the commented-out reading above to be the correct one, but this is what passes with our current dictionary - ADD_DATACHUNK(thaiLineSelection, "\\u0e08\\u0e33\\u0e01\\u0e31\\u0e14", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e1b\\u0e34\\u0e14", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e15\\u0e31\\u0e27\"", 0, status); -*/ - - // The Unicode Linebreak TR says do not break before or after quotes. - // So this test is changed ot not break around the quote. - // TODO: should Thai break around the around the quotes, like the original behavior here? -// ADD_DATACHUNK(thaiLineSelection, "\\u0e2e\\u0e32\\u0e23\\u0e4c\\u0e14\\u0e14\\u0e34\\u0e2a\\u0e01\\u0e4c\"", 0, status); -// ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e38\\u0e48\\u0e19", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e2e\\u0e32\\u0e23\\u0e4c\\u0e14\\u0e14\\u0e34\\u0e2a\\u0e01\\u0e4c\"" - "\\u0e23\\u0e38\\u0e48\\u0e19", 0, status); - - ADD_DATACHUNK(thaiLineSelection, "\\u0e43\\u0e2b\\u0e21\\u0e48", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e14\\u0e37\\u0e2d\\u0e19\\u0e21\\u0e34.", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e22.", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e19\\u0e35\\u0e49", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e32\\u0e04\\u0e32", 0, status); - ADD_DATACHUNK(thaiLineSelection, "$200", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e17\\u0e48\\u0e32", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e19\\u0e31\\u0e49\\u0e19 ", 0, status); - ADD_DATACHUNK(thaiLineSelection, "(\"\\u0e2e\\u0e32\\u0e23\\u0e4c\\u0e14\\u0e14\\u0e34\\u0e2a\\u0e01\\u0e4c\").", 0, status); - - RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale("th"), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for Thai locale in TestMixedThaiLineBreak.\n"); - return; - } - - - generalIteratorTest(*e, thaiLineSelection); - delete e; -} - - -void RBBITest::TestMaiyamok() -{ - UErrorCode status = U_ZERO_ERROR; - BITestData thaiLineSelection(status); - ADD_DATACHUNK(thaiLineSelection, NULL, 0, status); // Break at start of data - // the Thai maiyamok character is a shorthand symbol that means "repeat the previous - // word". Instead of appearing as a word unto itself, however, it's kept together - // with the word before it - ADD_DATACHUNK(thaiLineSelection, "\\u0e44\\u0e1b\\u0e46", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e21\\u0e32\\u0e46", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e2b\\u0e27\\u0e48\\u0e32\\u0e07", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e01\\u0e23\\u0e38\\u0e07\\u0e40\\u0e17\\u0e1e", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e41\\u0e25\\u0e30", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e03\\u0e35\\u0e22\\u0e07", 0, status); - ADD_DATACHUNK(thaiLineSelection, "\\u0e43\\u0e2b\\u0e21\\u0e48", 0, status); - - RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createLineInstance( - Locale("th"), status); - - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for Thai locale in TestMaiyamok.\n"); - return; - } - generalIteratorTest(*e, thaiLineSelection); - delete e; -} - -void RBBITest::TestThaiWordBreak() { - UErrorCode status = U_ZERO_ERROR; - BITestData thaiWordSelection(status); - - ADD_DATACHUNK(thaiWordSelection, NULL, 0, status); // Break at start of data - ADD_DATACHUNK(thaiWordSelection, "\\u0E1A\\u0E17", 0, status); //2 - ADD_DATACHUNK(thaiWordSelection, "\\u0E17\\u0E35\\u0E48", 0, status); //5 - ADD_DATACHUNK(thaiWordSelection, "\\u0E51", 0, status); //6 - ADD_DATACHUNK(thaiWordSelection, "\\u0E1E\\u0E32\\u0E22\\u0E38", 0, status); //10 - ADD_DATACHUNK(thaiWordSelection, "\\u0E44\\u0E0B\\u0E42\\u0E04\\u0E25\\u0E19", 0, status); //16 - ADD_DATACHUNK(thaiWordSelection, "\\u000D\\u000A", 0, status); //18 - - // This is the correct result - //ADD_DATACHUNK(thaiWordSelection, "\\u0E42\\u0E14\\u0E42\\u0E23\\u0E18\\u0E35", 0, status); //24 - //ADD_DATACHUNK(thaiWordSelection, "\\u0E2D\\u0E32\\u0E28\\u0E31\\u0E22", 0, status); //29 - - // and this is what the dictionary does... - ADD_DATACHUNK(thaiWordSelection, "\\u0E42\\u0E14", 0, status); // 20 - ADD_DATACHUNK(thaiWordSelection, "\\u0E42\\u0E23\\u0E18\\u0E35\\u0E2D\\u0E32\\u0E28\\u0E31\\u0E22", 0, status); //29 - - ADD_DATACHUNK(thaiWordSelection, "\\u0E2D\\u0E22\\u0E39\\u0E48", 0, status); //33 - - // This is the correct result - //ADD_DATACHUNK(thaiWordSelection, "\\u0E17\\u0E48\\u0E32\\u0E21", 0, status); //37 - //ADD_DATACHUNK(thaiWordSelection, "\\u0E01\\u0E25\\u0E32\\u0E07", 0, status); //41 - - // and this is what the dictionary does - ADD_DATACHUNK(thaiWordSelection, "\\u0E17\\u0E48\\u0E32\\u0E21\\u0E01\\u0E25\\u0E32\\u0E07", 0, status); //41 - - ADD_DATACHUNK(thaiWordSelection, "\\u0E17\\u0E38\\u0E48\\u0E07", 0, status); //45 - ADD_DATACHUNK(thaiWordSelection, "\\u0E43\\u0E2B\\u0E0D\\u0E48", 0, status); //49 - ADD_DATACHUNK(thaiWordSelection, "\\u0E43\\u0E19", 0, status); //51 - - // This is the correct result - //ADD_DATACHUNK(thaiWordSelection, "\\u0E41\\u0E04\\u0E19\\u0E0B\\u0E31\\u0E2A", 0, status); //57 - //ADD_DATACHUNK(thaiWordSelection, "\\u0E01\\u0E31\\u0E1A", 0, status); //60 - - // and this is what the dictionary does - ADD_DATACHUNK(thaiWordSelection, "\\u0E41\\u0E04\\u0E19", 0, status); // 54 - ADD_DATACHUNK(thaiWordSelection, "\\u0E0B\\u0E31\\u0E2A\\u0E01\\u0E31\\u0E1A", 0, status); //60 - - ADD_DATACHUNK(thaiWordSelection, "\\u0E25\\u0E38\\u0E07", 0, status); //63 - - // This is the correct result - //ADD_DATACHUNK(thaiWordSelection, "\\u0E40\\u0E2E\\u0E19\\u0E23\\u0E35", 0, status); //68 - //ADD_DATACHUNK(thaiWordSelection, "\\u0E0A\\u0E32\\u0E27", 0, status); //71 - //ADD_DATACHUNK(thaiWordSelection, "\\u0E44\\u0E23\\u0E48", 0, status); //74 - //ADD_DATACHUNK(thaiWordSelection, "\\u0E41\\u0E25\\u0E30", 0, status); //77 - - // and this is what the dictionary does - ADD_DATACHUNK(thaiWordSelection, "\\u0E40\\u0E2E", 0, status); // 65 - ADD_DATACHUNK(thaiWordSelection, "\\u0E19\\u0E23\\u0E35\\u0E0A\\u0E32\\u0E27\\u0E44\\u0E23\\u0E48\\u0E41\\u0E25\\u0E30", 0, status); //77 - - RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createWordInstance( - Locale("th"), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for Thai locale in TestThaiWordBreak.\n"); - return; - } - - generalIteratorTest(*e, thaiWordSelection); - delete e; -} - - -void RBBITest::TestBug3818() { - UErrorCode status = U_ZERO_ERROR; - - // Four Thai words... - static const UChar thaiWordData[] = { 0x0E43,0x0E2B,0x0E0D,0x0E48, 0x0E43,0x0E2B,0x0E0D,0x0E48, - 0x0E43,0x0E2B,0x0E0D,0x0E48, 0x0E43,0x0E2B,0x0E0D,0x0E48, 0 }; - UnicodeString thaiStr(thaiWordData); - - RuleBasedBreakIterator* bi = - (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale("th"), status); - if (U_FAILURE(status) || bi == NULL) { - errln("Fail at file %s, line %d, status = %s", __FILE__, __LINE__, u_errorName(status)); - return; - } - bi->setText(thaiStr); - - int32_t startOfSecondWord = bi->following(1); - if (startOfSecondWord != 4) { - errln("Fail at file %s, line %d expected start of word at 4, got %d", - __FILE__, __LINE__, startOfSecondWord); - } - startOfSecondWord = bi->following(0); - if (startOfSecondWord != 4) { - errln("Fail at file %s, line %d expected start of word at 4, got %d", - __FILE__, __LINE__, startOfSecondWord); - } - delete bi; -} - - -void RBBITest::TestJapaneseWordBreak() { - UErrorCode status = U_ZERO_ERROR; - BITestData japaneseWordSelection(status); - - ADD_DATACHUNK(japaneseWordSelection, NULL, 0, status); // Break at start of data - ADD_DATACHUNK(japaneseWordSelection, "\\u4ECA\\u65E5", 400, status); //2 - ADD_DATACHUNK(japaneseWordSelection, "\\u306F\\u3044\\u3044", 300, status); //5 - ADD_DATACHUNK(japaneseWordSelection, "\\u5929\\u6C17", 400, status); //7 - ADD_DATACHUNK(japaneseWordSelection, "\\u3067\\u3059\\u306D", 300, status); //10 - ADD_DATACHUNK(japaneseWordSelection, "\\u3002", 0, status); //11 - ADD_DATACHUNK(japaneseWordSelection, "\\u000D\\u000A", 0, status); //12 - - RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createWordInstance( - Locale("ja"), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for Japanese locale in TestJapaneseWordBreak.\n"); - return; - } - - generalIteratorTest(*e, japaneseWordSelection); - delete e; -} - -//--------------------------------------------- -// runIndexedTest -//--------------------------------------------- - -void RBBITest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* params ) -{ - if (exec) logln("TestSuite RuleBasedBreakIterator: "); - - switch (index) { - case 0: name = "TestBug4153072"; - if(exec) TestBug4153072(); break; - case 1: name = "TestJapaneseLineBreak"; - if(exec) TestJapaneseLineBreak(); break; - case 2: name = "TestStatusReturn"; - if(exec) TestStatusReturn(); break; - - case 3: name = "TestLineBreakData"; - if(exec) TestLineBreakData(); break; - case 4: name = "TestEmptyString"; - if(exec) TestEmptyString(); break; - - case 5: name = "TestGetAvailableLocales"; - if(exec) TestGetAvailableLocales(); break; - - case 6: name = "TestGetDisplayName"; - if(exec) TestGetDisplayName(); break; - - case 7: name = "TestEndBehaviour"; - if(exec) TestEndBehaviour(); break; - case 8: name = "TestMixedThaiLineBreak"; - if(exec) TestMixedThaiLineBreak(); break; - case 9: name = "TestThaiWordBreak"; - if(exec) TestThaiWordBreak(); break; - case 10: name = "TestThaiLineBreak"; - if(exec) TestThaiLineBreak(); break; - case 11: name = "TestMaiyamok"; - if(exec) TestMaiyamok(); break; - case 12: name = "TestWordBreaks"; - if(exec) TestWordBreaks(); break; - case 13: name = "TestWordBoundary"; - if(exec) TestWordBoundary(); break; - case 14: name = "TestLineBreaks"; - if(exec) TestLineBreaks(); break; - case 15: name = "TestSentBreaks"; - if(exec) TestSentBreaks(); break; - case 16: name = "TestExtended"; - if(exec) TestExtended(); break; - case 17: name = "TestMonkey"; - if(exec) { - #if !UCONFIG_NO_REGULAR_EXPRESSIONS - TestMonkey(params); - #else - logln("skipping TestMonkey (UCONFIG_NO_REGULAR_EXPRESSIONS)"); - #endif - } - break; - case 18: name = "TestBug3818"; - if(exec) TestBug3818(); break; - case 19: name = "TestJapaneseWordBreak"; - if(exec) TestJapaneseWordBreak(); break; - - default: name = ""; break; //needed to end loop - } -} - - -//---------------------------------------------------------------------------- -// -// generalIteratorTest Given a break iterator and a set of test data, -// Run the tests and report the results. -// -//---------------------------------------------------------------------------- -void RBBITest::generalIteratorTest(RuleBasedBreakIterator& bi, BITestData &td) -{ - - bi.setText(td.fDataToBreak); - - testFirstAndNext(bi, td); - - testLastAndPrevious(bi, td); - - testFollowing(bi, td); - testPreceding(bi, td); - testIsBoundary(bi, td); - doMultipleSelectionTest(bi, td); -} - - -// -// testFirstAndNext. Run the iterator forwards in the obvious first(), next() -// kind of loop. -// -void RBBITest::testFirstAndNext(RuleBasedBreakIterator& bi, BITestData &td) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t lastP = -1; - int32_t tag; - - logln("Test first and next"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - for (p=bi.first(); p!=RuleBasedBreakIterator::DONE; p=bi.next()) { - td.fActualBreakPositions.addElement(p, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - if (p <= lastP) { - // If the iterator is not making forward progress, stop. - // No need to raise an error here, it'll be detected in the normal check of results. - break; - } - lastP = p; - } - td.checkResults("testFirstAndNext", this); -} - - -// -// TestLastAndPrevious. Run the iterator backwards, starting with last(). -// -void RBBITest::testLastAndPrevious(RuleBasedBreakIterator& bi, BITestData &td) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t lastP = 0x7ffffffe; - int32_t tag; - - logln("Test first and next"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - for (p=bi.last(); p!=RuleBasedBreakIterator::DONE; p=bi.previous()) { - // Save break position. Insert it at start of vector of results, shoving - // already-saved results further towards the end. - td.fActualBreakPositions.insertElementAt(p, 0, status); - // bi.previous(); // TODO: Why does this fix things up???? - // bi.next(); - tag = bi.getRuleStatus(); - td.fActualTags.insertElementAt(tag, 0, status); - if (p >= lastP) { - // If the iterator is not making progress, stop. - // No need to raise an error here, it'll be detected in the normal check of results. - break; - } - lastP = p; - } - td.checkResults("testLastAndPrevious", this); -} - - -void RBBITest::testFollowing(RuleBasedBreakIterator& bi, BITestData &td) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t tag; - int32_t lastP = -2; // A value that will never be returned as a break position. - // cannot be -1; that is returned for DONE. - int i; - - logln("testFollowing():"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - // Save the starting point, since we won't get that out of following. - p = bi.first(); - td.fActualBreakPositions.addElement(p, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - - for (i = 0; i <= td.fDataToBreak.length()+1; i++) { - p = bi.following(i); - if (p != lastP) { - if (p == RuleBasedBreakIterator::DONE) { - break; - } - // We've reached a new break position. Save it. - td.fActualBreakPositions.addElement(p, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - lastP = p; - } - } - // The loop normally exits by means of the break in the middle. - // Make sure that the index was at the correct position for the break iterator to have - // returned DONE. - if (i != td.fDataToBreak.length()) { - errln("testFollowing(): iterator returned DONE prematurely."); - } - - // Full check of all results. - td.checkResults("testFollowing", this); -} - - - -void RBBITest::testPreceding(RuleBasedBreakIterator& bi, BITestData &td) { - UErrorCode status = U_ZERO_ERROR; - int32_t p; - int32_t tag; - int32_t lastP = 0x7ffffffe; - int i; - - logln("testPreceding():"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - p = bi.last(); - td.fActualBreakPositions.addElement(p, status); - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - - for (i = td.fDataToBreak.length(); i>=-1; i--) { - p = bi.preceding(i); - if (p != lastP) { - if (p == RuleBasedBreakIterator::DONE) { - break; - } - // We've reached a new break position. Save it. - td.fActualBreakPositions.insertElementAt(p, 0, status); - lastP = p; - tag = bi.getRuleStatus(); - td.fActualTags.insertElementAt(tag, 0, status); - } - } - // The loop normally exits by means of the break in the middle. - // Make sure that the index was at the correct position for the break iterator to have - // returned DONE. - if (i != 0) { - errln("testPreceding(): iterator returned DONE prematurely."); - } - - // Full check of all results. - td.checkResults("testPreceding", this); -} - - - -void RBBITest::testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td) { - UErrorCode status = U_ZERO_ERROR; - int i; - int32_t tag; - - logln("testIsBoundary():"); - bi.setText(td.fDataToBreak); - td.clearResults(); - - for (i = 0; i <= td.fDataToBreak.length(); i++) { - if (bi.isBoundary(i)) { - td.fActualBreakPositions.addElement(i, status); // Save result. - tag = bi.getRuleStatus(); - td.fActualTags.addElement(tag, status); - } - } - td.checkResults("testIsBoundary: ", this); -} - - - -void RBBITest::doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td) -{ - iterator.setText(td.fDataToBreak); - - RuleBasedBreakIterator* testIterator =(RuleBasedBreakIterator*)iterator.clone(); - int32_t offset = iterator.first(); - int32_t testOffset; - int32_t count = 0; - - logln("doMultipleSelectionTest text of length: %d", td.fDataToBreak.length()); - - if (*testIterator != iterator) - errln("clone() or operator!= failed: two clones compared unequal"); - - do { - testOffset = testIterator->first(); - testOffset = testIterator->next(count); - if (offset != testOffset) - errln(UnicodeString("next(n) and next() not returning consistent results: for step ") + count + ", next(n) returned " + testOffset + " and next() had " + offset); - - if (offset != RuleBasedBreakIterator::DONE) { - count++; - offset = iterator.next(); - - if (offset != RuleBasedBreakIterator::DONE && *testIterator == iterator) { - errln("operator== failed: Two unequal iterators compared equal. count=%d offset=%d", count, offset); - if (count > 10000 || offset == -1) { - errln("operator== failed too many times. Stopping test."); - if (offset == -1) { - errln("Does (RuleBasedBreakIterator::DONE == -1)?"); - } - return; - } - } - } - } while (offset != RuleBasedBreakIterator::DONE); - - // now do it backwards... - offset = iterator.last(); - count = 0; - - do { - testOffset = testIterator->last(); - testOffset = testIterator->next(count); // next() with a negative arg is same as previous - if (offset != testOffset) - errln(UnicodeString("next(n) and next() not returning consistent results: for step ") + count + ", next(n) returned " + testOffset + " and next() had " + offset); - - if (offset != RuleBasedBreakIterator::DONE) { - count--; - offset = iterator.previous(); - } - } while (offset != RuleBasedBreakIterator::DONE); - - delete testIterator; -} - - - -//-------------------------------------------------------------------------------------------- -// -// Break Iterator Invariants Tests -// -//-------------------------------------------------------------------------------------------- - -void RBBITest::TestCharacterInvariants() -{ - UErrorCode status = U_ZERO_ERROR; - BreakIterator *e = BreakIterator::createCharacterInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for default locale in TestCharacterInvariants.\n"); - return; - } - UnicodeString s = *cannedTestChars + CharsToUnicodeString("\\u1100\\u1101\\u1102\\u1160\\u1161\\u1162\\u11a8\\u11a9\\u11aa"); - doBreakInvariantTest(*e, s); - s = *cannedTestChars + CharsToUnicodeString("\\u1100\\u1101\\u1102\\u1160\\u1161\\u1162\\u11a8\\u11a9\\u11aa"); - doOtherInvariantTest(*e, s); - delete e; -} - - -void RBBITest::TestWordInvariants() -{ - UErrorCode status = U_ZERO_ERROR; - BreakIterator *e = BreakIterator::createWordInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for default locale in TestWordInvariants.\n"); - return; - } - UnicodeString s = *cannedTestChars + CharsToUnicodeString("\',.\\u3041\\u3042\\u3043\\u309b\\u309c\\u30a1\\u30a2\\u30a3\\u4e00\\u4e01\\u4e02"); - doBreakInvariantTest(*e, s); - s = *cannedTestChars + CharsToUnicodeString("\',.\\u3041\\u3042\\u3043\\u309b\\u309c\\u30a1\\u30a2\\u30a3\\u4e00\\u4e01\\u4e02"); - doOtherInvariantTest(*e, s); - delete e; -} - - -void RBBITest::TestSentenceInvariants() -{ - UErrorCode status = U_ZERO_ERROR; - BreakIterator *e = BreakIterator::createSentenceInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for default locale in TestSentenceInvariant.\n"); - return; - } - UnicodeString s = *cannedTestChars + CharsToUnicodeString(".,\\u3001\\u3002\\u3041\\u3042\\u3043\\ufeff"); - doOtherInvariantTest(*e, s); - delete e; -} - - - - -void RBBITest::doBreakInvariantTest(BreakIterator& tb, UnicodeString& testChars) -{ - UnicodeString work("aaa"); - int32_t errCount = 0, testCharsLen = testChars.length(), breaksLen; - - // a break should always occur after CR (unless followed by LF), LF, PS, and LS - UnicodeString breaks = CharsToUnicodeString("\r\n\\u2029\\u2028"); - int32_t i, j; - - breaksLen = breaks.length(); - for (i = 0; i < breaksLen; i++) { - UChar c1 = breaks[i]; - work.setCharAt(1, c1); - for (j = 0; j < testCharsLen; j++) { - UChar c0 = testChars[j]; - work.setCharAt(0, c0); - int k; - for (k = 0; k < testCharsLen; k++) { - UChar c2 = testChars[k]; - work.setCharAt(2, c2); - - // if a cr is followed by lf, ps, ls or etx, don't do the check (that's - // not supposed to work) - if (c1 == '\r' && (c2 == '\n' || c2 == 0x2029 - || c2 == 0x2028 || c2 == 0x0003)) - continue; - - if (u_charType(c1) == U_CONTROL_CHAR && - (u_charType(c2) == U_NON_SPACING_MARK || - u_charType(c2) == U_ENCLOSING_MARK || - u_charType(c2) == U_COMBINING_SPACING_MARK) - ) { - // Combining marks don't combine with controls. - // TODO: enhance test to verify that the break actually occurs, - // not just ignore the case. - continue; - } - - - tb.setText(work); - UBool seen2 = FALSE; - int l; - for (l = tb.first(); l != BreakIterator::DONE; l = tb.next()) { - if (l == 2) { - seen2 = TRUE; - break; - } - } - if (!seen2) { - printStringBreaks(work, NULL, 0); - errln("No Break between \\U%04x and \\U%04x", c1, c2); - errCount++; - if (errCount >= 75) - return; - } - } - } - } -} - - - -void RBBITest::doOtherInvariantTest(BreakIterator& tb, UnicodeString& testChars) -{ - UnicodeString work("a\r\na"); - int32_t errCount = 0, testCharsLen = testChars.length(); - int32_t i, j; - int8_t type; - - // a break should never occur between CR and LF - for (i = 0; i < testCharsLen; i++) { - work.setCharAt(0, testChars[i]); - for (j = 0; j < testCharsLen; j++) { - work.setCharAt(3, testChars[j]); - tb.setText(work); - int32_t k; - for (k = tb.first(); k != BreakIterator::DONE; k = tb.next()) - if (k == 2) { - errln("Break between CR and LF in string U\\%04x U\\%04x U\\%04x U\\%04x", - work[0], work[1], work[2], work[3]); - errCount++; - if (errCount >= 75) - return; - } - } - } - - // a break should never occur before a non-spacing mark, unless the preceding - // character is CR, LF, PS, or LS - // Or the general category == Control. - work.remove(); - work += "aaaa"; - for (i = 0; i < testCharsLen; i++) { - UChar c1 = testChars[i]; - if (c1 == '\n' || c1 == '\r' || c1 == 0x2029 || c1 == 0x2028 || c1 == 0x0003 || - u_charType(c1) == U_CONTROL_CHAR || u_charType(c1) == U_FORMAT_CHAR) { - continue; - } - work.setCharAt(1, c1); - for (j = 0; j < testCharsLen; j++) { - UChar c2 = testChars[j]; - type = u_charType(c2); - if ((type != U_NON_SPACING_MARK) && - (type != U_ENCLOSING_MARK)) { - continue; - } - work.setCharAt(2, c2); - tb.setText(work); - int k; - for (k = tb.first(); k != BreakIterator::DONE; k = tb.next()) - if (k == 2) { - //errln("Break between U+" + UCharToUnicodeString(work[1]) - // + " and U+" + UCharToUnicodeString(work[2])); - errln("Unexpected Break between %6x and %6x", c1, c2); - errCount++; - if (errCount >= 75) - return; - } - } - } -} - - - - -//--------------------------------------------- -// -// other tests -// -//--------------------------------------------- -void RBBITest::TestEmptyString() -{ - UnicodeString text = ""; - UErrorCode status = U_ZERO_ERROR; - - BITestData x(status); - ADD_DATACHUNK(x, "", 0, status); // Break at start of data - RuleBasedBreakIterator* bi = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for default locale in TestEmptyString.\n"); - return; - } - generalIteratorTest(*bi, x); - delete bi; -} - -void RBBITest::TestGetAvailableLocales() -{ - int32_t locCount = 0; - const Locale* locList = BreakIterator::getAvailableLocales(locCount); - - if (locCount == 0) - errln("getAvailableLocales() returned an empty list!"); - // Just make sure that it's returning good memory. - int32_t i; - for (i = 0; i < locCount; ++i) { - logln(locList[i].getName()); - } -} - -//Testing the BreakIterator::getDisplayName() function -void RBBITest::TestGetDisplayName() -{ - UnicodeString result; - - BreakIterator::getDisplayName(Locale::getUS(), result); - if (Locale::getDefault() == Locale::getUS() && result != "English (United States)") - errln("BreakIterator::getDisplayName() failed: expected \"English (United States)\", got \"" - + result); - - BreakIterator::getDisplayName(Locale::getFrance(), Locale::getUS(), result); - if (result != "French (France)") - errln("BreakIterator::getDisplayName() failed: expected \"French (France)\", got \"" - + result); -} -/** - * Test End Behaviour - * @bug 4068137 - */ -void RBBITest::TestEndBehaviour() -{ - UErrorCode status = U_ZERO_ERROR; - UnicodeString testString("boo."); - BreakIterator *wb = BreakIterator::createWordInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for default locale in TestEndBehaviour.\n"); - return; - } - wb->setText(testString); - - if (wb->first() != 0) - errln("Didn't get break at beginning of string."); - if (wb->next() != 3) - errln("Didn't get break before period in \"boo.\""); - if (wb->current() != 4 && wb->next() != 4) - errln("Didn't get break at end of string."); - delete wb; -} -/* - * @bug 4153072 - */ -void RBBITest::TestBug4153072() { - UErrorCode status = U_ZERO_ERROR; - BreakIterator *iter = BreakIterator::createWordInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for default locale in TestBug4153072\n"); - return; - } - UnicodeString str("...Hello, World!..."); - int32_t begin = 3; - int32_t end = str.length() - 3; - UBool dummy; - - StringCharacterIterator* textIterator = new StringCharacterIterator(str, begin, end, begin); - iter->adoptText(textIterator); - int index; - for (index = -1; index < begin + 1; ++index) { - dummy = iter->isBoundary(index); - if (index < begin && dummy == TRUE) { - errln((UnicodeString)"Didn't handle preceeding correctly with offset = " + index + - " and begin index = " + begin); - } - } - delete iter; -} - - -/** - * Test Japanese Line Break - * @bug 4095322 - */ -void RBBITest::TestJapaneseLineBreak() -{ -#if 0 - // Test needs updating some more... Dump it for now. - - - // Change for Unicode TR 14: Punctuation characters with categories Pi and Pf do not count - // as opening and closing punctuation for line breaking. - // Also, \u30fc and \u30fe are not counted as hyphens. Remove these chars - // from these tests. 6-13-2002 - // - UErrorCode status = U_ZERO_ERROR; - UnicodeString testString = CharsToUnicodeString("\\u4e00x\\u4e8c"); - UnicodeString precedingChars = CharsToUnicodeString( - //"([{\\u00ab$\\u00a5\\u00a3\\u00a4\\u2018\\u201a\\u201c\\u201e\\u201b\\u201f"); - "([{$\\u00a5\\u00a3\\u00a4\\u201a\\u201e"); - UnicodeString followingChars = CharsToUnicodeString( - // ")]}\\u00bb!%,.\\u3001\\u3002\\u3063\\u3083\\u3085\\u3087\\u30c3\\u30e3\\u30e5\\u30e7\\u30fc" - ")]}!%,.\\u3001\\u3002\\u3063\\u3083\\u3085\\u3087\\u30c3\\u30e3\\u30e5\\u30e7" - // ":;\\u309b\\u309c\\u3005\\u309d\\u309e\\u30fd\\u30fe\\u2019\\u201d\\u00b0\\u2032\\u2033\\u2034" - ":;\\u309b\\u309c\\u3005\\u309d\\u309e\\u30fd\\u00b0\\u2032\\u2033\\u2034" - "\\u2030\\u2031\\u2103\\u2109\\u00a2\\u0300\\u0301\\u0302"); - BreakIterator *iter = BreakIterator::createLineInstance(Locale::getJapan(), status); - - int32_t i; - if (U_FAILURE(status)) - { - errln("Failed to create the BreakIterator for Japanese locale in TestJapaneseLineBreak.\n"); - return; - } - - for (i = 0; i < precedingChars.length(); i++) { - testString.setCharAt(1, precedingChars[i]); - iter->setText(testString); - int32_t j = iter->first(); - if (j != 0) - errln("ja line break failure: failed to start at 0"); - j = iter->next(); - if (j != 1) - errln("ja line break failure: failed to stop before '" + UCharToUnicodeString(precedingChars[i]) - + "' (" + ((int)(precedingChars[i])) + ")"); - j = iter->next(); - if (j != 3) - errln("ja line break failure: failed to skip position after '" + UCharToUnicodeString(precedingChars[i]) - + "' (" + ((int)(precedingChars[i])) + ")"); - } - - for (i = 0; i < followingChars.length(); i++) { - testString.setCharAt(1, followingChars[i]); - iter->setText(testString); - int j = iter->first(); - if (j != 0) - errln("ja line break failure: failed to start at 0"); - j = iter->next(); - if (j != 2) - errln("ja line break failure: failed to skip position before '" + UCharToUnicodeString(followingChars[i]) - + "' (" + ((int)(followingChars[i])) + ")"); - j = iter->next(); - if (j != 3) - errln("ja line break failure: failed to stop after '" + UCharToUnicodeString(followingChars[i]) - + "' (" + ((int)(followingChars[i])) + ")"); - } - delete iter; -#endif -} - - -//------------------------------------------------------------------------------ -// -// RBBITest::Extended Run RBBI Tests from an external test data file -// -//------------------------------------------------------------------------------ - -struct TestParams { - BreakIterator *bi; - UnicodeString dataToBreak; - UVector32 *expectedBreaks; - UVector32 *srcLine; - UVector32 *srcCol; -}; - -void RBBITest::executeTest(TestParams *t) { - int32_t bp; - int32_t prevBP; - int32_t i; - - t->bi->setText(t->dataToBreak); - // - // Run the iterator forward - // - prevBP = -1; - for (bp = t->bi->first(); bp != BreakIterator::DONE; bp = t->bi->next()) { - if (prevBP == bp) { - // Fail for lack of forward progress. - errln("Forward Iteration, no forward progress. Break Pos=%4d File line,col=%4d,%4d", - bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); - break; - } - - // Check that there were we didn't miss an expected break between the last one - // and this one. - for (i=prevBP+1; iexpectedBreaks->elementAti(i) != 0) { - int expected[] = {0, i}; - printStringBreaks(t->dataToBreak, expected, 2); - errln("Forward Iteration, break expected, but not found. Pos=%4d File line,col= %4d,%4d", - i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); - } - } - - // Check that the break we did find was expected - if (t->expectedBreaks->elementAti(bp) == 0) { - int expected[] = {0, bp}; - printStringBreaks(t->dataToBreak, expected, 2); - errln("Forward Iteration, break found, but not expected. Pos=%4d File line,col= %4d,%4d", - bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); - } else { - // The break was expected. - // Check that the {nnn} tag value is correct. - int32_t expectedTagVal = t->expectedBreaks->elementAti(bp); - if (expectedTagVal == -1) { - expectedTagVal = 0; - } - int32_t rs = ((RuleBasedBreakIterator *)t->bi)->getRuleStatus(); - if (rs != expectedTagVal) { - errln("Incorrect status for forward break. Pos=%4d File line,col= %4d,%4d.\n" - " Actual, Expected status = %4d, %4d", - bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp), rs, expectedTagVal); - } - } - - - prevBP = bp; - } - - // Verify that there were no missed expected breaks after the last one found - for (i=prevBP+1; iexpectedBreaks->size(); i++) { - if (t->expectedBreaks->elementAti(i) != 0) { - errln("Forward Iteration, break expected, but not found. Pos=%4d File line,col= %4d,%4d", - i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); - } - } - - // - // Run the iterator backwards, verify that the same breaks are found. - // - prevBP = t->dataToBreak.length()+2; // start with a phony value for the last break pos seen. - for (bp = t->bi->last(); bp != BreakIterator::DONE; bp = t->bi->previous()) { - if (prevBP == bp) { - // Fail for lack of progress. - errln("Reverse Iteration, no progress. Break Pos=%4d File line,col=%4d,%4d", - bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); - break; - } - - // Check that there were we didn't miss an expected break between the last one - // and this one. (UVector returns zeros for index out of bounds.) - for (i=prevBP-1; i>bp; i--) { - if (t->expectedBreaks->elementAti(i) != 0) { - errln("Reverse Itertion, break expected, but not found. Pos=%4d File line,col= %4d,%4d", - i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); - } - } - - // Check that the break we did find was expected - if (t->expectedBreaks->elementAti(bp) == 0) { - errln("Reverse Itertion, break found, but not expected. Pos=%4d File line,col= %4d,%4d", - bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); - } else { - // The break was expected. - // Check that the {nnn} tag value is correct. - int32_t expectedTagVal = t->expectedBreaks->elementAti(bp); - if (expectedTagVal == -1) { - expectedTagVal = 0; - } - int32_t rs = ((RuleBasedBreakIterator *)t->bi)->getRuleStatus(); - if (rs != expectedTagVal) { - errln("Incorrect status for reverse break. Pos=%4d File line,col= %4d,%4d.\n" - " Actual, Expected status = %4d, %4d", - bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp), rs, expectedTagVal); - } - } - - prevBP = bp; - } - - // Verify that there were no missed breaks prior to the last one found - for (i=prevBP-1; i>=0; i--) { - if (t->expectedBreaks->elementAti(i) != 0) { - errln("Forward Itertion, break expected, but not found. Pos=%4d File line,col= %4d,%4d", - i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); - } - } -} - - -void RBBITest::TestExtended() { - UErrorCode status = U_ZERO_ERROR; - Locale locale = Locale::getDefault(); - - UnicodeString rules; - TestParams tp; - tp.bi = NULL; - tp.expectedBreaks = new UVector32(status); - tp.srcLine = new UVector32(status); - tp.srcCol = new UVector32(status); - - - // - // Open and read the test data file. - // - const char *testDataDirectory = IntlTest::getSourceTestData(status); - char testFileName[1000]; - if (testDataDirectory == NULL || strlen(testDataDirectory) >= sizeof(testFileName)) { - errln("Can't open test data. Path too long."); - return; - } - strcpy(testFileName, testDataDirectory); - strcat(testFileName, "rbbitst.txt"); - - int len; - UChar *testFile = ReadAndConvertFile(testFileName, len, status); - if (U_FAILURE(status)) { - return; /* something went wrong, error already output */ - } - - - - // - // Put the test data into a UnicodeString - // - UnicodeString testString(FALSE, testFile, len); - - enum EParseState{ - PARSE_COMMENT, - PARSE_TAG, - PARSE_DATA, - PARSE_NUM - } - parseState = PARSE_TAG; - - EParseState savedState = PARSE_TAG; - - static const UChar CH_LF = 0x0a; - static const UChar CH_CR = 0x0d; - static const UChar CH_HASH = 0x23; - /*static const UChar CH_PERIOD = 0x2e;*/ - static const UChar CH_LT = 0x3c; - static const UChar CH_GT = 0x3e; - static const UChar CH_BACKSLASH = 0x5c; - static const UChar CH_BULLET = 0x2022; - - int32_t lineNum = 1; - int32_t colStart = 0; - int32_t column = 0; - int32_t charIdx = 0; - - int32_t tagValue = 0; // The numeric value of a tag. - - for (charIdx = 0; charIdx < len; ) { - UChar c = testString.charAt(charIdx); - charIdx++; - if (c == CH_CR && charIdx") == 0) { - delete tp.bi; - tp.bi = BreakIterator::createWordInstance(locale, status); - charIdx += 5; - break; - } - if (testString.compare(charIdx-1, 6, "") == 0) { - delete tp.bi; - tp.bi = BreakIterator::createCharacterInstance(locale, status); - charIdx += 5; - break; - } - if (testString.compare(charIdx-1, 6, "") == 0) { - delete tp.bi; - tp.bi = BreakIterator::createLineInstance(locale, status); - charIdx += 5; - break; - } - if (testString.compare(charIdx-1, 6, "") == 0) { - delete tp.bi; - tp.bi = BreakIterator::createSentenceInstance(locale, status); - charIdx += 5; - break; - } - if (testString.compare(charIdx-1, 7, "") == 0) { - delete tp.bi; - tp.bi = BreakIterator::createTitleInstance(locale, status); - charIdx += 6; - break; - } - if (testString.compare(charIdx-1, 6, "<data>") == 0) { - parseState = PARSE_DATA; - charIdx += 5; - tp.dataToBreak = ""; - tp.expectedBreaks->removeAllElements(); - tp.srcCol ->removeAllElements(); - tp.srcLine->removeAllElements(); - break; - } - - errln("line %d: Tag expected in test file.", lineNum); - goto end_test; - parseState = PARSE_COMMENT; - savedState = PARSE_DATA; - } - break; - - case PARSE_DATA: - if (c == CH_BULLET) { - int32_t breakIdx = tp.dataToBreak.length(); - tp.expectedBreaks->setSize(breakIdx+1); - tp.expectedBreaks->setElementAt(-1, breakIdx); - tp.srcLine->setSize(breakIdx+1); - tp.srcLine->setElementAt(lineNum, breakIdx); - tp.srcCol ->setSize(breakIdx+1); - tp.srcCol ->setElementAt(column, breakIdx); - break; - } - - if (testString.compare(charIdx-1, 7, "</data>") == 0) { - // Add final entry to mappings from break location to source file position. - // Need one extra because last break position returned is after the - // last char in the data, not at the last char. - tp.srcLine->addElement(lineNum, status); - tp.srcCol ->addElement(column, status); - - parseState = PARSE_TAG; - charIdx += 7; - - // RUN THE TEST! - executeTest(&tp); - break; - } - - if (testString.compare(charIdx-1, 3, "\\N{") == 0) { - // Named character, e.g. \N{COMBINING GRAVE ACCENT} - // Get the code point from the name and insert it into the test data. - // (Damn, no API takes names in Unicode !!! - // we've got to take it back to char *) - int32_t nameEndIdx = testString.indexOf((UChar)0x7d/*'}'*/, charIdx); - int32_t nameLength = nameEndIdx - (charIdx+2); - char charNameBuf[200]; - UChar32 theChar = -1; - if (nameEndIdx != -1) { - UErrorCode status = U_ZERO_ERROR; - testString.extract(charIdx+2, nameLength, charNameBuf, sizeof(charNameBuf)); - charNameBuf[sizeof(charNameBuf)-1] = 0; - theChar = u_charFromName(U_UNICODE_CHAR_NAME, charNameBuf, &status); - if (U_FAILURE(status)) { - theChar = -1; - } - } - if (theChar == -1) { - errln("Error in named character in test file at line %d, col %d", - lineNum, column); - } else { - // Named code point was recognized. Insert it - // into the test data. - tp.dataToBreak.append(theChar); - while (tp.dataToBreak.length() > tp.srcLine->size()) { - tp.srcLine->addElement(lineNum, status); - tp.srcCol ->addElement(column, status); - } - } - if (nameEndIdx > charIdx) { - charIdx = nameEndIdx+1; - } - break; - } - - - - - if (testString.compare(charIdx-1, 2, "<>") == 0) { - charIdx++; - int32_t breakIdx = tp.dataToBreak.length(); - tp.expectedBreaks->setSize(breakIdx+1); - tp.expectedBreaks->setElementAt(-1, breakIdx); - tp.srcLine->setSize(breakIdx+1); - tp.srcLine->setElementAt(lineNum, breakIdx); - tp.srcCol ->setSize(breakIdx+1); - tp.srcCol ->setElementAt(column, breakIdx); - break; - } - - if (c == CH_LT) { - tagValue = 0; - parseState = PARSE_NUM; - break; - } - - if (c == CH_HASH && column==3) { // TODO: why is column off so far? - parseState = PARSE_COMMENT; - savedState = PARSE_DATA; - break; - } - - if (c == CH_BACKSLASH) { - // Check for \ at end of line, a line continuation. - // Advance over (discard) the newline - UChar32 cp = testString.char32At(charIdx); - if (cp == CH_CR && charIdx<len && testString.charAt(charIdx+1) == CH_LF) { - // We have a CR LF - // Need an extra increment of the input ptr to move over both of them - charIdx++; - } - if (cp == CH_LF || cp == CH_CR) { - lineNum++; - colStart = charIdx; - charIdx++; - break; - } - - // Let unescape handle the back slash. - cp = testString.unescapeAt(charIdx); - if (cp != -1) { - // Escape sequence was recognized. Insert the char - // into the test data. - tp.dataToBreak.append(cp); - while (tp.dataToBreak.length() > tp.srcLine->size()) { - tp.srcLine->addElement(lineNum, status); - tp.srcCol ->addElement(column, status); - } - break; - } - - - // Not a recognized backslash escape sequence. - // Take the next char as a literal. - // TODO: Should this be an error? - c = testString.charAt(charIdx); - charIdx = testString.moveIndex32(charIdx, 1); - } - - // Normal, non-escaped data char. - tp.dataToBreak.append(c); - - // Save the mapping from offset in the data to line/column numbers in - // the original input file. Will be used for better error messages only. - // If there's an expected break before this char, the slot in the mapping - // vector will already be set for this char; don't overwrite it. - if (tp.dataToBreak.length() > tp.srcLine->size()) { - tp.srcLine->addElement(lineNum, status); - tp.srcCol ->addElement(column, status); - } - break; - - - case PARSE_NUM: - // We are parsing an expected numeric tag value, like <1234>, - // within a chunk of data. - if (u_isUWhiteSpace(c)) { - break; - } - - if (c == CH_GT) { - // Finished the number. Add the info to the expected break data, - // and switch parse state back to doing plain data. - parseState = PARSE_DATA; - if (tagValue == 0) { - tagValue = -1; - } - int32_t breakIdx = tp.dataToBreak.length(); - tp.expectedBreaks->setSize(breakIdx+1); - tp.expectedBreaks->setElementAt(tagValue, breakIdx); - tp.srcLine->setSize(breakIdx+1); - tp.srcLine->setElementAt(lineNum, breakIdx); - tp.srcCol ->setSize(breakIdx+1); - tp.srcCol ->setElementAt(column, breakIdx); - break; - } - - if (u_isdigit(c)) { - tagValue = tagValue*10 + u_charDigitValue(c); - break; - } - - errln("Syntax Error in test file at line %d, col %d", - lineNum, column); - goto end_test; - parseState = PARSE_COMMENT; - break; - } - - - if (U_FAILURE(status)) { - errln("ICU Error %s while parsing test file at line %d.", - u_errorName(status), lineNum); - goto end_test; - status = U_ZERO_ERROR; - } - - } - -end_test: - delete tp.bi; - delete tp.expectedBreaks; - delete tp.srcLine; - delete tp.srcCol; - delete [] testFile; -} - - -//------------------------------------------------------------------------------- -// -// ReadAndConvertFile Read a text data file, convert it to UChars, and -// return the datain one big UChar * buffer, which the caller must delete. -// -// TODO: This is a clone of RegexTest::ReadAndConvertFile. -// Move this function to some common place. -// -//-------------------------------------------------------------------------------- -UChar *RBBITest::ReadAndConvertFile(const char *fileName, int &ulen, UErrorCode &status) { - UChar *retPtr = NULL; - char *fileBuf = NULL; - UConverter* conv = NULL; - FILE *f = NULL; - - ulen = 0; - if (U_FAILURE(status)) { - return retPtr; - } - - // - // Open the file. - // - f = fopen(fileName, "rb"); - if (f == 0) { - errln("Error opening test data file %s\n", fileName); - status = U_FILE_ACCESS_ERROR; - return NULL; - } - // - // Read it in - // - int fileSize; - int amt_read; - - fseek( f, 0, SEEK_END); - fileSize = ftell(f); - fileBuf = new char[fileSize]; - fseek(f, 0, SEEK_SET); - amt_read = fread(fileBuf, 1, fileSize, f); - if (amt_read != fileSize || fileSize <= 0) { - errln("Error reading test data file."); - goto cleanUpAndReturn; - } - - // - // Look for a Unicode Signature (BOM) on the data just read - // - int32_t signatureLength; - const char * fileBufC; - const char* encoding; - - fileBufC = fileBuf; - encoding = ucnv_detectUnicodeSignature( - fileBuf, fileSize, &signatureLength, &status); - if(encoding!=NULL ){ - fileBufC += signatureLength; - fileSize -= signatureLength; - } - - // - // Open a converter to take the rule file to UTF-16 - // - conv = ucnv_open(encoding, &status); - if (U_FAILURE(status)) { - goto cleanUpAndReturn; - } - - // - // Convert the rules to UChar. - // Preflight first to determine required buffer size. - // - ulen = ucnv_toUChars(conv, - NULL, // dest, - 0, // destCapacity, - fileBufC, - fileSize, - &status); - if (status == U_BUFFER_OVERFLOW_ERROR) { - // Buffer Overflow is expected from the preflight operation. - status = U_ZERO_ERROR; - - retPtr = new UChar[ulen+1]; - ucnv_toUChars(conv, - retPtr, // dest, - ulen+1, - fileBufC, - fileSize, - &status); - } - -cleanUpAndReturn: - fclose(f); - delete fileBuf; - ucnv_close(conv); - if (U_FAILURE(status)) { - errln("ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status)); - delete retPtr; - retPtr = 0; - ulen = 0; - }; - return retPtr; -} - - -//-------------------------------------------------------------------------------------------- -// -// Exhaustive Tests, using Unicode Data Files. -// -//-------------------------------------------------------------------------------------------- - -// -// Token level scanner for the Unicode Line Break Test Data file. -// Return the next token, as follows: -// >= 0: a UChar32 character, scanned from hex in the file. -// -1: a break position, a division sign in the file. -// -2: end of rule. A new line in the file. -// -3: end of file. No more rules. -// -4: Error -// -// The scanner -// strips comments, ('#' to end of line) -// Recognizes CR, CR/LF and LF as new lines. -// Skips over spaces and Xs (don't break here) in the data. -// -struct ScanState { - int32_t fPeekChar; - UBool fPeeked; - int32_t fLineNum; - FILE *fFile; - ScanState() :fPeeked(FALSE), fLineNum(0), fFile(NULL) {}; -}; - -// Literal characters that are of interest. In hex to keep EBCDIC based machines happy. -// The data itself is latin-1 on all platforms. -static const int32_t chSpace = 0x20; -static const int32_t chTab = 0x09; -static const int32_t chCR = 0x0D; -static const int32_t chLF = 0x0A; -static const int32_t chHash = 0x23; -static const int32_t chMult = 0xD7; -static const int32_t chDivide = 0xF7; - -static int32_t nextLBDToken(ScanState *s) { - int32_t c; - - // Read characters from the input file until we get something interesting - // to return. The file is in latin-1 encoding. - for (;;) { - // Get the next character to look at, - if (s->fPeeked) { - c = s->fPeekChar; - s->fPeeked = FALSE; - } else { - c = getc(s->fFile); - } - - // EOF. Return immediately. - if (c == EOF) { - return -3; - } - - // Spaces. Treat the multiply sign as a space - it indicates a no-break position - // in the data, and the test program doesn't want to see them. - // Continue the next char loop, looking for something significant. - if (c == chSpace || c == chTab || c == chMult) { - continue; - } - - // Divide sign. Indicates an expected break position. - if (c == chDivide) { - return -1; - } - - // New Line Handling. Keep track of line number in the file, which in turn - // requires keeping track of CR/LF as a single new line. - if (c == chCR) { - s->fLineNum++; - s->fPeekChar = getc(s->fFile); - if (s->fPeekChar != chLF) {s->fPeeked = TRUE;}; - return -2; - } - if (c == chLF) { - s->fLineNum++; - return -2; - } - - // Comments. Consume everything up to the next new line. - if (c == chHash) { - do { - c = getc(s->fFile); - } while (!(c == EOF || c == chCR || c == chLF)); - s->fPeekChar = c; - s->fPeeked = TRUE; - return nextLBDToken(s); - } - - // Scan a hex character (UChar32) value. - if (u_digit(c, 16) >= 0) { - int32_t v = u_digit(c, 16); - for (;;) { - c = getc(s->fFile); - if (u_digit(c, 16) < 0) {break;}; - v <<= 4; - v += u_digit(c, 16); - } - s->fPeekChar = c; - s->fPeeked = TRUE; - return v; - } - - // Error. Character was something unexpected. - return -4; - } -} - - - -void RBBITest::TestLineBreakData() { - - UErrorCode status = U_ZERO_ERROR; - UnicodeString testString; - UVector expectedBreaks(status); - ScanState ss; - int32_t tok; - - BreakIterator *bi = BreakIterator::createLineInstance(Locale::getDefault(), status); - if (U_FAILURE(status)) { - errln("Failure creating break iterator"); - return; - } - - const char * lbdfName = "LBTest.txt"; - - // Open the test data file. - // TODO: a proper way to handle this data. - ss.fFile = fopen(lbdfName, "rb"); - if (ss.fFile == NULL) { - logln("Unable to open Line Break Test Data file. Skipping test."); - delete bi; - return; - } - - // Loop once per line from the test data file. - for (;;) { - // Zero out test data from previous line. - testString.truncate(0); - expectedBreaks.removeAllElements(); - - // Read one test's (line's) worth of data from the file. - // Loop once per token on the input file line. - for(;;) { - tok = nextLBDToken(&ss); - - // If we scanned a character number in the file. - // save it in the test data array. - if (tok >= 0) { - testString.append((UChar32)tok); - continue; - } - - // If we scanned a break position in the data, record it. - if (tok == -1) { - expectedBreaks.addElement(testString.length(), status); - continue; - } - - // If we scanned a new line, or EOF - // drop out of scan loop and run the test case. - if (tok == -2 || tok == -3) {break;}; - - // None of above. Error. - errln("Failure: Unrecognized data format, test file line %d", ss.fLineNum); - break; - } - - // If this line from the test data file actually contained test data, - // run the test. - if (testString.length() > 0) { - int32_t pos; // Break Position in the test string - int32_t expectedI = 0; // Index of expected break position in vector of same. - int32_t expectedPos; // Expected break position (index into test string) - - bi->setText(testString); - pos = bi->first(); // TODO: break iterators always return a match at pos 0. - pos = bi->next(); // Line Break TR says no match at position 0. - // Resolve. - - for (; pos != BreakIterator::DONE; ) { - expectedPos = expectedBreaks.elementAti(expectedI); - if (pos < expectedPos) { - errln("Failure: Test file line %d, unexpected break found at position %d", - ss.fLineNum, pos); - break; - } - if (pos > expectedPos) { - errln("Failure: Test file line %d, failed to find break at position %d", - ss.fLineNum, expectedPos); - break; - } - pos = bi->next(); - expectedI++; - } - } - - // If we've hit EOF on the input file, we're done. - if (tok == -3) { - break; - } - - } - - fclose(ss.fFile); - delete bi; - -} - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -//--------------------------------------------------------------------------------------- -// -// classs RBBIMonkeyKind -// -// Monkey Test for Break Iteration -// Abstract interface class. Concrete derived classes independently -// implement the break rules for different iterator types. -// -// The Monkey Test itself uses doesn't know which type of break iterator it is -// testing, but works purely in terms of the interface defined here. -// -//--------------------------------------------------------------------------------------- -class RBBIMonkeyKind { -public: - // Return a UVector of UnicodeSets, representing the character classes used - // for this type of iterator. - virtual UVector *charClasses() = 0; - - // Set the test text on which subsequent calls to next() will operate - virtual void setText(const UnicodeString &s) = 0; - - // Find the next break postion, starting from the prev break position, or from zero. - // Return -1 after reaching end of string. - virtual int32_t next(int32_t i) = 0; - - virtual ~RBBIMonkeyKind(); - UErrorCode deferredStatus; - - -protected: - RBBIMonkeyKind(); - -private: -}; - -RBBIMonkeyKind::RBBIMonkeyKind() { - deferredStatus = U_ZERO_ERROR; -} - -RBBIMonkeyKind::~RBBIMonkeyKind() { -} - - -//---------------------------------------------------------------------------------------- -// -// Random Numbers. Similar to standard lib rand() and srand() -// Not using library to -// 1. Get same results on all platforms. -// 2. Get access to current seed, to more easily reproduce failures. -// -//--------------------------------------------------------------------------------------- -static uint32_t m_seed = 1; - -static uint32_t m_rand() -{ - m_seed = m_seed * 1103515245 + 12345; - return (uint32_t)(m_seed/65536) % 32768; -} - - -//------------------------------------------------------------------------------------------ -// -// class RBBICharMonkey Character (Grapheme Cluster) specific implementation -// of RBBIMonkeyKind. -// -//------------------------------------------------------------------------------------------ -class RBBICharMonkey: public RBBIMonkeyKind { -public: - RBBICharMonkey(); - virtual ~RBBICharMonkey(); - virtual UVector *charClasses(); - virtual void setText(const UnicodeString &s); - virtual int32_t next(int32_t i); -private: - UVector *fSets; - - UnicodeSet *fCRLFSet; - UnicodeSet *fControlSet; - UnicodeSet *fExtendSet; - UnicodeSet *fHangulSet; - UnicodeSet *fAnySet; - - RegexMatcher *fMatcher; - const UnicodeString *fText; -}; - - -RBBICharMonkey::RBBICharMonkey() { - UErrorCode status = U_ZERO_ERROR; - - fText = NULL; - fMatcher = new RegexMatcher("\\X", 0, status); // Pattern to match a grampheme cluster - - fCRLFSet = new UnicodeSet("[\\r\\n]", status); - fControlSet = new UnicodeSet("[[\\p{Zl}\\p{Zp}\\p{Cc}\\p{Cf}]-[\\n]-[\\r]-\\p{Grapheme_Extend}]", status); - fExtendSet = new UnicodeSet("[\\p{Grapheme_Extend}]", status); - fHangulSet = new UnicodeSet( - "[\\p{Hangul_Syllable_Type=L}\\p{Hangul_Syllable_Type=L}\\p{Hangul_Syllable_Type=T}" - "\\p{Hangul_Syllable_Type=LV}\\p{Hangul_Syllable_Type=LVT}]", status); - fAnySet = new UnicodeSet("[\\u0000-\\U0010ffff]", status); - - fSets = new UVector(status); - fSets->addElement(fCRLFSet, status); - fSets->addElement(fControlSet, status); - fSets->addElement(fExtendSet, status); - fSets->addElement(fHangulSet, status); - fSets->addElement(fAnySet, status); - if (U_FAILURE(status)) { - deferredStatus = status; - } -}; - - -void RBBICharMonkey::setText(const UnicodeString &s) { - fText = &s; - fMatcher->reset(s); -} - - -int32_t RBBICharMonkey::next(int32_t i) { - UErrorCode status = U_ZERO_ERROR; - int32_t retVal = -1; - - if (fMatcher->find(i, status)) { - retVal = fMatcher->end(status); - } - if (U_FAILURE(status)){ - retVal = -1; - } - return retVal; -} - - -UVector *RBBICharMonkey::charClasses() { - return fSets; -} - - -RBBICharMonkey::~RBBICharMonkey() { - delete fSets; - delete fCRLFSet; - delete fControlSet; - delete fExtendSet; - delete fHangulSet; - delete fAnySet; - - delete fMatcher; -} - -//------------------------------------------------------------------------------------------ -// -// class RBBIWordMonkey Word Break specific implementation -// of RBBIMonkeyKind. -// -//------------------------------------------------------------------------------------------ -class RBBIWordMonkey: public RBBIMonkeyKind { -public: - RBBIWordMonkey(); - virtual ~RBBIWordMonkey(); - virtual UVector *charClasses(); - virtual void setText(const UnicodeString &s); - virtual int32_t next(int32_t i); -private: - UVector *fSets; - - UnicodeSet *fKatakanaSet; - UnicodeSet *fALetterSet; - UnicodeSet *fMidLetterSet; - UnicodeSet *fMidNumSet; - UnicodeSet *fNumericSet; - UnicodeSet *fFormatSet; - UnicodeSet *fOtherSet; - UnicodeSet *fExtendSet; - UnicodeSet *fExtendNumLetSet; - - RegexMatcher *fMatcher; - - const UnicodeString *fText; - - RegexMatcher *fGCFMatcher; - RegexMatcher *fGCMatcher; - -}; - - -RBBIWordMonkey::RBBIWordMonkey() : fGCFMatcher(0), - fGCMatcher(0) -{ - UErrorCode status = U_ZERO_ERROR; - - fSets = new UVector(status); - - fKatakanaSet = new UnicodeSet("[\\p{script=KATAKANA}" - "\\u3031-\\u3035\\u309b\\u309c\\u30a0" - "\\u30fc\\uff70\\uff9e\\uff9f]", status); - - const UnicodeString ALetterStr( "[[\\p{Alphabetic}" - "\\u00a0" // NBSP - "\\u05f3]" // Hebrew punct Geresh - "-[\\p{Ideographic}]" - "-[\\p{Script=Lao}]" - "-[\\p{Script=Hiragana}]" - "-[\\p{Grapheme_Extend}]]"); - fALetterSet = new UnicodeSet(ALetterStr, status); - fALetterSet->removeAll(*fKatakanaSet); - - fMidLetterSet = new UnicodeSet("[\\u0027\\u00b7\\u05f4\\u2019\\u2027\\u003a]", status); - fMidNumSet = new UnicodeSet("[[\\p{Line_Break=Infix_Numeric}]-[\\u003a]]", status); - fNumericSet = new UnicodeSet("[\\p{Nd}\\u066b\\u066c]", status); - fFormatSet = new UnicodeSet("[\\p{Format}-[\\u200c\\u200d]]", status); - fExtendSet = new UnicodeSet("[\\p{Grapheme_Extend}]", status); - fExtendNumLetSet = new UnicodeSet("[\\p{Pc}-[\\u30fb\\uff65]]", status); - fOtherSet = new UnicodeSet(); - if(U_FAILURE(status)) { - deferredStatus = status; - return; - } - - fOtherSet->complement(); - fOtherSet->removeAll(*fKatakanaSet); - fOtherSet->removeAll(*fALetterSet); - fOtherSet->removeAll(*fMidLetterSet); - fOtherSet->removeAll(*fMidNumSet); - fOtherSet->removeAll(*fNumericSet); - fOtherSet->removeAll(*fExtendNumLetSet); - - fSets->addElement(fALetterSet, status); - fSets->addElement(fKatakanaSet, status); - fSets->addElement(fMidLetterSet, status); - fSets->addElement(fMidNumSet, status); - fSets->addElement(fNumericSet, status); - fSets->addElement(fFormatSet, status); - fSets->addElement(fOtherSet, status); - fSets->addElement(fExtendNumLetSet, status); - - - fGCFMatcher = new RegexMatcher("\\X(?:[\\p{Format}-\\p{Grapheme_Extend}])*", 0, status); - fGCMatcher = new RegexMatcher("\\X", 0, status); - - if (U_FAILURE(status)) { - deferredStatus = status; - } -}; - -void RBBIWordMonkey::setText(const UnicodeString &s) { - fText = &s; - fGCMatcher->reset(*fText); - fGCFMatcher->reset(*fText); -} - - -int32_t RBBIWordMonkey::next(int32_t prevPos) { - UErrorCode status = U_ZERO_ERROR; - - int p0, p1, p2, p3; // Indices of the significant code points around the - // break position being tested. The candidate break - // location is before p2. - - int breakPos = -1; - - UChar32 c0, c1, c2, c3; // The code points at p0, p1, p2 & p3. - - // Prev break at end of string. return DONE. - if (prevPos >= fText->length()) { - return -1; - } - p0 = p1 = p2 = p3 = prevPos; - c3 = fText->char32At(prevPos); - c0 = c1 = c2 = 0; - - - // Format char after prev break? Special case, see last Note for Word Boundaries TR. - // break immdiately after the format char. - if (fFormatSet->contains(c3)) { - breakPos = fText->moveIndex32(prevPos, 1); - return breakPos; - } - - - // Loop runs once per "significant" character position in the input text. - for (;;) { - // Move all of the positions forward in the input string. - p0 = p1; c0 = c1; - p1 = p2; c1 = c2; - p2 = p3; c2 = c3; - // Advancd p3 by (GC Format*) Rules 3, 4 - status = U_ZERO_ERROR; - if (fGCFMatcher->find(p3, status) == FALSE) { - p3 = fText->length(); - c3 = 0; - } else { - p3 = fGCFMatcher->end(0, status); - U_ASSERT(U_SUCCESS(status)); - c3 = fText->char32At(p3); - } - - if (p1 == p2) { - // Still warming up the loop. (won't work with zero length strings, but we don't care) - continue; - } - if (p2 == fText->length()) { - // Reached end of string. Always a break position. - break; - } - - // Rule (5). ALetter x ALetter - if (fALetterSet->contains(c1) && - fALetterSet->contains(c2)) { - continue; - } - - // Rule (6) ALetter x (MidLetter | MidNumLet) ALetter - // - // Also incorporates rule 7 by skipping pos ahead to position of the - // terminating ALetter. - if ( fALetterSet->contains(c1) && - fMidLetterSet->contains(c2) && - fALetterSet->contains(c3)) { - continue; - } - - - // Rule (7) ALetter (MidLetter | MidNumLet) x ALetter - if (fALetterSet->contains(c0) && - (fMidLetterSet->contains(c1) ) && - fALetterSet->contains(c2)) { - continue; - } - - // Rule (8) Numeric x Numeric - if (fNumericSet->contains(c1) && - fNumericSet->contains(c2)) { - continue; - } - - // Rule (9) ALetter x Numeric - if (fALetterSet->contains(c1) && - fNumericSet->contains(c2)) { - continue; - } - - // Rule (10) Numeric x ALetter - if (fNumericSet->contains(c1) && - fALetterSet->contains(c2)) { - continue; - } - - // Rule (11) Numeric (MidNum | MidNumLet) x Numeric - if ( fNumericSet->contains(c0) && - fMidNumSet->contains(c1) && - fNumericSet->contains(c2)) { - continue; - } - - // Rule (12) Numeric x (MidNum | MidNumLet) Numeric - if (fNumericSet->contains(c1) && - fMidNumSet->contains(c2) && - fNumericSet->contains(c3)) { - continue; - } - - // Rule (13) Katakana x Katakana - if (fKatakanaSet->contains(c1) && - fKatakanaSet->contains(c2)) { - continue; - } - - // Rule 13a - if ((fALetterSet->contains(c1) || fNumericSet->contains(c1) || - fKatakanaSet->contains(c1) || fExtendNumLetSet->contains(c1)) && - fExtendNumLetSet->contains(c2)) { - continue; - } - - // Rule 13b - if (fExtendNumLetSet->contains(c1) && - (fALetterSet->contains(c2) || fNumericSet->contains(c2) || - fKatakanaSet->contains(c2))) { - continue; - } - - - // Rule 14. Break found here. - break; - } - - - // Rule 4 fixup, back up before any trailing - // format characters at the end of the word. - breakPos = p2; - status = U_ZERO_ERROR; - if (fGCMatcher->find(p1, status)) { - breakPos = fGCMatcher->end(0, status); - U_ASSERT(U_SUCCESS(status)); - } - return breakPos; -} - - -UVector *RBBIWordMonkey::charClasses() { - return fSets; -} - - -RBBIWordMonkey::~RBBIWordMonkey() { - delete fSets; - delete fKatakanaSet; - delete fALetterSet; - delete fMidLetterSet; - delete fMidNumSet; - delete fNumericSet; - delete fFormatSet; - delete fExtendSet; - delete fOtherSet; - - delete fGCFMatcher; - delete fGCMatcher; -} - - - - -//------------------------------------------------------------------------------------------- -// -// RBBILineMonkey -// -//------------------------------------------------------------------------------------------- - -class RBBILineMonkey: public RBBIMonkeyKind { -public: - RBBILineMonkey(); - virtual ~RBBILineMonkey(); - virtual UVector *charClasses(); - virtual void setText(const UnicodeString &s); - virtual int32_t next(int32_t i); - virtual void rule67Adjust(int32_t pos, UChar32 *posChar, int32_t *nextPos, UChar32 *nextChar); -private: - UVector *fSets; - - UnicodeSet *fBK; - UnicodeSet *fCR; - UnicodeSet *fLF; - UnicodeSet *fCM; - UnicodeSet *fNL; - UnicodeSet *fSG; - UnicodeSet *fWJ; - UnicodeSet *fZW; - UnicodeSet *fGL; - UnicodeSet *fCB; - UnicodeSet *fSP; - UnicodeSet *fB2; - UnicodeSet *fBA; - UnicodeSet *fBB; - UnicodeSet *fHY; - UnicodeSet *fCL; - UnicodeSet *fEX; - UnicodeSet *fIN; - UnicodeSet *fNS; - UnicodeSet *fOP; - UnicodeSet *fQU; - UnicodeSet *fIS; - UnicodeSet *fNU; - UnicodeSet *fPO; - UnicodeSet *fPR; - UnicodeSet *fSY; - UnicodeSet *fAI; - UnicodeSet *fAL; - UnicodeSet *fID; - UnicodeSet *fSA; - UnicodeSet *fXX; - - BreakIterator *fCharBI; - - const UnicodeString *fText; - int32_t *fOrigPositions; - - RegexMatcher *fNumberMatcher; - RegexMatcher *fLB10Matcher; - RegexMatcher *fLB11Matcher; -}; - - -RBBILineMonkey::RBBILineMonkey() -{ - UErrorCode status = U_ZERO_ERROR; - - fSets = new UVector(status); - - fBK = new UnicodeSet("[\\p{Line_Break=BK}]", status); - fCR = new UnicodeSet("[\\p{Line_break=CR}]", status); - fLF = new UnicodeSet("[\\p{Line_break=LF}]", status); - fCM = new UnicodeSet("[\\p{Line_break=CM}]", status); - fNL = new UnicodeSet("[\\p{Line_break=NL}]", status); - fWJ = new UnicodeSet("[\\p{Line_break=WJ}]", status); - fZW = new UnicodeSet("[\\p{Line_break=ZW}]", status); - fGL = new UnicodeSet("[\\p{Line_break=GL}]", status); - fCB = new UnicodeSet("[\\p{Line_break=CB}]", status); - fSP = new UnicodeSet("[\\p{Line_break=SP}]", status); - fB2 = new UnicodeSet("[\\p{Line_break=B2}]", status); - fBA = new UnicodeSet("[\\p{Line_break=BA}]", status); - fBB = new UnicodeSet("[\\p{Line_break=BB}]", status); - fHY = new UnicodeSet("[\\p{Line_break=HY}]", status); - fCL = new UnicodeSet("[\\p{Line_break=CL}]", status); - fEX = new UnicodeSet("[\\p{Line_break=EX}]", status); - fIN = new UnicodeSet("[\\p{Line_break=IN}]", status); - fNS = new UnicodeSet("[\\p{Line_break=NS}]", status); - fOP = new UnicodeSet("[\\p{Line_break=OP}]", status); - fQU = new UnicodeSet("[\\p{Line_break=QU}]", status); - fIS = new UnicodeSet("[\\p{Line_break=IS}]", status); - fNU = new UnicodeSet("[\\p{Line_break=NU}]", status); - fPO = new UnicodeSet("[\\p{Line_break=PO}]", status); - fPR = new UnicodeSet("[\\p{Line_break=PR}]", status); - fSY = new UnicodeSet("[\\p{Line_break=SY}]", status); - fAI = new UnicodeSet("[\\p{Line_break=AI}]", status); - fAL = new UnicodeSet("[\\p{Line_break=AL}]", status); - fID = new UnicodeSet("[\\p{Line_break=ID}]", status); - fSA = new UnicodeSet("[\\p{Line_break=SA}]", status); - fXX = new UnicodeSet("[\\p{Line_break=XX}]", status); - - fAL->addAll(*fXX); // Default behavior for XX is identical to AL - fAL->addAll(*fAI); // Default behavior for AI is identical to AL - fAL->addAll(*fSA); // Default behavior for SA is XX, which defaults to AL - - - - fSets->addElement(fBK, status); - fSets->addElement(fCR, status); - fSets->addElement(fLF, status); - fSets->addElement(fCM, status); - fSets->addElement(fNL, status); - fSets->addElement(fWJ, status); - fSets->addElement(fZW, status); - fSets->addElement(fGL, status); - fSets->addElement(fCB, status); - fSets->addElement(fSP, status); - fSets->addElement(fB2, status); - fSets->addElement(fBA, status); - fSets->addElement(fBB, status); - fSets->addElement(fHY, status); - fSets->addElement(fCL, status); - fSets->addElement(fEX, status); - fSets->addElement(fIN, status); - fSets->addElement(fNS, status); - fSets->addElement(fOP, status); - fSets->addElement(fQU, status); - fSets->addElement(fIS, status); - fSets->addElement(fNU, status); - fSets->addElement(fPO, status); - fSets->addElement(fPR, status); - fSets->addElement(fSY, status); - fSets->addElement(fAI, status); - fSets->addElement(fAL, status); - fSets->addElement(fID, status); - fSets->addElement(fWJ, status); - fSets->addElement(fSA, status); - // fSets->addElement(fXX, status); - - - - fNumberMatcher = new RegexMatcher( - "(\\p{Line_Break=PR}\\p{Line_Break=CM}*)?" - "((\\p{Line_Break=OP}|\\p{Line_Break=HY})\\p{Line_Break=CM}*)?" - "\\p{Line_Break=NU}\\p{Line_Break=CM}*" - "((\\p{Line_Break=NU}|\\p{Line_Break=IS}|\\p{Line_Break=SY})\\p{Line_Break=CM}*)*" - "(\\p{Line_Break=CL}\\p{Line_Break=CM}*)?" - "(\\p{Line_Break=PO}\\p{Line_Break=CM}*)?", - 0, status); - - fLB10Matcher = new RegexMatcher( - "\\p{Line_Break=QU}\\p{Line_Break=CM}*" - "\\p{Line_Break=SP}*" - "(\\p{Line_Break=OP})\\p{Line_Break=CM}*", - 0, status); - - fLB11Matcher = new RegexMatcher( - "\\p{Line_Break=CL}\\p{Line_Break=CM}*" - "\\p{Line_Break=SP}*" - "(\\p{Line_Break=NS})\\p{Line_Break=CM}*", - 0, status); - - fCharBI = BreakIterator::createCharacterInstance(Locale::getEnglish(), status); - - if (U_FAILURE(status)) { - deferredStatus = status; - } -}; - - -void RBBILineMonkey::setText(const UnicodeString &s) { - fText = &s; - fCharBI->setText(s); - fNumberMatcher->reset(s); -} - -// -// rule67Adjust -// Line Break TR rules 6 and 7 implementation. -// This deals with combining marks, Hangul Syllables, and other sequences that -// that must be treated as if they were something other than what they actually are. -// -// This is factored out into a separate function because it must be applied twice for -// each potential break, once to the chars before the position being checked, then -// again to the text following the possible break. -// -void RBBILineMonkey::rule67Adjust(int32_t pos, UChar32 *posChar, int32_t *nextPos, UChar32 *nextChar) { - if (pos == -1) { - // Invalid initial position. Happens during the warmup iteration of the - // main loop in next(). - return; - } - - int32_t nPos = *nextPos; - - // LB 6 Treat Korean Syllables as a single unit - int32_t hangultype = u_getIntPropertyValue(*posChar, UCHAR_HANGUL_SYLLABLE_TYPE); - if (hangultype != U_HST_NOT_APPLICABLE) { - nPos = fCharBI->following(pos); // Advance by grapheme cluster, which - // contains the logic to locate Hangul syllables. - // Grapheme Cluster Ugliness: some Grapheme_Extend chars, which are absorbed - // into a grapheme cluster, are NOT Line Break CM. (Some are GL, for example.) - // We don't want consume any of these. The Approach is - // 1. Back nPos up, undoing the consumption of any - // Grapheme_Extend chars by the char break iterator. - // 2. Let the LB 7b logic below reconsume any Line Break CM chars. - for (;;) { - nPos = fText->moveIndex32(nPos, -1); - UChar32 possiblyExtendChar = fText->char32At(nPos); - if (fID->contains(possiblyExtendChar)) { - // We hit into the Hangul Syllable itself, class is ID. - nPos = fText->moveIndex32(nPos, +1); - break; - } - } - } - - // LB 7b Keep combining sequences together. - // advance over any CM class chars. (Line Break CM class is different from - // grapheme cluster CM, so we need to do this even for HangulSyllables. - // Line Break may eat additional stuff as combining, beyond what graphem cluster did. - if (!(fBK->contains(*posChar) || fZW->contains(*posChar) || *posChar==0x0a - || *posChar==0x0d || *posChar==0x85)) { - for (;;) { - *nextChar = fText->char32At(nPos); - if (!fCM->contains(*nextChar)) { - break; - } - nPos = fText->moveIndex32(nPos, 1); - } - } - - - // LB 7a In a SP CM* sequence, treat the SP as an ID - if (nPos != *nextPos && fSP->contains(*posChar)) { - *posChar = 0x4e00; // 0x4e00 is a CJK Ideograph, linebreak type is ID. - } - - // LB 7b Treat X CM* as if it were x. - // No explicit action required. - - // LB 7c Treat any remaining combining mark as AL - if (fCM->contains(*posChar)) { - *posChar = 0x41; // thisChar = 'A'; - } - - // Push the updated nextPos and nextChar back to our caller. - // This only makes a difference if posChar got bigger, by slurping up a - // combining sequence or Hangul syllable. - *nextPos = nPos; - *nextChar = fText->char32At(nPos); -} - - - -int32_t RBBILineMonkey::next(int32_t startPos) { - UErrorCode status = U_ZERO_ERROR; - int32_t pos; // Index of the char following a potential break position - UChar32 thisChar; // Character at above position "pos" - - int32_t prevPos; // Index of the char preceding a potential break position - UChar32 prevChar; // Character at above position. Note that prevChar - // and thisChar may not be adjacent because combining - // characters between them will be ignored. - - int32_t nextPos; // Index of the next character following pos. - // Usually skips over combining marks. - int32_t nextCPPos; // Index of the code point following "pos." - // May point to a combining mark. - int32_t tPos; // temp value. - UChar32 c; - - if (startPos >= fText->length()) { - return -1; - } - - - // Initial values for loop. Loop will run the first time without finding breaks, - // while the invalid values shift out and the "this" and - // "prev" positions are filled in with good values. - pos = prevPos = -1; // Invalid value, serves as flag for initial loop iteration. - thisChar = prevChar = 0; - nextPos = nextCPPos = startPos; - - - // Loop runs once per position in the test text, until a break position - // is found. - for (;;) { - prevPos = pos; - prevChar = thisChar; - - pos = nextPos; - thisChar = fText->char32At(pos); - - nextCPPos = fText->moveIndex32(pos, 1); - nextPos = nextCPPos; - - // Break at end of text. - if (pos >= fText->length()) { - break; - } - - // LB 3a Always break after hard line breaks, - if (fBK->contains(prevChar)) { - break; - } - - // LB 3b Break after CR, LF, NL, but not inside CR LF - if (prevChar == 0x0d && thisChar == 0x0a) { - continue; - } - if (prevChar == 0x0d || - prevChar == 0x0a || - prevChar == 0x85) { - break; - } - - // LB 3c Don't break before hard line breaks - if (thisChar == 0x0d || thisChar == 0x0a || thisChar == 0x85 || - fBK->contains(thisChar)) { - continue; - } - - // LB 10 QU SP* x OP - if (prevPos >= 0) { - UnicodeString subStr10(*fText, prevPos); - fLB10Matcher->reset(subStr10); - status = U_ZERO_ERROR; - if (fLB10Matcher->lookingAt(status)) { // /QU CM* SP* (OP) CM*/; - // TODO: Check status codes - pos = prevPos + fLB10Matcher->start(1, status); - nextPos = prevPos + fLB10Matcher->end(0, status); - thisChar = fText->char32At(pos); - continue; - } - } - - // LB 11 CL SP* x NS - if (prevPos >= 0) { - UnicodeString subStr11(*fText, prevPos); - fLB11Matcher->reset(subStr11); - status = U_ZERO_ERROR; - if (fLB11Matcher->lookingAt(status)) { // /QU CM* SP* (OP) CM*/; - // TODO: Check status codes - pos = prevPos + fLB11Matcher->start(1, status); - nextPos = prevPos + fLB11Matcher->end(0, status); - thisChar = fText->char32At(pos); - continue; - } - } - - // LB 4 Don't break before spaces or zero-width space. - if (fSP->contains(thisChar)) { - continue; - } - - if (fZW->contains(thisChar)) { - continue; - } - - // LB 5 Break after zero width space - if (fZW->contains(prevChar)) { - break; - } - - // LB 6, LB 7 - /*int32_t oldpos = pos;*/ - rule67Adjust(prevPos, &prevChar, &pos, &thisChar); - - nextCPPos = fText->moveIndex32(pos, 1); - nextPos = nextCPPos; - c = fText->char32At(nextPos); - // another percularity of LB 4 - Dont break before space - if (fSP->contains(thisChar)) { - continue; - } - rule67Adjust(pos, &thisChar, &nextPos, &c); - - // If the loop is still warming up - if we haven't shifted the initial - // -1 positions out of prevPos yet - loop back to advance the - // position in the input without any further looking for breaks. - if (prevPos == -1) { - continue; - } - - // Re-apply rules 3c, 4 because these could be affected by having - // a new thisChar from doing rule 6 or 7. - if (thisChar == 0x0d || thisChar == 0x0a || thisChar == 0x85 || // 3c - fBK->contains(thisChar)) { - continue; - } - if (fSP->contains(thisChar)) { // LB 4 - continue; - } - if (fZW->contains(thisChar)) { // LB 4 - continue; - } - - - // LB 8 Don't break before closings. - // NU x CL and NU x IS are not matched here so that they will - // fall into LB 17 and the more general number regular expression. - // - if (!fNU->contains(prevChar) && fCL->contains(thisChar) || - fEX->contains(thisChar) || - !fNU->contains(prevChar) && fIS->contains(thisChar) || - !fNU->contains(prevChar) && fSY->contains(thisChar)) { - continue; - } - - // LB 9 Don't break after OP SP* - // Scan backwards, checking for this sequence. - // The OP char could include combining marks, so we acually check for - // OP CM* SP* - // Another Twist: The Rule 67 fixes may have changed a CP CM - // sequence into a ID char, so before scanning back through spaces, - // verify that prevChar is indeed a space. The prevChar variable - // may differ from fText[prevPos] - tPos = prevPos; - if (fSP->contains(prevChar)) { - while (tPos > 0 && fSP->contains(fText->char32At(tPos))) { - tPos=fText->moveIndex32(tPos, -1); - } - } - while (tPos > 0 && fCM->contains(fText->char32At(tPos))) { - tPos=fText->moveIndex32(tPos, -1); - } - if (fOP->contains(fText->char32At(tPos))) { - continue; - } - - - // LB 11a B2 x B2 - if (fB2->contains(thisChar) && fB2->contains(prevChar)) { - continue; - } - - // LB 11b - // x GL - // GL x - if (fGL->contains(thisChar) || fGL->contains(prevChar)) { - continue; - } - if (fWJ->contains(thisChar) || fWJ->contains(prevChar)) { - continue; - } - - // LB 12 break after space - if (fSP->contains(prevChar)) { - break; - } - - // LB 14 - // x QU - // QU x - if (fQU->contains(thisChar) || fQU->contains(prevChar)) { - continue; - } - - // LB 14a Break around a CB - if (fCB->contains(thisChar) || fCB->contains(prevChar)) { - break; - } - - // LB 15 - if (fBA->contains(thisChar) || - fHY->contains(thisChar) || - fNS->contains(thisChar) || - fBB->contains(prevChar) ) { - continue; - } - - // LB 16 - if (fAL->contains(prevChar) && fIN->contains(thisChar) || - fID->contains(prevChar) && fIN->contains(thisChar) || - fIN->contains(prevChar) && fIN->contains(thisChar) || - fNU->contains(prevChar) && fIN->contains(thisChar) ) { - continue; - } - - - // LB 17 ID x PO (Note: Leading CM behaves like ID) - // AL x NU - // NU x AL - if (fID->contains(prevChar) && fPO->contains(thisChar) || - fCM->contains(prevChar) && fPO->contains(thisChar) || - fAL->contains(prevChar) && fNU->contains(thisChar) || - fNU->contains(prevChar) && fAL->contains(thisChar) ) { - continue; - } - - // LB 18 Numbers - UnicodeString subStr18(*fText, prevPos); - fNumberMatcher->reset(subStr18); - if (fNumberMatcher->lookingAt(status)) { - // TODO: Check status codes - // Matched a number. But could have been just a single digit, which would - // not represent a "no break here" between prevChar and thisChar - int32_t numEndIdx = prevPos + fNumberMatcher->end(status); // idx of first char following num - if (numEndIdx > pos) { - // Number match includes at least our two chars being checked - if (numEndIdx > nextPos) { - // Number match includes additional chars. Update pos and nextPos - // so that next loop iteration will continue at the end of the number, - // checking for breaks between last char in number & whatever follows. - nextPos = numEndIdx; - pos = fCharBI->preceding(numEndIdx); - thisChar = fText->char32At(pos); - while (fCM->contains(thisChar)) { - pos = fCharBI->preceding(pos); - thisChar = fText->char32At(pos); - } - } - continue; - } - } - - if (fPR->contains(prevChar) && fAL->contains(thisChar)) { - continue; - } - - if (fPR->contains(prevChar) && fID->contains(thisChar)) { - continue; - } - - // LB 18b - if (fHY->contains(prevChar) || fBB->contains(thisChar)) { - break; - } - - // LB 19 - if (fAL->contains(prevChar) && fAL->contains(thisChar)) { - continue; - } - - // LB 19b - if (fIS->contains(prevChar) && fAL->contains(thisChar)) { - continue; - } - - // LB 20 Break everywhere else - break; - - } - - return pos; -} - - -UVector *RBBILineMonkey::charClasses() { - return fSets; -} - - -RBBILineMonkey::~RBBILineMonkey() { - delete fSets; - - delete fBK; - delete fCR; - delete fLF; - delete fCM; - delete fNL; - delete fWJ; - delete fZW; - delete fGL; - delete fCB; - delete fSP; - delete fB2; - delete fBA; - delete fBB; - delete fHY; - delete fCL; - delete fEX; - delete fIN; - delete fNS; - delete fOP; - delete fQU; - delete fIS; - delete fNU; - delete fPO; - delete fPR; - delete fSY; - delete fAI; - delete fAL; - delete fID; - delete fSA; - delete fXX; - - delete fCharBI; - delete fNumberMatcher; - delete fLB10Matcher; - delete fLB11Matcher; -} - - -//------------------------------------------------------------------------------------------- -// -// TestMonkey -// -// params -// seed=nnnnn Random number starting seed. -// Setting the seed allows errors to be reproduced. -// loop=nnn Looping count. Controls running time. -// -1: run forever. -// 0 or greater: run length. -// -// type = char | word | line | sent | title -// -//------------------------------------------------------------------------------------------- - -static int32_t getIntParam(UnicodeString name, UnicodeString ¶ms, int32_t defaultVal) { - int32_t val = defaultVal; - name.append(" *= *(-?\\d+)"); - UErrorCode status = U_ZERO_ERROR; - RegexMatcher m(name, params, 0, status); - if (m.find()) { - // The param exists. Convert the string to an int. - char valString[100]; - int32_t paramLength = m.end(1, status) - m.start(1, status); - if (paramLength >= (int32_t)(sizeof(valString)-1)) { - paramLength = (int32_t)(sizeof(valString)-2); - } - params.extract(m.start(1, status), paramLength, valString, sizeof(valString)); - val = strtol(valString, NULL, 10); - - // Delete this parameter from the params string. - m.reset(); - params = m.replaceFirst("", status); - } - U_ASSERT(U_SUCCESS(status)); - return val; -} -#endif - -static void testBreakBoundPreceding(RBBITest *test, UnicodeString ustr, - BreakIterator *bi, - int expected[], - int expectedcount) -{ - int count = 0; - int i = 0; - int forward[50]; - bi->setText(ustr); - for (i = bi->first(); i != BreakIterator::DONE; i = bi->next()) { - forward[count] = i; - if (count < expectedcount && expected[count] != i) { - test->errln("break forward test failed: expected %d but got %d", - expected[count], i); - break; - } - count ++; - } - if (count != expectedcount) { - printStringBreaks(ustr, expected, expectedcount); - test->errln("break test failed: missed %d match", - expectedcount - count); - return; - } - // testing boundaries - for (i = 1; i < expectedcount; i ++) { - int j = expected[i - 1]; - if (!bi->isBoundary(j)) { - printStringBreaks(ustr, expected, expectedcount); - test->errln("Expected boundary at position %d", j); - return; - } - for (j = expected[i - 1] + 1; j < expected[i]; j ++) { - if (bi->isBoundary(j)) { - printStringBreaks(ustr, expected, expectedcount); - test->errln("Not expecting boundary at position %d", j); - return; - } - } - } - - for (i = bi->last(); i != BreakIterator::DONE; i = bi->previous()) { - count --; - if (forward[count] != i) { - test->errln("happy break test reverse failed: expected %d but got %d", - forward[count], i); - break; - } - } - if (count != 0) { - printStringBreaks(ustr, expected, expectedcount); - test->errln("happy break test failed: missed a match"); - return; - } - - // testing preceding - for (i = 0; i < expectedcount - 1; i ++) { - int j = expected[i] + 1; - for (; j <= expected[i + 1]; j ++) { - if (bi->preceding(j) != expected[i]) { - printStringBreaks(ustr, expected, expectedcount); - test->errln("Not expecting backwards boundary at position %d", j); - return; - } - } - } -} - -void RBBITest::TestWordBreaks(void) -{ -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - - // <data><>\u1d4a\u206e<?>\u0603\U0001d7ff<>\u2019<></data> - Locale locale("en"); - UErrorCode status = U_ZERO_ERROR; - // BreakIterator *bi = BreakIterator::createCharacterInstance(locale, status); - BreakIterator *bi = BreakIterator::createWordInstance(locale, status); - UChar str[300]; - static const char *strlist[] = - { - "\\U000e0032\\u0097\\u0f94\\uc2d8\\u05f4\\U000e0031\\u060d", - "\\U000e0037\\u4666\\u1202\\u003a\\U000e0031\\u064d\\u0bea\\u591c\\U000e0040\\u003b", - "\\u0589\\u3e99\\U0001d7f3\\U000e0074\\u1810\\u200e\\U000e004b\\u179c\\u0027\\U000e0061\\u003a", - "\\u398c\\U000104a5\\U0001d173\\u102d\\u002e\\uca3b\\u002e\\u002c\\u5622", - "\\u90ca\\u3588\\u009c\\u0953\\u194b", - "\\u200e\\U000e0072\\u0a4b\\U000e003f\\ufd2b\\u2027\\u002e\\u002e", - "\\u0602\\u2019\\ua191\\U000e0063\\u0a4c\\u003a\\ub4b5\\u003a\\u827f\\u002e", - "\\u7f1f\\uc634\\u65f8\\u0944\\u04f2\\uacdf\\u1f9c\\u05f4\\u002e", - "\\U000e0042\\u002e\\u0fb8\\u09ef\\u0ed1\\u2044", - "\\u003b\\u024a\\u102e\\U000e0071\\u0600", - "\\u2027\\U000e0067\\u0a47\\u00b7", - "\\u1fcd\\u002c\\u07aa\\u0027\\u11b0", - "\\u002c\\U000e003c\\U0001d7f4\\u003a\\u0c6f\\u0027", - "\\u0589\\U000e006e\\u0a42\\U000104a5", - "\\u4f66\\ub523\\u003a\\uacae\\U000e0047\\u003a", - "\\u003a\\u0f21\\u0668\\u0dab\\u003a\\u0655\\u00b7", - "\\u0027\\u11af\\U000e0057\\u0602", - "\\U0001d7f2\\U000e007\\u0004\\u0589", - "\\U000e0022\\u003a\\u10b3\\u003a\\ua21b\\u002e\\U000e0058\\u1732\\U000e002b", - "\\U0001d7f2\\U000e007d\\u0004\\u0589", - "\\u82ab\\u17e8\\u0736\\u2019\\U0001d64d", - "\\u0e01\\ub55c\\u0a68\\U000e0037\\u0cd6\\u002c\\ub959", - "\\U000e0065\\u302c\\uc986\\u09ee\\U000e0068", - "\\u0be8\\u002e\\u0c68\\u066e\\u136d\\ufc99\\u59e7", - "\\u0233\\U000e0020\\u0a69\\u0d6a", - "\\u206f\\u0741\\ub3ab\\u2019\\ubcac\\u2019", - "\\u58f4\\U000e0049\\u20e7\\u2027", - "\\ub315\\U0001d7e5\\U000e0073\\u0c47\\u06f2\\u0c6a\\u0037\\u10fe", - "\\ua183\\u102d\\u0bec\\u003a", - "\\u17e8\\u06e7\\u002e\\u096d\\u003b", - "\\u003a\\u0e57\\u0fad\\u002e", - "\\u002e\\U000e004c\\U0001d7ea\\u05bb\\ud0fd\\u02de", - "\\u32e6\\U0001d7f6\\u0fa1\\u206a\\U000e003c\\u0cec\\u003a", - "\\U000e005d\\u2044\\u0731\\u0650\\u0061", - "\\u003a\\u0664\\u00b7\\u1fba", - "\\u003b\\u0027\\u00b7\\u47a3", - "\\u2027\\U000e0067\\u0a42\\u00b7\\ubddf\\uc26c\\u003a\\u4186\\u041b", - "\\u0027\\u003a\\U0001d70f\\U0001d7df\\ubf4a\\U0001d7f5\\U0001d177\\u003a\\u0e51\\u1058\\U000e0058\\u00b7\\u0673", - "\\uc30d\\u002e\\U000e002c\\u0c48\\u003a\\ub5a1\\u0661\\u002c", - }; - int loop; - if (U_FAILURE(status)) { - errln("Creation of break iterator failed %s", u_errorName(status)); - return; - } - for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { - // printf("looping %d\n", loop); - u_unescape(strlist[loop], str, 25); - UnicodeString ustr(str); - // RBBICharMonkey monkey; - RBBIWordMonkey monkey; - - int expected[50]; - int expectedcount = 0; - - monkey.setText(ustr); - int i; - for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) { - expected[expectedcount ++] = i; - } - - testBreakBoundPreceding(this, ustr, bi, expected, expectedcount); - } - delete bi; -#endif -} - -void RBBITest::TestWordBoundary(void) -{ - // <data><>\u1d4a\u206e<?>\u0603\U0001d7ff<>\u2019<></data> - Locale locale("en"); - UErrorCode status = U_ZERO_ERROR; - // BreakIterator *bi = BreakIterator::createCharacterInstance(locale, status); - BreakIterator *bi = BreakIterator::createWordInstance(locale, status); - UChar str[50]; - static const char *strlist[] = - { - "\\u200e\\U000e0072\\u0a4b\\U000e003f\\ufd2b\\u2027\\u002e\\u002e", - "\\U000e0042\\u002e\\u0fb8\\u09ef\\u0ed1\\u2044", - "\\u003b\\u024a\\u102e\\U000e0071\\u0600", - "\\u2027\\U000e0067\\u0a47\\u00b7", - "\\u1fcd\\u002c\\u07aa\\u0027\\u11b0", - "\\u002c\\U000e003c\\U0001d7f4\\u003a\\u0c6f\\u0027", - "\\u0589\\U000e006e\\u0a42\\U000104a5", - "\\u4f66\\ub523\\u003a\\uacae\\U000e0047\\u003a", - "\\u003a\\u0f21\\u0668\\u0dab\\u003a\\u0655\\u00b7", - "\\u0027\\u11af\\U000e0057\\u0602", - "\\U0001d7f2\\U000e007\\u0004\\u0589", - "\\U000e0022\\u003a\\u10b3\\u003a\\ua21b\\u002e\\U000e0058\\u1732\\U000e002b", - "\\U0001d7f2\\U000e007d\\u0004\\u0589", - "\\u82ab\\u17e8\\u0736\\u2019\\U0001d64d", - "\\u0e01\\ub55c\\u0a68\\U000e0037\\u0cd6\\u002c\\ub959", - "\\U000e0065\\u302c\\uc986\\u09ee\\U000e0068", - "\\u0be8\\u002e\\u0c68\\u066e\\u136d\\ufc99\\u59e7", - "\\u0233\\U000e0020\\u0a69\\u0d6a", - "\\u206f\\u0741\\ub3ab\\u2019\\ubcac\\u2019", - "\\u58f4\\U000e0049\\u20e7\\u2027", - "\\ub315\\U0001d7e5\\U000e0073\\u0c47\\u06f2\\u0c6a\\u0037\\u10fe", - "\\ua183\\u102d\\u0bec\\u003a", - "\\u17e8\\u06e7\\u002e\\u096d\\u003b", - "\\u003a\\u0e57\\u0fad\\u002e", - "\\u002e\\U000e004c\\U0001d7ea\\u05bb\\ud0fd\\u02de", - "\\u32e6\\U0001d7f6\\u0fa1\\u206a\\U000e003c\\u0cec\\u003a", - "\\ua2a5\\u0038\\u2044\\u002e\\u0c67\\U000e003c\\u05f4\\u2027\\u05f4\\u2019", - "\\u003a\\u0664\\u00b7\\u1fba", - "\\u003b\\u0027\\u00b7\\u47a3", - }; - int loop; - if (U_FAILURE(status)) { - errln("Creation of break iterator failed %s", u_errorName(status)); - return; - } - for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { - // printf("looping %d\n", loop); - u_unescape(strlist[loop], str, 20); - UnicodeString ustr(str); - int forward[50]; - int count = 0; - - bi->setText(ustr); - int prev = 0; - int i; - for (i = bi->first(); i != BreakIterator::DONE; i = bi->next()) { - forward[count ++] = i; - if (i > prev) { - int j; - for (j = prev + 1; j < i; j ++) { - if (bi->isBoundary(j)) { - printStringBreaks(ustr, forward, count); - errln("happy boundary test failed: expected %d not a boundary", - j); - return; - } - } - } - if (!bi->isBoundary(i)) { - printStringBreaks(ustr, forward, count); - errln("happy boundary test failed: expected %d a boundary", - i); - return; - } - prev = i; - } - } - delete bi; -} - -void RBBITest::TestLineBreaks(void) -{ -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - Locale locale("en"); - UErrorCode status = U_ZERO_ERROR; - BreakIterator *bi = BreakIterator::createLineInstance(locale, status); - UChar str[50]; - static const char *strlist[] = - { - "\\u0668\\u192b\\u002f\\u2034\\ufe39\\u00b4\\u0cc8\\u2571\\u200b\\u003f", - "\\ufeff\\ufffc\\u3289\\u0085\\u2772\\u0020\\U000e010a\\u0020\\u2025\\u000a\\U000e0123", - "\\ufe3c\\u201c\\u000d\\u2025\\u2007\\u201c\\u002d\\u20a0\\u002d\\u30a7\\u17a4", - "\\u2772\\u0020\\U000e010a\\u0020\\u2025\\u000a\\U000e0123", - "\\u002d\\uff1b\\u02c8\\u2029\\ufeff\\u0f22\\u2044\\ufe09\\u003a\\u096d\\u2009\\u000a\\u06f7\\u02cc\\u1019\\u2060", - "\\u1781\\u0b68\\u0f0c\\u3010\\u0085\\U00011f7a\\u0020\\u0dd6\\u200b\\U000e007a\\u000a\\u2060\\u2026\\u002f\\u2026\\u24dc\\u101e\\u2014\\u2007\\u30a5", - "\\u2770\\u0020\\U000e010f\\u0020\\u2060\\u000a\\u02cc\\u0bcc\\u060d\\u30e7\\u0f3b\\u002f", - "\\ufeff\\u0028\\u003b\\U00012fec\\u2010\\u0020\\u0004\\u200b\\u0020\\u275c\\u002f\\u17b1", - "\\u20a9\\u2014\\u00a2\\u31f1\\u002f\\u0020\\u05b8\\u200b\\u0cc2\\u003b\\u060d\\u02c8\\ua4e8\\u002f\\u17d5", - "\\u002d\\u136f\\uff63\\u0084\\ua933\\u2028\\u002d\\u431b\\u200b\\u20b0", - "\\uade3\\u11d6\\u000a\\U0001107d\\u203a\\u201d\\ub070\\u000d\\u2024\\ufffc", - "\\uff5b\\u101c\\u1806\\u002f\\u2213\\uff5f", - "\\u2014\\u0a83\\ufdfc\\u003f\\u00a0\\u0020\\u000a\\u2991\\U0001d179\\u0020\\u201d\\U000125f6\\u0a67\\u20a7\\ufeff\\u043f", - "\\u169b\\U000e0130\\u002d\\u1041\\u0f3d\\u0abf\\u00b0\\u31fb\\u00a0\\u002d\\u02c8\\u003b", - "\\u2762\\u1680\\u002d\\u2028\\u0027\\u01dc\\ufe56\\u003a\\u000a\\uffe6\\u29fd\\u0020\\u30ee\\u007c\\U0001d178\\u0af1\\u0085", - "\\u3010\\u200b\\u2029\\ufeff\\ufe6a\\u275b\\U000e013b\\ufe37\\u24d4\\u002d\\u1806\\u256a\\u1806\\u247c\\u0085\\u17ac", - "\\u99ab\\u0027\\u003b\\u2026\\ueaf0\\u0020\\u0020\\u0313\\u0020\\u3099\\uff09\\u208e\\u2011\\u2007\\u2060\\u000a\\u0020\\u0020\\u300b\\u0bf9", - "\\u1806\\u060d\\u30f5\\u00b4\\u17e9\\u2544\\u2028\\u2024\\u2011\\u20a3\\u002d\\u09cc\\u1782\\u000d\\uff6f\\u0025", - "\\u002f\\uf22e\\u1944\\ufe3d\\u0020\\u206f\\u31b3\\u2014\\u002d\\u2025\\u0f0c\\u0085\\u2763", - "\\u002f\\u2563\\u202f\\u0085\\u17d5\\u200b\\u0020\\U000e0043\\u2014\\u058a\\u3d0a\\ufe57\\u2035\\u2028\\u2029", - "\\u20ae\\U0001d169\\u9293\\uff1f\\uff1f\\u0021\\u2012\\u2039\\u0085\\u02cc\\u00a2\\u0020\\U000e01ab\\u3085\\u0f3a\\u1806\\u0f0c\\u1945\\u000a\\U0001d7e7", - "\\uffe6\\u00a0\\u200b\\u0085\\u2116\\u255b\\U0001d7f7\\u178c\\ufffc", - "\\u02cc\\ufe6a\\u00a0\\u0021\\u002d\\u7490\\uec2e\\u200b\\u000a", - "\\uec2e\\u200b\\u000a\\u0020\\u2028\\u2014\\u8945", - "\\u7490\\uec2e\\u200b\\u000a\\u0020\\u2028\\u2014", - "\\u0020\\u2028\\u2014\\u8945\\u002c\\u005b", - "\\u000a\\ufe3c\\u201c\\u000d\\u2025\\u2007\\u201c\\u002d\\u20a0", - "\\u2473\\u0e9d\\u0020\\u0085\\u000a\\ufe3c\\u201c\\u000d\\u2025", - "\\U0001d16e\\ufffc\\u2025\\u0021\\u002d", - "\\ufffc\\u301b\\u0fa5\\U000e0103\\u2060\\u208e\\u17d5\\u034f\\u1009\\u003a\\u180e\\u2009\\u3111", - "\\u2014\\u0020\\u000a\\u17c5\\u24fc", - "\\ufffc\\u0020\\u2116\\uff6c\\u200b\\u0ac3\\U0001028f", - "\\uaeb0\\u0344\\u0085\\ufffc\\u073b\\u2010", - "\\ufeff\\u0589\\u0085\\u0eb8\\u30fd\\u002f\\u003a\\u2014\\ufe43", - "\\u09cc\\u256a\\u276d\\u002d\\u3085\\u000d\\u0e05\\u2028\\u0fbb", - "\\u2034\\u00bb\\u0ae6\\u300c\\u0020\\u31f8\\ufffc", - "\\u2116\\u0ed2\\uff64\\u02cd\\u2001\\u2060", - }; - int loop; - if (U_FAILURE(status)) { - errln("Creation of break iterator failed %s", u_errorName(status)); - return; - } - for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { - // printf("looping %d\n", loop); - u_unescape(strlist[loop], str, 20); - UnicodeString ustr(str); - RBBILineMonkey monkey; - - int expected[50]; - int expectedcount = 0; - - monkey.setText(ustr); - int i; - for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) { - expected[expectedcount ++] = i; - } - - testBreakBoundPreceding(this, ustr, bi, expected, expectedcount); - } - delete bi; -#endif -} - -void RBBITest::TestSentBreaks(void) -{ - Locale locale("en"); - UErrorCode status = U_ZERO_ERROR; - BreakIterator *bi = BreakIterator::createSentenceInstance(locale, status); - UChar str[100]; - static const char *strlist[] = - { - "Now\ris\nthe\r\ntime\n\rfor\r\r", - "This\n", - "Hello! how are you? I'am fine. Thankyou. How are you doing? This\n costs $20,00,000.", - "\"Sentence ending with a quote.\" Bye.", - " (This is it). Testing the sentence iterator. \"This isn't it.\"", - "Hi! This is a simple sample sentence. (This is it.) This is a simple sample sentence. \"This isn't it.\"", - "Hi! This is a simple sample sentence. It does not have to make any sense as you can see. ", - "Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. ", - "Che la dritta via aveo smarrita. He said, that I said, that you said!! ", - "Don't rock the boat.\\u2029Because I am the daddy, that is why. Not on my time (el timo.)!", - }; - int loop; - int forward[100]; - if (U_FAILURE(status)) { - errln("Creation of break iterator failed %s", u_errorName(status)); - return; - } - for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { - u_unescape(strlist[loop], str, 100); - UnicodeString ustr(str); - - int count = 0; - bi->setText(ustr); - int i; - for (i = bi->first(); i != BreakIterator::DONE; i = bi->next()) { - forward[count ++] = i; - } - testBreakBoundPreceding(this, ustr, bi, forward, count); - } - delete bi; -} - -void RBBITest::TestMonkey(char *params) { -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - - UErrorCode status = U_ZERO_ERROR; - int32_t loopCount = 500; - int32_t seed = 1; - UnicodeString breakType = "all"; - Locale locale("en"); - - if (quick == FALSE) { - loopCount = 10000; - } - - if (params) { - UnicodeString p(params); - loopCount = getIntParam("loop", p, loopCount); - seed = getIntParam("seed", p, seed); - - RegexMatcher m(" *type *= *(char|word|line|sent|title) *", p, 0, status); - if (m.find()) { - breakType = m.group(1, status); - m.reset(); - p = m.replaceFirst("", status); - } - - m.reset(p); - if (RegexMatcher("\\S", p, 0, status).find()) { - // Each option is stripped out of the option string as it is processed. - // All options have been checked. The option string should have been completely emptied.. - char buf[100]; - p.extract(buf, sizeof(buf), NULL, status); - buf[sizeof(buf)-1] = 0; - errln("Unrecognized or extra parameter: %s\n", buf); - return; - } - - } - - if (breakType == "char" || breakType == "all") { - RBBICharMonkey m; - BreakIterator *bi = BreakIterator::createCharacterInstance(locale, status); - if (U_SUCCESS(status)) { - RunMonkey(bi, m, "char", seed, loopCount); - } - else { - errln("Creation of character break iterator failed %s", u_errorName(status)); - } - delete bi; - } - - if (breakType == "word" || breakType == "all") { - logln("Word Break Monkey Test"); - RBBIWordMonkey m; - BreakIterator *bi = BreakIterator::createWordInstance(locale, status); - if (U_SUCCESS(status)) { - RunMonkey(bi, m, "word", seed, loopCount); - } - else { - errln("Creation of word break iterator failed %s", u_errorName(status)); - } - delete bi; - } - - if (breakType == "line" || breakType == "all") { - logln("Line Break Monkey Test"); - RBBILineMonkey m; - BreakIterator *bi = BreakIterator::createLineInstance(locale, status); - if (params == NULL) { - loopCount = 50; - } - if (U_SUCCESS(status)) { - RunMonkey(bi, m, "line", seed, loopCount); - } - else { - errln("Creation of line break iterator failed %s", u_errorName(status)); - } - delete bi; - } - - -#endif -} - -// -// Run a RBBI monkey test. Common routine, for all break iterator types. -// Parameters: -// bi - the break iterator to use -// mk - MonkeyKind, abstraction for obtaining expected results -// name - Name of test (char, word, etc.) for use in error messages -// seed - Seed for starting random number generator (parameter from user) -// numIterations -// -void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t seed, int32_t numIterations) { - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - - const int32_t TESTSTRINGLEN = 500; - UnicodeString testText; - int32_t numCharClasses; - UVector *chClasses; - int expected[TESTSTRINGLEN*2 + 1]; - int expectedCount = 0; - char expectedBreaks[TESTSTRINGLEN*2 + 1]; - char forwardBreaks[TESTSTRINGLEN*2 + 1]; - char reverseBreaks[TESTSTRINGLEN*2+1]; - char isBoundaryBreaks[TESTSTRINGLEN*2+1]; - char followingBreaks[TESTSTRINGLEN*2+1]; - char precedingBreaks[TESTSTRINGLEN*2+1]; - int i; - int loopCount = 0; - - m_seed = seed; - - numCharClasses = mk.charClasses()->size(); - chClasses = mk.charClasses(); - - // Check for errors that occured during the construction of the MonkeyKind object. - // Can't report them where they occured because errln() is a method coming from intlTest, - // and is not visible outside of RBBITest :-( - if (U_FAILURE(mk.deferredStatus)) { - errln("status of \"%s\" in creation of RBBIMonkeyKind.", u_errorName(mk.deferredStatus)); - return; - } - - // Verify that the character classes all have at least one member. - for (i=0; i<numCharClasses; i++) { - UnicodeSet *s = (UnicodeSet *)chClasses->elementAt(i); - if (s == NULL || s->size() == 0) { - errln("Character Class #%d is null or of zero size.", i); - return; - } - } - - while (loopCount < numIterations || numIterations == -1) { - if (numIterations == -1 && loopCount % 10 == 0) { - // If test is running in an infinite loop, display a periodic tic so - // we can tell that it is making progress. - fprintf(stderr, "."); - } - // Save current random number seed, so that we can recreate the random numbers - // for this loop iteration in event of an error. - seed = m_seed; - - // Populate a test string with data. - testText.truncate(0); - for (i=0; i<TESTSTRINGLEN; i++) { - int32_t aClassNum = m_rand() % numCharClasses; - UnicodeSet *classSet = (UnicodeSet *)chClasses->elementAt(aClassNum); - int32_t charIdx = m_rand() % classSet->size(); - UChar32 c = classSet->charAt(charIdx); - if (c < 0) { // TODO: deal with sets containing strings. - errln("c < 0"); - } - testText.append(c); - } - - // Calculate the expected results for this test string. - mk.setText(testText); - memset(expectedBreaks, 0, sizeof(expectedBreaks)); - expectedBreaks[0] = 1; - int32_t breakPos = 0; - expectedCount = 0; - for (;;) { - breakPos = mk.next(breakPos); - if (breakPos == -1) { - break; - } - if (breakPos > testText.length()) { - errln("breakPos > testText.length()"); - } - expectedBreaks[breakPos] = 1; - expected[expectedCount ++] = breakPos; - } - - // Find the break positions using forward iteration - memset(forwardBreaks, 0, sizeof(forwardBreaks)); - bi->setText(testText); - for (i=bi->first(); i != BreakIterator::DONE; i=bi->next()) { - if (i < 0 || i > testText.length()) { - errln("%s break monkey test: Out of range value returned by breakIterator::next()", name); - break; - } - forwardBreaks[i] = 1; - } - - // Find the break positions using reverse iteration - memset(reverseBreaks, 0, sizeof(reverseBreaks)); - for (i=bi->last(); i != BreakIterator::DONE; i=bi->previous()) { - if (i < 0 || i > testText.length()) { - errln("%s break monkey test: Out of range value returned by breakIterator::next()", name); - break; - } - reverseBreaks[i] = 1; - } - - // Find the break positions using isBoundary() tests. - memset(isBoundaryBreaks, 0, sizeof(isBoundaryBreaks)); - U_ASSERT(sizeof(isBoundaryBreaks) > testText.length()); - for (i=0; i<=testText.length(); i++) { - isBoundaryBreaks[i] = bi->isBoundary(i); - } - - - // Find the break positions using the following() function. - // printf("."); - memset(followingBreaks, 0, sizeof(followingBreaks)); - int32_t lastBreakPos = 0; - followingBreaks[0] = 1; - for (i=0; i<testText.length(); i++) { - breakPos = bi->following(i); - if (breakPos <= i || - breakPos < lastBreakPos || - breakPos > testText.length() || - breakPos > lastBreakPos && lastBreakPos > i ) { - errln("%s break monkey test: " - "Out of range value returned by BreakIterator::following().\n" - "Random seed=%d", name, seed); - break; - } - followingBreaks[breakPos] = 1; - lastBreakPos = breakPos; - } - - // Find the break positions using the preceding() function. - memset(precedingBreaks, 0, sizeof(followingBreaks)); - lastBreakPos = testText.length(); - precedingBreaks[testText.length()] = 1; - for (i=testText.length(); i>0; i--) { - breakPos = bi->preceding(i); - if (breakPos >= i || - breakPos > lastBreakPos || - breakPos < 0 || - breakPos < lastBreakPos && lastBreakPos < i ) { - errln("%s break monkey test: " - "Out of range value returned by BreakIterator::preceding().\n" - "index=%d; prev returned %d; lastBreak=%d" , - name, i, breakPos, lastBreakPos); - precedingBreaks[i] = 2; // Forces an error. - } else { - precedingBreaks[breakPos] = 1; - lastBreakPos = breakPos; - } - } - - // Compare the expected and actual results. - for (i=0; i<=testText.length(); i++) { - const char *errorType = NULL; - if (forwardBreaks[i] != expectedBreaks[i]) { - errorType = "next()"; - } else if (reverseBreaks[i] != forwardBreaks[i]) { - errorType = "previous()"; - } else if (isBoundaryBreaks[i] != expectedBreaks[i]) { - errorType = "isBoundary()"; - } else if (followingBreaks[i] != expectedBreaks[i]) { - errorType = "following()"; - } else if (precedingBreaks[i] != expectedBreaks[i]) { - errorType = "preceding()"; - } - - - if (errorType != NULL) { - // Format a range of the test text that includes the failure as - // a data item that can be included in the rbbi test data file. - - // Start of the range is the last point where expected and actual results - // both agreed that there was a break position. - int startContext = i; - int32_t count = 0; - for (;;) { - if (startContext==0) { break; } - startContext --; - if (expectedBreaks[startContext] != 0) { - if (count == 2) break; - count ++; - } - } - - // End of range is two expected breaks past the start position. - int endContext = i + 1; - int ci; - for (ci=0; ci<2; ci++) { // Number of items to include in error text. - for (;;) { - if (endContext >= testText.length()) {break;} - if (expectedBreaks[endContext-1] != 0) { - if (count == 0) break; - count --; - } - endContext ++; - } - } - - // Format looks like "<data><>\uabcd\uabcd<>\U0001abcd...</data>" - UnicodeString errorText = "<data>"; - /***if (strcmp(errorType, "next()") == 0) { - startContext = 0; - endContext = testText.length(); - - printStringBreaks(testText, expected, expectedCount); - }***/ - - for (ci=startContext; ci<endContext;) { - UnicodeString hexChars("0123456789abcdef"); - UChar32 c; - int bn; - c = testText.char32At(ci); - if (ci == i) { - // This is the location of the error. - errorText.append("<?>"); - } else if (expectedBreaks[ci] != 0) { - // This a non-error expected break position. - errorText.append("<>"); - } - if (c < 0x10000) { - errorText.append("\\u"); - for (bn=12; bn>=0; bn-=4) { - errorText.append(hexChars.charAt((c>>bn)&0xf)); - } - } else { - errorText.append("\\U"); - for (bn=28; bn>=0; bn-=4) { - errorText.append(hexChars.charAt((c>>bn)&0xf)); - } - } - ci = testText.moveIndex32(ci, 1); - } - errorText.append("<>"); - errorText.append("</data>\n"); - - // Output the error - char charErrorTxt[500]; - UErrorCode status = U_ZERO_ERROR; - errorText.extract(charErrorTxt, sizeof(charErrorTxt), NULL, status); - charErrorTxt[sizeof(charErrorTxt)-1] = 0; - errln("%s break monkey test error. %s. Operation = %s; Random seed = %d; buf Idx = %d\n%s", - name, (expectedBreaks[i]? "break expected but not found" : "break found but not expected"), - errorType, seed, i, charErrorTxt); - break; - } - } - - loopCount++; - } -#endif -} - - -#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 1999-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ +/************************************************************************ +* Date Name Description +* 12/15/99 Madhu Creation. +* 01/12/2000 Madhu Updated for changed API and added new tests +************************************************************************/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/utypes.h" +#include "unicode/brkiter.h" +#include "unicode/rbbi.h" +#include "unicode/uchar.h" +#include "unicode/utf16.h" +#include "unicode/ucnv.h" +#include "unicode/schriter.h" +#include "unicode/uniset.h" +#include "unicode/regex.h" // TODO: make conditional on regexp being built. +#include "unicode/ustring.h" +#include "unicode/utext.h" +#include "intltest.h" +#include "rbbitst.h" +#include <string.h> +#include "uvector.h" +#include "uvectr32.h" +#include "triedict.h" +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#define TEST_ASSERT(x) {if (!(x)) { \ + errln("Failure in file %s, line %d", __FILE__, __LINE__);}} + +#define TEST_ASSERT_SUCCESS(errcode) {if (U_FAILURE(errcode)) { \ + errln("Failure in file %s, line %d, status = \"%s\"", __FILE__, __LINE__, u_errorName(errcode));}} + + +//--------------------------------------------------------------------------- +// +// class BITestData Holds a set of Break iterator test data and results +// Includes +// - the string data to be broken +// - a vector of the expected break positions. +// - a vector of source line numbers for the data, +// (to help see where errors occured.) +// - The expected break tag values. +// - Vectors of actual break positions and tag values. +// - Functions for comparing actual with expected and +// reporting errors. +// +//---------------------------------------------------------------------------- +class BITestData { +public: + UnicodeString fDataToBreak; + UVector fExpectedBreakPositions; + UVector fExpectedTags; + UVector fLineNum; + UVector fActualBreakPositions; // Test Results. + UVector fActualTags; + + BITestData(UErrorCode &status); + void addDataChunk(const char *data, int32_t tag, int32_t lineNum, UErrorCode status); + void checkResults(const char *heading, RBBITest *test); + void err(const char *heading, RBBITest *test, int32_t expectedIdx, int32_t actualIdx); + void clearResults(); +}; + +// +// Constructor. +// +BITestData::BITestData(UErrorCode &status) +: fExpectedBreakPositions(status), fExpectedTags(status), fLineNum(status), fActualBreakPositions(status), + fActualTags(status) +{ +} + +// +// addDataChunk. Add a section (non-breaking) piece if data to the test data. +// The macro form collects the line number, which is helpful +// when tracking down failures. +// +// A null data item is inserted at the start of each test's data +// to put the starting zero into the data list. The position saved for +// each non-null item is its ending position. +// +#define ADD_DATACHUNK(td, data, tag, status) td.addDataChunk(data, tag, __LINE__, status); +void BITestData::addDataChunk(const char *data, int32_t tag, int32_t lineNum, UErrorCode status) { + if (U_FAILURE(status)) {return;} + if (data != NULL) { + fDataToBreak.append(CharsToUnicodeString(data)); + } + fExpectedBreakPositions.addElement(fDataToBreak.length(), status); + fExpectedTags.addElement(tag, status); + fLineNum.addElement(lineNum, status); +} + + +// +// checkResults. Compare the actual and expected break positions, report any differences. +// +void BITestData::checkResults(const char *heading, RBBITest *test) { + int32_t expectedIndex = 0; + int32_t actualIndex = 0; + + for (;;) { + // If we've run through both the expected and actual results vectors, we're done. + // break out of the loop. + if (expectedIndex >= fExpectedBreakPositions.size() && + actualIndex >= fActualBreakPositions.size()) { + break; + } + + + if (expectedIndex >= fExpectedBreakPositions.size()) { + err(heading, test, expectedIndex-1, actualIndex); + actualIndex++; + continue; + } + + if (actualIndex >= fActualBreakPositions.size()) { + err(heading, test, expectedIndex, actualIndex-1); + expectedIndex++; + continue; + } + + if (fActualBreakPositions.elementAti(actualIndex) != fExpectedBreakPositions.elementAti(expectedIndex)) { + err(heading, test, expectedIndex, actualIndex); + // Try to resync the positions of the indices, to avoid a rash of spurious erros. + if (fActualBreakPositions.elementAti(actualIndex) < fExpectedBreakPositions.elementAti(expectedIndex)) { + actualIndex++; + } else { + expectedIndex++; + } + continue; + } + + if (fActualTags.elementAti(actualIndex) != fExpectedTags.elementAti(expectedIndex)) { + test->errln("%s, tag mismatch. Test Line = %d, expected tag=%d, got %d", + heading, fLineNum.elementAt(expectedIndex), + fExpectedTags.elementAti(expectedIndex), fActualTags.elementAti(actualIndex)); + } + + actualIndex++; + expectedIndex++; + } +} + +// +// err - An error was found. Report it, along with information about where the +// incorrectly broken test data appeared in the source file. +// +void BITestData::err(const char *heading, RBBITest *test, int32_t expectedIdx, int32_t actualIdx) +{ + int32_t expected = fExpectedBreakPositions.elementAti(expectedIdx); + int32_t actual = fActualBreakPositions.elementAti(actualIdx); + int32_t o = 0; + int32_t line = fLineNum.elementAti(expectedIdx); + if (expectedIdx > 0) { + // The line numbers are off by one because a premature break occurs somewhere + // within the previous item, rather than at the start of the current (expected) item. + // We want to report the offset of the unexpected break from the start of + // this previous item. + o = actual - fExpectedBreakPositions.elementAti(expectedIdx-1); + } + if (actual < expected) { + test->errln("%s unexpected break at offset %d in test item from line %d", heading, o, line); + } else { + test->errln("%s Failed to find break at end of item from line %d", heading, line); + } +} + + +void BITestData::clearResults() { + fActualBreakPositions.removeAllElements(); + fActualTags.removeAllElements(); +} + + +//----------------------------------------------------------------------------------- +// +// Cannned Test Characters +// +//----------------------------------------------------------------------------------- + +static const UChar cannedTestArray[] = { + 0x0001, 0x0002, 0x0003, 0x0004, 0x0020, 0x0021, '\\', 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0028, 0x0029, 0x002b, 0x002d, 0x0030, 0x0031, + 0x0032, 0x0033, 0x0034, 0x003c, 0x003d, 0x003e, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x005b, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x007b, + 0x007d, 0x007c, 0x002c, 0x00a0, 0x00a2, + 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00ab, 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b2, 0x00b3, + 0x00b4, 0x00b9, 0x00bb, 0x00bc, 0x00bd, 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x0300, 0x0301, 0x0302, 0x0303, + 0x0304, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x0903, 0x093e, 0x093f, 0x0940, 0x0949, 0x0f3a, 0x0f3b, 0x2000, + 0x2001, 0x2002, 0x200c, 0x200d, 0x200e, 0x200f, 0x2010, 0x2011, 0x2012, 0x2028, 0x2029, 0x202a, 0x203e, 0x203f, + 0x2040, 0x20dd, 0x20de, 0x20df, 0x20e0, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x0000 +}; + +static UnicodeString* cannedTestChars = 0; + +#define halfNA "\\u0928\\u094d\\u200d" +#define halfSA "\\u0938\\u094d\\u200d" +#define halfCHA "\\u091a\\u094d\\u200d" +#define halfKA "\\u0915\\u094d\\u200d" +#define deadTA "\\u0924\\u094d" + +//-------------------------------------------------------------------------------------- +// +// RBBITest constructor and destructor +// +//-------------------------------------------------------------------------------------- + +RBBITest::RBBITest() { + UnicodeString temp(cannedTestArray); + cannedTestChars = new UnicodeString(); + *cannedTestChars += (UChar)0x0000; + *cannedTestChars += temp; +} + + +RBBITest::~RBBITest() { + delete cannedTestChars; +} + + +static const int T_NUMBER = 100; +static const int T_LETTER = 200; +static const int T_H_OR_K = 300; +static const int T_IDEO = 400; + + + + + + +//-------------------------------------------------------------------- +//Testing the BreakIterator for devanagari script +//-------------------------------------------------------------------- + +#define deadRA "\\u0930\\u094d" /*deadform RA = devanagari RA + virama*/ +#define deadPHA "\\u092b\\u094d" /*deadform PHA = devanagari PHA + virama*/ +#define deadTTHA "\\u0920\\u094d" +#define deadPA "\\u092a\\u094d" +#define deadSA "\\u0938\\u094d" +#define visarga "\\u0903" /*devanagari visarga looks like a english colon*/ + + + + + + +//----------------------------------------------------------------------------------- +// +// Test for status {tag} return value from break rules. +// TODO: a more thorough test. +// +//----------------------------------------------------------------------------------- +void RBBITest::TestStatusReturn() { + UnicodeString rulesString1 = "$Letters = [:L:];\n" + "$Numbers = [:N:];\n" + "$Letters+{1};\n" + "$Numbers+{2};\n" + "Help\\ {4}/me\\!;\n" + "[^$Letters $Numbers];\n" + "!.*;\n"; + UnicodeString testString1 = "abc123..abc Help me Help me!"; + // 01234567890123456789012345678 + int32_t bounds1[] = {0, 3, 6, 7, 8, 11, 12, 16, 17, 19, 20, 25, 27, 28, -1}; + int32_t brkStatus[] = {0, 1, 2, 0, 0, 1, 0, 1, 0, 1, 0, 4, 1, 0, -1}; + + UErrorCode status=U_ZERO_ERROR; + UParseError parseError; + + RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); + if(U_FAILURE(status)) { + errln("FAIL : in construction"); + } else { + int32_t pos; + int32_t i = 0; + bi->setText(testString1); + for (pos=bi->first(); pos!= BreakIterator::DONE; pos=bi->next()) { + if (pos != bounds1[i]) { + errln("FAIL: expected break at %d, got %d\n", bounds1[i], pos); + break; + } + + int tag = bi->getRuleStatus(); + if (tag != brkStatus[i]) { + errln("FAIL: break at %d, expected tag %d, got tag %d\n", pos, brkStatus[i], tag); + break; + } + i++; + } + } + delete bi; +} + + +static void printStringBreaks(UnicodeString ustr, int expected[], + int expectedcount) +{ + UErrorCode status = U_ZERO_ERROR; + char name[100]; + printf("code alpha extend alphanum type word sent line name\n"); + int j; + for (j = 0; j < ustr.length(); j ++) { + if (expectedcount > 0) { + int k; + for (k = 0; k < expectedcount; k ++) { + if (j == expected[k]) { + printf("------------------------------------------------ %d\n", + j); + } + } + } + UChar32 c = ustr.char32At(j); + if (c > 0xffff) { + j ++; + } + u_charName(c, U_UNICODE_CHAR_NAME, name, 100, &status); + printf("%7x %5d %6d %8d %4s %4s %4s %4s %s\n", (int)c, + u_isUAlphabetic(c), + u_hasBinaryProperty(c, UCHAR_GRAPHEME_EXTEND), + u_isalnum(c), + u_getPropertyValueName(UCHAR_GENERAL_CATEGORY, + u_charType(c), + U_SHORT_PROPERTY_NAME), + u_getPropertyValueName(UCHAR_WORD_BREAK, + u_getIntPropertyValue(c, + UCHAR_WORD_BREAK), + U_SHORT_PROPERTY_NAME), + u_getPropertyValueName(UCHAR_SENTENCE_BREAK, + u_getIntPropertyValue(c, + UCHAR_SENTENCE_BREAK), + U_SHORT_PROPERTY_NAME), + u_getPropertyValueName(UCHAR_LINE_BREAK, + u_getIntPropertyValue(c, + UCHAR_LINE_BREAK), + U_SHORT_PROPERTY_NAME), + name); + } +} + +void RBBITest::TestThaiLineBreak() { + UErrorCode status = U_ZERO_ERROR; + BITestData thaiLineSelection(status); + + // \u0e2f-- the Thai paiyannoi character-- isn't a letter. It's a symbol that + // represents elided letters at the end of a long word. It should be bound to + // the end of the word and not treated as an independent punctuation mark. + + + ADD_DATACHUNK(thaiLineSelection, NULL, 0, status); // Break at start of data + ADD_DATACHUNK(thaiLineSelection, "\\u0e2a\\u0e16\\u0e32\\u0e19\\u0e35\\u0e2f", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e08\\u0e30", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e14\\u0e21", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e08\\u0e49\\u0e32", 0, status); +// ADD_DATACHUNK(thaiLineSelection, "\\u0e2b\\u0e19\\u0e49\\u0e32", 0, status); +// ADD_DATACHUNK(thaiLineSelection, "\\u0e17\\u0e35\\u0e48", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48", 0, status); + // the commented-out lines (I think) are the preferred result; this line is what our current dictionary is giving us + ADD_DATACHUNK(thaiLineSelection, "\\u0e2d\\u0e2d\\u0e01", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e21\\u0e32", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e23\\u0e48\\u0e07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e1a\\u0e32\\u0e22", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e15\\u0e47\\u0e21", 0, status); + + // the one time where the paiyannoi occurs somewhere other than at the end + // of a word is in the Thai abbrevation for "etc.", which both begins and + // ends with a paiyannoi + ADD_DATACHUNK(thaiLineSelection, "\\u0e2f\\u0e25\\u0e2f", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e17\\u0e35\\u0e48", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e19\\u0e31\\u0e49\\u0e19", 0, status); + + RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createLineInstance( + Locale("th"), status); + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for Thai locale in TestThaiLineBreak.\n"); + return; + } + + generalIteratorTest(*e, thaiLineSelection); + delete e; +} + + + +void RBBITest::TestMixedThaiLineBreak() +{ + UErrorCode status = U_ZERO_ERROR; + BITestData thaiLineSelection(status); + + ADD_DATACHUNK(thaiLineSelection, NULL, 0, status); // Break at start of data + + + // @suwit -- Test Arabic numerals, Thai numerals, Punctuation and English characters + // start + + ADD_DATACHUNK(thaiLineSelection, "\\u0E1B\\u0E35", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E1E\\u0E38\\u0E17\\u0E18\\u0E28\\u0E31\\u0E01\\u0E23\\u0E32\\u0E0A ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "2545 ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E40\\u0E1B\\u0E47\\u0E19", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E1B\\u0E35", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E09\\u0E25\\u0E2D\\u0E07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E04\\u0E23\\u0E1A", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E23\\u0E2D\\u0E1A ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\"\\u0E52\\u0E52\\u0E50 ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E1b\\u0E35\" ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E02\\u0E2d\\u0E07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E01\\u0E23\\u0E38\\u0E07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E23\\u0E31\\u0E15\\u0E19\\u0E42\\u0E01\\u0E2A\\u0E34\\u0E19\\u0E17\\u0E23\\u0E4C ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "(\\u0E01\\u0E23\\u0E38\\u0E07\\u0E40\\u0E17\\u0E1e\\u0E2F", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0E2B\\u0E23\\u0E37\\u0E2D ", 0, status); + ADD_DATACHUNK(thaiLineSelection, "Bangkok)", 0, status); + + // @suwit - end of changes + + + RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale("th"), status); + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for Thai locale in TestMixedThaiLineBreak.\n"); + return; + } + + + generalIteratorTest(*e, thaiLineSelection); + delete e; +} + + +void RBBITest::TestMaiyamok() +{ + UErrorCode status = U_ZERO_ERROR; + BITestData thaiLineSelection(status); + ADD_DATACHUNK(thaiLineSelection, NULL, 0, status); // Break at start of data + // the Thai maiyamok character is a shorthand symbol that means "repeat the previous + // word". Instead of appearing as a word unto itself, however, it's kept together + // with the word before it + ADD_DATACHUNK(thaiLineSelection, "\\u0e44\\u0e1b\\u0e46", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e21\\u0e32\\u0e46", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e23\\u0e30\\u0e2b\\u0e27\\u0e48\\u0e32\\u0e07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e01\\u0e23\\u0e38\\u0e07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e17\\u0e1e", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e41\\u0e25\\u0e30", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e40\\u0e03\\u0e35", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e22\\u0e07", 0, status); + ADD_DATACHUNK(thaiLineSelection, "\\u0e43\\u0e2b\\u0e21\\u0e48", 0, status); + + RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createLineInstance( + Locale("th"), status); + + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for Thai locale in TestMaiyamok.\n"); + return; + } + generalIteratorTest(*e, thaiLineSelection); + delete e; +} + + + +void RBBITest::TestBug3818() { + UErrorCode status = U_ZERO_ERROR; + + // Four Thai words... + static const UChar thaiWordData[] = { 0x0E43,0x0E2B,0x0E0D,0x0E48, 0x0E43,0x0E2B,0x0E0D,0x0E48, + 0x0E43,0x0E2B,0x0E0D,0x0E48, 0x0E43,0x0E2B,0x0E0D,0x0E48, 0 }; + UnicodeString thaiStr(thaiWordData); + + RuleBasedBreakIterator* bi = + (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale("th"), status); + if (U_FAILURE(status) || bi == NULL) { + errln("Fail at file %s, line %d, status = %s", __FILE__, __LINE__, u_errorName(status)); + return; + } + bi->setText(thaiStr); + + int32_t startOfSecondWord = bi->following(1); + if (startOfSecondWord != 4) { + errln("Fail at file %s, line %d expected start of word at 4, got %d", + __FILE__, __LINE__, startOfSecondWord); + } + startOfSecondWord = bi->following(0); + if (startOfSecondWord != 4) { + errln("Fail at file %s, line %d expected start of word at 4, got %d", + __FILE__, __LINE__, startOfSecondWord); + } + delete bi; +} + + +void RBBITest::TestJapaneseWordBreak() { + UErrorCode status = U_ZERO_ERROR; + BITestData japaneseWordSelection(status); + + ADD_DATACHUNK(japaneseWordSelection, NULL, 0, status); // Break at start of data + ADD_DATACHUNK(japaneseWordSelection, "\\u4ECA\\u65E5", 400, status); //2 + ADD_DATACHUNK(japaneseWordSelection, "\\u306F\\u3044\\u3044", 300, status); //5 + ADD_DATACHUNK(japaneseWordSelection, "\\u5929\\u6C17", 400, status); //7 + ADD_DATACHUNK(japaneseWordSelection, "\\u3067\\u3059\\u306D", 300, status); //10 + ADD_DATACHUNK(japaneseWordSelection, "\\u3002", 0, status); //11 + ADD_DATACHUNK(japaneseWordSelection, "\\u000D\\u000A", 0, status); //12 + + RuleBasedBreakIterator* e = (RuleBasedBreakIterator *)BreakIterator::createWordInstance( + Locale("ja"), status); + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for Japanese locale in TestJapaneseWordBreak.\n"); + return; + } + + generalIteratorTest(*e, japaneseWordSelection); + delete e; +} + +void RBBITest::TestTrieDict() { + UErrorCode status = U_ZERO_ERROR; + + // + // Open and read the test data file. + // + const char *testDataDirectory = IntlTest::getSourceTestData(status); + char testFileName[1000]; + if (testDataDirectory == NULL || strlen(testDataDirectory) + strlen("riwords.txt") + 10 >= sizeof(testFileName)) { + errln("Can't open test data. Path too long."); + return; + } + strcpy(testFileName, testDataDirectory); + strcat(testFileName, "riwords.txt"); + + // Items needing deleting at the end + MutableTrieDictionary *mutableDict = NULL; + CompactTrieDictionary *compactDict = NULL; + UnicodeSet *breaks = NULL; + UChar *testFile = NULL; + StringEnumeration *enumer = NULL; + MutableTrieDictionary *mutable2 = NULL; + StringEnumeration *cloneEnum = NULL; + CompactTrieDictionary *compact2 = NULL; + + + const UnicodeString *originalWord = NULL; + const UnicodeString *cloneWord = NULL; + UChar *current; + UChar *word; + UChar uc; + int32_t wordLen; + int32_t wordCount; + int32_t testCount; + + int len; + testFile = ReadAndConvertFile(testFileName, len, status); + if (U_FAILURE(status)) { + goto cleanup; /* something went wrong, error already output */ + } + + mutableDict = new MutableTrieDictionary(0x0E1C, status); + if (U_FAILURE(status)) { + errln("Error creating MutableTrieDictionary: %s\n", u_errorName(status)); + goto cleanup; + } + + breaks = new UnicodeSet; + breaks->add(0x000A); // Line Feed + breaks->add(0x000D); // Carriage Return + breaks->add(0x2028); // Line Separator + breaks->add(0x2029); // Paragraph Separator + + // Now add each non-comment line of the file as a word. + current = testFile; + word = current; + uc = *current++; + wordLen = 0; + wordCount = 0; + + while (uc) { + if (uc == 0x0023) { // #comment line, skip + while (uc && !breaks->contains(uc)) { + uc = *current++; + } + } + else while (uc && !breaks->contains(uc)) { + ++wordLen; + uc = *current++; + } + if (wordLen > 0) { + mutableDict->addWord(word, wordLen, status); + if (U_FAILURE(status)) { + errln("Could not add word to mutable dictionary; status %s\n", u_errorName(status)); + goto cleanup; + } + wordCount += 1; + } + + // Find beginning of next line + while (uc && breaks->contains(uc)) { + uc = *current++; + } + word = current-1; + wordLen = 0; + } + + if (wordCount < 50) { + errln("Word count (%d) unreasonably small\n", wordCount); + goto cleanup; + } + + enumer = mutableDict->openWords(status); + if (U_FAILURE(status)) { + errln("Could not open mutable dictionary enumerator: %s\n", u_errorName(status)); + goto cleanup; + } + + testCount = 0; + if (wordCount != (testCount = enumer->count(status))) { + errln("MutableTrieDictionary word count (%d) differs from file word count (%d), with status %s\n", + testCount, wordCount, u_errorName(status)); + goto cleanup; + } + + delete enumer; + enumer = NULL; + + // Now compact it + compactDict = new CompactTrieDictionary(*mutableDict, status); + if (U_FAILURE(status)) { + errln("Failed to create CompactTrieDictionary: %s\n", u_errorName(status)); + goto cleanup; + } + + enumer = compactDict->openWords(status); + if (U_FAILURE(status)) { + errln("Could not open compact trie dictionary enumerator: %s\n", u_errorName(status)); + goto cleanup; + } + + if (wordCount != (testCount = enumer->count(status))) { + errln("CompactTrieDictionary word count (%d) differs from file word count (%d), with status %s\n", + testCount, wordCount, u_errorName(status)); + goto cleanup; + } + + delete enumer; + enumer = NULL; + + // Now un-compact it + mutable2 = compactDict->cloneMutable(status); + if (U_FAILURE(status)) { + errln("Could not clone CompactTrieDictionary to MutableTrieDictionary: %s\n", u_errorName(status)); + goto cleanup; + } + + cloneEnum = mutable2->openWords(status); + if (U_FAILURE(status)) { + errln("Could not create cloned mutable enumerator: %s\n", u_errorName(status)); + goto cleanup; + } + + if (wordCount != (testCount = cloneEnum->count(status))) { + errln("Cloned MutableTrieDictionary word count (%d) differs from file word count (%d), with status %s\n", + testCount, wordCount, u_errorName(status)); + goto cleanup; + } + + // Compact original dictionary to clone. Note that we can only compare the same kind of + // dictionary as the order of the enumerators is not guaranteed to be the same between + // different kinds + enumer = mutableDict->openWords(status); + if (U_FAILURE(status)) { + errln("Could not re-open mutable dictionary enumerator: %s\n", u_errorName(status)); + goto cleanup; + } + + originalWord = enumer->snext(status); + cloneWord = cloneEnum->snext(status); + while (U_SUCCESS(status) && originalWord != NULL && cloneWord != NULL) { + if (*originalWord != *cloneWord) { + errln("Original and cloned MutableTrieDictionary word mismatch\n"); + goto cleanup; + } + originalWord = enumer->snext(status); + cloneWord = cloneEnum->snext(status); + } + + if (U_FAILURE(status)) { + errln("Enumeration failed: %s\n", u_errorName(status)); + goto cleanup; + } + + if (originalWord != cloneWord) { + errln("Original and cloned MutableTrieDictionary ended enumeration at different points\n"); + goto cleanup; + } + + // Test the data copying constructor for CompactTrieDict, and the data access APIs. + compact2 = new CompactTrieDictionary(compactDict->data(), status); + if (U_FAILURE(status)) { + errln("CompactTrieDictionary(const void *,...) failed\n"); + goto cleanup; + } + + if (compact2->dataSize() == 0) { + errln("CompactTrieDictionary->dataSize() == 0\n"); + goto cleanup; + } + + // Now count the words via the second dictionary + delete enumer; + enumer = compact2->openWords(status); + if (U_FAILURE(status)) { + errln("Could not open compact trie dictionary 2 enumerator: %s\n", u_errorName(status)); + goto cleanup; + } + + if (wordCount != (testCount = enumer->count(status))) { + errln("CompactTrieDictionary 2 word count (%d) differs from file word count (%d), with status %s\n", + testCount, wordCount, u_errorName(status)); + goto cleanup; + } + +cleanup: + delete compactDict; + delete mutableDict; + delete breaks; + delete[] testFile; + delete enumer; + delete mutable2; + delete cloneEnum; + delete compact2; +} + +//--------------------------------------------- +// runIndexedTest +//--------------------------------------------- + +void RBBITest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* params ) +{ + if (exec) logln("TestSuite RuleBasedBreakIterator: "); + + switch (index) { + case 0: name = "TestBug4153072"; + if(exec) TestBug4153072(); break; + case 1: name = "TestJapaneseLineBreak"; + if(exec) TestJapaneseLineBreak(); break; + case 2: name = "TestStatusReturn"; + if(exec) TestStatusReturn(); break; + + case 3: name = "TestLineBreakData"; + if(exec) TestLineBreakData(); break; + case 4: name = "TestEmptyString"; + if(exec) TestEmptyString(); break; + + case 5: name = "TestGetAvailableLocales"; + if(exec) TestGetAvailableLocales(); break; + + case 6: name = "TestGetDisplayName"; + if(exec) TestGetDisplayName(); break; + + case 7: name = "TestEndBehaviour"; + if(exec) TestEndBehaviour(); break; + case 8: name = "TestMixedThaiLineBreak"; + if(exec) TestMixedThaiLineBreak(); break; + case 9: name = "TestThaiLineBreak"; + if(exec) TestThaiLineBreak(); break; + case 10: name = "TestMaiyamok"; + if(exec) TestMaiyamok(); break; + case 11: name = "TestWordBreaks"; + if(exec) TestWordBreaks(); break; + case 12: name = "TestWordBoundary"; + if(exec) TestWordBoundary(); break; + case 13: name = "TestLineBreaks"; + if(exec) TestLineBreaks(); break; + case 14: name = "TestSentBreaks"; + if(exec) TestSentBreaks(); break; + case 15: name = "TestExtended"; + if(exec) TestExtended(); break; + case 16: name = "TestMonkey"; + if(exec) { + #if !UCONFIG_NO_REGULAR_EXPRESSIONS + TestMonkey(params); + #else + logln("skipping TestMonkey (UCONFIG_NO_REGULAR_EXPRESSIONS)"); + #endif + } + break; + case 17: name = "TestBug3818"; + if(exec) TestBug3818(); break; + case 18: name = "TestJapaneseWordBreak"; + if(exec) TestJapaneseWordBreak(); break; + case 19: name = "TestDebug"; + if(exec) TestDebug(); break; + case 20: name = "TestTrieDict"; + if(exec) TestTrieDict(); break; + + default: name = ""; break; //needed to end loop + } +} + + +//---------------------------------------------------------------------------- +// +// generalIteratorTest Given a break iterator and a set of test data, +// Run the tests and report the results. +// +//---------------------------------------------------------------------------- +void RBBITest::generalIteratorTest(RuleBasedBreakIterator& bi, BITestData &td) +{ + + bi.setText(td.fDataToBreak); + + testFirstAndNext(bi, td); + + testLastAndPrevious(bi, td); + + testFollowing(bi, td); + testPreceding(bi, td); + testIsBoundary(bi, td); + doMultipleSelectionTest(bi, td); +} + + +// +// testFirstAndNext. Run the iterator forwards in the obvious first(), next() +// kind of loop. +// +void RBBITest::testFirstAndNext(RuleBasedBreakIterator& bi, BITestData &td) +{ + UErrorCode status = U_ZERO_ERROR; + int32_t p; + int32_t lastP = -1; + int32_t tag; + + logln("Test first and next"); + bi.setText(td.fDataToBreak); + td.clearResults(); + + for (p=bi.first(); p!=RuleBasedBreakIterator::DONE; p=bi.next()) { + td.fActualBreakPositions.addElement(p, status); // Save result. + tag = bi.getRuleStatus(); + td.fActualTags.addElement(tag, status); + if (p <= lastP) { + // If the iterator is not making forward progress, stop. + // No need to raise an error here, it'll be detected in the normal check of results. + break; + } + lastP = p; + } + td.checkResults("testFirstAndNext", this); +} + + +// +// TestLastAndPrevious. Run the iterator backwards, starting with last(). +// +void RBBITest::testLastAndPrevious(RuleBasedBreakIterator& bi, BITestData &td) +{ + UErrorCode status = U_ZERO_ERROR; + int32_t p; + int32_t lastP = 0x7ffffffe; + int32_t tag; + + logln("Test first and next"); + bi.setText(td.fDataToBreak); + td.clearResults(); + + for (p=bi.last(); p!=RuleBasedBreakIterator::DONE; p=bi.previous()) { + // Save break position. Insert it at start of vector of results, shoving + // already-saved results further towards the end. + td.fActualBreakPositions.insertElementAt(p, 0, status); + // bi.previous(); // TODO: Why does this fix things up???? + // bi.next(); + tag = bi.getRuleStatus(); + td.fActualTags.insertElementAt(tag, 0, status); + if (p >= lastP) { + // If the iterator is not making progress, stop. + // No need to raise an error here, it'll be detected in the normal check of results. + break; + } + lastP = p; + } + td.checkResults("testLastAndPrevious", this); +} + + +void RBBITest::testFollowing(RuleBasedBreakIterator& bi, BITestData &td) +{ + UErrorCode status = U_ZERO_ERROR; + int32_t p; + int32_t tag; + int32_t lastP = -2; // A value that will never be returned as a break position. + // cannot be -1; that is returned for DONE. + int i; + + logln("testFollowing():"); + bi.setText(td.fDataToBreak); + td.clearResults(); + + // Save the starting point, since we won't get that out of following. + p = bi.first(); + td.fActualBreakPositions.addElement(p, status); // Save result. + tag = bi.getRuleStatus(); + td.fActualTags.addElement(tag, status); + + for (i = 0; i <= td.fDataToBreak.length()+1; i++) { + p = bi.following(i); + if (p != lastP) { + if (p == RuleBasedBreakIterator::DONE) { + break; + } + // We've reached a new break position. Save it. + td.fActualBreakPositions.addElement(p, status); // Save result. + tag = bi.getRuleStatus(); + td.fActualTags.addElement(tag, status); + lastP = p; + } + } + // The loop normally exits by means of the break in the middle. + // Make sure that the index was at the correct position for the break iterator to have + // returned DONE. + if (i != td.fDataToBreak.length()) { + errln("testFollowing(): iterator returned DONE prematurely."); + } + + // Full check of all results. + td.checkResults("testFollowing", this); +} + + + +void RBBITest::testPreceding(RuleBasedBreakIterator& bi, BITestData &td) { + UErrorCode status = U_ZERO_ERROR; + int32_t p; + int32_t tag; + int32_t lastP = 0x7ffffffe; + int i; + + logln("testPreceding():"); + bi.setText(td.fDataToBreak); + td.clearResults(); + + p = bi.last(); + td.fActualBreakPositions.addElement(p, status); + tag = bi.getRuleStatus(); + td.fActualTags.addElement(tag, status); + + for (i = td.fDataToBreak.length(); i>=-1; i--) { + p = bi.preceding(i); + if (p != lastP) { + if (p == RuleBasedBreakIterator::DONE) { + break; + } + // We've reached a new break position. Save it. + td.fActualBreakPositions.insertElementAt(p, 0, status); + lastP = p; + tag = bi.getRuleStatus(); + td.fActualTags.insertElementAt(tag, 0, status); + } + } + // The loop normally exits by means of the break in the middle. + // Make sure that the index was at the correct position for the break iterator to have + // returned DONE. + if (i != 0) { + errln("testPreceding(): iterator returned DONE prematurely."); + } + + // Full check of all results. + td.checkResults("testPreceding", this); +} + + + +void RBBITest::testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td) { + UErrorCode status = U_ZERO_ERROR; + int i; + int32_t tag; + + logln("testIsBoundary():"); + bi.setText(td.fDataToBreak); + td.clearResults(); + + for (i = 0; i <= td.fDataToBreak.length(); i++) { + if (bi.isBoundary(i)) { + td.fActualBreakPositions.addElement(i, status); // Save result. + tag = bi.getRuleStatus(); + td.fActualTags.addElement(tag, status); + } + } + td.checkResults("testIsBoundary: ", this); +} + + + +void RBBITest::doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td) +{ + iterator.setText(td.fDataToBreak); + + RuleBasedBreakIterator* testIterator =(RuleBasedBreakIterator*)iterator.clone(); + int32_t offset = iterator.first(); + int32_t testOffset; + int32_t count = 0; + + logln("doMultipleSelectionTest text of length: %d", td.fDataToBreak.length()); + + if (*testIterator != iterator) + errln("clone() or operator!= failed: two clones compared unequal"); + + do { + testOffset = testIterator->first(); + testOffset = testIterator->next(count); + if (offset != testOffset) + errln(UnicodeString("next(n) and next() not returning consistent results: for step ") + count + ", next(n) returned " + testOffset + " and next() had " + offset); + + if (offset != RuleBasedBreakIterator::DONE) { + count++; + offset = iterator.next(); + + if (offset != RuleBasedBreakIterator::DONE && *testIterator == iterator) { + errln("operator== failed: Two unequal iterators compared equal. count=%d offset=%d", count, offset); + if (count > 10000 || offset == -1) { + errln("operator== failed too many times. Stopping test."); + if (offset == -1) { + errln("Does (RuleBasedBreakIterator::DONE == -1)?"); + } + return; + } + } + } + } while (offset != RuleBasedBreakIterator::DONE); + + // now do it backwards... + offset = iterator.last(); + count = 0; + + do { + testOffset = testIterator->last(); + testOffset = testIterator->next(count); // next() with a negative arg is same as previous + if (offset != testOffset) + errln(UnicodeString("next(n) and next() not returning consistent results: for step ") + count + ", next(n) returned " + testOffset + " and next() had " + offset); + + if (offset != RuleBasedBreakIterator::DONE) { + count--; + offset = iterator.previous(); + } + } while (offset != RuleBasedBreakIterator::DONE); + + delete testIterator; +} + + +//--------------------------------------------- +// +// other tests +// +//--------------------------------------------- +void RBBITest::TestEmptyString() +{ + UnicodeString text = ""; + UErrorCode status = U_ZERO_ERROR; + + BITestData x(status); + ADD_DATACHUNK(x, "", 0, status); // Break at start of data + RuleBasedBreakIterator* bi = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for default locale in TestEmptyString.\n"); + return; + } + generalIteratorTest(*bi, x); + delete bi; +} + +void RBBITest::TestGetAvailableLocales() +{ + int32_t locCount = 0; + const Locale* locList = BreakIterator::getAvailableLocales(locCount); + + if (locCount == 0) + errln("getAvailableLocales() returned an empty list!"); + // Just make sure that it's returning good memory. + int32_t i; + for (i = 0; i < locCount; ++i) { + logln(locList[i].getName()); + } +} + +//Testing the BreakIterator::getDisplayName() function +void RBBITest::TestGetDisplayName() +{ + UnicodeString result; + + BreakIterator::getDisplayName(Locale::getUS(), result); + if (Locale::getDefault() == Locale::getUS() && result != "English (United States)") + errln("BreakIterator::getDisplayName() failed: expected \"English (United States)\", got \"" + + result); + + BreakIterator::getDisplayName(Locale::getFrance(), Locale::getUS(), result); + if (result != "French (France)") + errln("BreakIterator::getDisplayName() failed: expected \"French (France)\", got \"" + + result); +} +/** + * Test End Behaviour + * @bug 4068137 + */ +void RBBITest::TestEndBehaviour() +{ + UErrorCode status = U_ZERO_ERROR; + UnicodeString testString("boo."); + BreakIterator *wb = BreakIterator::createWordInstance(Locale::getDefault(), status); + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for default locale in TestEndBehaviour.\n"); + return; + } + wb->setText(testString); + + if (wb->first() != 0) + errln("Didn't get break at beginning of string."); + if (wb->next() != 3) + errln("Didn't get break before period in \"boo.\""); + if (wb->current() != 4 && wb->next() != 4) + errln("Didn't get break at end of string."); + delete wb; +} +/* + * @bug 4153072 + */ +void RBBITest::TestBug4153072() { + UErrorCode status = U_ZERO_ERROR; + BreakIterator *iter = BreakIterator::createWordInstance(Locale::getDefault(), status); + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for default locale in TestBug4153072\n"); + return; + } + UnicodeString str("...Hello, World!..."); + int32_t begin = 3; + int32_t end = str.length() - 3; + UBool onBoundary; + + StringCharacterIterator* textIterator = new StringCharacterIterator(str, begin, end, begin); + iter->adoptText(textIterator); + int index; + // Note: with the switch to UText, there is no way to restrict the + // iteration range to begin at an index other than zero. + // String character iterators created with a non-zero bound are + // treated by RBBI as being empty. + for (index = -1; index < begin + 1; ++index) { + onBoundary = iter->isBoundary(index); + if (index == 0? !onBoundary : onBoundary) { + errln((UnicodeString)"Didn't handle isBoundary correctly with offset = " + index + + " and begin index = " + begin); + } + } + delete iter; +} + + +/** + * Test Japanese Line Break + * @bug 4095322 + */ +void RBBITest::TestJapaneseLineBreak() +{ +#if 0 + // Test needs updating some more... Dump it for now. + + + // Change for Unicode TR 14: Punctuation characters with categories Pi and Pf do not count + // as opening and closing punctuation for line breaking. + // Also, \u30fc and \u30fe are not counted as hyphens. Remove these chars + // from these tests. 6-13-2002 + // + UErrorCode status = U_ZERO_ERROR; + UnicodeString testString = CharsToUnicodeString("\\u4e00x\\u4e8c"); + UnicodeString precedingChars = CharsToUnicodeString( + //"([{\\u00ab$\\u00a5\\u00a3\\u00a4\\u2018\\u201a\\u201c\\u201e\\u201b\\u201f"); + "([{$\\u00a5\\u00a3\\u00a4\\u201a\\u201e"); + UnicodeString followingChars = CharsToUnicodeString( + // ")]}\\u00bb!%,.\\u3001\\u3002\\u3063\\u3083\\u3085\\u3087\\u30c3\\u30e3\\u30e5\\u30e7\\u30fc" + ")]}!%,.\\u3001\\u3002\\u3063\\u3083\\u3085\\u3087\\u30c3\\u30e3\\u30e5\\u30e7" + // ":;\\u309b\\u309c\\u3005\\u309d\\u309e\\u30fd\\u30fe\\u2019\\u201d\\u00b0\\u2032\\u2033\\u2034" + ":;\\u309b\\u309c\\u3005\\u309d\\u309e\\u30fd\\u00b0\\u2032\\u2033\\u2034" + "\\u2030\\u2031\\u2103\\u2109\\u00a2\\u0300\\u0301\\u0302"); + BreakIterator *iter = BreakIterator::createLineInstance(Locale::getJapan(), status); + + int32_t i; + if (U_FAILURE(status)) + { + errln("Failed to create the BreakIterator for Japanese locale in TestJapaneseLineBreak.\n"); + return; + } + + for (i = 0; i < precedingChars.length(); i++) { + testString.setCharAt(1, precedingChars[i]); + iter->setText(testString); + int32_t j = iter->first(); + if (j != 0) + errln("ja line break failure: failed to start at 0"); + j = iter->next(); + if (j != 1) + errln("ja line break failure: failed to stop before '" + UCharToUnicodeString(precedingChars[i]) + + "' (" + ((int)(precedingChars[i])) + ")"); + j = iter->next(); + if (j != 3) + errln("ja line break failure: failed to skip position after '" + UCharToUnicodeString(precedingChars[i]) + + "' (" + ((int)(precedingChars[i])) + ")"); + } + + for (i = 0; i < followingChars.length(); i++) { + testString.setCharAt(1, followingChars[i]); + iter->setText(testString); + int j = iter->first(); + if (j != 0) + errln("ja line break failure: failed to start at 0"); + j = iter->next(); + if (j != 2) + errln("ja line break failure: failed to skip position before '" + UCharToUnicodeString(followingChars[i]) + + "' (" + ((int)(followingChars[i])) + ")"); + j = iter->next(); + if (j != 3) + errln("ja line break failure: failed to stop after '" + UCharToUnicodeString(followingChars[i]) + + "' (" + ((int)(followingChars[i])) + ")"); + } + delete iter; +#endif +} + + +//------------------------------------------------------------------------------ +// +// RBBITest::Extended Run RBBI Tests from an external test data file +// +//------------------------------------------------------------------------------ + +struct TestParams { + BreakIterator *bi; + UnicodeString dataToBreak; + UVector32 *expectedBreaks; + UVector32 *srcLine; + UVector32 *srcCol; +}; + +void RBBITest::executeTest(TestParams *t) { + int32_t bp; + int32_t prevBP; + int32_t i; + + if (t->bi == NULL) { + return; + } + + t->bi->setText(t->dataToBreak); + // + // Run the iterator forward + // + prevBP = -1; + for (bp = t->bi->first(); bp != BreakIterator::DONE; bp = t->bi->next()) { + if (prevBP == bp) { + // Fail for lack of forward progress. + errln("Forward Iteration, no forward progress. Break Pos=%4d File line,col=%4d,%4d", + bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); + break; + } + + // Check that there were we didn't miss an expected break between the last one + // and this one. + for (i=prevBP+1; i<bp; i++) { + if (t->expectedBreaks->elementAti(i) != 0) { + int expected[] = {0, i}; + printStringBreaks(t->dataToBreak, expected, 2); + errln("Forward Iteration, break expected, but not found. Pos=%4d File line,col= %4d,%4d", + i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); + } + } + + // Check that the break we did find was expected + if (t->expectedBreaks->elementAti(bp) == 0) { + int expected[] = {0, bp}; + printStringBreaks(t->dataToBreak, expected, 2); + errln("Forward Iteration, break found, but not expected. Pos=%4d File line,col= %4d,%4d", + bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); + } else { + // The break was expected. + // Check that the {nnn} tag value is correct. + int32_t expectedTagVal = t->expectedBreaks->elementAti(bp); + if (expectedTagVal == -1) { + expectedTagVal = 0; + } + int32_t line = t->srcLine->elementAti(bp); + int32_t rs = ((RuleBasedBreakIterator *)t->bi)->getRuleStatus(); + if (rs != expectedTagVal) { + errln("Incorrect status for forward break. Pos=%4d File line,col= %4d,%4d.\n" + " Actual, Expected status = %4d, %4d", + bp, line, t->srcCol->elementAti(bp), rs, expectedTagVal); + } + } + + + prevBP = bp; + } + + // Verify that there were no missed expected breaks after the last one found + for (i=prevBP+1; i<t->expectedBreaks->size(); i++) { + if (t->expectedBreaks->elementAti(i) != 0) { + errln("Forward Iteration, break expected, but not found. Pos=%4d File line,col= %4d,%4d", + i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); + } + } + + // + // Run the iterator backwards, verify that the same breaks are found. + // + prevBP = t->dataToBreak.length()+2; // start with a phony value for the last break pos seen. + for (bp = t->bi->last(); bp != BreakIterator::DONE; bp = t->bi->previous()) { + if (prevBP == bp) { + // Fail for lack of progress. + errln("Reverse Iteration, no progress. Break Pos=%4d File line,col=%4d,%4d", + bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); + break; + } + + // Check that there were we didn't miss an expected break between the last one + // and this one. (UVector returns zeros for index out of bounds.) + for (i=prevBP-1; i>bp; i--) { + if (t->expectedBreaks->elementAti(i) != 0) { + errln("Reverse Itertion, break expected, but not found. Pos=%4d File line,col= %4d,%4d", + i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); + } + } + + // Check that the break we did find was expected + if (t->expectedBreaks->elementAti(bp) == 0) { + errln("Reverse Itertion, break found, but not expected. Pos=%4d File line,col= %4d,%4d", + bp, t->srcLine->elementAti(bp), t->srcCol->elementAti(bp)); + } else { + // The break was expected. + // Check that the {nnn} tag value is correct. + int32_t expectedTagVal = t->expectedBreaks->elementAti(bp); + if (expectedTagVal == -1) { + expectedTagVal = 0; + } + int line = t->srcLine->elementAti(bp); + int32_t rs = ((RuleBasedBreakIterator *)t->bi)->getRuleStatus(); + if (rs != expectedTagVal) { + errln("Incorrect status for reverse break. Pos=%4d File line,col= %4d,%4d.\n" + " Actual, Expected status = %4d, %4d", + bp, line, t->srcCol->elementAti(bp), rs, expectedTagVal); + } + } + + prevBP = bp; + } + + // Verify that there were no missed breaks prior to the last one found + for (i=prevBP-1; i>=0; i--) { + if (t->expectedBreaks->elementAti(i) != 0) { + errln("Forward Itertion, break expected, but not found. Pos=%4d File line,col= %4d,%4d", + i, t->srcLine->elementAti(i), t->srcCol->elementAti(i)); + } + } +} + + +void RBBITest::TestExtended() { +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + UErrorCode status = U_ZERO_ERROR; + Locale locale(""); + + UnicodeString rules; + TestParams tp; + tp.bi = NULL; + tp.expectedBreaks = new UVector32(status); + tp.srcLine = new UVector32(status); + tp.srcCol = new UVector32(status); + + RegexMatcher localeMatcher("<locale *([\\p{L}\\p{Nd}_]*) *>", 0, status); + TEST_ASSERT_SUCCESS(status); + + + // + // Open and read the test data file. + // + const char *testDataDirectory = IntlTest::getSourceTestData(status); + char testFileName[1000]; + if (testDataDirectory == NULL || strlen(testDataDirectory) >= sizeof(testFileName)) { + errln("Can't open test data. Path too long."); + return; + } + strcpy(testFileName, testDataDirectory); + strcat(testFileName, "rbbitst.txt"); + + int len; + UChar *testFile = ReadAndConvertFile(testFileName, len, status); + if (U_FAILURE(status)) { + return; /* something went wrong, error already output */ + } + + + + // + // Put the test data into a UnicodeString + // + UnicodeString testString(FALSE, testFile, len); + + enum EParseState{ + PARSE_COMMENT, + PARSE_TAG, + PARSE_DATA, + PARSE_NUM + } + parseState = PARSE_TAG; + + EParseState savedState = PARSE_TAG; + + static const UChar CH_LF = 0x0a; + static const UChar CH_CR = 0x0d; + static const UChar CH_HASH = 0x23; + /*static const UChar CH_PERIOD = 0x2e;*/ + static const UChar CH_LT = 0x3c; + static const UChar CH_GT = 0x3e; + static const UChar CH_BACKSLASH = 0x5c; + static const UChar CH_BULLET = 0x2022; + + int32_t lineNum = 1; + int32_t colStart = 0; + int32_t column = 0; + int32_t charIdx = 0; + + int32_t tagValue = 0; // The numeric value of a <nnn> tag. + + for (charIdx = 0; charIdx < len; ) { + status = U_ZERO_ERROR; + UChar c = testString.charAt(charIdx); + charIdx++; + if (c == CH_CR && charIdx<len && testString.charAt(charIdx) == CH_LF) { + // treat CRLF as a unit + c = CH_LF; + charIdx++; + } + if (c == CH_LF || c == CH_CR) { + lineNum++; + colStart = charIdx; + } + column = charIdx - colStart + 1; + + switch (parseState) { + case PARSE_COMMENT: + if (c == 0x0a || c == 0x0d) { + parseState = savedState; + } + break; + + case PARSE_TAG: + { + if (c == CH_HASH) { + parseState = PARSE_COMMENT; + savedState = PARSE_TAG; + break; + } + if (u_isUWhiteSpace(c)) { + break; + } + if (testString.compare(charIdx-1, 6, "<word>") == 0) { + delete tp.bi; + tp.bi = BreakIterator::createWordInstance(locale, status); + charIdx += 5; + break; + } + if (testString.compare(charIdx-1, 6, "<char>") == 0) { + delete tp.bi; + tp.bi = BreakIterator::createCharacterInstance(locale, status); + charIdx += 5; + break; + } + if (testString.compare(charIdx-1, 6, "<line>") == 0) { + delete tp.bi; + tp.bi = BreakIterator::createLineInstance(locale, status); + charIdx += 5; + break; + } + if (testString.compare(charIdx-1, 6, "<sent>") == 0) { + delete tp.bi; + tp.bi = NULL; + tp.bi = BreakIterator::createSentenceInstance(locale, status); + charIdx += 5; + break; + } + if (testString.compare(charIdx-1, 7, "<title>") == 0) { + delete tp.bi; + tp.bi = BreakIterator::createTitleInstance(locale, status); + charIdx += 6; + break; + } + // <locale loc_name> + localeMatcher.reset(testString); + if (localeMatcher.lookingAt(charIdx-1, status)) { + UnicodeString localeName = localeMatcher.group(1, status); + char localeName8[100]; + localeName.extract(0, localeName.length(), localeName8, sizeof(localeName8), 0); + locale = Locale::createFromName(localeName8); + charIdx += localeMatcher.group(0, status).length(); + TEST_ASSERT_SUCCESS(status); + break; + } + if (testString.compare(charIdx-1, 6, "<data>") == 0) { + parseState = PARSE_DATA; + charIdx += 5; + tp.dataToBreak = ""; + tp.expectedBreaks->removeAllElements(); + tp.srcCol ->removeAllElements(); + tp.srcLine->removeAllElements(); + break; + } + + errln("line %d: Tag expected in test file.", lineNum); + goto end_test; + parseState = PARSE_COMMENT; + savedState = PARSE_DATA; + } + break; + + case PARSE_DATA: + if (c == CH_BULLET) { + int32_t breakIdx = tp.dataToBreak.length(); + tp.expectedBreaks->setSize(breakIdx+1); + tp.expectedBreaks->setElementAt(-1, breakIdx); + tp.srcLine->setSize(breakIdx+1); + tp.srcLine->setElementAt(lineNum, breakIdx); + tp.srcCol ->setSize(breakIdx+1); + tp.srcCol ->setElementAt(column, breakIdx); + break; + } + + if (testString.compare(charIdx-1, 7, "</data>") == 0) { + // Add final entry to mappings from break location to source file position. + // Need one extra because last break position returned is after the + // last char in the data, not at the last char. + tp.srcLine->addElement(lineNum, status); + tp.srcCol ->addElement(column, status); + + parseState = PARSE_TAG; + charIdx += 6; + + // RUN THE TEST! + executeTest(&tp); + break; + } + + if (testString.compare(charIdx-1, 3, "\\N{") == 0) { + // Named character, e.g. \N{COMBINING GRAVE ACCENT} + // Get the code point from the name and insert it into the test data. + // (Damn, no API takes names in Unicode !!! + // we've got to take it back to char *) + int32_t nameEndIdx = testString.indexOf((UChar)0x7d/*'}'*/, charIdx); + int32_t nameLength = nameEndIdx - (charIdx+2); + char charNameBuf[200]; + UChar32 theChar = -1; + if (nameEndIdx != -1) { + UErrorCode status = U_ZERO_ERROR; + testString.extract(charIdx+2, nameLength, charNameBuf, sizeof(charNameBuf)); + charNameBuf[sizeof(charNameBuf)-1] = 0; + theChar = u_charFromName(U_UNICODE_CHAR_NAME, charNameBuf, &status); + if (U_FAILURE(status)) { + theChar = -1; + } + } + if (theChar == -1) { + errln("Error in named character in test file at line %d, col %d", + lineNum, column); + } else { + // Named code point was recognized. Insert it + // into the test data. + tp.dataToBreak.append(theChar); + while (tp.dataToBreak.length() > tp.srcLine->size()) { + tp.srcLine->addElement(lineNum, status); + tp.srcCol ->addElement(column, status); + } + } + if (nameEndIdx > charIdx) { + charIdx = nameEndIdx+1; + + } + break; + } + + + + + if (testString.compare(charIdx-1, 2, "<>") == 0) { + charIdx++; + int32_t breakIdx = tp.dataToBreak.length(); + tp.expectedBreaks->setSize(breakIdx+1); + tp.expectedBreaks->setElementAt(-1, breakIdx); + tp.srcLine->setSize(breakIdx+1); + tp.srcLine->setElementAt(lineNum, breakIdx); + tp.srcCol ->setSize(breakIdx+1); + tp.srcCol ->setElementAt(column, breakIdx); + break; + } + + if (c == CH_LT) { + tagValue = 0; + parseState = PARSE_NUM; + break; + } + + if (c == CH_HASH && column==3) { // TODO: why is column off so far? + parseState = PARSE_COMMENT; + savedState = PARSE_DATA; + break; + } + + if (c == CH_BACKSLASH) { + // Check for \ at end of line, a line continuation. + // Advance over (discard) the newline + UChar32 cp = testString.char32At(charIdx); + if (cp == CH_CR && charIdx<len && testString.charAt(charIdx+1) == CH_LF) { + // We have a CR LF + // Need an extra increment of the input ptr to move over both of them + charIdx++; + } + if (cp == CH_LF || cp == CH_CR) { + lineNum++; + colStart = charIdx; + charIdx++; + break; + } + + // Let unescape handle the back slash. + cp = testString.unescapeAt(charIdx); + if (cp != -1) { + // Escape sequence was recognized. Insert the char + // into the test data. + tp.dataToBreak.append(cp); + while (tp.dataToBreak.length() > tp.srcLine->size()) { + tp.srcLine->addElement(lineNum, status); + tp.srcCol ->addElement(column, status); + } + break; + } + + + // Not a recognized backslash escape sequence. + // Take the next char as a literal. + // TODO: Should this be an error? + c = testString.charAt(charIdx); + charIdx = testString.moveIndex32(charIdx, 1); + } + + // Normal, non-escaped data char. + tp.dataToBreak.append(c); + + // Save the mapping from offset in the data to line/column numbers in + // the original input file. Will be used for better error messages only. + // If there's an expected break before this char, the slot in the mapping + // vector will already be set for this char; don't overwrite it. + if (tp.dataToBreak.length() > tp.srcLine->size()) { + tp.srcLine->addElement(lineNum, status); + tp.srcCol ->addElement(column, status); + } + break; + + + case PARSE_NUM: + // We are parsing an expected numeric tag value, like <1234>, + // within a chunk of data. + if (u_isUWhiteSpace(c)) { + break; + } + + if (c == CH_GT) { + // Finished the number. Add the info to the expected break data, + // and switch parse state back to doing plain data. + parseState = PARSE_DATA; + if (tagValue == 0) { + tagValue = -1; + } + int32_t breakIdx = tp.dataToBreak.length(); + tp.expectedBreaks->setSize(breakIdx+1); + tp.expectedBreaks->setElementAt(tagValue, breakIdx); + tp.srcLine->setSize(breakIdx+1); + tp.srcLine->setElementAt(lineNum, breakIdx); + tp.srcCol ->setSize(breakIdx+1); + tp.srcCol ->setElementAt(column, breakIdx); + break; + } + + if (u_isdigit(c)) { + tagValue = tagValue*10 + u_charDigitValue(c); + break; + } + + errln("Syntax Error in test file at line %d, col %d", + lineNum, column); + goto end_test; + parseState = PARSE_COMMENT; + break; + } + + + if (U_FAILURE(status)) { + errln("ICU Error %s while parsing test file at line %d.", + u_errorName(status), lineNum); + goto end_test; + status = U_ZERO_ERROR; + } + + } + +end_test: + delete tp.bi; + delete tp.expectedBreaks; + delete tp.srcLine; + delete tp.srcCol; + delete [] testFile; +#endif +} + + +//------------------------------------------------------------------------------- +// +// ReadAndConvertFile Read a text data file, convert it to UChars, and +// return the datain one big UChar * buffer, which the caller must delete. +// +// TODO: This is a clone of RegexTest::ReadAndConvertFile. +// Move this function to some common place. +// +//-------------------------------------------------------------------------------- +UChar *RBBITest::ReadAndConvertFile(const char *fileName, int &ulen, UErrorCode &status) { + UChar *retPtr = NULL; + char *fileBuf = NULL; + UConverter* conv = NULL; + FILE *f = NULL; + + ulen = 0; + if (U_FAILURE(status)) { + return retPtr; + } + + // + // Open the file. + // + f = fopen(fileName, "rb"); + if (f == 0) { + errln("Error opening test data file %s\n", fileName); + status = U_FILE_ACCESS_ERROR; + return NULL; + } + // + // Read it in + // + int fileSize; + int amt_read; + + fseek( f, 0, SEEK_END); + fileSize = ftell(f); + fileBuf = new char[fileSize]; + fseek(f, 0, SEEK_SET); + amt_read = fread(fileBuf, 1, fileSize, f); + if (amt_read != fileSize || fileSize <= 0) { + errln("Error reading test data file."); + goto cleanUpAndReturn; + } + + // + // Look for a Unicode Signature (BOM) on the data just read + // + int32_t signatureLength; + const char * fileBufC; + const char* encoding; + + fileBufC = fileBuf; + encoding = ucnv_detectUnicodeSignature( + fileBuf, fileSize, &signatureLength, &status); + if(encoding!=NULL ){ + fileBufC += signatureLength; + fileSize -= signatureLength; + } + + // + // Open a converter to take the rule file to UTF-16 + // + conv = ucnv_open(encoding, &status); + if (U_FAILURE(status)) { + goto cleanUpAndReturn; + } + + // + // Convert the rules to UChar. + // Preflight first to determine required buffer size. + // + ulen = ucnv_toUChars(conv, + NULL, // dest, + 0, // destCapacity, + fileBufC, + fileSize, + &status); + if (status == U_BUFFER_OVERFLOW_ERROR) { + // Buffer Overflow is expected from the preflight operation. + status = U_ZERO_ERROR; + + retPtr = new UChar[ulen+1]; + ucnv_toUChars(conv, + retPtr, // dest, + ulen+1, + fileBufC, + fileSize, + &status); + } + +cleanUpAndReturn: + fclose(f); + delete []fileBuf; + ucnv_close(conv); + if (U_FAILURE(status)) { + errln("ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status)); + delete retPtr; + retPtr = 0; + ulen = 0; + }; + return retPtr; +} + + +//-------------------------------------------------------------------------------------------- +// +// Exhaustive Tests, using Unicode Data Files. +// +//-------------------------------------------------------------------------------------------- + +// +// Token level scanner for the Unicode Line Break Test Data file. +// Return the next token, as follows: +// >= 0: a UChar32 character, scanned from hex in the file. +// -1: a break position, a division sign in the file. +// -2: end of rule. A new line in the file. +// -3: end of file. No more rules. +// -4: Error +// +// The scanner +// strips comments, ('#' to end of line) +// Recognizes CR, CR/LF and LF as new lines. +// Skips over spaces and Xs (don't break here) in the data. +// +struct ScanState { + int32_t fPeekChar; + UBool fPeeked; + int32_t fLineNum; + FILE *fFile; + ScanState() :fPeeked(FALSE), fLineNum(0), fFile(NULL) {}; +}; + +// Literal characters that are of interest. In hex to keep EBCDIC based machines happy. +// The data itself is latin-1 on all platforms. +static const int32_t chSpace = 0x20; +static const int32_t chTab = 0x09; +static const int32_t chCR = 0x0D; +static const int32_t chLF = 0x0A; +static const int32_t chHash = 0x23; +static const int32_t chMult = 0xD7; +static const int32_t chDivide = 0xF7; + +static int32_t nextLBDToken(ScanState *s) { + int32_t c; + + // Read characters from the input file until we get something interesting + // to return. The file is in latin-1 encoding. + for (;;) { + // Get the next character to look at, + if (s->fPeeked) { + c = s->fPeekChar; + s->fPeeked = FALSE; + } else { + c = getc(s->fFile); + } + + // EOF. Return immediately. + if (c == EOF) { + return -3; + } + + // Spaces. Treat the multiply sign as a space - it indicates a no-break position + // in the data, and the test program doesn't want to see them. + // Continue the next char loop, looking for something significant. + if (c == chSpace || c == chTab || c == chMult) { + continue; + } + + // Divide sign. Indicates an expected break position. + if (c == chDivide) { + return -1; + } + + // New Line Handling. Keep track of line number in the file, which in turn + // requires keeping track of CR/LF as a single new line. + if (c == chCR) { + s->fLineNum++; + s->fPeekChar = getc(s->fFile); + if (s->fPeekChar != chLF) {s->fPeeked = TRUE;}; + return -2; + } + if (c == chLF) { + s->fLineNum++; + return -2; + } + + // Comments. Consume everything up to the next new line. + if (c == chHash) { + do { + c = getc(s->fFile); + } while (!(c == EOF || c == chCR || c == chLF)); + s->fPeekChar = c; + s->fPeeked = TRUE; + return nextLBDToken(s); + } + + // Scan a hex character (UChar32) value. + if (u_digit(c, 16) >= 0) { + int32_t v = u_digit(c, 16); + for (;;) { + c = getc(s->fFile); + if (u_digit(c, 16) < 0) {break;}; + v <<= 4; + v += u_digit(c, 16); + } + s->fPeekChar = c; + s->fPeeked = TRUE; + return v; + } + + // Error. Character was something unexpected. + return -4; + } +} + + + +void RBBITest::TestLineBreakData() { + + UErrorCode status = U_ZERO_ERROR; + UnicodeString testString; + UVector expectedBreaks(status); + ScanState ss; + int32_t tok; + + BreakIterator *bi = BreakIterator::createLineInstance(Locale::getDefault(), status); + if (U_FAILURE(status)) { + errln("Failure creating break iterator"); + return; + } + + const char * lbdfName = "LBTest.txt"; + + // Open the test data file. + // TODO: a proper way to handle this data. + ss.fFile = fopen(lbdfName, "rb"); + if (ss.fFile == NULL) { + logln("Unable to open Line Break Test Data file. Skipping test."); + delete bi; + return; + } + + // Loop once per line from the test data file. + for (;;) { + // Zero out test data from previous line. + testString.truncate(0); + expectedBreaks.removeAllElements(); + + // Read one test's (line's) worth of data from the file. + // Loop once per token on the input file line. + for(;;) { + tok = nextLBDToken(&ss); + + // If we scanned a character number in the file. + // save it in the test data array. + if (tok >= 0) { + testString.append((UChar32)tok); + continue; + } + + // If we scanned a break position in the data, record it. + if (tok == -1) { + expectedBreaks.addElement(testString.length(), status); + continue; + } + + // If we scanned a new line, or EOF + // drop out of scan loop and run the test case. + if (tok == -2 || tok == -3) {break;}; + + // None of above. Error. + errln("Failure: Unrecognized data format, test file line %d", ss.fLineNum); + break; + } + + // If this line from the test data file actually contained test data, + // run the test. + if (testString.length() > 0) { + int32_t pos; // Break Position in the test string + int32_t expectedI = 0; // Index of expected break position in vector of same. + int32_t expectedPos; // Expected break position (index into test string) + + bi->setText(testString); + pos = bi->first(); + pos = bi->next(); + + for (; pos != BreakIterator::DONE; ) { + expectedPos = expectedBreaks.elementAti(expectedI); + if (pos < expectedPos) { + errln("Failure: Test file line %d, unexpected break found at position %d", + ss.fLineNum, pos); + break; + } + if (pos > expectedPos) { + errln("Failure: Test file line %d, failed to find break at position %d", + ss.fLineNum, expectedPos); + break; + } + pos = bi->next(); + expectedI++; + } + } + + // If we've hit EOF on the input file, we're done. + if (tok == -3) { + break; + } + + } + + fclose(ss.fFile); + delete bi; + +} + +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + +//--------------------------------------------------------------------------------------- +// +// classs RBBIMonkeyKind +// +// Monkey Test for Break Iteration +// Abstract interface class. Concrete derived classes independently +// implement the break rules for different iterator types. +// +// The Monkey Test itself uses doesn't know which type of break iterator it is +// testing, but works purely in terms of the interface defined here. +// +//--------------------------------------------------------------------------------------- +class RBBIMonkeyKind { +public: + // Return a UVector of UnicodeSets, representing the character classes used + // for this type of iterator. + virtual UVector *charClasses() = 0; + + // Set the test text on which subsequent calls to next() will operate + virtual void setText(const UnicodeString &s) = 0; + + // Find the next break postion, starting from the prev break position, or from zero. + // Return -1 after reaching end of string. + virtual int32_t next(int32_t i) = 0; + + virtual ~RBBIMonkeyKind(); + UErrorCode deferredStatus; + + +protected: + RBBIMonkeyKind(); + +private: +}; + +RBBIMonkeyKind::RBBIMonkeyKind() { + deferredStatus = U_ZERO_ERROR; +} + +RBBIMonkeyKind::~RBBIMonkeyKind() { +} + + +//---------------------------------------------------------------------------------------- +// +// Random Numbers. Similar to standard lib rand() and srand() +// Not using library to +// 1. Get same results on all platforms. +// 2. Get access to current seed, to more easily reproduce failures. +// +//--------------------------------------------------------------------------------------- +static uint32_t m_seed = 1; + +static uint32_t m_rand() +{ + m_seed = m_seed * 1103515245 + 12345; + return (uint32_t)(m_seed/65536) % 32768; +} + + +//------------------------------------------------------------------------------------------ +// +// class RBBICharMonkey Character (Grapheme Cluster) specific implementation +// of RBBIMonkeyKind. +// +//------------------------------------------------------------------------------------------ +class RBBICharMonkey: public RBBIMonkeyKind { +public: + RBBICharMonkey(); + virtual ~RBBICharMonkey(); + virtual UVector *charClasses(); + virtual void setText(const UnicodeString &s); + virtual int32_t next(int32_t i); +private: + UVector *fSets; + + UnicodeSet *fCRLFSet; + UnicodeSet *fControlSet; + UnicodeSet *fExtendSet; + UnicodeSet *fHangulSet; + UnicodeSet *fAnySet; + + RegexMatcher *fMatcher; + const UnicodeString *fText; +}; + + +RBBICharMonkey::RBBICharMonkey() { + UErrorCode status = U_ZERO_ERROR; + + fText = NULL; + fMatcher = new RegexMatcher("\\X", 0, status); // Pattern to match a grampheme cluster + + fCRLFSet = new UnicodeSet("[\\r\\n]", status); + fControlSet = new UnicodeSet("[[\\p{Zl}\\p{Zp}\\p{Cc}\\p{Cf}]-[\\n]-[\\r]-\\p{Grapheme_Extend}]", status); + fExtendSet = new UnicodeSet("[\\p{Grapheme_Extend}]", status); + fHangulSet = new UnicodeSet( + "[\\p{Hangul_Syllable_Type=L}\\p{Hangul_Syllable_Type=L}\\p{Hangul_Syllable_Type=T}" + "\\p{Hangul_Syllable_Type=LV}\\p{Hangul_Syllable_Type=LVT}]", status); + fAnySet = new UnicodeSet("[\\u0000-\\U0010ffff]", status); + + fSets = new UVector(status); + fSets->addElement(fCRLFSet, status); + fSets->addElement(fControlSet, status); + fSets->addElement(fExtendSet, status); + fSets->addElement(fHangulSet, status); + fSets->addElement(fAnySet, status); + if (U_FAILURE(status)) { + deferredStatus = status; + } +} + + +void RBBICharMonkey::setText(const UnicodeString &s) { + fText = &s; + fMatcher->reset(s); +} + + +int32_t RBBICharMonkey::next(int32_t i) { + UErrorCode status = U_ZERO_ERROR; + int32_t retVal = -1; + + if (fMatcher->find(i, status)) { + retVal = fMatcher->end(status); + } + if (U_FAILURE(status)){ + retVal = -1; + } + return retVal; +} + + +UVector *RBBICharMonkey::charClasses() { + return fSets; +} + + +RBBICharMonkey::~RBBICharMonkey() { + delete fSets; + delete fCRLFSet; + delete fControlSet; + delete fExtendSet; + delete fHangulSet; + delete fAnySet; + + delete fMatcher; +} + +//------------------------------------------------------------------------------------------ +// +// class RBBIWordMonkey Word Break specific implementation +// of RBBIMonkeyKind. +// +//------------------------------------------------------------------------------------------ +class RBBIWordMonkey: public RBBIMonkeyKind { +public: + RBBIWordMonkey(); + virtual ~RBBIWordMonkey(); + virtual UVector *charClasses(); + virtual void setText(const UnicodeString &s); + virtual int32_t next(int32_t i); +private: + UVector *fSets; + + UnicodeSet *fKatakanaSet; + UnicodeSet *fALetterSet; + UnicodeSet *fMidLetterSet; + UnicodeSet *fMidNumSet; + UnicodeSet *fNumericSet; + UnicodeSet *fFormatSet; + UnicodeSet *fOtherSet; + UnicodeSet *fExtendSet; + UnicodeSet *fExtendNumLetSet; + + RegexMatcher *fMatcher; + + const UnicodeString *fText; +}; + + +RBBIWordMonkey::RBBIWordMonkey() +{ + UErrorCode status = U_ZERO_ERROR; + + + fSets = new UVector(status); + + fALetterSet = new UnicodeSet("[\\p{Word_Break = ALetter}" + "[\\p{Line_Break = Complex_Context}" + "-\\p{Grapheme_Cluster_Break = Extend}" + "-\\p{Grapheme_Cluster_Break = Control}]]", status); + //fALetterSet = new UnicodeSet("[\\p{Word_Break = ALetter}]", status); + fKatakanaSet = new UnicodeSet("[\\p{Word_Break = Katakana}-[\\uff9e\\uff9f]]", status); + fMidLetterSet = new UnicodeSet("[\\p{Word_Break = MidLetter}]", status); + fMidNumSet = new UnicodeSet("[\\p{Word_Break = MidNum}]", status); + fNumericSet = new UnicodeSet("[\\p{Word_Break = Numeric}]", status); + fFormatSet = new UnicodeSet("[\\p{Word_Break = Format}]", status); + fExtendNumLetSet = new UnicodeSet("[\\p{Word_Break = ExtendNumLet}]", status); + //fExtendSet = new UnicodeSet("[\\p{Word_Break = Extend}]", status); + fExtendSet = new UnicodeSet("[\\p{Grapheme_Cluster_Break = Extend}\\uff9e\\uff9f]", status); + + fOtherSet = new UnicodeSet(); + if(U_FAILURE(status)) { + deferredStatus = status; + return; + } + + fOtherSet->complement(); + fOtherSet->removeAll(*fKatakanaSet); + fOtherSet->removeAll(*fALetterSet); + fOtherSet->removeAll(*fMidLetterSet); + fOtherSet->removeAll(*fMidNumSet); + fOtherSet->removeAll(*fNumericSet); + fOtherSet->removeAll(*fExtendNumLetSet); + fOtherSet->removeAll(*fFormatSet); + fOtherSet->removeAll(*fExtendSet); + + fSets->addElement(fALetterSet, status); + fSets->addElement(fKatakanaSet, status); + fSets->addElement(fMidLetterSet, status); + fSets->addElement(fMidNumSet, status); + fSets->addElement(fNumericSet, status); + fSets->addElement(fFormatSet, status); + fSets->addElement(fExtendSet, status); + fSets->addElement(fOtherSet, status); + fSets->addElement(fExtendNumLetSet, status); + + + if (U_FAILURE(status)) { + deferredStatus = status; + } +} + +void RBBIWordMonkey::setText(const UnicodeString &s) { + fText = &s; +} + + +int32_t RBBIWordMonkey::next(int32_t prevPos) { + int p0, p1, p2, p3; // Indices of the significant code points around the + // break position being tested. The candidate break + // location is before p2. + + int breakPos = -1; + + UChar32 c0, c1, c2, c3; // The code points at p0, p1, p2 & p3. + + // Prev break at end of string. return DONE. + if (prevPos >= fText->length()) { + return -1; + } + p0 = p1 = p2 = p3 = prevPos; + c3 = fText->char32At(prevPos); + c0 = c1 = c2 = 0; + + // Loop runs once per "significant" character position in the input text. + for (;;) { + // Move all of the positions forward in the input string. + p0 = p1; c0 = c1; + p1 = p2; c1 = c2; + p2 = p3; c2 = c3; + + // Advancd p3 by X(Extend | Format)* Rule 4 + do { + p3 = fText->moveIndex32(p3, 1); + c3 = fText->char32At(p3); + } + while (fFormatSet->contains(c3) || fExtendSet->contains(c3)); + + + if (p1 == p2) { + // Still warming up the loop. (won't work with zero length strings, but we don't care) + continue; + } + if (p2 == fText->length()) { + // Reached end of string. Always a break position. + break; + } + + // Rule (3) CR x LF + // No Extend or Format characters may appear between the CR and LF, + // which requires the additional check for p2 immediately following p1. + // + if (c1==0x0D && c2==0x0A && p1==(p2-1)) { + continue; + } + + // Rule (5). ALetter x ALetter + if (fALetterSet->contains(c1) && + fALetterSet->contains(c2)) { + continue; + } + + // Rule (6) ALetter x (MidLetter | MidNumLet) ALetter + // + // Also incorporates rule 7 by skipping pos ahead to position of the + // terminating ALetter. + if ( fALetterSet->contains(c1) && + fMidLetterSet->contains(c2) && + fALetterSet->contains(c3)) { + continue; + } + + + // Rule (7) ALetter (MidLetter | MidNumLet) x ALetter + if (fALetterSet->contains(c0) && + (fMidLetterSet->contains(c1) ) && + fALetterSet->contains(c2)) { + continue; + } + + // Rule (8) Numeric x Numeric + if (fNumericSet->contains(c1) && + fNumericSet->contains(c2)) { + continue; + } + + // Rule (9) ALetter x Numeric + if (fALetterSet->contains(c1) && + fNumericSet->contains(c2)) { + continue; + } + + // Rule (10) Numeric x ALetter + if (fNumericSet->contains(c1) && + fALetterSet->contains(c2)) { + continue; + } + + // Rule (11) Numeric (MidNum | MidNumLet) x Numeric + if ( fNumericSet->contains(c0) && + fMidNumSet->contains(c1) && + fNumericSet->contains(c2)) { + continue; + } + + // Rule (12) Numeric x (MidNum | MidNumLet) Numeric + if (fNumericSet->contains(c1) && + fMidNumSet->contains(c2) && + fNumericSet->contains(c3)) { + continue; + } + + // Rule (13) Katakana x Katakana + if (fKatakanaSet->contains(c1) && + fKatakanaSet->contains(c2)) { + continue; + } + + // Rule 13a + if ((fALetterSet->contains(c1) || fNumericSet->contains(c1) || + fKatakanaSet->contains(c1) || fExtendNumLetSet->contains(c1)) && + fExtendNumLetSet->contains(c2)) { + continue; + } + + // Rule 13b + if (fExtendNumLetSet->contains(c1) && + (fALetterSet->contains(c2) || fNumericSet->contains(c2) || + fKatakanaSet->contains(c2))) { + continue; + } + + // Rule 14. Break found here. + break; + } + + breakPos = p2; + return breakPos; +} + + +UVector *RBBIWordMonkey::charClasses() { + return fSets; +} + + +RBBIWordMonkey::~RBBIWordMonkey() { + delete fSets; + delete fKatakanaSet; + delete fALetterSet; + delete fMidLetterSet; + delete fMidNumSet; + delete fNumericSet; + delete fFormatSet; + delete fExtendSet; + delete fExtendNumLetSet; + delete fOtherSet; +} + + + + +//------------------------------------------------------------------------------------------ +// +// class RBBISentMonkey Sentence Break specific implementation +// of RBBIMonkeyKind. +// +//------------------------------------------------------------------------------------------ +class RBBISentMonkey: public RBBIMonkeyKind { +public: + RBBISentMonkey(); + virtual ~RBBISentMonkey(); + virtual UVector *charClasses(); + virtual void setText(const UnicodeString &s); + virtual int32_t next(int32_t i); +private: + int moveBack(int posFrom); + int moveForward(int posFrom); + UChar32 cAt(int pos); + + UVector *fSets; + + UnicodeSet *fSepSet; + UnicodeSet *fFormatSet; + UnicodeSet *fSpSet; + UnicodeSet *fLowerSet; + UnicodeSet *fUpperSet; + UnicodeSet *fOLetterSet; + UnicodeSet *fNumericSet; + UnicodeSet *fATermSet; + UnicodeSet *fSTermSet; + UnicodeSet *fCloseSet; + UnicodeSet *fOtherSet; + UnicodeSet *fExtendSet; + + const UnicodeString *fText; + +}; + +RBBISentMonkey::RBBISentMonkey() +{ + UErrorCode status = U_ZERO_ERROR; + + fSets = new UVector(status); + + fSepSet = new UnicodeSet("[\\p{Sentence_Break = Sep}]", status); + fFormatSet = new UnicodeSet("[\\p{Sentence_Break = Format}]", status); + fSpSet = new UnicodeSet("[\\p{Sentence_Break = Sp}]", status); + fLowerSet = new UnicodeSet("[\\p{Sentence_Break = Lower}]", status); + fUpperSet = new UnicodeSet("[\\p{Sentence_Break = Upper}]", status); + fOLetterSet = new UnicodeSet("[\\p{Sentence_Break = OLetter}-[\\uff9e\\uff9f]]", status); + fNumericSet = new UnicodeSet("[\\p{Sentence_Break = Numeric}]", status); + fATermSet = new UnicodeSet("[\\p{Sentence_Break = ATerm}]", status); + fSTermSet = new UnicodeSet("[\\p{Sentence_Break = STerm}]", status); + fCloseSet = new UnicodeSet("[\\p{Sentence_Break = Close}]", status); + fExtendSet = new UnicodeSet("[\\p{Grapheme_Extend}\\uff9e\\uff9f]", status); + fOtherSet = new UnicodeSet(); + + if(U_FAILURE(status)) { + deferredStatus = status; + return; + } + + fOtherSet->complement(); + fOtherSet->removeAll(*fSepSet); + fOtherSet->removeAll(*fFormatSet); + fOtherSet->removeAll(*fSpSet); + fOtherSet->removeAll(*fLowerSet); + fOtherSet->removeAll(*fUpperSet); + fOtherSet->removeAll(*fOLetterSet); + fOtherSet->removeAll(*fNumericSet); + fOtherSet->removeAll(*fATermSet); + fOtherSet->removeAll(*fSTermSet); + fOtherSet->removeAll(*fCloseSet); + fOtherSet->removeAll(*fExtendSet); + + fSets->addElement(fSepSet, status); + fSets->addElement(fFormatSet, status); + + fSets->addElement(fSpSet, status); + fSets->addElement(fLowerSet, status); + fSets->addElement(fUpperSet, status); + fSets->addElement(fOLetterSet, status); + fSets->addElement(fNumericSet, status); + fSets->addElement(fATermSet, status); + fSets->addElement(fSTermSet, status); + fSets->addElement(fCloseSet, status); + fSets->addElement(fOtherSet, status); + fSets->addElement(fExtendSet, status); + + if (U_FAILURE(status)) { + deferredStatus = status; + } +} + + + +void RBBISentMonkey::setText(const UnicodeString &s) { + fText = &s; +} + +UVector *RBBISentMonkey::charClasses() { + return fSets; +} + + +// moveBack() Find the "significant" code point preceding the index i. +// Skips over ($Extend | $Format)* . +// +int RBBISentMonkey::moveBack(int i) { + if (i <= 0) { + return -1; + } + UChar32 c; + int32_t j = i; + do { + j = fText->moveIndex32(j, -1); + c = fText->char32At(j); + } + while (j>0 &&(fFormatSet->contains(c) || fExtendSet->contains(c))); + return j; + + } + + +int RBBISentMonkey::moveForward(int i) { + if (i>=fText->length()) { + return fText->length(); + } + UChar32 c; + int32_t j = i; + do { + j = fText->moveIndex32(j, 1); + c = cAt(j); + } + while (fFormatSet->contains(c) || fExtendSet->contains(c)); + return j; +} + +UChar32 RBBISentMonkey::cAt(int pos) { + if (pos<0 || pos>=fText->length()) { + return -1; + } else { + return fText->char32At(pos); + } +} + +int32_t RBBISentMonkey::next(int32_t prevPos) { + int p0, p1, p2, p3; // Indices of the significant code points around the + // break position being tested. The candidate break + // location is before p2. + + int breakPos = -1; + + UChar32 c0, c1, c2, c3; // The code points at p0, p1, p2 & p3. + UChar32 c; + + // Prev break at end of string. return DONE. + if (prevPos >= fText->length()) { + return -1; + } + p0 = p1 = p2 = p3 = prevPos; + c3 = fText->char32At(prevPos); + c0 = c1 = c2 = 0; + + // Loop runs once per "significant" character position in the input text. + for (;;) { + // Move all of the positions forward in the input string. + p0 = p1; c0 = c1; + p1 = p2; c1 = c2; + p2 = p3; c2 = c3; + + // Advancd p3 by X(Extend | Format)* Rule 4 + p3 = moveForward(p3); + c3 = cAt(p3); + + // Rule (3) CR x LF + if (c1==0x0d && c2==0x0a && p2==(p1+1)) { + continue; + } + + // Rule (4). Sep <break> + if (fSepSet->contains(c1)) { + p2 = p1+1; // Separators don't combine with Extend or Format. + break; + } + + if (p2 >= fText->length()) { + // Reached end of string. Always a break position. + break; + } + + if (p2 == prevPos) { + // Still warming up the loop. (won't work with zero length strings, but we don't care) + continue; + } + + // Rule (6). ATerm x Numeric + if (fATermSet->contains(c1) && fNumericSet->contains(c2)) { + continue; + } + + // Rule (7). Upper ATerm x Uppper + if (fUpperSet->contains(c0) && fATermSet->contains(c1) && fUpperSet->contains(c2)) { + continue; + } + + // Rule (8) ATerm Close* Sp* x (not (OLettter | Upper | Lower | Sep | STerm | ATerm))* Lower + // Note: STerm | ATerm are added to the negated part of the expression by a + // note to the Unicode 5.0 documents. + int p8 = p1; + while (fSpSet->contains(cAt(p8))) { + p8 = moveBack(p8); + } + while (fCloseSet->contains(cAt(p8))) { + p8 = moveBack(p8); + } + if (fATermSet->contains(cAt(p8))) { + p8=p2; + for (;;) { + c = cAt(p8); + if (c==-1 || fOLetterSet->contains(c) || fUpperSet->contains(c) || + fLowerSet->contains(c) || fSepSet->contains(c) || + fATermSet->contains(c) || fSTermSet->contains(c)) { + break; + } + p8 = moveForward(p8); + } + if (fLowerSet->contains(cAt(p8))) { + continue; + } + } + + // Rule 8a (STerm | ATerm) Close* Sp* x (STerm | ATerm); + if (fSTermSet->contains(c2) || fATermSet->contains(c2)) { + p8 = p1; + while (fSpSet->contains(cAt(p8))) { + p8 = moveBack(p8); + } + while (fCloseSet->contains(cAt(p8))) { + p8 = moveBack(p8); + } + c = cAt(p8); + if (fSTermSet->contains(c) || fATermSet->contains(c)) { + continue; + } + } + + // Rule (9) (STerm | ATerm) Close* x (Close | Sp | Sep) + int p9 = p1; + while (fCloseSet->contains(cAt(p9))) { + p9 = moveBack(p9); + } + c = cAt(p9); + if ((fSTermSet->contains(c) || fATermSet->contains(c))) { + if (fCloseSet->contains(c2) || fSpSet->contains(c2) || fSepSet->contains(c2)) { + continue; + } + } + + // Rule (10) (Sterm | ATerm) Close* Sp* x (Sp | Sep) + int p10 = p1; + while (fSpSet->contains(cAt(p10))) { + p10 = moveBack(p10); + } + while (fCloseSet->contains(cAt(p10))) { + p10 = moveBack(p10); + } + if (fSTermSet->contains(cAt(p10)) || fATermSet->contains(cAt(p10))) { + if (fSpSet->contains(c2) || fSepSet->contains(c2)) { + continue; + } + } + + // Rule (11) (STerm | ATerm) Close* Sp* <break> + int p11 = p1; + while (fSpSet->contains(cAt(p11))) { + p11 = moveBack(p11); + } + while (fCloseSet->contains(cAt(p11))) { + p11 = moveBack(p11); + } + if (fSTermSet->contains(cAt(p11)) || fATermSet->contains(cAt(p11))) { + break; + } + + // Rule (12) Any x Any + continue; + } + breakPos = p2; + return breakPos; +} + +RBBISentMonkey::~RBBISentMonkey() { + delete fSets; + delete fSepSet; + delete fFormatSet; + delete fSpSet; + delete fLowerSet; + delete fUpperSet; + delete fOLetterSet; + delete fNumericSet; + delete fATermSet; + delete fSTermSet; + delete fCloseSet; + delete fOtherSet; + delete fExtendSet; +} + + + +//------------------------------------------------------------------------------------------- +// +// RBBILineMonkey +// +//------------------------------------------------------------------------------------------- + +class RBBILineMonkey: public RBBIMonkeyKind { +public: + RBBILineMonkey(); + virtual ~RBBILineMonkey(); + virtual UVector *charClasses(); + virtual void setText(const UnicodeString &s); + virtual int32_t next(int32_t i); + virtual void rule9Adjust(int32_t pos, UChar32 *posChar, int32_t *nextPos, UChar32 *nextChar); +private: + UVector *fSets; + + UnicodeSet *fBK; + UnicodeSet *fCR; + UnicodeSet *fLF; + UnicodeSet *fCM; + UnicodeSet *fNL; + UnicodeSet *fSG; + UnicodeSet *fWJ; + UnicodeSet *fZW; + UnicodeSet *fGL; + UnicodeSet *fCB; + UnicodeSet *fSP; + UnicodeSet *fB2; + UnicodeSet *fBA; + UnicodeSet *fBB; + UnicodeSet *fHY; + UnicodeSet *fH2; + UnicodeSet *fH3; + UnicodeSet *fCL; + UnicodeSet *fEX; + UnicodeSet *fIN; + UnicodeSet *fJL; + UnicodeSet *fJV; + UnicodeSet *fJT; + UnicodeSet *fNS; + UnicodeSet *fOP; + UnicodeSet *fQU; + UnicodeSet *fIS; + UnicodeSet *fNU; + UnicodeSet *fPO; + UnicodeSet *fPR; + UnicodeSet *fSY; + UnicodeSet *fAI; + UnicodeSet *fAL; + UnicodeSet *fID; + UnicodeSet *fSA; + UnicodeSet *fXX; + + BreakIterator *fCharBI; + + const UnicodeString *fText; + int32_t *fOrigPositions; + + RegexMatcher *fNumberMatcher; + RegexMatcher *fLB11Matcher; +}; + + +RBBILineMonkey::RBBILineMonkey() +{ + UErrorCode status = U_ZERO_ERROR; + + fSets = new UVector(status); + + fBK = new UnicodeSet("[\\p{Line_Break=BK}]", status); + fCR = new UnicodeSet("[\\p{Line_break=CR}]", status); + fLF = new UnicodeSet("[\\p{Line_break=LF}]", status); + fCM = new UnicodeSet("[\\p{Line_break=CM}]", status); + fNL = new UnicodeSet("[\\p{Line_break=NL}]", status); + fWJ = new UnicodeSet("[\\p{Line_break=WJ}]", status); + fZW = new UnicodeSet("[\\p{Line_break=ZW}]", status); + fGL = new UnicodeSet("[\\p{Line_break=GL}]", status); + fCB = new UnicodeSet("[\\p{Line_break=CB}]", status); + fSP = new UnicodeSet("[\\p{Line_break=SP}]", status); + fB2 = new UnicodeSet("[\\p{Line_break=B2}]", status); + fBA = new UnicodeSet("[\\p{Line_break=BA}]", status); + fBB = new UnicodeSet("[\\p{Line_break=BB}]", status); + fHY = new UnicodeSet("[\\p{Line_break=HY}]", status); + fH2 = new UnicodeSet("[\\p{Line_break=H2}]", status); + fH3 = new UnicodeSet("[\\p{Line_break=H3}]", status); + fCL = new UnicodeSet("[\\p{Line_break=CL}]", status); + fEX = new UnicodeSet("[\\p{Line_break=EX}]", status); + fIN = new UnicodeSet("[\\p{Line_break=IN}]", status); + fJL = new UnicodeSet("[\\p{Line_break=JL}]", status); + fJV = new UnicodeSet("[\\p{Line_break=JV}]", status); + fJT = new UnicodeSet("[\\p{Line_break=JT}]", status); + fNS = new UnicodeSet("[\\p{Line_break=NS}]", status); + fOP = new UnicodeSet("[\\p{Line_break=OP}]", status); + fQU = new UnicodeSet("[\\p{Line_break=QU}]", status); + fIS = new UnicodeSet("[\\p{Line_break=IS}]", status); + fNU = new UnicodeSet("[\\p{Line_break=NU}]", status); + fPO = new UnicodeSet("[\\p{Line_break=PO}]", status); + fPR = new UnicodeSet("[\\p{Line_break=PR}]", status); + fSY = new UnicodeSet("[\\p{Line_break=SY}]", status); + fAI = new UnicodeSet("[\\p{Line_break=AI}]", status); + fAL = new UnicodeSet("[\\p{Line_break=AL}]", status); + fID = new UnicodeSet("[\\p{Line_break=ID}]", status); + fSA = new UnicodeSet("[\\p{Line_break=SA}]", status); + fSG = new UnicodeSet("[\\ud800-\\udfff]", status); + fXX = new UnicodeSet("[\\p{Line_break=XX}]", status); + + if (U_FAILURE(status)) { + deferredStatus = status; + fCharBI = NULL; + fNumberMatcher = NULL; + return; + } + + fAL->addAll(*fXX); // Default behavior for XX is identical to AL + fAL->addAll(*fAI); // Default behavior for AI is identical to AL + fAL->addAll(*fSA); // Default behavior for SA is XX, which defaults to AL + fAL->addAll(*fSG); // Default behavior for SG is identical to AL. + + fSets->addElement(fBK, status); + fSets->addElement(fCR, status); + fSets->addElement(fLF, status); + fSets->addElement(fCM, status); + fSets->addElement(fNL, status); + fSets->addElement(fWJ, status); + fSets->addElement(fZW, status); + fSets->addElement(fGL, status); + fSets->addElement(fCB, status); + fSets->addElement(fSP, status); + fSets->addElement(fB2, status); + fSets->addElement(fBA, status); + fSets->addElement(fBB, status); + fSets->addElement(fHY, status); + fSets->addElement(fH2, status); + fSets->addElement(fH3, status); + fSets->addElement(fCL, status); + fSets->addElement(fEX, status); + fSets->addElement(fIN, status); + fSets->addElement(fJL, status); + fSets->addElement(fJT, status); + fSets->addElement(fJV, status); + fSets->addElement(fNS, status); + fSets->addElement(fOP, status); + fSets->addElement(fQU, status); + fSets->addElement(fIS, status); + fSets->addElement(fNU, status); + fSets->addElement(fPO, status); + fSets->addElement(fPR, status); + fSets->addElement(fSY, status); + fSets->addElement(fAI, status); + fSets->addElement(fAL, status); + fSets->addElement(fID, status); + fSets->addElement(fWJ, status); + fSets->addElement(fSA, status); + fSets->addElement(fSG, status); + + fNumberMatcher = new RegexMatcher( + "((\\p{Line_Break=PR}|\\p{Line_Break=PO})\\p{Line_Break=CM}*)?" + "((\\p{Line_Break=OP}|\\p{Line_Break=HY})\\p{Line_Break=CM}*)?" + "\\p{Line_Break=NU}\\p{Line_Break=CM}*" + "((\\p{Line_Break=NU}|\\p{Line_Break=IS}|\\p{Line_Break=SY})\\p{Line_Break=CM}*)*" + "(\\p{Line_Break=CL}\\p{Line_Break=CM}*)?" + "((\\p{Line_Break=PR}|\\p{Line_Break=PO})\\p{Line_Break=CM}*)?", + 0, status); + + fCharBI = BreakIterator::createCharacterInstance(Locale::getEnglish(), status); + + if (U_FAILURE(status)) { + deferredStatus = status; + } +} + + +void RBBILineMonkey::setText(const UnicodeString &s) { + fText = &s; + fCharBI->setText(s); + fNumberMatcher->reset(s); +} + +// +// rule9Adjust +// Line Break TR rules 9 and 10 implementation. +// This deals with combining marks and other sequences that +// that must be treated as if they were something other than what they actually are. +// +// This is factored out into a separate function because it must be applied twice for +// each potential break, once to the chars before the position being checked, then +// again to the text following the possible break. +// +void RBBILineMonkey::rule9Adjust(int32_t pos, UChar32 *posChar, int32_t *nextPos, UChar32 *nextChar) { + if (pos == -1) { + // Invalid initial position. Happens during the warmup iteration of the + // main loop in next(). + return; + } + + int32_t nPos = *nextPos; + + // LB 9 Keep combining sequences together. + // advance over any CM class chars. Note that Line Break CM is different + // from the normal Grapheme Extend property. + if (!(fSP->contains(*posChar) || fBK->contains(*posChar) || *posChar==0x0d || + *posChar==0x0a ||fNL->contains(*posChar) || fZW->contains(*posChar))) { + for (;;) { + *nextChar = fText->char32At(nPos); + if (!fCM->contains(*nextChar)) { + break; + } + nPos = fText->moveIndex32(nPos, 1); + } + } + + + // LB 9 Treat X CM* as if it were x. + // No explicit action required. + + // LB 10 Treat any remaining combining mark as AL + if (fCM->contains(*posChar)) { + *posChar = 0x41; // thisChar = 'A'; + } + + // Push the updated nextPos and nextChar back to our caller. + // This only makes a difference if posChar got bigger by consuming a + // combining sequence. + *nextPos = nPos; + *nextChar = fText->char32At(nPos); +} + + + +int32_t RBBILineMonkey::next(int32_t startPos) { + UErrorCode status = U_ZERO_ERROR; + int32_t pos; // Index of the char following a potential break position + UChar32 thisChar; // Character at above position "pos" + + int32_t prevPos; // Index of the char preceding a potential break position + UChar32 prevChar; // Character at above position. Note that prevChar + // and thisChar may not be adjacent because combining + // characters between them will be ignored. + + int32_t nextPos; // Index of the next character following pos. + // Usually skips over combining marks. + int32_t nextCPPos; // Index of the code point following "pos." + // May point to a combining mark. + int32_t tPos; // temp value. + UChar32 c; + + if (startPos >= fText->length()) { + return -1; + } + + + // Initial values for loop. Loop will run the first time without finding breaks, + // while the invalid values shift out and the "this" and + // "prev" positions are filled in with good values. + pos = prevPos = -1; // Invalid value, serves as flag for initial loop iteration. + thisChar = prevChar = 0; + nextPos = nextCPPos = startPos; + + + // Loop runs once per position in the test text, until a break position + // is found. + for (;;) { + prevPos = pos; + prevChar = thisChar; + + pos = nextPos; + thisChar = fText->char32At(pos); + + nextCPPos = fText->moveIndex32(pos, 1); + nextPos = nextCPPos; + + // Rule LB2 - Break at end of text. + if (pos >= fText->length()) { + break; + } + + // Rule LB 9 - adjust for combining sequences. + // We do this one out-of-order because the adjustment does not change anything + // that would match rules LB 3 - LB 6, but after the adjustment, LB 3-6 do need to + // be applied. + rule9Adjust(prevPos, &prevChar, &pos, &thisChar); + nextCPPos = nextPos = fText->moveIndex32(pos, 1); + c = fText->char32At(nextPos); + rule9Adjust(pos, &thisChar, &nextPos, &c); + + // If the loop is still warming up - if we haven't shifted the initial + // -1 positions out of prevPos yet - loop back to advance the + // position in the input without any further looking for breaks. + if (prevPos == -1) { + continue; + } + + // LB 4 Always break after hard line breaks, + if (fBK->contains(prevChar)) { + break; + } + + // LB 5 Break after CR, LF, NL, but not inside CR LF + if (prevChar == 0x0d && thisChar == 0x0a) { + continue; + } + if (prevChar == 0x0d || + prevChar == 0x0a || + prevChar == 0x85) { + break; + } + + // LB 6 Don't break before hard line breaks + if (thisChar == 0x0d || thisChar == 0x0a || thisChar == 0x85 || + fBK->contains(thisChar)) { + continue; + } + + + // LB 7 Don't break before spaces or zero-width space. + if (fSP->contains(thisChar)) { + continue; + } + + if (fZW->contains(thisChar)) { + continue; + } + + // LB 8 Break after zero width space + if (fZW->contains(prevChar)) { + break; + } + + // LB 9, 10 Already done, at top of loop. + // + + + // LB 11 Do not break before or after WORD JOINER and related characters. + // x WJ + // WJ x + // + if (fWJ->contains(thisChar) || fWJ->contains(prevChar)) { + continue; + } + + // LB 12 + // (!SP) x GL + // GL x + if ((!fSP->contains(prevChar)) && fGL->contains(thisChar) || + fGL->contains(prevChar)) { + continue; + } + + + + // LB 13 Don't break before closings. + // NU x CL and NU x IS are not matched here so that they will + // fall into LB 17 and the more general number regular expression. + // + if (!fNU->contains(prevChar) && fCL->contains(thisChar) || + fEX->contains(thisChar) || + !fNU->contains(prevChar) && fIS->contains(thisChar) || + !fNU->contains(prevChar) && fSY->contains(thisChar)) { + continue; + } + + // LB 14 Don't break after OP SP* + // Scan backwards, checking for this sequence. + // The OP char could include combining marks, so we actually check for + // OP CM* SP* + // Another Twist: The Rule 67 fixes may have changed a SP CM + // sequence into a ID char, so before scanning back through spaces, + // verify that prevChar is indeed a space. The prevChar variable + // may differ from fText[prevPos] + tPos = prevPos; + if (fSP->contains(prevChar)) { + while (tPos > 0 && fSP->contains(fText->char32At(tPos))) { + tPos=fText->moveIndex32(tPos, -1); + } + } + while (tPos > 0 && fCM->contains(fText->char32At(tPos))) { + tPos=fText->moveIndex32(tPos, -1); + } + if (fOP->contains(fText->char32At(tPos))) { + continue; + } + + + // LB 15 QU SP* x OP + if (fOP->contains(thisChar)) { + // Scan backwards from prevChar to see if it is preceded by QU CM* SP* + int tPos = prevPos; + while (tPos>0 && fSP->contains(fText->char32At(tPos))) { + tPos = fText->moveIndex32(tPos, -1); + } + while (tPos>0 && fCM->contains(fText->char32At(tPos))) { + tPos = fText->moveIndex32(tPos, -1); + } + if (fQU->contains(fText->char32At(tPos))) { + continue; + } + } + + + + // LB 16 CL SP* x NS + // Scan backwards for SP* CM* CL + if (fNS->contains(thisChar)) { + int tPos = prevPos; + while (tPos>0 && fSP->contains(fText->char32At(tPos))) { + tPos = fText->moveIndex32(tPos, -1); + } + while (tPos>0 && fCM->contains(fText->char32At(tPos))) { + tPos = fText->moveIndex32(tPos, -1); + } + if (fCL->contains(fText->char32At(tPos))) { + continue; + } + } + + + // LB 17 B2 SP* x B2 + if (fB2->contains(thisChar)) { + // Scan backwards, checking for the B2 CM* SP* sequence. + tPos = prevPos; + if (fSP->contains(prevChar)) { + while (tPos > 0 && fSP->contains(fText->char32At(tPos))) { + tPos=fText->moveIndex32(tPos, -1); + } + } + while (tPos > 0 && fCM->contains(fText->char32At(tPos))) { + tPos=fText->moveIndex32(tPos, -1); + } + if (fB2->contains(fText->char32At(tPos))) { + continue; + } + } + + + // LB 18 break after space + if (fSP->contains(prevChar)) { + break; + } + + // LB 19 + // x QU + // QU x + if (fQU->contains(thisChar) || fQU->contains(prevChar)) { + continue; + } + + // LB 20 Break around a CB + if (fCB->contains(thisChar) || fCB->contains(prevChar)) { + break; + } + + // LB 21 + if (fBA->contains(thisChar) || + fHY->contains(thisChar) || + fNS->contains(thisChar) || + fBB->contains(prevChar) ) { + continue; + } + + // LB 22 + if (fAL->contains(prevChar) && fIN->contains(thisChar) || + fID->contains(prevChar) && fIN->contains(thisChar) || + fIN->contains(prevChar) && fIN->contains(thisChar) || + fNU->contains(prevChar) && fIN->contains(thisChar) ) { + continue; + } + + + // LB 23 ID x PO + // AL x NU + // NU x AL + if (fID->contains(prevChar) && fPO->contains(thisChar) || + fAL->contains(prevChar) && fNU->contains(thisChar) || + fNU->contains(prevChar) && fAL->contains(thisChar) ) { + continue; + } + + // LB 24 Do not break between prefix and letters or ideographs. + // PR x ID + // PR x AL + // PO x AL + if (fPR->contains(prevChar) && fID->contains(thisChar) || + fPR->contains(prevChar) && fAL->contains(thisChar) || + fPO->contains(prevChar) && fAL->contains(thisChar) ) { + continue; + } + + + + // LB 25 Numbers + if (fNumberMatcher->lookingAt(prevPos, status)) { + if (U_FAILURE(status)) { + break; + } + // Matched a number. But could have been just a single digit, which would + // not represent a "no break here" between prevChar and thisChar + int32_t numEndIdx = fNumberMatcher->end(status); // idx of first char following num + if (numEndIdx > pos) { + // Number match includes at least our two chars being checked + if (numEndIdx > nextPos) { + // Number match includes additional chars. Update pos and nextPos + // so that next loop iteration will continue at the end of the number, + // checking for breaks between last char in number & whatever follows. + pos = nextPos = numEndIdx; + do { + pos = fText->moveIndex32(pos, -1); + thisChar = fText->char32At(pos); + } while (fCM->contains(thisChar)); + } + continue; + } + } + + + // LB 26 Do not break a Korean syllable. + if (fJL->contains(prevChar) && (fJL->contains(thisChar) || + fJV->contains(thisChar) || + fH2->contains(thisChar) || + fH3->contains(thisChar))) { + continue; + } + + if ((fJV->contains(prevChar) || fH2->contains(prevChar)) && + (fJV->contains(thisChar) || fJT->contains(thisChar))) { + continue; + } + + if ((fJT->contains(prevChar) || fH3->contains(prevChar)) && + fJT->contains(thisChar)) { + continue; + } + + // LB 27 Treat a Korean Syllable Block the same as ID. + if ((fJL->contains(prevChar) || fJV->contains(prevChar) || + fJT->contains(prevChar) || fH2->contains(prevChar) || fH3->contains(prevChar)) && + fIN->contains(thisChar)) { + continue; + } + if ((fJL->contains(prevChar) || fJV->contains(prevChar) || + fJT->contains(prevChar) || fH2->contains(prevChar) || fH3->contains(prevChar)) && + fPO->contains(thisChar)) { + continue; + } + if (fPR->contains(prevChar) && (fJL->contains(thisChar) || fJV->contains(thisChar) || + fJT->contains(thisChar) || fH2->contains(thisChar) || fH3->contains(thisChar))) { + continue; + } + + + + // LB 28 Do not break between alphabetics (“at”). + if (fAL->contains(prevChar) && fAL->contains(thisChar)) { + continue; + } + + // LB 29 Do not break between numeric punctuation and alphabetics ("e.g."). + if (fIS->contains(prevChar) && fAL->contains(thisChar)) { + continue; + } + + //LB 30 Do not break between letters, numbers or ordinary symbols and opening or closing punctuation + // (AL | NU) x OP + // CL x (AL | NU) + if ((fAL->contains(prevChar) || fNU->contains(prevChar)) && + fOP->contains(thisChar)) { + continue; + } + if (fCL->contains(prevChar) && + (fAL->contains(thisChar) || fNU->contains(thisChar))) { + continue; + } + + + // LB 31 Break everywhere else + break; + + } + + return pos; +} + + +UVector *RBBILineMonkey::charClasses() { + return fSets; +} + + +RBBILineMonkey::~RBBILineMonkey() { + delete fSets; + + delete fBK; + delete fCR; + delete fLF; + delete fCM; + delete fNL; + delete fWJ; + delete fZW; + delete fGL; + delete fCB; + delete fSP; + delete fB2; + delete fBA; + delete fBB; + delete fHY; + delete fH2; + delete fH3; + delete fCL; + delete fEX; + delete fIN; + delete fJL; + delete fJV; + delete fJT; + delete fNS; + delete fOP; + delete fQU; + delete fIS; + delete fNU; + delete fPO; + delete fPR; + delete fSY; + delete fAI; + delete fAL; + delete fID; + delete fSA; + delete fSG; + delete fXX; + + delete fCharBI; + delete fNumberMatcher; +} + + +//------------------------------------------------------------------------------------------- +// +// TestMonkey +// +// params +// seed=nnnnn Random number starting seed. +// Setting the seed allows errors to be reproduced. +// loop=nnn Looping count. Controls running time. +// -1: run forever. +// 0 or greater: run length. +// +// type = char | word | line | sent | title +// +//------------------------------------------------------------------------------------------- + +static int32_t getIntParam(UnicodeString name, UnicodeString ¶ms, int32_t defaultVal) { + int32_t val = defaultVal; + name.append(" *= *(-?\\d+)"); + UErrorCode status = U_ZERO_ERROR; + RegexMatcher m(name, params, 0, status); + if (m.find()) { + // The param exists. Convert the string to an int. + char valString[100]; + int32_t paramLength = m.end(1, status) - m.start(1, status); + if (paramLength >= (int32_t)(sizeof(valString)-1)) { + paramLength = (int32_t)(sizeof(valString)-2); + } + params.extract(m.start(1, status), paramLength, valString, sizeof(valString)); + val = strtol(valString, NULL, 10); + + // Delete this parameter from the params string. + m.reset(); + params = m.replaceFirst("", status); + } + U_ASSERT(U_SUCCESS(status)); + return val; +} +#endif + +static void testBreakBoundPreceding(RBBITest *test, UnicodeString ustr, + BreakIterator *bi, + int expected[], + int expectedcount) +{ + int count = 0; + int i = 0; + int forward[50]; + bi->setText(ustr); + for (i = bi->first(); i != BreakIterator::DONE; i = bi->next()) { + forward[count] = i; + if (count < expectedcount && expected[count] != i) { + test->errln("break forward test failed: expected %d but got %d", + expected[count], i); + break; + } + count ++; + } + if (count != expectedcount) { + printStringBreaks(ustr, expected, expectedcount); + test->errln("break forward test failed: missed %d match", + expectedcount - count); + return; + } + // testing boundaries + for (i = 1; i < expectedcount; i ++) { + int j = expected[i - 1]; + if (!bi->isBoundary(j)) { + printStringBreaks(ustr, expected, expectedcount); + test->errln("isBoundary() failed. Expected boundary at position %d", j); + return; + } + for (j = expected[i - 1] + 1; j < expected[i]; j ++) { + if (bi->isBoundary(j)) { + printStringBreaks(ustr, expected, expectedcount); + test->errln("isBoundary() failed. Not expecting boundary at position %d", j); + return; + } + } + } + + for (i = bi->last(); i != BreakIterator::DONE; i = bi->previous()) { + count --; + if (forward[count] != i) { + test->errln("happy break test previous() failed: expected %d but got %d", + forward[count], i); + break; + } + } + if (count != 0) { + printStringBreaks(ustr, expected, expectedcount); + test->errln("break test previous() failed: missed a match"); + return; + } + + // testing preceding + for (i = 0; i < expectedcount - 1; i ++) { + // int j = expected[i] + 1; + int j = ustr.moveIndex32(expected[i], 1); + for (; j <= expected[i + 1]; j ++) { + if (bi->preceding(j) != expected[i]) { + printStringBreaks(ustr, expected, expectedcount); + test->errln("preceding(): Not expecting boundary at position %d", j); + return; + } + } + } +} + +void RBBITest::TestWordBreaks(void) +{ +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + + // <data><>\u1d4a\u206e<?>\u0603\U0001d7ff<>\u2019<></data> + Locale locale("en"); + UErrorCode status = U_ZERO_ERROR; + // BreakIterator *bi = BreakIterator::createCharacterInstance(locale, status); + BreakIterator *bi = BreakIterator::createWordInstance(locale, status); + UChar str[300]; + static const char *strlist[] = + { + "\\U000e0032\\u0097\\u0f94\\uc2d8\\u05f4\\U000e0031\\u060d", + "\\U000e0037\\u4666\\u1202\\u003a\\U000e0031\\u064d\\u0bea\\u591c\\U000e0040\\u003b", + "\\u0589\\u3e99\\U0001d7f3\\U000e0074\\u1810\\u200e\\U000e004b\\u179c\\u0027\\U000e0061\\u003a", + "\\u398c\\U000104a5\\U0001d173\\u102d\\u002e\\uca3b\\u002e\\u002c\\u5622", + "\\u90ca\\u3588\\u009c\\u0953\\u194b", + "\\u200e\\U000e0072\\u0a4b\\U000e003f\\ufd2b\\u2027\\u002e\\u002e", + "\\u0602\\u2019\\ua191\\U000e0063\\u0a4c\\u003a\\ub4b5\\u003a\\u827f\\u002e", + "\\u7f1f\\uc634\\u65f8\\u0944\\u04f2\\uacdf\\u1f9c\\u05f4\\u002e", + "\\U000e0042\\u002e\\u0fb8\\u09ef\\u0ed1\\u2044", + "\\u003b\\u024a\\u102e\\U000e0071\\u0600", + "\\u2027\\U000e0067\\u0a47\\u00b7", + "\\u1fcd\\u002c\\u07aa\\u0027\\u11b0", + "\\u002c\\U000e003c\\U0001d7f4\\u003a\\u0c6f\\u0027", + "\\u0589\\U000e006e\\u0a42\\U000104a5", + "\\u4f66\\ub523\\u003a\\uacae\\U000e0047\\u003a", + "\\u003a\\u0f21\\u0668\\u0dab\\u003a\\u0655\\u00b7", + "\\u0027\\u11af\\U000e0057\\u0602", + "\\U0001d7f2\\U000e007\\u0004\\u0589", + "\\U000e0022\\u003a\\u10b3\\u003a\\ua21b\\u002e\\U000e0058\\u1732\\U000e002b", + "\\U0001d7f2\\U000e007d\\u0004\\u0589", + "\\u82ab\\u17e8\\u0736\\u2019\\U0001d64d", + "\\u0e01\\ub55c\\u0a68\\U000e0037\\u0cd6\\u002c\\ub959", + "\\U000e0065\\u302c\\uc986\\u09ee\\U000e0068", + "\\u0be8\\u002e\\u0c68\\u066e\\u136d\\ufc99\\u59e7", + "\\u0233\\U000e0020\\u0a69\\u0d6a", + "\\u206f\\u0741\\ub3ab\\u2019\\ubcac\\u2019", + "\\u58f4\\U000e0049\\u20e7\\u2027", + "\\ub315\\U0001d7e5\\U000e0073\\u0c47\\u06f2\\u0c6a\\u0037\\u10fe", + "\\ua183\\u102d\\u0bec\\u003a", + "\\u17e8\\u06e7\\u002e\\u096d\\u003b", + "\\u003a\\u0e57\\u0fad\\u002e", + "\\u002e\\U000e004c\\U0001d7ea\\u05bb\\ud0fd\\u02de", + "\\u32e6\\U0001d7f6\\u0fa1\\u206a\\U000e003c\\u0cec\\u003a", + "\\U000e005d\\u2044\\u0731\\u0650\\u0061", + "\\u003a\\u0664\\u00b7\\u1fba", + "\\u003b\\u0027\\u00b7\\u47a3", + "\\u2027\\U000e0067\\u0a42\\u00b7\\ubddf\\uc26c\\u003a\\u4186\\u041b", + "\\u0027\\u003a\\U0001d70f\\U0001d7df\\ubf4a\\U0001d7f5\\U0001d177\\u003a\\u0e51\\u1058\\U000e0058\\u00b7\\u0673", + "\\uc30d\\u002e\\U000e002c\\u0c48\\u003a\\ub5a1\\u0661\\u002c", + }; + int loop; + if (U_FAILURE(status)) { + errln("Creation of break iterator failed %s", u_errorName(status)); + return; + } + for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { + // printf("looping %d\n", loop); + u_unescape(strlist[loop], str, 25); + UnicodeString ustr(str); + // RBBICharMonkey monkey; + RBBIWordMonkey monkey; + + int expected[50]; + int expectedcount = 0; + + monkey.setText(ustr); + int i; + for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) { + expected[expectedcount ++] = i; + } + + testBreakBoundPreceding(this, ustr, bi, expected, expectedcount); + } + delete bi; +#endif +} + +void RBBITest::TestWordBoundary(void) +{ + // <data><>\u1d4a\u206e<?>\u0603\U0001d7ff<>\u2019<></data> + Locale locale("en"); + UErrorCode status = U_ZERO_ERROR; + // BreakIterator *bi = BreakIterator::createCharacterInstance(locale, status); + BreakIterator *bi = BreakIterator::createWordInstance(locale, status); + UChar str[50]; + static const char *strlist[] = + { + "\\u200e\\U000e0072\\u0a4b\\U000e003f\\ufd2b\\u2027\\u002e\\u002e", + "\\U000e0042\\u002e\\u0fb8\\u09ef\\u0ed1\\u2044", + "\\u003b\\u024a\\u102e\\U000e0071\\u0600", + "\\u2027\\U000e0067\\u0a47\\u00b7", + "\\u1fcd\\u002c\\u07aa\\u0027\\u11b0", + "\\u002c\\U000e003c\\U0001d7f4\\u003a\\u0c6f\\u0027", + "\\u0589\\U000e006e\\u0a42\\U000104a5", + "\\u4f66\\ub523\\u003a\\uacae\\U000e0047\\u003a", + "\\u003a\\u0f21\\u0668\\u0dab\\u003a\\u0655\\u00b7", + "\\u0027\\u11af\\U000e0057\\u0602", + "\\U0001d7f2\\U000e007\\u0004\\u0589", + "\\U000e0022\\u003a\\u10b3\\u003a\\ua21b\\u002e\\U000e0058\\u1732\\U000e002b", + "\\U0001d7f2\\U000e007d\\u0004\\u0589", + "\\u82ab\\u17e8\\u0736\\u2019\\U0001d64d", + "\\u0e01\\ub55c\\u0a68\\U000e0037\\u0cd6\\u002c\\ub959", + "\\U000e0065\\u302c\\uc986\\u09ee\\U000e0068", + "\\u0be8\\u002e\\u0c68\\u066e\\u136d\\ufc99\\u59e7", + "\\u0233\\U000e0020\\u0a69\\u0d6a", + "\\u206f\\u0741\\ub3ab\\u2019\\ubcac\\u2019", + "\\u58f4\\U000e0049\\u20e7\\u2027", + "\\ub315\\U0001d7e5\\U000e0073\\u0c47\\u06f2\\u0c6a\\u0037\\u10fe", + "\\ua183\\u102d\\u0bec\\u003a", + "\\u17e8\\u06e7\\u002e\\u096d\\u003b", + "\\u003a\\u0e57\\u0fad\\u002e", + "\\u002e\\U000e004c\\U0001d7ea\\u05bb\\ud0fd\\u02de", + "\\u32e6\\U0001d7f6\\u0fa1\\u206a\\U000e003c\\u0cec\\u003a", + "\\ua2a5\\u0038\\u2044\\u002e\\u0c67\\U000e003c\\u05f4\\u2027\\u05f4\\u2019", + "\\u003a\\u0664\\u00b7\\u1fba", + "\\u003b\\u0027\\u00b7\\u47a3", + }; + int loop; + if (U_FAILURE(status)) { + errln("Creation of break iterator failed %s", u_errorName(status)); + return; + } + for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { + // printf("looping %d\n", loop); + u_unescape(strlist[loop], str, 20); + UnicodeString ustr(str); + int forward[50]; + int count = 0; + + bi->setText(ustr); + int prev = 0; + int i; + for (i = bi->first(); i != BreakIterator::DONE; i = bi->next()) { + forward[count ++] = i; + if (i > prev) { + int j; + for (j = prev + 1; j < i; j ++) { + if (bi->isBoundary(j)) { + printStringBreaks(ustr, forward, count); + errln("happy boundary test failed: expected %d not a boundary", + j); + return; + } + } + } + if (!bi->isBoundary(i)) { + printStringBreaks(ustr, forward, count); + errln("happy boundary test failed: expected %d a boundary", + i); + return; + } + prev = i; + } + } + delete bi; +} + +void RBBITest::TestLineBreaks(void) +{ +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + Locale locale("en"); + UErrorCode status = U_ZERO_ERROR; + BreakIterator *bi = BreakIterator::createLineInstance(locale, status); + const int32_t STRSIZE = 50; + UChar str[STRSIZE]; + static const char *strlist[] = + { + "\\u300f\\ufdfc\\ub798\\u2011\\u2011\\u0020\\u0b43\\u002d\\ubeec\\ufffc", + "\\u24ba\\u2060\\u3405\\ub290\\u000d\\U000e0032\\ufe35\\u00a0\\u0361\\" + "U000112ed\\u0f0c\\u000a\\u308e\\ua875\\u0085\\u114d", + "\\ufffc\\u3063\\u2e08\\u30e3\\u000d\\u002d\\u0ed8\\u002f\\U00011a57\\" + "u2014\\U000e0105\\u118c\\u000a\\u07f8", + "\\u0668\\u192b\\u002f\\u2034\\ufe39\\u00b4\\u0cc8\\u2571\\u200b\\u003f", + "\\ufeff\\ufffc\\u3289\\u0085\\u2772\\u0020\\U000e010a\\u0020\\u2025\\u000a\\U000e0123", + "\\ufe3c\\u201c\\u000d\\u2025\\u2007\\u201c\\u002d\\u20a0\\u002d\\u30a7\\u17a4", + "\\u2772\\u0020\\U000e010a\\u0020\\u2025\\u000a\\U000e0123", + "\\u002d\\uff1b\\u02c8\\u2029\\ufeff\\u0f22\\u2044\\ufe09\\u003a\\u096d\\u2009\\u000a\\u06f7\\u02cc\\u1019\\u2060", + "\\u1781\\u0b68\\u0f0c\\u3010\\u0085\\U00011f7a\\u0020\\u0dd6\\u200b\\U000e007a\\u000a\\u2060\\u2026\\u002f\\u2026\\u24dc\\u101e\\u2014\\u2007\\u30a5", + "\\u2770\\u0020\\U000e010f\\u0020\\u2060\\u000a\\u02cc\\u0bcc\\u060d\\u30e7\\u0f3b\\u002f", + "\\ufeff\\u0028\\u003b\\U00012fec\\u2010\\u0020\\u0004\\u200b\\u0020\\u275c\\u002f\\u17b1", + "\\u20a9\\u2014\\u00a2\\u31f1\\u002f\\u0020\\u05b8\\u200b\\u0cc2\\u003b\\u060d\\u02c8\\ua4e8\\u002f\\u17d5", + "\\u002d\\u136f\\uff63\\u0084\\ua933\\u2028\\u002d\\u431b\\u200b\\u20b0", + "\\uade3\\u11d6\\u000a\\U0001107d\\u203a\\u201d\\ub070\\u000d\\u2024\\ufffc", + "\\uff5b\\u101c\\u1806\\u002f\\u2213\\uff5f", + "\\u2014\\u0a83\\ufdfc\\u003f\\u00a0\\u0020\\u000a\\u2991\\U0001d179\\u0020\\u201d\\U000125f6\\u0a67\\u20a7\\ufeff\\u043f", + "\\u169b\\U000e0130\\u002d\\u1041\\u0f3d\\u0abf\\u00b0\\u31fb\\u00a0\\u002d\\u02c8\\u003b", + "\\u2762\\u1680\\u002d\\u2028\\u0027\\u01dc\\ufe56\\u003a\\u000a\\uffe6\\u29fd\\u0020\\u30ee\\u007c\\U0001d178\\u0af1\\u0085", + "\\u3010\\u200b\\u2029\\ufeff\\ufe6a\\u275b\\U000e013b\\ufe37\\u24d4\\u002d\\u1806\\u256a\\u1806\\u247c\\u0085\\u17ac", + "\\u99ab\\u0027\\u003b\\u2026\\ueaf0\\u0020\\u0020\\u0313\\u0020\\u3099\\uff09\\u208e\\u2011\\u2007\\u2060\\u000a\\u0020\\u0020\\u300b\\u0bf9", + "\\u1806\\u060d\\u30f5\\u00b4\\u17e9\\u2544\\u2028\\u2024\\u2011\\u20a3\\u002d\\u09cc\\u1782\\u000d\\uff6f\\u0025", + "\\u002f\\uf22e\\u1944\\ufe3d\\u0020\\u206f\\u31b3\\u2014\\u002d\\u2025\\u0f0c\\u0085\\u2763", + "\\u002f\\u2563\\u202f\\u0085\\u17d5\\u200b\\u0020\\U000e0043\\u2014\\u058a\\u3d0a\\ufe57\\u2035\\u2028\\u2029", + "\\u20ae\\U0001d169\\u9293\\uff1f\\uff1f\\u0021\\u2012\\u2039\\u0085\\u02cc\\u00a2\\u0020\\U000e01ab\\u3085\\u0f3a\\u1806\\u0f0c\\u1945\\u000a\\U0001d7e7", + "\\uffe6\\u00a0\\u200b\\u0085\\u2116\\u255b\\U0001d7f7\\u178c\\ufffc", + "\\u02cc\\ufe6a\\u00a0\\u0021\\u002d\\u7490\\uec2e\\u200b\\u000a", + "\\uec2e\\u200b\\u000a\\u0020\\u2028\\u2014\\u8945", + "\\u7490\\uec2e\\u200b\\u000a\\u0020\\u2028\\u2014", + "\\u0020\\u2028\\u2014\\u8945\\u002c\\u005b", + "\\u000a\\ufe3c\\u201c\\u000d\\u2025\\u2007\\u201c\\u002d\\u20a0", + "\\u2473\\u0e9d\\u0020\\u0085\\u000a\\ufe3c\\u201c\\u000d\\u2025", + "\\U0001d16e\\ufffc\\u2025\\u0021\\u002d", + "\\ufffc\\u301b\\u0fa5\\U000e0103\\u2060\\u208e\\u17d5\\u034f\\u1009\\u003a\\u180e\\u2009\\u3111", + "\\u2014\\u0020\\u000a\\u17c5\\u24fc", + "\\ufffc\\u0020\\u2116\\uff6c\\u200b\\u0ac3\\U0001028f", + "\\uaeb0\\u0344\\u0085\\ufffc\\u073b\\u2010", + "\\ufeff\\u0589\\u0085\\u0eb8\\u30fd\\u002f\\u003a\\u2014\\ufe43", + "\\u09cc\\u256a\\u276d\\u002d\\u3085\\u000d\\u0e05\\u2028\\u0fbb", + "\\u2034\\u00bb\\u0ae6\\u300c\\u0020\\u31f8\\ufffc", + "\\u2116\\u0ed2\\uff64\\u02cd\\u2001\\u2060", + "\\u809d\\u2e02\\u0f0a\\uc48f\\u2540\\u000d\\u0cef\\u003a\\u0e4d" + "\\U000e0172\\U000e005c\\u17cf\\U00010ca6\\ufeff\\uf621\\u06f3\\uffe5" + "\\u0ea2\\ufeff\\udcea\\u3085\\ua874\\u000a\\u0020\\u000b\\u200b", + "\\ufe10\\u2060\\u1a5a\\u2060\\u17e4\\ufffc\\ubbe1\\ufe15\\u0020\\u00a0", + "\\u2060\\u2213\\u200b\\u2019\\uc2dc\\uff6a\\u1736\\u0085\\udb07", + }; + int loop; + TEST_ASSERT_SUCCESS(status); + if (U_FAILURE(status)) { + return; + } + for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { + // printf("looping %d\n", loop); + int32_t t = u_unescape(strlist[loop], str, STRSIZE); + if (t >= STRSIZE) { + TEST_ASSERT(FALSE); + continue; + } + + + UnicodeString ustr(str); + RBBILineMonkey monkey; + if (U_FAILURE(monkey.deferredStatus)) { + continue; + } + + const int EXPECTEDSIZE = 50; + int expected[EXPECTEDSIZE]; + int expectedcount = 0; + + monkey.setText(ustr); + int i; + for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) { + if (expectedcount >= EXPECTEDSIZE) { + TEST_ASSERT(expectedcount < EXPECTEDSIZE); + return; + } + expected[expectedcount ++] = i; + } + + testBreakBoundPreceding(this, ustr, bi, expected, expectedcount); + } + delete bi; +#endif +} + +void RBBITest::TestSentBreaks(void) +{ +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + Locale locale("en"); + UErrorCode status = U_ZERO_ERROR; + BreakIterator *bi = BreakIterator::createSentenceInstance(locale, status); + UChar str[200]; + static const char *strlist[] = + { + "Now\ris\nthe\r\ntime\n\rfor\r\r", + "This\n", + "Hello! how are you? I'am fine. Thankyou. How are you doing? This\n costs $20,00,000.", + "\"Sentence ending with a quote.\" Bye.", + " (This is it). Testing the sentence iterator. \"This isn't it.\"", + "Hi! This is a simple sample sentence. (This is it.) This is a simple sample sentence. \"This isn't it.\"", + "Hi! This is a simple sample sentence. It does not have to make any sense as you can see. ", + "Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. ", + "Che la dritta via aveo smarrita. He said, that I said, that you said!! ", + "Don't rock the boat.\\u2029Because I am the daddy, that is why. Not on my time (el timo.)!", + "\\U0001040a\\u203a\\u1217\\u2b23\\u000d\\uff3b\\u03dd\\uff57\\u0a69\\u104a\\ufe56\\ufe52" + "\\u3016\\U000e002f\\U000e0077\\u0662\\u1680\\u2984\\U000e006a\\u002e\\ua6ab\\u104a" + "\\u002e\\u019b\\u2005\\u002e\\u0477\\u0438\\u0085\\u0441\\u002e\\u5f61\\u202f" + "\\U0001019f\\uff08\\u27e8\\u055c\\u0352", + "\\u1f3e\\u004d\\u000a\\ua3e4\\U000e0023\\uff63\\u0c52\\u276d\\U0001d5de\\U0001d171" + "\\u0e38\\u17e5\\U00012fe6\\u0fa9\\u267f\\u1da3\\u0046\\u03ed\\udc72\\u0030" + "\\U0001d688\\u0b6d\\u0085\\u0c67\\u1f94\\u0c6c\\u9cb2\\u202a\\u180e\\u000b" + "\\u002e\\U000e005e\\u035b\\u061f\\u02c1\\U000e0025\\u0357\\u0969\\u202b" + "\\U000130c5\\u0486\\U000e0123\\u2019\\u01bc\\u2006\\u11ad\\u180e\\u2e05" + "\\u10b7\\u013e\\u000a\\u002e\\U00013ea4" + }; + int loop; + if (U_FAILURE(status)) { + errln("Creation of break iterator failed %s", u_errorName(status)); + return; + } + for (loop = 0; loop < (int)(sizeof(strlist) / sizeof(char *)); loop ++) { + u_unescape(strlist[loop], str, (int32_t)(sizeof(str) / sizeof(str[0]))); + UnicodeString ustr(str); + + RBBISentMonkey monkey; + if (U_FAILURE(monkey.deferredStatus)) { + continue; + } + + const int EXPECTEDSIZE = 50; + int expected[EXPECTEDSIZE]; + int expectedcount = 0; + + monkey.setText(ustr); + int i; + for (i = 0; i != BreakIterator::DONE; i = monkey.next(i)) { + if (expectedcount >= EXPECTEDSIZE) { + TEST_ASSERT(expectedcount < EXPECTEDSIZE); + return; + } + expected[expectedcount ++] = i; + } + + testBreakBoundPreceding(this, ustr, bi, expected, expectedcount); + } + delete bi; +#endif +} + +void RBBITest::TestMonkey(char *params) { +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + + UErrorCode status = U_ZERO_ERROR; + int32_t loopCount = 500; + int32_t seed = 1; + UnicodeString breakType = "all"; + Locale locale("en"); + UBool useUText = FALSE; + + if (quick == FALSE) { + loopCount = 10000; + } + + if (params) { + UnicodeString p(params); + loopCount = getIntParam("loop", p, loopCount); + seed = getIntParam("seed", p, seed); + + RegexMatcher m(" *type *= *(char|word|line|sent|title) *", p, 0, status); + if (m.find()) { + breakType = m.group(1, status); + m.reset(); + p = m.replaceFirst("", status); + } + + RegexMatcher u(" *utext", p, 0, status); + if (u.find()) { + useUText = TRUE; + u.reset(); + p = u.replaceFirst("", status); + } + + + // m.reset(p); + if (RegexMatcher("\\S", p, 0, status).find()) { + // Each option is stripped out of the option string as it is processed. + // All options have been checked. The option string should have been completely emptied.. + char buf[100]; + p.extract(buf, sizeof(buf), NULL, status); + buf[sizeof(buf)-1] = 0; + errln("Unrecognized or extra parameter: %s\n", buf); + return; + } + + } + + if (breakType == "char" || breakType == "all") { + RBBICharMonkey m; + BreakIterator *bi = BreakIterator::createCharacterInstance(locale, status); + if (U_SUCCESS(status)) { + RunMonkey(bi, m, "char", seed, loopCount, useUText); + if (breakType == "all" && useUText==FALSE) { + // Also run a quick test with UText when "all" is specified + RunMonkey(bi, m, "char", seed, loopCount, TRUE); + } + } + else { + errln("Creation of character break iterator failed %s", u_errorName(status)); + } + delete bi; + } + + if (breakType == "word" || breakType == "all") { + logln("Word Break Monkey Test"); + RBBIWordMonkey m; + BreakIterator *bi = BreakIterator::createWordInstance(locale, status); + if (U_SUCCESS(status)) { + RunMonkey(bi, m, "word", seed, loopCount, useUText); + } + else { + errln("Creation of word break iterator failed %s", u_errorName(status)); + } + delete bi; + } + + if (breakType == "line" || breakType == "all") { + logln("Line Break Monkey Test"); + RBBILineMonkey m; + BreakIterator *bi = BreakIterator::createLineInstance(locale, status); + if (loopCount >= 10) { + loopCount = loopCount / 5; // Line break runs slower than the others. + } + if (U_SUCCESS(status)) { + RunMonkey(bi, m, "line", seed, loopCount, useUText); + } + else { + errln("Creation of line break iterator failed %s", u_errorName(status)); + } + delete bi; + } + + if (breakType == "sent" || breakType == "all" ) { + logln("Sentence Break Monkey Test"); + RBBISentMonkey m; + BreakIterator *bi = BreakIterator::createSentenceInstance(locale, status); + if (loopCount >= 10) { + loopCount = loopCount / 10; // Sentence runs slower than the other break types + } + if (U_SUCCESS(status)) { + RunMonkey(bi, m, "sentence", seed, loopCount, useUText); + } + else { + errln("Creation of line break iterator failed %s", u_errorName(status)); + } + delete bi; + } + +#endif +} + +// +// Run a RBBI monkey test. Common routine, for all break iterator types. +// Parameters: +// bi - the break iterator to use +// mk - MonkeyKind, abstraction for obtaining expected results +// name - Name of test (char, word, etc.) for use in error messages +// seed - Seed for starting random number generator (parameter from user) +// numIterations +// +void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t seed, + int32_t numIterations, UBool useUText) { + +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + + const int32_t TESTSTRINGLEN = 500; + UnicodeString testText; + int32_t numCharClasses; + UVector *chClasses; + int expected[TESTSTRINGLEN*2 + 1]; + int expectedCount = 0; + char expectedBreaks[TESTSTRINGLEN*2 + 1]; + char forwardBreaks[TESTSTRINGLEN*2 + 1]; + char reverseBreaks[TESTSTRINGLEN*2+1]; + char isBoundaryBreaks[TESTSTRINGLEN*2+1]; + char followingBreaks[TESTSTRINGLEN*2+1]; + char precedingBreaks[TESTSTRINGLEN*2+1]; + int i; + int loopCount = 0; + + m_seed = seed; + + numCharClasses = mk.charClasses()->size(); + chClasses = mk.charClasses(); + + // Check for errors that occured during the construction of the MonkeyKind object. + // Can't report them where they occured because errln() is a method coming from intlTest, + // and is not visible outside of RBBITest :-( + if (U_FAILURE(mk.deferredStatus)) { + errln("status of \"%s\" in creation of RBBIMonkeyKind.", u_errorName(mk.deferredStatus)); + return; + } + + // Verify that the character classes all have at least one member. + for (i=0; i<numCharClasses; i++) { + UnicodeSet *s = (UnicodeSet *)chClasses->elementAt(i); + if (s == NULL || s->size() == 0) { + errln("Character Class #%d is null or of zero size.", i); + return; + } + } + + while (loopCount < numIterations || numIterations == -1) { + if (numIterations == -1 && loopCount % 10 == 0) { + // If test is running in an infinite loop, display a periodic tic so + // we can tell that it is making progress. + fprintf(stderr, "."); + } + // Save current random number seed, so that we can recreate the random numbers + // for this loop iteration in event of an error. + seed = m_seed; + + // Populate a test string with data. + testText.truncate(0); + for (i=0; i<TESTSTRINGLEN; i++) { + int32_t aClassNum = m_rand() % numCharClasses; + UnicodeSet *classSet = (UnicodeSet *)chClasses->elementAt(aClassNum); + int32_t charIdx = m_rand() % classSet->size(); + UChar32 c = classSet->charAt(charIdx); + if (c < 0) { // TODO: deal with sets containing strings. + errln("c < 0"); + break; + } + testText.append(c); + } + + // Calculate the expected results for this test string. + mk.setText(testText); + memset(expectedBreaks, 0, sizeof(expectedBreaks)); + expectedBreaks[0] = 1; + int32_t breakPos = 0; + expectedCount = 0; + for (;;) { + breakPos = mk.next(breakPos); + if (breakPos == -1) { + break; + } + if (breakPos > testText.length()) { + errln("breakPos > testText.length()"); + } + expectedBreaks[breakPos] = 1; + U_ASSERT(expectedCount<testText.length()); + expected[expectedCount ++] = breakPos; + } + + // Find the break positions using forward iteration + memset(forwardBreaks, 0, sizeof(forwardBreaks)); + if (useUText) { + UErrorCode status = U_ZERO_ERROR; + UText *testUText = utext_openReplaceable(NULL, &testText, &status); + // testUText = utext_openUnicodeString(testUText, &testText, &status); + bi->setText(testUText, status); + TEST_ASSERT_SUCCESS(status); + utext_close(testUText); // The break iterator does a shallow clone of the UText + // This UText can be closed immediately, so long as the + // testText string continues to exist. + } else { + bi->setText(testText); + } + + for (i=bi->first(); i != BreakIterator::DONE; i=bi->next()) { + if (i < 0 || i > testText.length()) { + errln("%s break monkey test: Out of range value returned by breakIterator::next()", name); + break; + } + forwardBreaks[i] = 1; + } + + // Find the break positions using reverse iteration + memset(reverseBreaks, 0, sizeof(reverseBreaks)); + for (i=bi->last(); i != BreakIterator::DONE; i=bi->previous()) { + if (i < 0 || i > testText.length()) { + errln("%s break monkey test: Out of range value returned by breakIterator::next()", name); + break; + } + reverseBreaks[i] = 1; + } + + // Find the break positions using isBoundary() tests. + memset(isBoundaryBreaks, 0, sizeof(isBoundaryBreaks)); + U_ASSERT((int32_t)sizeof(isBoundaryBreaks) > testText.length()); + for (i=0; i<=testText.length(); i++) { + isBoundaryBreaks[i] = bi->isBoundary(i); + } + + + // Find the break positions using the following() function. + // printf("."); + memset(followingBreaks, 0, sizeof(followingBreaks)); + int32_t lastBreakPos = 0; + followingBreaks[0] = 1; + for (i=0; i<testText.length(); i++) { + breakPos = bi->following(i); + if (breakPos <= i || + breakPos < lastBreakPos || + breakPos > testText.length() || + breakPos > lastBreakPos && lastBreakPos > i ) { + errln("%s break monkey test: " + "Out of range value returned by BreakIterator::following().\n" + "Random seed=%d index=%d; following returned %d; lastbreak=%d", + name, seed, i, breakPos, lastBreakPos); + break; + } + followingBreaks[breakPos] = 1; + lastBreakPos = breakPos; + } + + // Find the break positions using the preceding() function. + memset(precedingBreaks, 0, sizeof(followingBreaks)); + lastBreakPos = testText.length(); + precedingBreaks[testText.length()] = 1; + for (i=testText.length(); i>0; i--) { + breakPos = bi->preceding(i); + if (breakPos >= i || + breakPos > lastBreakPos || + breakPos < 0 && testText.getChar32Start(i)>0 || + breakPos < lastBreakPos && lastBreakPos < testText.getChar32Start(i) ) { + errln("%s break monkey test: " + "Out of range value returned by BreakIterator::preceding().\n" + "index=%d; prev returned %d; lastBreak=%d" , + name, i, breakPos, lastBreakPos); + precedingBreaks[i] = 2; // Forces an error. + } else { + precedingBreaks[breakPos] = 1; + lastBreakPos = breakPos; + } + } + + // Compare the expected and actual results. + for (i=0; i<=testText.length(); i++) { + const char *errorType = NULL; + if (forwardBreaks[i] != expectedBreaks[i]) { + errorType = "next()"; + } else if (reverseBreaks[i] != forwardBreaks[i]) { + errorType = "previous()"; + } else if (isBoundaryBreaks[i] != expectedBreaks[i]) { + errorType = "isBoundary()"; + } else if (followingBreaks[i] != expectedBreaks[i]) { + errorType = "following()"; + } else if (precedingBreaks[i] != expectedBreaks[i]) { + errorType = "preceding()"; + } + + + if (errorType != NULL) { + // Format a range of the test text that includes the failure as + // a data item that can be included in the rbbi test data file. + + // Start of the range is the last point where expected and actual results + // both agreed that there was a break position. + int startContext = i; + int32_t count = 0; + for (;;) { + if (startContext==0) { break; } + startContext --; + if (expectedBreaks[startContext] != 0) { + if (count == 2) break; + count ++; + } + } + + // End of range is two expected breaks past the start position. + int endContext = i + 1; + int ci; + for (ci=0; ci<2; ci++) { // Number of items to include in error text. + for (;;) { + if (endContext >= testText.length()) {break;} + if (expectedBreaks[endContext-1] != 0) { + if (count == 0) break; + count --; + } + endContext ++; + } + } + + // Format looks like "<data>\\\uabcd\uabcd\\\U0001abcd...</data>" + UnicodeString errorText = "<data>"; + /***if (strcmp(errorType, "next()") == 0) { + startContext = 0; + endContext = testText.length(); + + printStringBreaks(testText, expected, expectedCount); + }***/ + + for (ci=startContext; ci<endContext;) { + UnicodeString hexChars("0123456789abcdef"); + UChar32 c; + int bn; + c = testText.char32At(ci); + if (ci == i) { + // This is the location of the error. + errorText.append("<?>"); + } else if (expectedBreaks[ci] != 0) { + // This a non-error expected break position. + errorText.append("\\"); + } + if (c < 0x10000) { + errorText.append("\\u"); + for (bn=12; bn>=0; bn-=4) { + errorText.append(hexChars.charAt((c>>bn)&0xf)); + } + } else { + errorText.append("\\U"); + for (bn=28; bn>=0; bn-=4) { + errorText.append(hexChars.charAt((c>>bn)&0xf)); + } + } + ci = testText.moveIndex32(ci, 1); + } + errorText.append("\\"); + errorText.append("</data>\n"); + + // Output the error + char charErrorTxt[500]; + UErrorCode status = U_ZERO_ERROR; + errorText.extract(charErrorTxt, sizeof(charErrorTxt), NULL, status); + charErrorTxt[sizeof(charErrorTxt)-1] = 0; + errln("%s break monkey test error. %s. Operation = %s; Random seed = %d; buf Idx = %d\n%s", + name, (expectedBreaks[i]? "break expected but not found" : "break found but not expected"), + errorType, seed, i, charErrorTxt); + break; + } + } + + loopCount++; + } +#endif +} + +// +// TestDebug - A place-holder test for debugging purposes. +// For putting in fragments of other tests that can be invoked +// for tracing without a lot of unwanted extra stuff happening. +// +void RBBITest::TestDebug(void) { +#if 0 + UErrorCode status = U_ZERO_ERROR; + int pos = 0; + int ruleStatus = 0; + + RuleBasedBreakIterator* bi = + // (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); + // (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::Locale("th"), status); + (RuleBasedBreakIterator *)BreakIterator::createSentenceInstance(Locale::getDefault(), status); + UnicodeString s("\\u2008\\u002e\\udc6a\\u37cd\\u71d0\\u2048\\U000e006a\\u002e\\u0046\\ufd3f\\u000a\\u002e"); + // UnicodeString s("Aaa. Bcd"); + s = s.unescape(); + bi->setText(s); + UBool r = bi->isBoundary(8); + printf("%s", r?"true":"false"); + return; + pos = bi->last(); + do { + // ruleStatus = bi->getRuleStatus(); + printf("%d\t%d\n", pos, ruleStatus); + pos = bi->previous(); + } while (pos != BreakIterator::DONE); +#endif +} + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/test/intltest/rbbitst.h b/icuSources/test/intltest/rbbitst.h index 51ded0fd..5578847b 100644 --- a/icuSources/test/intltest/rbbitst.h +++ b/icuSources/test/intltest/rbbitst.h @@ -1,6 +1,6 @@ /******************************************************************** - * COPYRIGHT: - * Copyright (c) 1999-2004, International Business Machines Corporation and + * COPYRIGHT: + * Copyright (c) 1999-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /************************************************************************ @@ -31,29 +31,26 @@ class RBBIMonkeyKind; */ class RBBITest: public IntlTest { public: - + RBBITest(); virtual ~RBBITest(); void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); - + /** * Tests rule status return values - **/ + **/ void TestStatusReturn(); /** * Run the Unicode Line Break test data. - **/ + **/ void TestLineBreakData(); /** * Run tests from external test data file. */ - void TestSentenceInvariants(); - void TestCharacterInvariants(); - void TestWordInvariants(); void TestEmptyString(); void TestGetAvailableLocales(); void TestGetDisplayName(); @@ -61,9 +58,8 @@ public: void TestBug4153072(); void TestJapaneseLineBreak(); void TestThaiLineBreak(); - void TestMixedThaiLineBreak(); - void TestMaiyamok(); - void TestThaiWordBreak(); + void TestMixedThaiLineBreak(); + void TestMaiyamok(); void TestMonkey(char *params); void TestExtended(); @@ -76,16 +72,18 @@ public: void TestSentBreaks(); void TestBug3818(); void TestJapaneseWordBreak(); - - + void TestTrieDict(); + void TestDebug(); + + /***********************/ private: /** * internal methods to prepare test data **/ - + /** - * Perform tests of BreakIterator forward and backward functionality + * Perform tests of BreakIterator forward and backward functionality * on different kinds of iterators (word, sentence, line and character). * It tests the methods first(), next(), current(), preceding(), following() * previous() and isBoundary(). @@ -113,15 +111,13 @@ private: **/ void testIsBoundary(RuleBasedBreakIterator& bi, BITestData &td); /** - * Internal method to perform tests of BreakIterator multiple selection functionality + * Internal method to perform tests of BreakIterator multiple selection functionality * on different kinds of iterators (word, sentence, line and character) **/ void doMultipleSelectionTest(RuleBasedBreakIterator& iterator, BITestData &td); - void doBreakInvariantTest(BreakIterator& tb, UnicodeString& testChars); - void doOtherInvariantTest(BreakIterator& tb, UnicodeString& testChars); - - void RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t seed, int32_t loopCount); + void RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name, uint32_t seed, + int32_t loopCount, UBool useUText); }; diff --git a/icuSources/test/intltest/regcoll.cpp b/icuSources/test/intltest/regcoll.cpp index 130ef5fd..074f678b 100644 --- a/icuSources/test/intltest/regcoll.cpp +++ b/icuSources/test/intltest/regcoll.cpp @@ -359,7 +359,7 @@ void CollationRegressionTest::Test4060154(/* char* par */) compareArray(*c, secondary, ARRAY_LENGTH(secondary)); delete c; -}; +} // @bug 4062418 // diff --git a/icuSources/test/intltest/regextst.cpp b/icuSources/test/intltest/regextst.cpp index 343ec785..6e9f8850 100644 --- a/icuSources/test/intltest/regextst.cpp +++ b/icuSources/test/intltest/regextst.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -18,9 +18,9 @@ #include "unicode/ucnv.h" #include "regextst.h" #include "uvector.h" -#include "charstr.h" #include "util.h" #include <stdlib.h> +#include <string.h> #include <stdio.h> @@ -31,12 +31,12 @@ //--------------------------------------------------------------------------- RegexTest::RegexTest() { -}; +} RegexTest::~RegexTest() { -}; +} @@ -362,9 +362,8 @@ void RegexTest::regex_find(const UnicodeString &pattern, cleanupAndReturn: if (failed) { - errln("\"%s\" %s \"%s\"", (const char *)CharString(pattern, 0), - (const char *)CharString(flags, 0), - (const char *)CharString(inputString, 0)); + errln((UnicodeString)"\""+pattern+(UnicodeString)"\" " + +flags+(UnicodeString)" \""+inputString+(UnicodeString)"\""); // callerPattern->dump(); } delete parseMatcher; @@ -569,7 +568,7 @@ void RegexTest::Basic() { REGEX_TESTLM("\\\\\\|\\(\\)\\[\\{\\~\\$\\*\\+\\?\\.", "\\\\|()[{~$*+?.", TRUE, TRUE); -}; +} //--------------------------------------------------------------------------- @@ -1490,7 +1489,11 @@ void RegexTest::Extended() { UnicodeString testFlags; // the flags for a test. UnicodeString matchString; // The marked up string to be used as input - + if (U_FAILURE(status)){ + dataerrln("Construct RegexMatcher() error."); + delete [] testData; + return; + } // // Loop over the test data file, once per line. @@ -1813,6 +1816,10 @@ void RegexTest::PerlTests() { // One line per match, capture group one is the desired data. // RegexPattern* linePat = RegexPattern::compile("(.+?)[\\r\\n]+", 0, pe, status); + if (U_FAILURE(status)) { + dataerrln("RegexPattern::compile() error"); + return; + } RegexMatcher* lineMat = linePat->matcher(testDataString, status); // @@ -2080,9 +2087,8 @@ void RegexTest::PerlTests() { if (expectedS.compare(resultString) != 0) { - errln("Line %d: Incorrect perl expression results. Expected \"%s\"; got \"%s\"", - lineNum, (const char *)CharString(expectedS, 0), - (const char *)CharString(resultString, 0)); + err("Line %d: Incorrect perl expression results.", lineNum); + errln((UnicodeString)"Expected \""+expectedS+(UnicodeString)"\"; got \""+resultString+(UnicodeString)"\""); } delete testMat; diff --git a/icuSources/test/intltest/reptest.cpp b/icuSources/test/intltest/reptest.cpp index c7fae483..d203fed5 100644 --- a/icuSources/test/intltest/reptest.cpp +++ b/icuSources/test/intltest/reptest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2001-2003, International Business Machines Corporation and + * Copyright (c) 2001-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /************************************************************************ @@ -92,18 +92,18 @@ public: } /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. * * @draft ICU 2.2 */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. * * @draft ICU 2.2 */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } protected: virtual int32_t getLength() const { @@ -118,15 +118,6 @@ protected: return chars.char32At(offset); } - virtual void handleReplaceBetween(int32_t start, int32_t limit, const UnicodeString& text) { - UnicodeString s; - this->extractBetween(start, limit, s); - if (s == text) return; // NO ACTION! - this->chars.replaceBetween(start, limit, text); - fixStyles(start, limit, text.length()); - } - - void fixStyles(int32_t start, int32_t limit, int32_t newLen) { UChar newStyle = NO_STYLE; if (start != limit && styles.charAt(start) != NO_STYLE) { @@ -151,6 +142,15 @@ protected: styles.replaceBetween(start, limit, s); } + virtual void handleReplaceBetween(int32_t start, int32_t limit, const UnicodeString& text) { + UnicodeString s; + this->extractBetween(start, limit, s); + if (s == text) return; // NO ACTION! + this->chars.replaceBetween(start, limit, text); + fixStyles(start, limit, text.length()); + } + + virtual void copy(int32_t start, int32_t limit, int32_t dest) { chars.copy(start, limit, dest); styles.copy(start, limit, dest); @@ -201,8 +201,8 @@ public: /* do nothing */ } - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } private: static const char fgClassID; diff --git a/icuSources/test/intltest/restest.cpp b/icuSources/test/intltest/restest.cpp index 9471bf89..72dc7c28 100644 --- a/icuSources/test/intltest/restest.cpp +++ b/icuSources/test/intltest/restest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ diff --git a/icuSources/test/intltest/restsnew.cpp b/icuSources/test/intltest/restsnew.cpp index abeca616..47669add 100644 --- a/icuSources/test/intltest/restsnew.cpp +++ b/icuSources/test/intltest/restsnew.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -187,6 +187,7 @@ void NewResourceBundleTest::runIndexedTest( int32_t index, UBool exec, const cha case 2: name = "TestIteration"; if (exec) TestIteration(); break; case 3: name = "TestOtherAPI"; if(exec) TestOtherAPI(); break; case 4: name = "TestNewTypes"; if(exec) TestNewTypes(); break; + case 5: name = "TestGetByFallback"; if(exec) TestGetByFallback(); break; default: name = ""; break; //needed to end loop } } @@ -1118,6 +1119,33 @@ NewResourceBundleTest::TestNewTypes() { } +} + +void +NewResourceBundleTest::TestGetByFallback() { + UErrorCode status = U_ZERO_ERROR; + + ResourceBundle heRes(NULL, "he", status); + + heRes.getWithFallback("calendar", status).getWithFallback("islamic-civil", status).getWithFallback("DateTime", status); + if(U_SUCCESS(status)) { + errln("he locale's Islamic-civil DateTime resource exists. How did it get here?\n"); + } + status = U_ZERO_ERROR; + + heRes.getWithFallback("calendar", status).getWithFallback("islamic-civil", status).getWithFallback("eras", status); + if(U_FAILURE(status)) { + errln("Didn't get Islamic Eras. I know they are there!\n"); + } + status = U_ZERO_ERROR; + + ResourceBundle rootRes(NULL, "root", status); + rootRes.getWithFallback("calendar", status).getWithFallback("islamic-civil", status).getWithFallback("DateTime", status); + if(U_SUCCESS(status)) { + errln("Root's Islamic-civil's DateTime resource exists. How did it get here?\n"); + } + status = U_ZERO_ERROR; + } //eof diff --git a/icuSources/test/intltest/restsnew.h b/icuSources/test/intltest/restsnew.h index 2cadcf5b..efc850c7 100644 --- a/icuSources/test/intltest/restsnew.h +++ b/icuSources/test/intltest/restsnew.h @@ -34,6 +34,8 @@ public: void TestNewTypes(void); + void TestGetByFallback(void); + private: /** * The assignment operator has no real implementation. diff --git a/icuSources/test/intltest/rndmcoll.cpp b/icuSources/test/intltest/rndmcoll.cpp new file mode 100644 index 00000000..f740703e --- /dev/null +++ b/icuSources/test/intltest/rndmcoll.cpp @@ -0,0 +1,185 @@ +/* + ****************************************************************************** + * Copyright (C) 2005-2006, International Business Machines Corporation and * + * others. All Rights Reserved. * + ****************************************************************************** + */ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> +#include "rndmcoll.h" +#include "wbnf.h" + + +#if !UCONFIG_NO_COLLATION + +//Raymond: Following comments are copied from Java implementation +// +// each rule can be: +// "[" command "]" +// "& [" position "]" +// "&" before chars +// relation "[variable top]" +// relation (chars "|")? chars ("/" chars)? +// plus, a reset must come before a relation + + +static const char collationBNF[] = + "$s = ' '? 50%;" + "$crlf = '\r\n';" + + "$alternateOptions = non'-'ignorable | shifted;" + "$onoff = on | off;" + "$caseFirstOptions = off | upper | lower;" + "$strengthOptions = '1' | '2' | '3' | '4' | 'I';" + "$commandList = '['" + " ( alternate ' ' $alternateOptions" + " | backwards' 2'" + " | normalization ' ' $onoff " + " | caseLevel ' ' $onoff " + " | hiraganaQ ' ' $onoff" + " | caseFirst ' ' $caseFirstOptions" + " | strength ' ' $strengthOptions" + " ) ']';" + "$command = $commandList $crlf;" + + "$ignorableTypes = (tertiary | secondary | primary) ' ' ignorable;" + "$allTypes = variable | regular | implicit | trailing | $ignorableTypes;" + "$positionList = '[' (first | last) ' ' $allTypes ']';" + + "$beforeList = '[before ' ('1' | '2' | '3') ']';" + + "$relationList = (" + " '<'" + " | '<<'" + " | ';'" + " | '<<<'" + " | ','" + " | '='" + ");" + "$string = $chars{1,5}~@;" + "$chars = a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| '<'| '&'| '['| ']';" + "$rel1 = '[variable top]' $s;" + "$p1 = ($string $s '|' $s)? 25%;" + "$p2 = ('/' $s $string $s)? 25%;" + "$rel2 = $p1 $string $s $p2;" + "$relation = $relationList $s ($rel1 | $rel2) $crlf;" + + "$reset = '&' $s ($beforeList $s)? 10% ($positionList 1% | $string 10%) $crlf;" + "$mostRules = $command 1% | $reset 5% | $relation 25%;" + "$root = $command{0,5} $reset $mostRules{1,20};"; + + +static const UVersionInfo ICU_37 = {3,7,0,0}; + +void RandomCollatorTest::Test2(){ + if(!isICUVersionAtLeast(ICU_37)){ + return; + } + else { + errln("TestWbnf is incorrectly implemented.\nThis test should be modeled to use the existing test frame work for naming tests.\n"); + } + TestWbnf(); +} + + +void RandomCollatorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* ){ + if (exec) logln("TestSuite RandomCollatorTest: "); + switch (index) { + TESTCASE(0, Test); + TESTCASE(1, Test2); + default: name = ""; break; + } +} + +/* +class TestColltorCompare{ +public: + UBool operator()(Collator &coll, int count = 1000){ + UnicodeString a(test_string.get_a_string()); + UnicodeString b(test_string.get_a_string()); + UnicodeString c(test_string.get_a_string()); + do{ + if (check_transitivity(coll, a, b, c)){ + a = b; + b = c; + c = UnicodeString(test_string.get_a_string()); + } + }while(count-- >= 0 ); + + return FALSE; + } + TestColltorCompare():test_string("$s = $c{1,8};", "$s", "$c", new Magic_SelectOneChar("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]&<")){ + } +private: + UBool check_transitivity(const Collator & coll, const UnicodeString &a, const UnicodeString &b, const UnicodeString &c){ + int ab = coll.compare(a,b), ba = coll.compare(b,a); + int bc = coll.compare(b,c), cb = coll.compare(c,b); + int ca = coll.compare(c,a), ac = coll.compare(a,c); + // a + // / \ + // b - c + // + if (//counter-clockwise, maximum + (ab >=0 && bc >=0 && ac <0) + ||(bc >=0 && ca >=0 && ba <0) + ||(ca >=0 && ab >=0 && cb <0) + + //counter-clockwise, minimum + ||(ab <=0 && bc <=0 && ca >0) + ||(bc <=0 && ca <=0 && ba >0) + ||(ca <=0 && ab <=0 && cb >0) + ){ + return FALSE; + } + return TRUE; + } + + LanguageGenerator test_string; +};*/ + +void RandomCollatorTest::Test(){ + if(!isICUVersionAtLeast(ICU_37)){ + return; + } + else { + errln("This test needs to be fixed.\n"); + } + LanguageGenerator test_rule; + if (test_rule.parseBNF(collationBNF, "$root", TRUE) != LanguageGenerator::OK){ + errln("The test code itself is wrong."); + return; + }; + + //TestColltorCompare coll_test; + + static const int CONSTRUCT_RANDOM_COUNT = 1000; + int i; + for (i=0; i < CONSTRUCT_RANDOM_COUNT; i++){ + const char * rule = test_rule.next(); + logln("\n-----------------------------------%d\n",i); + logln(UnicodeString(rule, strlen(rule))); + + UnicodeString newRule(rule); // potential bug + UErrorCode status = U_ZERO_ERROR; + logln( "===========================================\n"); + fwrite(rule, strlen(rule),1,stdout); + logln("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); + + Collator * c = new RuleBasedCollator(newRule,status); + + if (U_FAILURE(status)) { + errln( "Could not create Collator for the %d(th) generated rule.\n" + "Error Name: %s\n" + "The rule is ", + i, u_errorName(status)); + return; + } + + delete c; + } +} + +#endif /* #if !UCONFIG_NO_COLLATION */ + diff --git a/icuSources/test/intltest/rndmcoll.h b/icuSources/test/intltest/rndmcoll.h new file mode 100644 index 00000000..d216af3b --- /dev/null +++ b/icuSources/test/intltest/rndmcoll.h @@ -0,0 +1,29 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ + +/** + * RandomCollatorTest is ported from RandomCollatorTest.java of ICU4J + */ + +#ifndef _RANDCOLL +#define _RANDCOLL + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_COLLATION + +#include "tscoll.h" + +class RandomCollatorTest: public IntlTestCollator { +public: + virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); + void Test(); + void Test2(); +}; + +#endif /* #if !UCONFIG_NO_COLLATION */ + +#endif /* _RANDCOLL */ diff --git a/icuSources/test/intltest/sdtfmtts.cpp b/icuSources/test/intltest/sdtfmtts.cpp index 15817d5d..064acba3 100644 --- a/icuSources/test/intltest/sdtfmtts.cpp +++ b/icuSources/test/intltest/sdtfmtts.cpp @@ -1,7 +1,7 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -26,11 +26,13 @@ void IntlTestSimpleDateFormatAPI::runIndexedTest( int32_t index, UBool exec, con if (exec) { logln("SimpleDateFormat API test---"); logln(""); UErrorCode status = U_ZERO_ERROR; + Locale saveLocale; Locale::setDefault(Locale::getEnglish(), status); if(U_FAILURE(status)) { errln("ERROR: Could not set default locale, test may not give correct results"); } testAPI(/*par*/); + Locale::setDefault(saveLocale, status); } break; @@ -51,7 +53,8 @@ void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/) SimpleDateFormat def(status); if(U_FAILURE(status)) { - errln("ERROR: Could not create SimpleDateFormat (default)"); + dataerrln("ERROR: Could not create SimpleDateFormat (default) - exitting"); + return; } status = U_ZERO_ERROR; @@ -76,7 +79,8 @@ void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/) status = U_ZERO_ERROR; SimpleDateFormat cust1(pattern, symbols, status); if(U_FAILURE(status)) { - errln("ERROR: Could not create SimpleDateFormat (pattern, symbols*)"); + dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exitting"); + return; } status = U_ZERO_ERROR; diff --git a/icuSources/test/intltest/srchtest.cpp b/icuSources/test/intltest/srchtest.cpp index 6899f4bb..f768c0d2 100644 --- a/icuSources/test/intltest/srchtest.cpp +++ b/icuSources/test/intltest/srchtest.cpp @@ -1,6 +1,6 @@ /* ***************************************************************************** -* Copyright (C) 2001-2004, International Business Machines orporation +* Copyright (C) 2001-2006, International Business Machines orporation * and others. All Rights Reserved. ****************************************************************************/ @@ -24,7 +24,11 @@ if (exec) { \ logln(#test "---"); \ logln((UnicodeString)""); \ - test(); \ + if(areBroken) { \ + errln(__FILE__ " cannot test - failed to create collator."); \ + } else { \ + test(); \ + } \ } \ break; @@ -94,12 +98,11 @@ StringSearchTest::~StringSearchTest() void StringSearchTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* ) { + UBool areBroken = FALSE; if (m_en_us_ == NULL && m_fr_fr_ == NULL && m_de_ == NULL && m_es_ == NULL && m_en_wordbreaker_ == NULL && m_en_characterbreaker_ == NULL && exec) { - errln(__FILE__ " cannot test - failed to create collator."); - name = ""; - return; + areBroken = TRUE; } switch (index) { @@ -150,6 +153,7 @@ void StringSearchTest::runIndexedTest(int32_t index, UBool exec, CASE(32, TestContractionCanonical) CASE(33, TestUClassID) CASE(34, TestSubclass) + CASE(35, TestCoverage) default: name = ""; break; } } @@ -2272,4 +2276,37 @@ void StringSearchTest::TestSubclass() } } +class StubSearchIterator:public SearchIterator{ +public: + StubSearchIterator(){} + virtual void setOffset(int32_t , UErrorCode &) {}; + virtual int32_t getOffset(void) const {return 0;}; + virtual SearchIterator* safeClone(void) const {return NULL;}; + virtual int32_t handleNext(int32_t , UErrorCode &){return 0;}; + virtual int32_t handlePrev(int32_t , UErrorCode &) {return 0;}; + virtual UClassID getDynamicClassID() const { + static char classID = 0; + return (UClassID)&classID; + } +}; + +void StringSearchTest::TestCoverage(){ + StubSearchIterator stub1, stub2; + UErrorCode status = U_ZERO_ERROR; + + if (stub1 != stub2){ + errln("new StubSearchIterator should be equal"); + } + + stub2.setText(UnicodeString("ABC"), status); + if (U_FAILURE(status)) { + errln("Error: SearchIterator::SetText"); + } + + stub1 = stub2; + if (stub1 != stub2){ + errln("SearchIterator::operator = assigned object should be equal"); + } +} + #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/intltest/srchtest.h b/icuSources/test/intltest/srchtest.h index 36163a1d..37fafdc3 100644 --- a/icuSources/test/intltest/srchtest.h +++ b/icuSources/test/intltest/srchtest.h @@ -1,6 +1,6 @@ /**************************************************************************** * COPYRIGHT: - * Copyright (c) 2001, International Business Machines Corporation and others + * Copyright (c) 2001-2005, International Business Machines Corporation and others * All Rights Reserved. ***************************************************************************/ @@ -87,6 +87,7 @@ private: void TestContractionCanonical(); void TestUClassID(); void TestSubclass(); + void TestCoverage(); }; #endif /* #if !UCONFIG_NO_COLLATION */ diff --git a/icuSources/test/intltest/strcase.cpp b/icuSources/test/intltest/strcase.cpp index fdbdd426..b10fa17f 100644 --- a/icuSources/test/intltest/strcase.cpp +++ b/icuSources/test/intltest/strcase.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -21,6 +21,8 @@ #include "unicode/uloc.h" #include "unicode/locid.h" #include "unicode/ubrk.h" +#include "unicode/unistr.h" +#include "unicode/ucasemap.h" #include "ustrtest.h" #include "unicode/tstdtmod.h" @@ -32,9 +34,9 @@ StringCaseTest::runIndexedTest(int32_t index, UBool exec, const char *&name, cha switch (index) { case 0: name = "TestCaseConversion"; if (exec) TestCaseConversion(); break; case 1: - name = "TestTitleCasing"; + name = "TestCasing"; #if !UCONFIG_NO_BREAK_ITERATION - if(exec) TestTitleCasing(); + if(exec) TestCasing(); #endif break; @@ -45,21 +47,21 @@ StringCaseTest::runIndexedTest(int32_t index, UBool exec, const char *&name, cha void StringCaseTest::TestCaseConversion() { - UChar uppercaseGreek[] = + static const UChar uppercaseGreek[] = { 0x399, 0x395, 0x3a3, 0x3a5, 0x3a3, 0x20, 0x03a7, 0x3a1, 0x399, 0x3a3, 0x3a4, 0x39f, 0x3a3, 0 }; // "IESUS CHRISTOS" - UChar lowercaseGreek[] = + static const UChar lowercaseGreek[] = { 0x3b9, 0x3b5, 0x3c3, 0x3c5, 0x3c2, 0x20, 0x03c7, 0x3c1, 0x3b9, 0x3c3, 0x3c4, 0x3bf, 0x3c2, 0 }; // "iesus christos" - UChar lowercaseTurkish[] = + static const UChar lowercaseTurkish[] = { 0x69, 0x73, 0x74, 0x61, 0x6e, 0x62, 0x75, 0x6c, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0131, 0x6e, 0x6f, 0x70, 0x6c, 0x65, 0x21, 0 }; - UChar uppercaseTurkish[] = + static const UChar uppercaseTurkish[] = { 0x54, 0x4f, 0x50, 0x4b, 0x41, 0x50, 0x49, 0x20, 0x50, 0x41, 0x4c, 0x41, 0x43, 0x45, 0x2c, 0x20, 0x0130, 0x53, 0x54, 0x41, 0x4e, 0x42, 0x55, 0x4c, 0 }; @@ -70,7 +72,7 @@ StringCaseTest::TestCaseConversion() test3 += "STANBUL, NOT CONSTANTINOPLE!"; UnicodeString test4(test3); - test4.toLower(); + test4.toLower(Locale("")); expectedResult = UnicodeString("i\\u0307stanbul, not constantinople!", "").unescape(); if (test4 != expectedResult) errln("1. toLower failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); @@ -86,7 +88,7 @@ StringCaseTest::TestCaseConversion() test3 += " palace, istanbul"; test4 = test3; - test4.toUpper(); + test4.toUpper(Locale("")); expectedResult = "TOPKAPI PALACE, ISTANBUL"; if (test4 != expectedResult) errln("toUpper failed: expected \"" + expectedResult + "\", got \"" + test4 + "\"."); @@ -155,7 +157,7 @@ StringCaseTest::TestCaseConversion() /* uppercase with root locale */ s=UnicodeString(FALSE, beforeUpper, (int32_t)(sizeof(beforeUpper)/U_SIZEOF_UCHAR)); - s.setCharAt(0, beforeUpper[0]).toUpper(); + s.setCharAt(0, beforeUpper[0]).toUpper(Locale("")); if( s.length()!=(sizeof(upperRoot)/U_SIZEOF_UCHAR) || s!=UnicodeString(FALSE, upperRoot, s.length()) ) { @@ -235,7 +237,7 @@ StringCaseTest::TestCaseConversion() errln("error in sigmas.toLower()=\"" + t + "\" expected \"" + sigmasLower + "\""); } - (t=sigmas).toUpper(); + (t=sigmas).toUpper(Locale("")); if(t!=sigmasUpper) { errln("error in sigmas.toUpper()=\"" + t + "\" expected \"" + sigmasUpper + "\""); } @@ -318,126 +320,186 @@ StringCaseTest::TestCaseConversion() } } +// data-driven case mapping tests ------------------------------------------ *** + +enum { + TEST_LOWER, + TEST_UPPER, #if !UCONFIG_NO_BREAK_ITERATION + TEST_TITLE, +#endif + TEST_COUNT +}; -void -StringCaseTest::TestTitleCasing() { - UErrorCode status = U_ZERO_ERROR; - UBreakIterator *iter; - char cLocaleID[100]; - UnicodeString locale, input, result; - int32_t type; - TestDataModule *driver = TestDataModule::getTestDataModule("casing", *this, status); - if(U_SUCCESS(status)) { - TestData *casingTest = driver->createTestData("titlecasing", status); - const DataMap *myCase = NULL; - while(casingTest->nextCase(myCase, status)) { - locale = myCase->getString("Locale", status); - locale.extract(0, 0x7fffffff, cLocaleID, sizeof(cLocaleID), ""); - type = myCase->getInt("Type", status); - - - input = myCase->getString("Input", status); - if(type<0) { - iter=0; - } else { - iter=ubrk_open((UBreakIteratorType)type, cLocaleID, NULL, 0, &status); - } +// names of TestData children in casing.txt +static const char *const dataNames[TEST_COUNT+1]={ + "lowercasing", + "uppercasing", +#if !UCONFIG_NO_BREAK_ITERATION + "titlecasing", +#endif + "" +}; - if(U_FAILURE(status)) { - errln("error: TestTitleCasing() ubrk_open(%d) failed for test case from casing.res: %s", type, u_errorName(status)); - status = U_ZERO_ERROR; - } else { - result=input; - result.toTitle((BreakIterator *)iter, Locale(cLocaleID)); - if(result!=myCase->getString("Output", status)) { - errln("error: TestTitleCasing() got a wrong result for test case from casing.res"); - } - ubrk_close(iter); - } - } - delete casingTest; +void +StringCaseTest::TestCasingImpl(const UnicodeString &input, + const UnicodeString &output, + int32_t whichCase, + const char *localeID, uint32_t options) { + // UnicodeString + UnicodeString result; + const char *name; + + result=input; + switch(whichCase) { + case TEST_LOWER: + name="toLower"; + result.toLower(Locale(localeID)); + break; + case TEST_UPPER: + name="toUpper"; + result.toUpper(Locale(localeID)); + break; + default: + name=""; + break; // won't happen } - delete driver; - - // more tests for API coverage - status=U_ZERO_ERROR; - input=UNICODE_STRING_SIMPLE("sTrA\\u00dfE").unescape(); - (result=input).toTitle(NULL); - if(result!=UNICODE_STRING_SIMPLE("Stra\\u00dfe").unescape()) { - errln("UnicodeString::toTitle(NULL) failed"); + if(result!=output) { + errln("error: UnicodeString.%s() got a wrong result for a test case from casing.res", name); } -#if 0 - char cLocaleID[100]; - UnicodeString in, expect, result, localeID; - UResourceBundle *casing, *titlecasing, *test, *res; + // UTF-8 + char utf8In[100], utf8Out[100]; + int32_t utf8InLength, utf8OutLength, resultLength; + UChar *buffer; + + UCaseMap *csm; UErrorCode errorCode; - int32_t testIndex, type; errorCode=U_ZERO_ERROR; - loadTestData(errorCode); - casing=ures_openDirect("testdata", "casing", &errorCode); - if(U_FAILURE(errorCode)) { - errln("error: TestTitleCasing() is unable to open casing.res: %s", u_errorName(errorCode)); - return; + csm=ucasemap_open(localeID, options, &errorCode); + + u_strToUTF8(utf8In, (int32_t)sizeof(utf8In), &utf8InLength, input.getBuffer(), input.length(), &errorCode); + switch(whichCase) { + case TEST_LOWER: + name="ucasemap_utf8ToLower"; + utf8OutLength=ucasemap_utf8ToLower(csm, + utf8Out, (int32_t)sizeof(utf8Out), + utf8In, utf8InLength, &errorCode); + break; + case TEST_UPPER: + name="ucasemap_utf8ToUpper"; + utf8OutLength=ucasemap_utf8ToUpper(csm, + utf8Out, (int32_t)sizeof(utf8Out), + utf8In, utf8InLength, &errorCode); + break; + default: + name=""; + utf8OutLength=0; + break; // won't happen } + buffer=result.getBuffer(utf8OutLength); + u_strFromUTF8(buffer, result.getCapacity(), &resultLength, utf8Out, utf8OutLength, &errorCode); + result.releaseBuffer(U_SUCCESS(errorCode) ? resultLength : 0); - // titlecasing tests - titlecasing=ures_getByKey(casing, "titlecasing", 0, &errorCode); if(U_FAILURE(errorCode)) { - logln("TestTitleCasing() is unable to open get casing.res/titlecasing: %s", u_errorName(errorCode)); - } else { - UBreakIterator *iter; - - for(testIndex=0;; ++testIndex) { - // get test case - test=ures_getByIndex(titlecasing, testIndex, 0, &errorCode); - if(U_FAILURE(errorCode)) { - break; // done - } + errln("error: %s() got an error for a test case from casing.res - %s", name, u_errorName(errorCode)); + } else if(result!=output) { + errln("error: %s() got a wrong result for a test case from casing.res", name); + } + ucasemap_close(csm); +} + +#if !UCONFIG_NO_BREAK_ITERATION - // get test case data - in=ures_getUnicodeStringByIndex(test, 0, &errorCode); - expect=ures_getUnicodeStringByIndex(test, 1, &errorCode); - localeID=ures_getUnicodeStringByIndex(test, 2, &errorCode); +void +StringCaseTest::TestTitleCasing(const UnicodeString &input, + const UnicodeString &output, + const char *localeID, + UBreakIterator *iter) { + UnicodeString result; + + result=input; + result.toTitle((BreakIterator *)iter, Locale(localeID)); + if(result!=output) { + errln("error: UnicodeString.toTitle() got a wrong result for a test case from casing.res"); + } +} - res=ures_getByIndex(test, 3, 0, &errorCode); - type=ures_getInt(res, &errorCode); - ures_close(res); +#endif - if(U_FAILURE(errorCode)) { - errln("error: TestTitleCasing() is unable to get data for test case %ld from casing.res: %s", testIndex, u_errorName(errorCode)); - continue; // skip this test case +void +StringCaseTest::TestCasing() { + UErrorCode status = U_ZERO_ERROR; +#if !UCONFIG_NO_BREAK_ITERATION + UBreakIterator *iter; +#endif + char cLocaleID[100]; + UnicodeString locale, input, output, result; + int32_t whichCase, type; + TestDataModule *driver = TestDataModule::getTestDataModule("casing", *this, status); + if(U_SUCCESS(status)) { + for(whichCase=0; whichCase<TEST_COUNT; ++whichCase) { + TestData *casingTest = driver->createTestData(dataNames[whichCase], status); + if(U_FAILURE(status)) { + errln("TestCasing failed to createTestData(%s) - %s", dataNames[whichCase], u_errorName(status)); + break; } + const DataMap *myCase = NULL; + while(casingTest->nextCase(myCase, status)) { + locale = myCase->getString("Locale", status); + locale.extract(0, 0x7fffffff, cLocaleID, sizeof(cLocaleID), ""); - // run this test case - localeID.extract(0, 0x7fffffff, cLocaleID, sizeof(cLocaleID), ""); - if(type<0) { - iter=0; - } else { - iter=ubrk_open((UBreakIteratorType)type, cLocaleID, in.getBuffer(), in.length(), &errorCode); - } + input = myCase->getString("Input", status); + output = myCase->getString("Output", status); - if(U_FAILURE(errorCode)) { - errln("error: TestTitleCasing() ubrk_open(%d) failed for test case %d from casing.res: %s", type, testIndex, u_errorName(errorCode)); - } else { - result=in; - result.toTitle((BreakIterator *)iter, Locale(cLocaleID)); - if(result!=expect) { - errln("error: TestTitleCasing() got a wrong result for test case %ld from casing.res", testIndex); +#if !UCONFIG_NO_BREAK_ITERATION + iter=NULL; + if(whichCase==TEST_TITLE) { + type = myCase->getInt("Type", status); + if(type>=0) { + iter=ubrk_open((UBreakIteratorType)type, cLocaleID, NULL, 0, &status); + } + } +#endif + + if(U_FAILURE(status)) { + errln("error: TestCasing() setup failed for %s test case from casing.res: %s", dataNames[whichCase], u_errorName(status)); + status = U_ZERO_ERROR; + } else { + switch(whichCase) { + case TEST_LOWER: + case TEST_UPPER: + TestCasingImpl(input, output, whichCase, cLocaleID, 0); + break; +#if !UCONFIG_NO_BREAK_ITERATION + case TEST_TITLE: + TestTitleCasing(input, output, cLocaleID, iter); + break; +#endif + default: + break; // won't happen + } } - } - // clean up - ubrk_close(iter); - ures_close(test); +#if !UCONFIG_NO_BREAK_ITERATION + if(iter!=NULL) { + ubrk_close(iter); + } +#endif + } + delete casingTest; } - ures_close(titlecasing); - logln("TestTitleCasing() processed %ld test cases", testIndex); } + delete driver; - ures_close(casing); +#if !UCONFIG_NO_BREAK_ITERATION + // more tests for API coverage + status=U_ZERO_ERROR; + input=UNICODE_STRING_SIMPLE("sTrA\\u00dfE").unescape(); + (result=input).toTitle(NULL); + if(result!=UNICODE_STRING_SIMPLE("Stra\\u00dfe").unescape()) { + errln("UnicodeString::toTitle(NULL) failed"); + } #endif } -#endif diff --git a/icuSources/test/intltest/strtest.cpp b/icuSources/test/intltest/strtest.cpp index 4ba90832..97620c92 100644 --- a/icuSources/test/intltest/strtest.cpp +++ b/icuSources/test/intltest/strtest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* file name: strtest.cpp @@ -18,7 +18,7 @@ #include "strtest.h" #include "unicode/ustring.h" -#if defined(WIN32) && defined(_MSC_VER) +#if defined(U_WINDOWS) && defined(_MSC_VER) #include <vector> using namespace std; #endif @@ -178,7 +178,7 @@ void StringTest::runIndexedTest(int32_t index, UBool exec, const char *&name, ch case 7: name="TestSTLCompatibility"; if(exec) { -#if defined(WIN32) && defined(_MSC_VER) +#if defined(U_WINDOWS) && defined(_MSC_VER) /* Just make sure that it compiles with STL's placement new usage. */ vector<UnicodeString> myvect; myvect.push_back(UnicodeString("blah")); diff --git a/icuSources/test/intltest/tchcfmt.cpp b/icuSources/test/intltest/tchcfmt.cpp index 6e995436..82d237d5 100644 --- a/icuSources/test/intltest/tchcfmt.cpp +++ b/icuSources/test/intltest/tchcfmt.cpp @@ -1,7 +1,7 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -393,6 +393,14 @@ TestChoiceFormat::TestComplexExample( void ) it_logln(UnicodeString("ChoiceFormat format:") + res1); if (res1 != "third") it_errln("*** ChoiceFormat format (double, ...) result!"); + str = ""; + fpos = 0; + status = U_ZERO_ERROR; + int64_t arg_64 = 3; + res1 = form_pat.format( arg_64, str, fpos ); + it_logln(UnicodeString("ChoiceFormat format:") + res1); + if (res1 != "third") it_errln("*** ChoiceFormat format (int64_t, ...) result!"); + str = ""; fpos = 0; status = U_ZERO_ERROR; diff --git a/icuSources/test/intltest/testidn.cpp b/icuSources/test/intltest/testidn.cpp index b706f2bf..8cc9b168 100644 --- a/icuSources/test/intltest/testidn.cpp +++ b/icuSources/test/intltest/testidn.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -19,8 +19,6 @@ * in various IDNA conversion processes. */ -#include <stdio.h> -#include <stdlib.h> #include "unicode/utypes.h" #if !UCONFIG_NO_IDNA && !UCONFIG_NO_TRANSLITERATION @@ -40,6 +38,7 @@ #include "sprpimpl.h" #include "testidna.h" #include "punyref.h" +#include <stdlib.h> UBool beVerbose=FALSE, haveCopyright=TRUE; @@ -222,8 +221,12 @@ getValues(uint32_t result, int32_t& value, UBool& isIndex){ * the source codepoint is copied to the destination */ type = USPREP_TYPE_LIMIT; + isIndex =FALSE; + value = 0; }else if(result >= _SPREP_TYPE_THRESHOLD){ type = (UStringPrepType) (result - _SPREP_TYPE_THRESHOLD); + isIndex =FALSE; + value = 0; }else{ /* get the state */ type = USPREP_MAP; diff --git a/icuSources/test/intltest/testidna.cpp b/icuSources/test/intltest/testidna.cpp index c1174053..361789d5 100644 --- a/icuSources/test/intltest/testidna.cpp +++ b/icuSources/test/intltest/testidna.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2004, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -29,6 +29,7 @@ #include "idnaref.h" #include "nptrans.h" #include "unicode/putil.h" +#include "idnaconf.h" static UChar unicodeIn[][41] ={ { @@ -145,6 +146,9 @@ static UChar unicodeIn[][41] ={ 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443, 0x0441, 0x0441, 0x043a, 0x0438 }, + { + 0xFB00, 0xFB01 + } }; @@ -172,6 +176,7 @@ static const char *asciiIn[] = { "xn--hxargifdar", // Greek "xn--bonusaa-5bb1da", // Maltese "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", // Russian (Cyrillic) + "fffi" }; static const char *domainNames[] = { @@ -382,6 +387,17 @@ static struct ErrorCases{ U_IDNA_STD3_ASCII_RULES_ERROR, TRUE, TRUE, FALSE }, + { + { + 0x0077, 0x0077, 0x0077, 0x002e, // www. + // zero length label + 0x002e, 0x0063, 0x006f, 0x006d, // com. + 0x0000 + }, + "www..com", + U_IDNA_ZERO_LENGTH_LABEL_ERROR, + TRUE, TRUE, FALSE + }, { {0}, NULL, @@ -658,9 +674,9 @@ void TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* test } if(status != expectedStatus){ - errln( "Did not get the expected error for"+ + errln( "Did not get the expected error for "+ UnicodeString(testName)+ - "null terminated source. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " null terminated source. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " Got: "+ UnicodeString(u_errorName(status)) + " Source: " + prettify(UnicodeString(src)) ); @@ -692,9 +708,9 @@ void TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* test } //testing query string if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ - errln( "Did not get the expected error for"+ + errln( "Did not get the expected error for "+ UnicodeString(testName)+ - "null terminated source with options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " null terminated source with options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " Got: "+ UnicodeString(u_errorName(status)) + " Source: " + prettify(UnicodeString(src)) ); @@ -720,9 +736,9 @@ void TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* test } if(status != expectedStatus){ - errln( "Did not get the expected error for"+ + errln( "Did not get the expected error for "+ UnicodeString(testName)+ - "with source length. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " with source length. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " Got: "+ UnicodeString(u_errorName(status)) + " Source: " + prettify(UnicodeString(src)) ); @@ -747,9 +763,9 @@ void TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* test } //testing query string if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ - errln( "Did not get the expected error for"+ + errln( "Did not get the expected error for "+ UnicodeString(testName)+ - "with source length and options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " with source length and options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " Got: "+ UnicodeString(u_errorName(status)) + " Source: " + prettify(UnicodeString(src)) ); @@ -776,9 +792,9 @@ void TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* test } //testing query string if(status != expectedStatus){ - errln( "Did not get the expected error for"+ + errln( "Did not get the expected error for "+ UnicodeString(testName)+ - "null terminated source with options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " null terminated source with options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " Got: "+ UnicodeString(u_errorName(status)) + " Source: " + prettify(UnicodeString(src)) ); @@ -803,9 +819,9 @@ void TestIDNA::testAPI(const UChar* src, const UChar* expected, const char* test } //testing query string if(status != expectedStatus && expectedStatus != U_IDNA_UNASSIGNED_ERROR){ - errln( "Did not get the expected error for"+ + errln( "Did not get the expected error for "+ UnicodeString(testName)+ - "with source length and options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " with source length and options set. Expected: " +UnicodeString(u_errorName(expectedStatus)) + " Got: "+ UnicodeString(u_errorName(status)) + " Source: " + prettify(UnicodeString(src)) ); @@ -985,18 +1001,14 @@ void TestIDNA::testCompare(const char* testName, CompareFunc func){ // c) compare it with unicodeIn not equivalent if(i==0){ testCompare(src,srcLen,uni1.getBuffer(),uni1.length()-1,testName, func,FALSE); - uni1.releaseBuffer(); }else{ testCompare(src,srcLen,uni0.getBuffer(),uni0.length()-1,testName, func,FALSE); - uni0.releaseBuffer(); } // d) compare it with asciiIn not equivalent if(i==0){ testCompare(src,srcLen,ascii1.getBuffer(),ascii1.length()-1,testName, func,FALSE); - ascii1.releaseBuffer(); }else{ testCompare(src,srcLen,ascii0.getBuffer(),ascii0.length()-1,testName, func,FALSE); - ascii0.releaseBuffer(); } } @@ -1395,18 +1407,14 @@ void TestIDNA::testRootLabelSeparator(const char* testName, CompareFunc func, // c) compare it with unicodeIn not equivalent if(i==0){ testCompare(src,srcLen,uni1.getBuffer(),uni1.length()-1,testName, func,FALSE); - uni1.releaseBuffer(); }else{ testCompare(src,srcLen,uni0.getBuffer(),uni0.length()-1,testName, func,FALSE); - uni0.releaseBuffer(); } // d) compare it with asciiIn not equivalent if(i==0){ testCompare(src,srcLen,ascii1.getBuffer(),ascii1.length()-1,testName, func,FALSE); - ascii1.releaseBuffer(); }else{ testCompare(src,srcLen,ascii0.getBuffer(),ascii0.length()-1,testName, func,FALSE); - ascii0.releaseBuffer(); } } } @@ -1415,7 +1423,7 @@ void TestIDNA::testRootLabelSeparator(const char* testName, CompareFunc func, // runIndexedTest //--------------------------------------------- -void TestIDNA::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) +void TestIDNA::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par) { if (exec) logln((UnicodeString)"TestSuite IDNA API "); switch (index) { @@ -1433,6 +1441,16 @@ void TestIDNA::runIndexedTest( int32_t index, UBool exec, const char* &name, cha case 10: name = "TestRefIDNA"; if(exec) TestRefIDNA(); break; case 11: name = "TestIDNAMonkeyTest"; if(exec) TestIDNAMonkeyTest(); break; case 12: name = "TestConformance"; if(exec) TestConformance();break; + case 13: + { + name = "TestConformanceTestVectors"; + if(exec){ + logln("TestSuite IDNA conf----"); logln(); + IdnaConfTest test; + callTest(test, par); + } + break; + } default: name = ""; break; /*needed to end loop*/ } } @@ -1551,7 +1569,6 @@ UnicodeString TestIDNA::testCompareReferenceImpl(UnicodeString& src, + " Got: " + UnicodeString(u_errorName(gotStatus)) + " for Source: "+ prettify(srcUChars) + " Options: " + options); - src.releaseBuffer(); return UnicodeString(""); } @@ -1566,7 +1583,6 @@ UnicodeString TestIDNA::testCompareReferenceImpl(UnicodeString& src, + " for Source: "+ prettify(srcUChars) + " Options: " + options); } - src.releaseBuffer(); return UnicodeString(exp, expLen); }else{ @@ -1575,7 +1591,6 @@ UnicodeString TestIDNA::testCompareReferenceImpl(UnicodeString& src, + " with "+ UnicodeString(uIDNAName) +" for input: " + prettify(srcUChars)); } - src.releaseBuffer(); return UnicodeString(""); } @@ -1635,7 +1650,11 @@ void TestIDNA::TestIDNAMonkeyTest(){ int i; getInstance(status); // Init prep - + if (U_FAILURE(status)) { + errln("Test could not initialize. Got %s", u_errorName(status)); + return; + } + for(i=0; i<loopCount; i++){ source.truncate(0); getTestSource(source); @@ -1643,7 +1662,6 @@ void TestIDNA::TestIDNAMonkeyTest(){ const UChar* src = source.getBuffer(); testCompareReferenceImpl(src,source.length()-1); testCompareReferenceImpl(src,source.length()-1); - source.releaseBuffer(); } /* for debugging */ @@ -1655,14 +1673,12 @@ void TestIDNA::TestIDNAMonkeyTest(){ const UChar *src = source.getBuffer(); testCompareReferenceImpl(src,source.length()-1); //debug(source.getBuffer(),source.length(),UIDNA_ALLOW_UNASSIGNED); - source.releaseBuffer(); } source.truncate(0); source.append("\\uCF18\\U00021161\\U000EEF11\\U0002BB82\\U0001D63C"); debug(source.getBuffer(),source.length(),UIDNA_ALLOW_UNASSIGNED); - source.releaseBuffer(); { // test deletion of code points UnicodeString source("\\u043f\\u00AD\\u034f\\u043e\\u0447\\u0435\\u043c\\u0443\\u0436\\u0435\\u043e\\u043d\\u0438\\u043d\\u0435\\u0433\\u043e\\u0432\\u043e\\u0440\\u044f\\u0442\\u043f\\u043e\\u0440\\u0443\\u0441\\u0441\\u043a\\u0438\\u0000"); @@ -1672,17 +1688,10 @@ void TestIDNA::TestIDNAMonkeyTest(){ UnicodeString ascii("xn--b1abfaaepdrnnbgefbadotcwatmq2g4l"); ascii.append((UChar)0x0000); testAPI(source.getBuffer(),ascii.getBuffer(), "uidna_toASCII", FALSE, U_ZERO_ERROR, TRUE, TRUE, uidna_toASCII); - source.releaseBuffer(); - ascii.releaseBuffer(); testAPI(source.getBuffer(),ascii.getBuffer(), "idnaref_toASCII", FALSE, U_ZERO_ERROR, TRUE, TRUE, idnaref_toASCII); - source.releaseBuffer(); - ascii.releaseBuffer(); - testCompareReferenceImpl(source.getBuffer(), source.length()-1); - source.releaseBuffer(); - } } @@ -1714,6 +1723,13 @@ void TestIDNA::TestCompareReferenceImpl(){ } void TestIDNA::TestRefIDNA(){ + UErrorCode status = U_ZERO_ERROR; + getInstance(status); // Init prep + if (U_FAILURE(status)) { + errln("Test could not initialize. Got %s", u_errorName(status)); + return; + } + testToASCII("idnaref_toASCII", idnaref_toASCII); testToUnicode("idnaref_toUnicode", idnaref_toUnicode); testIDNToASCII("idnaref_IDNToASCII", idnaref_IDNToASCII); @@ -1730,6 +1746,7 @@ void TestIDNA::TestRefIDNA(){ testChaining("idnaref_toASCII",idnaref_toASCII, "idnaref_toUnicode", idnaref_toUnicode); } + void TestIDNA::TestDataFile(){ testData(*this); } diff --git a/icuSources/test/intltest/tfsmalls.cpp b/icuSources/test/intltest/tfsmalls.cpp index 67649920..6cc69a01 100644 --- a/icuSources/test/intltest/tfsmalls.cpp +++ b/icuSources/test/intltest/tfsmalls.cpp @@ -1,7 +1,7 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -88,6 +88,10 @@ void test_FieldPosition_example( void ) UErrorCode status = U_ZERO_ERROR; DecimalFormat* fmt = (DecimalFormat*) NumberFormat::createInstance(status); + if (U_FAILURE(status)) { + it_dataerrln("NumberFormat::createInstance() error"); + return; + } fmt->setDecimalSeparatorAlwaysShown(TRUE); const int32_t tempLen = 20; @@ -159,6 +163,7 @@ void test_FieldPosition( void ) void test_Formattable( void ) { + UErrorCode status = U_ZERO_ERROR; Formattable* ftp = new Formattable(); if (!ftp || !(ftp->getType() == Formattable::kLong) || !(ftp->getLong() == 0)) { it_errln("*** Formattable constructor or getType or getLong"); @@ -169,6 +174,13 @@ void test_Formattable( void ) fta.setLong(1); ftb.setLong(2); if ((fta != ftb) || !(fta == ftb)) { it_logln("FT setLong, operator== and operator!= tested."); + status = U_ZERO_ERROR; + fta.getLong(&status); + if ( status == U_INVALID_FORMAT_ERROR){ + it_errln("*** FT getLong(UErrorCode* status) failed on real Long"); + } else { + it_logln("FT getLong(UErrorCode* status) tested."); + } }else{ it_errln("*** Formattable setLong or operator== or !="); } @@ -185,22 +197,52 @@ void test_Formattable( void ) }else{ it_errln("*** FT set- or getDouble"); } - + + fta.getDate(status = U_ZERO_ERROR); + if (status != U_INVALID_FORMAT_ERROR){ + it_errln("*** FT getDate with status should fail on non-Date"); + } fta.setDate( 4.0 ); if ((fta.getType() == Formattable::kDate) && (fta.getDate() == 4.0)) { - it_logln("FT set- and getDate tested."); + it_logln("FT set- and getDate tested."); + status = U_ZERO_ERROR; + fta.getDate(status); + if ( status == U_INVALID_FORMAT_ERROR){ + it_errln("*** FT getDate with status failed on real Date"); + } else { + it_logln("FT getDate with status tested."); + } }else{ it_errln("*** FT set- or getDate"); } + status = U_ZERO_ERROR; + fta.getLong(&status); + if (status != U_INVALID_FORMAT_ERROR){ + it_errln("*** FT getLong(UErrorCode* status) should fail on non-Long"); + } + fta.setString("abc"); + const Formattable ftc(fta); UnicodeString res; - if ((fta.getType() == Formattable::kString) && (fta.getString(res) == "abc")) { - it_logln("FT set- and getString tested."); - }else{ - it_errln("*** FT set- or getString"); - } + { + UBool t; + t = (fta.getType() == Formattable::kString) + && (fta.getString(res) == "abc") + && (fta.getString() == "abc"); + res = fta.getString(status = U_ZERO_ERROR); + t = t && (status != U_INVALID_FORMAT_ERROR && res == "abc"); + res = ftc.getString(status = U_ZERO_ERROR); + t = t && (status != U_INVALID_FORMAT_ERROR && res == "abc"); + ftc.getString(res,status = U_ZERO_ERROR); + t = t && (status != U_INVALID_FORMAT_ERROR && res == "abc"); + if (t) { + it_logln("FT set- and getString tested."); + }else{ + it_errln("*** FT set- or getString"); + } + } UnicodeString ucs = "unicode-string"; UnicodeString* ucs_ptr = new UnicodeString("pointed-to-unicode-string"); @@ -237,12 +279,29 @@ void test_Formattable( void ) } if (same) { it_logln("FT getArray tested"); + res_array = ft_arr.getArray( res_cnt, status = U_ZERO_ERROR); + if (status == U_INVALID_FORMAT_ERROR){ + it_errln("*** FT getArray with status failed on real array"); + } else { + it_logln("FT getArray with status tested on real array"); + } }else{ it_errln("*** FT getArray comparison"); } }else{ it_errln(UnicodeString("*** FT getArray count res_cnt=") + res_cnt + UnicodeString("ft_cnt=") + ft_cnt); } + + res_array = fta.getArray(res_cnt, status = U_ZERO_ERROR); + if (status == U_INVALID_FORMAT_ERROR){ + if (res_cnt == 0 && res_array == NULL){ + it_logln("FT getArray with status tested on non array"); + } else { + it_errln("*** FT getArray with status return values are not consistent"); + } + } else { + it_errln("*** FT getArray with status should fail on non-array"); + } Formattable *pf; diff --git a/icuSources/test/intltest/thcoll.cpp b/icuSources/test/intltest/thcoll.cpp index 1fe5be78..1fd99e7f 100644 --- a/icuSources/test/intltest/thcoll.cpp +++ b/icuSources/test/intltest/thcoll.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -53,7 +53,7 @@ void CollationThaiTest::runIndexedTest(int32_t index, UBool exec, const char* &n if((!coll) && exec) { errln(__FILE__ " cannot test - failed to create collator."); - name = ""; + name = "some test"; return; } @@ -412,8 +412,9 @@ void CollationThaiTest::TestReordering(void) { "\\u0E41\\uD87E\\uDC02", "=", "\\u0E41\\u4E41", // supplementary composition decomps to BMP "\\u0E41\\u0301", "=", "\\u0E41\\u0301", // unsafe (just checking backwards iteration) "\\u0E41\\u0301\\u0316", "=", "\\u0E41\\u0316\\u0301", - "\\u0e24\\u0e41", "=", "\\u0e41\\u0e24", // exiting contraction bug - "\\u0e3f\\u0e3f\\u0e24\\u0e41", "=", "\\u0e3f\\u0e3f\\u0e41\\u0e24", + // after UCA 4.1, the two lines below are not equal anymore do not have equal sign + "\\u0e24\\u0e41", "<", "\\u0e41\\u0e24", // exiting contraction bug + "\\u0e3f\\u0e3f\\u0e24\\u0e41", "<", "\\u0e3f\\u0e3f\\u0e41\\u0e24", "abc\\u0E41c\\u0301", "=", "abc\\u0E41\\u0107", // composition "abc\\u0E41\\uD834\\uDC00", "<", "abc\\u0E41\\uD834\\uDC01", // supplementaries @@ -440,7 +441,7 @@ void CollationThaiTest::TestReordering(void) { compareArray(*coll, tests, sizeof(tests)/sizeof(tests[0])); const char *rule = "& c < ab"; - const char *testcontraction[] = { "\\u0E41ab", "<", "\\u0E41c"}; + const char *testcontraction[] = { "\\u0E41ab", ">", "\\u0E41c"}; // After UCA 4.1 Thai are normal so won't break a contraction UnicodeString rules; UErrorCode status = U_ZERO_ERROR; parseChars(rules, rule); diff --git a/icuSources/test/intltest/tmsgfmt.cpp b/icuSources/test/intltest/tmsgfmt.cpp index fa5d38b3..4b2269c9 100644 --- a/icuSources/test/intltest/tmsgfmt.cpp +++ b/icuSources/test/intltest/tmsgfmt.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* @@ -28,6 +28,7 @@ #include "unicode/numfmt.h" #include "unicode/choicfmt.h" #include "unicode/gregocal.h" +#include <stdio.h> void TestMessageFormat::runIndexedTest(int32_t index, UBool exec, @@ -51,7 +52,9 @@ TestMessageFormat::runIndexedTest(int32_t index, UBool exec, TESTCASE(15,testAdopt); TESTCASE(16,testCopyConstructor2); TESTCASE(17,TestUnlimitedArgsAndSubformats); - TESTCASE(18,TestRBNF); + TESTCASE(18,TestRBNF); + TESTCASE(19,TestTurkishCasing); + TESTCASE(20,testAutoQuoteApostrophe); default: name = ""; break; } } @@ -191,7 +194,6 @@ void TestMessageFormat::testBug2() #include "unicode/datefmt.h" #include <stdlib.h> -#include <stdio.h> #include <string.h> IntlTest& @@ -402,6 +404,41 @@ void TestMessageFormat::testStaticFormat() } } +/* When the default locale is tr, make sure that the pattern can still be parsed. */ +void TestMessageFormat::TestTurkishCasing() +{ + UErrorCode err = U_ZERO_ERROR; + Locale saveDefaultLocale; + Locale::setDefault( Locale("tr"), err ); + + Formattable arguments[] = { + (int32_t)7, + Formattable(UDate(8.71068e+011), Formattable::kIsDate), + "a disturbance in the Force" + }; + + UnicodeString result; + result = MessageFormat::format( + "At {1,TIME} on {1,DATE,SHORT}, there was {2} on planet {0,NUMBER,INTEGER}.", + arguments, + 3, + result, + err); + + if (U_FAILURE(err)) { + errln("TestTurkishCasing #1 with error code %s", u_errorName(err)); + return; + } + + const UnicodeString expected( + "At 12:20:00 on 08.08.1997, there was a disturbance in the Force on planet 7.", ""); + if (result != expected) { + errln("TestTurkishCasing failed on test"); + errln( UnicodeString(" Result: ") + result ); + errln( UnicodeString(" Expected: ") + expected ); + } + Locale::setDefault( saveDefaultLocale, err ); +} void TestMessageFormat::testSimpleFormat(/* char* par */) { @@ -1144,9 +1181,15 @@ void TestMessageFormat::TestRBNF(void) { Formattable args[1]; NumberFormat* numFmt = NumberFormat::createInstance(locale, ec); + if (U_FAILURE(ec)) { + dataerrln("Error calling NumberFormat::createInstance()"); + return; + } + for (int i = 0; i < formats_count; ++i) { MessageFormat* fmt = new MessageFormat(formats[i], locale, ec); logln((UnicodeString)"Testing format pattern: '" + formats[i] + "'"); + for (int j = 0; j < values_count; ++j) { ec = U_ZERO_ERROR; numFmt->parse(values[j], args[0], ec); @@ -1175,4 +1218,41 @@ void TestMessageFormat::TestRBNF(void) { delete numFmt; } +void TestMessageFormat::testAutoQuoteApostrophe(void) { + const char* patterns[] = { // pattern, expected pattern + "'", "''", + "''", "''", + "'{", "'{'", + "' {", "'' {", + "'a", "''a", + "'{'a", "'{'a", + "'{a'", "'{a'", + "'{}", "'{}'", + "{'", "{'", + "{'a", "{'a", + "{'a{}'a}'a", "{'a{}'a}''a", + "'}'", "'}'", + "'} '{'}'", "'} '{'}''", + "'} {{{''", "'} {{{'''", + }; + int32_t pattern_count = sizeof(patterns)/sizeof(patterns[0]); + + for (int i = 0; i < pattern_count; i += 2) { + UErrorCode status = U_ZERO_ERROR; + UnicodeString result = MessageFormat::autoQuoteApostrophe(patterns[i], status); + UnicodeString target(patterns[i+1]); + if (target != result) { + const int BUF2_LEN = 64; + char buf[256]; + char buf2[BUF2_LEN]; + int32_t len = result.extract(0, result.length(), buf2, BUF2_LEN); + if (len >= BUF2_LEN) { + buf2[BUF2_LEN-1] = 0; + } + sprintf(buf, "[%2d] test \"%s\": target (\"%s\") != result (\"%s\")\n", i/2, patterns[i], patterns[i+1], buf2); + errln(buf); + } + } +} + #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/intltest/tmsgfmt.h b/icuSources/test/intltest/tmsgfmt.h index d610565e..5534dadf 100644 --- a/icuSources/test/intltest/tmsgfmt.h +++ b/icuSources/test/intltest/tmsgfmt.h @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2005, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -85,6 +85,8 @@ public: void testFormat(void); void testParse(void); void testAdopt(void); + void TestTurkishCasing(void); + void testAutoQuoteApostrophe(void); private: }; diff --git a/icuSources/test/intltest/transapi.cpp b/icuSources/test/intltest/transapi.cpp index 9be3923f..d876636c 100644 --- a/icuSources/test/intltest/transapi.cpp +++ b/icuSources/test/intltest/transapi.cpp @@ -1,6 +1,6 @@ /************************************************************************ * COPYRIGHT: - * Copyright (c) 2000-2004, International Business Machines Corporation + * Copyright (c) 2000-2005, International Business Machines Corporation * and others. All Rights Reserved. ************************************************************************/ /************************************************************************ @@ -27,8 +27,6 @@ #include "unicode/locid.h" #include "unicode/uniset.h" -static const UVersionInfo ICU_31 = {3,1,0,0}; - int32_t getInt(UnicodeString str) { char buffer[20]; @@ -63,6 +61,7 @@ TransliteratorAPITest::runIndexedTest(int32_t index, UBool exec, TESTCASE(11,TestClone); TESTCASE(12,TestNullTransliterator); TESTCASE(13,TestRegisterUnregister); + TESTCASE(14,TestUnicodeFunctor); default: name = ""; break; } } @@ -87,7 +86,7 @@ void TransliteratorAPITest::TestgetID() { for (i=0; i<Transliterator::countAvailableIDs(); i++){ status = U_ZERO_ERROR; ID = (UnicodeString) Transliterator::getAvailableID(i); - if(ID.indexOf("Thai")>-1 && isICUVersionAtLeast(ICU_31)){ + if(ID.indexOf("Thai")>-1){ continue; } t = Transliterator::createInstance(ID, UTRANS_FORWARD, parseError, status); @@ -964,7 +963,24 @@ void TransliteratorAPITest::callEverything(const Transliterator *tr, int line) { delete clonedTR; } +static const int MyUnicodeFunctorTestClassID = 0; +class MyUnicodeFunctorTestClass : public UnicodeFunctor { +public: + virtual UnicodeFunctor* clone() const {return NULL;} + static UClassID getStaticClassID(void) {return (UClassID)&MyUnicodeFunctorTestClassID;} + virtual UClassID getDynamicClassID(void) const {return getStaticClassID();}; + virtual void setData(const TransliterationRuleData*) {} +}; +void TransliteratorAPITest::TestUnicodeFunctor() { + MyUnicodeFunctorTestClass myClass; + if (myClass.toMatcher() != NULL) { + errln("FAIL: UnicodeFunctor::toMatcher did not return NULL"); + } + if (myClass.toReplacer() != NULL) { + errln("FAIL: UnicodeFunctor::toReplacer did not return NULL"); + } +} #endif /* #if !UCONFIG_NO_TRANSLITERATION */ diff --git a/icuSources/test/intltest/transapi.h b/icuSources/test/intltest/transapi.h index 11083145..5dca65ef 100644 --- a/icuSources/test/intltest/transapi.h +++ b/icuSources/test/intltest/transapi.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2001-2003, International Business Machines Corporation and + * Copyright (c) 2001-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /************************************************************************ @@ -59,6 +59,8 @@ public: void TestDevanagariLatinRT(void); + void TestUnicodeFunctor(void); + /*Internal functions used*/ void doTest(const UnicodeString& , const UnicodeString& , const UnicodeString& ); diff --git a/icuSources/test/intltest/transrt.cpp b/icuSources/test/intltest/transrt.cpp index f8803212..056301c0 100644 --- a/icuSources/test/intltest/transrt.cpp +++ b/icuSources/test/intltest/transrt.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -83,15 +83,8 @@ TransliteratorRoundTripTest::runIndexedTest(int32_t index, UBool exec, // Time bomb - allows temporary behavior that expires at a given // release //-------------------------------------------------------------------- -/* -static const UVersionInfo ICU_30 = {3,0,0,0}; +static const UVersionInfo ICU_37 = {3,7,0,0}; -static UBool isICUVersionAtLeast(const UVersionInfo x) { - UVersionInfo v; - u_getVersion(v); - return (uprv_memcmp(v, x, U_MAX_VERSION_LENGTH) >= 0); -} -*/ //-------------------------------------------------------------------- // TransliteratorPointer @@ -272,6 +265,10 @@ UBool LegalGreek::isRho(UChar c) { } // AbbreviatedUnicodeSetIterator Interface --------------------------------------------- +// +// Iterate over a UnicodeSet, only returning a sampling of the contained code points. +// density is the approximate total number of code points to returned for the entire set. +// class AbbreviatedUnicodeSetIterator : public UnicodeSetIterator { public : @@ -281,18 +278,18 @@ public : void reset(UnicodeSet& set, UBool abb = FALSE, int32_t density = 100); /** - * ICU "poor man's RTTI", returns a UClassID for the actual class. + * ICU "poor man's RTTI", returns a UClassID for this class. */ - virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } + static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } /** - * ICU "poor man's RTTI", returns a UClassID for this class. + * ICU "poor man's RTTI", returns a UClassID for the actual class. */ - static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } + virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } private : UBool abbreviated; - int32_t perRange; + int32_t perRange; // The maximum number of code points to be returned from each range virtual void loadRange(int32_t range); /** @@ -1048,7 +1045,7 @@ static void writeStringInU8(FILE *out, const UnicodeString &s) { uint8_t bufForOneChar[10]; UBool isError = FALSE; int32_t destIdx = 0; - U8_APPEND(bufForOneChar, destIdx, sizeof(bufForOneChar), c, isError); + U8_APPEND(bufForOneChar, destIdx, (int32_t)sizeof(bufForOneChar), c, isError); fwrite(bufForOneChar, 1, destIdx, out); } } @@ -1065,10 +1062,12 @@ void TransliteratorRoundTripTest::TestHan() { // the implementation. Once USet gets the missing API, switch back // to using that. USet *USetExemplars = NULL; + ULocaleData *uld = ulocdata_open("zh",&status); USetExemplars = uset_open(0, 0); - USetExemplars = ulocdata_getExemplarSet(USetExemplars, "zh", 0, &status); + USetExemplars = ulocdata_getExemplarSet(uld, USetExemplars, 0, ULOCDATA_ES_STANDARD, &status); ASSERT_SUCCESS(status); UnicodeSet *exemplars = (UnicodeSet *)USetExemplars; + ulocdata_close(uld); UnicodeString source; UChar32 c; @@ -1102,19 +1101,19 @@ void TransliteratorRoundTripTest::TestHan() { pn->transliterate(target2); // verify that there are no marks - Transliterator *nfc = Transliterator::createInstance("nfc", UTRANS_FORWARD, status); + Transliterator *nfd = Transliterator::createInstance("nfd", UTRANS_FORWARD, status); ASSERT_SUCCESS(status); - UnicodeString nfced = target2; - nfc->transliterate(nfced); - UnicodeSet allMarks("[:mark:]", status); + UnicodeString nfded = target2; + nfd->transliterate(nfded); + UnicodeSet allMarks("[\\u0304\\u0301\\u030C\\u0300\\u0306]", status); // look only for Pinyin tone marks, not all marks (there are some others in there) ASSERT_SUCCESS(status); - assertFalse("NumericPinyin must contain no marks", allMarks.containsSome(nfced)); + assertFalse("NumericPinyin must contain no marks", allMarks.containsSome(nfded)); // verify roundtrip Transliterator *np = pn->createInverse(status); ASSERT_SUCCESS(status); - UnicodeString target3 = target; + UnicodeString target3 = target2; np->transliterate(target3); UBool roundtripOK = (target3.compare(target) == 0); assertTrue("NumericPinyin must roundtrip", roundtripOK); @@ -1126,30 +1125,31 @@ void TransliteratorRoundTripTest::TestHan() { writeStringInU8(out, target); fprintf(out, "\nPinyin-Numeric-Pinyin: "); writeStringInU8(out, target2); + fprintf(out, "\nNumeric-Pinyin-Pinyin: "); + writeStringInU8(out, target3); fprintf(out, "\n"); fclose(out); } delete hanTL; delete pn; - delete nfc; + delete nfd; delete np; uset_close(USetExemplars); } void TransliteratorRoundTripTest::TestGreek() { - // weiv removed the test and the fiter - /* - if (isICUVersionAtLeast(ICU_30)) { - // We temporarily filter against Unicode 3.2, but we only do this - // before version 3.0. - errln("FAIL: TestGreek needs to be updated to remove Unicode 3.2 filter"); + + if (isICUVersionAtLeast(ICU_37)) { + // We temporarily filter against Unicode 4.1, but we only do this + // before version 3.4. + errln("FAIL: TestGreek needs to be updated to remove delete the [:Age=4.0:] filter "); return; } else { - logln("Warning: TestGreek needs to be updated to remove Unicode 3.2 filter"); + logln("Warning: TestGreek needs to be updated to remove delete the section marked [:Age=4.0:] filter"); } - */ + RTTest test("Latin-Greek"); LegalGreek *legal = new LegalGreek(TRUE); @@ -1159,7 +1159,7 @@ void TransliteratorRoundTripTest::TestGreek() { "\\u1D5D-\\u1D61" // Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI "\\u1D66-\\u1D6A" // L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI "\\u03D7-\\u03EF" // \N{GREEK KAI SYMBOL}..\N{COPTIC SMALL LETTER DEI} - "]]", + "] & [:Age=4.0:]]", //UnicodeString("[[\\u003B\\u00B7[:Greek:]-[\\u0374\\u0385\\u1fcd\\u1fce\\u1fdd\\u1fde\\u1fed-\\u1fef\\u1ffd\\u03D7-\\u03EF]]&[:Age=3.2:]]", ""), @@ -1172,17 +1172,16 @@ void TransliteratorRoundTripTest::TestGreek() { void TransliteratorRoundTripTest::TestGreekUNGEGN() { - // weiv removed the test and the fiter - /* - if (isICUVersionAtLeast(ICU_30)) { - // We temporarily filter against Unicode 3.2, but we only do this - // before version 3.0. - errln("FAIL: TestGreekUNGEGN needs to be updated to remove Unicode 3.2 filter"); + + if (isICUVersionAtLeast(ICU_37)) { + // We temporarily filter against Unicode 4.1, but we only do this + // before version 3.4. + errln("FAIL: TestGreek needs to be updated to remove delete the [:Age=4.0:] filter "); return; } else { - logln("Warning: TestGreekUNGEGN needs to be updated to remove Unicode 3.2 filter"); + logln("Warning: TestGreek needs to be updated to remove delete the section marked [:Age=4.0:] filter"); } - */ + RTTest test("Latin-Greek/UNGEGN"); LegalGreek *legal = new LegalGreek(FALSE); @@ -1192,7 +1191,7 @@ void TransliteratorRoundTripTest::TestGreekUNGEGN() { "\\u1D5D-\\u1D61" // Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI "\\u1D66-\\u1D6A" // L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI "\\u03D7-\\u03EF" // \N{GREEK KAI SYMBOL}..\N{COPTIC SMALL LETTER DEI} - "]]", + "] & [:Age=4.0:]]", //UnicodeString("[[\\u003B\\u00B7[:Greek:]-[\\u0374\\u0385\\u1fce\\u1fde\\u03D7-\\u03EF]]&[:Age=3.2:]]", ""), "[\\u0385\\u00B5\\u037A\\u03D0-\\uFFFF {\\u039C\\u03C0}]", /* roundtrip exclusions */ @@ -1202,17 +1201,16 @@ void TransliteratorRoundTripTest::TestGreekUNGEGN() { } void TransliteratorRoundTripTest::Testel() { - // weiv removed the test and the fiter - /* - if (isICUVersionAtLeast(ICU_30)) { - // We temporarily filter against Unicode 3.2, but we only do this - // before version 3.0. - errln("FAIL: Testel needs to be updated to remove Unicode 3.2 filter"); + + if (isICUVersionAtLeast(ICU_37)) { + // We temporarily filter against Unicode 4.1, but we only do this + // before version 3.4. + errln("FAIL: TestGreek needs to be updated to remove delete the [:Age=4.0:] filter "); return; } else { - logln("Warning: Testel needs to be updated to remove Unicode 3.2 filter"); + logln("Warning: TestGreek needs to be updated to remove delete the section marked [:Age=4.0:] filter"); } - */ + RTTest test("Latin-el"); LegalGreek *legal = new LegalGreek(FALSE); @@ -1222,7 +1220,7 @@ void TransliteratorRoundTripTest::Testel() { "\\u1D5D-\\u1D61" // Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI "\\u1D66-\\u1D6A" // L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI "\\u03D7-\\u03EF" // \N{GREEK KAI SYMBOL}..\N{COPTIC SMALL LETTER DEI} - "]]", + "] & [:Age=4.0:]]", //UnicodeString("[[\\u003B\\u00B7[:Greek:]-[\\u0374\\u0385\\u1fce\\u1fde\\u03D7-\\u03EF]]&[:Age=3.2:]]", ""), "[\\u00B5\\u037A\\u03D0-\\uFFFF {\\u039C\\u03C0}]", /* exclusions */ @@ -1272,6 +1270,14 @@ UBool LegalHebrew::is(const UnicodeString& sourceString)const{ return TRUE; } void TransliteratorRoundTripTest::TestHebrew() { + if (isICUVersionAtLeast(ICU_37)) { + // We temporarily filter against Unicode 4.1, but we only do this + // before version 3.4. + errln("FAIL: TestHebrew needs to be updated to remove delete the [:Age=4.0:] filter "); + return; + } else { + logln("Warning: TestHebrew needs to be updated to remove delete the section marked [:Age=4.0:] filter"); + } //long start = System.currentTimeMillis(); UErrorCode error = U_ZERO_ERROR; LegalHebrew* legal = new LegalHebrew(error); @@ -1280,7 +1286,8 @@ void TransliteratorRoundTripTest::TestHebrew() { return; } RTTest test("Latin-Hebrew"); - test.test("[a-zA-Z\\u02BC\\u02BB]", "[[:hebrew:]-[\\u05BD\\uFB00-\\uFBFF]]", "[\\u05F0\\u05F1\\u05F2]", this, quick, legal); + test.test("[a-zA-Z\\u02BC\\u02BB]", "[[[:hebrew:]-[\\u05BD\\uFB00-\\uFBFF]]&[:Age=4.0:]]", "[\\u05F0\\u05F1\\u05F2]", this, quick, legal); + //showElapsed(start, "TestHebrew"); delete legal; } @@ -1305,26 +1312,8 @@ class LegalIndic :public Legal{ UnicodeSet sanskritStressSigns; UnicodeSet chandrabindu; -public: - LegalIndic(){ - UErrorCode status = U_ZERO_ERROR; - vowelSignSet.addAll( UnicodeSet("[\\u0902\\u0903\\u0904\\u093e-\\u094c\\u0962\\u0963]",status));/* Devanagari */ - vowelSignSet.addAll( UnicodeSet("[\\u0982\\u0983\\u09be-\\u09cc\\u09e2\\u09e3\\u09D7]",status));/* Bengali */ - vowelSignSet.addAll( UnicodeSet("[\\u0a02\\u0a03\\u0a3e-\\u0a4c\\u0a62\\u0a63\\u0a70\\u0a71]",status));/* Gurmukhi */ - vowelSignSet.addAll( UnicodeSet("[\\u0a82\\u0a83\\u0abe-\\u0acc\\u0ae2\\u0ae3]",status));/* Gujarati */ - vowelSignSet.addAll( UnicodeSet("[\\u0b02\\u0b03\\u0b3e-\\u0b4c\\u0b62\\u0b63\\u0b56\\u0b57]",status));/* Oriya */ - vowelSignSet.addAll( UnicodeSet("[\\u0b82\\u0b83\\u0bbe-\\u0bcc\\u0be2\\u0be3\\u0bd7]",status));/* Tamil */ - vowelSignSet.addAll( UnicodeSet("[\\u0c02\\u0c03\\u0c3e-\\u0c4c\\u0c62\\u0c63\\u0c55\\u0c56]",status));/* Telugu */ - vowelSignSet.addAll( UnicodeSet("[\\u0c82\\u0c83\\u0cbe-\\u0ccc\\u0ce2\\u0ce3\\u0cd5\\u0cd6]",status));/* Kannada */ - vowelSignSet.addAll( UnicodeSet("[\\u0d02\\u0d03\\u0d3e-\\u0d4c\\u0d62\\u0d63\\u0d57]",status));/* Malayalam */ - - avagraha.addAll(UnicodeSet("[\\u093d\\u09bd\\u0abd\\u0b3d\\u0cbd]",status)); - nukta.addAll(UnicodeSet("[\\u093c\\u09bc\\u0a3c\\u0abc\\u0b3c\\u0cbc]",status)); - virama.addAll(UnicodeSet("[\\u094d\\u09cd\\u0a4d\\u0acd\\u0b4d\\u0bcd\\u0c4d\\u0ccd\\u0d4d]",status)); - sanskritStressSigns.addAll(UnicodeSet("[\\u0951\\u0952\\u0953\\u0954]",status)); - chandrabindu.addAll(UnicodeSet("[\\u0901\\u0981\\u0A81\\u0b01\\u0c01]",status)); - - } +public: + LegalIndic(); virtual UBool is(const UnicodeString& sourceString) const; virtual ~LegalIndic() {}; }; @@ -1349,13 +1338,32 @@ UBool LegalIndic::is(const UnicodeString& sourceString) const{ } return TRUE; } +LegalIndic::LegalIndic(){ + UErrorCode status = U_ZERO_ERROR; + vowelSignSet.addAll( UnicodeSet("[\\u0902\\u0903\\u0904\\u093e-\\u094c\\u0962\\u0963]",status));/* Devanagari */ + vowelSignSet.addAll( UnicodeSet("[\\u0982\\u0983\\u09be-\\u09cc\\u09e2\\u09e3\\u09D7]",status));/* Bengali */ + vowelSignSet.addAll( UnicodeSet("[\\u0a02\\u0a03\\u0a3e-\\u0a4c\\u0a62\\u0a63\\u0a70\\u0a71]",status));/* Gurmukhi */ + vowelSignSet.addAll( UnicodeSet("[\\u0a82\\u0a83\\u0abe-\\u0acc\\u0ae2\\u0ae3]",status));/* Gujarati */ + vowelSignSet.addAll( UnicodeSet("[\\u0b02\\u0b03\\u0b3e-\\u0b4c\\u0b62\\u0b63\\u0b56\\u0b57]",status));/* Oriya */ + vowelSignSet.addAll( UnicodeSet("[\\u0b82\\u0b83\\u0bbe-\\u0bcc\\u0be2\\u0be3\\u0bd7]",status));/* Tamil */ + vowelSignSet.addAll( UnicodeSet("[\\u0c02\\u0c03\\u0c3e-\\u0c4c\\u0c62\\u0c63\\u0c55\\u0c56]",status));/* Telugu */ + vowelSignSet.addAll( UnicodeSet("[\\u0c82\\u0c83\\u0cbe-\\u0ccc\\u0ce2\\u0ce3\\u0cd5\\u0cd6]",status));/* Kannada */ + vowelSignSet.addAll( UnicodeSet("[\\u0d02\\u0d03\\u0d3e-\\u0d4c\\u0d62\\u0d63\\u0d57]",status));/* Malayalam */ + + avagraha.addAll(UnicodeSet("[\\u093d\\u09bd\\u0abd\\u0b3d\\u0cbd]",status)); + nukta.addAll(UnicodeSet("[\\u093c\\u09bc\\u0a3c\\u0abc\\u0b3c\\u0cbc]",status)); + virama.addAll(UnicodeSet("[\\u094d\\u09cd\\u0a4d\\u0acd\\u0b4d\\u0bcd\\u0c4d\\u0ccd\\u0d4d]",status)); + sanskritStressSigns.addAll(UnicodeSet("[\\u0951\\u0952\\u0953\\u0954\\u097d]",status)); + chandrabindu.addAll(UnicodeSet("[\\u0901\\u0981\\u0A81\\u0b01\\u0c01]",status)); + + } static const char latinForIndic[] = "[['.0-9A-Za-z~\\u00C0-\\u00C5\\u00C7-\\u00CF\\u00D1-\\u00D6\\u00D9-\\u00DD" "\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6\\u00F9-\\u00FD\\u00FF-\\u010F" "\\u0112-\\u0125\\u0128-\\u0130\\u0134-\\u0137\\u0139-\\u013E\\u0143-\\u0148" "\\u014C-\\u0151\\u0154-\\u0165\\u0168-\\u017E\\u01A0-\\u01A1\\u01AF-\\u01B0" "\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E6-\\u01ED\\u01F0\\u01F4-\\u01F5\\u01F8-\\u01FB" - "\\u0200-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u0303-\\u0304\\u0306\\u0314-\\u0315" + "\\u0200-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u0294\\u0303-\\u0304\\u0306\\u0314-\\u0315" "\\u0325\\u040E\\u0419\\u0439\\u045E\\u04C1-\\u04C2\\u04D0-\\u04D1\\u04D6-\\u04D7" "\\u04E2-\\u04E3\\u04EE-\\u04EF\\u1E00-\\u1E99\\u1EA0-\\u1EF9\\u1F01\\u1F03\\u1F05" "\\u1F07\\u1F09\\u1F0B\\u1F0D\\u1F0F\\u1F11\\u1F13\\u1F15\\u1F19\\u1F1B\\u1F1D\\u1F21" @@ -1385,9 +1393,16 @@ void TransliteratorRoundTripTest::TestDevanagariLatin() { } RTTest test("Latin-Devanagari"); Legal *legal = new LegalIndic(); - + if (isICUVersionAtLeast(ICU_37)) { + // We temporarily filter against Unicode 4.1, but we only do this + // before version 3.4. + errln("FAIL: TestDevanagariLatin needs to be updated to remove delete the [:Age=4.1:] filter "); + return; + } else { + logln("Warning: TestDevanagariLatin needs to be updated to remove delete the section marked [:Age=4.1:] filter"); + } test.test(UnicodeString(latinForIndic, ""), - UnicodeString("[[:Devanagari:][\\u094d][\\u0964\\u0965]]", ""), "[\\u0965\\u0904]", this, quick, + UnicodeString("[[[:Devanagari:][\\u094d][\\u0964\\u0965]]&[:Age=4.1:]]", ""), "[\\u0965\\u0904]", this, quick, legal, 50); delete legal; @@ -1396,92 +1411,93 @@ void TransliteratorRoundTripTest::TestDevanagariLatin() { /* Defined this way for HP/UX11CC :-( */ static const int32_t INTER_INDIC_ARRAY_WIDTH = 4; static const char * const interIndicArray[] = { + "BENGALI-DEVANAGARI", "[:BENGALI:]", "[:Devanagari:]", - "[\\u0904\\u0951-\\u0954\\u0943-\\u0949\\u094a\\u0962\\u0963\\u090D\\u090e\\u0911\\u0912\\u0929\\u0933\\u0934\\u0935\\u093d\\u0950\\u0958\\u0959\\u095a\\u095b\\u095e\\u09f0\\u09f1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u0904\\u0951-\\u0954\\u0943-\\u0949\\u094a\\u0962\\u0963\\u090D\\u090e\\u0911\\u0912\\u0929\\u0933\\u0934\\u0935\\u093d\\u0950\\u0958\\u0959\\u095a\\u095b\\u095e\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-BENGALI", "[:Devanagari:]", "[:BENGALI:]", - "[\\u0951-\\u0954\\u0951-\\u0954\\u09D7\\u090D\\u090e\\u0911\\u0912\\u0929\\u0933\\u0934\\u0935\\u093d\\u0950\\u0958\\u0959\\u095a\\u095b\\u095e\\u09f0\\u09f1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u0951-\\u0954\\u0951-\\u0954\\u09D7\\u090D\\u090e\\u0911\\u0912\\u0929\\u0933\\u0934\\u0935\\u093d\\u0950\\u0958\\u0959\\u095a\\u095b\\u095e\\u09f0\\u09f1\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "GURMUKHI-DEVANAGARI", "[:GURMUKHI:]", "[:Devanagari:]", - "[\\u0904\\u0901\\u0902\\u0936\\u0933\\u0951-\\u0954\\u0902\\u0903\\u0943-\\u0949\\u094a\\u0962\\u0963\\u090B\\u090C\\u090D\\u090e\\u0911\\u0912\\u0934\\u0937\\u093D\\u0950\\u0960\\u0961\\u0a72\\u0a73\\u0a74]", /*roundtrip exclusions*/ + "[\\u0904\\u0901\\u0902\\u0936\\u0933\\u0951-\\u0954\\u0902\\u0903\\u0943-\\u0949\\u094a\\u0962\\u0963\\u090B\\u090C\\u090D\\u090e\\u0911\\u0912\\u0934\\u0937\\u093D\\u0950\\u0960\\u0961\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-GURMUKHI", "[:Devanagari:]", "[:GURMUKHI:]", "[\\u0904\\u0A02\\u0946\\u0A5C\\u0951-\\u0954\\u0A70\\u0A71\\u090B\\u090C\\u090D\\u090e\\u0911\\u0912\\u0934\\u0937\\u093D\\u0950\\u0960\\u0961\\u0a72\\u0a73\\u0a74]", /*roundtrip exclusions*/ "GUJARATI-DEVANAGARI", "[:GUJARATI:]", "[:Devanagari:]", - "[\\u0946\\u094A\\u0962\\u0963\\u0951-\\u0954\\u0961\\u090c\\u090e\\u0912]", /*roundtrip exclusions*/ + "[\\u0946\\u094A\\u0962\\u0963\\u0951-\\u0954\\u0961\\u090c\\u090e\\u0912\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-GUJARATI", "[:Devanagari:]", "[:GUJARATI:]", "[\\u0951-\\u0954\\u0961\\u090c\\u090e\\u0912]", /*roundtrip exclusions*/ "ORIYA-DEVANAGARI", "[:ORIYA:]", "[:Devanagari:]", - "[\\u0904\\u0943-\\u094a\\u0962\\u0963\\u0951-\\u0954\\u0950\\u090D\\u090e\\u0912\\u0911\\u0931\\u0935]", /*roundtrip exclusions*/ + "[\\u0904\\u0943-\\u094a\\u0962\\u0963\\u0951-\\u0954\\u0950\\u090D\\u090e\\u0912\\u0911\\u0931\\u0935\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-ORIYA", "[:Devanagari:]", "[:ORIYA:]", "[\\u0b5f\\u0b56\\u0b57\\u0b70\\u0b71\\u0950\\u090D\\u090e\\u0912\\u0911\\u0931]", /*roundtrip exclusions*/ "Tamil-DEVANAGARI", "[:tamil:]", "[:Devanagari:]", - "[\\u0901\\u0904\\u093c\\u0943-\\u094a\\u0951-\\u0954\\u0962\\u0963\\u090B\\u090C\\u090D\\u0911\\u0916\\u0917\\u0918\\u091B\\u091D\\u0920\\u0921\\u0922\\u0925\\u0926\\u0927\\u092B\\u092C\\u092D\\u0936\\u093d\\u0950[\\u0958-\\u0961]]", /*roundtrip exclusions*/ + "[\\u0901\\u0904\\u093c\\u0943-\\u094a\\u0951-\\u0954\\u0962\\u0963\\u090B\\u090C\\u090D\\u0911\\u0916\\u0917\\u0918\\u091B\\u091D\\u0920\\u0921\\u0922\\u0925\\u0926\\u0927\\u092B\\u092C\\u092D\\u0936\\u093d\\u0950[\\u0958-\\u0961]\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-Tamil", "[:Devanagari:]", "[:tamil:]", "[\\u0bd7]", /*roundtrip exclusions*/ "Telugu-DEVANAGARI", "[:telugu:]", "[:Devanagari:]", - "[\\u0904\\u093c\\u0950\\u0945\\u0949\\u0951-\\u0954\\u0962\\u0963\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]]", /*roundtrip exclusions*/ + "[\\u0904\\u093c\\u0950\\u0945\\u0949\\u0951-\\u0954\\u0962\\u0963\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-TELUGU", "[:Devanagari:]", "[:TELUGU:]", "[\\u0c55\\u0c56\\u0950\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]]", /*roundtrip exclusions*/ "KANNADA-DEVANAGARI", "[:KANNADA:]", "[:Devanagari:]", - "[\\u0901\\u0904\\u0946\\u093c\\u0950\\u0945\\u0949\\u0951-\\u0954\\u0962\\u0963\\u0950\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]]", /*roundtrip exclusions*/ + "[\\u0901\\u0904\\u0946\\u093c\\u0950\\u0945\\u0949\\u0951-\\u0954\\u0962\\u0963\\u0950\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-KANNADA", "[:Devanagari:]", "[:KANNADA:]", "[{\\u0cb0\\u0cbc}{\\u0cb3\\u0cbc}\\u0cde\\u0cd5\\u0cd6\\u0950\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]]", /*roundtrip exclusions*/ "MALAYALAM-DEVANAGARI", "[:MALAYALAM:]", "[:Devanagari:]", - "[\\u0901\\u0904\\u094a\\u094b\\u094c\\u093c\\u0950\\u0944\\u0945\\u0949\\u0951-\\u0954\\u0962\\u0963\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]]", /*roundtrip exclusions*/ + "[\\u0901\\u0904\\u094a\\u094b\\u094c\\u093c\\u0950\\u0944\\u0945\\u0949\\u0951-\\u0954\\u0962\\u0963\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]\\u097d]", /*roundtrip exclusions*/ "DEVANAGARI-MALAYALAM", "[:Devanagari:]", "[:MALAYALAM:]", "[\\u0d4c\\u0d57\\u0950\\u090D\\u0911\\u093d\\u0929\\u0934[\\u0958-\\u095f]]", /*roundtrip exclusions*/ "GURMUKHI-BENGALI", "[:GURMUKHI:]", "[:BENGALI:]", - "[\\u0981\\u0982\\u09b6\\u09e2\\u09e3\\u09c3\\u09c4\\u09d7\\u098B\\u098C\\u09B7\\u09E0\\u09E1\\u09F0\\u09F1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u0981\\u0982\\u09b6\\u09e2\\u09e3\\u09c3\\u09c4\\u09d7\\u098B\\u098C\\u09B7\\u09E0\\u09E1\\u09F0\\u09F1\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-GURMUKHI", "[:BENGALI:]", "[:GURMUKHI:]", "[\\u0A02\\u0a5c\\u0a47\\u0a70\\u0a71\\u0A33\\u0A35\\u0A59\\u0A5A\\u0A5B\\u0A5E\\u0A72\\u0A73\\u0A74]", /*roundtrip exclusions*/ "GUJARATI-BENGALI", "[:GUJARATI:]", "[:BENGALI:]", - "[\\u09d7\\u09e2\\u09e3\\u098c\\u09e1\\u09f0\\u09f1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u09d7\\u09e2\\u09e3\\u098c\\u09e1\\u09f0\\u09f1\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-GUJARATI", "[:BENGALI:]", "[:GUJARATI:]", "[\\u0A82\\u0a83\\u0Ac9\\u0Ac5\\u0ac7\\u0A8D\\u0A91\\u0AB3\\u0AB5\\u0ABD\\u0AD0]", /*roundtrip exclusions*/ "ORIYA-BENGALI", "[:ORIYA:]", "[:BENGALI:]", - "[\\u09c4\\u09e2\\u09e3\\u09f0\\u09f1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u09c4\\u09e2\\u09e3\\u09f0\\u09f1\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-ORIYA", "[:BENGALI:]", "[:ORIYA:]", "[\\u0b35\\u0b71\\u0b5f\\u0b56\\u0b33\\u0b3d]", /*roundtrip exclusions*/ "Tamil-BENGALI", "[:tamil:]", "[:BENGALI:]", - "[\\u0981\\u09bc\\u09c3\\u09c4\\u09e2\\u09e3\\u09f0\\u09f1\\u098B\\u098C\\u0996\\u0997\\u0998\\u099B\\u099D\\u09A0\\u09A1\\u09A2\\u09A5\\u09A6\\u09A7\\u09AB\\u09AC\\u09AD\\u09B6\\u09DC\\u09DD\\u09DF\\u09E0\\u09E1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u0981\\u09bc\\u09c3\\u09c4\\u09e2\\u09e3\\u09f0\\u09f1\\u098B\\u098C\\u0996\\u0997\\u0998\\u099B\\u099D\\u09A0\\u09A1\\u09A2\\u09A5\\u09A6\\u09A7\\u09AB\\u09AC\\u09AD\\u09B6\\u09DC\\u09DD\\u09DF\\u09E0\\u09E1\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-Tamil", "[:BENGALI:]", "[:tamil:]", "[\\u0bc6\\u0bc7\\u0bca\\u0B8E\\u0B92\\u0BA9\\u0BB1\\u0BB3\\u0BB4\\u0BB5]", /*roundtrip exclusions*/ "Telugu-BENGALI", "[:telugu:]", "[:BENGALI:]", - "[\\u09e2\\u09e3\\u09bc\\u09d7\\u09f0\\u09f1\\u09dc\\u09dd\\u09df\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u09e2\\u09e3\\u09bc\\u09d7\\u09f0\\u09f1\\u09dc\\u09dd\\u09df\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-TELUGU", "[:BENGALI:]", "[:TELUGU:]", "[\\u0c55\\u0c56\\u0c47\\u0c46\\u0c4a\\u0C0E\\u0C12\\u0C31\\u0C33\\u0C35]", /*roundtrip exclusions*/ "KANNADA-BENGALI", "[:KANNADA:]", "[:BENGALI:]", - "[\\u0981\\u09e2\\u09e3\\u09bc\\u09d7\\u09dc\\u09dd\\u09df\\u09f0\\u09f1\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u0981\\u09e2\\u09e3\\u09bc\\u09d7\\u09dc\\u09dd\\u09df\\u09f0\\u09f1\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-KANNADA", "[:BENGALI:]", "[:KANNADA:]", "[{\\u0cb0\\u0cbc}{\\u0cb3\\u0cbc}\\u0cc6\\u0cca\\u0cd5\\u0cd6\\u0cc7\\u0C8E\\u0C92\\u0CB1\\u0cb3\\u0cb5\\u0cde]", /*roundtrip exclusions*/ "MALAYALAM-BENGALI", "[:MALAYALAM:]", "[:BENGALI:]", - "[\\u0981\\u09e2\\u09e3\\u09bc\\u09c4\\u09f0\\u09f1\\u09dc\\u09dd\\u09df\\u09dc\\u09dd\\u09df\\u09f2-\\u09fa]", /*roundtrip exclusions*/ + "[\\u0981\\u09e2\\u09e3\\u09bc\\u09c4\\u09f0\\u09f1\\u09dc\\u09dd\\u09df\\u09dc\\u09dd\\u09df\\u09f2-\\u09fa\\u09ce]", /*roundtrip exclusions*/ "BENGALI-MALAYALAM", "[:BENGALI:]", "[:MALAYALAM:]", "[\\u0d46\\u0d4a\\u0d47\\u0d31-\\u0d35\\u0d0e\\u0d12]", /*roundtrip exclusions*/ @@ -1502,7 +1518,7 @@ static const char * const interIndicArray[] = { "[\\u0A01\\u0A02\\u0a33\\u0a36\\u0a3c\\u0a70\\u0a71\\u0a47\\u0A16\\u0A17\\u0A18\\u0A1B\\u0A1D\\u0A20\\u0A21\\u0A22\\u0A25\\u0A26\\u0A27\\u0A2B\\u0A2C\\u0A2D\\u0A59\\u0A5A\\u0A5B\\u0A5C\\u0A5E\\u0A72\\u0A73\\u0A74]", /*roundtrip exclusions*/ "GURMUKHI-TAMIL", "[:GURMUKHI:]", "[:TAMIL:]", - "[\\u0b82\\u0bc6\\u0bca\\u0bd7\\u0bb7\\u0bb3\\u0b83\\u0B8E\\u0B92\\u0BA9\\u0BB1\\u0BB4]", /*roundtrip exclusions*/ + "[\\u0b82\\u0bc6\\u0bca\\u0bd7\\u0bb7\\u0bb3\\u0b83\\u0B8E\\u0B92\\u0BA9\\u0BB1\\u0BB4\\u0bb6]", /*roundtrip exclusions*/ "TELUGU-GURMUKHI", "[:TELUGU:]", "[:GURMUKHI:]", "[\\u0A02\\u0a33\\u0a36\\u0a3c\\u0a70\\u0a71\\u0A59\\u0A5A\\u0A5B\\u0A5C\\u0A5E\\u0A72\\u0A73\\u0A74]", /*roundtrip exclusions*/ @@ -1613,7 +1629,7 @@ static const char * const interIndicArray[] = { "[\\u0d4c\\u0d57\\u0d46\\u0D34]", /*roundtrip exclusions*/ "Latin-Bengali",latinForIndic, "[[:Bengali:][\\u0964\\u0965]]", - "[\\u0965\\u09f0-\\u09fa]" /*roundtrip exclusions*/ , + "[\\u0965\\u09f0-\\u09fa\\u09ce]" /*roundtrip exclusions*/ , "Latin-Gurmukhi", latinForIndic, "[[:Gurmukhi:][\\u0964\\u0965]]", "[\\u0a01\\u0965\\u0a02\\u0a72\\u0a73\\u0a74]" /*roundtrip exclusions*/, @@ -1653,18 +1669,40 @@ void TransliteratorRoundTripTest::TestInterIndic() { logln("Testing only 5 of %i. Skipping rest (use -e for exhaustive)",num); num = 5; } + if (isICUVersionAtLeast(ICU_37)) { + // We temporarily filter against Unicode 4.1, but we only do this + // before version 3.4. + errln("FAIL: TestInterIndic needs to be updated to remove delete the [:Age=4.1:] filter "); + return; + } else { + logln("Warning: TestInterIndic needs to be updated to remove delete the section marked [:Age=4.1:] filter"); + } for(int i = 0; i < num;i++){ RTTest test(interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 0]); Legal *legal = new LegalIndic(); - + logln(UnicodeString("Stress testing ") + interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 0]); + /* Uncomment lines below when transliterator is fixed */ + /* test.test( interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 1], interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 2], interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 3], // roundtrip exclusions this, quick, legal, 50); - + */ + /* comment lines below when transliterator is fixed */ + // start + UnicodeString source("["); + source.append(interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 1]); + source.append(" & [:Age=4.1:]]"); + UnicodeString target("["); + target.append(interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 2]); + target.append(" & [:Age=4.1:]]"); + test.test( source, + target, + interIndicArray[i*INTER_INDIC_ARRAY_WIDTH + 3], // roundtrip exclusions + this, quick, legal, 50); + // end delete legal; } - } // end indic tests ---------------------------------------------------------- diff --git a/icuSources/test/intltest/transtst.cpp b/icuSources/test/intltest/transtst.cpp index 7baf42d1..38be8a2a 100644 --- a/icuSources/test/intltest/transtst.cpp +++ b/icuSources/test/intltest/transtst.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -183,11 +183,14 @@ TransliteratorTest::runIndexedTest(int32_t index, UBool exec, TESTCASE(75,TestAllCodepoints); TESTCASE(76,TestBoilerplate); TESTCASE(77,TestAlternateSyntax); + TESTCASE(78,TestBeginEnd); + TESTCASE(79,TestBeginEndToRules); + TESTCASE(80,TestRegisterAlias); default: name = ""; break; } } -static const UVersionInfo ICU_31 = {3,1,0,0}; +static const UVersionInfo ICU_37 = {3,7,0,0}; /** * Make sure every system transliterator can be instantiated. * @@ -222,7 +225,8 @@ void TransliteratorTest::TestInstantiation() { i + ") != getAvailableIDs().snext()"); continue; } - if(id2.indexOf("Thai")>-1 && isICUVersionAtLeast(ICU_31)){ + if(id2.indexOf("Thai")>-1 && !isICUVersionAtLeast(ICU_37)){ + /* The Thai-Latin transliterator doesn't exist in ICU4C yet */ continue; } UParseError parseError; @@ -667,6 +671,14 @@ void TransliteratorTest::TestFiltering(void) { } else { logln(UnicodeString("FAIL: \"") + s + "\", wanted \"" + exp + "\""); } + + // ICU4C ONLY. Do not find Transliterator.orphanFilter() in ICU4J. + UnicodeFilter *f = hex->orphanFilter(); + if (f == NULL){ + errln("FAIL: orphanFilter() should get a UnicodeFilter"); + } else { + delete f; + } delete hex; } @@ -1606,7 +1618,14 @@ void TransliteratorTest::TestRemove(void) { } expect(*t, "Able bodied baker's cats", "Ale odied ker's ts"); + + // extra test for RemoveTransliterator::clone(), which at one point wasn't + // duplicating the filter + Transliterator* t2 = t->clone(); + expect(*t2, "Able bodied baker's cats", "Ale odied ker's ts"); + delete t; + delete t2; } void TransliteratorTest::TestToRules(void) { @@ -3478,7 +3497,8 @@ void TransliteratorTest::TestIncrementalProgress(void) { Transliterator::getAvailableVariant(k, source, target, variant); UnicodeString id = source + "-" + target + "/" + variant; - if(id.indexOf("Thai")>-1 && isICUVersionAtLeast(ICU_31)){ + if(id.indexOf("Thai")>-1 && !isICUVersionAtLeast(ICU_37)){ + /* The Thai-Latin transliterator doesn't exist in ICU4C yet */ continue; } Transliterator *t = Transliterator::createInstance(id, UTRANS_FORWARD, err, status); @@ -3972,6 +3992,408 @@ void TransliteratorTest::TestAlternateSyntax() { "<=\\N{LEFTWARDS ARROW}; >=\\N{RIGHTWARDS ARROW}; <>=\\N{LEFT RIGHT ARROW}; &=\\N{INCREMENT}"); } +static const char* BEGIN_END_RULES[] = { + // [0] + "abc > xy;" + "aba > z;", + + // [1] +/* + "::BEGIN;" + "abc > xy;" + "::END;" + "::BEGIN;" + "aba > z;" + "::END;", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [2] +/* + "abc > xy;" + "::BEGIN;" + "aba > z;" + "::END;", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [3] +/* + "::BEGIN;" + "abc > xy;" + "::END;" + "aba > z;", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [4] + "abc > xy;" + "::Null;" + "aba > z;", + + // [5] + "::Upper;" + "ABC > xy;" + "AB > x;" + "C > z;" + "::Upper;" + "XYZ > p;" + "XY > q;" + "Z > r;" + "::Upper;", + + // [6] + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "$ws $delim* > ' ';" + "'-' $delim* > '-';", + + // [7] + "::Null;" + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "$ws $delim* > ' ';" + "'-' $delim* > '-';", + + // [8] + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "$ws $delim* > ' ';" + "'-' $delim* > '-';" + "::Null;", + + // [9] + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "::Null;" + "$ws $delim* > ' ';" + "'-' $delim* > '-';", + + // [10] +/* + "::BEGIN;" + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "::END;" + "$ws $delim* > ' ';" + "'-' $delim* > '-';", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [11] +/* + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "::BEGIN;" + "$ws $delim* > ' ';" + "'-' $delim* > '-';" + "::END;", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [12] +/* + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "$ab = [ab];" + "::BEGIN;" + "$ws $delim* > ' ';" + "'-' $delim* > '-';" + "::END;" + "::BEGIN;" + "$ab { ' ' } $ab > '-';" + "c { ' ' > ;" + "::END;" + "::BEGIN;" + "'a-a' > a\\%|a;" + "::END;", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [13] + "$ws = [[:Separator:][\\u0009-\\u000C]$];" + "$delim = [\\-$ws];" + "$ab = [ab];" + "::Null;" + "$ws $delim* > ' ';" + "'-' $delim* > '-';" + "::Null;" + "$ab { ' ' } $ab > '-';" + "c { ' ' > ;" + "::Null;" + "'a-a' > a\\%|a;", + + // [14] +/* + "::[abc];" + "::BEGIN;" + "abc > xy;" + "::END;" + "::BEGIN;" + "aba > yz;" + "::END;" + "::Upper;", +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [15] + "::[abc];" + "abc > xy;" + "::Null;" + "aba > yz;" + "::Upper;", + + // [16] +/* + "::[abc];" + "::BEGIN;" + "abc <> xy;" + "::END;" + "::BEGIN;" + "aba <> yz;" + "::END;" + "::Upper(Lower);" + "::([XYZ]);" +*/ + "", // test case commented out below, this is here to keep from messing up the indexes + + // [17] + "::[abc];" + "abc <> xy;" + "::Null;" + "aba <> yz;" + "::Upper(Lower);" + "::([XYZ]);" +}; +static const int32_t BEGIN_END_RULES_length = (int32_t)(sizeof(BEGIN_END_RULES) / sizeof(BEGIN_END_RULES[0])); + +/* +(This entire test is commented out below and will need some heavy revision when we re-add +the ::BEGIN/::END stuff) +static const char* BOGUS_BEGIN_END_RULES[] = { + // [7] + "::BEGIN;" + "abc > xy;" + "::BEGIN;" + "aba > z;" + "::END;" + "::END;", + + // [8] + "abc > xy;" + " aba > z;" + "::END;", + + // [9] + "::BEGIN;" + "::Upper;" + "::END;" +}; +static const int32_t BOGUS_BEGIN_END_RULES_length = (int32_t)(sizeof(BOGUS_BEGIN_END_RULES) / sizeof(BOGUS_BEGIN_END_RULES[0])); +*/ + +static const char* BEGIN_END_TEST_CASES[] = { + // rules input expected output + BEGIN_END_RULES[0], "abc ababc aba", "xy zbc z", +// BEGIN_END_RULES[1], "abc ababc aba", "xy abxy z", +// BEGIN_END_RULES[2], "abc ababc aba", "xy abxy z", +// BEGIN_END_RULES[3], "abc ababc aba", "xy abxy z", + BEGIN_END_RULES[4], "abc ababc aba", "xy abxy z", + BEGIN_END_RULES[5], "abccabaacababcbc", "PXAARXQBR", + + BEGIN_END_RULES[6], "e e - e---e- e", "e e e-e-e", + BEGIN_END_RULES[7], "e e - e---e- e", "e e e-e-e", + BEGIN_END_RULES[8], "e e - e---e- e", "e e e-e-e", + BEGIN_END_RULES[9], "e e - e---e- e", "e e e-e-e", +// BEGIN_END_RULES[10], "e e - e---e- e", "e e e-e-e", +// BEGIN_END_RULES[11], "e e - e---e- e", "e e e-e-e", +// BEGIN_END_RULES[12], "e e - e---e- e", "e e e-e-e", +// BEGIN_END_RULES[12], "a a a a", "a%a%a%a", +// BEGIN_END_RULES[12], "a a-b c b a", "a%a-b cb-a", + BEGIN_END_RULES[13], "e e - e---e- e", "e e e-e-e", + BEGIN_END_RULES[13], "a a a a", "a%a%a%a", + BEGIN_END_RULES[13], "a a-b c b a", "a%a-b cb-a", + +// BEGIN_END_RULES[14], "abc xy ababc xyz aba", "XY xy ABXY xyz YZ", + BEGIN_END_RULES[15], "abc xy ababc xyz aba", "XY xy ABXY xyz YZ", +// BEGIN_END_RULES[16], "abc xy ababc xyz aba", "XY xy ABXY xyz YZ", + BEGIN_END_RULES[17], "abc xy ababc xyz aba", "XY xy ABXY xyz YZ" +}; +static const int32_t BEGIN_END_TEST_CASES_length = (int32_t)(sizeof(BEGIN_END_TEST_CASES) / sizeof(BEGIN_END_TEST_CASES[0])); + +void TransliteratorTest::TestBeginEnd() { + // run through the list of test cases above + int32_t i = 0; + for (i = 0; i < BEGIN_END_TEST_CASES_length; i += 3) { + expect((UnicodeString)"Test case #" + (i / 3), + UnicodeString(BEGIN_END_TEST_CASES[i]), + UnicodeString(BEGIN_END_TEST_CASES[i + 1]), + UnicodeString(BEGIN_END_TEST_CASES[i + 2])); + } + + // instantiate the one reversible rule set in the reverse direction and make sure it does the right thing + UParseError parseError; + UErrorCode status = U_ZERO_ERROR; + Transliterator* reversed = Transliterator::createFromRules("Reversed", UnicodeString(BEGIN_END_RULES[17]), + UTRANS_REVERSE, parseError, status); + if (reversed == 0 || U_FAILURE(status)) { + reportParseError(UnicodeString("FAIL: Couldn't create reversed transliterator"), parseError, status); + } else { + expect(*reversed, UnicodeString("xy XY XYZ yz YZ"), UnicodeString("xy abc xaba yz aba")); + } + delete reversed; + + // finally, run through the list of syntactically-ill-formed rule sets above and make sure + // that all of them cause errors +/* +(commented out until we have the real ::BEGIN/::END stuff in place + for (i = 0; i < BOGUS_BEGIN_END_RULES_length; i++) { + UParseError parseError; + UErrorCode status = U_ZERO_ERROR; + Transliterator* t = Transliterator::createFromRules("foo", UnicodeString(BOGUS_BEGIN_END_RULES[i]), + UTRANS_FORWARD, parseError, status); + if (!U_FAILURE(status)) { + delete t; + errln((UnicodeString)"Should have gotten syntax error from " + BOGUS_BEGIN_END_RULES[i]); + } + } +*/ +} + +void TransliteratorTest::TestBeginEndToRules() { + // run through the same list of test cases we used above, but this time, instead of just + // instantiating a Transliterator from the rules and running the test against it, we instantiate + // a Transliterator from the rules, do toRules() on it, instantiate a Transliterator from + // the resulting set of rules, and make sure that the generated rule set is semantically equivalent + // to (i.e., does the same thing as) the original rule set + for (int32_t i = 0; i < BEGIN_END_TEST_CASES_length; i += 3) { + UParseError parseError; + UErrorCode status = U_ZERO_ERROR; + Transliterator* t = Transliterator::createFromRules("--", UnicodeString(BEGIN_END_TEST_CASES[i]), + UTRANS_FORWARD, parseError, status); + if (U_FAILURE(status)) { + reportParseError(UnicodeString("FAIL: Couldn't create transliterator"), parseError, status); + } else { + UnicodeString rules; + t->toRules(rules, TRUE); + Transliterator* t2 = Transliterator::createFromRules((UnicodeString)"Test case #" + (i / 3), rules, + UTRANS_FORWARD, parseError, status); + if (U_FAILURE(status)) { + reportParseError(UnicodeString("FAIL: Couldn't create transliterator from generated rules"), + parseError, status); + delete t; + } else { + expect(*t2, + UnicodeString(BEGIN_END_TEST_CASES[i + 1]), + UnicodeString(BEGIN_END_TEST_CASES[i + 2])); + delete t; + delete t2; + } + } + } + + // do the same thing for the reversible test case + UParseError parseError; + UErrorCode status = U_ZERO_ERROR; + Transliterator* reversed = Transliterator::createFromRules("Reversed", UnicodeString(BEGIN_END_RULES[17]), + UTRANS_REVERSE, parseError, status); + if (U_FAILURE(status)) { + reportParseError(UnicodeString("FAIL: Couldn't create reversed transliterator"), parseError, status); + } else { + UnicodeString rules; + reversed->toRules(rules, FALSE); + Transliterator* reversed2 = Transliterator::createFromRules("Reversed", rules, UTRANS_FORWARD, + parseError, status); + if (U_FAILURE(status)) { + reportParseError(UnicodeString("FAIL: Couldn't create reversed transliterator from generated rules"), + parseError, status); + delete reversed; + } else { + expect(*reversed2, + UnicodeString("xy XY XYZ yz YZ"), + UnicodeString("xy abc xaba yz aba")); + delete reversed; + delete reversed2; + } + } +} + +void TransliteratorTest::TestRegisterAlias() { + UnicodeString longID("Lower;[aeiou]Upper"); + UnicodeString shortID("Any-CapVowels"); + UnicodeString reallyShortID("CapVowels"); + + Transliterator::registerAlias(shortID, longID); + + UErrorCode err = U_ZERO_ERROR; + Transliterator* t1 = Transliterator::createInstance(longID, UTRANS_FORWARD, err); + if (U_FAILURE(err)) { + errln("Failed to instantiate transliterator with long ID"); + Transliterator::unregister(shortID); + return; + } + Transliterator* t2 = Transliterator::createInstance(reallyShortID, UTRANS_FORWARD, err); + if (U_FAILURE(err)) { + errln("Failed to instantiate transliterator with short ID"); + delete t1; + Transliterator::unregister(shortID); + return; + } + + if (t1->getID() != longID) + errln("Transliterator instantiated with long ID doesn't have long ID"); + if (t2->getID() != reallyShortID) + errln("Transliterator instantiated with short ID doesn't have short ID"); + + UnicodeString rules1; + UnicodeString rules2; + + t1->toRules(rules1, TRUE); + t2->toRules(rules2, TRUE); + if (rules1 != rules2) + errln("Alias transliterators aren't the same"); + + delete t1; + delete t2; + Transliterator::unregister(shortID); + + t1 = Transliterator::createInstance(shortID, UTRANS_FORWARD, err); + if (U_SUCCESS(err)) { + errln("Instantiation with short ID succeeded after short ID was unregistered"); + delete t1; + } + + // try the same thing again, but this time with something other than + // an instance of CompoundTransliterator + UnicodeString realID("Latin-Greek"); + UnicodeString fakeID("Latin-dlgkjdflkjdl"); + Transliterator::registerAlias(fakeID, realID); + + err = U_ZERO_ERROR; + t1 = Transliterator::createInstance(realID, UTRANS_FORWARD, err); + if (U_FAILURE(err)) { + errln("Failed to instantiate transliterator with real ID"); + Transliterator::unregister(realID); + return; + } + t2 = Transliterator::createInstance(fakeID, UTRANS_FORWARD, err); + if (U_FAILURE(err)) { + errln("Failed to instantiate transliterator with fake ID"); + delete t1; + Transliterator::unregister(realID); + return; + } + + t1->toRules(rules1, TRUE); + t2->toRules(rules2, TRUE); + if (rules1 != rules2) + errln("Alias transliterators aren't the same"); + + delete t1; + delete t2; + Transliterator::unregister(fakeID); +} + //====================================================================== // Support methods //====================================================================== @@ -3990,14 +4412,35 @@ void TransliteratorTest::expectT(const UnicodeString& id, delete t; } +void TransliteratorTest::reportParseError(const UnicodeString& message, + const UParseError& parseError, + const UErrorCode& status) { + errln(message + + /*", parse error " + parseError.code +*/ + ", line " + parseError.line + + ", offset " + parseError.offset + + ", pre-context " + prettify(parseError.preContext, TRUE) + + ", post-context " + prettify(parseError.postContext,TRUE) + + ", Error: " + u_errorName(status)); +} + void TransliteratorTest::expect(const UnicodeString& rules, const UnicodeString& source, const UnicodeString& expectedResult, UTransPosition *pos) { + expect("<ID>", rules, source, expectedResult, pos); +} + +void TransliteratorTest::expect(const UnicodeString& id, + const UnicodeString& rules, + const UnicodeString& source, + const UnicodeString& expectedResult, + UTransPosition *pos) { UErrorCode status = U_ZERO_ERROR; - Transliterator *t = new RuleBasedTransliterator("<ID>", rules, status); + UParseError parseError; + Transliterator* t = Transliterator::createFromRules(id, rules, UTRANS_FORWARD, parseError, status); if (U_FAILURE(status)) { - errln("FAIL: Transliterator constructor failed"); + reportParseError(UnicodeString("Couldn't create transliterator from ") + rules, parseError, status); } else { expect(*t, source, expectedResult, pos); } @@ -4021,7 +4464,6 @@ void TransliteratorTest::expect(const Transliterator& t, t.transliterate(result); expectAux(t.getID() + ":String", source, result, expectedResult); } - UTransPosition index={0, 0, 0, 0}; if (pos != 0) { index = *pos; diff --git a/icuSources/test/intltest/transtst.h b/icuSources/test/intltest/transtst.h index a331a843..8ffac67b 100644 --- a/icuSources/test/intltest/transtst.h +++ b/icuSources/test/intltest/transtst.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -344,6 +344,21 @@ private: void TestAlternateSyntax(void); + /** + * Tests the multiple-pass syntax + */ + void TestBeginEnd(void); + + /** + * Tests that toRules() works right with the multiple-pass syntax + */ + void TestBeginEndToRules(void); + + /** + * Tests the registerAlias() function + */ + void TestRegisterAlias(void); + //====================================================================== // Support methods //====================================================================== @@ -357,6 +372,12 @@ private: const UnicodeString& expectedResult, UTransPosition *pos=0); + void expect(const UnicodeString& id, + const UnicodeString& rules, + const UnicodeString& source, + const UnicodeString& expectedResult, + UTransPosition *pos=0); + void expect(const Transliterator& t, const UnicodeString& source, const UnicodeString& expectedResult, @@ -385,6 +406,8 @@ private: void CheckIncrementalAux(const Transliterator* t, const UnicodeString& input); + void reportParseError(const UnicodeString& message, const UParseError& parseError, const UErrorCode& status); + const UnicodeString DESERET_DEE; const UnicodeString DESERET_dee; diff --git a/icuSources/test/intltest/trcoll.cpp b/icuSources/test/intltest/trcoll.cpp index 09f030b4..7da003a8 100644 --- a/icuSources/test/intltest/trcoll.cpp +++ b/icuSources/test/intltest/trcoll.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -93,7 +93,7 @@ void CollationTurkishTest::runIndexedTest( int32_t index, UBool exec, const char if((!myCollation) && exec) { errln(__FILE__ " cannot test - failed to create collator."); - name = ""; + name = "some test"; return; } switch (index) { diff --git a/icuSources/test/intltest/trnserr.cpp b/icuSources/test/intltest/trnserr.cpp index 46155390..0b766166 100644 --- a/icuSources/test/intltest/trnserr.cpp +++ b/icuSources/test/intltest/trnserr.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2001-2004, International Business Machines Corporation and + * Copyright (c) 2001-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /************************************************************************ @@ -43,6 +43,7 @@ TransliteratorErrorTest::runIndexedTest(int32_t index, UBool exec, TESTCASE(0,TestTransliteratorErrors); TESTCASE(1, TestUnicodeSetErrors); TESTCASE(2, TestRBTErrors); + TESTCASE(3, TestCoverage); //TESTCASE(3, TestUniToHexErrors); //TESTCASE(4, TestHexToUniErrors); // TODO: Add a subclass to test clone(). @@ -264,4 +265,25 @@ void TransliteratorErrorTest::TestRBTErrors() { // delete t; //} +class StubTransliterator: public Transliterator{ +public: + StubTransliterator(): Transliterator(UNICODE_STRING_SIMPLE("Any-Null"), 0) {} + virtual void handleTransliterate(Replaceable& ,UTransPosition& offsets,UBool) const { + offsets.start = offsets.limit; + } + + virtual UClassID getDynamicClassID() const{ + static char classID = 0; + return (UClassID)&classID; + } +}; + +void TransliteratorErrorTest::TestCoverage() { + StubTransliterator stub; + + if (stub.clone() != NULL){ + errln("FAIL: default Transliterator::clone() should return NULL"); + } +} + #endif /* #if !UCONFIG_NO_TRANSLITERATION */ diff --git a/icuSources/test/intltest/trnserr.h b/icuSources/test/intltest/trnserr.h index ab34a6d6..35b4c5a4 100644 --- a/icuSources/test/intltest/trnserr.h +++ b/icuSources/test/intltest/trnserr.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2001-2004, International Business Machines Corporation and + * Copyright (c) 2001-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /************************************************************************ @@ -43,6 +43,10 @@ public: //void TestHexToUniErrors(void); + // JitterBug 4452, for coverage. The reason to put this method here is + // this class is comparable smaller than other Transliterator*Test classes + void TestCoverage(void); + }; #endif /* #if !UCONFIG_NO_TRANSLITERATION */ diff --git a/icuSources/test/intltest/tscoll.cpp b/icuSources/test/intltest/tscoll.cpp index c01aaa11..eb7bb04f 100644 --- a/icuSources/test/intltest/tscoll.cpp +++ b/icuSources/test/intltest/tscoll.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -27,7 +27,6 @@ #include "encoll.h" #include "frcoll.h" #include "decoll.h" -#include "dacoll.h" #include "escoll.h" #include "ficoll.h" #include "jacoll.h" @@ -39,7 +38,6 @@ #include "regcoll.h" #include "currcoll.h" #include "itercoll.h" -//#include "capicoll.h" // CollationCAPITest #include "tstnorm.h" #include "normconf.h" #include "thcoll.h" @@ -49,6 +47,7 @@ #include "ucaconf.h" #include "svccoll.h" #include "cmemory.h" +#include "rndmcoll.h" #define TESTCLASS(n,classname) \ case n: \ @@ -88,11 +87,9 @@ void IntlTestCollator::runIndexedTest( int32_t index, UBool exec, const char* &n TESTCLASS(17, DataDrivenCollatorTest); TESTCLASS(18, UCAConformanceTest); TESTCLASS(19, CollationServiceTest); - - //TESTCLASS(n, CollationDanishTest); // removed by weiv - we have changed Danish collation TESTCLASS(20, CollationFinnishTest); // removed by weiv - we have changed Finnish collation - //TESTCLASS(n, CollationCAPITest); - + TESTCLASS(21, RandomCollatorTest); + default: name = ""; break; } } diff --git a/icuSources/test/intltest/tsdate.cpp b/icuSources/test/intltest/tsdate.cpp index fed509f5..00f740ec 100644 --- a/icuSources/test/intltest/tsdate.cpp +++ b/icuSources/test/intltest/tsdate.cpp @@ -1,6 +1,5 @@ /*********************************************************************** - * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -15,6 +14,7 @@ #include <float.h> #include <stdlib.h> +#include <math.h> const double IntlTestDateFormat::ONEYEAR = 365.25 * ONEDAY; // Approximate @@ -214,7 +214,7 @@ void IntlTestDateFormat::tryDate(UDate theDate) } } } - + // Return a random double from 0.01 to 1, inclusive double IntlTestDateFormat::randDouble() { @@ -235,7 +235,7 @@ double IntlTestDateFormat::randDouble() d = -d; if (d > 0.0) { - double e = uprv_floor(uprv_log10(d)); + double e = uprv_floor(log10(d)); if (e < -2.0) d *= uprv_pow10((int32_t)(-e-2)); else if (e > -1.0) diff --git a/icuSources/test/intltest/tsdtfmsy.cpp b/icuSources/test/intltest/tsdtfmsy.cpp index fb974e36..e281505b 100644 --- a/icuSources/test/intltest/tsdtfmsy.cpp +++ b/icuSources/test/intltest/tsdtfmsy.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -17,20 +17,11 @@ void IntlTestDateFormatSymbols::runIndexedTest( int32_t index, UBool exec, const { if (exec) logln("TestSuite DateFormatSymbols"); switch (index) { - case 0: name = "DateFormatSymbols test"; - if (exec) { - logln("DateFormatSymbols test---"); logln(""); - testSymbols(/*par*/); - } - break; - - case 1: name = "TestGetMonths"; - if (exec) { - logln("TestGetMonths test---"); logln(""); - TestGetMonths(); - } - break; - + TESTCASE(0,TestSymbols); + TESTCASE(1,TestGetMonths); + TESTCASE(2,TestGetMonths2); + TESTCASE(3,TestGetWeekdays2); + TESTCASE(4,TestGetEraNames); default: name = ""; break; } } @@ -59,10 +50,82 @@ void IntlTestDateFormatSymbols::TestGetMonths() delete symbol; } +void IntlTestDateFormatSymbols::TestGetMonths2() +{ + UErrorCode status = U_ZERO_ERROR; + DateFormatSymbols *symbol; + + symbol=new DateFormatSymbols(Locale::getDefault(), status); + + DateFormatSymbols::DtContextType context[] = {DateFormatSymbols::STANDALONE, DateFormatSymbols::FORMAT}; + DateFormatSymbols::DtWidthType width[] = {DateFormatSymbols::WIDE, DateFormatSymbols::ABBREVIATED, DateFormatSymbols::NARROW}; + + for (int32_t i = 0; i < 2; i++) { + for (int32_t j = 0; j < 3; j++) { + int32_t cnt; + const UnicodeString * month = symbol->getMonths(cnt,context[i],width[j]); + + logln((UnicodeString)"size = " + cnt); + + for (int32_t k = 0; k < cnt; k++) { + logln(month[k]); + } + } + } + delete symbol; +} + +void IntlTestDateFormatSymbols::TestGetWeekdays2() +{ + UErrorCode status = U_ZERO_ERROR; + DateFormatSymbols *symbol; + + symbol=new DateFormatSymbols(Locale::getDefault(), status); + + DateFormatSymbols::DtContextType context[] = {DateFormatSymbols::STANDALONE, DateFormatSymbols::FORMAT}; + DateFormatSymbols::DtWidthType width[] = {DateFormatSymbols::WIDE, DateFormatSymbols::ABBREVIATED, DateFormatSymbols::NARROW}; + + for (int32_t i = 0; i < 2; i++) { + for (int32_t j = 0; j < 3; j++) { + int32_t cnt; + const UnicodeString * wd = symbol->getWeekdays(cnt,context[i],width[j]); + + logln((UnicodeString)"size = " + cnt); + + for (int32_t k = 0; k < cnt; k++) { + logln(wd[k]); + } + } + } + delete symbol; +} + + +void IntlTestDateFormatSymbols::TestGetEraNames() +{ + UErrorCode status = U_ZERO_ERROR; + int32_t cnt; + const UnicodeString* name; + DateFormatSymbols *symbol; + + symbol=new DateFormatSymbols(Locale::getDefault(), status); + + name=symbol->getEraNames(cnt); + + logln((UnicodeString)"size = " + cnt); + + for (int32_t i=0; i<cnt; ++i) + { + logln(name[i]); + } + + delete symbol; +} + /** * Test the API of DateFormatSymbols; primarily a simple get/set set. */ -void IntlTestDateFormatSymbols::testSymbols(/* char *par */) +void IntlTestDateFormatSymbols::TestSymbols(/* char *par */) { UErrorCode status = U_ZERO_ERROR; @@ -71,6 +134,12 @@ void IntlTestDateFormatSymbols::testSymbols(/* char *par */) errln("ERROR: Couldn't create French DateFormatSymbols " + (UnicodeString)u_errorName(status)); } + status = U_ZERO_ERROR; + DateFormatSymbols fr2(Locale::getFrench(), status); + if(U_FAILURE(status)) { + errln("ERROR: Couldn't create French DateFormatSymbols " + (UnicodeString)u_errorName(status)); + } + status = U_ZERO_ERROR; DateFormatSymbols en(Locale::getEnglish(), status); if(U_FAILURE(status)) { @@ -107,6 +176,48 @@ void IntlTestDateFormatSymbols::testSymbols(/* char *par */) errln("ERROR: setShortMonths() failed"); } + const UnicodeString *wideMonths = en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE); + fr2.setMonths(wideMonths, count, DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE); + if( *en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE) != + *fr2.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE )) { + errln("ERROR: setMonths(FORMAT,WIDE) failed"); + } + + const UnicodeString *abbrMonths = en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED); + fr2.setMonths(abbrMonths, count, DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED); + if( *en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED) != + *fr2.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED )) { + errln("ERROR: setMonths(FORMAT,ABBREVIATED) failed"); + } + + const UnicodeString *narrowMonths = en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW); + fr.setMonths(narrowMonths, count, DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW); + if( *en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW) != + *fr.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW )) { + errln("ERROR: setMonths(FORMAT,NARROW) failed"); + } + + const UnicodeString *standaloneWideMonths = en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE); + fr.setMonths(standaloneWideMonths, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE); + if( *en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE) != + *fr.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE )) { + errln("ERROR: setMonths(STANDALONE,WIDE) failed"); + } + + const UnicodeString *standaloneShortMonths = en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED); + fr.setMonths(standaloneShortMonths, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED); + if( *en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED) != + *fr.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED )) { + errln("ERROR: setMonths(STANDALONE,ABBREVIATED) failed"); + } + + const UnicodeString *standaloneNarrowMonths = en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW); + fr.setMonths(standaloneNarrowMonths, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW); + if( *en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW) != + *fr.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW )) { + errln("ERROR: setMonths(STANDALONE,NARROW) failed"); + } + const UnicodeString *weekdays = en.getWeekdays(count); fr.setWeekdays(weekdays, count); if( *en.getWeekdays(count) != *fr.getWeekdays(count)) { @@ -119,6 +230,76 @@ void IntlTestDateFormatSymbols::testSymbols(/* char *par */) errln("ERROR: setShortWeekdays() failed"); } + const UnicodeString *wideWeekdays = en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE); + fr2.setWeekdays(wideWeekdays, count, DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE); + if( *en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE) != + *fr2.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE )) { + errln("ERROR: setWeekdays(FORMAT,WIDE) failed"); + } + + const UnicodeString *abbrWeekdays = en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED); + fr2.setWeekdays(abbrWeekdays, count, DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED); + if( *en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED) != + *fr2.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED )) { + errln("ERROR: setWeekdays(FORMAT,ABBREVIATED) failed"); + } + + const UnicodeString *narrowWeekdays = en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW); + fr.setWeekdays(narrowWeekdays, count, DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW); + if( *en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW) != + *fr.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW )) { + errln("ERROR: setWeekdays(FORMAT,NARROW) failed"); + } + + const UnicodeString *standaloneWideWeekdays = en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE); + fr.setWeekdays(standaloneWideWeekdays, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE); + if( *en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE) != + *fr.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE )) { + errln("ERROR: setWeekdays(STANDALONE,WIDE) failed"); + } + + const UnicodeString *standaloneShortWeekdays = en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED); + fr.setWeekdays(standaloneShortWeekdays, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED); + if( *en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED) != + *fr.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED )) { + errln("ERROR: setWeekdays(STANDALONE,ABBREVIATED) failed"); + } + + const UnicodeString *standaloneNarrowWeekdays = en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW); + fr.setWeekdays(standaloneNarrowWeekdays, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW); + if( *en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW) != + *fr.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW )) { + errln("ERROR: setWeekdays(STANDALONE,NARROW) failed"); + } + + const UnicodeString *wideQuarters = en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE); + fr2.setQuarters(wideQuarters, count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE); + if( *en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE) != + *fr2.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE )) { + errln("ERROR: setQuarters(FORMAT, WIDE) failed"); + } + + const UnicodeString *abbrQuarters = en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); + fr2.setQuarters(abbrQuarters, count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); + if( *en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED) != + *fr2.getQuarters(count,DateFormatSymbols::FORMAT ,DateFormatSymbols::ABBREVIATED )) { + errln("ERROR: setQuarters(FORMAT, ABBREVIATED) failed"); + } + + const UnicodeString *standaloneWideQuarters = en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + fr.setQuarters(standaloneWideQuarters, count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); + if( *en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE) != + *fr.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE )) { + errln("ERROR: setQuarters(STANDALONE, WIDE) failed"); + } + + const UnicodeString *standaloneShortQuarters = en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + fr.setQuarters(standaloneShortQuarters, count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); + if( *en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED) != + *fr.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED )) { + errln("ERROR: setQuarters(STANDALONE, ABBREVIATED) failed"); + } + const UnicodeString *ampms = en.getAmPmStrings(count); fr.setAmPmStrings(ampms, count); if( *en.getAmPmStrings(count) != *fr.getAmPmStrings(count)) { @@ -152,8 +333,11 @@ void IntlTestDateFormatSymbols::testSymbols(/* char *par */) en = fr; - if(en != fr || foo != bar) { - errln("ERROR: Copy Constructor or Assignment failed"); + if(en != fr) { + errln("ERROR: Assignment operator failed"); + } + if(foo != bar) { + errln("ERROR: Copy Constructor failed"); } } diff --git a/icuSources/test/intltest/tsdtfmsy.h b/icuSources/test/intltest/tsdtfmsy.h index fc0f8fea..d289ba4f 100644 --- a/icuSources/test/intltest/tsdtfmsy.h +++ b/icuSources/test/intltest/tsdtfmsy.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -23,11 +23,15 @@ private: /** * Test the API of DateFormatSymbols; primarily a simple get/set set. */ - void testSymbols(/* char *par */); + void TestSymbols(/* char *par */); /** * Test getMonths. */ void TestGetMonths(void); + void TestGetMonths2(void); + + void TestGetWeekdays2(void); + void TestGetEraNames(void); }; #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/intltest/tsmthred.cpp b/icuSources/test/intltest/tsmthred.cpp index 90e8c9fd..05b29597 100644 --- a/icuSources/test/intltest/tsmthred.cpp +++ b/icuSources/test/intltest/tsmthred.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1999-2004, International Business Machines Corporation and + * Copyright (c) 1999-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -21,7 +21,7 @@ #include "unicode/uloc.h" #include "unicode/locid.h" #include "putilimp.h" -#if !defined(WIN32) && !defined(XP_MAC) && !defined(U_RHAPSODY) +#if !defined(U_WINDOWS) && !defined(XP_MAC) && !defined(U_RHAPSODY) #define POSIX 1 #endif @@ -73,6 +73,8 @@ #include "tsmthred.h" +#define TSMTHREAD_FAIL(msg) errln("%s at file %s, line %d", msg, __FILE__, __LINE__) +#define TSMTHREAD_ASSERT(expr) {if (!(expr)) {TSMTHREAD_FAIL("Fail");}} MultithreadTest::MultithreadTest() { @@ -86,7 +88,7 @@ MultithreadTest::~MultithreadTest() #if (ICU_USE_THREADS==0) void MultithreadTest::runIndexedTest( int32_t index, UBool exec, - const char* &name, char* par ) { + const char* &name, char* /*par*/ ) { if (exec) logln("TestSuite MultithreadTest: "); if(index == 0) @@ -151,7 +153,7 @@ void SimpleThread::errorFunc() { -#ifdef WIN32 +#ifdef U_WINDOWS #define HAVE_IMP # define VC_EXTRALEAN @@ -549,6 +551,7 @@ void MultithreadTest::TestThreads() { char threadTestChars[THREADTEST_NRTHREADS + 1]; SimpleThread *threads[THREADTEST_NRTHREADS]; + int32_t numThreadsStarted = 0; int32_t i; for(i=0;i<THREADTEST_NRTHREADS;i++) @@ -564,11 +567,18 @@ void MultithreadTest::TestThreads() if (threads[i]->start() != 0) { errln("Error starting thread %d", i); } - SimpleThread::sleep(200); + else { + numThreadsStarted++; + } + SimpleThread::sleep(100); logln(" Subthread started."); } logln("Waiting for threads to be set.."); + if (numThreadsStarted == 0) { + errln("No threads could be started for testing!"); + return; + } int32_t patience = 40; // seconds to wait @@ -607,96 +617,129 @@ void MultithreadTest::TestThreads() } -class TestMutexThread1 : public SimpleThread -{ -public: - TestMutexThread1() : fDone(FALSE) {} - virtual void run() - { - Mutex m; // grab the lock first thing - SimpleThread::sleep(900); // then wait - fDone = TRUE; // finally, set our flag - } -public: - UBool fDone; -}; +//----------------------------------------------------------------------- +// +// TestMutex - a simple (non-stress) test to verify that ICU mutexes +// are actually mutexing. Does not test the use of +// mutexes within ICU services, but rather that the +// platform's mutex support is at least superficially there. +// +//---------------------------------------------------------------------- +static UMTX gTestMutexA = NULL; +static UMTX gTestMutexB = NULL; + +static int gThreadsStarted = 0; +static int gThreadsInMiddle = 0; +static int gThreadsDone = 0; + +static const int TESTMUTEX_THREAD_COUNT = 4; + +static int safeIncr(int &var, int amt) { + // Thread safe (using global mutex) increment of a variable. + // Return the updated value. + // Can also be used as a safe load of a variable by incrementing it by 0. + Mutex m; + var += amt; + return var; +} -class TestMutexThread2 : public SimpleThread +class TestMutexThread : public SimpleThread { public: - TestMutexThread2(TestMutexThread1& r) : fOtherThread(r), fDone(FALSE), fErr(FALSE) {} virtual void run() { - SimpleThread::sleep(500); // wait, make sure they aquire the lock - fElapsed = uprv_getUTCtime(); - { - Mutex m; // wait here - - fElapsed = uprv_getUTCtime() - fElapsed; - - if(fOtherThread.fDone == FALSE) - fErr = TRUE; // they didnt get to it yet - - fDone = TRUE; // we're done. - } + // This is the code that each of the spawned threads runs. + // All of the spawned threads bunch up together at each of the two mutexes + // because the main holds the mutexes until they do. + // + safeIncr(gThreadsStarted, 1); + umtx_lock(&gTestMutexA); + umtx_unlock(&gTestMutexA); + safeIncr(gThreadsInMiddle, 1); + umtx_lock(&gTestMutexB); + umtx_unlock(&gTestMutexB); + safeIncr(gThreadsDone, 1); } -public: - TestMutexThread1 & fOtherThread; - UBool fDone, fErr; - UDate fElapsed; -private: - /** - * The assignment operator has no real implementation. - * It is provided to make the compiler happy. Do not call. - */ - TestMutexThread2& operator=(const TestMutexThread2&) { return *this; } }; void MultithreadTest::TestMutex() { - /* this test uses printf so that we don't hang by calling UnicodeString inside of a mutex. */ - //logln("Bye."); - // printf("Warning: MultiThreadTest::Testmutex() disabled.\n"); - // return; - - if(verbose) - printf("Before mutex.\n"); - { - Mutex m; - if(verbose) - printf(" Exited 2nd mutex\n"); + // Start up the test threads. They should all pile up waiting on + // gTestMutexA, which we (the main thread) hold until the test threads + // all get there. + gThreadsStarted = 0; + gThreadsInMiddle = 0; + gThreadsDone = 0; + umtx_lock(&gTestMutexA); + TestMutexThread *threads[TESTMUTEX_THREAD_COUNT]; + int i; + int32_t numThreadsStarted = 0; + for (i=0; i<TESTMUTEX_THREAD_COUNT; i++) { + threads[i] = new TestMutexThread; + if (threads[i]->start() != 0) { + errln("Error starting thread %d", i); + } + else { + numThreadsStarted++; + } } - if(verbose) - printf("exited 1st mutex. Now testing with threads:"); - - TestMutexThread1 thread1; - TestMutexThread2 thread2(thread1); - if (thread2.start() != 0 || - thread1.start() != 0 ) { - errln("Error starting threads."); + if (numThreadsStarted == 0) { + errln("No threads could be started for testing!"); + return; } - for(int32_t patience = 12; patience > 0;patience--) - { - // TODO: Possible memory coherence issue in looking at fDone values - // that are set in another thread without the mutex here. - if(thread1.fDone && verbose) - printf("Thread1 done\n"); - - if(thread1.fDone && thread2.fDone) - { - if(thread2.fErr) - errln("Thread 2 says: thread1 didn't run before I aquired the mutex."); - logln("took %lu seconds for thread2 to aquire the mutex.", (int)(thread2.fElapsed/U_MILLIS_PER_DAY)); + int patience = 0; + while (safeIncr(gThreadsStarted, 0) != TESTMUTEX_THREAD_COUNT) { + if (patience++ > 24) { + TSMTHREAD_FAIL("Patience Exceeded"); return; } - SimpleThread::sleep(1000); + SimpleThread::sleep(500); } - if(verbose) - printf("patience exceeded. [WARNING mutex may still be acquired.] "); -} + // None of the test threads should have advanced past the first mutex. + TSMTHREAD_ASSERT(gThreadsInMiddle==0); + TSMTHREAD_ASSERT(gThreadsDone==0); + + // All of the test threads have made it to the first mutex. + // We (the main thread) now let them advance to the second mutex, + // where they should all pile up again. + umtx_lock(&gTestMutexB); + umtx_unlock(&gTestMutexA); + + patience = 0; + while (safeIncr(gThreadsInMiddle, 0) != TESTMUTEX_THREAD_COUNT) { + if (patience++ > 24) { + TSMTHREAD_FAIL("Patience Exceeded"); + return; + } + SimpleThread::sleep(500); + } + TSMTHREAD_ASSERT(gThreadsDone==0); + + // All test threads made it to the second mutex. + // Now let them proceed from there. They will all terminate. + umtx_unlock(&gTestMutexB); + patience = 0; + while (safeIncr(gThreadsDone, 0) != TESTMUTEX_THREAD_COUNT) { + if (patience++ > 24) { + TSMTHREAD_FAIL("Patience Exceeded"); + return; + } + SimpleThread::sleep(500); + } + + // All threads made it by both mutexes. + // Destroy the test mutexes. + umtx_destroy(&gTestMutexA); + umtx_destroy(&gTestMutexB); + gTestMutexA=NULL; + gTestMutexB=NULL; + for (i=0; i<TESTMUTEX_THREAD_COUNT; i++) { + delete threads[i]; + } +} //------------------------------------------------------------------------------------------- @@ -784,11 +827,6 @@ struct FormatThreadTestData } ; -void errorToString(UErrorCode theStatus, UnicodeString &string) -{ - string=u_errorName(theStatus); -} - // "Someone from {2} is receiving a #{0} error - {1}. Their telephone call is costing {3 number,currency}." void formatErrorMessage(UErrorCode &realStatus, const UnicodeString& pattern, const Locale& theLocale, @@ -798,8 +836,7 @@ void formatErrorMessage(UErrorCode &realStatus, const UnicodeString& pattern, co if(U_FAILURE(realStatus)) return; // you messed up - UnicodeString errString1; - errorToString(inStatus0, errString1); + UnicodeString errString1(u_errorName(inStatus0)); UnicodeString countryName2; inCountry2.getDisplayCountry(theLocale,countryName2); @@ -824,7 +861,7 @@ void formatErrorMessage(UErrorCode &realStatus, const UnicodeString& pattern, co fmt->format(myArgs,4,result,ignore,realStatus); delete fmt; -}; +} UBool U_CALLCONV isAcceptable(void *, const char *, const char *, const UDataInfo *) { @@ -1030,8 +1067,7 @@ public: countryToCheck,currencyToCheck,result); if(U_FAILURE(status)) { - UnicodeString tmp; - errorToString(status,tmp); + UnicodeString tmp(u_errorName(status)); error("Failure on message format, pattern=" + patternToCheck + ", error = " + tmp); goto cleanupAndReturn; @@ -1063,6 +1099,7 @@ void MultithreadTest::TestThreadedIntl() int i; UnicodeString theErr; UBool haveDisplayedInfo[kFormatThreadThreads]; + static const int32_t PATIENCE_SECONDS = 45; // // Create and start the test threads @@ -1083,12 +1120,23 @@ void MultithreadTest::TestThreadedIntl() // Spin, waiting for the test threads to finish. - // (An earlier version used a wait in this loop, but that seems to trigger - // a bug in some versions of AIX.) UBool stillRunning; + UDate startTime, endTime; + startTime = Calendar::getNow(); do { /* Spin until the test threads complete. */ stillRunning = FALSE; + endTime = Calendar::getNow(); + if (((int32_t)(endTime - startTime)/U_MILLIS_PER_SECOND) > PATIENCE_SECONDS) { + errln("Patience exceeded. Test is taking too long."); + return; + } + /* + The following sleep must be here because the *BSD operating systems + have a brain dead thread scheduler. They starve the child threads from + CPU time. + */ + SimpleThread::sleep(1); // yield for(i=0;i<kFormatThreadThreads;i++) { if (tests[i].isRunning()) { stillRunning = TRUE; @@ -1108,8 +1156,6 @@ void MultithreadTest::TestThreadedIntl() // cleanupAndReturn: delete [] tests; - return; - } #endif /* #if !UCONFIG_NO_FORMATTING */ @@ -1125,7 +1171,7 @@ cleanupAndReturn: #if !UCONFIG_NO_COLLATION #define kCollatorThreadThreads 10 // # of threads to spawn -#define kCollatorThreadPatience kCollatorThreadThreads*100 +#define kCollatorThreadPatience kCollatorThreadThreads*30 struct Line { UChar buff[25]; @@ -1259,7 +1305,7 @@ void MultithreadTest::TestCollators() "INFO: Working with the stub file.\n" "If you need the full conformance test, please\n" "download the appropriate data files from:\n" - "http://oss.software.ibm.com/cvs/icu4j/unicodetools/com/ibm/text/data/"); + "http://dev.icu-project.org/cgi-bin/viewcvs.cgi/unicodetools/com/ibm/text/data/"); } } } @@ -1275,7 +1321,7 @@ void MultithreadTest::TestCollators() while (fgets(buffer, 1024, testFile) != NULL) { offset = 0; - if(*buffer == 0 || buffer[0] == '#') { + if(*buffer == 0 || strlen(buffer) < 3 || buffer[0] == '#') { continue; } offset = u_parseString(buffer, bufferU, 1024, &first, &status); @@ -1287,8 +1333,10 @@ void MultithreadTest::TestCollators() lineNum++; } fclose(testFile); - - + if(U_FAILURE(status)) { + errln("Couldn't read the test file!"); + return; + } UCollator *coll = ucol_open("root", &status); if(U_FAILURE(status)) { @@ -1322,9 +1370,12 @@ void MultithreadTest::TestCollators() noSpawned++; } logln("Spawned all"); + if (noSpawned == 0) { + errln("No threads could be spawned."); + return; + } - //for(int32_t patience = kCollatorThreadPatience;patience > 0; patience --) - for(;;) + for(int32_t patience = kCollatorThreadPatience;patience > 0; patience --) { logln("Waiting..."); diff --git a/icuSources/test/intltest/tsputil.cpp b/icuSources/test/intltest/tsputil.cpp index 0daf2ab9..1f4b66ee 100644 --- a/icuSources/test/intltest/tsputil.cpp +++ b/icuSources/test/intltest/tsputil.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -21,7 +21,8 @@ PUtilTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* / CASE(2, testPositiveInfinity) CASE(3, testNegativeInfinity) CASE(4, testZero) -// CASE(5, testIEEEremainder) + CASE(5, testU_INLINE) +// CASE(, testIEEEremainder) default: name = ""; break; //needed to end loop } @@ -202,11 +203,14 @@ PUtilTest::maxMinTest(double a, double b, double exp, UBool max) errln(UnicodeString("FAIL: max(") + a + ", " + b + ") is " + result + ", expected " + exp); else errln(UnicodeString("FAIL: min(") + a + ", " + b + ") is " + result + ", expected " + exp); - else - if(max) - logln(UnicodeString("OK: max(") + a + ", " + b + ") is " + result); - else - logln(UnicodeString("OK: min(") + a + ", " + b + ") is " + result); + else { + if (verbose) { + if(max) + logln(UnicodeString("OK: max(") + a + ", " + b + ") is " + result); + else + logln(UnicodeString("OK: min(") + a + ", " + b + ") is " + result); + } + } } //============================== @@ -548,3 +552,14 @@ PUtilTest::NaNNE(void) } } +U_INLINE int32_t inlineTriple(int32_t x) { + return 3*x; +} + +// "code" coverage test for Jitterbug 4515 RFE: in C++, use U_INLINE=inline +void +PUtilTest::testU_INLINE() { + if(inlineTriple(2)!=6 || inlineTriple(-55)!=-165) { + errln("inlineTriple() failed"); + } +} diff --git a/icuSources/test/intltest/tsputil.h b/icuSources/test/intltest/tsputil.h index 5c5649bd..77cd52b2 100644 --- a/icuSources/test/intltest/tsputil.h +++ b/icuSources/test/intltest/tsputil.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -30,6 +30,7 @@ private: void testPositiveInfinity(void); void testNegativeInfinity(void); void testZero(void); + void testU_INLINE(); // subtests of testNaN void testIsNaN(void); diff --git a/icuSources/test/intltest/tstnorm.cpp b/icuSources/test/intltest/tstnorm.cpp index af41dfc1..56dc2645 100644 --- a/icuSources/test/intltest/tstnorm.cpp +++ b/icuSources/test/intltest/tstnorm.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -1286,6 +1286,7 @@ BasicNormalizerTest::FindFoldFCDExceptions() { /* * Hardcoded "NF* Skippable" sets, generated from * Mark Davis' com.ibm.text.UCD.NFSkippable (see ICU4J CVS, module unicodetools). + * Run com.ibm.text.UCD.Main with the option NFSkippable. * * Must be updated for each Unicode version. */ @@ -1298,163 +1299,169 @@ initExpectedSkippables(UnicodeSet skipSets[UNORM_MODE_COUNT]) { "\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6\\u00F9-\\u00FD" "\\u00FF-\\u010F\\u0112-\\u0125\\u0128-\\u0130\\u0134-\\u0137" "\\u0139-\\u013E\\u0143-\\u0148\\u014C-\\u0151\\u0154-\\u0165" - "\\u0168-\\u017E\\u01A0-\\u01A1\\u01AF-\\u01B0\\u01CD-\\u01DC" - "\\u01DE-\\u01E3\\u01E6-\\u01F0\\u01F4-\\u01F5\\u01F8-\\u021B" - "\\u021E-\\u021F\\u0226-\\u0233\\u0300-\\u034E\\u0350-\\u0357" - "\\u035D-\\u036F\\u0374\\u037E\\u0385-\\u038A\\u038C\\u038E-" - "\\u0390\\u03AA-\\u03B0\\u03CA-\\u03CE\\u03D3-\\u03D4\\u0400-" - "\\u0401\\u0403\\u0407\\u040C-\\u040E\\u0419\\u0439\\u0450-" - "\\u0451\\u0453\\u0457\\u045C-\\u045E\\u0476-\\u0477\\u0483-" - "\\u0486\\u04C1-\\u04C2\\u04D0-\\u04D3\\u04D6-\\u04D7\\u04DA-" - "\\u04DF\\u04E2-\\u04E7\\u04EA-\\u04F5\\u04F8-\\u04F9\\u0591-" - "\\u05A1\\u05A3-\\u05B9\\u05BB-\\u05BD\\u05BF\\u05C1-\\u05C2" - "\\u05C4\\u0610-\\u0615\\u0622-\\u0626\\u064B-\\u0658\\u0670" - "\\u06C0\\u06C2\\u06D3\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-" - "\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u0929\\u0931" - "\\u0934\\u093C\\u094D\\u0951-\\u0954\\u0958-\\u095F\\u09BC" - "\\u09CB-\\u09CD\\u09DC-\\u09DD\\u09DF\\u0A33\\u0A36\\u0A3C" - "\\u0A4D\\u0A59-\\u0A5B\\u0A5E\\u0ABC\\u0ACD\\u0B3C\\u0B48\\u0B4B" - "-\\u0B4D\\u0B5C-\\u0B5D\\u0B94\\u0BCA-\\u0BCD\\u0C48\\u0C4D" - "\\u0C55-\\u0C56\\u0CBC\\u0CC0\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB" - "\\u0CCD\\u0D4A-\\u0D4D\\u0DCA\\u0DDA\\u0DDC-\\u0DDE\\u0E38-" - "\\u0E3A\\u0E48-\\u0E4B\\u0EB8-\\u0EB9\\u0EC8-\\u0ECB\\u0F18-" - "\\u0F19\\u0F35\\u0F37\\u0F39\\u0F43\\u0F4D\\u0F52\\u0F57\\u0F5C" - "\\u0F69\\u0F71-\\u0F76\\u0F78\\u0F7A-\\u0F7D\\u0F80-\\u0F84" - "\\u0F86-\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7\\u0FAC\\u0FB9\\u0FC6" - "\\u1026\\u1037\\u1039\\u1714\\u1734\\u17D2\\u17DD\\u18A9\\u1939-" - "\\u193B\\u1E00-\\u1E99\\u1E9B\\u1EA0-\\u1EF9\\u1F00-\\u1F15" - "\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57" - "\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-" - "\\u1FBC\\u1FBE\\u1FC1-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB" - "\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFD\\u2000-\\u2001" - "\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EA\\u2126\\u212A-\\u212B" - "\\u219A-\\u219B\\u21AE\\u21CD-\\u21CF\\u2204\\u2209\\u220C" - "\\u2224\\u2226\\u2241\\u2244\\u2247\\u2249\\u2260\\u2262\\u226D-" - "\\u2271\\u2274-\\u2275\\u2278-\\u2279\\u2280-\\u2281\\u2284-" - "\\u2285\\u2288-\\u2289\\u22AC-\\u22AF\\u22E0-\\u22E3\\u22EA-" - "\\u22ED\\u2329-\\u232A\\u2ADC\\u302A-\\u302F\\u304C\\u304E" - "\\u3050\\u3052\\u3054\\u3056\\u3058\\u305A\\u305C\\u305E\\u3060" - "\\u3062\\u3065\\u3067\\u3069\\u3070-\\u3071\\u3073-\\u3074" - "\\u3076-\\u3077\\u3079-\\u307A\\u307C-\\u307D\\u3094\\u3099-" - "\\u309A\\u309E\\u30AC\\u30AE\\u30B0\\u30B2\\u30B4\\u30B6\\u30B8" - "\\u30BA\\u30BC\\u30BE\\u30C0\\u30C2\\u30C5\\u30C7\\u30C9\\u30D0-" - "\\u30D1\\u30D3-\\u30D4\\u30D6-\\u30D7\\u30D9-\\u30DA\\u30DC-" - "\\u30DD\\u30F4\\u30F7-\\u30FA\\u30FE\\uAC00-\\uD7A3\\uF900-" - "\\uFA0D\\uFA10\\uFA12\\uFA15-\\uFA1E\\uFA20\\uFA22\\uFA25-" - "\\uFA26\\uFA2A-\\uFA2D\\uFA30-\\uFA6A\\uFB1D-\\uFB1F\\uFB2A-" - "\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44" - "\\uFB46-\\uFB4E\\uFE20-\\uFE23\\U0001D15E-\\U0001D169\\U0001D16D" - "-\\U0001D172\\U0001D17B-\\U0001D182\\U0001D185-\\U0001D18B" - "\\U0001D1AA-\\U0001D1AD\\U0001D1BB-\\U0001D1C0\\U0002F800-" - "\\U0002FA1D]", ""), errorCode); + "\\u0168-\\u017E\\u01A0\\u01A1\\u01AF\\u01B0\\u01CD-\\u01DC" + "\\u01DE-\\u01E3\\u01E6-\\u01F0\\u01F4\\u01F5\\u01F8-\\u021B" + "\\u021E\\u021F\\u0226-\\u0233\\u0300-\\u034E\\u0350-\\u036F" + "\\u0374\\u037E\\u0385-\\u038A\\u038C\\u038E-\\u0390\\u03AA-" + "\\u03B0\\u03CA-\\u03CE\\u03D3\\u03D4\\u0400\\u0401\\u0403\\u0407" + "\\u040C-\\u040E\\u0419\\u0439\\u0450\\u0451\\u0453\\u0457\\u045C" + "-\\u045E\\u0476\\u0477\\u0483-\\u0486\\u04C1\\u04C2\\u04D0-" + "\\u04D3\\u04D6\\u04D7\\u04DA-\\u04DF\\u04E2-\\u04E7\\u04EA-" + "\\u04F5\\u04F8\\u04F9\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4" + "\\u05C5\\u05C7\\u0610-\\u0615\\u0622-\\u0626\\u064B-\\u065E" + "\\u0670\\u06C0\\u06C2\\u06D3\\u06D6-\\u06DC\\u06DF-\\u06E4" + "\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07EB-" + "\\u07F3\\u0929\\u0931\\u0934\\u093C\\u094D\\u0951-\\u0954\\u0958" + "-\\u095F\\u09BC\\u09CB-\\u09CD\\u09DC\\u09DD\\u09DF\\u0A33" + "\\u0A36\\u0A3C\\u0A4D\\u0A59-\\u0A5B\\u0A5E\\u0ABC\\u0ACD\\u0B3C" + "\\u0B48\\u0B4B-\\u0B4D\\u0B5C\\u0B5D\\u0B94\\u0BCA-\\u0BCD" + "\\u0C48\\u0C4D\\u0C55\\u0C56\\u0CBC\\u0CC0\\u0CC7\\u0CC8\\u0CCA" + "\\u0CCB\\u0CCD\\u0D4A-\\u0D4D\\u0DCA\\u0DDA\\u0DDC-\\u0DDE" + "\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB8\\u0EB9\\u0EC8-\\u0ECB" + "\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F43\\u0F4D\\u0F52\\u0F57" + "\\u0F5C\\u0F69\\u0F71-\\u0F76\\u0F78\\u0F7A-\\u0F7D\\u0F80-" + "\\u0F84\\u0F86\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7\\u0FAC\\u0FB9" + "\\u0FC6\\u1026\\u1037\\u1039\\u135F\\u1714\\u1734\\u17D2\\u17DD" + "\\u18A9\\u1939-\\u193B\\u1A17\\u1A18\\u1B06\\u1B08\\u1B0A\\u1B0C" + "\\u1B0E\\u1B12\\u1B34\\u1B3B\\u1B3D\\u1B40\\u1B41\\u1B43\\u1B44" + "\\u1B6B-\\u1B73\\u1DC0-\\u1DCA\\u1DFE-\\u1E99\\u1E9B\\u1EA0-" + "\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-" + "\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D" + "\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC1-\\u1FC4\\u1FC6-" + "\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-" + "\\u1FFD\\u2000\\u2001\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EF" + "\\u2126\\u212A\\u212B\\u219A\\u219B\\u21AE\\u21CD-\\u21CF\\u2204" + "\\u2209\\u220C\\u2224\\u2226\\u2241\\u2244\\u2247\\u2249\\u2260" + "\\u2262\\u226D-\\u2271\\u2274\\u2275\\u2278\\u2279\\u2280\\u2281" + "\\u2284\\u2285\\u2288\\u2289\\u22AC-\\u22AF\\u22E0-\\u22E3" + "\\u22EA-\\u22ED\\u2329\\u232A\\u2ADC\\u302A-\\u302F\\u304C" + "\\u304E\\u3050\\u3052\\u3054\\u3056\\u3058\\u305A\\u305C\\u305E" + "\\u3060\\u3062\\u3065\\u3067\\u3069\\u3070\\u3071\\u3073\\u3074" + "\\u3076\\u3077\\u3079\\u307A\\u307C\\u307D\\u3094\\u3099\\u309A" + "\\u309E\\u30AC\\u30AE\\u30B0\\u30B2\\u30B4\\u30B6\\u30B8\\u30BA" + "\\u30BC\\u30BE\\u30C0\\u30C2\\u30C5\\u30C7\\u30C9\\u30D0\\u30D1" + "\\u30D3\\u30D4\\u30D6\\u30D7\\u30D9\\u30DA\\u30DC\\u30DD\\u30F4" + "\\u30F7-\\u30FA\\u30FE\\uA806\\uAC00-\\uD7A3\\uF900-\\uFA0D" + "\\uFA10\\uFA12\\uFA15-\\uFA1E\\uFA20\\uFA22\\uFA25\\uFA26\\uFA2A" + "-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB1D-\\uFB1F\\uFB2A-" + "\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46" + "-\\uFB4E\\uFE20-\\uFE23\\U00010A0D\\U00010A0F\\U00010A38-\\U0001" + "0A3A\\U00010A3F\\U0001D15E-\\U0001D169\\U0001D16D-\\U0001D172" + "\\U0001D17B-\\U0001D182\\U0001D185-\\U0001D18B\\U0001D1AA-" + "\\U0001D1AD\\U0001D1BB-\\U0001D1C0\\U0001D242-\\U0001D244\\U0002" + "F800-\\U0002FA1D]" + , ""), errorCode); skipSets[UNORM_NFC].applyPattern(UnicodeString( "[^<->A-PR-Za-pr-z\\u00A8\\u00C0-\\u00CF\\u00D1-\\u00D6\\u00D8-" "\\u00DD\\u00E0-\\u00EF\\u00F1-\\u00F6\\u00F8-\\u00FD\\u00FF-" - "\\u0103\\u0106-\\u010F\\u0112-\\u0117\\u011A-\\u0121\\u0124-" - "\\u0125\\u0128-\\u012D\\u0130\\u0139-\\u013A\\u013D-\\u013E" - "\\u0143-\\u0144\\u0147-\\u0148\\u014C-\\u0151\\u0154-\\u0155" - "\\u0158-\\u015D\\u0160-\\u0161\\u0164-\\u0165\\u0168-\\u0171" - "\\u0174-\\u017F\\u01A0-\\u01A1\\u01AF-\\u01B0\\u01B7\\u01CD-" - "\\u01DC\\u01DE-\\u01E1\\u01E6-\\u01EB\\u01F4-\\u01F5\\u01F8-" - "\\u01FB\\u0200-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u0292" - "\\u0300-\\u034E\\u0350-\\u0357\\u035D-\\u036F\\u0374\\u037E" - "\\u0387\\u0391\\u0395\\u0397\\u0399\\u039F\\u03A1\\u03A5\\u03A9" - "\\u03AC\\u03AE\\u03B1\\u03B5\\u03B7\\u03B9\\u03BF\\u03C1\\u03C5" - "\\u03C9-\\u03CB\\u03CE\\u03D2\\u0406\\u0410\\u0413\\u0415-" - "\\u0418\\u041A\\u041E\\u0423\\u0427\\u042B\\u042D\\u0430\\u0433" - "\\u0435-\\u0438\\u043A\\u043E\\u0443\\u0447\\u044B\\u044D\\u0456" - "\\u0474-\\u0475\\u0483-\\u0486\\u04D8-\\u04D9\\u04E8-\\u04E9" - "\\u0591-\\u05A1\\u05A3-\\u05B9\\u05BB-\\u05BD\\u05BF\\u05C1-" - "\\u05C2\\u05C4\\u0610-\\u0615\\u0622-\\u0623\\u0627\\u0648" - "\\u064A-\\u0658\\u0670\\u06C1\\u06D2\\u06D5-\\u06DC\\u06DF-" - "\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A" - "\\u0928\\u0930\\u0933\\u093C\\u094D\\u0951-\\u0954\\u0958-" - "\\u095F\\u09BC\\u09BE\\u09C7\\u09CD\\u09D7\\u09DC-\\u09DD\\u09DF" + "\\u0103\\u0106-\\u010F\\u0112-\\u0117\\u011A-\\u0121\\u0124" + "\\u0125\\u0128-\\u012D\\u0130\\u0139\\u013A\\u013D\\u013E\\u0143" + "\\u0144\\u0147\\u0148\\u014C-\\u0151\\u0154\\u0155\\u0158-" + "\\u015D\\u0160\\u0161\\u0164\\u0165\\u0168-\\u0171\\u0174-" + "\\u017F\\u01A0\\u01A1\\u01AF\\u01B0\\u01B7\\u01CD-\\u01DC\\u01DE" + "-\\u01E1\\u01E6-\\u01EB\\u01F4\\u01F5\\u01F8-\\u01FB\\u0200-" + "\\u021B\\u021E\\u021F\\u0226-\\u0233\\u0292\\u0300-\\u034E" + "\\u0350-\\u036F\\u0374\\u037E\\u0387\\u0391\\u0395\\u0397\\u0399" + "\\u039F\\u03A1\\u03A5\\u03A9\\u03AC\\u03AE\\u03B1\\u03B5\\u03B7" + "\\u03B9\\u03BF\\u03C1\\u03C5\\u03C9-\\u03CB\\u03CE\\u03D2\\u0406" + "\\u0410\\u0413\\u0415-\\u0418\\u041A\\u041E\\u0423\\u0427\\u042B" + "\\u042D\\u0430\\u0433\\u0435-\\u0438\\u043A\\u043E\\u0443\\u0447" + "\\u044B\\u044D\\u0456\\u0474\\u0475\\u0483-\\u0486\\u04D8\\u04D9" + "\\u04E8\\u04E9\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5" + "\\u05C7\\u0610-\\u0615\\u0622\\u0623\\u0627\\u0648\\u064A-" + "\\u065E\\u0670\\u06C1\\u06D2\\u06D5-\\u06DC\\u06DF-\\u06E4" + "\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07EB-" + "\\u07F3\\u0928\\u0930\\u0933\\u093C\\u094D\\u0951-\\u0954\\u0958" + "-\\u095F\\u09BC\\u09BE\\u09C7\\u09CD\\u09D7\\u09DC\\u09DD\\u09DF" "\\u0A33\\u0A36\\u0A3C\\u0A4D\\u0A59-\\u0A5B\\u0A5E\\u0ABC\\u0ACD" - "\\u0B3C\\u0B3E\\u0B47\\u0B4D\\u0B56-\\u0B57\\u0B5C-\\u0B5D" - "\\u0B92\\u0BBE\\u0BC6-\\u0BC7\\u0BCD\\u0BD7\\u0C46\\u0C4D\\u0C55" - "-\\u0C56\\u0CBC\\u0CBF\\u0CC2\\u0CC6\\u0CCA\\u0CCD\\u0CD5-" - "\\u0CD6\\u0D3E\\u0D46-\\u0D47\\u0D4D\\u0D57\\u0DCA\\u0DCF\\u0DD9" - "\\u0DDC\\u0DDF\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB8-\\u0EB9" - "\\u0EC8-\\u0ECB\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39\\u0F43" - "\\u0F4D\\u0F52\\u0F57\\u0F5C\\u0F69\\u0F71-\\u0F76\\u0F78\\u0F7A" - "-\\u0F7D\\u0F80-\\u0F84\\u0F86-\\u0F87\\u0F93\\u0F9D\\u0FA2" - "\\u0FA7\\u0FAC\\u0FB9\\u0FC6\\u1025\\u102E\\u1037\\u1039\\u1100-" - "\\u1112\\u1161-\\u1175\\u11A8-\\u11C2\\u1714\\u1734\\u17D2" - "\\u17DD\\u18A9\\u1939-\\u193B\\u1E00-\\u1E03\\u1E0A-\\u1E0F" + "\\u0B3C\\u0B3E\\u0B47\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B92" + "\\u0BBE\\u0BC6\\u0BC7\\u0BCD\\u0BD7\\u0C46\\u0C4D\\u0C55\\u0C56" + "\\u0CBC\\u0CBF\\u0CC2\\u0CC6\\u0CCA\\u0CCD\\u0CD5\\u0CD6\\u0D3E" + "\\u0D46\\u0D47\\u0D4D\\u0D57\\u0DCA\\u0DCF\\u0DD9\\u0DDC\\u0DDF" + "\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB8\\u0EB9\\u0EC8-\\u0ECB" + "\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F43\\u0F4D\\u0F52\\u0F57" + "\\u0F5C\\u0F69\\u0F71-\\u0F76\\u0F78\\u0F7A-\\u0F7D\\u0F80-" + "\\u0F84\\u0F86\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7\\u0FAC\\u0FB9" + "\\u0FC6\\u1025\\u102E\\u1037\\u1039\\u1100-\\u1112\\u1161-" + "\\u1175\\u11A8-\\u11C2\\u135F\\u1714\\u1734\\u17D2\\u17DD\\u18A9" + "\\u1939-\\u193B\\u1A17\\u1A18\\u1B05\\u1B07\\u1B09\\u1B0B\\u1B0D" + "\\u1B11\\u1B34\\u1B35\\u1B3A\\u1B3C\\u1B3E\\u1B3F\\u1B42\\u1B44" + "\\u1B6B-\\u1B73\\u1DC0-\\u1DCA\\u1DFE-\\u1E03\\u1E0A-\\u1E0F" "\\u1E12-\\u1E1B\\u1E20-\\u1E27\\u1E2A-\\u1E41\\u1E44-\\u1E53" "\\u1E58-\\u1E7D\\u1E80-\\u1E87\\u1E8E-\\u1E91\\u1E96-\\u1E99" - "\\u1EA0-\\u1EF3\\u1EF6-\\u1EF9\\u1F00-\\u1F11\\u1F18-\\u1F19" - "\\u1F20-\\u1F31\\u1F38-\\u1F39\\u1F40-\\u1F41\\u1F48-\\u1F49" - "\\u1F50-\\u1F51\\u1F59\\u1F60-\\u1F71\\u1F73-\\u1F75\\u1F77" - "\\u1F79\\u1F7B-\\u1F7D\\u1F80-\\u1F81\\u1F88-\\u1F89\\u1F90-" - "\\u1F91\\u1F98-\\u1F99\\u1FA0-\\u1FA1\\u1FA8-\\u1FA9\\u1FB3" - "\\u1FB6\\u1FBB-\\u1FBC\\u1FBE-\\u1FBF\\u1FC3\\u1FC6\\u1FC9" - "\\u1FCB-\\u1FCC\\u1FD3\\u1FDB\\u1FE3\\u1FEB\\u1FEE-\\u1FEF" - "\\u1FF3\\u1FF6\\u1FF9\\u1FFB-\\u1FFE\\u2000-\\u2001\\u20D0-" - "\\u20DC\\u20E1\\u20E5-\\u20EA\\u2126\\u212A-\\u212B\\u2190" - "\\u2192\\u2194\\u21D0\\u21D2\\u21D4\\u2203\\u2208\\u220B\\u2223" - "\\u2225\\u223C\\u2243\\u2245\\u2248\\u224D\\u2261\\u2264-\\u2265" - "\\u2272-\\u2273\\u2276-\\u2277\\u227A-\\u227D\\u2282-\\u2283" - "\\u2286-\\u2287\\u2291-\\u2292\\u22A2\\u22A8-\\u22A9\\u22AB" - "\\u22B2-\\u22B5\\u2329-\\u232A\\u2ADC\\u302A-\\u302F\\u3046" - "\\u304B\\u304D\\u304F\\u3051\\u3053\\u3055\\u3057\\u3059\\u305B" - "\\u305D\\u305F\\u3061\\u3064\\u3066\\u3068\\u306F\\u3072\\u3075" - "\\u3078\\u307B\\u3099-\\u309A\\u309D\\u30A6\\u30AB\\u30AD\\u30AF" - "\\u30B1\\u30B3\\u30B5\\u30B7\\u30B9\\u30BB\\u30BD\\u30BF\\u30C1" - "\\u30C4\\u30C6\\u30C8\\u30CF\\u30D2\\u30D5\\u30D8\\u30DB\\u30EF-" - "\\u30F2\\u30FD\\uAC00\\uAC1C\\uAC38\\uAC54\\uAC70\\uAC8C\\uACA8" - "\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34\\uAD50\\uAD6C\\uAD88\\uADA4" - "\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30\\uAE4C\\uAE68\\uAE84\\uAEA0" - "\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C\\uAF48\\uAF64\\uAF80\\uAF9C" - "\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028\\uB044\\uB060\\uB07C\\uB098" - "\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124\\uB140\\uB15C\\uB178\\uB194" - "\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220\\uB23C\\uB258\\uB274\\uB290" - "\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C\\uB338\\uB354\\uB370\\uB38C" - "\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418\\uB434\\uB450\\uB46C\\uB488" - "\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514\\uB530\\uB54C\\uB568\\uB584" - "\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610\\uB62C\\uB648\\uB664\\uB680" - "\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C\\uB728\\uB744\\uB760\\uB77C" - "\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808\\uB824\\uB840\\uB85C\\uB878" - "\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904\\uB920\\uB93C\\uB958\\uB974" - "\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00\\uBA1C\\uBA38\\uBA54\\uBA70" - "\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC\\uBB18\\uBB34\\uBB50\\uBB6C" - "\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8\\uBC14\\uBC30\\uBC4C\\uBC68" - "\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4\\uBD10\\uBD2C\\uBD48\\uBD64" - "\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0\\uBE0C\\uBE28\\uBE44\\uBE60" - "\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC\\uBF08\\uBF24\\uBF40\\uBF5C" - "\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8\\uC004\\uC020\\uC03C\\uC058" - "\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4\\uC100\\uC11C\\uC138\\uC154" - "\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0\\uC1FC\\uC218\\uC234\\uC250" - "\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC\\uC2F8\\uC314\\uC330\\uC34C" - "\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8\\uC3F4\\uC410\\uC42C\\uC448" - "\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4\\uC4F0\\uC50C\\uC528\\uC544" - "\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0\\uC5EC\\uC608\\uC624\\uC640" - "\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC\\uC6E8\\uC704\\uC720\\uC73C" - "\\uC758\\uC774\\uC790\\uC7AC\\uC7C8\\uC7E4\\uC800\\uC81C\\uC838" - "\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4\\uC8E0\\uC8FC\\uC918\\uC934" - "\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0\\uC9DC\\uC9F8\\uCA14\\uCA30" - "\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC\\uCAD8\\uCAF4\\uCB10\\uCB2C" - "\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8\\uCBD4\\uCBF0\\uCC0C\\uCC28" - "\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4\\uCCD0\\uCCEC\\uCD08\\uCD24" - "\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0\\uCDCC\\uCDE8\\uCE04\\uCE20" - "\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC\\uCEC8\\uCEE4\\uCF00\\uCF1C" - "\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8\\uCFC4\\uCFE0\\uCFFC\\uD018" - "\\uD034\\uD050\\uD06C\\uD088\\uD0A4\\uD0C0\\uD0DC\\uD0F8\\uD114" - "\\uD130\\uD14C\\uD168\\uD184\\uD1A0\\uD1BC\\uD1D8\\uD1F4\\uD210" - "\\uD22C\\uD248\\uD264\\uD280\\uD29C\\uD2B8\\uD2D4\\uD2F0\\uD30C" - "\\uD328\\uD344\\uD360\\uD37C\\uD398\\uD3B4\\uD3D0\\uD3EC\\uD408" - "\\uD424\\uD440\\uD45C\\uD478\\uD494\\uD4B0\\uD4CC\\uD4E8\\uD504" - "\\uD520\\uD53C\\uD558\\uD574\\uD590\\uD5AC\\uD5C8\\uD5E4\\uD600" - "\\uD61C\\uD638\\uD654\\uD670\\uD68C\\uD6A8\\uD6C4\\uD6E0\\uD6FC" - "\\uD718\\uD734\\uD750\\uD76C\\uD788\\uF900-\\uFA0D\\uFA10\\uFA12" - "\\uFA15-\\uFA1E\\uFA20\\uFA22\\uFA25-\\uFA26\\uFA2A-\\uFA2D" - "\\uFA30-\\uFA6A\\uFB1D-\\uFB1F\\uFB2A-\\uFB36\\uFB38-\\uFB3C" - "\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFB4E\\uFE20-" - "\\uFE23\\U0001D15E-\\U0001D169\\U0001D16D-\\U0001D172\\U0001D17B" - "-\\U0001D182\\U0001D185-\\U0001D18B\\U0001D1AA-\\U0001D1AD" - "\\U0001D1BB-\\U0001D1C0\\U0002F800-\\U0002FA1D]", ""), errorCode); + "\\u1EA0-\\u1EF3\\u1EF6-\\u1EF9\\u1F00-\\u1F11\\u1F18\\u1F19" + "\\u1F20-\\u1F31\\u1F38\\u1F39\\u1F40\\u1F41\\u1F48\\u1F49\\u1F50" + "\\u1F51\\u1F59\\u1F60-\\u1F71\\u1F73-\\u1F75\\u1F77\\u1F79" + "\\u1F7B-\\u1F7D\\u1F80\\u1F81\\u1F88\\u1F89\\u1F90\\u1F91\\u1F98" + "\\u1F99\\u1FA0\\u1FA1\\u1FA8\\u1FA9\\u1FB3\\u1FB6\\u1FBB\\u1FBC" + "\\u1FBE\\u1FBF\\u1FC3\\u1FC6\\u1FC9\\u1FCB\\u1FCC\\u1FD3\\u1FDB" + "\\u1FE3\\u1FEB\\u1FEE\\u1FEF\\u1FF3\\u1FF6\\u1FF9\\u1FFB-\\u1FFE" + "\\u2000\\u2001\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EF\\u2126" + "\\u212A\\u212B\\u2190\\u2192\\u2194\\u21D0\\u21D2\\u21D4\\u2203" + "\\u2208\\u220B\\u2223\\u2225\\u223C\\u2243\\u2245\\u2248\\u224D" + "\\u2261\\u2264\\u2265\\u2272\\u2273\\u2276\\u2277\\u227A-\\u227D" + "\\u2282\\u2283\\u2286\\u2287\\u2291\\u2292\\u22A2\\u22A8\\u22A9" + "\\u22AB\\u22B2-\\u22B5\\u2329\\u232A\\u2ADC\\u302A-\\u302F" + "\\u3046\\u304B\\u304D\\u304F\\u3051\\u3053\\u3055\\u3057\\u3059" + "\\u305B\\u305D\\u305F\\u3061\\u3064\\u3066\\u3068\\u306F\\u3072" + "\\u3075\\u3078\\u307B\\u3099\\u309A\\u309D\\u30A6\\u30AB\\u30AD" + "\\u30AF\\u30B1\\u30B3\\u30B5\\u30B7\\u30B9\\u30BB\\u30BD\\u30BF" + "\\u30C1\\u30C4\\u30C6\\u30C8\\u30CF\\u30D2\\u30D5\\u30D8\\u30DB" + "\\u30EF-\\u30F2\\u30FD\\uA806\\uAC00\\uAC1C\\uAC38\\uAC54\\uAC70" + "\\uAC8C\\uACA8\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34\\uAD50\\uAD6C" + "\\uAD88\\uADA4\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30\\uAE4C\\uAE68" + "\\uAE84\\uAEA0\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C\\uAF48\\uAF64" + "\\uAF80\\uAF9C\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028\\uB044\\uB060" + "\\uB07C\\uB098\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124\\uB140\\uB15C" + "\\uB178\\uB194\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220\\uB23C\\uB258" + "\\uB274\\uB290\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C\\uB338\\uB354" + "\\uB370\\uB38C\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418\\uB434\\uB450" + "\\uB46C\\uB488\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514\\uB530\\uB54C" + "\\uB568\\uB584\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610\\uB62C\\uB648" + "\\uB664\\uB680\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C\\uB728\\uB744" + "\\uB760\\uB77C\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808\\uB824\\uB840" + "\\uB85C\\uB878\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904\\uB920\\uB93C" + "\\uB958\\uB974\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00\\uBA1C\\uBA38" + "\\uBA54\\uBA70\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC\\uBB18\\uBB34" + "\\uBB50\\uBB6C\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8\\uBC14\\uBC30" + "\\uBC4C\\uBC68\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4\\uBD10\\uBD2C" + "\\uBD48\\uBD64\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0\\uBE0C\\uBE28" + "\\uBE44\\uBE60\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC\\uBF08\\uBF24" + "\\uBF40\\uBF5C\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8\\uC004\\uC020" + "\\uC03C\\uC058\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4\\uC100\\uC11C" + "\\uC138\\uC154\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0\\uC1FC\\uC218" + "\\uC234\\uC250\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC\\uC2F8\\uC314" + "\\uC330\\uC34C\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8\\uC3F4\\uC410" + "\\uC42C\\uC448\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4\\uC4F0\\uC50C" + "\\uC528\\uC544\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0\\uC5EC\\uC608" + "\\uC624\\uC640\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC\\uC6E8\\uC704" + "\\uC720\\uC73C\\uC758\\uC774\\uC790\\uC7AC\\uC7C8\\uC7E4\\uC800" + "\\uC81C\\uC838\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4\\uC8E0\\uC8FC" + "\\uC918\\uC934\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0\\uC9DC\\uC9F8" + "\\uCA14\\uCA30\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC\\uCAD8\\uCAF4" + "\\uCB10\\uCB2C\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8\\uCBD4\\uCBF0" + "\\uCC0C\\uCC28\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4\\uCCD0\\uCCEC" + "\\uCD08\\uCD24\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0\\uCDCC\\uCDE8" + "\\uCE04\\uCE20\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC\\uCEC8\\uCEE4" + "\\uCF00\\uCF1C\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8\\uCFC4\\uCFE0" + "\\uCFFC\\uD018\\uD034\\uD050\\uD06C\\uD088\\uD0A4\\uD0C0\\uD0DC" + "\\uD0F8\\uD114\\uD130\\uD14C\\uD168\\uD184\\uD1A0\\uD1BC\\uD1D8" + "\\uD1F4\\uD210\\uD22C\\uD248\\uD264\\uD280\\uD29C\\uD2B8\\uD2D4" + "\\uD2F0\\uD30C\\uD328\\uD344\\uD360\\uD37C\\uD398\\uD3B4\\uD3D0" + "\\uD3EC\\uD408\\uD424\\uD440\\uD45C\\uD478\\uD494\\uD4B0\\uD4CC" + "\\uD4E8\\uD504\\uD520\\uD53C\\uD558\\uD574\\uD590\\uD5AC\\uD5C8" + "\\uD5E4\\uD600\\uD61C\\uD638\\uD654\\uD670\\uD68C\\uD6A8\\uD6C4" + "\\uD6E0\\uD6FC\\uD718\\uD734\\uD750\\uD76C\\uD788\\uF900-\\uFA0D" + "\\uFA10\\uFA12\\uFA15-\\uFA1E\\uFA20\\uFA22\\uFA25\\uFA26\\uFA2A" + "-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB1D-\\uFB1F\\uFB2A-" + "\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46" + "-\\uFB4E\\uFE20-\\uFE23\\U00010A0D\\U00010A0F\\U00010A38-\\U0001" + "0A3A\\U00010A3F\\U0001D15E-\\U0001D169\\U0001D16D-\\U0001D172" + "\\U0001D17B-\\U0001D182\\U0001D185-\\U0001D18B\\U0001D1AA-" + "\\U0001D1AD\\U0001D1BB-\\U0001D1C0\\U0001D242-\\U0001D244\\U0002" + "F800-\\U0002FA1D]" + , ""), errorCode); skipSets[UNORM_NFKD].applyPattern(UnicodeString( "[^\\u00A0\\u00A8\\u00AA\\u00AF\\u00B2-\\u00B5\\u00B8-\\u00BA" @@ -1462,213 +1469,220 @@ initExpectedSkippables(UnicodeSet skipSets[UNORM_MODE_COUNT]) { "\\u00D9-\\u00DD\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6" "\\u00F9-\\u00FD\\u00FF-\\u010F\\u0112-\\u0125\\u0128-\\u0130" "\\u0132-\\u0137\\u0139-\\u0140\\u0143-\\u0149\\u014C-\\u0151" - "\\u0154-\\u0165\\u0168-\\u017F\\u01A0-\\u01A1\\u01AF-\\u01B0" + "\\u0154-\\u0165\\u0168-\\u017F\\u01A0\\u01A1\\u01AF\\u01B0" "\\u01C4-\\u01DC\\u01DE-\\u01E3\\u01E6-\\u01F5\\u01F8-\\u021B" - "\\u021E-\\u021F\\u0226-\\u0233\\u02B0-\\u02B8\\u02D8-\\u02DD" - "\\u02E0-\\u02E4\\u0300-\\u034E\\u0350-\\u0357\\u035D-\\u036F" - "\\u0374\\u037A\\u037E\\u0384-\\u038A\\u038C\\u038E-\\u0390" - "\\u03AA-\\u03B0\\u03CA-\\u03CE\\u03D0-\\u03D6\\u03F0-\\u03F2" - "\\u03F4-\\u03F5\\u03F9\\u0400-\\u0401\\u0403\\u0407\\u040C-" - "\\u040E\\u0419\\u0439\\u0450-\\u0451\\u0453\\u0457\\u045C-" - "\\u045E\\u0476-\\u0477\\u0483-\\u0486\\u04C1-\\u04C2\\u04D0-" - "\\u04D3\\u04D6-\\u04D7\\u04DA-\\u04DF\\u04E2-\\u04E7\\u04EA-" - "\\u04F5\\u04F8-\\u04F9\\u0587\\u0591-\\u05A1\\u05A3-\\u05B9" - "\\u05BB-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4\\u0610-\\u0615" - "\\u0622-\\u0626\\u064B-\\u0658\\u0670\\u0675-\\u0678\\u06C0" - "\\u06C2\\u06D3\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8" - "\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u0929\\u0931\\u0934" - "\\u093C\\u094D\\u0951-\\u0954\\u0958-\\u095F\\u09BC\\u09CB-" - "\\u09CD\\u09DC-\\u09DD\\u09DF\\u0A33\\u0A36\\u0A3C\\u0A4D\\u0A59" - "-\\u0A5B\\u0A5E\\u0ABC\\u0ACD\\u0B3C\\u0B48\\u0B4B-\\u0B4D" - "\\u0B5C-\\u0B5D\\u0B94\\u0BCA-\\u0BCD\\u0C48\\u0C4D\\u0C55-" - "\\u0C56\\u0CBC\\u0CC0\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB\\u0CCD" - "\\u0D4A-\\u0D4D\\u0DCA\\u0DDA\\u0DDC-\\u0DDE\\u0E33\\u0E38-" - "\\u0E3A\\u0E48-\\u0E4B\\u0EB3\\u0EB8-\\u0EB9\\u0EC8-\\u0ECB" - "\\u0EDC-\\u0EDD\\u0F0C\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39" + "\\u021E\\u021F\\u0226-\\u0233\\u02B0-\\u02B8\\u02D8-\\u02DD" + "\\u02E0-\\u02E4\\u0300-\\u034E\\u0350-\\u036F\\u0374\\u037A" + "\\u037E\\u0384-\\u038A\\u038C\\u038E-\\u0390\\u03AA-\\u03B0" + "\\u03CA-\\u03CE\\u03D0-\\u03D6\\u03F0-\\u03F2\\u03F4\\u03F5" + "\\u03F9\\u0400\\u0401\\u0403\\u0407\\u040C-\\u040E\\u0419\\u0439" + "\\u0450\\u0451\\u0453\\u0457\\u045C-\\u045E\\u0476\\u0477\\u0483" + "-\\u0486\\u04C1\\u04C2\\u04D0-\\u04D3\\u04D6\\u04D7\\u04DA-" + "\\u04DF\\u04E2-\\u04E7\\u04EA-\\u04F5\\u04F8\\u04F9\\u0587" + "\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610" + "-\\u0615\\u0622-\\u0626\\u064B-\\u065E\\u0670\\u0675-\\u0678" + "\\u06C0\\u06C2\\u06D3\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7" + "\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07EB-\\u07F3" + "\\u0929\\u0931\\u0934\\u093C\\u094D\\u0951-\\u0954\\u0958-" + "\\u095F\\u09BC\\u09CB-\\u09CD\\u09DC\\u09DD\\u09DF\\u0A33\\u0A36" + "\\u0A3C\\u0A4D\\u0A59-\\u0A5B\\u0A5E\\u0ABC\\u0ACD\\u0B3C\\u0B48" + "\\u0B4B-\\u0B4D\\u0B5C\\u0B5D\\u0B94\\u0BCA-\\u0BCD\\u0C48" + "\\u0C4D\\u0C55\\u0C56\\u0CBC\\u0CC0\\u0CC7\\u0CC8\\u0CCA\\u0CCB" + "\\u0CCD\\u0D4A-\\u0D4D\\u0DCA\\u0DDA\\u0DDC-\\u0DDE\\u0E33" + "\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB3\\u0EB8\\u0EB9\\u0EC8-" + "\\u0ECB\\u0EDC\\u0EDD\\u0F0C\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39" "\\u0F43\\u0F4D\\u0F52\\u0F57\\u0F5C\\u0F69\\u0F71-\\u0F7D\\u0F80" - "-\\u0F84\\u0F86-\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7\\u0FAC" - "\\u0FB9\\u0FC6\\u1026\\u1037\\u1039\\u1714\\u1734\\u17D2\\u17DD" - "\\u18A9\\u1939-\\u193B\\u1D2C-\\u1D2E\\u1D30-\\u1D3A\\u1D3C-" - "\\u1D4D\\u1D4F-\\u1D6A\\u1E00-\\u1E9B\\u1EA0-\\u1EF9\\u1F00-" - "\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-" - "\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4" - "\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF" - "\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2000-\\u200A\\u2011\\u2017" - "\\u2024-\\u2026\\u202F\\u2033-\\u2034\\u2036-\\u2037\\u203C" - "\\u203E\\u2047-\\u2049\\u2057\\u205F\\u2070-\\u2071\\u2074-" - "\\u208E\\u20A8\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EA\\u2100-" - "\\u2103\\u2105-\\u2107\\u2109-\\u2113\\u2115-\\u2116\\u2119-" - "\\u211D\\u2120-\\u2122\\u2124\\u2126\\u2128\\u212A-\\u212D" - "\\u212F-\\u2131\\u2133-\\u2139\\u213B\\u213D-\\u2140\\u2145-" - "\\u2149\\u2153-\\u217F\\u219A-\\u219B\\u21AE\\u21CD-\\u21CF" - "\\u2204\\u2209\\u220C\\u2224\\u2226\\u222C-\\u222D\\u222F-" - "\\u2230\\u2241\\u2244\\u2247\\u2249\\u2260\\u2262\\u226D-\\u2271" - "\\u2274-\\u2275\\u2278-\\u2279\\u2280-\\u2281\\u2284-\\u2285" - "\\u2288-\\u2289\\u22AC-\\u22AF\\u22E0-\\u22E3\\u22EA-\\u22ED" - "\\u2329-\\u232A\\u2460-\\u24EA\\u2A0C\\u2A74-\\u2A76\\u2ADC" - "\\u2E9F\\u2EF3\\u2F00-\\u2FD5\\u3000\\u302A-\\u302F\\u3036" - "\\u3038-\\u303A\\u304C\\u304E\\u3050\\u3052\\u3054\\u3056\\u3058" - "\\u305A\\u305C\\u305E\\u3060\\u3062\\u3065\\u3067\\u3069\\u3070-" - "\\u3071\\u3073-\\u3074\\u3076-\\u3077\\u3079-\\u307A\\u307C-" - "\\u307D\\u3094\\u3099-\\u309C\\u309E-\\u309F\\u30AC\\u30AE" - "\\u30B0\\u30B2\\u30B4\\u30B6\\u30B8\\u30BA\\u30BC\\u30BE\\u30C0" - "\\u30C2\\u30C5\\u30C7\\u30C9\\u30D0-\\u30D1\\u30D3-\\u30D4" - "\\u30D6-\\u30D7\\u30D9-\\u30DA\\u30DC-\\u30DD\\u30F4\\u30F7-" - "\\u30FA\\u30FE-\\u30FF\\u3131-\\u318E\\u3192-\\u319F\\u3200-" - "\\u321E\\u3220-\\u3243\\u3250-\\u327D\\u3280-\\u32FE\\u3300-" - "\\u33FF\\uAC00-\\uD7A3\\uF900-\\uFA0D\\uFA10\\uFA12\\uFA15-" - "\\uFA1E\\uFA20\\uFA22\\uFA25-\\uFA26\\uFA2A-\\uFA2D\\uFA30-" - "\\uFA6A\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB36\\uFB38-" - "\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1" - "\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFC" - "\\uFE20-\\uFE23\\uFE30-\\uFE44\\uFE47-\\uFE52\\uFE54-\\uFE66" - "\\uFE68-\\uFE6B\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC\\uFF01-" - "\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-" - "\\uFFDC\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\U0001D15E-\\U0001D169" + "-\\u0F84\\u0F86\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7\\u0FAC\\u0FB9" + "\\u0FC6\\u1026\\u1037\\u1039\\u10FC\\u135F\\u1714\\u1734\\u17D2" + "\\u17DD\\u18A9\\u1939-\\u193B\\u1A17\\u1A18\\u1B06\\u1B08\\u1B0A" + "\\u1B0C\\u1B0E\\u1B12\\u1B34\\u1B3B\\u1B3D\\u1B40\\u1B41\\u1B43" + "\\u1B44\\u1B6B-\\u1B73\\u1D2C-\\u1D2E\\u1D30-\\u1D3A\\u1D3C-" + "\\u1D4D\\u1D4F-\\u1D6A\\u1D78\\u1D9B-\\u1DCA\\u1DFE-\\u1E9B" + "\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45" + "\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-" + "\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-" + "\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2000-" + "\\u200A\\u2011\\u2017\\u2024-\\u2026\\u202F\\u2033\\u2034\\u2036" + "\\u2037\\u203C\\u203E\\u2047-\\u2049\\u2057\\u205F\\u2070\\u2071" + "\\u2074-\\u208E\\u2090-\\u2094\\u20A8\\u20D0-\\u20DC\\u20E1" + "\\u20E5-\\u20EF\\u2100-\\u2103\\u2105-\\u2107\\u2109-\\u2113" + "\\u2115\\u2116\\u2119-\\u211D\\u2120-\\u2122\\u2124\\u2126" + "\\u2128\\u212A-\\u212D\\u212F-\\u2131\\u2133-\\u2139\\u213B-" + "\\u2140\\u2145-\\u2149\\u2153-\\u217F\\u219A\\u219B\\u21AE" + "\\u21CD-\\u21CF\\u2204\\u2209\\u220C\\u2224\\u2226\\u222C\\u222D" + "\\u222F\\u2230\\u2241\\u2244\\u2247\\u2249\\u2260\\u2262\\u226D-" + "\\u2271\\u2274\\u2275\\u2278\\u2279\\u2280\\u2281\\u2284\\u2285" + "\\u2288\\u2289\\u22AC-\\u22AF\\u22E0-\\u22E3\\u22EA-\\u22ED" + "\\u2329\\u232A\\u2460-\\u24EA\\u2A0C\\u2A74-\\u2A76\\u2ADC" + "\\u2D6F\\u2E9F\\u2EF3\\u2F00-\\u2FD5\\u3000\\u302A-\\u302F" + "\\u3036\\u3038-\\u303A\\u304C\\u304E\\u3050\\u3052\\u3054\\u3056" + "\\u3058\\u305A\\u305C\\u305E\\u3060\\u3062\\u3065\\u3067\\u3069" + "\\u3070\\u3071\\u3073\\u3074\\u3076\\u3077\\u3079\\u307A\\u307C" + "\\u307D\\u3094\\u3099-\\u309C\\u309E\\u309F\\u30AC\\u30AE\\u30B0" + "\\u30B2\\u30B4\\u30B6\\u30B8\\u30BA\\u30BC\\u30BE\\u30C0\\u30C2" + "\\u30C5\\u30C7\\u30C9\\u30D0\\u30D1\\u30D3\\u30D4\\u30D6\\u30D7" + "\\u30D9\\u30DA\\u30DC\\u30DD\\u30F4\\u30F7-\\u30FA\\u30FE\\u30FF" + "\\u3131-\\u318E\\u3192-\\u319F\\u3200-\\u321E\\u3220-\\u3243" + "\\u3250-\\u327E\\u3280-\\u32FE\\u3300-\\u33FF\\uA806\\uAC00-" + "\\uD7A3\\uF900-\\uFA0D\\uFA10\\uFA12\\uFA15-\\uFA1E\\uFA20" + "\\uFA22\\uFA25\\uFA26\\uFA2A-\\uFA2D\\uFA30-\\uFA6A\\uFA70-" + "\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB36\\uFB38-" + "\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3" + "-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFC\\uFE10-" + "\\uFE19\\uFE20-\\uFE23\\uFE30-\\uFE44\\uFE47-\\uFE52\\uFE54-" + "\\uFE66\\uFE68-\\uFE6B\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC" + "\\uFF01-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7" + "\\uFFDA-\\uFFDC\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\U00010A0D\\U00010" + "A0F\\U00010A38-\\U00010A3A\\U00010A3F\\U0001D15E-\\U0001D169" "\\U0001D16D-\\U0001D172\\U0001D17B-\\U0001D182\\U0001D185-" "\\U0001D18B\\U0001D1AA-\\U0001D1AD\\U0001D1BB-\\U0001D1C0\\U0001" - "D400-\\U0001D454\\U0001D456-\\U0001D49C\\U0001D49E-\\U0001D49F" - "\\U0001D4A2\\U0001D4A5-\\U0001D4A6\\U0001D4A9-\\U0001D4AC\\U0001" - "D4AE-\\U0001D4B9\\U0001D4BB\\U0001D4BD-\\U0001D4C3\\U0001D4C5-" - "\\U0001D505\\U0001D507-\\U0001D50A\\U0001D50D-\\U0001D514\\U0001" - "D516-\\U0001D51C\\U0001D51E-\\U0001D539\\U0001D53B-\\U0001D53E" - "\\U0001D540-\\U0001D544\\U0001D546\\U0001D54A-\\U0001D550\\U0001" - "D552-\\U0001D6A3\\U0001D6A8-\\U0001D7C9\\U0001D7CE-\\U0001D7FF" - "\\U0002F800-\\U0002FA1D]", ""), errorCode); + "D242-\\U0001D244\\U0001D400-\\U0001D454\\U0001D456-\\U0001D49C" + "\\U0001D49E\\U0001D49F\\U0001D4A2\\U0001D4A5\\U0001D4A6\\U0001D4" + "A9-\\U0001D4AC\\U0001D4AE-\\U0001D4B9\\U0001D4BB\\U0001D4BD-" + "\\U0001D4C3\\U0001D4C5-\\U0001D505\\U0001D507-\\U0001D50A\\U0001" + "D50D-\\U0001D514\\U0001D516-\\U0001D51C\\U0001D51E-\\U0001D539" + "\\U0001D53B-\\U0001D53E\\U0001D540-\\U0001D544\\U0001D546\\U0001" + "D54A-\\U0001D550\\U0001D552-\\U0001D6A5\\U0001D6A8-\\U0001D7CB" + "\\U0001D7CE-\\U0001D7FF\\U0002F800-\\U0002FA1D]" + , ""), errorCode); skipSets[UNORM_NFKC].applyPattern(UnicodeString( "[^<->A-PR-Za-pr-z\\u00A0\\u00A8\\u00AA\\u00AF\\u00B2-\\u00B5" "\\u00B8-\\u00BA\\u00BC-\\u00BE\\u00C0-\\u00CF\\u00D1-\\u00D6" "\\u00D8-\\u00DD\\u00E0-\\u00EF\\u00F1-\\u00F6\\u00F8-\\u00FD" "\\u00FF-\\u0103\\u0106-\\u010F\\u0112-\\u0117\\u011A-\\u0121" - "\\u0124-\\u0125\\u0128-\\u012D\\u0130\\u0132-\\u0133\\u0139-" - "\\u013A\\u013D-\\u0140\\u0143-\\u0144\\u0147-\\u0149\\u014C-" - "\\u0151\\u0154-\\u0155\\u0158-\\u015D\\u0160-\\u0161\\u0164-" - "\\u0165\\u0168-\\u0171\\u0174-\\u017F\\u01A0-\\u01A1\\u01AF-" - "\\u01B0\\u01B7\\u01C4-\\u01DC\\u01DE-\\u01E1\\u01E6-\\u01EB" - "\\u01F1-\\u01F5\\u01F8-\\u01FB\\u0200-\\u021B\\u021E-\\u021F" - "\\u0226-\\u0233\\u0292\\u02B0-\\u02B8\\u02D8-\\u02DD\\u02E0-" - "\\u02E4\\u0300-\\u034E\\u0350-\\u0357\\u035D-\\u036F\\u0374" - "\\u037A\\u037E\\u0384-\\u0385\\u0387\\u0391\\u0395\\u0397\\u0399" - "\\u039F\\u03A1\\u03A5\\u03A9\\u03AC\\u03AE\\u03B1\\u03B5\\u03B7" - "\\u03B9\\u03BF\\u03C1\\u03C5\\u03C9-\\u03CB\\u03CE\\u03D0-" - "\\u03D6\\u03F0-\\u03F2\\u03F4-\\u03F5\\u03F9\\u0406\\u0410" - "\\u0413\\u0415-\\u0418\\u041A\\u041E\\u0423\\u0427\\u042B\\u042D" - "\\u0430\\u0433\\u0435-\\u0438\\u043A\\u043E\\u0443\\u0447\\u044B" - "\\u044D\\u0456\\u0474-\\u0475\\u0483-\\u0486\\u04D8-\\u04D9" - "\\u04E8-\\u04E9\\u0587\\u0591-\\u05A1\\u05A3-\\u05B9\\u05BB-" - "\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4\\u0610-\\u0615\\u0622-" - "\\u0623\\u0627\\u0648\\u064A-\\u0658\\u0670\\u0675-\\u0678" - "\\u06C1\\u06D2\\u06D5-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8" - "\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u0928\\u0930\\u0933" + "\\u0124\\u0125\\u0128-\\u012D\\u0130\\u0132\\u0133\\u0139\\u013A" + "\\u013D-\\u0140\\u0143\\u0144\\u0147-\\u0149\\u014C-\\u0151" + "\\u0154\\u0155\\u0158-\\u015D\\u0160\\u0161\\u0164\\u0165\\u0168" + "-\\u0171\\u0174-\\u017F\\u01A0\\u01A1\\u01AF\\u01B0\\u01B7" + "\\u01C4-\\u01DC\\u01DE-\\u01E1\\u01E6-\\u01EB\\u01F1-\\u01F5" + "\\u01F8-\\u01FB\\u0200-\\u021B\\u021E\\u021F\\u0226-\\u0233" + "\\u0292\\u02B0-\\u02B8\\u02D8-\\u02DD\\u02E0-\\u02E4\\u0300-" + "\\u034E\\u0350-\\u036F\\u0374\\u037A\\u037E\\u0384\\u0385\\u0387" + "\\u0391\\u0395\\u0397\\u0399\\u039F\\u03A1\\u03A5\\u03A9\\u03AC" + "\\u03AE\\u03B1\\u03B5\\u03B7\\u03B9\\u03BF\\u03C1\\u03C5\\u03C9-" + "\\u03CB\\u03CE\\u03D0-\\u03D6\\u03F0-\\u03F2\\u03F4\\u03F5" + "\\u03F9\\u0406\\u0410\\u0413\\u0415-\\u0418\\u041A\\u041E\\u0423" + "\\u0427\\u042B\\u042D\\u0430\\u0433\\u0435-\\u0438\\u043A\\u043E" + "\\u0443\\u0447\\u044B\\u044D\\u0456\\u0474\\u0475\\u0483-\\u0486" + "\\u04D8\\u04D9\\u04E8\\u04E9\\u0587\\u0591-\\u05BD\\u05BF\\u05C1" + "\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u0615\\u0622\\u0623\\u0627" + "\\u0648\\u064A-\\u065E\\u0670\\u0675-\\u0678\\u06C1\\u06D2" + "\\u06D5-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED" + "\\u0711\\u0730-\\u074A\\u07EB-\\u07F3\\u0928\\u0930\\u0933" "\\u093C\\u094D\\u0951-\\u0954\\u0958-\\u095F\\u09BC\\u09BE" - "\\u09C7\\u09CD\\u09D7\\u09DC-\\u09DD\\u09DF\\u0A33\\u0A36\\u0A3C" + "\\u09C7\\u09CD\\u09D7\\u09DC\\u09DD\\u09DF\\u0A33\\u0A36\\u0A3C" "\\u0A4D\\u0A59-\\u0A5B\\u0A5E\\u0ABC\\u0ACD\\u0B3C\\u0B3E\\u0B47" - "\\u0B4D\\u0B56-\\u0B57\\u0B5C-\\u0B5D\\u0B92\\u0BBE\\u0BC6-" - "\\u0BC7\\u0BCD\\u0BD7\\u0C46\\u0C4D\\u0C55-\\u0C56\\u0CBC\\u0CBF" - "\\u0CC2\\u0CC6\\u0CCA\\u0CCD\\u0CD5-\\u0CD6\\u0D3E\\u0D46-" - "\\u0D47\\u0D4D\\u0D57\\u0DCA\\u0DCF\\u0DD9\\u0DDC\\u0DDF\\u0E33" - "\\u0E38-\\u0E3A\\u0E48-\\u0E4B\\u0EB3\\u0EB8-\\u0EB9\\u0EC8-" - "\\u0ECB\\u0EDC-\\u0EDD\\u0F0C\\u0F18-\\u0F19\\u0F35\\u0F37" - "\\u0F39\\u0F43\\u0F4D\\u0F52\\u0F57\\u0F5C\\u0F69\\u0F71-\\u0F7D" - "\\u0F80-\\u0F84\\u0F86-\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7" - "\\u0FAC\\u0FB9\\u0FC6\\u1025\\u102E\\u1037\\u1039\\u1100-\\u1112" - "\\u1161-\\u1175\\u11A8-\\u11C2\\u1714\\u1734\\u17D2\\u17DD" - "\\u18A9\\u1939-\\u193B\\u1D2C-\\u1D2E\\u1D30-\\u1D3A\\u1D3C-" - "\\u1D4D\\u1D4F-\\u1D6A\\u1E00-\\u1E03\\u1E0A-\\u1E0F\\u1E12-" - "\\u1E1B\\u1E20-\\u1E27\\u1E2A-\\u1E41\\u1E44-\\u1E53\\u1E58-" - "\\u1E7D\\u1E80-\\u1E87\\u1E8E-\\u1E91\\u1E96-\\u1E9B\\u1EA0-" - "\\u1EF3\\u1EF6-\\u1EF9\\u1F00-\\u1F11\\u1F18-\\u1F19\\u1F20-" - "\\u1F31\\u1F38-\\u1F39\\u1F40-\\u1F41\\u1F48-\\u1F49\\u1F50-" - "\\u1F51\\u1F59\\u1F60-\\u1F71\\u1F73-\\u1F75\\u1F77\\u1F79" - "\\u1F7B-\\u1F7D\\u1F80-\\u1F81\\u1F88-\\u1F89\\u1F90-\\u1F91" - "\\u1F98-\\u1F99\\u1FA0-\\u1FA1\\u1FA8-\\u1FA9\\u1FB3\\u1FB6" - "\\u1FBB-\\u1FC1\\u1FC3\\u1FC6\\u1FC9\\u1FCB-\\u1FCF\\u1FD3" - "\\u1FDB\\u1FDD-\\u1FDF\\u1FE3\\u1FEB\\u1FED-\\u1FEF\\u1FF3" - "\\u1FF6\\u1FF9\\u1FFB-\\u1FFE\\u2000-\\u200A\\u2011\\u2017" - "\\u2024-\\u2026\\u202F\\u2033-\\u2034\\u2036-\\u2037\\u203C" - "\\u203E\\u2047-\\u2049\\u2057\\u205F\\u2070-\\u2071\\u2074-" - "\\u208E\\u20A8\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EA\\u2100-" - "\\u2103\\u2105-\\u2107\\u2109-\\u2113\\u2115-\\u2116\\u2119-" - "\\u211D\\u2120-\\u2122\\u2124\\u2126\\u2128\\u212A-\\u212D" - "\\u212F-\\u2131\\u2133-\\u2139\\u213B\\u213D-\\u2140\\u2145-" - "\\u2149\\u2153-\\u217F\\u2190\\u2192\\u2194\\u21D0\\u21D2\\u21D4" - "\\u2203\\u2208\\u220B\\u2223\\u2225\\u222C-\\u222D\\u222F-" - "\\u2230\\u223C\\u2243\\u2245\\u2248\\u224D\\u2261\\u2264-\\u2265" - "\\u2272-\\u2273\\u2276-\\u2277\\u227A-\\u227D\\u2282-\\u2283" - "\\u2286-\\u2287\\u2291-\\u2292\\u22A2\\u22A8-\\u22A9\\u22AB" - "\\u22B2-\\u22B5\\u2329-\\u232A\\u2460-\\u24EA\\u2A0C\\u2A74-" - "\\u2A76\\u2ADC\\u2E9F\\u2EF3\\u2F00-\\u2FD5\\u3000\\u302A-" - "\\u302F\\u3036\\u3038-\\u303A\\u3046\\u304B\\u304D\\u304F\\u3051" - "\\u3053\\u3055\\u3057\\u3059\\u305B\\u305D\\u305F\\u3061\\u3064" - "\\u3066\\u3068\\u306F\\u3072\\u3075\\u3078\\u307B\\u3099-\\u309D" - "\\u309F\\u30A6\\u30AB\\u30AD\\u30AF\\u30B1\\u30B3\\u30B5\\u30B7" - "\\u30B9\\u30BB\\u30BD\\u30BF\\u30C1\\u30C4\\u30C6\\u30C8\\u30CF" - "\\u30D2\\u30D5\\u30D8\\u30DB\\u30EF-\\u30F2\\u30FD\\u30FF\\u3131" - "-\\u318E\\u3192-\\u319F\\u3200-\\u321E\\u3220-\\u3243\\u3250-" - "\\u327D\\u3280-\\u32FE\\u3300-\\u33FF\\uAC00\\uAC1C\\uAC38" - "\\uAC54\\uAC70\\uAC8C\\uACA8\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34" - "\\uAD50\\uAD6C\\uAD88\\uADA4\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30" - "\\uAE4C\\uAE68\\uAE84\\uAEA0\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C" - "\\uAF48\\uAF64\\uAF80\\uAF9C\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028" - "\\uB044\\uB060\\uB07C\\uB098\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124" - "\\uB140\\uB15C\\uB178\\uB194\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220" - "\\uB23C\\uB258\\uB274\\uB290\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C" - "\\uB338\\uB354\\uB370\\uB38C\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418" - "\\uB434\\uB450\\uB46C\\uB488\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514" - "\\uB530\\uB54C\\uB568\\uB584\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610" - "\\uB62C\\uB648\\uB664\\uB680\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C" - "\\uB728\\uB744\\uB760\\uB77C\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808" - "\\uB824\\uB840\\uB85C\\uB878\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904" - "\\uB920\\uB93C\\uB958\\uB974\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00" - "\\uBA1C\\uBA38\\uBA54\\uBA70\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC" - "\\uBB18\\uBB34\\uBB50\\uBB6C\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8" - "\\uBC14\\uBC30\\uBC4C\\uBC68\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4" - "\\uBD10\\uBD2C\\uBD48\\uBD64\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0" - "\\uBE0C\\uBE28\\uBE44\\uBE60\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC" - "\\uBF08\\uBF24\\uBF40\\uBF5C\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8" - "\\uC004\\uC020\\uC03C\\uC058\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4" - "\\uC100\\uC11C\\uC138\\uC154\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0" - "\\uC1FC\\uC218\\uC234\\uC250\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC" - "\\uC2F8\\uC314\\uC330\\uC34C\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8" - "\\uC3F4\\uC410\\uC42C\\uC448\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4" - "\\uC4F0\\uC50C\\uC528\\uC544\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0" - "\\uC5EC\\uC608\\uC624\\uC640\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC" - "\\uC6E8\\uC704\\uC720\\uC73C\\uC758\\uC774\\uC790\\uC7AC\\uC7C8" - "\\uC7E4\\uC800\\uC81C\\uC838\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4" - "\\uC8E0\\uC8FC\\uC918\\uC934\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0" - "\\uC9DC\\uC9F8\\uCA14\\uCA30\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC" - "\\uCAD8\\uCAF4\\uCB10\\uCB2C\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8" - "\\uCBD4\\uCBF0\\uCC0C\\uCC28\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4" - "\\uCCD0\\uCCEC\\uCD08\\uCD24\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0" - "\\uCDCC\\uCDE8\\uCE04\\uCE20\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC" - "\\uCEC8\\uCEE4\\uCF00\\uCF1C\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8" - "\\uCFC4\\uCFE0\\uCFFC\\uD018\\uD034\\uD050\\uD06C\\uD088\\uD0A4" - "\\uD0C0\\uD0DC\\uD0F8\\uD114\\uD130\\uD14C\\uD168\\uD184\\uD1A0" - "\\uD1BC\\uD1D8\\uD1F4\\uD210\\uD22C\\uD248\\uD264\\uD280\\uD29C" - "\\uD2B8\\uD2D4\\uD2F0\\uD30C\\uD328\\uD344\\uD360\\uD37C\\uD398" - "\\uD3B4\\uD3D0\\uD3EC\\uD408\\uD424\\uD440\\uD45C\\uD478\\uD494" - "\\uD4B0\\uD4CC\\uD4E8\\uD504\\uD520\\uD53C\\uD558\\uD574\\uD590" - "\\uD5AC\\uD5C8\\uD5E4\\uD600\\uD61C\\uD638\\uD654\\uD670\\uD68C" - "\\uD6A8\\uD6C4\\uD6E0\\uD6FC\\uD718\\uD734\\uD750\\uD76C\\uD788" - "\\uF900-\\uFA0D\\uFA10\\uFA12\\uFA15-\\uFA1E\\uFA20\\uFA22" - "\\uFA25-\\uFA26\\uFA2A-\\uFA2D\\uFA30-\\uFA6A\\uFB00-\\uFB06" - "\\uFB13-\\uFB17\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-" - "\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-" - "\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFC\\uFE20-\\uFE23\\uFE30-" - "\\uFE44\\uFE47-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFE70-" - "\\uFE72\\uFE74\\uFE76-\\uFEFC\\uFF01-\\uFFBE\\uFFC2-\\uFFC7" - "\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\uFFE0-\\uFFE6" - "\\uFFE8-\\uFFEE\\U0001D15E-\\U0001D169\\U0001D16D-\\U0001D172" + "\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B92\\u0BBE\\u0BC6\\u0BC7" + "\\u0BCD\\u0BD7\\u0C46\\u0C4D\\u0C55\\u0C56\\u0CBC\\u0CBF\\u0CC2" + "\\u0CC6\\u0CCA\\u0CCD\\u0CD5\\u0CD6\\u0D3E\\u0D46\\u0D47\\u0D4D" + "\\u0D57\\u0DCA\\u0DCF\\u0DD9\\u0DDC\\u0DDF\\u0E33\\u0E38-\\u0E3A" + "\\u0E48-\\u0E4B\\u0EB3\\u0EB8\\u0EB9\\u0EC8-\\u0ECB\\u0EDC" + "\\u0EDD\\u0F0C\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F43\\u0F4D" + "\\u0F52\\u0F57\\u0F5C\\u0F69\\u0F71-\\u0F7D\\u0F80-\\u0F84" + "\\u0F86\\u0F87\\u0F93\\u0F9D\\u0FA2\\u0FA7\\u0FAC\\u0FB9\\u0FC6" + "\\u1025\\u102E\\u1037\\u1039\\u10FC\\u1100-\\u1112\\u1161-" + "\\u1175\\u11A8-\\u11C2\\u135F\\u1714\\u1734\\u17D2\\u17DD\\u18A9" + "\\u1939-\\u193B\\u1A17\\u1A18\\u1B05\\u1B07\\u1B09\\u1B0B\\u1B0D" + "\\u1B11\\u1B34\\u1B35\\u1B3A\\u1B3C\\u1B3E\\u1B3F\\u1B42\\u1B44" + "\\u1B6B-\\u1B73\\u1D2C-\\u1D2E\\u1D30-\\u1D3A\\u1D3C-\\u1D4D" + "\\u1D4F-\\u1D6A\\u1D78\\u1D9B-\\u1DCA\\u1DFE-\\u1E03\\u1E0A-" + "\\u1E0F\\u1E12-\\u1E1B\\u1E20-\\u1E27\\u1E2A-\\u1E41\\u1E44-" + "\\u1E53\\u1E58-\\u1E7D\\u1E80-\\u1E87\\u1E8E-\\u1E91\\u1E96-" + "\\u1E9B\\u1EA0-\\u1EF3\\u1EF6-\\u1EF9\\u1F00-\\u1F11\\u1F18" + "\\u1F19\\u1F20-\\u1F31\\u1F38\\u1F39\\u1F40\\u1F41\\u1F48\\u1F49" + "\\u1F50\\u1F51\\u1F59\\u1F60-\\u1F71\\u1F73-\\u1F75\\u1F77" + "\\u1F79\\u1F7B-\\u1F7D\\u1F80\\u1F81\\u1F88\\u1F89\\u1F90\\u1F91" + "\\u1F98\\u1F99\\u1FA0\\u1FA1\\u1FA8\\u1FA9\\u1FB3\\u1FB6\\u1FBB-" + "\\u1FC1\\u1FC3\\u1FC6\\u1FC9\\u1FCB-\\u1FCF\\u1FD3\\u1FDB\\u1FDD" + "-\\u1FDF\\u1FE3\\u1FEB\\u1FED-\\u1FEF\\u1FF3\\u1FF6\\u1FF9" + "\\u1FFB-\\u1FFE\\u2000-\\u200A\\u2011\\u2017\\u2024-\\u2026" + "\\u202F\\u2033\\u2034\\u2036\\u2037\\u203C\\u203E\\u2047-\\u2049" + "\\u2057\\u205F\\u2070\\u2071\\u2074-\\u208E\\u2090-\\u2094" + "\\u20A8\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EF\\u2100-\\u2103" + "\\u2105-\\u2107\\u2109-\\u2113\\u2115\\u2116\\u2119-\\u211D" + "\\u2120-\\u2122\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-" + "\\u2131\\u2133-\\u2139\\u213B-\\u2140\\u2145-\\u2149\\u2153-" + "\\u217F\\u2190\\u2192\\u2194\\u21D0\\u21D2\\u21D4\\u2203\\u2208" + "\\u220B\\u2223\\u2225\\u222C\\u222D\\u222F\\u2230\\u223C\\u2243" + "\\u2245\\u2248\\u224D\\u2261\\u2264\\u2265\\u2272\\u2273\\u2276" + "\\u2277\\u227A-\\u227D\\u2282\\u2283\\u2286\\u2287\\u2291\\u2292" + "\\u22A2\\u22A8\\u22A9\\u22AB\\u22B2-\\u22B5\\u2329\\u232A\\u2460" + "-\\u24EA\\u2A0C\\u2A74-\\u2A76\\u2ADC\\u2D6F\\u2E9F\\u2EF3" + "\\u2F00-\\u2FD5\\u3000\\u302A-\\u302F\\u3036\\u3038-\\u303A" + "\\u3046\\u304B\\u304D\\u304F\\u3051\\u3053\\u3055\\u3057\\u3059" + "\\u305B\\u305D\\u305F\\u3061\\u3064\\u3066\\u3068\\u306F\\u3072" + "\\u3075\\u3078\\u307B\\u3099-\\u309D\\u309F\\u30A6\\u30AB\\u30AD" + "\\u30AF\\u30B1\\u30B3\\u30B5\\u30B7\\u30B9\\u30BB\\u30BD\\u30BF" + "\\u30C1\\u30C4\\u30C6\\u30C8\\u30CF\\u30D2\\u30D5\\u30D8\\u30DB" + "\\u30EF-\\u30F2\\u30FD\\u30FF\\u3131-\\u318E\\u3192-\\u319F" + "\\u3200-\\u321E\\u3220-\\u3243\\u3250-\\u327E\\u3280-\\u32FE" + "\\u3300-\\u33FF\\uA806\\uAC00\\uAC1C\\uAC38\\uAC54\\uAC70\\uAC8C" + "\\uACA8\\uACC4\\uACE0\\uACFC\\uAD18\\uAD34\\uAD50\\uAD6C\\uAD88" + "\\uADA4\\uADC0\\uADDC\\uADF8\\uAE14\\uAE30\\uAE4C\\uAE68\\uAE84" + "\\uAEA0\\uAEBC\\uAED8\\uAEF4\\uAF10\\uAF2C\\uAF48\\uAF64\\uAF80" + "\\uAF9C\\uAFB8\\uAFD4\\uAFF0\\uB00C\\uB028\\uB044\\uB060\\uB07C" + "\\uB098\\uB0B4\\uB0D0\\uB0EC\\uB108\\uB124\\uB140\\uB15C\\uB178" + "\\uB194\\uB1B0\\uB1CC\\uB1E8\\uB204\\uB220\\uB23C\\uB258\\uB274" + "\\uB290\\uB2AC\\uB2C8\\uB2E4\\uB300\\uB31C\\uB338\\uB354\\uB370" + "\\uB38C\\uB3A8\\uB3C4\\uB3E0\\uB3FC\\uB418\\uB434\\uB450\\uB46C" + "\\uB488\\uB4A4\\uB4C0\\uB4DC\\uB4F8\\uB514\\uB530\\uB54C\\uB568" + "\\uB584\\uB5A0\\uB5BC\\uB5D8\\uB5F4\\uB610\\uB62C\\uB648\\uB664" + "\\uB680\\uB69C\\uB6B8\\uB6D4\\uB6F0\\uB70C\\uB728\\uB744\\uB760" + "\\uB77C\\uB798\\uB7B4\\uB7D0\\uB7EC\\uB808\\uB824\\uB840\\uB85C" + "\\uB878\\uB894\\uB8B0\\uB8CC\\uB8E8\\uB904\\uB920\\uB93C\\uB958" + "\\uB974\\uB990\\uB9AC\\uB9C8\\uB9E4\\uBA00\\uBA1C\\uBA38\\uBA54" + "\\uBA70\\uBA8C\\uBAA8\\uBAC4\\uBAE0\\uBAFC\\uBB18\\uBB34\\uBB50" + "\\uBB6C\\uBB88\\uBBA4\\uBBC0\\uBBDC\\uBBF8\\uBC14\\uBC30\\uBC4C" + "\\uBC68\\uBC84\\uBCA0\\uBCBC\\uBCD8\\uBCF4\\uBD10\\uBD2C\\uBD48" + "\\uBD64\\uBD80\\uBD9C\\uBDB8\\uBDD4\\uBDF0\\uBE0C\\uBE28\\uBE44" + "\\uBE60\\uBE7C\\uBE98\\uBEB4\\uBED0\\uBEEC\\uBF08\\uBF24\\uBF40" + "\\uBF5C\\uBF78\\uBF94\\uBFB0\\uBFCC\\uBFE8\\uC004\\uC020\\uC03C" + "\\uC058\\uC074\\uC090\\uC0AC\\uC0C8\\uC0E4\\uC100\\uC11C\\uC138" + "\\uC154\\uC170\\uC18C\\uC1A8\\uC1C4\\uC1E0\\uC1FC\\uC218\\uC234" + "\\uC250\\uC26C\\uC288\\uC2A4\\uC2C0\\uC2DC\\uC2F8\\uC314\\uC330" + "\\uC34C\\uC368\\uC384\\uC3A0\\uC3BC\\uC3D8\\uC3F4\\uC410\\uC42C" + "\\uC448\\uC464\\uC480\\uC49C\\uC4B8\\uC4D4\\uC4F0\\uC50C\\uC528" + "\\uC544\\uC560\\uC57C\\uC598\\uC5B4\\uC5D0\\uC5EC\\uC608\\uC624" + "\\uC640\\uC65C\\uC678\\uC694\\uC6B0\\uC6CC\\uC6E8\\uC704\\uC720" + "\\uC73C\\uC758\\uC774\\uC790\\uC7AC\\uC7C8\\uC7E4\\uC800\\uC81C" + "\\uC838\\uC854\\uC870\\uC88C\\uC8A8\\uC8C4\\uC8E0\\uC8FC\\uC918" + "\\uC934\\uC950\\uC96C\\uC988\\uC9A4\\uC9C0\\uC9DC\\uC9F8\\uCA14" + "\\uCA30\\uCA4C\\uCA68\\uCA84\\uCAA0\\uCABC\\uCAD8\\uCAF4\\uCB10" + "\\uCB2C\\uCB48\\uCB64\\uCB80\\uCB9C\\uCBB8\\uCBD4\\uCBF0\\uCC0C" + "\\uCC28\\uCC44\\uCC60\\uCC7C\\uCC98\\uCCB4\\uCCD0\\uCCEC\\uCD08" + "\\uCD24\\uCD40\\uCD5C\\uCD78\\uCD94\\uCDB0\\uCDCC\\uCDE8\\uCE04" + "\\uCE20\\uCE3C\\uCE58\\uCE74\\uCE90\\uCEAC\\uCEC8\\uCEE4\\uCF00" + "\\uCF1C\\uCF38\\uCF54\\uCF70\\uCF8C\\uCFA8\\uCFC4\\uCFE0\\uCFFC" + "\\uD018\\uD034\\uD050\\uD06C\\uD088\\uD0A4\\uD0C0\\uD0DC\\uD0F8" + "\\uD114\\uD130\\uD14C\\uD168\\uD184\\uD1A0\\uD1BC\\uD1D8\\uD1F4" + "\\uD210\\uD22C\\uD248\\uD264\\uD280\\uD29C\\uD2B8\\uD2D4\\uD2F0" + "\\uD30C\\uD328\\uD344\\uD360\\uD37C\\uD398\\uD3B4\\uD3D0\\uD3EC" + "\\uD408\\uD424\\uD440\\uD45C\\uD478\\uD494\\uD4B0\\uD4CC\\uD4E8" + "\\uD504\\uD520\\uD53C\\uD558\\uD574\\uD590\\uD5AC\\uD5C8\\uD5E4" + "\\uD600\\uD61C\\uD638\\uD654\\uD670\\uD68C\\uD6A8\\uD6C4\\uD6E0" + "\\uD6FC\\uD718\\uD734\\uD750\\uD76C\\uD788\\uF900-\\uFA0D\\uFA10" + "\\uFA12\\uFA15-\\uFA1E\\uFA20\\uFA22\\uFA25\\uFA26\\uFA2A-" + "\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-" + "\\uFB17\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41" + "\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F" + "\\uFD92-\\uFDC7\\uFDF0-\\uFDFC\\uFE10-\\uFE19\\uFE20-\\uFE23" + "\\uFE30-\\uFE44\\uFE47-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B" + "\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC\\uFF01-\\uFFBE\\uFFC2-" + "\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\uFFE0-" + "\\uFFE6\\uFFE8-\\uFFEE\\U00010A0D\\U00010A0F\\U00010A38-\\U00010" + "A3A\\U00010A3F\\U0001D15E-\\U0001D169\\U0001D16D-\\U0001D172" "\\U0001D17B-\\U0001D182\\U0001D185-\\U0001D18B\\U0001D1AA-" - "\\U0001D1AD\\U0001D1BB-\\U0001D1C0\\U0001D400-\\U0001D454\\U0001" - "D456-\\U0001D49C\\U0001D49E-\\U0001D49F\\U0001D4A2\\U0001D4A5-" - "\\U0001D4A6\\U0001D4A9-\\U0001D4AC\\U0001D4AE-\\U0001D4B9\\U0001" - "D4BB\\U0001D4BD-\\U0001D4C3\\U0001D4C5-\\U0001D505\\U0001D507-" - "\\U0001D50A\\U0001D50D-\\U0001D514\\U0001D516-\\U0001D51C\\U0001" - "D51E-\\U0001D539\\U0001D53B-\\U0001D53E\\U0001D540-\\U0001D544" - "\\U0001D546\\U0001D54A-\\U0001D550\\U0001D552-\\U0001D6A3\\U0001" - "D6A8-\\U0001D7C9\\U0001D7CE-\\U0001D7FF\\U0002F800-\\U0002FA1D]", ""), errorCode); + "\\U0001D1AD\\U0001D1BB-\\U0001D1C0\\U0001D242-\\U0001D244\\U0001" + "D400-\\U0001D454\\U0001D456-\\U0001D49C\\U0001D49E\\U0001D49F" + "\\U0001D4A2\\U0001D4A5\\U0001D4A6\\U0001D4A9-\\U0001D4AC\\U0001D" + "4AE-\\U0001D4B9\\U0001D4BB\\U0001D4BD-\\U0001D4C3\\U0001D4C5-" + "\\U0001D505\\U0001D507-\\U0001D50A\\U0001D50D-\\U0001D514\\U0001" + "D516-\\U0001D51C\\U0001D51E-\\U0001D539\\U0001D53B-\\U0001D53E" + "\\U0001D540-\\U0001D544\\U0001D546\\U0001D54A-\\U0001D550\\U0001" + "D552-\\U0001D6A5\\U0001D6A8-\\U0001D7CB\\U0001D7CE-\\U0001D7FF" + "\\U0002F800-\\U0002FA1D]" + , ""), errorCode); } U_CDECL_BEGIN @@ -1695,6 +1709,7 @@ U_CDECL_END void BasicNormalizerTest::TestSkippable() { UnicodeSet starts, diff, skipSets[UNORM_MODE_COUNT], expectSets[UNORM_MODE_COUNT]; + UnicodeSet *startsPtr = &starts; UnicodeString s, pattern; UChar32 start, limit, rangeStart, rangeEnd; int32_t i, range, count; @@ -1704,10 +1719,11 @@ BasicNormalizerTest::TestSkippable() { /* build NF*Skippable sets from runtime data */ status=U_ZERO_ERROR; USetAdder sa = { - (USet *)&starts, + (USet *)startsPtr, _set_add, _set_addRange, - _set_addString + _set_addString, + NULL // don't need remove() }; unorm_addPropertyStarts(&sa, &status); if(U_FAILURE(status)) { @@ -1759,7 +1775,9 @@ BasicNormalizerTest::TestSkippable() { for(i=UNORM_NONE; i<UNORM_MODE_COUNT; ++i) { if(skipSets[i]!=expectSets[i]) { errln("error: TestSkippable skipSets[%d]!=expectedSets[%d]\n" - "may need to update hardcoded UnicodeSet patterns in tstnorm.cpp/initExpectedSkippables()\n", + "may need to update hardcoded UnicodeSet patterns in\n" + "tstnorm.cpp/initExpectedSkippables(),\n" + "see ICU4J - unicodetools.com.ibm.text.UCD.NFSkippable\n", i, i); s=UNICODE_STRING_SIMPLE("skip-expect="); diff --git a/icuSources/test/intltest/tstnrapi.cpp b/icuSources/test/intltest/tstnrapi.cpp index 65a0ed2d..6499fefe 100644 --- a/icuSources/test/intltest/tstnrapi.cpp +++ b/icuSources/test/intltest/tstnrapi.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -10,6 +10,7 @@ #include "unicode/uniset.h" #include "unicode/usetiter.h" #include "unicode/schriter.h" +#include "unormimp.h" #include "tstnorm.h" #if !UCONFIG_NO_NORMALIZATION @@ -162,6 +163,25 @@ BasicNormalizerTest::TestNormalizerAPI() { if(s.charAt(1)!=0xe4) { errln("error in Normalizer::decompose(self)"); } + + // test internal normalization exclusion options + // s contains a compatibility CJK character and a Hangul syllable + s=UnicodeString("a\\uFACE\\uD7A3b", -1, US_INV).unescape(); + status=U_ZERO_ERROR; + Normalizer::decompose(s, FALSE, UNORM_NX_HANGUL, out, status); + if(U_FAILURE(status) || out!=UNICODE_STRING_SIMPLE("a\\u9F9C\\uD7A3b").unescape()) { + errln("Normalizer::decompose(UNORM_NX_HANGUL) failed - %s", u_errorName(status)); + } + status=U_ZERO_ERROR; + Normalizer::decompose(s, FALSE, UNORM_NX_CJK_COMPAT, out, status); + if(U_FAILURE(status) || out!=UNICODE_STRING_SIMPLE("a\\uFACE\\u1112\\u1175\\u11c2b").unescape()) { + errln("Normalizer::decompose(UNORM_NX_CJK_COMPAT) failed - %s", u_errorName(status)); + } + status=U_ZERO_ERROR; + Normalizer::decompose(s, FALSE, UNORM_NX_CJK_COMPAT|UNORM_NX_HANGUL, out, status); + if(U_FAILURE(status) || out!=UNICODE_STRING_SIMPLE("a\\uFACE\\uD7A3b").unescape()) { + errln("Normalizer::decompose(UNORM_NX_CJK_COMPAT|UNORM_NX_HANGUL) failed - %s", u_errorName(status)); + } } #endif diff --git a/icuSources/test/intltest/tzbdtest.cpp b/icuSources/test/intltest/tzbdtest.cpp index 66e0f24a..88e0fab9 100644 --- a/icuSources/test/intltest/tzbdtest.cpp +++ b/icuSources/test/intltest/tzbdtest.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -193,13 +193,19 @@ TimeZoneBoundaryTest::verifyDST(UDate d, TimeZone* time_zone, UBool expUseDaylig logln("-- Verifying time " + dateToString(d) + " in zone " + time_zone->getID(str)); if (time_zone->inDaylightTime(d, status) == expInDaylightTime) logln(UnicodeString("PASS: inDaylightTime = ") + (time_zone->inDaylightTime(d, status)?"true":"false")); - else errln(UnicodeString("FAIL: inDaylightTime = ") + (time_zone->inDaylightTime(d, status)?"true":"false")); - if (failure(status, "TimeZone::inDaylightTime")) return; + else + errln(UnicodeString("FAIL: inDaylightTime = ") + (time_zone->inDaylightTime(d, status)?"true":"false")); + if (failure(status, "TimeZone::inDaylightTime")) + return; if (time_zone->useDaylightTime() == expUseDaylightTime) logln(UnicodeString("PASS: useDaylightTime = ") + (time_zone->useDaylightTime()?"true":"false")); - else errln(UnicodeString("FAIL: useDaylightTime = ") + (time_zone->useDaylightTime()?"true":"false")); - if (time_zone->getRawOffset() == expZoneOffset) logln(UnicodeString("PASS: getRawOffset() = ") + (expZoneOffset / ONE_HOUR)); - else errln(UnicodeString("FAIL: getRawOffset() = ") + (time_zone->getRawOffset() / ONE_HOUR) + "; expected " + (expZoneOffset / ONE_HOUR)); + else + errln(UnicodeString("FAIL: useDaylightTime = ") + (time_zone->useDaylightTime()?"true":"false")); + if (time_zone->getRawOffset() == expZoneOffset) + logln(UnicodeString("PASS: getRawOffset() = ") + (expZoneOffset / ONE_HOUR)); + else + errln(UnicodeString("FAIL: getRawOffset() = ") + (time_zone->getRawOffset() / ONE_HOUR) + "; expected " + (expZoneOffset / ONE_HOUR)); + GregorianCalendar *gc = new GregorianCalendar(time_zone->clone(), status); gc->setTime(d, status); if (failure(status, "GregorianCalendar::setTime")) return; @@ -215,7 +221,52 @@ TimeZoneBoundaryTest::verifyDST(UDate d, TimeZone* time_zone, UBool expUseDaylig } // ------------------------------------- - +/** + * Check that the given year/month/dom/hour maps to and from the + * given epochHours. This verifies the functioning of the + * calendar and time zone in conjunction with one another, + * including the calendar time->fields and fields->time and + * the time zone getOffset method. + * + * @param epochHours hours after Jan 1 1970 0:00 GMT. + */ +void TimeZoneBoundaryTest::verifyMapping(Calendar& cal, int year, int month, int dom, int hour, + double epochHours) { + double H = 3600000.0; + UErrorCode status = U_ZERO_ERROR; + cal.clear(); + cal.set(year, month, dom, hour, 0, 0); + UDate e = cal.getTime(status)/ H; + UDate ed = (epochHours * H); + if (e == epochHours) { + logln(UnicodeString("Ok: ") + year + "/" + (month+1) + "/" + dom + " " + hour + ":00 => " + + e + " (" + ed + ")"); + } else { + errln(UnicodeString("FAIL: ") + year + "/" + (month+1) + "/" + dom + " " + hour + ":00 => " + + e + " (" + (e * H) + ")" + + ", expected " + epochHours + " (" + ed + ")"); + } + cal.setTime(ed, status); + if (cal.get(UCAL_YEAR, status) == year && + cal.get(UCAL_MONTH, status) == month && + cal.get(UCAL_DATE, status) == dom && + cal.get(UCAL_MILLISECONDS_IN_DAY, status) == hour * 3600000) { + logln(UnicodeString("Ok: ") + epochHours + " (" + ed + ") => " + + cal.get(UCAL_YEAR, status) + "/" + + (cal.get(UCAL_MONTH, status)+1) + "/" + + cal.get(UCAL_DATE, status) + " " + + cal.get(UCAL_MILLISECOND, status)/H); + } else { + errln(UnicodeString("FAIL: ") + epochHours + " (" + ed + ") => " + + cal.get(UCAL_YEAR, status) + "/" + + (cal.get(UCAL_MONTH, status)+1) + "/" + + cal.get(UCAL_DATE, status) + " " + + cal.get(UCAL_MILLISECOND, status)/H + + ", expected " + year + "/" + (month+1) + "/" + dom + + " " + hour); + } +} + /** * Test the behavior of SimpleTimeZone at the transition into and out of DST. * Use a binary search to find boundaries. @@ -223,6 +274,48 @@ TimeZoneBoundaryTest::verifyDST(UDate d, TimeZone* time_zone, UBool expUseDaylig void TimeZoneBoundaryTest::TestBoundaries() { + UErrorCode status = U_ZERO_ERROR; + TimeZone* pst = TimeZone::createTimeZone("PST"); + Calendar* tempcal = Calendar::createInstance(pst, status); + if(U_SUCCESS(status)){ + verifyMapping(*tempcal, 1997, Calendar::APRIL, 3, 0, 238904.0); + verifyMapping(*tempcal, 1997, Calendar::APRIL, 4, 0, 238928.0); + verifyMapping(*tempcal, 1997, Calendar::APRIL, 5, 0, 238952.0); + verifyMapping(*tempcal, 1997, Calendar::APRIL, 5, 23, 238975.0); + verifyMapping(*tempcal, 1997, Calendar::APRIL, 6, 0, 238976.0); + verifyMapping(*tempcal, 1997, Calendar::APRIL, 6, 1, 238977.0); + verifyMapping(*tempcal, 1997, Calendar::APRIL, 6, 3, 238978.0); + }else{ + errln("Could not create calendar. Error: %s", u_errorName(status)); + } + TimeZone* utc = TimeZone::createTimeZone("UTC"); + Calendar* utccal = Calendar::createInstance(utc, status); + if(U_SUCCESS(status)){ + verifyMapping(*utccal, 1997, Calendar::APRIL, 6, 0, 238968.0); + }else{ + errln("Could not create calendar. Error: %s", u_errorName(status)); + } + TimeZone* save = TimeZone::createDefault(); + TimeZone::setDefault(*pst); + + // DST changeover for PST is 4/6/1997 at 2 hours past midnight + // at 238978.0 epoch hours. + tempcal->clear(); + tempcal->set(1997, Calendar::APRIL, 6); + UDate d = tempcal->getTime(status); + + // i is minutes past midnight standard time + for (int i=-120; i<=180; i+=60) + { + UBool inDST = (i >= 120); + tempcal->setTime(d + i*60*1000, status); + verifyDST(tempcal->getTime(status),pst, TRUE, inDST, -8*ONE_HOUR,inDST ? -7*ONE_HOUR : -8*ONE_HOUR); + } + TimeZone::setDefault(*save); + delete save; + delete utccal; + delete tempcal; + #if 1 { logln("--- Test a ---"); @@ -292,7 +385,7 @@ TimeZoneBoundaryTest::testUsingBinarySearch(SimpleTimeZone* tz, UDate d, UDate e UBool startsInDST = tz->inDaylightTime(d, status); if (failure(status, "SimpleTimeZone::inDaylightTime")) return; if (tz->inDaylightTime(max, status) == startsInDST) { - logln("Error: inDaylightTime(" + dateToString(max) + ") != " + ((!startsInDST)?"true":"false")); + errln("Error: inDaylightTime(" + dateToString(max) + ") != " + ((!startsInDST)?"true":"false")); } if (failure(status, "SimpleTimeZone::inDaylightTime")) return; while ((max - min) > INTERVAL) { diff --git a/icuSources/test/intltest/tzbdtest.h b/icuSources/test/intltest/tzbdtest.h index f58beb62..ecc867c9 100644 --- a/icuSources/test/intltest/tzbdtest.h +++ b/icuSources/test/intltest/tzbdtest.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2001, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -79,7 +79,8 @@ public: // package * Use a stepwise march to find boundaries. */ virtual void TestStepwise(void); - + void verifyMapping(Calendar& cal, int year, int month, int dom, int hour, + double epochHours) ; private: const UDate ONE_SECOND; const UDate ONE_MINUTE; diff --git a/icuSources/test/intltest/tzregts.cpp b/icuSources/test/intltest/tzregts.cpp index b1394787..5ce419cf 100644 --- a/icuSources/test/intltest/tzregts.cpp +++ b/icuSources/test/intltest/tzregts.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -18,7 +18,8 @@ // ***************************************************************************** // class TimeZoneRegressionTest // ***************************************************************************** - +/* length of an array */ +#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break void @@ -44,7 +45,8 @@ TimeZoneRegressionTest::runIndexedTest( int32_t index, UBool exec, const char* & CASE(14, TestJ186); CASE(15, TestJ449); CASE(16, TestJDK12API); - + CASE(17, Test4176686); + CASE(18, Test4184229); default: name = ""; break; } } @@ -221,25 +223,36 @@ void TimeZoneRegressionTest:: Test4084933() { * The following was added just for consistency. It shows that going *to* Daylight * Savings Time (PDT) does work at 2am. */ - int32_t offset5 = tz->getOffset(1, 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (2*60*60*1000), status); int32_t offset6 = tz->getOffset(1, 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (2*60*60*1000)-1, status); - + int32_t offset5a = tz->getOffset(1, + 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (3*60*60*1000), status); + int32_t offset6a = tz->getOffset(1, + 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (3*60*60*1000)-1, status); int32_t offset7 = tz->getOffset(1, 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (1*60*60*1000), status); int32_t offset8 = tz->getOffset(1, 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (1*60*60*1000)-1, status); - int32_t SToffset = (int32_t)(-8 * 60*60*1000L); int32_t DToffset = (int32_t)(-7 * 60*60*1000L); - if (offset1 != SToffset || offset2 != SToffset || - offset3 != SToffset || offset4 != DToffset || - offset5 != DToffset || offset6 != SToffset || - offset7 != SToffset || offset8 != SToffset - || U_FAILURE(status)) - errln("Fail: TimeZone misbehaving"); + +#define ERR_IF_FAIL(x) if(x) { errln("FAIL: TimeZone misbehaving - %s", #x); } + + ERR_IF_FAIL(U_FAILURE(status)) + ERR_IF_FAIL(offset1 != SToffset) + ERR_IF_FAIL(offset2 != SToffset) + ERR_IF_FAIL(offset3 != SToffset) + ERR_IF_FAIL(offset4 != DToffset) + ERR_IF_FAIL(offset5 != DToffset) + ERR_IF_FAIL(offset6 != SToffset) + ERR_IF_FAIL(offset5a != DToffset) + ERR_IF_FAIL(offset6a != DToffset) + ERR_IF_FAIL(offset7 != SToffset) + ERR_IF_FAIL(offset8 != SToffset) + +#undef ERR_IF_FAIL delete tz; } @@ -871,16 +884,16 @@ TimeZoneRegressionTest::Test4162593() // Must construct the Date object AFTER setting the default zone int32_t *p = (int32_t*)DATA_INT[j]; UDate d = CalendarRegressionTest::makeDate(p[0], p[1], p[2], p[3], p[4]); - UBool transitionExpected = DATA_BOOL[j]; + UBool transitionExpected = DATA_BOOL[j]; UnicodeString temp; logln(tz->getID(temp) + ":"); for (int32_t i = 0; i < 4; ++i) { FieldPosition pos(0); zone[i].remove(); - zone[i] = fmt->format(d, zone[i], pos); + zone[i] = fmt->format(d+ i*ONE_HOUR, zone[i], pos); logln(UnicodeString("") + i + ": " + d + " / " + zone[i]); - d += (double) ONE_HOUR; + //d += (double) ONE_HOUR; } if(zone[0] == zone[1] && (zone[1] == zone[2]) != transitionExpected && @@ -896,6 +909,74 @@ TimeZoneRegressionTest::Test4162593() delete DATA_TZ[0]; } + /** + * getDisplayName doesn't work with unusual savings/offsets. + */ +void TimeZoneRegressionTest::Test4176686() { + // Construct a zone that does not observe DST but + // that does have a DST savings (which should be ignored). + UErrorCode status = U_ZERO_ERROR; + int32_t offset = 90 * 60000; // 1:30 + SimpleTimeZone* z1 = new SimpleTimeZone(offset, "_std_zone_"); + z1->setDSTSavings(45 * 60000, status); // 0:45 + + // Construct a zone that observes DST for the first 6 months. + SimpleTimeZone* z2 = new SimpleTimeZone(offset, "_dst_zone_"); + z2->setDSTSavings(45 * 60000, status); // 0:45 + z2->setStartRule(UCAL_JANUARY, 1, 0, status); + z2->setEndRule(UCAL_JULY, 1, 0, status); + + // Also check DateFormat + DateFormat* fmt1 = new SimpleDateFormat(UnicodeString("z"), status); + if(!assertSuccess("trying to construct", status))return; + fmt1->setTimeZone(*z1); // Format uses standard zone + DateFormat* fmt2 = new SimpleDateFormat(UnicodeString("z"), status); + if(!assertSuccess("trying to construct", status))return; + fmt2->setTimeZone(*z2); // Format uses DST zone + Calendar* tempcal = Calendar::createInstance(status); + tempcal->clear(); + tempcal->set(1970, UCAL_FEBRUARY, 1); + UDate dst = tempcal->getTime(status); // Time in DST + tempcal->set(1970, UCAL_AUGUST, 1); + UDate std = tempcal->getTime(status); // Time in standard + + // Description, Result, Expected Result + UnicodeString a,b,c,d,e,f,g,h,i,j,k,l; + UnicodeString DATA[] = { + "z1->getDisplayName(false, SHORT)/std zone", + z1->getDisplayName(FALSE, TimeZone::SHORT, a), "GMT+01:30", + "z1->getDisplayName(false, LONG)/std zone", + z1->getDisplayName(FALSE, TimeZone::LONG, b), "GMT+01:30", + "z1->getDisplayName(true, SHORT)/std zone", + z1->getDisplayName(TRUE, TimeZone::SHORT, c), "GMT+01:30", + "z1->getDisplayName(true, LONG)/std zone", + z1->getDisplayName(TRUE, TimeZone::LONG, d ), "GMT+01:30", + "z2->getDisplayName(false, SHORT)/dst zone", + z2->getDisplayName(FALSE, TimeZone::SHORT, e), "GMT+01:30", + "z2->getDisplayName(false, LONG)/dst zone", + z2->getDisplayName(FALSE, TimeZone::LONG, f ), "GMT+01:30", + "z2->getDisplayName(true, SHORT)/dst zone", + z2->getDisplayName(TRUE, TimeZone::SHORT, g), "GMT+02:15", + "z2->getDisplayName(true, LONG)/dst zone", + z2->getDisplayName(TRUE, TimeZone::LONG, h ), "GMT+02:15", + "DateFormat.format(std)/std zone", fmt1->format(std, i), "GMT+01:30", + "DateFormat.format(dst)/std zone", fmt1->format(dst, j), "GMT+01:30", + "DateFormat.format(std)/dst zone", fmt2->format(std, k), "GMT+01:30", + "DateFormat.format(dst)/dst zone", fmt2->format(dst, l), "GMT+02:15", + }; + + for (int32_t idx=0; idx<(int32_t)ARRAY_LENGTH(DATA); idx+=3) { + if (DATA[idx+1]!=(DATA[idx+2])) { + errln("FAIL: " + DATA[idx] + " -> " + DATA[idx+1] + ", exp " + DATA[idx+2]); + } + } + delete z1; + delete z2; + delete fmt1; + delete fmt2; + delete tempcal; +} + /** * Make sure setStartRule and setEndRule set the DST savings to nonzero * if it was zero. @@ -1034,7 +1115,7 @@ TimeZoneRegressionTest::TestJDK12API() // verify error checking pst->getOffset(1, - 1997, (UCalendarDateFields)-1, 26, UCAL_SUNDAY, (2*60*60*1000), status); + 1997, UCAL_FIELD_COUNT+1, 26, UCAL_SUNDAY, (2*60*60*1000), status); if(U_SUCCESS(status)) errln("FAILURE: getOffset() succeeded with -1 for month"); @@ -1050,5 +1131,76 @@ TimeZoneRegressionTest::TestJDK12API() delete pst; delete cst; } +/** + * SimpleTimeZone allows invalid DOM values. + */ +void TimeZoneRegressionTest::Test4184229() { + SimpleTimeZone* zone = NULL; + UErrorCode status = U_ZERO_ERROR; + zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 startDay"); + }else{ + logln("(a) " + UnicodeString( u_errorName(status))); + } + status = U_ZERO_ERROR; + delete zone; + + zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 endDay"); + }else{ + logln("(b) " + UnicodeString(u_errorName(status))); + } + status = U_ZERO_ERROR; + delete zone; + + zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 1000, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 startDay+savings"); + }else{ + logln("(c) " + UnicodeString(u_errorName(status))); + } + status = U_ZERO_ERROR; + delete zone; + zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, 1000, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 endDay+ savings"); + }else{ + logln("(d) " + UnicodeString(u_errorName(status))); + } + status = U_ZERO_ERROR; + delete zone; + // Make a valid constructor call for subsequent tests. + zone = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 0, 1, 0, 0, status); + + zone->setStartRule(0, -1, 0, 0, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 setStartRule +savings"); + } else{ + logln("(e) " + UnicodeString(u_errorName(status))); + } + zone->setStartRule(0, -1, 0, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 setStartRule"); + } else{ + logln("(f) " + UnicodeString(u_errorName(status))); + } + + zone->setEndRule(0, -1, 0, 0, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 setEndRule+savings"); + } else{ + logln("(g) " + UnicodeString(u_errorName(status))); + } + + zone->setEndRule(0, -1, 0, status); + if(U_SUCCESS(status)){ + errln("Failed. No exception has been thrown for DOM -1 setEndRule"); + } else{ + logln("(h) " + UnicodeString(u_errorName(status))); + } + delete zone; +} #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/test/intltest/tzregts.h b/icuSources/test/intltest/tzregts.h index 5fefadb7..6b5500c9 100644 --- a/icuSources/test/intltest/tzregts.h +++ b/icuSources/test/intltest/tzregts.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1998-2001, International Business Machines Corporation and + * Copyright (c) 1998-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -41,10 +41,11 @@ public: void Test4154650(void); void Test4154525(void); void Test4162593(void); + void Test4176686(void); void TestJ186(void); void TestJ449(void); void TestJDK12API(void); - + void Test4184229(void); UBool checkCalendar314(GregorianCalendar *testCal, TimeZone *testTZ); diff --git a/icuSources/test/intltest/tztest.cpp b/icuSources/test/intltest/tztest.cpp index 633da043..0ad49421 100644 --- a/icuSources/test/intltest/tztest.cpp +++ b/icuSources/test/intltest/tztest.cpp @@ -1,6 +1,6 @@ /*********************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation + * Copyright (c) 1997-2006, International Business Machines Corporation * and others. All Rights Reserved. ***********************************************************************/ @@ -47,6 +47,8 @@ void TimeZoneTest::runIndexedTest( int32_t index, UBool exec, const char* &name, CASE(10,TestCountries); CASE(11,TestHistorical); CASE(12,TestEquivalentIDs); + CASE(13, TestAliasedNames); + CASE(14, TestFractionalDST); default: name = ""; break; } } @@ -579,7 +581,7 @@ void TimeZoneTest::TestShortZoneIDs() {"PNT", -420, FALSE}, {"MST", -420, FALSE}, // updated Aug 2003 aliu {"CST", -360, TRUE}, - {"IET", -300, FALSE}, + {"IET", -300, TRUE}, // updated Jan 2006 srl {"EST", -300, FALSE}, // updated Aug 2003 aliu {"PRT", -240, FALSE}, {"CNT", -210, TRUE}, @@ -775,7 +777,7 @@ void TimeZoneTest::TestCustomParse() kData[] = { // ID Expected offset in minutes - //"GMT", kUnparseable, Isn't custom. Can't test it here. [returns normal GMT] + //{"GMT", kUnparseable}, //Isn't custom. Can't test it here. [returns normal GMT] {"GMT-YOUR.AD.HERE", kUnparseable}, // {"GMT0", kUnparseable}, // ICU 2.8: An Olson zone ID // {"GMT+0", (0)}, // ICU 2.8: An Olson zone ID @@ -799,6 +801,17 @@ void TimeZoneTest::TestCustomParse() { UnicodeString id(kData[i].customId); int32_t exp = kData[i].expectedOffset; +/* + { // for no data test Jitterbug 4354 + UErrorCode success = U_ZERO_ERROR; + NumberFormat* numberFormat = NumberFormat::createInstance(success); + if (U_FAILURE(success)) { + dataerrln(" NumberFormat::createInstance() error"); + return; + } + delete numberFormat; + } + */ TimeZone *zone = TimeZone::createTimeZone(id); UnicodeString itsID, temp; @@ -853,6 +866,185 @@ void TimeZoneTest::TestCustomParse() } } +static const UVersionInfo ICU_37 = {3,7,0,0}; + +void +TimeZoneTest::TestAliasedNames() +{ + struct { + const char *from; + const char *to; + } kData[] = { + /* Generated by org.unicode.cldr.tool.CountItems */ + + /* zoneID, canonical zoneID */ + {"Africa/Timbuktu", "Africa/Bamako"}, + {"America/Argentina/Buenos_Aires", "America/Buenos_Aires"}, + {"America/Argentina/Catamarca", "America/Catamarca"}, + {"America/Argentina/ComodRivadavia", "America/Catamarca"}, + {"America/Argentina/Cordoba", "America/Cordoba"}, + {"America/Argentina/Jujuy", "America/Jujuy"}, + {"America/Argentina/Mendoza", "America/Mendoza"}, + {"America/Atka", "America/Adak"}, + {"America/Ensenada", "America/Tijuana"}, + {"America/Fort_Wayne", "America/Indiana/Indianapolis"}, + {"America/Indianapolis", "America/Indiana/Indianapolis"}, + {"America/Knox_IN", "America/Indiana/Knox"}, + {"America/Louisville", "America/Kentucky/Louisville"}, + {"America/Porto_Acre", "America/Rio_Branco"}, + {"America/Rosario", "America/Cordoba"}, + {"America/Virgin", "America/St_Thomas"}, + {"Asia/Ashkhabad", "Asia/Ashgabat"}, + {"Asia/Chungking", "Asia/Chongqing"}, + {"Asia/Dacca", "Asia/Dhaka"}, + {"Asia/Istanbul", "Europe/Istanbul"}, + {"Asia/Macao", "Asia/Macau"}, + {"Asia/Tel_Aviv", "Asia/Jerusalem"}, + {"Asia/Thimbu", "Asia/Thimphu"}, + {"Asia/Ujung_Pandang", "Asia/Makassar"}, + {"Asia/Ulan_Bator", "Asia/Ulaanbaatar"}, + {"Australia/ACT", "Australia/Sydney"}, + {"Australia/Canberra", "Australia/Sydney"}, + {"Australia/LHI", "Australia/Lord_Howe"}, + {"Australia/NSW", "Australia/Sydney"}, + {"Australia/North", "Australia/Darwin"}, + {"Australia/Queensland", "Australia/Brisbane"}, + {"Australia/South", "Australia/Adelaide"}, + {"Australia/Tasmania", "Australia/Hobart"}, + {"Australia/Victoria", "Australia/Melbourne"}, + {"Australia/West", "Australia/Perth"}, + {"Australia/Yancowinna", "Australia/Broken_Hill"}, + {"Brazil/Acre", "America/Rio_Branco"}, + {"Brazil/DeNoronha", "America/Noronha"}, + {"Brazil/East", "America/Sao_Paulo"}, + {"Brazil/West", "America/Manaus"}, + {"Canada/Atlantic", "America/Halifax"}, + {"Canada/Central", "America/Winnipeg"}, + {"Canada/East-Saskatchewan", "America/Regina"}, + {"Canada/Eastern", "America/Toronto"}, + {"Canada/Mountain", "America/Edmonton"}, + {"Canada/Newfoundland", "America/St_Johns"}, + {"Canada/Pacific", "America/Vancouver"}, + {"Canada/Saskatchewan", "America/Regina"}, + {"Canada/Yukon", "America/Whitehorse"}, + {"Chile/Continental", "America/Santiago"}, + {"Chile/EasterIsland", "Pacific/Easter"}, + {"Cuba", "America/Havana"}, + {"Egypt", "Africa/Cairo"}, + {"Eire", "Europe/Dublin"}, + {"Etc/GMT+0", "Etc/GMT"}, + {"Etc/GMT-0", "Etc/GMT"}, + {"Etc/GMT0", "Etc/GMT"}, + {"Etc/Greenwich", "Etc/GMT"}, + {"Etc/UCT", "Etc/GMT"}, + {"Etc/UTC", "Etc/GMT"}, + {"Etc/Universal", "Etc/GMT"}, + {"Etc/Zulu", "Etc/GMT"}, + {"Europe/Belfast", "Europe/London"}, + {"Europe/Nicosia", "Asia/Nicosia"}, + {"Europe/Tiraspol", "Europe/Chisinau"}, + {"GB", "Europe/London"}, + {"GB-Eire", "Europe/London"}, + {"GMT", "Etc/GMT"}, + {"GMT+0", "Etc/GMT"}, + {"GMT-0", "Etc/GMT"}, + {"GMT0", "Etc/GMT"}, + {"Greenwich", "Etc/GMT"}, + {"Hongkong", "Asia/Hong_Kong"}, + {"Iceland", "Atlantic/Reykjavik"}, + {"Iran", "Asia/Tehran"}, + {"Israel", "Asia/Jerusalem"}, + {"Jamaica", "America/Jamaica"}, + {"Japan", "Asia/Tokyo"}, + {"Kwajalein", "Pacific/Kwajalein"}, + {"Libya", "Africa/Tripoli"}, + {"Mexico/BajaNorte", "America/Tijuana"}, + {"Mexico/BajaSur", "America/Mazatlan"}, + {"Mexico/General", "America/Mexico_City"}, + {"NZ", "Pacific/Auckland"}, + {"NZ-CHAT", "Pacific/Chatham"}, + {"Navajo", "America/Shiprock"}, + {"PRC", "Asia/Shanghai"}, + {"Pacific/Samoa", "Pacific/Pago_Pago"}, + {"Pacific/Yap", "Pacific/Truk"}, + {"Poland", "Europe/Warsaw"}, + {"Portugal", "Europe/Lisbon"}, + {"ROC", "Asia/Taipei"}, + {"ROK", "Asia/Seoul"}, + {"Singapore", "Asia/Singapore"}, + {"Turkey", "Europe/Istanbul"}, + {"UCT", "Etc/GMT"}, + {"US/Alaska", "America/Anchorage"}, + {"US/Aleutian", "America/Adak"}, + {"US/Arizona", "America/Phoenix"}, + {"US/Central", "America/Chicago"}, + {"US/East-Indiana", "America/Indiana/Indianapolis"}, + {"US/Eastern", "America/New_York"}, + {"US/Hawaii", "Pacific/Honolulu"}, + {"US/Indiana-Starke", "America/Indiana/Knox"}, + {"US/Michigan", "America/Detroit"}, + {"US/Mountain", "America/Denver"}, + {"US/Pacific", "America/Los_Angeles"}, + {"US/Pacific-New", "America/Los_Angeles"}, + {"US/Samoa", "Pacific/Pago_Pago"}, + {"UTC", "Etc/GMT"}, + {"Universal", "Etc/GMT"}, + {"W-SU", "Europe/Moscow"}, + {"Zulu", "Etc/GMT"}, + /* Total: 113 */ + + }; + + TimeZone::EDisplayType styles[] = { TimeZone::SHORT, TimeZone::LONG }; + UBool useDst[] = { FALSE, TRUE }; + int32_t noLoc = uloc_countAvailable(); + + if(isICUVersionAtLeast(ICU_37)) { + errln("This test needs to be fixed. This test fails in exhaustive mode because we need to implement generic timezones.\n"); + } + + int32_t i, j, k, loc; + UnicodeString fromName, toName; + TimeZone *from = NULL, *to = NULL; + for(i = 0; i < (int32_t)(sizeof(kData)/sizeof(kData[0])); i++) { + from = TimeZone::createTimeZone(kData[i].from); + to = TimeZone::createTimeZone(kData[i].to); + if(!from->hasSameRules(*to)) { + errln("different at %i\n", i); + } + if(!quick && isICUVersionAtLeast(ICU_37)) { + errln("This test needs to be fixed. This test fails in exhaustive mode because we need to implement generic timezones.\n"); + for(loc = 0; loc < noLoc; loc++) { + const char* locale = uloc_getAvailable(loc); + for(j = 0; j < (int32_t)(sizeof(styles)/sizeof(styles[0])); j++) { + for(k = 0; k < (int32_t)(sizeof(useDst)/sizeof(useDst[0])); k++) { + fromName.remove(); + toName.remove(); + from->getDisplayName(useDst[k], styles[j],locale, fromName); + to->getDisplayName(useDst[k], styles[j], locale, toName); + if(fromName.compare(toName) != 0) { + errln("Fail: Expected "+toName+" but got " + prettify(fromName) + + " for locale: " + locale + " index: "+ loc + + " to id "+ kData[i].to + + " from id " + kData[i].from); + } + } + } + } + } else { + fromName.remove(); + toName.remove(); + from->getDisplayName(fromName); + to->getDisplayName(toName); + if(fromName.compare(toName) != 0) { + errln("Fail: Expected "+toName+" but got " + fromName); + } + } + delete from; + delete to; + } +} + /** * Test the basic functionality of the getDisplayName() API. * @@ -1138,6 +1330,22 @@ TimeZoneTest::TestAlternateRules() + (offset / U_MILLIS_PER_HOUR) + " hours."); } +void TimeZoneTest::TestFractionalDST() { + const char* tzName = "Australia/Lord_Howe"; // 30 min offset + TimeZone* tz_icu = TimeZone::createTimeZone(tzName); + int dst_icu = tz_icu->getDSTSavings(); + UnicodeString id; + int32_t expected = 1800000; + if (expected != dst_icu) { + errln(UnicodeString("java reports dst savings of ") + expected + + " but icu reports " + dst_icu + + " for tz " + tz_icu->getID(id)); + } else { + logln(UnicodeString("both java and icu report dst savings of ") + expected + " for tz " + tz_icu->getID(id)); + } + delete tz_icu; +} + /** * Test country code support. Jitterbug 776. */ diff --git a/icuSources/test/intltest/tztest.h b/icuSources/test/intltest/tztest.h index 310a304b..6aa70343 100644 --- a/icuSources/test/intltest/tztest.h +++ b/icuSources/test/intltest/tztest.h @@ -1,7 +1,7 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -83,6 +83,10 @@ public: void TestEquivalentIDs(void); + void TestAliasedNames(void); + + void TestFractionalDST(void); + static const UDate INTERVAL; private: diff --git a/icuSources/test/intltest/ucaconf.cpp b/icuSources/test/intltest/ucaconf.cpp index 2320d7dd..e577a805 100644 --- a/icuSources/test/intltest/ucaconf.cpp +++ b/icuSources/test/intltest/ucaconf.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -146,7 +146,7 @@ void UCAConformanceTest::openTestFile(const char *type) "INFO: Working with the stub file.\n" "If you need the full conformance test, please\n" "download the appropriate data files from:\n" - "http://oss.software.ibm.com/cvs/icu4j/unicodetools/com/ibm/text/data/"); + "http://dev.icu-project.org/cgi-bin/viewcvs.cgi/unicodetools/com/ibm/text/data/"); } } } @@ -169,13 +169,14 @@ void UCAConformanceTest::testConformance(UCollator *coll) int32_t buflen = 0, oldBlen = 0; uint32_t first = 0; uint32_t offset = 0; + UnicodeString oldS, newS; while (fgets(lineB, 1024, testFile) != NULL) { offset = 0; line++; - if(*lineB == 0 || lineB[0] == '#') { + if(*lineB == 0 || strlen(lineB) < 3 || lineB[0] == '#') { continue; } offset = u_parseString(lineB, buffer, 1024, &first, &status); @@ -203,6 +204,9 @@ void UCAConformanceTest::testConformance(UCollator *coll) if(res > 0) { errln("Line %i is not greater or equal than previous line", line); logln("Data line %s", lineB); + prettify(CollationKey(oldSk, oldLen), oldS); + prettify(CollationKey(newSk, resLen), newS); + logln("Keys: "+oldS+" and "+newS); } else if(res == 0) { /* equal */ res = u_strcmpCodePointOrder(oldB, buffer); if (res == 0) { diff --git a/icuSources/test/intltest/ucdtest.cpp b/icuSources/test/intltest/ucdtest.cpp index 714437f7..e7195c25 100644 --- a/icuSources/test/intltest/ucdtest.cpp +++ b/icuSources/test/intltest/ucdtest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -78,6 +78,7 @@ derivedCorePropsNames[]={ "XID_Continue", "Default_Ignorable_Code_Point", "Grapheme_Extend", + "Grapheme_Link", /* Unicode 5 moves this property here from PropList.txt */ "Grapheme_Base" }; @@ -93,6 +94,7 @@ derivedCorePropsIndex[]={ UCHAR_XID_CONTINUE, UCHAR_DEFAULT_IGNORABLE_CODE_POINT, UCHAR_GRAPHEME_EXTEND, + UCHAR_GRAPHEME_LINK, UCHAR_GRAPHEME_BASE }; diff --git a/icuSources/test/intltest/uobjtest.cpp b/icuSources/test/intltest/uobjtest.cpp index 8354871c..28158606 100644 --- a/icuSources/test/intltest/uobjtest.cpp +++ b/icuSources/test/intltest/uobjtest.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -121,11 +121,6 @@ UObject *UObjectTest::testClass(UObject *obj, #include "unicode/utypes.h" -// Things we Patch -#define protected public /* to access private factory function */ -#include "iculserv.h" -#undef protected - // Internal Things (woo) #include "cpdtrans.h" #include "rbt.h" @@ -135,8 +130,9 @@ UObject *UObjectTest::testClass(UObject *obj, #include "digitlst.h" #include "esctrn.h" #include "funcrepl.h" -#include "icunotif.h" -#include "icuserv.h" +#include "servnotf.h" +#include "serv.h" +#include "servloc.h" #include "name2uni.h" #include "nfsubs.h" #include "nortrans.h" @@ -150,7 +146,13 @@ UObject *UObjectTest::testClass(UObject *obj, #include "unesctrn.h" #include "uni2name.h" #include "uvector.h" +#include "uvectr32.h" +#include "currfmt.h" +#include "buddhcal.h" #include "islamcal.h" +#include "japancal.h" +#include "hebrwcal.h" +#include "ustrenum.h" // External Things #include "unicode/brkiter.h" @@ -160,6 +162,7 @@ UObject *UObjectTest::testClass(UObject *obj, #include "unicode/choicfmt.h" #include "unicode/coleitr.h" #include "unicode/coll.h" +#include "unicode/curramt.h" #include "unicode/datefmt.h" #include "unicode/dbbi.h" #include "unicode/dcfmtsym.h" @@ -200,14 +203,23 @@ UObject *UObjectTest::testClass(UObject *obj, #define UOBJTEST_TEST_INTERNALS 0 /* do NOT test Internal things - their functions aren't exported on Win32 */ +#if !UCONFIG_NO_SERVICE +/* The whole purpose of this class is to expose the constructor, and gain access to the superclasses RTTI. */ +class TestLocaleKeyFactory : public LocaleKeyFactory { +public: + TestLocaleKeyFactory(int32_t coverage) : LocaleKeyFactory(coverage) {} +}; +#endif + void UObjectTest::testIDs() { ids_count = 0; + UErrorCode status = U_ZERO_ERROR; + static const UChar SMALL_STR[] = {0x51, 0x51, 0x51, 0}; // "QQQ" -#if !UCONFIG_NO_TRANSLITERATION +#if !UCONFIG_NO_TRANSLITERATION || !UCONFIG_NO_FORMATTING UParseError parseError; #endif - UErrorCode status = U_ZERO_ERROR; @@ -221,6 +233,7 @@ void UObjectTest::testIDs() //TESTCLASSID_DEFAULT(CollationElementIterator); #if !UCONFIG_NO_COLLATION TESTCLASSID_DEFAULT(CollationKey); + TESTCLASSID_FACTORY(UStringEnumeration, Collator::getKeywords(status)); #endif //TESTCLASSID_FACTORY(CompoundTransliterator, Transliterator::createInstance(UnicodeString("Any-Jex;Hangul-Jamo"), UTRANS_FORWARD, parseError, status)); @@ -228,21 +241,27 @@ void UObjectTest::testIDs() /* TESTCLASSID_FACTORY(NFSubstitution, NFSubstitution::makeSubstitution(8, */ /* TESTCLASSID_DEFAULT(DigitList); UMemory but not UObject*/ TESTCLASSID_ABSTRACT(NumberFormat); + TESTCLASSID_CTOR(RuleBasedNumberFormat, (UnicodeString("%default: -x: minus >>;"), parseError, status)); + TESTCLASSID_CTOR(ChoiceFormat, (UNICODE_STRING_SIMPLE("0#are no files|1#is one file|1<are many files"), status)); + TESTCLASSID_CTOR(MessageFormat, (UnicodeString(), status)); TESTCLASSID_CTOR(DateFormatSymbols, (status)); TESTCLASSID_CTOR(DecimalFormatSymbols, (status)); -#if UOBJTEST_TEST_INTERNALS - TESTCLASSID_CTOR(FunctionReplacer, (NULL,NULL) ); /* don't care */ -#endif TESTCLASSID_DEFAULT(FieldPosition); TESTCLASSID_DEFAULT(Formattable); + TESTCLASSID_CTOR(CurrencyAmount, (1.0, SMALL_STR, status)); + TESTCLASSID_CTOR(CurrencyUnit, (SMALL_STR, status)); + TESTCLASSID_CTOR(CurrencyFormat, (Locale::getUS(), status)); TESTCLASSID_CTOR(GregorianCalendar, (status)); + TESTCLASSID_CTOR(BuddhistCalendar, (Locale::getUS(), status)); TESTCLASSID_CTOR(IslamicCalendar, (Locale::getUS(), status)); + TESTCLASSID_CTOR(JapaneseCalendar, (Locale::getUS(), status)); + TESTCLASSID_CTOR(HebrewCalendar, (Locale::getUS(), status)); #endif #if !UCONFIG_NO_BREAK_ITERATION /* TESTCLASSID_ABSTRACT(BreakIterator); No staticID! */ TESTCLASSID_FACTORY(RuleBasedBreakIterator, BreakIterator::createLineInstance("mt",status)); - TESTCLASSID_FACTORY(DictionaryBasedBreakIterator, BreakIterator::createLineInstance("th",status)); + //TESTCLASSID_FACTORY(DictionaryBasedBreakIterator, BreakIterator::createLineInstance("th",status)); #endif //TESTCLASSID_DEFAULT(EscapeTransliterator); @@ -251,7 +270,6 @@ void UObjectTest::testIDs() #if !UCONFIG_NO_TRANSLITERATION - TESTCLASSID_TRANSLIT(AnyTransliterator, "Any-Latin"); TESTCLASSID_TRANSLIT(CompoundTransliterator, "Latin-Greek"); TESTCLASSID_TRANSLIT(EscapeTransliterator, "Any-Hex"); @@ -265,6 +283,11 @@ void UObjectTest::testIDs() TESTCLASSID_TRANSLIT(UnescapeTransliterator, "Hex-Any"); TESTCLASSID_TRANSLIT(UnicodeNameTransliterator, "Any-Name"); TESTCLASSID_TRANSLIT(UppercaseTransliterator, "Upper"); + TESTCLASSID_CTOR(CaseMapTransliterator, (UnicodeString(), NULL)); + TESTCLASSID_CTOR(Quantifier, (NULL, 0, 0)); +#if UOBJTEST_TEST_INTERNALS + TESTCLASSID_CTOR(FunctionReplacer, (NULL,NULL) ); /* don't care */ +#endif #endif TESTCLASSID_FACTORY(Locale, new Locale("123")); @@ -317,17 +340,21 @@ void UObjectTest::testIDs() TESTCLASSID_CTOR(UnicodeSetIterator,(UnicodeSet(0,1))); TESTCLASSID_CTOR(UStack, (status)); TESTCLASSID_CTOR(UVector, (status)); + TESTCLASSID_CTOR(UVector32, (status)); #if !UCONFIG_NO_SERVICE TESTCLASSID_CTOR(SimpleFactory, (NULL, UnicodeString("foo"))); TESTCLASSID_DEFAULT(EventListener); -#if UOBJTEST_TEST_INTERNALS TESTCLASSID_DEFAULT(ICUResourceBundleFactory); - //TESTCLASSID_DEFAULT(Key); // does ont exist? - TESTCLASSID_CTOR(LocaleKey, (UnicodeString("baz"), UnicodeString("bat"), NULL, 92)); - TESTCLASSID_CTOR(LocaleKeyFactory, (42)); + //TESTCLASSID_DEFAULT(Key); // does not exist? + UnicodeString baz("baz"); + UnicodeString bat("bat"); + TESTCLASSID_FACTORY(LocaleKey, LocaleKey::createWithCanonicalFallback(&baz, &bat, LocaleKey::KIND_ANY, status)); TESTCLASSID_CTOR(SimpleLocaleKeyFactory, (NULL, UnicodeString("bar"), 8, 12) ); -#endif + TESTCLASSID_CTOR(TestLocaleKeyFactory, (42)); // Test replacement for LocaleKeyFactory +//#if UOBJTEST_TEST_INTERNALS +// TESTCLASSID_CTOR(LocaleKeyFactory, (42)); +//#endif #endif #if UOBJTEST_DUMP_IDS @@ -387,6 +414,13 @@ void UObjectTest::testUMemory() { // destroy object and delete space manually p->~UnicodeString(); UnicodeString::operator delete(p, stackMemory); + + // Jitterbug 4452, for coverage + UnicodeString *pa = new UnicodeString[2]; + if ( !pa[0].isEmpty() || !pa[1].isEmpty()){ + errln("constructor used with array new did not work right"); + } + delete [] pa; #endif // try to call the compiler-generated UMemory::operator=(class UMemory const &) @@ -394,6 +428,18 @@ void UObjectTest::testUMemory() { m=n; } +void UObjectTest::TestMFCCompatibility() { +#if U_HAVE_DEBUG_LOCATION_NEW + /* Make sure that it compiles with MFC's debuggable new usage. */ + UnicodeString *str = new(__FILE__, __LINE__) UnicodeString(); + str->append((UChar)0x0040); // Is it usable? + if(str->charAt(0) != 0x0040) { + errln("debug new doesn't work."); + } + UnicodeString::operator delete(str, __FILE__, __LINE__); +#endif +} + /* --------------- */ #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break; @@ -405,6 +451,7 @@ void UObjectTest::runIndexedTest( int32_t index, UBool exec, const char* &name, CASE(0, testIDs); CASE(1, testUMemory); + CASE(2, TestMFCCompatibility); default: name = ""; break; //needed to end loop } diff --git a/icuSources/test/intltest/uobjtest.h b/icuSources/test/intltest/uobjtest.h index 13add61b..6c4dd48e 100644 --- a/icuSources/test/intltest/uobjtest.h +++ b/icuSources/test/intltest/uobjtest.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -20,6 +20,7 @@ private: // tests void testIDs(); void testUMemory(); + void TestMFCCompatibility(); //helper diff --git a/icuSources/test/intltest/usettest.cpp b/icuSources/test/intltest/usettest.cpp index 7e7cc9bd..6a0a2f08 100644 --- a/icuSources/test/intltest/usettest.cpp +++ b/icuSources/test/intltest/usettest.cpp @@ -1,12 +1,12 @@ /* -********************************************************************** -* Copyright (C) 1999-2004 Alan Liu ,International Business Machines Corporation and +************************************************************************************** +* Copyright (C) 1999-2006 International Business Machines Corporation and * others. All Rights Reserved. -********************************************************************** +************************************************************************************** * Date Name Description * 10/20/99 alan Creation. * 03/22/2000 Madhu Added additional tests -********************************************************************** +************************************************************************************** */ #include "unicode/utypes.h" @@ -17,8 +17,17 @@ #include "unicode/ustring.h" #include "unicode/parsepos.h" #include "unicode/symtable.h" +#include "unicode/uversion.h" #include "hash.h" + +#define TEST_ASSERT_SUCCESS(status) {if (U_FAILURE(status)) { \ + errln("fail in file \"%s\", line %d: \"%s\"", __FILE__, __LINE__, \ + u_errorName(status));}} + +#define TEST_ASSERT(expr) {if (!(expr)) { \ + errln("fail in file \"%s\", line %d", __FILE__, __LINE__); }} + UnicodeString operator+(const UnicodeString& left, const UnicodeSet& set) { UnicodeString pat; set.toPattern(pat); @@ -58,6 +67,8 @@ UnicodeSetTest::runIndexedTest(int32_t index, UBool exec, CASE(16,TestInvalidCodePoint); CASE(17,TestSymbolTable); CASE(18,TestSurrogate); + CASE(19,TestPosixClasses); + CASE(20,TestIteration); default: name = ""; break; } } @@ -664,6 +675,87 @@ void UnicodeSetTest::TestAPI() { } } +void UnicodeSetTest::TestIteration() { + UErrorCode ec = U_ZERO_ERROR; + int i = 0; + int outerLoop; + + // 6 code points, 3 ranges, 2 strings, 8 total elements + // Iteration will access them in sorted order - a, b, c, y, z, U0001abcd, "str1", "str2" + UnicodeSet set("[zabyc\\U0001abcd{str1}{str2}]", ec); + TEST_ASSERT_SUCCESS(ec); + UnicodeSetIterator it(set); + + for (outerLoop=0; outerLoop<3; outerLoop++) { + // Run the test multiple times, to check that iterator.reset() is working. + for (i=0; i<10; i++) { + UBool nextv = it.next(); + UBool isString = it.isString(); + int32_t codePoint = it.getCodepoint(); + //int32_t codePointEnd = it.getCodepointEnd(); + UnicodeString s = it.getString(); + switch (i) { + case 0: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == FALSE); + TEST_ASSERT(codePoint==0x61); + TEST_ASSERT(s == "a"); + break; + case 1: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == FALSE); + TEST_ASSERT(codePoint==0x62); + TEST_ASSERT(s == "b"); + break; + case 2: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == FALSE); + TEST_ASSERT(codePoint==0x63); + TEST_ASSERT(s == "c"); + break; + case 3: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == FALSE); + TEST_ASSERT(codePoint==0x79); + TEST_ASSERT(s == "y"); + break; + case 4: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == FALSE); + TEST_ASSERT(codePoint==0x7a); + TEST_ASSERT(s == "z"); + break; + case 5: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == FALSE); + TEST_ASSERT(codePoint==0x1abcd); + TEST_ASSERT(s == UnicodeString((UChar32)0x1abcd)); + break; + case 6: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == TRUE); + TEST_ASSERT(s == "str1"); + break; + case 7: + TEST_ASSERT(nextv == TRUE); + TEST_ASSERT(isString == TRUE); + TEST_ASSERT(s == "str2"); + break; + case 8: + TEST_ASSERT(nextv == FALSE); + break; + case 9: + TEST_ASSERT(nextv == FALSE); + break; + } + } + it.reset(); // prepare to run the iteration again. + } +} + + + + void UnicodeSetTest::TestStrings() { UErrorCode ec = U_ZERO_ERROR; @@ -879,6 +971,9 @@ void UnicodeSetTest::TestPropertySet() { "\\u0F73\\u0F75\\u0F81", "abcd\\u0300\\u0301\\u00c0\\u00c5", + "[:Assigned:]", + "A\\uE000\\uF8FF\\uFDC7\\U00010000\\U0010FFFD", + "\\u0888\\uFDD3\\uFFFE\\U00050005" }; static const int32_t DATA_LEN = sizeof(DATA)/sizeof(DATA[0]); @@ -889,6 +984,101 @@ void UnicodeSetTest::TestPropertySet() { } } +/** + * Test that Posix style character classes [:digit:], etc. + * have the Unicode definitions from TR 18. + */ +void UnicodeSetTest::TestPosixClasses() { + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:alpha:]", status); + UnicodeSet s2("\\p{Alphabetic}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:lower:]", status); + UnicodeSet s2("\\p{lowercase}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:upper:]", status); + UnicodeSet s2("\\p{Uppercase}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:punct:]", status); + UnicodeSet s2("\\p{gc=Punctuation}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:digit:]", status); + UnicodeSet s2("\\p{gc=DecimalNumber}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:xdigit:]", status); + UnicodeSet s2("[\\p{DecimalNumber}\\p{HexDigit}]", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:alnum:]", status); + UnicodeSet s2("[\\p{Alphabetic}\\p{DecimalNumber}]", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:space:]", status); + UnicodeSet s2("\\p{Whitespace}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:blank:]", status); + TEST_ASSERT_SUCCESS(status); + UnicodeSet s2("[\\p{Whitespace}-[\\u000a\\u000B\\u000c\\u000d\\u0085\\p{LineSeparator}\\p{ParagraphSeparator}]]", + status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:cntrl:]", status); + TEST_ASSERT_SUCCESS(status); + UnicodeSet s2("\\p{Control}", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:graph:]", status); + TEST_ASSERT_SUCCESS(status); + UnicodeSet s2("[^\\p{Whitespace}\\p{Control}\\p{Surrogate}\\p{Unassigned}]", status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } + { + UErrorCode status = U_ZERO_ERROR; + UnicodeSet s1("[:print:]", status); + TEST_ASSERT_SUCCESS(status); + UnicodeSet s2("[[:graph:][:blank:]-[\\p{Control}]]" ,status); + TEST_ASSERT_SUCCESS(status); + TEST_ASSERT(s1==s2); + } +} /** * Test cloning of UnicodeSet. For C++, we test the copy constructor. */ @@ -932,7 +1122,7 @@ void UnicodeSetTest::TestIndexOf() { void UnicodeSetTest::TestCloseOver() { UErrorCode ec = U_ZERO_ERROR; - char CASE[] = {(char)USET_CASE}; + char CASE[] = {(char)USET_CASE_INSENSITIVE}; char CASE_MAPPINGS[] = {(char)USET_ADD_CASE_MAPPINGS}; const char* DATA[] = { // selector, input, output @@ -963,6 +1153,32 @@ void UnicodeSetTest::TestCloseOver() { CASE, "[ABC]","[A-Ca-c]", + CASE, "[i]", "[iI]", + + CASE, "[\\u0130]", "[\\u0130{i\\u0307}]", // dotted I + CASE, "[{i\\u0307}]", "[\\u0130{i\\u0307}]", // i with dot + + CASE, "[\\u0131]", "[\\u0131]", // dotless i + + CASE, "[\\u0390]", "[\\u0390\\u1FD3{\\u03B9\\u0308\\u0301}]", + + CASE, "[\\u03c2]", "[\\u03a3\\u03c2\\u03c3]", // sigmas + + CASE, "[\\u03f2]", "[\\u03f2\\u03f9]", // lunate sigmas + + CASE, "[\\u03f7]", "[\\u03f7\\u03f8]", + + CASE, "[\\u1fe3]", "[\\u03b0\\u1fe3{\\u03c5\\u0308\\u0301}]", + + CASE, "[\\ufb05]", "[\\ufb05\\ufb06{st}]", + CASE, "[{st}]", "[\\ufb05\\ufb06{st}]", + + CASE, "[\\U0001044F]", "[\\U00010427\\U0001044F]", + + CASE, "[{a\\u02BE}]", "[\\u1E9A{a\\u02BE}]", // first in sorted table + + CASE, "[{\\u1f7c\\u03b9}]", "[\\u1ff2{\\u1f7c\\u03b9}]", // last in sorted table + CASE_MAPPINGS, "[aq\\u00DF{Bc}{bC}{Fi}]", "[aAqQ\\u00DF{ss}{Ss}{SS}{Bc}{BC}{bC}{bc}{FI}{Fi}{fi}]", @@ -980,6 +1196,7 @@ void UnicodeSetTest::TestCloseOver() { UnicodeSet s; UnicodeSet t; + UnicodeString buf; for (int32_t i=0; DATA[i]!=NULL; i+=3) { int32_t selector = DATA[i][0]; UnicodeString pat(DATA[i+1]); @@ -994,12 +1211,72 @@ void UnicodeSetTest::TestCloseOver() { if (s == t) { logln((UnicodeString)"Ok: " + pat + ".closeOver(" + selector + ") => " + exp); } else { - UnicodeString buf; errln((UnicodeString)"FAIL: " + pat + ".closeOver(" + selector + ") => " + s.toPattern(buf, TRUE) + ", expected " + exp); } } +#if 0 + /* + * Unused test code. + * This was used to compare the old implementation (using USET_CASE) + * with the new one (using 0x100 temporarily) + * while transitioning from hardcoded case closure tables in uniset.cpp + * (moved to uniset_props.cpp) to building the data by gencase into ucase.icu. + * and using ucase.c functions for closure. + * See Jitterbug 3432 RFE: Move uniset.cpp data to a data file + * + * Note: The old and new implementation never fully matched because + * the old implementation turned out to not map U+0130 and U+0131 correctly + * (dotted I and dotless i) and because the old implementation's data tables + * were outdated compared to Unicode 4.0.1 at the time of the change to the + * new implementation. (So sigmas and some other characters were not handled + * according to the newer Unicode version.) + */ + UnicodeSet sens("[:case_sensitive:]", ec), sens2, s2; + UnicodeSetIterator si(sens); + UnicodeString str, buf2; + const UnicodeString *pStr; + UChar32 c; + while(si.next()) { + if(!si.isString()) { + c=si.getCodepoint(); + s.clear(); + s.add(c); + + str.setTo(c); + str.foldCase(); + sens2.add(str); + + t=s; + s.closeOver(USET_CASE); + t.closeOver(0x100); + if(s!=t) { + errln("FAIL: closeOver(U+%04x) differs: ", c); + errln((UnicodeString)"old "+s.toPattern(buf, TRUE)+" new: "+t.toPattern(buf2, TRUE)); + } + } + } + // remove all code points + // should contain all full case folding mapping strings + sens2.remove(0, 0x10ffff); + si.reset(sens2); + while(si.next()) { + if(si.isString()) { + pStr=&si.getString(); + s.clear(); + s.add(*pStr); + t=s2=s; + s.closeOver(USET_CASE); + t.closeOver(0x100); + if(s!=t) { + errln((UnicodeString)"FAIL: closeOver("+s2.toPattern(buf, TRUE)+") differs: "); + errln((UnicodeString)"old "+s.toPattern(buf, TRUE)+" new: "+t.toPattern(buf2, TRUE)); + } + } + } +#endif + // Test the pattern API s.applyPattern("[abc]", USET_CASE_INSENSITIVE, NULL, ec); if (U_FAILURE(ec)) { diff --git a/icuSources/test/intltest/usettest.h b/icuSources/test/intltest/usettest.h index 55243591..f5c25387 100644 --- a/icuSources/test/intltest/usettest.h +++ b/icuSources/test/intltest/usettest.h @@ -1,7 +1,7 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2004, International Business Machines Corporation and + * Copyright (c) 1997-2006, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************** ********************************************************************** @@ -47,6 +47,8 @@ private: void TestAPI(void); + void TestIteration(void); + void TestStrings(void); void TestScriptSet(void); @@ -72,6 +74,8 @@ private: void TestSurrogate(); + void TestPosixClasses(); + private: UBool toPatternAux(UChar32 start, UChar32 end); diff --git a/icuSources/test/intltest/ustrtest.cpp b/icuSources/test/intltest/ustrtest.cpp index aac1f5f6..17c7b2b7 100644 --- a/icuSources/test/intltest/ustrtest.cpp +++ b/icuSources/test/intltest/ustrtest.cpp @@ -11,6 +11,7 @@ #include "unicode/locid.h" #include "unicode/ucnv.h" #include "cmemory.h" +#include "charstr.h" #if 0 #include "unicode/ustream.h" @@ -55,6 +56,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & case 13: name = "TestUnescape"; if (exec) TestUnescape(); break; case 14: name = "TestCountChar32"; if (exec) TestCountChar32(); break; case 15: name = "TestStringEnumeration"; if (exec) TestStringEnumeration(); break; + case 16: name = "TestCharString"; if (exec) TestCharString(); break; default: name = ""; break; //needed to end loop } @@ -202,6 +204,9 @@ UnicodeStringTest::TestBasicManipulation() if(0!=s.caseCompare(buffer, -1, U_FOLD_CASE_DEFAULT)) { errln("UnicodeString.caseCompare(const UChar *, length, options) does not work with length==-1"); } + if(0!=s.caseCompare(0, s.length(), buffer, U_FOLD_CASE_DEFAULT)) { + errln("UnicodeString.caseCompare(start, _length, const UChar *, options) does not work"); + } buffer[u_strlen(buffer)]=0xe4; UnicodeString u(buffer, -1, LENGTHOF(buffer)); @@ -591,6 +596,15 @@ UnicodeStringTest::TestExtract() errln("UnicodeString::extract(UConverter) conversion failed (length=%ld, %s)", length, u_errorName(errorCode)); } + // Test again with just the converter name. + if( (length=s.extract(0, s.length(), buffer, sizeof(buffer), "UTF-8"))!=13 || + uprv_memcmp(buffer, expect, 13)!=0 || + buffer[13]!=0 || + U_FAILURE(errorCode) + ) { + errln("UnicodeString::extract(\"UTF-8\") conversion failed (length=%ld, %s)", + length, u_errorName(errorCode)); + } // try the constructor UnicodeString t(expect, sizeof(expect), cnv, errorCode); @@ -1623,3 +1637,14 @@ UnicodeStringTest::TestStringEnumeration() { errln("StringEnumeration.clone()!=NULL"); } } + +void +UnicodeStringTest::TestCharString() { + static const char originalCStr[] = + "This is a large string that is meant to over flow the internal buffer of CharString. At the time of writing this test, the internal buffer is 128 bytes."; + CharString chStr(originalCStr); + if (strcmp(originalCStr, chStr) != 0) { + errln("CharString doesn't work with large strings."); + } +} + diff --git a/icuSources/test/intltest/ustrtest.h b/icuSources/test/intltest/ustrtest.h index 353b04c2..c3f9f399 100644 --- a/icuSources/test/intltest/ustrtest.h +++ b/icuSources/test/intltest/ustrtest.h @@ -1,12 +1,14 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2003, International Business Machines Corporation and + * Copyright (c) 1997-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ #ifndef UNICODESTRINGTEST_H #define UNICODESTRINGTEST_H +#include "unicode/unistr.h" +#include "unicode/ubrk.h" #include "intltest.h" /** @@ -72,6 +74,7 @@ public: void TestCountChar32(void); void TestBogus(); void TestStringEnumeration(); + void TestCharString(void); }; class StringCaseTest: public IntlTest { @@ -82,9 +85,18 @@ public: void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0); void TestCaseConversion(); + + void TestCasingImpl(const UnicodeString &input, + const UnicodeString &output, + int32_t whichCase, + const char *localeID, uint32_t options); #if !UCONFIG_NO_BREAK_ITERATION - void TestTitleCasing(); + void TestTitleCasing(const UnicodeString &input, + const UnicodeString &output, + const char *localeID, + UBreakIterator *iter); #endif + void TestCasing(); }; #endif diff --git a/icuSources/test/intltest/utxttest.cpp b/icuSources/test/intltest/utxttest.cpp new file mode 100644 index 00000000..da6a4afb --- /dev/null +++ b/icuSources/test/intltest/utxttest.cpp @@ -0,0 +1,1302 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ +/************************************************************************ +* Tests for the UText and UTextIterator text abstraction classses +* +************************************************************************/ + +#include "unicode/utypes.h" + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <unicode/utext.h> +#include <unicode/utf8.h> +#include <unicode/ustring.h> +#include <unicode/uchriter.h> +#include "utxttest.h" + +static UBool gFailed = FALSE; +static int gTestNum = 0; + +// Forward decl +UText *openFragmentedUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status); + +#define TEST_ASSERT(x) \ +{ if ((x)==FALSE) {errln("Test #%d failure in file %s at line %d\n", gTestNum, __FILE__, __LINE__);\ + gFailed = TRUE;\ + }} + + +#define TEST_SUCCESS(status) \ +{ if (U_FAILURE(status)) {errln("Test #%d failure in file %s at line %d. Error = \"%s\"\n", \ + gTestNum, __FILE__, __LINE__, u_errorName(status)); \ + gFailed = TRUE;\ + }} + +UTextTest::UTextTest() { +} + +UTextTest::~UTextTest() { +} + + +void +UTextTest::runIndexedTest(int32_t index, UBool exec, + const char* &name, char* /*par*/) { + switch (index) { + case 0: name = "TextTest"; + if (exec) TextTest(); break; + case 1: name = "ErrorTest"; + if (exec) ErrorTest(); break; + case 2: name = "FreezeTest"; + if (exec) FreezeTest(); break; + default: name = ""; break; + } +} + +// +// Quick and dirty random number generator. +// (don't use library so that results are portable. +static uint32_t m_seed = 1; +static uint32_t m_rand() +{ + m_seed = m_seed * 1103515245 + 12345; + return (uint32_t)(m_seed/65536) % 32768; +} + + +// +// TextTest() +// +// Top Level function for UText testing. +// Specifies the strings to be tested, with the acutal testing itself +// being carried out in another function, TestString(). +// +void UTextTest::TextTest() { + int32_t i, j; + + TestString("abcd\\U00010001xyz"); + TestString(""); + + // Supplementary chars at start or end + TestString("\\U00010001"); + TestString("abc\\U00010001"); + TestString("\\U00010001abc"); + + // Test simple strings of lengths 1 to 60, looking for glitches at buffer boundaries + UnicodeString s; + for (i=1; i<60; i++) { + s.truncate(0); + for (j=0; j<i; j++) { + if (j+0x30 == 0x5c) { + // backslash. Needs to be escaped + s.append((UChar)0x5c); + } + s.append(UChar(j+0x30)); + } + TestString(s); + } + + // Test strings with odd-aligned supplementary chars, + // looking for glitches at buffer boundaries + for (i=1; i<60; i++) { + s.truncate(0); + s.append((UChar)0x41); + for (j=0; j<i; j++) { + s.append(UChar32(j+0x11000)); + } + TestString(s); + } + + // String of chars of randomly varying size in utf-8 representation. + // Exercise the mapping, and the varying sized buffer. + // + s.truncate(0); + UChar32 c1 = 0; + UChar32 c2 = 0x100; + UChar32 c3 = 0xa000; + UChar32 c4 = 0x11000; + for (i=0; i<1000; i++) { + int len8 = m_rand()%4 + 1; + switch (len8) { + case 1: + c1 = (c1+1)%0x80; + // don't put 0 into string (0 terminated strings for some tests) + // don't put '\', will cause unescape() to fail. + if (c1==0x5c || c1==0) { + c1++; + } + s.append(c1); + break; + case 2: + s.append(c2++); + break; + case 3: + s.append(c3++); + break; + case 4: + s.append(c4++); + break; + } + } + TestString(s); +} + + +// +// TestString() Run a suite of UText tests on a string. +// The test string is unescaped before use. +// +void UTextTest::TestString(const UnicodeString &s) { + int32_t i; + int32_t j; + UChar32 c; + int32_t cpCount = 0; + UErrorCode status = U_ZERO_ERROR; + UText *ut = NULL; + int32_t saLen; + + UnicodeString sa = s.unescape(); + saLen = sa.length(); + + // + // Build up a mapping between code points and UTF-16 code unit indexes. + // + m *cpMap = new m[sa.length() + 1]; + j = 0; + for (i=0; i<sa.length(); i=sa.moveIndex32(i, 1)) { + c = sa.char32At(i); + cpMap[j].nativeIdx = i; + cpMap[j].cp = c; + j++; + cpCount++; + } + cpMap[j].nativeIdx = i; // position following the last char in utf-16 string. + + + // UChar * test, null terminated + status = U_ZERO_ERROR; + UChar *buf = new UChar[saLen+1]; + sa.extract(buf, saLen+1, status); + TEST_SUCCESS(status); + ut = utext_openUChars(NULL, buf, -1, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + utext_close(ut); + delete [] buf; + + // UChar * test, with length + status = U_ZERO_ERROR; + buf = new UChar[saLen+1]; + sa.extract(buf, saLen+1, status); + TEST_SUCCESS(status); + ut = utext_openUChars(NULL, buf, saLen, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + utext_close(ut); + delete [] buf; + + + // UnicodeString test + status = U_ZERO_ERROR; + ut = utext_openUnicodeString(NULL, &sa, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + TestCMR(sa, ut, cpCount, cpMap, cpMap); + utext_close(ut); + + + // Const UnicodeString test + status = U_ZERO_ERROR; + ut = utext_openConstUnicodeString(NULL, &sa, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + utext_close(ut); + + + // Replaceable test. (UnicodeString inherits Replaceable) + status = U_ZERO_ERROR; + ut = utext_openReplaceable(NULL, &sa, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + TestCMR(sa, ut, cpCount, cpMap, cpMap); + utext_close(ut); + + // Character Iterator Tests + status = U_ZERO_ERROR; + const UChar *cbuf = sa.getBuffer(); + CharacterIterator *ci = new UCharCharacterIterator(cbuf, saLen, status); + TEST_SUCCESS(status); + ut = utext_openCharacterIterator(NULL, ci, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + utext_close(ut); + delete ci; + + + // Fragmented UnicodeString (Chunk size of one) + // + status = U_ZERO_ERROR; + ut = openFragmentedUnicodeString(NULL, &sa, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, cpMap); + utext_close(ut); + + // + // UTF-8 test + // + + // Convert the test string from UnicodeString to (char *) in utf-8 format + int32_t u8Len = sa.extract(0, sa.length(), NULL, 0, "utf-8"); + char *u8String = new char[u8Len + 1]; + sa.extract(0, sa.length(), u8String, u8Len+1, "utf-8"); + + // Build up the map of code point indices in the utf-8 string + m * u8Map = new m[sa.length() + 1]; + i = 0; // native utf-8 index + for (j=0; j<cpCount ; j++) { // code point number + u8Map[j].nativeIdx = i; + U8_NEXT(u8String, i, u8Len, c) + u8Map[j].cp = c; + } + u8Map[cpCount].nativeIdx = u8Len; // position following the last char in utf-8 string. + + // Do the test itself + status = U_ZERO_ERROR; + ut = utext_openUTF8(NULL, u8String, -1, &status); + TEST_SUCCESS(status); + TestAccess(sa, ut, cpCount, u8Map); + utext_close(ut); + + + + delete []cpMap; + delete []u8Map; + delete []u8String; +} + +// TestCMR test Copy, Move and Replace operations. +// us UnicodeString containing the test text. +// ut UText containing the same test text. +// cpCount number of code points in the test text. +// nativeMap Mapping from code points to native indexes for the UText. +// u16Map Mapping from code points to UTF-16 indexes, for use with the UnicodeString. +// +// This function runs a whole series of opertions on each incoming UText. +// The UText is deep-cloned prior to each operation, so that the original UText remains unchanged. +// +void UTextTest::TestCMR(const UnicodeString &us, UText *ut, int cpCount, m *nativeMap, m *u16Map) { + TEST_ASSERT(utext_isWritable(ut) == TRUE); + + int srcLengthType; // Loop variables for selecting the postion and length + int srcPosType; // of the block to operate on within the source text. + int destPosType; + + int srcIndex = 0; // Code Point indexes of the block to operate on for + int srcLength = 0; // a specific test. + + int destIndex = 0; // Code point index of the destination for a copy/move test. + + int32_t nativeStart = 0; // Native unit indexes for a test. + int32_t nativeLimit = 0; + int32_t nativeDest = 0; + + int32_t u16Start = 0; // UTF-16 indexes for a test. + int32_t u16Limit = 0; // used when performing the same operation in a Unicode String + int32_t u16Dest = 0; + + // Iterate over a whole series of source index, length and a target indexes. + // This is done with code point indexes; these will be later translated to native + // indexes using the cpMap. + for (srcLengthType=1; srcLengthType<=3; srcLengthType++) { + switch (srcLengthType) { + case 1: srcLength = 1; break; + case 2: srcLength = 5; break; + case 3: srcLength = cpCount / 3; + } + for (srcPosType=1; srcPosType<=5; srcPosType++) { + switch (srcPosType) { + case 1: srcIndex = 0; break; + case 2: srcIndex = 1; break; + case 3: srcIndex = cpCount - srcLength; break; + case 4: srcIndex = cpCount - srcLength - 1; break; + case 5: srcIndex = cpCount / 2; break; + } + if (srcIndex < 0 || srcIndex + srcLength > cpCount) { + // filter out bogus test cases - + // those with a source range that falls of an edge of the string. + continue; + } + + // + // Copy and move tests. + // iterate over a variety of destination positions. + // + for (destPosType=1; destPosType<=4; destPosType++) { + switch (destPosType) { + case 1: destIndex = 0; break; + case 2: destIndex = 1; break; + case 3: destIndex = srcIndex - 1; break; + case 4: destIndex = srcIndex + srcLength + 1; break; + case 5: destIndex = cpCount-1; break; + case 6: destIndex = cpCount; break; + } + if (destIndex<0 || destIndex>cpCount) { + // filter out bogus test cases. + continue; + } + + nativeStart = nativeMap[srcIndex].nativeIdx; + nativeLimit = nativeMap[srcIndex+srcLength].nativeIdx; + nativeDest = nativeMap[destIndex].nativeIdx; + + u16Start = u16Map[srcIndex].nativeIdx; + u16Limit = u16Map[srcIndex+srcLength].nativeIdx; + u16Dest = u16Map[destIndex].nativeIdx; + + gFailed = FALSE; + TestCopyMove(us, ut, FALSE, + nativeStart, nativeLimit, nativeDest, + u16Start, u16Limit, u16Dest); + + TestCopyMove(us, ut, TRUE, + nativeStart, nativeLimit, nativeDest, + u16Start, u16Limit, u16Dest); + + if (gFailed) { + return; + } + } + + // + // Replace tests. + // + UnicodeString fullRepString("This is an arbitrary string that will be used as replacement text"); + for (int32_t replStrLen=0; replStrLen<20; replStrLen++) { + UnicodeString repStr(fullRepString, 0, replStrLen); + TestReplace(us, ut, + nativeStart, nativeLimit, + u16Start, u16Limit, + repStr); + if (gFailed) { + return; + } + } + + } + } + +} + +// +// TestCopyMove run a single test case for utext_copy. +// Test cases are created in TestCMR and dispatched here for execution. +// +void UTextTest::TestCopyMove(const UnicodeString &us, UText *ut, UBool move, + int32_t nativeStart, int32_t nativeLimit, int32_t nativeDest, + int32_t u16Start, int32_t u16Limit, int32_t u16Dest) +{ + UErrorCode status = U_ZERO_ERROR; + UText *targetUT = NULL; + gTestNum++; + gFailed = FALSE; + + // + // clone the UText. The test will be run in the cloned copy + // so that we don't alter the original. + // + targetUT = utext_clone(NULL, ut, TRUE, FALSE, &status); + TEST_SUCCESS(status); + UnicodeString targetUS(us); // And copy the reference string. + + // do the test operation first in the reference + targetUS.copy(u16Start, u16Limit, u16Dest); + if (move) { + // delete out the source range. + if (u16Limit < u16Dest) { + targetUS.removeBetween(u16Start, u16Limit); + } else { + int32_t amtCopied = u16Limit - u16Start; + targetUS.removeBetween(u16Start+amtCopied, u16Limit+amtCopied); + } + } + + // Do the same operation in the UText under test + utext_copy(targetUT, nativeStart, nativeLimit, nativeDest, move, &status); + if (nativeDest > nativeStart && nativeDest < nativeLimit) { + TEST_ASSERT(status == U_INDEX_OUTOFBOUNDS_ERROR); + } else { + TEST_SUCCESS(status); + + // Compare the results of the two parallel tests + int32_t usi = 0; // UnicodeString postion, utf-16 index. + int64_t uti = 0; // UText position, native index. + int32_t cpi; // char32 position (code point index) + UChar32 usc; // code point from Unicode String + UChar32 utc; // code point from UText + utext_setNativeIndex(targetUT, 0); + for (cpi=0; ; cpi++) { + usc = targetUS.char32At(usi); + utc = utext_next32(targetUT); + if (utc < 0) { + break; + } + TEST_ASSERT(uti == usi); + TEST_ASSERT(utc == usc); + usi = targetUS.moveIndex32(usi, 1); + uti = utext_getNativeIndex(targetUT); + if (gFailed) { + goto cleanupAndReturn; + } + } + int64_t expectedNativeLength = utext_nativeLength(ut); + if (move == FALSE) { + expectedNativeLength += nativeLimit - nativeStart; + } + uti = utext_getNativeIndex(targetUT); + TEST_ASSERT(uti == expectedNativeLength); + } + +cleanupAndReturn: + utext_close(targetUT); +} + + +// +// TestReplace Test a single Replace operation. +// +void UTextTest::TestReplace( + const UnicodeString &us, // reference UnicodeString in which to do the replace + UText *ut, // UnicodeText object under test. + int32_t nativeStart, // Range to be replaced, in UText native units. + int32_t nativeLimit, + int32_t u16Start, // Range to be replaced, in UTF-16 units + int32_t u16Limit, // for use in the reference UnicodeString. + const UnicodeString &repStr) // The replacement string +{ + UErrorCode status = U_ZERO_ERROR; + UText *targetUT = NULL; + gTestNum++; + gFailed = FALSE; + + // + // clone the target UText. The test will be run in the cloned copy + // so that we don't alter the original. + // + targetUT = utext_clone(NULL, ut, TRUE, FALSE, &status); + TEST_SUCCESS(status); + UnicodeString targetUS(us); // And copy the reference string. + + // + // Do the replace operation in the Unicode String, to + // produce a reference result. + // + targetUS.replace(u16Start, u16Limit-u16Start, repStr); + + // + // Do the replace on the UText under test + // + const UChar *rs = repStr.getBuffer(); + int32_t rsLen = repStr.length(); + int32_t actualDelta = utext_replace(targetUT, nativeStart, nativeLimit, rs, rsLen, &status); + int32_t expectedDelta = repStr.length() - (nativeLimit - nativeStart); + TEST_ASSERT(actualDelta == expectedDelta); + + // + // Compare the results + // + int32_t usi = 0; // UnicodeString postion, utf-16 index. + int64_t uti = 0; // UText position, native index. + int32_t cpi; // char32 position (code point index) + UChar32 usc; // code point from Unicode String + UChar32 utc; // code point from UText + int64_t expectedNativeLength = 0; + utext_setNativeIndex(targetUT, 0); + for (cpi=0; ; cpi++) { + usc = targetUS.char32At(usi); + utc = utext_next32(targetUT); + if (utc < 0) { + break; + } + TEST_ASSERT(uti == usi); + TEST_ASSERT(utc == usc); + usi = targetUS.moveIndex32(usi, 1); + uti = utext_getNativeIndex(targetUT); + if (gFailed) { + goto cleanupAndReturn; + } + } + expectedNativeLength = utext_nativeLength(ut) + expectedDelta; + uti = utext_getNativeIndex(targetUT); + TEST_ASSERT(uti == expectedNativeLength); + +cleanupAndReturn: + utext_close(targetUT); +} + +// +// TestAccess() Test the read only access functions on a UText. +// The text is accessed in a variety of ways, and compared with +// the reference UnicodeString. +// +void UTextTest::TestAccess(const UnicodeString &us, UText *ut, int cpCount, m *cpMap) { + UErrorCode status = U_ZERO_ERROR; + gTestNum++; + + // + // Check the length from the UText + // + int64_t expectedLen = cpMap[cpCount].nativeIdx; + int64_t utlen = utext_nativeLength(ut); + TEST_ASSERT(expectedLen == utlen); + + // + // Iterate forwards, verify that we get the correct code points + // at the correct native offsets. + // + int i = 0; + int64_t index; + int64_t expectedIndex = 0; + int64_t foundIndex = 0; + UChar32 expectedC; + UChar32 foundC; + int64_t len; + + for (i=0; i<cpCount; i++) { + expectedIndex = cpMap[i].nativeIdx; + foundIndex = utext_getNativeIndex(ut); + TEST_ASSERT(expectedIndex == foundIndex); + expectedC = cpMap[i].cp; + foundC = utext_next32(ut); + TEST_ASSERT(expectedC == foundC); + foundIndex = utext_getPreviousNativeIndex(ut); + TEST_ASSERT(expectedIndex == foundIndex); + if (gFailed) { + return; + } + } + foundC = utext_next32(ut); + TEST_ASSERT(foundC == U_SENTINEL); + + // Repeat above, using macros + utext_setNativeIndex(ut, 0); + for (i=0; i<cpCount; i++) { + expectedIndex = cpMap[i].nativeIdx; + foundIndex = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(expectedIndex == foundIndex); + expectedC = cpMap[i].cp; + foundC = UTEXT_NEXT32(ut); + TEST_ASSERT(expectedC == foundC); + if (gFailed) { + return; + } + } + foundC = UTEXT_NEXT32(ut); + TEST_ASSERT(foundC == U_SENTINEL); + + // + // Forward iteration (above) should have left index at the + // end of the input, which should == length(). + // + len = utext_nativeLength(ut); + foundIndex = utext_getNativeIndex(ut); + TEST_ASSERT(len == foundIndex); + + // + // Iterate backwards over entire test string + // + len = utext_getNativeIndex(ut); + utext_setNativeIndex(ut, len); + for (i=cpCount-1; i>=0; i--) { + expectedC = cpMap[i].cp; + expectedIndex = cpMap[i].nativeIdx; + int64_t prevIndex = utext_getPreviousNativeIndex(ut); + foundC = utext_previous32(ut); + foundIndex = utext_getNativeIndex(ut); + TEST_ASSERT(expectedIndex == foundIndex); + TEST_ASSERT(expectedC == foundC); + TEST_ASSERT(prevIndex == foundIndex); + if (gFailed) { + return; + } + } + + // + // Backwards iteration, above, should have left our iterator + // position at zero, and continued backwards iterationshould fail. + // + foundIndex = utext_getNativeIndex(ut); + TEST_ASSERT(foundIndex == 0); + foundIndex = utext_getPreviousNativeIndex(ut); + TEST_ASSERT(foundIndex == 0); + + + foundC = utext_previous32(ut); + TEST_ASSERT(foundC == U_SENTINEL); + foundIndex = utext_getNativeIndex(ut); + TEST_ASSERT(foundIndex == 0); + foundIndex = utext_getPreviousNativeIndex(ut); + TEST_ASSERT(foundIndex == 0); + + + // And again, with the macros + utext_setNativeIndex(ut, len); + for (i=cpCount-1; i>=0; i--) { + expectedC = cpMap[i].cp; + expectedIndex = cpMap[i].nativeIdx; + foundC = UTEXT_PREVIOUS32(ut); + foundIndex = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(expectedIndex == foundIndex); + TEST_ASSERT(expectedC == foundC); + if (gFailed) { + return; + } + } + + // + // Backwards iteration, above, should have left our iterator + // position at zero, and continued backwards iterationshould fail. + // + foundIndex = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(foundIndex == 0); + + foundC = UTEXT_PREVIOUS32(ut); + TEST_ASSERT(foundC == U_SENTINEL); + foundIndex = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(foundIndex == 0); + if (gFailed) { + return; + } + + // + // next32From(), prevous32From(), Iterate in a somewhat random order. + // + int cpIndex = 0; + for (i=0; i<cpCount; i++) { + cpIndex = (cpIndex + 9973) % cpCount; + index = cpMap[cpIndex].nativeIdx; + expectedC = cpMap[cpIndex].cp; + foundC = utext_next32From(ut, index); + TEST_ASSERT(expectedC == foundC); + if (gFailed) { + return; + } + } + + cpIndex = 0; + for (i=0; i<cpCount; i++) { + cpIndex = (cpIndex + 9973) % cpCount; + index = cpMap[cpIndex+1].nativeIdx; + expectedC = cpMap[cpIndex].cp; + foundC = utext_previous32From(ut, index); + TEST_ASSERT(expectedC == foundC); + if (gFailed) { + return; + } + } + + + // + // moveIndex(int32_t delta); + // + + // Walk through frontwards, incrementing by one + utext_setNativeIndex(ut, 0); + for (i=1; i<=cpCount; i++) { + utext_moveIndex32(ut, 1); + index = utext_getNativeIndex(ut); + expectedIndex = cpMap[i].nativeIdx; + TEST_ASSERT(expectedIndex == index); + index = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(expectedIndex == index); + } + + // Walk through frontwards, incrementing by two + utext_setNativeIndex(ut, 0); + for (i=2; i<cpCount; i+=2) { + utext_moveIndex32(ut, 2); + index = utext_getNativeIndex(ut); + expectedIndex = cpMap[i].nativeIdx; + TEST_ASSERT(expectedIndex == index); + index = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(expectedIndex == index); + } + + // walk through the string backwards, decrementing by one. + i = cpMap[cpCount].nativeIdx; + utext_setNativeIndex(ut, i); + for (i=cpCount; i>=0; i--) { + expectedIndex = cpMap[i].nativeIdx; + index = utext_getNativeIndex(ut); + TEST_ASSERT(expectedIndex == index); + index = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(expectedIndex == index); + utext_moveIndex32(ut, -1); + } + + + // walk through backwards, decrementing by three + i = cpMap[cpCount].nativeIdx; + utext_setNativeIndex(ut, i); + for (i=cpCount; i>=0; i-=3) { + expectedIndex = cpMap[i].nativeIdx; + index = utext_getNativeIndex(ut); + TEST_ASSERT(expectedIndex == index); + index = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(expectedIndex == index); + utext_moveIndex32(ut, -3); + } + + + // + // Extract + // + int bufSize = us.length() + 10; + UChar *buf = new UChar[bufSize]; + status = U_ZERO_ERROR; + expectedLen = us.length(); + len = utext_extract(ut, 0, utlen, buf, bufSize, &status); + TEST_SUCCESS(status); + TEST_ASSERT(len == expectedLen); + int compareResult = us.compare(buf, -1); + TEST_ASSERT(compareResult == 0); + + status = U_ZERO_ERROR; + len = utext_extract(ut, 0, utlen, NULL, 0, &status); + if (utlen == 0) { + TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); + } else { + TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); + } + TEST_ASSERT(len == expectedLen); + + status = U_ZERO_ERROR; + u_memset(buf, 0x5555, bufSize); + len = utext_extract(ut, 0, utlen, buf, 1, &status); + if (us.length() == 0) { + TEST_SUCCESS(status); + TEST_ASSERT(buf[0] == 0); + } else { + // Buf len == 1, extracting a single 16 bit value. + // If the data char is supplementary, it doesn't matter whether the buffer remains unchanged, + // or whether the lead surrogate of the pair is extracted. + // It's a buffer overflow error in either case. + TEST_ASSERT(buf[0] == us.charAt(0) || + buf[0] == 0x5555 && U_IS_SUPPLEMENTARY(us.char32At(0))); + TEST_ASSERT(buf[1] == 0x5555); + if (us.length() == 1) { + TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); + } else { + TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); + } + } + + delete []buf; +} + + + +// +// ErrorTest() Check various error and edge cases. +// +void UTextTest::ErrorTest() +{ + // Close of an unitialized UText. Shouldn't blow up. + { + UText ut; + memset(&ut, 0, sizeof(UText)); + utext_close(&ut); + utext_close(NULL); + } + + // Double-close of a UText. Shouldn't blow up. UText should still be usable. + { + UErrorCode status = U_ZERO_ERROR; + UText ut = UTEXT_INITIALIZER; + UnicodeString s("Hello, World"); + UText *ut2 = utext_openUnicodeString(&ut, &s, &status); + TEST_SUCCESS(status); + TEST_ASSERT(ut2 == &ut); + + UText *ut3 = utext_close(&ut); + TEST_ASSERT(ut3 == &ut); + + UText *ut4 = utext_close(&ut); + TEST_ASSERT(ut4 == &ut); + + utext_openUnicodeString(&ut, &s, &status); + TEST_SUCCESS(status); + utext_close(&ut); + } + + // Re-use of a UText, chaining through each of the types of UText + // (If it doesn't blow up, and doesn't leak, it's probably working fine) + { + UErrorCode status = U_ZERO_ERROR; + UText ut = UTEXT_INITIALIZER; + UText *utp; + UnicodeString s1("Hello, World"); + UChar s2[] = {(UChar)0x41, (UChar)0x42, (UChar)0}; + const char *s3 = "\x66\x67\x68"; + + utp = utext_openUnicodeString(&ut, &s1, &status); + TEST_SUCCESS(status); + TEST_ASSERT(utp == &ut); + + utp = utext_openConstUnicodeString(&ut, &s1, &status); + TEST_SUCCESS(status); + TEST_ASSERT(utp == &ut); + + utp = utext_openUTF8(&ut, s3, -1, &status); + TEST_SUCCESS(status); + TEST_ASSERT(utp == &ut); + + utp = utext_openUChars(&ut, s2, -1, &status); + TEST_SUCCESS(status); + TEST_ASSERT(utp == &ut); + + utp = utext_close(&ut); + TEST_ASSERT(utp == &ut); + + utp = utext_openUnicodeString(&ut, &s1, &status); + TEST_SUCCESS(status); + TEST_ASSERT(utp == &ut); + } + + // + // UTF-8 with malformed sequences. + // These should come through as the Unicode replacement char, \ufffd + // + { + UErrorCode status = U_ZERO_ERROR; + UText *ut = NULL; + const char *badUTF8 = "\x41\x81\x42\xf0\x81\x81\x43"; + UChar32 c; + + ut = utext_openUTF8(NULL, badUTF8, -1, &status); + TEST_SUCCESS(status); + c = utext_char32At(ut, 1); + TEST_ASSERT(c == 0xfffd); + c = utext_char32At(ut, 3); + TEST_ASSERT(c == 0xfffd); + c = utext_char32At(ut, 5); + TEST_ASSERT(c == 0xfffd); + c = utext_char32At(ut, 6); + TEST_ASSERT(c == 0x43); + + UChar buf[10]; + int n = utext_extract(ut, 0, 9, buf, 10, &status); + TEST_SUCCESS(status); + TEST_ASSERT(n==5); + TEST_ASSERT(buf[1] == 0xfffd); + TEST_ASSERT(buf[3] == 0xfffd); + TEST_ASSERT(buf[2] == 0x42); + utext_close(ut); + } + + + // + // isLengthExpensive - does it make the exptected transitions after + // getting the length of a nul terminated string? + // + { + UErrorCode status = U_ZERO_ERROR; + UnicodeString sa("Hello, this is a string"); + UBool isExpensive; + + UChar sb[100]; + memset(sb, 0x20, sizeof(sb)); + sb[99] = 0; + + UText *uta = utext_openUnicodeString(NULL, &sa, &status); + TEST_SUCCESS(status); + isExpensive = utext_isLengthExpensive(uta); + TEST_ASSERT(isExpensive == FALSE); + utext_close(uta); + + UText *utb = utext_openUChars(NULL, sb, -1, &status); + TEST_SUCCESS(status); + isExpensive = utext_isLengthExpensive(utb); + TEST_ASSERT(isExpensive == TRUE); + int64_t len = utext_nativeLength(utb); + TEST_ASSERT(len == 99); + isExpensive = utext_isLengthExpensive(utb); + TEST_ASSERT(isExpensive == FALSE); + utext_close(utb); + } + + // + // Index to positions not on code point boundaries. + // + { + const char *u8str = "\xc8\x81\xe1\x82\x83\xf1\x84\x85\x86"; + int32_t startMap[] = { 0, 0, 2, 2, 2, 5, 5, 5, 5, 9, 9}; + int32_t nextMap[] = { 2, 2, 5, 5, 5, 9, 9, 9, 9, 9, 9}; + int32_t prevMap[] = { 0, 0, 0, 0, 0, 2, 2, 2, 2, 5, 5}; + UChar32 c32Map[] = {0x201, 0x201, 0x1083, 0x1083, 0x1083, 0x044146, 0x044146, 0x044146, 0x044146, -1, -1}; + UChar32 pr32Map[] = { -1, -1, 0x201, 0x201, 0x201, 0x1083, 0x1083, 0x1083, 0x1083, 0x044146, 0x044146}; + + // extractLen is the size, in UChars, of what will be extracted between index and index+1. + // is zero when both index positions lie within the same code point. + int32_t exLen[] = { 0, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0}; + + + UErrorCode status = U_ZERO_ERROR; + UText *ut = utext_openUTF8(NULL, u8str, -1, &status); + TEST_SUCCESS(status); + + // Check setIndex + int32_t i; + int32_t startMapLimit = sizeof(startMap) / sizeof(int32_t); + for (i=0; i<startMapLimit; i++) { + utext_setNativeIndex(ut, i); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == startMap[i]); + cpIndex = UTEXT_GETNATIVEINDEX(ut); + TEST_ASSERT(cpIndex == startMap[i]); + } + + // Check char32At + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_char32At(ut, i); + TEST_ASSERT(c32 == c32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == startMap[i]); + } + + // Check utext_next32From + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_next32From(ut, i); + TEST_ASSERT(c32 == c32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == nextMap[i]); + } + + // check utext_previous32From + for (i=0; i<startMapLimit; i++) { + gTestNum++; + UChar32 c32 = utext_previous32From(ut, i); + TEST_ASSERT(c32 == pr32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == prevMap[i]); + } + + // check Extract + // Extract from i to i+1, which may be zero or one code points, + // depending on whether the indices straddle a cp boundary. + for (i=0; i<startMapLimit; i++) { + UChar buf[3]; + status = U_ZERO_ERROR; + int32_t extractedLen = utext_extract(ut, i, i+1, buf, 3, &status); + TEST_SUCCESS(status); + TEST_ASSERT(extractedLen == exLen[i]); + if (extractedLen > 0) { + UChar32 c32; + U16_GET(buf, 0, 0, extractedLen, c32); + TEST_ASSERT(c32 == c32Map[i]); + } + } + + utext_close(ut); + } + + + { // Similar test, with utf16 instead of utf8 + // TODO: merge the common parts of these tests. + + UnicodeString u16str("\\u1000\\U00011000\\u2000\\U00022000"); + int32_t startMap[] ={ 0, 1, 1, 3, 4, 4, 6, 6}; + int32_t nextMap[] = { 1, 3, 3, 4, 6, 6, 6, 6}; + int32_t prevMap[] = { 0, 0, 0, 1, 3, 3, 4, 4}; + UChar32 c32Map[] = {0x1000, 0x11000, 0x11000, 0x2000, 0x22000, 0x22000, -1, -1}; + UChar32 pr32Map[] = { -1, 0x1000, 0x1000, 0x11000, 0x2000, 0x2000, 0x22000, 0x22000}; + int32_t exLen[] = { 1, 0, 2, 1, 0, 2, 0, 0,}; + + u16str = u16str.unescape(); + UErrorCode status = U_ZERO_ERROR; + UText *ut = utext_openUnicodeString(NULL, &u16str, &status); + TEST_SUCCESS(status); + + int32_t startMapLimit = sizeof(startMap) / sizeof(int32_t); + int i; + for (i=0; i<startMapLimit; i++) { + utext_setNativeIndex(ut, i); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == startMap[i]); + } + + // Check char32At + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_char32At(ut, i); + TEST_ASSERT(c32 == c32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == startMap[i]); + } + + // Check utext_next32From + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_next32From(ut, i); + TEST_ASSERT(c32 == c32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == nextMap[i]); + } + + // check utext_previous32From + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_previous32From(ut, i); + TEST_ASSERT(c32 == pr32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == prevMap[i]); + } + + // check Extract + // Extract from i to i+1, which may be zero or one code points, + // depending on whether the indices straddle a cp boundary. + for (i=0; i<startMapLimit; i++) { + UChar buf[3]; + status = U_ZERO_ERROR; + int32_t extractedLen = utext_extract(ut, i, i+1, buf, 3, &status); + TEST_SUCCESS(status); + TEST_ASSERT(extractedLen == exLen[i]); + if (extractedLen > 0) { + UChar32 c32; + U16_GET(buf, 0, 0, extractedLen, c32); + TEST_ASSERT(c32 == c32Map[i]); + } + } + + utext_close(ut); + } + + { // Similar test, with UText over Replaceable + // TODO: merge the common parts of these tests. + + UnicodeString u16str("\\u1000\\U00011000\\u2000\\U00022000"); + int32_t startMap[] ={ 0, 1, 1, 3, 4, 4, 6, 6}; + int32_t nextMap[] = { 1, 3, 3, 4, 6, 6, 6, 6}; + int32_t prevMap[] = { 0, 0, 0, 1, 3, 3, 4, 4}; + UChar32 c32Map[] = {0x1000, 0x11000, 0x11000, 0x2000, 0x22000, 0x22000, -1, -1}; + UChar32 pr32Map[] = { -1, 0x1000, 0x1000, 0x11000, 0x2000, 0x2000, 0x22000, 0x22000}; + int32_t exLen[] = { 1, 0, 2, 1, 0, 2, 0, 0,}; + + u16str = u16str.unescape(); + UErrorCode status = U_ZERO_ERROR; + UText *ut = utext_openReplaceable(NULL, &u16str, &status); + TEST_SUCCESS(status); + + int32_t startMapLimit = sizeof(startMap) / sizeof(int32_t); + int i; + for (i=0; i<startMapLimit; i++) { + utext_setNativeIndex(ut, i); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == startMap[i]); + } + + // Check char32At + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_char32At(ut, i); + TEST_ASSERT(c32 == c32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == startMap[i]); + } + + // Check utext_next32From + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_next32From(ut, i); + TEST_ASSERT(c32 == c32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == nextMap[i]); + } + + // check utext_previous32From + for (i=0; i<startMapLimit; i++) { + UChar32 c32 = utext_previous32From(ut, i); + TEST_ASSERT(c32 == pr32Map[i]); + int64_t cpIndex = utext_getNativeIndex(ut); + TEST_ASSERT(cpIndex == prevMap[i]); + } + + // check Extract + // Extract from i to i+1, which may be zero or one code points, + // depending on whether the indices straddle a cp boundary. + for (i=0; i<startMapLimit; i++) { + UChar buf[3]; + status = U_ZERO_ERROR; + int32_t extractedLen = utext_extract(ut, i, i+1, buf, 3, &status); + TEST_SUCCESS(status); + TEST_ASSERT(extractedLen == exLen[i]); + if (extractedLen > 0) { + UChar32 c32; + U16_GET(buf, 0, 0, extractedLen, c32); + TEST_ASSERT(c32 == c32Map[i]); + } + } + + utext_close(ut); + } +} + + +void UTextTest::FreezeTest() { + // Check isWritable() and freeze() behavior. + // + + UnicodeString ustr("Hello, World."); + const char u8str[] = {char(0x31), (char)0x32, (char)0x33, 0}; + const UChar u16str[] = {(UChar)0x31, (UChar)0x32, (UChar)0x44, 0}; + + UErrorCode status = U_ZERO_ERROR; + UText *ut = NULL; + UText *ut2 = NULL; + + ut = utext_openUTF8(ut, u8str, -1, &status); + TEST_SUCCESS(status); + UBool writable = utext_isWritable(ut); + TEST_ASSERT(writable == FALSE); + utext_copy(ut, 1, 2, 0, TRUE, &status); + TEST_ASSERT(status == U_NO_WRITE_PERMISSION); + + status = U_ZERO_ERROR; + ut = utext_openUChars(ut, u16str, -1, &status); + TEST_SUCCESS(status); + writable = utext_isWritable(ut); + TEST_ASSERT(writable == FALSE); + utext_copy(ut, 1, 2, 0, TRUE, &status); + TEST_ASSERT(status == U_NO_WRITE_PERMISSION); + + status = U_ZERO_ERROR; + ut = utext_openUnicodeString(ut, &ustr, &status); + TEST_SUCCESS(status); + writable = utext_isWritable(ut); + TEST_ASSERT(writable == TRUE); + utext_freeze(ut); + writable = utext_isWritable(ut); + TEST_ASSERT(writable == FALSE); + utext_copy(ut, 1, 2, 0, TRUE, &status); + TEST_ASSERT(status == U_NO_WRITE_PERMISSION); + + status = U_ZERO_ERROR; + ut = utext_openUnicodeString(ut, &ustr, &status); + TEST_SUCCESS(status); + ut2 = utext_clone(ut2, ut, FALSE, FALSE, &status); // clone with readonly = false + TEST_SUCCESS(status); + writable = utext_isWritable(ut2); + TEST_ASSERT(writable == TRUE); + ut2 = utext_clone(ut2, ut, FALSE, TRUE, &status); // clone with readonly = true + TEST_SUCCESS(status); + writable = utext_isWritable(ut2); + TEST_ASSERT(writable == FALSE); + utext_copy(ut2, 1, 2, 0, TRUE, &status); + TEST_ASSERT(status == U_NO_WRITE_PERMISSION); + + status = U_ZERO_ERROR; + ut = utext_openConstUnicodeString(ut, (const UnicodeString *)&ustr, &status); + TEST_SUCCESS(status); + writable = utext_isWritable(ut); + TEST_ASSERT(writable == FALSE); + utext_copy(ut, 1, 2, 0, TRUE, &status); + TEST_ASSERT(status == U_NO_WRITE_PERMISSION); + + // Deep Clone of a frozen UText should re-enable writing in the copy. + status = U_ZERO_ERROR; + ut = utext_openUnicodeString(ut, &ustr, &status); + TEST_SUCCESS(status); + utext_freeze(ut); + ut2 = utext_clone(ut2, ut, TRUE, FALSE, &status); // deep clone + TEST_SUCCESS(status); + writable = utext_isWritable(ut2); + TEST_ASSERT(writable == TRUE); + + + // Deep clone of a frozen UText, where the base type is intrinsically non-writable, + // should NOT enable writing in the copy. + status = U_ZERO_ERROR; + ut = utext_openUChars(ut, u16str, -1, &status); + TEST_SUCCESS(status); + utext_freeze(ut); + ut2 = utext_clone(ut2, ut, TRUE, FALSE, &status); // deep clone + TEST_SUCCESS(status); + writable = utext_isWritable(ut2); + TEST_ASSERT(writable == FALSE); + + // cleanup + utext_close(ut); + utext_close(ut2); +} + + +// +// Fragmented UText +// A UText type that works with a chunk size of 1. +// Intended to test for edge cases. +// Input comes from a UnicodeString. +// +// ut.b the character. Put into both halves. +// + +U_CDECL_BEGIN +static UBool U_CALLCONV +fragTextAccess(UText *ut, int64_t index, UBool forward) { + const UnicodeString *us = (const UnicodeString *)ut->context; + UChar c; + int32_t length = us->length(); + if (forward && index>=0 && index<length) { + c = us->charAt((int32_t)index); + ut->b = c | c<<16; + ut->chunkOffset = 0; + ut->chunkLength = 1; + ut->chunkNativeStart = index; + ut->chunkNativeLimit = index+1; + return true; + } + if (!forward && index>0 && index <=length) { + c = us->charAt((int32_t)index-1); + ut->b = c | c<<16; + ut->chunkOffset = 1; + ut->chunkLength = 1; + ut->chunkNativeStart = index-1; + ut->chunkNativeLimit = index; + return true; + } + ut->b = 0; + ut->chunkOffset = 0; + ut->chunkLength = 0; + if (index <= 0) { + ut->chunkNativeStart = 0; + ut->chunkNativeLimit = 0; + } else { + ut->chunkNativeStart = length; + ut->chunkNativeLimit = length; + } + return false; +} +U_CDECL_END + +// Function table to be used with this fragmented text provider. +// Initialized in the open function. +UTextFuncs fragmentFuncs; + +// Open function for the fragmented text provider. +UText * +openFragmentedUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status) { + ut = utext_openUnicodeString(ut, s, status); + if (U_FAILURE(*status)) { + return ut; + } + + // Copy of the function table from the stock UnicodeString UText, + // and replace the entry for the access function. + memcpy(&fragmentFuncs, ut->pFuncs, sizeof(fragmentFuncs)); + fragmentFuncs.access = fragTextAccess; + ut->pFuncs = &fragmentFuncs; + + ut->chunkContents = (UChar *)&ut->b; + ut->pFuncs->access(ut, 0, TRUE); + return ut; +} + + diff --git a/icuSources/test/intltest/utxttest.h b/icuSources/test/intltest/utxttest.h new file mode 100644 index 00000000..9057a50c --- /dev/null +++ b/icuSources/test/intltest/utxttest.h @@ -0,0 +1,59 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2005-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ +/************************************************************************ +* Tests for the UText and UTextIterator text abstraction classses +* +************************************************************************/ + + +#ifndef UTXTTEST_H +#define UTXTTEST_H + +#include "unicode/utypes.h" +#include "unicode/unistr.h" +#include "unicode/utext.h" + +#include "intltest.h" + +/** + * @test + * @summary Testing the Replaceable class + */ +class UTextTest : public IntlTest { +public: + UTextTest(); + virtual ~UTextTest(); + + void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL); + void TextTest(); + void ErrorTest(); + void FreezeTest(); + +private: + struct m { // Map between native indices & code points. + int nativeIdx; + UChar32 cp; + }; + + void TestString(const UnicodeString &s); + void TestAccess(const UnicodeString &us, UText *ut, int cpCount, m *cpMap); + void TestCMR (const UnicodeString &us, UText *ut, int cpCount, m *nativeMap, m *utf16Map); + void TestCopyMove(const UnicodeString &us, UText *ut, UBool move, + int32_t nativeStart, int32_t nativeLimit, int32_t nativeDest, + int32_t u16Start, int32_t u16Limit, int32_t u16Dest); + void TestReplace(const UnicodeString &us, // reference UnicodeString in which to do the replace + UText *ut, // UnicodeText object under test. + int32_t nativeStart, // Range to be replaced, in UText native units. + int32_t nativeLimit, + int32_t u16Start, // Range to be replaced, in UTF-16 units + int32_t u16Limit, // for use in the reference UnicodeString. + const UnicodeString &repStr); // The replacement string + + +}; + + +#endif diff --git a/icuSources/test/intltest/uvectest.cpp b/icuSources/test/intltest/uvectest.cpp new file mode 100644 index 00000000..e73cb8fc --- /dev/null +++ b/icuSources/test/intltest/uvectest.cpp @@ -0,0 +1,175 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 2004-2006, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ + +// Test parts of UVector and UStack + +#include "intltest.h" + +#include "uvectest.h" +#include "uvector.h" +#include "hash.h" + +#include "cstring.h" + +//--------------------------------------------------------------------------- +// +// Test class boilerplate +// +//--------------------------------------------------------------------------- +UVectorTest::UVectorTest() +{ +} + + +UVectorTest::~UVectorTest() +{ +} + + + +void UVectorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) +{ + if (exec) logln("TestSuite UVectorTest: "); + switch (index) { + + case 0: name = "UVector_API"; + if (exec) UVector_API(); + break; + case 1: name = "UStack_API"; + if (exec) UStack_API(); + break; + case 2: name = "Hashtable_API"; + if (exec) Hashtable_API(); + break; + default: name = ""; + break; //needed to end loop + } +} + + +//--------------------------------------------------------------------------- +// +// Error Checking / Reporting macros used in all of the tests. +// +//--------------------------------------------------------------------------- +#define TEST_CHECK_STATUS(status) \ + if (U_FAILURE(status)) {\ + errln("UVectorTest failure at line %d. status=%s\n", __LINE__, u_errorName(status));\ + return;\ + } + +#define TEST_ASSERT(expr) \ + if ((expr)==FALSE) {\ + errln("UVectorTest failure at line %d.\n", __LINE__);\ + } + +static int8_t +UVectorTest_compareInt32(UHashTok key1, UHashTok key2) { + if (key1.integer > key2.integer) { + return 1; + } + else if (key1.integer < key2.integer) { + return -1; + } + return 0; +} + +U_CDECL_BEGIN +static int8_t U_CALLCONV +UVectorTest_compareCstrings(const UHashTok key1, const UHashTok key2) { + return !strcmp((const char *)key1.pointer, (const char *)key2.pointer); +} +U_CDECL_END + +//--------------------------------------------------------------------------- +// +// UVector_API Check for basic functionality of UVector. +// +//--------------------------------------------------------------------------- +void UVectorTest::UVector_API() { + + UErrorCode status = U_ZERO_ERROR; + UVector *a; + + a = new UVector(status); + TEST_CHECK_STATUS(status); + delete a; + + status = U_ZERO_ERROR; + a = new UVector(2000, status); + TEST_CHECK_STATUS(status); + delete a; + + status = U_ZERO_ERROR; + a = new UVector(status); + a->sortedInsert((int32_t)10, UVectorTest_compareInt32, status); + a->sortedInsert((int32_t)20, UVectorTest_compareInt32, status); + a->sortedInsert((int32_t)30, UVectorTest_compareInt32, status); + a->sortedInsert((int32_t)15, UVectorTest_compareInt32, status); + TEST_CHECK_STATUS(status); + TEST_ASSERT(a->elementAti(0) == 10); + TEST_ASSERT(a->elementAti(1) == 15); + TEST_ASSERT(a->elementAti(2) == 20); + TEST_ASSERT(a->elementAti(3) == 30); + TEST_ASSERT(a->indexOf((int32_t)3) == -1); + TEST_ASSERT(a->indexOf((int32_t)15) == 1); + TEST_ASSERT(a->indexOf((int32_t)15, 2) == -1); + TEST_ASSERT(a->contains((int32_t)15)); + TEST_ASSERT(!a->contains((int32_t)5)); + delete a; +} + +void UVectorTest::UStack_API() { + UErrorCode status = U_ZERO_ERROR; + UStack *a; + + a = new UStack(status); + TEST_CHECK_STATUS(status); + delete a; + + status = U_ZERO_ERROR; + a = new UStack(2000, status); + TEST_CHECK_STATUS(status); + delete a; + + status = U_ZERO_ERROR; + a = new UStack(NULL, NULL, 2000, status); + TEST_CHECK_STATUS(status); + delete a; + + status = U_ZERO_ERROR; + a = new UStack(NULL, UVectorTest_compareCstrings, status); + TEST_ASSERT(a->empty()); + a->push((void*)"abc", status); + TEST_ASSERT(!a->empty()); + a->push((void*)"bcde", status); + a->push((void*)"cde", status); + TEST_CHECK_STATUS(status); + TEST_ASSERT(strcmp("cde", (const char *)a->peek()) == 0); + TEST_ASSERT(a->search((void*)"cde") == 1); + TEST_ASSERT(a->search((void*)"bcde") == 2); + TEST_ASSERT(a->search((void*)"abc") == 3); + TEST_ASSERT(strcmp("abc", (const char *)a->firstElement()) == 0); + TEST_ASSERT(strcmp("cde", (const char *)a->lastElement()) == 0); + TEST_ASSERT(strcmp("cde", (const char *)a->pop()) == 0); + TEST_ASSERT(strcmp("bcde", (const char *)a->pop()) == 0); + TEST_ASSERT(strcmp("abc", (const char *)a->pop()) == 0); + delete a; +} + +void UVectorTest::Hashtable_API() { + UErrorCode status = U_ZERO_ERROR; + Hashtable *a = new Hashtable(status); + TEST_ASSERT((a->puti("a", 1, status) == 0)); + TEST_ASSERT((a->find("a") != NULL)); + TEST_ASSERT((a->find("b") == NULL)); + TEST_ASSERT((a->puti("b", 2, status) == 0)); + TEST_ASSERT((a->find("b") != NULL)); + TEST_ASSERT((a->removei("a") == 1)); + TEST_ASSERT((a->find("a") == NULL)); + delete a; +} + diff --git a/icuSources/test/intltest/uvectest.h b/icuSources/test/intltest/uvectest.h new file mode 100644 index 00000000..84a3e24f --- /dev/null +++ b/icuSources/test/intltest/uvectest.h @@ -0,0 +1,34 @@ +/* +****************************************************************************** +* Copyright (C) 2004, International Business Machines Corporation and * +* others. All Rights Reserved. * +****************************************************************************** +*/ + +// file: uvectest.h + + +#ifndef UVECTEST_H +#define UVECTEST_H + +#include "unicode/utypes.h" + +#include "intltest.h" + + +class UVectorTest: public IntlTest { +public: + + UVectorTest(); + virtual ~UVectorTest(); + + virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ); + + // The following are test functions that are visible from the intltest test framework. + void UVector_API(); + void UStack_API(); + void Hashtable_API(); + +}; + +#endif diff --git a/icuSources/test/intltest/v32test.cpp b/icuSources/test/intltest/v32test.cpp index 7b11f9b4..c668a38c 100644 --- a/icuSources/test/intltest/v32test.cpp +++ b/icuSources/test/intltest/v32test.cpp @@ -27,12 +27,12 @@ //--------------------------------------------------------------------------- UVector32Test::UVector32Test() { -}; +} UVector32Test::~UVector32Test() { -}; +} @@ -413,16 +413,6 @@ void UVector32Test::UVector32_API() { delete a; - // - // RTTI - // - status = U_ZERO_ERROR; - a = new UVector32(status); - TEST_ASSERT(a->getDynamicClassID() == UVector32::getStaticClassID()); - TEST_ASSERT(a->getDynamicClassID() != UVector::getStaticClassID()); - TEST_CHECK_STATUS(status); - delete a; - // // empty // @@ -500,6 +490,6 @@ void UVector32Test::UVector32_API() { TEST_CHECK_STATUS(status); delete a; -}; +} diff --git a/icuSources/test/intltest/wbnf.cpp b/icuSources/test/intltest/wbnf.cpp new file mode 100644 index 00000000..4a43a2cc --- /dev/null +++ b/icuSources/test/intltest/wbnf.cpp @@ -0,0 +1,1771 @@ +/* + ****************************************************************************** + * Copyright (C) 2005-2006, International Business Machines Corporation and * + * others. All Rights Reserved. * + ****************************************************************************** + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> + +#include "wbnf.h" + +// Most of this code is meant to test the test code. It's a self test. +// Normally this isn't run. +#define TEST_WBNF_TEST 0 + +/////////////////////////////////////////////////////////// +// +// Constants and the most basic helper classes +// + +static const char DIGIT_CHAR[] = "0123456789"; +static const char WHITE_SPACE[] = {'\t', ' ', '\r', '\n', 0}; +static const char ALPHABET[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +static const char SPECIAL[] = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + +static inline UBool isInList(const char c /*in*/, const char list[] /*in*/){ + const char * p = list; + for (;*p != 0 && *p != c; p++); + return *p?TRUE:FALSE; +} +static inline UBool isDigit(char c) {return isInList(c, DIGIT_CHAR);} +static inline UBool isWhiteSpace(char c) {return isInList(c, WHITE_SPACE);} +static inline UBool isAlphabet(char c) {return isInList(c, ALPHABET);} +static inline UBool isSpecialAsciiChar(char c) {return isInList(c,SPECIAL);} + + + +/////////////////////////////////////////////////////////// +// +// Helper classes +// + +class Buffer_byte{ +// Utility class, can be treated as an auto expanded array. no boundary check. + + typedef char byte; + byte * start; + byte * current; + int buffer_size; // size unit is byte +public: + inline int content_size(){return current - start;} // size unit is byte + +private: + inline void expand(int add_size = 100){ // size unit is byte + int new_size = buffer_size + add_size; + + int cs_snap = content_size(); + start = (byte *) realloc(start, new_size); // may change the value of start + current = start + cs_snap; + + memset(current, 0, add_size); + buffer_size = new_size; + } + + inline void expand_to(int size){ + int r = size - buffer_size; + if (r > 0) { + expand(r); // simply expand, no block alignment + } + } + Buffer_byte(const Buffer_byte &); + Buffer_byte & operator = (const Buffer_byte &); +public: + Buffer_byte():start(NULL),current(start),buffer_size(0){ + expand(); + } + ~Buffer_byte(){ + free(start); + } + + inline void reset(){ + start != NULL ? memset(start, 0, buffer_size) : 0; + current = start; + } + + // Using memory copy method to append a C array to buffer, + inline void append(const void * c, int size){ // size unit is byte + expand_to(content_size() + size) ; + memcpy(current, c, size); + current = current + size; + } + + byte * buffer(){ + return start; + } +}; + +/* + The class(es) try to work as bulid-in array, so it overloads these two operators + operator type *(); + type & operator[]; + The first is used to auto type convert, the latter is used to select member. + + A small trick is the class does not overload the address-of operator. This + behavior is different from bulid-in array, but it give us the opportunity + to get the address of the class itself. +*/ +//template<typename type> +// class BUFFER{ +// typedef BUFFER name; +#define BUFFER(type, name)\ + class name {\ + private:\ + Buffer_byte buf;\ + public:\ + name & reset() {buf.reset(); return *this;}\ + name & append(type c) {buf.append(&c, sizeof(type)); return *this;}\ + name & append_array(const type * p, int size) {buf.append(p, sizeof(type)*size); return *this;}\ + type & operator [] (int i) { return ((type *) buf.buffer())[i];}\ + operator type *(){return (type *) buf.buffer();} \ + int content_size(){return buf.content_size() / sizeof(type);}\ + } + + +class Pick{ +/* The Pick is the basic language generator element*/ +public: + // generate a string accroding the syntax + // Return a null-terminated c-string. The buffer is owned by callee. + virtual const char* next() = 0; + virtual ~Pick(){}; +}; + +//typedef BUFFER<char> Buffer_char; +//typedef BUFFER<int> Buffer_int; +//typedef BUFFER<Pick *> Buffer_pPick; +BUFFER(char, Buffer_char); +BUFFER(int, Buffer_int); +BUFFER(Pick *, Buffer_pPick); + +class SymbolTable{ +/* Helper class. +* It's a mapping table between 'variable name' and its 'active Pick object' +*/ +private: + Buffer_char name_buffer; // var names storage space + + Buffer_int names; // points to name (offset in name_buffer) + Buffer_pPick refs; // points to Pick + + int get_index(const char *const var_name){ + int len = names.content_size(); + for (int i=0; i< len; i++){ + if (strcmp(var_name, name_buffer + names[i]) == 0){ + return i; + } + } + return -1; + } + +public: + enum RESULT {EMPTY, NO_VAR, NO_REF, HAS_REF}; + + RESULT find(const char *const var_name /*[in] c-string*/, Pick * * ref = NULL /*[out] Pick* */){ + if (!var_name) return EMPTY; // NULL name + + int i = get_index(var_name); + if (i == -1){ + return NO_VAR; // new name + } + if (!refs[i]){ // exist name, no ref + return NO_REF; + } else { + if (ref) { + *ref = refs[i]; + } + return HAS_REF; // exist name, has ref + } + } + + void put(const char *const var_name, Pick *const var_ref = NULL){ + int i = get_index(var_name); + switch(find(var_name)){ + case EMPTY: // NULL name + break; + case NO_VAR: // new name + int offset; + offset = name_buffer.content_size(); + name_buffer.append_array(var_name, strlen(var_name) + 1); + names.append(offset); + refs.append(var_ref); + break; + case NO_REF: // exist name, no ref + refs[i] = var_ref; // link definition with variable + break; + case HAS_REF: // exist name, has ref + if (var_ref){ + refs[i] = var_ref; + } + break; + default: + ; // ASSERT(FALSE); + } + return; + } + + UBool is_complete(){ + int n = names.content_size(); + for (int i=0; i<n; ++i){ + if (refs[i] == NULL){ + return FALSE; + } + } + return TRUE; + } + + void reset(){ + names.reset(); + name_buffer.reset(); + + // release memory here + int s = refs.content_size(); + for (int i=0; i < s; i++){ + delete refs[i]; // TOFIX: point alias/recursion problem + } + refs.reset(); + } + + ~SymbolTable(){ + reset(); + } +}; + + +/* +// Document of class Escaper +// +// ATTENTION: +// From http://icu.sourceforge.net/userguide/Collate_Customization.html. +// We get the precedence of escape/quote operations +// +// (highest) 1. backslash \ +// 2. two single quotes '' +// 3. quoting ' ' +// +// ICU Collation should accept following as the same string. +// +// 1) 'ab'c _ +// 2) a\bc \ +// 3) a'b'\c |- They are equal. +// 4) abc _/ +// +// From "two single quotes", we have following deductions +// D1. empty quoting is illgal. (obviously) +// D2. no contact operation between two quotings +// '.''.' is not .. it is .'. +// D3. "two single quotes" cannot contact two quoting simultaneously +// '..''''.' is not ..'. it is ..''. +// NOTICE: +// "two single quotes" can contact before one quoting +// '''.' is '. +// "two single quotes" can literally contact after one quoting +// But, from syntax, it's one quoting including a "two single quotes" +// '.''' is .' +// D4. "two single quotes" cannot solely be included in quoting +// '''' is not ' it is '' +// NOTICE: These are legal +// '.''.' is .'. +// '.''' is .' +// +// dicision +// /\ +// /__\ +// output buffer input buffer +// +// To make our dicision (within an atom operation) without caring input and output buffer, +// following calling pattern (within an atom operation) shall be avoided +// +// P1 open_quoting() then close_quoting() (direct violation) D1 +// P2 close_quoting() then open_quoting() (direct violation) D2 +// P3 empty open_quoting() (indirect violation) D1, D4 +// P4 empty close_quoting() (indirect violation) D2, D3 +// P5 open_quoting() then two single quotes (indirect violation) D4 +// P6 close_quoting() then two single quotes (indirect violation) D3 +// +// two single quotes escaping will not open_ or close_ quoting() +// The choice will not lose some quoing forms. +// +// For open_quoting(), +// we may get this form quoting ''' P5 +// It may raise a bug ''''x +// If we expect +// '''.' let the next char open the quoting +// '.''.' the quoting is already opened by preceding char +// +// For close_quoting() +// we will get this form quoting '.''' P6 +// It may raise a bug '.''''.' +// If we expect +// '.'''\. let the next char close the quoting +// '.''''.' the expectation is wrong! using '.'\''.' instead +// +// It's a hard work to re-adjust generation opportunity for various escaping form. +// We just simply ignore it. +*/ +class Escaper{ +public: + enum CHOICE {YES, NO, RAND}; + enum ESCAPE_FORM {BSLASH_ONLY, QUOTE_ONLY, QUOTE_AND_BSLAH, RAND_ESC}; +private: + class Bool{ // A wrapper class for CHOICE, to auto adapter UBool class + private: + const CHOICE tag; + public: + Bool(CHOICE flag=RAND):tag(flag){} + operator UBool() { // conversion operator + return tag == RAND ? rand()%2 : tag == YES; + //if (tag == RAND){ + // return rand()%2 == 1; + //} else { + // return tag == YES ? TRUE : FALSE; + //} + } + }; +public: + Escaper(CHOICE escapeLiteral = RAND, + CHOICE twoQuotesEscape = RAND, + ESCAPE_FORM escapeForm = RAND_ESC): + escape_form(escapeForm), + escape_literal(escapeLiteral), + two_quotes_escape(twoQuotesEscape), + is_quoting(FALSE){} +private: + Buffer_char str; + ESCAPE_FORM escape_form; + Bool escape_literal; + Bool two_quotes_escape; + UBool quote_escape; + UBool bslash_escape; + UBool is_quoting; + + void set_options(){ + ESCAPE_FORM t = escape_form == RAND_ESC ? (ESCAPE_FORM) (rand()%3) : escape_form; + switch (t){ + case BSLASH_ONLY : + bslash_escape = TRUE; quote_escape = FALSE; break; + case QUOTE_ONLY: + bslash_escape = FALSE;quote_escape = TRUE; break; + case QUOTE_AND_BSLAH: + bslash_escape = TRUE; quote_escape = TRUE; break; + default: + ;// error + } + } + + void reset(){ + str.reset(); + is_quoting = FALSE; + } + + inline void open_quoting(){ + if(is_quoting){ + // do nothing + } else { + str.append('\''); + is_quoting = TRUE; + } + } + inline void close_quoting(){ + if(is_quoting){ + str.append('\''); + is_quoting = FALSE; + } else { + // do nothing + } + } + + // str [in] null-terminated c-string + void append(const char * strToAppend){ + for(;*strToAppend != 0; strToAppend++){ + append(*strToAppend); + } + } + + inline void append(const char c){ + set_options(); + + if (c == '\\'){ + quote_escape ? open_quoting() : close_quoting(); + //bslash_escape always true here + str.append('\\'); + str.append('\\'); + } else if (c == '\''){ + if (two_quotes_escape){ // quoted using two single quotes + // See documents in anonymous.design + str.append('\''); + str.append('\''); + } else{ + quote_escape ? open_quoting() : close_quoting(); + //bslash_escape always true here + str.append('\\'); + str.append('\''); + } + } else if (isSpecialAsciiChar(c) || isWhiteSpace(c)){ + quote_escape ? open_quoting() : close_quoting(); + if (bslash_escape) str.append('\\'); + str.append(c); + } else { //if (isAlphabet(c) || isDigit(c) || TRUE){ // treat others as literal + if (escape_literal){ + quote_escape ? open_quoting() : close_quoting(); + if (bslash_escape) str.append('\\'); + str.append(c); + } else { + close_quoting(); + str.append(c); + } + } + } + +public: + // Return a null-terminate c-string. The buffer is owned by callee. + char * operator()(const char * literal /*c-string*/){ + str.reset(); + for(;*literal != 0; literal++){ + append(*literal); + } + close_quoting(); // P4 exception, to close whole quoting + return str; + } +}; + +class WeightedRand{ +// Return a random number in [0, size) +// Every number has different chance (aka weight) to be selected. +private: + Buffer_int weights; + double total; + WeightedRand(const WeightedRand &); + WeightedRand & operator = (const WeightedRand &); +public: + WeightedRand(Buffer_int * weight_list = NULL, int size = 0){ + if ( weight_list == NULL){ + for (int i=0; i<size; ++i) weights.append(DEFAULT_WEIGHT); + } else { + int s = weight_list->content_size(); + if (s < size){ + weights.append_array( (*weight_list),s); + for (int i=s; i<size; ++i) weights.append(DEFAULT_WEIGHT); + } else { // s >= size + weights.append_array( (*weight_list),size); + } + } + total = 0; + int c = weights.content_size(); + for (int i=0; i<c; ++i){ + total += weights[i]; + } + } + + void append(int weight){ + weights.append(weight); + total += weight; + } + + // Give a random number with the consideration of weight. + // Every random number is associated with a weight. + // It identifies the chance to be selected, + // larger weight has more chance to be selected. + // + // + // ______________________ every slot has equal chance + // + // [____][_][___][______] each item has different slots, hence different chance + // + // + // The algorithms to generate the number is illustrated by preceding figure. + // First, a slot is selected by rand(). Then we translate the slot to corresponding item. + // + int next(){ + // get a random in [0,1] + double reference_mark = (double)rand() / (double)RAND_MAX; + + // get the slot's index, 0 <= mark <= total; + double mark = total * reference_mark; + + // translate the slot to corresponding item + int i=0; + for (;;){ + mark -= weights[i]; // 0 <= mark <= total + if (mark <= 0) + break; + i++; + } + return i; + } +}; + +/////////////////////////////////////////////////////////// +// +// The parser result nodes +// + +class Literal : public Pick { +public: + virtual const char* next(){ + return str; + } + Literal(const char * s /*c-string*/){ + str.append_array(s, strlen(s) + 1); + } +private: + Buffer_char str; //null-terminated c-string +}; + +class Variable : public Pick { +public: + Variable(SymbolTable * symbols, const char * varName, Pick * varRef = NULL){ + this->var_name.append_array(varName, strlen(varName) + 1); + if ((symbol_table = symbols)){ + symbol_table->put(varName, varRef); + } + } + + operator const char *(){ + return var_name; + } + + virtual const char* next(){ + if (symbol_table){ + Pick * var_ref = NULL; + symbol_table->find(var_name, &var_ref); + if (var_ref) { + return var_ref->next(); + } + } + return ""; // dumb string + } +private: + Buffer_char var_name; + SymbolTable * symbol_table; +}; + +class Quote : public Pick{ +public: + Quote(Pick & base):item(base),e(Escaper::NO, Escaper::NO, Escaper::BSLASH_ONLY){ + } + virtual const char* next(){ + return e(item.next()); + } +private: + Pick & item; + Buffer_char str; + Escaper e; +}; + + +class Morph : public Pick{ +/* +The difference between morph and an arbitrary random string is that +a morph changes slowly. When we build collation rules, for example, +it is a much better test if the strings we use are all in the same +'neighborhood'; they share many common characters. +*/ +public: + Morph(Pick & base):item(base){} + + virtual const char* next(){ + current.reset(); + const char * s = item.next(); + current.append_array(s, strlen(s) + 1); + if (last.content_size() == 0) { + str.reset(); + last.reset(); + str.append_array(current, current.content_size()); + last.append_array(current, current.content_size()); + } else { + morph(); + } + return str; + } +private: + Pick & item; + Buffer_char str; + Buffer_char last; + Buffer_char current; + + char * p_last; + char * p_curr; + + void copy_curr(){ + if (*p_curr) { + str.append(*p_curr); + p_curr++; + } + } + + void copy_last(){ + if (*p_last) { + str.append(*p_last); + p_last++; + } + } + + // copy 0, 1, or 2 character(s) to str + void copy(){ + static WeightedRand wr(& Buffer_int().append(DEFAULT_WEIGHT * 10), 5); + + switch (wr.next()){ + case 0: // copy last -- has 10 times chance than others + copy_last(); + break; + case 1: // copy both + copy_curr(); + copy_last(); + break; + case 2: // copy both + copy_last(); + copy_curr(); + break; + case 3: + copy_curr(); + break; + case 4: // copy nothing + break; + default: + // ASSERT(FALSE); + ; + } + } + + void morph(void){ + int min = strlen(last); + int max = strlen(current); + if (min > max){ + int temp = min; + min = max; + max = temp; + } + + int len = min + rand()%(max - min + 1); // min + [0, diff] + p_curr = current; + p_last = last; + str.reset(); + + for (; str.content_size()<len && *p_curr && *p_last;){ + copy(); // copy 0, 1, or 2 character(s) to str + } + + if (str.content_size() == len) { + str.append(0); + final(); + return; + } + + if (str.content_size() > len) { // if the last copy copied two characters + str[len]=0; + final(); + return; + } + + // str.content_size() < len + if (*p_last) { + for (; str.content_size() < len; copy_last()); + } else if (*p_curr){ + for (; str.content_size() < len; copy_curr()); + } + + int last_len = last.content_size(); + for (;str.content_size() < len;){ + str.append(last[rand()%last_len]); + } + str.append(0); + final(); + } + + void final(){ + last.reset(); + last.append_array(current, current.content_size()); + } +}; + +class Sequence : public Pick { +public: + virtual const char* next(){ + str.reset(); + int s = items.content_size(); + for(int i=0; i < s; i++){ + const char * t = items[i]->next(); + str.append_array(t, strlen(t)); + } + str.append(0); // terminal null + return str; + } + + void append (Pick * node){ + items.append(node); + } + + virtual ~Sequence(){ + int s = items.content_size(); + for(int i=0; i < s; i++){ + //How can assure the item is got from heap? + //Let's assume it. + delete items[i]; // TOFIX: point alias/recursion problem + items[i] = NULL; + } + } +private: + Buffer_pPick items; + Buffer_char str; //null-terminated c-string +}; + +class Repeat : public Pick { +private: + Pick * item; + Buffer_char str; + WeightedRand wr; + int min; + int max; + int select_a_count(){ + return min + wr.next(); + } +public: + virtual const char* next(){ + str.reset(); + int c = select_a_count(); + for(int i=0; i< c; i++){ + const char * t = item->next(); + str.append_array(t, strlen(t)); + } + str.append(0); + return str; + } + + Repeat(Pick * base, int minCount =0, int maxCount = 1, Buffer_int * weights = NULL): + wr(weights, maxCount-minCount +1) { + this->item = base; + this->min = minCount; + this->max = maxCount; + } + virtual ~Repeat(){ + delete item; // TOFIX: point alias/recursion problem + item = NULL; + } +}; + + +class Alternation : public Pick { +public: + virtual const char* next(){ + str.reset(); + int i = wr.next(); + const char * t = items[i]->next(); + str.append_array(t, strlen(t) + 1); + return str; + } + virtual ~Alternation(){ + int s = items.content_size(); + for(int i=0; i < s; i++){ + delete items[i]; // TOFIX: point alias/recursion problem + items[i] = NULL; + } + } + + Alternation & append (Pick * node, int weight = DEFAULT_WEIGHT){ + items.append(node); + wr.append(weight); + return *this; + } +private: + Buffer_pPick items; + Buffer_char str; // null-terminated c-string + WeightedRand wr; +}; + +/////////////////////////////////////////////////////////// +// +// The parser +// + +enum TokenType {STRING, VAR, NUMBER, STREAM_END, ERROR, QUESTION, STAR, PLUS, LBRACE, RBRACE, LPAR, RPAR, SEMI, EQ, COMMA, BAR, AT, WAVE, PERCENT}; + +class Scanner{ +friend int DumpScanner(Scanner & s, UBool dumb); +private: + const char * source; + const char * working; + const char * history; // for debug + enum StateType {START, IN_NUM, IN_VAR_FIRST, IN_VAR, IN_QUOTE, IN_QUOTE_BSLASH, IN_BSLASH, IN_STRING, DONE}; + StateType state; + void terminated(TokenType t){ + working--; // return the peeked character + tokenType = t; + token.append(0); // close buffer + state = DONE; + } +public: + // the buffer of "source" is owned by caller + Scanner(const char *src/*[in] c-string*/ = NULL):source(src){ + working = src; + history = working; + state = DONE; + tokenType = ERROR; + } + + //void setSource(const char *const src /*[in] c-string*/){ + // *(&const_cast<const char *>(source)) = src; + //} + + Buffer_char token; + TokenType tokenType; + + TokenType getNextToken(){ + token.reset(); + state = START; + history = working; // for debug + while (state != DONE){ + char c = *working++; + if (c == 0 && state != START){//avoid buffer overflow. for IN_QUOE, IN_ESCAPE + terminated(ERROR); + break; // while + } + switch(state){ + case START: + tokenType = ERROR; + switch(c){ + case '?' : tokenType = QUESTION; break; + case '*' : tokenType = STAR; break; + case '+' : tokenType = PLUS; break; + case '{' : tokenType = LBRACE; break; + case '}' : tokenType = RBRACE; break; + case '(' : tokenType = LPAR; break; + case ')' : tokenType = RPAR; break; + case ';' : tokenType = SEMI; break; + case '=' : tokenType = EQ; break; + case ',' : tokenType = COMMA; break; + case '|' : tokenType = BAR; break; + case '@' : tokenType = AT; break; + case '~' : tokenType = WAVE; break; + case '%' : tokenType = PERCENT; break; + case 0 : tokenType = STREAM_END; working-- /*avoid buffer overflow*/; break; + } + if (tokenType != ERROR){ + token.append(c); + token.append(0); + state = DONE; + break; // START + } + switch(c){ + case '$' : state = IN_VAR_FIRST; token.append(c); break; + case '\'' : state = IN_QUOTE; break; + case '\\' : state = IN_BSLASH; break; + default: + if (isWhiteSpace(c)){ // state = START; //do nothing + } else if (isDigit(c)){ state = IN_NUM; token.append(c); + } else if (isAlphabet(c)){ state = IN_STRING; token.append(c); + } else {terminated(ERROR);} + } + break;//START + case IN_NUM: + if (isDigit(c)){ + token.append(c); + } else { + terminated(NUMBER); + } + break;//IN_NUM + case IN_VAR_FIRST: + if (isAlphabet(c)){ + token.append(c); + state = IN_VAR; + } else { + terminated(ERROR); + } + break; // IN_VAR_FISRT + case IN_VAR: + if (isAlphabet(c) || isDigit(c)){ + token.append(c); + } else { + terminated(VAR); + } + break;//IN_VAR + case IN_STRING: + // About the scanner's behavior for STRING, AT, and ESCAPE: + // All of them can be contacted with each other. + // This means the scanner will eat up as much as possible strings + // (STRING, AT, and ESCAPE) at one time, with no regard of their + // combining sequence. + // + if (c == '\''){ + state = IN_QUOTE; // the first time we see single quote + } else if (c =='\\'){ // back slash character + state = IN_BSLASH; + } else if (isAlphabet(c) || isDigit(c)){ + token.append(c); + } else{ + terminated(STRING); + } + break;//IN_STRING + case IN_QUOTE: + if (c == '\''){ // the second time we see single quote + state = IN_STRING; // see document in IN_STRING + } else if ( c== '\\') { // backslah escape in quote + state = IN_QUOTE_BSLASH; + } else { + token.append(c); // eat up everything, includes back slash + } + break;//IN_QUOTE + case IN_QUOTE_BSLASH: + case IN_BSLASH: + switch (c){ + case 'n' : token.append('\n'); break; + case 'r' : token.append('\r'); break; + case 't' : token.append('\t'); break; + case '\'' : token.append('\''); break; + case '\\' : token.append('\\'); break; + default: token.append(c); // unknown escaping, treat it as literal + } + if (state == IN_BSLASH){ + state = IN_STRING; // see document in IN_STRING + } else { // state == IN_QUOTE_BSLASH + state = IN_QUOTE; + } + break;//IN_BSLASH + case DONE: /* should never happen */ + default: + working--; + tokenType = ERROR; + state = DONE; + break; + }//switch(state) + }//while (state != DONE) + + return tokenType; + } +};//class Scanner + +class Parser{ +friend UBool TestParser(); +friend class TestParserT; +friend class LanguageGenerator_impl; +private: + Scanner s; + TokenType & token; + int min_max; // for the evil infinite + + UBool match(TokenType expected){ + if (token == expected) { + token = s.getNextToken(); + return TRUE; + } else { + //s.dumpCurrentPoint(); + return FALSE; + } + } + + UBool weight(int & value){ + if (token == NUMBER){ + int temp = atoi(s.token); + match(NUMBER); + if (match(PERCENT)){ + value = temp; + return TRUE; + } + } + return FALSE; + } + + UBool repeat (Pick* &node /*in,out*/){ + if (node == NULL) return FALSE; + + int count = -2; + int min = -2; + int max = -2; + UBool question = FALSE; + switch (token){ + case QUESTION: + match(QUESTION); + min = 0; + max = 1; + count = 2; + question = TRUE; + break; + case STAR: + match(STAR); + min = 0; + max = -1; + count = -1; + break; + case PLUS: + match(PLUS); + min = 1; + max = -1; + count = -1; + break; + case LBRACE: + match(LBRACE); + if (token != NUMBER){ + return FALSE; + }else { + min = atoi(s.token); + match(NUMBER); + if (token == RBRACE){ + match(RBRACE); + max = min; + count = 1; + } else if (token == COMMA) { + match(COMMA); + if (token == RBRACE){ + match(RBRACE); + max = -1; + count = -1; + } else if (token == NUMBER) { + max = atoi(s.token); + match(NUMBER); + count = max - min + 1; + if (!match(RBRACE)) { + return FALSE; + } + } else { + return FALSE; + } + } else { + return FALSE; + } + } + break; + default: + return FALSE; + } + + if (count == -2 || min == -2 || max == -2){ + //ASSERT(FALSE); + return FALSE; + } + + // eat up following weights + Buffer_int weights; + int w; + while (weight(w)){ + weights.append(w); + } + + // for the evil infinite + min_max = min_max > min ? min_max : min; + min_max = min_max > max ? min_max : max; + if (min_max > PSEUDO_INFINIT){ + return FALSE; // PSEUDO_INFINIT is less than the real maximum + } + if (max == -1){ // the evil infinite + max = PSEUDO_INFINIT; + } + // for the strange question mark + if (question && weights.content_size() > 0){ + Buffer_int w2; + w2.append(DEFAULT_WEIGHT - weights[0]).append(weights[0]); + node = new Repeat(node,min,max,&w2); + return TRUE; + } + node = new Repeat(node,min,max,&weights); + return TRUE; + } + + UBool core(Pick* &node /*out*/){ + if (node != NULL) return FALSE; //assert node == NULL + + switch(token){ + case LPAR: + match(LPAR); + if(defination(node) && match(RPAR)){ + return TRUE; + } + return FALSE; + case VAR: + node = new Variable(&symbols, s.token); + match(VAR); + return TRUE; + case STRING: + node = new Literal(s.token); + match(STRING); + return TRUE; + default: + return FALSE; + } + } + UBool modified(Pick* &node /*out*/){ + if (node != NULL) return FALSE; //assert node == NULL + + if (!core(node)) { + return FALSE; + } + + for (;;){ + switch(token){ + case WAVE: + match(WAVE); + node = new Morph(*node); + break; + case AT: + match(AT); + node = new Quote(*node); + break; + case QUESTION: + case STAR: + case PLUS: + case LBRACE: + if (!repeat(node)) return FALSE; + break; + case SEMI: // rule definiation closed + case RPAR: // within parenthesis (core closed) + case BAR: // in alternation + case NUMBER: // in alternation, with weight + case LPAR: // in sequence + case VAR: // in sequence + case STRING: // in sequence + return TRUE; + default: + return FALSE; + } + } + } + + + UBool sequence_list(Pick* &node /*in,out*/){ + if (node == NULL) return FALSE; // assert node != NULL + + Sequence* seq = new Sequence(); + Pick * n = node; + + while (token == VAR || token == STRING || token == LPAR){ + seq->append(n); + n = NULL; + if (modified(n)){ + // go on + } else { + goto FAIL; + } + } + + if (token == SEMI || token == RPAR || token == BAR){ + seq->append(n); + node = seq; + return TRUE; + } +FAIL: + delete seq; + return FALSE; + + } + + UBool sequence(Pick* &node /*out*/){ + if (node != NULL) return FALSE; //assert node == NULL + + if (!modified(node)) { + return FALSE; + } + + if (token == VAR || token == STRING || token == LPAR){ + return sequence_list(node); + } else { + return TRUE; // just a modified + } + } + + UBool alternation_list(Pick* &node /*in,out*/){ + if (node == NULL) return FALSE; // assert node != NULL + + Alternation * alt = new Alternation(); + Pick * n = node; + int w = DEFAULT_WEIGHT; + + while (token == NUMBER || token == BAR){ + if(token == NUMBER) { + if (weight(w)){ + if (token == BAR){ + // the middle item, go on + } else { + // the last item or encounter error + break; //while + } + } else { + goto FAIL; + } + } // else token == BAR + match(BAR); + alt->append(n,w); + + n = NULL; + w = DEFAULT_WEIGHT; + if (sequence(n)){ + // go on + } else { + goto FAIL; + } + } + + if (token == SEMI || token == RPAR) { + alt->append(n,w); + node = alt; + return TRUE; + } +FAIL: + delete alt; + return FALSE; + } + + UBool alternation(Pick* &node /*out*/){ + if (node != NULL) return FALSE; //assert node == NULL + + // 'sequence' has higher precedence than 'alternation' + if (!sequence(node)){ + return FALSE; + } + + if (token == BAR || token == NUMBER){ // find a real alternation1, create it. + return alternation_list(node); + } else { + return TRUE; // just a sequence_old + } + } + + + UBool defination(Pick* &node /*out*/){ + if (node != NULL) return FALSE; //assert node == NULL + return alternation(node); + } + + UBool rule(){ + if (token == VAR){ + Buffer_char name; + name.append_array(s.token, strlen(s.token) + 1); + match(VAR); + + if (match(EQ)){ + Pick * t = NULL; + if(defination(t)){ + symbols.put(name, t); + return match(SEMI); + } + } + } + return FALSE; + } +public: + UBool rules(){ + symbols.reset(); + token = s.getNextToken(); + while (rule()){ + } + if (token == STREAM_END){ + return TRUE; + } else { + //s.dumpCurrentPoint(); + return FALSE; + } + } + +public: + SymbolTable symbols; + + Parser(const char *const source):s(source), token(s.tokenType){ + min_max = -2; + } + UBool parse(){ + return rules(); + } + +}; // class Parser + + +/////////////////////////////////////////////////////////// +// +// +// + +int DumpScanner(Scanner & s, UBool dump = TRUE){ + int len = strlen(s.source); + int error_start_offset = s.history - s.source; + if (dump){ + printf("\n=================== DumpScanner ================\n"); + fwrite(s.source, len, 1, stdout); + printf("\n-----parsed-------------------------------------\n"); + fwrite(s.source, s.history - s.source, 1, stdout); + printf("\n-----current------------------------------------\n"); + fwrite(s.history, s.working - s.history, 1, stdout); + printf("\n-----unparsed-----------------------------------\n"); + fwrite(s.working, (s.source + len - s.working), 1, stdout); + printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); + } + return error_start_offset; +} + +class LanguageGenerator_impl{ +public: + LanguageGenerator_impl(const char *const bnf_definition, const char *const top_node) + :par(bnf_definition), top_node_name(top_node){ + srand((unsigned)time( NULL )); + } + + LanguageGenerator::PARSE_RESULT parseBNF(UBool debug = TRUE){ + if (par.parse()){ + if (par.symbols.find(top_node_name, &top_node_ref) == SymbolTable::HAS_REF) { + if (par.symbols.is_complete()) { + return LanguageGenerator::OK; + } else { + if (debug) printf("The bnf definition is incomplete.\n"); + return LanguageGenerator::INCOMPLETE; + } + } else { + if (debug) printf("No top node is found.\n"); + return LanguageGenerator::NO_TOP_NODE; + } + } else { + if(debug) { + printf("The bnf definition is wrong\n"); + DumpScanner(par.s, TRUE); + } + return LanguageGenerator::BNF_DEF_WRONG; + } + } + const char * next(){ + return top_node_ref->next(); + } + +private: + Parser par; + const char *const top_node_name; + Pick * top_node_ref; +}; + +LanguageGenerator::LanguageGenerator():lang_gen(NULL){ +} + +LanguageGenerator::~LanguageGenerator(){ + delete lang_gen; +} + +LanguageGenerator::PARSE_RESULT LanguageGenerator::parseBNF(const char *const bnf_definition /*in*/, const char *const top_node/*in*/, UBool debug){ + if (lang_gen){ + delete lang_gen; + } + lang_gen = new LanguageGenerator_impl(bnf_definition, top_node); + PARSE_RESULT r = lang_gen->parseBNF(debug); + if (r != OK){ + delete lang_gen; + lang_gen = NULL; + return r; + } else { + return r; + } +} +const char *LanguageGenerator::next(){ // Return a null-terminated c-string. The buffer is owned by callee. + if (lang_gen){ + return lang_gen->next(); + }else { + return ""; + } +} + +/////////////////////////////////////////////////////////// +// +// The test code for WBNF +// + +#define CALL(fun) \ + if (fun()){ \ + printf("Pass: " #fun "\n");\ + } else { \ + printf("FAILED: !!! " #fun " !!!\n"); \ + } + +#define DUMP_R(fun, var, times) \ + {printf("\n========= " #fun " =============\n"); \ + for (int i=0; i<times; i++) { \ + const char * t = var.next();\ + fwrite(t,strlen(t),1,stdout); \ + printf("\n"); \ + } \ + printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");} + + + +#if TEST_WBNF_TEST +static UBool TestQuote(){ + const char *const str = "This ' A !,z| qq [] .new\tline"; + //const char *const str_r = "This \\' A '!,'z'|' qq '[]' '.'new\tline"; + //// + //// :( we must quote our string to following C syntax + //// cannot type the literal here, it makes our code rather human unreadable + //// very very unconformable! + //// + ///* + //*/ + + //const char *const s1 = "ab'c"; + //const char (* s1_r1) [] = { "ab''c", // ab''c + // "ab\\'c", // ab\'c + // };// + ///* + // . '.' \. + // .. \.\. '.'\. '.'\. '..' // '.''.' wrong + //*/ + + //const char *const s2 = "a..'.b"; // a..'.b + //const char (*s2_r) [] = { "a'..''.'b" // a'..''.'b + // ,"a'..\\'.'b" // a'..\'.'b + // ,"a'..'\\''.'b" // a'..'\''.'b + // };// + + //const char *const s3 = "a..\\.b"; // a..\.b + //const char (*s3_r) [] = { "a'..\\\\.'b" // a'..\\.'b + // ,"a'..'\\\\'.'b" // a'..'\\'.'b + // };// + + // // no catact operation, no choice, must be compact + + srand((unsigned)time( NULL )); + + //Escaper l(Escaper::NO, Escaper::NO, Escaper::RAND_ESC); + Pick *p = new Literal(str); + Quote q(*p); + + DUMP_R(TestQuote, (*p), 1); + DUMP_R(TestQuote, q, 20); + return FALSE; +} +static UBool TestLiteral(){ + const char * s = "test string99."; + Literal n(s); + const char * r = n.next(); + return strcmp(s,r) == 0; +} + +static UBool TestSequence(){ + Sequence seq; + seq.append(new Literal("abc ")); + seq.append(new Literal(", s")); + + return strcmp(seq.next(), "abc , s") == 0; +} +static UBool TestAlternation(){ + srand((unsigned)time( NULL )); + Alternation alt; + alt.append(new Literal("aaa_10%"),10); + alt.append(new Literal("bbb_0%"),0); + alt.append(new Literal("ccc_10%"),10); + alt.append(new Literal("ddddddd_50%"),50); + + DUMP_R(TestAlternation, alt, 50); + + return FALSE; +} + +static UBool TestBuffer(){ + Buffer_int t; + t.append(1).append(0).append(5); + int s = t.content_size(); + for (int i=0; i<s; ++i){ + printf("%d\n", t[i]); + } + return FALSE; +} + +static UBool TestWeightedRand(){ + srand((unsigned)time( NULL )); + Buffer_int t; + t.append(1).append(0).append(5); + WeightedRand wr(&Buffer_int().append(10).append(0).append(50),4); +// WeightedRand wr(&t,3); + for (int i=0; i< 50; ++i){ + printf("%d\n", wr.next()); + } + return FALSE; +} + +static UBool TestRepeat(){ + srand((unsigned)time( NULL )); + Repeat rep(new Literal("aaa1-5 "), 1, 5); + DUMP_R(TestRepeat, rep, 50); + + Repeat r2(new Literal("b{1,3}1%0%5% "), 1, 3, &Buffer_int().append(1).append(0).append(5)); + DUMP_R(TestRepeat, r2, 50); + + Repeat r3(new Literal("aaa5-5 "), 5, 5); + DUMP_R(TestRepeat, r3, 50); + + return FALSE; +} + +static UBool TestVariable(){ + SymbolTable tab; + Pick * value = new Literal("string1"); + Variable var1(&tab, "x", value); + + Variable var2(&tab, "y"); +// tab.put(var2, value); // TOFIX: point alias/recursion problem + Pick * value2 = new Literal("string2"); + tab.put(var2, value2); + + Pick * value3 = new Literal("string3"); + Variable var3(&tab, "z"); + tab.put("z", value3); + + UBool pass; + pass = strcmp(var1.next(), value->next()) == 0; + pass = pass && strcmp(var2.next(), value2->next()) == 0; + pass = pass && strcmp(var3.next(), value3->next()) == 0; + return pass; +} + +static UBool TestSymbolTable(){ + Literal * n1 = new Literal("string1"); + Literal * n2 = new Literal("string2"); + SymbolTable t; + t.put("abc", n1); + t.put("$aaa", n2); +// t.put("alias", n1); // TOFIX: point alias/recursion problem + t.put("bbb"); + + UBool pass; + pass = t.find(NULL) == SymbolTable::EMPTY; + pass = pass && t.find("ccc") == SymbolTable::NO_VAR; + pass = pass && t.find("bbb") == SymbolTable::NO_REF; + pass = pass && t.find("abc") == SymbolTable::HAS_REF; + pass = pass && t.find("$aaa") == SymbolTable::HAS_REF; + + t.reset(); + pass = pass && t.find("abc") == SymbolTable::NO_VAR; + return pass; +} + + +static UBool TestScanner(void){ + //const char str1[] = "$root = $command{0,5} $reset $mostRules{1,20};"; + //const char str1_r[][20] = {"$root", "=", "$command", "{", "0", ",", "5", "}", + // "$reset", "$mostRules", "{", "1", ",", "20", "}", ";"}; + + const char str2[] = "$p2 =(\\\\ $s $string $s)? 25%;"; + const char str2_r[][20] = {"$p2", "=", "(", "\\", "$s", "$string", "$s", ")", "?", "25", "%", ";"}; + + const char *str = str2; + const char (*str_r)[20] = str2_r; + int tokenNum = sizeof(str2_r)/sizeof(char[20]); + + Scanner t(str); + UBool pass = TRUE; + t.getNextToken(); + int i = 0; + while (pass){ + if (t.tokenType == STREAM_END){ + pass = pass? i == tokenNum : FALSE; + break;//while + } else if (t.tokenType == ERROR){ + pass = FALSE; + break;//while + } else { + pass = strcmp( &(t.token[0]), str_r[i++]) == 0; + t.getNextToken(); + } + } + + //const char ts[] = "$commandList = '['" + //" ( alternate ' ' $alternateOptions" + //" | backwards ' 2'" + //" | normalization ' ' $onoff " + //" | caseLevel ' ' $onoff " + //" | hiraganaQ ' ' $onoff" + //" | caseFirst ' ' $caseFirstOptions" + //" | strength ' ' $strengthOptions" + //" ) ']';" ; + + //Scanner t2(ts); + //pass = TRUE; + //do { + // t2.getNextToken(); + // if (t2.tokenType == ERROR){ + // DumpScanner(t2); + // return FALSE; + // } + //}while (t.tokenType != STREAM_END); + + return pass; +} + +class TestParserT { +public: +UBool operator () (const char *const str, const int exp_error_offset = -1, const UBool dump = TRUE){ + Parser par(str); + if (par.rules()){ + if ( exp_error_offset == -1){ + return TRUE; + }else { + DumpScanner(par.s,dump); + return FALSE; + } + }else { + return DumpScanner(par.s, dump) == exp_error_offset; + } +} +}; + +UBool TestParser(){ + TestParserT test; + + UBool pass = TRUE; + pass = pass && test ("$s = ' ' ? 50%;"); + pass = pass && test("$x = ($var {1,2}) 3%;"); // legal + pass = pass && test("$x = $var {1,2} 3% | b 4%;"); // legal + pass = pass && test("$x = $var {1,2} 3%;"); // legal + pass = pass && test("$m = $c ? 2% 4% | $r 5% | $n 25%;"); // legal + pass = pass && test("$a = b ? 2% | c 5%;"); // legal + pass = pass && test("$x = A B 5% C 10% | D;", 8, FALSE); // illegal 5% + pass = pass && test("$x = aa 45% | bb 5% cc;", 19, FALSE);// illegal cc + pass = pass && test("$x = (b 5%) (c 6%);"); // legal + pass = pass && test("$x = (b 5%) c 6%;", 13, FALSE); // illegal 6% + pass = pass && test("$x = b 5% (c 6%);", 9, FALSE); // illegal (c 6%) + pass = pass && test("$x = b 5% c 6%;", 9, FALSE); // illegal c 6% + pass = pass && test("$x = b 5%;"); // legal + pass = pass && test("$x = aa 45% | bb 5% cc;", 19, FALSE);// illegal cc + pass = pass && test("$x = a | b | c 4% | d 5%;"); // legal + pass = pass && test("$s = ' ' ? 50% abc;"); // legal + pass = pass && test("$s = a | c d | e f;"); // legal + pass = pass && test( "$z = q 0% | p 1% | r 100%;"); // legal How to check parsed tree?? + + pass = pass && test("$s = ' ' ? 50%;"); + pass = pass && test("$relationList = '<' | '<<' | ';' | '<<<' | ',' | '=';"); + pass = pass && test("$p1 = ($string $s '|' $s)? 25%;"); + pass = pass && test("$p2 = (\\\\ $s $string $s)? 25%;"); + pass = pass && test("$rel2 = $p1 $string $s $p2;"); + pass = pass && test("$relation = $relationList $s ($rel1 | $rel2) $crlf;"); + pass = pass && test("$command = $commandList $crlf;"); + pass = pass && test("$reset = '&' $s ($beforeList $s)? 10% ($positionList 100% | $string 10%) $crlf;"); + pass = pass && test("$mostRules = $command 1% | $reset 5% | $relation 25%;"); + pass = pass && test("$root = $command{0,5} $reset $mostRules{1,20};"); + + const char collationBNF[] = + "$s = ' '? 50%;" + "$crlf = '\r\n';" + + "$alternateOptions = non'-'ignorable | shifted;" + "$onoff = on | off;" + "$caseFirstOptions = off | upper | lower;" + "$strengthOptions = '1' | '2' | '3' | '4' | 'I';" + "$commandList = '['" + " ( alternate ' ' $alternateOptions" + " | backwards ' 2'" + " | normalization ' ' $onoff " + " | caseLevel ' ' $onoff " + " | hiraganaQ ' ' $onoff" + " | caseFirst ' ' $caseFirstOptions" + " | strength ' ' $strengthOptions" + " ) ']';" + "$command = $commandList $crlf;" + + "$ignorableTypes = (tertiary | secondary | primary) ' ' ignorable;" + "$allTypes = variable | regular | implicit | trailing | $ignorableTypes;" + "$positionList = '[' (first | last) ' ' $allTypes ']';" + + "$beforeList = '[before ' ('1' | '2' | '3') ']';" + + "$relationList = (" + " '<'" + " | '<<'" + " | ';'" + " | '<<<'" + " | ','" + " | '='" + ");" + "$string = $magic;" + "$rel1 = '[variable top]' $s;" + "$p1 = ($string $s '|' $s)? 25%;" + "$p2 = (\\\\ $s $string $s)? 25%;" + "$rel2 = $p1 $string $s $p2;" + "$relation = $relationList $s ($rel1 | $rel2) $crlf;" + + "$reset = '&' $s ($beforeList $s)? 10% ($positionList 1% | $string 10%) $crlf;" + "$mostRules = $command 1% | $reset 5% | $relation 25%;" + "$root = $command{0,5} $reset $mostRules{1,20};" + ; + + pass = pass && test(collationBNF); + + + return pass; +} + +static UBool TestMorph(){ + srand((unsigned)time( NULL )); + + Alternation * alt = new Alternation(); + + (*alt) + .append(new Literal("a")).append(new Literal("b")).append(new Literal("c")) + .append(new Literal("d")).append(new Literal("e")).append(new Literal("f")) + .append(new Literal("g")).append(new Literal("h")).append(new Literal("i")) + .append(new Literal("j")).append(new Literal("k")).append(new Literal("l")) + .append(new Literal("m")).append(new Literal("n")).append(new Literal("o")) + ; + + Repeat * rep = new Repeat( alt ,5,5 ); + Morph m( *rep); + +// DUMP_R(TestMorph,(*rep),20); + DUMP_R(TestMorph,m,100); + + return FALSE; +} + +#endif + +static UBool TestLanguageGenerator(){ + //LanguageGenerator g; + //const char *const s = "$s = p 0% | q 1%;"; + //g.parseBNF(s, "$s"); + UBool pass; + //= strcmp("q", g.next()) == 0; + + const char *const def = + //"$a = $b;" + //"$b = $c;" + //"$c = $t;" + //"$t = abc $z{1,2};" + //"$k = a | b | c | d | e | f | g ;" + //"$z = q 0% | p 1% | r 1%;" + "$x = a ? 0%;" + ; // end of string +// const char * s = "abczz"; +// +// + LanguageGenerator g; + pass = g.parseBNF(def, "$x",TRUE); +//// LanguageGenerator g(collationBNF, "$root", "$magic", new MagicNode()); +// + if (pass != LanguageGenerator::OK) return FALSE; + + DUMP_R(TestLanguageGenerator, g, 20); + return pass; + + ////UBool pass = strcmp(s,r) == 0; + + //if (pass){ + // printf("TestRandomLanguageGenerator passed.\n"); + //} else { + // printf("TestRandomLanguageGenerator FAILED!!!\n"); + //} + //return pass; +} + +void TestWbnf(void){ + srand((unsigned)time( NULL )); + + //CALL(TestLiteral); + //CALL(TestSequence); + //CALL(TestSymbolTable); + //CALL(TestVariable); + + //TestRepeat(); + //TestAlternation(); + //TestMorph(); + + //TestQuote(); + //TestBuffer(); + //TestWeightedRand(); + + //CALL(TestScanner); + //CALL(TestParser); + CALL(TestLanguageGenerator); +} + diff --git a/icuSources/test/intltest/wbnf.h b/icuSources/test/intltest/wbnf.h new file mode 100644 index 00000000..7b76f8f2 --- /dev/null +++ b/icuSources/test/intltest/wbnf.h @@ -0,0 +1,157 @@ +/* + ****************************************************************************** + * Copyright (C) 2005, International Business Machines Corporation and * + * others. All Rights Reserved. * + ****************************************************************************** + */ +/* + WBNF, Weighted BNF, is an extend BNF. The most difference between WBNF + and standard BNF is the WBNF accepts weight for its alternation items. + The weight specifies the opportunity it will be selected. + + The purpose of WBNF is to help generate a random string from a given grammar + which can be described with standard BNF. The introduction of 'weight' + is to guide the generator to give the specific parts different chances to be + generated. + + Usually, the user gives LanguageGenerator the grammar description in WBNF, + then LanguageGenerator will generate a random string on every next() call. + The return code of parseBNF() can help user to determine the error, + either in the grammar description or in the WBNF parser itself. + + + The grammar of WBNF itself can be described in standard BNF, + + escaping = _single character with a leading back slash, either inside or outside quoting_ + quoting = _quoted with a pair of single quotation marks_ + string = string alphabet | string digit | string quoting | string escaping | + alphabet | quoting | escaping + alphabet = + digit = + integer = integer digit | digit + weight = integer % + weight-list = weight-list weight | weight + var = var alphabet | var digit | $ alphabet + + var-defs = var-defs var-def | var-def + var-def = var '=' definition; + + alternation = alternation '|' alt-item | alt-item + alt-item = sequence | sequence weight + + sequence = sequence modified | modified + + modified = core | morph | quote | repeat + morph = modified ~ + quote = modified @ + repeat = modified quantifier | modified quantifier weight-list + quantifier = ? | * | + | { integer , integer} | {integer, } | {integer} + + core = var | string | '(' definition ')' + + definition = core | modified | sequence | alternation + definition = alternation + + Remarks: + o Following characters are literals in preceding definition + but are syntax symbols in WBNF + + % $ ~ @ ? * + { } , + + o Following character are syntax symbols in preceding definition + (sapce) contact operation, or separators to increase readability + = definition + | selection operation + ( ) precedence select + ' ' override special-character to plain character + + o the definition of 'escaping' and 'quoting' are preceding definition text + o infinite is actually a predefine value PSEUDO_INFINIT defined in this file + o if weight is not presented in "alt-item' and 'repeat', + a default weight DEFAULT_WEIGHT defined in this file is used + + o * == {0, } + + == {1, } + ? == {0, 1} + + o the weight-list for repeat assigns the weights for repeat itmes one by one + + demo{1,3} 30% 40% 100% == (demo)30% | (demodemo)40% | (demodemodemo)100% + + To find more explain of the weight-list, please see the LIMITATION of the grammar + + o but the weight-list for question mark has different meaning + + demo ? 30% != demo{0,1} 30% 100% + demo ? 30% == demo{0,1} 70% 30% + + the 70% is calculated from (DEFAULT_WEIGHT - weight) + + + Known LIMITATION of the grammar + For 'repeat', the parser will eat up as much as possible weights at one time, + discard superfluous weights if it is too much, + fill insufficient weights with default weight if it is too less. + This behavior means following definitions are equal + + demo{1,3} 30% 40% 100% + demo{1,3} 30% 40% 100% 50% + demo{1,3} 30% 40% + + This behavior will cause a little confusion when defining an alternation + + demo{1,3} 30% 40% 100% 50% | show 20% + + is interpreted as + + (demo{1,3} 30% 40% 100%) 100% | show 20% + + not + + (demo{1,3} 30% 40% 100%) 50% | show 20% + + to get an expected definition, please use parentheses. + + Known LIMITATION of current implement + Due to the well known point alias problem, current Parser will be effectively + crashed if the definition looks like + + $a = demo; + $b = $a; + $c = $a; + or + $a = demo; + $b = $a $a; + or + $a = demo; + $b = $b $a; + + The crash will occur at delete operation in destructor or other memory release code. + Several plans are on hard to fix the problem. Use a smart point with reference count, + or use a central memory management solution. But now, it works well with collation + monkey test, which is the only user for WBNF. +*/ + +#ifndef _WBNF +#define _WBNF + +#include "unicode/utypes.h" + +const int DEFAULT_WEIGHT = 100; +const int PSEUDO_INFINIT = 200; + +class LanguageGenerator_impl; + +class LanguageGenerator{ + LanguageGenerator_impl * lang_gen; +public: + enum PARSE_RESULT {OK, BNF_DEF_WRONG, INCOMPLETE, NO_TOP_NODE}; + LanguageGenerator(); + ~LanguageGenerator(); + PARSE_RESULT parseBNF(const char *const bnf_definition /*in*/, const char *const top_node/*in*/, UBool debug=FALSE); + const char *next(); /* Return a null-terminated c-string. The buffer is owned by callee. */ +}; + +void TestWbnf(void); + +#endif /* _WBNF */ diff --git a/icuSources/test/intltest/windttst.cpp b/icuSources/test/intltest/windttst.cpp new file mode 100644 index 00000000..3869f34a --- /dev/null +++ b/icuSources/test/intltest/windttst.cpp @@ -0,0 +1,197 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINDTTST.CPP +* +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/format.h" +#include "unicode/numfmt.h" +#include "unicode/locid.h" +#include "unicode/ustring.h" +#include "unicode/testlog.h" +#include "unicode/utmscale.h" + +#include "windtfmt.h" +#include "winutil.h" +#include "windttst.h" + +#include "cmemory.h" +#include "cstring.h" +#include "locmap.h" +#include "wintz.h" + +# define WIN32_LEAN_AND_MEAN +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +# include <windows.h> + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +static const char *getCalendarType(int32_t type) +{ + switch (type) + { + case 1: + case 2: + return "@calendar=gregorian"; + + case 3: + return "@calendar=japanese"; + + case 6: + return "@calendar=islamic"; + + case 7: + return "@calendar=buddhist"; + + case 8: + return "@calendar=hebrew"; + + default: + return ""; + } +} + +void Win32DateTimeTest::testLocales(TestLog *log) +{ + SYSTEMTIME winNow; + UDate icuNow = 0; + SYSTEMTIME st; + FILETIME ft; + UnicodeString zoneID; + const TimeZone *tz = TimeZone::createDefault(); + TIME_ZONE_INFORMATION tzi; + + uprv_memset(&tzi, 0, sizeof(tzi)); + tz->getID(zoneID); + if (! uprv_getWindowsTimeZoneInfo(&tzi, zoneID.getBuffer(), zoneID.length())) { + UBool found = FALSE; + int32_t ec = TimeZone::countEquivalentIDs(zoneID); + + for (int z = 0; z < ec; z += 1) { + UnicodeString equiv = TimeZone::getEquivalentID(zoneID, z); + + if (found = uprv_getWindowsTimeZoneInfo(&tzi, equiv.getBuffer(), equiv.length())) { + break; + } + } + + if (! found) { + GetTimeZoneInformation(&tzi); + } + } + + GetSystemTime(&st); + SystemTimeToFileTime(&st, &ft); + SystemTimeToTzSpecificLocalTime(&tzi, &st, &winNow); + + int64_t wftNow = ((int64_t) ft.dwHighDateTime << 32) + ft.dwLowDateTime; + UErrorCode status = U_ZERO_ERROR; + + int64_t udtsNow = utmscale_fromInt64(wftNow, UDTS_WINDOWS_FILE_TIME, &status); + + icuNow = (UDate) utmscale_toInt64(udtsNow, UDTS_ICU4C_TIME, &status); + + int32_t lcidCount = 0; + Win32Utilities::LCIDRecord *lcidRecords = Win32Utilities::getLocales(lcidCount); + + for(int i = 0; i < lcidCount; i += 1) { + UErrorCode status = U_ZERO_ERROR; + WCHAR longDateFormat[81], longTimeFormat[81], wdBuffer[256], wtBuffer[256]; + int32_t calType = 0; + + // NULL localeID means ICU didn't recognize this locale + if (lcidRecords[i].localeID == NULL) { + continue; + } + + GetLocaleInfoW(lcidRecords[i].lcid, LOCALE_SLONGDATE, longDateFormat, 81); + GetLocaleInfoW(lcidRecords[i].lcid, LOCALE_STIMEFORMAT, longTimeFormat, 81); + GetLocaleInfoW(lcidRecords[i].lcid, LOCALE_RETURN_NUMBER|LOCALE_ICALENDARTYPE, (LPWSTR) calType, sizeof(int32_t)); + + char localeID[64]; + + uprv_strcpy(localeID, lcidRecords[i].localeID); + uprv_strcat(localeID, getCalendarType(calType)); + + UnicodeString ubBuffer, udBuffer, utBuffer; + Locale ulocale(localeID); + int32_t wdLength, wtLength; + + wdLength = GetDateFormatW(lcidRecords[i].lcid, DATE_LONGDATE, &winNow, NULL, wdBuffer, ARRAY_SIZE(wdBuffer)); + wtLength = GetTimeFormatW(lcidRecords[i].lcid, 0, &winNow, NULL, wtBuffer, ARRAY_SIZE(wtBuffer)); + + if (uprv_strchr(localeID, '@') > 0) { + uprv_strcat(localeID, ";"); + } else { + uprv_strcat(localeID, "@"); + } + + uprv_strcat(localeID, "compat=host"); + + Locale wlocale(localeID); + DateFormat *wbf = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, wlocale); + DateFormat *wdf = DateFormat::createDateInstance(DateFormat::kFull, wlocale); + DateFormat *wtf = DateFormat::createTimeInstance(DateFormat::kFull, wlocale); + + wbf->format(icuNow, ubBuffer); + wdf->format(icuNow, udBuffer); + wtf->format(icuNow, utBuffer); + + if (ubBuffer.indexOf(wdBuffer, wdLength - 1, 0) < 0) { + UnicodeString baseName(wlocale.getBaseName()); + UnicodeString expected(wdBuffer); + + log->errln("DateTime format error for locale " + baseName + ": expected date \"" + expected + + "\" got \"" + ubBuffer + "\""); + } + + if (ubBuffer.indexOf(wtBuffer, wtLength - 1, 0) < 0) { + UnicodeString baseName(wlocale.getBaseName()); + UnicodeString expected(wtBuffer); + + log->errln("DateTime format error for locale " + baseName + ": expected time \"" + expected + + "\" got \"" + ubBuffer + "\""); + } + + if (udBuffer.compare(wdBuffer) != 0) { + UnicodeString baseName(wlocale.getBaseName()); + UnicodeString expected(wdBuffer); + + log->errln("Date format error for locale " + baseName + ": expected \"" + expected + + "\" got \"" + udBuffer + "\""); + } + + if (utBuffer.compare(wtBuffer) != 0) { + UnicodeString baseName(wlocale.getBaseName()); + UnicodeString expected(wtBuffer); + + log->errln("Time format error for locale " + baseName + ": expected \"" + expected + + "\" got \"" + utBuffer + "\""); + } + delete wbf; + delete wdf; + delete wtf; + } + + Win32Utilities::freeLocales(lcidRecords); + delete tz; +} + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif /* #ifdef U_WINDOWS */ diff --git a/icuSources/test/intltest/windttst.h b/icuSources/test/intltest/windttst.h new file mode 100644 index 00000000..b9b3e637 --- /dev/null +++ b/icuSources/test/intltest/windttst.h @@ -0,0 +1,41 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINDTTST.H +* +******************************************************************************** +*/ + +#ifndef __WINDTTST +#define __WINDTTST + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +/** + * \file + * \brief C++ API: Format dates using Windows API. + */ + +class TestLog; + +class Win32DateTimeTest +{ +public: + static void testLocales(TestLog *log); + +private: + Win32DateTimeTest(); +}; + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS + +#endif // __WINDTTST diff --git a/icuSources/test/intltest/winnmtst.cpp b/icuSources/test/intltest/winnmtst.cpp new file mode 100644 index 00000000..dfbf200b --- /dev/null +++ b/icuSources/test/intltest/winnmtst.cpp @@ -0,0 +1,323 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINNMTST.CPP +* +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/format.h" +#include "unicode/numfmt.h" +#include "unicode/locid.h" +#include "unicode/ustring.h" +#include "unicode/testlog.h" +#include "unicode/utmscale.h" + +#include "winnmfmt.h" +#include "winutil.h" +#include "winnmtst.h" + +#include "cmemory.h" +#include "cstring.h" +#include "locmap.h" +#include "wintz.h" +#include "uassert.h" + +# define WIN32_LEAN_AND_MEAN +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +# include <windows.h> +# include <stdio.h> +# include <time.h> +# include <float.h> +# include <locale.h> + +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) +#define NEW_ARRAY(type,count) (type *) uprv_malloc((count) * sizeof(type)) +#define DELETE_ARRAY(array) uprv_free((void *) (array)) + +#define STACK_BUFFER_SIZE 32 + +#define LOOP_COUNT 1000 + +static UBool initialized = FALSE; + +/** + * Return a random int64_t where U_INT64_MIN <= ran <= U_INT64_MAX. + */ +static uint64_t randomInt64(void) +{ + int64_t ran = 0; + int32_t i; + + if (!initialized) { + srand((unsigned)time(NULL)); + initialized = TRUE; + } + + /* Assume rand has at least 12 bits of precision */ + for (i = 0; i < sizeof(ran); i += 1) { + ((char*)&ran)[i] = (char)((rand() & 0x0FF0) >> 4); + } + + return ran; +} + +/** + * Return a random double where U_DOUBLE_MIN <= ran <= U_DOUBLE_MAX. + */ +static double randomDouble(void) +{ + double ran = 0; + + if (!initialized) { + srand((unsigned)time(NULL)); + initialized = TRUE; + } +#if 0 + int32_t i; + do { + /* Assume rand has at least 12 bits of precision */ + for (i = 0; i < sizeof(ran); i += 1) { + ((char*)&ran)[i] = (char)((rand() & 0x0FF0) >> 4); + } + } while (_isnan(ran)); +#else + int64_t numerator = randomInt64(); + int64_t denomenator; + do { + denomenator = randomInt64(); + } + while (denomenator == 0); + + ran = (double)numerator / (double)denomenator; +#endif + + return ran; +} + +/** + * Return a random int32_t where U_INT32_MIN <= ran <= U_INT32_MAX. + */ +static uint32_t randomInt32(void) +{ + int32_t ran = 0; + int32_t i; + + if (!initialized) { + srand((unsigned)time(NULL)); + initialized = TRUE; + } + + /* Assume rand has at least 12 bits of precision */ + for (i = 0; i < sizeof(ran); i += 1) { + ((char*)&ran)[i] = (char)((rand() & 0x0FF0) >> 4); + } + + return ran; +} + +static UnicodeString &getWindowsFormat(int32_t lcid, UBool currency, UnicodeString &appendTo, const wchar_t *fmt, ...) +{ + wchar_t nStackBuffer[STACK_BUFFER_SIZE]; + wchar_t *nBuffer = nStackBuffer; + va_list args; + int result; + + nBuffer[0] = 0x0000; + + /* Due to the arguments causing a result to be <= 23 characters (+2 for NULL and minus), + we don't need to reallocate the buffer. */ + va_start(args, fmt); + result = _vsnwprintf(nBuffer, STACK_BUFFER_SIZE, fmt, args); + va_end(args); + + /* Just to make sure of the above statement, we add this assert */ + U_ASSERT(result >=0); + // The following code is not used because _vscwprintf isn't available on MinGW at the moment. + /*if (result < 0) { + int newLength; + + va_start(args, fmt); + newLength = _vscwprintf(fmt, args); + va_end(args); + + nBuffer = NEW_ARRAY(UChar, newLength + 1); + + va_start(args, fmt); + result = _vsnwprintf(nBuffer, newLength + 1, fmt, args); + va_end(args); + }*/ + + + // vswprintf is sensitive to the locale set by setlocale. For some locales + // it doesn't use "." as the decimal separator, which is what GetNumberFormatW + // and GetCurrencyFormatW both expect to see. + // + // To fix this, we scan over the string and replace the first non-digits, except + // for a leading "-", with a "." + // + // Note: (nBuffer[0] == L'-') will evaluate to 1 if there is a leading '-' in the + // number, and 0 otherwise. + for (wchar_t *p = &nBuffer[nBuffer[0] == L'-']; *p != L'\0'; p += 1) { + if (*p < L'0' || *p > L'9') { + *p = L'.'; + break; + } + } + + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; + + buffer[0] = 0x0000; + + if (currency) { + result = GetCurrencyFormatW(lcid, 0, nBuffer, NULL, buffer, STACK_BUFFER_SIZE); + + if (result == 0) { + DWORD lastError = GetLastError(); + + if (lastError == ERROR_INSUFFICIENT_BUFFER) { + int newLength = GetCurrencyFormatW(lcid, 0, nBuffer, NULL, NULL, 0); + + buffer = NEW_ARRAY(UChar, newLength); + buffer[0] = 0x0000; + GetCurrencyFormatW(lcid, 0, nBuffer, NULL, buffer, newLength); + } + } + } else { + result = GetNumberFormatW(lcid, 0, nBuffer, NULL, buffer, STACK_BUFFER_SIZE); + + if (result == 0) { + DWORD lastError = GetLastError(); + + if (lastError == ERROR_INSUFFICIENT_BUFFER) { + int newLength = GetNumberFormatW(lcid, 0, nBuffer, NULL, NULL, 0); + + buffer = NEW_ARRAY(UChar, newLength); + buffer[0] = 0x0000; + GetNumberFormatW(lcid, 0, nBuffer, NULL, buffer, newLength); + } + } + } + + appendTo.append(buffer, (int32_t) wcslen(buffer)); + + if (buffer != stackBuffer) { + DELETE_ARRAY(buffer); + } + + /*if (nBuffer != nStackBuffer) { + DELETE_ARRAY(nBuffer); + }*/ + + return appendTo; +} + +static void testLocale(const char *localeID, int32_t lcid, NumberFormat *wnf, UBool currency, TestLog *log) +{ + for (int n = 0; n < LOOP_COUNT; n += 1) { + UnicodeString u3Buffer, u6Buffer, udBuffer; + UnicodeString w3Buffer, w6Buffer, wdBuffer; + double d = randomDouble(); + int32_t i32 = randomInt32(); + int64_t i64 = randomInt64(); + + getWindowsFormat(lcid, currency, wdBuffer, L"%.16f", d); + + getWindowsFormat(lcid, currency, w3Buffer, L"%I32d", i32); + + getWindowsFormat(lcid, currency, w6Buffer, L"%I64d", i64); + + wnf->format(d, udBuffer); + if (udBuffer.compare(wdBuffer) != 0) { + UnicodeString locale(localeID); + + log->errln("Double format error for locale " + locale + + ": got " + udBuffer + " expected " + wdBuffer); + } + + wnf->format(i32, u3Buffer); + if (u3Buffer.compare(w3Buffer) != 0) { + UnicodeString locale(localeID); + + log->errln("int32_t format error for locale " + locale + + ": got " + u3Buffer + " expected " + w3Buffer); + } + + wnf->format(i64, u6Buffer); + if (u6Buffer.compare(w6Buffer) != 0) { + UnicodeString locale(localeID); + + log->errln("int64_t format error for locale " + locale + + ": got " + u6Buffer + " expected " + w6Buffer); + } + } +} + +void Win32NumberTest::testLocales(TestLog *log) +{ + int32_t lcidCount = 0; + Win32Utilities::LCIDRecord *lcidRecords = Win32Utilities::getLocales(lcidCount); + + for(int i = 0; i < lcidCount; i += 1) { + UErrorCode status = U_ZERO_ERROR; + char localeID[128]; + + // NULL localeID means ICU didn't recognize the lcid + if (lcidRecords[i].localeID == NULL) { + continue; + } + + strcpy(localeID, lcidRecords[i].localeID); + + if (strchr(localeID, '@') > 0) { + strcat(localeID, ";"); + } else { + strcat(localeID, "@"); + } + + strcat(localeID, "compat=host"); + + Locale ulocale(localeID); + NumberFormat *wnf = NumberFormat::createInstance(ulocale, status); + NumberFormat *wcf = NumberFormat::createCurrencyInstance(ulocale, status); + + testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wnf, FALSE, log); + testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wcf, TRUE, log); + +#if 0 + char *old_locale = strdup(setlocale(LC_ALL, NULL)); + + setlocale(LC_ALL, "German"); + + testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wnf, FALSE, log); + testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wcf, TRUE, log); + + setlocale(LC_ALL, old_locale); + + free(old_locale); +#endif + + delete wcf; + delete wnf; + } + + Win32Utilities::freeLocales(lcidRecords); +} + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif /* #ifdef U_WINDOWS */ diff --git a/icuSources/test/intltest/winnmtst.h b/icuSources/test/intltest/winnmtst.h new file mode 100644 index 00000000..411969ad --- /dev/null +++ b/icuSources/test/intltest/winnmtst.h @@ -0,0 +1,41 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINNMTST.H +* +******************************************************************************** +*/ + +#ifndef __WINNMTST +#define __WINNMTST + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +/** + * \file + * \brief C++ API: Format dates using Windows API. + */ + +class TestLog; + +class Win32NumberTest +{ +public: + static void testLocales(TestLog *log); + +private: + Win32NumberTest(); +}; + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS + +#endif // __WINNMTST diff --git a/icuSources/test/intltest/winutil.cpp b/icuSources/test/intltest/winutil.cpp new file mode 100644 index 00000000..1963221e --- /dev/null +++ b/icuSources/test/intltest/winutil.cpp @@ -0,0 +1,81 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINUTIL.CPP +* +******************************************************************************** +*/ + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +#include "winutil.h" +#include "locmap.h" + +# define WIN32_LEAN_AND_MEAN +# define VC_EXTRALEAN +# define NOUSER +# define NOSERVICE +# define NOIME +# define NOMCX +# include <windows.h> +# include <stdio.h> + +static Win32Utilities::LCIDRecord *lcidRecords = NULL; +static int32_t lcidCount = 0; +static int32_t lcidMax = 0; + +BOOL CALLBACK EnumLocalesProc(LPSTR lpLocaleString) +{ + UErrorCode status = U_ZERO_ERROR; + + if (lcidCount >= lcidMax) { + Win32Utilities::LCIDRecord *newRecords = new Win32Utilities::LCIDRecord[lcidMax + 32]; + + for (int i = 0; i < lcidMax; i += 1) { + newRecords[i] = lcidRecords[i]; + } + + delete[] lcidRecords; + lcidRecords = newRecords; + lcidMax += 32; + } + + sscanf(lpLocaleString, "%8x", &lcidRecords[lcidCount].lcid); + + lcidRecords[lcidCount].localeID = uprv_convertToPosix(lcidRecords[lcidCount].lcid, &status); + + lcidCount += 1; + + return TRUE; +} + +Win32Utilities::LCIDRecord *Win32Utilities::getLocales(int32_t &localeCount) +{ + LCIDRecord *result; + + EnumSystemLocalesA(EnumLocalesProc, LCID_INSTALLED); + + localeCount = lcidCount; + result = lcidRecords; + + lcidCount = lcidMax = 0; + lcidRecords = NULL; + + return result; +} + +void Win32Utilities::freeLocales(LCIDRecord *records) +{ + delete[] records; +} + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif /* #ifdef U_WINDOWS */ diff --git a/icuSources/test/intltest/winutil.h b/icuSources/test/intltest/winutil.h new file mode 100644 index 00000000..03a0044a --- /dev/null +++ b/icuSources/test/intltest/winutil.h @@ -0,0 +1,46 @@ +/* +******************************************************************************** +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************** +* +* File WINUTIL.H +* +******************************************************************************** +*/ + +#ifndef __WINUTIL +#define __WINUTIL + +#include "unicode/utypes.h" + +#ifdef U_WINDOWS + +#if !UCONFIG_NO_FORMATTING + +/** + * \file + * \brief C++ API: Format dates using Windows API. + */ + +class Win32Utilities +{ +public: + struct LCIDRecord + { + int32_t lcid; + const char *localeID; + }; + + static LCIDRecord *getLocales(int32_t &localeCount); + static void freeLocales(LCIDRecord *records); + +private: + Win32Utilities(); +}; + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif // #ifdef U_WINDOWS + +#endif // __WINUTIL diff --git a/icuSources/test/iotest/Makefile.in b/icuSources/test/iotest/Makefile.in index 4e6a5c85..bfdbcf4c 100644 --- a/icuSources/test/iotest/Makefile.in +++ b/icuSources/test/iotest/Makefile.in @@ -1,6 +1,10 @@ +#****************************************************************************** +# +# Copyright (C) 1999-2005, International Business Machines +# Corporation and others. All Rights Reserved. +# +#****************************************************************************** ## Makefile.in for ICU - test/iotest -## Copyright (c) 2002-2004, International Business Machines Corporation and -## others. All Rights Reserved. ## Source directory information srcdir = @srcdir@ @@ -8,6 +12,7 @@ top_srcdir = @top_srcdir@ top_builddir = ../.. +## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk ## Build directory information @@ -20,18 +25,26 @@ CLEANFILES = *~ $(DEPS) TARGET = iotest$(EXEEXT) BUILDDIR := $(CURR_SRCCODE_FULL_DIR)/../../ +# Simplify the path for Unix BUILDDIR := $(BUILDDIR:test/iotest/../../=) -BUILDDIR := $(BUILDDIR:test\\\\iotest/../../=) +# Simplify the path for Windows +BUILDDIR := $(BUILDDIR:test\\iotest/../../=) +# Simplify the path for Windows 98 +BUILDDIR := $(BUILDDIR:TEST\\IOTEST/../../=) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n \ --I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/io +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/io DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"' -LIBS = $(LIBCTESTFW) $(LIBICUIO) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +LIBS = $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(LIBICUIO) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) -OBJECTS = iotest.o strtst.o filetst.o +OBJECTS = iotest.o stream.o strtst.o filetst.o trnstst.o DEPS = $(OBJECTS:.o=.d) +-include Makefile.local + ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ distclean distclean-local dist dist-local check check-local @@ -60,8 +73,6 @@ clean-local: distclean-local: clean-local $(RMV) Makefile --include Makefile.local - check-local: all-local $(INVOKE) ./$(TARGET) $(IOTEST_OPTS) || true @@ -81,3 +92,4 @@ ifneq ($(patsubst %install,,$(MAKECMDGOALS)),) endif endif endif + diff --git a/icuSources/test/iotest/filetst.c b/icuSources/test/iotest/filetst.c index a078e8f3..1e908e42 100644 --- a/icuSources/test/iotest/filetst.c +++ b/icuSources/test/iotest/filetst.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2004-2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: filetst.c @@ -16,7 +16,6 @@ #include "unicode/ustdio.h" #include "unicode/ustring.h" #include "unicode/uloc.h" -#include "unicode/utrans.h" #include <string.h> @@ -54,8 +53,11 @@ static void TestFileFromICU(UFILE *myFile) { origPtr = (void *) INT64_C(0x1000200030004000); } else if (sizeof(void *) == 16) { /* iSeries */ - int32_t massiveBigEndianPtr[] = { 0x10002000, 0x30004000, 0x50006000, 0x70008000 }; - origPtr = *((void **)massiveBigEndianPtr); + union { + int32_t arr[4]; + void *ptr; + } massiveBigEndianPtr = {{ 0x10002000, 0x30004000, 0x50006000, 0x70008000 }}; + origPtr = massiveBigEndianPtr.ptr; } else { log_err("sizeof(void*)=%d hasn't been tested before", (int)sizeof(void*)); } @@ -91,8 +93,8 @@ static void TestFileFromICU(UFILE *myFile) { u_fprintf(myFile, "Pointer to integer Value: %d\n", *n); u_fprintf(myFile, "This is a long test123456789012345678901234567890123456789012345678901234567890\n"); *n = 1; - fprintf(u_fgetfile(myFile), "\tNormal fprintf count: n=%d %n n=%d\n", (int)*n, (int*)n, (int)*n); - fprintf(u_fgetfile(myFile), "\tNormal fprintf count value: n=%d\n", (int)*n); + u_fprintf(myFile, "\tNormal fprintf count: n=%d %n n=%d\n", (int)*n, (int*)n, (int)*n); + fprintf(u_fgetfile(myFile), "\tNormal fprintf count value: n=%d\n", (int)*n); /* Should be 27 as stated later on. */ u_fclose(myFile); myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, NULL); @@ -164,27 +166,27 @@ static void TestFileFromICU(UFILE *myFile) { log_err("%%X Got: %X, Expected: %X\n", *newValuePtr, *n); } *newDoubleValuePtr = -1.0; - u_fscanf(myFile, "Float %%f: %f\n", newDoubleValuePtr); + u_fscanf(myFile, "Float %%f: %lf\n", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%f Got: %f, Expected: %f\n", *newDoubleValuePtr, myFloat); } *newDoubleValuePtr = -1.0; - u_fscanf(myFile, "Lowercase float %%e: %e\n", newDoubleValuePtr); + u_fscanf(myFile, "Lowercase float %%e: %le\n", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%e Got: %e, Expected: %e\n", *newDoubleValuePtr, myFloat); } *newDoubleValuePtr = -1.0; - u_fscanf(myFile, "Uppercase float %%E: %E\n", newDoubleValuePtr); + u_fscanf(myFile, "Uppercase float %%E: %lE\n", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%E Got: %E, Expected: %E\n", *newDoubleValuePtr, myFloat); } *newDoubleValuePtr = -1.0; - u_fscanf(myFile, "Lowercase float %%g: %g\n", newDoubleValuePtr); + u_fscanf(myFile, "Lowercase float %%g: %lg\n", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%g Got: %g, Expected: %g\n", *newDoubleValuePtr, myFloat); } *newDoubleValuePtr = -1.0; - u_fscanf(myFile, "Uppercase float %%G: %G\n", newDoubleValuePtr); + u_fscanf(myFile, "Uppercase float %%G: %lG\n", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%G Got: %G, Expected: %G\n", *newDoubleValuePtr, myFloat); } @@ -434,6 +436,12 @@ static void TestfgetsBuffers(void) { } u_fputc(0x3BC, myFile); + if (u_fputc(0x110000, myFile) != U_EOF) { + log_err("u_fputc should return U_EOF for 0x110000.\n"); + } + if (u_fputc((UChar32)0xFFFFFFFFu, myFile) != U_EOF) { + log_err("u_fputc should return U_EOF for 0xFFFFFFFF.\n"); + } u_fputc(0xFF41, myFile); u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); u_memset(expectedBuffer, 0, sizeof(expectedBuffer)/sizeof(expectedBuffer[0])); @@ -704,6 +712,111 @@ static void TestfgetsNewLineHandling(void) { u_fclose(myFile); } +static void TestLineCount(const char *prefixLine, const char *line, int32_t numRepititions) { + UChar buffer[64]; + UChar expectedBuffer[64]; + int32_t lineLen = strlen(line); + UChar *returnedUCharBuffer; + int32_t repetitions; + UFILE *myFile = NULL; + FILE *stdFile = fopen(STANDARD_TEST_FILE, "wb"); + + if (stdFile == NULL) { + log_err("Can't write test file.\n"); + return; + } + /* Write a prefix line and then write a bunch of lines */ + fwrite(prefixLine, strlen(prefixLine), 1, stdFile); + for (repetitions = 0; repetitions < numRepititions; repetitions++) { + fwrite(line, lineLen, 1, stdFile); + } + fclose(stdFile); + + myFile = u_fopen(STANDARD_TEST_FILE, "rb", NULL, NULL); + if (myFile == NULL) { + log_err("Can't read test file.\n"); + return; + } + + /* Read the prefix line. This can make sure that a Windows newline is either on a boundary or before it. */ + u_uastrncpy(expectedBuffer, prefixLine, (int32_t)strlen(prefixLine)+1); + returnedUCharBuffer = u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); + if (u_strcmp(returnedUCharBuffer, expectedBuffer) != 0) { + log_err("prefix buffer is different. prefix=\"%s\"\n", prefixLine); + return; + } + + u_uastrncpy(expectedBuffer, line, (int32_t)strlen(line)+1); + for (repetitions = 0; ; repetitions++) { + u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); + returnedUCharBuffer = u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); + + if (!returnedUCharBuffer) { + /* returned NULL. stop. */ + break; + } + if (u_strcmp(buffer, expectedBuffer) != 0) { + log_err("buffers are different at count %d\n", repetitions); + } + if (buffer[u_strlen(buffer)+1] != 0xBEEF) { + log_err("u_fgets wrote too much\n"); + } + } + if (repetitions != numRepititions) { + log_err("got wrong number of lines. got=%d expected=%d\n", repetitions, numRepititions); + } + u_fclose(myFile); +} + +static void TestfgetsNewLineCount(void) { + /* This makes sure that lines are correctly handled between buffer boundaries. */ + TestLineCount("\n", "\n", 1024); /* Unix newlines */ + TestLineCount("\r\n", "\r\n", 1024);/* Windows newlines */ + TestLineCount("a\r\n", "\r\n", 1024);/* Windows newlines offset by 1 byte */ + TestLineCount("\r\n", "a\r\n", 1024);/* Windows newlines offset with data */ + TestLineCount("\n", "a\n", 1024); /* Unix newlines offset with data */ + TestLineCount("\n", "\r\n", 1024); /* a mixed number of lines. */ +} + +static void TestFgetsLineBuffering(void) { + UChar buffer[2003]; /* Use a non-power of 2 or 10 */ + UChar *returnedUCharBuffer; + int32_t repetitions; + UFILE *myFile = NULL; + FILE *stdFile = fopen(STANDARD_TEST_FILE, "wb"); + + if (stdFile == NULL) { + log_err("Can't write test file.\n"); + return; + } + u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); + + /* Write one very long line */ + for (repetitions = 0; repetitions < ((sizeof(buffer)/sizeof(buffer[0]))*2); repetitions++) { + fwrite(repetitions ? "1" : "2", 1, 1, stdFile); + } + fclose(stdFile); + + myFile = u_fopen(STANDARD_TEST_FILE, "rb", NULL, NULL); + if (myFile == NULL) { + log_err("Can't read test file.\n"); + return; + } + + /* Read part of one very long line */ + returnedUCharBuffer = u_fgets(buffer, (sizeof(buffer)/sizeof(buffer[0]))-1, myFile); + if (u_strlen(returnedUCharBuffer) != ((sizeof(buffer)/sizeof(buffer[0]))-2)) { + log_err("Line is wrong length. Got %d. Expected %d.\n", + u_strlen(returnedUCharBuffer), ((sizeof(buffer)/sizeof(buffer[0]))-2)); + } + /* We better not read too much */ + if (buffer[(sizeof(buffer)/sizeof(buffer[0]))-1] != 0xBEEF) { + log_err("Too much data was written\n"); + } + + u_fclose(myFile); +} + static void TestCodepage(void) { UFILE *myFile = NULL; @@ -1282,186 +1395,40 @@ static void TestVargs(void) { Test_u_vfprintf("8 9 a B 8.9", "%d %u %x %X %.1f", 8, 9, 10, 11, 8.9); } #endif -static void TestTranslitOps(void) -{ -#if !UCONFIG_NO_TRANSLITERATION - UFILE *f; - UErrorCode err = U_ZERO_ERROR; - UTransliterator *a = NULL, *b = NULL, *c = NULL; - - log_verbose("opening a transliterator and UFILE for testing\n"); - - f = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL); - if(f == NULL) - { - log_err("Couldn't open test file for writing\n"); - return; - } - - a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); - if(U_FAILURE(err)) - { - log_err("Error opening transliterator %s\n", u_errorName(err)); - u_fclose(f); - return; - } - - - log_verbose("setting a transliterator\n"); - b = u_fsettransliterator(f, U_WRITE, a, &err); - if(U_FAILURE(err)) - { - log_err("Error setting transliterator %s\n", u_errorName(err)); - u_fclose(f); - return; - } - - if(b != NULL) - { - log_err("Error, a transliterator was already set!\n"); - } - - b = u_fsettransliterator(NULL, U_WRITE, a, &err); - if(err != U_ILLEGAL_ARGUMENT_ERROR) - { - log_err("Error setting transliterator on NULL file err=%s\n", u_errorName(err)); - } - - if(b != a) - { - log_err("Error getting the same transliterator was not returned on NULL file\n"); - } - - err = U_FILE_ACCESS_ERROR; - b = u_fsettransliterator(f, U_WRITE, a, &err); - if(err != U_FILE_ACCESS_ERROR) - { - log_err("Error setting transliterator on error status err=%s\n", u_errorName(err)); - } - - if(b != a) - { - log_err("Error getting the same transliterator on error status\n"); - } - err = U_ZERO_ERROR; - - - log_verbose("un-setting transliterator (setting to null)\n"); - c = u_fsettransliterator(f, U_WRITE, NULL, &err); - if(U_FAILURE(err)) - { - log_err("Err setting transliterator %s\n", u_errorName(err)); - u_fclose(f); - return; - } - - if(c != a) - { - log_err("Err, transliterator that came back was not the original one.\n"); - } - - log_verbose("Trying to set read transliterator (should fail)\n"); - b = u_fsettransliterator(f, U_READ, NULL, &err); - if(err != U_UNSUPPORTED_ERROR) - { - log_err("Should have U_UNSUPPORTED_ERROR setting Read transliterator but got %s - REVISIT AND UPDATE TEST\n", u_errorName(err)); - u_fclose(f); - return; - } - else - { - log_verbose("Got %s error (expected) setting READ transliterator.\n", u_errorName(err)); - err = U_ZERO_ERROR; - } - - - utrans_close(c); - u_fclose(f); -#endif -} -static void TestTranslitOut(void) +static void TestUnicodeFormat(void) { #if !UCONFIG_NO_FORMATTING -#if !UCONFIG_NO_TRANSLITERATION - UFILE *f; - UErrorCode err = U_ZERO_ERROR; - UTransliterator *a = NULL, *b = NULL, *c = NULL; - FILE *infile; - UChar compare[] = { 0xfeff, 0x03a3, 0x03c4, 0x03b5, 0x03c6, 0x1f00, 0x03bd, 0x03bf, 0x03c2, 0x0000 }; - UChar ubuf[256]; - int len; - - log_verbose("opening a transliterator and UFILE for testing\n"); - - f = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", "utf-16"); - if(f == NULL) - { - log_err("Couldn't open test file for writing\n"); - return; - } + /* Make sure that invariant conversion doesn't happen on the _u formats. */ + UChar myUString[256]; + UFILE *myFile; + static const UChar TEST_STR[] = { 0x03BC, 0x0025, 0x0024, 0}; + static const UChar PERCENT_S[] = { 0x03BC, 0x0025, 0x0053, 0}; - a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); - if(U_FAILURE(err)) - { - log_err("Err opening transliterator %s\n", u_errorName(err)); - u_fclose(f); - return; - } + u_memset(myUString, 0x2a, sizeof(myUString)/sizeof(*myUString)); - log_verbose("setting a transliterator\n"); - b = u_fsettransliterator(f, U_WRITE, a, &err); - if(U_FAILURE(err)) - { - log_err("Err setting transliterator %s\n", u_errorName(err)); - u_fclose(f); + myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-8"); + if (!myFile) { + log_err("Test file can't be opened\n"); return; } + u_fprintf_u(myFile, PERCENT_S, TEST_STR); + u_fclose(myFile); - if(b != NULL) - { - log_err("Err, a transliterator was already set!\n"); - } - - u_fprintf(f, "Stephanos"); - - u_fclose(f); - - log_verbose("Re reading test file to verify transliteration\n"); - infile = fopen(STANDARD_TEST_FILE, "rb"); - if(infile == NULL) - { - log_err("Couldn't reopen test file\n"); + myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "UTF-8"); + if (!myFile) { + log_err("Test file can't be opened\n"); return; } - - len=fread(ubuf, sizeof(UChar), u_strlen(compare), infile); - log_verbose("Read %d UChars\n", len); - if(len != u_strlen(compare)) - { - log_err("Wanted %d UChars from file, got %d\n", u_strlen(compare), len); - } - ubuf[len]=0; - - if(u_strlen(compare) != u_strlen(ubuf)) - { - log_err("Wanted %d UChars from file, but u_strlen() returns %d\n", u_strlen(compare), len); - } - - if(u_strcmp(compare, ubuf)) - { - log_err("Read string doesn't match expected.\n"); - } - else - { - log_verbose("Read string matches expected.\n"); + u_fscanf_u(myFile, PERCENT_S, myUString); + u_fclose(myFile); + if (u_strcmp(TEST_STR, myUString) != 0) { + log_err("u_fscanf_u doesn't work.\n"); } - - fclose(infile); -#endif #endif } + U_CFUNC void addFileTest(TestNode** root) { #if !UCONFIG_NO_FORMATTING @@ -1472,6 +1439,8 @@ addFileTest(TestNode** root) { addTest(root, &TestFileReadBuffering, "file/TestFileReadBuffering"); addTest(root, &TestfgetsLineCount, "file/TestfgetsLineCount"); addTest(root, &TestfgetsNewLineHandling, "file/TestfgetsNewLineHandling"); + addTest(root, &TestfgetsNewLineCount, "file/TestfgetsNewLineCount"); + addTest(root, &TestFgetsLineBuffering, "file/TestFgetsLineBuffering"); addTest(root, &TestCodepage, "file/TestCodepage"); #if !UCONFIG_NO_FORMATTING addTest(root, &TestCodepageAndLocale, "file/TestCodepageAndLocale"); @@ -1480,12 +1449,6 @@ addFileTest(TestNode** root) { addTest(root, &TestFilePrintCompatibility, "file/TestFilePrintCompatibility"); addTest(root, &TestBadScanfFormat, "file/TestBadScanfFormat"); addTest(root, &TestVargs, "file/TestVargs"); -#endif - -#if !UCONFIG_NO_TRANSLITERATION - addTest(root, &TestTranslitOps, "file/translit/ops"); -#if !UCONFIG_NO_FORMATTING - addTest(root, &TestTranslitOut, "file/translit/out"); -#endif + addTest(root, &TestUnicodeFormat, "file/TestUnicodeFormat"); #endif } diff --git a/icuSources/test/iotest/iotest.cpp b/icuSources/test/iotest/iotest.cpp index 320aca2a..748ae358 100644 --- a/icuSources/test/iotest/iotest.cpp +++ b/icuSources/test/iotest/iotest.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: iotest.cpp @@ -14,7 +14,6 @@ #include "unicode/ustdio.h" -#include "unicode/ustream.h" #include "unicode/uclean.h" #include "unicode/ucnv.h" @@ -24,37 +23,11 @@ #include "ustr_cnv.h" #include "iotest.h" #include "unicode/tstdtmod.h" - -#if U_IOSTREAM_SOURCE >= 199711 -#include <iostream> -#ifdef U_LINUX -#define USE_SSTREAM 1 -#include <sstream> -#else -// <strstream> is deprecated on some platforms, and the compiler complains very loudly if you use it. -#include <strstream> -#endif -using namespace std; -#elif U_IOSTREAM_SOURCE >= 198506 -#include <iostream.h> -#include <strstream.h> -#endif +#include "putilimp.h" #include <string.h> #include <stdlib.h> -U_CDECL_BEGIN -#ifdef WIN32 -const UChar NEW_LINE[] = {0x0d,0x0a,0}; -const char C_NEW_LINE[] = {0x0d,0x0a,0}; -#define UTF8_NEW_LINE "\x0d\x0a" -#else -const UChar NEW_LINE[] = {0x0a,0}; -const char C_NEW_LINE[] = {'\n',0}; -#define UTF8_NEW_LINE "\x0a" -#endif -U_CDECL_END - class DataDrivenLogger : public TestLog { static const char* fgDataDir; static char *fgTestDataPath; @@ -292,7 +265,7 @@ static void U_CALLCONV DataDrivenPrintf(void) uFileBufferLenReturned = u_fprintf_u(testFile, format, i64); break; case 0x73: // 's' char * - u_austrncpy(cBuffer, uBuffer, sizeof(cBuffer)); + u_austrncpy(cBuffer, argument, sizeof(cBuffer)); uBufferLenReturned = u_sprintf_u(uBuffer, format, cBuffer); uFileBufferLenReturned = u_fprintf_u(testFile, format, cBuffer); break; @@ -388,6 +361,7 @@ static void U_CALLCONV DataDrivenScanf(void) int32_t i32, expected32; int64_t i64, expected64; double dbl, expectedDbl; + volatile float flt, expectedFlt; // Use volatile in order to get around an Intel compiler issue. int32_t uBufferLenReturned; //const char *fileLocale = "en_US_POSIX"; @@ -437,6 +411,15 @@ static void U_CALLCONV DataDrivenScanf(void) i, dbl, expectedDbl); } break; + case 0x66: // 'f' float + expectedFlt = (float)atof(u_austrcpy(cBuffer, expectedResult)); + uBufferLenReturned = u_sscanf_u(argument, format, &flt); + //uFileBufferLenReturned = u_fscanf_u(testFile, format, flt); + if (flt != expectedFlt) { + log_err("error in scanf test case[%d] Got: %f Exp: %f\n", + i, flt, expectedFlt); + } + break; case 0x31: // '1' int8_t expected8 = (int8_t)uto64(expectedResult); uBufferLenReturned = u_sscanf_u(argument, format, &i8); @@ -681,97 +664,17 @@ static void U_CALLCONV DataDrivenPrintfPrecision(void) } U_CDECL_END -U_CDECL_BEGIN -static void U_CALLCONV TestStream(void) -{ -#if U_IOSTREAM_SOURCE >= 198506 - const UChar thisMu[] = { 0x74, 0x48, 0x69, 0x73, 0x3BC, 0}; - const UChar mu[] = { 0x6D, 0x75, 0}; - UnicodeString str1 = UNICODE_STRING_SIMPLE("str1"); - UnicodeString str2 = UNICODE_STRING_SIMPLE(" <<"); - UnicodeString str3 = UNICODE_STRING_SIMPLE("2"); - UnicodeString str4 = UNICODE_STRING_SIMPLE(" UTF-8 "); - UnicodeString inStr = UNICODE_STRING_SIMPLE(" UTF-8 "); - UnicodeString inStr2; - char defConvName[UCNV_MAX_CONVERTER_NAME_LENGTH*2]; - char inStrC[128]; - UErrorCode status = U_ZERO_ERROR; - UConverter *defConv; - static const char testStr[] = "\x42\x65\x67\x69\x6E\x6E\x69\x6E\x67\x20\x6F\x66\x20\x74\x65\x73\x74\x20\x73\x74\x72\x31\x20\x20\x20\x3C\x3C\x32\x31\x20" UTF8_NEW_LINE "\x20\x55\x54\x46\x2D\x38\x20\xCE\xBC\xF0\x90\x80\x81\xF0\x90\x80\x82"; - - str4.append((UChar32)0x03BC); /* mu */ - str4.append((UChar32)0x10001); - str4.append((UChar32)0x10002); - - /* release the default converter and use utf-8 for a bit */ - defConv = u_getDefaultConverter(&status); - if (U_FAILURE(status)) { - log_err("Can't get default converter\n"); - return; - } - ucnv_close(defConv); - strncpy(defConvName, ucnv_getDefaultName(), sizeof(defConvName)/sizeof(defConvName[0])); - ucnv_setDefaultName("UTF-8"); - -#ifdef USE_SSTREAM - ostringstream outTestStream; - istringstream inTestStream("\x20\x74\x48\x69\x73\xCE\xBC\xE2\x80\x82\x20\x6D\x75\x20\x77\x6F\x72\x6C\x64"); -#else - char testStreamBuf[512]; - ostrstream outTestStream(testStreamBuf, sizeof(testStreamBuf)); - istrstream inTestStream("\x20\x74\x48\x69\x73\xCE\xBC\xE2\x80\x82\x20\x6D\x75\x20\x77\x6F\x72\x6C\x64", 0); - - /* initialize testStreamBuf */ - memset(testStreamBuf, '*', sizeof(testStreamBuf)); - testStreamBuf[sizeof(testStreamBuf)-1] = 0; -#endif - - outTestStream << "\x42\x65\x67\x69\x6E\x6E\x69\x6E\x67\x20\x6F\x66\x20\x74\x65\x73\x74\x20"; - outTestStream << str1 << "\x20\x20" << str2 << str3 << "\x31\x20" << UTF8_NEW_LINE << str4 << ends; -#ifdef USE_SSTREAM - string tempStr = outTestStream.str(); - const char *testStreamBuf = tempStr.c_str(); -#endif - if (strcmp(testStreamBuf, testStr) != 0) { - log_err("Got: \"%s\", Expected: \"%s\"\n", testStreamBuf, testStr); - } - - inTestStream >> inStr >> inStr2; - if (inStr.compare(thisMu) != 0) { - u_austrncpy(inStrC, inStr.getBuffer(), inStr.length()); - inStrC[inStr.length()] = 0; - log_err("Got: \"%s\", Expected: \"tHis\\u03BC\"\n", inStrC); - } - if (inStr2.compare(mu) != 0) { - u_austrncpy(inStrC, inStr.getBuffer(), inStr.length()); - inStrC[inStr.length()] = 0; - log_err("Got: \"%s\", Expected: \"mu\"\n", inStrC); - } - - /* return the default converter to the original state. */ - ucnv_setDefaultName(defConvName); - defConv = u_getDefaultConverter(&status); - if (U_FAILURE(status)) { - log_err("Can't get default converter"); - return; - } - ucnv_close(defConv); -#else - log_info("U_IOSTREAM_SOURCE is disabled\n"); -#endif -} -U_CDECL_END - static void addAllTests(TestNode** root) { addFileTest(root); addStringTest(root); + addTranslitTest(root); #if !UCONFIG_NO_FORMATTING addTest(root, &DataDrivenPrintf, "datadriv/DataDrivenPrintf"); addTest(root, &DataDrivenPrintfPrecision, "datadriv/DataDrivenPrintfPrecision"); addTest(root, &DataDrivenScanf, "datadriv/DataDrivenScanf"); #endif - addTest(root, &TestStream, "stream/TestStream"); + addStreamTests(root); } /* returns the path to icu/source/data/out */ @@ -865,6 +768,10 @@ int main(int argc, char* argv[]) int32_t nerrors = 0; TestNode *root = NULL; UErrorCode errorCode = U_ZERO_ERROR; + UDate startTime, endTime; + int32_t diffTime; + + startTime = uprv_getUTCtime(); /* Check whether ICU will initialize without forcing the build data directory into * the ICU_DATA path. Success here means either the data dll contains data, or that @@ -916,5 +823,14 @@ int main(int argc, char* argv[]) cleanUpTestTree(root); DataDrivenLogger::cleanUp(); u_cleanup(); + + endTime = uprv_getUTCtime(); + diffTime = (int32_t)(endTime - startTime); + printf("Elapsed Time: %02d:%02d:%02d.%03d\n", + (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR), + (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), + (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND), + (int)(diffTime%U_MILLIS_PER_SECOND)); + return nerrors; } diff --git a/icuSources/test/iotest/iotest.dsp b/icuSources/test/iotest/iotest.dsp deleted file mode 100644 index cefa2732..00000000 --- a/icuSources/test/iotest/iotest.dsp +++ /dev/null @@ -1,166 +0,0 @@ -# Microsoft Developer Studio Project File - Name="iotest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=iotest - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "iotest.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "iotest.mak" CFG="iotest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "iotest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "iotest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "iotest - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "iotest - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "iotest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include" /I "..\..\common" /I "..\..\tools\ctestfw" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "iotest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\common" /I "..\..\tools\ctestfw" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "iotest - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /W3 /GX /Zi /O2 /Op /I "..\..\..\include" /I "..\..\common" /I "..\..\tools\ctestfw" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "iotest - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /Op /I "..\..\..\include" /I "..\..\common" /I "..\..\tools\ctestfw" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "iotest - Win32 Release" -# Name "iotest - Win32 Debug" -# Name "iotest - Win64 Release" -# Name "iotest - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx" -# Begin Source File - -SOURCE=.\filetst.c -# End Source File -# Begin Source File - -SOURCE=.\iotest.cpp -# End Source File -# Begin Source File - -SOURCE=.\strtst.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h" -# Begin Source File - -SOURCE=.\iotest.h -# End Source File -# End Group -# End Target -# End Project diff --git a/icuSources/test/iotest/iotest.h b/icuSources/test/iotest/iotest.h index 9bda8e61..6d522dc4 100644 --- a/icuSources/test/iotest/iotest.h +++ b/icuSources/test/iotest/iotest.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2004-2004, International Business Machines +* Copyright (C) 2004-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: iotest.h @@ -24,6 +24,12 @@ addStringTest(TestNode** root); U_CFUNC void addFileTest(TestNode** root); +U_CFUNC void +addTranslitTest(TestNode** root); + +U_CFUNC void +addStreamTests(TestNode** root); + U_CDECL_BEGIN extern const UChar NEW_LINE[]; extern const char C_NEW_LINE[]; diff --git a/icuSources/test/iotest/iotest.vcproj b/icuSources/test/iotest/iotest.vcproj index 0a761076..68ea46e0 100644 --- a/icuSources/test/iotest/iotest.vcproj +++ b/icuSources/test/iotest/iotest.vcproj @@ -23,12 +23,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\tools\ctestfw,..\..\common" + AdditionalIncludeDirectories="..\..\..\include;..\..\tools\ctestfw;..\..\common" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/iotest.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -84,15 +85,13 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - Optimization="3" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\tools\ctestfw,..\..\common" + AdditionalIncludeDirectories="..\..\..\include;..\..\tools\ctestfw;..\..\common" PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" - BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/iotest.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -142,20 +141,38 @@ Name="Source Files" Filter="cpp;c;cxx"> <File - RelativePath="filetst.c"> + RelativePath=".\filetst.c"> + </File> + <File + RelativePath=".\iotest.cpp"> + </File> + <File + RelativePath=".\stream.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> </File> <File - RelativePath="iotest.cpp"> + RelativePath=".\strtst.c"> </File> <File - RelativePath="strtst.c"> + RelativePath=".\trnstst.c"> </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx"> <File - RelativePath="iotest.h"> + RelativePath=".\iotest.h"> </File> </Filter> </Files> diff --git a/icuSources/test/iotest/stream.cpp b/icuSources/test/iotest/stream.cpp new file mode 100644 index 00000000..ccc70632 --- /dev/null +++ b/icuSources/test/iotest/stream.cpp @@ -0,0 +1,135 @@ +/* +********************************************************************** +* Copyright (C) 2002-2006, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* file name: iotest.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2002feb21 +* created by: George Rhoten +*/ + + +#include "unicode/ustream.h" + +#include "unicode/ucnv.h" +#include "unicode/ustring.h" +#include "ustr_cnv.h" +#include "iotest.h" + +#if U_IOSTREAM_SOURCE >= 199711 +#if defined(__GNUC__) && __GNUC__ >= 4 +#define USE_SSTREAM 1 +#include <sstream> +#else +// <strstream> is deprecated on some platforms, and the compiler complains very loudly if you use it. +#include <strstream> +#endif +using namespace std; +#elif U_IOSTREAM_SOURCE >= 198506 +#include <strstream.h> +#endif + +#include <string.h> + +U_CDECL_BEGIN +#ifdef U_WINDOWS +const UChar NEW_LINE[] = {0x0d,0x0a,0}; +const char C_NEW_LINE[] = {0x0d,0x0a,0}; +#define UTF8_NEW_LINE "\x0d\x0a" +#else +const UChar NEW_LINE[] = {0x0a,0}; +const char C_NEW_LINE[] = {'\n',0}; +#define UTF8_NEW_LINE "\x0a" +#endif +U_CDECL_END + +U_CDECL_BEGIN +static void U_CALLCONV TestStream(void) +{ +#if U_IOSTREAM_SOURCE >= 198506 + const UChar thisMu[] = { 0x74, 0x48, 0x69, 0x73, 0x3BC, 0}; + const UChar mu[] = { 0x6D, 0x75, 0}; + UnicodeString str1 = UNICODE_STRING_SIMPLE("str1"); + UnicodeString str2 = UNICODE_STRING_SIMPLE(" <<"); + UnicodeString str3 = UNICODE_STRING_SIMPLE("2"); + UnicodeString str4 = UNICODE_STRING_SIMPLE(" UTF-8 "); + UnicodeString inStr = UNICODE_STRING_SIMPLE(" UTF-8 "); + UnicodeString inStr2; + char defConvName[UCNV_MAX_CONVERTER_NAME_LENGTH*2]; + char inStrC[128]; + UErrorCode status = U_ZERO_ERROR; + UConverter *defConv; + static const char testStr[] = "\x42\x65\x67\x69\x6E\x6E\x69\x6E\x67\x20\x6F\x66\x20\x74\x65\x73\x74\x20\x73\x74\x72\x31\x20\x20\x20\x3C\x3C\x32\x31\x20" UTF8_NEW_LINE "\x20\x55\x54\x46\x2D\x38\x20\xCE\xBC\xF0\x90\x80\x81\xF0\x90\x80\x82"; + + str4.append((UChar32)0x03BC); /* mu */ + str4.append((UChar32)0x10001); + str4.append((UChar32)0x10002); + + /* release the default converter and use utf-8 for a bit */ + defConv = u_getDefaultConverter(&status); + if (U_FAILURE(status)) { + log_err("Can't get default converter\n"); + return; + } + ucnv_close(defConv); + strncpy(defConvName, ucnv_getDefaultName(), sizeof(defConvName)/sizeof(defConvName[0])); + ucnv_setDefaultName("UTF-8"); + + static const char * const TESTSTRING = "\x20\x74\x48\x69\x73\xCE\xBC\xE2\x80\x82\x20\x6D\x75\x20\x77\x6F\x72\x6C\x64"; +#ifdef USE_SSTREAM + ostringstream outTestStream; + istringstream inTestStream(TESTSTRING); +#else + char testStreamBuf[512]; + ostrstream outTestStream(testStreamBuf, sizeof(testStreamBuf)); + istrstream inTestStream(TESTSTRING, 0); + + /* initialize testStreamBuf */ + memset(testStreamBuf, '*', sizeof(testStreamBuf)); + testStreamBuf[sizeof(testStreamBuf)-1] = 0; +#endif + + outTestStream << "\x42\x65\x67\x69\x6E\x6E\x69\x6E\x67\x20\x6F\x66\x20\x74\x65\x73\x74\x20"; + outTestStream << str1 << "\x20\x20" << str2 << str3 << "\x31\x20" << UTF8_NEW_LINE << str4 << ends; +#ifdef USE_SSTREAM + string tempStr = outTestStream.str(); + const char *testStreamBuf = tempStr.c_str(); +#endif + if (strcmp(testStreamBuf, testStr) != 0) { + log_err("Got: \"%s\", Expected: \"%s\"\n", testStreamBuf, testStr); + } + + inTestStream >> inStr >> inStr2; + if (inStr.compare(thisMu) != 0) { + u_austrncpy(inStrC, inStr.getBuffer(), inStr.length()); + inStrC[inStr.length()] = 0; + log_err("Got: \"%s\", Expected: \"tHis\\u03BC\"\n", inStrC); + } + if (inStr2.compare(mu) != 0) { + u_austrncpy(inStrC, inStr.getBuffer(), inStr.length()); + inStrC[inStr.length()] = 0; + log_err("Got: \"%s\", Expected: \"mu\"\n", inStrC); + } + + /* return the default converter to the original state. */ + ucnv_setDefaultName(defConvName); + defConv = u_getDefaultConverter(&status); + if (U_FAILURE(status)) { + log_err("Can't get default converter"); + return; + } + ucnv_close(defConv); +#else + log_info("U_IOSTREAM_SOURCE is disabled\n"); +#endif +} +U_CDECL_END + +U_CFUNC void addStreamTests(TestNode** root) { + addTest(root, &TestStream, "stream/TestStream"); +} + diff --git a/icuSources/test/iotest/strtst.c b/icuSources/test/iotest/strtst.c index 02ef4cb9..0412f25e 100644 --- a/icuSources/test/iotest/strtst.c +++ b/icuSources/test/iotest/strtst.c @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2004-2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * file name: strtst.c @@ -42,8 +42,11 @@ static void TestString(void) { origPtr = (void *) INT64_C(0x1000200030004000); } else if (sizeof(void *) == 16) { /* iSeries */ - int32_t massiveBigEndianPtr[] = { 0x10002000, 0x30004000, 0x50006000, 0x70008000 }; - origPtr = *((void **)massiveBigEndianPtr); + union { + int32_t arr[4]; + void *ptr; + } massiveBigEndianPtr = {{ 0x10002000, 0x30004000, 0x50006000, 0x70008000 }}; + origPtr = massiveBigEndianPtr.ptr; } else { log_err("sizeof(void*)=%d hasn't been tested before", (int)sizeof(void*)); } @@ -93,35 +96,35 @@ static void TestString(void) { u_sprintf(uStringBuf, "Float f: %f", myFloat); *newDoubleValuePtr = -1.0; - u_sscanf(uStringBuf, "Float f: %f", newDoubleValuePtr); + u_sscanf(uStringBuf, "Float f: %lf", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%f Got: %f, Expected: %f\n", *newDoubleValuePtr, myFloat); } u_sprintf(uStringBuf, "Lowercase float e: %e", myFloat); *newDoubleValuePtr = -1.0; - u_sscanf(uStringBuf, "Lowercase float e: %e", newDoubleValuePtr); + u_sscanf(uStringBuf, "Lowercase float e: %le", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%e Got: %e, Expected: %e\n", *newDoubleValuePtr, myFloat); } u_sprintf(uStringBuf, "Uppercase float E: %E", myFloat); *newDoubleValuePtr = -1.0; - u_sscanf(uStringBuf, "Uppercase float E: %E", newDoubleValuePtr); + u_sscanf(uStringBuf, "Uppercase float E: %lE", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%E Got: %E, Expected: %E\n", *newDoubleValuePtr, myFloat); } u_sprintf(uStringBuf, "Lowercase float g: %g", myFloat); *newDoubleValuePtr = -1.0; - u_sscanf(uStringBuf, "Lowercase float g: %g", newDoubleValuePtr); + u_sscanf(uStringBuf, "Lowercase float g: %lg", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%g Got: %g, Expected: %g\n", *newDoubleValuePtr, myFloat); } u_sprintf(uStringBuf, "Uppercase float G: %G", myFloat); *newDoubleValuePtr = -1.0; - u_sscanf(uStringBuf, "Uppercase float G: %G", newDoubleValuePtr); + u_sscanf(uStringBuf, "Uppercase float G: %lG", newDoubleValuePtr); if (myFloat != *newDoubleValuePtr) { log_err("%%G Got: %G, Expected: %G\n", *newDoubleValuePtr, myFloat); } @@ -279,6 +282,7 @@ static void TestLocalizedString(void) { u_fprintf(strFile, "%d", 1234); u_frewind(strFile); + numResult = -1; u_fscanf(strFile, "%d", &numResult); u_fclose(strFile); u_uastrcpy(uBuffer,"1.234"); @@ -289,6 +293,19 @@ static void TestLocalizedString(void) { if (numResult != 1234) { log_err("u_fscanf failed to work on a de string Got: %d\n", numResult); } + + strFile = u_fstropen(testStr, sizeof(testStr)/sizeof(testStr[0]), NULL); + u_fprintf(strFile, "%d", 1234); + u_frewind(strFile); + numResult = -1; + u_fscanf(strFile, "%d", &numResult); + u_fclose(strFile); + if (numResult != 1234) { + log_err("u_fscanf failed to work on a default locale string Got: %d, Expected: 1234\n", numResult); + } + if (u_fstropen(testStr, -1, NULL) != NULL) { + log_err("u_fstropen returned a UFILE* on a negative buffer size\n", numResult); + } #endif } @@ -714,9 +731,11 @@ static void TestVargs(void) { static void TestCount(void) { #if !UCONFIG_NO_FORMATTING + static const UChar x15[] = { 0x78, 0x31, 0x35, 0 }; UChar testStr[16]; + UChar character; int16_t i16 = -1; - int32_t i32 = -1; + int32_t i32 = -1, actual_count, actual_result; int64_t i64 = -1; u_uastrcpy(testStr, "1233456789"); if (u_sscanf(testStr, "%*3[123]%n%*[1-9]", &i32) != 0) { @@ -737,6 +756,19 @@ static void TestCount(void) { if (i64 != 10) { log_err("test 3: scanf did not return 10\n", i64); } + actual_result = u_sscanf(x15, "%C%d%n", &character, &i32, &actual_count); + if (actual_result != 2) { + log_err("scanf should return 2, but returned %d\n", actual_result); + } + if (character != 0x78) { + log_err("scanf should return 0x78 for the character, but returned %X\n", character); + } + if (i32 != 15) { + log_err("scanf should return 15 for the number, but returned %d\n", i32); + } + if (actual_count != 3) { + log_err("scanf should return 3 for actual_count, but returned %d\n", actual_count); + } #endif } diff --git a/icuSources/test/iotest/trnstst.c b/icuSources/test/iotest/trnstst.c new file mode 100644 index 00000000..8f610132 --- /dev/null +++ b/icuSources/test/iotest/trnstst.c @@ -0,0 +1,316 @@ +/* +********************************************************************** +* Copyright (C) 2005-2005, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* file name: strtst.c +* created by: George Rhoten +*/ + +#include "iotest.h" +#include "unicode/ustdio.h" +#include "unicode/utrans.h" +#include "unicode/ustring.h" + +static void TestTranslitOps(void) +{ +#if !UCONFIG_NO_TRANSLITERATION + UFILE *f; + UErrorCode err = U_ZERO_ERROR; + UTransliterator *a = NULL, *b = NULL, *c = NULL; + + log_verbose("opening a transliterator and UFILE for testing\n"); + + f = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL); + if(f == NULL) + { + log_err("Couldn't open test file for writing\n"); + return; + } + + a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); + if(U_FAILURE(err)) + { + log_err("Error opening transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + + log_verbose("setting a transliterator\n"); + b = u_fsettransliterator(f, U_WRITE, a, &err); + if(U_FAILURE(err)) + { + log_err("Error setting transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + if(b != NULL) + { + log_err("Error, a transliterator was already set!\n"); + } + + b = u_fsettransliterator(NULL, U_WRITE, a, &err); + if(err != U_ILLEGAL_ARGUMENT_ERROR) + { + log_err("Error setting transliterator on NULL file err=%s\n", u_errorName(err)); + } + + if(b != a) + { + log_err("Error getting the same transliterator was not returned on NULL file\n"); + } + + err = U_FILE_ACCESS_ERROR; + b = u_fsettransliterator(f, U_WRITE, a, &err); + if(err != U_FILE_ACCESS_ERROR) + { + log_err("Error setting transliterator on error status err=%s\n", u_errorName(err)); + } + + if(b != a) + { + log_err("Error getting the same transliterator on error status\n"); + } + err = U_ZERO_ERROR; + + + log_verbose("un-setting transliterator (setting to null)\n"); + c = u_fsettransliterator(f, U_WRITE, NULL, &err); + if(U_FAILURE(err)) + { + log_err("Err setting transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + if(c != a) + { + log_err("Err, transliterator that came back was not the original one.\n"); + } + + log_verbose("Trying to set read transliterator (should fail)\n"); + b = u_fsettransliterator(f, U_READ, NULL, &err); + if(err != U_UNSUPPORTED_ERROR) + { + log_err("Should have U_UNSUPPORTED_ERROR setting Read transliterator but got %s - REVISIT AND UPDATE TEST\n", u_errorName(err)); + u_fclose(f); + return; + } + else + { + log_verbose("Got %s error (expected) setting READ transliterator.\n", u_errorName(err)); + err = U_ZERO_ERROR; + } + + + utrans_close(c); + u_fclose(f); +#endif +} + +static void TestTranslitFileOut(void) +{ +#if !UCONFIG_NO_FORMATTING +#if !UCONFIG_NO_TRANSLITERATION + UFILE *f; + UErrorCode err = U_ZERO_ERROR; + UTransliterator *a = NULL, *b = NULL, *c = NULL; + FILE *infile; + UChar compare[] = { 0xfeff, 0x03a3, 0x03c4, 0x03b5, 0x03c6, 0x1f00, 0x03bd, 0x03bf, 0x03c2, 0x043C, 0x0000 }; + UChar ubuf[256]; + int len; + + log_verbose("opening a transliterator and UFILE for testing\n"); + + f = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", "utf-16"); + if(f == NULL) + { + log_err("Couldn't open test file for writing\n"); + return; + } + + a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); + if(U_FAILURE(err)) + { + log_err("Err opening transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + log_verbose("setting a transliterator\n"); + b = u_fsettransliterator(f, U_WRITE, a, &err); + if(U_FAILURE(err)) + { + log_err("Err setting transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + if(b != NULL) + { + log_err("Err, a transliterator was already set!\n"); + } + + u_fprintf(f, "Stephanos"); + + c = utrans_open("Latin-Cyrillic", UTRANS_FORWARD, NULL, -1, NULL, &err); + if(U_FAILURE(err)) + { + log_err("Err opening transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + log_verbose("setting a transliterator\n"); + b = u_fsettransliterator(f, U_WRITE, c, &err); + if(U_FAILURE(err)) + { + log_err("Err setting transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + if(b != a) + { + log_err("Error: a different transliterator was returned!\n"); + } + utrans_close(b); + + u_fprintf(f, "m"); + + u_fclose(f); + + log_verbose("Re reading test file to verify transliteration\n"); + infile = fopen(STANDARD_TEST_FILE, "rb"); + if(infile == NULL) + { + log_err("Couldn't reopen test file\n"); + return; + } + + len=fread(ubuf, sizeof(UChar), u_strlen(compare), infile); + log_verbose("Read %d UChars\n", len); + if(len != u_strlen(compare)) + { + log_err("Wanted %d UChars from file, got %d\n", u_strlen(compare), len); + } + ubuf[len]=0; + + if(u_strlen(compare) != u_strlen(ubuf)) + { + log_err("Wanted %d UChars from file, but u_strlen() returns %d\n", u_strlen(compare), len); + } + + if(u_strcmp(compare, ubuf)) + { + log_err("Read string doesn't match expected.\n"); + } + else + { + log_verbose("Read string matches expected.\n"); + } + + fclose(infile); +#endif +#endif +} + +static void TestTranslitStringOut(void) +{ +#if !UCONFIG_NO_FORMATTING +#if !UCONFIG_NO_TRANSLITERATION + UFILE *f; + UErrorCode err = U_ZERO_ERROR; + UTransliterator *a = NULL, *b = NULL, *c = NULL; + UChar compare[] = { 0x03a3, 0x03c4, 0x03b5, 0x03c6, 0x1f00, 0x03bd, 0x03bf, 0x03c2, 0x043C, 0x0000 }; + UChar ubuf[256]; + + log_verbose("opening a transliterator and UFILE for testing\n"); + + f = u_fstropen(ubuf, sizeof(ubuf)/sizeof(ubuf[0]), "en_US_POSIX"); + if(f == NULL) + { + log_err("Couldn't open test file for writing\n"); + return; + } + + a = utrans_open("Latin-Greek", UTRANS_FORWARD, NULL, -1, NULL, &err); + if(U_FAILURE(err)) + { + log_err("Err opening transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + log_verbose("setting a transliterator\n"); + b = u_fsettransliterator(f, U_WRITE, a, &err); + if(U_FAILURE(err)) + { + log_err("Err setting transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + if(b != NULL) + { + log_err("Err, a transliterator was already set!\n"); + } + + u_fprintf(f, "Stephanos"); + + c = utrans_open("Latin-Cyrillic", UTRANS_FORWARD, NULL, -1, NULL, &err); + if(U_FAILURE(err)) + { + log_err("Err opening transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + log_verbose("setting a transliterator\n"); + b = u_fsettransliterator(f, U_WRITE, c, &err); + if(U_FAILURE(err)) + { + log_err("Err setting transliterator %s\n", u_errorName(err)); + u_fclose(f); + return; + } + + if(b != a) + { + log_err("Error: a different transliterator was returned!\n"); + } + utrans_close(b); + + u_fprintf(f, "m"); + + u_fclose(f); + + if(u_strlen(compare) != u_strlen(ubuf)) + { + log_err("Wanted %d UChars from file, but u_strlen() returns %d\n", u_strlen(compare), u_strlen(ubuf)); + } + + if(u_strcmp(compare, ubuf)) + { + log_err("Read string doesn't match expected.\n"); + } + else + { + log_verbose("Read string matches expected.\n"); + } +#endif +#endif +} + +U_CFUNC void +addTranslitTest(TestNode** root) { +#if !UCONFIG_NO_TRANSLITERATION + addTest(root, &TestTranslitOps, "translit/ops"); +#if !UCONFIG_NO_FORMATTING + addTest(root, &TestTranslitFileOut, "translit/fileOut"); + addTest(root, &TestTranslitStringOut, "translit/stringOut"); +#endif +#endif +} diff --git a/icuSources/test/letest/FontTableCache.cpp b/icuSources/test/letest/FontTableCache.cpp index 84d76041..cf28de22 100644 --- a/icuSources/test/letest/FontTableCache.cpp +++ b/icuSources/test/letest/FontTableCache.cpp @@ -1,12 +1,13 @@ /* ********************************************************************** - * Copyright (C) 2003, International Business Machines + * Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ #include "layout/LETypes.h" +#include "letest.h" #include "FontTableCache.h" #define TABLE_CACHE_INIT 5 @@ -21,7 +22,7 @@ struct FontTableCacheEntry FontTableCache::FontTableCache() : fTableCacheCurr(0), fTableCacheSize(TABLE_CACHE_INIT) { - fTableCache = LE_NEW_ARRAY(FontTableCacheEntry, fTableCacheSize); + fTableCache = NEW_ARRAY(FontTableCacheEntry, fTableCacheSize); if (fTableCache == NULL) { fTableCacheSize = 0; @@ -37,13 +38,15 @@ FontTableCache::FontTableCache() FontTableCache::~FontTableCache() { for (int i = fTableCacheCurr - 1; i >= 0; i -= 1) { - LE_DELETE_ARRAY(fTableCache[i].table); + DELETE_ARRAY(fTableCache[i].table); fTableCache[i].tag = 0; fTableCache[i].table = NULL; } fTableCacheCurr = 0; + + DELETE_ARRAY(fTableCache); } const void *FontTableCache::find(LETag tableTag) const @@ -66,7 +69,7 @@ void FontTableCache::add(LETag tableTag, const void *table) if (fTableCacheCurr >= fTableCacheSize) { le_int32 newSize = fTableCacheSize + TABLE_CACHE_GROW; - fTableCache = (FontTableCacheEntry *) LE_GROW_ARRAY(fTableCache, newSize); + fTableCache = (FontTableCacheEntry *) GROW_ARRAY(fTableCache, newSize); for (le_int32 i = fTableCacheSize; i < newSize; i += 1) { fTableCache[i].tag = 0; diff --git a/icuSources/test/letest/Makefile.in b/icuSources/test/letest/Makefile.in index 400fc55b..55f6b88f 100644 --- a/icuSources/test/letest/Makefile.in +++ b/icuSources/test/letest/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - test/letest -## Copyright (c) 2001-2003, International Business Machines Corporation and +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -23,11 +23,24 @@ CLEANFILES = *~ $(DEPS) TESTTARGET = letest GENTARGET = gendata -CPPFLAGS += -DLE_USE_CMEMORY -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/layout -I$(top_srcdir) -LIBS = $(LIBICULE) $(LIBICUUC) @LIBS@ @LIB_M@ +BUILDDIR := $(CURR_SRCCODE_FULL_DIR)/../../ +# Simplify the path for Unix +BUILDDIR := $(BUILDDIR:test/cintltst/../../=) +# Simplify the path for Windows +BUILDDIR := $(BUILDDIR:test\\cintltst/../../=) +# Simplify the path for Windows 98 +BUILDDIR := $(BUILDDIR:TEST\\CINTLTST/../../=) -COMMONOBJECTS = cmaps.o FontTableCache.o PortableFontInstance.o -TESTOBJECTS = testdata.o letest.o +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif + +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/layout -I$(top_srcdir) +DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"' +LIBS = $(LIBICULE) $(LIBICUUC) $(LIBICUI18N) $(LIBCTESTFW) $(LIBICUTOOLUTIL) @LIBS@ @LIB_M@ + +COMMONOBJECTS = letsutil.o cmaps.o FontTableCache.o SimpleFontInstance.o PortableFontInstance.o +TESTOBJECTS = letest.o GENOBJECTS = gendata.o OBJECTS = $(COMMONOBJECTS) $(TESTOBJECTS) $(GENOBJECTS) diff --git a/icuSources/test/letest/PortableFontInstance.cpp b/icuSources/test/letest/PortableFontInstance.cpp index b84102aa..c96b6ed7 100644 --- a/icuSources/test/letest/PortableFontInstance.cpp +++ b/icuSources/test/letest/PortableFontInstance.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -19,6 +19,7 @@ #include "PortableFontInstance.h" +#include "letest.h" #include "sfnt.h" #include <string.h> @@ -63,10 +64,9 @@ le_int8 PortableFontInstance::highBit(le_int32 value) return bit; } - -PortableFontInstance::PortableFontInstance(char *fileName, float pointSize, LEErrorCode &status) - : fFile(NULL), fUnitsPerEM(0), fPointSize(pointSize), fAscent(0), fDescent(0), fLeading(0), - fDirectory(NULL), fCMAPMapper(NULL), fHMTXTable(NULL), fNumGlyphs(0), fNumLongHorMetrics(0) +PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize, LEErrorCode &status) + : fFile(NULL), fPointSize(pointSize), fUnitsPerEM(0), fFontChecksum(0), fAscent(0), fDescent(0), fLeading(0), + fDirectory(NULL), fNAMETable(NULL), fNameCount(0), fNameStringOffset(0), fCMAPMapper(NULL), fHMTXTable(NULL), fNumGlyphs(0), fNumLongHorMetrics(0) { if (LE_FAILURE(status)) { return; @@ -90,9 +90,10 @@ PortableFontInstance::PortableFontInstance(char *fileName, float pointSize, LEEr const LETag hheaTag = LE_HHEA_TABLE_TAG; const HEADTable *headTable = NULL; const HHEATable *hheaTable = NULL; +// const NAMETable *nameTable = NULL; le_uint16 numTables = 0; - fDirectory = (const SFNTDirectory *) LE_NEW_ARRAY(char, dirSize); + fDirectory = (const SFNTDirectory *) NEW_ARRAY(char, dirSize); if (fDirectory == NULL) { status = LE_MEMORY_ALLOCATION_ERROR; @@ -118,9 +119,26 @@ PortableFontInstance::PortableFontInstance(char *fileName, float pointSize, LEEr goto error_exit; } - fUnitsPerEM = SWAPW(headTable->unitsPerEm); + fUnitsPerEM = SWAPW(headTable->unitsPerEm); + fFontChecksum = SWAPL(headTable->checksumAdjustment); deleteTable(headTable); + //nameTable = (NAMETable *) readFontTable(nameTag); + + //if (nameTable == NULL) { + // status = LE_MISSING_FONT_TABLE_ERROR; + // goto error_exit; + //} + + //fFontVersionString = findName(nameTable, NAME_VERSION_STRING, PLATFORM_MACINTOSH, MACINTOSH_ROMAN, MACINTOSH_ENGLISH); + + //if (fFontVersionString == NULL) { + // status = LE_MISSING_FONT_TABLE_ERROR; + // goto error_exit; + //} + + //deleteTable(nameTable); + hheaTable = (HHEATable *) readFontTable(hheaTag); if (hheaTable == NULL) { @@ -157,16 +175,17 @@ PortableFontInstance::~PortableFontInstance() fclose(fFile); deleteTable(fHMTXTable); + deleteTable(fNAMETable); delete fCMAPMapper; - LE_DELETE_ARRAY(fDirectory); + DELETE_ARRAY(fDirectory); } -}; +} void PortableFontInstance::deleteTable(const void *table) const { - LE_DELETE_ARRAY(table); + DELETE_ARRAY(table); } const DirectoryEntry *PortableFontInstance::findTable(LETag tag) const @@ -206,7 +225,7 @@ const void *PortableFontInstance::readTable(LETag tag, le_uint32 *length) const *length = SWAPL(entry->length); - void *table = LE_NEW_ARRAY(char, *length); + void *table = NEW_ARRAY(char, *length); if (table != NULL) { fseek(fFile, SWAPL(entry->offset), SEEK_SET); @@ -240,6 +259,43 @@ CMAPMapper *PortableFontInstance::findUnicodeMapper() return CMAPMapper::createUnicodeMapper(cmap); } +const char *PortableFontInstance::getNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const +{ + if (fNAMETable == NULL) { + LETag nameTag = LE_NAME_TABLE_TAG; + PortableFontInstance *realThis = (PortableFontInstance *) this; + + realThis->fNAMETable = (const NAMETable *) readFontTable(nameTag); + + if (realThis->fNAMETable != NULL) { + realThis->fNameCount = SWAPW(realThis->fNAMETable->count); + realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset); + } + } + + for(le_int32 i = 0; i < fNameCount; i += 1) { + const NameRecord *nameRecord = &fNAMETable->nameRecords[i]; + + if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID == encodingID) && + SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { + char *name = ((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset); + le_uint16 length = SWAPW(nameRecord->length); + char *result = NEW_ARRAY(char, length + 2); + + ARRAY_COPY(result, name, length); + result[length] = result[length + 1] = 0; + + return result; + } + } + + return NULL; +} + +void PortableFontInstance::deleteNameString(const char *name) const +{ + DELETE_ARRAY(name); +} void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const { @@ -274,8 +330,71 @@ void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) co advance.fY = 0; } -le_bool PortableFontInstance::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const +le_bool PortableFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const { return FALSE; } +le_int32 PortableFontInstance::getUnitsPerEM() const +{ + return fUnitsPerEM; +} + +le_uint32 PortableFontInstance::getFontChecksum() const +{ + return fFontChecksum; +} + +le_int32 PortableFontInstance::getAscent() const +{ + return fAscent; +} + +le_int32 PortableFontInstance::getDescent() const +{ + return fDescent; +} + +le_int32 PortableFontInstance::getLeading() const +{ + return fLeading; +} + +// We really want to inherit this method from the superclass, but some compilers +// issue a warning if we don't implement it... +LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const +{ + return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth); +} + +// We really want to inherit this method from the superclass, but some compilers +// issue a warning if we don't implement it... +LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const +{ + return LEFontInstance::mapCharToGlyph(ch, mapper); +} + +LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch) const +{ + return fCMAPMapper->unicodeToGlyph(ch); +} + +float PortableFontInstance::getXPixelsPerEm() const +{ + return fPointSize; +} + +float PortableFontInstance::getYPixelsPerEm() const +{ + return fPointSize; +} + +float PortableFontInstance::getScaleFactorX() const +{ + return 1.0; +} + +float PortableFontInstance::getScaleFactorY() const +{ + return 1.0; +} diff --git a/icuSources/test/letest/PortableFontInstance.h b/icuSources/test/letest/PortableFontInstance.h index 0375d151..3c22d5eb 100644 --- a/icuSources/test/letest/PortableFontInstance.h +++ b/icuSources/test/letest/PortableFontInstance.h @@ -2,7 +2,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -30,11 +30,12 @@ class PortableFontInstance : public LEFontInstance, protected FontTableCache private: FILE *fFile; - float fPointSize; - le_int32 fUnitsPerEM; - le_int32 fAscent; - le_int32 fDescent; - le_int32 fLeading; + float fPointSize; + le_int32 fUnitsPerEM; + le_uint32 fFontChecksum; + le_int32 fAscent; + le_int32 fDescent; + le_int32 fLeading; const SFNTDirectory *fDirectory; le_uint16 fDirPower; @@ -43,6 +44,10 @@ private: float fDeviceScaleX; float fDeviceScaleY; + const NAMETable *fNAMETable; + le_uint16 fNameCount; + le_uint16 fNameStringOffset; + CMAPMapper *fCMAPMapper; const HMTXTable *fHMTXTable; @@ -62,60 +67,47 @@ protected: const void *readFontTable(LETag tableTag) const; public: - PortableFontInstance(char *fileName, float pointSize, LEErrorCode &status); + PortableFontInstance(const char *fileName, float pointSize, LEErrorCode &status); virtual ~PortableFontInstance(); virtual const void *getFontTable(LETag tableTag) const; - virtual le_int32 getUnitsPerEM() const - { - return fUnitsPerEM; - }; + virtual const char *getNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const; + + virtual void deleteNameString(const char *name) const; + + virtual le_int32 getUnitsPerEM() const; + + virtual le_uint32 getFontChecksum() const; - virtual le_int32 getAscent() const - { - return fAscent; - } + virtual le_int32 getAscent() const; - virtual le_int32 getDescent() const - { - return fDescent; - } + virtual le_int32 getDescent() const; - virtual le_int32 getLeading() const - { - return fLeading; - } + virtual le_int32 getLeading() const; - virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const - { - return fCMAPMapper->unicodeToGlyph(ch); - } + // We really want to inherit this method from the superclass, but some compilers + // issue a warning if we don't implement it... + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const; + + // We really want to inherit this method from the superclass, but some compilers + // issue a warning if we don't implement it... + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const; + + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const; virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const; virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const; - float getXPixelsPerEm() const - { - return fPointSize; - }; - - float getYPixelsPerEm() const - { - return fPointSize; - }; - - float getScaleFactorX() const - { - return 1.0; - } - - float getScaleFactorY() const - { - return 1.0; - } + float getXPixelsPerEm() const; + + float getYPixelsPerEm() const; + + float getScaleFactorX() const; + + float getScaleFactorY() const; }; diff --git a/icuSources/test/letest/SimpleFontInstance.cpp b/icuSources/test/letest/SimpleFontInstance.cpp new file mode 100644 index 00000000..29543e3f --- /dev/null +++ b/icuSources/test/letest/SimpleFontInstance.cpp @@ -0,0 +1,132 @@ +/* + ******************************************************************************* + * + * Copyright (C) 1999-2006, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * file name: SimpleFontInstance.cpp + * + * created on: 03/30/2006 + * created by: Eric R. Mader + */ + +#include "unicode/utypes.h" +#include "unicode/uchar.h" + +#include "layout/LETypes.h" +#include "layout/LEFontInstance.h" + +#include "CanonShaping.h" +#include "SimpleFontInstance.h" + +SimpleFontInstance::SimpleFontInstance(float pointSize, LEErrorCode &status) + : fPointSize(pointSize), fAscent(0), fDescent(0) +{ + if (LE_FAILURE(status)) { + return; + } + + fAscent = (le_int32) yUnitsToPoints(2000.0); + fDescent = (le_int32) yUnitsToPoints(600.0); + + return; +} + +SimpleFontInstance::~SimpleFontInstance() +{ + // nothing to do... +} + +const void *SimpleFontInstance::getFontTable(LETag tableTag) const +{ + if (tableTag == LE_GSUB_TABLE_TAG) { + return CanonShaping::glyphSubstitutionTable; + } + + if (tableTag == LE_GDEF_TABLE_TAG) { + return CanonShaping::glyphDefinitionTable; + } + + return NULL; +} + +void SimpleFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const +{ +#if 0 + if (u_getCombiningClass((UChar32) glyph) == 0) { + advance.fX = xUnitsToPoints(2048); + } else { + advance.fX = 0; + } +#else + advance.fX = xUnitsToPoints(2048); +#endif + + advance.fY = 0; +} + +le_int32 SimpleFontInstance::getUnitsPerEM() const +{ + return 2048; +} + +le_int32 SimpleFontInstance::getAscent() const +{ + return fAscent; +} + +le_int32 SimpleFontInstance::getDescent() const +{ + return fDescent; +} + +le_int32 SimpleFontInstance::getLeading() const +{ + return 0; +} + +// We really want to inherit this method from the superclass, but some compilers +// issue a warning if we don't implement it... +LEGlyphID SimpleFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const +{ + return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth); +} + +// We really want to inherit this method from the superclass, but some compilers +// issue a warning if we don't implement it... +LEGlyphID SimpleFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const +{ + return LEFontInstance::mapCharToGlyph(ch, mapper); +} + +LEGlyphID SimpleFontInstance::mapCharToGlyph(LEUnicode32 ch) const +{ + return (LEGlyphID) ch; +} + +float SimpleFontInstance::getXPixelsPerEm() const +{ + return fPointSize; +} + +float SimpleFontInstance::getYPixelsPerEm() const +{ + return fPointSize; +} + +float SimpleFontInstance::getScaleFactorX() const +{ + return 1.0; +} + +float SimpleFontInstance::getScaleFactorY() const +{ + return 1.0; +} + +le_bool SimpleFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const +{ + return FALSE; +} + diff --git a/icuSources/test/letest/SimpleFontInstance.h b/icuSources/test/letest/SimpleFontInstance.h new file mode 100644 index 00000000..4bac8f88 --- /dev/null +++ b/icuSources/test/letest/SimpleFontInstance.h @@ -0,0 +1,72 @@ + +/* + ******************************************************************************* + * + * Copyright (C) 1999-2006, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * file name: SimpleFontInstance.h + * + * created on: 03/30/2006 + * created by: Eric R. Mader + */ + +#ifndef __SIMPLEFONTINSTANCE_H +#define __SIMPLEFONTINSTANCE_H + +#include <stdio.h> + +#include "layout/LETypes.h" +#include "layout/LEFontInstance.h" + +class SimpleFontInstance : public LEFontInstance +{ +private: + float fPointSize; + le_int32 fAscent; + le_int32 fDescent; + +protected: + const void *readFontTable(LETag tableTag) const; + +public: + SimpleFontInstance(float pointSize, LEErrorCode &status); + + virtual ~SimpleFontInstance(); + + virtual const void *getFontTable(LETag tableTag) const; + + virtual le_int32 getUnitsPerEM() const; + + virtual le_int32 getAscent() const; + + virtual le_int32 getDescent() const; + + virtual le_int32 getLeading() const; + + // We really want to inherit this method from the superclass, but some compilers + // issue a warning if we don't implement it... + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const; + + // We really want to inherit this method from the superclass, but some compilers + // issue a warning if we don't implement it... + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const; + + virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const; + + virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const; + + virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const; + + float getXPixelsPerEm() const; + + float getYPixelsPerEm() const; + + float getScaleFactorX() const; + + float getScaleFactorY() const; + +}; + +#endif diff --git a/icuSources/test/letest/cmaps.h b/icuSources/test/letest/cmaps.h index 4b78ad66..df0bb116 100644 --- a/icuSources/test/letest/cmaps.h +++ b/icuSources/test/letest/cmaps.h @@ -1,6 +1,6 @@ /*************************************************************************** * -* Copyright (C) 1998-2003, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ************************************************************************/ @@ -9,7 +9,8 @@ #ifndef __CMAPS_H #define __CMAPS_H -#include "LETypes.h" +#include "layout/LETypes.h" +#include "letest.h" #include "sfnt.h" class CMAPMapper @@ -77,7 +78,7 @@ inline CMAPMapper::CMAPMapper(const CMAPTable *cmap) inline CMAPMapper::~CMAPMapper() { - LE_DELETE_ARRAY(fcmap); + DELETE_ARRAY(fcmap); } #endif diff --git a/icuSources/test/letest/gendata.cpp b/icuSources/test/letest/gendata.cpp index 9b54a873..58f8a1bb 100644 --- a/icuSources/test/letest/gendata.cpp +++ b/icuSources/test/letest/gendata.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2004, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -12,291 +12,66 @@ */ #include <stdio.h> -#include <ctype.h> +#include <string.h> +#include <time.h> -#include "LETypes.h" -#include "LEScripts.h" -#include "LayoutEngine.h" +#include "unicode/utypes.h" +#include "unicode/unistr.h" +#include "unicode/uscript.h" +#include "unicode/ubidi.h" + +#include "layout/LETypes.h" +#include "layout/LEScripts.h" +#include "layout/LayoutEngine.h" #include "PortableFontInstance.h" +#include "SimpleFontInstance.h" -#include "unicode/uscript.h" +#include "xmlparser.h" -U_NAMESPACE_USE +#include "letsutil.h" +#include "letest.h" -#define ARRAY_LENGTH(array) (sizeof array / sizeof array[0]) +U_NAMESPACE_USE struct TestInput { - char *fontName; - LEUnicode *text; - le_int32 textLength; - le_int32 scriptCode; - le_bool rightToLeft; + const char *fontName; + LEUnicode *text; + le_int32 textLength; + le_int32 scriptCode; + le_bool rightToLeft; }; /* * FIXME: should use the output file name and the current date. */ -char *header = - "/*\n" - " *******************************************************************************\n" - " *\n" - " * Copyright (C) 1999-2004, International Business Machines\n" - " * Corporation and others. All Rights Reserved.\n" - " *\n" - " * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT\n" - " * UNLESS YOU REALLY KNOW WHAT YOU'RE DOING.\n" - " *\n" - " *******************************************************************************\n" - " *\n" - " * file name: testdata.cpp\n" - " * created on: 12/14/2000\n" - " * created by: gendata.cpp\n" - " */\n" +const char *header = + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" "\n" - "#include \"LETypes.h\"\n" - "#include \"LEScripts.h\"\n" - "#include \"letest.h\"\n" - "\n"; - -#if 0 -char *scriptNames[] = -{ - "USCRIPT_COMMON", /* Zyyy */ - "USCRIPT_INHERITED", /* Qaai */ - "USCRIPT_ARABIC", /* Arab */ - "USCRIPT_ARMENIAN", /* Armn */ - "USCRIPT_BENGALI", /* Beng */ - "USCRIPT_BOPOMOFO", /* Bopo */ - "USCRIPT_CHEROKEE", /* Cher */ - "USCRIPT_COPTIC", /* Qaac */ - "USCRIPT_CYRILLIC", /* Cyrl (Cyrs) */ - "USCRIPT_DESERET", /* Dsrt */ - "USCRIPT_DEVANAGARI", /* Deva */ - "USCRIPT_ETHIOPIC", /* Ethi */ - "USCRIPT_GEORGIAN", /* Geor (Geon, Geoa) */ - "USCRIPT_GOTHIC", /* Goth */ - "USCRIPT_GREEK", /* Grek */ - "USCRIPT_GUJARATI", /* Gujr */ - "USCRIPT_GURMUKHI", /* Guru */ - "USCRIPT_HAN", /* Hani */ - "USCRIPT_HANGUL", /* Hang */ - "USCRIPT_HEBREW", /* Hebr */ - "USCRIPT_HIRAGANA", /* Hira */ - "USCRIPT_KANNADA", /* Knda */ - "USCRIPT_KATAKANA", /* Kana */ - "USCRIPT_KHMER", /* Khmr */ - "USCRIPT_LAO", /* Laoo */ - "USCRIPT_LATIN", /* Latn (Latf, Latg) */ - "USCRIPT_MALAYALAM", /* Mlym */ - "USCRIPT_MONGOLIAN", /* Mong */ - "USCRIPT_MYANMAR", /* Mymr */ - "USCRIPT_OGHAM", /* Ogam */ - "USCRIPT_OLD_ITALIC", /* Ital */ - "USCRIPT_ORIYA", /* Orya */ - "USCRIPT_RUNIC", /* Runr */ - "USCRIPT_SINHALA", /* Sinh */ - "USCRIPT_SYRIAC", /* Syrc (Syrj, Syrn, Syre) */ - "USCRIPT_TAMIL", /* Taml */ - "USCRIPT_TELUGU", /* Telu */ - "USCRIPT_THAANA", /* Thaa */ - "USCRIPT_THAI", /* Thai */ - "USCRIPT_TIBETAN", /* Tibt */ - "USCRIPT_UCAS", /* Cans */ - "USCRIPT_YI", /* Yiii */ - "USCRIPT_TAGALOG", /* Tglg */ - "USCRIPT_HANUNOO", /* Hano */ - "USCRIPT_BUHID", /* Buhd */ - "USCRIPT_TAGBANWA" /* Tagb */ -}; -#endif - -LEUnicode devaText[] = -{ - 0x0936, 0x094d, 0x0930, 0x0940, 0x092e, 0x0926, 0x094d, 0x0020, - 0x092d, 0x0917, 0x0935, 0x0926, 0x094d, 0x0917, 0x0940, 0x0924, - 0x093e, 0x0020, 0x0905, 0x0927, 0x094d, 0x092f, 0x093e, 0x092f, - 0x0020, 0x0905, 0x0930, 0x094d, 0x091c, 0x0941, 0x0928, 0x0020, - 0x0935, 0x093f, 0x0937, 0x093e, 0x0926, 0x0020, 0x092f, 0x094b, - 0x0917, 0x0020, 0x0927, 0x0943, 0x0924, 0x0930, 0x093e, 0x0937, - 0x094d, 0x091f, 0x094d, 0x0930, 0x0020, 0x0909, 0x0935, 0x093E, - 0x091A, 0x0943, 0x0020, 0x0927, 0x0930, 0x094d, 0x092e, 0x0915, - 0x094d, 0x0937, 0x0947, 0x0924, 0x094d, 0x0930, 0x0947, 0x0020, - 0x0915, 0x0941, 0x0930, 0x0941, 0x0915, 0x094d, 0x0937, 0x0947, - 0x0924, 0x094d, 0x0930, 0x0947, 0x0020, 0x0938, 0x092e, 0x0935, - 0x0947, 0x0924, 0x093e, 0x0020, 0x092f, 0x0941, 0x092f, 0x0941, - 0x0924, 0x094d, 0x0938, 0x0935, 0x0903, 0x0020, 0x092e, 0x093e, - 0x092e, 0x0915, 0x093e, 0x0903, 0x0020, 0x092a, 0x093e, 0x0923, - 0x094d, 0x0921, 0x0935, 0x093e, 0x0936, 0x094d, 0x091a, 0x0948, - 0x0935, 0x0020, 0x0915, 0x093f, 0x092e, 0x0915, 0x0941, 0x0930, - 0x094d, 0x0935, 0x0924, 0x0020, 0x0938, 0x0902, 0x091c, 0x0935 -}; - -le_int32 devaTextLength = ARRAY_LENGTH(devaText); - -LEUnicode arabText[] = -{ - 0x0623, 0x0633, 0x0627, 0x0633, 0x064B, 0x0627, 0x060C, 0x0020, - 0x062A, 0x062A, 0x0639, 0x0627, 0x0645, 0x0644, 0x0020, - 0x0627, 0x0644, 0x062D, 0x0648, 0x0627, 0x0633, 0x064A, 0x0628, - 0x0020, 0x0641, 0x0642, 0x0637, 0x0020, 0x0645, 0x0639, 0x0020, - 0x0627, 0x0644, 0x0623, 0x0631, 0x0642, 0x0627, 0x0645, 0x060C, - 0x0020, 0x0648, 0x062A, 0x0642, 0x0648, 0x0645, 0x0020, 0x0628, - 0x062A, 0x062E, 0x0632, 0x064A, 0x0646, 0x0020, 0x0627, 0x0644, - 0x0623, 0x062D, 0x0631, 0x0641, 0x0020, 0x0648, 0x0627, 0x0644, - 0x0645, 0x062D, 0x0627, 0x0631, 0x0641, 0x0020, 0x0627, 0x0644, - 0x0623, 0x062E, 0x0631, 0x0649, 0x0020, 0x0628, 0x0639, 0x062F, - 0x0020, 0x0623, 0x0646, 0x0020, 0x062A, 0x064F, 0x0639, 0x0637, - 0x064A, 0x0020, 0x0631, 0x0642, 0x0645, 0x0627, 0x0020, 0x0645, - 0x0639, 0x064A, 0x0646, 0x0627, 0x0020, 0x0644, 0x0643, 0x0644, - 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0020, 0x0645, 0x0646, - 0x0647, 0x0627, 0x002E, 0x0020, 0x0648, 0x0642, 0x0628, 0x0644, - 0x0020, 0x0627, 0x062E, 0x062A, 0x0631, 0x0627, 0x0639, 0x0020, - 0x0022, 0x064A, 0x0648, 0x0646, 0x0650, 0x0643, 0x0648, 0x062F, - 0x0022, 0x060C, 0x0020, 0x0643, 0x0627, 0x0646, 0x0020, 0x0647, - 0x0646, 0x0627, 0x0643, 0x0020, 0x0645, 0x0626, 0x0627, 0x062A, - 0x0020, 0x0627, 0x0644, 0x0623, 0x0646, 0x0638, 0x0645, 0x0629, - 0x0020, 0x0644, 0x0644, 0x062A, 0x0634, 0x0641, 0x064A, 0x0631, - 0x0020, 0x0648, 0x062A, 0x062E, 0x0635, 0x064A, 0x0635, 0x0020, - 0x0647, 0x0630, 0x0647, 0x0020, 0x0627, 0x0644, 0x0623, 0x0631, - 0x0642, 0x0627, 0x0645, 0x0020, 0x0644, 0x0644, 0x0645, 0x062D, - 0x0627, 0x0631, 0x0641, 0x060C, 0x0020, 0x0648, 0x0644, 0x0645, - 0x0020, 0x064A, 0x0648, 0x062C, 0x062F, 0x0020, 0x0646, 0x0638, - 0x0627, 0x0645, 0x0020, 0x062A, 0x0634, 0x0641, 0x064A, 0x0631, - 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0020, 0x064A, 0x062D, - 0x062A, 0x0648, 0x064A, 0x0020, 0x0639, 0x0644, 0x0649, 0x0020, - 0x062C, 0x0645, 0x064A, 0x0639, 0x0020, 0x0627, 0x0644, 0x0645, - 0x062D, 0x0627, 0x0631, 0x0641, 0x0020, 0x0627, 0x0644, 0x0636, - 0x0631, 0x0648, 0x0631, 0x064A, 0x0629 - - /* The next few sentences... - 0x002E, 0x0020, 0x0648, - 0x0639, 0x0644, 0x0649, 0x0020, 0x0633, 0x0628, 0x064A, 0x0644, - 0x0020, 0x0627, 0x0644, 0x0645, 0x062B, 0x0627, 0x0644, 0x060C, - 0x0020, 0x0641, 0x0625, 0x0646, 0x0020, 0x0627, 0x0644, 0x0627, - 0x062A, 0x062D, 0x0627, 0x062F, 0x0020, 0x0627, 0x0644, 0x0623, - 0x0648, 0x0631, 0x0648, 0x0628, 0x064A, 0x0020, 0x0644, 0x0648, - 0x062D, 0x062F, 0x0647, 0x060C, 0x0020, 0x0627, 0x062D, 0x062A, - 0x0648, 0x0649, 0x0020, 0x0627, 0x0644, 0x0639, 0x062F, 0x064A, - 0x062F, 0x0020, 0x0645, 0x0646, 0x0020, 0x0627, 0x0644, 0x0634, - 0x0641, 0x0631, 0x0627, 0x062A, 0x0020, 0x0627, 0x0644, 0x0645, - 0x062E, 0x062A, 0x0644, 0x0641, 0x0629, 0x0020, 0x0644, 0x064A, - 0x063A, 0x0637, 0x064A, 0x0020, 0x062C, 0x0645, 0x064A, 0x0639, - 0x0020, 0x0627, 0x0644, 0x0644, 0x063A, 0x0627, 0x062A, 0x0020, - 0x0627, 0x0644, 0x0645, 0x0633, 0x062A, 0x062E, 0x062F, 0x0645, - 0x0629, 0x0020, 0x0641, 0x064A, 0x0020, 0x0627, 0x0644, 0x0627, - 0x062A, 0x062D, 0x0627, 0x062F, 0x002E, 0x0020, 0x0648, 0x062D, - 0x062A, 0x0649, 0x0020, 0x0644, 0x0648, 0x0020, 0x0627, 0x0639, - 0x062A, 0x0628, 0x0631, 0x0646, 0x0627, 0x0020, 0x0644, 0x063A, - 0x0629, 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0629, 0x060C, - 0x0020, 0x0643, 0x0627, 0x0644, 0x0644, 0x063A, 0x0629, 0x0020, - 0x0627, 0x0644, 0x0625, 0x0646, 0x062C, 0x0644, 0x064A, 0x0632, - 0x064A, 0x0629, 0x060C, 0x0020, 0x0641, 0x0625, 0x0646, 0x0020, - 0x062C, 0x062F, 0x0648, 0x0644, 0x0020, 0x0634, 0x0641, 0x0631, - 0x0629, 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0020, 0x0644, - 0x0645, 0x0020, 0x064A, 0x0643, 0x0641, 0x0020, 0x0644, 0x0627, - 0x0633, 0x062A, 0x064A, 0x0639, 0x0627, 0x0628, 0x0020, 0x062C, - 0x0645, 0x064A, 0x0639, 0x0020, 0x0627, 0x0644, 0x0623, 0x062D, - 0x0631, 0x0641, 0x0020, 0x0648, 0x0639, 0x0644, 0x0627, 0x0645, - 0x0627, 0x062A, 0x0020, 0x0627, 0x0644, 0x062A, 0x0631, 0x0642, - 0x064A, 0x0645, 0x0020, 0x0648, 0x0627, 0x0644, 0x0631, 0x0645, - 0x0648, 0x0632, 0x0020, 0x0627, 0x0644, 0x0641, 0x0646, 0x064A, - 0x0629, 0x0020, 0x0648, 0x0627, 0x0644, 0x0639, 0x0644, 0x0645, - 0x064A, 0x0629, 0x0020, 0x0627, 0x0644, 0x0634, 0x0627, 0x0626, - 0x0639, 0x0629, 0x0020, 0x0627, 0x0644, 0x0627, 0x0633, 0x062A, - 0x0639, 0x0645, 0x0627, 0x0644, 0x002E */ -}; -le_int32 arabTextLength = ARRAY_LENGTH(arabText); - - -LEUnicode thaiSample[] = -{ - 0x0E1A, 0x0E17, 0x0E17, 0x0E35, 0x0E48, 0x0E51, 0x0E1E, 0x0E32, - 0x0E22, 0x0E38, 0x0E44, 0x0E0B, 0x0E42, 0x0E04, 0x0E25, 0x0E19, - 0x0E42, 0x0E14, 0x0E42, 0x0E23, 0x0E18, 0x0E35, 0x0E2D, 0x0E32, - 0x0E28, 0x0E31, 0x0E22, 0x0E2D, 0x0E22, 0x0E39, 0x0E48, 0x0E17, - 0x0E48, 0x0E32, 0x0E21, 0x0E01, 0x0E25, 0x0E32, 0x0E07, 0x0E17, - 0x0E38, 0x0E48, 0x0E07, 0x0E43, 0x0E2B, 0x0E0D, 0x0E48, 0x0E43, - 0x0E19, 0x0E41, 0x0E04, 0x0E19, 0x0E0B, 0x0E31, 0x0E2A, 0x0E01, - 0x0E31, 0x0E1A, 0x0E25, 0x0E38, 0x0E07, 0x0E40, 0x0E2E, 0x0E19, - 0x0E23, 0x0E35, 0x0E0A, 0x0E32, 0x0E27, 0x0E44, 0x0E23, 0x0E48, - 0x0E41, 0x0E25, 0x0E30, 0x0E1B, 0x0E49, 0x0E32, 0x0E40, 0x0E2D, - 0x0E47, 0x0E21, 0x0E20, 0x0E23, 0x0E23, 0x0E22, 0x0E32, 0x0E0A, - 0x0E32, 0x0E27, 0x0E44, 0x0E23, 0x0E48, 0x0E1A, 0x0E49, 0x0E32, - 0x0E19, 0x0E02, 0x0E2D, 0x0E07, 0x0E1E, 0x0E27, 0x0E01, 0x0E40, - 0x0E02, 0x0E32, 0x0E2B, 0x0E25, 0x0E31, 0x0E07, 0x0E40, 0x0E25, - 0x0E47, 0x0E01, 0x0E40, 0x0E1E, 0x0E23, 0x0E32, 0x0E30, 0x0E44, - 0x0E21, 0x0E49, 0x0E2A, 0x0E23, 0x0E49, 0x0E32, 0x0E07, 0x0E1A, - 0x0E49, 0x0E32, 0x0E19, 0x0E15, 0x0E49, 0x0E2D, 0x0E07, 0x0E02, - 0x0E19, 0x0E21, 0x0E32, 0x0E14, 0x0E49, 0x0E27, 0x0E22, 0x0E40, - 0x0E01, 0x0E27, 0x0E35, 0x0E22, 0x0E19, 0x0E40, 0x0E1B, 0x0E47, - 0x0E19, 0x0E23, 0x0E30, 0x0E22, 0x0E30, 0x0E17, 0x0E32, 0x0E07, - 0x0E2B, 0x0E25, 0x0E32, 0x0E22, 0x0E44, 0x0E21, 0x0E25, 0x0E4C - /* A few more lines... - 0x0E1A, 0x0E49, 0x0E32, 0x0E19, 0x0E21, 0x0E35, 0x0E2A, 0x0E35, - 0x0E48, 0x0E1D, 0x0E32, 0x0E21, 0x0E35, 0x0E1E, 0x0E37, 0x0E49, - 0x0E19, 0x0E01, 0x0E31, 0x0E1A, 0x0E2B, 0x0E25, 0x0E31, 0x0E07, - 0x0E04, 0x0E32, 0x0E23, 0x0E27, 0x0E21, 0x0E17, 0x0E33, 0x0E40, - 0x0E1B, 0x0E47, 0x0E19, 0x0E2B, 0x0E49, 0x0E2D, 0x0E07, 0x0E40, - 0x0E14, 0x0E35, 0x0E22, 0x0E27, 0x0E43, 0x0E19, 0x0E2B, 0x0E49, - 0x0E2D, 0x0E07, 0x0E21, 0x0E35, 0x0E17, 0x0E31, 0x0E49, 0x0E07, - 0x0E40, 0x0E15, 0x0E32, 0x0E2B, 0x0E38, 0x0E07, 0x0E15, 0x0E49, - 0x0E21, 0x0E17, 0x0E35, 0x0E48, 0x0E2A, 0x0E19, 0x0E34, 0x0E21, - 0x0E14, 0x0E39, 0x0E02, 0x0E36, 0x0E49, 0x0E19, 0x0E40, 0x0E25, - 0x0E2D, 0x0E30, 0x0E21, 0x0E35, 0x0E15, 0x0E39, 0x0E49, 0x0E43, - 0x0E2A, 0x0E48, 0x0E16, 0x0E49, 0x0E27, 0x0E22, 0x0E0A, 0x0E32, - 0x0E21, 0x0E42, 0x0E15, 0x0E4A, 0x0E30, 0x0E40, 0x0E01, 0x0E49, - 0x0E32, 0x0E2D, 0x0E35, 0x0E49, 0x0E2A, 0x0E32, 0x0E21, 0x0E2B, - 0x0E23 - */ -}; - -le_int32 thaiSampleLength = ARRAY_LENGTH(thaiSample); - -TestInput testInputs[] = { - {"raghu.ttf", devaText, devaTextLength, devaScriptCode, FALSE}, - {"CODE2000.TTF", arabText, arabTextLength, arabScriptCode, TRUE}, - {"LucidaSansRegular.ttf", arabText, arabTextLength, arabScriptCode, TRUE}, - {"Thonburi.ttf", thaiSample, thaiSampleLength, thaiScriptCode, FALSE} -}; - -#define TEST_COUNT ARRAY_LENGTH(testInputs) - -le_int32 testCount = TEST_COUNT; - -void dumpShorts(FILE *file, char *label, le_int32 id, le_uint16 *shorts, le_int32 count) { - char lineBuffer[8 * 8 + 2]; - le_int32 bufp = 0; - - fprintf(file, label, id); - - for (int i = 0; i < count; i += 1) { - if (i % 8 == 0 && bufp != 0) { - fprintf(file, " %s\n", lineBuffer); - bufp = 0; - } - - bufp += sprintf(&lineBuffer[bufp], "0x%4.4X, ", shorts[i]); - } - - if (bufp != 0) { - lineBuffer[bufp - 2] = '\0'; - fprintf(file, " %s\n", lineBuffer); - } - - fprintf(file, "};\n\n"); -} + "<!--\n" + " Copyright (c) 1999-%4.4d International Business Machines\n" + " Corporation and others. All rights reserved.\n" + "\n" + " WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT\n" + " UNLESS YOU REALLY KNOW WHAT YOU'RE DOING.\n" + "\n" + " file name: letest.xml\n" + " generated on: %s\n" + " generated by: gendata.cpp\n" + "-->\n" + "\n" + "<layout-tests>\n"; -void dumpLongs(FILE *file, char *label, le_int32 id, le_int32 *longs, le_int32 count) { +void dumpLongs(FILE *file, const char *tag, le_int32 *longs, le_int32 count) { char lineBuffer[8 * 12 + 2]; le_int32 bufp = 0; - fprintf(file, label, id); + fprintf(file, " <%s>\n", tag); for (int i = 0; i < count; i += 1) { if (i % 8 == 0 && bufp != 0) { - fprintf(file, " %s\n", lineBuffer); + fprintf(file, " %s\n", lineBuffer); bufp = 0; } @@ -305,124 +80,203 @@ void dumpLongs(FILE *file, char *label, le_int32 id, le_int32 *longs, le_int32 c if (bufp != 0) { lineBuffer[bufp - 2] = '\0'; - fprintf(file, " %s\n", lineBuffer); + fprintf(file, " %s\n", lineBuffer); } - fprintf(file, "};\n\n"); + fprintf(file, " </%s>\n\n", tag); } -void dumpFloats(FILE *file, char *label, le_int32 id, float *floats, le_int32 count) { +void dumpFloats(FILE *file, const char *tag, float *floats, le_int32 count) { char lineBuffer[8 * 16 + 2]; le_int32 bufp = 0; - fprintf(file, label, id); + fprintf(file, " <%s>\n", tag); for (int i = 0; i < count; i += 1) { if (i % 8 == 0 && bufp != 0) { - fprintf(file, " %s\n", lineBuffer); + fprintf(file, " %s\n", lineBuffer); bufp = 0; } - bufp += sprintf(&lineBuffer[bufp], "%fF, ", floats[i]); + bufp += sprintf(&lineBuffer[bufp], "%f, ", floats[i]); } if (bufp != 0) { lineBuffer[bufp - 2] = '\0'; - fprintf(file, " %s\n", lineBuffer); + fprintf(file, " %s\n", lineBuffer); } - fprintf(file, "};\n\n"); -} - -const char *getShortName(le_int32 scriptCode) -{ - static char shortName[5]; - const char *name = uscript_getShortName((UScriptCode) scriptCode); - - shortName[0] = tolower(name[0]); - shortName[1] = tolower(name[1]); - shortName[2] = tolower(name[2]); - shortName[3] = tolower(name[3]); - shortName[4] = '\0'; - - return shortName; + fprintf(file, " </%s>\n", tag); } -int main(int argc, char *argv[]) +int main(int /*argc*/, char *argv[]) { - le_int32 test; + UErrorCode status = U_ZERO_ERROR; FILE *outputFile = fopen(argv[1], "w"); + time_t now = time(NULL); + struct tm *local = localtime(&now); + const char *tmFormat = "%m/%d/%Y %I:%M:%S %p %Z"; + char tmString[64]; - fprintf(outputFile, header); - - for (test = 0; test < testCount; test += 1) { - LEErrorCode fontStatus = LE_NO_ERROR; - PortableFontInstance fontInstance(testInputs[test].fontName, 12, fontStatus); + strftime(tmString, 64, tmFormat, local); + fprintf(outputFile, header, local->tm_year + 1900, tmString); - if (LE_FAILURE(fontStatus)) { - printf("ERROR: test case %d, could not get a font instance for %s\n", test, testInputs[test].fontName); - continue; - } - - LEErrorCode success = LE_NO_ERROR; - LayoutEngine *engine = LayoutEngine::layoutEngineFactory(&fontInstance, testInputs[test].scriptCode, -1, success); - le_uint32 glyphCount; - LEGlyphID *glyphs; - le_int32 *indices; - float *positions; - - if (LE_FAILURE(success)) { - printf("ERROR: test case %d, could not create a LayoutEngine for script %s.\n", test, uscript_getName((UScriptCode) testInputs[test].scriptCode)); - continue; - } - - glyphCount = engine->layoutChars(testInputs[test].text, 0, testInputs[test].textLength, testInputs[test].textLength, testInputs[test].rightToLeft, 0, 0, success); - - glyphs = new LEGlyphID[glyphCount]; - indices = new le_int32[glyphCount]; - positions = new float[glyphCount * 2 + 2]; - - engine->getGlyphs(glyphs, success); - engine->getCharIndices(indices, success); - engine->getGlyphPositions(positions, success); - - //fprintf(outputFile, "font: %s\n", testInputs[test].fontName); - dumpShorts(outputFile, "LEUnicode inputText%d[] =\n{\n", test, testInputs[test].text, testInputs[test].textLength); + UXMLParser *parser = UXMLParser::createParser(status); + UXMLElement *root = parser->parseFile("gendata.xml", status); - dumpLongs(outputFile, "LEGlyphID resultGlyphs%d[] =\n{\n", test, (le_int32 *) glyphs, glyphCount); - fprintf(outputFile, "le_int32 resultGlyphCount%d = %d;\n\n", test, glyphCount); - - dumpLongs(outputFile, "le_int32 resultIndices%d[] =\n{\n", test, indices, glyphCount); - - dumpFloats(outputFile, "float resultPositions%d[] =\n{\n", test, positions, glyphCount * 2 + 2); - - fprintf(outputFile, "\n"); - - delete[] positions; - delete[] indices; - delete[] glyphs; - delete engine; + if (root == NULL) { + printf("Error: Could not open gendata.xml\n"); + delete parser; + return -1; } - fprintf(outputFile, "TestInput testInputs[] = \n{\n"); + UnicodeString test_case = UNICODE_STRING_SIMPLE("test-case"); + UnicodeString test_text = UNICODE_STRING_SIMPLE("test-text"); + UnicodeString test_font = UNICODE_STRING_SIMPLE("test-font"); + + // test-case attributes + UnicodeString id_attr = UNICODE_STRING_SIMPLE("id"); + UnicodeString script_attr = UNICODE_STRING_SIMPLE("script"); + UnicodeString lang_attr = UNICODE_STRING_SIMPLE("lang"); + + // test-font attributes + UnicodeString name_attr = UNICODE_STRING_SIMPLE("name"); + + const UXMLElement *testCase; + int32_t tc = 0; + + while((testCase = root->nextChildElement(tc)) != NULL) { + if (testCase->getTagName().compare(test_case) == 0) { + char *id = getCString(testCase->getAttribute(id_attr)); + char *script = getCString(testCase->getAttribute(script_attr)); + char *lang = getCString(testCase->getAttribute(lang_attr)); + LEFontInstance *font = NULL; + const UXMLElement *element; + int32_t ec = 0; + int32_t charCount = 0; + int32_t typoFlags = 3; // kerning + ligatures... + UScriptCode scriptCode; + le_int32 languageCode = -1; + UnicodeString text; + int32_t glyphCount = 0; + LEErrorCode leStatus = LE_NO_ERROR; + LayoutEngine *engine = NULL; + LEGlyphID *glyphs = NULL; + le_int32 *indices = NULL; + float *positions = NULL; + + uscript_getCode(script, &scriptCode, 1, &status); + if (LE_FAILURE(status)) { + printf("Error: invalid script name: %s.\n", script); + goto free_c_strings; + } + + if (lang != NULL) { + languageCode = getLanguageCode(lang); + + if (languageCode < 0) { + printf("Error: invalid language name: %s.\n", lang); + goto free_c_strings; + } + + fprintf(outputFile, " <test-case id=\"%s\" script=\"%s\" lang=\"%s\">\n", id, script, lang); + } else { + fprintf(outputFile, " <test-case id=\"%s\" script=\"%s\">\n", id, script); + } + + while((element = testCase->nextChildElement(ec)) != NULL) { + UnicodeString tag = element->getTagName(); + + // TODO: make sure that each element is only used once. + if (tag.compare(test_font) == 0) { + char *fontName = getCString(element->getAttribute(name_attr)); + const char *version = NULL; + PortableFontInstance *pfi = new PortableFontInstance(fontName, 12, leStatus); + + if (LE_FAILURE(leStatus)) { + printf("Error: could not open font: %s\n", fontName); + freeCString(fontName); + goto free_c_strings; + } + + version = pfi->getNameString(NAME_VERSION_STRING, PLATFORM_MACINTOSH, MACINTOSH_ROMAN, MACINTOSH_ENGLISH); + + fprintf(outputFile, " <test-font name=\"%s\" version=\"%s\" checksum=\"0x%8.8X\"/>\n\n", + fontName, version, pfi->getFontChecksum()); + + pfi->deleteNameString(version); + freeCString(fontName); + font = pfi; + } else if (tag.compare(test_text) == 0) { + char *utf8 = NULL; + + text = element->getText(TRUE); + charCount = text.length(); + + utf8 = getUTF8String(&text); + fprintf(outputFile, " <test-text>%s</test-text>\n\n", utf8); + freeCString(utf8); + } else { + // an unknown tag... + char *cTag = getCString(&tag); + + printf("Test %s: unknown element with tag \"%s\"\n", id, cTag); + freeCString(cTag); + } + } + + if (font == NULL) { + LEErrorCode fontStatus = LE_NO_ERROR; + + font = new SimpleFontInstance(12, fontStatus); + typoFlags |= 0x80000000L; // use CharSubstitutionFilter... + } + + engine = LayoutEngine::layoutEngineFactory(font, scriptCode, languageCode, typoFlags, leStatus); + + if (LE_FAILURE(leStatus)) { + printf("Error for test %s: could not create a LayoutEngine.\n", id); + goto delete_font; + } + + glyphCount = engine->layoutChars(text.getBuffer(), 0, charCount, charCount, getRTL(text), 0, 0, leStatus); + + glyphs = NEW_ARRAY(LEGlyphID, glyphCount); + indices = NEW_ARRAY(le_int32, glyphCount); + positions = NEW_ARRAY(float, glyphCount * 2 + 2); + + engine->getGlyphs(glyphs, leStatus); + engine->getCharIndices(indices, leStatus); + engine->getGlyphPositions(positions, leStatus); + + dumpLongs(outputFile, "result-glyphs", (le_int32 *) glyphs, glyphCount); + + dumpLongs(outputFile, "result-indices", indices, glyphCount); + + dumpFloats(outputFile, "result-positions", positions, glyphCount * 2 + 2); + + fprintf(outputFile, " </test-case>\n\n"); + + DELETE_ARRAY(positions); + DELETE_ARRAY(indices); + DELETE_ARRAY(glyphs); - for (test = 0; test < testCount; test += 1) { - fprintf(outputFile, " {\"%s\", inputText%d, %d, %sScriptCode, %s},\n", - testInputs[test].fontName, test, testInputs[test].textLength, getShortName(testInputs[test].scriptCode), - testInputs[test].rightToLeft? "TRUE" : "FALSE"); - } - - fprintf(outputFile, "};\n\nle_int32 testCount = ARRAY_LENGTH(testInputs);\n\n"); + delete engine; - fprintf(outputFile, "TestResult testResults[] = \n{\n"); +delete_font: + delete font; - for (test = 0; test < testCount; test += 1) { - fprintf(outputFile, " {resultGlyphCount%d, resultGlyphs%d, resultIndices%d, resultPositions%d},\n", - test, test, test, test); +free_c_strings: + freeCString(lang); + freeCString(script); + freeCString(id); + } } - fprintf(outputFile, "};\n\n"); + delete root; + delete parser; + + fprintf(outputFile, "</layout-tests>\n"); fclose(outputFile); - return 0; } diff --git a/icuSources/test/letest/gendata.dsp b/icuSources/test/letest/gendata.dsp deleted file mode 100644 index 1e14ecc4..00000000 --- a/icuSources/test/letest/gendata.dsp +++ /dev/null @@ -1,134 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gendata" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gendata - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gendata.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gendata.mak" CFG="gendata - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gendata - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gendata - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gendata - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include\layout" /I "..\..\..\include" /I "..\..\common" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "LE_USE_CMEMORY" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 ..\..\..\lib\icule.lib ..\..\..\lib\icuuc.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "gendata - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\include\layout" /I "..\..\..\include" /I "..\..\common" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "LE_USE_CMEMORY" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 ..\..\..\lib\iculed.lib ..\..\..\lib\icuucd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "gendata - Win32 Release" -# Name "gendata - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\cmaps.cpp -# End Source File -# Begin Source File - -SOURCE=.\FontTableCache.cpp -# End Source File -# Begin Source File - -SOURCE=.\gendata.cpp -# End Source File -# Begin Source File - -SOURCE=.\PortableFontInstance.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\cmaps.h -# End Source File -# Begin Source File - -SOURCE=.\FontTableCache.h -# End Source File -# Begin Source File - -SOURCE=.\letest.h -# End Source File -# Begin Source File - -SOURCE=.\PortableFontInstance.h -# End Source File -# Begin Source File - -SOURCE=.\sfnt.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/letest/gendata.dsw b/icuSources/test/letest/gendata.dsw deleted file mode 100644 index 4f285879..00000000 --- a/icuSources/test/letest/gendata.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "gendata"=.\gendata.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/test/letest/gendata.sln b/icuSources/test/letest/gendata.sln index fc800a8d..46028a9f 100644 --- a/icuSources/test/letest/gendata.sln +++ b/icuSources/test/letest/gendata.sln @@ -1,12 +1,12 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 +Microsoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gendata", "gendata.vcproj", "{DA322426-C37C-4909-A99D-16B05E7FA498}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution + Debug = Debug + Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {DA322426-C37C-4909-A99D-16B05E7FA498}.Debug.ActiveCfg = Debug|Win32 diff --git a/icuSources/test/letest/gendata.vcproj b/icuSources/test/letest/gendata.vcproj index 88e549a8..05827c4b 100644 --- a/icuSources/test/letest/gendata.vcproj +++ b/icuSources/test/letest/gendata.vcproj @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding = "Windows-1252"?> +<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="7.00" + Version="7.10" Name="gendata" SccProjectName="" SccLocalPath=""> @@ -21,10 +21,11 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\..\..\include\layout,..\..\..\include,..\..\common" + AdditionalIncludeDirectories="..\..\..\include\layout;..\..\..\include;..\..\common;..\..\layout;..\..\tools\toolutil" PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE,LE_USE_CMEMORY" BasicRuntimeChecks="3" RuntimeLibrary="5" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/gendata.pch" AssemblerListingLocation=".\Debug/" @@ -39,7 +40,7 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="..\..\..\lib\iculed.lib ..\..\..\lib\icuucd.lib odbc32.lib odbccp32.lib" + AdditionalDependencies="..\..\..\lib\iculed.lib ..\..\..\lib\icuucd.lib ..\..\..\lib\icutud.lib odbc32.lib odbccp32.lib" OutputFile=".\Debug/gendata.exe" LinkIncremental="2" SuppressStartupBanner="TRUE" @@ -61,8 +62,14 @@ Culture="1033"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> <Configuration Name="Release|Win32" @@ -75,11 +82,12 @@ <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="..\..\..\include\layout,..\..\..\include,..\..\common" + AdditionalIncludeDirectories="..\..\..\include\layout;..\..\..\include;..\..\common;..\..\layout;..\..\tools\toolutil" PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE,LE_USE_CMEMORY" StringPooling="TRUE" RuntimeLibrary="4" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/gendata.pch" AssemblerListingLocation=".\Release/" @@ -93,7 +101,7 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="..\..\..\lib\icule.lib ..\..\..\lib\icuuc.lib odbc32.lib odbccp32.lib" + AdditionalDependencies="..\..\..\lib\icule.lib ..\..\..\lib\icuuc.lib ..\..\..\lib\icutu.lib odbc32.lib odbccp32.lib" OutputFile=".\Release/gendata.exe" LinkIncremental="1" SuppressStartupBanner="TRUE" @@ -114,45 +122,65 @@ Culture="1033"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> </Configurations> + <References> + </References> <Files> <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath=".\cmaps.cpp"> + </File> <File RelativePath=".\FontTableCache.cpp"> </File> <File - RelativePath=".\PortableFontInstance.cpp"> + RelativePath=".\gendata.cpp"> </File> <File - RelativePath=".\cmaps.cpp"> + RelativePath=".\letsutil.cpp"> </File> <File - RelativePath=".\gendata.cpp"> + RelativePath=".\PortableFontInstance.cpp"> + </File> + <File + RelativePath=".\SimpleFontInstance.cpp"> </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath=".\cmaps.h"> + </File> <File RelativePath=".\FontTableCache.h"> </File> <File - RelativePath=".\PortableFontInstance.h"> + RelativePath=".\letest.h"> </File> <File - RelativePath=".\cmaps.h"> + RelativePath=".\letsutil.h"> </File> <File - RelativePath=".\letest.h"> + RelativePath=".\PortableFontInstance.h"> </File> <File RelativePath=".\sfnt.h"> </File> + <File + RelativePath=".\SimpleFontInstance.h"> + </File> </Filter> <Filter Name="Resource Files" diff --git a/icuSources/test/letest/gendata.xml b/icuSources/test/letest/gendata.xml new file mode 100644 index 00000000..b6edfd9c --- /dev/null +++ b/icuSources/test/letest/gendata.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + Copyright (c) 1999-2006 International Business Machines + Corporation and others. All rights reserved. +--> + +<layout-tests> + <test-case id="Ghita" script="deva"> + <test-font name="raghu.ttf"/> + <test-text>श्रीमद् भगवद्गीता अध्याय अर्जुन विषाद योग धृतराष्ट्र उवाचृ धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः मामकाः पाण्डवाश्चैव किमकुर्वत संजव</test-text> + </test-case> + + <test-case id="Arabic" script="arab"> + <test-font name="CODE2000.TTF"/> + <test-text>أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية</test-text> + </test-case> + + <test-case id="Unicode Arabic" script="arab"> + <test-font name="LucidaSansRegular.ttf"/> + <test-text>أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية</test-text> + </test-case> + + <test-case id="Thai" script="thai"> + <test-font name="angsd___.ttf"/> + <test-text>บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์</test-text> + </test-case> + + <test-case id="Arabic Simple" script="arab"> + <test-text>أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية</test-text> + </test-case> + + <test-case id="Matra Test" script="deva"> + <test-font name="Devamt.ttf"/> + <test-text>ुं ं॑</test-text> + </test-case> + + <test-case id="Deva Stress Test" script="deva"> + <test-font name="Devamt.ttf"/> + <test-text>कँ कं कः क॑ क॒ कँ॑ कं॒ कँंः क॒॑</test-text> + </test-case> + + <test-case id="Deva Test" script="deva"> + <test-font name="Devamt.ttf"/> + <test-text>रू क़् क्ष क्कि क्रि ट्रि हिन्दी र्क्रिं क्षत्रज्ञत्रक्ष श्र थ्र श्र कके र्कें केूकूेकेृ र्कू क़ क क् क्ष क्ष् क्ष्क ज़ ज ज् ज्ञ ज्ञ् ज्ञ्क र्क र्क्क ड्र क्क क़्क क़्क क़् क्ष्क क्ष् त्र्क द्द कि हि रू रु र्के र्कं क् कु के द्द्द क़्ष क्ष र्क्षे द्दत्र्क ज्ञ क्त्व ज्ञ्क र्कँ र्किँ र्केँ र्क्रिँ हिंदी ह्मिह्यिखि ङ्क ङ्म ङ्क्त ङ्ख ङ्ग ङ्घ ङ्क्ष ङ्क्ष्व ङ्क्ष्य र्क्त्वि र्र्र्र कै के कु कू कृ कॅ कॆ हु हू हॆ है हे</test-text> + </test-case> + + <test-case id="Japanese Han" script="hani" lang="JAN"> + <test-font name="ARIALUNI.TTF"/> + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + </test-case> + + <test-case id="Korean Han" script="hani" lang="KOR"> + <test-font name="ARIALUNI.TTF"/> + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + </test-case> + + <test-case id="Traditional Han" script="hani" lang="ZHT"> + <test-font name="ARIALUNI.TTF"/> + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + </test-case> + + <test-case id="Simplified Han" script="hani" lang="ZHS"> + <test-font name="ARIALUNI.TTF"/> + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + </test-case> + + <test-case id="Deva locl Hindi" script="deva" lang="HIN"> + <test-font name="TestFont1.otf"/> + <test-text>शङ़ु</test-text> + </test-case> + + <test-case id="Deva locl Marathi" script="deva" lang="MAR"> + <test-font name="TestFont1.otf"/> + <test-text>शङ़ु</test-text> + </test-case> +</layout-tests> \ No newline at end of file diff --git a/icuSources/test/letest/letest.cpp b/icuSources/test/letest/letest.cpp index fbdb43ac..e73d9b82 100644 --- a/icuSources/test/letest/letest.cpp +++ b/icuSources/test/letest/letest.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -11,21 +11,315 @@ * created by: Eric R. Mader */ -#include "math.h" +#include "unicode/utypes.h" +#include "unicode/uclean.h" +#include "unicode/uchar.h" +#include "unicode/unistr.h" +#include "unicode/uscript.h" +#include "unicode/putil.h" +#include "unicode/ctest.h" + +#include "layout/LETypes.h" +#include "layout/LEScripts.h" +#include "layout/LayoutEngine.h" -#include "LETypes.h" -#include "LayoutEngine.h" #include "PortableFontInstance.h" +#include "SimpleFontInstance.h" +#include "letsutil.h" #include "letest.h" +#include "xmlparser.h" +#include "putilimp.h" // for uprv_getUTCtime() + +#include <stdlib.h> +#include <string.h> + U_NAMESPACE_USE -le_bool compareResults(le_int32 testNumber, TestResult *expected, TestResult *actual) +#define CH_COMMA 0x002C + +U_CDECL_BEGIN +static void U_CALLCONV ParamTest(void) +{ + LEErrorCode status = LE_NO_ERROR; + SimpleFontInstance *font = new SimpleFontInstance(12, status); + LayoutEngine *engine = LayoutEngine::layoutEngineFactory(font, arabScriptCode, -1, status); + LEGlyphID *glyphs = NULL; + le_int32 *indices = NULL; + float *positions = NULL; + le_int32 glyphCount = 0; + + glyphCount = engine->getGlyphCount(); + if (glyphCount != 0) { + log_err("Calling getGlyphCount() on an empty layout returned %d.\n", glyphCount); + } + + glyphs = NEW_ARRAY(LEGlyphID, glyphCount + 10); + indices = NEW_ARRAY(le_int32, glyphCount + 10); + positions = NEW_ARRAY(float, glyphCount + 10); + + engine->getGlyphs(NULL, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling getGlyphs(NULL, status) did not return LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getGlyphs(glyphs, status); + + if (status != LE_NO_LAYOUT_ERROR) { + log_err("Calling getGlyphs(glyphs, status) on an empty layout did not return LE_NO_LAYOUT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getGlyphs(NULL, 0xFF000000L, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling getGlyphs(NULL, 0xFF000000L, status) did not return LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getGlyphs(glyphs, 0xFF000000L, status); + + if (status != LE_NO_LAYOUT_ERROR) { + log_err("Calling getGlyphs(glyphs, 0xFF000000L, status) on an empty layout did not return LE_NO_LAYOUT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getCharIndices(NULL, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling getCharIndices(NULL, status) did not return LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getCharIndices(indices, status); + + if (status != LE_NO_LAYOUT_ERROR) { + log_err("Calling getCharIndices(indices, status) on an empty layout did not return LE_NO_LAYOUT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getCharIndices(NULL, 1024, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling getCharIndices(NULL, 1024, status) did not return LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getCharIndices(indices, 1024, status); + + if (status != LE_NO_LAYOUT_ERROR) { + log_err("Calling getCharIndices(indices, 1024, status) on an empty layout did not return LE_NO_LAYOUT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getGlyphPositions(NULL, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling getGlyphPositions(NULL, status) did not return LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getGlyphPositions(positions, status); + + if (status != LE_NO_LAYOUT_ERROR) { + log_err("Calling getGlyphPositions(positions, status) on an empty layout did not return LE_NO_LAYOUT_ERROR.\n"); + } + + DELETE_ARRAY(positions); + DELETE_ARRAY(indices); + DELETE_ARRAY(glyphs); + + status = LE_NO_ERROR; + glyphCount = engine->layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + LEUnicode chars[] = { + 0x0045, 0x006E, 0x0067, 0x006C, 0x0069, 0x0073, 0x0068, 0x0020, // "English " + 0x0645, 0x0627, 0x0646, 0x062A, 0x0648, 0x0634, // MEM ALIF KAF NOON TEH WAW SHEEN + 0x0020, 0x0074, 0x0065, 0x0078, 0x0074, 0x02E // " text." + }; + + status = LE_NO_ERROR; + glyphCount = engine->layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + glyphCount = engine->layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + glyphCount = engine->layoutChars(chars, 8, 6, -1, TRUE, 0.0, 0.0, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling layoutChars((chars, 8, 6, -1, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + status = LE_NO_ERROR; + glyphCount = engine->layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status); + + if (status != LE_ILLEGAL_ARGUMENT_ERROR) { + log_err("Calling layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n"); + } + + float x = 0.0, y = 0.0; + + status = LE_NO_ERROR; + glyphCount = engine->layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status); + + if (LE_FAILURE(status)) { + log_err("Calling layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n"); + goto bail; + } + + engine->getGlyphPosition(-1, x, y, status); + + if (status != LE_INDEX_OUT_OF_BOUNDS_ERROR) { + log_err("Calling getGlyphPosition(-1, x, y, status) did not fail w/ LE_INDEX_OUT_OF_BOUNDS_ERROR.\n"); + } + + status = LE_NO_ERROR; + engine->getGlyphPosition(glyphCount + 1, x, y, status); + + if (status != LE_INDEX_OUT_OF_BOUNDS_ERROR) { + log_err("Calling getGlyphPosition(glyphCount + 1, x, y, status) did not fail w/ LE_INDEX_OUT_OF_BOUNDS_ERROR.\n"); + } + +bail: + delete engine; + delete font; +} +U_CDECL_END + +U_CDECL_BEGIN +static void U_CALLCONV FactoryTest(void) +{ + LEErrorCode status = LE_NO_ERROR; + SimpleFontInstance *font = new SimpleFontInstance(12, status); + LayoutEngine *engine = NULL; + + for(le_int32 scriptCode = 0; scriptCode < scriptCodeCount; scriptCode += 1) { + status = LE_NO_ERROR; + engine = LayoutEngine::layoutEngineFactory(font, scriptCode, -1, status); + + if (LE_FAILURE(status)) { + log_err("Could not create a LayoutEngine for script \'%s\'.\n", uscript_getShortName((UScriptCode)scriptCode)); + } + + delete engine; + } + + delete font; +} +U_CDECL_END + +U_CDECL_BEGIN +static void U_CALLCONV AccessTest(void) +{ + LEErrorCode status = LE_NO_ERROR; + SimpleFontInstance *font = new SimpleFontInstance(12, status); + LayoutEngine *engine = LayoutEngine::layoutEngineFactory(font, arabScriptCode, -1, status); + le_int32 glyphCount; + LEGlyphID glyphs[6], extraBitGlyphs[6];; + le_int32 biasedIndices[6], indices[6], glyph; + float positions[6 * 2 + 2]; + LEUnicode chars[] = { + 0x0045, 0x006E, 0x0067, 0x006C, 0x0069, 0x0073, 0x0068, 0x0020, // "English " + 0x0645, 0x0627, 0x0646, 0x062A, 0x0648, 0x0634, // MEM ALIF KAF NOON TEH WAW SHEEN + 0x0020, 0x0074, 0x0065, 0x0078, 0x0074, 0x02E // " text." + }; + + if (LE_FAILURE(status)) { + log_err("Could not create LayoutEngine.\n"); + goto bail; + } + + glyphCount = engine->layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status); + + if (LE_FAILURE(status) || glyphCount != 6) { + log_err("layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n"); + goto bail; + } + + engine->getGlyphs(glyphs, status); + engine->getCharIndices(indices, status); + engine->getGlyphPositions(positions, status); + + if (LE_FAILURE(status)) { + log_err("Could not get glyph, indices and position arrays.\n"); + goto bail; + } + + engine->getGlyphs(extraBitGlyphs, 0xFF000000L, status); + + if (LE_FAILURE(status)) { + log_err("getGlyphs(extraBitGlyphs, 0xFF000000L, status); failed.\n"); + } else { + for(glyph = 0; glyph < glyphCount; glyph += 1) { + if (extraBitGlyphs[glyph] != (glyphs[glyph] | 0xFF000000L)) { + log_err("extraBigGlyphs[%d] != glyphs[%d] | 0xFF000000L: %8X, %8X\n", + glyph, glyph, extraBitGlyphs[glyph], glyphs[glyph]); + break; + } + } + } + + status = LE_NO_ERROR; + engine->getCharIndices(biasedIndices, 1024, status); + + if (LE_FAILURE(status)) { + log_err("getCharIndices(biasedIndices, 1024, status) failed.\n"); + } else { + for (glyph = 0; glyph < glyphCount; glyph += 1) { + if (biasedIndices[glyph] != (indices[glyph] + 1024)) { + log_err("biasedIndices[%d] != indices[%d] + 1024: %8X, %8X\n", + glyph, glyph, biasedIndices[glyph], indices[glyph]); + break; + } + } + } + + status = LE_NO_ERROR; + for (glyph = 0; glyph <= glyphCount; glyph += 1) { + float x = 0.0, y = 0.0; + + engine->getGlyphPosition(glyph, x, y, status); + + if (LE_FAILURE(status)) { + log_err("getGlyphPosition(%d, x, y, status) failed.\n", glyph); + break; + } + + if (x != positions[glyph*2] || y != positions[glyph*2 + 1]) { + log_err("getGlyphPosition(%d, x, y, status) returned bad position: (%f, %f) != (%f, %f)\n", + glyph, x, y, positions[glyph*2], positions[glyph*2 + 1]); + break; + } + } + +bail: + delete engine; + delete font; +} +U_CDECL_END + +le_bool compareResults(const char *testID, TestResult *expected, TestResult *actual) { /* NOTE: we'll stop on the first failure 'cause once there's one error, it may cascade... */ if (actual->glyphCount != expected->glyphCount) { - printf("incorrect glyph count: exptected %d, got %d\n", expected->glyphCount, actual->glyphCount); + log_err("Test %s: incorrect glyph count: exptected %d, got %d\n", + testID, expected->glyphCount, actual->glyphCount); return FALSE; } @@ -33,34 +327,38 @@ le_bool compareResults(le_int32 testNumber, TestResult *expected, TestResult *ac for (i = 0; i < actual->glyphCount; i += 1) { if (actual->glyphs[i] != expected->glyphs[i]) { - printf("incorrect id for glyph %d: expected %4X, got %4X\n", i, expected->glyphs[i], actual->glyphs[i]); + log_err("Test %s: incorrect id for glyph %d: expected %4X, got %4X\n", + testID, i, expected->glyphs[i], actual->glyphs[i]); return FALSE; } } for (i = 0; i < actual->glyphCount; i += 1) { if (actual->indices[i] != expected->indices[i]) { - printf("incorrect index for glyph %d: expected %8X, got %8X\n", i, expected->indices[i], actual->indices[i]); + log_err("Test %s: incorrect index for glyph %d: expected %8X, got %8X\n", + testID, i, expected->indices[i], actual->indices[i]); return FALSE; } } for (i = 0; i <= actual->glyphCount; i += 1) { - double xError = fabs(actual->positions[i * 2] - expected->positions[i * 2]); + double xError = uprv_fabs(actual->positions[i * 2] - expected->positions[i * 2]); if (xError > 0.0001) { - printf("incorrect x position for glyph %d: expected %f, got %f\n", i, expected->positions[i * 2], actual->positions[i * 2]); + log_err("Test %s: incorrect x position for glyph %d: expected %f, got %f\n", + testID, i, expected->positions[i * 2], actual->positions[i * 2]); return FALSE; } - double yError = fabs(actual->positions[i * 2 + 1] - expected->positions[i * 2 + 1]); + double yError = uprv_fabs(actual->positions[i * 2 + 1] - expected->positions[i * 2 + 1]); if (yError < 0) { yError = -yError; } if (yError > 0.0001) { - printf("incorrect y position for glyph %d: expected %f, got %f\n", i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]); + log_err("Test %s: incorrect y position for glyph %d: expected %f, got %f\n", + testID, i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]); return FALSE; } } @@ -68,60 +366,495 @@ le_bool compareResults(le_int32 testNumber, TestResult *expected, TestResult *ac return TRUE; } -int main(int argc, char *argv[]) +static void checkFontVersion(PortableFontInstance *fontInstance, const char *testVersionString, + le_uint32 testChecksum, const char *testID) { - le_int32 failures = 0; + le_uint32 fontChecksum = fontInstance->getFontChecksum(); + + if (fontChecksum != testChecksum) { + const char *fontVersionString = fontInstance->getNameString(NAME_VERSION_STRING, + PLATFORM_MACINTOSH, MACINTOSH_ROMAN, MACINTOSH_ENGLISH); - for (le_int32 test = 0; test < testCount; test += 1) { - LEErrorCode fontStatus = LE_NO_ERROR; + log_info("Test %s: this may not be the same font used to generate the test data.\n", testID); + log_info("Your font's version string is \"%s\"\n", fontVersionString); + log_info("The expected version string is \"%s\"\n", testVersionString); + log_info("If you see errors, they may be due to the version of the font you're using.\n"); - printf("Test %d, font = %s... ", test, testInputs[test].fontName); + fontInstance->deleteNameString(fontVersionString); + } +} + +/* Returns the path to icu/source/test/testdata/ */ +const char *getSourceTestData() { + const char *srcDataDir = NULL; +#ifdef U_TOPSRCDIR + srcDataDir = U_TOPSRCDIR U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; +#else + srcDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; + FILE *f = fopen(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"rbbitst.txt", "r"); + + if (f != NULL) { + /* We're in icu/source/test/letest/ */ + fclose(f); + } else { + /* We're in icu/source/test/letest/(Debug|Release) */ + srcDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; + } +#endif + + return srcDataDir; +} - PortableFontInstance fontInstance(testInputs[test].fontName, 12, fontStatus); +const char *getPath(char buffer[2048], const char *filename) { + const char *testDataDirectory = getSourceTestData(); - if (LE_FAILURE(fontStatus)) { - printf("could not open font.\n"); - continue; + strcpy(buffer, testDataDirectory); + strcat(buffer, filename); + + return buffer; +} + +le_uint32 *getHexArray(const UnicodeString &numbers, int32_t &arraySize) +{ + int32_t offset = -1; + + arraySize = 1; + while((offset = numbers.indexOf(CH_COMMA, offset + 1)) >= 0) { + arraySize += 1; + } + + le_uint32 *array = NEW_ARRAY(le_uint32, arraySize); + char number[16]; + le_int32 count = 0; + le_int32 start = 0, end = 0; + le_int32 len = 0; + + // trim leading whitespace + while(u_isUWhiteSpace(numbers[start])) { + start += 1; + } + + while((end = numbers.indexOf(CH_COMMA, start)) >= 0) { + len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); + number[len] = '\0'; + start = end + 1; + + sscanf(number, "%x", &array[count++]); + + // trim whitespace following the comma + while(u_isUWhiteSpace(numbers[start])) { + start += 1; } + } + + // trim trailing whitespace + end = numbers.length(); + while(u_isUWhiteSpace(numbers[end - 1])) { + end -= 1; + } + + len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); + number[len] = '\0'; + sscanf(number, "%x", &array[count]); + + return array; +} + +float *getFloatArray(const UnicodeString &numbers, int32_t &arraySize) +{ + int32_t offset = -1; + + arraySize = 1; + while((offset = numbers.indexOf(CH_COMMA, offset + 1)) >= 0) { + arraySize += 1; + } + + float *array = NEW_ARRAY(float, arraySize); + char number[32]; + le_int32 count = 0; + le_int32 start = 0, end = 0; + le_int32 len = 0; + + // trim leading whitespace + while(u_isUWhiteSpace(numbers[start])) { + start += 1; + } - LEErrorCode success = LE_NO_ERROR; - LayoutEngine *engine = LayoutEngine::layoutEngineFactory(&fontInstance, testInputs[test].scriptCode, -1, success); - le_int32 textLength = testInputs[test].textLength; - le_bool result; - TestResult actual; + while((end = numbers.indexOf(CH_COMMA, start)) >= 0) { + len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); + number[len] = '\0'; + start = end + 1; - if (LE_FAILURE(success)) { - // would be nice to print the script name here, but - // don't want to maintain a table, and don't want to - // require ICU just for the script name... - printf("could not create a LayoutEngine.\n"); - continue; + sscanf(number, "%f", &array[count++]); + + // trim whiteapce following the comma + while(u_isUWhiteSpace(numbers[start])) { + start += 1; } + } + + while(u_isUWhiteSpace(numbers[start])) { + start += 1; + } + + // trim trailing whitespace + end = numbers.length(); + while(u_isUWhiteSpace(numbers[end - 1])) { + end -= 1; + } + + len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); + number[len] = '\0'; + sscanf(number, "%f", &array[count]); + + return array; +} + +LEFontInstance *openFont(const char *fontName, const char *checksum, const char *version, const char *testID) +{ + char path[2048]; + PortableFontInstance *font; + LEErrorCode fontStatus = LE_NO_ERROR; + + + font = new PortableFontInstance(getPath(path, fontName), 12, fontStatus); + + if (LE_FAILURE(fontStatus)) { + log_info("Test %s: can't open font %s - test skipped.\n", testID, fontName); + delete font; + return NULL; + } else { + le_uint32 cksum = 0; + + sscanf(checksum, "%x", &cksum); + + checkFontVersion(font, version, cksum, testID); + } + + return font; +} + +U_CDECL_BEGIN +static void U_CALLCONV DataDrivenTest(void) +{ +#if !UCONFIG_NO_REGULAR_EXPRESSIONS + UErrorCode status = U_ZERO_ERROR; + char path[2048]; + const char *testFilePath = getPath(path, "letest.xml"); + + UXMLParser *parser = UXMLParser::createParser(status); + UXMLElement *root = parser->parseFile(testFilePath, status); + + if (root == NULL) { + log_err("Could not open the test data file: %s\n", testFilePath); + delete parser; + return; + } + + UnicodeString test_case = UNICODE_STRING_SIMPLE("test-case"); + UnicodeString test_text = UNICODE_STRING_SIMPLE("test-text"); + UnicodeString test_font = UNICODE_STRING_SIMPLE("test-font"); + UnicodeString result_glyphs = UNICODE_STRING_SIMPLE("result-glyphs"); + UnicodeString result_indices = UNICODE_STRING_SIMPLE("result-indices"); + UnicodeString result_positions = UNICODE_STRING_SIMPLE("result-positions"); + + // test-case attributes + UnicodeString id_attr = UNICODE_STRING_SIMPLE("id"); + UnicodeString script_attr = UNICODE_STRING_SIMPLE("script"); + UnicodeString lang_attr = UNICODE_STRING_SIMPLE("lang"); + + // test-font attributes + UnicodeString name_attr = UNICODE_STRING_SIMPLE("name"); + UnicodeString ver_attr = UNICODE_STRING_SIMPLE("version"); + UnicodeString cksum_attr = UNICODE_STRING_SIMPLE("checksum"); + + const UXMLElement *testCase; + int32_t tc = 0; + + while((testCase = root->nextChildElement(tc)) != NULL) { + if (testCase->getTagName().compare(test_case) == 0) { + char *id = getCString(testCase->getAttribute(id_attr)); + char *script = getCString(testCase->getAttribute(script_attr)); + char *lang = getCString(testCase->getAttribute(lang_attr)); + LEFontInstance *font = NULL; + const UXMLElement *element; + int32_t ec = 0; + int32_t charCount = 0; + int32_t typoFlags = 3; // kerning + ligatures... + UScriptCode scriptCode; + le_int32 languageCode = -1; + UnicodeString text, glyphs, indices, positions; + int32_t glyphCount = 0, indexCount = 0, positionCount = 0; + TestResult expected = {0, NULL, NULL, NULL}; + TestResult actual = {0, NULL, NULL, NULL}; + LEErrorCode success = LE_NO_ERROR; + LayoutEngine *engine = NULL; + + uscript_getCode(script, &scriptCode, 1, &status); + if (LE_FAILURE(status)) { + log_err("invalid script name: %s.\n", script); + goto free_c_strings; + } + + if (lang != NULL) { + languageCode = getLanguageCode(lang); - actual.glyphCount = engine->layoutChars(testInputs[test].text, 0, textLength, textLength, testInputs[test].rightToLeft, 0, 0, success); + if (languageCode < 0) { + log_err("invalid language name: %s.\n", lang); + goto free_c_strings; + } + } - actual.glyphs = new LEGlyphID[actual.glyphCount]; - actual.indices = new le_int32[actual.glyphCount]; - actual.positions = new float[actual.glyphCount * 2 + 2]; + while((element = testCase->nextChildElement(ec)) != NULL) { + UnicodeString tag = element->getTagName(); - engine->getGlyphs(actual.glyphs, success); - engine->getCharIndices(actual.indices, success); - engine->getGlyphPositions(actual.positions, success); + // TODO: make sure that each element is only used once. + if (tag.compare(test_font) == 0) { + char *fontName = getCString(element->getAttribute(name_attr)); + char *fontVer = getCString(element->getAttribute(ver_attr)); + char *fontCksum = getCString(element->getAttribute(cksum_attr)); - result = compareResults(test, &testResults[test], &actual); + font = openFont(fontName, fontCksum, fontVer, id); + freeCString(fontCksum); + freeCString(fontVer); + freeCString(fontName); - if (result) { - printf("passed.\n"); - } else { - failures += 1; - printf("failed.\n"); + if (font == NULL) { + // warning message already displayed... + goto free_c_strings; + } + } else if (tag.compare(test_text) == 0) { + text = element->getText(TRUE); + charCount = text.length(); + } else if (tag.compare(result_glyphs) == 0) { + glyphs = element->getText(TRUE); + } else if (tag.compare(result_indices) == 0) { + indices = element->getText(TRUE); + } else if (tag.compare(result_positions) == 0) { + positions = element->getText(TRUE); + } else { + // an unknown tag... + char *cTag = getCString(&tag); + + log_info("Test %s: unknown element with tag \"%s\"\n", id, cTag); + freeCString(cTag); + } + } + + // TODO: make sure that the font, test-text, result-glyphs, result-indices and result-positions + // have all been provided + if (font == NULL) { + LEErrorCode fontStatus = LE_NO_ERROR; + + font = new SimpleFontInstance(12, fontStatus); + typoFlags |= 0x80000000L; // use CharSubstitutionFilter... + } + + expected.glyphs = (LEGlyphID *) getHexArray(glyphs, glyphCount); + expected.indices = (le_int32 *) getHexArray(indices, indexCount); + expected.positions = getFloatArray(positions, positionCount); + + expected.glyphCount = glyphCount; + + if (glyphCount < charCount || indexCount != glyphCount || positionCount < glyphCount * 2 + 2) { + log_err("Test %s: inconsistent input data: charCount = %d, glyphCount = %d, glyphCount = %d, indexCount = %d, positionCount = %d\n", + id, charCount, glyphCount, indexCount, positionCount); + goto free_expected; + }; + + engine = LayoutEngine::layoutEngineFactory(font, scriptCode, languageCode, typoFlags, success); + + if (LE_FAILURE(success)) { + log_err("Test %s: could not create a LayoutEngine.\n", id); + goto free_expected; + } + + actual.glyphCount = engine->layoutChars(text.getBuffer(), 0, charCount, charCount, getRTL(text), 0, 0, success); + + actual.glyphs = NEW_ARRAY(LEGlyphID, actual.glyphCount); + actual.indices = NEW_ARRAY(le_int32, actual.glyphCount); + actual.positions = NEW_ARRAY(float, actual.glyphCount * 2 + 2); + + engine->getGlyphs(actual.glyphs, success); + engine->getCharIndices(actual.indices, success); + engine->getGlyphPositions(actual.positions, success); + + compareResults(id, &expected, &actual); + + DELETE_ARRAY(actual.positions); + DELETE_ARRAY(actual.indices); + DELETE_ARRAY(actual.glyphs); + + delete engine; + +free_expected: + DELETE_ARRAY(expected.positions); + DELETE_ARRAY(expected.indices); + DELETE_ARRAY(expected.glyphs); + + delete font; + +free_c_strings: + freeCString(lang); + freeCString(script); + freeCString(id); } + } + + delete root; + delete parser; +#endif +} +U_CDECL_END + +static void addAllTests(TestNode** root) +{ + addTest(root, &ParamTest, "api/ParameterTest"); + addTest(root, &FactoryTest, "api/FactoryTest"); + addTest(root, &AccessTest, "layout/AccessTest"); + addTest(root, &DataDrivenTest, "layout/DataDrivenTest"); +} + +/* returns the path to icu/source/data/out */ +static const char *ctest_dataOutDir() +{ + static const char *dataOutDir = NULL; - delete[] actual.positions; - delete[] actual.indices; - delete[] actual.glyphs; - delete engine; + if(dataOutDir) { + return dataOutDir; } - return failures; + /* U_TOPBUILDDIR is set by the makefiles on UNIXes when building cintltst and intltst + // to point to the top of the build hierarchy, which may or + // may not be the same as the source directory, depending on + // the configure options used. At any rate, + // set the data path to the built data from this directory. + // The value is complete with quotes, so it can be used + // as-is as a string constant. + */ +#if defined (U_TOPBUILDDIR) + { + dataOutDir = U_TOPBUILDDIR "data"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING; + } +#else + + /* On Windows, the file name obtained from __FILE__ includes a full path. + * This file is "wherever\icu\source\test\cintltst\cintltst.c" + * Change to "wherever\icu\source\data" + */ + { + static char p[sizeof(__FILE__) + 20]; + char *pBackSlash; + int i; + + strcpy(p, __FILE__); + /* We want to back over three '\' chars. */ + /* Only Windows should end up here, so looking for '\' is safe. */ + for (i=1; i<=3; i++) { + pBackSlash = strrchr(p, U_FILE_SEP_CHAR); + if (pBackSlash != NULL) { + *pBackSlash = 0; /* Truncate the string at the '\' */ + } + } + + if (pBackSlash != NULL) { + /* We found and truncated three names from the path. + * Now append "source\data" and set the environment + */ + strcpy(pBackSlash, U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING); + dataOutDir = p; + } + else { + /* __FILE__ on MSVC7 does not contain the directory */ + FILE *file = fopen(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "Makefile.in", "r"); + if (file) { + fclose(file); + dataOutDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING; + } + else { + dataOutDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING "data" U_FILE_SEP_STRING "out" U_FILE_SEP_STRING; + } + } + } +#endif + + return dataOutDir; +} + +/* ctest_setICU_DATA - if the ICU_DATA environment variable is not already + * set, try to deduce the directory in which ICU was built, + * and set ICU_DATA to "icu/source/data" in that location. + * The intent is to allow the tests to have a good chance + * of running without requiring that the user manually set + * ICU_DATA. Common data isn't a problem, since it is + * picked up via a static (build time) reference, but the + * tests dynamically load some data. + */ +static void ctest_setICU_DATA() { + + /* No location for the data dir was identifiable. + * Add other fallbacks for the test data location here if the need arises + */ + if (getenv("ICU_DATA") == NULL) { + /* If ICU_DATA isn't set, set it to the usual location */ + u_setDataDirectory(ctest_dataOutDir()); + } } + +int main(int argc, char* argv[]) +{ + int32_t nerrors = 0; + TestNode *root = NULL; + UErrorCode errorCode = U_ZERO_ERROR; + UDate startTime, endTime; + int32_t diffTime; + + startTime = uprv_getUTCtime(); + + /* Check whether ICU will initialize without forcing the build data directory into + * the ICU_DATA path. Success here means either the data dll contains data, or that + * this test program was run with ICU_DATA set externally. Failure of this check + * is normal when ICU data is not packaged into a shared library. + * + * Whether or not this test succeeds, we want to cleanup and reinitialize + * with a data path so that data loading from individual files can be tested. + */ + u_init(&errorCode); + + if (U_FAILURE(errorCode)) { + fprintf(stderr, + "#### Note: ICU Init without build-specific setDataDirectory() failed.\n"); + } + + u_cleanup(); + errorCode = U_ZERO_ERROR; + + /* Initialize ICU */ + ctest_setICU_DATA(); /* u_setDataDirectory() must happen Before u_init() */ + u_init(&errorCode); + + if (U_FAILURE(errorCode)) { + fprintf(stderr, + "#### ERROR! %s: u_init() failed with status = \"%s\".\n" + "*** Check the ICU_DATA environment variable and \n" + "*** check that the data files are present.\n", argv[0], u_errorName(errorCode)); + return 1; + } + + addAllTests(&root); + nerrors = processArgs(root, argc, argv); + + cleanUpTestTree(root); + u_cleanup(); + + endTime = uprv_getUTCtime(); + diffTime = (int32_t)(endTime - startTime); + printf("Elapsed Time: %02d:%02d:%02d.%03d\n", + (int)((diffTime%U_MILLIS_PER_DAY)/U_MILLIS_PER_HOUR), + (int)((diffTime%U_MILLIS_PER_HOUR)/U_MILLIS_PER_MINUTE), + (int)((diffTime%U_MILLIS_PER_MINUTE)/U_MILLIS_PER_SECOND), + (int)(diffTime%U_MILLIS_PER_SECOND)); + + return nerrors; +} + diff --git a/icuSources/test/letest/letest.dsp b/icuSources/test/letest/letest.dsp deleted file mode 100644 index cce55a36..00000000 --- a/icuSources/test/letest/letest.dsp +++ /dev/null @@ -1,138 +0,0 @@ -# Microsoft Developer Studio Project File - Name="letest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=letest - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "letest.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "letest.mak" CFG="letest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "letest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "letest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "letest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\include\layout" /I "..\..\..\include" /I "..\..\common" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "LE_USE_CMEMORY" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 ../../../lib/icule.lib ../../../lib/icuuc.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "letest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "letest___Win32_Debug" -# PROP BASE Intermediate_Dir "letest___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\include\layout" /I "..\..\..\include" /I "..\..\common" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "LE_USE_CMEMORY" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 ../../../lib/iculed.lib ../../../lib/icuucd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "letest - Win32 Release" -# Name "letest - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\cmaps.cpp -# End Source File -# Begin Source File - -SOURCE=.\FontTableCache.cpp -# End Source File -# Begin Source File - -SOURCE=.\letest.cpp -# End Source File -# Begin Source File - -SOURCE=.\PortableFontInstance.cpp -# End Source File -# Begin Source File - -SOURCE=.\testdata.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\cmaps.h -# End Source File -# Begin Source File - -SOURCE=.\FontTableCache.h -# End Source File -# Begin Source File - -SOURCE=.\letest.h -# End Source File -# Begin Source File - -SOURCE=.\PortableFontInstance.h -# End Source File -# Begin Source File - -SOURCE=.\sfnt.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/letest/letest.dsw b/icuSources/test/letest/letest.dsw deleted file mode 100644 index efce804c..00000000 --- a/icuSources/test/letest/letest.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "letest"=.\letest.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/test/letest/letest.h b/icuSources/test/letest/letest.h index c5f0127e..15224a36 100644 --- a/icuSources/test/letest/letest.h +++ b/icuSources/test/letest/letest.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2003, International Business Machines + * Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -11,22 +11,23 @@ * created by: Eric R. Mader */ +#ifndef __LETEST_H +#define __LETEST_H + #include "LETypes.h" -#define ARRAY_LENGTH(array) (sizeof array / sizeof array[0]) +#include <stdlib.h> +#include <string.h> -struct TestInput -{ - char *fontName; - LEUnicode *text; - le_int32 textLength; - le_int32 scriptCode; - le_bool rightToLeft; -}; +#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) + +#define ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0]) -extern le_int32 testCount; +#define NEW_ARRAY(type,count) (type *) malloc((count) * sizeof(type)) -extern TestInput testInputs[]; +#define DELETE_ARRAY(array) free((void *) (array)) + +#define GROW_ARRAY(array,newSize) realloc((void *) (array), (newSize) * sizeof (array)[0]) struct TestResult { @@ -35,7 +36,4 @@ struct TestResult le_int32 *indices; float *positions; }; - -extern TestResult testResults[]; - - +#endif diff --git a/icuSources/test/letest/letest.sln b/icuSources/test/letest/letest.sln index 480bb730..de181d15 100644 --- a/icuSources/test/letest/letest.sln +++ b/icuSources/test/letest/letest.sln @@ -1,18 +1,27 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 +Microsoft Visual Studio Solution File, Format Version 8.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "letest", "letest.vcproj", "{88CD8CC8-2CD7-40D1-8B31-672AF434468B}" + ProjectSection(ProjectDependencies) = postProject + {E7D9BA19-6ED3-4325-8D0D-D724F6D29C65} = {E7D9BA19-6ED3-4325-8D0D-D724F6D29C65} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctestfw", "..\..\tools\ctestfw\ctestfw.vcproj", "{E7D9BA19-6ED3-4325-8D0D-D724F6D29C65}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution + Debug = Debug + Release = Release EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {88CD8CC8-2CD7-40D1-8B31-672AF434468B}.Debug.ActiveCfg = Debug|Win32 {88CD8CC8-2CD7-40D1-8B31-672AF434468B}.Debug.Build.0 = Debug|Win32 {88CD8CC8-2CD7-40D1-8B31-672AF434468B}.Release.ActiveCfg = Release|Win32 {88CD8CC8-2CD7-40D1-8B31-672AF434468B}.Release.Build.0 = Release|Win32 + {E7D9BA19-6ED3-4325-8D0D-D724F6D29C65}.Debug.ActiveCfg = Debug|Win32 + {E7D9BA19-6ED3-4325-8D0D-D724F6D29C65}.Debug.Build.0 = Debug|Win32 + {E7D9BA19-6ED3-4325-8D0D-D724F6D29C65}.Release.ActiveCfg = Release|Win32 + {E7D9BA19-6ED3-4325-8D0D-D724F6D29C65}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/icuSources/test/letest/letest.vcproj b/icuSources/test/letest/letest.vcproj index 849ba20b..0810a5b1 100644 --- a/icuSources/test/letest/letest.vcproj +++ b/icuSources/test/letest/letest.vcproj @@ -1,8 +1,9 @@ -<?xml version="1.0" encoding = "Windows-1252"?> +<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" - Version="7.00" + Version="7.10" Name="letest" + ProjectGUID="{67351485-4D18-4245-BE39-A7EF0675ACD2}" SccProjectName="" SccLocalPath=""> <Platforms> @@ -21,11 +22,12 @@ <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="..\..\..\include\layout,..\..\..\include,..\..\common" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE,LE_USE_CMEMORY" + AdditionalIncludeDirectories="..\..\..\include\layout;..\..\..\include;..\..\common;..\..\tools\ctestfw;..\..\tools\toolutil;..\..\layout" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="4" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release/letest.pch" AssemblerListingLocation=".\Release/" @@ -60,8 +62,14 @@ Culture="1033"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> <Configuration Name="Debug|Win32" @@ -74,10 +82,11 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\..\..\include\layout,..\..\..\include,..\..\common" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE,LE_USE_CMEMORY" + AdditionalIncludeDirectories="..\..\..\include\layout;..\..\..\include;..\..\common;..\..\tools\ctestfw;..\..\tools\toolutil;..\..\layout" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="5" + TreatWChar_tAsBuiltInType="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Debug/letest.pch" AssemblerListingLocation=".\Debug/" @@ -92,10 +101,10 @@ <Tool Name="VCLinkerTool" AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="../../../lib/iculed.lib ../../../lib/icuucd.lib odbc32.lib odbccp32.lib" OutputFile=".\Debug/letest.exe" LinkIncremental="2" SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="" GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Debug/letest.pdb" SubSystem="1"/> @@ -114,48 +123,65 @@ Culture="1033"/> <Tool Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> <Tool Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> </Configuration> </Configurations> + <References> + </References> <Files> <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath=".\cmaps.cpp"> + </File> <File RelativePath=".\FontTableCache.cpp"> </File> <File - RelativePath=".\PortableFontInstance.cpp"> + RelativePath=".\letest.cpp"> </File> <File - RelativePath=".\cmaps.cpp"> + RelativePath=".\letsutil.cpp"> </File> <File - RelativePath=".\letest.cpp"> + RelativePath=".\PortableFontInstance.cpp"> </File> <File - RelativePath=".\testdata.cpp"> + RelativePath=".\SimpleFontInstance.cpp"> </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath=".\cmaps.h"> + </File> <File RelativePath=".\FontTableCache.h"> </File> <File - RelativePath=".\PortableFontInstance.h"> + RelativePath=".\letest.h"> </File> <File - RelativePath=".\cmaps.h"> + RelativePath=".\letsutil.h"> </File> <File - RelativePath=".\letest.h"> + RelativePath=".\PortableFontInstance.h"> </File> <File RelativePath=".\sfnt.h"> </File> + <File + RelativePath=".\SimpleFontInstance.h"> + </File> </Filter> <Filter Name="Resource Files" diff --git a/icuSources/test/letest/letsutil.cpp b/icuSources/test/letest/letsutil.cpp new file mode 100644 index 00000000..edac65ac --- /dev/null +++ b/icuSources/test/letest/letsutil.cpp @@ -0,0 +1,98 @@ +/* + ******************************************************************************* + * + * Copyright (C) 1999-2006, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * file name: letsutil.cpp + * + * created on: 04/25/2006 + * created by: Eric R. Mader + */ + +#include "unicode/utypes.h" +#include "unicode/unistr.h" +#include "unicode/ubidi.h" + +#include "layout/LETypes.h" +#include "layout/LEScripts.h" +#include "layout/LayoutEngine.h" +#include "layout/LELanguages.h" + +#include "OpenTypeLayoutEngine.h" + +#include "letest.h" +#include "letsutil.h" + +U_NAMESPACE_USE + +char *getCString(const UnicodeString *uString) +{ + if (uString == NULL) { + return NULL; + } + + le_int32 uLength = uString->length(); + le_int32 cLength = uString->extract(0, uLength, NULL, 0, US_INV); + char *cString = NEW_ARRAY(char, cLength + 1); + + uString->extract(0, uLength, cString, cLength, US_INV); + cString[cLength] = '\0'; + + return cString; +} + +char *getUTF8String(const UnicodeString *uString) +{ + if (uString == NULL) { + return NULL; + } + + le_int32 uLength = uString->length(); + le_int32 cLength = uString->extract(0, uLength, NULL, 0, "UTF-8"); + char *cString = NEW_ARRAY(char, cLength + 1); + + uString->extract(0, uLength, cString, cLength, "UTF-8"); + + cString[cLength] = '\0'; + + return cString; +} + +void freeCString(char *cString) +{ + DELETE_ARRAY(cString); +} + +le_bool getRTL(const UnicodeString &text) +{ + UBiDiLevel paraLevel; + UErrorCode status = U_ZERO_ERROR; + le_int32 charCount = text.length(); + UBiDi *ubidi = ubidi_openSized(charCount, 0, &status); + + ubidi_setPara(ubidi, text.getBuffer(), charCount, UBIDI_DEFAULT_LTR, NULL, &status); + paraLevel = ubidi_getParaLevel(ubidi); + ubidi_close(ubidi); + + return paraLevel & 1; +} + +le_int32 getLanguageCode(const char *lang) +{ + if (strlen(lang) != 3) { + return -1; + } + + LETag langTag = (LETag) ((lang[0] << 24) + (lang[1] << 16) + (lang[2] << 8) + 0x20); + + for (le_int32 i = 0; i < languageCodeCount; i += 1) { + if (langTag == OpenTypeLayoutEngine::languageTags[i]) { + return i; + } + } + + return -1; +} + diff --git a/icuSources/test/letest/letsutil.h b/icuSources/test/letest/letsutil.h new file mode 100644 index 00000000..b7822e5d --- /dev/null +++ b/icuSources/test/letest/letsutil.h @@ -0,0 +1,36 @@ +/* + ******************************************************************************* + * + * Copyright (C) 1999-2006, International Business Machines + * Corporation and others. All Rights Reserved. + * + ******************************************************************************* + * file name: letsutil.h + * + * created on: 04/25/2006 + * created by: Eric R. Mader + */ + +#ifndef __LETSUTIL_H +#define __LETSUTIL_H + +#include "unicode/utypes.h" +#include "unicode/unistr.h" +#include "unicode/ubidi.h" + +#include "layout/LETypes.h" +#include "layout/LEScripts.h" +#include "layout/LayoutEngine.h" +#include "layout/LELanguages.h" + +#include "OpenTypeLayoutEngine.h" + +#include "letest.h" + +char *getCString(const UnicodeString *uString); +char *getUTF8String(const UnicodeString *uString); +void freeCString(char *cString); +le_bool getRTL(const UnicodeString &text); +le_int32 getLanguageCode(const char *lang); + +#endif diff --git a/icuSources/test/letest/readme.html b/icuSources/test/letest/readme.html index 8181c1b0..2acdfd3f 100644 --- a/icuSources/test/letest/readme.html +++ b/icuSources/test/letest/readme.html @@ -4,7 +4,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="Copyright" - content="Copyright (c) 2001-2003, International Business Machines Corporation and others. All Rights Reserved."> + content="Copyright (c) 2001-2005, International Business Machines Corporation and others. All Rights Reserved."> <meta name="Author" content="Eric Mader"> <meta name="GENERATOR" content="Mozilla/4.72 [en] (Windows NT 5.0; U) [Netscape]"> @@ -13,19 +13,22 @@ <body> <h2> What are letest and gendata?</h2> letest is a program you can use to verify that you have built and -installed the ICU LayoutEngine correctly. The test is not comprehensive, +installed the ICU LayoutEngine correctly. The test is not +comprehensive, it just verifies that the results of laying out some Devanagari, Arabic and Thai text are as expected. Once this test has passed, you can use the ICU LayoutEngine in your application knowing that it has been correctly installed and that the basic functionality is in place. <p>gendata is a program that is used by the ICU team to build the -source file testdata.cpp, which contains the expected results of running +source file testdata.cpp, which contains the expected results of +running letest. Unless you have changed your copy of the LayoutEngine and want to validate the changes on other platforms, there's no reason for you to run this program. </p> <p>(The ICU team first runs a Windows application which uses the ICU LayoutEngine to display the text that letest uses. Once it has been -verified that the text is displayed correctly, gendata is run to produce +verified that the text is displayed correctly, gendata is run to +produce testdata.cpp, and then letest is run on Windows to verify that letest still works with the new data.) <br>   </p> @@ -39,33 +42,41 @@ it. </p> when you invoke the runConfigureICU script. When you've done that, layout should build when you do "make all install" </p> <p>To build letest on Windows, just open the letest project in -<icu>\source\test\letest and build it. On UNIX systems, connect to +<icu>\source\test\letest and build it. On UNIX systems, connect +to <top-build-dir>/test/letest and do "make all" <br>   </p> <h2> How do I run letest?</h2> Before you can run letest, you'll need to get the fonts it uses. For -legal reasons, we can't include them with ICU, but you can download them +legal reasons, we can't include them with ICU, but you can download +them from the web. To do this, you'll need access to a computer running Windows. Here's how to get the fonts: -<p>Download the 1.3 version of the JDK from the<a - href="http://www.ibm.com/java"> IBM developerWorks Java technology zone</a> -page. From this page, follow the "Tools and products" link on the left -hand side, and then the link for the "IBM Developer Kit for Linux", or -the "IBM Developer Kit for Windows(R), Release 1.3.0". You'll need to -register with them if you haven't downloaded before. Download and -install the "Runtime Environment Package." You'll need two fonts from -this package. If you've let the installer use it's defaults, the fonts -will be in C:\Program Files\IBM\Java13\jre\lib\fonts. The files you want -are "LucidaSansRegular.ttf" and "Thonburi.ttf" Copy these font files to -the directory from which you'll run letest.<br> +<p>Download a recent version of the Java 2 Platform, Standard Edition +(J2SE) from <a href="http://java.sun.com/j2se.index.jsp">java.sun.com</a>. +From this page, follow the link for the version you want to download, +and then select the "Downloads" link on the left side of the page. +Select either the SDK or the JRE. (The JRE is sufficient for letest.) +Read the license agreement and click on "Accept" if you agree. This +will take you to the actual download page. Download the package and +install it. You'll need one font. On Windows, it will be in, for +example, "C:\j2sdk1.4.2_06/jre/lib/fonts. The file you want is +"LucidaSansRegular.ttf". Copy this file into the directory from which +you'll run letest.<br> </p> <p>Next is the Hindi font. Go to the  NCST site and download <a href="http://rohini.ncst.ernet.in/indix/download/font/raghu.ttf"> -raghu.ttf</a>. Be sure to look at the <a - href="http://rohini.ncst.ernet.in/indix/download/font/README"> README</a> +raghu.ttf</a>. Be sure to look at the <a + href="http://rohini.ncst.ernet.in/indix/download/font/README">README</a> file before you download the font. You can download raghu.ttf into the directory from which you'll run letest.<br> </p> +<p>Then download the Thai font. Go to <a + href="http://www.into-asia.com/thai_language/thaifont/">into-asia.com</a> +and click on the link for the Angsana font. This will download a .ZIP +file. Extract the font file, angsd___.ttf, into the directory from +which you will run letest.<br> +</p> <p>There's still one more font to get, the Code2000 Unicode font.Go to James Kass'  <a href="http://home.att.net/%7Ejameskass/">Unicode Support In Your Browser</a> page and click on the link that says "Click @@ -84,6 +95,6 @@ something like this: </p> <blockquote><tt>Test 0, font = raghu.ttf... passed.</tt> <br> <tt>Test 1, font = CODE2000.TTF... passed.</tt> <br> <tt>Test 2, font = LucidaSansRegular.ttf... passed.</tt> <br> - <tt>Test 3, font = Thonburi.ttf... passed.</tt></blockquote> + <tt>Test 3, font = angsd___.ttf... passed.</tt></blockquote> </body> </html> diff --git a/icuSources/test/letest/sfnt.h b/icuSources/test/letest/sfnt.h index b467f976..27fe92b9 100644 --- a/icuSources/test/letest/sfnt.h +++ b/icuSources/test/letest/sfnt.h @@ -1,6 +1,6 @@ /*************************************************************************** * -* Copyright (C) 1998-2002, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. * ************************************************************************/ @@ -209,5 +209,67 @@ struct HMTXTable // le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics }; +enum PlatformID +{ + PLATFORM_UNICODE = 0, + PLATFORM_MACINTOSH = 1, + PLATFORM_ISO = 2, + PLATFORM_MICROSOFT = 3, + PLATFORM_CUSTOM = 4 +}; + +enum MacintoshEncodingID +{ + MACINTOSH_ROMAN = 0 +}; + +enum MacintoshLanguageID +{ + MACINTOSH_ENGLISH = 0 +}; + +enum NameID +{ + NAME_COPYRIGHT_NOTICE = 0, + NAME_FONT_FAMILY = 1, + NAME_FONT_SUB_FAMILY = 2, + NAME_UNIQUE_FONT_ID = 3, + NAME_FULL_FONT_NAME = 4, + NAME_VERSION_STRING = 5, + NAME_POSTSCRIPT_NAME = 6, + NAME_TRADEMARK = 7, + NAME_MANUFACTURER = 8, + NAME_DESIGNER = 9, + NAME_DESCRIPTION = 10, + NAME_VENDOR_URL = 11, + NAME_DESIGNER_URL = 12, + NAME_LICENSE_DESCRIPTION = 13, + NAME_LICENSE_URL = 14, + NAME_RESERVED = 15, + NAME_PREFERRED_FAMILY = 16, + NAME_PREFERRED_SUB_FAMILY = 17, + NAME_COMPATIBLE_FULL = 18, + NAME_SAMPLE_TEXT = 19, + NAME_POSTSCRIPT_CID = 20 +}; + +struct NameRecord +{ + le_uint16 platformID; + le_uint16 encodingID; + le_uint16 languageID; + le_uint16 nameID; + le_uint16 length; + le_uint16 offset; +}; + +struct NAMETable +{ + le_uint16 version; + le_uint16 count; + le_uint16 stringOffset; + NameRecord nameRecords[ANY_NUMBER]; +}; + #endif diff --git a/icuSources/test/letest/testdata.cpp b/icuSources/test/letest/testdata.cpp index 57987e1f..f0624d2f 100644 --- a/icuSources/test/letest/testdata.cpp +++ b/icuSources/test/letest/testdata.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 1999-2004, International Business Machines + * Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT @@ -9,15 +9,18 @@ * ******************************************************************************* * - * file name: testdata.cpp - * created on: 12/14/2000 - * created by: gendata.cpp + * file name: testdata.cpp + * generated on: 02/28/2005 03:20:06 PM Pacific Standard Time + * generated by: gendata.cpp */ #include "LETypes.h" #include "LEScripts.h" #include "letest.h" +const char *fontVersionString0 = "Version 0.99"; +le_uint32 fontChecksum0 = 0x541C94C7; + LEUnicode inputText0[] = { 0x0936, 0x094D, 0x0930, 0x0940, 0x092E, 0x0926, 0x094D, 0x0020, @@ -123,6 +126,9 @@ float resultPositions0[] = }; +const char *fontVersionString1 = "Version 1.14"; +le_uint32 fontChecksum1 = 0x2B6E171D; + LEUnicode inputText1[] = { 0x0623, 0x0633, 0x0627, 0x0633, 0x064B, 0x0627, 0x060C, 0x0020, @@ -161,38 +167,38 @@ LEUnicode inputText1[] = LEGlyphID resultGlyphs1[] = { - 0x000072C9, 0x00007328, 0x000072E2, 0x00007322, 0x000072E3, 0x000072F5, 0x00007314, 0x000072C2, - 0x00000003, 0x00007306, 0x000072E2, 0x000072C3, 0x000072D9, 0x00007319, 0x00007314, 0x000072C2, - 0x00000003, 0x000072FF, 0x00007329, 0x00007319, 0x000072D4, 0x00000003, 0x00007325, 0x00007315, - 0x00007300, 0x00000003, 0x00007326, 0x00007323, 0x000072CD, 0x000072D9, 0x00007328, 0x00000003, - 0x000072DF, 0x000072D8, 0x000072C2, 0x00007322, 0x00000003, 0x000072E3, 0x00007329, 0x00007309, - 0x000072ED, 0x000072CC, 0x00000003, 0x00007316, 0x000072C3, 0x000072FD, 0x0000731C, 0x00000003, - 0x000072DF, 0x000072D4, 0x00007323, 0x00007328, 0x00000003, 0x00007317, 0x00007314, 0x00007322, - 0x00000003, 0x00000513, 0x00007306, 0x000072E2, 0x000072C3, 0x000072D9, 0x00007319, 0x00007315, - 0x00007314, 0x00000003, 0x00007316, 0x000072C3, 0x0000730C, 0x000072E2, 0x0000FFFE, 0x0000732C, - 0x000072C2, 0x00000003, 0x0000731E, 0x000072E1, 0x00007320, 0x00000003, 0x000072EF, 0x00007329, - 0x000072F1, 0x000072DD, 0x000072CC, 0x00007322, 0x00000003, 0x000072E3, 0x00007329, 0x00007309, - 0x000072ED, 0x000072CD, 0x00007315, 0x00007314, 0x00000003, 0x000072C9, 0x00007319, 0x000072FD, - 0x0000731C, 0x0000FFFE, 0x0000732C, 0x000072C2, 0x00000003, 0x000072CA, 0x000072C3, 0x0000051B, - 0x00007318, 0x00000003, 0x0000730E, 0x000072C3, 0x0000731D, 0x00007320, 0x00000003, 0x0000731A, - 0x000072C3, 0x00007310, 0x00000003, 0x00000513, 0x00000005, 0x000072DE, 0x00007323, 0x00007311, - 0x00000540, 0x0000731C, 0x00007323, 0x00007328, 0x00000005, 0x00000003, 0x000072FE, 0x000072C2, - 0x000072E3, 0x000072CD, 0x000072DC, 0x000072C2, 0x00000003, 0x00007313, 0x000072C7, 0x0000730C, - 0x00007322, 0x00000003, 0x00000011, 0x000072C3, 0x00007321, 0x0000731D, 0x00007318, 0x00000003, - 0x000072DF, 0x000072D8, 0x000072C2, 0x00007322, 0x00000003, 0x00007313, 0x00007311, 0x00007314, - 0x00000003, 0x000072C3, 0x0000731D, 0x00007329, 0x00007301, 0x00007318, 0x00000003, 0x000072C3, - 0x00007319, 0x0000730C, 0x000072E2, 0x00000003, 0x00007327, 0x000072F9, 0x00007301, 0x0000053F, - 0x000072CC, 0x00000003, 0x0000731A, 0x000072B8, 0x00000003, 0x000072DF, 0x00007301, 0x000072C6, - 0x00000003, 0x00007324, 0x000072E3, 0x000072DC, 0x0000FFFE, 0x0000732C, 0x000072C2, 0x00000003, - 0x00007306, 0x000072E2, 0x000072C3, 0x000072D9, 0x00007319, 0x00007314, 0x000072C2, 0x00007322, - 0x00000003, 0x00007306, 0x000072E3, 0x000072D8, 0x0000FFFE, 0x0000732C, 0x000072C2, 0x00000003, - 0x0000731B, 0x00007328, 0x000072E5, 0x000072DD, 0x000072CD, 0x000072C6, 0x00000003, 0x00007316, - 0x00007323, 0x0000730D, 0x000072CC, 0x00007322, 0x00000003, 0x00000513, 0x00007316, 0x000072C3, - 0x0000730C, 0x000072E2, 0x0000FFFE, 0x0000732C, 0x000072C2, 0x00000003, 0x000072FF, 0x00007318, - 0x00000003, 0x000072F7, 0x0000730D, 0x00007308, 0x00000003, 0x000072C5, 0x00007329, 0x000072E8, - 0x000072C2, 0x00007323, 0x000072D9, 0x00007314, 0x000072C2, 0x00000003, 0x00007313, 0x00007318, - 0x000072C3, 0x00007301, 0x000072CD, 0x000072CC, 0x00000003, 0x00000513, 0x000072C3, 0x0000053B, - 0x000072E8, 0x000072C3, 0x000072E8, 0x000072B8 + 0x0000C530, 0x0000C58F, 0x0000C549, 0x0000C589, 0x0000C54A, 0x0000C55C, 0x0000C57B, 0x0000C529, + 0x00000003, 0x0000C56D, 0x0000C549, 0x0000C52A, 0x0000C540, 0x0000C580, 0x0000C57B, 0x0000C529, + 0x00000003, 0x0000C566, 0x0000C590, 0x0000C580, 0x0000C53B, 0x00000003, 0x0000C58C, 0x0000C57C, + 0x0000C567, 0x00000003, 0x0000C58D, 0x0000C58A, 0x0000C534, 0x0000C540, 0x0000C58F, 0x00000003, + 0x0000C546, 0x0000C53F, 0x0000C529, 0x0000C589, 0x00000003, 0x0000C54A, 0x0000C590, 0x0000C570, + 0x0000C554, 0x0000C533, 0x00000003, 0x0000C57D, 0x0000C52A, 0x0000C564, 0x0000C583, 0x00000003, + 0x0000C546, 0x0000C53B, 0x0000C58A, 0x0000C58F, 0x00000003, 0x0000C57E, 0x0000C57B, 0x0000C589, + 0x00000003, 0x00000528, 0x0000C56D, 0x0000C549, 0x0000C52A, 0x0000C540, 0x0000C580, 0x0000C57C, + 0x0000C57B, 0x00000003, 0x0000C57D, 0x0000C52A, 0x0000C573, 0x0000C549, 0x0000FFFE, 0x0000C593, + 0x0000C529, 0x00000003, 0x0000C585, 0x0000C548, 0x0000C587, 0x00000003, 0x0000C556, 0x0000C590, + 0x0000C558, 0x0000C544, 0x0000C533, 0x0000C589, 0x00000003, 0x0000C54A, 0x0000C590, 0x0000C570, + 0x0000C554, 0x0000C534, 0x0000C57C, 0x0000C57B, 0x00000003, 0x0000C530, 0x0000C580, 0x0000C564, + 0x0000C583, 0x0000FFFE, 0x0000C593, 0x0000C529, 0x00000003, 0x0000C531, 0x0000C52A, 0x00000530, + 0x0000C57F, 0x00000003, 0x0000C575, 0x0000C52A, 0x0000C584, 0x0000C587, 0x00000003, 0x0000C581, + 0x0000C52A, 0x0000C577, 0x00000003, 0x00000528, 0x00000005, 0x0000C545, 0x0000C58A, 0x0000C578, + 0x00000555, 0x0000C583, 0x0000C58A, 0x0000C58F, 0x00000005, 0x00000003, 0x0000C565, 0x0000C529, + 0x0000C54A, 0x0000C534, 0x0000C543, 0x0000C529, 0x00000003, 0x0000C57A, 0x0000C52E, 0x0000C573, + 0x0000C589, 0x00000003, 0x00000011, 0x0000C52A, 0x0000C588, 0x0000C584, 0x0000C57F, 0x00000003, + 0x0000C546, 0x0000C53F, 0x0000C529, 0x0000C589, 0x00000003, 0x0000C57A, 0x0000C578, 0x0000C57B, + 0x00000003, 0x0000C52A, 0x0000C584, 0x0000C590, 0x0000C568, 0x0000C57F, 0x00000003, 0x0000C52A, + 0x0000C580, 0x0000C573, 0x0000C549, 0x00000003, 0x0000C58E, 0x0000C560, 0x0000C568, 0x00000554, + 0x0000C533, 0x00000003, 0x0000C581, 0x0000C51F, 0x00000003, 0x0000C546, 0x0000C568, 0x0000C52D, + 0x00000003, 0x0000C58B, 0x0000C54A, 0x0000C543, 0x0000FFFE, 0x0000C593, 0x0000C529, 0x00000003, + 0x0000C56D, 0x0000C549, 0x0000C52A, 0x0000C540, 0x0000C580, 0x0000C57B, 0x0000C529, 0x0000C589, + 0x00000003, 0x0000C56D, 0x0000C54A, 0x0000C53F, 0x0000FFFE, 0x0000C593, 0x0000C529, 0x00000003, + 0x0000C582, 0x0000C58F, 0x0000C54C, 0x0000C544, 0x0000C534, 0x0000C52D, 0x00000003, 0x0000C57D, + 0x0000C58A, 0x0000C574, 0x0000C533, 0x0000C589, 0x00000003, 0x00000528, 0x0000C57D, 0x0000C52A, + 0x0000C573, 0x0000C549, 0x0000FFFE, 0x0000C593, 0x0000C529, 0x00000003, 0x0000C566, 0x0000C57F, + 0x00000003, 0x0000C55E, 0x0000C574, 0x0000C56F, 0x00000003, 0x0000C52C, 0x0000C590, 0x0000C54F, + 0x0000C529, 0x0000C58A, 0x0000C540, 0x0000C57B, 0x0000C529, 0x00000003, 0x0000C57A, 0x0000C57F, + 0x0000C52A, 0x0000C568, 0x0000C534, 0x0000C533, 0x00000003, 0x00000528, 0x0000C52A, 0x00000550, + 0x0000C54F, 0x0000C52A, 0x0000C54F, 0x0000C51F }; le_int32 resultGlyphCount1 = 252; @@ -302,6 +308,9 @@ float resultPositions1[] = }; +const char *fontVersionString2 = "Version 1.20 - October 2000"; +le_uint32 fontChecksum2 = 0xF5D9BA6D; + LEUnicode inputText2[] = { 0x0623, 0x0633, 0x0627, 0x0633, 0x064B, 0x0627, 0x060C, 0x0020, @@ -340,38 +349,38 @@ LEUnicode inputText2[] = LEGlyphID resultGlyphs2[] = { - 0x000007AF, 0x0000080E, 0x000003F1, 0x00000403, 0x000007C9, 0x000007DB, 0x000007FA, 0x000003E7, - 0x00000003, 0x000003FC, 0x000003F1, 0x000007A9, 0x000007BF, 0x000007FF, 0x000007FA, 0x000003E7, - 0x00000003, 0x000007E5, 0x0000080F, 0x000007FF, 0x000007BA, 0x00000003, 0x0000080B, 0x000007FB, - 0x000007E6, 0x00000003, 0x00000405, 0x00000809, 0x000007B3, 0x000007BF, 0x0000080E, 0x00000003, - 0x000007C5, 0x000007BE, 0x000003E7, 0x00000403, 0x00000003, 0x000007C9, 0x0000080F, 0x000007EF, - 0x000007D3, 0x000007B2, 0x00000003, 0x00000400, 0x000007A9, 0x000007E3, 0x00000802, 0x00000003, - 0x000007C5, 0x000007BA, 0x00000809, 0x0000080E, 0x00000003, 0x000007FD, 0x000007FA, 0x00000403, - 0x00000003, 0x000003DE, 0x000003FC, 0x000003F1, 0x000007A9, 0x000007BF, 0x000007FF, 0x000007FB, - 0x000007FA, 0x00000003, 0x00000400, 0x000007A9, 0x000007F2, 0x000003F1, 0x0000FFFF, 0x00000812, - 0x000003E7, 0x00000003, 0x00000402, 0x000007C7, 0x00000806, 0x00000003, 0x000007D5, 0x0000080F, - 0x000007D7, 0x000007C3, 0x000007B2, 0x00000403, 0x00000003, 0x000007C9, 0x0000080F, 0x000007EF, - 0x000007D3, 0x000007B3, 0x000007FB, 0x000007FA, 0x00000003, 0x000007AF, 0x000007FF, 0x000007E3, - 0x00000802, 0x0000FFFF, 0x00000812, 0x000003E7, 0x00000003, 0x000003EA, 0x000007A9, 0x000007A7, - 0x000007FE, 0x00000003, 0x000003FE, 0x000007A9, 0x00000803, 0x00000806, 0x00000003, 0x00000401, - 0x000007A9, 0x000007F6, 0x00000003, 0x000003DE, 0x000000DF, 0x000003EF, 0x00000809, 0x000007F7, - 0x0000040B, 0x00000802, 0x00000809, 0x0000080E, 0x000000DF, 0x00000003, 0x000003F9, 0x000003E7, - 0x000007C9, 0x000007B3, 0x000007C2, 0x000003E7, 0x00000003, 0x000007F9, 0x000007AD, 0x000007F2, - 0x00000403, 0x00000003, 0x0000000E, 0x000007A9, 0x00000807, 0x00000803, 0x000007FE, 0x00000003, - 0x000007C5, 0x000007BE, 0x000003E7, 0x00000403, 0x00000003, 0x000007F9, 0x000007F7, 0x000007FA, - 0x00000003, 0x000007A9, 0x00000803, 0x0000080F, 0x000007E7, 0x000007FE, 0x00000003, 0x000007A9, - 0x000007FF, 0x000007F2, 0x000003F1, 0x00000003, 0x0000080D, 0x000007DF, 0x000007E7, 0x0000040A, - 0x000007B2, 0x00000003, 0x00000401, 0x000003E3, 0x00000003, 0x000007C5, 0x000007E7, 0x000007AC, - 0x00000003, 0x00000404, 0x000007C9, 0x000007C2, 0x0000FFFF, 0x00000812, 0x000003E7, 0x00000003, - 0x000003FC, 0x000003F1, 0x000007A9, 0x000007BF, 0x000007FF, 0x000007FA, 0x000003E7, 0x00000403, - 0x00000003, 0x000003FC, 0x000007C9, 0x000007BE, 0x0000FFFF, 0x00000812, 0x000003E7, 0x00000003, - 0x00000801, 0x0000080E, 0x000007CB, 0x000007C3, 0x000007B3, 0x000007AC, 0x00000003, 0x00000400, - 0x00000809, 0x000007F3, 0x000007B2, 0x00000403, 0x00000003, 0x000003DE, 0x00000400, 0x000007A9, - 0x000007F2, 0x000003F1, 0x0000FFFF, 0x00000812, 0x000003E7, 0x00000003, 0x000007E5, 0x000007FE, - 0x00000003, 0x000007DD, 0x000007F3, 0x000007EE, 0x00000003, 0x000007AB, 0x0000080F, 0x000007CE, - 0x000003E7, 0x00000809, 0x000007BF, 0x000007FA, 0x000003E7, 0x00000003, 0x000007F9, 0x000007FE, - 0x000007A9, 0x000007E7, 0x000007B3, 0x000007B2, 0x00000003, 0x000003DE, 0x000007A9, 0x00000406, - 0x000007CE, 0x000007A9, 0x000007CE, 0x000003E3 + 0x00000872, 0x000008D1, 0x000003F9, 0x0000040B, 0x0000088C, 0x0000089E, 0x000008BD, 0x000003EF, + 0x00000003, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, + 0x00000003, 0x000008A8, 0x000008D2, 0x000008C2, 0x0000087D, 0x00000003, 0x000008CE, 0x000008BE, + 0x000008A9, 0x00000003, 0x0000040D, 0x000008CC, 0x00000876, 0x00000882, 0x000008D1, 0x00000003, + 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, + 0x00000896, 0x00000875, 0x00000003, 0x00000408, 0x0000086C, 0x000008A6, 0x000008C5, 0x00000003, + 0x00000888, 0x0000087D, 0x000008CC, 0x000008D1, 0x00000003, 0x000008C0, 0x000008BD, 0x0000040B, + 0x00000003, 0x000003E6, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BE, + 0x000008BD, 0x00000003, 0x00000408, 0x0000086C, 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, + 0x000003EF, 0x00000003, 0x0000040A, 0x0000088A, 0x000008C9, 0x00000003, 0x00000898, 0x000008D2, + 0x0000089A, 0x00000886, 0x00000875, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, + 0x00000896, 0x00000876, 0x000008BE, 0x000008BD, 0x00000003, 0x00000872, 0x000008C2, 0x000008A6, + 0x000008C5, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000003F2, 0x0000086C, 0x0000086A, + 0x000008C1, 0x00000003, 0x00000406, 0x0000086C, 0x000008C6, 0x000008C9, 0x00000003, 0x00000409, + 0x0000086C, 0x000008B9, 0x00000003, 0x000003E6, 0x00000005, 0x000003F7, 0x000008CC, 0x000008BA, + 0x00000413, 0x000008C5, 0x000008CC, 0x000008D1, 0x00000005, 0x00000003, 0x00000401, 0x000003EF, + 0x0000088C, 0x00000876, 0x00000885, 0x000003EF, 0x00000003, 0x000008BC, 0x00000870, 0x000008B5, + 0x0000040B, 0x00000003, 0x00000011, 0x0000086C, 0x000008CA, 0x000008C6, 0x000008C1, 0x00000003, + 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x000008BC, 0x000008BA, 0x000008BD, + 0x00000003, 0x0000086C, 0x000008C6, 0x000008D2, 0x000008AA, 0x000008C1, 0x00000003, 0x0000086C, + 0x000008C2, 0x000008B5, 0x000003F9, 0x00000003, 0x000008D0, 0x000008A2, 0x000008AA, 0x00000412, + 0x00000875, 0x00000003, 0x00000409, 0x000003EB, 0x00000003, 0x00000888, 0x000008AA, 0x0000086F, + 0x00000003, 0x0000040C, 0x0000088C, 0x00000885, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, + 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, 0x0000040B, + 0x00000003, 0x00000404, 0x0000088C, 0x00000881, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, + 0x000008C4, 0x000008D1, 0x0000088E, 0x00000886, 0x00000876, 0x0000086F, 0x00000003, 0x00000408, + 0x000008CC, 0x000008B6, 0x00000875, 0x0000040B, 0x00000003, 0x000003E6, 0x00000408, 0x0000086C, + 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000008A8, 0x000008C1, + 0x00000003, 0x000008A0, 0x000008B6, 0x000008B1, 0x00000003, 0x0000086E, 0x000008D2, 0x00000891, + 0x000003EF, 0x000008CC, 0x00000882, 0x000008BD, 0x000003EF, 0x00000003, 0x000008BC, 0x000008C1, + 0x0000086C, 0x000008AA, 0x00000876, 0x00000875, 0x00000003, 0x000003E6, 0x0000086C, 0x0000040E, + 0x00000891, 0x0000086C, 0x00000891, 0x000003EB }; le_int32 resultGlyphCount2 = 252; @@ -414,73 +423,76 @@ le_int32 resultIndices2[] = float resultPositions2[] = { - 0.000000F, 0.000000F, 4.927734F, 0.000000F, 8.097656F, 0.000000F, 12.082031F, 0.000000F, - 16.406250F, 0.000000F, 21.105469F, 0.000000F, 30.832031F, 0.000000F, 34.160156F, 0.000000F, - 36.978516F, 0.000000F, 40.775391F, 0.000000F, 52.482422F, 0.000000F, 56.466797F, 0.000000F, - 59.091797F, 0.000000F, 65.853516F, 0.000000F, 71.671875F, 0.000000F, 75.000000F, 0.000000F, - 77.818359F, 0.000000F, 81.615234F, 0.000000F, 87.433594F, 0.000000F, 91.324219F, 0.000000F, - 97.142578F, 0.000000F, 103.599609F, 0.000000F, 107.396484F, 0.000000F, 116.214844F, 0.000000F, - 120.105469F, 0.000000F, 124.875000F, 0.000000F, 128.671875F, 0.000000F, 137.718750F, 0.000000F, - 142.119141F, 0.000000F, 146.009766F, 0.000000F, 152.771484F, 0.000000F, 155.941406F, 0.000000F, - 159.738281F, 0.000000F, 165.251953F, 0.000000F, 171.708984F, 0.000000F, 174.527344F, 0.000000F, - 178.851563F, 0.000000F, 182.648438F, 0.000000F, 187.347656F, 0.000000F, 191.238281F, 0.000000F, - 196.253906F, 0.000000F, 206.238281F, 0.000000F, 209.408203F, 0.000000F, 213.205078F, 0.000000F, - 218.513672F, 0.000000F, 221.138672F, 0.000000F, 228.328125F, 0.000000F, 231.498047F, 0.000000F, - 235.294922F, 0.000000F, 240.808594F, 0.000000F, 247.265625F, 0.000000F, 251.666016F, 0.000000F, - 254.835938F, 0.000000F, 258.632813F, 0.000000F, 264.574219F, 0.000000F, 267.902344F, 0.000000F, - 272.226563F, 0.000000F, 276.023438F, 0.000000F, 279.820313F, 0.000000F, 291.527344F, 0.000000F, - 295.511719F, 0.000000F, 298.136719F, 0.000000F, 304.898438F, 0.000000F, 310.716797F, 0.000000F, - 314.607422F, 0.000000F, 317.935547F, 0.000000F, 321.732422F, 0.000000F, 327.041016F, 0.000000F, - 329.666016F, 0.000000F, 334.113281F, 0.000000F, 338.097656F, 0.000000F, 338.097656F, 0.000000F, - 343.406250F, 0.000000F, 346.224609F, 0.000000F, 350.021484F, 0.000000F, 355.095703F, 0.000000F, - 360.609375F, 0.000000F, 366.451172F, 0.000000F, 370.248047F, 0.000000F, 385.494141F, 0.000000F, - 389.384766F, 0.000000F, 399.111328F, 0.000000F, 405.873047F, 0.000000F, 409.042969F, 0.000000F, - 413.367188F, 0.000000F, 417.164063F, 0.000000F, 421.863281F, 0.000000F, 425.753906F, 0.000000F, - 430.769531F, 0.000000F, 440.753906F, 0.000000F, 444.644531F, 0.000000F, 448.535156F, 0.000000F, - 451.863281F, 0.000000F, 455.660156F, 0.000000F, 460.587891F, 0.000000F, 466.406250F, 0.000000F, - 473.595703F, 0.000000F, 476.765625F, 0.000000F, 476.765625F, 0.000000F, 482.074219F, 0.000000F, - 484.892578F, 0.000000F, 488.689453F, 0.000000F, 498.275391F, 0.000000F, 500.900391F, 0.000000F, - 504.791016F, 0.000000F, 510.123047F, 0.000000F, 513.919922F, 0.000000F, 524.630859F, 0.000000F, - 527.255859F, 0.000000F, 531.146484F, 0.000000F, 536.988281F, 0.000000F, 540.785156F, 0.000000F, - 549.187500F, 0.000000F, 551.812500F, 0.000000F, 556.113281F, 0.000000F, 559.910156F, 0.000000F, - 563.707031F, 0.000000F, 568.476563F, 0.000000F, 573.445313F, 0.000000F, 577.845703F, 0.000000F, - 582.714844F, 0.000000F, 582.714844F, 0.000000F, 585.884766F, 0.000000F, 590.285156F, 0.000000F, - 593.455078F, 0.000000F, 598.224609F, 0.000000F, 602.021484F, 0.000000F, 607.839844F, 0.000000F, - 610.658203F, 0.000000F, 615.357422F, 0.000000F, 619.248047F, 0.000000F, 625.705078F, 0.000000F, - 628.523438F, 0.000000F, 632.320313F, 0.000000F, 641.197266F, 0.000000F, 645.087891F, 0.000000F, - 649.535156F, 0.000000F, 653.859375F, 0.000000F, 657.656250F, 0.000000F, 661.453125F, 0.000000F, - 664.078125F, 0.000000F, 669.328125F, 0.000000F, 673.218750F, 0.000000F, 678.550781F, 0.000000F, - 682.347656F, 0.000000F, 687.861328F, 0.000000F, 694.318359F, 0.000000F, 697.136719F, 0.000000F, - 701.460938F, 0.000000F, 705.257813F, 0.000000F, 714.134766F, 0.000000F, 719.003906F, 0.000000F, - 722.332031F, 0.000000F, 726.128906F, 0.000000F, 728.753906F, 0.000000F, 732.644531F, 0.000000F, - 736.535156F, 0.000000F, 741.779297F, 0.000000F, 747.111328F, 0.000000F, 750.908203F, 0.000000F, - 753.533203F, 0.000000F, 759.351563F, 0.000000F, 763.798828F, 0.000000F, 767.783203F, 0.000000F, - 771.580078F, 0.000000F, 780.398438F, 0.000000F, 787.587891F, 0.000000F, 792.832031F, 0.000000F, - 792.832031F, 0.000000F, 796.001953F, 0.000000F, 799.798828F, 0.000000F, 808.201172F, 0.000000F, - 811.019531F, 0.000000F, 814.816406F, 0.000000F, 820.330078F, 0.000000F, 825.574219F, 0.000000F, - 828.744141F, 0.000000F, 832.541016F, 0.000000F, 841.587891F, 0.000000F, 846.287109F, 0.000000F, - 852.744141F, 0.000000F, 852.744141F, 0.000000F, 858.052734F, 0.000000F, 860.871094F, 0.000000F, - 864.667969F, 0.000000F, 876.375000F, 0.000000F, 880.359375F, 0.000000F, 882.984375F, 0.000000F, - 889.746094F, 0.000000F, 895.564453F, 0.000000F, 898.892578F, 0.000000F, 901.710938F, 0.000000F, - 906.035156F, 0.000000F, 909.832031F, 0.000000F, 921.539063F, 0.000000F, 926.238281F, 0.000000F, - 932.695313F, 0.000000F, 932.695313F, 0.000000F, 938.003906F, 0.000000F, 940.822266F, 0.000000F, - 944.619141F, 0.000000F, 953.378906F, 0.000000F, 956.548828F, 0.000000F, 961.248047F, 0.000000F, - 968.009766F, 0.000000F, 971.900391F, 0.000000F, 975.070313F, 0.000000F, 978.867188F, 0.000000F, - 984.175781F, 0.000000F, 988.576172F, 0.000000F, 993.591797F, 0.000000F, 996.761719F, 0.000000F, - 1001.085938F, 0.000000F, 1004.882813F, 0.000000F, 1008.679688F, 0.000000F, 1013.988281F, 0.000000F, - 1016.613281F, 0.000000F, 1021.060547F, 0.000000F, 1025.044922F, 0.000000F, 1025.044922F, 0.000000F, - 1030.353516F, 0.000000F, 1033.171875F, 0.000000F, 1036.968750F, 0.000000F, 1042.787109F, 0.000000F, - 1048.119141F, 0.000000F, 1051.916016F, 0.000000F, 1059.626953F, 0.000000F, 1064.642578F, 0.000000F, - 1069.089844F, 0.000000F, 1072.886719F, 0.000000F, 1083.908203F, 0.000000F, 1087.798828F, 0.000000F, - 1096.710938F, 0.000000F, 1099.529297F, 0.000000F, 1103.929688F, 0.000000F, 1110.691406F, 0.000000F, - 1114.019531F, 0.000000F, 1116.837891F, 0.000000F, 1120.634766F, 0.000000F, 1129.511719F, 0.000000F, - 1134.843750F, 0.000000F, 1137.468750F, 0.000000F, 1142.712891F, 0.000000F, 1146.603516F, 0.000000F, - 1149.773438F, 0.000000F, 1153.570313F, 0.000000F, 1157.367188F, 0.000000F, 1159.992188F, 0.000000F, - 1159.992188F, 0.000000F, 1168.904297F, 0.000000F, 1171.529297F, 0.000000F, 1180.441406F, 0.000000F, - 1183.259766F, 0.000000F + 0.000000F, 0.000000F, 6.316406F, 0.000000F, 10.382813F, 0.000000F, 15.492188F, 0.000000F, + 21.035156F, 0.000000F, 27.058594F, 0.000000F, 39.527344F, 0.000000F, 43.792969F, 0.000000F, + 47.408203F, 0.000000F, 51.205078F, 0.000000F, 66.216797F, 0.000000F, 71.326172F, 0.000000F, + 74.695313F, 0.000000F, 83.367188F, 0.000000F, 90.826172F, 0.000000F, 95.091797F, 0.000000F, + 98.707031F, 0.000000F, 102.503906F, 0.000000F, 109.962891F, 0.000000F, 114.949219F, 0.000000F, + 122.408203F, 0.000000F, 130.687500F, 0.000000F, 134.484375F, 0.000000F, 145.787109F, 0.000000F, + 150.773438F, 0.000000F, 156.884766F, 0.000000F, 160.681641F, 0.000000F, 172.277344F, 0.000000F, + 177.919922F, 0.000000F, 182.906250F, 0.000000F, 191.578125F, 0.000000F, 195.644531F, 0.000000F, + 199.441406F, 0.000000F, 206.507813F, 0.000000F, 214.787109F, 0.000000F, 218.402344F, 0.000000F, + 223.945313F, 0.000000F, 227.742188F, 0.000000F, 233.765625F, 0.000000F, 238.751953F, 0.000000F, + 245.185547F, 0.000000F, 257.982422F, 0.000000F, 262.048828F, 0.000000F, 265.845703F, 0.000000F, + 272.654297F, 0.000000F, 276.023438F, 0.000000F, 285.240234F, 0.000000F, 289.306641F, 0.000000F, + 293.103516F, 0.000000F, 300.169922F, 0.000000F, 308.449219F, 0.000000F, 314.091797F, 0.000000F, + 318.158203F, 0.000000F, 321.955078F, 0.000000F, 329.572266F, 0.000000F, 333.837891F, 0.000000F, + 339.380859F, 0.000000F, 343.177734F, 0.000000F, 346.974609F, 0.000000F, 361.986328F, 0.000000F, + 367.095703F, 0.000000F, 370.464844F, 0.000000F, 379.136719F, 0.000000F, 386.595703F, 0.000000F, + 391.582031F, 0.000000F, 395.847656F, 0.000000F, 399.644531F, 0.000000F, 406.453125F, 0.000000F, + 409.822266F, 0.000000F, 415.523438F, 0.000000F, 420.632813F, 0.000000F, 420.632813F, 0.000000F, + 427.441406F, 0.000000F, 431.056641F, 0.000000F, 434.853516F, 0.000000F, 441.357422F, 0.000000F, + 448.423828F, 0.000000F, 455.912109F, 0.000000F, 459.708984F, 0.000000F, 479.255859F, 0.000000F, + 484.242188F, 0.000000F, 496.710938F, 0.000000F, 505.382813F, 0.000000F, 509.449219F, 0.000000F, + 514.992188F, 0.000000F, 518.789063F, 0.000000F, 524.812500F, 0.000000F, 529.798828F, 0.000000F, + 536.232422F, 0.000000F, 549.029297F, 0.000000F, 554.015625F, 0.000000F, 559.001953F, 0.000000F, + 563.267578F, 0.000000F, 567.064453F, 0.000000F, 573.380859F, 0.000000F, 580.839844F, 0.000000F, + 590.056641F, 0.000000F, 594.123047F, 0.000000F, 594.123047F, 0.000000F, 600.931641F, 0.000000F, + 604.546875F, 0.000000F, 608.343750F, 0.000000F, 620.636719F, 0.000000F, 624.005859F, 0.000000F, + 628.992188F, 0.000000F, 635.830078F, 0.000000F, 639.626953F, 0.000000F, 653.361328F, 0.000000F, + 656.730469F, 0.000000F, 661.716797F, 0.000000F, 669.205078F, 0.000000F, 673.001953F, 0.000000F, + 683.777344F, 0.000000F, 687.146484F, 0.000000F, 692.660156F, 0.000000F, 696.457031F, 0.000000F, + 700.253906F, 0.000000F, 704.736328F, 0.000000F, 711.105469F, 0.000000F, 716.748047F, 0.000000F, + 722.994141F, 0.000000F, 722.994141F, 0.000000F, 727.060547F, 0.000000F, 732.703125F, 0.000000F, + 736.769531F, 0.000000F, 741.251953F, 0.000000F, 745.048828F, 0.000000F, 752.507813F, 0.000000F, + 756.123047F, 0.000000F, 762.146484F, 0.000000F, 767.132813F, 0.000000F, 775.412109F, 0.000000F, + 779.027344F, 0.000000F, 782.824219F, 0.000000F, 794.203125F, 0.000000F, 799.189453F, 0.000000F, + 804.890625F, 0.000000F, 810.433594F, 0.000000F, 814.230469F, 0.000000F, 818.027344F, 0.000000F, + 821.396484F, 0.000000F, 828.128906F, 0.000000F, 833.115234F, 0.000000F, 839.953125F, 0.000000F, + 843.750000F, 0.000000F, 850.816406F, 0.000000F, 859.095703F, 0.000000F, 862.710938F, 0.000000F, + 868.253906F, 0.000000F, 872.050781F, 0.000000F, 883.429688F, 0.000000F, 889.675781F, 0.000000F, + 893.941406F, 0.000000F, 897.738281F, 0.000000F, 901.107422F, 0.000000F, 906.093750F, 0.000000F, + 911.080078F, 0.000000F, 917.800781F, 0.000000F, 924.638672F, 0.000000F, 928.435547F, 0.000000F, + 931.804688F, 0.000000F, 939.263672F, 0.000000F, 944.964844F, 0.000000F, 950.074219F, 0.000000F, + 953.871094F, 0.000000F, 965.173828F, 0.000000F, 974.390625F, 0.000000F, 981.111328F, 0.000000F, + 981.111328F, 0.000000F, 985.177734F, 0.000000F, 988.974609F, 0.000000F, 999.750000F, 0.000000F, + 1003.365234F, 0.000000F, 1007.162109F, 0.000000F, 1014.228516F, 0.000000F, 1020.949219F, 0.000000F, + 1025.015625F, 0.000000F, 1028.812500F, 0.000000F, 1040.408203F, 0.000000F, 1046.431641F, 0.000000F, + 1054.710938F, 0.000000F, 1054.710938F, 0.000000F, 1061.519531F, 0.000000F, 1065.134766F, 0.000000F, + 1068.931641F, 0.000000F, 1083.943359F, 0.000000F, 1089.052734F, 0.000000F, 1092.421875F, 0.000000F, + 1101.093750F, 0.000000F, 1108.552734F, 0.000000F, 1112.818359F, 0.000000F, 1116.433594F, 0.000000F, + 1121.976563F, 0.000000F, 1125.773438F, 0.000000F, 1140.785156F, 0.000000F, 1146.808594F, 0.000000F, + 1155.087891F, 0.000000F, 1155.087891F, 0.000000F, 1161.896484F, 0.000000F, 1165.511719F, 0.000000F, + 1169.308594F, 0.000000F, 1180.541016F, 0.000000F, 1184.607422F, 0.000000F, 1190.630859F, 0.000000F, + 1199.302734F, 0.000000F, 1204.289063F, 0.000000F, 1208.355469F, 0.000000F, 1212.152344F, 0.000000F, + 1218.960938F, 0.000000F, 1224.603516F, 0.000000F, 1231.037109F, 0.000000F, 1235.103516F, 0.000000F, + 1240.646484F, 0.000000F, 1244.443359F, 0.000000F, 1248.240234F, 0.000000F, 1255.048828F, 0.000000F, + 1258.417969F, 0.000000F, 1264.119141F, 0.000000F, 1269.228516F, 0.000000F, 1269.228516F, 0.000000F, + 1276.037109F, 0.000000F, 1279.652344F, 0.000000F, 1283.449219F, 0.000000F, 1290.908203F, 0.000000F, + 1297.746094F, 0.000000F, 1301.542969F, 0.000000F, 1311.427734F, 0.000000F, 1317.861328F, 0.000000F, + 1323.562500F, 0.000000F, 1327.359375F, 0.000000F, 1341.492188F, 0.000000F, 1346.478516F, 0.000000F, + 1357.904297F, 0.000000F, 1361.519531F, 0.000000F, 1367.162109F, 0.000000F, 1375.833984F, 0.000000F, + 1380.099609F, 0.000000F, 1383.714844F, 0.000000F, 1387.511719F, 0.000000F, 1398.890625F, 0.000000F, + 1405.728516F, 0.000000F, 1409.097656F, 0.000000F, 1415.818359F, 0.000000F, 1420.804688F, 0.000000F, + 1424.871094F, 0.000000F, 1428.667969F, 0.000000F, 1432.464844F, 0.000000F, 1435.833984F, 0.000000F, + 1435.833984F, 0.000000F, 1447.259766F, 0.000000F, 1450.628906F, 0.000000F, 1462.054688F, 0.000000F, + 1465.669922F, 0.000000F }; +const char *fontVersionString3 = "Version 2.1 - July 1995"; +le_uint32 fontChecksum3 = 0x49B67200; + LEUnicode inputText3[] = { 0x0E1A, 0x0E17, 0x0E17, 0x0E35, 0x0E48, 0x0E51, 0x0E1E, 0x0E32, @@ -508,27 +520,27 @@ LEUnicode inputText3[] = LEGlyphID resultGlyphs3[] = { - 0x0000009C, 0x00000099, 0x00000099, 0x000000B7, 0x000000C9, 0x000000D2, 0x000000A0, 0x000000B4, - 0x000000A4, 0x000000BA, 0x000000C5, 0x0000008D, 0x000000C3, 0x00000086, 0x000000A7, 0x0000009B, - 0x000000C3, 0x00000096, 0x000000C3, 0x000000A5, 0x0000009A, 0x000000B7, 0x000000AF, 0x000000B4, - 0x000000AA, 0x000000B3, 0x000000A4, 0x000000AF, 0x000000A4, 0x000000BB, 0x00000075, 0x00000099, - 0x00000075, 0x000000B4, 0x000000A3, 0x00000083, 0x000000A7, 0x000000B4, 0x00000089, 0x00000099, - 0x000000BA, 0x00000075, 0x00000089, 0x000000C4, 0x000000AD, 0x0000008F, 0x00000075, 0x000000C4, - 0x0000009B, 0x000000C2, 0x00000086, 0x0000009B, 0x0000008D, 0x000000B3, 0x000000AC, 0x00000083, - 0x000000B3, 0x0000009C, 0x000000A7, 0x000000BA, 0x00000089, 0x000000C1, 0x000000B0, 0x0000009B, - 0x000000A5, 0x000000B7, 0x0000008C, 0x000000B4, 0x000000A9, 0x000000C5, 0x000000A5, 0x00000075, - 0x000000C2, 0x000000A7, 0x000000B2, 0x0000009D, 0x00000071, 0x000000B4, 0x000000C1, 0x000000AF, - 0x000000C8, 0x000000A3, 0x000000A2, 0x000000A5, 0x000000A5, 0x000000A4, 0x000000B4, 0x0000008C, - 0x000000B4, 0x000000A9, 0x000000C5, 0x000000A5, 0x00000075, 0x0000009C, 0x00000076, 0x000000B4, - 0x0000009B, 0x00000084, 0x000000AF, 0x00000089, 0x000000A0, 0x000000A9, 0x00000083, 0x000000C1, - 0x00000084, 0x000000B4, 0x000000AD, 0x000000A7, 0x000000B3, 0x00000089, 0x000000C1, 0x000000A7, - 0x000000C8, 0x00000083, 0x000000C1, 0x000000A0, 0x000000A5, 0x000000B4, 0x000000B2, 0x000000C5, - 0x000000A3, 0x00000076, 0x000000AC, 0x000000A5, 0x00000076, 0x000000B4, 0x00000089, 0x0000009C, - 0x00000076, 0x000000B4, 0x0000009B, 0x00000097, 0x00000076, 0x000000AF, 0x00000089, 0x00000084, - 0x0000009B, 0x000000A3, 0x000000B4, 0x00000096, 0x00000076, 0x000000A9, 0x000000A4, 0x000000C1, - 0x00000083, 0x000000A9, 0x000000B7, 0x000000A4, 0x0000009B, 0x000000C1, 0x0000009D, 0x0000007D, - 0x0000009B, 0x000000A5, 0x000000B2, 0x000000A4, 0x000000B2, 0x00000099, 0x000000B4, 0x00000089, - 0x000000AD, 0x000000A7, 0x000000B4, 0x000000A4, 0x000000C5, 0x000000A3, 0x000000A7, 0x00000079 + 0x000000F3, 0x000000F0, 0x000000F0, 0x0000010E, 0x0000011D, 0x00000126, 0x000000F7, 0x0000010B, + 0x000000FB, 0x00000111, 0x00000119, 0x000000E4, 0x00000117, 0x000000DD, 0x000000FE, 0x000000F2, + 0x00000117, 0x000000ED, 0x00000117, 0x000000FC, 0x000000F1, 0x0000010E, 0x00000106, 0x0000010B, + 0x00000101, 0x0000010A, 0x000000FB, 0x00000106, 0x000000FB, 0x00000112, 0x0000013B, 0x000000F0, + 0x0000013B, 0x0000010B, 0x000000FA, 0x000000DA, 0x000000FE, 0x0000010B, 0x000000E0, 0x000000F0, + 0x00000111, 0x0000013B, 0x000000E0, 0x00000118, 0x00000104, 0x000000E6, 0x0000013B, 0x00000118, + 0x000000F2, 0x00000116, 0x000000DD, 0x000000F2, 0x000000E4, 0x0000010A, 0x00000103, 0x000000DA, + 0x0000010A, 0x000000F3, 0x000000FE, 0x00000111, 0x000000E0, 0x00000115, 0x00000107, 0x000000F2, + 0x000000FC, 0x0000010E, 0x000000E3, 0x0000010B, 0x00000100, 0x00000119, 0x000000FC, 0x0000013B, + 0x00000116, 0x000000FE, 0x00000109, 0x000000F4, 0x00000137, 0x0000010B, 0x00000115, 0x00000106, + 0x0000011C, 0x000000FA, 0x000000F9, 0x000000FC, 0x000000FC, 0x000000FB, 0x0000010B, 0x000000E3, + 0x0000010B, 0x00000100, 0x00000119, 0x000000FC, 0x0000013B, 0x000000F3, 0x0000013C, 0x0000010B, + 0x000000F2, 0x000000DB, 0x00000106, 0x000000E0, 0x000000F7, 0x00000100, 0x000000DA, 0x00000115, + 0x000000DB, 0x0000010B, 0x00000104, 0x000000FE, 0x0000010A, 0x000000E0, 0x00000115, 0x000000FE, + 0x0000011C, 0x000000DA, 0x00000115, 0x000000F7, 0x000000FC, 0x0000010B, 0x00000109, 0x00000119, + 0x000000FA, 0x0000013C, 0x00000103, 0x000000FC, 0x0000013C, 0x0000010B, 0x000000E0, 0x000000F3, + 0x0000013C, 0x0000010B, 0x000000F2, 0x000000EE, 0x0000013C, 0x00000106, 0x000000E0, 0x000000DB, + 0x000000F2, 0x000000FA, 0x0000010B, 0x000000ED, 0x0000013C, 0x00000100, 0x000000FB, 0x00000115, + 0x000000DA, 0x00000100, 0x0000010E, 0x000000FB, 0x000000F2, 0x00000115, 0x000000F4, 0x00000143, + 0x000000F2, 0x000000FC, 0x00000109, 0x000000FB, 0x00000109, 0x000000F0, 0x0000010B, 0x000000E0, + 0x00000104, 0x000000FE, 0x0000010B, 0x000000FB, 0x00000119, 0x000000FA, 0x000000FE, 0x0000013F }; le_int32 resultGlyphCount3 = 168; @@ -560,58 +572,58 @@ le_int32 resultIndices3[] = float resultPositions3[] = { - 0.000000F, 0.000000F, 6.408000F, 0.000000F, 12.816000F, 0.000000F, 19.223999F, 0.000000F, - 19.223999F, 0.000000F, 19.223999F, 0.000000F, 25.343998F, 0.000000F, 32.051998F, 0.000000F, - 37.595997F, 0.000000F, 43.715996F, 0.000000F, 43.715996F, 0.000000F, 47.795998F, 0.000000F, - 53.915997F, 0.000000F, 57.995995F, 0.000000F, 64.115997F, 0.000000F, 70.236000F, 0.000000F, - 76.643997F, 0.000000F, 80.723999F, 0.000000F, 86.844002F, 0.000000F, 90.924004F, 0.000000F, - 96.468002F, 0.000000F, 102.588005F, 0.000000F, 102.588005F, 0.000000F, 108.708008F, 0.000000F, - 114.252007F, 0.000000F, 120.372009F, 0.000000F, 120.372009F, 0.000000F, 126.492012F, 0.000000F, - 132.612015F, 0.000000F, 138.732010F, 0.000000F, 138.732010F, 0.000000F, 138.732010F, 0.000000F, - 145.140015F, 0.000000F, 145.140015F, 0.000000F, 150.684021F, 0.000000F, 157.092026F, 0.000000F, - 163.212021F, 0.000000F, 169.332016F, 0.000000F, 174.876022F, 0.000000F, 180.420029F, 0.000000F, - 186.828033F, 0.000000F, 186.828033F, 0.000000F, 186.828033F, 0.000000F, 192.372040F, 0.000000F, - 196.452042F, 0.000000F, 202.860046F, 0.000000F, 211.020050F, 0.000000F, 211.020050F, 0.000000F, - 215.100052F, 0.000000F, 221.508057F, 0.000000F, 227.628052F, 0.000000F, 233.748047F, 0.000000F, - 240.156052F, 0.000000F, 246.276047F, 0.000000F, 246.276047F, 0.000000F, 252.396042F, 0.000000F, - 258.516052F, 0.000000F, 258.516052F, 0.000000F, 264.924042F, 0.000000F, 271.044037F, 0.000000F, - 271.044037F, 0.000000F, 276.588043F, 0.000000F, 280.080048F, 0.000000F, 286.200043F, 0.000000F, - 292.608032F, 0.000000F, 298.152039F, 0.000000F, 298.152039F, 0.000000F, 304.272034F, 0.000000F, - 309.816040F, 0.000000F, 315.360046F, 0.000000F, 319.440033F, 0.000000F, 324.984039F, 0.000000F, - 324.984039F, 0.000000F, 331.104034F, 0.000000F, 337.224030F, 0.000000F, 342.768036F, 0.000000F, - 349.176025F, 0.000000F, 349.176025F, 0.000000F, 354.720032F, 0.000000F, 358.212036F, 0.000000F, - 364.332031F, 0.000000F, 364.332031F, 0.000000F, 370.740021F, 0.000000F, 377.148010F, 0.000000F, - 382.692017F, 0.000000F, 388.236023F, 0.000000F, 394.356018F, 0.000000F, 399.900024F, 0.000000F, - 406.020020F, 0.000000F, 411.564026F, 0.000000F, 417.108032F, 0.000000F, 421.188019F, 0.000000F, - 426.732025F, 0.000000F, 426.732025F, 0.000000F, 433.140015F, 0.000000F, 433.140015F, 0.000000F, - 438.684021F, 0.000000F, 445.092010F, 0.000000F, 451.212006F, 0.000000F, 457.332001F, 0.000000F, - 462.876007F, 0.000000F, 469.584015F, 0.000000F, 475.128021F, 0.000000F, 481.248016F, 0.000000F, - 484.740021F, 0.000000F, 490.860016F, 0.000000F, 496.404022F, 0.000000F, 502.812012F, 0.000000F, - 508.932007F, 0.000000F, 508.932007F, 0.000000F, 514.476013F, 0.000000F, 517.968018F, 0.000000F, - 524.088013F, 0.000000F, 524.088013F, 0.000000F, 530.208008F, 0.000000F, 533.700012F, 0.000000F, - 540.408020F, 0.000000F, 545.952026F, 0.000000F, 551.496033F, 0.000000F, 557.040039F, 0.000000F, - 561.120056F, 0.000000F, 567.528076F, 0.000000F, 567.528076F, 0.000000F, 573.648071F, 0.000000F, - 579.192078F, 0.000000F, 579.192078F, 0.000000F, 584.736084F, 0.000000F, 590.280090F, 0.000000F, - 596.688110F, 0.000000F, 596.688110F, 0.000000F, 602.232117F, 0.000000F, 608.640137F, 0.000000F, - 614.760132F, 0.000000F, 614.760132F, 0.000000F, 620.880127F, 0.000000F, 626.424133F, 0.000000F, - 632.544128F, 0.000000F, 638.952148F, 0.000000F, 645.360168F, 0.000000F, 650.904175F, 0.000000F, - 657.024170F, 0.000000F, 657.024170F, 0.000000F, 662.568176F, 0.000000F, 668.688171F, 0.000000F, - 672.180176F, 0.000000F, 678.300171F, 0.000000F, 683.844177F, 0.000000F, 683.844177F, 0.000000F, - 689.964172F, 0.000000F, 696.372192F, 0.000000F, 699.864197F, 0.000000F, 706.272217F, 0.000000F, - 706.272217F, 0.000000F, 712.680237F, 0.000000F, 718.224243F, 0.000000F, 723.768250F, 0.000000F, - 729.888245F, 0.000000F, 735.432251F, 0.000000F, 741.840271F, 0.000000F, 747.384277F, 0.000000F, - 752.928284F, 0.000000F, 759.336304F, 0.000000F, 765.456299F, 0.000000F, 771.000305F, 0.000000F, - 777.120300F, 0.000000F, 781.200317F, 0.000000F, 787.608337F, 0.000000F, 793.728333F, 0.000000F, - 793.728333F, 0.000000F + 0.000000F, 0.000000F, 5.399414F, 0.000000F, 10.798828F, 0.000000F, 16.198242F, 0.000000F, + 16.198242F, 0.000000F, 16.198242F, 0.000000F, 21.046875F, 0.000000F, 26.616211F, 0.000000F, + 30.035156F, 0.000000F, 34.151367F, 0.000000F, 34.151367F, 0.000000F, 38.279297F, 0.000000F, + 43.558594F, 0.000000F, 47.663086F, 0.000000F, 52.438477F, 0.000000F, 57.178711F, 0.000000F, + 62.698242F, 0.000000F, 66.802734F, 0.000000F, 71.601563F, 0.000000F, 75.706055F, 0.000000F, + 79.810547F, 0.000000F, 84.369141F, 0.000000F, 84.369141F, 0.000000F, 89.097656F, 0.000000F, + 92.516602F, 0.000000F, 97.195313F, 0.000000F, 97.195313F, 0.000000F, 101.311523F, 0.000000F, + 106.040039F, 0.000000F, 110.156250F, 0.000000F, 110.156250F, 0.000000F, 110.156250F, 0.000000F, + 115.555664F, 0.000000F, 115.555664F, 0.000000F, 118.974609F, 0.000000F, 124.013672F, 0.000000F, + 128.765625F, 0.000000F, 133.505859F, 0.000000F, 136.924805F, 0.000000F, 140.704102F, 0.000000F, + 146.103516F, 0.000000F, 146.103516F, 0.000000F, 146.103516F, 0.000000F, 149.882813F, 0.000000F, + 153.553711F, 0.000000F, 159.158203F, 0.000000F, 165.421875F, 0.000000F, 165.421875F, 0.000000F, + 169.092773F, 0.000000F, 174.612305F, 0.000000F, 179.135742F, 0.000000F, 183.911133F, 0.000000F, + 189.430664F, 0.000000F, 194.709961F, 0.000000F, 194.709961F, 0.000000F, 199.989258F, 0.000000F, + 204.741211F, 0.000000F, 204.741211F, 0.000000F, 210.140625F, 0.000000F, 214.880859F, 0.000000F, + 214.880859F, 0.000000F, 218.660156F, 0.000000F, 220.675781F, 0.000000F, 225.128906F, 0.000000F, + 230.648438F, 0.000000F, 234.752930F, 0.000000F, 234.752930F, 0.000000F, 239.613281F, 0.000000F, + 243.032227F, 0.000000F, 247.280273F, 0.000000F, 251.408203F, 0.000000F, 255.512695F, 0.000000F, + 255.512695F, 0.000000F, 260.036133F, 0.000000F, 264.776367F, 0.000000F, 269.071289F, 0.000000F, + 274.470703F, 0.000000F, 274.470703F, 0.000000F, 277.889648F, 0.000000F, 279.905273F, 0.000000F, + 284.633789F, 0.000000F, 284.633789F, 0.000000F, 289.672852F, 0.000000F, 294.641602F, 0.000000F, + 298.746094F, 0.000000F, 302.850586F, 0.000000F, 306.966797F, 0.000000F, 310.385742F, 0.000000F, + 315.246094F, 0.000000F, 318.665039F, 0.000000F, 322.913086F, 0.000000F, 327.041016F, 0.000000F, + 331.145508F, 0.000000F, 331.145508F, 0.000000F, 336.544922F, 0.000000F, 336.544922F, 0.000000F, + 339.963867F, 0.000000F, 345.483398F, 0.000000F, 350.258789F, 0.000000F, 354.987305F, 0.000000F, + 358.766602F, 0.000000F, 364.335938F, 0.000000F, 368.583984F, 0.000000F, 373.335938F, 0.000000F, + 375.351563F, 0.000000F, 380.126953F, 0.000000F, 383.545898F, 0.000000F, 389.150391F, 0.000000F, + 393.890625F, 0.000000F, 393.890625F, 0.000000F, 397.669922F, 0.000000F, 399.685547F, 0.000000F, + 404.425781F, 0.000000F, 404.425781F, 0.000000F, 409.177734F, 0.000000F, 411.193359F, 0.000000F, + 416.762695F, 0.000000F, 420.867188F, 0.000000F, 424.286133F, 0.000000F, 428.581055F, 0.000000F, + 432.708984F, 0.000000F, 437.748047F, 0.000000F, 437.748047F, 0.000000F, 443.027344F, 0.000000F, + 447.131836F, 0.000000F, 447.131836F, 0.000000F, 450.550781F, 0.000000F, 454.330078F, 0.000000F, + 459.729492F, 0.000000F, 459.729492F, 0.000000F, 463.148438F, 0.000000F, 468.667969F, 0.000000F, + 473.478516F, 0.000000F, 473.478516F, 0.000000F, 478.207031F, 0.000000F, 481.986328F, 0.000000F, + 486.761719F, 0.000000F, 492.281250F, 0.000000F, 497.320313F, 0.000000F, 500.739258F, 0.000000F, + 505.538086F, 0.000000F, 505.538086F, 0.000000F, 509.786133F, 0.000000F, 513.902344F, 0.000000F, + 515.917969F, 0.000000F, 520.669922F, 0.000000F, 524.917969F, 0.000000F, 524.917969F, 0.000000F, + 529.034180F, 0.000000F, 534.553711F, 0.000000F, 536.569336F, 0.000000F, 541.968750F, 0.000000F, + 541.968750F, 0.000000F, 547.488281F, 0.000000F, 551.592773F, 0.000000F, 555.887695F, 0.000000F, + 560.003906F, 0.000000F, 564.298828F, 0.000000F, 569.698242F, 0.000000F, 573.117188F, 0.000000F, + 576.896484F, 0.000000F, 582.500977F, 0.000000F, 587.241211F, 0.000000F, 590.660156F, 0.000000F, + 594.776367F, 0.000000F, 598.904297F, 0.000000F, 603.943359F, 0.000000F, 608.683594F, 0.000000F, + 608.683594F, 0.000000F }; TestInput testInputs[] = { - {"raghu.ttf", inputText0, 136, devaScriptCode, FALSE}, - {"CODE2000.TTF", inputText1, 252, arabScriptCode, TRUE}, - {"LucidaSansRegular.ttf", inputText2, 252, arabScriptCode, TRUE}, - {"Thonburi.ttf", inputText3, 168, thaiScriptCode, FALSE}, + {"raghu.ttf", fontVersionString0, fontChecksum0, inputText0, 136, devaScriptCode, FALSE}, + {"CODE2000.TTF", fontVersionString1, fontChecksum1, inputText1, 252, arabScriptCode, TRUE}, + {"LucidaSansRegular.ttf", fontVersionString2, fontChecksum2, inputText2, 252, arabScriptCode, TRUE}, + {"angsd___.ttf", fontVersionString3, fontChecksum3, inputText3, 168, thaiScriptCode, FALSE}, }; le_int32 testCount = ARRAY_LENGTH(testInputs); diff --git a/icuSources/test/perf/all/all.dsp b/icuSources/test/perf/all/all.dsp deleted file mode 100644 index 83d50f67..00000000 --- a/icuSources/test/perf/all/all.dsp +++ /dev/null @@ -1,63 +0,0 @@ -# Microsoft Developer Studio Project File - Name="all" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=all - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "all.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "all.mak" CFG="all - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "all - Win32 Release" (based on "Win32 (x86) Generic Project") -!MESSAGE "all - Win32 Debug" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "all - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "all - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "all - Win32 Release" -# Name "all - Win32 Debug" -# End Target -# End Project diff --git a/icuSources/test/perf/charperf/Makefile.in b/icuSources/test/perf/charperf/Makefile.in index dc73dd91..9e1c7516 100644 --- a/icuSources/test/perf/charperf/Makefile.in +++ b/icuSources/test/perf/charperf/Makefile.in @@ -1,5 +1,5 @@ -## Makefile.in for ICU - test/charperf -## Copyright (c) 2001-2003, International Business Machines Corporation and +## Makefile.in for ICU - test/perf/charperf +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -10,11 +10,8 @@ top_builddir = ../../.. include $(top_builddir)/icudefs.mk -## Platform-specific setup -include @platform_make_fragment@ - ## Build directory information -subdir = test/charperf +subdir = test/perf/charperf ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) @@ -22,16 +19,8 @@ CLEANFILES = *~ $(DEPS) ## Target information TARGET = charperf -DEFS = @DEFS@ -CPPFLAGS = @CPPFLAGS@ -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -CFLAGS = @CFLAGS@ -CXXFLAGS = @CXXFLAGS@ -ENABLE_RPATH = @ENABLE_RPATH@ -ifeq ($(ENABLE_RPATH),YES) -RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir) -endif -LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS) -LIBS = $(LIBICUUC) $(LIBICUTOOLUTIL) @LIBS@ @LIB_M@ +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = charperf.o diff --git a/icuSources/test/perf/charperf/charperf.cpp b/icuSources/test/perf/charperf/charperf.cpp index bde84695..c964625b 100644 --- a/icuSources/test/perf/charperf/charperf.cpp +++ b/icuSources/test/perf/charperf/charperf.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (C) 2002-2003 IBM, Inc. All Rights Reserved. + * Copyright (C) 2002-2006 IBM, Inc. All Rights Reserved. * ********************************************************************/ /***************************************************************************** @@ -23,9 +23,9 @@ #include "uoptions.h" UOption options[] = { - UOPTION_DEF("min", 'n', UOPT_REQUIRES_ARG), - UOPTION_DEF("min", 'x', UOPT_REQUIRES_ARG), - }; + UOPTION_DEF("min", 'n', UOPT_REQUIRES_ARG), + UOPTION_DEF("min", 'x', UOPT_REQUIRES_ARG), +}; int MIN_OPTION_ = 0; int MAX_OPTION_ = 1; @@ -33,41 +33,41 @@ int main(int argc, const char *argv[]) { UErrorCode status = U_ZERO_ERROR; CharPerformanceTest test(argc, argv, status); - if (U_FAILURE(status)){ + if (U_FAILURE(status)){ return status; } if (test.run() == FALSE){ fprintf(stderr, "FAILED: Tests could not be run please check the " - "arguments.\n"); + "arguments.\n"); return -1; } return 0; } CharPerformanceTest::CharPerformanceTest(int32_t argc, const char *argv[], - UErrorCode &status) - : UPerfTest(argc, argv, status) + UErrorCode &status) + : UPerfTest(argc, argv, status) { - if (status== U_ILLEGAL_ARGUMENT_ERROR){ - fprintf(stderr,gUsageString, "charperf"); - return; + if (status== U_ILLEGAL_ARGUMENT_ERROR){ + fprintf(stderr,gUsageString, "charperf"); + return; } if (U_FAILURE(status)){ fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", - u_errorName(status)); + u_errorName(status)); return; } - if (_remainingArgc < 0) { - // that means there are some -names not matched in the super class - // first tag is always skipped in u_parseArgs - int size = - _remainingArgc; - argv += argc - size; - argc = size; - _remainingArgc = u_parseArgs(argc, (char**)argv, - (int32_t)(sizeof(options)/sizeof(options[0])), options); - } - MIN_ = 0; + if (_remainingArgc < 0) { + // that means there are some -names not matched in the super class + // first tag is always skipped in u_parseArgs + int size = - _remainingArgc; + argv += argc - size; + argc = size; + _remainingArgc = u_parseArgs(argc, (char**)argv, + (int32_t)(sizeof(options)/sizeof(options[0])), options); + } + MIN_ = 0; if (sizeof(wchar_t) > 2) { // for stdlibs like glibc that supports 32 bits wchar // we test for the whole unicode character set by default @@ -77,12 +77,12 @@ CharPerformanceTest::CharPerformanceTest(int32_t argc, const char *argv[], MAX_ = 0xffff; } printf("MAX_ size will be 0x%x\n", MAX_); - if (options[MIN_OPTION_].doesOccur) { - MIN_ = atoi(options[MIN_OPTION_].value); - } - if (options[MAX_OPTION_].doesOccur) { - MAX_ = atoi(options[MAX_OPTION_].value); - } + if (options[MIN_OPTION_].doesOccur) { + MIN_ = atoi(options[MIN_OPTION_].value); + } + if (options[MAX_OPTION_].doesOccur) { + MAX_ = atoi(options[MAX_OPTION_].value); + } } CharPerformanceTest::~CharPerformanceTest() @@ -90,32 +90,32 @@ CharPerformanceTest::~CharPerformanceTest() } UPerfFunction* CharPerformanceTest::runIndexedTest(int32_t index, UBool exec, - const char *&name, - char* par) + const char *&name, + char* par) { switch (index) { TESTCASE(0, TestIsAlpha); - TESTCASE(1, TestIsUpper); - TESTCASE(2, TestIsLower); - TESTCASE(3, TestIsDigit); - TESTCASE(4, TestIsSpace); - TESTCASE(5, TestIsAlphaNumeric); - TESTCASE(6, TestIsPrint); - TESTCASE(7, TestIsControl); - TESTCASE(8, TestToLower); - TESTCASE(9, TestToUpper); - TESTCASE(10, TestIsWhiteSpace); - TESTCASE(11, TestStdLibIsAlpha); - TESTCASE(12, TestStdLibIsUpper); - TESTCASE(13, TestStdLibIsLower); - TESTCASE(14, TestStdLibIsDigit); - TESTCASE(15, TestStdLibIsSpace); - TESTCASE(16, TestStdLibIsAlphaNumeric); - TESTCASE(17, TestStdLibIsPrint); - TESTCASE(18, TestStdLibIsControl); - TESTCASE(19, TestStdLibToLower); - TESTCASE(20, TestStdLibToUpper); - TESTCASE(21, TestStdLibIsWhiteSpace); + TESTCASE(1, TestIsUpper); + TESTCASE(2, TestIsLower); + TESTCASE(3, TestIsDigit); + TESTCASE(4, TestIsSpace); + TESTCASE(5, TestIsAlphaNumeric); + TESTCASE(6, TestIsPrint); + TESTCASE(7, TestIsControl); + TESTCASE(8, TestToLower); + TESTCASE(9, TestToUpper); + TESTCASE(10, TestIsWhiteSpace); + TESTCASE(11, TestStdLibIsAlpha); + TESTCASE(12, TestStdLibIsUpper); + TESTCASE(13, TestStdLibIsLower); + TESTCASE(14, TestStdLibIsDigit); + TESTCASE(15, TestStdLibIsSpace); + TESTCASE(16, TestStdLibIsAlphaNumeric); + TESTCASE(17, TestStdLibIsPrint); + TESTCASE(18, TestStdLibIsControl); + TESTCASE(19, TestStdLibToLower); + TESTCASE(20, TestStdLibToUpper); + TESTCASE(21, TestStdLibIsWhiteSpace); default: name = ""; return NULL; @@ -125,131 +125,131 @@ UPerfFunction* CharPerformanceTest::runIndexedTest(int32_t index, UBool exec, UPerfFunction* CharPerformanceTest::TestIsAlpha() { - return new CharPerfFunction(isAlpha, MIN_, MAX_); + return new CharPerfFunction(isAlpha, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsUpper() { - return new CharPerfFunction(isUpper, MIN_, MAX_); + return new CharPerfFunction(isUpper, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsLower() { - return new CharPerfFunction(isLower, MIN_, MAX_); + return new CharPerfFunction(isLower, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsDigit() { - return new CharPerfFunction(isDigit, MIN_, MAX_); + return new CharPerfFunction(isDigit, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsSpace() { - return new CharPerfFunction(isSpace, MIN_, MAX_); + return new CharPerfFunction(isSpace, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsAlphaNumeric() { - return new CharPerfFunction(isAlphaNumeric, MIN_, MAX_); + return new CharPerfFunction(isAlphaNumeric, MIN_, MAX_); } /** - * This test may be different since c lib has a type PUNCT and it is printable. - * iswgraph is not used for testing since it is a subset of iswprint with the - * exception of returning true for white spaces. no match found in icu4c. - */ +* This test may be different since c lib has a type PUNCT and it is printable. +* iswgraph is not used for testing since it is a subset of iswprint with the +* exception of returning true for white spaces. no match found in icu4c. +*/ UPerfFunction* CharPerformanceTest::TestIsPrint() { - return new CharPerfFunction(isPrint, MIN_, MAX_); + return new CharPerfFunction(isPrint, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsControl() { - return new CharPerfFunction(isControl, MIN_, MAX_); + return new CharPerfFunction(isControl, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestToLower() { - return new CharPerfFunction(toLower, MIN_, MAX_); + return new CharPerfFunction(toLower, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestToUpper() { - return new CharPerfFunction(toUpper, MIN_, MAX_); + return new CharPerfFunction(toUpper, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestIsWhiteSpace() { - return new CharPerfFunction(isWhiteSpace, MIN_, MAX_); + return new CharPerfFunction(isWhiteSpace, MIN_, MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsAlpha() { - return new StdLibCharPerfFunction(StdLibIsAlpha, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsAlpha, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsUpper() { - return new StdLibCharPerfFunction(StdLibIsUpper, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsUpper, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsLower() { - return new StdLibCharPerfFunction(StdLibIsLower, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsLower, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsDigit() { - return new StdLibCharPerfFunction(StdLibIsDigit, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsDigit, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsSpace() { - return new StdLibCharPerfFunction(StdLibIsSpace, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsSpace, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsAlphaNumeric() { - return new StdLibCharPerfFunction(StdLibIsAlphaNumeric, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsAlphaNumeric, (wchar_t)MIN_, + (wchar_t)MAX_); } /** - * This test may be different since c lib has a type PUNCT and it is printable. - * iswgraph is not used for testing since it is a subset of iswprint with the - * exception of returning true for white spaces. no match found in icu4c. - */ +* This test may be different since c lib has a type PUNCT and it is printable. +* iswgraph is not used for testing since it is a subset of iswprint with the +* exception of returning true for white spaces. no match found in icu4c. +*/ UPerfFunction* CharPerformanceTest::TestStdLibIsPrint() { - return new StdLibCharPerfFunction(StdLibIsPrint, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsPrint, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsControl() { - return new StdLibCharPerfFunction(StdLibIsControl, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsControl, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibToLower() { - return new StdLibCharPerfFunction(StdLibToLower, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibToLower, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibToUpper() { - return new StdLibCharPerfFunction(StdLibToUpper, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibToUpper, (wchar_t)MIN_, + (wchar_t)MAX_); } UPerfFunction* CharPerformanceTest::TestStdLibIsWhiteSpace() { - return new StdLibCharPerfFunction(StdLibIsWhiteSpace, (wchar_t)MIN_, - (wchar_t)MAX_); + return new StdLibCharPerfFunction(StdLibIsWhiteSpace, (wchar_t)MIN_, + (wchar_t)MAX_); } diff --git a/icuSources/test/perf/charperf/charperf.dsp b/icuSources/test/perf/charperf/charperf.dsp deleted file mode 100644 index 262eeee4..00000000 --- a/icuSources/test/perf/charperf/charperf.dsp +++ /dev/null @@ -1,109 +0,0 @@ -# Microsoft Developer Studio Project File - Name="charperf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=charperf - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "charperf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "charperf.mak" CFG="charperf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "charperf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "charperf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "charperf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\include" /I "..\..\..\tools\toolutil" /I "..\..\..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# SUBTRACT CPP /Fr -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib winmm.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib" - -!ELSEIF "$(CFG)" == "charperf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\include" /I "..\..\..\tools\toolutil" /I "..\..\..\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\\" - -!ENDIF - -# Begin Target - -# Name "charperf - Win32 Release" -# Name "charperf - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\charperf.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\charperf.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/perf/charperf/charperf.h b/icuSources/test/perf/charperf/charperf.h index e144d12b..e23785f8 100644 --- a/icuSources/test/perf/charperf/charperf.h +++ b/icuSources/test/perf/charperf/charperf.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2003, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -8,8 +8,9 @@ #ifndef _CHARPERF_H #define _CHARPERF_H -#include "uperf.h" #include "unicode/uchar.h" + +#include "unicode/uperf.h" #include <stdlib.h> #include <stdio.h> #include <wchar.h> @@ -21,98 +22,98 @@ typedef void (*StdLibCharPerfFn)(wchar_t ch); class CharPerfFunction : public UPerfFunction { public: - virtual void call(UErrorCode* status) - { - for (UChar32 i = MIN_; i < MAX_; i ++) { - (*m_fn_)(i); - } - } - - virtual long getOperationsPerIteration() - { - return MAX_ - MIN_; - } - CharPerfFunction(CharPerfFn func, UChar32 min, UChar32 max) - { - m_fn_ = func; - MIN_ = min; - MAX_ = max; - } + virtual void call(UErrorCode* status) + { + for (UChar32 i = MIN_; i < MAX_; i ++) { + (*m_fn_)(i); + } + } + + virtual long getOperationsPerIteration() + { + return MAX_ - MIN_; + } + CharPerfFunction(CharPerfFn func, UChar32 min, UChar32 max) + { + m_fn_ = func; + MIN_ = min; + MAX_ = max; + } private: - CharPerfFn m_fn_; - UChar32 MIN_; - UChar32 MAX_; + CharPerfFn m_fn_; + UChar32 MIN_; + UChar32 MAX_; }; class StdLibCharPerfFunction : public UPerfFunction { public: - virtual void call(UErrorCode* status) - { - // note wchar_t is unsigned, it will revert to 0 once it reaches - // 65535 - for (wchar_t i = MIN_; i < MAX_; i ++) { - (*m_fn_)(i); - } - } - - virtual long getOperationsPerIteration() - { - return MAX_ - MIN_; - } - - StdLibCharPerfFunction(StdLibCharPerfFn func, wchar_t min, wchar_t max) - { - m_fn_ = func; - MIN_ = min; - MAX_ = max; - } - - ~StdLibCharPerfFunction() - { - } + virtual void call(UErrorCode* status) + { + // note wchar_t is unsigned, it will revert to 0 once it reaches + // 65535 + for (wchar_t i = MIN_; i < MAX_; i ++) { + (*m_fn_)(i); + } + } + + virtual long getOperationsPerIteration() + { + return MAX_ - MIN_; + } + + StdLibCharPerfFunction(StdLibCharPerfFn func, wchar_t min, wchar_t max) + { + m_fn_ = func; + MIN_ = min; + MAX_ = max; + } + + ~StdLibCharPerfFunction() + { + } private: - StdLibCharPerfFn m_fn_; - wchar_t MIN_; - wchar_t MAX_; + StdLibCharPerfFn m_fn_; + wchar_t MIN_; + wchar_t MAX_; }; class CharPerformanceTest : public UPerfTest { public: - CharPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); - ~CharPerformanceTest(); - virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, - const char *&name, - char *par = NULL); - UPerfFunction* TestIsAlpha(); - UPerfFunction* TestIsUpper(); - UPerfFunction* TestIsLower(); - UPerfFunction* TestIsDigit(); - UPerfFunction* TestIsSpace(); - UPerfFunction* TestIsAlphaNumeric(); - UPerfFunction* TestIsPrint(); - UPerfFunction* TestIsControl(); - UPerfFunction* TestToLower(); - UPerfFunction* TestToUpper(); - UPerfFunction* TestIsWhiteSpace(); - UPerfFunction* TestStdLibIsAlpha(); - UPerfFunction* TestStdLibIsUpper(); - UPerfFunction* TestStdLibIsLower(); - UPerfFunction* TestStdLibIsDigit(); - UPerfFunction* TestStdLibIsSpace(); - UPerfFunction* TestStdLibIsAlphaNumeric(); - UPerfFunction* TestStdLibIsPrint(); - UPerfFunction* TestStdLibIsControl(); - UPerfFunction* TestStdLibToLower(); - UPerfFunction* TestStdLibToUpper(); - UPerfFunction* TestStdLibIsWhiteSpace(); + CharPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); + ~CharPerformanceTest(); + virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, + const char *&name, + char *par = NULL); + UPerfFunction* TestIsAlpha(); + UPerfFunction* TestIsUpper(); + UPerfFunction* TestIsLower(); + UPerfFunction* TestIsDigit(); + UPerfFunction* TestIsSpace(); + UPerfFunction* TestIsAlphaNumeric(); + UPerfFunction* TestIsPrint(); + UPerfFunction* TestIsControl(); + UPerfFunction* TestToLower(); + UPerfFunction* TestToUpper(); + UPerfFunction* TestIsWhiteSpace(); + UPerfFunction* TestStdLibIsAlpha(); + UPerfFunction* TestStdLibIsUpper(); + UPerfFunction* TestStdLibIsLower(); + UPerfFunction* TestStdLibIsDigit(); + UPerfFunction* TestStdLibIsSpace(); + UPerfFunction* TestStdLibIsAlphaNumeric(); + UPerfFunction* TestStdLibIsPrint(); + UPerfFunction* TestStdLibIsControl(); + UPerfFunction* TestStdLibToLower(); + UPerfFunction* TestStdLibToUpper(); + UPerfFunction* TestStdLibIsWhiteSpace(); private: - UChar32 MIN_; - UChar32 MAX_; + UChar32 MIN_; + UChar32 MAX_; }; inline void isAlpha(UChar32 ch) @@ -122,117 +123,117 @@ inline void isAlpha(UChar32 ch) inline void isUpper(UChar32 ch) { - u_isupper(ch); + u_isupper(ch); } inline void isLower(UChar32 ch) { - u_islower(ch); + u_islower(ch); } inline void isDigit(UChar32 ch) { - u_isdigit(ch); + u_isdigit(ch); } inline void isSpace(UChar32 ch) { - u_isspace(ch); + u_isspace(ch); } inline void isAlphaNumeric(UChar32 ch) { - u_isalnum(ch); + u_isalnum(ch); } /** - * This test may be different since c lib has a type PUNCT and it is printable. - * iswgraph is not used for testing since it is a subset of iswprint with the - * exception of returning true for white spaces. no match found in icu4c. - */ +* This test may be different since c lib has a type PUNCT and it is printable. +* iswgraph is not used for testing since it is a subset of iswprint with the +* exception of returning true for white spaces. no match found in icu4c. +*/ inline void isPrint(UChar32 ch) { - u_isprint(ch); + u_isprint(ch); } inline void isControl(UChar32 ch) { - u_iscntrl(ch); + u_iscntrl(ch); } inline void toLower(UChar32 ch) { - u_tolower(ch); + u_tolower(ch); } inline void toUpper(UChar32 ch) { - u_toupper(ch); + u_toupper(ch); } inline void isWhiteSpace(UChar32 ch) { - u_isWhitespace(ch); + u_isWhitespace(ch); } inline void StdLibIsAlpha(wchar_t ch) { - iswalpha(ch); + iswalpha(ch); } inline void StdLibIsUpper(wchar_t ch) { - iswupper(ch); + iswupper(ch); } inline void StdLibIsLower(wchar_t ch) { - iswlower(ch); + iswlower(ch); } inline void StdLibIsDigit(wchar_t ch) { - iswdigit(ch); + iswdigit(ch); } inline void StdLibIsSpace(wchar_t ch) { - iswspace(ch); + iswspace(ch); } inline void StdLibIsAlphaNumeric(wchar_t ch) { - iswalnum(ch); + iswalnum(ch); } /** - * This test may be different since c lib has a type PUNCT and it is printable. - * iswgraph is not used for testing since it is a subset of iswprint with the - * exception of returning true for white spaces. no match found in icu4c. - */ +* This test may be different since c lib has a type PUNCT and it is printable. +* iswgraph is not used for testing since it is a subset of iswprint with the +* exception of returning true for white spaces. no match found in icu4c. +*/ inline void StdLibIsPrint(wchar_t ch) { - iswprint(ch); + iswprint(ch); } inline void StdLibIsControl(wchar_t ch) { - iswcntrl(ch); + iswcntrl(ch); } inline void StdLibToLower(wchar_t ch) { - towlower(ch); + towlower(ch); } inline void StdLibToUpper(wchar_t ch) { - towupper(ch); + towupper(ch); } inline void StdLibIsWhiteSpace(wchar_t ch) { - iswspace(ch); + iswspace(ch); } #endif // CHARPERF_H diff --git a/icuSources/test/perf/charperf/charperf.vcproj b/icuSources/test/perf/charperf/charperf.vcproj new file mode 100644 index 00000000..63b7b78a --- /dev/null +++ b/icuSources/test/perf/charperf/charperf.vcproj @@ -0,0 +1,181 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="charperf" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Debug/charperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib winmm.lib" + OutputFile=".\Debug/charperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/charperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/charperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Release/charperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib" + OutputFile=".\Release/charperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib" + ProgramDatabaseFile=".\Release/charperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/charperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="charperf.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + BasicRuntimeChecks="3" + BrowseInformation="1"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions=""/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath="charperf.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/perf/collperf/CollPerf.pl b/icuSources/test/perf/collperf/CollPerf.pl new file mode 100644 index 00000000..78c69f35 --- /dev/null +++ b/icuSources/test/perf/collperf/CollPerf.pl @@ -0,0 +1,82 @@ +#!/usr/bin/perl -w +# ******************************************************************** +# * COPYRIGHT: +# * Copyright (c) 2005, International Business Machines Corporation and +# * others. All Rights Reserved. +# ******************************************************************** + +use strict; + +use lib '../perldriver'; + +use PerfFramework; + + +my $options = { + "title"=>"Collation performance: ICU,POSIX,and Win", + "headers"=>"ICU_POSIX_WIN", + "operationIs"=>"unicode String", + "passes"=>"1", + "time"=>"2", + #"outputType"=>"HTML", + "dataDir"=>"../data", + "outputDir"=>"../results" + }; + +# programs +# tests will be done for all the programs. Results will be stored and connected +my $p = "debug/collperf.exe "; + +my $tests = { + "Key Gen ICU null", ["$p TestIcu_KeyGen_null"], + "Key Gen ICU len", ["$p TestIcu_KeyGen_len"], + "Key Gen POSIX", ["$p TestPosix_KeyGen_null"], + "Key Gen Win", ["$p TestWin_KeyGen_null"], + "Iteration icu forward null", ["$p TestIcu_ForwardIter_null"], + "Iteration icu forward len", ["$p TestIcu_ForwardIter_len"], + "Iteration icu backward null", ["$p TestIcu_BackwardIter_null"], + "Iteration icu backward len", ["$p TestIcu_BackwardIter_len"], + "Iteration/all icu forward null", ["$p TestIcu_ForwardIter_all_null"], + "Iteration/all icu forward len", ["$p TestIcu_ForwardIter_all_len"], + "Iteration/all icu backward null", ["$p TestIcu_BackwardIter_all_null"], + "Iteration/all icu backward len", ["$p TestIcu_BackwardIter_all_len"], + "qsort icu strcoll null", ["$p TestIcu_qsort_strcoll_null"], + "qsort icu strcoll len", ["$p TestIcu_qsort_strcoll_len"], + "qsort icu use key", ["$p TestIcu_qsort_usekey"], + "qsort posix strcoll null", ["$p TestPosix_qsort_strcoll_null"], + "qsort posix use key", ["$p TestPosix_qsort_usekey"], + "qsort win CompareStringW null", ["$p TestWin_qsort_CompareStringW_null"], + "qsort win CompareStringW len", ["$p TestWin_qsort_CompareStringW_len"], + "qsort win use key", ["$p TestWin_qsort_usekey"], + "Binary Search icu strcoll null", ["$p TestIcu_BinarySearch_strcoll_null"], + "Binary Search icu strcoll len", ["$p TestIcu_BinarySearch_strcoll_len"], + "Binary Search icu use key", ["$p TestIcu_BinarySearch_usekey"], + "Binary Search icu u_strcmp", ["$p TestIcu_BinarySearch_strcmp"], + "Binary Search icu cmpCPO", ["$p TestIcu_BinarySearch_cmpCPO"], + "Binary Search posix strcoll null", ["$p TestPosix_BinarySearch_strcoll_null"], + "Binary Search posix use key", ["$p TestPosix_BinarySearch_usekey"], + "Binary Search win CompareStringW null", ["$p TestWin_BinarySearch_CompareStringW_null"], + "Binary Search win CompareStringW len", ["$p TestWin_BinarySearch_CompareStringW_len"], + "Binary Search win use key", ["$p TestWin_BinarySearch_usekey"], + "Binary Search win wcscmp", ["$p TestWin_BinarySearch_wcscmp"], + }; + +my $dataFiles = { + "", + [ + "TestNames_Asian.txt", +# "TestNames_Chinese.txt", +# "TestNames_Japanese.txt", +# "TestNames_Japanese_h.txt", +# "TestNames_Japanese_k.txt", +# "TestNames_Korean.txt", +# "TestNames_Latin.txt", +# "Testnames_Russian.txt", +# "TestNames_SerbianSH.txt", +# "TestNames_SerbianSR.txt", +# "TestNames_Simplified_Chinese.txt", +# "TestNames_Thai.txt" + ] + }; + +runTests($options, $tests, $dataFiles); diff --git a/icuSources/test/collperf/Makefile.in b/icuSources/test/perf/collperf/Makefile.in similarity index 70% rename from icuSources/test/collperf/Makefile.in rename to icuSources/test/perf/collperf/Makefile.in index bca32116..46e509a1 100644 --- a/icuSources/test/collperf/Makefile.in +++ b/icuSources/test/perf/collperf/Makefile.in @@ -1,20 +1,17 @@ -## Makefile.in for ICU - test/collperf -## Copyright (c) 2001, International Business Machines Corporation and +## Makefile.in for ICU - test/perf/collperf +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ -top_builddir = ../.. +top_builddir = ../../.. include $(top_builddir)/icudefs.mk -## Platform-specific setup -include @platform_make_fragment@ - ## Build directory information -subdir = test/collperf +subdir = test/perf/collperf ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) @@ -22,16 +19,8 @@ CLEANFILES = *~ $(DEPS) ## Target information TARGET = collperf -DEFS = @DEFS@ -CPPFLAGS = @CPPFLAGS@ -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -CFLAGS = @CFLAGS@ -CXXFLAGS = @CXXFLAGS@ -ENABLE_RPATH = @ENABLE_RPATH@ -ifeq ($(ENABLE_RPATH),YES) -RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir) -endif -LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS) -LIBS = $(LIBICUI18N) $(LIBICUUC) @LIBS@ @LIB_M@ +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = collperf.o diff --git a/icuSources/test/perf/collperf/collperf.cpp b/icuSources/test/perf/collperf/collperf.cpp new file mode 100644 index 00000000..6dd508ba --- /dev/null +++ b/icuSources/test/perf/collperf/collperf.cpp @@ -0,0 +1,879 @@ +/******************************************************************** +* COPYRIGHT: +* Copyright (C) 2001-2006 IBM, Inc. All Rights Reserved. +* +********************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <locale.h> +#include <limits.h> +#include <string.h> +#include "unicode/uperf.h" +#include "uoptions.h" +#include "unicode/coll.h" +#include <unicode/ucoleitr.h> + + + +/* To store an array of string<UNIT> in continue space. +Since string<UNIT> itself is treated as an array of UNIT, this +class will ease our memory management for an array of string<UNIT>. +*/ + +//template<typename UNIT> +#define COMPATCT_ARRAY(CompactArrays, UNIT) \ +struct CompactArrays{\ + CompactArrays(const CompactArrays & );\ + CompactArrays & operator=(const CompactArrays & );\ + int32_t count;/*total number of the strings*/ \ + int32_t * index;/*relative offset in data*/ \ + UNIT * data; /*the real space to hold strings*/ \ + \ + ~CompactArrays(){free(index);free(data);} \ + CompactArrays():data(NULL), index(NULL), count(0){ \ + index = (int32_t *) realloc(index, sizeof(int32_t)); \ + index[0] = 0; \ + } \ + void append_one(int32_t theLen){ /*include terminal NULL*/ \ + count++; \ + index = (int32_t *) realloc(index, sizeof(int32_t) * (count + 1)); \ + index[count] = index[count - 1] + theLen; \ + data = (UNIT *) realloc(data, sizeof(UNIT) * index[count]); \ + } \ + UNIT * last(){return data + index[count - 1];} \ + UNIT * dataOf(int32_t i){return data + index[i];} \ + int32_t lengthOf(int i){return index[i+1] - index[i] - 1; } /*exclude terminating NULL*/ \ +}; + +//typedef CompactArrays<UChar> CA_uchar; +//typedef CompactArrays<char> CA_char; +//typedef CompactArrays<uint8_t> CA_uint8; +//typedef CompactArrays<WCHAR> CA_win_wchar; + +COMPATCT_ARRAY(CA_uchar, UChar) +COMPATCT_ARRAY(CA_char, char) +COMPATCT_ARRAY(CA_uint8, uint8_t) +COMPATCT_ARRAY(CA_win_wchar, WCHAR) + + +struct DataIndex { + static DWORD win_langid; // for qsort callback function + static UCollator * col; // for qsort callback function + uint8_t * icu_key; + UChar * icu_data; + int32_t icu_data_len; + char* posix_key; + char* posix_data; + int32_t posix_data_len; + char* win_key; + WCHAR * win_data; + int32_t win_data_len; +}; +DWORD DataIndex::win_langid; +UCollator * DataIndex::col; + + + +class CmdKeyGen : public UPerfFunction { + typedef void (CmdKeyGen::* Func)(int32_t); + enum{MAX_KEY_LENGTH = 5000}; + UCollator * col; + DWORD win_langid; + int32_t count; + DataIndex * data; + Func fn; + + union { // to save sapce + uint8_t icu_key[MAX_KEY_LENGTH]; + char posix_key[MAX_KEY_LENGTH]; + WCHAR win_key[MAX_KEY_LENGTH]; + }; +public: + CmdKeyGen(UErrorCode, UCollator * col,DWORD win_langid, int32_t count, DataIndex * data,Func fn,int32_t) + :col(col),win_langid(win_langid), count(count), data(data), fn(fn){} + + virtual long getOperationsPerIteration(){return count;} + + virtual void call(UErrorCode* status){ + for(int32_t i = 0; i< count; i++){ + (this->*fn)(i); + } + } + + void icu_key_null(int32_t i){ + ucol_getSortKey(col, data[i].icu_data, -1, icu_key, MAX_KEY_LENGTH); + } + + void icu_key_len(int32_t i){ + ucol_getSortKey(col, data[i].icu_data, data[i].icu_data_len, icu_key, MAX_KEY_LENGTH); + } + + // pre-generated in CollPerfTest::prepareData(), need not to check error here + void win_key_null(int32_t i){ + //LCMAP_SORTsk 0x00000400 // WC sort sk (normalize) + LCMapStringW(win_langid, LCMAP_SORTKEY, data[i].win_data, -1, win_key, MAX_KEY_LENGTH); + } + + void win_key_len(int32_t i){ + LCMapStringW(win_langid, LCMAP_SORTKEY, data[i].win_data, data[i].win_data_len, win_key, MAX_KEY_LENGTH); + } + + void posix_key_null(int32_t i){ + strxfrm(posix_key, data[i].posix_data, MAX_KEY_LENGTH); + } +}; + + +class CmdIter : public UPerfFunction { + typedef void (CmdIter::* Func)(UErrorCode* , int32_t ); + int32_t count; + CA_uchar * data; + Func fn; + UCollationElements *iter; + int32_t exec_count; +public: + CmdIter(UErrorCode & status, UCollator * col, int32_t count, CA_uchar *data, Func fn, int32_t,int32_t) + :count(count), data(data), fn(fn){ + exec_count = 0; + UChar dummytext[] = {0, 0}; + iter = ucol_openElements(col, NULL, 0, &status); + ucol_setText(iter, dummytext, 1, &status); + } + ~CmdIter(){ + ucol_closeElements(iter); + } + + virtual long getOperationsPerIteration(){return exec_count ? exec_count : 1;} + + virtual void call(UErrorCode* status){ + exec_count = 0; + for(int32_t i = 0; i< count; i++){ + (this->*fn)(status, i); + } + } + + void icu_forward_null(UErrorCode* status, int32_t i){ + ucol_setText(iter, data->dataOf(i), -1, status); + while (ucol_next(iter, status) != UCOL_NULLORDER) exec_count++; + } + + void icu_forward_len(UErrorCode* status, int32_t i){ + ucol_setText(iter, data->dataOf(i), data->lengthOf(i) , status); + while (ucol_next(iter, status) != UCOL_NULLORDER) exec_count++; + } + + void icu_backward_null(UErrorCode* status, int32_t i){ + ucol_setText(iter, data->dataOf(i), -1, status); + while (ucol_previous(iter, status) != UCOL_NULLORDER) exec_count++; + } + + void icu_backward_len(UErrorCode* status, int32_t i){ + ucol_setText(iter, data->dataOf(i), data->lengthOf(i) , status); + while (ucol_previous(iter, status) != UCOL_NULLORDER) exec_count++; + } +}; + +class CmdIterAll : public UPerfFunction { + typedef void (CmdIterAll::* Func)(UErrorCode* status); + int32_t count; + UChar * data; + Func fn; + UCollationElements *iter; + int32_t exec_count; + +public: + enum CALL {forward_null, forward_len, backward_null, backward_len}; + + ~CmdIterAll(){ + ucol_closeElements(iter); + } + CmdIterAll(UErrorCode & status, UCollator * col, int32_t count, UChar * data, CALL call,int32_t,int32_t) + :count(count),data(data){ + exec_count = 0; + if (call == forward_null || call == backward_null) { + iter = ucol_openElements(col, data, -1, &status); + } else { + iter = ucol_openElements(col, data, count, &status); + } + + if (call == forward_null || call == forward_len){ + fn = icu_forward_all; + } else { + fn = icu_backward_all; + } + } + virtual long getOperationsPerIteration(){return exec_count ? exec_count : 1;} + + virtual void call(UErrorCode* status){ + (this->*fn)(status); + } + + void icu_forward_all(UErrorCode* status){ + int strlen = count - 5; + int count5 = 5; + int strindex = 0; + ucol_setOffset(iter, strindex, status); + while (TRUE) { + if (ucol_next(iter, status) == UCOL_NULLORDER) { + break; + } + exec_count++; + count5 --; + if (count5 == 0) { + strindex += 10; + if (strindex > strlen) { + break; + } + ucol_setOffset(iter, strindex, status); + count5 = 5; + } + } + } + + void icu_backward_all(UErrorCode* status){ + int strlen = count; + int count5 = 5; + int strindex = 5; + ucol_setOffset(iter, strindex, status); + while (TRUE) { + if (ucol_previous(iter, status) == UCOL_NULLORDER) { + break; + } + exec_count++; + count5 --; + if (count5 == 0) { + strindex += 10; + if (strindex > strlen) { + break; + } + ucol_setOffset(iter, strindex, status); + count5 = 5; + } + } + } + +}; + +struct CmdQsort : public UPerfFunction{ + + static int q_random(const void * a, const void * b){ + uint8_t * key_a = ((DataIndex *)a)->icu_key; + uint8_t * key_b = ((DataIndex *)b)->icu_key; + + int val_a = 0; + int val_b = 0; + while (*key_a != 0) {val_a += val_a*37 + *key_a++;} + while (*key_b != 0) {val_b += val_b*37 + *key_b++;} + return val_a - val_b; + } + +#define QCAST() \ + DataIndex * da = (DataIndex *) a; \ + DataIndex * db = (DataIndex *) b; \ + ++exec_count + + static int icu_strcoll_null(const void *a, const void *b){ + QCAST(); + return ucol_strcoll(da->col, da->icu_data, -1, db->icu_data, -1) - UCOL_EQUAL; + } + + static int icu_strcoll_len(const void *a, const void *b){ + QCAST(); + return ucol_strcoll(da->col, da->icu_data, da->icu_data_len, db->icu_data, db->icu_data_len) - UCOL_EQUAL; + } + + static int icu_cmpkey (const void *a, const void *b){ + QCAST(); + return strcmp((char *) da->icu_key, (char *) db->icu_key); + } + + static int win_cmp_null(const void *a, const void *b) { + QCAST(); + //CSTR_LESS_THAN 1 + //CSTR_EQUAL 2 + //CSTR_GREATER_THAN 3 + int t = CompareStringW(da->win_langid, 0, da->win_data, -1, db->win_data, -1); + if (t == 0){ + fprintf(stderr, "CompareStringW error, error number %x\n", GetLastError()); + exit(-1); + } else{ + return t - CSTR_EQUAL; + } + } + + static int win_cmp_len(const void *a, const void *b) { + QCAST(); + int t = CompareStringW(da->win_langid, 0, da->win_data, da->win_data_len, db->win_data, db->win_data_len); + if (t == 0){ + fprintf(stderr, "CompareStringW error, error number %x\n", GetLastError()); + exit(-1); + } else{ + return t - CSTR_EQUAL; + } + } + +#define QFUNC(name, func, data) \ + static int name (const void *a, const void *b){ \ + QCAST(); \ + return func(da->data, db->data); \ + } + + QFUNC(posix_strcoll_null, strcoll, posix_data) + QFUNC(posix_cmpkey, strcmp, posix_key) + QFUNC(win_cmpkey, strcmp, win_key) + QFUNC(win_wcscmp, wcscmp, win_data) + QFUNC(icu_strcmp, u_strcmp, icu_data) + QFUNC(icu_cmpcpo, u_strcmpCodePointOrder, icu_data) + +private: + static int32_t exec_count; // potential muilt-thread problem + + typedef int (* Func)(const void *, const void *); + + Func fn; + void * base; //Start of target array. + int32_t num; //Array size in elements. + int32_t width; //Element size in bytes. + + void * backup; //copy source of base +public: + CmdQsort(UErrorCode & status,void *theBase, int32_t num, int32_t width, Func fn, int32_t,int32_t) + :backup(theBase),num(num),width(width),fn(fn){ + base = malloc(num * width); + time_empty(100, &status); // warm memory/cache + } + + ~CmdQsort(){ + free(base); + } + + void empty_call(){ + exec_count = 0; + memcpy(base, backup, num * width); + } + + double time_empty(int32_t n, UErrorCode* status) { + UTimer start, stop; + utimer_getTime(&start); + while (n-- > 0) { + empty_call(); + } + utimer_getTime(&stop); + return utimer_getDeltaSeconds(&start,&stop); // ms + } + + virtual void call(UErrorCode* status){ + exec_count = 0; + memcpy(base, backup, num * width); + qsort(base, num, width, fn); + } + virtual double time(int32_t n, UErrorCode* status) { + double t1 = time_empty(n,status); + double t2 = UPerfFunction::time(n, status); + return t2-t1;// < 0 ? t2 : t2-t1; + } + + virtual long getOperationsPerIteration(){ return exec_count?exec_count:1;} +}; +int32_t CmdQsort::exec_count; + + +class CmdBinSearch : public UPerfFunction{ +public: + typedef int (CmdBinSearch::* Func)(int, int); + + UCollator * col; + DWORD win_langid; + int32_t count; + DataIndex * rnd; + DataIndex * ord; + Func fn; + int32_t exec_count; + + CmdBinSearch(UErrorCode, UCollator * col,DWORD win_langid,int32_t count,DataIndex * rnd,DataIndex * ord,Func fn) + :col(col),win_langid(win_langid), count(count), rnd(rnd), ord(ord), fn(fn),exec_count(0){} + + + virtual void call(UErrorCode* status){ + exec_count = 0; + for(int32_t i = 0; i< count; i++){ // search all data + binary_search(i); + } + } + virtual long getOperationsPerIteration(){ return exec_count?exec_count:1;} + + void binary_search(int32_t random) { + int low = 0; + int high = count - 1; + int guess; + int last_guess = -1; + int r; + while (TRUE) { + guess = (high + low)/2; + if (last_guess == guess) break; // nothing to search + + r = (this->*fn)(random, guess); + exec_count++; + + if (r == 0) + return; // found, search end. + if (r < 0) { + high = guess; + } else { + low = guess; + } + last_guess = guess; + } + } + + int icu_strcoll_null(int32_t i, int32_t j){ + return ucol_strcoll(col, rnd[i].icu_data, -1, ord[j].icu_data,-1); + } + + int icu_strcoll_len(int32_t i, int32_t j){ + return ucol_strcoll(col, rnd[i].icu_data, rnd[i].icu_data_len, ord[j].icu_data, ord[j].icu_data_len); + } + + int icu_cmpkey(int32_t i, int32_t j) { + return strcmp( (char *) rnd[i].icu_key, (char *) ord[j].icu_key ); + } + + int win_cmp_null(int32_t i, int32_t j) { + int t = CompareStringW(win_langid, 0, rnd[i].win_data, -1, ord[j].win_data, -1); + if (t == 0){ + fprintf(stderr, "CompareStringW error, error number %x\n", GetLastError()); + exit(-1); + } else{ + return t - CSTR_EQUAL; + } + } + + int win_cmp_len(int32_t i, int32_t j) { + int t = CompareStringW(win_langid, 0, rnd[i].win_data, rnd[i].win_data_len, ord[j].win_data, ord[j].win_data_len); + if (t == 0){ + fprintf(stderr, "CompareStringW error, error number %x\n", GetLastError()); + exit(-1); + } else{ + return t - CSTR_EQUAL; + } + } + +#define BFUNC(name, func, data) \ + int name(int32_t i, int32_t j) { \ + return func(rnd[i].data, ord[j].data); \ + } + + BFUNC(posix_strcoll_null, strcoll, posix_data) + BFUNC(posix_cmpkey, strcmp, posix_key) + BFUNC(win_cmpkey, strcmp, win_key) + BFUNC(win_wcscmp, wcscmp, win_data) + BFUNC(icu_strcmp, u_strcmp, icu_data) + BFUNC(icu_cmpcpo, u_strcmpCodePointOrder, icu_data) +}; + +class CollPerfTest : public UPerfTest { +public: + UCollator * col; + DWORD win_langid; + + UChar * icu_data_all; + int32_t icu_data_all_len; + + int32_t count; + CA_uchar * icu_data; + CA_uint8 * icu_key; + CA_char * posix_data; + CA_char * posix_key; + CA_win_wchar * win_data; + CA_char * win_key; + + DataIndex * rnd_index; // random by icu key + DataIndex * ord_win_data; + DataIndex * ord_win_key; + DataIndex * ord_posix_data; + DataIndex * ord_posix_key; + DataIndex * ord_icu_data; + DataIndex * ord_icu_key; + DataIndex * ord_win_wcscmp; + DataIndex * ord_icu_strcmp; + DataIndex * ord_icu_cmpcpo; + + virtual ~CollPerfTest(){ + ucol_close(col); + delete [] icu_data_all; + delete icu_data; + delete icu_key; + delete posix_data; + delete posix_key; + delete win_data; + delete win_key; + delete[] rnd_index; + delete[] ord_win_data; + delete[] ord_win_key; + delete[] ord_posix_data; + delete[] ord_posix_key; + delete[] ord_icu_data; + delete[] ord_icu_key; + delete[] ord_win_wcscmp; + delete[] ord_icu_strcmp; + delete[] ord_icu_cmpcpo; + } + + CollPerfTest(int32_t argc, const char* argv[], UErrorCode& status):UPerfTest(argc, argv, status){ + col = NULL; + icu_data_all = NULL; + icu_data = NULL; + icu_key = NULL; + posix_data = NULL; + posix_key = NULL; + win_data =NULL; + win_key = NULL; + + rnd_index = NULL; + ord_win_data= NULL; + ord_win_key= NULL; + ord_posix_data= NULL; + ord_posix_key= NULL; + ord_icu_data= NULL; + ord_icu_key= NULL; + ord_win_wcscmp = NULL; + ord_icu_strcmp = NULL; + ord_icu_cmpcpo = NULL; + + if (U_FAILURE(status)){ + return; + } + + // Parse additional arguments + + UOption options[] = { + UOPTION_DEF("langid", 'i', UOPT_REQUIRES_ARG), // Windows Language ID number. + UOPTION_DEF("rulefile", 'r', UOPT_REQUIRES_ARG), // --rulefile <filename> + // Collation related arguments. All are optional. + // To simplify parsing, two choice arguments are disigned as NO_ARG. + // The default value is UPPER word in the comment + UOPTION_DEF("c_french", 'f', UOPT_NO_ARG), // --french <on | OFF> + UOPTION_DEF("c_alternate", 'a', UOPT_NO_ARG), // --alternate <NON_IGNORE | shifted> + UOPTION_DEF("c_casefirst", 'c', UOPT_REQUIRES_ARG), // --casefirst <lower | upper | OFF> + UOPTION_DEF("c_caselevel", 'l', UOPT_NO_ARG), // --caselevel <on | OFF> + UOPTION_DEF("c_normal", 'n', UOPT_NO_ARG), // --normal <on | OFF> + UOPTION_DEF("c_strength", 's', UOPT_REQUIRES_ARG), // --strength <1-5> + }; + int32_t opt_len = (sizeof(options)/sizeof(options[0])); + enum {i, r,f,a,c,l,n,s}; // The buffer between the option items' order and their references + + _remainingArgc = u_parseArgs(_remainingArgc, (char**)argv, opt_len, options); + + if (_remainingArgc < 0){ + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + if (locale == NULL){ + locale = "en_US"; // set default locale + } + + //#ifdef U_WINDOWS + if (options[i].doesOccur) { + char *endp; + int tmp = strtol(options[i].value, &endp, 0); + if (endp == options[i].value) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + win_langid = MAKELCID(tmp, SORT_DEFAULT); + } else { + win_langid = uloc_getLCID(locale); + } + //#endif + + // Set up an ICU collator + if (options[r].doesOccur) { + // TODO: implement it + } else { + col = ucol_open(locale, &status); + if (U_FAILURE(status)) { + return; + } + } + + if (options[f].doesOccur) { + ucol_setAttribute(col, UCOL_FRENCH_COLLATION, UCOL_ON, &status); + } else { + ucol_setAttribute(col, UCOL_FRENCH_COLLATION, UCOL_OFF, &status); + } + + if (options[a].doesOccur) { + ucol_setAttribute(col, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status); + } + + if (options[c].doesOccur) { // strcmp() has i18n encoding problem + if (strcmp("lower", options[c].value) == 0){ + ucol_setAttribute(col, UCOL_CASE_FIRST, UCOL_LOWER_FIRST, &status); + } else if (strcmp("upper", options[c].value) == 0) { + ucol_setAttribute(col, UCOL_CASE_FIRST, UCOL_UPPER_FIRST, &status); + } else { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + } + + if (options[l].doesOccur){ + ucol_setAttribute(col, UCOL_CASE_LEVEL, UCOL_ON, &status); + } + + if (options[n].doesOccur){ + ucol_setAttribute(col, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); + } + + if (options[s].doesOccur) { + char *endp; + int tmp = strtol(options[l].value, &endp, 0); + if (endp == options[l].value) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + switch (tmp) { + case 1: ucol_setAttribute(col, UCOL_STRENGTH, UCOL_PRIMARY, &status); break; + case 2: ucol_setAttribute(col, UCOL_STRENGTH, UCOL_SECONDARY, &status); break; + case 3: ucol_setAttribute(col, UCOL_STRENGTH, UCOL_TERTIARY, &status); break; + case 4: ucol_setAttribute(col, UCOL_STRENGTH, UCOL_QUATERNARY, &status); break; + case 5: ucol_setAttribute(col, UCOL_STRENGTH, UCOL_IDENTICAL, &status); break; + default: status = U_ILLEGAL_ARGUMENT_ERROR; return; + } + } + prepareData(status); + } + + //to avoid use the annoying 'id' in TESTCASE(id,test) macro or the like +#define TEST(testname, classname, arg1, arg2, arg3, arg4, arg5, arg6) \ + if(temp == index) {\ + name = #testname;\ + if (exec) {\ + UErrorCode status = U_ZERO_ERROR;\ + UPerfFunction * t = new classname(status,arg1, arg2, arg3, arg4, arg5, arg6);\ + if (U_FAILURE(status)) {\ + delete t;\ + return NULL;\ + } else {\ + return t;\ + }\ + } else {\ + return NULL;\ + }\ + }\ + temp++\ + + + virtual UPerfFunction* runIndexedTest( /*[in]*/int32_t index, /*[in]*/UBool exec, /*[out]*/const char* &name, /*[in]*/ char* par = NULL ){ + int temp = 0; + +#define TEST_KEYGEN(testname, func)\ + TEST(testname, CmdKeyGen, col, win_langid, count, rnd_index, CmdKeyGen::func, 0) + TEST_KEYGEN(TestIcu_KeyGen_null, icu_key_null); + TEST_KEYGEN(TestIcu_KeyGen_len, icu_key_len); + TEST_KEYGEN(TestPosix_KeyGen_null, posix_key_null); + TEST_KEYGEN(TestWin_KeyGen_null, win_key_null); + TEST_KEYGEN(TestWin_KeyGen_len, win_key_len); + +#define TEST_ITER(testname, func)\ + TEST(testname, CmdIter, col, count, icu_data, CmdIter::func,0,0) + TEST_ITER(TestIcu_ForwardIter_null, icu_forward_null); + TEST_ITER(TestIcu_ForwardIter_len, icu_forward_len); + TEST_ITER(TestIcu_BackwardIter_null, icu_backward_null); + TEST_ITER(TestIcu_BackwardIter_len, icu_backward_len); + +#define TEST_ITER_ALL(testname, func)\ + TEST(testname, CmdIterAll, col, icu_data_all_len, icu_data_all, CmdIterAll::func,0,0) + TEST_ITER_ALL(TestIcu_ForwardIter_all_null, forward_null); + TEST_ITER_ALL(TestIcu_ForwardIter_all_len, forward_len); + TEST_ITER_ALL(TestIcu_BackwardIter_all_null, backward_null); + TEST_ITER_ALL(TestIcu_BackwardIter_all_len, backward_len); + +#define TEST_QSORT(testname, func)\ + TEST(testname, CmdQsort, rnd_index, count, sizeof(DataIndex), CmdQsort::func,0,0) + TEST_QSORT(TestIcu_qsort_strcoll_null, icu_strcoll_null); + TEST_QSORT(TestIcu_qsort_strcoll_len, icu_strcoll_len); + TEST_QSORT(TestIcu_qsort_usekey, icu_cmpkey); + TEST_QSORT(TestPosix_qsort_strcoll_null, posix_strcoll_null); + TEST_QSORT(TestPosix_qsort_usekey, posix_cmpkey); + TEST_QSORT(TestWin_qsort_CompareStringW_null, win_cmp_null); + TEST_QSORT(TestWin_qsort_CompareStringW_len, win_cmp_len); + TEST_QSORT(TestWin_qsort_usekey, win_cmpkey); + +#define TEST_BIN(testname, func)\ + TEST(testname, CmdBinSearch, col, win_langid, count, rnd_index, ord_icu_key,CmdBinSearch::func) + TEST_BIN(TestIcu_BinarySearch_strcoll_null, icu_strcoll_null); + TEST_BIN(TestIcu_BinarySearch_strcoll_len, icu_strcoll_len); + TEST_BIN(TestIcu_BinarySearch_usekey, icu_cmpkey); + TEST_BIN(TestIcu_BinarySearch_strcmp, icu_strcmp); + TEST_BIN(TestIcu_BinarySearch_cmpCPO, icu_cmpcpo); + TEST_BIN(TestPosix_BinarySearch_strcoll_null, posix_strcoll_null); + TEST_BIN(TestPosix_BinarySearch_usekey, posix_cmpkey); + TEST_BIN(TestWin_BinarySearch_CompareStringW_null, win_cmp_null); + TEST_BIN(TestWin_BinarySearch_CompareStringW_len, win_cmp_len); + TEST_BIN(TestWin_BinarySearch_usekey, win_cmpkey); + TEST_BIN(TestWin_BinarySearch_wcscmp, win_wcscmp); + + name=""; + return NULL; + } + + + + void prepareData(UErrorCode& status){ + if(U_FAILURE(status)) return; + if (icu_data) return; // prepared + + icu_data = new CA_uchar(); + + // Following code is borrowed from UPerfTest::getLines(); + const UChar* line=NULL; + int32_t len =0; + for (;;) { + line = ucbuf_readline(ucharBuf,&len,&status); + if(line == NULL || U_FAILURE(status)){break;} + + // Refer to the source code of ucbuf_readline() + // 1. 'len' includs the line terminal symbols + // 2. The length of the line terminal symbols is only one character + // 3. The Windows CR LF line terminal symbols will be converted to CR + + if (len == 1) { + continue; //skip empty line + } else { + icu_data->append_one(len); + memcpy(icu_data->last(), line, len * sizeof(UChar)); + icu_data->last()[len -1] = NULL; + } + } + if(U_FAILURE(status)) return; + + // UTF-16 -> UTF-8 conversion. + UConverter *conv = ucnv_open("utf-8", &status); // just UTF-8 for now. + if (U_FAILURE(status)) return; + + count = icu_data->count; + + icu_data_all_len = icu_data->index[count]; // includes all NULLs + icu_data_all_len -= count; // excludes all NULLs + icu_data_all_len += 1; // the terminal NULL + icu_data_all = new UChar[icu_data_all_len]; + icu_data_all[icu_data_all_len - 1] = 0; //the terminal NULL + + icu_key = new CA_uint8; + win_data = new CA_win_wchar; + win_key = new CA_char; + posix_data = new CA_char; + posix_key = new CA_char; + rnd_index = new DataIndex[count]; + DataIndex::win_langid = win_langid; + DataIndex::col = col; + + + UChar * p = icu_data_all; + int32_t s; + int32_t t; + for (int i=0; i < count; i++) { + // ICU all data + s = sizeof(UChar) * icu_data->lengthOf(i); + memcpy(p, icu_data->dataOf(i), s); + p += icu_data->lengthOf(i); + + // ICU data + + // ICU key + s = ucol_getSortKey(col, icu_data->dataOf(i), -1,NULL, 0); + icu_key->append_one(s); + t = ucol_getSortKey(col, icu_data->dataOf(i), -1,icu_key->last(), s); + if (t != s) {status = U_INVALID_FORMAT_ERROR;return;} + + // POSIX data + s = ucnv_fromUChars(conv,NULL, 0, icu_data->dataOf(i), icu_data->lengthOf(i), &status); + if (status == U_BUFFER_OVERFLOW_ERROR || status == U_ZERO_ERROR){ + status = U_ZERO_ERROR; + } else { + return; + } + posix_data->append_one(s + 1); // plus terminal NULL + t = ucnv_fromUChars(conv,posix_data->last(), s, icu_data->dataOf(i), icu_data->lengthOf(i), &status); + if (U_FAILURE(status)) return; + if ( t != s){status = U_INVALID_FORMAT_ERROR;return;} + posix_data->last()[s] = 0; + + // POSIX key + s = strxfrm(NULL, posix_data->dataOf(i), 0); + if (s == INT_MAX){status = U_INVALID_FORMAT_ERROR;return;} + posix_key->append_one(s); + t = strxfrm(posix_key->last(), posix_data->dataOf(i), s); + if (t != s) {status = U_INVALID_FORMAT_ERROR;return;} + + // Win data + s = icu_data->lengthOf(i) + 1; // plus terminal NULL + win_data->append_one(s); + memcpy(win_data->last(), icu_data->dataOf(i), sizeof(WCHAR) * s); + + // Win key + s = LCMapStringW(win_langid, LCMAP_SORTKEY, win_data->dataOf(i), win_data->lengthOf(i), NULL,0); + if (s == 0) {status = U_INVALID_FORMAT_ERROR;return;} + win_key->append_one(s); + t = LCMapStringW(win_langid, LCMAP_SORTKEY, win_data->dataOf(i), win_data->lengthOf(i), (WCHAR *)(win_key->last()),s); + if (t != s) {status = U_INVALID_FORMAT_ERROR;return;} + + }; + + // append_one() will make points shifting, should not merge following code into previous iteration + for (int i=0; i < count; i++) { + rnd_index[i].icu_key = icu_key->dataOf(i); + rnd_index[i].icu_data = icu_data->dataOf(i); + rnd_index[i].icu_data_len = icu_data->lengthOf(i); + rnd_index[i].posix_key = posix_key->last(); + rnd_index[i].posix_data = posix_data->dataOf(i); + rnd_index[i].posix_data_len = posix_data->lengthOf(i); + rnd_index[i].win_key = win_key->dataOf(i); + rnd_index[i].win_data = win_data->dataOf(i); + rnd_index[i].win_data_len = win_data->lengthOf(i); + }; + + ucnv_close(conv); + qsort(rnd_index, count, sizeof(DataIndex), CmdQsort::q_random); + +#define SORT(data, func) \ + data = new DataIndex[count];\ + memcpy(data, rnd_index, count * sizeof(DataIndex));\ + qsort(data, count, sizeof(DataIndex), CmdQsort::func) + + SORT(ord_icu_data, icu_strcoll_len); + SORT(ord_icu_key, icu_cmpkey); + SORT(ord_posix_data, posix_strcoll_null); + SORT(ord_posix_key, posix_cmpkey); + SORT(ord_win_data, win_cmp_len); + SORT(ord_win_key, win_cmpkey); + SORT(ord_win_wcscmp, win_wcscmp); + SORT(ord_icu_strcmp, icu_strcmp); + SORT(ord_icu_cmpcpo, icu_cmpcpo); + } +}; + + +int main(int argc, const char *argv[]) +{ + + UErrorCode status = U_ZERO_ERROR; + CollPerfTest test(argc, argv, status); + + if (U_FAILURE(status)){ + printf("The error is %s\n", u_errorName(status)); + //TODO: print usage here + return status; + } + + if (test.run() == FALSE){ + fprintf(stderr, "FAILED: Tests could not be run please check the " + "arguments.\n"); + return -1; + } + return 0; +} + diff --git a/icuSources/test/perf/collperf/collperf.vcproj b/icuSources/test/perf/collperf/collperf.vcproj new file mode 100644 index 00000000..79628389 --- /dev/null +++ b/icuSources/test/perf/collperf/collperf.vcproj @@ -0,0 +1,179 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="collperf" + ProjectGUID="{01807B4A-E3B5-4B97-A7F3-207746DCD71E}" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + PrecompiledHeaderFile=".\Debug/collperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icuind.lib icutud.lib winmm.lib icutestd.lib " + OutputFile=".\Debug/collperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/collperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/collperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="2" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + PrecompiledHeaderFile=".\Release/collperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icuin.lib ctestfw.lib icutu.lib winmm.lib" + OutputFile=".\Release/collperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\lib\" + ProgramDatabaseFile=".\Release/collperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/collperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="collperf.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + BasicRuntimeChecks="3" + BrowseInformation="1"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions=""/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/perf/convperf/convperf.cpp b/icuSources/test/perf/convperf/convperf.cpp index a663857b..dabbef7f 100644 --- a/icuSources/test/perf/convperf/convperf.cpp +++ b/icuSources/test/perf/convperf/convperf.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -13,6 +13,7 @@ */ #include "convperf.h" #include "data.h" +#include <stdio.h> int main(int argc, const char* argv[]){ UErrorCode status = U_ZERO_ERROR; diff --git a/icuSources/test/perf/convperf/convperf.dsp b/icuSources/test/perf/convperf/convperf.dsp deleted file mode 100644 index 1c02213a..00000000 --- a/icuSources/test/perf/convperf/convperf.dsp +++ /dev/null @@ -1,112 +0,0 @@ -# Microsoft Developer Studio Project File - Name="convperf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=convperf - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "convperf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "convperf.mak" CFG="convperf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "convperf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "convperf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "convperf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\include" /I "..\..\..\common" /I "..\..\..\i18n" /I "..\..\..\tools\toolutil" /I "C:\Program Files\Microsoft SDK\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib icutu.lib kernel32.lib user32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib\\" - -!ELSEIF "$(CFG)" == "convperf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\include" /I "..\..\..\tools\ctestfw" /I "..\..\..\common" /I "..\..\..\i18n" /I "..\..\..\tools\toolutil" /I "C:\Program Files\Microsoft SDK\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icutud.lib kernel32.lib user32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\\" - -!ENDIF - -# Begin Target - -# Name "convperf - Win32 Release" -# Name "convperf - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\convperf.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\convperf.h -# End Source File -# Begin Source File - -SOURCE=.\data.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/perf/convperf/convperf.h b/icuSources/test/perf/convperf/convperf.h index c8ad8170..a8c47b94 100644 --- a/icuSources/test/perf/convperf/convperf.h +++ b/icuSources/test/perf/convperf/convperf.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -8,12 +8,14 @@ #ifndef _CONVPERF_H #define _CONVPERF_H -#include "uperf.h" +#include <mlang.h> +#include <objbase.h> +#include <stdlib.h> #include "unicode/ucnv.h" #include "unicode/uclean.h" #include "unicode/ustring.h" -#include <mlang.h> -#include <objbase.h> + +#include "unicode/uperf.h" #define CONVERSION_FLAGS (0) /*WC_DEFAULTCHAR WC_COMPOSITECHECK & WC_SEPCHARS*/ #define MAX_BUF_SIZE 3048 @@ -42,7 +44,7 @@ public: source, srcLen, &status); if(status==U_BUFFER_OVERFLOW_ERROR) { status=U_ZERO_ERROR; - target=(UChar*)uprv_malloc((reqdLen) * U_SIZEOF_UCHAR*2); + target=(UChar*)malloc((reqdLen) * U_SIZEOF_UCHAR*2); targetLimit = target + reqdLen; if(target == NULL){ status = U_MEMORY_ALLOCATION_ERROR; @@ -60,7 +62,7 @@ public: return srcLen; } ~ICUToUnicodePerfFunction(){ - uprv_free(target); + free(target); ucnv_close(conv); } }; @@ -88,7 +90,7 @@ public: source, srcLen, &status); if(status==U_BUFFER_OVERFLOW_ERROR) { status=U_ZERO_ERROR; - target=(char*)uprv_malloc((reqdLen*2)); + target=(char*)malloc((reqdLen*2)); targetLimit = target + reqdLen; if(target == NULL){ status = U_MEMORY_ALLOCATION_ERROR; @@ -106,7 +108,7 @@ public: return srcLen; } ~ICUFromUnicodePerfFunction(){ - uprv_free(target); + free(target); ucnv_close(conv); } }; diff --git a/icuSources/test/perf/convperf/convperf.vcproj b/icuSources/test/perf/convperf/convperf.vcproj new file mode 100644 index 00000000..c8090e10 --- /dev/null +++ b/icuSources/test/perf/convperf/convperf.vcproj @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="convperf" + ProjectGUID="{B4C03939-D417-41F0-85B4-848ECF105E3A}" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Release/convperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icutu.lib icutest.lib" + OutputFile=".\Release/convperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + ProgramDatabaseFile=".\Release/convperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/convperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Debug/convperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib" + OutputFile=".\Debug/convperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/convperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/convperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="convperf.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions=""/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + BasicRuntimeChecks="3" + BrowseInformation="1"/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath="convperf.h"> + </File> + <File + RelativePath="data.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/perf/normperf/Makefile.in b/icuSources/test/perf/normperf/Makefile.in index 90f55562..0fcc6760 100644 --- a/icuSources/test/perf/normperf/Makefile.in +++ b/icuSources/test/perf/normperf/Makefile.in @@ -1,20 +1,17 @@ -## Makefile.in for ICU - test/collperf -## Copyright (c) 2001, International Business Machines Corporation and +## Makefile.in for ICU - test/perf/normperf +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ -top_builddir = ../.. +top_builddir = ../../.. include $(top_builddir)/icudefs.mk -## Platform-specific setup -include @platform_make_fragment@ - ## Build directory information -subdir = test/normperf +subdir = test/perf/normperf ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) @@ -22,16 +19,8 @@ CLEANFILES = *~ $(DEPS) ## Target information TARGET = normperf -DEFS = @DEFS@ -CPPFLAGS = @CPPFLAGS@ -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -CFLAGS = @CFLAGS@ -CXXFLAGS = @CXXFLAGS@ -ENABLE_RPATH = @ENABLE_RPATH@ -ifeq ($(ENABLE_RPATH),YES) -RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir) -endif -LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS) -LIBS = $(LIBICUI18N) $(LIBICUUC) @LIBS@ @LIB_M@ +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = normperf.o diff --git a/icuSources/test/perf/normperf/normperf.cpp b/icuSources/test/perf/normperf/normperf.cpp index 3edfe4a0..011bbcbd 100644 --- a/icuSources/test/perf/normperf/normperf.cpp +++ b/icuSources/test/perf/normperf/normperf.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2003, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -12,6 +12,8 @@ * c:\normperf.exe -s C:\work\ICUCupertinoRep\icu4c\collation-perf-data -i 10 -p 15 -f TestNames_Asian.txt -u -e UTF-8 -l */ #include "normperf.h" +#include "uoptions.h" +#include <stdio.h> #define LENGTHOF(array) (sizeof(array)/sizeof((array)[0])) diff --git a/icuSources/test/perf/normperf/normperf.dsp b/icuSources/test/perf/normperf/normperf.dsp deleted file mode 100644 index 09f55d5d..00000000 --- a/icuSources/test/perf/normperf/normperf.dsp +++ /dev/null @@ -1,108 +0,0 @@ -# Microsoft Developer Studio Project File - Name="normperf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=normperf - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "normperf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "normperf.mak" CFG="normperf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "normperf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "normperf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "normperf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\include" /I "..\..\..\tools\toolutil" /I "..\..\..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icuin.lib icutu.lib winmm.lib kernel32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib\\" - -!ELSEIF "$(CFG)" == "normperf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\include" /I "..\..\..\tools\ctestfw" /I "..\..\..\common" /I "..\..\..\i18n" /I "..\..\..\tools\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /FR /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icutud.lib winmm.lib kernel32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\\" - -!ENDIF - -# Begin Target - -# Name "normperf - Win32 Release" -# Name "normperf - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\normperf.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\normperf.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/perf/normperf/normperf.h b/icuSources/test/perf/normperf/normperf.h index a5278068..6a43a772 100644 --- a/icuSources/test/perf/normperf/normperf.h +++ b/icuSources/test/perf/normperf/normperf.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2003, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -8,13 +8,15 @@ #ifndef _NORMPERF_H #define _NORMPERF_H -#include "uperf.h" #include "unicode/unorm.h" #include "unicode/ustring.h" +#include "unicode/uperf.h" +#include <stdlib.h> + // Stubs for Windows API functions when building on UNIXes. // -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +#if defined(U_WINDOWS) // do nothing #else #define _UNICODE @@ -100,7 +102,7 @@ private: ULine* lines; int32_t numLines; UChar dest[DEST_BUFFER_CAPACITY]; - UChar* pDest; + UChar* pDest; int32_t destLen; NormFn fn; int32_t retVal; @@ -147,7 +149,7 @@ public: numLines = srcNumLines; uselen = _uselen; destLen = DEST_BUFFER_CAPACITY; - pDest = dest; + pDest = dest; src = NULL; srcLen = 0; line_mode = TRUE; @@ -158,16 +160,16 @@ public: numLines = 0; uselen = _uselen; destLen = sourceLen*3; - pDest = (UChar*) malloc(destLen * U_SIZEOF_UCHAR); + pDest = (UChar*) malloc(destLen * U_SIZEOF_UCHAR); src = source; srcLen = sourceLen; line_mode = FALSE; } - ~NormPerfFunction(){ - if(dest != pDest){ - free(pDest); - } - } + ~NormPerfFunction(){ + if(dest != pDest){ + free(pDest); + } + } }; @@ -313,7 +315,7 @@ int32_t ICUIsNormalized(const UChar* src,int32_t srcLen, UNormalizationMode mode } #endif -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +#if defined(U_WINDOWS) int32_t WinNormNFD(const UChar* src, int32_t srcLen, UChar* dest, int32_t dstLen, int32_t options, UErrorCode* status) { return FoldStringW(MAP_COMPOSITE,src,srcLen,dest,dstLen); @@ -347,4 +349,5 @@ int32_t WinNormNFKC(const UChar* src, int32_t srcLen, UChar* dest, int32_t dstLe #endif -#endif // NORMPERF_H \ No newline at end of file +#endif // NORMPERF_H + diff --git a/icuSources/test/perf/normperf/normperf.vcproj b/icuSources/test/perf/normperf/normperf.vcproj new file mode 100644 index 00000000..e11391d6 --- /dev/null +++ b/icuSources/test/perf/normperf/normperf.vcproj @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="normperf" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="1"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_MBCS" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Debug/normperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib winmm.lib" + OutputFile=".\Debug/normperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/normperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/normperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Release/normperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib" + OutputFile=".\Release/normperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + ProgramDatabaseFile=".\Release/normperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/normperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="normperf.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_MBCS;_UNICODE;$(NoInherit)" + BasicRuntimeChecks="3" + BrowseInformation="1"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions=""/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath="normperf.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/perf/perf.dsw b/icuSources/test/perf/perf.dsw deleted file mode 100644 index 43f83c96..00000000 --- a/icuSources/test/perf/perf.dsw +++ /dev/null @@ -1,98 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "all"=.\all\all.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name charperf - End Project Dependency - Begin Project Dependency - Project_Dep_Name normperf - End Project Dependency -}}} - -############################################################################### - -Project: "charperf"=.\charperf\charperf.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "common"=..\..\common\common.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "normperf"=.\normperf\normperf.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency - Begin Project Dependency - Project_Dep_Name toolutil - End Project Dependency -}}} - -############################################################################### - -Project: "toolutil"=..\..\tools\toolutil\toolutil.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name common - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/icuSources/test/perf/perf.sln b/icuSources/test/perf/perf.sln new file mode 100644 index 00000000..d5b1b2ed --- /dev/null +++ b/icuSources/test/perf/perf.sln @@ -0,0 +1,77 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "charperf", "charperf\charperf.vcproj", "{D850A4B6-7D94-476E-9392-E9272DA4EAAF}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "normperf", "normperf\normperf.vcproj", "{56CCC661-8D33-4F0A-B62F-C619CE843C68}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convperf", "convperf\convperf.vcproj", "{B4C03939-D417-41F0-85B4-848ECF105E3A}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stringperf", "ustrperf\stringperf.vcproj", "{523710EA-349D-45BF-8B39-289CC86E7D91}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ubrkperf", "ubrkperf\ubrkperf.vcproj", "{7E280294-49BD-43D1-9903-CF29648D88CA}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utfperf", "utfperf\utfperf.vcproj", "{E7728E98-0469-43F4-AF37-4529A3D52C6B}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "collperf", "collperf\collperf.vcproj", "{01807B4A-E3B5-4B97-A7F3-207746DCD71E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "usetperf", "usetperf\usetperf.vcproj", "{EC5DF28A-D789-4C46-A55D-0AD55B50ECE8}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D850A4B6-7D94-476E-9392-E9272DA4EAAF}.Debug.ActiveCfg = Debug|Win32 + {D850A4B6-7D94-476E-9392-E9272DA4EAAF}.Debug.Build.0 = Debug|Win32 + {D850A4B6-7D94-476E-9392-E9272DA4EAAF}.Release.ActiveCfg = Release|Win32 + {D850A4B6-7D94-476E-9392-E9272DA4EAAF}.Release.Build.0 = Release|Win32 + {56CCC661-8D33-4F0A-B62F-C619CE843C68}.Debug.ActiveCfg = Debug|Win32 + {56CCC661-8D33-4F0A-B62F-C619CE843C68}.Debug.Build.0 = Debug|Win32 + {56CCC661-8D33-4F0A-B62F-C619CE843C68}.Release.ActiveCfg = Release|Win32 + {56CCC661-8D33-4F0A-B62F-C619CE843C68}.Release.Build.0 = Release|Win32 + {B4C03939-D417-41F0-85B4-848ECF105E3A}.Debug.ActiveCfg = Debug|Win32 + {B4C03939-D417-41F0-85B4-848ECF105E3A}.Debug.Build.0 = Debug|Win32 + {B4C03939-D417-41F0-85B4-848ECF105E3A}.Release.ActiveCfg = Release|Win32 + {B4C03939-D417-41F0-85B4-848ECF105E3A}.Release.Build.0 = Release|Win32 + {523710EA-349D-45BF-8B39-289CC86E7D91}.Debug.ActiveCfg = Debug|Win32 + {523710EA-349D-45BF-8B39-289CC86E7D91}.Debug.Build.0 = Debug|Win32 + {523710EA-349D-45BF-8B39-289CC86E7D91}.Release.ActiveCfg = Release|Win32 + {523710EA-349D-45BF-8B39-289CC86E7D91}.Release.Build.0 = Release|Win32 + {7E280294-49BD-43D1-9903-CF29648D88CA}.Debug.ActiveCfg = Debug|Win32 + {7E280294-49BD-43D1-9903-CF29648D88CA}.Debug.Build.0 = Debug|Win32 + {7E280294-49BD-43D1-9903-CF29648D88CA}.Release.ActiveCfg = Release|Win32 + {7E280294-49BD-43D1-9903-CF29648D88CA}.Release.Build.0 = Release|Win32 + {E7728E98-0469-43F4-AF37-4529A3D52C6B}.Debug.ActiveCfg = Debug|Win32 + {E7728E98-0469-43F4-AF37-4529A3D52C6B}.Debug.Build.0 = Debug|Win32 + {E7728E98-0469-43F4-AF37-4529A3D52C6B}.Release.ActiveCfg = Release|Win32 + {E7728E98-0469-43F4-AF37-4529A3D52C6B}.Release.Build.0 = Release|Win32 + {01807B4A-E3B5-4B97-A7F3-207746DCD71E}.Debug.ActiveCfg = Debug|Win32 + {01807B4A-E3B5-4B97-A7F3-207746DCD71E}.Debug.Build.0 = Debug|Win32 + {01807B4A-E3B5-4B97-A7F3-207746DCD71E}.Release.ActiveCfg = Release|Win32 + {01807B4A-E3B5-4B97-A7F3-207746DCD71E}.Release.Build.0 = Release|Win32 + {EC5DF28A-D789-4C46-A55D-0AD55B50ECE8}.Debug.ActiveCfg = Debug|Win32 + {EC5DF28A-D789-4C46-A55D-0AD55B50ECE8}.Debug.Build.0 = Debug|Win32 + {EC5DF28A-D789-4C46-A55D-0AD55B50ECE8}.Release.ActiveCfg = Release|Win32 + {EC5DF28A-D789-4C46-A55D-0AD55B50ECE8}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/icuSources/test/perf/ubrkperf/Makefile.in b/icuSources/test/perf/ubrkperf/Makefile.in index 908e9fbe..33e6752f 100644 --- a/icuSources/test/perf/ubrkperf/Makefile.in +++ b/icuSources/test/perf/ubrkperf/Makefile.in @@ -1,20 +1,17 @@ -## Makefile.in for ICU - test/ubrkperf -## Copyright (c) 2001, International Business Machines Corporation and +## Makefile.in for ICU - test/perf/ubrkperf +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ -top_builddir = ../.. +top_builddir = ../../.. include $(top_builddir)/icudefs.mk -## Platform-specific setup -include @platform_make_fragment@ - ## Build directory information -subdir = test/ubrkperf +subdir = test/perf/ubrkperf ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) @@ -22,16 +19,8 @@ CLEANFILES = *~ $(DEPS) ## Target information TARGET = ubrkperf -DEFS = @DEFS@ -CPPFLAGS = @CPPFLAGS@ -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -CFLAGS = @CFLAGS@ -CXXFLAGS = @CXXFLAGS@ -ENABLE_RPATH = @ENABLE_RPATH@ -ifeq ($(ENABLE_RPATH),YES) -RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir) -endif -LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS) -LIBS = $(LIBICUI18N) $(LIBICUUC) @LIBS@ @LIB_M@ +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = ubrkperf.o diff --git a/icuSources/test/perf/ubrkperf/ubrkperf.cpp b/icuSources/test/perf/ubrkperf/ubrkperf.cpp index 7461affb..18ed4038 100644 --- a/icuSources/test/perf/ubrkperf/ubrkperf.cpp +++ b/icuSources/test/perf/ubrkperf/ubrkperf.cpp @@ -1,6 +1,7 @@ /******************************************************************** * COPYRIGHT: - * Copyright (C) 2001 IBM, Inc. All Rights Reserved. + * Copyright (C) 2001-2005 International Business Machines Corporation + * and others. All Rights Reserved. * ********************************************************************/ /******************************************************************************** @@ -15,6 +16,8 @@ */ #include "ubrkperf.h" +#include "uoptions.h" +#include <stdio.h> #if 0 diff --git a/icuSources/test/perf/ubrkperf/ubrkperf.h b/icuSources/test/perf/ubrkperf/ubrkperf.h index 1733c17d..4c55a739 100644 --- a/icuSources/test/perf/ubrkperf/ubrkperf.h +++ b/icuSources/test/perf/ubrkperf/ubrkperf.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -8,7 +8,7 @@ #ifndef _UBRKPERF_H #define _UBRKPERF_H -#include "uperf.h" +#include "unicode/uperf.h" #include <unicode/brkiter.h> diff --git a/icuSources/test/perf/ubrkperf/ubrkperf.vcproj b/icuSources/test/perf/ubrkperf/ubrkperf.vcproj new file mode 100644 index 00000000..fa2a6dd8 --- /dev/null +++ b/icuSources/test/perf/ubrkperf/ubrkperf.vcproj @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="ubrkperf" + ProjectGUID="{7E280294-49BD-43D1-9903-CF29648D88CA}" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + PrecompiledHeaderFile=".\Debug/ubrkperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib winmm.lib" + OutputFile=".\Debug/ubrkperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/ubrkperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/ubrkperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="2" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + PrecompiledHeaderFile=".\Release/ubrkperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib" + OutputFile="..\..\..\..\bin\ubrkperf24.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + ProgramDatabaseFile=".\Release/ubrkperf24.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/ubrkperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="ubrkperf.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="" + PreprocessorDefinitions="" + BasicRuntimeChecks="3" + BrowseInformation="1"/> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="" + PreprocessorDefinitions=""/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath="ubrkperf.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/perf/ubrkperf/ubrkperfold.cpp b/icuSources/test/perf/ubrkperf/ubrkperfold.cpp index ffb62551..4ab8190f 100644 --- a/icuSources/test/perf/ubrkperf/ubrkperfold.cpp +++ b/icuSources/test/perf/ubrkperf/ubrkperfold.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (C) 2001 IBM, Inc. All Rights Reserved. + * Copyright (C) 2001-2005 IBM, Inc. All Rights Reserved. * ********************************************************************/ /******************************************************************************** @@ -69,7 +69,7 @@ const char gUsageString[] = #include <unicode/brkiter.h> -#ifdef WIN32 +#ifdef U_WINDOWS #include <windows.h> #else // diff --git a/icuSources/test/unalignedtest/Makefile.in b/icuSources/test/perf/usetperf/Makefile.in similarity index 69% rename from icuSources/test/unalignedtest/Makefile.in rename to icuSources/test/perf/usetperf/Makefile.in index d4fa022e..4b8cba58 100644 --- a/icuSources/test/unalignedtest/Makefile.in +++ b/icuSources/test/perf/usetperf/Makefile.in @@ -1,28 +1,28 @@ -## Makefile.in for ICU - test/unalignedtest -## Copyright (c) 2001, International Business Machines Corporation and +## Makefile.in for ICU - test/perf/usetperf +## Copyright (c) 2001-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ -top_builddir = ../.. +top_builddir = ../../.. include $(top_builddir)/icudefs.mk ## Build directory information -subdir = test/unalignedtest +subdir = test/perf/usetperf ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) ## Target information -TARGET = unalignedtest +TARGET = usetperf -DEFS += -I$(top_builddir)/common -I$(top_srcdir)/common -LIBS = $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) -OBJECTS = unaligned.o +OBJECTS = usetperf.o bitset.o DEPS = $(OBJECTS:.o=.d) @@ -54,20 +54,14 @@ clean-local: distclean-local: clean-local $(RMV) Makefile -check-local: all-local check-cintltst check-intltest - -check-cintltst: - - $(INVOKE) ./$(TARGET) $(top_srcdir)/test/cintltst/cintltst -a - -check-intltest: - - $(INVOKE) ./$(TARGET) $(top_srcdir)/test/intltest/intltest -a +check-local: all-local Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) -o $@ $^ + $(LINK.cc) -o $@ $^ $(LIBS) invoke: ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) $(INVOCATION) @@ -81,3 +75,4 @@ ifneq ($(patsubst %install,,$(MAKECMDGOALS)),) endif endif endif + diff --git a/icuSources/test/perf/usetperf/UsetPerf.pl b/icuSources/test/perf/usetperf/UsetPerf.pl new file mode 100644 index 00000000..8c493806 --- /dev/null +++ b/icuSources/test/perf/usetperf/UsetPerf.pl @@ -0,0 +1,45 @@ +#!/usr/bin/perl -w +# ******************************************************************** +# * COPYRIGHT: +# * Copyright (c) 2005, International Business Machines Corporation and +# * others. All Rights Reserved. +# ******************************************************************** + +use strict; + +use lib '../perldriver'; + +use PerfFramework; + + +my $options = { + "title"=>"Uset performance: ICU", + "headers"=>"ICU", + "operationIs"=>"unicode string", + "passes"=>"1", + "time"=>"2", + #"outputType"=>"HTML", + "dataDir"=>"../data", + "outputDir"=>"../results" + }; + +# programs +# tests will be done for all the programs. Results will be stored and connected +my $p = "debug/usetperf.exe "; + +my $tests = { + "titlecase_letter/add", ["$p titlecase_letter_add"], + "titlecase_letter/contains", ["$p titlecase_letter_contains"], + "titlecase_letter/iterator", ["$p titlecase_letter_iterator"], + "unassigned/add", ["$p unassigned_add"], + "unassigned/contains", ["$p unassigned_contains"], + "unassigned/iterator", ["$p unassigned_iterator"], + "pattern1", ["$p pattern1"], + "pattern2", ["$p pattern2"], + "pattern3", ["$p pattern3"], + }; + +my $dataFiles = { + }; + +runTests($options, $tests, $dataFiles); diff --git a/icuSources/test/usetperf/bitset.cpp b/icuSources/test/perf/usetperf/bitset.cpp similarity index 96% rename from icuSources/test/usetperf/bitset.cpp rename to icuSources/test/perf/usetperf/bitset.cpp index d1356c0e..ea5f11b8 100644 --- a/icuSources/test/usetperf/bitset.cpp +++ b/icuSources/test/perf/usetperf/bitset.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * 2002-09-20 aliu Created. diff --git a/icuSources/test/usetperf/bitset.h b/icuSources/test/perf/usetperf/bitset.h similarity index 91% rename from icuSources/test/usetperf/bitset.h rename to icuSources/test/perf/usetperf/bitset.h index 8b7122df..3148b1d7 100644 --- a/icuSources/test/usetperf/bitset.h +++ b/icuSources/test/perf/usetperf/bitset.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * 2002-09-20 aliu Created. diff --git a/icuSources/test/perf/usetperf/usetperf.cpp b/icuSources/test/perf/usetperf/usetperf.cpp new file mode 100644 index 00000000..7d5853e9 --- /dev/null +++ b/icuSources/test/perf/usetperf/usetperf.cpp @@ -0,0 +1,143 @@ +/* +********************************************************************** +* Copyright (c) 2002-2005, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* 2005Nov22 Raymond Yang +* +* migrate old test created by aliu to perf test framework. +*/ + +#include <stdio.h> + +#include "unicode/utypes.h" +#include "unicode/uniset.h" +#include "unicode/uchar.h" +#include "unicode/usetiter.h" +#include "bitset.h" +#include "unicode/uperf.h" + +static const char* PAT[] = { + "['A-Za-z\\u00C0-\\u00C5\\u00C7-\\u00CF\\u00D1-\\u00D6\\u00D9-\\u00DD\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6\\u00F9-\\u00FD\\u00FF-\\u010F\\u0112-\\u0125\\u0128-\\u0130\\u0134-\\u0137\\u0139-\\u013E\\u0143-\\u0148\\u014C-\\u0151\\u0154-\\u0165\\u0168-\\u017E\\u01A0-\\u01A1\\u01AF-\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E1\\u01E6-\\u01ED\\u01F0\\u01F4-\\u01F5\\u01F8-\\u01FB\\u0200-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u1E00-\\u1E99\\u1EA0-\\u1EF9\\u212A-\\u212B]", + + "['.0-9A-Za-z~\\u00C0-\\u00C5\\u00C7-\\u00CF\\u00D1-\\u00D6\\u00D9-\\u00DD\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6\\u00F9-\\u00FD\\u00FF-\\u010F\\u0112-\\u0125\\u0128-\\u0130\\u0134-\\u0137\\u0139-\\u013E\\u0143-\\u0148\\u014C-\\u0151\\u0154-\\u0165\\u0168-\\u017E\\u01A0-\\u01A1\\u01AF-\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E6-\\u01ED\\u01F0\\u01F4-\\u01F5\\u01F8-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u0301\\u0303-\\u0304\\u0306-\\u0307\\u0310\\u0314-\\u0315\\u0323\\u0325\\u0331\\u0341\\u0344\\u0385-\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u0390\\u03AC-\\u03B0\\u03CC-\\u03CE\\u03D3\\u0403\\u040C\\u040E\\u0419\\u0439\\u0453\\u045C\\u045E\\u04C1-\\u04C2\\u04D0-\\u04D1\\u04D6-\\u04D7\\u04E2-\\u04E3\\u04EE-\\u04EF\\u1E00-\\u1E99\\u1EA0-\\u1EF9\\u1F01\\u1F03-\\u1F05\\u1F07\\u1F09\\u1F0B-\\u1F0D\\u1F0F\\u1F11\\u1F13-\\u1F15\\u1F19\\u1F1B-\\u1F1D\\u1F21\\u1F23-\\u1F25\\u1F27\\u1F29\\u1F2B-\\u1F2D\\u1F2F\\u1F31\\u1F33-\\u1F35\\u1F37\\u1F39\\u1F3B-\\u1F3D\\u1F3F\\u1F41\\u1F43-\\u1F45\\u1F49\\u1F4B-\\u1F4D\\u1F51\\u1F53-\\u1F55\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F61\\u1F63-\\u1F65\\u1F67\\u1F69\\u1F6B-\\u1F6D\\u1F6F\\u1F71\\u1F73\\u1F75\\u1F77\\u1F79\\u1F7B\\u1F7D\\u1F81\\u1F83-\\u1F85\\u1F87\\u1F89\\u1F8B-\\u1F8D\\u1F8F\\u1F91\\u1F93-\\u1F95\\u1F97\\u1F99\\u1F9B-\\u1F9D\\u1F9F\\u1FA1\\u1FA3-\\u1FA5\\u1FA7\\u1FA9\\u1FAB-\\u1FAD\\u1FAF-\\u1FB1\\u1FB4\\u1FB8-\\u1FB9\\u1FBB\\u1FC4\\u1FC9\\u1FCB\\u1FCE\\u1FD0-\\u1FD1\\u1FD3\\u1FD8-\\u1FD9\\u1FDB\\u1FDE\\u1FE0-\\u1FE1\\u1FE3\\u1FE5\\u1FE8-\\u1FE9\\u1FEB-\\u1FEC\\u1FEE\\u1FF4\\u1FF9\\u1FFB\\u212A-\\u212B\\uE04D\\uE064]", + + "[\\u0901-\\u0903\\u0905-\\u0939\\u093C-\\u094D\\u0950-\\u0954\\u0958-\\u096F]", +}; + +class CmdPattern : public UPerfFunction { +private: + UnicodeString pat; + UnicodeSet set; +public: + CmdPattern(const char * pattern):pat(pattern,""){ + } + virtual long getOperationsPerIteration(){ + return 1; + } + virtual void call(UErrorCode* pErrorCode){ + set.applyPattern(pat, *pErrorCode); + } +}; + +class CmdOp : public UPerfFunction { +private: + UnicodeSet us; + BitSet bs; + int32_t total; + void (CmdOp::*op) (); +public: + CmdOp(UCharCategory prop, void (CmdOp::*op)()):op(op){ + total = 0; + bs.clearAll(); + for (UChar32 cp=0; cp<0x110000; ++cp) { + if (u_charType(cp) == prop) { + bs.set((int32_t) cp); + ++total; + } + } + } + virtual long getOperationsPerIteration(){ + return total; + } + + virtual void call(UErrorCode* pErrorCode){ + (this->*op)(); + } + void add (void){ + us.clear(); + for (UChar32 cp=0; cp<0x110000; ++cp) { + if (bs.get((int32_t) cp)) { + us.add(cp); + } + } + } + + void contains(void){ + int32_t temp = 0; + us.clear(); + for (UChar32 cp=0; cp<0x110000; ++cp) { + if (us.contains(cp)) { + temp += cp; + } + } + } + + void iterator(void){ + int32_t temp = 0; + UnicodeSetIterator uit(us); + while (uit.next()) { + temp += uit.getCodepoint(); + } + } +}; + +class UsetPerformanceTest : public UPerfTest{ +public: + UsetPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status) :UPerfTest(argc,argv,status){ + } + + virtual UPerfFunction* runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ){ + switch (index) { + case 0: name = "titlecase_letter_add"; + if (exec) return new CmdOp(U_TITLECASE_LETTER, CmdOp::add) ; break; + case 1: name = "titlecase_letter_contains"; + if (exec) return new CmdOp(U_TITLECASE_LETTER, CmdOp::contains) ; break; + case 2: name = "titlecase_letter_iterator"; + if (exec) return new CmdOp(U_TITLECASE_LETTER, CmdOp::iterator) ; break; + case 3: name = "unassigned_add"; + if (exec) return new CmdOp(U_UNASSIGNED, CmdOp::add) ; break; + case 4: name = "unassigned_contains"; + if (exec) return new CmdOp(U_UNASSIGNED, CmdOp::contains) ; break; + case 5: name = "unassigned_iterator"; + if (exec) return new CmdOp(U_UNASSIGNED, CmdOp::iterator) ; break; + case 6: name = "pattern1"; + if (exec) return new CmdPattern(PAT[0]) ; break; + case 7: name = "pattern2"; + if (exec) return new CmdPattern(PAT[1]) ; break; + case 8: name = "pattern3"; + if (exec) return new CmdPattern(PAT[2]) ; break; + default: name = ""; break; + } + return NULL; + } +}; + + +int main(int argc, const char *argv[]) +{ + UErrorCode status = U_ZERO_ERROR; + UsetPerformanceTest test(argc, argv, status); + + if (U_FAILURE(status)){ + printf("The error is %s\n", u_errorName(status)); + return status; + } + + if (test.run() == FALSE){ + fprintf(stderr, "FAILED: Tests could not be run please check the " + "arguments.\n"); + return -1; + } + return 0; +} diff --git a/icuSources/test/perf/usetperf/usetperf.vcproj b/icuSources/test/perf/usetperf/usetperf.vcproj new file mode 100644 index 00000000..6d623317 --- /dev/null +++ b/icuSources/test/perf/usetperf/usetperf.vcproj @@ -0,0 +1,203 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="usetperf" + ProjectGUID="{EC5DF28A-D789-4C46-A55D-0AD55B50ECE8}" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + PrecompiledHeaderFile=".\Release/usetperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icutu.lib winmm.lib icutest.lib" + OutputFile=".\Release/usetperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib" + ProgramDatabaseFile=".\Release/usetperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/usetperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + PrecompiledHeaderFile=".\Debug/usetperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icutud.lib winmm.lib icutestd.lib" + OutputFile=".\Debug/usetperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/usetperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/usetperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath="bitset.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="..\..\common" + PreprocessorDefinitions=""/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\common" + PreprocessorDefinitions="" + BasicRuntimeChecks="3"/> + </FileConfiguration> + </File> + <File + RelativePath="usetperf.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + AdditionalIncludeDirectories="..\..\common" + PreprocessorDefinitions=""/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\common" + PreprocessorDefinitions="" + BasicRuntimeChecks="3"/> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath=".\bitset.h"> + </File> + <File + RelativePath=".\timer.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/perf/ustrperf/Makefile.in b/icuSources/test/perf/ustrperf/Makefile.in new file mode 100644 index 00000000..6432ae79 --- /dev/null +++ b/icuSources/test/perf/ustrperf/Makefile.in @@ -0,0 +1,78 @@ +## Makefile.in for ICU - test/perf/ustrperf +## Copyright (c) 2001-2006, International Business Machines Corporation and +## others. All Rights Reserved. + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../../.. + +include $(top_builddir)/icudefs.mk + +## Build directory information +subdir = test/perf/ustrperf + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) + +## Target information +TARGET = ustrperf + +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) + +OBJECTS = stringperf.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) + +install-local: + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(OBJECTS) $(TARGET) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: all-local + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(TARGET) : $(OBJECTS) + $(LINK.cc) -o $@ $^ $(LIBS) + +invoke: + ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) $(INVOCATION) + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +ifneq ($(patsubst %install,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif +endif + diff --git a/icuSources/test/perf/ustrperf/stringperf.cpp b/icuSources/test/perf/ustrperf/stringperf.cpp index 653e1a02..342e060a 100644 --- a/icuSources/test/perf/ustrperf/stringperf.cpp +++ b/icuSources/test/perf/ustrperf/stringperf.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (C) 2002-2004 International Business Machines Corporation + * Copyright (C) 2002-2006 International Business Machines Corporation * and others. All Rights Reserved. * ********************************************************************/ @@ -9,7 +9,7 @@ * * Modification History: * Name Description -* Doug Wang Second version +* Doug Wang Second version * Doug Wang First Version ****************************************************************************** */ @@ -28,55 +28,55 @@ int main(int argc, const char *argv[]) { UErrorCode status = U_ZERO_ERROR; - bCatenatePrealloc=TRUE; + bCatenatePrealloc=TRUE; StringPerformanceTest test(argc, argv, status); - if (U_FAILURE(status)){ + if (U_FAILURE(status)){ return status; } - - int loops = LOOPS; - if (bCatenatePrealloc) { - int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); - catICU = new UnicodeString(to_alloc,'a',0); - //catICU = new UnicodeString(); - - catStd = new stlstring(); - catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); - //catStd -> reserve(110000000); - } else { - catICU = new UnicodeString(); - catStd = new stlstring(); - } + + int loops = LOOPS; + if (bCatenatePrealloc) { + int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); + catICU = new UnicodeString(to_alloc,'a',0); + //catICU = new UnicodeString(); + + catStd = new stlstring(); + catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); + //catStd -> reserve(110000000); + } else { + catICU = new UnicodeString(); + catStd = new stlstring(); + } if (test.run() == FALSE){ fprintf(stderr, "FAILED: Tests could not be run please check the " - "arguments.\n"); + "arguments.\n"); return -1; } - delete catICU; - delete catStd; + delete catICU; + delete catStd; return 0; } StringPerformanceTest::StringPerformanceTest(int32_t argc, const char *argv[], - UErrorCode &status) - : UPerfTest(argc, argv, status) + UErrorCode &status) + : UPerfTest(argc, argv, status) { - filelines_=NULL; - StrBuffer=NULL; - StrBufferLen=0; + filelines_=NULL; + StrBuffer=NULL; + StrBufferLen=0; - int32_t len =0; + int32_t len =0; - if (status== U_ILLEGAL_ARGUMENT_ERROR){ - //fprintf(stderr,gUsageString, "stringperf"); - return; + if (status== U_ILLEGAL_ARGUMENT_ERROR){ + //fprintf(stderr,gUsageString, "stringperf"); + return; } if (U_FAILURE(status)){ fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", - u_errorName(status)); + u_errorName(status)); return; } @@ -87,15 +87,15 @@ StringPerformanceTest::StringPerformanceTest(int32_t argc, const char *argv[], fprintf(stderr, "FAILED to read lines from file and create UPerfTest object. Error: %s\n", u_errorName(status)); return; } - - filelines_ = new ULine[numLines]; - for (int i =0; i < numLines; i++) { - len = filelines[i].len; - filelines_[i].name = new UChar[len]; + + filelines_ = new ULine[numLines]; + for (int i =0; i < numLines; i++) { + len = filelines[i].len; + filelines_[i].name = new UChar[len]; filelines_[i].len = len; - memcpy(filelines_[i].name, filelines[i].name, len * U_SIZEOF_UCHAR); - } - + memcpy(filelines_[i].name, filelines[i].name, len * U_SIZEOF_UCHAR); + } + }else if(bulk_mode){ int32_t srcLen = 0; const UChar* src = getBuffer(srcLen,status); @@ -103,50 +103,50 @@ StringPerformanceTest::StringPerformanceTest(int32_t argc, const char *argv[], fprintf(stderr, "FAILED to read buffer from file and create UPerfTest object. Error: %s\n", u_errorName(status)); return; } - - StrBuffer = new UChar[srcLen]; - StrBufferLen = srcLen; - memcpy(StrBuffer, src, srcLen * U_SIZEOF_UCHAR); + + StrBuffer = new UChar[srcLen]; + StrBufferLen = srcLen; + memcpy(StrBuffer, src, srcLen * U_SIZEOF_UCHAR); } } StringPerformanceTest::~StringPerformanceTest() { - delete[] filelines_; - delete[] StrBuffer; + delete[] filelines_; + delete[] StrBuffer; } UPerfFunction* StringPerformanceTest::runIndexedTest(int32_t index, UBool exec, - const char *&name, - char* par) + const char *&name, + char* par) { switch (index) { TESTCASE(0, TestCtor); - TESTCASE(1, TestCtor1); - TESTCASE(2, TestCtor2); - TESTCASE(3, TestCtor3); - TESTCASE(4, TestAssign); - TESTCASE(5, TestAssign1); - TESTCASE(6, TestAssign2); - TESTCASE(7, TestGetch); - TESTCASE(8, TestCatenate); - TESTCASE(9, TestScan); - TESTCASE(10, TestScan1); - TESTCASE(11, TestScan2); - - TESTCASE(12, TestStdLibCtor); - TESTCASE(13, TestStdLibCtor1); - TESTCASE(14, TestStdLibCtor2); - TESTCASE(15, TestStdLibCtor3); - TESTCASE(16, TestStdLibAssign); - TESTCASE(17, TestStdLibAssign1); - TESTCASE(18, TestStdLibAssign2); - TESTCASE(19, TestStdLibGetch); - TESTCASE(20, TestStdLibCatenate); - TESTCASE(21, TestStdLibScan); - TESTCASE(22, TestStdLibScan1); - TESTCASE(23, TestStdLibScan2); + TESTCASE(1, TestCtor1); + TESTCASE(2, TestCtor2); + TESTCASE(3, TestCtor3); + TESTCASE(4, TestAssign); + TESTCASE(5, TestAssign1); + TESTCASE(6, TestAssign2); + TESTCASE(7, TestGetch); + TESTCASE(8, TestCatenate); + TESTCASE(9, TestScan); + TESTCASE(10, TestScan1); + TESTCASE(11, TestScan2); + + TESTCASE(12, TestStdLibCtor); + TESTCASE(13, TestStdLibCtor1); + TESTCASE(14, TestStdLibCtor2); + TESTCASE(15, TestStdLibCtor3); + TESTCASE(16, TestStdLibAssign); + TESTCASE(17, TestStdLibAssign1); + TESTCASE(18, TestStdLibAssign2); + TESTCASE(19, TestStdLibGetch); + TESTCASE(20, TestStdLibCatenate); + TESTCASE(21, TestStdLibScan); + TESTCASE(22, TestStdLibScan1); + TESTCASE(23, TestStdLibScan2); default: name = ""; @@ -157,219 +157,221 @@ UPerfFunction* StringPerformanceTest::runIndexedTest(int32_t index, UBool exec, UPerfFunction* StringPerformanceTest::TestCtor() { - if (line_mode) { - return new StringPerfFunction(ctor, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(ctor, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(ctor, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(ctor, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestCtor1() { - if (line_mode) { - return new StringPerfFunction(ctor1, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(ctor1, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(ctor1, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(ctor1, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestCtor2() { - if (line_mode) { - return new StringPerfFunction(ctor2, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(ctor2, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(ctor2, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(ctor2, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestCtor3() { - if (line_mode) { - return new StringPerfFunction(ctor3, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(ctor3, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(ctor3, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(ctor3, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestAssign() { - if (line_mode) { - return new StringPerfFunction(assign, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(assign, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(assign, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(assign, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestAssign1() { - if (line_mode) { - return new StringPerfFunction(assign1, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(assign1, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(assign1, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(assign1, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestAssign2() { - if (line_mode) { - return new StringPerfFunction(assign2, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(assign2, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(assign2, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(assign2, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestGetch() { - if (line_mode) { - return new StringPerfFunction(getch, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(getch, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(getch, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(getch, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestCatenate() { - if (line_mode) { - return new StringPerfFunction(catenate, filelines_, numLines, uselen); - } else { - //return new StringPerfFunction(catenate, buffer, bufferLen, uselen); - return new StringPerfFunction(catenate, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(catenate, filelines_, numLines, uselen); + } else { + //return new StringPerfFunction(catenate, buffer, bufferLen, uselen); + return new StringPerfFunction(catenate, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestScan() { - if (line_mode) { - return new StringPerfFunction(scan, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(scan, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(scan, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(scan, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestScan1() { - if (line_mode) { - return new StringPerfFunction(scan1, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(scan1, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(scan1, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(scan1, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestScan2() { - if (line_mode) { - return new StringPerfFunction(scan2, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(scan2, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(scan2, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(scan2, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibCtor() { - if (line_mode) { - return new StringPerfFunction(StdLibCtor, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibCtor, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibCtor, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibCtor, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibCtor1() { - if (line_mode) { - return new StringPerfFunction(StdLibCtor1, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibCtor1, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibCtor1, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibCtor1, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibCtor2() { - if (line_mode) { - return new StringPerfFunction(StdLibCtor2, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibCtor2, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibCtor2, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibCtor2, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibCtor3() { - if (line_mode) { - return new StringPerfFunction(StdLibCtor3, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibCtor3, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibCtor3, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibCtor3, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibAssign() { - if (line_mode) { - return new StringPerfFunction(StdLibAssign, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibAssign, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibAssign, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibAssign, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibAssign1() { - if (line_mode) { - return new StringPerfFunction(StdLibAssign1, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibAssign1, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibAssign1, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibAssign1, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibAssign2() { - if (line_mode) { - return new StringPerfFunction(StdLibAssign2, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibAssign2, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibAssign2, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibAssign2, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibGetch() { - if (line_mode) { - return new StringPerfFunction(StdLibGetch, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibGetch, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibGetch, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibGetch, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibCatenate() { - if (line_mode) { - return new StringPerfFunction(StdLibCatenate, filelines_, numLines, uselen); - } else { - //return new StringPerfFunction(StdLibCatenate, buffer, bufferLen, uselen); - return new StringPerfFunction(StdLibCatenate, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibCatenate, filelines_, numLines, uselen); + } else { + //return new StringPerfFunction(StdLibCatenate, buffer, bufferLen, uselen); + return new StringPerfFunction(StdLibCatenate, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibScan() { - if (line_mode) { - return new StringPerfFunction(StdLibScan, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibScan, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibScan, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibScan, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibScan1() { - if (line_mode) { - return new StringPerfFunction(StdLibScan1, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibScan1, StrBuffer, StrBufferLen, uselen); - } + if (line_mode) { + return new StringPerfFunction(StdLibScan1, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibScan1, StrBuffer, StrBufferLen, uselen); + } } UPerfFunction* StringPerformanceTest::TestStdLibScan2() { - if (line_mode) { - return new StringPerfFunction(StdLibScan2, filelines_, numLines, uselen); - } else { - return new StringPerfFunction(StdLibScan2, StrBuffer, StrBufferLen, uselen); - } -} \ No newline at end of file + if (line_mode) { + return new StringPerfFunction(StdLibScan2, filelines_, numLines, uselen); + } else { + return new StringPerfFunction(StdLibScan2, StrBuffer, StrBufferLen, uselen); + } +} + + diff --git a/icuSources/test/perf/ustrperf/stringperf.h b/icuSources/test/perf/ustrperf/stringperf.h index f3b83ad0..84d6493a 100644 --- a/icuSources/test/perf/ustrperf/stringperf.h +++ b/icuSources/test/perf/ustrperf/stringperf.h @@ -1,25 +1,25 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** -********************************************************************** */ #ifndef _STRINGPERF_H #define _STRINGPERF_H #include <string> -#include "uperf.h" #include "unicode/utypes.h" #include "unicode/unistr.h" +#include "unicode/uperf.h" + typedef std::wstring stlstring; /* Define all constants for test case operations */ #define MAXNUMLINES 40000 //Max number of lines in a test data file #define MAXSRCLEN 20 //Max length of one line. maybe a larger number, but it need more mem -#define LOOPS 100 //Iterations +#define LOOPS 100 //Iterations //#define LOOPS 10 #define catenate_STRLEN 2 @@ -61,385 +61,385 @@ class StringPerfFunction : public UPerfFunction { public: - virtual long getEventsPerIteration(){ - int loops = LOOPS; - if (catICU) { delete catICU;} - if (catStd) { delete catStd;} - - if (bCatenatePrealloc) { - - int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); - catICU = new UnicodeString(to_alloc,'a',0); - //catICU = new UnicodeString(); - - catStd = new stlstring(); - //catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); - catStd -> reserve(110000000); - } else { - catICU = new UnicodeString(); - catStd = new stlstring(); - } - - return -1; + virtual long getEventsPerIteration(){ + int loops = LOOPS; + if (catICU) { delete catICU;} + if (catStd) { delete catStd;} + + if (bCatenatePrealloc) { + + int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); + catICU = new UnicodeString(to_alloc,'a',0); + //catICU = new UnicodeString(); + + catStd = new stlstring(); + //catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); + catStd -> reserve(110000000); + } else { + catICU = new UnicodeString(); + catStd = new stlstring(); + } + + return -1; } - virtual void call(UErrorCode* status) - { + virtual void call(UErrorCode* status) + { if(line_mode_==TRUE){ if(uselen_){ for(int32_t i = 0; i< numLines_; i++){ - if (fnType_==Fn_ICU) { - (*fn1_)(lines_[i].name,lines_[i].len,uS0_[i]); - } else { - (*fn2_)(wlines_[i].name,wlines_[i].len,sS0_[i]); - } + if (fnType_==Fn_ICU) { + (*fn1_)(lines_[i].name,lines_[i].len,uS0_[i]); + } else { + (*fn2_)(wlines_[i].name,wlines_[i].len,sS0_[i]); + } } }else{ for(int32_t i = 0; i< numLines_; i++){ if (fnType_==Fn_ICU) { - (*fn1_)(lines_[i].name,-1,uS0_[i]); - } else { - (*fn2_)(wlines_[i].name,-1,sS0_[i]); - } + (*fn1_)(lines_[i].name,-1,uS0_[i]); + } else { + (*fn2_)(wlines_[i].name,-1,sS0_[i]); + } } } }else{ if(uselen_){ - if (fnType_==Fn_ICU) { - (*fn1_)(src_,srcLen_,*ubulk_); - } else { - (*fn2_)(wsrc_,wsrcLen_,*sbulk_); - } + if (fnType_==Fn_ICU) { + (*fn1_)(src_,srcLen_,*ubulk_); + } else { + (*fn2_)(wsrc_,wsrcLen_,*sbulk_); + } }else{ - if (fnType_==Fn_ICU) { - (*fn1_)(src_,-1,*ubulk_); - } else { - (*fn2_)(wsrc_,-1,*sbulk_); - } + if (fnType_==Fn_ICU) { + (*fn1_)(src_,-1,*ubulk_); + } else { + (*fn2_)(wsrc_,-1,*sbulk_); + } } } - } + } - virtual long getOperationsPerIteration() - { + virtual long getOperationsPerIteration() + { if(line_mode_==TRUE){ return numLines_; }else{ return 1; } - } - - StringPerfFunction(ICUStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) - { - - fn1_ = func; - lines_=srcLines; - wlines_=NULL; - numLines_=srcNumLines; - uselen_=uselen; - line_mode_=TRUE; + } + + StringPerfFunction(ICUStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) + { + + fn1_ = func; + lines_=srcLines; + wlines_=NULL; + numLines_=srcNumLines; + uselen_=uselen; + line_mode_=TRUE; src_ = NULL; srcLen_ = 0; - wsrc_ = NULL; - wsrcLen_ = 0; - fnType_ = Fn_ICU; - - uS0_=new UnicodeString[numLines_]; - for(int32_t i=0; i<numLines_; i++) { - uS0_[i]=UnicodeString(lines_[i].name, lines_[i].len); - } - sS0_=NULL; - ubulk_=NULL; - sbulk_=NULL; - } - - StringPerfFunction(StdStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) - { - - fn2_ = func; - lines_=srcLines; - wlines_=NULL; - numLines_=srcNumLines; - uselen_=uselen; - line_mode_=TRUE; + wsrc_ = NULL; + wsrcLen_ = 0; + fnType_ = Fn_ICU; + + uS0_=new UnicodeString[numLines_]; + for(int32_t i=0; i<numLines_; i++) { + uS0_[i]=UnicodeString(lines_[i].name, lines_[i].len); + } + sS0_=NULL; + ubulk_=NULL; + sbulk_=NULL; + } + + StringPerfFunction(StdStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen) + { + + fn2_ = func; + lines_=srcLines; + wlines_=NULL; + numLines_=srcNumLines; + uselen_=uselen; + line_mode_=TRUE; src_ = NULL; srcLen_ = 0; - wsrc_ = NULL; - wsrcLen_ = 0; - fnType_ = Fn_STD; - - uS0_=NULL; - ubulk_=NULL; - sbulk_=NULL; - - //fillin wlines_[], sS0_[] - prepareLinesForStd(); - } - - StringPerfFunction(ICUStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) - { - - fn1_ = func; - lines_=NULL; - wlines_=NULL; - numLines_=0; - uselen_=uselen; - line_mode_=FALSE; - src_ = new UChar[sourceLen]; - memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); + wsrc_ = NULL; + wsrcLen_ = 0; + fnType_ = Fn_STD; + + uS0_=NULL; + ubulk_=NULL; + sbulk_=NULL; + + //fillin wlines_[], sS0_[] + prepareLinesForStd(); + } + + StringPerfFunction(ICUStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) + { + + fn1_ = func; + lines_=NULL; + wlines_=NULL; + numLines_=0; + uselen_=uselen; + line_mode_=FALSE; + src_ = new UChar[sourceLen]; + memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); srcLen_ = sourceLen; - wsrc_ = NULL; - wsrcLen_ = 0; - fnType_ = Fn_ICU; - - uS0_=NULL; - sS0_=NULL; - ubulk_=new UnicodeString(src_,srcLen_); - sbulk_=NULL; - } - - StringPerfFunction(StdStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) - { - - fn2_ = func; - lines_=NULL; - wlines_=NULL; - numLines_=0; - uselen_=uselen; - line_mode_=FALSE; - src_ = new UChar[sourceLen]; - memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); + wsrc_ = NULL; + wsrcLen_ = 0; + fnType_ = Fn_ICU; + + uS0_=NULL; + sS0_=NULL; + ubulk_=new UnicodeString(src_,srcLen_); + sbulk_=NULL; + } + + StringPerfFunction(StdStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen) + { + + fn2_ = func; + lines_=NULL; + wlines_=NULL; + numLines_=0; + uselen_=uselen; + line_mode_=FALSE; + src_ = new UChar[sourceLen]; + memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR); srcLen_ = sourceLen; - fnType_ = Fn_STD; - - uS0_=NULL; - sS0_=NULL; - ubulk_=NULL; - - //fillin wsrc_, sbulk_ - prepareBulkForStd(); - - } - - ~StringPerfFunction() - { - //free(src_); - free(wsrc_); - delete[] src_; - delete ubulk_; - delete sbulk_; - delete[] uS0_; - delete[] sS0_; - delete[] wlines_; - } + fnType_ = Fn_STD; + + uS0_=NULL; + sS0_=NULL; + ubulk_=NULL; + + //fillin wsrc_, sbulk_ + prepareBulkForStd(); + + } + + ~StringPerfFunction() + { + //free(src_); + free(wsrc_); + delete[] src_; + delete ubulk_; + delete sbulk_; + delete[] uS0_; + delete[] sS0_; + delete[] wlines_; + } private: - void prepareLinesForStd(void) - { - UErrorCode err=U_ZERO_ERROR; - - wlines_=new WLine[numLines_]; + void prepareLinesForStd(void) + { + UErrorCode err=U_ZERO_ERROR; + + wlines_=new WLine[numLines_]; wchar_t ws[100]; int32_t wcap = sizeof(ws) / sizeof(*ws); int32_t wl; - wchar_t* wcs; - - sS0_=new stlstring[numLines_]; - for(int32_t i=0; i<numLines_; i++) { - if(uselen_) { - wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len, &err); - memcpy(wlines_[i].name, wcs, wl * sizeof(wchar_t)); - wlines_[i].len = wl; - sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len); - } else { - wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len-1, &err); - memcpy(wlines_[i].name, wcs, wl*sizeof(wchar_t)); - wlines_[i].len = wl; - sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len+1); - } - - if (U_FAILURE(err)) { - return; - } - } - - } - - void prepareBulkForStd(void) - { - UErrorCode err=U_ZERO_ERROR; - - const UChar* uSrc = src_; - int32_t uSrcLen = srcLen_; - wchar_t* wDest = NULL; - int32_t wDestLen = 0; - int32_t reqLen= 0 ; - - if(uselen_) { - /* pre-flight*/ - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); - - if(err == U_BUFFER_OVERFLOW_ERROR){ - err=U_ZERO_ERROR; - wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen)); - wDestLen = reqLen; - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); - } - - if (U_SUCCESS(err)) { - wsrc_ = wDest; - wsrcLen_ = wDestLen; - sbulk_=new stlstring(wsrc_,wsrcLen_); - } - - } else { - /* pre-flight*/ - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); - - if(err == U_BUFFER_OVERFLOW_ERROR){ - err=U_ZERO_ERROR; - wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); - wDestLen = reqLen+1; - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); - } - - if (U_SUCCESS(err)) { - wsrc_ = wDest; - wsrcLen_ = wDestLen; - sbulk_=new stlstring(wsrc_); - } - } - - //free(wDest); - } + wchar_t* wcs; + + sS0_=new stlstring[numLines_]; + for(int32_t i=0; i<numLines_; i++) { + if(uselen_) { + wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len, &err); + memcpy(wlines_[i].name, wcs, wl * sizeof(wchar_t)); + wlines_[i].len = wl; + sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len); + } else { + wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len-1, &err); + memcpy(wlines_[i].name, wcs, wl*sizeof(wchar_t)); + wlines_[i].len = wl; + sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len+1); + } + + if (U_FAILURE(err)) { + return; + } + } + + } + + void prepareBulkForStd(void) + { + UErrorCode err=U_ZERO_ERROR; + + const UChar* uSrc = src_; + int32_t uSrcLen = srcLen_; + wchar_t* wDest = NULL; + int32_t wDestLen = 0; + int32_t reqLen= 0 ; + + if(uselen_) { + /* pre-flight*/ + u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); + + if(err == U_BUFFER_OVERFLOW_ERROR){ + err=U_ZERO_ERROR; + wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen)); + wDestLen = reqLen; + u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err); + } + + if (U_SUCCESS(err)) { + wsrc_ = wDest; + wsrcLen_ = wDestLen; + sbulk_=new stlstring(wsrc_,wsrcLen_); + } + + } else { + /* pre-flight*/ + u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); + + if(err == U_BUFFER_OVERFLOW_ERROR){ + err=U_ZERO_ERROR; + wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); + wDestLen = reqLen+1; + u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); + } + + if (U_SUCCESS(err)) { + wsrc_ = wDest; + wsrcLen_ = wDestLen; + sbulk_=new stlstring(wsrc_); + } + } + + //free(wDest); + } private: - ICUStringPerfFn fn1_; - StdStringPerfFn fn2_; - - ULine* lines_; - WLine* wlines_; - int32_t numLines_; - - UBool uselen_; - UChar* src_; - int32_t srcLen_; - wchar_t* wsrc_; - int32_t wsrcLen_; + ICUStringPerfFn fn1_; + StdStringPerfFn fn2_; + + ULine* lines_; + WLine* wlines_; + int32_t numLines_; + + UBool uselen_; + UChar* src_; + int32_t srcLen_; + wchar_t* wsrc_; + int32_t wsrcLen_; UBool line_mode_; - - //added for preparing testing data - UnicodeString* uS0_; - stlstring* sS0_; - UnicodeString* ubulk_; - stlstring* sbulk_; - FnType fnType_; -}; + + //added for preparing testing data + UnicodeString* uS0_; + stlstring* sS0_; + UnicodeString* ubulk_; + stlstring* sbulk_; + FnType fnType_; +}; class StringPerformanceTest : public UPerfTest { public: - StringPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); - ~StringPerformanceTest(); - virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, - const char *&name, - char *par = NULL); - UPerfFunction* TestCtor(); - UPerfFunction* TestCtor1(); - UPerfFunction* TestCtor2(); - UPerfFunction* TestCtor3(); - UPerfFunction* TestAssign(); - UPerfFunction* TestAssign1(); - UPerfFunction* TestAssign2(); - UPerfFunction* TestGetch(); - UPerfFunction* TestCatenate(); - UPerfFunction* TestScan(); - UPerfFunction* TestScan1(); - UPerfFunction* TestScan2(); - - UPerfFunction* TestStdLibCtor(); - UPerfFunction* TestStdLibCtor1(); - UPerfFunction* TestStdLibCtor2(); - UPerfFunction* TestStdLibCtor3(); - UPerfFunction* TestStdLibAssign(); - UPerfFunction* TestStdLibAssign1(); - UPerfFunction* TestStdLibAssign2(); - UPerfFunction* TestStdLibGetch(); - UPerfFunction* TestStdLibCatenate(); - UPerfFunction* TestStdLibScan(); - UPerfFunction* TestStdLibScan1(); - UPerfFunction* TestStdLibScan2(); + StringPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status); + ~StringPerformanceTest(); + virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, + const char *&name, + char *par = NULL); + UPerfFunction* TestCtor(); + UPerfFunction* TestCtor1(); + UPerfFunction* TestCtor2(); + UPerfFunction* TestCtor3(); + UPerfFunction* TestAssign(); + UPerfFunction* TestAssign1(); + UPerfFunction* TestAssign2(); + UPerfFunction* TestGetch(); + UPerfFunction* TestCatenate(); + UPerfFunction* TestScan(); + UPerfFunction* TestScan1(); + UPerfFunction* TestScan2(); + + UPerfFunction* TestStdLibCtor(); + UPerfFunction* TestStdLibCtor1(); + UPerfFunction* TestStdLibCtor2(); + UPerfFunction* TestStdLibCtor3(); + UPerfFunction* TestStdLibAssign(); + UPerfFunction* TestStdLibAssign1(); + UPerfFunction* TestStdLibAssign2(); + UPerfFunction* TestStdLibGetch(); + UPerfFunction* TestStdLibCatenate(); + UPerfFunction* TestStdLibScan(); + UPerfFunction* TestStdLibScan1(); + UPerfFunction* TestStdLibScan2(); private: - long COUNT_; - ULine* filelines_; - UChar* StrBuffer; - int32_t StrBufferLen; + long COUNT_; + ULine* filelines_; + UChar* StrBuffer; + int32_t StrBufferLen; }; -inline void ctor(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void ctor(const UChar* src,int32_t srcLen, UnicodeString s0) { - UnicodeString a; + UnicodeString a; } -inline void ctor1(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void ctor1(const UChar* src,int32_t srcLen, UnicodeString s0) { - UnicodeString b(uTESTCHAR1); + UnicodeString b(uTESTCHAR1); } -inline void ctor2(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void ctor2(const UChar* src,int32_t srcLen, UnicodeString s0) { - UnicodeString c(uEMPTY); + UnicodeString c(uEMPTY); } -inline void ctor3(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void ctor3(const UChar* src,int32_t srcLen, UnicodeString s0) { - UnicodeString d(src,srcLen); + UnicodeString d(src,srcLen); } inline UnicodeString icu_assign_helper(const UChar* src,int32_t srcLen) { - if (srcLen==-1) { return src;} - else { return UnicodeString(src, srcLen);} + if (srcLen==-1) { return src;} + else { return UnicodeString(src, srcLen);} } -inline void assign(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void assign(const UChar* src,int32_t srcLen, UnicodeString s0) { - unistr = icu_assign_helper(src,srcLen); + unistr = icu_assign_helper(src,srcLen); } -inline void assign1(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void assign1(const UChar* src,int32_t srcLen, UnicodeString s0) { - unistr.setTo(src, srcLen); + unistr.setTo(src, srcLen); } -inline void assign2(const UChar* src,int32_t srcLen, UnicodeString s0) +inline void assign2(const UChar* src,int32_t srcLen, UnicodeString s0) { - unistr = s0; + unistr = s0; } inline void getch(const UChar* src,int32_t srcLen, UnicodeString s0) { - s0.charAt(0); + s0.charAt(0); } inline void catenate(const UChar* src,int32_t srcLen, UnicodeString s0) { - UTimer mystart, mystop; - utimer_getTime(&mystart); - - *catICU += s0; - - utimer_getTime(&mystop); + UTimer mystart, mystop; + utimer_getTime(&mystart); + + *catICU += s0; + + utimer_getTime(&mystop); double mytime = utimer_getDeltaSeconds(&mystart,&mystop); - printf("\nmytime=%f \n", mytime); + printf("\nmytime=%f \n", mytime); - *catICU += uCatenate_STR; + *catICU += uCatenate_STR; } volatile int scan_idx; @@ -447,103 +447,103 @@ U_STRING_DECL(SCAN1, "123", 3); inline void scan(const UChar* src,int32_t srcLen, UnicodeString s0) { - UChar c='.'; - scan_idx = uScan_STRING.indexOf(c); + UChar c='.'; + scan_idx = uScan_STRING.indexOf(c); } inline void scan1(const UChar* src,int32_t srcLen, UnicodeString s0) { - scan_idx = uScan_STRING.indexOf(SCAN1,3); + scan_idx = uScan_STRING.indexOf(SCAN1,3); } inline void scan2(const UChar* src,int32_t srcLen, UnicodeString s0) { - UChar c1='s'; - UChar c2='m'; - scan_idx = uScan_STRING.indexOf(c1); - scan_idx = uScan_STRING.indexOf(c2); + UChar c1='s'; + UChar c2='m'; + scan_idx = uScan_STRING.indexOf(c1); + scan_idx = uScan_STRING.indexOf(c2); } inline void StdLibCtor(const wchar_t* src,int32_t srcLen, stlstring s0) { - stlstring a; + stlstring a; } inline void StdLibCtor1(const wchar_t* src,int32_t srcLen, stlstring s0) { - - stlstring b(simulate); + stlstring b(simulate); } inline void StdLibCtor2(const wchar_t* src,int32_t srcLen, stlstring s0) { - stlstring c(sEMPTY); + stlstring c(sEMPTY); } inline void StdLibCtor3(const wchar_t* src,int32_t srcLen, stlstring s0) { - if (srcLen==-1) { - stlstring d(src); - }else { - stlstring d(src, srcLen); - } + if (srcLen==-1) { + stlstring d(src); + }else { + stlstring d(src, srcLen); + } } inline stlstring stl_assign_helper(const wchar_t* src,int32_t srcLen) { - if (srcLen==-1) { return src;} - else { return stlstring(src, srcLen);} + if (srcLen==-1) { return src;} + else { return stlstring(src, srcLen);} } -inline void StdLibAssign(const wchar_t* src,int32_t srcLen, stlstring s0) +inline void StdLibAssign(const wchar_t* src,int32_t srcLen, stlstring s0) { - stlstr = stl_assign_helper(src,srcLen); + stlstr = stl_assign_helper(src,srcLen); } -inline void StdLibAssign1(const wchar_t* src,int32_t srcLen, stlstring s0) +inline void StdLibAssign1(const wchar_t* src,int32_t srcLen, stlstring s0) { - if (srcLen==-1) { stlstr=src;} - else { stlstr.assign(src, srcLen);} + if (srcLen==-1) { stlstr=src;} + else { stlstr.assign(src, srcLen);} } -inline void StdLibAssign2(const wchar_t* src,int32_t srcLen, stlstring s0) +inline void StdLibAssign2(const wchar_t* src,int32_t srcLen, stlstring s0) { - stlstr=s0; + stlstr=s0; } inline void StdLibGetch(const wchar_t* src,int32_t srcLen, stlstring s0) { - s0.at(0); + s0.at(0); } inline void StdLibCatenate(const wchar_t* src,int32_t srcLen, stlstring s0) { - UTimer mystart, mystop; - utimer_getTime(&mystart); + UTimer mystart, mystop; + utimer_getTime(&mystart); *catStd += s0; - *catStd += sCatenate_STR; + *catStd += sCatenate_STR; - utimer_getTime(&mystop); + utimer_getTime(&mystop); double mytime = utimer_getDeltaSeconds(&mystart,&mystop); - printf("\nmytime=%f \n", mytime); - + printf("\nmytime=%f \n", mytime); + } inline void StdLibScan(const wchar_t* src,int32_t srcLen, stlstring s0) { - scan_idx = (int) sScan_STRING.find('.'); + scan_idx = (int) sScan_STRING.find('.'); } inline void StdLibScan1(const wchar_t* src,int32_t srcLen, stlstring s0) { - scan_idx = (int) sScan_STRING.find(L"123"); + scan_idx = (int) sScan_STRING.find(L"123"); } inline void StdLibScan2(const wchar_t* src,int32_t srcLen, stlstring s0) { - scan_idx = (int) sScan_STRING.find_first_of(L"sm"); + scan_idx = (int) sScan_STRING.find_first_of(L"sm"); } -#endif // STRINGPERF_H \ No newline at end of file +#endif // STRINGPERF_H + diff --git a/icuSources/test/perf/ustrperf/stringperf.vcproj b/icuSources/test/perf/ustrperf/stringperf.vcproj index cd81e869..340d1047 100644 --- a/icuSources/test/perf/ustrperf/stringperf.vcproj +++ b/icuSources/test/perf/ustrperf/stringperf.vcproj @@ -23,7 +23,7 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="..\..\..\..\include,..\..\..\tools\toolutil,..\..\..\common" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" @@ -40,7 +40,7 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalDependencies="icuuc.lib icutu.lib winmm.lib" + AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib" OutputFile=".\Release/stringperf.exe" LinkIncremental="1" SuppressStartupBanner="TRUE" @@ -84,7 +84,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\..\..\..\include,..\..\..\tools\toolutil,..\..\..\common" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" @@ -102,7 +102,7 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalDependencies="icuucd.lib icutud.lib winmm.lib" + AdditionalDependencies="icuucd.lib icutud.lib icutestd.lib winmm.lib" OutputFile=".\Debug/stringperf.exe" LinkIncremental="1" SuppressStartupBanner="TRUE" diff --git a/icuSources/test/perf/utfperf/Makefile.in b/icuSources/test/perf/utfperf/Makefile.in new file mode 100644 index 00000000..51af2c68 --- /dev/null +++ b/icuSources/test/perf/utfperf/Makefile.in @@ -0,0 +1,78 @@ +## Makefile.in for ICU - test/perf/utfperf +## Copyright (c) 2001-2006, International Business Machines Corporation and +## others. All Rights Reserved. + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../../.. + +include $(top_builddir)/icudefs.mk + +## Build directory information +subdir = test/perf/utfperf + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) + +## Target information +TARGET = utfperf + +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/tools/ctestfw +LIBS = $(LIBCTESTFW) $(LIBICUI18N) $(LIBICUUC) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) + +OBJECTS = utfperf.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) + +install-local: + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(OBJECTS) $(TARGET) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: all-local + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(TARGET) : $(OBJECTS) + $(LINK.cc) -o $@ $^ $(LIBS) + +invoke: + ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) $(INVOCATION) + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +ifneq ($(patsubst %install,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif +endif + diff --git a/icuSources/test/perf/utfperf/UtfPerf.pl b/icuSources/test/perf/utfperf/UtfPerf.pl new file mode 100644 index 00000000..0c7ff961 --- /dev/null +++ b/icuSources/test/perf/utfperf/UtfPerf.pl @@ -0,0 +1,46 @@ +#!/usr/bin/perl -w +# ******************************************************************** +# * COPYRIGHT: +# * Copyright (c) 2005, International Business Machines Corporation and +# * others. All Rights Reserved. +# ******************************************************************** + +use strict; + +use lib '../perldriver'; + +use PerfFramework; + + +my $options = { + "title"=>"Utf performance: ICU", + "headers"=>"ICU", + "operationIs"=>"gb18030 encoding string", + "passes"=>"1", + "time"=>"2", + #"outputType"=>"HTML", + "dataDir"=>"../data", + "outputDir"=>"../results" + }; + +# programs +# tests will be done for all the programs. Results will be stored and connected +my $p = "debug/utfperf.exe -e gb18030"; + +my $tests = { + "UTF-8", ["$p UTF_8"], + "UTF-8 small buffer", ["$p UTF_8_SB"], + "SCSU", ["$p SCSU"], + "SCSU small buffer", ["$p SCSU_SB"], + "BOCU_1", ["$p BOCU_1"], + "BOCU_1 small buffer", ["$p BOCU_1_SB"], + }; + +my $dataFiles = { + "", + [ + "four.txt" + ] + }; + +runTests($options, $tests, $dataFiles); diff --git a/icuSources/test/perf/utfperf/utfperf.cpp b/icuSources/test/perf/utfperf/utfperf.cpp new file mode 100644 index 00000000..d83538bd --- /dev/null +++ b/icuSources/test/perf/utfperf/utfperf.cpp @@ -0,0 +1,156 @@ +/* +********************************************************************** +* Copyright (C) 2002-2005, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* file name: utfperf.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005Nov17 +* created by: Raymond Yang +* +* Ported from utfper.c created by Markus W. Scherer +* Performance test program for Unicode converters +*/ + +#include <stdio.h> +#include "unicode/uperf.h" + + +/* definitions and text buffers */ + +#define INPUT_CAPACITY (1024*1024) +#define INTERMEDIATE_CAPACITY 4096 +#define INTERMEDIATE_SMALL_CAPACITY 20 +#define OUTPUT_CAPACITY INPUT_CAPACITY + +static UChar input[INPUT_CAPACITY]; +static UChar output[OUTPUT_CAPACITY]; +static char intermediate[INTERMEDIATE_CAPACITY]; + +static int32_t inputLength, encodedLength, outputLength, countInputCodePoints; + + +class Command : public UPerfFunction { +private: + Command(const char * name, int32_t buf_cap):name(name),buf_cap(buf_cap){ + errorCode=U_ZERO_ERROR; + cnv=ucnv_open(name, &errorCode); + } +public: + static UPerfFunction* get(const char * name, int32_t buf_cap){ + Command * t = new Command(name, buf_cap); + if (U_SUCCESS(t->errorCode)){ + return t; + } else { + //fprintf(stderr, "error opening converter for \"%s\" - %s\n", name, u_errorName(errorCode)); + delete t; + return NULL; + } + } + virtual ~Command(){ + if(U_SUCCESS(errorCode)) { + ucnv_close(cnv); + } + } + virtual void call(UErrorCode* pErrorCode){ + const UChar *pIn, *pInLimit; + UChar *pOut, *pOutLimit; + char *pInter, *pInterLimit; + const char *p; + UBool flush; + + ucnv_reset(cnv); + + pIn=input; + pInLimit=input+inputLength; + + pOut=output; + pOutLimit=output+OUTPUT_CAPACITY; + + pInterLimit=intermediate+buf_cap; + + encodedLength=outputLength=0; + flush=FALSE; + + while(pIn<pInLimit || !flush) { + /* convert a block of [pIn..pInLimit[ to the encoding in intermediate[] */ + pInter=intermediate; + flush=(UBool)(pIn==pInLimit); + ucnv_fromUnicode(cnv, &pInter, pInterLimit, &pIn, pInLimit, NULL, flush, pErrorCode); + encodedLength+=(int32_t)(pInter-intermediate); + + if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR) { + /* in case flush was TRUE make sure that we convert once more to really flush */ + flush=FALSE; + *pErrorCode=U_ZERO_ERROR; + } else if(U_FAILURE(*pErrorCode)) { + return; + } + + /* convert the block [intermediate..pInter[ back to UTF-16 */ + p=intermediate; + ucnv_toUnicode(cnv, &pOut, pOutLimit,&p, pInter,NULL, flush,pErrorCode); + if(U_FAILURE(*pErrorCode)) { + return; + } + /* intermediate must have been consumed (p==pInter) because of the converter semantics */ + } + + outputLength=pOut-output; + if(inputLength!=outputLength) { + fprintf(stderr, "error: roundtrip failed, inputLength %d!=outputLength %d\n", inputLength, outputLength); + *pErrorCode=U_INTERNAL_PROGRAM_ERROR; + } + } + virtual long getOperationsPerIteration(){ + return countInputCodePoints; + } + const char * name; + int32_t buf_cap; + UErrorCode errorCode; + UConverter *cnv; +}; + +class UtfPerformanceTest : public UPerfTest{ +public: + UtfPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status) :UPerfTest(argc,argv,status){ + getBuffer(inputLength, status); + u_strncpy(input, buffer, inputLength); + countInputCodePoints = u_countChar32(input, inputLength); + } + + virtual UPerfFunction* runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ){ + switch (index) { + case 0: name = "UTF_8"; if (exec) return Command::get("UTF-8", INTERMEDIATE_CAPACITY); break; + case 1: name = "UTF_8_SB"; if (exec) return Command::get("UTF-8",INTERMEDIATE_SMALL_CAPACITY); break; + case 2: name = "SCSU"; if (exec) return Command::get("SCSU", INTERMEDIATE_CAPACITY); break; + case 3: name = "SCSU_SB"; if (exec) return Command::get("SCSU", INTERMEDIATE_SMALL_CAPACITY); break; + case 4: name = "BOCU_1"; if (exec) return Command::get("BOCU-1", INTERMEDIATE_CAPACITY); break; + case 5: name = "BOCU_1_SB"; if (exec) return Command::get("BOCU-1",INTERMEDIATE_SMALL_CAPACITY); break; + default: name = ""; break; + } + return NULL; + } +}; + + +int main(int argc, const char *argv[]) +{ + UErrorCode status = U_ZERO_ERROR; + UtfPerformanceTest test(argc, argv, status); + + if (U_FAILURE(status)){ + printf("The error is %s\n", u_errorName(status)); + return status; + } + + if (test.run() == FALSE){ + fprintf(stderr, "FAILED: Tests could not be run please check the " + "arguments.\n"); + return -1; + } + return 0; +} diff --git a/icuSources/test/perf/utfperf/utfperf.vcproj b/icuSources/test/perf/utfperf/utfperf.vcproj new file mode 100644 index 00000000..7846addc --- /dev/null +++ b/icuSources/test/perf/utfperf/utfperf.vcproj @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="utfperf" + ProjectGUID="{E7728E98-0469-43F4-AF37-4529A3D52C6B}" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + PrecompiledHeaderFile=".\Debug/utfperf.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icutud.lib winmm.lib icutestd.lib" + OutputFile=".\Debug/utfperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/utfperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/utfperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\tools\toolutil;..\..\..\common;..\..\..\tools\ctestfw" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + PrecompiledHeaderFile=".\Release/utfperf.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icutu.lib icutest.lib winmm.lib " + OutputFile=".\Release/utfperf.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="..\..\..\..\lib\" + ProgramDatabaseFile=".\Release/utfperf.pdb" + SubSystem="1" + TargetMachine="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/utfperf.tlb" + HeaderFileName=""/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath=".\utfperf.cpp"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt b/icuSources/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt index 88ace446..e980f37b 100644 --- a/icuSources/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt +++ b/icuSources/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt @@ -1,2272 +1,4335 @@ -0334 06DC; 06DC -0334 1D1AD; 1D1AD -06E3 0334; 06E3 -0334 0332; 0332 -0334 030E; 030E -0334 032B; 032B -0334 0350; 0350 -0334 05B5; 05B5 -0334 0670; 0670 -0334 0747; 0747 -0334 1939; 1939 -20D3 0334; 20D3 -2001 0021; 2001 -2006 0041; 2006 -1FEF 0062; 1FEF -FE4B 003F; FE4B -0385 0061; 0385 -1FCD 0061; 1FCD -005F 0021; 005F -309C 0021; 309C -2012 0021; 2012 -30A0 0021; 30A0 -066C 0021; 066C -003B 0041; 003B -0704 0021; 0704 -1804 0021; 1804 -0014 0021; 0014 -0594 0021; 0594 -06E1 0021; 06E1 -D805 0021; D805 -1D179 0021; 1D179 -E0022 0021; E0022 -E0054 0021; E0054 -E0106 0021; E0106 -E0138 0021; E0138 -E016A 0021; E016A -E019C 0021; E019C -E01CE 0021; E01CE -0342 0021; 0342 -0339 0021; 0339 -05BC 0021; 05BC -0738 0021; 0738 -0C82 0021; 0C82 -20D2 0021; 20D2 -0E40 0021; 0E40 -001E 003F; 001E -059E 003F; 059E -070F 003F; 070F -FE02 003F; FE02 -1D185 003F; 1D185 -E002C 003F; E002C -E005E 003F; E005E -E0110 003F; E0110 -E0142 003F; E0142 -E0174 003F; E0174 -E01A6 003F; E01A6 -E01D8 003F; E01D8 -0305 003F; 0305 -0348 003F; 0348 -064E 003F; 064E -0742 003F; 0742 -0E4B 003F; 0E4B -20DC 003F; 20DC -00BF 0021; 00BF -2026 0041; 2026 -1809 0021; 1809 -104A 0021; 104A -1039F 0021; 1039F -0022 0041; 0022 -0028 0021; 0028 -2483 0041; 2483 -247A 0041; 247A -24A0 0021; 24A0 -24AA 0021; 24AA -24B4 0021; 24B4 -3204 0021; 3204 -3208 0021; 3208 -321A 0021; 321A -323D 0021; 323D -322F 0021; 322F -323C 0021; 323C -FE36 0021; FE36 -FE48 0061; FE48 -0F3B 0021; 0F3B -2984 0021; 2984 -298C 0021; 298C -2996 0021; 2996 -300A 0041; 300A -300E 0041; 300E -3015 0021; 3015 -FD3F 0021; FD3F -FE61 003F; FE61 -FE68 0061; FE68 -FE6A 003F; FE6A -2027 0021; 2027 -2036 0041; 2036 -2042 0021; 2042 -070B 0021; 070B -0F05 0021; 0F05 -0F0F 0021; 0F0F -17D7 0021; 17D7 -02C3 0021; 02C3 -02CD 0021; 02CD -02DF 0021; 02DF -02EF 0021; 02EF -02F9 0021; 02F9 -0482 0021; 0482 -0BF6 0021; 0BF6 -0F16 0021; 0F16 -0F38 0021; 0F38 -0FC5 0021; 0FC5 -19E2 0021; 19E2 -19EC 0021; 19EC -19F6 0021; 19F6 -2104 0021; 2104 -2129 0021; 2129 -2190 003F; 2190 -21AE 0334; 21AE -219E 0062; 219E -21A8 0062; 21A8 -21B3 0062; 21B3 -21BD 0062; 21BD -21C7 0062; 21C7 -21D2 0041; 21D2 -21DA 0041; 21DA -21E4 0041; 21E4 -21EE 0041; 21EE -21F8 0041; 21F8 -1D74F 0021; 1D74F -1D6C1 0021; 1D6C1 -220B 003F; 220B -FF0B 003F; FF0B -FF1C 0061; FF1C -208C 0062; 208C -FFE4 0061; FFE4 -2216 003F; 2216 -2220 003F; 2220 -2229 0061; 2229 -2232 0061; 2232 -223C 0021; 223C -2247 0021; 2247 -226D 0041; 226D -2257 0061; 2257 -2261 0041; 2261 -2269 003F; 2269 -2276 0041; 2276 -22E0 0041; 22E0 -2288 0334; 2288 -228F 0061; 228F -2296 0041; 2296 -22A0 0041; 22A0 -22A8 0061; 22A8 -22EA 003F; 22EA -22B7 0061; 22B7 -22C1 0061; 22C1 -22CB 0061; 22CB -22D5 0061; 22D5 -22DF 0061; 22DF -22F1 0061; 22F1 -22FB 0061; 22FB -2305 0061; 2305 -230F 0061; 230F -2319 0061; 2319 -2323 0061; 2323 -232F 0061; 232F -2339 0061; 2339 -2343 0061; 2343 -234D 0061; 234D -2357 0061; 2357 -2361 0061; 2361 -236B 0061; 236B -2375 0061; 2375 -237F 0061; 237F -2389 0061; 2389 -2393 0061; 2393 -239D 0061; 239D -23A7 0061; 23A7 -23B1 0061; 23B1 -23BB 0061; 23BB -23C5 0061; 23C5 -23CF 0061; 23CF -2408 0061; 2408 -2412 0061; 2412 -241C 0061; 241C -2426 0061; 2426 -2449 0061; 2449 -2507 0061; 2507 -2511 0061; 2511 -251B 0061; 251B -2525 0061; 2525 -252F 0061; 252F -2539 0061; 2539 -2543 0061; 2543 -254D 0061; 254D -2557 0061; 2557 -2561 0061; 2561 -256B 0061; 256B -2575 0061; 2575 -257F 0061; 257F -2589 0061; 2589 -2593 0061; 2593 -259D 0061; 259D -25A6 0061; 25A6 -25B0 0061; 25B0 -25BA 0061; 25BA -25C4 0061; 25C4 -25CD 0061; 25CD -25D7 0061; 25D7 -25E1 0061; 25E1 -25EB 0061; 25EB -25F5 0061; 25F5 -25FF 0061; 25FF -2609 0061; 2609 -2613 0061; 2613 -261E 0061; 261E -2628 0061; 2628 -263A 0061; 263A -2644 0061; 2644 -264E 0061; 264E -2658 0061; 2658 -2662 0061; 2662 -266C 0061; 266C -2679 0061; 2679 -2685 0061; 2685 -2702 0061; 2702 -270F 0061; 270F -2719 0061; 2719 -2723 0061; 2723 -272E 0061; 272E -2738 0061; 2738 -2742 0061; 2742 -274D 0061; 274D -275C 0061; 275C -2768 0061; 2768 -2772 0061; 2772 -279D 0061; 279D -27A7 0061; 27A7 -27B2 0061; 27B2 -27BC 0061; 27BC -27D7 0061; 27D7 -27E1 0061; 27E1 -27EB 0061; 27EB -27F9 0061; 27F9 -2903 0061; 2903 -290D 0061; 290D -2917 0061; 2917 -2921 0061; 2921 -292B 0061; 292B -2935 0061; 2935 -293F 0061; 293F -2949 0061; 2949 -2953 0061; 2953 -295D 0061; 295D -2967 0061; 2967 -2971 0061; 2971 -297B 0061; 297B -299B 0061; 299B -29A5 0061; 29A5 -29AF 0061; 29AF -29B9 0061; 29B9 -29C3 0061; 29C3 -29CD 0061; 29CD -29D7 0061; 29D7 -29E1 0061; 29E1 -29EB 0061; 29EB -29F5 0061; 29F5 -2A01 0061; 2A01 -2A0B 0061; 2A0B -2A16 0061; 2A16 -2A20 0061; 2A20 -2A2A 0061; 2A2A -2A34 0061; 2A34 -2A3E 0061; 2A3E -2A48 0061; 2A48 -2A52 0061; 2A52 -2A5C 0061; 2A5C -2A66 0061; 2A66 -2A70 0061; 2A70 -2A7D 0061; 2A7D -2A87 0061; 2A87 -2A91 0061; 2A91 -2A9B 0061; 2A9B -2AA5 0061; 2AA5 -2AAF 0061; 2AAF -2AB9 0061; 2AB9 -2AC3 0061; 2AC3 -2ACD 0061; 2ACD -2AD7 0061; 2AD7 -2AE1 0021; 2AE1 -2AEB 0021; 2AEB -2AF5 0021; 2AF5 -2AFF 0021; 2AFF -2B09 0021; 2B09 -2805 0021; 2805 -280F 0021; 280F -2819 0021; 2819 -2823 0021; 2823 -282D 0021; 282D -2837 0021; 2837 -2841 0021; 2841 -284B 0021; 284B -2855 0021; 2855 -285F 0021; 285F -2869 0021; 2869 -2873 0021; 2873 -287D 0021; 287D -2887 0021; 2887 -2891 0021; 2891 -289B 0021; 289B -28A5 0021; 28A5 -28AF 0021; 28AF -28B9 0021; 28B9 -28C3 0021; 28C3 -28CD 0021; 28CD -28D7 0021; 28D7 -28E1 0021; 28E1 -28EB 0021; 28EB -28F5 0021; 28F5 -28FF 0021; 28FF -2633 0021; 2633 -4DC5 0021; 4DC5 -4DCF 0021; 4DCF -4DD9 0021; 4DD9 -4DE3 0021; 4DE3 -4DED 0021; 4DED -4DF7 0021; 4DF7 -1D301 0021; 1D301 -1D30B 0021; 1D30B -1D315 0021; 1D315 -1D31F 0021; 1D31F -1D329 0021; 1D329 -1D333 0021; 1D333 -1D33D 0021; 1D33D -1D347 0021; 1D347 -1D351 0021; 1D351 -A494 0021; A494 -A49E 0021; A49E -A4A8 0021; A4A8 -A4B2 0021; A4B2 -A4BC 0021; A4BC -A4C6 0021; A4C6 -1D000 0021; 1D000 -1D00A 0021; 1D00A -1D014 0021; 1D014 -1D01E 0021; 1D01E -1D028 0021; 1D028 -1D032 0021; 1D032 -1D03C 0021; 1D03C -1D046 0021; 1D046 -1D050 0021; 1D050 -1D05A 0021; 1D05A -1D064 0021; 1D064 -1D06E 0021; 1D06E -1D078 0021; 1D078 -1D082 0021; 1D082 -1D08C 0021; 1D08C -1D096 0021; 1D096 -1D0A0 0021; 1D0A0 -1D0AA 0021; 1D0AA -1D0B4 0021; 1D0B4 -1D0BE 0021; 1D0BE -1D0C8 0021; 1D0C8 -1D0D2 0021; 1D0D2 -1D0DC 0021; 1D0DC -1D0E6 0021; 1D0E6 -1D0F0 0021; 1D0F0 -1D104 0021; 1D104 -1D10E 0021; 1D10E -1D118 0021; 1D118 -1D122 0021; 1D122 -1D12C 0021; 1D12C -1D136 0021; 1D136 -1D140 0021; 1D140 -1D14A 0021; 1D14A -1D154 0021; 1D154 -1D161 0334; 1D161 -1D15B 0062; 1D15B -1D18E 0062; 1D18E -1D198 0062; 1D198 -1D1A2 0062; 1D1A2 -1D1B0 0062; 1D1B0 -1D1BB 0334 1D16F; 1D1BB 0334 D834 -1D1BC 0062; 1D1BC -1D1CA 0061; 1D1CA -1D1D4 0061; 1D1D4 -2FF0 0061; 2FF0 -2FFA 0061; 2FFA -3190 0061; 3190 -1372 0061; 1372 -137C 0061; 137C -10113 0061; 10113 -1011D 0061; 1011D -10127 0061; 10127 -10131 0061; 10131 -3032 0041; 3032 -30FE 0061; 30FE -FFE5 0061; FFE5 -20A3 003F; 20A3 -20AD 003F; 20AD -0F33 0021; 0F33 -1D7EC 0041; 1D7EC -3007 0061; 3007 -278A 0021; 278A -0A67 003F; 0A67 -2159 0062; 2159 -3362 003F; 3362 -33EB 003F; 33EB -246D 0041; 246D -246F 0041; 246F -2471 0041; 2471 -1D7E3 0041; 1D7E3 -0ED1 0041; 0ED1 -0F21 0062; 0F21 -0CE8 0021; 0CE8 -3022 003F; 3022 -33F4 0041; 33F4 -3370 0041; 3370 -33FC 0041; 33FC -0BE8 0061; 0BE8 -09F5 0062; 09F5 -136B 0021; 136B -0D69 003F; 0D69 -33FE 0041; 33FE -1D7F9 0061; 1D7F9 -0E53 0061; 0E53 -0ED3 0062; 0ED3 -0CEA 0021; 0CEA -3024 003F; 3024 -32BC 0041; 32BC -09EA 0061; 09EA -2783 0062; 2783 -1D7FB 0021; 1D7FB -104A5 003F; 104A5 -1D7FB 0061; 1D7FB -0ED5 0061; 0ED5 -0F25 0062; 0F25 -0D6C 0021; 0D6C -248D 0021; 248D -0B6C 0041; 0B6C -09EC 0062; 09EC -136F 0021; 136F -0E57 003F; 0E57 -06F7 0061; 06F7 -1D7E9 0062; 1D7E9 -FF18 0021; FF18 -2088 003F; 2088 -24FC 0041; 24FC -1818 0061; 1818 -32C7 003F; 32C7 -1D7E1 003F; 1D7E1 -1D7E1 0041; 1D7E1 -0F29 0061; 0F29 -17F9 0062; 17F9 -0083 0061; 0083 -05A5 0061; 05A5 -0F82 0061; 0F82 -FE08 0061; FE08 -1D18B 0061; 1D18B -E0032 0061; E0032 -E0064 0061; E0064 -E0116 0061; E0116 -E0148 0061; E0148 -E017A 0061; E017A -E01AC 0061; E01AC -E01DE 0061; E01DE -0080 0041; 0080 -05A1 0041; 05A1 -0F19 0041; 0F19 -FE05 0041; FE05 -1D188 0041; 1D188 -E002F 0041; E002F -E0061 0041; E0061 -E0113 0041; E0113 -E0145 0041; E0145 -E0177 0041; E0177 -E01A9 0041; E01A9 -E01DB 0041; E01DB -0103 0301 0334; 0103 0301 -00C2 0334 0340; 00C2 0334 -00C4 0304 0334; 00C4 0304 -0041 0334 0311; 0041 0334 -030C 0061; 030C -031A 0061; 031A -0335 0061; 0335 -0355 0061; 0355 -05BB 0061; 05BB -FCF2 0041; FCF2 -0735 0061; 0735 -0903 0061; 0903 -0C02 0061; 0C02 -17C7 0061; 17C7 -FF9F 0061; FF9F -20E8 0061; 20E8 -1EB1 0021; 1EB1 -1E00 0021; 1E00 -1EB2 003F; 1EB2 -33C2 0062; 33C2 -0041 0061; 0041 -1EAF 0061; 1EAF -00E4 0061; 00E4 -1EAC 0061; 1EAC -1EB1 0062; 1EB1 -1E00 0062; 1E00 -00E6 0021; 00E6 -0250 0021; 0250 -001E 0062; 001E -059E 0062; 059E -070F 0062; 070F -FE02 0062; FE02 -1D185 0062; 1D185 -E002C 0062; E002C -E005E 0062; E005E -E0110 0062; E0110 -E0142 0062; E0142 -E0174 0062; E0174 -E01A6 0062; E01A6 -E01D8 0062; E01D8 -0301 0062; 0301 -032F 0062; 032F -05B5 0062; 05B5 -0730 0062; 0730 -0B01 0062; 0B01 -302E 0062; 302E -FF22 0021; FF22 -1D5D5 003F; 1D5D5 -1D401 0061; 1D401 -1D41B 0062; 1D41B -0EC2 0062; 0EC2 -0106 0334; 0106 -1D658 0021; 1D658 -0043 003F; 0043 -0368 0041; 0368 -212D 0041; 212D -1D4B8 0062; 1D4B8 -339D 0021; 339D -0044 0334 0307; 0044 0334 -2145 0021; 2145 -216E 003F; 216E -1D659 0061; 1D659 -1D63F 0041; 1D63F -1D5BD 0062; 1D5BD -3378 0021; 3378 -02A5 0061; 02A5 -018B 0041; 018B -00CA 0334; 00CA -1EBC 0334; 1EBC -0065 0334 0309; 0065 0334 -1D41E 0021; 1D41E -00CB 0021; 00CB -FF25 003F; FF25 -1E16 003F; 1E16 -1D68E 0041; 1D68E -0114 0041; 0114 -0113 0041; 0113 -1D58A 0062; 1D58A -0228 0062; 0228 -1D32 0061; 1D32 -025C 0021; 025C -1D58B 0021; 1D58B -1D571 003F; 1D571 -1D509 0061; 1D509 -2131 0062; 2131 -02A9 0062; 02A9 -0067 0334 0304; 0067 0334 -0122 0021; 0122 -1E20 003F; 1E20 -1D406 0041; 1D406 -33FF 0041; 33FF -3387 0021; 3387 -029B 0021; 029B -1E23 0334; 1E23 -1D43B 0021; 1D43B -1D43B 003F; 1D43B -1D4F1 0041; 1D4F1 -0124 0041; 0124 -FF28 0062; FF28 -3390 0041; 3390 -02BB 0041; 02BB -0069 0334 0308 0341; 0069 0334 0308 -0069 0330 0334; 0069 0330 -00EC 0021; 00EC -FF29 003F; FF29 -0069 0061; 0069 -1D470 0061; 1D470 -00EF 0061; 00EF -1D48A 0062; 1D48A -012E 0062; 012E -337A 0061; 337A -0197 0041; 0197 -1D5DD 0021; 1D5DD -FF4A 0061; FF4A -1D43D 0041; 1D43D -1D575 0062; 1D575 -004B 0327 0334; 004B 0327 -24C0 0021; 24C0 -01E9 003F; 01E9 -1D4DA 0061; 1D4DA -3384 0061; 3384 -3385 0061; 3385 -33AA 0061; 33AA -0139 0334; 0139 -1D591 0021; 1D591 -1D55D 003F; 1D55D -013F 0062; 013F -1D577 0061; 1D577 -1E3B 0041; 1E3B -1E3D 0062; 1E3D -02AB 003F; 02AB -026E 003F; 026E -1D62E 0021; 1D62E -2133 003F; 2133 -1D426 0061; 1D426 -1D474 0041; 1D474 -24DC 0062; 24DC -33D5 0062; 33D5 -33BD 0061; 33BD -006E 0334 0307; 006E 0334 -1D475 0021; 1D475 -1D40D 003F; 1D40D -1D427 0041; 1D427 -207F 0041; 207F -1D55F 0062; 1D55F -01CB 0021; 01CB -1D0E 003F; 1D0E -006F 0334 0301; 006F 0334 -1ED6 0334; 1ED6 -00F5 0308 0334; 00F5 0308 -006F 0304 0334 0301; 006F 0304 0334 -00F2 031B 0334; 00F2 031B -1D45C 0021; 1D45C -00D6 0021; 00D6 -FF4F 003F; FF4F -1ED4 003F; 1ED4 -1ECC 003F; 1ECC -1D5E2 0061; 1D5E2 -1ED7 0041; 1ED7 -01EA 0041; 01EA -1EE3 0041; 1EE3 -00D2 0062; 00D2 -01A0 0062; 01A0 -00F8 0301 0334; 00F8 0301 -1D10 0061; 1D10 -0223 0041; 0223 -1D4DF 0021; 1D4DF -1E54 003F; 1E54 -1D513 0061; 1D513 -1D4F9 0062; 1D4F9 -33D9 0041; 33D9 -1D45E 0021; 1D45E -1D478 003F; 1D478 -1D478 0061; 1D478 -1D57C 0062; 1D57C -0072 0334 0311; 0072 0334 -1D445 0021; 1D445 -211B 003F; 211B -1D5FF 0061; 1D5FF -24C7 0041; 24C7 -33AF 0041; 33AF -0157 0062; 0157 -027A 0041; 027A -0073 0301 0307 0334; 0073 0301 0307 -0053 0307 0323 0334; 0053 0307 0323 -015D 0021; 015D -02E2 003F; 02E2 -1D634 0041; 1D634 -015C 0041; 015C -FF33 0062; FF33 -00DF 0061; 00DF -0165 0334; 0165 -1D495 0021; 1D495 -1D495 003F; 1D495 -036D 0041; 036D -1D4E3 0041; 1D4E3 -1D495 0062; 1D495 -2121 0021; 2121 -01AD 0021; 01AD -0055 0334 0306; 0055 0334 -0075 0308 0304 0334; 0075 0308 0304 -1EE7 0334; 1EE7 -0055 0334 031B 0309; 0055 0334 031B -1D602 0021; 1D602 -1E79 0021; 1E79 -24E4 003F; 24E4 -016B 003F; 016B -1D462 0041; 1D462 -1D64 0061; 1D64 -0169 0061; 0169 -1EEC 0061; 1EEC -1D5E8 0062; 1D5E8 -1EE9 0062; 1EE9 -0265 0061; 0265 -1E7D 0334; 1E7D -1E7C 0021; 1E7C -0076 0041; 0076 -1D5E9 0061; 1D5E9 -FF36 0062; FF36 -2177 0062; 2177 -0057 0308 0334; 0057 0308 -1E82 0021; 1E82 -0175 003F; 0175 -1D51A 0061; 1D51A -1E89 0041; 1E89 -33DD 0021; 33DD -1D417 0021; 1D417 -1D61F 003F; 1D61F -2169 0041; 2169 -1D59D 0062; 1D59D -0079 0334 0301; 0079 0334 -1EF7 0334; 1EF7 -00FF 0021; 00FF -0176 003F; 0176 -1D418 0061; 1D418 -1EF8 0061; 1EF8 -02B8 0062; 02B8 -007A 0334 030C; 007A 0334 -1D5ED 0021; 1D5ED -0179 003F; 0179 -1D44D 0061; 1D44D -FF5A 0062; FF5A -1D22 0061; 1D22 -01B7 0041; 01B7 -00DE 0061; 00DE -0294 003F; 0294 -1D24 003F; 1D24 -0297 003F; 0297 -1F08 0334 0300; 1F08 0334 -1F01 0334 0345 0301; 1F01 0334 0345 -0391 0301 0334; 0391 0301 -0391 0021; 0391 -1FB1 0021; 1FB1 -0386 003F; 0386 -1F02 0061; 1F02 -1F89 0061; 1F89 -1F84 0062; 1F84 -1D7AB 0021; 1D7AB -1D5D 0061; 1D5D -1D67 003F; 1D67 -1D26 003F; 1D26 -1D6E5 0041; 1D6E5 -03B5 0334 0314 0301; 03B5 0334 0314 -1F18 0021; 1F18 -1FC9 003F; 1FC9 -1F1A 0041; 1F1A -1F19 0062; 1F19 -1D6AD 003F; 1D6AD -03B7 0334 0343 0301; 03B7 0334 0343 -1FC3 0343 0334; 1FC3 0343 -1F2F 0334; 1F2F -1FC3 0334; 1FC3 -0389 0021; 0389 -1F97 003F; 1F97 -1F9C 0061; 1F9C -1F91 0061; 1F91 -1F26 0062; 1F26 -1D6E9 0021; 1D6E9 -1D73D 0041; 1D73D -1D75D 0062; 1D75D -1F3D 0334; 1F3D -03AA 0334; 03AA -03AF 0021; 03AF -1FDB 003F; 1FDB -1F32 0061; 1F32 -1FD2 0061; 1FD2 -1FD3 0062; 1FD3 -1D6CB 0061; 1D6CB -03D7 0021; 03D7 -1D726 0041; 1D726 -1D6CD 0061; 1D6CD -3395 0021; 3395 -03BD 0041; 03BD -1D743 003F; 1D743 -039F 0334 0313; 039F 0334 -03BF 0334 0340; 03BF 0334 -1F48 003F; 1F48 -1F42 0041; 1F42 -1F4B 0062; 1F4B -1D6E1 0061; 1D6E1 -1D765 0062; 1D765 -1D6B8 0021; 1D6B8 -1D754 0041; 1D754 -1D29 0041; 1D29 -1D747 0061; 1D747 -1D7A2 0062; 1D7A2 -03C4 0062; 03C4 -03C5 0314 0334 0342; 03C5 0314 0334 -03C5 0308 0334 0340; 03C5 0308 0334 -03AB 0021; 03AB -1FE1 003F; 1FE1 -1F5F 0061; 1F5F -1D730 0062; 1D730 -1D76B 0021; 1D76B -1D6BD 0061; 1D6BD -1D712 003F; 1D712 -1D76C 0062; 1D76C -1D76D 0041; 1D76D -2126 0334 0313 0340; 2126 0334 0313 -1F61 0341 0345 0334; 1F61 0341 0345 -03A9 0334 0301; 03A9 0334 -1F6C 0021; 1F6C -1D6FA 003F; 1D6FA -1D6DA 0061; 1D6DA -1FAE 0061; 1FAE -1FFA 0061; 1FFA -1FAB 0062; 1FAB -03E2 0021; 03E2 -03EC 0021; 03EC -0410 0001 0306 0061; 0410 0001 0306 -04D8 0041; 04D8 -0431 0041; 0431 -0495 0041; 0495 -0413 0301 0334; 0413 0301 -0401 0334; 0401 -0435 1D165 0306 0061; 0435 1D165 0306 -04C1 0062; 04C1 -0417 0041; 0417 -0455 0041; 0455 -04E2 003F; 04E2 -0418 0001 0308 0061; 0418 0001 0308 -0457 0062; 0457 -043A 0041; 043A -049D 0041; 049D -043C 0021; 043C -04C8 0021; 04C8 -043E 0308 0334; 043E 0308 -04E8 0308 0021; 04E8 0308 -0480 0061; 0480 -04AA 0061; 04AA -041A 0334 0341; 041A 0334 -0443 0062; 0443 -0443 0001 0308 0061; 0443 0001 0308 -04AF 0021; 04AF -04B3 0021; 04B3 -047B 0021; 047B -0447 0308 003F; 0447 0308 -04B9 0062; 04B9 -0449 0062; 0449 -044B 0308 0062; 044B 0308 -044D 0308 0021; 044D 0308 -0465 0061; 0465 -046F 0061; 046F -0475 0001 030F 0061; 0475 0001 030F -10A1 0041; 10A1 -10A6 0041; 10A6 -10AA 0041; 10AA -10AE 0041; 10AE -10C3 0041; 10C3 -10B7 0041; 10B7 -10BC 0041; 10BC -10C0 0041; 10C0 -0563 003F; 0563 -0537 0041; 0537 -053C 0041; 053C -0541 0041; 0541 -FB13 0061; FB13 -0549 0041; 0549 -054E 0041; 054E -0583 003F; 0583 -05D0 05BC 0334; 05D0 05BC -FB4C 003F; FB4C -05D3 0062; 05D3 -05F1 0061; 05F1 -FB39 0061; FB39 -FB4D 0041; FB4D -FB40 0334; FB40 -FB44 0021; FB44 -FB47 0061; FB47 -FB2C 003F; FB2C -FE80 0041; FE80 -0627 0654 0041; 0627 0654 -FE85 0041; FE85 -FE89 003F; FE89 -FC98 0062; FC98 -FC9B 0062; FC9B -FBF5 0062; FBF5 -FBF7 0062; FBF7 -FE90 0021; FE90 -FC07 003F; FC07 -FCE2 003F; FCE2 -FB53 0062; FB53 -FB5B 0062; FB5B -FCA1 0062; FCA1 -FCA3 0062; FCA3 -FD55 0041; FD55 -FC10 003F; FC10 -FC12 0021; FC12 -FB67 0021; FB67 -067C 0041; 067C -FE9D 0061; FE9D -FD59 0062; FD59 -FB76 0061; FB76 -FB7A 0061; FB7A -FEA3 0041; FEA3 -FCFF 003F; FCFF -FCAB 0062; FCAB -0685 0041; 0685 -FB89 0062; FB89 -068E 003F; 068E -FDF6 0041; FDF6 -0694 0041; 0694 -FEB2 003F; FEB2 -FD35 0061; FD35 -FCB0 003F; FCB0 -FCFB 003F; FCFB -FD2D 0061; FD2D -FDAA 0041; FDAA -FD28 0062; FD28 -FD1A 0062; FD1A -FC20 003F; FC20 -FDF9 0041; FDF9 -FEBE 0021; FEBE -FDAB 0041; FDAB -FD23 0062; FD23 -FEC2 0062; FEC2 -FCF5 003F; FCF5 -FD3B 0061; FD3B -FD75 003F; FD75 -FD13 0062; FD13 -FC2C 003F; FC2C -06FC 0041; 06FC -FC2F 003F; FC2F -FC7D 0062; FC7D -FB6F 0021; FB6F -FED6 0062; FED6 -FC35 003F; FC35 -FEDA 0062; FEDA -FCC7 0061; FCC7 -FC3D 003F; FC3D -06AB 0041; 06AB -FB94 0041; FB94 -FB97 0021; FB97 -FEDE 0062; FEDE -FCC9 0062; FCC9 -FD82 0041; FD82 -FD87 003F; FD87 -06B7 0041; 06B7 -FCCE 0062; FCCE -FD8B 0041; FD8B -FC49 0041; FC49 -FDB8 0062; FDB8 -FC4D 003F; FC4D -FC8D 0041; FC8D -FBA1 0021; FBA1 -0647 0041; 0647 -FC53 0041; FC53 -FBA8 0041; FBA8 -FEEE 0021; FEEE -FBD9 0021; FBD9 -06C8 0062; 06C8 -0649 003F; 0649 -FEF1 0061; FEF1 -FC57 0041; FC57 -FC94 0061; FC94 -FBFD 0041; FBFD -06D3 0334; 06D3 -0714 003F; 0714 -071A 0062; 071A -0723 0061; 0723 -072C 0062; 072C -0786 0062; 0786 -078C 0062; 078C -079E 0062; 079E -07A6 0062; 07A6 -07B0 0062; 07B0 -120A 0062; 120A -1214 0062; 1214 -121E 0062; 121E -1228 0062; 1228 -1232 0062; 1232 -123C 0062; 123C -1246 0062; 1246 -1254 0062; 1254 -1262 0062; 1262 -126C 0062; 126C -1276 0062; 1276 -1280 0062; 1280 -128C 0062; 128C -1298 0062; 1298 -12A2 0062; 12A2 -12AC 0062; 12AC -12BA 0062; 12BA -12C8 0062; 12C8 -12D3 0062; 12D3 -12DE 0062; 12DE -12E8 0062; 12E8 -12F3 0062; 12F3 -12FD 0062; 12FD -1307 0062; 1307 -1313 0062; 1313 -1320 0062; 1320 -132A 0062; 132A -1334 0062; 1334 -133E 0062; 133E -1349 0062; 1349 -1353 0062; 1353 -0905 0062; 0905 -090D 0062; 090D -0916 093C 0334; 0916 093C -091C 003F; 091C -095D 0061; 095D -092B 0021; 092B -0931 0062; 0931 -093E 003F; 093E -0946 003F; 0946 -0986 0062; 0986 -0990 0062; 0990 -099C 0062; 099C -09A3 0041; 09A3 -09AE 0041; 09AE -09B9 0021; 09B9 -09E3 0021; 09E3 -09D7 0061; 09D7 -0A72 0061; 0A72 -0A59 0061; 0A59 -0A1D 0021; 0A1D -0A27 0021; 0A27 -0A30 0061; 0A30 -0A42 0062; 0A42 -0A88 0061; 0A88 -0A91 0061; 0A91 -0A9C 0061; 0A9C -0AA6 0061; 0AA6 -0AB2 0061; 0AB2 -0AC0 0061; 0AC0 -0AC9 0061; 0AC9 -0B0B 0021; 0B0B -0B17 0021; 0B17 -0B21 0334 0B3C; 0B21 0334 -0B27 0062; 0B27 -0B32 0062; 0B32 -0B3F 0062; 0B3F -0B47 0B3E 0062; 0B47 0B3E -0B87 0041; 0B87 -0B94 0061; 0B94 -0BA9 0021; 0BA9 -0BB7 0021; 0BB7 -0BC8 0021; 0BC8 -0BCD 0062; 0BCD -0C0C 0062; 0C0C -0C17 0062; 0C17 -0C21 0062; 0C21 -0C2C 0062; 0C2C -0C37 0062; 0C37 -0C46 0062; 0C46 -0C55 0062; 0C55 -0C8C 0061; 0C8C -0C97 0061; 0C97 -0CA1 0061; 0CA1 -0CAC 0061; 0CAC -0CB8 0061; 0CB8 -0CC1 0062; 0CC1 -0CCA 003F; 0CCA -0D05 0061; 0D05 -0D0E 0061; 0D0E -0D19 0061; 0D19 -0D23 0061; 0D23 -0D2E 0061; 0D2E -0D38 0061; 0D38 -0D48 0061; 0D48 -0D57 003F; 0D57 -0D8E 003F; 0D8E -0D9B 003F; 0D9B -0DA5 003F; 0DA5 -0DAF 003F; 0DAF -0DBA 003F; 0DBA -0DCA 0334; 0DCA -0DD9 0062; 0DD9 -0DDD 0061; 0DDD -0E04 0061; 0E04 -0E0E 0061; 0E0E -0E18 0061; 0E18 -0E22 0061; 0E22 -0E2C 0061; 0E2C -0E34 0062; 0E34 -0E4D 0041; 0E4D -0E96 0041; 0E96 -0EA2 0041; 0EA2 -0EAF 0041; 0EAF -0334 0EB8; 0EB8 -0F90 003F; 0F90 -0F45 003F; 0F45 -0F4B 003F; 0F4B -0F50 003F; 0F50 -0F55 003F; 0F55 -0F5A 003F; 0F5A -0FAE 003F; 0FAE -0FBC 0021; 0FBC -0FB5 0021; 0FB5 -0F8A 0021; 0F8A -0F71 0334 0F80; 0F71 0334 -0FB2 1D165 0F80 0061; 0FB2 1D165 0F80 -0FB3 0F71 0F80 0041; 0FB3 0F71 0F80 -1902 0061; 1902 -190C 0061; 190C -1916 0061; 1916 -1923 0061; 1923 -1931 0061; 1931 -1702 0061; 1702 -170C 0061; 170C -1722 0021; 1722 -172C 0021; 172C -1740 0041; 1740 -174A 0041; 174A -1760 0041; 1760 -176A 0041; 176A -1002 0041; 1002 -100C 0041; 100C -1016 0041; 1016 -101E 0041; 101E -1029 0021; 1029 -1030 0021; 1030 -1781 0041; 1781 -178B 0041; 178B -1795 0041; 1795 -179F 0041; 179F -17A8 0041; 17A8 -17B2 0041; 17B2 -17BC 0041; 17BC -17D2 003F; 17D2 -1959 003F; 1959 -1963 003F; 1963 -196D 003F; 196D -1884 003F; 1884 -1845 003F; 1845 -1825 003F; 1825 -188A 003F; 188A -184E 003F; 184E -189C 003F; 189C -1869 003F; 1869 -1836 003F; 1836 -183A 003F; 183A -186F 003F; 186F -185A 003F; 185A -1898 003F; 1898 -1899 003F; 1899 -13A3 0062; 13A3 -13AD 0062; 13AD -13B7 0062; 13B7 -13C1 0062; 13C1 -13CB 0062; 13CB -13D5 0062; 13D5 -13DF 0062; 13DF -13E9 0062; 13E9 -13F3 0062; 13F3 -1409 0062; 1409 -1413 0062; 1413 -141D 0062; 141D -1427 0062; 1427 -1431 0062; 1431 -143B 0062; 143B -1445 0062; 1445 -144F 0062; 144F -1459 0062; 1459 -1463 0062; 1463 -146D 0062; 146D -1477 0062; 1477 -1481 0062; 1481 -148B 0062; 148B -1495 0062; 1495 -149F 0062; 149F -14A9 0062; 14A9 -14B3 0062; 14B3 -14BD 0062; 14BD -14C7 0062; 14C7 -14D1 0062; 14D1 -14DB 0062; 14DB -14E5 0062; 14E5 -14EF 0062; 14EF -14F9 0062; 14F9 -1503 0062; 1503 -150D 0062; 150D -1517 0062; 1517 -1521 0062; 1521 -152B 0062; 152B -1535 0062; 1535 -153F 0062; 153F -1549 0062; 1549 -1553 0062; 1553 -155D 0062; 155D -1567 0062; 1567 -1571 0062; 1571 -157B 0062; 157B -1585 0062; 1585 -158E 0062; 158E -1673 0062; 1673 -159C 0062; 159C -15A6 0062; 15A6 -15AF 0062; 15AF -15B9 0062; 15B9 -15C3 0062; 15C3 -15CD 0062; 15CD -15D7 0062; 15D7 -15E1 0062; 15E1 -15EB 0062; 15EB -15F5 0062; 15F5 -15FF 0062; 15FF -1609 0062; 1609 -1613 0062; 1613 -161D 0062; 161D -1627 0062; 1627 -1631 0062; 1631 -163B 0062; 163B -1645 0062; 1645 -164F 0062; 164F -1659 0062; 1659 -1663 0062; 1663 -1681 0062; 1681 -168B 0062; 168B -1695 0062; 1695 -16A5 0062; 16A5 -16B0 0062; 16B0 -16BA 003F; 16BA -16C4 0062; 16C4 -16CB 0061; 16CB -16D6 0062; 16D6 -16DF 0062; 16DF -16E5 0062; 16E5 -AC01 0062; AC01 -FFA4 0061; FFA4 -FFA8 0062; FFA8 -3272 0062; 3272 -1109 0041; 1109 -FFB7 0062; FFB7 -FFB9 0062; FFB9 -FFBB 0062; FFBB -FFBD 0062; FFBD -D7A1 0062; D7A1 -1118 0062; 1118 -111E 0061; 111E -1123 0061; 1123 -112A 0062; 112A -317C 0062; 317C -1137 0062; 1137 -317F 0062; 317F -1149 0062; 1149 -1152 0062; 1152 -3186 0062; 3186 -FFC3 0062; FFC3 -3154 003F; 3154 -3157 0041; 3157 -FFCF 0062; FFCF -315E 003F; 315E -3161 0041; 3161 -1178 0062; 1178 -1182 0062; 1182 -1189 0062; 1189 -1192 0061; 1192 -119A 0062; 119A -11A2 0062; 11A2 -3136 003F; 3136 -FFAB 0062; FFAB -313F 003F; 313F -11BD 0062; 11BD -11C7 0061; 11C7 -11CE 0061; 11CE -11D6 0062; 11D6 -316F 0062; 316F -11E6 0062; 11E6 -11F0 0062; 11F0 -11F8 0062; 11F8 -3300 0062; 3300 -3304 0062; 3304 -30A5 0062; 30A5 -FF74 0062; FF74 -3309 0041; 3309 -330B 0061; 330B -304E 0041; 304E -304F 3099 0334; 304F 3099 -331A 0021; 331A -3052 0041; 3052 -3054 0062; 3054 -331F 0061; 331F -3006 003F; 3006 -305B 0334 3099; 305B 0334 -30BD 3099 0334; 30BD 3099 -3324 0021; 3324 -3062 0041; 3062 -30C5 0041; 30C5 -3325 0062; 3325 -3327 0041; 3327 -FF87 0021; FF87 -306E 0061; 306E -332B 0041; 332B -3072 0334 309A; 3072 0334 -30D4 0062; 30D4 -30D7 003F; 30D7 -3079 0334; 3079 -30D9 0061; 30D9 -30DB 309A 0334; 30DB 309A -30DB 0062; 30DB -3343 0041; 3343 -3348 0041; 3348 -3081 0061; 3081 -3084 003F; 3084 -32F4 003F; 32F4 -30E8 0041; 30E8 -FF98 003F; FF98 -32F8 0061; 32F8 -FF9B 0021; FF9B -32FB 0041; 32FB -3091 0041; 3091 -FF9D 0041; FF9D -31B5 0061; 31B5 -31B7 0061; 31B7 -31A1 0021; 31A1 -311D 003F; 311D -3123 003F; 3123 -31B3 0041; 31B3 -A005 003F; A005 -A00F 003F; A00F -A019 003F; A019 -A023 003F; A023 -A02D 003F; A02D -A037 003F; A037 -A041 003F; A041 -A04B 003F; A04B -A055 003F; A055 -A05F 003F; A05F -A069 003F; A069 -A073 003F; A073 -A07D 003F; A07D -A087 003F; A087 -A091 003F; A091 -A09B 003F; A09B -A0A5 003F; A0A5 -A0AF 003F; A0AF -A0B9 003F; A0B9 -A0C3 003F; A0C3 -A0CD 003F; A0CD -A0D7 003F; A0D7 -A0E1 003F; A0E1 -A0EB 003F; A0EB -A0F5 003F; A0F5 -A0FF 003F; A0FF -A109 003F; A109 -A113 003F; A113 -A11D 003F; A11D -A127 003F; A127 -A131 003F; A131 -A13B 003F; A13B -A145 003F; A145 -A14F 003F; A14F -A159 003F; A159 -A163 003F; A163 -A16D 003F; A16D -A177 003F; A177 -A181 003F; A181 -A18B 003F; A18B -A195 003F; A195 -A19F 003F; A19F -A1A9 003F; A1A9 -A1B3 003F; A1B3 -A1BD 003F; A1BD -A1C7 003F; A1C7 -A1D1 003F; A1D1 -A1DB 003F; A1DB -A1E5 003F; A1E5 -A1EF 003F; A1EF -A1F9 003F; A1F9 -A203 003F; A203 -A20D 003F; A20D -A217 003F; A217 -A221 003F; A221 -A22B 003F; A22B -A235 003F; A235 -A23F 003F; A23F -A249 003F; A249 -A253 003F; A253 -A25D 003F; A25D -A267 003F; A267 -A271 003F; A271 -A27B 003F; A27B -A285 003F; A285 -A28F 003F; A28F -A299 003F; A299 -A2A3 003F; A2A3 -A2AD 003F; A2AD -A2B7 003F; A2B7 -A2C1 003F; A2C1 -A2CB 003F; A2CB -A2D5 003F; A2D5 -A2DF 003F; A2DF -A2E9 003F; A2E9 -A2F3 003F; A2F3 -A2FD 003F; A2FD -A307 003F; A307 -A311 003F; A311 -A31B 003F; A31B -A325 003F; A325 -A32F 003F; A32F -A339 003F; A339 -A343 003F; A343 -A34D 003F; A34D -A357 003F; A357 -A361 003F; A361 -A36B 003F; A36B -A375 003F; A375 -A37F 003F; A37F -A389 003F; A389 -A393 003F; A393 -A39D 003F; A39D -A3A7 003F; A3A7 -A3B1 003F; A3B1 -A3BB 003F; A3BB -A3C5 003F; A3C5 -A3CF 003F; A3CF -A3D9 003F; A3D9 -A3E3 003F; A3E3 -A3ED 003F; A3ED -A3F7 003F; A3F7 -A401 003F; A401 -A40B 003F; A40B -A415 003F; A415 -A41F 003F; A41F -A429 003F; A429 -A433 003F; A433 -A43D 003F; A43D -A447 003F; A447 -A451 003F; A451 -A45B 003F; A45B -A465 003F; A465 -A46F 003F; A46F -A479 003F; A479 -A483 003F; A483 -10300 003F; 10300 -1030A 003F; 1030A -10314 003F; 10314 -1031E 003F; 1031E -10339 003F; 10339 -10343 003F; 10343 -10401 0021; 10401 -10406 0021; 10406 -1040B 0021; 1040B -10410 0021; 10410 -10415 0021; 10415 -1041A 0021; 1041A -1041F 0021; 1041F -10424 0021; 10424 -10452 003F; 10452 -1045C 003F; 1045C -10466 003F; 10466 -10470 003F; 10470 -1047A 003F; 1047A -10484 003F; 10484 -1048E 003F; 1048E -10498 003F; 10498 -10004 003F; 10004 -1000F 003F; 1000F -10019 003F; 10019 -10023 003F; 10023 -1002E 003F; 1002E -10038 003F; 10038 -10044 003F; 10044 -10050 003F; 10050 -1005A 003F; 1005A -10086 003F; 10086 -10090 003F; 10090 -1009A 003F; 1009A -100A4 003F; 100A4 -100AE 003F; 100AE -100B8 003F; 100B8 -100C2 003F; 100C2 -100CC 003F; 100CC -100D6 003F; 100D6 -100E0 003F; 100E0 -100EA 003F; 100EA -100F4 003F; 100F4 -10803 003F; 10803 -10810 003F; 10810 -1081A 003F; 1081A -10824 003F; 10824 -1082E 003F; 1082E -1083C 003F; 1083C -10388 003F; 10388 -10392 003F; 10392 -1039C 003F; 1039C -3286 0061; 3286 -319B 003F; 319B -2F800 003F; 2F800 -2F05 003F; 2F05 -2E85 003F; 2E85 -FA30 0041; FA30 -FA31 0041; FA31 -F978 003F; F978 -2F8D3 003F; 2F8D3 -F955 003F; F955 -2F81E 003F; 2F81E -F9C7 003F; F9C7 -F92F 003F; F92F -F963 0041; F963 -2F82C 003F; 2F82C -2F82F 003F; 2F82F -2F1C 003F; 2F1C -F9DE 003F; F9DE -2F842 003F; 2F842 -FA0D 003F; FA0D -F9A9 003F; F9A9 -2F857 003F; 2F857 -2F851 003F; 2F851 -2F24 003F; 2F24 -2F862 003F; 2F862 -2F27 003F; 2F27 -2F28 003F; 2F28 -2E91 0021; 2E91 -2F2C 0041; 2F2C -2F9F4 003F; 2F9F4 -2F31 003F; 2F31 -FA01 003F; FA01 -2F36 0021; 2F36 -2F874 003F; 2F874 -2E96 003F; 2E96 -2F8A5 003F; 2F8A5 -FA3F 0041; FA3F -F990 003F; F990 -F925 003F; F925 -2F8BC 003F; 2F8BC -2F8C5 003F; 2F8C5 -2F43 003F; 2F43 -2F47 0061; 2F47 -2F8D5 003F; 2F8D5 -3292 003F; 3292 -F9C8 003F; F9C8 -F97A 003F; F97A -F914 0061; F914 -2F4C 003F; 2F4C -F970 0041; F970 -328C 0061; 328C -329F 003F; 329F -2F901 0021; 2F901 -2F909 003F; 2F909 -2F912 003F; 2F912 -2F835 003F; 2F835 -2F91E 003F; 2F91E -2F921 003F; 2F921 -3295 003F; 3295 -2F5E 003F; 2F5E -F9CC 003F; F9CC -2F60 003F; 2F60 -F9CD 003F; F9CD -F90E 003F; F90E -2F940 003F; 2F940 -2F94E 003F; 2F94E -2EAC 0061; 2EAC -3297 0021; 3297 -2F71 003F; 2F71 -2F73 003F; 2F73 -2F963 003F; 2F963 -2F968 003F; 2F968 -2F96E 003F; 2F96E -2F79 003F; 2F79 -2EB6 0021; 2EB6 -2F7C 0061; 2F7C -2F97F 003F; 2F97F -2F983 003F; 2F983 -2F98B 0021; 2F98B -FA5E 0021; FA5E -2F995 003F; 2F995 -2F99D 003F; 2F99D -FA5F 0041; FA5F -FA20 003F; FA20 -2F8D 003F; 2F8D -2F9C0 003F; 2F9C0 -F9A0 003F; F9A0 -2EC4 003F; 2EC4 -2F9CF 003F; 2F9CF -F9FC 003F; F9FC -2F99 003F; 2F99 -2EC9 003F; 2EC9 -2F9D 003F; 2F9D -2F9F 003F; 2F9F -FA67 0021; FA67 -FA26 003F; FA26 -2FA6 0021; 2FA6 -2F9EB 003F; 2F9EB -2F9F0 003F; 2F9F0 -F9DC 003F; F9DC -F9B2 003F; F9B2 -2FB0 003F; 2FB0 -2F9FE 0041; 2F9FE -2FB7 0021; 2FB7 -2EE1 0021; 2EE1 -2EE3 0021; 2EE3 -2FC2 003F; 2FC2 -F920 003F; F920 -2FC7 0021; 2FC7 -2EEA 0021; 2EEA -2EEB 0021; 2EEB -F908 0021; F908 -9FA3 003F; 9FA3 -FA23 003F; FA23 -3405 003F; 3405 -340F 003F; 340F -3419 003F; 3419 -3423 003F; 3423 -342D 003F; 342D -3437 003F; 3437 -3441 003F; 3441 -344B 003F; 344B -3455 003F; 3455 -345F 003F; 345F -3469 003F; 3469 -3473 003F; 3473 -347D 003F; 347D -3487 003F; 3487 -3491 003F; 3491 -349B 003F; 349B -34A4 003F; 34A4 -34AE 003F; 34AE -34B8 003F; 34B8 -34C0 003F; 34C0 -34CA 003F; 34CA -34D4 003F; 34D4 -34DE 003F; 34DE -34E7 003F; 34E7 -34F1 003F; 34F1 -34FB 003F; 34FB -3505 003F; 3505 -350F 003F; 350F -3518 003F; 3518 -3522 003F; 3522 -352C 003F; 352C -3536 003F; 3536 -3540 003F; 3540 -354A 003F; 354A -3554 003F; 3554 -355E 003F; 355E -3568 003F; 3568 -3572 003F; 3572 -357C 003F; 357C -3586 003F; 3586 -3590 003F; 3590 -359A 003F; 359A -35A4 003F; 35A4 -35AE 003F; 35AE -35B8 003F; 35B8 -35C2 003F; 35C2 -35CC 003F; 35CC -35D6 003F; 35D6 -35E0 003F; 35E0 -35EA 003F; 35EA -35F4 003F; 35F4 -35FE 003F; 35FE -3608 003F; 3608 -3612 003F; 3612 -361C 003F; 361C -3626 003F; 3626 -3630 003F; 3630 -363A 003F; 363A -3644 003F; 3644 -364E 003F; 364E -3658 003F; 3658 -3662 003F; 3662 -366C 003F; 366C -3676 003F; 3676 -3680 003F; 3680 -368A 003F; 368A -3694 003F; 3694 -369E 003F; 369E -36A8 003F; 36A8 -36B2 003F; 36B2 -36BC 003F; 36BC -36C6 003F; 36C6 -36D0 003F; 36D0 -36DA 003F; 36DA -36E4 003F; 36E4 -2F867 0021; 2F867 -36F7 003F; 36F7 -3700 003F; 3700 -370A 003F; 370A -3714 003F; 3714 -371E 003F; 371E -3728 003F; 3728 -3732 003F; 3732 -373C 003F; 373C -3746 003F; 3746 -3750 003F; 3750 -375A 003F; 375A -3764 003F; 3764 -376E 003F; 376E -3778 003F; 3778 -3781 0041; 3781 -378B 003F; 378B -3795 003F; 3795 -379F 003F; 379F -37A9 003F; 37A9 -37B3 003F; 37B3 -37BD 003F; 37BD -37C7 003F; 37C7 -37D1 003F; 37D1 -37DB 003F; 37DB -37E5 003F; 37E5 -37EF 003F; 37EF -37F9 003F; 37F9 -3803 003F; 3803 -380D 003F; 380D -3817 003F; 3817 -3821 003F; 3821 -382B 003F; 382B -3834 003F; 3834 -383E 003F; 383E -3848 003F; 3848 -3852 003F; 3852 -385C 003F; 385C -3865 003F; 3865 -386F 003F; 386F -3879 003F; 3879 -3882 003F; 3882 -388C 003F; 388C -3896 003F; 3896 -38A0 003F; 38A0 -38AA 003F; 38AA -38B4 003F; 38B4 -38BE 003F; 38BE -38C7 0041; 38C7 -38D1 003F; 38D1 -38DB 003F; 38DB -38E4 003F; 38E4 -38EE 003F; 38EE -38F8 003F; 38F8 -3902 003F; 3902 -390C 003F; 390C -3916 003F; 3916 -391F 003F; 391F -3929 003F; 3929 -3933 003F; 3933 -393C 003F; 393C -3946 003F; 3946 -3950 003F; 3950 -395A 003F; 395A -3964 003F; 3964 -396E 003F; 396E -3978 003F; 3978 -3982 003F; 3982 -398C 003F; 398C -3996 003F; 3996 -39A0 003F; 39A0 -39AA 003F; 39AA -39B4 003F; 39B4 -39BE 003F; 39BE -39C8 003F; 39C8 -39D2 003F; 39D2 -39DC 003F; 39DC -39E6 003F; 39E6 -39F0 003F; 39F0 -39FA 003F; 39FA -3A04 003F; 3A04 -3A0E 003F; 3A0E -3A18 003F; 3A18 -3A22 003F; 3A22 -3A2C 003F; 3A2C -3A35 003F; 3A35 -3A3F 003F; 3A3F -3A49 003F; 3A49 -3A53 003F; 3A53 -3A5D 003F; 3A5D -3A67 003F; 3A67 -3A70 003F; 3A70 -3A7A 003F; 3A7A -3A84 003F; 3A84 -3A8E 003F; 3A8E -3A98 003F; 3A98 -3AA2 003F; 3AA2 -3AAC 003F; 3AAC -3AB6 003F; 3AB6 -3AC0 003F; 3AC0 -3ACA 003F; 3ACA -3AD4 003F; 3AD4 -3ADE 003F; 3ADE -3AE7 003F; 3AE7 -3AF1 003F; 3AF1 -3AFB 003F; 3AFB -3B05 003F; 3B05 -3B0E 003F; 3B0E -3B18 003F; 3B18 -3B21 003F; 3B21 -3B2B 003F; 3B2B -3B35 003F; 3B35 -3B3F 003F; 3B3F -2F8DE 0021; 2F8DE -3B52 003F; 3B52 -3B5C 003F; 3B5C -3B66 003F; 3B66 -3B70 003F; 3B70 -3B7A 003F; 3B7A -3B84 003F; 3B84 -3B8E 003F; 3B8E -3B98 003F; 3B98 -3BA1 003F; 3BA1 -3BAB 003F; 3BAB -3BB5 003F; 3BB5 -3BBF 003F; 3BBF -3BC9 003F; 3BC9 -3BD3 003F; 3BD3 -3BDD 003F; 3BDD -3BE7 003F; 3BE7 -3BF1 003F; 3BF1 -3BFB 003F; 3BFB -3C05 003F; 3C05 -3C0F 003F; 3C0F -3C18 0041; 3C18 -3C22 003F; 3C22 -3C2C 003F; 3C2C -3C36 003F; 3C36 -3C40 003F; 3C40 -3C4A 003F; 3C4A -3C53 003F; 3C53 -3C5D 003F; 3C5D -3C67 003F; 3C67 -3C71 003F; 3C71 -3C7B 003F; 3C7B -3C85 003F; 3C85 -3C8F 003F; 3C8F -3C99 003F; 3C99 -3CA3 003F; 3CA3 -3CAD 003F; 3CAD -3CB7 003F; 3CB7 -3CC1 003F; 3CC1 -3CCB 003F; 3CCB -3CD5 003F; 3CD5 -3CDF 003F; 3CDF -3CE9 003F; 3CE9 -3CF3 003F; 3CF3 -3CFD 003F; 3CFD -3D07 003F; 3D07 -3D11 003F; 3D11 -3D1B 003F; 3D1B -3D25 003F; 3D25 -3D2F 003F; 3D2F -3D38 003F; 3D38 -3D42 003F; 3D42 -3D4C 003F; 3D4C -3D56 003F; 3D56 -3D60 003F; 3D60 -3D6A 003F; 3D6A -3D74 003F; 3D74 -3D7E 003F; 3D7E -3D88 003F; 3D88 -3D92 003F; 3D92 -3D9B 003F; 3D9B -3DA5 003F; 3DA5 -3DAF 003F; 3DAF -3DB9 003F; 3DB9 -3DC3 003F; 3DC3 -3DCD 003F; 3DCD -3DD7 003F; 3DD7 -3DE1 003F; 3DE1 -3DEB 003F; 3DEB -3DF5 003F; 3DF5 -3DFF 003F; 3DFF -3E09 003F; 3E09 -3E13 003F; 3E13 -3E1D 003F; 3E1D -3E27 003F; 3E27 -3E31 003F; 3E31 -3E3B 003F; 3E3B -3E45 003F; 3E45 -3E4F 003F; 3E4F -3E59 003F; 3E59 -3E63 003F; 3E63 -3E6D 003F; 3E6D -3E77 003F; 3E77 -3E81 003F; 3E81 -3E8B 003F; 3E8B -3E95 003F; 3E95 -3E9F 003F; 3E9F -3EA9 003F; 3EA9 -3EB2 003F; 3EB2 -3EBA 003F; 3EBA -3EC4 003F; 3EC4 -3ECE 003F; 3ECE -3ED8 003F; 3ED8 -3EE2 003F; 3EE2 -3EEC 003F; 3EEC -3EF6 003F; 3EF6 -3F00 003F; 3F00 -3F0A 003F; 3F0A -3F14 003F; 3F14 -3F1D 003F; 3F1D -3F27 003F; 3F27 -3F31 003F; 3F31 -3F3B 003F; 3F3B -3F45 003F; 3F45 -3F4F 003F; 3F4F -3F59 003F; 3F59 -3F63 003F; 3F63 -3F6D 003F; 3F6D -3F77 003F; 3F77 -3F81 003F; 3F81 -3F8B 003F; 3F8B -3F95 003F; 3F95 -3F9F 003F; 3F9F -3FA9 003F; 3FA9 -3FB3 003F; 3FB3 -3FBD 003F; 3FBD -3FC7 003F; 3FC7 -3FD1 003F; 3FD1 -3FDB 003F; 3FDB -3FE5 003F; 3FE5 -3FEF 003F; 3FEF -3FF9 003F; 3FF9 -4002 003F; 4002 -400B 003F; 400B -4015 003F; 4015 -401F 003F; 401F -4029 003F; 4029 -4033 003F; 4033 -403C 003F; 403C -2F94B 0021; 2F94B -404F 003F; 404F -4059 003F; 4059 -4063 003F; 4063 -406D 003F; 406D -4077 003F; 4077 -4081 003F; 4081 -408B 003F; 408B -4095 003F; 4095 -409E 003F; 409E -40A8 003F; 40A8 -40B2 003F; 40B2 -40BC 003F; 40BC -40C6 003F; 40C6 -40D0 003F; 40D0 -40DA 003F; 40DA -40E3 0041; 40E3 -40ED 003F; 40ED -40F7 003F; 40F7 -4101 003F; 4101 -410B 003F; 410B -4115 003F; 4115 -411F 003F; 411F -4129 003F; 4129 -4132 003F; 4132 -413C 003F; 413C -4146 003F; 4146 -4150 003F; 4150 -415A 003F; 415A -4164 003F; 4164 -416E 003F; 416E -4178 003F; 4178 -4182 003F; 4182 -418C 003F; 418C -4196 003F; 4196 -41A0 003F; 41A0 -41AA 003F; 41AA -41B4 003F; 41B4 -41BE 003F; 41BE -41C8 003F; 41C8 -41D2 003F; 41D2 -41DC 003F; 41DC -41E6 003F; 41E6 -41F0 003F; 41F0 -41FA 003F; 41FA -4203 003F; 4203 -420D 003F; 420D -4217 003F; 4217 -4221 003F; 4221 -422A 003F; 422A -4234 003F; 4234 -423E 003F; 423E -4248 003F; 4248 -4252 003F; 4252 -425C 003F; 425C -4266 003F; 4266 -4270 003F; 4270 -427A 003F; 427A -4284 003F; 4284 -428E 003F; 428E -4298 003F; 4298 -42A1 003F; 42A1 -42AB 003F; 42AB -42B5 003F; 42B5 -42BF 003F; 42BF -42C9 003F; 42C9 -42D3 003F; 42D3 -42DD 003F; 42DD -42E7 003F; 42E7 -42F1 003F; 42F1 -42FB 003F; 42FB -4304 003F; 4304 -430E 003F; 430E -4318 003F; 4318 -4322 003F; 4322 -432C 003F; 432C -4335 003F; 4335 -433F 003F; 433F -4349 003F; 4349 -4353 003F; 4353 -435C 003F; 435C -4366 003F; 4366 -4370 003F; 4370 -437A 003F; 437A -4384 003F; 4384 -438E 003F; 438E -4398 003F; 4398 -43A2 003F; 43A2 -43AC 003F; 43AC -43B6 003F; 43B6 -43C0 003F; 43C0 -43CA 003F; 43CA -43D4 003F; 43D4 -43DC 003F; 43DC -43E6 003F; 43E6 -43F0 003F; 43F0 -43FA 003F; 43FA -4404 003F; 4404 -440D 003F; 440D -4417 003F; 4417 -4421 003F; 4421 -442B 003F; 442B -4435 003F; 4435 -443F 003F; 443F -4449 003F; 4449 -4453 003F; 4453 -445D 003F; 445D -4467 003F; 4467 -4470 003F; 4470 -447A 003F; 447A -4484 003F; 4484 -448E 003F; 448E -4498 003F; 4498 -44A2 003F; 44A2 -44AC 003F; 44AC -44B6 003F; 44B6 -44C0 003F; 44C0 -44CA 003F; 44CA -44D4 003F; 44D4 -44DE 003F; 44DE -44E8 003F; 44E8 -44F2 003F; 44F2 -44FC 003F; 44FC -4506 003F; 4506 -4510 003F; 4510 -451A 003F; 451A -4524 003F; 4524 -452D 003F; 452D -4537 003F; 4537 -4541 003F; 4541 -454B 003F; 454B -4555 003F; 4555 -455E 003F; 455E -4567 003F; 4567 -4570 003F; 4570 -457A 003F; 457A -4584 003F; 4584 -458E 003F; 458E -4598 003F; 4598 -45A2 003F; 45A2 -45AC 003F; 45AC -45B6 003F; 45B6 -45C0 003F; 45C0 -45CA 003F; 45CA -45D4 003F; 45D4 -45DD 003F; 45DD -45E7 003F; 45E7 -45F1 003F; 45F1 -45FA 003F; 45FA -4604 003F; 4604 -460E 003F; 460E -4618 003F; 4618 -4622 003F; 4622 -462C 003F; 462C -4635 0041; 4635 -463F 003F; 463F -4649 003F; 4649 -4653 003F; 4653 -465D 003F; 465D -4667 003F; 4667 -4671 003F; 4671 -467B 003F; 467B -4685 003F; 4685 -468F 003F; 468F -4699 003F; 4699 -46A3 003F; 46A3 -46AD 003F; 46AD -46B7 003F; 46B7 -46C0 003F; 46C0 -46C9 003F; 46C9 -46D3 003F; 46D3 -46DD 003F; 46DD -46E7 003F; 46E7 -46F1 003F; 46F1 -46FB 003F; 46FB -4705 003F; 4705 -470F 003F; 470F -4719 003F; 4719 -4723 003F; 4723 -472D 003F; 472D -4737 003F; 4737 -4741 003F; 4741 -474B 003F; 474B -4755 003F; 4755 -475F 003F; 475F -4769 003F; 4769 -4773 003F; 4773 -477D 003F; 477D -4787 003F; 4787 -4791 003F; 4791 -479B 003F; 479B -47A5 003F; 47A5 -47AF 003F; 47AF -47B9 003F; 47B9 -47C3 003F; 47C3 -47CD 003F; 47CD -47D7 003F; 47D7 -47E1 003F; 47E1 -47EB 003F; 47EB -47F5 003F; 47F5 -47FF 003F; 47FF -4809 003F; 4809 -4813 003F; 4813 -481D 003F; 481D -4827 003F; 4827 -4831 003F; 4831 -483B 003F; 483B -4845 003F; 4845 -484F 003F; 484F -4859 003F; 4859 -4863 003F; 4863 -486D 003F; 486D -4877 003F; 4877 -4881 003F; 4881 -488B 003F; 488B -4895 003F; 4895 -489F 003F; 489F -48A9 003F; 48A9 -48B3 003F; 48B3 -48BD 003F; 48BD -48C7 003F; 48C7 -48D1 003F; 48D1 -48DB 003F; 48DB -48E5 003F; 48E5 -48EF 003F; 48EF -48F9 003F; 48F9 -4903 003F; 4903 -490D 003F; 490D -4917 003F; 4917 -4921 003F; 4921 -492B 003F; 492B -4935 003F; 4935 -493F 003F; 493F -4949 003F; 4949 -4953 003F; 4953 -495D 003F; 495D -4967 003F; 4967 -4971 003F; 4971 -497B 003F; 497B -4985 003F; 4985 -498F 003F; 498F -4998 003F; 4998 -49A2 003F; 49A2 -49AC 003F; 49AC -49B6 003F; 49B6 -49C0 003F; 49C0 -49CA 003F; 49CA -49D4 003F; 49D4 -49DE 003F; 49DE -49E7 003F; 49E7 -49F1 003F; 49F1 -49FB 003F; 49FB -4A05 003F; 4A05 -4A0F 003F; 4A0F -4A19 003F; 4A19 -4A23 003F; 4A23 -4A2D 003F; 4A2D -4A37 003F; 4A37 -4A41 003F; 4A41 -4A4B 003F; 4A4B -4A55 003F; 4A55 -4A5F 003F; 4A5F -4A69 003F; 4A69 -4A72 003F; 4A72 -4A7B 003F; 4A7B -4A85 003F; 4A85 -4A8F 003F; 4A8F -4A99 003F; 4A99 -4AA3 003F; 4AA3 -4AAD 003F; 4AAD -4AB6 003F; 4AB6 -4AC0 003F; 4AC0 -4ACA 003F; 4ACA -4AD4 003F; 4AD4 -4ADE 003F; 4ADE -4AE8 003F; 4AE8 -4AF2 003F; 4AF2 -4AFC 003F; 4AFC -4B06 003F; 4B06 -4B10 003F; 4B10 -4B1A 003F; 4B1A -4B24 003F; 4B24 -4B2E 003F; 4B2E -4B37 003F; 4B37 -4B41 003F; 4B41 -4B4B 003F; 4B4B -4B55 003F; 4B55 -4B5F 003F; 4B5F -4B69 003F; 4B69 -4B73 003F; 4B73 -4B7D 003F; 4B7D -4B87 003F; 4B87 -4B91 003F; 4B91 -4B9B 003F; 4B9B -4BA5 003F; 4BA5 -4BAF 003F; 4BAF -4BB9 003F; 4BB9 -4BC3 003F; 4BC3 -4BCD 003F; 4BCD -4BD6 003F; 4BD6 -4BE0 003F; 4BE0 -4BEA 003F; 4BEA -4BF4 003F; 4BF4 -4BFE 003F; 4BFE -4C08 003F; 4C08 -4C12 003F; 4C12 -4C1C 003F; 4C1C -4C26 003F; 4C26 -4C30 003F; 4C30 -4C3A 003F; 4C3A -4C44 003F; 4C44 -4C4E 003F; 4C4E -4C58 003F; 4C58 -4C62 003F; 4C62 -4C6C 003F; 4C6C -4C76 003F; 4C76 -4C80 003F; 4C80 -4C8A 003F; 4C8A -4C94 003F; 4C94 -4C9E 003F; 4C9E -4CA8 003F; 4CA8 -4CB2 003F; 4CB2 -4CBC 003F; 4CBC -4CC6 003F; 4CC6 -4CCF 003F; 4CCF -4CD9 003F; 4CD9 -4CE3 003F; 4CE3 -2FA0E 0021; 2FA0E -4CF6 003F; 4CF6 -4CFF 003F; 4CFF -4D09 003F; 4D09 -4D13 003F; 4D13 -4D1D 003F; 4D1D -4D27 003F; 4D27 -4D31 003F; 4D31 -4D3B 003F; 4D3B -4D45 003F; 4D45 -4D4F 003F; 4D4F -4D58 003F; 4D58 -4D62 003F; 4D62 -4D6C 003F; 4D6C -4D76 003F; 4D76 -4D80 003F; 4D80 -4D8A 003F; 4D8A -4D94 003F; 4D94 -4D9E 003F; 4D9E -4DA8 003F; 4DA8 -4DB2 003F; 4DB2 -2F803 003F; 2F803 -2F860 003F; 2F860 -2F891 0041; 2F891 -2F8E3 003F; 2F8E3 -2F91D 003F; 2F91D -2F942 003F; 2F942 -2F95D 0041; 2F95D -2F97C 003F; 2F97C -2F9B1 003F; 2F9B1 -2F9ED 003F; 2F9ED -2FA12 003F; 2FA12 -2A6D6 003F; 2A6D6 -F8FC 003F; F8FC -E0004 003F; E0004 -F00FA 003F; F00FA -FFFF8 003F; FFFF8 -100004 003F; 100004 -10FF02 003F; 10FF02 +0334 05A9; +0334 06E8; +0334 1D181; +059F 0334; +06DA 0334; +1B71 0334; +1D18B 0334; +030A 0334; +030F 0334; +0320 0334; +0331 0334; +034A 0334; +035A 0334; +1DC5 0334; +0334 05B7; +064F 0334; +065E 0334; +073C 0334; +07EC 0334; +10A0D 0334; +17DD 0334; +20D5 0334; +20E5 0334; +0085 003F; +0020 003F; +205F 0061; +205F 0062; +FF40 0041; +FF3E 0061; +FE49 0041; +00A8 0021; +02DD 0021; +1FCE 0061; +1FFE 0061; +FF3F 003F; +2017 0041; +FF0D 0061; +2011 003F; +FE58 0061; +3030 0041; +FE50 0041; +066C 0041; +FF64 0041; +037E 0041; +FE13 0021; +0703 0041; +1361 0041; +1805 0041; +16ED 0041; +0080 0021; +009F 0021; +05AB 0021; +06E2 0021; +1B72 0021; +FDD1 0021; +1D165 0021; +1D188 0021; +AFFFF 0021; +E0036 0021; +E0054 0021; +E0072 0021; +E0110 0021; +E012E 0021; +E014C 0021; +E016A 0021; +E0188 0021; +E01A6 0021; +E01C4 0021; +E01E2 0021; +0342 0021; +0321 0021; +0348 0021; +1DC2 0021; +05BC 0021; +FC63 0021; +073C 0021; +0953 0021; +0D83 0021; +0F7F 0021; +309A 0021; +20EC 0021; +0021 0062; +0006 003F; +0089 003F; +0595 003F; +0600 003F; +06ED 003F; +202B 003F; +FE03 003F; +1D170 003F; +1D242 003F; +E0020 003F; +E003E 003F; +E005C 003F; +E007A 003F; +E0118 003F; +E0136 003F; +E0154 003F; +E0172 003F; +E0190 003F; +E01AE 003F; +E01CC 003F; +E01EA 003F; +0328 003F; +032B 003F; +0351 003F; +1DCA 003F; +064D 003F; +0657 003F; +0744 003F; +0A02 003F; +10A0D 003F; +17C9 003F; +20D6 003F; +2048 0021; +00BF 0062; +2CFA 0062; +FE19 0041; +06D4 0062; +166E 0062; +FE12 0062; +A877 0062; +17D5 0062; +07F7 0062; +1B5A 0062; +205A 0062; +2CFF 0062; +1091F 0062; +FF07 0062; +203A 0062; +201F 0062; +208D 0021; +2480 0061; +2486 0061; +2479 0061; +249C 0021; +24A0 0062; +24A6 0062; +24AC 0062; +24B2 0062; +3201 0062; +3204 0062; +3207 0062; +321C 0062; +3219 0062; +3226 0062; +323D 0062; +323F 0062; +3230 0062; +322B 0062; +3242 0062; +207E 003F; +FF3B 0041; +007B 0041; +FE38 0062; +169C 0062; +2984 0062; +2988 0062; +298E 0062; +2994 0062; +2E03 0062; +2E0D 0062; +3009 003F; +FE3E 0062; +FE42 0062; +FE3B 0062; +FE5E 003F; +FE18 0062; +FD3F 0062; +FF20 003F; +204E 0062; +FF3C 003F; +214B 0062; +FF05 0041; +2020 0062; +204C 0062; +2037 0021; +203B 0062; +2042 0062; +2E0B 0062; +2E13 0062; +055F 0062; +05F4 0062; +180A 0062; +0F05 0062; +0FD0 0062; +0F0F 0062; +104C 0062; +17D9 0062; +10A51 0062; +02B9 0061; +02C4 0062; +02CA 0062; +02D2 0062; +02DE 0062; +02E9 0062; +02F0 0062; +02F6 0062; +02FC 0062; +1392 0062; +1398 0062; +A704 0062; +A70A 0062; +A710 0062; +A716 0062; +A721 0062; +060F 0062; +0BF3 0062; +0BFA 0062; +A82B 0062; +0F15 0062; +0F1D 0062; +0F3E 0062; +0FC2 0062; +0FC9 0062; +19E1 0062; +19E7 0062; +19ED 0062; +19F3 0062; +19F9 0062; +19FF 0062; +1B66 0062; +1B75 0062; +1B7B 0062; +2118 0062; +2129 0062; +2144 0062; +2190 0062; +2193 0021; +2196 0041; +219E 0041; +21A4 0041; +21AA 0041; +21B1 0041; +21B7 0041; +21BD 0041; +21C3 0041; +21C9 0041; +21D1 003F; +21CE 0041; +21DA 0061; +21E0 0061; +21E6 0061; +21EC 0061; +21F2 0061; +21F8 0061; +21FE 0061; +2202 0061; +2205 0021; +1D6FB 0041; +220C 0021; +2210 003F; +FB29 0061; +226E 0334; +FF1D 003F; +207C 0062; +00AC 0041; +007E 0021; +2214 0021; +221A 0021; +2220 0021; +2226 0021; +222B 003F; +222F 0062; +2236 003F; +2241 0334; +2240 0062; +2246 0021; +224C 0041; +2251 003F; +2257 003F; +225D 003F; +2263 0062; +2267 0021; +2272 0338 0334; +2276 0061; +227B 0338 0334; +227D 0061; +2283 0021; +2289 0061; +228F 003F; +22E3 0041; +2298 0061; +229E 0061; +22A3 0021; +22AD 003F; +22AB 0061; +22B3 0021; +22ED 0061; +22BB 003F; +22C1 003F; +22C7 003F; +22CD 003F; +22D3 003F; +22D9 003F; +22DF 003F; +22E9 003F; +22F3 003F; +22F9 003F; +22FF 003F; +2305 003F; +230B 003F; +2311 003F; +2317 003F; +231D 003F; +2323 003F; +232B 003F; +2331 003F; +2337 003F; +233D 003F; +2343 003F; +2349 003F; +234F 003F; +2355 003F; +235B 003F; +2361 003F; +2367 003F; +236D 003F; +2373 003F; +2379 003F; +237F 003F; +2385 003F; +238B 003F; +2391 003F; +2397 003F; +239D 003F; +23A3 003F; +23A9 003F; +23AF 003F; +23B5 003F; +23BB 003F; +23C1 003F; +23C7 003F; +23CD 003F; +23D3 003F; +23D9 003F; +23DF 003F; +23E5 003F; +2403 003F; +2409 003F; +240F 003F; +2415 003F; +241B 003F; +2421 003F; +2440 003F; +2446 003F; +2501 003F; +2506 003F; +250C 003F; +2512 003F; +2518 003F; +251E 003F; +2524 003F; +252A 003F; +2530 003F; +2536 003F; +253C 003F; +2542 003F; +2548 003F; +254E 003F; +2554 003F; +255A 003F; +2560 003F; +2566 003F; +256C 003F; +2572 003F; +2578 003F; +257E 003F; +2584 003F; +258A 003F; +2590 003F; +2596 003F; +259C 003F; +25A1 003F; +25A7 003F; +25AD 003F; +25B3 003F; +25B9 003F; +25BF 003F; +25C5 003F; +FFEE 0021; +25D0 003F; +25D6 003F; +25DC 003F; +25E2 003F; +25E8 003F; +25EE 003F; +25F4 003F; +25FA 003F; +2600 003F; +2606 003F; +260C 003F; +2612 003F; +2618 003F; +261E 003F; +2624 003F; +262A 003F; +2638 003F; +263E 003F; +2644 003F; +264A 003F; +2650 003F; +2656 003F; +265C 003F; +2662 003F; +2668 003F; +2671 003F; +2677 003F; +267D 003F; +2683 003F; +2689 003F; +2695 003F; +269B 003F; +26A4 003F; +26AA 003F; +26B0 003F; +2704 003F; +270D 003F; +2713 003F; +2719 003F; +271F 003F; +2725 003F; +272C 003F; +2732 003F; +2738 003F; +273E 003F; +2744 003F; +274A 003F; +2752 003F; +275C 003F; +2764 003F; +276A 003F; +2770 003F; +2794 003F; +279D 003F; +27A3 003F; +27A9 003F; +27AF 003F; +27B6 003F; +27BC 003F; +27C3 003F; +27C9 003F; +27D4 003F; +27DA 003F; +27E0 003F; +27E6 003F; +27F0 003F; +27F6 003F; +27FC 003F; +2902 003F; +2908 003F; +290E 003F; +2914 003F; +291A 003F; +2920 003F; +2926 003F; +292C 003F; +2932 003F; +2938 003F; +293E 003F; +2944 003F; +294A 003F; +2950 003F; +2956 003F; +295C 003F; +2962 003F; +2968 003F; +296E 003F; +2974 003F; +297A 003F; +2980 003F; +299C 003F; +29A2 003F; +29A8 003F; +29AE 003F; +29B4 003F; +29BA 003F; +29C0 003F; +29C6 003F; +29CC 003F; +29D2 003F; +29D8 003F; +29DE 003F; +29E4 003F; +29EA 003F; +29F0 003F; +29F6 003F; +29FE 003F; +2A04 003F; +2A0A 003F; +2A11 003F; +2A17 003F; +2A1D 003F; +2A23 003F; +2A29 003F; +2A2F 003F; +2A35 003F; +2A3B 003F; +2A41 003F; +2A47 003F; +2A4D 003F; +2A53 003F; +2A59 003F; +2A5F 003F; +2A65 003F; +2A6B 003F; +2A71 003F; +2A7A 003F; +2A80 003F; +2A86 003F; +2A8C 003F; +2A92 003F; +2A98 003F; +2A9E 003F; +2AA4 003F; +2AAA 003F; +2AB0 003F; +2AB6 003F; +2ABC 003F; +2AC2 003F; +2AC8 003F; +2ACE 003F; +2AD4 003F; +2ADA 003F; +2ADF 0062; +2AE5 0062; +2AEB 0062; +2AF1 0062; +2AF7 0062; +2AFD 0062; +2B03 0062; +2B09 0062; +2B0F 0062; +2B15 0062; +2B20 0062; +2CE7 0062; +2802 0062; +2808 0062; +280E 0062; +2814 0062; +281A 0062; +2820 0062; +2826 0062; +282C 0062; +2832 0062; +2838 0062; +283E 0062; +2844 0062; +284A 0062; +2850 0062; +2856 0062; +285C 0062; +2862 0062; +2868 0062; +286E 0062; +2874 0062; +287A 0062; +2880 0062; +2886 0062; +288C 0062; +2892 0062; +2898 0062; +289E 0062; +28A4 0062; +28AA 0062; +28B0 0062; +28B6 0062; +28BC 0062; +28C2 0062; +28C8 0062; +28CE 0062; +28D4 0062; +28DA 0062; +28E0 0062; +28E6 0062; +28EC 0062; +28F2 0062; +28F8 0062; +28FE 0062; +268E 0062; +2634 0062; +4DC2 0062; +4DC8 0062; +4DCE 0062; +4DD4 0062; +4DDA 0062; +4DE0 0062; +4DE6 0062; +4DEC 0062; +4DF2 0062; +4DF8 0062; +4DFE 0062; +1D304 0062; +1D30A 0062; +1D310 0062; +1D316 0062; +1D31C 0062; +1D322 0062; +1D328 0062; +1D32E 0062; +1D334 0062; +1D33A 0062; +1D340 0062; +1D346 0062; +1D34C 0062; +1D352 0062; +A491 0062; +A497 0062; +A49D 0062; +A4A3 0062; +A4A9 0062; +A4AF 0062; +A4B5 0062; +A4BB 0062; +A4C1 0062; +10137 0062; +1013D 0062; +1017C 0062; +10182 0062; +10188 0062; +1D004 0062; +1D00A 0062; +1D010 0062; +1D016 0062; +1D01C 0062; +1D022 0062; +1D028 0062; +1D02E 0062; +1D034 0062; +1D03A 0062; +1D040 0062; +1D046 0062; +1D04C 0062; +1D052 0062; +1D058 0062; +1D05E 0062; +1D064 0062; +1D06A 0062; +1D070 0062; +1D076 0062; +1D07C 0062; +1D082 0062; +1D088 0062; +1D08E 0062; +1D094 0062; +1D09A 0062; +1D0A0 0062; +1D0A6 0062; +1D0AC 0062; +1D0B2 0062; +1D0B8 0062; +1D0BE 0062; +1D0C4 0062; +1D0CA 0062; +1D0D0 0062; +1D0D6 0062; +1D0DC 0062; +1D0E2 0062; +1D0E8 0062; +1D0EE 0062; +1D0F4 0062; +1D104 0062; +1D10A 0062; +1D110 0062; +1D116 0062; +1D11C 0062; +1D122 0062; +266E 0062; +1D12E 0062; +1D134 0062; +1D13A 0062; +1D140 0062; +1D146 0062; +1D14C 0062; +1D152 0062; +1D157 0041; +1D161 0021; +1D163 0062; +1D16A 0041; +1D18D 0041; +1D193 0041; +1D199 0041; +1D19F 0041; +1D1A5 0041; +1D1AF 0041; +1D1B5 0041; +1D1BD 0021; +1D1BC 0021; +1D1C3 003F; +1D1C9 003F; +1D1CF 003F; +1D1D5 003F; +1D1DB 003F; +1D203 003F; +1D209 003F; +1D20F 003F; +1D215 003F; +1D21B 003F; +1D221 003F; +1D227 003F; +1D22D 003F; +1D233 003F; +1D239 003F; +1D23F 003F; +2FF2 003F; +2FF8 003F; +31C2 003F; +31C8 003F; +31CE 003F; +3020 003F; +327F 003F; +0BF1 003F; +1376 003F; +137C 003F; +10323 003F; +10115 003F; +1011B 003F; +10121 003F; +10127 003F; +1012D 003F; +10133 003F; +10147 003F; +1014E 003F; +10155 003F; +10163 003F; +10169 003F; +1016F 003F; +10176 003F; +10917 003F; +10A47 003F; +1245B 003F; +12461 003F; +1D36D 003F; +02D1 003F; +3032 0061; +309D 0062; +00A2 0021; +00A3 0041; +0AF1 0021; +20A2 0021; +20A9 0021; +20AE 0021; +20B4 0021; +0BE6 0021; +07C0 003F; +1D7E2 0061; +0AE6 0061; +1B50 0061; +0CE6 0062; +2780 0021; +3021 0021; +2081 003F; +10158 003F; +2153 0062; +24FE 003F; +32C9 003F; +32CA 003F; +32CB 003F; +3365 003F; +24EF 0021; +2497 0061; +2470 0041; +33F1 003F; +336B 003F; +2081 0061; +0D67 0061; +10159 0061; +1D7CF 0062; +0ED1 0062; +32C0 0021; +09E8 0021; +12423 0021; +0A68 003F; +12435 003F; +2473 0061; +336D 0062; +336F 0062; +3256 0062; +3259 0062; +00B2 0061; +0CE8 0061; +1015B 0061; +1D361 0061; +0D68 0062; +33E1 0021; +06F3 0021; +12420 0021; +136B 003F; +12425 003F; +215C 0062; +325D 0062; +32B4 0062; +0663 0041; +1949 0041; +12425 0061; +1D7DB 0062; +0F23 0062; +32C2 0021; +09EA 0021; +1243C 0021; +09F7 003F; +1243D 003F; +32B7 0061; +32BD 0061; +2783 0041; +0C6A 0061; +1010A 0061; +12452 0041; +0B6A 0062; +1244C 0062; +2784 0021; +1010B 0021; +278E 003F; +10143 003F; +215D 0061; +2784 0041; +0CEB 0061; +10143 0061; +12439 0041; +0BEB 0062; +12439 0062; +2785 0021; +1010C 0021; +0A6C 003F; +248D 0061; +2086 0041; +194C 0041; +12440 0061; +096C 0062; +33E5 0021; +06F7 0021; +12429 0021; +0C6D 003F; +215E 0021; +2077 0041; +0D6D 0041; +1241B 0061; +06F7 0062; +12429 0062; +2787 0021; +1010E 0021; +0A6E 003F; +248F 0061; +2088 0041; +194E 0041; +12444 0061; +096E 0062; +33E7 0021; +06F9 0021; +1242B 0021; +0BEF 003F; +2490 0041; +0669 0061; +19D9 0061; +12447 0061; +07C9 0062; +12446 0062; +000F 0061; +008D 0061; +0599 0061; +0610 0061; +0F35 0061; +2060 0061; +FE07 0061; +1D174 0061; +1FFFF 0061; +E0024 0061; +E0042 0061; +E0060 0061; +E007E 0061; +E011C 0061; +E013A 0061; +E0158 0061; +E0176 0061; +E0194 0061; +E01B2 0061; +E01D0 0061; +E01EE 0061; +001D 0041; +009B 0041; +05A7 0041; +06DE 0041; +1B6E 0041; +D804 0041; +FFFA 0041; +1D182 0041; +8FFFF 0041; +E0032 0041; +E0050 0041; +E006E 0041; +E010C 0041; +E012A 0041; +E0148 0041; +E0166 0041; +E0184 0041; +E01A2 0041; +E01C0 0041; +E01DE 0041; +0061 0334 0300; +0061 0334 0306 0303; +0061 0302 0300 0334; +0061 030A 0334; +0061 0334 0303; +0100 0334; +0041 0334 0323 0306; +0340 0061; +0304 0041; +031B 0041; +032C 0041; +033C 0041; +0351 0041; +FE22 0061; +1DCA 0041; +05B8 0041; +064D 0041; +FE7D 0041; +0657 0041; +0735 0041; +0744 0041; +07F3 0041; +0A02 0041; +0C03 0041; +10A0D 0041; +0EC9 0041; +17C9 0041; +302B 0041; +20D6 0041; +20E5 0041; +1D552 0021; +00E0 0021; +00C4 0021; +1D41A 003F; +00AA 003F; +00E5 003F; +1EAC 003F; +1D44E 0061; +FF21 0041; +1D43 0061; +1EB4 0041; +00E5 0041; +0105 0041; +1EAC 0041; +1D538 0062; +1EA7 0062; +0200 0062; +01E3 0021; +3373 0021; +1D01 0021; +0251 0041; +000F 0062; +008D 0062; +0599 0062; +0610 0062; +0F35 0062; +2060 0062; +FE07 0062; +1D174 0062; +1FFFF 0062; +E0024 0062; +E0042 0062; +E0060 0062; +E007E 0062; +E011C 0062; +E013A 0062; +E0158 0062; +E0176 0062; +E0194 0062; +E01B2 0062; +E01D0 0062; +E01EE 0062; +0300 0062; +031B 0062; +033D 0062; +FE22 0062; +05C7 0062; +FC5E 0062; +0736 0062; +093C 0062; +0CBC 0062; +0ECA 0062; +302C 0062; +20E6 0062; +1D435 0021; +1D5BB 003F; +0062 0061; +24D1 0061; +1D63D 0041; +1D4B7 0062; +1E02 0062; +1D03 0021; +0183 0041; +010A 0334; +1D5F0 0021; +010A 0021; +1D46A 003F; +2106 0061; +1D450 0041; +1D60A 0061; +010C 0061; +1D588 0062; +010C 0062; +339D 0041; +0188 0062; +1E0B 0334; +0064 0021; +1D56F 0021; +2146 003F; +1D63F 003F; +2146 0061; +0044 0061; +1D5D7 0041; +1E0F 0061; +1D555 0062; +1E0B 0062; +3377 0021; +02A3 0061; +1D05 0021; +0257 0021; +0065 0301 0334; +0065 0302 0334 0341; +0065 030C 0334; +0065 0334 0306 0327; +0065 0334 0304 0300; +0065 0302 0334 0323; +1D4EE 0021; +00C9 0021; +0112 0021; +1D58A 003F; +0115 003F; +1E15 003F; +1D58A 0061; +1D4D4 0061; +00E9 0061; +1EC2 0061; +0113 0061; +1EC6 0061; +2130 0062; +1EC4 0062; +1EB8 0062; +0247 0062; +0259 0061; +2107 0041; +025C 0062; +029A 0041; +FF26 0021; +1D627 003F; +1D4BB 0061; +1D405 0061; +1E1F 0041; +1D4D5 0062; +FB01 0061; +0192 003F; +0047 0334 0306; +0047 0334 0304; +1D60E 0021; +1D5C0 003F; +01E7 003F; +1D524 0041; +1D4A2 0041; +01E6 0061; +1D5F4 0062; +01E6 0062; +1DA2 003F; +1D83 0041; +0194 0061; +0068 0334 0308; +0068 0334 0331; +1D573 0021; +210E 003F; +02B0 003F; +1D4F1 0061; +210D 0061; +0125 0061; +0127 0061; +210B 0062; +1E96 0062; +01F6 0021; +2C75 0021; +0049 0341 0334; +00EF 0334; +0049 0304 0334; +0049 0330 0334; +1D408 0021; +0128 0021; +1D5C2 003F; +012D 003F; +FF49 0041; +1D5C2 0041; +1D470 0041; +00EE 0041; +1EC9 0041; +1D526 0062; +00CD 0062; +2171 0021; +33CC 0021; +0131 0021; +0268 0021; +0269 0021; +FF4A 0021; +1D679 0021; +1D4D9 003F; +1D62B 0061; +1D575 0061; +01F0 0041; +1D611 0062; +0248 0061; +006B 0334 0341; +1E35 0334; +1D542 0021; +1D5C4 003F; +0136 003F; +1D5C4 0041; +1D4DA 0041; +1E32 0041; +1D43E 0062; +3389 0021; +33A2 003F; +33BE 0021; +2C6A 0021; +006C 0334 0327; +1E3A 0334; +1D5AB 0021; +1D48D 003F; +1D38 003F; +FF4C 0041; +1D695 0041; +1D5AB 0041; +1E38 0041; +24DB 0062; +1E3D 0062; +33D1 0062; +029F 0061; +2C60 0062; +026D 0061; +004D 0334 0301; +1D5C6 0021; +1E42 0021; +1D5AC 003F; +33A5 003F; +1D52A 0041; +1D40C 0041; +3383 0021; +1D4DC 0062; +338E 0061; +339C 0061; +33BD 003F; +0271 003F; +006E 0303 0334; +006E 0331 0334; +1D511 0021; +1D427 003F; +207F 003F; +1D55F 0061; +1D4A9 0061; +0143 0061; +1E49 0061; +1D475 0062; +1E48 0062; +2116 0062; +1D3B 0062; +019E 0061; +014A 003F; +00F2 0334; +004F 0334 0302 0340; +00D6 0334; +00F5 0308 0334; +006F 0334 0328; +014D 0340 0334; +006F 031B 0334 0301; +1EDE 0334; +1D45C 0021; +2092 0021; +1E4F 0021; +1EDB 0021; +24DE 003F; +1ED0 003F; +01FE 003F; +1ECC 003F; +1D5C8 0041; +1D546 0041; +00F4 0041; +022A 0041; +00F8 0041; +1ECE 0041; +1EE3 0041; +1D40E 0062; +1ED7 0062; +01ED 0062; +0153 0021; +1D14 0021; +1D12 0021; +0275 0021; +1D3D 0061; +1D4F9 0021; +1E57 0021; +1D617 003F; +1D665 0061; +1D5E3 0061; +1E56 0041; +1D40F 0062; +33D7 003F; +33BA 003F; +01A4 0021; +1D4FA 0021; +1D492 003F; +FF51 0061; +0051 0061; +24C6 0061; +1D618 0062; +0072 0334 0301; +0210 0334; +FF52 0021; +1D681 0021; +1D4FB 003F; +0154 003F; +1D597 0061; +1D479 0061; +0155 0041; +1E5C 0041; +1D597 0062; +1E59 0062; +1D19 003F; +1D1A 003F; +2C64 0021; +02B6 0061; +0053 0334 030C; +1E63 0307 0334; +24E2 0021; +015F 0021; +1D47A 003F; +1E68 003F; +1D5CC 0041; +1D54A 0041; +1E66 0041; +1D4C8 0062; +1E65 0062; +00DF 0021; +0282 0021; +1D8B 0021; +0164 0334; +1E71 0334; +FF34 0021; +1E6F 0021; +1D5E7 003F; +1D495 0061; +1D413 0061; +1D40 0061; +1E6E 0061; +1D5E7 0062; +2121 0041; +02A7 0041; +1D75 0041; +0288 0062; +016D 0334; +00FC 0334 0301; +0075 030B 0334; +0055 0334 0304; +01B0 0334; +0075 0334 031B 0309; +0055 0334 032D; +1D448 0021; +01D8 0021; +1EEB 0021; +1D66A 003F; +01D4 003F; +0217 003F; +1D496 0061; +1D414 0061; +1D64 0061; +00DC 0061; +0173 0061; +1EE8 0061; +1E75 0061; +1D580 0062; +01D6 0062; +1EF1 0062; +1D1E 0021; +1D99 0021; +1D5A 003F; +1DB7 003F; +FF56 0021; +1D61D 0021; +2164 003F; +036E 0061; +24E5 0061; +1D5E9 0041; +1D5CF 0062; +2165 0021; +1D20 003F; +0245 0021; +0077 0302 0334; +1D464 0021; +1D42 0021; +0057 003F; +1E88 003F; +1D6A0 0041; +1D61E 0041; +1E86 0041; +1D582 0062; +1D21 0041; +1D535 0021; +1E8B 0021; +1D583 003F; +1D605 0061; +1D51B 0061; +1E8C 0041; +1D4E7 0062; +217B 0061; +0059 0302 0334; +0079 0309 0334; +1D418 0021; +1EF7 0021; +1D5B8 003F; +1D432 0061; +FF39 0061; +02B8 0061; +0232 0061; +1D480 0062; +1EF5 0062; +017A 0334; +007A 0334 0331; +1D585 0021; +1D5D3 003F; +017B 003F; +1D5D3 0041; +1D4E9 0041; +1E92 0041; +1D585 0062; +01B6 0021; +0290 0021; +2C6C 0041; +01EE 0041; +01BA 0062; +01BF 0061; +01BC 0062; +02C0 0062; +02E4 0062; +02A1 0062; +01C3 0062; +03B1 0334 0313 0301; +0391 0345 0313 0334 0300; +1F09 0334; +0391 0345 0314 0334 0340; +1F71 0334; +03B1 0334 0345 0342; +1F04 0021; +03AC 0021; +1F04 003F; +03AC 003F; +1D6A8 0061; +1F06 0061; +1F8B 0061; +1FB0 0061; +1F04 0062; +03AC 0062; +1D66 0021; +0392 0061; +1D66 0062; +1D792 003F; +1D792 0041; +1D773 0021; +1D6FF 0041; +1D5F 0062; +1F19 0334; +0395 0334 0300; +1F1D 0021; +1F1C 003F; +1D6DC 0041; +1F12 0041; +1D6DC 0062; +1FC9 0062; +03DA 0041; +1D701 0061; +1D721 0062; +03B7 0334 0343 0340; +1FC3 0313 0334; +03B7 0314 0334 0340; +1FCC 0314 0342 0334; +03B7 0334 0340 0345; +1F24 0021; +03AE 0021; +1F22 003F; +1FC4 003F; +1D75C 0041; +1F90 0061; +1F9F 0061; +03B7 0062; +1F25 0062; +1D703 0021; +1D78B 003F; +1D6C9 0041; +1D75D 0041; +1DBF 0062; +0399 0343 0334 0342; +0399 0314 0342 0334; +1FD6 0334; +1D6CA 0021; +1FDB 0021; +1F34 003F; +1FD9 003F; +1F30 0041; +1F3F 0041; +1FD7 0041; +1F3D 0062; +1D6DE 0021; +1D725 003F; +1D6EB 0061; +03D7 0041; +1D740 0061; +1D760 0062; +1D727 003F; +3382 003F; +3395 0041; +1D6EE 0021; +1D6B4 0061; +1D6EF 0021; +1D6B5 0061; +03BF 0313 0301 0334; +03BF 0314 0340 0334; +039F 0021; +039F 003F; +1D7B8 0061; +1F41 0061; +039F 0062; +1D71B 0021; +1D6F1 003F; +03A0 0061; +1D6F1 0062; +03D8 0021; +1D7C8 0021; +1FE4 003F; +1D6F2 0061; +1D6B8 0062; +1D7BC 0021; +03C3 0041; +1D768 0061; +03FE 0021; +1D6D5 0021; +1D6D5 0041; +03C5 0334 0343; +03C5 0314 0334 0300; +03C5 0340 0334; +03CB 0340 0334; +1F55 0021; +1D7BE 003F; +03CB 003F; +1D6BC 0041; +1F7B 0061; +1FE2 0041; +1F57 0062; +1D78D 0021; +1D69 003F; +1D76B 0061; +1D69 0062; +03C7 0041; +1D74C 0062; +1D6BF 003F; +1D6D9 0062; +03A9 0343 0334 0341; +1F6E 0334; +1F61 0341 0334; +03C9 0314 0342 0334; +2126 0334 0341; +2126 0345 0334; +1F61 0021; +1D714 003F; +1F6D 003F; +1D788 0061; +1FA4 0041; +1F6D 0041; +1FFB 0061; +1D76E 0062; +1FA7 0062; +03F8 0061; +2C85 0061; +2CB7 0061; +2C8F 0061; +2C95 0061; +2C96 0062; +2CBA 0062; +2C9E 0062; +2CA4 0062; +2CAA 0062; +2CB0 0062; +03E2 0062; +2CC6 0062; +2CC8 0062; +2CCC 0062; +2CD2 0062; +2CD6 0062; +2CDA 0062; +2CB2 0062; +2CE0 0062; +04D0 0334; +04D2 0334; +04D9 0041; +04DA 0061; +0412 003F; +0490 0062; +0494 0062; +0500 0062; +0433 0341 0021; +0413 0341 0041; +0415 0334 0308; +0400 0062; +04D7 0062; +0416 0041; +04DD 0041; +0417 0001 0308 0061; +04DF 0021; +0405 0041; +0418 0340 0334; +0418 0001 0308 0061; +04E4 0021; +0406 0001 0308 0061; +0457 0062; +0439 0062; +049A 003F; +049E 003F; +1D2B 0041; +0459 0062; +04CE 0062; +04A2 003F; +040A 003F; +043E 0334 0308; +04E8 0021; +04EB 0041; +04A6 0062; +048E 0062; +04AA 0062; +04AC 0062; +041A 0341 003F; +0423 0304 0334; +0443 0334 0306; +0443 0334 0308; +0443 0334 030B; +04AE 0021; +0424 0021; +04FE 0021; +0460 0021; +047A 0021; +0427 0021; +04F5 0041; +04CB 0062; +04BE 0062; +0429 0062; +04F9 0021; +042C 0041; +042D 0041; +04EC 0041; +0465 0041; +0469 0041; +0471 0041; +0474 030F 0334; +04A8 003F; +2C01 003F; +2C04 003F; +2C07 003F; +2C0A 003F; +2C0D 003F; +2C10 003F; +2C13 003F; +2C16 003F; +2C19 003F; +2C1C 003F; +2C1F 003F; +2C22 003F; +2C25 003F; +2C28 003F; +2C2B 003F; +2C2E 003F; +10A1 003F; +10A3 003F; +10A5 003F; +10C1 003F; +10A8 003F; +10AA 003F; +10DC 0062; +10DD 0041; +10DF 0041; +10E1 0041; +10F3 0041; +10E4 0041; +10E6 0041; +10E8 0041; +10EA 0041; +10EC 0041; +10EE 0041; +10EF 0041; +10F5 0041; +10F9 0041; +0533 003F; +0587 0041; +0568 0062; +056B 0062; +056E 0062; +0571 0062; +0574 0062; +0575 0062; +0578 0062; +057B 0062; +057E 0062; +0551 003F; +0554 003F; +0559 0041; +FB2E 0041; +05D1 0061; +05D3 0334 05BC; +FB23 003F; +FB4B 0062; +05D8 0334 05BC; +FB39 0041; +FB3A 0021; +FB25 0021; +05DD 0041; +05E1 003F; +FB43 0021; +FB46 003F; +FB27 003F; +FB2A 0021; +FB4A 0334; +10902 0062; +10908 0062; +1090E 0062; +10914 0062; +0627 0653 0021; +FE84 003F; +FB51 0041; +FE85 0062; +0626 0334; +064A 0654 0062; +FC98 0041; +FCDF 0061; +FBED 0041; +FBF1 0041; +FC68 0041; +FBF6 0061; +FE8E 0062; +FE91 003F; +FC06 0021; +FC6A 003F; +FC6D 003F; +FC0A 0061; +FB58 0021; +FB5C 003F; +0752 003F; +0629 0061; +FE97 0062; +FC0C 0021; +FC0D 0061; +FCE3 0021; +FD57 003F; +FC0F 0021; +062B 0041; +FCE5 0021; +FC13 0021; +0679 0041; +FB5F 0061; +067F 0041; +FE9E 0061; +FDFB 003F; +FDA5 003F; +FB78 003F; +0684 0041; +FB7B 0061; +FB7F 0061; +FEA3 0062; +FD5B 003F; +FEA7 0021; +FC19 0061; +FD04 0021; +0758 003F; +FEAC 0041; +068A 003F; +068D 0061; +0690 003F; +FEAE 0041; +FEAF 0041; +0694 003F; +FB8A 0041; +FEB3 0021; +FCAD 0061; +FC1D 0041; +FDC6 003F; +FD61 003F; +FCE8 0061; +FEB7 003F; +FD37 0041; +FD2E 0062; +FD39 0041; +FCE9 0041; +FCEA 0021; +069A 003F; +FEBB 0021; +FC20 0061; +FD0F 0061; +FC21 0061; +FD06 0061; +FC22 0021; +FC24 0021; +FC25 0021; +069D 003F; +FEC2 0061; +FC27 0041; +FCF5 0061; +FEC6 0061; +FECB 0021; +FC29 0061; +FD76 0021; +FCF8 0021; +FECF 0062; +FD7B 003F; +06A0 003F; +FED3 003F; +FC2E 0021; +FC30 0021; +FC32 0061; +06A4 0041; +06A6 0041; +FED7 0021; +FC33 0061; +FD7F 003F; +06A7 003F; +FEDB 0062; +FC39 0061; +FCC7 0062; +FDBB 0061; +FB90 0021; +06AB 003F; +FBD5 0062; +FB94 0062; +FB9C 0062; +FB98 0062; +FEDF 003F; +FEF7 0021; +FC3F 0021; +FDAC 003F; +FD81 003F; +FC85 003F; +FCCD 003F; +06B6 003F; +06FE 003F; +FC45 0061; +FC46 0061; +FC47 0061; +FC48 0041; +FEE7 0021; +FC4B 0061; +FDC7 003F; +FC4D 0021; +FCEE 0041; +FCEF 0061; +06BA 0061; +FBA2 0062; +0769 003F; +FEEC 0062; +FD94 003F; +FBAB 0061; +FBA7 0061; +06C0 003F; +FEED 0041; +FBE1 0041; +FBD8 0041; +FBDB 0062; +FBDF 0041; +FBE9 0041; +06E6 0061; +FCDA 0062; +FCDC 0062; +FC93 0062; +FCDE 0062; +FBFD 003F; +FBE5 0021; +06D2 0021; +0710 0021; +0716 0021; +074D 0021; +071F 0021; +0723 0041; +0729 0021; +079A 0021; +0785 0021; +07A5 0021; +0798 0021; +078F 0021; +0792 0021; +07B1 0021; +07AB 0021; +07CA 0021; +07D0 0021; +07D6 0021; +07D9 0041; +07DF 0021; +07E5 0021; +2D31 0021; +2D37 0021; +2D3D 0021; +2D43 0021; +2D49 0021; +2D4F 0021; +2D55 0021; +2D5B 0021; +2D61 0021; +1200 0021; +1206 0021; +120C 0021; +1211 0021; +1217 0021; +121D 0021; +1383 0021; +1224 0021; +122A 0021; +2D82 0021; +1235 0021; +123A 0021; +2D84 0021; +1245 0021; +124C 0021; +1254 0021; +125C 0021; +1264 0021; +1386 0021; +126B 0021; +1271 0021; +1277 0021; +127C 0021; +1281 0021; +1287 0021; +1290 0021; +1296 0021; +129B 0021; +12A0 0021; +12A6 0021; +12AB 0021; +12B2 0021; +12BA 0021; +12C2 0021; +12CA 0021; +12D0 0021; +12D6 0021; +12DD 0021; +12E2 0021; +12E8 0021; +12EE 0021; +12F4 0021; +12F9 0021; +12FF 0021; +1304 0021; +1309 0021; +130F 0021; +1318 0021; +131E 0021; +1320 0021; +1326 0021; +132B 0021; +1330 0021; +1336 0021; +133B 0021; +1341 0021; +1347 0021; +134D 0021; +138B 0021; +1355 0021; +138F 0021; +2DA1 0021; +2DA8 0021; +2DAE 0021; +2DB5 0021; +2DBC 0021; +2DC3 0021; +2DCA 0021; +2DD1 0021; +2DD8 0021; +2DDE 0021; +0908 0021; +0961 0021; +0912 0021; +0959 0334; +0918 003F; +091C 0062; +0921 0021; +0923 0061; +0928 0061; +097F 003F; +0930 0021; +0935 0061; +097D 0061; +0943 0061; +0947 0061; +094D 0021; +098A 0021; +0990 0021; +0998 0021; +099E 0021; +09DD 0334; +09A5 0062; +09AC 0062; +09F0 003F; +09B9 003F; +09C2 003F; +09C7 0591 09BE 0061; +0334 09CD; +0A0A 0041; +0A72 0041; +0A39 0021; +0A17 0061; +0A5B 0021; +0A21 003F; +0A27 003F; +0A2C 0041; +0A32 0041; +0A41 0021; +0334 0A4D; +0A88 0041; +0AE1 0041; +0A94 0041; +0A9A 0041; +0AA0 0041; +0AA6 0041; +0AAD 0041; +0AB5 0041; +0ABE 0041; +0AC4 0041; +0AC9 0041; +0B07 003F; +0B0C 003F; +0B15 003F; +0B1B 003F; +0B21 0B3C 0334; +0B24 0021; +0B2B 0021; +0B30 0021; +0B37 0021; +0B40 0021; +0B47 1D165 0B56 0061; +0B47 0B57 0041; +0B85 0062; +0B8E 0062; +0B92 0BD7 0041; +0B9F 003F; +0BAE 003F; +0BB4 003F; +0BBE 003F; +0BC6 0591 0BBE 0061; +0BC7 0BBE 003F; +0C05 0021; +0C0B 0021; +0C10 0021; +0C17 0021; +0C1D 0021; +0C23 0021; +0C2A 0021; +0C30 0021; +0C37 0021; +0C41 0021; +0C47 0062; +0C4C 0062; +0C86 0041; +0CE0 0041; +0C92 0041; +0C98 0041; +0C9E 0041; +0CA4 0041; +0CAB 0041; +0CB1 0041; +0CB9 0041; +0CBF 0CD5 0021; +0CE2 0021; +0CC7 003F; +0CCA 0001 0CD5 0061; +0CD5 0021; +0D09 0021; +0D0E 0021; +0D15 0021; +0D1B 0021; +0D21 0021; +0D27 0021; +0D2E 0021; +0D34 0021; +0D3E 0021; +0D46 0021; +0D46 0D3E 0041; +0D4D 0334; +0D89 0062; +0D8F 0062; +0D95 0062; +0D9E 0062; +0DA4 0062; +0DAA 0062; +0DB0 0062; +0DB7 0062; +0DC0 0062; +0DC6 0062; +0DD3 0061; +0DD9 0001 0DDF 0061; +0DDC 0041; +0DD9 0DDF 003F; +A801 0061; +A807 0021; +A80E 0021; +A814 0021; +A81A 0021; +A820 0021; +A826 0021; +10A05 0021; +10A13 0021; +10A1B 0021; +10A21 0021; +10A27 0021; +10A2D 0021; +10A33 0021; +0E42 0E01 0041; +0E42 0E02 0041; +0E42 0E03 0041; +0E42 0E04 0041; +0E42 0E05 0041; +0E42 0E06 0041; +0E42 0E07 0041; +0E42 0E08 0041; +0E42 0E09 0041; +0E42 0E0A 0041; +0E42 0E0B 0041; +0E42 0E0C 0041; +0E42 0E0D 0041; +0E42 0E0E 0041; +0E42 0E0F 0041; +0E42 0E10 0041; +0E42 0E11 0041; +0E42 0E12 0041; +0E42 0E13 0041; +0E42 0E14 0041; +0E42 0E15 0041; +0E42 0E16 0041; +0E42 0E17 0041; +0E42 0E18 0041; +0E42 0E19 0041; +0E42 0E1A 0041; +0E42 0E1B 0041; +0E42 0E1C 0041; +0E42 0E1D 0041; +0E42 0E1E 0041; +0E42 0E1F 0041; +0E42 0E20 0041; +0E42 0E21 0041; +0E42 0E22 0041; +0E42 0E23 0041; +0E42 0E24 0041; +0E42 0E25 0041; +0E42 0E26 0041; +0E42 0E27 0041; +0E42 0E28 0041; +0E42 0E29 0041; +0E42 0E2A 0041; +0E42 0E2B 0041; +0E42 0E2C 0041; +0E42 0E2D 0041; +0E42 0E2E 0041; +0E32 0041; +0E37 0021; +0E40 0062; +0E40 1D165 0E0A 0061; +0E40 1D165 0E14 0061; +0E40 1D165 0E1E 0061; +0E40 1D165 0E28 0061; +0E41 0001 0E03 0061; +0E41 0001 0E0D 0061; +0E41 0001 0E17 0061; +0E41 0001 0E21 0061; +0E41 0001 0E2B 0061; +0E42 0591 0E05 0061; +0E42 0591 0E0F 0061; +0E42 0591 0E19 0061; +0E42 0591 0E23 0061; +0E42 0591 0E2D 0061; +0E43 1D165 0E07 0061; +0E43 1D165 0E11 0061; +0E43 1D165 0E1B 0061; +0E43 1D165 0E25 0061; +0E44 0061; +0E44 0001 0E0A 0061; +0E44 0001 0E14 0061; +0E44 0001 0E1E 0061; +0E44 0001 0E28 0061; +0E81 0062; +0E82 0062; +0E84 0062; +0E87 0062; +0E88 0062; +0E8A 0062; +0E8D 0062; +0E94 0062; +0E95 0062; +0E96 0062; +0E97 0062; +0E99 0062; +0E9A 0062; +0E9B 0062; +0E9C 0062; +0E9D 0062; +0E9E 0062; +0E9F 0062; +0EA1 0062; +0EA2 0062; +0EA3 0062; +0EA5 0062; +0EA7 0062; +0EAA 0062; +0EAB 0062; +0EC4 0EDC 0062; +0EC4 0EDD 0062; +0EAD 0062; +0EAE 0062; +0EAF 0062; +0EB4 003F; +0EB9 0061; +0EC0 0591 0E84 0061; +0EC0 0591 0E9A 0061; +0EC0 0591 0EA7 0061; +0EC1 1D165 0E82 0061; +0EC1 1D165 0E99 0061; +0EC1 1D165 0EA5 0061; +0EC2 0001 0E82 0061; +0EC2 0001 0E99 0061; +0EC2 0001 0EA5 0061; +0EC3 0591 0E81 0061; +0EC3 0591 0E97 0061; +0EC3 0591 0EA3 0061; +0EC4 0062; +0EC4 1D165 0E96 0061; +0EC4 1D165 0EA2 0061; +0F40 0061; +0F42 0061; +0F45 0061; +0F49 0061; +0F4C 0061; +0F4F 0061; +0FA1 0061; +0F55 0061; +0F58 0061; +0F5B 0061; +0FBA 0041; +0FB0 0061; +0FB2 003F; +0FB3 0F71 0021; +0FB5 0041; +0F00 0041; +0F71 003F; +0334 0F80; +0334 0F74 0F71; +0FB2 0F80 0062; +0FB3 0591 0F80 0061; +0F7A 0021; +0F84 0061; +A845 0061; +A86C 0061; +A84D 0061; +A853 0061; +A868 0061; +A85A 0061; +A85D 0061; +A85F 0061; +1901 0061; +1907 0061; +190D 0061; +1913 0061; +1919 0061; +1922 0061; +1928 0061; +1932 0061; +1938 0061; +1705 0061; +170B 0061; +1712 0061; +1723 0021; +1729 0021; +172F 0021; +1734 0041; +1745 0041; +174B 0041; +1751 0041; +1763 0041; +1769 0041; +1770 0041; +1A03 0041; +1A09 0041; +1A0F 0041; +1A15 0041; +1A1A 0062; +1004 0062; +100A 0062; +1010 0062; +1016 0062; +101C 0062; +1020 0062; +1025 102E 0041; +1054 003F; +1030 003F; +1059 003F; +1783 0062; +1789 0062; +178F 0062; +1795 0062; +179B 0062; +17A1 0062; +17A6 0062; +17AC 0062; +17B2 0062; +17B8 0062; +17BE 0062; +17C4 0062; +1953 0061; +1959 0061; +195F 0061; +1965 0061; +196B 0061; +1973 0061; +1984 0061; +198A 0061; +1990 0061; +1996 0061; +199C 0061; +19A0 0061; +19A6 0061; +19B2 0061; +19B8 0061; +19BE 0061; +19C4 0061; +1B05 0061; +1B07 1B35 0041; +1B0B 1B35 0021; +1B0F 0061; +1B13 0062; +1B17 0062; +1B1D 0062; +1B47 0062; +1B48 0062; +1B2D 0062; +1B32 0062; +1B37 0062; +1B3C 003F; +1B3F 0001 1B35 0061; +1B42 1D165 1B35 0061; +1882 0041; +1820 0041; +1845 0041; +1846 0041; +1826 0041; +184A 0041; +182B 0041; +184E 0041; +182F 0041; +18A2 0041; +1833 0041; +185C 0041; +1836 0041; +1856 0041; +1863 0041; +186E 0041; +1859 0041; +185A 0041; +188E 0041; +1891 0041; +18A3 0041; +18A7 0041; +13A4 003F; +13AA 003F; +13B0 003F; +13B6 003F; +13BC 003F; +13C2 003F; +13C8 003F; +13CE 003F; +13D4 003F; +13DA 003F; +13E0 003F; +13E6 003F; +13EC 003F; +13F2 003F; +1404 003F; +140A 003F; +1410 003F; +1416 003F; +141C 003F; +1422 003F; +1428 003F; +142E 003F; +1434 003F; +143A 003F; +1440 003F; +1446 003F; +144C 003F; +1452 003F; +1458 003F; +145E 003F; +1464 003F; +146A 003F; +1470 003F; +1476 003F; +147C 003F; +1482 003F; +1488 003F; +148E 003F; +1494 003F; +149A 003F; +14A0 003F; +14A6 003F; +14AC 003F; +14B2 003F; +14B8 003F; +14BE 003F; +14C4 003F; +14CA 003F; +14D0 003F; +14D6 003F; +14DC 003F; +14E2 003F; +14E8 003F; +14EE 003F; +14F4 003F; +14FA 003F; +1500 003F; +1506 003F; +150C 003F; +1512 003F; +1518 003F; +151E 003F; +1524 003F; +152A 003F; +1530 003F; +1536 003F; +153C 003F; +1542 003F; +1548 003F; +154E 003F; +1554 003F; +155A 003F; +1560 003F; +1566 003F; +156C 003F; +1572 003F; +1578 003F; +157E 003F; +1584 003F; +158A 003F; +158F 003F; +1595 003F; +1676 003F; +159B 003F; +15A1 003F; +157C 003F; +15AC 003F; +15B2 003F; +15B8 003F; +15BE 003F; +15C4 003F; +15CA 003F; +15D0 003F; +15D6 003F; +15DC 003F; +15E2 003F; +15E8 003F; +15EE 003F; +15F4 003F; +15FA 003F; +1600 003F; +1606 003F; +160C 003F; +1612 003F; +1618 003F; +161E 003F; +1624 003F; +162A 003F; +1630 003F; +1636 003F; +163C 003F; +1642 003F; +1648 003F; +164E 003F; +1654 003F; +165A 003F; +1660 003F; +1666 003F; +166C 003F; +1686 003F; +168C 003F; +1692 003F; +1698 003F; +16A2 0061; +16A9 003F; +16B1 003F; +16B7 003F; +16BA 0062; +16C4 0021; +16D5 0021; +16EA 0061; +16D3 0021; +16D9 0041; +16DE 003F; +16E3 003F; +16E7 0021; +1100 0062; +AC00 1175 0021; +AC05 0061; +1102 003F; +1103 0041; +FFA8 0062; +1106 003F; +1107 0041; +FFB3 0062; +3146 003F; +FFB7 0062; +FFB8 0062; +110E 003F; +110F 003F; +1110 0041; +FFBD 0061; +FFBE 0062; +D788 1175 0021; +D7A2 0061; +3166 0041; +111A 0041; +3171 0041; +FFB4 0021; +3175 0041; +1128 0061; +112C 003F; +112F 003F; +1133 0061; +1138 0061; +113E 0061; +1143 0061; +1148 0061; +114D 0061; +1153 0061; +1158 003F; +1160 0041; +1162 0041; +1164 0041; +1166 0041; +1168 0041; +116A 0041; +116C 0041; +116E 0041; +1170 0041; +1172 0041; +1174 0041; +1177 0061; +117D 0061; +1183 0061; +1187 0061; +118C 0061; +318A 0041; +1195 0061; +119B 0061; +11A0 0061; +FFA3 0021; +11AC 0062; +FFAA 0021; +FFAC 0021; +FFAE 0021; +11B6 0061; +11BC 0061; +11C2 0061; +3167 0041; +11CC 003F; +11D0 0061; +11D5 0061; +316D 0041; +11DE 0061; +11E3 0061; +11E9 0061; +11EF 0061; +11F3 0061; +11F9 0061; +30A2 0061; +30A3 0021; +30A4 0062; +30A5 003F; +FF73 0062; +3048 0061; +32D4 0021; +FF6B 0062; +30AC 003F; +330C 0021; +304E 0021; +3310 0062; +3316 0062; +30AF 0061; +331A 0041; +331C 003F; +3054 0334; +3054 0041; +30B6 0021; +3320 0021; +30B7 0041; +30B9 3099 0334; +3059 0062; +FF7E 0041; +30BD 0021; +305F 3099 0334; +3060 0061; +30C1 0061; +30C5 0021; +30C3 0062; +FF83 0041; +30C9 0021; +3326 003F; +3328 003F; +31F4 003F; +30CD 0041; +3329 003F; +3070 003F; +3070 0041; +30D2 0334 309A; +32EA 0041; +3330 0061; +31F7 003F; +32EB 0062; +30D9 0334; +333C 0021; +307A 0062; +30DB 0334 3099; +3341 0041; +307C 0062; +FF8F 003F; +3345 003F; +307F 0062; +3080 0041; +30E1 0041; +30E2 0041; +334F 0061; +32F4 0021; +3350 003F; +32F5 0061; +FF97 0061; +31FC 0062; +308B 0041; +308C 0041; +31FF 003F; +308F 003F; +3357 0041; +32FD 0021; +30FA 003F; +FF9D 0062; +3108 0062; +310C 0062; +31AD 0062; +3112 0062; +3117 0061; +311B 0061; +31A5 0062; +3121 0062; +31B0 0062; +31B3 0062; +A001 0062; +A007 0062; +A00D 0062; +A013 0062; +A019 0062; +A01F 0062; +A025 0062; +A02B 0062; +A031 0062; +A037 0062; +A03D 0062; +A043 0062; +A049 0062; +A04F 0062; +A055 0062; +A05B 0062; +A061 0062; +A067 0062; +A06D 0062; +A073 0062; +A079 0062; +A07F 0062; +A085 0062; +A08B 0062; +A091 0062; +A097 0062; +A09D 0062; +A0A3 0062; +A0A9 0062; +A0AF 0062; +A0B5 0062; +A0BB 0062; +A0C1 0062; +A0C7 0062; +A0CD 0062; +A0D3 0062; +A0D9 0062; +A0DF 0062; +A0E5 0062; +A0EB 0062; +A0F1 0062; +A0F7 0062; +A0FD 0062; +A103 0062; +A109 0062; +A10F 0062; +A115 0062; +A11B 0062; +A121 0062; +A127 0062; +A12D 0062; +A133 0062; +A139 0062; +A13F 0062; +A145 0062; +A14B 0062; +A151 0062; +A157 0062; +A15D 0062; +A163 0062; +A169 0062; +A16F 0062; +A175 0062; +A17B 0062; +A181 0062; +A187 0062; +A18D 0062; +A193 0062; +A199 0062; +A19F 0062; +A1A5 0062; +A1AB 0062; +A1B1 0062; +A1B7 0062; +A1BD 0062; +A1C3 0062; +A1C9 0062; +A1CF 0062; +A1D5 0062; +A1DB 0062; +A1E1 0062; +A1E7 0062; +A1ED 0062; +A1F3 0062; +A1F9 0062; +A1FF 0062; +A205 0062; +A20B 0062; +A211 0062; +A217 0062; +A21D 0062; +A223 0062; +A229 0062; +A22F 0062; +A235 0062; +A23B 0062; +A241 0062; +A247 0062; +A24D 0062; +A253 0062; +A259 0062; +A25F 0062; +A265 0062; +A26B 0062; +A271 0062; +A277 0062; +A27D 0062; +A283 0062; +A289 0062; +A28F 0062; +A295 0062; +A29B 0062; +A2A1 0062; +A2A7 0062; +A2AD 0062; +A2B3 0062; +A2B9 0062; +A2BF 0062; +A2C5 0062; +A2CB 0062; +A2D1 0062; +A2D7 0062; +A2DD 0062; +A2E3 0062; +A2E9 0062; +A2EF 0062; +A2F5 0062; +A2FB 0062; +A301 0062; +A307 0062; +A30D 0062; +A313 0062; +A319 0062; +A31F 0062; +A325 0062; +A32B 0062; +A331 0062; +A337 0062; +A33D 0062; +A343 0062; +A349 0062; +A34F 0062; +A355 0062; +A35B 0062; +A361 0062; +A367 0062; +A36D 0062; +A373 0062; +A379 0062; +A37F 0062; +A385 0062; +A38B 0062; +A391 0062; +A397 0062; +A39D 0062; +A3A3 0062; +A3A9 0062; +A3AF 0062; +A3B5 0062; +A3BB 0062; +A3C1 0062; +A3C7 0062; +A3CD 0062; +A3D3 0062; +A3D9 0062; +A3DF 0062; +A3E5 0062; +A3EB 0062; +A3F1 0062; +A3F7 0062; +A3FD 0062; +A403 0062; +A409 0062; +A40F 0062; +A415 0062; +A41B 0062; +A421 0062; +A427 0062; +A42D 0062; +A433 0062; +A439 0062; +A43F 0062; +A445 0062; +A44B 0062; +A451 0062; +A457 0062; +A45D 0062; +A463 0062; +A469 0062; +A46F 0062; +A475 0062; +A47B 0062; +A481 0062; +A487 0062; +10300 0062; +10306 0062; +1030C 0062; +10312 0062; +10318 0062; +1031E 0062; +10335 0062; +1033B 0062; +10341 0062; +10347 0062; +10429 0061; +1042C 0061; +1042F 0061; +10432 0061; +10435 0061; +10438 0061; +1043B 0061; +1043E 0061; +10441 0061; +10444 0061; +10447 0061; +1044A 0061; +1044D 0061; +10450 0062; +10456 0062; +1045C 0062; +10462 0062; +10468 0062; +1046E 0062; +10474 0062; +1047A 0062; +10480 0062; +10486 0062; +1048C 0062; +10492 0062; +10498 0062; +10000 0062; +10006 0062; +1000D 0062; +10013 0062; +10019 0062; +1001F 0062; +10025 0062; +1002C 0062; +10032 0062; +10038 0062; +10040 0062; +10046 0062; +1004C 0062; +10054 0062; +1005A 0062; +10082 0062; +10088 0062; +1008E 0062; +10094 0062; +1009A 0062; +100A0 0062; +100A6 0062; +100AC 0062; +100B2 0062; +100B8 0062; +100BE 0062; +100C4 0062; +100CA 0062; +100D0 0062; +100D6 0062; +100DC 0062; +100E2 0062; +100E8 0062; +100EE 0062; +100F4 0062; +100FA 0062; +10805 0062; +1080E 0062; +10814 0062; +1081A 0062; +10820 0062; +10826 0062; +1082C 0062; +10832 0062; +1083C 0062; +10384 0062; +1038A 0062; +10390 0062; +10396 0062; +1039C 0062; +103A4 0062; +103AA 0062; +103B0 0062; +103B6 0062; +103BC 0062; +103C2 0062; +103CC 0062; +12002 0062; +12008 0062; +1200E 0062; +12014 0062; +1201A 0062; +12020 0062; +12026 0062; +1202C 0062; +12032 0062; +12038 0062; +1203E 0062; +12044 0062; +1204A 0062; +12050 0062; +12056 0062; +1205C 0062; +12062 0062; +12068 0062; +1206E 0062; +12074 0062; +1207A 0062; +12080 0062; +12086 0062; +1208C 0062; +12092 0062; +12098 0062; +1209E 0062; +120A4 0062; +120AA 0062; +120B0 0062; +120B6 0062; +120BC 0062; +120C2 0062; +120C8 0062; +120CE 0062; +120D4 0062; +120DA 0062; +120E0 0062; +120E6 0062; +120EC 0062; +120F2 0062; +120F8 0062; +120FE 0062; +12104 0062; +1210A 0062; +12110 0062; +12116 0062; +1211C 0062; +12122 0062; +12128 0062; +1212E 0062; +12134 0062; +1213A 0062; +12140 0062; +12146 0062; +1214C 0062; +12152 0062; +12158 0062; +1215E 0062; +12164 0062; +1216A 0062; +12170 0062; +12176 0062; +1217C 0062; +12182 0062; +12188 0062; +1218E 0062; +12194 0062; +1219A 0062; +121A0 0062; +121A6 0062; +121AC 0062; +121B2 0062; +121B8 0062; +121BE 0062; +121C4 0062; +121CA 0062; +121D0 0062; +121D6 0062; +121DC 0062; +121E2 0062; +121E8 0062; +121EE 0062; +121F4 0062; +121FA 0062; +12200 0062; +12206 0062; +1220C 0062; +12212 0062; +12218 0062; +1221E 0062; +12224 0062; +1222A 0062; +12230 0062; +12236 0062; +1223C 0062; +12242 0062; +12248 0062; +1224E 0062; +12254 0062; +1225A 0062; +12260 0062; +12266 0062; +1226C 0062; +12272 0062; +12278 0062; +1227E 0062; +12284 0062; +1228A 0062; +12290 0062; +12296 0062; +1229C 0062; +122A2 0062; +122A8 0062; +122AE 0062; +122B4 0062; +122BA 0062; +122C0 0062; +122C6 0062; +122CC 0062; +122D2 0062; +122D8 0062; +122DE 0062; +122E4 0062; +122EA 0062; +122F0 0062; +122F6 0062; +122FC 0062; +12302 0062; +12308 0062; +1230E 0062; +12314 0062; +1231A 0062; +12320 0062; +12326 0062; +1232C 0062; +12332 0062; +12338 0062; +1233E 0062; +12344 0062; +1234A 0062; +12350 0062; +12356 0062; +1235C 0062; +12362 0062; +12368 0062; +1236E 0062; +319C 0062; +3282 0061; +F967 0062; +3197 0062; +2F800 0062; +2E83 0062; +3281 003F; +2F08 0061; +32AD 0062; +FA30 0061; +2F808 0062; +329D 0062; +2F80F 0062; +2F0B 0061; +2F0C 0061; +2F817 0062; +2F81B 0062; +2F0F 0061; +2E89 0062; +F9FF 0062; +F98A 0061; +2F825 0062; +2F827 0062; +2F82A 0062; +32A9 0062; +303A 0062; +2F18 0061; +F91C 0062; +2E81 0062; +2F1D 0062; +3294 0062; +2F83F 0062; +2F843 0062; +FA7A 0061; +FA0D 0062; +FA38 0062; +2F84B 0062; +2F852 0062; +FA10 0061; +F94A 0062; +2F21 0062; +2F85E 0062; +F909 0062; +2F865 0062; +2F986 0062; +32AB 0062; +F9AA 003F; +2F872 0062; +2F875 0041; +F9BD 0062; +2F878 0041; +2F87C 0062; +F9AB 0062; +2F30 0062; +2F887 0062; +2F34 0062; +F928 0061; +2F35 0062; +2F894 0061; +2F3A 0062; +2F89C 0062; +2F89D 0062; +2F8A0 0062; +FA88 0062; +2F8A8 0062; +2F8AB 0062; +FA8B 003F; +2F3D 0062; +2F3F 0062; +FA02 0062; +2F8BB 0062; +2F8C0 0062; +2F8C6 0062; +2F41 0062; +F969 0062; +F983 0062; +3290 0041; +FA12 0061; +FA06 0062; +328A 003F; +2F8D8 0062; +F9E1 0062; +F9F4 0062; +337F 0062; +F9E2 0062; +F914 0041; +F91D 0062; +2F8F3 0062; +F9A5 0062; +2F4F 0062; +2F53 0062; +2F8FE 0062; +329F 0062; +FA97 003F; +2F901 0062; +2F90E 0062; +2F90C 0062; +FA47 0061; +F984 0062; +2F55 0061; +F9FB 0062; +FA48 0061; +F91E 0062; +FA9E 0061; +2F922 0062; +2F924 0062; +F92B 0062; +F961 0061; +F9AD 0062; +2F92F 0062; +F9EF 0062; +2F63 0062; +FAA3 0062; +2F66 0061; +FAA5 0062; +2F6B 0062; +2F6C 0061; +2F946 0061; +FA9D 0062; +F93B 0061; +F964 0062; +FA4C 0061; +2F953 0062; +FA52 0062; +2F72 0062; +2F959 0062; +F9F7 0061; +FA56 0061; +2F76 0062; +2F969 0062; +F9CF 0062; +F957 0062; +FA58 0062; +FAB1 0062; +2EB4 0062; +2EB6 0041; +2F7B 0062; +FA5B 0041; +2F97D 0062; +2EBA 0062; +2F983 0062; +FA5C 0062; +2F98C 0062; +2F8A 0062; +2EC0 0062; +2F995 0062; +F9FE 0062; +F93E 0062; +F958 0062; +2F9A8 0062; +F9F0 0062; +2EC1 0062; +2F8D 0062; +2F9BD 0062; +2F9C1 0062; +2F9C4 0061; +2F9C7 0062; +F924 0062; +2F92 0062; +2EC7 0062; +FABB 0062; +FABA 0062; +FABF 0062; +2F95 0062; +2F99 0062; +F903 0062; +2F9A 0062; +2F9DA 0062; +2F9DE 0062; +F98D 0062; +2FA1 0062; +FA25 0061; +2FA2 0061; +2F9E4 0062; +2FA4 0062; +328E 0062; +2F9E9 0062; +2ED1 0061; +F986 0062; +F9C6 0062; +F9DC 0062; +F9EA 0062; +F949 0062; +FA1C 0061; +FAC9 0062; +FACA 0062; +F9B4 0062; +2FB5 0062; +2EDF 0061; +2FA04 0062; +2FBA 0062; +2FBB 0061; +2FBE 0062; +F939 0062; +2FA0F 0062; +2EE7 0062; +2EE8 0062; +F989 0062; +2EEA 0062; +2FCF 0062; +2EEC 0062; +2EEF 0062; +2FD4 0041; +9FA1 0062; +FA0F 0062; +FA23 0062; +3401 0062; +3407 0062; +340D 0062; +3413 0062; +3419 0062; +341F 0062; +3425 0062; +342B 0062; +3431 0062; +3437 0062; +343D 0062; +3443 0062; +3449 0062; +344F 0062; +3455 0062; +345B 0062; +3461 0062; +3467 0062; +346D 0062; +3473 0062; +3479 0062; +347F 0062; +3485 0062; +348B 0062; +3491 0062; +3497 0062; +349D 0062; +34A2 0062; +34A8 0062; +34AE 0062; +34B4 0062; +2F813 0062; +34BE 0062; +34C4 0062; +34CA 0062; +34D0 0062; +34D6 0062; +34DC 0062; +34E1 0062; +34E7 0062; +34ED 0062; +34F3 0062; +34F9 0062; +34FF 0062; +3505 0062; +350B 0062; +3511 0062; +3516 0062; +351C 0062; +3522 0062; +3528 0062; +352E 0062; +3534 0062; +353A 0062; +3540 0062; +3546 0062; +354C 0062; +3552 0062; +3558 0062; +355E 0062; +3564 0062; +356A 0062; +3570 0062; +3576 0062; +357C 0062; +3582 0062; +3588 0062; +358E 0062; +3594 0062; +359A 0062; +35A0 0062; +35A6 0062; +35AC 0062; +35B2 0062; +35B8 0062; +35BE 0062; +35C4 0062; +35CA 0062; +35D0 0062; +35D6 0062; +35DC 0062; +35E2 0062; +35E8 0062; +35EE 0062; +35F4 0062; +35FA 0062; +3600 0062; +3606 0062; +360C 0062; +3612 0062; +3618 0062; +361E 0062; +3624 0062; +362A 0062; +3630 0062; +3636 0062; +363C 0062; +3642 0062; +3648 0062; +364E 0062; +3654 0062; +365A 0062; +3660 0062; +3666 0062; +366C 0062; +3672 0062; +3678 0062; +367E 0062; +3684 0062; +368A 0062; +3690 0062; +3696 0062; +369C 0062; +36A2 0062; +36A8 0062; +36AE 0062; +36B4 0062; +36BA 0062; +36C0 0062; +36C6 0062; +36CC 0062; +36D2 0062; +36D8 0062; +36DE 0062; +36E4 0062; +36EA 0062; +36EF 0062; +36F5 0062; +36FB 0062; +3700 0062; +3706 0062; +370C 0062; +3712 0062; +3718 0062; +371E 0062; +3724 0062; +372A 0062; +3730 0062; +3736 0062; +373C 0062; +3742 0062; +3748 0062; +374E 0062; +3754 0062; +375A 0062; +3760 0062; +3766 0062; +376C 0062; +3772 0062; +3778 0062; +377E 0062; +3783 0062; +3789 0062; +378F 0062; +3795 0062; +379B 0062; +37A1 0062; +37A7 0062; +37AD 0062; +37B3 0062; +37B9 0062; +37BF 0062; +37C5 0062; +37CB 0062; +37D1 0062; +37D7 0062; +37DD 0062; +37E3 0062; +37E9 0062; +37EF 0062; +37F5 0062; +37FB 0062; +3801 0062; +3807 0062; +380D 0062; +3813 0062; +3819 0062; +381F 0062; +3825 0062; +382B 0062; +3830 0062; +3836 0062; +383C 0062; +3842 0062; +3848 0062; +384E 0062; +3854 0062; +385A 0062; +3860 0062; +3865 0062; +386B 0062; +3871 0062; +3877 0062; +2F88A 0062; +3882 0062; +3888 0062; +388E 0062; +3894 0062; +389A 0062; +38A0 0062; +38A6 0062; +38AC 0062; +38B2 0062; +38B8 0062; +38BE 0062; +38C4 0062; +38C9 0062; +38CF 0062; +38D5 0062; +38DB 0062; +38E1 0062; +38E6 0062; +38EC 0062; +38F2 0062; +38F8 0062; +38FE 0062; +3904 0062; +390A 0062; +3910 0062; +3916 0062; +391C 0061; +3921 0062; +3927 0062; +392D 0062; +3933 0062; +3939 0062; +393E 0062; +3944 0062; +394A 0062; +3950 0062; +3956 0062; +395C 0062; +3962 0062; +3968 0062; +396E 0062; +3974 0062; +397A 0062; +3980 0062; +3986 0062; +398C 0062; +3992 0062; +3998 0062; +399E 0062; +39A4 0062; +39AA 0062; +39B0 0062; +39B6 0062; +39BC 0062; +39C2 0062; +39C8 0062; +39CE 0062; +39D4 0062; +39DA 0062; +39E0 0062; +39E6 0062; +39EC 0062; +39F2 0062; +39F8 0062; +39FE 0062; +3A04 0062; +3A0A 0062; +3A10 0062; +3A16 0062; +3A1C 0062; +3A22 0062; +3A28 0062; +3A2E 0061; +3A33 0062; +3A39 0062; +3A3F 0062; +3A45 0062; +3A4B 0062; +3A51 0062; +3A57 0062; +3A5D 0062; +3A63 0062; +3A69 0062; +3A6E 0062; +3A74 0062; +3A7A 0062; +3A80 0062; +3A86 0062; +3A8C 0062; +3A92 0062; +3A98 0062; +3A9E 0062; +3AA4 0062; +3AAA 0062; +3AB0 0062; +3AB6 0062; +3ABC 0062; +3AC2 0062; +3AC8 0062; +3ACE 0062; +3AD4 0062; +3ADA 0062; +3AE0 0062; +3AE5 0062; +3AEB 0062; +3AF1 0062; +3AF7 0062; +3AFD 0062; +3B03 0062; +2F8D0 0062; +3B0E 0062; +3B14 0062; +2F8CE 0062; +3B1F 0062; +3B25 0062; +3B2B 0062; +3B31 0062; +3B37 0062; +3B3D 0062; +3B43 0062; +3B49 0061; +3B4E 0062; +3B54 0062; +3B5A 0062; +3B60 0062; +3B66 0062; +3B6C 0062; +3B72 0062; +3B78 0062; +3B7E 0062; +3B84 0062; +3B8A 0062; +3B90 0062; +3B96 0062; +3B9C 0062; +3BA0 0062; +3BA6 0062; +3BAC 0062; +3BB2 0062; +3BB8 0062; +3BBE 0062; +3BC4 0062; +3BCA 0062; +3BD0 0062; +3BD6 0062; +3BDC 0062; +3BE2 0062; +3BE8 0062; +3BEE 0062; +3BF4 0062; +3BFA 0062; +3C00 0062; +3C06 0062; +3C0C 0062; +3C12 0062; +3C18 0061; +3C1D 0062; +3C23 0062; +3C29 0062; +3C2F 0062; +3C35 0062; +3C3B 0062; +3C41 0062; +3C47 0062; +3C4D 0062; +3C52 0062; +3C58 0062; +3C5E 0062; +3C64 0062; +3C6A 0062; +3C70 0062; +3C76 0062; +3C7C 0062; +3C82 0062; +3C88 0062; +3C8E 0062; +3C94 0062; +3C9A 0062; +3CA0 0062; +3CA6 0062; +3CAC 0062; +3CB2 0062; +3CB8 0062; +3CBE 0062; +3CC4 0062; +3CCA 0062; +3CD0 0062; +3CD6 0062; +3CDC 0062; +3CE2 0062; +3CE8 0062; +3CEE 0062; +3CF4 0062; +3CFA 0062; +3D00 0062; +3D06 0062; +3D0C 0062; +3D12 0062; +3D18 0062; +3D1E 0062; +3D24 0062; +3D2A 0062; +3D30 0062; +3D35 0062; +3D3B 0062; +3D41 0062; +3D47 0062; +3D4D 0062; +3D53 0062; +3D59 0062; +3D5F 0062; +3D65 0062; +3D6B 0062; +3D71 0062; +3D77 0062; +3D7D 0062; +3D83 0062; +3D89 0062; +3D8F 0062; +3D95 0062; +3D9A 0062; +3DA0 0062; +3DA6 0062; +3DAC 0062; +3DB2 0062; +3DB8 0062; +3DBE 0062; +3DC4 0062; +3DCA 0062; +3DD0 0062; +3DD6 0062; +3DDC 0062; +3DE2 0062; +3DE8 0062; +3DEE 0062; +3DF4 0062; +3DFA 0062; +3E00 0062; +3E06 0062; +3E0C 0062; +3E12 0062; +3E18 0062; +3E1E 0062; +3E24 0062; +3E2A 0062; +3E30 0062; +3E36 0062; +3E3C 0062; +3E42 0062; +3E48 0062; +3E4E 0062; +3E54 0062; +3E5A 0062; +3E60 0062; +3E66 0062; +3E6C 0062; +3E72 0062; +3E78 0062; +3E7E 0062; +3E84 0062; +3E8A 0062; +3E90 0062; +3E96 0062; +3E9C 0062; +3EA2 0062; +3EA8 0062; +3EAD 0062; +3EB3 0062; +3EB8 0041; +3EBD 0062; +3EC3 0062; +3EC9 0062; +3ECF 0062; +3ED5 0062; +3EDB 0062; +3EE1 0062; +3EE7 0062; +3EED 0062; +3EF3 0062; +3EF9 0062; +3EFF 0062; +3F05 0062; +3F0B 0062; +3F11 0062; +3F17 0062; +3F1C 0062; +3F22 0062; +3F28 0062; +3F2E 0062; +3F34 0062; +3F3A 0062; +3F40 0062; +3F46 0062; +3F4C 0062; +3F52 0062; +3F58 0062; +3F5E 0062; +3F64 0062; +3F6A 0062; +3F70 0062; +3F76 0062; +3F7C 0062; +3F82 0062; +3F88 0062; +3F8E 0062; +3F94 0062; +3F9A 0062; +3FA0 0062; +3FA6 0062; +3FAC 0062; +3FB2 0062; +3FB8 0062; +3FBE 0062; +3FC4 0062; +3FCA 0062; +3FD0 0062; +3FD6 0062; +3FDC 0062; +3FE2 0062; +3FE8 0062; +3FEE 0062; +3FF4 0062; +3FFA 0062; +3FFF 0062; +4005 0062; +400A 0062; +4010 0062; +4016 0062; +401B 0062; +4021 0062; +4027 0062; +402D 0062; +4033 0062; +FAD4 003F; +403D 0062; +4043 0062; +4048 0062; +404E 0062; +4054 0062; +405A 0062; +4060 0062; +4066 0062; +406C 0062; +4072 0062; +4078 0062; +407E 0062; +4084 0062; +408A 0062; +4090 0062; +4096 0061; +409B 0062; +40A1 0062; +40A7 0062; +40AD 0062; +40B3 0062; +40B9 0062; +40BF 0062; +40C5 0062; +40CB 0062; +40D1 0062; +40D7 0062; +40DD 0062; +40E3 0061; +40E8 0062; +40EE 0062; +40F4 0062; +40FA 0062; +4100 0062; +4106 0062; +410C 0062; +4112 0062; +4118 0062; +411E 0062; +4124 0062; +412A 0062; +2F958 0062; +4135 0062; +413B 0062; +4141 0062; +4147 0062; +414D 0062; +4153 0062; +4159 0062; +415F 0062; +4165 0062; +416B 0062; +4171 0062; +4177 0062; +417D 0062; +4183 0062; +4189 0062; +418F 0062; +4195 0062; +419B 0062; +41A1 0062; +41A7 0062; +41AD 0062; +41B3 0062; +41B9 0062; +41BF 0062; +41C5 0062; +41CB 0062; +41D1 0062; +41D7 0062; +41DD 0062; +41E3 0062; +41E9 0062; +41EF 0062; +41F5 0062; +41FB 0062; +4201 0062; +4206 0062; +420C 0062; +4212 0062; +4218 0062; +421E 0062; +4224 0062; +4229 0062; +422F 0062; +4235 0062; +423B 0062; +4241 0062; +4247 0062; +424D 0062; +4253 0062; +4259 0062; +425F 0062; +4265 0062; +426B 0062; +4271 0062; +4277 0062; +427D 0062; +4283 0062; +4289 0062; +428F 0062; +4295 0062; +429B 0062; +2F967 0062; +42A6 0062; +42AC 0062; +42B2 0062; +42B8 0062; +42BE 0062; +42C4 0062; +42CA 0062; +42D0 0062; +42D6 0062; +42DC 0062; +42E2 0062; +42E8 0062; +42EE 0062; +42F4 0062; +42FA 0062; +4300 0062; +4305 0062; +430B 0062; +4311 0062; +4317 0062; +431D 0062; +4323 0062; +4329 0062; +432F 0062; +2F971 0062; +433A 0062; +4340 0062; +4346 0062; +434C 0062; +4352 0062; +4358 0062; +435D 0062; +4363 0062; +4369 0062; +436F 0062; +4375 0062; +437B 0062; +4381 0062; +4387 0062; +438D 0062; +4393 0062; +4399 0062; +439F 0062; +43A5 0062; +43AB 0062; +43B1 0062; +43B7 0062; +43BD 0062; +43C3 0062; +43C9 0062; +43CF 0062; +43D5 0061; +2F8D7 0062; +43DF 0062; +43E5 0062; +43EB 0062; +43F1 0062; +43F7 0062; +43FD 0062; +4403 0062; +4409 0062; +440E 0062; +4414 0062; +441A 0062; +4420 0062; +4426 0062; +442C 0062; +4432 0062; +4438 0062; +443E 0062; +4444 0062; +444A 0062; +4450 0062; +4456 0062; +445C 0062; +4462 0062; +4468 0062; +446D 0062; +4473 0062; +4479 0062; +447F 0062; +4485 0062; +448B 0062; +4491 0062; +4497 0062; +449D 0062; +44A3 0062; +44A9 0062; +44AF 0062; +44B5 0062; +44BB 0062; +44C1 0062; +44C7 0062; +44CD 0062; +44D3 0062; +44D9 0062; +44DF 0062; +44E5 0062; +44EB 0062; +44F1 0062; +44F7 0062; +44FD 0062; +4503 0062; +4509 0062; +450F 0062; +4515 0062; +451B 0062; +4521 0062; +4527 0062; +452C 0062; +4532 0062; +4538 0062; +453E 0062; +4544 0062; +454A 0062; +4550 0062; +4556 0062; +455C 0062; +4561 0061; +4566 0062; +2F9B2 0062; +4571 0062; +4577 0062; +457D 0062; +4583 0062; +4589 0062; +458F 0062; +4595 0062; +459B 0062; +45A1 0062; +45A7 0062; +45AD 0062; +45B3 0062; +45B9 0062; +45BF 0062; +45C5 0062; +45CB 0062; +45D1 0062; +45D7 0061; +45DC 0062; +45E2 0062; +45E8 0062; +45EE 0062; +45F4 0062; +2F9C2 0062; +45FF 0062; +4605 0062; +460B 0062; +4611 0062; +4617 0062; +461D 0062; +4623 0062; +4629 0062; +462F 0062; +4635 0061; +463A 0062; +4640 0062; +4646 0062; +464C 0062; +4652 0062; +4658 0062; +465E 0062; +4664 0062; +466A 0062; +4670 0062; +4676 0062; +467C 0062; +4682 0062; +4688 0062; +468E 0062; +4694 0062; +469A 0062; +46A0 0062; +46A6 0062; +46AC 0062; +46B2 0062; +46B8 0062; +46BE 0061; +46C3 0062; +46C8 0062; +46CE 0062; +46D4 0062; +46DA 0062; +46E0 0062; +46E6 0062; +46EC 0062; +46F2 0062; +46F8 0062; +46FE 0062; +4704 0062; +470A 0062; +4710 0062; +4716 0062; +471C 0062; +4722 0062; +4728 0062; +472E 0062; +4734 0062; +473A 0062; +4740 0062; +4746 0062; +474C 0062; +4752 0062; +4758 0062; +475E 0062; +4764 0062; +476A 0062; +4770 0062; +4776 0062; +477C 0062; +4782 0062; +4788 0062; +478E 0062; +4794 0062; +479A 0062; +47A0 0062; +47A6 0062; +47AC 0062; +47B2 0062; +47B8 0062; +47BE 0062; +47C4 0062; +47CA 0062; +47D0 0062; +47D6 0062; +47DC 0062; +47E2 0062; +47E8 0062; +47EE 0062; +47F4 0062; +47FA 0062; +4800 0062; +4806 0062; +480C 0062; +4812 0062; +4818 0062; +481E 0062; +4824 0062; +482A 0062; +4830 0062; +4836 0062; +483C 0062; +4842 0062; +4848 0062; +484E 0062; +4854 0062; +485A 0062; +4860 0062; +4866 0062; +486C 0062; +4872 0062; +4878 0062; +487E 0062; +4884 0062; +488A 0062; +4890 0062; +4896 0062; +489C 0062; +48A2 0062; +48A8 0062; +48AE 0062; +48B4 0062; +48BA 0062; +48C0 0062; +48C6 0062; +48CC 0062; +48D2 0062; +48D8 0062; +48DE 0062; +48E4 0062; +48EA 0062; +48F0 0062; +48F6 0062; +48FC 0062; +4902 0062; +4908 0062; +490E 0062; +4914 0062; +491A 0062; +4920 0062; +4926 0062; +492C 0062; +4932 0062; +4938 0062; +493E 0062; +4944 0062; +494A 0062; +4950 0062; +4956 0062; +495C 0062; +4962 0062; +4968 0062; +496E 0062; +4974 0062; +497A 0062; +4980 0062; +4986 0062; +498C 0062; +4992 0062; +4997 0062; +499D 0062; +49A3 0062; +49A9 0062; +49AF 0062; +49B5 0062; +49BB 0062; +49C1 0062; +49C7 0062; +49CD 0062; +49D3 0062; +49D9 0062; +49DF 0062; +49E5 0062; +49EA 0062; +49F0 0062; +49F6 0062; +49FC 0062; +4A02 0062; +4A08 0062; +4A0E 0062; +4A14 0062; +4A1A 0062; +4A20 0062; +4A26 0062; +4A2C 0062; +4A32 0062; +4A38 0062; +4A3E 0062; +4A44 0062; +4A4A 0062; +4A50 0062; +4A56 0062; +4A5C 0062; +4A62 0062; +4A68 0062; +4A6E 0061; +4A73 0062; +4A78 0062; +4A7E 0062; +4A84 0062; +4A8A 0062; +4A90 0062; +4A96 0062; +4A9C 0062; +4AA2 0062; +4AA8 0062; +4AAE 0062; +4AB3 0062; +4AB9 0062; +4ABF 0062; +4AC5 0062; +4ACB 0062; +4AD1 0062; +4AD7 0062; +4ADD 0062; +4AE3 0062; +4AE9 0062; +4AEF 0062; +4AF5 0062; +4AFB 0062; +4B01 0062; +4B07 0062; +4B0D 0062; +4B13 0062; +4B19 0062; +4B1F 0062; +4B25 0062; +4B2B 0062; +4B31 0062; +4B36 0062; +4B3C 0062; +4B42 0062; +4B48 0062; +4B4E 0062; +4B54 0062; +4B5A 0062; +4B60 0062; +4B66 0062; +4B6C 0062; +4B72 0062; +4B78 0062; +4B7E 0062; +4B84 0062; +4B8A 0062; +4B90 0062; +4B96 0062; +4B9C 0062; +4BA2 0062; +4BA8 0062; +4BAE 0062; +4BB4 0062; +4BBA 0062; +4BC0 0062; +4BC6 0062; +4BCC 0062; +4BD1 0062; +4BD7 0062; +4BDD 0062; +4BE3 0062; +4BE9 0062; +4BEF 0062; +4BF5 0062; +4BFB 0062; +4C01 0062; +4C07 0062; +4C0D 0062; +4C13 0062; +4C19 0062; +4C1F 0062; +4C25 0062; +4C2B 0062; +4C31 0062; +4C37 0062; +4C3D 0062; +4C43 0062; +4C49 0062; +4C4F 0062; +4C55 0062; +4C5B 0062; +4C61 0062; +4C67 0062; +4C6D 0062; +4C73 0062; +4C79 0062; +4C7F 0062; +4C85 0062; +4C8B 0062; +4C91 0062; +4C97 0062; +4C9D 0062; +4CA3 0062; +4CA9 0062; +4CAF 0062; +4CB5 0062; +4CBB 0062; +4CC1 0062; +4CC7 0062; +4CCD 0062; +4CD2 0062; +4CD8 0062; +4CDE 0062; +4CE4 0062; +4CEA 0062; +4CEF 0062; +4CF5 0062; +4CFA 0062; +4D00 0062; +4D06 0062; +4D0C 0062; +4D12 0062; +4D18 0062; +4D1E 0062; +4D24 0062; +4D2A 0062; +4D30 0062; +4D36 0062; +4D3C 0062; +4D42 0062; +4D48 0062; +4D4E 0062; +4D54 0062; +4D59 0062; +4D5F 0062; +4D65 0062; +4D6B 0062; +4D71 0062; +4D77 0062; +4D7D 0062; +4D83 0062; +4D89 0062; +4D8F 0062; +4D95 0062; +4D9B 0062; +4DA1 0062; +4DA7 0062; +4DAD 0062; +4DB3 0062; +20003 0062; +2F816 0062; +2F859 0062; +2F87B 0062; +2F8A4 0062; +2F897 0062; +2F8E3 0062; +2F906 0062; +2F923 0062; +2F93C 0062; +FAD5 0062; +2F95D 0061; +2F898 0062; +2F97C 0062; +2F9A6 0062; +2F9C5 0062; +2F9E0 0062; +2F81C 0062; +2FA10 0062; +2A6D1 0062; +0370 0062; +E005 0062; +F8FF 0062; +E0003 0062; +F0003 0062; +F00FB 0062; +FFF03 0062; +FFFFB 0062; +100003 0062; +1000FB 0062; +10FF03 0062; +10FFFB 0062; diff --git a/icuSources/test/testdata/CollationTest_SHIFTED_STUB.txt b/icuSources/test/testdata/CollationTest_SHIFTED_STUB.txt index 6e9a9800..9f9221c4 100644 --- a/icuSources/test/testdata/CollationTest_SHIFTED_STUB.txt +++ b/icuSources/test/testdata/CollationTest_SHIFTED_STUB.txt @@ -1,2272 +1,4335 @@ -202F 003F; 202F -00A8 0342 0334; 00A8 0342 -1FDD 0021; 1FDD -2010 003F; 2010 -FF64 0021; FF64 -1366 0021; 1366 -0087 0021; 0087 -05A8 0021; 05A8 -0F87 0021; 0F87 -FE0B 0021; FE0B -1D1AC 0021; 1D1AC -E0035 0021; E0035 -E0067 0021; E0067 -E0119 0021; E0119 -E014B 0021; E014B -E017D 0021; E017D -E01AF 0021; E01AF -E01E1 0021; E01E1 -0014 003F; 0014 -0594 003F; 0594 -06E1 003F; 06E1 -D805 003F; D805 -1D179 003F; 1D179 -E0022 003F; E0022 -E0054 003F; E0054 -E0106 003F; E0106 -E0138 003F; E0138 -E016A 003F; E016A -E019C 003F; E019C -E01CE 003F; E01CE -055E 0021; 055E -0964 0021; 0964 -201C 0021; 201C -FF3D 0021; FF3D -2986 003F; 2986 -300A 0021; 300A -3017 0021; 3017 -FF3C 0021; FF3C -2032 0021; 2032 -070A 0021; 070A -0F85 0021; 0F85 -02CC 0021; 02CC -02F3 0021; 02F3 -0BF7 0021; 0BF7 -0FC1 0021; 0FC1 -19ED 0021; 19ED -211F 0021; 211F -2194 0338 0334; 2194 0338 -21AD 0021; 21AD -21C7 0021; 21C7 -21DD 0021; 21DD -21F6 0021; 21F6 -1D76F 0021; 1D76F -00F7 0021; 00F7 -00A6 0021; 00A6 -2223 0021; 2223 -223A 0021; 223A -224D 003F; 224D -2264 003F; 2264 -227A 003F; 227A -228B 0021; 228B -22A0 0021; 22A0 -22B3 0338 0334; 22B3 0338 -22C6 0021; 22C6 -22DF 0021; 22DF -2300 0021; 2300 -2319 0021; 2319 -2334 0021; 2334 -234D 0021; 234D -2366 0021; 2366 -237F 0021; 237F -2398 0021; 2398 -23B1 0021; 23B1 -23CA 0021; 23CA -2412 0021; 2412 -2444 0021; 2444 -2511 0021; 2511 -252A 0021; 252A -2543 0021; 2543 -255C 0021; 255C -2575 0021; 2575 -258E 0021; 258E -25A6 0021; 25A6 -25BF 0021; 25BF -25D7 0021; 25D7 -25F0 0021; 25F0 -2609 0021; 2609 -2623 0021; 2623 -2644 0021; 2644 -265D 0021; 265D -2679 0021; 2679 -2708 0021; 2708 -2723 0021; 2723 -273D 0021; 273D -275C 0021; 275C -2798 0021; 2798 -27B2 0021; 27B2 -27DC 0021; 27DC -27F9 0021; 27F9 -2912 0021; 2912 -292B 0021; 292B -2944 0021; 2944 -295D 0021; 295D -2976 0021; 2976 -29A5 0021; 29A5 -29BE 0021; 29BE -29D7 0021; 29D7 -29F0 0021; 29F0 -2A0B 0021; 2A0B -2A25 0021; 2A25 -2A3E 0021; 2A3E -2A57 0021; 2A57 -2A70 0021; 2A70 -2A8C 0021; 2A8C -2AA5 0021; 2AA5 -2ABE 0021; 2ABE -2AD7 0021; 2AD7 -2AEF 0021; 2AEF -2B08 0021; 2B08 -2813 0021; 2813 -282C 0021; 282C -2845 0021; 2845 -285E 0021; 285E -2877 0021; 2877 -2890 0021; 2890 -28A9 0021; 28A9 -28C2 0021; 28C2 -28DB 0021; 28DB -28F4 0021; 28F4 -2637 0021; 2637 -4DD8 0021; 4DD8 -4DF1 0021; 4DF1 -1D30A 0021; 1D30A -1D323 0021; 1D323 -1D33C 0021; 1D33C -1D355 0021; 1D355 -A4A7 0021; A4A7 -A4C0 0021; A4C0 -1D009 0021; 1D009 -1D022 0021; 1D022 -1D03B 0021; 1D03B -1D054 0021; 1D054 -1D06D 0021; 1D06D -1D086 0021; 1D086 -1D09F 0021; 1D09F -1D0B8 0021; 1D0B8 -1D0D1 0021; 1D0D1 -1D0EA 0021; 1D0EA -1D10D 0021; 1D10D -1D126 0021; 1D126 -1D13F 0021; 1D13F -1D15E 0334; 1D15E -1D15D 0021; 1D15D -1D19F 0021; 1D19F -1D1B9 1D165 1D16F 0334; 1D1B9 1D165 1D16F -1D1CA 0021; 1D1CA -2FF5 0021; 2FF5 -1372 0021; 1372 -10118 0021; 10118 -10131 0021; 10131 -0304 003F; 0304 -0325 003F; 0325 -0334 05AD; 05AD -0334 1D17C; 1D17C -0610 0334; 0610 -1D17E 0334; 1D17E -030B 0334; 030B -0320 0334; 0320 -0345 0334; 0345 -0362 0334; 0362 -064F 0334; 064F -073D 0334; 073D -0E49 0334; 0E49 -20D6 0334; 20D6 -034B 0021; 034B -05B1 0021; 05B1 -064F 0021; 064F -0657 0021; 0657 -0745 0021; 0745 -0A81 0021; 0A81 -0ECA 0021; 0ECA -302A 0021; 302A -20DC 003F; 20DC -0EC6 0041; 0EC6 -30FC 0021; 30FC -0024 0062; 0024 -17DB 0061; 17DB -FFE6 0041; FFE6 -1D7EC 0021; 1D7EC -17E0 003F; 17E0 -0D66 0041; 0D66 -17F0 0062; 17F0 -0967 0021; 0967 -277F 0021; 277F -246A 003F; 246A -247F 0062; 247F -3365 003F; 3365 -2496 0041; 2496 -33EF 003F; 33EF -2499 0041; 2499 -336B 003F; 336B -09F4 0061; 09F4 -24F5 0062; 24F5 -FF12 0021; FF12 -0BE8 0021; 0BE8 -33F3 0021; 33F3 -33F6 0021; 33F6 -3257 0021; 3257 -2777 0061; 2777 -1042 0061; 1042 -1812 0062; 1812 -0663 0021; 0663 -325A 0021; 325A -32B1 0021; 32B1 -2778 0041; 2778 -17F3 0041; 17F3 -33E2 0061; 33E2 -136C 003F; 136C -32B6 0021; 32B6 -0034 0061; 0034 -0B6A 0061; 0B6A -136C 0062; 136C -1D7FB 0021; 1D7FB -0ED5 0021; 0ED5 -1D7E7 0041; 1D7E7 -0F25 0041; 0F25 -0F2E 0062; 0F2E -278F 003F; 278F -3026 003F; 3026 -0AEC 0041; 0AEC -06F6 0062; 06F6 -1D7FD 0021; 1D7FD -0ED7 0021; 0ED7 -2790 0041; 2790 -3027 0041; 3027 -32C6 0061; 32C6 -09EE 0021; 09EE -1D7FE 0061; 1D7FE -0ED8 0061; 0ED8 -0F28 0062; 0F28 -2792 003F; 2792 -3029 003F; 3029 -0AEF 0041; 0AEF -06F9 0062; 06F9 -2002 0061; 2002 -005F 0061; 005F -FE54 0061; FE54 -002E 0061; 002E -0028 0061; 0028 -298F 0061; 298F -204B 0061; 204B -2038 0061; 2038 -17DA 0061; 17DA -02FC 0061; 02FC -0FCB 0061; 0FCB -2142 0061; 2142 -21BA 0061; 21BA -21EC 0061; 21EC -002B 0061; 002B -2220 0061; 2220 -2250 0061; 2250 -2283 0061; 2283 -22B3 0061; 22B3 -22E6 0061; 22E6 -231C 0061; 231C -2350 0061; 2350 -2382 0061; 2382 -23B4 0061; 23B4 -2415 0061; 2415 -2514 0061; 2514 -2546 0061; 2546 -2578 0061; 2578 -25A9 0061; 25A9 -25DA 0061; 25DA -260C 0061; 260C -2647 0061; 2647 -267C 0061; 267C -2726 0061; 2726 -2761 0061; 2761 -27B5 0061; 27B5 -27FC 0061; 27FC -292E 0061; 292E -2960 0061; 2960 -29A8 0061; 29A8 -29DA 0061; 29DA -2A0F 0061; 2A0F -2A41 0061; 2A41 -2A73 0061; 2A73 -2AA8 0061; 2AA8 -2ADA 0061; 2ADA -2B0C 0061; 2B0C -2830 0061; 2830 -2862 0061; 2862 -2894 0061; 2894 -28C6 0061; 28C6 -28F8 0061; 28F8 -4DDC 0061; 4DDC -1D30E 0061; 1D30E -1D340 0061; 1D340 -A4AB 0061; A4AB -1D00D 0061; 1D00D -1D03F 0061; 1D03F -1D071 0061; 1D071 -1D0A3 0061; 1D0A3 -1D0D5 0061; 1D0D5 -1D111 0061; 1D111 -1D143 0061; 1D143 -1D197 0061; 1D197 -1D1CD 0061; 1D1CD -1375 0061; 1375 -0000 0061; 0000 -0097 0061; 0097 -0612 0061; 0612 -2060 0061; 2060 -1D167 0061; 1D167 -8FFFE 0061; 8FFFE -E0045 0061; E0045 -E0077 0061; E0077 -E0129 0061; E0129 -E015B 0061; E015B -E018D 0061; E018D -E01BF 0061; E01BF -EFFFF 0061; EFFFF -2001 0041; 2001 -02DB 0041; 02DB -037E 0041; 037E -FE30 0041; FE30 -00BB 0041; 00BB -298E 0041; 298E -00B6 0041; 00B6 -303D 0041; 303D -17D9 0041; 17D9 -02FB 0041; 02FB -0FCA 0041; 0FCA -2141 0041; 2141 -21B9 0041; 21B9 -21EB 0041; 21EB -2211 0041; 2211 -221F 0041; 221F -224F 0041; 224F -2284 0041; 2284 -22EA 0041; 22EA -22E5 0041; 22E5 -231B 0041; 231B -234F 0041; 234F -2381 0041; 2381 -23B3 0041; 23B3 -2414 0041; 2414 -2513 0041; 2513 -2545 0041; 2545 -2577 0041; 2577 -25A8 0041; 25A8 -25D9 0041; 25D9 -260B 0041; 260B -2646 0041; 2646 -267B 0041; 267B -2725 0041; 2725 -275E 0041; 275E -27B4 0041; 27B4 -27FB 0041; 27FB -292D 0041; 292D -295F 0041; 295F -29A7 0041; 29A7 -29D9 0041; 29D9 -2A0E 0041; 2A0E -2A40 0041; 2A40 -2A72 0041; 2A72 -2AA7 0041; 2AA7 -2AD9 0041; 2AD9 -2B0B 0041; 2B0B -282F 0041; 282F -2861 0041; 2861 -2893 0041; 2893 -28C5 0041; 28C5 -28F7 0041; 28F7 -4DDB 0041; 4DDB -1D30D 0041; 1D30D -1D33F 0041; 1D33F -A4AA 0041; A4AA -1D00C 0041; 1D00C -1D03E 0041; 1D03E -1D070 0041; 1D070 -1D0A2 0041; 1D0A2 -1D0D4 0041; 1D0D4 -1D110 0041; 1D110 -1D142 0041; 1D142 -1D196 0041; 1D196 -1D1CC 0041; 1D1CC -1374 0041; 1374 -10133 0041; 10133 -0096 0041; 0096 -0611 0041; 0611 -202E 0041; 202E -1D166 0041; 1D166 -7FFFF 0041; 7FFFF -E0044 0041; E0044 -E0076 0041; E0076 -E0128 0041; E0128 -E015A 0041; E015A -E018C 0041; E018C -E01BE 0041; E01BE -EFFFE 0041; EFFFE -0103 0021; 0103 -01FB 0021; 01FB -1EB6 0021; 1EB6 -0103 0334 0303; 0103 0334 -00C2 0309 0334; 00C2 0309 -0061 0334 0307 0304; 0061 0334 0307 -1EA0 0334 0306; 1EA0 0334 -0307 0041; 0307 -0321 0041; 0321 -033D 0041; 033D -FE22 0041; FE22 -FE71 0041; FE71 -FE7C 0041; FE7C -073C 0041; 073C -0982 0041; 0982 -0D82 0041; 0D82 -17CE 0041; 17CE -20D6 0041; 20D6 -1D44E 0061; 1D44E -1D538 0041; 1D538 -1EA4 0041; 1EA4 -0104 0041; 0104 -24D0 0062; 24D0 -01FA 0062; 01FA -3373 003F; 3373 -00E6 0341 0334; 00E6 0341 -1D44 0021; 1D44 -1FEF 0062; 1FEF -058A 0062; 058A -1361 0062; 1361 -0387 0062; 0387 -005D 0062; 005D -FE40 0062; FE40 -005C 0062; 005C -05F4 0062; 05F4 -02CB 0062; 02CB -0BF6 0062; 0BF6 -19EC 0062; 19EC -21AE 0062; 21AE -21C9 0062; 21C9 -21FB 0062; 21FB -003D 0062; 003D -2230 0062; 2230 -225F 0062; 225F -2292 0062; 2292 -22BF 0062; 22BF -22F9 0062; 22F9 -232D 0062; 232D -235F 0062; 235F -2391 0062; 2391 -23C3 0062; 23C3 -2424 0062; 2424 -2523 0062; 2523 -2555 0062; 2555 -2587 0062; 2587 -25B8 0062; 25B8 -25E9 0062; 25E9 -261C 0062; 261C -2656 0062; 2656 -26A1 0062; 26A1 -2736 0062; 2736 -2770 0062; 2770 -27D5 0062; 27D5 -290B 0062; 290B -293D 0062; 293D -296F 0062; 296F -29B7 0062; 29B7 -29E9 0062; 29E9 -2A1E 0062; 2A1E -2A50 0062; 2A50 -2A85 0062; 2A85 -2AB7 0062; 2AB7 -2AE9 0062; 2AE9 -280D 0062; 280D -283F 0062; 283F -2871 0062; 2871 -28A3 0062; 28A3 -28D5 0062; 28D5 -2631 0062; 2631 -4DEB 0062; 4DEB -1D31D 0062; 1D31D -1D34F 0062; 1D34F -A4BA 0062; A4BA -1D01C 0062; 1D01C -1D04E 0062; 1D04E -1D080 0062; 1D080 -1D0B2 0062; 1D0B2 -1D0E4 0062; 1D0E4 -1D120 0062; 1D120 -1D152 0062; 1D152 -1D1A6 0062; 1D1A6 -1D1DC 0062; 1D1DC -10111 0062; 10111 -0014 0062; 0014 -0594 0062; 0594 -06E1 0062; 06E1 -D805 0062; D805 -1D179 0062; 1D179 -E0022 0062; E0022 -E0054 0062; E0054 -E0106 0062; E0106 -E0138 0062; E0138 -E016A 0062; E016A -E019C 0062; E019C -E01CE 0062; E01CE -1D553 0021; 1D553 -1D63D 003F; 1D63D -0342 0062; 0342 -0339 0062; 0339 -05BC 0062; 05BC -0738 0062; 0738 -0C82 0062; 0C82 -20D2 0062; 20D2 -1D553 0041; 1D553 -1E05 0041; 1E05 -1E04 0062; 1E04 -0182 0021; 0182 -2103 0021; 2103 -00C7 0021; 00C7 -FF43 0061; FF43 -1D4D2 0061; 1D4D2 -3388 0062; 3388 -33C4 0021; 33C4 -0188 0021; 0188 -1D625 003F; 1D625 -1E0B 003F; 1E0B -0064 0334 0331; 0064 0334 -FF24 0041; FF24 -1E10 0041; 1E10 -1D60B 0062; 1D60B -01F1 003F; 01F1 -0110 0041; 0110 -1D06 0061; 1D06 -1D508 0021; 1D508 -1EC0 003F; 1EC0 -1EBB 003F; 1EBB -0065 0334 0302; 0065 0334 -0065 0334 0303; 0065 0334 -0112 0300 0334; 0112 0300 -0065 0041; 0065 -1D5D8 0061; 1D5D8 -1EC4 0041; 1EC4 -0205 0041; 0205 -1D53C 0062; 1D53C -0207 0062; 0207 -1D4A 0061; 1D4A -025D 0021; 025D -1D65B 003F; 1D65B -FF46 0061; FF46 -1D675 0061; 1D675 -1D509 0062; 1D509 -0192 0061; 0192 -1D53E 0021; 1D53E -1E21 0021; 1E21 -FF47 0061; FF47 -1D43A 0041; 1D43A -33FF 0062; 33FF -1E21 0062; 1E21 -029B 0021; 029B -1D691 0021; 1D691 -02B0 003F; 02B0 -0068 0307 0334; 0068 0307 -210E 0041; 210E -1D34 0041; 1D34 -1D629 0062; 1D629 -3371 0062; 3371 -0267 0041; 0267 -1D65E 003F; 1D65E -00CC 0021; 00CC -1ECA 0021; 1ECA -0049 0308 0334 0341; 0049 0308 0334 -0069 0334 0330; 0069 0334 -0049 0041; 0049 -012C 0041; 012C -1E2C 0041; 1E2C -01D0 0062; 01D0 -0132 0041; 0132 -1D4E 0041; 1D4E -1D55B 003F; 1D55B -01F0 003F; 01F0 -1D409 0061; 1D409 -1D5C3 0062; 1D5C3 -FF4B 003F; FF4B -1D40A 003F; 1D40A -004B 0334 030C; 004B 0334 -1D55C 0041; 1D55C -1E31 0041; 1E31 -1D5AA 0062; 1D5AA -33CE 0021; 33CE -0198 0021; 0198 -1D695 003F; 1D695 -013D 003F; 013D -1E39 0334; 1E39 -1D5C5 0041; 1D5C5 -0139 0041; 0139 -1D40B 0062; 1D40B -33D1 003F; 33D1 -019A 003F; 019A -1D45A 0021; 1D45A -1D4DC 003F; 1D4DC -33A1 003F; 33A1 -FF2D 0041; FF2D -3383 0041; 3383 -33D4 0061; 33D4 -33AB 0062; 33AB -0271 0062; 0271 -1D649 0021; 1D649 -1E4B 003F; 1E4B -004E 0323 0334; 004E 0323 -004E 0041; 004E -00F1 0041; 00F1 -1D4DD 0062; 1D4DD -339A 003F; 339A -019E 003F; 019E -1D5C8 0021; 1D5C8 -24C4 0021; 24C4 -022A 0021; 022A -1ECF 0021; 1ECF -004F 0341 0334; 004F 0341 -004F 0302 0309 0334; 004F 0302 0309 -00D5 0308 0334; 00D5 0308 -014C 0301 0334; 014C 0301 -006F 0334 0303 031B; 006F 0334 0303 -1D45C 0061; 1D45C -1D57A 0041; 1D57A -00F6 0061; 00F6 -1E52 0061; 1E52 -006F 0062; 006F -1ED6 0062; 1ED6 -1EE2 0062; 1EE2 -00F8 0334 0341; 00F8 0334 -1D54 0021; 1D54 -1D15 0061; 1D15 -1D5E3 0021; 1D5E3 -24AB 0041; 24AB -1D4AB 0041; 1D4AB -0050 0062; 0050 -33DA 0041; 33DA -1D492 0021; 1D492 -1D57C 003F; 1D57C -1D4AC 0061; 1D4AC -1D57C 0062; 1D57C -1D69B 003F; 1D69B -1E59 003F; 1E59 -0052 0327 0334; 0052 0327 -1D52F 0061; 1D52F -1D619 0041; 1D619 -33AD 0041; 33AD -0154 0062; 0154 -1D1A 0041; 1D1A -FF53 003F; FF53 -1D47A 003F; 1D47A -1E68 003F; 1E68 -0053 0327 0334; 0053 0327 -1D460 0041; 1D460 -015A 0061; 015A -1D530 0062; 1D530 -2120 0061; 2120 -0285 0061; 0285 -1D47B 0021; 1D47B -021A 0021; 021A -0074 0334 0331; 0074 0334 -1D4AF 0061; 1D4AF -021A 0041; 021A -0163 0062; 0163 -0167 0021; 0167 -24B0 003F; 24B0 -1D47C 003F; 1D47C -01D7 003F; 01D7 -01B0 003F; 01B0 -0075 0340 0334; 0075 0340 -00DC 0340 0334; 00DC 0340 -0075 0334 0304 0308; 0075 0334 0304 -0169 0334 031B; 0169 0334 -FF55 0041; FF55 -1D414 0041; 1D414 -01D8 0041; 01D8 -0216 0041; 0216 -1D532 0062; 1D532 -0171 0062; 0171 -1D59 0041; 1D59 -1D1F 0061; 1D1F -1D603 003F; 1D603 -1E7E 0021; 1E7E -1D66B 0041; 1D66B -0076 0062; 0076 -2175 0062; 2175 -FF57 003F; FF57 -1D47E 003F; 1D47E -0057 0341 0334; 0057 0341 -1D5D0 0061; 1D5D0 -24CC 0061; 24CC -FF37 0062; FF37 -24B3 003F; 24B3 -1D653 0021; 1D653 -2179 0041; 2179 -1D47F 0041; 1D47F -1D51B 0062; 1D51B -1D63A 0021; 1D63A -02B8 0021; 02B8 -0079 0340 0334; 0079 0340 -1EF4 0334; 1EF4 -1D654 0061; 1D654 -1EF7 0041; 1EF7 -1EF9 0062; 1EF9 -1D56B 003F; 1D56B -017E 003F; 017E -005A 0331 0334; 005A 0331 -1D5ED 0061; 1D5ED -1D503 0062; 1D503 -01B5 0021; 01B5 -0292 0062; 0292 -01BF 003F; 01BF -02C0 003F; 02C0 -1D25 003F; 1D25 -0298 003F; 0298 -1F02 0021; 1F02 -1F89 0021; 1F89 -0391 0334 0313 0345 0301; 0391 0334 0313 0345 -03B1 0314 0334 0301; 03B1 0314 0334 -03B1 0345 0334 0314; 03B1 0345 0334 -03B1 0345 0334; 03B1 0345 -1F82 0041; 1F82 -1F71 0041; 1F71 -1F8A 0062; 1F8A -1D737 003F; 1D737 -03D0 0062; 03D0 -1D6FE 0061; 1D6FE -03B4 003F; 03B4 -1D5F 0041; 1D5F -1F10 0021; 1F10 -0395 0343 0341 0334; 0395 0343 0341 -03F5 0061; 03F5 -1F15 0061; 1F15 -03AD 0062; 03AD -03B6 0061; 03B6 -1D6AE 0021; 1D6AE -1F95 0021; 1F95 -0397 0343 0334; 0397 0343 -1F90 0334; 1F90 -0397 0314 0334 0342; 0397 0314 0334 -1FC6 0345 0334; 1FC6 0345 -1F2A 0041; 1F2A -1F75 0061; 1F75 -1F98 0062; 1F98 -1D78B 003F; 1D78B -1D7C5 0041; 1D7C5 -1FBE 0021; 1FBE -1F3D 003F; 1F3D -1F38 0334; 1F38 -1FBE 0314 0342 0334; 1FBE 0314 0342 -1FBE 0308 0342 0334; 1FBE 0308 0342 -1F36 0041; 1F36 -1FD1 0041; 1FD1 -03F3 0021; 03F3 -1D752 0061; 1D752 -03BB 0021; 03BB -1D706 0062; 1D706 -1D6CD 0041; 1D6CD -339B 0021; 339B -1D7B6 0061; 1D7B6 -1D6EF 003F; 1D6EF -1D77E 003F; 1D77E -03BF 0334 0313; 03BF 0334 -039F 0301 0334; 039F 0301 -1F49 0061; 1F49 -1F78 0062; 1F78 -1D77F 0061; 1D77F -1D28 0041; 1D28 -1D72C 0021; 1D72C -03A1 0061; 03A1 -03F2 003F; 03F2 -1D7BC 0061; 1D7BC -1D70F 0021; 1D70F -1D7BD 0062; 1D7BD -1F53 003F; 1F53 -03C5 0313 0341 0334; 03C5 0313 0341 -03D2 0334 0341; 03D2 0334 -1D710 0061; 1D710 -1F7B 0041; 1F7B -1F52 0062; 1F52 -1D78D 003F; 1D78D -1D6BD 0041; 1D6BD -1D732 003F; 1D732 -03C8 003F; 03C8 -1D74D 0062; 1D74D -1FAC 0021; 1FAC -1FA1 0021; 1FA1 -03C9 0334 0343 0300; 03C9 0334 0343 -03A9 0314 0334 0341; 03A9 0314 0334 -2126 0345 0314 0334; 2126 0345 0314 -1D6DA 0041; 1D6DA -1FA8 0041; 1FA8 -1FF6 0041; 1FF6 -1FA1 0062; 1FA1 -03E2 0061; 03E2 -03EC 0061; 03EC -0410 0306 0041; 0410 0306 -04D9 0308 003F; 04D9 0308 -0432 0021; 0432 -0434 0021; 0434 -0433 0341 0334; 0433 0341 -0400 0334; 0400 -0415 0306 0061; 0415 0306 -0416 0308 0021; 0416 0308 -0504 0021; 0504 -04E1 0021; 04E1 -045D 0061; 045D -0418 0308 0041; 0418 0308 -0438 0306 003F; 0438 0306 -049B 0021; 049B -043B 0021; 043B -043C 0041; 043C -04C8 0041; 04C8 -04E6 0021; 04E6 -04EA 0334; 04EA -0440 003F; 0440 -0442 003F; 0442 -045C 0334; 045C -045E 0021; 045E -0443 0308 0041; 0443 0308 -04AF 0041; 04AF -04B3 0041; 04B3 -047B 0041; 047B -0447 0308 0061; 0447 0308 -04BC 003F; 04BC -042A 003F; 042A -044C 003F; 044C -042D 0308 0334; 042D 0308 -0464 0062; 0464 -046E 0062; 046E -0475 030F 0041; 0475 030F -10A2 0021; 10A2 -10C1 0021; 10C1 -10AB 0021; 10AB -10AF 0021; 10AF -10B3 0021; 10B3 -10B8 0021; 10B8 -10BD 0021; 10BD -10C5 0021; 10C5 -0533 0041; 0533 -0538 0021; 0538 -053D 0021; 053D -0542 0021; 0542 -0545 0021; 0545 -054A 0021; 054A -FB16 0061; FB16 -0553 0041; 0553 -05D0 0334 05BC; 05D0 0334 -FB31 0061; FB31 -05D4 003F; 05D4 -05D6 0334 05BC; 05D6 0334 -05F2 0021; 05F2 -FB3A 0062; FB3A -FB40 0021; FB40 -FB43 003F; FB43 -05E8 003F; 05E8 -FB2A 0061; FB2A -FE80 0062; FE80 -0623 0062; 0623 -0625 0021; 0625 -064A 1D165 0654 0061; 064A 1D165 0654 -FC99 0041; FC99 -FBEC 003F; FBEC -FC68 0021; FC68 -FE8E 003F; FE8E -FE8F 0021; FE8F -FC9E 0062; FC9E -FCA0 0062; FCA0 -FB58 003F; FB58 -FE94 003F; FE94 -FD50 0041; FD50 -FD54 0041; FD54 -FD56 0041; FD56 -FC75 0062; FC75 -FCA6 0061; FCA6 -FB66 0021; FB66 -067D 0041; 067D -FE9E 0062; FE9E -FDA7 0041; FDA7 -FB77 0062; FB77 -FB7B 0062; FB7B -FEA1 0061; FEA1 -FD1B 0062; FD1B -FC1A 0041; FC1A -FEAA 003F; FEAA -0689 0041; 0689 -FB87 0061; FB87 -FDFC 0041; FDFC -0695 0041; 0695 -FEB3 0041; FEB3 -FD35 0062; FD35 -FCE7 0061; FCE7 -FD17 0062; FD17 -FD25 0041; FD25 -FD39 003F; FD39 -FD6A 003F; FD6A -069A 0041; 069A -FCB1 0062; FCB1 -FDF0 0041; FDF0 -FEBD 0021; FEBD -FC24 003F; FC24 -FD08 003F; FD08 -FC26 003F; FC26 -FD11 0062; FD11 -FD3B 0062; FD3B -FDC4 0062; FDC4 -FCF8 003F; FCF8 -FCBD 0062; FCBD -FED3 003F; FED3 -FCC0 0062; FCC0 -06A1 0041; 06A1 -FB6E 0021; FB6E -FC33 003F; FC33 -FC7E 0062; FC7E -FC37 003F; FC37 -FC81 0041; FC81 -FC83 0062; FC83 -06AC 0041; 06AC -FB92 0061; FB92 -FB96 0021; FB96 -FEF5 003F; FEF5 -FD84 003F; FD84 -FD81 0041; FD81 -FD88 0062; FD88 -06B8 0041; 06B8 -FD8C 0041; FD8C -FC47 003F; FC47 -FC4A 0041; FC4A -FD97 003F; FD97 -FCD4 0062; FCD4 -FCEF 003F; FCEF -FBA0 0021; FBA0 -FEEA 0061; FEEA -FC54 0041; FC54 -FBA6 0061; FBA6 -FEED 003F; FEED -06C6 0041; 06C6 -FBE3 0021; FBE3 -FC5D 0021; FC5D -FEF4 0062; FEF4 -FC91 0061; FC91 -FCF1 0021; FCF1 -FBFF 0062; FBFF -06D2 0654 0334; 06D2 0654 -0714 0041; 0714 -071B 0061; 071B -0724 0062; 0724 -0780 0062; 0780 -0787 0062; 0787 -0798 0062; 0798 -079F 0062; 079F -07A7 0062; 07A7 -1200 0062; 1200 -120B 0062; 120B -1215 0062; 1215 -121F 0062; 121F -1229 0062; 1229 -1233 0062; 1233 -123D 0062; 123D -1248 0062; 1248 -1255 0062; 1255 -1263 0062; 1263 -126D 0062; 126D -1277 0062; 1277 -1281 0062; 1281 -128D 0062; 128D -1299 0062; 1299 -12A3 0062; 12A3 -12AD 0062; 12AD -12BB 0062; 12BB -12C9 0062; 12C9 -12D4 0062; 12D4 -12DF 0062; 12DF -12E9 0062; 12E9 -12F4 0062; 12F4 -12FE 0062; 12FE -1308 0062; 1308 -1314 0062; 1314 -1321 0062; 1321 -132B 0062; 132B -1335 0062; 1335 -133F 0062; 133F -134A 0062; 134A -1354 0062; 1354 -0906 0062; 0906 -090E 0062; 090E -0959 003F; 0959 -095B 0041; 095B -0923 003F; 0923 -092B 0041; 092B -0932 0062; 0932 -093F 003F; 093F -0947 003F; 0947 -0987 0062; 0987 -0993 0062; 0993 -099D 0062; 099D -09A4 0041; 09A4 -09AF 09BC 0334; 09AF 09BC -09BD 0021; 09BD -09C7 0021; 09C7 -0A74 0061; 0A74 -0A07 0061; 0A07 -0A17 003F; 0A17 -0A1E 0021; 0A1E -0A28 0021; 0A28 -0A32 0334 0A3C; 0A32 0334 -0A47 0062; 0A47 -0A89 0061; 0A89 -0A93 0061; 0A93 -0A9D 0061; 0A9D -0AA7 0061; 0AA7 -0AB3 0061; 0AB3 -0AC1 0061; 0AC1 -0ACB 0061; 0ACB -0B60 0021; 0B60 -0B18 0021; 0B18 -0B5C 0021; 0B5C -0B28 0062; 0B28 -0B33 0062; 0B33 -0B40 0062; 0B40 -0B4C 003F; 0B4C -0B88 0041; 0B88 -0B95 0021; 0B95 -0BAA 0021; 0BAA -0BB8 0021; 0BB8 -0BC6 0BBE 0021; 0BC6 0BBE -0BD7 0062; 0BD7 -0C61 0062; 0C61 -0C18 0062; 0C18 -0C22 0062; 0C22 -0C2D 0062; 0C2D -0C38 0062; 0C38 -0C47 0062; 0C47 -0C56 0061; 0C56 -0CE1 0061; 0CE1 -0C98 0061; 0C98 -0CA2 0061; 0CA2 -0CAD 0061; 0CAD -0CB9 0061; 0CB9 -0CC2 0062; 0CC2 -0CCA 0061; 0CCA -0D06 0061; 0D06 -0D0F 0061; 0D0F -0D1A 0061; 0D1A -0D24 0061; 0D24 -0D2F 0061; 0D2F -0D39 0061; 0D39 -0D46 0D3E 003F; 0D46 0D3E -0D85 003F; 0D85 -0D8F 003F; 0D8F -0D9C 003F; 0D9C -0DA6 003F; 0DA6 -0DB0 003F; 0DB0 -0DBB 003F; 0DBB -0DCA 0062; 0DCA -0DD9 0334 0DCA; 0DD9 0334 -0DD9 0DDF 0021; 0DD9 0DDF -0E05 0061; 0E05 -0E0F 0061; 0E0F -0E19 0061; 0E19 -0E23 0061; 0E23 -0E2D 0061; 0E2D -0E35 0062; 0E35 -0E4C 0041; 0E4C -0E95 0041; 0E95 -0EA1 0041; 0EA1 -0EAE 0041; 0EAE -0EB7 0021; 0EB7 -0ECD 003F; 0ECD -0F93 003F; 0F93 -0F99 003F; 0F99 -0F9E 003F; 0F9E -0FA3 003F; 0FA3 -0FA8 003F; 0FA8 -0FAD 003F; 0FAD -0FBB 0061; 0FBB -0F64 0021; 0F64 -0FB8 0021; 0FB8 -0F71 1D165 0F72 0061; 0F71 1D165 0F72 -0F71 0F74 0041; 0F71 0F74 -0F78 0062; 0F78 -0F84 0061; 0F84 -1909 0061; 1909 -1913 0061; 1913 -1920 0061; 1920 -192A 0061; 192A -1938 0061; 1938 -1709 0061; 1709 -0334 1714; 1714 -1729 0021; 1729 -1733 0021; 1733 -1747 0041; 1747 -1751 0041; 1751 -1767 0041; 1767 -1773 0041; 1773 -1009 0041; 1009 -1013 0041; 1013 -101D 0041; 101D -1026 003F; 1026 -102D 0021; 102D -1039 0021; 1039 -1788 0041; 1788 -1792 0041; 1792 -179C 0041; 179C -17A5 0041; 17A5 -17AF 0041; 17AF -17B9 0041; 17B9 -17C3 0041; 17C3 -1956 003F; 1956 -1960 003F; 1960 -196A 003F; 196A -1881 003F; 1881 -1844 003F; 1844 -1824 003F; 1824 -1829 003F; 1829 -182C 003F; 182C -1830 003F; 1830 -1868 003F; 1868 -1853 003F; 1853 -1839 003F; 1839 -1854 003F; 1854 -1840 003F; 1840 -189F 003F; 189F -1894 003F; 1894 -13A0 0062; 13A0 -13AA 0062; 13AA -13B4 0062; 13B4 -13BE 0062; 13BE -13C8 0062; 13C8 -13D2 0062; 13D2 -13DC 0062; 13DC -13E6 0062; 13E6 -13F0 0062; 13F0 -1406 0062; 1406 -1410 0062; 1410 -141A 0062; 141A -1424 0062; 1424 -142E 0062; 142E -1438 0062; 1438 -1442 0062; 1442 -144C 0062; 144C -1456 0062; 1456 -1460 0062; 1460 -146A 0062; 146A -1474 0062; 1474 -147E 0062; 147E -1488 0062; 1488 -1492 0062; 1492 -149C 0062; 149C -14A6 0062; 14A6 -14B0 0062; 14B0 -14BA 0062; 14BA -14C4 0062; 14C4 -14CE 0062; 14CE -14D8 0062; 14D8 -14E2 0062; 14E2 -14EC 0062; 14EC -14F6 0062; 14F6 -1500 0062; 1500 -150A 0062; 150A -1514 0062; 1514 -151E 0062; 151E -1528 0062; 1528 -1532 0062; 1532 -153C 0062; 153C -1546 0062; 1546 -1550 0062; 1550 -155A 0062; 155A -1564 0062; 1564 -156E 0062; 156E -1578 0062; 1578 -1582 0062; 1582 -158C 0062; 158C -1595 0062; 1595 -1599 0062; 1599 -15A3 0062; 15A3 -15AC 0062; 15AC -15B6 0062; 15B6 -15C0 0062; 15C0 -15CA 0062; 15CA -15D4 0062; 15D4 -15DE 0062; 15DE -15E8 0062; 15E8 -15F2 0062; 15F2 -15FC 0062; 15FC -1606 0062; 1606 -1610 0062; 1610 -161A 0062; 161A -1624 0062; 1624 -162E 0062; 162E -1638 0062; 1638 -1642 0062; 1642 -164C 0062; 164C -1656 0062; 1656 -1660 0062; 1660 -166A 0062; 166A -1688 0062; 1688 -1692 0062; 1692 -16A1 0062; 16A1 -16AE 0041; 16AE -16B7 0062; 16B7 -16C1 0061; 16C1 -16C9 0062; 16C9 -16D4 0021; 16D4 -16DC 0061; 16DC -16E4 0062; 16E4 -FFA1 0041; FFA1 -FFA2 0021; FFA2 -3137 0021; 3137 -3139 0021; 3139 -FFB1 0041; FFB1 -3273 0062; 3273 -3274 0062; 3274 -3275 0062; 3275 -321C 0062; 321C -3217 0061; 3217 -314C 0021; 314C -FFBD 0041; FFBD -327B 0062; 327B -1115 0061; 1115 -111C 0061; 111C -3144 0041; 3144 -3176 0062; 3176 -317A 0062; 317A -1134 0062; 1134 -113D 0062; 113D -1146 0062; 1146 -114E 0062; 114E -3184 0062; 3184 -314F 0041; 314F -FFC5 0062; FFC5 -FFCB 0021; FFCB -3159 0041; 3159 -FFD3 0062; FFD3 -FFD7 0021; FFD7 -3163 0041; 3163 -117E 0062; 117E -1186 0062; 1186 -118F 0062; 118F -1196 0062; 1196 -119F 0062; 119F -11AB 0062; 11AB -313A 0041; 313A -FFAD 0062; FFAD -11B9 0062; 11B9 -11C3 0062; 11C3 -11CB 0062; 11CB -11D3 0061; 11D3 -11DA 0062; 11DA -11E2 0062; 11E2 -11EC 0062; 11EC -11F4 0062; 11F4 -30A1 0041; 30A1 -30A3 0041; 30A3 -3045 0061; 3045 -3308 0062; 3308 -30A9 0061; 30A9 -30AB 0061; 30AB -32D6 003F; 32D6 -3314 003F; 3314 -3050 0041; 3050 -30B2 0021; 30B2 -331E 003F; 331E -3055 0061; 3055 -31F1 0061; 31F1 -3059 0041; 3059 -305B 0062; 305B -305E 0062; 305E -32E0 003F; 32E0 -3065 003F; 3065 -30C6 0061; 30C6 -32E3 0041; 32E3 -30CB 003F; 30CB -306D 0061; 306D -30CF 0334 3099; 30CF 0334 -306F 0062; 306F -FF8B 0061; FF8B -32EB 003F; 32EB -3332 0061; 3332 -333B 0061; 333B -3339 0021; 3339 -307B 0061; 307B -30DE 003F; 30DE -30DF 003F; 30DF -32F0 0061; 32F0 -3082 0061; 3082 -3083 0062; 3083 -3088 003F; 3088 -31FB 0041; 31FB -31FD 003F; 31FD -32F9 0061; 32F9 -FF9C 0021; FF9C -32FC 0061; 32FC -32FE 0061; 32FE -3108 003F; 3108 -31B6 0061; 31B6 -3113 003F; 3113 -311B 003F; 311B -3120 003F; 3120 -31AC 003F; 31AC -A001 003F; A001 -A00B 003F; A00B -A015 003F; A015 -A01F 003F; A01F -A029 003F; A029 -A033 003F; A033 -A03D 003F; A03D -A047 003F; A047 -A051 003F; A051 -A05B 003F; A05B -A065 003F; A065 -A06F 003F; A06F -A079 003F; A079 -A083 003F; A083 -A08D 003F; A08D -A097 003F; A097 -A0A1 003F; A0A1 -A0AB 003F; A0AB -A0B5 003F; A0B5 -A0BF 003F; A0BF -A0C9 003F; A0C9 -A0D3 003F; A0D3 -A0DD 003F; A0DD -A0E7 003F; A0E7 -A0F1 003F; A0F1 -A0FB 003F; A0FB -A105 003F; A105 -A10F 003F; A10F -A119 003F; A119 -A123 003F; A123 -A12D 003F; A12D -A137 003F; A137 -A141 003F; A141 -A14B 003F; A14B -A155 003F; A155 -A15F 003F; A15F -A169 003F; A169 -A173 003F; A173 -A17D 003F; A17D -A187 003F; A187 -A191 003F; A191 -A19B 003F; A19B -A1A5 003F; A1A5 -A1AF 003F; A1AF -A1B9 003F; A1B9 -A1C3 003F; A1C3 -A1CD 003F; A1CD -A1D7 003F; A1D7 -A1E1 003F; A1E1 -A1EB 003F; A1EB -A1F5 003F; A1F5 -A1FF 003F; A1FF -A209 003F; A209 -A213 003F; A213 -A21D 003F; A21D -A227 003F; A227 -A231 003F; A231 -A23B 003F; A23B -A245 003F; A245 -A24F 003F; A24F -A259 003F; A259 -A263 003F; A263 -A26D 003F; A26D -A277 003F; A277 -A281 003F; A281 -A28B 003F; A28B -A295 003F; A295 -A29F 003F; A29F -A2A9 003F; A2A9 -A2B3 003F; A2B3 -A2BD 003F; A2BD -A2C7 003F; A2C7 -A2D1 003F; A2D1 -A2DB 003F; A2DB -A2E5 003F; A2E5 -A2EF 003F; A2EF -A2F9 003F; A2F9 -A303 003F; A303 -A30D 003F; A30D -A317 003F; A317 -A321 003F; A321 -A32B 003F; A32B -A335 003F; A335 -A33F 003F; A33F -A349 003F; A349 -A353 003F; A353 -A35D 003F; A35D -A367 003F; A367 -A371 003F; A371 -A37B 003F; A37B -A385 003F; A385 -A38F 003F; A38F -A399 003F; A399 -A3A3 003F; A3A3 -A3AD 003F; A3AD -A3B7 003F; A3B7 -A3C1 003F; A3C1 -A3CB 003F; A3CB -A3D5 003F; A3D5 -A3DF 003F; A3DF -A3E9 003F; A3E9 -A3F3 003F; A3F3 -A3FD 003F; A3FD -A407 003F; A407 -A411 003F; A411 -A41B 003F; A41B -A425 003F; A425 -A42F 003F; A42F -A439 003F; A439 -A443 003F; A443 -A44D 003F; A44D -A457 003F; A457 -A461 003F; A461 -A46B 003F; A46B -A475 003F; A475 -A47F 003F; A47F -A489 003F; A489 -10306 003F; 10306 -10310 003F; 10310 -1031A 003F; 1031A -10335 003F; 10335 -1033F 003F; 1033F -10349 003F; 10349 -1042C 003F; 1042C -10431 003F; 10431 -10436 003F; 10436 -1043B 003F; 1043B -10440 003F; 10440 -10445 003F; 10445 -1044A 003F; 1044A -1044F 003F; 1044F -10458 003F; 10458 -10462 003F; 10462 -1046C 003F; 1046C -10476 003F; 10476 -10480 003F; 10480 -1048A 003F; 1048A -10494 003F; 10494 -10000 003F; 10000 -1000A 003F; 1000A -10015 003F; 10015 -1001F 003F; 1001F -1002A 003F; 1002A -10034 003F; 10034 -10040 003F; 10040 -1004A 003F; 1004A -10056 003F; 10056 -10082 003F; 10082 -1008C 003F; 1008C -10096 003F; 10096 -100A0 003F; 100A0 -100AA 003F; 100AA -100B4 003F; 100B4 -100BE 003F; 100BE -100C8 003F; 100C8 -100D2 003F; 100D2 -100DC 003F; 100DC -100E6 003F; 100E6 -100F0 003F; 100F0 -100FA 003F; 100FA -1080C 003F; 1080C -10816 003F; 10816 -10820 003F; 10820 -1082A 003F; 1082A -10834 003F; 10834 -10384 003F; 10384 -1038E 003F; 1038E -10398 003F; 10398 -3220 0062; 3220 -3222 0061; 3222 -32A5 003F; 32A5 -2F04 003F; 2F04 -3221 003F; 3221 -2E85 003F; 2E85 -F92D 003F; F92D -2F80B 003F; 2F80B -2F810 003F; 2F810 -2F811 003F; 2F811 -2F0E 003F; 2F0E -2F81D 003F; 2F81D -F9FF 003F; F9FF -3238 003F; 3238 -2F13 003F; 2F13 -F9EB 003F; F9EB -323F 003F; 323F -2F830 003F; 2F830 -2F837 003F; 2F837 -F9ED 003F; F9ED -2F842 003F; 2F842 -FA0D 003F; FA0D -3195 0041; 3195 -2F853 003F; 2F853 -F942 003F; F942 -32B0 003F; 32B0 -329B 0041; 329B -2F26 003F; 2F26 -2F86F 0041; 2F86F -2E8E 0021; 2E8E -F9DF 003F; F9DF -2F87F 003F; 2F87F -2F30 003F; 2F30 -2F33 0021; 2F33 -FA0B 003F; FA0B -2F39 003F; 2F39 -F966 003F; F966 -2F8A0 003F; 2F8A0 -FA3E 003F; FA3E -FA40 0041; FA40 -2E98 003F; 2E98 -2F8B7 003F; 2F8B7 -2F8C6 003F; 2F8C6 -2F8C9 003F; 2F8C9 -FA42 003F; FA42 -FA12 003F; FA12 -2F8D4 003F; 2F8D4 -2F8DA 003F; 2F8DA -F9C9 003F; F9C9 -FA44 0041; FA44 -F94C 003F; F94C -2F8F3 003F; 2F8F3 -2F4F 003F; 2F4F -2EA1 003F; 2EA1 -2F8FF 003F; 2F8FF -FA45 0041; FA45 -F9CB 003F; F9CB -F922 003F; F922 -2F835 003F; 2F835 -2F91E 003F; 2F91E -2F921 003F; 2F921 -3235 003F; 3235 -2F928 003F; 2F928 -F9E4 003F; F9E4 -2F932 003F; 2F932 -2F936 003F; 2F936 -F9C1 003F; F9C1 -2F6C 003F; 2F6C -2F6E 003F; 2F6E -F985 003F; F985 -FA4F 003F; FA4F -FA52 003F; FA52 -F956 003F; F956 -2F75 003F; 2F75 -FA1D 003F; FA1D -F96A 003F; F96A -F950 003F; F950 -2EB4 0041; 2EB4 -F9AF 003F; F9AF -2F7E 003F; 2F7E -2F81 003F; 2F81 -3242 003F; 3242 -2F86 003F; 2F86 -2EBF 0061; 2EBF -2F996 003F; 2F996 -2F9A2 003F; 2F9A2 -2F9A9 003F; 2F9A9 -2F8C 003F; 2F8C -2F9BA 003F; 2F9BA -2F8E 003F; 2F8E -2F9C7 003F; 2F9C7 -2F92 0061; 2F92 -F97D 003F; F97D -2EC8 003F; 2EC8 -2F9D4 003F; 2F9D4 -2F9A 003F; 2F9A -F902 003F; F902 -2F98D 003F; 2F98D -FA25 0041; FA25 -2F9E4 003F; 2F9E4 -328E 0021; 328E -2F9EB 003F; 2F9EB -2F9F0 003F; 2F9F0 -F9DC 003F; F9DC -F9B2 003F; F9B2 -2FB0 003F; 2FB0 -2F9FE 0041; 2F9FE -2FB7 0021; 2FB7 -2FB8 003F; 2FB8 -2FBB 003F; 2FBB -2FC2 003F; 2FC2 -F920 003F; F920 -2FA15 003F; 2FA15 -2FA18 003F; 2FA18 -2FD1 003F; 2FD1 -F908 0021; F908 -9FA3 003F; 9FA3 -FA23 003F; FA23 -3405 003F; 3405 -340F 003F; 340F -3419 003F; 3419 -3423 003F; 3423 -342D 003F; 342D -3437 003F; 3437 -3441 003F; 3441 -344B 003F; 344B -3455 003F; 3455 -345F 003F; 345F -3469 003F; 3469 -3473 003F; 3473 -347D 003F; 347D -3487 003F; 3487 -3491 003F; 3491 -349B 003F; 349B -34A4 003F; 34A4 -34AE 003F; 34AE -34B8 003F; 34B8 -34C0 003F; 34C0 -34CA 003F; 34CA -34D4 003F; 34D4 -34DE 003F; 34DE -34E7 003F; 34E7 -34F1 003F; 34F1 -34FB 003F; 34FB -3505 003F; 3505 -350F 003F; 350F -3518 003F; 3518 -3522 003F; 3522 -352C 003F; 352C -3536 003F; 3536 -3540 003F; 3540 -354A 003F; 354A -3554 003F; 3554 -355E 003F; 355E -3568 003F; 3568 -3572 003F; 3572 -357C 003F; 357C -3586 003F; 3586 -3590 003F; 3590 -359A 003F; 359A -35A4 003F; 35A4 -35AE 003F; 35AE -35B8 003F; 35B8 -35C2 003F; 35C2 -35CC 003F; 35CC -35D6 003F; 35D6 -35E0 003F; 35E0 -35EA 003F; 35EA -35F4 003F; 35F4 -35FE 003F; 35FE -3608 003F; 3608 -3612 003F; 3612 -361C 003F; 361C -3626 003F; 3626 -3630 003F; 3630 -363A 003F; 363A -3644 003F; 3644 -364E 003F; 364E -3658 003F; 3658 -3662 003F; 3662 -366C 003F; 366C -3676 003F; 3676 -3680 003F; 3680 -368A 003F; 368A -3694 003F; 3694 -369E 003F; 369E -36A8 003F; 36A8 -36B2 003F; 36B2 -36BC 003F; 36BC -36C6 003F; 36C6 -36D0 003F; 36D0 -36DA 003F; 36DA -36E4 003F; 36E4 -2F867 0021; 2F867 -36F7 003F; 36F7 -3700 003F; 3700 -370A 003F; 370A -3714 003F; 3714 -371E 003F; 371E -3728 003F; 3728 -3732 003F; 3732 -373C 003F; 373C -3746 003F; 3746 -3750 003F; 3750 -375A 003F; 375A -3764 003F; 3764 -376E 003F; 376E -3778 003F; 3778 -3781 0041; 3781 -378B 003F; 378B -3795 003F; 3795 -379F 003F; 379F -37A9 003F; 37A9 -37B3 003F; 37B3 -37BD 003F; 37BD -37C7 003F; 37C7 -37D1 003F; 37D1 -37DB 003F; 37DB -37E5 003F; 37E5 -37EF 003F; 37EF -37F9 003F; 37F9 -3803 003F; 3803 -380D 003F; 380D -3817 003F; 3817 -3821 003F; 3821 -382B 003F; 382B -3834 003F; 3834 -383E 003F; 383E -3848 003F; 3848 -3852 003F; 3852 -385C 003F; 385C -3865 003F; 3865 -386F 003F; 386F -3879 003F; 3879 -3882 003F; 3882 -388C 003F; 388C -3896 003F; 3896 -38A0 003F; 38A0 -38AA 003F; 38AA -38B4 003F; 38B4 -38BE 003F; 38BE -38C7 0041; 38C7 -38D1 003F; 38D1 -38DB 003F; 38DB -38E4 003F; 38E4 -38EE 003F; 38EE -38F8 003F; 38F8 -3902 003F; 3902 -390C 003F; 390C -3916 003F; 3916 -391F 003F; 391F -3929 003F; 3929 -3933 003F; 3933 -393C 003F; 393C -3946 003F; 3946 -3950 003F; 3950 -395A 003F; 395A -3964 003F; 3964 -396E 003F; 396E -3978 003F; 3978 -3982 003F; 3982 -398C 003F; 398C -3996 003F; 3996 -39A0 003F; 39A0 -39AA 003F; 39AA -39B4 003F; 39B4 -39BE 003F; 39BE -39C8 003F; 39C8 -39D2 003F; 39D2 -39DC 003F; 39DC -39E6 003F; 39E6 -39F0 003F; 39F0 -39FA 003F; 39FA -3A04 003F; 3A04 -3A0E 003F; 3A0E -3A18 003F; 3A18 -3A22 003F; 3A22 -3A2C 003F; 3A2C -3A35 003F; 3A35 -3A3F 003F; 3A3F -3A49 003F; 3A49 -3A53 003F; 3A53 -3A5D 003F; 3A5D -3A67 003F; 3A67 -3A70 003F; 3A70 -3A7A 003F; 3A7A -3A84 003F; 3A84 -3A8E 003F; 3A8E -3A98 003F; 3A98 -3AA2 003F; 3AA2 -3AAC 003F; 3AAC -3AB6 003F; 3AB6 -3AC0 003F; 3AC0 -3ACA 003F; 3ACA -3AD4 003F; 3AD4 -3ADE 003F; 3ADE -3AE7 003F; 3AE7 -3AF1 003F; 3AF1 -3AFB 003F; 3AFB -3B05 003F; 3B05 -3B0E 003F; 3B0E -3B18 003F; 3B18 -3B21 003F; 3B21 -3B2B 003F; 3B2B -3B35 003F; 3B35 -3B3F 003F; 3B3F -2F8DE 0021; 2F8DE -3B52 003F; 3B52 -3B5C 003F; 3B5C -3B66 003F; 3B66 -3B70 003F; 3B70 -3B7A 003F; 3B7A -3B84 003F; 3B84 -3B8E 003F; 3B8E -3B98 003F; 3B98 -3BA1 003F; 3BA1 -3BAB 003F; 3BAB -3BB5 003F; 3BB5 -3BBF 003F; 3BBF -3BC9 003F; 3BC9 -3BD3 003F; 3BD3 -3BDD 003F; 3BDD -3BE7 003F; 3BE7 -3BF1 003F; 3BF1 -3BFB 003F; 3BFB -3C05 003F; 3C05 -3C0F 003F; 3C0F -3C18 0041; 3C18 -3C22 003F; 3C22 -3C2C 003F; 3C2C -3C36 003F; 3C36 -3C40 003F; 3C40 -3C4A 003F; 3C4A -3C53 003F; 3C53 -3C5D 003F; 3C5D -3C67 003F; 3C67 -3C71 003F; 3C71 -3C7B 003F; 3C7B -3C85 003F; 3C85 -3C8F 003F; 3C8F -3C99 003F; 3C99 -3CA3 003F; 3CA3 -3CAD 003F; 3CAD -3CB7 003F; 3CB7 -3CC1 003F; 3CC1 -3CCB 003F; 3CCB -3CD5 003F; 3CD5 -3CDF 003F; 3CDF -3CE9 003F; 3CE9 -3CF3 003F; 3CF3 -3CFD 003F; 3CFD -3D07 003F; 3D07 -3D11 003F; 3D11 -3D1B 003F; 3D1B -3D25 003F; 3D25 -3D2F 003F; 3D2F -3D38 003F; 3D38 -3D42 003F; 3D42 -3D4C 003F; 3D4C -3D56 003F; 3D56 -3D60 003F; 3D60 -3D6A 003F; 3D6A -3D74 003F; 3D74 -3D7E 003F; 3D7E -3D88 003F; 3D88 -3D92 003F; 3D92 -3D9B 003F; 3D9B -3DA5 003F; 3DA5 -3DAF 003F; 3DAF -3DB9 003F; 3DB9 -3DC3 003F; 3DC3 -3DCD 003F; 3DCD -3DD7 003F; 3DD7 -3DE1 003F; 3DE1 -3DEB 003F; 3DEB -3DF5 003F; 3DF5 -3DFF 003F; 3DFF -3E09 003F; 3E09 -3E13 003F; 3E13 -3E1D 003F; 3E1D -3E27 003F; 3E27 -3E31 003F; 3E31 -3E3B 003F; 3E3B -3E45 003F; 3E45 -3E4F 003F; 3E4F -3E59 003F; 3E59 -3E63 003F; 3E63 -3E6D 003F; 3E6D -3E77 003F; 3E77 -3E81 003F; 3E81 -3E8B 003F; 3E8B -3E95 003F; 3E95 -3E9F 003F; 3E9F -3EA9 003F; 3EA9 -3EB2 003F; 3EB2 -3EBA 003F; 3EBA -3EC4 003F; 3EC4 -3ECE 003F; 3ECE -3ED8 003F; 3ED8 -3EE2 003F; 3EE2 -3EEC 003F; 3EEC -3EF6 003F; 3EF6 -3F00 003F; 3F00 -3F0A 003F; 3F0A -3F14 003F; 3F14 -3F1D 003F; 3F1D -3F27 003F; 3F27 -3F31 003F; 3F31 -3F3B 003F; 3F3B -3F45 003F; 3F45 -3F4F 003F; 3F4F -3F59 003F; 3F59 -3F63 003F; 3F63 -3F6D 003F; 3F6D -3F77 003F; 3F77 -3F81 003F; 3F81 -3F8B 003F; 3F8B -3F95 003F; 3F95 -3F9F 003F; 3F9F -3FA9 003F; 3FA9 -3FB3 003F; 3FB3 -3FBD 003F; 3FBD -3FC7 003F; 3FC7 -3FD1 003F; 3FD1 -3FDB 003F; 3FDB -3FE5 003F; 3FE5 -3FEF 003F; 3FEF -3FF9 003F; 3FF9 -4002 003F; 4002 -400B 003F; 400B -4015 003F; 4015 -401F 003F; 401F -4029 003F; 4029 -4033 003F; 4033 -403C 003F; 403C -2F94B 0021; 2F94B -404F 003F; 404F -4059 003F; 4059 -4063 003F; 4063 -406D 003F; 406D -4077 003F; 4077 -4081 003F; 4081 -408B 003F; 408B -4095 003F; 4095 -409E 003F; 409E -40A8 003F; 40A8 -40B2 003F; 40B2 -40BC 003F; 40BC -40C6 003F; 40C6 -40D0 003F; 40D0 -40DA 003F; 40DA -40E3 0041; 40E3 -40ED 003F; 40ED -40F7 003F; 40F7 -4101 003F; 4101 -410B 003F; 410B -4115 003F; 4115 -411F 003F; 411F -4129 003F; 4129 -4132 003F; 4132 -413C 003F; 413C -4146 003F; 4146 -4150 003F; 4150 -415A 003F; 415A -4164 003F; 4164 -416E 003F; 416E -4178 003F; 4178 -4182 003F; 4182 -418C 003F; 418C -4196 003F; 4196 -41A0 003F; 41A0 -41AA 003F; 41AA -41B4 003F; 41B4 -41BE 003F; 41BE -41C8 003F; 41C8 -41D2 003F; 41D2 -41DC 003F; 41DC -41E6 003F; 41E6 -41F0 003F; 41F0 -41FA 003F; 41FA -4203 003F; 4203 -420D 003F; 420D -4217 003F; 4217 -4221 003F; 4221 -422A 003F; 422A -4234 003F; 4234 -423E 003F; 423E -4248 003F; 4248 -4252 003F; 4252 -425C 003F; 425C -4266 003F; 4266 -4270 003F; 4270 -427A 003F; 427A -4284 003F; 4284 -428E 003F; 428E -4298 003F; 4298 -42A1 003F; 42A1 -42AB 003F; 42AB -42B5 003F; 42B5 -42BF 003F; 42BF -42C9 003F; 42C9 -42D3 003F; 42D3 -42DD 003F; 42DD -42E7 003F; 42E7 -42F1 003F; 42F1 -42FB 003F; 42FB -4304 003F; 4304 -430E 003F; 430E -4318 003F; 4318 -4322 003F; 4322 -432C 003F; 432C -4335 003F; 4335 -433F 003F; 433F -4349 003F; 4349 -4353 003F; 4353 -435C 003F; 435C -4366 003F; 4366 -4370 003F; 4370 -437A 003F; 437A -4384 003F; 4384 -438E 003F; 438E -4398 003F; 4398 -43A2 003F; 43A2 -43AC 003F; 43AC -43B6 003F; 43B6 -43C0 003F; 43C0 -43CA 003F; 43CA -43D4 003F; 43D4 -43DC 003F; 43DC -43E6 003F; 43E6 -43F0 003F; 43F0 -43FA 003F; 43FA -4404 003F; 4404 -440D 003F; 440D -4417 003F; 4417 -4421 003F; 4421 -442B 003F; 442B -4435 003F; 4435 -443F 003F; 443F -4449 003F; 4449 -4453 003F; 4453 -445D 003F; 445D -4467 003F; 4467 -4470 003F; 4470 -447A 003F; 447A -4484 003F; 4484 -448E 003F; 448E -4498 003F; 4498 -44A2 003F; 44A2 -44AC 003F; 44AC -44B6 003F; 44B6 -44C0 003F; 44C0 -44CA 003F; 44CA -44D4 003F; 44D4 -44DE 003F; 44DE -44E8 003F; 44E8 -44F2 003F; 44F2 -44FC 003F; 44FC -4506 003F; 4506 -4510 003F; 4510 -451A 003F; 451A -4524 003F; 4524 -452D 003F; 452D -4537 003F; 4537 -4541 003F; 4541 -454B 003F; 454B -4555 003F; 4555 -455E 003F; 455E -4567 003F; 4567 -4570 003F; 4570 -457A 003F; 457A -4584 003F; 4584 -458E 003F; 458E -4598 003F; 4598 -45A2 003F; 45A2 -45AC 003F; 45AC -45B6 003F; 45B6 -45C0 003F; 45C0 -45CA 003F; 45CA -45D4 003F; 45D4 -45DD 003F; 45DD -45E7 003F; 45E7 -45F1 003F; 45F1 -45FA 003F; 45FA -4604 003F; 4604 -460E 003F; 460E -4618 003F; 4618 -4622 003F; 4622 -462C 003F; 462C -4635 0041; 4635 -463F 003F; 463F -4649 003F; 4649 -4653 003F; 4653 -465D 003F; 465D -4667 003F; 4667 -4671 003F; 4671 -467B 003F; 467B -4685 003F; 4685 -468F 003F; 468F -4699 003F; 4699 -46A3 003F; 46A3 -46AD 003F; 46AD -46B7 003F; 46B7 -46C0 003F; 46C0 -46C9 003F; 46C9 -46D3 003F; 46D3 -46DD 003F; 46DD -46E7 003F; 46E7 -46F1 003F; 46F1 -46FB 003F; 46FB -4705 003F; 4705 -470F 003F; 470F -4719 003F; 4719 -4723 003F; 4723 -472D 003F; 472D -4737 003F; 4737 -4741 003F; 4741 -474B 003F; 474B -4755 003F; 4755 -475F 003F; 475F -4769 003F; 4769 -4773 003F; 4773 -477D 003F; 477D -4787 003F; 4787 -4791 003F; 4791 -479B 003F; 479B -47A5 003F; 47A5 -47AF 003F; 47AF -47B9 003F; 47B9 -47C3 003F; 47C3 -47CD 003F; 47CD -47D7 003F; 47D7 -47E1 003F; 47E1 -47EB 003F; 47EB -47F5 003F; 47F5 -47FF 003F; 47FF -4809 003F; 4809 -4813 003F; 4813 -481D 003F; 481D -4827 003F; 4827 -4831 003F; 4831 -483B 003F; 483B -4845 003F; 4845 -484F 003F; 484F -4859 003F; 4859 -4863 003F; 4863 -486D 003F; 486D -4877 003F; 4877 -4881 003F; 4881 -488B 003F; 488B -4895 003F; 4895 -489F 003F; 489F -48A9 003F; 48A9 -48B3 003F; 48B3 -48BD 003F; 48BD -48C7 003F; 48C7 -48D1 003F; 48D1 -48DB 003F; 48DB -48E5 003F; 48E5 -48EF 003F; 48EF -48F9 003F; 48F9 -4903 003F; 4903 -490D 003F; 490D -4917 003F; 4917 -4921 003F; 4921 -492B 003F; 492B -4935 003F; 4935 -493F 003F; 493F -4949 003F; 4949 -4953 003F; 4953 -495D 003F; 495D -4967 003F; 4967 -4971 003F; 4971 -497B 003F; 497B -4985 003F; 4985 -498F 003F; 498F -4998 003F; 4998 -49A2 003F; 49A2 -49AC 003F; 49AC -49B6 003F; 49B6 -49C0 003F; 49C0 -49CA 003F; 49CA -49D4 003F; 49D4 -49DE 003F; 49DE -49E7 003F; 49E7 -49F1 003F; 49F1 -49FB 003F; 49FB -4A05 003F; 4A05 -4A0F 003F; 4A0F -4A19 003F; 4A19 -4A23 003F; 4A23 -4A2D 003F; 4A2D -4A37 003F; 4A37 -4A41 003F; 4A41 -4A4B 003F; 4A4B -4A55 003F; 4A55 -4A5F 003F; 4A5F -4A69 003F; 4A69 -4A72 003F; 4A72 -4A7B 003F; 4A7B -4A85 003F; 4A85 -4A8F 003F; 4A8F -4A99 003F; 4A99 -4AA3 003F; 4AA3 -4AAD 003F; 4AAD -4AB6 003F; 4AB6 -4AC0 003F; 4AC0 -4ACA 003F; 4ACA -4AD4 003F; 4AD4 -4ADE 003F; 4ADE -4AE8 003F; 4AE8 -4AF2 003F; 4AF2 -4AFC 003F; 4AFC -4B06 003F; 4B06 -4B10 003F; 4B10 -4B1A 003F; 4B1A -4B24 003F; 4B24 -4B2E 003F; 4B2E -4B37 003F; 4B37 -4B41 003F; 4B41 -4B4B 003F; 4B4B -4B55 003F; 4B55 -4B5F 003F; 4B5F -4B69 003F; 4B69 -4B73 003F; 4B73 -4B7D 003F; 4B7D -4B87 003F; 4B87 -4B91 003F; 4B91 -4B9B 003F; 4B9B -4BA5 003F; 4BA5 -4BAF 003F; 4BAF -4BB9 003F; 4BB9 -4BC3 003F; 4BC3 -4BCD 003F; 4BCD -4BD6 003F; 4BD6 -4BE0 003F; 4BE0 -4BEA 003F; 4BEA -4BF4 003F; 4BF4 -4BFE 003F; 4BFE -4C08 003F; 4C08 -4C12 003F; 4C12 -4C1C 003F; 4C1C -4C26 003F; 4C26 -4C30 003F; 4C30 -4C3A 003F; 4C3A -4C44 003F; 4C44 -4C4E 003F; 4C4E -4C58 003F; 4C58 -4C62 003F; 4C62 -4C6C 003F; 4C6C -4C76 003F; 4C76 -4C80 003F; 4C80 -4C8A 003F; 4C8A -4C94 003F; 4C94 -4C9E 003F; 4C9E -4CA8 003F; 4CA8 -4CB2 003F; 4CB2 -4CBC 003F; 4CBC -4CC6 003F; 4CC6 -4CCF 003F; 4CCF -4CD9 003F; 4CD9 -4CE3 003F; 4CE3 -2FA0E 0021; 2FA0E -4CF6 003F; 4CF6 -4CFF 003F; 4CFF -4D09 003F; 4D09 -4D13 003F; 4D13 -4D1D 003F; 4D1D -4D27 003F; 4D27 -4D31 003F; 4D31 -4D3B 003F; 4D3B -4D45 003F; 4D45 -4D4F 003F; 4D4F -4D58 003F; 4D58 -4D62 003F; 4D62 -4D6C 003F; 4D6C -4D76 003F; 4D76 -4D80 003F; 4D80 -4D8A 003F; 4D8A -4D94 003F; 4D94 -4D9E 003F; 4D9E -4DA8 003F; 4DA8 -4DB2 003F; 4DB2 -2F803 003F; 2F803 -2F860 003F; 2F860 -2F891 0041; 2F891 -2F8E3 003F; 2F8E3 -2F91D 003F; 2F91D -2F942 003F; 2F942 -2F95D 0041; 2F95D -2F97C 003F; 2F97C -2F9B1 003F; 2F9B1 -2F9ED 003F; 2F9ED -2FA12 003F; 2FA12 -2A6D6 003F; 2A6D6 -F8FC 003F; F8FC -E0004 003F; E0004 -F00FA 003F; F00FA -FFFF8 003F; FFFF8 -100004 003F; 100004 -10FF02 003F; 10FF02 +2007 0021; +1FEF 0021; +FE4C 003F; +1FBF 0300 0334; +1FFE 0341 0334; +1FC0 0021; +2013 003F; +FE50 003F; +003B 0021; +0704 0021; +16EB 0021; +001D 0021; +009B 0021; +05A7 0021; +06DE 0021; +1B6E 0021; +D804 0021; +FFFA 0021; +1D182 0021; +8FFFF 0021; +E0032 0021; +E0050 0021; +E006E 0021; +E010C 0021; +E012A 0021; +E0148 0021; +E0166 0021; +E0184 0021; +E01A2 0021; +E01C0 0021; +E01DE 0021; +FE57 003F; +0017 003F; +0095 003F; +05A1 003F; +06D8 003F; +180C 003F; +206E 003F; +FE0F 003F; +1D17C 003F; +5FFFF 003F; +E002C 003F; +E004A 003F; +E0068 003F; +E0106 003F; +E0124 003F; +E0142 003F; +E0160 003F; +E017E 003F; +E019C 003F; +E01BA 003F; +E01D8 003F; +FE56 0021; +FE52 0021; +1B5C 0021; +104B 0021; +1B5B 0021; +1039F 0021; +0022 0021; +208D 003F; +FE5B 0021; +29FC 0021; +298E 0021; +2E09 0021; +300B 003F; +3014 0021; +FD3F 0021; +002F 0021; +FF05 0021; +2033 0021; +2042 0021; +2E16 0021; +180A 0021; +0F0B 003F; +17D9 0021; +02BA 0021; +02D2 0021; +02EC 0021; +02FC 0021; +A701 0021; +A710 0021; +060E 0021; +0CF2 0021; +0F1C 0021; +0FC4 0021; +19E6 0021; +19F5 0021; +1B65 0021; +2104 0021; +2143 0021; +2193 0021; +21A1 0021; +21B1 0021; +21C0 0021; +21CD 003F; +21DB 0021; +21EA 0021; +21F9 0021; +2203 0338 0334; +220B 0338 0334; +FE62 003F; +FE66 003F; +007E 0021; +221D 0021; +222A 0021; +2238 0021; +2245 0338 0334; +2250 0021; +225F 0021; +226A 0021; +227A 0338 0334; +2282 0021; +228E 0021; +2299 0021; +22A6 0021; +22B2 0021; +22BA 0021; +22C9 0021; +22D8 0021; +22EF 0021; +22FE 0021; +230D 0021; +231C 0021; +232D 0021; +233C 0021; +234B 0021; +235A 0021; +2369 0021; +2378 0021; +2387 0021; +2396 0021; +23A5 0021; +23B4 0021; +23C3 0021; +23D2 0021; +23E1 0021; +2408 0021; +2417 0021; +2426 0021; +2502 003F; +2511 0021; +2520 0021; +252F 0021; +253E 0021; +254D 0021; +255C 0021; +256B 0021; +257A 0021; +2589 0021; +2598 0021; +25A6 0021; +25B5 0021; +25C4 0021; +25D2 0021; +25E1 0021; +25F0 0021; +25FF 0021; +260E 0021; +261D 0021; +262C 0021; +2643 0021; +2652 0021; +2661 0021; +2673 0021; +2682 0021; +2697 0021; +26A9 0021; +2707 0021; +2718 0021; +2727 0021; +2737 0021; +2746 0021; +275B 0021; +276C 0021; +279C 0021; +27AB 0021; +27BB 0021; +27D0 0021; +27DF 0021; +27F2 0021; +2901 0021; +2910 0021; +291F 0021; +292E 0021; +293D 0021; +294C 0021; +295B 0021; +296A 0021; +2979 0021; +299E 0021; +29AD 0021; +29BC 0021; +29CB 0021; +29DA 0021; +29E9 0021; +29F8 0021; +2A09 0021; +2A19 0021; +2A28 0021; +2A37 0021; +2A46 0021; +2A55 0021; +2A64 0021; +2A73 0021; +2A85 0021; +2A94 0021; +2AA3 0021; +2AB2 0021; +2AC1 0021; +2AD0 0021; +2ADE 0021; +2AED 0021; +2AFC 0021; +2B0B 0021; +2B1A 0021; +2804 0021; +2813 0021; +2822 0021; +2831 0021; +2840 0021; +284F 0021; +285E 0021; +286D 0021; +287C 0021; +288B 0021; +289A 0021; +28A9 0021; +28B8 0021; +28C7 0021; +28D6 0021; +28E5 0021; +28F4 0021; +268D 0021; +4DC4 0021; +4DD3 0021; +4DE2 0021; +4DF1 0021; +1D300 0021; +1D30F 0021; +1D31E 0021; +1D32D 0021; +1D33C 0021; +1D34B 0021; +A493 0021; +A4A2 0021; +A4B1 0021; +A4C0 0021; +1013F 0021; +10187 0021; +1D00C 0021; +1D01B 0021; +1D02A 0021; +1D039 0021; +1D048 0021; +1D057 0021; +1D066 0021; +1D075 0021; +1D084 0021; +1D093 0021; +1D0A2 0021; +1D0B1 0021; +1D0C0 0021; +1D0CF 0021; +1D0DE 0021; +1D0ED 0021; +1D106 0021; +1D115 0021; +1D124 0021; +1D133 0021; +1D142 0021; +1D151 0021; +1D158 1D165 1D170 0334; +1D15B 0021; +1D193 0021; +1D1A2 0021; +1D1B5 0021; +1D1BA 1D165 0334 1D16F; +1D1C8 0021; +1D1D7 0021; +1D208 0021; +1D217 0021; +1D226 0021; +1D235 0021; +2FF1 0021; +31C4 0021; +3013 0021; +1372 0021; +10322 0021; +1011D 0021; +1012C 0021; +1014A 0021; +10162 0021; +10171 0021; +10A46 0021; +1D369 0021; +0300 0021; +0328 003F; +031A 003F; +032B 003F; +0334 05A0; +0334 06DB; +0334 1D170; +0596 0334; +0611 0334; +0F86 0334; +1D180 0334; +0341 0334; +0334 0328; +0334 031A; +0334 032B; +0334 0345; +0334 0355; +0334 0362; +05B1 0334; +0334 FB1E; +0334 0659; +0334 0737; +0334 0746; +09BC 0334; +0334 0ECA; +0334 3099; +20EE 0334; +0347 003F; +0357 003F; +1DC1 003F; +0486 003F; +05C1 003F; +FE79 003F; +FE7C 003F; +065D 003F; +073B 003F; +074A 003F; +0952 003F; +0A82 003F; +0D82 003F; +0E4E 0021; +0F7E 0021; +17CF 0021; +FF9E 0021; +20DA 0021; +20E7 003F; +0E46 003F; +3033 003F; +FF70 003F; +00A2 0041; +00A5 0021; +0BF9 0021; +20A3 0021; +20A9 0041; +20AF 0021; +20B5 0021; +06F0 003F; +0ED0 003F; +1D7E2 0041; +0BE6 0041; +3007 0041; +0ED0 0062; +1D7E3 003F; +0967 003F; +0F2A 003F; +12434 0021; +2491 0041; +3362 0021; +32CA 0021; +2493 0062; +2494 0061; +24EE 0021; +2496 0021; +3367 0021; +33EF 0021; +33F0 0021; +2499 0062; +24F3 0041; +1D7E3 0041; +0967 0041; +0F2A 0041; +12434 0061; +2081 0062; +10142 0062; +0032 0021; +2082 0021; +0D68 0021; +1015D 0021; +249B 0021; +3251 0021; +3253 0021; +3370 0021; +3257 0021; +0032 0061; +2082 0061; +0D68 0061; +1015D 0061; +0032 0062; +0D68 0062; +33E1 0021; +1D7E5 003F; +09F6 0021; +1043 003F; +12420 003F; +33FE 0021; +325F 0041; +0033 0061; +2083 0061; +0D69 0061; +12417 0061; +0033 0062; +0D69 0062; +33E2 0021; +1D7E6 003F; +09F7 0021; +1044 003F; +1240F 003F; +32B7 0041; +32BC 0041; +2463 0061; +0A6A 0061; +17F4 0061; +12426 0041; +0664 0062; +1240F 0062; +0035 0021; +2085 0021; +194B 0021; +10173 0021; +1D364 0021; +1D7D3 0041; +096B 0041; +1045 0041; +12427 0061; +277A 0062; +3025 0062; +335D 0021; +277B 003F; +0C6C 003F; +1010C 003F; +1D7D4 0041; +096C 0041; +1046 0041; +FF16 0062; +19D6 0062; +335E 0021; +277C 003F; +0C6D 003F; +1010D 003F; +247A 0041; +07C7 0061; +0ED7 0061; +12412 0041; +09ED 0062; +33E6 0021; +1D7EA 003F; +09EE 003F; +17E8 003F; +FF18 0041; +0668 0041; +19D8 0041; +12406 0041; +096E 0062; +33E7 0021; +1D7EB 003F; +09EF 003F; +17E9 003F; +1D368 003F; +2079 0041; +0D6F 0041; +1241D 0061; +2792 0062; +12407 0062; +0085 0061; +FF3E 0061; +FE34 0061; +30A0 0061; +FE13 0061; +00A1 0061; +0702 0061; +1360 0061; +2019 0061; +FF3B 0061; +2989 0061; +3009 0061; +3018 0061; +204A 0061; +203F 0061; +070A 0061; +104D 0061; +02CB 0061; +02F7 0061; +A70B 0061; +0BF6 0061; +0FBF 0061; +19F0 0061; +1B78 0061; +FFEB 0061; +21AF 0061; +21CD 0061; +21EB 0061; +2204 0061; +003C 0061; +2215 0061; +2232 0061; +224F 0061; +226C 0061; +228D 0061; +22A8 0061; +22C3 0061; +22E5 0061; +2307 0061; +2325 0061; +2345 0061; +2363 0061; +2381 0061; +239F 0061; +23BD 0061; +23DB 0061; +2411 0061; +2448 0061; +251A 0061; +2538 0061; +2556 0061; +2574 0061; +2592 0061; +25AF 0061; +25CC 0061; +25EA 0061; +2608 0061; +2626 0061; +264C 0061; +266A 0061; +2691 0061; +26B2 0061; +2721 0061; +2740 0061; +2766 0061; +27A5 0061; +27C5 0061; +27E8 0061; +290A 0061; +2928 0061; +2946 0061; +2964 0061; +2982 0061; +29B6 0061; +29D4 0061; +29F2 0061; +2A13 0061; +2A31 0061; +2A4F 0061; +2A6D 0061; +2A8E 0061; +2AAC 0061; +2ACA 0061; +2AE8 0061; +2B06 0061; +2CEA 0061; +281D 0061; +283B 0061; +2859 0061; +2877 0061; +2895 0061; +28B3 0061; +28D1 0061; +28EF 0061; +2637 0061; +4DDD 0061; +4DFB 0061; +1D319 0061; +1D337 0061; +1D355 0061; +A4AC 0061; +1013A 0061; +1D007 0061; +1D025 0061; +1D043 0061; +1D061 0061; +1D07F 0061; +1D09D 0061; +1D0BB 0061; +1D0D9 0061; +1D101 0061; +1D11F 0061; +1D13D 0061; +1D160 0061; +1D19B 0061; +1D1BA 0061; +1D1DB 0061; +1D21B 0061; +1D239 0061; +31C8 0061; +1376 0061; +10121 0061; +1014E 0061; +10176 0061; +1D36D 0061; +001E 0061; +009C 0061; +05A8 0061; +06DF 0061; +1B6F 0061; +D805 0061; +FFFB 0061; +1D185 0061; +9FFFE 0061; +E0033 0061; +E0051 0061; +E006F 0061; +E010D 0061; +E012B 0061; +E0149 0061; +E0167 0061; +E0185 0061; +E01A3 0061; +E01C1 0061; +E01DF 0061; +1D44E 0021; +000C 0041; +02DC 0041; +005F 0041; +301C 0041; +2A74 0041; +FE57 0041; +06D4 0041; +07F7 0041; +FF07 0041; +005B 0041; +2987 0041; +FE3F 0041; +3017 0041; +FF06 0041; +2038 0041; +05F3 0041; +1940 0041; +02C9 0041; +02F5 0041; +A709 0041; +0BF4 0041; +0F3F 0041; +19EE 0041; +1B76 0041; +2192 0041; +21AC 0041; +21CB 0041; +21E9 0041; +1D7C3 0041; +00F7 0041; +2213 0041; +222E 0041; +226D 0041; +226A 0041; +228B 0041; +22A6 0041; +22C1 0041; +22DF 0041; +2305 0041; +2323 0041; +2343 0041; +2361 0041; +237F 0041; +239D 0041; +23BB 0041; +23D9 0041; +240F 0041; +2446 0041; +2518 0041; +2536 0041; +2554 0041; +2572 0041; +2590 0041; +25AD 0041; +25CB 0041; +25E8 0041; +2606 0041; +2624 0041; +264A 0041; +2668 0041; +2689 0041; +26B0 0041; +271F 0041; +273E 0041; +2764 0041; +27A3 0041; +27C3 0041; +27E6 0041; +2908 0041; +2926 0041; +2944 0041; +2962 0041; +2980 0041; +29B4 0041; +29D2 0041; +29F0 0041; +2A11 0041; +2A2F 0041; +2A4D 0041; +2A6B 0041; +2A8C 0041; +2AAA 0041; +2AC8 0041; +2AE6 0041; +2B04 0041; +2CE8 0041; +281B 0041; +2839 0041; +2857 0041; +2875 0041; +2893 0041; +28B1 0041; +28CF 0041; +28ED 0041; +2635 0041; +4DDB 0041; +4DF9 0041; +1D317 0041; +1D335 0041; +1D353 0041; +A4AA 0041; +10138 0041; +1D005 0041; +1D023 0041; +1D041 0041; +1D05F 0041; +1D07D 0041; +1D09B 0041; +1D0B9 0041; +1D0D7 0041; +1D0F5 0041; +1D11D 0041; +1D13B 0041; +1D158 0041; +1D199 0041; +1D1BD 0041; +1D1D9 0041; +1D219 0041; +1D237 0041; +31C6 0041; +1374 0041; +1011F 0041; +1014C 0041; +10174 0041; +1D36B 0041; +001C 0041; +009A 0041; +05A6 0041; +06DD 0041; +1B6D 0041; +D803 0041; +FFF9 0041; +1D181 0041; +8FFFE 0041; +E0031 0041; +E004F 0041; +E006D 0041; +E010B 0041; +E0129 0041; +E0147 0041; +E0165 0041; +E0183 0041; +E01A1 0041; +E01BF 0041; +E01DD 0041; +1D49C 0021; +2090 003F; +1EB2 003F; +212B 003F; +0101 003F; +1E00 003F; +1EAE 0334; +00C2 0334; +0041 0334 0302 0309; +0061 0308 0304 0334; +0105 0334; +1EA1 0334; +0313 0041; +0307 0061; +0317 0061; +0326 0061; +0337 0061; +034C 0061; +035C 0061; +1DC6 0061; +05B4 0061; +FE71 0061; +0651 0061; +0653 0061; +0731 0061; +0740 0061; +07EF 0061; +0982 0061; +0B03 0061; +1B02 0061; +0E4B 0061; +135F 0061; +1939 0061; +20D2 0061; +20E1 0061; +0061 0061; +1D5EE 0041; +1D56C 0041; +1EAE 0061; +1EA9 0061; +0227 0061; +1EA0 0061; +1D68A 0062; +1EB1 0062; +0226 0062; +1D2D 0021; +01FD 0061; +3373 0021; +1D01 0021; +0251 0041; +2000 0062; +FE4A 0062; +2017 0062; +FE50 0062; +0703 0062; +2047 0062; +1B5C 0062; +1B5B 0062; +0022 0062; +FE37 0062; +298E 0062; +FE3E 0062; +FD3F 0062; +FE6A 0062; +2042 0062; +180A 0062; +17D9 0062; +02D2 0062; +02FC 0062; +A710 0062; +0CF2 0062; +0FC4 0062; +19F5 0062; +2104 0062; +2194 0062; +21B4 0062; +21D3 0062; +21F0 0062; +1D6FB 0062; +2A75 0062; +221A 0062; +2237 0062; +2254 0062; +2276 0062; +22E2 0062; +22AB 0062; +22C8 0062; +22EE 0062; +230C 0062; +232C 0062; +234A 0062; +2368 0062; +2386 0062; +23A4 0062; +23C2 0062; +23E0 0062; +2416 0062; +2502 0062; +251F 0062; +253D 0062; +255B 0062; +2579 0062; +2597 0062; +25B4 0062; +25D1 0062; +25EF 0062; +260D 0062; +262B 0062; +2651 0062; +2672 0062; +2696 0062; +2706 0062; +2726 0062; +2745 0062; +276B 0062; +27AA 0062; +27CA 0062; +27F1 0062; +290F 0062; +292D 0062; +294B 0062; +2969 0062; +299D 0062; +29BB 0062; +29D9 0062; +29F7 0062; +2A18 0062; +2A36 0062; +2A54 0062; +2A72 0062; +2A93 0062; +2AB1 0062; +2ACF 0062; +2AED 0062; +2B0B 0062; +2804 0062; +2822 0062; +2840 0062; +285E 0062; +287C 0062; +289A 0062; +28B8 0062; +28D6 0062; +28F4 0062; +4DC4 0062; +4DE2 0062; +1D300 0062; +1D31E 0062; +1D33C 0062; +A493 0062; +A4B1 0062; +1013F 0062; +1D00C 0062; +1D02A 0062; +1D048 0062; +1D066 0062; +1D084 0062; +1D0A2 0062; +1D0C0 0062; +1D0DE 0062; +1D106 0062; +1D124 0062; +1D142 0062; +1D159 0062; +1D1A0 0062; +1D1C2 0062; +1D202 0062; +1D220 0062; +1D23E 0062; +31CD 0062; +137B 0062; +10126 0062; +10154 0062; +103D5 0062; +0000 0062; +0082 0062; +0488 0062; +05AD 0062; +06E4 0062; +200B 0062; +FDD3 0062; +1D167 0062; +1D18A 0062; +BFFFF 0062; +E0038 0062; +E0056 0062; +E0074 0062; +E0112 0062; +E0130 0062; +E014E 0062; +E016C 0062; +E018A 0062; +E01A8 0062; +E01C6 0062; +E01E4 0062; +1D5BB 0021; +1D539 0021; +1E05 0021; +0301 0062; +0319 0062; +033B 0062; +035F 0062; +05B7 0062; +FCF4 0062; +0734 0062; +07F2 0062; +0C02 0062; +0EC8 0062; +302A 0062; +20E4 0062; +1D68B 0061; +1D609 0061; +1E07 0061; +1D435 0062; +0180 0021; +0253 0021; +1D41C 0021; +FF23 0021; +1D63E 003F; +0063 0301 0334; +0043 0334 0327; +1D5BC 0061; +1D402 0061; +0106 0061; +0368 0062; +1D60A 0062; +33C6 0041; +2106 0041; +1D9D 003F; +1D485 0021; +FF24 003F; +1D673 003F; +1E0E 003F; +1E12 0334; +1D41D 0061; +0044 0041; +1D60B 0041; +1E12 0041; +1D4ED 0062; +33C8 003F; +3377 0021; +02A3 0061; +1D05 0021; +0257 0021; +0065 0021; +1D58A 003F; +1D508 003F; +00CA 0021; +0117 0021; +1EBA 0021; +0045 0301 0334; +00CA 0334 0301; +0045 0334 030C; +0045 0327 0334 0306; +0112 0334 0340; +0045 0302 0334 0323; +1D486 0061; +2130 0061; +2091 0061; +1EC4 0061; +0119 0061; +1EB8 0061; +1D65A 0062; +1EBF 0062; +0205 0062; +0246 003F; +018F 003F; +025B 0061; +1D9F 003F; +025E 0041; +1D68F 0021; +1D5A5 0021; +0046 0334 0307; +1D5F3 0041; +1D509 0041; +1D557 0062; +FB00 0061; +02A9 0061; +2132 0041; +1D5C0 003F; +1D53E 003F; +0121 003F; +011C 0334; +24A2 0041; +0047 0041; +24BC 0041; +1E21 0041; +1D4A2 0062; +3387 0041; +1D79 0041; +0260 0062; +01A2 003F; +1D489 003F; +210B 003F; +1E26 003F; +021E 0334; +1E2A 0334; +1D629 0061; +1D5A7 0061; +021F 0061; +0126 0061; +1D46F 0062; +32CC 003F; +01F6 0061; +2C75 0061; +2148 0021; +24D8 003F; +1D610 003F; +01CF 003F; +0208 003F; +0069 0334 0306; +1E2E 0334; +0209 0334; +2170 0061; +1D5F6 0041; +1D4D8 0041; +00CE 0061; +1EC8 0061; +1D526 0062; +00CD 0062; +2171 0021; +33CC 0021; +0131 0021; +0268 0021; +0269 0021; +1D4BF 0021; +1D409 0021; +1D36 0021; +1D55B 0061; +1D4A5 0061; +0135 0041; +1D50D 0062; +0249 003F; +0284 003F; +1D590 003F; +1D4A6 003F; +1E32 0021; +1E33 0334; +1D694 0061; +1D5AA 0061; +01E9 0061; +1D5C4 0062; +01E8 0062; +3398 0021; +33CF 0021; +0199 0021; +24A7 003F; +1D695 003F; +1D5AB 003F; +1E38 003F; +006C 0334 0323; +0140 003F; +1D4F5 0041; +2112 0041; +013B 0041; +1D425 0062; +24C1 0062; +01C8 0041; +32CF 0062; +019A 0061; +026C 0062; +026E 0062; +1D5FA 0021; +1D510 0021; +1E3E 003F; +036B 0334; +1D5FA 0061; +1D510 0061; +1E3F 0041; +1D662 0062; +1E43 0062; +339F 0021; +33A8 0041; +33C1 0061; +FF4E 0021; +24DD 0021; +1D649 003F; +0145 0021; +006E 030C 0334; +006E 032D 0334; +1D697 0061; +1D615 0061; +01F8 0061; +3381 0061; +1D5AD 0062; +338B 0062; +33B1 0062; +1D0E 0062; +0220 0062; +014A 0041; +1D490 003F; +1D442 003F; +014F 0021; +00D6 0021; +0231 0021; +014C 0021; +1EDD 0021; +004F 0341 0334; +006F 0302 0300 0334; +006F 0308 0334; +004F 0334 0303 0301; +004F 0307 0304 0334; +014C 0301 0334; +01A1 0334; +006F 0334 0309 031B; +006F 0061; +1D5FC 0041; +1D57A 0041; +00D4 0061; +0151 0061; +00D8 0061; +020D 0061; +1EE2 0061; +1D40E 0062; +1ED7 0062; +01ED 0062; +0153 0021; +1D14 0021; +1D12 0021; +0275 0021; +1D3D 0061; +1D45D 003F; +1D67F 0021; +0070 0341 0334; +1D699 0061; +1D617 0061; +1E57 0061; +1D40F 0062; +33D7 003F; +33B4 003F; +1D88 003F; +0071 003F; +1D69A 003F; +1D618 003F; +1D562 0041; +1D4AC 0041; +211A 0062; +024A 0061; +1D42B 003F; +1D64D 0021; +0158 003F; +0072 0334 0301; +0210 0334; +0072 0041; +1D633 0041; +1D5B1 0041; +0211 0041; +33AF 0062; +1D4E1 0062; +20A8 003F; +1D72 003F; +027B 003F; +1D73 003F; +1D530 0021; +1D4AE 0021; +015A 003F; +1E69 003F; +0073 0334 030C; +1E62 0334; +1D494 0061; +1D412 0061; +015B 0061; +1E62 0061; +24E2 0062; +015F 0062; +FB06 0041; +023F 0021; +0285 0021; +1D599 0021; +1D517 0021; +0164 003F; +0054 030C 0334; +0074 032D 0334; +1D5CD 0061; +1D54B 0061; +1E97 0061; +1D42D 0062; +1D57 0062; +1D7A 0041; +1D1B 0041; +1DB5 003F; +0236 0041; +1D496 003F; +1D414 003F; +016D 003F; +01D9 003F; +1EE7 003F; +1EEC 003F; +0075 0334 0300; +016E 0334; +00DC 0334 030C; +0075 0334 0328; +0214 0334; +0075 0334 0303 031B; +0075 0334 0324; +1D4CA 0061; +1D448 0061; +1D64 0041; +00DC 0041; +0173 0041; +1EE8 0041; +1E75 0041; +1D580 0062; +01D6 0062; +1EF1 0062; +1D1E 0021; +1D99 0021; +1D5A 003F; +1DB7 003F; +1D533 0021; +1D449 0021; +1D65 003F; +24B1 0041; +24E5 0041; +1D61D 0041; +1D5CF 0062; +2175 003F; +33DE 003F; +2C74 003F; +1D534 0021; +1D4B2 0021; +1E83 003F; +0057 0334 0301; +0057 0334 0307; +1D4CC 0041; +1D44A 0041; +1E98 0061; +24E6 0062; +1E87 0062; +1D4CD 0021; +2169 003F; +02E3 003F; +036F 0061; +1D6A1 0041; +1D5B7 0041; +1D569 0062; +1E8A 0062; +24B4 0021; +0059 0021; +24CE 0021; +0233 0021; +0177 0334; +0232 0334; +1D66E 0061; +1D5EC 0061; +0177 0041; +FF59 0062; +1D688 0062; +024E 003F; +1D59F 0021; +1D4B5 0021; +1E91 003F; +005A 0302 0334; +FF5A 0041; +24E9 0041; +1D689 0041; +FF5A 0062; +1D689 0062; +01B6 0041; +0290 0041; +0292 0021; +01EE 0062; +0293 0062; +01F7 0062; +0185 0061; +02BC 0062; +02BF 0062; +02A2 0062; +0297 0062; +1D6A8 0021; +1F06 0021; +1F8B 0021; +1FB0 0021; +03B1 0343 0341 0334 0345; +03B1 0313 0345 0342 0334; +03B1 0334 0314 0341 0345; +1F09 0342 0334; +03B1 0334 0300; +1FB9 0334; +1D6A8 0041; +1F86 0041; +1F0F 0041; +1FB6 0041; +1F0A 0062; +1F70 0062; +1D757 0021; +1D757 0061; +1D6FE 0021; +213D 0061; +03B3 0062; +1D739 003F; +0394 0041; +1D6C6 0021; +1D75A 003F; +0388 0021; +1F18 0334 0300; +0395 0334 0341; +1D774 0041; +1F19 0061; +1D774 0062; +1D7CB 0021; +1D6C7 0021; +1D701 0041; +1D6C8 0021; +1F94 0021; +1F2D 0021; +0389 0021; +0397 0334 0343 0341; +0397 0313 0334 0342; +0397 0314 0334 0301; +1F21 0334 0342; +03B7 0334 0341 0345; +1FC3 003F; +1F28 0041; +1F21 0041; +1F99 0041; +1D7B0 0062; +1F2B 0062; +1D751 0021; +1D6B9 003F; +1D751 0041; +1DBF 0041; +037A 0021; +1F3C 0021; +038A 0021; +03B9 0334 0313; +1F38 0334 0342; +0399 0334 0314 0342; +03B9 0308 0334; +037A 0061; +1F3C 0061; +038A 0061; +03B9 0062; +03AF 0062; +1D73F 0021; +03F0 0061; +1D6EB 0041; +1D706 0021; +1D740 0041; +1D27 0041; +00B5 0061; +00B5 0062; +339B 0041; +039D 003F; +1D6B4 0041; +039E 003F; +1D6B5 0041; +039F 003F; +1F4D 003F; +039F 0334 0313 0301; +1F49 0334 0340; +1D7B8 0041; +1F45 0041; +1D79E 0062; +1D77F 0021; +03C0 0041; +1D72B 0061; +1D28 003F; +03D8 0061; +1D6B8 0021; +03F1 0061; +1D6F2 0041; +1D68 0062; +1D70D 003F; +1D70D 0061; +1D768 0041; +03FE 0061; +1D7BD 0021; +03A4 0061; +1D7BE 0021; +1F59 0021; +1FE8 0021; +03C5 0313 0300 0334; +03C5 0314 0334 0342; +1FE0 0334; +1FE1 0334; +1F50 0061; +038E 0041; +1FE9 0061; +1FEB 0062; +1D6D7 003F; +1D6D7 0061; +1D76B 0041; +1D74C 0021; +1D7C0 0061; +1D6F8 0062; +03C8 0061; +03A8 0062; +1D76E 0021; +1F6E 003F; +1F67 003F; +1FF7 003F; +03A9 0334 0343 0340; +1FA0 0334; +1F61 0340 0334; +03C9 0334 0314 0345; +03C9 0340 0334 0345; +1D788 0041; +1F6A 0061; +1F63 0061; +1F7C 0061; +1F6C 0062; +1F7D 0062; +03F7 0062; +2C84 0062; +2CB6 0062; +2C8E 0062; +2C94 0062; +2C99 0061; +2CBD 0061; +2CA1 0061; +2CA7 0061; +2CAD 0061; +2CBF 0061; +2CC3 0061; +03E5 0061; +03E9 0061; +2CCF 0061; +2CD5 0061; +03ED 0061; +2CDD 0061; +2CB5 0061; +2CE3 0061; +04D1 0334; +04D3 0334; +04D9 0062; +04D8 0308 0062; +0432 0062; +0493 0061; +04F7 0061; +0452 0061; +0433 0341 0334; +0413 0301 0062; +0415 0334 0300; +0435 0306 003F; +0404 0021; +0436 0001 0308 0061; +0416 0308 0041; +0504 0021; +0417 0334 0308; +04E0 0021; +0438 0300 0334; +0438 0062; +0438 0308 0061; +0456 0308 003F; +0438 0306 003F; +0408 0021; +049B 0062; +049F 0062; +04C5 003F; +0508 003F; +041D 003F; +04A3 0062; +045A 0062; +041E 0308 003F; +04E8 0061; +04E8 0308 0041; +0481 0061; +0441 0061; +0442 0061; +045B 0061; +043A 1D165 0301 0061; +0443 0304 0334; +040E 003F; +0423 0308 003F; +0423 030B 003F; +04AE 0061; +0424 0061; +04FE 0061; +0460 0061; +047A 0061; +0427 0061; +0427 0308 0041; +04B9 0061; +045F 0061; +044A 0061; +042B 0334 0308; +048C 0021; +044D 0308 0021; +044E 0021; +0467 0021; +046D 0021; +0473 0021; +0475 030F 0334; +04A9 0062; +2C31 0062; +2C34 0062; +2C37 0062; +2C3A 0062; +2C3D 0062; +2C40 0062; +2C43 0062; +2C46 0062; +2C49 0062; +2C4C 0062; +2C4F 0062; +2C52 0062; +2C55 0062; +2C58 0062; +2C5B 0062; +2C5E 0062; +2D01 0062; +2D03 0062; +2D05 0062; +2D21 0062; +2D08 0062; +2D0A 0062; +10AC 003F; +10AD 003F; +10AF 003F; +10B1 003F; +10C3 003F; +10B4 003F; +10B6 003F; +10B8 003F; +10BA 003F; +10BC 003F; +10BE 003F; +10BF 003F; +10C5 003F; +10FA 0041; +0563 0062; +0536 003F; +0539 003F; +053C 003F; +053F 003F; +0542 003F; +FB14 0041; +0546 003F; +0549 003F; +054C 003F; +FB16 0041; +0581 0062; +0584 0062; +2135 003F; +05D0 0062; +FB31 0041; +FB22 003F; +FB23 0041; +05F0 0041; +FB38 0021; +05F2 003F; +FB3A 003F; +05DC 0061; +05DD 0062; +FB41 0041; +FB4E 0021; +FB46 0061; +FB27 0041; +FB49 003F; +FB4A 0021; +10903 0062; +10909 0062; +1090F 0062; +10915 0062; +0627 0334 0653; +0627 1D165 0654 0061; +FB50 0062; +FE88 0021; +FE8B 003F; +FBEB 0021; +FC99 0021; +FC02 0041; +FBEF 0021; +FBF5 0021; +FBFB 0062; +0627 0021; +0675 003F; +0628 0041; +FC06 0061; +FC6B 003F; +FCA0 003F; +067B 003F; +FB57 0021; +0680 0041; +0753 003F; +FE93 0041; +FCA1 003F; +FC0C 0061; +FD54 003F; +FC0E 0021; +FDA4 003F; +FC0F 0061; +FE9A 0061; +FC12 0021; +FC13 0061; +FB67 0061; +FB60 0062; +FB63 0061; +FE9F 0062; +FCA8 003F; +FD1D 003F; +0683 0041; +FB73 0061; +FB7C 0062; +FB80 0062; +FCA9 003F; +FD5A 003F; +FEA6 0021; +FC1A 003F; +FD04 0061; +062F 003F; +0630 0062; +068B 003F; +FB82 0041; +06EE 003F; +0631 0062; +0691 003F; +0695 003F; +0699 003F; +FEB2 0021; +FC1C 0041; +FD5C 003F; +FD2A 003F; +FD60 003F; +FD17 003F; +0634 0041; +FD2D 0062; +FD68 003F; +FD2F 0062; +FD30 0062; +FCEA 0061; +069B 003F; +FEBA 0021; +FD65 003F; +FDF5 003F; +FDC5 003F; +0636 003F; +FC22 0061; +FC24 0061; +FC25 0061; +069E 003F; +FEC3 0062; +FD72 003F; +FD12 003F; +FEC7 0062; +FECA 0021; +FDC4 003F; +FD76 0061; +FCF8 0061; +FCBC 003F; +FD7A 003F; +06FC 003F; +0641 0041; +FC2E 0061; +FC30 0061; +06A1 003F; +FB6B 0061; +FB6F 0061; +FED6 0021; +FDF1 003F; +FDB2 003F; +06A8 003F; +FC80 003F; +FCC6 003F; +FCC8 003F; +FDB7 003F; +FB8F 0021; +06AC 003F; +06AE 003F; +06B0 003F; +06B2 003F; +06B4 003F; +0644 0041; +FEF7 0061; +FC3F 0061; +FCCA 003F; +FCCB 003F; +FCED 0041; +FC86 003F; +06B7 003F; +FEE4 0061; +FD8C 003F; +FD89 003F; +FD8E 003F; +FDB1 003F; +FEE6 0021; +FDB8 003F; +FCD3 003F; +FC4D 0061; +FCD5 0062; +FC8E 003F; +FB9E 0041; +06BC 003F; +0647 003F; +FCD7 003F; +FC53 003F; +FBAC 0062; +06C2 0041; +06C0 0061; +FEED 0062; +FBE0 0062; +FBD7 0062; +FBE2 0021; +FBDE 0062; +FC90 0061; +FEF4 0041; +FDAF 0041; +FC91 0041; +FD9C 003F; +FC59 003F; +FBFE 0041; +FBE4 0021; +06D3 0334; +0712 0021; +0715 0021; +071A 0021; +074E 0021; +0725 0021; +072A 0021; +0781 0021; +0786 0021; +0789 0021; +07A0 0021; +0790 0021; +0793 0021; +07A6 0021; +07AC 0021; +07CB 0021; +07D1 0021; +07D6 0041; +07DA 0021; +07E0 0021; +07E6 0021; +2D32 0021; +2D38 0021; +2D3E 0021; +2D44 0021; +2D4A 0021; +2D50 0021; +2D56 0021; +2D5C 0021; +2D62 0021; +1201 0021; +1207 0021; +120D 0021; +1212 0021; +1218 0021; +121E 0021; +2D81 0021; +1225 0021; +122B 0021; +1230 0021; +1236 0021; +123B 0021; +1240 0021; +1246 0021; +124D 0021; +1255 0021; +125D 0021; +1265 0021; +1387 0021; +126C 0021; +1272 0021; +2D86 0021; +127D 0021; +1282 0021; +1288 0021; +1291 0021; +1297 0021; +129C 0021; +12A1 0021; +12A7 0021; +12AC 0021; +12B3 0021; +12BB 0021; +12C3 0021; +12CB 0021; +12D1 0021; +12D8 0021; +12DE 0021; +12E3 0021; +12E9 0021; +12EF 0021; +12F5 0021; +12FA 0021; +2D8D 0021; +1305 0021; +130A 0021; +1310 0021; +1319 0021; +131F 0021; +1321 0021; +1327 0021; +132C 0021; +1331 0021; +1337 0021; +133C 0021; +1342 0021; +1348 0021; +134E 0021; +1350 0021; +1356 0021; +2D92 0021; +2DA2 0021; +2DA9 0021; +2DB0 0021; +2DB6 0021; +2DBD 0021; +2DC4 0021; +2DCB 0021; +2DD2 0021; +2DD9 0021; +0950 0021; +0909 0021; +090D 0021; +0913 0021; +0916 0061; +0919 003F; +097C 0041; +0921 0041; +0924 0061; +0929 0062; +092D 003F; +0930 0041; +0936 0061; +093E 0061; +0944 0061; +0948 0061; +0985 0021; +098B 0021; +0993 0021; +0999 0021; +099F 0021; +09A2 0061; +09A6 0062; +09AD 0062; +09B2 003F; +09BD 003F; +09C3 003F; +09C8 0021; +09CD 0041; +0A13 0041; +0A07 0041; +0A15 0021; +0A5A 0062; +0A5B 0061; +0A22 003F; +0A28 003F; +0A2D 0041; +0A35 0021; +0A42 0021; +0A4D 0041; +0A89 0041; +0A8D 0041; +0A95 0041; +0A9B 0041; +0AA1 0041; +0AA7 0041; +0AAE 0041; +0AB6 0041; +0ABF 0041; +0AE2 0041; +0ACB 0041; +0B08 003F; +0B61 003F; +0B16 003F; +0B1C 003F; +0B5C 003F; +0B25 0021; +0B2C 0021; +0B32 0021; +0B38 0021; +0B41 0021; +0B48 0021; +0B4D 003F; +0B86 0062; +0B8F 0062; +0B95 003F; +0BA3 003F; +0BAF 003F; +0BB5 003F; +0BBF 003F; +0BC7 0021; +0BCB 0041; +0C06 0021; +0C60 0021; +0C12 0021; +0C18 0021; +0C1E 0021; +0C24 0021; +0C2B 0021; +0C31 0021; +0C38 0021; +0C42 0021; +0C46 0334 0C56; +0C4D 0061; +0C87 0041; +0C8C 0041; +0C93 0041; +0C99 0041; +0C9F 0041; +0CA5 0041; +0CAC 0041; +0CB2 0041; +0CB3 0041; +0CC0 0061; +0CE3 0021; +0CC6 0CD5 0062; +0CCB 0021; +0CD6 0021; +0D0A 0021; +0D0F 0021; +0D16 0021; +0D1C 0021; +0D22 0021; +0D28 0021; +0D2F 0021; +0D35 0021; +0D3F 0021; +0D46 0001 0D3E 0061; +0D4B 0021; +0D4D 0062; +0D8A 0062; +0D90 0062; +0D96 0062; +0D9F 0062; +0DA5 0062; +0DAB 0062; +0DB1 0062; +0DB8 0062; +0DC1 0062; +0DCA 0061; +0DD4 0061; +0DD9 0DCA 003F; +0DD9 0DCF 0DCA 0021; +0DDE 0041; +A802 0061; +A808 0021; +A80F 0021; +A815 0021; +A81B 0021; +A821 0021; +A827 0021; +10A06 0021; +10A15 0021; +10A1C 0021; +10A22 0021; +10A28 0021; +10A2E 0021; +10A3F 0021; +0E43 0E01 0041; +0E43 0E02 0041; +0E43 0E03 0041; +0E43 0E04 0041; +0E43 0E05 0041; +0E43 0E06 0041; +0E43 0E07 0041; +0E43 0E08 0041; +0E43 0E09 0041; +0E43 0E0A 0041; +0E43 0E0B 0041; +0E43 0E0C 0041; +0E43 0E0D 0041; +0E43 0E0E 0041; +0E43 0E0F 0041; +0E43 0E10 0041; +0E43 0E11 0041; +0E43 0E12 0041; +0E43 0E13 0041; +0E43 0E14 0041; +0E43 0E15 0041; +0E43 0E16 0041; +0E43 0E17 0041; +0E43 0E18 0041; +0E43 0E19 0041; +0E43 0E1A 0041; +0E43 0E1B 0041; +0E43 0E1C 0041; +0E43 0E1D 0041; +0E43 0E1E 0041; +0E43 0E1F 0041; +0E43 0E20 0041; +0E43 0E21 0041; +0E43 0E22 0041; +0E43 0E23 0041; +0E43 0E24 0041; +0E43 0E25 0041; +0E43 0E26 0041; +0E43 0E27 0041; +0E43 0E28 0041; +0E43 0E29 0041; +0E43 0E2A 0041; +0E43 0E2B 0041; +0E43 0E2C 0041; +0E43 0E2D 0041; +0E43 0E2E 0041; +0E33 0021; +0E38 0021; +0E40 0591 0E02 0061; +0E40 0591 0E0C 0061; +0E40 0591 0E16 0061; +0E40 0591 0E20 0061; +0E40 0591 0E2A 0061; +0E41 1D165 0E04 0061; +0E41 1D165 0E0E 0061; +0E41 1D165 0E18 0061; +0E41 1D165 0E22 0061; +0E41 1D165 0E2C 0061; +0E42 0001 0E07 0061; +0E42 0001 0E11 0061; +0E42 0001 0E1B 0061; +0E42 0001 0E25 0061; +0E43 0021; +0E43 0591 0E09 0061; +0E43 0591 0E13 0061; +0E43 0591 0E1D 0061; +0E43 0591 0E27 0061; +0E44 1D165 0E01 0061; +0E44 1D165 0E0B 0061; +0E44 1D165 0E15 0061; +0E44 1D165 0E1F 0061; +0E44 1D165 0E29 0061; +0EC0 0E81 0062; +0EC0 0E82 0062; +0EC0 0E84 0062; +0EC0 0E87 0062; +0EC0 0E88 0062; +0EC0 0E8A 0062; +0EC0 0E8D 0062; +0EC0 0E94 0062; +0EC0 0E95 0062; +0EC0 0E96 0062; +0EC0 0E97 0062; +0EC0 0E99 0062; +0EC0 0E9A 0062; +0EC0 0E9B 0062; +0EC0 0E9C 0062; +0EC0 0E9D 0062; +0EC0 0E9E 0062; +0EC0 0E9F 0062; +0EC0 0EA1 0062; +0EC0 0EA2 0062; +0EC0 0EA3 0062; +0EC0 0EA5 0062; +0EC0 0EA7 0062; +0EC0 0EAA 0062; +0EDC 0062; +0EDD 0062; +0EC0 0EAB 0062; +0EC0 0EAD 0062; +0EC0 0EAE 0062; +0EB0 0062; +0EB5 003F; +0EBB 0061; +0EC0 0001 0E88 0061; +0EC0 0001 0E9C 0061; +0EC0 0001 0EAB 0061; +0EC1 0591 0E87 0061; +0EC1 0591 0E9B 0061; +0EC1 0591 0EAA 0061; +0EC2 1D165 0E84 0061; +0EC2 1D165 0E9A 0061; +0EC2 1D165 0EA7 0061; +0EC3 0001 0E84 0061; +0EC3 0001 0E9A 0061; +0EC3 0001 0EA7 0061; +0EC4 0591 0E82 0061; +0EC4 0591 0E99 0061; +0EC4 0591 0EA5 0061; +0F69 0061; +0F43 0061; +0F95 0061; +0F99 0061; +0F4D 0061; +0F9F 0061; +0FA2 0061; +0FA5 0061; +0FA8 0061; +0F5C 0061; +0F5E 0061; +0F61 0061; +0FBC 0041; +0FB3 1D165 0F71 0061; +0F66 0041; +0FB8 0041; +0F71 0001 0F80 0061; +0F80 0041; +0334 0F75; +0FB2 0F71 0F80 003F; +0F78 0062; +0F7B 0021; +A840 0061; +A846 0061; +A848 0061; +A84E 0061; +A867 0061; +A86D 0061; +A86E 0061; +A862 0061; +A860 0061; +1902 0061; +1908 0061; +190E 0061; +1914 0061; +191A 0061; +1923 0061; +1929 0061; +1933 0061; +1700 0061; +1706 0061; +170C 0061; +1713 0061; +1724 0021; +172A 0021; +1730 0021; +1740 0041; +1746 0041; +174C 0041; +1752 0041; +1764 0041; +176A 0041; +1772 0041; +1A04 0041; +1A0A 0041; +1A10 0041; +1A16 0041; +1A1B 0062; +1005 0062; +100B 0062; +1011 0062; +1017 0062; +101D 0062; +1021 0062; +1027 003F; +1055 003F; +1031 003F; +1039 003F; +1784 0062; +178A 0062; +1790 0062; +1796 0062; +179C 0062; +17A2 0062; +17A7 0062; +17AD 0062; +17B3 0062; +17B9 0062; +17BF 0062; +17C5 0062; +1954 0061; +195A 0061; +1960 0061; +1966 0061; +196C 0061; +1974 0061; +1985 0061; +198B 0061; +1991 0061; +1997 0061; +19DE 0061; +19A1 0061; +19A7 0061; +19B3 0061; +19B9 0061; +19BF 0061; +19C5 0061; +1B05 1D165 1B35 0061; +1B09 003F; +1B0C 0061; +1B10 0061; +1B45 0062; +1B18 0062; +1B1E 0062; +1B23 0062; +1B28 0062; +1B2E 0062; +1B4A 0062; +1B38 0062; +1B3C 0591 1B35 0061; +1B3E 1B35 003F; +1B42 1B35 0061; +1883 0041; +1887 0041; +185E 0041; +1824 0041; +1849 0041; +1862 0041; +184C 0041; +1864 0041; +1830 0041; +18A4 0041; +1851 0041; +188B 0041; +1855 0041; +1839 0041; +1874 0041; +183D 0041; +186D 0041; +185B 0041; +189F 0041; +18A1 0041; +1895 0041; +18A9 0334; +13A5 003F; +13AB 003F; +13B1 003F; +13B7 003F; +13BD 003F; +13C3 003F; +13C9 003F; +13CF 003F; +13D5 003F; +13DB 003F; +13E1 003F; +13E7 003F; +13ED 003F; +13F3 003F; +1405 003F; +140B 003F; +1411 003F; +1417 003F; +141D 003F; +1423 003F; +1429 003F; +142F 003F; +1435 003F; +143B 003F; +1441 003F; +1447 003F; +144D 003F; +1453 003F; +1459 003F; +145F 003F; +1465 003F; +146B 003F; +1471 003F; +1477 003F; +147D 003F; +1483 003F; +1489 003F; +148F 003F; +1495 003F; +149B 003F; +14A1 003F; +14A7 003F; +14AD 003F; +14B3 003F; +14B9 003F; +14BF 003F; +14C5 003F; +14CB 003F; +14D1 003F; +14D7 003F; +14DD 003F; +14E3 003F; +14E9 003F; +14EF 003F; +14F5 003F; +14FB 003F; +1501 003F; +1507 003F; +150D 003F; +1513 003F; +1519 003F; +151F 003F; +1525 003F; +152B 003F; +1531 003F; +1537 003F; +153D 003F; +1543 003F; +1549 003F; +154F 003F; +1555 003F; +155B 003F; +1561 003F; +1567 003F; +156D 003F; +1573 003F; +1579 003F; +157F 003F; +1585 003F; +158B 003F; +1590 003F; +1671 003F; +1596 003F; +159C 003F; +15A2 003F; +15A7 003F; +15AD 003F; +15B3 003F; +15B9 003F; +15BF 003F; +15C5 003F; +15CB 003F; +15D1 003F; +15D7 003F; +15DD 003F; +15E3 003F; +15E9 003F; +15EF 003F; +15F5 003F; +15FB 003F; +1601 003F; +1607 003F; +160D 003F; +1613 003F; +1619 003F; +161F 003F; +1625 003F; +162B 003F; +1631 003F; +1637 003F; +163D 003F; +1643 003F; +1649 003F; +164F 003F; +1655 003F; +165B 003F; +1661 003F; +1667 003F; +1681 003F; +1687 003F; +168D 003F; +1693 003F; +1699 003F; +16A5 0041; +16A8 0041; +16B2 003F; +16B9 003F; +16BE 003F; +16C4 0061; +16D5 0061; +16CD 0041; +16D2 0061; +16EF 003F; +16DF 003F; +16B8 003F; +16E6 0061; +3200 0062; +AC00 0591 1161 0061; +AC04 0061; +FFA2 0062; +320F 0061; +FFA7 0062; +3139 0021; +3271 0062; +3212 0061; +FFB2 0062; +3145 0021; +3274 0062; +3207 0041; +321E 0062; +FFB8 0062; +3149 0041; +FFBA 0062; +320A 0041; +FFBC 003F; +314D 0021; +327A 0062; +327B 0021; +D788 1175 0021; +D7A2 0061; +3166 0041; +111A 0041; +3171 0041; +3144 0021; +3175 0041; +1128 0061; +3179 0021; +317C 0021; +1133 0061; +1138 0061; +113E 0061; +1143 0061; +1148 0061; +114D 0061; +1153 0061; +3185 0021; +1160 0041; +1162 0041; +1164 0041; +1166 0041; +1168 0041; +116A 0041; +116C 0041; +116E 0041; +1170 0041; +1172 0041; +1174 0041; +1177 0061; +117D 0061; +1183 0061; +1187 0061; +118C 0061; +318A 0041; +1195 0061; +119B 0061; +11A0 0061; +3133 0021; +11AC 0062; +313A 0021; +313C 0021; +313E 0021; +11B6 0061; +11BC 0061; +11C2 0061; +3167 0041; +3169 0021; +11D0 0061; +11D5 0061; +316D 0041; +11DE 0061; +11E3 0061; +11E9 0061; +11EF 0061; +11F3 0061; +11F9 0061; +30A2 0061; +3044 0021; +30A4 0062; +30A6 0334 3099; +FF73 0062; +3048 0061; +FF6B 0021; +FF6B 0062; +30AC 003F; +330C 0021; +304E 0334; +3310 0062; +3316 0062; +30AF 0061; +331A 0041; +331C 003F; +30B3 0021; +3054 0041; +30B5 0334 3099; +3320 0021; +30B7 0041; +30B9 0021; +3059 0062; +FF7E 0041; +32DE 003F; +305F 003F; +3060 0061; +30C1 0061; +3064 0334 3099; +30C3 0062; +FF83 0041; +3069 0334; +3326 003F; +3328 003F; +FF87 0021; +30CD 0041; +3329 003F; +3071 0021; +3070 0041; +32EA 003F; +32EA 0041; +3330 0061; +3076 0021; +32EB 0062; +30D8 003F; +333C 0021; +307A 0062; +31F9 003F; +3341 0041; +307C 0062; +32EE 0021; +3345 003F; +307F 0062; +3080 0041; +30E1 0041; +30E2 0041; +334F 0061; +FF6D 0021; +3350 003F; +32F5 0061; +FF97 0061; +31FC 0062; +308B 0041; +308C 0041; +FF9B 0021; +32FB 003F; +3357 0041; +32FD 003F; +30FA 003F; +FF9D 0062; +3108 0062; +310C 0062; +31AD 0062; +3112 0062; +3117 0061; +311B 0061; +31A5 0062; +3121 0062; +31B0 0062; +31B3 0062; +A001 0062; +A007 0062; +A00D 0062; +A013 0062; +A019 0062; +A01F 0062; +A025 0062; +A02B 0062; +A031 0062; +A037 0062; +A03D 0062; +A043 0062; +A049 0062; +A04F 0062; +A055 0062; +A05B 0062; +A061 0062; +A067 0062; +A06D 0062; +A073 0062; +A079 0062; +A07F 0062; +A085 0062; +A08B 0062; +A091 0062; +A097 0062; +A09D 0062; +A0A3 0062; +A0A9 0062; +A0AF 0062; +A0B5 0062; +A0BB 0062; +A0C1 0062; +A0C7 0062; +A0CD 0062; +A0D3 0062; +A0D9 0062; +A0DF 0062; +A0E5 0062; +A0EB 0062; +A0F1 0062; +A0F7 0062; +A0FD 0062; +A103 0062; +A109 0062; +A10F 0062; +A115 0062; +A11B 0062; +A121 0062; +A127 0062; +A12D 0062; +A133 0062; +A139 0062; +A13F 0062; +A145 0062; +A14B 0062; +A151 0062; +A157 0062; +A15D 0062; +A163 0062; +A169 0062; +A16F 0062; +A175 0062; +A17B 0062; +A181 0062; +A187 0062; +A18D 0062; +A193 0062; +A199 0062; +A19F 0062; +A1A5 0062; +A1AB 0062; +A1B1 0062; +A1B7 0062; +A1BD 0062; +A1C3 0062; +A1C9 0062; +A1CF 0062; +A1D5 0062; +A1DB 0062; +A1E1 0062; +A1E7 0062; +A1ED 0062; +A1F3 0062; +A1F9 0062; +A1FF 0062; +A205 0062; +A20B 0062; +A211 0062; +A217 0062; +A21D 0062; +A223 0062; +A229 0062; +A22F 0062; +A235 0062; +A23B 0062; +A241 0062; +A247 0062; +A24D 0062; +A253 0062; +A259 0062; +A25F 0062; +A265 0062; +A26B 0062; +A271 0062; +A277 0062; +A27D 0062; +A283 0062; +A289 0062; +A28F 0062; +A295 0062; +A29B 0062; +A2A1 0062; +A2A7 0062; +A2AD 0062; +A2B3 0062; +A2B9 0062; +A2BF 0062; +A2C5 0062; +A2CB 0062; +A2D1 0062; +A2D7 0062; +A2DD 0062; +A2E3 0062; +A2E9 0062; +A2EF 0062; +A2F5 0062; +A2FB 0062; +A301 0062; +A307 0062; +A30D 0062; +A313 0062; +A319 0062; +A31F 0062; +A325 0062; +A32B 0062; +A331 0062; +A337 0062; +A33D 0062; +A343 0062; +A349 0062; +A34F 0062; +A355 0062; +A35B 0062; +A361 0062; +A367 0062; +A36D 0062; +A373 0062; +A379 0062; +A37F 0062; +A385 0062; +A38B 0062; +A391 0062; +A397 0062; +A39D 0062; +A3A3 0062; +A3A9 0062; +A3AF 0062; +A3B5 0062; +A3BB 0062; +A3C1 0062; +A3C7 0062; +A3CD 0062; +A3D3 0062; +A3D9 0062; +A3DF 0062; +A3E5 0062; +A3EB 0062; +A3F1 0062; +A3F7 0062; +A3FD 0062; +A403 0062; +A409 0062; +A40F 0062; +A415 0062; +A41B 0062; +A421 0062; +A427 0062; +A42D 0062; +A433 0062; +A439 0062; +A43F 0062; +A445 0062; +A44B 0062; +A451 0062; +A457 0062; +A45D 0062; +A463 0062; +A469 0062; +A46F 0062; +A475 0062; +A47B 0062; +A481 0062; +A487 0062; +10300 0062; +10306 0062; +1030C 0062; +10312 0062; +10318 0062; +1031E 0062; +10335 0062; +1033B 0062; +10341 0062; +10347 0062; +10429 0061; +1042C 0061; +1042F 0061; +10432 0061; +10435 0061; +10438 0061; +1043B 0061; +1043E 0061; +10441 0061; +10444 0061; +10447 0061; +1044A 0061; +1044D 0061; +10450 0062; +10456 0062; +1045C 0062; +10462 0062; +10468 0062; +1046E 0062; +10474 0062; +1047A 0062; +10480 0062; +10486 0062; +1048C 0062; +10492 0062; +10498 0062; +10000 0062; +10006 0062; +1000D 0062; +10013 0062; +10019 0062; +1001F 0062; +10025 0062; +1002C 0062; +10032 0062; +10038 0062; +10040 0062; +10046 0062; +1004C 0062; +10054 0062; +1005A 0062; +10082 0062; +10088 0062; +1008E 0062; +10094 0062; +1009A 0062; +100A0 0062; +100A6 0062; +100AC 0062; +100B2 0062; +100B8 0062; +100BE 0062; +100C4 0062; +100CA 0062; +100D0 0062; +100D6 0062; +100DC 0062; +100E2 0062; +100E8 0062; +100EE 0062; +100F4 0062; +100FA 0062; +10805 0062; +1080E 0062; +10814 0062; +1081A 0062; +10820 0062; +10826 0062; +1082C 0062; +10832 0062; +1083C 0062; +10384 0062; +1038A 0062; +10390 0062; +10396 0062; +1039C 0062; +103A4 0062; +103AA 0062; +103B0 0062; +103B6 0062; +103BC 0062; +103C2 0062; +103CC 0062; +12002 0062; +12008 0062; +1200E 0062; +12014 0062; +1201A 0062; +12020 0062; +12026 0062; +1202C 0062; +12032 0062; +12038 0062; +1203E 0062; +12044 0062; +1204A 0062; +12050 0062; +12056 0062; +1205C 0062; +12062 0062; +12068 0062; +1206E 0062; +12074 0062; +1207A 0062; +12080 0062; +12086 0062; +1208C 0062; +12092 0062; +12098 0062; +1209E 0062; +120A4 0062; +120AA 0062; +120B0 0062; +120B6 0062; +120BC 0062; +120C2 0062; +120C8 0062; +120CE 0062; +120D4 0062; +120DA 0062; +120E0 0062; +120E6 0062; +120EC 0062; +120F2 0062; +120F8 0062; +120FE 0062; +12104 0062; +1210A 0062; +12110 0062; +12116 0062; +1211C 0062; +12122 0062; +12128 0062; +1212E 0062; +12134 0062; +1213A 0062; +12140 0062; +12146 0062; +1214C 0062; +12152 0062; +12158 0062; +1215E 0062; +12164 0062; +1216A 0062; +12170 0062; +12176 0062; +1217C 0062; +12182 0062; +12188 0062; +1218E 0062; +12194 0062; +1219A 0062; +121A0 0062; +121A6 0062; +121AC 0062; +121B2 0062; +121B8 0062; +121BE 0062; +121C4 0062; +121CA 0062; +121D0 0062; +121D6 0062; +121DC 0062; +121E2 0062; +121E8 0062; +121EE 0062; +121F4 0062; +121FA 0062; +12200 0062; +12206 0062; +1220C 0062; +12212 0062; +12218 0062; +1221E 0062; +12224 0062; +1222A 0062; +12230 0062; +12236 0062; +1223C 0062; +12242 0062; +12248 0062; +1224E 0062; +12254 0062; +1225A 0062; +12260 0062; +12266 0062; +1226C 0062; +12272 0062; +12278 0062; +1227E 0062; +12284 0062; +1228A 0062; +12290 0062; +12296 0062; +1229C 0062; +122A2 0062; +122A8 0062; +122AE 0062; +122B4 0062; +122BA 0062; +122C0 0062; +122C6 0062; +122CC 0062; +122D2 0062; +122D8 0062; +122DE 0062; +122E4 0062; +122EA 0062; +122F0 0062; +122F6 0062; +122FC 0062; +12302 0062; +12308 0062; +1230E 0062; +12314 0062; +1231A 0062; +12320 0062; +12326 0062; +1232C 0062; +12332 0062; +12338 0062; +1233E 0062; +12344 0062; +1234A 0062; +12350 0062; +12356 0062; +1235C 0062; +12362 0062; +12368 0062; +1236E 0062; +4E01 0061; +4E04 0062; +3196 0062; +2F01 0062; +2E80 0062; +2E84 0021; +3288 0062; +3193 0061; +2F08 0061; +F9A8 0062; +FA73 0062; +F965 0062; +F9BB 0062; +FA74 0062; +2F814 0062; +3285 0021; +2E86 0062; +32A2 0062; +F92E 0062; +2E87 0062; +2F81E 0062; +2F820 0062; +2F12 0062; +2F825 0062; +2F827 0062; +2F82A 0062; +32A9 0062; +3039 0062; +32AF 0062; +329E 0062; +2F833 0062; +2F836 0062; +32A8 0062; +2F83D 0062; +2F840 0062; +2F844 0062; +FA36 0061; +FA7B 0062; +2F1E 0062; +2F84D 0062; +2F852 0062; +FA10 0061; +F94A 0062; +2F21 0062; +2F85E 0062; +F909 0062; +2F865 0062; +2F986 0062; +323B 0061; +2F86E 0062; +2F28 0062; +2E90 003F; +2F2B 0062; +2F2C 0021; +F9D5 0062; +2F9F4 0062; +32A7 0062; +2F886 0062; +2F33 0062; +F9A2 0062; +F982 0062; +2F38 0062; +2F874 0062; +F9D8 0062; +2E96 0062; +F9AC 0062; +F9B9 0062; +FA87 0061; +FA3F 0041; +2F8AF 0062; +F990 0062; +2F3E 0062; +F95B 0062; +2F8B7 0062; +FA8D 0062; +2F8C3 0062; +2F40 0062; +2F8C9 0062; +2F45 0062; +3290 0021; +337C 0062; +2F8CF 0062; +2F8CC 0062; +3232 0061; +2F8D9 0062; +2F8DC 0062; +F9C9 0062; +337F 0062; +F9E2 0062; +F914 0041; +F91D 0062; +2F8F3 0062; +F9A5 0062; +2F4F 0062; +2F53 0062; +2F8FA 0062; +F9E3 0062; +2F900 0062; +FA45 0061; +F9D6 0062; +F9EC 0062; +F94E 0062; +F922 0062; +2F917 0062; +2F919 0062; +2F91C 0062; +F9EE 0062; +2EA4 0041; +2F59 0062; +F946 0062; +2EA8 0062; +F9A7 0062; +2F929 0061; +F9CC 0062; +2F930 0062; +2F61 0062; +2F65 0062; +F976 0062; +F9E5 0062; +2F68 0062; +FAA7 0062; +FAA8 0061; +FAAA 0062; +2F6E 0062; +FA4B 0062; +2F70 0061; +3293 0062; +3297 0021; +F93C 0062; +2F71 0062; +FA54 0061; +FAAC 0062; +F9F8 0062; +F944 0062; +FA03 0062; +2F96A 0062; +F93D 0062; +2F96F 0062; +2F78 0062; +2EB3 0041; +2EB7 0021; +FA1E 0061; +FAB2 003F; +F9B0 0062; +2EBB 0062; +2F982 0062; +3242 0061; +2EBD 0062; +2F88 0062; +2EC0 003F; +2F991 0062; +2F996 0062; +2F99A 0062; +2F9A3 0062; +FA5F 0061; +2F9AA 0062; +F91F 0062; +2F9B4 0062; +2F9BA 0062; +2F9BE 0062; +FA08 0061; +F9A0 0062; +2F9C9 0062; +2EC3 0062; +2EC5 0062; +F96F 0061; +FABE 0061; +FA62 0061; +FAC0 0061; +2F9D2 0061; +2F9D4 0062; +FA64 0062; +2F9B 0062; +F937 0062; +F998 0062; +2ECB 0062; +2ECD 0021; +FA67 0062; +2ECF 0062; +2F9E6 0062; +F9E9 0061; +328E 0062; +2F9E9 0062; +2ED1 0061; +F986 0062; +F9C6 0062; +F9DC 0062; +F9EA 0062; +F949 0062; +FA1C 0061; +FAC9 0062; +FACA 0062; +F9B4 0062; +2FB5 0062; +2EDF 0061; +2FA04 0062; +2FBA 0062; +2FBB 0061; +2FBE 0062; +F939 0062; +2FA0F 0062; +2EE7 0062; +2EE8 0062; +F989 0062; +2EEA 0062; +2FCF 0062; +2EEC 0062; +2EEF 0062; +2FD4 0041; +9FA1 0062; +FA0F 0062; +FA23 0062; +3401 0062; +3407 0062; +340D 0062; +3413 0062; +3419 0062; +341F 0062; +3425 0062; +342B 0062; +3431 0062; +3437 0062; +343D 0062; +3443 0062; +3449 0062; +344F 0062; +3455 0062; +345B 0062; +3461 0062; +3467 0062; +346D 0062; +3473 0062; +3479 0062; +347F 0062; +3485 0062; +348B 0062; +3491 0062; +3497 0062; +349D 0062; +34A2 0062; +34A8 0062; +34AE 0062; +34B4 0062; +2F813 0062; +34BE 0062; +34C4 0062; +34CA 0062; +34D0 0062; +34D6 0062; +34DC 0062; +34E1 0062; +34E7 0062; +34ED 0062; +34F3 0062; +34F9 0062; +34FF 0062; +3505 0062; +350B 0062; +3511 0062; +3516 0062; +351C 0062; +3522 0062; +3528 0062; +352E 0062; +3534 0062; +353A 0062; +3540 0062; +3546 0062; +354C 0062; +3552 0062; +3558 0062; +355E 0062; +3564 0062; +356A 0062; +3570 0062; +3576 0062; +357C 0062; +3582 0062; +3588 0062; +358E 0062; +3594 0062; +359A 0062; +35A0 0062; +35A6 0062; +35AC 0062; +35B2 0062; +35B8 0062; +35BE 0062; +35C4 0062; +35CA 0062; +35D0 0062; +35D6 0062; +35DC 0062; +35E2 0062; +35E8 0062; +35EE 0062; +35F4 0062; +35FA 0062; +3600 0062; +3606 0062; +360C 0062; +3612 0062; +3618 0062; +361E 0062; +3624 0062; +362A 0062; +3630 0062; +3636 0062; +363C 0062; +3642 0062; +3648 0062; +364E 0062; +3654 0062; +365A 0062; +3660 0062; +3666 0062; +366C 0062; +3672 0062; +3678 0062; +367E 0062; +3684 0062; +368A 0062; +3690 0062; +3696 0062; +369C 0062; +36A2 0062; +36A8 0062; +36AE 0062; +36B4 0062; +36BA 0062; +36C0 0062; +36C6 0062; +36CC 0062; +36D2 0062; +36D8 0062; +36DE 0062; +36E4 0062; +36EA 0062; +36EF 0062; +36F5 0062; +36FB 0062; +3700 0062; +3706 0062; +370C 0062; +3712 0062; +3718 0062; +371E 0062; +3724 0062; +372A 0062; +3730 0062; +3736 0062; +373C 0062; +3742 0062; +3748 0062; +374E 0062; +3754 0062; +375A 0062; +3760 0062; +3766 0062; +376C 0062; +3772 0062; +3778 0062; +377E 0062; +3783 0062; +3789 0062; +378F 0062; +3795 0062; +379B 0062; +37A1 0062; +37A7 0062; +37AD 0062; +37B3 0062; +37B9 0062; +37BF 0062; +37C5 0062; +37CB 0062; +37D1 0062; +37D7 0062; +37DD 0062; +37E3 0062; +37E9 0062; +37EF 0062; +37F5 0062; +37FB 0062; +3801 0062; +3807 0062; +380D 0062; +3813 0062; +3819 0062; +381F 0062; +3825 0062; +382B 0062; +3830 0062; +3836 0062; +383C 0062; +3842 0062; +3848 0062; +384E 0062; +3854 0062; +385A 0062; +3860 0062; +3865 0062; +386B 0062; +3871 0062; +3877 0062; +2F88A 0062; +3882 0062; +3888 0062; +388E 0062; +3894 0062; +389A 0062; +38A0 0062; +38A6 0062; +38AC 0062; +38B2 0062; +38B8 0062; +38BE 0062; +38C4 0062; +38C9 0062; +38CF 0062; +38D5 0062; +38DB 0062; +38E1 0062; +38E6 0062; +38EC 0062; +38F2 0062; +38F8 0062; +38FE 0062; +3904 0062; +390A 0062; +3910 0062; +3916 0062; +391C 0061; +3921 0062; +3927 0062; +392D 0062; +3933 0062; +3939 0062; +393E 0062; +3944 0062; +394A 0062; +3950 0062; +3956 0062; +395C 0062; +3962 0062; +3968 0062; +396E 0062; +3974 0062; +397A 0062; +3980 0062; +3986 0062; +398C 0062; +3992 0062; +3998 0062; +399E 0062; +39A4 0062; +39AA 0062; +39B0 0062; +39B6 0062; +39BC 0062; +39C2 0062; +39C8 0062; +39CE 0062; +39D4 0062; +39DA 0062; +39E0 0062; +39E6 0062; +39EC 0062; +39F2 0062; +39F8 0062; +39FE 0062; +3A04 0062; +3A0A 0062; +3A10 0062; +3A16 0062; +3A1C 0062; +3A22 0062; +3A28 0062; +3A2E 0061; +3A33 0062; +3A39 0062; +3A3F 0062; +3A45 0062; +3A4B 0062; +3A51 0062; +3A57 0062; +3A5D 0062; +3A63 0062; +3A69 0062; +3A6E 0062; +3A74 0062; +3A7A 0062; +3A80 0062; +3A86 0062; +3A8C 0062; +3A92 0062; +3A98 0062; +3A9E 0062; +3AA4 0062; +3AAA 0062; +3AB0 0062; +3AB6 0062; +3ABC 0062; +3AC2 0062; +3AC8 0062; +3ACE 0062; +3AD4 0062; +3ADA 0062; +3AE0 0062; +3AE5 0062; +3AEB 0062; +3AF1 0062; +3AF7 0062; +3AFD 0062; +3B03 0062; +2F8D0 0062; +3B0E 0062; +3B14 0062; +2F8CE 0062; +3B1F 0062; +3B25 0062; +3B2B 0062; +3B31 0062; +3B37 0062; +3B3D 0062; +3B43 0062; +3B49 0061; +3B4E 0062; +3B54 0062; +3B5A 0062; +3B60 0062; +3B66 0062; +3B6C 0062; +3B72 0062; +3B78 0062; +3B7E 0062; +3B84 0062; +3B8A 0062; +3B90 0062; +3B96 0062; +3B9C 0062; +3BA0 0062; +3BA6 0062; +3BAC 0062; +3BB2 0062; +3BB8 0062; +3BBE 0062; +3BC4 0062; +3BCA 0062; +3BD0 0062; +3BD6 0062; +3BDC 0062; +3BE2 0062; +3BE8 0062; +3BEE 0062; +3BF4 0062; +3BFA 0062; +3C00 0062; +3C06 0062; +3C0C 0062; +3C12 0062; +3C18 0061; +3C1D 0062; +3C23 0062; +3C29 0062; +3C2F 0062; +3C35 0062; +3C3B 0062; +3C41 0062; +3C47 0062; +3C4D 0062; +3C52 0062; +3C58 0062; +3C5E 0062; +3C64 0062; +3C6A 0062; +3C70 0062; +3C76 0062; +3C7C 0062; +3C82 0062; +3C88 0062; +3C8E 0062; +3C94 0062; +3C9A 0062; +3CA0 0062; +3CA6 0062; +3CAC 0062; +3CB2 0062; +3CB8 0062; +3CBE 0062; +3CC4 0062; +3CCA 0062; +3CD0 0062; +3CD6 0062; +3CDC 0062; +3CE2 0062; +3CE8 0062; +3CEE 0062; +3CF4 0062; +3CFA 0062; +3D00 0062; +3D06 0062; +3D0C 0062; +3D12 0062; +3D18 0062; +3D1E 0062; +3D24 0062; +3D2A 0062; +3D30 0062; +3D35 0062; +3D3B 0062; +3D41 0062; +3D47 0062; +3D4D 0062; +3D53 0062; +3D59 0062; +3D5F 0062; +3D65 0062; +3D6B 0062; +3D71 0062; +3D77 0062; +3D7D 0062; +3D83 0062; +3D89 0062; +3D8F 0062; +3D95 0062; +3D9A 0062; +3DA0 0062; +3DA6 0062; +3DAC 0062; +3DB2 0062; +3DB8 0062; +3DBE 0062; +3DC4 0062; +3DCA 0062; +3DD0 0062; +3DD6 0062; +3DDC 0062; +3DE2 0062; +3DE8 0062; +3DEE 0062; +3DF4 0062; +3DFA 0062; +3E00 0062; +3E06 0062; +3E0C 0062; +3E12 0062; +3E18 0062; +3E1E 0062; +3E24 0062; +3E2A 0062; +3E30 0062; +3E36 0062; +3E3C 0062; +3E42 0062; +3E48 0062; +3E4E 0062; +3E54 0062; +3E5A 0062; +3E60 0062; +3E66 0062; +3E6C 0062; +3E72 0062; +3E78 0062; +3E7E 0062; +3E84 0062; +3E8A 0062; +3E90 0062; +3E96 0062; +3E9C 0062; +3EA2 0062; +3EA8 0062; +3EAD 0062; +3EB3 0062; +3EB8 0041; +3EBD 0062; +3EC3 0062; +3EC9 0062; +3ECF 0062; +3ED5 0062; +3EDB 0062; +3EE1 0062; +3EE7 0062; +3EED 0062; +3EF3 0062; +3EF9 0062; +3EFF 0062; +3F05 0062; +3F0B 0062; +3F11 0062; +3F17 0062; +3F1C 0062; +3F22 0062; +3F28 0062; +3F2E 0062; +3F34 0062; +3F3A 0062; +3F40 0062; +3F46 0062; +3F4C 0062; +3F52 0062; +3F58 0062; +3F5E 0062; +3F64 0062; +3F6A 0062; +3F70 0062; +3F76 0062; +3F7C 0062; +3F82 0062; +3F88 0062; +3F8E 0062; +3F94 0062; +3F9A 0062; +3FA0 0062; +3FA6 0062; +3FAC 0062; +3FB2 0062; +3FB8 0062; +3FBE 0062; +3FC4 0062; +3FCA 0062; +3FD0 0062; +3FD6 0062; +3FDC 0062; +3FE2 0062; +3FE8 0062; +3FEE 0062; +3FF4 0062; +3FFA 0062; +3FFF 0062; +4005 0062; +400A 0062; +4010 0062; +4016 0062; +401B 0062; +4021 0062; +4027 0062; +402D 0062; +4033 0062; +FAD4 003F; +403D 0062; +4043 0062; +4048 0062; +404E 0062; +4054 0062; +405A 0062; +4060 0062; +4066 0062; +406C 0062; +4072 0062; +4078 0062; +407E 0062; +4084 0062; +408A 0062; +4090 0062; +4096 0061; +409B 0062; +40A1 0062; +40A7 0062; +40AD 0062; +40B3 0062; +40B9 0062; +40BF 0062; +40C5 0062; +40CB 0062; +40D1 0062; +40D7 0062; +40DD 0062; +40E3 0061; +40E8 0062; +40EE 0062; +40F4 0062; +40FA 0062; +4100 0062; +4106 0062; +410C 0062; +4112 0062; +4118 0062; +411E 0062; +4124 0062; +412A 0062; +2F958 0062; +4135 0062; +413B 0062; +4141 0062; +4147 0062; +414D 0062; +4153 0062; +4159 0062; +415F 0062; +4165 0062; +416B 0062; +4171 0062; +4177 0062; +417D 0062; +4183 0062; +4189 0062; +418F 0062; +4195 0062; +419B 0062; +41A1 0062; +41A7 0062; +41AD 0062; +41B3 0062; +41B9 0062; +41BF 0062; +41C5 0062; +41CB 0062; +41D1 0062; +41D7 0062; +41DD 0062; +41E3 0062; +41E9 0062; +41EF 0062; +41F5 0062; +41FB 0062; +4201 0062; +4206 0062; +420C 0062; +4212 0062; +4218 0062; +421E 0062; +4224 0062; +4229 0062; +422F 0062; +4235 0062; +423B 0062; +4241 0062; +4247 0062; +424D 0062; +4253 0062; +4259 0062; +425F 0062; +4265 0062; +426B 0062; +4271 0062; +4277 0062; +427D 0062; +4283 0062; +4289 0062; +428F 0062; +4295 0062; +429B 0062; +2F967 0062; +42A6 0062; +42AC 0062; +42B2 0062; +42B8 0062; +42BE 0062; +42C4 0062; +42CA 0062; +42D0 0062; +42D6 0062; +42DC 0062; +42E2 0062; +42E8 0062; +42EE 0062; +42F4 0062; +42FA 0062; +4300 0062; +4305 0062; +430B 0062; +4311 0062; +4317 0062; +431D 0062; +4323 0062; +4329 0062; +432F 0062; +2F971 0062; +433A 0062; +4340 0062; +4346 0062; +434C 0062; +4352 0062; +4358 0062; +435D 0062; +4363 0062; +4369 0062; +436F 0062; +4375 0062; +437B 0062; +4381 0062; +4387 0062; +438D 0062; +4393 0062; +4399 0062; +439F 0062; +43A5 0062; +43AB 0062; +43B1 0062; +43B7 0062; +43BD 0062; +43C3 0062; +43C9 0062; +43CF 0062; +43D5 0061; +2F8D7 0062; +43DF 0062; +43E5 0062; +43EB 0062; +43F1 0062; +43F7 0062; +43FD 0062; +4403 0062; +4409 0062; +440E 0062; +4414 0062; +441A 0062; +4420 0062; +4426 0062; +442C 0062; +4432 0062; +4438 0062; +443E 0062; +4444 0062; +444A 0062; +4450 0062; +4456 0062; +445C 0062; +4462 0062; +4468 0062; +446D 0062; +4473 0062; +4479 0062; +447F 0062; +4485 0062; +448B 0062; +4491 0062; +4497 0062; +449D 0062; +44A3 0062; +44A9 0062; +44AF 0062; +44B5 0062; +44BB 0062; +44C1 0062; +44C7 0062; +44CD 0062; +44D3 0062; +44D9 0062; +44DF 0062; +44E5 0062; +44EB 0062; +44F1 0062; +44F7 0062; +44FD 0062; +4503 0062; +4509 0062; +450F 0062; +4515 0062; +451B 0062; +4521 0062; +4527 0062; +452C 0062; +4532 0062; +4538 0062; +453E 0062; +4544 0062; +454A 0062; +4550 0062; +4556 0062; +455C 0062; +4561 0061; +4566 0062; +2F9B2 0062; +4571 0062; +4577 0062; +457D 0062; +4583 0062; +4589 0062; +458F 0062; +4595 0062; +459B 0062; +45A1 0062; +45A7 0062; +45AD 0062; +45B3 0062; +45B9 0062; +45BF 0062; +45C5 0062; +45CB 0062; +45D1 0062; +45D7 0061; +45DC 0062; +45E2 0062; +45E8 0062; +45EE 0062; +45F4 0062; +2F9C2 0062; +45FF 0062; +4605 0062; +460B 0062; +4611 0062; +4617 0062; +461D 0062; +4623 0062; +4629 0062; +462F 0062; +4635 0061; +463A 0062; +4640 0062; +4646 0062; +464C 0062; +4652 0062; +4658 0062; +465E 0062; +4664 0062; +466A 0062; +4670 0062; +4676 0062; +467C 0062; +4682 0062; +4688 0062; +468E 0062; +4694 0062; +469A 0062; +46A0 0062; +46A6 0062; +46AC 0062; +46B2 0062; +46B8 0062; +46BE 0061; +46C3 0062; +46C8 0062; +46CE 0062; +46D4 0062; +46DA 0062; +46E0 0062; +46E6 0062; +46EC 0062; +46F2 0062; +46F8 0062; +46FE 0062; +4704 0062; +470A 0062; +4710 0062; +4716 0062; +471C 0062; +4722 0062; +4728 0062; +472E 0062; +4734 0062; +473A 0062; +4740 0062; +4746 0062; +474C 0062; +4752 0062; +4758 0062; +475E 0062; +4764 0062; +476A 0062; +4770 0062; +4776 0062; +477C 0062; +4782 0062; +4788 0062; +478E 0062; +4794 0062; +479A 0062; +47A0 0062; +47A6 0062; +47AC 0062; +47B2 0062; +47B8 0062; +47BE 0062; +47C4 0062; +47CA 0062; +47D0 0062; +47D6 0062; +47DC 0062; +47E2 0062; +47E8 0062; +47EE 0062; +47F4 0062; +47FA 0062; +4800 0062; +4806 0062; +480C 0062; +4812 0062; +4818 0062; +481E 0062; +4824 0062; +482A 0062; +4830 0062; +4836 0062; +483C 0062; +4842 0062; +4848 0062; +484E 0062; +4854 0062; +485A 0062; +4860 0062; +4866 0062; +486C 0062; +4872 0062; +4878 0062; +487E 0062; +4884 0062; +488A 0062; +4890 0062; +4896 0062; +489C 0062; +48A2 0062; +48A8 0062; +48AE 0062; +48B4 0062; +48BA 0062; +48C0 0062; +48C6 0062; +48CC 0062; +48D2 0062; +48D8 0062; +48DE 0062; +48E4 0062; +48EA 0062; +48F0 0062; +48F6 0062; +48FC 0062; +4902 0062; +4908 0062; +490E 0062; +4914 0062; +491A 0062; +4920 0062; +4926 0062; +492C 0062; +4932 0062; +4938 0062; +493E 0062; +4944 0062; +494A 0062; +4950 0062; +4956 0062; +495C 0062; +4962 0062; +4968 0062; +496E 0062; +4974 0062; +497A 0062; +4980 0062; +4986 0062; +498C 0062; +4992 0062; +4997 0062; +499D 0062; +49A3 0062; +49A9 0062; +49AF 0062; +49B5 0062; +49BB 0062; +49C1 0062; +49C7 0062; +49CD 0062; +49D3 0062; +49D9 0062; +49DF 0062; +49E5 0062; +49EA 0062; +49F0 0062; +49F6 0062; +49FC 0062; +4A02 0062; +4A08 0062; +4A0E 0062; +4A14 0062; +4A1A 0062; +4A20 0062; +4A26 0062; +4A2C 0062; +4A32 0062; +4A38 0062; +4A3E 0062; +4A44 0062; +4A4A 0062; +4A50 0062; +4A56 0062; +4A5C 0062; +4A62 0062; +4A68 0062; +4A6E 0061; +4A73 0062; +4A78 0062; +4A7E 0062; +4A84 0062; +4A8A 0062; +4A90 0062; +4A96 0062; +4A9C 0062; +4AA2 0062; +4AA8 0062; +4AAE 0062; +4AB3 0062; +4AB9 0062; +4ABF 0062; +4AC5 0062; +4ACB 0062; +4AD1 0062; +4AD7 0062; +4ADD 0062; +4AE3 0062; +4AE9 0062; +4AEF 0062; +4AF5 0062; +4AFB 0062; +4B01 0062; +4B07 0062; +4B0D 0062; +4B13 0062; +4B19 0062; +4B1F 0062; +4B25 0062; +4B2B 0062; +4B31 0062; +4B36 0062; +4B3C 0062; +4B42 0062; +4B48 0062; +4B4E 0062; +4B54 0062; +4B5A 0062; +4B60 0062; +4B66 0062; +4B6C 0062; +4B72 0062; +4B78 0062; +4B7E 0062; +4B84 0062; +4B8A 0062; +4B90 0062; +4B96 0062; +4B9C 0062; +4BA2 0062; +4BA8 0062; +4BAE 0062; +4BB4 0062; +4BBA 0062; +4BC0 0062; +4BC6 0062; +4BCC 0062; +4BD1 0062; +4BD7 0062; +4BDD 0062; +4BE3 0062; +4BE9 0062; +4BEF 0062; +4BF5 0062; +4BFB 0062; +4C01 0062; +4C07 0062; +4C0D 0062; +4C13 0062; +4C19 0062; +4C1F 0062; +4C25 0062; +4C2B 0062; +4C31 0062; +4C37 0062; +4C3D 0062; +4C43 0062; +4C49 0062; +4C4F 0062; +4C55 0062; +4C5B 0062; +4C61 0062; +4C67 0062; +4C6D 0062; +4C73 0062; +4C79 0062; +4C7F 0062; +4C85 0062; +4C8B 0062; +4C91 0062; +4C97 0062; +4C9D 0062; +4CA3 0062; +4CA9 0062; +4CAF 0062; +4CB5 0062; +4CBB 0062; +4CC1 0062; +4CC7 0062; +4CCD 0062; +4CD2 0062; +4CD8 0062; +4CDE 0062; +4CE4 0062; +4CEA 0062; +4CEF 0062; +4CF5 0062; +4CFA 0062; +4D00 0062; +4D06 0062; +4D0C 0062; +4D12 0062; +4D18 0062; +4D1E 0062; +4D24 0062; +4D2A 0062; +4D30 0062; +4D36 0062; +4D3C 0062; +4D42 0062; +4D48 0062; +4D4E 0062; +4D54 0062; +4D59 0062; +4D5F 0062; +4D65 0062; +4D6B 0062; +4D71 0062; +4D77 0062; +4D7D 0062; +4D83 0062; +4D89 0062; +4D8F 0062; +4D95 0062; +4D9B 0062; +4DA1 0062; +4DA7 0062; +4DAD 0062; +4DB3 0062; +20003 0062; +2F816 0062; +2F859 0062; +2F87B 0062; +2F8A4 0062; +2F897 0062; +2F8E3 0062; +2F906 0062; +2F923 0062; +2F93C 0062; +FAD5 0062; +2F95D 0061; +2F898 0062; +2F97C 0062; +2F9A6 0062; +2F9C5 0062; +2F9E0 0062; +2F81C 0062; +2FA10 0062; +2A6D1 0062; +0370 0062; +E005 0062; +F8FF 0062; +E0003 0062; +F0003 0062; +F00FB 0062; +FFF03 0062; +FFFFB 0062; +100003 0062; +1000FB 0062; +10FF03 0062; +10FFFB 0062; diff --git a/icuSources/test/testdata/DataDrivenCollationTest.txt b/icuSources/test/testdata/DataDrivenCollationTest.txt index 08773dce..511f7f21 100644 --- a/icuSources/test/testdata/DataDrivenCollationTest.txt +++ b/icuSources/test/testdata/DataDrivenCollationTest.txt @@ -1,501 +1,518 @@ -// Copyright (c) 2001-2004 International Business Machines -// Corporation and others. All Rights Reserved. -DataDrivenCollationTest { - Info { - Headers { "sequence" } - Description { "These are the data driven tests" } - LongDescription { "The following entries are separate tests containing test data for various locales." - "Each entry has the following fields: " - "Info/Description - short descrioption of the test" - "Settings - settings for the test." - "Settings/TestLocale - locale for the collator OR" - "Settings/Rules - rules for the collator (can't have both)" - "Settings/Arguments - arguments to be passed to the collator before testing. Use rule syntax." - "Cases - set of test cases, which are sequences of strings that will be parsed" - "Sequences must not change the sign of relation, i.e. we can only have < and = or" - "> and = in single sequence. Cannot mix < and > in the same sequence. Whitespace is" - "is ignored unless quoted." - } - } - TestData { - TestLithuanian { - Info { - Description { "Lithuanian sort order." } - } - Settings { - { - TestLocale { "lt" } - } - } - Cases { "cz<č<d<iz<y<j<sz<Å¡<t<zz<ž" } - } - TestLatvian { - Info { - Description { "Latvian sort order." } - } - Settings { - { - TestLocale { "lv" } - } - } - Cases { "cz<č<d<gz<Ä£<h<iz<y<j<kz<Ä·<l<lz<ļ<m<nz<ņ<o<rz<ŗ<s<sz<Å¡<t<zz<ž" } - } - TestEstonian { - Info { - Description { "Estonian sort order." } - } - Settings { - { - TestLocale { "et" } - } - } - Cases { "sy<Å¡<Å¡y<z<zy<ž<v<w<va<õ<õy<ä<äy<ö<öy<ü<üy<x" } - } - TestAlbanian { - Info { - Description { "Albanian sort order." } - } - Settings { - { - TestLocale { "sq" } - } - } - Cases { "cz<ç<d<dz<dh<e<ez<ë<f<gz<gj<h<lz<ll<m<nz<nj<o<rz<rr<s<sz<sh<t<tz<th<u<xz<xh<y<zz<zh" } - } - - TestSimplifiedChineseOrder { - Info { - Description { "Sorted file has different order." } - } - Settings { - { - TestLocale { "root" } - Arguments { "[normalization on]" } - } - } - - Cases { "\u5F20<\u5F20\u4E00\u8E3F" } - } - - TestTibetanNormalizedIterativeCrash { - Info { - Description { "This pretty much crashes." } - } - Settings { - { - TestLocale { "root" } - } - } - - Cases { "\u0f71\u0f72\u0f80\u0f71\u0f72" - "<\u0f80" - } - } - TestThaiPartialSortKeyProblems { - Info { - Description { "These are examples of strings that caused trouble in partial sort key testing." } - } - Settings { - { - TestLocale { "th_TH" } - } - } - // TODO: the tests that are commented out should be enabled when j2720 is fixed - Cases { "\u0E01\u0E01\u0E38\u0E18\u0E20\u0E31\u0E13\u0E11\u0E4C" - "<\u0E01\u0E01\u0E38\u0E2A\u0E31\u0E19\u0E42\u0E18", - "\u0E01\u0E07\u0E01\u0E32\u0E23" - "<\u0E01\u0E07\u0E42\u0E01\u0E49", - "\u0E01\u0E23\u0E19\u0E17\u0E32" - "<\u0E01\u0E23\u0E19\u0E19\u0E40\u0E0A\u0E49\u0E32", - "\u0E01\u0E23\u0E30\u0E40\u0E08\u0E35\u0E22\u0E27" - "<\u0E01\u0E23\u0E30\u0E40\u0E08\u0E35\u0E4A\u0E22\u0E27", - "\u0E01\u0E23\u0E23\u0E40\u0E0A\u0E2D" - "<\u0E01\u0E23\u0E23\u0E40\u0E0A\u0E49\u0E32" - } - } - TestJavaStyleRule { - Info { - Description { "java.text allows rules to start as '<<<x<<<y...' " - "we emulate this by assuming a &[first tertiary ignorable] " - "in this case." - } - } - Settings { - { - Rules { "=equal<<<z<<x<<<w<y &[first tertiary ignorable]=a &[first primary ignorable]=b" } - } - } - Cases { "a = equal < z < x < w < b < y" } - } - TestShiftedIgnorable { - Info { - Description { "New UCA states that primary ignorables should be completely " - "ignorable when following a shifted code point." - } - } - Settings { - { - TestLocale { "root" } - Arguments { "[alternate shifted][strength 4]" } - } - } - Cases { - "a' 'b=" - "a' '\u0300b=" - "a' '\u0301b<" - "a_b=" - "a_\u0300b=" - "a_\u0301b<" - "A' 'b=" - "A' '\u0300b=" - "A' '\u0301b<" - "A_b=" - "A_\u0300b=" - "A_\u0301b<" - "a\u0301b<" - "A\u0301b<" - "a\u0300b<" - "A\u0300b" - - } - } - - TestNShiftedIgnorable { - Info { - Description { "New UCA states that primary ignorables should be completely " - "ignorable when following a shifted code point." - } - } - Settings { - { - TestLocale { "root" } - Arguments { "[alternate non-ignorable][strength 3]" } - } - } - Cases { - "a' 'b<" - "A' 'b<" - "a' '\u0301b<" - "A' '\u0301b<" - "a' '\u0300b<" - "A' '\u0300b<" - "a_b<" - "A_b<" - "a_\u0301b<" - "A_\u0301b<" - "a_\u0300b<" - "A_\u0300b<" - "a\u0301b<" - "A\u0301b<" - "a\u0300b<" - "A\u0300b<" - } - } - - TestSafeSurrogates { - Info { - Description { "It turned out that surrogates were not skipped properly " - "when iterating backwards if they were in the middle of a " - "contraction. This test assures that this is fixed." - } - } - Settings { - { - Rules { - "&a < x\ud800\udc00b" - } - } - } - Cases { - "a<x\ud800\udc00b" - } - } - - TestCIgnorableContraction { - Info { - Description { "Checks whether completely ignorable code points are " - "skipped in contractions." - } - } - Settings { - { - TestLocale { "sh" } - } - { - Rules { - "& L < lj, Lj <<< LJ" - "& N < nj, Nj <<< NJ " - } - } - } - Cases { - "njiva=n\ud834\udd65jiva=n\uD834\uDD79jiva=n\u0000\u0000\u0000jiva=n\u0000jiva=n\ud800jiva=n\ufffejiva", - "ljubav=l\u0000jubav=l\uD834\uDD79jubav=l\u0000\u0000\u0000jubav=l\ud800jubav=l\ufffejubav", - "Ljubav=L\u0000jubav=L\uD834\uDD79jubav=L\u0000\u0000\u0000jubav=L\ud800jubav=L\ufffejubav", - } - } - - - TestCIgnorablePrefix { - Info { - Description { "Checks whether completely ignorable code points are " - "skipped in prefix processing." - } - } - Settings { - { - TestLocale { "ja" } - } - } - Cases { - "\u30A1\u30FC" - "= \u30A1\uDB40\uDC30\u30FC" - "= \u30A1\uD800\u30FC" - "= \u30A1\uFFFE\u30FC" - "= \u30A1\uD834\uDD79\u30FC" - "= \u30A1\u0000\u0000\u0000\u30FC" - "= \u30A1\u0000\u30FC" - "= \u30A1\u30FC" - "= \u30A1\u0000\u059a\u30FC" - "= \u30A1\u30FC" - } - } - da_TestPrimary { - Info { - Description { "This test goes through primary strength cases" } - } - Settings { - { - TestLocale { "da" } - Arguments { "[strength 1]" } - } - } - Cases { - "Lvi<Lwi", - "L\u00e4vi<L\u00f6wi", - "L\u00fcbeck=Lybeck", - } - } - da_TestTertiary { - Info { - Description { "This test goes through tertiary strength cases" } - } - Settings { - { - TestLocale { "da" } - Arguments { "[strength 3]" } - } - } - Cases { - "Luc<luck", - "luck<L\u00fcbeck", - "L\u00fcbeck>lybeck", - "L\u00e4vi<L\u00f6we", - "L\u00f6ww<mast", - // constUCharCollationDanishTest::testBugs[][CollationDanishTest::MAX_TOKEN_LEN]=" - "A/S<" - "ANDRE<" - "ANDR\u00c9<" - "ANDREAS<" - "AS<" - "CA<" - "\u00c7A<" - "CB<" - "\u00c7C<" - "D.S.B.<" - "DA<" - "\u00d0A<" - "DB<" - "\u00d0C<" - "DSB<" - "DSC<" - "EKSTRA_ARBEJDE<" - "EKSTRABUD0<" - "H\u00d8ST<" - "HAAG<" - "H\u00c5NDBOG<" - "HAANDV\u00c6RKSBANKEN<" - "Karl<" - "karl<" - "'NIELS J\u00d8RGEN'<" - "NIELS-J\u00d8RGEN<" - "NIELSEN<" - "'R\u00c9E, A'<" - "'REE, B'<" - "'R\u00c9E, L'<" - "'REE, V'<" - "'SCHYTT, B'<" - "'SCHYTT, H'<" - "'SCH\u00dcTT, H'<" - "'SCHYTT, L'<" - "'SCH\u00dcTT, M'<" - "SS<" - "\u00df<" - "SSA<" - "'STORE VILDMOSE'<" - "STOREK\u00c6R0<" - "'STORM PETERSEN'<" - "STORMLY<" - "THORVALD<" - "THORVARDUR<" - "\u00feORVAR\u00d0UR<" - "THYGESEN<" - "'VESTERG\u00c5RD, A'<" - "'VESTERGAARD, A'<" - "'VESTERG\u00c5RD, B'<" - "\u00c6BLE<" - "\u00c4BLE<" - "\u00d8BERG<" - "\u00d6BERG", - - // constUCharCollationDanishTest::testNTList[][CollationDanishTest::MAX_TOKEN_LEN]=" - "andere<" - "chaque<" - "chemin<" - "cote<" - "cot\u00e9<" - "c\u00f4te<" - "c\u00f4t\u00e9<" - "\u010du\u010d\u0113t<" - "Czech<" - "hi\u0161a<" - "irdisch<" - "lie<" - "lire<" - "llama<" - "l\u00f5ug<" - "l\u00f2za<" - "lu\u010d<" - "luck<" - "L\u00fcbeck<" - "lye<" - "l\u00e4vi<" - "L\u00f6wen<" - "m\u00e0\u0161ta<" - "m\u00eer<" - "myndig<" - "M\u00e4nner<" - "m\u00f6chten<" - "pi\u00f1a<" - "pint<" - "pylon<" - "\u0161\u00e0ran<" - "savoir<" - "\u0160erb\u016bra<" - "Sietla<" - "\u015blub<" - "subtle<" - "symbol<" - "s\u00e4mtlich<" - "verkehrt<" - "vox<" - "v\u00e4ga<" - "waffle<" - "wood<" - "yen<" - "yuan<" - "yucca<" - "\u017eal<" - "\u017eena<" - "\u017den\u0113va<" - "zoo0<" - "Zviedrija<" - "Z\u00fcrich<" - "zysk0<" - "\u00e4ndere" - } - } - hi_TestNewRules { - Info { - Description { "This test goes through new rules and tests against old rules" } - } - Settings { - { - TestLocale { "hi" } - } - } - Cases { - "ॐ<।<॥<॰<०<१<२<३" - "<४<५<६<७<८<९<अ<आ" - "<इ<ई<उ<ऊ<ऋ<ॠ<ऌ<ॡ" - "<ऍ<ऎ<ए<ऐ<ऑ<ऒ<ओ<औ" - "<क<क़=क़<कँ<कं<कः<क॑<क॒" - "<क॓<क॔<कऽ<क्<का<कि<की<कु" - "<कू<कृ<कॄ<कॢ<कॣ<कॅ<कॆ<के" - "<कै<कॉ<कॊ<को<कौ<ख<ख़ =ख़<खँ<खं<खः" - "<ख॑<ख॒<ख॓<ख॔<खऽ<ख्<खा<खि" - "<खी<खु<खू<खृ<खॄ<खॢ<खॣ<खॅ" - "<खॆ<खे<खै<खॉ<खॊ<खो<खौ<ग" - "<ग़=ग़<गँ<गं<गः<ग॑<ग॒<ग॓<ग॔" - "<गऽ<ग्<गा<गि<गी<गु<गू<गृ" - "<गॄ<गॢ<गॣ<गॅ<गॆ<गे<गै<गॉ" - "<गॊ<गो<गौ<घ<ङ<च<छ<ज<ज़ =ज़<जँ<जं<जः" - "<ज॑<ज॒<ज॓<ज॔<जऽ<ज्<जा<जि" - "<जी<जु<जू<जृ<जॄ<जॢ<जॣ<जॅ" - "<जॆ<जे<जै<जॉ<जॊ<जो<जौ<झ" - "<ञ<ट<ठ<ड<ड़=ड़<डँ<डं<डः<ड॑<ड॒<ड॓<ड॔" - "<डऽ<ड्<डा<डि<डी<डु<डू<डृ" - "<डॄ<डॢ<डॣ<डॅ<डॆ<डे<डै<डॉ" - "<डॊ<डो<डौ<ढ<ढ़=ढ़<ढँ<ढं<ढः" - "<ढ॑<ढ॒<ढ॓<ढ॔<ढऽ<ढ्<ढा<ढि" - "<ढी<ढु<ढू<ढृ<ढॄ<ढॢ<ढॣ<ढॅ" - "<ढॆ<ढे<ढै<ढॉ<ढॊ<ढो<ढौ<ण" - "<त<थ<द<ध<न<ऩ =ऩ< नँ<नं< नः" - "<न॑<न॒<न॓<न॔<नऽ<न्<ना<नि" - "<नी<नु<नू<नृ<नॄ<नॢ<नॣ<नॅ" - "<नॆ<ने<नै<नॉ<नॊ<नो<नौ" - "<प<फ<फ़=फ़<फँ<फं<फः<फ॑<फ॒" - "<फ॓<फ॔<फऽ<फ्<फा<फि<फी<फु<फू<फृ" - "<फॄ<फॢ<फॣ<फॅ<फॆ<फे<फै<फॉ" - "<फॊ<फो<फौ<ब<भ<म<य<य़=य़ " - "<यँ<यं<यः<य॑<य॒<य॓<य॔" - "<यऽ<य्<या<यि<यी<यु<यू<यृ" - "<यॄ<यॢ<यॣ<यॅ<यॆ<ये<यै<यॉ" - "<यॊ<यो<यौ<र<ऱ=ऱ<रँ<रं<रः" - "<र॑<र॒<र॓<र॔<रऽ<र्<रा<रि" - "<री<रु<रू<रृ<रॄ<रॢ<रॣ<रॅ" - "<रॆ<रे<रै<रॉ<रॊ<रो<रौ" - "<ल<ळ<ऴ=ऴ<ळँ<ळं<ळः<ळ॑<ळ॒" - "<ळ॓<ळ॔<ळऽ<ळ्<ळा<ळि<ळी<ळु" - "<ळू<ळृ<ळॄ<ळॢ<ळॣ<ळॅ<ळॆ<ळे" - "<ळै<ळॉ<ळॊ<ळो<ळौ<व<श<ष<स<ह" - "<़<ँ<ं<ः<॑<॒<॓<॔<ऽ<्<ा<ि<ी" - "<ु<ू<ृ<ॄ<ॢ<ॣ<ॅ<ॆ" - "<े<ै<ॉ<ॊ<ो<ौ" - } - } - fi_TestNewRules { - Info { - Description { "This test goes through new rules and tests against old rules" } - } - Settings { - { - TestLocale { "fi" } - } - } - Cases { - "xa<xA<Xa<XA<xá<Xá<xax<xAx<xáx<xd<Xd<xð<xÐ<Xð<XÐ<xđ<xĐ<Xđ<XĐ<" - "xdx<xðx<xÐx<xđx<xĐx<xe<Xe<xex<xn<Xn<xŋ<xŊ<Xŋ<XŊ<xnx<xŋx<xŊx<" - "xo<Xo<xó<Xó<xox<xóx<xs<Xs<xß<Xß<xßx<xsx<xt<Xt<xþ<xÞ<Xþ<XÞ<xþx<" - "xÞx<xtx<xu<Xu<xú<Xú<xux<xúx<xv<Xv<xw<Xw<xvx<xwx<xy<Xy<xü<Xü<" - "xű<Xű<xyx<xüx<xűx<xz<Xz<xzx<xÃ¥<XÃ¥<xÃ¥x<xä<Xä<xæ<xÆ<Xæ<XÆ<xäx<" - "xæx<xÆx<xö<Xö<xø<Xø<xő<Xő<xõ<Xõ<xœ<xŒ<Xœ<XŒ<xöx<xøx<xőx<xõx<xœx<xŒx" - } - } - ro_TestNewRules { - Info { - Description { "This test goes through new rules and tests against old rules" } - } - Settings { - { - TestLocale { "ro" } - } - } - Cases { - "xAx<xă<xĂ<Xă<XĂ<xăx<xĂx<xâ<xÂ<Xâ<XÂ<xâx<xÂx<xb<xIx<xî<xÎ<Xî<XÎ<xîx<xÎx<" - "xj<xSx<xș=xş<xȘ=xŞ<Xș=Xş<XȘ=XŞ<xșx=xşx<xȘx=xŞx<xT<xTx<xț=xÅ£<xȚ=xÅ¢<Xț=XÅ£<XȚ" - "=XÅ¢<xțx=xÅ£x<xȚx=xÅ¢x<xU" - } - } - } +// Copyright (c) 2001-2005 International Business Machines +// Corporation and others. All Rights Reserved. +DataDrivenCollationTest:table(nofallback) { + Info { + Headers { "sequence" } + Description { "These are the data driven tests" } + LongDescription { "The following entries are separate tests containing test data for various locales." + "Each entry has the following fields: " + "Info/Description - short descrioption of the test" + "Settings - settings for the test." + "Settings/TestLocale - locale for the collator OR" + "Settings/Rules - rules for the collator (can't have both)" + "Settings/Arguments - arguments to be passed to the collator before testing. Use rule syntax." + "Cases - set of test cases, which are sequences of strings that will be parsed" + "Sequences must not change the sign of relation, i.e. we can only have < and = or" + "> and = in single sequence. Cannot mix < and > in the same sequence. Whitespace is" + "is ignored unless quoted." + } + } + TestData { + TestMorePinyin { + Info { + Description { "Testing the primary strength." } + } + Settings { + { + TestLocale { "zh" } + Arguments { "[strength 1]" } + } + } + Cases { "lā = lĀ = Lā = LĀ < lān = lĀn < lē = lĒ = Lē = LĒ < lēn = lĒn" } + + } + TestLithuanian { + Info { + Description { "Lithuanian sort order." } + } + Settings { + { + TestLocale { "lt" } + } + } + Cases { "cz<č<d<iz<y<j<sz<Å¡<t<zz<ž" } + } + TestLatvian { + Info { + Description { "Latvian sort order." } + } + Settings { + { + TestLocale { "lv" } + } + } + Cases { "cz<č<d<gz<Ä£<h<iz<y<j<kz<Ä·<l<lz<ļ<m<nz<ņ<o<rz<ŗ<s<sz<Å¡<t<zz<ž" } + } + TestEstonian { + Info { + Description { "Estonian sort order." } + } + Settings { + { + TestLocale { "et" } + } + } + Cases { "sy<Å¡<Å¡y<z<zy<ž<v<w<va<õ<õy<ä<äy<ö<öy<ü<üy<x" } + } + TestAlbanian { + Info { + Description { "Albanian sort order." } + } + Settings { + { + TestLocale { "sq" } + } + } + Cases { "cz<ç<d<dz<dh<e<ez<ë<f<gz<gj<h<lz<ll<m<nz<nj<o<rz<rr<s<sz<sh<t<tz<th<u<xz<xh<y<zz<zh" } + } + + TestSimplifiedChineseOrder { + Info { + Description { "Sorted file has different order." } + } + Settings { + { + TestLocale { "root" } + Arguments { "[normalization on]" } + } + } + + Cases { "\u5F20<\u5F20\u4E00\u8E3F" } + } + + TestTibetanNormalizedIterativeCrash { + Info { + Description { "This pretty much crashes." } + } + Settings { + { + TestLocale { "root" } + } + } + + Cases { "\u0f71\u0f72\u0f80\u0f71\u0f72" + "<\u0f80" + } + } + TestThaiPartialSortKeyProblems { + Info { + Description { "These are examples of strings that caused trouble in partial sort key testing." } + } + Settings { + { + TestLocale { "th_TH" } + } + } + // TODO: the tests that are commented out should be enabled when j2720 is fixed + Cases { "\u0E01\u0E01\u0E38\u0E18\u0E20\u0E31\u0E13\u0E11\u0E4C" + "<\u0E01\u0E01\u0E38\u0E2A\u0E31\u0E19\u0E42\u0E18", + "\u0E01\u0E07\u0E01\u0E32\u0E23" + "<\u0E01\u0E07\u0E42\u0E01\u0E49", + "\u0E01\u0E23\u0E19\u0E17\u0E32" + "<\u0E01\u0E23\u0E19\u0E19\u0E40\u0E0A\u0E49\u0E32", + "\u0E01\u0E23\u0E30\u0E40\u0E08\u0E35\u0E22\u0E27" + "<\u0E01\u0E23\u0E30\u0E40\u0E08\u0E35\u0E4A\u0E22\u0E27", + "\u0E01\u0E23\u0E23\u0E40\u0E0A\u0E2D" + "<\u0E01\u0E23\u0E23\u0E40\u0E0A\u0E49\u0E32" + } + } + TestJavaStyleRule { + Info { + Description { "java.text allows rules to start as '<<<x<<<y...' " + "we emulate this by assuming a &[first tertiary ignorable] " + "in this case." + } + } + Settings { + { + Rules { "=equal<<<z<<x<<<w<y &[first tertiary ignorable]=a &[first primary ignorable]=b" } + } + } + Cases { "a = equal < z < x < w < b < y" } + } + TestShiftedIgnorable { + Info { + Description { "New UCA states that primary ignorables should be completely " + "ignorable when following a shifted code point." + } + } + Settings { + { + TestLocale { "root" } + Arguments { "[alternate shifted][strength 4]" } + } + } + Cases { + "a' 'b=" + "a' '\u0300b=" + "a' '\u0301b<" + "a_b=" + "a_\u0300b=" + "a_\u0301b<" + "A' 'b=" + "A' '\u0300b=" + "A' '\u0301b<" + "A_b=" + "A_\u0300b=" + "A_\u0301b<" + "a\u0301b<" + "A\u0301b<" + "a\u0300b<" + "A\u0300b" + + } + } + + TestNShiftedIgnorable { + Info { + Description { "New UCA states that primary ignorables should be completely " + "ignorable when following a shifted code point." + } + } + Settings { + { + TestLocale { "root" } + Arguments { "[alternate non-ignorable][strength 3]" } + } + } + Cases { + "a' 'b<" + "A' 'b<" + "a' '\u0301b<" + "A' '\u0301b<" + "a' '\u0300b<" + "A' '\u0300b<" + "a_b<" + "A_b<" + "a_\u0301b<" + "A_\u0301b<" + "a_\u0300b<" + "A_\u0300b<" + "a\u0301b<" + "A\u0301b<" + "a\u0300b<" + "A\u0300b<" + } + } + + TestSafeSurrogates { + Info { + Description { "It turned out that surrogates were not skipped properly " + "when iterating backwards if they were in the middle of a " + "contraction. This test assures that this is fixed." + } + } + Settings { + { + Rules { + "&a < x\ud800\udc00b" + } + } + } + Cases { + "a<x\ud800\udc00b" + } + } +/* + UCA 4.1 removes skipping of ignorable code points in contractions! + TestCIgnorableContraction { + Info { + Description { "Checks whether completely ignorable code points are " + "skipped in contractions." + } + } + Settings { + { + TestLocale { "sh" } + } + { + Rules { + "& L < lj, Lj <<< LJ" + "& N < nj, Nj <<< NJ " + } + } + } + Cases { + "njiva=n\ud834\udd65jiva=n\uD834\uDD79jiva=n\u0000\u0000\u0000jiva=n\u0000jiva=n\ud800jiva=n\ufffejiva", + "ljubav=l\u0000jubav=l\uD834\uDD79jubav=l\u0000\u0000\u0000jubav=l\ud800jubav=l\ufffejubav", + "Ljubav=L\u0000jubav=L\uD834\uDD79jubav=L\u0000\u0000\u0000jubav=L\ud800jubav=L\ufffejubav", + } + } + +*/ +/* + UCA 4.1 removes skipping of ignorable code points in contractions! + TestCIgnorablePrefix { + Info { + Description { "Checks whether completely ignorable code points are " + "skipped in prefix processing." + } + } + Settings { + { + TestLocale { "ja" } + } + } + Cases { + "\u30A1\u30FC" + "= \u30A1\uDB40\uDC30\u30FC" + "= \u30A1\uD800\u30FC" + "= \u30A1\uFFFE\u30FC" + "= \u30A1\uD834\uDD79\u30FC" + "= \u30A1\u0000\u0000\u0000\u30FC" + "= \u30A1\u0000\u30FC" + "= \u30A1\u30FC" + "= \u30A1\u0000\u059a\u30FC" + "= \u30A1\u30FC" + } + } +*/ + da_TestPrimary { + Info { + Description { "This test goes through primary strength cases" } + } + Settings { + { + TestLocale { "da" } + Arguments { "[strength 1]" } + } + } + Cases { + "Lvi<Lwi", + "L\u00e4vi<L\u00f6wi", + "L\u00fcbeck=Lybeck", + } + } + da_TestTertiary { + Info { + Description { "This test goes through tertiary strength cases" } + } + Settings { + { + TestLocale { "da" } + Arguments { "[strength 3]" } + } + } + Cases { + "Luc<luck", + "luck<L\u00fcbeck", + "L\u00fcbeck>lybeck", + "L\u00e4vi<L\u00f6we", + "L\u00f6ww<mast", + // constUCharCollationDanishTest::testBugs[][CollationDanishTest::MAX_TOKEN_LEN]=" + "A/S<" + "ANDRE<" + "ANDR\u00c9<" + "ANDREAS<" + "AS<" + "CA<" + "\u00c7A<" + "CB<" + "\u00c7C<" + "D.S.B.<" + "DA<" + "\u00d0A<" + "DB<" + "\u00d0C<" + "DSB<" + "DSC<" + "EKSTRA_ARBEJDE<" + "EKSTRABUD0<" + "H\u00d8ST<" + "HAAG<" + "H\u00c5NDBOG<" + "HAANDV\u00c6RKSBANKEN<" + "Karl<" + "karl<" + "'NIELS J\u00d8RGEN'<" + "NIELS-J\u00d8RGEN<" + "NIELSEN<" + "'R\u00c9E, A'<" + "'REE, B'<" + "'R\u00c9E, L'<" + "'REE, V'<" + "'SCHYTT, B'<" + "'SCHYTT, H'<" + "'SCH\u00dcTT, H'<" + "'SCHYTT, L'<" + "'SCH\u00dcTT, M'<" + "SS<" + "\u00df<" + "SSA<" + "'STORE VILDMOSE'<" + "STOREK\u00c6R0<" + "'STORM PETERSEN'<" + "STORMLY<" + "THORVALD<" + "THORVARDUR<" + "\u00feORVAR\u00d0UR<" + "THYGESEN<" + "'VESTERG\u00c5RD, A'<" + "'VESTERGAARD, A'<" + "'VESTERG\u00c5RD, B'<" + "\u00c6BLE<" + "\u00c4BLE<" + "\u00d8BERG<" + "\u00d6BERG", + + // constUCharCollationDanishTest::testNTList[][CollationDanishTest::MAX_TOKEN_LEN]=" + "andere<" + "chaque<" + "chemin<" + "cote<" + "cot\u00e9<" + "c\u00f4te<" + "c\u00f4t\u00e9<" + "\u010du\u010d\u0113t<" + "Czech<" + "hi\u0161a<" + "irdisch<" + "lie<" + "lire<" + "llama<" + "l\u00f5ug<" + "l\u00f2za<" + "lu\u010d<" + "luck<" + "L\u00fcbeck<" + "lye<" + "l\u00e4vi<" + "L\u00f6wen<" + "m\u00e0\u0161ta<" + "m\u00eer<" + "myndig<" + "M\u00e4nner<" + "m\u00f6chten<" + "pi\u00f1a<" + "pint<" + "pylon<" + "\u0161\u00e0ran<" + "savoir<" + "\u0160erb\u016bra<" + "Sietla<" + "\u015blub<" + "subtle<" + "symbol<" + "s\u00e4mtlich<" + "verkehrt<" + "vox<" + "v\u00e4ga<" + "waffle<" + "wood<" + "yen<" + "yuan<" + "yucca<" + "\u017eal<" + "\u017eena<" + "\u017den\u0113va<" + "zoo0<" + "Zviedrija<" + "Z\u00fcrich<" + "zysk0<" + "\u00e4ndere" + } + } + hi_TestNewRules { + Info { + Description { "This test goes through new rules and tests against old rules" } + } + Settings { + { + TestLocale { "hi" } + } + } + Cases { + "ॐ<।<॥<॰<०<१<२<३" + "<४<५<६<७<८<९<अ<आ" + "<इ<ई<उ<ऊ<ऋ<ॠ<ऌ<ॡ" + "<ऍ<ऎ<ए<ऐ<ऑ<ऒ<ओ<औ" + "<क<क़=क़<कँ<कं<कः<क॑<क॒" + "<क॓<क॔<कऽ<क्<का<कि<की<कु" + "<कू<कृ<कॄ<कॢ<कॣ<कॅ<कॆ<के" + "<कै<कॉ<कॊ<को<कौ<ख<ख़ =ख़<खँ<खं<खः" + "<ख॑<ख॒<ख॓<ख॔<खऽ<ख्<खा<खि" + "<खी<खु<खू<खृ<खॄ<खॢ<खॣ<खॅ" + "<खॆ<खे<खै<खॉ<खॊ<खो<खौ<ग" + "<ग़=ग़<गँ<गं<गः<ग॑<ग॒<ग॓<ग॔" + "<गऽ<ग्<गा<गि<गी<गु<गू<गृ" + "<गॄ<गॢ<गॣ<गॅ<गॆ<गे<गै<गॉ" + "<गॊ<गो<गौ<घ<ङ<च<छ<ज<ज़ =ज़<जँ<जं<जः" + "<ज॑<ज॒<ज॓<ज॔<जऽ<ज्<जा<जि" + "<जी<जु<जू<जृ<जॄ<जॢ<जॣ<जॅ" + "<जॆ<जे<जै<जॉ<जॊ<जो<जौ<झ" + "<ञ<ट<ठ<ड<ड़=ड़<डँ<डं<डः<ड॑<ड॒<ड॓<ड॔" + "<डऽ<ड्<डा<डि<डी<डु<डू<डृ" + "<डॄ<डॢ<डॣ<डॅ<डॆ<डे<डै<डॉ" + "<डॊ<डो<डौ<ढ<ढ़=ढ़<ढँ<ढं<ढः" + "<ढ॑<ढ॒<ढ॓<ढ॔<ढऽ<ढ्<ढा<ढि" + "<ढी<ढु<ढू<ढृ<ढॄ<ढॢ<ढॣ<ढॅ" + "<ढॆ<ढे<ढै<ढॉ<ढॊ<ढो<ढौ<ण" + "<त<थ<द<ध<न<ऩ =ऩ< नँ<नं< नः" + "<न॑<न॒<न॓<न॔<नऽ<न्<ना<नि" + "<नी<नु<नू<नृ<नॄ<नॢ<नॣ<नॅ" + "<नॆ<ने<नै<नॉ<नॊ<नो<नौ" + "<प<फ<फ़=फ़<फँ<फं<फः<फ॑<फ॒" + "<फ॓<फ॔<फऽ<फ्<फा<फि<फी<फु<फू<फृ" + "<फॄ<फॢ<फॣ<फॅ<फॆ<फे<फै<फॉ" + "<फॊ<फो<फौ<ब<भ<म<य<य़=य़ " + "<यँ<यं<यः<य॑<य॒<य॓<य॔" + "<यऽ<य्<या<यि<यी<यु<यू<यृ" + "<यॄ<यॢ<यॣ<यॅ<यॆ<ये<यै<यॉ" + "<यॊ<यो<यौ<र<ऱ=ऱ<रँ<रं<रः" + "<र॑<र॒<र॓<र॔<रऽ<र्<रा<रि" + "<री<रु<रू<रृ<रॄ<रॢ<रॣ<रॅ" + "<रॆ<रे<रै<रॉ<रॊ<रो<रौ" + "<ल<ळ<ऴ=ऴ<ळँ<ळं<ळः<ळ॑<ळ॒" + "<ळ॓<ळ॔<ळऽ<ळ्<ळा<ळि<ळी<ळु" + "<ळू<ळृ<ळॄ<ळॢ<ळॣ<ळॅ<ळॆ<ळे" + "<ळै<ळॉ<ळॊ<ळो<ळौ<व<श<ष<स<ह" + "<़<ँ<ं<ः<॑<॒<॓<॔<ऽ<्<ा<ि<ी" + "<ु<ू<ृ<ॄ<ॢ<ॣ<ॅ<ॆ" + "<े<ै<ॉ<ॊ<ो<ौ" + } + } + fi_TestNewRules { + Info { + Description { "This test goes through new rules and tests against old rules" } + } + Settings { + { + TestLocale { "fi" } + } + } + Cases { + "xa<xA<Xa<XA<xá<Xá<xax<xAx<xáx<xd<Xd<xð<xÐ<Xð<XÐ<xđ<xĐ<Xđ<XĐ<" + "xdx<xðx<xÐx<xđx<xĐx<xe<Xe<xex<xn<Xn<xŋ<xŊ<Xŋ<XŊ<xnx<xŋx<xŊx<" + "xo<Xo<xó<Xó<xox<xóx<xs<Xs<xß<Xß<xßx<xsx<xt<Xt<xþ<xÞ<Xþ<XÞ<xþx<" + "xÞx<xtx<xu<Xu<xú<Xú<xux<xúx<xv<Xv<xw<Xw<xvx<xwx<xy<Xy<xü<Xü<" + "xű<Xű<xyx<xüx<xűx<xz<Xz<xzx<xÃ¥<XÃ¥<xÃ¥x<xä<Xä<xæ<xÆ<Xæ<XÆ<xäx<" + "xæx<xÆx<xö<Xö<xø<Xø<xő<Xő<xõ<Xõ<xœ<xŒ<Xœ<XŒ<xöx<xøx<xőx<xõx<xœx<xŒx" + } + } + ro_TestNewRules { + Info { + Description { "This test goes through new rules and tests against old rules" } + } + Settings { + { + TestLocale { "ro" } + } + } + Cases { + "xAx<xă<xĂ<Xă<XĂ<xăx<xĂx<xâ<xÂ<Xâ<XÂ<xâx<xÂx<xb<xIx<xî<xÎ<Xî<XÎ<xîx<xÎx<" + "xj<xSx<xș=xş<xȘ=xŞ<Xș=Xş<XȘ=XŞ<xșx=xşx<xȘx=xŞx<xT<xTx<xț=xÅ£<xȚ=xÅ¢<Xț=XÅ£<XȚ" + "=XÅ¢<xțx=xÅ£x<xȚx=xÅ¢x<xU" + } + } + } } \ No newline at end of file diff --git a/icuSources/test/testdata/GraphemeClusterBreakTest.txt b/icuSources/test/testdata/GraphemeClusterBreakTest.txt new file mode 100644 index 00000000..edf77bd0 --- /dev/null +++ b/icuSources/test/testdata/GraphemeClusterBreakTest.txt @@ -0,0 +1,116 @@ +# Default GraphemeCluster Break Test +# Generated: 2003-04-19, 01:55:08 GMT, MED +# +# Format: +# <string> (# <comment>)? +# <string> contains hex Unicode code points, with +# ÷ wherever there is a break opportunity, and +# × wherever there is not. +# <comment> the format can change, but currently it shows: +# - the sample character name +# - (x) the line_break property* for the sample character +# - [x] the rule that determines whether there is a break or not +# +# These samples may be extended or changed in the future. +# +÷ 000D ÷ 000D ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 000D × 000A ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) × [3: CR × LF] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 000D ÷ 0001 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 000D ÷ 0300 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 000D ÷ 1100 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 000D ÷ 1160 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 000D ÷ 11A8 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 000D ÷ AC00 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 000D ÷ AC01 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 000D ÷ 0020 ÷ # ÷ [1: sot ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [4: ( Control | CR | LF ) ÷] SPACE (Other) ÷ [2: ÷ eot] +÷ 000A ÷ 000D ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 000A ÷ 000A ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 000A ÷ 0001 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 000A ÷ 0300 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 000A ÷ 1100 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 000A ÷ 1160 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 000A ÷ 11A8 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 000A ÷ AC00 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 000A ÷ AC01 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 000A ÷ 0020 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (LF) ÷ [4: ( Control | CR | LF ) ÷] SPACE (Other) ÷ [2: ÷ eot] +÷ 0001 ÷ 000D ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 0001 ÷ 000A ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 0001 ÷ 0001 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 0001 ÷ 0300 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 0001 ÷ 1100 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 0001 ÷ 1160 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 0001 ÷ 11A8 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 0001 ÷ AC00 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 0001 ÷ AC01 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 0001 ÷ 0020 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Control) ÷ [4: ( Control | CR | LF ) ÷] SPACE (Other) ÷ [2: ÷ eot] +÷ 0300 ÷ 000D ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 0300 ÷ 000A ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 0300 ÷ 0001 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 0300 × 0300 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 0300 ÷ 1100 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [10: Any ÷ Any] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 0300 ÷ 1160 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [10: Any ÷ Any] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 0300 ÷ 11A8 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [10: Any ÷ Any] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 0300 ÷ AC00 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 0300 ÷ AC01 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 0300 ÷ 0020 ÷ # ÷ [1: sot ÷] COMBINING GRAVE ACCENT (Extend) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +÷ 1100 ÷ 000D ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 1100 ÷ 000A ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 1100 ÷ 0001 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 1100 × 0300 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 1100 × 1100 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) × [6: L × ( L | V | LV | LVT )] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 1100 × 1160 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) × [6: L × ( L | V | LV | LVT )] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 1100 ÷ 11A8 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [10: Any ÷ Any] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 1100 × AC00 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) × [6: L × ( L | V | LV | LVT )] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 1100 × AC01 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) × [6: L × ( L | V | LV | LVT )] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 1100 ÷ 0020 ÷ # ÷ [1: sot ÷] HANGUL CHOSEONG KIYEOK (L) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +÷ 1160 ÷ 000D ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 1160 ÷ 000A ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 1160 ÷ 0001 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 1160 × 0300 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 1160 ÷ 1100 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [10: Any ÷ Any] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 1160 × 1160 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) × [7: ( LV | V ) × ( V | T )] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 1160 × 11A8 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) × [7: ( LV | V ) × ( V | T )] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 1160 ÷ AC00 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 1160 ÷ AC01 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 1160 ÷ 0020 ÷ # ÷ [1: sot ÷] HANGUL JUNGSEONG FILLER (V) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +÷ 11A8 ÷ 000D ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 11A8 ÷ 000A ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 11A8 ÷ 0001 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 11A8 × 0300 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 11A8 ÷ 1100 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [10: Any ÷ Any] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 11A8 ÷ 1160 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [10: Any ÷ Any] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 11A8 × 11A8 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) × [8: ( LVT | T ) × T] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 11A8 ÷ AC00 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 11A8 ÷ AC01 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 11A8 ÷ 0020 ÷ # ÷ [1: sot ÷] HANGUL JONGSEONG KIYEOK (T) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +÷ AC00 ÷ 000D ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ AC00 ÷ 000A ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ AC00 ÷ 0001 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ AC00 × 0300 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ AC00 ÷ 1100 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [10: Any ÷ Any] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ AC00 × 1160 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) × [7: ( LV | V ) × ( V | T )] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ AC00 × 11A8 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) × [7: ( LV | V ) × ( V | T )] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ AC00 ÷ AC00 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ AC00 ÷ AC01 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ AC00 ÷ 0020 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GA (LV) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +÷ AC01 ÷ 000D ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ AC01 ÷ 000A ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ AC01 ÷ 0001 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ AC01 × 0300 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ AC01 ÷ 1100 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [10: Any ÷ Any] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ AC01 ÷ 1160 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [10: Any ÷ Any] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ AC01 × 11A8 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) × [8: ( LVT | T ) × T] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ AC01 ÷ AC00 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ AC01 ÷ AC01 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ AC01 ÷ 0020 ÷ # ÷ [1: sot ÷] HANGUL SYLLABLE GAG (LVT) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +÷ 0020 ÷ 000D ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [5: ÷ ( Control | CR | LF )] <CARRIAGE RETURN (CR)> (CR) ÷ [2: ÷ eot] +÷ 0020 ÷ 000A ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [5: ÷ ( Control | CR | LF )] <LINE FEED (LF)> (LF) ÷ [2: ÷ eot] +÷ 0020 ÷ 0001 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [5: ÷ ( Control | CR | LF )] <START OF HEADING> (Control) ÷ [2: ÷ eot] +÷ 0020 × 0300 ÷ # ÷ [1: sot ÷] SPACE (Other) × [9: × Extend] COMBINING GRAVE ACCENT (Extend) ÷ [2: ÷ eot] +÷ 0020 ÷ 1100 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [10: Any ÷ Any] HANGUL CHOSEONG KIYEOK (L) ÷ [2: ÷ eot] +÷ 0020 ÷ 1160 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [10: Any ÷ Any] HANGUL JUNGSEONG FILLER (V) ÷ [2: ÷ eot] +÷ 0020 ÷ 11A8 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [10: Any ÷ Any] HANGUL JONGSEONG KIYEOK (T) ÷ [2: ÷ eot] +÷ 0020 ÷ AC00 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GA (LV) ÷ [2: ÷ eot] +÷ 0020 ÷ AC01 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [10: Any ÷ Any] HANGUL SYLLABLE GAG (LVT) ÷ [2: ÷ eot] +÷ 0020 ÷ 0020 ÷ # ÷ [1: sot ÷] SPACE (Other) ÷ [10: Any ÷ Any] SPACE (Other) ÷ [2: ÷ eot] +# Lines: 100 diff --git a/icuSources/test/testdata/Makefile.in b/icuSources/test/testdata/Makefile.in index 7b47e4cc..bddd4640 100644 --- a/icuSources/test/testdata/Makefile.in +++ b/icuSources/test/testdata/Makefile.in @@ -1,6 +1,6 @@ #****************************************************************************** # -# Copyright (C) 1998-2004, International Business Machines +# Copyright (C) 1998-2006, International Business Machines # Corporation and others. All Rights Reserved. # #****************************************************************************** @@ -24,8 +24,8 @@ CLEANFILES = *~ SUBDIRS = ## List of phony targets -.PHONY : all all-local all-recursive install install-local install-udata install-udata-files install-udata-dlls \ -install-recursive clean clean-local clean-recursive distclean \ +.PHONY : all all-local all-recursive install install-local \ +install-recursive clean clean-local clean-recursive distclean \ distclean-local distclean-recursive doc dist dist-local dist-recursive \ check check-local check-recursive build-dir @@ -35,12 +35,12 @@ check check-local check-recursive build-dir .SUFFIXES : ## List of standard targets -all: all-local all-recursive -install: install-recursive install-local -clean: clean-recursive clean-local -distclean : distclean-recursive distclean-local -dist: dist-recursive dist-local -check: all check-recursive check-local +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local all-local: build-dir build-testdata testdata packagetest @@ -83,7 +83,21 @@ OUTTMPDIR=$(top_builddir)/data/out/tmp BUILDDIR=$(OUTDIR)/build/$(ICUDATA_PLATFORM_NAME) TESTSRCDATADIR=$(top_srcdir)/test/testdata TESTOUTDIR=$(top_builddir)/test/testdata/out -BUILD_DIRS = $(TESTOUTDIR) $(TESTBUILDDIR) +BUILD_DIRS = $(TESTOUTDIR) $(TESTBUILDDIR) $(TESTOUTDIR)/$(TESTDT) + +ifeq ($(PKGDATA_MODE),common) +ICU_DATA_OPT = -i $(OUTDIR) +else +ifeq ($(PKGDATA_MODE),dll) +ifneq ($(ENABLE_SHARED),YES) +ICU_DATA_OPT = -i $(BUILDDIR) +else +ICU_DATA_OPT = +endif +else +ICU_DATA_OPT = -i $(BUILDDIR) +endif +endif PKGDATA = $(BINDIR)/pkgdata $(PKGDATA_OPTS) -q -c -s $(CURDIR)/out/build/$(ICUDATA_PLATFORM_NAME) PKGDATA_INVOKE:=$(INVOKE) $(PKGDATA_INVOKE_OPTS) @@ -92,89 +106,93 @@ PKGDATA_INVOKE:=$(INVOKE) $(PKGDATA_INVOKE_OPTS) TESTBUILDDIR=$(TESTOUTDIR)/build # unpackaged files - live in 'out' so that the path can find them as part of the pkg -UNPACKAGEDTESTDATA=$(TESTOUTDIR)/$(TESTDT)nam.typ +UNPACKAGEDTESTDATA=$(TESTOUTDIR)/$(TESTDT)/nam.typ # pkg name for testdata TESTDATA=testdata # prefix for files that are testdata -TESTDT=$(TESTDATA)_ +TESTDT=$(TESTDATA) # File definitions -TEST_DAT_FILES=$(TESTBUILDDIR)/$(TESTDT)test.icu $(TESTBUILDDIR)/$(TESTDT)nfscsi.spp $(TESTBUILDDIR)/$(TESTDT)nfscss.spp $(TESTBUILDDIR)/$(TESTDT)nfscis.spp $(TESTBUILDDIR)/$(TESTDT)nfsmxs.spp $(TESTBUILDDIR)/$(TESTDT)nfsmxp.spp +TEST_DAT_FILES=$(TESTBUILDDIR)/test.icu +TEST_SPP_FILES=$(TESTBUILDDIR)/nfscsi.spp $(TESTBUILDDIR)/nfscss.spp $(TESTBUILDDIR)/nfscis.spp $(TESTBUILDDIR)/nfsmxs.spp $(TESTBUILDDIR)/nfsmxp.spp TEST_UCM_SOURCE= test1.ucm test3.ucm test4.ucm test4x.ucm ibm9027.ucm TEST_UCM_FILES=$(TEST_UCM_SOURCE:%=$(TESTSRCDATADIR)/data/%) -TEST_CNV_FILES=$(TEST_UCM_SOURCE:%.ucm=$(TESTBUILDDIR)/$(TESTDT)%.cnv) +TEST_CNV_FILES=$(TEST_UCM_SOURCE:%.ucm=$(TESTBUILDDIR)/%.cnv) -TEST_RES = casing.txt mc.txt root.txt te.txt te_IN.txt testtypes.txt testaliases.txt testempty.txt structLocale.txt DataDrivenCollationTest.txt idna_rules.txt conversion.txt icuio.txt testtable32.txt -TEST_RES_FILES=$(TEST_RES:%.txt=$(TESTBUILDDIR)/$(TESTDT)%.res) $(TESTBUILDDIR)/$(TESTDT)iscii.res $(TESTSRCDATADIR)/$(TESTDT)icu26_testtypes.res $(TESTSRCDATADIR)/$(TESTDT)icu26e_testtypes.res +TEST_RES = casing.txt mc.txt root.txt sh.txt sh_YU.txt te.txt te_IN.txt te_IN_REVISED.txt testtypes.txt testaliases.txt testempty.txt structLocale.txt DataDrivenCollationTest.txt idna_rules.txt conversion.txt icuio.txt testtable32.txt +TEST_RES_FILES=$(TEST_RES:%.txt=$(TESTBUILDDIR)/%.res) $(TESTBUILDDIR)/iscii.res $(TESTBUILDDIR)/icu26_testtypes.res $(TESTBUILDDIR)/icu26e_testtypes.res -ALL_TEST_FILES = $(TEST_DAT_FILES) $(TEST_BRK_FILES) $(TEST_CNV_FILES) $(TEST_RES_FILES) $(TESTOUTDIR)/$(TESTDT)nam.typ +ALL_TEST_FILES = $(TEST_DAT_FILES) $(TEST_SPP_FILES) $(TEST_BRK_FILES) $(TEST_CNV_FILES) $(TEST_RES_FILES) $(TESTOUTDIR)/$(TESTDT)/nam.typ # list $(TESTBUILDDIR)/testdata.lst: $(SRCLISTDEPS) @echo "generating $@ (list of data files)" @-$(RMV) $@ - @for file in $(TEST_RES_FILES) $(TEST_DAT_FILES) $(TEST_CNV_FILES); do \ + @for file in $(TEST_RES_FILES:$(TESTBUILDDIR)/%.res=%.res) $(TEST_DAT_FILES:$(TESTBUILDDIR)/%.icu=%.icu) $(TEST_SPP_FILES:$(TESTBUILDDIR)/%.spp=%.spp) $(TEST_CNV_FILES:$(TESTBUILDDIR)/%.cnv=%.cnv); do \ echo $$file >> $@; \ done; -build-testdata: build-dir $(ALL_TEST_FILES) $(TESTBUILDDIR)/testdata.lst $(TESTBUILDDIR)/$(TESTDT)iscii.res +build-testdata: build-dir $(ALL_TEST_FILES) $(TESTBUILDDIR)/testdata.lst $(TESTBUILDDIR)/iscii.res # test.icu -$(TESTBUILDDIR)/$(TESTDT)test.icu: $(TOOLDIR)/gentest/gentest$(EXEEXT) +$(TESTBUILDDIR)/test.icu: $(TOOLDIR)/gentest/gentest$(EXEEXT) $(INVOKE) $(TOOLDIR)/gentest/gentest -d $(TESTBUILDDIR) $(TESTBUILDDIR)/testtable32.txt: $(TOOLDIR)/gentest/gentest$(EXEEXT) $(INVOKE) $(TOOLDIR)/gentest/gentest -r -d $(TESTBUILDDIR) -$(TESTBUILDDIR)/$(TESTDT)testtable32.res: $(TESTBUILDDIR)/testtable32.txt $(BINDIR)/genrb$(EXEEXT) - $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -p $(TESTDATA) -q -s $(TESTBUILDDIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) $(<F) +$(TESTBUILDDIR)/testtable32.res: $(TESTBUILDDIR)/testtable32.txt $(BINDIR)/genrb$(EXEEXT) + $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -s $(TESTBUILDDIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) $(<F) # Targets for nfscsi.spp -$(TESTBUILDDIR)/$(TESTDT)nfscsi.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_cs_prep_ci.txt +$(TESTBUILDDIR)/nfscsi.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_cs_prep_ci.txt @echo Building nfscsi.icu - $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) -b nfscsi -p $(TESTDATA) -u 3.2.0 nfs4_cs_prep_ci.txt + $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) -b nfscsi -u 3.2.0 nfs4_cs_prep_ci.txt # Targets for nfscss.spp -$(TESTBUILDDIR)/$(TESTDT)nfscss.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_cs_prep_cs.txt +$(TESTBUILDDIR)/nfscss.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_cs_prep_cs.txt @echo Building nfscss.icu - $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) -b nfscss -p $(TESTDATA) -u 3.2.0 nfs4_cs_prep_cs.txt + $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) -b nfscss -u 3.2.0 nfs4_cs_prep_cs.txt # Targets for nfscis.spp -$(TESTBUILDDIR)/$(TESTDT)nfscis.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_cis_prep.txt +$(TESTBUILDDIR)/nfscis.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_cis_prep.txt @echo Building nfscis.spp - $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) -b nfscis -p $(TESTDATA) -k -n $(UNICODEDATADIR) -u 3.2.0 nfs4_cis_prep.txt + $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) -b nfscis -k -n $(UNICODEDATADIR) -u 3.2.0 nfs4_cis_prep.txt # Targets for nfsmxs.spp -$(TESTBUILDDIR)/$(TESTDT)nfsmxs.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_mixed_prep_s.txt +$(TESTBUILDDIR)/nfsmxs.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_mixed_prep_s.txt @echo Building nfsmxs.spp - $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) -b nfsmxs -p $(TESTDATA) -k -n $(UNICODEDATADIR) -u 3.2.0 nfs4_mixed_prep_s.txt + $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) -b nfsmxs -k -n $(UNICODEDATADIR) -u 3.2.0 nfs4_mixed_prep_s.txt # Targets for nfsmxp.spp -$(TESTBUILDDIR)/$(TESTDT)nfsmxp.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_mixed_prep_p.txt +$(TESTBUILDDIR)/nfsmxp.spp: $(BINDIR)/gensprep$(EXEEXT) $(TESTSRCDATADIR)/nfs4_mixed_prep_p.txt @echo Building nfsmxp.spp - $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) -b nfsmxp -p $(TESTDATA) -k -n $(UNICODEDATADIR) -u 3.2.0 nfs4_mixed_prep_p.txt + $(INVOKE) $(BINDIR)/gensprep -s $(TESTSRCDATADIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) -b nfsmxp -k -n $(UNICODEDATADIR) -u 3.2.0 nfs4_mixed_prep_p.txt -$(TESTBUILDDIR)/$(TESTDT)%.cnv: $(TESTSRCDATADIR)/%.ucm $(BINDIR)/makeconv$(EXEEXT) - $(INVOKE) $(BINDIR)/makeconv -p $(TESTDATA) -c -d $(TESTBUILDDIR) $(TESTSRCDATADIR)/$(<F) +$(TESTBUILDDIR)/%.cnv: $(TESTSRCDATADIR)/%.ucm $(BINDIR)/makeconv$(EXEEXT) + $(INVOKE) $(BINDIR)/makeconv -c -d $(TESTBUILDDIR) $(TESTSRCDATADIR)/$(<F) -$(TESTBUILDDIR)/$(TESTDT)%.res: $(TESTSRCDATADIR)/%.txt $(BINDIR)/genrb$(EXEEXT) $(DAT_FILES) - $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -p $(TESTDATA) -q -s $(TESTSRCDATADIR) -i $(BUILDDIR) -d $(TESTBUILDDIR) $(<F) +$(TESTBUILDDIR)/%.res: $(TESTSRCDATADIR)/%.txt $(BINDIR)/genrb$(EXEEXT) $(DAT_FILES) + $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -q -s $(TESTSRCDATADIR) $(ICU_DATA_OPT) -d $(TESTBUILDDIR) $(<F) -$(TESTBUILDDIR)/$(TESTDT)iscii.res: $(TESTSRCDATADIR)/iscii.bin $(BINDIR)/genrb$(EXEEXT) +$(TESTBUILDDIR)/iscii.res: $(TESTSRCDATADIR)/iscii.bin $(BINDIR)/genrb$(EXEEXT) @echo Testing genrb -e option - @ICU_DATA=$(BUILDDIR) $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -s $(TESTSRCDATADIR) -p $(TESTDATA) -eISCII,version=0 -d $(TESTBUILDDIR) $(<F) >/dev/null || ( echo "WARNING: could not open ISCII - it may have been disabled." | tee $@ ) + @ICU_DATA=$(BUILDDIR) $(INVOKE) $(BINDIR)/genrb $(GENRBOPTS) -s $(TESTSRCDATADIR) -eISCII,version=0 -d $(TESTBUILDDIR) $(<F) >/dev/null || ( echo "WARNING: could not open ISCII - it may have been disabled." | tee $@ ) @echo Finished testing genrb -e option ################################################################### TYP # TYP FILES -$(TESTOUTDIR)/$(TESTDT)nam.typ: $(TESTBUILDDIR)/$(TESTDT)te_IN.res +$(TESTOUTDIR)/$(TESTDT)/nam.typ: $(TESTBUILDDIR)/te_IN.res + cp $< $@ +$(TESTBUILDDIR)/icu26_testtypes.res: $(TESTSRCDATADIR)/icu26_testtypes.res + cp $< $@ +$(TESTBUILDDIR)/icu26e_testtypes.res: $(TESTSRCDATADIR)/icu26e_testtypes.res cp $< $@ - testdata: build-dir $(ALL_TEST_FILES) $(UNPACKAGEDTESTDATA) diff --git a/icuSources/test/testdata/SentenceBreakTest.txt b/icuSources/test/testdata/SentenceBreakTest.txt new file mode 100644 index 00000000..481df179 --- /dev/null +++ b/icuSources/test/testdata/SentenceBreakTest.txt @@ -0,0 +1,165 @@ +# Default Sentence Break Test +# Generated: 2003-04-19, 01:55:15 GMT, MED +# +# Format: +# <string> (# <comment>)? +# <string> contains hex Unicode code points, with +# ÷ wherever there is a break opportunity, and +# × wherever there is not. +# <comment> the format can change, but currently it shows: +# - the sample character name +# - (x) the line_break property* for the sample character +# - [x] the rule that determines whether there is a break or not +# +# These samples may be extended or changed in the future. +# +÷ 000A ÷ 000A ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 000A ÷ 00AD ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 000A ÷ 0009 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 000A ÷ 0061 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 000A ÷ 0041 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 000A ÷ 01BB ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 000A ÷ 0030 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 000A ÷ 002E ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 000A ÷ 0021 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 000A ÷ 0022 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 000A ÷ 0001 ÷ # ÷ [1: sot ÷] <LINE FEED (LF)> (Sep) ÷ [3: Sep ÷] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 00AD × 000A ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 00AD × 00AD ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 00AD × 0009 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 00AD × 0061 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 00AD × 0041 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 00AD × 01BB ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 00AD × 0030 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 00AD × 002E ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 00AD × 0021 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 00AD × 0022 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 00AD × 0001 ÷ # ÷ [1: sot ÷] SOFT HYPHEN (Format) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0009 × 000A ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0009 × 00AD ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0009 × 0009 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0009 × 0061 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0009 × 0041 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0009 × 01BB ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0009 × 0030 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0009 × 002E ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0009 × 0021 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0009 × 0022 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0009 × 0001 ÷ # ÷ [1: sot ÷] <CHARACTER TABULATION> (Sp) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 000A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0061 × 00AD ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0009 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0061 × 0041 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0061 × 01BB ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0061 × 0030 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 002E ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0061 × 0021 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0061 × 0022 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0061 × 0001 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (Lower) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0041 × 000A ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0041 × 00AD ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0041 × 0009 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0041 × 0061 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0041 × 0041 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0041 × 01BB ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0041 × 0030 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0041 × 002E ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0041 × 0021 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0041 × 0022 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0041 × 0001 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (Upper) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 01BB × 000A ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 01BB × 00AD ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 01BB × 0009 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 01BB × 0061 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 01BB × 0041 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 01BB × 01BB ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 01BB × 0030 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 01BB × 002E ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 01BB × 0021 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 01BB × 0022 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 01BB × 0001 ÷ # ÷ [1: sot ÷] LATIN LETTER TWO WITH STROKE (OLetter) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0030 × 000A ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0030 × 00AD ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0030 × 0009 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0030 × 0061 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0030 × 0041 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0030 × 01BB ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0030 × 0030 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0030 × 002E ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0030 × 0021 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0030 × 0022 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0030 × 0001 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 002E × 000A ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 002E × 00AD ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 002E × 0009 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 002E × 0061 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [6: ATerm × ( Numeric | Lower )] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 002E × 0041 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 002E ÷ 01BB ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 002E × 0030 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [6: ATerm × ( Numeric | Lower )] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 002E ÷ 002E ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 002E ÷ 0021 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 002E × 0022 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 002E ÷ 0001 ÷ # ÷ [1: sot ÷] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0021 × 000A ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0021 × 00AD ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0021 × 0009 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0021 ÷ 0061 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0021 ÷ 0041 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0021 ÷ 01BB ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0021 ÷ 0030 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0021 ÷ 002E ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0021 ÷ 0021 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0021 × 0022 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0021 ÷ 0001 ÷ # ÷ [1: sot ÷] EXCLAMATION MARK (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0022 × 000A ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0022 × 00AD ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0022 × 0009 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0022 × 0061 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0022 × 0041 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0022 × 01BB ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0022 × 0030 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0022 × 002E ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0022 × 0021 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0022 × 0022 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0022 × 0001 ÷ # ÷ [1: sot ÷] QUOTATION MARK (Close) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0001 × 000A ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] <LINE FEED (LF)> (Sep) ÷ [2: ÷ eot] +÷ 0001 × 00AD ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [5: X Format* -> X] SOFT HYPHEN (Format) ÷ [2: ÷ eot] +÷ 0001 × 0009 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] <CHARACTER TABULATION> (Sp) ÷ [2: ÷ eot] +÷ 0001 × 0061 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] LATIN SMALL LETTER A (Lower) ÷ [2: ÷ eot] +÷ 0001 × 0041 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] LATIN CAPITAL LETTER A (Upper) ÷ [2: ÷ eot] +÷ 0001 × 01BB ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [2: ÷ eot] +÷ 0001 × 0030 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0001 × 002E ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0001 × 0021 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] EXCLAMATION MARK (Term) ÷ [2: ÷ eot] +÷ 0001 × 0022 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] QUOTATION MARK (Close) ÷ [2: ÷ eot] +÷ 0001 × 0001 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [12: Any × Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0028 × 0022 × 0047 × 006F × 002E × 0022 × 0029 × 0020 ÷ 0028 × 0048 × 0065 × 0020 × 0064 × 0069 × 0064 × 002E × 0029 ÷ # ÷ [1: sot ÷] LEFT PARENTHESIS (Other) × [12: Any × Any] QUOTATION MARK (Close) × [12: Any × Any] LATIN CAPITAL LETTER G (Upper) × [12: Any × Any] LATIN SMALL LETTER O (Lower) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] QUOTATION MARK (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LEFT PARENTHESIS (Other) × [12: Any × Any] LATIN CAPITAL LETTER H (Upper) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [12: Any × Any] SPACE (Sp) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [12: Any × Any] LATIN SMALL LETTER I (Lower) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) ÷ [2: ÷ eot] +÷ 0028 × 201C × 0047 × 006F × 003F × 201D × 0029 × 0020 ÷ 0028 × 0048 × 0065 × 0020 × 0064 × 0069 × 0064 × 002E × 0029 ÷ # ÷ [1: sot ÷] LEFT PARENTHESIS (Other) × [12: Any × Any] LEFT DOUBLE QUOTATION MARK (Close) × [12: Any × Any] LATIN CAPITAL LETTER G (Upper) × [12: Any × Any] LATIN SMALL LETTER O (Lower) × [12: Any × Any] QUESTION MARK (Term) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT DOUBLE QUOTATION MARK (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LEFT PARENTHESIS (Other) × [12: Any × Any] LATIN CAPITAL LETTER H (Upper) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [12: Any × Any] SPACE (Sp) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [12: Any × Any] LATIN SMALL LETTER I (Lower) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) ÷ [2: ÷ eot] +÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 002E × 0020 × 0069 × 0073 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER U (Upper) × [12: Any × Any] FULL STOP (ATerm) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER S (Upper) × [12: Any × Any] FULL STOP (ATerm) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER A (Upper) × [4: GC -> FC] COMBINING GRAVE ACCENT (Other) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LATIN SMALL LETTER I (Lower) × [12: Any × Any] LATIN SMALL LETTER S (Lower) ÷ [2: ÷ eot] +÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 003F × 0020 ÷ 0048 × 0065 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER U (Upper) × [12: Any × Any] FULL STOP (ATerm) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER S (Upper) × [12: Any × Any] FULL STOP (ATerm) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER A (Upper) × [4: GC -> FC] COMBINING GRAVE ACCENT (Other) × [12: Any × Any] QUESTION MARK (Term) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LATIN CAPITAL LETTER H (Upper) × [12: Any × Any] LATIN SMALL LETTER E (Lower) ÷ [2: ÷ eot] +÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 002E ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER U (Upper) × [12: Any × Any] FULL STOP (ATerm) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER S (Upper) × [12: Any × Any] FULL STOP (ATerm) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER A (Upper) × [4: GC -> FC] COMBINING GRAVE ACCENT (Other) × [12: Any × Any] FULL STOP (ATerm) ÷ [2: ÷ eot] +÷ 0033 × 002E × 0034 ÷ # ÷ [1: sot ÷] DIGIT THREE (Numeric) × [12: Any × Any] FULL STOP (ATerm) × [6: ATerm × ( Numeric | Lower )] DIGIT FOUR (Numeric) ÷ [2: ÷ eot] +÷ 0063 × 002E × 0064 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER C (Lower) × [12: Any × Any] FULL STOP (ATerm) × [6: ATerm × ( Numeric | Lower )] LATIN SMALL LETTER D (Lower) ÷ [2: ÷ eot] +÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 2018 × 0028 × 0074 × 0068 × 0065 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT SINGLE QUOTATION MARK (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] NO-BREAK SPACE (Sp) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LEFT SINGLE QUOTATION MARK (Close) × [12: Any × Any] LEFT PARENTHESIS (Other) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [12: Any × Any] LATIN SMALL LETTER H (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) ÷ [2: ÷ eot] +÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 ÷ 2018 × 0028 × 0054 × 0068 × 0065 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT SINGLE QUOTATION MARK (Close) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] NO-BREAK SPACE (Sp) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LEFT SINGLE QUOTATION MARK (Close) × [12: Any × Any] LEFT PARENTHESIS (Other) × [12: Any × Any] LATIN CAPITAL LETTER T (Upper) × [12: Any × Any] LATIN SMALL LETTER H (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) ÷ [2: ÷ eot] +÷ 0074 × 0068 × 0065 × 0020 × 0072 × 0065 × 0073 × 0070 × 002E × 0020 × 006C × 0065 × 0061 × 0064 × 0065 × 0072 × 0073 × 0020 × 0061 × 0072 × 0065 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER T (Lower) × [12: Any × Any] LATIN SMALL LETTER H (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [12: Any × Any] SPACE (Sp) × [12: Any × Any] LATIN SMALL LETTER R (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER S (Lower) × [12: Any × Any] LATIN SMALL LETTER P (Lower) × [12: Any × Any] FULL STOP (ATerm) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LATIN SMALL LETTER L (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER A (Lower) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER R (Lower) × [12: Any × Any] LATIN SMALL LETTER S (Lower) × [12: Any × Any] SPACE (Sp) × [12: Any × Any] LATIN SMALL LETTER A (Lower) × [12: Any × Any] LATIN SMALL LETTER R (Lower) × [12: Any × Any] LATIN SMALL LETTER E (Lower) ÷ [2: ÷ eot] +÷ 5B57 × 002E ÷ 5B57 ÷ # ÷ [1: sot ÷] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [12: Any × Any] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) ÷ [2: ÷ eot] +÷ 0065 × 0074 × 0063 × 002E ÷ 5B83 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [12: Any × Any] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [2: ÷ eot] +÷ 0065 × 0074 × 0063 × 002E ÷ 3002 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER E (Lower) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [12: Any × Any] FULL STOP (ATerm) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] IDEOGRAPHIC FULL STOP (Term) ÷ [2: ÷ eot] +÷ 5B57 × 3002 ÷ 5B83 ÷ # ÷ [1: sot ÷] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [12: Any × Any] IDEOGRAPHIC FULL STOP (Term) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [2: ÷ eot] +÷ 2060 × 0028 × 2060 × 0022 × 2060 × 0047 × 2060 × 006F × 2060 × 002E × 2060 × 0022 × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LEFT PARENTHESIS (Other) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER G (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER O (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LEFT PARENTHESIS (Other) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER H (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER I (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0028 × 2060 × 201C × 2060 × 0047 × 2060 × 006F × 2060 × 003F × 2060 × 201D × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LEFT PARENTHESIS (Other) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LEFT DOUBLE QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER G (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER O (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] QUESTION MARK (Term) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT DOUBLE QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LEFT PARENTHESIS (Other) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER H (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER I (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 0020 × 2060 × 0069 × 2060 × 0073 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER U (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER S (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER A (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] COMBINING GRAVE ACCENT (Other) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LATIN SMALL LETTER I (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER S (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 003F × 2060 × 0020 × 2060 ÷ 0048 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER U (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER S (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER A (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] COMBINING GRAVE ACCENT (Other) × [12: Any × Any] QUESTION MARK (Term) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LATIN CAPITAL LETTER H (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER U (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER S (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [7: Upper ATerm × Upper] LATIN CAPITAL LETTER A (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] COMBINING GRAVE ACCENT (Other) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0033 × 2060 × 002E × 2060 × 0034 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] DIGIT THREE (Numeric) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [6: ATerm × ( Numeric | Lower )] DIGIT FOUR (Numeric) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0063 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [6: ATerm × ( Numeric | Lower )] LATIN SMALL LETTER D (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 2018 × 2060 × 0028 × 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT SINGLE QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] NO-BREAK SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LEFT SINGLE QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LEFT PARENTHESIS (Other) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER H (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 ÷ 2018 × 2060 × 0028 × 2060 × 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT PARENTHESIS (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] RIGHT SINGLE QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] NO-BREAK SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] LEFT SINGLE QUOTATION MARK (Close) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LEFT PARENTHESIS (Other) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN CAPITAL LETTER T (Upper) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER H (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 0020 × 2060 × 0072 × 2060 × 0065 × 2060 × 0073 × 2060 × 0070 × 2060 × 002E × 2060 × 0020 × 2060 × 006C × 2060 × 0065 × 2060 × 0061 × 2060 × 0064 × 2060 × 0065 × 2060 × 0072 × 2060 × 0073 × 2060 × 0020 × 2060 × 0061 × 2060 × 0072 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER H (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER R (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER S (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER P (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) × [9: ( Term | ATerm ) Close* × ( Close | Sp | Sep )] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [8: ATerm Close* Sp* × ( ¬(OLetter | Upper | Lower) )* Lower] LATIN SMALL LETTER L (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER A (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER D (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER R (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER S (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] SPACE (Sp) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER A (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER R (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 5B57 × 2060 × 002E × 2060 ÷ 5B57 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 ÷ 3002 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER E (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER T (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] LATIN SMALL LETTER C (Lower) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] FULL STOP (ATerm) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] IDEOGRAPHIC FULL STOP (Term) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 × 5B57 × 2060 × 3002 × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) × [12: Any × Any] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5: X Format* -> X] WORD JOINER (Format) × [12: Any × Any] IDEOGRAPHIC FULL STOP (Term) × [5: X Format* -> X] WORD JOINER (Format) ÷ [11: ( Term | ATerm ) Close* Sp* ÷] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5: X Format* -> X] WORD JOINER (Format) × [5: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +# Lines: 121 diff --git a/icuSources/test/testdata/WordBreakTest.txt b/icuSources/test/testdata/WordBreakTest.txt new file mode 100644 index 00000000..35e743cf --- /dev/null +++ b/icuSources/test/testdata/WordBreakTest.txt @@ -0,0 +1,893 @@ +# Default Word Break Test +# Generated: 2003-04-19, 01:55:11 GMT, MED +# +# Format: +# <string> (# <comment>)? +# <string> contains hex Unicode code points, with +# ÷ wherever there is a break opportunity, and +# × wherever there is not. +# <comment> the format can change, but currently it shows: +# - the sample character name +# - (x) the line_break property* for the sample character +# - [x] the rule that determines whether there is a break or not +# +# These samples may be extended or changed in the future. +# +÷ 0600 × 0600 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 30A1 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0041 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0600 ÷ 0027 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 002E ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 2024 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0030 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0600 ÷ 0001 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0600 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0600 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0600 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] ARABIC NUMBER SIGN (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0600 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 × 0600 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 × 30A1 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) × [13: Katakana × Katakana] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 × 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0041 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 30A1 ÷ 0027 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 002E ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 2024 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0030 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 30A1 ÷ 0001 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 30A1 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 30A1 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 30A1 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] KATAKANA LETTER SMALL A (Katakana) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 30A1 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0600 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0041 ÷ 30A1 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0041 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0041 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 ÷ 002E ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 002E × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 ÷ 2024 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0030 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [9: ALetter × Numeric] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0041 ÷ 0001 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0061 × 2060 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0061 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0041 × 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0041 × 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0061 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 × 0027 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0031 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0031 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0041 × 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] LATIN CAPITAL LETTER A (ALetter) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0041 × 0301 × 0308 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0041 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0027 × 0600 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 30A1 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0041 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0027 × 0301 × 0308 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0027 ÷ 0027 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 002E ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 2024 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0030 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0027 ÷ 0001 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0027 × 0301 × 0308 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0027 × 0301 × 0308 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0027 × 0301 × 0308 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 002E × 0600 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 30A1 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0041 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 002E × 0301 × 0308 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 002E ÷ 0027 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 002E ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 2024 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0030 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 002E ÷ 0001 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 002E × 0301 × 0308 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 002E × 0301 × 0308 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 002E ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 002E × 0301 × 0308 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 002E ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 002E × 0301 × 0308 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 002E × 0301 × 0308 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 002E ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] FULL STOP (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002E × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 2024 × 0600 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 30A1 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0041 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 2024 ÷ 0027 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 002E ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 2024 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0030 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 2024 ÷ 0001 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 2024 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 2024 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 2024 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] ONE DOT LEADER (MidNum) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 2024 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0600 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0030 ÷ 30A1 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0041 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [10: Numeric × ALetter] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0030 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 ÷ 002E ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 ÷ 2024 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0030 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [8: Numeric × Numeric] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0030 ÷ 0001 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0061 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0061 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0030 × 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0030 × 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0061 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0031 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [8: Numeric × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [8: Numeric × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0031 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [8: Numeric × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0030 × 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] DIGIT ZERO (Numeric) × [8: Numeric × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0030 × 0301 × 0308 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0030 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0001 × 0600 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 30A1 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0041 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0001 ÷ 0027 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 002E ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 2024 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0030 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0001 ÷ 0001 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0001 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0001 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0001 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] <START OF HEADING> (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0001 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0600 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 ÷ 30A1 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0041 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 2060 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 ÷ 002E ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 ÷ 2024 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0030 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [9: ALetter × Numeric] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 2060 ÷ 0001 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0061 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0061 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 2060 × 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0061 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0031 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0031 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [9: ALetter × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A × 0600 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 30A1 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 003A × 0041 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] COLON (MidNumLet) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 003A × 0301 × 0308 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 003A ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 002E ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 2024 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 0030 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 003A ÷ 0001 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 003A × 0061 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] COLON (MidNumLet) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 003A × 0301 × 0308 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 003A × 0061 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] COLON (MidNumLet) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 003A × 0301 × 0308 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 003A × 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] COLON (MidNumLet) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 003A × 0301 × 0308 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 003A × 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] COLON (MidNumLet) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 003A × 0301 × 0308 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 003A × 0061 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] COLON (MidNumLet) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 003A × 0301 × 0308 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 0600 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 30A1 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 0041 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 0027 × 0301 × 0308 × 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 002E ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 2024 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0030 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0001 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 0061 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 0027 × 0301 × 0308 × 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 0061 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 0027 × 0301 × 0308 × 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0027 × 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 0027 × 0301 × 0308 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0027 × 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 0061 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 × 0027 × 0301 × 0308 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 × 0600 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 30A1 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 2060 × 0041 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 002E ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 2024 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0030 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0001 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 2060 × 0061 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 2060 × 0061 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0027 × 2060 × 0061 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C × 0600 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 30A1 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0041 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002C ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 002E ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 2024 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0030 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002C ÷ 0001 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0061 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A × 0600 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 30A1 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 0041 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 003A ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 002E ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 2024 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 003A × 0030 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] COLON (MidNumLet) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0031 × 003A × 0301 × 0308 × 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 003A ÷ 0001 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 003A × 0031 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] COLON (MidNumLet) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 × 003A × 0301 × 0308 × 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 003A × 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] COLON (MidNumLet) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 × 003A × 0301 × 0308 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 003A × 0031 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] COLON (MidNumLet) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 × 003A × 0301 × 0308 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 003A × 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] COLON (MidNumLet) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 × 003A × 0301 × 0308 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 003A × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 × 0600 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 30A1 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0041 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 002E ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 2024 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0030 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0001 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 0027 × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C × 0600 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 30A1 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0041 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002C ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 002E ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 2024 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0030 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002C ÷ 0001 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002C × 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 × 0600 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] ARABIC NUMBER SIGN (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 × 0600 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 30A1 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] KATAKANA LETTER SMALL A (Katakana) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 30A1 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0041 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN CAPITAL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0041 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 002E ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 002E × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 2024 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] ONE DOT LEADER (MidNum) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 2024 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 002E × 2060 × 0030 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ZERO (Numeric) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0030 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0001 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] <START OF HEADING> (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0001 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0061 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 003A × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 × 0027 × 0301 × 0308 × 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0061 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 002E × 2060 × 0031 ÷ 003A ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COLON (MidNumLet) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 003A × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 002E × 2060 × 0031 ÷ 0027 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] APOSTROPHE (MidLetter) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 0027 × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 002E × 2060 × 0031 ÷ 002C ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002C × 0301 × 0308 ÷ 0061 ÷ +÷ 0031 × 002E × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [1: sot ÷] DIGIT ONE (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) ÷ [14: Any ÷ Any] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0061 × 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ 0301 × 0308 ÷ 0061 ÷ +÷ 0063 × 0061 × 006E × 0027 × 0074 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER C (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER N (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER T (ALetter) ÷ [2: ÷ eot] +÷ 0063 × 0061 × 006E × 2019 × 0074 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER C (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER N (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] RIGHT SINGLE QUOTATION MARK (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER T (ALetter) ÷ [2: ÷ eot] +÷ 0061 × 0062 × 00AD × 0062 × 0079 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER B (ALetter) × [6: ALetter × (MidLetter | MidNumLet) ALetter] SOFT HYPHEN (MidLetter) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER B (ALetter) × [5: ALetter × ALetter] LATIN SMALL LETTER Y (ALetter) ÷ [2: ÷ eot] +÷ 0061 ÷ 0024 ÷ 002D ÷ 0033 × 0034 ÷ 002C ÷ 0035 × 0036 × 0037 × 002E × 0031 × 0034 ÷ 0025 ÷ 0062 ÷ # ÷ [1: sot ÷] LATIN SMALL LETTER A (ALetter) ÷ [14: Any ÷ Any] DOLLAR SIGN (Other) ÷ [14: Any ÷ Any] HYPHEN-MINUS (Other) ÷ [14: Any ÷ Any] DIGIT THREE (Numeric) × [8: Numeric × Numeric] DIGIT FOUR (Numeric) ÷ [14: Any ÷ Any] COMMA (Other) ÷ [14: Any ÷ Any] DIGIT FIVE (Numeric) × [8: Numeric × Numeric] DIGIT SIX (Numeric) × [8: Numeric × Numeric] DIGIT SEVEN (Numeric) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) × [8: Numeric × Numeric] DIGIT FOUR (Numeric) ÷ [14: Any ÷ Any] PERCENT SIGN (Other) ÷ [14: Any ÷ Any] LATIN SMALL LETTER B (ALetter) ÷ [2: ÷ eot] +÷ 0033 × 0061 ÷ # ÷ [1: sot ÷] DIGIT THREE (Numeric) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) ÷ [2: ÷ eot] +÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 0027 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER C (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER N (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [6: ALetter × (MidLetter | MidNumLet) ALetter] APOSTROPHE (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER T (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 2019 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER C (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER N (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [6: ALetter × (MidLetter | MidNumLet) ALetter] RIGHT SINGLE QUOTATION MARK (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER T (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 ÷ 0061 × 2060 × 0062 × 2060 × 00AD × 2060 × 0062 × 2060 × 0079 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER B (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [6: ALetter × (MidLetter | MidNumLet) ALetter] SOFT HYPHEN (MidLetter) × [4: X Format* -> X] WORD JOINER (Format) × [7: ALetter (MidLetter | MidNumLet) × ALetter] LATIN SMALL LETTER B (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [5: ALetter × ALetter] LATIN SMALL LETTER Y (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 ÷ 0061 × 2060 ÷ 0024 × 2060 ÷ 002D × 2060 ÷ 0033 × 2060 × 0034 × 2060 ÷ 002C × 2060 ÷ 0035 × 2060 × 0036 × 2060 × 0037 × 2060 × 002E × 2060 × 0031 × 2060 × 0034 × 2060 ÷ 0025 × 2060 ÷ 0062 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DOLLAR SIGN (Other) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] HYPHEN-MINUS (Other) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT THREE (Numeric) × [4: X Format* -> X] WORD JOINER (Format) × [8: Numeric × Numeric] DIGIT FOUR (Numeric) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] COMMA (Other) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT FIVE (Numeric) × [4: X Format* -> X] WORD JOINER (Format) × [8: Numeric × Numeric] DIGIT SIX (Numeric) × [4: X Format* -> X] WORD JOINER (Format) × [8: Numeric × Numeric] DIGIT SEVEN (Numeric) × [4: X Format* -> X] WORD JOINER (Format) × [12: Numeric × (MidNum | MidNumLet) Numeric] FULL STOP (MidNumLet) × [4: X Format* -> X] WORD JOINER (Format) × [11: Numeric (MidNum | MidNumLet) × Numeric] DIGIT ONE (Numeric) × [4: X Format* -> X] WORD JOINER (Format) × [8: Numeric × Numeric] DIGIT FOUR (Numeric) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] PERCENT SIGN (Other) × [4: X Format* -> X] WORD JOINER (Format) ÷ [14: Any ÷ Any] LATIN SMALL LETTER B (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +÷ 2060 ÷ 0033 × 2060 × 0061 × 2060 × 2060 ÷ # ÷ [1: sot ÷] WORD JOINER (Format) ÷ [14: Any ÷ Any] DIGIT THREE (Numeric) × [4: X Format* -> X] WORD JOINER (Format) × [10: Numeric × ALetter] LATIN SMALL LETTER A (ALetter) × [4: X Format* -> X] WORD JOINER (Format) × [4: X Format* -> X] WORD JOINER (Format) ÷ [2: ÷ eot] +# Lines: 867 diff --git a/icuSources/test/testdata/casing.txt b/icuSources/test/testdata/casing.txt index c4c3bb14..709de5b8 100644 --- a/icuSources/test/testdata/casing.txt +++ b/icuSources/test/testdata/casing.txt @@ -1,24 +1,42 @@ //******************************************************************************* //* -//* Copyright (C) 2002, International Business Machines +//* Copyright (C) 2002-2006, International Business Machines //* Corporation and others. All Rights Reserved. //* //******************************************************************************* -casing { +casing:table(nofallback) { Info { - Description { "This is test data file for string casing" } + Description { "This is test data file for string casing." } - LongDescription { "each item is an array with" - "input string, result string, locale ID, break iterator" - "the break iterator is specified as an int, same as in UBreakIteratorType:" - "0=UBRK_CHARACTER 1=UBRK_WORD 2=UBRK_LINE 3=UBRK_SENTENCE 4=UBRK_TITLE -1=default" - } + LongDescription { + "each item is an array with\n" + "input string, result string, locale ID[, break iterator]\n" + "the break iterator (only for titlecasing) is specified as an int, same as in UBreakIteratorType:\n" + "0=UBRK_CHARACTER 1=UBRK_WORD 2=UBRK_LINE 3=UBRK_SENTENCE 4=UBRK_TITLE -1=default\n" + } } TestData { + lowercasing { + Headers { "Input", "Output", "Locale" } + Cases { + { " tHe QUIcK bRoWn", " the quick brown", "" }, + { "aBIΣßΣ/ñŸ¿¿ð…", "abiσßς/ñŸ¿¿ð­", "" }, + { "aBIΣßΣ/ñŸ¿¿ð…", "abıσßς/ñŸ¿¿ð­", "tur" } // tur: 3-letter code for Turkish + } + } + uppercasing { + Headers { "Input", "Output", "Locale" } + Cases { + { " tHe QUIcK bRoWn", " THE QUICK BROWN", "" }, + { "aBiσßς/ffiñŸ¿¿ð­", "ABIΣSSΣ/FFIñŸ¿¿ð…", "" }, + { "aBiσßς/ffiñŸ¿¿ð­", "ABİΣSSΣ/FFIñŸ¿¿ð…", "az" } // az same casing as tr + } + } titlecasing { Headers { "Input", "Output", "Locale", "Type" } Cases { + { "Ê»aMeLikA huI PÅ« ʻʻʻiA", "Ê»Amelika Hui PÅ« ʻʻʻIa", "", "-1" }, // titlecase first _cased_ letter, j4933 { " tHe QUIcK bRoWn", " The Quick Brown", "", "4" }, { "DŽDždžLJLjljNJNjnj", "DžDžDžLjLjLjNjNjNj", "", "0" }, // UBRK_CHARACTER { "ljubav ljubav", "Ljubav Ljubav", "", "-1" }, // Lj vs. L+j diff --git a/icuSources/test/testdata/conversion.txt b/icuSources/test/testdata/conversion.txt index a73ac8bf..4e94f471 100644 --- a/icuSources/test/testdata/conversion.txt +++ b/icuSources/test/testdata/conversion.txt @@ -1,6 +1,6 @@ //******************************************************************************* // -// Copyright (C) 2003-2004, International Business Machines +// Copyright (C) 2003-2006, International Business Machines // Corporation and others. All Rights Reserved. // // file name: conversion.txt @@ -15,7 +15,7 @@ // //******************************************************************************* -conversion { +conversion:table(nofallback) { Info { Description { "Test data for conversion" } LongDescription { @@ -29,11 +29,16 @@ conversion { "Callback option - a letter is passed in directly as const char * see ucnv_err.h\n" "Empty string: Sub callback with NULL option\n" - "In order to specify a charset substitution character,\n" + "In order to specify a charset substitution character (for ucnv_setSubstChars()),\n" "add a NUL (U+0000) to the callback string followed by the subchar bytes as Latin-1\n" "characters. For example, for a Sub callback with no option and a subchar of FC FC,\n" "use the string \"?\x00\xFC\xFC\"\n" + "In order to specify a substitution string (for ucnv_setSubstString()),\n" + "add an '=' to the callback string followed by the substitution string.\n" + "For example, for a Sub callback with no option and a substitution string\n" + "of \"ab\", use the string \"?=ab\"\n" + "fallbacks: per-direction boolean, currently only for fromUnicode; see Jitterbug 2401\n" "errorCode: (empty)==zero | invalid | illegal | truncated | illesc | unsuppesc\n" @@ -445,6 +450,119 @@ conversion { fromUnicode { Headers { "charset", "unicode", "bytes", "offsets", "flush", "fallbacks", "errorCode", "callback", "invalidUChars" } Cases { + { + "SCSU", + "1\U00010001\u0085\U000500022\ud8003\udc014\ue001", + :bin{ 310be0008102050fd900dc02e7320efffd330efffd34186881 }, + :intvector{ 0,1,1,1,1,3,3,4,4,4,4,4,6,6,7,7,7,8,9,9,9,10,11,11,11 }, + :int{1}, :int{0}, "", "?", "" + } + // Test substitution strings. + { + "windows-1252", // stateless MBCS with WriteSub(), should internally set char * + "a\ufdd0c", + :bin{ 61402421402463 }, + :intvector{ 0,1,1,1,1,1,2 }, + :int{1}, :int{0}, "", "?=@$!@$", "" + } + { + "ibm-930", // stateful MBCS + "a\ufdd0\u4e00\ufdd0e", + :bin{ 620e4bce0f400e45414bce0f4066 }, + :intvector{ 0,1,1,1,1,1,2,2,2,3,3,3,3,4 }, + :int{1}, :int{0}, "", "?=\u4e01 ", "" + } + { + "iso-2022-jp", + "a\x1bc", // Unicode ESC must not occur as a character + :bin{ 6163 }, + :intvector{ 0,2 }, + :int{1}, :int{0}, "", "?=", "" // empty substitution string + } + { + "iso-2022-cn", + "a\x1bc", // Unicode ESC must not occur as a character + :bin{ 61202063 }, + :intvector{ 0,1,1,2 }, + :int{1}, :int{0}, "", "?= ", "" + } + { + "iso-2022-cn", + "a\x1bc", // Unicode ESC must not occur as a character + :bin{ 611b2429410e523b0f2063 }, + :intvector{ 0,1,1,1,1,1,1,1,1,1,2 }, + :int{1}, :int{0}, "", "?=\u4e00 ", "" + } + { + "us-ascii", + "a\x85c", + :bin{ 61402421402463 }, + :intvector{ 0,1,1,1,1,1,2 }, + :int{1}, :int{0}, "", "?=@$!@$", "" + } + // ISO 2022-CN: test a single-byte subchar, j5171 + { + "iso-2022-cn", + "a\x1bc", // Unicode ESC must not occur as a character + :bin{ 612163 }, + :intvector{ 0,1,2 }, + :int{1}, :int{0}, "", "?\x00\x21", "" + } + // UTF-16/32: do not output a BOM if there is no data at all + { + "UTF-16", + "", + :bin{ "" }, + :intvector{ }, + :int{1}, :int{1}, "", "?", "" + } + { + "UTF-32", + "", + :bin{ "" }, + :intvector{ }, + :int{1}, :int{1}, "", "?", "" + } + + // do not convert SO/SI/ESC + { + "iso-2022-jp", + "A\x0eB\x0f\x09\x1bC", + :bin{ 411a421a091a43 }, + :intvector{ 0,1,2,3,4,5,6 }, + :int{1}, :int{1}, "", "?", "" + } + { + "iso-2022-cn", + "A\x0eB\x0f\x09\x1bC", + :bin{ 411a421a091a43 }, + :intvector{ 0,1,2,3,4,5,6 }, + :int{1}, :int{1}, "", "?", "" + } + { + "iso-2022-kr", + "A\x0eB\x0f\x09\x1bC", + :bin{ 1b242943411a421a091a43 }, + :intvector{ -1,-1,-1,-1,0,1,2,3,4,5,6 }, + :int{1}, :int{1}, "", "?", "" + } + { + "ibm-25546", + "A\x0eB\x0f\x09\x1bC", + :bin{ 1b242943411a421a091a43 }, + :intvector{ -1,-1,-1,-1,0,1,2,3,4,5,6 }, + :int{1}, :int{1}, "", "?", "" + } + + // test ISO 8859-1/7 vs. JIS X 0201 + { + "ISO-2022-JP-2", + "?@A\u00e4\u03b1\u203EB", + :bin{ 3f40411B2E411B4E641B2E461B4E611B284A7E421B2842 }, + :intvector{ 0,1,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6,6,6 }, + :int{1}, :int{1}, "", "?", "" + } + // Improve ucnv_ext.c code coverage: // There will be a partial match up to the lead surrogate of U+603ff // which then results in one more unit in the prefetch buffer @@ -855,6 +973,14 @@ conversion { } { "UTF-16BE", "\ud800", :bin{""}, :intvector{}, :int{1}, :int{0}, "truncated", ".", "\ud800" } + { + "SCSU", + "1\U00010001\u00082\ud8003\udc014\ue001", + :bin{ 310be000810108320efffd330efffd34186881 }, + :intvector{ 0, 1, 1, 1, 1, 3, 3, 4, 5, 5, 5, 6, 7, 7, 7, 8, 9, 9, 9 }, + :int{1}, :int{0}, "", "?", "" + } + // escape callback { "ISCII", @@ -927,39 +1053,115 @@ conversion { // which - numeric UConverterUnicodeSet value Headers { "charset", "map", "mapnot", "which" } Cases { - // ISO-2022-KR + // Unicode charsets that do not map surrogate code points + { + "UTF-8", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + { + "UTF-16", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + { + "UTF-16BE", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + { + "UTF-16LE", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + { + "UTF-32", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + { + "UTF-32BE", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + { + "UTF-32LE", + "[\x00-\ud7ff\ue000-\U0010ffff]", + "[\ud800-\udfff]", + :int{0} + } + + // Unicode charsets that do map surrogate code points + { + "UTF-7", + "[\x00-\U0010ffff]", + "[]", + :int{0} + } + { + "SCSU", + "[\x00-\U0010ffff]", + "[]", + :int{0} + } + { + "BOCU-1", + "[\x00-\U0010ffff]", + "[]", + :int{0} + } + { + "CESU-8", + "[\x00-\U0010ffff]", + "[]", + :int{0} + } + + // versions of ISO-2022-KR { "ISO-2022-KR", - "[\x00-\x7f\xa1\xa4\xfe\u0111\u4e00\u4e01\uac00-\uac02\uffe6]", - "[\x80-\xa0\xa3\xa5\xff-\u0110\uac03\uffe7-\U0010ffff]", + "[\x00-\x0d\x10-\x1a\x1c-\x7f\xa1\xa4\xfe\u0111\u4e00\u4e01\uac00-\uac02\uffe6]", + "[\x0e\x0f\x1b\x80-\xa0\xa3\xa5\xff-\u0110\uac03\uffe7-\U0010ffff]", + :int{0} + } + { + "ibm-25546", + "[\x00-\x0d\x10-\x1a\x1c-\x7f\xa1\xa4\xfe\u0111\u4e00\u4e01\uac00-\uac01\uffe6]", + "[\x0e\x0f\x1b\x80-\xa0\xa3\xa5\xff-\u0110\uac02\uffe7-\U0010ffff]", :int{0} } // versions of ISO-2022-JP { "ISO-2022-JP", - "[\x00-\x7f\u0391-\u03a1\uff61-\uff9f\u4e00\u4e01\uffe5]", - "[\u0100-\u0113\u0385-\u038a\u4e02\u4e27-\u4e29\uffe6-\U0010ffff]", + "[\x00-\x0d\x10-\x1a\x1c-\x7f\u0391-\u03a1\uff61-\uff9f\u4e00\u4e01\uffe5]", + "[\x0e\x0f\x1b\u0100-\u0113\u0385-\u038a\u4e02\u4e27-\u4e29\uffe6-\U0010ffff]", :int{0} } { "ISO-2022-JP-2", - "[\x00-\u0113\u0385-\u038a\u0390-\u03a1\uff61-\uff9f\u4e00-\u4e05\uffe6]", - "[\uffe7-\U0010ffff]", + "[\x00-\x0d\x10-\x1a\x1c-\u0113\u0385-\u038a\u0390-\u03a1\uff61-\uff9f\u4e00-\u4e05\uffe6]", + "[\x0e\x0f\x1b\uffe7-\U0010ffff]", :int{0} } // versions of ISO-2022-CN { "ISO-2022-CN", - "[\x00-\x7f\u4e00\u4e01\u9f98\ufe6b]", - "[\u4e29\uffe6-\U0010ffff]", + "[\x00-\x0d\x10-\x1a\x1c-\x7f\u4e00\u4e01\u9f98\ufe6b]", + "[\x0e\x0f\x1b\u4e29\uffe6-\U0010ffff]", :int{0} } { "ISO-2022-CN-EXT", - "[\x00-\x7f\u4e00-\u4e05\u9f98\ufe6b\u4e28-\u4e2b\U00020000\U00020003-\U00020005\U00029664]", - "[\U00020001\U00020002\U0002a6d7-\U0010ffff]", + "[\x00-\x0d\x10-\x1a\x1c-\x7f\u4e00-\u4e05\u9f98\ufe6b\u4e28-\u4e2b\U00020000\U00020003-\U00020005\U00029664]", + "[\x0e\x0f\x1b\U00020001\U00020002\U0002a6d7-\U0010ffff]", :int{0} } diff --git a/icuSources/test/testdata/csdetest.xml b/icuSources/test/testdata/csdetest.xml new file mode 100644 index 00000000..edef3c47 --- /dev/null +++ b/icuSources/test/testdata/csdetest.xml @@ -0,0 +1,550 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- Copyright (c) 2005-2006 IBM Corporation and others. All rights reserved --> +<!-- See individual test cases for their specific copyright. --> + +<charset-detection-tests> + <test-case id="IUC10-ar" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-6/ar windows-1256/ar"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + أوروبا, برمجيات الحاسوب + انترنيت : + تصبح عالميا مع يونيكود + IUC10 + تسجّل الآن لحضور المؤتمر الدولي العاشر ليونيكود, الذي سيعقد في 10-12 آذار 1997 بمدينة ماينتس, + ألمانيا. وسيجمع المؤتمر بين خبراء من كافة قطاعات الصناعة على الشبكة العالمية انترنيت ويونيكود, حيث ستتم, + على الصعيدين الدولي والمحلي على حد سواء مناقشة سبل استخدام يونكود في النظم القائمة وفيما يخص التطبيقات + الحاسوبية, الخطوط, تصميم النصوص والحوسبة متعددة اللغات. + + Unicode + عندما يريد العالم أن يتكلّم, فهو يتحدّث بلغة يونيكود + + </test-case> + + <test-case id="IUC10-da-Q" encodings="UTF-8 UTF-32BE UTF-32LE windows-1252/da"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software + Internet: + Bliv global med Unicode + IUC10 + Indskriv dig nu til den tiende internationale Unicode-konference, der holdes den 10-12 + marts 1997 i Mainz, Tyskland. Konferencen samler eksperter fra hele verden inden for det + globale Internet og Unicode, internationalisering og lokalisering, implementering af + Unicode i styresystemer og programmer, skrifttyper, tekst-layout og flersproget databehandling. + + Unicode + NÃ¥r verden vil tale, taler den “Unicode.” + + </test-case> + + <test-case id="IUC10-da" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/da"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software + Internet: + Bliv global med Unicode + IUC10 + Indskriv dig nu til den tiende internationale Unicode-konference, der holdes den 10-12 + marts 1997 i Mainz, Tyskland. Konferencen samler eksperter fra hele verden inden for det + globale Internet og Unicode, internationalisering og lokalisering, implementering af + Unicode i styresystemer og programmer, skrifttyper, tekst-layout og flersproget databehandling. + + Unicode + NÃ¥r verden vil tale, taler den Unicode. + + </test-case> + + <test-case id="IUC10-de" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/de"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software + das Internet: + International mit Unicode + IUC10 + Melden Sie sich jetzt für die 10. Internationale Unicode Konferenz an, die in der Zeit vom 10.-12. März 1997 in + Mainz stattfinden wird. Die Konferenz ist ein Treffpunkt für Betriebsexperten aus den Bereichen globales + Internet und Unicode, Internationalisierung und Lokalisierung, die Implementierung von Unicode in + Betriebssystemen und Programmen, sowie für Schriftarten, Textlayout und mehrsprachige Computeranwendungen. + + Unicode + Wenn die Welt miteinander spricht, spricht sie Unicode. + + </test-case> + + <!-- No UTF-8 in this test because there are no non-ASCII characters. --> + <test-case id="IUC10-en" encodings="UTF-32BE UTF-32LE ISO-8859-1/en"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europe, Software + the Internet: + Going Global with Unicode + IUC10 + Register now for the Tenth International Unicode Conference, to be held on March 10-12, 1997, + in Mainz, Germany. The Conference will bring together industry-wide experts on the global Internet and + Unicode, internationalization and localization, implementation of Unicode in operating systems and applications, + fonts, text layout, and multilingual computing. + + Unicode + When the world wants to talk, it speaks Unicode. + + </test-case> + + <test-case id="IUC10-es" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/es"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software + el Internet: + Mundializando con Unicode + IUC10 + Inscríbase ahora para la Décima Conferencia Internacional Unicode, que tendrá lugar del 10 al 12 de marzo de + 1997 en Maguncia, Alemania. La Conferencia reunirá expertos de los sectores de la mundialización del Internet y + Unicode, la internacionalización y localización, implementación de Unicode en sistemas operativos y aplicaciones, + tipos, composición de texto e informática multilingüe. + + Unicode + Cuando el mundo quiere conversar, habla Unicode. + + </test-case> + + <test-case id="IUC10-fr" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/fr"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + L'Europe, le logiciel et l'Internet : + la mondialisation avec Unicode + IUC10 + Inscrivez-vous dès maintenant à la dixième Conférence internationale sur Unicode, qui se tiendra du 10 au 12 + mars 1997 à Mayence, en Allemagne. Cette conférence rassemblera des experts de tous les horizons industriels + sur les sujets suivants : l'Internet mondial et Unicode, l'internationalisation et l'adaptation locale, + l'implémentation d'Unicode dans les systèmes d'exploitation et les applications, les polices de caractères, + la disposition de texte, l'informatique plurilingue. + + Unicode + Quand le monde veut communiquer, il parle en Unicode. + + </test-case> + + <test-case id="IUC10-he" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-8-I/he"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + אירופה, תוכנה והאינטרנט: + Unicode יוצא לשוק העולמי + IUC10 + הירשמו כעת לכנס Unicode הבינלאומי העשירי, שייערך בין התאריכים 12-10 במרץ 1997, במיינץ שבגרמניה. בכנס + ישתתפו מומחים מכל ענפי התעשייה בנושא האינטרנט העולמי וה-Unicode, בהתאמה לשוק הבינלאומי והמקומי, ביישום + Unicode במערכות הפעלה וביישומים, בגופנים, בפריסת טקסט ובמחשוב רב-לשוני. + + Unicode + כאשר העולם רוצה לדבר, הוא מדבר ב-Unicode + + </test-case> + + <test-case id="IUC10-he-Q" encodings="UTF-8 UTF-32BE UTF-32LE windows-1255/he"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + אירופה, תוכנה והאינטרנט: + Unicode יוצא לשוק העולמי + IUC10 + הירשמו כעת לכנס Unicode הבינלאומי העשירי, שייערך בין התאריכים 12-10 במרץ 1997, במיינץ שבגרמניה. בכנס + ישתתפו מומחים מכל ענפי התעשייה בנושא האינטרנט העולמי וה-Unicode, בהתאמה לשוק הבינלאומי והמקומי, ביישום + Unicode במערכות הפעלה וביישומים, בגופנים, בפריסת טקסט ובמחשוב רב-לשוני. + + Unicode + כאשר העולם רוצה לדבר, הוא מדבר -“Unicode.” + + </test-case> + + <test-case id="IUC10-hu" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-2/hu"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Európa, a Szoftver s az Internet - + Globálissá Változik a Unicode Által + IUC10 + Iratkozzon már most a Tizedik Nemzetközi Unicode Konferenciára, amely Március 10-12 1997 + lesz megtartva, Meinz-be, Németországba. Ebben a Konferencián az iparág szerte sok szakértő + fog részt venni: a globális Internet s Unicode nemzetközisítése s lokalizálása, a + Unicode beteljesítése a működő rendszerekben s alkalmazásokban, fontokba, szöveg + térbeosztásba s többnyelvű computerekben. + + Unicode + Ha a világ beszélni akar, azt Unicode-ul mondja. + + </test-case> + + <test-case id="IUC10-hu-Q" encodings="UTF-8 UTF-32BE UTF-32LE windows-1250/hu"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Európa, a Szoftver s az Internet - + Globálissá Változik a Unicode Által + IUC10 + Iratkozzon már most a Tizedik Nemzetközi Unicode Konferenciára, amely Március 10-12 1997 + lesz megtartva, Meinz-be, Németországba. Ebben a Konferencián az iparág szerte sok szakértő + fog részt venni: a globális Internet s Unicode nemzetközisítése s lokalizálása, a + Unicode beteljesítése a működő rendszerekben s alkalmazásokban, fontokba, szöveg + térbeosztásba s többnyelvű computerekben. + + Unicode + Ha a világ beszélni akar, azt “Unicode”-ul mondja. + + </test-case> + + <test-case id="IUC10-it" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/it"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, software e Internet: + Globalizzazione con Unicode + IUC10 + Iscrivetevi subito alla X Conferenza Internazionale su Unicode, che si terrà dal 10 al 12 marzo 1997 a + Mainz in Germania. Alla Conferenza parteciperanno esperti di tutti i settori per discutere di Internet globale e + Unicode, internazionalizzazione e localizzazione, implementazione di Unicode in sistemi operativi e applicazioni, + caratteri, composizione dei testi ed elaborazione multilingue. + + Unicode + Quando il mondo vuole comunicare, parla Unicode. + + </test-case> + + <test-case id="IUC10-jp" encodings="UTF-8 UTF-32BE UTF-32LE Shift_JIS EUC-JP ISO-2022-JP"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + ヨーロッパ、ソフトウェア、そしてインターネット: + Unicode でグローバル化を狙って + IUC10 + 第 10 回の Unicode 会議は 1997 å¹´ 3 月 10-12日、ドイツのマインツで開かれます。参加希望の方は今すぐ登録してください。 + この会議では、グローバルなインタネット、Unicode、ソフトウェアの国際化およびローカリゼーション、OS およびアプリケーションでの + Unicode のインプリメンテーション、フォント、テキスト表示、マルチ言語コンピューティングにおける業界の専門家が集まります。 + + Unicode + 世界的に話すなら、Unicode です。 + + </test-case> + + <test-case id="IUC10-ko" encodings="UTF-8 UTF-32BE UTF-32LE EUC-KR ISO-2022-KR"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + 유럽, 소프트웨어 그리고 인터넷: + 유니코드와 함께 세계로 + IUC10 + 제10회 유니코드 국제 회의가 1997년 3월 10일부터 12일까지 독일의 마인즈에서 열립니다. 지금 등록하십시오. + 이 회의에서는 업계 전반의 전문가들이 함께 모여 다음과 같은 분야를 다룹니다. - 인터넷과 유니코드, 국제화와 지역화, + 운영 체제와 응용 프로그램에서 유니코드의 구현, 글꼴, 문자 배열, 다국어 컴퓨팅. + + Unicode + 세계를 향한 대화, 유니코드로 하십시오 + + </test-case> + + <!-- No UTF-8 in this test because there are no non-ASCII characters. --> + <test-case id="IUC10-nl" encodings="UTF-32BE UTF-32LE ISO-8859-1/nl"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software + het Internet: + wereldwijd met Unicode + IUC10 + Meld u nu aan voor de Tiende Internationale Unicode-conferentie, die van 10 tot 12 maart 1997 in + Mainz (Duitsland) wordt gehouden. De Conferentie is een ontmoetingsplaats voor experts uit de industrie op het + gebied van het wereldwijde Internet en Unicode, internationalisatie en localisatie, implementatie van Unicode in + besturingssystemen en applicaties, lettertypes, tekstopmaak en meertalig computergebruik. + + Unicode + Als de wereld wil praten, spreekt hij Unicode. + + </test-case> + + <!-- No language for ISO-8859-1 in this test because no-BO is recogonized as Danish... --> + <test-case id="IUC10-no-BO" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Programvare og Internet: + Global fokus med Unicode + IUC10 + Registrer deg som deltager pÃ¥ den tiende inernasjonale Unicode konferansen i Mainz, Tyskland, fra 10. til 12. mars, + 1997. Konferansen vil samle eksperter pÃ¥ Internet, Unicode, internasjonalisering og integrasjon av Unicode i + operativsystemer og programmer, fonter, tekst layout og flersprÃ¥klig databehandling. + + Unicode + NÃ¥r verden vil snakke, snakker den Unicode + + </test-case> + + <test-case id="IUC10-no-NY" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/no"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, programvare og Internett: + Femn verda med Unicode + IUC10 + Meld deg pÃ¥ den 10. internasjonale Unicode-konferansen. Han gÃ¥r føre seg i Mainz i Tyskland i dagane 10.--12. mars + 1997, og samlar fagkunnige innan konferansetemaet frÃ¥ heile databransjen. Tema: Det globale Internettet og + Unicode, internasjonalisering og nasjonal tilpassing, implementering av Unicode i operativsystem og brukarprogram, + skriftsnitt (fontar), tekstutlegg, og fleirsprÃ¥kleg databehandling. + + Unicode + NÃ¥r verda ønskjer Ã¥ snakke, talar ho Unicode + + </test-case> + + <test-case id="IUC10-pt-BR" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/pt"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software e a Internet: + Globalização com o Unicode + IUC10 + Inscreva-se agora para a Décima Conferência Internacional Sobre O Unicode, realizada entre os dias 10 e 12 de + março de 1997 em Mainz na Alemanha. A Conferência reunirá peritos de todas as áreas da indústria especializados + em assuntos relacionados com a Internet global e o Unicode, internacionalização e localização de software, + implementação do Unicode em sistemas operacionais e aplicativos, fontes, layout de texto e informática multilíngüe. + + Unicode + Quando o mundo quer falar, fala Unicode. + + </test-case> + + <test-case id="IUC10-pt-PT" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/pt"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software e a Internet: + Globalização com o Unicode + IUC10 + Inscreva-se agora para a Décima Conferência Internacional Sobre O Unicode, a ser realizada entre os dias 10 e 12 + de Março de 1997 em Mainz na Alemanha. A Conferência reunirá peritos de todas as áreas da indústria + especializados em assuntos relacionados com a Internet global e o Unicode, internacionalização e localização de + software, implementação do Unicode em sistemas operativos e aplicações, tipos de letra, esquematização de + texto e informática multilíngue. + + Unicode + Quando o mundo quer falar, fala Unicode. + + </test-case> + + <test-case id="IUC10-ro" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-2/ro"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, Software şi Internet: + Globalizarea cu Unicode + IUC10 + InscrieÅ£i-vă acum la a Zecea Conferinţă InternaÅ£ională "Unicode" ce va avea loc in + perioada de 10-12 martie, 1997 în Mainz, Germania. ConferinÅ£a va întruni experÅ£i din + variate domenii: Internet global şi Unicode, internaÅ£ionalizare şi localizare, + implementarede Unicode în sisteme de operare şi aplicaÅ£ii, fonturi, aranjare de text în + pagină, computerizare multilinguală. + + Unicode + Când lumea vrea să comunice, vorbeşte Unicode. + + </test-case> + + <test-case id="IUC10-ru" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-5/ru windows-1251/ru KOI8-R/ru"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Европа, Программное обеспечение + Интернет: + Unicode в глобальных масштабах + IUC10 + Зарегистрируйтесь сейчас на Десятую Международную Конференцию по Unicode, которая состоится + 10-12 марта 1997 года в Майнце в Германии. Конференция соберет широкий круг экспертов по и + вопросам глобального Интернета и Unicode, локализации и интернационализации, воплощению + применению Unicode в различных операционных системах и программных приложениях, + шрифтах, верстке и многоязычных компьютерных системах. + + Unicode + Когда мир желает общаться, он общается на Unicode. + + </test-case> + + <test-case id="IUC10-sv" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-1/sv"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Europa, programvara och Internet: + globalisera med Unicode + IUC10 + Anmäl Dig till den tionde internationella Unicode-konferensen, som hÃ¥lls den 10-12 mars 1997 i Mainz, + Tyskland. Vid konferensen kommer experter inom följande omrÃ¥den att delta: det globala Internet och Unicode, + internationalisering och lokalisering, implementering av Unicode i operativsystem, tillämpningar, typsnitt, + textlayout och mÃ¥ngsprÃ¥klig datoranvändning. + + Unicode + När världen vill tala, sÃ¥ talar den Unicode. + + </test-case> + + <test-case id="IUC10-yi" encodings="UTF-8 UTF-32BE UTF-32LE"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + אײראָפּע: פּראָגראַמװאַרג און די װעלטנעץ: + אוניקאָד איבער דער גאָרער װעלט + IUC10 + פֿאַרשרײַבט זיך שױן אױף דער צענטער אינטערנאַציאָנאַלער אוניקאָד-קאָנפֿערענץ, װאָס װעט פֿאָרקומען דעם + 10טן ביזן 12טן מאַרץ, 1997, אין מײַנץ, דײַטשלאַנד. די קאָנפֿערענץ װעט צוזאַמענברענגן מבֿינים פֿון װעלטנעץ, + אוניקאָד, אי אַלװעלטלעכן אי סבֿיבֿהדיקן פּראָגראַמװאַרג, אַרײַנשטעלן אוניקאָד אין אָפּעריר-סיסטעמען און + אָנװענדונגען, שריפֿטן, טעקסט-אױסשטעל, און מערשפּראַכיקע קאָמפּיוטערײַ. + + Unicode + אַז די װעלט װיל רעדן, רעדט זי אוניקאָד + + </test-case> + + <test-case id="IUC10-zh-Hant" encodings="UTF-8 UTF-32BE UTF-32LE ISO-2022-CN GB18030 Big5"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + 歐洲,軟體及網際網路: + 讓統一碼(Unicode)領你進入全世界 + IUC10 + 你現在就應報名將在1997年3月10至12日於德國美姿城(Mainz)召開的第十屆國際統一碼研討會。 + 本次研討會將邀請多位業界專家研討關於全球網際網路及統一碼發展、國際化及本土化、 + 支援統一碼的作業系統及應用程式、字型、文字排版、電腦多國語文化等多項課題。 + + Unicode + 當世界需要溝通時,請用統一碼(Unicode) + + </test-case> + + <!-- No ISO-2022-CN in this test because Java doesn't support it in both directions :-( --> + <test-case id="IUC10-zh-Hans" encodings="UTF-8 UTF-32BE UTF-32LE ISO-2022-CN GB18030"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + 欧洲,软件+互联网 + 用统一码 (Unicode) 走遍世界 + IUC10 + 将于1997å¹´ 3 月10日-12日在德国 Mainz 市举行的第十届统一码国际研讨会现在开始注册。 + 本次会议将汇集各方面的专家。涉及的领域包括:国际互联网和统一码,国际化和本地化, + 统一码在操作系统和应用软件中的实现,字型,文本格式以及多文种计算等。 + + Unicode + 当世界需要沟通时,请用Unicode! + +Conference Program + </test-case> + + <test-case id="WIU-cz" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-2/cs"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Co je Unicode? + + Unicode přiřazuje každému znaku jedinečné číslo, + nezávisle na platformě, + nezávisle na programu, + nezávisle na jazyce. + + Počítače, ze své podstaty, pracují pouze s čísly. Písmena a další znaky ukládají tak, že každému z nich + přiřadí číslo. Před vznikem Unicode existovaly stovky rozdílných kódovacích systémů pro přiřazování těchto + čísel. Žádné z těchto kódování nemohlo obsahovat dostatek znaků: například Evropská unie sama potřebuje + několik různých kódování, aby pokryla vÅ¡echny své jazyky. Dokonce i pro jeden jediný jazyk, jako je angličtina, + nevyhovovalo žádné kódování pro vÅ¡echny písmena, interpunkci a běžně používané technické symboly. + + Tyto kódovací systémy také byly v konfliktu jeden s druhým. To znamená, že dvě kódování mohou používat + stejné číslo pro dva různé znaky, nebo používat různá čísla pro stejný znak. Jakýkoli počítač (zvláště servery) + musí podporovat mnoho různých kódování; přesto, kdykoli jsou data předávána mezi různými kódováními nebo + platformami, hrozí, že tato data budou poÅ¡kozena. + + </test-case> + + <test-case id="WIU-el" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-7/el"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Τι είναι το Unicode; + + Η κωδικοσελίδα Unicode προτείνει έναν και μοναδικό αριθμό για κάθε χαρακτήρα, + ανεξάρτητα από το λειτουργικό σύστημα, + ανεξάρτητα από το λογισμικό, + ανεξάρτητα από την γλώσσα. + + Οι ηλεκτρονικοί υπολογιστές, σε τελική ανάλυση, χειρίζονται απλώς αριθμούς. Αποθηκεύουν γράμματα και + άλλους χαρακτήρες αντιστοιχώντας στο καθένα τους από έναν αριθμό (ονομάζουμε μία τέτοια αντιστοιχία + κωδικοσελίδα). Πριν την εφεύρεση του Unicode, υπήρχαν εκατοντάδες διαφορετικές κωδικοσελίδες. Λόγω + περιορισμών μεγέθους όμως, σε καμία κωδικοσελίδα δεν χωρούσαν αρκετοί χαρακτήρες: λόγου χάριν, + η Ευρωπαϊκή Ένωση χρειαζόταν πλήθος διαφορετικών κωδικοσελίδων για να καλύψει όλες τις γλώσσες των + χωρών-μελών της. Ακόμα και για μία και μόνη γλώσσα, όπως π.χ. τα Αγγλικά, μία κωδικοσελίδα δεν + επαρκούσε για να καλύψει όλα τα γράμματα, σημεία στίξης και τεχνικά σύμβολα ευρείας χρήσης. + + Εκτός αυτού, οι κωδικοσελίδες αυτές διαφωνούσαν μεταξύ τους. Έτσι, δύο κωδικοσελίδες μπορούσαν κάλλιστα να + χρησιμοποιούν τον ίδιο αριθμό για δύο διαφορετικούς χαρακτήρες, ή να χρησιμοποιούν διαφορετικούς αριθμούς για + τον ίδιο χαρακτήρα. Κάθε υπολογιστής (και ιδίως εάν ήταν διακομιστής) έπρεπε να υποστηρίζει πλήθος διαφορετικών + κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή + λειτουργικών συστημάτων, τα δεδομένα αυτά κινδύνευαν να αλλοιωθούν. + + </test-case> + + <test-case id="WIU-el-Q" encodings="UTF-8 UTF-32BE UTF-32LE windows-1253/el"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Τι είναι το “Unicode”; + + Η κωδικοσελίδα Unicode προτείνει έναν και μοναδικό αριθμό για κάθε χαρακτήρα, + ανεξάρτητα από το λειτουργικό σύστημα, + ανεξάρτητα από το λογισμικό, + ανεξάρτητα από την γλώσσα. + + Οι ηλεκτρονικοί υπολογιστές, σε τελική ανάλυση, χειρίζονται απλώς αριθμούς. Αποθηκεύουν γράμματα και + άλλους χαρακτήρες αντιστοιχώντας στο καθένα τους από έναν αριθμό (ονομάζουμε μία τέτοια αντιστοιχία + κωδικοσελίδα). Πριν την εφεύρεση του Unicode, υπήρχαν εκατοντάδες διαφορετικές κωδικοσελίδες. Λόγω + περιορισμών μεγέθους όμως, σε καμία κωδικοσελίδα δεν χωρούσαν αρκετοί χαρακτήρες: λόγου χάριν, + η Ευρωπαϊκή Ένωση χρειαζόταν πλήθος διαφορετικών κωδικοσελίδων για να καλύψει όλες τις γλώσσες των + χωρών-μελών της. Ακόμα και για μία και μόνη γλώσσα, όπως π.χ. τα Αγγλικά, μία κωδικοσελίδα δεν + επαρκούσε για να καλύψει όλα τα γράμματα, σημεία στίξης και τεχνικά σύμβολα ευρείας χρήσης. + + Εκτός αυτού, οι κωδικοσελίδες αυτές διαφωνούσαν μεταξύ τους. Έτσι, δύο κωδικοσελίδες μπορούσαν κάλλιστα να + χρησιμοποιούν τον ίδιο αριθμό για δύο διαφορετικούς χαρακτήρες, ή να χρησιμοποιούν διαφορετικούς αριθμούς για + τον ίδιο χαρακτήρα. Κάθε υπολογιστής (και ιδίως εάν ήταν διακομιστής) έπρεπε να υποστηρίζει πλήθος διαφορετικών + κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή + λειτουργικών συστημάτων, τα δεδομένα αυτά κινδύνευαν να αλλοιωθούν. + + </test-case> + + <test-case id="WIU-pl" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-2/pl"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Czym jest Unikod ? + + Unikod przypisuje unikalny numer każdemu znakowi, niezależny od używanej platformy, programu czy języka. + + Zasadniczo, komputery rozumieją tylko liczby. Zapisują litery i inne znaki przypisując każdemu z nich liczbę. + Nim powstał Unikod, było wiele różnych systemów kodowania przypisujących te liczby. Brakowało jednego, + który mógłby pomieścić wystarczająco dużą liczbę znaków. Przykładowo, sama Unia Europejska potrzebowała + kilku różnych kodowań, by móc używać wszystkich używanych w niej języków. Nawet dla pojedynczego języka + takiego jak np. angielski brakowało jednego kodowania, które byłoby odpowiednie dla zaprezentowania + wszystkich liter, znaków przestankowych i popularnych symboli technicznych. + + Innym problemem było, że kodowania te kolidowały ze sobą. Dwa, różne kodowania używały jednej liczby dla dwu + różnych znaków lub różnych liczb dla tego samego znaku. Wszystkie komputery (między innymi serwery) muszą + wspierać wszystkie te kodowania, gdyż dane przesyłane między różnymi systemami operacyjnymi zawsze + narażone są na uszkodzenie. + + </test-case> + + <test-case id="WIU-tr" encodings="UTF-8 UTF-32BE UTF-32LE ISO-8859-9/tr"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + Evrensel Kod Nedir? + + Evrensel Kod her yazı karakteri için bir ve yalnız bir sayı şart koşar, + hangi altyapı, + hangi yazılım, + hangi dil olursa olsun. + + Ä°lke olarak, bilgisayarlar sadece sayılarla işlem yaparlar. Kelimelerin ve yazı karakterlerinin her biri için + birer sayı atarlar ve böyle saklarlar. Evrensel Kod keşfedilmeden önce, bu sayıları atamak için birçok şifreleme + yöntemi vardı. Ancak, tüm bu dilleri gösterebilecek, örneğin; Avrupa Topluluğu bünyesindeki tüm ülkelerin dillerini + kapsayacak bir tek şifreleme yöntemi yoktu. Bunun yanısıra, sadece Ä°ngilizcedeki harfleri, noktalama + işaretlerini ve teknik sembolleri kapsayan tek bir şifreleme yöntemi de bulunmamaktaydı. + + Bu şifreleme yöntemleri kendi aralarında çelişmektedir. Ä°ki farklı şifreleme, aynı sayıyı iki farklı karaktere + vermiş olabilir ya da farklı sayılar aynı karekteri kodlayabilir. Bilgisayarlar, özellikle sunucular, birçok + şifrelemeyi desteklemek zorundadırlar; veriler, farklı şifreleme ve altyapılardan geçerken bozulma riski taşırlar. + + </test-case> + + <test-case id="WIU-tr-Q" encodings="UTF-8 UTF-32BE UTF-32LE windows-1254/tr"> + <!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. --> + + “Evrensel Kod” Nedir? + + Evrensel Kod her yazı karakteri için bir ve yalnız bir sayı şart koşar, + hangi altyapı, + hangi yazılım, + hangi dil olursa olsun. + + Ä°lke olarak, bilgisayarlar sadece sayılarla işlem yaparlar. Kelimelerin ve yazı karakterlerinin her biri için + birer sayı atarlar ve böyle saklarlar. Evrensel Kod keşfedilmeden önce, bu sayıları atamak için birçok şifreleme + yöntemi vardı. Ancak, tüm bu dilleri gösterebilecek, örneğin; Avrupa Topluluğu bünyesindeki tüm ülkelerin dillerini + kapsayacak bir tek şifreleme yöntemi yoktu. Bunun yanısıra, sadece Ä°ngilizcedeki harfleri, noktalama + işaretlerini ve teknik sembolleri kapsayan tek bir şifreleme yöntemi de bulunmamaktaydı. + + Bu şifreleme yöntemleri kendi aralarında çelişmektedir. Ä°ki farklı şifreleme, aynı sayıyı iki farklı karaktere + vermiş olabilir ya da farklı sayılar aynı karekteri kodlayabilir. Bilgisayarlar, özellikle sunucular, birçok + şifrelemeyi desteklemek zorundadırlar; veriler, farklı şifreleme ve altyapılardan geçerken bozulma riski taşırlar. + + </test-case> +</charset-detection-tests> \ No newline at end of file diff --git a/icuSources/test/testdata/testdata_icu26_testtypes.res b/icuSources/test/testdata/icu26_testtypes.res similarity index 100% rename from icuSources/test/testdata/testdata_icu26_testtypes.res rename to icuSources/test/testdata/icu26_testtypes.res diff --git a/icuSources/test/testdata/testdata_icu26e_testtypes.res b/icuSources/test/testdata/icu26e_testtypes.res similarity index 100% rename from icuSources/test/testdata/testdata_icu26e_testtypes.res rename to icuSources/test/testdata/icu26e_testtypes.res diff --git a/icuSources/test/testdata/icuio.txt b/icuSources/test/testdata/icuio.txt index bce8c961..3f5fbb88 100644 --- a/icuSources/test/testdata/icuio.txt +++ b/icuSources/test/testdata/icuio.txt @@ -1,6 +1,6 @@ //***************************************************************************** // -// Copyright (C) 2004, International Business Machines +// Copyright (C) 2004-2006, International Business Machines // Corporation and others. All Rights Reserved. // // file name: icuio.txt @@ -15,7 +15,7 @@ // //***************************************************************************** -icuio { +icuio:table(nofallback) { Info { Description { "Test data for ICU I/O" } LongDescription { @@ -24,6 +24,7 @@ icuio { "argumentType:\n" "\td: double\n" + "\tf: float\n" "\t1: int8_t (hexadecimal)\n" "\t2: int16_t (hexadecimal)\n" "\t4: int32_t (hexadecimal)\n" @@ -36,6 +37,27 @@ icuio { printf { Headers { "format", "result", "argumentType", "argument" } Cases { + { "%5.3S", " abc", "S", "abcde" } + { "%-5.3S", "abc ", "S", "abcde" } + { "%5.3S", " abc", "S", "abcdef" } + { "%-5.3S", "abc ", "S", "abcdef" } + { "%5.3S", " a", "S", "a" } + { "%-5.3S", "a ", "S", "a" } + { "%5.3s", " abc", "s", "abcde" } + { "%-5.3s", "abc ", "s", "abcde" } + { "%5.3s", " abc", "s", "abcdef" } + { "%-5.3s", "abc ", "s", "abcdef" } + { "%5.3s", " a", "s", "a" } + { "%-5.3s", "a ", "s", "a" } + { "%5.3C", " a", "2", "61" } + { "%-5.3C", "a ", "2", "61" } + { "%-5.0C", "a ", "2", "61" } // Make sure that the precision is ignored. + { "%.3P", "120.000%", "d", "1.2" } + { "%.0P", "120%", "d", "1.2" } + { "%.3P", "1.200%", "d", "0.012" } + { "%.0P", "1%", "d", "0.012" } + { "%04.0P", "001%", "d", "0.012" } + { "%+4.0P", " +1%", "d", "0.012" } { "%e", "1.200000e+000", "d", "1.2" } { "%e", "1.234568e+006", "d", "1234567.89" } { "%E", "1.234568E+006", "d", "1234567.89" } @@ -64,10 +86,12 @@ icuio { { "%G", "12345.7", "d", "12345.6789" } { "%G", "123457", "d", "123456.789" } { "%G", "1.23457E+006", "d", "1234567.89" } + { "%.14G", "1.7E+064", "d", "1.7E+64" } { "%.0f", "-12", "d", "-12.34" } { "%.0e", "-1e+001", "d", "-12.34" } { "%.0g", "-1e+001", "d", "-12.34" } { "%hd", "-30002", "2", "8ace" } + { "%hu", "35534", "2", "8ace" } { "%ho", "105316", "2", "8ace" } { "%hx", "8ace", "2", "8ace" } { "%lx", "8ace1234", "4", "8ace1234" } @@ -87,13 +111,16 @@ icuio { { "%*d", "12345678", "4", "BC614E", :int{7} } { "%*d", "12345678", "4", "BC614E", :int{8} } { "%*d", " 12345678", "4", "BC614E", :int{9} } + { "%*d", "12345678 ", "4", "BC614E", :int{-9} } + { "%*d", "1", "4", "1", :int{-1} } + { "%*d", "1 ", "4", "1", :int{-2} } } } scanf { Headers { "format", "argument", "argumentType", "result" } Cases { - { "%e", "1.200000e+000", "d", "1.2" } - { "%*e%e", "1.200000e+000 4.825000e+000", "d", "4.825" } + { "%e", "1.200000e+000", "f", "1.2" } + { "%*e%e", "1.200000e+000 4.825000e+000", "f", "4.825" } { "%C", "1234", "2", "31" } { "%*C%C", "1234", "2", "32" } { "%S", "1234 5678", "S", "1234" } @@ -105,7 +132,17 @@ icuio { { "%lld", "1311768467463790320", "8", "123456789abcdef0" } { "%3d", "1234 5678", "4", "7B" } { "%4d", "123", "4", "7B" } + { "%2d", "123", "4", "C" } { "%40d", "123", "4", "7B" } + { "%2e", "1.25", "f", "1" } + { "%2f", "1.25", "f", "1" } + { "%2g", "1.25", "f", "1" } + { "%2le", "1.25", "d", "1" } + { "%2lf", "1.25", "d", "1" } + { "%2lg", "1.25", "d", "1" } + { "%*2e%2e", "1.25", "f", "25" } + { "%*2f%2f", "1.25", "f", "25" } + { "%*2g%2g", "1.25", "f", "25" } { "%*d%d", "1234 5678", "4", "162E" } { "%x", "abcd ef01", "4", "abcd" } { "%3x", "abcd ef01", "4", "abc" } @@ -129,6 +166,12 @@ icuio { { "%*3S%S", "abcd efg", "S", "d" } { "%*3s%s", "abcd efg", "s", "d" } { "%*3d%d", "1234", "4", "4" } + { "%d", " 1234", "4", "4D2" } + { "%e", " 1234", "f", "1234" } + { "%f", " 1234", "f", "1234" } + { "%d", "+1234", "4", "4D2" } + { "%e", "+1234", "f", "1234" } + { "%f", "+1234", "f", "1234" } } } } diff --git a/icuSources/test/testdata/idna_conf.txt b/icuSources/test/testdata/idna_conf.txt new file mode 100644 index 00000000..ba999bc8 --- /dev/null +++ b/icuSources/test/testdata/idna_conf.txt @@ -0,0 +1,1266 @@ +===== +desc: Copyright 2003-2005 http://idnconnect.jdna.jp/testbed.html +namebase: <00ED>dn +nameutf8: ídn +namezone: xn--dn-mja +failzone1: +failzone2: +token: 25029153 +passfail: pass +type: toascii + +===== +desc: 1-1-1 Has one IDN +namebase: <00ED>dn +nameutf8: ídn +namezone: xn--dn-mja +failzone1: +failzone2: +token: 25029153 +passfail: pass +type: toascii + +===== +desc: 1-1-2 Has two IDNs +namebase: <00EB>x.<00ED>dn +nameutf8: ëx.ídn +namezone: xn--x-ega.xn--dn-mja +failzone1: +failzone2: +token: 02721141 +passfail: pass +type: toascii + +===== +desc: 1-2-1 Latin-1 +namebase: <00E5><00FE><00E7> +nameutf8: åþç +namezone: xn--5cae2e +failzone1: +failzone2: +token: 41542620 +passfail: pass +type: toascii + +===== +desc: 1-2-2 Latin Extended A +namebase: <0103>b<0109> +nameutf8: ăbĉ +namezone: xn--b-rhat +failzone1: +failzone2: +token: 72238617 +passfail: pass +type: toascii + +===== +desc: 1-2-3 Latin Extended B +namebase: <0227><0180><0188> +nameutf8: ȧƀƈ +namezone: xn--lhaq98b +failzone1: +failzone2: +token: 48464361 +passfail: pass +type: toascii + +===== +desc: 1-2-4 Latin Extended Additional +namebase: <1E01><1E03><1E09> +nameutf8: ḁḃḉ +namezone: xn--2fges +failzone1: +failzone2: +token: 49301230 +passfail: pass +type: toascii + +===== +desc: 1-3-1 Han +namebase: <4E3F><4EBA><5C38> +nameutf8: 丿人尸 +namezone: xn--xiqplj17a +failzone1: +failzone2: +token: 58367113 +passfail: pass +type: toascii + +===== +desc: 1-3-2 Hiragana +namebase: <304B><304C><304D> +nameutf8: かがき +namezone: xn--u8jcd +failzone1: +failzone2: +token: 57006197 +passfail: pass +type: toascii + +===== +desc: 1-3-3 Katakana +namebase: <30AB><30AC><30AD> +nameutf8: カガキ +namezone: xn--lckcd +failzone1: +failzone2: +token: 81826992 +passfail: pass +type: toascii + +===== +desc: 1-3-4 Hangul Jamo +namebase: <1100><1161><11A8> +nameutf8: 각 +namezone: xn--p39a +failzone1: xn--ypd8qrh +failzone2: +token: 44228346 +passfail: pass +type: toascii + +===== +desc: 1-3-5 Hangul +namebase: <AC69><B4C6><C03A> +nameutf8: 걩듆쀺 +namezone: xn--o69aq2nl0j +failzone1: +failzone2: +token: 79235608 +passfail: pass +type: toascii + +===== +desc: 1-3-6 Yi +namebase: <A00A><A020><A2B8> +nameutf8: ꀊꀠꊸ +namezone: xn--6l7arby7j +failzone1: +failzone2: +token: 99549720 +passfail: pass +type: toascii + +===== +desc: 1-3-7 Greek +namebase: <03B1><03B2><03B3> +nameutf8: αβγ +namezone: xn--mxacd +failzone1: +failzone2: +token: 83859912 +passfail: pass +type: toascii + +===== +desc: 1-3-8 Greek Extended +namebase: <1F02><1F26><1F55> +nameutf8: ἂἦὕ +namezone: xn--fng7dpg +failzone1: +failzone2: +token: 22501339 +passfail: pass +type: toascii + +===== +desc: 1-3-9 Cyrillic +namebase: <0430><0431><0432> +nameutf8: абв +namezone: xn--80acd +failzone1: +failzone2: +token: 98871751 +passfail: pass +type: toascii + +===== +desc: 1-3-10 Armeian +namebase: <0561><0562><0563> +nameutf8: Õ¡Õ¢Õ£ +namezone: xn--y9acd +failzone1: +failzone2: +token: 23687015 +passfail: pass +type: toascii + +===== +desc: 1-3-11 Georgian +namebase: <10D0><10D1><10D2> +nameutf8: აბგ +namezone: xn--lodcd +failzone1: +failzone2: +token: 70499589 +passfail: pass +type: toascii + +===== +desc: 1-4-1 Symbols +namebase: <2221><21BA><2282> +nameutf8: ∡↺⊂ +namezone: xn--b7gxomk +failzone1: +failzone2: +token: 24617638 +passfail: pass +type: toascii + +===== +desc: 1-5-1 Devanagari +namebase: <0915><0916><0917> +nameutf8: कखग +namezone: xn--11bcd +failzone1: +failzone2: +token: 18477223 +passfail: pass +type: toascii + +===== +desc: 1-5-2 Bengali +namebase: <0995><0996><0997> +nameutf8: কখগ +namezone: xn--p5bcd +failzone1: +failzone2: +token: 11477904 +passfail: pass +type: toascii + +===== +desc: 1-5-3 Gurmukhi +namebase: <0A15><0A16><0A17> +nameutf8: ਕਖਗ +namezone: xn--d9bcd +failzone1: +failzone2: +token: 71543506 +passfail: pass +type: toascii + +===== +desc: 1-5-4 Gujarati +namebase: <0A95><0A96><0A97> +nameutf8: કખગ +namezone: xn--0dccd +failzone1: +failzone2: +token: 75268760 +passfail: pass +type: toascii + +===== +desc: 1-5-5 Oriya +namebase: <0B15><0B16><0B17> +nameutf8: କଖଗ +namezone: xn--ohccd +failzone1: +failzone2: +token: 36079747 +passfail: pass +type: toascii + +===== +desc: 1-5-6 Tamil +namebase: <0B95><0B99><0B9A> +nameutf8: கஙச +namezone: xn--clcid +failzone1: +failzone2: +token: 39841446 +passfail: pass +type: toascii + +===== +desc: 1-5-7 Telugu +namebase: <0C15><0C16><0C17> +nameutf8: కఖగ +namezone: xn--zoccd +failzone1: +failzone2: +token: 34438808 +passfail: pass +type: toascii + +===== +desc: 1-5-8 Kannada +namebase: <0C95><0C96><0C97> +nameutf8: ಕಖಗ +namezone: xn--nsccd +failzone1: +failzone2: +token: 42303465 +passfail: pass +type: toascii + +===== +desc: 1-5-9 Malayalam +namebase: <0D15><0D16><0D17> +nameutf8: കഖഗ +namezone: xn--bwccd +failzone1: +failzone2: +token: 11813559 +passfail: pass +type: toascii + +===== +desc: 1-5-10 Sinhala +namebase: <0D9A><0D9B><0D9C> +nameutf8: කඛග +namezone: xn--3zccd +failzone1: +failzone2: +token: 89823209 +passfail: pass +type: toascii + +===== +desc: 1-5-11 Thai +namebase: <0E01><0E02><0E03> +nameutf8: กขฃ +namezone: xn--12ccd +failzone1: +failzone2: +token: 94992842 +passfail: pass +type: toascii + +===== +desc: 1-5-12 Lao +namebase: <0E81><0E82><0E84> +nameutf8: ກຂຄ +namezone: xn--p6ccg +failzone1: +failzone2: +token: 42424338 +passfail: pass +type: toascii + +===== +desc: 1-5-13 Tibetan +namebase: <0F40><0F41><0F42> +nameutf8: ཀཁག +namezone: xn--5cdcd +failzone1: +failzone2: +token: 26962778 +passfail: pass +type: toascii + +===== +desc: 1-5-14 Myanmar +namebase: <1000><1001><1002> +nameutf8: ကခဂ +namezone: xn--nidcd +failzone1: +failzone2: +token: 09824611 +passfail: pass +type: toascii + +===== +desc: 1-5-15 Khmer +namebase: <1780><1781><1782> +nameutf8: កខគ +namezone: xn--i2ecd +failzone1: +failzone2: +token: 48071156 +passfail: pass +type: toascii + +===== +desc: 1-5-16 Mongolian +namebase: <1820><1821><1822> +nameutf8: á  á ¡á ¢ +namezone: xn--26ecd +failzone1: +failzone2: +token: 40131572 +passfail: pass +type: toascii + +===== +desc: 1-6-1 Arabic +namebase: <0627><0628><0629> +nameutf8: ابة +namezone: xn--mgbcd +failzone1: +failzone2: +token: 06414817 +passfail: pass +type: toascii + +===== +desc: 1-6-2 Hebrew +namebase: <05D0><05D1><05D2> +nameutf8: אבג +namezone: xn--4dbcd +failzone1: +failzone2: +token: 41996705 +passfail: pass +type: toascii + +===== +desc: 1-6-3 Syriac +namebase: <0710><0711><0712> +nameutf8: ܐܑܒ +namezone: xn--9mbcd +failzone1: +failzone2: +token: 77925080 +passfail: pass +type: toascii + +===== +desc: 1-7-1 ASCII and non-Latin +namebase: abc<30AB><30AC><30AD> +nameutf8: abcカガキ +namezone: xn--abc-mj4bfg +failzone1: +failzone2: +token: 14333380 +passfail: pass +type: toascii + +===== +desc: 1-7-2 Latin (non-ASCII) and non-Latin +namebase: <00E5><00FE><00E7><30AB><30AC><30AD> +nameutf8: åþçカガキ +namezone: xn--5cae2e328wfag +failzone1: +failzone2: +token: 00848299 +passfail: pass +type: toascii + +===== +desc: 2-3-1-1 If UseSTD3ASCIIRules: Includes ! before Nameprep +namebase: <00ED><0021>dn +nameutf8: í!dn +namezone: +failzone1: xn--!dn-qma +failzone2: +token: 89571181 +passfail: fail +type: toascii + +===== +desc: 2-3-1-2 If UseSTD3ASCIIRules: Includes $ before Nameprep +namebase: <00ED><0024>dn +nameutf8: í$dn +namezone: +failzone1: xn--$dn-qma +failzone2: +token: 06965937 +passfail: fail +type: toascii + +===== +desc: 2-3-1-3 If UseSTD3ASCIIRules: Includes + before Nameprep +namebase: <00ED><002B>dn +nameutf8: í+dn +namezone: +failzone1: xn--+dn-qma +failzone2: +token: 98967951 +passfail: fail +type: toascii + +===== +desc: 2-3-2-1 If UseSTD3ASCIIRules: Leading hyphen before Nameprep +namebase: <002D><00ED>1dn +nameutf8: -í1dn +namezone: +failzone1: xn---1dn-vpa +failzone2: +token: 65457100 +passfail: fail +type: toascii + +===== +desc: 2-3-2-2 If UseSTD3ASCIIRules: Trailing hyphen before Nameprep +namebase: <00ED>1dn<002D> +nameutf8: í1dn- +namezone: +failzone1: xn--1dn--upa +failzone2: +token: 85629714 +passfail: fail +type: toascii + +===== +desc: 2-3-3-1 If UseSTD3ASCIIRules: Gets a + after Nameprep +namebase: <00ED><FF0B>dn +nameutf8: í+dn +namezone: +failzone1: xn--dn-mja0331x +failzone2: +token: 95236620 +passfail: fail +type: toascii + +===== +desc: 2-3-3-2 If UseSTD3ASCIIRules: Gets a = after Nameprep +namebase: <00ED><207C>dn +nameutf8: í⁼dn +namezone: +failzone1: xn--dn-mja0343a +failzone2: +token: 04960664 +passfail: fail +type: toascii + +===== +desc: 2-3-4-1 If UseSTD3ASCIIRules: Leading hyphen after Nameprep +namebase: <FE63><00ED>2dn +nameutf8: ﹣í2dn +namezone: +failzone1: xn--2dn-qma32863a +failzone2: xn---2dn-vpa +token: 53512069 +passfail: fail +type: toascii + +===== +desc: 2-3-4-2 If UseSTD3ASCIIRules: Trailing hyphen after Nameprep +namebase: <00ED>2dn<FF0D> +nameutf8: í2dn- +namezone: +failzone1: xn--2dn-qma79363a +failzone2: xn--2dn--upa +token: 39938653 +passfail: fail +type: toascii + +===== +desc: 2-4-1 All-ASCII check, Latin +namebase: <00B9>1 +nameutf8: ¹1 +namezone: 11 +failzone1: +failzone2: +token: 43611374 +passfail: pass +type: toascii + +===== +desc: 2-4-2 All-ASCII check, symbol +namebase: <2165>vi +nameutf8: Ⅵvi +namezone: vivi +failzone1: +failzone2: +token: 79939993 +passfail: pass +type: toascii + +===== +desc: 2-4-3 All-ASCII check, sharp S +namebase: <00DF>ss +nameutf8: ßss +namezone: ssss +failzone1: +failzone2: +token: 71292530 +passfail: pass +type: toascii + +===== +desc: 2-5-1 ACE prefix exists before Nameprep +namebase: xn--<00EF>dn +nameutf8: xn--ïdn +namezone: +failzone1: xn--xn--dn-sja +failzone2: xn--dn-sja +token: 32841515 +passfail: fail +type: toascii + +===== +desc: 2-5-2 ACE prefix appears after Nameprep +namebase: <2179>n--<00E4>dn +nameutf8: ⅹn--ädn +namezone: +failzone1: xn--xn--dn-uia +failzone2: xn--dn-uia +token: 52994631 +passfail: fail +type: toascii + +===== +desc: 2-8-1 Zero-length label after Nameprep +namebase: <00AD> +nameutf8: +namezone: +failzone1: xn--kba +failzone2: xn-- +token: 18420037 +passfail: fail +type: toascii + +===== +desc: 2-9-1 U+3002 acts as a label separator +namebase: 3002-test<3002><00ED>dn +nameutf8: 3002-test。ídn +namezone: 3002-test.xn--dn-mja +failzone1: xn--3002-testdn-wcb2087m +failzone2: +token: 14217422 +passfail: pass +type: toascii + +===== +desc: 2-9-2 U+FF0E acts as a label separator +namebase: ff0e-test<FF0E><00ED>dn +nameutf8: ff0e-test.ídn +namezone: ff0e-test.xn--dn-mja +failzone1: xn--ff0e-testdn-wcb45865f +failzone2: +token: 94579179 +passfail: pass +type: toascii + +===== +desc: 2-9-3 U+FF61 acts as a label separator +namebase: ff61-test<FF61><00ED>dn +nameutf8: ff61-test。ídn +namezone: ff61-test.xn--dn-mja +failzone1: xn--ff61-testdn-wcb33975f +failzone2: +token: 27084042 +passfail: pass +type: toascii + +===== +desc: 3-2-1 Sharp S conversion; should display as m<00EB>ss <icu> ICU fixed the namezone token to to be m<00EB>ss since this is a tounicode without error.</icu> +namebase: xn--m<00DF>-jma +nameutf8: xn--mß-jma +namezone: m<00EB>ss +failzone1: +failzone2: +token: 85142449 +passfail: pass +type: tounicode + +===== +desc: 3-3-1 Old prefix; should not display as Unicode;<icu> ICU will treat this as ASCII. This sequence is not explicitly prohibited by the RFC.</icu> +namebase: iesg--dn-mja +nameutf8: iesg--dn-mja +namezone: +failzone1: +failzone2: +token: 35996358 +passfail: fail +type: tounicode + +===== +desc: 3-3-2 Old prefix; should not display as Unicode;<icu> ICU will treat this as ASCII. This sequence is not explicitly prohibited by the RFC.</icu> +namebase: iesgdn-mja +nameutf8: iesgdn-mja +namezone: +failzone1: +failzone2: +token: 13693467 +passfail: fail +type: tounicode + +===== +desc: 3-3-3 Old prefix; should not display as Unicode;<icu> ICU will treat this as ASCII. This sequence is not explicitly prohibited by the RFC.</icu> +namebase: bq--dn-mja +nameutf8: bq--dn-mja +namezone: +failzone1: +failzone2: +token: 77049719 +passfail: fail +type: tounicode + +===== +desc: 3-5-1 Non-ASCII code point before the last hyphen;\ + should not display as Unicode +namebase: xn--d<00F1>-mja +nameutf8: xn--dñ-mja +namezone: +failzone1: +failzone2: +token: 53043171 +passfail: fail +type: tounicode + +===== +desc: 3-5-2 Non-alphanumeric code point after the last hyphen;\ + should not display as Unicode +namebase: xn--dn-mj+ +nameutf8: xn--dn-mj+ +namezone: +failzone1: +failzone2: +token: 24626494 +passfail: fail +type: tounicode + +===== +desc: 3-5-3 Ends in the middle of an encoded delta value;\ + should not display as Unicode +namebase: xn--dn-mj +nameutf8: xn--dn-mj +namezone: +failzone1: +failzone2: +token: 30921132 +passfail: fail +type: tounicode + +===== +desc: 3-6-1 Nameprep -- prohibited character U+E000;\ + should not display as Unicode +namebase: xn--e000dn-l704a +nameutf8: xn--e000dn-l704a +namezone: +failzone1: +failzone2: +token: 02359753 +passfail: fail +type: tounicode + +===== +desc: 3-6-2 If using UseSTD3ASCIIRules, Step 3a -- leading hyphen; should not display as Unicode +namebase: xn---3dn-vpa +nameutf8: xn---3dn-vpa +namezone: +failzone1: +failzone2: +token: 99795165 +passfail: fail +type: tounicode + +===== +desc: 3-6-3 If using UseSTD3ASCIIRules, Step 3b -- trailing hyphen; should not display as Unicode +namebase: xn--3dn--upa +nameutf8: xn--3dn--upa +namezone: +failzone1: +failzone2: +token: 86051717 +passfail: fail +type: tounicode + +===== +desc: 3-6-4 Step 5 -- prefix exists; should not display as Unicode +namebase: xn--xn--dn-6va +nameutf8: xn--xn--dn-6va +namezone: +failzone1: +failzone2: +token: 02506789 +passfail: fail +type: tounicode + +===== +desc: 3-7-1 Punycode was not necessary; should not display as Unicode +namebase: xn--idn- +nameutf8: xn--idn- +namezone: +failzone1: +failzone2: +token: 21675918 +passfail: fail +type: tounicode + +===== +desc: 3-7-2 String did not go through Nameprep;\ + should not display as Unicode +namebase: xn--dn-vga +nameutf8: xn--dn-vga +namezone: +failzone1: +failzone2: +token: 18832454 +passfail: fail +type: tounicode + +===== +desc: 3-8-1 Should show the Unicode <00ED>4dn; <icu> Changed namebase and nameutf8 from xn--4dn-lla to xn--4dn-qma </icu> +namebase: xn--4dn-qma +nameutf8: xn--4dn-qma +namezone: <00ED>4dn +failzone1: +failzone2: +token: 23377435 +passfail: pass +type: tounicode + +===== +desc: 4-1-1-1 00adout<00AD><00ED>dn ->\ + 00adout<00ED>dn +namebase: 00adout<00AD><00ED>dn +nameutf8: 00adout­ídn +namezone: xn--00adoutdn-m5a +failzone1: xn--00adoutdn-cna81e +failzone2: +token: 04299950 +passfail: pass +type: toascii + +===== +desc: 4-1-1-2 200dout<200D><00ED>dn ->\ + 200dout<00ED>dn +namebase: 200dout<200D><00ED>dn +nameutf8: 200dout‍ídn +namezone: xn--200doutdn-m5a +failzone1: xn--200doutdn-m5a1678f +failzone2: +token: 00643243 +passfail: pass +type: toascii + +===== +desc: 4-1-2-1 simplecap<0044><00ED>dn ->\ + simplecap<0064><00ED>dn +namebase: simplecap<0044><00ED>dn +nameutf8: simplecapDídn +namezone: xn--simplecapddn-1fb +failzone1: +failzone2: +token: 36249795 +passfail: pass +type: toascii + +===== +desc: 4-1-2-2 latintogreek<00B5><00ED>dn ->\ + latintogreek<03BC><00ED>dn +namebase: latintogreek<00B5><00ED>dn +nameutf8: latintogreekµídn +namezone: xn--latintogreekdn-cmb716i +failzone1: xn--latintogreekdn-cxa01g +failzone2: +token: 03117407 +passfail: pass +type: toascii + +===== +desc: 4-1-2-3 latinext<00C7><00ED>dn ->\ + latinext<00E7><00ED>dn +namebase: latinext<00C7><00ED>dn +nameutf8: latinextÇídn +namezone: xn--latinextdn-v6a6e +failzone1: xn--latinextdn-twa07b +failzone2: +token: 10243505 +passfail: pass +type: toascii + +===== +desc: 4-1-2-4 sharps<00DF><00ED>dn ->\ + sharpsss<00ED>dn +namebase: sharps<00DF><00ED>dn +nameutf8: sharpsßídn +namezone: xn--sharpsssdn-r8a +failzone1: xn--sharpsdn-vya4l +failzone2: +token: 84921656 +passfail: pass +type: toascii + +===== +desc: 4-1-2-5 turkishi<0130><00ED>dn ->\ + turkishi<0069><0307><00ED>dn +namebase: turkishi<0130><00ED>dn +nameutf8: turkishiİídn +namezone: xn--turkishiidn-wcb701e +failzone1: xn--turkishidn-r8a71f +failzone2: +token: 02381730 +passfail: pass +type: toascii + +===== +desc: 4-1-2-6 exptwo<0149><00ED>dn ->\ + exptwo<02BC><006E><00ED>dn +namebase: exptwo<0149><00ED>dn +nameutf8: exptwoʼnídn +namezone: xn--exptwondn-m5a502c +failzone1: xn--exptwodn-h2a33g +failzone2: +token: 10575203 +passfail: pass +type: toascii + +===== +desc: 4-1-2-7 addfold<03D2><00ED>dn ->\ + addfold<03C5><00ED>dn +namebase: addfold<03D2><00ED>dn +nameutf8: addfoldϒídn +namezone: xn--addfolddn-m5a121f +failzone1: xn--addfolddn-m5a462f +failzone2: +token: 31493044 +passfail: pass +type: toascii + +===== +desc: 4-1-2-8 expthree<1F52><00ED>dn ->\ + expthree<03C5><0313><0300><00ED>dn +namebase: expthree<1F52><00ED>dn +nameutf8: expthreeὒídn +namezone: xn--expthreedn-r8a5844g +failzone1: +failzone2: +token: 68144622 +passfail: pass +type: toascii + +===== +desc: 4-1-2-9 nonbmp<10400><00ED>dn ->\ + nonbmp<10428><00ED>dn +namebase: nonbmp<10400><00ED>dn +nameutf8: nonbmpАCΤn +namezone: xn--nonbmpdn-h2a34747d +failzone1: xn--nonbmpdn-h2a37046d +failzone2: +token: 35393212 +passfail: pass +type: toascii + +===== +desc: 4-1-2-10 nonbmptoascii<1D400><00ED>dn ->\ + nonbmptoasciia<00ED>dn +namebase: nonbmptoascii<1D400><00ED>dn +nameutf8: nonbmptoasciiݐCΤn +namezone: xn--nonbmptoasciiadn-msb +failzone1: xn--nonbmptoasciidn-hpb54112i +failzone2: +token: 78182502 +passfail: pass +type: toascii + +===== +desc: 4-2-1-1 regcomb<0065><0301><00ED>dn ->\ + regcomb<00E9><00ED>dn +namebase: regcomb<0065><0301><00ED>dn +nameutf8: regcombéídn +namezone: xn--regcombdn-h4a8b +failzone1: xn--regcombedn-r8a794d +failzone2: +token: 87647045 +passfail: pass +type: toascii + +===== +desc: 4-2-1-2 combandcase<0045><0301><00ED>dn ->\ + combandcase<00E9><00ED>dn +namebase: combandcase<0045><0301><00ED>dn +nameutf8: combandcaseÉídn +namezone: xn--combandcasedn-lhb4d +failzone1: xn--combandcaseedn-cmb526f +failzone2: +token: 61741185 +passfail: pass +type: toascii + +===== +desc: 4-2-1-3 adjcomb<00BA><0301><00ED>dn ->\ + adjcomb<00F3><00ED>dn +namebase: adjcomb<00BA><0301><00ED>dn +nameutf8: adjcombº́ídn +namezone: xn--adjcombdn-m5a9d +failzone1: xn--adjcombdn-1qa57cp3r +failzone2: +token: 14828402 +passfail: pass +type: toascii + +===== +desc: 4-2-1-4 extcombo<0063><0301><00ED>dn ->\ + extcombo<0107><00ED>dn +namebase: extcombo<0063><0301><00ED>dn +nameutf8: extcomboćídn +namezone: xn--extcombodn-r8a52a +failzone1: xn--extcombocdn-wcb920e +failzone2: +token: 26651277 +passfail: pass +type: toascii + +===== +desc: 4-2-1-5 doublediac1<0075><0308><0301><00ED>dn ->\ + doublediac2<01D8><00ED>dn +namebase: doublediac1<0075><0308><0301><00ED>dn +nameutf8: doublediac1ǘídn +namezone: xn--doublediac1dn-6ib836a +failzone1: xn--doublediac1udn-cmb526fnd +failzone2: +token: 30175595 +passfail: pass +type: toascii + +===== +desc: 4-2-1-6 doublediac2<0075><0301><0308><00ED>dn ->\ + doublediac2<01D8><00ED>dn +namebase: doublediac2<0075><0301><0308><00ED>dn +nameutf8: doublediac2ú̈ídn +namezone: xn--doublediac2dn-6ib8qs73a +failzone1: xn--doublediac2udn-cmb526fod +failzone2: +token: 35606109 +passfail: pass +type: toascii + +===== +desc: 4-2-2-1 newnorm<2F874><00ED>dn ->\ + newnorm<5F33><00ED>dn should not become <5F53> +namebase: newnorm<2F874><00ED>dn +nameutf8: newnorm௡ՃΤn +namezone: xn--newnormdn-m5a7856x +failzone1: xn--newnormdn-m5a9396x +failzone2: xn--newnormdn-m5a9968x +token: 61901810 +passfail: pass +type: toascii + +===== +desc: 4-3-1 If UseSTD3ASCIIRules: Spacing; <icu> \u0020 is prohibited from the output only when UseSTD3ASCIIRules is set </icu> +namebase: <2000><00ED>dn +nameutf8:  ídn +namezone: +failzone1: xn--dn-mja3392a +failzone2: +token: 13226878 +passfail: fail +type: toascii + +===== +desc: 4-3-2 Control +namebase: <06DD><00ED>dn-2 +nameutf8: ۝ídn-2 +namezone: +failzone1: xn--dn-2-upa332g +failzone2: +token: 09873312 +passfail: fail +type: toascii + +===== +desc: 4-3-3 Private use +namebase: <E005><00ED>dn +nameutf8: ídn +namezone: +failzone1: xn--dn-mja1659t +failzone2: +token: 03937183 +passfail: fail +type: toascii + +===== +desc: 4-3-4 Private use, non-BMP +namebase: <F0005><00ED>dn +nameutf8: 㰀ƃΤn +namezone: +failzone1: xn--dn-mja7922x +failzone2: +token: 78707823 +passfail: fail +type: toascii + +===== +desc: 4-3-5 Non-character +namebase: <FDDD><00ED>dn +nameutf8: ﷝ídn +namezone: +failzone1: xn--dn-mja1210x +failzone2: +token: 44432178 +passfail: fail +type: toascii + +===== +desc: 4-3-6 Non-character, non-BMP +namebase: <1FFFE><00ED>dn +nameutf8: ߿߃Τn +namezone: +failzone1: xn--dn-mja7922x +failzone2: +token: 69142686 +passfail: fail +type: toascii + +===== +desc: 4-3-7 Surrogate points +namebase: <D805><00ED>dn +nameutf8: �ídn +namezone: +failzone1: xn--dn-mja7922x +failzone2: +token: 05424571 +passfail: fail +type: toascii + +===== +desc: 4-3-8 Inappropriate for plain +namebase: <FFFA><00ED>dn +nameutf8: ídn +namezone: +failzone1: xn--dn-mja5822x +failzone2: +token: 44825824 +passfail: fail +type: toascii + +===== +desc: 4-3-9 Inappropriate for canonical +namebase: <2FF5><00ED>dn +nameutf8: ⿵ídn +namezone: +failzone1: xn--dn-mja3729b +failzone2: +token: 50926136 +passfail: fail +type: toascii + +===== +desc: 4-3-10 Change display simple +namebase: <206A><00ED>dn +nameutf8: ídn +namezone: +failzone1: xn--dn-mja7533a +failzone2: +token: 57953313 +passfail: fail +type: toascii + +===== +desc: 4-3-11 Change display RTL +namebase: <200F><00ED>dn +nameutf8: ‏ídn +namezone: +failzone1: xn--dn-mja3992a +failzone2: +token: 30705279 +passfail: fail +type: toascii + +===== +desc: 4-3-12 Language tags +namebase: <E0001><E0045><E004E><0068><0069>idn +nameutf8: 㠀³ƳϨiidn +namezone: +failzone1: xn--hiidn-km43aaa +failzone2: +token: 44598039 +passfail: fail +type: toascii + +===== +desc: 4-4-1 Arabic RandALCat-LCat-RandALCat +namebase: <0628><006F><0638> +nameutf8: بoظ +namezone: +failzone1: xn--o-0mc3c +failzone2: +token: 78233053 +passfail: fail +type: toascii + +===== +desc: 4-4-2 Arabic RandALCat-RandALCat-other +namebase: <0628><0638><006F> +nameutf8: بظo +namezone: +failzone1: xn--o-0mc2c +failzone2: +token: 95299621 +passfail: fail +type: toascii + +===== +desc: 4-4-3 Arabic other-RandALCat-RandALCat +namebase: <006F><0628><0638> +nameutf8: oبظ +namezone: +failzone1: xn--o-1mc2c +failzone2: +token: 79807176 +passfail: fail +type: toascii + +===== +desc: 4-4-4 Hebrew RandALCat-LCat-RandALCat +namebase: <05D1><006F><05E1> +nameutf8: בoס +namezone: +failzone1: xn--o-1hc3c +failzone2: +token: 32229450 +passfail: fail +type: toascii + +===== +desc: 4-4-5 Hebrew RandALCat-RandALCat-other +namebase: <05D1><05E1><006F> +nameutf8: בסo +namezone: +failzone1: xn--o-1hc2c +failzone2: +token: 53213348 +passfail: fail +type: toascii + +===== +desc: 4-4-6 Hebrew other-RandALCat-RandALCat +namebase: <006F><05D1><05E1> +nameutf8: oבס +namezone: +failzone1: xn--o-2hc2c +failzone2: +token: 90835860 +passfail: fail +type: toascii + +===== +desc: 5-1-1 Unassigned in BMP; zone editors should reject +namebase: <0237><00ED>dn +nameutf8: ȷídn +namezone: xn--dn-mja33k +failzone1: +failzone2: +token: 83079602 +passfail: pass +type: toascii + +===== +desc: 5-1-2 Unassinged outside BMP; zone editors should reject +namebase: <10205><00ED>dn +nameutf8: ЈƃΤn +namezone: xn--dn-mja7734x +failzone1: xn--dn-mja7922x +failzone2: +token: 03682900 +passfail: pass +type: toascii + +===== +desc: 5-2-1 Newly assigned in BMP; zone editors should reject +namebase: <0234><00ED>dn +nameutf8: ȴídn +namezone: xn--dn-mja12k +failzone1: +failzone2: +token: 96637501 +passfail: pass +type: toascii + +===== +desc: 5-2-2 Newly assigned outside of BMP; zone editors should reject +namebase: <10005><00ED>dn +nameutf8: ЀƃΤn +namezone: xn--dn-mja9232x +failzone1: xn--dn-mja7922x +failzone2: +token: 95537699 +passfail: pass +type: toascii \ No newline at end of file diff --git a/icuSources/test/testdata/idna_rules.txt b/icuSources/test/testdata/idna_rules.txt index ebfd6e3b..7ef6404e 100644 --- a/icuSources/test/testdata/idna_rules.txt +++ b/icuSources/test/testdata/idna_rules.txt @@ -1,8 +1,8 @@ -// Copyright (C) 2003, International Business Machines +// Copyright (C) 2003-2005, International Business Machines // WARNING: This file is machine generated by debug\genidn tool. Please DO NOT edit. -idna_rules{ +idna_rules:table(nofallback){ UnassignedSet{"[ \\u0221 \\u0234-\\u024F \\u02AE-\\u02AF \\u02EF-\\u02FF \\u0350-\\u035F \\u0370-\\u0373 " "\\u0376-\\u0379 \\u037B-\\u037D \\u037F-\\u0383 \\u038B \\u038D \\u03A2 \\u03CF " diff --git a/icuSources/test/testdata/iscii.bin b/icuSources/test/testdata/iscii.bin index 2c4944c1..88051f09 100644 --- a/icuSources/test/testdata/iscii.bin +++ b/icuSources/test/testdata/iscii.bin @@ -1,19 +1,19 @@ -//******************************************************************************* -//* -//*Copyright(C)1998-2000InternationalBusinessMachines -//*Corporationandothers.AllRightsReserved. -//* -//******************************************************************************* -iscii{ - str{ - " ï4ï3ÍÝï4ï3Æá×è³å .³á .¬³ .¤ÅèÍÍÆ .³á ¤ÆÝ×ÚÏ 1990 ³ ³¢ÈèÍÞ½Ï-ÈèÏÊ¢ÅÛ ×Þ¸ÆÚ" - "ÈèÏÁÚÑÜ .³á .ÍåµÄÚÆ .³á .ÉÑ×èÔÏÞÈ .ÔÛÕèÔ .Ìᢠ.×ÚÑÚÆÚ .2200 ¤ÏÊ ÏÝÈÍá ÌÞÑèÍ" - "³Ü .4Ô×èÂÝ°¢ .4³Ú .4¨ÂèÈÚÄÆ .4ØåµÚ, .3ºÊ³Û .3³¢ÈèÍÞ½Ï .3³Ú .3³ÝÑ .3ÍåµÄÚÆ .3¦××á" - "³ØÛ ./ºèÍÚÄÚ ./ØåµÚê ./¤ÆÝ×¢ÅÚÆ ./³Ü ./¸ÏÌ ×ÜÌÚ°¢ ÈÏ ÈØÝ¢¸Æá ³á ÑÛ¬ ³¢ÈèÍÞ½Ï" - "¬³ ./¥Ì ./ºÏÞÏ ./ºâ×Ú ÊÆ µÍÚ Øâê ËÚÏ ÌᢠËÜ, ´Ú×³Ï ÌæºÞÄÚ ×ϳÚÏ" - "Æá, ³¢ÈèÍÞ½Ï ³á ÈèÏÍåµ ÈÏ ºÊÏÄ×è ¬¿é ѵÚÍÜ Øâ, ³Û¢ÂÝ ¦×³á ×ÏȽ Äæ¿é" - "ѵÚÆá .2³á .2ÑÛ¬ .2³èÍÚ .2×ÈÚ½ .2ÏÚ×èÂÚ .2¨ÈÑÊèÅ .Øâ, .¤ÃÔÚ .ÔÛÕèÔ .Ìᢠ.³¢ÈèÍÞ½Ï .³Ü" - "×ÉÑÂÚ .3Ô .3ÔÛÉÑÂÚ .3×á .3×ʳ .3Ñá .3³Ï .3³èÍÚ .3ØÌ .3¦×³Ú .3ÍݳèÂÛÈÞÏèÁ .2ÔÛ×èÂÚÏ " - "¤Èá³èÖÛ ³Ï ׳ᢵá ? " - } -} \ No newline at end of file +//******************************************************************************* +//* +//*Copyright (C)1998-2006 International Business Machines +//*Corporation and others.All Rights Reserved. +//* +//******************************************************************************* +iscii:table(nofallback){ + str{ + " ï4ï3ÍÝï4ï3Æá×è³å .³á .¬³ .¤ÅèÍÍÆ .³á ¤ÆÝ×ÚÏ 1990 ³ ³¢ÈèÍÞ½Ï-ÈèÏÊ¢ÅÛ ×Þ¸ÆÚ" + "ÈèÏÁÚÑÜ .³á .ÍåµÄÚÆ .³á .ÉÑ×èÔÏÞÈ .ÔÛÕèÔ .Ìᢠ.×ÚÑÚÆÚ .2200 ¤ÏÊ ÏÝÈÍá ÌÞÑèÍ" + "³Ü .4Ô×èÂÝ°¢ .4³Ú .4¨ÂèÈÚÄÆ .4ØåµÚ, .3ºÊ³Û .3³¢ÈèÍÞ½Ï .3³Ú .3³ÝÑ .3ÍåµÄÚÆ .3¦××á" + "³ØÛ ./ºèÍÚÄÚ ./ØåµÚê ./¤ÆÝ×¢ÅÚÆ ./³Ü ./¸ÏÌ ×ÜÌÚ°¢ ÈÏ ÈØÝ¢¸Æá ³á ÑÛ¬ ³¢ÈèÍÞ½Ï" + "¬³ ./¥Ì ./ºÏÞÏ ./ºâ×Ú ÊÆ µÍÚ Øâê ËÚÏ ÌᢠËÜ, ´Ú×³Ï ÌæºÞÄÚ ×ϳÚÏ" + "Æá, ³¢ÈèÍÞ½Ï ³á ÈèÏÍåµ ÈÏ ºÊÏÄ×è ¬¿é ѵÚÍÜ Øâ, ³Û¢ÂÝ ¦×³á ×ÏȽ Äæ¿é" + "ѵÚÆá .2³á .2ÑÛ¬ .2³èÍÚ .2×ÈÚ½ .2ÏÚ×èÂÚ .2¨ÈÑÊèÅ .Øâ, .¤ÃÔÚ .ÔÛÕèÔ .Ìᢠ.³¢ÈèÍÞ½Ï .³Ü" + "×ÉÑÂÚ .3Ô .3ÔÛÉÑÂÚ .3×á .3×ʳ .3Ñá .3³Ï .3³èÍÚ .3ØÌ .3¦×³Ú .3ÍݳèÂÛÈÞÏèÁ .2ÔÛ×èÂÚÏ " + "¤Èá³èÖÛ ³Ï ׳ᢵá ? " + } +} diff --git a/icuSources/test/testdata/letest.xml b/icuSources/test/testdata/letest.xml new file mode 100644 index 00000000..e3de0f08 --- /dev/null +++ b/icuSources/test/testdata/letest.xml @@ -0,0 +1,1048 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + Copyright (c) 1999-2006 International Business Machines + Corporation and others. All rights reserved. + + WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT + UNLESS YOU REALLY KNOW WHAT YOU'RE DOING. + + file name: letest.xml + generated on: 07/27/2006 04:42:26 PM Hawaiian Standard Time + generated by: gendata.cpp +--> + +<layout-tests> + <test-case id="Ghita" script="deva"> + <test-font name="raghu.ttf" version="Version 0.99" checksum="0x541C94C7"/> + + <test-text>श्रीमद् भगवद्गीता अध्याय अर्जुन विषाद योग धृतराष्ट्र उवाचृ धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः मामकाः पाण्डवाश्चैव किमकुर्वत संजव</test-text> + + <result-glyphs> + 0x0000012E, 0x0000FFFF, 0x0000FFFF, 0x00000222, 0x00000098, 0x0000026E, 0x0000FFFF, 0x00000003, + 0x00000097, 0x00000082, 0x0000009D, 0x000001A5, 0x0000FFFF, 0x0000FFFF, 0x00000222, 0x0000008F, + 0x00000221, 0x00000003, 0x0000005C, 0x000000DA, 0x0000FFFF, 0x00000099, 0x00000221, 0x00000099, + 0x00000003, 0x0000005C, 0x00000087, 0x000001D5, 0x0000005B, 0x0000FFFF, 0x00000093, 0x00000003, + 0x000001D2, 0x0000009D, 0x0000009F, 0x00000221, 0x00000091, 0x00000003, 0x00000099, 0x0000022A, + 0x00000082, 0x00000003, 0x00000092, 0x000001D9, 0x0000008F, 0x0000009A, 0x00000221, 0x000001B6, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000060, 0x0000009D, 0x00000221, + 0x00000085, 0x000001D9, 0x00000003, 0x00000092, 0x00000098, 0x0000005B, 0x0000FFFF, 0x000000A2, + 0x0000FFFF, 0x0000FFFF, 0x0000022F, 0x0000011F, 0x0000FFFF, 0x0000FFFF, 0x0000022F, 0x00000003, + 0x00000080, 0x000001D5, 0x0000009A, 0x000001FD, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x0000022F, + 0x0000011F, 0x0000FFFF, 0x0000FFFF, 0x0000022F, 0x00000003, 0x000000A0, 0x00000098, 0x0000009D, + 0x0000022F, 0x0000008F, 0x00000221, 0x00000003, 0x00000099, 0x000001D5, 0x00000099, 0x000001D5, + 0x000000D7, 0x0000FFFF, 0x000000A0, 0x0000009D, 0x0000022C, 0x00000003, 0x00000098, 0x00000221, + 0x00000098, 0x00000080, 0x00000221, 0x0000022C, 0x00000003, 0x00000094, 0x00000221, 0x000000D6, + 0x0000FFFF, 0x0000008C, 0x0000009D, 0x00000221, 0x000001B1, 0x0000FFFF, 0x0000FFFF, 0x00000230, + 0x0000009D, 0x00000003, 0x000001D1, 0x00000080, 0x00000098, 0x00000080, 0x000001D5, 0x0000009D, + 0x0000005B, 0x0000FFFF, 0x0000008F, 0x00000003, 0x000000A0, 0x00000232, 0x00000087, 0x0000009D + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, + 0x00000018, 0x00000019, 0x0000001C, 0x0000001D, 0x0000001A, 0x0000001B, 0x0000001E, 0x0000001F, + 0x00000021, 0x00000020, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, + 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, + 0x00000030, 0x00000031, 0x00000033, 0x00000032, 0x00000034, 0x00000035, 0x00000036, 0x00000037, + 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003E, 0x0000003C, 0x0000003D, 0x0000003F, + 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000045, 0x00000044, 0x00000046, 0x00000047, + 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, + 0x00000050, 0x00000052, 0x00000051, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00000057, + 0x00000058, 0x00000059, 0x0000005A, 0x0000005B, 0x0000005C, 0x0000005D, 0x0000005E, 0x0000005F, + 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, + 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F, + 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, + 0x00000078, 0x00000079, 0x0000007B, 0x0000007A, 0x0000007C, 0x0000007D, 0x0000007E, 0x00000081, + 0x0000007F, 0x00000080, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 9.468750, 0.000000, 9.468750, 0.000000, 9.468750, 0.000000, + 13.125000, 0.000000, 22.593750, 0.000000, 30.562500, 0.000000, 30.562500, 0.000000, + 36.562500, 0.000000, 46.031250, 0.000000, 55.500000, 0.000000, 63.468750, 0.000000, + 71.437500, 0.000000, 71.437500, 0.000000, 71.437500, 0.000000, 75.093750, 0.000000, + 83.062500, 0.000000, 86.718750, 0.000000, 92.718750, 0.000000, 102.656250, 0.000000, + 109.921875, 0.000000, 109.921875, 0.000000, 119.390625, 0.000000, 123.046875, 0.000000, + 132.515625, 0.000000, 138.515625, 0.000000, 148.453125, 0.000000, 158.203125, -0.011719, + 158.203125, 0.263672, 157.921875, 0.000000, 157.921875, 0.000000, 167.390625, 0.000000, + 173.390625, 0.000000, 177.750000, 0.000000, 185.718750, 0.000000, 193.687500, 0.000000, + 197.343750, 0.000000, 205.312500, 0.000000, 211.312500, 0.000000, 220.781250, 0.000000, + 224.859375, 0.000000, 234.328125, 0.000000, 240.328125, 0.000000, 250.224609, -0.011719, + 249.796875, 0.000000, 257.765625, 0.000000, 264.281250, 0.000000, 267.937500, 0.000000, + 276.281250, 0.000000, 276.281250, 0.000000, 276.281250, 0.000000, 276.281250, 0.000000, + 276.281250, 0.000000, 282.281250, 0.000000, 290.250000, 0.000000, 298.218750, 0.000000, + 301.875000, 0.000000, 311.859375, -0.011719, 311.343750, 0.000000, 317.343750, 0.000000, + 326.812500, 0.000000, 336.644531, 0.263672, 336.281250, 0.000000, 336.281250, 0.000000, + 347.156250, 0.000000, 347.156250, 0.000000, 346.353516, 0.275391, 347.156250, 0.000000, + 355.125000, 0.000000, 355.125000, 0.000000, 355.263672, 0.263672, 355.125000, 0.000000, + 361.125000, 0.000000, 368.824219, -0.011719, 372.000000, 0.000000, 378.515625, 0.000000, + 379.875000, 0.000000, 390.750000, 0.000000, 390.750000, 0.000000, 389.947266, 0.275391, + 390.750000, 0.000000, 398.718750, 0.000000, 398.718750, 0.000000, 398.857422, 0.263672, + 398.718750, 0.000000, 404.718750, 0.000000, 414.187500, 0.000000, 423.656250, 0.000000, + 430.769531, 0.263672, 431.625000, 0.000000, 439.593750, 0.000000, 443.250000, 0.000000, + 449.250000, 0.000000, 458.859375, -0.011719, 458.718750, 0.000000, 468.328125, -0.011719, + 468.187500, 0.000000, 474.117188, 0.000000, 474.117188, 0.000000, 483.585938, 0.000000, + 491.554688, 0.000000, 495.914063, 0.000000, 501.914063, 0.000000, 511.382813, 0.000000, + 515.039063, 0.000000, 524.507813, 0.000000, 535.382813, 0.000000, 539.039063, 0.000000, + 543.398438, 0.000000, 549.398438, 0.000000, 557.367188, 0.000000, 561.023438, 0.000000, + 568.289063, 0.000000, 568.289063, 0.000000, 576.257813, 0.000000, 584.226563, 0.000000, + 587.882813, 0.000000, 598.757813, 0.000000, 598.757813, 0.000000, 598.628906, 0.263672, + 598.757813, 0.000000, 606.726563, 0.000000, 612.726563, 0.000000, 617.085938, 0.000000, + 627.960938, 0.000000, 637.429688, 0.000000, 645.128906, -0.011719, 648.304688, 0.000000, + 656.566406, 0.263672, 656.273438, 0.000000, 656.273438, 0.000000, 664.242188, 0.000000, + 670.242188, 0.000000, 679.429688, 0.966797, 679.710938, 0.000000, 689.179688, 0.000000, + 697.148438, 0.000000 + </result-positions> + </test-case> + + <test-case id="Arabic" script="arab"> + <test-font name="CODE2000.TTF" version="Version 1.15" checksum="0x1B2AD10D"/> + + <test-text>أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية</test-text> + + <result-glyphs> + 0x0000C6ED, 0x0000C74C, 0x0000C706, 0x0000C746, 0x0000C707, 0x0000C719, 0x0000C738, 0x0000C6E6, + 0x00000003, 0x0000C72A, 0x0000C706, 0x0000C6E7, 0x0000C6FD, 0x0000C73D, 0x0000C738, 0x0000C6E6, + 0x00000003, 0x0000C723, 0x0000C74D, 0x0000C73D, 0x0000C6F8, 0x00000003, 0x0000C749, 0x0000C739, + 0x0000C724, 0x00000003, 0x0000C74A, 0x0000C747, 0x0000C6F1, 0x0000C6FD, 0x0000C74C, 0x00000003, + 0x0000C703, 0x0000C6FC, 0x0000C6E6, 0x0000C746, 0x00000003, 0x0000C707, 0x0000C74D, 0x0000C72D, + 0x0000C711, 0x0000C6F0, 0x00000003, 0x0000C73A, 0x0000C6E7, 0x0000C721, 0x0000C740, 0x00000003, + 0x0000C703, 0x0000C6F8, 0x0000C747, 0x0000C74C, 0x00000003, 0x0000C73B, 0x0000C738, 0x0000C746, + 0x00000003, 0x00000534, 0x0000C72A, 0x0000C706, 0x0000C6E7, 0x0000C6FD, 0x0000C73D, 0x0000C739, + 0x0000C738, 0x00000003, 0x0000C73A, 0x0000C6E7, 0x0000C730, 0x0000C706, 0x0000FFFE, 0x0000C750, + 0x0000C6E6, 0x00000003, 0x0000C742, 0x0000C705, 0x0000C744, 0x00000003, 0x0000C713, 0x0000C74D, + 0x0000C715, 0x0000C701, 0x0000C6F0, 0x0000C746, 0x00000003, 0x0000C707, 0x0000C74D, 0x0000C72D, + 0x0000C711, 0x0000C6F1, 0x0000C739, 0x0000C738, 0x00000003, 0x0000C6ED, 0x0000C73D, 0x0000C721, + 0x0000C740, 0x0000FFFE, 0x0000C750, 0x0000C6E6, 0x00000003, 0x0000C6EE, 0x0000C6E7, 0x0000053C, + 0x0000C73C, 0x00000003, 0x0000C732, 0x0000C6E7, 0x0000C741, 0x0000C744, 0x00000003, 0x0000C73E, + 0x0000C6E7, 0x0000C734, 0x00000003, 0x00000534, 0x00000005, 0x0000C702, 0x0000C747, 0x0000C735, + 0x00000561, 0x0000C740, 0x0000C747, 0x0000C74C, 0x00000005, 0x00000003, 0x0000C722, 0x0000C6E6, + 0x0000C707, 0x0000C6F1, 0x0000C700, 0x0000C6E6, 0x00000003, 0x0000C737, 0x0000C6EB, 0x0000C730, + 0x0000C746, 0x00000003, 0x00000011, 0x0000C6E7, 0x0000C745, 0x0000C741, 0x0000C73C, 0x00000003, + 0x0000C703, 0x0000C6FC, 0x0000C6E6, 0x0000C746, 0x00000003, 0x0000C737, 0x0000C735, 0x0000C738, + 0x00000003, 0x0000C6E7, 0x0000C741, 0x0000C74D, 0x0000C725, 0x0000C73C, 0x00000003, 0x0000C6E7, + 0x0000C73D, 0x0000C730, 0x0000C706, 0x00000003, 0x0000C74B, 0x0000C71D, 0x0000C725, 0x00000560, + 0x0000C6F0, 0x00000003, 0x0000C73E, 0x0000C6DC, 0x00000003, 0x0000C703, 0x0000C725, 0x0000C6EA, + 0x00000003, 0x0000C748, 0x0000C707, 0x0000C700, 0x0000FFFE, 0x0000C750, 0x0000C6E6, 0x00000003, + 0x0000C72A, 0x0000C706, 0x0000C6E7, 0x0000C6FD, 0x0000C73D, 0x0000C738, 0x0000C6E6, 0x0000C746, + 0x00000003, 0x0000C72A, 0x0000C707, 0x0000C6FC, 0x0000FFFE, 0x0000C750, 0x0000C6E6, 0x00000003, + 0x0000C73F, 0x0000C74C, 0x0000C709, 0x0000C701, 0x0000C6F1, 0x0000C6EA, 0x00000003, 0x0000C73A, + 0x0000C747, 0x0000C731, 0x0000C6F0, 0x0000C746, 0x00000003, 0x00000534, 0x0000C73A, 0x0000C6E7, + 0x0000C730, 0x0000C706, 0x0000FFFE, 0x0000C750, 0x0000C6E6, 0x00000003, 0x0000C723, 0x0000C73C, + 0x00000003, 0x0000C71B, 0x0000C731, 0x0000C72C, 0x00000003, 0x0000C6E9, 0x0000C74D, 0x0000C70C, + 0x0000C6E6, 0x0000C747, 0x0000C6FD, 0x0000C738, 0x0000C6E6, 0x00000003, 0x0000C737, 0x0000C73C, + 0x0000C6E7, 0x0000C725, 0x0000C6F1, 0x0000C6F0, 0x00000003, 0x00000534, 0x0000C6E7, 0x0000055C, + 0x0000C70C, 0x0000C6E7, 0x0000C70C, 0x0000C6DC + </result-glyphs> + + <result-indices> + 0x000000FB, 0x000000FA, 0x000000F9, 0x000000F8, 0x000000F7, 0x000000F6, 0x000000F5, 0x000000F4, + 0x000000F3, 0x000000F2, 0x000000F1, 0x000000F0, 0x000000EF, 0x000000EE, 0x000000ED, 0x000000EC, + 0x000000EB, 0x000000EA, 0x000000E9, 0x000000E8, 0x000000E7, 0x000000E6, 0x000000E5, 0x000000E4, + 0x000000E3, 0x000000E2, 0x000000E1, 0x000000E0, 0x000000DF, 0x000000DE, 0x000000DD, 0x000000DC, + 0x000000DB, 0x000000DA, 0x000000D9, 0x000000D8, 0x000000D7, 0x000000D6, 0x000000D5, 0x000000D4, + 0x000000D3, 0x000000D2, 0x000000D1, 0x000000D0, 0x000000CF, 0x000000CE, 0x000000CD, 0x000000CC, + 0x000000CB, 0x000000CA, 0x000000C9, 0x000000C8, 0x000000C7, 0x000000C6, 0x000000C5, 0x000000C4, + 0x000000C3, 0x000000C2, 0x000000C1, 0x000000C0, 0x000000BF, 0x000000BE, 0x000000BD, 0x000000BC, + 0x000000BB, 0x000000BA, 0x000000B9, 0x000000B8, 0x000000B7, 0x000000B6, 0x000000B5, 0x000000B4, + 0x000000B3, 0x000000B2, 0x000000B1, 0x000000B0, 0x000000AF, 0x000000AE, 0x000000AD, 0x000000AC, + 0x000000AB, 0x000000AA, 0x000000A9, 0x000000A8, 0x000000A7, 0x000000A6, 0x000000A5, 0x000000A4, + 0x000000A3, 0x000000A2, 0x000000A1, 0x000000A0, 0x0000009F, 0x0000009E, 0x0000009D, 0x0000009C, + 0x0000009B, 0x0000009A, 0x00000099, 0x00000098, 0x00000097, 0x00000096, 0x00000095, 0x00000094, + 0x00000093, 0x00000092, 0x00000091, 0x00000090, 0x0000008F, 0x0000008E, 0x0000008D, 0x0000008C, + 0x0000008B, 0x0000008A, 0x00000089, 0x00000088, 0x00000087, 0x00000086, 0x00000085, 0x00000084, + 0x00000083, 0x00000082, 0x00000081, 0x00000080, 0x0000007F, 0x0000007E, 0x0000007D, 0x0000007C, + 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, 0x00000074, + 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, 0x0000006C, + 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, 0x00000064, + 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, 0x0000005C, + 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, 0x00000054, + 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, 0x0000004C, + 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, 0x00000044, + 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, 0x0000003C, + 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, + 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, 0x0000002C, + 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, 0x00000024, + 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, 0x0000001C, + 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, 0x00000014, + 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000C, + 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000004, + 0x00000003, 0x00000002, 0x00000001, 0x00000000 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 4.007813, 0.000000, 8.226563, 0.000000, 12.679688, 0.000000, + 18.679688, 0.000000, 23.132813, 0.000000, 31.289063, 0.000000, 34.312500, 0.000000, + 36.375000, 0.000000, 41.062500, 0.000000, 50.296875, 0.000000, 54.750000, 0.000000, + 56.859375, 0.000000, 62.367188, 0.000000, 66.632813, 0.000000, 69.656250, 0.000000, + 71.718750, 0.000000, 76.406250, 0.000000, 81.421875, 0.000000, 85.664063, 0.000000, + 89.929688, 0.000000, 95.742188, 0.000000, 100.429688, 0.000000, 108.796875, 0.000000, + 112.171875, 0.000000, 115.734375, 0.000000, 120.421875, 0.000000, 128.765625, 0.000000, + 134.765625, 0.000000, 139.007813, 0.000000, 144.515625, 0.000000, 148.734375, 0.000000, + 153.421875, 0.000000, 157.359375, 0.000000, 163.171875, 0.000000, 165.234375, 0.000000, + 171.234375, 0.000000, 175.921875, 0.000000, 180.375000, 0.000000, 184.617188, 0.000000, + 188.085938, 0.000000, 195.117188, 0.000000, 199.312500, 0.000000, 204.000000, 0.000000, + 208.007813, 0.000000, 210.117188, 0.000000, 217.054688, 0.000000, 220.429688, 0.000000, + 225.117188, 0.000000, 229.054688, 0.000000, 234.867188, 0.000000, 240.867188, 0.000000, + 245.085938, 0.000000, 249.773438, 0.000000, 253.781250, 0.000000, 256.804688, 0.000000, + 262.804688, 0.000000, 267.492188, 0.000000, 271.007813, 0.000000, 280.242188, 0.000000, + 284.695313, 0.000000, 286.804688, 0.000000, 292.312500, 0.000000, 296.578125, 0.000000, + 299.953125, 0.000000, 302.976563, 0.000000, 307.664063, 0.000000, 311.671875, 0.000000, + 313.781250, 0.000000, 317.882813, 0.000000, 322.335938, 0.000000, 322.335938, 0.000000, + 328.500000, 0.000000, 330.562500, 0.000000, 335.250000, 0.000000, 339.140625, 0.000000, + 343.078125, 0.000000, 348.984375, 0.000000, 353.671875, 0.000000, 366.445313, 0.000000, + 370.687500, 0.000000, 378.843750, 0.000000, 384.351563, 0.000000, 388.546875, 0.000000, + 394.546875, 0.000000, 399.234375, 0.000000, 403.687500, 0.000000, 407.929688, 0.000000, + 411.398438, 0.000000, 418.429688, 0.000000, 422.671875, 0.000000, 426.046875, 0.000000, + 429.070313, 0.000000, 433.757813, 0.000000, 437.765625, 0.000000, 442.031250, 0.000000, + 448.968750, 0.000000, 452.343750, 0.000000, 452.343750, 0.000000, 458.507813, 0.000000, + 460.570313, 0.000000, 465.257813, 0.000000, 474.492188, 0.000000, 476.601563, 0.000000, + 484.968750, 0.000000, 489.234375, 0.000000, 493.921875, 0.000000, 501.562500, 0.000000, + 503.671875, 0.000000, 507.890625, 0.000000, 513.796875, 0.000000, 518.484375, 0.000000, + 525.796875, 0.000000, 527.906250, 0.000000, 533.578125, 0.000000, 538.265625, 0.000000, + 541.781250, 0.000000, 547.171875, 0.000000, 550.710938, 0.000000, 556.710938, 0.000000, + 564.492188, 0.000000, 564.492188, 0.000000, 567.867188, 0.000000, 573.867188, 0.000000, + 578.085938, 0.000000, 583.476563, 0.000000, 588.164063, 0.000000, 593.976563, 0.000000, + 596.039063, 0.000000, 600.492188, 0.000000, 604.734375, 0.000000, 610.546875, 0.000000, + 612.609375, 0.000000, 617.296875, 0.000000, 623.695313, 0.000000, 627.937500, 0.000000, + 632.039063, 0.000000, 638.039063, 0.000000, 642.726563, 0.000000, 646.054688, 0.000000, + 648.164063, 0.000000, 651.914063, 0.000000, 656.132813, 0.000000, 660.398438, 0.000000, + 665.085938, 0.000000, 669.023438, 0.000000, 674.835938, 0.000000, 676.898438, 0.000000, + 682.898438, 0.000000, 687.585938, 0.000000, 693.984375, 0.000000, 701.765625, 0.000000, + 704.789063, 0.000000, 709.476563, 0.000000, 711.585938, 0.000000, 715.804688, 0.000000, + 720.046875, 0.000000, 723.515625, 0.000000, 727.781250, 0.000000, 732.468750, 0.000000, + 734.578125, 0.000000, 738.843750, 0.000000, 742.945313, 0.000000, 747.398438, 0.000000, + 752.085938, 0.000000, 760.453125, 0.000000, 767.390625, 0.000000, 770.859375, 0.000000, + 770.859375, 0.000000, 775.054688, 0.000000, 779.742188, 0.000000, 787.054688, 0.000000, + 789.398438, 0.000000, 794.085938, 0.000000, 798.023438, 0.000000, 801.492188, 0.000000, + 804.937500, 0.000000, 809.625000, 0.000000, 817.968750, 0.000000, 822.421875, 0.000000, + 828.234375, 0.000000, 828.234375, 0.000000, 834.398438, 0.000000, 836.460938, 0.000000, + 841.148438, 0.000000, 850.382813, 0.000000, 854.835938, 0.000000, 856.945313, 0.000000, + 862.453125, 0.000000, 866.718750, 0.000000, 869.742188, 0.000000, 871.804688, 0.000000, + 877.804688, 0.000000, 882.492188, 0.000000, 891.726563, 0.000000, 896.179688, 0.000000, + 901.992188, 0.000000, 901.992188, 0.000000, 908.156250, 0.000000, 910.218750, 0.000000, + 914.906250, 0.000000, 922.382813, 0.000000, 926.601563, 0.000000, 931.054688, 0.000000, + 936.562500, 0.000000, 940.804688, 0.000000, 944.250000, 0.000000, 948.937500, 0.000000, + 952.945313, 0.000000, 958.945313, 0.000000, 962.414063, 0.000000, 966.609375, 0.000000, + 972.609375, 0.000000, 977.296875, 0.000000, 980.812500, 0.000000, 984.820313, 0.000000, + 986.929688, 0.000000, 991.031250, 0.000000, 995.484375, 0.000000, 995.484375, 0.000000, + 1001.648438, 0.000000, 1003.710938, 0.000000, 1008.398438, 0.000000, 1013.414063, 0.000000, + 1017.679688, 0.000000, 1022.367188, 0.000000, 1030.312500, 0.000000, 1033.781250, 0.000000, + 1037.882813, 0.000000, 1042.570313, 0.000000, 1051.921875, 0.000000, 1056.164063, 0.000000, + 1062.984375, 0.000000, 1065.046875, 0.000000, 1071.046875, 0.000000, 1076.554688, 0.000000, + 1079.578125, 0.000000, 1081.640625, 0.000000, 1086.328125, 0.000000, 1092.726563, 0.000000, + 1096.992188, 0.000000, 1099.101563, 0.000000, 1102.570313, 0.000000, 1106.812500, 0.000000, + 1111.007813, 0.000000, 1115.695313, 0.000000, 1119.210938, 0.000000, 1121.320313, 0.000000, + 1121.320313, 0.000000, 1128.140625, 0.000000, 1130.250000, 0.000000, 1137.070313, 0.000000, + 1139.414063, 0.000000 + </result-positions> + </test-case> + + <test-case id="Unicode Arabic" script="arab"> + <test-font name="LucidaSansRegular.ttf" version="Version 1.20 - October 2000" checksum="0xF5D9BA6D"/> + + <test-text>أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية</test-text> + + <result-glyphs> + 0x00000872, 0x000008D1, 0x000003F9, 0x0000040B, 0x0000088C, 0x0000089E, 0x000008BD, 0x000003EF, + 0x00000003, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, + 0x00000003, 0x000008A8, 0x000008D2, 0x000008C2, 0x0000087D, 0x00000003, 0x000008CE, 0x000008BE, + 0x000008A9, 0x00000003, 0x0000040D, 0x000008CC, 0x00000876, 0x00000882, 0x000008D1, 0x00000003, + 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, + 0x00000896, 0x00000875, 0x00000003, 0x00000408, 0x0000086C, 0x000008A6, 0x000008C5, 0x00000003, + 0x00000888, 0x0000087D, 0x000008CC, 0x000008D1, 0x00000003, 0x000008C0, 0x000008BD, 0x0000040B, + 0x00000003, 0x000003E6, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BE, + 0x000008BD, 0x00000003, 0x00000408, 0x0000086C, 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, + 0x000003EF, 0x00000003, 0x0000040A, 0x0000088A, 0x000008C9, 0x00000003, 0x00000898, 0x000008D2, + 0x0000089A, 0x00000886, 0x00000875, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, + 0x00000896, 0x00000876, 0x000008BE, 0x000008BD, 0x00000003, 0x00000872, 0x000008C2, 0x000008A6, + 0x000008C5, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000003F2, 0x0000086C, 0x0000086A, + 0x000008C1, 0x00000003, 0x00000406, 0x0000086C, 0x000008C6, 0x000008C9, 0x00000003, 0x00000409, + 0x0000086C, 0x000008B9, 0x00000003, 0x000003E6, 0x00000005, 0x000003F7, 0x000008CC, 0x000008BA, + 0x00000413, 0x000008C5, 0x000008CC, 0x000008D1, 0x00000005, 0x00000003, 0x00000401, 0x000003EF, + 0x0000088C, 0x00000876, 0x00000885, 0x000003EF, 0x00000003, 0x000008BC, 0x00000870, 0x000008B5, + 0x0000040B, 0x00000003, 0x00000011, 0x0000086C, 0x000008CA, 0x000008C6, 0x000008C1, 0x00000003, + 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x000008BC, 0x000008BA, 0x000008BD, + 0x00000003, 0x0000086C, 0x000008C6, 0x000008D2, 0x000008AA, 0x000008C1, 0x00000003, 0x0000086C, + 0x000008C2, 0x000008B5, 0x000003F9, 0x00000003, 0x000008D0, 0x000008A2, 0x000008AA, 0x00000412, + 0x00000875, 0x00000003, 0x00000409, 0x000003EB, 0x00000003, 0x00000888, 0x000008AA, 0x0000086F, + 0x00000003, 0x0000040C, 0x0000088C, 0x00000885, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, + 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, 0x0000040B, + 0x00000003, 0x00000404, 0x0000088C, 0x00000881, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, + 0x000008C4, 0x000008D1, 0x0000088E, 0x00000886, 0x00000876, 0x0000086F, 0x00000003, 0x00000408, + 0x000008CC, 0x000008B6, 0x00000875, 0x0000040B, 0x00000003, 0x000003E6, 0x00000408, 0x0000086C, + 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000008A8, 0x000008C1, + 0x00000003, 0x000008A0, 0x000008B6, 0x000008B1, 0x00000003, 0x0000086E, 0x000008D2, 0x00000891, + 0x000003EF, 0x000008CC, 0x00000882, 0x000008BD, 0x000003EF, 0x00000003, 0x000008BC, 0x000008C1, + 0x0000086C, 0x000008AA, 0x00000876, 0x00000875, 0x00000003, 0x000003E6, 0x0000086C, 0x0000040E, + 0x00000891, 0x0000086C, 0x00000891, 0x000003EB + </result-glyphs> + + <result-indices> + 0x000000FB, 0x000000FA, 0x000000F9, 0x000000F8, 0x000000F7, 0x000000F6, 0x000000F5, 0x000000F4, + 0x000000F3, 0x000000F2, 0x000000F1, 0x000000F0, 0x000000EF, 0x000000EE, 0x000000ED, 0x000000EC, + 0x000000EB, 0x000000EA, 0x000000E9, 0x000000E8, 0x000000E7, 0x000000E6, 0x000000E5, 0x000000E4, + 0x000000E3, 0x000000E2, 0x000000E1, 0x000000E0, 0x000000DF, 0x000000DE, 0x000000DD, 0x000000DC, + 0x000000DB, 0x000000DA, 0x000000D9, 0x000000D8, 0x000000D7, 0x000000D6, 0x000000D5, 0x000000D4, + 0x000000D3, 0x000000D2, 0x000000D1, 0x000000D0, 0x000000CF, 0x000000CE, 0x000000CD, 0x000000CC, + 0x000000CB, 0x000000CA, 0x000000C9, 0x000000C8, 0x000000C7, 0x000000C6, 0x000000C5, 0x000000C4, + 0x000000C3, 0x000000C2, 0x000000C1, 0x000000C0, 0x000000BF, 0x000000BE, 0x000000BD, 0x000000BC, + 0x000000BB, 0x000000BA, 0x000000B9, 0x000000B8, 0x000000B7, 0x000000B6, 0x000000B5, 0x000000B4, + 0x000000B3, 0x000000B2, 0x000000B1, 0x000000B0, 0x000000AF, 0x000000AE, 0x000000AD, 0x000000AC, + 0x000000AB, 0x000000AA, 0x000000A9, 0x000000A8, 0x000000A7, 0x000000A6, 0x000000A5, 0x000000A4, + 0x000000A3, 0x000000A2, 0x000000A1, 0x000000A0, 0x0000009F, 0x0000009E, 0x0000009D, 0x0000009C, + 0x0000009B, 0x0000009A, 0x00000099, 0x00000098, 0x00000097, 0x00000096, 0x00000095, 0x00000094, + 0x00000093, 0x00000092, 0x00000091, 0x00000090, 0x0000008F, 0x0000008E, 0x0000008D, 0x0000008C, + 0x0000008B, 0x0000008A, 0x00000089, 0x00000088, 0x00000087, 0x00000086, 0x00000085, 0x00000084, + 0x00000083, 0x00000082, 0x00000081, 0x00000080, 0x0000007F, 0x0000007E, 0x0000007D, 0x0000007C, + 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, 0x00000074, + 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, 0x0000006C, + 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, 0x00000064, + 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, 0x0000005C, + 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, 0x00000054, + 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, 0x0000004C, + 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, 0x00000044, + 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, 0x0000003C, + 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, + 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, 0x0000002C, + 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, 0x00000024, + 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, 0x0000001C, + 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, 0x00000014, + 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000C, + 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000004, + 0x00000003, 0x00000002, 0x00000001, 0x00000000 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 6.316406, 0.000000, 10.382813, 0.000000, 15.492188, 0.000000, + 21.035156, 0.000000, 27.058594, 0.000000, 39.527344, 0.000000, 43.792969, 0.000000, + 47.408203, 0.000000, 51.205078, 0.000000, 66.216797, 0.000000, 71.326172, 0.000000, + 74.695313, 0.000000, 83.367188, 0.000000, 90.826172, 0.000000, 95.091797, 0.000000, + 98.707031, 0.000000, 102.503906, 0.000000, 109.962891, 0.000000, 114.949219, 0.000000, + 122.408203, 0.000000, 130.687500, 0.000000, 134.484375, 0.000000, 145.787109, 0.000000, + 150.773438, 0.000000, 156.884766, 0.000000, 160.681641, 0.000000, 172.277344, 0.000000, + 177.919922, 0.000000, 182.906250, 0.000000, 191.578125, 0.000000, 195.644531, 0.000000, + 199.441406, 0.000000, 206.507813, 0.000000, 214.787109, 0.000000, 218.402344, 0.000000, + 223.945313, 0.000000, 227.742188, 0.000000, 233.765625, 0.000000, 238.751953, 0.000000, + 245.185547, 0.000000, 257.982422, 0.000000, 262.048828, 0.000000, 265.845703, 0.000000, + 272.654297, 0.000000, 276.023438, 0.000000, 285.240234, 0.000000, 289.306641, 0.000000, + 293.103516, 0.000000, 300.169922, 0.000000, 308.449219, 0.000000, 314.091797, 0.000000, + 318.158203, 0.000000, 321.955078, 0.000000, 329.572266, 0.000000, 333.837891, 0.000000, + 339.380859, 0.000000, 343.177734, 0.000000, 346.974609, 0.000000, 361.986328, 0.000000, + 367.095703, 0.000000, 370.464844, 0.000000, 379.136719, 0.000000, 386.595703, 0.000000, + 391.582031, 0.000000, 395.847656, 0.000000, 399.644531, 0.000000, 406.453125, 0.000000, + 409.822266, 0.000000, 415.523438, 0.000000, 420.632813, 0.000000, 420.632813, 0.000000, + 427.441406, 0.000000, 431.056641, 0.000000, 434.853516, 0.000000, 441.357422, 0.000000, + 448.423828, 0.000000, 455.912109, 0.000000, 459.708984, 0.000000, 479.255859, 0.000000, + 484.242188, 0.000000, 496.710938, 0.000000, 505.382813, 0.000000, 509.449219, 0.000000, + 514.992188, 0.000000, 518.789063, 0.000000, 524.812500, 0.000000, 529.798828, 0.000000, + 536.232422, 0.000000, 549.029297, 0.000000, 554.015625, 0.000000, 559.001953, 0.000000, + 563.267578, 0.000000, 567.064453, 0.000000, 573.380859, 0.000000, 580.839844, 0.000000, + 590.056641, 0.000000, 594.123047, 0.000000, 594.123047, 0.000000, 600.931641, 0.000000, + 604.546875, 0.000000, 608.343750, 0.000000, 620.636719, 0.000000, 624.005859, 0.000000, + 628.992188, 0.000000, 635.830078, 0.000000, 639.626953, 0.000000, 653.361328, 0.000000, + 656.730469, 0.000000, 661.716797, 0.000000, 669.205078, 0.000000, 673.001953, 0.000000, + 683.777344, 0.000000, 687.146484, 0.000000, 692.660156, 0.000000, 696.457031, 0.000000, + 700.253906, 0.000000, 704.736328, 0.000000, 711.105469, 0.000000, 716.748047, 0.000000, + 722.994141, 0.000000, 722.994141, 0.000000, 727.060547, 0.000000, 732.703125, 0.000000, + 736.769531, 0.000000, 741.251953, 0.000000, 745.048828, 0.000000, 752.507813, 0.000000, + 756.123047, 0.000000, 762.146484, 0.000000, 767.132813, 0.000000, 775.412109, 0.000000, + 779.027344, 0.000000, 782.824219, 0.000000, 794.203125, 0.000000, 799.189453, 0.000000, + 804.890625, 0.000000, 810.433594, 0.000000, 814.230469, 0.000000, 818.027344, 0.000000, + 821.396484, 0.000000, 828.128906, 0.000000, 833.115234, 0.000000, 839.953125, 0.000000, + 843.750000, 0.000000, 850.816406, 0.000000, 859.095703, 0.000000, 862.710938, 0.000000, + 868.253906, 0.000000, 872.050781, 0.000000, 883.429688, 0.000000, 889.675781, 0.000000, + 893.941406, 0.000000, 897.738281, 0.000000, 901.107422, 0.000000, 906.093750, 0.000000, + 911.080078, 0.000000, 917.800781, 0.000000, 924.638672, 0.000000, 928.435547, 0.000000, + 931.804688, 0.000000, 939.263672, 0.000000, 944.964844, 0.000000, 950.074219, 0.000000, + 953.871094, 0.000000, 965.173828, 0.000000, 974.390625, 0.000000, 981.111328, 0.000000, + 981.111328, 0.000000, 985.177734, 0.000000, 988.974609, 0.000000, 999.750000, 0.000000, + 1003.365234, 0.000000, 1007.162109, 0.000000, 1014.228516, 0.000000, 1020.949219, 0.000000, + 1025.015625, 0.000000, 1028.812500, 0.000000, 1040.408203, 0.000000, 1046.431641, 0.000000, + 1054.710938, 0.000000, 1054.710938, 0.000000, 1061.519531, 0.000000, 1065.134766, 0.000000, + 1068.931641, 0.000000, 1083.943359, 0.000000, 1089.052734, 0.000000, 1092.421875, 0.000000, + 1101.093750, 0.000000, 1108.552734, 0.000000, 1112.818359, 0.000000, 1116.433594, 0.000000, + 1121.976563, 0.000000, 1125.773438, 0.000000, 1140.785156, 0.000000, 1146.808594, 0.000000, + 1155.087891, 0.000000, 1155.087891, 0.000000, 1161.896484, 0.000000, 1165.511719, 0.000000, + 1169.308594, 0.000000, 1180.541016, 0.000000, 1184.607422, 0.000000, 1190.630859, 0.000000, + 1199.302734, 0.000000, 1204.289063, 0.000000, 1208.355469, 0.000000, 1212.152344, 0.000000, + 1218.960938, 0.000000, 1224.603516, 0.000000, 1231.037109, 0.000000, 1235.103516, 0.000000, + 1240.646484, 0.000000, 1244.443359, 0.000000, 1248.240234, 0.000000, 1255.048828, 0.000000, + 1258.417969, 0.000000, 1264.119141, 0.000000, 1269.228516, 0.000000, 1269.228516, 0.000000, + 1276.037109, 0.000000, 1279.652344, 0.000000, 1283.449219, 0.000000, 1290.908203, 0.000000, + 1297.746094, 0.000000, 1301.542969, 0.000000, 1311.427734, 0.000000, 1317.861328, 0.000000, + 1323.562500, 0.000000, 1327.359375, 0.000000, 1341.492188, 0.000000, 1346.478516, 0.000000, + 1357.904297, 0.000000, 1361.519531, 0.000000, 1367.162109, 0.000000, 1375.833984, 0.000000, + 1380.099609, 0.000000, 1383.714844, 0.000000, 1387.511719, 0.000000, 1398.890625, 0.000000, + 1405.728516, 0.000000, 1409.097656, 0.000000, 1415.818359, 0.000000, 1420.804688, 0.000000, + 1424.871094, 0.000000, 1428.667969, 0.000000, 1432.464844, 0.000000, 1435.833984, 0.000000, + 1435.833984, 0.000000, 1447.259766, 0.000000, 1450.628906, 0.000000, 1462.054688, 0.000000, + 1465.669922, 0.000000 + </result-positions> + </test-case> + + <test-case id="Thai" script="thai"> + <test-font name="angsd___.ttf" version="Version 2.1 - July 1995" checksum="0x49B67200"/> + + <test-text>บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์</test-text> + + <result-glyphs> + 0x000000F3, 0x000000F0, 0x000000F0, 0x0000010E, 0x0000011D, 0x00000126, 0x000000F7, 0x0000010B, + 0x000000FB, 0x00000111, 0x00000119, 0x000000E4, 0x00000117, 0x000000DD, 0x000000FE, 0x000000F2, + 0x00000117, 0x000000ED, 0x00000117, 0x000000FC, 0x000000F1, 0x0000010E, 0x00000106, 0x0000010B, + 0x00000101, 0x0000010A, 0x000000FB, 0x00000106, 0x000000FB, 0x00000112, 0x0000013B, 0x000000F0, + 0x0000013B, 0x0000010B, 0x000000FA, 0x000000DA, 0x000000FE, 0x0000010B, 0x000000E0, 0x000000F0, + 0x00000111, 0x0000013B, 0x000000E0, 0x00000118, 0x00000104, 0x000000E6, 0x0000013B, 0x00000118, + 0x000000F2, 0x00000116, 0x000000DD, 0x000000F2, 0x000000E4, 0x0000010A, 0x00000103, 0x000000DA, + 0x0000010A, 0x000000F3, 0x000000FE, 0x00000111, 0x000000E0, 0x00000115, 0x00000107, 0x000000F2, + 0x000000FC, 0x0000010E, 0x000000E3, 0x0000010B, 0x00000100, 0x00000119, 0x000000FC, 0x0000013B, + 0x00000116, 0x000000FE, 0x00000109, 0x000000F4, 0x00000137, 0x0000010B, 0x00000115, 0x00000106, + 0x0000011C, 0x000000FA, 0x000000F9, 0x000000FC, 0x000000FC, 0x000000FB, 0x0000010B, 0x000000E3, + 0x0000010B, 0x00000100, 0x00000119, 0x000000FC, 0x0000013B, 0x000000F3, 0x0000013C, 0x0000010B, + 0x000000F2, 0x000000DB, 0x00000106, 0x000000E0, 0x000000F7, 0x00000100, 0x000000DA, 0x00000115, + 0x000000DB, 0x0000010B, 0x00000104, 0x000000FE, 0x0000010A, 0x000000E0, 0x00000115, 0x000000FE, + 0x0000011C, 0x000000DA, 0x00000115, 0x000000F7, 0x000000FC, 0x0000010B, 0x00000109, 0x00000119, + 0x000000FA, 0x0000013C, 0x00000103, 0x000000FC, 0x0000013C, 0x0000010B, 0x000000E0, 0x000000F3, + 0x0000013C, 0x0000010B, 0x000000F2, 0x000000EE, 0x0000013C, 0x00000106, 0x000000E0, 0x000000DB, + 0x000000F2, 0x000000FA, 0x0000010B, 0x000000ED, 0x0000013C, 0x00000100, 0x000000FB, 0x00000115, + 0x000000DA, 0x00000100, 0x0000010E, 0x000000FB, 0x000000F2, 0x00000115, 0x000000F4, 0x00000143, + 0x000000F2, 0x000000FC, 0x00000109, 0x000000FB, 0x00000109, 0x000000F0, 0x0000010B, 0x000000E0, + 0x00000104, 0x000000FE, 0x0000010B, 0x000000FB, 0x00000119, 0x000000FA, 0x000000FE, 0x0000013F + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, + 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, + 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, + 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, + 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, + 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F, + 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, + 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, + 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00000057, + 0x00000058, 0x00000059, 0x0000005A, 0x0000005B, 0x0000005C, 0x0000005D, 0x0000005E, 0x0000005F, + 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, + 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F, + 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, + 0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x0000007C, 0x0000007D, 0x0000007E, 0x0000007F, + 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087, + 0x00000088, 0x00000089, 0x0000008A, 0x0000008B, 0x0000008C, 0x0000008D, 0x0000008E, 0x0000008F, + 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, + 0x00000098, 0x00000099, 0x0000009A, 0x0000009B, 0x0000009C, 0x0000009D, 0x0000009E, 0x0000009F, + 0x000000A0, 0x000000A1, 0x000000A2, 0x000000A3, 0x000000A4, 0x000000A5, 0x000000A6, 0x000000A7 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 5.399414, 0.000000, 10.798828, 0.000000, 16.198242, 0.000000, + 16.198242, 0.000000, 16.198242, 0.000000, 21.046875, 0.000000, 26.616211, 0.000000, + 30.035156, 0.000000, 34.151367, 0.000000, 34.151367, 0.000000, 38.279297, 0.000000, + 43.558594, 0.000000, 47.663086, 0.000000, 52.438477, 0.000000, 57.178711, 0.000000, + 62.698242, 0.000000, 66.802734, 0.000000, 71.601563, 0.000000, 75.706055, 0.000000, + 79.810547, 0.000000, 84.369141, 0.000000, 84.369141, 0.000000, 89.097656, 0.000000, + 92.516602, 0.000000, 97.195313, 0.000000, 97.195313, 0.000000, 101.311523, 0.000000, + 106.040039, 0.000000, 110.156250, 0.000000, 110.156250, 0.000000, 110.156250, 0.000000, + 115.555664, 0.000000, 115.555664, 0.000000, 118.974609, 0.000000, 124.013672, 0.000000, + 128.765625, 0.000000, 133.505859, 0.000000, 136.924805, 0.000000, 140.704102, 0.000000, + 146.103516, 0.000000, 146.103516, 0.000000, 146.103516, 0.000000, 149.882813, 0.000000, + 153.553711, 0.000000, 159.158203, 0.000000, 165.421875, 0.000000, 165.421875, 0.000000, + 169.092773, 0.000000, 174.612305, 0.000000, 179.135742, 0.000000, 183.911133, 0.000000, + 189.430664, 0.000000, 194.709961, 0.000000, 194.709961, 0.000000, 199.989258, 0.000000, + 204.741211, 0.000000, 204.741211, 0.000000, 210.140625, 0.000000, 214.880859, 0.000000, + 214.880859, 0.000000, 218.660156, 0.000000, 220.675781, 0.000000, 225.128906, 0.000000, + 230.648438, 0.000000, 234.752930, 0.000000, 234.752930, 0.000000, 239.613281, 0.000000, + 243.032227, 0.000000, 247.280273, 0.000000, 251.408203, 0.000000, 255.512695, 0.000000, + 255.512695, 0.000000, 260.036133, 0.000000, 264.776367, 0.000000, 269.071289, 0.000000, + 274.470703, 0.000000, 274.470703, 0.000000, 277.889648, 0.000000, 279.905273, 0.000000, + 284.633789, 0.000000, 284.633789, 0.000000, 289.672852, 0.000000, 294.641602, 0.000000, + 298.746094, 0.000000, 302.850586, 0.000000, 306.966797, 0.000000, 310.385742, 0.000000, + 315.246094, 0.000000, 318.665039, 0.000000, 322.913086, 0.000000, 327.041016, 0.000000, + 331.145508, 0.000000, 331.145508, 0.000000, 336.544922, 0.000000, 336.544922, 0.000000, + 339.963867, 0.000000, 345.483398, 0.000000, 350.258789, 0.000000, 354.987305, 0.000000, + 358.766602, 0.000000, 364.335938, 0.000000, 368.583984, 0.000000, 373.335938, 0.000000, + 375.351563, 0.000000, 380.126953, 0.000000, 383.545898, 0.000000, 389.150391, 0.000000, + 393.890625, 0.000000, 393.890625, 0.000000, 397.669922, 0.000000, 399.685547, 0.000000, + 404.425781, 0.000000, 404.425781, 0.000000, 409.177734, 0.000000, 411.193359, 0.000000, + 416.762695, 0.000000, 420.867188, 0.000000, 424.286133, 0.000000, 428.581055, 0.000000, + 432.708984, 0.000000, 437.748047, 0.000000, 437.748047, 0.000000, 443.027344, 0.000000, + 447.131836, 0.000000, 447.131836, 0.000000, 450.550781, 0.000000, 454.330078, 0.000000, + 459.729492, 0.000000, 459.729492, 0.000000, 463.148438, 0.000000, 468.667969, 0.000000, + 473.478516, 0.000000, 473.478516, 0.000000, 478.207031, 0.000000, 481.986328, 0.000000, + 486.761719, 0.000000, 492.281250, 0.000000, 497.320313, 0.000000, 500.739258, 0.000000, + 505.538086, 0.000000, 505.538086, 0.000000, 509.786133, 0.000000, 513.902344, 0.000000, + 515.917969, 0.000000, 520.669922, 0.000000, 524.917969, 0.000000, 524.917969, 0.000000, + 529.034180, 0.000000, 534.553711, 0.000000, 536.569336, 0.000000, 541.968750, 0.000000, + 541.968750, 0.000000, 547.488281, 0.000000, 551.592773, 0.000000, 555.887695, 0.000000, + 560.003906, 0.000000, 564.298828, 0.000000, 569.698242, 0.000000, 573.117188, 0.000000, + 576.896484, 0.000000, 582.500977, 0.000000, 587.241211, 0.000000, 590.660156, 0.000000, + 594.776367, 0.000000, 598.904297, 0.000000, 603.943359, 0.000000, 608.683594, 0.000000, + 608.683594, 0.000000 + </result-positions> + </test-case> + + <test-case id="Arabic Simple" script="arab"> + <test-text>أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية</test-text> + + <result-glyphs> + 0x0000FE94, 0x0000FEF3, 0x00000631, 0x00000648, 0x0000FFFE, 0x0000FD2C, 0x0000FEDF, 0x00000627, + 0x00000020, 0x00000641, 0x00000631, 0x0000FE8E, 0x0000FFFE, 0x0000FFFE, 0x0000FD88, 0x00000627, + 0x00000020, 0x0000FECA, 0x0000FEF4, 0x0000FFFE, 0x0000FCA8, 0x00000020, 0x0000FFFE, 0x0000FC86, + 0x0000FECB, 0x00000020, 0x0000064A, 0x0000FEEE, 0x0000FE98, 0x0000FFFE, 0x0000FCDB, 0x00000020, + 0x0000FEAA, 0x0000FEA3, 0x00000627, 0x00000648, 0x00000020, 0x0000FFFE, 0x0000FC91, 0x0000FED4, + 0x0000FEB8, 0x0000FE97, 0x00000020, 0x00000645, 0x0000FE8E, 0x0000FEC8, 0x0000FEE7, 0x00000020, + 0x0000FEAA, 0x0000FE9F, 0x0000FEEE, 0x0000FEF3, 0x00000020, 0x0000FFFE, 0x0000FC42, 0x00000648, + 0x00000020, 0x0000060C, 0x00000641, 0x00000631, 0x0000FE8E, 0x0000FEA4, 0x0000FFFE, 0x0000FCED, + 0x0000FEDF, 0x00000020, 0x00000645, 0x0000FE8E, 0x0000FED7, 0x00000631, 0x0000FFFE, 0x0000FEF7, + 0x00000627, 0x00000020, 0x00000647, 0x0000FEAC, 0x0000FEEB, 0x00000020, 0x0000FEBA, 0x0000FEF4, + 0x0000FEBC, 0x0000FFFE, 0x0000FCA3, 0x00000648, 0x00000020, 0x0000FFFE, 0x0000FC91, 0x0000FED4, + 0x0000FEB8, 0x0000FE98, 0x0000FEE0, 0x0000FEDF, 0x00000020, 0x0000FE94, 0x0000FFFE, 0x0000FD3B, + 0x0000FEE7, 0x0000FFFE, 0x0000FEF7, 0x00000627, 0x00000020, 0x0000062A, 0x0000FFFE, 0x0000FBEB, + 0x0000FEE3, 0x00000020, 0x00000643, 0x0000FE8E, 0x0000FEE8, 0x0000FEEB, 0x00000020, 0x00000646, + 0x0000FFFE, 0x0000FC37, 0x00000020, 0x0000060C, 0x00000022, 0x0000062F, 0x0000FEEE, 0x0000FEDC, + 0x00000650, 0x0000FEE7, 0x0000FEEE, 0x0000FEF3, 0x00000022, 0x00000020, 0x00000639, 0x00000627, + 0x0000FFFE, 0x0000FC70, 0x0000FEA7, 0x00000627, 0x00000020, 0x0000FEDE, 0x0000FE92, 0x0000FED7, + 0x00000648, 0x00000020, 0x0000002E, 0x0000FE8E, 0x0000FFFE, 0x0000FCEF, 0x0000FEE3, 0x00000020, + 0x0000FEAA, 0x0000FEA3, 0x00000627, 0x00000648, 0x00000020, 0x0000FFFE, 0x0000FC81, 0x0000FEDF, + 0x00000020, 0x0000FE8E, 0x0000FEE8, 0x0000FEF4, 0x0000FECC, 0x0000FEE3, 0x00000020, 0x0000FE8E, + 0x0000FFFE, 0x0000FCC3, 0x00000631, 0x00000020, 0x0000FFFE, 0x0000FD12, 0x0000FECC, 0x0000064F, + 0x0000FE97, 0x00000020, 0x00000646, 0x00000623, 0x00000020, 0x0000FEAA, 0x0000FECC, 0x0000FE91, + 0x00000020, 0x00000649, 0x0000FEAE, 0x0000FEA7, 0x0000FFFE, 0x0000FEF7, 0x00000627, 0x00000020, + 0x00000641, 0x00000631, 0x0000FE8E, 0x0000FFFE, 0x0000FFFE, 0x0000FD88, 0x00000627, 0x00000648, + 0x00000020, 0x00000641, 0x0000FEAE, 0x0000FEA3, 0x0000FFFE, 0x0000FEF7, 0x00000627, 0x00000020, + 0x0000FEE6, 0x0000FEF3, 0x0000FEB0, 0x0000FEA8, 0x0000FE98, 0x0000FE91, 0x00000020, 0x00000645, + 0x0000FEEE, 0x0000FED8, 0x0000FE97, 0x00000648, 0x00000020, 0x0000060C, 0x00000645, 0x0000FE8E, + 0x0000FED7, 0x00000631, 0x0000FFFE, 0x0000FEF7, 0x00000627, 0x00000020, 0x0000FECA, 0x0000FEE3, + 0x00000020, 0x0000FEC2, 0x0000FED8, 0x0000FED3, 0x00000020, 0x0000FE90, 0x0000FEF4, 0x0000FEB3, + 0x00000627, 0x0000FEEE, 0x0000FFFE, 0x0000FCCA, 0x00000627, 0x00000020, 0x0000FEDE, 0x0000FEE3, + 0x0000FE8E, 0x0000FECC, 0x0000FE98, 0x0000FE97, 0x00000020, 0x0000060C, 0x0000FE8E, 0x0000064B, + 0x0000FEB3, 0x0000FE8E, 0x0000FEB3, 0x00000623 + </result-glyphs> + + <result-indices> + 0x000000FB, 0x000000FA, 0x000000F9, 0x000000F8, 0x000000F7, 0x000000F6, 0x000000F5, 0x000000F4, + 0x000000F3, 0x000000F2, 0x000000F1, 0x000000F0, 0x000000EF, 0x000000EE, 0x000000ED, 0x000000EC, + 0x000000EB, 0x000000EA, 0x000000E9, 0x000000E8, 0x000000E7, 0x000000E6, 0x000000E5, 0x000000E4, + 0x000000E3, 0x000000E2, 0x000000E1, 0x000000E0, 0x000000DF, 0x000000DE, 0x000000DD, 0x000000DC, + 0x000000DB, 0x000000DA, 0x000000D9, 0x000000D8, 0x000000D7, 0x000000D6, 0x000000D5, 0x000000D4, + 0x000000D3, 0x000000D2, 0x000000D1, 0x000000D0, 0x000000CF, 0x000000CE, 0x000000CD, 0x000000CC, + 0x000000CB, 0x000000CA, 0x000000C9, 0x000000C8, 0x000000C7, 0x000000C6, 0x000000C5, 0x000000C4, + 0x000000C3, 0x000000C2, 0x000000C1, 0x000000C0, 0x000000BF, 0x000000BE, 0x000000BD, 0x000000BC, + 0x000000BB, 0x000000BA, 0x000000B9, 0x000000B8, 0x000000B7, 0x000000B6, 0x000000B5, 0x000000B4, + 0x000000B3, 0x000000B2, 0x000000B1, 0x000000B0, 0x000000AF, 0x000000AE, 0x000000AD, 0x000000AC, + 0x000000AB, 0x000000AA, 0x000000A9, 0x000000A8, 0x000000A7, 0x000000A6, 0x000000A5, 0x000000A4, + 0x000000A3, 0x000000A2, 0x000000A1, 0x000000A0, 0x0000009F, 0x0000009E, 0x0000009D, 0x0000009C, + 0x0000009B, 0x0000009A, 0x00000099, 0x00000098, 0x00000097, 0x00000096, 0x00000095, 0x00000094, + 0x00000093, 0x00000092, 0x00000091, 0x00000090, 0x0000008F, 0x0000008E, 0x0000008D, 0x0000008C, + 0x0000008B, 0x0000008A, 0x00000089, 0x00000088, 0x00000087, 0x00000086, 0x00000085, 0x00000084, + 0x00000083, 0x00000082, 0x00000081, 0x00000080, 0x0000007F, 0x0000007E, 0x0000007D, 0x0000007C, + 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, 0x00000074, + 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, 0x0000006C, + 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, 0x00000064, + 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, 0x0000005C, + 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, 0x00000054, + 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, 0x0000004C, + 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, 0x00000044, + 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, 0x0000003C, + 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, + 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, 0x0000002C, + 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, 0x00000024, + 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, 0x0000001C, + 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, 0x00000014, + 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000C, + 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000004, + 0x00000003, 0x00000002, 0x00000001, 0x00000000 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, + 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, + 96.000000, 0.000000, 108.000000, 0.000000, 120.000000, 0.000000, 132.000000, 0.000000, + 144.000000, 0.000000, 156.000000, 0.000000, 168.000000, 0.000000, 180.000000, 0.000000, + 192.000000, 0.000000, 204.000000, 0.000000, 216.000000, 0.000000, 228.000000, 0.000000, + 240.000000, 0.000000, 252.000000, 0.000000, 264.000000, 0.000000, 276.000000, 0.000000, + 288.000000, 0.000000, 300.000000, 0.000000, 312.000000, 0.000000, 324.000000, 0.000000, + 336.000000, 0.000000, 348.000000, 0.000000, 360.000000, 0.000000, 372.000000, 0.000000, + 384.000000, 0.000000, 396.000000, 0.000000, 408.000000, 0.000000, 420.000000, 0.000000, + 432.000000, 0.000000, 444.000000, 0.000000, 456.000000, 0.000000, 468.000000, 0.000000, + 480.000000, 0.000000, 492.000000, 0.000000, 504.000000, 0.000000, 516.000000, 0.000000, + 528.000000, 0.000000, 540.000000, 0.000000, 552.000000, 0.000000, 564.000000, 0.000000, + 576.000000, 0.000000, 588.000000, 0.000000, 600.000000, 0.000000, 612.000000, 0.000000, + 624.000000, 0.000000, 636.000000, 0.000000, 648.000000, 0.000000, 660.000000, 0.000000, + 672.000000, 0.000000, 684.000000, 0.000000, 696.000000, 0.000000, 708.000000, 0.000000, + 720.000000, 0.000000, 732.000000, 0.000000, 744.000000, 0.000000, 756.000000, 0.000000, + 768.000000, 0.000000, 780.000000, 0.000000, 792.000000, 0.000000, 804.000000, 0.000000, + 816.000000, 0.000000, 828.000000, 0.000000, 840.000000, 0.000000, 852.000000, 0.000000, + 864.000000, 0.000000, 876.000000, 0.000000, 888.000000, 0.000000, 900.000000, 0.000000, + 912.000000, 0.000000, 924.000000, 0.000000, 936.000000, 0.000000, 948.000000, 0.000000, + 960.000000, 0.000000, 972.000000, 0.000000, 984.000000, 0.000000, 996.000000, 0.000000, + 1008.000000, 0.000000, 1020.000000, 0.000000, 1032.000000, 0.000000, 1044.000000, 0.000000, + 1056.000000, 0.000000, 1068.000000, 0.000000, 1080.000000, 0.000000, 1092.000000, 0.000000, + 1104.000000, 0.000000, 1116.000000, 0.000000, 1128.000000, 0.000000, 1140.000000, 0.000000, + 1152.000000, 0.000000, 1164.000000, 0.000000, 1176.000000, 0.000000, 1188.000000, 0.000000, + 1200.000000, 0.000000, 1212.000000, 0.000000, 1224.000000, 0.000000, 1236.000000, 0.000000, + 1248.000000, 0.000000, 1260.000000, 0.000000, 1272.000000, 0.000000, 1284.000000, 0.000000, + 1296.000000, 0.000000, 1308.000000, 0.000000, 1320.000000, 0.000000, 1332.000000, 0.000000, + 1344.000000, 0.000000, 1356.000000, 0.000000, 1368.000000, 0.000000, 1380.000000, 0.000000, + 1392.000000, 0.000000, 1404.000000, 0.000000, 1416.000000, 0.000000, 1428.000000, 0.000000, + 1440.000000, 0.000000, 1440.000000, 0.000000, 1452.000000, 0.000000, 1464.000000, 0.000000, + 1476.000000, 0.000000, 1488.000000, 0.000000, 1500.000000, 0.000000, 1512.000000, 0.000000, + 1524.000000, 0.000000, 1536.000000, 0.000000, 1548.000000, 0.000000, 1560.000000, 0.000000, + 1572.000000, 0.000000, 1584.000000, 0.000000, 1596.000000, 0.000000, 1608.000000, 0.000000, + 1620.000000, 0.000000, 1632.000000, 0.000000, 1644.000000, 0.000000, 1656.000000, 0.000000, + 1668.000000, 0.000000, 1680.000000, 0.000000, 1692.000000, 0.000000, 1704.000000, 0.000000, + 1716.000000, 0.000000, 1728.000000, 0.000000, 1740.000000, 0.000000, 1752.000000, 0.000000, + 1764.000000, 0.000000, 1776.000000, 0.000000, 1788.000000, 0.000000, 1800.000000, 0.000000, + 1812.000000, 0.000000, 1824.000000, 0.000000, 1836.000000, 0.000000, 1848.000000, 0.000000, + 1860.000000, 0.000000, 1872.000000, 0.000000, 1884.000000, 0.000000, 1896.000000, 0.000000, + 1908.000000, 0.000000, 1920.000000, 0.000000, 1932.000000, 0.000000, 1944.000000, 0.000000, + 1956.000000, 0.000000, 1968.000000, 0.000000, 1980.000000, 0.000000, 1992.000000, 0.000000, + 1992.000000, 0.000000, 2004.000000, 0.000000, 2016.000000, 0.000000, 2028.000000, 0.000000, + 2040.000000, 0.000000, 2052.000000, 0.000000, 2064.000000, 0.000000, 2076.000000, 0.000000, + 2088.000000, 0.000000, 2100.000000, 0.000000, 2112.000000, 0.000000, 2124.000000, 0.000000, + 2136.000000, 0.000000, 2148.000000, 0.000000, 2160.000000, 0.000000, 2172.000000, 0.000000, + 2184.000000, 0.000000, 2196.000000, 0.000000, 2208.000000, 0.000000, 2220.000000, 0.000000, + 2232.000000, 0.000000, 2244.000000, 0.000000, 2256.000000, 0.000000, 2268.000000, 0.000000, + 2280.000000, 0.000000, 2292.000000, 0.000000, 2304.000000, 0.000000, 2316.000000, 0.000000, + 2328.000000, 0.000000, 2340.000000, 0.000000, 2352.000000, 0.000000, 2364.000000, 0.000000, + 2376.000000, 0.000000, 2388.000000, 0.000000, 2400.000000, 0.000000, 2412.000000, 0.000000, + 2424.000000, 0.000000, 2436.000000, 0.000000, 2448.000000, 0.000000, 2460.000000, 0.000000, + 2472.000000, 0.000000, 2484.000000, 0.000000, 2496.000000, 0.000000, 2508.000000, 0.000000, + 2520.000000, 0.000000, 2532.000000, 0.000000, 2544.000000, 0.000000, 2556.000000, 0.000000, + 2568.000000, 0.000000, 2580.000000, 0.000000, 2592.000000, 0.000000, 2604.000000, 0.000000, + 2616.000000, 0.000000, 2628.000000, 0.000000, 2640.000000, 0.000000, 2652.000000, 0.000000, + 2664.000000, 0.000000, 2676.000000, 0.000000, 2688.000000, 0.000000, 2700.000000, 0.000000, + 2712.000000, 0.000000, 2724.000000, 0.000000, 2736.000000, 0.000000, 2748.000000, 0.000000, + 2760.000000, 0.000000, 2772.000000, 0.000000, 2784.000000, 0.000000, 2796.000000, 0.000000, + 2808.000000, 0.000000, 2820.000000, 0.000000, 2832.000000, 0.000000, 2844.000000, 0.000000, + 2856.000000, 0.000000, 2868.000000, 0.000000, 2880.000000, 0.000000, 2892.000000, 0.000000, + 2904.000000, 0.000000, 2916.000000, 0.000000, 2928.000000, 0.000000, 2940.000000, 0.000000, + 2940.000000, 0.000000, 2952.000000, 0.000000, 2964.000000, 0.000000, 2976.000000, 0.000000, + 2988.000000, 0.000000 + </result-positions> + </test-case> + + <test-case id="Matra Test" script="deva"> + <test-font name="Devamt.ttf" version="Version 1.02" checksum="0x2AB199ED"/> + + <test-text>ुं ं॑</test-text> + + <result-glyphs> + 0x00000130, 0x00000105, 0x000000C9, 0x00000003, 0x00000130, 0x000000C9, 0x00000328 + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000003, 0x00000004 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 6.046875, 0.000000, 6.046875, 0.000000, 7.201172, 0.000000, + 10.201172, 0.000000, 16.248047, 0.000000, 16.248047, 0.000000, 17.402344, 0.000000 + </result-positions> + </test-case> + + <test-case id="Deva Stress Test" script="deva"> + <test-font name="Devamt.ttf" version="Version 1.02" checksum="0x2AB199ED"/> + + <test-text>कँ कं कः क॑ क॒ कँ॑ कं॒ कँंः क॒॑</test-text> + + <result-glyphs> + 0x000000DB, 0x000000C8, 0x00000003, 0x000000DB, 0x000000C9, 0x00000003, 0x000000DB, 0x000000CA, + 0x00000003, 0x000000DB, 0x00000113, 0x00000003, 0x000000DB, 0x00000114, 0x00000003, 0x000000DB, + 0x000000C8, 0x00000328, 0x00000003, 0x000000DB, 0x00000114, 0x000000C9, 0x00000003, 0x000000DB, + 0x000000C8, 0x00000130, 0x000000C9, 0x00000130, 0x000000CA, 0x00000003, 0x000000DB, 0x00000113, + 0x00000130, 0x00000114 + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000015, 0x00000014, 0x00000016, 0x00000017, + 0x00000018, 0x00000019, 0x00000019, 0x0000001A, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, + 0x0000001E, 0x0000001E + </result-indices> + + <result-positions> + 0.000000, 0.000000, 6.052734, 0.000000, 8.003906, 0.000000, 11.003906, 0.000000, + 17.056641, 0.000000, 19.007813, 0.000000, 22.007813, 0.000000, 30.011719, 0.000000, + 33.539063, 0.000000, 36.539063, 0.000000, 42.591797, 0.000000, 44.542969, 0.000000, + 47.542969, 0.000000, 55.546875, 0.000000, 55.546875, 0.000000, 58.546875, 0.000000, + 64.599609, 0.000000, 64.599609, 0.000000, 66.550781, 0.000000, 69.550781, 0.000000, + 77.554688, 0.000000, 75.603516, 0.000000, 77.554688, 0.000000, 80.554688, 0.000000, + 86.607422, 0.000000, 88.558594, 0.000000, 94.605469, 0.000000, 95.759766, 0.000000, + 102.960938, 0.000000, 106.488281, 0.000000, 109.488281, 0.000000, 115.541016, 0.000000, + 117.492188, 0.000000, 124.693359, 0.000000, 124.693359, 0.000000 + </result-positions> + </test-case> + + <test-case id="Deva Test" script="deva"> + <test-font name="Devamt.ttf" version="Version 1.02" checksum="0x2AB199ED"/> + + <test-text>रू क़् क्ष क्कि क्रि ट्रि हिन्दी र्क्रिं क्षत्रज्ञत्रक्ष श्र थ्र श्र कके र्कें केूकूेकेृ र्कू क़ क क् क्ष क्ष् क्ष्क ज़ ज ज् ज्ञ ज्ञ् ज्ञ्क र्क र्क्क ड्र क्क क़्क क़्क क़् क्ष्क क्ष् त्र्क द्द कि हि रू रु र्के र्कं क् कु के द्द्द क़्ष क्ष र्क्षे द्दत्र्क ज्ञ क्त्व ज्ञ्क र्कँ र्किँ र्केँ र्क्रिँ हिंदी ह्मिह्यिखि ङ्क ङ्म ङ्क्त ङ्ख ङ्ग ङ्घ ङ्क्ष ङ्क्ष्व ङ्क्ष्य र्क्त्वि र्र्र्र कै के कु कू कृ कॅ कॆ हु हू हॆ है हे</test-text> + + <result-glyphs> + 0x00000238, 0x0000FFFF, 0x00000003, 0x00000117, 0x00000111, 0x00000003, 0x00000156, 0x0000FFFF, + 0x0000FFFF, 0x00000003, 0x000002CF, 0x00000269, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000002CF, + 0x000001A3, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000002CE, 0x000001AD, 0x0000FFFF, 0x0000FFFF, + 0x00000003, 0x000002D0, 0x000000FF, 0x00000170, 0x0000FFFF, 0x000000EC, 0x00000104, 0x00000003, + 0x00000308, 0x000001A3, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x00000156, 0x0000FFFF, 0x0000FFFF, 0x000001B2, 0x0000FFFF, 0x0000FFFF, 0x00000157, 0x0000FFFF, + 0x0000FFFF, 0x000001B2, 0x0000FFFF, 0x0000FFFF, 0x00000156, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x000001C1, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000001B3, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x000001C1, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000DB, 0x000000DB, 0x00000340, 0x00000003, + 0x000000DB, 0x00000343, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000DB, 0x00000340, + 0x00000130, 0x00000106, 0x000000DB, 0x00000106, 0x00000130, 0x0000010B, 0x000000DB, 0x00000340, + 0x00000130, 0x00000107, 0x00000003, 0x000000DB, 0x00000106, 0x00000158, 0x0000FFFF, 0x00000003, + 0x00000117, 0x00000003, 0x000000DB, 0x00000003, 0x000000DB, 0x00000111, 0x00000003, 0x00000156, + 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000156, 0x0000FFFF, 0x0000FFFF, 0x00000111, 0x00000003, + 0x0000017F, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x000000DB, 0x00000003, 0x00000003, 0x0000011A, + 0x0000FFFF, 0x00000003, 0x000000E2, 0x00000003, 0x000000E2, 0x00000111, 0x00000003, 0x00000157, + 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000157, 0x0000FFFF, 0x0000FFFF, 0x00000111, 0x00000003, + 0x00000180, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x000000DB, 0x00000003, 0x000000DB, 0x00000158, + 0x0000FFFF, 0x00000003, 0x00000269, 0x0000FFFF, 0x0000FFFF, 0x00000158, 0x0000FFFF, 0x00000003, + 0x000001AF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000269, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x00000181, 0x0000FFFF, 0x000000DB, 0x00000003, 0x00000181, 0x0000FFFF, 0x000000DB, 0x00000003, + 0x00000117, 0x00000111, 0x00000003, 0x0000017F, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x000000DB, + 0x00000003, 0x00000156, 0x0000FFFF, 0x0000FFFF, 0x00000111, 0x00000003, 0x000001F8, 0x0000FFFF, + 0x0000FFFF, 0x0000FFFF, 0x000000DB, 0x00000003, 0x000002A4, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x000002CF, 0x000000DB, 0x00000003, 0x000002D0, 0x000000FF, 0x00000003, 0x00000238, 0x0000FFFF, + 0x00000003, 0x00000237, 0x0000FFFF, 0x00000003, 0x000000DB, 0x00000342, 0x0000FFFF, 0x0000FFFF, + 0x00000003, 0x000000DB, 0x00000256, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000DB, 0x00000111, + 0x00000003, 0x000000DB, 0x00000105, 0x00000003, 0x000000DB, 0x00000340, 0x00000003, 0x0000016E, + 0x0000FFFF, 0x000002A4, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000181, 0x0000FFFF, 0x000000FD, + 0x00000003, 0x00000156, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000156, 0x0000FFFF, 0x0000FFFF, + 0x00000245, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000002A4, 0x0000FFFF, 0x0000FFFF, 0x000001F8, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x000000DB, 0x00000003, 0x00000157, 0x0000FFFF, 0x0000FFFF, + 0x00000003, 0x0000015D, 0x0000FFFF, 0x0000016C, 0x0000FFFF, 0x000000FB, 0x00000003, 0x00000180, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x000000DB, 0x00000003, 0x000000DB, 0x00000256, 0x0000FFFF, + 0x0000FFFF, 0x00000003, 0x00000308, 0x000000DB, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x000000DB, 0x00000343, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000308, 0x000001A3, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000002E3, 0x000000FF, + 0x0000FFFF, 0x000000EC, 0x00000104, 0x00000003, 0x000002D7, 0x000002C6, 0x0000FFFF, 0x0000FFFF, + 0x000002D7, 0x000002C7, 0x0000FFFF, 0x0000FFFF, 0x000002D4, 0x000000DC, 0x00000003, 0x0000026E, + 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000272, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000273, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x0000026F, 0x0000FFFF, 0x0000FFFF, + 0x00000003, 0x00000270, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000271, 0x0000FFFF, 0x0000FFFF, + 0x00000003, 0x00000274, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000275, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000276, + 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000304, + 0x0000015D, 0x0000FFFF, 0x0000016C, 0x0000FFFF, 0x000000FB, 0x0000FFFF, 0x0000FFFF, 0x00000003, + 0x000000F6, 0x00000111, 0x000001BD, 0x0000FFFF, 0x0000FFFF, 0x00000158, 0x0000FFFF, 0x00000003, + 0x000000DB, 0x0000010C, 0x00000003, 0x000000DB, 0x00000340, 0x00000003, 0x000000DB, 0x00000105, + 0x00000003, 0x000000DB, 0x00000106, 0x00000003, 0x000000DB, 0x00000107, 0x00000003, 0x000000DB, + 0x00000109, 0x00000003, 0x000000DB, 0x0000033C, 0x00000003, 0x0000022F, 0x0000FFFF, 0x00000003, + 0x00000230, 0x0000FFFF, 0x00000003, 0x000000FF, 0x0000010A, 0x00000003, 0x000000FF, 0x0000010C, + 0x00000003, 0x000000FF, 0x0000010B + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000D, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000E, 0x00000012, + 0x0000000F, 0x00000011, 0x00000010, 0x00000013, 0x00000017, 0x00000014, 0x00000016, 0x00000015, + 0x00000018, 0x0000001A, 0x00000019, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, + 0x00000025, 0x00000022, 0x00000024, 0x00000023, 0x00000020, 0x00000021, 0x00000026, 0x00000027, + 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002D, 0x0000002C, 0x0000002E, 0x0000002F, + 0x00000030, 0x00000031, 0x00000033, 0x00000032, 0x00000034, 0x00000035, 0x00000036, 0x00000037, + 0x00000038, 0x0000003A, 0x00000039, 0x0000003B, 0x0000003C, 0x0000003E, 0x0000003D, 0x0000003F, + 0x00000040, 0x00000042, 0x00000041, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, + 0x0000004A, 0x0000004B, 0x00000048, 0x00000049, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, + 0x00000050, 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000053, 0x00000054, 0x00000055, + 0x00000056, 0x00000056, 0x00000057, 0x0000005A, 0x0000005B, 0x00000058, 0x00000059, 0x0000005C, + 0x0000005D, 0x0000005E, 0x0000005F, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, + 0x00000065, 0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, + 0x0000006D, 0x0000006E, 0x0000006F, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, + 0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x0000007C, + 0x0000007D, 0x0000007E, 0x0000007F, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, + 0x00000085, 0x00000086, 0x00000087, 0x00000088, 0x00000089, 0x0000008A, 0x0000008D, 0x0000008B, + 0x0000008C, 0x0000008E, 0x00000091, 0x00000092, 0x00000093, 0x0000008F, 0x00000090, 0x00000094, + 0x00000095, 0x00000097, 0x00000096, 0x00000098, 0x00000099, 0x0000009A, 0x0000009B, 0x0000009C, + 0x0000009D, 0x0000009E, 0x0000009F, 0x000000A0, 0x000000A1, 0x000000A2, 0x000000A3, 0x000000A4, + 0x000000A5, 0x000000A6, 0x000000A7, 0x000000A8, 0x000000A9, 0x000000AA, 0x000000AB, 0x000000AC, + 0x000000AD, 0x000000AE, 0x000000AF, 0x000000B0, 0x000000B1, 0x000000B2, 0x000000B3, 0x000000B4, + 0x000000B5, 0x000000B6, 0x000000B7, 0x000000B8, 0x000000B9, 0x000000BA, 0x000000BB, 0x000000BC, + 0x000000BE, 0x000000BD, 0x000000BF, 0x000000C1, 0x000000C0, 0x000000C2, 0x000000C3, 0x000000C4, + 0x000000C5, 0x000000C6, 0x000000C7, 0x000000C8, 0x000000CB, 0x000000CC, 0x000000C9, 0x000000CA, + 0x000000CD, 0x000000D0, 0x000000CE, 0x000000CF, 0x000000D1, 0x000000D2, 0x000000D3, 0x000000D4, + 0x000000D5, 0x000000D6, 0x000000D7, 0x000000D8, 0x000000D9, 0x000000DA, 0x000000DB, 0x000000DC, + 0x000000DD, 0x000000DE, 0x000000DF, 0x000000E0, 0x000000E1, 0x000000E2, 0x000000E3, 0x000000E4, + 0x000000E5, 0x000000E6, 0x000000E7, 0x000000E8, 0x000000E9, 0x000000EC, 0x000000ED, 0x000000EE, + 0x000000EF, 0x000000EA, 0x000000EB, 0x000000F0, 0x000000F1, 0x000000F2, 0x000000F3, 0x000000F4, + 0x000000F5, 0x000000F6, 0x000000F7, 0x000000F8, 0x000000F9, 0x000000FA, 0x000000FB, 0x000000FC, + 0x000000FD, 0x000000FE, 0x000000FF, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, + 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010C, 0x0000010A, 0x0000010B, + 0x0000010D, 0x0000010E, 0x00000112, 0x00000111, 0x0000010F, 0x00000110, 0x00000113, 0x00000114, + 0x00000117, 0x00000118, 0x00000115, 0x00000116, 0x00000119, 0x0000011A, 0x00000120, 0x0000011D, + 0x0000011F, 0x0000011E, 0x0000011B, 0x0000011C, 0x00000121, 0x00000122, 0x00000124, 0x00000123, + 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x0000012C, 0x00000129, 0x0000012A, 0x0000012B, + 0x00000130, 0x0000012D, 0x0000012E, 0x0000012F, 0x00000132, 0x00000131, 0x00000133, 0x00000134, + 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013A, 0x0000013B, 0x0000013C, + 0x0000013D, 0x0000013E, 0x0000013F, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000144, + 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, 0x0000014A, 0x0000014B, 0x0000014C, + 0x0000014D, 0x0000014E, 0x0000014F, 0x00000150, 0x00000151, 0x00000152, 0x00000153, 0x00000154, + 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015A, 0x0000015B, 0x0000015C, + 0x0000015D, 0x0000015E, 0x0000015F, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x0000016B, + 0x00000166, 0x00000167, 0x00000168, 0x00000169, 0x0000016A, 0x00000164, 0x00000165, 0x0000016C, + 0x0000016F, 0x00000170, 0x00000171, 0x00000173, 0x00000172, 0x0000016D, 0x0000016E, 0x00000174, + 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x0000017A, 0x0000017B, 0x0000017C, + 0x0000017D, 0x0000017E, 0x0000017F, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, + 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018A, 0x0000018B, 0x0000018C, + 0x0000018D, 0x0000018E, 0x0000018F, 0x00000190, 0x00000191, 0x00000192, 0x00000193, 0x00000194, + 0x00000195, 0x00000196, 0x00000197 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 8.707031, 0.000000, 8.707031, 0.000000, 11.707031, 0.000000, + 17.759766, 0.000000, 19.710938, 0.000000, 22.710938, 0.000000, 30.955078, 0.000000, + 30.955078, 0.000000, 30.955078, 0.000000, 33.955078, 0.000000, 37.318359, 0.000000, + 45.322266, 0.000000, 45.322266, 0.000000, 45.322266, 0.000000, 48.322266, 0.000000, + 51.685547, 0.000000, 59.689453, 0.000000, 59.689453, 0.000000, 59.689453, 0.000000, + 62.689453, 0.000000, 66.052734, 0.000000, 72.082031, 0.000000, 72.082031, 0.000000, + 72.082031, 0.000000, 75.082031, 0.000000, 78.445313, 0.000000, 84.996094, 0.000000, + 89.015625, 0.000000, 89.015625, 0.000000, 95.408203, 0.000000, 98.771484, 0.000000, + 101.771484, 0.000000, 105.134766, 0.000000, 113.138672, 0.000000, 113.138672, 0.000000, + 113.138672, 0.000000, 113.138672, 0.000000, 113.138672, 0.000000, 113.138672, 0.000000, + 116.138672, 0.000000, 124.382813, 0.000000, 124.382813, 0.000000, 124.382813, 0.000000, + 131.507813, 0.000000, 131.507813, 0.000000, 131.507813, 0.000000, 139.095703, 0.000000, + 139.095703, 0.000000, 139.095703, 0.000000, 146.220703, 0.000000, 146.220703, 0.000000, + 146.220703, 0.000000, 154.464844, 0.000000, 154.464844, 0.000000, 154.464844, 0.000000, + 157.464844, 0.000000, 165.433594, 0.000000, 165.433594, 0.000000, 165.433594, 0.000000, + 168.433594, 0.000000, 175.851563, 0.000000, 175.851563, 0.000000, 175.851563, 0.000000, + 178.851563, 0.000000, 186.820313, 0.000000, 186.820313, 0.000000, 186.820313, 0.000000, + 189.820313, 0.000000, 197.824219, 0.000000, 203.876953, 0.000000, 205.828125, 0.000000, + 208.828125, 0.000000, 214.880859, 0.000000, 216.832031, 0.000000, 216.832031, 0.000000, + 216.832031, 0.000000, 216.832031, 0.000000, 219.832031, 0.000000, 225.884766, 0.000000, + 227.835938, 0.000000, 233.882813, 0.000000, 235.037109, 0.000000, 241.089844, 0.000000, + 243.041016, 0.000000, 249.087891, 0.000000, 250.242188, 0.000000, 256.294922, 0.000000, + 258.246094, 0.000000, 264.292969, 0.000000, 265.447266, 0.000000, 268.447266, 0.000000, + 274.500000, 0.000000, 274.505859, 0.000000, 276.451172, 0.000000, 276.451172, 0.000000, + 279.451172, 0.000000, 287.455078, 0.000000, 290.455078, 0.000000, 298.458984, 0.000000, + 301.458984, 0.000000, 307.511719, 0.000000, 309.462891, 0.000000, 312.462891, 0.000000, + 320.707031, 0.000000, 320.707031, 0.000000, 320.707031, 0.000000, 323.707031, 0.000000, + 331.951172, 0.000000, 331.951172, 0.000000, 331.951172, 0.000000, 331.951172, 0.000000, + 334.951172, 0.000000, 340.705078, 0.000000, 340.705078, 0.000000, 340.705078, 0.000000, + 340.705078, 0.000000, 348.708984, 0.000000, 351.708984, 0.000000, 354.708984, 0.000000, + 362.724609, 0.000000, 362.724609, 0.000000, 365.724609, 0.000000, 373.740234, 0.000000, + 376.740234, 0.000000, 384.755859, 0.000000, 384.755859, 0.000000, 387.755859, 0.000000, + 395.343750, 0.000000, 395.343750, 0.000000, 395.343750, 0.000000, 398.343750, 0.000000, + 405.931641, 0.000000, 405.931641, 0.000000, 405.931641, 0.000000, 405.931641, 0.000000, + 408.931641, 0.000000, 414.052734, 0.000000, 414.052734, 0.000000, 414.052734, 0.000000, + 414.052734, 0.000000, 422.056641, 0.000000, 425.056641, 0.000000, 431.115234, 0.000000, + 433.060547, 0.000000, 433.060547, 0.000000, 436.060547, 0.000000, 444.064453, 0.000000, + 444.064453, 0.000000, 442.119141, 0.000000, 444.064453, 0.000000, 444.064453, 0.000000, + 447.064453, 0.000000, 454.060547, 0.000000, 454.060547, 0.000000, 454.060547, 0.000000, + 457.060547, 0.000000, 465.064453, 0.000000, 465.064453, 0.000000, 465.064453, 0.000000, + 468.064453, 0.000000, 474.339844, 0.000000, 474.339844, 0.000000, 482.343750, 0.000000, + 485.343750, 0.000000, 491.619141, 0.000000, 491.619141, 0.000000, 499.623047, 0.000000, + 502.623047, 0.000000, 508.675781, 0.000000, 510.626953, 0.000000, 513.626953, 0.000000, + 519.380859, 0.000000, 519.380859, 0.000000, 519.380859, 0.000000, 519.380859, 0.000000, + 527.384766, 0.000000, 530.384766, 0.000000, 538.628906, 0.000000, 538.628906, 0.000000, + 538.628906, 0.000000, 538.628906, 0.000000, 541.628906, 0.000000, 546.427734, 0.000000, + 546.427734, 0.000000, 546.427734, 0.000000, 546.427734, 0.000000, 554.431641, 0.000000, + 557.431641, 0.000000, 564.064453, 0.000000, 564.064453, 0.000000, 564.064453, 0.000000, + 567.064453, 0.000000, 570.427734, 0.000000, 578.431641, 0.000000, 581.431641, 0.000000, + 584.794922, 0.000000, 591.345703, 0.000000, 594.345703, 0.000000, 603.052734, 0.000000, + 603.052734, 0.000000, 606.052734, 0.000000, 612.667969, 0.000000, 612.667969, 0.000000, + 615.667969, 0.000000, 621.720703, 0.000000, 623.671875, 0.000000, 623.671875, 0.000000, + 623.671875, 0.000000, 626.671875, 0.000000, 632.736328, 0.000000, 634.675781, 0.000000, + 634.675781, 0.000000, 634.675781, 0.000000, 637.675781, 0.000000, 643.728516, 0.000000, + 645.679688, 0.000000, 648.679688, 0.000000, 654.732422, 0.000000, 656.683594, 0.000000, + 659.683594, 0.000000, 665.736328, 0.000000, 667.687500, 0.000000, 670.687500, 0.000000, + 677.080078, 0.000000, 677.080078, 0.000000, 683.712891, 0.000000, 683.712891, 0.000000, + 683.712891, 0.000000, 686.712891, 0.000000, 692.988281, 0.000000, 692.988281, 0.000000, + 700.054688, 0.000000, 703.054688, 0.000000, 711.298828, 0.000000, 711.298828, 0.000000, + 711.298828, 0.000000, 714.298828, 0.000000, 722.542969, 0.000000, 722.542969, 0.000000, + 722.542969, 0.000000, 722.542969, 0.000000, 722.542969, 0.000000, 722.542969, 0.000000, + 725.542969, 0.000000, 732.175781, 0.000000, 732.175781, 0.000000, 732.175781, 0.000000, + 736.974609, 0.000000, 736.974609, 0.000000, 736.974609, 0.000000, 736.974609, 0.000000, + 744.978516, 0.000000, 747.978516, 0.000000, 755.566406, 0.000000, 755.566406, 0.000000, + 755.566406, 0.000000, 758.566406, 0.000000, 764.841797, 0.000000, 764.841797, 0.000000, + 768.673828, 0.000000, 768.673828, 0.000000, 775.541016, 0.000000, 778.541016, 0.000000, + 783.662109, 0.000000, 783.662109, 0.000000, 783.662109, 0.000000, 783.662109, 0.000000, + 791.666016, 0.000000, 794.666016, 0.000000, 800.730469, 0.000000, 802.669922, 0.000000, + 802.669922, 0.000000, 802.669922, 0.000000, 805.669922, 0.000000, 809.033203, 0.000000, + 817.037109, 0.000000, 817.037109, 0.000000, 817.037109, 0.000000, 817.037109, 0.000000, + 820.037109, 0.000000, 826.089844, 0.000000, 828.041016, 0.000000, 828.041016, 0.000000, + 828.041016, 0.000000, 828.041016, 0.000000, 831.041016, 0.000000, 834.404297, 0.000000, + 842.408203, 0.000000, 842.408203, 0.000000, 842.408203, 0.000000, 842.408203, 0.000000, + 842.408203, 0.000000, 842.408203, 0.000000, 845.408203, 0.000000, 848.771484, 0.000000, + 855.322266, 0.000000, 855.322266, 0.000000, 861.714844, 0.000000, 865.078125, 0.000000, + 868.078125, 0.000000, 871.441406, 0.000000, 881.167969, 0.000000, 881.167969, 0.000000, + 881.167969, 0.000000, 884.531250, 0.000000, 894.257813, 0.000000, 894.257813, 0.000000, + 894.257813, 0.000000, 897.621094, 0.000000, 906.175781, 0.000000, 909.175781, 0.000000, + 919.007813, 0.000000, 919.007813, 0.000000, 919.007813, 0.000000, 922.007813, 0.000000, + 932.349609, 0.000000, 932.349609, 0.000000, 932.349609, 0.000000, 935.349609, 0.000000, + 945.181641, 0.000000, 945.181641, 0.000000, 945.181641, 0.000000, 945.181641, 0.000000, + 945.181641, 0.000000, 948.181641, 0.000000, 958.330078, 0.000000, 958.330078, 0.000000, + 958.330078, 0.000000, 961.330078, 0.000000, 970.892578, 0.000000, 970.892578, 0.000000, + 970.892578, 0.000000, 973.892578, 0.000000, 983.455078, 0.000000, 983.455078, 0.000000, + 983.455078, 0.000000, 986.455078, 0.000000, 996.017578, 0.000000, 996.017578, 0.000000, + 996.017578, 0.000000, 996.017578, 0.000000, 996.017578, 0.000000, 999.017578, 0.000000, + 1009.347656, 0.000000, 1009.347656, 0.000000, 1009.347656, 0.000000, 1009.347656, 0.000000, + 1009.347656, 0.000000, 1009.347656, 0.000000, 1009.347656, 0.000000, 1012.347656, 0.000000, + 1022.027344, 0.000000, 1022.027344, 0.000000, 1022.027344, 0.000000, 1022.027344, 0.000000, + 1022.027344, 0.000000, 1022.027344, 0.000000, 1022.027344, 0.000000, 1025.027344, 0.000000, + 1028.390625, 0.000000, 1034.666016, 0.000000, 1034.666016, 0.000000, 1038.498047, 0.000000, + 1038.498047, 0.000000, 1045.365234, 0.000000, 1045.365234, 0.000000, 1045.365234, 0.000000, + 1048.365234, 0.000000, 1053.697266, 0.000000, 1054.195313, 0.000000, 1060.025391, 0.000000, + 1060.025391, 0.000000, 1059.322266, 0.000000, 1060.025391, 0.000000, 1060.025391, 0.000000, + 1063.025391, 0.000000, 1069.078125, 0.000000, 1071.029297, 0.000000, 1074.029297, 0.000000, + 1080.082031, 0.000000, 1082.033203, 0.000000, 1085.033203, 0.000000, 1091.085938, 0.000000, + 1093.037109, 0.000000, 1096.037109, 0.000000, 1102.089844, 0.000000, 1104.041016, 0.000000, + 1107.041016, 0.000000, 1113.093750, 0.000000, 1115.044922, 0.000000, 1118.044922, 0.000000, + 1124.097656, 0.000000, 1126.048828, 0.000000, 1129.048828, 0.000000, 1135.101563, 0.000000, + 1137.052734, 0.000000, 1140.052734, 0.000000, 1146.603516, 0.000000, 1146.603516, 0.000000, + 1149.603516, 0.000000, 1156.154297, 0.000000, 1156.154297, 0.000000, 1159.154297, 0.000000, + 1165.623047, 0.000000, 1165.705078, 0.000000, 1168.705078, 0.000000, 1175.173828, 0.000000, + 1175.255859, 0.000000, 1178.255859, 0.000000, 1184.724609, 0.000000, 1184.806641, 0.000000 + </result-positions> + </test-case> + + <test-case id="Japanese Han" script="hani" lang="JAN"> + <test-font name="ARIALUNI.TTF" version="Version 1.00" checksum="0x58081551"/> + + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + + <result-glyphs> + 0x000020BC, 0x000025DD, 0x00002149, 0x00003EA0, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, + 0x0000267F, 0x0000410D, 0x00000003, 0x000020BC, 0x0000567E, 0x00002149, 0x00003EA0, 0x00002400, + 0x0000271B, 0x0000299A, 0x00000003, 0x00005489, 0x000042F2 + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, + 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, + 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, + 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, + 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, + 214.001953, 0.000000, 226.001953, 0.000000 + </result-positions> + </test-case> + + <test-case id="Korean Han" script="hani" lang="KOR"> + <test-font name="ARIALUNI.TTF" version="Version 1.00" checksum="0x58081551"/> + + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + + <result-glyphs> + 0x000020BC, 0x000025DD, 0x00002149, 0x00003EA0, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, + 0x0000267F, 0x0000410D, 0x00000003, 0x000020BC, 0x00007492, 0x00002149, 0x00003EA0, 0x00002400, + 0x0000271B, 0x0000299A, 0x00000003, 0x00005489, 0x000042F2 + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, + 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, + 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, + 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, + 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, + 214.001953, 0.000000, 226.001953, 0.000000 + </result-positions> + </test-case> + + <test-case id="Traditional Han" script="hani" lang="ZHT"> + <test-font name="ARIALUNI.TTF" version="Version 1.00" checksum="0x58081551"/> + + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + + <result-glyphs> + 0x000020BC, 0x000025DD, 0x00002149, 0x000079EB, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, + 0x00007677, 0x0000410D, 0x00000003, 0x000020BC, 0x00007E26, 0x00002149, 0x000079EB, 0x00002400, + 0x0000271B, 0x0000299A, 0x00000003, 0x00007D8F, 0x00007A97 + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, + 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, + 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, + 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, + 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, + 214.001953, 0.000000, 226.001953, 0.000000 + </result-positions> + </test-case> + + <test-case id="Simplified Han" script="hani" lang="ZHS"> + <test-font name="ARIALUNI.TTF" version="Version 1.00" checksum="0x58081551"/> + + <test-text>中华人民共和国 台湾 中華人民共和國 臺灣</test-text> + + <result-glyphs> + 0x000020BC, 0x000025DD, 0x00002149, 0x000079EB, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, + 0x00007677, 0x00008886, 0x00000003, 0x000020BC, 0x0000567E, 0x00002149, 0x000079EB, 0x00002400, + 0x0000271B, 0x0000299A, 0x00000003, 0x00007D8F, 0x00007A97 + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, + 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, + 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, + 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, + 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, + 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, + 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, + 214.001953, 0.000000, 226.001953, 0.000000 + </result-positions> + </test-case> + + <test-case id="Deva locl Hindi" script="deva" lang="HIN"> + <test-font name="TestFont1.otf" version="Version 001.000 " checksum="0x75B4A535"/> + + <test-text>शङ़ु</test-text> + + <result-glyphs> + 0x00000002, 0x00000001, 0x00000006, 0x0000FFFF + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 7.572000, 0.000000, 15.108000, 0.000000, 15.108000, 0.000000, + 15.108000, 0.000000 + </result-positions> + </test-case> + + <test-case id="Deva locl Marathi" script="deva" lang="MAR"> + <test-font name="TestFont1.otf" version="Version 001.000 " checksum="0x75B4A535"/> + + <test-text>शङ़ु</test-text> + + <result-glyphs> + 0x00000005, 0x00000001, 0x00000006, 0x0000FFFF + </result-glyphs> + + <result-indices> + 0x00000000, 0x00000001, 0x00000002, 0x00000003 + </result-indices> + + <result-positions> + 0.000000, 0.000000, 7.392000, 0.000000, 14.927999, 0.000000, 14.927999, 0.000000, + 14.927999, 0.000000 + </result-positions> + </test-case> + +</layout-tests> diff --git a/icuSources/test/testdata/ra.xlf b/icuSources/test/testdata/ra.xlf new file mode 100644 index 00000000..b35f3670 --- /dev/null +++ b/icuSources/test/testdata/ra.xlf @@ -0,0 +1,247 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE xliff SYSTEM "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd"> +<xliff version = "1.0"> + <file xml:space = "preserve" source-language = "en" datatype = "ICUResourceBundle" original = "ra.txt" tool = "genrb" date = "2006-01-17T20:58:58Z"> + <header></header> + <body> + <group restype = "table" xml:space = "preserve" id = "ra" > + <!--These are top level comments for the bundle. Tag name: ra--> + <note> Comments for tag named ra</note> + <group restype = "array" xml:space = "preserve" id = "TestArray" resname="TestArray"> + <!--Top level comments for Tag name: TestArray--> + <note> This resource is for Tag name: Array</note> + <trans-unit xml:space = "preserve" id = "TestArray_0" translate="yes"> + <!--comments for un-named string--> + <source >abcde</source> + <note> This resource is un-named string</note> + </trans-unit> + <trans-unit restype = "int" xml:space = "preserve" id = "TestArray_1" translate="yes"> + <!--comments for un-named int--> + <source>1</source> + <note> This resource is un-named int</note> + </trans-unit> + <bin-unit restype = "bin" id = "TestArray_2" mime-type = "application" translate="yes"> + <!--comments for un-named binary--> + <bin-source> + <internal-file form = "application" crc = "-2140397846">12312312</internal-file> + </bin-source> + <note> This resource is for un-named binary</note> + </bin-unit> + </group> + <bin-unit restype = "import" id = "TestImpport" mime-type = "application" resname = "TestImpport" translate="yes"> + <!--comments for TestImport--> + <bin-source> + <external-file href = "importtest.bin"/> + </bin-source> + <note> This resource is for TestImport</note> + </bin-unit> + <trans-unit xml:space = "preserve" id = "TestInclude" resname = "TestInclude" translate="yes"> + <!--comments for TestInclude--> + <source >#-------------------------------------------------------------------- +# Copyright (c) 1999-2004, International Business Machines +# Corporation and others. All Rights Reserved. +#-------------------------------------------------------------------- + +# InterIndic-Bengali +#:: NFD (NFC) ; +\uE001>\u0981; # SIGN CANDRABINDU +\uE002>\u0982; # SIGN ANUSVARA +\uE003>\u0983; # SIGN VISARGA +\uE005>\u0985; # LETTER A +\uE006>\u0986; # LETTER AA +\uE007>\u0987; # LETTER I +\uE008>\u0988; # LETTER II +\uE009>\u0989; # LETTER U +\uE00A>\u098A; # LETTER UU +\uE00B>\u098B; # LETTER VOCALIC R +\uE00C>\u098C; # LETTER VOCALIC L +\uE00D>\u098F; # FALLBACK +\uE00E>\u098F; # FALLBACK +\uE00F>\u098F; # LETTER E +\uE010>\u0990; # LETTER AI +\uE011>\u0993; # FALLBACK +\uE012>\u0993; # FALLBACK +\uE013>\u0993; # LETTER O +\uE014>\u0994; # LETTER AU +\uE015>\u0995; # LETTER KA +\uE016>\u0996; # LETTER KHA +\uE017>\u0997; # LETTER GA +\uE018>\u0998; # LETTER GHA +\uE019>\u0999; # LETTER NGA +\uE01A>\u099A; # LETTER CA +\uE01B>\u099B; # LETTER CHA +\uE01C>\u099C; # LETTER JA +\uE01D>\u099D; # LETTER JHA +\uE01E>\u099E; # LETTER NYA +\uE01F>\u099F; # LETTER TTA +\uE020>\u09A0; # LETTER TTHA +\uE021>\u09A1; # LETTER DDA +\uE022>\u09A2; # LETTER DDHA +\uE023>\u09A3; # LETTER NNA +\uE024>\u09A4; # LETTER TA +\uE025>\u09A5; # LETTER THA +\uE026>\u09A6; # LETTER DA +\uE027>\u09A7; # LETTER DHA +\uE028>\u09A8; # LETTER NA +\uE029>\u09A8\u09BC; # REMAP (indicExceptions.txt): \u09a9>\u09a8 = LETTER NNNA>LETTER NA +\uE02A>\u09AA; # LETTER PA +\uE02B>\u09AB; # LETTER PHA +\uE02C>\u09AC; # LETTER BA +\uE02D>\u09AD; # LETTER BHA +\uE02E>\u09AE; # LETTER MA +\uE02F>\u09AF; # LETTER YA +\uE030>\u09B0; # LETTER RA +\uE031>\u09B0\u09BC; # FALLBACK to RA +\uE032>\u09B2; # LETTER LA +\uE033>\u09B2; # REMAP (indicExceptions.txt): \u09b3>\u09b2 = LETTER LLA>LETTER LA +\uE034>\u09B2; # REMAP (indicExceptions.txt): \u09b4>\u09b2 = LETTER LLLA>LETTER LA +\uE035>\u09AC; # REMAP (indicExceptions.txt): \u09b5>\u09ac = LETTER VA>LETTER BA +\uE036>\u09B6; # LETTER SHA +\uE037>\u09B7; # LETTER SSA +\uE038>\u09B8; # LETTER SA +\uE039>\u09B9; # LETTER HA +\uE03C>\u09BC; # SIGN NUKTA +\uE03D>; # FALLBACK BLOW AWAY AVAGRAHA +\uE03E>\u09BE; # VOWEL SIGN AA +\uE03F>\u09BF; # VOWEL SIGN I +\uE040>\u09C0; # VOWEL SIGN II +\uE041>\u09C1; # VOWEL SIGN U +\uE042>\u09C2; # VOWEL SIGN UU +\uE043>\u09C3; # VOWEL SIGN VOCALIC R +\uE044>\u09C4; # VOWEL SIGN VOCALIC RR +\uE045>\u09C7; # REMAP (indicExceptions.txt): \u09c5>\u09c7 = VOWEL SIGN CANDRA E>VOWEL SIGN E +\uE046>\u09C7; # FALLBACK +\uE047>\u09C7; # VOWEL SIGN E +\uE048>\u09C8; # VOWEL SIGN AI +\uE049>\u09C7\u09BE; # REMAP (indicExceptions.txt): \u09c9>\u09cb = VOWEL SIGN CANDRA O>VOWEL SIGN O +\uE04A>\u09C7\u09BE; # FALLBACK +\uE04B>\u09C7\u09BE; # VOWEL SIGN O +\uE04C>\u09C7\u09D7; # VOWEL SIGN AU +\uE04D>\u09CD; # SIGN VIRAMA +\uE050>\u0993\u0982; # InterIndic-Bengali: OM +\ue051>; +\ue052>; +\ue053>; +\ue054>; +\uE055>; # LENGTH MARK +\uE056>\u09C8; # REMAP (indicExceptions.txt): \u09d6>\u09c8 = AI LENGTH MARK>VOWEL SIGN AI +\uE057>\u09D7; # AU LENGTH MARK +\uE058>\u0995\u09BC; # FALLBACK +\uE059>\u0996\u09BC; # REMAP (indicExceptions.txt): \u09d9>\u0996 = LETTER KHHA>LETTER KHA +\uE05A>\u0997\u09BC; # REMAP (indicExceptions.txt): \u09da>\u0997 = LETTER GHHA>LETTER GA +\uE05B>\u099C\u09BC; # REMAP (indicExceptions.txt): \u09db>\u099c = LETTER ZA>LETTER JA +\uE05C>\u09A1\u09BC; # FALLBACK +\uE05D>\u09A2\u09BC; # LETTER RHA +\uE05E>\u09AB\u09BC; # REMAP (indicExceptions.txt): \u09de>\u09ab = LETTER FA>LETTER PHA +\uE05F>\u09AF\u09BC; # LETTER YYA +\uE060>\u09E0; # LETTER VOCALIC RR +\uE061>\u09E1; # LETTER VOCALIC LL +\uE062>\u09E2; # VOWEL SIGN VOCALIC L +\uE063>\u09E3; # VOWEL SIGN VOCALIC LL +\uE064>\u0964; # DANDA +\uE065>\u0965; # DOUBLE DANDA +\uE066>\u09E6; # DIGIT ZERO +\uE067>\u09E7; # DIGIT ONE +\uE068>\u09E8; # DIGIT TWO +\uE069>\u09E9; # DIGIT THREE +\uE06A>\u09EA; # DIGIT FOUR +\uE06B>\u09EB; # DIGIT FIVE +\uE06C>\u09EC; # DIGIT SIX +\uE06D>\u09ED; # DIGIT SEVEN +\uE06E>\u09EE; # DIGIT EIGHT +\uE06F>\u09EF; # DIGIT NINE +\ue070>; # ABBREVIATION SIGN +\ue071>\u09F0; # LETTER RA WITH MIDDLE DIAGONAL +\ue072>\u09F1; # LETTER RA WITH LOWER DIAGONAL +\ue073>\u09F2; # RUPEE MARK +\ue074>\u09F3; # RUPEE SIGN +\ue075>\u09F4; # CURRENCY NUMERATOR ONE +\ue076>\u09F5; # CURRENCY NUMERATOR TWO +\ue077>\u09F6; # CURRENCY NUMERATOR THREE +\ue078>\u09F7; # CURRENCY NUMERATOR FOUR +\ue079>\u09F8; # CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +\ue07A>\u09F9; # CURRENCY DENOMINATOR SIXTEEN +\ue07B>\u09FA; # ISSHAR +\uE07C>; # TIPPI +\uE07D>; # ADDAK +\uE07E>; # IRI +\uE07F>; # URA +\uE080>; # EK ONKAR + +0 > \u09E6; # FALLBACK FOR TAMIL +1 > \u09E7; + + + + + + + + + + + +# :: NFC (NFD) ; +# eof +</source> + <note> This resource is for TestInclude</note> + </trans-unit> + <group restype = "array" xml:space = "preserve" id = "TestIntVector" resname="TestIntVector"> + <!--comments for TestIntVector--> + <note> This resource is for TestIntVector</note> + <trans-unit xml:space = "preserve" id = "TestIntVector_0" translate="yes"> + <!--comments for element 1--> + <source >1</source> + <note> This resource is for element 1</note> + </trans-unit> + <trans-unit xml:space = "preserve" id = "TestIntVector_1" translate="yes"> + <!--comments for element 2--> + <source >2</source> + <note> This resource is for element 2</note> + </trans-unit> + <trans-unit xml:space = "preserve" id = "TestIntVector_2" translate="yes"> + <!--comments for element 3--> + <source >3</source> + <note> This resource is for element 3</note> + </trans-unit> + </group> + <group restype = "table" xml:space = "preserve" id = "TestTable" resname="TestTable" > + <!--Top level comments for TestTable. Tag name: TestTable--> + <note> This resource is for TestTable</note> + <trans-unit xml:space = "preserve" id = "TestTable_test3" resname = "test3" translate="yes"> + <!--Tag name: test3--> + <source >jasldjfa</source> + <note> This resource is for test3</note> + </trans-unit> + <trans-unit xml:space = "preserve" id = "TestTable_test4" resname = "test4" translate="yes"> + <!--Tag name: test4--> + <source >asdfasdf</source> + <note> This resource is for test4</note> + </trans-unit> + <trans-unit restype = "int" xml:space = "preserve" id = "TestTable_test5" resname = "test5" translate="yes"> + <!--Tag name: test5--> + <source>1</source> + <note> This resource is for test5</note> + </trans-unit> + <bin-unit restype = "bin" id = "TestTable_test6" mime-type = "application" resname = "test6" translate="yes"> + <!--Tag name: test6--> + <bin-source> + <internal-file form = "application" crc = "480784534">0102</internal-file> + </bin-source> + <note> This resource is for test6</note> + </bin-unit> + </group> + <trans-unit xml:space = "preserve" id = "test1" resname = "test1" translate="yes"> + <!--Top level comments for the string.Tag name: test1--> + <source >The {0} job named {1}</source> + <note> {0} represents the position of OSNAME and {1} represents the position of job name e.g: The OS/400 job named SYSLOG</note> + </trans-unit> + <trans-unit xml:space = "preserve" id = "test2" resname = "test2" translate="yes"> + <!--Tag name: test2--> + <source >some translatable stuff</source> + <note> This resource is for test2</note> + </trans-unit> + </group> + </body> + </file> +</xliff> diff --git a/icuSources/test/testdata/rbbitst.txt b/icuSources/test/testdata/rbbitst.txt index bdb45db0..d336c674 100644 --- a/icuSources/test/testdata/rbbitst.txt +++ b/icuSources/test/testdata/rbbitst.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2001-2004 International Business Machines +# Copyright (c) 2001-2006 International Business Machines # Corporation and others. All Rights Reserved. # # RBBI Test Data @@ -12,6 +12,7 @@ # <sent> any following data is for sentence break testing # <line> any following data is for line break testing # <char> any following data is for char break testing +# <locale local_name> Switch to the named locale at the next occurence of <word>, <sent>, etc. # <data> ... </data> test data. May span multiple lines. # <> Break position, status == 0 # • Break position, status == 0 (Bullet, \u2022) @@ -22,7 +23,7 @@ # -# Temp debugging tests +# Temp debugging tests <line> # to test for bug #4097920 <data>•dog,cat,mouse •(one)•(two)\n<100></data> @@ -87,6 +88,8 @@ # (Requires special casing in implementation, which is why it gets a test.) <data>•\uffff•\uffff• •a•</data> +# Treat Japanese Half Width voicing marks as combining +<data>•A\uff9e•B\uff9f\uff9e\uff9f•C•</data> ######################################################################################## # @@ -156,7 +159,7 @@ <data>•abc<200>\u4e01<400>\u4e02<400>\u3005<200>\u4e03<400>\u4e03<400>abc<200> •</data> -<data>•\u06c9\uc799<200>\ufffa•</data> +<data>•\u06c9\uc799\ufffa<200></data> # # Try some words from other scripts. @@ -185,6 +188,11 @@ # <data>•\u8527<400>\u02ba<200>\u0027\u0d42•\u00b7•\u09ea<100></data> +# +# Jitterbug 5276 - treat Japanese half width voicing marks as Grapheme Extend +# +<data>•A\uff9e\uff9fBC<200> •1\uff9e\uff9f23<100></data> + ######################################################################################## # # @@ -217,19 +225,19 @@ doing? •This\n<100> costs $20,00,000. •</data> "This isn't it." •Hi! \ •This is a simple sample sentence. •(This is it.) •This is a simple sample sentence. •\ "This isn't it." •\ -Hi! •This is a simple sample sentence. •It does not have to make any sense as you can see. •Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. •Che la dritta via aveo smarrita. •He said, that I said, that you said!•! •Don't rock the boat.\u2029•Because I am the daddy, that is why. -•Not on my time (el timo.)•! •</data> +Hi! •This is a simple sample sentence. •It does not have to make any sense as you can see. •Nel mezzo del cammin di nostra vita, mi ritrovai in una selva oscura. •Che la dritta via aveo smarrita. •He said, that I said, that you said!! •Don't rock the boat.\u2029•Because I am the daddy, that is why. +•Not on my time (el timo.)! •</data> -<data>•Hello. •So what!•!\u2029•"But now," he said, \ +<data>•Hello. •So what!!\u2029•"But now," he said, \ "I know!" •\ -Harris thumbed down several, including "Away We Go" (which became the huge success Oklahoma!)•. •One species, B. anthracis, is highly virulent. +Harris thumbed down several, including "Away We Go" (which became the huge success Oklahoma!). •One species, B. anthracis, is highly virulent. •Wolf said about Sounder:\ "Beautifully thought-out and directed." •\ Have you ever said, "This is where\tI shall live"? •He answered, \ -"You may not!" •Another popular saying is: "How do you do?"•. \n•\ +"You may not!" •Another popular saying is: "How do you do?". \n•\ Yet another popular saying is: \ 'I'm fine thanks.' •\ -What is the proper use of the abbreviation pp.•? •Yes, I am definatelly 12" tall!•!\ +What is the proper use of the abbreviation pp.? •Yes, I am definatelly 12" tall!!\ •Now\r<100>is\n<100>the\r\n<100>time\n<100>\r<100>for\r<100>\r<100></data> <data>•No breaks when . is surrounded by UPPER.Case letters. •</data> @@ -245,13 +253,13 @@ What is the proper use of the abbreviation pp.•? •Yes, I am definatelly 12" # Treat fullwidth variants of .!? the same as their # normal counterparts # -<data>•I know I'm right\uff0e •Right\uff1f •Right\uff01 •</data>" +<data>•I know I'm right\uff0e •Right\uff1f •Right\uff01 •</data> # # Don't break sentences at boundary between CJK and digits # -<data>•\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8\u97e48888\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8\u4ec0\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u3002•Bye, now<100></data>" +<data>•\u5487\u67ff\ue591\u5017\u61b3\u60a1\u9510\u8165\u9de8\u97e48888\u821c\u8165\u7fc8\u51ce\u306d\ue30b\u2494\u56d8\u4ec0\u60b1\u8560\u51ba\u611d\u57b6\u2510\u5d46\u97e5\u7751\u3002•Bye, now<100></data> # # Breaks around '(' following a sentence TERM. (Rule 9) @@ -310,7 +318,7 @@ What is the proper use of the abbreviation pp.•? •Yes, I am definatelly 12" # Regression test for bug #1984, Sentence break in Arabic text. <data>\ -•\u0623\u0633\u0627\u0633\u064b\u0627\u060c\u0020\u062a\u062a\u0639\u0627"\u0645\u0644\u0020\u0627\u0644\u062d\u0648\u0627\u0633\u064a\u0628\u0020"\u0641\u0642\u0637\u0020\u0645\u0639\u0020\u0627\u0644\u0623\u0631\u0642\u0627\u0645\u060c\u0648\u062a\u0642\u0648\u0645\u0020\u0628\u062a\u062e\u0632\u064a\u0646\u0020\u0627\u0644\u0623\u062d\u0631\u0641\u0020\u0648\u0627\u0644\u0645\u062d\u0627\u0631\u0641\u0020\u0627\u0644\u0623\u062e\u0631\u0649\u0020\u0628\u0639\u062f\u0020\u0623\u0646\u062a\u064f\u0639\u0637\u064a\u0020\u0631\u0642\u0645\u0627\u0020\u0645\u0639\u064a\u0646\u0627\u0020\u0644\u0643\u0644\u0020\u0648\u0627\u062d\u062f\u0020\u0645\u0646\u0647\u0627\u002e\u0020•\u0648\u0642\u0628\u0644\u0020\u0627\u062e\u062a\u0631\u0627\u0639\u0022\u064a\u0648\u0646\u0650\u0643\u0648\u062f\u0022\u060c\u0020\u0643\u0627\u0646\u0020\u0647\u0646\u0627\u0643\u0020\u0645\u0626\u0627\u062a\u0020\u0627\u0644\u0623\u0646\u0638\u0645\u0629\u0020\u0644\u0644\u062a\u0634\u0641\u064a\u0631\u0648\u062a\u062e\u0635\u064a\u0635\u0020\u0647\u0630\u0647\u0020\u0627\u0644\u0623\u0631\u0642\u0627\u0645\u0020\u0644\u0644\u0645\u062d\u0627\u0631\u0641\u060c\u0020\u0648\u0644\u0645\u0020\u064a\u0648\u062c\u062f\u0020\u0646\u0638\u0627\u0645\u062a\u0634\u0641\u064a\u0020\u0639\u0644\u0649\u0020\u062c\u0645\u064a\u0639\u0020\u0627\u0644\u0645\u062d\u0627\u0631\u0641\u0020\u0627\u0644\u0636\u0631\u0648\u0631\u064a\u0629. •</data>" +•\u0623\u0633\u0627\u0633\u064b\u0627\u060c\u0020\u062a\u062a\u0639\u0627"\u0645\u0644\u0020\u0627\u0644\u062d\u0648\u0627\u0633\u064a\u0628\u0020"\u0641\u0642\u0637\u0020\u0645\u0639\u0020\u0627\u0644\u0623\u0631\u0642\u0627\u0645\u060c\u0648\u062a\u0642\u0648\u0645\u0020\u0628\u062a\u062e\u0632\u064a\u0646\u0020\u0627\u0644\u0623\u062d\u0631\u0641\u0020\u0648\u0627\u0644\u0645\u062d\u0627\u0631\u0641\u0020\u0627\u0644\u0623\u062e\u0631\u0649\u0020\u0628\u0639\u062f\u0020\u0623\u0646\u062a\u064f\u0639\u0637\u064a\u0020\u0631\u0642\u0645\u0627\u0020\u0645\u0639\u064a\u0646\u0627\u0020\u0644\u0643\u0644\u0020\u0648\u0627\u062d\u062f\u0020\u0645\u0646\u0647\u0627\u002e\u0020•\u0648\u0642\u0628\u0644\u0020\u0627\u062e\u062a\u0631\u0627\u0639\u0022\u064a\u0648\u0646\u0650\u0643\u0648\u062f\u0022\u060c\u0020\u0643\u0627\u0646\u0020\u0647\u0646\u0627\u0643\u0020\u0645\u0626\u0627\u062a\u0020\u0627\u0644\u0623\u0646\u0638\u0645\u0629\u0020\u0644\u0644\u062a\u0634\u0641\u064a\u0631\u0648\u062a\u062e\u0635\u064a\u0635\u0020\u0647\u0630\u0647\u0020\u0627\u0644\u0623\u0631\u0642\u0627\u0645\u0020\u0644\u0644\u0645\u062d\u0627\u0631\u0641\u060c\u0020\u0648\u0644\u0645\u0020\u064a\u0648\u062c\u062f\u0020\u0646\u0638\u0627\u0645\u062a\u0634\u0641\u064a\u0020\u0639\u0644\u0649\u0020\u062c\u0645\u064a\u0639\u0020\u0627\u0644\u0645\u062d\u0627\u0631\u0641\u0020\u0627\u0644\u0636\u0631\u0648\u0631\u064a\u0629. •</data> # Try a few more of the less common sentence endings. <data>•Hello, world\u3002 •Hello, world\u1803 •Hello, world\u2048 •Hello, world\u203c •Let's end here. •</data> @@ -473,7 +481,7 @@ What is the proper use of the abbreviation pp.•? •Yes, I am definatelly 12" <data>•\u4e01•\ud840\udc01•\u4e02•abc •\ue000 •\udb80\udc01•</data> # Regression for bug 836 -<data>•AAA•(AAA •</data> +<data>•AAA(AAA •</data> # Try some words from other scripts. # Greek, Cyrillic, Hebrew, Arabic, Arabic, Georgian, Latin @@ -499,3 +507,34 @@ What is the proper use of the abbreviation pp.•? •Yes, I am definatelly 12" <data>•'•start •with •a •case-•ignorable •cha'r'a'cter•</data> + +########################################################################################## +# +# Thai Tests +# +########################################################################################## +<locale th> +<word> +# +# Test data originally from the test code source file +# // @suwit -- Thai sample data from GVT Guideline +# +<data>•\u0E2B\u0E19\u0E36\u0E48\u0E07<200>\u0E04\u0E33<200>\u0E44\u0E17\u0E22<200>\ +\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16<200>\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A<200>\ +\u0E14\u0E49\u0E27\u0E22<200>\u0e2b\u0e25\u0e32\u0e22<200>\ +\u0e1e\u0e22\u0e32\u0e07\u0e04\u0e4c<200></data> + +# +# Jitterbug 3671 Test Case +# +<data>•สวัสดี<200>ครับ<200>สบาย<200>ดี<200>ไหม<200> •ครับ<200></data> + +# +# Trac ticket 5595 Test Case +<data>•บท<200>ที่๑พายุ<200>ไซโคลน<200>โด<200>โรธี<200>อาศัย<200>อยู่<200>ท่ามกลาง<200>\ +ทุ่งใหญ่<200>ใน<200>แคนซัส<200>กับ<200>ลุง<200>เฮ<200>นรี<200>ชาวไร่<200>และ<200>ป้า<200>เอ็ม<200>\ +ภรรยา<200>ชาวไร่<200>บ้าน<200>ของ<200>พวก<200>เขา<200>หลัง<200>เล็ก<200>เพราะ<200>ไม้<200>\ +สร้าง<200>บ้าน<200>ต้อง<200>ขน<200>มา<200>ด้วย<200>เกวียน<200>เป็น<200>ระยะ<200>ทาง<200>หลาย<200>\ +ไมล์<200></data> + + diff --git a/icuSources/test/testdata/regextst.txt b/icuSources/test/testdata/regextst.txt index 15737667..38c3d42b 100644 --- a/icuSources/test/testdata/regextst.txt +++ b/icuSources/test/testdata/regextst.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2001-2004 International Business Machines +# Copyright (c) 2001-2005 International Business Machines # Corporation and others. All Rights Reserved. # # file: @@ -99,7 +99,7 @@ # . does not match new-lines -"." "\u000a\u000d\u0085\u000c\u2028\u2029<0>X</0>\u000aY" +"." "\u000a\u000d\u0085\u000c\u000b\u2028\u2029<0>X</0>\u000aY" "A." "A\u000a "# no match # \d for decimal digits @@ -453,6 +453,7 @@ "." 2 "1<0>2</0>3\u000aXYZ" "." 3 "12<0>3</0>\u000aXYZ" "." 4 "123\u000a<0>X</0>YZ" # . doesn't match newlines +"." 4 "123\u000b<0>X</0>YZ" "." 4 "123\u000c<0>X</0>YZ" "." 4 "123\u000d<0>X</0>YZ" "." 4 "123\u000d\u000a<0>X</0>YZ" @@ -460,6 +461,7 @@ "." 4 "123\u2028<0>X</0>YZ" "." 4 "123\u2029<0>X</0>YZ" "." 4s "123<0>\u000a</0>XYZ" # . matches any +"." 4s "123<0>\u000b</0>XYZ" "." 4s "123<0>\u000c</0>XYZ" "." 4s "123<0>\u000d</0>XYZ" "." 4s "123<0>\u000d\u000a</0>XYZ" @@ -505,6 +507,28 @@ "\w+" "<0>イチロー</0>" "\b....\b." "<0>イチロー?</0>" +# +# Bug 4058 ICU Unicode Set patterns have an odd feature - +# A $ as the last character before the close bracket means match +# a \uffff, which means off the end of the string in transliterators. +# Doesn't make much sense for regex, but works that way anyhow. +# +"[\$](P|C|D);" "<0>$<1>P</1>;</0>" +"[$](P|C|D);" "<0>\uffff<1>P</1>;</0>" +"[$](P|C|D);" "$P;" +"[$$](P|C|D);" "<0>$<1>P</1>;</0>" + +# +# bug 4888 Flag settings lost in some cases. +# +"((a){2})|(#)" is "no" +"((a){2})|(#)" is "<0><1>a<2>a</2></1></0>#" +"((a){2})|(#)" is "a<0><3>#</3></0>" + +"((a|b){2})|c" is "<0>c</0>" +"((a|b){2})|c" is "<0>C</0>" +"((a|b){2})|c" s "C" + # # Random debugging, Temporary # diff --git a/icuSources/test/testdata/riwords.txt b/icuSources/test/testdata/riwords.txt index 80174e2e..67dab277 100644 --- a/icuSources/test/testdata/riwords.txt +++ b/icuSources/test/testdata/riwords.txt @@ -1,32943 +1,32943 @@ -#******************************************************************************* -#* -#* Copyright (C) 2003, National Electronics and Computer Technology Center -#* and others. All Rights Reserved. -#* -#******************************************************************************* -# Sorted Thai word list used for testing the ThaiCollator class. -# This list was taken from the Web: <http://www.links.nectec.or.th/itech/download.html> -# -# Lines starting with '#' are ignored; others are treated as single words -# in the UTF-8 encoding. -# -# -# License information: -# RIWord License -# -# COPYRIGHT AND PERMISSION NOTICE -# -# Copyright (c) 2003 National Electronics and Computer Technology Center and others -# All rights reserved. -# -# 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, and/or sell copies of the Software, and to permit persons -# to whom the Software is furnished to do so, provided that the above -# copyright notice(s) and this permission notice appear in all copies of -# the Software and that both the above copyright notice(s) and this -# permission notice appear in supporting documentation. -# -# 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 -# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL -# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING -# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -# Except as contained in this notice, the name of a copyright holder -# shall not be used in advertising or otherwise to promote the sale, use -# or other dealings in this Software without prior written authorization -# of the copyright holder. -# -# -------------------------------------------------------------------------------- -# All trademarks and registered trademarks mentioned herein are the property of their respective owners. -ก -ก็ -กก -ก๊ก -กกขนาก -กกช้าง -กกธูป -กกหู -ก กา -กกุธภัณฑ์ -ก ข -ก ข ไม่กระดิกหู -กง -ก่ง -ก้ง -ก๊ง -กงกอน -กงการ -กงเกวียน -กงเกวียนกำเกวียน -กงโก้ -กงค้าง -ก้งโค้ง -ก้งง -กงจักร -กงฉาก -กงไฉ่ -กงเต๊ก -กงพัด -กงวาน -กงสี -กงสุล -กช -กช- -กชกร -กฎ -กฎกระทรวง -กฎเกณฑ์ -กฎข้อบังคับ -กฎทบวง -กฎธรรมชาติ -กฎธรรมดา -กฎบัตร -กฎบัตรกฎหมาย -กฎบัตรสหประชาชาติ -กฎมนเทียรบาล -กฎยุทธวินัย -กฎศีลธรรม -กฎเสนาบดี -กฎหมาย -กฎหมายนานาประเทศ -กฎหมายปิดปาก -กฎหมายพาณิชย์ -กฎหมายแพ่ง -กฎหมายระหว่างประเทศ -กฎหมายเหตุ -กฎหมายอาญา -กฎหมู่ -กฎแห่งกรรม -กฎอัยการศึก -กฏิ -กฏุก -กฏุก- -กฏุกผล -กฐิน -กฐิน- -กฐินทาน -กฐินัตถารกรรม -กณิกนันต์ -กณิการ์ -กด -กดขี่ -กดคอ -กดชา -กดดัน -กดน้ำ -กดราคา -กดหัว -กดเหลือง -ก็ดี -ก็ได้ -กตเวทิตา -กตเวที -กตัญชลี -กตัญญุตา -กตัญญู -กตาธิการ -กตาภินิหาร -ก็ตาม -กติกา -กติกาสัญญา -กถา -กถามรรค -กถามรรคเทศนา -กถามุข -กถิกาจารย์ -กทรรป -กทลี -กน -ก่น -ก้น -กนก -ก้นกบ -ก้นกระดก -ก้นกุฏิ -ก้นขบ -ก้นครัว -ก่นโคตร -ก้นตะกรน -ก่นแต่ -กนน -กนนเชอ -ก่นนโถง -กนนเหิม -ก้นบึ้ง -ก้นปล่อง -ก้นปอด -ก้นปิด -ก้นปูด -ก้นแมลงสาบ -ก้นย้อย -ก่นสร้าง -ก้นหนัก -ก้นหย่อน -ก้นหอย -ก้นอ้อย -กนิษฐ- -กนิษฐ์ -กนิษฐภคินี -กนิษฐภาดา -กนิษฐา -กบ -กบฏ -กบดาน -กบเต้น -กบทู -กบทูด -กบบัว -กบเลือกนาย -กบาล -กบินทร์ -กบิล -กบี่ -กบี่ธุช -กบูร -กเบนทร์ -กโบร -กโบล -กปณ -กปณก -กปณา -กปิ -กปิตัน -กม -ก้ม -กมณฑลาภิเษก -กมณฑโลทก -กมล -กมลา -กมลาศ -กมลาสน์ -กมเลศ -ก้มหน้า -ก้มหน้าก้มตา -ก้มหลัง -ก้มหัว -กมัณฑลุ -กมุท -กร -กรก -กรกช -กรกฎ -กรกฎาคม -กรกฏ -กรง -กรงทอง -กรงเล็บ -กรชกาย -กรณฑ์ -กรณิการ์ -กรณี -กรณีย- -กรณีย์ -กรณียะ -กรด -กรน -กรนทา -กรนนเช้า -กรบ -กรบูร -กรพินธุ์ -กรภุม -กรม -กรมกรอม -กรมการ -กรมการพิเศษ -กรมเกรียม -กรมท่า -กรมท่าขวา -กรมท่าซ้าย -กรมธรรม์ -กรมธรรม์ประกันภัย -กรมนา -กรมวัง -กรมศักดิ์ -กรร -กรรกง -กรรกฎ -กรรกศ -กรรเกด -กรรไกร -กรรเจียก -กรรชิง -กรรชิด -กรรเชอ -กรรเช้า -กรรเชียง -กรรโชก -กรรซ้นน -กรรแซง -กรรฐ์ -กรรฐา -กรรณ -กรรณยุคล -กรรณา -กรรณิกา -กรรณิการ์ -กรรดิ -กรรดิก -กรรดึก -กรรตุ -กรรตุ- -กรรตุการก -กรรตุวาจก -กรรตุสัญญา -กรรไตร -กรรทบ -กรรแทก -กรรแทรก -กรรบาสิก -กรรบาสิกพัสตร์ -กรรบิด -กรรบูร -กรรปาสิก -กรรปุร -กรรพุม -กรรพุ่ม -กรรภิรมย์ -กรรม -กรรม- -กรรม์ -กรรมกร -กรรมกรณ์ -กรรมการ -กรรมการก -กรรมการิณี -กรรมขัย -กรรมคติ -กรรมชรูป -กรรมชวาต -กรรมฐาน -กรรมบถ -กรรมพันธุ์ -กรรม์ภิรมย์ -กรรมวาจก -กรรมวาจา -กรรมวาจาจารย์ -กรรมวิธี -กรรมวิบาก -กรรมเวร -กรรมศาลา -กรรมสัมปาทิก -กรรมสิทธิ์ -กรรมสิทธิ์เครื่องหมายและยี่ห้อการค้าขาย -กรรมสิทธิ์ผู้แต่งหนังสือ -กรรมสิทธิ์รวม -กรรมัชวาต -กรรมาชีพ -กรรมาธิการ -กรรมาร -กรรลี -กรรลึง -กรรษก -กรรสะ -กรรแสง -กรรหาย -กรรเหิม -กรรโหย -กรรเอา -กรรุณา -กรวด -กรวดน้ำ -กรวน -กรวบ -กรวม -กร้วม -กรวย -กรวยเชิง -กรวยบ้าน -กรวยป่า -กรวิก -กรสาปน์ -กรสุทธิ์ -กรอ -กร้อ -กรอก -กร็อกกร๋อย -กรอกแกรก -กรอกรุย -กรอง -กรองกรอย -กรองทอง -กรอด -กร่อน -กรอบ -กรอบเกรียบ -กรอบแกรบ -กรอบเช็ดหน้า -กรอบหน้า -กรอม -กร่อม -กร่อมๆ -กร่อย -กระ -กระกร -กระกรับกระเกรียบ -กระกรี๊ด -กระกรุ่น -กระกลับกลอก -กระกวด -กระกอง -กระกัด -กระกี้ -กระกูล -กระเกรอก -กระเกริก -กระเกริ่น --กระเกรียบ -กระเกรียม -กระเกรียว -กระเกรี้ยว -กระเกลือก -กระคน -กระคาย -กระคุก -กระงกกระงัน -กระงกกระเงิ่น -กระง่องกระแง่ง --กระงอด -กระง่อนกระแง่น -กระเง้ากระงอด -กระโงก -กระจก -กระจกเงา -กระจกตา -กระจกนูน -กระจกฝ้า -กระจกเว้า -กระจกหุง -กระจง -กระจร -กระจอก -กระจอกงอกง่อย -กระจอกชวา -กระจอกเทศ -กระจองหง่อง -กระจ๋องหง่อง -กระจองอแง -กระจ้อน -กระจอนหู -กระจ้อย -กระจ้อยร่อย -กระจ๋อหวอ -กระจะ -กระจัก -กระจัง -กระจังหลังเบี้ย -กระจัด -กระจัดกระจาย -กระจัดพลัดพราย -กระจับ -กระจับบก -กระจับปิ้ง -กระจับปี่ -กระจ่า -กระจ่าง -กระจาด -กระจาน -กระจาบ --กระจาม -กระจาย -กระจายนะมณฑล -กระจายเสียง -กระจายหางดอก -กระจาว --กระจิก --กระจิ๋ง -กระจิด -กระจิบ --กระจิบ --กระจิ๋ม -กระจิริด -กระจิ๋ว -กระจิ๋วหลิว -กระจี้ --กระจี๋ -กระจุก -กระจุกกระจิก -กระจุกกระจุย -กระจุ๋งกระจิ๋ง -กระจุบ -กระจุ๊บ -กระจุบกระจิบ -กระจุ๋มกระจิ๋ม -กระจุย -กระจุยกระจาย -กระจู้ -กระจู๋กระจี๋ -กระจูด -กระเจอะกระเจิง -กระเจา -กระเจ่า -กระเจ้า -กระเจาะ -กระเจิง -กระเจิดกระเจิง -กระเจี้ยง -กระเจี๊ยบ -กระเจี๊ยบเปรี้ยว -กระเจียว -กระเจี๊ยว -กระแจะ -กระโจน -กระโจม -กระโจมกระจาม -กระโจมทอง -กระโจมไฟ -กระโจมอก -กระฉง -กระฉอก -กระฉอกกระแฉก -กระฉ่อน -กระฉับกระเฉง -กระฉิ่ง -กระฉีก -กระฉูด -กระเฉก --กระเฉง -กระเฉด --กระแฉก -กระแฉ่น -กระโฉกกระเฉก -กระโฉม -กระชง -กระชดกระช้อย --กระชวย -กระชอก -กระชอน -กระชอม -กระชอมดอก -กระช้อย -กระช้อยนางรำ -กระชัง -กระชังหน้าใหญ่ -กระชั้น -กระชับ -กระชาก -กระช่าง -กระชาเดิม -กระชาย -กระชิง -กระชิด -กระชุ -กระชุก -กระชุ่มกระชวย -กระเชอ -กระเชอก้นรั่ว -กระเชา -กระเช้า -กระเช้าผีมด -กระเช้าสวรรค์ -กระเช้าสีดา -กระเชียง -กระแชง -กระแชะ -กระโชก -กระโชกกระชั้น -กระโชกกระชาก -กระโชกโฮกฮาก -กระซวย --กระซวย --กระซ้อ -กระซ่องกระแซ่ง -กระซับ -กระซ่าง -กระซาบ -กระซิก -กระซิกๆ -กระซิกกระซวย -กระซิกกระซี้ -กระซิบ -กระซิบกระซาบ --กระซี้ -กระซี้กระซ้อ -กระซุง -กระซุบกระซิบ -กระซุ้ม -กระซู่ --กระเซ -กระเซ็น -กระเซอ -กระเซอะกระเซอ -กระเซอะกระเซิง -กระเซ้า -กระเซ้ากระซี้ -กระเซิง --กระเซิง -กระแซ -กระแซะ -กระโซกระเซ -กระฎี -กระฎุมพี -กระดก -กระดกกระดนโด่ -กระด้ง --กระดนโด่ -กระดวง -กระดวน -กระด้วมกระเดี้ยม -กระดอ -กระดอง -กระดองหาย -กระดอน -กระดอม -กระดักกระเดี้ย -กระดังงัว -กระดังงา -กระดังงาจีน -กระดังงาเถา -กระดังงาลนไฟ -กระดาก -กระดากกระเดื่อง -กระด้าง -กระด้างกระเดื่อง -กระดางลาง -กระดาด -กระดาดขาว -กระดาดดำ -กระดาดแดง -กระดาน -กระดานชนวน -กระดานชัย -กระดานดำ -กระดานโต้คลื่น -กระดานถีบ -กระดานพน -กระดานพิง -กระดานไฟ -กระดานลื่น -กระดานเลียบ -กระดานหก -กระดาษ -กระดาษแก้ว -กระดาษข่อย -กระดาษไข -กระดาษเงินกระดาษทอง -กระดาษซับ -กระดาษทราย -กระดาษเทศ -กระดาษฟาง -กระดาษว่าว -กระดาษสา -กระดำกระด่าง -กระดิก -กระดิกกระเดี้ย -กระดิ่ง --กระดิ้ง -กระดิ่งทอง -กระดิบ -กระดิบๆ -กระดี่ -กระดี้กระเดียม -กระดี่ได้น้ำ -กระดึง -กระดึงช้างเผือก -กระดึงพระราม -กระดืบ -กระดุ -กระดุกกระดิก -กระดุ้งกระดิ้ง -กระดุบๆ -กระดุบกระดิบ -กระดุม -กระดูก -กระดูกกบ -กระดูกไก่ดำ -กระดูกขัดมัน -กระดูกเขียด -กระดูกแข็ง -กระดูกค่าง -กระดูกงู -กระดูกดำ -กระดูกร้องได้ -กระดูกสันหลัง -กระดูกอึ่ง --กระเดก -กระเด้ง -กระเด็น -กระเด้า -กระเด้าดิน -กระเด้าลม -กระเดาะ -กระเดาะปาก -กระเดิด --กระเดี้ย -กระเดียด --กระเดียม --กระเดี้ยม -กระเดือก -กระเดื่อง -กระแด็กๆ -กระแด้ง -กระแด้แร่ -กระแด่วๆ -กระแดะ -กระแดะกระแด๋ -กระโดก -กระโดกกระเดก -กระโดง -กระโดงคาง -กระโดงแดง -กระโดด -กระโดดร่ม -กระโดน -กระโดนดิน -กระใด -กระได -กระไดแก้ว -กระไดลิง -กระตรกกระตรำ -กระตร้อ -กระตรับ -กระตราก --กระตรำ -กระตรุด -กระตรุม -กระต้วมกระเตี้ยม -กระต้อ -กระต่องกระแต่ง -กระต๊อบ -กระต้อยตีวิด -กระตัก -กระตั้ว --กระตาก -กระต่าย -กระต่ายขูด -กระต่ายจันทร์ -กระต่ายจาม -กระต่ายจีน -กระต่ายชมจันทร์ -กระต่ายต้องแร้ว -กระต่ายตื่นตูม -กระต่ายเต้น -กระต่ายสามขา -กระต่ายหมายจันทร์ -กระติก --กระติก --กระติ้ง -กระติ๊ด -กระติ๊ดขี้หมู -กระติบ -กระตือรือร้น -กระตุก -กระตุกกระติก -กระตุ้งกระติ้ง -กระตุ่น -กระตุ้น -กระตูบ -กระเตง -กระเต็น -กระเตอะ -กระเตาะ -กระเตาะกระแตะ --กระเตี้ยม -กระเตื้อง -กระแต --กระแต่ง -กระแตแต้แว้ด -กระแตไต่ไม้ -กระแตวับ --กระแตะ -กระโตกกระตาก -กระโตน -กระไตร -กระถด -กระถอบ -กระถั่ว -กระถาง -กระถิก -กระถิน -กระถินหอม -กระถึก -กระเถิบ -กระโถน -กระโถนท้องพระโรง -กระโถนปากแตร -กระโถนฤๅษี -กระทก -กระทง -กระทงแถลง -กระทงน้อย -กระทงป่า -กระทงเพชร -กระทงลอย -กระทงลาย -กระทงเหิน -กระทด -กระทดกระทัน -กระทบ -กระทบกระทั่ง -กระทบกระเทียบ -กระทบกระเทือน -กระทบกระแทก -กระทรวง -กระทวย -กระทอก -กระท้อน -กระท่อนกระแท่น -กระท่อม -กระท้อมกระแท้ม -กระท่อมขี้หมู -กระท่อมเลือด -กระทะ -กระทะใบบัว -กระทั่ง -กระทั่งติด --กระทัน --กระทั้น -กระทา -กระทาชาย -กระทาย -กระทายเหิน -กระทาสี -กระทาหอง -กระทำ -กระทำความผิด -กระทิกกระทวย -กระทิง -กระทิงโทน -กระทึง -กระทืบ -กระทืบธรณี -กระทืบยอบ -กระทุ -กระทุง -กระทุ้ง -กระทุงลาย -กระทุ้งเส้า -กระทุงหมาบ้า -กระทุงเหว -กระทุ่ม -กระทุ่มขี้หมู -กระทุ่มนา -กระทุ่มหมู -กระทู้ -กระทู้ถาม -กระเท่ -กระเท่เร่ --กระเทียบ -กระเทียม -กระเทียมหอม -กระเทือน -กระเทือนใจ -กระเทื้อม -กระแทก -กระแทกกระทั้น -กระแท่น --กระแท้ม -กระแทะ -กระไทชาย -กระนก -กระน่อง -กระนั้น -กระนี้ -กระโน้น -กระไน -กระบก -กระบกคาย -กระบถ -กระบม -กระบวน -กระบวนกระบิด -กระบวนการ -กระบวนการยุติธรรม -กระบวนความ -กระบวนจีน -กระบวย -กระบวร -กระบอก -กระบอกเพลา -กระบอกสูบ -กระบอกเสียง -กระบอกหัว -กระบอง -กระบองกลึง -กระบองกัน -กระบองเพชร -กระบองราหู -กระบะ -กระบัด -กระบั้วกระเบี้ย -กระบ่า -กระบ้า -กระบาก -กระบาย -กระบาล -กระบิ -กระบิ้ง -กระบิด -กระบิดกระบวน -กระบิล -กระบี่ -กระบี่กระบอง -กระบี่ธุช -กระบี่ลีลา -กระบือ -กระบือเจ็ดตัว -กระบุง -กระบุ่มกระบ่าม -กระบู้กระบี้ -กระบูน -กระบูนเลือด -กระบูร -กระเบง -กระเบญ -กระเบ็ดกระบวน -กระเบน -กระเบนเหน็บ -กระเบา -กระเบิก --กระเบี้ย -กระเบียด -กระเบียดกระตัก -กระเบียดกระเสียร -กระเบียน -กระเบื้อง -กระเบื้องเกล็ดเต่า -กระเบื้องถ้วย -กระเบื้องถ้วยกะลาแตก -กระเบื้องปรุ -กระเบื้องรู -กระเบื้องหน้าวัว -กระแบ่ -กระแบก -กระแบกงา -กระแบะ -กระแบะมือ -กระโบม -กระปมกระปำ -กระปมกระเปา -กระปรอก -กระปรอกว่าว -กระปรี้กระเปร่า -กระปอก -กระป้อกระแป้ -กระป่อง -กระป๋อง -กระปอดกระแปด -กระป๋อหลอ -กระปั้วกระเปี้ย --กระปำ -กระป่ำ --กระปิ่ม -กระปุก -กระปุกหลุก -กระปุ่ม -กระปุ่มกระป่ำ -กระปุ่มกระปิ่ม --กระเปา -กระเป๋า -กระเป๋าหนัก -กระเปาะ -กระเปาะเหลาะ --กระเปี้ย --กระแป้ --กระแปด -กระโปก -กระโปรง -กระโปรงทอง -กระผม --กระผลาม -กระผลีกระผลาม -กระผาน -กระผีก -กระผีกริ้น -กระพรวน -กระพริ้ม -กระพอก -กระพอกวัว -กระพอง -กระพ้อม -กระพัก -กระพัง -กระพังเหิร -กระพังโหม -กระพัด -กระพัดแม่ม่าย -กระพัตร -กระพัน -กระพั่น -กระพา -กระพาก -กระพี้ -กระพี้เขาควาย -กระพือ -กระพือข่าว -กระพือปีก -กระพุ้ง -กระพุ่ม -กระพุ่มมือ -กระเพลิศ -กระเพาะ -กระเพาะปลา -กระเพิง -กระเพื่อม -กระแพง -กระแพ้ง -กระฟัดกระเฟียด --กระฟาย -กระฟูมกระฟาย --กระเฟียด -กระมล -กระมอบ -กระมอมกระแมม -กระมัง -กระมัน -กระมิดกระเมี้ยน -กระมึน -กระมุท -กระเมาะ --กระเมี้ยน --กระแมม -กระย่อง --กระย่อง -กระย่องกระแย่ง -กระย่อน -กระย่อม -กระยา -กระยาคชวาง -กระยาง -กระยาจก --กระยาด -กระยาดอก -กระยาดอกเบี้ย -กระยาทาน -กระยาทิพย์ -กระยาบวช -กระยาเบี้ย -กระยารงค์ -กระยาเลย -กระยาสนาน -กระยาสังเวย -กระยาสังแวง -กระยาสารท -กระยาเสวย -กระยาหงัน -กระยาหาร -กระยิก -กระยิ้มกระย่อง -กระยึกกระยือ -กระยืดกระยาด -กระเย้อกระแหย่ง --กระแย่ง -กระรอก -กระรอกน้ำข้าว -กระเรียน -กระโรกน้ำข้าว -กระโรกใหญ่ -กระไร -กระลด -กระลบ -กระลอก -กระลอม -กระละหล่ำ -กระลัด -กระลับ -กระลับกระเลือก -กระลัมพร -กระลา -กระลาการ -กระลาพิน -กระลายกระลอก -กระลาศรี -กระลำ -กระลำพร -กระลำพัก -กระลำพุก -กระลิง -กระลี -กระลึง -กระลุมพาง -กระลุมพุก -กระลุมพู -กระลูน -กระลู่น์ -กระเล็น -กระเลียด -กระเลือก -กระโลง -กระวน -กระวนกระวาย -กระวัด -กระว่า --กระวาด -กระวาน -กระวาย -กระวายกระวน -กระวิน -กระวี -กระวีกระวาด -กระวูดกระวาด -กระเวน -กระเวนกระวน -กระเวยกระวาย -กระแวน -กระโวยกระวาย -กระศก -กระศัย -กระษัตริย์ -กระษัตรี -กระษัย -กระษัยกล่อน -กระษาปณ์ -กระษิร -กระเษม -กระเษมสานต์ -กระเษียร -กระสง --กระสน -กระสบ -กระสม -กระสรวล -กระสร้อย -กระสวน -กระสวย -กระสอบ -กระสะ -กระสัง -กระสัน -กระสับกระส่าย -กระสา -กระสานติ์ -กระสาบ -กระสาย --กระส่าย -กระสินธุ -กระสือ -กระสือดูด -กระสุงกระสิง -กระสุน -กระสุนปืน -กระสุนวิถี -กระสูทธิ์ -กระสูบ -กระเสด -กระเส็นกระสาย -กระเส่า -กระเสาะกระแสะ -กระเสียน -กระเสียร -กระเสือกกระสน -กระแส -กระแสการเงิน -กระแสความ -กระแสง -กระแสจิต -กระแสตรง -กระแสน้ำ -กระแสพระราชดำรัส -กระแสรับสั่ง -กระแสลม -กระแสสลับ -กระแสเสียง -กระแสะ -กระโสง -กระไส -กระหง่อง -กระหน -กระหนก -กระหนกกินรี -กระหนกนฤมิต -กระหนกนารี -กระหน่อง -กระหนาก -กระหนาบ -กระหนาบคาบเกี่ยว -กระหน่ำ -กระหมวด -กระหมอบ -กระหม่อม -กระหม่อมบาง -กระหมั่ง -กระหม่า --กระหมิด -กระหมิบ -กระหมุดกระหมิด -กระหมุ่น -กระหมุบ -กระหมุบกระหมิบ -กระหย่ง -กระหยด -กระหยบ -กระหย่อน -กระหย่อม -กระหยะ -กระหยัง -กระหยับ -กระหยิ่ม -กระหรอด -กระหริ่ง -กระหวน -กระหวัด -กระหวัดเกล้า -กระหว่า -กระหอง -กระหัง -กระหัด -กระหาง -กระหาย -กระหึม -กระหึ่ม -กระหืดกระหอบ -กระเห็น -กระเหน็จ -กระเหน็จกระแหน่ -กระเหนียด -กระเหม็ดกระเหมียด -กระเหม็ดกระแหม่ -กระเหม่น -กระเหม่า -กระเหลียก -กระเหว่า -กระเห่อ -กระเหิม -กระเหี้ยนกระหือรือ -กระแห -กระแหทอง --กระแหน -กระแหน่ -กระแหนบ -กระแหนะ -กระแหนะกระแหน -กระแหมบ -กระแหม่ว -กระแหย่ง -กระแหร่ม -กระแหล่ง -กระโห้ -กระโหนด -กระโหม -กระโหย -กระโหย่ง --กระอ่วน -กระอวล -กระอ้อกระแอ้ -กระออดกระแอด -กระออบ -กระออม -กระอ้อมกระแอ้ม -กระออมน้ำ -กระอัก -กระอักกระอ่วน -กระอักกระไอ -กระอั้วแทงควาย -กระอ้า -กระอาน -กระอิด -กระอิดกระเอื้อน -กระอึก -กระอึกกระอัก -กระอึด -กระอืด -กระอุ -กระอุก -กระเอบ -กระเอา -กระเอิก -กระเอิบ --กระแอ้ -กระแอก --กระแอด -กระแอบ -กระแอม --กระแอ้ม -กระไอ -กระไอกระแอม -กรัก -กรักขี -กรัง -กรัชกาย -กรัณฑ- -กรัณฑ์ -กรัณย์ -กรัน -กรับ -กรัม -กราก -กราง -กร่าง -กรางเกรียง -กราด --กราด -กราดเกรี้ยว -กราดวง -กราน -กร้าน -กรานกฐิน -กราบ -กราบพระ -กราฟ -กราม -กรามช้าง -กรามพลู -กราย -กร่าย -กราล -กราว -กร้าว -กราวด่าง -กราวรูด -กราสิก -กรำ -กร่ำ -กร่ำกรุ่น -กริก -กริ๊ก -กริกกริว -กริกกรี -กริ่ง -กริ๊ง -กริงกริว -กริ้งกริ้ว -กริ่งเกรง -กริ่งใจ -กริช -กริณี -กริตย- -กริน -กรินทร์ -กรินี -กริบ -กริม -กริ่ม -กริยา -กริยานุเคราะห์ -กริยาวิเศษณ์ -กริยาวิเศษณ์วลี -กริยาวิเศษณานุประโยค -กริว -กริ้ว -กริวกราว -กริวลาย -กรี -กรีฑา -กรีฑากร -กรีฑาภิรมย์ -กรีฑารมย์ -กรีฑาสถาน -กรีด -กรี๊ด -กรีดกราด -กรีดกราย -กรีดนิ้ว -กรีธา -กรีธาทัพ -กรีธาพล -กรีษ -กรีส -กรึง -กรุ -กรุก -กรุกกรัก -กรุกกรู๊ -กรุง -กรุ้งกริ่ง -กรุงเขมา -กรุงพาลี -กรุณ -กรุณา -กรุณาทฤคุณ -กรุน -กรุ่น -กรุบ -กรุบกริบ -กรุ่ม -กรุ้มกริ่ม -กรุย -กรุยกราย -กรุยเกรียว -กรู -กรูด -กรูม -กเรณุ -กเรณุกา -กเรนทร -กเรนทร์ -กฤช -กฤด- -กฤดยาเกียรณ -กฤดา -กฤดาการ -กฤดาญชลี -กฤดาธิการ -กฤดาภินิหาร -กฤดาอัญชลี -กฤดิ -กฤดีกา -กฤตติกา -กฤตย- -กฤตยฎีกา -กฤตยา -กฤติกา -กฤติยา -กฤษฎา -กฤษฎาญ -กฤษฎาญชลิต -กฤษฎาญชลี -กฤษฎาญชวลิตวา -กฤษฎาญชวลิศ -กฤษฎาญชวเลศ -กฤษฎาญชุลี -กฤษฎาธาร -กฤษฎาภินิหาร -กฤษฎี -กฤษฎีกา -กฤษณา -กล -กล- -กลไก -กลฉ้อฉล -กลด -กลดกำมะลอ -กลดพระสุเมรุ -กล่น -กลบ -กลบเกลี่ย -กลบเกลื่อน -กลบท -กลบบัตรสุมเพลิง -กลพยาน -กลไฟ -กลม -กลมกล่อม -กลมกลืน -กลมกลืนกลอน -กลมเกลียว -กลมดิก -กลมเป็นลูกมะนาว -กลมภ -กลเม็ด -กลยุทธ์ -กลละ -กลวง -กลวม -กล้วย -กล้วยกล้าย -กล้วยแขก -กล้วยงวงช้าง -กล้วยเต่า -กล้วยใต้ -กล้วยน้อย -กล้วยไม้ -กล้วยสั้น -กล้วยหมูสัง -กลวิธี -กลศ -กลศาสตร์ -กลหาย -กลเหย -กล้อ -กลอก -กลอกกลับ -กลอกแกลก -กลอง -กล่อง -กล้อง -กล้องแกล้ง -กล้องจุลทรรศน์ -กล้องตุด -กล้องโทรทรรศน์ -กลองเพล -กล้องระดับ -กล้องวัดมุม -กล้องสนาม -กล้องสลัด -กล้องส่องทางไกล -กล้องสำรวจ -กลอน -กล่อน -กล้อน -กลอนด้น -กลอนตลาด -กลอนลิลิต -กลอนสด -กลอนสวด -กลอนสุภาพ -กล่อม -กล่อมเกลา -กล่อมเกลี้ยง -กล้อมแกล้ม -กล่อมท้อง -กล่อมมดลูก -กล่อมหอ -กลอย -กลอักษร -กลอุปกรณ์ -กลัก -กลัง -กลัด -กลัดกลุ้ม -กลัดมัน -กลั่น -กลั้น -กลั่นกรอง -กลั่นแกล้ง -กลั้นใจ -กลันท -กลันทก์ -กลับ -กลับกลอก -กลับกลาย -กลับเกลือก -กลับคำ -กลับคืน -กลับตาลปัตร -กลับเนื้อกลับตัว -กลับไปกลับมา -กลับหน้ามือเป็นหลังมือ -กลัมพก -กลัมพร -กลัมพัก -กลัว -กลั้ว -กลั้วเกลี้ย -กลั้วคอ -กลัวน้ำ -กลัวลาน -กลา -กล่า -กล้า -กลาก -กลากลาด -กลาง -กลางเก่ากลางใหม่ -กลางคน -กลางคัน -กลางค่ำ -กลางคืน -กลางแจ้ง -กลางใจมือ -กลางช้าง -กลางดิน -กลางดึก -กลางเดือน -กลางทาสี -กลางนอก -กลางบ้าน -กลางแปลง -กลางเมือง -กลางวัน -กลางหาว -กลาด -กลาดเกลื่อน -กล้าได้กล้าเสีย -กล้านักมักบิ่น -กลาบาต -กลาป -กล้าม -กลาย -กล้าย -กลายกลอก -กล่าว -กล่าวเกลี้ยง -กล่าวขวัญ -กล่าวโทษ -กล่าวหา -กล่าวโอม -กลาโหม -กล่ำ -กล้ำ -กล้ำกราย -กล้ำกลืน -กลิ่ง -กลิ้ง -กลิ้งกลอก -กลิ้งกลางดง -กลิ้งเกลือก -กลิงค์ -กลิ้งครกขึ้นเขา -กลิ้งเป็นลูกมะนาว -กลิ่น -กลิ่นอาย -กลิ้ม -กลี -กลี่ -กลีบ -กลีบตา -กลีบบัว -กลีบหิน -กลึง -กลึ้ง -กลึงกล่อม -กลึงค์ -กลืน -กลืนไม่เข้าคายไม่ออก -กลุ่ม -กลุ้ม -กลุ้มใจ -กลุ้มรุม -กลุ้มอกกลุ้มใจ -กลู่ -กลูโคส -กลูน -กลูน์ -กเลวระ -กวด -กวดขัน -กวน -กวนน้ำให้ขุ่น -กวม -กวย -กวยจั๊บ -กวยจี๊ -ก๋วยเตี๋ยว -กวะ -กวะกวัก -กวะแกว่ง -กวัก -กวัด -กวัดแกว่ง -กวัดไกว -กวัดไกวไสส่ง -กวา -กว่า -กว้า -กวาง -กว่าง -กว้าง -กว้างขวาง -กวางเขน -กวางแขม -กวางจุก -กวางโจน -กว่างชน -กวางชะมด -กว่างโซ้ง -กวางเดินดง -กวางตุ้ง -กวางทราย -กวางทอง -กวางป่า -กวางม้า -กว้างใหญ่ -กว่าชื่น -กวาด -กวาดต้อน -กวาดตา -กวาดล้าง -กวาน -กว่าน -กว้าน -กว๊าน -กว่าเพื่อน -กว้าว -กวาวเครือ -กวิน -กวี -กวีนิพนธ์ -กษณะ -กษมา -กษัตร -กษัตรา -กษัตราธิราช -กษัตริย์ -กษัตริยชาติ -กษัตรี -กษัตรีย์ -กษัตรีศูร -กษัย -กษัย- -กษัยกล่อน -กษัยการ -กษัยน้ำ -กษัยเลือด -กษาปณ์ -กษิดิ -กษีณาศรพ -กษีดิ -กษีร -กษีร- -กษีรธารา -กษีรรส -กษีรามพุ -กษีรารณพ -กสานติ์ -กสิ -กสิกร -กสิกรรม -กสิณ -กหังปายา -ก หัน -กหาปณะ -ก็แหละ -กเฬวราก -กอ -ก่อ -ก้อ -ก๊อ -กอก -ก๊อก -ก่อกรรมทำเข็ญ -ก่อกวน -ก่อการ -กอแก -กอง -ก่อง -ก้อง -กองกลาง -กองกอย -กองกูณฑ์ -กองเกิน -กองเกียรติยศ -กองข้าว -กองโจร -กองทัพ -กองทัพน้อย -กองทุน -กองพล -กองพัน -กองฟอน -กองมรดก -กองร้อย -กองหนุน -กอซ -กอด -กอดแข้งกอดขา -กอดมือกอดตีน -กอดอก -ก่อตั้ง -ก่อน -ก้อน -ก้อนขี้หมา -ก้อนเส้า -กอบ -กอบโกย -กอบด้วย -กอบนาง -ก๊อบปี้ -กอปร -ก้อม -กอมก้อ -ก่อมก้อ -กอย -ก้อย -ก๋อย -ก้อร่อ -ก้อร่อก้อติก -ก่อร่างสร้างตัว -กอริลลา -ก่อฤกษ์ -กอล์ฟ -ก่อแล้วต้องสาน -กอและ -ก่อสร้าง -ก่อหวอด -กอเอี๊ยะ -กะ -กะกร่อม -กะกร้าว -กะกลิ้ง -กะก่อง -กะกัง -กะกึก -กะเกณฑ์ -กะเกาะ -กะโกระ -กะง้อนกะแง้น -กะจัง -กะแจะ -กะชะ -กะชัง -กะชามาศ -กะชิง -กะชึ่กกะชั่ก -กะแช่ -กะซวก -กะซ้าหอย -กะซี่ -กะโซ่ -กะโซ้ -กะดก -กะดง -กะดวน -กะดอกๆ -กะดะ -กะดังบาย -กะดัด -กะด้าง -กะดำกะด่าง -กะดี -กะดี่ -กะดุ้ง -กะเด้ -กะเดก -กะเดี๋ยว -กะได -กะตรุด -กะตอก -กะต่อย -กะตัก -กะตัง -กะตังกะติ้ว -กะตังใบ -กะตังมูตร -กะต่า -กะต๊าก -กะต้ำ -กะติ๊กริก -กะติงกะแตง -กะตีบ -กะตึงกะแตง -กะตุ๊ก -กะตุด -กะตุมู -กะตูก -กะเตก -กะเตงๆ -กะเตงเรง -กะแตว -กะแต่ว -กะโต๊ก -กะโตงกะเตง -กะโต้งโห่ง -กะถัว -กะทกรก -กะทอ -กะทัง -กะทังหัน -กะทัดรัด -กะทัน -กะทันหัน -กะทับ -กะทำ -กะทิ -กะทิขูด -กะทือ -กะทุน -กะเทย -กะเทยนางหมั่น -กะเทาะ -กะแท้ -กะแท่ง -กะแทน -กะนวล -กะนัด -กะบอนกะบึง -กะบ่อนกะแบ่น -กะบัง -กะบั้ง -กะบังรังเฝือก -กะบังลม -กะบังหน้า -กะบิ้ง -กะบิล -กะบึงกะบอน -กะบุด -กะเบ้อ -กะเบียน -กะเบือ -กะปริดกะปรอย -กะปริบ -กะปริบกะปรอย -กะปลกกะเปลี้ย -กะปวกกะเปียก -กะปอม -กะปอมขาง -กะปะ -กะปั่น -กะป้ำกะเป๋อ -กะปิ -กะปู -กะปูด -กะปูดหลูด -กะเปะ -กะเปิ๊บกะป๊าบ -กะเปียด -กะแป้น -กะแปะ -กะโปรง -กะโปโล -กะผลุบกะโผล่ -กะเผ่น -กะเผลก -กะโผลกกะเผลก -กะพง -กะพรวดกะพราด -กะพร่องกะแพร่ง -กะพริบ -กะพรุน -กะพรูดกะพราด -กะพล้อ -กะพล่องกะแพล่ง -กะพ้อ -กะเพรา -กะเพียด -กะเพียดช้าง -กะเพียดหนู -กะมง -กะม่ง -กะเม็ง -กะเม็งตัวผู้ -กะเมีย -กะยุ -กะร่องกะแร่ง -กะระตะ -กะระหนะ -กะรัง -กะรัต -กะรัตหลวง -กะราง -กะรางหัวขวาน -กะริง -กะริงกะเรียด -กะรุงกะรัง -กะรุ่งกะริ่ง -กะรุน -กะเร -กะเรกะร่อน -กะเร่กะร่อน -กะเร่อ -กะเร่อกะร่า -กะเรี่ยกะราด -กะโรกะเร -กะลวย -กะลอ -กะล่อกะแล่ -กะลอจี๊ -กะล่อน -กะล่อมกะแล่ม -กะล่อยกะหลิบ -กะละปังหา -กะละมัง -กะละแม -กะละออม -กะลังตังไก่ -กะลัน -กะลันทา -กะลา -กะลาง -กะลาซอ -กะลาสี -กะลำพอ -กะลิง -กะลิงปลิง -กะลิ้มกะเหลี่ย -กะลิอ่อง -กะลุมพี -กะเล็ง -กะเล่อกะล่า -กะเลิด -กะเลียว -กะแล -กะโล่ -กะโลง -กะวอกกะแวก -กะวะ -กะส้มชื่น -กะส้าหอย -กะหนอกะแหน -กะหน็องกะแหน็ง -กะหนะ -กะหนุงกะหนิง -กะหมอก -กะหร่อง -กะหรอด -กะหร็อมกะแหร็ม -กะหราน -กะหรี่ -กะหรี่ปั๊บ -กะหลาป๋า -กะหล่ำ -กะหลี่ -กะหลีกะหลอ -กะหลุกกะหลิก -กะหำ -กะหำแพะ -กะหือ -กะหูด -กะเหรี่ยง -กะเหลาะเปาะ -กะแหยก -กะแหะ -กะโหลก -กะโหล้ง -กะไหล่ -กะอวม -กะออม -กะอาน -กะอาม -กะอิด -กะอุบ -กะเอว -กะแอ -กะแอน -กัก -กั๊ก -กักกรา -กักกัน -กักการุ -กักขฬะ -กักขัง -กักคุม -กักด่าน -กักตัว -กักตุน -กักบริเวณ -กัง -กั้ง -กังก -กั้งกระดาน -กังก้า -กังเกียง -กังขา -กังฉิน -กังฟู -กังวล -กังวาน -กังเวียน -กังส -กังสดาล -กังไส -กังหัน -กังหันใบพัด -กังหันไอพ่น -กัจฉปะ -กัจฉะ -กัจฉา -กัญ -กัญจุก -กัญจุการา -กัญชา -กัญญา -กัฐ -กัณฏกะ -กัณฐ- -กัณฐก -กัณฐกะ -กัณฐชะ -กัณฐัศ -กัณฐัศว์ -กัณฐา -กัณฐี -กัณฑ์ -กัณฑ์เทศน์ -กัณณ์ -กัณห- -กัณหธรรม -กัณหปักษ์ -กัด -กัดป่า -กัดฟัน -กัดลาก -กัดวาง -กัดหางตัวเอง -กัตติกมาส -กัตติกา -กัตติเกยา -กัตรทัณฑ์ -กัตรา -กัทลี -กัน -กั่น -กั้น -กันกง -กั้นกาง -กันเกรา -กันไกร -กันเขากันเรา -กันชน -กันชิง -กันชีพ -กันเชอ -กั้นซู่ -กันแซง -กันดอง -กันดาร -กันดาล -กันแดด -กันได -กันต์ -กันตัง -กันตัว -กันไตร -กันทร -กันทรากร -กันทะ -กันท่า -กันแทรก -กั้นบัง -กันพิรุณ -กันภัย -กันภิรมย์ -กันเมียง -กันย์ -กันยา -กันยายน -กันลง -กันลอง -กันลึง -กันและกัน -กันสาด -กันแสง -กั้นหยั่น -กันเอง -กันเอา -กับ -กับแก้ -กับแกล้ม -กับข้าว -กับบุเรศ -กับระเบิด -กัป -กัปตัน -กัปนก -กัปบาสิก -กัปปาสิก -กัปปิย- -กัปปิยการก -กัปปิยภัณฑ์ -กัปปิยโวหาร -กัปปิยะ -กัปปีย์ -กัมบน -กัมป- -กัมปน- -กัมปนาการ -กัมปนาท -กัมประโด -กัมปี -กัมพล -กัมพุช -กัมพุช- -กัมพุชพากย์ -กัมพู -กัมพูชา -กัมโพช -กัมมัชวาต -กัมมัฏฐาน -กัมมันตภาพรังสี -กัมมันตรังสี -กัมมาร -กัมลาศ -กัยวิกัย -กัลชาญ -กัลบก -กัลป- -กัลป์ -กัลปนา -กัลปพฤกษ์ -กัลปังหา -กัลปาวสาน -กัลปิต -กัลพุม -กัลเม็ด -กัลยา -กัลยาณ- -กัลยาณมิตร -กัลยาณี -กัลยาเยี่ยมห้อง -กัลเว้า -กัลหาย -กัลโหย -กัลออม -กัลเอา -กัศมล -กัศยป -กัษณ -กา -ก๋า -กาก -กาก- -กากกะรุน -กากขยาก -กากข้าว -กากคติ -กากณึก -กากบาท -กากเพชร -กากภาษา -กากรุน -กากหมู -กากะทิง -กากะเยีย -ก๋ากั่น -กากี -กากีแกมเขียว -กาคาบพริก -กาง -ก้าง -กางเกง -กางเกียง -ก้างขวางคอ -กางของ -กางขี้มอด -กางเขน -ก้างปลา -กางเวียน -กาจับหลัก -กาชาด -ก๊าซ -ก๊าซไข่เน่า -ก๊าซเฉื่อย -ก๊าซน้ำตา -กาซะลอง -กาซะลองคำ -กาญจน- -กาญจนา -กาฐ -กาด -ก๊าด -กาน -ก่าน -ก้าน -ก๊าน -ก้านขด -ก้านแข็ง -ก้านคอ -กานดา -กานต์ -ก้านตอง -ก้านต่อดอก -กานท์ -กานน -ก้านบัว -ก้านพร้าว -กานพลู -ก้านมะพร้าว -ก้านยาว -ก้านแย่ง -ก้านเหลือง -กาน้า -กาน้ำ -กาบ -ก้าบๆ -กาบกี้ -กาบเขียง -กาบคู่ -กาบเดียว -กาบเดี่ยว -กาบน้ำจืด -กาบบัว -กาบปูเล -กาบพรหมศร -กาบหอย -กาบุรุษ -กาบู -กาเปี้ยด -กาฝาก -กาพย์ -กาพย์กลอน -กาฟักไข่ -กาเฟอีน -กาแฟ -กาม -กาม- -ก้าม -ก้ามกราม -กามกรีฑา -กามกิจ -ก้ามกุ้ง -ก้ามเกลี้ยง -กามคุณ -กามฉันท์ -ก้ามดาบ -กามตัณหา -กามท- -กามเทพ -กามน -ก้ามปู -ก้ามปูหลุด -กามภพ -กามราค -กามโรค -กามวิตก -กามวิตถาร -กามสมังคี -กามัช -กามา -กามาทีนพ -กามาพจร -กามามิศ -กามารมณ์ -กามาวจร -กามินี -กามิศ -กาเมศ -กาเมสุมิจฉาจาร -กาโมทย -กาย -กาย- -ก่าย -กายกรรม -ก่ายกอง -กายทวาร -กายบริหาร -กายพันธน์ -กายภาพ -กายภาพบำบัด -กายวิภาคศาสตร์ -กายสิทธิ์ -กายาพยพ -กายินทรีย์ -กาเยน -กาเยนทรีย์ -การ -การก -การกลั่นทำลาย -การขนส่งมวลชน -การครัว -การคลัง -การเงิน -การจร -การณ์ -การต่างประเทศ -การ์ตูน -การเต -การนำ -การบ้าน -การบ้านการเมือง -การบุเรียน -การบูร -การบูรป่า -การเปรียญ -การแผ่รังสี -การพา -การเมือง -การย์ -การเรือน -การละเล่น -การวิก -การเวก -การะเกด -การะบุหนิง -การัณย์ -การันต์ -การางหัวขวาน -การิตการก -การิตวาจก -การุญ -การุณย์ -กาเรการ่อน -กาเรียน -กาเรียนทอง -กาล -กาล- -กาลกรรณี -กาลกิณี -กาลกิริยา -กาลจักร -กาลเทศะ -กาลโยค -กาลสมุตถาน -กาลักน้ำ -กาลัญญุตา -กาลัญญู -กาลัด -กาลานุกาล -กาลิก -กาลี -กาแล็กซี -กาแล็กโทส -กาว -ก้าว -ก้าวก่าย -ก้าวเฉียง -ก้าวร้าว -ก้าวล่วง -กาววาว -ก้าวหน้า -กาวาง -กาเวียน -กาแวน -กาศิก -กาศิก- -กาศิกพัสตร์ -กาษฐะ -กาษา -กาสร -กาสะ -กาสัก -กาสา -กาสามปีก -กาสาร -กาสาว- -กาสาวพัสตร์ -กาสาวะ -กาสิโน -กาหล -กาหลง -กาหลงรัง -กาหลา -กาหัก -กาเหว่า -กาไหล่ -กาฬ -กาฬ- -กาฬจักร -กาฬปักษ์ -กาฬปักษี -กาฬพฤกษ์ -กาฬโรค -กาฬวาต -กาฬาวก -กาฮัง -กำ -ก่ำ -ก้ำ -กำกวม -กำกัด -กำกับ -ก้ำกึ่ง -กำกูน -กำเกรียก -ก้ำเกิน -กำเกียง -กำขี้ดีกว่ากำตด -กำคูน -ก่ำเคือ -กำจร -กำจัด -กำจาย -กำชับ -กำชับกำชา -กำชำ -กำโชก -กำซาบ -กำซำ -กำด้น -กำดัด -กำดาล -กำเดา -กำเดาะ -ก่ำต้น -กำตัด -กำตาก -กำถั่ว -กำทวน -กำธร -กำนล -กำนัด -กำนัน -กำนัล -กำเนิด -กำเนียจ -กำบด -กำบน -กำบัง -กำบัด -กำบิด -ก่ำบึ้ง -กำเบ้อ -กำโบล -กำปอ -กำปั่น -กำปั้น -กำผลา -กำพง -กำพด -กำพต -กำพร้า -กำพราก -กำพวด -กำพอง -กำพืด -กำพุด -กำพู -กำเพลิง -กำแพง -กำแพ้ง -กำแพงแก้ว -กำแพงขาว -กำแพงเขย่ง -กำแพงเจ็ดชั้น -กำแพงมีหูประตูมีช่อง -กำแพงมีหูประตูมีตา -กำแพงเศียร -กำภู -กำม -กำมพฤกษ์ -กำมลาศน์ -กำมเลศ -กำมะถัน -กำมะลอ -กำมะหยี่ -กำมะหริด -กำมังละการ -กำมังวิลิต -กำมัชพล -กำมา -กำมือ -กำยาน -กำยำ -กำรอ -กำราก -กำราบ -กำราล -กำรู -กำเริบ -กำเริบเสิบสาน -กำไร -กำลอง -กำลัง -กำลังกิน -กำลังกินกำลังนอน -กำลังใจ -กำลังช้างเผือก -กำลังช้างสาร -กำลังดี -กำลังเทียน -กำลังภายใน -กำลังม้า -กำลังวังชา -กำลังวัวเถลิง -กำลุง -กำลูน -กำเลา -กำเลาะ -กำไล -กำไลคู่ผี -กำสรด -กำสรวล -กำเสาะ -กำแสง -กำหนด -กำหนดการ -กำหนัด -กำหมัด -กำหราก -กำเหน็จ -กำแหง -กิก -กิ๊ก -กิ่ง -กิ่งก้อย -กิ้งก่า -กิ้งกือ -กิ้งกือเหล็ก -กิ้งโครง -กิ่งทองใบหยก -กิงบุรุษ -กิ่งหาย -กิจ -กิจ- -กิจกรรม -กิจการ -กิจจะ -กิจจะลักษณะ -กิจจา -กิจจานุกิจ -กิจวัตร -กิดาการ -กิดาหยัน -กิตติ -กิตติกรรมประกาศ -กิตติคุณ -กิตติมศักดิ์ -กิตติศัพท์ -กิน -กินกริบ -กินกัน -กินกำไร -กินเกลียว -กินเกลือกินกะปิ -กินแกลบกินรำ -กินขวา -กินขาด -กินแขก -กินความ -กินเครา -กินเจ -กินแจ -กินใจ -กินช้อน -กินชัน -กินซ้าย -กินดอก -กินดอกเบี้ย -กินดอง -กินด่าง -กินดาย -กินดิบ -กินตะเกียบ -กินตัว -กินตา -กินตำแหน่ง -กินโต๊ะ -กินแถว -กินทาง -กินที่ -กินที่ลับไขที่แจ้ง -กินนร -กินนรเก็บบัว -กินนรฟ้อนโอ่ -กินนรรำ -กินนรเลียบถ้ำ -กินนอกกินใน -กินนอน -กินน้ำ -กินน้ำตา -กินน้ำใต้ศอก -กินน้ำพริกถ้วยเดียว -กินน้ำไม่เผื่อแล้ง -กินน้ำเห็นปลิง -กินใน -กินบนเรือนขี้บนหลังคา -กินบวช -กินบ้านกินเมือง -กินบุญ -กินบุญเก่า -กินแบ่ง -กินปลิง -กินปลี -กินปูนร้อนท้อง -กินเปล่า -กินเปี้ยว -กินผัว -กินเพรา -กินมือ -กินเมีย -กินเมือง -กินไม่ลง -กินรังแตน -กินริน -กินรี -กินรูป -กินแรง -กินลม -กินลมกินแล้ง -กินล้างกินผลาญ -กินลึก -กินเวลา -กินเศษกินเลย -กินส้อม -กินสั่ง -กินสำรับ -กินสี่ถ้วย -กินเส้น -กินหน้า -กินหลัง -กินหาง -กินหู้ -กินเหมือนหมู อยู่เหมือนหมา -กินเหล็กกินไหล -กินแหนง -กินอยู่กับปาก อยากอยู่กับท้อง -กินอยู่พูวาย -กิ๊บ -กิมตึ๋ง -กิมิชาติ -กิมิวิทยา -กิโมโน -กิโยตีน -กิระ -กิริณี -กิรินท -กิริเนศวร -กิริยา -กิริยาสะท้อน -กิเลน -กิเลส -กิเลส- -กิเลสมาร -กิโล -กิโล- -กิโลกรัม -กิโลไซเกิล -กิโลมกะ -กิโลเมตร -กิโลลิตร -กิโลเฮิรตซ์ -กิ่ว -กิ๋ว -กิ๋วๆ -กี -กี่ -กี้ -กี๋ -กี่กระตุก -กีฏ- -กีฏวิทยา -กีด -กีดกัน -กีดกั้น -กีดขวาง -กีดหน้าขวางตา -กีตาร์ -กีบ -กีบแรด -กี่มากน้อย -กีรติ -กีฬา -กึก -กึกก้อง -กึกกัก -กึกกือ -กึกถอง -กึง -กึ่ง -กึ่งกลาง -กึงกัง -กึ่งราชการ -กึ๋น -กุ -กุก -กุ๊ก -กุกกัก -กุกๆ กักๆ -กุ๊กกิ๊ก -กุ๊กๆ กิ๊กๆ -กุกกุฏ- -กุกกุร- -กุกขี้หมู -กุกรรม -กุก่อง -กุกะ -กุกะมะเทิ่ง -กุกุธภัณฑ์ -กุ้ง -กุ้งดีด -กุ้งดีดขัน -กุ้งเต้น -กุ้งนาง -กุ้งฝอย -กุ้งฟัด -กุ้งมังกร -กุ้งไม้ -กุ้งยิง -กุ้งส้ม -กุ้งหนามใหญ่ -กุ้งหลวง -กุ้งเหลือง -กุ้งแห -กุ้งแห้ง -กุงอน -กุงาน -กุโงก -กุจี -กุญแจ -กุญแจกล -กุญแจประจำหลัก -กุญแจปากตาย -กุญแจผี -กุญแจมือ -กุญแจรหัส -กุญแจเลื่อน -กุญแจเสียง -กุญแจแหวน -กุญชร -กุฎ -กุฎา -กุฎาคาร -กุฎาธาร -กุฎี -กุฎุมพี -กุฏฐัง -กุฏไต -กุฏิ -กุณฑ์ -กุณฑล -กุณฑี -กุณโฑ -กุณาล -กุณิ -กุณี -กุด -กุดัง -กุดั่น -กุดา -กุทัณฑ์ -กุน -กุ๊น -กุนเชียง -กุนที -กุโนกามอ -กุบ -กุบกับ -กุม -กุ่ม -กุมฝอย -กุมภ- -กุมภ์ -กุมภการ -กุมภนิยา -กุมภัณฑ- -กุมภัณฑ์ -กุมภัณฑยักษ์ -กุมภา -กุมภาพันธ์ -กุมภิล -กุมภีล์ -กุมลัคน์ -กุมเหง -กุมาร -กุมารลฬิตา -กุมารา -กุมารี -กุมุท -กุย -กุ๊ย -กุ๋ย -กุ๋ยๆ -กุยช่าย -กุยเฮง -กุรร -กุระ -กุรุง -กุรุพินท์ -กุรุร -กุเรา -กุล -กุล- -กุลทูสก -กุลธิดา -กุลบดี -กุลบุตร -กุลสตรี -กุลสัมพันธ์ -กุลา -กุลาซ่อนผ้า -กุลาดำ -กุลาตีไม้ -กุลาตีอก -กุลาลาย -กุลาหล -กุลี -กุลีกุจอ -กุเลา -กุแล -กุเวร -กุศราช -กุศล -กุศลกรรมบถ -กุศโลบาย -กุสล -กุสุม -กุสุม- -กุสุมภ์ -กุสุมวิจิตร -กุสุมา -กุสุมาลย์ -กุสุมิตลดาเวลลิตา -กุหนี -กุหนุง -กุหร่า -กุหล่า -กุหลาบ -กุแหละ -กู -กู่ -กู้ -กู๊ก -กูฏ -กูฏา -กูฏาคาร -กูณฑ์ -กูด -กูน -กูบ -กูปรี -กู้ภัย -กู่ไม่กลับ -กู้ยืม -กูรม- -กูรมะ -กูรมาวตาร -กูรำ -กู้หน้า -เก -เก่ -เก๊ -เก๋ -เกก -เก๊ก -เกกมะเหรก -เก๊กหน้า -เก๊กฮวย -เก้กัง -เก้ๆ กังๆ -เก็ง -เก่ง -เก้ง -เก๋ง --เกงกอย -เก้งก้าง -เก่งกาจ -เก็งกำไร -เกงเขง -เก๋งเคง -เก่งแต่ปาก -เก๋งพั้ง -เก็จ -เกจิอาจารย์ -เกชา -เกณฑ์ -เกณฑ์ตะพัด -เกณฑ์เมืองรั้ง -เกณฑ์หัด -เกด -เก็ด -เกตุ -เกตุ- -เกตุมาลา -เกน -เกนๆ -เก่น -เก็บ -เก็บเกี่ยว -เก็บข้าว -เก็บข้าวตก -เก็บความ -เก็บงำ -เก็บตก -เก็บตัว -เก็บเนื้อเก็บตัว -เก็บเบี้ยใต้ถุนร้าน -เก็บผม -เก็บไร -เก็บเล็กผสมน้อย -เก็บเล็ม -เก็บเล่ม -เก็บสี -เก็บหน้าผ้า -เก็บหอมรอมริบ -เกม -เกย -เกยลา -เกยแห้ง -เกยูร -เกรง -เกร็ง -เกรงขาม -เกรงใจ -เกรงอกเกรงใจ -เกร็ด -เกรน -เกร่อ -เกรอะ -เกรอะกรัง -เกราะ -เกริก -เกริน -เกริ่น -เกรียก -เกรียง -เกรียงไกร -เกรียด -เกรียน -เกรียบ -เกรียม -เกรียมกรม -เกรียว -เกรี้ยว -เกรี้ยวๆ -เกรี้ยวกราด -เกรียวกราว -เกเร -เกเรเกตุง -เกเรเกเส -เกล็ด -เกล็ดกระดี่ -เกล็ดกระโห้ -เกล็ดข้าวเม่า -เกล็ดถี่ -เกล็ดนาค -เกล็ดปลาช่อน -เกล็ดหอย -เกลศ -เกลอ -เกลา -เกล้า -เกล้ากระผม -เกล้ากระหม่อม -เกลาะ -เกลี่ย -เกลี้ย -เกลี้ยกล่อม -เกลี่ยไกล่ -เกลียง -เกลี้ยง -เกลี้ยงเกลา -เกลียด -เกลียดตัวกินไข่ -เกลียดปลาไหลกินน้ำแกง -เกลียว -เกลียวกลม -เกลียวข้าง -เกลียวคอ -เกลี่ยวดำ -เกลียวหวาน -เกลือ -เกลื้อ -เกลือก -เกลือกกลั้ว -เกลือกกลิ้ง -เกลือกรด -เกลือแกง -เกลือเงิน -เกลือจิ้มเกลือ -เกลือจืด -เกลือด่าง -เกลือด่างคลี -เกลื่อน -เกลื้อน -เกลื่อนกล่น -เกลื่อนกลาด -เกลื่อนความ -เกลือเบสิก -เกลือปรกติ -เกลือเป็นหนอน -เกลือฟอง -เกลือยูเรต -เกลือสมุทร -เกลือสินเธาว์ -เกไล -เกวัฏ -เกวียน -เกวียนหลวง -เกศ -เกศ- -เกศธาตุ -เกศพ -เกศว -เกศา -เกศากันต์ -เกศินี -เกศี -เกษตร -เกษตรกร -เกษตรกรรม -เกษตรและสหกรณ์ -เกษตรศาสตร์ -เกษม -เกษมศานต์ -เกษมสันต์ -เกษียณ -เกษียณอายุ -เกษียน -เกษียร -เกษียรสมุทร -เกส -เกสร -เกสรทั้งห้า -เกสรี -เกสา -เกสี -เก้อ -เกอิชา -เกะ -เกะกะ -เกา -เก่า -เก้า -เก๋า -เกาต์ -เกาทัณฑ์ -เกาทุมพร -เกาบิน -เกาบิล -เกามาร -เกาลัด -เกาลัดจีน -เกาลิน -เกาไศย -เกาหลี -เกาเหลา -เกาเหลียง -เก้าอี้ -เกาะ -เกาะกิน -เกาะแกะ -เกิง -เกิ้ง -เกิด -เกิดสูรย์ -เกิน -เกินการ -เกินกิน -เกินคน -เกินงาม -เกินดี -เกินตัว -เกินไป -เกินเลย -เกินหน้า -เกิบ -เกีย -เกียกกาย -เกียง -เกี่ยง -เกี๋ยง -เกี่ยงงอน -เกี่ยงตาย -เกียจ -เกียจกล -เกียจคร้าน -เกียด -เกียดกัน -เกียน -เกี้ยมไฉ่ -เกี้ยมอี๋ -เกียร์ -เกียรติ -เกียรติ- -เกียรติ์ -เกียรติคุณ -เกียรตินิยม -เกียรติประวัติ -เกียรติภูมิ -เกียรติยศ -เกียรติศักดิ์ -เกี่ยว -เกี้ยว -เกี๊ยว -เกี่ยวก้อย -เกี้ยวเกไล -เกี่ยวข้อง -เกี่ยวข้าว -เกี้ยวคอไก่ -เกี่ยวดอง -เกี่ยวดองหนองยุ่ง -เกี้ยวนวม -เกี่ยวเบ็ด -เกี้ยวประทีป -เกี่ยวแฝกมุงป่า -เกี่ยวพัน -เกี้ยวพาน -เกี้ยวพาราสี -เกี่ยวโยง -เกี๊ยะ -เกื้อ -เกือก -เกือกม้า -เกื้อกูล -เกือบ -เกือบไป -แก -แก่ -แก้ -แก่กล้า -แก้เกี้ยว -แก้ขัด -แก้ไข -แก้แค้น -แกง -แก่ง -แก้ง -แก๊ง -แก้งก้น -แกงขม -แกงจืด -แกงได -แกงแนง -แกงบวด -แกงเผ็ด -แก่งแย่ง -แกงร้อน -แกงส้ม -แก่ดีกรี -แก่แดด -แกโดลิเนียม -แก้ตก -แก่ตัว -แก้ตัว -แก้ต่าง -แก้ที -แก้โทษ -แกน -แก่น -แก่นแก้ว -แก่นสาร -แกนะ -แกแน -แก้บน -แก่บ้าน -แก้บาป -แก๊ป -แก้เผ็ด -แก้ฝัน -แก่ไฟ -แกม -แก้ม -แก้มช้ำ -แก้มแดง -แกมมา -แก้มแหม่ม -แก้มือ -แกรก -แกร่ง -แกร็น -แกรนิต -แกรไฟต์ -แกร่ว -แกระ -แก่แรด -แกล -แกล่ -แกล้ง -แกล้งเกลา -แกลน -แกลบ -แกลบหนู -แกลบหูหนู -แกล้ม -แกลลอน -แกลเลียม -แกล้ว -แกละ -แก้ลำ -แกแล -แกว -แก้ว -แก้วก๊อ -แก้วกุ้ง -แก้วแกลบ -แกว่ง -แกว่งไกว -แกว่งตีนหาเสี้ยน -แก้วชิงดวง -แก้วตา -แกว่น -แก้วผลึก -แก้วมรกต -แก้ววิเชียร -แก้วสารพัดนึก -แก้วสีไม้ไผ่ -แก้วหิน -แก้วหู -แก่วัด -แก๊ส -แก๊สไข่เน่า -แก๊สเฉื่อย -แก๊สน้ำตา -แก้หน้า -แกะ -แกะดำ -แกะรอย -แกะสะเก็ด -โก่ -โก้ -โก๋ -โกก -โกกเกก -โกกนุท -โกกิล- -โกกิลา -โกโก้ -โกง -โก่ง -โกงกาง -โก้งเก้ง -โกงโก้ -โก้งโค้ง -โกเชาว์ -โกญจ- -โกญจน -โกญจนาท -โกญจา -โกฏิ -โกฐ -โกฐกระดูก -โกฐกะกลิ้ง -โกฐกักกรา -โกฐก้านพร้าว -โกฐเขมา -โกฐจุฬาลัมพา -โกฐจุฬาลำพา -โกฐชฎามังษี -โกฐชฎามังสี -โกฐเชียง -โกฐน้ำเต้า -โกฐพุงปลา -โกฐสอ -โกฐหอม -โกฐหัวบัว -โกฐาส -โกณ -โกณก -โกดัง -โกตไต -โกทัณฑ์ -โกน -โก่น -โก๋น -โกปินำ -โกมล -โกมุท -โกเมน -โกเมศ -โกย -โกยท้อง -โกร้ -โกรก -โกรกกราก -โกรกไกร -โกรกธาร -โกรกหวัด -โกรง -โกร่ง -โกร่งกร่าง -โกรงเกรง -โกร๋งเกร๋ง -โกรญจ -โกรด -โกรต๋น -โกรธ -โกรธขึ้ง -โกรธา -โกร๋น -โกร๋นเกร๋น -โกรม -โกรมธาตุ -โกรย -โกรศ -โกโรโกเต -โกโรโกโรก -โกโรโกโส -โกลง -โกลน -โกลาหล -โกไล -โกวิท -โกวิฬาร -โกศ -โกศล -โกษ -โกษม -โกษย -โกษีย์ -โกส -โกสน -โกสัช -โกสินทร์ -โกสีย์ -โกสุม -โกไสย -โกหก -โกหวา -ใกล้ -ใกล้เกลือกินด่าง -ไก -ไก่ -ไก้ -ไก๊ -ไก๋ -ไก่กอม -ไก่แก่แม่ปลาช่อน -ไก่แก้ว -ไก่เขี่ย -ไก่ชน -ไก๋แดง -ไก่เตี้ย -ไก่นา -ไก่ป่า -ไกพัล -ไก่ฟ้า -ไก่ฟ้าพญาลอ -ไกร -ไกรพ -ไกรลาส -ไกรศร -ไกรศรี -ไกรสร -ไกรสรี -ไกรสิทธิ -ไก่รองบ่อน -ไกล -ไกล่ -ไกล่เกลี่ย -ไกลปืนเที่ยง -ไกลาส -ไกว -ไกวัล -ไก่สามอย่าง -ไก่เห็นตีนงู งูเห็นนมไก่ -ไก่โห่ -ไก่ไห้ -ไก่อ่อน -ข -ขง -ขงจื๊อ -ขจร -ขจรจบ -ขจอก -ขจัด -ขจัดขจาย -ขจ่าง -ขจาย -ขจาว -ขจิต -ขจิริด -ขจี -ขจุย -ขเจา -ขณะ -ขด -ขดถวาย -ขดาน -ขตอย -ขทิง -ขทึง -ขน -ข้น -ข้นแค้น -ขนง -ขนงเนื้อ -ขนด -ขนทรายเข้าวัด -ขนน -ขนบ -ขนบธรรมเนียม -ขนบประเพณี -ขนพอง -ขนเพชร -ขนม -ขนมครก -ขนมจีน -ขนมทราย -ขนมผสมน้ำยา -ขนมผักกาด -ขนมเส้น -ขนมหัวผักกาด -ขนแมว -ขนลุก -ขนลุกขนพอง -ขนส่ง -ขนสัตว์ -ขนหน้าแข้งไม่ร่วง -ขนหนู -ขนหยอง -ขนอง -ขนอน -ขนอบ -ขนอุย -ขนัด -ขนัน -ขนาก -ขนาง -ขนาด -ขนาน -ขนานน้ำ -ขนานลี่ -ขนาบ -ขนาย -ขนำ -ขนิษฐ -ขนิษฐา -ขนุน -ขนุนนก -ขนุนป่า -ขนุนสำปะลอ -ขบ -ขบขัน -ขบเขี้ยวเคี้ยวฟัน -ขบคิด -ขบฉัน -ขบถ -ขบปัญหา -ขบเผาะ -ขบไม่แตก -ขบวน -ขบวนการ -ขบวร -ขบูร -ขม -ข่ม -ข่มขวัญ -ข่มขี่ -ขมขื่น -ข่มขืน -ข่มขืนกระทำชำเรา -ข่มขืนใจ -ข่มขู่ -ข่มเขาโคขืนให้กินหญ้า -ขมงโกรย -ข่มท้อง -ข่มนาม -ขมเป็นยา -ขมม -ขมวด -ขมวดยา -ขมวน -ข่มหมู -ขมหิน -ข่มเหง -ข่มเหงคะเนงร้าย -ขมอง -ขม่อม -ขม่อมบาง -ขมอย -ขมัง -ขมับ -ขมา -ขม้ำ -ขมิ้น -ขมิ้นกับปูน -ขมิ้นขาว -ขมิ้นขึ้น -ขมิ้นเครือ -ขมิ้นชัน -ขมิ้นนาง -ขมิ้นลิง -ขมิ้นหัวขึ้น -ขมิ้นอ้อย -ขมิบ -ขมีขมัน -ขมึง -ขมึงทึง -ขมุ -ขมุกขมัว -ขมุดขมิด -ขมุบ -ขมุบขมิบ -ขมุม -ขโมย -ขย- -ขยด -ขยม -ขย่ม -ขยล -ขยอก -ขยอง -ขย่อน -ขย้อน -ขยะ -ขยะแขยง -ขยัก -ขยักขย่อน -ขยักขย้อน -ขยัน -ขยั้น -ขยับ -ขยับขยาย -ขยับเขยื้อน -ขยาด -ขยาบ -ขยาย -ขยายขี้เท่อ -ขยำ -ขย้ำ -ขยิก -ขยิบ -ขยิ่ม -ขยี้ -ขยี่ขยัน -ขยุกขยิก -ขยุกขยุย -ขยุบ -ขยุบขยิบ -ขยุม -ขยุ้ม -ขยุ้มตีนหมา -ขยุย -ขรม -ขรรค- -ขรรค์ -ขรัว -ขรัวยาย -ขริบ -ขรี -ขรึม -ขรุขระ -ขล้ง -ขลบ -ขลม -ขลวน -ขล้อเงาะ -ขล้อเทียน -ขลัง -ขลับ -ขลา -ขลาด -ขลาย -ขลิบ -ขลึง -ขลุก -ขลุกขลัก -ขลุกขลิก -ขลุกขลุ่ย -ขลุบ -ขลุม -ขลุมประเจียด -ขลุ่ย -ขลู -ขลู่ -ขวง -ข่วง -ขวด -ขวดตีนช้าง -ขวดโหล -ขวน -ข่วน -ขวนขวาย -ขวบ -ขวย -ขวยเขิน -ขวยใจ -ขวะไขว่เขวี่ย -ขวักไขว่ -ขวัญ -ขวัญเกี่ยง -ขวัญข้าว -ขวัญแขวน -ขวัญใจ -ขวัญดี -ขวัญตา -ขวัญบ่า -ขวัญบิน -ขวัญเมือง -ขวัญหนี -ขวัญหนีดีฝ่อ -ขวัญหาย -ขวัญอ่อน -ขวัด -ขวัดขวิด -ขวัดแคว้ง -ขวั้น -ขวับ -ขวับเขวียว -ขวา -ขวาก -ขวากหนาม -ขวาง -ขว้าง -ขว้างกา -ขว้างข้าวเม่า -ขว้างค้อน -ขว้างงูไม่พ้นคอ -ขว้างจักร -ขวางเชิง -ขวางๆ รีๆ -ขวางโลก -ขวาด -ขวาน -ขวานผ่าซาก -ขวานฟ้า -ขวายขวน -ขวาว -ขว้าว -ขวิด -ขษณะ -ขษัย -ขษีณาศรพ -ขษีร -ขอ -ข่อ -ข้อ -ขอก -ข้อกฎหมาย -ข้อกติกา -ข้อกำหนด -ขอแกว -ข้อเขียน -ข้อไข -ข้อความ -ข้อคัดย่อ -ขอคำน้อย -ข้อคิด -ข้อคิดเห็น -ของ -ข้อง -ของกลาง -ของกอง -ของกำนัล -ของกิน -ของเก่า -ของขบเคี้ยว -ของขลัง -ของขวัญ -ข้องขัด -ของแข็ง -ของค้าง -ของคาว -ของเค็ม -ของเคียง -ของโจร -ข้องใจ -ของชำ -ของใช้ -ของดี -ของเถื่อน -ของนอก -ของร้อน -ของลับ -ของเล่น -ของเลื่อน -ของเลื่อนเตือนขันหมาก -ของวัด -ของว่าง -ข้องแวะ -ของสงฆ์ -ของสงวน -ของสด -ของสดของคาว -ของสดคาว -ของหลวง -ของหวาน -ของหายตะพายบาป -ของเหลว -ของแห้ง -ของไหล -ของไหว้ -ของ้อ -ของ้าว -ขอฉาย -ขอช้าง -ขอด -ขอดค่อน -ขอเดชะ -ขอตัว -ขอทอง -ขอทาน -ขอที -ข้อเท็จจริง -ขอโทษ -ขอน -ข่อน -ข้อน -ขอนดอก -ขอนสัก -ขอนิสัย -ขอบ -ขอบข่าย -ขอบเขต -ขอบคุณ -ขอบใจ -ขอบทาง -ขอบพระคุณ -ขอบไร -ขอบเหล็ก -ข้อบังคับ -ข้อบัญญัติ -ขอประทาน -ขอประทานโทษ -ข้อปลีกย่อย -ขอไปที -ขอเฝ้า -ขอพระราชทาน -ข้อพับ -ขอม -ข้อมือขาว -ข้อมูล -ข้อแม้ -ข่อย -ข้อย -ข่อยน้ำ -ข่อยหนาม -ข่อยหยอง -ขอยืม -ขอร้อง -ขอรับ -ขอรับกระผม -ขอรับผม -ข้อราชการ -ขอแรง -ข้อศอก -ข้อสอบ -ขอสับ -ข้อเสือ -ข้อหา -ข้อใหญ่ใจความ -ขออภัย -ข้ออ้อย -ข้ออ้าง -ขะข่ำ -ขะแข่น -ขะแข้น -ขะแจะ -ขะแถก -ขะนาน -ขะเน็ด -ขะมอมขะแมม -ขะมักเขม้น -ขะมุกขะมอม -ขะแมซอ -ขะแมธม -ขะยิก -ขะยุก -ขะเย้อแขย่ง -ขะแยะ -ขัค -ขัง -ขังข้อ -ขังขอก -ขังปล้อง -ขังหน่วย -ขัช -ขัชก -ขัณฑ- -ขัณฑสกร -ขัณฑสีมา -ขัด -ขัดเกลา -ขัดขวาง -ขัดข้อง -ขัดขืน -ขัดเขมร -ขัดเขิน -ขัดแข็ง -ขัดคอ -ขัดเคือง -ขัดแค้น -ขัดจังหวะ -ขัดใจ -ขัดดอก -ขัดตา -ขัดตาทัพ -ขัดตำนาน -ขัดแตะ -ขัดบท -ขัดเบา -ขัดมอน -ขัดมอนตัวผู้ -ขัดมอนหลวง -ขัดยอก -ขัดแย้ง -ขัดลาภ -ขัดสน -ขัดสมาธิ -ขัดหนัก -ขัดห้าง -ขัดหู -ขัตติย- -ขัตติยมานะ -ขัน -ขั้น -ขันกว้าน -ขันแข็ง -ขันชะเนาะ -ขันเชิง -ขันต่อ -ขันติ -ขันตี -ขันโตก -ขันทองพยาบาท -ขันที -ขันธ์ -ขันธาวาร -ขันน้ำพานรอง -ขันลงหิน -ขันสมอ -ขันสาคร -ขันสู้ -ขันหมาก -ขันเหม -ขันอาสา -ขับ -ขับขัน -ขับขี่ -ขับเคลื่อน -ขับเคี่ยว -ขับซอ -ขับถ่าย -ขับพล -ขับไม้ -ขับไม้บัณเฑาะว์ -ขับร้อง -ขัย -ขัว -ขั้ว -ขั้วกระจก -ขั้วบวก -ขั้วแม่เหล็ก -ขั้วแม่เหล็กโลก -ขั้วลบ -ขั้วโลก -ขา -ข่า -ข้า -ขาก -ขากบ -ขากรรไตร -ขาก๊วย -ขากอม -ขาเกวียน -ข้าเก่าเต่าเลี้ยง -ขาไก่ -ขาเขียด -ขาง -ข่าง -ข้าง -ข้างๆ -ข้างกบ -ข้างกระดาน -ข้างขึ้น -ข้างควาย -ข้างๆ คูๆ -ข้างเงิน -ข้างจัน -ขางดัง -ขางแดง -ข้างตก -ข้างตะเภา -ข้างตีน -ข้างแรม -ข้างลาย -ข้างหัวนอน -ข้างออก -ขาจร -ข้าเจ้า -ขาณุ -ขาด -ขาดกัน -ขาดคราว -ขาดคอช้าง -ขาดค่า -ขาดคำ -ขาดแคลน -ขาดใจ -ขาดตกบกพร่อง -ขาดตลาด -ขาดตอน -ขาดตัว -ขาดทุน -ขาดปาก -ขาดมือ -ขาดเม็ด -ขาดลอย -ขาดหัวช้าง -ขาดเหลือ -ขาดอายุ -ข่าแดง -ข่าต้น -ขาทนียะ -ขาทราย -ข้าไท -ขาน -ขานกยาง -ขานไข -ขานนาค -ขานรหัส -ข้านอกเจ้า ข้าวนอกหม้อ -ข้าน้อย -ขานาง -ขาบ -ขาประจำ -ข้าแผ่นดิน -ข้าเฝ้า -ข้าพเจ้า -ข้าพระ -ข้าพระพุทธเจ้า -ขาพับ -ขาม -ข่าม -ข้าม -ข้ามๆ -ข้ามน้ำข้ามทะเล -ข้ามน้ำข้ามท่า -ข้ามสมุทร -ข้ามหน้า -ข้ามหน้าข้ามตา -ข้ามหัว -ขาม้า -ขาย -ข่าย -ขายขาด -ข่ายงาน -ขายชาติ -ขายชื่อ -ขายตัว -ขายตามคำพรรณนา -ขายตามตัวอย่าง -ขายทอดตลาด -ขายบ้านขายเมือง -ขายปลีก -ขายผ้าเอาหน้ารอด -ขายเผื่อชอบ -ขายฝาก -ขายส่ง -ขายหน้า -ขายหน้าขายตา -ขายหน้าวันละห้าเบี้ย -ขายหู -ขายเหมา -ข้าราชการ -ขาล -ขาว -ข่าว -ข้าว -ข่าวกรอง -ข้าวกรู -ข้าวกล้อง -ข้าวกล้า -ข้าวเกรียบ -ข้าวเกรียบปากหม้อ -ข้าวเกรียบอ่อน -ข้าวเก่า -ข้าวแกง -ข้าวโกบ -ข้าวขวัญ -ข้าวของ -ข้าวข้า -ข้าวแขก -ข่าวคราว -ข้าวควบ -ข้าวคำ -ข้าวแคบ -ข้าวงัน -ข้าวจี่ -ขาวจีบ -ข้าวเจ้า -ข้าวแจก -ข้าวแช่ -ข้าวซ้อม -ข้าวซอย -ข้าวแดกงา -ข้าวแดงแกงร้อน -ข้าวต้ม -ข้าวต้มน้ำวุ้น -ข้าวต้มปัด -ข้าวตอก -ข้าวตอกตั้ง -ข้าวตอกแตก -ข้าวตัง -ข้าวตาก -ข้าวตู -ข้าวแตก -ข้าวแตน -ข้าวทิพย์ -ข้าวนก -ข้าวนึ่ง -ข้าวบาตร -ข้าวบิณฑ์ -ข้าวบุหรี่ -ข้าวเบา -ข้าวเบือ -ข้าวประดับดิน -ข้าวปลูก -ข้าวปัด -ข้าวป่า -ข้าวปาด -ข้าวปุ้น -ข้าวเปรต -ข้าวเปลือก -ข้าวเปียก -ข้าวผอก -ข้าวผอกกระบอกน้ำ -ข้าวพระ -ขาวพวง -ข้าวพอง -ข่าวพาดหัว -ข้าวโพด -ข้าวฟ่าง -ข้าวเภา -ข้าวมัน -ขาวม้า -ข้าวมิ่น -ข้าวเม่า -ข้าวเม่าทอด -ข่าวยกเมฆ -ข้าวยากหมากแพง -ข้าวยาคู -ข้าวยำ -ข้าวเย็นใต้ -ข้าวเย็นเหนือ -ข้าวละมาน -ข่าวล่า -ข่าวสด -ข้าวสวย -ข้าวสาก -ข่าวสาร -ข้าวสาร -ข้าวสุก -ข้าวเส้น -ข้าวหนัก -ข้าวหมก -ข้าวหมาก -ข้าวหลาม -ข้าวหลามตัด -ข้าวหัวโขน -ข้าวหางช้าง -ข้าวเหนียว -ข้าวเหนียวดำ -ข้าวเหลือเกลืออิ่ม -ขาวใหญ่ -ข้าวใหม่ -ข้าวใหม่น้อย -ข้าวใหม่ปลามัน -ข้าวใหม่ใหญ่ -ข้าวอังกุลี -ข้าวฮาง -ข้าศึก -ขาหมา -ขาหยั่ง -ข้าหลวง -ข้าหลวงเดิม -ข้าหลวงน้อย -ข้าหลวงหลังลาย -ขาอ่อน -ขำ -ข่ำเขียว -ขิก -ขิกๆ -ขิง -ขิ่ง -ขิงก็รา ข่าก็แรง -ขิงแกลง -ขิงแครง -ขิงแห้ง -ขิด -ขิปสัทโท -ขิม -ขี่ -ขี้ -ขี้กบ -ขี้กระทาเกลือ -ขี้ก้อนใหญ่ให้เด็กเห็น -ขี้กะโล้โท้ -ขี้กา -ขี้ก้าง -ขี้กาดง -ขี้กาแดง -ขี้กาเหลี่ยม -ขี้เกลือ -ขี้ขม -ขี้ขวง -ขี้ข้า -ขี้ขุย -ขี้เข็บ -ขี้ครอก -ขี้ครั่ง -ขี้ควาย -ขี้คุก -ขี้เค้า -ขี้โครง -ขี้จาบ -ขี่ช้างจับตั๊กแตน -ขี้ซ้าย -ขี้เซา -ขี้ไซ้ -ขีณะ -ขีณาสพ -ขีด -ขีดขั้น -ขีดคร่อม -ขีดคั่น -ขีดเส้นตาย -ขี้เดือด -ขี้แดด -ขี้ตด -ขี้ตังนี -ขี้ติ้ว -ขี้ตืด -ขี้เต่า -ขี้แต้ -ขี้ไต้ -ขี้ถัง -ขี้เถ้า -ขี้ไถ -ขี้ทา -ขี้ทูด -ขี้เท่อ -ขี้เทา -ขี้เทือก -ขี้นก -ขีปนาวุธ -ขีปนาวุธนำวิถี -ขี้ปะติ๋ว -ขี้ปาก -ขี้เป้ -ขี้เป็ด -ขี้ผง -ขี้ผึ้ง -ขี้ฝิ่น -ขี้แพ้ชวนตี -ขี้มอด -ขี้ม้า -ขี่ม้าตีคลี -ขี่ม้าเลียบค่าย -ขี่ม้าส่งเมือง -ขี้มิ่น -ขี้มูก -ขี้เมฆ -ขี้แมลงวัน -ขี้แมว -ขี้ไม่ให้หมากิน -ขี้ยอก -ขี้ยา -ขี้แย -ขีร -ขี้รังแค -ขี้ราดโทษล่อง -ขี้ริ้ว -ขี้เรื้อน -ขี้เรื้อนกวาง -ขี้แรด -ขี้แรดล้อมปรวด -ขี้ลม -ขี้ลอก -ขี้ลีบ -ขี้เล็บ -ขี้โล้ -ขี้สูด -ขี้หดตดหาย -ขี้หนอน -ขี้หน้า -ขี้หนู -ขี้หมา -ขี้เหร่ -ขี้เหล็ก -ขี้ใหม่หมาหอม -ขี้อ้น -ขี้อ้าย -ขึง -ขึ้ง -ขึ้งโกรธ -ขึงขัง -ขึ้งเคียด -ขึงตา -ขึงพืด -ขึงอูด -ขึ้น -ขึ้นเขียง -ขึ้นครู -ขึ้นคาน -ขึ้นใจ -ขึ้นฉ่าย -ขึ้นชื่อ -ขึ้นชื่อว่า -ขึ้นซัง -ขึ้นต้นไม้สุดยอด -ขึ้นปาก -ขึ้นพลับพลา -ขึ้นไม้ขึ้นมือ -ขึ้นระวาง -ขึ้นร้าน -ขึ้นสาย -ขึ้นเสียง -ขึ้นหน้าขึ้นตา -ขึ้นหม้อ -ขึ้นหา -ขึ้นเหนือล่องใต้ -ขืน -ขื่น -ขื่นขม -ขืนใจ -ขื่อ -ขื่อกะละปังหา -ขื่อขวาง -ขื่อคัด -ขื่อจมูก -ขื่อเท่าต่อ -ขื่อผี -ขื่อมุก -ขื่อหมู่ -ขุก -ขุด -ขุดคุ้ย -ขุดด้วยปากถากด้วยตา -ขุดดินกินหญ้า -ขุดบ่อล่อปลา -ขุน -ขุ่น -ขุ่นข้องหมองใจ -ขุ่นเคือง -ขุ่นแค้น -ขุ่นใจ -ขุนทอง -ขุนนาง -ขุนนางใช่พ่อแม่ หินแง่ใช่ตายาย -ขุนน้ำ -ขุนบาล -ขุนแผน -ขุนพล -ขุนพัฒน์ -ขุนเพ็ด -ขุ่นมัว -ขุนไม่ขึ้น -ขุนศาล -ขุนศึก -ขุ่นหมอง -ขุนหมื่น -ขุนหลวง -ขุม -ขุย -ขุยไผ่ -ขุยอินทรีย์ -ขู -ขู่ -ขู่กรรโชก -ขู่ขวัญ -ขู่เข็ญ -ขูด -ขูดรีด -ขูดเลือด -ขูดเลือดขูดเนื้อ -เข -เข้ -เขก -เข็ง -เข่ง -เขจร -เข็ญ -เข็ญใจ -เข็ด -เข็ดข้อ -เข็ดข้อเข็ดลำ -เข็ดเขี้ยว -เข็ดฟัน -เขดา -เขต -เขตแดน -เขตเลือกตั้ง -เขตอำนาจศาล -เขน -เข็น -เข่น -เข่นเขี้ยว -เข็นครกขึ้นภูเขา -เข่นฆ่า -เขนง -เขนงนายพราน -เขน็ด -เขนย -เขบ็จขบวน -เขบ็ต -เขม- -เข็ม -เข้ม -เข็มกลัด -เข้มข้น -เข็มขัด -เข้มขาบ -เข้มขาบไหม -เข้มแข็ง -เข็มควัก -เขม็ง -เข้มงวด -เข็มซ่อนปลาย -เขม็ดแขม่ -เข็มทิศ -เขม่น -เขม้น -เขม้นขะมัก -เขมร -เขมรไทรโยค -เขมรพวง -เขมรราชบุรี -เขมรเหลือง -เขมรใหญ่ -เขมา -เขม่า -เขมาโกรย -เขม่าซาง -เขมือบ -เขย -เขยก -เขย่ง -เขย่งเก็งกอย -เขยตาย -เขย้อแขย่ง -เขยอะขยะ -เขย่า -เขยิน -เขยิบ -เขยิบขยาบ -เขยิบฐานะ -เขยียวขยอน -เขยื้อน -เขรอะ -เขลง -เขลอะ -เขละ -เขลา -เขลาะ -เขว -เขษตร -เขษม -เขษียร -เขฬะ -เขะขะ -เขา -เข่า -เข้า -เข้ากระโจม -เข้ากระดูกดำ -เขากวาง -เข้าเกณฑ์ -เข้าเกีย -เขาแกะ -เข้าข้อ -เข้าขา -เข้าข้าง -เข้าคอ -เข้าคิว -เข้าคู่ -เข้าเครื่อง -เข้าเค้า -เข้าไคล -เข้าเงียบ -เข้าแง่ -เข้าเจ้า -เข้าเจ้าเข้านาย -เข้าใจ -เข้าชื่อ -เข้าฌาน -เข้าด้ายเข้าเข็ม -เข้าเดือย -เข้าตรีทูต -เข้าตอง -เข้าตัว -เข้าตาจน -เข้าตามตรอกออกตามประตู -เข้าตาร้าย -เข้าตำรา -เข้าตู้ -เข้าไต้เข้าไฟ -เข้าถ้ำ -เข้าถึง -เข้าเถื่อนอย่าลืมพร้า -เข้าทรง -เข้าท่า -เข้าที -เข้าที่ -เข้าทุน -เข้านอกออกใน -เข้าเนื้อ -เข้าแบบ -เข้าแบบเข้าแผน -เข้าปก -เข้าปากไม้ -เข้าปิ้ง -เข้าปีก -เขาเปล้า -เข้าไป -เข้าผี -เข้าผู้เข้าคน -เข้าฝัก -เข้าฝัน -เข้าเฝ้า -เข้าเฝือก -เข้าพกเข้าห่อ -เข้าพรรษา -เข้าพระเข้านาง -เข้าพุง -เขามอ -เข้าม่าน -เข้าเมืองตาหลิ่วต้องหลิ่วตาตาม -เข้าไม้ -เข้ายา -เข้ารกเข้าพง -เข้ารหัส -เข้าร่องเข้ารอย -เข้ารอบ -เข้ารอย -เข้าร้าย -เข้ารีต -เข้ารูป -เข้ารูปเข้ารอย -เข่าลา -เข้าลิ้น -เข้าเล่ม -เข้าเลือด -เข้าเลือดเข้าเนื้อ -เข้าโลง -เข้าวัดเข้าวา -เข้าว่า -เข้าเวร -เข้าแว่น -เข้าเศียร -เข้าสมาธิ -เข้าสุหนัต -เข้าใส่ -เข้าไส้ -เข้าหน้า -เข้าหม้อ -เข้าหมิ้น -เข้าหลัก -เข้าหา -เข้าหุ้น -เข้าหู -เข้าหูซ้ายทะลุหูขวา -เข้าให้ -เข้าไหนเข้าได้ -เขาอ่อน -เข่าอ่อน -เขิง -เขิน -เขิบ -เขี่ย -เขียง -เขียงเท้า -เขียงพระนางอี่ -เขียงพร้า -เขียด -เขียดตะปาด -เขียน -เขี่ยน -เขียนด้วยมือลบด้วยตีน -เขียนทอง -เขียนไทย -เขียนเสือให้วัวกลัว -เขียม -เขียว -เขี้ยว -เขี้ยวกระแต -เขี้ยวแก้ว -เขียวไข่กา -เขี้ยวงู -เขี้ยวตะขาบ -เขี้ยวเนื้อ -เขียวพระอินทร์ -เขี้ยวเล็บ -เขียวเสวย -เขี้ยวหนุมาน -เขี้ยวหมา -เขียวหวาน -เขียวหางไหม้ -เขียะ -เขือ -เขือง -เขื่อง -เขื่อน -เขื่อนเพชร -เขือม -แข -แข้ -แขก -แขกเต้า -แขกเต้าเข้ารัง -แขกเมือง -แข็ง -แข่ง -แข้ง -แข็งกร้าว -แข็งกล้า -แข็งแกร่ง -แข้งไก่ -แข็งข้อ -แข็งขัน -แข่งขัน -แข็งใจ -แข็งตัว -แข็งมือ -แข็งเมือง -แข็งแรง -แข้งสิงห์ -แขน -แข่น -แข้น -แขนขวา -แขนคู้ -แขนง -แขนซ้ายแขนขวา -แขนทุกข์ -แขนนาง -แขนพับ -แขนะ -แขม -แขม็บ -แขม่ว -แขย็กๆ -แขยง -แขย่ง -แขยงแขงขน -แขยงหนู -แขละ -แขวก -แขวง -แขวน -แขวนคอ -แขวนนวม -แขวนลอย -แขวะ -แขสร์ -โข -โขก -โขกสับ -โขง -โข่ง -โข่งทะเล -โขด -โขดง -โขน -โขนง -โขม -โขม- -โขมง -โขมด -โขมดยา -โขยก -โขยกเขยก -โขยง -โขย่ง -โขยด -โขยม -โขลก -โขลกๆ -โขลง -โขลน -โขลนทวาร -โขษม -ไข -ไข่ -ไข้ -ไขกระดูก -ไข้กาฬ -ไข้กาฬนกนางแอ่น -ไข้กาฬหลังแอ่น -ไข้กำเดา -ไข่ไก่ -ไข่ขวัญ -ไขข้อ -ไข่ขาง -ไข่ขาว -ไข่ข้าว -ไขควง -ไข้ความร้อน -ไข่เค็ม -ไข่จระเข้ -ไข้จับสั่น -ไข่จิ้งจก -ไข่จิ้งหรีด -ไข่เจียว -ไข้ใจ -ไข่ญี่ปุ่น -ไข่ดัน -ไข่ดันหมู -ไข่ดาว -ไข่แดง -ไข้แดด -ไข่ตายโคม -ไข่ตุ๋น -ไข่เต่า -ไข้ทรพิษ -ไข้ทับระดู -ไข่นกกระสา -ไขน้ำ -ไข่น้ำ -ไข่น้ำค้าง -ไข่เน่า -ไข่ในหิน -ไข่ปลา -ไข้ปอดบวม -ไข้ป่า -ไขพระวิสูตร -ไข่พอก -ไข้พิษ -ไขมัน -ไข้มาลาเรีย -ไข่มุก -ไขย่น -ไข่เยี่ยวม้า -ไขรา -ไข่ลม -ไขลาน -ไข่ลูกเขย -ไข่ลูกยอด -ไข้เลือดออก -ไขว่ -ไขว้ -ไขว้เขว -ไขว่คว้า -ไขว้โรง -ไขว่ห้าง -ไขษย -ไข้สันนิบาต -ไขสันหลัง -ไขสันหลังอักเสบ -ไข่สำเภา -ไขสือ -ไขเสนียด -ไข่หงส์ -ไข้หวัด -ไข้หวัดใหญ่ -ไข่หวาน -ไข้หัว -ไข้หัวลม -ไข่หำ -ไข่หิน -ไขหู -ไข้เหลือง -ไข่เหา -ไข่เหี้ย -ไข่แหน -ฃ -ค -คคน- -คคนะ -คคนัมพร -คคนางค์ -คคนานต์ -คง -คงกระพัน -คงกระพันชาตรี -คงแก่เรียน -คงขาด -คงคลัง -คงคา -คงคาเดือด -คงคาลัย -คงไคย -คงตัว -คงทน -คงที่ -คงเส้นคงวา -คงเหลือ -คช- -คชกรรม -คชนาม -คชราช -คชลักษณ์ -คชศาสตร์ -คชส่าน -คชสาร -คชสีห์ -คชาชาติ -คชาชีพ -คชาธาร -คชาภรณ์ -คชินทร์ -คเชนทร์ -คณ- -คณน -คณนา -คณบดี -คณะ -คณะรัฐมนตรี -คณาจารย์ -คณาธิการ -คณาธิปไตย -คณิกา -คณิต -คณิต- -คณิตศาสตร์ -คเณศ -คด -คดกริช -คดโกง -คดเคี้ยว -คดงอ -คดซ่าง -คดในข้องอในกระดูก -คดสร้าง -คดี -คดีดำ -คดีแดง -คดีแพ่ง -คดีมโนสาเร่ -คดีอนาถา -คดีอาญา --คต -คติ -คติชาวบ้าน -คติธรรม -คตินิยม -คติพจน์ -คทา -คน -ค้น -คนกลาง -คนไข้ -คนไข้นอก -คนไข้ใน -ค้นคว้า -คนจร -คนจริง -คนใช้ -คนดีผีคุ้ม -คนต้องขัง -คนทรง -คนทา -คนทิสอ -คนทิสอทะเล -คนที -คนทีเขมา -คนทีสอ -คนโท -คนธ์ -คนธรรพ- -คนธรรพ์ -คนธรรพวิวาห์ -คนธรรพศาสตร์ -คนนอก -คนใน -คนเมือง -คนรักเท่าผืนหนัง คนชังเท่าผืนเสื่อ -คนร้าย -คนไร้ความสามารถ -คนละ -คนละไม้คนละมือ -คนสวน -คนสาบสูญ -คนเสมือนไร้ความสามารถ -ค้นหูก -คนใหญ่คนโต -คเนจร -คบ -คบคนให้ดูหน้า ซื้อผ้าให้ดูเนื้อ -คบค้า -คบคิด -คบชู้ -คบเพลิง -คบไฟ -คบหา -คม -คมกริบ -คมขำ -คมคาย -คมน- -คมน์ -คมนาการ -คมนาคม -คมในฝัก -คมบาง -คมสัน -คมิกภัต -ครก -ครกกะเบือ -คร่ง -ครบ -ครบครัน -ครบถ้วน -ครบมือ -ครรชิต -ครรภ -ครรภ- -ครรภ์ -ครรภธาตุ -ครรภธาตุมณฑล -ครรภมณฑล -ครรภมล -ครรโภทร -ครรลอง -ครรโลง -ครรไล -ครรหิต -ครวญ -ครวญคราง -ครวญหา -ครวัก -ครวี -ครหา -ครอก -ครอง -ครองแครง -ครองราชสมบัติ -คร่อเงาะ -คร่อเทียน -ครอบ -ครอบครอง -ครอบครองปรปักษ์ -ครอบครัว -ครอบงำ -ครอบจักรวาล -ครอบตลับ -คร่อม -คระ -คระเมิม -คระแลง -คระไล -คระแวง -คระหน -คระหวน -คระหาย -คระหิว -คระโหย -ครั่ง -ครั้ง -ครัดเคร่ง -ครัน -ครั่น -ครั้น -ครั่นคร้าม -ครั่นตัว -ครั่นเนื้อครั่นตัว -ครับ -ครัว -ครัวทาน -ครัวไฟ -ครัวเรือน -ครา -คร่า -คราก -คราง -คราญ -คราด -คร้าน -คราบ -คราบหมู -คราม -คร้าม -ครามครัน -คราว -คร่าว -คร่าวๆ -คราส -ครำ -คร่ำ -คร่ำครวญ -คร่ำคร่า -คร่ำครึ -คร่ำเคร่ง -คร่ำเครอะ -คร่ำเงิน -คร่ำทอง -คร่ำหวอด -คริปทอน -คริสต์ -คริสต์มาส -คริสต์ศักราช -คริสตัง -คริสเตียน -ครี้ -ครีครอ -ครีบ -ครีบสิงห์ -ครีม -ครีษมายัน -ครึ -ครึกครื้น -ครึกโครม -ครึ่ง -ครึ่งๆ กลางๆ -ครึ่งชาติ -ครึ่งต่อครึ่ง -ครึน -ครึม -ครึ้ม -ครึมครุ -ครืด -ครืน -ครื้น -ครืนครั่น -ครื้นครั่น -ครื้นครึก -ครื้นเครง -ครือ -ครุ -ครุก- -ครุคระ -ครุฑ -ครุฑกระทง -ครุฑพ่าห์ -ครุ่น -ครุ่นคิด -ครุภัณฑ์ -ครุมเครือ -ครุย -ครุวนา -ครุวาร -ครุศาสตร์ -ครู -ครู่ -ครูด -คฤโฆษ -คฤนถ์ -คฤห -คฤห- -คฤหบดี -คฤหปัตนี -คฤหัสถ์ -คฤหา -คฤหาสน์ -คล -คลวง -คลอ -คล้อ -คลอก -คลอเคลีย -คลอแคล -คล้อแคล้ -คลอง -คล่อง -คล้อง -คล่องแคล่ว -คล้องจอง -คล่องตัว -คลองเลื่อย -คลองส่งน้ำ -คลอด -คลอน -คลอนแคลน -คล้อย -คล้อยคล้อย -คลอรีน -คลอโรฟอร์ม -คลอโรฟีลล์ -คละ -คละคล่ำ -คละคลุ้ง -คละปน -คลัก -คลั่ก -คลั่กๆ -คลัง -คลั่ง -คลังพิมานอากาศ -คลังเลือด -คลังสินค้า -คลังสินค้าทัณฑ์บน -คลัตช์ -คลับคล้าย -คลับคล้ายคลับคลา -คลา -คล้า -คลาคล่ำ -คลาไคล -คลางแคลง -คลาด -คลาดเคลื่อน -คลาดแคล้ว -คลาน -คลาย -คล้าย -คลายคล้าย -คล้ายคล้าย -คล้ายคลึง -คลายเคล่ง -คล่าว -คลาศ -คลำ -คล่ำ -คล้ำ -คลิง -คลิ้งโคลง -คลิด -คลินิก -คลี -คลี่ -คลี่คลาย -คลึง -คลึงเคล้น -คลึงเคล้า -คลื่น -คลื่นกระทบฝั่ง -คลื่นใต้น้ำ -คลื่นปานกลาง -คลื่นแม่เหล็กไฟฟ้า -คลื่นยาว -คลื่นวิทยุ -คลื่นสั้น -คลื่นไส้ -คลื่นเหียน -คลุก -คลุกคลาน -คลุกคลี -คลุกคลีตีโมง -คลุ้ง -คลุบ -คลุม -คลุ่ม -คลุ้ม -คลุ้มคลั่ง -คลุมเครือ -คลุมถุงชน -คลุมประทม -คลุมโปง -คลุมผทม -ควง -ควงแขน -ควงสว่าน -ควณ -ควน -ควบ -ควบคุม -ควบแน่น -ควย -ควร -ควัก -ควักค้อน -ควักลงหลุม -ควั่งคว้าง -ควัน -ควั่น -ควั่นจุก -ควันหลง -คว้า -ควาก -คว้าไขว่ -คว้าง -คว้างๆ -คว้างเคว้ง -ควาญ -ควาน -คว้าน -คว้านท้อง -คว้าน้ำเหลว -ความ -ความคลาด -ความเค้น -ความเครียด -ความเฉื่อย -ความชอบ -ความชื้น -ความชื้นสัมบูรณ์ -ความชื้นสัมพัทธ์ -ความถ่วง -ความถ่วงจำเพาะ -ความถี่ -ความถี่วิทยุ -ความโน้มถ่วง -ความยาวคลื่น -ความรู้ท่วมหัวเอาตัวไม่รอด -ความรู้สึกเขื่อง -ความรู้สึกด้อย -ความรู้สึกเด่น -ความเร่ง -ความเร็ว -ความหน่วง -ความหลัง -ควาย -ควายปละ -ควายพระอินทร์ -คว่าว -คว่ำ -คว่ำบาตร -คว่ำหลัง -ควินิน -ควิวๆ -ควิวควัง -ควิวคว่าง -ควิวคว้าง -ควีนสิริกิติ์ -คห- -คหกรรมศาสตร์ -คหบดี -คหปตานี -คหัฐ -คอ -ค้อ -คอก -ค็อกคัส -คอกช้าง -ค็อกเทล -คอกระเช้า -คอกลม -คอกะลาสี -คอขาดบาดตาย -คอแข็ง -คอคอด -คอเคซอยด์ -ค่องอ้อย -คอเชิ้ต -คอซอง -คอด -คอแดง -คอตก -คอต่อ -คอตั้ง -คอตั้งบ่า -คอตีบ -คอถ่วง -คอทองแดง -คอน -ค่อน -ค้อน -คอนกรีต -คอนกรีตเสริมเหล็ก -คอนกรีตอัดแรง -ค้อนกลอง -ค่อนขอด -ค่อนข้าง -ค้อนควัก -ค่อนแคะ -คอนเดนเซอร์ -ค้อนติง -ค้อนตีหมา -ค้อนทอง -คอนแวนต์ -คอนเสิร์ต -ค้อนหอย -คอนาค -คอบ -คอบัว -คอแบะ -คอปาด -คอเป็นเอ็น -คอพอก -คอพับ -คอไฟ -คอม -ค่อม -ค้อม -คอมพิวเตอร์ -คอมมานโด -คอมมิวนิสต์ -คอม้า -คอย -ค่อย -ค่อยๆ -ค้อย -ค่อยดีขึ้น -คอยท่า -ค่อยเป็นค่อยไป -ค่อยยังชั่ว -คอยล์ -คอยเหตุ -คอร์ด -คอรวง -คอระฆัง -คอแร้ง -คอแลน -คอวี -คอสติกโซดา -คอสอง -คอสะพาน -คอสูง -คอเสื้อ -คอหอย -คอหอยกับลูกกระเดือก -คอหอยตีบ -คอหอยพอก -คอห่าน -คอแห้ง -คอแหลม -คออ่อน -คอฮาวาย -คะ -ค่ะ -คะไขว่ -คะค้อย -คะคาน -คะคึง -คะนน -คะนอง -คะน้า -คะนึง -คะเน -คะเนงร้าย -คะเน็ด -คะแนน -คะแนนนิยม -คะแนนเสียง -คะใน -คะมำ -คะมึก -คะยั้นคะยอ -คะเยอ -คัก -คั่ก -คัคน- -คัคนะ -คัคนัมพร -คัคนางค์ -คัคนานต์ -คั่ง -คั่งค้าง -คั่งแค้น -คังไคย -คัจฉ -คัณฑมาลา -คัณฑสูตร -คัด -คัดค้าน -คัดเค้า -คัดง้าง -คัดฉาก -คัดช้อน -คัดชุน -คัดท้าย -คัดมอน -คัดเม็ง -คัดเลือก -คัดเลือด -คัทลียา -คัน -คั่น -คั้น -คันขา -คันจาม -คันฉ่อง -คันฉัตร -คันฉาย -คันชัก -คันชั่ง -คันชีพ -คันดาลฉัตร -คันโดง -คันถ- -คันถธุระ -คันถรจนาจารย์ -คันทรง -คันธ -คันธ- -คันธ์ -คันธกุฎี -คันธมาทน์ -คันธารราษฎร์ -คันนา -คันบวย -คันโพง -คันเร่ง -คันหามเสือ -คับ -คับขัน -คับค้อน -คับคั่ง -คับคา -คับแค -คับแค้น -คับแคบ -คับใจ -คับอกคับใจ -คัพภ- -คัพภ์ -คัพภสาลี -คัพโภทร -คัมภีร- -คัมภีร์ -คัมภีรภาพ -คัล -คัว -คั่ว -คา -ค่า -ค้า -คากรอง -ค้าขาย -ค่าขึ้นศาล -ค่าคบ -ค่าครองชีพ -ค้าความ -ค้าค้า -คาง -ค่าง -ค้าง -คางคก -คางคกขึ้นวอ -คางคกไฟ -ค้างคาว -ค้างคืน -ค้างเดือนค้างปี -ค้างเติ่ง -คางทูม -คางโทน -คางเบือน -ค้างปี -คางหมู -คางเหลือง -คาด -คาดคั้น -คาดค่า -คาดไม่ถึง -คาดหน้า -คาดหมัด -ค่าตัว -คาถา -คาถาพัน -คาถาอาคม -คาทอลิก -ค่าที่ -คาธ -ค่าธรรมเนียม -ค่าธรรมเนียมศาล -คาน -ค้าน -คานคอดิน -คานหาม -คาน้า -ค่าน้ำ -คาบ -คาบเกี่ยว -คาบชุด -คาบลูกคาบดอก -คาบศิลา -คาบสมุทร -คาบเส้น -ค้าประเวณี -ค่าป่วยการ -ค่าปากเรือ -ค่าเผา -คาพยุต -ค่าภาคหลวง -คาม -คาม- -คามณี -คามณีย์ -คามภีร์ -คามโภชก -คามวาสี -คามี -คาย -ค่าย -คายก -คายก- -คายกคณะ -ค่ายกักกัน -ค่ายเยาวชน -ค่ายอาสาพัฒนา -คายัน -คาร์บอน -คาร์บอนไดออกไซด์ -คาร์บอนมอนอกไซด์ -คาร์บอเนต -คาร์บอลิก -คาร์บูเรเตอร์ -คาร์โบรันดัม -คาร์โบไฮเดรต -คารพ -คารม -คารวะ -คาราคาก่า -คาราคาซัง -คาราเต้ -คาราวาน -ค่าฤชาธรรมเนียม -คาว -ค่าว -ค้าว -คาวตอง -คาวปลา -คาวี -คาวุต -คาส -ค่าสัมบูรณ์ -ค่าสินไหมทดแทน -ค่าเสมอภาค -ค่าเสียหาย -ค่าหด -คาหนังคาเขา -ค่าหน้าดิน -ค่าหัว -คำ -ค่ำ -ค้ำ -คำขวัญ -คำขอ -คำขาด -คำคม -ค้ำคอ -ค่ำคืน -คำคู่ความ -ค้ำเงิน -ค้ำจุน -ค้ำชู -คำดีควาย -คำโดด -คำตั้ง -คำตาย -คำติดต่อ -คำเติม -คำใต้ -คำแถลง -คำแถลงการณ์ -คำทาย -คำเทียบ -คำนวณ -คำนวร -คำนับ -คำนัล -คำนำ -คำนึง -คำนูณ -คำบังคับ -คำโบล -ค้ำประกัน -คำประสม -คำปรารภ -คำเป็น -คำฝอย -คำพิพากษา -คำเพลิง -คำฟ้อง -คำฟ้องแย้ง -ค้ำฟ้า -คำมั่น -คำมั่นว่าจะให้รางวัล -คำมากพยางค์ -คำมูล -คำเมือง -คำรน -คำรบ -คำร้อง -คำร้องขอ -คำร้องทุกข์ -คำราม -คำสุภาพ -คำแสด -คำหลวง -ค้ำหัว -คำแหง -คำโอง -คิกๆ -คิง -คิด -คิดการใหญ่ -คิดคด -คิดค้น -คิดตก -คิดถึง -คิดมาก -คิดเล็กคิดน้อย -คิดสมบัติบ้า -คิดสั้น -คิดหน้าคิดหลัง -คิดเห็น -คิดอ่าน -คิมห -คิมหันต์ -คิมหานะ -คิริ -คิรี -คิลาน- -คิลานปัจจัย -คิลานเภสัช -คิลานะ -คิว -คิ้ว -คิ้วนาง -คี่ -คีต -คีตกะ -คีบ -คีม -คีรี -คีรีบูน -คึก -คึ่ก -คึ่กๆ -คึกคัก -คึกคาม -คืน -คืนคำ -คืนชีพ -คืนดี -คืนตัว -คืนยังรุ่ง -คืนให้ -คืบ -คืบก็ทะเล ศอกก็ทะเล -คือ -คุ -คุก -คุกกี้ -คุกเข่า -คุกคลาน -คุกคาม -คุกพาทย์ -คุคะ -คุง -คุ้ง -คุณ -คุณ- -คุณชาย -คุณธรรม -คุณนาม -คุณนาย -คุณบท -คุณพิเศษ -คุณภาพ -คุณลักษณะ -คุณลุงคุณป้า -คุณวิเศษ -คุณวุฒิ -คุณศัพท์ -คุณสมบัติ -คุณหญิง -คุณากร -คุณูปการ -คุโณปการ -คุด -คุดคู้ -คุดทะราด -คุดทะราดเหยียบกรวด -คุต -คุตติ -คุ่น -คุ้น -คุ้นเคย -คุป -คุปต์ -คุปติ -คุม -คุ่ม -คุ้ม -คุ้มกัน -คุมกำเนิด -คุ้มเกรง -คุ้มครอง -คุมแค้น -คุมเชิง -คุ้มดีคุ้มร้าย -คุ้มเท้า -คุ้มโทษ -คุมธาตุ -คุมนุม -คุมฝอย -คุ้มห้าม -คุย -คุ้ย -คุ้ยเขี่ย -คุยช้าง -คุยห- -คุยหฐาน -คุยหประเทศ -คุยหรหัสย์ -คุรุ -คุรุกรรม -คุรุวาร -คุรุศึกษา -คุลา -คุลาซ่อนลูก -คุลิก่า -คุลีการ -คุหา -คู -คู่ -คู้ -คู่กรณี -คู่ขา -คู่แข่ง -คู่ครอง -คู่ควร -คู่ความ -คู่ความร่วม -คู่คิด -คู่คี่ -คู่เคียง -คู่โค -คู่ใจ -คู่ฉบับ -คู่ฉีก -คู่ชัก -คู่ชีพ -คู่ชีวิต -คูณ -คูณร่วมน้อย -คูถ -คู่ทุกข์คู่ยาก -คูน -คู้บัลลังก์ -คู่บ้านคู่เมือง -คู่บารมี -คู่บุญ -คู่ปรปักษ์ -คู่ปรับ -คูปอง -คู่ผสม -คู่ผัวตัวเมีย -คู่พระคู่นาง -คู่พิพาท -คู่ม้า -คู่มิตร -คู่มือ -คู่ยาก -คู่รัก -คูเรียงคูราย -คู่เรียงเคียงหมอน -คูเรียม -คู่ลำดับ -คู่ศัตรู -คู่สร้าง -คู่สวด -คู่สัญญา -คู่สายโทรศัพท์ -คู่หมั้น -คูหา -คู่หู -คู่แห่ -คู่อริ -คู่อาฆาต -คู่อาศัย -เค้ก -เค้เก้ -เค้ง -เคจฉ -เคณฑะ -เคด -เคน -เค้น -เคเบิล -เค็ม -เคมี -เคมีภัณฑ์ -เคมีอนินทรีย์ -เคมีอินทรีย์ -เคย -เคยตัว -เคยปาก -เคยมือ -เครง -เคร่ง -เคร่งขรึม -เคร่งครัด -เครงครา -เครงครำ -เครงคร่ำ -เครงครื้น -เคร่งเครียด -เครงเครียว -เครดิต -เครดิตฟองซิเอร์ -เครน -เครา -เคร่า -เคราแพะ -เคราหณี -เคราะห์ -เคราะห์หามยามร้าย -เครียด -เครียว -เครือ -เครือเขา -เครือเขาน้ำ -เครือเขามวก -เครื่อง -เครื่องกล -เครื่องกัณฑ์ -เครื่องกิน -เครื่องแกง -เครื่องเขิน -เครื่องครัว -เครื่องควบแน่น -เครื่องคู่ -เครื่องเครา -เครื่องเงิน -เครื่องจักร -เครื่องช่วงล่าง -เครื่องเซ่น -เครื่องดนตรี -เครื่องต้น -เครื่องตั้ง -เครื่องทอง -เครื่องทองทิศ -เครื่องทองน้อย -เครื่องเทศ -เครื่องใน -เครื่องบน -เครื่องบันทึกเสียง -เครื่องบิน -เครื่องบูชา -เครื่องแบบ -เครื่องประดับ -เครื่องปรุง -เครื่องปั้นดินเผา -เครื่องผูก -เครื่องมั่น -เครื่องมือ -เครื่องยนต์ -เครื่องยนต์ไอพ่น -เครื่องร่อน -เครื่องราง -เครื่องราชอิสริยาภรณ์ -เครื่องร่ำ -เครื่องเรือน -เครื่องล่าง -เครื่องเล่น -เครื่องว่าง -เครื่องสด -เครื่องสะดุ้ง -เครื่องสับ -เครื่องสาย -เครื่องสำอาง -เครื่องสุกำศพ -เครื่องสูง -เครื่องหมาย -เครื่องหมายการค้า -เครื่องหยวก -เครื่องหลัง -เครื่องห้า -เครื่องเหล็ก -เครื่องใหญ่ -เครื่องอังทราย -เครื่องอังน้ำ -เครือจักรภพ -เครือดิน -เครือแย่ง -เครือรัฐ -เครือวัลย์พันไม้ -เคล้ง -à¹€à¸„ล็ด -เคล้น -เคล้า -เคล่าคล่อง -เคล้าคลึง -เคล้าเคลีย -เคลิบเคลิ้ม -เคลิ้ม -เคลีย -เคลียคลอ -เคลี้ยคลิง -เคลียเคล้า -เคลื่อน -เคลื่อนคลาด -เคลื่อนที่ -เคลื่อนไหว -เคลือบ -เคลือบคลุม -เคลือบแคลง -เคลือบแฝง -เคลือบฟัน -เคว้ง -เคว้งคว้าง -เคห- -เคหศาสตร์ -เคหเศรษฐศาสตร์ -เคหสถาน -เคหะ -เคหา -เคอย -เคอะ -เคา -เค้า -เค้าโครง -เค้าเงื่อน -เคาน์เตอร์ -เค้ามูล -เคารพ -เค้าสนามหลวง -เคาะ -เคาะแคะ -เคี้ย -เคียง -เคียงบ่าเคียงไหล่ -เคียด -เคียดแค้น -เคียน -เคียม -เคี่ยม -เคี่ยมคะนอง -เคียร -เคียว -เคี่ยว -เคี้ยว -เคี่ยวขัน -เคี่ยวขับ -เคี่ยวเข็ญ -เคี้ยวฟัน -เคี้ยวเอื้อง -เคื้อ -เคือง -แค -แค่ -แค้ -แคแกล -แคดเมียม -แค็ตตาล็อก -แคแตร -แคโทด -แคน -แค่น -แค้น -แค้นคอ -แค่นแคะ -แค่นไค้ -แคบ -แคบหมู -แคปซูล -แคฝรั่ง -แคฝอย -แคม -แคร่ -แครก -แครครั่ง -แครง -แครงเครียว -แคระ -แคลคูลัส -แคลง -แคลงใจ -แคลเซียม -แคลเซียมคาร์ไบด์ -แคลเซียมไซคลาเมต -แคลน -แคล้ว -แคล่วคล่อง -แคล้วคลาด -แคลอรี -แคลิฟอร์เนียม -แคแล -แคว -แควก -แคว้ง -แคว้น -แคแสด -แคะ -แคะไค้ -โค -โคก -โคกกระสุน -โคกกระออม -โคกม้า -โคแก่ชอบกินหญ้าอ่อน -โคคลาน -โคเคน -โค่ง -โค้ง -โคจร -โคจร- -โคจรคาม -โคเซแคนต์ -โคไซน์ -โคตร -โคตร- -โคตรภู -โคตรภูญาณ -โคเถลิง -โคแทนเจนต์ -โคธา -โคน -โค่น -โคนดินสอ -โคนตายปลายเป็น -โคนม -โคนสมอ -โคบอลต์ -โคบาล -โคบุตร -โคปผกะ -โคเพลาะ -โคไพร -โคม -โคมดอกไม้ -โคมตาวัว -โคมลอย -โคมเวียน -โคมัย -โคม่า -โคมูตร -โครก -โครกครอก -โครกคราก -โครง -โคร่ง -โครงการ -โคร่งคร่าง -โครงแคร -โครงจมูก -โครงเรื่อง -โครงสร้าง -โครม -โครมคราม -โครเมียม -โครโมโซม -โครส -โคราช -โครำ -โคโรค -โคล -โคลง -โคลงเคลง -โคลน -โควตา -โควิถี -โคศัพท์ -โคออร์ดิเนต -ใคร -ใคร่ -ใคร่ครวญ -ไค -ไค้ -ไคร้ -ไคร้เครือ -ไคล -ไคล้ -ฅ -ฆ -ฆน -ฆราวาส -ฆ้อง -ฆ้องกระแต -ฆ้องชัย -ฆ้องปากแตก -ฆ้องวง -ฆ้องสามย่าน -ฆ้องหุ่ย -ฆ้องเหม่ง -ฆ้องโหม่ง -ฆ่า -ฆ่าควายอย่าเสียดายพริก -ฆาฏ -ฆาต -ฆาต- -ฆาตกร -ฆาตกรรม -ฆาน -ฆาน- -ฆานประสาท -ฆ่าไม่ตายขายไม่ขาด -เฆี่ยน -โฆรวิส -โฆษก -โฆษณา -โฆษณาการ -โฆษณาชวนเชื่อ -โฆษะ -โฆษิต -ง -งก -งกเงิ่น -งกๆ เงิ่นๆ -งง -งงงวย -งงงัน -งงิด -งด -งดงาม -งบ -งบดุล -งบประมาณ -งม -งมเข็มในมหาสมุทร -งมโข่ง -งมงาย -งวง -ง่วง -ง่วงงุน -งวงช้าง -ง่วงเหงา -ง่วงเหงาหาวนอน -งวด -ง่วน -ง้วน -งวยงง -งอ -ง้อ -งอก -งอกงาม -งอกเงย -งอกแงก -งอก่องอขิง -ง่อง -ง่องแง่ง -ง้องอน -งอแง -งอด -งอดแงด -งอน -ง่อน -งอนง้อ -ง่อนแง่น -งอนไถ -งอนหง่อ -ง้อนหมู -งอบ -งอม -ง้อม -งอมแงม -งอมพระราม -งอมืองอตีน -งอย -ง่อย -ง่อยเปลี้ยเสียขา -งอหาย -งะ -งักๆ -งั่กๆ -งังๆ -งั่ง -งัด -งัดข้อ -งัน -งันงก -งับ -งับแง -งัว -งั่ว -งัวเงีย -งัวซัง -งัวเลีย -งา -ง่า -งากำจาย -งาเครือ -ง้าง -ง่าเงย -งาช้าง -งาแซง -งาไซ -งาตัด -งาน -ง่าน -งานการ -งานหลวงไม่ให้ขาด งานราษฎร์ไม่ให้เสีย -งาบๆ -งาม -ง่าม -งามงอน -งามแงะ -ง่ามถ่อ -งามหน้า -งาย -ง่าย -ง่ายๆ -ง่ายดาย -ง่าย้อย -งาลั่ว -ง้าว -งาสาน -งำ -ง่ำ -ง่ำๆ -ง้ำ -งิ้ว -งีบ -งึกๆ -งึน -งึม -งึมงำ -งุด -งุดๆ -งุนงง -งุ่นง่าน -งุบ -งุบๆ -งุบงิบ -งุ้ม -งุ่มง่าม -งุย -งู -งูกลืนหาง -งูกินหาง -งูบ -งูๆ ปลาๆ -งูผู้ -งูเมีย -งูสวัด -งู่หนี -งูเหลือม -งูเห่า -เง้ -เงก -เง็น -เงย -เงยหน้าอ้าปาก -เงอะ -เงอะงะ -เงา -เงาๆ -เง่า -เง้า -เง้างอด -เง้าๆ งอดๆ -เงาตามตัว -เงามัว -เงามืด -เงาะ -เงาะป่า -เงิน -เงินก้นถุง -เงินก้อน -เงินกู้ -เงินเชื่อ -เงินดาวน์ -เงินเดือน -เงินแดง -เงินได้กำบัง -เงินต้น -เงินตรา -เงินตาย -เงินทองตรา -เงินทอน -เงินนอน -เงินน้ำห้าน้ำหก -เงินปลีก -เงินปันผล -เงินปากถุง -เงินปากผี -เงินปี -เงินแป -เงินผ่อน -เงินฝืด -เงินเฟ้อ -เงินมุ่น -เงินยวง -เงินเยอรมัน -เงินร้อน -เงินรายปี -เงินสด -เงินสเตอร์ลิง -เงินหลวง -เงินแห้ง -เงี่ยง -เงี่ยน -เงียบ -เงียบกริบ -เงียบเชียบ -เงียบเป็นเป่าสาก -เงียบเหงา -เงี้ยว -เงี้ยวระเริง -เงี้ยวรำลึก -เงี่ยหู -เงื้อ -เงือก -เงื่อง -เงื่องๆ -เงื่องหงอย -เงื้อง่าราคาแพง -เงือด -เงือดงด -เงือดเงื้อ -เงือน -เงื่อน -เงื่อนไข -เงื่อนไขบังคับก่อน -เงื่อนไขบังคับหลัง -เงื่อนงำ -เงื่อนเวลา -เงื่อนเวลาเริ่มต้น -เงื่อนเวลาสิ้นสุด -เงือบ -เงื้อม -เงื้อมมือ -แง -แงๆ -แง่ -แง่ง -แง่งๆ -แง่งขิง -แง่งอน -แง่น -แง่นๆ -แง้ม -แงะ -โง -โง่ -โงก -โงกเงก -โง่แกมหยิ่ง -โงง -โง่งๆ -โง้ง -โงงเงง -โง่งเง่ง -โงเง -โง่เง่า -โง่เง่าเต่าตุ่น -โงน -โงนเงน -โง่แล้วอยากนอนเตียง -ไง้ -จ -จก -จง -จ่ง -จ๋ง -จงกรม -จงกรมแก้ว -จงกล -จงกลนี -จงเกลียดจงชัง -จงโคร่ง -จงใจ -จงดี -จงรัก -จงรักภักดี -จงอร -จงอาง -จแจ้น -จญ -จด -จดจ่อ -จดจ้อง -จดๆ จ้องๆ -จดจำ -จดทะเบียน -จดหมัด -จดหมาย -จดหมายเวียน -จดหมายเหตุ -จดุร -จดุรงค์ -จดูร- -จตุ- -จตุกาลธาตุ -จตุตถ- -จตุตถี -จตุทิพยคันธา -จตุบท -จตุบริษัท -จตุปัจจัย -จตุปาริสุทธิศีล -จตุร- -จตุรคูณ -จตุรงค์ -จตุรงคนายก -จตุรงคประดับ -จตุรงคยมก -จตุรถ- -จตุรพักตร์ -จตุรพิธ -จตุรพิธพร -จตุรภุช -จตุรภูมิ -จตุรยุค -จตุราริยสัจ -จตุลังคบาท -จตุโลกบาล -จตุสดมภ์ -จทึง -จน -จ้น -จนกระทั่ง -จนกว่า -จนชั้น -จนด้วยเกล้า -จนถึง -จนแล้วจนรอด -จบ -จบเห่ -จม -จ่ม -จมเบ้า -จมปลัก -จมไม่ลง -จมร -จมรี -จมูก -จมูกปลาหลด -จมูกปลาไหล -จมูกมด -จมูกวัว -จมูกหลอด -จยุติ -จร -จร- -จรก -จรกลู่ -จรแกว่ง -จรคั่ง -จรจรัล -จรจัด -จรณะ -จรด -จรดพระกรรไตรกรรบิด -จรดพระนังคัล -จรดล -จรบน -จรบัน -จรบาท -จรมัน -จรมูก -จรรจา -จรรโจษ -จรรม -จรรม- -จรรมการ -จรรมขัณฑ์ -จรรยา -จรรยาบรรณ -จรรโลง -จรลวง -จรล่วง -จรลาด -จรลาย -จรล่ำ -จรลิ่ว -จรลี -จรลู่ -จรวจ -จรวจไจร -จรวด -จรวดจรี -จรวดนำวิถี -จรวัก -จรส -จรอก -จระกล้าย -จระขาบ -จระเข้ -จระเข้ปากกระทุงเหว -จระเข้หางยาว -จระคลับ -จระคล้าย -จระคลุ่ม -จระแคง -จระจุ่ม -จระทก -จระเทิน -จระนำ -จระบาน -จระบี -จระลิ่ง -จระลึง -จระลุง -จรัล -จรัส -จราก -จราง -จราจร -จราญ -จราย -จราว -จราส -จริก -จริง -จริงๆ -จริงจัง -จริงใจ -จริงอยู่ -จริต -จริม- -จริย- -จริยธรรม -จริยวัตร -จริยศาสตร์ -จริยศึกษา -จริยา -จริยาปิฎก -จริยาวัตร -จริว -จรี -จรึง -จรุก -จรุง -จรูง -จรูญ -จรูส -จเร -จล -จลนพลศาสตร์ -จลนศาสตร์ -จลนี -จลา -จลาจล -จวก -จ๊วก -จวง -จ้วง -จ๋วง -จ๋วงเครือ -จวงจันทน์ -จ้วงจาบ -จวงหอม -จวด -จวดลาก -จวน -จวนเจียน -จวนแจ -จวนตัว -จวบ -จวบจวน -จวัก -จอ -จ่อ -จ้อ -จ๋อ -จอก -จ้อก -จ้อกๆ -จ๊อก -จ๊อกๆ -จ้อกแจ้ก -จ้อกวอก -จอกหูหนู -จอง -จ่อง -จ้อง -จ๋อง -จองคช -จองจำ -จ้องเต -จองถนน -จองเปรียง -จองเวรจองกรรม -จองหง่อง -จ้องหน่อง -จองหอง -จองหองพองขน -จอแจ -จ๋อแจ๋ -จอด -จอน -จ้อน -จอนจ่อ -จอนหู -จอบ -จอม -จ่อม -จอมขวัญ -จ่อมจ่าย -จอมใจ -จอมไตร -จอมทอง -จอมทัพ -จอมปลวก -จอมปลอม -จ้อมป้อม -จอมเปาะ -จอมพล -จอมมารดา -จอมสุรางค์ -จ่อย -จ้อย -จ๋อย -จ๋อยๆ -จอแส -จะ -จ้ะ -จ๊ะ -จ๋ะ -จะกรัจจะกราจ -จะกรุน -จะกรุมจะกราม -จะกรูน -จะกละ -จะกลาม -จะกวด -จะกูด -จะเกร็ง -จะขาบ -จะเข้ -จะเข็บ -จะงอย -จะจะ -จะจ้า -จะแจ้ง -จะแจ่ม -จะไจ้ -จะบัน -จะปิ้ง -จะปิ้งเรือ -จะเพลิง -จะละเม็ด -จะละหวั่น -จะลุง -จ๊ะเอ๋ -จัก -จั้กๆ -จักกาย -จั๊กกิ้ม -จักขุ -จักขุทวาร -จักขุประสาท -จักขุวิญญาณ -จักขุสัมผัส -จักจั่น -จักจี้ -จั๊กจี้ -จั๊กเดียม -จักร -จักร- -จักรปาณิ -จักรปาณี -จักรพรรดิ -จักรพาก -จักรพาล -จักรภพ -จักรยาน -จักรยานยนต์ -จักรราศี -จักรวรรดิ -จักรวรรดินิยม -จักรวาก -จักรวาต -จักรวาล -จักริน -จักรี -จั๊กเล้อ -จักษุ -จักสาน -จักแหล่น -จัง -จั้ง -จั๋ง๑ -จังกวด -จังกอบ -จังกา -จังก้า -จังกูด -จังเก -จังโกฏก์ -จังงัง -จังมัง -จั้งมั่ง -จังไร -จังลอน -จังเว็จ -จังหนับ -จังหน้า -จังหรีด -จังหล่อ -จังหวะ -จังหวัด -จังหัน -จังออน -จัญไร -จัณฑ- -จัณฑ์ -จัณฑวาตา -จัณฑาล -จัด -จัดการ -จัดจอง -จัดจ้า -จัดจ้าน -จัดเจน -จัดแจง -จัดตั้ง -จัดประกัน -จัดมั่น -จัดสรร -จัดหา -จัตตาฬีส -จัตวา -จัตวาทัณฑี -จัตวาศก -จัตุ -จัตุร- -จัตุรงค์ -จัตุรพักตร์ -จัตุรภุช -จัตุรมุข -จัตุรัส -จัตุโลกบาล -จัตุสดมภ์ -จัน -จั่น -จันโจษ -จั่นดิน -จันท์ -จันทน์ -จันทน์กะพ้อ -จันทน์ขาว -จันทน์ชะมด -จันทน์แดง -จันทน์เทศ -จันทน์ผา -จันทน์หอม -จันทนา -จันทร- -จันทร์ -จันทรกลา -จันทรกานต์ -จันทรคติ -จันทรคราส -จันทรพิมพ์ -จันทรมณฑล -จันทรเม็ด -จันทรวงศ์ -จันทรเศขร -จันทรุปราคา -จันทัน -จันทันพราง -จันลอง -จันเลา -จันเลาะ -จั้นหล่อ -จั่นหับ -จั่นห้าว -จันอับ -จับ -จับกลุ่ม -จับกัง -จับกุม -จับเขม่า -จับไข้ -จับความ -จับงูข้างหาง -จับจด -จับจอง -จับจ่าย -จับจิต -จับเจ่า -จับเจี๋ยว -จับใจ -จับฉ่าย -จับเชิง -จับดำถลำแดง -จับเดิม -จับตัววางตาย -จับตา -จับตาดู -จับตาย -จับปิ้ง -จับเป็น -จับโปง -จับผิด -จับพลัดจับผลู -จับแพะชนแกะ -จับยาม -จับยี่กี -จับระบำ -จับเวลา -จับสั่น -จับสายสิญจน์ -จับเสือมือเปล่า -จับหลัก -จับหวัด -จับหัวเข่าพูด -จัมบก -จัมปก -จัมมะ -จัว -จั่ว -จั๊วะ -จา -จ่า -จ้า -จ๋า -จาก -จากพราก -จากพาก -จ่ากลอง -จาค- -จาคี -จาง -จ่าง -จ้าง -จางวาง -จาด -จาดตะกั่ว -จาตุ- -จาตุกรณีย์ -จาตุทสี -จาตุมหาราช -จาตุร- -จาตุรงค- -จาตุรงค์ -จาตุรงคสันนิบาต -จาตุรนต์ -จาตุรนต์รัศมี -จาตุรราชการ -จาตุรันต์ -จาน -จ้าน -จานจ่าย -จานเจือ -จานเชิง -จานบิน -จานผี -จานเสียง -จาบ -จาบจ้วง -จาบัล -จาบัลย์ -จาป -จ่าปี่ -จาม -จ่ามงกุฎ -จามจุรี -จามร -จามรี -จามีกร -จ่าย -จ่ายตลาด -จาร -จ่ารง -จารวาก -จาระไน -จาระบี -จาริก -จารี -จารีต -จารีตนครบาล -จารีตประเพณี -จารึก -จารุ -จ้าละหวั่น -จาว -จาวๆ -จ่าว -จ้าว -จาวมะพร้าว -จ่าหน้า -จ่าหวัก -จำ -จ้ำ -จำกว่า -จำกัด -จำกัดความ -จำกัดจำเขี่ย -จำกัดสินใช้ -จำครบ -จำงาย -จำจอง -จ้ำจี้ -จ้ำจี้จ้ำไช -จำเจ -จำเดิม -จำทวย -จำทับ -จำทาบ -จำเทิด -จำแทง -จำนง -จำนน -จำนรรจ์ -จำนรรจา -จำนวน -จำนวนจริง -จำนวนจินตภาพ -จำนวนเชิงซ้อน -จำนวนตรรกยะ -จำนวนเต็ม -จำนวนนับ -จำนวนอตรรกยะ -จำนอง -จำนับ -จำนัล -จำนำ -จำนำพรรษา -จำเนียน -จำเนียม -จำเนียร -จำแนก -จำโนทย์ -จำบ่ม -จำบัง -จำบับ -จำเบศ -จ้ำเบ้า -จำแบ -จำปา -จำปาขอม -จำปาแขก -จำปาดะ -จำปาทองเทศ -จำปาลาว -จำปาหอม -จำปี -จำปีแขก -จำปูน -จำเป็น -จำพรรษา -จำพวก -จำเพาะ -จำแพรก -จ้ำม่ำ -จำรด -จำรัส -จำราญ -จำราย -จำรูญ -จำเริญ -จำเรียง -จำลอง -จำลองทอง -จำลาย -จำเลย -จำเลาะ -จำเลาะตา -จำแลง -จำแล่น -จำวัด -จำศีล -จำหนับ -จ๋ำหนับ -จำหน่าย -จำหระ -จำหล่อ -จำหลอก -จำหลัก -จำหัน -จำห้าประการ -จำหาย -จำหุด -จำเหียง -จำอวด -จำอื่น -จิ -จิก -จิกปีก -จิกหัว -จิ่ง -จิ้งจก -จิงจ้อ -จิ้งจอก -จิงจัง -จิ้งจัง -จิงโจ้ -จิงโจ้น้ำ -จิ้งหรีด -จิ้งหรีดผี -จิ้งเหลน -จิ้งเหลนด้วง -จิต -จิต- -จิตกาธาน -จิตกึ่งสำนึก -จิตใจ -จิตต- -จิตต์ -จิตตภาวนา -จิตตวิสุทธิ -จิตตานุปัสสนา -จิตใต้สำนึก -จิตนิยม -จิตบำบัด -จิตแพทย์ -จิตภาพ -จิตร -จิตร- -จิตรกร -จิตรกรรม -จิตรจุล -จิตรปทา -จิตรลดา -จิตรเลขา -จิตระ -จิตรา -จิตไร้สำนึก -จิตวิทยา -จิตวิสัย -จิตเวชศาสตร์ -จิตสำนึก -จินเจา -จินดา -จินดามณี -จินดามัย -จินดาหนา -จินดาหรา -จินต- -จินต์ -จินตกวี -จินต์จล -จินตนาการ -จินตภาพ -จิบ -จิปาถะ -จิ่ม -จิ้ม -จิ้มก้อง -จิ้มฟันจระเข้ -จิ้มลิ้ม -จิร- -จิรกาล -จิรัฐิติกาล -จิ๋ว -จี -จี่ -จี้ -จี๋ -จี๋จ้อ -จี่จู้ -จีแจ๊บ -จี๊ด -จีน -จีนเต็ง -จีนแส -จีนแสโสกา -จีบ -จีบปากจีบคอ -จีบพลู -จีโบ -จีพร -จีม -จีวร -จีวร- -จีวรกรรม -จีวรการสมัย -จีวรกาลสมัย -จีวรทานสมัย -จีวรภาชก -จี้เส้น -จึง -จึ่ง -จึ้ง -จืด -จืดจาง -จืดชืด -จืดตา -จื้นเจือก -จุ -จุๆ -จุก -จุ๊กกรู๊ -จุกจิก -จุกเจ่า -จุกช่องล้อมวง -จุกชี -จุกผาม -จุกผามม้ามย้อย -จุกพราหมณ์ -จุกยา -จุกโรหินี -จุ่ง -จุ้งจัง -จุ๋งจิ๋ง -จุใจ -จุฑา -จุฑาธิปไตย -จุฑามณี -จุฑามาศ -จุฑารัตน์ -จุณ -จุณณียบท -จุด -จุดจบ -จุดเด่น -จุดเดือด -จุดไต้ตำตอ -จุดทศนิยม -จุดน้ำค้าง -จุดบอด -จุดยืน -จุดยุทธศาสตร์ -จุดเยือกแข็ง -จุดรวม -จุดลูกน้ำ -จุดศูนย์กลาง -จุดศูนย์ถ่วง -จุดสัมผัส -จุดหมาย -จุดหมายปลายทาง -จุดหลอมเหลว -จุดหลัง -จุดเหี่ยวเฉา -จุดอ่อน -จุดอิ่มตัว -จุติ -จุตูปปาตญาณ -จุทส -จุทสมสุรทิน -จุน -จุ่น -จุ้น -จุ้นจ้าน -จุนจู๋ -จุ้นจู๊ -จุนเจือ -จุนทการ -จุนสี -จุบ -จุ๊บ -จุบจิบ -จุ๊บแจง -จุปาก -จุ่ม -จุ้ม -จุ๋มจิ๋ม -จุมพฏ -จุมพรวด -จุมพล -จุมพิต -จุมโพล่ -จุ้ย -จุรณ -จุรี -จุไร -จุล- -จุลกฐิน -จุลจอมเกล้า -จุลชีพ -จุลชีวัน -จุลชีวิน -จุลทรรศน์ -จุลภาค -จุลวงศ์ -จุลวรรค -จุลศักราช -จุลสาร -จุลินทรีย์ -จุฬา -จุฬามณี -จุฬาราชมนตรี -จุฬาลักษณ์ -จุฬาลัมพา -จู -จู่ -จู่ๆ -จู้ -จู๋ -จูง -จูงจมูก -จูงใจ -จูงนางเข้าห้อง -จูงนางลีลา -จูงมือ -จู้จี้ -จู๋จี๋ -จู่โจม -จู๊ด -จูบ -จูบฝุ่น -จูรณ -จู่ลู่ -เจ -เจ๊ก -เจ๊กตื่นไฟ -เจ่ง -เจ้ง -เจ๊ง -เจ็ด -เจ็ดชั่วโคตร -เจ็ดตะคลี -เจดีย- -เจดีย์ -เจดียถาน -เจดีย์ทิศ -เจดียสถาน -เจต -เจต- -เจตคติ -เจตจำนง -เจตนา -เจตนารมณ์ -เจตพังคี -เจตภูต -เจตมูลเพลิง -เจตมูลเพลิงฝรั่ง -เจตสิก -เจติย- -เจโตวิมุติ -เจน -เจนจบ -เจนจัด -เจนใจ -เจ็บ -เจ็บไข้ -เจ็บแค้น -เจ็บใจ -เจ็บช้ำน้ำใจ -เจ็บท้อง -เจ็บปวด -เจ็บป่วย -เจ็บร้อน -เจ็บแสบ -เจรจา -เจริญ -เจริญตาเจริญใจ -เจริญพร -เจริญพันธุ์ -เจริญรอย -เจริญสมณธรรม -เจริญอาหาร -เจริด -เจรียง -เจลียง -เจว็ด -เจษฎา -เจ๊สัว -เจอ -เจ่อ -เจ๋อ -เจ๋อเจ๊อะ -เจอร์เมเนียม -เจอะ -เจา -เจ่า -เจ้า -เจ๊า -เจ้ากรม -เจ้ากรรม -เจ้ากรรมนายเวร -เจ้ากระทรวง -เจ้ากี้เจ้าการ -เจ้ากู -เจ้าขรัว -เจ้าของ -เจ้าขา -เจ้าข้า -เจ้าข้าวแดงแกงร้อน -เจ้าขุนมุลนาย -เจ้าขุนมูลนาย -เจ้าไข้ -เจ้าคณะ -เจ้าครอก -เจ้าคารม -เจ้าคุณ -เจ้าคุณจอม -เจ้าแง่เจ้างอน -เจ้าแง่แสนงอน -เจ้าจอม -เจ้าจอมมารดา -เจ้าจำนวน -เจ้าจำนำ -เจ่าจุก -เจ้าชีวิต -เจ้าชู้ -เจ้าเซ็น -เจ้าเซ็นเต้นต้ำบุด -เจ้าตัว -เจ้าถ้อยหมอความ -เจ้าท่า -เจ้าที่ -เจ้าทุกข์ -เจ้าไทย -เจ้านาย -เจ้าเนื้อ -เจ้าบ้าน -เจ้าบ่าว -เจ้าบุญนายคุณ -เจ้าเบี้ย -เจ้าประคุณ -เจ้าประคู้น -เจ้าปู่ -เจ้าพนักงาน -เจ้าพนักงานบังคับคดี -เจ้าพนักงานพิทักษ์ทรัพย์ -เจ้าพนักงานภูษามาลา -เจ้าพนักงานสนมพลเรือน -เจ้าพระเดชนายพระคุณ -เจ้าพระยา -เจ้าพ่อ -เจ้าพายุ -เจ้าฟ้า -เจ้าฟ้าหญิงสิรินธร -เจ้าภาพ -เจ้าภาษี -เจ้ามรดก -เจ้ามือ -เจ้าแม่ -เจ้าไม่มีศาล สมภารไม่มีวัด -เจ้ายศ -เจ้าเรือน -เจ้าเล่ห์ -เจ้าสัว -เจ้าสาว -เจ้าสำนวน -เจ้าสำบัดสำนวน -เจ้าสำราญ -เจ้าหน้า -เจ้าหน้าเจ้าตา -เจ้าหน้าที่ -เจ้าหนี้ -เจ้าหลวง -เจ้าหล่อน -เจ้าหัว -เจ้าอธิการ -เจ้าอารมณ์ -เจ้าอาวาส -เจาะ -เจาะจง -เจาะจมูก -เจิ่ง -เจิด -เจิดจ้า -เจิ่น -เจิม -เจีย -เจียง -เจียด -เจียดยา -เจียน -เจี๋ยน -เจี๊ยบ -เจียม -เจี๋ยมเจี้ยม -เจียมสังขาร -เจียร -เจียระไน -เจียระบาด -เจียว -เจี๊ยวจ๊าว -เจือ -เจือจาง -เจือจาน -เจื่อน -เจือปน -เจื้อย -เจื้อยแจ้ว -เจือสม -แจ -แจ้ -แจ๋ -แจก -แจกจ่าย -แจกแจง -แจกไพ่ -แจกัน -แจง -แจ่ง -แจ้ง -แจ้งความ -แจงรูป -แจงลอน -แจงสี่เบี้ย -แจจน -แจจัน -แจ๊ด -แจดแจ้ -แจ๊ดแจ๋ -แจตร -แจ้น -แจบ -แจ่ม -แจ่มแจ้ง -แจ่มใส -แจร -แจรก -แจรง -แจว -แจ่ว -แจ้ว -แจ้วๆ -แจ๋ว -แจ๋วแหวว -แจะ -โจก -โจ๊ก -โจง -โจงกระเบน -โจงกระเบนตีเหล็ก -โจ่งครึ่ม -โจ๋งครึ่ม -โจ่งครุ่ม -โจงโคร่ง -โจ๋งเจ๋ง -โจ่งแจ้ง -โจท -โจทก์ -โจทเจ้า -โจทนา -โจทย์ -โจน -โจนร่ม -โจม -โจมตี -โจมทัพ -โจร -โจร- -โจรกรรม -โจรสลัด -โจล -โจษ -โจษจน -โจษจัน -โจษแจ -ใจ -ใจกลาง -ใจกว้าง -ใจขุ่น -ใจแข็ง -ใจความ -ใจคอ -ใจแคบ -ใจง่าย -ใจจดใจจ่อ -ใจจืด -ใจเฉื่อย -ใจชื้น -ใจดำ -ใจดี -ใจเด็ด -ใจเดียว -ใจเดียวกัน -ใจต่ำ -ใจเติบ -ใจแตก -ใจโต -ใจถึง -ใจน้อย -ใจบาน -ใจบุญ -ใจเบา -ใจปลาซิว -ใจป้ำ -ใจแป้ว -ใจฝ่อ -ใจเพชร -ใจมา -ใจมือ -ใจไม่ดี -ใจไม้ไส้ระกำ -ใจยักษ์ -ใจเย็น -ใจร้อน -ใจร้าย -ใจเร็ว -ใจลอย -ใจสูง -ใจเสาะ -ใจเสีย -ใจหนักแน่น -ใจหาย -ใจเหี่ยวแห้ง -ใจใหญ่ใจโต -ใจอ่อน -ไจ -ไจ้ -ไจ้ๆ -ไจร -ฉ -ฉก -ฉกจวัก -ฉกฉวย -ฉกชิง -ฉกรรจ์ -ฉกรรจ์ลำเครื่อง -ฉกษัตริย์ -ฉกาจ -ฉกาจฉกรรจ์ -ฉกามาพจร -ฉกามาวจร -ฉง -ฉงน -ฉงาย -ฉทวาร -ฉทานศาลา -ฉทึง -ฉนวน -ฉนัง -ฉนาก -ฉนำ -ฉบบ -ฉบัง -ฉบัด -ฉบับ -ฉบำ -ฉพีสติม- -ฉม -ฉมบ -ฉมวก -ฉมวย -ฉม่อง -ฉมัง -ฉมัน -ฉมา -ฉมำ -ฉล -ฉลวย -ฉลวยฉลาด -ฉลอง -ฉลองได -ฉลองพระกรน้อย -ฉลองพระเนตร -ฉลองพระบาท -ฉลองพระศอ -ฉลองพระหัตถ์ -ฉลองพระองค์ -ฉลององค์ -ฉลอม -ฉลอมท้ายญวน -ฉลัก -ฉลับ -ฉลาก -ฉลากบาง -ฉลาง -ฉลาด -ฉลาม -ฉลามเสือ -ฉลาย -ฉลิว -ฉลีก -ฉลุ -ฉลุกฉลวย -ฉลุลาย -ฉลู -ฉวย -ฉวยฉาบ -ฉวะ -ฉวัดเฉวียน -ฉวาง -ฉวี -ฉศก -ฉ้อ -ฉอก -ฉ้อโกง -ฉ่อง -ฉ้อฉล -ฉอดๆ -ฉ่อย -ฉ้อราษฎร์บังหลวง -ฉอเลาะ -ฉะ -ฉะกะ -ฉะฉาด -ฉะฉาน -ฉะฉ่ำ -ฉะฉี่ -ฉะเฉื่อย -ฉะต้า -ฉะนั้น -ฉะนี้ -ฉะหน้าโรง -ฉะอ้อน -ฉักกะ -ฉัฐ -ฉัด -ฉัตร -ฉัตร- -ฉัตรบรรณ -ฉัตรมงคล -ฉัตรสามชั้น -ฉัททันต์ -ฉัน -ฉันใด -ฉันท- -ฉันท์ -ฉันทลักษณ์ -ฉันทวิลาส -ฉันทศาสตร์ -ฉันทะ -ฉันทา -ฉันทาคติ -ฉันทานุมัติ -ฉันนั้น -ฉันวุติ -ฉับ -ฉับๆ -ฉับพลัน -ฉับไว -ฉัพพรรณรังสี -ฉัยยา -ฉ่า -ฉาก -ฉากญี่ปุ่น -ฉากตั้ง -ฉากทิ้ง -ฉากน้อย -ฉากบังเพลิง -ฉากใหญ่ -ฉาง -ฉ่าง -ฉ่าฉาว -ฉาด -ฉาดฉาน -ฉาตกภัย -ฉาทน -ฉาน -ฉาบ -ฉาบฉวย -ฉาป -ฉาย -ฉายเฉิด -ฉายา -ฉายาลักษณ์ -ฉาว -ฉาวโฉ่ -ฉ่ำ -ฉำฉา -ฉำเฉง -ฉำแฉะ -ฉิ่ง -ฉิ่งตรัง -ฉิน -ฉินท- -ฉินท์ -ฉินทฤกษ์ -ฉิบ -ฉิบหาย -ฉิมพลี -ฉิว -ฉี่ -ฉีก -ฉีกหน้า -ฉีด -ฉีดยา -ฉุ -ฉุก -ฉุกคิด -ฉุกใจ -ฉุกเฉิน -ฉุกละหุก -ฉุด -ฉุน -ฉุนเฉียว -ฉุป -ฉุป- -ฉุปศาสตร์ -ฉุย -ฉุยฉาย -ฉุยฉายเข้าวัง -ฉู่ -ฉู่ฉี่ -ฉูด -ฉูดฉาด -เฉ -เฉก -เฉโก -เฉ่ง -เฉไฉ -เฉด -เฉท -เฉนียน -เฉพาะ -เฉพาะกาล -เฉพาะกิจ -เฉพาะตัว -เฉพาะพระพักตร์ -เฉพาะหน้า -เฉย -เฉยๆ -เฉยเมย -เฉลย -เฉลว -เฉลา -เฉลิม -เฉลิมพระชนมพรรษา -เฉลี่ย -เฉลียง -เฉลี่ยง -เฉลียบ -เฉลียว -เฉลียวใจ -เฉลียวฉลาด -เฉวียง -เฉวียงบ่า -เฉวียน -เฉอะแฉะ -เฉา -เฉาก๊วย -เฉาโฉด -เฉาฮื้อ -เฉาะ -เฉาะๆ -เฉาะปล่อง -เฉิด -เฉิดฉัน -เฉิดฉาย -เฉิดฉิน -เฉิบ -เฉิบๆ -เฉียง -เฉียงพร้าดำ -เฉียงพร้านางแอ -เฉียงพร้ามอญ -เฉียด -เฉียบ -เฉียบขาด -เฉียบพลัน -เฉียบแหลม -เฉียว -เฉี่ยว -เฉียวฉุน -เฉือน -เฉื่อย -เฉื่อยๆ -เฉื่อยชา -แฉ -แฉ่ -แฉก -แฉกๆ -แฉง -แฉ่ง -แฉโพย -แฉลบ -แฉล้ม -แฉละ -แฉว -แฉะ -แฉะแบะ -โฉ -โฉ่ -โฉเก -โฉ่งฉ่าง -โฉงเฉง -โฉ่ฉาว -โฉด -โฉดเฉา -โฉนด -โฉบ -โฉเบ๊ -โฉม -โฉมงาม -โฉมฉาย -โฉมเฉลา -โฉมตรู -โฉมยง -โฉมศรี -โฉมหน้า -โฉลก -ไฉน -ไฉไล -ช -ชก -ชกมวย -ชกา -ชค- -ชคดี -ชคัตตรัย -ชง -ชงคา -ชงโค -ชงฆ- -ชงฆ์ -ชงฆา -ชงโลง -ชฎา -ชฎากลีบ -ชฎาเดินหน -ชฎาธาร -ชฎาแปลง -ชฎาพอก -ชฎามหากฐิน -ชฎามังษี -ชฎามังสี -ชฎิล -ชด -ชดช้อย -ชดเชย -ชดใช้ -ชทึง -ชน -ชน- -ชนก -ชนก- -ชนกกรรม -ชนช้าง -ชนนี -ชนบท -ชนม- -ชนม์ -ชนมพรรษา -ชนมาพิธี -ชนมายุพิธี -ชนวน -ชนหมู่น้อย -ชนะ -ชนัก -ชนักติดหลัง -ชนา -ชนาง -ชนิด -ชนินทร์ -ชเนตตี -ชบา -ชบาหนู -ชปโยค -ชม -ชมชัว -ชมชาญ -ชมเชย -ชมไช -ชมดชม้อย -ชมนาด -ชมบ -ชมเปาะ -ชมพู -ชมพู่ -ชมพูทวีป -ชมพูนท -ชมพูนุท -ชมพูพาดบ่า -ชมรม -ชมเลาะ -ชมสวนสวรรค์ -ชม้อย -ชมัน -ชมา -ชม้าย -ชไม -ชย -ชย- -ชยา -ชโย -ชร -ชรทึง -ชรโมล -ชรไม -ชรราง -ชรริน -ชรเรือด -ชรแรง -ชรแร่ง -ชรโลง -ชรอกชรัง -ชรออบ -ชรอัด -ชรอ่ำ -ชรอื้อ -ชรอุ่ม -ชระ -ชระงม -ชระง่อน -ชระงำ -ชระดัด -ชระดื่น -ชระเดียด -ชระเดียดชระดัด -ชระบอบ -ชระบาบ -ชระมด -ชระมัว -ชระมื่น -ชระมุกชระมอม -ชระมุ่น -ชระเมียง -ชระเมียน -ชระลอ -ชระลอง -ชระล่อง -ชระลั่ง -ชระลัด -ชระล้ำ -ชระลุ -ชระแลง -ชระอับ -ชระอาบ -ชระเอม -ชรัด -ชรัว -ชรา -ชรากากี -ชราธรรม -ชราบ -ชราบชรับ -ชราภาพ -ชรายุ -ชริน -ชรุก -ชรูบ -ชล -ชล- -ชลจร -ชลจัณฑ์ -ชลชาติ -ชลธาร -ชลธารก -ชลธิศ -ชลธี -ชลนัยน์ -ชลนา -ชลเนตร -ชลประทาน -ชลมารค -ชลสถาน -ชลัมพุ -ชลาธาร -ชลาพุช -ชลามพุช -ชลาลัย -ชลาศัย -ชลี -ชลูกา -ชเล -ชโลง -ชโลทร -ชโลม -ชว- -ช่วง -ช่วงชัย -ช่วงชิง -ช่วงโชติ -ช่วงใช้ -ช่วงทรัพย์ -ช่วงบาท -ช่วงเมือง -ช่วงสิทธิ์ -ชวด -ชวน -ชวนชม -ชวนหัว -ชวย -ช่วย -ช่วยเหลือ -ชวร -ชวลิต -ชวัก -ชวา -ชวาล -ชวาลา -ช่อ -ชอก -ช็อกโกเลต -ช็อกโกแลต -ชอกช้ำ -ชอง -ช่อง -ช้อง -ช่องกุด -ช่องเขา -ช่องแคบ -ช่องดาล -ช่องตีนกา -ช้องนาง -ช้องนางคลี่ -ช่องไฟ -ช้องแมว -ชองระอา -ชอน -ช่อน -ช้อน -ช้อนนาง -ช้อนหอย -ชอบ -ชอบกล -ชอบใจ -ชอบธรรม -ชอบพอ -ชอบมาพากล -ช่อฟ้า -ชอม -ช่อม่วง -ช่อย -ช้อย -ช้อยชด -ช้อยช่างรำ -ช้อยนางรำ -ชอล์ก -ช่ออินทนิล -ชอ่ำ -ชอื้อ -ชอุ่ม -ชะ -ชะคราม -ชะงอก -ชะง่อน -ชะงัก -ชะงัด -ชะงาบ -ชะง้ำ -ชะงุ้ม -ชะเง้อ -ชะเงื้อม -ชะแง้ -ชะโงก -ชะโงกผา -ชะฉ่า -ชะช่อง -ชะชะ -ชะช้า -ชะชิด -ชะดีชะร้าย -ชะโด -ชะตา -ชะต้า -ชะนี -ชะนีร่ายไม้ -ชะนุง -ชะเนาะ -ชะเนียง -ชะพลู -ชะเพลิง -ชะมด -ชะมดเชียง -ชะมดต้น -ชะมบ -ชะมวง -ชะมัง -ชะมัด -ชะแม่ -ชะรอย -ชะลอ -ชะลอม -ชะล่า -ชะลาน -ชะลิน -ชะลูด -ชะเลง -ชะเลย -ชะแล็ก -ชะแลง -ชะวัง -ชะวาก -ชะวากทะเล -ชะวาด -ชะวุ้ง -ชะเวิกชะวาก -ชะแวง -ชะอม -ชะอ้อน -ชะเอม -ชะโอน -ชัก -ชักกระบี่สี่ท่า -ชักคราม -ชักโครก -ชักเงา -ชักจูง -ชักชวน -ชักช้า -ชักซอสามสาย -ชักซุงตามขวาง -ชักตะพานแหงนเถ่อ -ชักนำ -ชักน้ำเข้าลึก ชักศึกเข้าบ้าน -ชักเนื้อ -ชักใบให้เรือเสีย -ชักแป้งผัดหน้า -ชักพระ -ชักแม่น้ำทั้งห้า -ชักยันต์ -ชักเย่อ -ชักใย -ชักรูป -ชักศพ -ชักสองแถว -ชักสื่อ -ชักหน้า -ชักหน้าไม่ถึงหลัง -ชัค- -ชัง -ชั่ง -ชังคา -ชังฆ- -ชังฆวิหาร -ชั่งใจ -ชั่งหลวง -ชัชวาล -ชัฏ -ชัด -ชัดเจน -ชัดช้า -ชัน -ชั้น -ชันกาด -ชันคอ -ชั้นฉาย -ชั้นชั่ว -ชันชี -ชั้นเชิง -ชันตาฆร -ชันตุ -ชันนะตุ -ชันนุ -ชันนุกะ -ชันพอน -ชันโรง -ชันษา -ชันสน -ชันสูตร -ชันสูตรพลิกศพ -ชัปน -ชัพ -ชัมพูนท -ชัย -ชัย- -ชัยบาน -ชัยพฤกษ์ -ชัยภูมิ -ชัยเภรี -ชัยศรี -ชัลลุกา -ชั่ว -ชั้ว -ชั่วคน -ชั่วคราว -ชัวชม -ชั่วช้า -ชั่วช่างชี ดีช่างสงฆ์ -ชั่วแต่ว่า -ชั่วนาตาปี -ชั่วโมง -ชั่วแล่น -ชา -ช้า -ช้าก่อน -ชาคร -ชาคริต -ชาคริยานุโยค -ช่าง -ช้าง -ช่างกระไร -ช่างเครื่อง -ช้างงวง -ช้างชำนิ -ช้างชูงวง -ช้างต่อ -ช้างตายทั้งตัวเอาใบบัวมาปิด -ช่างทอง -ช้างทำลายโรง -ช้างน้อย -ช้างน้าว -ช้างน้ำ -ช้างประสานงา -ช่างปะไร -ช้างผะชด -ช้างเผือก -ช้างพลาย -ช้างพัง -ช่างฟิต -ช่างไฟ -ช้างร้อง -ช้างสะบัดหญ้า -ช้างเหยียบ -ช่างเหล็ก -ช้างใหญ่ -ช้าช่อน -ชาญ -ชาด -ชาดก -ชาดหรคุณ -ช้าๆ ได้พร้าสองเล่มงาม -ชาต- -ชาตบุษย์ -ชาตรี -ชาตรูป -ชาตสระ -ชาตะ -ชาตา -ชาติ -ชาติ- -ชาติธรรม -ชาตินิยม -ชาติพันธุ์ -ชาติพันธุ์วรรณนา -ชาติพันธุ์วิทยา -ชาติภูมิ -ชาติมาลา -ชาติรส -ชาน -ชานชาลา -ชานวาทิก -ช้านางนอน -ช้านาน -ชานุ -ชานุกะ -ชานุมณฑล -ช้าปี่ -ชาปีไหน -ช้าเป็นการ นานเป็นคุณ -ช้าแป้น -ช้าพลู -ชาม -ชามพูนท -ชามาดร -ชามาดา -ชามาตุ -ชาย -ชายกระเบน -ชายกระเบนเหน็บ -ชายคา -ชายแครง -ชายชาตรี -ชายตา -ชายทะเล -ชายธง -ชายผ้าสีดา -ชายฝั่ง -ชายเฟือย -ชายสามโบสถ์ -ชายไหว -ชายา -ชายาชีพ -ชายานุชีพ -ชาเยนทร์ -ชาเยศ -ชาร -ชารี -ชาล -ชาล- -ชาลกรรม -ชาลา -ชาลินี -ช้าลูกหลวง -ช้าเลือด -ชาว -ชาวนอก -ชาวน้ำ -ชาวม่าน -ชาวเล -ชาววัง -ชาวี -ช้าหมอง -ชำ -ช่ำ -ช้ำ -ชำงัด -ชำงาย -ชำงือ -ช่ำใจ -ช้ำใจ -ช้ำชอก -ช่ำชอง -ช่ำช่า -ชำนน -ชำนรร -ชำนะ -ชำนัญ -ชำนัญพิเศษ -ชำนัน -ชำนาญ -ชำนาญเกลากลอน -ชำนิ -ชำนิชำนาญ -ชำเนียน -ชำเนียร -ช่ำปอด -ชำมะนาด -ชำมะเลียง -ชำร่วย -ชำระ -ช้ำรั่ว -ชำรุด -ชำเรา -ชำเราะ -ชำแรก -ชำแระ -ชำลา -ชำเลือง -ช้ำเลือดช้ำหนอง -ชำแหละ -ชิ -ชิง -ชิ่ง -ชิงคม -ชิงช่วง -ชิงชัง -ชิงชัน -ชิงชัย -ชิงช้า -ชิงช้าชาลี -ชิงช้าสวรรค์ -ชิงชี่ -ชิงเชิง -ชิงดวง -ชิงดีชิงเด่น -ชิงทรัพย์ -ชิงเปรต -ชิงพลบ -ชิงสุกก่อนห่าม -ชิงไหวชิงพริบ -ชิงฮื้อ -ชิชะ -ชิชิ -ชิณณะ -ชิด -ชิเดนทรีย์ -ชิต -ชิต- -ชิตินทรีย์ -ชิน -ชิ่น -ชิ้น -ชินโต -ชินบุตร -ชิ้นเอก -ชิโนรส -ชิม -ชิมแปนซี -ชิมลาง -ชิยา -ชิรณ- -ชิรณะ -ชิรณัคคิ -ชิระ -ชิวหา -ชิวหาสดมภ์ -ชิสา -ชี -ชี่ -ชี้ -ชี้ขาด -ชี้แจง -ชี้ช่อง -ชีต้น -ชี้ตัว -ชี้นกบนปลายไม้ -ชี้นกเป็นนก ชี้ไม้เป็นไม้ -ชี้นำ -ชี้นิ้ว -ชี้แนะ -ชีปะขาว -ชีเปลือย -ชีผะขาว -ชีผ้าขาว -ชีฝรั่ง -ชีพ -ชีพ- -ชีพจร -ชีพิต -ชีพิตักษัย -ชีพุก -ชีฟอง -ชี้ฟ้า -ชีมืด -ชีรณ- -ชีรณัคคิ -ชีระ -ชีล้อม -ชีลา -ชีลาว -ชีว- -ชีวเคมี -ชีวงคต -ชีวประวัติ -ชีวโลก -ชีววิทยา -ชีวะ -ชีวัน -ชีวันตราย -ชีวา -ชีวาตม์ -ชีวาลัย -ชีวิต -ชีวิตชีวา -ชีวิตักษัย -ชีวิตินทรีย์ -ชีวิน -ชีวี -ชี้สองสถาน -ชืด -ชื่น -ชื้น -ชื่นชม -ชื่นชมยินดี -ชื่นบาน -ชื่นมื่น -ชื่อ -ชื้อ -ชื่อตัว -ชื่อย่อ -ชื่อเล่น -ชื่อว่า -ชื่อสกุล -ชื่อเสียง -ชุ -ชุก -ชุกชี -ชุกชุม -ชุ่ง -ชุ้ง -ชุณห- -ชุณหปักษ์ -ชุด -ชุติ -ชุติมา -ชุน -ชุบ -ชุบชีวิต -ชุบชู -ชุบตัว -ชุบมือเปิบ -ชุบย้อม -ชุบเลี้ยง -ชุบสรง -ชุบอาบ -ชุม -ชุ่ม -ชุ่มใจ -ชุมชน -ชุ่มชื่น -ชุ่มชื้น -ชุมทางรถไฟ -ชุมนุม -ชุมนุมชน -ชุมพร -ชุมพา -ชุมเพ็ด -ชุมแพรก -ชุมรุม -ชุมสาย -ชุมสายโทรศัพท์ -ชุมแสง -ชุมเห็ด -ชุ่ย -ชุ่ยๆ -ชุลมุน -ชุลี -ชุษณ- -ชุษณปักษ์ -ชุษณะ -ชู -ชู้ -ชูกลิ่น -ชูคอ -ชูใจ -ชูชีพ -ชูรส -ชูโรง -ชู้สาว -ชูหน้าชูตา -ชู้เหนือขันหมาก -ชู้เหนือผัว -ชู้เหนือผี -เช็ค -เช็คขีดคร่อม -เช็คไปรษณีย์ -เช้ง -เชงเลง -เช้งวับ -เช็ด -เช็ดน้ำ -เช็ดหน้า -เช็ดหม้อ -เชน -เช่น -เชย -เชยชม -เชรา -เชราะ -เชริด -เชลง -เชลย -เชลยศักดิ์ -เชลยศึก -เชลแล็ก -เชลียง -เชวง -เชษฐ- -เชษฐะ -เชษฐา -เชอ -เช่า -เช้า -เช่าช่วง -เช่าซื้อ -เช้าตรู่ -เช่าถือสวน -เช่าทรัพย์ -เช่าพระ -เช้ามืด -เชาว์ -เชาวน์ -เชิง -เชิงกรวย -เชิงกราน -เชิงกล -เชิงกลอน -เชิงชั้น -เชิงชาย -เชิงซ้อน -เชิงเดิน -เชิงเดียว -เชิงเดี่ยว -เชิงตะกอน -เชิงทรง -เชิงเทิน -เชิงมุม -เชิงเวียน -เชิงอรรถ -เชิญ -เชิด -เชิดจีน -เชิดฉิ่ง -เชิดชู -เชิดหนัง -เชิดหน้าชูตา -เชิดหุ่น -เชิ้ต -เชีย -เชี้ย -เชียง -เชี่ยน -เชี่ยนหมาก -เชียบ -เชี่ยม -เชียร -เชียร์ -เชียรณ์ -เชียว -เชี่ยว -เชี่ยวชาญ -เชื่อ -เชื้อ -เชือก -เชือกเขา -เชือกบาศ -เชื่อง -เชื่องช้า -เชื่อใจ -เชื้อชาติ -เชื้อเชิญ -เชือด -เชื่อถือ -เชือน -เชือนแช -เชื้อเพลิง -เชื่อฟัง -เชื้อไฟ -เชื่อม -เชื่อมือ -เชื้อไม่ทิ้งแถว -เชื้อรา -เชื้อโรค -เชื่อวัน -เชื้อสาย -เชื้อหมัก -แช -แช่ -แช่ง -แช่งชักหักกระดูก -แช่งน้ำ -แชงมา -แชบ๊วย -แช่เบ้า -แช่ม -แช่มช้อย -แช่มชื่น -แช่เย็น -แชร์ -แชรง -แชล่ม -แช่อิ่ม -แชะ -โชก -โชกๆ -โชกโชน -โชค -โชงโลง -โชดก -โชดึก -โชต -โชตก -โชติ -โชติ- -โชติก- -โชติช่วง -โชติรส -โชน -โชมโรม -โชย -โชยงการ -โชยชาย -โชยติส -โชรม -โชว์ -โชโหว -ใช่ -ใช้ -ใช้กรรม -ใช้ได้ -ใช้เนื้อ -ใช้บน -ใช้ใบ -ใช้เรือ -ใช้สอย -ไช -ไชนะ -ไชย -ไชย- -ไชยเภท -ไชโย -ซ -ซก -ซ่ก -ซงดำ -ซ่งฮื้อ -ซง้า -ซด -ซน -ซ่น -ซ้น -ซบ -ซบเซา -ซม -ซมซาน -ซรอกซรัง -ซวด -ซวดเซ -ซวดทรง -ซวน -ซวนเซ -ซวย -ซอ -ซอก -ซอกซอน -ซอกซัง -ซอกแซก -ซอง -ซ่อง -ซ่องๆ -ซ้อง -ซ่องแซ่ง -ซองพลู -ซองมือ -ซองแมว -ซ้องแมว -ซ่องสุม -ซ่องเสพ -ซองหาง -ซอแซ -ซ้อแซ้ -ซอน -ซ่อน -ซ้อน -ซ้อนกล -ซ่อนกลิ่น -ซ่อนเงื่อน -ซ้อนซับ -ซ่อนทราย -ซ่อนรูป -ซ่อนหา -ซอม -ซ่อม -ซ้อม -ซ้อมค้าง -ซอมซ่อ -ซ้อมซัก -ซ่อมแซม -ซ่อมแปลง -ซ้อมพยาน -ซ้อมพวน -ซ้อมใหญ่ -ซอย -ซอยผม -ซอส -ซะซร้าว -ซะซ่อง -ซะซอเซีย -ซะซิกซะแซ -ซะซิบ -ซะเซาะ -ซะเซียบ -ซัก -ซักซ้อม -ซักไซ้ -ซักฟอก -ซักส้าว -ซักแห้ง -ซัง -ซั้ง -ซังกะตาย -ซังแซว -ซังตาย -ซัด -ซัดข้าวสาร -ซัดเซ -ซัดทอด -ซัดน้ำ -ซัดยา -ซั้น -ซับ -ซับขนุน -ซับซ้อน -ซับซาบ -ซับซี่ -ซับใน -ซับพระพักตร์ -ซับมัน -ซัม -ซัลฟา -ซั้ว -ซา -ซ่า -ซาก -ซากดึกดำบรรพ์ -ซากศพ -ซาง -ซ่าง -ซาด -ซาน -ซ่าน -ซ่านเซ็น -ซาบซ่าน -ซาบซึ้ง -ซ่าโบะ -ซาแมเรียม -ซ้าย -ซาลาเปา -ซาว -ซาวน้ำ -ซาวเสียง -ซ่าหริ่ม -ซ้ำ -ซ้ำซ้อน -ซ้ำซาก -ซ้ำเติม -ซ้ำร้าย -ซ้ำสาม -ซิ -ซิก -ซิกๆ -ซิกซี้ -ซิกแซ็ก -ซิการ์ -ซิงโคนา -ซิ่น -ซินนามิก -ซินแส -ซิบ -ซิบๆ -ซิบซับ -ซิป -ซิฟิลิส -ซิลิคอน -ซิว -ซี -ซี่ -ซีก -ซี่โครง -ซี้ซอน -ซีเซียม -ซีด -ซีดเซียว -ซีนอน -ซีป่าย -ซีเมนต์ -ซีเรียม -ซีลีเนียม -ซึก -ซึง -ซึ่ง -ซึ้ง -ซึ่งหน้า -ซึม -ซึมกะทือ -ซึมซาบ -ซึมทราบ -ซื่อ -ซื่อๆ -ซื้อ -ซื้อขาย -ซื้อควายหน้านา ซื้อผ้าหน้าตรุษ -ซื้องัวหน้านา ซื้อผ้าหน้าหนาว -ซื่อตรง -ซื้อรำคาญ -ซื้อรู้ -ซื่อสัตย์ -ซื้อหน้า -ซื่อเหมือนแมวนอนหวด -ซุก -ซุกซน -ซุกซ่อน -ซุกซิก -ซุง -ซุน -ซุบ -ซุบซิบ -ซุบซู่ -ซุป -ซุ่ม -ซุ้ม -ซุ้มกระต่าย -ซุ่มคม -ซุ่มซ่าม -ซุมแซว -ซุ่มเสียง -ซุย -ซู่ -ซู่ๆ -ซู่กั้นรั้วไซมาน -ซูโครส -ซู่ซ่า -ซูด -ซู้ด -ซูดซาด -ซูบ -เซ -เซ็ก -เซแคนต์ -เซ็ง -เซ่ง -เซ้ง -เซ็งแซ่ -เซซัง -เซต -เซน -เซ็น -เซ่น -เซนติกรัม -เซนติเกรด -เซนติเมตร -เซนติลิตร -เซ่นเหล้า -เซปักตะกร้อ -เซรา -เซราะ -เซรุ่ม -เซลเซียส -เซลล์ -เซลล์ทุติยภูมิ -เซลล์ปฐมภูมิ -เซลลูลอยด์ -เซลลูโลส -เซ่อ -เซ่อซ่า -เซอร์โคเนียม -เซอะ -เซา -เซ้าซี้ -เซาะ -เซาะลาย -เซิง -เซิ้ง -เซียน -เซียบ -เซียมซี -เซียว -เซี่ยว -เซี่ยวกาง -เซื่อง -แซ -แซ่ -แซ็กคาริน -แซ็กคารินโซเดียม -แซง -แซงแซว -แซ่ซ้อง -แซด -แซดๆ -แซบ -แซม -แซยิด -แซ่ว -แซะ -โซ -โซ่ -โซก -โซ่ง -โซงโขดง -โซซัดโซเซ -โซเซ -โซดา -โซดาแผดเผา -โซดาไฟ -โซเดียม -โซเดียมคาร์บอเนต -โซเดียมซัลเฟต -โซเดียมไซคลาเมต -โซเดียมไฮโดรเจนกลูทาเมต -โซเดียมไฮโดรเจนคาร์บอเนต -โซเดียมไฮโดรเจนซัลเฟต -โซม -โซรม -โซรมประทยด -โซรมโรม -โซรมศัสตราวุธ -โซลา -ไซ -ไซ้ -ไซเกิล -ไซโคลน -ไซน์ -ไซยาไนด์ -ไซร้ -ไซเรน -ไซโล -ฌ -ฌาน -ฌาปน- -ฌาปนกิจ -ฌาปนสถาน -เฌอ -เฌอเอม -ญ -ญญ่าย -ญวน -ญัตติ -ญาณ -ญาณ- -ญาณทัสนะ -ญาณวิทยา -ญาณศาสตร์ -ญาติ -ญาติ- -ญาติกา -ญาติดีกัน -ญาติเภท -ญิบ -ญี่ -ญี่ปุ่น -เญยธรรม -ไญยธรรม -ฎ -ฎีกา -ฏ -ฐ -ฐกัด -ฐากูร -ฐาน -ฐาน- -ฐานกรณ์ -ฐานเขียง -ฐานเชิงบาตร -ฐานเท้าสิงห์ -ฐานบัทม์ -ฐานราก -ฐานสิงห์ -ฐานะ -ฐานันดร -ฐานานุกรม -ฐานานุรูป -ฐานานุศักดิ์ -ฐานียะ -ฐาปน- -ฐาปนา -ฐายี -ฐิต -ฐิติ -ฑ -ฑังส- -ฑาก- -ฑาหก -ฑาหะ -ฒ -เฒ่า -เฒ่าแก่ -เฒ่าหัวงู -ณ -ณรงค์ -เณร -เณรหน้าไฟ -เณรหางนาค -ด -ดก -ดกดื่น -ดง -ด้ง -ดงดาน -ดงดิบ -ดงดึก -ดงวาย -ด้น -ด้นดั้น -ดนโด่ -ดนตรี -ด้นถอยหลัง -ดนย -ดนัย -ดนุ -ดนุช -ดนู -ดบัสวิน -ดบัสวี -ดม -ดมไร -ดร -ดรงค์ -ดรณี -ดรธาน -ดรรชนี -ดรรชนีหักเห -ดราฟต์ -ดรุ -ดรุณ -ดรุณาณัติ -ดรุณี -ดฤถี -ดล -ดล- -ดลใจ -ดลบันดาล -ดลภาค -ดวง -ด้วง -ดวงแก้ว -ดวงใจ -ดวงเดือนประดับดาว -ดวงตา -ดวงสมร -ด้วงโสน -ดวจ -ดวด -ด่วน -ด้วน -ด้วมเดี้ยม -ด้วย -ด้วยว่า -ดอก -ดอกกระบอก -ดอกกะทือ -ดอกก้าน -ดอกข้าวใหม่ -ดอกจอก -ดอกจัน -ดอกจันทน์ -ดอกจิก -ดอกชนต้น -ดอกดั้ว -ดอกด้าย -ดอกดิน -ดอกถวายพระ -ดอกทอง -ดอกน้ำผึ้ง -ดอกบัว -ดอกบุก -ดอกเบี้ย -ดอกเบี้ยทบต้น -ดอกพิกุลร่วง -ดอกฟ้อน -ดอกฟ้า -ดอกมะขาม -ดอกมะตาด -ดอกไม้ -ดอกไม้จันทน์ -ดอกไม้จีน -ดอกไม้จีบ -ดอกไม้เจ้า -ดอกไม้ตาด -ดอกไม้ทะเล -ดอกไม้เทียน -ดอกไม้ไทร -ดอกไม้น้ำ -ดอกไม้พวง -ดอกไม้พุ่ม -ดอกไม้เพลิง -ดอกไม้ไฟ -ดอกไม้ร่วง -ดอกไม้รุ่ง -ดอกไม้ไหว -ดอกรัก -ดอกลำดวน -ดอกลำโพง -ดอกเล็บ -ดอกสร้อย -ดอกหมาก -ดอกหิน -ดอกอาว -ดอกอาวแดง -ดอง -ด่องๆ -ด้อง -ด้องๆ -ดองฉาย -ดองดึง -ดองยา -ดองหาย -ดอด -ดอน -ด่อน -ดอม -ด่อม -ด้อม -ดอย -ด้อย -ดอลลาร์ -ดะ -ดะโต๊ะยุติธรรม -ดะหมัง -ดัก -ดักคอ -ดักดน -ดักดาน -ดักเดี้ย -ดักแด้ -ดักฟัง -ดักษก -ดักษณ -ดักษณี -ดักษัน -ดัง -ดั่ง -ดั้ง -ดังจริง -ดั้งเดิม -ดังนั้น -ดังนี้ -ดังรือ -ดังฤๅ -ดังหนึ่ง -ดัชนี -ดัด -ดัดจริต -ดัดดั้น -ดัดตน -ดัดปลัก -ดัดแปลง -ดัดสันดาน -ดัตช์ -ดัน -ดั้น -ดันทุรัง -ดั้นเมฆ -ดันเหิม -ดับ -ดับขันธ์ -ดับเครื่อง -ดับจิต -ดับชีพ -ดับลม -ดัมพ์ -ดั้วเดี้ย -ดัสกร -ดัสกรี -ดา -ด่า -ดาก -ด่าง -ด้าง -ด่างทับทิม -ด่างพร้อย -ดาด -ดาดๆ -ดาดตะกั่ว -ดาดฟ้า -ดาดาษ -ดาดำ -ด่าทอ -ดาน -ด่าน -ด้าน -ด้านไม้ -ด้านหน้า -ดาบ -ดาบเงิน -ดาบปลายปืน -ดาบลาว -ดาบส -ดาบสองคม -ดาม -ด้าม -ด้ามจิ้ว -ดามพ- -ดามพ์ -ดามพวรรณ -ดามร -ดาย -ด้าย -ด้ายซัง -ด้ายดิบ -ดาร -ดารก -ดารณี -ดารดาษ -ดารา -ดาราบถ -ดาราศาสตร์ -ดาล -ดาลฉัตร -ดาลเดือด -ดาลโทสะ -ดาลัด -ดาลุ -ดาลุช -ดาว -ด่าว -ด้าว -ดาวกระจาย -ดาวเคราะห์ -ดาวดึงส์ -ดาวตก -ดาวเทียม -ดาวบส -ดาวรุ่ง -ดาวเรือง -ดาวฤกษ์ -ดาวล้อมเดือน -ดาวหาง -ดาวเหนือ -ดาษ -ดาษดา -ดาษดื่น -ดาษเดียร -ดาหงัน -ดาฬ -ดำ -ด่ำ -ด้ำ -ดำกล -ดำเกิง -ดำแคง -ดำดง -ดำดิน -ดำแดง -ดำๆ แดงๆ -ดำนา -ดำนาณ -ดำนาน -ดำนู -ดำเนิน -ดำเนินคดี -ดำเนียน -ดำเนียร -ดำบล -ดำปืน -ดำพอง -ดำโพง -ดำรง -ดำรวจ -ดำรัส -ดำริ -ดำรี -ดำรู -ดำไร -ดำฤษณา -ดำเลิง -ดำแลง -ดำหนัก -ดำหนิ -ดำหัว -ดำอวด -ดิก -ดิกๆ -ดิง -ดิ่ง -ดิ่งพสุธา -ดิฉัน -ดิฐ -ดิตถ์ -ดิถี -ดิน -ดิ้น -ดินกรด -ดินขาว -ดินเค็ม -ดินดอนสามเหลี่ยม -ดินดำ -ดินแดง -ดินนวล -ดินประสิว -ดินปืน -ดินเปรี้ยว -ดินพอกหางหมู -ดิ้นรน -ดินร่วน -ดินระเบิด -ดินส้ม -ดินสอ -ดินสอพอง -ดินสำลี -ดินหู -ดินอีหรอบ -ดิบ -ดิบดี -ดิรัจฉาน -ดิลก -ดิ่ว -ดิ้ว -ดิ้วเดี้ยว -ดิษฐ์ -ดิสโพรเซียม -ดี -ดีๆ -ดีเกลือ -ดีเกลือฝรั่ง -ดีงู -ดีใจ -ดีฉัน -ดีฉาน -ดีซ่าน -ดีเซล -ดีด -ดีดขัน -ดีดดิ้น -ดีดฝ้าย -ดีดพิมพ์ -ดีดลูกคิด -ดีดลูกคิดรางแก้ว --ดีดัก -ดีดีที -ดีเดือด -ดีแตก -ดีนาคราช -ดีเนื้อดีใจ -ดีบัว -ดีบุก -ดีปลี -ดีเปรสชัน -ดีผา -ดีฝ่อ -ดีพร -ดีไม่ดี -ดียา -ดีร้าย -ดีละ -ดีแล้ว -ดีหมี -ดีหลี -ดีหิน -ดีอกดีใจ -ดึก -ดึกดำบรรพ์ -ดึกดื่น -ดึง -ดึ่ง -ดึงดัน -ดึงดื้อ -ดึงดูด -ดึงสะ -ดึ่ม -ดื่น -ดื่นดาษ -ดื่นดึก -ดื่ม -ดื่มด่ำ -ดือ -ดื้อ -ดื้อดัน -ดื้อด้าน -ดื้อดึง -ดื้อแพ่ง -ดื้อยา -ดุ -ดุก -ดุกดิก -ดุกทะเล -ดุกลำพัน -ดุ้ง -ดุ้งดิ้ง -ดุจ -ดุจดัง -ดุจหนึ่ง -ดุด -ดุดัน -ดุเดือด -ดุน -ดุ้น -ดุบๆ -ดุม -ดุ่ม -ดุ่มๆ -ดุ่ย -ดุรค -ดุรงค์ -ดุรงคี -ดุร้าย -ดุริย- -ดุริยะ -ดุริยางค- -ดุริยางค์ -ดุริยางค์จำเรียง -ดุริยางคศาสตร์ -ดุริยางคศิลป์ -ดุล -ดุล- -ดุลการค้า -ดุลการชำระเงิน -ดุลชำระหนี้ -ดุลพินิจ -ดุลภาค -ดุลย- -ดุลยพินิจ -ดุลยภาพ -ดุลอำนาจ -ดุษฎี -ดุษฎีนิพนธ์ -ดุษฎีบัณฑิต -ดุษฎีมาลา -ดุษฎีสังเวย -ดุษณี -ดุษณีภาพ -ดุษิต -ดุสิต -ดุเหว่า -ดู -ดูกไก่ดำ -ดูกค่าง -ดูกร -ดูก่อน -ดูแคลน -ดูใจ -ดูช้างให้ดูหาง ดูนางให้ดูแม่ -ดูซิ -ดูด -ดูดดึง -ดูดดื่ม -ดูดอมดูดาย -ดูดาย -ดูดู๋ -ดูตาม้าตาเรือ -ดูถูก -ดูถูกดูแคลน -ดูเถอะ -ดูเถิด -ดูแน่ะ -ดูเบา -ดูไปก่อน -ดูรา -ดูร้าย -ดูรึ -ดูแล -ดูหมิ่น -ดูหมิ่นถิ่นแคลน -ดูหรือ -ดูหรู -ดูเหมือน -เด -เด่ -เดก -เด็ก -เด็กชา -เด็กชาย -เดกซ์โทรส -เด็กแดง -เด็กเมื่อวานซืน -เด็กหญิง -เด็กอมมือ -เดคากรัม -เดคาเมตร -เดคาลิตร -เด้ง -เด็จ -เดช -เดชน์ -เดชนะ -เดชะ -เดโช -เดโชชัย -เดโชพล -เดซิกรัม -เดซิเมตร -เดซิลิตร -เด็ด -เด็ดขาด -เด็ดดวง -เด็ดดอกไม้ร่วมต้น -เด็ดดอกไม่ไว้ขั้ว -เด็ดเดี่ยว -เด็ดบัวไม่ไว้ใย -เด็ดปลีไม่มีใย -เดน -เด่น -เดนตาย -เดนมาร์ก -เดรัจฉาน -เด๋อ -เด๋อด๋า -เดา -เด่า -เด่าๆ -เด้า -เด้าดิน -เด้าลม -เดาสวด -เดาสุ่ม -เดาะ -เดิน -เดิ่น -เดินขบวน -เดินคาถา -เดินจักร -เดินตลาด -เดินตามหลังผู้ใหญ่หมาไม่กัด -เดินแต้ม -เดินโต๊ะ -เดินทอง -เดินทัพ -เดินทาง -เดินทุ่ง -เดินเทียน -เดินธุระให้ -เดินนา -เดินป้าย -เดินรถ -เดินเรือ -เดินเรื่อง -เดินสวน -เดินสะพัด -เดินสาย -เดินเส้น -เดินหน -เดินเหิน -เดินไหม -เดินอากาศ -เดิม -เดิมที -เดิมพัน -เดี้ย -เดียง -เดียงสา -เดียด -เดียดฉันท์ -เดียร -เดียรดาษ -เดียรถ์ -เดียรถีย์ -เดียรัจฉาน -เดียว -เดี่ยว -เดี๋ยว -เดี๋ยวก่อน -เดียวกัน -เดียวดาย -เดี๋ยวเดียว -เดี๋ยวนี้ -เดียะ -เดื่อ -เดือก -เดื่อง -เดือด -เดือดดาล -เดือดร้อน -เดือน -เดือนขาด -เดือนค้างฟ้า -เดือนคี่ -เดือนคู่ -เดือนเต็ม -เดือนมืด -เดือนเย็น -เดือนร้อน -เดือนหงาย -เดือย -เดือยไก่ -แด -แด่ -แดก -แด็กๆ -แดกงา -แดกดัน -แดกแด้ -แด็กแด้ -แดกห่า -แดง -แดงน้ำ -แดด -แดดาล -แดดิ้น -แดน -แด่น -แดนไตร -แดยัน -แด่วๆ -แดะ -แดะแด๋ -โด -โด่ -โดกเดก -โด่ง -โด่งดัง -โดด -โดดๆ -โดดเดี่ยว -โดดร่ม -โด่เด่ -โดน -โดนดี -โดม -โดมไพร -โดมร -โด่ไม่รู้ล้ม -โดย -โดยจริง -โดยที่ -โดยพยัญชนะ -โดยสาร -โดยเสด็จ -โดยอรรถ -โดร -โดรณ -ใด -...ใด...หนึ่ง -ได -ได้ -ได้กัน -ได้การ -ได้แก่ -ได้แกงเทน้ำพริก -ได้ความ -ได้คิด -ได้ใจ -ได้ช่อง -ได้ชื่อ -ไดแซ็กคาไรด์ -ได้ท่า -ได้ท้าย -ได้ที -ได้ที่ -ได้ทีขี่แพะไล่ -ไดนาโม -ไดนาไมต์ -ไดโนเสาร์ -ได้ยิน -ไดเรกตริกซ์ -ได้ฤกษ์ -ได้สติ -ได้ส่วน -ได้ส่วนสัด -ได้เสีย -ได้เสียกัน -ได้หน้า -ได้หน้าลืมหลัง -ต -ตก -ตกกระ -ตกกระไดพลอยโจน -ตกขอบ -ตกขาว -ตกข้าว -ตกขุย -ตกคลัก -ตกค้าง -ตกเครือ -ตกงาน -ตกจั่น -ตกใจ -ตกดิน -ตกตะกอน -ตกตะลึง -ตกต่ำ -ตกแต่ง -ต๊กโต -ตกใต้เถรเทวทัต -ตกท้องช้าง -ตกทอด -ตกที่นั่ง -ตกนรกทั้งเป็น -ตกน้ำมัน -ตกน้ำไม่ว่าย -ตกน้ำไม่ไหล ตกไฟไม่ไหม้ -ตกใน -ตกเบ็ด -ตกเบิก -ตกประหม่า -ตกปลอก -ตกปลัก -ตกปากตกคำ -ตกเป็น -ตกเป็นเบี้ยล่าง -ตกผลึก -ตกพุ่มม่าย -ตกฟอง -ตกฟาก -ตกมัน -ตกมูก -ตกยาก -ตกรางวัล -ตกลง -ตกล่องปล่องชิ้น -ตกลูก -ตกเลือด -ตกว่า -ตกสนับ -ตกสะเก็ด -ตกแสก -ตกหนัก -ตกหมก -ตกหล่น -ตกหลุม -ตกหลุมพราง -ตกอับ -ตง -ต๋ง -ตงฉิน -ตงิด -ตงุ่น -ตจ- -ตจปัญจกกรรมฐาน -ตจสาร -ตด -ตดหมูตดหมา -ตติย- -ตถาคต -ตน -ต้น -ต้นกล -ต้นขั้ว -ต้นคอ -ต้นคิด -ต้นเงิน -ต้นฉบับ -ต้นชนดอก -ต้นเชือก -ต้นตระกูล -ต้นตอ -ต้นตายใบเป็น -ต้นตำรับ -ต้นทาง -ต้นทุน -ต้นเทียม -ต้นน้ำ -ต้นบท -ต้นแบบ -ต้นเพลิง -ต้นมือ -ต้นไม้ -ต้นร่าง -ต้นร้ายปลายดี -ต้นเรือ -ต้นเรื่อง -ต้นวายปลายดก -ต้นสังกัด -ต้นสายปลายเหตุ -ต้นเสียง -ต้นหน -ต้นเหตุ -ตนัย -ตนุ -ตนุมัธยมา -ตนุมัธยา -ตบ -ตบตา -ตบแต่ง -ตบเท้า -ตบแผละ -ตบมือ -ตบมือข้างเดียวไม่ดัง -ตบยุง -ตบหัวกลางศาลา ขอขมาที่บ้าน -ตบหัวลูบหลัง -ตบะ -ตปนียะ -ตม- -ต้ม -ต้มกะทิ -ต้มกะปิ -ต้มข่า -ต้มเค็ม -ต้มโคล้ง -ต้มปลาร้า -ต้มเปรต -ต้มเปอะ -ต้มยำ -ต้มยำกะทิ -ต้มส้ม -ต้มสุก -ตมูก -ตโม- -ตโมนุท -ตโมไพรี -ตโมหร -ตยาค -ตยาคี -ตยุติ -ตรง -ตรงๆ -ตรงกัน -ตรงกันข้าม -ตรณี -ตรม -ตรมตรอม -ตรมเตรียม -ตรมวล -ตรรก- -ตรรกศาสตร์ -ตรรกะ -ตรลบ -ตรลอด -ตรละ -ตรลา -ตรลาด -ตรเลิด -ตรวจ -ตรวจการณ์ -ตรวจข่าว -ตรวจตรา -ตรวจเลือด -ตรวด -ตรวน -ตรวย -ตรอก -ตรอง -ตรอมใจ -ตรอมตรม -ตระ -ตระกล -ตระกวน -ตระกอง -ตระกัด -ตระการ -ตระกูล -ตระกูลมูลชาติ -ตระคัร -ตระง่อง -ตระจัก -ตระชัก -ตระเชิญ -ตระดก -ตระดาษ -ตระเตรียม -ตระแตร้น -ตระทรวง -ตระนาว -ตระไน -ตระบก -ตระบอก -ตระบอง -ตระบัด -ตระบัดสัตย์ -ตระบัน -ตระเบ็ง -ตระแบ่ -ตระแบก -ตระแบง -ตระแบน -ตระแบ่น -ตระโบม -ตระพอง -ตระพัง -ตระมื่น -ตระโมจ -ตระลาการ -ตระวัน -ตระเว็ด -ตระเวน -ตระเวนไพร -ตระเวนวัน -ตระเวนเวหา -ตระสัก -ตระหง่อง -ตระหง่าน -ตระหนก -ตระหนัก -ตระหน่ำ -ตระหนี่ -ตระหนี่ตัว -ตระอร -ตระอาล -ตระโอม -ตรัง -ตรังค- -ตรังค์ -ตรังคนที -ตรังควชิราวดี -ตรับ -ตรับฟัง -ตรัย -ตรัยตรึงศ์ -ตรัส -ตรัสรู้ -ตรัสสา -ตรา -ตรากตรำ -ตราขุนพล -ตราจอง -ตราชู -ตราแดง -ตราตั้ง -ตราบ -ตราบเท่า -ตราบาป -ตราไปรษณียากร -ตราภูมิ -ตรายาง -ตราสัง -ตราสาร -ตราสิน -ตราหน้า -ตรำ -ตร่ำ -ตริ -ตริตรอง -ตริว -ตรี -ตรีกฏุก -ตรีกันสวาต -ตรีกาล -ตรีกาฬพิษ -ตรีกูฏ -ตรีเกสรมาศ -ตรีโกณ -ตรีโกณมิติ -ตรีคูณ -ตรีจีวร -ตรีฉินทลามกา -ตรีชาต -ตรีญาณรส -ตรีทศ -ตรีทิพ -ตรีทิพยรส -ตรีทุรวสา -ตรีทูต -ตรีเทวตรีคันธา -ตรีโทษ -ตรีธารทิพย์ -ตรีนิศก -ตรีเนตร -ตรีบถ -ตรีบูร -ตรีประดับ -ตรีปวาย -ตรีปิฎก -ตรีปิตผล -ตรีผลธาตุ -ตรีผลสมุตถาน -ตรีผลา -ตรีพิธพรรณ -ตรีพิษจักร -ตรีเพชรทัณฑี -ตรีเพชรพวง -ตรีเพชรสมคุณ -ตรีภพ -ตรีภพนาถ -ตรีภูมิ -ตรีภูว -ตรีมธุร -ตรีมูรติ -ตรียมก -ตรียัมปวาย -ตรีรัตน์ -ตรีโลก -ตรีโลกนาถ -ตรีโลเกศ -ตรีโลจน์ -ตรีโลหก -ตรีโลหะ -ตรีวาตผล -ตรีศก -ตรีศูล -ตรีสมอ -ตรีสมุตถาน -ตรีสัตกุลา -ตรีสันนิบาตผล -ตรีสาร -ตรีสินธุรส -ตรีสุคนธ์ -ตรีสุรผล -ตรีเสมหผล -ตรีอมฤต -ตรีอากาศผล -ตรีเอกภาพ -ตรีเอกานุภาพ -ตรึก -ตรึกตรอง -ตรึกถอง -ตรึง -ตรึงตรา -ตรึงศ- -ตรุ -ตรุณ -ตรุย -ตรุษ -ตรุษจีน -ตรู -ตรู่ -ตฤณ -ตฤณ- -ตฤณชาติ -ตฤณมัย -ตฤตีย- -ตฤตียะ -ตฤท -ตฤป -ตฤษณา -ตฤๅ -ตล -ตลก -ตลกคะนอง -ตลกบาตร -ตลกโปกฮา -ตลกหัวเราะ -ตลบ -ตลบตะแลง -ตลบนก -ตลบหลัง -ตลอด -ตลอดรอดฝั่ง -ตละ -ตลับ -ตลับนาก -ตลาด -ตลาดเงิน -ตลาดท้องน้ำ -ตลาดนัด -ตลาดน้ำ -ตลาดมืด -ตลาดยี่สาน -ตลาดสด -ตลาดหน้าคุก -ตลาดหลักทรัพย์ -ตลาดหุ้น -ตลิ่ง -ตลึง -ตวง -ตวงพระธาตุ -ต่วน -ต้วมเตี้ยม -ตวัก -ตวัด -ตวาด -ตอ -ต่อ -ต้อ -ตอก -ต๊อก -ต๊อกๆ -ต๊อกต๋อย -ต่อกร -ต้อกระจก -ตอกหน้า -ต่อกิ่ง -ต่อความยาวสาวความยืด -ตอง -ต้อง -ตองกราย -ต้องกัน -ต้องการ -ต้องคดี -ต้องใจ -ตองตอย -ต้องตา -ต้องเต -ตองแตก -ต่องแต่ง -ต้องโทษ -ต้องธรณีสาร -ตองเปรียง -ต้องสู้ -ต้องหา -ตองเหลือง -ตอด -ตอดต่อ -ต่อตา -ต่อต้าน -ต่อตาม -ต่อตี -ต่อแต้ม -ตอน -ต้อน -ต้อนรับ -ต้อนรับขับสู้ -ต้อนหมูเข้าเล้า -ต่อนัดต่อแนง -ต้อเนื้อ -ตอบ -ตอบโต้ -ตอบแทน -ตอเบา -ต่อปาก -ต่อปากต่อคำ -ต่อปากหลากคำ -ตอม -ต่อม -ต๋อม -ต่อมน้ำ -ต่อมโลหิต -ตอม่อ -ต่อย -ต้อย -ต้อยๆ -ต้อยตริ่ง -ต้อยติ่ง -ต้อยตีวิด -ต่อยหอย -ตอแย -ต่อแย้ง -ตอร์ปิโด -ต่อล้อต่อเถียง -ต้อลำไย -ต้อลิ้นหมา -ต่อว่า -ต่อสู้ -ต่อไส้ -ต่อหน้า -ต่อหน้ามะพลับ ลับหลังตะโก -ต้อหิน -ตอแหล -ต่ออายุ -ตะ -ตะกรน -ตะกรวย -ตะกร้อ -ตะกร่อม -ตะกรัน -ตะกรับ -ตะกร้า -ตะกราม -ตะกรุด -ตะกรุม -ตะกรุมตะกราม -ตะกละ -ตะกลาม -ตะกวด -ตะกอ -ตะกอน -ตะกัง -ตะกั่ว -ตะกั่วเกรียบ -ตะกั่วแดง -ตะกั่วตัด -ตะกาง -ตะกาด -ตะกาย -ตะกาว -ตะกุกตะกัก -ตะกุย -ตะกุยตะกาย -ตะกู -ตะกูด -ตะเกียกตะกาย -ตะเกียง -ตะเกียงแก๊ส -ตะเกียงรั้ว -ตะเกียงลาน -ตะเกียบ -ตะแก -ตะแก่ -ตะแกรง -ตะโก -ตะโก้ -ตะโกก -ตะโกขาว -ตะโกดำ -ตะโกน -ตะโกรง -ตะโกรม -ตะโกส้ม -ตะไกร -ตะขบ -ตะขบฝรั่ง -ตะขอ -ตะขาบ -ตะขิดตะขวง -ตะเข้ -ตะเข้ขบฟัน -ตะเข็บ -ตะเข็บไต่ขอน -ตะเขิง -ตะโขง -ตะคร้อ -ตะครอง -ตะครั่นตะครอ -ตะคร้ำ -ตะคริว -ตะครุบ -ตะครุบกบ -ตะคลับตะคล้าย -ตะคอก -ตะคัน -ตะค้า -ตะคาก -ตะคาง -ตะค้าทอง -ตะค้าน -ตะคิว -ตะคุ่ม -ตะคุ่มๆ -ตะเครียว -ตะเคียน -ตะเคียนทอง -ตะเคียนเผือก -ตะเคียว -ตะแคง -ตะไคร่ -ตะไคร้ -ตะไคร้แดง -ตะไคร้น้ำ -ตะไคร้บก -ตะไคร้หอม -ตะไคร้หางนาค -ตะเฆ่ -ตะแง้ -ตะติน -ตะแตร้น -ตะนอย -ตะนาว -ตะบม -ตะบอง -ตะบองกัน -ตะบองแดง -ตะบองเพชร -ตะบอย -ตะบัน -ตะบันไฟ -ตะบิ้ง -ตะบิด -ตะบิดตะบอย -ตะบี้ตะบัน -ตะบึง -ตะบุ้ย -ตะบุ้ยๆ -ตะบูน -ตะเบ็ง -ตะเบ็งมาน -ตะแบก -ตะแบง -ตะแบงมาน -ตะโบม -ตะไบ -ตะปบ -ตะปลิง -ตะปัดตะป่อง -ตะปิ้ง -ตะปุ่มตะป่ำ -ตะปู -ตะปูเข็ม -ตะปูควง -ตะปูหัวเห็ด -ตะพง -ตะพด -ตะพอง -ตะพัก -ตะพัง -ตะพัด -ตะพั้น -ตะพาก -ตะพาน -ตะพานช้าง -ตะพานหนู -ตะพาบ -ตะพาบน้ำ -ตะพาย -ตะพายแล่ง -ตะพึด -ตะพึดตะพือ -ตะพุ่น -ตะพุ่นหญ้าช้าง -ตะเพรา -ตะเพิง -ตะเพิด -ตะเพิ่น -ตะเพียน -ตะเพียนทอง -ตะเพียนน้ำเค็ม -ตะโพก -ตะโพง -ตะโพน -ตะเภา -ตะเภาเดียวกัน -ตะใภ้ -ตะม่อ -ตะมอย -ตะยองสะลา -ตะรัง -ตะรังกะนู -ตะรังตังกวาง -ตะรังตังช้าง -ตะราง -ตะลอง -ตะลอน -ตะล่อม -ตะล่อมข้าว -ตะล่อมป้อม -ตะละ -ตะลาน -ตะลิงปลิง -ตะลิบ -ตะลีตะลาน -ตะลึง -ตะลึงพรึงเพริด -ตะลุง -ตะลุ่ม -ตะลุ่มนก -ตะลุมบอน -ตะลุ่มโปง -ตะลุมพอ -ตะลุมพุก -ตะลุ่มอิด -ตะลุย -ตะเลง -ตะแลงแกง -ตะไล -ตะวัน -ตะวันขึ้น -ตะวันตก -ตะวันยอแสง -ตะวันออก -ตะวันออกกลาง -ตะวันออกใกล้ -ตะวันออกไกล -ตะวันอ้อมข้าว -ตะวาง -ตะเวน -ตะหนึ่งรัด -ตะหลิว -ตะหลุก -ตะหลุง -ตะเหลนเป๋น -ตะเหลาะเปาะ -ตะแหง่วๆ -ตะแหมะแขะ -ตะแหลนแป๋น -ตะโหงก -ตัก -ตักกะ -ตักตวง -ตักเตือน -ตั๊กแตน -ตักน้ำรดหัวตอ -ตักน้ำรดหัวสาก -ตักน้ำใส่กะโหลก ชะโงกดูเงา -ตักบาตร -ตักบาตรอย่าถามพระ -ตักษณ -ตักษณี -ตักษัย -ตัง -ตั่ง -ตั้ง -ตั้งกรม -ตังเก -ตั้งเข็ม -ตั้งไข่ -ตั้งเค้า -ตั้งแง่ -ตั้งใจ -ตังฉ่าย -ตั้งต้น -ตั้งตัว -ตั้งตาคอย -ตังติด -ตั้งแต่ -ตั้งแต่ง -ตั้งโต๊ะ -ตั้งท่า -ตั้งธาตุ -ตั้งนาฬิกา -ตั้งนาฬิกาปลุก -ตั้งเป้าหมาย -ตังเม -ตังวาย -ตั้งหน้า -ตั้งหน้าตั้งตา -ตั้งหัวเรือ -ตั้งอกตั้งใจ -ตังโอ๋ -ตัจฉก -ตัจฉนี -ตัณฑุล -ตัณหักษัย -ตัณหา -ตัด -ตัดกัน -ตัดขาด -ตัดใจ -ตัดช่องน้อยแต่พอตัว -ตัดช่องย่องเบา -ตัดเชือก -ตัดญาติขาดมิตร -ตัดต้นไฟ -ตัดตอน -ตัดถนน -ตัดทาง -ตัดบท -ตัดประเด็น -ตัดเป็นตัดตาย -ตัดพ้อ -ตัดไพ่ -ตัดไฟต้นลม -ตัดไฟหัวลม -ตัดไม้ข่มนาม -ตัดรอน -ตัดราคา -ตัดสิน -ตัดสินใจ -ตัดเส้น -ตัดหนทาง -ตัดหน้า -ตัดหน้าฉาน -ตัดหนามอย่าไว้หน่อ -ตัดหางปล่อยวัด -ตัตว- -ตัตวศาสตร์ -ตัถย์ -ตัน -ตันคอหอย -ตันตระ -ตันติ -ตันติภาษา -ตันปัญญา -ตันหยง -ตันเหิม -ตันอกตันใจ -ตับ -ตับแข็ง -ตับเต่า -ตับเต่าขาว -ตับปิ้ง -ตับเป็ด -ตับเพลง -ตับเรื่อง -ตับเหล็ก -ตับอ่อน -ตัว -ตั๋ว -ตัวกลั่น -ตัวกลาง -ตัวการ -ตัวเก็ง -ตัวคูณร่วมน้อย -ตัวโค -ตัวใครตัวมัน -ตัวเงิน -ตั๋วเงิน -ตั๋วเงินคลัง -ตั๋วเงินจ่าย -ตั๋วเงินรับ -ตัวจักรใหญ่ -ตัวจำนำ -ตัวจี๊ด -ตัวเชิด -ตัวดี -ตัวต่อตัว -ตัวตั้ง -ตัวตั้งตัวตี -ตัวตายตัวแทน -ตัวตืด -ตัวเต็ง -ตัวแทน -ตัวแทนค้าต่าง -ตัวแทนช่วง -ตัวแทนเชิด -ตัวนาง -ตัวนำ -ตัวประกอบ -ตัวประกัน -ตัวเป็นเกลียว -ตัวเปล่า -ตัวแปร -ตัวผู้ -ตั้วโผ -ตัวพระ -ตัวพิมพ์ -ตัวเมีย -ตัวเมือง -ตัวไม้ -ตัวยืน -ตัวเลข -ตั๋วแลกเงิน -ตัวสะกด -ตั๋วสัญญาใช้เงิน -ตั้วสิว -ตัวหนังสือ -ตัวหารร่วมมาก -ตั้วเหี่ย -ตัวอย่าง -ตัวเอก -ตา -ตาก -ตากตน -ตากบ -ตากบตาเขียด -ตากล้อง -ตากลับ -ตากล้า -ตากวาง -ตากสมอง -ตากหน้า -ตากอากาศ -ตากุ้ง -ตาโก้ง -ตาไก่ -ตาขวาง -ตาขอ -ตาข่าย -ตาขาว -ตาขุ่นตาเขียว -ตาเข -ตาแข็ง -ตาคม -ตาค้าง -ตาง -ต่าง -ต่างๆ -ต่างด้าว -ต่างว่า -ต่างหาก -ตางัว -ตาจระเข้ -ตาชั่ง -ตาช้าง -ตาด -ตาเดียว -ตาแดง -ตาตกกล้า -ตาตั๊กแตน -ตาตั้ง -ตาตาราง -ตาตี่ -ตาตุ่ม -ตาเต็ง -ตาโต -ตาถั่ว -ตาทวด -ตาทัพ -ตาน -ต่าน -ต้าน -ตานกแก้ว -ตานขโมย -ต้านทาน -ตานนกกด -ตานเสี้ยน -ตานหก -ตานหม่อน -ตานเหลือง -ตาน้ำ -ตานี -ตาบ -ตาบทับ -ตาบทิศ -ตาบอด -ตาบอดคลำช้าง -ตาบอดได้แว่น -ตาบอดตาใส -ตาบอดสอดตาเห็น -ตาบอดสี -ตาปลา -ตาปลาดุก -ตาปี -ตาปีตาชาติ -ตาปู -ตาเป็นมัน -ตาเป็นสับปะรด -ตาโป่ง -ตาฝั่ง -ตาฝาด -ตาพร่า -ตาพอง -ตาฟาง -ตาฟางไก่ -ตาเฟื้องตาสลึง -ตาม -ตามกวาง -ตามควาย -ตามใจ -ตามใจปากมากหนี้ -ตามใจปากลำบากท้อง -ตามด -ตามที -ตามเนื้อผ้า -ตามบุญตามกรรม -ตามพ- -ตามพหัตถี -ตามพะ -ตามเพลง -ตามมี -ตามมีตามเกิด -ตามยถากรรม -ตามเรื่องตามราว -ตามลมตามแล้ง -ตามลำพัง -ตามอำเภอใจ -ตามะแน -ตามิน -ตามีตามา -ตาแมว -ตาย -ต้าย -ตายขาน -ตายขุย -ตายคาที่ -ตายโคม -ตายใจ -ตายซาก -ตายด้าน -ตายดาบหน้า -ตายตัว -ตายทั้งกลม -ตายน้อย -ตายนึ่ง -ตายประชดป่าช้า -ตายเป็นเบือ -ตายฝอย -ตายฝังยังเลี้ยง -ตายพราย -ตายราบ -ตายลาภ -ตายห่า -ตายโหง -ตายอดตายอยาก -ตาราง -ตารางสอน -ตารางเหลี่ยม -ตาราไต -ตาร้าย -ตาริ้ว -ตาเรือ -ตาเรือชัย -ตาล -ตาลปัตร -ตาลปัตรบังเพลิง -ตาลปัตรฤๅษี -ตาลม -ตาลยอดด้วน -ตาลอ -ตาลอย -ตาลาน -ตาลาย -ตาลีตาเหลือก -ตาลุ -ตาลุก -ตาลุกตาชัน -ตาลุชะ -ตาเล็กตาน้อย -ตาว -ต๋าว -ตาโศก -ตาส่อน -ตาสำเภา -ตาสีตาสา -ตาเสือ -ตาหนู -ตาหมากรุก -ตาหยี -ตาหลิ่ง -ตาหวาน -ตาเหล่ -ตาเหลว -ตาเหลือก -ตาเหลือกตาพอง -ตาแหวน -ตาฬ -ตาอ้อย -ตาเอก -ตำ -ต่ำ -ตำข้าวสารกรอกหม้อ -ต่ำใจ -ต่ำช้า -ต่ำตน -ต่ำต้อย -ตำตา -ตำนาน -ตำน้ำพริกละลายแม่น้ำ -ตำเนิน -ตำเนียน -ตำบล -ตำแบ -ต้ำปุก -ต้ำผาง -ต้ำพรวด -ตำแย -ตำแยแมว -ตำรวจ -ตำรวจนครบาล -ตำรวจภูธร -ตำรวจวัง -ตำรวจหลวง -ตำรับ -ตำรา -ตำรุ -ตำลึง -ตำส้ม -ตำเสา -ตำหนัก -ตำหนักน้ำ -ตำหนักแพ -ตำหนิ -ตำหระ -ตำแหน่ง -ตำแหน่งที่ตั้ง -ติ -ติก- -ติกะ -ติกาหรัง -ติง -ติ่ง -ติ๋ง -ติ๋งๆ -ติ่งตั่ง -ติงทุเลา -ติงส- -ติงสติ -ติงสติม- -ติ่งหาย -ติณ -ติณ- -ติณชาติ -ติด -ติดๆ -ติดกระดุม -ติดกัณฑ์เทศน์ -ติดเก้ง -ติดขัด -ติดเครื่อง -ติดจะ -ติดจักรยาน -ติดใจ -ติดตลก -ติดตลาด -ติดต่อ -ติดต้อยห้อยตาม -ติดตะกร้อ -ติดตัว -ติดตา -ติดตาม -ติดตื้น -ติดบวก -ติดบ่อน -ติดปาก -ติดพัน -ติดไฟ -ติดมือ -ติดไม้ติดมือ -ติดร่างแห -ติดลบ -ติดลม -ติดศัพท์ -ติดสอยห้อยตาม -ติดสัด -ติดสำนวน -ติดสินบน -ติดหน้าตามหลัง -ติดหมัด -ติดหลังแห -ติดแห้ง -ติดอันดับ -ติดอ่าง -ติตติก -ติตติร -ติตถ -ติเตียน -ติถี -ติปา -ติปาถะ -ติมิ -ติมิงคละ -ติร -ติรัจฉาน -ติเรือทั้งโกลน -ติล -ติลก -ติ้ว -ติ้วใบเลื่อม -ตี -ตี่ -ตีกรรเชียง -ตีกาก -ตีกิน -ตีเกล็ด -ตีเกลียว -ตีไก่ -ตีขนาบ -ตีขลุม -ตีความ -ตีคอ -ตีคู่ -ตีงูให้กากิน -ตีงูให้หลังหัก -ตีจาก -ตีชิง -ตีตนก่อนไข้ -ตีตนตายก่อนไข้ -ตีตรวน -ตีตั๋ว -ตีต่าง -ตีตื้น -ตีแตะ -ตีโต้ -ตีทอง -ตีทะเบียน -ตีท้ายครัว -ตีท้ายน้ำ -ตีน -ตีนกา -ตีนครุ -ตีนคู้ -ตีนจก -ตีนจ้ำ -ตีนตะขาบ -ตีนตุ๊กแก -ตีนเต่า -ตีนถีบปากกัด -ตีนเท่าฝาหอย -ตีนเทียน -ตีนนก -ตีนเป็ด -ตีนผี -ตีนแรด -ตีนโรงตีนศาล -ตีนเหยียด -ตีบ -ตีบรรทัด -ตีบังกั้น -ตี่ใบ้ -ตีปลาหน้าไซ -ตีป่า -ตี่ป้าบ -ตีป่าให้เสือกลัว -ตีปีก -ตีแปลง -ตีผี -ตีผึ้ง -ตีแผ่ -ตีฝีปาก -ตีโพยตีพาย -ตีมอง -ตีรถะ -ตีระ -ตีรั้ง -ตีลังกา -ตีวง -ตีวัวกระทบคราด -ตีสนิท -ตีสองหน้า -ตีสำนวน -ตีเส้น -ตีเสมอ -ตีเสียง -ตีเสียว่า -ตีหน้า -ตีหน้าตาย -ตีหน้ายักษ์ -ตีหลายหน้า -ตีห่าง -ตีอวน -ตีอีตื้อ -ตึ -ตึๆ -ตึก -ตึกๆ -ตึ้กๆ -ตึ้กตั้ก -ตึกแถว -ตึกระฟ้า -ตึง -ตึงๆ -ตึงเครียด -ตึงตัง -ตึงตัว -ตึงเปรี๊ยะ -ตึดตื๋อ -ตึ๊ดตื๋อ -ตึตัง -ตืด -ตื่น -ตื้น -ตื่นข่าว -ตื้นตัน -ตื้นตันใจ -ตื่นตัว -ตื่นตาตื่นใจ -ตื่นตาย -ตื่นตูม -ตื่นเต้น -ตื่นแต่ดึก สึกแต่หนุ่ม -ตื่นฟ้า -ตื้อ -ตื๊อ -ตื๋อ -ตุ -ตุๆ -ตุ๊ -ตุ๊กแก -ตุ๊กแกใบกลม -ตุ๊กตา -ตุ๊กตาล้มลุก -ตุ๊กตาเสียกบาล -ตุ๊กต่ำ -ตุ๊กต่ำน้ำทอง -ตุกติก -ตุ๊กติ๊ก -ตุ๊กตุ่น -ตุ๊กตุ๋ย -ตุง -ตุ้งก่า -ตุ้งติ้ง -ตุ๊ดตู่ -ตุ๊ต๊ะ -ตุตัง -ตุน -ตุ่น -ตุ่นๆ -ตุ๋น -ตุ่นต่าน -ตุนาหงัน -ตุบๆ -ตุ้บ -ตุ้บๆ -ตุ้บตั้บ -ตุ๊บป่อง -ตุปัดตุป่อง -ตุปัดตุเป๋ -ตุ่ม -ตุ้ม -ตุ๋ม -ตุ้มกว้าว -ตุมกา -ตุ้มแซะ -ตุมตัง -ตุ้มเต๋น -ตุ้มปี่ -ตุมพ -ตุมพรวด -ตุ้มมะพร้าว -ตุ้มหู -ตุ่ย -ตุ่ยๆ -ตุ้ย -ตุ้ยๆ -ตุ๊ย -ตุ๋ยตุ่ย -ตุรค -ตุรงค- -ตุรงค์ -ตุรงคราวี -ตุริยางค์ -ตุล -ตุลสิ -ตุลา -ตุลาการ -ตุลาคม -ตุหรัดตุเหร่ -ตู -ตู่ -ตู้ -ตูก -ตูข้า -ตูด -ตูดงอน -ตู่ตัว -ตู้นิรภัย -ตูบ -ตู้พระมาลัย -ตู่พุทธพจน์ -ตูม -ตูมๆ -ตูมตาม -ตูลิ่นฮื้อ -ตูหนา -เต -เตก -เต๊ก -เต็ง -เต่ง -เตช -เตโช -เตโชธาตุ -เต้น -เต้นกินรำกิน -เต้นเขน -เต็นท์ -เต้นรำ -เต้นแร้งเต้นกา -เต้นแร้งเต้นแฉ่ง -เต็ม -เต็มแกน -เต็มคราบ -เต็มใจ -เต็มตัว -เต็มตา -เต็มตื้น -เต็มเต็ง -เต็มที -เต็มที่ -เต็มบาท -เต็มประดา -เต็มประตู -เต็มปาก -เต็มเปา -เต็มมือ -เต็มเม็ดเต็มหน่วย -เต็มไม้เต็มมือ -เต็มยศ -เต็มรัก -เต็มหู -เต็มเหนี่ยว -เต็มเหยียด -เต็มอก -เต็มอกเต็มใจ -เต็มอัตรา -เตย -เตยเลื้อย -เตร่ -เตร็ด -เตร็ดเตร่ -เตร็ดเตรน -เตรน -เตริง -เตรียด -เตรียบ -เตรียม -เตรียมตรม -เตรียมตัว -เตรียมพร้อม -เตละ -เตลิด -เตว็ด -เต่อ -เตอะ -เตะ -เตะจมูก -เตะฉาก -เตะโด่ง -เตะตา -เตะฝุ่น -เตา -เต่า -เต้า -เต๋า -เต่ากระสุน -เต่ากินผักบุ้ง -เต่าเกียด -เตาแก๊ส -เต๋าเขย่า -เต้าแคน -เต้าเจี้ยว -เต่าดำ -เต่าทอง -เต่าทอเสื่อ -เต้าทึง -เตาทุเรียง -เต่านา -เต่าบ้า -เต้าปืน -เตาผิง -เตาฟู่ -เตาไฟ -เต่ารั้ง -เต้ารับ -เต่าร้าง -เตารีด -เต่าเลือน -เต้าส่วน -เตาสูบ -เต้าเสียบ -เต่าหก -เต่าหวาย -เต่าหับ -เต้าหู้ -เต้าหู้ยี้ -เต่าเหลี่ยม -เต่าเหลือง -เต้าฮวย -เต๊าะ -เตาะแตะ -เติ่ง -เตินเต่อ -เติบ -เติบโต -เติม -เตี้ย -เตียง -เตียงลา -เตี้ยตน -เตียน -เตียบ -เตี๋ยม -เตียรถ์ -เตียว -เตี่ยว -เตี้ยอุ้มค่อม -เตื้อ -เตือน -เตือนใจ -เตือนตา -เตือนสติ -แต่ -แต่ๆ -แต้ -แตก -แตกคอ -แตกเงิน -แตกฉาน -แตกฉานซ่านเซ็น -แตกดับ -แตกตื่น -แตกแตน -แตกทัพ -แตกเนื้อสาว -แตกเนื้อหนุ่ม -แตกฝูง -แตกพาน -แตกมัน -แตกแยก -แตกระแหง -แตกร้าว -แตกหัก -แต่ก่อนแต่กี้ -แต่กี้แต่ก่อน -แตง -แต่ง -แต่งกว้าน -แต่งการ -แต่งงาน -แต่งตั้ง -แต่งตัว -แตงเถาตาย -แตงเม -แตงร่มใบ -แต่งหน้า -แต่งหน้าขนม -แต้จิ๋ว -แตด -แต๊ดแต๋ -แต่ทว่า -แตน -แต้ม -แต้มคู -แต้มต่อ -แตร -แตรงอน -แตรเดี่ยว -แตรฝรั่ง -แตรฟันฟาร์ -แตรรถยนต์ -แตรลำโพง -แตรวง -แตรวงโยธวาทิต -แตระ -แต่ละ -แต้ว -แต้วแร้ว -แต้วแล้ว -แต่ว่า -แต้แว้ด -แตะ -แตะต้อง -โต -โต้ -โตก -โต้คารม -โต่ง -โต้ง -โต้งๆ -โตงเตง -โตงๆ เตงๆ -โตฎก -โต๊ด -โต้ตอบ -โต้เถียง -โตน -โตนด -โต้โผ -โตมร -โตมร- -โตมรธร -โตย -โต้แย้ง -โตรก -โตรกไตร -โตรด -โต้รุ่ง -โตเล่นหาง -โต้วาที -โต้หลง -โต๊ะ -โต๊ะกลม -โต๊ะโขก -โต๊ะเท้าช้าง -โต๊ะหมู่ -โต๊ะหมู่บูชา -โต๊ะอิหม่าม -ใต้ -ใต้ดิน -ใต้ถุน -ใต้เท้า -ใต้เท้ากรุณา -ใต้เท้ากรุณาเจ้า -ใต้ฝ่าพระบาท -ใต้ฝ่าละอองธุลีพระบาท -ใต้ฝ่าละอองพระบาท -ไต -ไต่ -ไต้ -ไต๋ -ไต้ก๋ง -ไต่คู้ -ไต่เต้า -ไต่ถาม -ไตปลา -ไต้ฝุ่น -ไต้ไฟ -ไต่ไม้ -ไต่ไม้ลำเดียว -ไตร -ไตรกิศยา -ไตรจักร -ไตรจีวร -ไตรดายุค -ไตร่ตรอง -ไตรตรา -ไตรตรึงษ์ -ไตรทวาร -ไตรทศ -ไตรทิพ -ไตรทิพย์ -ไตรปิฎก -ไตรเพท -ไตรภพ -ไตรภาคี -ไตรภูมิ -ไตรย -ไตรยางศ์ -ไตรรงค์ -ไตรรัตน์ -ไตรลักษณ์ -ไตรโลก -ไตรโลกย์ -ไตรวัฏ -ไตรวิชชา -ไตรสรณคมน์ -ไตรสรณาคมน์ -ไตรสิกขา -ไต่ลวด -ไต่สวน -ไต้หวัน -ถ -ถก -ถกเขมร -ถกเถียง -ถกล -ถงัน -ถงาด -ถด -ถดถอย -ถน -ถนน -ถนนลาดยาง -ถนป -ถนอม -ถนอมอาหาร -ถนัด -ถนัดขวา -ถนัดใจ -ถนัดซ้าย -ถนัดถนี่ -ถนัดปาก -ถนัดมือ -ถนัน -ถนำ -ถนำทึก -ถนิม -ถนิมกาม -ถนิมสร้อย -ถบ -ถบดี -ถม -ถ่ม -ถมเงิน -ถมตะทอง -ถมถืด -ถมเถ -ถมทอง -ถ่มน้ำลายรดฟ้า -ถมปรักมาศ -ถมปัด -ถมไป -ถ่มร้าย -ถมอ -ถมึงทึง -ถล -ถลก -ถลกบาตร -ถลน -ถลม -ถล่ม -ถลอก -ถลัน -ถลา -ถลาก -ถลากถลำ -ถลากไถล -ถลาย -ถลำ -ถลำใจ -ถลำตัว -ถลำถลาก -ถลีถลำ -ถลึงตา -ถลุง -ถลุน -ถ่วง -ถ่วงดุล -ถ่วงล้อ -ถ้วน -ถ้วนถี่ -ถ้วย -ถ้วยตวง -ถ้วยโถง -ถ้วยรางวัล -ถวัด -ถวัดถวัน -ถวัล -ถวัลย์ -ถวาย -ถวายกร -ถวายตัว -ถวายเนตร -ถวายพระพร -ถวายหัว -ถวิน -ถวิล -ถ่อ -ถ้อ -ถอก -ถอง -ถ่อง -ถ้อง -ถ่องแถว -ถ่องแท้ -ถอด -ถอดเขี้ยวถอดเล็บ -ถอดความ -ถอดถอน -ถอดไพ่ -ถอดรหัส -ถอดรูป -ถอดสี -ถอดหัวโขน -ถ้อถอย -ถ้อถ้อย -ถอน -ถอนเงิน -ถอนใจใหญ่ -ถอนต้นก่นราก -ถอนทุน -ถอนพิษ -ถอนยวง -ถอนรากถอนโคน -ถอนสมอ -ถอนสายบัว -ถอนหงอก -ถอบ -ถอบแถบ -ถ่อม -ถ่อมตัว -ถอย -ถ่อย -ถ้อย -ถอยกรูด -ถ้อยความ -ถ้อยคำ -ถอยใจใหญ่ -ถอยฉะ -ถอยฉาก -ถอยถด -ถ้อยแถลง -ถอยทด -ถอยทัพ -ถ้อยทีถ้อยปฏิบัติต่อกัน -ถ้อยทีถ้อยอาศัยกัน -ถอยหลัง -ถอยหลังเข้าคลอง -ถะ -ถะกัด -ถะเกิน -ถะโกน -ถะถั่น -ถะถับ -ถะถุนถะถัน -ถะมัดถะแมง -ถัก -ถัง -ถั่ง -ถั่งถ้อย -ถัณฑิล -ถัณฑิล- -ถัณฑิลสายี -ถัด -ถัทธ -ถัน -ถั่น -ถั่นๆ -ถับ -ถับๆ -ถัมภ์ -ถัว -ถั่ว -ถั่วขาว -ถั่วคร้า -ถั่วค้าง -ถั่วงอก -ถั่วดำ -ถั่วนา -ถั่วแปบ -ถั่วแปบช้าง -ถั่วฝักยาว -ถั่วพร้า -ถั่วพู -ถั่วเพาะ -ถั่วแม่ตาย -ถั่วแระ -ถั่วเหลือง -ถา -ถ้า -ถาก -ถากถาง -ถาง -ถ่าง -ถ่างตา -ถาด -ถาโถม -ถาน -ถ่าน -ถ่านโค้ก -ถ่านไฟเก่า -ถ่านไฟฉาย -ถ่านไฟแช็ก -ถ่านหิน -ถาบ -ถาม -ถามค้าน -ถามติง -ถามไถ่ -ถามนำ -ถามปากคำ -ถามะ -ถ่าย -ถ่ายเดียว -ถ่ายทอด -ถ่ายทุกข์ -ถ่ายเท -ถ่ายแบบ -ถ่ายปัสสาวะ -ถ่ายภาพยนตร์ -ถ่ายยา -ถ่ายรูป -ถ่ายอุจจาระ -ถ่าว -ถาวร -ถาวร- -ถาวรธิรา -ถาวรวัตถุ -ถ้าว่า -ถ้าหากว่า -ถ้ำ -ถ้ำชา -ถ้ำมอง -ถ้ำยาดม -ถิ่น -ถิร- -ถี -ถี่ -ถี่ๆ -ถี่ถ้วน -ถี่เท้า -ถีน- -ถีบ -ถีบกระดาน -ถีบจักร -ถีบจักรยาน -ถีบฉัด -ถีบตัว -ถีบทาง -ถีบรถ -ถีบหัวส่ง -ถี่ยิบ -ถี่ลอดตาช้าง ห่างลอดตาเล็น -ถึก -ถึง -ถึงกัน -ถึงแก่กรรม -ถึงแก่น -ถึงแก่พิราลัย -ถึงแก่มรณภาพ -ถึงแก่อนิจกรรม -ถึงแก่อสัญกรรม -ถึงขนาด -ถึงคราว -ถึงฆาต -ถึงเงิน -ถึงใจ -ถึงชีพิตักษัย -ถึงชีวิตันตราย -ถึงที่ -ถึงเป็นถึงตาย -ถึงผ้า -ถึงพริกถึงขิง -ถึงลูกถึงคน -ถึงว่า -ถึงไหนถึงกัน -ถือ -ถือกำเนิด -ถือโกรธ -ถือเขาถือเรา -ถือใจ -ถือดี -ถือตัว -ถือท้าย -ถือน้ำพระพิพัฒน์สัตยา -ถือบวช -ถือบังเหียน -ถือปูน -ถือผิว -ถือพล -ถือยศ -ถือยศถือศักดิ์ -ถือเราถือเขา -ถือว่า -ถือศักดินา -ถือศีล -ถือสา -ถือสิทธิ์ -ถือหาง -ถือโอกาส -ถุง -ถุงเค้า -ถุงตะเครียว -ถุงตะเคียว -ถุงย่าม -ถุงสำเร็จ -ถุน -ถุย -ถุล- -ถุลละ -ถู -ถูก -ถูกกระทำ -ถูกกัน -ถูกขา -ถูกคอ -ถูกคู่ -ถูกใจ -ถูกโฉลก -ถูกชะตา -ถูกตา -ถูกน้อย -ถูกปาก -ถูกส่วน -ถูกเส้น -ถูกใหญ่ -ถูกอกถูกใจ -ถูไถ -ถูป- -ถูปารหบุคคล -ถูล- -ถูลู่ถูกัง -เถกิง -เถน -เถมิน -เถมินเชิง -เถมินไพร -เถย- -เถยจิต -เถยเจตนา -เถยสังวาส -เถร -เถร- -เถรตรง -เถรภูมิ -เถรวาท -เถรส่องบาตร -เถระ -เถรานุเถระ -เถรี -เถลไถล -เถลิก -เถลิง -เถลิงศก -เถลือกถลน -เถ่อ -เถอะ -เถอะน่า -เถะๆ -เถา -เถ้า -เถ้าแก่ -เถาคัน -เถาคันเหล็ก -เถาเงาะ -เถาดาน -เถามวก -เถ้ารึง -เถาวัลย์ -เถาวัลย์กรด -เถาวัลย์เขียว -เถาวัลย์ปูน -เถาวัลย์เปรียง -เถาวัลย์ยอดด้วน -เถาวัลย์เหล็ก -เถาสิงโต -เถาหัวด้วน -เถาะ -เถิก -เถิง -เถิด -เถิดเทิง -เถิดน่า -เถิน -เถียง -เถียร -เถือ -เถือก -เถื่อน -แถ -แถก -แถง -แถน -แถบ -แถบบันทึกภาพ -แถบบันทึกเสียง -แถบเหล็กพืด -แถม -แถมพก -แถลง -แถลงการณ์ -แถลงการณ์ร่วม -แถลงข่าว -แถลบ -แถว -โถ -โถเครื่องแป้ง -โถง -โถงเถง -โถบ -โถปริก -โถม -โถมนาการ -โถส้วม -ไถ -ไถ่ -ไถ้ -ไถกลบ -ไถง -ไถดะ -ไถ่ถอน -ไถ่ถาม -ไถนา -ไถ่บาป -ไถแปร -ไถย- -ไถล -ท -ทก -ทกล้า -ทแกล้ว -ท่ง -ทงัน -ทชี -ทด -ทดถอย -ทดแทน -ทดโทร่ห -ทดรอง -ทดลอง -ทดเลข -ทดสอบ -ทท -ทธิ -ทน -ท้น -ทนดี -ทนต- -ทนต์ -ทนตกาษฐ์ -ทนทาน -ทนโท่ -ทนม -ทนาย -ทนายความ -ทนายเรือน -ทนายเลือก -ทนายหน้าหอ -ทบ -ทบทวน -ทบวง -ทบวงการ -ทบวงการเมือง -ทม -ทมก -ทมน -ทมบ -ทมอ -ทมิฬ -ทเมิน -ทโมน -ทยอย -ทยา -ทยาลุ -ทยาลุก -ทแยง -ทแยงมุม -ทร- -ทรกรรม -ทรง -ทรงกระเทียม -ทรงกลด -ทรงข้าวบิณฑ์ -ทรงเครื่อง -ทรงเครื่องใหญ่ -ทรงเจ้า -ทรงเจ้าเข้าผี -ทรงตัก -ทรงบาดาล -ทรงประพาส -ทรงพระเครื่องใหญ่ -ทรงมัณฑ์ -ทรงลังกา -ทรงหม้อตาล -ทรชน -ทรชาติ -ทรทึง -ทรธึก -ทรพล -ทรพิษ -ทรพี -ทรภิกษ์ -ทรมาทรกรรม -ทรมาน -ทรมุก -ทรยศ -ทรยุค -ทรรทึง -ทรรป -ทรรปณ์ -ทรรปณะ -ทรรศนะ -ทรรศนาการ -ทรรศนีย์ -ทรราช -ทรลักษณ์ -ทรเล่ห์ -ทรวง -ทรวด -ทรวดทรง -ทรวาร -ทรสองทรสุม -ทรสาย -ทรสุม -ทรหด -ทรหน -ทรหวล -ทรหึง -ทรหึงทรหวล -ทรหู -ทรเหล -ทรอ -ทรอมโบน -ทรอึง -ทรอุ้ม -ทระนง -ทระนาว -ทรัพย- -ทรัพย์ -ทรัพย์นอกพาณิชย์ -ทรัพย์ในดิน สินในน้ำ -ทรัพย์สมบัติ -ทรัพยสิทธิ -ทรัพย์สิน -ทรัพย์สินส่วนพระมหากษัตริย์ -ทรัพย์สินส่วนพระองค์ -ทรัพย์สินส่วนสาธารณสมบัติของแผ่นดิน -ทรัพยากร -ทรัพยากรธรณี -ทรัพยากรธรรมชาติ -ทรัมเป็ต -ทรานซิสเตอร์ -ทราบ -ทราบเกล้าทราบกระหม่อม -ทราบฝ่าพระบาท -ทราบฝ่าละอองธุลีพระบาท -ทราบฝ่าละอองพระบาท -ทราม -ทรามชม -ทรามเชย -ทรามวัย -ทรามสงวน -ทรามสวาท -ทราย -ทรายแก้ว -ทรายขาว -ทรายแป้ง -ทริทร -ทรุด -ทรุดโทรม -ทรุดนั่ง -ทรุม -ทรู่ -ทฤฆ- -ทฤษฎี -ทฤษฎีบท -ทล -ทลบม -ทลอึง -ทลาย -ทลิท -ทลิททก -ทวง -ท้วง -ท้วงติง -ทวงถาม -ท่วงท่า -ท่วงทำนอง -ท่วงที -ทวด -ทวดน้อย -ทวดึงส์ -ทวน -ท้วน -ทวนทบ -ทวนสบถ -ทวนสาบาน -ท่วม -ท้วม -ท้วมๆ -ท่วมท้น -ทวย -ท่วย -ท้วย -ทวยโถง -ท่วยโถง -ทวยะ -ทวอย -ทวัตดึงส์ -ทวัตดึงสาการ -ทวัย -ทวา -ทว่า -ทวาตรึงประดับ -ทวาทศ -ทวาทศม- -ทวาทศมณฑล -ทวาทศี -ทวาบร -ทวาบรยุค -ทวาย -ทวาร -ทวารทั้งเก้า -ทวารบถ -ทวารบาล -ทวารประดับ -ทวิ -ทวิช -ทวิช- -ทวิชงค์ -ทวิชากร -ทวิชาติ -ทวิตีย -ทวิตียา -ทวิบถ -ทวิบท -ทวิบาท -ทวิป -ทวิภาค -ทวิภาคี -ทวิร -ทวี -ทวีคูณ -ทวีธาภิเษก -ทวีป -ทวีปี -ทศ -ทศ- -ทศชาติ -ทศทิศ -ทศนิยม -ทศเบญจกูล -ทศพร -ทศพล -ทศพิธราชธรรม -ทศม- -ทศมาส -ทศมี -ทศวรรษ -ทศา -ทศางค์ -ทสา -ทหระ -ทหาร -ทหารกองประจำการ -ทหารผ่านศึก -ทหารเลว -ทอ -ท่อ -ท้อ -ทอก -ทอง -ท่อง -ท้อง -ทองกร -ทองกวาว -ท้องกาง -ท้องแก่ -ทองขาว -ท้องขาว -ท้องขึ้น -ท้องขึ้นท้องพอง -ท้องแขน -ท้องแขวน -ท้องคัดท้องแข็ง -ทองคำ -ทองคำขาว -ทองคำเปลว -ท้องคุ้ง -ทองเค -ทองเครือ -ท่องจำ -ท้องฉนวน -ทองชมพูนุท -ทองชุบ -ทองดอกบวบ -ทองดำ -ท้องเดิน -ทองแดง -ทองต้นแขน -ท้องตรา -ท้องตลาด -ทองตากู -ท้องถิ่น -ทองทราย -ทองทศ -ท้องที่ -ทองทึบ -ท่องเที่ยว -ทองธรรมชาติ -ทองนพคุณ -ท้องน่อง -ท้องน้อย -ทองบรอนซ์ -ท้องแบน -ทองใบ -ทองปราย -ทองปลายแขน -ท้องปลิง -ทองแป -ท้องผุท้องพัง -ท้องผูก -ทองเผือก -ทองแผ่นเดียวกัน -ทองพระกร -ทองพระขุน -ท้องพระคลัง -ท้องพระโรง -ทองพลุ -ท้องพลุ -ท้องพอง -ทองพัดดึงส์ -ทองพันชั่ง -ทองพันดุล -ทองพิศ -ท้องเฟ้อ -ทองภู -ทองม้วน -ท้องมาน -ท้องไม้ -ทองไม่รู้ร้อน -ทองย้อย -ท้องยุ้งพุงกระสอบ -ท้องร่วง -ท้องร่อง -ทองรูปพรรณ -ท้องเรื่อง -ท้องลาน -ทองลิน -ท้องเลว -ทองแล่ง -ทองวิทยาศาสตร์ -ทองสักโก -ทองสัมฤทธิ์ -ท้องสาว -ท้องสำนวน -ท่องสื่อ -ท้องเสีย -ทองหมั้น -ท้องหมา -ท้องหมู -ทองหยอง -ทองหยอด -ทองหยิบ -ทองหลาง -ทองเหลือง -ท้องแห้ง -ทองโหลง -ทองอังกฤษ -ท้องอัสดงคต -ท้องอืด -ทองอุไร -ทองเอก -ทอด -ทอดกฐิน -ทอดโกลน -ทอดตัว -ทอดตา -ทอดทฤษฎี -ทอดทิ้ง -ทอดที่ -ทอดน่อง -ทอดน้ำ -ทอดผ้าป่า -ทอดพระที่ -ทอดพระเนตร -ทอดมัน -ทอดยอด -ทอดรวง -ทอดสกา -ทอดสมอ -ทอดสะพาน -ทอดสายตา -ทอดเสียง -ทอดหญ้า -ทอดหุ่ย -ทอดแห -ทอดอาลัย -ท่อถ้อย -ท้อถอย -ท้อถ้อย -ท้อแท้ -ทอน -ท่อน -ทอนซิล -ทอฟฟี่ -ท่อมๆ -ทอย -ทอยกอง -ทอเรียม -ทอแสง -ทอหูก -ท่อไอเสีย -ทะ -ทะงัน -ทะทัด -ทะทา -ทะทาย -ทะท่าว -ทะท้าว -ทะทึก -ทะเทียด -ทะนง -ทะนงตัว -ทะนงศักดิ์ -ทะนน -ทะนะ -ทะนา -ทะนาน -ทะนานหลวง -ทะนุ -ทะนุก -ทะนุกถนอม -ทะนุถนอม -ทะนุบำรุง -ทะบู -ทะเบียน -ทะเบียนบ้าน -ทะเบียนราษฎร -ทะเบียนสำมะโนครัว -ทะมัดทะแมง -ทะมึน -ทะมื่น -ทะแม่ง -ทะแม่งๆ -ทะยาทะแยแส -ทะยาน -ทะยานใจ -ทะยานอยาก -ทะเยอทะยาน -ทะแย -ทะแยสามชั้น -ทะร่อทะแร่ -ทะลวง -ทะลอก -ทะลัก -ทะลักทะแลง -ทะลาย -ทะลิ่น -ทะลิ่นชระลั่ง -ทะลึ่ง -ทะลึ่งทะลั่ง -ทะลุ -ทะลุกลางปล้อง -ทะลุดทะลาด -ทะลุปรุโปร่ง -ทะเล -ทะเลทราย -ทะเล้น -ทะเลใน -ทะเลบ้า -ทะเลภายใน -ทะเลสาบ -ทะเลหน้าใน -ทะเลหลวง -ทะเลไหล่ทวีป -ทะเล่อทะล่า -ทะเลอาณาเขต -ทะเลาะ -ทะเลาะเบาะแว้ง -ทะวาย -ทะเวน -ทัก -ทักข์ -ทักขิญ -ทักขิณ -ทักขิณา -ทักขิณาบถ -ทักขิณาวัฏ -ทักขิโณทก -ทักขิไณยบุคคล -ทักท้วง -ทักทาย -ทักทิน -ทักนิมิต -ทักษ- -ทักษะ -ทักษา -ทักษิณ -ทักษิณนิกาย -ทักษิณา -ทักษิณาจาร -ทักษิณาทาน -ทักษิณานุประทาน -ทักษิณายัน -ทักษิณาวรรต -ทักษิโณทก -ทัคธ์ -ทัง -ทั่ง -ทั้ง -ทั้ง...กับ -ทั้งขึ้นทั้งล่อง -ทั้งคน -ทั้งดุ้น -ทั้ง...ทั้ง -ทั้งที -ทั้งที่ -ทั้งๆ ที่ -ทั้งนั้น -ทั้งนี้ -ทั้งนี้ทั้งนั้น -ทั้งเนื้อทั้งตัว -ทั้งปวง -ทั้งผอง -ทั้งเพ -ทั้งมวล -ทั้ง...และ -ทังวล -ทังวี้ทังวล -ทังสเตน -ทั้งสิ้น -ทั้งหมด -ทั้งหลาย -ทั้งอย่างนั้น -ทัณฑ- -ทัณฑ์ -ทัณฑกรรม -ทัณฑฆาต -ทัณฑนิคม -ทัณฑ์บน -ทัณฑวิทยา -ทัณฑสถาน -ทัณฑะ -ทัณฑิกา -ทัณฑิมา -ทัณฑีบท -ทัด -ทัดดอกไม้ -ทัดทา -ทัดทาน -ทัดเทียม --ทัต -ทัน -ทันกิน -ทันควัน -ทันใจ -ทันใด -ทันต- -ทันต์ -ทันตชะ -ทันตแพทย์ -ทันตา -ทันติน -ทันตี -ทันท่วงที -ทันที -ทันธ์ -ทันน้ำ -ทันน้ำทันฝน -ทันสมัย -ทับ -ทับเกษตร -ทับถม -ทับทรวง -ทับทาง -ทับทางขาว -ทับทิม -ทับที่ -ทับแพ -ทับลัคน์ -ทับเล็ก -ทับศัพท์ -ทับสมิงคลา -ทับสิทธิ์ -ทับหลัง -ทับหลังลัคน์ -ทัป -ทัปน -ทัพ -ทัพพะ -ทัพพี -ทัพสัมภาระ -ทั่ว -ทั่วถึง -ทั่วทุกสารทิศ -ทั่วทุกหัวระแหง -ทั่วไป -ทั่วๆ ไป -ทัศ -ทัศน- -ทัศน์ -ทัศนคติ -ทัศนวิสัย -ทัศนศาสตร์ -ทัศนศึกษา -ทัศนะ -ทัศนา -ทัศนาการ -ทัศนาจร -ทัศนีย- -ทัศนีย์ -ทัศนียภาพ -ทัศนูปกรณ์ -ทัศไนย -ทัสนานุตริยะ -ทัฬห -ทัฬหิ -ทัฬหิกรณ์ -ทัฬหี -ทัฬหีกรรม -ทา -ท่า -ท้า -ทาก -ทาง -ท้าง -ทางการ -ทางเก็บ -ทางข้าม -ทางช้างเผือก -ทางด่วน -ทางเท้า -ทางโท -ทางใน -ทางผ่าน -ทางพิเศษ -ทางมะพร้าว -ทางม้าลาย -ทางสาธารณะ -ทางหลวง -ทางออก -ทางเอก -ทาฐะ -ทาฐิกะ -ทาฒะ -ทาฒิกะ -ท่าดีทีเหลว -ท่าเดียว -ท่าทาง -ท้าทาย -ท่าที -ทาน -ทาน- -ท่าน -ทานกัณฑ์ -ท่านชาย -ทานต์ -ทานตะวัน -ทานบดี -ทานบารมี -ท่านผู้หญิง -ทานพ -ทานมัย -ทานศีล -ท่านหญิง -ท่านั้นท่านี้ -ทานาธิบดี -ทาบ -ทาบทาม -ทาม -ท่ามกลาง -ทาย -ท้าย -ทายก -ท้ายเขื่อน -ท้ายครัว -ท้ายโต่ง -ท้ายทอย -ท้ายน้ำ -ท้ายฝน -ทายัช -ทายา -ทายาด -ทายาท -ทายาทโดยธรรม -ทาร- -ทารก -ทารพี -ทาริกา -ทารุ -ทารุณ -ทารุณ- -ทารุณกรรม -ท่าเรือ -ทาว -ท่าว -ท้าว -ท่าวกำลัง -ท่าวทบระนับ -ท้าวนาง -ท้าวพญา -ท้าวพระยา -ทาษ -ทาส -ทาส- -ทาสทาน -ทาสปัญญา -ทาสี -ท่าอากาศยาน -ทำ -ทำกรรม -ทำการบ้าน -ทำขวัญ -ทำครัว -ทำคลอด -ทำความ -ทำคุณ -ทำคุณบูชาโทษ -ทำงน -ทำเจ็บ -ทำใจ -ทำได้ -ทำได้ลงคอ -ทำตัว -ทำตา -ทำท่า -ทำที -ทำแท้ง -ทำโทษ -ทำนบ -ทำนวย -ทำนอง -ทำนองเสนาะ -ทำนาบนหลังคน -ทำนาย -ทำนาออมกล้า ทำปลาออมเกลือ -ทำนุ -ทำนุบำรุง -ทำนูล -ทำเนา -ทำเนียบ -ทำเนียบท่าเรือ -ทำเนียบนาม -ทำเนียม -ทำบาป -ทำบุญ -ทำบุญเอาหน้า -ทำปลา -ทำปากทำคอ -ทำเป็น -ทำไปทำมา -ทำพิษ -ทำไพ่ -ทำฟัน -ทำไฟ -ทำมัง -ทำไม -ทำร้าย -ทำฤทธิ์ -ทำลาย -ทำลายขวัญ -ทำลายสถิติ -ทำลิง -ทำเล -ทำวน -ทำวัตร -ทำวัตรค่ำ -ทำวัตรเช้า -ทำเวร -ทำเวลา -ทำสาว -ทำเสน่ห์ -ทำเสียเจ็บ -ทำหน้าทำตา -ทำหมัน -ทำหูทวนลม -ทำเหตุ -ทำให้ -ทำเอา -ทำเอาเจ็บ -ทิคัมพร -ทิฆัมพร -ทิ้ง -ทิ้งกระจาด -ทิ้งขว้าง -ทิ้งๆ ขว้างๆ -ทิ้งจดหมาย -ทิงเจอร์ -ทิ้งถ่อน -ทิ้งทวน -ทิ้งทาน -ทิ้งท้าย -ทิ้งทูด -ทิ้งไพ่ -ทิ้งฟ้อง -ทิ้งมะพร้าวห้าว -ทิ้งย่อ -ทิช -ทิช- -ทิชากร -ทิฏฐะ -ทิฏฐานุคติ -ทิฏฐุชุกรรม -ทิฐ- -ทิฐธรรม -ทิฐิ -ทิด -ทิต -ทิน -ทิน- -ทินกร -ทินศูนย์ -ทินาท -ทิพ -ทิพ- -ทิพย- -ทิพย์ -ทิพยจักษุ -ทิพยจักษุญาณ -ทิพยญาณ -ทิพยเนตร -ทิพยพยาน -ทิพยมานุษ -ทิพยรส -ทิพยโศรตร -ทิพโสต -ทิพา -ทิพากร -ทิม -ทิ่ม -ทิมดาบ -ทิ่มตำ -ทิมทอง -ทิ่มแทง -ทิว -ทิว- -ทิวกาล -ทิวงคต -ทิวทัศน์ -ทิวส- -ทิวสภาค -ทิวสะ -ทิวา -ทิวากร -ทิวากาล -ทิศ -ทิศทาง -ทิศา -ทิศาดร -ทิศานุทิศ -ทิศาปาโมกข์ -ที -ที่ -ที่กัลปนา -ทีใครทีมัน -ทีฆ- -ทีฆชาติ -ทีฆนิกาย -ทีฆสระ -ทีฆายุ -ที่จริง -ที่ดิน -ที่ดินมือเปล่า -ทีเด็ด -ทีเดียว -ทีท่า -ที่ทาง -ที่ทำการ -ที่เท่าแมวดิ้นตาย -ที่แท้ -ที่ธรณีสงฆ์ -ที่นอน -ที่นั่ง -ทีนี้ -ทีป -ที่พึ่ง -ทีม -ที่มั่น -ที่มา -ทีรฆ- -ที่รัก -ที่ราบ -ที่ราบสูง -ทีเล่นทีจริง -ที่วัด -ที่ว่าการ -ที่สุด -ที่หมาย -ทีหลัง -ที่ไหน -ที่ไหนได้ -ทีเอ็นที -ทึก -ทึกทัก -ทึ่ง -ทึ้ง -ทึดทือ -ทึนทึก -ทึบ -ทึม -ทึมๆ -ทึ่ม -ทื่อ -ทุ -ทุก -ทุกๆ -ทุกข- -ทุกข์ -ทุกขนิโรธ -ทุกขลาภ -ทุกขเวทนา -ทุกขสมุทัย -ทุกข์สุข -ทุกขักษัย -ทุกขารมณ์ -ทุกฏ -ทุกที -ทุกนิบาต -ทุกพาย -ทุกเมื่อ -ทุกเมื่อเชื่อวัน -ทุกร- -ทุกรกิริยา -ทุกวันนี้ -ทุกษดร -ทุกสิ่งทุกอย่าง -ทุกหน -ทุกหนทุกแห่ง -ทุกหย่อมหญ้า -ทุกหัวระแหง -ทุกแห่ง -ทุกะ -ทุกัง -ทุกูล -ทุคตะ -ทุคติ -ทุ่ง -ทุ้ง -ทุงงะ -ทุงเทง -ทุจจิณณะ -ทุจริต -ทุด -ทุตวิลัมพิตมาลา -ทุติย- -ทุติยาสาฬห -ทุทรรศนนิยม -ทุน -ทุ่น -ทุนจดทะเบียน -ทุนทรัพย์ -ทุนนอน -ทุนนิมิต -ทุนนิยม -ทุ่นเบ็ด -ทุนรอน -ทุ่นระเบิด -ทุนเรือนหุ้น -ทุนสำรอง -ทุนสำรองเงินตรา -ทุนหมุนเวียน -ทุ่นอวน -ทุนิยม -ทุบ -ทุบตี -ทุบทู -ทุบหม้อข้าว -ทุปปัญญา -ทุพพรรณ -ทุพพล -ทุพพลภาพ -ทุพภิกขภัย -ทุพภิกขันดรกัป -ทุม -ทุม- -ทุ่ม -ทุ้ม -ทุ่มตลาด -ทุ่มเถียง -ทุ่มเท -ทุมโน -ทุมราชา -ทุย -ทุ้ย -ทุร- -ทุรกันดาร -ทุรคม -ทุรชน -ทุรชาติ -ทุรน -ทุรนทุราย -ทุรพล -ทุรภิกษ์ -ทุรลักษณ์ -ทุรัถยา -ทุรัศ -ทุราคม -ทุราจาร -ทุราธวา -ทุเรศ -ทุเรียน -ทุเรียนแขก -ทุเรียนเทศ -ทุลักทุเล -ทุเลา -ทุวิธ -ทุศีล -ทุษฐ- -ทุส- -ทุสสะ -ทุสสีล -ทู -ทู่ -ทู้ -ทูกัง -ทู่ซี้ -ทูต -ทูตานุทูต -ทูน -ทูน้ำจืด -ทูบ -ทูม -ทูมทาม -ทูโม่ง -ทูร- -ทูล -ทูลกระหม่อม -ทูลเกล้าทูลกระหม่อมถวาย -ทูเลียม -ทูษก -เท -เท่ -เทกระจาด -เทกระเป๋า -เทคนิค -เทคนีเชียม -เทคโนโลยี -เทครัว -เทคอนกรีต -เทง -เท้ง -เท้งเต้ง -เท้งทูด -เท็จ -เท็จจริง -เท็จเทียม -เทนนิส -เทน้ำเทท่า -เทปูน -เทพ -เทพ- -เทพกุสุม -เทพเจ้า -เทพชุมนุม -เทพดา -เทพดำรู -เทพทัณฑ์ -เทพทารู -เทพทาโร -เทพธิดา -เทพนม -เทพนารี -เทพนิยม -เทพนิยาย -เทพนิยายวิทยา -เทพนิรมิต -เทพบดี -เทพบริษัท -เทพบุตร -เทพประติมา -เทพพยากรณ์ -เทพย- -เทพยเจ้า -เทพยดา -เทพยุดา -เทพสังหรณ์ -เทพา -เทพาดิเทพ -เทพาธิบดี -เทพารักษ์ -เทพิน -เทพินทร์ -เทพี -เทพีปักษี -เทเพนทร์ -เทโพ -เทริด -เทลลูเรียม -เทว- -เทวดา -เทวทัณฑ์ -เทวทูต -เทวธรรม -เทวธิดา -เทวนะ -เทวนาครี -เทวนิยม -เทวภาวะ -เทวระ -เทวรูป -เทวโลก -เทววาจิกะ -เทววิทยา -เทวศ -เทวษ -เทวสถาน -เทวสุคนธ์ -เทวอ -เทวัญ -เทวัน -เทวาคาร -เทวารัณย์ -เทวาลัย -เทวาวาส -เทวินทร์ -เทวี -เทเวนทร์ -เทเวศ -เทเวศร์ -เทเวศวร์ -เทศ -เทศ- -เทศก -เทศกาล -เทศน์ -เทศน์แจง -เทศนา -เทศบัญญัติ -เทศบาล -เทศมนตรี -เทศะ -เทศาจาร -เทศาภิบาล -เทห- -เทห์ -เท่ห์ -เทห์ฟากฟ้า -เทหวัตถุ -เท่อ -เท้อ -เทอญ -เทอม -เทอร์เบียม -เทอร์โมมิเตอร์ -เทอะทะ -เทา -เท่า -เท้า -เท่ากับ -เท้าแขน -เท้าคู้ -เท้าช้าง -เท่าใด -เท่าตัว -เท่าทัน -เท่าทุน -เท่าเทียม -เท่านั้น -เท่าเผ้า -เท้ายายม่อม -เท่ารึง -เท่าไร -เท้าสาน -เท้าสิงห์ -เทาะห์ -เทิก -เทิ่ง -เทิงบอง -เทิด -เทิดทูน -เทิน -เทิบ -เทิบๆ -เทิบทาบ -เทิ้ม -เทียง -เที่ยง -เที่ยงๆ -เที่ยงตรง -เที่ยงแท้ -เที่ยงธรรม -เทียน -เที้ยน -เทียนกิ่ง -เทียนเกล็ดหอย -เทียนแกลบ -เทียนขม -เทียนขาว -เทียนข้าวเปลือก -เทียนดำ -เทียนแดง -เทียนตากบ -เทียนตาตั๊กแตน -เทียนบ้าน -เทียนพรรษา -เทียนเยาวพาณี -เทียนรุ่ง -เทียนลวด -เทียนสัตตบุษย์ -เทียนอบ -เทียบ -เทียบเคียง -เทียบเท่า -เทียม -เทียร -เที้ยร -เทียรฆ- -เทียรฆชาติ -เทียรฆราตร -เทียว -เที่ยว -เทือ -เทื่อ -เทื้อ -เทือก -เทือกเขา -เทือกเถาเหล่ากอ -เทือน -แท่ -แท้ -แท้ๆ -แท็กซี่ -แท็กซี่มิเตอร์ -แทง -แท่ง -แท้ง -แท็งก์น้ำ -แทงใจ -แทงใจดำ -แทงตะไบ -แทงทวย -แทงวิสัย -แทงหยวก -แท้จริง -แทตย์ -แท้ที่จริง -แทน -แท่น -แทนเจนต์ -แทนทาลัม -แทนที่จะ -แท่นพิมพ์ -แท่นมณฑล -แท่นลา -แท่นหมึก -แทบ -แทรก -แทรกซอน -แทรกซ้อน -แทรกซึม -แทรกแซง -แทรกเตอร์ -แทรกแผ่นดิน -แทรกโพน -แทลเลียม -แทะ -แทะโลม -โท -โท่ -โทกเทก -โทงๆ -โทงเทง -โทณะ -โทโทษ -โทธก -โทน -โทนโท่ -โทมนัส -โทร- -โทรคมนาคม -โทรทรรศน์ -โทรทัศน์ -โทรพิมพ์ -โทรภาพ -โทรม -โทรมศัสตราวุธ -โทรมหญิง -โทรเลข -โทรศัพท์ -โทรสาร -โทลา -โทศก -โทษ -โทษ- -โทษกรณ์ -โทษตรัย -โทษทางวินัย -โทษโพย -โทษา -โทษากร -โทษาดิลก -โทษานุโทษ -โทษารมณ์ -โทส- -โทสะ -โทสาคติ -โทโส -โทหฬะ -โทหฬินี -ไท -ไท้ -ไทเทเนียม -ไทเทรต -ไทย -ไทยดำ -ไทยทาน -ไทยธรรม -ไทยน้อย -ไทยนับสาม -ไทยนับห้า -ไทยหลง -ไทยหลวง -ไทยใหญ่ -ไทร -ไทรทอง -ไทรเลียบ -ไทวะ -ธ -ธง -ธงก์ -ธงกระบี่ธุช -ธงจระเข้ -ธงฉาน -ธงชัย -ธงชัยเฉลิมพลของทหารบก -ธงชัยเฉลิมพลของทหารเรือ -ธงชัยเฉลิมพลของทหารอากาศ -ธงชาติ -ธงชาย -ธงตะขาบ -ธงนำริ้ว -ธงบรมราชวงศ์น้อย -ธงบรมราชวงศ์ใหญ่ -ธงประจำกองทัพบก -ธงประจำกองทัพเรือ -ธงประจำกองทัพอากาศ -ธงพระครุฑพ่าห์ -ธงพิทักษ์สันติราษฎร์ -ธงมหาราชน้อย -ธงมหาราชใหญ่ -ธงเยาวราชน้อย -ธงเยาวราชใหญ่ -ธงราชนาวี -ธงราชินีน้อย -ธงราชินีใหญ่ -ธงสามเหลี่ยม -ธช -ธชี -ธตรฐ -ธน -ธน- -ธนธานี -ธนบดี -ธนบัตร -ธนสมบัติ -ธนสาร -ธนัง -ธนาคม -ธนาคาร -ธนาคารพาณิชย์ -ธนาคารโลก -ธนาคารออมสิน -ธนาณัติ -ธนิต -ธนิษฐะ -ธนิษฐา -ธนุ -ธนุร- -ธนุรมารค -ธนุรวิทยา -ธนุรเวท -ธนู -ธนูศิลป์ -ธเนศ -ธเนศวร -ธโนปจัย -ธไนศวรรย์ -ธม -ธมกรก -ธร -ธรง -ธรณ -ธรณิน -ธรณินทร์ -ธรณิศ -ธรณิศร -ธรณิศวร์ -ธรณี -ธรณีกันแสง -ธรณีประตู -ธรณีมณฑล -ธรณีร้องไห้ -ธรณีวิทยา -ธรณีศวร -ธรณีสงฆ์ -ธรณีสาร -ธรณีสูบ -ธรมาน -ธรรม -ธรรม- -ธรรมกถา -ธรรมกถึก -ธรรมกาม -ธรรมกาย -ธรรมการ -ธรรมการย์ -ธรรมเกษตร -ธรรมขันธ์ -ธรรมคุณ -ธรรมจรณะ -ธรรมจรรยา -ธรรมจริยา -ธรรมจักร -ธรรมจักษุ -ธรรมจาคะ -ธรรมจารี -ธรรมจินดา -ธรรมเจดีย์ -ธรรมชาติ -ธรรมฐิติ -ธรรมดา -ธรรมทรรศนะ -ธรรมธาดา -ธรรมธาตุ -ธรรมนาถ -ธรรมนิตย์ -ธรรมนิยม -ธรรมนิยาม -ธรรมนิเวศ -ธรรมนูญ -ธรรมนูญการปกครองราชอาณาจักร -ธรรมเนียม -ธรรมเนียมประเพณี -ธรรมบท -ธรรมบาล -ธรรมบิฐ -ธรรมปฏิรูป -ธรรมปฏิสัมภิทา -ธรรมประติรูป -ธรรมยุต -ธรรมยุทธ์ -ธรรมรัตน์ -ธรรมราชา -ธรรมวัตร -ธรรมศาสตร์ -ธรรมสถิติ -ธรรมสภา -ธรรมสรีระ -ธรรมสังคีติ -ธรรมสังเวช -ธรรมสากัจฉา -ธรรมสามิสร -ธรรมสามี -ธรรมสาร -ธรรมะ -ธรรมะธัมโม -ธรรมันเตวาสิก -ธรรมาทิตย์ -ธรรมาธรรม -ธรรมาธิปไตย -ธรรมาธิษฐาน -ธรรมานุธรรมปฏิบัติ -ธรรมานุสาร -ธรรมาภิมุข -ธรรมาภิสมัย -ธรรมายตนะ -ธรรมารมณ์ -ธรรมาสน์ -ธรรมิก -ธรรมิก- -ธรา -ธราดล -ธราธร -ธราธาร -ธราธิบดี -ธราธิป -ธริษตรี -ธเรศ -ธเรษตรี -ธเรษตรีศวร -ธวัช -ธังก -ธัช -ธัญ -ธัญ- -ธัญโกศ -ธัญเขต -ธัญชาติ -ธัญญาหาร -ธัญดัจ -ธัญเบญจก -ธัญพืช -ธัญมาส -ธันยา -ธันยาวาท -ธันวาคม -ธัมมะ -ธาดา -ธาตรี -ธาตวากร -ธาตุ -ธาตุ- -ธาตุโขภ -ธาตุครรภ -ธาตุเจดีย์ -ธาตุเบา -ธาตุมมิสสา -ธาตุสถูป -ธาตุหนัก -ธานิน -ธานินทร์ -ธานี -ธาร -ธารกำนัล -ธารคำนัล -ธารณ -ธารณะ -ธารณา -ธารณามัย -ธารพระกร -ธารยักษ์ -ธารา -ธาราเคหะ -ธาราธิคุณ -ธารายนต์ -ธาษตรี -ธำมรงค์ -ธำรง -ธิดา -ธิติ -ธีร- -ธีรภาพ -ธีรราช -ธุช -ธุดงค- -ธุดงค์ -ธุดงควัตร -ธุดงคสมาทาน -ธุต -ธุตตะ -ธุม- -ธุมเกตุ -ธุมชาล -ธุมเพลิง -ธุมา -ธุร- -ธุรการ -ธุรกิจ -ธุระ -ธุรำ -ธุลี -ธุว- -ธุวดารา -ธุวภาค -ธุวมณฑล -ธุวยัษฎี -ธูป -ธูป- -ธูปบาตร -ธูปแพเทียนแพ -ธูปไม้ระกำ -ธูปฤๅษี -เธนุ -เธอ -เธียร -โธ่ -โธวน -น -นก -นกกระจอก -นกกระจอกทอง -นกกระทุง -นกกะปูด -นกกางปีก -นกเขา -นกคุ่ม -นกจาก -นกต่อ -นกยูง -นกรู้ -นกสองหัว -นกหก -นกหวีด -นกอยู่ในปล่อง -นกุล -นข -นข- -นขทารณ์ -นขลิขิต -นขเลขา -นขา -นค -นคร -นคร- -นครบาล -นครบาลจังหวัด -นครรัฐ -นครวาสี -นครโสภิณี -นครโสเภณี -นคราทร -นครินทร์ -นคเรศ -นคินทร -นคินทร์ -นเคนทร์ -นเคศวร -นโคทร -นง -นงคราญ -นงคุฐ -นงนุช -นงพะงา -นงพาล -นงพุธ -นงโพธ -นงเยาว์ -นงราม -นงลักษณ์ -นท -นที -นทีรัย -นนตรา -นนท์ -นนทรี -นนทลี -นนทิ -นบ -นบนอบ -นปุงสกลิงค์ -นปุงสกลึงค์ -นพ -นพ- -นพกะ -นพเก้า -นพคุณ -นพเคราะห์ -นพนิต -นพปฎล -นพพล -นพพวง -นพพัน -นพรัตน์ -นพศก -นพศูล -นภ- -นภจร -นภดล -นภมณฑล -นภวิถี -นภศูล -นภสินธุ์ -นภา -นภาลัย -นม -นมกระแชง -นมข้น -นมควาย -นมชะนี -นมช้าง -นมตาบอด -นมตาสะแก -นมตำเรีย -นมตำเลีย -นมนาง -นมนาน -นมบกอกพร่อง -นมบอด -นมผง -นมผา -นมพวง -นมพิจิตร -นมแมว -นมไม้ -นมวัว -นมสวรรค์ -นมสาว -นมหนู -นมะ -นมักการ -นมัสการ -นมาซ -นย- -นยนะ -นยนา -นยะ -นยักษ์ -นโยบาย -นร- -นรก -นรกานต์ -นรการ -นรเทพ -นรนาถ -นรนายก -นรบดี -นรบาล -นรพยัคฆ์ -นรราช -นรเศรษฐ์ -นรสิงห์ -นรสีห์ -นรา -นราธิป -นรินทร์ -นริศ -นริศร -นริศวร -นรี -นรีเวชวิทยา -นเรนทรสูร -นเรศ -นเรศวร -นเรศวร์ชนช้าง -นเรศูร -นโรดม -นฤ- -นฤคหิต -นฤโฆษ -นฤดม -นฤตย- -นฤตย์ -นฤตยศาลา -นฤตยศาสตร์ -นฤตยสถาน -นฤเทพ -นฤนาท -นฤบดี -นฤบาล -นฤเบศ -นฤป -นฤปนีติ -นฤปเวศม์ -นฤปัตนี -นฤพาน -นฤมล -นฤมาณ -นฤมิต -นลาฏ -นลิน -นลินี -นว- -นวก- -นวกภูมิ -นวกรรม -นวกรรมิก -นวกะ -นวการ -นวกิจ -นวโกวาท -นวครหะ -นวคุณ -นวเคราะห์ -นวชาต -นวด -นวดข้าว -นวดแป้ง -นวดฟั้น -นวทวาร -นวนิต -นวนิยาย -นวปฎล -นวพธู -นวม -น่วม -นวมี -นวมุข -นวย -นวยนาด -นวรัตน์ -นวล -นวลจันทร์ -นวลจันทร์ทะเล -นวลน้อย -นวลระหง -นวลลออ -นวลละออง -นวลหง -นวโลหะ -นววิธ -นวอรหาทิคุณ -นวังคสัตถุศาสน์ -นวารหาทิคุณ -นวาระ -นหาดก -นหาน -นหารุ -นหุต -นฬ -นฬ- -นฬการ -นฬป -นอ -นอก -นอกกฎหมาย -นอกครู -นอกคอก -นอกจาก -นอกใจ -นอกชาน -นอกตำรา -นอกถนน -นอกบาลี -นอกรีต -นอกรีตนอกรอย -นอกลู่นอกทาง -นอกเหนือ -นอง -น่อง -น้อง -น้องๆ -นองเนือง -น่องแน่ง -น้องเพล -นองเลือด -น่องสิงห์ -นองหน้า -นอต -นอน -นอนก้น -นอนกิน -นอนใจ -นอนตาไม่หลับ -นอนตีพุง -นอนนก -นอนแบ็บ -นอนโรง -นอนเล่น -นอนวัน -นอนเวร -นอนหลับทับสิทธิ์ -นอนหลับไม่รู้ นอนคู้ไม่เห็น -นอบ -นอบนบ -นอบน้อม -น้อม -น้อมเกล้าน้อมกระหม่อมถวาย -น้อมนำ -น้อย -น้อยแง่ -น้อยใจ -น้อยเนื้อต่ำใจ -น้อยหน่า -น้อยหน้า -น้อยหรือ -น้อยโหน่ง -นะ -นะแน่ง -นัก -นักกะ -นักการ -นักการเมือง -นักกีฬา -นักขัต -นักขัต- -นักขัตฤกษ์ -นักข่าว -นักงาน -นักตะ -นักท่องเที่ยว -นักเทศ -นักเทศน์ -นักโทษ -นักโทษเด็ดขาด -นักโทษพิเศษ -นักธรรม -นักบวช -นักบิน -นักบุญ -นักปราชญ์ -นักพรต -นักร -นักรบ -นักเรียน -นักเลง -นักศึกษา -นักษัตร -นักษัตร- -นักษัตรจักร -นักษัตรเนมี -นักษัตรบดี -นักษัตรบถ -นักษัตรปาฐก -นักษัตรมณฑล -นักษัตรมาลา -นักษัตรโยค -นักษัตรวิทยา -นักสนม -นักสราช -นักสวด -นักสิทธิ์ -นักสืบ -นักหนา -นัข -นัค -นัคคะ -นั่ง -นั่งกินนอนกิน -นั่งขัดสมาธิ -นังคัล -นั่งคุกเข่า -นั่งซัง -นั่งทาง -นั่งทางใน -นั่งเทียน -นั่งในหัวใจ -นั่งปรก -นั่งโป่ง -นั่งพับเพียบ -นั่งเมือง -นั่งยองๆ -นั่งร้าน -นั่งราว -นั่งเล่น -นั่งห้าง -นัจ -นัฏ -นัฏก -นัฑ -นัด -นัดดา -นัดแนะ -นัดหมาย -นัตถุ์ -นั่น -นั้น -นั่นซี -นันท- -นันททายี -นันทน์ -นันทนาการ -นันทปักษี -นันทิ -นั่นแน่ -นั่นปะไร -นั้นแล -นั่นแหละ -นั่นเอง -นับ -นับถือ -นับประสา -นับหน้าถือตา -นัย -นัยน์ -นัยน์ตา -นัยน์เนตร -นัยนา -นัยนามพุ -นัยว่า -นัว -นัวเนีย -นา -น่า -น้า -นาก -นากบุด -นากสวาด -นากาสาหรี -น่าเกลียดน่าชัง -นาขอบเหล็ก -นาค -นาค- -นาคเกี่ยว -นาคเกี้ยว -นาคเกี้ยวกระหวัด -นาคเกี่ยวพระสุเมรุ -นาคทนต์ -นาคบริพันธ์ -นาคบาศ -นาคปรก -นาคปัก -นาคพันธ์ -นาคร -นาครวย -นาคราช -นาคราชแผลงฤทธิ์ -นาคลดา -นาคเล่นน้ำ -นาควิถี -นาคสะดุ้ง -นาคสังวัจฉร -นาคา -นาคาวโลก -นาคินทร์ -นาคี -นาคู่โค -นาเคนทร์ -นาเคศ -นาเคศวร -นาโครคินทร -นาง -นางกราย -นางกวัก -นางเกล็ด -นางงาม -นางจรัล -นางจุม -นางชม -นางดำ -นางท้าว -นางนวล -นางนูน -นางแนบ -นางใน -นางบำเรอ -นางพญา -นางพระกำนัล -นางฟ้า -นางเมือง -นางไม้ -นางแย้ม -นางรม -นางรมใหญ่ -นางรอง -นางร้องไห้ -นางรำ -นางเรียง -นางล้อม -นางเล็ด -นางเลิ้ง -นางสนองพระโอษฐ์ -นางสาว -นางหงส์ -นางห้าม -นางอ้อม -นางอาย -นางเอก -นางแอ่น -นาเชิงทรง -นาฏ -นาฏ- -นาฏก -นาฏกรรม -นาฏดนตรี -นาฏย- -นาฏศิลป์ -นาด -นาดำ -นาถ -นาท -นาที -นาน -น่าน -นานนม -น่านน้ำ -น่านน้ำอาณาเขต -น่านฟ้า -นานสองนาน -นานแสนนาน -นานัครส -นานัตว -นานัปการ -นานา -นานาเนก -นานาประการ -นาเนก -นาบ -นาบข้าว -นาปรัง -นาปี -นาฟางลอย -นาภิ -นาภี -นาม -นาม- -นามกร -นามธรรม -นามไธย -นามบัตร -นามปากกา -นามแฝง -นามสกุล -นามสงเคราะห์ -นามสมญา -นามานุกรม -นามานุศาสตร์ -นามาภิไธย -นาเมือง -นาย -น่าย -นายก -นายกเทศมนตรี -นายกรัฐมนตรี -นายงาน -นายเงิน -นายจ้าง -นายตรวจ -นายท่า -นายท้าย -นายทุน -นายธง -นายประกัน -นายประเพณี -นายโรง -นายว่าขี้ข้าพลอย -นายเวร -นายหน้า -นายอากร -นายอำเภอ -นายิกา -นารา -นารายณ์ -นารายณ์ทรงเครื่อง -นารายณ์ประลองศิลป์ -นารายณ์หัตถ์ -นารี -นารีบูร -นารีผล -นารีสูร -นาเรศ -นาลิวัน -นาลี -นาว -น้าว -นาวา -นาวิก -นาวิก- -นาวิกโยธิน -นาวิน -นาวี -นาเวศ -นาศ -นาสวน -นาสา -นาสิก -นาหว่าน -นาฬิกา -นาฬิกาแดด -นาฬิกาทราย -นาฬิกาน้ำ -นาฬิเก -นาฬี -นำ -น้ำ -น้ำกรด -น้ำกระด้าง -น้ำกระสาย -น้ำกะทิ -น้ำกาม -น้ำเกลือ -น้ำเกิด -น้ำขาว -น้ำข้าว -น้ำขึ้น -น้ำขึ้นให้รีบตัก -น้ำขุ่นไว้ใน น้ำใสไว้นอก -น้ำแข็ง -น้ำแข็งแห้ง -น้ำครำ -น้ำคร่ำ -น้ำคัน -น้ำค้าง -น้ำค้างแข็ง -น้ำคาวปลา -น้ำคำ -น้ำเค็ม -น้ำเคย -น้ำเงิน -น้ำจัณฑ์ -นำจับ -น้ำจิ้ม -น้ำใจ -น้ำใจใคร่ -น้ำชน -น้ำชุบ -น้ำเชี่ยวอย่าขวางเรือ -น้ำเชื้อ -น้ำเชื่อม -น้ำซับ -น้ำซาวข้าว -น้ำซึม -น้ำซึมบ่อทราย -น้ำดอกไม้ -น้ำดอกไม้เทศ -น้ำดอกไม้สด -น้ำดับไฟ -น้ำดิบ -น้ำดี -น้ำตก -น้ำต้อย -น้ำตะกู -น้ำตะโก -น้ำตะไคร้ -น้ำตับ -น้ำตา -น้ำตาเช็ดหัวเข่า -น้ำตาตกใน -น้ำตาเทียน -น้ำตาย -น้ำตาล -น้ำตาลใกล้มด ใครจะอดได้ -น้ำตาลจีน -น้ำเต้า -น้ำใต้ดิน -น้ำทรง -น้ำท่วมทุ่ง ผักบุ้งโหรงเหรง -น้ำท่วมปาก -น้ำท่า -นำทาง -น้ำทูนหัว -นำเที่ยว -น้ำไทย -น้ำนม -น้ำนมแมว -น้ำนมราชสีห์ -น้ำนวล -น้ำนอง -น้ำนอนคลอง -น้ำน้อยแพ้ไฟ -น้ำนิ่งไหลลึก -น้ำบ่อน้อย -น้ำโบย -น้ำประสานทอง -น้ำปลา -น้ำป่า -น้ำผลึก -น้ำผึ้ง -น้ำพระพิพัฒน์สัตยา -น้ำพริก -น้ำพริกเผา -น้ำพักน้ำแรง -นำพา -น้ำพึ่งเรือเสือพึ่งป่า -น้ำพุ -น้ำมนต์ -น้ำมนตร์ -น้ำมัน -น้ำมันก๊าด -น้ำมันเขียว -น้ำมันเครื่อง -น้ำมันจันทน์ -น้ำมันโซลา -น้ำมันดิน -น้ำมันดิบ -น้ำมันดีเซล -น้ำมันตานี -น้ำมันเตา -น้ำมันเบนซิน -น้ำมันพราย -น้ำมันมนตร์ -น้ำมันยาง -น้ำมันระกำ -น้ำมันสน -น้ำมันสลัด -น้ำมันหม่อง -น้ำมันหล่อลื่น -น้ำมาปลากินมด น้ำลดมดกินปลา -น้ำมือ -น้ำมูก -น้ำเมา -น้ำย่อย -น้ำยา -น้ำยาเคมี -น้ำเย็นปลาตาย -นำร่อง -น้ำร้อนปลาเป็น -น้ำรัก -น้ำแร่ -น้ำลง -น้ำลดตอผุด -น้ำละว้า -น้ำลาย -น้ำลายสอ -น้ำลายหก -น้ำลายไหล -น้ำเลี้ยง -น้ำวน -น้ำว้า -น้ำไว -น้ำส้ม -น้ำส้มสายชู -นำสมัย -น้ำสังข์ -น้ำสั่งฟ้า ปลาสั่งฝน -นำสืบ -น้ำสุก -น้ำเสียง -นำแสดง -น้ำหนวก -น้ำหนัก -น้ำหน้า -น้ำหนึ่ง -น้ำหนึ่งใจเดียวกัน -น้ำหมาก -น้ำหอม -น้ำเหลือง -น้ำเหลืองน้ำตาล -น้ำไหลไฟดับ -น้ำอดน้ำทน -น้ำอบ -น้ำอบฝรั่ง -น้ำอ่อน -น้ำอ้อย -น้ำอัดลม -น้ำอาบงัว -นิ -นิกเกิล -นิกขะ -นิกขันต์ -นิกร -นิกรอยด์ -นิกาย -นิคม -นิคมที่ดิน -นิคมสร้างตนเอง -นิคมสหกรณ์ -นิคมอุตสาหกรรม -นิครนถ์ -นิคห- -นิคหกรรม -นิคหะ -นิคหิต -นิคาลัย -นิคาหก -นิคาหก- -นิเคราะห์ -นิโคติน -นิโครธ -นิโครม -นิง -นิ่ง -นิ่งเงียบ -นิ่งเฉย -นิ่งแน่ -นิจ -นิจ- -นิจศีล -นิด -นิดเดียว -นิดหน่อย -นิดหนึ่ง -นิตย- -นิตย์ -นิตยทาน -นิตยภัต -นิตยสาร -นิติ -นิติกร -นิติกรณ์ -นิติกรรม -นิติการ -นิติการณ์ -นิติธรรม -นิตินัย -นิติบัญญัติ -นิติบุคคล -นิติภาวะ -นิติวิทยาศาสตร์ -นิติเวชศาสตร์ -นิติศาสตร์ -นิติสมมติ -นิติสัมพันธ์ -นิติเหตุ -นิทร -นิทรรศการ -นิทรา -นิทรารมณ์ -นิทัศน์ -นิทาฆ -นิทาน -นิทานวจนะ -นิเทศ -นิเทศศาสตร์ -นิธาน -นิธิ -นินทา -นินนะ -นินนาท -นินหุต -นินาท -นิบาต -นิปริยาย -นิปัจการ -นิพจน์ -นิพนธ์ -นิพพาน -นิพพิทา -นิพพิทาญาณ -นิพัทธ- -นิพัทธ์ -นิพัทธกุศล -นิพันธ์ -นิพิท -นิเพท -นิภา -นิ่ม -นิ้ม -นิมนต์ -นิ่มนวล -นิมมาน -นิมมานรดี -นิมิต -นิยต -นิยต- -นิยม -นิยมนิยาย -นิยยาน -นิยยานิก- -นิยัตินิยม -นิยาม -นิยาย -นิยุต -นิร -นิรคุณ -นิรโฆษ -นิรชร -นิรชรา -นิรทุกข์ -นิรเทศ -นิรโทษ -นิรโทษกรรม -นิรนัย -นิรนาม -นิรพัตร -นิรภัย -นิรมล -นิรมาณ -นิรมาณกาย -นิรมาน -นิรมิต -นิรย- -นิรยบาล -นิรัติศัย -นิรันดร -นิรันตร- -นิรันตราย -นิรัพพุท -นิรา -นิราพาธ -นิรามัย -นิรามิษ -นิราลัย -นิราศ -นิราศรพ -นิราศรัย -นิรินธน์ -นิรินธนพินาศ -นิรุกติ -นิรุกติศาสตร์ -นิรุตติ -นิรุตติปฏิสัมภิทา -นิรุทก -นิรุทธ์ -นิโรช -นิโรธ -นิโรธ- -นิโรธสมาบัติ -นิล -นิล- -นิลบัตร -นิลปัทม์ -นิลรัตน์ -นิลุบล -นิโลตบล -นิโลบล -นิ่ว -นิ้ว -นิวคลิอิก -นิวเคลียร์ -นิวเคลียส -นิวตรอน -นิวรณ์ -นิ้วไหนร้ายก็ตัดนิ้วนั้น -นิวัต -นิวัตน์ -นิวาต -นิวาส -นิเวศ -นิเวศ- -นิเวศน์ -นิเวศวิทยา -นิศา -นิศากร -นิศากาล -นิศาคม -นิศาชล -นิศาทิ -นิศานาถ -นิศาบดี -นิศามณี -นิศารัตน์ -นิษกรม -นิษาท -นิสภ- -นิสัช -นิสัชชาการ -นิสัย -นิสัยใจคอ -นิสาท -นิสิต -นิสีทน- -นิสีทนะ -นิสีทนาการ -นิเสธ -นี่ -นี้ -นีติ -นีติธรรม -นีติศาสตร์ -นี่นัน -นี่แน่ะ -นีร- -นีรจร -นีรช -นีรนาท -นี่แหละ -นีออน -นี่เอง -นีโอดิเมียม -นึก -นึกคิด -นึกดู -นึกถึง -นึกเห็น -นึกออก -นึ่ง -นึ่งหม้อเกลือ -นุ -นุง -นุ่ง -นุ่งกระโจมอก -นุ่งเจียมห่มเจียม -นุงถุง -นุงนัง -นุ่งห่ม -นุช -นุด -นุต -นุ่น -นุ่ม -นุ่มนวล -นุ่มนิ่ม -นุ่มเนื้อ -นุ้ย -นูน -นู่น -นู้น -เนกขะ -เนกขัม -เน่ง -เนตบอล -เนตร -เนติ -เนติบัณฑิต -เน้น -เนบิวลา -เนปจูน -เนปทูเนียม -เนมิ -เนมิตก- -เนมิตกนาม -เนมิตกะ -เนย -เนยเทียม -เนยใส -เนรกัณฐี -เนรคุณ -เนรเทศ -เนรนาด -เนรนาถ -เนรมิต -เนระพูสี -เนษาท -เนอ -เน้อ -เนา -เน่า -เน่าไฟ -เนาว- -เนาวนิต -เนาวรัตน์ -เนิน -เนิ่น -เนิ่นๆ -เนิ่นนาน -เนิบ -เนิบๆ -เนิบนาบ -เนียง -เนียน -เนียม -เนียร -เนียรทุกข์ -เนียรเทศ -เนียรนาท -เนื้อ -เนื้อกษัตริย์ -เนื้อความ -เนื้อคู่ -เนื้อเค็ม -เนือง -เนืองๆ -เนื่อง -เนื่องจาก -เนื่องด้วย -เนื่องแต่ -เนืองนอง -เนืองนิตย์ -เนืองแน่น -เนื้องอก -เนื้อตัว -เนื้อตาย -เนื้อเต่ายำเต่า -เนื้อถ้อยกระทงความ -เนื้อทราย -เนื้อที่ -เนื้อแท้ -เนื้อเปื่อย -เนื้อเพลง -เนื้อไม้ -เนือย -เนือยๆ -เนื้อเยื่อ -เนื้อเยื่อกล้ามเนื้อ -เนื้อเยื่อบุผิว -เนื้อเยื่อประสาท -เนื้อเยื่อยึดต่อ -เนื้อร้อง -เนื้อร้าย -เนื้อเรื่อง -เนื้อสมัน -เนื้อหา -เนื้ออ่อน -แน่ -แน่ง -แน่งน้อย -แน่ใจ -แน่ชัด -แน่แท้ -แน่น -แน่นขนัด -แน่นท้อง -แน่นนันต์ -แน่นแฟ้น -แน่นหนา -แน่นหน้าอก -แน่นอน -แน่นิ่ง -แน่แน่ว -แนบ -แนบเนียน -แนบแน่น -แนม -แนว -แน่ว -แนวทาง -แนวที่ห้า -แน่วแน่ -แนวโน้ม -แนวป่า -แนวรบ -แนวร่วม -แนวเรือ -แนวหน้า -แนวหลัง -แนะ -แน่ะ -แนะนัด -แนะนำ -แนะแนว -แนะแหน -โน -โน้ต -โน้ตเพลง -โนน -โน่น -โน้น -โนเน -โนเบเลียม -โน้ม -โน้มน้าว -โนมพรรณ -โนรา -โนรี -ใน -ในกรม -ในไส้ -ในหลวง -ไน -ไนต์คลับ -ไนโตรเจน -ไนลอน -ไนโอเบียม -บ -บ่ -บก -บกพร่อง -บง -บ่ง -บงก- -บงก์ -บงกช -บงกชกร -บงการ -บ๊งเบ๊ง -บงสุ- -บงสุ์ -บงสุกุล -บงสุกูลิก -บงอับบงรา -บ่งอับบ่งรา -บฏ -บด -บดขยี้ -บดบัง -บดเอื้อง -บดินทร์ -บดี -บดีธรรม -บดีพรต -บดีวรดา -บดีศร -บถ -บท -บท- -บทกลอน -บทกวีนิพนธ์ -บทกำหนดโทษ -บทความ -บทคัดย่อ -บทจร -บทเจรจา -บทเฉพาะกาล -บทดอกสร้อย -บทนำ -บทบงกช -บทบงสุ์ -บทบรรณาธิการ -บทบัญญัติ -บทบาท -บทบาทมาก -บทบูรณ์ -บทประพันธ์ -บทพากย์ -บทเพลง -บทภาชน์ -บทภาชนีย์ -บทมาลย์ -บทร้อง -บทรัช -บทเรศ -บทเรียน -บทวเรศ -บทวลัญช์ -บทวาร -บทศรี -บทสนทนา -บทสังขยา -บทามพุช -บโทน -บน -บ่น -บนข้าวผี ตีข้าวพระ -บ่นถึง -บนบาน -บนบานศาลกล่าว -บพิตร -บพิตรพระราชสมภาร -บพิธ -บ่ม -บ่มผิว -บ่มมัน -บ่มหนอง -บมิ -บร- -บรทาร -บรทารกรรม -บรม -บรม- -บรมธาตุ -บรมบพิตร -บรมวงศานุวงศ์ -บรมอัฐิ -บรมัตถ์ -บรรกวด -บรรจง -บรรจถรณ์ -บรรจบ -บรรจวบ -บรรจุ -บรรเจิด -บรรณ -บรรณ- -บรรณกุฎี -บรรณพิภพ -บรรณโลก -บรรณศาลา -บรรณสาร -บรรณาการ -บรรณาคม -บรรณาธิกร -บรรณาธิการ -บรรณานุกรม -บรรณารักษ์ -บรรณารักษศาสตร์ -บรรดา -บรรดาก -บรรดามี -บรรดาศักดิ์ -บรรตานึก -บรรถร -บรรทม -บรรทัด -บรรทัดฐาน -บรรทับ -บรรทาน -บรรทุก -บรรเทา -บรรเทือง -บรรพ -บรรพ- -บรรพ์ -บรรพชา -บรรพชิต -บรรพต -บรรพต- -บรรพตกีลา -บรรพตชาล -บรรพตธาตุ -บรรพตมาลา -บรรพตราช -บรรพตวาสี -บรรพตศิขร -บรรพบุรุษ -บรรพภาค -บรรพเภท -บรรพมูล -บรรพสตรี -บรรยง -บรรยงก์ -บรรยเวกษก์ -บรรยากาศ -บรรยาย -บรรลัย -บรรลัยกัลป์ -บรรลัยจักร -บรรลาย -บรรลุ -บรรลุนิติภาวะ -บรรเลง -บรรโลม -บรรษัท -บรรสบ -บรรสพ -บรรสม -บรรสาน -บรรสาร -บรรหาน -บรรหาร -บรอนซ์ -บรัด -บรั่นดี -บรัศว์ -บรากรม -บราง -บราทุกรา -บราลี -บริกรม -บริกรรม -บริกัป -บริการ -บริขา -บริขาร -บริขารโจล -บริคณห์ -บริคณห์สนธิ -บริจาค -บริจารก -บริจาริกา -บริเฉท -บริเฉท- -บริเฉทกาล -บริชน -บริณายก -บริณายกรัตน์ -บริดจ์ -บริบท -บริบวรณ์ -บริบาล -บริบูรณ์ -บริพนธ์ -บริพัตร -บริพันธ์ -บริพาชก -บริพาชิกา -บริพาชี -บริพาร -บริภัณฑ์ -บริภาษ -บริโภค -บริโภคเจดีย์ -บริมาส -บริยาย -บริรม -บริรักษ์ -บริราช -บริวรรต -บริวาร -บริวาส -บริเวณ -บริษการ -บริษัท -บริษัทเครดิตฟองซิเอร์ -บริษัทจำกัด -บริษัทบริวาร -บริษัทมหาชนจำกัด -บริสชน -บริสุทธิ์ -บริสุทธิ์ใจ -บริหาร -บริหาส -บแรง -บแรงภักษ์ -บฤงคพ -บล็อก -บวก -บวง -บ่วง -บ่วงบาศ -บวงสรวง -บวช -บวชชี -บวน -บ้วน -บ้วนปาก -บ้วนพระโอษฐ์ -บวบ -บวบขม -บวม -บวมน้ำ -บ๊วย -บวร -บวร- -บวรโตฎก -บหลิ่ม -บอ -บ่อ -บอก -บอกกล่าว -บอกแขก -บอกคำบอก -บอกบท -บอกบัญชี -บอกบุญ -บอกใบ้ -บอกปัด -บอกเปิด -บอกยี่ห้อ -บอกเล่าเก้าสิบ -บอกวัตร -บอกศาลา -บอกหนทาง -บอกหนังสือสังฆราช -บ่อเกิด -บอง -บ่อง -บ้อง -บ๊อง -บ๊องๆ -บ้องกัญชา -บ้องตะลา -บ้องตัน -บ้องตื้น -บ้องแบ๊ว -บ้องไฟ -บ้องยาแดง -บองหลา -บ้องหู -บอด -บอดสี -บอน -บ่อน -บ่อนแตก -บ่อนทำลาย -บอนลายกระหนก -บ่อน้ำร้อน -บอบ -บอบช้ำ -บอบบาง -บอบแบบ -บ้อม -บ๋อม -บ่อย -บ่อยๆ -บอระเพ็ด -บอระมาน -บอล -บอลลูน -บ้อหุ้น -บเอ -บ๊ะ -บะหมี่ -บัก -บักโกรก -บักอาน -บัคเตรี -บัง -บั้ง -บังกะโล -บังกัด -บังเกิด -บังโกรยตัวผู้ -บังโกรยตัวเมีย -บังโกลน -บังคน -บังคนเบา -บังคนหนัก -บังคม -บังคล -บังควร -บังความ -บังคับ -บังคับการ -บังคับครุ -บังคับใจ -บังคับโท -บังคับบัญชา -บังคับลหุ -บังคับสัมผัส -บังคับเอก -บังคัล -บังโคลน -บังเงา -บังตะวัน -บังตา -บังแทรก -บังใบ -บังเพลิง -บังไพร -บังฟัน -บั้งไฟ -บังมืด -บังวาย -บังเวียน -บังสาด -บังสุกุล -บังสุกูลิก -บังสูรย์ -บังหน้า -บังหวนควัน -บังเหตุ -บังเหิน -บังเหียน -บังอร -บังอวจ -บังอาจ -บังอิง -บังอูร -บังเอิญ -บัญจก -บัญจรงค์ -บัญชร -บัญชา -บัญชาการ -บัญชี -บัญชีกระแสรายวัน -บัญชีเดินสะพัด -บัญญัติ -บัญญัติไตรยางศ์ -บัญหา -บัฏ -บัฐยาพฤต -บัณฑร -บัณฑร- -บัณฑรนาค -บัณฑิต -บัณฑิตย์ -บัณฑุ -บัณฑุกัมพล -บัณฑุกัมพลศิลาอาสน์ -บัณฑุนาค -บัณฑุโรค -บัณฑูร -บัณเฑาะก์ -บัณเฑาะว์ -บัณณาส -บัณรส -บัณรสี -บัด -บัดกรี -บัดซบ -บัดดล -บัดเดี๋ยว -บัดนั้น -บัดนี้ -บัดบง -บัดแบ่ง -บัดแมล่ง -บัดสี -บัดสีบัดเถลิง -บัตร -บัตรเทวดา -บัตรธนาคาร -บัตรพลี -บัตรสนเท่ห์ -บัตรหมาย -บัทม์ -บัน -บั่น -บั้น -บันกวด -บันจวบ -บันจอย -บันดล -บันดาล -บันเดิน -บันโดย -บันได -บันไดแก้ว -บันไดลิง -บันไดเลื่อน -บันแถลง -บั่นทอน -บั้นท้าย -บันทึก -บันทึง -บันเทิง -บันเทิงคดี -บันเบา -บั้นปลาย -บั้นพระองค์ -บันยะบันยัง -บันลือ -บั้นหลวง -บันเหิน -บั้นเอว -บัปผาสะ -บัพ -บัพชา -บัพชิต -บัพพาช -บัพพาชน์ -บัพพาชนียกรรม -บัล -บัลลพ -บัลลังก์ -บัลลูน -บัลวะ -บัว -บัวกลุ่ม -บัวขาบ -บัวคอเสื้อ -บัวตะกั่ว -บัวตูม -บัวถลา -บัวนาง -บัวบก -บัวบังใบ -บัวบาท -บัวผุด -บัวไม่ช้ำ น้ำไม่ขุ่น -บัวโรย -บัวลอย -บัวสวรรค์ -บัวสายติ่ง -บัวสายทิ้ง -บัวฮาดำ -บา -บ่า -บ้า -บ้าๆ -บาก -บากท่า -บากบั่น -บากหน้า -บาง -บ่าง -บ้าง -บางขุนนนท์ -บ่างช่างยุ -บางตา -บางที -บางเบา -บางสุ -บาจก -บาจรีย์ -บาจิกา -บ้าจี้ -บาซิลลัส -บาด -บาดคอ -บาดเจ็บ -บาดใจ -บาดตา -บาดทะจิต -บาดทะพิษ -บาดทะยัก -บาดแผล -บาดเสี้ยนบาดหนาม -บาดหมาง -บาดหมาย -บาดหู -บาดไหม -บาดาล -บ้าดีเดือด -บาแดง -บาต -บาตร -บาตรแก้ว -บาตรใหญ่ -บาท -บาท- -บาทนิเกต -บาทบ -บาทบงกช -บาทบงสุ์ -บาทบริจาริกา -บาทบูรณ์ -บาทภัฏ -บาทภาค -บาทมุทรา -บาทมูล -บาทมูลิกากร -บาทยุคล -บาทรช -บาทรัช -บาทสกุณี -บาทหลวง -บาทาธึก -บาทุกา -บาธรรม -บาน -บาน- -บ้าน -บานกบ -บานเกล็ด -บ้านเกิดเมืองนอน -บ้านเคยอยู่ อู่เคยนอน -บ้านจัดสรร -บ้านช่อง -บานชื่น -บานเช้า -บานตะเกียง -บานตะโก้ -บานตะไท -บ้านแตกสาแหรกขาด -บานทะโรค -บ้านนอก -บ้านนอกขอกนา -บานบาตร -บานบุรี -บานบุรีม่วง -บานเบอะ -บานเบิก -บานเบียง -บานแบะ -บานปลาย -บานแผนก -บานแผละ -บ้านพัก -บานพับ -บานแพนก -บานโภชน์ -บานมงคล -บ้านเมือง -บ้านเมืองมีขื่อมีแป -บานไม่รู้โรย -บานเย็น -บ้านรับรอง -บ้านเรือน -บ้าน้ำลาย -บ่านี่ -บานียะ -บานีโยทก -บ้าบ่น -บ้าบ๋า -บ้าบิ่น -บาบี -บาป -บาป- -บาปกรรม -บาปเคราะห์ -บาปมิตร -บาปหนา -บาพก -บาย -บ่าย -บ้าย -บ่ายควาย -บ่ายเบี่ยง -บายศรี -บายศรีปากชาม -บายสุหรี -บ่ายหน้า -บาร์ -บารนี -บารมี -บาร์เรล -บาร์เลย์ -บารอมิเตอร์ -บ้าระบุ่น -บ้าระห่ำ -บ้าร่าท่า -บาเรียน -บาเรียม -บาล -บ้าลำโพง -บาลี -บ้าเลือด -บ่าว -บ่าวขุน -บ่าวไพร่ -บาศ -บาศก์ -บาสเกตบอล -บ้าสมบัติ -บ้าหมู -บาหลี -บ้าหว่า -บ้าหอบฟาง -บ้าห้าร้อยจำพวก -บ๋ำ -บำเทิง -บำนาญ -บำบวง -บำบัด -บำโบ -บำโบย -บำโบล -บำเพ็ญ -บำราบ -บำราศ -บำรุง -บำรุงขวัญ -บำรู -บำเรอ -บำเรอเชอภักดิ์ -บำหยัด -บำเหน็จ -บิ -บิกู -บิกูปะระมาหนา -บิกูปะระหมั่นหนา -บิฐ -บิณฑ- -บิณฑบาต -บิด -บิดขวา -บิดขี้เกียจ -บิดจะกูด -บิดซ้าย -บิดตะกูด -บิดเบี้ยว -บิดเบือน -บิดพลิ้ว -บิดร -บิดไส้ -บิดหล่า -บิดหัวลูก -บิดา -บิตุ -บิตุจฉา -บิตุรงค์ -บิตุเรศ -บิตุล -บิตุลา -บิตุลานี -บิน -บิ่น -บินยา -บิลเลียด -บิวเรตต์ -บิศาจ -บิสมัท -บี้ -บีกู -บีฑา -บีตา -บีบ -บีบขนมจีน -บีบขมับ -บีบคั้น -บีบน้ำตา -บีบบังคับ -บีบรัด -บี้แบน -บีเยศ -บึก -บึกบึน -บึง -บึ่ง -บึ้ง -บึ้งตึง -บึงบาง -บึ้งบูด -บุ -บุก -บุกบัน -บุกบั่น -บุกเบิก -บุกป่าฝ่าดง -บุกรุก -บุคคล -บุคคล- -บุคคลธรรมดา -บุคคลนิติสมมติ -บุคคลผู้ไร้ความสามารถ -บุคคลสิทธิ -บุคลากร -บุคลาธิษฐาน -บุคลิก -บุคลิก- -บุคลิกทาน -บุคลิกภาพ -บุคลิกลักษณะ -บุง -บุ่ง -บุ้ง -บุ้งขัน -บุ้งจีน -บุ้งทะเล -บุ้งฝรั่ง -บุ้งร้วม -บุญ -บุญ- -บุญเขต -บุญญานุภาพ -บุญญาภินิหาร -บุญญาภิสังขาร -บุญทาย -บุญทำกรรมแต่ง -บุญธรรม -บุญนิธิ -บุญมาวาสนาส่ง -บุญราศี -บุญฤทธิ์ -บุญหนักศักดิ์ใหญ่ -บุณฑริก -บุณมี -บุณย์ -บุตร -บุตร- -บุตรธรรม -บุตรบุญธรรม -บุตรา -บุตรี -บุตรีตระสุม -บุถุชน -บุทคล -บุนนะบุนนัง -บุนนาค -บุบ -บุบบิบ -บุบสลาย -บุปผ- -บุปผชาติ -บุปผวิกัติ -บุพ- -บุพกรรม -บุพการี -บุพกิจ -บุพชาติ -บุพทักษิณ -บุพนิมิต -บุพบท -บุพเปตพลี -บุพพ- -บุพพัณชาติ -บุพพัณหสมัย -บุพพาจารย์ -บุพพาษาฒ -บุพพาสาฬหะ -บุพเพนิวาสานุสติญาณ -บุพเพสันนิวาส -บุพโพ -บุพภาค -บุพวิเทห์ -บุ๋ม -บุ่มบ่าม -บุ้ย -บุ้ยใบ้ -บุ้ยปาก -บุรณะ -บุรพ- -บุรพทิศ -บุรพบท -บุรพผลคุนี -บุรพภัทรบท -บุรพอาษาฒ -บุรพาจารย์ -บุระ -บุรัตถิมทิศ -บุราณ -บุราณทุติยิกา -บุรินทร์ -บุริมทิศ -บุริมพรรษา -บุริมสิทธิ -บุรี -บุรุษ -บุรุษ- -บุรุษโทษ -บุรุษธรรม -บุโรทั่ง -บุษกร -บุษบ- -บุษบก -บุษบง -บุษบราค -บุษบวรรษ -บุษบัน -บุษบา -บุษบากร -บุษบาคม -บุษบาบัณ -บุษบามินตรา -บุษบารักร้อย -บุษป- -บุษปราค -บุษปะ -บุษย- -บุษย์ -บุษย์น้ำทอง -บุษยมาส -บุษยสนาน -บุษยะ -บุษยาภิเษก -บุษราคัม -บุหงง -บุหงัน -บุหงา -บุหงาประหงัน -บุหงามลาซอ -บุหงารำไป -บุหงาลำเจียก -บุหรง -บุหรี่ -บุหรี่พระราม -บุหลัน -บู่ -บู้ -บูชนีย- -บูชนียสถาน -บูชา -บูชากัณฑ์เทศน์ -บูชายัญ -บูชิต -บูด -บูดบึ้ง -บูดเบี้ยว -บู่ทะเล -บู้บี้ -บูร -บูรณ- -บูรณ์ -บูรณภาพ -บูรณมี -บูรณะ -บูรณาการรวมหน่วย -บูรพ -บูรพา -บูรพาจารย์ -บูรพาษาฒ -บูรี -เบ้ -เบ่ง -เบ๊จี๋ -เบญกานี -เบญจ -เบญจ- -เบญจก -เบญจกัลยาณี -เบญจกามคุณ -เบญจกูล -เบญจขันธ์ -เบญจคัพย์ -เบญจคีรีนคร -เบญจโครส -เบญจดุริยางค์ -เบญจธรรม -เบญจบรรพต -เบญจพรรณ -เบญจพล -เบญจเพส -เบญจภูต -เบญจม- -เบญจมสุรทิน -เบญจมาศ -เบญจมาศสวน -เบญจมาศหนู -เบญจรงค์ -เบญจโลหกะ -เบญจวรรค -เบญจวรรณ -เบญจวรรณห้าสี -เบญจศก -เบญจศีล -เบญจา -เบญจางค- -เบญจางค์ -เบญจางคประดิษฐ์ -เบญญา -เบญพาด -เบ็ด -เบ็ดเตล็ด -เบ็ดเสร็จ -เบน -เบนซิน -เบรก -เบริลเลียม -เบรียน -เบส -เบ้อ -เบอร์ -เบอร์คีเลียม -เบ้อเร่อ -เบ้อเร่อเท่อ -เบ้อเริ่ม -เบ้อเริ่มเทิ่ม -เบอะ -เบอะบะ -เบะ -เบา -เบ้า -เบ้าขลุบ -เบาความ -เบาใจ -เบาตัว -เบ้าตา -เบาเต็ง -เบาเนื้อเบาตัว -เบาบาง -เบาปัญญา -เบามือ -เบาไม้ -เบาไม้เบามือ -เบาราณ -เบาแรง -เบาสมอง -เบ้าหลุด -เบาหวาน -เบาเหวง -เบาโหวง -เบาะ -เบาะๆ -เบาะลม -เบาะแส -เบิก -เบิกความ -เบิกทาง -เบิกทูต -เบิกบาน -เบิกพยาน -เบิกพระเนตร -เบิกพระโอษฐ์ -เบิกไพร -เบิกไม้ -เบิกเรือ -เบิกโรง -เบิกโลง -เบิกแว่นเวียนเทียน -เบิกอรุณ -เบิ่ง -เบี้ย -เบียก -เบียกบ้าย -เบี้ยกันดาร -เบี้ยแก้ -เบี่ยง -เบี่ยงบ่าย -เบียด -เบียดกรอ -เบียดบัง -เบียดเบียน -เบียดแว้ง -เบียดเสียด -เบี้ยต่อไส้ -เบี้ยทำขวัญ -เบียน -เบียนธาตุ -เบี้ยน้อยหอยน้อย -เบี้ยบน -เบี้ยบ้ายรายทาง -เบี้ยบำนาญ -เบี้ยโบก -เบี้ยประกันภัย -เบี้ยประชุม -เบี้ยปรับ -เบียร์ -เบี้ยล่าง -เบี้ยเลี้ยง -เบี้ยว -เบี้ยวๆ บูดๆ -เบี้ยหวัด -เบี้ยหัวแตก -เบี้ยหัวแหลก -เบือ -เบื่อ -เบื้อ -เบื้อง -เบื้องญวน -เบื้องต้น -เบื้องบน -เบื้องว่า -เบื้องหน้า -เบื้องหลัง -เบือน -แบ -แบ้ -แบก -แบกหน้า -แบกะดิน -แบคทีเรีย -แบ่ง -แบงก์ -แบ่งค้าง -แบ่งเบา -แบ่งปัน -แบ่งภาค -แบ่งแยก -แบ่งรับแบ่งสู้ -แบ่งสันปันส่วน -แบดมินตัน -แบตเตอรี่ -แบไต๋ -แบน -แบนโจ -แบบ -แบ็บ -แบบข้อคำถาม -แบบฉบับ -แบบบาง -แบบแผน -แบบฝึกหัด -แบบพิธี -แบบพิมพ์ -แบบสอบถาม -แบบอย่าง -แบเบาะ -แบมือ -แบรก -แบเรียม -แบหลา -แบะ -แบะแฉะ -แบะท่า -แบะปาก -แบะอก -โบ -โบ้ -โบ๋ -โบก -โบกขร- -โบกขรณี -โบกขรพรรษ -โบกมือ -โบชุก -โบดก -โบแดง -โบต -โบนัส -โบ๊เบ๊ -โบย -โบยบิน -โบรมีน -โบรอน -โบราณ -โบราณ- -โบราณคดี -โบราณวัตถุ -โบราณสถาน -โบสถ์ -ใบ -ใบ้ -ใบก้นปิด -ใบกองเกิน -ใบกองหนุน -ใบขนสินค้า -ใบขนุน -ใบขับขี่ -ใบแข็ง -ใบ้คลั่ง -ใบเงิน -ใบจอง -ใบฎีกา -ใบดาล -ใบดำ -ใบแดง -ใบแดงแจ้งโทษ -ใบตราส่ง -ใบตอง -ใบตาล -ใบทอง -ใบท้องแดง -ใบแทรก -ใบนาก -ใบบอก -ใบบุญ -ใบเบิก -ใบเบิกทาง -ใบเบิกร่อง -ใบปก -ใบปรือ -ใบปลิว -ใบพัด -ใบพัทธสีมา -ใบโพ -ใบเมี่ยง -ใบไม้ -ใบระกา -ใบรับ -ใบรับรอง -ใบลา -ใบเลี้ยง -ใบสอ -ใบสั่ง -ใบสั่งจ่าย -ใบสัจ -ใบสำคัญ -ใบสำคัญคู่จ่าย -ใบสีมา -ใบสุทธิ -ใบเสมา -ใบเสร็จ -ใบหน้า -ใบหุ้น -ใบหูช้าง -ใบเหยียบย่ำ -ใบอนุญาตขับขี่ -ไบ่ๆ -ป -ปก -ปกกระพอง -ปกเกศ -ปกครอง -ปกคลุม -ปกติ -ปกป้อง -ปกปักรักษา -ปกปิด -ปกรณ์ -ปกรณัม -ปการ -ปกิณกะ -ปกีรณัม -ปโกฏิ -ปง -ป่ง -ปงช้าง -ปงปัง -ปฎล -ปฏัก -ปฏิ- -ปฏิกรณ์ -ปฏิกรรมสงคราม -ปฏิการ- -ปฏิการะ -ปฏิกิริยา -ปฏิกูล -ปฏิคคหิต -ปฏิคม -ปฏิคหิต- -ปฏิคาหก -ปฏิฆะ -ปฏิชีวนะ -ปฏิญญา -ปฏิญญาสากลว่าด้วยสิทธิมนุษยชน -ปฏิญาณ -ปฏิทิน -ปฏิบถ -ปฏิบัติ -ปฏิบัติการ -ปฏิบัติธรรม -ปฏิปทา -ปฏิปักษ์ -ปฏิปัน -ปฏิปุจฉาพยากรณ์ -ปฏิปุจฉาวาที -ปฏิพัทธ์ -ปฏิพากย์ -ปฏิภาค -ปฏิภาค- -ปฏิภาคนิมิต -ปฏิภาณ -ปฏิภาณ- -ปฏิภาณกวี -ปฏิภาณปฏิสัมภิทา -ปฏิภาณโวหาร -ปฏิมา -ปฏิมากร -ปฏิยุทธ์ -ปฏิรพ -ปฏิรูป -ปฏิรูป- -ปฏิโลม -ปฏิวัติ -ปฏิวาต -ปฏิวาท -ปฏิเวธ -ปฏิสนธิ -ปฏิสวะ -ปฏิสังขรณ์ -ปฏิสันถาร -ปฏิสัมภิทา -ปฏิเสธ -ปฏิเสธข่าว -ปฐพี -ปฐพีวิทยา -ปฐม -ปฐม- -ปฐมกรรม -ปฐมฌาน -ปฐมดุสิต -ปฐมทัศน์ -ปฐมเทศนา -ปฐมนิเทศ -ปฐมบุรุษ -ปฐมพยาบาล -ปฐมโพธิกาล -ปฐมยาม -ปฐมฤกษ์ -ปฐมวัย -ปฐมสมโพธิ -ปฐมสุรทิน -ปฐมาษาฒ -ปฐวี -ปณต -ปณาม -ปณิธาน -ปณิธิ -ปณีต -ปด -ปดโป้ -ปดิวรัดา -ปติ -ปติยัต -ปติวัตร -ปถพี -ปถมัง -ปถวี -ปทัฏฐาน -ปทัสถาน -ปทานุกรม -ปทีป -ปทุม -ปน -ป่น -ป่นปี้ -ปนเป -ปนัดดา -ปบ -ปปัญจ- -ปปัญจธรรม -ปปัญจะ -ปม -ปมเขื่อง -ปมจิต -ปมด้อย -ปมเด่น -ปมประสาท -ปมเปา -ปโย- -ปโยชนม์ -ปโยธร -ปโยธรา -ปโยนิธิ -ปโยราศิ -ปร- -ปรก -ปรกติ -ปรง -ปรด -ปรตยักษ์ -ปรตยาค -ปรตเยก -ปรน -ปรนนิบัติ -ปรนปรือ -ปรนเปรอ -ปรนัย -ปรบ -ปรบไก่ -ปรบมือให้ -ปรปักษ์ -ปรม- -ปรมัตถ์ -ปรมาจารย์ -ปรมาณู -ปรมาตมัน -ปรมาภิไธย -ปรมาภิเษก -ปรมินทร์ -ปรเมนทร์ -ปรเมศวร์ -ปรเมษฐ์ -ปรเมหะ -ปรโลก -ปรวด -ปรวนแปร -ปรวาที -ปรศุ -ปรสิต -ปรสิต- -ปรสิตวิทยา -ปร๋อ -ปรองดอง -ปรอด -ปรอดๆ -ปรอท -ปรอย -ปรอยๆ -ประ- -ประกบ -ประกบตัว -ประกฤต -ประกฤติ -ประกล -ประกวด -ประกวดประขัน -ประกวดราคา -ประกอบ -ประกอบด้วย -ประกอบอาหาร -ประกัน -ประกันชีวิต -ประกันเชิงลา -ประกันตัวผู้ต้องหาหรือจำเลย -ประกันภัย -ประกันภัยค้ำจุน -ประกันวินาศภัย -ประกับ -ประกาย -ประกายพรึก -ประการ -ประกาศ -ประกาศก -ประกาศนียบัตร -ประกาศิต -ประกำ -ประกิด -ประกิต -ประกีรณก -ประเกียรณก -ประแกก -ประคด -ประคนธรรพ -ประคนธรรพ์ -ประคบ -ประคบประหงม -ประคอง -ประคับประคอง -ประคัลภ์ -ประคารม -ประคำ -ประคำไก่ -ประคำดีควาย -ประคำร้อย -ประคิ่น -ประคิ่นวินชา -ประคุณ -ประเคน -ประเคราะห์ -ประโคน -ประโคนธรรพ -ประโคนธรรพ์ -ประโคม -ประโคมข่าว -ประจง -ประจญ -ประจบ -ประจบประแจง -ประจวบ -ประจ๋อประแจ๋ -ประจักษ- -ประจักษ์ -ประจักษนิยม -ประจักษ์พยาน -ประจัญ -ประจัญบาน -ประจัน -ประจันหน้า -ประจาก -ประจาค -ประจาน -ประจำ -ประจำการ -ประจำครั่ง -ประจำฉัตร -ประจำซอง -ประจำเดือน -ประจำตรา -ประจำเมือง -ประจำยาม -ประจิม -ประจิ้มประจ่อง -ประจิ้มประเจ๋อ -ประจุ -ประจุขาด -ประจุคมน์ -ประจุบัน -ประจุไฟฟ้า -ประจุโลหิต -ประเจก -ประเจิด -ประเจิดประเจ้อ -ประเจียด -ประแจ -ประแจจีน -ประชด -ประชดประชัน -ประชน -ประชวม -ประชวร -ประชัน -ประชา -ประชากร -ประชากรศาสตร์ -ประชาคม -ประชาชน -ประชาชาติ -ประชาทัณฑ์ -ประชาธิปไตย -ประชานาถ -ประชาบดี -ประชาบาล -ประชาภิบาล -ประชามติ -ประชาราษฎร์ -ประชาสงเคราะห์ -ประชาสัมพันธ์ -ประชิด -ประชี -ประชุม -ประชุมเพลิง -ประชุมสุดยอด -ประเชิญ -ประณต -ประณม -ประณาม -ประณิธาน -ประณิธิ -ประณีต -ประณุท -ประดง -ประดงแดง -ประดน -ประดนธรรม -ประดวน -ประดอน -ประดอย -ประดักๆ -ประดักประเดิด -ประดัง -ประดับ -ประดับประดา -ประดา -ประดาก -ประดาตาย -ประดาทัพ -ประดาน้ำ -ประดาป -ประดาพล -ประดามี -ประดาษ -ประดาเสีย -ประดิ- -ประดิชญา -ประดิดประดอย -ประดิทิน -ประดิรพ -ประดิษฐ- -ประดิษฐ์ -ประดิษฐกรรม -ประดิษฐาน -ประดุง -ประดุจ -ประดู่ -ประดู่แขก -ประดู่ชิงชัน -ประดู่แดง -ประดู่ลาย -ประเด -ประเด็น -ประเดยก -ประเดิม -ประเดียง -ประเดี๋ยว -ประเดี๋ยวก่อน -ประเดี๋ยวเดียว -ประเดี๋ยวนี้ -ประเดี๋ยวประด๋าว -ประแดง -ประแดะ -ประโดย -ประตง -ประตยาค -ประตัก -ประตาปะ -ประติ- -ประติชญา -ประติญาณ -ประติทิน -ประติมากรรม -ประติรพ -ประติศรัพ -ประตู -ประตูชัย -ประตูน้ำ -ประตูป่า -ประตูผี -ประตูฟุตบอล -ประตูระบาย -ประตูรับน้ำ -ประตูลม -ประถม -ประถมจินดา -ประทม -ประทยด -ประท้วง -ประทวน -ประทวนสินค้า -ประทักษ์ -ประทักษิณ -ประทัง -ประทัด -ประทัดจีน -ประทัดทอง -ประทัดฝรั่ง -ประทัดลม -ประทัดเล็ก -ประทัดใหญ่ -ประทับ -ประทับใจ -ประทับตรา -ประทับฟ้อง -ประทับแรม -ประท่า -ประทากล้อง -ประทาน -ประทานบัตร -ประทาย -ประทาศี -ประทิน -ประทิ่น -ประทีป -ประทุก -ประทุฐ -ประทุฐจิต -ประทุน -ประทุมราค -ประทุษ -ประทุษฏ์ -ประทุษฏจิต -ประทุษฐ์ -ประทุษฐจิต -ประทุษร้าย -ประเทศ -ประเทศกันชน -ประเทศชาติ -ประเทศราช -ประเทา -ประเท้า -ประเทียด -ประเทียบ -ประเทือง -ประธาน -ประธานาธิบดี -ประนม -ประนมมือ -ประนอ -ประนอม -ประนอมหนี้ -ประนัง -ประนัปดา -ประนี้ -ประนีประนอม -ประนีประนอมยอมความ -ประบัด -ประบาต -ประปราน -ประปราย -ประปา -ประเปรี้ยง -ประเปรียว -ประแป้ง -ประแปร้น -ประพจน์ -ประพนธ์ -ประพรม -ประพฤติ -ประพฤทธิ์ -ประพัด -ประพัทธ์ -ประพันธ์ -ประพาต -ประพาส -ประพาสต้น -ประพาสมหรณพ -ประพาฬ -ประพิณ -ประพิมพ์ประพาย -ประพุทธ์ -ประเพณี -ประเพณีนิยม -ประเพ้อ -ประแพร่งประแพรว -ประโพธ -ประไพ -ประไพร -ประภพ -ประภัสสร -ประภา -ประภากร -ประภาคาร -ประภาพ -ประภามณฑล -ประภาษ -ประภาส -ประเภท -ประมง -ประมวญ -ประมวล -ประมวลกฎหมาย -ประมวลการสอน -ประมวลรัษฎากร -ประมัตตะ -ประมาณ -ประมาณการ -ประมาณตน -ประมาณตัว -ประมาท -ประมาทหน้า -ประมุข -ประมุท -ประมูล -ประเมิน -ประเมินภาษี -ประโมง -ประโมทย์ -ประยงค์ -ประยุกต์ -ประยุทธ์ -ประยุร -ประยูร -ประโยค -ประโยคประธาน -ประโยคสัมปทา -ประโยชน์ -ประโรหิต -ประลมพ์ -ประลอง -ประลองยุทธ์ -ประลัย -ประลัยกัลป์ -ประลัยวาต -ประลาต -ประลาย -ประลึง -ประลุ -ประลุง -ประเล่ห์ -ประเล้าประโลม -ประโลประเล -ประโลม -ประโลมโลก -ประวรรต -ประวรรตน์ -ประวัติ -ประวัติ- -ประวัติการ -ประวัติการณ์ -ประวัติกาล -ประวัติศาสตร์ -ประวาต -ประวาล -ประวาลปัทม์ -ประวาลผล -ประวาลวรรณ -ประวาส -ประวิง -ประวิช -ประวิตร -ประวิสรรชนีย์ -ประวีณ -ประเวณี -ประเวประวิง -ประเวศ -ประเวศน์ -ประศม -ประศาสน์ -ประศุ -ประสก -ประสงค์ -ประสงค์ร้าย -ประสบ -ประสบการณ์ -ประสบการณ์นิยม -ประสพ -ประสม -ประสมประสาน -ประสมประเส -ประสมพันธุ์ -ประสมโรง -ประสะ -ประสัก -ประสันนาการ -ประสัยห- -ประสัยห์ -ประสัยหาการ -ประสัยหาวหาร -ประสา -ประสาท -ประสาท- -ประสาทการ -ประสาทรูป -ประสาทหลอน -ประสาธน์ -ประสาน -ประสานงา -ประสานเนรมิต -ประสานเสียง -ประสาร -ประสิทธิ- -ประสิทธิ์ -ประสิทธิ์ประสาท -ประสิทธิผล -ประสิทธิภาพ -ประสิทธิเม -ประสีประสา -ประสูต -ประสูติ -ประเสบันอากง -ประเสริฐ -ประแสบัน -ประหนึ่ง -ประหม่า -ประหยัด -ประหรณ์ -ประหลาด -ประหล่ำ -ประหลิ่ม -ประหวัด -ประหวั่น -ประหว่า -ประหัต -ประหัตประหาร -ประหาณ -ประหาร -ประหารชีวิต -ประหาส -ประเหล -ประเหส -ประเหียล -ประอบ -ประอร -ประอรประเอียง -ประอึง -ประอุก -ประเอียง -ประแอก -ประฮาม -ปรัก -ปรักปรำ -ปรักมะ -ปรักหักพัง -ปรัง -ปรัชญา -ปรัด -ปรัตถจริยา -ปรัตยนต์ -ปรัตยักษ์ -ปรัตยันต์ -ปรัตยัย -ปรัตยุตบัน -ปรัตยุบัน -ปรัตยูษ -ปรัตยูห์ -ปรัตเยก -ปรัน -ปรั่น -ปรั้น -ปรับ -ปรับทุกข์ -ปรับโทษ -ปรับปรุง -ปรับไหม -ปรับอากาศ -ปรับอาบัติ -ปรัมปรา -ปรัศจิม -ปรัศนา -ปรัศนี -ปรัศว์ -ปร่า -ปรากฏ -ปรากฏการณ์ -ปรากรม -ปรากฤต -ปราการ -ปราคภาร -ปราคาร -ปราง -ปรางค์ -ปรางคณะ -ปรางค์ปรา -ปราจีน -ปราชญ์ -ปราชญา -ปราชัย -ปราชาปัตยวิวาหะ -ปราชิต -ปราณ -ปราณี -ปราด -ปราดเปรียว -ปราดเปรื่อง -ปราติหารย์ -ปราทุกรา -ปราน -ปรานี -ปรานีตีเอาเรือ -ปรานีปราศรัย -ปราบ -ปราบดาภิเษก -ปราบปราม -ปราปต์ -ปราภพ -ปราม -ปรามาส -ปราโมช -ปราโมทย์ -ปราย -ปรารถนา -ปรารภ -ปรารมภ์ -ปราศ -ปราศจาก -ปราศรัย -ปราษณี -ปราษาณ -ปราสัย -ปราสาท -ปรำ -ปริ- -ปริก -ปริกขาร -ปริกรรม -ปริกัป -ปริกัลป- -ปริกัลปมาลา- -ปริขา -ปริคณห์ -ปริจาค -ปริจาริกา -ปริเฉท -ปริชน -ปริซึม -ปริญญา -ปริญญาบัตร -ปริณาม -ปริณามัคคิ -ปริณายก -ปริต -ปริต- -ปริตตะ -ปริตโตทก -ปริตทวีป -ปริตยาค -ปริตร -ปริทรรศน์ -ปริทัยหัคคี -ปริทัศน์ -ปริเทพ -ปริเทพน์ -ปริเทวนะ -ปริเทวะ -ปรินิพพาน -ปริบ -ปริปันถ์ -ปริปาก -ปริพนธ์ -ปริพัตร -ปริพันธ์ -ปริพาชก -ปริภัณฑ์ -ปริภาษ -ปริภาษณ์ -ปริภุญช์ -ปริภูมิ -ปริโภค -ปริ่ม -ปริมณฑล -ปริมัท -ปริมาณ -ปริมาตร -ปริย- -ปริยรณ -ปริยวาท -ปริยวาที -ปริยัติ -ปริยัติธรรม -ปริยานุช -ปริยาย -ปริเยศ -ปริโยสาน -ปริวรรต -ปริวรรต- -ปริวรรตกรรม -ปริวัตร -ปริวาร -ปริวาส -ปริวิตก -ปริเวณ -ปริศนา -ปริศนาธรรม -ปริศนาลายแทง -ปริศนาอักษรไขว้ -ปริษการ -ปริษัท -ปริสัญญู -ปริสุทธิ -ปริหาน -ปริหาร -ปริหาส -ปรี่ -ปรีชญา -ปรีชา -ปรี๊ด -ปรีดา -ปรีดิ -ปรีดิ์ -ปรีดี -ปรีติ -ปรีย -ปรียา -ปรึก -ปรึกษา -ปรึง -ปรือ -ปรื๋อ -ปรุ -ปรุง -ปรุโปร่ง -ปรู -ปรู๋ -ปรูด -ปรูดปราด -ปรู๊ดปร๊าด -ปรู๊ฟ -ปฤงคพ -ปฤจฉา -ปฤจฉาคุณศัพท์ -ปฤจฉาสรรพนาม -ปฤษฎ์ -ปฤษฎางค์ -ปฤษฐ -ปลก -ปลกเปลี้ย -ปลง -ปล่ง -ปลงกรรมฐาน -ปลงใจ -ปลงช้าง -ปลงชีวิต -ปลงตก -ปลงธรรมสังเวช -ปลงธุระ -ปลงบริขาร -ปลงผม -ปลงศพ -ปลงสังขาร -ปลงสังเวช -ปลงอนิจจัง -ปลงอาบัติ -ปลงอายุสังขาร -ปลด -ปลดเกษียณ -ปลดเกษียณอายุ -ปลดทุกข์ -ปลดปลง -ปลดปล่อย -ปลดเปลื้อง -ปลดระวาง -ปลดหนี้ -ปลดออก -ปลดอาวุธ -ปลดแอก -ปล้น -ปล้นทรัพย์ -ปลวก -ปลวังค- -ปลอก -ปลอกกระสุน -ปลอกคอ -ปลอกมีด -ปลอกมือ -ปล่อง -ปล้อง -ปล้องขน -ปล้องฉนวน -ปล้องไฉน -ปล้องทอง -ปล้องอ้อย -ปลอด -ปลอดทหาร -ปลอดโปร่ง -ปลอดภัย -ปล้อน -ปลอบ -ปลอบขวัญ -ปลอบโยน -ปลอม -ปลอมปน -ปลอมแปลง -ปล่อย -ปล่อยเกาะ -ปล่อยแก่ -ปล่อยไก่ -ปล่อยของ -ปล่อยใจ -ปล่อยตัว -ปล่อยตัวปล่อยใจ -ปล่อยนกปล่อยกา -ปล่อยเนื้อปล่อยตัว -ปล่อยปละละเลย -ปล่อยปลาลงน้ำ -ปล่อยปลิง -ปล่อยมือ -ปล่อยเสือเข้าป่า -ปละ -ปลัก -ปลั๊ก -ปลั๊กไฟ -ปลัง -ปลั่ง -ปลัด -ปลัดขิก -ปลา -ปลาก -ปลากริม -ปลาเกลือ -ปลาข้องเดียวกัน -ปลาเค็ม -ปลาเงินปลาทอง -ปลาจ่อม -ปลาจีน -ปลาเจ่า -ปลาชา -ปลาดาว -ปลาแดก -ปลาแดง -ปลาต -ปลาตกน้ำตัวโต -ปลาตะเพียน -ปลาติดหลังแห -ปลาตู้ -ปลาทอง -ปลาแนม -ปลาบ -ปลาบปลื้ม -ปลาบิน -ปลาฝา -ปลาม้ำ -ปลาย -ปลายข้าว -ปลายตีน -ปลายทาง -ปลายนาการ -ปลายน้ำ -ปลายมือ -ปลายอ้อปลายแขม -ปลาร้า -ปลาโลมา -ปลาวาฬ -ปลาสเตอร์ -ปลาสนาการ -ปลาส้ม -ปลาหน้าดิน -ปลาหมอตายเพราะปาก -ปลาหมึก -ปลาเห็ด -ปลาใหญ่กินปลาเล็ก -ปลาไหลเผือก -ปล้ำ -ปล้ำปลุก -ปล้ำผีลุกปลุกผีนั่ง -ปลิง -ปลิงทะเล -ปลิด -ปลิ้น -ปลิ้นปลอก -ปลิ้นปล้อน -ปลิโพธ -ปลิม -ปลิ่ม -ปลิว -ปลี -ปลีก -ปลีกตัว -ปลีกย่อย -ปลีกเวลา -ปลีแข้ง -ปลื้ม -ปลุก -ปลุกใจ -ปลุกตัว -ปลุกปล้ำ -ปลุกปั่น -ปลุกผี -ปลุกพระ -ปลุกระดม -ปลุกเสก -ปลูก -ปลูกฝัง -ปลูกฝี -ปลูกเรือนคร่อมตอ -ปลูกเรือนตามใจผู้อยู่ -ปลูกเรือนพอตัว หวีหัวพอเกล้า -ปวกเปียก -ปวง -ป่วง -ปวด -ปวดถ่วง -ปวดท้องทุ่ง -ปวดท้องเบา -ปวดท้องเยี่ยว -ปวดมวน -ปวดร้าว -ปวดเศียรเวียนเกล้า -ปวดแสบปวดร้อน -ป่วน -ป้วน -ป่วนปั่น -ป้วนเปี้ยน -ป่วย -ป่วยกล่าว -ป่วยการ -ปวัตน- -ปวัตน์ -ปวัตนาการ -ปวารณา -ปวาล -ปวาส -ปวาฬ -ปวิช -ปวิตร -ปวิธ -ปวิเวก -ปวีณ -ปวุติ -ปเวณี -ปเวส -ปเวสน์ -ปศุ -ปสพ -ปสันน- -ปสันนะ -ปสันนาการ -ปสัยห- -ปสัยหะ -ปสัยหาการ -ปสัยหาวหาร -ปสาท -ปสาน -ปสาสน์ -ปสุ -ปสุต -ปสูติ -ปหังส -ปหังสน -ปหาน -ปหาร -ปหาส -ปอ -ป้อ -ป๋อ -ปอก -ปอกกล้วยเข้าปาก -ปอกลอก -ปอง -ป่อง -ป่องๆ -ป้อง -ป้องกัน -ป่องร่า -ปอด -ปอดชื้น -ปอดบวม -ปอดแปด -ปอดลอย -ปอดเหล็ก -ปอน -ปอนๆ -ป้อน -ปอนด์ -ปอเนาะ -ปอบ -ป้อแป้ -ปอม -ป้อม -ป้อมๆ -ป๋อม -ปอมขาง -ปอมข่าง -ป้อมบังคับการ -ปอย -ป้อย -ป้อยอ -ปอเลียงฝ้าย -ปะ -ปะกน -ปะกัง -ปะกาปะกัง -ปะการัง -ปะกำ -ปะขาว -ปะงับปะง่อน -ปะตาปา -ปะตาระกาหลา -ปะติดปะต่อ -ปะติยาน -ปะเตะ -ปะทะ -ปะทะปะทัง -ปะทุ -ปะทุน -ปะบุก -ปะปน -ปะมง -ปะราลี -ปะรำ -ปะลอม -ปะเลง -ปะแล่ม -ปะแล่มๆ -ปะโลง -ปะวะหล่ำ -ปะวะหลิ่ม -ปะว่า -ปะเสหรันอากง -ปะหงับ -ปะหงับๆ -ปะหงับปะง่อน -ปะหนัน -ปะหมันอาหยี -ปะหลิ่ม -ปะหัง -ปะเหลาะ -ปะเหลาะปะแหละ -ปัก -ปักข- -ปักข์ -ปักขคณนา -ปักขพิฬาร -ปักขันดร -ปักใจ -ปักเป้า -ปักษ- -ปักษ์ -ปักษกษัย -ปักษคณนา -ปักษคม -ปักษธร -ปักษเภท -ปักษวาหน -ปักษา -ปักษานดร -ปักษาวสาน -ปักษาสวรรค์ -ปักษิน -ปักษี -ปักหลัก -ปัคหะ -ปัง -ปั๋ง -ปังสุ์ -ปังสุกุล -ปัจจัตตะ -ปัจจัตถรณ์ -ปัจจันต- -ปัจจันต์ -ปัจจันตคาม -ปัจจันตชนบท -ปัจจันตประเทศ -ปัจจัย -ปัจจามิตร -ปัจจุคมน์ -ปัจจุทธรณ์ -ปัจจุบัน -ปัจจุบันทันด่วน -ปัจจุส- -ปัจจุสกาล -ปัจจุสมัย -ปัจจูส -ปัจจูหะ -ปัจเจก -ปัจเจก- -ปัจเจกบุคคล -ปัจเจกพุทธะ -ปัจเจกโพธิ -ปัจเจกสมาทาน -ปัจโจปการกิจ -ปัจโจสกาล -ปัจฉา -ปัจฉาภัต -ปัจฉาสมณะ -ปัจฉิม -ปัจฉิม- -ปัจฉิมชน -ปัจฉิมภาค -ปัจฉิมยาม -ปัจฉิมลิขิต -ปัจฉิมวัย -ปัจฉิมวาจา -ปัจถรณ์ -ปัจนึก -ปัจยาการ -ปัจเวกขณ์ -ปัชชร -ปัชชุน -ปัญจ- -ปัญจก -ปัญจนที -ปัญจม- -ปัญจมี -ปัญจมีดิถี -ปัญจวัคคีย์ -ปัญจวีสติ -ปัญจสาขา -ปัญญัติ -ปัญญา -ปัญญาแค่หางอึ่ง -ปัญญาชน -ปัญญาส- -ปัญญาอ่อน -ปัญหา -ปัญหาโลกแตก -ปัฏ -ปัฏนะ -ปัฐยาวัต -ปัณฑรหัตถี -ปัณณะ -ปัณณาส -ปัณณาสก์ -ปัณรส- -ปัณรสม- -ปัณรสมสุรทิน -ปัณรสี -ปัณรสีดิถี -ปัณหิ -ปัด -ปัดๆ -ปัดเกล้า -ปัดขา -ปัดแข้งปัดขา -ปัดตลอด -ปัดไถม -ปัดเป่า -ปัดรังควาน -ปัดเศษ -ปัดสวะ -ปัตคาด -ปัตตะ -ปัตตานีกะ -ปัตตานึก -ปัตตานุโมทนา -ปัตตาเวีย -ปัตติ -ปัตติก -ปัตติทาน -ปัตถร -ปัตถะ -ปัตนิ -ปัตนี -ปัตยัย -ปัตหล่า -ปัถพี -ปัถวี -ปัทม- -ปัทม์ -ปัทมปาณี -ปัทมราค -ปัทมราช -ปัทมะ -ปัทมาสน์ -ปัน -ปั่น -ปั้น -ปั้นจั่น -ปั้นจิ้มปั้นเจ๋อ -ปันจุเหร็จ -ปั้นเจ๋อ -ปั่นป่วน -ปั้นปึ่ง -ปั่นแปะ -ปั่นฝ้าย -ปั่นไฟ -ปั้นยศ -ปั้นลม -ปั้นล่ำ -ปันส่วน -ปั้นสิบ -ปั้นสีหน้า -ปั้นหยา -ปั่นหัว -ปั้นเหน่ง -ปับ -ปั๊บ -ปัปผาสะ -ปัพพาชนะ -ปัพพาชนียกรรม -ปัพภาระ -ปั๊มน้ำมัน -ปัยกะ -ปัยกา -ปัยยิกา -ปั่ว -ปัวเปีย -ปั้วเปี้ย -ปัศจิม -ปัศตัน -ปัศตู -ปัสสาวะ -ปัสสาสะ -ปา -ป่า -ป้า -ปาก -ปากกบ -ปากกระจับ -ปากกระบะ -ปากกริว -ปากกล้า -ปากกว้าง -ปากกา -ปากกาลูกลื่น -ปากกาหมึกซึม -ปากกาหมึกแห้ง -ปากไก่ -ปากขม -ปากขอ -ปากแข็ง -ปากคม -ปากคอก -ปากคอเราะราย -ปากคัน -ปากคำ -ปากคีบ -ปากจอบ -ปากจะขาบ -ปากจัด -ปากจิ้งจก -ปากฉลาม -ปากช้าง -ปากซ่อม -ปากตลาด -ปากต่อปาก -ปากตะกร้อ -ปากตะไกร -ปากตะขาบ -ปากตำแย -ปากแตร -ปากใต้ -ปากนก -ปากนกกระจอก -ปากนกแก้ว -ปากน้ำ -ปากบอน -ปากบาตร -ปากเบา -ปากแบะ -ปากปราศรัยใจเชือดคอ -ปากปลา -ปากปลาร้า -ปากปลิง -ปากเป็ด -ปากเป็นชักยนต์ -ปากเปราะ -ปากเปราะเราะราย -ปากเปล่า -ปากเปียก -ปากเปียกปากแฉะ -ปากโป้ง -ปากไปล่ -ปากมาก -ปากไม้ -ปากไม่สิ้นกลิ่นน้ำนม -ปากราก -ปากร้าย -ปากเรือ -ปากว่าตาขยิบ -ปากว่ามือถึง -ปากสว่าง -ปากหนัก -ปากหวาน -ปากหวานก้นเปรี้ยว -ปากหอยปากปู -ปากห่าง -ปากเหยี่ยวปากกา -ปากอ่าว -ป่าแคระ -ปาง -ป่าง -ป้าง -ป้างป่า -ปาจนะ -ปาจรีย์ -ปาจารย์ -ปาจิตตีย์ -ปาจีน -ป่าช้า -ป่าชายเลน -ปาฏลิ -ปาฏิบท -ปาฏิบุคลิก -ปาฏิโภค -ปาฏิหาริย์ -ปาฐ- -ปาฐก -ปาฐกถา -ปาฐะ -ปาณ- -ปาณก- -ปาณกชาติ -ปาณทัณฑ์ -ปาณนาศ -ปาณภูต -ปาณวินาศ -ปาณสาร -ปาณะ -ปาณาติบาต -ปาณิ -ปาณิเคราะห์ -ปาณิดล -ปาณิธรรม -ปาณิมุกต์ -ปาณิมูล -ปาณี -ปาด -ป่าดงดิบ -ปาดหาว -ป่าดิบ -ป่าแดง -ปาติโมกข์ -ปาตี -ปาเต๊ะ -ป่าเถื่อน -ปาท -ปาทป -ปาท่องโก๋ -ปาทังกา -ปาทาน -ป่าทึบ -ปาทุกา -ปาน -ป่าน -ป้าน -ปานกลาง -ป่านคม -ปานฉะนี้ -ปานดง -ปานนี้ -ป่านนี้ -ป้านลม -ปานะ -ปานิเยน -ปานีย- -ปานียะ -ปานีโยทก -ป้าบ -ป๊าบ -ป่าเบญจพรรณ -ปาป- -ปาปมุต -ปาปอหยีสังฆาตา -ป่าโปร่ง -ป่าผลัดใบ -ปาพจน์ -ป่าแพะ -ปาม -ปามปึงมา -ปาโมกข์ -ป่าไม้พุ่ม -ป่าย -ป้าย -ป้ายสี -ปายาส -ปาร- -ปาร์เกต์ -ปารคู -ปารมี -ปารเมศ -ปารษณี -ป่าระนาม -ปาราชิก -ปาริฉัตร -ปาริชาต -ปารุปนะ -ปาล -ปาล์ม -ป่าละเมาะ -ปาลิไลยก์ -ปาลี -ป่าเลน -ปาวๆ -ป่าว -ป๊าว -ปาวก -ปาวจนะ -ป่าวประกาศ -ป่าวร้อง -ปาวาร -ปาษาณ -ปาส -ปาสาณ -ปาสาทิกะ -ป่าสูง -ป่าเส็งเคร็ง -ป่าใส -ปาหนัน -ปาหี่ -ปาหุณ -ปาหุไณย- -ปาหุไณยบุคคล -ปำ -ป้ำ -ป้ำเป้อ -ป้ำเป๋อ -ป้ำๆ เป๋อๆ -ปิกนิก -ปิ้ง -ปิงคล- -ปิงคลหัตถี -ปิงคละ -ปิ้งปลาประชดแมว -ปิงปอง -ปิฎก -ปิฏฐะ -ปิฐิ -ปิณฑะ -ปิด -ปิดกล้อง -ปิดคดี -ปิดควันไฟไม่มิด -ปิดฉาก -ปิดตาย -ปิดเต๊าะ -ปิดทองหลังพระ -ปิดบัง -ปิดบัญชี -ปิดเบา -ปิดประตูค้า -ปิดประตูตีแมว -ปิดปาก -ปิดสำนวน -ปิดหนัก -ปิดหีบไม่ลง -ปิตตะ -ปิตา -ปิตามหะ -ปิตามหัยกา -ปิตามหัยยิกา -ปิตุ -ปิตุฆาต -ปิตุจฉา -ปิตุภูมิ -ปิตุล -ปิตุลา -ปิตุลานี -ปิโตรเลียม -ปิ่น -ปิ่นแก้ว -ปิ่นซ่น -ปิ่นตอ -ปิ่นโต -ปิปผลี -ปิ่ม -ปิ้ม -ปิย- -ปิยังคุ -ปิลันธน์ -ปิ๋ว -ปิศาจ -ปิศาจบดี -ปิสัง -ปิไส -ปิหก -ปิหลั่น -ปี -ปี่ -ปี้ -ปี๋ -ปีก -ปีกกล้าขาแข็ง -ปีกกา -ปีกค้างคาว -ปีกนก -ปีกไม้ -ปีกลาย -ปีกหัก -ปีการศึกษา -ปี่แก้ว -ปีงบประมาณ -ปีฐกะ -ปีฐะ -ปี๊ด -ปีติ -ปีน -ปีนเกลียว -ปีบ -ปี๊บ -ปีปฏิทิน -ปี่พาทย์ -ปีมะโว้ -ปีศาจ -ปีแสง -ปีหน้าฟ้าใหม่ -ปีฬ -ปีฬก -ปีฬา -ปึก -ปึกแผ่น -ปึง -ปึ่ง -ปึ๋ง -ปึ่งชา -ปึงปัง -ปึ้ด -ปึมปื้อ -ปืดปึง -ปืน -ปื้น -ปืนยา -ปือ -ปื้อ -ปื๋อ -ปุ -ปุ๊ -ปุก -ปุกปุย -ปุคละ -ปุ้งกี๋ -ปุงคพ -ปุงควะ -ปุงลิงค์ -ปุงลึงค์ -ปุจฉา -ปุฏ -ปุณฑริก -ปุด -ปุดกะลา -ปุตตะ -ปุถุชน -ปุนนาค -ปุนภพ -ปุนัพพสู -ปุนัพสุ -ปุบ -ปุ๊บ -ปุบปับ -ปุ๊บปั๊บ -ปุปผะ -ปุปะ -ปุพพ- -ปุพพผลคุนี -ปุพพผลคุนี- -ปุพพะ -ปุพพะภัททะ -ปุม- -ปุ่ม -ปุ้ม -ปุ๋ม -ปุ่มปลา -ปุ่มป่ำ -ปุ้มเป้ง -ปุ่มเปือก -ปุ้มเปือก -ปุมา -ปุย -ปุ้ย -ปุ๋ย -ปุยกระโดน -ปุยขาว -ปุ๋ยคอก -ปุยฝ้าย -ปุร -ปุรณะ -ปุรพ- -ปุรพผลคุนี -ปุรพษาฒ -ปุราณ -ปุราณะ -ปุเรจาริก -ปุโรหิต -ปุลลิงค์ -ปุลลึงค์ -ปุลินท์ -ปุลู -ปุโลปุเล -ปุษยะ -ปุสสะ -ปุฬวะ -ปู -ปู่ -ปู่ครู -ปูจ๋า -ปู่เจ้า -ปูชกะ -ปูชนีย- -ปูชนียะ -ปูชา -ปูชิต -ปูด -ปูดกกส้มมอ -ปูติ -ปูติลดา -ปู่ทวด -ปูน -ปูนขาว -ปูนซีเมนต์ -ปูนดิบ -ปูนแดง -ปูนปลาสเตอร์ -ปูนปั้น -ปูนเปียก -ปูนผิว -ปูนเพชร -ปูนไฟ -ปูนสอ -ปูนสุก -ปู่น้อย -ปูม -ปู่ย่า -ปู้ยี่ปู้ยำ -ปูระ -ปูลู -ปูเล -ปูวา -ปูเสฉวน -เป้ -เป๋ -เปก -เป๊ก --เปกข์ -เป่ง -เป้ง -เป๋ง -เป็ด -เป็ดก่า -เป็ดแก้ว -เป็ดขันประชันไก่ -เป็ดถบ -เป็ดเทศ -เป็ดน้ำ -เป็ดผี -เป็ดไฟแดง -เป็ดหงส์ -เปต- -เปตพลี -เปตวิสัย -เปตอง -เปตา -เป็น -เป็นกลาง -เป็นกอง -เป็นกอบเป็นกำ -เป็นการ -เป็นควัน -เป็นความ -เป็นคุ้งเป็นแคว -เป็นงานเป็นการ -เป็นเงาตามตัว -เป็นเงินเป็นทอง -เป็นจริงเป็นจัง -เป็นใจ -เป็นชิ้นเป็นอัน -เป็นชู้ -เป็นดั้งหน้า -เป็นแดน -เป็นใด -เป็นได้ -เป็นต้น -เป็นต่อ -เป็นตัวเป็นตน -เป็นตุเป็นตะ -เป็นน้ำ -เป็นน้ำเป็นนวล -เป็นน้ำยาเย็น -เป็นนิตย์ -เป็นเนื้อเป็นตัว -เป็นเนื้อเป็นหนัง -เป็นบ้า -เป็นบ้าเป็นหลัง -เป็นปากเสียง -เป็นปี่เป็นขลุ่ย -เป็นผู้เป็นคน -เป็นฝั่งเป็นฝา -เป็นฟืนเป็นไฟ -เป็นไฟ -เป็นมั่นเป็นเหมาะ -เป็นรอง -เป็นไร -เป็นลมๆ -เป็นล่ำเป็นสัน -เป็นโล้เป็นพาย -เป็นวรรคเป็นเวร -เป็นหน้าเป็นตา -เป็นหุ่นให้เชิด -เป็นหูเป็นตา -เป็นอัน -เป็นอันขาด -เป็นอันมาก -เป็นเอง -เปยยาล -เปร -เปร็ง -เปรต -เปรต- -เปรตวิษัย -เปรตวิสัย -เปรม -เปรมปรา -เปรย -เปรยๆ -เปรยปราย -เปรอ -เปรอะ -เปรา -เปราะ -เปราะแประ -เปราะหอม -เปรียง -เปรี้ยง -เปรียญ -เปรียบ -เปรียบเทียบ -เปรียบปราย -เปรียบเปรย -เปรี่ยม -เปรียว -เปรี้ยว -เปรี้ยวปาก -เปรี้ยวหวาน -เปรียะ -เปรี๊ยะ -เปรื่อง -เปรื่องปราด -เปรื้อย -เปล -เปล่ง -เปลญวน -เปลว -เปลา -เปล่า -เปล้า -เปล้าขลิบทอง -เปล่าดาย -เปลาะ -เปลี้ย -เปลี่ยน -เปลี่ยนใจ -เปลี่ยนตัว -เปลี่ยนแปลง -เปลี่ยนแผ่นดิน -เปลี่ยนมือ -เปลี่ยนมือไม่ได้ -เปลี่ยนหน้า -เปลี่ยม -เปลี่ยว -เปลี่ยวดำ -เปลือก -เปลือกกระเทียม -เปลือกตา -เปลือกโลก -เปลือง -เปลื้อง -เปลื้องเครื่องสุกำศพ -เปลืองใจ -เปลือย -เปลือยกาย -เปศ -เปศล -เปศลมัธย์ -เปศัส -เปศัส- -เปศัสการิน -เปศัสการี -เปสการ -เปสล -เปสุญ -เปสุญ- -เปสุญวาท -เปสุไณย -เป๋อ -เป้อเย้อ -เปอร์เซ็นต์ -เป๋อเหลอ -เปะ -เปะปะ -เปา -เป่า -เป้า -เป๊า -เป๋า -เป่ากบ -เป่าแตร -เป้าประสงค์ -เป่าปี่ -เป่าฝุ่น -เป่าแล่น -เป้าหมาย -เป่าหลอด -เป่าหู -เป๋าฮื้อ -เปาะ -เปาะเปี๊ยะ -เปาะแปะ -เปาะเหลาะ -เปิก -เปิง -เปิงๆ -เปิงมาง -เปิด -เปิดกล้อง -เปิดคดี -เปิดฉาก -เปิดบัญชี -เปิดเปิง -เปิดโปง -เปิดเผย -เปิดโลก -เปิดหมวกลา -เปิดหมวกให้ -เปิดหูเปิดตา -เปิดอก -เปิ่น -เปิบ -เปิ๊บ -เปิบข้าว -เปีย -เปียก -เปี๊ยก -เปี่ยม -เปียว -เปี้ยว -เปียะ -เปี๊ยะ -เปือก -เปือกตม -เปื้อน -เปื่อย -แป -แป้ง -แป๋ง -แป้งข้าวสาลี -แป้งข้าวหมาก -แป้งแข็ง -แป้งจี่ -แป้งแช่ -แป้งญวน -แป้งนวล -แป้งฝุ่น -แป้งมัน -แป้งมี่ -แป้งร่ำ -แป้งสด -แป้งสารภี -แป้งสาลี -แป้งสิงคโปร์ -แป้งหมี่ -แป้งเหล้า -แปด -แป๊ด -แปดบท -แปดปน -แปดเปื้อน -แปดสาแหรก -แปดเหลี่ยมแปดคม -แปดเหลี่ยมสิบสองคม -แปทู -แป้น -แปบ -แป๊บ -แปม -แปร -แปร๋ -แปรก -แปรขบวน -แปรไข้ -แปรง -แปร่ง -แปรงล้างขวด -แปรงหูหนู -แปรญัตติ -แปร๊ด -แปรธาตุ -แปร้น -แปร้นแปร๋ -แปรปรวน -แปรปากหลากคำ -แปร๋แปร้น -แปรผัน -แปรผันโดยตรง -แปรผันแบบผกผัน -แปรพักตร์ -แปรรูป -แปรอักษร -แประ -แปล -แปล้ -แปลก -แปลกปลอม -แปลง -แปลงชาติ -แปลงผี -แปลงสัญชาติ -แปลตามเนื้อความ -แปลตามพยัญชนะ -แปลตามอรรถ -แปลน -แปลบ -แปลยกศัพท์ -แปลร้อย -แป้ว -แป๊ว -แปะ -แป๊ะ -แป๊ะซะ -โป -โป่ -โป้ -โป๊ -โปก -โป๊ก -โป๊กเกอร์ -โปกขร- -โปกขรณี -โปกขรพรรษ -โปกำ -โปเก -โปง -โป่ง -โป้ง -โป่งข่าม -โป่งดิน -โป่งน้ำ -โป้งเป้ง -โป้งโย้ง -โปงลาง -โป้งโล้ง -โป่งวิด -โป้งโหยง -โปฐบท -โปฐปทมาส -โปดก -โปตถกะ -โปน -โป้ปด -โป๊ยเซียน -โปรง -โปร่ง -โปร่งเปร่ง -โปร่งฟ้า -โปร่งแสง -โปร่งใส -โปรด -โปรดปราน -โปรดสัตว์ -โปรดสัตว์ได้บาป -โปรตอน -โปรตีน -โปรเตสแตนต์ -โปรย -โปรยปราย -โปรีสภา -โปล่ง -โปลิโอ -โปส -โปสก -โปสาวนิกมูล -โปะ -โป๊ะ -โป๊ะจ้าย -ไป -ไป่ -ไป๋ -ไปค้าถ่าน -ไปตายเอาดาบหน้า -ไปทุ่ง -ไปๆ มาๆ -ไปย- -ไปยาล -ไปรษณีย- -ไปรษณีย์ -ไปรษณียนิเทศ -ไปรษณียบรรณ -ไปรษณียบัตร -ไปรษณียภัณฑ์ -ไปรษณีย์รับรอง -ไปรษณียวัตถุ -ไปรษณียากร -ไปล่ -ไปล่ปลิว -ไปลาด -ไปวัดไปวาได้ -ไปศาจ -ไปไหนมาสามวาสองศอก -ไปอย่างน้ำขุ่นๆ -ผ -ผก -ผกผงก -ผกผัน -ผกเรือก -ผกา -ผกากรอง -ผกาย -ผการาย -ผคม -ผง -ผงก -ผงขาว -ผงเข้าตาตัวเอง -ผงคลี -ผงชูรส -ผงซักฟอก -ผงฟู -ผงม -ผงร -ผงอน -ผงอบ -ผงะ -ผงาด -ผง่าน -ผจง -ผจญ -ผจัญ -ผจาน -ผชุม -ผณิน -ผณินทร -ผณินทรสมพัตสร -ผณิศวร -ผด -ผดุง -ผดุงครรภ์ -ผเดิน -ผทม -ผทมเพลิง -ผนวก -ผนวช -ผนัง -ผนิด -ผนึก -ผม -ผมชิงเกิล -ผมทรงมหาดไทย -ผมทัด -ผมนาง -ผมบ๊อบ -ผมปีก -ผมเป๋ -ผมเปีย -ผมโป่ง -ผมไฟ -ผมมหาดไทย -ผมม้า -ผมหลักแจว -ผยอง -ผย่ำเผยอ -ผรณ- -ผรณาปีติ -ผรสุ -ผริต -ผริต- -ผรุพก -ผรุส- -ผรุสวาท -ผล -ผลก -ผลคุน -ผลคุนี -ผลคุนีบูรพมาส -ผลง -ผลพลอยได้ -ผลลัพธ์ -ผลอ -ผล็อง -ผล็อย -ผละ -ผลัก -ผลัด -ผลัดเปลี่ยน -ผลัดแผ่นดิน -ผลับ -ผลัวะ -ผลา -ผลาญ -ผลานิสงส์ -ผลาผล -ผลาหาร -ผลิ -ผลิก- -ผลิกศิขรี -ผลิกศิลา -ผลิกะ -ผลิต -ผลิต- -ผลิตกรรม -ผลิตผล -ผลิตภัณฑ์ -ผลิน -ผลี -ผลีผลาม -ผลึก -ผลึ่ง -ผลือ -ผลุ -ผลุง -ผลุด -ผลุน -ผลุนผลัน -ผลุบ -ผลุบผลับ -ผลุบโผล่ -ผลุบๆ โผล่ๆ -ผลุย -ผลู -ผลูบด -ผลูแบก -ผวน -ผวย -ผวา -ผสม -ผสมเทียม -ผสมผสาน -ผสมผเส -ผสมพันธุ์ -ผสมโรง -ผสมเสร็จ -ผสาน -ผสาย -ผสาร -ผอก -ผอง -ผ่อง -ผ่องแผ้ว -ผ่องใส -ผอด -ผ่อน -ผ่อนคลาย -ผ่อนชำระ -ผ่อนปรน -ผ่อนผัน -ผ่อนส่ง -ผ่อนสั้นผ่อนยาว -ผ่อนหนักเป็นเบา -ผอบ -ผอม -ผอมเกร็ง -ผอมโซ -ผอมแห้ง -ผ็อย -ผ่อย -ผอวด -ผอูน -ผะ -ผะแคง -ผะดา -ผะสา -ผะออบ -ผัก -ผักไก -ผักขวง -ผักขี้ขวง -ผักโฉม -ผักชี -ผักชีโรยหน้า -ผักตบชวา -ผักต้มขนมยำ -ผักทอดยอด -ผักบุ้ง -ผักบุ้งขัน -ผักบุ้งจีน -ผักบุ้งทะเล -ผักบุ้งฝรั่ง -ผักบุ้งร้วม -ผักบุ้งรั้ว -ผักเบี้ย -ผักเบี้ยใหญ่ -ผักปลัง -ผักปุ่มปลา -ผักเผ็ด -ผักไผ่ -ผักรู้นอน -ผักแว่น -ผักสาบ -ผักสามหาว -ผักเสี้ยน -ผักหนอก -ผักหนอง -ผักหนาม -ผักหวาน -ผักหวานบ้าน -ผักหวานป่า -ผักไหม -ผักอีแปะ -ผัคคุณ -ผัคคุณ- -ผัคคุณมาส -ผัคคุณี -ผัง -ผังเมือง -ผัด -ผัดเจ้าล่อ -ผัดช้าง -ผัดผ่อน -ผัดผัน -ผัดเพี้ยน -ผัดวันประกันพรุ่ง -ผัน -ผันแปร -ผันผยอง -ผันผวน -ผันผ่อน -ผันผาด -ผันผาย -ผันหม้อ -ผันอักษร -ผับ -ผับๆ -ผัลคุนี -ผัว -ผัวหาบเมียคอน -ผัวะ -ผัสส- -ผัสสะ -ผัสสาหาร -ผา -ผ่า -ผ้า -ผาก -ผากแผ้ง -ผ้ากราบ -ผ้าเกี้ยว -ผ้าขาวม้า -ผ้าขี้ริ้ว -ผ้าขี้ริ้วห่อทอง -ผาง -ผ้าเช็ดตัว -ผ้าเช็ดหน้า -ผาณิต -ผาด -ผาดผัง -ผาดแผลง -ผาดโผน -ผาดเพ่ง -ผาดำ -ผ้าดำ -ผ้าดิบ -ผ้าแดง -ผ้าตา -ผาติ -ผาติกรรม -ผ้าถุง -ผ้าแถบ -ผ้าทิพย์ -ผ้าเทศ -ผ่าน -ผ้านุ่ง -ผ้าใบ -ผ้าใบกลอย -ผ้าใบเมี่ยง -ผ้าป่า -ผ้าผ่อน -ผ่าเผย -ผาเผือก -ผ้าแฝง -ผ้าพันคอ -ผ้าพันแผล -ผ้าพื้น -ผาม -ผ้ามัดหมี่ -ผาย -ผ่าย -ผ้าย -ผายปอด -ผ่ายผอม -ผายผัง -ผายผัน -ผายลม -ผ้ายาง -ผาล -ผาลคุน -ผาลา -ผาลาเพียงไหล่ -ผ้าลาย -ผ้าลูกไม้ -ผ่าว -ผาสามเส้า -ผ้าสำลี -ผาสุก -ผ่าหมาก -ผาหอม -ผ้าห้อยหอ -ผ่าเหล่า -ผ้าเหลือง -ผ้าเหลืองร้อน -ผ้าไหว้ -ผ้าอนามัย -ผ้าอ้อม -ผ้าอาบ -ผ้าฮาด -ผำ -ผ้ำๆ -ผิ -ผิง -ผิด -ผิดก -ผิดใจ -ผิดตา -ผิดท่า -ผิดนัก -ผิดนัด -ผิดน้ำ -ผิดประหลาด -ผิดผี -ผิดผู้ผิดคน -ผิดแผก -ผิดฝาผิดตัว -ผิดพ้องหมองใจ -ผิดเพี้ยน -ผิดเมีย -ผิดรูปผิดร่าง -ผิดสังเกต -ผิดสำแลง -ผิดเส้น -ผิดหวัง -ผิดหู -ผิดหูผิดตา -ผิต -ผิน -ผินหลังให้ -ผิว -ผิวน้ำ -ผิวบาง -ผิวปาก -ผิวเผิน -ผิวพรรณ -ผิวหนัง -ผิว่า -ผี -ผีเข้าผีออก -ผีซ้ำด้ำพลอย -ผีดิบ -ผีต -ผีตองเหลือง -ผีตากผ้าอ้อม -ผีถ้วยแก้ว -ผีถึงป่าช้า -ผีบ้านไม่ดี ผีป่าก็พลอย -ผีบุญ -ผีพุ่งไต้ -ผีเพลีย -ผีฟ้า -ผีไม่มีศาล -ผีเรือน -ผีเรือนไม่ดี ผีป่าก็พลอย -ผี้ว์ -ผีเสื้อ -ผีเสื้อเงิน -ผีเสื้อน้อย -ผีเสื้อน้ำ -ผีเสื้อยักษ์ -ผีหลอก -ผีอำ -ผึง -ผึ่ง -ผึ้ง -ผึ่งผาย -ผึ้งรวง -ผืน -ผื่น -ผุ -ผุด -ผุดผ่อง -ผุดผาด -ผุดผาย -ผุดผ้าย -ผุดลุกผุดนั่ง -ผุยผง -ผุสราคา -ผู้ -ผูก -ผูกกระได -ผูกขวัญ -ผูกขาด -ผูกดวง -ผูกดอก -ผูกพัทธสีมา -ผูกพัน -ผูกภาษี -ผูกมัด -ผู้กว้างขวาง -ผูกหู -ผู้ก่อการร้าย -ผู้คน -ผู้จัดการ -ผู้ชาย -ผู้ชายพายเรือ -ผู้ชำนาญการพิเศษ -ผู้เชี่ยวชาญ -ผู้ญาณ -ผู้ดี -ผู้ดีแปดสาแหรก -ผู้โดยสาร -ผู้ต้องขัง -ผู้ต้องหา -ผู้ทรง -ผู้แทนเฉพาะคดี -ผู้แทนโดยชอบธรรม -ผู้แทนราษฎร -ผู้ไทย -ผู้น้อย -ผู้เป็นหุ้นส่วน -ผู้พิทักษ์สันติราษฎร์ -ผู้เยาว์ -ผู้รั้ง -ผู้รับประกันภัย -ผู้รับประโยชน์ -ผู้รับเรือน -ผู้รับเหมาก่อสร้าง -ผู้ร้าย -ผู้ลากมากดี -ผู้วิเศษ -ผู้สำเร็จ -ผู้สืบตระกูล -ผู้สืบสันดาน -ผู้สื่อข่าว -ผู้เสียหาย -ผู้หญิง -ผู้หญิงยิงเรือ -ผู้ใหญ่ -ผู้ใหญ่บ้าน -ผู้อนุบาล -ผู้เอาประกันภัย -เผ -เผง -เผชิญ -เผชิญภัย -เผชิญหน้า -เผ็ด -เผด็จ -เผด็จการ -เผ็ดร้อน -เผดิม -เผดียง -เผน- -เผ่น -เผนธรรม -เผนิก -เผย -เผยแผ่ -เผยแพร่ -เผยอ -เผยิบ -เผยิบผยาบ -เผล -เผล่ -เผล้ -เผล็ด -เผลอ -เผลอไผล -เผละ -เผลาะ -เผลาะแผละ -เผลียง -เผอเรอ -เผอเรอกระเชอก้นรั่ว -เผอิญ -เผอิล -เผะ -เผา -เผ่า -เผ้า -เผาขน -เผาจริง -เผ้าผง -เผ่าพันธุ์ -เผาหลอก -เผาหัว -เผาะ -เผิ้ง -เผิน -เผินๆ -เผียน -เผือ -เผื่อ -เผือก -เผือกกะลา -เผือกโทป้าด -เผื่อขาดเผื่อเหลือ -เผือด -เผือน -เผื่อน -เผื่อแผ่ -เผื่อว่า -เผื่อเหนียว -เผื่อเหลือเผื่อขาด -แผ่ -แผก -แผ่กระจาด -แผง -แผงคอ -แผงลอย -แผ่แง่ -แผ่ซ่าน -แผด -แผ่ตน -แผน -แผ่น -แผนก -แผนการ -แผนงาน -แผ่นดิน -แผ่นดินกลบหน้า -แผ่นดินไหว -แผนที่ -แผ่นผงอน -แผนผัง -แผ่นพก -แผ่นภพ -แผนภาพ -แผนภูมิ -แผ่นเสียง -แผ่เผื่อ -แผ่เมตตา -แผล -แผลเก่า -แผลง -แผลงฤทธิ์ -แผล็บ -แผล็บๆ -แผลเป็น -แผลริมแข็ง -แผลริมอ่อน -แผล็ว -แผละ -แผ่ว -แผ่วๆ -แผ้ว -แผ้วพาน -แผ่สองสลึง -แผ่หลา -แผ่อำนาจ -โผ -โผง -โผงผาง -โผงเผง -โผฏฐัพ- -โผฏฐัพธรรม -โผฏฐัพพะ -โผน -โผเผ -โผย -โผล่ -โผลกเผลก -โผละ -โผอน -โผะ -ไผ -ไผ่ -ไผท -ไผทโกรม -ไผ่ผัง -ฝ -ฝน -ฝนชะช่อมะม่วง -ฝนชะลาน -ฝนซู่ -ฝนตกก็แช่ง ฝนแล้งก็ด่า -ฝนตกขี้หมูไหล -ฝนตกไม่ทั่วฟ้า -ฝนตกไม่มีเค้า -ฝนตกอย่าเชื่อดาว -ฝนทอง -ฝนทั่งให้เป็นเข็ม -ฝนเทียม -ฝนไล่ช้าง -ฝนสั่งฟ้า -ฝนสั่งฟ้า ปลาสั่งหนอง -ฝนแสนห่า -ฝนห่าแก้ว -ฝรั่ง -ฝรั่งกังไส -ฝรั่งขี้นก -ฝรั่งมังค่า -ฝรั่งเศส -ฝ่อ -ฝอย -ฝอยทอง -ฝัก -ฝักแค -ฝักถั่ว -ฝักบัว -ฝักฝ่าย -ฝักใฝ่ -ฝักพร้า -ฝักเพกา -ฝักมะขาม -ฝักยาว -ฝัง -ฝั่ง -ฝังเข็ม -ฝังใจ -ฝั่งฝา -ฝังรกฝังราก -ฝังรอย -ฝังรูป -ฝังหัว -ฝัด -ฝัน -ฝันกลางวัน -ฝันเปียก -ฝันเฟื่อง -ฝา -ฝ่า -ฝ้า -ฝาก -ฝากกอง -ฝากกาย -ฝากไข้ -ฝากครรภ์ -ฝากตัว -ฝากท้อง -ฝากเนื้อฝากตัว -ฝากเนื้อไว้กับเสือ -ฝากบำเรอ -ฝากประจำ -ฝากปลาไว้กับแมว -ฝากผี -ฝากผีฝากไข้ -ฝากเผื่อเรียก -ฝากฝัง -ฝากระดาน -ฝากโรงเรียน -ฝากไว้ก่อน -ฝากสู่ -ฝ่าคมหอกคมดาบ -ฝาง -ฝาชี -ฝาด -ฝาน -ฝ่าฝืน -ฝาแฝด -ฝ่าพระบาท -ฝ่าฟัน -ฝ่ามรสุม -ฝาย -ฝ่าย -ฝ้าย -ฝ่ายขวา -ฝ่ายค้าน -ฝ้ายคำ -ฝ่ายซ้าย -ฝ่ายใน -ฝ่ายเป็นกลาง -ฝ้ายผี -ฝ่ายเสนอ -ฝ่ายหน้า -ฝาละมี -ฝาสายบัว -ฝาสำหรวด -ฝาเสี้ยว -ฝาหอยโข่ง -ฝาหุ้มกลอง -ฝาไหล -ฝิ่น -ฝิ่นต้น -ฝี -ฝี่ -ฝีก -ฝีกาฬ -ฝีจัก -ฝีจักร -ฝีดาษ -ฝีดิบ -ฝีเท้า -ฝีในท้อง -ฝีปาก -ฝีพาย -ฝีมะม่วง -ฝีมือ -ฝีไม้ลายมือ -ฝีเย็บ -ฝีหมอบ -ฝึก -ฝึกงาน -ฝึกปรือ -ฝึกฝน -ฝึกสอน -ฝึกหัด -ฝืด -ฝืดเคือง -ฝืน -ฝืนท้อง -ฝุ่น -ฝุ่นเมือง -ฝูง -ฝูงบิน -เฝ้า -เฝ้าไข้ -เฝ้าคอย -เฝ้าแหน -เฝือ -เฝือก -เฝือง -เฝื่อน -แฝก -แฝกหอม -แฝง -แฝด -แฝดน้ำ -แฝดเลือด -ใฝ่ -ใฝ่ใจ -ใฝ่ต่ำ -ใฝ่ฝัน -ใฝ่ร้อนจะนอนเย็น ใฝ่เย็นจะดิ้นตาย -ใฝ่สูง -ใฝ่สูงจนเกินศักดิ์ -ใฝ่สูงให้เกินศักดิ์ -ไฝ -พ -พก -พกจร -พกนุ่น -พกพ่าย -พกลม -พกหิน -พกา -พกุระ -พกุล -พง -พงพี -พงศ- -พงศ์ -พงศกร -พงศธร -พงศ์พันธุ์ -พงศา -พงศาวดาร -พงศาวลี -พจน- -พจน์ -พจนา -พจนานุกรม -พจนารถ -พจนีย์ -พจมาน -พจี -พชระ -พญา -พญากาสัก -พญาขามป้อม -พญาฉัททันต์ -พญาช้างเผือก -พญาณ -พญาดาบหัก -พญาเดิน -พญาไทย -พญาปากกว้าง -พญาแปแล -พญาพยาต -พญาไฟ -พญามะขามป้อม -พญามือเหล็ก -พญามุตติ -พญามูมิน -พญาไม้ -พญายา -พญารากดำ -พญารากเดียว -พญาไร้ใบ -พญาลอ -พญาโศก -พญาสัตบรรณ -ฯพณฯ -พณิช -พณิชย์ -พด -พดกริช -พดด้วง -พธู -พน -พน- -พ่น -พ้น -พนขัณฑ์ -พนโคจร -พนจร -พนจรก -พนชีวี -พนธารา -พนม -พนมเพลิง -พนมศก -พนมศพ -พนมสวรรค์ -พนวาสี -พ้นวิสัย -พนสณฑ์ -พนอง -พนอม -พนัก -พนักงาน -พนักงานเจ้าหน้าที่ -พนักงานสอบสวน -พนักงานอัยการ -พนัง -พนัน -พนันดร -พนัส -พนัส- -พนัสดม -พนัสบดี -พนา -พนาด -พนาดร -พนาดอน -พนาธวา -พนานดร -พนาย -พนาราม -พนาลัย -พนาลี -พนาวา -พนาวาส -พนาเวศ -พนาศรม -พนาศรัย -พนาสณฑ์ -พนาสัณฑ์ -พนิดา -พนิต -พนียก -พเนก -พเนจร -พบ -พบปะ -พบพาน -พบไม้งามเมื่อขวานบิ่น -พบู -พม่า -พม่าแทงกบ -พม่ารำขวาน -พยช -พยชน์ -พยติเรก -พยนต์ -พยศ -พยัก -พยักพเยิด -พยักยิ้ม -พยัคฆ- -พยัคฆ์ -พยัคฆา -พยัคฆิน -พยัคฆินทร์ -พยัคฆี -พยัคเฆนทร์ -พยัชน์ -พยัญชนะ -พยัต -พยับ -พยับแดด -พยับฝน -พยับเมฆ -พยับหมอก -พยากรณ์ -พยาฆร์ -พยางค์ -พยาธิ -พยาน -พยาบาท -พยาบาล -พยาม -พยายาม -พยาล -พยาล- -พยาลมฤค -พยุ -พยุง -พยุงปีก -พยุห- -พยุหบาตร -พยุหบาตรา -พยุหยาตรา -พยุหโยธา -พยุหร -พยุหเสนา -พยุหแสนยา -พยุหแสนยากร -พยุหะ -พยู่ห์ -พเยีย -พร -พรต -พรม -พรมคด -พรมคดตีนเต่า -พรมแดน -พรมน้ำมัน -พรมนิ้ว -พรมมิ -พรรค -พรรค- -พรรค์ -พรรคกลิน -พรรคการเมือง -พรรคนาวิกโยธิน -พรรคนาวิน -พรรคพวก -พรรคานต์ -พรรณ -พรรณนา -พรรณราย -พรรดึก -พรรลาย -พรรษ -พรรษ- -พรรษประเวศ -พรรษฤดู -พรรษวุฒิ -พรรษา -พรรษากาล -พรรษาคม -พรรษายุต -พรรโษทก -พรรโษบล -พรรเหา -พรรเอิญ -พรวงเพรียง -พรวด -พรวดพราด -พรวน -พรสวรรค์ -พรหม -พรหม- -พรหมกาย -พรหมโคล -พรหมจรรย์ -พรหมจักร -พรหมจาริณี -พรหมจารี -พรหมชาติ -พรหมทัณฑ์ -พรหมไทย -พรหมธาดา -พรหมบถ -พรหมบท -พรหมบริษัท -พรหมบุตร -พรหมปุโรหิต -พรหมพักตร์ -พรหมพันธุ์ -พรหมภูติ -พรหมยาน -พรหมเรขา -พรหมฤษี -พรหมลิขิต -พรหมวิหาร -พรหมศร -พรหมสี่หน้า -พรหมสูตร -พรหมหัวเหม็น -พรหมโองการ -พรหมัญตา -พรหมา -พรหมาณฑ์ -พรหมาสตร์ -พรหมินทร์ -พรหเมนทร์ -พรหเมศวร -พรอก -พร่อง -พร้อง -พร้องเพรียก -พรอด -พร้อม -พร่อมพร้อ -พร้อมพรัก -พร้อมพรั่ง -พร้อมเพรียง -พร้อมมูล -พร้อมหน้า -พร้อมหน้าพร้อมตา -พร่อย -พร้อย -พระ -พระกรน้อย -พระครู -พระคุณเจ้า -พระเคราะห์ -พระเครื่อง -พระจันทร์ครึ่งซีก -พระเจ้า -พระเจ้าลอยถาด -พระเจ้าหลวง -พระเจ้าห้าพระองค์ -พระเจ้าอยู่หัว -พระเดชพระคุณ -พระทอง -พระทัย -พระธรรมศาสตร์ -พระนม -พระนอม -พระนาง -พระนางเจ้า -พระนางเธอ -พระนาด -พระนาย -พระบฏ -พระบท -พระประธาน -พระเป็นเจ้า -พระผู้เป็นเจ้า -พระแผง -พระพิมพ์ -พระพุทธเจ้า -พระพุทธเจ้าข้า -พระพุทธเจ้าข้าขอรับ -พระพุทธเจ้าข้าขอรับใส่เกล้าใส่กระหม่อม -พระพุทธเจ้าหลวง -พระพุทธเจ้าอยู่หัว -พระพุทธองค์ -พระภูมิ -พระมาลัยมาโปรด -พระยา -พระยาเทครัว -พระยาเล็บครุฑ -พระยาวัน -พระรอง -พระราชกฤษฎีกา -พระราชกำหนด -พระราชบัญญัติ -พระรูป -พระรูปชี -พระฤๅษี -พระลบ -พระลือ -พระแวว -พระศุกร์เข้าพระเสาร์แทรก -พระหา -พระหาม -พระหารณย์ -พระหารัณย์ -พระหิด -พระองค์ -พระองค์เจ้า -พระอันดับ -พระอิฐพระปูน -พระเอก -พระฮาม -พรักพร้อม -พรั่ง -พรั่งพร้อม -พรั่งพรู -พรัด -พรั่น -พรั่นพรึง -พรับ -พร่า -พร้า -พราก -พรากเด็ก -พรากผู้เยาว์ -พรากลูกนกลูกกา -พราง -พร่าง -พรางพรอก -พร้างัดปากไม่ออก -พราด -พราน -พราย -พรายทะเล -พรายน้ำ -พรายแพรว -พรายย้ำ -พราว -พราวแพรว -พราหมณ์ -พราหมณ์เก็บหัวแหวน -พราหมณ์ขายเมีย -พราหมณ์ดีดน้ำเต้า -พราหมณัศบดี -พราหมณี -พราหมี -พรำ -พรำๆ -พร่ำ -พร้ำ -พร่ำพลอด -พร่ำเพรื่อ -พร่ำเพ้อ -พริก -พริกกระต่าย -พริกกะเกลือ -พริกแกว -พริกขิง -พริกดอง -พริกเทศ -พริกไทย -พริกน้ำส้ม -พริกหอม -พริกเหลือง -พริ้ง -พริ้งพราย -พริ้งเพริศ -พริบ -พริบตาเดียว -พริบไหว -พริ้ม -พริ้มพราย -พริ้มเพรา -พรึง -พรึน -พรึบ -พรืด -พรุ -พรุก -พรุ่ง -พรุ่งนี้ -พรุน -พรู -พรูด -พฤกษ- -พฤกษ์ -พฤกษชาติ -พฤกษทล -พฤกษเทวดา -พฤกษราช -พฤกษศาสตร์ -พฤกษา -พฤฒ -พฤฒา -พฤฒาจารย์ -พฤฒิ -พฤฒิ- -พฤฒิบาศ -พฤต -พฤติ -พฤติ- -พฤติกรรม -พฤติการณ์ -พฤตินัย -พฤทธ์ -พฤทธิ์ -พฤนต์ -พฤนท์ -พฤภูษณ -พฤภูษิต -พฤศจิก -พฤศจิกายน -พฤษภ -พฤษภาคม -พฤหัสบดี -พฤหัสบดีจักร -พล -พล- -พลกาย -พลการ -พลขันธ์ -พลความ -พลตระเวน -พลเทพ -พลบ -พลเมือง -พลเรือน -พลโลก -พลว- -พลวก -พลวง -พลวดกินลูก -พลวดใหญ่ -พลวัต -พลศาสตร์ -พลศึกษา -พลสิงห์ -พลอ -พล้อ -พลอง -พลอด -พลอดรัก -พลอน -พลอมแพลม -พลอย -พล่อย -พลอยฟ้าพลอยฝน -พละ -พละพลา -พลั่ก -พลัง -พลั่ง -พลั้ง -พลังงาน -พลังงานจลน์ -พลังงานศักย์ -พลังจิต -พลั้งปาก -พลั้งปากเสียศีล พลั้งตีนตกต้นไม้ -พลั้งเผลอ -พลัด -พลัดถิ่น -พลัดที่นาคาที่อยู่ -พลัดพราก -พลัน -พลับ -พลับเขา -พลับพลา -พลับพลึง -พลั่ว -พล่า -พลากร -พลาง -พลาญ -พลาด -พลาดท่า -พลาดิศัย -พลาธิการ -พล่าน -พลานามัย -พลานึก -พลาม -พล่าม -พลาย -พลายม้า -พลาสติก -พลาสมา -พลาหก -พลำ -พล้ำ -พลำภัง -พลิ -พลิก -พลิกกระเป๋า -พลิกแผ่นดิน -พลิกแพลง -พลิกศพ -พลิกหน้ามือเป็นหลังมือ -พลิพัท -พลิ้ว -พลี -พลีกรรม -พลีมุข -พลุ -พลุก -พลุ่ก -พลุกพล่าน -พลุ่ง -พลุ้น -พลุ่มพล่าม -พลุ่ย -พลุ้ย -พลู -พลูแก -พลูคาว -พลูต้น -พลูโต -พลูโทเนียม -พวก -พวกพ้อง -พวง -พ่วง -พวงโกเมน -พวงคราม -พวงชมพู -พวงดอกไม้ -พ่วงพี -พวงมาลัย -พวงมาลา -พวงแสด -พวงหยก -พวงหรีด -พวงอุไร -พวน -พวย -พวยน้ำ -พวยพุ่ง -พสก -พสก- -พสกนิกร -พสน -พสุ -พสุธา -พสุธาดล -พสุนธรา -พสุมดี -พสุสงกรานต์ -พหล -พหุ -พหุคูณ -พหุพจน์ -พหุภาคี -พหุล -พหู -พหูพจน์ -พหูสูต -พอ -พ่อ -พ้อ -พอก -พอกพูน -พอกัน -พอกันที -พอการ -พอก้าวขาก็ลาโรง -พ่อเกลอ -พ่อขุน -พ่อครัว -พอควร -พ่อค้าตีเมีย -พ่อคุณ -พอง -พ้อง -พ้องพาน -พ่อเจ้า -พ่อแจ้แม่อู -พอใจ -พอใช้ -พอใช้ได้ -พอดี -พอดีพอร้าย -พอดู -พอดูได้ -พอได้ -พอตัว -พ่อตา -พอทำเนา -พอทำพอกิน -พอที -พอที่ -พอน -พอนเรือ -พ่อบ้าน -พอประมาณ -พอไปได้ -พ่อพวงมาลัย -พอฟัด -พอฟัดพอเหวี่ยง -พ้อม -พ่อม่าย -พอมีพอกิน -พอมีอันจะกิน -พ่อเมือง -พอยกขาก็ลาโรง -พอแย้มปากก็เห็นไรฟัน -พ่อร้าง -พ่อเรือน -พอแรง -พ่อลิ้นทอง -พ่อเลี้ยง -พอเลี้ยงปากเลี้ยงท้อง -พอโลเนียม -พอสถานประมาณ -พ่อสื่อ -พอหอมปากหอมคอ -พอเหมาะ -พออ้าปากก็เห็นลิ้นไก่ -พะ -พ่ะ -พะงา -พะงาบ -พะงาบๆ -พะจง -พะทำมะรง -พะนอ -พะเน้าพะนอ -พะเน้าพะนึง -พะเนิน -พะเนินเทินทึก -พะเนียง -พะแนง -พะพาน -พะพิง -พะเพิง -พะยอม -พ่ะย่ะค่ะ -พะยุพยุง -พะยูง -พะยูน -พะเยิบ -พะเยิบๆ -พะเยิบพะยาบ -พะรุงพะรัง -พะเลย -พะโล้ -พะไล -พะวง -พะวักพะวน -พะวา -พะว้าพะวัง -พะอง -พะอากพะอำ -พะอืดพะอม -พัก -พักตร- -พักตร์ -พักตรา -พักตรากฤติ -พักตา -พักผ่อน -พักพิง -พักแพว -พักฟื้น -พักร -พักสมอง -พัง -พังกา -พังคา -พังงา -พังผืด -พังพวย -พังพอน -พังพาน -พังพาบ -พังเพย -พัช -พัชนี -พัชร -พัญจก -พัญจน์ -พัฒกี -พัฒน- -พัฒนะ -พัฒนา -พัฒนากร -พัฒนาการ -พัด -พัดชัก -พัดชา -พัดดึงส์ -พัดโบก -พัดแพว -พัดยศ -พัดลม -พัดหลวง -พัตติงสะ -พัตร -พัทธ- -พัทธ์ -พัทธยา -พัทธยากร -พัทธสีมา -พัทร -พัน -พันงู -พันจ่า -พันจำ -พันไฉน -พันซาด -พันตัน -พันตา -พันตู -พันทาง -พันธ- -พันธ์ -พันธกรณี -พันธน- -พันธนะ -พันธนาการ -พันธนาคาร -พันธนำ -พันธบัตร -พันธมิตร -พันธะ -พันธุ -พันธุ์ -พันเนตร -พันปี -พันพัว -พันลอก -พันลาย -พันลำ -พันลึก --พันลือ -พันเลิศ -พันวรรษา -พันแสง -พันเอิญ -พับ -พับเขียง -พับฐาน -พับผ้า -พับเพียบ -พับแพนงเชิง -พัลลภ -พัลวัน -พัว -พัวพัน -พัวะ -พัศดี -พัสดุ -พัสดุไปรษณีย์ -พัสดุภัณฑ์ -พัสเดา -พัสตร์ -พัสถาน -พา -พาก -พากเพียร -พากย์ -พากย์หนัง -พาง -พ่าง -พาชี -พาซื่อ -พาณ -พาณ- -พาณโยชน์ -พาณวาร -พาณาสน์ -พาณิช -พาณิชย์ -พาณินี -พาณี -พาด -พาดควาย -พาดไฉน -พาดพิง -พาดหัวข่าว -พาต -พาท -พาทย์ -พาธ -พาธา -พาน -พ่าน -พานกลีบบัว -พานปากกระจับ -พานร -พานรินทร์ -พานเรศ -พานแว่นฟ้า -พาม -พาย -พ่าย -พายม้า -พายเรือคนละที -พายเรือทวนน้ำ -พายเรือในหนอง -พายเรือในอ่าง -พายัพ -พายุ -พาร์เซก -พารณ -พารณะ -พารา -พาราฟิน -พาล -พาลกระแชง -พาลรีพาลขวาง -พาลา -พาลี -พาลีหลายหน้า -พาลุก -พาโล -พาไล -พาส -พาสน์ -พาสนา -พาสุกรี -พาห -พ่าห์ -พาหนะ -พาหะ -พาหา -พาหิรกะ -พาหิระ -พาหุ -พาหุยุทธ์ -พาหุรัด -พาเหียร -พาฬ -พาฬ- -พาฬมฤค -พาฬหะ -พำ -พำนัก -พำพวก -พำพึม -พำๆ พึมๆ -พำลา -พิกล -พิกเลนทรีย์ -พิกสิต -พิกัด -พิกัดอัตราศุลกากร -พิกัติ -พิกัน -พิการ -พิกุล -พิกุลป่า -พิเคราะห์ -พิฆน์ -พิฆเนศ -พิฆเนศวร -พิฆาต -พิง -พิจย -พิจล -พิจัย -พิจาร -พิจารณ์ -พิจารณา -พิจิก -พิจิต -พิจิตร -พิชญ์ -พิชย -พิชัย -พิชัยสงคราม -พิชาน -พิชิต -พิชิต- -พิชิตมาร -พิเชฐ -พิเชียร -พิฑูรย์ -พิณ -พิณพาทย์ -พิดทูล -พิดรก -พิดาน -พิโดร -พิตร -พิถย- -พิถยันดร -พิถี -พิถีพิถัน -พิทย- -พิทย์ -พิทยา -พิทยาคม -พิทยาคาร -พิทยาธร -พิทยาพล -พิทยาลัย -พิทักษ์ -พิทักษ์สันติ -พิทูร -พิเทศ -พิธาน -พิธี -พิธีกร -พิธีกรรม -พิธีการ -พิธีจุ่ม -พิธีแตก -พิธีธรรม -พิธีมณฑล -พิธีรีตอง -พิธีสาร -พิธุ -พิธุร -พินทุ -พินทุกัป -พินทุสร -พินพง -พิ่นพั่ง -พินอบพิเทา -พินัย -พินัยกรรม -พินาศ -พินิจ -พินิต -พินิศ -พินิศจัย -พิเนต -พิบัติ -พิบาก -พิบุล -พิบูล -พิปริต -พิปลาส -พิปัสสนา -พิพรรธ -พิพรรธน์ -พิพักพิพ่วน -พิพัฒ -พิพัฒน์ -พิพากษ์ -พิพากษา -พิพาท -พิพิธ -พิพิธ- -พิพิธภัณฑ์ -พิพิธภัณฑสถาน -พิภพ -พิภัช -พิภาค -พิภูษณะ -พิเภก -พิมปะการัง -พิมพ- -พิมพ์ -พิมพการัง -พิมพ์เขียว -พิมพ์ใจ -พิมพ์ดีด -พิมพ์ทอง -พิมพ์ลายมือ -พิมพ์สัมผัส -พิมพา -พิมพาภรณ์ -พิมโพหนะ -พิมล -พิมเสน -พิมาน -พิมุข -พิโมกข์ -พิโมกษ์ -พิโยกพิเกน -พิโยค -พิร -พิรอด -พิรากล -พิราบ -พิราม -พิราลัย -พิริย- -พิริยพฤนท์ -พิริยโยธา -พิริยะ -พิรี้พิไร -พิรุณ -พิรุธ -พิรุฬห์ -พิเราะ -พิโรธ -พิโรธนะ -พิไร -พิลังกาสา -พิลาป -พิลาลส -พิลาส -พิลิปดา -พิลึก -พิลึกกึกกือ -พิลึกพิลั่น -พิโลน -พิโลล -พิไล -พิศ -พิศวง -พิศวาส -พิศาล -พิศุทธ์ -พิศุทธิ์ -พิเศษ -พิษ -พิษ- -พิษฐาน -พิษนาศน์ -พิษสง -พิษสมโยค -พิษสุนัขบ้า -พิษสุราเรื้อรัง -พิสดาร -พิสมร -พิสมัย -พิสมัยเรียงหมอน -พิสัง -พิสัช -พิสัญญี -พิสัย -พิสิฐ -พิสุทธิ์ -พิสูจน์ -พิหค -พิหเคนทร์ -พิหาร -พิฬาร -พี -พี่ -พี้ -พีชคณิต -พี่น้อง -พี่เบิ้ม -พี้โพ้ -พีร- -พีระมิด -พี่เลี้ยง -พึง -พึ่ง -พึ่งจมูกคนอื่นหายใจ -พึงใจ -พึงตา -พึ่งลำแข้งตัวเอง -พึ่บ -พึม -พึมพำ -พืช -พืชคาม -พืชชั้นต่ำ -พืชชั้นสูง -พืชพันธุ์ -พืด -พื้น -พื้นๆ -พื้นความรู้ -พื้นฐาน -พื้นดี -พื้นเดิม -พื้นที่ -พื้นบ้าน -พื้นเพ -พื้นเมือง -พื้นเสีย -พุ -พุก -พุกาม -พุง -พุ่ง -พุงแก -พุงจง -พุงดอ -พุงทะลาย -พุงปลา -พุงปลาช่อน -พุงพวง -พุงพ่วง -พุ่งหลาว -พุ่งหอกเข้ารก -พุ่งแหลน -พุฒ -พุฒิ -พุด -พุดตาน -พุทธ -พุทธ- -พุทธกาล -พุทธคุณ -พุทธจักร -พุทธเจดีย์ -พุทธชาด -พุทธฎีกา -พุทธตันตระ -พุทธปฏิมา -พุทธปฏิมากร -พุทธมามกะ -พุทธรักษา -พุทธศักราช -พุทธศาสนิกชน -พุทธสมัย -พุทธะ -พุทธังกูร -พุทธันดร -พุทธางกูร -พุทธาวาส -พุทธิ -พุทธุปบาทกาล -พุทโธ่ -พุทรา -พุธ -พุพอง -พุ่ม -พุ่มข้าวบิณฑ์ -พุ่มพวง -พุ่มม่าย -พุมเรียง -พุ้ย -พู -พู่ -พู่กลิ่น -พู่กัน -พูกาม -พูด -พูดคล่องเหมือนล่องน้ำ -พูดจนลิงหลับ -พูดจริงทำจริง -พูดเป็นต่อยหอย -พูดเป็นนัย -พูดเป็นน้ำไหลไฟดับ -พูดเป็นไฟ -พูดไปสองไพเบี้ย นิ่งเสียตำลึงทอง -พูดอย่างมะนาวไม่มีน้ำ -พูน -พู้น -พูพอน -พู่ระหง -เพ -เพ็ก -เพกา -เพคะ -เพ็ง -เพ่ง -เพ่งเล็ง -เพ็จ -เพ็จไม้ -เพชฉลูกรรม -เพชฌฆาต -เพชร -เพชร- -เพชรกลับ -เพชรซีก -เพชรดา -เพชรตัดเพชร -เพชรตาแมว -เพชรน้ำค้าง -เพชรน้ำหนึ่ง -เพชรนิลจินดา -เพชรปาณี -เพชรร่วง -เพชรร้าว -เพชรฤกษ์ -เพชรลูก -เพชรสังฆาต -เพชรหลีก -เพชรหึง -เพชรายุธ -เพ็ญ -เพฑูริย์ -เพณี -เพ็ดทูล -เพดาน -เพดานบิน -เพตร -เพท -เพทนา -เพทาย -เพทุบาย -เพโท -เพโทบาย -เพ่นพ่าน -เพนียด -เพไนย -เพ้ย -เพรง -เพรซีโอดิเมียม -เพรา -เพรางาย -เพราพริ้ง -เพราเพริศ -เพราะ -เพราะฉะนั้น -เพราะว่า -เพริด -เพริศ -เพริศพราย -เพริศพริ้ง -เพริศแพร้ว -เพรียก -เพรียกพร้อง -เพรียง -เพรียงคอห่าน -เพรียงเมือง -เพรียบ -เพรี้ยม -เพรี้ยมพราย -เพรียว -เพรียวลม -เพรื่อ -เพรือง -เพล -เพลง -เพลงเชิด -เพลงตระเชิญ -เพลงยาว -เพลงสาธุการ -เพลงเสมอ -เพลงหน้าพาทย์ -เพล็ด -เพล้โพล้ -เพลา -เพลาะ -เพลาะแพละ -เพลิง -เพลิงกัลป์ -เพลิงฟ้า -เพลิดเพลิน -เพลิน -เพลีย -เพลี้ย -เพลี่ยง -เพลี่ยงพล้ำ -เพลียใจ -เพศ -เพศยันดร -เพส -เพสลาด -เพ่อ -เพ้อ -เพ้อเจ้อ -เพอิญ -เพะ -เพา -เพาพะงา -เพาพาล -เพาะ -เพิก -เพิกเฉย -เพิกถอน -เพิง -เพิ่ง -เพิดเพ้ย -เพิ่ม -เพิ่มเติม -เพิ่มพูน -เพี้ย -เพี้ยกวาน -เพี้ยกว้าน -เพียง -เพี้ยง -เพียงดัง -เพียงนั้น -เพียงนี้ -เพียงพอ -เพียงออ -เพียชน์ -เพียน -เพี้ยน -เพี้ยนผัด -เพียบ -เพียบพร้อม -เพียร -เพื่อ -เพื่อน -เพื่อนเกลอ -เพื่อนเจ้าบ่าว -เพื่อนเจ้าสาว -เพื่อนบ้าน -เพื่อนฝูง -แพ -แพ้ -แพขนานยนต์ -แพง -แพ่ง -แพงพวย -แพงพวยฝรั่ง -แพ็งแพว -แพแตก -แพทย- -แพทย์ -แพทยศาสตร์ -แพทยา -แพ้ท้อง -แพน -แพ่น -แพนก -แพนงเชิง -แพ้เป็นพระ ชนะเป็นมาร -แพ้เปรียบ -แพ้ผม -แพ้ผัว -แพ้ฟัน -แพ้ภัยตัว -แพ้เมีย -แพร -แพร่ -แพรก -แพร่ข่าว -แพร่ง -แพร่งพราย -แพรว -แพร้ว -แพรวพราย -แพรวพราว -แพร่หลาย -แพ้รู้ -แพ้แรง -แพลง -แพลทินัม -แพลม -แพลเลเดียม -แพละ -แพละโลม -แพลูกบวบ -แพว -แพ้ว -แพศย์ -แพศยา -แพะ -แพะรับบาป -แพะโลม -โพ -โพก -โพกพาย -โพง -โพงพาง -โพชฌงค์ -โพซิตรอน -โพด -โพทะเล -โพแทสเซียม -โพธ -โพธิ- -โพธิ์ -โพธิญาณ -โพธิบัลลังก์ -โพธิปักขิยธรรม -โพธิสมภาร -โพธิสัตว์ -โพน -โพ้น -โพนทะนา -โพ้นทะเล -โพนเพน -โพบาย -โพผัน -โพย -โพยก๊วน -โพยม -โพยมยาน -โพยมัน -โพยมาน -โพรก -โพรง -โพรงแสม -โพรโทแอกทิเนียม -โพรมีเทียม -โพระดก -โพล่ -โพลง -โพล่ง -โพล้ง -โพลน -โพล้เพล้ -โพละ -โพสพ -ไพ -ไพ่ -ไพจิตร -ไพชน -ไพชยนต์ -ไพฑูรย์ -ไพโดร -ไพที -ไพบูลย์ -ไพ่ป๊อก -ไพพรรณ -ไพเพิด -ไพ่ไฟ -ไพมอก -ไพม้า -ไพร -ไพร่ -ไพรคิ้ว -ไพรจิตร -ไพรชน -ไพรชยนต์ -ไพรฑูรย์ -ไพรที -ไพรบูลย์ -ไพรปาก -ไพร่พล -ไพร่ฟ้า -ไพรระหง -ไพรเราะ -ไพรวัน -ไพรสณฑ์ -ไพร่สม -ไพร่ส่วย -ไพรสัณฑ์ -ไพรสาณฑ์ -ไพรสามกอ -ไพร่หลวง -ไพรัช -ไพรัช- -ไพรำ -ไพริน -ไพรินทร์ -ไพรี -ไพรู -ไพเราะ -ไพโรจน์ -ไพล -ไพล่ -ไพล่หลัง -ไพศาข -ไพศาข- -ไพศาขบุรณมี -ไพศาขมาส -ไพศาล -ไพเศษ -ไพสพ -ไพสิฐ -ไพหาร -ฟ -ฟก -ฟกช้ำดำเขียว -ฟ้ง -ฟรักโทส -ฟรี -ฟรีบาร์ -ฟลูออรีน -ฟ่อ -ฟ้อ -ฟอก -ฟอกซัก -ฟอกผ้า -ฟอกพยาน -ฟอกโลหิต -ฟอกหนัง -ฟอง -ฟ่อง -ฟ้อง -ฟ้องกลับ -ฟองกาม -ฟ้องตัวเอง -ฟองเต้าหู้ -ฟองทะเล -ฟองน้ำ -ฟ่องฟู -ฟองมัน -ฟ้องแย้ง -ฟ้องร้อง -ฟอด -ฟอดแฟด -ฟอน -ฟ่อน -ฟ้อน -ฟ้อแฟ้ -ฟอร์มาลดีไฮด์ -ฟอร์มาลิน -ฟอสฟอรัส -ฟอสเฟต -ฟะฟัด -ฟะฟั่น -ฟะฟ่าย -ฟัก -ฟักข้าว -ฟักตัว -ฟักทอง -ฟักฟุ้น -ฟักฟูม -ฟักเหลือง -ฟัง -ฟังก์ชัน -ฟังขึ้น -ฟังได้ -ฟังไม่ได้ศัพท์ จับไปกระเดียด -ฟังหูไว้หู -ฟังออก -ฟัด -ฟัดเฟียด -ฟัน -ฟั่น -ฟั้น -ฟันคลื่น -ฟันช้าง -ฟันดาบ -ฟันถาวร -ฟันแท้ -ฟันน้ำนม -ฟันปลา -ฟันฝ่า -ฟั่นเฝือ -ฟันเฟือง -ฟั่นเฟือน -ฟันม้า -ฟันเลื่อย -ฟันหนู -ฟันหลอ -ฟ้า -ฟาก -ฟ้าคะนอง -ฟ้าเคืองสันหลัง -ฟาง -ฟ่าง -ฟางลอย -ฟาด -ฟาดเคราะห์ -ฟาดหัว -ฟาทอม -ฟาน -ฟ้าผ่า -ฟ้าฝ่อ -ฟ่าม -ฟ้ามุ่ย -ฟ้าไม่กระเทือนสันหลัง -ฟาย -ฟายน้ำตา -ฟายมือ -ฟาร์ม -ฟ้าร้อง -ฟ้าแลบ -ฟาสซิสต์ -ฟ้าหลัว -ฟิก -ฟิด -ฟิบ -ฟิล์ม -ฟิวส์ -ฟิสิกส์ -ฟี่ -ฟี้ -ฟืน -ฟื้น -ฟื้นตัว -ฟื้นฝอย -ฟื้นฟู -ฟื้นองค์ -ฟืม -ฟุ -ฟุ้ง -ฟุ้งซ่าน -ฟุ้งเฟ้อ -ฟุ้งเฟื่อง -ฟุต -ฟุตบอล -ฟุน -ฟุบ -ฟุ่บ -ฟุฟะ -ฟุ่มเฟือย -ฟุลสแก๊ป -ฟู -ฟู่ -ฟูก -ฟูด -ฟูดฟาด -ฟูฟ่อง -ฟูม -ฟูมน้ำ -ฟูมฟัก -ฟูมฟาย -ฟูมเลี้ยง -เฟ็ด -เฟ็ดหาว -เฟ้น -เฟลด์สปาร์ -เฟ้อ -เฟอร์เมียม -เฟอะ -เฟอะฟะ -เฟะ -เฟะฟะ -เฟิน -เฟี้ยม -เฟี้ยมเฝ้า -เฟี้ยว -เฟือ -เฟื่อ -เฟื้อ -เฟือง -เฟื่อง -เฟื้อง -เฟื่องฟ้า -เฟื่องฟุ้ง -เฟื่องฟู -เฟือน -เฟือย -เฟื้อย -แฟ่ -แฟง -แฟชั่น -แฟบ -แฟ้ม -แฟรนเซียม -แฟลกซ์ -แฟลต -แฟะ -โฟกัส -ไฟ -ไฟกัลป์ -ไฟจุกตูด -ไฟฉาย -ไฟแช็ก -ไฟธาตุ -ไฟฟ้า -ไฟฟ้ากระแส -ไฟฟ้าสถิต -ไฟลามทุ่ง -ไฟสุมขอน -ภ -ภค -ภควดี -ภควัต -ภควันต์ -ภควัม -ภควา -ภควาน -ภคันทลา -ภคินี -ภณ -ภณิดา -ภพ -ภมการ -ภมร -ภมริน -ภมรี -ภมุ -ภมุกะ -ภมุกา -ภย- -ภยันตราย -ภยาคติ -ภร -ภรณี -ภรณีภู -ภรต -ภรต- -ภรตวรรษ -ภรตศาสตร์ -ภรรดร -ภรรดา -ภรรยา -ภระมร -ภระมรี -ภรัสดาษ -ภราดร -ภราดรภาพ -ภราดา -ภราตร- -ภราตรภาพ -ภราตฤ- -ภราตฤภาพ -ภริยา -ภรู -ภรูมณฑล -ภฤงคาร -ภฤดก -ภฤดี -ภฤตย์ -ภฤศ -ภฤษฏ์ -ภว -ภว- -ภวกษัย -ภวตัณหา -ภวนะ -ภวปาระ -ภวัคร -ภวังค- -ภวังค์ -ภวังคจิต -ภวันดร -ภวาภพ -ภักขะ -ภักดี -ภักต- -ภักตกฤตย์ -ภักตะ -ภักติ -ภักษ- -ภักษ์ -ภักษการ -ภักษา -ภักษาหาร -ภัค -ภัคน์ -ภังค- -ภังคะ -ภังคี -ภัจ -ภัญชะ -ภัณฑ- -ภัณฑ์ -ภัณฑครรภ -ภัณฑนะ -ภัณฑาคาร -ภัณฑาคาริก -ภัณฑารักษ์ -ภัณฑู -ภัณฑูกรรม -ภัต -ภัต- -ภัตกิจ -ภัตตาคาร -ภัตตาหาร -ภัตร -ภัทร -ภัทร- -ภัทรกัป -ภัทรกุมภ์ -ภัทรบทมาส -ภัทรบิฐ -ภัพ -ภัย -ภัสดา -ภัสตรา -ภัสมะ -ภัสสร -ภา -ภากร -ภาค -ภาค- -ภาคตัดกรวย -ภาคทฤษฎี -ภาคทัณฑ์ -ภาคนิพนธ์ -ภาคปฏิบัติ -ภาคพื้น -ภาคภูมิ -ภาคย์ -ภาคยานุวัติ -ภาคเรียน -ภาคเสธ -ภาคินี -ภาคิไนย -ภาคี -ภาคียะ -ภาชนะ -ภาชนีย- -ภาชี -ภาณ -ภาณ- -ภาณก -ภาณวาร -ภาณี -ภาณุ -ภาณุมาศ -ภาดร -ภาดา -ภาตร -ภาตา -ภาติกะ -ภาติยะ -ภาตุ -ภาพ -ภาพ- -ภาพกาก -ภาพจริง -ภาพถ่าย -ภาพนิ่ง -ภาพประกอบ -ภาพปูนเปียก -ภาพพจน์ -ภาพย์ -ภาพยนตร์ -ภาพลวงตา -ภาพลักษณ์ -ภาพเสมือน -ภาพหุ่นนิ่ง -ภาม -ภาย -ภายนอก -ภายใน -ภายหน้า -ภายหลัง -ภาร -ภาร- -ภารกิจ -ภารดี -ภารต -ภารต- -ภารตวิทยา -ภารตี -ภารธุระ -ภารยทรัพย์ -ภารยา -ภารโรง -ภาระ -ภาระจำยอม -ภาระติดพัน -ภาระติดพันในอสังหาริมทรัพย์ -ภารา -ภาว- -ภาวนา -ภาวนามัย -ภาวศุทธิ -ภาวะ -ภาวะฉุกเฉิน -ภาษ -ภาษก -ภาษณ์ -ภาษา -ภาษาศาสตร์ -ภาษิต -ภาษี -ภาษีเงินได้ -ภาษีบำรุงท้องที่ -ภาษีมูลค่าเพิ่ม -ภาษีโรงเรือนและที่ดิน -ภาษีสรรพสามิต -ภาส -ภาส- -ภาสกร -ภาสน์ -ภาสวร -ภาสา -ภาสุร -ภิกขา -ภิกขาจาร -ภิกขาหาร -ภิกขุ -ภิกขุนี -ภิกษา -ภิกษาจาร -ภิกษาหาร -ภิกษุ -ภิกษุณี -ภิงคาร -ภิงส -ภิงสนะ -ภิงสร -ภิญโญ -ภิญโญภาพ -ภิตติ -ภิท -ภิน- -ภินชาติ -ภินท- -ภินท์ -ภินทน- -ภินทนาการ -ภินวรรณ -ภิยโย -ภิยโยภาพ -ภิรมย์ -ภิรมย์สุรางค์ -ภิษัช -ภิส -ภิสัก -ภีตะ -ภีม -ภีรุ -ภีรุก- -ภีรุกชาติ -ภุกต- -ภุกต์ -ภุกตเศษ -ภุกตาหาร -ภุขัน -ภุช -ภุช- -ภุชค -ภุชงค์ -ภุชงคประยาต -ภุชงคม -ภุชสมโภค -ภุชา -ภุญช -ภุต -ภุม -ภุม- -ภุมเทวดา -ภุมระ -ภุมรัตน์ -ภุมรา -ภุมริน -ภุมรี -ภุมเรศ -ภุมวาร -ภุส -ภู -ภู่ -ภูเขา -ภูเขาน้ำแข็ง -ภูเขาไฟ -ภูโช -ภูดล -ภูดาด -ภูต -ภูต- -ภูตคาม -ภูตบดี -ภูตรูป -ภูติ -ภูตี -ภูเตศวร -ภูธร -ภูธเรศ -ภูธเรศวร -ภูนาถ -ภูนายก -ภูเนตุ -ภูบดินทร์ -ภูบดี -ภูบาล -ภูเบนทร์ -ภูเบศ -ภูเบศวร์ -ภูป -ภูผา -ภูภุช -ภูม -ภูมิ -ภูมิ- -ภูมิคุ้มกัน -ภูมิใจ -ภูมิฐาน -ภูมิธร -ภูมิธรรม -ภูมินทร์ -ภูมินาถ -ภูมิบดี -ภูมิบริมาณ -ภูมิบาล -ภูมิประเทศ -ภูมิปัญญา -ภูมิแพ้ -ภูมิภาค -ภูมิภุช -ภูมิรัฐศาสตร์ -ภูมิรู้ -ภูมิลำเนา -ภูมิศาสตร์ -ภูมิศาสตร์กายภาพ -ภูมิศาสตร์การเกษตร -ภูมิศาสตร์การเมือง -ภูมิศาสตร์ประชากร -ภูมิศาสตร์ประวัติ -ภูมิศาสตร์เศรษฐกิจ -ภูมี -ภูมีศวร -ภูรโลก -ภูริ -ภูรี -ภูว- -ภูวดล -ภูวน- -ภูวนตรัย -ภูวนัตตรัย -ภูวนาถ -ภูวเนตร -ภูวไนย -ภูษณ- -ภูษณพาส -ภูษา -ภูษามาลา -ภูษาโยง -ภูษิต -เภกะ -เภคะ -เภตรา -เภท -เภทภัย -เภทุบาย -เภรว -เภริ -เภรี -เภสัช -เภสัช- -เภสัชกร -เภสัชกรรม -เภสัชเคมี -เภสัชพฤกษศาสตร์ -เภสัชเพลา -เภสัชวิทยา -เภสัชเวท -เภสัชศาสตร์ -เภสัชอุตสาหกรรม -โภค -โภค- -โภคทรัพย์ -โภคภัณฑ์ -โภคยทรัพย์ -โภคะ -โภคิน -โภคี -โภไคย -โภไคศวรรย์ -โภช -โภชก -โภชน- -โภชนะ -โภชนะห้า -โภชนากร -โภชนาการ -โภชนาหาร -โภชย์ -ไภริน -ไภรี -ไภษัชคุรุ -ไภษัชย์ -ม -มก -มกร -มกร- -มกรกุณฑล -มกราคม -มกส -มกุฎ -มกุฎราชกุมาร -มกุล -มคธ -มฆ -มฆวัน -มฆา -ม่ง -มงกุฎ -มงกุฎไทย -มงโกรย -มงคล -มงคล- -มงคลจักร -มงคลแฝด -มงคลวาท -มงคลวาร -มงคลสูตร -มงคลหัตถี -มณฑ์ -มณฑก -มณฑนะ -มณฑป -มณฑล -มณฑา -มณฑารพ -มณฑิร -มณเฑียร -มณเฑียรบาล -มณี -มณีการ -มณีพืช -มณีรัตน์ -มณีราค -มณีศิลา -มด -มดดำ -มดแดง -มดแดงเฝ้ามะม่วง -มดเท็จ -มดยอบ -มดลูก -มดส้ม -มดาย -มดี -มต- -มตก -มตกภัต -มตะ -มติ -มติมหาชน -มท -มทนะ -มทนียะ -มธุ -มธุกร -มธุกรี -มธุการี -มธุโกศ -มธุตฤณ -มธุป -มธุปฎล -มธุปายาส -มธุพรต -มธุมักขิกา -มธุมิศร -มธุร- -มธุรตรัย -มธุรพจน์ -มธุรส -มธุระ -มธุลีห์ -มธุเศษ -มธุสร -มน -ม่น -มนต์ -มนตร์ -มนตรี -มนท- -มนท์ -มนทกานติ -มนทาทร -มนทิร -มนทิราลัย -มนเทียร -มนเทียรบาล -มนสิการ -มนัส -มนัส- -มนัสดาป -มนัสวี -มนิมนา -มนิลา -มนีมนา -มนุ -มนุช -มนุชาธิป -มนุญ -มนุษย- -มนุษย์ -มนุษย์กบ -มนุษยชาติ -มนุษยเทพ -มนุษยธรรม -มนุษยโลก -มนุษยศาสตร์ -มนุษยสัมพันธ์ -มนุษย์อวกาศ -มนุสาร -มนู -มนูสาร -มโน -มโนกรรม -มโนคติ -มโนช -มโนชญ์ -มโนธรรม -มโนนุกูล -มโนภาพ -มโนภินิเวศ -มโนมัย -มโนรถ -มโนรม -มโนรมย์ -มโนราห์ -มโนศิลา -มโนสาร -มโนสาเร่ -มโนหร -มมังการ -มมาก -มยุร- -มยุรคติ -มยุรฉัตร -มยุรอาสน์ -มยุระ -มยุรา -มยุรี -มยุเรศ -มยูข -มยูร -มร -มรกต -มรคา -มรฑป -มรณ- -มรณ์ -มรณกรรม -มรณธรรม -มรณบัตร -มรณภัย -มรณภาพ -มรณะ -มรณันติก- -มรณานต์ -มรดก -มรรค -มรรคนายก -มรรคา -มรรตย -มรรตัย -มรรทน -มรรยาท -มรรษ -มรสุม -มรัมเทศ -มรานควาน -มริจ -มริยาท -มรีจิ -มรุ -มรุต -มฤค -มฤค- -มฤคทายวัน -มฤคย์ -มฤคราช -มฤคศิร -มฤคศิรมาส -มฤคศิรัส -มฤคเศียร -มฤคินทร์ -มฤเคนทร์ -มฤจฉา -มฤจฉาชีพ -มฤจฉาทิฐิ -มฤดก -มฤต -มฤตก -มฤตยู -มฤตยูราช -มฤทิงค์ -มฤทุ -มฤทุกะ -มฤธุ -มฤษา -มฤษาวาท -มล -มล- -มลโค -มลทิน -มลน -มล่น -มลนมลาน -มลพิษ -มลวก -มล่อน -มล่อย -มละ -มลัก -มลังเมลือง -มล้า -มลาก -มล้าง -มลาน -มล่าน -มลาย -มลายู -มลาว -มล่าวเมลา -มลิน -มลิ้น -มลื่น -มวก -มวกผา -มวกเหล็ก -มวกใหญ่ -ม่วง -มวน -ม่วน -ม้วน -ม้วนต้วน -ม้วนเสื่อ -ม้วนหน้า -มวย -ม้วย -มวยไทย -มวยปล้ำ -มวยล้ม -มวยวัด -มวยสากล -มวยหมู่ -มวล -มวลสาร -มวลอากาศ -มสาร -มสารก -มสารคัล -มสิ -มหกรรม -มหรณพ -มหรรฆ -มหรรณพ -มหรสพ -มหัคฆ -มหัจฉริย- -มหัจฉริยะ -มหัณณพ -มหัต -มหัทธนะ -มหันต- -มหันต์ -มหันตโทษ -มหัพภาค -มหัล -มหัลกะ -มหัศจรรย์ -มหา -มหากฐิน -มหากาฬ -มหาขันธก -มหาจักร -มหาชน -มหาชัย -มหาชาติ -มหาโชตรัต -มหาดไทย -มหาดเล็ก -มหาดเล็กรายงาน -มหาตมะ -มหาไถ่ -มหาเทพ -มหาเทพี -มหาเทวี -มหาธาตุ -มหานสะ -มหานิกาย -มหานิล -มหาบพิตร -มหาบัณฑิต -มหาพน -มหาพรหม -มหาภารต -มหาภิเนษกรมณ์ -มหาภูต -มหาเมฆ -มหายาน -มหายุค -มหารณพ -มหาราช -มหาราชลีลา -มหาฤกษ์ -มหาละลวย -มหาละลาย -มหาวงศ์ -มหาวรรค -มหาวิทยาลัย -มหาศาล -มหาสงกรานต์ -มหาสดมภ์ -มหาสดำ -มหาสมุทร -มหาสาวก -มหาหงส์ -มหาหิงคุ์ -มหาอำนาจ -มหาอุจ -มหาอุด -มหาอุปรากร -มหิ -มหิงส์ -มหิดล -มหิทธิ -มหิธร -มหินท์ -มหิบดี -มหิบาล -มหิป -มหิมา -มหิศร -มหิศวร -มหิษ -มหิษี -มหึมา -มหุดิฤกษ์ -มหุรดี -มหู -มเหนทร์ -มเหยงค์ -มเหศ -มเหศวร -มเหศักดิ์ -มเหสักข์ -มเหสิ -มเหสี -มเหาษธ -มเหาฬาร -มโหฆ -มโหรสพ -มโหระทึก -มโหรี -มโหษธ -มโหฬาร -มไหศวรรย์ -มอ -มอคราม -มอง -มองโกลอยด์ -มองคร่อ -มองเสี้ยว -มอซอ -มอญ -มอญซ่อนผ้า -มอญตีดั้ง -มอด -ม่อต้อ -มอเตอร์ -มอน -ม่อน -มอนไข่ -มอบ -มอบฉันทะ -มอบหมาย -มอบอำนาจ -มอม -มอมเมา -มอมแมม -มอมเหล้า -ม่อย -มอร์ฟีน -มอระกู่ -มอลโทส -ม่อลอกม่อแลก -มอหมึก -ม่อห้อม -ม่อฮ่อม -มะ -มะกรูด -มะกล่ำ -มะกอก -มะกอกน้ำ -มะกอกบ้าน -มะกอกป่า -มะกอกฝรั่ง -มะกอกพราน -มะกอกสามตะกร้าปาไม่ถูก -มะก่อง -มะกะโรนี -มะกา -มะเกลือ -มะเกี๋ยง -มะข่วง -มะขวิด -มะขาม -มะขามคราบหมู -มะขามเทศ -มะขามป้อม -มะขามเปียก -มะเขือ -มะเขือทวาย -มะเขือเทศ -มะเขือพวง -มะเขือมอญ -มะแข่น -มะคะ -มะคังแดง -มะค่า -มะค่าแต้ -มะค่าโมง -มะค่าหนาม -มะค่าใหญ่ -มะคำไก่ -มะคำดีควาย -มะงัน -มะงั่ว -มะงุมมะงาหรา -มะซัก -มะซาง -มะซ่าน -มะดะขี้นก -มะดัน -มะดา -มะดูก -มะเดหวี -มะเดื่อ -มะเดื่อดิน -มะต้อง -มะตะบะ -มะตาด -มะตาหะรี -มะตี -มะตึ่ง -มะตื๋น -มะตูม -มะแตก -มะนาว -มะนาวเทศ -มะปราง -มะปริง -มะป่อง -มะป่องต้น -มะฝ่อ -มะพร้าว -มะพร้าวแก้ว -มะพร้าวตื่นดก -มะพร้าวทุย -มะพร้าวห้าว -มะพลับ -มะพูด -มะแพน -มะแพร้ว -มะเฟือง -มะแฟน -มะไฟ -มะไฟเดือนห้า -มะม่วง -มะม่วงหิมพานต์ -มะม่าว -มะมี่ -มะมื่น -มะมุด -มะเมอ -มะเมีย -มะเมื่อย -มะแม -มะยง -มะยงชิด -มะยม -มะระ -มะริด -มะรืน -มะรุม -มะรุมมะตุ้ม -มะเร็ง -มะเรื่อง -มะโรง -มะละกอ -มะลารอกัน -มะลำ -มะลิ -มะลิซ่อม -มะลิน -มะลิ่ม -มะลิเลื้อย -มะลิอ่อง -มะลื่น -มะลืมดำ -มะลุลี -มะวาร -มะแว้ง -มะสัง -มะเส็ง -มะหลิ่ม -มะหวด -มะหะหมัด -มะหัล -มะหาด -มะหิ่ง -มะเหงก -มะเหมื่อย -มะอึก -มะฮอกกานี -มัก -มักกะลีผล -มักกะสัน -มักขะ -มั่กขั้ก -มักขิกา -มักขิกาชาติ -มักคุ้น -มักง่าย -มักฏกะ -มักฏะ -มักได้ -มักน้อย -มักมาก -มักใหญ่ -มัค- -มัคคะ -มัคคุเทศก์ -มัคนายก -มัคสิระ -มัฆวา -มัฆวาน -มั่ง -มังกง -มังกร -มังกุ -มังคละ -มั่งคั่ง -มังค่า -มังคุด -มังตาน -มั่งมี -มั่งมีในใจ แล่นใบบนบก -มังส- -มังสวิรัติ -มังสะ -มังสี -มังหงัน -มัจจะ -มัจจุ -มัจจุราช -มัจฉระ -มัจฉริยะ -มัจฉรี -มัจฉะ -มัจฉา -มัจฉาชาติ -มัช- -มัชชะ -มัชชาร -มัชฌ- -มัชฌันติก- -มัชฌันติกสมัย -มัชฌิม- -มัชฌิมนิกาย -มัชฌิมบุรุษ -มัชฌิมประเทศ -มัชฌิมภูมิ -มัชฌิมยาม -มัชฌิมวัย -มัชฌิมา -มัชฌิมาปฏิปทา -มัชวิรัติ -มัญจก -มัญจา -มัญชิษฐ -มัญชิษฐา -มัญชีร -มัญชุ -มัญชุสา -มัญชูสา -มัญเชฏฐะ -มัญเชฏฐิกา -มัญเชฏฐิกากร -มัญเชียร -มัฏฐะ -มัณฑ- -มัณฑน- -มัณฑนศิลป์ -มัณฑนา -มัณฑุก -มัด -มัดจำ -มัดเชื้อเพลิง -มัดมือชก -มัดหมี่ -มัดหมู -มัดหวาย -มัตตะ -มัตตัญญู -มัตตัย -มัตตา -มัตติกา -มัตถก -มัตถลุงค์ -มัตย -มัตสยะ -มัตสยา -มัตสร -มัตสรรย์ -มัตสริน -มัทนะ -มัทนียะ -มัทยะ -มัธย- -มัธยฐาน -มัธยม -มัธยม- -มัธยมกาล -มัธยมศึกษา -มัธยมา -มัธยันห์ -มัธยัสถ์ -มัน -มั่น -มันแกว -มั่นคง -มั่นใจ -มันดี -มันตา -มันถะ -มันทิร -มันทิราลัย -มันเทศ -มันนก -มันปลา -มันปู -มันฝรั่ง -มันย่อง -มันสมอง -มันเสา -มันไส้ -มั่นหมาย -มั่นเหมาะ -มับ -มับๆ -มั้ม -มัมมี่ -มัย -มัลก -มัลละ -มัลลิกา -มัว -มั่ว -มัวซัว -มัวมอม -มั่วมูล -มัวเมา -มัวเมีย -มั่วสุม -มัวหมอง -มัศยา -มัสดก -มัสดุ -มัสตาร์ด -มัสตุ -มัสมั่น -มัสยิด -มัสรู่ -มัสลิน -มัสสุ -มา -ม้า -มาก -มากขี้ควายหลายขี้ช้าง -มากมาย -มากมายก่ายกอง -มากหน้าหลายตา -มากหมอมากความ -มาแขก -มาคสิร- -มาคสิระ -มาฆ- -มาฆบูชา -มาฆะ -ม้าง -มางสะ -ม้าใช้ -มาณพ -มาณวิกา -มาด -มาดา -ม้าดีดกะโหลก -มาตงค์ -ม้าต้น -มาตร -มาตร- -มาตรการ -มาตรฐาน -มาตรแม้น -มาตรว่า -มาตรา -มาตราพฤติ -มาตราส่วน -มาตฤ -มาตฤกะ -มาตสรรย์ -มาตังค -มาตา -มาตามหะ -มาตามหัยกะ -มาตามหัยกา -มาตามหัยยิกา -มาตามหา -มาติก -มาติกา -มาตี -มาตุ -มาตุคาม -มาตุฆาต -มาตุจฉา -มาตุภูมิ -มาตุรงค์ -มาตุเรศ -มาตุละ -มาตุลา -มาตุลานี -มาตุลุงค์ -มาท -มาทน -ม้าทลายโรง -ม้าเทศ -มาธยมิกะ -มาธุร -มาธุสร -มาธูร -มาน -ม่าน -ม้าน -ม่านตา -มานทะลุน -ม่านบังเพลิง -มานพ -ม่านเมรุ -ม่านลาย -ม่านสองไข -ม่านอินทนิล -มานะ -มานัต -มานัส -ม้าน้ำ -มานิต -มานี -มานุษ -มานุษย- -มานุษยวิทยา -มาโนชญ์ -มาบ -มาปก -มาภา -ม้าม -ม้ามืด -มาย -ม่าย -ม่ายเมียง -ม้าย่อง -มายัง -มายา -มายากร -มายากล -มายาการ -มายาประสาน -มายาวี -มาร -มาร- -มารค -มารคอหอย -มารชิ -มารชิต -มารดร -มารดา -มารผจญ -มารยา -มารยาท -มารวิชัย -มารวิชิต -มารศรี -มารษา -มารสังคม -มารหัวขน -มาระ -มาราธิราช -ม้ารำ -มาริ -มาริต -มารุต -มารุมมาตุ้ม -ม้าเร็ว -มาลย์ -ม้าล่อ -มาลัย -มาลา -มาลากรรม -มาลาการ -มาลาตี -ม้าลาย -มาลาเรีย -มาลำ -มาลินี -มาลี -มาลุต -มาวาร -มาศ -มาส -มาสก -ม้าสะบัดกีบ -มาห์ -ม่าห์ -มาหิส -มาเหนือเมฆ -ม่าเหมี่ยว -มาฬก -ม้าอ้วน -มำเลือง -มิ -มิค -มิค- -มิคลุท -มิคลุทก -มิคเศียร -มิคสัญญี -มิคสิร- -มิคสิระ -มิคี -มิ่ง -มิ่งขวัญ -มิงโค -มิ่งมิตร -มิจฉา -มิจฉากัมมันตะ -มิจฉาจริยา -มิจฉาจาร -มิจฉาชีพ -มิจฉาทิฐิ -มิจฉาบถ -มิจฉาวาจา -มิจฉาวายามะ -มิจฉาสติ -มิจฉาสมาธิ -มิจฉาสังกัปปะ -มิจฉาอาชีวะ -มิญช- -มิด -มิดชิด -มิดเม้น -มิดเมี้ยน -มิดหมี -มิดีมิร้าย -มิได้ -มิต- -มิตภาณี -มิตร -มิตร- -มิตรจิต -มิตรจิตมิตรใจ -มิตรภาพ -มิตรสหาย -มิติ -มิถยา -มิถุน -มิถุนายน -มิทธะ -มิทธี -มินตรา -มินตา -มินหม้อ -มิน่า -มิน่าล่ะ -มิน่าเล่า -มิ่ม -มิ้ม -มิยา -มิไย -มิรันตี -มิลลิกรัม -มิลลิบาร์ -มิลลิเมตร -มิลลิลิตร -มิลักขะ -มิลักขู -มิลาต -มิศร- -มิศรก- -มิส- -มิสก- -มิสกรี -มิสกวัน -มิสซา -มิอย่ารา -มิอย่าเลย -มี -มี่ -มีแก่ใจ -มี่ฉาว -มีชื่อ -มีชู้ -มีด -มีดโกน -มีดตอก -มีดยับ -มีดหมอ -มีตาแต่หามีแววไม่ -มีทองเท่าหนวดกุ้ง นอนสะดุ้งจนเรือนไหว -มีเทน -มีน -มีนาคม -มีเฟื้องมีสลึง -มีภาษีกว่า -มีเรือน -มี่สั้ว -มีเสียง -มีหน้า -มีหน้ามีตา -มีฬห- -มีอันจะกิน -มีอันเป็น -มีอายุ -มึก -มึกมวย -มึง -มึงวาพาโวย -มึน -มึนงง -มึนชา -มึนซึม -มึนตึง -มึนเมา -มืด -มืดค่ำ -มืดแปดด้าน -มืดฟ้ามัวดิน -มืดมน -มืดมัว -มืดหน้า -มืน -มื่น -มือ -มื้อ -มือกาว -มือเก่า -มือขวา -มือขึ้น -มือแข็ง -มือดี -มือตก -มือเติบ -มือถือสาก ปากถือศีล -มือที่สาม -มือบอน -มือเบา -มือปืน -มือผี -มือมืด -มือไม่ถึง -มือไม่พาย เอาตีนราน้ำ -มือเย็น -มือร้อน -มือลิง -มือไว -มือสะอาด -มือสั้นตีนสั้น -มือสี -มือเสือ -มือหนัก -มือหนึ่ง -มือห่างตีนห่าง -มือใหม่ -มืออ่อน -มืออ่อนตีนอ่อน -มุ -มุก -มุกดา -มุกดาหาร -มุกุร -มุกุล -มุข -มุข- -มุขกระสัน -มุขเด็จ -มุขบาฐ -มุขมนตรี -มุขย- -มุขยประโยค -มุขลด -มุโขโลกนะ -มุคคะ -มุคธ์ -มุคร -มุง -มุ่ง -มุ้ง -มุ้งกระต่าย -มุ้งประทุน -มุ่งมาด -มุ่งร้ายหมายขวัญ -มุ้งลวด -มุ้งสายบัว -มุ่งหมาย -มุจฉา -มุจน -มุจลินท์ -มุญจนะ -มุญช -มุฐิ -มุณฑ -มุณฑก -มุด -มุดหัว -มุต -มุต- -มุตกิด -มุตฆาต -มุตตะ -มุตตา -มุตติ -มุติ -มุติงค์ -มุทค -มุทคร -มุททา -มุทธชะ -มุทธา -มุทธาภิเษก -มุทรา -มุทริกา -มุทะลุ -มุทา -มุทิกา -มุทิงค์ -มุทิตา -มุทิน -มุทุ -มุทุตา -มุ่น -มุ่นใจ -มุ่นหมก -มุนิ -มุนิกุญชร -มุนินทร์ -มุนี -มุบ -มุบๆ -มุบมิบ -มุม -มุ่ม -มุ้ม -มุมกดลง -มุมก้ม -มุมกลับ -มุมเงย -มุมฉาก -มุมตกกระทบ -มุมตรง -มุมเท -มุมบ่ายเบน -มุมประชิด -มุมป้าน -มุมมืด -มุมยกขึ้น -มุมแย้ง -มุมสะท้อน -มุมหักเห -มุมเห -มุมแหลม -มุ่ย -มุรช -มุรธา -มุรธาภิเษก -มุลุต -มุลู -มุสละ -มุสลิม -มุสะ -มุสา -มุสาวาท -มุสิก -มุหงิด -มุหน่าย -มุหุต -มุฮัมมัด -มูก -มูกมัน -มูกเลือด -มูกหลวง -มูค- -มูเซอ -มูตร -มู่ทู่ -มูน -มูนมอง -มูมมาม -มูรดี -มูรติ -มูรธ- -มูรธา -มูรธาภิเษก -มูล -มูล- -มูลค่า -มูลโค -มูลจิต -มูลฐาน -มูลไถ -มูลนกการเวก -มูลนาย -มูลนิธิ -มูลฝอย -มูลภัณฑ์กันชน -มูละ -มูลา -มูลิกากร -มู่ลี่ -มู่เล่ -มูสัง -มูสิก -มูสิก- -มูสิกทันต์ -มูฬห- -เม -เม็ก -เมกะเฮิรตซ์ -เมขลา -เมฆ -เมฆคลุ้ม -เมฆฉาย -เมฆพัด -เมฆมาก -เมฆา -เมฆินทร์ -เมฆี -เม็ง -เมงอะปา -เม็ด -เม็ดดี -เม็ดพระศก -เม็ดพราย -เม็ดมะยม -เม็ดละมุด -เม็ดเลือด -เม็ดโลหิต -เมตตา -เมตไตรย -เมตร -เมตริก -เมตริกตัน -เมถุน -เมท -เมทนี -เมทนีดล -เมทินี -เมทิลแอลกอฮอล์ -เมโท -เมธ -เมธา -เมธาวี -เมธี -เมน -เม่น -เม้น -เมนเดลีเวียม -เมนทอล -เม่นทะเล -เม้ม -เม้มปาก -เมรย- -เมรัย -เมรุ -เมรุ- -เมรุมาศ -เมรุราช -เมล์ -เมลก -เมล็ด -เมลือง -เมลื่อย -เมลื้อย -เมลื่อยมล้า -เมษ -เมษายน -เมห -เมห์ -เมหน -เมะ -เมา -เม่า -เม้า -เม้าเค้า -เมาดิบ -เมามัน -เมามัว -เมามาย -เมายศ -เมารี -เมาลี -เมาห์ -เมาอำนาจ -เมาะ -เมาะตาโยกัก -เมาะว่า -เมิง -เมิน -เมิล -เมีย -เมียง -เมี่ยง -เมียงม่าย -เมี้ยน -เมียน้อย -เมียหลวง -เมือ -เมื่อ -เมื้อ -เมือก -เมื่อกี้ -เมือง -เมืองขึ้น -เมืองท่า -เมืองท่าปลอดภาษี -เมืองนอก -เมืองหลวง -เมืองออก -เมื่อตะกี้ -เมื่อนั้น -เมือบ -เมื่อพีเนื้อหอม เมื่อผอมเนื้อเหม็น -เมื่อย -เมื่อยปาก -เมื่อเอยก็เมื่อนั้น -เมื่อเอยเมื่อนั้น -แม่ -แม้ -แมก -แมกนีเซียม -แม่กระชังหน้าใหญ่ -แม่กระแชง -แม่กอง -แม่กุญแจ -แม่คุณ -แม่คู่ -แมง -แมงกวาง -แมงกะพรุน -แมงกานิน -แมงกานีส -แมงคาเรือง -แมงช้าง -แมงดา -แมงดาทะเล -แมงปากจอบ -แมงไฟเดือนห้า -แม่งม้าง -แมงมุม -แมงลัก -แม่งาน -แม่เจ้า -แม่เจ้าโว้ย -แม่ซื้อ -แม่ตะงาว -แม่ตาย -แม่เตาไฟ -แม้แต่ -แม่ทัพ -แม่ท่า -แมน -แม่น -แม้น -แม้นเขียน -แม่นม -แม่นยำ -แม่น้ำ -แม่บท -แม่บ้าน -แม่เบี้ย -แม่ปะ -แม่แปรก -แม่พิมพ์ -แม่มด -แม่ม่าย -แม่ม่ายทรงเครื่อง -แม่ม่ายลองไน -แม่ยั่วเมือง -แม่ย่านาง -แม่ยาย -แม่ย้าว -แมร -แม่ร้า -แม่ร้าง -แม่รีแม่แรด -แม่เรือน -แม่แรง -แมลง -แมลงช้าง -แมลงดา -แมลงดำ -แมลงดำหนาม -แมลงทับเล็ก -แมลงปอ -แมลงภู่ -แมลงวัน -แมลงวันทอง -แมลงวันสเปน -แมลงวันหัวเขียว -แมลบ -แม่ลาย -แม่เล้า -แม่เลี้ยง -แมว -แม้ว -แมวเซา -แมวดาว -แมวน้ำ -แมวป่า -แมวมอง -แม่วี -แม่สายบัวแต่งตัวค้าง -แม่สี -แม่สื่อ -แม่หนัก -แม่หยั่วเมือง -แม่เหย้าแม่เรือน -แม่เหล็ก -แม่อยู่หัว -แมะ -โม -โม่ -โม้ -โมก -โมกข- -โมกข์ -โมกขบริสุทธิ์ -โมกโคก -โมกมัน -โมกษ- -โมกษะ -โมกษะพยาน -โมกใหญ่ -โมฆ- -โมฆกรรม -โมฆะ -โมฆีย- -โมฆียกรรม -โมฆียะ -โมง -โม่ง -โมงครุ่ม -โม่งโค่ง -โมจน- -โมทนา -โมน -โมโนแซ็กคาไรด์ -โมไนย -โมมูห์ -โมมูหะ -โมเม -โมเมนต์ -โมร- -โมรกลาป -โมรา -โมรี -โมเรส -โมลิบดีนัม -โมลี -โมเลกุล -โมษ -โมษก -โมษณ -โมเสก -โมเสส -โมห- -โม่ห์ -โมหะ -โมหันธ์ -โมหาคติ -โมโห -ไม่ -ไม้ -ไม้กง -ไมกา -ไม้กากบาท -ไม้กางเขน -ไม่กี่น้ำ -ไม่กี่อัฐ -ไม่กี่อัฐฬส -ไม้ใกล้ฝั่ง -ไม้ขี้ฉ้อ -ไม้ขีดไฟ -ไม่เข้าใครออกใคร -ไม่เข้ายา -ไม้แข็ง -ไม้คมแฝก -ไมครอน -ไม่ค่อย -ไมโครกรัม -ไมโครฟิล์ม -ไมโครโฟน -ไมโครมิเตอร์ -ไมโครเมตร -ไมโครลิตร -ไมโครเวฟ -ไม่ใคร่ -ไม้งามกระรอกเจาะ -ไม้จริง -ไม้จัตวา -ไม้จำปา -ไม่ชอบมาพากล -ไม่เชิง -ไม่ใช่ขี้ไก่ -ไม้ดัด -ไม้ดำ -ไม่ดูดำดูดี -ไม่ดูดำดูแดง -ไม่ดูตาม้าตาเรือ -ไม้เด็ด -ไม้แดง -ไม่ได้เบี้ยออกข้าว -ไม่ได้เบี้ยเอาข้าว -ไม่ได้ศัพท์ -ไม่ได้สิบ -ไมตรี -ไม้ตรี -ไม้ตาย -ไม้ตายขาน -ไม้ตีพริก -ไม่เต็มเต็ง -ไม่เต็มบาท -ไม่เต็มหุน -ไม้ไต่คู้ -ไม่ถูกโรคกัน -ไม้ทัณฑฆาต -ไม่ทัน -ไม้เท้า -ไม้เท้ายายม่อม -ไม้โท -ไม้นวม -ไม้นอกกอ -ไม้นิ้ว -ไม้บรรทัด -ไม้เบื่อไม้เมา -ไม้ป่าเดียวกัน -ไม้เป็น -ไม้ผัด -ไม่พูดพร่ำทำเพลง -ไม้โพ -ไม่ฟังเสียง -ไม้มลาย -ไม้ม้วน -ไม่มีปี่มีกลอง -ไม่มีมูลฝอยหมาไม่ขี้ -ไม่มีวันเสียละ -ไม้มืด -ไม้มือ -ไม้เมตร -ไม้ยมก -ไมยราบ -ไม้ยามักการ -ไม้ยาว -ไม้ร่มนกจับ -ไม่รู้จักเสือเอาเรือเข้ามาจอด ไม่รู้จักมอดเอาไม้เข้ามาวาง -ไม่รู้จักหัวนอนปลายตีน -ไม่รู้อีโหน่อีเหน่ -ไม้เรียว -ไมล์ -ไม่ลงโบสถ์กัน -ไม้ล้มเงาหาย -ไม้ล้มลุก -ไม้ลอย -ไม้เลี้ยง -ไม้ไล่ -ไม้วา -ไม้สอย -ไม้สั้น -ไม้สั้นไม้ยาว -ไม้สามอัน -ไม่สู้ -ไม้สูง -ไม้หน้า -ไม้หมอน -ไม้หมุน -ไม้หลักปักเลน -ไม้หันอากาศ -ไม้หึ่ง -ไม่เห็นน้ำตัดกระบอก ไม่เห็นกระรอกก่งหน้าไม้ -ไม่เหลือบ่ากว่าแรง -ไม้อ่อนดัดง่าย ไม้แก่ดัดยาก -ไม้อัด -ไม้เอก -ไม่เออออห่อหมก -ไม้โอ -ย -ยก -ยกกระบัตร -ยกครู -ยกเครื่อง -ยกเค้า -ยกตนข่มท่าน -ยกตัวขึ้นเหนือลม -ยกทรง -ยกธงขาว -ยกน -ยกนิ้ว -ยกพื้น -ยกฟ้อง -ยกภูเขาออกจากอก -ยกมือ -ยกเมฆ -ยกยอ -ยกย่อง -ยกยอด -ยกยอปอปั้น -ยกเลิก -ยกเว้น -ยกไว้ -ยกหางตัวเอง -ยกใหญ่ -ยง -ยงโย่ -ยชุรเวท -ยติ -ยติภังค์ -ยถากรรม -ยถาภูตญาณ -ย่น -ยนต์ -ยนตร์ -ย่นย่อ -ยม -ยม- -ยมก -ยมกปาฏิหาริย์ -ยมขันธ์ -ยมโดย -ยมทัณฑ์ -ยมทูต -ยมนา -ยมบาล -ยมราช -ยมล -ยมโลก -ยรรยง -ยล -ยว -ยวกสา -ยวง -ยวด -ยวดยง -ยวดยาน -ยวดยิ่ง -ยวน -ยวนยี -ยวบ -ยวบๆ -ยวบยาบ -ย้วย -ยวรยาตร -ยวา -ยวาคุ -ยศ -ยศอย่าง -ยโส -ยอ -ย่อ -ยอก -ยอกย้อน -ย็อกแย็ก -ย็อกแย็กๆ -ยอง -ยองๆ -ย่อง -ย้อง -ย่องกริบ -ย่องเบา -ย่องแย่ง -ยองใย -ยองไย่ -ย่องเหง็ด -ยอด -ยอดจาก -ยอดด้วน -ยอดดี -ยอดน้ำ -ยอดสร้อย -ย่อท้อ -ยอน -ย้อน -ย้อนเนื้อ -ย้อนยอก -ยอบ -ยอบแยบ -ย่อพล -ยอม -ย่อม -ย้อม -ยอมความ -ย้อมใจ -ย้อมแมวขาย -ย่อมเยา -ย่อมุม -ย่อย -ย้อย -ย่อย่น -ย่อยยับ -ย่อแย่ -ย้อแย้ -ยอแสง -ย่อหน้า -ย่อหย่อน -ย่อแหยง -ยะ -ย่ะ -ยะงันจะคับ -ยะยอบ -ยะยัน -ยะยับ -ยะยาน -ยะย้าย -ยะย้าว -ยะแย้ง -ยะหิทา -ยัก -ยักกระสาย -ยักข์ -ยักขินี -ยักท่า -ยักเพรีย -ยักยอก -ยักย้าย -ยักยิ้ม -ยักยี่ยักยัน -ยักยี่ยักเหยา -ยักเยื้อง -ยักแย่ยักยัน -ยักษ์ -ยักษ์ปักหลั่น -ยักษ์มักกะสัน -ยักษิณี -ยักษี -ยักหยาว -ยักหล่ม -ยัง -ยั้ง -ยังกาหลา -ยังชั่ว -ยั่งยืน -ยังแล้ว -ยังหยัง -ยัชโญปวีต -ยัชน -ยัชมาน -ยัญ -ยัญ- -ยัญกรรม -ยัญญะ -ยัญญังค์ -ยัญพิธี -ยัฐิ -ยัฐิมธุกา -ยัด -ยัดเยียด -ยัติภังค์ -ยัน -ยั่น -ยันต์ -ยันตร- -ยันตร์ -ยันตรกรรม -ยั่นตะนี -ยันเย้า -ยับ -ยับๆ -ยับยง -ยับย่อย -ยับยั้ง -ยับยั้งชั่งใจ -ยับยาน -ยับยาบ -ยับเยิน -ยั่ว -ยั้ว -ยั่วยวน -ยั่วเย้า -ยั้วเยี้ย -ยัวรยาตร -ยัษฏิ -ยา -ย่า -ยาก -ยากแค้น -ยากจน -ยากนาน -ยากเย็น -ยากไร้ -ยาเขียว -ยาค -ยาคุ -ยาคู -ยาง -ย่าง -ยางกราด -ย่างตีน -ย่างทราย -ย่างเท้า -ยางน่อง -ยางบอน -ยางพารา -ยางมะตอย -ย่างเยื้อง -ยางลบ -ยางสน -ย่างสามขุม -ยางอาย -ยาจก -ยาจน -ยาจนก -ยาจนา -ยาจืด -ยาใจ -ยาฉุน -ยาไฉน -ยาชก -ยาด -ยาดา -ยาดำ -ยาแดง -ยาตนา -ยาตร -ยาตรา -ยาตั้ง -ย่าทวด -ยาธาตุ -ยาน -ย่าน -ยานก -ย่านกอบนาง -ยานคาง -ย่านซื่อ -ย่านทราย -ย่านนมควาย -ย่านพาโหม -ยานมาศ -ย่านยาว -ย่านลิเภา -ยานัตถุ์ -ย่านาง -ย่านางช้าง -ยานี -ยานุมาศ -ยาบ -ยาบๆ -ยาปน- -ยาปนมัต -ยาฝอย -ยาแฝด -ยาม -ยาม- -ย่าม -ยามกาลิก -ยามเกา -ยามตูดชาย -ยามพาด -ยามโยค -ยามสามตา -ยามักการ -ยามิก -ยาย -ย้าย -ยายทวด -ยายี -ยาเยีย -ยาว -ย้าว -ยาวกาลิก -ยาวชีวิก -ยาวบั่น สั้นต่อ -ยาวรี -ยาวัส -ยาสลบ -ยาสั่ง -ยาสูบ -ยาเส้น -ยาเสพย์ติด -ยาเสพย์ติดให้โทษ -ยาไส้ -ยาหม้อใหญ่ -ยาหมู่ -ยาหยัง -ย่าหยา -ยาหยี -ยาหัด -ยาอัด -ยำ -ย่ำ -ย้ำ -ยำเกรง -ย่ำเทือก -ยำยาม -ย่ำยี -ยำเยง -ยำเยีย -ย่ำแย่ -ย้ำเหยอ -ยิก -ยิกๆ -ยิง -ยิ่ง -ยิงปืนนัดเดียว ได้นกสองตัว -ยิงฟัน -ยิ่งยวด -ยิฏฐะ -ยิฐ -ยิน -ยินแคลน -ยินใจ -ยินดี -ยินมลาก -ยินยอม -ยินร้าย -ยินลากขากดี -ยิบ -ยิบๆ -ยิปซัม -ยิปซี -ยิ้ม -ยิ้มกริ่ม -ยิ้มแฉ่ง -ยิ้มด้วยปาก ถากด้วยตา -ยิมนาสติก -ยิ้มแป้น -ยิ้มย่อง -ยิ้มเยาะ -ยิ้มแย้ม -ยิ้มละไม -ยิ้มหัว -ยิ้มเหย -ยิ้มแห้ง -ยิ้มแหย -ยิหวา -ยี -ยี่ -ยี้ -ยี่ก่า -ยี่เก -ยี่เข่ง -ยี่โถ -ยี่โถฝรั่ง -ยีน -ยี่โป้ -ยี่ภู่ -ยียวน -ยีราฟ -ยี่สก -ยี่สง -ยี่สน -ยี่สาน -ยี่ส่าน -ยี่สิบ -ยี่สุ่น -ยี่หระ -ยี่หร่า -ยี่หร่าหวาน -ยี่ห้อ -ยี่หุบ -ยึกยือ -ยึด -ยึดครอง -ยึดถือ -ยึดทรัพย์ -ยึดเหนี่ยว -ยืด -ยืดยาด -ยืดเยื้อ -ยืดหยุ่น -ยืน -ยื่น -ยืนกระต่ายสามขา -ยืนกราน -ยื่นแก้วให้วานร -ยืนค้ำหัว -ยืนเครื่อง -ยื่นจมูก -ยืนชิงช้า -ยืนต้น -ยืนพื้น -ยื่นมือ -ยืนยง -ยืนยัน -ยืนยาม -ยืนโรง -ยื่นหมูยื่นแมว -ยืนหยัด -ยืม -ยืมจมูกคนอื่นหายใจ -ยืมใช้คงรูป -ยืมใช้สิ้นเปลือง -ยื้อ -ยื้อยุด -ยุ -ยุกกระบัตร -ยุกดิ -ยุกต์ -ยุกติ -ยุกติธรรม -ยุค -ยุคเข็ญ -ยุคนธร -ยุคล -ยุคลบาท -ยุคันต- -ยุคันต์ -ยุคันตวาต -ยุคันธร -ยุคุนธร -ยุง -ยุ่ง -ยุ้ง -ยุงกวาด -ยุ่งขิง -ยุ่งใจ -ยุงปัด -ยุงปัดแม่ม่าย -ยุ่งยาก -ยุ่งยิ่ง -ยุ่งเหมือนยุงตีกัน -ยุ่งเหยิง -ยุด -ยุต -ยุติ- -ยุติธรรม -ยุทธ- -ยุทธ์ -ยุทธการ -ยุทธนา -ยุทธนาการ -ยุทธนาธิการ -ยุทธภัณฑ์ -ยุทธภูมิ -ยุทธโยธา -ยุทธวิธี -ยุทธวินัย -ยุทธศาสตร์ -ยุทธหัตถี -ยุทโธปกรณ์ -ยุบ -ยุบยอบ -ยุบยับ -ยุบยิบ -ยุบล -ยุพ- -ยุพดี -ยุพยง -ยุพเยาว์ -ยุพราช -ยุพราชา -ยุพเรศ -ยุพา -ยุพาน -ยุพาพาล -ยุพาพิน -ยุ่มย่าม -ยุ่ย -ยุ้ย -ยุยง -ยุแยง -ยุแยงตะแคงแซะ -ยุแยงตะแคงรั่ว -ยุรบาตร -ยุรยาตร -ยุว- -ยุวชน -ยุวดี -ยุวราช -ยุวราชา -ยุวา -ยุวาน -ยุหบาตร -ยุแหย่ -ยุให้รำตำให้รั่ว -ยู -ยู่ -ยูง -ยูโด -ยูถะ -ยูถิกา -ยูปะ -ยู่ยี่ -ยูรยาตร -ยูริก -ยูเรนัส -ยูเรเนียม -ยูโรเพียม -ยูษะ -เยๆ -เย้ -เยง -เยซู -เย็ด -เย็น -เย็นใจ -เย็นชืด -เย็นตา -เย็นตาโฟ -เย็นเตาโฟ -เย็นเยียบ -เย็นเยือก -เย็นหู -เย็บ -เย็บกี่ -เย็บด้าย -เย็บลวด -เย็บเล่ม -เย็บอก -เยภุย- -เยภุยนัย -เยภุยยะ -เยภุยสิกา -เย้ย -เยอ -เย่อ -เยอรมัน -เยอว -เย่อหยิ่ง -เยอะ -เยอะแยะ -เยา -เย้า -เยาว- -เยาว์ -เยาวชน -เยาวน- -เยาวนะ -เยาวพา -เยาวพาณี -เยาวพาน -เยาวมาลย์ -เยาวยอด -เยาวราช -เยาวเรศ -เยาวลักษณ์ -เยาะ -เยิง -เยิน -เยิ่น -เยินยอ -เยิ่นเย้อ -เยิบๆ -เยิบยาบ -เยิ้ม -เยีย -เยี่ยง -เยียงผา -เยี่ยงอย่าง -เยียดยัด -เยียใด -เยียน -เยียบ -เยี่ยม -เยี่ยมๆ มองๆ -เยี่ยมยอด -เยี่ยมเยียน -เยี่ยมเยือน -เยี่ยมวิมาน -เยียมั่ง -เยียรบับ -เยียรยง -เยียว -เยี่ยว -เยี่ยวงัว -เยียวยง -เยียวยา -เยี่ยวอูฐ -เยียใหญ่ -เยือ -เยื่อ -เยื้อ -เยือก -เยือกเย็น -เยื่อเคย -เยือง -เยื่อง -เยื้อง -เยื้องกราย -เยื้องยัก -เยือน -เยื้อน -เยื่อใย -แย่ -แย้ -แยก -แยกเขี้ยว -แยกย้าย -แยกแย้ง -แยกแยะ -แยง -แย่ง -แย้ง -แยงยล -แยงแย่ -แยงแย้ -แย่แต้ -แยบ -แย็บ -แยบคาย -แยบยล -แยม -แย้ม -แย้มพราย -แยแส -แยะ -โย -โย้ -โยก -โยกตร์ -โยกย้าย -โยกเยก -โยกโย้ -โยค- -โยคเกณฑ์ -โยคจักษุ -โยคนิทรา -โยคยะ -โยคะ -โยคาพจร -โยคาวจร -โยคิน -โยคี -โยง -โย่ง -โย่งๆ -โย่งเย่ง -โยงโย่ -โยชก -โยชน์ -โยชนา -โยด -โยต -โยถิกะ -โยทะกา -โยธ- -โยธวาทิต -โยธา -โยธิน -โยน -โยนก -โยนกลอง -โยนกลอน -โยนยาว -โยนหลุม -โยนห่วง -โยนหัวโยนก้อย -โยนิโส -โยนิโสมนสิการ -โยนี -โยพนมัท -โยพนะ -โยม -โยเย -โย้เย้ -โยโส -ใย -ใยฟ้า -ใยยอง -ใยหิน -ไย -ไย่ -ไยดี -ไยไพ -ไยไย -ไย่ไย่ -ร -รก -รกชัฏ -รกช้าง -รกบิน -รกฟ้า -รกราก -รกร้าง -รกเรี้ยว -รง -รงกุ์ -รงค- -รงค์ -รงควัตถุ -รงรอง -รจนา -รจเรข -รจเลข -รจิต -รชกะ -รชตะ -รชนิ -รชนี -รชนีกร -รชนีจร -รชะ -รณ -รณ- -รณเกษตร -รณภู -รณภูมิ -รณรงค์ -รณสถาน -รด -รดน้ำ -รดี -รตนะ -รตะ -รติ -รถ -รถ- -รถจักรยาน -รถจักรยานยนต์ -รถฉุกเฉิน -รถโดยสารประจำทาง -รถปุงคพ -รถปุงควะ -รถไฟ -รถไฟฟ้า -รถยนต์ -รถยา -รถานึก -รเถสภะ -รท -รทนะ -รน -ร่น -ร้น -รนด -รนหาที่ -รบ -รบกวน -รบรา -รบเร้า -รบส -รบาญ -รพ -รพา -รพิ -รพี -รม -ร่ม -ร่มเกล้า -ร่มเกศ -ร่มชูชีพ -รมณี -รมณีย- -รมณีย์ -ร่มธง -ร่มผ้า -ร่มโพธิ์ร่มไทร -ร่มไม้ชายคา -รมย์ -ร่มเย็น -รมเยศ -รยะ -รยางค์ -รวก -รวง -ร่วง -รวงผึ้ง -ร่วงรุ้ง -ร่วงโรย -รวด -รวดเดียว -รวดเร็ว -รวน -ร่วน -รวนเร -รวบ -รวบรวม -รวบรัด -รวบหัวรวบหาง -รวม -ร่วม -ร่วมใจ -ร่วมท้อง -ร่วมประเวณี -ร่วมเพศ -ร่วมมือ -ร่วมรัก -ร่วมเรียงเคียงหมอน -ร่วมหอลงโรง -รวมหัว -ร่วมหัวงาน -ร่วมอุทร -รวย -รวยๆ -รวยริน -รวยรื่น -รวะ -รวิ -รวิวาร -รวี -รศนา -รส -รสก -รสชาติ -รสนา -รสนิยม -รสสุคนธ์ -รสายนเวท -รสิก -รหัท -รหัส -รหิต -รโห -รโหคต -รโหฐาน -รอ -ร่อ -รอก -รอง -ร่อง -ร้อง -ร้องขอ -รองคอ -รองเง็ง -รองจ่าย -รองช้ำ -ร้องฎีกา -รองทรง -รองท้อง -ร้องทุกข์ -รองทุน -รองเท้า -ร่องน้ำ -รองบ่อน -รองพื้น -ร้องเพลง -ร่องมด -ร้องโยนยาว -ร่องรอย -รองรัง -ร้องเรียกร้องหา -ร้องเรียน -ร้องเรือ -ร้องแรก -ร่องแร่ง -ร้องส่ง -ร้องห่ม -ร้องห่มร้องไห้ -ร้องไห้ -รอด -รอดชีวิต -รอดตัว -รอดหูรอดตา -รอน -รอนๆ -ร่อน -ร้อน -ร้อนตัว -ร่อนทอง -ร้อนผ้าเหลือง -ร้อนรน -ร่อนร่อน -ร่อนรับร่อนเร่ -ร่อนเร่ -รอนแรม -ร้อนวิชา -รอนสิทธิ์ -ร้อนอาสน์ -รอบ -รอบคอบ -รอบรู้ -รอม -รอมชอม -รอมร่อ -รอย -ร่อย -ร้อย -ร้อยกรอง -ร้อยแก้ว -ร้อยชั่ง -ร้อยทั้งร้อย -ร้อยแปด -รอยร้าว -ร้อยลิ้น -ร้อยลิ้นกะลาวน -ร้อยสีร้อยอย่าง -ร่อยหรอ -ร้อยหวาย -ร้อยหวี -ร้อยเอ็ด -ร้อยเอ็ดเจ็ดหัวเมือง -ร่อแร่ -ระ -ระกะ -ระกา -ระกำ -ระกำนา -ระกำป่า -ระเกะระกะ -ระคน -ระคาง -ระคาย -ระเค็ดระคาย -ระแคะ -ระแคะระคาย -ระฆัง -ระงม -ระงมไพร -ระงับ -ระงับพิษ -ระงี่ -ระแง้ -ระโงกหิน -ระชวย -ระดม -ระดะ -ระดับ -ระดับทะเล -ระดับทะเลปานกลาง -ระดา -ระด่าว -ระดู -ระดูขาว -ระเด่น -ระเดียง -ระแด -ระตู -ระทก -ระทด -ระทม -ระทวย -ระทอด -ระทา -ระทึก -ระทึง -ระแทะ -ระนัม -ระนาด -ระนาดแก้ว -ระนาดทุ้ม -ระนาดเอก -ระนาบ -ระนาบเอียง -ระนาม -ระนาว -ระเนน -ระเนระนาด -ระเนียด -ระแนง -ระแนะ -ระบบ -ระบบสุริยะ -ระบม -ระบอบ -ระบัด -ระบับ -ระบาญ -ระบาด -ระบานี -ระบานี้ -ระบาย -ระบายสี -ระบำ -ระบิ -ระบิล -ระบิลเมือง -ระบือ -ระบุ -ระเบง -ระเบ็ง -ระเบิด -ระเบิดขวด -ระเบิดทำลาย -ระเบิดน้ำตา -ระเบิดปรมาณู -ระเบิดเพลิง -ระเบิดมือ -ระเบิดเวลา -ระเบิดไฮโดรเจน -ระเบียง -ระเบียน -ระเบียบ -ระเบียบการ -ระเบียบวาระ -ระแบบ -ระใบ -ระฟ้า -ระมัดระวัง -ระมา -ระมาด -ระเมียร -ระย่อ -ระย่อม -ระยะ -ระยัง -ระยั้ง -ระยัด -ระยับ -ระย้า -ระยาน -ระยาบ -ระยำ -ระยำตำบอน -ระยิบระยับ -ระโยง -ระโยงระยาง -ระรวย -ระรอง -ระร่อน -ระรัว -ระราน -ระร่าย -ระราว -ระริก -ระรี่ -ระรึง -ระรื่น -ระรื้น -ระเร -ระเร่ -ระเร้ง -ระเร็ว -ระเริง -ระเรียง -ระเรียม -ระเรื่อย -ระแร่ -ระแรง -ระลง -ระลวง -ระลอก -ระลอง -ระลัด -ระลัดได -ระลึก -ระลุก -ระลุง -ระเลิง -ระเลียด -ระวัง -ระวังไพร -ระวังวัน -ระวาง -ระวาดระไว -ระวาม -ระวาย -ระวิง -ระแวง -ระแวดระวัง -ระไว -ระสะเก็ด -ระสาย -ระส่ำระสาย -ระสี -ระเสิดระสัง -ระหกระเหิน -ระหง -ระหวย -ระหว่าง -ระหองระแหง -ระหอบ -ระหัด -ระหาย -ระหุย -ระเห็จ -ระเหย -ระเหระหน -ระเหหน -ระเหหัน -ระเหิด -ระเหินระหก -ระแหก -ระแหง -ระโหย -ระอมระอา -ระอา -ระอิดระอา -ระอุ -รัก -รักข์ -รักขสะ -รักขา -รักขิต -รักดป -รักดะ -รักดีหามจั่ว รักชั่วหามเสา -รักตะ -รักบี้ -รักพี่เสียดายน้อง -รักยม -รักยาวให้บั่น รักสั้นให้ต่อ -รักร้อย -รักเร่ -รักแร้ -รักษ์ -รักษา -รักษาการ -รักษาการณ์ -รักหมู -รัง -รั้ง -รังกา -รังเกียจ -รังแก -รังไข่ -รังค์ -รังควาน -รังแค -รังดุม -รังแตน -รังนก -รังนาน -รังบวบ -รังผึ้ง -รังเพลิง -รังมด -รังรอง -รังรักษ์ -รังเรข -รังแรก -รังวัด -รังสรรค์ -รังสรัง -รังสฤษฏ์ -รังสิ -รังสิมันตุ์ -รังสิมา -รังสี -รังสีความร้อน -รังสีคอสมิก -รังสีแพทย์ -รังสีวิทยา -รังสีเหนือม่วง -รังหยาว -รัจฉา -รัช -รัช- -รัชกะ -รัชกาล -รัชชุ -รัชชูปการ -รัชฎาภิเษก -รัชด- -รัชดาภิเษก -รัชต- -รัชทายาท -รัชนะ -รัชนี -รัชนีกร -รัญจวน -รัฏฐาภิปาลโนบาย -รัฐ -รัฐ- -รัฐทูต -รัฐธรรมนูญ -รัฐบาล -รัฐบุรุษ -รัฐประศาสน์ -รัฐประศาสนนัย -รัฐประศาสนศาสตร์ -รัฐประศาสโนบาย -รัฐประหาร -รัฐมนตรี -รัฐวิสาหกิจ -รัฐศาสตร์ -รัฐสภา -รัด -รัดกุม -รัดเกล้า -รัดเข็มขัด -รัดช้อง -รัดตัว -รัดทึบ -รัดประคด -รัดประคน -รัดพัสตร์ -รัดรึง -รัดรูป -รัต -รัต- -รัตกัมพล -รัตคน -รัตจันทน์ -รัตตัญญู -รัตติ -รัตติกาล -รัตน- -รัตน์ -รัตนโกสินทร์ -รัตนตรัย -รัตนบัลลังก์ -รัตนสิงหาสน์ -รัตนะ -รัตนา -รัตนากร -รัตนาวลี -รัตมณี -รัตมา -รัถ -รัถยา -รัทเทอร์ฟอร์เดียม -รัน -รั้น -รันชนรันแชง -รันทด -รันทวย -รันทำ -รันแทะ -รันธะ -รับ -รับขวัญ -รับแขก -รับคำ -รับจ้าง -รับท้อง -รับประกัน -รับประทาน -รับปาก -รับผิด -รับผิดชอบ -รับมือ -รับรอง -รับเรือน -รับสั่ง -รับหน้า -รับไหว้ -รัมก- -รัมณีย- -รัมภา -รัมมี่ -รัมย์ -รัย -รัว -รั่ว -รั้ว -รั้วไก่ -รัศมิมัต -รัศมิมาน -รัศมี -รัษฎากร -รัส- -รัสสระ -รัสสะ -รา -ร่า -ร้า -ราก -รากแก้ว -รากขวัญ -รากฐาน -รากดิน -รากฝอย -รากฟัน -รากศัพท์ -รากษส -รากโษส -รากสาด -รากสาดน้อย -รากสาดใหญ่ -รากสามสิบ -รากเหง้า -ราข้อ -ราคะ -ราคา -ราคาตลาด -ราคิน -ราคี -ราง -ร่าง -ร้าง -ร่างกาย -รางจืด -รางชาง -รางดำ -รางแดง -รางนาน -รางบรรทัด -ร่างร้าน -รางวัล -ร่างแห -ราช -ราช- -ราชการ -ราชกิจจานุเบกษา -ราชครู -ราชญี -ราชดัด -ราชทัณฑ์ -ราชทินนาม -ราชทูต -ราชโทรหะ -ราชธรรม -ราชธานี -ราชนิกุล -ราชนีติ -ราชบัณฑิต -ราชบาตร -ราชบุตร -ราชบุรุษ -ราชปะแตน -ราชพฤกษ์ -ราชภัฏ -ราชมัล -ราชมาณพ -ราชมาษ -ราชมาส -ราชย์ -ราชยาน -ราชโยค -ราชโยงการ -ราชรถมาเกย -ราชวงศ์ -ราชวรมหาวิหาร -ราชวรวิหาร -ราชวโรงการ -ราชวัติ -ราชศาสตร์ -ราชสกุล -ราชสันตติวงศ์ -ราชสาสน์ -ราชสีห์ -ราชสีห์ตัวผู้ -ราชสีห์ตัวเมีย -ราชสีห์สองตัวอยู่ถ้ำเดียวกันไม่ได้ -ราชสูยะ -ราชหัตถเลขา -ราชองครักษ์ -ราชโองการ -ราชะ -ราชัน -ราชันย์ -ราชัย -ราชา -ราชาคณะ -ราชาโชค -ราชาธิราช -ราชาภิเษก -ราชายตนะ -ราชาฤกษ์ -ราชาวดี -ราชาวลี -ราชาศัพท์ -ราชิ -ราชินิกุล -ราชินี -ราชินีกุล -ราชินีนาถ -ราชินูปถัมภ์ -ราชี -ราชูปถัมภ์ -ราชูปโภค -ราเชน -ราเชนทร์ -ราเชนทรยาน -ราโชงการ -ราโชปถัมภ์ -ราโชปโภค -ราโชวาท -ราไชศวรรย์ -ราญ -ราญรอน -ราด -ราต -ราตร -ราตรี -ราตรีประดับดาว -ราโท -ราน -ร่าน -ร้าน -ร้านม้า -ราบ -ราบคาบ -ราบเป็นหน้ากลอง -ราบรื่น -ราบเรียบ -ราปีก -ราพณ์ -ราพณาสูร -ราม -รามเกียรติ์ -รามสูร -รามัญ -รามา -ราย -ร่าย -ร้าย -ร้ายกาจ -รายการ -รายงาน -รายงานการประชุม -รายจ่าย -รายทาง -ร่ายไม้ -ร่ายรัง -รายรับ -ร้ายแรง -รายวิชา -ร่าเริง -ราเริด -ราแรม -ราว -ร้าว -ราวกะ -ราวกับ -ราวข่าว -ร้าวฉาน -ราวป่า -ร้าวราน -ราวี -ราศี -ราษฎร -ราษฎร์ -ราษตรี -ราษราตริน -ราษราตรี -ราสี -ราหุ -ร่าหุ์ -ราหู -รำ -ร่ำ -รำเขนง -รำคาญ -รำโคม -รำงับ -รำจวน -รำชั่วโทษพากย์ -รำซุย -รำเท้า -รำบาญ -ร่ำไป -รำผี -รำพัด -รำพัดชา -รำพัน -รำพาย -รำพึง -รำเพย -รำแพน -รำไพ -รำมะแข -รำมะนา -รำมะนาด -รำมะร่อ -รำไม่ดีโทษปี่โทษกลอง -รำยวน -รำย้อย -รำแย้ -รำรงค์ -ร่ำรวย -รำราญ -รำรำ -ร่ำรี้ร่ำไร -รำเร -ร่ำเรียน -รำไร -ร่ำไร -รำลึก -รำวง -รำหัด -รำหัส -ร่ำไห้ -ริ -ริก -ริกๆ -ริดสีดวง -ริน -รินๆ -ริ้น -ริบ -ริบทรัพย์สิน -ริบบิ้น -ริบราชบาตร -ริบรี่ -ริบหรี่ -ริปอง -ริปุ -ริปู -ริม -ริมฝีปาก -ริเริ่ม -ริ้ว -ริษยา -ริอ่าน -รี -รี่ -รี้ -รีๆ ขวางๆ -รีด -รีดนาทาเน้น -รีดนาทาเร้น -รีดลูก -รีดักชัน -รีต -รีเนียม -รีบ -รีบรุด -รี้พล -รีม -รีรอ -รีๆ รอๆ -รี้ริก -รึกต์ -รึง -รึ้ง -รื่น -รื้น -รื่นรมย์ -รื่นเริง -รื้อ -รื้อแต่หลังคาเขา หลังคาเราไม่รื้อ -รื้อฟื้น -รุ -รุก -รุกข- -รุกข์ -รุกขกะ -รุกขชาติ -รุกขมูล -รุกขมูลิกธุดงค์ -รุกขา -รุกฆาต -รุกร้น -รุกราน -รุกรุย -รุกษะ -รุข้าว -รุ่ง -รุ้ง -รุ่งเช้า -รุ้งพราย -รุ้งร่วง -รุงรัง -รุ่งเรือง -รุ่งโรจน์ -รุจ -รุจน -รุจา -รุจิ -รุจิระ -รุจิรา -รุจิเรข -รุจี -รุชา -รุด -รุดหน้า -รุต -รุทธ์ -รุทร -รุธิร -รุเธียร -รุน -รุ่น -รุ่นกระทง -รุ่นตะกอ -รุ่นราวคราวเดียวกัน -รุนแรง -รุบรู่ -รุบาการ -รุม -รุ่ม -รุมไข้ -รุมไฟ -รุ่มรวย -รุ่มร่าม -รุย -รุ่ย -รุ่ยร่าย -รุรุ -รุษฏ์ -รุหะ -รุหาญ -รู -รู่ -รู้ -รู้แกว -รู้ความ -รู้คิด -รู้คิดรู้อ่าน -รู้คุณ -รู้งูๆ ปลาๆ -รู้จัก -รู้จักเก็บรู้จักเขี่ย -รู้จักเก็บรู้จักงำ -รู้จักมักคุ้น -รู้จักมักจี่ -รูจี -รู้ฉลาด -รู้เช่นเห็นชาติ -รูด -รู้ตัว -รู้ตื้นลึกหนาบาง -รู้ทัน -รู้ที -รูทีเนียม -รู้เท่า -รู้เท่าไม่ถึงการณ์ -รู้น้อยพลอยรำคาญ -รูบิเดียม -รูป -รูป- -รูปชี -รูปธรรม -รูปพยัญชนะ -รูปพรรณ -รูปภาพ -รูปร่าง -รูปลอก -รูปสมบัติ -รูปสระ -รูปิยะ -รูปี -รู้มลัก -รู้มลาก -รู้มาก -รู้มากยากนาน -รู้ยาวรู้สั้น -รูเล็ตต์ -รู้ไว้ใช่ว่า ใส่บ่าแบกหาม -รู้สึก -รู้ไส้ -รู้หลบเป็นปีก รู้หลีกเป็นหาง -รูหะ -รู้หาญรู้ขลาด -รู้เห็น -รู้เห็นเป็นใจ -รู้อย่างเป็ด -รู้อยู่ -รู้เองเป็นเอง -เร่ -เรข -เรขา -เรขาคณิต -เรขาคณิตบริสุทธิ์ -เรขาคณิตวิเคราะห์ -เร็ง -เร่ง -เร้ง -เร่งมือ -เร่งรัด -เร่งร่าย -เร่งรีบ -เร่งเร้า -เรณุ -เรณุก -เรณู -เรดอน -เรดาร์ -เรเดียม -เร้น -เร้นลับ -เรรวน -เร่ร่อน -เร่ร่าย -เรไร -เร็ว -เร่ว -เรวดี -เรอ -เร่อ -เร่อร่า -เรา -เร่า -เร่าๆ -เร้า -เร่าร้อน -เราะ -เราะราย -เราะร้าย -เริง -เริด -เริม -เริ่ม -เริ้ม -เริศร้าง -เรี่ย -เรี้ยๆ -เรียก -เรียกเนื้อ -เรียง -เรียงๆ -เรียงความ -เรียงพิมพ์ -เรียงพี่เรียงน้อง -เรียงรัน -เรียงราย -เรียงหน้ากระดาน -เรียงหมอน -เรียด -เรียน -เรียนปฏิบัติ -เรียนผูกต้องเรียนแก้ -เรียบ -เรียบๆ -เรียบร้อย -เรียบเรียง -เรียบวุธ -เรียม -เรี่ยม -เรี่ยราด -เรี่ยราย -เรี่ยไร -เรียว -เรี่ยว -เรี้ยวรก -เรี่ยวแรง -เรียวหนาม -เรือ -เรื่อ -เรื้อ -เรือก -เรือกสวน -เรือขนาน -เรือขาดหางเสือ -เรือง -เรื่อง -เรื้อง -เรืองนาม -เรืองรอง -เรื่องราว -เรืองไร -เรื่องสั้น -เรืองอำนาจ -เรือด -เรือดไม้ -เรือน -เรื้อน -เรือนแก้ว -เรือนเครื่องผูก -เรือนเครื่องสับ -เรือนจำ -เรือนตะเกียง -เรือนธาตุ -เรือนเบี้ย -เรือนฝากระดาน -เรือนแฝด -เรือนแพ -เรือนไฟ -เรือนยอด -เรือนหอ -เรือบิน -เรือพ่วง -เรือไฟ -เรื่อย -เรื้อย -เรื่อยเจื้อย -เรื่อยเปื่อย -เรือโยง -เรือรบ -เรื้อรัง -เรือล่มในหนอง ทองจะไปไหน -เรือล่มเมื่อจอด ตาบอดเมื่อแก่ -เรือแหวด -เรือใหญ่คับคลอง -แร -แร่ -แรก -แร็กเกต -แรกนา -แรกนาขวัญ -แรง -แร่ง -แร้ง -แรงงาน -แรงงานและสวัสดิการสังคม -แรงงานสัมพันธ์ -แรงดึงดูด -แรงเทียน -แรงม้า -แร่งริ้ว -แรงสู่ศูนย์กลาง -แรงหนีศูนย์กลาง -แรงเหวี่ยง -แร่งไหม -แรเงา -แรด -แรดตัวผู้ -แรดตัวเมีย -แร้นแค้น -แรม -แรมรอน -แรมรา -แรมโรย -แร้ว -แรเส้น -แระ -โร -โร่ -โรค -โรค- -โรคจิต -โรคจิตเภท -โรคนิทาน -โรคประจำตัว -โรคประสาท -โรคระบบประสาท -โรคศิลปะ -โรคสมอง -โรคา -โรคาพยาธิ -โรคาพาธ -โรง -โรงคัล -โรงงาน -โรงธาร -โรงธารคำนัล -โรงนา -โรงรับจำนำ -โรงเรียน -โรงเรียนประจำ -โรงเรียนสาธิต -โรงเรือน -โรงแรม -โรงแสง -โรจ -โรจน์ -โรเดียม -โรตี -โรตีสายไหม -โรท -โรทนะ -โรธ -โรธร -โรปนะ -โรม -โรมมัย -โรมรัน -โรมัญจ -โรมัน -โรมันคาทอลิก -โรเมอร์ -โรย -โรยขนมจีน -โรยรา -โรยหน้า -โรเร -โรษ -โรษณะ -โรหิณี -โรหิต -ไร -ไร่ -ไร้ -ไรฟัน -ไรย์ -ไรเรือง -ฤ -ฤกษ์ -ฤกษณะ -ฤกษ์บน -ฤกษ์พานาที -ฤกษ์ล่าง -ฤคเวท -ฤชา -ฤชากร -ฤชุ -ฤณ -ฤดี -ฤดียา -ฤดู -ฤดูกาล -ฤต -ฤติยา -ฤตุ -ฤตุสนาน -ฤทธา -ฤทธิ์ -ฤทัย -ฤษภ -ฤษยา -ฤษี -ฤๅ -ฤๅชุ -ฤๅชุตา -ฤๅดี -ฤๅทัย -ฤๅเยา -ฤๅษี -ฤๅษีแปลงสาร -ฤๅษีผสมแล้ว -ฤๅษีเลี้ยงลิง -ฤๅสาย -ล -ลก -ลการ -ลกุจ -ลคุฑ -ลคุฬ -ลฆุ -ลฆุจิต -ลฆุภาพ -ลฆุโภชน์ -ลง -ล่ง -ลงกลอน -ลงกา -ลงขัน -ลงข่าว -ลงแขก -ลงคอ -ลงเงิน -ลงชื่อ -ลงแดง -ลงตัว -ลงทอง -ลงท้อง -ลงท่า -ลงท้าย -ลงทุน -ลงโทษ -ลงนา -ลงเนื้อเห็นด้วย -ลงโบสถ์ -ลงแป้ง -ลงผี -ลงฝัก -ลงพระบังคน -ลงพื้น -ลงพุง -ลงมีด -ลงมือ -ลงยา -ลงรอยกัน -ลงรัก -ลงราก -ลงแรง -ลงโรง -ล้งเล้ง -ลงสรง -ลงหญ้าช้าง -ลงหิน -ลงอาชญา -ลงอาญา -ลงอุโบสถ -ลงเอย -ลด -ลดเขื่อน -ลดราวาศอก -ลดละ -ลดเลี้ยว -ลดเลี้ยวเกี้ยวพา -ลดหย่อน -ลดหลั่น -ลดา -ลดาวัลย์ -ลน -ล่น -ล้น -ล้นเกล้าล้นกระหม่อม -ลนควัน -ล้นพ้น -ลนลาน -ล้นหลาม -ลบ -ลบม -ลบรอย -ลบล้าง -ลบเลือน -ลบโลก -ลบศักราช -ลบหลู่ -ลบเหลี่ยม -ลบอง -ลปก -ลปน -ลพ -ลพุช -ลม -ลมๆ -ล่ม -ล้ม -ลมกรด -ลมขึ้น -ล้มคว่ำ -ลมค้า -ลมงวง -ล่มจม -ลมจับ -ลมแดง -ลมทวนลมค้า -ลมทะเล -ล้มทั้งยืน -ลมบก -ลมบ้าหมู -ลมปราณ -ลมปาก -ลมพัดชายเขา -ลมพัดหลวง -ลมพิษ -ลมเพลมพัด -ล่มฟ้า -ลมไม่ดี -ลมล่อง -ล้มละลาย -ล้มลุก -ล้มลุกคลุกคลาน -ล้มเลิก -ลมแล้ง -ลมๆ แล้งๆ -ลมว่าว -ลมเสีย -ล้มหมอนนอนเสื่อ -ลมาด -ลรรลุง -ลลนา -ลลาฏ -ลลิต -ลวก -ลวง -ล่วง -ล้วง -ล้วงกระเป๋า -ล่วงเกิน -ล่วงขื่อ -ลวงค์ -ล้วงคองูเห่า -ล่วงคำ -ล้วงตับ -ลวงตา -ล่วงประเวณี -ล่วงแป -ล่วงพ้น -ล้วงมือ -ล่วงรู้ -ล่วงลับ -ล่วงล้ำ -ล่วงเลย -ลวงเล้า -ล่วงว่า -ล่วงเวลา -ล้วงไส้ -ล่วงหน้า -ลวณะ -ลวด -ลวดลาย -ลวดสปริง -ลวดหนัง -ลวดหนาม -ล้วน -ล้วนๆ -ลวนลาม -ลวนะ -ล่วม -ลวะ -ลวิตร -ลหุ -ลหุก- -ลหุกะ -ลหุกาบัติ -ลหุโทษ -ล่อ -ล้อ -ลอก -ล็อกเกต -ลอกคราบ -ลอกท้องร่อง -ลอกเลน -ลอกแลก -ลอการิทึม -ลอง -ล่อง -ลองกอง -ล่องแก่ง -ล่องจวน -ลองจิจูด -ลองใจ -ล่องชาด -ลองเชิง -ลองดี -ล่องถุน -ลองธรรม์ -ลองใน -ลองไน -ลองภูมิ -ล่องแมว -ล่องหน -ลอด -ลอดช่อง -ลอน -ล่อน -ล่อนแก่น -ล่อนจ้อน -ลอนทอง -ลอบ -ลอบกัด -ลอม -ล้อม -ลอมชอม -ล้อมปรวด -ลอมพอก -ล้อมวง -ลอย -ลอยๆ -ล่อยๆ -ลอยกระทง -ลอยแก้ว -ลอยคอ -ลอยช้อน -ลอยชาย -ลอยดอก -ลอยตัว -ลอยนวล -ลอยบาป -ลอยแพ -ลอยฟ้า -ลอยเมฆ -ลอยลำ -ลอยหน้า -ล่อลวง -ล้อเลียน -ล้อเลื่อน -ล่อแล่ -ลอว์เรนเซียม -ล่อหลอก -ล้อหลอก -ล่อแหลม -ลออ -ละ -ล่ะ -ละกล -ละกูมะนิส -ละขัดละขืน -ละคร -ละครยก -ละคิ -ละคึก -ละงาด -ละงิด -ละติจูด -ละทิ้ง -ละบม -ละบอง -ละบองไฟ -ละบองราหู -ละบัด -ละบือ -ละเบ็ง -ละโบม -ละม่อม -ละมั่ง -ละมา -ละมาน -ละม้าย -ละมุ -ละมุด -ละมุน -ละมุนละไม -ละเม็ด -ละเมอ -ละเมาะ -ละเมิด -ละเมิดลิขสิทธิ์ -ละเมิน -ละเมียด -ละเมียบ -ละแมะ -ละโมก -ละโมบ -ละไม -ละรี -ละลด -ละลนละลาน -ละลมละลาย -ละลวย -ละลอก -ละลอบละเล้า -ละลัง -ละลัด -ละล้า -ละลาน -ละลาบละล้วง -ละลาย -ละล้าละลัง -ละล้าว -ละล่ำละลัก -ละลิบ -ละลุง -ละลุม -ละเลง -ละเลงขนมเบื้องด้วยปาก -ละเลย -ละเล้า -ละเลาะ -ละเลาะละลอง -ละเลิง -ละเลียด -ละเลียบ -ละเลือก -ละไล้ -ละวล -ละว้อ -ละว้า -ละวาง -ละวาด -ละเวง -ละเว้น -ละแวก -ละโว้ -ละหมาด -ละหมาดญานาซะฮ์ -ละหลัด -ละห้อย -ละหาน -ละหุ่ง -ละเหย -ละเหี่ย -ละองละมั่ง -ละออง -ละอาย -ละเอียด -ละเอียดลออ -ละแอน -ลัก -ลักไก่ -ลักขณะ -ลักขณา -ลักขะ -ลักขี -ลักเค้า -ลักจั่น -ลักปิดลักเปิด -ลักพา -ลักเพศ -ลักยิ้ม -ลักลอบ -ลักลั่น -ลักลาย -ลักเลียม -ลักศพ -ลักษณ- -ลักษณนาม -ลักษณะ -ลักษณาการ -ลักษมณ์ -ลักษมาณา -ลักษมี -ลักษะ -ลักสร้อย -ลักสี -ลักหลับ -ลัคคะ -ลัคน- -ลัคน์ -ลัคนา -ลัง -ลั่ง -ลังกา -ลังคิ -ลังคี -ลังถึง -ลังลอง -ลังเล -ลังสาด -ลัชชา -ลัชชี -ลัญจ์ -ลัญจกร -ลัญฉ -ลัญฉกร -ลัญฉน์ -ลัฐิ -ลัฐิกา -ลัด -ลัดนิ้วมือ -ลัดเนื้อ -ลัดเลาะ -ลัดแลง -ลัดวงจร -ลัดา -ลัทธ์ -ลัทธิ -ลัน -ลั่น -ลั่นกุญแจ -ลั่นไก -ลั่นฆ้อง -ลั่นดาล -ลันเต -ลันเตา -ลันไต -ลั่นถัน -ลั่นทม -ลันทวย -ลันโทม -ลั่นนก -ลั่นปาก -ลั่นวาจา -ลับ -ลับตา -ลับปาก -ลับฝีปาก -ลับลมคมใน -ลับล่อ -ลับๆ ล่อๆ -ลับลี้ -ลับแล -ลับสมอง -ลับหลัง -ลับหู -ลัพธ์ -ลัพธิ -ลัภ -ลัภนะ -ลัภย์ -ลัมพ์ -ลัย -ลัย- -ลัยกาล -ลัยคต -ลา -ล่า -ล้า -ลาก -ลากข้าง -ลากษา -ลากเส้น -ลากหนามจุกช่อง -ลาขา -ลาข้าวพระ -ลาง -ล่าง -ล้าง -ลางคัล -ล้างแค้น -ลางงิด -ล้างท้อง -ลางที -ลางเนื้อชอบลางยา -ล้างปาก -ล้างป่าช้า -ล้างผลาญ -ล้างไพ่ -ล้างมือ -ลางลิง -ล้างโลก -ล้างสมอง -ลางสาด -ล้างอาย -ลางาด -ล้างาด -ลาเง็ด -ลาช -ลาชา -ลาญ -ลาญทัก -ลาด -ลาดเขา -ลาดตระเวน -ลาดทวีป -ลาดเท -ลาดพระบาท -ลาดยาง -ลาดเลา -ล้าต้า -ลาตาย -ล่าเตียง -ล้าเตียง -ลาน -ล่าน -ล้าน -ลาบ -ลาป -ลาพรรษา -ลาพอน -ลาพุ -ลาพุช -ลาเพ -ลาเพา -ลาภ -ลาภมิควรได้ -ลาม -ล่าม -ลามก -ลามปาม -ลามลวน -ลาย -ล้าย -ลายขัด -ลายคราม -ลายตา -ลายเทศ -ลายแทง -ลายน้ำ -ลายน้ำทอง -ลายพระหัตถ์ -ลายพาดกลอน -ลายมือ -ลายมือชื่อ -ลายไม้ -ลายลักษณ์ -ลายสอ -ลายสอง -ลายสาบ -ลายสือ -ลายอย่าง -ลายฮ่อ -ลาโรง -ลาลนะ -ลาลส -ลาลา -ลาโลก -ลาว -ลาวก -ลาวัณย์ -ลาวา -ลาสนะ -ล้าสมัย -ลาสิกขา -ล้าหลัง -ลำ -ล่ำ -ล้ำ -ลำกระโดง -ลำกล้อง -ลำเข็ญ -ลำแข -ลำแข้ง -ลำเค็ญ -ลำเคือง -ลำงาด -ลำเจียก -ลำเจียกหนู -ลำดวน -ลำดับ -ลำตัด -ลำธาร -ลำนัก -ลำนำ -ลำเนา -ลำบอง -ลำบาก -ลำบุ -ลำปำ -ลำพวน -ลำพอง -ลำพัง -ลำพู -ลำพู่กัน -ลำเพ็ญ -ลำเพา -ลำแพง -ลำแพน -ลำโพง -ลำไพ่ -ลำภุขัน -ลำมะลอก -ลำมาด -ลำมาบ -ลำเมาะ -ลำเมียบ -ลำยอง -ลำยา -ลำไย -ลำลอง -ล่ำลา -ลำลาบ -ลำลำ -ลำลึก -ลำเลาะ -ลำเลิก -ล้ำเลิศ -ลำเลียง -ลำเลียบ -ลำเวียง -ลำเวียน -ล่ำสัน -ลำเสา -ลำไส้ -ลำหนัก -ล้ำหน้า -ลำห้วย -ลำหักลำโค่น -ลำอุด -ลำเอียก -ลำเอียง -ลำโอง -ลิ -ลิกขา -ลิกไนต์ -ลิกษา -ลิกุจ -ลิเก -ลิขนะ -ลิขสิทธิ์ -ลิขิต -ลิง -ลิงค์ -ลิงจุ่น -ลิงชิงหลัก -ลิงตกต้นไม้ -ลิงลม -ลิงโลด -ลิงหลอกเจ้า -ลิด -ลิดตีนปู -ลิดรอน -ลิต -ลิตมัส -ลิตร -ลิเทียม -ลิ่น -ลิ้น -ลิ้นกระด้างคางแข็ง -ลิ้นกระบือ -ลินโกรย -ลิ้นไก่ -ลิ้นควาย -ลิ้นงูเห่า -ลินจง -ลิ้นจะกวด -ลิ้นจี่ -ลิ้นชัก -ลิ่นต้น -ลิ้นตวัดถึงหู -ลิ้นตะกวด -ลิ้นทอง -ลิ่นทะเล -ลิ้นทะเล -ลิ้นปี่ -ลิ้นมังกร -ลิ้นไม่มีกระดูก -ลิ้นลม -ลิ้นลังกา -ลินลา -ลินลากระทุ่ม -ลินลากระบี่ -ลิ้นลาย -ลินสีด -ลิ้นเสือ -ลิ้นหมา -ลิ่นฮื้อ -ลินิน -ลิบ -ลิบลับ -ลิบลิ่ว -ลิปดา -ลิปต์ -ลิปสติก -ลิปิ -ลิปิกร -ลิปิการ -ลิฟต์ -ลิเภา -ลิ่ม -ลิ้ม -ลิมป์ -ลิมปนะ -ลิลิต -ลิว -ลิ่ว -ลิสง -ลี -ลี่ -ลี้ -ลีซอ -ลีบ -ลี้ลับ -ลีลา -ลีลากระทุ่ม -ลีลาศ -ลีฬหา -ลึก -ลึกซึ้ง -ลึกลับ -ลึกล้ำ -ลึงค์ -ลึงค์นายพราน -ลืด -ลื่น -ลื้น -ลืบ -ลืม -ลืมตน -ลืมต้น -ลืมตัว -ลืมตา -ลือ -ลื่อ -ลื้อ -ลือชา -ลือชาปรากฏ -ลื่อชื่อ -ลือสาย -ลุ -ลุก -ลุกลน -ลุกลาม -ลุกลี้ลุกลน -ลุกฮือ -ลุแก่โทษ -ลุแก่อำนาจ -ลุง -ลุ้ง -ลุต -ลุท -ลุทกะ -ลุทธ์ -ลุ่น -ลุ่นๆ -ลุ่นตุ้น -ลุ่นโตง -ลุปต์ -ลุพธ์ -ลุพธกะ -ลุ่ม -ลุ่มๆ ดอนๆ -ลุ่มน้ำ -ลุ่มเนื้อ -ลุมป์ -ลุมพี -ลุมพู -ลุ่มเล้า -ลุ่มหลง -ลุย -ลุ่ย -ลุ้ย -ลุ่ยหู -ลุล่วง -ลุลาย -ลุสา -ลุอำนาจ -ลู่ -ลูก -ลูกกก -ลูกกรง -ลูกกรอก -ลูกกระเดือก -ลูกกระพรวน -ลูกกระแอม -ลูกกลอน -ลูกกลิ้ง -ลูกกวาด -ลูกกะโล่ -ลูกกะแอ -ลูกกัลปพฤกษ์ -ลูกแก้ว -ลูกโกลน -ลูกไก่ -ลูกไก่อยู่ในกำมือ -ลูกขวัญ -ลูกขัด -ลูกข่าง -ลูกข้าว -ลูกขุน -ลูกขุน ณ ศาลหลวง -ลูกขุน ณ ศาลา -ลูกขุนพลอยพยัก -ลูกเขย -ลูกเขยตายแม่ยายชักปรก -ลูกเขยตายแม่ยายทำศพ -ลูกครอก -ลูกครึ่ง -ลูกคลัก -ลูกความ -ลูกคอ -ลูกคอก -ลูกคัน -ลูกค้า -ลูกคำ -ลูกคิด -ลูกเคล้า -ลูกฆ้อง -ลูกจ๊อก -ลูกจ้าง -ลูกเจี๊ยบ -ลูกช่วง -ลูกช้าง -ลูกชิด -ลูกชิ้น -ลูกโซ่ -ลูกดอก -ลูกดิ่ง -ลูกโดด -ลูกตั้ง -ลูกตุ้ม -ลูกเต้า -ลูกเต๋า -ลูกแตก -ลูกถ้วย -ลูกเถื่อน -ลูกแถว -ลูกทอย -ลูกท่านหลานเธอ -ลูกทุ่ง -ลูกเธอ -ลูกน้อง -ลูกนา -ลูกน้ำ -ลูกนิมิต -ลูกบท -ลูกบวบ -ลูกบ้าน -ลูกบาศก์ -ลูกบิด -ลูกบุญธรรม -ลูกเบี้ยว -ลูกประคบ -ลูกประคำ -ลูกประคำผี -ลูกประสม -ลูกประสัก -ลูกประหล่ำ -ลูกปราย -ลูกปละ -ลูกปลา -ลูกปะกน -ลูกปัด -ลูกปา -ลูกป่า -ลูกปืน -ลูกปืนใหญ่ -ลูกแป -ลูกโป่ง -ลูกโป่งสวรรค์ -ลูกผสม -ลูกผักชี -ลูกผีลูกคน -ลูกผู้ชาย -ลูกผู้น้อง -ลูกผู้พี่ -ลูกผู้หญิง -ลูกไผ่ -ลูกฝาแฝด -ลูกแฝด -ลูกพรวน -ลูกพริก -ลูกพลู -ลูกพี่ -ลูกพี่ลูกน้อง -ลูกฟัก -ลูกฟูก -ลูกไฟ -ลูกมโหตร -ลูกมะหวด -ลูกมาด -ลูกมือ -ลูกโม่ -ลูกไม้ -ลูกไม้หล่นไม่ไกลต้น -ลูกยอ -ลูกย่าง -ลูกยาเธอ -ลูกโยน -ลูกรอก -ลูกระมาศ -ลูกรัง -ลูกรุ่ย -ลูกเรือ -ลูกลม -ลูกล้อ -ลูกล่า -ลูกเล่น -ลูกเลี้ยง -ลูกแล่ง -ลูกโลก -ลูกไล่ -ลูกวัด -ลูกศิษย์ -ลูกสมภารหลานเจ้าวัด -ลูกสมุน -ลูกสวรรค์ -ลูกสวาท -ลูกสะบ้า -ลูกสะใภ้ -ลูกสังกะสี -ลูกสูบ -ลูกเสือ -ลูกหนี้ -ลูกหนู -ลูกหมด -ลูกหม้อ -ลูกหมาก -ลูกหมู่ -ลูกหลง -ลูกหลวง -ลูกหาบ -ลูกหิน -ลูกหินบด -ลูกหีบ -ลูกเห็บ -ลูกแห -ลูกแหง่ -ลูกอม -ลูกเอ็น -ลูกเอ็ล -ลูขะ -ลูตา -ลูติกา -ลู่ทาง -ลูทีเชียม -ลูนะ -ลูบ -ลูบคม -ลูบคลำ -ลูบตัว -ลูบไล้ -ลูบหน้าปะจมูก -ลู่หลี่ -เลก -เล็ก -เล็กดา -เล็กน้อย -เล็กพริกขี้หนู -เลกวัด -เลข -เลขกะ -เลขคณิต -เลขจำนวน -เลขชี้กำลัง -เลขโดด -เลขนะ -เลขผา -เลขยะ -เลขยันต์ -เลขลำดับ -เลขหมาย -เลขา -เลขาธิการ -เลขานุการ -เล็ง -เล้ง -เล็งลัคน์ -เล่งฮื้อ -เลเซอร์ -เลฑฑุ -เลณ -เลณฑุ -เล็ด -เล็ดลอด -เลต -เลน -เล็น -เล่น -เล่นกล -เล่นกับไฟ -เล่นขายของ -เล่นคำ -เล่นงาน -เลนจง -เล่นชู้ -เล่นตลก -เล่นตัว -เล่นเบี้ย -เล่นพวก -เล่นพิเรนทร์ -เล่นเพลงยาว -เล่นเพื่อน -เล่นแร่แปรธาตุ -เล่นลิ้น -เลนส์ -เลนส์ตีบแสง -เลนส์ถ่างแสง -เลนส์นูน -เล่นสวาท -เลนส์เว้า -เลนส์สัมผัส -เล่นสำนวน -เลนหะรี -เล่นหัว -เล่นหาง -เล่นหูเล่นตา -เล่นเอาเถิดเจ้าล่อ -เล็บ -เล็บครุฑ -เล็บควาย -เลบง -เล็บนาง -เล็บมือนาง -เล็บเหยี่ยว -เลป- -เลปกร -เลปน์ -เลเป -เลเพ -เลเพลาดพาด -เล็ม -เล่ม -เล็มล่า -เลย -เลยตามเลย -เลยเถิด -เลว -เลวง -เลวูโลส -เลศ -เลษฏุ -เลห -เล่ห์ -เล่ห์กระเท่ห์ -เลหยะ -เลหลัง -เลหลา -เล่ห์เหลี่ยม -เลหะ -เลอ -เล่อ -เลอมาน -เล่อล่า -เลอะ -เลอะเทอะ -เละ -เละเทะ -เลา -เลาๆ -เล่า -เล้า -เลากัย -เล่าเรียน -เล่าลือ -เล้าโลม -เลาะ -เลิก -เลิกล้ม -เลิ่กลั่ก -เลิ้ง -เลินเล่อ -เลิศ -เลีย -เลียง -เลี่ยง -เลี้ยง -เลียงขาว -เลี้ยงแขก -เลี้ยงช้างกินขี้ช้าง -เลี้ยงดู -เลี้ยงต้อย -เลี้ยงโต๊ะ -เลี้ยงปากเลี้ยงท้อง -เลียงผา -เลียงฝ้าย -เลียงมัน -เลี้ยงรับ -เลี้ยงลา -เลี้ยงลูกเสือลูกจระเข้ -เลี้ยงส่ง -เลียน -เลี่ยน -เลียนไฟ -เลียบ -เลียบค่าย -เลียบเคียง -เลียบเมือง -เลียม -เลี่ยม -เลียว -เลี้ยว -เลี้ยวลด -เลือก -เลือกตั้ง -เลือกที่รักมักที่ชัง -เลือกนักมักได้แร่ -เลือกสรร -เลือง -เลื่อง -เลื่องลือ -เลือด -เลือดขึ้นหน้า -เลือดเข้าตา -เลือดเนื้อ -เลือดเนื้อเชื้อไข -เลือดในอก -เลือดฝาด -เลือดไม้ -เลือดเย็น -เลือดร้อน -เลือดล้างหน้า -เลือดอุ่น -เลือน -เลื่อน -เลื่อนที่ -เลื่อนเปื้อน -เลื่อนลอย -เลื่อม -เลื่อมใส -เลื่อย -เลื้อย -เลื้อยคลาน -เลื้อยเจื้อย -เลื่อยล้า -แล -แล่ -แล้ -แลก -แล็กโทส -แลกเปลี่ยน -แลง -แล่ง -แล้ง -แลงกินฟัน -แล่งพระราม -แลน -แล่น -แลนทานัม -แลบ -แล้ว -แล้วกัน -แล้วด้วย -แล้วแต่ -แล้วไป -แล้ว...เล่า -แล้วๆ เล่าๆ -และ -และเล็ม -และเลียม -โล่ -โล้ -โลก -โลก- -โลกเชษฐ์ -โลกธรรม -โลกธาดา -โลกธาตุ -โลกนาถ -โลกบาล -โลกย์ -โลกยะ -โลกวัชชะ -โลกวิทู -โลกสถิติ -โลกอุดร -โลกัตถจริยา -โลกันตร์ -โลกัย -โลกา -โลกาธิบดี -โลกาธิปไตย -โลกานุวัตร -โลกาภิวัตน์ -โลกามิส -โลกายัต -โลกาวินาศ -โลกิยะ -โลกีย์ -โลกียวัตร -โลกุตรธรรม -โลกุตระ -โลเกศ -โลง -โล่ง -โล้ง -โล้งโต้ง -โล่งโถง -โลจนะ -โลณะ -โลด -โลดเต้น -โลดทะนง -โลดโผน -โลดแล่น -โล่ติ๊น -โลโต -โลท -โลน -โล้น -โลปะ -โลภ -โลภโมโทสัน -โลม -โลมชาติ -โลมเล้า -โลมะ -โลมา -โลล -โลลุป -โลเล -โล้เล้ -โลโล -โลโล้ -โลห- -โลหกุมภี -โลหะ -โลหะเจือ -โลหัช -โลหิต -ไล่ -ไล้ -ไล่ช้าง -ไล่ที่ทำวัง -ไล่น้ำ -ไล่เบี้ย -ไลย -ไลลา -ไล่ลูกฆ้อง -ไลเลย -ไล่เลี่ย -ไล่เลียง -ไลไล้ -ไล่ออก -ฦ -ฦๅ -ฦๅชา -ฦๅสาย -ว -วก -วกะ -วกุล -วง -วงก์ -วงกต -วงกบ -วงกลม -วงการ -วงเงิน -วงจร -วงจรปิด -วงจรเปิด -วงเดือน -วงนอก -วงใน -วงพาด -วงรี -วงเล็บ -วงวัง -วงเวียน -วงศ- -วงศ์ -วงศกร -วงศ์วาน -วงศา -วงศาคณาญาติ -วงษ์ -วงแหวน -วจนะ -วจะ -วจา -วจี -วจีกรรม -วจีเภท -วชะ -วชิร- -วชิรปาณี -วชิรหัตถ์ -วชิระ -วชิราวุธ -วฏะ -วฏาการ -วฏุมะ -วณ- -วณบัตร -วณพันธน์ -วณะ -วณิช -วณิชชา -วณิชชากร -วณิชย์ -วณิชยา -วณิพก -วดี -วต- -วตะ -วทนะ -วทะ -วทัญญุตา -วทัญญู -วทานิย- -วธ- -วธก- -วธุกา -วธู -วน -วนจร -วนจรก -วนภู -วนภูมิ -วนเวียน -วนศาสตร์ -วนสณฑ์ -วนสัณฑ์ -วนอุทยาน -วนัปติ -วนัส -วนัส- -วนัสบดี -วนา -วนาดอน -วนานต์ -วนาลัย -วนาลี -วนาวาส -วนาศรม -วนาสณฑ์ -วนาสัณฑ์ -วนิดา -วนิพก -วเนจร -วโนทยาน -วปนะ -วปุ -วยัคฆ์ -วยัญชนะ -วยัมหะ -วยัสย์ -วยากรณ์ -วยาฆร์ -วยาธิ -วยาม -วยายาม -วร- -วรงค์ -วรณะ -วรดนู -วรท -วรทาน -วรมหาวิหาร -วรรค -วรรคย์ -วรรช -วรรชย์ -วรรณ- -วรรณกรรม -วรรณคดี -วรรณนา -วรรณพฤติ -วรรณยุกต์ -วรรณยุต -วรรณศิลป์ -วรรณะ -วรรณึก -วรรธก -วรรธนะ -วรรษ -วรรษา -วรวิหาร -วรัญญู -วรากะ -วรางคณา -วราห์ -วราหะ -วรุณ -วรุตดม -วรุตมะ -วรูถ -วโรดม -วโรตมะ -วฤก -วฤษภ -วฤษล -วลัช -วลัญช์ -วลัญชน์ -วลัย -วลาหก -วลี -วศค -วศะ -วศิน -วสนะ -วสภะ -วสละ -วสลี -วสวัดดี -วสวัตตี -วสะ -วสันต- -วสันต์ -วสันตดิลก -วสันตวิษุวัต -วสา -วสี -วสุ -วสุธา -วสุนธรา -วสุมดี -วหะ -วหา -วอ -วอก -วอกแวก -ว่อง -ว่องไว -วอด -วอดวาย -วอน -ว่อน -วอลเลย์บอล -วอแว -วะ -วัก -วักกะ -วัค -วัคคิย -วัคคีย์ -วัคคุ -วัคคุวัท -วัคซีน -วัง -วังก์ -วังชา -วังช้าง -วังวน -วังเวง -วังศะ -วังสะ -วังหน้า -วังหลวง -วังหลัง -วัจ- -วัจกุฎี -วัจจะ -วัจฉ์ -วัจฉก -วัจฉละ -วัจน์ -วัจมรรค -วัช -วัช- -วัชชะ -วัชฌ์ -วัชพืช -วัชร- -วัชรธาตุมณฑล -วัชรปาณี -วัชรยาน -วัชรอาสน์ -วัชระ -วัชราสน์ -วัชรินทร์ -วัชรี -วัชเรนทร์ -วัญจก -วัญจนะ -วัญฌ์ -วัฏ- -วัฏกะ -วัฏจักร -วัฏฏะ -วัฏฏิ -วัฏทุกข์ -วัฏสงสาร -วัฒกะ -วัฒกี -วัฒน- -วัฒนธรรม -วัฒนะ -วัฒนา -วัณ -วัณ- -วัณฏ์ -วัณณะ -วัณนา -วัณโรค -วัด -วัดแดด -วัดผล -วัดพื้น -วัดรอยตีน -วัดรอยเท้า -วัดราษฎร์ -วัดวา -วัดวาอาราม -วัดหลวง -วัดเหวี่ยง -วัต -วัตต์ -วัตตา -วัตถ์ -วัตถาภรณ์ -วัตถาลังการ -วัตถุ -วัตถุดิบ -วัตถุนิยม -วัตถุวิสัย -วัตนะ -วัตร -วัตร- -วัตรปฏิบัติ -วัตสดร -วัตสะ -วัติ -วัทน์ -วัน -วันโกน -วันแข็ง -วันครู -วันจม -วันดับ -วันดีคืนดี -วันต์ -วันตัว -วันเถลิงศก -วันทน- -วันทนา -วันทนาการ -วันทนีย์ -วันทย- -วันทยหัตถ์ -วันทยาวุธ -วันทา -วันทิ -วันนิพก -วันเนา -วันพระ -วันพระไม่มีหนเดียว -วันเพ็ญ -วันฟู -วันยังค่ำ -วันลอย -วันแล้ววันเล่า -วันสุกดิบ -วันอุโบสถ -วับ -วับๆ -วับวาบ -วับวาม -วับแวบ -วับแวม -วับๆ หวำๆ -วัปปะ -วัมมิก -วัย -วัย- -วัยรุ่น -วัยวุฒิ -วัลก์ -วัลคุ -วัลย์ -วัลลภ -วัลลี -วัว -วัวใครเข้าคอกคนนั้น -วัวตัวผู้ -วัวตัวเมีย -วัวทะเล -วัวพันหลัก -วัวลืมตีน -วัวสันหลังหวะ -วัวหายล้อมคอก -วัส- -วัสคณนา -วัสดุ -วัสตร์ -วัสน์ -วัสนะ -วัสสะ -วัสสานะ -วัสโสทก -วา -ว่า -ว้า -วาก -ว้าก -วากจิรพัสตร์ -วากย- -วากยสัมพันธ์ -วากยะ -วากรา -ว่ากล่าว -วากะ -ว่าการ -ว่าขาน -ว่าความ -วาง -ว่าง -ว้าง -วางก้าม -วางข้อ -วางไข่ -ว่างงาน -วางเงิน -วางใจ -วางตลาด -วางตัว -วางตา -วางโต -วางท่า -วางปุ่ม -วางเพลิง -วางมวย -วางมาด -วางมือ -วางยา -วางวาย -ว่างเว้น -ว้างเวิ้ง -วางอำนาจ -ว่าง่าย -วาจก -วาจา -ว่าจ้าง -วาจาไปยะ -วาจาล -วาชเปยะ -วาฏกะ -วาณิช -วาณิชกะ -วาณิชย์ -วาณี -วาด -วาดเขียน -วาต- -วาตปานะ -วาตภัย -วาตะ -ว่าต่าง -วาตารางเหลี่ยม -ว่าแต่เขาอิเหนาเป็นเอง -วาท -วาท- -วาทก -วาทน -วาทย- -วาทย์ -วาทยกร -วาทศาสตร์ -วาทศิลป์ -วาทิต -วาทิน -วาที -ว่าที่ -วาน -ว่าน -ว่านกีบม้า -ว่านกีบแรด -ว่านเครือ -วานซืน -ว่านธรณีสาร -ว่านนางกวัก -ว่านนางล้อม -ว่านน้ำ -ว่านเพชรหึง -ว่านมหาเมฆ -ว่านมีดยับ -วานร -วานรินทร์ -ว่านเสน่ห์จันทร์ขาว -ว่านเสน่ห์จันทร์แดง -ว่านหางช้าง -ว่านอนสอนง่าย -วาเนเดียม -วาบ -วาบหวาม -วาปะ -วาปิตะ -วาปี -วาม -วามน- -วามนาวตาร -วามแวม -วามะ -วามาจาร -วาโมร -ว่าไม่ได้ -วาย -ว่าย -ว้าย -วายชนม์ -วายชีวิต -ว่ายตา -ว่ายน้ำหาจระเข้ -วายปราณ -วายร้าย -วายวอด -วายสะ -วายสังขาร -วายะ -ว่ายาก -วายามะ -วายุ -วายุกูล -วายุบุตรยาตรา -วายุภักษ์ -วาโย -วาโยธาตุ -วาร -วารณ- -วารณกร -วารวาริ -วารสาร -วารสารศาสตร์ -วาระ -วาริ -วาริจร -วาริช -วาริท -วาริธร -วาริพินทุ -วารี -วารีช -วารุณ -วารุณี -วาล -วาล- -วาลกัมพล -วาลธิ -วาล์ว -วาลวีชนี -วาลิกา -วาลุกา -วาว -ว่าว -ว่าวติดลม -วาววับ -วาววาม -วาวแวว -ว่าวเหลิง -ว่าวอน -ว้าว่อน -ว้าวุ่น -วาสนะ -วาสนา -วาสพ -วาสะ -ว่าสาดเสียเทเสีย -วาสิน -วาสี -วาสุกรี -วาสุกี -วาสุเทพ -วาหนะ -วาหะ -วาหินี -ว้าเหว่ -วาฬ -วาฬ- -วาฬมิค -วิ -วิกขัมภ์ -วิกขัมภนะ -วิกเขป -วิกจะ -วิกรม -วิกรัย -วิกรานต์ -วิกฤต -วิกฤต- -วิกฤตการณ์ -วิกฤตกาล -วิกฤติ -วิกฤติ- -วิกฤติการณ์ -วิกฤติกาล -วิกล -วิกลจริต -วิกสิต -วิกัต -วิกัติ -วิกัติการก -วิกัป -วิกัย -วิการ -วิกาล -วิกาล- -วิกาลโภชน์ -วิคหะ -วิเคราะห์ -วิฆนะ -วิฆเนศ -วิฆเนศวร -วิฆาต -วิฆาส -วิง -วิ่ง -วิ่งกระโดดข้ามรั้ว -วิ่งข้ามรั้ว -วิ่งงัว -วิ่งเต้น -วิ่งเปี้ยว -วิ่งผลัด -วิ่งม้า -วิ่งรอก -วิ่งระแบง -วิ่งราว -วิงวอน -วิ่งวัว -วิ่งว่าว -วิ่งวิบาก -วิงเวียน -วิ่งสามขา -วิจฉิกะ -วิจยุต -วิจรณะ -วิจล -วิจักขณ์ -วิจักษณ์ -วิจัย -วิจาร -วิจารณ- -วิจารณ์ -วิจารณญาณ -วิจิ -วิจิกิจฉา -วิจิต -วิจิตร -วิจิตรพิสดาร -วิจิน -วิจุณ -วิจุรณ -วิชชา -วิชชุ -วิชชุดา -วิชชุตา -วิชชุลดา -วิชญะ -วิชน -วิชนี -วิชย- -วิชัย -วิชา -วิชาการ -วิชาชีพ -วิชาโท -วิชาธร -วิชานนะ -วิชาเอก -วิชิต -วิเชียร -วิญญัตติ -วิญญาณ -วิญญาณกทรัพย์ -วิญญู -วิญญูชน -วิญญูภาพ -วิฑูรย์ -วิณหุ -วิด -วิดพื้น -วิดัสดี -วิตก -วิตก- -วิตกจริต -วิตถาร -วิตามิน -วิถี -วิทธะ -วิทย- -วิทยฐานะ -วิทยา -วิทยากร -วิทยากล -วิทยาเขต -วิทยาคม -วิทยาคาร -วิทยาทาน -วิทยาธร -วิทยานิพนธ์ -วิทยาลัย -วิทยาศาสตร์ -วิทยาศาสตร์กายภาพ -วิทยาศาสตร์ชีวภาพ -วิทยาศาสตร์เทคโนโลยีและสิ่งแวดล้อม -วิทยาศาสตร์ประยุกต์ -วิทยุ -วิทยุต -วิทรุมะ -วิทวัส -วิทัตถิ -วิทารณ์ -วิทาลน์ -วิทิต -วิทู -วิทูร -วิเทวษ -วิเทศ -วิเทศสัมพันธ์ -วิเทโศบาย -วิธ -วิธวา -วิธา -วิธาน -วิธี -วิธุระ -วิธู -วิธูปนะ -วิ่น -วินย- -วินันตู -วินัย -วินัยธร -วินาที -วินายก -วินาศ -วินาศ- -วินาศกรรม -วินาศภัย -วินิจ -วินิจฉัย -วินิต -วินิบาต -วินิปาติก -วิเนต -วิโนทก -วิบัติ -วิบาก -วิบุล -วิบุลย์ -วิบูล -วิบูลย์ -วิปการ -วิปฏิสาร -วิปโยค -วิประการ -วิประติสาร -วิประโยค -วิประลาป -วิประวาส -วิปริต -วิปลาป -วิปลาส -วิปวาส -วิปักษ์ -วิปัสสก -วิปัสสนา -วิพากษ์ -วิพากษ์วิจารณ์ -วิพิธทัศนา -วิพุธ -วิภว- -วิภวตัณหา -วิภังค์ -วิภัช -วิภัช- -วิภัชพยากรณ์ -วิภัชวาที -วิภัตติ -วิภา -วิภาค -วิภาช -วิภาดา -วิภาวี -วิภาษ -วิภาส -วิภู -วิภูษณะ -วิภูษา -วิภูษิต -วิเภตก์ -วิเภทก์ -วิมน -วิมล -วิมลัก -วิมลาก -วิมังสา -วิมัติ -วิมาน -วิมุข -วิมุต -วิมุตติ -วิเมลือง -วิโมกข์ -วิเยน -วิโยค -วิร- -วิรงรอง -วิรตะ -วิรมณะ -วิรวะ -วิระ -วิรังรอง -วิรัช -วิรัต -วิรัติ -วิราคะ -วิราม -วิราวะ -วิริยภาพ -วิริยะ -วิรุธ -วิรุฬห์ -วิรุฬหก -วิรูป -วิรูปักษ์ -วิเรนทร์ -วิโรค -วิโรจ -วิโรจน์ -วิโรฒ -วิโรธ -วิโรธน์ -วิลย- -วิลันดา -วิลัย -วิลาด -วิลาป -วิลาวัณย์ -วิลาศ -วิลาส -วิลาสินี -วิลิปดา -วิเลป -วิเลป- -วิเลปนะ -วิโลก -วิโลกนะ -วิโลจนะ -วิโลม -วิไล -วิไลวรรณ -วิวรณ์ -วิวรรธน์ -วิวระ -วิวัฏ -วิวัฒน- -วิวัฒน์ -วิวัฒนาการ -วิวัน -วิวาท -วิวาห- -วิวาห์ -วิวาหะ -วิวิจ -วิวิต -วิวิธ -วิเวก -วิศรุต -วิศว- -วิศวกร -วิศวกรรม -วิศวกรรมศาสตร์ -วิศัลย์ -วิศาข- -วิศาขบูชา -วิศาขะ -วิศาขา -วิศางค์ -วิศาล -วิศิษฏ์ -วิศุทธ์ -วิศุทธิ์ -วิเศษ -วิเศษณ- -วิเศษณ์ -วิเศษณการก -วิษณุ -วิษณุกรรม -วิษณุโลก -วิษณุเวท -วิษธร -วิษักต์ -วิษัย -วิษาณ -วิษุวัต -วิสกี้ -วิสม- -วิสย- -วิสรรชนีย์ -วิสฤต -วิสสุกรรม -วิสัชนา -วิสัญญี -วิสัญญีแพทย์ -วิสัญญีวิทยา -วิสัย -วิสาข- -วิสาขบูชา -วิสาขะ -วิสาขา -วิสามัญ -วิสามัญฆาตกรรม -วิสามานยนาม -วิสาร -วิสารท -วิสาล -วิสาสะ -วิสาหกิจ -วิสิฐ -วิสุงคามสีมา -วิสุทธ์ -วิสุทธิ์ -วิสูตร -วิเสท -วิหค -วิหงค์ -วิหลั่น -วิหายสะ -วิหาร -วิหาร- -วิหารแกลบ -วิหารคด -วิหารทิศ -วิหารธรรม -วิหารยอด -วิหารหลวง -วิหิงสะ -วิหิงสา -วิเหสา -วิฬังค์ -วิฬาร -วิฬาร์ -วี -วีจิ -วีชนี -วีณา -วี้ด -วีต- -วีร- -วีรกรรม -วีรชน -วีรบุรุษ -วีรสตรี -วี่วัน -วี่แวว -วีสะ -วุ้ง -วุฐิ -วุฒ -วุฒิ -วุฒิ- -วุฒิบัตร -วุฒิสภา -วุฒิสมาชิก -วุด -วุ่น -วุ้น -วุ้นชา -วุ่นเป็นจุลกฐิน -วุ่นวาย -วุ้นเส้น -วุบ -วุ้ย -วุลแฟรม -วู้ -วูดวาด -วูบ -วูบวาบ -วู่วาม -เว้ -เวค -เวคิน -เวคี -เวจ -เวจ- -เวจกุฎี -เวจมรรค -เวช -เวช- -เวชกรรม -เวชภัณฑ์ -เวชยันต์ -เวชศาสตร์ -เวฐน์ -เวณะ -เวณิ -เวณิก -เวณุ -เวณุวัน -เวตน์ -เวตร -เวตาล -เวท -เวท- -เวทคู -เวทนา -เวทมนตร์ -เวทย์ -เวทางค์ -เวทางคศาสตร์ -เวทานต์ -เวทานตะ -เวทิ -เวที -เวธะ -เวน -เว้น -เวนคืนอสังหาริมทรัพย์ -เว้นแต่ -เวนไตย -เวไนย -เวมะ -เวมัต -เวมัติก- -เวมาติก -เว้ย -เวร -เวรมณี -เวรี -เวโรจน์ -เวลา -เวเลนซี -เววัณ -เววัณณิยะ -เวศม์ -เวศย์ -เวศยา -เวสน์ -เวสภู -เวสม์ -เวสมะ -เวสวัณ -เวสสะ -เวสสันดร -เวสสุกรรม -เวสสุวัณ -เวสารัช -เวสิ -เวสิยา -เวหน -เวหะ -เวหังค์ -เวหัปติ -เวหา -เวหายส -เวหาส -เวฬุ -เวฬุการ -เวฬุริย -เวฬุวัน -เว่อ -เว้า -เว้าวอน -เวิก -เวิ้ง -เวิ้งว้าง -เวี่ย -เวียง -เวียน -เวียนเทียน -เวียนหัว -เวียร -เวี่ยว -แว้ -แวง -แว้ง -แว้งกัด -แวด -แวดล้อม -แวดวง -แวตร -แวน -แว่น -แว่นขยาย -แวนดา -แว่นตา -แว่นฟ้า -แว่นไว -แวบ -แวบๆ -แวบวับ -แวม -แวว -แว่ว -แวววาม -แวววาว -แวววิเชียร -แวะ -โว -โว่ -โวการ -โว่ง -โวทาน -โว้ย -โวยวาย -โว้เว้ -โวสาน -โวหาร -ไว -ไว้ -ไวกูณฐ์ -ไว้ใจ -ไวฑูรย์ -ไว้ตัว -ไวทย์ -ไว้ทุกข์ -ไว้ธุระ -ไว้เนื้อเชื่อใจ -ไวพจน์ -ไวไฟ -ไว้ยศ -ไวยากรณ์ -ไวยาวัจกร -ไวยาวัจมัย -ไว้ลาย -ไววรรณ -ไวษณพ -ไว้หน้า -ไว้อาลัย -ไวโอลิน -ศ -ศก -ศกฏ -ศกล -ศกุน -ศกุนต์ -ศกุนิ -ศกุนี -ศงกา -ศจี -ศฐ -ศดก -ศต -ศต- -ศตก -ศตบาท -ศตปที -ศตพรรษ -ศตภิษัช -ศตวรรษ -ศตสังวัตสร์ -ศตัฆนี -ศนิ -ศนิวาร -ศพ -ศพล -ศม -ศมน -ศย -ศยนะ -ศยาม -ศยามล -ศร -ศรนารายณ์ -ศรภ -ศรมณะ -ศรรกรา -ศรวณะ -ศรวณีย์ -ศรวิษฐา -ศรศิลป์ไม่กินกัน -ศระวณ -ศรัณย์ -ศรัณยู -ศรัถนะ -ศรัท -ศรัทธา -ศรัย -ศราทธ- -ศราทธ์ -ศราทธพรต -ศราพ -ศราพก -ศรายุธ -ศราวก -ศราวณะ -ศราวรณ์ -ศราสน์ -ศรี -ศรีตรัง -ศรีสังคีต -ศรุต -ศรุติ -ศฤคาล -ศฤงค์ -ศฤงคาร -ศฤงคาริน -ศฤงคารี -ศลภ -ศลัถ -ศลิษฏ์ -ศลิษา -ศว -ศวศุร -ศวัส -ศวัสน -ศวา -ศวาน -ศวาส -ศศ- -ศศธร -ศศพินทุ์ -ศศลักษณ์ -ศศะ -ศศิ -ศศิกษัย -ศศิขัณฑ์ -ศศิเคราะห์ -ศศิธร -ศศิน -ศศิมณฑล -ศศิวิมล -ศศี -ศสา -ศอ -ศอก -ศอกกลับ -ศอกกำ -ศอกกำมา -ศอกคู้ -ศอกตูม -ศักดา -ศักดิ -ศักดิ์ -ศักดินา -ศักดิ์ศรี -ศักดิ์สิทธิ์ -ศักติ -ศักย- -ศักย์ -ศักยภาพ -ศักยะ -ศักร- -ศักรภพน์ -ศักราช -ศักรินทร์ -ศักเรนทร์ -ศังกร -ศังกา -ศังกุ -ศัตรู -ศัทธนะ -ศันสนะ -ศันสนีย์ -ศัพท- -ศัพท์ -ศัพทมูลวิทยา -ศัยยา -ศัล -ศัลก -ศัลกี -ศัลย- -ศัลยกรรม -ศัลยแพทย์ -ศัลยศาสตร์ -ศัสดร -ศัสตร- -ศัสตรกรรม -ศัสตรการ -ศัสตรศาสตร์ -ศัสตรา -ศัสย -ศาก -ศาก- -ศากตะ -ศากภักษ์ -ศากย- -ศากยเกตุ -ศากยพุทธ -ศากยมุนี -ศากยะ -ศาฎก -ศาฐยะ -ศาณ -ศาต -ศานต- -ศานต์ -ศานตรส -ศานติ -ศานติก- -ศานติโหม -ศาป -ศาป- -ศาปมุกติ์ -ศาปานต์ -ศาพร -ศารท -ศารทวิษุวัต -ศารทูล -ศาริกา -ศาล -ศาลกงสุล -ศาลแขวง -ศาลคดีเด็กและเยาวชน -ศาลจังหวัด -ศาลชั้นต้น -ศาลฎีกา -ศาลเตี้ย -ศาลทหาร -ศาลปกครอง -ศาลโปริสภา -ศาลเพียงตา -ศาลแพ่ง -ศาลยุติธรรม -ศาลเยาวชนและครอบครัว -ศาลโลก -ศาลสถิตยุติธรรม -ศาลสูง -ศาลสูงสุด -ศาลอาญา -ศาลอุทธรณ์ -ศาลอุทธรณ์ภาค -ศาลา -ศาลาประชาคม -ศาลาราย -ศาลาสรง -ศาศวัต -ศาสก -ศาสดา -ศาสตร- -ศาสตร์ -ศาสตรา -ศาสตราจารย์ -ศาสน- -ศาสน์ -ศาสนจักร -ศาสนา -ศาสนีย- -ศาสนีย์ -ศาสนูปถัมภก -ศิกษก -ศิการ -ศิขร -ศิขริน -ศิขรี -ศิขัณฑ์ -ศิขา -ศิคาล -ศิงขร -ศิงขริน -ศิต -ศิถี -ศิพิระ -ศิร- -ศิรประภา -ศิระ -ศิรา -ศิรามพุช -ศิโรรัตน์ -ศิโรราบ -ศิโรเวฐน์ -ศิลป- -ศิลป์ -ศิลปกร -ศิลปกรรม -ศิลปการ -ศิลปกิจ -ศิลปวิทยา -ศิลปศาสตร์ -ศิลปะ -ศิลปิน -ศิลปี -ศิลา -ศิลาฤกษ์ -ศิลาแลง -ศิว- -ศิวโมกข์ -ศิวลึงค์ -ศิวเวท -ศิวะ -ศิศีระ -ศิศุ -ศิษฎิ -ศิษฏ์ -ศิษย์ -ศิษย์มีครู -ศีขร -ศีขริน -ศีขรี -ศีต- -ศีตกาล -ศีตล -ศีรษะ -ศีรษะกระบือ -ศีรษะโค -ศีรษะช้าง -ศีรษะเนื้อ -ศีล -ศีลจุ่ม -ศีลธรรม -ศีลมหาสนิท -ศีลล้างบาป -ศีลวัต -ศีลอด -ศึก -ศึกษา -ศึกษาธิการ -ศึกษานิเทศก์ -ศึกหน้านาง -ศุกร- -ศุกร์ -ศุกรวรรณ -ศุกล- -ศุกลปักษ์ -ศุกลัม -ศุกะ -ศุจิ -ศุจิกรรม -ศุทธ -ศุทธิ -ศุน -ศุนัก -ศุนิ -ศุภ- -ศุภกร -ศุภเคราะห์ -ศุภนิมิต -ศุภมัสดุ -ศุภมาตรา -ศุภมาส -ศุภร- -ศุภอักษร -ศุภางค์ -ศุลก- -ศุลกากร -ศุลการักษ์ -ศุลี -ศุษิร -ศูกร -ศูทร -ศูนย- -ศูนย์ -ศูนย์การค้า -ศูนย์ชุมชน -ศูนย์พ่าห์ -ศูนยภาพ -ศูนย์เยาวชน -ศูนยวาท -ศูนย์สัมบูรณ์ -ศูนย์สูตร -ศูล -ศูลิน -เศรณี -เศรษฐ- -เศรษฐ์ -เศรษฐกิจ -เศรษฐศาสตร์ -เศรษฐี -เศร้า -เศร้าหมอง -เศลษ -เศวดงค์ -เศวดีภ -เศวต -เศวต- -เศวตงค์ -เศวตฉัตร -เศวตร -เศวตัมพร -เศวติภ -เศวตีภ -เศวเตภ -เศวาล -เศษ -เศษเกิน -เศษซ้อน -เศษส่วน -เศษสิบ -เศาจ- -เศาไจย -เศาร์ -เศารยะ -เศิก -เศียร -โศก -โศก- -โศกนาฏกรรม -โศกศัลย์ -โศกา -โศกาดูร -โศกาลัย -โศกี -โศจนะ -โศจนียะ -โศจิ -โศถะ -โศธนะ -โศผะ -โศภ -โศภน -โศภา -โศภิต -โศภิน -โศภิษฐ์ -โศภี -โศรณิ -โศรณี -โศรดา -โศรตร -โศลก -ไศล -ไศล- -ไศวะ -ษ -ษมา -ษมายุมแปลง -ษัฏ -ษัฏกะ -ษัฑ -ษัณ -ษัษ -ษัษฏี -ษัษฐ -ษัษฐี -โษฑศ -โษฑศัน -ส -สก- -สกฏ- -สกฏภาร -สกฏะ -สกทาคามิผล -สกทาคามิมรรค -สกทาคามี -สกนธ์ -สกปรก -สกรณีย์ -สกรรจ์ -สกรรมกริยา -สกล -สกล- -สกลมหาสังฆปริณายก -สกลโลก -สกวาที -สกัด -สกัดแคร่ -สกา -สกาว -สกิทาคามี -สกี -สกีน้ำ -สกุณ -สกุณา -สกุณี -สกุน -สกุนต์ -สกุล -สกุลรุนชาติ -สเกต -สเกตน้ำแข็ง -สแกนเดียม -สขะ -สขา -สขิ -สง -ส่ง -สงกร -สงกรานต์ -ส่งกลิ่น -สงกา -สงโกจ -ส่งข่าว -สงค์ -สงคร -สงคราม -สงครามกลางเมือง -สงครามเย็น -สงครามโลก -สงเคราะห์ -สงฆ์ -ส่งดอก -ส่งเดช -ส่งตัว -ส่งท้าย -สงบ -สงบเสงี่ยม -ส่งภาษา -ส่งลำ -สงวน -สงเษป -ส่งสการ -สงสัย -สงสาร -สงสาร- -สงสารทุกข์ -สงสารวัฏ -ส่งเสริม -ส่งเสีย -ส่งเสียง -สงัด -สง่า -สฐ -สณฑ์ -สด -สดก -สดคาว -สดชื่น -สดน -สดมภ์ -สดๆ ร้อนๆ -สดใส -สดัน -สดับ -สดับตรับฟัง -สดับปกรณ์ -สดำ -สดี -สดุดี -สดูป -สต -สตก -สตน -สตภิสชะ -สตมาหะ -สตรอนเชียม -สตริกนิน -สตรี -สตรีลิงค์ -สตรีลึงค์ -สตัน -สตันย์ -สตัพธ์ -สตัฟฟ์ -สตัมภ์ -สตางค์ -สติ -สติปัญญา -สติปัฏฐาน -สติวินัย -สติสัมปชัญญะ -สตี -สตู -สตูป -สถน -สถบดี -สถล -สถล- -สถลทิน -สถลบถ -สถลมารค -สถวิร- -สถวีร- -สถวีระ -สถาน -สถานการณ์ -สถานภาพ -สถานะ -สถานี -สถาบก -สถาบัน -สถาปนา -สถาปนิก -สถาปนียพยากรณ์ -สถาปนียวาที -สถาปัตยกรรม -สถาปัตยกรรมศาสตร์ -สถาพร -สถาล -สถาวร -สถิต -สถิตยศาสตร์ -สถิติ -สถิติศาสตร์ -สถิร- -สถุล -สถูป -สทึง -สทุม -สธน -สธุสะ -สน -ส้น -สนใจ -สนเดก -สนตะพาย -ส้นตีน -สนทนา -สนทรรศ -สนทรรศน์ -สนทิศ -สนเทศ -สนเท่ห์ -สนธยา -สนธิ -สนธิสัญญา -สนธิอลงกต -สนนราคา -สนแผง -สนม -สนมเอก -สนวน -สนหางสิงห์ -สนอง -สนองไข -สนองได -สนองโอษฐ์ -สนอบ -สนอม -สนะ -สนัด -สนัดใจ -สนั่น -สนับ -สนับแข้ง -สนับงา -สนับทึบ -สนับนิ้วมือ -สนับเพลา -สนับมือ -สนับสนุน -สนาดก -สนาน -สนาบก -สนาบัน -สนาม -สนามเพลาะ -สนามหลวง -สนายุ -สนิก -สนิท -สนิทสนม -สนิธ -สนิม -สนิมสร้อย -สนุก -สนุกเกอร์ -สนุกสนาน -สนุข -สนุต -สนุ่น -สบ -สบง -สบจ -สบถ -สบประมาท -สบสังวาส -สบเสีย -สบัน -สบาย -สบู่ -สบู่เลือด -สไบ -สไบเฉียง -สไบนาง -สปริง -สปาเกตตี -สเปกตรัม -สเปกโทรสโคป -สไปริลลัม -สพั้น -สพาบ -สภา -สภากาชาด -สภาค -สภาจาร -สภานายก -สภาบดี -สภาพ -สภาพธรรม -สภาว- -สภาวการณ์ -สภาวะ -สม -ส้ม -สมการ -สมการเคมี -ส้มกุ้ง -สมคบ -สมควร -สมคะเน -สมจร -สมจริง -สมจารี -ส้มชื่น -ส้มเช้า -สมญา -สมเญศ -สมณ- -สมณบริขาร -สมณโวหาร -สมณศักดิ์ -สมณสารูป -สมณสาสน์ -สมณะ -สมดุล -สมเด็จ -สมเด็จพระสังฆราช -ส้มตำ -สมถ- -สมถยานิก -สมถวิปัสสนา -สมถะ -สมทบ -ส้มทับ -สมนอก -สมนัย -สมนาคุณ -สมน้ำสมเนื้อ -สมน้ำหน้า -สมใน -สมบัติ -สมบัตินักเลง -สมบัติผู้ดี -สมบุกสมบัน -สมบุญ -สมบูรณ์ -สมบูรณาญาสิทธิราชย์ -สมประกอบ -สมประดี -สมปฤดี -สมปฤๅดี -ส้มป่อย -สมปัก -สมผุส -ส้มแผ่น -สมพง -สมพงศ์ -สมพรปาก -สมพล -สมพัตสร -สมพาส -สมเพช -สมโพธน์ -สมโพธิ -ส้มฟัก -สมภพ -สมภาร -สมโภค -สมโภช -สมมต -สมมติ -สมมติ- -สมมติฐาน -ส้มมะขาม -สมมาตร -ส้มมือ -สมมุติ -สมมุติ- -สมมุติฐาน -สมมูล -สมมูลเคมี -สมโมท -สมยอม -สมโยค -สมร -สมร- -สมรด -สมรภูมิ -สมรรถ -สมรรถ- -สมรรถนะ -สมรรถภาพ -สมรส -สมรู้ -สมฤดี -สมฤติ -สมฤๅดี -ส้มลิ้ม -สมวัย -สมวายะ -สมสัก -ส้มสันดาน -สมสู่ -สมเสร็จ -ส้มเสี้ยว -สมหน้าสมตา -สมเหตุสมผล -สมอ -สมอกานน -สมอง -สมองตาย -สมองฝ่อ -สมอจีน -สมอทะเล -สมอสำเภา -สมอ้าง -สมัค -สมัคร -สมัครพรรคพวก -สมัครสมา -สมัครสมาน -สมังคี -สมัช -สมัชชา -สมัญญา -สมัต -สมัน -สมันต์ -สมัย -สมัยเก่า -สมัยใหม่ -สมา -สมาคม -สมาจาร -สมาชิก -สมาทาน -สมาธิ -สมาน- -สมานคติ -สมานฉันท์ -สมานสังวาส -สมาบัติ -สมาพันธรัฐ -สมาส -สม่ำเสมอ -สมิง -สมิงทอง -สมิงพราย -สมิงมิ่งชาย -สมิต -สมิติ -สมิทธ์ -สมิทธิ -สมี -สมีป -สมีร -สมุก -สมุจจัย -สมุจเฉท -สมุจเฉท- -สมุจเฉทปหาน -สมุฏฐาน -สมุด -สมุดไทย -สมุดปูมเดินทาง -สมุตถาน -สมุทร -สมุทร- -สมุทรโคดม -สมุทรโจร -สมุทรศาสตร์ -สมุทรเสนา -สมุทัย -สมุน -สมุนไพร -สมุลแว้ง -สมุห- -สมุห์ -สมุหกลาโหม -สมุหเทศาภิบาล -สมุหนาม -สมุหนายก -สมุหประธาน -สมุหพระกลาโหม -สโมธาน -สโมสร -สโมสรสันนิบาต -สยด -สยดสยอง -สยดแสยง -สยนะ -สยบ -สยมพร -สยมภู -สยอง -สยอน -สยัมพร -สยัมวรา -สยาม -สยาม- -สยามรัฐ -สยาย -สยิว -สยิ้ว -สยุ่น -สยุมพร -สยุมภู -สร -สรก -สรง -สร่ง -สรฏะ -สรณ- -สรณคมน์ -สรณตรัย -สรณะ -สรณาคมน์ -สรดัก -สรดึ่น -สรดื่น -สรตะ -สรตัก -สรทะ -สรทึง -สรแทบ -สรนุก -สรเนาะ -สรไน -สรบ -สรบบ -สรบับ -สรพ -สรเพชญ -สรภะ -สรภัญญะ -สรภู -สรม -สรร -สรรค์ -สรรพ -สรรพ- -สรรพคราส -สรรพคุณ -สรรพนาม -สรรพสามิต -สรรพัชญ -สรรพากร -สรรพางค์ -สรรเพชญ -สรรเพชุดา -สรรเพชุดาญาณ -สรรวง -สรรเสริญ -สรรแสร้ง -สรลน -สรลม -สรลมสลวน -สรลอด -สรลอน -สรละ -สรล้าย -สรลิด -สรเลข -สรวง -สรวงเส -สรวป -สรวม -สรวมชีพ -สรวล -สรวลเส -สรวลเสเฮฮา -สรเสริญ -สร้อย -สร้อยทอง -สร้อยทะแย -สร้อยนกเขา -สร้อยน้ำผึ้ง -สร้อยระย้า -สร้อยเศร้า -สร้อยสน -สร้อยอ่อน -สร้อยอินทนิล -สระ -สระกอ -สระคราญ -สระดะ -สระท้อน -สระพรั่ง -สระอาด -สระอื้น -สรั่ง -สรัสวดี -สร่าง -สร้าง -สร้างวิมานในอากาศ -สร้างสรรค์ -สราญ -สร้าวเสียว -สริต -สรี้ -สรีร- -สรีรกิจ -สรีรธาตุ -สรีรวิทยา -สรีรศาสตร์ -สรีระ -สรีรังคาร -สรีรางคาร -สรีสฤบ -สรุก -สรุกเกรา -สรุง -สรุโนก -สรุป -สรุสระ -สรูป -สโรช -สฤก -สฤคาล -สฤต -สฤษฎี -สฤษฏ์ -สล -สลด -สลบ -สลบไสล -สลบเหมือด -สลวน -สลวย -สลอด -สลอน -สลอย -สละ -สละสลวย -สลัก -สลักเกลียว -สลักเต้ -สลักเพชร -สลักสำคัญ -สลักเสลา -สลักหลัง -สลัด -สลัดได -สลับ -สลับฉาก -สลัว -สลา -สลาก -สลากกินแบ่ง -สลากกินรวบ -สลากภัต -สลาง -สล้าง -สลาด -สลาตัน -สลาบ -สลาย -สลาเหิน -สลิด -สลิล -สลึก -สลึง -สลุต -สลุบ -สลุมพร -สแลง -สว- -สวก -สวกรรม -สวการย์ -ส้วง -สวด -สวน -ส่วน -ส่วนกลาง -สวนควัน -สวนความ -ส่วนได้ส่วนเสีย -ส่วนตัว -ส่วนท้องถิ่น -สวนแทง -ส่วนประกอบ -สวนปากสวนคำ -ส่วนผสม -ส่วนภูมิภาค -ส่วนรวม -ส่วนลด -สวนสนาม -ส่วนสัด -ส่วนหน้า -ส่วนหลัง -สวนะ -สวนาการ -สวนิต -สวนีย- -สวบ -สวภาพ -สวม -ส้วม -สวมกอด -สวมรอย -สวมหัวโขน -สวย -ส่วย -ส้วย -สวยแต่รูป จูบไม่หอม -สวยม -สวยมพร -สวยมภู -ส้วยเสี้ยว -สวร -สวรรค- -สวรรค์ -สวรรคต -สวรรคบดี -สวรรค์อยู่ในอก นรกอยู่ในใจ -สวรรคาลัย -สวรรยา -สวราชย์ -สวะ -สวัสดิ์ -สวัสดิการ -สวัสดี -สวัสติ -สวัสติกะ -สวา -สวาคต -สวาง -สว่าง -สว่างไสว -สวาด -สวาดิ -สวาตี -สวาท -สว่าน -สว้าน -สวาบ -สวาปาม -สวามิ -สวามินี -สวามิภักดิ์ -สวามี -สวาย -สวายสอ -สวาสดิ์ -สวาหะ -สวิง -สวิงสวาย -สวิญญาณกทรัพย์ -สวิตช์ -สสาร -สสาร- -สสารนิยม -สสุระ -สสุรี -สห- -สหกรณ์ -สหการ -สหจร -สหชาต -สหชาติ -สหธรรม -สหธรรมิก -สหบาน -สหประชาชาติ -สหพันธ์ -สหพันธรัฐ -สหภาพ -สหภาพแรงงาน -สหศึกษา -สหัช -สหัมบดี -สหัส- -สหัสธารา -สหัสนัยน์ -สหัสเนตร -สหัสรังสี -สหัสสะ -สหัสา -สหาย -สอ -ส่อ -สอง -ส่อง -ส้อง -สองเกลอ -สองจิตสองใจ -สองใจ -สองต่อสอง -สองผม -สองฝักสองฝ่าย -สองไม้ -สองฤดู -สองสลึงเฟื้อง -สองหน้า -สอด -สอดคล้อง -สอดแคล้ว -สอดแนม -สอดรู้ -สอดรู้สอดเห็น -สอดส่อง -สอดใส่ -สอดไส้ -สอน -ส่อน -สอนจระเข้ให้ว่ายน้ำ -สอนหนังสือสังฆราช -สอบ -สอบซ้อม -สอบปากคำ -สอบพยาน -สอบไล่ -สอบสวน -สอบสวนทวนพยาน -สอปูน -สอพลอ -ส้อม -สอย -สอยดอกฟ้า -สอยดาว -สอยผม -สอยไร -ส่อเสียด -สะ -สะกด -สะกอ -สะกาง -สะการะ -สะการะตาหรา -สะกิด -สะเก็ด -สะแก -สะแกวัลย์ -สะแกแสง -สะคร้อ -สะคราญ -สะค้าน -สะเงาะสะแงะ -สะใจ -สะดม -สะดวก -สะดัก -สะดิ้ง -สะดึง -สะดือ -สะดุ้ง -สะดุ้งมาร -สะดุด -สะดุดใจ -สะดุดตา -สะดุดหู -สะเด็ด -สะเดา -สะเดาดิน -สะเดาอินเดีย -สะเดาะ -สะตอ -สะตอเบา -สะตาหมัน -สะตึ -สะตือ -สะตุ -สะเต๊ะ -สะโตก -สะทก -สะทน -สะท้อน -สะท้อนใจ -สะท้าน -สะทึก -สะทึน -สะทึ่น -สะเทิน -สะเทิ้น -สะเทินน้ำสะเทินบก -สะเทือน -สะเทื้อน -สะเทือนใจ -สะบะ -สะบัก -สะบักจม -สะบักสะบอม -สะบัด -สะบัดก้น -สะบัดมือ -สะบัดร้อนสะบัดหนาว -สะบัดลุกสะบัดนั่ง -สะบัดสะบิ้ง -สะบัดหน้า -สะบั้น -สะบันงา -สะบันงาจีน -สะบันงาต้น -สะบ้า -สะบ้าหัวเข่า -สะบู -สะแบง -สะเปะสะปะ -สะพรัก -สะพรั่ง -สะพรึงกลัว -สะพรึบ -สะพัก -สะพัง -สะพัด -สะพั้น -สะพาน -สะพานแขวน -สะพานชัก -สะพานเชือก -สะพานเดินเรือ -สะพานทุ่น -สะพานเบี่ยง -สะพานปลา -สะพานไฟ -สะพานลอย -สะพานเสี้ยว -สะพานหก -สะพานหัน -สะพาย -สะพายแล่ง -สะเพร่า -สะโพก -สะเภา -สะใภ้ -สะโมง -สะระตะ -สะระแหน่ -สะละปะตุ่น -สะลาง -สะลึมสะลือ -สะวี้ดสะว้าด -สะสม -สะสวย -สะสาง -สะอาง -สะอาด -สะอ้าน -สะอิ้ง -สะอิดสะเอียน -สะอึก -สะอึกเข้าใส่ -สะอึกสะอื้น -สะอื้น -สะเอ้ง -สะเอว -สะเออะ -สะโอดสะอง -สะไอ -สัก -สักกะ -สักกัจจะ -สักกาย- -สักกายทิฐิ -สักการ- -สักการะ -สักขรา -สักขี -สักขี้ไก่ -สักฏะ -สักตะ -สักแต่ว่า -สักยะ -สักวา -สักว่า -สักหลาด -สัขยะ -สัค -สัคคะ -สั่ง -สังกมทรัพย์ -สังกร -สังกรณี -สังกะตัง -สังกะวัง -สังกะวาด -สังกะสี -สังกัด -สังกัปปะ -สังกา -สังการ -สังกาศ -สังกิเลส -สังเกต -สังเกตการณ์ -สังข- -สังข์ -สังขกร -สังขต- -สังขตธรรม -สังขตะ -สังขยา -สังขลิก -สังขลิกา -สังขาร -สังขาร- -สังขารธรรม -สังขารโลก -สังเขป -สังโขภ -สังค- -สังค์ -สังคญาติ -สังคม -สังคม- -สังคมนิยม -สังคมวิทยา -สังคมศาสตร์ -สังคมศึกษา -สังคมสงเคราะห์ -สังคหะ -สังคัง -สังคาตา -สังคายนา -สังคายนาย -สังคีต -สังคีติ -สังเค็ด -สังเคราะห์ -สังฆ- -สังฆกรรม -สังฆการี -สังฆเถระ -สังฆทาน -สังฆนายก -สังฆปาโมกข์ -สังฆภัต -สังฆเภท -สังฆมณฑล -สังฆมนตรี -สังฆราช -สังฆสภา -สังฆาฏิ -สังฆาณัติ -สังฆาทิเสส -สังฆาธิการ -สังฆานุสติ -สังฆาวาส -สังดัก -สังปะติแหงะ -สังปะลิเหงะ -สังโยค -สังโยชน์ -สังวร -สังวัจฉระ -สังวัธยาย -สังวาล -สังวาลพราหมณ์ -สังวาส -สังเวคะ -สังเวช -สังเวย -สังเวียน -สังสกฤต -สังสการ -สังสดมภ์ -สังสนทนา -สั่งสนทนา -สั่งสม -สังสรรค์ -สั่งสอน -สังสารวัฏ -สังสิทธิ -สังสุทธ์ -สังสุทธิ -สั่งเสีย -สังหร -สังหรณ์ -สังหรรษ -สังหาร -สังหาริมทรัพย์ -สังหาริมะ -สังหิต -สัจ -สัจ- -สัจกิริยา -สัจจะ -สัจญาณ -สัจนิยม -สัจพจน์ -สัชฌ- -สัชฌกร -สัชฌการ -สัชฌะ -สัชฌายะ -สัชฌุ -สัชฌุกร -สัชฌุการ -สัญจร -สัญจรโรค -สัญจาร -สัญเจตนา -สัญชาต- -สัญชาตญาณ -สัญชาติ -สัญฌา -สัญญา -สัญญาณ -สัญญาบัตร -สัญญาประกันชีวิต -สัญญาประกันภัย -สัญญาวิปลาส -สัญญี -สัญโญชน์ -สัญประกาศ -สัญโยค -สัญลักษณ์ -สัฐิ -สัณฐาน -สัณฐิติ -สัณฑ์ -สัณห์ -สัด -สัดจอง -สัดส่วน -สัต -สัต- -สัตการ -สัตตบงกช -สัตตบรรณ -สัตตบุษย์ -สัตตะ -สัตตาห- -สัตตาหกาลิก -สัตตู -สัตถ- -สัตถันดร -สัตถา -สัตถิ -สัตถุ -สัตถุศาสนา -สัตบถ -สัตบรรณ -สัตบริภัณฑ์ -สัตบุรุษ -สัตภัณฑ์ -สัตม- -สัตมวาร -สัตย- -สัตย์ -สัตยพรต -สัตยวาที -สัตยาเคราะห์ -สัตยาธิษฐาน -สัตยาบัน -สัตว- -สัตว์ -สัตวบาล -สัตวแพทย์ -สัตวโลก -สัตววิทยา -สัตวา -สัตวาร -สัตสดก -สัทธรรม -สัทธา -สัทธาจริต -สัทธาธิก -สัทธิงวิหาริก -สัทธินทรีย์ -สัทธิวิหาริก -สัทศาสตร์ -สัน -สั่น -สั้น -สันเขา -สันดอน -สันดาน -สันดาป -สันเดก -สันโดษ -สันต์ -สันตติ -สันตะปาปา -สันตะวา -สันติ -สันติกะ -สันติภาพ -สันตุฏฐี -สันถระ -สันถว- -สันถวไมตรี -สันถวะ -สันถัต -สันถาร -สันทนะ -สันทะ -สันทัด -สันทัดกรณี -สันทัสนะ -สันทาน -สันทิฐิก- -สันทิส -สันเทส -สันเทห -สันธาน -สันนิธิ -สันนิบาต -สันนิวาส -สันนิเวส -สันนิษฐาน -สันปันน้ำ -สันพร้านางแอ -สันพร้ามอญ -สันพร้าหอม -สันรวง -สันลึก -สันสกฤต -สันหลัง -สันหลังยาว -สับ -สับเกลียว -สับเงา -สับเชือก -สับนก -สับปลับ -สับปลี้ -สับปะขาว -สับปะรด -สับเปลี่ยน -สับสน -สับหลีก -สัปคับ -สัปคับช้าง -สัปด- -สัปดน -สัปดปกรณ์ -สัปดประกรณ์ -สัปดสดก -สัปดาห์ -สัปดาหะ -สัปต- -สัปตศก -สัปทน -สัปปะ -สัปปิ -สัปปุริส- -สัปปุรุษ -สัประยุทธ์ -สัปหงก -สัปเหร่อ -สัพ -สัพพะ -สัพพัญญู -สัพเพเหระ -สัพยอก -สัมบูรณ์ -สัมปชัญญะ -สัมปทา -สัมปทาน -สัมปยุต -สัมปโยค -สัมประสิทธิ์ -สัมประหาร -สัมปรายภพ -สัมปรายิกภพ -สัมปัตติ -สัมผัปลาป -สัมผัส -สัมผัสนอก -สัมผัสใน -สัมผัสสระ -สัมผัสอักษร -สัมพล -สัมพหุลา -สัมพัจฉร- -สัมพัจฉรฉินท์ -สัมพัตสร -สัมพัทธ์ -สัมพันธ- -สัมพันธ์ -สัมพันธน์ -สัมพันธภาพ -สัมพันธมิตร -สัมพันธไมตรี -สัมพาธะ -สัมพาหน์ -สัมพาหะ -สัมพุทธ- -สัมพุทธะ -สัมโพธิ -สัมภวะ -สัมภเวสี -สัมภัต -สัมภัตตะ -สัมภาระ -สัมภาษณ์ -สัมเภทะ -สัมโภคกาย -สัมมนา -สัมมัปธาน -สัมมา -สัมมากัมมันตะ -สัมมาจริยา -สัมมาชีพ -สัมมาทิฐิ -สัมมาวาจา -สัมมาวายามะ -สัมมาสติ -สัมมาสมาธิ -สัมมาสังกัปปะ -สัมมาอาชีวะ -สัมโมทนียกถา -สัมฤทธิ- -สัมฤทธิ์ -สัมฤทธิศก -สัยน์ -สัลลาป- -สัลเลข- -สัสดี -สัสต- -สัสตทิฐิ -สัสสะ -สัสสุ -สัสสู -สัสุรี -สา -ส่า -สาก -สากกะเบือ -สากรรจ์ -สากล -สากษิน -สากษี -สากหยาก -สากัจฉา -สากัลย์ -สากิย- -สากิยบุตร -สากิยมุนี -สากิยะ -สาเก -ส่าขนุน -สาขา -ส่าไข้ -สาคร -สาคเรศ -สาคู -สาคูลาน -สาคูวิลาด -สาง -ส้าง -สางคลื่น -สางห่า -สาฎก -สาฏิก- -สาณ- -สาณี -สาด -สาดโคลน -สาดน้ำรดกัน -สาดเสียเทเสีย -สาต -สาตรา -สาไถย -สาทร -สาทิส -สาทิส- -สาทิสลักษณ์ -สาทุ -สาโท -สาธก -สาธย- -สาธยะ -สาธยาย -สาธารณ- -สาธารณ์ -สาธารณภัย -สาธารณรัฐ -สาธารณสถาน -สาธารณสมบัติ -สาธารณสมบัติของแผ่นดิน -สาธารณสุข -สาธารณะ -สาธารณูปการ -สาธารณูปโภค -สาธิต -สาธุ -สาธุการ -สาธุชน -สาธุสะ -สาน -ส่าน -สานตวะ -สานุ -สานุศิษย์ -สานู -สาบ -สาบขนุน -สาบแร้ง -สาบแร้งสาบกา -สาบสูญ -สาบเสือ -สาบาน -สาบานธง -สาป -สาปไตย -สาปสรร -สาม -สามกษัตริย์ -สามเกลอ -สามแก้ว -สามขา -สามขุม -สามเขี้ยว -สามคาน -สามง่าม -สามชุก -สามแซ่ -สามเณร -สามเณรี -สามตา -สามนต- -สามนต์ -สามนตราช -สามใบเถา -สามเพลงตกม้าตาย -สามเมา -สามยทรัพย์ -สามรส -สามล -สามล้อ -สามลำคาน -สามวันดีสี่วันไข้ -สามเวท -สามเศียร -สามสลึงเฟื้อง -สามสิบกลีบ -สามเส้า -สามหมุด -สามหาบ -สามหาว -สามเหลี่ยม -สามเหลี่ยมด้านเท่า -สามเหลี่ยมมุมฉาก -สามเหลี่ยมมุมป้าน -สามเหลี่ยมมุมแหลม -สามเหลี่ยมหน้าจั่ว -สามัคคี -สามัญ- -สามัญสำนึก -สามัตถิยะ -สามานย- -สามานย์ -สามานยนาม -สามารถ -สามิก -สามิต -สามินี -สามิภักดิ์ -สามี -สามีจิกรรม -สาย -ส่าย -ส้าย -สายกระได -สายใจ -สายชู -สายซุง -สายดิน -สายตะพาย -สายตัว -สายตา -สายตาพิการ -สายติ่ง -สายน้ำ -สายน้ำผึ้ง -สายบัว -สายพาน -สายฟ้า -สายมงคล -สายม่าน -สายยู -สายโยก -สายใย -สายระเดียง -สายระยาง -สายระโยง -สายรัดทึบ -สายรุ้ง -สายล่อฟ้า -สายลับ -สายเลือด -สายโลหิต -ส่ายศึก -ส่ายเศิก -สายสนกลใน -สายสมร -สายสร้อย -สายสวาท -สายสะพาย -สายสิญจน์ -สายสูตร -สายหยุด -สายเหา -สายอากาศ -สายเอก -สายัณห์ -สายาห์ -สาร -สาร- -สารกรมธรรม์ -สารคดี -สารตรา -สารถี -สารถีชักรถ -สารท -สารทา -สารทุกข์สุกดิบ -สารธรรม -สารนิเทศ -สารบบ -สารบรรณ -สารบัญ -สารบับ -ส้ารบับ -สารบาญ -สารบาญชี -สารประกอบ -สารประโยชน์ -สารพัด -สารพัน -สารพางค์ -สารภาพ -สารภี -สารภีทะเล -สารภีป่า -สารไมย -สารละลาย -สารวัด -สารวัตร -สารสนเทศ -สารส้ม -สารหนู -สารหนูขาว -สาระ -สาระโกก -สาระแน -สาระพา -สาระพาเฮโล -สาระวอน -สาระวารี -สาระสะมา -สารัตถ- -สารัตถะ -สารัตถะประโยชน์ -สารัทธ์ -สารัมภ์ -สาราณีย- -สาราณียกร -สาราณียธรรม -สาราณียะ -สารานุกรม -สารีริกธาตุ -สารูป -สาโรช -สาละ -สาละวน -สาลิ -สาลิกา -สาลินี -สาลี -สาลี่ -สาลู -ส่าเลือด -สาโลหิต -สาว -สาวก -สาวกระทืบหอ -สาวก้าว -สาวแก่ -สาวเท้า -สาวน้อยเล่นน้ำ -สาวนะ -สาวแส้ -สาวไส้ -สาวไส้ให้กากิน -สาวิกา -สาวิตร -สาวิตรี -สาสน -สาสน- -สาสน์ -สาสนธรรม -สาสนา -สาหร่าย -สาหรี -ส่าหรี -สาหัตถ- -สาหัตถิก- -สาหัส -สาหัสสากรรจ์ -ส่าเห็ด -สาเหตุ -ส่าเหล้า -สาแหรก -สาฬุระ -สำ -ส่ำ -สำคัญ -สำซ่าง -สำแดง -สำทับ -สำนวด -สำนวน -สำนวนความ -สำนอง -สำนัก -สำนักสงฆ์ -สำนาน -สำนึก -สำนึง -สำเนา -สำเนียง -สำบอก -สำบัดสำนวน -สำปะลอ -สำปะหลัง -สำปั้น -สำปันนี -สำเภา -สำเภาทอง -สำมะงา -สำมะโน -สำมะโนครัว -สำมะโนประชากร -สำมะลอ -สำมะเลเทเมา -สำมะหา -สำรด -สำรวจ -สำรวม -สำรวมใจ -สำรวย -สำรวล -สำรอก -สำรอง -สำรับ -สำราก -สำราญ -สำริด -สำเร็จ -สำเร็จโทษ -สำเร็จรูป -สำเรา -สำเริง -สำโรง -สำลัก -สำลาน -สำลี -สำแลง -สำสร้าง -สำส่อน -สำสา -สำเส็ด -ส่ำเสีย -สำหรวด -สำหรับ -สำหา -สำเหนียก -สำเหร่ -สำออย -สำอาง -สิ -สิกข์ -สิกขมานา -สิกขา -สิกขากาม- -สิกขาบท -สิขร -สิขรี -สิขเรศ -สิขา -สิขานล -สิขี -สิคาล -สิง -สิ่ง -สิงขร -สิ่งของ -สิงค์ -สิงคลิ้ง -สิงคลี -สิงคาร -สิงคาล -สิงคี -สิงโต -สิงโตทะเล -สิ่งพิมพ์ -สิ่งละอันพันละน้อย -สิ่งแวดล้อม -สิงสถิต -สิงสาราสัตว์ -สิงสู่ -สิงห- -สิงห์ -สิงหนาท -สิงหบัญชร -สิงหรา -สิงหราช -สิงหล -สิงหลก- -สิงหาคม -สิงหาสน์ -สิญจ- -สิญจน์ -สิต- -สิตางศุ์ -สิถิล -สิทธ- -สิทธ์ -สิทธา -สิทธาจารย์ -สิทธานต์ -สิทธารถ -สิทธิ -สิทธิ์ -สิทธิกร -สิทธิการิยะ -สิทธิ์ขาด -สิทธิครอบครอง -สิทธิชัย -สิทธิโชค -สิทธิบัตร -สิทธิยึดหน่วง -สิทธิสภาพนอกอาณาเขต -สิธยะ -สิน -สิ้น -สินค้า -สินค้าเข้า -สินค้าออก -สิ้นคิด -สินจ้าง -สิ้นใจ -สิ้นชีพ -สิ้นชีพตักษัย -สิ้นชีวิต -สิ้นเชิง -สินเชื่อ -สินใช้ -สินเดิม -สิ้นตำรา -สิ้นแต้ม -สินไถ่ -สินทรัพย์ -สิ้นท่า -สินทูระ -สินเทา -สินธพ -สินธุ -สินธุระ -สินเธาว์ -สินน้ำใจ -สิ้นเนื้อประดาตัว -สินบน -สินบริคณห์ -สิ้นบุญ -สิ้นประตู -สิ้นพระชนม์ -สินระบาด -สินแร่ -สิ้นไร้ไม้ตอก -สิ้นฤทธิ์ -สิ้นลม -สินสมรส -สินส่วนตัว -สินสอด -สิ้นสุด -สินหัวบัวนาง -สินไหม -สินไหมทดแทน -สินะ -สินาด -สินิทธ์ -สินี -สิเนรุ -สิเนหก -สิเนหนียะ -สิเนหะ -สิเนหา -สิเน่หา -สิบ -สิบเบี้ยใกล้มือ -สิบแปดมงกุฎ -สิปปะ -สิพนะ -สิมพลี -สิร- -สิระ -สิริ -สิรี -สิโรดม -สิโรตม์ -สิลา -สิโลก -สิว -สิ่ว -สิ่วน่อง -สิวเสี้ยน -สิวะ -สิวาลัย -สิวิกา -สิหนา -สี -สี่ -สี้ -สีกรุด -สีกา -สีกุน -สีข้าง -สีฆ- -สีจัก -สีชมพูดง -สีชมพูสวน -สีซอให้ควายฟัง -สีด -สีดอ -สีต- -สีต้น -สีตล- -สีตลรัศมี -สีตลหฤทัย -สีตโลทก -สีโตทก -สีทันดร -สี่บท -สีผึ้ง -สีฝัด -สีฟันคนทา -สีฟันนางแอ -สีไฟ -สีมันต์ -สีมา -สีลม -สีละมัน -สีวิกา -สีสวรรค์ -สีสอ -สีสะ -สีสา -สีสุก -สีเสียด -สีเสียดแก่น -สีเสียดเปลือก -สีเสียดเหนือ -สีเสื้อน้อย -สีห- -สีห์ -สีหน้า -สีหนาท -สีหบัญชร -สีหราช -สีหะ -สี่เหลี่ยม -สี่เหลี่ยมขนมเปียกปูน -สี่เหลี่ยมคางหมู -สี่เหลี่ยมจัตุรัส -สี่เหลี่ยมด้านขนาน -สี่เหลี่ยมด้านไม่เท่า -สี่เหลี่ยมผืนผ้า -สึก -สึกหรอ -สึง -สืบ -สืบไป -สืบพยาน -สืบพันธุ์ -สืบพันธุ์แบบไม่อาศัยเพศ -สืบพันธุ์แบบอาศัยเพศ -สืบราชสมบัติ -สืบราชสันตติวงศ์ -สืบศาสนา -สืบสวน -สืบสันดาน -สืบสาย -สืบสาวราวเรื่อง -สืบเสาะ -สืบหูก -สื่อ -สื่อการศึกษา -สื่อมวลชน -สื่อสาร -สื่อสารมวลชน -สุ -สุก -สุกก่อนห่าม -สุกข์ -สุกดิบ -สุกๆ ดิบๆ -สุกแดด -สุกร -สุกรม -สุกใส -สุกเอาเผากิน -สุกำศพ -สุกียากี้ -สุข -สุข- -สุขนาฏกรรม -สุขภัณฑ์ -สุขภาพ -สุขลักษณะ -สุขวิทยา -สุขศาลา -สุขศึกษา -สุขา -สุขาภิบาล -สุขารมณ์ -สุขาวดี -สุขิน -สุขี -สุขุม -สุขุมาล -สุคต -สุคติ -สุคนธ- -สุคนธ์ -สุคนธรส -สุคันธ์ -สุงก- -สุงกะ -สุงกากร -สุงสิง -สุงสุมาร -สุงสุมารี -สุจริต -สุจหนี่ -สุจะ -สุจิ -สุจิต -สุจิตร -สุชน -สุชัมบดี -สุชา -สุชาดา -สุญ -สุญ- -สุญญ- -สุญญากาศ -สุญตา -สุญนิยม -สุณ -สุณหา -สุณิสา -สุด -สุดกำลัง -สุดกู่ -สุดขีด -สุดคน -สุดคิด -สุดจิต -สุดใจ -สุดด้าม -สุดแต่ -สุดโต่ง -สุดท้อง -สุดท้าย -สุดท้ายปลายโต่ง -สุดแรงเกิด -สุดลิ่ม -สุดวิสัย -สุดสงวน -สุดสวาทขาดใจ -สุดสายป่าน -สุดเสียง -สุดเสียงสังข์ -สุดหล้าฟ้าเขียว -สุดเหวี่ยง -สุดา -สุต -สุตกวี -สุตตะ -สุตตันตปิฎก -สุตตันตะ -สุติ -สุทธ- -สุทธ์ -สุทธาวาส -สุทธิ -สุทรรศน์ -สุทัศน์ -สุธา -สุธาการ -สุธาโภชน์ -สุธารส -สุธารสชา -สุธาสินี -สุธาสี -สุธี -สุนทร -สุนทร- -สุนทรพจน์ -สุนทรี -สุนทรีย- -สุนทรียภาพ -สุนทรียศาสตร์ -สุนทรียะ -สุนัข -สุนันท์ -สุโนก -สุบดี -สุบรรณ -สุบิน -สุปรีดิ์ -สุปรีย์ -สุปาณี -สุพพัต -สุพรรณ -สุพรรณ- -สุพรรณถัน -สุพรรณบัฏ -สุพรรณภาชน์ -สุพรรณราช -สุพรรณศรี -สุพรรณิการ์ -สุภ- -สุภร -สุภัค -สุภา -สุภาพ -สุภาพชน -สุภาพบุรุษ -สุภาพสตรี -สุภาษิต -สุม -สุ่ม -สุมขอน -สุมควัน -สุ่มตัวอย่าง -สุมทุม -สุมน -สุมนะ -สุมนัส -สุมนา -สุมยุง -สุ่มสี่สุ่มห้า -สุ้มเสียง -สุมหัว -สุมะ -สุมาลี -สุเมธ -สุเมรุ -สุร- -สุรคต -สุรงค์ -สุรเชษฐ์ -สุรบดี -สุรบถ -สุรภาพ -สุรภี -สุรโลก -สุรสีหนาท -สุรเสียง -สุรังค์ -สุรัติ -สุรัสวดี -สุรา -สุรางค์จำเรียง -สุรางคนา -สุรางคนางค์ -สุราบาน -สุรารักษ์ -สุราลัย -สุรินทร์ -สุรินทราหู -สุริย- -สุริยกันต์ -สุริยกานต์ -สุริยการ -สุริยกาล -สุริยคติ -สุริยคราส -สุริยเคราะห์ -สุริยง -สุริยน -สุริยมณฑล -สุริยะ -สุริยัน -สุริยา -สุริยุปราคา -สุริเยนทร์ -สุริเยศ -สุริโย -สุรีย์ -สุรุ่ยสุร่าย -สุเรนทร์ -สุลต่าน -สุว -สุวภาพ -สุวรรณ -สุวรรณ- -สุวรรณภูมิ -สุวาน -สุวินัย -สุวิมล -สุษิร -สุสาน -สุหนัต -สุหร่ง -สุหร่าย -สุหฤท -สุหัท -สุเหร่า -สู -สู่ -สู้ -สูกษม -สู่ขวัญ -สู่ขอ -สูง -สูงเท่านกเขาเหิน -สูงเทียมเมฆ -สูงส่ง -สูงสุดสอย -สูงอายุ -สูจกะ -สูจนะ -สูจิ -สูจิบัตร -สูเจ้า -สูญ -สูด -สูต -สูตร -สูตรเคมี -สูติ- -สูติกรรม -สูติบัตร -สูติแพทย์ -สูติศาสตร์ -สูท -สูท- -สูทกรรม -สูทศาสตร์ -สูน -สูนุ -สูบ -สูบเลือด -สูบเลือดสูบเนื้อ -สูป- -สูปการ -สูปะ -สู้ยิบตา -สู้เย็บตา -สูร -สู้รบตบมือ -สูรย- -สูรย์ -สูรยกานต์ -สูรยคราส -สูริ -สู่รู้ -สู่สม -สูสี -สู้หน้า -สู่หา -สู้เหมือนหมาจนตรอก -เส -เสก -เสกข- -เสกขบุคคล -เสกขะ -เสกสรร -เสข- -เสขบุคคล -เสขะ -เสความ -เส็ง -เส้ง -เส็งเคร็ง -เสงี่ยม -เสฏฐี -เสณี -เสด -เสด็จ -เสด็จในกรม -เสด็จพระราชดำเนิน -เสต- -เสตุ -เสถียร -เสถียร- -เสถียรภาพ -เสท -เสโท -เสน -เส้น -เส้นแกงร้อน -เส้นขนาน -เส้นแข็ง -เสนง -เสน่ง -เส้นด้าย -เส้นตาย -เส้นตื้น -เส้นทาง -เส้นบังคับ -เส้นผมบังภูเขา -เส้นผ่านศูนย์กลาง -เส้นผ่าศูนย์กลาง -เส้นแผลง -เส้นยาแดงผ่าแปด -เส้นใย -เส้นใยแก้ว -เส้นรอบวง -เส้นรัศมี -เส้นแร -เส้นลายมือ -เส้นลึก -เส้นเลือด -เส้นวันที่ -เส้นศูนย์สูตร -เส้นสมมาตร -เส้นสัมผัส -เส้นสาย -เสนห- -เสน่ห์ -เสน่ห์จันทร์ขาว -เสน่ห์จันทร์แดง -เสน่ห์ปลายจวัก -เส้นหมี่ -เสนหา -เสน่หา -เสนอ -เส้นฮ่อ -เสนะ -เสนา -เสน่า -เสนากุฎ -เสนางค์ -เสนางคนิกร -เสนาธิการ -เสนาธิปัต -เสนานี -เสนาบดี -เสนาพยุห์ -เสนาพยูห์ -เสนาสนะ -เสนาะ -เสนี -เสนีย์ -เสนียด -เสนียะ -เสบย -เสบียง -เสบียงกรัง -เสพ -เสพย์ติด -เสเพล -เสภา -เสม็ด -เสมหะ -เสมอ -เสมอใจ -เสมอต้นเสมอปลาย -เสมอตัว -เสมอนอก -เสมอบ่าเสมอไหล่ -เสมอภาค -เสมอหน้า -เสมา -เสมียน -เสมือน -เสย -เสร็จ -เสริด -เสริม -เสริมสวย -เสรี -เสรีไทย -เสรีธรรม -เสรีนิยม -เสรีภาพ -เสล- -เสลด -เสลดพังพอน -เสลดหางวัว -เสลบรรพต -เสลา -เสลี่ยง -เสลือกสลน -เสโล -เสวก -เสวกามาตย์ -เสวนะ -เสวนา -เสวย -เสวยพระชาติ -เสวียน -เสสรวง -เสสรวล -เสแสร้ง -เสา -เส้า -เสากระโดง -เสาเข็ม -เสาชี้ -เสาดั้ง -เสาตะลุง -เสานางเรียง -เสาร์ -เสารภย์ -เสารี -เสาว- -เสาวคนธ์ -เสาวคันธ์ -เสาวณิต -เสาวธาร -เสาวนะ -เสาวนา -เสาวนาการ -เสาวนีย์ -เสาวภา -เสาวภาคย์ -เสาวภาพ -เสาวรภย์ -เสาวรส -เสาวลักษณ์ -เสาหมอ -เสาหฤท -เสาหาน -เสาเอก -เสาะ -เสาะด้าย -เสาะป่าน -เสาะแสะ -เสิร์จ -เสิร์ฟ -เสีย -เสียกบาล -เสียกระบวน -เสียกล -เสียการ -เสียกำซ้ำกอบ -เสียกำได้กอบ -เสียกำลังใจ -เสียกิริยา -เสียขวง -เสียขวัญ -เสียคน -เสียคำพูด -เสียง -เสี่ยง -เสียงเขียว -เสียงแข็ง -เสี่ยงชีวิต -เสียงแตก -เสียงทอง -เสี่ยงทาย -เสี่ยงบุญเสี่ยงกรรม -เสียงพยัญชนะ -เสี่ยงภัย -เสียงสระ -เสียงหลง -เสียงอ่อน -เสียจริต -เสียใจ -เสียโฉม -เสียชาติเกิด -เสียชื่อ -เสียเชิง -เสียด -เสียดใบ -เสียดสี -เสียดาย -เสียเด็ก -เสียตัว -เสียแต้ม -เสียเถอะ -เสียเถิด -เสียท่า -เสียที -เสี้ยน -เสี้ยนศึก -เสี้ยนหนาม -เสียน้ำใจ -เสียน้ำตา -เสียเนื้อเสียตัว -เสียบ -เสียบน -เสียบหนู -เสียปาก -เสียเปรียบ -เสียผี -เสียผู้ใหญ่ -เสียภูมิ -เสียม -เสี่ยม -เสี้ยม -เสี้ยมเขาควายให้ชนกัน -เสี้ยมสอน -เสี่ยมสาร -เสียรอย -เสียรังวัด -เสียราศี -เสียรู้ -เสียรูป -เสียรูปคดี -เสียแรง -เสียว -เสี่ยว -เสี้ยว -เสียวซ่าน -เสียวไส้ -เสียเศวตฉัตร -เสียสละ -เสียสาว -เสียเส้น -เสียหน่อย -เสียหน้า -เสียหลัก -เสียหลาย -เสียหัว -เสียหาย -เสียเหลี่ยม -เสือ -เสื่อ -เสื้อ -เสือก -เสือกกะโหลก -เสือกคลาน -เสือกระดาษ -เสือกระต่าย -เสื้อกล้าม -เสือกสน -เสือกไส -เสื้อกั๊ก -เสือกินวัว -เสือเก่า -เสือข้ามห้วย -เสือจนท่า ข้าจนทาง -เสือซ่อนเล็บ -เสือเฒ่าจำศีล -เสือดาว -เสือดำ -เสือตกถัง -เสือตบก้น -เสือทลายห้าง ช้างทลายโรง -เสือทะเล -เสือนอนกิน -เสือนั่งร่ม -เสื้อน้ำ -เสื่อน้ำมัน -เสือในร่างสมัน -เสือบอง -เสือปลา -เสือป่า -เสือป่าแมวเซา -เสือป่าแมวมอง -เสือไฟ -เสื่อม -เสื่อมทราม -เสื่อมโทรม -เสื่อมสิทธิ์ -เสื่อมเสีย -เสือแมลงวัน -เสือรู้ -เสื่อลวด -เสือลากหาง -เสื่อลำแพน -เสือสมิง -เสือสิ้นตวัก -เสือสุมาตรา -เสื้อแสง -เสือหมอบ -เสือหิว -แส -แส่ -แส้ -แสก -แสกๆ -แสกหน้า -แสง -แสงเงินแสงทอง -แสงจันทร์ -แสงสว่าง -แสงอาทิตย์ -แสด -แสดง -แสดงออก -แสตมป์ -แสเถา -แสน -แสนกล -แสนง -แสนงอน -แสนย- -แสนย์ -แสนยากร -แสนยานุภาพ -แสนรู้ -แสนเสนาะ -แสนา -แสบ -แสบก -แสม -แสมสาร -แส้ม้า -แส้ม้าทะลาย -แสยก -แสยง -แสยงขน -แสยะ -แสรก -แสร้ง -แสร้งว่า -แสลง -แสลงใจ -แสลงเบื่อ -แสวง -แสอก -แสะ -โสก -โสกโดก -โสกันต์ -โสกาดานา -โสโครก -โสณ -โสณฑ์ -โสณิ -โสณี -โสด -โสดก -โสดม -โสดา -โสดาบัน -โสดาปัตติผล -โสดาปัตติมรรค -โสต -โสต- -โสตถิ -โสตทัศนวัสดุ -โสตทัศนอุปกรณ์ -โสทก -โสทร -โสธก -โสธนะ -โสน -โสนกินดอก -โสนคางคก -โสนหางไก่ -โสนหิน -โสภ- -โสภณ -โสภา -โสภิณี -โสภี -โสเภณี -โสม -โสมนัส -โสมม -โสมย์ -โสมส่องแสง -โสร่ง -โสรจ -โสรจสรง -โสวรรณ -โสหุ้ย -โสฬส -ใส -ใส่ -ใส่ความ -ใส่คะแนนไม่ทัน -ใส่ไคล้ -ใส่ใจ -ใส่ตะกร้าล้างน้ำ -ใส่ถ้อยร้อยความ -ใส่ไฟ -ใส่ยา -ใส่ร้าย -ใส่สาแหรกแขวนไว้ -ใส่สีสัน -ใส่ไส้ -ใส่หน้ากาก -ใส่หน้ายักษ์ -ไส -ไส้ -ไส้กรอก -ไส้ไก่ -ไส้แขวน -ไส้เดือน -ไส้ตัน -ไส้ติ่ง -ไส้เป็นน้ำเหลือง -ไส้เป็นหนอน -ไสย -ไสย- -ไสยเวท -ไสยศาสตร์ -ไสยา -ไสยาสน์ -ไสร้ -ไส้ละมาน -ไส้เลื่อน -ไสว -ไส้ศึก -ไสหัว -ไส้แห้ง -ไส้อั่ว -ห -หก -หกคว่ำ -หกคะเมน -หกบท -หกล้ม -หกโล่ -หกหัน -หง -หงกๆ -หงส- -หงส์ -หงสคติ -หงส์ทอง -หงสบาท -หงสรถ -หงส์ร่อนมังกรรำ -หงสราช -หงส์ลีลา -หงส์หยก -หงอ -หงอก -หง่องๆ -หงองแหงง -หงอด -หงอดๆ -หงอน -หงอนไก่ -หงอนไก่ป่า -หง่อม -หงอย -หง่อย -หงอยก๋อย -หงอยเหงา -หงักๆ -หงับๆ -หง่าง -หงาย -หงายท้อง -หงายหลัง -หง่าว -หงำ -หงำเหงอะ -หงิก -หงิงๆ -หงิม -หงิมๆ -หงึกๆ -หงุงหงิง -หงุดหงิด -หงุบ -หงุบหงับ -หงุ่ย -หญ้า -หญ้ากระจาม -หญ้าเกล็ดหอย -หญ้าขัด -หญ้าขัดใบยาว -หญ้าขัดหลวง -หญ้างวงช้าง -หญ้าจาม -หญ้าใต้ใบ -หญ้าถอดปล้อง -หญ้าน้ำดับไฟ -หญ้าบัว -หญ้าปากคอก -หญ้าปีนตอ -หญ้าฝรั่น -หญ้าพันงู -หญ้าเพ็ก -หญ้าแพรก -หญ้ายองไฟ -หญ้ายายเภา -หญ้ารกช้าง -หญ้ารากขาว -หญ้าลิเภา -หญ้าหนวดแมว -หญ้าแห้วหมู -หญิง -หญิบ -หด -หดหาย -หดหู่ -หตะ -หทย- -หทัย -หน -หนทาง -หนนะ -หนวก -หนวกหู -หน่วง -หน่วงเหนี่ยว -หนวด -หนวดนาคราช -หนวดพราหมณ์ -หนวดแมว -หน่วย -หน่วยก้าน -หน่วยกิต -หน่วยดาราศาสตร์ -หนอ -หน่อ -หนอก -หนอกช้าง -หนอง -หนองแซง -หนองใน -หน็องแหน็ง -หนอน -หนอนกระทู้ -หนอนกระสือ -หนอนกอ -หนอนด้น -หนอนตายหยาก -หนอนบ่อนไส้ -หนอนพยาธิ -หนอนม้วนใบข้าว -หนอนหนังสือ -หน่อเนื้อเชื้อไข -หน่อไม้ -หน่อไม้น้ำ -หน่อไม้ฝรั่ง -หน่อย -หน็อยแน่ -หนัก -หนักข้อ -หนักใจ -หนักแน่น -หนักปาก -หนักแผ่นดิน -หนักมือ -หนักไม่เอา เบาไม่สู้ -หนักหน่วง -หนักหนา -หนักหน้า -หนักอก -หนัง -หนังกลางวัน -หนังกำพร้า -หนังไก่ -หนังตะลุง -หนังเรียด -หนังสติ๊ก -หนังสือ -หนังสือเดินทาง -หนังสือบริคณห์สนธิ -หนังสือพิมพ์ -หนังสือรับรองการทำประโยชน์ -หนังสือเวียน -หนังสือสัญญา -หนังหน้าไฟ -หนังใหญ่ -หนั่น -หนับ -หนา -หน้า -หน้ากระฉีก -หน้ากระดาน -หน้ากาก -หนากาสรี -หน้าเก้อ -หน้าขา -หน้าข้าวตัง -หน้าแข้ง -หน้าคว่ำ -หน่าง -หน้างอ -หน้างอก -หน้าเง้า -หน้าแง -หน้าจ๋อย -หน้าจั่ว -หน้าจืด -หน้าฉาก -หน้าฉาน -หน้าโฉนด -หน้าซีด -หน้าซื่อใจคด -หน้าเซียว -หนาด -หน้าด้าน -หน้าตัก -หน้าตั้ง -หนาตา -หน้าตา -หน้าต่าง -หน้าตาย -หน้าตึง -หน้าตื่น -หน้าตูม -หน้าเตา -หน้าถัง -หน้าทับ -หน้าที่ -หน้าที่นั่ง -หนาน -หน้านวล -หน้าเนื้อใจเสือ -หนาแน่น -หน้าบัน -หน้าบาง -หน้าบาน -หน้าบูด -หน้าปัด -หน้าเป็น -หน้าผา -หน้าผาก -หน้าพาทย์ -หน้าไฟ -หนาม -หนามขี้แรด -หนามเขียะ -หนามควายนอน -หนามจี้ -หนามแดง -หนามเตย -หนามพรม -หนามพุงดอ -หนามยอกอก -หนามยอกเอาหนามบ่ง -หนามรอบตัว -หนามหลัง -หนามเหม็น -หนามแหลมไม่มีใครเสี้ยม -หนามใหญ่ -หน้ามอด -หน้าม่อย -หน้าม้า -หน้ามืด -หน้ามุข -หน้าไม้ -หน่าย -หน่ายหนี -หน่ายแหนง -หน้าร่าหุ์ -หน้าราหู -หน้าเลือด -หนาว -หนาวใจ -หน้าวัว -หน้าแว่น -หน้าสิ่วหน้าขวาน -หน้าเสีย -หน้าเสี้ยว -หน้าหนา -หน้าหัก -หนาหู -หนาหูหนาตา -หน้าใหญ่ใจโต -หน้าไหว้หลังหลอก -หน้าอก -หน้าอัด -หนำ -หนำใจ -หนำเลี้ยบ -หนี -หนี้ -หนี้เกลื่อนกลืนกัน -หนีบ -หนี้สิน -หนี้สูญ -หนีเสือ -หนีเสือปะจระเข้ -หนึก -หนึ่ง -หนึบ -หนืด -หนุ -หนุน -หนุนเนื่อง -หนุนหลัง -หนุบ -หนุบๆ -หนุบหนับ -หนุ่ม -หนุ่มทั้งแท่ง -หนุ่มแน่น -หนุ่มเหน้า -หนุ่ย -หนู -หนูตกถังข้าวสาร -หนูติดจั่น -หนูผี -ห่ม -หมก -หมกมุ่น -หมกไหม้ -หมด -หมดกระเป๋า -หมดกัน -หมดเขต -หมดเขี้ยวหมดงา -หมดจด -หมดตัว -หมดตำรา -หมดตูด -หมดเนื้อหมดตัว -หมดบุญ -หมดประตู -หมดเปลือก -หมดพก -หมดพุง -หมดรูป -หมดไส้หมดพุง -ห่มดอง -หมดอายุ -หมดอาลัย -หมดอาลัยตายอยาก -หมดอาลัยไยดี -หม่น -หม่นหมอง -หม่นไหม้ -หมวก -หมวกกะโล่ -หมวกแก๊ป -หมวกแจว -หมวกทรงหม้อตาล -หมวกนิรภัย -หมวกหูกระต่าย -หมวด -หมอ -หม่อ -หม้อ -หมอก -หม้อแกง -หม้อแกงค่าง -หม้อแกงลิง -หมอขวัญ -หม้อข้าวหม้อแกงลิง -หมอความ -หมอง -หม่อง -หมองใจ -หมองมัว -หมองหมาง -หมอช้างเหยียบ -หมอเฒ่า -หมอดู -หมอตาล -หม้อตาล -หมอตำแย -หม้อทะนน -หมอไทย -หมอน -หม่อน -หมอนขวาน -หมอนข้าง -หมอนทอง -หมอน้อย -หม้อน้ำ -หมอน้ำมัน -หมอบ -หมอบกระแต -หมอบราบคาบแก้ว -หม้อแปลง -หม้อแปลงไฟ -หมอผี -หมอพัดโตนด -หม่อม -หม่อมเจ้า -หม่อมฉัน -หม่อมราชวงศ์ -หม่อมหลวง -หม่อมห้าม -หมอย -หมอลำ -หม้อหนู -หม้อห้อม -หมัก -หมักหมม -หมัด -หมัน -หมั่น -หมั้น -หมั่นไส้ -หมับ -หมับๆ -หมา -หม่า -หม้า -หมาก -หมากเก็บ -หมากข่วง -หมากเขียว -หมากแข้ง -หมากคัน -หมากดิบ -หมากแดง -หมากทัน -หมากผาง -หมากผู้หมากเมีย -หมากฝรั่ง -หมากม่วน -หมากมาศ -หมากเม่า -หมากเม่าควาย -หมากยับ -หมากแยก -หมากรุก -หมากลิง -หมากสง -หมากหนาม -หมากหอมควาย -หมากเหลือง -หมากอีแปะ -หมากฮอส -หมาขี้ไม่มีใครยกหาง -หมาง -หมางใจ -หมางเมิน -หมาจิ้งจอก -หมาด -หมาใน -หมาป่า -หมามุ่ย -หมามุ้ย -หมาไม้ -หมาย -หม้าย -หมายกำหนดการ -หมายเกณฑ์ -หมายขัง -หมายค้น -หมายความ -หมายจับ -หมายจำคุก -หมายใจ -หมายตัว -หมายตา -หมายน้ำบ่อหน้า -หมายปล่อย -หมายมั่น -หมายมั่นปั้นมือ -หมายยา -หมายเรียก -หมายเลข -หมายหัว -หมายเหตุ -หมายอาญา -หมาร่า -หมาสองราง -หมาหมู่ -หมาหยอกไก่ -หมาหวงก้าง -หมาหัวเน่า -หมาหางด้วน -หมาเห่าใบตองแห้ง -หม่ำ -หม้ำ -หม้ำตับ -หมิ่น -หมิ่นประมาท -หมิ่นพระบรมเดชานุภาพ -หมิ่นเหม่ -หมี -หมี่ -หมีเหม็น -หมึก -หมืน -หมื่น -หมุด -หมุน -หมุนเงิน -หมุนเวียน -หมุบ -หมุบหมับ -หมุบหมิบ -หมุ่ย -หมุยขาว -หมู -หมู่ -หมูเขาจะหามเอาคานเข้าไปสอด -หมูแดง -หมูตั้ง -หมูเทโพ -หมูน้ำ -หมูแนม -หมูในเล้า -หมูในอวย -หมูป่า -หมูไปไก่มา -หมูแผ่น -หมูยอ -หมูสนาม -หมูสามชั้น -หมูสี -หมูหย็อง -หมูหริ่ง -หมูหรึ่ง -หมูหัน -หมูแฮม -หย- -หยก -หยกๆ -หย่ง -หย่งๆ -หยด -หยดย้อย -หยวก -หยวบ -หยวบๆ -หยอก -หยอกเย้า -หย็อกหย็อย -หยอกเอิน -หย็อง -หย่อง -หย่องๆ -หย็องกรอด -หย็องแหย็ง -หยอด -หยอดหลุม -หยอน -หย่อน -หย่อนใจ -หย่อนอารมณ์ -หย่อม -หย็อมแหย็ม -หย็อย -หย่อย -หยัก -หยักไย่ -หยักรั้ง -หยักศก -หยักเหยา -หยัง -หยั่ง -หยั่งทราบ -หยั่งรู้ -หยั่งเสียง -หยังหยัง -หยัด -หยัน -หยับ -หยับๆ -หยั่วเมือง -หย่า -หยากเยื่อ -หยากไย่ -หย่ากัน -หยาด -หยาดน้ำค้าง -หยาดน้ำฟ้า -หย่านม -หยาบ -หยาบคาย -หยาบช้า -หยาบหยาม -หยาม -หยามน้ำหน้า -หยาว -หย้าว -หยำเป -หยำเหยอะ -หยำแหยะ -หยิก -หยิกแกมหยอก -หยิกหย็อง -หยิ่ง -หยิบ -หยิบผิด -หยิบยก -หยิบยืม -หยิบหย่ง -หยิมๆ -หยี -หยี่ -หยุ -หยุกหยิก -หยุด -หยุดหย่อน -หยุ่น -หยุบๆ -หยุมหยิม -หยูกยา -หโยดม -หร -หรคุณ -หรณ -หรดาล -หรดาลกลีบทอง -หรดาลแดง -หรดี -หรบๆ -หรรษ- -หรรษา -หรอ -หรอก -หร็อมแหร็ม -หรอยๆ -หระ -หรับๆ -หรัสว- -หรัสวมูรดี -หรัสวางค์ -หรา -หริ -หริคันธ์ -หริ่ง -หริ่งๆ -หริจันทน์ -หริณะ -หริต -หริตกี -หริรักษ์ -หริวงศ์ -หรี่ -หรีด -หรีตกี -หรือ -หรุบๆ -หรุบรู่ -หรุบหรู่ -หรุ่ม -หรู -หรูหรา -หฤทย -หฤทย์ -หฤทัย -หฤทัย- -หฤทัยกลม -หฤทัยกัปน์ -หฤทัยกัมป์ -หฤทัยปรีย์ -หฤทัยพันธน์ -หฤษฎ์ -หฤษฎี -หฤหรรษ์ -หฤโหด -หล -หลง -หลงกล -หลงตา -หลงลม -หลงลืม -หลงหูหลงตา -หลงเหลือ -หลงใหล -หลด -หลน -หล่น -หลบ -หลบตา -หลบฝาก -หลบมุม -หลบหน้า -หลบหน้าหลบตา -หลบหลังคา -หล่ม -หลวง -หลวงจีน -หลวม -หลวมตัว -หลอ -หล่อ -หลอก -หลอกๆ -หลอกลวง -หลอกล่อ -หลอกหลอน -หลอด -หลอดลม -หลอดลมคอ -หลอดลมฝอย -หลอดเลือด -หลอดอาหาร -หลอน -หล็อน -หล็อนๆ -หล่อน -หลอม -หลอมตัว -หลอมละลาย -หลอมเหลว -หล่อลื่น -หล่อเลี้ยง -หล่อเหลา -หละ -หละหลวม -หลัก -หลักการ -หลักเกณฑ์ -หลักแจว -หลักชัย -หลักฐาน -หลักตอ -หลักทรัพย์ -หลักประกัน -หลักพยาน -หลักลอย -หลักสูตร -หลักแหล่ง -หลักแหลม -หลัง -หลั่ง -หลังเขียว -หลังคา -หลังคาเรือน -หลังจาก -หลังฉาก -หลังเต่า -หลังยาว -หลั่งไหล -หลัดๆ -หลั่น -หลับ -หลับตา -หลับนก -หลับใน -หลัว -หลา -หล้า -หลาก -หลากใจ -หลากหลาย -หลาท -หลาน -หลาบ -หลาบจำ -หลาม -หลาย -หลายเติบ -หลายหลาก -หลายแหล่ -หลาว -หลาวเหล็ก -หลาหล -หลิก -หลิ่ง -หลิท -หลิน -หลิม -หลิว -หลิ่ว -หลิ่วตา -หลี -หลีก -หลีโก -หลีบ -หลีฮื้อ -หลืบ -หลุกหลิก -หลุด -หลุดปาก -หลุดพ้น -หลุดมือ -หลุดลอย -หลุดลุ่ย -หลุนๆ -หลุบ -หลุบลู่ -หลุม -หลุมโจน -หลุมพราง -หลุมพอ -หลุมพี -หลุมหลบภัย -หลุมอากาศ -หลู่ -หลู่หลี่ -หวง -ห่วง -ห้วง -หวงก้าง -ห่วงใย -หวงห้าม -หวงแหน -หวด -หวน -ห้วน -ห้วนๆ -หวนคำนึง -หวย -ห้วย -หวอ -หวอด -หว็อยๆ -หวะ -หวัง -หวัด -หวัดๆ -หวั่น -หวันยิหวา -หวั่นหวาด -หวั่นไหว -หวัว -หวัวร่อ -หวัวเราะ -หวา -หว่า -หว้า -หวาก -หว่าง -หวาด -หวาดระแวง -หวาดเสียว -หวาดหวั่น -หวาดไหว -หวาน -หว่าน -หวานคอแร้ง -หว่านล้อม -หวาม -หวาย -หวายดิน -หวายตะมอย -หวำ -หวิด -หวิว -หวี -หวี่ -หวีด -หวือ -หวุดหวิด -หวุม -หวูด -หสน- -หอ -ห่อ -ห้อ -หอก -หอกข้างแคร่ -หอกซัด -หอการค้า -หอคอย -หอคำ -หอง -ห้อง -ห้องเครื่อง -ห้องชุด -ห้องแถว -ห้องน้ำ -ห้องสมุด -หอจดหมายเหตุ -ห่อตัว -หอไตร -หอน -ห่อน -หอบ -หอบหิ้ว -หอบหืด -หอบังคับการ -หอประชุม -หอพัก -หอม -ห้อม -หอมกราย -หอมขาว -หอมจันทร์ -หอมแดง -หอมเตียม -หอมป้อม -หอมแป้น -ห้อมเมือง -หอมยับ -ห้อมล้อม -หอมหวน -หอย -ห้อย -หอยโข่ง -ห้อยท้าย -หอยปากเป็ด -หอยแปดเกล็ด -หอยเม่น -ห้อยโหน -หอสมุด -ห่อหมก -ห่อเหี่ยว -ห่อแห่ -ห้อแห้ -หะ -หะยี -หะแรก -หะหาย -หะห้าย -หะแห้น -หัก -หักกลบลบหนี้ -หักคอ -หักใจ -หักด้ามพร้าด้วยเข่า -หักทองขวาง -หักบัญชี -หักมุก -หักราคา -หักร้าง -หักแรง -หักล้าง -หักลำ -หักหน้า -หักหลัง -หักหาญ -หักห้าม -หักเห -หักโหม -หักอก -หักอกหักใจ -หังส- -หัจญ์ -หัจญี -หัช -หัฏฐะ -หัด -หัดเยอรมัน -หัต -หัตถ- -หัตถ์ -หัตถกรรม -หัตถการ -หัตถกิจ -หัตถบาส -หัตถพันธ์ -หัตถศิลป์ -หัตถศึกษา -หัตถาจารย์ -หัตถานึก -หัตถาภรณ์ -หัตถาโรหะ -หัตถาลังการ -หัตถินี -หัตถี -หัน -หั่น -หั้น -หันตรา -หันตา -หันรีหันขวาง -หันหน้าเข้าหากัน -หันหลังให้กัน -หันเห -หั่นแหลก -หันอากาศ -หับ -หับเผย -หัมมียะ -หัย -หัว -หัวกระเด็น -หัวกระไดไม่แห้ง -หัวกระสุน -หัวก๊อก -หัวกะทิ -หัวก่ายท้ายเกย -หัวกุญแจ -หัวเก่า -หัวแก้วหัวแหวน -หัวขโมย -หัวขวาน -หัวข้อ -หัวขั้ว -หัวขาด -หัวขี้แต้ -หัวขี้หมา -หัวเข้า -หัวแข็ง -หัวโขน -หัวคว่ำ -หัวคะแนน -หัวค่ำ -หัวคิด -หัวใคร่ -หัวงอน -หัวงาน -หัวเงิน -หัวเงื่อน -หัวโจก -หัวใจ -หัวชนกำแพง -หัวชนฝา -หัวซุกหัวซุน -หัวซุน -หัวด้วน -หัวดาวหัวเดือน -หัวดื้อ -หัวเด็ดตีนขาด -หัวเดียวกระเทียมลีบ -หัวต่อ -หัวตะกั่ว -หัวตะคาก -หัวตะโหงก -หัวเต่า -หัวเตาไฟ -หัวถอก -หัวเถิก -หัวที -หัวเทียน -หัวเทียม -หัวนกกระจอก -หัวนม -หัวนอก -หัวนอน -หัวนอนปลายตีน -หัวน้ำ -หัวน้ำขึ้น -หัวน้ำลง -หัวเนื้อ -หัวเนื้อทราย -หัวบัว -หัวเบี้ย -หัวโบราณ -หัวปลวก -หัวปลี -หัวปักหัวปำ -หัวปั่น -หัวป่า -หัวปาก -หัวปี -หัวพัน -หัวพุงหัวมัน -หัวฟืนหัวไฟ -หัวมังกุท้ายมังกร -หัวมัน -หัวเม็ด -หัวเมือง -หัวแม่ตีน -หัวแม่เท้า -หัวแม่มือ -หัวแมลงวัน -หัวไม้ -หัวไม่วางหางไม่เว้น -หัวรอ -หัวร่อ -หัวร้อยรู -หัวระแหง -หัวรักหัวใคร่ -หัวรั้น -หัวราน้ำ -หัวรุนแรง -หัวเราะ -หัวเรี่ยวหัวแรง -หัวเรื่อง -หัวเรือใหญ่ -หัวแรง -หัวแร้ง -หัวลม -หัวล้าน -หัวลิง -หัวเลี้ยว -หัวเลี้ยวหัวต่อ -หัวโล้น -หัวว่าว -หัวสำเภา -หัวสูง -หัวเสีย -หัวไส้ -หัวหกก้นขวิด -หัวหงอก -หัวหด -หัวหน้า -หัวหน่าว -หัวหมอ -หัวหมื่น -หัวหมุน -หัวหมู -หัวหลักหัวตอ -หัวหาด -หัวหายตะพายขาด -หัวเห็ด -หัวแหลม -หัวแหวน -หัวใหม่ -หัวไหล่ -หัวอก -หัวออก -หัวอ่อน -หัส -หัสดิน -หัสดี -หัสต -หัสต์ -หัสตะ -หา -ห่า -ห้า -หาก -หากว่า -หากิน -ห่ากิน -หาความ -หาค่ามิได้ -หาง -ห่าง -ห้าง -หางกระเบน -หางกระรอก -หางกระหมวด -หางกราย -หางกะลวย -หางกะลวยไก่ -หางกังหัน -หางกิ่ว -หางแกละ -หางไก่ -หางขมวด -หางขอด -หางข้าว -หางแข็ง -หางค้อ -หางเครื่อง -หางจระเข้ -หางจิ้งเหลน -หางช้าง -หางเต่า -หางแถว -หางนกกะลิง -หางนกยูง -หางนกยูงฝรั่ง -หางนาค -หางปลา -หางเปีย -หางแพน -หางแมงป่อง -หางยาม -หางยาว -หางเลข -หางว่าว -หางสิงห์ -หางเสียง -หางเสือ -หางหงส์ -หางหนู -ห้างหุ้นส่วน -ห้างหุ้นส่วนจำกัด -ห้างหุ้นส่วนสามัญ -ห่างเห -ห่างเหิน -หางไหล -หางไหลแดง -หางไหลเผือก -หาเงิน -หาเช้ากินค่ำ -หาญ -หาด -หาดก -หาตก -หาตัวจับยาก -ห้าแต้ม -หาน -ห่าน -หาบ -หาบมิได้ -หาบเร่ -หาบหลวง -หาม -ห่าม -ห้าม -ห้ามญาติ -ห้ามทัพ -ห้ามปราม -ห้ามเปลี่ยนมือ -ห้ามพระแก่นจันทน์ -หามรอก -หามรุ่งหามค่ำ -ห้ามล้อ -ห้ามเลือด -หามแล่น -ห้ามสมุทร -หามิได้ -หาไม่ -หาไม่ก็ -หาย -หายกัน -หายขาด -หายเข้ากลีบเมฆ -หายใจ -หายใจไม่ทั่วท้อง -หายตัว -หายนะ -หายหกตกหล่น -หายหน้า -หายห่วง -หายหัว -หาร -หารร่วมมาก -หาริ -หาริน -หารี -หารือ -หาเรื่อง -ห่าลง -หาลิท -หาเลือดกับปู -หาว -ห้าว -หาวนอน -ห้าวหาญ -หาเศษหาเลย -หาส -หาสก -หาสยะ -หาสู่ -หาเสียง -หาห่วงมาคล้องคอ -หาเหตุ -หำ -ห้ำ -ห้ำหัก -ห้ำหั่น -หิ้ง -หิงคุ -หิงสา -หิงห้อย -หิ่งห้อย -หิ่งหาย -หิด -หิต -หิต- -หิตกร -หิตประโยชน์ -หิตพจน์ -หิตวจนะ -หิตานุหิตประโยชน์ -หิน -หิน- -หินงอก -หินชนวน -หินชั้น -หินชาติ -หินดินดาน -หินดินสอพอง -หินตะกอน -หินตับเป็ด -หินทราย -หินน้ำมัน -หินปูน -หินแปร -หินฝนทอง -หินย้อย -หินยาน -หินแลง -หินสบู่ -หินโสโครก -หินหนืด -หินอ่อน -หินอัคนี -หิม- -หิมพาน -หิมพานต์ -หิมวัต -หิมวันต์ -หิมวา -หิมวาต -หิมวาน -หิมวาส -หิมเวศ -หิมะ -หิมาลัย -หิรัญ -หิรัญ- -หิรัญญิการ์ -หิรัญบัฏ -หิรัณย- -หิรัณย์ -หิรัณยการ -หิรัณยเกศ -หิรัณยรัศมี -หิริ -หิริโอตตัปปะ -หิว -หิ้ว -หิ้วท้อง -หิ้วปีก -หี -หีด -หีตา -หีเต่า -หีน- -หีนยาน -หีบ -หีบชัก -หีบเชิงชาย -หีบฝ้าย -หีบพระมาลัย -หีบเพลง -หีบเพลงชัก -หีบเพลงปาก -หีบสไบ -หีบเสียง -หีบห่อ -หึๆ -หึง -หึ่ง -หึ่งๆ -หึงส- -หึงสา -หืด -หืน -หื่น -หื่นหรรษ์ -หือ -หื้อ -หือไม่ขึ้น -หือรือโหด -หุง -หุงข้าวประชดหมา -หุต- -หุตโกวิท -หุตาจารย์ -หุน -หุ่น -หุ้น -หุ้นกู้ -หุ่นนิ่ง -หุ้นบุริมสิทธิ -หุ่นพยนต์ -หุ้นลม -หุ่นไล่กา -หุ้นส่วน -หุนหัน -หุนหันพลันแล่น -หุบ -หุบเขา -หุบปาก -หุบผา -หุบเหว -หุ้ม -หุ้มกลอง -หุ้มแผลง -หุ้มแพร -หุ้ยหุย -หุยฮา -หุรัม -หุหนิงหงัน -หู -หู่ -หูก -หูกระต่าย -หูกวาง -หูแจว -หูฉลาม -หูฉี่ -หูชอง -หูช้าง -หูด -หูดับตับไหม้ -หูตาสว่าง -หูติ -หูตึง -หูตูบ -หูทวนลม -หูเบา -หูปลาช่อน -หูป่าตาเถื่อน -หูผีจมูกมด -หูผึ่ง -หูรูด -หูไว -หูไวตาไว -หูเสือ -หูหนาตาโต -หูหนาตาเล่อ -หูหนู -หู่หี่ -หูไห -เห -เห่ -เหง -เหง่ง -เหงา -เหง้า -เหงาหงอย -เหงื่อ -เหงือก -เหงือกปลาหมอ -เหงื่อกาฬ -เห็จ -เห็ด -เห็ดโคน -เห็ดหลุบ -เหติ -เหตุ -เหตุการณ์ -เหตุผล -เหตุสุดวิสัย -เห็น -เห็นกงจักรเป็นดอกบัว -เห็นแก่ -เห็นแก่หน้า -เห็นขี้ดีกว่าไส้ -เห็นเขาขึ้นคานหาม เอามือประสานก้น -เหน่ง -เหนงนายพราน -เห็นจะ -เห็นใจ -เห็นช้างขี้ ขี้ตามช้าง -เหน็ด -เหน็ดเหนื่อย -เห็นดำเห็นแดง -เห็นดี -เหน็บ -เหน็บชา -เหน็บแนม -เห็นหน้าเห็นหลัง -เหน่อ -เห็นอ้ม -เหนอะ -เหนอะหนะ -เหน้า -เหนาะๆ -เหนียง -เหนี่ยง -เหนียงนกกระทุง -เหนี่ยน -เหนียม -เหนียว -เหนี่ยว -เหนี่ยวนำแม่เหล็กไฟฟ้า -เหนียวแน่น -เหนี่ยวรั้ง -เหนียวหนืด -เหนียวหมา -เหนือ -เหนื่อย -เหนื่อยหน่าย -เห็บ -เห็บน้ำ -เหม -เหม- -เหม่ -เหม่ง -เหม็น -เหม็นเขียว -เหม็นเบื่อ -เหม็นเปรี้ยว -เหมวดี -เหม่อ -เหมันต- -เหมันต์ -เหมา -เหมายัน -เหมาะ -เหมาะเจาะ -เหมาะสม -เหมาะเหม็ง -เหมียว -เหมี่ยว -เหมือง -เหมืองฝาย -เหมือด -เหมือดคน -เหมือดโลด -เหมือน -เหมือนกับ -เหมือนว่า -เหมือนหนึ่งว่า -เหมื่อย -เหมื่อยๆ -เหย -เหยเก -เหยง -เหย่อย -เหยา -เหย่า -เหย่าๆ -เหย้า -เหยาะ -เหยาะๆ -เหยาะแหยะ -เหยิง -เหยิบๆ -เหยียด -เหยียดผิว -เหยียดหยาม -เหยียบ -เหยียบขี้ไก่ไม่ฝ่อ -เหยียบจมูก -เหยียบย่ำ -เหยียบเรือสองแคม -เหยี่ยว -เหยี่ยวข่าว -เหยื่อ -เหยือก -เหรัญญิก -เหรา -เหราเล่นน้ำ -เหราะๆ -เหรียญ -เหรียญกระษาปณ์ -เห่เรือ -เหล่ -เหล็ก -เหล็กกล้า -เหล็กกล้าไม่เป็นสนิม -เหล็กใน -เหล็กพืด -เหล็กวิลาด -เหล็กส่ง -เหล็กเส้น -เหล็กหมาด -เหล็กหล่อ -เหล็กเหนียว -เหล็กไหล -เหลน -เหลว -เหลวแหลก -เหลวไหล -เหลอ -เหลา -เหล่า -เหล้า -เหล่ากอ -เหลาชะโอน -เหลาหลก -เหล้าแห้ง -เหลาะแหละ -เหลิง -เหลิงเจิ้ง -เหลียน -เหลี่ยม -เหลี่ยมคู -เหลี่ยมลูกบาศก์ -เหลียว -เหลียวแล -เหลียวหลัง -เหลือ -เหลือก -เหลือกำลัง -เหลือเกิน -เหลือขอ -เหลือเข็ญ -เหลือเข็น -เหลือง -เหลืองหางฟ้า -เหลืองหิน -เหลือใจ -เหลือเชื่อ -เหลือใช้ -เหลือทน -เหลือบ -เหลือบ่ากว่าแรง -เหลือเฟือ -เหลือม -เหลื่อม -เหลื่อมล้ำต่ำสูง -เหลือมือ -เหลือรับ -เหลือร้าย -เหลือล้น -เหลือวิสัย -เหลือสติกำลัง -เหลือแสน -เหลือหลอ -เหลือหลาย -เหลือแหล่ -เหลืออด -เหลืออดเหลือทน -เหว -เหว่ -เหวง -เหวทะเล -เหวย -เหวอะ -เหวอะหวะ -เหวี่ยง -เหวี่ยงแห -เห่อ -เห่อเหิม -เหอะ -เหอะน่า -เหะ -เหะหะ -เหา -เห่า -เหาฉลาม -เหาทะเล -เหาน้ำ -เหาไม้ -เหาะ -เหิน -เหินห่าง -เหินเห่อ -เหิม -เหิมหาญ -เหิมห้าว -เหิมฮึก -เหี้ย -เหียง -เหียงกราด -เหียน -เหี้ยน -เหียนราก -เหี้ยม -เหี้ยมเกรียม -เหี้ยมหาญ -เหี้ยมโหด -เหี่ยว -เหี่ยวแห้ง -เหื่อ -เหือด -เหือดหาย -เหือดแห้ง -แห -แห่ -แห้ -แหก -แหกคอก -แหกปาก -แหง -แหง่ -แห่ง -แห้ง -แหงแก๋ -แหง่ง -แหงน -แหงนเต่อ -แหงนเถ่อ -แห้งผาก -แห้งแล้ง -แห้งเหี่ยว -แห้งเหือด -แหน -แห้น -แหนง -แหนงใจ -แหนงหน่าย -แหนบ -แหนม -แหบ -แหม -แหม่ -แหม่ม -แหมะ -แหย -แหย่ -แหยง -แหย่ง -แหยม -แหย็ม -แหยะ -แหยะๆ -แหล -แหล่ -แหลก -แหลกลาญ -แหลกเหลว -แหล่ง -แหล่งเสื่อมโทรม -แหล่งหล้า -แหลน -แหล่นอก -แหล่ใน -แหลม -แหลมหลัก -แหละ -แหว -แห้ว -แหวก -แหวกแนว -แหว่ง -แหวด -แหวน -แหวนหัว -แห้วหมู -แหวะ -แห่ห้อม -แห่แหน -แหะ -แหะๆ -โห่ -โหก -โหง -โหงพราย -โหด -โหดร้าย -โหดเหี้ยม -โหน -โหนก -โหนกแก้ม -โหน่ง -โหม -โหม- -โหม่ -โหมกรรม -โหมกูณฑ์ -โหม่ง -โหมด -โหมดเทศ -โหมโรง -โหมหัก -โหมฮึก -โหย -โหยกเหยก -โหยง -โหย่ง -โหย่งๆ -โหยหวน -โหยไห้ -โหร -โหรง -โหรงเหรง -โหรดาจารย์ -โหระพา -โหรา -โหรากระบือ -โหราเขาเนื้อ -โหราจารย์ -โหราเดือยไก่ -โหราตีนหมา -โหราเท้าสุนัข -โหราบอน -โหราศาสตร์ -โหล -โหล่ -โหลงโจ้ง -โหว -โหว่ -โหว้ -โหวกเหวก -โหวง -โหวงเหวง -โหวด -โหวต -ให้ -ให้การ -ใหญ่ -ให้โดยเสน่หา -ให้ท่า -ให้ท้าย -ใหม่ -ใหม่ถอดด้าม -ใหม่เอี่ยม -ให้ร้าย -ให้ร้ายป้ายสี -ให้สัตยาบัน -ให้หา -ให้อภัย -ให้ออก -ไห -ไห่ -ไห้ -ไหซอง -ไหน -ไหปลาร้า -ไหม -ไหม้ -ไหมทอง -ไหมสับปะรด -ไหรณย์ -ไหล -ไหล่ -ไหล่เขา -ไหล่ถนน -ไหล่ทวีป -ไหล่ทาง -ไหลน้ำ -ไหล่รวบ -ไหว -ไหวๆ -ไหว้ -ไหว้ครู -ไหว้เจ้า -ไหวตัว -ไหวติง -ไหวทัน -ไหว้ผี -ไหวพริบ -ไหว้วาน -ไหหลำ -ฬ -อ -อก -อกไก่ -อกคราก -อกตั้ง -อกตัญญุตา -อกตัญญู -อกเต่า -อกแตก -อกทะเล -อกนิษฐ์ -อกเมือง -อกรณีย์ -อกรรมกริยา -อกรวบ -อกร่อง -อกโรย -อกเลา -อกหัก -อกัปปิย- -อกัปปิยวัตถุ -อกัปปิยโวหาร -อกัปปิยะ -อกุศล -อกุศล- -อกุศลกรรม -อกุศลกรรมบถ -อกุศลเจตนา -อกุศลมูล -อคติ -อคเนสัน -อคาธ -อคาร- -อฆ -อโฆษะ -อง -องก์ -องค- -องค์ -องค์กฐิน -องค์กร -องค์การ -องค์การสหประชาชาติ -องคชาต -องค์ประกอบ -องค์ประชุม -องคมนตรี -องคมรรษ -องครักษ์ -องควิการ -องควิเกษป -องควิทยา -องคาพยพ -องคุล -องคุลี -องศ์ -องศา -องอาจ -องุ่น -อจร -อจล- -อจลา -อจิตติ -อจินตา -อจินไตย -อจิร- -อจิระ -อเจลก -อเจละ -อช -อชา -อชิน -อชินี -อชิร -อฏวี -อณิ -อณุ -อณู -อโณทัย -อด -อดกลั้น -อดใจ -อดตาหลับขับตานอน -อดทน -อดนม -อดเปรี้ยวไว้กินหวาน -อดสู -อดแห้งอดแล้ง -อดอยาก -อดออม -อดิ -อดิถี -อดิเทพ -อดิเรก -อดิเรก- -อดิเรกลาภ -อดิศร -อดิศวร -อดิศัย -อดีต -อดีต- -อดีตกาล -อดีตชาติ -อดีตภพ -อดีตสมัย -อดุล -อดุลย- -อดุลย์ -อติ -อติชาต -อติชาต- -อติชาตบุตร -อติมานะ -อติราช -อติเรก -อติเรก- -อติเรกจีวร -อติเรกลาภ -อติสาร -อถรรพเวท -อทระ -อทินนาทาน -อทินนาทายี -อธรรม -อธิ -อธิก- -อธิกมาส -อธิกรณ์ -อธิกวาร -อธิกสุรทิน -อธิการ -อธิการบดี -อธิคม -อธิฏฐาน -อธิบดี -อธิบาย -อธิป -อธิป- -อธิปไตย -อธิมาตร -อธิมุตติ -อธิโมกข์ -อธิราช -อธิวาส -อธิวาสนะ -อธิศีล -อธิษฐาน -อธึก -อน- -อ้น -อนงค- -อนงค์ -อนงคณะ -อนงคเลข -อนงคเลขา -อนธ- -อนธการ -อนนต์ -อนยะ -อนรรฆ -อนรรถ -อนล -อนวัช -อนวัช- -อ้นอ้อ -อนัญ -อนัญ- -อนัญคติ -อนัญสาธารณ์ -อนัตตา -อนัตถ- -อนันต- -อนันต์ -อนันตร- -อนันตริยกรรม -อนัม -อนากูล -อนาคต -อนาคต- -อนาคตกาล -อนาคามิผล -อนาคามิมรรค -อนาคามี -อนาจาร -อนาถ -อนาถา -อนาทร -อนาธิปไตย -อนามัย -อนารย- -อนารยชน -อนารยธรรม -อนารยะ -อนาลัย -อนำ -อนิจ -อนิจ- -อนิจกรรม -อนิจจัง -อนิจจา -อนิฏฐารมณ์ -อนิยต -อนิยม -อนิยม- -อนิล -อนิล- -อนิลบถ -อนิวรรต -อนิวรรตน์ -อนิษฏ์ -อนีก- -อนีกทรรศนะ -อนีกทัศนะ -อนีกะ -อนีกัฐ -อนีจ -อนึก -อนึ่ง -อนุ -อนุกร -อนุกรม -อนุกรรมการ -อนุกระเบียด -อนุกาชาด -อนุการ -อนุกูล -อนุคามิก -อนุคามี -อนุเคราะห์ -อนุจร -อนุช -อนุชน -อนุชา -อนุชาต -อนุชาต- -อนุชาตบุตร -อนุชิต -อนุญาต -อนุญาโตตุลาการ -อนุตร- -อนุเถระ -อนุทิน -อนุบท -อนุบาล -อนุปริญญา -อนุปสัมบัน -อนุปัสนา -อนุพงศ์ -อนุพัทธ์ -อนุพันธ์ -อนุโพธ -อนุภรรยา -อนุภริยา -อนุภาค -อนุภาษ -อนุมัติ -อนุมาตรา -อนุมาน -อนุมูล -อนุมูลกรด -อนุโมทนา -อนุโมทนาบัตร -อนุโยค -อนุรักษ- -อนุรักษ์ -อนุรักษนิยม -อนุราช -อนุราธ -อนุราธะ -อนุราธา -อนุรูป -อนุโลม -อนุวงศ์ -อนุวัต -อนุวาต -อนุศาสก -อนุศาสน์ -อนุศาสนาจารย์ -อนุศิษฏ์ -อนุสติ -อนุสนธิ -อนุสภากาชาด -อนุสร -อนุสรณ์ -อนุสัญญา -อนุสัย -อนุสาวรีย์ -อนุสาสนี -อเนก -อเนก- -อเนกคุณ -อเนกประสงค์ -อเนกวิธ -อเนกอนันต์ -อเนกอนันตัง -อเนจอนาถ -อโนชา -อโนดาต -อบ -อบเชย -อบรม -อบอวล -อบอ้าว -อบอุ่น -อบาย -อบาย- -อบายภูมิ -อบายมุข -อป -อปการ -อปจายน- -อปจายนธรรม -อปจายนมัย -อปภาคย์ -อปมงคล -อปมาน -อปยศ -อปร- -อปรภาค -อประมาณ -อประมาท -อประไมย -อปรัณณชาติ -อปรา -อปราชัย -อปราชิต -อปราธ -อปริมาณ -อปลักษณ์ -อปโลกน์ -อปวาท -อปหาร -อปาจี -อปาจีน -อปาน -อเปหิ -อพพะ -อพยพ -อภว -อภัพ -อภัพ- -อภัพบุคคล -อภัพผล -อภัย -อภัย- -อภัยทาน -อภัยโทษ -อภิ -อภิฆาต -อภิจฉา -อภิชฌา -อภิชน -อภิชน- -อภิชนาธิปไตย -อภิชัย -อภิชาต -อภิชาต- -อภิชาตบุตร -อภิชิต -อภิญญา -อภิญญาณ -อภิณห- -อภิธรรม -อภิธาน -อภิไธย -อภินันท์ -อภินันทนาการ -อภินัย -อภินิหาร -อภิเนษกรมณ์ -อภิบาล -อภิปรัชญา -อภิปราย -อภิมหาอำนาจ -อภิมานะ -อภิมุข -อภิรดี -อภิรติ -อภิรมย์ -อภิรักษ์ -อภิรัฐมนตรี -อภิราม -อภิรุต -อภิรุม -อภิรูป -อภิลักขิต -อภิลักขิต- -อภิลักขิตกาล -อภิลักขิตสมัย -อภิเลปน์ -อภิวันท์ -อภิวาท -อภิวาทน์ -อภิเษก -อภิเษกสมรส -อภิสมโพธิ -อภิสมัย -อภิสมาจาร -อภิสัมโพธิ -อภิสัมโพธิญาณ -อภิสิต -อภิสิทธิ์ -อภูต -อม -อ้ม -อมความ -อมต- -อมตบท -อมตะ -อมนุษย์ -อมปาก -อมพะนำ -อมเพลิง -อมภูมิ -อมมือ -อมยิ้ม -อมร -อมร- -อมรบดี -อมรรัตน์ -อมรราช -อมรสตรี -อมรา -อมราวดี -อมรินทร์ -อมเรนทร์ -อมเรศ -อมเรศวร -อมโรค -อมฤต -อมฤต- -อมฤตบท -อมฤตยู -อมฤตรส -อมเลือดอมฝาด -อมเลือดอมหนอง -อมหนอง -อมัจจะ -อมัตร -อมาตย์ -อมาวสี -อมาวสุ -อมาวาสี -อมิตร -อเมริกัน -อย -อยน -อยัส -อย่า -อยาก -อย่าง -อย่างไร -อย่างไรก็ดี -อย่างไรก็ตาม -อยุทธ์ -อยู่ -อยู่กรรม -อยู่กิน -อยู่คง -อยู่งาน -อยู่จริง -อยู่ดีกินดี -อยู่ตัว -อยู่ท้อง -อยู่ไฟ -อยู่มือ -อยู่ไม่สุข -อยู่ยงคงกระพัน -อยู่ยาม -อยู่โยง -อยู่เวร -อยู่หมัด -อร -อรช -อรชร -อรชุน -อรณ -อรดี -อรติ -อรทัย -อรไท -อรธาน -อรนุช -อรพินท์ -อรพิม -อรรค -อรรฆ -อรรฆย์ -อรรจน์ -อรรณพ -อรรถ -อรรถ- -อรรถกถา -อรรถกถาจารย์ -อรรถกร -อรรถกวี -อรรถคดี -อรรถบท -อรรถปฏิสัมภิทา -อรรถประโยชน์ -อรรถรส -อรรถาธิบาย -อรรธ -อรรธ- -อรรธกรรณ -อรรธคราส -อรรธจักร -อรรธจันทร์ -อรรธนิศา -อรรธบท -อรรธภาค -อรรธสระ -อรสุม -อรสุมพล -อรหะ -อรหัง -อรหัต -อรหัต- -อรหัตผล -อรหัตมรรค -อรหัตวิโมกข์ -อรหัน -อรหันต- -อรหันต์ -อรหันตฆาต -อร่อย -อรัญ -อรัญ- -อรัญญิก -อรัญวาส -อรัญวาสี -อรัณย์ -อราดี -อราติ -อร่าม -อริ -อริน -อรินทร์ -อริย- -อริยกะ -อริยทรัพย์ -อริยบุคคล -อริยผล -อริยมรรค -อริยสัจ -อริยะ -อรุ -อรุณ -อรุโณทัย -อรุ่ม -อรูป -อลงกต -อลงกรณ์ -อลงการ -อลวน -อลเวง -อลหม่าน -อล่องฉ่อง -อลักเอลื่อ -อลังการ -อลัชชี -อล่างฉ่าง -อลิงค์ -อลึงค์ -อลึ่งฉึ่ง -อโลหะ -อวก -อ้วก -อวกาศ -อวเคราะห์ -อวจร -อวชัย -อวชาต -อวชาต- -อวชาตบุตร -อวด -อวดดี -อวดรู้ -อวดอ้าง -อวตาร -อวน -อ้วน -อ้วนท้วน -อวนลอย -อวนลาก -อวบ -อวบน้ำ -อวมงคล -อวมอำ -อวย -อวยวะ -อวรุทธ์ -อวรุทธก -อวล -อวสาน -อวหาร -อวัยวะ -อวัสดา -อวาจี -อวิจี -อวิชชา -อวิญญาณก- -อวิญญาณกทรัพย์ -อวิญญู -อวิรุทธ์ -อวิโรธน์ -อวีจิ -อเวจี -อโศก -อสงไขย -อสนี -อสนีบาต -อสภ -อสมการ -อสมมาตร -อสรพิษ -อสังกมทรัพย์ -อสังหาริม- -อสังหาริมทรัพย์ -อสังหาริมะ -อสัญ- -อสัญกรรม -อสัญญี -อสัญญีภาพ -อสัญญีภาวะ -อสัญญีสัตว์ -อสัญแดหวา -อสัตถพฤกษ์ -อสัตย์ -อสัมภิน- -อสัมภินพงศ์ -อสัมภินวงศ์ -อสาธร -อสาธุ -อสิ -อสิจรรยาการ -อสิต -อสิธารา -อสิเลสะ -อสีตยานุพยัญชนะ -อสีติ -อสีติมหาสาวก -อสุ -อสุจิ -อสุนีบาต -อสุภ -อสุภ- -อสุภกรรมฐาน -อสุภสัญญา -อสุร- -อสุรกาย -อสุรี -อสุเรศ -อสูร -อเส -อเสกข- -อเสกขบุคคล -อเสกขะ -อเสข- -อเสขะ -อห -อหังการ -อหิ -อหิงสา -อหิวาตกโรค -อหึงสา -อเหตุกทิฐิ -อโหสิกรรม -ออ -อ้อ -อ๋อ -ออก -ออกกำลัง -ออกขุนนาง -ออกแขก -ออกโขน -ออกไข้หัว -ออกงาน -ออกงิ้ว -ออกชื่อ -ออกซิเจน -ออกซิเดชัน -ออกไซด์ -ออกญา -ออกดอก -ออกดอกออกผล -ออกตัว -ออกท่า -ออกท่าออกทาง -ออกทุกข์ -ออกทุน -ออกนอกหน้า -ออกบวช -ออกปาก -ออกผื่น -ออกฝี -ออกฝีดาษ -ออกพรรษา -ออกไฟ -ออกภาษา -ออกมหาสมาคม -ออกยักษ์ออกโขน -ออกรส -ออกรับ -ออกร้าน -ออกเรือน -ออกแรง -ออกโรง -ออกฤทธิ์ -ออกลาย -ออกลิงออกค่าง -ออกลูก -ออกวัง -ออกเสียง -ออกหน้าออกตา -ออกหัด -ออกหาก -ออกอากาศ -อ่อง -อ๋อง -อ้องแอ้ง -ออเจ้า -ออเซาะ -ออด -ออดๆ -ออดอ้อน -ออดแอด -ออดๆ แอดๆ -อ๊อดแอ๊ด -อ๊อดๆ แอ๊ดๆ -อ้อดิบ -อ่อน -อ้อน -อ่อนข้อ -อ่อนความ -อ่อนจิตอ่อนใจ -อ่อนใจ -อ่อนช้อย -ออนซ์ -ออนซอน -อ่อนซอน -อ่อนไท้ -อ่อนน้อม -อ่อนปวกเปียก -อ่อนเปลี้ย -อ่อนเปียก -อ่อนเพลีย -อ่อนโยน -อ้อนวอน -อ่อนหวาน -อ่อนหัด -อ่อนหู -อ่อนไหว -อ่อนอกอ่อนใจ -อ้อนออด -อ่อนแอ -อ้อนแอ้น -ออฟฟิศ -ออม -อ่อม -อ้อม -ออมครอม -อ้อมค้อม -ออมชอม -ออมซอม -ออมสิน -อ้อมอก -ออมอด -อ้อมแอ้ม -อ่อย -อ้อย -อ๋อย -อ้อยเข้าปากช้าง -อ้อยช้าง -อ้อยแดง -อ้อยเลา -อ้อยส้อย -อ้อยอิ่ง -ออสเมียม -อ้อแอ้ -อ๊ะ -อะคร้าว -อะเคื้อ -อะจีน -อะแจ -อะเซทิลีน -อะดรีนาลีน -อะดัก -อะดักอะเดี้ย -อะดักอะเดื่อ -อะดักอะแด้ -อะดุง -อะตอม -อะนะ -อะนั้น -อะนี้ -อะมีบา -อะเมริเซียม -อะร้าอร่าม -อะไร -อะลุ่มอล่วย -อะลุ้มอล่วย -อะลูมิเนียม -อะหม -อะไหล่ -อะอื้อ -อะเอื้อย -อัก -อั้ก -อั้กๆ -อั๊ก -อั๊กๆ -อักกะ -อักโกธะ -อักข -อักขร- -อักขรวิธี -อักขรวิบัติ -อักขรสมัย -อักขระ -อักขรานุกรม -อักขรานุกรมภูมิศาสตร์ -อักโข -อักโขภิณี -อักโขเภณี -อักษร -อักษร- -อักษรกลาง -อักษรต่ำ -อักษรบฏ -อักษรลักษณ์ -อักษรเลข -อักษรศาสตร์ -อักษรสมัย -อักษรสาสน์ -อักษรสูง -อักษะ -อักเษาหิณี -อักเสบ -อักอ่วน -อัคคะ -อัคคิ -อัคคี -อัคคีภัย -อัคนิ -อัคนิคณะ -อัคนิพ่าห์ -อัคนิรุทร -อัคนิวาหะ -อัคนิโหตร -อัคนี -อัคร- -อัครชายา -อัครมหาเสนาบดี -อัครมเหสี -อัครราชทูต -อัครสมณทูต -อัง -อังก์ -อังกนะ -อังกฤษ -อังกวด -อังกะลุง -อังกา -อังกาบ -อังกาบฝรั่ง -อังกาบหนู -อังกุร -อังกุศ -อังกูร -อังคณะ -อังคณา -อังคาร -อังคาส -อังคีรส -อังคุฐ -อังฆาต -อั้งยี่ -อั้งโล่ -อังศุ -อังศุก -อังศุธร -อังศุมาลี -อังส- -อังสกุฏ -อังสตรอม -อังสนา -อังสภาระ -อังสะ -อังสา -อัจกลับ -อัจจันต์ -อัจจัย -อัจจิ -อัจจิมา -อัจจุต -อัจเจกะ -อัจฉรา -อัจฉริย- -อัจฉริยบุคคล -อัจฉริยภาพ -อัจฉริยลักษณ์ -อัจฉริยลักษณะ -อัจฉริยะ -อัจนา -อัชฌัตติก- -อัชฌา -อัชฌาจาร -อัชฌาศัย -อัชฌาสัย -อัญ- -อัญขยม -อัญชนะ -อัญชลี -อัญชัน -อัญชันป่า -อัญเชิญ -อัญญะ -อัญดิตถีย์ -อัญเดียรถีย์ -อัญประกาศ -อัญประกาศเดี่ยว -อัญมณี -อัญมัญ- -อัญรูป -อัฏ -อัฏฐ- -อัฏฐะ -อัฏฐังค์ -อัฏฐังคิกมรรค -อัฏฐังสะ -อัฏนา -อัฐ -อัฐเคราะห์ -อัฐทิศ -อัฐบริขาร -อัฐบาน -อัฐม- -อัฐมะ -อัฐยายซื้อขนมยาย -อัฐศก -อัฐฬส -อัฐิ -อัฐิมิญชะ -อัฐิสัณฐาน -อัฒ- -อัฒจันทร์ -อัฒภาค -อัฒมณฑล -อัฒมาส -อัฒรัตติ -อัณฑ- -อัณฑโกส -อัณฑชะ -อัณฑะ -อัณฑาการ -อัณณพ -อัด -อัดก๊อบปี้ -อัดแจ -อัดฉีด -อัดแบตเตอรี่ -อัดแผ่นเสียง -อัดรูป -อัดลม -อัดสำเนา -อัดเสียง -อัดอั้น -อัดอั้นตันใจ -อัดแอ -อัต- -อัตคัด -อัตชีวประวัติ -อัตตะ -อัตตา -อัตตาธิปไตย -อัตถ์ -อัตถะ -อัตนัย -อัตโนมัติ -อัตภาพ -อัตรชะ -อัตรา -อัตราเร็ว -อัตราส่วน -อัตลัด -อัตวินิบาตกรรม -อัตหิต- -อัตเหตุ -อัททา -อัทธ- -อัทธ์ -อัทธคต -อัทธคู -อัทธา -อัทธาน -อัทธายุ -อัธยาตมวิทยา -อัธยาย -อัธยาศัย -อัน -อั้น -อั๋น -อันดก -อันดร -อันดับ -อันด๊าก -อันโด๊ก -อันต- -อันตก -อันตกาล -อันตกิริยา -อันตคุณ -อันตคู -อันตชาติ -อันตร -อันตร- -อันตรการณ์ -อันตรธาน -อันตรภาค -อันตรวาสก -อันตรา -อันตราย -อันตรายิกธรรม -อันตลิกขะ -อันตะ -อั้นตั้น -อันติก -อันติม- -อันติมสัจ -อันติมะ -อั้นตู้ -อันเต -อันเตบุระ -อันเตบุริก -อันเตบุริกา -อันเตปุระ -อันเตปุริก -อันเตปุริกา -อันเตวาสิก -อันโต -อันโตชน -อันโตนาที -อันแถ้ง -อันทุ -อันโทล -อันธ- -อันธการ -อันธพาล -อันธิกา -อันนะ -อันนา -อันเป็น -อันเป็นไป -อันโยนย- -อันโยนยะ -อันวย- -อันวัย -อันว่า -อันเวส -อั้นอ้น -อับ -อับจน -อับเฉา -อับปาง -อับอาย -อัป- -อัปกะ -อัปการ -อัปฏิฆะ -อัปฏิภาค -อัปปะ -อัปเปหิ -อัปภาคย์ -อัปมงคล -อัปยศ -อัประมาณ -อัประมาท -อัประไมย -อัปราชัย -อัปรีย์ -อัปลักษณ์ -อัปสร -อัพพุท -อัพโพหาริก -อัพภันดร -อัพภันตร- -อัพภาน -อัพภาส -อัม -อัมพ- -อัมพร -อัมพฤกษ์ -อัมพวัน -อัมพวา -อัมพา -อัมพาต -อัมพิล -อัมพุ -อัมพุช -อัมพุชินี -อัมพุท -อัยกะ -อัยกา -อัยการ -อัยกี -อัยยะ -อัยยิกา -อัลกุรอาน -อัลตราไวโอเลต -อั่ว -อัศจรรย์ -อัศเจรีย์ -อัศว- -อัศวโกวิท -อัศวมุข -อัศวมุขี -อัศวเมธ -อัศวยุช -อัศวานึก -อัศวิน -อัศวินี -อัษฎ- -อัษฎกฉันท์ -อัษฎมงคล -อัษฎมะ -อัษฎางคิกมรรค -อัษฎายุธ -อัษฎาวุธ -อัษฏมงคล -อัส- -อัสดง -อัสดงคต -อัสดม -อัสดร -อัสนี -อัสมิมานะ -อัสมุขี -อัสสนี -อัสสะ -อัสสัตถพฤกษ์ -อัสสานิก -อัสสานีก -อัสสานึก -อัสสาสะ -อัสสุ -อัสสุชล -อัสสุธารา -อา -อ่า -อ้า -อากร -อากรแสตมป์ -อากังขา -อากัป -อากัปกิริยา -อากัมปนะ -อากัมปะ -อาการ -อาการ- -อาการนาม -อากาศ -อากาศ- -อากาศธาตุ -อากาศยาน -อากูล -อาเกียรณ์ -อาขยาต -อาขยาน -อาคเนย์ -อาคม -อาครหายณี -อาคันตุก- -อาคันตุกภัต -อาคันตุกวัตร -อาคันตุกะ -อาคาร -อาคารชุด -อาฆาต -อาฆาตนะ -อาฆาตมาดร้าย -อ่าง -อ้าง -อ่างเก็บน้ำ -อางขนาง -อ้างว้าง -อ้างอิง -อาจ -อาจม -อาจมน -อาจริย- -อาจริยวัตร -อาจริยวาท -อาจหาญ -อาจอง -อาจเอื้อม -อาจาด -อาจาร -อาจาร- -อาจารย์ -อาจารี -อาจิณ -อาจิณ- -อาจิณสมาจาร -อาเจียน -อาชญัปติ -อาชญัปติ์ -อาชญา -อาชญากร -อาชญากรรม -อาชญากรสงคราม -อาชญาบท -อาชญาบัตร -อาชญาศึก -อาชญาสิทธิ์ -อาชวะ -อาชา -อาชาน -อาชานิ -อาชาไนย -อาชีพ -อาชีว- -อาชีวก -อาชีวศึกษา -อาชีวะ -อ้าซ่า -อาญา -อาญาสิทธิ์ -อาฏานา -อาณัติ -อาณัติสัญญาณ -อาณา -อาณาเกษตร -อาณาเขต -อาณาจักร -อาณานิคม -อาณาประชาราษฎร์ -อาณาประโยชน์ -อาด -อาดๆ -อาดุร -อาดุลย์ -อาดูร -อาดูลย์ -อาเด๊ะ -อาตม- -อาตมทาน -อาตมภาพ -อาตมัน -อาตมา -อาตุร -อาถรรพ์ -อาถรรพณ์ -อาถรรพณะ -อาทร -อาทาตา -อาทาน -อาทิ -อาทิตย- -อาทิตย์ -อาทิตยมณฑล -อาทิตยวาร -อาทีนพ -อาทีนว -อาทึก -อาเทศ -อาธรรม -อาธรรม์ -อาธรรมิก -อาธรรมึก -อาธาน -อาธาร -อาน -อ่าน -อานก -อานน -อานนท์ -อานม้า -อ่านเล่น -อานะ -อานันท์ -อานันทนะ -อานัม -อานาปาน -อานาปาน- -อานาปานัสสติ -อานำ -อานิก -อานิสงส์ -อานุภาพ -อานุภาวะ -อาบ -อาบแดด -อาบน้ำร้อนมาก่อน -อาบเหงื่อต่างน้ำ -อาบเอิบ -อาบัติ -อาบัน -อาปณกะ -อาปณะ -อาปะ -อาปาน- -อาปานภูมิ -อาปานศาลา -อาปานะ -อาโป -อาโปกสิณ -อาโปธาตุ -อาพัด -อาพัทธ์ -อาพันธ์ -อาพันธนะ -อาพาธ -อาพาธิก -อาพาธึก -อาพิล -อาเพศ -อาภรณ์ -อาภัพ -อาภัสระ -อาภา -อาภากร -อาภาส -อาม -อ่าม -อามลก -อามัย -อามิษ -อามิส -อาย -อ้าย -อ้ายขิก -อ้ายเข้ -อ้ายงั่ว -อ้ายเจี๊ยว -อ้ายชื่น -อายต -อายตนะ -อายน -อ้ายบ้า -อ้ายเบี้ยว -อ้ายป๊อก -อายเหนียม -อ้ายอ้าว -อายัด -อายัต -อายัน -อายาจนะ -อายาน -อายุ -อายุกตกะ -อายุกษัย -อายุขัย -อายุความ -อายุตกะ -อายุธ -อายุร- -อายุรแพทย์ -อายุรเวช -อายุรเวท -อายุรศาสตร์ -อายุวัฒนะ -อายุษ -อาร์กอน -อารดี -อาร์ต -อารติ -อารทรา -อาร์ม -อารมณ์ -อารมณ์ขัน -อารย- -อารยชน -อารยชาติ -อารยธรรม -อารยประเทศ -อารยะ -อารยัน -อาระ -อารักขา -อารักษ์ -อารัญ -อารัญญิก -อารัณย์ -อารัณยกะ -อารัติ -อารัมภ- -อารัมภ์ -อารัมภกถา -อารัมภบท -อาราธน์ -อาราธนา -อาราธนาธรรม -อาราธนาพระปริตร -อาราธนาศีล -อาราม -อารามิก -อารี -อารีอารอบ -อารุม -อาลปน์ -อาลปนะ -อาละวาด -อาลักษณ์ -อาลัย -อาลัยอาวรณ์ -อาลัว -อาลิ -อาลี -อาโลก -อาโลก- -อาโลกกสิณ -อาโลกนะ -อาว -อ่าว -อ้าว -อาวรณ์ -อาวัชนาการ -อาวัล -อาวาส -อาวาสิก -อาวาห- -อาวาหะ -อาวิล -อาวุต -อาวุธ -อาวุโส -อาเวค -อาเวศ -อาศรม -อาศรมบท -อาศเลษา -อาศัย -อาศัยที่ -อาศัยลำแข้งตัวเอง -อาศิร- -อาศิรพจน์ -อาศิรพาท -อาศิรพิษ -อาศิรวจนะ -อาศิรวาท -อาศิรวิษ -อาศีรพิษ -อาศีรวิษ -อาศุ -อาเศียร- -อาเศียรพจน์ -อาเศียรพาท -อาเศียรวจนะ -อาเศียรวาท -อาษาฒ -อาสน -อาสน์ -อาสน์สงฆ์ -อาสนะ -อาสัญ -อาสัตย์ -อาสันนะ -อาสา -อาสาฬห- -อาสาฬห์ -อาสาฬหบูชา -อาสิญจ์ -อาสิน -อาสูร -อาแสะ -อาหต -อาหนี -อาหนู -อาหม -อาหร -อาหรัดกัดติกา -อาหรับ -อาหลักอาเหลื่อ -อาหาร -อาหารว่าง -อาหุดี -อาฬหก -อาฬาริก -อ่าองค์ -อำ -อ่ำ -อำแดง -อำนด -อำนนต์ -อำนรรฆ -อำนวย -อำนาจ -อำนาจบาตรใหญ่ -อำนาถ -อำนิฐ -อำนิษฐ์ -อำปลัง -อำพน -อำพราง -อำพะนำ -อำพัน -อำพันขี้ปลา -อำพันทอง -อำไพ -อำเภอ -อำเภอใจ -อำมร -อำมฤคโชค -อำมฤต -อำมหิต -อำมาตย์ -อำยวน -อำรุง -อำลา -อำอวม -อ้ำอึ้ง -อิก -อิง -อิงค์ -อิงอร -อิงแอบ -อิจฉา -อิฉัน -อิชยา -อิฏฐ- -อิฏฐารมณ์ -อิฐ- -อิฐผล -อิณ -อิด -อิดโรย -อิดหนาระอาใจ -อิดออด -อิดๆ ออดๆ -อิดเอื้อน -อิดๆ เอื้อนๆ -อิตถี -อิตถีลิงค์ -อิตเทรียม -อิตเทอร์เบียม -อิทธิ -อิทธิ- -อิทธิปาฏิหาริย์ -อิทธิพล -อิทธิฤทธิ์ -อิน -อินซูลิน -อินเดีย -อินเดียนแดง -อินเดียม -อินท์ -อินทขีล -อินทนิล -อินทนิลน้ำ -อินทผลัม -อินทร- -อินทร์ -อินทรธนู -อินทรวงศ์ -อินทรวิเชียร -อินทรศักดิ์ -อินทราณี -อินทราภิเษก -อินทรายุธ -อินทรี -อินทรีย- -อินทรีย์ -อินทรียโคจร -อินทรียญาณ -อินทรียสังวร -อินทีวร -อินทุ -อินธน์ -อินฟราเรด -อินัง -อินังขังขอบ -อิ่ม -อิ่มใจ -อิ่มตัว -อิ่มหนำ -อิ่มหมีพีมัน -อิ่มอกอิ่มใจ -อิ่มเอิบ -อิมัลชัน -อิริเดียม -อิริยา -อิริยาบถ -อิรุพเพท -อิลู -อิเล็กตรอน -อิเล็กทรอนิกส์ -อิเล็กโทน -อิศร -อิศวร -อิษฏ์ -อิษฏี -อิส -อิสตรี -อิสร- -อิสรภาพ -อิสระ -อิสริย- -อิสริยยศ -อิสริยะ -อิสริยาภรณ์ -อิสลาม -อิสสา -อิสัตรี -อิสิ -อิสี -อิหม่าม -อิหลักอิเหลื่อ -อี -อี่ -อี้ -อี๊ -อี๋ -อีก -อีก้อ -อีก๋อย -อีกา -อีก๋า -อีเก้ง -อีเกร็ง -อีเก้อีกัง -อีแก -อีแก่ -อีแก้ -อีโก้ง -อีโก๊ะ -อีคว่ำอีหงาย -อีจู้ -อีฉัน -อีฉุยอีแฉก -อีชุก -อี๊ด -อีดำอีแดง -อีตาล -อีเต้อ -อีโต้ -อีถ่าง -อีทุก -อีทุบ -อีเทอร์ -อีนุงตุงนัง -อีนูน -อีโน -อีโนงโตงเนง -อีบึ้ง -อีเป็ด -อีเป้า -อีแปะ -อีโปง -อีโปงครอบ -อีเพา -อีมู -อีรม -อีรุ้ง -อีลอง -อีล่อยป่อยแอ -อีลุ้ม -อีลุ่ยฉุยแฉก -อีเลิ้ง -อีแล่ง -อีโลง -อีศ -อีศวร -อีส -อีสา -อีสาน -อีสุกอีใส -อีหน็องอีแหน็ง -อีหรอบ -อีหรอบเดียวกัน -อีหลักอีเหลื่อ -อีหลัดถัดทา -อีหลี -อีหลุกขลุกขลัก -อีหลุกขลุกขลุ่ย -อีหลุยฉุยแฉก -อีเห็น -อีเหน็บ -อีเหนียว -อีเหละเขละขละ -อีเหละเขะขะ -อีโหน่อีเหน่ -อีโหลกโขลกเขลก -อี๋อ๋อ -อีแอ่น -อึ -อึก -อึ๊ก -อึกทึก -อึกอัก -อึง -อึ่ง -อึ้ง -อึงคะนึง -อึงมี่ -อึ่งยาง -อึ่งใหญ่ -อึงอล -อึ่งอ่าง -อึด -อึดใจ -อึดตะปือ -อึ้ดทึ่ด -อึดอัด -อึน -อืด -อืดอาด -อื่น -อื้น -อือ -อื้อ -อื้อฉาว -อื้ออึง -อุ -อุก -อุกกา -อุกกาบาต -อุกฉกรรจ์ -อุกฤษฏ์ -อุกลา -อุกลาบาต -อุกอาจ -อุค -อุคร -อุคห- -อุคหนิมิต -อุคหะ -อุโฆษ -อุ้ง -อุจ -อุจจาร- -อุจจารมรรค -อุจจาระ -อุจฉุ -อุจเฉท -อุจเฉท- -อุจเฉททิฐิ -อุจาด -อุชุ -อุฏฐาการ -อุณห- -อุณหภูมิ -อุณหะ -อุณหาการ -อุณหิส -อุณา -อุณานาภี -อุณาโลม -อุด -อุดเตา -อุดม -อุดม- -อุดมการณ์ -อุดมคติ -อุดมศึกษา -อุดร -อุดหนุน -อุดอู้ -อุดากัน -อุตดม -อุตดร -อุตตมะ -อุตตรผลคุนี -อุตตรภัทรบท -อุตตรอาษาฒ -อุตตราสาฬหะ -อุตตะภัททะ -อุตบล -อุตพิด -อุตพิดผี -อุตม- -อุตมภาพ -อุตมัตถ์ -อุตมางค์ -อุตร- -อุตรกุรุ -อุตรกุรู -อุตรนิกาย -อุตรผลคุนี -อุตรภัทรบท -อุตรา -อุตราภิมุข -อุตราวัฏ -อุตราษาฒ -อุตราสงค์ -อุตริ -อุตริมนุสธรรม -อุตลุด -อุตสาห- -อุตส่าห์ -อุตสาหกรรม -อุตสาหกรรมศิลป์ -อุตสาหะ -อุตุ -อุตุนิยมวิทยา -อุท- -อุทก -อุทก- -อุทกธาร -อุทกธารา -อุทกภัย -อุทกวิทยา -อุทกศาสตร์ -อุททาม -อุทธรณ์ -อุทธัจ -อุทบาตร -อุทบาน -อุทพินทุ์ -อุทยาน -อุทยานแห่งชาติ -อุทร -อุทริยะ -อุทลุม -อุทัช -อุทัย -อุทาน -อุทาร -อุทาหรณ์ -อุทิศ -อุทุมพร -อุเทศ -อุธัจ -อุ่น -อุ่นเครื่อง -อุ่นใจ -อุ่นหนาฝาคั่ง -อุนากัน -อุบ -อุบล -อุบอิบ -อุบะ -อุบ๊ะ -อุบัติ -อุบัติ- -อุบัติภัย -อุบัติเหตุ -อุบาท -อุบาทว์ -อุบาย -อุบาสก -อุบาสิกา -อุเบกขา -อุโบสถ -อุโบสถกรรม -อุโบสถหัตถี -อุป -อุปกรณ์ -อุปกรม -อุปการ- -อุปการะ -อุปการี -อุปกิณณะ -อุปกิเลส -อุปจาร -อุปถัมภ์ -อุปถัมภก -อุปทม -อุปทูต -อุปเทศ -อุปเท่ห์ -อุปธิ -อุปนัย -อุปนิกขิต -อุปนิกษิต -อุปนิษัท -อุปนิสัย -อุปบล -อุปบัติ -อุปบาท -อุปปาติก- -อุปพัทธ์ -อุปพันธ์ -อุปโภค -อุปมา -อุปมาน -อุปมาโวหาร -อุปมาอุปไมย -อุปไมย -อุปยุวราช -อุปโยค -อุปโยคบุรพบท -อุปรากร -อุปราคา -อุปราช -อุปริ -อุปริจร -อุปริพุทธิ -อุปริภาค -อุปริภาพ -อุปริม- -อุปริมปริยาย -อุปริวัสน์ -อุปริสัจ -อุปโลกน์ -อุปสมบท -อุปสมบทกรรม -อุปสมบัน -อุปสรรค -อุปสัมบัน -อุปสัมปทา -อุปสัมปทาเปกข์ -อุปสัมปทาเปกษ์ -อุปฮาด -อุปัชฌาย- -อุปัชฌาย์ -อุปัชฌายวัตร -อุปัชฌายะ -อุปัฏฐาก -อุปัฏฐานะ -อุปัทรพ -อุปัทว- -อุปัทวะ -อุปัทวันตราย -อุปาณ- -อุปาทาน -อุปาธยาย -อุปาหนา -อุภัย -อุ้ม -อุมงค์ -อุ้มชู -อุ้มท้อง -อุ้มน้ำ -อุ้มสม -อุโมงค์ -อุย -อุ่ย -อุ้ย -อุ๊ย -อุยยาน -อุยยาม -อุ้ยยุ้ย -อุยโยค -อุยหน่า -อุ่ยหน่า -อุ้ยอ้าย -อุร- -อุรค -อุรเคนทร์ -อุรณ -อุรพี -อุรส -อุระ -อุรังอุตัง -อุรัจฉทะ -อุรัจฉัท -อุรา -อุรุ -อุไร -อุลปนะ -อุลโลจ -อุลโลละ -อุลามก -อุลิด -อุลูก -อุโลก -อุแว้ -อุษณ- -อุษณกร -อุษณกาล -อุษณรัศมี -อุษณรูจี -อุษณาการ -อุษณีษ์ -อุษม -อุษมัน -อุษา -อุษาโยค -อุสภ -อุสวะ -อุสส่าห์ -อุสสาหะ -อุสา -อุสุ -อุสุการ -อุสุภ -อุสุม -อุหรับ -อุหลบ -อุเหม่ -อุฬาร -อู -อู่ -อู้ -อูฐ -อูด -อู่น้ำ -อูม -อูย -อูรุ -อู่ลอย -อู่แห้ง -อู้อี้ -อู๋อี๋ -เอ -เอ้ -เอก -เอก- -เอ๊ก -เอกเขนก -เอกจิต -เอกฉันท์ -เอกชน -เอกซเรย์ -เอกเทศ -เอกโทษ -เอกนัย -เอกบุคคล -เอกบุรุษ -เอกพจน์ -เอกภพ -เอกภริยา -เอกภักดิ์ -เอกภาคี -เอกภาพ -เอกม -เอกมัย -เอกรรถประโยค -เอกรส -เอกระ -เอกราช -เอกรูป -เอกลักษณ์ -เอกศก -เอกส -เอกสาร -เอกสารราชการ -เอกสารสิทธิ -เอกสิทธิ์ -เอกอัครราชทูต -เอกอัครสมณทูต -เอกอุ -เอกัคตา -เอกังสพยากรณ์ -เอกังสวาที -เอกา -เอ้กา -เอกาธิปไตย -เอเคอร์ -เอง -เอ็ง -เอ๋ง -เอ็ด -เอ็ดตะโร -เอ็ดอึง -เอตทัคคะ -เอ้เต -เอทิลแอลกอฮอล์ -เอน -เอ็น -เอนกาย -เอนไซม์ -เอ็นดู -เอนตัว -เอนหลัง -เอ็นอ่อน -เอนเอียง -เอม -เอ็มบริโอ -เอมอร -เอมโอช -เอย -เอ่ย -เอ๊ย -เอ๋ย -เอร็ดอร่อย -เอราวัณ -เอลา -เอลาฬุก -เอว -เอ๊ว -เอวัง -เอฬก -เอฬา -เออ -เอ่อ -เออๆ คะๆ -เออน่ะ -เออแน่ะ -เออร์เบียม -เอ้อระเหย -เอ้อเร้อ -เอ้อเร้อเอ้อเต่อ -เอออวย -เออออ -เออออห่อหมก -เอ้อเฮอ -เอ้แอ่น -เอ้ๆ แอ่นๆ -เอ๊ะ -เอะใจ -เอะอะ -เอะอะมะเทิ่ง -เอา -เอาการ -เอาการเอางาน -เอากุ้งฝอยไปตกปลากะพง -เอาข้างเข้าถู -เอางาน -เอาจมูกผู้อื่นมาหายใจ -เอาจริง -เอาจริงเอาจัง -เอาใจ -เอาใจช่วย -เอาใจใส่ -เอาชนะ -เอาชั้นเอาเชิง -เอาชัย -เอาชีวิต -เอาชื่อ -เอาเชิง -เอาใช้ -เอาดีเอาเด่น -เอาตาย -เอาแต่ -เอาแต่ใจ -เอาถ่าน -เอาเถิด -เอาเถิดเจ้าล่อ -เอาทองไปรู่กระเบื้อง -เอาทาร -เอาทารย์ -เอาน้ำเย็นเข้าลูบ -เอาน้ำลูบท้อง -เอาเนื้อหนูไปปะเนื้อช้าง -เอาบุญเอาคุณ -เอาปูนหมายหัว -เอาเป็นธุระ -เอาเป็นว่า -เอาเป็นเอาตาย -เอาเปรียบ -เอาผิด -เอาพิมเสนไปแลกเกลือ -เอามะพร้าวห้าวไปขายสวน -เอามือซุกหีบ -เอาไม้ซีกไปงัดไม้ซุง -เอาไม้สั้นไปรันขี้ -เอารส -เอารัดเอาเปรียบ -เอาเรื่อง -เอาฤกษ์ -เอาละ -เอาเลย -เอาเลือดกับปู -เอาหน้า -เอาหูไปนา เอาตาไปไร่ -เอาใหญ่ -เอาฬาร -เอาฬาริก -เอาฬารึก -เอาอกเอาใจ -เอาอย่าง -เอาอยู่ -เอาะลาย -เอิก -เอิกเกริก -เอิ้น -เอิบ -เอิบอาบ -เอียง -เอี้ยง -เอี้ยงคำ -เอียงอาย -เอียงเอน -เอียด -เอี๊ยด -เอียน -เอี่ยน -เอี่ยม -เอี๊ยม -เอี้ยมจุ๊น -เอี้ยมเฟี้ยม -เอี่ยมอ่อง -เอี่ยว -เอี้ยว -เอี่ยวลม -เอื้อ -เอื้อง -เอื้องครั่ง -เอื้องน้ำครั่ง -เอื้องศรีเที่ยง -เอื้องหนวดพราหมณ์ -เอือด -เอือน -เอื้อน -เอือนกิน -เอื้อเฟื้อ -เอือม -เอื้อม -เอื้อมอาจ -เอื่อย -เอื่อยๆ -เอื้อย -เอื้ออำนวย -แอ -แอ้ -แอ๋ -แอก -แอกทิเนียม -แอกน้อย -แอ่ง -แอ้งแม้ง -แอด -แอดๆ -แอ้ด -แอ้ดๆ -แอ๊ด -แอ๊ดๆ -แอ่น -แอนติเจน -แอนติบอดี -แอนติอิเล็กตรอน -แอ่นลม -แอโนด -แอบ -แอบแฝง -แอบอ้าง -แอบอิง -แอ้ม -แอมแปร์ -แอมมิเตอร์ -แอมโมเนีย -แอร่ม -แอลกอฮอล์ -แอลฟา -แอว -แอ่ว -แอ้วแซ่ว -แอสทาทีน -แอสไพริน -แอสฟัลต์ -แอหนัง -แออวย -แออัด -โอ -โอ่ -โอ้ -โอ๋ -โอก -โอ้ก -โอ๊ก -โอกาส -โอฆ- -โอฆชล -โอฆสงสาร -โอฆะ -โอ่ง -โองการ -โองโขดง -โอ่งมังกร -โอชะ -โอชา -โอโซน -โอฐ -โอด -โอดกาเหว่า -โอดครวญ -โอดโอย -โอ๊ต -โอตตัปปะ -โอ่โถง -โอ้โถง -โอทน- -โอทนะ -โอน -โอนกรรมสิทธิ์ -โอนชาติ -โอนอ่อน -โอนเอน -โอบ -โอบอ้อมอารี -โอบอุ้ม -โอบเอื้อ -โอปปาติกะ -โอภา -โอภาปราศรัย -โอภาส -โอม -โอย -โอ๊ย -โอร- -โอรส -โอละพ่อ -โอลิมปิก -โอ้โลม -โอ้โลมปฏิโลม -โอ้ว่า -โอวาท -โอษฐ- -โอษฐ์ -โอษฐชะ -โอษฐภัย -โอสถ -โอสถ- -โอสถกรรม -โอสาน -โอหนอ -โอห์ม -โอห์มมิเตอร์ -โอหัง -โอฬาร -โอฬาริก -โอฬารึก -โอ่อวด -โอ้อวด -โอ่อ่า -โอ้เอ้ -โอเอซิส -โอ้โฮ -ไอ -ไอ้ -ไอกรน -ไอโซโทป -ไอแดด -ไอตัว -ไอน์สไตเนียม -ไอพ่น -ไอพิษ -ไอยรา -ไอยเรศ -ไอราพต -ไอราวัณ -ไอศกรีม -ไอศวรรย์ -ไอศุริย- -ไอศุริยสมบัติ -ไอศูรย์ -ไอเสีย -ไอออน -ไอโอดีน -ฮ -ฮกเกี้ยน -ฮด -ฮวงซุ้ย -ฮวน -ฮ้วนหมู -ฮวบ -ฮวบฮาบ -ฮ่อ -ฮ้อ -ฮอกกี้ -ฮอด -ฮ่อม -ฮ่อมดง -ฮ่อมเมือง -ฮอร์โมน -ฮอลแลนด์ -ฮอลันดา -ฮะ -ฮะฮ้าย -ฮะไฮ้ -ฮัก -ฮักๆ -ฮังเล -ฮัจญ์ -ฮัจญะฮ์ -ฮัจญี -ฮั่น -ฮา -ฮ้า -ฮ่างหลวง -ฮาป่า -ฮาม -ฮาเร็ม -ฮาห์เนียม -ฮ้าไฮ้ -ฮิจเราะห์ -ฮินดู -ฮิปโปโปเตมัส -ฮิสทีเรีย -ฮีเลียม -ฮึ -ฮึก -ฮึกหาญ -ฮึกห้าว -ฮึกเหิม -ฮึกโหม -ฮึกฮัก -ฮึด -ฮึดฮัด -ฮึ่ม -ฮึย -ฮึยๆ -ฮึ่ย -ฮืดฮาด -ฮือ -ฮือๆ -ฮื่อ -ฮื้อ -ฮุด -ฮุบ -ฮุยเลฮุย -ฮู้ -ฮูก -ฮูม -เฮ -เฮกตาร์ -เฮกโตกรัม -เฮกโตเมตร -เฮกโตลิตร -เฮง -เฮงซวย -เฮ็ด -เฮโมโกลบิน -เฮย -เฮ้ย -เฮโรอีน -เฮลิคอปเตอร์ -เฮโลสาระพา -เฮ้ว -เฮอ -เฮ้อ -เฮฮา -เฮิรตซ์ -เฮี้ยน -เฮี้ยบ -เฮี้ยว -เฮือก -เฮือกๆ -เฮือกสุดท้าย -เฮือน -แฮ -แฮ่ -แฮก -แฮกๆ -แฮ่กึ๊น -แฮนด์บอล -แฮฟเนียม -แฮม -แฮะ -โฮ -โฮก -โฮกอือ -โฮกฮาก -โฮเต็ล -โฮลเมียม -โฮะ -ไฮ้ -ไฮโกรมิเตอร์ -ไฮดรา -ไฮโดรคาร์บอน -ไฮโดรเจน -ไฮโดรเจนซัลไฟด์ -ไฮโดรเจนเพอร์ออกไซด์ -ไฮโดรมิเตอร์ -ไฮไฟ -ไฮโล -ไฮฮี +#******************************************************************************* +#* +#* Copyright (C) 2003, National Electronics and Computer Technology Center +#* and others. All Rights Reserved. +#* +#******************************************************************************* +# Sorted Thai word list used for testing the ThaiCollator class. +# This list was taken from the Web: <http://www.links.nectec.or.th/itech/download.html> +# +# Lines starting with '#' are ignored; others are treated as single words +# in the UTF-8 encoding. +# +# +# License information: +# RIWord License +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright (c) 2003 National Electronics and Computer Technology Center and others +# All rights reserved. +# +# 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, and/or sell copies of the Software, and to permit persons +# to whom the Software is furnished to do so, provided that the above +# copyright notice(s) and this permission notice appear in all copies of +# the Software and that both the above copyright notice(s) and this +# permission notice appear in supporting documentation. +# +# 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 +# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in this Software without prior written authorization +# of the copyright holder. +# +# -------------------------------------------------------------------------------- +# All trademarks and registered trademarks mentioned herein are the property of their respective owners. +ก +ก็ +กก +ก๊ก +กกขนาก +กกช้าง +กกธูป +กกหู +ก กา +กกุธภัณฑ์ +ก ข +ก ข ไม่กระดิกหู +กง +ก่ง +ก้ง +ก๊ง +กงกอน +กงการ +กงเกวียน +กงเกวียนกำเกวียน +กงโก้ +กงค้าง +ก้งโค้ง +ก้งง +กงจักร +กงฉาก +กงไฉ่ +กงเต๊ก +กงพัด +กงวาน +กงสี +กงสุล +กช +กช- +กชกร +กฎ +กฎกระทรวง +กฎเกณฑ์ +กฎข้อบังคับ +กฎทบวง +กฎธรรมชาติ +กฎธรรมดา +กฎบัตร +กฎบัตรกฎหมาย +กฎบัตรสหประชาชาติ +กฎมนเทียรบาล +กฎยุทธวินัย +กฎศีลธรรม +กฎเสนาบดี +กฎหมาย +กฎหมายนานาประเทศ +กฎหมายปิดปาก +กฎหมายพาณิชย์ +กฎหมายแพ่ง +กฎหมายระหว่างประเทศ +กฎหมายเหตุ +กฎหมายอาญา +กฎหมู่ +กฎแห่งกรรม +กฎอัยการศึก +กฏิ +กฏุก +กฏุก- +กฏุกผล +กฐิน +กฐิน- +กฐินทาน +กฐินัตถารกรรม +กณิกนันต์ +กณิการ์ +กด +กดขี่ +กดคอ +กดชา +กดดัน +กดน้ำ +กดราคา +กดหัว +กดเหลือง +ก็ดี +ก็ได้ +กตเวทิตา +กตเวที +กตัญชลี +กตัญญุตา +กตัญญู +กตาธิการ +กตาภินิหาร +ก็ตาม +กติกา +กติกาสัญญา +กถา +กถามรรค +กถามรรคเทศนา +กถามุข +กถิกาจารย์ +กทรรป +กทลี +กน +ก่น +ก้น +กนก +ก้นกบ +ก้นกระดก +ก้นกุฏิ +ก้นขบ +ก้นครัว +ก่นโคตร +ก้นตะกรน +ก่นแต่ +กนน +กนนเชอ +ก่นนโถง +กนนเหิม +ก้นบึ้ง +ก้นปล่อง +ก้นปอด +ก้นปิด +ก้นปูด +ก้นแมลงสาบ +ก้นย้อย +ก่นสร้าง +ก้นหนัก +ก้นหย่อน +ก้นหอย +ก้นอ้อย +กนิษฐ- +กนิษฐ์ +กนิษฐภคินี +กนิษฐภาดา +กนิษฐา +กบ +กบฏ +กบดาน +กบเต้น +กบทู +กบทูด +กบบัว +กบเลือกนาย +กบาล +กบินทร์ +กบิล +กบี่ +กบี่ธุช +กบูร +กเบนทร์ +กโบร +กโบล +กปณ +กปณก +กปณา +กปิ +กปิตัน +กม +ก้ม +กมณฑลาภิเษก +กมณฑโลทก +กมล +กมลา +กมลาศ +กมลาสน์ +กมเลศ +ก้มหน้า +ก้มหน้าก้มตา +ก้มหลัง +ก้มหัว +กมัณฑลุ +กมุท +กร +กรก +กรกช +กรกฎ +กรกฎาคม +กรกฏ +กรง +กรงทอง +กรงเล็บ +กรชกาย +กรณฑ์ +กรณิการ์ +กรณี +กรณีย- +กรณีย์ +กรณียะ +กรด +กรน +กรนทา +กรนนเช้า +กรบ +กรบูร +กรพินธุ์ +กรภุม +กรม +กรมกรอม +กรมการ +กรมการพิเศษ +กรมเกรียม +กรมท่า +กรมท่าขวา +กรมท่าซ้าย +กรมธรรม์ +กรมธรรม์ประกันภัย +กรมนา +กรมวัง +กรมศักดิ์ +กรร +กรรกง +กรรกฎ +กรรกศ +กรรเกด +กรรไกร +กรรเจียก +กรรชิง +กรรชิด +กรรเชอ +กรรเช้า +กรรเชียง +กรรโชก +กรรซ้นน +กรรแซง +กรรฐ์ +กรรฐา +กรรณ +กรรณยุคล +กรรณา +กรรณิกา +กรรณิการ์ +กรรดิ +กรรดิก +กรรดึก +กรรตุ +กรรตุ- +กรรตุการก +กรรตุวาจก +กรรตุสัญญา +กรรไตร +กรรทบ +กรรแทก +กรรแทรก +กรรบาสิก +กรรบาสิกพัสตร์ +กรรบิด +กรรบูร +กรรปาสิก +กรรปุร +กรรพุม +กรรพุ่ม +กรรภิรมย์ +กรรม +กรรม- +กรรม์ +กรรมกร +กรรมกรณ์ +กรรมการ +กรรมการก +กรรมการิณี +กรรมขัย +กรรมคติ +กรรมชรูป +กรรมชวาต +กรรมฐาน +กรรมบถ +กรรมพันธุ์ +กรรม์ภิรมย์ +กรรมวาจก +กรรมวาจา +กรรมวาจาจารย์ +กรรมวิธี +กรรมวิบาก +กรรมเวร +กรรมศาลา +กรรมสัมปาทิก +กรรมสิทธิ์ +กรรมสิทธิ์เครื่องหมายและยี่ห้อการค้าขาย +กรรมสิทธิ์ผู้แต่งหนังสือ +กรรมสิทธิ์รวม +กรรมัชวาต +กรรมาชีพ +กรรมาธิการ +กรรมาร +กรรลี +กรรลึง +กรรษก +กรรสะ +กรรแสง +กรรหาย +กรรเหิม +กรรโหย +กรรเอา +กรรุณา +กรวด +กรวดน้ำ +กรวน +กรวบ +กรวม +กร้วม +กรวย +กรวยเชิง +กรวยบ้าน +กรวยป่า +กรวิก +กรสาปน์ +กรสุทธิ์ +กรอ +กร้อ +กรอก +กร็อกกร๋อย +กรอกแกรก +กรอกรุย +กรอง +กรองกรอย +กรองทอง +กรอด +กร่อน +กรอบ +กรอบเกรียบ +กรอบแกรบ +กรอบเช็ดหน้า +กรอบหน้า +กรอม +กร่อม +กร่อมๆ +กร่อย +กระ +กระกร +กระกรับกระเกรียบ +กระกรี๊ด +กระกรุ่น +กระกลับกลอก +กระกวด +กระกอง +กระกัด +กระกี้ +กระกูล +กระเกรอก +กระเกริก +กระเกริ่น +-กระเกรียบ +กระเกรียม +กระเกรียว +กระเกรี้ยว +กระเกลือก +กระคน +กระคาย +กระคุก +กระงกกระงัน +กระงกกระเงิ่น +กระง่องกระแง่ง +-กระงอด +กระง่อนกระแง่น +กระเง้ากระงอด +กระโงก +กระจก +กระจกเงา +กระจกตา +กระจกนูน +กระจกฝ้า +กระจกเว้า +กระจกหุง +กระจง +กระจร +กระจอก +กระจอกงอกง่อย +กระจอกชวา +กระจอกเทศ +กระจองหง่อง +กระจ๋องหง่อง +กระจองอแง +กระจ้อน +กระจอนหู +กระจ้อย +กระจ้อยร่อย +กระจ๋อหวอ +กระจะ +กระจัก +กระจัง +กระจังหลังเบี้ย +กระจัด +กระจัดกระจาย +กระจัดพลัดพราย +กระจับ +กระจับบก +กระจับปิ้ง +กระจับปี่ +กระจ่า +กระจ่าง +กระจาด +กระจาน +กระจาบ +-กระจาม +กระจาย +กระจายนะมณฑล +กระจายเสียง +กระจายหางดอก +กระจาว +-กระจิก +-กระจิ๋ง +กระจิด +กระจิบ +-กระจิบ +-กระจิ๋ม +กระจิริด +กระจิ๋ว +กระจิ๋วหลิว +กระจี้ +-กระจี๋ +กระจุก +กระจุกกระจิก +กระจุกกระจุย +กระจุ๋งกระจิ๋ง +กระจุบ +กระจุ๊บ +กระจุบกระจิบ +กระจุ๋มกระจิ๋ม +กระจุย +กระจุยกระจาย +กระจู้ +กระจู๋กระจี๋ +กระจูด +กระเจอะกระเจิง +กระเจา +กระเจ่า +กระเจ้า +กระเจาะ +กระเจิง +กระเจิดกระเจิง +กระเจี้ยง +กระเจี๊ยบ +กระเจี๊ยบเปรี้ยว +กระเจียว +กระเจี๊ยว +กระแจะ +กระโจน +กระโจม +กระโจมกระจาม +กระโจมทอง +กระโจมไฟ +กระโจมอก +กระฉง +กระฉอก +กระฉอกกระแฉก +กระฉ่อน +กระฉับกระเฉง +กระฉิ่ง +กระฉีก +กระฉูด +กระเฉก +-กระเฉง +กระเฉด +-กระแฉก +กระแฉ่น +กระโฉกกระเฉก +กระโฉม +กระชง +กระชดกระช้อย +-กระชวย +กระชอก +กระชอน +กระชอม +กระชอมดอก +กระช้อย +กระช้อยนางรำ +กระชัง +กระชังหน้าใหญ่ +กระชั้น +กระชับ +กระชาก +กระช่าง +กระชาเดิม +กระชาย +กระชิง +กระชิด +กระชุ +กระชุก +กระชุ่มกระชวย +กระเชอ +กระเชอก้นรั่ว +กระเชา +กระเช้า +กระเช้าผีมด +กระเช้าสวรรค์ +กระเช้าสีดา +กระเชียง +กระแชง +กระแชะ +กระโชก +กระโชกกระชั้น +กระโชกกระชาก +กระโชกโฮกฮาก +กระซวย +-กระซวย +-กระซ้อ +กระซ่องกระแซ่ง +กระซับ +กระซ่าง +กระซาบ +กระซิก +กระซิกๆ +กระซิกกระซวย +กระซิกกระซี้ +กระซิบ +กระซิบกระซาบ +-กระซี้ +กระซี้กระซ้อ +กระซุง +กระซุบกระซิบ +กระซุ้ม +กระซู่ +-กระเซ +กระเซ็น +กระเซอ +กระเซอะกระเซอ +กระเซอะกระเซิง +กระเซ้า +กระเซ้ากระซี้ +กระเซิง +-กระเซิง +กระแซ +กระแซะ +กระโซกระเซ +กระฎี +กระฎุมพี +กระดก +กระดกกระดนโด่ +กระด้ง +-กระดนโด่ +กระดวง +กระดวน +กระด้วมกระเดี้ยม +กระดอ +กระดอง +กระดองหาย +กระดอน +กระดอม +กระดักกระเดี้ย +กระดังงัว +กระดังงา +กระดังงาจีน +กระดังงาเถา +กระดังงาลนไฟ +กระดาก +กระดากกระเดื่อง +กระด้าง +กระด้างกระเดื่อง +กระดางลาง +กระดาด +กระดาดขาว +กระดาดดำ +กระดาดแดง +กระดาน +กระดานชนวน +กระดานชัย +กระดานดำ +กระดานโต้คลื่น +กระดานถีบ +กระดานพน +กระดานพิง +กระดานไฟ +กระดานลื่น +กระดานเลียบ +กระดานหก +กระดาษ +กระดาษแก้ว +กระดาษข่อย +กระดาษไข +กระดาษเงินกระดาษทอง +กระดาษซับ +กระดาษทราย +กระดาษเทศ +กระดาษฟาง +กระดาษว่าว +กระดาษสา +กระดำกระด่าง +กระดิก +กระดิกกระเดี้ย +กระดิ่ง +-กระดิ้ง +กระดิ่งทอง +กระดิบ +กระดิบๆ +กระดี่ +กระดี้กระเดียม +กระดี่ได้น้ำ +กระดึง +กระดึงช้างเผือก +กระดึงพระราม +กระดืบ +กระดุ +กระดุกกระดิก +กระดุ้งกระดิ้ง +กระดุบๆ +กระดุบกระดิบ +กระดุม +กระดูก +กระดูกกบ +กระดูกไก่ดำ +กระดูกขัดมัน +กระดูกเขียด +กระดูกแข็ง +กระดูกค่าง +กระดูกงู +กระดูกดำ +กระดูกร้องได้ +กระดูกสันหลัง +กระดูกอึ่ง +-กระเดก +กระเด้ง +กระเด็น +กระเด้า +กระเด้าดิน +กระเด้าลม +กระเดาะ +กระเดาะปาก +กระเดิด +-กระเดี้ย +กระเดียด +-กระเดียม +-กระเดี้ยม +กระเดือก +กระเดื่อง +กระแด็กๆ +กระแด้ง +กระแด้แร่ +กระแด่วๆ +กระแดะ +กระแดะกระแด๋ +กระโดก +กระโดกกระเดก +กระโดง +กระโดงคาง +กระโดงแดง +กระโดด +กระโดดร่ม +กระโดน +กระโดนดิน +กระใด +กระได +กระไดแก้ว +กระไดลิง +กระตรกกระตรำ +กระตร้อ +กระตรับ +กระตราก +-กระตรำ +กระตรุด +กระตรุม +กระต้วมกระเตี้ยม +กระต้อ +กระต่องกระแต่ง +กระต๊อบ +กระต้อยตีวิด +กระตัก +กระตั้ว +-กระตาก +กระต่าย +กระต่ายขูด +กระต่ายจันทร์ +กระต่ายจาม +กระต่ายจีน +กระต่ายชมจันทร์ +กระต่ายต้องแร้ว +กระต่ายตื่นตูม +กระต่ายเต้น +กระต่ายสามขา +กระต่ายหมายจันทร์ +กระติก +-กระติก +-กระติ้ง +กระติ๊ด +กระติ๊ดขี้หมู +กระติบ +กระตือรือร้น +กระตุก +กระตุกกระติก +กระตุ้งกระติ้ง +กระตุ่น +กระตุ้น +กระตูบ +กระเตง +กระเต็น +กระเตอะ +กระเตาะ +กระเตาะกระแตะ +-กระเตี้ยม +กระเตื้อง +กระแต +-กระแต่ง +กระแตแต้แว้ด +กระแตไต่ไม้ +กระแตวับ +-กระแตะ +กระโตกกระตาก +กระโตน +กระไตร +กระถด +กระถอบ +กระถั่ว +กระถาง +กระถิก +กระถิน +กระถินหอม +กระถึก +กระเถิบ +กระโถน +กระโถนท้องพระโรง +กระโถนปากแตร +กระโถนฤๅษี +กระทก +กระทง +กระทงแถลง +กระทงน้อย +กระทงป่า +กระทงเพชร +กระทงลอย +กระทงลาย +กระทงเหิน +กระทด +กระทดกระทัน +กระทบ +กระทบกระทั่ง +กระทบกระเทียบ +กระทบกระเทือน +กระทบกระแทก +กระทรวง +กระทวย +กระทอก +กระท้อน +กระท่อนกระแท่น +กระท่อม +กระท้อมกระแท้ม +กระท่อมขี้หมู +กระท่อมเลือด +กระทะ +กระทะใบบัว +กระทั่ง +กระทั่งติด +-กระทัน +-กระทั้น +กระทา +กระทาชาย +กระทาย +กระทายเหิน +กระทาสี +กระทาหอง +กระทำ +กระทำความผิด +กระทิกกระทวย +กระทิง +กระทิงโทน +กระทึง +กระทืบ +กระทืบธรณี +กระทืบยอบ +กระทุ +กระทุง +กระทุ้ง +กระทุงลาย +กระทุ้งเส้า +กระทุงหมาบ้า +กระทุงเหว +กระทุ่ม +กระทุ่มขี้หมู +กระทุ่มนา +กระทุ่มหมู +กระทู้ +กระทู้ถาม +กระเท่ +กระเท่เร่ +-กระเทียบ +กระเทียม +กระเทียมหอม +กระเทือน +กระเทือนใจ +กระเทื้อม +กระแทก +กระแทกกระทั้น +กระแท่น +-กระแท้ม +กระแทะ +กระไทชาย +กระนก +กระน่อง +กระนั้น +กระนี้ +กระโน้น +กระไน +กระบก +กระบกคาย +กระบถ +กระบม +กระบวน +กระบวนกระบิด +กระบวนการ +กระบวนการยุติธรรม +กระบวนความ +กระบวนจีน +กระบวย +กระบวร +กระบอก +กระบอกเพลา +กระบอกสูบ +กระบอกเสียง +กระบอกหัว +กระบอง +กระบองกลึง +กระบองกัน +กระบองเพชร +กระบองราหู +กระบะ +กระบัด +กระบั้วกระเบี้ย +กระบ่า +กระบ้า +กระบาก +กระบาย +กระบาล +กระบิ +กระบิ้ง +กระบิด +กระบิดกระบวน +กระบิล +กระบี่ +กระบี่กระบอง +กระบี่ธุช +กระบี่ลีลา +กระบือ +กระบือเจ็ดตัว +กระบุง +กระบุ่มกระบ่าม +กระบู้กระบี้ +กระบูน +กระบูนเลือด +กระบูร +กระเบง +กระเบญ +กระเบ็ดกระบวน +กระเบน +กระเบนเหน็บ +กระเบา +กระเบิก +-กระเบี้ย +กระเบียด +กระเบียดกระตัก +กระเบียดกระเสียร +กระเบียน +กระเบื้อง +กระเบื้องเกล็ดเต่า +กระเบื้องถ้วย +กระเบื้องถ้วยกะลาแตก +กระเบื้องปรุ +กระเบื้องรู +กระเบื้องหน้าวัว +กระแบ่ +กระแบก +กระแบกงา +กระแบะ +กระแบะมือ +กระโบม +กระปมกระปำ +กระปมกระเปา +กระปรอก +กระปรอกว่าว +กระปรี้กระเปร่า +กระปอก +กระป้อกระแป้ +กระป่อง +กระป๋อง +กระปอดกระแปด +กระป๋อหลอ +กระปั้วกระเปี้ย +-กระปำ +กระป่ำ +-กระปิ่ม +กระปุก +กระปุกหลุก +กระปุ่ม +กระปุ่มกระป่ำ +กระปุ่มกระปิ่ม +-กระเปา +กระเป๋า +กระเป๋าหนัก +กระเปาะ +กระเปาะเหลาะ +-กระเปี้ย +-กระแป้ +-กระแปด +กระโปก +กระโปรง +กระโปรงทอง +กระผม +-กระผลาม +กระผลีกระผลาม +กระผาน +กระผีก +กระผีกริ้น +กระพรวน +กระพริ้ม +กระพอก +กระพอกวัว +กระพอง +กระพ้อม +กระพัก +กระพัง +กระพังเหิร +กระพังโหม +กระพัด +กระพัดแม่ม่าย +กระพัตร +กระพัน +กระพั่น +กระพา +กระพาก +กระพี้ +กระพี้เขาควาย +กระพือ +กระพือข่าว +กระพือปีก +กระพุ้ง +กระพุ่ม +กระพุ่มมือ +กระเพลิศ +กระเพาะ +กระเพาะปลา +กระเพิง +กระเพื่อม +กระแพง +กระแพ้ง +กระฟัดกระเฟียด +-กระฟาย +กระฟูมกระฟาย +-กระเฟียด +กระมล +กระมอบ +กระมอมกระแมม +กระมัง +กระมัน +กระมิดกระเมี้ยน +กระมึน +กระมุท +กระเมาะ +-กระเมี้ยน +-กระแมม +กระย่อง +-กระย่อง +กระย่องกระแย่ง +กระย่อน +กระย่อม +กระยา +กระยาคชวาง +กระยาง +กระยาจก +-กระยาด +กระยาดอก +กระยาดอกเบี้ย +กระยาทาน +กระยาทิพย์ +กระยาบวช +กระยาเบี้ย +กระยารงค์ +กระยาเลย +กระยาสนาน +กระยาสังเวย +กระยาสังแวง +กระยาสารท +กระยาเสวย +กระยาหงัน +กระยาหาร +กระยิก +กระยิ้มกระย่อง +กระยึกกระยือ +กระยืดกระยาด +กระเย้อกระแหย่ง +-กระแย่ง +กระรอก +กระรอกน้ำข้าว +กระเรียน +กระโรกน้ำข้าว +กระโรกใหญ่ +กระไร +กระลด +กระลบ +กระลอก +กระลอม +กระละหล่ำ +กระลัด +กระลับ +กระลับกระเลือก +กระลัมพร +กระลา +กระลาการ +กระลาพิน +กระลายกระลอก +กระลาศรี +กระลำ +กระลำพร +กระลำพัก +กระลำพุก +กระลิง +กระลี +กระลึง +กระลุมพาง +กระลุมพุก +กระลุมพู +กระลูน +กระลู่น์ +กระเล็น +กระเลียด +กระเลือก +กระโลง +กระวน +กระวนกระวาย +กระวัด +กระว่า +-กระวาด +กระวาน +กระวาย +กระวายกระวน +กระวิน +กระวี +กระวีกระวาด +กระวูดกระวาด +กระเวน +กระเวนกระวน +กระเวยกระวาย +กระแวน +กระโวยกระวาย +กระศก +กระศัย +กระษัตริย์ +กระษัตรี +กระษัย +กระษัยกล่อน +กระษาปณ์ +กระษิร +กระเษม +กระเษมสานต์ +กระเษียร +กระสง +-กระสน +กระสบ +กระสม +กระสรวล +กระสร้อย +กระสวน +กระสวย +กระสอบ +กระสะ +กระสัง +กระสัน +กระสับกระส่าย +กระสา +กระสานติ์ +กระสาบ +กระสาย +-กระส่าย +กระสินธุ +กระสือ +กระสือดูด +กระสุงกระสิง +กระสุน +กระสุนปืน +กระสุนวิถี +กระสูทธิ์ +กระสูบ +กระเสด +กระเส็นกระสาย +กระเส่า +กระเสาะกระแสะ +กระเสียน +กระเสียร +กระเสือกกระสน +กระแส +กระแสการเงิน +กระแสความ +กระแสง +กระแสจิต +กระแสตรง +กระแสน้ำ +กระแสพระราชดำรัส +กระแสรับสั่ง +กระแสลม +กระแสสลับ +กระแสเสียง +กระแสะ +กระโสง +กระไส +กระหง่อง +กระหน +กระหนก +กระหนกกินรี +กระหนกนฤมิต +กระหนกนารี +กระหน่อง +กระหนาก +กระหนาบ +กระหนาบคาบเกี่ยว +กระหน่ำ +กระหมวด +กระหมอบ +กระหม่อม +กระหม่อมบาง +กระหมั่ง +กระหม่า +-กระหมิด +กระหมิบ +กระหมุดกระหมิด +กระหมุ่น +กระหมุบ +กระหมุบกระหมิบ +กระหย่ง +กระหยด +กระหยบ +กระหย่อน +กระหย่อม +กระหยะ +กระหยัง +กระหยับ +กระหยิ่ม +กระหรอด +กระหริ่ง +กระหวน +กระหวัด +กระหวัดเกล้า +กระหว่า +กระหอง +กระหัง +กระหัด +กระหาง +กระหาย +กระหึม +กระหึ่ม +กระหืดกระหอบ +กระเห็น +กระเหน็จ +กระเหน็จกระแหน่ +กระเหนียด +กระเหม็ดกระเหมียด +กระเหม็ดกระแหม่ +กระเหม่น +กระเหม่า +กระเหลียก +กระเหว่า +กระเห่อ +กระเหิม +กระเหี้ยนกระหือรือ +กระแห +กระแหทอง +-กระแหน +กระแหน่ +กระแหนบ +กระแหนะ +กระแหนะกระแหน +กระแหมบ +กระแหม่ว +กระแหย่ง +กระแหร่ม +กระแหล่ง +กระโห้ +กระโหนด +กระโหม +กระโหย +กระโหย่ง +-กระอ่วน +กระอวล +กระอ้อกระแอ้ +กระออดกระแอด +กระออบ +กระออม +กระอ้อมกระแอ้ม +กระออมน้ำ +กระอัก +กระอักกระอ่วน +กระอักกระไอ +กระอั้วแทงควาย +กระอ้า +กระอาน +กระอิด +กระอิดกระเอื้อน +กระอึก +กระอึกกระอัก +กระอึด +กระอืด +กระอุ +กระอุก +กระเอบ +กระเอา +กระเอิก +กระเอิบ +-กระแอ้ +กระแอก +-กระแอด +กระแอบ +กระแอม +-กระแอ้ม +กระไอ +กระไอกระแอม +กรัก +กรักขี +กรัง +กรัชกาย +กรัณฑ- +กรัณฑ์ +กรัณย์ +กรัน +กรับ +กรัม +กราก +กราง +กร่าง +กรางเกรียง +กราด +-กราด +กราดเกรี้ยว +กราดวง +กราน +กร้าน +กรานกฐิน +กราบ +กราบพระ +กราฟ +กราม +กรามช้าง +กรามพลู +กราย +กร่าย +กราล +กราว +กร้าว +กราวด่าง +กราวรูด +กราสิก +กรำ +กร่ำ +กร่ำกรุ่น +กริก +กริ๊ก +กริกกริว +กริกกรี +กริ่ง +กริ๊ง +กริงกริว +กริ้งกริ้ว +กริ่งเกรง +กริ่งใจ +กริช +กริณี +กริตย- +กริน +กรินทร์ +กรินี +กริบ +กริม +กริ่ม +กริยา +กริยานุเคราะห์ +กริยาวิเศษณ์ +กริยาวิเศษณ์วลี +กริยาวิเศษณานุประโยค +กริว +กริ้ว +กริวกราว +กริวลาย +กรี +กรีฑา +กรีฑากร +กรีฑาภิรมย์ +กรีฑารมย์ +กรีฑาสถาน +กรีด +กรี๊ด +กรีดกราด +กรีดกราย +กรีดนิ้ว +กรีธา +กรีธาทัพ +กรีธาพล +กรีษ +กรีส +กรึง +กรุ +กรุก +กรุกกรัก +กรุกกรู๊ +กรุง +กรุ้งกริ่ง +กรุงเขมา +กรุงพาลี +กรุณ +กรุณา +กรุณาทฤคุณ +กรุน +กรุ่น +กรุบ +กรุบกริบ +กรุ่ม +กรุ้มกริ่ม +กรุย +กรุยกราย +กรุยเกรียว +กรู +กรูด +กรูม +กเรณุ +กเรณุกา +กเรนทร +กเรนทร์ +กฤช +กฤด- +กฤดยาเกียรณ +กฤดา +กฤดาการ +กฤดาญชลี +กฤดาธิการ +กฤดาภินิหาร +กฤดาอัญชลี +กฤดิ +กฤดีกา +กฤตติกา +กฤตย- +กฤตยฎีกา +กฤตยา +กฤติกา +กฤติยา +กฤษฎา +กฤษฎาญ +กฤษฎาญชลิต +กฤษฎาญชลี +กฤษฎาญชวลิตวา +กฤษฎาญชวลิศ +กฤษฎาญชวเลศ +กฤษฎาญชุลี +กฤษฎาธาร +กฤษฎาภินิหาร +กฤษฎี +กฤษฎีกา +กฤษณา +กล +กล- +กลไก +กลฉ้อฉล +กลด +กลดกำมะลอ +กลดพระสุเมรุ +กล่น +กลบ +กลบเกลี่ย +กลบเกลื่อน +กลบท +กลบบัตรสุมเพลิง +กลพยาน +กลไฟ +กลม +กลมกล่อม +กลมกลืน +กลมกลืนกลอน +กลมเกลียว +กลมดิก +กลมเป็นลูกมะนาว +กลมภ +กลเม็ด +กลยุทธ์ +กลละ +กลวง +กลวม +กล้วย +กล้วยกล้าย +กล้วยแขก +กล้วยงวงช้าง +กล้วยเต่า +กล้วยใต้ +กล้วยน้อย +กล้วยไม้ +กล้วยสั้น +กล้วยหมูสัง +กลวิธี +กลศ +กลศาสตร์ +กลหาย +กลเหย +กล้อ +กลอก +กลอกกลับ +กลอกแกลก +กลอง +กล่อง +กล้อง +กล้องแกล้ง +กล้องจุลทรรศน์ +กล้องตุด +กล้องโทรทรรศน์ +กลองเพล +กล้องระดับ +กล้องวัดมุม +กล้องสนาม +กล้องสลัด +กล้องส่องทางไกล +กล้องสำรวจ +กลอน +กล่อน +กล้อน +กลอนด้น +กลอนตลาด +กลอนลิลิต +กลอนสด +กลอนสวด +กลอนสุภาพ +กล่อม +กล่อมเกลา +กล่อมเกลี้ยง +กล้อมแกล้ม +กล่อมท้อง +กล่อมมดลูก +กล่อมหอ +กลอย +กลอักษร +กลอุปกรณ์ +กลัก +กลัง +กลัด +กลัดกลุ้ม +กลัดมัน +กลั่น +กลั้น +กลั่นกรอง +กลั่นแกล้ง +กลั้นใจ +กลันท +กลันทก์ +กลับ +กลับกลอก +กลับกลาย +กลับเกลือก +กลับคำ +กลับคืน +กลับตาลปัตร +กลับเนื้อกลับตัว +กลับไปกลับมา +กลับหน้ามือเป็นหลังมือ +กลัมพก +กลัมพร +กลัมพัก +กลัว +กลั้ว +กลั้วเกลี้ย +กลั้วคอ +กลัวน้ำ +กลัวลาน +กลา +กล่า +กล้า +กลาก +กลากลาด +กลาง +กลางเก่ากลางใหม่ +กลางคน +กลางคัน +กลางค่ำ +กลางคืน +กลางแจ้ง +กลางใจมือ +กลางช้าง +กลางดิน +กลางดึก +กลางเดือน +กลางทาสี +กลางนอก +กลางบ้าน +กลางแปลง +กลางเมือง +กลางวัน +กลางหาว +กลาด +กลาดเกลื่อน +กล้าได้กล้าเสีย +กล้านักมักบิ่น +กลาบาต +กลาป +กล้าม +กลาย +กล้าย +กลายกลอก +กล่าว +กล่าวเกลี้ยง +กล่าวขวัญ +กล่าวโทษ +กล่าวหา +กล่าวโอม +กลาโหม +กล่ำ +กล้ำ +กล้ำกราย +กล้ำกลืน +กลิ่ง +กลิ้ง +กลิ้งกลอก +กลิ้งกลางดง +กลิ้งเกลือก +กลิงค์ +กลิ้งครกขึ้นเขา +กลิ้งเป็นลูกมะนาว +กลิ่น +กลิ่นอาย +กลิ้ม +กลี +กลี่ +กลีบ +กลีบตา +กลีบบัว +กลีบหิน +กลึง +กลึ้ง +กลึงกล่อม +กลึงค์ +กลืน +กลืนไม่เข้าคายไม่ออก +กลุ่ม +กลุ้ม +กลุ้มใจ +กลุ้มรุม +กลุ้มอกกลุ้มใจ +กลู่ +กลูโคส +กลูน +กลูน์ +กเลวระ +กวด +กวดขัน +กวน +กวนน้ำให้ขุ่น +กวม +กวย +กวยจั๊บ +กวยจี๊ +ก๋วยเตี๋ยว +กวะ +กวะกวัก +กวะแกว่ง +กวัก +กวัด +กวัดแกว่ง +กวัดไกว +กวัดไกวไสส่ง +กวา +กว่า +กว้า +กวาง +กว่าง +กว้าง +กว้างขวาง +กวางเขน +กวางแขม +กวางจุก +กวางโจน +กว่างชน +กวางชะมด +กว่างโซ้ง +กวางเดินดง +กวางตุ้ง +กวางทราย +กวางทอง +กวางป่า +กวางม้า +กว้างใหญ่ +กว่าชื่น +กวาด +กวาดต้อน +กวาดตา +กวาดล้าง +กวาน +กว่าน +กว้าน +กว๊าน +กว่าเพื่อน +กว้าว +กวาวเครือ +กวิน +กวี +กวีนิพนธ์ +กษณะ +กษมา +กษัตร +กษัตรา +กษัตราธิราช +กษัตริย์ +กษัตริยชาติ +กษัตรี +กษัตรีย์ +กษัตรีศูร +กษัย +กษัย- +กษัยกล่อน +กษัยการ +กษัยน้ำ +กษัยเลือด +กษาปณ์ +กษิดิ +กษีณาศรพ +กษีดิ +กษีร +กษีร- +กษีรธารา +กษีรรส +กษีรามพุ +กษีรารณพ +กสานติ์ +กสิ +กสิกร +กสิกรรม +กสิณ +กหังปายา +ก หัน +กหาปณะ +ก็แหละ +กเฬวราก +กอ +ก่อ +ก้อ +ก๊อ +กอก +ก๊อก +ก่อกรรมทำเข็ญ +ก่อกวน +ก่อการ +กอแก +กอง +ก่อง +ก้อง +กองกลาง +กองกอย +กองกูณฑ์ +กองเกิน +กองเกียรติยศ +กองข้าว +กองโจร +กองทัพ +กองทัพน้อย +กองทุน +กองพล +กองพัน +กองฟอน +กองมรดก +กองร้อย +กองหนุน +กอซ +กอด +กอดแข้งกอดขา +กอดมือกอดตีน +กอดอก +ก่อตั้ง +ก่อน +ก้อน +ก้อนขี้หมา +ก้อนเส้า +กอบ +กอบโกย +กอบด้วย +กอบนาง +ก๊อบปี้ +กอปร +ก้อม +กอมก้อ +ก่อมก้อ +กอย +ก้อย +ก๋อย +ก้อร่อ +ก้อร่อก้อติก +ก่อร่างสร้างตัว +กอริลลา +ก่อฤกษ์ +กอล์ฟ +ก่อแล้วต้องสาน +กอและ +ก่อสร้าง +ก่อหวอด +กอเอี๊ยะ +กะ +กะกร่อม +กะกร้าว +กะกลิ้ง +กะก่อง +กะกัง +กะกึก +กะเกณฑ์ +กะเกาะ +กะโกระ +กะง้อนกะแง้น +กะจัง +กะแจะ +กะชะ +กะชัง +กะชามาศ +กะชิง +กะชึ่กกะชั่ก +กะแช่ +กะซวก +กะซ้าหอย +กะซี่ +กะโซ่ +กะโซ้ +กะดก +กะดง +กะดวน +กะดอกๆ +กะดะ +กะดังบาย +กะดัด +กะด้าง +กะดำกะด่าง +กะดี +กะดี่ +กะดุ้ง +กะเด้ +กะเดก +กะเดี๋ยว +กะได +กะตรุด +กะตอก +กะต่อย +กะตัก +กะตัง +กะตังกะติ้ว +กะตังใบ +กะตังมูตร +กะต่า +กะต๊าก +กะต้ำ +กะติ๊กริก +กะติงกะแตง +กะตีบ +กะตึงกะแตง +กะตุ๊ก +กะตุด +กะตุมู +กะตูก +กะเตก +กะเตงๆ +กะเตงเรง +กะแตว +กะแต่ว +กะโต๊ก +กะโตงกะเตง +กะโต้งโห่ง +กะถัว +กะทกรก +กะทอ +กะทัง +กะทังหัน +กะทัดรัด +กะทัน +กะทันหัน +กะทับ +กะทำ +กะทิ +กะทิขูด +กะทือ +กะทุน +กะเทย +กะเทยนางหมั่น +กะเทาะ +กะแท้ +กะแท่ง +กะแทน +กะนวล +กะนัด +กะบอนกะบึง +กะบ่อนกะแบ่น +กะบัง +กะบั้ง +กะบังรังเฝือก +กะบังลม +กะบังหน้า +กะบิ้ง +กะบิล +กะบึงกะบอน +กะบุด +กะเบ้อ +กะเบียน +กะเบือ +กะปริดกะปรอย +กะปริบ +กะปริบกะปรอย +กะปลกกะเปลี้ย +กะปวกกะเปียก +กะปอม +กะปอมขาง +กะปะ +กะปั่น +กะป้ำกะเป๋อ +กะปิ +กะปู +กะปูด +กะปูดหลูด +กะเปะ +กะเปิ๊บกะป๊าบ +กะเปียด +กะแป้น +กะแปะ +กะโปรง +กะโปโล +กะผลุบกะโผล่ +กะเผ่น +กะเผลก +กะโผลกกะเผลก +กะพง +กะพรวดกะพราด +กะพร่องกะแพร่ง +กะพริบ +กะพรุน +กะพรูดกะพราด +กะพล้อ +กะพล่องกะแพล่ง +กะพ้อ +กะเพรา +กะเพียด +กะเพียดช้าง +กะเพียดหนู +กะมง +กะม่ง +กะเม็ง +กะเม็งตัวผู้ +กะเมีย +กะยุ +กะร่องกะแร่ง +กะระตะ +กะระหนะ +กะรัง +กะรัต +กะรัตหลวง +กะราง +กะรางหัวขวาน +กะริง +กะริงกะเรียด +กะรุงกะรัง +กะรุ่งกะริ่ง +กะรุน +กะเร +กะเรกะร่อน +กะเร่กะร่อน +กะเร่อ +กะเร่อกะร่า +กะเรี่ยกะราด +กะโรกะเร +กะลวย +กะลอ +กะล่อกะแล่ +กะลอจี๊ +กะล่อน +กะล่อมกะแล่ม +กะล่อยกะหลิบ +กะละปังหา +กะละมัง +กะละแม +กะละออม +กะลังตังไก่ +กะลัน +กะลันทา +กะลา +กะลาง +กะลาซอ +กะลาสี +กะลำพอ +กะลิง +กะลิงปลิง +กะลิ้มกะเหลี่ย +กะลิอ่อง +กะลุมพี +กะเล็ง +กะเล่อกะล่า +กะเลิด +กะเลียว +กะแล +กะโล่ +กะโลง +กะวอกกะแวก +กะวะ +กะส้มชื่น +กะส้าหอย +กะหนอกะแหน +กะหน็องกะแหน็ง +กะหนะ +กะหนุงกะหนิง +กะหมอก +กะหร่อง +กะหรอด +กะหร็อมกะแหร็ม +กะหราน +กะหรี่ +กะหรี่ปั๊บ +กะหลาป๋า +กะหล่ำ +กะหลี่ +กะหลีกะหลอ +กะหลุกกะหลิก +กะหำ +กะหำแพะ +กะหือ +กะหูด +กะเหรี่ยง +กะเหลาะเปาะ +กะแหยก +กะแหะ +กะโหลก +กะโหล้ง +กะไหล่ +กะอวม +กะออม +กะอาน +กะอาม +กะอิด +กะอุบ +กะเอว +กะแอ +กะแอน +กัก +กั๊ก +กักกรา +กักกัน +กักการุ +กักขฬะ +กักขัง +กักคุม +กักด่าน +กักตัว +กักตุน +กักบริเวณ +กัง +กั้ง +กังก +กั้งกระดาน +กังก้า +กังเกียง +กังขา +กังฉิน +กังฟู +กังวล +กังวาน +กังเวียน +กังส +กังสดาล +กังไส +กังหัน +กังหันใบพัด +กังหันไอพ่น +กัจฉปะ +กัจฉะ +กัจฉา +กัญ +กัญจุก +กัญจุการา +กัญชา +กัญญา +กัฐ +กัณฏกะ +กัณฐ- +กัณฐก +กัณฐกะ +กัณฐชะ +กัณฐัศ +กัณฐัศว์ +กัณฐา +กัณฐี +กัณฑ์ +กัณฑ์เทศน์ +กัณณ์ +กัณห- +กัณหธรรม +กัณหปักษ์ +กัด +กัดป่า +กัดฟัน +กัดลาก +กัดวาง +กัดหางตัวเอง +กัตติกมาส +กัตติกา +กัตติเกยา +กัตรทัณฑ์ +กัตรา +กัทลี +กัน +กั่น +กั้น +กันกง +กั้นกาง +กันเกรา +กันไกร +กันเขากันเรา +กันชน +กันชิง +กันชีพ +กันเชอ +กั้นซู่ +กันแซง +กันดอง +กันดาร +กันดาล +กันแดด +กันได +กันต์ +กันตัง +กันตัว +กันไตร +กันทร +กันทรากร +กันทะ +กันท่า +กันแทรก +กั้นบัง +กันพิรุณ +กันภัย +กันภิรมย์ +กันเมียง +กันย์ +กันยา +กันยายน +กันลง +กันลอง +กันลึง +กันและกัน +กันสาด +กันแสง +กั้นหยั่น +กันเอง +กันเอา +กับ +กับแก้ +กับแกล้ม +กับข้าว +กับบุเรศ +กับระเบิด +กัป +กัปตัน +กัปนก +กัปบาสิก +กัปปาสิก +กัปปิย- +กัปปิยการก +กัปปิยภัณฑ์ +กัปปิยโวหาร +กัปปิยะ +กัปปีย์ +กัมบน +กัมป- +กัมปน- +กัมปนาการ +กัมปนาท +กัมประโด +กัมปี +กัมพล +กัมพุช +กัมพุช- +กัมพุชพากย์ +กัมพู +กัมพูชา +กัมโพช +กัมมัชวาต +กัมมัฏฐาน +กัมมันตภาพรังสี +กัมมันตรังสี +กัมมาร +กัมลาศ +กัยวิกัย +กัลชาญ +กัลบก +กัลป- +กัลป์ +กัลปนา +กัลปพฤกษ์ +กัลปังหา +กัลปาวสาน +กัลปิต +กัลพุม +กัลเม็ด +กัลยา +กัลยาณ- +กัลยาณมิตร +กัลยาณี +กัลยาเยี่ยมห้อง +กัลเว้า +กัลหาย +กัลโหย +กัลออม +กัลเอา +กัศมล +กัศยป +กัษณ +กา +ก๋า +กาก +กาก- +กากกะรุน +กากขยาก +กากข้าว +กากคติ +กากณึก +กากบาท +กากเพชร +กากภาษา +กากรุน +กากหมู +กากะทิง +กากะเยีย +ก๋ากั่น +กากี +กากีแกมเขียว +กาคาบพริก +กาง +ก้าง +กางเกง +กางเกียง +ก้างขวางคอ +กางของ +กางขี้มอด +กางเขน +ก้างปลา +กางเวียน +กาจับหลัก +กาชาด +ก๊าซ +ก๊าซไข่เน่า +ก๊าซเฉื่อย +ก๊าซน้ำตา +กาซะลอง +กาซะลองคำ +กาญจน- +กาญจนา +กาฐ +กาด +ก๊าด +กาน +ก่าน +ก้าน +ก๊าน +ก้านขด +ก้านแข็ง +ก้านคอ +กานดา +กานต์ +ก้านตอง +ก้านต่อดอก +กานท์ +กานน +ก้านบัว +ก้านพร้าว +กานพลู +ก้านมะพร้าว +ก้านยาว +ก้านแย่ง +ก้านเหลือง +กาน้า +กาน้ำ +กาบ +ก้าบๆ +กาบกี้ +กาบเขียง +กาบคู่ +กาบเดียว +กาบเดี่ยว +กาบน้ำจืด +กาบบัว +กาบปูเล +กาบพรหมศร +กาบหอย +กาบุรุษ +กาบู +กาเปี้ยด +กาฝาก +กาพย์ +กาพย์กลอน +กาฟักไข่ +กาเฟอีน +กาแฟ +กาม +กาม- +ก้าม +ก้ามกราม +กามกรีฑา +กามกิจ +ก้ามกุ้ง +ก้ามเกลี้ยง +กามคุณ +กามฉันท์ +ก้ามดาบ +กามตัณหา +กามท- +กามเทพ +กามน +ก้ามปู +ก้ามปูหลุด +กามภพ +กามราค +กามโรค +กามวิตก +กามวิตถาร +กามสมังคี +กามัช +กามา +กามาทีนพ +กามาพจร +กามามิศ +กามารมณ์ +กามาวจร +กามินี +กามิศ +กาเมศ +กาเมสุมิจฉาจาร +กาโมทย +กาย +กาย- +ก่าย +กายกรรม +ก่ายกอง +กายทวาร +กายบริหาร +กายพันธน์ +กายภาพ +กายภาพบำบัด +กายวิภาคศาสตร์ +กายสิทธิ์ +กายาพยพ +กายินทรีย์ +กาเยน +กาเยนทรีย์ +การ +การก +การกลั่นทำลาย +การขนส่งมวลชน +การครัว +การคลัง +การเงิน +การจร +การณ์ +การต่างประเทศ +การ์ตูน +การเต +การนำ +การบ้าน +การบ้านการเมือง +การบุเรียน +การบูร +การบูรป่า +การเปรียญ +การแผ่รังสี +การพา +การเมือง +การย์ +การเรือน +การละเล่น +การวิก +การเวก +การะเกด +การะบุหนิง +การัณย์ +การันต์ +การางหัวขวาน +การิตการก +การิตวาจก +การุญ +การุณย์ +กาเรการ่อน +กาเรียน +กาเรียนทอง +กาล +กาล- +กาลกรรณี +กาลกิณี +กาลกิริยา +กาลจักร +กาลเทศะ +กาลโยค +กาลสมุตถาน +กาลักน้ำ +กาลัญญุตา +กาลัญญู +กาลัด +กาลานุกาล +กาลิก +กาลี +กาแล็กซี +กาแล็กโทส +กาว +ก้าว +ก้าวก่าย +ก้าวเฉียง +ก้าวร้าว +ก้าวล่วง +กาววาว +ก้าวหน้า +กาวาง +กาเวียน +กาแวน +กาศิก +กาศิก- +กาศิกพัสตร์ +กาษฐะ +กาษา +กาสร +กาสะ +กาสัก +กาสา +กาสามปีก +กาสาร +กาสาว- +กาสาวพัสตร์ +กาสาวะ +กาสิโน +กาหล +กาหลง +กาหลงรัง +กาหลา +กาหัก +กาเหว่า +กาไหล่ +กาฬ +กาฬ- +กาฬจักร +กาฬปักษ์ +กาฬปักษี +กาฬพฤกษ์ +กาฬโรค +กาฬวาต +กาฬาวก +กาฮัง +กำ +ก่ำ +ก้ำ +กำกวม +กำกัด +กำกับ +ก้ำกึ่ง +กำกูน +กำเกรียก +ก้ำเกิน +กำเกียง +กำขี้ดีกว่ากำตด +กำคูน +ก่ำเคือ +กำจร +กำจัด +กำจาย +กำชับ +กำชับกำชา +กำชำ +กำโชก +กำซาบ +กำซำ +กำด้น +กำดัด +กำดาล +กำเดา +กำเดาะ +ก่ำต้น +กำตัด +กำตาก +กำถั่ว +กำทวน +กำธร +กำนล +กำนัด +กำนัน +กำนัล +กำเนิด +กำเนียจ +กำบด +กำบน +กำบัง +กำบัด +กำบิด +ก่ำบึ้ง +กำเบ้อ +กำโบล +กำปอ +กำปั่น +กำปั้น +กำผลา +กำพง +กำพด +กำพต +กำพร้า +กำพราก +กำพวด +กำพอง +กำพืด +กำพุด +กำพู +กำเพลิง +กำแพง +กำแพ้ง +กำแพงแก้ว +กำแพงขาว +กำแพงเขย่ง +กำแพงเจ็ดชั้น +กำแพงมีหูประตูมีช่อง +กำแพงมีหูประตูมีตา +กำแพงเศียร +กำภู +กำม +กำมพฤกษ์ +กำมลาศน์ +กำมเลศ +กำมะถัน +กำมะลอ +กำมะหยี่ +กำมะหริด +กำมังละการ +กำมังวิลิต +กำมัชพล +กำมา +กำมือ +กำยาน +กำยำ +กำรอ +กำราก +กำราบ +กำราล +กำรู +กำเริบ +กำเริบเสิบสาน +กำไร +กำลอง +กำลัง +กำลังกิน +กำลังกินกำลังนอน +กำลังใจ +กำลังช้างเผือก +กำลังช้างสาร +กำลังดี +กำลังเทียน +กำลังภายใน +กำลังม้า +กำลังวังชา +กำลังวัวเถลิง +กำลุง +กำลูน +กำเลา +กำเลาะ +กำไล +กำไลคู่ผี +กำสรด +กำสรวล +กำเสาะ +กำแสง +กำหนด +กำหนดการ +กำหนัด +กำหมัด +กำหราก +กำเหน็จ +กำแหง +กิก +กิ๊ก +กิ่ง +กิ่งก้อย +กิ้งก่า +กิ้งกือ +กิ้งกือเหล็ก +กิ้งโครง +กิ่งทองใบหยก +กิงบุรุษ +กิ่งหาย +กิจ +กิจ- +กิจกรรม +กิจการ +กิจจะ +กิจจะลักษณะ +กิจจา +กิจจานุกิจ +กิจวัตร +กิดาการ +กิดาหยัน +กิตติ +กิตติกรรมประกาศ +กิตติคุณ +กิตติมศักดิ์ +กิตติศัพท์ +กิน +กินกริบ +กินกัน +กินกำไร +กินเกลียว +กินเกลือกินกะปิ +กินแกลบกินรำ +กินขวา +กินขาด +กินแขก +กินความ +กินเครา +กินเจ +กินแจ +กินใจ +กินช้อน +กินชัน +กินซ้าย +กินดอก +กินดอกเบี้ย +กินดอง +กินด่าง +กินดาย +กินดิบ +กินตะเกียบ +กินตัว +กินตา +กินตำแหน่ง +กินโต๊ะ +กินแถว +กินทาง +กินที่ +กินที่ลับไขที่แจ้ง +กินนร +กินนรเก็บบัว +กินนรฟ้อนโอ่ +กินนรรำ +กินนรเลียบถ้ำ +กินนอกกินใน +กินนอน +กินน้ำ +กินน้ำตา +กินน้ำใต้ศอก +กินน้ำพริกถ้วยเดียว +กินน้ำไม่เผื่อแล้ง +กินน้ำเห็นปลิง +กินใน +กินบนเรือนขี้บนหลังคา +กินบวช +กินบ้านกินเมือง +กินบุญ +กินบุญเก่า +กินแบ่ง +กินปลิง +กินปลี +กินปูนร้อนท้อง +กินเปล่า +กินเปี้ยว +กินผัว +กินเพรา +กินมือ +กินเมีย +กินเมือง +กินไม่ลง +กินรังแตน +กินริน +กินรี +กินรูป +กินแรง +กินลม +กินลมกินแล้ง +กินล้างกินผลาญ +กินลึก +กินเวลา +กินเศษกินเลย +กินส้อม +กินสั่ง +กินสำรับ +กินสี่ถ้วย +กินเส้น +กินหน้า +กินหลัง +กินหาง +กินหู้ +กินเหมือนหมู อยู่เหมือนหมา +กินเหล็กกินไหล +กินแหนง +กินอยู่กับปาก อยากอยู่กับท้อง +กินอยู่พูวาย +กิ๊บ +กิมตึ๋ง +กิมิชาติ +กิมิวิทยา +กิโมโน +กิโยตีน +กิระ +กิริณี +กิรินท +กิริเนศวร +กิริยา +กิริยาสะท้อน +กิเลน +กิเลส +กิเลส- +กิเลสมาร +กิโล +กิโล- +กิโลกรัม +กิโลไซเกิล +กิโลมกะ +กิโลเมตร +กิโลลิตร +กิโลเฮิรตซ์ +กิ่ว +กิ๋ว +กิ๋วๆ +กี +กี่ +กี้ +กี๋ +กี่กระตุก +กีฏ- +กีฏวิทยา +กีด +กีดกัน +กีดกั้น +กีดขวาง +กีดหน้าขวางตา +กีตาร์ +กีบ +กีบแรด +กี่มากน้อย +กีรติ +กีฬา +กึก +กึกก้อง +กึกกัก +กึกกือ +กึกถอง +กึง +กึ่ง +กึ่งกลาง +กึงกัง +กึ่งราชการ +กึ๋น +กุ +กุก +กุ๊ก +กุกกัก +กุกๆ กักๆ +กุ๊กกิ๊ก +กุ๊กๆ กิ๊กๆ +กุกกุฏ- +กุกกุร- +กุกขี้หมู +กุกรรม +กุก่อง +กุกะ +กุกะมะเทิ่ง +กุกุธภัณฑ์ +กุ้ง +กุ้งดีด +กุ้งดีดขัน +กุ้งเต้น +กุ้งนาง +กุ้งฝอย +กุ้งฟัด +กุ้งมังกร +กุ้งไม้ +กุ้งยิง +กุ้งส้ม +กุ้งหนามใหญ่ +กุ้งหลวง +กุ้งเหลือง +กุ้งแห +กุ้งแห้ง +กุงอน +กุงาน +กุโงก +กุจี +กุญแจ +กุญแจกล +กุญแจประจำหลัก +กุญแจปากตาย +กุญแจผี +กุญแจมือ +กุญแจรหัส +กุญแจเลื่อน +กุญแจเสียง +กุญแจแหวน +กุญชร +กุฎ +กุฎา +กุฎาคาร +กุฎาธาร +กุฎี +กุฎุมพี +กุฏฐัง +กุฏไต +กุฏิ +กุณฑ์ +กุณฑล +กุณฑี +กุณโฑ +กุณาล +กุณิ +กุณี +กุด +กุดัง +กุดั่น +กุดา +กุทัณฑ์ +กุน +กุ๊น +กุนเชียง +กุนที +กุโนกามอ +กุบ +กุบกับ +กุม +กุ่ม +กุมฝอย +กุมภ- +กุมภ์ +กุมภการ +กุมภนิยา +กุมภัณฑ- +กุมภัณฑ์ +กุมภัณฑยักษ์ +กุมภา +กุมภาพันธ์ +กุมภิล +กุมภีล์ +กุมลัคน์ +กุมเหง +กุมาร +กุมารลฬิตา +กุมารา +กุมารี +กุมุท +กุย +กุ๊ย +กุ๋ย +กุ๋ยๆ +กุยช่าย +กุยเฮง +กุรร +กุระ +กุรุง +กุรุพินท์ +กุรุร +กุเรา +กุล +กุล- +กุลทูสก +กุลธิดา +กุลบดี +กุลบุตร +กุลสตรี +กุลสัมพันธ์ +กุลา +กุลาซ่อนผ้า +กุลาดำ +กุลาตีไม้ +กุลาตีอก +กุลาลาย +กุลาหล +กุลี +กุลีกุจอ +กุเลา +กุแล +กุเวร +กุศราช +กุศล +กุศลกรรมบถ +กุศโลบาย +กุสล +กุสุม +กุสุม- +กุสุมภ์ +กุสุมวิจิตร +กุสุมา +กุสุมาลย์ +กุสุมิตลดาเวลลิตา +กุหนี +กุหนุง +กุหร่า +กุหล่า +กุหลาบ +กุแหละ +กู +กู่ +กู้ +กู๊ก +กูฏ +กูฏา +กูฏาคาร +กูณฑ์ +กูด +กูน +กูบ +กูปรี +กู้ภัย +กู่ไม่กลับ +กู้ยืม +กูรม- +กูรมะ +กูรมาวตาร +กูรำ +กู้หน้า +เก +เก่ +เก๊ +เก๋ +เกก +เก๊ก +เกกมะเหรก +เก๊กหน้า +เก๊กฮวย +เก้กัง +เก้ๆ กังๆ +เก็ง +เก่ง +เก้ง +เก๋ง +-เกงกอย +เก้งก้าง +เก่งกาจ +เก็งกำไร +เกงเขง +เก๋งเคง +เก่งแต่ปาก +เก๋งพั้ง +เก็จ +เกจิอาจารย์ +เกชา +เกณฑ์ +เกณฑ์ตะพัด +เกณฑ์เมืองรั้ง +เกณฑ์หัด +เกด +เก็ด +เกตุ +เกตุ- +เกตุมาลา +เกน +เกนๆ +เก่น +เก็บ +เก็บเกี่ยว +เก็บข้าว +เก็บข้าวตก +เก็บความ +เก็บงำ +เก็บตก +เก็บตัว +เก็บเนื้อเก็บตัว +เก็บเบี้ยใต้ถุนร้าน +เก็บผม +เก็บไร +เก็บเล็กผสมน้อย +เก็บเล็ม +เก็บเล่ม +เก็บสี +เก็บหน้าผ้า +เก็บหอมรอมริบ +เกม +เกย +เกยลา +เกยแห้ง +เกยูร +เกรง +เกร็ง +เกรงขาม +เกรงใจ +เกรงอกเกรงใจ +เกร็ด +เกรน +เกร่อ +เกรอะ +เกรอะกรัง +เกราะ +เกริก +เกริน +เกริ่น +เกรียก +เกรียง +เกรียงไกร +เกรียด +เกรียน +เกรียบ +เกรียม +เกรียมกรม +เกรียว +เกรี้ยว +เกรี้ยวๆ +เกรี้ยวกราด +เกรียวกราว +เกเร +เกเรเกตุง +เกเรเกเส +เกล็ด +เกล็ดกระดี่ +เกล็ดกระโห้ +เกล็ดข้าวเม่า +เกล็ดถี่ +เกล็ดนาค +เกล็ดปลาช่อน +เกล็ดหอย +เกลศ +เกลอ +เกลา +เกล้า +เกล้ากระผม +เกล้ากระหม่อม +เกลาะ +เกลี่ย +เกลี้ย +เกลี้ยกล่อม +เกลี่ยไกล่ +เกลียง +เกลี้ยง +เกลี้ยงเกลา +เกลียด +เกลียดตัวกินไข่ +เกลียดปลาไหลกินน้ำแกง +เกลียว +เกลียวกลม +เกลียวข้าง +เกลียวคอ +เกลี่ยวดำ +เกลียวหวาน +เกลือ +เกลื้อ +เกลือก +เกลือกกลั้ว +เกลือกกลิ้ง +เกลือกรด +เกลือแกง +เกลือเงิน +เกลือจิ้มเกลือ +เกลือจืด +เกลือด่าง +เกลือด่างคลี +เกลื่อน +เกลื้อน +เกลื่อนกล่น +เกลื่อนกลาด +เกลื่อนความ +เกลือเบสิก +เกลือปรกติ +เกลือเป็นหนอน +เกลือฟอง +เกลือยูเรต +เกลือสมุทร +เกลือสินเธาว์ +เกไล +เกวัฏ +เกวียน +เกวียนหลวง +เกศ +เกศ- +เกศธาตุ +เกศพ +เกศว +เกศา +เกศากันต์ +เกศินี +เกศี +เกษตร +เกษตรกร +เกษตรกรรม +เกษตรและสหกรณ์ +เกษตรศาสตร์ +เกษม +เกษมศานต์ +เกษมสันต์ +เกษียณ +เกษียณอายุ +เกษียน +เกษียร +เกษียรสมุทร +เกส +เกสร +เกสรทั้งห้า +เกสรี +เกสา +เกสี +เก้อ +เกอิชา +เกะ +เกะกะ +เกา +เก่า +เก้า +เก๋า +เกาต์ +เกาทัณฑ์ +เกาทุมพร +เกาบิน +เกาบิล +เกามาร +เกาลัด +เกาลัดจีน +เกาลิน +เกาไศย +เกาหลี +เกาเหลา +เกาเหลียง +เก้าอี้ +เกาะ +เกาะกิน +เกาะแกะ +เกิง +เกิ้ง +เกิด +เกิดสูรย์ +เกิน +เกินการ +เกินกิน +เกินคน +เกินงาม +เกินดี +เกินตัว +เกินไป +เกินเลย +เกินหน้า +เกิบ +เกีย +เกียกกาย +เกียง +เกี่ยง +เกี๋ยง +เกี่ยงงอน +เกี่ยงตาย +เกียจ +เกียจกล +เกียจคร้าน +เกียด +เกียดกัน +เกียน +เกี้ยมไฉ่ +เกี้ยมอี๋ +เกียร์ +เกียรติ +เกียรติ- +เกียรติ์ +เกียรติคุณ +เกียรตินิยม +เกียรติประวัติ +เกียรติภูมิ +เกียรติยศ +เกียรติศักดิ์ +เกี่ยว +เกี้ยว +เกี๊ยว +เกี่ยวก้อย +เกี้ยวเกไล +เกี่ยวข้อง +เกี่ยวข้าว +เกี้ยวคอไก่ +เกี่ยวดอง +เกี่ยวดองหนองยุ่ง +เกี้ยวนวม +เกี่ยวเบ็ด +เกี้ยวประทีป +เกี่ยวแฝกมุงป่า +เกี่ยวพัน +เกี้ยวพาน +เกี้ยวพาราสี +เกี่ยวโยง +เกี๊ยะ +เกื้อ +เกือก +เกือกม้า +เกื้อกูล +เกือบ +เกือบไป +แก +แก่ +แก้ +แก่กล้า +แก้เกี้ยว +แก้ขัด +แก้ไข +แก้แค้น +แกง +แก่ง +แก้ง +แก๊ง +แก้งก้น +แกงขม +แกงจืด +แกงได +แกงแนง +แกงบวด +แกงเผ็ด +แก่งแย่ง +แกงร้อน +แกงส้ม +แก่ดีกรี +แก่แดด +แกโดลิเนียม +แก้ตก +แก่ตัว +แก้ตัว +แก้ต่าง +แก้ที +แก้โทษ +แกน +แก่น +แก่นแก้ว +แก่นสาร +แกนะ +แกแน +แก้บน +แก่บ้าน +แก้บาป +แก๊ป +แก้เผ็ด +แก้ฝัน +แก่ไฟ +แกม +แก้ม +แก้มช้ำ +แก้มแดง +แกมมา +แก้มแหม่ม +แก้มือ +แกรก +แกร่ง +แกร็น +แกรนิต +แกรไฟต์ +แกร่ว +แกระ +แก่แรด +แกล +แกล่ +แกล้ง +แกล้งเกลา +แกลน +แกลบ +แกลบหนู +แกลบหูหนู +แกล้ม +แกลลอน +แกลเลียม +แกล้ว +แกละ +แก้ลำ +แกแล +แกว +แก้ว +แก้วก๊อ +แก้วกุ้ง +แก้วแกลบ +แกว่ง +แกว่งไกว +แกว่งตีนหาเสี้ยน +แก้วชิงดวง +แก้วตา +แกว่น +แก้วผลึก +แก้วมรกต +แก้ววิเชียร +แก้วสารพัดนึก +แก้วสีไม้ไผ่ +แก้วหิน +แก้วหู +แก่วัด +แก๊ส +แก๊สไข่เน่า +แก๊สเฉื่อย +แก๊สน้ำตา +แก้หน้า +แกะ +แกะดำ +แกะรอย +แกะสะเก็ด +โก่ +โก้ +โก๋ +โกก +โกกเกก +โกกนุท +โกกิล- +โกกิลา +โกโก้ +โกง +โก่ง +โกงกาง +โก้งเก้ง +โกงโก้ +โก้งโค้ง +โกเชาว์ +โกญจ- +โกญจน +โกญจนาท +โกญจา +โกฏิ +โกฐ +โกฐกระดูก +โกฐกะกลิ้ง +โกฐกักกรา +โกฐก้านพร้าว +โกฐเขมา +โกฐจุฬาลัมพา +โกฐจุฬาลำพา +โกฐชฎามังษี +โกฐชฎามังสี +โกฐเชียง +โกฐน้ำเต้า +โกฐพุงปลา +โกฐสอ +โกฐหอม +โกฐหัวบัว +โกฐาส +โกณ +โกณก +โกดัง +โกตไต +โกทัณฑ์ +โกน +โก่น +โก๋น +โกปินำ +โกมล +โกมุท +โกเมน +โกเมศ +โกย +โกยท้อง +โกร้ +โกรก +โกรกกราก +โกรกไกร +โกรกธาร +โกรกหวัด +โกรง +โกร่ง +โกร่งกร่าง +โกรงเกรง +โกร๋งเกร๋ง +โกรญจ +โกรด +โกรต๋น +โกรธ +โกรธขึ้ง +โกรธา +โกร๋น +โกร๋นเกร๋น +โกรม +โกรมธาตุ +โกรย +โกรศ +โกโรโกเต +โกโรโกโรก +โกโรโกโส +โกลง +โกลน +โกลาหล +โกไล +โกวิท +โกวิฬาร +โกศ +โกศล +โกษ +โกษม +โกษย +โกษีย์ +โกส +โกสน +โกสัช +โกสินทร์ +โกสีย์ +โกสุม +โกไสย +โกหก +โกหวา +ใกล้ +ใกล้เกลือกินด่าง +ไก +ไก่ +ไก้ +ไก๊ +ไก๋ +ไก่กอม +ไก่แก่แม่ปลาช่อน +ไก่แก้ว +ไก่เขี่ย +ไก่ชน +ไก๋แดง +ไก่เตี้ย +ไก่นา +ไก่ป่า +ไกพัล +ไก่ฟ้า +ไก่ฟ้าพญาลอ +ไกร +ไกรพ +ไกรลาส +ไกรศร +ไกรศรี +ไกรสร +ไกรสรี +ไกรสิทธิ +ไก่รองบ่อน +ไกล +ไกล่ +ไกล่เกลี่ย +ไกลปืนเที่ยง +ไกลาส +ไกว +ไกวัล +ไก่สามอย่าง +ไก่เห็นตีนงู งูเห็นนมไก่ +ไก่โห่ +ไก่ไห้ +ไก่อ่อน +ข +ขง +ขงจื๊อ +ขจร +ขจรจบ +ขจอก +ขจัด +ขจัดขจาย +ขจ่าง +ขจาย +ขจาว +ขจิต +ขจิริด +ขจี +ขจุย +ขเจา +ขณะ +ขด +ขดถวาย +ขดาน +ขตอย +ขทิง +ขทึง +ขน +ข้น +ข้นแค้น +ขนง +ขนงเนื้อ +ขนด +ขนทรายเข้าวัด +ขนน +ขนบ +ขนบธรรมเนียม +ขนบประเพณี +ขนพอง +ขนเพชร +ขนม +ขนมครก +ขนมจีน +ขนมทราย +ขนมผสมน้ำยา +ขนมผักกาด +ขนมเส้น +ขนมหัวผักกาด +ขนแมว +ขนลุก +ขนลุกขนพอง +ขนส่ง +ขนสัตว์ +ขนหน้าแข้งไม่ร่วง +ขนหนู +ขนหยอง +ขนอง +ขนอน +ขนอบ +ขนอุย +ขนัด +ขนัน +ขนาก +ขนาง +ขนาด +ขนาน +ขนานน้ำ +ขนานลี่ +ขนาบ +ขนาย +ขนำ +ขนิษฐ +ขนิษฐา +ขนุน +ขนุนนก +ขนุนป่า +ขนุนสำปะลอ +ขบ +ขบขัน +ขบเขี้ยวเคี้ยวฟัน +ขบคิด +ขบฉัน +ขบถ +ขบปัญหา +ขบเผาะ +ขบไม่แตก +ขบวน +ขบวนการ +ขบวร +ขบูร +ขม +ข่ม +ข่มขวัญ +ข่มขี่ +ขมขื่น +ข่มขืน +ข่มขืนกระทำชำเรา +ข่มขืนใจ +ข่มขู่ +ข่มเขาโคขืนให้กินหญ้า +ขมงโกรย +ข่มท้อง +ข่มนาม +ขมเป็นยา +ขมม +ขมวด +ขมวดยา +ขมวน +ข่มหมู +ขมหิน +ข่มเหง +ข่มเหงคะเนงร้าย +ขมอง +ขม่อม +ขม่อมบาง +ขมอย +ขมัง +ขมับ +ขมา +ขม้ำ +ขมิ้น +ขมิ้นกับปูน +ขมิ้นขาว +ขมิ้นขึ้น +ขมิ้นเครือ +ขมิ้นชัน +ขมิ้นนาง +ขมิ้นลิง +ขมิ้นหัวขึ้น +ขมิ้นอ้อย +ขมิบ +ขมีขมัน +ขมึง +ขมึงทึง +ขมุ +ขมุกขมัว +ขมุดขมิด +ขมุบ +ขมุบขมิบ +ขมุม +ขโมย +ขย- +ขยด +ขยม +ขย่ม +ขยล +ขยอก +ขยอง +ขย่อน +ขย้อน +ขยะ +ขยะแขยง +ขยัก +ขยักขย่อน +ขยักขย้อน +ขยัน +ขยั้น +ขยับ +ขยับขยาย +ขยับเขยื้อน +ขยาด +ขยาบ +ขยาย +ขยายขี้เท่อ +ขยำ +ขย้ำ +ขยิก +ขยิบ +ขยิ่ม +ขยี้ +ขยี่ขยัน +ขยุกขยิก +ขยุกขยุย +ขยุบ +ขยุบขยิบ +ขยุม +ขยุ้ม +ขยุ้มตีนหมา +ขยุย +ขรม +ขรรค- +ขรรค์ +ขรัว +ขรัวยาย +ขริบ +ขรี +ขรึม +ขรุขระ +ขล้ง +ขลบ +ขลม +ขลวน +ขล้อเงาะ +ขล้อเทียน +ขลัง +ขลับ +ขลา +ขลาด +ขลาย +ขลิบ +ขลึง +ขลุก +ขลุกขลัก +ขลุกขลิก +ขลุกขลุ่ย +ขลุบ +ขลุม +ขลุมประเจียด +ขลุ่ย +ขลู +ขลู่ +ขวง +ข่วง +ขวด +ขวดตีนช้าง +ขวดโหล +ขวน +ข่วน +ขวนขวาย +ขวบ +ขวย +ขวยเขิน +ขวยใจ +ขวะไขว่เขวี่ย +ขวักไขว่ +ขวัญ +ขวัญเกี่ยง +ขวัญข้าว +ขวัญแขวน +ขวัญใจ +ขวัญดี +ขวัญตา +ขวัญบ่า +ขวัญบิน +ขวัญเมือง +ขวัญหนี +ขวัญหนีดีฝ่อ +ขวัญหาย +ขวัญอ่อน +ขวัด +ขวัดขวิด +ขวัดแคว้ง +ขวั้น +ขวับ +ขวับเขวียว +ขวา +ขวาก +ขวากหนาม +ขวาง +ขว้าง +ขว้างกา +ขว้างข้าวเม่า +ขว้างค้อน +ขว้างงูไม่พ้นคอ +ขว้างจักร +ขวางเชิง +ขวางๆ รีๆ +ขวางโลก +ขวาด +ขวาน +ขวานผ่าซาก +ขวานฟ้า +ขวายขวน +ขวาว +ขว้าว +ขวิด +ขษณะ +ขษัย +ขษีณาศรพ +ขษีร +ขอ +ข่อ +ข้อ +ขอก +ข้อกฎหมาย +ข้อกติกา +ข้อกำหนด +ขอแกว +ข้อเขียน +ข้อไข +ข้อความ +ข้อคัดย่อ +ขอคำน้อย +ข้อคิด +ข้อคิดเห็น +ของ +ข้อง +ของกลาง +ของกอง +ของกำนัล +ของกิน +ของเก่า +ของขบเคี้ยว +ของขลัง +ของขวัญ +ข้องขัด +ของแข็ง +ของค้าง +ของคาว +ของเค็ม +ของเคียง +ของโจร +ข้องใจ +ของชำ +ของใช้ +ของดี +ของเถื่อน +ของนอก +ของร้อน +ของลับ +ของเล่น +ของเลื่อน +ของเลื่อนเตือนขันหมาก +ของวัด +ของว่าง +ข้องแวะ +ของสงฆ์ +ของสงวน +ของสด +ของสดของคาว +ของสดคาว +ของหลวง +ของหวาน +ของหายตะพายบาป +ของเหลว +ของแห้ง +ของไหล +ของไหว้ +ของ้อ +ของ้าว +ขอฉาย +ขอช้าง +ขอด +ขอดค่อน +ขอเดชะ +ขอตัว +ขอทอง +ขอทาน +ขอที +ข้อเท็จจริง +ขอโทษ +ขอน +ข่อน +ข้อน +ขอนดอก +ขอนสัก +ขอนิสัย +ขอบ +ขอบข่าย +ขอบเขต +ขอบคุณ +ขอบใจ +ขอบทาง +ขอบพระคุณ +ขอบไร +ขอบเหล็ก +ข้อบังคับ +ข้อบัญญัติ +ขอประทาน +ขอประทานโทษ +ข้อปลีกย่อย +ขอไปที +ขอเฝ้า +ขอพระราชทาน +ข้อพับ +ขอม +ข้อมือขาว +ข้อมูล +ข้อแม้ +ข่อย +ข้อย +ข่อยน้ำ +ข่อยหนาม +ข่อยหยอง +ขอยืม +ขอร้อง +ขอรับ +ขอรับกระผม +ขอรับผม +ข้อราชการ +ขอแรง +ข้อศอก +ข้อสอบ +ขอสับ +ข้อเสือ +ข้อหา +ข้อใหญ่ใจความ +ขออภัย +ข้ออ้อย +ข้ออ้าง +ขะข่ำ +ขะแข่น +ขะแข้น +ขะแจะ +ขะแถก +ขะนาน +ขะเน็ด +ขะมอมขะแมม +ขะมักเขม้น +ขะมุกขะมอม +ขะแมซอ +ขะแมธม +ขะยิก +ขะยุก +ขะเย้อแขย่ง +ขะแยะ +ขัค +ขัง +ขังข้อ +ขังขอก +ขังปล้อง +ขังหน่วย +ขัช +ขัชก +ขัณฑ- +ขัณฑสกร +ขัณฑสีมา +ขัด +ขัดเกลา +ขัดขวาง +ขัดข้อง +ขัดขืน +ขัดเขมร +ขัดเขิน +ขัดแข็ง +ขัดคอ +ขัดเคือง +ขัดแค้น +ขัดจังหวะ +ขัดใจ +ขัดดอก +ขัดตา +ขัดตาทัพ +ขัดตำนาน +ขัดแตะ +ขัดบท +ขัดเบา +ขัดมอน +ขัดมอนตัวผู้ +ขัดมอนหลวง +ขัดยอก +ขัดแย้ง +ขัดลาภ +ขัดสน +ขัดสมาธิ +ขัดหนัก +ขัดห้าง +ขัดหู +ขัตติย- +ขัตติยมานะ +ขัน +ขั้น +ขันกว้าน +ขันแข็ง +ขันชะเนาะ +ขันเชิง +ขันต่อ +ขันติ +ขันตี +ขันโตก +ขันทองพยาบาท +ขันที +ขันธ์ +ขันธาวาร +ขันน้ำพานรอง +ขันลงหิน +ขันสมอ +ขันสาคร +ขันสู้ +ขันหมาก +ขันเหม +ขันอาสา +ขับ +ขับขัน +ขับขี่ +ขับเคลื่อน +ขับเคี่ยว +ขับซอ +ขับถ่าย +ขับพล +ขับไม้ +ขับไม้บัณเฑาะว์ +ขับร้อง +ขัย +ขัว +ขั้ว +ขั้วกระจก +ขั้วบวก +ขั้วแม่เหล็ก +ขั้วแม่เหล็กโลก +ขั้วลบ +ขั้วโลก +ขา +ข่า +ข้า +ขาก +ขากบ +ขากรรไตร +ขาก๊วย +ขากอม +ขาเกวียน +ข้าเก่าเต่าเลี้ยง +ขาไก่ +ขาเขียด +ขาง +ข่าง +ข้าง +ข้างๆ +ข้างกบ +ข้างกระดาน +ข้างขึ้น +ข้างควาย +ข้างๆ คูๆ +ข้างเงิน +ข้างจัน +ขางดัง +ขางแดง +ข้างตก +ข้างตะเภา +ข้างตีน +ข้างแรม +ข้างลาย +ข้างหัวนอน +ข้างออก +ขาจร +ข้าเจ้า +ขาณุ +ขาด +ขาดกัน +ขาดคราว +ขาดคอช้าง +ขาดค่า +ขาดคำ +ขาดแคลน +ขาดใจ +ขาดตกบกพร่อง +ขาดตลาด +ขาดตอน +ขาดตัว +ขาดทุน +ขาดปาก +ขาดมือ +ขาดเม็ด +ขาดลอย +ขาดหัวช้าง +ขาดเหลือ +ขาดอายุ +ข่าแดง +ข่าต้น +ขาทนียะ +ขาทราย +ข้าไท +ขาน +ขานกยาง +ขานไข +ขานนาค +ขานรหัส +ข้านอกเจ้า ข้าวนอกหม้อ +ข้าน้อย +ขานาง +ขาบ +ขาประจำ +ข้าแผ่นดิน +ข้าเฝ้า +ข้าพเจ้า +ข้าพระ +ข้าพระพุทธเจ้า +ขาพับ +ขาม +ข่าม +ข้าม +ข้ามๆ +ข้ามน้ำข้ามทะเล +ข้ามน้ำข้ามท่า +ข้ามสมุทร +ข้ามหน้า +ข้ามหน้าข้ามตา +ข้ามหัว +ขาม้า +ขาย +ข่าย +ขายขาด +ข่ายงาน +ขายชาติ +ขายชื่อ +ขายตัว +ขายตามคำพรรณนา +ขายตามตัวอย่าง +ขายทอดตลาด +ขายบ้านขายเมือง +ขายปลีก +ขายผ้าเอาหน้ารอด +ขายเผื่อชอบ +ขายฝาก +ขายส่ง +ขายหน้า +ขายหน้าขายตา +ขายหน้าวันละห้าเบี้ย +ขายหู +ขายเหมา +ข้าราชการ +ขาล +ขาว +ข่าว +ข้าว +ข่าวกรอง +ข้าวกรู +ข้าวกล้อง +ข้าวกล้า +ข้าวเกรียบ +ข้าวเกรียบปากหม้อ +ข้าวเกรียบอ่อน +ข้าวเก่า +ข้าวแกง +ข้าวโกบ +ข้าวขวัญ +ข้าวของ +ข้าวข้า +ข้าวแขก +ข่าวคราว +ข้าวควบ +ข้าวคำ +ข้าวแคบ +ข้าวงัน +ข้าวจี่ +ขาวจีบ +ข้าวเจ้า +ข้าวแจก +ข้าวแช่ +ข้าวซ้อม +ข้าวซอย +ข้าวแดกงา +ข้าวแดงแกงร้อน +ข้าวต้ม +ข้าวต้มน้ำวุ้น +ข้าวต้มปัด +ข้าวตอก +ข้าวตอกตั้ง +ข้าวตอกแตก +ข้าวตัง +ข้าวตาก +ข้าวตู +ข้าวแตก +ข้าวแตน +ข้าวทิพย์ +ข้าวนก +ข้าวนึ่ง +ข้าวบาตร +ข้าวบิณฑ์ +ข้าวบุหรี่ +ข้าวเบา +ข้าวเบือ +ข้าวประดับดิน +ข้าวปลูก +ข้าวปัด +ข้าวป่า +ข้าวปาด +ข้าวปุ้น +ข้าวเปรต +ข้าวเปลือก +ข้าวเปียก +ข้าวผอก +ข้าวผอกกระบอกน้ำ +ข้าวพระ +ขาวพวง +ข้าวพอง +ข่าวพาดหัว +ข้าวโพด +ข้าวฟ่าง +ข้าวเภา +ข้าวมัน +ขาวม้า +ข้าวมิ่น +ข้าวเม่า +ข้าวเม่าทอด +ข่าวยกเมฆ +ข้าวยากหมากแพง +ข้าวยาคู +ข้าวยำ +ข้าวเย็นใต้ +ข้าวเย็นเหนือ +ข้าวละมาน +ข่าวล่า +ข่าวสด +ข้าวสวย +ข้าวสาก +ข่าวสาร +ข้าวสาร +ข้าวสุก +ข้าวเส้น +ข้าวหนัก +ข้าวหมก +ข้าวหมาก +ข้าวหลาม +ข้าวหลามตัด +ข้าวหัวโขน +ข้าวหางช้าง +ข้าวเหนียว +ข้าวเหนียวดำ +ข้าวเหลือเกลืออิ่ม +ขาวใหญ่ +ข้าวใหม่ +ข้าวใหม่น้อย +ข้าวใหม่ปลามัน +ข้าวใหม่ใหญ่ +ข้าวอังกุลี +ข้าวฮาง +ข้าศึก +ขาหมา +ขาหยั่ง +ข้าหลวง +ข้าหลวงเดิม +ข้าหลวงน้อย +ข้าหลวงหลังลาย +ขาอ่อน +ขำ +ข่ำเขียว +ขิก +ขิกๆ +ขิง +ขิ่ง +ขิงก็รา ข่าก็แรง +ขิงแกลง +ขิงแครง +ขิงแห้ง +ขิด +ขิปสัทโท +ขิม +ขี่ +ขี้ +ขี้กบ +ขี้กระทาเกลือ +ขี้ก้อนใหญ่ให้เด็กเห็น +ขี้กะโล้โท้ +ขี้กา +ขี้ก้าง +ขี้กาดง +ขี้กาแดง +ขี้กาเหลี่ยม +ขี้เกลือ +ขี้ขม +ขี้ขวง +ขี้ข้า +ขี้ขุย +ขี้เข็บ +ขี้ครอก +ขี้ครั่ง +ขี้ควาย +ขี้คุก +ขี้เค้า +ขี้โครง +ขี้จาบ +ขี่ช้างจับตั๊กแตน +ขี้ซ้าย +ขี้เซา +ขี้ไซ้ +ขีณะ +ขีณาสพ +ขีด +ขีดขั้น +ขีดคร่อม +ขีดคั่น +ขีดเส้นตาย +ขี้เดือด +ขี้แดด +ขี้ตด +ขี้ตังนี +ขี้ติ้ว +ขี้ตืด +ขี้เต่า +ขี้แต้ +ขี้ไต้ +ขี้ถัง +ขี้เถ้า +ขี้ไถ +ขี้ทา +ขี้ทูด +ขี้เท่อ +ขี้เทา +ขี้เทือก +ขี้นก +ขีปนาวุธ +ขีปนาวุธนำวิถี +ขี้ปะติ๋ว +ขี้ปาก +ขี้เป้ +ขี้เป็ด +ขี้ผง +ขี้ผึ้ง +ขี้ฝิ่น +ขี้แพ้ชวนตี +ขี้มอด +ขี้ม้า +ขี่ม้าตีคลี +ขี่ม้าเลียบค่าย +ขี่ม้าส่งเมือง +ขี้มิ่น +ขี้มูก +ขี้เมฆ +ขี้แมลงวัน +ขี้แมว +ขี้ไม่ให้หมากิน +ขี้ยอก +ขี้ยา +ขี้แย +ขีร +ขี้รังแค +ขี้ราดโทษล่อง +ขี้ริ้ว +ขี้เรื้อน +ขี้เรื้อนกวาง +ขี้แรด +ขี้แรดล้อมปรวด +ขี้ลม +ขี้ลอก +ขี้ลีบ +ขี้เล็บ +ขี้โล้ +ขี้สูด +ขี้หดตดหาย +ขี้หนอน +ขี้หน้า +ขี้หนู +ขี้หมา +ขี้เหร่ +ขี้เหล็ก +ขี้ใหม่หมาหอม +ขี้อ้น +ขี้อ้าย +ขึง +ขึ้ง +ขึ้งโกรธ +ขึงขัง +ขึ้งเคียด +ขึงตา +ขึงพืด +ขึงอูด +ขึ้น +ขึ้นเขียง +ขึ้นครู +ขึ้นคาน +ขึ้นใจ +ขึ้นฉ่าย +ขึ้นชื่อ +ขึ้นชื่อว่า +ขึ้นซัง +ขึ้นต้นไม้สุดยอด +ขึ้นปาก +ขึ้นพลับพลา +ขึ้นไม้ขึ้นมือ +ขึ้นระวาง +ขึ้นร้าน +ขึ้นสาย +ขึ้นเสียง +ขึ้นหน้าขึ้นตา +ขึ้นหม้อ +ขึ้นหา +ขึ้นเหนือล่องใต้ +ขืน +ขื่น +ขื่นขม +ขืนใจ +ขื่อ +ขื่อกะละปังหา +ขื่อขวาง +ขื่อคัด +ขื่อจมูก +ขื่อเท่าต่อ +ขื่อผี +ขื่อมุก +ขื่อหมู่ +ขุก +ขุด +ขุดคุ้ย +ขุดด้วยปากถากด้วยตา +ขุดดินกินหญ้า +ขุดบ่อล่อปลา +ขุน +ขุ่น +ขุ่นข้องหมองใจ +ขุ่นเคือง +ขุ่นแค้น +ขุ่นใจ +ขุนทอง +ขุนนาง +ขุนนางใช่พ่อแม่ หินแง่ใช่ตายาย +ขุนน้ำ +ขุนบาล +ขุนแผน +ขุนพล +ขุนพัฒน์ +ขุนเพ็ด +ขุ่นมัว +ขุนไม่ขึ้น +ขุนศาล +ขุนศึก +ขุ่นหมอง +ขุนหมื่น +ขุนหลวง +ขุม +ขุย +ขุยไผ่ +ขุยอินทรีย์ +ขู +ขู่ +ขู่กรรโชก +ขู่ขวัญ +ขู่เข็ญ +ขูด +ขูดรีด +ขูดเลือด +ขูดเลือดขูดเนื้อ +เข +เข้ +เขก +เข็ง +เข่ง +เขจร +เข็ญ +เข็ญใจ +เข็ด +เข็ดข้อ +เข็ดข้อเข็ดลำ +เข็ดเขี้ยว +เข็ดฟัน +เขดา +เขต +เขตแดน +เขตเลือกตั้ง +เขตอำนาจศาล +เขน +เข็น +เข่น +เข่นเขี้ยว +เข็นครกขึ้นภูเขา +เข่นฆ่า +เขนง +เขนงนายพราน +เขน็ด +เขนย +เขบ็จขบวน +เขบ็ต +เขม- +เข็ม +เข้ม +เข็มกลัด +เข้มข้น +เข็มขัด +เข้มขาบ +เข้มขาบไหม +เข้มแข็ง +เข็มควัก +เขม็ง +เข้มงวด +เข็มซ่อนปลาย +เขม็ดแขม่ +เข็มทิศ +เขม่น +เขม้น +เขม้นขะมัก +เขมร +เขมรไทรโยค +เขมรพวง +เขมรราชบุรี +เขมรเหลือง +เขมรใหญ่ +เขมา +เขม่า +เขมาโกรย +เขม่าซาง +เขมือบ +เขย +เขยก +เขย่ง +เขย่งเก็งกอย +เขยตาย +เขย้อแขย่ง +เขยอะขยะ +เขย่า +เขยิน +เขยิบ +เขยิบขยาบ +เขยิบฐานะ +เขยียวขยอน +เขยื้อน +เขรอะ +เขลง +เขลอะ +เขละ +เขลา +เขลาะ +เขว +เขษตร +เขษม +เขษียร +เขฬะ +เขะขะ +เขา +เข่า +เข้า +เข้ากระโจม +เข้ากระดูกดำ +เขากวาง +เข้าเกณฑ์ +เข้าเกีย +เขาแกะ +เข้าข้อ +เข้าขา +เข้าข้าง +เข้าคอ +เข้าคิว +เข้าคู่ +เข้าเครื่อง +เข้าเค้า +เข้าไคล +เข้าเงียบ +เข้าแง่ +เข้าเจ้า +เข้าเจ้าเข้านาย +เข้าใจ +เข้าชื่อ +เข้าฌาน +เข้าด้ายเข้าเข็ม +เข้าเดือย +เข้าตรีทูต +เข้าตอง +เข้าตัว +เข้าตาจน +เข้าตามตรอกออกตามประตู +เข้าตาร้าย +เข้าตำรา +เข้าตู้ +เข้าไต้เข้าไฟ +เข้าถ้ำ +เข้าถึง +เข้าเถื่อนอย่าลืมพร้า +เข้าทรง +เข้าท่า +เข้าที +เข้าที่ +เข้าทุน +เข้านอกออกใน +เข้าเนื้อ +เข้าแบบ +เข้าแบบเข้าแผน +เข้าปก +เข้าปากไม้ +เข้าปิ้ง +เข้าปีก +เขาเปล้า +เข้าไป +เข้าผี +เข้าผู้เข้าคน +เข้าฝัก +เข้าฝัน +เข้าเฝ้า +เข้าเฝือก +เข้าพกเข้าห่อ +เข้าพรรษา +เข้าพระเข้านาง +เข้าพุง +เขามอ +เข้าม่าน +เข้าเมืองตาหลิ่วต้องหลิ่วตาตาม +เข้าไม้ +เข้ายา +เข้ารกเข้าพง +เข้ารหัส +เข้าร่องเข้ารอย +เข้ารอบ +เข้ารอย +เข้าร้าย +เข้ารีต +เข้ารูป +เข้ารูปเข้ารอย +เข่าลา +เข้าลิ้น +เข้าเล่ม +เข้าเลือด +เข้าเลือดเข้าเนื้อ +เข้าโลง +เข้าวัดเข้าวา +เข้าว่า +เข้าเวร +เข้าแว่น +เข้าเศียร +เข้าสมาธิ +เข้าสุหนัต +เข้าใส่ +เข้าไส้ +เข้าหน้า +เข้าหม้อ +เข้าหมิ้น +เข้าหลัก +เข้าหา +เข้าหุ้น +เข้าหู +เข้าหูซ้ายทะลุหูขวา +เข้าให้ +เข้าไหนเข้าได้ +เขาอ่อน +เข่าอ่อน +เขิง +เขิน +เขิบ +เขี่ย +เขียง +เขียงเท้า +เขียงพระนางอี่ +เขียงพร้า +เขียด +เขียดตะปาด +เขียน +เขี่ยน +เขียนด้วยมือลบด้วยตีน +เขียนทอง +เขียนไทย +เขียนเสือให้วัวกลัว +เขียม +เขียว +เขี้ยว +เขี้ยวกระแต +เขี้ยวแก้ว +เขียวไข่กา +เขี้ยวงู +เขี้ยวตะขาบ +เขี้ยวเนื้อ +เขียวพระอินทร์ +เขี้ยวเล็บ +เขียวเสวย +เขี้ยวหนุมาน +เขี้ยวหมา +เขียวหวาน +เขียวหางไหม้ +เขียะ +เขือ +เขือง +เขื่อง +เขื่อน +เขื่อนเพชร +เขือม +แข +แข้ +แขก +แขกเต้า +แขกเต้าเข้ารัง +แขกเมือง +แข็ง +แข่ง +แข้ง +แข็งกร้าว +แข็งกล้า +แข็งแกร่ง +แข้งไก่ +แข็งข้อ +แข็งขัน +แข่งขัน +แข็งใจ +แข็งตัว +แข็งมือ +แข็งเมือง +แข็งแรง +แข้งสิงห์ +แขน +แข่น +แข้น +แขนขวา +แขนคู้ +แขนง +แขนซ้ายแขนขวา +แขนทุกข์ +แขนนาง +แขนพับ +แขนะ +แขม +แขม็บ +แขม่ว +แขย็กๆ +แขยง +แขย่ง +แขยงแขงขน +แขยงหนู +แขละ +แขวก +แขวง +แขวน +แขวนคอ +แขวนนวม +แขวนลอย +แขวะ +แขสร์ +โข +โขก +โขกสับ +โขง +โข่ง +โข่งทะเล +โขด +โขดง +โขน +โขนง +โขม +โขม- +โขมง +โขมด +โขมดยา +โขยก +โขยกเขยก +โขยง +โขย่ง +โขยด +โขยม +โขลก +โขลกๆ +โขลง +โขลน +โขลนทวาร +โขษม +ไข +ไข่ +ไข้ +ไขกระดูก +ไข้กาฬ +ไข้กาฬนกนางแอ่น +ไข้กาฬหลังแอ่น +ไข้กำเดา +ไข่ไก่ +ไข่ขวัญ +ไขข้อ +ไข่ขาง +ไข่ขาว +ไข่ข้าว +ไขควง +ไข้ความร้อน +ไข่เค็ม +ไข่จระเข้ +ไข้จับสั่น +ไข่จิ้งจก +ไข่จิ้งหรีด +ไข่เจียว +ไข้ใจ +ไข่ญี่ปุ่น +ไข่ดัน +ไข่ดันหมู +ไข่ดาว +ไข่แดง +ไข้แดด +ไข่ตายโคม +ไข่ตุ๋น +ไข่เต่า +ไข้ทรพิษ +ไข้ทับระดู +ไข่นกกระสา +ไขน้ำ +ไข่น้ำ +ไข่น้ำค้าง +ไข่เน่า +ไข่ในหิน +ไข่ปลา +ไข้ปอดบวม +ไข้ป่า +ไขพระวิสูตร +ไข่พอก +ไข้พิษ +ไขมัน +ไข้มาลาเรีย +ไข่มุก +ไขย่น +ไข่เยี่ยวม้า +ไขรา +ไข่ลม +ไขลาน +ไข่ลูกเขย +ไข่ลูกยอด +ไข้เลือดออก +ไขว่ +ไขว้ +ไขว้เขว +ไขว่คว้า +ไขว้โรง +ไขว่ห้าง +ไขษย +ไข้สันนิบาต +ไขสันหลัง +ไขสันหลังอักเสบ +ไข่สำเภา +ไขสือ +ไขเสนียด +ไข่หงส์ +ไข้หวัด +ไข้หวัดใหญ่ +ไข่หวาน +ไข้หัว +ไข้หัวลม +ไข่หำ +ไข่หิน +ไขหู +ไข้เหลือง +ไข่เหา +ไข่เหี้ย +ไข่แหน +ฃ +ค +คคน- +คคนะ +คคนัมพร +คคนางค์ +คคนานต์ +คง +คงกระพัน +คงกระพันชาตรี +คงแก่เรียน +คงขาด +คงคลัง +คงคา +คงคาเดือด +คงคาลัย +คงไคย +คงตัว +คงทน +คงที่ +คงเส้นคงวา +คงเหลือ +คช- +คชกรรม +คชนาม +คชราช +คชลักษณ์ +คชศาสตร์ +คชส่าน +คชสาร +คชสีห์ +คชาชาติ +คชาชีพ +คชาธาร +คชาภรณ์ +คชินทร์ +คเชนทร์ +คณ- +คณน +คณนา +คณบดี +คณะ +คณะรัฐมนตรี +คณาจารย์ +คณาธิการ +คณาธิปไตย +คณิกา +คณิต +คณิต- +คณิตศาสตร์ +คเณศ +คด +คดกริช +คดโกง +คดเคี้ยว +คดงอ +คดซ่าง +คดในข้องอในกระดูก +คดสร้าง +คดี +คดีดำ +คดีแดง +คดีแพ่ง +คดีมโนสาเร่ +คดีอนาถา +คดีอาญา +-คต +คติ +คติชาวบ้าน +คติธรรม +คตินิยม +คติพจน์ +คทา +คน +ค้น +คนกลาง +คนไข้ +คนไข้นอก +คนไข้ใน +ค้นคว้า +คนจร +คนจริง +คนใช้ +คนดีผีคุ้ม +คนต้องขัง +คนทรง +คนทา +คนทิสอ +คนทิสอทะเล +คนที +คนทีเขมา +คนทีสอ +คนโท +คนธ์ +คนธรรพ- +คนธรรพ์ +คนธรรพวิวาห์ +คนธรรพศาสตร์ +คนนอก +คนใน +คนเมือง +คนรักเท่าผืนหนัง คนชังเท่าผืนเสื่อ +คนร้าย +คนไร้ความสามารถ +คนละ +คนละไม้คนละมือ +คนสวน +คนสาบสูญ +คนเสมือนไร้ความสามารถ +ค้นหูก +คนใหญ่คนโต +คเนจร +คบ +คบคนให้ดูหน้า ซื้อผ้าให้ดูเนื้อ +คบค้า +คบคิด +คบชู้ +คบเพลิง +คบไฟ +คบหา +คม +คมกริบ +คมขำ +คมคาย +คมน- +คมน์ +คมนาการ +คมนาคม +คมในฝัก +คมบาง +คมสัน +คมิกภัต +ครก +ครกกะเบือ +คร่ง +ครบ +ครบครัน +ครบถ้วน +ครบมือ +ครรชิต +ครรภ +ครรภ- +ครรภ์ +ครรภธาตุ +ครรภธาตุมณฑล +ครรภมณฑล +ครรภมล +ครรโภทร +ครรลอง +ครรโลง +ครรไล +ครรหิต +ครวญ +ครวญคราง +ครวญหา +ครวัก +ครวี +ครหา +ครอก +ครอง +ครองแครง +ครองราชสมบัติ +คร่อเงาะ +คร่อเทียน +ครอบ +ครอบครอง +ครอบครองปรปักษ์ +ครอบครัว +ครอบงำ +ครอบจักรวาล +ครอบตลับ +คร่อม +คระ +คระเมิม +คระแลง +คระไล +คระแวง +คระหน +คระหวน +คระหาย +คระหิว +คระโหย +ครั่ง +ครั้ง +ครัดเคร่ง +ครัน +ครั่น +ครั้น +ครั่นคร้าม +ครั่นตัว +ครั่นเนื้อครั่นตัว +ครับ +ครัว +ครัวทาน +ครัวไฟ +ครัวเรือน +ครา +คร่า +คราก +คราง +คราญ +คราด +คร้าน +คราบ +คราบหมู +คราม +คร้าม +ครามครัน +คราว +คร่าว +คร่าวๆ +คราส +ครำ +คร่ำ +คร่ำครวญ +คร่ำคร่า +คร่ำครึ +คร่ำเคร่ง +คร่ำเครอะ +คร่ำเงิน +คร่ำทอง +คร่ำหวอด +คริปทอน +คริสต์ +คริสต์มาส +คริสต์ศักราช +คริสตัง +คริสเตียน +ครี้ +ครีครอ +ครีบ +ครีบสิงห์ +ครีม +ครีษมายัน +ครึ +ครึกครื้น +ครึกโครม +ครึ่ง +ครึ่งๆ กลางๆ +ครึ่งชาติ +ครึ่งต่อครึ่ง +ครึน +ครึม +ครึ้ม +ครึมครุ +ครืด +ครืน +ครื้น +ครืนครั่น +ครื้นครั่น +ครื้นครึก +ครื้นเครง +ครือ +ครุ +ครุก- +ครุคระ +ครุฑ +ครุฑกระทง +ครุฑพ่าห์ +ครุ่น +ครุ่นคิด +ครุภัณฑ์ +ครุมเครือ +ครุย +ครุวนา +ครุวาร +ครุศาสตร์ +ครู +ครู่ +ครูด +คฤโฆษ +คฤนถ์ +คฤห +คฤห- +คฤหบดี +คฤหปัตนี +คฤหัสถ์ +คฤหา +คฤหาสน์ +คล +คลวง +คลอ +คล้อ +คลอก +คลอเคลีย +คลอแคล +คล้อแคล้ +คลอง +คล่อง +คล้อง +คล่องแคล่ว +คล้องจอง +คล่องตัว +คลองเลื่อย +คลองส่งน้ำ +คลอด +คลอน +คลอนแคลน +คล้อย +คล้อยคล้อย +คลอรีน +คลอโรฟอร์ม +คลอโรฟีลล์ +คละ +คละคล่ำ +คละคลุ้ง +คละปน +คลัก +คลั่ก +คลั่กๆ +คลัง +คลั่ง +คลังพิมานอากาศ +คลังเลือด +คลังสินค้า +คลังสินค้าทัณฑ์บน +คลัตช์ +คลับคล้าย +คลับคล้ายคลับคลา +คลา +คล้า +คลาคล่ำ +คลาไคล +คลางแคลง +คลาด +คลาดเคลื่อน +คลาดแคล้ว +คลาน +คลาย +คล้าย +คลายคล้าย +คล้ายคล้าย +คล้ายคลึง +คลายเคล่ง +คล่าว +คลาศ +คลำ +คล่ำ +คล้ำ +คลิง +คลิ้งโคลง +คลิด +คลินิก +คลี +คลี่ +คลี่คลาย +คลึง +คลึงเคล้น +คลึงเคล้า +คลื่น +คลื่นกระทบฝั่ง +คลื่นใต้น้ำ +คลื่นปานกลาง +คลื่นแม่เหล็กไฟฟ้า +คลื่นยาว +คลื่นวิทยุ +คลื่นสั้น +คลื่นไส้ +คลื่นเหียน +คลุก +คลุกคลาน +คลุกคลี +คลุกคลีตีโมง +คลุ้ง +คลุบ +คลุม +คลุ่ม +คลุ้ม +คลุ้มคลั่ง +คลุมเครือ +คลุมถุงชน +คลุมประทม +คลุมโปง +คลุมผทม +ควง +ควงแขน +ควงสว่าน +ควณ +ควน +ควบ +ควบคุม +ควบแน่น +ควย +ควร +ควัก +ควักค้อน +ควักลงหลุม +ควั่งคว้าง +ควัน +ควั่น +ควั่นจุก +ควันหลง +คว้า +ควาก +คว้าไขว่ +คว้าง +คว้างๆ +คว้างเคว้ง +ควาญ +ควาน +คว้าน +คว้านท้อง +คว้าน้ำเหลว +ความ +ความคลาด +ความเค้น +ความเครียด +ความเฉื่อย +ความชอบ +ความชื้น +ความชื้นสัมบูรณ์ +ความชื้นสัมพัทธ์ +ความถ่วง +ความถ่วงจำเพาะ +ความถี่ +ความถี่วิทยุ +ความโน้มถ่วง +ความยาวคลื่น +ความรู้ท่วมหัวเอาตัวไม่รอด +ความรู้สึกเขื่อง +ความรู้สึกด้อย +ความรู้สึกเด่น +ความเร่ง +ความเร็ว +ความหน่วง +ความหลัง +ควาย +ควายปละ +ควายพระอินทร์ +คว่าว +คว่ำ +คว่ำบาตร +คว่ำหลัง +ควินิน +ควิวๆ +ควิวควัง +ควิวคว่าง +ควิวคว้าง +ควีนสิริกิติ์ +คห- +คหกรรมศาสตร์ +คหบดี +คหปตานี +คหัฐ +คอ +ค้อ +คอก +ค็อกคัส +คอกช้าง +ค็อกเทล +คอกระเช้า +คอกลม +คอกะลาสี +คอขาดบาดตาย +คอแข็ง +คอคอด +คอเคซอยด์ +ค่องอ้อย +คอเชิ้ต +คอซอง +คอด +คอแดง +คอตก +คอต่อ +คอตั้ง +คอตั้งบ่า +คอตีบ +คอถ่วง +คอทองแดง +คอน +ค่อน +ค้อน +คอนกรีต +คอนกรีตเสริมเหล็ก +คอนกรีตอัดแรง +ค้อนกลอง +ค่อนขอด +ค่อนข้าง +ค้อนควัก +ค่อนแคะ +คอนเดนเซอร์ +ค้อนติง +ค้อนตีหมา +ค้อนทอง +คอนแวนต์ +คอนเสิร์ต +ค้อนหอย +คอนาค +คอบ +คอบัว +คอแบะ +คอปาด +คอเป็นเอ็น +คอพอก +คอพับ +คอไฟ +คอม +ค่อม +ค้อม +คอมพิวเตอร์ +คอมมานโด +คอมมิวนิสต์ +คอม้า +คอย +ค่อย +ค่อยๆ +ค้อย +ค่อยดีขึ้น +คอยท่า +ค่อยเป็นค่อยไป +ค่อยยังชั่ว +คอยล์ +คอยเหตุ +คอร์ด +คอรวง +คอระฆัง +คอแร้ง +คอแลน +คอวี +คอสติกโซดา +คอสอง +คอสะพาน +คอสูง +คอเสื้อ +คอหอย +คอหอยกับลูกกระเดือก +คอหอยตีบ +คอหอยพอก +คอห่าน +คอแห้ง +คอแหลม +คออ่อน +คอฮาวาย +คะ +ค่ะ +คะไขว่ +คะค้อย +คะคาน +คะคึง +คะนน +คะนอง +คะน้า +คะนึง +คะเน +คะเนงร้าย +คะเน็ด +คะแนน +คะแนนนิยม +คะแนนเสียง +คะใน +คะมำ +คะมึก +คะยั้นคะยอ +คะเยอ +คัก +คั่ก +คัคน- +คัคนะ +คัคนัมพร +คัคนางค์ +คัคนานต์ +คั่ง +คั่งค้าง +คั่งแค้น +คังไคย +คัจฉ +คัณฑมาลา +คัณฑสูตร +คัด +คัดค้าน +คัดเค้า +คัดง้าง +คัดฉาก +คัดช้อน +คัดชุน +คัดท้าย +คัดมอน +คัดเม็ง +คัดเลือก +คัดเลือด +คัทลียา +คัน +คั่น +คั้น +คันขา +คันจาม +คันฉ่อง +คันฉัตร +คันฉาย +คันชัก +คันชั่ง +คันชีพ +คันดาลฉัตร +คันโดง +คันถ- +คันถธุระ +คันถรจนาจารย์ +คันทรง +คันธ +คันธ- +คันธ์ +คันธกุฎี +คันธมาทน์ +คันธารราษฎร์ +คันนา +คันบวย +คันโพง +คันเร่ง +คันหามเสือ +คับ +คับขัน +คับค้อน +คับคั่ง +คับคา +คับแค +คับแค้น +คับแคบ +คับใจ +คับอกคับใจ +คัพภ- +คัพภ์ +คัพภสาลี +คัพโภทร +คัมภีร- +คัมภีร์ +คัมภีรภาพ +คัล +คัว +คั่ว +คา +ค่า +ค้า +คากรอง +ค้าขาย +ค่าขึ้นศาล +ค่าคบ +ค่าครองชีพ +ค้าความ +ค้าค้า +คาง +ค่าง +ค้าง +คางคก +คางคกขึ้นวอ +คางคกไฟ +ค้างคาว +ค้างคืน +ค้างเดือนค้างปี +ค้างเติ่ง +คางทูม +คางโทน +คางเบือน +ค้างปี +คางหมู +คางเหลือง +คาด +คาดคั้น +คาดค่า +คาดไม่ถึง +คาดหน้า +คาดหมัด +ค่าตัว +คาถา +คาถาพัน +คาถาอาคม +คาทอลิก +ค่าที่ +คาธ +ค่าธรรมเนียม +ค่าธรรมเนียมศาล +คาน +ค้าน +คานคอดิน +คานหาม +คาน้า +ค่าน้ำ +คาบ +คาบเกี่ยว +คาบชุด +คาบลูกคาบดอก +คาบศิลา +คาบสมุทร +คาบเส้น +ค้าประเวณี +ค่าป่วยการ +ค่าปากเรือ +ค่าเผา +คาพยุต +ค่าภาคหลวง +คาม +คาม- +คามณี +คามณีย์ +คามภีร์ +คามโภชก +คามวาสี +คามี +คาย +ค่าย +คายก +คายก- +คายกคณะ +ค่ายกักกัน +ค่ายเยาวชน +ค่ายอาสาพัฒนา +คายัน +คาร์บอน +คาร์บอนไดออกไซด์ +คาร์บอนมอนอกไซด์ +คาร์บอเนต +คาร์บอลิก +คาร์บูเรเตอร์ +คาร์โบรันดัม +คาร์โบไฮเดรต +คารพ +คารม +คารวะ +คาราคาก่า +คาราคาซัง +คาราเต้ +คาราวาน +ค่าฤชาธรรมเนียม +คาว +ค่าว +ค้าว +คาวตอง +คาวปลา +คาวี +คาวุต +คาส +ค่าสัมบูรณ์ +ค่าสินไหมทดแทน +ค่าเสมอภาค +ค่าเสียหาย +ค่าหด +คาหนังคาเขา +ค่าหน้าดิน +ค่าหัว +คำ +ค่ำ +ค้ำ +คำขวัญ +คำขอ +คำขาด +คำคม +ค้ำคอ +ค่ำคืน +คำคู่ความ +ค้ำเงิน +ค้ำจุน +ค้ำชู +คำดีควาย +คำโดด +คำตั้ง +คำตาย +คำติดต่อ +คำเติม +คำใต้ +คำแถลง +คำแถลงการณ์ +คำทาย +คำเทียบ +คำนวณ +คำนวร +คำนับ +คำนัล +คำนำ +คำนึง +คำนูณ +คำบังคับ +คำโบล +ค้ำประกัน +คำประสม +คำปรารภ +คำเป็น +คำฝอย +คำพิพากษา +คำเพลิง +คำฟ้อง +คำฟ้องแย้ง +ค้ำฟ้า +คำมั่น +คำมั่นว่าจะให้รางวัล +คำมากพยางค์ +คำมูล +คำเมือง +คำรน +คำรบ +คำร้อง +คำร้องขอ +คำร้องทุกข์ +คำราม +คำสุภาพ +คำแสด +คำหลวง +ค้ำหัว +คำแหง +คำโอง +คิกๆ +คิง +คิด +คิดการใหญ่ +คิดคด +คิดค้น +คิดตก +คิดถึง +คิดมาก +คิดเล็กคิดน้อย +คิดสมบัติบ้า +คิดสั้น +คิดหน้าคิดหลัง +คิดเห็น +คิดอ่าน +คิมห +คิมหันต์ +คิมหานะ +คิริ +คิรี +คิลาน- +คิลานปัจจัย +คิลานเภสัช +คิลานะ +คิว +คิ้ว +คิ้วนาง +คี่ +คีต +คีตกะ +คีบ +คีม +คีรี +คีรีบูน +คึก +คึ่ก +คึ่กๆ +คึกคัก +คึกคาม +คืน +คืนคำ +คืนชีพ +คืนดี +คืนตัว +คืนยังรุ่ง +คืนให้ +คืบ +คืบก็ทะเล ศอกก็ทะเล +คือ +คุ +คุก +คุกกี้ +คุกเข่า +คุกคลาน +คุกคาม +คุกพาทย์ +คุคะ +คุง +คุ้ง +คุณ +คุณ- +คุณชาย +คุณธรรม +คุณนาม +คุณนาย +คุณบท +คุณพิเศษ +คุณภาพ +คุณลักษณะ +คุณลุงคุณป้า +คุณวิเศษ +คุณวุฒิ +คุณศัพท์ +คุณสมบัติ +คุณหญิง +คุณากร +คุณูปการ +คุโณปการ +คุด +คุดคู้ +คุดทะราด +คุดทะราดเหยียบกรวด +คุต +คุตติ +คุ่น +คุ้น +คุ้นเคย +คุป +คุปต์ +คุปติ +คุม +คุ่ม +คุ้ม +คุ้มกัน +คุมกำเนิด +คุ้มเกรง +คุ้มครอง +คุมแค้น +คุมเชิง +คุ้มดีคุ้มร้าย +คุ้มเท้า +คุ้มโทษ +คุมธาตุ +คุมนุม +คุมฝอย +คุ้มห้าม +คุย +คุ้ย +คุ้ยเขี่ย +คุยช้าง +คุยห- +คุยหฐาน +คุยหประเทศ +คุยหรหัสย์ +คุรุ +คุรุกรรม +คุรุวาร +คุรุศึกษา +คุลา +คุลาซ่อนลูก +คุลิก่า +คุลีการ +คุหา +คู +คู่ +คู้ +คู่กรณี +คู่ขา +คู่แข่ง +คู่ครอง +คู่ควร +คู่ความ +คู่ความร่วม +คู่คิด +คู่คี่ +คู่เคียง +คู่โค +คู่ใจ +คู่ฉบับ +คู่ฉีก +คู่ชัก +คู่ชีพ +คู่ชีวิต +คูณ +คูณร่วมน้อย +คูถ +คู่ทุกข์คู่ยาก +คูน +คู้บัลลังก์ +คู่บ้านคู่เมือง +คู่บารมี +คู่บุญ +คู่ปรปักษ์ +คู่ปรับ +คูปอง +คู่ผสม +คู่ผัวตัวเมีย +คู่พระคู่นาง +คู่พิพาท +คู่ม้า +คู่มิตร +คู่มือ +คู่ยาก +คู่รัก +คูเรียงคูราย +คู่เรียงเคียงหมอน +คูเรียม +คู่ลำดับ +คู่ศัตรู +คู่สร้าง +คู่สวด +คู่สัญญา +คู่สายโทรศัพท์ +คู่หมั้น +คูหา +คู่หู +คู่แห่ +คู่อริ +คู่อาฆาต +คู่อาศัย +เค้ก +เค้เก้ +เค้ง +เคจฉ +เคณฑะ +เคด +เคน +เค้น +เคเบิล +เค็ม +เคมี +เคมีภัณฑ์ +เคมีอนินทรีย์ +เคมีอินทรีย์ +เคย +เคยตัว +เคยปาก +เคยมือ +เครง +เคร่ง +เคร่งขรึม +เคร่งครัด +เครงครา +เครงครำ +เครงคร่ำ +เครงครื้น +เคร่งเครียด +เครงเครียว +เครดิต +เครดิตฟองซิเอร์ +เครน +เครา +เคร่า +เคราแพะ +เคราหณี +เคราะห์ +เคราะห์หามยามร้าย +เครียด +เครียว +เครือ +เครือเขา +เครือเขาน้ำ +เครือเขามวก +เครื่อง +เครื่องกล +เครื่องกัณฑ์ +เครื่องกิน +เครื่องแกง +เครื่องเขิน +เครื่องครัว +เครื่องควบแน่น +เครื่องคู่ +เครื่องเครา +เครื่องเงิน +เครื่องจักร +เครื่องช่วงล่าง +เครื่องเซ่น +เครื่องดนตรี +เครื่องต้น +เครื่องตั้ง +เครื่องทอง +เครื่องทองทิศ +เครื่องทองน้อย +เครื่องเทศ +เครื่องใน +เครื่องบน +เครื่องบันทึกเสียง +เครื่องบิน +เครื่องบูชา +เครื่องแบบ +เครื่องประดับ +เครื่องปรุง +เครื่องปั้นดินเผา +เครื่องผูก +เครื่องมั่น +เครื่องมือ +เครื่องยนต์ +เครื่องยนต์ไอพ่น +เครื่องร่อน +เครื่องราง +เครื่องราชอิสริยาภรณ์ +เครื่องร่ำ +เครื่องเรือน +เครื่องล่าง +เครื่องเล่น +เครื่องว่าง +เครื่องสด +เครื่องสะดุ้ง +เครื่องสับ +เครื่องสาย +เครื่องสำอาง +เครื่องสุกำศพ +เครื่องสูง +เครื่องหมาย +เครื่องหมายการค้า +เครื่องหยวก +เครื่องหลัง +เครื่องห้า +เครื่องเหล็ก +เครื่องใหญ่ +เครื่องอังทราย +เครื่องอังน้ำ +เครือจักรภพ +เครือดิน +เครือแย่ง +เครือรัฐ +เครือวัลย์พันไม้ +เคล้ง +เคล็ด +เคล้น +เคล้า +เคล่าคล่อง +เคล้าคลึง +เคล้าเคลีย +เคลิบเคลิ้ม +เคลิ้ม +เคลีย +เคลียคลอ +เคลี้ยคลิง +เคลียเคล้า +เคลื่อน +เคลื่อนคลาด +เคลื่อนที่ +เคลื่อนไหว +เคลือบ +เคลือบคลุม +เคลือบแคลง +เคลือบแฝง +เคลือบฟัน +เคว้ง +เคว้งคว้าง +เคห- +เคหศาสตร์ +เคหเศรษฐศาสตร์ +เคหสถาน +เคหะ +เคหา +เคอย +เคอะ +เคา +เค้า +เค้าโครง +เค้าเงื่อน +เคาน์เตอร์ +เค้ามูล +เคารพ +เค้าสนามหลวง +เคาะ +เคาะแคะ +เคี้ย +เคียง +เคียงบ่าเคียงไหล่ +เคียด +เคียดแค้น +เคียน +เคียม +เคี่ยม +เคี่ยมคะนอง +เคียร +เคียว +เคี่ยว +เคี้ยว +เคี่ยวขัน +เคี่ยวขับ +เคี่ยวเข็ญ +เคี้ยวฟัน +เคี้ยวเอื้อง +เคื้อ +เคือง +แค +แค่ +แค้ +แคแกล +แคดเมียม +แค็ตตาล็อก +แคแตร +แคโทด +แคน +แค่น +แค้น +แค้นคอ +แค่นแคะ +แค่นไค้ +แคบ +แคบหมู +แคปซูล +แคฝรั่ง +แคฝอย +แคม +แคร่ +แครก +แครครั่ง +แครง +แครงเครียว +แคระ +แคลคูลัส +แคลง +แคลงใจ +แคลเซียม +แคลเซียมคาร์ไบด์ +แคลเซียมไซคลาเมต +แคลน +แคล้ว +แคล่วคล่อง +แคล้วคลาด +แคลอรี +แคลิฟอร์เนียม +แคแล +แคว +แควก +แคว้ง +แคว้น +แคแสด +แคะ +แคะไค้ +โค +โคก +โคกกระสุน +โคกกระออม +โคกม้า +โคแก่ชอบกินหญ้าอ่อน +โคคลาน +โคเคน +โค่ง +โค้ง +โคจร +โคจร- +โคจรคาม +โคเซแคนต์ +โคไซน์ +โคตร +โคตร- +โคตรภู +โคตรภูญาณ +โคเถลิง +โคแทนเจนต์ +โคธา +โคน +โค่น +โคนดินสอ +โคนตายปลายเป็น +โคนม +โคนสมอ +โคบอลต์ +โคบาล +โคบุตร +โคปผกะ +โคเพลาะ +โคไพร +โคม +โคมดอกไม้ +โคมตาวัว +โคมลอย +โคมเวียน +โคมัย +โคม่า +โคมูตร +โครก +โครกครอก +โครกคราก +โครง +โคร่ง +โครงการ +โคร่งคร่าง +โครงแคร +โครงจมูก +โครงเรื่อง +โครงสร้าง +โครม +โครมคราม +โครเมียม +โครโมโซม +โครส +โคราช +โครำ +โคโรค +โคล +โคลง +โคลงเคลง +โคลน +โควตา +โควิถี +โคศัพท์ +โคออร์ดิเนต +ใคร +ใคร่ +ใคร่ครวญ +ไค +ไค้ +ไคร้ +ไคร้เครือ +ไคล +ไคล้ +ฅ +ฆ +ฆน +ฆราวาส +ฆ้อง +ฆ้องกระแต +ฆ้องชัย +ฆ้องปากแตก +ฆ้องวง +ฆ้องสามย่าน +ฆ้องหุ่ย +ฆ้องเหม่ง +ฆ้องโหม่ง +ฆ่า +ฆ่าควายอย่าเสียดายพริก +ฆาฏ +ฆาต +ฆาต- +ฆาตกร +ฆาตกรรม +ฆาน +ฆาน- +ฆานประสาท +ฆ่าไม่ตายขายไม่ขาด +เฆี่ยน +โฆรวิส +โฆษก +โฆษณา +โฆษณาการ +โฆษณาชวนเชื่อ +โฆษะ +โฆษิต +ง +งก +งกเงิ่น +งกๆ เงิ่นๆ +งง +งงงวย +งงงัน +งงิด +งด +งดงาม +งบ +งบดุล +งบประมาณ +งม +งมเข็มในมหาสมุทร +งมโข่ง +งมงาย +งวง +ง่วง +ง่วงงุน +งวงช้าง +ง่วงเหงา +ง่วงเหงาหาวนอน +งวด +ง่วน +ง้วน +งวยงง +งอ +ง้อ +งอก +งอกงาม +งอกเงย +งอกแงก +งอก่องอขิง +ง่อง +ง่องแง่ง +ง้องอน +งอแง +งอด +งอดแงด +งอน +ง่อน +งอนง้อ +ง่อนแง่น +งอนไถ +งอนหง่อ +ง้อนหมู +งอบ +งอม +ง้อม +งอมแงม +งอมพระราม +งอมืองอตีน +งอย +ง่อย +ง่อยเปลี้ยเสียขา +งอหาย +งะ +งักๆ +งั่กๆ +งังๆ +งั่ง +งัด +งัดข้อ +งัน +งันงก +งับ +งับแง +งัว +งั่ว +งัวเงีย +งัวซัง +งัวเลีย +งา +ง่า +งากำจาย +งาเครือ +ง้าง +ง่าเงย +งาช้าง +งาแซง +งาไซ +งาตัด +งาน +ง่าน +งานการ +งานหลวงไม่ให้ขาด งานราษฎร์ไม่ให้เสีย +งาบๆ +งาม +ง่าม +งามงอน +งามแงะ +ง่ามถ่อ +งามหน้า +งาย +ง่าย +ง่ายๆ +ง่ายดาย +ง่าย้อย +งาลั่ว +ง้าว +งาสาน +งำ +ง่ำ +ง่ำๆ +ง้ำ +งิ้ว +งีบ +งึกๆ +งึน +งึม +งึมงำ +งุด +งุดๆ +งุนงง +งุ่นง่าน +งุบ +งุบๆ +งุบงิบ +งุ้ม +งุ่มง่าม +งุย +งู +งูกลืนหาง +งูกินหาง +งูบ +งูๆ ปลาๆ +งูผู้ +งูเมีย +งูสวัด +งู่หนี +งูเหลือม +งูเห่า +เง้ +เงก +เง็น +เงย +เงยหน้าอ้าปาก +เงอะ +เงอะงะ +เงา +เงาๆ +เง่า +เง้า +เง้างอด +เง้าๆ งอดๆ +เงาตามตัว +เงามัว +เงามืด +เงาะ +เงาะป่า +เงิน +เงินก้นถุง +เงินก้อน +เงินกู้ +เงินเชื่อ +เงินดาวน์ +เงินเดือน +เงินแดง +เงินได้กำบัง +เงินต้น +เงินตรา +เงินตาย +เงินทองตรา +เงินทอน +เงินนอน +เงินน้ำห้าน้ำหก +เงินปลีก +เงินปันผล +เงินปากถุง +เงินปากผี +เงินปี +เงินแป +เงินผ่อน +เงินฝืด +เงินเฟ้อ +เงินมุ่น +เงินยวง +เงินเยอรมัน +เงินร้อน +เงินรายปี +เงินสด +เงินสเตอร์ลิง +เงินหลวง +เงินแห้ง +เงี่ยง +เงี่ยน +เงียบ +เงียบกริบ +เงียบเชียบ +เงียบเป็นเป่าสาก +เงียบเหงา +เงี้ยว +เงี้ยวระเริง +เงี้ยวรำลึก +เงี่ยหู +เงื้อ +เงือก +เงื่อง +เงื่องๆ +เงื่องหงอย +เงื้อง่าราคาแพง +เงือด +เงือดงด +เงือดเงื้อ +เงือน +เงื่อน +เงื่อนไข +เงื่อนไขบังคับก่อน +เงื่อนไขบังคับหลัง +เงื่อนงำ +เงื่อนเวลา +เงื่อนเวลาเริ่มต้น +เงื่อนเวลาสิ้นสุด +เงือบ +เงื้อม +เงื้อมมือ +แง +แงๆ +แง่ +แง่ง +แง่งๆ +แง่งขิง +แง่งอน +แง่น +แง่นๆ +แง้ม +แงะ +โง +โง่ +โงก +โงกเงก +โง่แกมหยิ่ง +โงง +โง่งๆ +โง้ง +โงงเงง +โง่งเง่ง +โงเง +โง่เง่า +โง่เง่าเต่าตุ่น +โงน +โงนเงน +โง่แล้วอยากนอนเตียง +ไง้ +จ +จก +จง +จ่ง +จ๋ง +จงกรม +จงกรมแก้ว +จงกล +จงกลนี +จงเกลียดจงชัง +จงโคร่ง +จงใจ +จงดี +จงรัก +จงรักภักดี +จงอร +จงอาง +จแจ้น +จญ +จด +จดจ่อ +จดจ้อง +จดๆ จ้องๆ +จดจำ +จดทะเบียน +จดหมัด +จดหมาย +จดหมายเวียน +จดหมายเหตุ +จดุร +จดุรงค์ +จดูร- +จตุ- +จตุกาลธาตุ +จตุตถ- +จตุตถี +จตุทิพยคันธา +จตุบท +จตุบริษัท +จตุปัจจัย +จตุปาริสุทธิศีล +จตุร- +จตุรคูณ +จตุรงค์ +จตุรงคนายก +จตุรงคประดับ +จตุรงคยมก +จตุรถ- +จตุรพักตร์ +จตุรพิธ +จตุรพิธพร +จตุรภุช +จตุรภูมิ +จตุรยุค +จตุราริยสัจ +จตุลังคบาท +จตุโลกบาล +จตุสดมภ์ +จทึง +จน +จ้น +จนกระทั่ง +จนกว่า +จนชั้น +จนด้วยเกล้า +จนถึง +จนแล้วจนรอด +จบ +จบเห่ +จม +จ่ม +จมเบ้า +จมปลัก +จมไม่ลง +จมร +จมรี +จมูก +จมูกปลาหลด +จมูกปลาไหล +จมูกมด +จมูกวัว +จมูกหลอด +จยุติ +จร +จร- +จรก +จรกลู่ +จรแกว่ง +จรคั่ง +จรจรัล +จรจัด +จรณะ +จรด +จรดพระกรรไตรกรรบิด +จรดพระนังคัล +จรดล +จรบน +จรบัน +จรบาท +จรมัน +จรมูก +จรรจา +จรรโจษ +จรรม +จรรม- +จรรมการ +จรรมขัณฑ์ +จรรยา +จรรยาบรรณ +จรรโลง +จรลวง +จรล่วง +จรลาด +จรลาย +จรล่ำ +จรลิ่ว +จรลี +จรลู่ +จรวจ +จรวจไจร +จรวด +จรวดจรี +จรวดนำวิถี +จรวัก +จรส +จรอก +จระกล้าย +จระขาบ +จระเข้ +จระเข้ปากกระทุงเหว +จระเข้หางยาว +จระคลับ +จระคล้าย +จระคลุ่ม +จระแคง +จระจุ่ม +จระทก +จระเทิน +จระนำ +จระบาน +จระบี +จระลิ่ง +จระลึง +จระลุง +จรัล +จรัส +จราก +จราง +จราจร +จราญ +จราย +จราว +จราส +จริก +จริง +จริงๆ +จริงจัง +จริงใจ +จริงอยู่ +จริต +จริม- +จริย- +จริยธรรม +จริยวัตร +จริยศาสตร์ +จริยศึกษา +จริยา +จริยาปิฎก +จริยาวัตร +จริว +จรี +จรึง +จรุก +จรุง +จรูง +จรูญ +จรูส +จเร +จล +จลนพลศาสตร์ +จลนศาสตร์ +จลนี +จลา +จลาจล +จวก +จ๊วก +จวง +จ้วง +จ๋วง +จ๋วงเครือ +จวงจันทน์ +จ้วงจาบ +จวงหอม +จวด +จวดลาก +จวน +จวนเจียน +จวนแจ +จวนตัว +จวบ +จวบจวน +จวัก +จอ +จ่อ +จ้อ +จ๋อ +จอก +จ้อก +จ้อกๆ +จ๊อก +จ๊อกๆ +จ้อกแจ้ก +จ้อกวอก +จอกหูหนู +จอง +จ่อง +จ้อง +จ๋อง +จองคช +จองจำ +จ้องเต +จองถนน +จองเปรียง +จองเวรจองกรรม +จองหง่อง +จ้องหน่อง +จองหอง +จองหองพองขน +จอแจ +จ๋อแจ๋ +จอด +จอน +จ้อน +จอนจ่อ +จอนหู +จอบ +จอม +จ่อม +จอมขวัญ +จ่อมจ่าย +จอมใจ +จอมไตร +จอมทอง +จอมทัพ +จอมปลวก +จอมปลอม +จ้อมป้อม +จอมเปาะ +จอมพล +จอมมารดา +จอมสุรางค์ +จ่อย +จ้อย +จ๋อย +จ๋อยๆ +จอแส +จะ +จ้ะ +จ๊ะ +จ๋ะ +จะกรัจจะกราจ +จะกรุน +จะกรุมจะกราม +จะกรูน +จะกละ +จะกลาม +จะกวด +จะกูด +จะเกร็ง +จะขาบ +จะเข้ +จะเข็บ +จะงอย +จะจะ +จะจ้า +จะแจ้ง +จะแจ่ม +จะไจ้ +จะบัน +จะปิ้ง +จะปิ้งเรือ +จะเพลิง +จะละเม็ด +จะละหวั่น +จะลุง +จ๊ะเอ๋ +จัก +จั้กๆ +จักกาย +จั๊กกิ้ม +จักขุ +จักขุทวาร +จักขุประสาท +จักขุวิญญาณ +จักขุสัมผัส +จักจั่น +จักจี้ +จั๊กจี้ +จั๊กเดียม +จักร +จักร- +จักรปาณิ +จักรปาณี +จักรพรรดิ +จักรพาก +จักรพาล +จักรภพ +จักรยาน +จักรยานยนต์ +จักรราศี +จักรวรรดิ +จักรวรรดินิยม +จักรวาก +จักรวาต +จักรวาล +จักริน +จักรี +จั๊กเล้อ +จักษุ +จักสาน +จักแหล่น +จัง +จั้ง +จั๋ง๑ +จังกวด +จังกอบ +จังกา +จังก้า +จังกูด +จังเก +จังโกฏก์ +จังงัง +จังมัง +จั้งมั่ง +จังไร +จังลอน +จังเว็จ +จังหนับ +จังหน้า +จังหรีด +จังหล่อ +จังหวะ +จังหวัด +จังหัน +จังออน +จัญไร +จัณฑ- +จัณฑ์ +จัณฑวาตา +จัณฑาล +จัด +จัดการ +จัดจอง +จัดจ้า +จัดจ้าน +จัดเจน +จัดแจง +จัดตั้ง +จัดประกัน +จัดมั่น +จัดสรร +จัดหา +จัตตาฬีส +จัตวา +จัตวาทัณฑี +จัตวาศก +จัตุ +จัตุร- +จัตุรงค์ +จัตุรพักตร์ +จัตุรภุช +จัตุรมุข +จัตุรัส +จัตุโลกบาล +จัตุสดมภ์ +จัน +จั่น +จันโจษ +จั่นดิน +จันท์ +จันทน์ +จันทน์กะพ้อ +จันทน์ขาว +จันทน์ชะมด +จันทน์แดง +จันทน์เทศ +จันทน์ผา +จันทน์หอม +จันทนา +จันทร- +จันทร์ +จันทรกลา +จันทรกานต์ +จันทรคติ +จันทรคราส +จันทรพิมพ์ +จันทรมณฑล +จันทรเม็ด +จันทรวงศ์ +จันทรเศขร +จันทรุปราคา +จันทัน +จันทันพราง +จันลอง +จันเลา +จันเลาะ +จั้นหล่อ +จั่นหับ +จั่นห้าว +จันอับ +จับ +จับกลุ่ม +จับกัง +จับกุม +จับเขม่า +จับไข้ +จับความ +จับงูข้างหาง +จับจด +จับจอง +จับจ่าย +จับจิต +จับเจ่า +จับเจี๋ยว +จับใจ +จับฉ่าย +จับเชิง +จับดำถลำแดง +จับเดิม +จับตัววางตาย +จับตา +จับตาดู +จับตาย +จับปิ้ง +จับเป็น +จับโปง +จับผิด +จับพลัดจับผลู +จับแพะชนแกะ +จับยาม +จับยี่กี +จับระบำ +จับเวลา +จับสั่น +จับสายสิญจน์ +จับเสือมือเปล่า +จับหลัก +จับหวัด +จับหัวเข่าพูด +จัมบก +จัมปก +จัมมะ +จัว +จั่ว +จั๊วะ +จา +จ่า +จ้า +จ๋า +จาก +จากพราก +จากพาก +จ่ากลอง +จาค- +จาคี +จาง +จ่าง +จ้าง +จางวาง +จาด +จาดตะกั่ว +จาตุ- +จาตุกรณีย์ +จาตุทสี +จาตุมหาราช +จาตุร- +จาตุรงค- +จาตุรงค์ +จาตุรงคสันนิบาต +จาตุรนต์ +จาตุรนต์รัศมี +จาตุรราชการ +จาตุรันต์ +จาน +จ้าน +จานจ่าย +จานเจือ +จานเชิง +จานบิน +จานผี +จานเสียง +จาบ +จาบจ้วง +จาบัล +จาบัลย์ +จาป +จ่าปี่ +จาม +จ่ามงกุฎ +จามจุรี +จามร +จามรี +จามีกร +จ่าย +จ่ายตลาด +จาร +จ่ารง +จารวาก +จาระไน +จาระบี +จาริก +จารี +จารีต +จารีตนครบาล +จารีตประเพณี +จารึก +จารุ +จ้าละหวั่น +จาว +จาวๆ +จ่าว +จ้าว +จาวมะพร้าว +จ่าหน้า +จ่าหวัก +จำ +จ้ำ +จำกว่า +จำกัด +จำกัดความ +จำกัดจำเขี่ย +จำกัดสินใช้ +จำครบ +จำงาย +จำจอง +จ้ำจี้ +จ้ำจี้จ้ำไช +จำเจ +จำเดิม +จำทวย +จำทับ +จำทาบ +จำเทิด +จำแทง +จำนง +จำนน +จำนรรจ์ +จำนรรจา +จำนวน +จำนวนจริง +จำนวนจินตภาพ +จำนวนเชิงซ้อน +จำนวนตรรกยะ +จำนวนเต็ม +จำนวนนับ +จำนวนอตรรกยะ +จำนอง +จำนับ +จำนัล +จำนำ +จำนำพรรษา +จำเนียน +จำเนียม +จำเนียร +จำแนก +จำโนทย์ +จำบ่ม +จำบัง +จำบับ +จำเบศ +จ้ำเบ้า +จำแบ +จำปา +จำปาขอม +จำปาแขก +จำปาดะ +จำปาทองเทศ +จำปาลาว +จำปาหอม +จำปี +จำปีแขก +จำปูน +จำเป็น +จำพรรษา +จำพวก +จำเพาะ +จำแพรก +จ้ำม่ำ +จำรด +จำรัส +จำราญ +จำราย +จำรูญ +จำเริญ +จำเรียง +จำลอง +จำลองทอง +จำลาย +จำเลย +จำเลาะ +จำเลาะตา +จำแลง +จำแล่น +จำวัด +จำศีล +จำหนับ +จ๋ำหนับ +จำหน่าย +จำหระ +จำหล่อ +จำหลอก +จำหลัก +จำหัน +จำห้าประการ +จำหาย +จำหุด +จำเหียง +จำอวด +จำอื่น +จิ +จิก +จิกปีก +จิกหัว +จิ่ง +จิ้งจก +จิงจ้อ +จิ้งจอก +จิงจัง +จิ้งจัง +จิงโจ้ +จิงโจ้น้ำ +จิ้งหรีด +จิ้งหรีดผี +จิ้งเหลน +จิ้งเหลนด้วง +จิต +จิต- +จิตกาธาน +จิตกึ่งสำนึก +จิตใจ +จิตต- +จิตต์ +จิตตภาวนา +จิตตวิสุทธิ +จิตตานุปัสสนา +จิตใต้สำนึก +จิตนิยม +จิตบำบัด +จิตแพทย์ +จิตภาพ +จิตร +จิตร- +จิตรกร +จิตรกรรม +จิตรจุล +จิตรปทา +จิตรลดา +จิตรเลขา +จิตระ +จิตรา +จิตไร้สำนึก +จิตวิทยา +จิตวิสัย +จิตเวชศาสตร์ +จิตสำนึก +จินเจา +จินดา +จินดามณี +จินดามัย +จินดาหนา +จินดาหรา +จินต- +จินต์ +จินตกวี +จินต์จล +จินตนาการ +จินตภาพ +จิบ +จิปาถะ +จิ่ม +จิ้ม +จิ้มก้อง +จิ้มฟันจระเข้ +จิ้มลิ้ม +จิร- +จิรกาล +จิรัฐิติกาล +จิ๋ว +จี +จี่ +จี้ +จี๋ +จี๋จ้อ +จี่จู้ +จีแจ๊บ +จี๊ด +จีน +จีนเต็ง +จีนแส +จีนแสโสกา +จีบ +จีบปากจีบคอ +จีบพลู +จีโบ +จีพร +จีม +จีวร +จีวร- +จีวรกรรม +จีวรการสมัย +จีวรกาลสมัย +จีวรทานสมัย +จีวรภาชก +จี้เส้น +จึง +จึ่ง +จึ้ง +จืด +จืดจาง +จืดชืด +จืดตา +จื้นเจือก +จุ +จุๆ +จุก +จุ๊กกรู๊ +จุกจิก +จุกเจ่า +จุกช่องล้อมวง +จุกชี +จุกผาม +จุกผามม้ามย้อย +จุกพราหมณ์ +จุกยา +จุกโรหินี +จุ่ง +จุ้งจัง +จุ๋งจิ๋ง +จุใจ +จุฑา +จุฑาธิปไตย +จุฑามณี +จุฑามาศ +จุฑารัตน์ +จุณ +จุณณียบท +จุด +จุดจบ +จุดเด่น +จุดเดือด +จุดไต้ตำตอ +จุดทศนิยม +จุดน้ำค้าง +จุดบอด +จุดยืน +จุดยุทธศาสตร์ +จุดเยือกแข็ง +จุดรวม +จุดลูกน้ำ +จุดศูนย์กลาง +จุดศูนย์ถ่วง +จุดสัมผัส +จุดหมาย +จุดหมายปลายทาง +จุดหลอมเหลว +จุดหลัง +จุดเหี่ยวเฉา +จุดอ่อน +จุดอิ่มตัว +จุติ +จุตูปปาตญาณ +จุทส +จุทสมสุรทิน +จุน +จุ่น +จุ้น +จุ้นจ้าน +จุนจู๋ +จุ้นจู๊ +จุนเจือ +จุนทการ +จุนสี +จุบ +จุ๊บ +จุบจิบ +จุ๊บแจง +จุปาก +จุ่ม +จุ้ม +จุ๋มจิ๋ม +จุมพฏ +จุมพรวด +จุมพล +จุมพิต +จุมโพล่ +จุ้ย +จุรณ +จุรี +จุไร +จุล- +จุลกฐิน +จุลจอมเกล้า +จุลชีพ +จุลชีวัน +จุลชีวิน +จุลทรรศน์ +จุลภาค +จุลวงศ์ +จุลวรรค +จุลศักราช +จุลสาร +จุลินทรีย์ +จุฬา +จุฬามณี +จุฬาราชมนตรี +จุฬาลักษณ์ +จุฬาลัมพา +จู +จู่ +จู่ๆ +จู้ +จู๋ +จูง +จูงจมูก +จูงใจ +จูงนางเข้าห้อง +จูงนางลีลา +จูงมือ +จู้จี้ +จู๋จี๋ +จู่โจม +จู๊ด +จูบ +จูบฝุ่น +จูรณ +จู่ลู่ +เจ +เจ๊ก +เจ๊กตื่นไฟ +เจ่ง +เจ้ง +เจ๊ง +เจ็ด +เจ็ดชั่วโคตร +เจ็ดตะคลี +เจดีย- +เจดีย์ +เจดียถาน +เจดีย์ทิศ +เจดียสถาน +เจต +เจต- +เจตคติ +เจตจำนง +เจตนา +เจตนารมณ์ +เจตพังคี +เจตภูต +เจตมูลเพลิง +เจตมูลเพลิงฝรั่ง +เจตสิก +เจติย- +เจโตวิมุติ +เจน +เจนจบ +เจนจัด +เจนใจ +เจ็บ +เจ็บไข้ +เจ็บแค้น +เจ็บใจ +เจ็บช้ำน้ำใจ +เจ็บท้อง +เจ็บปวด +เจ็บป่วย +เจ็บร้อน +เจ็บแสบ +เจรจา +เจริญ +เจริญตาเจริญใจ +เจริญพร +เจริญพันธุ์ +เจริญรอย +เจริญสมณธรรม +เจริญอาหาร +เจริด +เจรียง +เจลียง +เจว็ด +เจษฎา +เจ๊สัว +เจอ +เจ่อ +เจ๋อ +เจ๋อเจ๊อะ +เจอร์เมเนียม +เจอะ +เจา +เจ่า +เจ้า +เจ๊า +เจ้ากรม +เจ้ากรรม +เจ้ากรรมนายเวร +เจ้ากระทรวง +เจ้ากี้เจ้าการ +เจ้ากู +เจ้าขรัว +เจ้าของ +เจ้าขา +เจ้าข้า +เจ้าข้าวแดงแกงร้อน +เจ้าขุนมุลนาย +เจ้าขุนมูลนาย +เจ้าไข้ +เจ้าคณะ +เจ้าครอก +เจ้าคารม +เจ้าคุณ +เจ้าคุณจอม +เจ้าแง่เจ้างอน +เจ้าแง่แสนงอน +เจ้าจอม +เจ้าจอมมารดา +เจ้าจำนวน +เจ้าจำนำ +เจ่าจุก +เจ้าชีวิต +เจ้าชู้ +เจ้าเซ็น +เจ้าเซ็นเต้นต้ำบุด +เจ้าตัว +เจ้าถ้อยหมอความ +เจ้าท่า +เจ้าที่ +เจ้าทุกข์ +เจ้าไทย +เจ้านาย +เจ้าเนื้อ +เจ้าบ้าน +เจ้าบ่าว +เจ้าบุญนายคุณ +เจ้าเบี้ย +เจ้าประคุณ +เจ้าประคู้น +เจ้าปู่ +เจ้าพนักงาน +เจ้าพนักงานบังคับคดี +เจ้าพนักงานพิทักษ์ทรัพย์ +เจ้าพนักงานภูษามาลา +เจ้าพนักงานสนมพลเรือน +เจ้าพระเดชนายพระคุณ +เจ้าพระยา +เจ้าพ่อ +เจ้าพายุ +เจ้าฟ้า +เจ้าฟ้าหญิงสิรินธร +เจ้าภาพ +เจ้าภาษี +เจ้ามรดก +เจ้ามือ +เจ้าแม่ +เจ้าไม่มีศาล สมภารไม่มีวัด +เจ้ายศ +เจ้าเรือน +เจ้าเล่ห์ +เจ้าสัว +เจ้าสาว +เจ้าสำนวน +เจ้าสำบัดสำนวน +เจ้าสำราญ +เจ้าหน้า +เจ้าหน้าเจ้าตา +เจ้าหน้าที่ +เจ้าหนี้ +เจ้าหลวง +เจ้าหล่อน +เจ้าหัว +เจ้าอธิการ +เจ้าอารมณ์ +เจ้าอาวาส +เจาะ +เจาะจง +เจาะจมูก +เจิ่ง +เจิด +เจิดจ้า +เจิ่น +เจิม +เจีย +เจียง +เจียด +เจียดยา +เจียน +เจี๋ยน +เจี๊ยบ +เจียม +เจี๋ยมเจี้ยม +เจียมสังขาร +เจียร +เจียระไน +เจียระบาด +เจียว +เจี๊ยวจ๊าว +เจือ +เจือจาง +เจือจาน +เจื่อน +เจือปน +เจื้อย +เจื้อยแจ้ว +เจือสม +แจ +แจ้ +แจ๋ +แจก +แจกจ่าย +แจกแจง +แจกไพ่ +แจกัน +แจง +แจ่ง +แจ้ง +แจ้งความ +แจงรูป +แจงลอน +แจงสี่เบี้ย +แจจน +แจจัน +แจ๊ด +แจดแจ้ +แจ๊ดแจ๋ +แจตร +แจ้น +แจบ +แจ่ม +แจ่มแจ้ง +แจ่มใส +แจร +แจรก +แจรง +แจว +แจ่ว +แจ้ว +แจ้วๆ +แจ๋ว +แจ๋วแหวว +แจะ +โจก +โจ๊ก +โจง +โจงกระเบน +โจงกระเบนตีเหล็ก +โจ่งครึ่ม +โจ๋งครึ่ม +โจ่งครุ่ม +โจงโคร่ง +โจ๋งเจ๋ง +โจ่งแจ้ง +โจท +โจทก์ +โจทเจ้า +โจทนา +โจทย์ +โจน +โจนร่ม +โจม +โจมตี +โจมทัพ +โจร +โจร- +โจรกรรม +โจรสลัด +โจล +โจษ +โจษจน +โจษจัน +โจษแจ +ใจ +ใจกลาง +ใจกว้าง +ใจขุ่น +ใจแข็ง +ใจความ +ใจคอ +ใจแคบ +ใจง่าย +ใจจดใจจ่อ +ใจจืด +ใจเฉื่อย +ใจชื้น +ใจดำ +ใจดี +ใจเด็ด +ใจเดียว +ใจเดียวกัน +ใจต่ำ +ใจเติบ +ใจแตก +ใจโต +ใจถึง +ใจน้อย +ใจบาน +ใจบุญ +ใจเบา +ใจปลาซิว +ใจป้ำ +ใจแป้ว +ใจฝ่อ +ใจเพชร +ใจมา +ใจมือ +ใจไม่ดี +ใจไม้ไส้ระกำ +ใจยักษ์ +ใจเย็น +ใจร้อน +ใจร้าย +ใจเร็ว +ใจลอย +ใจสูง +ใจเสาะ +ใจเสีย +ใจหนักแน่น +ใจหาย +ใจเหี่ยวแห้ง +ใจใหญ่ใจโต +ใจอ่อน +ไจ +ไจ้ +ไจ้ๆ +ไจร +ฉ +ฉก +ฉกจวัก +ฉกฉวย +ฉกชิง +ฉกรรจ์ +ฉกรรจ์ลำเครื่อง +ฉกษัตริย์ +ฉกาจ +ฉกาจฉกรรจ์ +ฉกามาพจร +ฉกามาวจร +ฉง +ฉงน +ฉงาย +ฉทวาร +ฉทานศาลา +ฉทึง +ฉนวน +ฉนัง +ฉนาก +ฉนำ +ฉบบ +ฉบัง +ฉบัด +ฉบับ +ฉบำ +ฉพีสติม- +ฉม +ฉมบ +ฉมวก +ฉมวย +ฉม่อง +ฉมัง +ฉมัน +ฉมา +ฉมำ +ฉล +ฉลวย +ฉลวยฉลาด +ฉลอง +ฉลองได +ฉลองพระกรน้อย +ฉลองพระเนตร +ฉลองพระบาท +ฉลองพระศอ +ฉลองพระหัตถ์ +ฉลองพระองค์ +ฉลององค์ +ฉลอม +ฉลอมท้ายญวน +ฉลัก +ฉลับ +ฉลาก +ฉลากบาง +ฉลาง +ฉลาด +ฉลาม +ฉลามเสือ +ฉลาย +ฉลิว +ฉลีก +ฉลุ +ฉลุกฉลวย +ฉลุลาย +ฉลู +ฉวย +ฉวยฉาบ +ฉวะ +ฉวัดเฉวียน +ฉวาง +ฉวี +ฉศก +ฉ้อ +ฉอก +ฉ้อโกง +ฉ่อง +ฉ้อฉล +ฉอดๆ +ฉ่อย +ฉ้อราษฎร์บังหลวง +ฉอเลาะ +ฉะ +ฉะกะ +ฉะฉาด +ฉะฉาน +ฉะฉ่ำ +ฉะฉี่ +ฉะเฉื่อย +ฉะต้า +ฉะนั้น +ฉะนี้ +ฉะหน้าโรง +ฉะอ้อน +ฉักกะ +ฉัฐ +ฉัด +ฉัตร +ฉัตร- +ฉัตรบรรณ +ฉัตรมงคล +ฉัตรสามชั้น +ฉัททันต์ +ฉัน +ฉันใด +ฉันท- +ฉันท์ +ฉันทลักษณ์ +ฉันทวิลาส +ฉันทศาสตร์ +ฉันทะ +ฉันทา +ฉันทาคติ +ฉันทานุมัติ +ฉันนั้น +ฉันวุติ +ฉับ +ฉับๆ +ฉับพลัน +ฉับไว +ฉัพพรรณรังสี +ฉัยยา +ฉ่า +ฉาก +ฉากญี่ปุ่น +ฉากตั้ง +ฉากทิ้ง +ฉากน้อย +ฉากบังเพลิง +ฉากใหญ่ +ฉาง +ฉ่าง +ฉ่าฉาว +ฉาด +ฉาดฉาน +ฉาตกภัย +ฉาทน +ฉาน +ฉาบ +ฉาบฉวย +ฉาป +ฉาย +ฉายเฉิด +ฉายา +ฉายาลักษณ์ +ฉาว +ฉาวโฉ่ +ฉ่ำ +ฉำฉา +ฉำเฉง +ฉำแฉะ +ฉิ่ง +ฉิ่งตรัง +ฉิน +ฉินท- +ฉินท์ +ฉินทฤกษ์ +ฉิบ +ฉิบหาย +ฉิมพลี +ฉิว +ฉี่ +ฉีก +ฉีกหน้า +ฉีด +ฉีดยา +ฉุ +ฉุก +ฉุกคิด +ฉุกใจ +ฉุกเฉิน +ฉุกละหุก +ฉุด +ฉุน +ฉุนเฉียว +ฉุป +ฉุป- +ฉุปศาสตร์ +ฉุย +ฉุยฉาย +ฉุยฉายเข้าวัง +ฉู่ +ฉู่ฉี่ +ฉูด +ฉูดฉาด +เฉ +เฉก +เฉโก +เฉ่ง +เฉไฉ +เฉด +เฉท +เฉนียน +เฉพาะ +เฉพาะกาล +เฉพาะกิจ +เฉพาะตัว +เฉพาะพระพักตร์ +เฉพาะหน้า +เฉย +เฉยๆ +เฉยเมย +เฉลย +เฉลว +เฉลา +เฉลิม +เฉลิมพระชนมพรรษา +เฉลี่ย +เฉลียง +เฉลี่ยง +เฉลียบ +เฉลียว +เฉลียวใจ +เฉลียวฉลาด +เฉวียง +เฉวียงบ่า +เฉวียน +เฉอะแฉะ +เฉา +เฉาก๊วย +เฉาโฉด +เฉาฮื้อ +เฉาะ +เฉาะๆ +เฉาะปล่อง +เฉิด +เฉิดฉัน +เฉิดฉาย +เฉิดฉิน +เฉิบ +เฉิบๆ +เฉียง +เฉียงพร้าดำ +เฉียงพร้านางแอ +เฉียงพร้ามอญ +เฉียด +เฉียบ +เฉียบขาด +เฉียบพลัน +เฉียบแหลม +เฉียว +เฉี่ยว +เฉียวฉุน +เฉือน +เฉื่อย +เฉื่อยๆ +เฉื่อยชา +แฉ +แฉ่ +แฉก +แฉกๆ +แฉง +แฉ่ง +แฉโพย +แฉลบ +แฉล้ม +แฉละ +แฉว +แฉะ +แฉะแบะ +โฉ +โฉ่ +โฉเก +โฉ่งฉ่าง +โฉงเฉง +โฉ่ฉาว +โฉด +โฉดเฉา +โฉนด +โฉบ +โฉเบ๊ +โฉม +โฉมงาม +โฉมฉาย +โฉมเฉลา +โฉมตรู +โฉมยง +โฉมศรี +โฉมหน้า +โฉลก +ไฉน +ไฉไล +ช +ชก +ชกมวย +ชกา +ชค- +ชคดี +ชคัตตรัย +ชง +ชงคา +ชงโค +ชงฆ- +ชงฆ์ +ชงฆา +ชงโลง +ชฎา +ชฎากลีบ +ชฎาเดินหน +ชฎาธาร +ชฎาแปลง +ชฎาพอก +ชฎามหากฐิน +ชฎามังษี +ชฎามังสี +ชฎิล +ชด +ชดช้อย +ชดเชย +ชดใช้ +ชทึง +ชน +ชน- +ชนก +ชนก- +ชนกกรรม +ชนช้าง +ชนนี +ชนบท +ชนม- +ชนม์ +ชนมพรรษา +ชนมาพิธี +ชนมายุพิธี +ชนวน +ชนหมู่น้อย +ชนะ +ชนัก +ชนักติดหลัง +ชนา +ชนาง +ชนิด +ชนินทร์ +ชเนตตี +ชบา +ชบาหนู +ชปโยค +ชม +ชมชัว +ชมชาญ +ชมเชย +ชมไช +ชมดชม้อย +ชมนาด +ชมบ +ชมเปาะ +ชมพู +ชมพู่ +ชมพูทวีป +ชมพูนท +ชมพูนุท +ชมพูพาดบ่า +ชมรม +ชมเลาะ +ชมสวนสวรรค์ +ชม้อย +ชมัน +ชมา +ชม้าย +ชไม +ชย +ชย- +ชยา +ชโย +ชร +ชรทึง +ชรโมล +ชรไม +ชรราง +ชรริน +ชรเรือด +ชรแรง +ชรแร่ง +ชรโลง +ชรอกชรัง +ชรออบ +ชรอัด +ชรอ่ำ +ชรอื้อ +ชรอุ่ม +ชระ +ชระงม +ชระง่อน +ชระงำ +ชระดัด +ชระดื่น +ชระเดียด +ชระเดียดชระดัด +ชระบอบ +ชระบาบ +ชระมด +ชระมัว +ชระมื่น +ชระมุกชระมอม +ชระมุ่น +ชระเมียง +ชระเมียน +ชระลอ +ชระลอง +ชระล่อง +ชระลั่ง +ชระลัด +ชระล้ำ +ชระลุ +ชระแลง +ชระอับ +ชระอาบ +ชระเอม +ชรัด +ชรัว +ชรา +ชรากากี +ชราธรรม +ชราบ +ชราบชรับ +ชราภาพ +ชรายุ +ชริน +ชรุก +ชรูบ +ชล +ชล- +ชลจร +ชลจัณฑ์ +ชลชาติ +ชลธาร +ชลธารก +ชลธิศ +ชลธี +ชลนัยน์ +ชลนา +ชลเนตร +ชลประทาน +ชลมารค +ชลสถาน +ชลัมพุ +ชลาธาร +ชลาพุช +ชลามพุช +ชลาลัย +ชลาศัย +ชลี +ชลูกา +ชเล +ชโลง +ชโลทร +ชโลม +ชว- +ช่วง +ช่วงชัย +ช่วงชิง +ช่วงโชติ +ช่วงใช้ +ช่วงทรัพย์ +ช่วงบาท +ช่วงเมือง +ช่วงสิทธิ์ +ชวด +ชวน +ชวนชม +ชวนหัว +ชวย +ช่วย +ช่วยเหลือ +ชวร +ชวลิต +ชวัก +ชวา +ชวาล +ชวาลา +ช่อ +ชอก +ช็อกโกเลต +ช็อกโกแลต +ชอกช้ำ +ชอง +ช่อง +ช้อง +ช่องกุด +ช่องเขา +ช่องแคบ +ช่องดาล +ช่องตีนกา +ช้องนาง +ช้องนางคลี่ +ช่องไฟ +ช้องแมว +ชองระอา +ชอน +ช่อน +ช้อน +ช้อนนาง +ช้อนหอย +ชอบ +ชอบกล +ชอบใจ +ชอบธรรม +ชอบพอ +ชอบมาพากล +ช่อฟ้า +ชอม +ช่อม่วง +ช่อย +ช้อย +ช้อยชด +ช้อยช่างรำ +ช้อยนางรำ +ชอล์ก +ช่ออินทนิล +ชอ่ำ +ชอื้อ +ชอุ่ม +ชะ +ชะคราม +ชะงอก +ชะง่อน +ชะงัก +ชะงัด +ชะงาบ +ชะง้ำ +ชะงุ้ม +ชะเง้อ +ชะเงื้อม +ชะแง้ +ชะโงก +ชะโงกผา +ชะฉ่า +ชะช่อง +ชะชะ +ชะช้า +ชะชิด +ชะดีชะร้าย +ชะโด +ชะตา +ชะต้า +ชะนี +ชะนีร่ายไม้ +ชะนุง +ชะเนาะ +ชะเนียง +ชะพลู +ชะเพลิง +ชะมด +ชะมดเชียง +ชะมดต้น +ชะมบ +ชะมวง +ชะมัง +ชะมัด +ชะแม่ +ชะรอย +ชะลอ +ชะลอม +ชะล่า +ชะลาน +ชะลิน +ชะลูด +ชะเลง +ชะเลย +ชะแล็ก +ชะแลง +ชะวัง +ชะวาก +ชะวากทะเล +ชะวาด +ชะวุ้ง +ชะเวิกชะวาก +ชะแวง +ชะอม +ชะอ้อน +ชะเอม +ชะโอน +ชัก +ชักกระบี่สี่ท่า +ชักคราม +ชักโครก +ชักเงา +ชักจูง +ชักชวน +ชักช้า +ชักซอสามสาย +ชักซุงตามขวาง +ชักตะพานแหงนเถ่อ +ชักนำ +ชักน้ำเข้าลึก ชักศึกเข้าบ้าน +ชักเนื้อ +ชักใบให้เรือเสีย +ชักแป้งผัดหน้า +ชักพระ +ชักแม่น้ำทั้งห้า +ชักยันต์ +ชักเย่อ +ชักใย +ชักรูป +ชักศพ +ชักสองแถว +ชักสื่อ +ชักหน้า +ชักหน้าไม่ถึงหลัง +ชัค- +ชัง +ชั่ง +ชังคา +ชังฆ- +ชังฆวิหาร +ชั่งใจ +ชั่งหลวง +ชัชวาล +ชัฏ +ชัด +ชัดเจน +ชัดช้า +ชัน +ชั้น +ชันกาด +ชันคอ +ชั้นฉาย +ชั้นชั่ว +ชันชี +ชั้นเชิง +ชันตาฆร +ชันตุ +ชันนะตุ +ชันนุ +ชันนุกะ +ชันพอน +ชันโรง +ชันษา +ชันสน +ชันสูตร +ชันสูตรพลิกศพ +ชัปน +ชัพ +ชัมพูนท +ชัย +ชัย- +ชัยบาน +ชัยพฤกษ์ +ชัยภูมิ +ชัยเภรี +ชัยศรี +ชัลลุกา +ชั่ว +ชั้ว +ชั่วคน +ชั่วคราว +ชัวชม +ชั่วช้า +ชั่วช่างชี ดีช่างสงฆ์ +ชั่วแต่ว่า +ชั่วนาตาปี +ชั่วโมง +ชั่วแล่น +ชา +ช้า +ช้าก่อน +ชาคร +ชาคริต +ชาคริยานุโยค +ช่าง +ช้าง +ช่างกระไร +ช่างเครื่อง +ช้างงวง +ช้างชำนิ +ช้างชูงวง +ช้างต่อ +ช้างตายทั้งตัวเอาใบบัวมาปิด +ช่างทอง +ช้างทำลายโรง +ช้างน้อย +ช้างน้าว +ช้างน้ำ +ช้างประสานงา +ช่างปะไร +ช้างผะชด +ช้างเผือก +ช้างพลาย +ช้างพัง +ช่างฟิต +ช่างไฟ +ช้างร้อง +ช้างสะบัดหญ้า +ช้างเหยียบ +ช่างเหล็ก +ช้างใหญ่ +ช้าช่อน +ชาญ +ชาด +ชาดก +ชาดหรคุณ +ช้าๆ ได้พร้าสองเล่มงาม +ชาต- +ชาตบุษย์ +ชาตรี +ชาตรูป +ชาตสระ +ชาตะ +ชาตา +ชาติ +ชาติ- +ชาติธรรม +ชาตินิยม +ชาติพันธุ์ +ชาติพันธุ์วรรณนา +ชาติพันธุ์วิทยา +ชาติภูมิ +ชาติมาลา +ชาติรส +ชาน +ชานชาลา +ชานวาทิก +ช้านางนอน +ช้านาน +ชานุ +ชานุกะ +ชานุมณฑล +ช้าปี่ +ชาปีไหน +ช้าเป็นการ นานเป็นคุณ +ช้าแป้น +ช้าพลู +ชาม +ชามพูนท +ชามาดร +ชามาดา +ชามาตุ +ชาย +ชายกระเบน +ชายกระเบนเหน็บ +ชายคา +ชายแครง +ชายชาตรี +ชายตา +ชายทะเล +ชายธง +ชายผ้าสีดา +ชายฝั่ง +ชายเฟือย +ชายสามโบสถ์ +ชายไหว +ชายา +ชายาชีพ +ชายานุชีพ +ชาเยนทร์ +ชาเยศ +ชาร +ชารี +ชาล +ชาล- +ชาลกรรม +ชาลา +ชาลินี +ช้าลูกหลวง +ช้าเลือด +ชาว +ชาวนอก +ชาวน้ำ +ชาวม่าน +ชาวเล +ชาววัง +ชาวี +ช้าหมอง +ชำ +ช่ำ +ช้ำ +ชำงัด +ชำงาย +ชำงือ +ช่ำใจ +ช้ำใจ +ช้ำชอก +ช่ำชอง +ช่ำช่า +ชำนน +ชำนรร +ชำนะ +ชำนัญ +ชำนัญพิเศษ +ชำนัน +ชำนาญ +ชำนาญเกลากลอน +ชำนิ +ชำนิชำนาญ +ชำเนียน +ชำเนียร +ช่ำปอด +ชำมะนาด +ชำมะเลียง +ชำร่วย +ชำระ +ช้ำรั่ว +ชำรุด +ชำเรา +ชำเราะ +ชำแรก +ชำแระ +ชำลา +ชำเลือง +ช้ำเลือดช้ำหนอง +ชำแหละ +ชิ +ชิง +ชิ่ง +ชิงคม +ชิงช่วง +ชิงชัง +ชิงชัน +ชิงชัย +ชิงช้า +ชิงช้าชาลี +ชิงช้าสวรรค์ +ชิงชี่ +ชิงเชิง +ชิงดวง +ชิงดีชิงเด่น +ชิงทรัพย์ +ชิงเปรต +ชิงพลบ +ชิงสุกก่อนห่าม +ชิงไหวชิงพริบ +ชิงฮื้อ +ชิชะ +ชิชิ +ชิณณะ +ชิด +ชิเดนทรีย์ +ชิต +ชิต- +ชิตินทรีย์ +ชิน +ชิ่น +ชิ้น +ชินโต +ชินบุตร +ชิ้นเอก +ชิโนรส +ชิม +ชิมแปนซี +ชิมลาง +ชิยา +ชิรณ- +ชิรณะ +ชิรณัคคิ +ชิระ +ชิวหา +ชิวหาสดมภ์ +ชิสา +ชี +ชี่ +ชี้ +ชี้ขาด +ชี้แจง +ชี้ช่อง +ชีต้น +ชี้ตัว +ชี้นกบนปลายไม้ +ชี้นกเป็นนก ชี้ไม้เป็นไม้ +ชี้นำ +ชี้นิ้ว +ชี้แนะ +ชีปะขาว +ชีเปลือย +ชีผะขาว +ชีผ้าขาว +ชีฝรั่ง +ชีพ +ชีพ- +ชีพจร +ชีพิต +ชีพิตักษัย +ชีพุก +ชีฟอง +ชี้ฟ้า +ชีมืด +ชีรณ- +ชีรณัคคิ +ชีระ +ชีล้อม +ชีลา +ชีลาว +ชีว- +ชีวเคมี +ชีวงคต +ชีวประวัติ +ชีวโลก +ชีววิทยา +ชีวะ +ชีวัน +ชีวันตราย +ชีวา +ชีวาตม์ +ชีวาลัย +ชีวิต +ชีวิตชีวา +ชีวิตักษัย +ชีวิตินทรีย์ +ชีวิน +ชีวี +ชี้สองสถาน +ชืด +ชื่น +ชื้น +ชื่นชม +ชื่นชมยินดี +ชื่นบาน +ชื่นมื่น +ชื่อ +ชื้อ +ชื่อตัว +ชื่อย่อ +ชื่อเล่น +ชื่อว่า +ชื่อสกุล +ชื่อเสียง +ชุ +ชุก +ชุกชี +ชุกชุม +ชุ่ง +ชุ้ง +ชุณห- +ชุณหปักษ์ +ชุด +ชุติ +ชุติมา +ชุน +ชุบ +ชุบชีวิต +ชุบชู +ชุบตัว +ชุบมือเปิบ +ชุบย้อม +ชุบเลี้ยง +ชุบสรง +ชุบอาบ +ชุม +ชุ่ม +ชุ่มใจ +ชุมชน +ชุ่มชื่น +ชุ่มชื้น +ชุมทางรถไฟ +ชุมนุม +ชุมนุมชน +ชุมพร +ชุมพา +ชุมเพ็ด +ชุมแพรก +ชุมรุม +ชุมสาย +ชุมสายโทรศัพท์ +ชุมแสง +ชุมเห็ด +ชุ่ย +ชุ่ยๆ +ชุลมุน +ชุลี +ชุษณ- +ชุษณปักษ์ +ชุษณะ +ชู +ชู้ +ชูกลิ่น +ชูคอ +ชูใจ +ชูชีพ +ชูรส +ชูโรง +ชู้สาว +ชูหน้าชูตา +ชู้เหนือขันหมาก +ชู้เหนือผัว +ชู้เหนือผี +เช็ค +เช็คขีดคร่อม +เช็คไปรษณีย์ +เช้ง +เชงเลง +เช้งวับ +เช็ด +เช็ดน้ำ +เช็ดหน้า +เช็ดหม้อ +เชน +เช่น +เชย +เชยชม +เชรา +เชราะ +เชริด +เชลง +เชลย +เชลยศักดิ์ +เชลยศึก +เชลแล็ก +เชลียง +เชวง +เชษฐ- +เชษฐะ +เชษฐา +เชอ +เช่า +เช้า +เช่าช่วง +เช่าซื้อ +เช้าตรู่ +เช่าถือสวน +เช่าทรัพย์ +เช่าพระ +เช้ามืด +เชาว์ +เชาวน์ +เชิง +เชิงกรวย +เชิงกราน +เชิงกล +เชิงกลอน +เชิงชั้น +เชิงชาย +เชิงซ้อน +เชิงเดิน +เชิงเดียว +เชิงเดี่ยว +เชิงตะกอน +เชิงทรง +เชิงเทิน +เชิงมุม +เชิงเวียน +เชิงอรรถ +เชิญ +เชิด +เชิดจีน +เชิดฉิ่ง +เชิดชู +เชิดหนัง +เชิดหน้าชูตา +เชิดหุ่น +เชิ้ต +เชีย +เชี้ย +เชียง +เชี่ยน +เชี่ยนหมาก +เชียบ +เชี่ยม +เชียร +เชียร์ +เชียรณ์ +เชียว +เชี่ยว +เชี่ยวชาญ +เชื่อ +เชื้อ +เชือก +เชือกเขา +เชือกบาศ +เชื่อง +เชื่องช้า +เชื่อใจ +เชื้อชาติ +เชื้อเชิญ +เชือด +เชื่อถือ +เชือน +เชือนแช +เชื้อเพลิง +เชื่อฟัง +เชื้อไฟ +เชื่อม +เชื่อมือ +เชื้อไม่ทิ้งแถว +เชื้อรา +เชื้อโรค +เชื่อวัน +เชื้อสาย +เชื้อหมัก +แช +แช่ +แช่ง +แช่งชักหักกระดูก +แช่งน้ำ +แชงมา +แชบ๊วย +แช่เบ้า +แช่ม +แช่มช้อย +แช่มชื่น +แช่เย็น +แชร์ +แชรง +แชล่ม +แช่อิ่ม +แชะ +โชก +โชกๆ +โชกโชน +โชค +โชงโลง +โชดก +โชดึก +โชต +โชตก +โชติ +โชติ- +โชติก- +โชติช่วง +โชติรส +โชน +โชมโรม +โชย +โชยงการ +โชยชาย +โชยติส +โชรม +โชว์ +โชโหว +ใช่ +ใช้ +ใช้กรรม +ใช้ได้ +ใช้เนื้อ +ใช้บน +ใช้ใบ +ใช้เรือ +ใช้สอย +ไช +ไชนะ +ไชย +ไชย- +ไชยเภท +ไชโย +ซ +ซก +ซ่ก +ซงดำ +ซ่งฮื้อ +ซง้า +ซด +ซน +ซ่น +ซ้น +ซบ +ซบเซา +ซม +ซมซาน +ซรอกซรัง +ซวด +ซวดเซ +ซวดทรง +ซวน +ซวนเซ +ซวย +ซอ +ซอก +ซอกซอน +ซอกซัง +ซอกแซก +ซอง +ซ่อง +ซ่องๆ +ซ้อง +ซ่องแซ่ง +ซองพลู +ซองมือ +ซองแมว +ซ้องแมว +ซ่องสุม +ซ่องเสพ +ซองหาง +ซอแซ +ซ้อแซ้ +ซอน +ซ่อน +ซ้อน +ซ้อนกล +ซ่อนกลิ่น +ซ่อนเงื่อน +ซ้อนซับ +ซ่อนทราย +ซ่อนรูป +ซ่อนหา +ซอม +ซ่อม +ซ้อม +ซ้อมค้าง +ซอมซ่อ +ซ้อมซัก +ซ่อมแซม +ซ่อมแปลง +ซ้อมพยาน +ซ้อมพวน +ซ้อมใหญ่ +ซอย +ซอยผม +ซอส +ซะซร้าว +ซะซ่อง +ซะซอเซีย +ซะซิกซะแซ +ซะซิบ +ซะเซาะ +ซะเซียบ +ซัก +ซักซ้อม +ซักไซ้ +ซักฟอก +ซักส้าว +ซักแห้ง +ซัง +ซั้ง +ซังกะตาย +ซังแซว +ซังตาย +ซัด +ซัดข้าวสาร +ซัดเซ +ซัดทอด +ซัดน้ำ +ซัดยา +ซั้น +ซับ +ซับขนุน +ซับซ้อน +ซับซาบ +ซับซี่ +ซับใน +ซับพระพักตร์ +ซับมัน +ซัม +ซัลฟา +ซั้ว +ซา +ซ่า +ซาก +ซากดึกดำบรรพ์ +ซากศพ +ซาง +ซ่าง +ซาด +ซาน +ซ่าน +ซ่านเซ็น +ซาบซ่าน +ซาบซึ้ง +ซ่าโบะ +ซาแมเรียม +ซ้าย +ซาลาเปา +ซาว +ซาวน้ำ +ซาวเสียง +ซ่าหริ่ม +ซ้ำ +ซ้ำซ้อน +ซ้ำซาก +ซ้ำเติม +ซ้ำร้าย +ซ้ำสาม +ซิ +ซิก +ซิกๆ +ซิกซี้ +ซิกแซ็ก +ซิการ์ +ซิงโคนา +ซิ่น +ซินนามิก +ซินแส +ซิบ +ซิบๆ +ซิบซับ +ซิป +ซิฟิลิส +ซิลิคอน +ซิว +ซี +ซี่ +ซีก +ซี่โครง +ซี้ซอน +ซีเซียม +ซีด +ซีดเซียว +ซีนอน +ซีป่าย +ซีเมนต์ +ซีเรียม +ซีลีเนียม +ซึก +ซึง +ซึ่ง +ซึ้ง +ซึ่งหน้า +ซึม +ซึมกะทือ +ซึมซาบ +ซึมทราบ +ซื่อ +ซื่อๆ +ซื้อ +ซื้อขาย +ซื้อควายหน้านา ซื้อผ้าหน้าตรุษ +ซื้องัวหน้านา ซื้อผ้าหน้าหนาว +ซื่อตรง +ซื้อรำคาญ +ซื้อรู้ +ซื่อสัตย์ +ซื้อหน้า +ซื่อเหมือนแมวนอนหวด +ซุก +ซุกซน +ซุกซ่อน +ซุกซิก +ซุง +ซุน +ซุบ +ซุบซิบ +ซุบซู่ +ซุป +ซุ่ม +ซุ้ม +ซุ้มกระต่าย +ซุ่มคม +ซุ่มซ่าม +ซุมแซว +ซุ่มเสียง +ซุย +ซู่ +ซู่ๆ +ซู่กั้นรั้วไซมาน +ซูโครส +ซู่ซ่า +ซูด +ซู้ด +ซูดซาด +ซูบ +เซ +เซ็ก +เซแคนต์ +เซ็ง +เซ่ง +เซ้ง +เซ็งแซ่ +เซซัง +เซต +เซน +เซ็น +เซ่น +เซนติกรัม +เซนติเกรด +เซนติเมตร +เซนติลิตร +เซ่นเหล้า +เซปักตะกร้อ +เซรา +เซราะ +เซรุ่ม +เซลเซียส +เซลล์ +เซลล์ทุติยภูมิ +เซลล์ปฐมภูมิ +เซลลูลอยด์ +เซลลูโลส +เซ่อ +เซ่อซ่า +เซอร์โคเนียม +เซอะ +เซา +เซ้าซี้ +เซาะ +เซาะลาย +เซิง +เซิ้ง +เซียน +เซียบ +เซียมซี +เซียว +เซี่ยว +เซี่ยวกาง +เซื่อง +แซ +แซ่ +แซ็กคาริน +แซ็กคารินโซเดียม +แซง +แซงแซว +แซ่ซ้อง +แซด +แซดๆ +แซบ +แซม +แซยิด +แซ่ว +แซะ +โซ +โซ่ +โซก +โซ่ง +โซงโขดง +โซซัดโซเซ +โซเซ +โซดา +โซดาแผดเผา +โซดาไฟ +โซเดียม +โซเดียมคาร์บอเนต +โซเดียมซัลเฟต +โซเดียมไซคลาเมต +โซเดียมไฮโดรเจนกลูทาเมต +โซเดียมไฮโดรเจนคาร์บอเนต +โซเดียมไฮโดรเจนซัลเฟต +โซม +โซรม +โซรมประทยด +โซรมโรม +โซรมศัสตราวุธ +โซลา +ไซ +ไซ้ +ไซเกิล +ไซโคลน +ไซน์ +ไซยาไนด์ +ไซร้ +ไซเรน +ไซโล +ฌ +ฌาน +ฌาปน- +ฌาปนกิจ +ฌาปนสถาน +เฌอ +เฌอเอม +ญ +ญญ่าย +ญวน +ญัตติ +ญาณ +ญาณ- +ญาณทัสนะ +ญาณวิทยา +ญาณศาสตร์ +ญาติ +ญาติ- +ญาติกา +ญาติดีกัน +ญาติเภท +ญิบ +ญี่ +ญี่ปุ่น +เญยธรรม +ไญยธรรม +ฎ +ฎีกา +ฏ +ฐ +ฐกัด +ฐากูร +ฐาน +ฐาน- +ฐานกรณ์ +ฐานเขียง +ฐานเชิงบาตร +ฐานเท้าสิงห์ +ฐานบัทม์ +ฐานราก +ฐานสิงห์ +ฐานะ +ฐานันดร +ฐานานุกรม +ฐานานุรูป +ฐานานุศักดิ์ +ฐานียะ +ฐาปน- +ฐาปนา +ฐายี +ฐิต +ฐิติ +ฑ +ฑังส- +ฑาก- +ฑาหก +ฑาหะ +ฒ +เฒ่า +เฒ่าแก่ +เฒ่าหัวงู +ณ +ณรงค์ +เณร +เณรหน้าไฟ +เณรหางนาค +ด +ดก +ดกดื่น +ดง +ด้ง +ดงดาน +ดงดิบ +ดงดึก +ดงวาย +ด้น +ด้นดั้น +ดนโด่ +ดนตรี +ด้นถอยหลัง +ดนย +ดนัย +ดนุ +ดนุช +ดนู +ดบัสวิน +ดบัสวี +ดม +ดมไร +ดร +ดรงค์ +ดรณี +ดรธาน +ดรรชนี +ดรรชนีหักเห +ดราฟต์ +ดรุ +ดรุณ +ดรุณาณัติ +ดรุณี +ดฤถี +ดล +ดล- +ดลใจ +ดลบันดาล +ดลภาค +ดวง +ด้วง +ดวงแก้ว +ดวงใจ +ดวงเดือนประดับดาว +ดวงตา +ดวงสมร +ด้วงโสน +ดวจ +ดวด +ด่วน +ด้วน +ด้วมเดี้ยม +ด้วย +ด้วยว่า +ดอก +ดอกกระบอก +ดอกกะทือ +ดอกก้าน +ดอกข้าวใหม่ +ดอกจอก +ดอกจัน +ดอกจันทน์ +ดอกจิก +ดอกชนต้น +ดอกดั้ว +ดอกด้าย +ดอกดิน +ดอกถวายพระ +ดอกทอง +ดอกน้ำผึ้ง +ดอกบัว +ดอกบุก +ดอกเบี้ย +ดอกเบี้ยทบต้น +ดอกพิกุลร่วง +ดอกฟ้อน +ดอกฟ้า +ดอกมะขาม +ดอกมะตาด +ดอกไม้ +ดอกไม้จันทน์ +ดอกไม้จีน +ดอกไม้จีบ +ดอกไม้เจ้า +ดอกไม้ตาด +ดอกไม้ทะเล +ดอกไม้เทียน +ดอกไม้ไทร +ดอกไม้น้ำ +ดอกไม้พวง +ดอกไม้พุ่ม +ดอกไม้เพลิง +ดอกไม้ไฟ +ดอกไม้ร่วง +ดอกไม้รุ่ง +ดอกไม้ไหว +ดอกรัก +ดอกลำดวน +ดอกลำโพง +ดอกเล็บ +ดอกสร้อย +ดอกหมาก +ดอกหิน +ดอกอาว +ดอกอาวแดง +ดอง +ด่องๆ +ด้อง +ด้องๆ +ดองฉาย +ดองดึง +ดองยา +ดองหาย +ดอด +ดอน +ด่อน +ดอม +ด่อม +ด้อม +ดอย +ด้อย +ดอลลาร์ +ดะ +ดะโต๊ะยุติธรรม +ดะหมัง +ดัก +ดักคอ +ดักดน +ดักดาน +ดักเดี้ย +ดักแด้ +ดักฟัง +ดักษก +ดักษณ +ดักษณี +ดักษัน +ดัง +ดั่ง +ดั้ง +ดังจริง +ดั้งเดิม +ดังนั้น +ดังนี้ +ดังรือ +ดังฤๅ +ดังหนึ่ง +ดัชนี +ดัด +ดัดจริต +ดัดดั้น +ดัดตน +ดัดปลัก +ดัดแปลง +ดัดสันดาน +ดัตช์ +ดัน +ดั้น +ดันทุรัง +ดั้นเมฆ +ดันเหิม +ดับ +ดับขันธ์ +ดับเครื่อง +ดับจิต +ดับชีพ +ดับลม +ดัมพ์ +ดั้วเดี้ย +ดัสกร +ดัสกรี +ดา +ด่า +ดาก +ด่าง +ด้าง +ด่างทับทิม +ด่างพร้อย +ดาด +ดาดๆ +ดาดตะกั่ว +ดาดฟ้า +ดาดาษ +ดาดำ +ด่าทอ +ดาน +ด่าน +ด้าน +ด้านไม้ +ด้านหน้า +ดาบ +ดาบเงิน +ดาบปลายปืน +ดาบลาว +ดาบส +ดาบสองคม +ดาม +ด้าม +ด้ามจิ้ว +ดามพ- +ดามพ์ +ดามพวรรณ +ดามร +ดาย +ด้าย +ด้ายซัง +ด้ายดิบ +ดาร +ดารก +ดารณี +ดารดาษ +ดารา +ดาราบถ +ดาราศาสตร์ +ดาล +ดาลฉัตร +ดาลเดือด +ดาลโทสะ +ดาลัด +ดาลุ +ดาลุช +ดาว +ด่าว +ด้าว +ดาวกระจาย +ดาวเคราะห์ +ดาวดึงส์ +ดาวตก +ดาวเทียม +ดาวบส +ดาวรุ่ง +ดาวเรือง +ดาวฤกษ์ +ดาวล้อมเดือน +ดาวหาง +ดาวเหนือ +ดาษ +ดาษดา +ดาษดื่น +ดาษเดียร +ดาหงัน +ดาฬ +ดำ +ด่ำ +ด้ำ +ดำกล +ดำเกิง +ดำแคง +ดำดง +ดำดิน +ดำแดง +ดำๆ แดงๆ +ดำนา +ดำนาณ +ดำนาน +ดำนู +ดำเนิน +ดำเนินคดี +ดำเนียน +ดำเนียร +ดำบล +ดำปืน +ดำพอง +ดำโพง +ดำรง +ดำรวจ +ดำรัส +ดำริ +ดำรี +ดำรู +ดำไร +ดำฤษณา +ดำเลิง +ดำแลง +ดำหนัก +ดำหนิ +ดำหัว +ดำอวด +ดิก +ดิกๆ +ดิง +ดิ่ง +ดิ่งพสุธา +ดิฉัน +ดิฐ +ดิตถ์ +ดิถี +ดิน +ดิ้น +ดินกรด +ดินขาว +ดินเค็ม +ดินดอนสามเหลี่ยม +ดินดำ +ดินแดง +ดินนวล +ดินประสิว +ดินปืน +ดินเปรี้ยว +ดินพอกหางหมู +ดิ้นรน +ดินร่วน +ดินระเบิด +ดินส้ม +ดินสอ +ดินสอพอง +ดินสำลี +ดินหู +ดินอีหรอบ +ดิบ +ดิบดี +ดิรัจฉาน +ดิลก +ดิ่ว +ดิ้ว +ดิ้วเดี้ยว +ดิษฐ์ +ดิสโพรเซียม +ดี +ดีๆ +ดีเกลือ +ดีเกลือฝรั่ง +ดีงู +ดีใจ +ดีฉัน +ดีฉาน +ดีซ่าน +ดีเซล +ดีด +ดีดขัน +ดีดดิ้น +ดีดฝ้าย +ดีดพิมพ์ +ดีดลูกคิด +ดีดลูกคิดรางแก้ว +-ดีดัก +ดีดีที +ดีเดือด +ดีแตก +ดีนาคราช +ดีเนื้อดีใจ +ดีบัว +ดีบุก +ดีปลี +ดีเปรสชัน +ดีผา +ดีฝ่อ +ดีพร +ดีไม่ดี +ดียา +ดีร้าย +ดีละ +ดีแล้ว +ดีหมี +ดีหลี +ดีหิน +ดีอกดีใจ +ดึก +ดึกดำบรรพ์ +ดึกดื่น +ดึง +ดึ่ง +ดึงดัน +ดึงดื้อ +ดึงดูด +ดึงสะ +ดึ่ม +ดื่น +ดื่นดาษ +ดื่นดึก +ดื่ม +ดื่มด่ำ +ดือ +ดื้อ +ดื้อดัน +ดื้อด้าน +ดื้อดึง +ดื้อแพ่ง +ดื้อยา +ดุ +ดุก +ดุกดิก +ดุกทะเล +ดุกลำพัน +ดุ้ง +ดุ้งดิ้ง +ดุจ +ดุจดัง +ดุจหนึ่ง +ดุด +ดุดัน +ดุเดือด +ดุน +ดุ้น +ดุบๆ +ดุม +ดุ่ม +ดุ่มๆ +ดุ่ย +ดุรค +ดุรงค์ +ดุรงคี +ดุร้าย +ดุริย- +ดุริยะ +ดุริยางค- +ดุริยางค์ +ดุริยางค์จำเรียง +ดุริยางคศาสตร์ +ดุริยางคศิลป์ +ดุล +ดุล- +ดุลการค้า +ดุลการชำระเงิน +ดุลชำระหนี้ +ดุลพินิจ +ดุลภาค +ดุลย- +ดุลยพินิจ +ดุลยภาพ +ดุลอำนาจ +ดุษฎี +ดุษฎีนิพนธ์ +ดุษฎีบัณฑิต +ดุษฎีมาลา +ดุษฎีสังเวย +ดุษณี +ดุษณีภาพ +ดุษิต +ดุสิต +ดุเหว่า +ดู +ดูกไก่ดำ +ดูกค่าง +ดูกร +ดูก่อน +ดูแคลน +ดูใจ +ดูช้างให้ดูหาง ดูนางให้ดูแม่ +ดูซิ +ดูด +ดูดดึง +ดูดดื่ม +ดูดอมดูดาย +ดูดาย +ดูดู๋ +ดูตาม้าตาเรือ +ดูถูก +ดูถูกดูแคลน +ดูเถอะ +ดูเถิด +ดูแน่ะ +ดูเบา +ดูไปก่อน +ดูรา +ดูร้าย +ดูรึ +ดูแล +ดูหมิ่น +ดูหมิ่นถิ่นแคลน +ดูหรือ +ดูหรู +ดูเหมือน +เด +เด่ +เดก +เด็ก +เด็กชา +เด็กชาย +เดกซ์โทรส +เด็กแดง +เด็กเมื่อวานซืน +เด็กหญิง +เด็กอมมือ +เดคากรัม +เดคาเมตร +เดคาลิตร +เด้ง +เด็จ +เดช +เดชน์ +เดชนะ +เดชะ +เดโช +เดโชชัย +เดโชพล +เดซิกรัม +เดซิเมตร +เดซิลิตร +เด็ด +เด็ดขาด +เด็ดดวง +เด็ดดอกไม้ร่วมต้น +เด็ดดอกไม่ไว้ขั้ว +เด็ดเดี่ยว +เด็ดบัวไม่ไว้ใย +เด็ดปลีไม่มีใย +เดน +เด่น +เดนตาย +เดนมาร์ก +เดรัจฉาน +เด๋อ +เด๋อด๋า +เดา +เด่า +เด่าๆ +เด้า +เด้าดิน +เด้าลม +เดาสวด +เดาสุ่ม +เดาะ +เดิน +เดิ่น +เดินขบวน +เดินคาถา +เดินจักร +เดินตลาด +เดินตามหลังผู้ใหญ่หมาไม่กัด +เดินแต้ม +เดินโต๊ะ +เดินทอง +เดินทัพ +เดินทาง +เดินทุ่ง +เดินเทียน +เดินธุระให้ +เดินนา +เดินป้าย +เดินรถ +เดินเรือ +เดินเรื่อง +เดินสวน +เดินสะพัด +เดินสาย +เดินเส้น +เดินหน +เดินเหิน +เดินไหม +เดินอากาศ +เดิม +เดิมที +เดิมพัน +เดี้ย +เดียง +เดียงสา +เดียด +เดียดฉันท์ +เดียร +เดียรดาษ +เดียรถ์ +เดียรถีย์ +เดียรัจฉาน +เดียว +เดี่ยว +เดี๋ยว +เดี๋ยวก่อน +เดียวกัน +เดียวดาย +เดี๋ยวเดียว +เดี๋ยวนี้ +เดียะ +เดื่อ +เดือก +เดื่อง +เดือด +เดือดดาล +เดือดร้อน +เดือน +เดือนขาด +เดือนค้างฟ้า +เดือนคี่ +เดือนคู่ +เดือนเต็ม +เดือนมืด +เดือนเย็น +เดือนร้อน +เดือนหงาย +เดือย +เดือยไก่ +แด +แด่ +แดก +แด็กๆ +แดกงา +แดกดัน +แดกแด้ +แด็กแด้ +แดกห่า +แดง +แดงน้ำ +แดด +แดดาล +แดดิ้น +แดน +แด่น +แดนไตร +แดยัน +แด่วๆ +แดะ +แดะแด๋ +โด +โด่ +โดกเดก +โด่ง +โด่งดัง +โดด +โดดๆ +โดดเดี่ยว +โดดร่ม +โด่เด่ +โดน +โดนดี +โดม +โดมไพร +โดมร +โด่ไม่รู้ล้ม +โดย +โดยจริง +โดยที่ +โดยพยัญชนะ +โดยสาร +โดยเสด็จ +โดยอรรถ +โดร +โดรณ +ใด +...ใด...หนึ่ง +ได +ได้ +ได้กัน +ได้การ +ได้แก่ +ได้แกงเทน้ำพริก +ได้ความ +ได้คิด +ได้ใจ +ได้ช่อง +ได้ชื่อ +ไดแซ็กคาไรด์ +ได้ท่า +ได้ท้าย +ได้ที +ได้ที่ +ได้ทีขี่แพะไล่ +ไดนาโม +ไดนาไมต์ +ไดโนเสาร์ +ได้ยิน +ไดเรกตริกซ์ +ได้ฤกษ์ +ได้สติ +ได้ส่วน +ได้ส่วนสัด +ได้เสีย +ได้เสียกัน +ได้หน้า +ได้หน้าลืมหลัง +ต +ตก +ตกกระ +ตกกระไดพลอยโจน +ตกขอบ +ตกขาว +ตกข้าว +ตกขุย +ตกคลัก +ตกค้าง +ตกเครือ +ตกงาน +ตกจั่น +ตกใจ +ตกดิน +ตกตะกอน +ตกตะลึง +ตกต่ำ +ตกแต่ง +ต๊กโต +ตกใต้เถรเทวทัต +ตกท้องช้าง +ตกทอด +ตกที่นั่ง +ตกนรกทั้งเป็น +ตกน้ำมัน +ตกน้ำไม่ว่าย +ตกน้ำไม่ไหล ตกไฟไม่ไหม้ +ตกใน +ตกเบ็ด +ตกเบิก +ตกประหม่า +ตกปลอก +ตกปลัก +ตกปากตกคำ +ตกเป็น +ตกเป็นเบี้ยล่าง +ตกผลึก +ตกพุ่มม่าย +ตกฟอง +ตกฟาก +ตกมัน +ตกมูก +ตกยาก +ตกรางวัล +ตกลง +ตกล่องปล่องชิ้น +ตกลูก +ตกเลือด +ตกว่า +ตกสนับ +ตกสะเก็ด +ตกแสก +ตกหนัก +ตกหมก +ตกหล่น +ตกหลุม +ตกหลุมพราง +ตกอับ +ตง +ต๋ง +ตงฉิน +ตงิด +ตงุ่น +ตจ- +ตจปัญจกกรรมฐาน +ตจสาร +ตด +ตดหมูตดหมา +ตติย- +ตถาคต +ตน +ต้น +ต้นกล +ต้นขั้ว +ต้นคอ +ต้นคิด +ต้นเงิน +ต้นฉบับ +ต้นชนดอก +ต้นเชือก +ต้นตระกูล +ต้นตอ +ต้นตายใบเป็น +ต้นตำรับ +ต้นทาง +ต้นทุน +ต้นเทียม +ต้นน้ำ +ต้นบท +ต้นแบบ +ต้นเพลิง +ต้นมือ +ต้นไม้ +ต้นร่าง +ต้นร้ายปลายดี +ต้นเรือ +ต้นเรื่อง +ต้นวายปลายดก +ต้นสังกัด +ต้นสายปลายเหตุ +ต้นเสียง +ต้นหน +ต้นเหตุ +ตนัย +ตนุ +ตนุมัธยมา +ตนุมัธยา +ตบ +ตบตา +ตบแต่ง +ตบเท้า +ตบแผละ +ตบมือ +ตบมือข้างเดียวไม่ดัง +ตบยุง +ตบหัวกลางศาลา ขอขมาที่บ้าน +ตบหัวลูบหลัง +ตบะ +ตปนียะ +ตม- +ต้ม +ต้มกะทิ +ต้มกะปิ +ต้มข่า +ต้มเค็ม +ต้มโคล้ง +ต้มปลาร้า +ต้มเปรต +ต้มเปอะ +ต้มยำ +ต้มยำกะทิ +ต้มส้ม +ต้มสุก +ตมูก +ตโม- +ตโมนุท +ตโมไพรี +ตโมหร +ตยาค +ตยาคี +ตยุติ +ตรง +ตรงๆ +ตรงกัน +ตรงกันข้าม +ตรณี +ตรม +ตรมตรอม +ตรมเตรียม +ตรมวล +ตรรก- +ตรรกศาสตร์ +ตรรกะ +ตรลบ +ตรลอด +ตรละ +ตรลา +ตรลาด +ตรเลิด +ตรวจ +ตรวจการณ์ +ตรวจข่าว +ตรวจตรา +ตรวจเลือด +ตรวด +ตรวน +ตรวย +ตรอก +ตรอง +ตรอมใจ +ตรอมตรม +ตระ +ตระกล +ตระกวน +ตระกอง +ตระกัด +ตระการ +ตระกูล +ตระกูลมูลชาติ +ตระคัร +ตระง่อง +ตระจัก +ตระชัก +ตระเชิญ +ตระดก +ตระดาษ +ตระเตรียม +ตระแตร้น +ตระทรวง +ตระนาว +ตระไน +ตระบก +ตระบอก +ตระบอง +ตระบัด +ตระบัดสัตย์ +ตระบัน +ตระเบ็ง +ตระแบ่ +ตระแบก +ตระแบง +ตระแบน +ตระแบ่น +ตระโบม +ตระพอง +ตระพัง +ตระมื่น +ตระโมจ +ตระลาการ +ตระวัน +ตระเว็ด +ตระเวน +ตระเวนไพร +ตระเวนวัน +ตระเวนเวหา +ตระสัก +ตระหง่อง +ตระหง่าน +ตระหนก +ตระหนัก +ตระหน่ำ +ตระหนี่ +ตระหนี่ตัว +ตระอร +ตระอาล +ตระโอม +ตรัง +ตรังค- +ตรังค์ +ตรังคนที +ตรังควชิราวดี +ตรับ +ตรับฟัง +ตรัย +ตรัยตรึงศ์ +ตรัส +ตรัสรู้ +ตรัสสา +ตรา +ตรากตรำ +ตราขุนพล +ตราจอง +ตราชู +ตราแดง +ตราตั้ง +ตราบ +ตราบเท่า +ตราบาป +ตราไปรษณียากร +ตราภูมิ +ตรายาง +ตราสัง +ตราสาร +ตราสิน +ตราหน้า +ตรำ +ตร่ำ +ตริ +ตริตรอง +ตริว +ตรี +ตรีกฏุก +ตรีกันสวาต +ตรีกาล +ตรีกาฬพิษ +ตรีกูฏ +ตรีเกสรมาศ +ตรีโกณ +ตรีโกณมิติ +ตรีคูณ +ตรีจีวร +ตรีฉินทลามกา +ตรีชาต +ตรีญาณรส +ตรีทศ +ตรีทิพ +ตรีทิพยรส +ตรีทุรวสา +ตรีทูต +ตรีเทวตรีคันธา +ตรีโทษ +ตรีธารทิพย์ +ตรีนิศก +ตรีเนตร +ตรีบถ +ตรีบูร +ตรีประดับ +ตรีปวาย +ตรีปิฎก +ตรีปิตผล +ตรีผลธาตุ +ตรีผลสมุตถาน +ตรีผลา +ตรีพิธพรรณ +ตรีพิษจักร +ตรีเพชรทัณฑี +ตรีเพชรพวง +ตรีเพชรสมคุณ +ตรีภพ +ตรีภพนาถ +ตรีภูมิ +ตรีภูว +ตรีมธุร +ตรีมูรติ +ตรียมก +ตรียัมปวาย +ตรีรัตน์ +ตรีโลก +ตรีโลกนาถ +ตรีโลเกศ +ตรีโลจน์ +ตรีโลหก +ตรีโลหะ +ตรีวาตผล +ตรีศก +ตรีศูล +ตรีสมอ +ตรีสมุตถาน +ตรีสัตกุลา +ตรีสันนิบาตผล +ตรีสาร +ตรีสินธุรส +ตรีสุคนธ์ +ตรีสุรผล +ตรีเสมหผล +ตรีอมฤต +ตรีอากาศผล +ตรีเอกภาพ +ตรีเอกานุภาพ +ตรึก +ตรึกตรอง +ตรึกถอง +ตรึง +ตรึงตรา +ตรึงศ- +ตรุ +ตรุณ +ตรุย +ตรุษ +ตรุษจีน +ตรู +ตรู่ +ตฤณ +ตฤณ- +ตฤณชาติ +ตฤณมัย +ตฤตีย- +ตฤตียะ +ตฤท +ตฤป +ตฤษณา +ตฤๅ +ตล +ตลก +ตลกคะนอง +ตลกบาตร +ตลกโปกฮา +ตลกหัวเราะ +ตลบ +ตลบตะแลง +ตลบนก +ตลบหลัง +ตลอด +ตลอดรอดฝั่ง +ตละ +ตลับ +ตลับนาก +ตลาด +ตลาดเงิน +ตลาดท้องน้ำ +ตลาดนัด +ตลาดน้ำ +ตลาดมืด +ตลาดยี่สาน +ตลาดสด +ตลาดหน้าคุก +ตลาดหลักทรัพย์ +ตลาดหุ้น +ตลิ่ง +ตลึง +ตวง +ตวงพระธาตุ +ต่วน +ต้วมเตี้ยม +ตวัก +ตวัด +ตวาด +ตอ +ต่อ +ต้อ +ตอก +ต๊อก +ต๊อกๆ +ต๊อกต๋อย +ต่อกร +ต้อกระจก +ตอกหน้า +ต่อกิ่ง +ต่อความยาวสาวความยืด +ตอง +ต้อง +ตองกราย +ต้องกัน +ต้องการ +ต้องคดี +ต้องใจ +ตองตอย +ต้องตา +ต้องเต +ตองแตก +ต่องแต่ง +ต้องโทษ +ต้องธรณีสาร +ตองเปรียง +ต้องสู้ +ต้องหา +ตองเหลือง +ตอด +ตอดต่อ +ต่อตา +ต่อต้าน +ต่อตาม +ต่อตี +ต่อแต้ม +ตอน +ต้อน +ต้อนรับ +ต้อนรับขับสู้ +ต้อนหมูเข้าเล้า +ต่อนัดต่อแนง +ต้อเนื้อ +ตอบ +ตอบโต้ +ตอบแทน +ตอเบา +ต่อปาก +ต่อปากต่อคำ +ต่อปากหลากคำ +ตอม +ต่อม +ต๋อม +ต่อมน้ำ +ต่อมโลหิต +ตอม่อ +ต่อย +ต้อย +ต้อยๆ +ต้อยตริ่ง +ต้อยติ่ง +ต้อยตีวิด +ต่อยหอย +ตอแย +ต่อแย้ง +ตอร์ปิโด +ต่อล้อต่อเถียง +ต้อลำไย +ต้อลิ้นหมา +ต่อว่า +ต่อสู้ +ต่อไส้ +ต่อหน้า +ต่อหน้ามะพลับ ลับหลังตะโก +ต้อหิน +ตอแหล +ต่ออายุ +ตะ +ตะกรน +ตะกรวย +ตะกร้อ +ตะกร่อม +ตะกรัน +ตะกรับ +ตะกร้า +ตะกราม +ตะกรุด +ตะกรุม +ตะกรุมตะกราม +ตะกละ +ตะกลาม +ตะกวด +ตะกอ +ตะกอน +ตะกัง +ตะกั่ว +ตะกั่วเกรียบ +ตะกั่วแดง +ตะกั่วตัด +ตะกาง +ตะกาด +ตะกาย +ตะกาว +ตะกุกตะกัก +ตะกุย +ตะกุยตะกาย +ตะกู +ตะกูด +ตะเกียกตะกาย +ตะเกียง +ตะเกียงแก๊ส +ตะเกียงรั้ว +ตะเกียงลาน +ตะเกียบ +ตะแก +ตะแก่ +ตะแกรง +ตะโก +ตะโก้ +ตะโกก +ตะโกขาว +ตะโกดำ +ตะโกน +ตะโกรง +ตะโกรม +ตะโกส้ม +ตะไกร +ตะขบ +ตะขบฝรั่ง +ตะขอ +ตะขาบ +ตะขิดตะขวง +ตะเข้ +ตะเข้ขบฟัน +ตะเข็บ +ตะเข็บไต่ขอน +ตะเขิง +ตะโขง +ตะคร้อ +ตะครอง +ตะครั่นตะครอ +ตะคร้ำ +ตะคริว +ตะครุบ +ตะครุบกบ +ตะคลับตะคล้าย +ตะคอก +ตะคัน +ตะค้า +ตะคาก +ตะคาง +ตะค้าทอง +ตะค้าน +ตะคิว +ตะคุ่ม +ตะคุ่มๆ +ตะเครียว +ตะเคียน +ตะเคียนทอง +ตะเคียนเผือก +ตะเคียว +ตะแคง +ตะไคร่ +ตะไคร้ +ตะไคร้แดง +ตะไคร้น้ำ +ตะไคร้บก +ตะไคร้หอม +ตะไคร้หางนาค +ตะเฆ่ +ตะแง้ +ตะติน +ตะแตร้น +ตะนอย +ตะนาว +ตะบม +ตะบอง +ตะบองกัน +ตะบองแดง +ตะบองเพชร +ตะบอย +ตะบัน +ตะบันไฟ +ตะบิ้ง +ตะบิด +ตะบิดตะบอย +ตะบี้ตะบัน +ตะบึง +ตะบุ้ย +ตะบุ้ยๆ +ตะบูน +ตะเบ็ง +ตะเบ็งมาน +ตะแบก +ตะแบง +ตะแบงมาน +ตะโบม +ตะไบ +ตะปบ +ตะปลิง +ตะปัดตะป่อง +ตะปิ้ง +ตะปุ่มตะป่ำ +ตะปู +ตะปูเข็ม +ตะปูควง +ตะปูหัวเห็ด +ตะพง +ตะพด +ตะพอง +ตะพัก +ตะพัง +ตะพัด +ตะพั้น +ตะพาก +ตะพาน +ตะพานช้าง +ตะพานหนู +ตะพาบ +ตะพาบน้ำ +ตะพาย +ตะพายแล่ง +ตะพึด +ตะพึดตะพือ +ตะพุ่น +ตะพุ่นหญ้าช้าง +ตะเพรา +ตะเพิง +ตะเพิด +ตะเพิ่น +ตะเพียน +ตะเพียนทอง +ตะเพียนน้ำเค็ม +ตะโพก +ตะโพง +ตะโพน +ตะเภา +ตะเภาเดียวกัน +ตะใภ้ +ตะม่อ +ตะมอย +ตะยองสะลา +ตะรัง +ตะรังกะนู +ตะรังตังกวาง +ตะรังตังช้าง +ตะราง +ตะลอง +ตะลอน +ตะล่อม +ตะล่อมข้าว +ตะล่อมป้อม +ตะละ +ตะลาน +ตะลิงปลิง +ตะลิบ +ตะลีตะลาน +ตะลึง +ตะลึงพรึงเพริด +ตะลุง +ตะลุ่ม +ตะลุ่มนก +ตะลุมบอน +ตะลุ่มโปง +ตะลุมพอ +ตะลุมพุก +ตะลุ่มอิด +ตะลุย +ตะเลง +ตะแลงแกง +ตะไล +ตะวัน +ตะวันขึ้น +ตะวันตก +ตะวันยอแสง +ตะวันออก +ตะวันออกกลาง +ตะวันออกใกล้ +ตะวันออกไกล +ตะวันอ้อมข้าว +ตะวาง +ตะเวน +ตะหนึ่งรัด +ตะหลิว +ตะหลุก +ตะหลุง +ตะเหลนเป๋น +ตะเหลาะเปาะ +ตะแหง่วๆ +ตะแหมะแขะ +ตะแหลนแป๋น +ตะโหงก +ตัก +ตักกะ +ตักตวง +ตักเตือน +ตั๊กแตน +ตักน้ำรดหัวตอ +ตักน้ำรดหัวสาก +ตักน้ำใส่กะโหลก ชะโงกดูเงา +ตักบาตร +ตักบาตรอย่าถามพระ +ตักษณ +ตักษณี +ตักษัย +ตัง +ตั่ง +ตั้ง +ตั้งกรม +ตังเก +ตั้งเข็ม +ตั้งไข่ +ตั้งเค้า +ตั้งแง่ +ตั้งใจ +ตังฉ่าย +ตั้งต้น +ตั้งตัว +ตั้งตาคอย +ตังติด +ตั้งแต่ +ตั้งแต่ง +ตั้งโต๊ะ +ตั้งท่า +ตั้งธาตุ +ตั้งนาฬิกา +ตั้งนาฬิกาปลุก +ตั้งเป้าหมาย +ตังเม +ตังวาย +ตั้งหน้า +ตั้งหน้าตั้งตา +ตั้งหัวเรือ +ตั้งอกตั้งใจ +ตังโอ๋ +ตัจฉก +ตัจฉนี +ตัณฑุล +ตัณหักษัย +ตัณหา +ตัด +ตัดกัน +ตัดขาด +ตัดใจ +ตัดช่องน้อยแต่พอตัว +ตัดช่องย่องเบา +ตัดเชือก +ตัดญาติขาดมิตร +ตัดต้นไฟ +ตัดตอน +ตัดถนน +ตัดทาง +ตัดบท +ตัดประเด็น +ตัดเป็นตัดตาย +ตัดพ้อ +ตัดไพ่ +ตัดไฟต้นลม +ตัดไฟหัวลม +ตัดไม้ข่มนาม +ตัดรอน +ตัดราคา +ตัดสิน +ตัดสินใจ +ตัดเส้น +ตัดหนทาง +ตัดหน้า +ตัดหน้าฉาน +ตัดหนามอย่าไว้หน่อ +ตัดหางปล่อยวัด +ตัตว- +ตัตวศาสตร์ +ตัถย์ +ตัน +ตันคอหอย +ตันตระ +ตันติ +ตันติภาษา +ตันปัญญา +ตันหยง +ตันเหิม +ตันอกตันใจ +ตับ +ตับแข็ง +ตับเต่า +ตับเต่าขาว +ตับปิ้ง +ตับเป็ด +ตับเพลง +ตับเรื่อง +ตับเหล็ก +ตับอ่อน +ตัว +ตั๋ว +ตัวกลั่น +ตัวกลาง +ตัวการ +ตัวเก็ง +ตัวคูณร่วมน้อย +ตัวโค +ตัวใครตัวมัน +ตัวเงิน +ตั๋วเงิน +ตั๋วเงินคลัง +ตั๋วเงินจ่าย +ตั๋วเงินรับ +ตัวจักรใหญ่ +ตัวจำนำ +ตัวจี๊ด +ตัวเชิด +ตัวดี +ตัวต่อตัว +ตัวตั้ง +ตัวตั้งตัวตี +ตัวตายตัวแทน +ตัวตืด +ตัวเต็ง +ตัวแทน +ตัวแทนค้าต่าง +ตัวแทนช่วง +ตัวแทนเชิด +ตัวนาง +ตัวนำ +ตัวประกอบ +ตัวประกัน +ตัวเป็นเกลียว +ตัวเปล่า +ตัวแปร +ตัวผู้ +ตั้วโผ +ตัวพระ +ตัวพิมพ์ +ตัวเมีย +ตัวเมือง +ตัวไม้ +ตัวยืน +ตัวเลข +ตั๋วแลกเงิน +ตัวสะกด +ตั๋วสัญญาใช้เงิน +ตั้วสิว +ตัวหนังสือ +ตัวหารร่วมมาก +ตั้วเหี่ย +ตัวอย่าง +ตัวเอก +ตา +ตาก +ตากตน +ตากบ +ตากบตาเขียด +ตากล้อง +ตากลับ +ตากล้า +ตากวาง +ตากสมอง +ตากหน้า +ตากอากาศ +ตากุ้ง +ตาโก้ง +ตาไก่ +ตาขวาง +ตาขอ +ตาข่าย +ตาขาว +ตาขุ่นตาเขียว +ตาเข +ตาแข็ง +ตาคม +ตาค้าง +ตาง +ต่าง +ต่างๆ +ต่างด้าว +ต่างว่า +ต่างหาก +ตางัว +ตาจระเข้ +ตาชั่ง +ตาช้าง +ตาด +ตาเดียว +ตาแดง +ตาตกกล้า +ตาตั๊กแตน +ตาตั้ง +ตาตาราง +ตาตี่ +ตาตุ่ม +ตาเต็ง +ตาโต +ตาถั่ว +ตาทวด +ตาทัพ +ตาน +ต่าน +ต้าน +ตานกแก้ว +ตานขโมย +ต้านทาน +ตานนกกด +ตานเสี้ยน +ตานหก +ตานหม่อน +ตานเหลือง +ตาน้ำ +ตานี +ตาบ +ตาบทับ +ตาบทิศ +ตาบอด +ตาบอดคลำช้าง +ตาบอดได้แว่น +ตาบอดตาใส +ตาบอดสอดตาเห็น +ตาบอดสี +ตาปลา +ตาปลาดุก +ตาปี +ตาปีตาชาติ +ตาปู +ตาเป็นมัน +ตาเป็นสับปะรด +ตาโป่ง +ตาฝั่ง +ตาฝาด +ตาพร่า +ตาพอง +ตาฟาง +ตาฟางไก่ +ตาเฟื้องตาสลึง +ตาม +ตามกวาง +ตามควาย +ตามใจ +ตามใจปากมากหนี้ +ตามใจปากลำบากท้อง +ตามด +ตามที +ตามเนื้อผ้า +ตามบุญตามกรรม +ตามพ- +ตามพหัตถี +ตามพะ +ตามเพลง +ตามมี +ตามมีตามเกิด +ตามยถากรรม +ตามเรื่องตามราว +ตามลมตามแล้ง +ตามลำพัง +ตามอำเภอใจ +ตามะแน +ตามิน +ตามีตามา +ตาแมว +ตาย +ต้าย +ตายขาน +ตายขุย +ตายคาที่ +ตายโคม +ตายใจ +ตายซาก +ตายด้าน +ตายดาบหน้า +ตายตัว +ตายทั้งกลม +ตายน้อย +ตายนึ่ง +ตายประชดป่าช้า +ตายเป็นเบือ +ตายฝอย +ตายฝังยังเลี้ยง +ตายพราย +ตายราบ +ตายลาภ +ตายห่า +ตายโหง +ตายอดตายอยาก +ตาราง +ตารางสอน +ตารางเหลี่ยม +ตาราไต +ตาร้าย +ตาริ้ว +ตาเรือ +ตาเรือชัย +ตาล +ตาลปัตร +ตาลปัตรบังเพลิง +ตาลปัตรฤๅษี +ตาลม +ตาลยอดด้วน +ตาลอ +ตาลอย +ตาลาน +ตาลาย +ตาลีตาเหลือก +ตาลุ +ตาลุก +ตาลุกตาชัน +ตาลุชะ +ตาเล็กตาน้อย +ตาว +ต๋าว +ตาโศก +ตาส่อน +ตาสำเภา +ตาสีตาสา +ตาเสือ +ตาหนู +ตาหมากรุก +ตาหยี +ตาหลิ่ง +ตาหวาน +ตาเหล่ +ตาเหลว +ตาเหลือก +ตาเหลือกตาพอง +ตาแหวน +ตาฬ +ตาอ้อย +ตาเอก +ตำ +ต่ำ +ตำข้าวสารกรอกหม้อ +ต่ำใจ +ต่ำช้า +ต่ำตน +ต่ำต้อย +ตำตา +ตำนาน +ตำน้ำพริกละลายแม่น้ำ +ตำเนิน +ตำเนียน +ตำบล +ตำแบ +ต้ำปุก +ต้ำผาง +ต้ำพรวด +ตำแย +ตำแยแมว +ตำรวจ +ตำรวจนครบาล +ตำรวจภูธร +ตำรวจวัง +ตำรวจหลวง +ตำรับ +ตำรา +ตำรุ +ตำลึง +ตำส้ม +ตำเสา +ตำหนัก +ตำหนักน้ำ +ตำหนักแพ +ตำหนิ +ตำหระ +ตำแหน่ง +ตำแหน่งที่ตั้ง +ติ +ติก- +ติกะ +ติกาหรัง +ติง +ติ่ง +ติ๋ง +ติ๋งๆ +ติ่งตั่ง +ติงทุเลา +ติงส- +ติงสติ +ติงสติม- +ติ่งหาย +ติณ +ติณ- +ติณชาติ +ติด +ติดๆ +ติดกระดุม +ติดกัณฑ์เทศน์ +ติดเก้ง +ติดขัด +ติดเครื่อง +ติดจะ +ติดจักรยาน +ติดใจ +ติดตลก +ติดตลาด +ติดต่อ +ติดต้อยห้อยตาม +ติดตะกร้อ +ติดตัว +ติดตา +ติดตาม +ติดตื้น +ติดบวก +ติดบ่อน +ติดปาก +ติดพัน +ติดไฟ +ติดมือ +ติดไม้ติดมือ +ติดร่างแห +ติดลบ +ติดลม +ติดศัพท์ +ติดสอยห้อยตาม +ติดสัด +ติดสำนวน +ติดสินบน +ติดหน้าตามหลัง +ติดหมัด +ติดหลังแห +ติดแห้ง +ติดอันดับ +ติดอ่าง +ติตติก +ติตติร +ติตถ +ติเตียน +ติถี +ติปา +ติปาถะ +ติมิ +ติมิงคละ +ติร +ติรัจฉาน +ติเรือทั้งโกลน +ติล +ติลก +ติ้ว +ติ้วใบเลื่อม +ตี +ตี่ +ตีกรรเชียง +ตีกาก +ตีกิน +ตีเกล็ด +ตีเกลียว +ตีไก่ +ตีขนาบ +ตีขลุม +ตีความ +ตีคอ +ตีคู่ +ตีงูให้กากิน +ตีงูให้หลังหัก +ตีจาก +ตีชิง +ตีตนก่อนไข้ +ตีตนตายก่อนไข้ +ตีตรวน +ตีตั๋ว +ตีต่าง +ตีตื้น +ตีแตะ +ตีโต้ +ตีทอง +ตีทะเบียน +ตีท้ายครัว +ตีท้ายน้ำ +ตีน +ตีนกา +ตีนครุ +ตีนคู้ +ตีนจก +ตีนจ้ำ +ตีนตะขาบ +ตีนตุ๊กแก +ตีนเต่า +ตีนถีบปากกัด +ตีนเท่าฝาหอย +ตีนเทียน +ตีนนก +ตีนเป็ด +ตีนผี +ตีนแรด +ตีนโรงตีนศาล +ตีนเหยียด +ตีบ +ตีบรรทัด +ตีบังกั้น +ตี่ใบ้ +ตีปลาหน้าไซ +ตีป่า +ตี่ป้าบ +ตีป่าให้เสือกลัว +ตีปีก +ตีแปลง +ตีผี +ตีผึ้ง +ตีแผ่ +ตีฝีปาก +ตีโพยตีพาย +ตีมอง +ตีรถะ +ตีระ +ตีรั้ง +ตีลังกา +ตีวง +ตีวัวกระทบคราด +ตีสนิท +ตีสองหน้า +ตีสำนวน +ตีเส้น +ตีเสมอ +ตีเสียง +ตีเสียว่า +ตีหน้า +ตีหน้าตาย +ตีหน้ายักษ์ +ตีหลายหน้า +ตีห่าง +ตีอวน +ตีอีตื้อ +ตึ +ตึๆ +ตึก +ตึกๆ +ตึ้กๆ +ตึ้กตั้ก +ตึกแถว +ตึกระฟ้า +ตึง +ตึงๆ +ตึงเครียด +ตึงตัง +ตึงตัว +ตึงเปรี๊ยะ +ตึดตื๋อ +ตึ๊ดตื๋อ +ตึตัง +ตืด +ตื่น +ตื้น +ตื่นข่าว +ตื้นตัน +ตื้นตันใจ +ตื่นตัว +ตื่นตาตื่นใจ +ตื่นตาย +ตื่นตูม +ตื่นเต้น +ตื่นแต่ดึก สึกแต่หนุ่ม +ตื่นฟ้า +ตื้อ +ตื๊อ +ตื๋อ +ตุ +ตุๆ +ตุ๊ +ตุ๊กแก +ตุ๊กแกใบกลม +ตุ๊กตา +ตุ๊กตาล้มลุก +ตุ๊กตาเสียกบาล +ตุ๊กต่ำ +ตุ๊กต่ำน้ำทอง +ตุกติก +ตุ๊กติ๊ก +ตุ๊กตุ่น +ตุ๊กตุ๋ย +ตุง +ตุ้งก่า +ตุ้งติ้ง +ตุ๊ดตู่ +ตุ๊ต๊ะ +ตุตัง +ตุน +ตุ่น +ตุ่นๆ +ตุ๋น +ตุ่นต่าน +ตุนาหงัน +ตุบๆ +ตุ้บ +ตุ้บๆ +ตุ้บตั้บ +ตุ๊บป่อง +ตุปัดตุป่อง +ตุปัดตุเป๋ +ตุ่ม +ตุ้ม +ตุ๋ม +ตุ้มกว้าว +ตุมกา +ตุ้มแซะ +ตุมตัง +ตุ้มเต๋น +ตุ้มปี่ +ตุมพ +ตุมพรวด +ตุ้มมะพร้าว +ตุ้มหู +ตุ่ย +ตุ่ยๆ +ตุ้ย +ตุ้ยๆ +ตุ๊ย +ตุ๋ยตุ่ย +ตุรค +ตุรงค- +ตุรงค์ +ตุรงคราวี +ตุริยางค์ +ตุล +ตุลสิ +ตุลา +ตุลาการ +ตุลาคม +ตุหรัดตุเหร่ +ตู +ตู่ +ตู้ +ตูก +ตูข้า +ตูด +ตูดงอน +ตู่ตัว +ตู้นิรภัย +ตูบ +ตู้พระมาลัย +ตู่พุทธพจน์ +ตูม +ตูมๆ +ตูมตาม +ตูลิ่นฮื้อ +ตูหนา +เต +เตก +เต๊ก +เต็ง +เต่ง +เตช +เตโช +เตโชธาตุ +เต้น +เต้นกินรำกิน +เต้นเขน +เต็นท์ +เต้นรำ +เต้นแร้งเต้นกา +เต้นแร้งเต้นแฉ่ง +เต็ม +เต็มแกน +เต็มคราบ +เต็มใจ +เต็มตัว +เต็มตา +เต็มตื้น +เต็มเต็ง +เต็มที +เต็มที่ +เต็มบาท +เต็มประดา +เต็มประตู +เต็มปาก +เต็มเปา +เต็มมือ +เต็มเม็ดเต็มหน่วย +เต็มไม้เต็มมือ +เต็มยศ +เต็มรัก +เต็มหู +เต็มเหนี่ยว +เต็มเหยียด +เต็มอก +เต็มอกเต็มใจ +เต็มอัตรา +เตย +เตยเลื้อย +เตร่ +เตร็ด +เตร็ดเตร่ +เตร็ดเตรน +เตรน +เตริง +เตรียด +เตรียบ +เตรียม +เตรียมตรม +เตรียมตัว +เตรียมพร้อม +เตละ +เตลิด +เตว็ด +เต่อ +เตอะ +เตะ +เตะจมูก +เตะฉาก +เตะโด่ง +เตะตา +เตะฝุ่น +เตา +เต่า +เต้า +เต๋า +เต่ากระสุน +เต่ากินผักบุ้ง +เต่าเกียด +เตาแก๊ส +เต๋าเขย่า +เต้าแคน +เต้าเจี้ยว +เต่าดำ +เต่าทอง +เต่าทอเสื่อ +เต้าทึง +เตาทุเรียง +เต่านา +เต่าบ้า +เต้าปืน +เตาผิง +เตาฟู่ +เตาไฟ +เต่ารั้ง +เต้ารับ +เต่าร้าง +เตารีด +เต่าเลือน +เต้าส่วน +เตาสูบ +เต้าเสียบ +เต่าหก +เต่าหวาย +เต่าหับ +เต้าหู้ +เต้าหู้ยี้ +เต่าเหลี่ยม +เต่าเหลือง +เต้าฮวย +เต๊าะ +เตาะแตะ +เติ่ง +เตินเต่อ +เติบ +เติบโต +เติม +เตี้ย +เตียง +เตียงลา +เตี้ยตน +เตียน +เตียบ +เตี๋ยม +เตียรถ์ +เตียว +เตี่ยว +เตี้ยอุ้มค่อม +เตื้อ +เตือน +เตือนใจ +เตือนตา +เตือนสติ +แต่ +แต่ๆ +แต้ +แตก +แตกคอ +แตกเงิน +แตกฉาน +แตกฉานซ่านเซ็น +แตกดับ +แตกตื่น +แตกแตน +แตกทัพ +แตกเนื้อสาว +แตกเนื้อหนุ่ม +แตกฝูง +แตกพาน +แตกมัน +แตกแยก +แตกระแหง +แตกร้าว +แตกหัก +แต่ก่อนแต่กี้ +แต่กี้แต่ก่อน +แตง +แต่ง +แต่งกว้าน +แต่งการ +แต่งงาน +แต่งตั้ง +แต่งตัว +แตงเถาตาย +แตงเม +แตงร่มใบ +แต่งหน้า +แต่งหน้าขนม +แต้จิ๋ว +แตด +แต๊ดแต๋ +แต่ทว่า +แตน +แต้ม +แต้มคู +แต้มต่อ +แตร +แตรงอน +แตรเดี่ยว +แตรฝรั่ง +แตรฟันฟาร์ +แตรรถยนต์ +แตรลำโพง +แตรวง +แตรวงโยธวาทิต +แตระ +แต่ละ +แต้ว +แต้วแร้ว +แต้วแล้ว +แต่ว่า +แต้แว้ด +แตะ +แตะต้อง +โต +โต้ +โตก +โต้คารม +โต่ง +โต้ง +โต้งๆ +โตงเตง +โตงๆ เตงๆ +โตฎก +โต๊ด +โต้ตอบ +โต้เถียง +โตน +โตนด +โต้โผ +โตมร +โตมร- +โตมรธร +โตย +โต้แย้ง +โตรก +โตรกไตร +โตรด +โต้รุ่ง +โตเล่นหาง +โต้วาที +โต้หลง +โต๊ะ +โต๊ะกลม +โต๊ะโขก +โต๊ะเท้าช้าง +โต๊ะหมู่ +โต๊ะหมู่บูชา +โต๊ะอิหม่าม +ใต้ +ใต้ดิน +ใต้ถุน +ใต้เท้า +ใต้เท้ากรุณา +ใต้เท้ากรุณาเจ้า +ใต้ฝ่าพระบาท +ใต้ฝ่าละอองธุลีพระบาท +ใต้ฝ่าละอองพระบาท +ไต +ไต่ +ไต้ +ไต๋ +ไต้ก๋ง +ไต่คู้ +ไต่เต้า +ไต่ถาม +ไตปลา +ไต้ฝุ่น +ไต้ไฟ +ไต่ไม้ +ไต่ไม้ลำเดียว +ไตร +ไตรกิศยา +ไตรจักร +ไตรจีวร +ไตรดายุค +ไตร่ตรอง +ไตรตรา +ไตรตรึงษ์ +ไตรทวาร +ไตรทศ +ไตรทิพ +ไตรทิพย์ +ไตรปิฎก +ไตรเพท +ไตรภพ +ไตรภาคี +ไตรภูมิ +ไตรย +ไตรยางศ์ +ไตรรงค์ +ไตรรัตน์ +ไตรลักษณ์ +ไตรโลก +ไตรโลกย์ +ไตรวัฏ +ไตรวิชชา +ไตรสรณคมน์ +ไตรสรณาคมน์ +ไตรสิกขา +ไต่ลวด +ไต่สวน +ไต้หวัน +ถ +ถก +ถกเขมร +ถกเถียง +ถกล +ถงัน +ถงาด +ถด +ถดถอย +ถน +ถนน +ถนนลาดยาง +ถนป +ถนอม +ถนอมอาหาร +ถนัด +ถนัดขวา +ถนัดใจ +ถนัดซ้าย +ถนัดถนี่ +ถนัดปาก +ถนัดมือ +ถนัน +ถนำ +ถนำทึก +ถนิม +ถนิมกาม +ถนิมสร้อย +ถบ +ถบดี +ถม +ถ่ม +ถมเงิน +ถมตะทอง +ถมถืด +ถมเถ +ถมทอง +ถ่มน้ำลายรดฟ้า +ถมปรักมาศ +ถมปัด +ถมไป +ถ่มร้าย +ถมอ +ถมึงทึง +ถล +ถลก +ถลกบาตร +ถลน +ถลม +ถล่ม +ถลอก +ถลัน +ถลา +ถลาก +ถลากถลำ +ถลากไถล +ถลาย +ถลำ +ถลำใจ +ถลำตัว +ถลำถลาก +ถลีถลำ +ถลึงตา +ถลุง +ถลุน +ถ่วง +ถ่วงดุล +ถ่วงล้อ +ถ้วน +ถ้วนถี่ +ถ้วย +ถ้วยตวง +ถ้วยโถง +ถ้วยรางวัล +ถวัด +ถวัดถวัน +ถวัล +ถวัลย์ +ถวาย +ถวายกร +ถวายตัว +ถวายเนตร +ถวายพระพร +ถวายหัว +ถวิน +ถวิล +ถ่อ +ถ้อ +ถอก +ถอง +ถ่อง +ถ้อง +ถ่องแถว +ถ่องแท้ +ถอด +ถอดเขี้ยวถอดเล็บ +ถอดความ +ถอดถอน +ถอดไพ่ +ถอดรหัส +ถอดรูป +ถอดสี +ถอดหัวโขน +ถ้อถอย +ถ้อถ้อย +ถอน +ถอนเงิน +ถอนใจใหญ่ +ถอนต้นก่นราก +ถอนทุน +ถอนพิษ +ถอนยวง +ถอนรากถอนโคน +ถอนสมอ +ถอนสายบัว +ถอนหงอก +ถอบ +ถอบแถบ +ถ่อม +ถ่อมตัว +ถอย +ถ่อย +ถ้อย +ถอยกรูด +ถ้อยความ +ถ้อยคำ +ถอยใจใหญ่ +ถอยฉะ +ถอยฉาก +ถอยถด +ถ้อยแถลง +ถอยทด +ถอยทัพ +ถ้อยทีถ้อยปฏิบัติต่อกัน +ถ้อยทีถ้อยอาศัยกัน +ถอยหลัง +ถอยหลังเข้าคลอง +ถะ +ถะกัด +ถะเกิน +ถะโกน +ถะถั่น +ถะถับ +ถะถุนถะถัน +ถะมัดถะแมง +ถัก +ถัง +ถั่ง +ถั่งถ้อย +ถัณฑิล +ถัณฑิล- +ถัณฑิลสายี +ถัด +ถัทธ +ถัน +ถั่น +ถั่นๆ +ถับ +ถับๆ +ถัมภ์ +ถัว +ถั่ว +ถั่วขาว +ถั่วคร้า +ถั่วค้าง +ถั่วงอก +ถั่วดำ +ถั่วนา +ถั่วแปบ +ถั่วแปบช้าง +ถั่วฝักยาว +ถั่วพร้า +ถั่วพู +ถั่วเพาะ +ถั่วแม่ตาย +ถั่วแระ +ถั่วเหลือง +ถา +ถ้า +ถาก +ถากถาง +ถาง +ถ่าง +ถ่างตา +ถาด +ถาโถม +ถาน +ถ่าน +ถ่านโค้ก +ถ่านไฟเก่า +ถ่านไฟฉาย +ถ่านไฟแช็ก +ถ่านหิน +ถาบ +ถาม +ถามค้าน +ถามติง +ถามไถ่ +ถามนำ +ถามปากคำ +ถามะ +ถ่าย +ถ่ายเดียว +ถ่ายทอด +ถ่ายทุกข์ +ถ่ายเท +ถ่ายแบบ +ถ่ายปัสสาวะ +ถ่ายภาพยนตร์ +ถ่ายยา +ถ่ายรูป +ถ่ายอุจจาระ +ถ่าว +ถาวร +ถาวร- +ถาวรธิรา +ถาวรวัตถุ +ถ้าว่า +ถ้าหากว่า +ถ้ำ +ถ้ำชา +ถ้ำมอง +ถ้ำยาดม +ถิ่น +ถิร- +ถี +ถี่ +ถี่ๆ +ถี่ถ้วน +ถี่เท้า +ถีน- +ถีบ +ถีบกระดาน +ถีบจักร +ถีบจักรยาน +ถีบฉัด +ถีบตัว +ถีบทาง +ถีบรถ +ถีบหัวส่ง +ถี่ยิบ +ถี่ลอดตาช้าง ห่างลอดตาเล็น +ถึก +ถึง +ถึงกัน +ถึงแก่กรรม +ถึงแก่น +ถึงแก่พิราลัย +ถึงแก่มรณภาพ +ถึงแก่อนิจกรรม +ถึงแก่อสัญกรรม +ถึงขนาด +ถึงคราว +ถึงฆาต +ถึงเงิน +ถึงใจ +ถึงชีพิตักษัย +ถึงชีวิตันตราย +ถึงที่ +ถึงเป็นถึงตาย +ถึงผ้า +ถึงพริกถึงขิง +ถึงลูกถึงคน +ถึงว่า +ถึงไหนถึงกัน +ถือ +ถือกำเนิด +ถือโกรธ +ถือเขาถือเรา +ถือใจ +ถือดี +ถือตัว +ถือท้าย +ถือน้ำพระพิพัฒน์สัตยา +ถือบวช +ถือบังเหียน +ถือปูน +ถือผิว +ถือพล +ถือยศ +ถือยศถือศักดิ์ +ถือเราถือเขา +ถือว่า +ถือศักดินา +ถือศีล +ถือสา +ถือสิทธิ์ +ถือหาง +ถือโอกาส +ถุง +ถุงเค้า +ถุงตะเครียว +ถุงตะเคียว +ถุงย่าม +ถุงสำเร็จ +ถุน +ถุย +ถุล- +ถุลละ +ถู +ถูก +ถูกกระทำ +ถูกกัน +ถูกขา +ถูกคอ +ถูกคู่ +ถูกใจ +ถูกโฉลก +ถูกชะตา +ถูกตา +ถูกน้อย +ถูกปาก +ถูกส่วน +ถูกเส้น +ถูกใหญ่ +ถูกอกถูกใจ +ถูไถ +ถูป- +ถูปารหบุคคล +ถูล- +ถูลู่ถูกัง +เถกิง +เถน +เถมิน +เถมินเชิง +เถมินไพร +เถย- +เถยจิต +เถยเจตนา +เถยสังวาส +เถร +เถร- +เถรตรง +เถรภูมิ +เถรวาท +เถรส่องบาตร +เถระ +เถรานุเถระ +เถรี +เถลไถล +เถลิก +เถลิง +เถลิงศก +เถลือกถลน +เถ่อ +เถอะ +เถอะน่า +เถะๆ +เถา +เถ้า +เถ้าแก่ +เถาคัน +เถาคันเหล็ก +เถาเงาะ +เถาดาน +เถามวก +เถ้ารึง +เถาวัลย์ +เถาวัลย์กรด +เถาวัลย์เขียว +เถาวัลย์ปูน +เถาวัลย์เปรียง +เถาวัลย์ยอดด้วน +เถาวัลย์เหล็ก +เถาสิงโต +เถาหัวด้วน +เถาะ +เถิก +เถิง +เถิด +เถิดเทิง +เถิดน่า +เถิน +เถียง +เถียร +เถือ +เถือก +เถื่อน +แถ +แถก +แถง +แถน +แถบ +แถบบันทึกภาพ +แถบบันทึกเสียง +แถบเหล็กพืด +แถม +แถมพก +แถลง +แถลงการณ์ +แถลงการณ์ร่วม +แถลงข่าว +แถลบ +แถว +โถ +โถเครื่องแป้ง +โถง +โถงเถง +โถบ +โถปริก +โถม +โถมนาการ +โถส้วม +ไถ +ไถ่ +ไถ้ +ไถกลบ +ไถง +ไถดะ +ไถ่ถอน +ไถ่ถาม +ไถนา +ไถ่บาป +ไถแปร +ไถย- +ไถล +ท +ทก +ทกล้า +ทแกล้ว +ท่ง +ทงัน +ทชี +ทด +ทดถอย +ทดแทน +ทดโทร่ห +ทดรอง +ทดลอง +ทดเลข +ทดสอบ +ทท +ทธิ +ทน +ท้น +ทนดี +ทนต- +ทนต์ +ทนตกาษฐ์ +ทนทาน +ทนโท่ +ทนม +ทนาย +ทนายความ +ทนายเรือน +ทนายเลือก +ทนายหน้าหอ +ทบ +ทบทวน +ทบวง +ทบวงการ +ทบวงการเมือง +ทม +ทมก +ทมน +ทมบ +ทมอ +ทมิฬ +ทเมิน +ทโมน +ทยอย +ทยา +ทยาลุ +ทยาลุก +ทแยง +ทแยงมุม +ทร- +ทรกรรม +ทรง +ทรงกระเทียม +ทรงกลด +ทรงข้าวบิณฑ์ +ทรงเครื่อง +ทรงเครื่องใหญ่ +ทรงเจ้า +ทรงเจ้าเข้าผี +ทรงตัก +ทรงบาดาล +ทรงประพาส +ทรงพระเครื่องใหญ่ +ทรงมัณฑ์ +ทรงลังกา +ทรงหม้อตาล +ทรชน +ทรชาติ +ทรทึง +ทรธึก +ทรพล +ทรพิษ +ทรพี +ทรภิกษ์ +ทรมาทรกรรม +ทรมาน +ทรมุก +ทรยศ +ทรยุค +ทรรทึง +ทรรป +ทรรปณ์ +ทรรปณะ +ทรรศนะ +ทรรศนาการ +ทรรศนีย์ +ทรราช +ทรลักษณ์ +ทรเล่ห์ +ทรวง +ทรวด +ทรวดทรง +ทรวาร +ทรสองทรสุม +ทรสาย +ทรสุม +ทรหด +ทรหน +ทรหวล +ทรหึง +ทรหึงทรหวล +ทรหู +ทรเหล +ทรอ +ทรอมโบน +ทรอึง +ทรอุ้ม +ทระนง +ทระนาว +ทรัพย- +ทรัพย์ +ทรัพย์นอกพาณิชย์ +ทรัพย์ในดิน สินในน้ำ +ทรัพย์สมบัติ +ทรัพยสิทธิ +ทรัพย์สิน +ทรัพย์สินส่วนพระมหากษัตริย์ +ทรัพย์สินส่วนพระองค์ +ทรัพย์สินส่วนสาธารณสมบัติของแผ่นดิน +ทรัพยากร +ทรัพยากรธรณี +ทรัพยากรธรรมชาติ +ทรัมเป็ต +ทรานซิสเตอร์ +ทราบ +ทราบเกล้าทราบกระหม่อม +ทราบฝ่าพระบาท +ทราบฝ่าละอองธุลีพระบาท +ทราบฝ่าละอองพระบาท +ทราม +ทรามชม +ทรามเชย +ทรามวัย +ทรามสงวน +ทรามสวาท +ทราย +ทรายแก้ว +ทรายขาว +ทรายแป้ง +ทริทร +ทรุด +ทรุดโทรม +ทรุดนั่ง +ทรุม +ทรู่ +ทฤฆ- +ทฤษฎี +ทฤษฎีบท +ทล +ทลบม +ทลอึง +ทลาย +ทลิท +ทลิททก +ทวง +ท้วง +ท้วงติง +ทวงถาม +ท่วงท่า +ท่วงทำนอง +ท่วงที +ทวด +ทวดน้อย +ทวดึงส์ +ทวน +ท้วน +ทวนทบ +ทวนสบถ +ทวนสาบาน +ท่วม +ท้วม +ท้วมๆ +ท่วมท้น +ทวย +ท่วย +ท้วย +ทวยโถง +ท่วยโถง +ทวยะ +ทวอย +ทวัตดึงส์ +ทวัตดึงสาการ +ทวัย +ทวา +ทว่า +ทวาตรึงประดับ +ทวาทศ +ทวาทศม- +ทวาทศมณฑล +ทวาทศี +ทวาบร +ทวาบรยุค +ทวาย +ทวาร +ทวารทั้งเก้า +ทวารบถ +ทวารบาล +ทวารประดับ +ทวิ +ทวิช +ทวิช- +ทวิชงค์ +ทวิชากร +ทวิชาติ +ทวิตีย +ทวิตียา +ทวิบถ +ทวิบท +ทวิบาท +ทวิป +ทวิภาค +ทวิภาคี +ทวิร +ทวี +ทวีคูณ +ทวีธาภิเษก +ทวีป +ทวีปี +ทศ +ทศ- +ทศชาติ +ทศทิศ +ทศนิยม +ทศเบญจกูล +ทศพร +ทศพล +ทศพิธราชธรรม +ทศม- +ทศมาส +ทศมี +ทศวรรษ +ทศา +ทศางค์ +ทสา +ทหระ +ทหาร +ทหารกองประจำการ +ทหารผ่านศึก +ทหารเลว +ทอ +ท่อ +ท้อ +ทอก +ทอง +ท่อง +ท้อง +ทองกร +ทองกวาว +ท้องกาง +ท้องแก่ +ทองขาว +ท้องขาว +ท้องขึ้น +ท้องขึ้นท้องพอง +ท้องแขน +ท้องแขวน +ท้องคัดท้องแข็ง +ทองคำ +ทองคำขาว +ทองคำเปลว +ท้องคุ้ง +ทองเค +ทองเครือ +ท่องจำ +ท้องฉนวน +ทองชมพูนุท +ทองชุบ +ทองดอกบวบ +ทองดำ +ท้องเดิน +ทองแดง +ทองต้นแขน +ท้องตรา +ท้องตลาด +ทองตากู +ท้องถิ่น +ทองทราย +ทองทศ +ท้องที่ +ทองทึบ +ท่องเที่ยว +ทองธรรมชาติ +ทองนพคุณ +ท้องน่อง +ท้องน้อย +ทองบรอนซ์ +ท้องแบน +ทองใบ +ทองปราย +ทองปลายแขน +ท้องปลิง +ทองแป +ท้องผุท้องพัง +ท้องผูก +ทองเผือก +ทองแผ่นเดียวกัน +ทองพระกร +ทองพระขุน +ท้องพระคลัง +ท้องพระโรง +ทองพลุ +ท้องพลุ +ท้องพอง +ทองพัดดึงส์ +ทองพันชั่ง +ทองพันดุล +ทองพิศ +ท้องเฟ้อ +ทองภู +ทองม้วน +ท้องมาน +ท้องไม้ +ทองไม่รู้ร้อน +ทองย้อย +ท้องยุ้งพุงกระสอบ +ท้องร่วง +ท้องร่อง +ทองรูปพรรณ +ท้องเรื่อง +ท้องลาน +ทองลิน +ท้องเลว +ทองแล่ง +ทองวิทยาศาสตร์ +ทองสักโก +ทองสัมฤทธิ์ +ท้องสาว +ท้องสำนวน +ท่องสื่อ +ท้องเสีย +ทองหมั้น +ท้องหมา +ท้องหมู +ทองหยอง +ทองหยอด +ทองหยิบ +ทองหลาง +ทองเหลือง +ท้องแห้ง +ทองโหลง +ทองอังกฤษ +ท้องอัสดงคต +ท้องอืด +ทองอุไร +ทองเอก +ทอด +ทอดกฐิน +ทอดโกลน +ทอดตัว +ทอดตา +ทอดทฤษฎี +ทอดทิ้ง +ทอดที่ +ทอดน่อง +ทอดน้ำ +ทอดผ้าป่า +ทอดพระที่ +ทอดพระเนตร +ทอดมัน +ทอดยอด +ทอดรวง +ทอดสกา +ทอดสมอ +ทอดสะพาน +ทอดสายตา +ทอดเสียง +ทอดหญ้า +ทอดหุ่ย +ทอดแห +ทอดอาลัย +ท่อถ้อย +ท้อถอย +ท้อถ้อย +ท้อแท้ +ทอน +ท่อน +ทอนซิล +ทอฟฟี่ +ท่อมๆ +ทอย +ทอยกอง +ทอเรียม +ทอแสง +ทอหูก +ท่อไอเสีย +ทะ +ทะงัน +ทะทัด +ทะทา +ทะทาย +ทะท่าว +ทะท้าว +ทะทึก +ทะเทียด +ทะนง +ทะนงตัว +ทะนงศักดิ์ +ทะนน +ทะนะ +ทะนา +ทะนาน +ทะนานหลวง +ทะนุ +ทะนุก +ทะนุกถนอม +ทะนุถนอม +ทะนุบำรุง +ทะบู +ทะเบียน +ทะเบียนบ้าน +ทะเบียนราษฎร +ทะเบียนสำมะโนครัว +ทะมัดทะแมง +ทะมึน +ทะมื่น +ทะแม่ง +ทะแม่งๆ +ทะยาทะแยแส +ทะยาน +ทะยานใจ +ทะยานอยาก +ทะเยอทะยาน +ทะแย +ทะแยสามชั้น +ทะร่อทะแร่ +ทะลวง +ทะลอก +ทะลัก +ทะลักทะแลง +ทะลาย +ทะลิ่น +ทะลิ่นชระลั่ง +ทะลึ่ง +ทะลึ่งทะลั่ง +ทะลุ +ทะลุกลางปล้อง +ทะลุดทะลาด +ทะลุปรุโปร่ง +ทะเล +ทะเลทราย +ทะเล้น +ทะเลใน +ทะเลบ้า +ทะเลภายใน +ทะเลสาบ +ทะเลหน้าใน +ทะเลหลวง +ทะเลไหล่ทวีป +ทะเล่อทะล่า +ทะเลอาณาเขต +ทะเลาะ +ทะเลาะเบาะแว้ง +ทะวาย +ทะเวน +ทัก +ทักข์ +ทักขิญ +ทักขิณ +ทักขิณา +ทักขิณาบถ +ทักขิณาวัฏ +ทักขิโณทก +ทักขิไณยบุคคล +ทักท้วง +ทักทาย +ทักทิน +ทักนิมิต +ทักษ- +ทักษะ +ทักษา +ทักษิณ +ทักษิณนิกาย +ทักษิณา +ทักษิณาจาร +ทักษิณาทาน +ทักษิณานุประทาน +ทักษิณายัน +ทักษิณาวรรต +ทักษิโณทก +ทัคธ์ +ทัง +ทั่ง +ทั้ง +ทั้ง...กับ +ทั้งขึ้นทั้งล่อง +ทั้งคน +ทั้งดุ้น +ทั้ง...ทั้ง +ทั้งที +ทั้งที่ +ทั้งๆ ที่ +ทั้งนั้น +ทั้งนี้ +ทั้งนี้ทั้งนั้น +ทั้งเนื้อทั้งตัว +ทั้งปวง +ทั้งผอง +ทั้งเพ +ทั้งมวล +ทั้ง...และ +ทังวล +ทังวี้ทังวล +ทังสเตน +ทั้งสิ้น +ทั้งหมด +ทั้งหลาย +ทั้งอย่างนั้น +ทัณฑ- +ทัณฑ์ +ทัณฑกรรม +ทัณฑฆาต +ทัณฑนิคม +ทัณฑ์บน +ทัณฑวิทยา +ทัณฑสถาน +ทัณฑะ +ทัณฑิกา +ทัณฑิมา +ทัณฑีบท +ทัด +ทัดดอกไม้ +ทัดทา +ทัดทาน +ทัดเทียม +-ทัต +ทัน +ทันกิน +ทันควัน +ทันใจ +ทันใด +ทันต- +ทันต์ +ทันตชะ +ทันตแพทย์ +ทันตา +ทันติน +ทันตี +ทันท่วงที +ทันที +ทันธ์ +ทันน้ำ +ทันน้ำทันฝน +ทันสมัย +ทับ +ทับเกษตร +ทับถม +ทับทรวง +ทับทาง +ทับทางขาว +ทับทิม +ทับที่ +ทับแพ +ทับลัคน์ +ทับเล็ก +ทับศัพท์ +ทับสมิงคลา +ทับสิทธิ์ +ทับหลัง +ทับหลังลัคน์ +ทัป +ทัปน +ทัพ +ทัพพะ +ทัพพี +ทัพสัมภาระ +ทั่ว +ทั่วถึง +ทั่วทุกสารทิศ +ทั่วทุกหัวระแหง +ทั่วไป +ทั่วๆ ไป +ทัศ +ทัศน- +ทัศน์ +ทัศนคติ +ทัศนวิสัย +ทัศนศาสตร์ +ทัศนศึกษา +ทัศนะ +ทัศนา +ทัศนาการ +ทัศนาจร +ทัศนีย- +ทัศนีย์ +ทัศนียภาพ +ทัศนูปกรณ์ +ทัศไนย +ทัสนานุตริยะ +ทัฬห +ทัฬหิ +ทัฬหิกรณ์ +ทัฬหี +ทัฬหีกรรม +ทา +ท่า +ท้า +ทาก +ทาง +ท้าง +ทางการ +ทางเก็บ +ทางข้าม +ทางช้างเผือก +ทางด่วน +ทางเท้า +ทางโท +ทางใน +ทางผ่าน +ทางพิเศษ +ทางมะพร้าว +ทางม้าลาย +ทางสาธารณะ +ทางหลวง +ทางออก +ทางเอก +ทาฐะ +ทาฐิกะ +ทาฒะ +ทาฒิกะ +ท่าดีทีเหลว +ท่าเดียว +ท่าทาง +ท้าทาย +ท่าที +ทาน +ทาน- +ท่าน +ทานกัณฑ์ +ท่านชาย +ทานต์ +ทานตะวัน +ทานบดี +ทานบารมี +ท่านผู้หญิง +ทานพ +ทานมัย +ทานศีล +ท่านหญิง +ท่านั้นท่านี้ +ทานาธิบดี +ทาบ +ทาบทาม +ทาม +ท่ามกลาง +ทาย +ท้าย +ทายก +ท้ายเขื่อน +ท้ายครัว +ท้ายโต่ง +ท้ายทอย +ท้ายน้ำ +ท้ายฝน +ทายัช +ทายา +ทายาด +ทายาท +ทายาทโดยธรรม +ทาร- +ทารก +ทารพี +ทาริกา +ทารุ +ทารุณ +ทารุณ- +ทารุณกรรม +ท่าเรือ +ทาว +ท่าว +ท้าว +ท่าวกำลัง +ท่าวทบระนับ +ท้าวนาง +ท้าวพญา +ท้าวพระยา +ทาษ +ทาส +ทาส- +ทาสทาน +ทาสปัญญา +ทาสี +ท่าอากาศยาน +ทำ +ทำกรรม +ทำการบ้าน +ทำขวัญ +ทำครัว +ทำคลอด +ทำความ +ทำคุณ +ทำคุณบูชาโทษ +ทำงน +ทำเจ็บ +ทำใจ +ทำได้ +ทำได้ลงคอ +ทำตัว +ทำตา +ทำท่า +ทำที +ทำแท้ง +ทำโทษ +ทำนบ +ทำนวย +ทำนอง +ทำนองเสนาะ +ทำนาบนหลังคน +ทำนาย +ทำนาออมกล้า ทำปลาออมเกลือ +ทำนุ +ทำนุบำรุง +ทำนูล +ทำเนา +ทำเนียบ +ทำเนียบท่าเรือ +ทำเนียบนาม +ทำเนียม +ทำบาป +ทำบุญ +ทำบุญเอาหน้า +ทำปลา +ทำปากทำคอ +ทำเป็น +ทำไปทำมา +ทำพิษ +ทำไพ่ +ทำฟัน +ทำไฟ +ทำมัง +ทำไม +ทำร้าย +ทำฤทธิ์ +ทำลาย +ทำลายขวัญ +ทำลายสถิติ +ทำลิง +ทำเล +ทำวน +ทำวัตร +ทำวัตรค่ำ +ทำวัตรเช้า +ทำเวร +ทำเวลา +ทำสาว +ทำเสน่ห์ +ทำเสียเจ็บ +ทำหน้าทำตา +ทำหมัน +ทำหูทวนลม +ทำเหตุ +ทำให้ +ทำเอา +ทำเอาเจ็บ +ทิคัมพร +ทิฆัมพร +ทิ้ง +ทิ้งกระจาด +ทิ้งขว้าง +ทิ้งๆ ขว้างๆ +ทิ้งจดหมาย +ทิงเจอร์ +ทิ้งถ่อน +ทิ้งทวน +ทิ้งทาน +ทิ้งท้าย +ทิ้งทูด +ทิ้งไพ่ +ทิ้งฟ้อง +ทิ้งมะพร้าวห้าว +ทิ้งย่อ +ทิช +ทิช- +ทิชากร +ทิฏฐะ +ทิฏฐานุคติ +ทิฏฐุชุกรรม +ทิฐ- +ทิฐธรรม +ทิฐิ +ทิด +ทิต +ทิน +ทิน- +ทินกร +ทินศูนย์ +ทินาท +ทิพ +ทิพ- +ทิพย- +ทิพย์ +ทิพยจักษุ +ทิพยจักษุญาณ +ทิพยญาณ +ทิพยเนตร +ทิพยพยาน +ทิพยมานุษ +ทิพยรส +ทิพยโศรตร +ทิพโสต +ทิพา +ทิพากร +ทิม +ทิ่ม +ทิมดาบ +ทิ่มตำ +ทิมทอง +ทิ่มแทง +ทิว +ทิว- +ทิวกาล +ทิวงคต +ทิวทัศน์ +ทิวส- +ทิวสภาค +ทิวสะ +ทิวา +ทิวากร +ทิวากาล +ทิศ +ทิศทาง +ทิศา +ทิศาดร +ทิศานุทิศ +ทิศาปาโมกข์ +ที +ที่ +ที่กัลปนา +ทีใครทีมัน +ทีฆ- +ทีฆชาติ +ทีฆนิกาย +ทีฆสระ +ทีฆายุ +ที่จริง +ที่ดิน +ที่ดินมือเปล่า +ทีเด็ด +ทีเดียว +ทีท่า +ที่ทาง +ที่ทำการ +ที่เท่าแมวดิ้นตาย +ที่แท้ +ที่ธรณีสงฆ์ +ที่นอน +ที่นั่ง +ทีนี้ +ทีป +ที่พึ่ง +ทีม +ที่มั่น +ที่มา +ทีรฆ- +ที่รัก +ที่ราบ +ที่ราบสูง +ทีเล่นทีจริง +ที่วัด +ที่ว่าการ +ที่สุด +ที่หมาย +ทีหลัง +ที่ไหน +ที่ไหนได้ +ทีเอ็นที +ทึก +ทึกทัก +ทึ่ง +ทึ้ง +ทึดทือ +ทึนทึก +ทึบ +ทึม +ทึมๆ +ทึ่ม +ทื่อ +ทุ +ทุก +ทุกๆ +ทุกข- +ทุกข์ +ทุกขนิโรธ +ทุกขลาภ +ทุกขเวทนา +ทุกขสมุทัย +ทุกข์สุข +ทุกขักษัย +ทุกขารมณ์ +ทุกฏ +ทุกที +ทุกนิบาต +ทุกพาย +ทุกเมื่อ +ทุกเมื่อเชื่อวัน +ทุกร- +ทุกรกิริยา +ทุกวันนี้ +ทุกษดร +ทุกสิ่งทุกอย่าง +ทุกหน +ทุกหนทุกแห่ง +ทุกหย่อมหญ้า +ทุกหัวระแหง +ทุกแห่ง +ทุกะ +ทุกัง +ทุกูล +ทุคตะ +ทุคติ +ทุ่ง +ทุ้ง +ทุงงะ +ทุงเทง +ทุจจิณณะ +ทุจริต +ทุด +ทุตวิลัมพิตมาลา +ทุติย- +ทุติยาสาฬห +ทุทรรศนนิยม +ทุน +ทุ่น +ทุนจดทะเบียน +ทุนทรัพย์ +ทุนนอน +ทุนนิมิต +ทุนนิยม +ทุ่นเบ็ด +ทุนรอน +ทุ่นระเบิด +ทุนเรือนหุ้น +ทุนสำรอง +ทุนสำรองเงินตรา +ทุนหมุนเวียน +ทุ่นอวน +ทุนิยม +ทุบ +ทุบตี +ทุบทู +ทุบหม้อข้าว +ทุปปัญญา +ทุพพรรณ +ทุพพล +ทุพพลภาพ +ทุพภิกขภัย +ทุพภิกขันดรกัป +ทุม +ทุม- +ทุ่ม +ทุ้ม +ทุ่มตลาด +ทุ่มเถียง +ทุ่มเท +ทุมโน +ทุมราชา +ทุย +ทุ้ย +ทุร- +ทุรกันดาร +ทุรคม +ทุรชน +ทุรชาติ +ทุรน +ทุรนทุราย +ทุรพล +ทุรภิกษ์ +ทุรลักษณ์ +ทุรัถยา +ทุรัศ +ทุราคม +ทุราจาร +ทุราธวา +ทุเรศ +ทุเรียน +ทุเรียนแขก +ทุเรียนเทศ +ทุลักทุเล +ทุเลา +ทุวิธ +ทุศีล +ทุษฐ- +ทุส- +ทุสสะ +ทุสสีล +ทู +ทู่ +ทู้ +ทูกัง +ทู่ซี้ +ทูต +ทูตานุทูต +ทูน +ทูน้ำจืด +ทูบ +ทูม +ทูมทาม +ทูโม่ง +ทูร- +ทูล +ทูลกระหม่อม +ทูลเกล้าทูลกระหม่อมถวาย +ทูเลียม +ทูษก +เท +เท่ +เทกระจาด +เทกระเป๋า +เทคนิค +เทคนีเชียม +เทคโนโลยี +เทครัว +เทคอนกรีต +เทง +เท้ง +เท้งเต้ง +เท้งทูด +เท็จ +เท็จจริง +เท็จเทียม +เทนนิส +เทน้ำเทท่า +เทปูน +เทพ +เทพ- +เทพกุสุม +เทพเจ้า +เทพชุมนุม +เทพดา +เทพดำรู +เทพทัณฑ์ +เทพทารู +เทพทาโร +เทพธิดา +เทพนม +เทพนารี +เทพนิยม +เทพนิยาย +เทพนิยายวิทยา +เทพนิรมิต +เทพบดี +เทพบริษัท +เทพบุตร +เทพประติมา +เทพพยากรณ์ +เทพย- +เทพยเจ้า +เทพยดา +เทพยุดา +เทพสังหรณ์ +เทพา +เทพาดิเทพ +เทพาธิบดี +เทพารักษ์ +เทพิน +เทพินทร์ +เทพี +เทพีปักษี +เทเพนทร์ +เทโพ +เทริด +เทลลูเรียม +เทว- +เทวดา +เทวทัณฑ์ +เทวทูต +เทวธรรม +เทวธิดา +เทวนะ +เทวนาครี +เทวนิยม +เทวภาวะ +เทวระ +เทวรูป +เทวโลก +เทววาจิกะ +เทววิทยา +เทวศ +เทวษ +เทวสถาน +เทวสุคนธ์ +เทวอ +เทวัญ +เทวัน +เทวาคาร +เทวารัณย์ +เทวาลัย +เทวาวาส +เทวินทร์ +เทวี +เทเวนทร์ +เทเวศ +เทเวศร์ +เทเวศวร์ +เทศ +เทศ- +เทศก +เทศกาล +เทศน์ +เทศน์แจง +เทศนา +เทศบัญญัติ +เทศบาล +เทศมนตรี +เทศะ +เทศาจาร +เทศาภิบาล +เทห- +เทห์ +เท่ห์ +เทห์ฟากฟ้า +เทหวัตถุ +เท่อ +เท้อ +เทอญ +เทอม +เทอร์เบียม +เทอร์โมมิเตอร์ +เทอะทะ +เทา +เท่า +เท้า +เท่ากับ +เท้าแขน +เท้าคู้ +เท้าช้าง +เท่าใด +เท่าตัว +เท่าทัน +เท่าทุน +เท่าเทียม +เท่านั้น +เท่าเผ้า +เท้ายายม่อม +เท่ารึง +เท่าไร +เท้าสาน +เท้าสิงห์ +เทาะห์ +เทิก +เทิ่ง +เทิงบอง +เทิด +เทิดทูน +เทิน +เทิบ +เทิบๆ +เทิบทาบ +เทิ้ม +เทียง +เที่ยง +เที่ยงๆ +เที่ยงตรง +เที่ยงแท้ +เที่ยงธรรม +เทียน +เที้ยน +เทียนกิ่ง +เทียนเกล็ดหอย +เทียนแกลบ +เทียนขม +เทียนขาว +เทียนข้าวเปลือก +เทียนดำ +เทียนแดง +เทียนตากบ +เทียนตาตั๊กแตน +เทียนบ้าน +เทียนพรรษา +เทียนเยาวพาณี +เทียนรุ่ง +เทียนลวด +เทียนสัตตบุษย์ +เทียนอบ +เทียบ +เทียบเคียง +เทียบเท่า +เทียม +เทียร +เที้ยร +เทียรฆ- +เทียรฆชาติ +เทียรฆราตร +เทียว +เที่ยว +เทือ +เทื่อ +เทื้อ +เทือก +เทือกเขา +เทือกเถาเหล่ากอ +เทือน +แท่ +แท้ +แท้ๆ +แท็กซี่ +แท็กซี่มิเตอร์ +แทง +แท่ง +แท้ง +แท็งก์น้ำ +แทงใจ +แทงใจดำ +แทงตะไบ +แทงทวย +แทงวิสัย +แทงหยวก +แท้จริง +แทตย์ +แท้ที่จริง +แทน +แท่น +แทนเจนต์ +แทนทาลัม +แทนที่จะ +แท่นพิมพ์ +แท่นมณฑล +แท่นลา +แท่นหมึก +แทบ +แทรก +แทรกซอน +แทรกซ้อน +แทรกซึม +แทรกแซง +แทรกเตอร์ +แทรกแผ่นดิน +แทรกโพน +แทลเลียม +แทะ +แทะโลม +โท +โท่ +โทกเทก +โทงๆ +โทงเทง +โทณะ +โทโทษ +โทธก +โทน +โทนโท่ +โทมนัส +โทร- +โทรคมนาคม +โทรทรรศน์ +โทรทัศน์ +โทรพิมพ์ +โทรภาพ +โทรม +โทรมศัสตราวุธ +โทรมหญิง +โทรเลข +โทรศัพท์ +โทรสาร +โทลา +โทศก +โทษ +โทษ- +โทษกรณ์ +โทษตรัย +โทษทางวินัย +โทษโพย +โทษา +โทษากร +โทษาดิลก +โทษานุโทษ +โทษารมณ์ +โทส- +โทสะ +โทสาคติ +โทโส +โทหฬะ +โทหฬินี +ไท +ไท้ +ไทเทเนียม +ไทเทรต +ไทย +ไทยดำ +ไทยทาน +ไทยธรรม +ไทยน้อย +ไทยนับสาม +ไทยนับห้า +ไทยหลง +ไทยหลวง +ไทยใหญ่ +ไทร +ไทรทอง +ไทรเลียบ +ไทวะ +ธ +ธง +ธงก์ +ธงกระบี่ธุช +ธงจระเข้ +ธงฉาน +ธงชัย +ธงชัยเฉลิมพลของทหารบก +ธงชัยเฉลิมพลของทหารเรือ +ธงชัยเฉลิมพลของทหารอากาศ +ธงชาติ +ธงชาย +ธงตะขาบ +ธงนำริ้ว +ธงบรมราชวงศ์น้อย +ธงบรมราชวงศ์ใหญ่ +ธงประจำกองทัพบก +ธงประจำกองทัพเรือ +ธงประจำกองทัพอากาศ +ธงพระครุฑพ่าห์ +ธงพิทักษ์สันติราษฎร์ +ธงมหาราชน้อย +ธงมหาราชใหญ่ +ธงเยาวราชน้อย +ธงเยาวราชใหญ่ +ธงราชนาวี +ธงราชินีน้อย +ธงราชินีใหญ่ +ธงสามเหลี่ยม +ธช +ธชี +ธตรฐ +ธน +ธน- +ธนธานี +ธนบดี +ธนบัตร +ธนสมบัติ +ธนสาร +ธนัง +ธนาคม +ธนาคาร +ธนาคารพาณิชย์ +ธนาคารโลก +ธนาคารออมสิน +ธนาณัติ +ธนิต +ธนิษฐะ +ธนิษฐา +ธนุ +ธนุร- +ธนุรมารค +ธนุรวิทยา +ธนุรเวท +ธนู +ธนูศิลป์ +ธเนศ +ธเนศวร +ธโนปจัย +ธไนศวรรย์ +ธม +ธมกรก +ธร +ธรง +ธรณ +ธรณิน +ธรณินทร์ +ธรณิศ +ธรณิศร +ธรณิศวร์ +ธรณี +ธรณีกันแสง +ธรณีประตู +ธรณีมณฑล +ธรณีร้องไห้ +ธรณีวิทยา +ธรณีศวร +ธรณีสงฆ์ +ธรณีสาร +ธรณีสูบ +ธรมาน +ธรรม +ธรรม- +ธรรมกถา +ธรรมกถึก +ธรรมกาม +ธรรมกาย +ธรรมการ +ธรรมการย์ +ธรรมเกษตร +ธรรมขันธ์ +ธรรมคุณ +ธรรมจรณะ +ธรรมจรรยา +ธรรมจริยา +ธรรมจักร +ธรรมจักษุ +ธรรมจาคะ +ธรรมจารี +ธรรมจินดา +ธรรมเจดีย์ +ธรรมชาติ +ธรรมฐิติ +ธรรมดา +ธรรมทรรศนะ +ธรรมธาดา +ธรรมธาตุ +ธรรมนาถ +ธรรมนิตย์ +ธรรมนิยม +ธรรมนิยาม +ธรรมนิเวศ +ธรรมนูญ +ธรรมนูญการปกครองราชอาณาจักร +ธรรมเนียม +ธรรมเนียมประเพณี +ธรรมบท +ธรรมบาล +ธรรมบิฐ +ธรรมปฏิรูป +ธรรมปฏิสัมภิทา +ธรรมประติรูป +ธรรมยุต +ธรรมยุทธ์ +ธรรมรัตน์ +ธรรมราชา +ธรรมวัตร +ธรรมศาสตร์ +ธรรมสถิติ +ธรรมสภา +ธรรมสรีระ +ธรรมสังคีติ +ธรรมสังเวช +ธรรมสากัจฉา +ธรรมสามิสร +ธรรมสามี +ธรรมสาร +ธรรมะ +ธรรมะธัมโม +ธรรมันเตวาสิก +ธรรมาทิตย์ +ธรรมาธรรม +ธรรมาธิปไตย +ธรรมาธิษฐาน +ธรรมานุธรรมปฏิบัติ +ธรรมานุสาร +ธรรมาภิมุข +ธรรมาภิสมัย +ธรรมายตนะ +ธรรมารมณ์ +ธรรมาสน์ +ธรรมิก +ธรรมิก- +ธรา +ธราดล +ธราธร +ธราธาร +ธราธิบดี +ธราธิป +ธริษตรี +ธเรศ +ธเรษตรี +ธเรษตรีศวร +ธวัช +ธังก +ธัช +ธัญ +ธัญ- +ธัญโกศ +ธัญเขต +ธัญชาติ +ธัญญาหาร +ธัญดัจ +ธัญเบญจก +ธัญพืช +ธัญมาส +ธันยา +ธันยาวาท +ธันวาคม +ธัมมะ +ธาดา +ธาตรี +ธาตวากร +ธาตุ +ธาตุ- +ธาตุโขภ +ธาตุครรภ +ธาตุเจดีย์ +ธาตุเบา +ธาตุมมิสสา +ธาตุสถูป +ธาตุหนัก +ธานิน +ธานินทร์ +ธานี +ธาร +ธารกำนัล +ธารคำนัล +ธารณ +ธารณะ +ธารณา +ธารณามัย +ธารพระกร +ธารยักษ์ +ธารา +ธาราเคหะ +ธาราธิคุณ +ธารายนต์ +ธาษตรี +ธำมรงค์ +ธำรง +ธิดา +ธิติ +ธีร- +ธีรภาพ +ธีรราช +ธุช +ธุดงค- +ธุดงค์ +ธุดงควัตร +ธุดงคสมาทาน +ธุต +ธุตตะ +ธุม- +ธุมเกตุ +ธุมชาล +ธุมเพลิง +ธุมา +ธุร- +ธุรการ +ธุรกิจ +ธุระ +ธุรำ +ธุลี +ธุว- +ธุวดารา +ธุวภาค +ธุวมณฑล +ธุวยัษฎี +ธูป +ธูป- +ธูปบาตร +ธูปแพเทียนแพ +ธูปไม้ระกำ +ธูปฤๅษี +เธนุ +เธอ +เธียร +โธ่ +โธวน +น +นก +นกกระจอก +นกกระจอกทอง +นกกระทุง +นกกะปูด +นกกางปีก +นกเขา +นกคุ่ม +นกจาก +นกต่อ +นกยูง +นกรู้ +นกสองหัว +นกหก +นกหวีด +นกอยู่ในปล่อง +นกุล +นข +นข- +นขทารณ์ +นขลิขิต +นขเลขา +นขา +นค +นคร +นคร- +นครบาล +นครบาลจังหวัด +นครรัฐ +นครวาสี +นครโสภิณี +นครโสเภณี +นคราทร +นครินทร์ +นคเรศ +นคินทร +นคินทร์ +นเคนทร์ +นเคศวร +นโคทร +นง +นงคราญ +นงคุฐ +นงนุช +นงพะงา +นงพาล +นงพุธ +นงโพธ +นงเยาว์ +นงราม +นงลักษณ์ +นท +นที +นทีรัย +นนตรา +นนท์ +นนทรี +นนทลี +นนทิ +นบ +นบนอบ +นปุงสกลิงค์ +นปุงสกลึงค์ +นพ +นพ- +นพกะ +นพเก้า +นพคุณ +นพเคราะห์ +นพนิต +นพปฎล +นพพล +นพพวง +นพพัน +นพรัตน์ +นพศก +นพศูล +นภ- +นภจร +นภดล +นภมณฑล +นภวิถี +นภศูล +นภสินธุ์ +นภา +นภาลัย +นม +นมกระแชง +นมข้น +นมควาย +นมชะนี +นมช้าง +นมตาบอด +นมตาสะแก +นมตำเรีย +นมตำเลีย +นมนาง +นมนาน +นมบกอกพร่อง +นมบอด +นมผง +นมผา +นมพวง +นมพิจิตร +นมแมว +นมไม้ +นมวัว +นมสวรรค์ +นมสาว +นมหนู +นมะ +นมักการ +นมัสการ +นมาซ +นย- +นยนะ +นยนา +นยะ +นยักษ์ +นโยบาย +นร- +นรก +นรกานต์ +นรการ +นรเทพ +นรนาถ +นรนายก +นรบดี +นรบาล +นรพยัคฆ์ +นรราช +นรเศรษฐ์ +นรสิงห์ +นรสีห์ +นรา +นราธิป +นรินทร์ +นริศ +นริศร +นริศวร +นรี +นรีเวชวิทยา +นเรนทรสูร +นเรศ +นเรศวร +นเรศวร์ชนช้าง +นเรศูร +นโรดม +นฤ- +นฤคหิต +นฤโฆษ +นฤดม +นฤตย- +นฤตย์ +นฤตยศาลา +นฤตยศาสตร์ +นฤตยสถาน +นฤเทพ +นฤนาท +นฤบดี +นฤบาล +นฤเบศ +นฤป +นฤปนีติ +นฤปเวศม์ +นฤปัตนี +นฤพาน +นฤมล +นฤมาณ +นฤมิต +นลาฏ +นลิน +นลินี +นว- +นวก- +นวกภูมิ +นวกรรม +นวกรรมิก +นวกะ +นวการ +นวกิจ +นวโกวาท +นวครหะ +นวคุณ +นวเคราะห์ +นวชาต +นวด +นวดข้าว +นวดแป้ง +นวดฟั้น +นวทวาร +นวนิต +นวนิยาย +นวปฎล +นวพธู +นวม +น่วม +นวมี +นวมุข +นวย +นวยนาด +นวรัตน์ +นวล +นวลจันทร์ +นวลจันทร์ทะเล +นวลน้อย +นวลระหง +นวลลออ +นวลละออง +นวลหง +นวโลหะ +นววิธ +นวอรหาทิคุณ +นวังคสัตถุศาสน์ +นวารหาทิคุณ +นวาระ +นหาดก +นหาน +นหารุ +นหุต +นฬ +นฬ- +นฬการ +นฬป +นอ +นอก +นอกกฎหมาย +นอกครู +นอกคอก +นอกจาก +นอกใจ +นอกชาน +นอกตำรา +นอกถนน +นอกบาลี +นอกรีต +นอกรีตนอกรอย +นอกลู่นอกทาง +นอกเหนือ +นอง +น่อง +น้อง +น้องๆ +นองเนือง +น่องแน่ง +น้องเพล +นองเลือด +น่องสิงห์ +นองหน้า +นอต +นอน +นอนก้น +นอนกิน +นอนใจ +นอนตาไม่หลับ +นอนตีพุง +นอนนก +นอนแบ็บ +นอนโรง +นอนเล่น +นอนวัน +นอนเวร +นอนหลับทับสิทธิ์ +นอนหลับไม่รู้ นอนคู้ไม่เห็น +นอบ +นอบนบ +นอบน้อม +น้อม +น้อมเกล้าน้อมกระหม่อมถวาย +น้อมนำ +น้อย +น้อยแง่ +น้อยใจ +น้อยเนื้อต่ำใจ +น้อยหน่า +น้อยหน้า +น้อยหรือ +น้อยโหน่ง +นะ +นะแน่ง +นัก +นักกะ +นักการ +นักการเมือง +นักกีฬา +นักขัต +นักขัต- +นักขัตฤกษ์ +นักข่าว +นักงาน +นักตะ +นักท่องเที่ยว +นักเทศ +นักเทศน์ +นักโทษ +นักโทษเด็ดขาด +นักโทษพิเศษ +นักธรรม +นักบวช +นักบิน +นักบุญ +นักปราชญ์ +นักพรต +นักร +นักรบ +นักเรียน +นักเลง +นักศึกษา +นักษัตร +นักษัตร- +นักษัตรจักร +นักษัตรเนมี +นักษัตรบดี +นักษัตรบถ +นักษัตรปาฐก +นักษัตรมณฑล +นักษัตรมาลา +นักษัตรโยค +นักษัตรวิทยา +นักสนม +นักสราช +นักสวด +นักสิทธิ์ +นักสืบ +นักหนา +นัข +นัค +นัคคะ +นั่ง +นั่งกินนอนกิน +นั่งขัดสมาธิ +นังคัล +นั่งคุกเข่า +นั่งซัง +นั่งทาง +นั่งทางใน +นั่งเทียน +นั่งในหัวใจ +นั่งปรก +นั่งโป่ง +นั่งพับเพียบ +นั่งเมือง +นั่งยองๆ +นั่งร้าน +นั่งราว +นั่งเล่น +นั่งห้าง +นัจ +นัฏ +นัฏก +นัฑ +นัด +นัดดา +นัดแนะ +นัดหมาย +นัตถุ์ +นั่น +นั้น +นั่นซี +นันท- +นันททายี +นันทน์ +นันทนาการ +นันทปักษี +นันทิ +นั่นแน่ +นั่นปะไร +นั้นแล +นั่นแหละ +นั่นเอง +นับ +นับถือ +นับประสา +นับหน้าถือตา +นัย +นัยน์ +นัยน์ตา +นัยน์เนตร +นัยนา +นัยนามพุ +นัยว่า +นัว +นัวเนีย +นา +น่า +น้า +นาก +นากบุด +นากสวาด +นากาสาหรี +น่าเกลียดน่าชัง +นาขอบเหล็ก +นาค +นาค- +นาคเกี่ยว +นาคเกี้ยว +นาคเกี้ยวกระหวัด +นาคเกี่ยวพระสุเมรุ +นาคทนต์ +นาคบริพันธ์ +นาคบาศ +นาคปรก +นาคปัก +นาคพันธ์ +นาคร +นาครวย +นาคราช +นาคราชแผลงฤทธิ์ +นาคลดา +นาคเล่นน้ำ +นาควิถี +นาคสะดุ้ง +นาคสังวัจฉร +นาคา +นาคาวโลก +นาคินทร์ +นาคี +นาคู่โค +นาเคนทร์ +นาเคศ +นาเคศวร +นาโครคินทร +นาง +นางกราย +นางกวัก +นางเกล็ด +นางงาม +นางจรัล +นางจุม +นางชม +นางดำ +นางท้าว +นางนวล +นางนูน +นางแนบ +นางใน +นางบำเรอ +นางพญา +นางพระกำนัล +นางฟ้า +นางเมือง +นางไม้ +นางแย้ม +นางรม +นางรมใหญ่ +นางรอง +นางร้องไห้ +นางรำ +นางเรียง +นางล้อม +นางเล็ด +นางเลิ้ง +นางสนองพระโอษฐ์ +นางสาว +นางหงส์ +นางห้าม +นางอ้อม +นางอาย +นางเอก +นางแอ่น +นาเชิงทรง +นาฏ +นาฏ- +นาฏก +นาฏกรรม +นาฏดนตรี +นาฏย- +นาฏศิลป์ +นาด +นาดำ +นาถ +นาท +นาที +นาน +น่าน +นานนม +น่านน้ำ +น่านน้ำอาณาเขต +น่านฟ้า +นานสองนาน +นานแสนนาน +นานัครส +นานัตว +นานัปการ +นานา +นานาเนก +นานาประการ +นาเนก +นาบ +นาบข้าว +นาปรัง +นาปี +นาฟางลอย +นาภิ +นาภี +นาม +นาม- +นามกร +นามธรรม +นามไธย +นามบัตร +นามปากกา +นามแฝง +นามสกุล +นามสงเคราะห์ +นามสมญา +นามานุกรม +นามานุศาสตร์ +นามาภิไธย +นาเมือง +นาย +น่าย +นายก +นายกเทศมนตรี +นายกรัฐมนตรี +นายงาน +นายเงิน +นายจ้าง +นายตรวจ +นายท่า +นายท้าย +นายทุน +นายธง +นายประกัน +นายประเพณี +นายโรง +นายว่าขี้ข้าพลอย +นายเวร +นายหน้า +นายอากร +นายอำเภอ +นายิกา +นารา +นารายณ์ +นารายณ์ทรงเครื่อง +นารายณ์ประลองศิลป์ +นารายณ์หัตถ์ +นารี +นารีบูร +นารีผล +นารีสูร +นาเรศ +นาลิวัน +นาลี +นาว +น้าว +นาวา +นาวิก +นาวิก- +นาวิกโยธิน +นาวิน +นาวี +นาเวศ +นาศ +นาสวน +นาสา +นาสิก +นาหว่าน +นาฬิกา +นาฬิกาแดด +นาฬิกาทราย +นาฬิกาน้ำ +นาฬิเก +นาฬี +นำ +น้ำ +น้ำกรด +น้ำกระด้าง +น้ำกระสาย +น้ำกะทิ +น้ำกาม +น้ำเกลือ +น้ำเกิด +น้ำขาว +น้ำข้าว +น้ำขึ้น +น้ำขึ้นให้รีบตัก +น้ำขุ่นไว้ใน น้ำใสไว้นอก +น้ำแข็ง +น้ำแข็งแห้ง +น้ำครำ +น้ำคร่ำ +น้ำคัน +น้ำค้าง +น้ำค้างแข็ง +น้ำคาวปลา +น้ำคำ +น้ำเค็ม +น้ำเคย +น้ำเงิน +น้ำจัณฑ์ +นำจับ +น้ำจิ้ม +น้ำใจ +น้ำใจใคร่ +น้ำชน +น้ำชุบ +น้ำเชี่ยวอย่าขวางเรือ +น้ำเชื้อ +น้ำเชื่อม +น้ำซับ +น้ำซาวข้าว +น้ำซึม +น้ำซึมบ่อทราย +น้ำดอกไม้ +น้ำดอกไม้เทศ +น้ำดอกไม้สด +น้ำดับไฟ +น้ำดิบ +น้ำดี +น้ำตก +น้ำต้อย +น้ำตะกู +น้ำตะโก +น้ำตะไคร้ +น้ำตับ +น้ำตา +น้ำตาเช็ดหัวเข่า +น้ำตาตกใน +น้ำตาเทียน +น้ำตาย +น้ำตาล +น้ำตาลใกล้มด ใครจะอดได้ +น้ำตาลจีน +น้ำเต้า +น้ำใต้ดิน +น้ำทรง +น้ำท่วมทุ่ง ผักบุ้งโหรงเหรง +น้ำท่วมปาก +น้ำท่า +นำทาง +น้ำทูนหัว +นำเที่ยว +น้ำไทย +น้ำนม +น้ำนมแมว +น้ำนมราชสีห์ +น้ำนวล +น้ำนอง +น้ำนอนคลอง +น้ำน้อยแพ้ไฟ +น้ำนิ่งไหลลึก +น้ำบ่อน้อย +น้ำโบย +น้ำประสานทอง +น้ำปลา +น้ำป่า +น้ำผลึก +น้ำผึ้ง +น้ำพระพิพัฒน์สัตยา +น้ำพริก +น้ำพริกเผา +น้ำพักน้ำแรง +นำพา +น้ำพึ่งเรือเสือพึ่งป่า +น้ำพุ +น้ำมนต์ +น้ำมนตร์ +น้ำมัน +น้ำมันก๊าด +น้ำมันเขียว +น้ำมันเครื่อง +น้ำมันจันทน์ +น้ำมันโซลา +น้ำมันดิน +น้ำมันดิบ +น้ำมันดีเซล +น้ำมันตานี +น้ำมันเตา +น้ำมันเบนซิน +น้ำมันพราย +น้ำมันมนตร์ +น้ำมันยาง +น้ำมันระกำ +น้ำมันสน +น้ำมันสลัด +น้ำมันหม่อง +น้ำมันหล่อลื่น +น้ำมาปลากินมด น้ำลดมดกินปลา +น้ำมือ +น้ำมูก +น้ำเมา +น้ำย่อย +น้ำยา +น้ำยาเคมี +น้ำเย็นปลาตาย +นำร่อง +น้ำร้อนปลาเป็น +น้ำรัก +น้ำแร่ +น้ำลง +น้ำลดตอผุด +น้ำละว้า +น้ำลาย +น้ำลายสอ +น้ำลายหก +น้ำลายไหล +น้ำเลี้ยง +น้ำวน +น้ำว้า +น้ำไว +น้ำส้ม +น้ำส้มสายชู +นำสมัย +น้ำสังข์ +น้ำสั่งฟ้า ปลาสั่งฝน +นำสืบ +น้ำสุก +น้ำเสียง +นำแสดง +น้ำหนวก +น้ำหนัก +น้ำหน้า +น้ำหนึ่ง +น้ำหนึ่งใจเดียวกัน +น้ำหมาก +น้ำหอม +น้ำเหลือง +น้ำเหลืองน้ำตาล +น้ำไหลไฟดับ +น้ำอดน้ำทน +น้ำอบ +น้ำอบฝรั่ง +น้ำอ่อน +น้ำอ้อย +น้ำอัดลม +น้ำอาบงัว +นิ +นิกเกิล +นิกขะ +นิกขันต์ +นิกร +นิกรอยด์ +นิกาย +นิคม +นิคมที่ดิน +นิคมสร้างตนเอง +นิคมสหกรณ์ +นิคมอุตสาหกรรม +นิครนถ์ +นิคห- +นิคหกรรม +นิคหะ +นิคหิต +นิคาลัย +นิคาหก +นิคาหก- +นิเคราะห์ +นิโคติน +นิโครธ +นิโครม +นิง +นิ่ง +นิ่งเงียบ +นิ่งเฉย +นิ่งแน่ +นิจ +นิจ- +นิจศีล +นิด +นิดเดียว +นิดหน่อย +นิดหนึ่ง +นิตย- +นิตย์ +นิตยทาน +นิตยภัต +นิตยสาร +นิติ +นิติกร +นิติกรณ์ +นิติกรรม +นิติการ +นิติการณ์ +นิติธรรม +นิตินัย +นิติบัญญัติ +นิติบุคคล +นิติภาวะ +นิติวิทยาศาสตร์ +นิติเวชศาสตร์ +นิติศาสตร์ +นิติสมมติ +นิติสัมพันธ์ +นิติเหตุ +นิทร +นิทรรศการ +นิทรา +นิทรารมณ์ +นิทัศน์ +นิทาฆ +นิทาน +นิทานวจนะ +นิเทศ +นิเทศศาสตร์ +นิธาน +นิธิ +นินทา +นินนะ +นินนาท +นินหุต +นินาท +นิบาต +นิปริยาย +นิปัจการ +นิพจน์ +นิพนธ์ +นิพพาน +นิพพิทา +นิพพิทาญาณ +นิพัทธ- +นิพัทธ์ +นิพัทธกุศล +นิพันธ์ +นิพิท +นิเพท +นิภา +นิ่ม +นิ้ม +นิมนต์ +นิ่มนวล +นิมมาน +นิมมานรดี +นิมิต +นิยต +นิยต- +นิยม +นิยมนิยาย +นิยยาน +นิยยานิก- +นิยัตินิยม +นิยาม +นิยาย +นิยุต +นิร +นิรคุณ +นิรโฆษ +นิรชร +นิรชรา +นิรทุกข์ +นิรเทศ +นิรโทษ +นิรโทษกรรม +นิรนัย +นิรนาม +นิรพัตร +นิรภัย +นิรมล +นิรมาณ +นิรมาณกาย +นิรมาน +นิรมิต +นิรย- +นิรยบาล +นิรัติศัย +นิรันดร +นิรันตร- +นิรันตราย +นิรัพพุท +นิรา +นิราพาธ +นิรามัย +นิรามิษ +นิราลัย +นิราศ +นิราศรพ +นิราศรัย +นิรินธน์ +นิรินธนพินาศ +นิรุกติ +นิรุกติศาสตร์ +นิรุตติ +นิรุตติปฏิสัมภิทา +นิรุทก +นิรุทธ์ +นิโรช +นิโรธ +นิโรธ- +นิโรธสมาบัติ +นิล +นิล- +นิลบัตร +นิลปัทม์ +นิลรัตน์ +นิลุบล +นิโลตบล +นิโลบล +นิ่ว +นิ้ว +นิวคลิอิก +นิวเคลียร์ +นิวเคลียส +นิวตรอน +นิวรณ์ +นิ้วไหนร้ายก็ตัดนิ้วนั้น +นิวัต +นิวัตน์ +นิวาต +นิวาส +นิเวศ +นิเวศ- +นิเวศน์ +นิเวศวิทยา +นิศา +นิศากร +นิศากาล +นิศาคม +นิศาชล +นิศาทิ +นิศานาถ +นิศาบดี +นิศามณี +นิศารัตน์ +นิษกรม +นิษาท +นิสภ- +นิสัช +นิสัชชาการ +นิสัย +นิสัยใจคอ +นิสาท +นิสิต +นิสีทน- +นิสีทนะ +นิสีทนาการ +นิเสธ +นี่ +นี้ +นีติ +นีติธรรม +นีติศาสตร์ +นี่นัน +นี่แน่ะ +นีร- +นีรจร +นีรช +นีรนาท +นี่แหละ +นีออน +นี่เอง +นีโอดิเมียม +นึก +นึกคิด +นึกดู +นึกถึง +นึกเห็น +นึกออก +นึ่ง +นึ่งหม้อเกลือ +นุ +นุง +นุ่ง +นุ่งกระโจมอก +นุ่งเจียมห่มเจียม +นุงถุง +นุงนัง +นุ่งห่ม +นุช +นุด +นุต +นุ่น +นุ่ม +นุ่มนวล +นุ่มนิ่ม +นุ่มเนื้อ +นุ้ย +นูน +นู่น +นู้น +เนกขะ +เนกขัม +เน่ง +เนตบอล +เนตร +เนติ +เนติบัณฑิต +เน้น +เนบิวลา +เนปจูน +เนปทูเนียม +เนมิ +เนมิตก- +เนมิตกนาม +เนมิตกะ +เนย +เนยเทียม +เนยใส +เนรกัณฐี +เนรคุณ +เนรเทศ +เนรนาด +เนรนาถ +เนรมิต +เนระพูสี +เนษาท +เนอ +เน้อ +เนา +เน่า +เน่าไฟ +เนาว- +เนาวนิต +เนาวรัตน์ +เนิน +เนิ่น +เนิ่นๆ +เนิ่นนาน +เนิบ +เนิบๆ +เนิบนาบ +เนียง +เนียน +เนียม +เนียร +เนียรทุกข์ +เนียรเทศ +เนียรนาท +เนื้อ +เนื้อกษัตริย์ +เนื้อความ +เนื้อคู่ +เนื้อเค็ม +เนือง +เนืองๆ +เนื่อง +เนื่องจาก +เนื่องด้วย +เนื่องแต่ +เนืองนอง +เนืองนิตย์ +เนืองแน่น +เนื้องอก +เนื้อตัว +เนื้อตาย +เนื้อเต่ายำเต่า +เนื้อถ้อยกระทงความ +เนื้อทราย +เนื้อที่ +เนื้อแท้ +เนื้อเปื่อย +เนื้อเพลง +เนื้อไม้ +เนือย +เนือยๆ +เนื้อเยื่อ +เนื้อเยื่อกล้ามเนื้อ +เนื้อเยื่อบุผิว +เนื้อเยื่อประสาท +เนื้อเยื่อยึดต่อ +เนื้อร้อง +เนื้อร้าย +เนื้อเรื่อง +เนื้อสมัน +เนื้อหา +เนื้ออ่อน +แน่ +แน่ง +แน่งน้อย +แน่ใจ +แน่ชัด +แน่แท้ +แน่น +แน่นขนัด +แน่นท้อง +แน่นนันต์ +แน่นแฟ้น +แน่นหนา +แน่นหน้าอก +แน่นอน +แน่นิ่ง +แน่แน่ว +แนบ +แนบเนียน +แนบแน่น +แนม +แนว +แน่ว +แนวทาง +แนวที่ห้า +แน่วแน่ +แนวโน้ม +แนวป่า +แนวรบ +แนวร่วม +แนวเรือ +แนวหน้า +แนวหลัง +แนะ +แน่ะ +แนะนัด +แนะนำ +แนะแนว +แนะแหน +โน +โน้ต +โน้ตเพลง +โนน +โน่น +โน้น +โนเน +โนเบเลียม +โน้ม +โน้มน้าว +โนมพรรณ +โนรา +โนรี +ใน +ในกรม +ในไส้ +ในหลวง +ไน +ไนต์คลับ +ไนโตรเจน +ไนลอน +ไนโอเบียม +บ +บ่ +บก +บกพร่อง +บง +บ่ง +บงก- +บงก์ +บงกช +บงกชกร +บงการ +บ๊งเบ๊ง +บงสุ- +บงสุ์ +บงสุกุล +บงสุกูลิก +บงอับบงรา +บ่งอับบ่งรา +บฏ +บด +บดขยี้ +บดบัง +บดเอื้อง +บดินทร์ +บดี +บดีธรรม +บดีพรต +บดีวรดา +บดีศร +บถ +บท +บท- +บทกลอน +บทกวีนิพนธ์ +บทกำหนดโทษ +บทความ +บทคัดย่อ +บทจร +บทเจรจา +บทเฉพาะกาล +บทดอกสร้อย +บทนำ +บทบงกช +บทบงสุ์ +บทบรรณาธิการ +บทบัญญัติ +บทบาท +บทบาทมาก +บทบูรณ์ +บทประพันธ์ +บทพากย์ +บทเพลง +บทภาชน์ +บทภาชนีย์ +บทมาลย์ +บทร้อง +บทรัช +บทเรศ +บทเรียน +บทวเรศ +บทวลัญช์ +บทวาร +บทศรี +บทสนทนา +บทสังขยา +บทามพุช +บโทน +บน +บ่น +บนข้าวผี ตีข้าวพระ +บ่นถึง +บนบาน +บนบานศาลกล่าว +บพิตร +บพิตรพระราชสมภาร +บพิธ +บ่ม +บ่มผิว +บ่มมัน +บ่มหนอง +บมิ +บร- +บรทาร +บรทารกรรม +บรม +บรม- +บรมธาตุ +บรมบพิตร +บรมวงศานุวงศ์ +บรมอัฐิ +บรมัตถ์ +บรรกวด +บรรจง +บรรจถรณ์ +บรรจบ +บรรจวบ +บรรจุ +บรรเจิด +บรรณ +บรรณ- +บรรณกุฎี +บรรณพิภพ +บรรณโลก +บรรณศาลา +บรรณสาร +บรรณาการ +บรรณาคม +บรรณาธิกร +บรรณาธิการ +บรรณานุกรม +บรรณารักษ์ +บรรณารักษศาสตร์ +บรรดา +บรรดาก +บรรดามี +บรรดาศักดิ์ +บรรตานึก +บรรถร +บรรทม +บรรทัด +บรรทัดฐาน +บรรทับ +บรรทาน +บรรทุก +บรรเทา +บรรเทือง +บรรพ +บรรพ- +บรรพ์ +บรรพชา +บรรพชิต +บรรพต +บรรพต- +บรรพตกีลา +บรรพตชาล +บรรพตธาตุ +บรรพตมาลา +บรรพตราช +บรรพตวาสี +บรรพตศิขร +บรรพบุรุษ +บรรพภาค +บรรพเภท +บรรพมูล +บรรพสตรี +บรรยง +บรรยงก์ +บรรยเวกษก์ +บรรยากาศ +บรรยาย +บรรลัย +บรรลัยกัลป์ +บรรลัยจักร +บรรลาย +บรรลุ +บรรลุนิติภาวะ +บรรเลง +บรรโลม +บรรษัท +บรรสบ +บรรสพ +บรรสม +บรรสาน +บรรสาร +บรรหาน +บรรหาร +บรอนซ์ +บรัด +บรั่นดี +บรัศว์ +บรากรม +บราง +บราทุกรา +บราลี +บริกรม +บริกรรม +บริกัป +บริการ +บริขา +บริขาร +บริขารโจล +บริคณห์ +บริคณห์สนธิ +บริจาค +บริจารก +บริจาริกา +บริเฉท +บริเฉท- +บริเฉทกาล +บริชน +บริณายก +บริณายกรัตน์ +บริดจ์ +บริบท +บริบวรณ์ +บริบาล +บริบูรณ์ +บริพนธ์ +บริพัตร +บริพันธ์ +บริพาชก +บริพาชิกา +บริพาชี +บริพาร +บริภัณฑ์ +บริภาษ +บริโภค +บริโภคเจดีย์ +บริมาส +บริยาย +บริรม +บริรักษ์ +บริราช +บริวรรต +บริวาร +บริวาส +บริเวณ +บริษการ +บริษัท +บริษัทเครดิตฟองซิเอร์ +บริษัทจำกัด +บริษัทบริวาร +บริษัทมหาชนจำกัด +บริสชน +บริสุทธิ์ +บริสุทธิ์ใจ +บริหาร +บริหาส +บแรง +บแรงภักษ์ +บฤงคพ +บล็อก +บวก +บวง +บ่วง +บ่วงบาศ +บวงสรวง +บวช +บวชชี +บวน +บ้วน +บ้วนปาก +บ้วนพระโอษฐ์ +บวบ +บวบขม +บวม +บวมน้ำ +บ๊วย +บวร +บวร- +บวรโตฎก +บหลิ่ม +บอ +บ่อ +บอก +บอกกล่าว +บอกแขก +บอกคำบอก +บอกบท +บอกบัญชี +บอกบุญ +บอกใบ้ +บอกปัด +บอกเปิด +บอกยี่ห้อ +บอกเล่าเก้าสิบ +บอกวัตร +บอกศาลา +บอกหนทาง +บอกหนังสือสังฆราช +บ่อเกิด +บอง +บ่อง +บ้อง +บ๊อง +บ๊องๆ +บ้องกัญชา +บ้องตะลา +บ้องตัน +บ้องตื้น +บ้องแบ๊ว +บ้องไฟ +บ้องยาแดง +บองหลา +บ้องหู +บอด +บอดสี +บอน +บ่อน +บ่อนแตก +บ่อนทำลาย +บอนลายกระหนก +บ่อน้ำร้อน +บอบ +บอบช้ำ +บอบบาง +บอบแบบ +บ้อม +บ๋อม +บ่อย +บ่อยๆ +บอระเพ็ด +บอระมาน +บอล +บอลลูน +บ้อหุ้น +บเอ +บ๊ะ +บะหมี่ +บัก +บักโกรก +บักอาน +บัคเตรี +บัง +บั้ง +บังกะโล +บังกัด +บังเกิด +บังโกรยตัวผู้ +บังโกรยตัวเมีย +บังโกลน +บังคน +บังคนเบา +บังคนหนัก +บังคม +บังคล +บังควร +บังความ +บังคับ +บังคับการ +บังคับครุ +บังคับใจ +บังคับโท +บังคับบัญชา +บังคับลหุ +บังคับสัมผัส +บังคับเอก +บังคัล +บังโคลน +บังเงา +บังตะวัน +บังตา +บังแทรก +บังใบ +บังเพลิง +บังไพร +บังฟัน +บั้งไฟ +บังมืด +บังวาย +บังเวียน +บังสาด +บังสุกุล +บังสุกูลิก +บังสูรย์ +บังหน้า +บังหวนควัน +บังเหตุ +บังเหิน +บังเหียน +บังอร +บังอวจ +บังอาจ +บังอิง +บังอูร +บังเอิญ +บัญจก +บัญจรงค์ +บัญชร +บัญชา +บัญชาการ +บัญชี +บัญชีกระแสรายวัน +บัญชีเดินสะพัด +บัญญัติ +บัญญัติไตรยางศ์ +บัญหา +บัฏ +บัฐยาพฤต +บัณฑร +บัณฑร- +บัณฑรนาค +บัณฑิต +บัณฑิตย์ +บัณฑุ +บัณฑุกัมพล +บัณฑุกัมพลศิลาอาสน์ +บัณฑุนาค +บัณฑุโรค +บัณฑูร +บัณเฑาะก์ +บัณเฑาะว์ +บัณณาส +บัณรส +บัณรสี +บัด +บัดกรี +บัดซบ +บัดดล +บัดเดี๋ยว +บัดนั้น +บัดนี้ +บัดบง +บัดแบ่ง +บัดแมล่ง +บัดสี +บัดสีบัดเถลิง +บัตร +บัตรเทวดา +บัตรธนาคาร +บัตรพลี +บัตรสนเท่ห์ +บัตรหมาย +บัทม์ +บัน +บั่น +บั้น +บันกวด +บันจวบ +บันจอย +บันดล +บันดาล +บันเดิน +บันโดย +บันได +บันไดแก้ว +บันไดลิง +บันไดเลื่อน +บันแถลง +บั่นทอน +บั้นท้าย +บันทึก +บันทึง +บันเทิง +บันเทิงคดี +บันเบา +บั้นปลาย +บั้นพระองค์ +บันยะบันยัง +บันลือ +บั้นหลวง +บันเหิน +บั้นเอว +บัปผาสะ +บัพ +บัพชา +บัพชิต +บัพพาช +บัพพาชน์ +บัพพาชนียกรรม +บัล +บัลลพ +บัลลังก์ +บัลลูน +บัลวะ +บัว +บัวกลุ่ม +บัวขาบ +บัวคอเสื้อ +บัวตะกั่ว +บัวตูม +บัวถลา +บัวนาง +บัวบก +บัวบังใบ +บัวบาท +บัวผุด +บัวไม่ช้ำ น้ำไม่ขุ่น +บัวโรย +บัวลอย +บัวสวรรค์ +บัวสายติ่ง +บัวสายทิ้ง +บัวฮาดำ +บา +บ่า +บ้า +บ้าๆ +บาก +บากท่า +บากบั่น +บากหน้า +บาง +บ่าง +บ้าง +บางขุนนนท์ +บ่างช่างยุ +บางตา +บางที +บางเบา +บางสุ +บาจก +บาจรีย์ +บาจิกา +บ้าจี้ +บาซิลลัส +บาด +บาดคอ +บาดเจ็บ +บาดใจ +บาดตา +บาดทะจิต +บาดทะพิษ +บาดทะยัก +บาดแผล +บาดเสี้ยนบาดหนาม +บาดหมาง +บาดหมาย +บาดหู +บาดไหม +บาดาล +บ้าดีเดือด +บาแดง +บาต +บาตร +บาตรแก้ว +บาตรใหญ่ +บาท +บาท- +บาทนิเกต +บาทบ +บาทบงกช +บาทบงสุ์ +บาทบริจาริกา +บาทบูรณ์ +บาทภัฏ +บาทภาค +บาทมุทรา +บาทมูล +บาทมูลิกากร +บาทยุคล +บาทรช +บาทรัช +บาทสกุณี +บาทหลวง +บาทาธึก +บาทุกา +บาธรรม +บาน +บาน- +บ้าน +บานกบ +บานเกล็ด +บ้านเกิดเมืองนอน +บ้านเคยอยู่ อู่เคยนอน +บ้านจัดสรร +บ้านช่อง +บานชื่น +บานเช้า +บานตะเกียง +บานตะโก้ +บานตะไท +บ้านแตกสาแหรกขาด +บานทะโรค +บ้านนอก +บ้านนอกขอกนา +บานบาตร +บานบุรี +บานบุรีม่วง +บานเบอะ +บานเบิก +บานเบียง +บานแบะ +บานปลาย +บานแผนก +บานแผละ +บ้านพัก +บานพับ +บานแพนก +บานโภชน์ +บานมงคล +บ้านเมือง +บ้านเมืองมีขื่อมีแป +บานไม่รู้โรย +บานเย็น +บ้านรับรอง +บ้านเรือน +บ้าน้ำลาย +บ่านี่ +บานียะ +บานีโยทก +บ้าบ่น +บ้าบ๋า +บ้าบิ่น +บาบี +บาป +บาป- +บาปกรรม +บาปเคราะห์ +บาปมิตร +บาปหนา +บาพก +บาย +บ่าย +บ้าย +บ่ายควาย +บ่ายเบี่ยง +บายศรี +บายศรีปากชาม +บายสุหรี +บ่ายหน้า +บาร์ +บารนี +บารมี +บาร์เรล +บาร์เลย์ +บารอมิเตอร์ +บ้าระบุ่น +บ้าระห่ำ +บ้าร่าท่า +บาเรียน +บาเรียม +บาล +บ้าลำโพง +บาลี +บ้าเลือด +บ่าว +บ่าวขุน +บ่าวไพร่ +บาศ +บาศก์ +บาสเกตบอล +บ้าสมบัติ +บ้าหมู +บาหลี +บ้าหว่า +บ้าหอบฟาง +บ้าห้าร้อยจำพวก +บ๋ำ +บำเทิง +บำนาญ +บำบวง +บำบัด +บำโบ +บำโบย +บำโบล +บำเพ็ญ +บำราบ +บำราศ +บำรุง +บำรุงขวัญ +บำรู +บำเรอ +บำเรอเชอภักดิ์ +บำหยัด +บำเหน็จ +บิ +บิกู +บิกูปะระมาหนา +บิกูปะระหมั่นหนา +บิฐ +บิณฑ- +บิณฑบาต +บิด +บิดขวา +บิดขี้เกียจ +บิดจะกูด +บิดซ้าย +บิดตะกูด +บิดเบี้ยว +บิดเบือน +บิดพลิ้ว +บิดร +บิดไส้ +บิดหล่า +บิดหัวลูก +บิดา +บิตุ +บิตุจฉา +บิตุรงค์ +บิตุเรศ +บิตุล +บิตุลา +บิตุลานี +บิน +บิ่น +บินยา +บิลเลียด +บิวเรตต์ +บิศาจ +บิสมัท +บี้ +บีกู +บีฑา +บีตา +บีบ +บีบขนมจีน +บีบขมับ +บีบคั้น +บีบน้ำตา +บีบบังคับ +บีบรัด +บี้แบน +บีเยศ +บึก +บึกบึน +บึง +บึ่ง +บึ้ง +บึ้งตึง +บึงบาง +บึ้งบูด +บุ +บุก +บุกบัน +บุกบั่น +บุกเบิก +บุกป่าฝ่าดง +บุกรุก +บุคคล +บุคคล- +บุคคลธรรมดา +บุคคลนิติสมมติ +บุคคลผู้ไร้ความสามารถ +บุคคลสิทธิ +บุคลากร +บุคลาธิษฐาน +บุคลิก +บุคลิก- +บุคลิกทาน +บุคลิกภาพ +บุคลิกลักษณะ +บุง +บุ่ง +บุ้ง +บุ้งขัน +บุ้งจีน +บุ้งทะเล +บุ้งฝรั่ง +บุ้งร้วม +บุญ +บุญ- +บุญเขต +บุญญานุภาพ +บุญญาภินิหาร +บุญญาภิสังขาร +บุญทาย +บุญทำกรรมแต่ง +บุญธรรม +บุญนิธิ +บุญมาวาสนาส่ง +บุญราศี +บุญฤทธิ์ +บุญหนักศักดิ์ใหญ่ +บุณฑริก +บุณมี +บุณย์ +บุตร +บุตร- +บุตรธรรม +บุตรบุญธรรม +บุตรา +บุตรี +บุตรีตระสุม +บุถุชน +บุทคล +บุนนะบุนนัง +บุนนาค +บุบ +บุบบิบ +บุบสลาย +บุปผ- +บุปผชาติ +บุปผวิกัติ +บุพ- +บุพกรรม +บุพการี +บุพกิจ +บุพชาติ +บุพทักษิณ +บุพนิมิต +บุพบท +บุพเปตพลี +บุพพ- +บุพพัณชาติ +บุพพัณหสมัย +บุพพาจารย์ +บุพพาษาฒ +บุพพาสาฬหะ +บุพเพนิวาสานุสติญาณ +บุพเพสันนิวาส +บุพโพ +บุพภาค +บุพวิเทห์ +บุ๋ม +บุ่มบ่าม +บุ้ย +บุ้ยใบ้ +บุ้ยปาก +บุรณะ +บุรพ- +บุรพทิศ +บุรพบท +บุรพผลคุนี +บุรพภัทรบท +บุรพอาษาฒ +บุรพาจารย์ +บุระ +บุรัตถิมทิศ +บุราณ +บุราณทุติยิกา +บุรินทร์ +บุริมทิศ +บุริมพรรษา +บุริมสิทธิ +บุรี +บุรุษ +บุรุษ- +บุรุษโทษ +บุรุษธรรม +บุโรทั่ง +บุษกร +บุษบ- +บุษบก +บุษบง +บุษบราค +บุษบวรรษ +บุษบัน +บุษบา +บุษบากร +บุษบาคม +บุษบาบัณ +บุษบามินตรา +บุษบารักร้อย +บุษป- +บุษปราค +บุษปะ +บุษย- +บุษย์ +บุษย์น้ำทอง +บุษยมาส +บุษยสนาน +บุษยะ +บุษยาภิเษก +บุษราคัม +บุหงง +บุหงัน +บุหงา +บุหงาประหงัน +บุหงามลาซอ +บุหงารำไป +บุหงาลำเจียก +บุหรง +บุหรี่ +บุหรี่พระราม +บุหลัน +บู่ +บู้ +บูชนีย- +บูชนียสถาน +บูชา +บูชากัณฑ์เทศน์ +บูชายัญ +บูชิต +บูด +บูดบึ้ง +บูดเบี้ยว +บู่ทะเล +บู้บี้ +บูร +บูรณ- +บูรณ์ +บูรณภาพ +บูรณมี +บูรณะ +บูรณาการรวมหน่วย +บูรพ +บูรพา +บูรพาจารย์ +บูรพาษาฒ +บูรี +เบ้ +เบ่ง +เบ๊จี๋ +เบญกานี +เบญจ +เบญจ- +เบญจก +เบญจกัลยาณี +เบญจกามคุณ +เบญจกูล +เบญจขันธ์ +เบญจคัพย์ +เบญจคีรีนคร +เบญจโครส +เบญจดุริยางค์ +เบญจธรรม +เบญจบรรพต +เบญจพรรณ +เบญจพล +เบญจเพส +เบญจภูต +เบญจม- +เบญจมสุรทิน +เบญจมาศ +เบญจมาศสวน +เบญจมาศหนู +เบญจรงค์ +เบญจโลหกะ +เบญจวรรค +เบญจวรรณ +เบญจวรรณห้าสี +เบญจศก +เบญจศีล +เบญจา +เบญจางค- +เบญจางค์ +เบญจางคประดิษฐ์ +เบญญา +เบญพาด +เบ็ด +เบ็ดเตล็ด +เบ็ดเสร็จ +เบน +เบนซิน +เบรก +เบริลเลียม +เบรียน +เบส +เบ้อ +เบอร์ +เบอร์คีเลียม +เบ้อเร่อ +เบ้อเร่อเท่อ +เบ้อเริ่ม +เบ้อเริ่มเทิ่ม +เบอะ +เบอะบะ +เบะ +เบา +เบ้า +เบ้าขลุบ +เบาความ +เบาใจ +เบาตัว +เบ้าตา +เบาเต็ง +เบาเนื้อเบาตัว +เบาบาง +เบาปัญญา +เบามือ +เบาไม้ +เบาไม้เบามือ +เบาราณ +เบาแรง +เบาสมอง +เบ้าหลุด +เบาหวาน +เบาเหวง +เบาโหวง +เบาะ +เบาะๆ +เบาะลม +เบาะแส +เบิก +เบิกความ +เบิกทาง +เบิกทูต +เบิกบาน +เบิกพยาน +เบิกพระเนตร +เบิกพระโอษฐ์ +เบิกไพร +เบิกไม้ +เบิกเรือ +เบิกโรง +เบิกโลง +เบิกแว่นเวียนเทียน +เบิกอรุณ +เบิ่ง +เบี้ย +เบียก +เบียกบ้าย +เบี้ยกันดาร +เบี้ยแก้ +เบี่ยง +เบี่ยงบ่าย +เบียด +เบียดกรอ +เบียดบัง +เบียดเบียน +เบียดแว้ง +เบียดเสียด +เบี้ยต่อไส้ +เบี้ยทำขวัญ +เบียน +เบียนธาตุ +เบี้ยน้อยหอยน้อย +เบี้ยบน +เบี้ยบ้ายรายทาง +เบี้ยบำนาญ +เบี้ยโบก +เบี้ยประกันภัย +เบี้ยประชุม +เบี้ยปรับ +เบียร์ +เบี้ยล่าง +เบี้ยเลี้ยง +เบี้ยว +เบี้ยวๆ บูดๆ +เบี้ยหวัด +เบี้ยหัวแตก +เบี้ยหัวแหลก +เบือ +เบื่อ +เบื้อ +เบื้อง +เบื้องญวน +เบื้องต้น +เบื้องบน +เบื้องว่า +เบื้องหน้า +เบื้องหลัง +เบือน +แบ +แบ้ +แบก +แบกหน้า +แบกะดิน +แบคทีเรีย +แบ่ง +แบงก์ +แบ่งค้าง +แบ่งเบา +แบ่งปัน +แบ่งภาค +แบ่งแยก +แบ่งรับแบ่งสู้ +แบ่งสันปันส่วน +แบดมินตัน +แบตเตอรี่ +แบไต๋ +แบน +แบนโจ +แบบ +แบ็บ +แบบข้อคำถาม +แบบฉบับ +แบบบาง +แบบแผน +แบบฝึกหัด +แบบพิธี +แบบพิมพ์ +แบบสอบถาม +แบบอย่าง +แบเบาะ +แบมือ +แบรก +แบเรียม +แบหลา +แบะ +แบะแฉะ +แบะท่า +แบะปาก +แบะอก +โบ +โบ้ +โบ๋ +โบก +โบกขร- +โบกขรณี +โบกขรพรรษ +โบกมือ +โบชุก +โบดก +โบแดง +โบต +โบนัส +โบ๊เบ๊ +โบย +โบยบิน +โบรมีน +โบรอน +โบราณ +โบราณ- +โบราณคดี +โบราณวัตถุ +โบราณสถาน +โบสถ์ +ใบ +ใบ้ +ใบก้นปิด +ใบกองเกิน +ใบกองหนุน +ใบขนสินค้า +ใบขนุน +ใบขับขี่ +ใบแข็ง +ใบ้คลั่ง +ใบเงิน +ใบจอง +ใบฎีกา +ใบดาล +ใบดำ +ใบแดง +ใบแดงแจ้งโทษ +ใบตราส่ง +ใบตอง +ใบตาล +ใบทอง +ใบท้องแดง +ใบแทรก +ใบนาก +ใบบอก +ใบบุญ +ใบเบิก +ใบเบิกทาง +ใบเบิกร่อง +ใบปก +ใบปรือ +ใบปลิว +ใบพัด +ใบพัทธสีมา +ใบโพ +ใบเมี่ยง +ใบไม้ +ใบระกา +ใบรับ +ใบรับรอง +ใบลา +ใบเลี้ยง +ใบสอ +ใบสั่ง +ใบสั่งจ่าย +ใบสัจ +ใบสำคัญ +ใบสำคัญคู่จ่าย +ใบสีมา +ใบสุทธิ +ใบเสมา +ใบเสร็จ +ใบหน้า +ใบหุ้น +ใบหูช้าง +ใบเหยียบย่ำ +ใบอนุญาตขับขี่ +ไบ่ๆ +ป +ปก +ปกกระพอง +ปกเกศ +ปกครอง +ปกคลุม +ปกติ +ปกป้อง +ปกปักรักษา +ปกปิด +ปกรณ์ +ปกรณัม +ปการ +ปกิณกะ +ปกีรณัม +ปโกฏิ +ปง +ป่ง +ปงช้าง +ปงปัง +ปฎล +ปฏัก +ปฏิ- +ปฏิกรณ์ +ปฏิกรรมสงคราม +ปฏิการ- +ปฏิการะ +ปฏิกิริยา +ปฏิกูล +ปฏิคคหิต +ปฏิคม +ปฏิคหิต- +ปฏิคาหก +ปฏิฆะ +ปฏิชีวนะ +ปฏิญญา +ปฏิญญาสากลว่าด้วยสิทธิมนุษยชน +ปฏิญาณ +ปฏิทิน +ปฏิบถ +ปฏิบัติ +ปฏิบัติการ +ปฏิบัติธรรม +ปฏิปทา +ปฏิปักษ์ +ปฏิปัน +ปฏิปุจฉาพยากรณ์ +ปฏิปุจฉาวาที +ปฏิพัทธ์ +ปฏิพากย์ +ปฏิภาค +ปฏิภาค- +ปฏิภาคนิมิต +ปฏิภาณ +ปฏิภาณ- +ปฏิภาณกวี +ปฏิภาณปฏิสัมภิทา +ปฏิภาณโวหาร +ปฏิมา +ปฏิมากร +ปฏิยุทธ์ +ปฏิรพ +ปฏิรูป +ปฏิรูป- +ปฏิโลม +ปฏิวัติ +ปฏิวาต +ปฏิวาท +ปฏิเวธ +ปฏิสนธิ +ปฏิสวะ +ปฏิสังขรณ์ +ปฏิสันถาร +ปฏิสัมภิทา +ปฏิเสธ +ปฏิเสธข่าว +ปฐพี +ปฐพีวิทยา +ปฐม +ปฐม- +ปฐมกรรม +ปฐมฌาน +ปฐมดุสิต +ปฐมทัศน์ +ปฐมเทศนา +ปฐมนิเทศ +ปฐมบุรุษ +ปฐมพยาบาล +ปฐมโพธิกาล +ปฐมยาม +ปฐมฤกษ์ +ปฐมวัย +ปฐมสมโพธิ +ปฐมสุรทิน +ปฐมาษาฒ +ปฐวี +ปณต +ปณาม +ปณิธาน +ปณิธิ +ปณีต +ปด +ปดโป้ +ปดิวรัดา +ปติ +ปติยัต +ปติวัตร +ปถพี +ปถมัง +ปถวี +ปทัฏฐาน +ปทัสถาน +ปทานุกรม +ปทีป +ปทุม +ปน +ป่น +ป่นปี้ +ปนเป +ปนัดดา +ปบ +ปปัญจ- +ปปัญจธรรม +ปปัญจะ +ปม +ปมเขื่อง +ปมจิต +ปมด้อย +ปมเด่น +ปมประสาท +ปมเปา +ปโย- +ปโยชนม์ +ปโยธร +ปโยธรา +ปโยนิธิ +ปโยราศิ +ปร- +ปรก +ปรกติ +ปรง +ปรด +ปรตยักษ์ +ปรตยาค +ปรตเยก +ปรน +ปรนนิบัติ +ปรนปรือ +ปรนเปรอ +ปรนัย +ปรบ +ปรบไก่ +ปรบมือให้ +ปรปักษ์ +ปรม- +ปรมัตถ์ +ปรมาจารย์ +ปรมาณู +ปรมาตมัน +ปรมาภิไธย +ปรมาภิเษก +ปรมินทร์ +ปรเมนทร์ +ปรเมศวร์ +ปรเมษฐ์ +ปรเมหะ +ปรโลก +ปรวด +ปรวนแปร +ปรวาที +ปรศุ +ปรสิต +ปรสิต- +ปรสิตวิทยา +ปร๋อ +ปรองดอง +ปรอด +ปรอดๆ +ปรอท +ปรอย +ปรอยๆ +ประ- +ประกบ +ประกบตัว +ประกฤต +ประกฤติ +ประกล +ประกวด +ประกวดประขัน +ประกวดราคา +ประกอบ +ประกอบด้วย +ประกอบอาหาร +ประกัน +ประกันชีวิต +ประกันเชิงลา +ประกันตัวผู้ต้องหาหรือจำเลย +ประกันภัย +ประกันภัยค้ำจุน +ประกันวินาศภัย +ประกับ +ประกาย +ประกายพรึก +ประการ +ประกาศ +ประกาศก +ประกาศนียบัตร +ประกาศิต +ประกำ +ประกิด +ประกิต +ประกีรณก +ประเกียรณก +ประแกก +ประคด +ประคนธรรพ +ประคนธรรพ์ +ประคบ +ประคบประหงม +ประคอง +ประคับประคอง +ประคัลภ์ +ประคารม +ประคำ +ประคำไก่ +ประคำดีควาย +ประคำร้อย +ประคิ่น +ประคิ่นวินชา +ประคุณ +ประเคน +ประเคราะห์ +ประโคน +ประโคนธรรพ +ประโคนธรรพ์ +ประโคม +ประโคมข่าว +ประจง +ประจญ +ประจบ +ประจบประแจง +ประจวบ +ประจ๋อประแจ๋ +ประจักษ- +ประจักษ์ +ประจักษนิยม +ประจักษ์พยาน +ประจัญ +ประจัญบาน +ประจัน +ประจันหน้า +ประจาก +ประจาค +ประจาน +ประจำ +ประจำการ +ประจำครั่ง +ประจำฉัตร +ประจำซอง +ประจำเดือน +ประจำตรา +ประจำเมือง +ประจำยาม +ประจิม +ประจิ้มประจ่อง +ประจิ้มประเจ๋อ +ประจุ +ประจุขาด +ประจุคมน์ +ประจุบัน +ประจุไฟฟ้า +ประจุโลหิต +ประเจก +ประเจิด +ประเจิดประเจ้อ +ประเจียด +ประแจ +ประแจจีน +ประชด +ประชดประชัน +ประชน +ประชวม +ประชวร +ประชัน +ประชา +ประชากร +ประชากรศาสตร์ +ประชาคม +ประชาชน +ประชาชาติ +ประชาทัณฑ์ +ประชาธิปไตย +ประชานาถ +ประชาบดี +ประชาบาล +ประชาภิบาล +ประชามติ +ประชาราษฎร์ +ประชาสงเคราะห์ +ประชาสัมพันธ์ +ประชิด +ประชี +ประชุม +ประชุมเพลิง +ประชุมสุดยอด +ประเชิญ +ประณต +ประณม +ประณาม +ประณิธาน +ประณิธิ +ประณีต +ประณุท +ประดง +ประดงแดง +ประดน +ประดนธรรม +ประดวน +ประดอน +ประดอย +ประดักๆ +ประดักประเดิด +ประดัง +ประดับ +ประดับประดา +ประดา +ประดาก +ประดาตาย +ประดาทัพ +ประดาน้ำ +ประดาป +ประดาพล +ประดามี +ประดาษ +ประดาเสีย +ประดิ- +ประดิชญา +ประดิดประดอย +ประดิทิน +ประดิรพ +ประดิษฐ- +ประดิษฐ์ +ประดิษฐกรรม +ประดิษฐาน +ประดุง +ประดุจ +ประดู่ +ประดู่แขก +ประดู่ชิงชัน +ประดู่แดง +ประดู่ลาย +ประเด +ประเด็น +ประเดยก +ประเดิม +ประเดียง +ประเดี๋ยว +ประเดี๋ยวก่อน +ประเดี๋ยวเดียว +ประเดี๋ยวนี้ +ประเดี๋ยวประด๋าว +ประแดง +ประแดะ +ประโดย +ประตง +ประตยาค +ประตัก +ประตาปะ +ประติ- +ประติชญา +ประติญาณ +ประติทิน +ประติมากรรม +ประติรพ +ประติศรัพ +ประตู +ประตูชัย +ประตูน้ำ +ประตูป่า +ประตูผี +ประตูฟุตบอล +ประตูระบาย +ประตูรับน้ำ +ประตูลม +ประถม +ประถมจินดา +ประทม +ประทยด +ประท้วง +ประทวน +ประทวนสินค้า +ประทักษ์ +ประทักษิณ +ประทัง +ประทัด +ประทัดจีน +ประทัดทอง +ประทัดฝรั่ง +ประทัดลม +ประทัดเล็ก +ประทัดใหญ่ +ประทับ +ประทับใจ +ประทับตรา +ประทับฟ้อง +ประทับแรม +ประท่า +ประทากล้อง +ประทาน +ประทานบัตร +ประทาย +ประทาศี +ประทิน +ประทิ่น +ประทีป +ประทุก +ประทุฐ +ประทุฐจิต +ประทุน +ประทุมราค +ประทุษ +ประทุษฏ์ +ประทุษฏจิต +ประทุษฐ์ +ประทุษฐจิต +ประทุษร้าย +ประเทศ +ประเทศกันชน +ประเทศชาติ +ประเทศราช +ประเทา +ประเท้า +ประเทียด +ประเทียบ +ประเทือง +ประธาน +ประธานาธิบดี +ประนม +ประนมมือ +ประนอ +ประนอม +ประนอมหนี้ +ประนัง +ประนัปดา +ประนี้ +ประนีประนอม +ประนีประนอมยอมความ +ประบัด +ประบาต +ประปราน +ประปราย +ประปา +ประเปรี้ยง +ประเปรียว +ประแป้ง +ประแปร้น +ประพจน์ +ประพนธ์ +ประพรม +ประพฤติ +ประพฤทธิ์ +ประพัด +ประพัทธ์ +ประพันธ์ +ประพาต +ประพาส +ประพาสต้น +ประพาสมหรณพ +ประพาฬ +ประพิณ +ประพิมพ์ประพาย +ประพุทธ์ +ประเพณี +ประเพณีนิยม +ประเพ้อ +ประแพร่งประแพรว +ประโพธ +ประไพ +ประไพร +ประภพ +ประภัสสร +ประภา +ประภากร +ประภาคาร +ประภาพ +ประภามณฑล +ประภาษ +ประภาส +ประเภท +ประมง +ประมวญ +ประมวล +ประมวลกฎหมาย +ประมวลการสอน +ประมวลรัษฎากร +ประมัตตะ +ประมาณ +ประมาณการ +ประมาณตน +ประมาณตัว +ประมาท +ประมาทหน้า +ประมุข +ประมุท +ประมูล +ประเมิน +ประเมินภาษี +ประโมง +ประโมทย์ +ประยงค์ +ประยุกต์ +ประยุทธ์ +ประยุร +ประยูร +ประโยค +ประโยคประธาน +ประโยคสัมปทา +ประโยชน์ +ประโรหิต +ประลมพ์ +ประลอง +ประลองยุทธ์ +ประลัย +ประลัยกัลป์ +ประลัยวาต +ประลาต +ประลาย +ประลึง +ประลุ +ประลุง +ประเล่ห์ +ประเล้าประโลม +ประโลประเล +ประโลม +ประโลมโลก +ประวรรต +ประวรรตน์ +ประวัติ +ประวัติ- +ประวัติการ +ประวัติการณ์ +ประวัติกาล +ประวัติศาสตร์ +ประวาต +ประวาล +ประวาลปัทม์ +ประวาลผล +ประวาลวรรณ +ประวาส +ประวิง +ประวิช +ประวิตร +ประวิสรรชนีย์ +ประวีณ +ประเวณี +ประเวประวิง +ประเวศ +ประเวศน์ +ประศม +ประศาสน์ +ประศุ +ประสก +ประสงค์ +ประสงค์ร้าย +ประสบ +ประสบการณ์ +ประสบการณ์นิยม +ประสพ +ประสม +ประสมประสาน +ประสมประเส +ประสมพันธุ์ +ประสมโรง +ประสะ +ประสัก +ประสันนาการ +ประสัยห- +ประสัยห์ +ประสัยหาการ +ประสัยหาวหาร +ประสา +ประสาท +ประสาท- +ประสาทการ +ประสาทรูป +ประสาทหลอน +ประสาธน์ +ประสาน +ประสานงา +ประสานเนรมิต +ประสานเสียง +ประสาร +ประสิทธิ- +ประสิทธิ์ +ประสิทธิ์ประสาท +ประสิทธิผล +ประสิทธิภาพ +ประสิทธิเม +ประสีประสา +ประสูต +ประสูติ +ประเสบันอากง +ประเสริฐ +ประแสบัน +ประหนึ่ง +ประหม่า +ประหยัด +ประหรณ์ +ประหลาด +ประหล่ำ +ประหลิ่ม +ประหวัด +ประหวั่น +ประหว่า +ประหัต +ประหัตประหาร +ประหาณ +ประหาร +ประหารชีวิต +ประหาส +ประเหล +ประเหส +ประเหียล +ประอบ +ประอร +ประอรประเอียง +ประอึง +ประอุก +ประเอียง +ประแอก +ประฮาม +ปรัก +ปรักปรำ +ปรักมะ +ปรักหักพัง +ปรัง +ปรัชญา +ปรัด +ปรัตถจริยา +ปรัตยนต์ +ปรัตยักษ์ +ปรัตยันต์ +ปรัตยัย +ปรัตยุตบัน +ปรัตยุบัน +ปรัตยูษ +ปรัตยูห์ +ปรัตเยก +ปรัน +ปรั่น +ปรั้น +ปรับ +ปรับทุกข์ +ปรับโทษ +ปรับปรุง +ปรับไหม +ปรับอากาศ +ปรับอาบัติ +ปรัมปรา +ปรัศจิม +ปรัศนา +ปรัศนี +ปรัศว์ +ปร่า +ปรากฏ +ปรากฏการณ์ +ปรากรม +ปรากฤต +ปราการ +ปราคภาร +ปราคาร +ปราง +ปรางค์ +ปรางคณะ +ปรางค์ปรา +ปราจีน +ปราชญ์ +ปราชญา +ปราชัย +ปราชาปัตยวิวาหะ +ปราชิต +ปราณ +ปราณี +ปราด +ปราดเปรียว +ปราดเปรื่อง +ปราติหารย์ +ปราทุกรา +ปราน +ปรานี +ปรานีตีเอาเรือ +ปรานีปราศรัย +ปราบ +ปราบดาภิเษก +ปราบปราม +ปราปต์ +ปราภพ +ปราม +ปรามาส +ปราโมช +ปราโมทย์ +ปราย +ปรารถนา +ปรารภ +ปรารมภ์ +ปราศ +ปราศจาก +ปราศรัย +ปราษณี +ปราษาณ +ปราสัย +ปราสาท +ปรำ +ปริ- +ปริก +ปริกขาร +ปริกรรม +ปริกัป +ปริกัลป- +ปริกัลปมาลา- +ปริขา +ปริคณห์ +ปริจาค +ปริจาริกา +ปริเฉท +ปริชน +ปริซึม +ปริญญา +ปริญญาบัตร +ปริณาม +ปริณามัคคิ +ปริณายก +ปริต +ปริต- +ปริตตะ +ปริตโตทก +ปริตทวีป +ปริตยาค +ปริตร +ปริทรรศน์ +ปริทัยหัคคี +ปริทัศน์ +ปริเทพ +ปริเทพน์ +ปริเทวนะ +ปริเทวะ +ปรินิพพาน +ปริบ +ปริปันถ์ +ปริปาก +ปริพนธ์ +ปริพัตร +ปริพันธ์ +ปริพาชก +ปริภัณฑ์ +ปริภาษ +ปริภาษณ์ +ปริภุญช์ +ปริภูมิ +ปริโภค +ปริ่ม +ปริมณฑล +ปริมัท +ปริมาณ +ปริมาตร +ปริย- +ปริยรณ +ปริยวาท +ปริยวาที +ปริยัติ +ปริยัติธรรม +ปริยานุช +ปริยาย +ปริเยศ +ปริโยสาน +ปริวรรต +ปริวรรต- +ปริวรรตกรรม +ปริวัตร +ปริวาร +ปริวาส +ปริวิตก +ปริเวณ +ปริศนา +ปริศนาธรรม +ปริศนาลายแทง +ปริศนาอักษรไขว้ +ปริษการ +ปริษัท +ปริสัญญู +ปริสุทธิ +ปริหาน +ปริหาร +ปริหาส +ปรี่ +ปรีชญา +ปรีชา +ปรี๊ด +ปรีดา +ปรีดิ +ปรีดิ์ +ปรีดี +ปรีติ +ปรีย +ปรียา +ปรึก +ปรึกษา +ปรึง +ปรือ +ปรื๋อ +ปรุ +ปรุง +ปรุโปร่ง +ปรู +ปรู๋ +ปรูด +ปรูดปราด +ปรู๊ดปร๊าด +ปรู๊ฟ +ปฤงคพ +ปฤจฉา +ปฤจฉาคุณศัพท์ +ปฤจฉาสรรพนาม +ปฤษฎ์ +ปฤษฎางค์ +ปฤษฐ +ปลก +ปลกเปลี้ย +ปลง +ปล่ง +ปลงกรรมฐาน +ปลงใจ +ปลงช้าง +ปลงชีวิต +ปลงตก +ปลงธรรมสังเวช +ปลงธุระ +ปลงบริขาร +ปลงผม +ปลงศพ +ปลงสังขาร +ปลงสังเวช +ปลงอนิจจัง +ปลงอาบัติ +ปลงอายุสังขาร +ปลด +ปลดเกษียณ +ปลดเกษียณอายุ +ปลดทุกข์ +ปลดปลง +ปลดปล่อย +ปลดเปลื้อง +ปลดระวาง +ปลดหนี้ +ปลดออก +ปลดอาวุธ +ปลดแอก +ปล้น +ปล้นทรัพย์ +ปลวก +ปลวังค- +ปลอก +ปลอกกระสุน +ปลอกคอ +ปลอกมีด +ปลอกมือ +ปล่อง +ปล้อง +ปล้องขน +ปล้องฉนวน +ปล้องไฉน +ปล้องทอง +ปล้องอ้อย +ปลอด +ปลอดทหาร +ปลอดโปร่ง +ปลอดภัย +ปล้อน +ปลอบ +ปลอบขวัญ +ปลอบโยน +ปลอม +ปลอมปน +ปลอมแปลง +ปล่อย +ปล่อยเกาะ +ปล่อยแก่ +ปล่อยไก่ +ปล่อยของ +ปล่อยใจ +ปล่อยตัว +ปล่อยตัวปล่อยใจ +ปล่อยนกปล่อยกา +ปล่อยเนื้อปล่อยตัว +ปล่อยปละละเลย +ปล่อยปลาลงน้ำ +ปล่อยปลิง +ปล่อยมือ +ปล่อยเสือเข้าป่า +ปละ +ปลัก +ปลั๊ก +ปลั๊กไฟ +ปลัง +ปลั่ง +ปลัด +ปลัดขิก +ปลา +ปลาก +ปลากริม +ปลาเกลือ +ปลาข้องเดียวกัน +ปลาเค็ม +ปลาเงินปลาทอง +ปลาจ่อม +ปลาจีน +ปลาเจ่า +ปลาชา +ปลาดาว +ปลาแดก +ปลาแดง +ปลาต +ปลาตกน้ำตัวโต +ปลาตะเพียน +ปลาติดหลังแห +ปลาตู้ +ปลาทอง +ปลาแนม +ปลาบ +ปลาบปลื้ม +ปลาบิน +ปลาฝา +ปลาม้ำ +ปลาย +ปลายข้าว +ปลายตีน +ปลายทาง +ปลายนาการ +ปลายน้ำ +ปลายมือ +ปลายอ้อปลายแขม +ปลาร้า +ปลาโลมา +ปลาวาฬ +ปลาสเตอร์ +ปลาสนาการ +ปลาส้ม +ปลาหน้าดิน +ปลาหมอตายเพราะปาก +ปลาหมึก +ปลาเห็ด +ปลาใหญ่กินปลาเล็ก +ปลาไหลเผือก +ปล้ำ +ปล้ำปลุก +ปล้ำผีลุกปลุกผีนั่ง +ปลิง +ปลิงทะเล +ปลิด +ปลิ้น +ปลิ้นปลอก +ปลิ้นปล้อน +ปลิโพธ +ปลิม +ปลิ่ม +ปลิว +ปลี +ปลีก +ปลีกตัว +ปลีกย่อย +ปลีกเวลา +ปลีแข้ง +ปลื้ม +ปลุก +ปลุกใจ +ปลุกตัว +ปลุกปล้ำ +ปลุกปั่น +ปลุกผี +ปลุกพระ +ปลุกระดม +ปลุกเสก +ปลูก +ปลูกฝัง +ปลูกฝี +ปลูกเรือนคร่อมตอ +ปลูกเรือนตามใจผู้อยู่ +ปลูกเรือนพอตัว หวีหัวพอเกล้า +ปวกเปียก +ปวง +ป่วง +ปวด +ปวดถ่วง +ปวดท้องทุ่ง +ปวดท้องเบา +ปวดท้องเยี่ยว +ปวดมวน +ปวดร้าว +ปวดเศียรเวียนเกล้า +ปวดแสบปวดร้อน +ป่วน +ป้วน +ป่วนปั่น +ป้วนเปี้ยน +ป่วย +ป่วยกล่าว +ป่วยการ +ปวัตน- +ปวัตน์ +ปวัตนาการ +ปวารณา +ปวาล +ปวาส +ปวาฬ +ปวิช +ปวิตร +ปวิธ +ปวิเวก +ปวีณ +ปวุติ +ปเวณี +ปเวส +ปเวสน์ +ปศุ +ปสพ +ปสันน- +ปสันนะ +ปสันนาการ +ปสัยห- +ปสัยหะ +ปสัยหาการ +ปสัยหาวหาร +ปสาท +ปสาน +ปสาสน์ +ปสุ +ปสุต +ปสูติ +ปหังส +ปหังสน +ปหาน +ปหาร +ปหาส +ปอ +ป้อ +ป๋อ +ปอก +ปอกกล้วยเข้าปาก +ปอกลอก +ปอง +ป่อง +ป่องๆ +ป้อง +ป้องกัน +ป่องร่า +ปอด +ปอดชื้น +ปอดบวม +ปอดแปด +ปอดลอย +ปอดเหล็ก +ปอน +ปอนๆ +ป้อน +ปอนด์ +ปอเนาะ +ปอบ +ป้อแป้ +ปอม +ป้อม +ป้อมๆ +ป๋อม +ปอมขาง +ปอมข่าง +ป้อมบังคับการ +ปอย +ป้อย +ป้อยอ +ปอเลียงฝ้าย +ปะ +ปะกน +ปะกัง +ปะกาปะกัง +ปะการัง +ปะกำ +ปะขาว +ปะงับปะง่อน +ปะตาปา +ปะตาระกาหลา +ปะติดปะต่อ +ปะติยาน +ปะเตะ +ปะทะ +ปะทะปะทัง +ปะทุ +ปะทุน +ปะบุก +ปะปน +ปะมง +ปะราลี +ปะรำ +ปะลอม +ปะเลง +ปะแล่ม +ปะแล่มๆ +ปะโลง +ปะวะหล่ำ +ปะวะหลิ่ม +ปะว่า +ปะเสหรันอากง +ปะหงับ +ปะหงับๆ +ปะหงับปะง่อน +ปะหนัน +ปะหมันอาหยี +ปะหลิ่ม +ปะหัง +ปะเหลาะ +ปะเหลาะปะแหละ +ปัก +ปักข- +ปักข์ +ปักขคณนา +ปักขพิฬาร +ปักขันดร +ปักใจ +ปักเป้า +ปักษ- +ปักษ์ +ปักษกษัย +ปักษคณนา +ปักษคม +ปักษธร +ปักษเภท +ปักษวาหน +ปักษา +ปักษานดร +ปักษาวสาน +ปักษาสวรรค์ +ปักษิน +ปักษี +ปักหลัก +ปัคหะ +ปัง +ปั๋ง +ปังสุ์ +ปังสุกุล +ปัจจัตตะ +ปัจจัตถรณ์ +ปัจจันต- +ปัจจันต์ +ปัจจันตคาม +ปัจจันตชนบท +ปัจจันตประเทศ +ปัจจัย +ปัจจามิตร +ปัจจุคมน์ +ปัจจุทธรณ์ +ปัจจุบัน +ปัจจุบันทันด่วน +ปัจจุส- +ปัจจุสกาล +ปัจจุสมัย +ปัจจูส +ปัจจูหะ +ปัจเจก +ปัจเจก- +ปัจเจกบุคคล +ปัจเจกพุทธะ +ปัจเจกโพธิ +ปัจเจกสมาทาน +ปัจโจปการกิจ +ปัจโจสกาล +ปัจฉา +ปัจฉาภัต +ปัจฉาสมณะ +ปัจฉิม +ปัจฉิม- +ปัจฉิมชน +ปัจฉิมภาค +ปัจฉิมยาม +ปัจฉิมลิขิต +ปัจฉิมวัย +ปัจฉิมวาจา +ปัจถรณ์ +ปัจนึก +ปัจยาการ +ปัจเวกขณ์ +ปัชชร +ปัชชุน +ปัญจ- +ปัญจก +ปัญจนที +ปัญจม- +ปัญจมี +ปัญจมีดิถี +ปัญจวัคคีย์ +ปัญจวีสติ +ปัญจสาขา +ปัญญัติ +ปัญญา +ปัญญาแค่หางอึ่ง +ปัญญาชน +ปัญญาส- +ปัญญาอ่อน +ปัญหา +ปัญหาโลกแตก +ปัฏ +ปัฏนะ +ปัฐยาวัต +ปัณฑรหัตถี +ปัณณะ +ปัณณาส +ปัณณาสก์ +ปัณรส- +ปัณรสม- +ปัณรสมสุรทิน +ปัณรสี +ปัณรสีดิถี +ปัณหิ +ปัด +ปัดๆ +ปัดเกล้า +ปัดขา +ปัดแข้งปัดขา +ปัดตลอด +ปัดไถม +ปัดเป่า +ปัดรังควาน +ปัดเศษ +ปัดสวะ +ปัตคาด +ปัตตะ +ปัตตานีกะ +ปัตตานึก +ปัตตานุโมทนา +ปัตตาเวีย +ปัตติ +ปัตติก +ปัตติทาน +ปัตถร +ปัตถะ +ปัตนิ +ปัตนี +ปัตยัย +ปัตหล่า +ปัถพี +ปัถวี +ปัทม- +ปัทม์ +ปัทมปาณี +ปัทมราค +ปัทมราช +ปัทมะ +ปัทมาสน์ +ปัน +ปั่น +ปั้น +ปั้นจั่น +ปั้นจิ้มปั้นเจ๋อ +ปันจุเหร็จ +ปั้นเจ๋อ +ปั่นป่วน +ปั้นปึ่ง +ปั่นแปะ +ปั่นฝ้าย +ปั่นไฟ +ปั้นยศ +ปั้นลม +ปั้นล่ำ +ปันส่วน +ปั้นสิบ +ปั้นสีหน้า +ปั้นหยา +ปั่นหัว +ปั้นเหน่ง +ปับ +ปั๊บ +ปัปผาสะ +ปัพพาชนะ +ปัพพาชนียกรรม +ปัพภาระ +ปั๊มน้ำมัน +ปัยกะ +ปัยกา +ปัยยิกา +ปั่ว +ปัวเปีย +ปั้วเปี้ย +ปัศจิม +ปัศตัน +ปัศตู +ปัสสาวะ +ปัสสาสะ +ปา +ป่า +ป้า +ปาก +ปากกบ +ปากกระจับ +ปากกระบะ +ปากกริว +ปากกล้า +ปากกว้าง +ปากกา +ปากกาลูกลื่น +ปากกาหมึกซึม +ปากกาหมึกแห้ง +ปากไก่ +ปากขม +ปากขอ +ปากแข็ง +ปากคม +ปากคอก +ปากคอเราะราย +ปากคัน +ปากคำ +ปากคีบ +ปากจอบ +ปากจะขาบ +ปากจัด +ปากจิ้งจก +ปากฉลาม +ปากช้าง +ปากซ่อม +ปากตลาด +ปากต่อปาก +ปากตะกร้อ +ปากตะไกร +ปากตะขาบ +ปากตำแย +ปากแตร +ปากใต้ +ปากนก +ปากนกกระจอก +ปากนกแก้ว +ปากน้ำ +ปากบอน +ปากบาตร +ปากเบา +ปากแบะ +ปากปราศรัยใจเชือดคอ +ปากปลา +ปากปลาร้า +ปากปลิง +ปากเป็ด +ปากเป็นชักยนต์ +ปากเปราะ +ปากเปราะเราะราย +ปากเปล่า +ปากเปียก +ปากเปียกปากแฉะ +ปากโป้ง +ปากไปล่ +ปากมาก +ปากไม้ +ปากไม่สิ้นกลิ่นน้ำนม +ปากราก +ปากร้าย +ปากเรือ +ปากว่าตาขยิบ +ปากว่ามือถึง +ปากสว่าง +ปากหนัก +ปากหวาน +ปากหวานก้นเปรี้ยว +ปากหอยปากปู +ปากห่าง +ปากเหยี่ยวปากกา +ปากอ่าว +ป่าแคระ +ปาง +ป่าง +ป้าง +ป้างป่า +ปาจนะ +ปาจรีย์ +ปาจารย์ +ปาจิตตีย์ +ปาจีน +ป่าช้า +ป่าชายเลน +ปาฏลิ +ปาฏิบท +ปาฏิบุคลิก +ปาฏิโภค +ปาฏิหาริย์ +ปาฐ- +ปาฐก +ปาฐกถา +ปาฐะ +ปาณ- +ปาณก- +ปาณกชาติ +ปาณทัณฑ์ +ปาณนาศ +ปาณภูต +ปาณวินาศ +ปาณสาร +ปาณะ +ปาณาติบาต +ปาณิ +ปาณิเคราะห์ +ปาณิดล +ปาณิธรรม +ปาณิมุกต์ +ปาณิมูล +ปาณี +ปาด +ป่าดงดิบ +ปาดหาว +ป่าดิบ +ป่าแดง +ปาติโมกข์ +ปาตี +ปาเต๊ะ +ป่าเถื่อน +ปาท +ปาทป +ปาท่องโก๋ +ปาทังกา +ปาทาน +ป่าทึบ +ปาทุกา +ปาน +ป่าน +ป้าน +ปานกลาง +ป่านคม +ปานฉะนี้ +ปานดง +ปานนี้ +ป่านนี้ +ป้านลม +ปานะ +ปานิเยน +ปานีย- +ปานียะ +ปานีโยทก +ป้าบ +ป๊าบ +ป่าเบญจพรรณ +ปาป- +ปาปมุต +ปาปอหยีสังฆาตา +ป่าโปร่ง +ป่าผลัดใบ +ปาพจน์ +ป่าแพะ +ปาม +ปามปึงมา +ปาโมกข์ +ป่าไม้พุ่ม +ป่าย +ป้าย +ป้ายสี +ปายาส +ปาร- +ปาร์เกต์ +ปารคู +ปารมี +ปารเมศ +ปารษณี +ป่าระนาม +ปาราชิก +ปาริฉัตร +ปาริชาต +ปารุปนะ +ปาล +ปาล์ม +ป่าละเมาะ +ปาลิไลยก์ +ปาลี +ป่าเลน +ปาวๆ +ป่าว +ป๊าว +ปาวก +ปาวจนะ +ป่าวประกาศ +ป่าวร้อง +ปาวาร +ปาษาณ +ปาส +ปาสาณ +ปาสาทิกะ +ป่าสูง +ป่าเส็งเคร็ง +ป่าใส +ปาหนัน +ปาหี่ +ปาหุณ +ปาหุไณย- +ปาหุไณยบุคคล +ปำ +ป้ำ +ป้ำเป้อ +ป้ำเป๋อ +ป้ำๆ เป๋อๆ +ปิกนิก +ปิ้ง +ปิงคล- +ปิงคลหัตถี +ปิงคละ +ปิ้งปลาประชดแมว +ปิงปอง +ปิฎก +ปิฏฐะ +ปิฐิ +ปิณฑะ +ปิด +ปิดกล้อง +ปิดคดี +ปิดควันไฟไม่มิด +ปิดฉาก +ปิดตาย +ปิดเต๊าะ +ปิดทองหลังพระ +ปิดบัง +ปิดบัญชี +ปิดเบา +ปิดประตูค้า +ปิดประตูตีแมว +ปิดปาก +ปิดสำนวน +ปิดหนัก +ปิดหีบไม่ลง +ปิตตะ +ปิตา +ปิตามหะ +ปิตามหัยกา +ปิตามหัยยิกา +ปิตุ +ปิตุฆาต +ปิตุจฉา +ปิตุภูมิ +ปิตุล +ปิตุลา +ปิตุลานี +ปิโตรเลียม +ปิ่น +ปิ่นแก้ว +ปิ่นซ่น +ปิ่นตอ +ปิ่นโต +ปิปผลี +ปิ่ม +ปิ้ม +ปิย- +ปิยังคุ +ปิลันธน์ +ปิ๋ว +ปิศาจ +ปิศาจบดี +ปิสัง +ปิไส +ปิหก +ปิหลั่น +ปี +ปี่ +ปี้ +ปี๋ +ปีก +ปีกกล้าขาแข็ง +ปีกกา +ปีกค้างคาว +ปีกนก +ปีกไม้ +ปีกลาย +ปีกหัก +ปีการศึกษา +ปี่แก้ว +ปีงบประมาณ +ปีฐกะ +ปีฐะ +ปี๊ด +ปีติ +ปีน +ปีนเกลียว +ปีบ +ปี๊บ +ปีปฏิทิน +ปี่พาทย์ +ปีมะโว้ +ปีศาจ +ปีแสง +ปีหน้าฟ้าใหม่ +ปีฬ +ปีฬก +ปีฬา +ปึก +ปึกแผ่น +ปึง +ปึ่ง +ปึ๋ง +ปึ่งชา +ปึงปัง +ปึ้ด +ปึมปื้อ +ปืดปึง +ปืน +ปื้น +ปืนยา +ปือ +ปื้อ +ปื๋อ +ปุ +ปุ๊ +ปุก +ปุกปุย +ปุคละ +ปุ้งกี๋ +ปุงคพ +ปุงควะ +ปุงลิงค์ +ปุงลึงค์ +ปุจฉา +ปุฏ +ปุณฑริก +ปุด +ปุดกะลา +ปุตตะ +ปุถุชน +ปุนนาค +ปุนภพ +ปุนัพพสู +ปุนัพสุ +ปุบ +ปุ๊บ +ปุบปับ +ปุ๊บปั๊บ +ปุปผะ +ปุปะ +ปุพพ- +ปุพพผลคุนี +ปุพพผลคุนี- +ปุพพะ +ปุพพะภัททะ +ปุม- +ปุ่ม +ปุ้ม +ปุ๋ม +ปุ่มปลา +ปุ่มป่ำ +ปุ้มเป้ง +ปุ่มเปือก +ปุ้มเปือก +ปุมา +ปุย +ปุ้ย +ปุ๋ย +ปุยกระโดน +ปุยขาว +ปุ๋ยคอก +ปุยฝ้าย +ปุร +ปุรณะ +ปุรพ- +ปุรพผลคุนี +ปุรพษาฒ +ปุราณ +ปุราณะ +ปุเรจาริก +ปุโรหิต +ปุลลิงค์ +ปุลลึงค์ +ปุลินท์ +ปุลู +ปุโลปุเล +ปุษยะ +ปุสสะ +ปุฬวะ +ปู +ปู่ +ปู่ครู +ปูจ๋า +ปู่เจ้า +ปูชกะ +ปูชนีย- +ปูชนียะ +ปูชา +ปูชิต +ปูด +ปูดกกส้มมอ +ปูติ +ปูติลดา +ปู่ทวด +ปูน +ปูนขาว +ปูนซีเมนต์ +ปูนดิบ +ปูนแดง +ปูนปลาสเตอร์ +ปูนปั้น +ปูนเปียก +ปูนผิว +ปูนเพชร +ปูนไฟ +ปูนสอ +ปูนสุก +ปู่น้อย +ปูม +ปู่ย่า +ปู้ยี่ปู้ยำ +ปูระ +ปูลู +ปูเล +ปูวา +ปูเสฉวน +เป้ +เป๋ +เปก +เป๊ก +-เปกข์ +เป่ง +เป้ง +เป๋ง +เป็ด +เป็ดก่า +เป็ดแก้ว +เป็ดขันประชันไก่ +เป็ดถบ +เป็ดเทศ +เป็ดน้ำ +เป็ดผี +เป็ดไฟแดง +เป็ดหงส์ +เปต- +เปตพลี +เปตวิสัย +เปตอง +เปตา +เป็น +เป็นกลาง +เป็นกอง +เป็นกอบเป็นกำ +เป็นการ +เป็นควัน +เป็นความ +เป็นคุ้งเป็นแคว +เป็นงานเป็นการ +เป็นเงาตามตัว +เป็นเงินเป็นทอง +เป็นจริงเป็นจัง +เป็นใจ +เป็นชิ้นเป็นอัน +เป็นชู้ +เป็นดั้งหน้า +เป็นแดน +เป็นใด +เป็นได้ +เป็นต้น +เป็นต่อ +เป็นตัวเป็นตน +เป็นตุเป็นตะ +เป็นน้ำ +เป็นน้ำเป็นนวล +เป็นน้ำยาเย็น +เป็นนิตย์ +เป็นเนื้อเป็นตัว +เป็นเนื้อเป็นหนัง +เป็นบ้า +เป็นบ้าเป็นหลัง +เป็นปากเสียง +เป็นปี่เป็นขลุ่ย +เป็นผู้เป็นคน +เป็นฝั่งเป็นฝา +เป็นฟืนเป็นไฟ +เป็นไฟ +เป็นมั่นเป็นเหมาะ +เป็นรอง +เป็นไร +เป็นลมๆ +เป็นล่ำเป็นสัน +เป็นโล้เป็นพาย +เป็นวรรคเป็นเวร +เป็นหน้าเป็นตา +เป็นหุ่นให้เชิด +เป็นหูเป็นตา +เป็นอัน +เป็นอันขาด +เป็นอันมาก +เป็นเอง +เปยยาล +เปร +เปร็ง +เปรต +เปรต- +เปรตวิษัย +เปรตวิสัย +เปรม +เปรมปรา +เปรย +เปรยๆ +เปรยปราย +เปรอ +เปรอะ +เปรา +เปราะ +เปราะแประ +เปราะหอม +เปรียง +เปรี้ยง +เปรียญ +เปรียบ +เปรียบเทียบ +เปรียบปราย +เปรียบเปรย +เปรี่ยม +เปรียว +เปรี้ยว +เปรี้ยวปาก +เปรี้ยวหวาน +เปรียะ +เปรี๊ยะ +เปรื่อง +เปรื่องปราด +เปรื้อย +เปล +เปล่ง +เปลญวน +เปลว +เปลา +เปล่า +เปล้า +เปล้าขลิบทอง +เปล่าดาย +เปลาะ +เปลี้ย +เปลี่ยน +เปลี่ยนใจ +เปลี่ยนตัว +เปลี่ยนแปลง +เปลี่ยนแผ่นดิน +เปลี่ยนมือ +เปลี่ยนมือไม่ได้ +เปลี่ยนหน้า +เปลี่ยม +เปลี่ยว +เปลี่ยวดำ +เปลือก +เปลือกกระเทียม +เปลือกตา +เปลือกโลก +เปลือง +เปลื้อง +เปลื้องเครื่องสุกำศพ +เปลืองใจ +เปลือย +เปลือยกาย +เปศ +เปศล +เปศลมัธย์ +เปศัส +เปศัส- +เปศัสการิน +เปศัสการี +เปสการ +เปสล +เปสุญ +เปสุญ- +เปสุญวาท +เปสุไณย +เป๋อ +เป้อเย้อ +เปอร์เซ็นต์ +เป๋อเหลอ +เปะ +เปะปะ +เปา +เป่า +เป้า +เป๊า +เป๋า +เป่ากบ +เป่าแตร +เป้าประสงค์ +เป่าปี่ +เป่าฝุ่น +เป่าแล่น +เป้าหมาย +เป่าหลอด +เป่าหู +เป๋าฮื้อ +เปาะ +เปาะเปี๊ยะ +เปาะแปะ +เปาะเหลาะ +เปิก +เปิง +เปิงๆ +เปิงมาง +เปิด +เปิดกล้อง +เปิดคดี +เปิดฉาก +เปิดบัญชี +เปิดเปิง +เปิดโปง +เปิดเผย +เปิดโลก +เปิดหมวกลา +เปิดหมวกให้ +เปิดหูเปิดตา +เปิดอก +เปิ่น +เปิบ +เปิ๊บ +เปิบข้าว +เปีย +เปียก +เปี๊ยก +เปี่ยม +เปียว +เปี้ยว +เปียะ +เปี๊ยะ +เปือก +เปือกตม +เปื้อน +เปื่อย +แป +แป้ง +แป๋ง +แป้งข้าวสาลี +แป้งข้าวหมาก +แป้งแข็ง +แป้งจี่ +แป้งแช่ +แป้งญวน +แป้งนวล +แป้งฝุ่น +แป้งมัน +แป้งมี่ +แป้งร่ำ +แป้งสด +แป้งสารภี +แป้งสาลี +แป้งสิงคโปร์ +แป้งหมี่ +แป้งเหล้า +แปด +แป๊ด +แปดบท +แปดปน +แปดเปื้อน +แปดสาแหรก +แปดเหลี่ยมแปดคม +แปดเหลี่ยมสิบสองคม +แปทู +แป้น +แปบ +แป๊บ +แปม +แปร +แปร๋ +แปรก +แปรขบวน +แปรไข้ +แปรง +แปร่ง +แปรงล้างขวด +แปรงหูหนู +แปรญัตติ +แปร๊ด +แปรธาตุ +แปร้น +แปร้นแปร๋ +แปรปรวน +แปรปากหลากคำ +แปร๋แปร้น +แปรผัน +แปรผันโดยตรง +แปรผันแบบผกผัน +แปรพักตร์ +แปรรูป +แปรอักษร +แประ +แปล +แปล้ +แปลก +แปลกปลอม +แปลง +แปลงชาติ +แปลงผี +แปลงสัญชาติ +แปลตามเนื้อความ +แปลตามพยัญชนะ +แปลตามอรรถ +แปลน +แปลบ +แปลยกศัพท์ +แปลร้อย +แป้ว +แป๊ว +แปะ +แป๊ะ +แป๊ะซะ +โป +โป่ +โป้ +โป๊ +โปก +โป๊ก +โป๊กเกอร์ +โปกขร- +โปกขรณี +โปกขรพรรษ +โปกำ +โปเก +โปง +โป่ง +โป้ง +โป่งข่าม +โป่งดิน +โป่งน้ำ +โป้งเป้ง +โป้งโย้ง +โปงลาง +โป้งโล้ง +โป่งวิด +โป้งโหยง +โปฐบท +โปฐปทมาส +โปดก +โปตถกะ +โปน +โป้ปด +โป๊ยเซียน +โปรง +โปร่ง +โปร่งเปร่ง +โปร่งฟ้า +โปร่งแสง +โปร่งใส +โปรด +โปรดปราน +โปรดสัตว์ +โปรดสัตว์ได้บาป +โปรตอน +โปรตีน +โปรเตสแตนต์ +โปรย +โปรยปราย +โปรีสภา +โปล่ง +โปลิโอ +โปส +โปสก +โปสาวนิกมูล +โปะ +โป๊ะ +โป๊ะจ้าย +ไป +ไป่ +ไป๋ +ไปค้าถ่าน +ไปตายเอาดาบหน้า +ไปทุ่ง +ไปๆ มาๆ +ไปย- +ไปยาล +ไปรษณีย- +ไปรษณีย์ +ไปรษณียนิเทศ +ไปรษณียบรรณ +ไปรษณียบัตร +ไปรษณียภัณฑ์ +ไปรษณีย์รับรอง +ไปรษณียวัตถุ +ไปรษณียากร +ไปล่ +ไปล่ปลิว +ไปลาด +ไปวัดไปวาได้ +ไปศาจ +ไปไหนมาสามวาสองศอก +ไปอย่างน้ำขุ่นๆ +ผ +ผก +ผกผงก +ผกผัน +ผกเรือก +ผกา +ผกากรอง +ผกาย +ผการาย +ผคม +ผง +ผงก +ผงขาว +ผงเข้าตาตัวเอง +ผงคลี +ผงชูรส +ผงซักฟอก +ผงฟู +ผงม +ผงร +ผงอน +ผงอบ +ผงะ +ผงาด +ผง่าน +ผจง +ผจญ +ผจัญ +ผจาน +ผชุม +ผณิน +ผณินทร +ผณินทรสมพัตสร +ผณิศวร +ผด +ผดุง +ผดุงครรภ์ +ผเดิน +ผทม +ผทมเพลิง +ผนวก +ผนวช +ผนัง +ผนิด +ผนึก +ผม +ผมชิงเกิล +ผมทรงมหาดไทย +ผมทัด +ผมนาง +ผมบ๊อบ +ผมปีก +ผมเป๋ +ผมเปีย +ผมโป่ง +ผมไฟ +ผมมหาดไทย +ผมม้า +ผมหลักแจว +ผยอง +ผย่ำเผยอ +ผรณ- +ผรณาปีติ +ผรสุ +ผริต +ผริต- +ผรุพก +ผรุส- +ผรุสวาท +ผล +ผลก +ผลคุน +ผลคุนี +ผลคุนีบูรพมาส +ผลง +ผลพลอยได้ +ผลลัพธ์ +ผลอ +ผล็อง +ผล็อย +ผละ +ผลัก +ผลัด +ผลัดเปลี่ยน +ผลัดแผ่นดิน +ผลับ +ผลัวะ +ผลา +ผลาญ +ผลานิสงส์ +ผลาผล +ผลาหาร +ผลิ +ผลิก- +ผลิกศิขรี +ผลิกศิลา +ผลิกะ +ผลิต +ผลิต- +ผลิตกรรม +ผลิตผล +ผลิตภัณฑ์ +ผลิน +ผลี +ผลีผลาม +ผลึก +ผลึ่ง +ผลือ +ผลุ +ผลุง +ผลุด +ผลุน +ผลุนผลัน +ผลุบ +ผลุบผลับ +ผลุบโผล่ +ผลุบๆ โผล่ๆ +ผลุย +ผลู +ผลูบด +ผลูแบก +ผวน +ผวย +ผวา +ผสม +ผสมเทียม +ผสมผสาน +ผสมผเส +ผสมพันธุ์ +ผสมโรง +ผสมเสร็จ +ผสาน +ผสาย +ผสาร +ผอก +ผอง +ผ่อง +ผ่องแผ้ว +ผ่องใส +ผอด +ผ่อน +ผ่อนคลาย +ผ่อนชำระ +ผ่อนปรน +ผ่อนผัน +ผ่อนส่ง +ผ่อนสั้นผ่อนยาว +ผ่อนหนักเป็นเบา +ผอบ +ผอม +ผอมเกร็ง +ผอมโซ +ผอมแห้ง +ผ็อย +ผ่อย +ผอวด +ผอูน +ผะ +ผะแคง +ผะดา +ผะสา +ผะออบ +ผัก +ผักไก +ผักขวง +ผักขี้ขวง +ผักโฉม +ผักชี +ผักชีโรยหน้า +ผักตบชวา +ผักต้มขนมยำ +ผักทอดยอด +ผักบุ้ง +ผักบุ้งขัน +ผักบุ้งจีน +ผักบุ้งทะเล +ผักบุ้งฝรั่ง +ผักบุ้งร้วม +ผักบุ้งรั้ว +ผักเบี้ย +ผักเบี้ยใหญ่ +ผักปลัง +ผักปุ่มปลา +ผักเผ็ด +ผักไผ่ +ผักรู้นอน +ผักแว่น +ผักสาบ +ผักสามหาว +ผักเสี้ยน +ผักหนอก +ผักหนอง +ผักหนาม +ผักหวาน +ผักหวานบ้าน +ผักหวานป่า +ผักไหม +ผักอีแปะ +ผัคคุณ +ผัคคุณ- +ผัคคุณมาส +ผัคคุณี +ผัง +ผังเมือง +ผัด +ผัดเจ้าล่อ +ผัดช้าง +ผัดผ่อน +ผัดผัน +ผัดเพี้ยน +ผัดวันประกันพรุ่ง +ผัน +ผันแปร +ผันผยอง +ผันผวน +ผันผ่อน +ผันผาด +ผันผาย +ผันหม้อ +ผันอักษร +ผับ +ผับๆ +ผัลคุนี +ผัว +ผัวหาบเมียคอน +ผัวะ +ผัสส- +ผัสสะ +ผัสสาหาร +ผา +ผ่า +ผ้า +ผาก +ผากแผ้ง +ผ้ากราบ +ผ้าเกี้ยว +ผ้าขาวม้า +ผ้าขี้ริ้ว +ผ้าขี้ริ้วห่อทอง +ผาง +ผ้าเช็ดตัว +ผ้าเช็ดหน้า +ผาณิต +ผาด +ผาดผัง +ผาดแผลง +ผาดโผน +ผาดเพ่ง +ผาดำ +ผ้าดำ +ผ้าดิบ +ผ้าแดง +ผ้าตา +ผาติ +ผาติกรรม +ผ้าถุง +ผ้าแถบ +ผ้าทิพย์ +ผ้าเทศ +ผ่าน +ผ้านุ่ง +ผ้าใบ +ผ้าใบกลอย +ผ้าใบเมี่ยง +ผ้าป่า +ผ้าผ่อน +ผ่าเผย +ผาเผือก +ผ้าแฝง +ผ้าพันคอ +ผ้าพันแผล +ผ้าพื้น +ผาม +ผ้ามัดหมี่ +ผาย +ผ่าย +ผ้าย +ผายปอด +ผ่ายผอม +ผายผัง +ผายผัน +ผายลม +ผ้ายาง +ผาล +ผาลคุน +ผาลา +ผาลาเพียงไหล่ +ผ้าลาย +ผ้าลูกไม้ +ผ่าว +ผาสามเส้า +ผ้าสำลี +ผาสุก +ผ่าหมาก +ผาหอม +ผ้าห้อยหอ +ผ่าเหล่า +ผ้าเหลือง +ผ้าเหลืองร้อน +ผ้าไหว้ +ผ้าอนามัย +ผ้าอ้อม +ผ้าอาบ +ผ้าฮาด +ผำ +ผ้ำๆ +ผิ +ผิง +ผิด +ผิดก +ผิดใจ +ผิดตา +ผิดท่า +ผิดนัก +ผิดนัด +ผิดน้ำ +ผิดประหลาด +ผิดผี +ผิดผู้ผิดคน +ผิดแผก +ผิดฝาผิดตัว +ผิดพ้องหมองใจ +ผิดเพี้ยน +ผิดเมีย +ผิดรูปผิดร่าง +ผิดสังเกต +ผิดสำแลง +ผิดเส้น +ผิดหวัง +ผิดหู +ผิดหูผิดตา +ผิต +ผิน +ผินหลังให้ +ผิว +ผิวน้ำ +ผิวบาง +ผิวปาก +ผิวเผิน +ผิวพรรณ +ผิวหนัง +ผิว่า +ผี +ผีเข้าผีออก +ผีซ้ำด้ำพลอย +ผีดิบ +ผีต +ผีตองเหลือง +ผีตาà¸à¸œà¹‰à¸²à¸­à¹‰à¸­à¸¡ +ผีถ้วยแก้ว +ผีถึงป่าช้า +ผีบ้านไม่ดี ผีป่าก็พลอย +ผีบุญ +ผีพุ่งไต้ +ผีเพลีย +ผีฟ้า +ผีไม่มีศาล +ผีเรือน +ผีเรือนไม่ดี ผีป่าก็พลอย +ผี้ว์ +ผีเสื้อ +ผีเสื้อเงิน +ผีเสื้อน้อย +ผีเสื้อน้ำ +ผีเสื้อยักษ์ +ผีหลอก +ผีอำ +ผึง +ผึ่ง +ผึ้ง +ผึ่งผาย +ผึ้งรวง +ผืน +ผื่น +ผุ +ผุด +ผุดผ่อง +ผุดผาด +ผุดผาย +ผุดผ้าย +ผุดลุกผุดนั่ง +ผุยผง +ผุสราคา +ผู้ +ผูก +ผูกกระได +ผูกขวัญ +ผูกขาด +ผูกดวง +ผูกดอก +ผูกพัทธสีมา +ผูกพัน +ผูกภาษี +ผูกมัด +ผู้กว้างขวาง +ผูกหู +ผู้ก่อการร้าย +ผู้คน +ผู้จัดการ +ผู้ชาย +ผู้ชายพายเรือ +ผู้ชำนาญการพิเศษ +ผู้เชี่ยวชาญ +ผู้ญาณ +ผู้ดี +ผู้ดีแปดสาแหรก +ผู้โดยสาร +ผู้ต้องขัง +ผู้ต้องหา +ผู้ทรง +ผู้แทนเฉพาะคดี +ผู้แทนโดยชอบธรรม +ผู้แทนราษฎร +ผู้ไทย +ผู้น้อย +ผู้เป็นหุ้นส่วน +ผู้พิทักษ์สันติราษฎร์ +ผู้เยาว์ +ผู้รั้ง +ผู้รับประกันภัย +ผู้รับประโยชน์ +ผู้รับเรือน +ผู้รับเหมาก่อสร้าง +ผู้ร้าย +ผู้ลากมากดี +ผู้วิเศษ +ผู้สำเร็จ +ผู้สืบตระกูล +ผู้สืบสันดาน +ผู้สื่อข่าว +ผู้เสียหาย +ผู้หญิง +ผู้หญิงยิงเรือ +ผู้ใหญ่ +ผู้ใหญ่บ้าน +ผู้อนุบาล +ผู้เอาประกันภัย +เผ +เผง +เผชิญ +เผชิญภัย +เผชิญหน้า +เผ็ด +เผด็จ +เผด็จการ +เผ็ดร้อน +เผดิม +เผดียง +เผน- +เผ่น +เผนธรรม +เผนิก +เผย +เผยแผ่ +เผยแพร่ +เผยอ +เผยิบ +เผยิบผยาบ +เผล +เผล่ +เผล้ +เผล็ด +เผลอ +เผลอไผล +เผละ +เผลาะ +เผลาะแผละ +เผลียง +เผอเรอ +เผอเรอกระเชอก้นรั่ว +เผอิญ +เผอิล +เผะ +เผา +เผ่า +เผ้า +เผาขน +เผาจริง +เผ้าผง +เผ่าพันธุ์ +เผาหลอก +เผาหัว +เผาะ +เผิ้ง +เผิน +เผินๆ +เผียน +เผือ +เผื่อ +เผือก +เผือกกะลา +เผือกโทป้าด +เผื่อขาดเผื่อเหลือ +เผือด +เผือน +เผื่อน +เผื่อแผ่ +เผื่อว่า +เผื่อเหนียว +เผื่อเหลือเผื่อขาด +แผ่ +แผก +แผ่กระจาด +แผง +แผงคอ +แผงลอย +แผ่แง่ +แผ่ซ่าน +แผด +แผ่ตน +แผน +แผ่น +แผนก +แผนการ +แผนงาน +แผ่นดิน +แผ่นดินกลบหน้า +แผ่นดินไหว +แผนที่ +แผ่นผงอน +แผนผัง +แผ่นพก +แผ่นภพ +แผนภาพ +แผนภูมิ +แผ่นเสียง +แผ่เผื่อ +แผ่เมตตา +แผล +แผลเก่า +แผลง +แผลงฤทธิ์ +แผล็บ +แผล็บๆ +แผลเป็น +แผลริมแข็ง +แผลริมอ่อน +แผล็ว +แผละ +แผ่ว +แผ่วๆ +แผ้ว +แผ้วพาน +แผ่สองสลึง +แผ่หลา +แผ่อำนาจ +โผ +โผง +โผงผาง +โผงเผง +โผฏฐัพ- +โผฏฐัพธรรม +โผฏฐัพพะ +โผน +โผเผ +โผย +โผล่ +โผลกเผลก +โผละ +โผอน +โผะ +ไผ +ไผ่ +ไผท +ไผทโกรม +ไผ่ผัง +ฝ +ฝน +ฝนชะช่อมะม่วง +ฝนชะลาน +ฝนซู่ +ฝนตกก็แช่ง ฝนแล้งก็ด่า +ฝนตกขี้หมูไหล +ฝนตกไม่ทั่วฟ้า +ฝนตกไม่มีเค้า +ฝนตกอย่าเชื่อดาว +ฝนทอง +ฝนทั่งให้เป็นเข็ม +ฝนเทียม +ฝนไล่ช้าง +ฝนสั่งฟ้า +ฝนสั่งฟ้า ปลาสั่งหนอง +ฝนแสนห่า +ฝนห่าแก้ว +ฝรั่ง +ฝรั่งกังไส +ฝรั่งขี้นก +ฝรั่งมังค่า +ฝรั่งเศส +ฝ่อ +ฝอย +ฝอยทอง +ฝัก +ฝักแค +ฝักถั่ว +ฝักบัว +ฝักฝ่าย +ฝักใฝ่ +ฝักพร้า +ฝักเพกา +ฝักมะขาม +ฝักยาว +ฝัง +ฝั่ง +ฝังเข็ม +ฝังใจ +ฝั่งฝา +ฝังรกฝังราก +ฝังรอย +ฝังรูป +ฝังหัว +ฝัด +ฝัน +ฝันกลางวัน +ฝันเปียก +ฝันเฟื่อง +ฝา +ฝ่า +ฝ้า +ฝาก +ฝากกอง +ฝากกาย +ฝากไข้ +ฝากครรภ์ +ฝากตัว +ฝากท้อง +ฝากเนื้อฝากตัว +ฝากเนื้อไว้กับเสือ +ฝากบำเรอ +ฝากประจำ +ฝากปลาไว้กับแมว +ฝากผี +ฝากผีฝากไข้ +ฝากเผื่อเรียก +ฝากฝัง +ฝากระดาน +ฝากโรงเรียน +ฝากไว้ก่อน +ฝากสู่ +ฝ่าคมหอกคมดาบ +ฝาง +ฝาชี +ฝาด +ฝาน +ฝ่าฝืน +ฝาแฝด +ฝ่าพระบาท +ฝ่าฟัน +ฝ่ามรสุม +ฝาย +ฝ่าย +ฝ้าย +ฝ่ายขวา +ฝ่ายค้าน +ฝ้ายคำ +ฝ่ายซ้าย +ฝ่ายใน +ฝ่ายเป็นกลาง +ฝ้ายผี +ฝ่ายเสนอ +ฝ่ายหน้า +ฝาละมี +ฝาสายบัว +ฝาสำหรวด +ฝาเสี้ยว +ฝาหอยโข่ง +ฝาหุ้มกลอง +ฝาไหล +ฝิ่น +ฝิ่นต้น +ฝี +ฝี่ +ฝีก +ฝีกาฬ +ฝีจัก +ฝีจักร +ฝีดาษ +ฝีดิบ +ฝีเท้า +ฝีในท้อง +ฝีปาก +ฝีพาย +ฝีมะม่วง +ฝีมือ +ฝีไม้ลายมือ +ฝีเย็บ +ฝีหมอบ +ฝึก +ฝึกงาน +ฝึกปรือ +ฝึกฝน +ฝึกสอน +ฝึกหัด +ฝืด +ฝืดเคือง +ฝืน +ฝืนท้อง +ฝุ่น +ฝุ่นเมือง +ฝูง +ฝูงบิน +เฝ้า +เฝ้าไข้ +เฝ้าคอย +เฝ้าแหน +เฝือ +เฝือก +เฝือง +เฝื่อน +แฝก +แฝกหอม +แฝง +แฝด +แฝดน้ำ +แฝดเลือด +ใฝ่ +ใฝ่ใจ +ใฝ่ต่ำ +ใฝ่ฝัน +ใฝ่ร้อนจะนอนเย็น ใฝ่เย็นจะดิ้นตาย +ใฝ่สูง +ใฝ่สูงจนเกินศักดิ์ +ใฝ่สูงให้เกินศักดิ์ +ไฝ +พ +พก +พกจร +พกนุ่น +พกพ่าย +พกลม +พกหิน +พกา +พกุระ +พกุล +พง +พงพี +พงศ- +พงศ์ +พงศกร +พงศธร +พงศ์พันธุ์ +พงศา +พงศาวดาร +พงศาวลี +พจน- +พจน์ +พจนา +พจนานุกรม +พจนารถ +พจนีย์ +พจมาน +พจี +พชระ +พญา +พญากาสัก +พญาขามป้อม +พญาฉัททันต์ +พญาช้างเผือก +พญาณ +พญาดาบหัก +พญาเดิน +พญาไทย +พญาปากกว้าง +พญาแปแล +พญาพยาต +พญาไฟ +พญามะขามป้อม +พญามือเหล็ก +พญามุตติ +พญามูมิน +พญาไม้ +พญายา +พญารากดำ +พญารากเดียว +พญาไร้ใบ +พญาลอ +พญาโศก +พญาสัตบรรณ +ฯพณฯ +พณิช +พณิชย์ +พด +พดกริช +พดด้วง +พธู +พน +พน- +พ่น +พ้น +พนขัณฑ์ +พนโคจร +พนจร +พนจรก +พนชีวี +พนธารา +พนม +พนมเพลิง +พนมศก +พนมศพ +พนมสวรรค์ +พนวาสี +พ้นวิสัย +พนสณฑ์ +พนอง +พนอม +พนัก +พนักงาน +พนักงานเจ้าหน้าที่ +พนักงานสอบสวน +พนักงานอัยการ +พนัง +พนัน +พนันดร +พนัส +พนัส- +พนัสดม +พนัสบดี +พนา +พนาด +พนาดร +พนาดอน +พนาธวา +พนานดร +พนาย +พนาราม +พนาลัย +พนาลี +พนาวา +พนาวาส +พนาเวศ +พนาศรม +พนาศรัย +พนาสณฑ์ +พนาสัณฑ์ +พนิดา +พนิต +พนียก +พเนก +พเนจร +พบ +พบปะ +พบพาน +พบไม้งามเมื่อขวานบิ่น +พบู +พม่า +พม่าแทงกบ +พม่ารำขวาน +พยช +พยชน์ +พยติเรก +พยนต์ +พยศ +พยัก +พยักพเยิด +พยักยิ้ม +พยัคฆ- +พยัคฆ์ +พยัคฆา +พยัคฆิน +พยัคฆินทร์ +พยัคฆี +พยัคเฆนทร์ +พยัชน์ +พยัญชนะ +พยัต +พยับ +พยับแดด +พยับฝน +พยับเมฆ +พยับหมอก +พยากรณ์ +พยาฆร์ +พยางค์ +พยาธิ +พยาน +พยาบาท +พยาบาล +พยาม +พยายาม +พยาล +พยาล- +พยาลมฤค +พยุ +พยุง +พยุงปีก +พยุห- +พยุหบาตร +พยุหบาตรา +พยุหยาตรา +พยุหโยธา +พยุหร +พยุหเสนา +พยุหแสนยา +พยุหแสนยากร +พยุหะ +พยู่ห์ +พเยีย +พร +พรต +พรม +พรมคด +พรมคดตีนเต่า +พรมแดน +พรมน้ำมัน +พรมนิ้ว +พรมมิ +พรรค +พรรค- +พรรค์ +พรรคกลิน +พรรคการเมือง +พรรคนาวิกโยธิน +พรรคนาวิน +พรรคพวก +พรรคานต์ +พรรณ +พรรณนา +พรรณราย +พรรดึก +พรรลาย +พรรษ +พรรษ- +พรรษประเวศ +พรรษฤดู +พรรษวุฒิ +พรรษา +พรรษากาล +พรรษาคม +พรรษายุต +พรรโษทก +พรรโษบล +พรรเหา +พรรเอิญ +พรวงเพรียง +พรวด +พรวดพราด +พรวน +พรสวรรค์ +พรหม +พรหม- +พรหมกาย +พรหมโคล +พรหมจรรย์ +พรหมจักร +พรหมจาริณี +พรหมจารี +พรหมชาติ +พรหมทัณฑ์ +พรหมไทย +พรหมธาดา +พรหมบถ +พรหมบท +พรหมบริษัท +พรหมบุตร +พรหมปุโรหิต +พรหมพักตร์ +พรหมพันธุ์ +พรหมภูติ +พรหมยาน +พรหมเรขา +พรหมฤษี +พรหมลิขิต +พรหมวิหาร +พรหมศร +พรหมสี่หน้า +พรหมสูตร +พรหมหัวเหม็น +พรหมโองการ +พรหมัญตา +พรหมา +พรหมาณฑ์ +พรหมาสตร์ +พรหมินทร์ +พรหเมนทร์ +พรหเมศวร +พรอก +พร่อง +พร้อง +พร้องเพรียก +พรอด +พร้อม +พร่อมพร้อ +พร้อมพรัก +พร้อมพรั่ง +พร้อมเพรียง +พร้อมมูล +พร้อมหน้า +พร้อมหน้าพร้อมตา +พร่อย +พร้อย +พระ +พระกรน้อย +พระครู +พระคุณเจ้า +พระเคราะห์ +พระเครื่อง +พระจันทร์ครึ่งซีก +พระเจ้า +พระเจ้าลอยถาด +พระเจ้าหลวง +พระเจ้าห้าพระองค์ +พระเจ้าอยู่หัว +พระเดชพระคุณ +พระทอง +พระทัย +พระธรรมศาสตร์ +พระนม +พระนอม +พระนาง +พระนางเจ้า +พระนางเธอ +พระนาด +พระนาย +พระบฏ +พระบท +พระประธาน +พระเป็นเจ้า +พระผู้เป็นเจ้า +พระแผง +พระพิมพ์ +พระพุทธเจ้า +พระพุทธเจ้าข้า +พระพุทธเจ้าข้าขอรับ +พระพุทธเจ้าข้าขอรับใส่เกล้าใส่กระหม่อม +พระพุทธเจ้าหลวง +พระพุทธเจ้าอยู่หัว +พระพุทธองค์ +พระภูมิ +พระมาลัยมาโปรด +พระยา +พระยาเทครัว +พระยาเล็บครุฑ +พระยาวัน +พระรอง +พระราชกฤษฎีกา +พระราชกำหนด +พระราชบัญญัติ +พระรูป +พระรูปชี +พระฤๅษี +พระลบ +พระลือ +พระแวว +พระศุกร์เข้าพระเสาร์แทรก +พระหา +พระหาม +พระหารณย์ +พระหารัณย์ +พระหิด +พระองค์ +พระองค์เจ้า +พระอันดับ +พระอิฐพระปูน +พระเอก +พระฮาม +พรักพร้อม +พรั่ง +พรั่งพร้อม +พรั่งพรู +พรัด +พรั่น +พรั่นพรึง +พรับ +พร่า +พร้า +พราก +พรากเด็ก +พรากผู้เยาว์ +พรากลูกนกลูกกา +พราง +พร่าง +พรางพรอก +พร้างัดปากไม่ออก +พราด +พราน +พราย +พรายทะเล +พรายน้ำ +พรายแพรว +พรายย้ำ +พราว +พราวแพรว +พราหมณ์ +พราหมณ์เก็บหัวแหวน +พราหมณ์ขายเมีย +พราหมณ์ดีดน้ำเต้า +พราหมณัศบดี +พราหมณี +พราหมี +พรำ +พรำๆ +พร่ำ +พร้ำ +พร่ำพลอด +พร่ำเพรื่อ +พร่ำเพ้อ +พริก +พริกกระต่าย +พริกกะเกลือ +พริกแกว +พริกขิง +พริกดอง +พริกเทศ +พริกไทย +พริกน้ำส้ม +พริกหอม +พริกเหลือง +พริ้ง +พริ้งพราย +พริ้งเพริศ +พริบ +พริบตาเดียว +พริบไหว +พริ้ม +พริ้มพราย +พริ้มเพรา +พรึง +พรึน +พรึบ +พรืด +พรุ +พรุก +พรุ่ง +พรุ่งนี้ +พรุน +พรู +พรูด +พฤกษ- +พฤกษ์ +พฤกษชาติ +พฤกษทล +พฤกษเทวดา +พฤกษราช +พฤกษศาสตร์ +พฤกษา +พฤฒ +พฤฒา +พฤฒาจารย์ +พฤฒิ +พฤฒิ- +พฤฒิบาศ +พฤต +พฤติ +พฤติ- +พฤติกรรม +พฤติการณ์ +พฤตินัย +พฤทธ์ +พฤทธิ์ +พฤนต์ +พฤนท์ +พฤภูษณ +พฤภูษิต +พฤศจิก +พฤศจิกายน +พฤษภ +พฤษภาคม +พฤหัสบดี +พฤหัสบดีจักร +พล +พล- +พลกาย +พลการ +พลขันธ์ +พลความ +พลตระเวน +พลเทพ +พลบ +พลเมือง +พลเรือน +พลโลก +พลว- +พลวก +พลวง +พลวดกินลูก +พลวดใหญ่ +พลวัต +พลศาสตร์ +พลศึกษา +พลสิงห์ +พลอ +พล้อ +พลอง +พลอด +พลอดรัก +พลอน +พลอมแพลม +พลอย +พล่อย +พลอยฟ้าพลอยฝน +พละ +พละพลา +พลั่ก +พลัง +พลั่ง +พลั้ง +พลังงาน +พลังงานจลน์ +พลังงานศักย์ +พลังจิต +พลั้งปาก +พลั้งปากเสียศีล พลั้งตีนตกต้นไม้ +พลั้งเผลอ +พลัด +พลัดถิ่น +พลัดที่นาคาที่อยู่ +พลัดพราก +พลัน +พลับ +พลับเขา +พลับพลา +พลับพลึง +พลั่ว +พล่า +พลากร +พลาง +พลาญ +พลาด +พลาดท่า +พลาดิศัย +พลาธิการ +พล่าน +พลานามัย +พลานึก +พลาม +พล่าม +พลาย +พลายม้า +พลาสติก +พลาสมา +พลาหก +พลำ +พล้ำ +พลำภัง +พลิ +พลิก +พลิกกระเป๋า +พลิกแผ่นดิน +พลิกแพลง +พลิกศพ +พลิกหน้ามือเป็นหลังมือ +พลิพัท +พลิ้ว +พลี +พลีกรรม +พลีมุข +พลุ +พลุก +พลุ่ก +พลุกพล่าน +พลุ่ง +พลุ้น +พลุ่มพล่าม +พลุ่ย +พลุ้ย +พลู +พลูแก +พลูคาว +พลูต้น +พลูโต +พลูโทเนียม +พวก +พวกพ้อง +พวง +พ่วง +พวงโกเมน +พวงคราม +พวงชมพู +พวงดอกไม้ +พ่วงพี +พวงมาลัย +พวงมาลา +พวงแสด +พวงหยก +พวงหรีด +พวงอุไร +พวน +พวย +พวยน้ำ +พวยพุ่ง +พสก +พสก- +พสกนิกร +พสน +พสุ +พสุธา +พสุธาดล +พสุนธรา +พสุมดี +พสุสงกรานต์ +พหล +พหุ +พหุคูณ +พหุพจน์ +พหุภาคี +พหุล +พหู +พหูพจน์ +พหูสูต +พอ +พ่อ +พ้อ +พอก +พอกพูน +พอกัน +พอกันที +พอการ +พอก้าวขาก็ลาโรง +พ่อเกลอ +พ่อขุน +พ่อครัว +พอควร +พ่อค้าตีเมีย +พ่อคุณ +พอง +พ้อง +พ้องพาน +พ่อเจ้า +พ่อแจ้แม่อู +พอใจ +พอใช้ +พอใช้ได้ +พอดี +พอดีพอร้าย +พอดู +พอดูได้ +พอได้ +พอตัว +พ่อตา +พอทำเนา +พอทำพอกิน +พอที +พอที่ +พอน +พอนเรือ +พ่อบ้าน +พอประมาณ +พอไปได้ +พ่อพวงมาลัย +พอฟัด +พอฟัดพอเหวี่ยง +พ้อม +พ่อม่าย +พอมีพอกิน +พอมีอันจะกิน +พ่อเมือง +พอยกขาก็ลาโรง +พอแย้มปากก็เห็นไรฟัน +พ่อร้าง +พ่อเรือน +พอแรง +พ่อลิ้นทอง +พ่อเลี้ยง +พอเลี้ยงปากเลี้ยงท้อง +พอโลเนียม +พอสถานประมาณ +พ่อสื่อ +พอหอมปากหอมคอ +พอเหมาะ +พออ้าปากก็เห็นลิ้นไก่ +พะ +พ่ะ +พะงา +พะงาบ +พะงาบๆ +พะจง +พะทำมะรง +พะนอ +พะเน้าพะนอ +พะเน้าพะนึง +พะเนิน +พะเนินเทินทึก +พะเนียง +พะแนง +พะพาน +พะพิง +พะเพิง +พะยอม +พ่ะย่ะค่ะ +พะยุพยุง +พะยูง +พะยูน +พะเยิบ +พะเยิบๆ +พะเยิบพะยาบ +พะรุงพะรัง +พะเลย +พะโล้ +พะไล +พะวง +พะวักพะวน +พะวา +พะว้าพะวัง +พะอง +พะอากพะอำ +พะอืดพะอม +พัก +พักตร- +พักตร์ +พักตรา +พักตรากฤติ +พักตา +พักผ่อน +พักพิง +พักแพว +พักฟื้น +พักร +พักสมอง +พัง +พังกา +พังคา +พังงา +พังผืด +พังพวย +พังพอน +พังพาน +พังพาบ +พังเพย +พัช +พัชนี +พัชร +พัญจก +พัญจน์ +พัฒกี +พัฒน- +พัฒนะ +พัฒนา +พัฒนากร +พัฒนาการ +พัด +พัดชัก +พัดชา +พัดดึงส์ +พัดโบก +พัดแพว +พัดยศ +พัดลม +พัดหลวง +พัตติงสะ +พัตร +พัทธ- +พัทธ์ +พัทธยา +พัทธยากร +พัทธสีมา +พัทร +พัน +พันงู +พันจ่า +พันจำ +พันไฉน +พันซาด +พันตัน +พันตา +พันตู +พันทาง +พันธ- +พันธ์ +พันธกรณี +พันธน- +พันธนะ +พันธนาการ +พันธนาคาร +พันธนำ +พันธบัตร +พันธมิตร +พันธะ +พันธุ +พันธุ์ +พันเนตร +พันปี +พันพัว +พันลอก +พันลาย +พันลำ +พันลึก +-พันลือ +พันเลิศ +พันวรรษา +พันแสง +พันเอิญ +พับ +พับเขียง +พับฐาน +พับผ้า +พับเพียบ +พับแพนงเชิง +พัลลภ +พัลวัน +พัว +พัวพัน +พัวะ +พัศดี +พัสดุ +พัสดุไปรษณีย์ +พัสดุภัณฑ์ +พัสเดา +พัสตร์ +พัสถาน +พา +พาก +พากเพียร +พากย์ +พากย์หนัง +พาง +พ่าง +พาชี +พาซื่อ +พาณ +พาณ- +พาณโยชน์ +พาณวาร +พาณาสน์ +พาณิช +พาณิชย์ +พาณินี +พาณี +พาด +พาดควาย +พาดไฉน +พาดพิง +พาดหัวข่าว +พาต +พาท +พาทย์ +พาธ +พาธา +พาน +พ่าน +พานกลีบบัว +พานปากกระจับ +พานร +พานรินทร์ +พานเรศ +พานแว่นฟ้า +พาม +พาย +พ่าย +พายม้า +พายเรือคนละที +พายเรือทวนน้ำ +พายเรือในหนอง +พายเรือในอ่าง +พายัพ +พายุ +พาร์เซก +พารณ +พารณะ +พารา +พาราฟิน +พาล +พาลกระแชง +พาลรีพาลขวาง +พาลา +พาลี +พาลีหลายหน้า +พาลุก +พาโล +พาไล +พาส +พาสน์ +พาสนา +พาสุกรี +พาห +พ่าห์ +พาหนะ +พาหะ +พาหา +พาหิรกะ +พาหิระ +พาหุ +พาหุยุทธ์ +พาหุรัด +พาเหียร +พาฬ +พาฬ- +พาฬมฤค +พาฬหะ +พำ +พำนัก +พำพวก +พำพึม +พำๆ พึมๆ +พำลา +พิกล +พิกเลนทรีย์ +พิกสิต +พิกัด +พิกัดอัตราศุลกากร +พิกัติ +พิกัน +พิการ +พิกุล +พิกุลป่า +พิเคราะห์ +พิฆน์ +พิฆเนศ +พิฆเนศวร +พิฆาต +พิง +พิจย +พิจล +พิจัย +พิจาร +พิจารณ์ +พิจารณา +พิจิก +พิจิต +พิจิตร +พิชญ์ +พิชย +พิชัย +พิชัยสงคราม +พิชาน +พิชิต +พิชิต- +พิชิตมาร +พิเชฐ +พิเชียร +พิฑูรย์ +พิณ +พิณพาทย์ +พิดทูล +พิดรก +พิดาน +พิโดร +พิตร +พิถย- +พิถยันดร +พิถี +พิถีพิถัน +พิทย- +พิทย์ +พิทยา +พิทยาคม +พิทยาคาร +พิทยาธร +พิทยาพล +พิทยาลัย +พิทักษ์ +พิทักษ์สันติ +พิทูร +พิเทศ +พิธาน +พิธี +พิธีกร +พิธีกรรม +พิธีการ +พิธีจุ่ม +พิธีแตก +พิธีธรรม +พิธีมณฑล +พิธีรีตอง +พิธีสาร +พิธุ +พิธุร +พินทุ +พินทุกัป +พินทุสร +พินพง +พิ่นพั่ง +พินอบพิเทา +พินัย +พินัยกรรม +พินาศ +พินิจ +พินิต +พินิศ +พินิศจัย +พิเนต +พิบัติ +พิบาก +พิบุล +พิบูล +พิปริต +พิปลาส +พิปัสสนา +พิพรรธ +พิพรรธน์ +พิพักพิพ่วน +พิพัฒ +พิพัฒน์ +พิพากษ์ +พิพากษา +พิพาท +พิพิธ +พิพิธ- +พิพิธภัณฑ์ +พิพิธภัณฑสถาน +พิภพ +พิภัช +พิภาค +พิภูษณะ +พิเภก +พิมปะการัง +พิมพ- +พิมพ์ +พิมพการัง +พิมพ์เขียว +พิมพ์ใจ +พิมพ์ดีด +พิมพ์ทอง +พิมพ์ลายมือ +พิมพ์สัมผัส +พิมพา +พิมพาภรณ์ +พิมโพหนะ +พิมล +พิมเสน +พิมาน +พิมุข +พิโมกข์ +พิโมกษ์ +พิโยกพิเกน +พิโยค +พิร +พิรอด +พิรากล +พิราบ +พิราม +พิราลัย +พิริย- +พิริยพฤนท์ +พิริยโยธา +พิริยะ +พิรี้พิไร +พิรุณ +พิรุธ +พิรุฬห์ +พิเราะ +พิโรธ +พิโรธนะ +พิไร +พิลังกาสา +พิลาป +พิลาลส +พิลาส +พิลิปดา +พิลึก +พิลึกกึกกือ +พิลึกพิลั่น +พิโลน +พิโลล +พิไล +พิศ +พิศวง +พิศวาส +พิศาล +พิศุทธ์ +พิศุทธิ์ +พิเศษ +พิษ +พิษ- +พิษฐาน +พิษนาศน์ +พิษสง +พิษสมโยค +พิษสุนัขบ้า +พิษสุราเรื้อรัง +พิสดาร +พิสมร +พิสมัย +พิสมัยเรียงหมอน +พิสัง +พิสัช +พิสัญญี +พิสัย +พิสิฐ +พิสุทธิ์ +พิสูจน์ +พิหค +พิหเคนทร์ +พิหาร +พิฬาร +พี +พี่ +พี้ +พีชคณิต +พี่น้อง +พี่เบิ้ม +พี้โพ้ +พีร- +พีระมิด +พี่เลี้ยง +พึง +พึ่ง +พึ่งจมูกคนอื่นหายใจ +พึงใจ +พึงตา +พึ่งลำแข้งตัวเอง +พึ่บ +พึม +พึมพำ +พืช +พืชคาม +พืชชั้นต่ำ +พืชชั้นสูง +พืชพันธุ์ +พืด +พื้น +พื้นๆ +พื้นความรู้ +พื้นฐาน +พื้นดี +พื้นเดิม +พื้นที่ +พื้นบ้าน +พื้นเพ +พื้นเมือง +พื้นเสีย +พุ +พุก +พุกาม +พุง +พุ่ง +พุงแก +พุงจง +พุงดอ +พุงทะลาย +พุงปลา +พุงปลาช่อน +พุงพวง +พุงพ่วง +พุ่งหลาว +พุ่งหอกเข้ารก +พุ่งแหลน +พุฒ +พุฒิ +พุด +พุดตาน +พุทธ +พุทธ- +พุทธกาล +พุทธคุณ +พุทธจักร +พุทธเจดีย์ +พุทธชาด +พุทธฎีกา +พุทธตันตระ +พุทธปฏิมา +พุทธปฏิมากร +พุทธมามกะ +พุทธรักษา +พุทธศักราช +พุทธศาสนิกชน +พุทธสมัย +พุทธะ +พุทธังกูร +พุทธันดร +พุทธางกูร +พุทธาวาส +พุทธิ +พุทธุปบาทกาล +พุทโธ่ +พุทรา +พุธ +พุพอง +พุ่ม +พุ่มข้าวบิณฑ์ +พุ่มพวง +พุ่มม่าย +พุมเรียง +พุ้ย +พู +พู่ +พู่กลิ่น +พู่กัน +พูกาม +พูด +พูดคล่องเหมือนล่องน้ำ +พูดจนลิงหลับ +พูดจริงทำจริง +พูดเป็นต่อยหอย +พูดเป็นนัย +พูดเป็นน้ำไหลไฟดับ +พูดเป็นไฟ +พูดไปสองไพเบี้ย นิ่งเสียตำลึงทอง +พูดอย่างมะนาวไม่มีน้ำ +พูน +พู้น +พูพอน +พู่ระหง +เพ +เพ็ก +เพกา +เพคะ +เพ็ง +เพ่ง +เพ่งเล็ง +เพ็จ +เพ็จไม้ +เพชฉลูกรรม +เพชฌฆาต +เพชร +เพชร- +เพชรกลับ +เพชรซีก +เพชรดา +เพชรตัดเพชร +เพชรตาแมว +เพชรน้ำค้าง +เพชรน้ำหนึ่ง +เพชรนิลจินดา +เพชรปาณี +เพชรร่วง +เพชรร้าว +เพชรฤกษ์ +เพชรลูก +เพชรสังฆาต +เพชรหลีก +เพชรหึง +เพชรายุธ +เพ็ญ +เพฑูริย์ +เพณี +เพ็ดทูล +เพดาน +เพดานบิน +เพตร +เพท +เพทนา +เพทาย +เพทุบาย +เพโท +เพโทบาย +เพ่นพ่าน +เพนียด +เพไนย +เพ้ย +เพรง +เพรซีโอดิเมียม +เพรา +เพรางาย +เพราพริ้ง +เพราเพริศ +เพราะ +เพราะฉะนั้น +เพราะว่า +เพริด +เพริศ +เพริศพราย +เพริศพริ้ง +เพริศแพร้ว +เพรียก +เพรียกพร้อง +เพรียง +เพรียงคอห่าน +เพรียงเมือง +เพรียบ +เพรี้ยม +เพรี้ยมพราย +เพรียว +เพรียวลม +เพรื่อ +เพรือง +เพล +เพลง +เพลงเชิด +เพลงตระเชิญ +เพลงยาว +เพลงสาธุการ +เพลงเสมอ +เพลงหน้าพาทย์ +เพล็ด +เพล้โพล้ +เพลา +เพลาะ +เพลาะแพละ +เพลิง +เพลิงกัลป์ +เพลิงฟ้า +เพลิดเพลิน +เพลิน +เพลีย +เพลี้ย +เพลี่ยง +เพลี่ยงพล้ำ +เพลียใจ +เพศ +เพศยันดร +เพส +เพสลาด +เพ่อ +เพ้อ +เพ้อเจ้อ +เพอิญ +เพะ +เพา +เพาพะงา +เพาพาล +เพาะ +เพิก +เพิกเฉย +เพิกถอน +เพิง +เพิ่ง +เพิดเพ้ย +เพิ่ม +เพิ่มเติม +เพิ่มพูน +เพี้ย +เพี้ยกวาน +เพี้ยกว้าน +เพียง +เพี้ยง +เพียงดัง +เพียงนั้น +เพียงนี้ +เพียงพอ +เพียงออ +เพียชน์ +เพียน +เพี้ยน +เพี้ยนผัด +เพียบ +เพียบพร้อม +เพียร +เพื่อ +เพื่อน +เพื่อนเกลอ +เพื่อนเจ้าบ่าว +เพื่อนเจ้าสาว +เพื่อนบ้าน +เพื่อนฝูง +แพ +แพ้ +แพขนานยนต์ +แพง +แพ่ง +แพงพวย +แพงพวยฝรั่ง +แพ็งแพว +แพแตก +แพทย- +แพทย์ +แพทยศาสตร์ +แพทยา +แพ้ท้อง +แพน +แพ่น +แพนก +แพนงเชิง +แพ้เป็นพระ ชนะเป็นมาร +แพ้เปรียบ +แพ้ผม +แพ้ผัว +แพ้ฟัน +แพ้ภัยตัว +แพ้เมีย +แพร +แพร่ +แพรก +แพร่ข่าว +แพร่ง +แพร่งพราย +แพรว +แพร้ว +แพรวพราย +แพรวพราว +แพร่หลาย +แพ้รู้ +แพ้แรง +แพลง +แพลทินัม +แพลม +แพลเลเดียม +แพละ +แพละโลม +แพลูกบวบ +แพว +แพ้ว +แพศย์ +แพศยา +แพะ +แพะรับบาป +แพะโลม +โพ +โพก +โพกพาย +โพง +โพงพาง +โพชฌงค์ +โพซิตรอน +โพด +โพทะเล +โพแทสเซียม +โพธ +โพธิ- +โพธิ์ +โพธิญาณ +โพธิบัลลังก์ +โพธิปักขิยธรรม +โพธิสมภาร +โพธิสัตว์ +โพน +โพ้น +โพนทะนา +โพ้นทะเล +โพนเพน +โพบาย +โพผัน +โพย +โพยก๊วน +โพยม +โพยมยาน +โพยมัน +โพยมาน +โพรก +โพรง +โพรงแสม +โพรโทแอกทิเนียม +โพรมีเทียม +โพระดก +โพล่ +โพลง +โพล่ง +โพล้ง +โพลน +โพล้เพล้ +โพละ +โพสพ +ไพ +ไพ่ +ไพจิตร +ไพชน +ไพชยนต์ +ไพฑูรย์ +ไพโดร +ไพที +ไพบูลย์ +ไพ่ป๊อก +ไพพรรณ +ไพเพิด +ไพ่ไฟ +ไพมอก +ไพม้า +ไพร +ไพร่ +ไพรคิ้ว +ไพรจิตร +ไพรชน +ไพรชยนต์ +ไพรฑูรย์ +ไพรที +ไพรบูลย์ +ไพรปาก +ไพร่พล +ไพร่ฟ้า +ไพรระหง +ไพรเราะ +ไพรวัน +ไพรสณฑ์ +ไพร่สม +ไพร่ส่วย +ไพรสัณฑ์ +ไพรสาณฑ์ +ไพรสามกอ +ไพร่หลวง +ไพรัช +ไพรัช- +ไพรำ +ไพริน +ไพรินทร์ +ไพรี +ไพรู +ไพเราะ +ไพโรจน์ +ไพล +ไพล่ +ไพล่หลัง +ไพศาข +ไพศาข- +ไพศาขบุรณมี +ไพศาขมาส +ไพศาล +ไพเศษ +ไพสพ +ไพสิฐ +ไพหาร +ฟ +ฟก +ฟกช้ำดำเขียว +ฟ้ง +ฟรักโทส +ฟรี +ฟรีบาร์ +ฟลูออรีน +ฟ่อ +ฟ้อ +ฟอก +ฟอกซัก +ฟอกผ้า +ฟอกพยาน +ฟอกโลหิต +ฟอกหนัง +ฟอง +ฟ่อง +ฟ้อง +ฟ้องกลับ +ฟองกาม +ฟ้องตัวเอง +ฟองเต้าหู้ +ฟองทะเล +ฟองน้ำ +ฟ่องฟู +ฟองมัน +ฟ้องแย้ง +ฟ้องร้อง +ฟอด +ฟอดแฟด +ฟอน +ฟ่อน +ฟ้อน +ฟ้อแฟ้ +ฟอร์มาลดีไฮด์ +ฟอร์มาลิน +ฟอสฟอรัส +ฟอสเฟต +ฟะฟัด +ฟะฟั่น +ฟะฟ่าย +ฟัก +ฟักข้าว +ฟักตัว +ฟักทอง +ฟักฟุ้น +ฟักฟูม +ฟักเหลือง +ฟัง +ฟังก์ชัน +ฟังขึ้น +ฟังได้ +ฟังไม่ได้ศัพท์ จับไปกระเดียด +ฟังหูไว้หู +ฟังออก +ฟัด +ฟัดเฟียด +ฟัน +ฟั่น +ฟั้น +ฟันคลื่น +ฟันช้าง +ฟันดาบ +ฟันถาวร +ฟันแท้ +ฟันน้ำนม +ฟันปลา +ฟันฝ่า +ฟั่นเฝือ +ฟันเฟือง +ฟั่นเฟือน +ฟันม้า +ฟันเลื่อย +ฟันหนู +ฟันหลอ +ฟ้า +ฟาก +ฟ้าคะนอง +ฟ้าเคืองสันหลัง +ฟาง +ฟ่าง +ฟางลอย +ฟาด +ฟาดเคราะห์ +ฟาดหัว +ฟาทอม +ฟาน +ฟ้าผ่า +ฟ้าฝ่อ +ฟ่าม +ฟ้ามุ่ย +ฟ้าไม่กระเทือนสันหลัง +ฟาย +ฟายน้ำตา +ฟายมือ +ฟาร์ม +ฟ้าร้อง +ฟ้าแลบ +ฟาสซิสต์ +ฟ้าหลัว +ฟิก +ฟิด +ฟิบ +ฟิล์ม +ฟิวส์ +ฟิสิกส์ +ฟี่ +ฟี้ +ฟืน +ฟื้น +ฟื้นตัว +ฟื้นฝอย +ฟื้นฟู +ฟื้นองค์ +ฟืม +ฟุ +ฟุ้ง +ฟุ้งซ่าน +ฟุ้งเฟ้อ +ฟุ้งเฟื่อง +ฟุต +ฟุตบอล +ฟุน +ฟุบ +ฟุ่บ +ฟุฟะ +ฟุ่มเฟือย +ฟุลสแก๊ป +ฟู +ฟู่ +ฟูก +ฟูด +ฟูดฟาด +ฟูฟ่อง +ฟูม +ฟูมน้ำ +ฟูมฟัก +ฟูมฟาย +ฟูมเลี้ยง +เฟ็ด +เฟ็ดหาว +เฟ้น +เฟลด์สปาร์ +เฟ้อ +เฟอร์เมียม +เฟอะ +เฟอะฟะ +เฟะ +เฟะฟะ +เฟิน +เฟี้ยม +เฟี้ยมเฝ้า +เฟี้ยว +เฟือ +เฟื่อ +เฟื้อ +เฟือง +เฟื่อง +เฟื้อง +เฟื่องฟ้า +เฟื่องฟุ้ง +เฟื่องฟู +เฟือน +เฟือย +เฟื้อย +แฟ่ +แฟง +แฟชั่น +แฟบ +แฟ้ม +แฟรนเซียม +แฟลกซ์ +แฟลต +แฟะ +โฟกัส +ไฟ +ไฟกัลป์ +ไฟจุกตูด +ไฟฉาย +ไฟแช็ก +ไฟธาตุ +ไฟฟ้า +ไฟฟ้ากระแส +ไฟฟ้าสถิต +ไฟลามทุ่ง +ไฟสุมขอน +ภ +ภค +ภควดี +ภควัต +ภควันต์ +ภควัม +ภควา +ภควาน +ภคันทลา +ภคินี +ภณ +ภณิดา +ภพ +ภมการ +ภมร +ภมริน +ภมรี +ภมุ +ภมุกะ +ภมุกา +ภย- +ภยันตราย +ภยาคติ +ภร +ภรณี +ภรณีภู +ภรต +ภรต- +ภรตวรรษ +ภรตศาสตร์ +ภรรดร +ภรรดา +ภรรยา +ภระมร +ภระมรี +ภรัสดาษ +ภราดร +ภราดรภาพ +ภราดา +ภราตร- +ภราตรภาพ +ภราตฤ- +ภราตฤภาพ +ภริยา +ภรู +ภรูมณฑล +ภฤงคาร +ภฤดก +ภฤดี +ภฤตย์ +ภฤศ +ภฤษฏ์ +ภว +ภว- +ภวกษัย +ภวตัณหา +ภวนะ +ภวปาระ +ภวัคร +ภวังค- +ภวังค์ +ภวังคจิต +ภวันดร +ภวาภพ +ภักขะ +ภักดี +ภักต- +ภักตกฤตย์ +ภักตะ +ภักติ +ภักษ- +ภักษ์ +ภักษการ +ภักษา +ภักษาหาร +ภัค +ภัคน์ +ภังค- +ภังคะ +ภังคี +ภัจ +ภัญชะ +ภัณฑ- +ภัณฑ์ +ภัณฑครรภ +ภัณฑนะ +ภัณฑาคาร +ภัณฑาคาริก +ภัณฑารักษ์ +ภัณฑู +ภัณฑูกรรม +ภัต +ภัต- +ภัตกิจ +ภัตตาคาร +ภัตตาหาร +ภัตร +ภัทร +ภัทร- +ภัทรกัป +ภัทรกุมภ์ +ภัทรบทมาส +ภัทรบิฐ +ภัพ +ภัย +ภัสดา +ภัสตรา +ภัสมะ +ภัสสร +ภา +ภากร +ภาค +ภาค- +ภาคตัดกรวย +ภาคทฤษฎี +ภาคทัณฑ์ +ภาคนิพนธ์ +ภาคปฏิบัติ +ภาคพื้น +ภาคภูมิ +ภาคย์ +ภาคยานุวัติ +ภาคเรียน +ภาคเสธ +ภาคินี +ภาคิไนย +ภาคี +ภาคียะ +ภาชนะ +ภาชนีย- +ภาชี +ภาณ +ภาณ- +ภาณก +ภาณวาร +ภาณี +ภาณุ +ภาณุมาศ +ภาดร +ภาดา +ภาตร +ภาตา +ภาติกะ +ภาติยะ +ภาตุ +ภาพ +ภาพ- +ภาพกาก +ภาพจริง +ภาพถ่าย +ภาพนิ่ง +ภาพประกอบ +ภาพปูนเปียก +ภาพพจน์ +ภาพย์ +ภาพยนตร์ +ภาพลวงตา +ภาพลักษณ์ +ภาพเสมือน +ภาพหุ่นนิ่ง +ภาม +ภาย +ภายนอก +ภายใน +ภายหน้า +ภายหลัง +ภาร +ภาร- +ภารกิจ +ภารดี +ภารต +ภารต- +ภารตวิทยา +ภารตี +ภารธุระ +ภารยทรัพย์ +ภารยา +ภารโรง +ภาระ +ภาระจำยอม +ภาระติดพัน +ภาระติดพันในอสังหาริมทรัพย์ +ภารา +ภาว- +ภาวนา +ภาวนามัย +ภาวศุทธิ +ภาวะ +ภาวะฉุกเฉิน +ภาษ +ภาษก +ภาษณ์ +ภาษา +ภาษาศาสตร์ +ภาษิต +ภาษี +ภาษีเงินได้ +ภาษีบำรุงท้องที่ +ภาษีมูลค่าเพิ่ม +ภาษีโรงเรือนและที่ดิน +ภาษีสรรพสามิต +ภาส +ภาส- +ภาสกร +ภาสน์ +ภาสวร +ภาสา +ภาสุร +ภิกขา +ภิกขาจาร +ภิกขาหาร +ภิกขุ +ภิกขุนี +ภิกษา +ภิกษาจาร +ภิกษาหาร +ภิกษุ +ภิกษุณี +ภิงคาร +ภิงส +ภิงสนะ +ภิงสร +ภิญโญ +ภิญโญภาพ +ภิตติ +ภิท +ภิน- +ภินชาติ +ภินท- +ภินท์ +ภินทน- +ภินทนาการ +ภินวรรณ +ภิยโย +ภิยโยภาพ +ภิรมย์ +ภิรมย์สุรางค์ +ภิษัช +ภิส +ภิสัก +ภีตะ +ภีม +ภีรุ +ภีรุก- +ภีรุกชาติ +ภุกต- +ภุกต์ +ภุกตเศษ +ภุกตาหาร +ภุขัน +ภุช +ภุช- +ภุชค +ภุชงค์ +ภุชงคประยาต +ภุชงคม +ภุชสมโภค +ภุชา +ภุญช +ภุต +ภุม +ภุม- +ภุมเทวดา +ภุมระ +ภุมรัตน์ +ภุมรา +ภุมริน +ภุมรี +ภุมเรศ +ภุมวาร +ภุส +ภู +ภู่ +ภูเขา +ภูเขาน้ำแข็ง +ภูเขาไฟ +ภูโช +ภูดล +ภูดาด +ภูต +ภูต- +ภูตคาม +ภูตบดี +ภูตรูป +ภูติ +ภูตี +ภูเตศวร +ภูธร +ภูธเรศ +ภูธเรศวร +ภูนาถ +ภูนายก +ภูเนตุ +ภูบดินทร์ +ภูบดี +ภูบาล +ภูเบนทร์ +ภูเบศ +ภูเบศวร์ +ภูป +ภูผา +ภูภุช +ภูม +ภูมิ +ภูมิ- +ภูมิคุ้มกัน +ภูมิใจ +ภูมิฐาน +ภูมิธร +ภูมิธรรม +ภูมินทร์ +ภูมินาถ +ภูมิบดี +ภูมิบริมาณ +ภูมิบาล +ภูมิประเทศ +ภูมิปัญญา +ภูมิแพ้ +ภูมิภาค +ภูมิภุช +ภูมิรัฐศาสตร์ +ภูมิรู้ +ภูมิลำเนา +ภูมิศาสตร์ +ภูมิศาสตร์กายภาพ +ภูมิศาสตร์การเกษตร +ภูมิศาสตร์การเมือง +ภูมิศาสตร์ประชากร +ภูมิศาสตร์ประวัติ +ภูมิศาสตร์เศรษฐกิจ +ภูมี +ภูมีศวร +ภูรโลก +ภูริ +ภูรี +ภูว- +ภูวดล +ภูวน- +ภูวนตรัย +ภูวนัตตรัย +ภูวนาถ +ภูวเนตร +ภูวไนย +ภูษณ- +ภูษณพาส +ภูษา +ภูษามาลา +ภูษาโยง +ภูษิต +เภกะ +เภคะ +เภตรา +เภท +เภทภัย +เภทุบาย +เภรว +เภริ +เภรี +เภสัช +เภสัช- +เภสัชกร +เภสัชกรรม +เภสัชเคมี +เภสัชพฤกษศาสตร์ +เภสัชเพลา +เภสัชวิทยา +เภสัชเวท +เภสัชศาสตร์ +เภสัชอุตสาหกรรม +โภค +โภค- +โภคทรัพย์ +โภคภัณฑ์ +โภคยทรัพย์ +โภคะ +โภคิน +โภคี +โภไคย +โภไคศวรรย์ +โภช +โภชก +โภชน- +โภชนะ +โภชนะห้า +โภชนากร +โภชนาการ +โภชนาหาร +โภชย์ +ไภริน +ไภรี +ไภษัชคุรุ +ไภษัชย์ +ม +มก +มกร +มกร- +มกรกุณฑล +มกราคม +มกส +มกุฎ +มกุฎราชกุมาร +มกุล +มคธ +มฆ +มฆวัน +มฆา +ม่ง +มงกุฎ +มงกุฎไทย +มงโกรย +มงคล +มงคล- +มงคลจักร +มงคลแฝด +มงคลวาท +มงคลวาร +มงคลสูตร +มงคลหัตถี +มณฑ์ +มณฑก +มณฑนะ +มณฑป +มณฑล +มณฑา +มณฑารพ +มณฑิร +มณเฑียร +มณเฑียรบาล +มณี +มณีการ +มณีพืช +มณีรัตน์ +มณีราค +มณีศิลา +มด +มดดำ +มดแดง +มดแดงเฝ้ามะม่วง +มดเท็จ +มดยอบ +มดลูก +มดส้ม +มดาย +มดี +มต- +มตก +มตกภัต +มตะ +มติ +มติมหาชน +มท +มทนะ +มทนียะ +มธุ +มธุกร +มธุกรี +มธุการี +มธุโกศ +มธุตฤณ +มธุป +มธุปฎล +มธุปายาส +มธุพรต +มธุมักขิกา +มธุมิศร +มธุร- +มธุรตรัย +มธุรพจน์ +มธุรส +มธุระ +มธุลีห์ +มธุเศษ +มธุสร +มน +ม่น +มนต์ +มนตร์ +มนตรี +มนท- +มนท์ +มนทกานติ +มนทาทร +มนทิร +มนทิราลัย +มนเทียร +มนเทียรบาล +มนสิการ +มนัส +มนัส- +มนัสดาป +มนัสวี +มนิมนา +มนิลา +มนีมนา +มนุ +มนุช +มนุชาธิป +มนุญ +มนุษย- +มนุษย์ +มนุษย์กบ +มนุษยชาติ +มนุษยเทพ +มนุษยธรรม +มนุษยโลก +มนุษยศาสตร์ +มนุษยสัมพันธ์ +มนุษย์อวกาศ +มนุสาร +มนู +มนูสาร +มโน +มโนกรรม +มโนคติ +มโนช +มโนชญ์ +มโนธรรม +มโนนุกูล +มโนภาพ +มโนภินิเวศ +มโนมัย +มโนรถ +มโนรม +มโนรมย์ +มโนราห์ +มโนศิลา +มโนสาร +มโนสาเร่ +มโนหร +มมังการ +มมาก +มยุร- +มยุรคติ +มยุรฉัตร +มยุรอาสน์ +มยุระ +มยุรา +มยุรี +มยุเรศ +มยูข +มยูร +มร +มรกต +มรคา +มรฑป +มรณ- +มรณ์ +มรณกรรม +มรณธรรม +มรณบัตร +มรณภัย +มรณภาพ +มรณะ +มรณันติก- +มรณานต์ +มรดก +มรรค +มรรคนายก +มรรคา +มรรตย +มรรตัย +มรรทน +มรรยาท +มรรษ +มรสุม +มรัมเทศ +มรานควาน +มริจ +มริยาท +มรีจิ +มรุ +มรุต +มฤค +มฤค- +มฤคทายวัน +มฤคย์ +มฤคราช +มฤคศิร +มฤคศิรมาส +มฤคศิรัส +มฤคเศียร +มฤคินทร์ +มฤเคนทร์ +มฤจฉา +มฤจฉาชีพ +มฤจฉาทิฐิ +มฤดก +มฤต +มฤตก +มฤตยู +มฤตยูราช +มฤทิงค์ +มฤทุ +มฤทุกะ +มฤธุ +มฤษา +มฤษาวาท +มล +มล- +มลโค +มลทิน +มลน +มล่น +มลนมลาน +มลพิษ +มลวก +มล่อน +มล่อย +มละ +มลัก +มลังเมลือง +มล้า +มลาก +มล้าง +มลาน +มล่าน +มลาย +มลายู +มลาว +มล่าวเมลา +มลิน +มลิ้น +มลื่น +มวก +มวกผา +มวกเหล็ก +มวกใหญ่ +ม่วง +มวน +ม่วน +ม้วน +ม้วนต้วน +ม้วนเสื่อ +ม้วนหน้า +มวย +ม้วย +มวยไทย +มวยปล้ำ +มวยล้ม +มวยวัด +มวยสากล +มวยหมู่ +มวล +มวลสาร +มวลอากาศ +มสาร +มสารก +มสารคัล +มสิ +มหกรรม +มหรณพ +มหรรฆ +มหรรณพ +มหรสพ +มหัคฆ +มหัจฉริย- +มหัจฉริยะ +มหัณณพ +มหัต +มหัทธนะ +มหันต- +มหันต์ +มหันตโทษ +มหัพภาค +มหัล +มหัลกะ +มหัศจรรย์ +มหา +มหากฐิน +มหากาฬ +มหาขันธก +มหาจักร +มหาชน +มหาชัย +มหาชาติ +มหาโชตรัต +มหาดไทย +มหาดเล็ก +มหาดเล็กรายงาน +มหาตมะ +มหาไถ่ +มหาเทพ +มหาเทพี +มหาเทวี +มหาธาตุ +มหานสะ +มหานิกาย +มหานิล +มหาบพิตร +มหาบัณฑิต +มหาพน +มหาพรหม +มหาภารต +มหาภิเนษกรมณ์ +มหาภูต +มหาเมฆ +มหายาน +มหายุค +มหารณพ +มหาราช +มหาราชลีลา +มหาฤกษ์ +มหาละลวย +มหาละลาย +มหาวงศ์ +มหาวรรค +มหาวิทยาลัย +มหาศาล +มหาสงกรานต์ +มหาสดมภ์ +มหาสดำ +มหาสมุทร +มหาสาวก +มหาหงส์ +มหาหิงคุ์ +มหาอำนาจ +มหาอุจ +มหาอุด +มหาอุปรากร +มหิ +มหิงส์ +มหิดล +มหิทธิ +มหิธร +มหินท์ +มหิบดี +มหิบาล +มหิป +มหิมา +มหิศร +มหิศวร +มหิษ +มหิษี +มหึมา +มหุดิฤกษ์ +มหุรดี +มหู +มเหนทร์ +มเหยงค์ +มเหศ +มเหศวร +มเหศักดิ์ +มเหสักข์ +มเหสิ +มเหสี +มเหาษธ +มเหาฬาร +มโหฆ +มโหรสพ +มโหระทึก +มโหรี +มโหษธ +มโหฬาร +มไหศวรรย์ +มอ +มอคราม +มอง +มองโกลอยด์ +มองคร่อ +มองเสี้ยว +มอซอ +มอญ +มอญซ่อนผ้า +มอญตีดั้ง +มอด +ม่อต้อ +มอเตอร์ +มอน +ม่อน +มอนไข่ +มอบ +มอบฉันทะ +มอบหมาย +มอบอำนาจ +มอม +มอมเมา +มอมแมม +มอมเหล้า +ม่อย +มอร์ฟีน +มอระกู่ +มอลโทส +ม่อลอกม่อแลก +มอหมึก +ม่อห้อม +ม่อฮ่อม +มะ +มะกรูด +มะกล่ำ +มะกอก +มะกอกน้ำ +มะกอกบ้าน +มะกอกป่า +มะกอกฝรั่ง +มะกอกพราน +มะกอกสามตะกร้าปาไม่ถูก +มะก่อง +มะกะโรนี +มะกา +มะเกลือ +มะเกี๋ยง +มะข่วง +มะขวิด +มะขาม +มะขามคราบหมู +มะขามเทศ +มะขามป้อม +มะขามเปียก +มะเขือ +มะเขือทวาย +มะเขือเทศ +มะเขือพวง +มะเขือมอญ +มะแข่น +มะคะ +มะคังแดง +มะค่า +มะค่าแต้ +มะค่าโมง +มะค่าหนาม +มะค่าใหญ่ +มะคำไก่ +มะคำดีควาย +มะงัน +มะงั่ว +มะงุมมะงาหรา +มะซัก +มะซาง +มะซ่าน +มะดะขี้นก +มะดัน +มะดา +มะดูก +มะเดหวี +มะเดื่อ +มะเดื่อดิน +มะต้อง +มะตะบะ +มะตาด +มะตาหะรี +มะตี +มะตึ่ง +มะตื๋น +มะตูม +มะแตก +มะนาว +มะนาวเทศ +มะปราง +มะปริง +มะป่อง +มะป่องต้น +มะฝ่อ +มะพร้าว +มะพร้าวแก้ว +มะพร้าวตื่นดก +มะพร้าวทุย +มะพร้าวห้าว +มะพลับ +มะพูด +มะแพน +มะแพร้ว +มะเฟือง +มะแฟน +มะไฟ +มะไฟเดือนห้า +มะม่วง +มะม่วงหิมพานต์ +มะม่าว +มะมี่ +มะมื่น +มะมุด +มะเมอ +มะเมีย +มะเมื่อย +มะแม +มะยง +มะยงชิด +มะยม +มะระ +มะริด +มะรืน +มะรุม +มะรุมมะตุ้ม +มะเร็ง +มะเรื่อง +มะโรง +มะละกอ +มะลารอกัน +มะลำ +มะลิ +มะลิซ่อม +มะลิน +มะลิ่ม +มะลิเลื้อย +มะลิอ่อง +มะลื่น +มะลืมดำ +มะลุลี +มะวาร +มะแว้ง +มะสัง +มะเส็ง +มะหลิ่ม +มะหวด +มะหะหมัด +มะหัล +มะหาด +มะหิ่ง +มะเหงก +มะเหมื่อย +มะอึก +มะฮอกกานี +มัก +มักกะลีผล +มักกะสัน +มักขะ +มั่กขั้ก +มักขิกา +มักขิกาชาติ +มักคุ้น +มักง่าย +มักฏกะ +มักฏะ +มักได้ +มักน้อย +มักมาก +มักใหญ่ +มัค- +มัคคะ +มัคคุเทศก์ +มัคนายก +มัคสิระ +มัฆวา +มัฆวาน +มั่ง +มังกง +มังกร +มังกุ +มังคละ +มั่งคั่ง +มังค่า +มังคุด +มังตาน +มั่งมี +มั่งมีในใจ แล่นใบบนบก +มังส- +มังสวิรัติ +มังสะ +มังสี +มังหงัน +มัจจะ +มัจจุ +มัจจุราช +มัจฉระ +มัจฉริยะ +มัจฉรี +มัจฉะ +มัจฉา +มัจฉาชาติ +มัช- +มัชชะ +มัชชาร +มัชฌ- +มัชฌันติก- +มัชฌันติกสมัย +มัชฌิม- +มัชฌิมนิกาย +มัชฌิมบุรุษ +มัชฌิมประเทศ +มัชฌิมภูมิ +มัชฌิมยาม +มัชฌิมวัย +มัชฌิมา +มัชฌิมาปฏิปทา +มัชวิรัติ +มัญจก +มัญจา +มัญชิษฐ +มัญชิษฐา +มัญชีร +มัญชุ +มัญชุสา +มัญชูสา +มัญเชฏฐะ +มัญเชฏฐิกา +มัญเชฏฐิกากร +มัญเชียร +มัฏฐะ +มัณฑ- +มัณฑน- +มัณฑนศิลป์ +มัณฑนา +มัณฑุก +มัด +มัดจำ +มัดเชื้อเพลิง +มัดมือชก +มัดหมี่ +มัดหมู +มัดหวาย +มัตตะ +มัตตัญญู +มัตตัย +มัตตา +มัตติกา +มัตถก +มัตถลุงค์ +มัตย +มัตสยะ +มัตสยา +มัตสร +มัตสรรย์ +มัตสริน +มัทนะ +มัทนียะ +มัทยะ +มัธย- +มัธยฐาน +มัธยม +มัธยม- +มัธยมกาล +มัธยมศึกษา +มัธยมา +มัธยันห์ +มัธยัสถ์ +มัน +มั่น +มันแกว +มั่นคง +มั่นใจ +มันดี +มันตา +มันถะ +มันทิร +มันทิราลัย +มันเทศ +มันนก +มันปลา +มันปู +มันฝรั่ง +มันย่อง +มันสมอง +มันเสา +มันไส้ +มั่นหมาย +มั่นเหมาะ +มับ +มับๆ +มั้ม +มัมมี่ +มัย +มัลก +มัลละ +มัลลิกา +มัว +มั่ว +มัวซัว +มัวมอม +มั่วมูล +มัวเมา +มัวเมีย +มั่วสุม +มัวหมอง +มัศยา +มัสดก +มัสดุ +มัสตาร์ด +มัสตุ +มัสมั่น +มัสยิด +มัสรู่ +มัสลิน +มัสสุ +มา +ม้า +มาก +มากขี้ควายหลายขี้ช้าง +มากมาย +มากมายก่ายกอง +มากหน้าหลายตา +มากหมอมากความ +มาแขก +มาคสิร- +มาคสิระ +มาฆ- +มาฆบูชา +มาฆะ +ม้าง +มางสะ +ม้าใช้ +มาณพ +มาณวิกา +มาด +มาดา +ม้าดีดกะโหลก +มาตงค์ +ม้าต้น +มาตร +มาตร- +มาตรการ +มาตรฐาน +มาตรแม้น +มาตรว่า +มาตรา +มาตราพฤติ +มาตราส่วน +มาตฤ +มาตฤกะ +มาตสรรย์ +มาตังค +มาตา +มาตามหะ +มาตามหัยกะ +มาตามหัยกา +มาตามหัยยิกา +มาตามหา +มาติก +มาติกา +มาตี +มาตุ +มาตุคาม +มาตุฆาต +มาตุจฉา +มาตุภูมิ +มาตุรงค์ +มาตุเรศ +มาตุละ +มาตุลา +มาตุลานี +มาตุลุงค์ +มาท +มาทน +ม้าทลายโรง +ม้าเทศ +มาธยมิกะ +มาธุร +มาธุสร +มาธูร +มาน +ม่าน +ม้าน +ม่านตา +มานทะลุน +ม่านบังเพลิง +มานพ +ม่านเมรุ +ม่านลาย +ม่านสองไข +ม่านอินทนิล +มานะ +มานัต +มานัส +ม้าน้ำ +มานิต +มานี +มานุษ +มานุษย- +มานุษยวิทยา +มาโนชญ์ +มาบ +มาปก +มาภา +ม้าม +ม้ามืด +มาย +ม่าย +ม่ายเมียง +ม้าย่อง +มายัง +มายา +มายากร +มายากล +มายาการ +มายาประสาน +มายาวี +มาร +มาร- +มารค +มารคอหอย +มารชิ +มารชิต +มารดร +มารดา +มารผจญ +มารยา +มารยาท +มารวิชัย +มารวิชิต +มารศรี +มารษา +มารสังคม +มารหัวขน +มาระ +มาราธิราช +ม้ารำ +มาริ +มาริต +มารุต +มารุมมาตุ้ม +ม้าเร็ว +มาลย์ +ม้าล่อ +มาลัย +มาลา +มาลากรรม +มาลาการ +มาลาตี +ม้าลาย +มาลาเรีย +มาลำ +มาลินี +มาลี +มาลุต +มาวาร +มาศ +มาส +มาสก +ม้าสะบัดกีบ +มาห์ +ม่าห์ +มาหิส +มาเหนือเมฆ +ม่าเหมี่ยว +มาฬก +ม้าอ้วน +มำเลือง +มิ +มิค +มิค- +มิคลุท +มิคลุทก +มิคเศียร +มิคสัญญี +มิคสิร- +มิคสิระ +มิคี +มิ่ง +มิ่งขวัญ +มิงโค +มิ่งมิตร +มิจฉา +มิจฉากัมมันตะ +มิจฉาจริยา +มิจฉาจาร +มิจฉาชีพ +มิจฉาทิฐิ +มิจฉาบถ +มิจฉาวาจา +มิจฉาวายามะ +มิจฉาสติ +มิจฉาสมาธิ +มิจฉาสังกัปปะ +มิจฉาอาชีวะ +มิญช- +มิด +มิดชิด +มิดเม้น +มิดเมี้ยน +มิดหมี +มิดีมิร้าย +มิได้ +มิต- +มิตภาณี +มิตร +มิตร- +มิตรจิต +มิตรจิตมิตรใจ +มิตรภาพ +มิตรสหาย +มิติ +มิถยา +มิถุน +มิถุนายน +มิทธะ +มิทธี +มินตรา +มินตา +มินหม้อ +มิน่า +มิน่าล่ะ +มิน่าเล่า +มิ่ม +มิ้ม +มิยา +มิไย +มิรันตี +มิลลิกรัม +มิลลิบาร์ +มิลลิเมตร +มิลลิลิตร +มิลักขะ +มิลักขู +มิลาต +มิศร- +มิศรก- +มิส- +มิสก- +มิสกรี +มิสกวัน +มิสซา +มิอย่ารา +มิอย่าเลย +มี +มี่ +มีแก่ใจ +มี่ฉาว +มีชื่อ +มีชู้ +มีด +มีดโกน +มีดตอก +มีดยับ +มีดหมอ +มีตาแต่หามีแววไม่ +มีทองเท่าหนวดกุ้ง นอนสะดุ้งจนเรือนไหว +มีเทน +มีน +มีนาคม +มีเฟื้องมีสลึง +มีภาษีกว่า +มีเรือน +มี่สั้ว +มีเสียง +มีหน้า +มีหน้ามีตา +มีฬห- +มีอันจะกิน +มีอันเป็น +มีอายุ +มึก +มึกมวย +มึง +มึงวาพาโวย +มึน +มึนงง +มึนชา +มึนซึม +มึนตึง +มึนเมา +มืด +มืดค่ำ +มืดแปดด้าน +มืดฟ้ามัวดิน +มืดมน +มืดมัว +มืดหน้า +มืน +มื่น +มือ +มื้อ +มือกาว +มือเก่า +มือขวา +มือขึ้น +มือแข็ง +มือดี +มือตก +มือเติบ +มือถือสาก ปากถือศีล +มือที่สาม +มือบอน +มือเบา +มือปืน +มือผี +มือมืด +มือไม่ถึง +มือไม่พาย เอาตีนราน้ำ +มือเย็น +มือร้อน +มือลิง +มือไว +มือสะอาด +มือสั้นตีนสั้น +มือสี +มือเสือ +มือหนัก +มือหนึ่ง +มือห่างตีนห่าง +มือใหม่ +มืออ่อน +มืออ่อนตีนอ่อน +มุ +มุก +มุกดา +มุกดาหาร +มุกุร +มุกุล +มุข +มุข- +มุขกระสัน +มุขเด็จ +มุขบาฐ +มุขมนตรี +มุขย- +มุขยประโยค +มุขลด +มุโขโลกนะ +มุคคะ +มุคธ์ +มุคร +มุง +มุ่ง +มุ้ง +มุ้งกระต่าย +มุ้งประทุน +มุ่งมาด +มุ่งร้ายหมายขวัญ +มุ้งลวด +มุ้งสายบัว +มุ่งหมาย +มุจฉา +มุจน +มุจลินท์ +มุญจนะ +มุญช +มุฐิ +มุณฑ +มุณฑก +มุด +มุดหัว +มุต +มุต- +มุตกิด +มุตฆาต +มุตตะ +มุตตา +มุตติ +มุติ +มุติงค์ +มุทค +มุทคร +มุททา +มุทธชะ +มุทธา +มุทธาภิเษก +มุทรา +มุทริกา +มุทะลุ +มุทา +มุทิกา +มุทิงค์ +มุทิตา +มุทิน +มุทุ +มุทุตา +มุ่น +มุ่นใจ +มุ่นหมก +มุนิ +มุนิกุญชร +มุนินทร์ +มุนี +มุบ +มุบๆ +มุบมิบ +มุม +มุ่ม +มุ้ม +มุมกดลง +มุมก้ม +มุมกลับ +มุมเงย +มุมฉาก +มุมตกกระทบ +มุมตรง +มุมเท +มุมบ่ายเบน +มุมประชิด +มุมป้าน +มุมมืด +มุมยกขึ้น +มุมแย้ง +มุมสะท้อน +มุมหักเห +มุมเห +มุมแหลม +มุ่ย +มุรช +มุรธา +มุรธาภิเษก +มุลุต +มุลู +มุสละ +มุสลิม +มุสะ +มุสา +มุสาวาท +มุสิก +มุหงิด +มุหน่าย +มุหุต +มุฮัมมัด +มูก +มูกมัน +มูกเลือด +มูกหลวง +มูค- +มูเซอ +มูตร +มู่ทู่ +มูน +มูนมอง +มูมมาม +มูรดี +มูรติ +มูรธ- +มูรธา +มูรธาภิเษก +มูล +มูล- +มูลค่า +มูลโค +มูลจิต +มูลฐาน +มูลไถ +มูลนกการเวก +มูลนาย +มูลนิธิ +มูลฝอย +มูลภัณฑ์กันชน +มูละ +มูลา +มูลิกากร +มู่ลี่ +มู่เล่ +มูสัง +มูสิก +มูสิก- +มูสิกทันต์ +มูฬห- +เม +เม็ก +เมกะเฮิรตซ์ +เมขลา +เมฆ +เมฆคลุ้ม +เมฆฉาย +เมฆพัด +เมฆมาก +เมฆา +เมฆินทร์ +เมฆี +เม็ง +เมงอะปา +เม็ด +เม็ดดี +เม็ดพระศก +เม็ดพราย +เม็ดมะยม +เม็ดละมุด +เม็ดเลือด +เม็ดโลหิต +เมตตา +เมตไตรย +เมตร +เมตริก +เมตริกตัน +เมถุน +เมท +เมทนี +เมทนีดล +เมทินี +เมทิลแอลกอฮอล์ +เมโท +เมธ +เมธา +เมธาวี +เมธี +เมน +เม่น +เม้น +เมนเดลีเวียม +เมนทอล +เม่นทะเล +เม้ม +เม้มปาก +เมรย- +เมรัย +เมรุ +เมรุ- +เมรุมาศ +เมรุราช +เมล์ +เมลก +เมล็ด +เมลือง +เมลื่อย +เมลื้อย +เมลื่อยมล้า +เมษ +เมษายน +เมห +เมห์ +เมหน +เมะ +เมา +เม่า +เม้า +เม้าเค้า +เมาดิบ +เมามัน +เมามัว +เมามาย +เมายศ +เมารี +เมาลี +เมาห์ +เมาอำนาจ +เมาะ +เมาะตาโยกัก +เมาะว่า +เมิง +เมิน +เมิล +เมีย +เมียง +เมี่ยง +เมียงม่าย +เมี้ยน +เมียน้อย +เมียหลวง +เมือ +เมื่อ +เมื้อ +เมือก +เมื่อกี้ +เมือง +เมืองขึ้น +เมืองท่า +เมืองท่าปลอดภาษี +เมืองนอก +เมืองหลวง +เมืองออก +เมื่อตะกี้ +เมื่อนั้น +เมือบ +เมื่อพีเนื้อหอม เมื่อผอมเนื้อเหม็น +เมื่อย +เมื่อยปาก +เมื่อเอยก็เมื่อนั้น +เมื่อเอยเมื่อนั้น +แม่ +แม้ +แมก +แมกนีเซียม +แม่กระชังหน้าใหญ่ +แม่กระแชง +แม่กอง +แม่กุญแจ +แม่คุณ +แม่คู่ +แมง +แมงกวาง +แมงกะพรุน +แมงกานิน +แมงกานีส +แมงคาเรือง +แมงช้าง +แมงดา +แมงดาทะเล +แมงปากจอบ +แมงไฟเดือนห้า +แม่งม้าง +แมงมุม +แมงลัก +แม่งาน +แม่เจ้า +แม่เจ้าโว้ย +แม่ซื้อ +แม่ตะงาว +แม่ตาย +แม่เตาไฟ +แม้แต่ +แม่ทัพ +แม่ท่า +แมน +แม่น +แม้น +แม้นเขียน +แม่นม +แม่นยำ +แม่น้ำ +แม่บท +แม่บ้าน +แม่เบี้ย +แม่ปะ +แม่แปรก +แม่พิมพ์ +แม่มด +แม่ม่าย +แม่ม่ายทรงเครื่อง +แม่ม่ายลองไน +แม่ยั่วเมือง +แม่ย่านาง +แม่ยาย +แม่ย้าว +แมร +แม่ร้า +แม่ร้าง +แม่รีแม่แรด +แม่เรือน +แม่แรง +แมลง +แมลงช้าง +แมลงดา +แมลงดำ +แมลงดำหนาม +แมลงทับเล็ก +แมลงปอ +แมลงภู่ +แมลงวัน +แมลงวันทอง +แมลงวันสเปน +แมลงวันหัวเขียว +แมลบ +แม่ลาย +แม่เล้า +แม่เลี้ยง +แมว +แม้ว +แมวเซา +แมวดาว +แมวน้ำ +แมวป่า +แมวมอง +แม่วี +แม่สายบัวแต่งตัวค้าง +แม่สี +แม่สื่อ +แม่หนัก +แม่หยั่วเมือง +แม่เหย้าแม่เรือน +แม่เหล็ก +แม่อยู่หัว +แมะ +โม +โม่ +โม้ +โมก +โมกข- +โมกข์ +โมกขบริสุทธิ์ +โมกโคก +โมกมัน +โมกษ- +โมกษะ +โมกษะพยาน +โมกใหญ่ +โมฆ- +โมฆกรรม +โมฆะ +โมฆีย- +โมฆียกรรม +โมฆียะ +โมง +โม่ง +โมงครุ่ม +โม่งโค่ง +โมจน- +โมทนา +โมน +โมโนแซ็กคาไรด์ +โมไนย +โมมูห์ +โมมูหะ +โมเม +โมเมนต์ +โมร- +โมรกลาป +โมรา +โมรี +โมเรส +โมลิบดีนัม +โมลี +โมเลกุล +โมษ +โมษก +โมษณ +โมเสก +โมเสส +โมห- +โม่ห์ +โมหะ +โมหันธ์ +โมหาคติ +โมโห +ไม่ +ไม้ +ไม้กง +ไมกา +ไม้กากบาท +ไม้กางเขน +ไม่กี่น้ำ +ไม่กี่อัฐ +ไม่กี่อัฐฬส +ไม้ใกล้ฝั่ง +ไม้ขี้ฉ้อ +ไม้ขีดไฟ +ไม่เข้าใครออกใคร +ไม่เข้ายา +ไม้แข็ง +ไม้คมแฝก +ไมครอน +ไม่ค่อย +ไมโครกรัม +ไมโครฟิล์ม +ไมโครโฟน +ไมโครมิเตอร์ +ไมโครเมตร +ไมโครลิตร +ไมโครเวฟ +ไม่ใคร่ +ไม้งามกระรอกเจาะ +ไม้จริง +ไม้จัตวา +ไม้จำปา +ไม่ชอบมาพากล +ไม่เชิง +ไม่ใช่ขี้ไก่ +ไม้ดัด +ไม้ดำ +ไม่ดูดำดูดี +ไม่ดูดำดูแดง +ไม่ดูตาม้าตาเรือ +ไม้เด็ด +ไม้แดง +ไม่ได้เบี้ยออกข้าว +ไม่ได้เบี้ยเอาข้าว +ไม่ได้ศัพท์ +ไม่ได้สิบ +ไมตรี +ไม้ตรี +ไม้ตาย +ไม้ตายขาน +ไม้ตีพริก +ไม่เต็มเต็ง +ไม่เต็มบาท +ไม่เต็มหุน +ไม้ไต่คู้ +ไม่ถูกโรคกัน +ไม้ทัณฑฆาต +ไม่ทัน +ไม้เท้า +ไม้เท้ายายม่อม +ไม้โท +ไม้นวม +ไม้นอกกอ +ไม้นิ้ว +ไม้บรรทัด +ไม้เบื่อไม้เมา +ไม้ป่าเดียวกัน +ไม้เป็น +ไม้ผัด +ไม่พูดพร่ำทำเพลง +ไม้โพ +ไม่ฟังเสียง +ไม้มลาย +ไม้ม้วน +ไม่มีปี่มีกลอง +ไม่มีมูลฝอยหมาไม่ขี้ +ไม่มีวันเสียละ +ไม้มืด +ไม้มือ +ไม้เมตร +ไม้ยมก +ไมยราบ +ไม้ยามักการ +ไม้ยาว +ไม้ร่มนกจับ +ไม่รู้จักเสือเอาเรือเข้ามาจอด ไม่รู้จักมอดเอาไม้เข้ามาวาง +ไม่รู้จักหัวนอนปลายตีน +ไม่รู้อีโหน่อีเหน่ +ไม้เรียว +ไมล์ +ไม่ลงโบสถ์กัน +ไม้ล้มเงาหาย +ไม้ล้มลุก +ไม้ลอย +ไม้เลี้ยง +ไม้ไล่ +ไม้วา +ไม้สอย +ไม้สั้น +ไม้สั้นไม้ยาว +ไม้สามอัน +ไม่สู้ +ไม้สูง +ไม้หน้า +ไม้หมอน +ไม้หมุน +ไม้หลักปักเลน +ไม้หันอากาศ +ไม้หึ่ง +ไม่เห็นน้ำตัดกระบอก ไม่เห็นกระรอกก่งหน้าไม้ +ไม่เหลือบ่ากว่าแรง +ไม้อ่อนดัดง่าย ไม้แก่ดัดยาก +ไม้อัด +ไม้เอก +ไม่เออออห่อหมก +ไม้โอ +ย +ยก +ยกกระบัตร +ยกครู +ยกเครื่อง +ยกเค้า +ยกตนข่มท่าน +ยกตัวขึ้นเหนือลม +ยกทรง +ยกธงขาว +ยกน +ยกนิ้ว +ยกพื้น +ยกฟ้อง +ยกภูเขาออกจากอก +ยกมือ +ยกเมฆ +ยกยอ +ยกย่อง +ยกยอด +ยกยอปอปั้น +ยกเลิก +ยกเว้น +ยกไว้ +ยกหางตัวเอง +ยกใหญ่ +ยง +ยงโย่ +ยชุรเวท +ยติ +ยติภังค์ +ยถากรรม +ยถาภูตญาณ +ย่น +ยนต์ +ยนตร์ +ย่นย่อ +ยม +ยม- +ยมก +ยมกปาฏิหาริย์ +ยมขันธ์ +ยมโดย +ยมทัณฑ์ +ยมทูต +ยมนา +ยมบาล +ยมราช +ยมล +ยมโลก +ยรรยง +ยล +ยว +ยวกสา +ยวง +ยวด +ยวดยง +ยวดยาน +ยวดยิ่ง +ยวน +ยวนยี +ยวบ +ยวบๆ +ยวบยาบ +ย้วย +ยวรยาตร +ยวา +ยวาคุ +ยศ +ยศอย่าง +ยโส +ยอ +ย่อ +ยอก +ยอกย้อน +ย็อกแย็ก +ย็อกแย็กๆ +ยอง +ยองๆ +ย่อง +ย้อง +ย่องกริบ +ย่องเบา +ย่องแย่ง +ยองใย +ยองไย่ +ย่องเหง็ด +ยอด +ยอดจาก +ยอดด้วน +ยอดดี +ยอดน้ำ +ยอดสร้อย +ย่อท้อ +ยอน +ย้อน +ย้อนเนื้อ +ย้อนยอก +ยอบ +ยอบแยบ +ย่อพล +ยอม +ย่อม +ย้อม +ยอมความ +ย้อมใจ +ย้อมแมวขาย +ย่อมเยา +ย่อมุม +ย่อย +ย้อย +ย่อย่น +ย่อยยับ +ย่อแย่ +ย้อแย้ +ยอแสง +ย่อหน้า +ย่อหย่อน +ย่อแหยง +ยะ +ย่ะ +ยะงันจะคับ +ยะยอบ +ยะยัน +ยะยับ +ยะยาน +ยะย้าย +ยะย้าว +ยะแย้ง +ยะหิทา +ยัก +ยักกระสาย +ยักข์ +ยักขินี +ยักท่า +ยักเพรีย +ยักยอก +ยักย้าย +ยักยิ้ม +ยักยี่ยักยัน +ยักยี่ยักเหยา +ยักเยื้อง +ยักแย่ยักยัน +ยักษ์ +ยักษ์ปักหลั่น +ยักษ์มักกะสัน +ยักษิณี +ยักษี +ยักหยาว +ยักหล่ม +ยัง +ยั้ง +ยังกาหลา +ยังชั่ว +ยั่งยืน +ยังแล้ว +ยังหยัง +ยัชโญปวีต +ยัชน +ยัชมาน +ยัญ +ยัญ- +ยัญกรรม +ยัญญะ +ยัญญังค์ +ยัญพิธี +ยัฐิ +ยัฐิมธุกา +ยัด +ยัดเยียด +ยัติภังค์ +ยัน +ยั่น +ยันต์ +ยันตร- +ยันตร์ +ยันตรกรรม +ยั่นตะนี +ยันเย้า +ยับ +ยับๆ +ยับยง +ยับย่อย +ยับยั้ง +ยับยั้งชั่งใจ +ยับยาน +ยับยาบ +ยับเยิน +ยั่ว +ยั้ว +ยั่วยวน +ยั่วเย้า +ยั้วเยี้ย +ยัวรยาตร +ยัษฏิ +ยา +ย่า +ยาก +ยากแค้น +ยากจน +ยากนาน +ยากเย็น +ยากไร้ +ยาเขียว +ยาค +ยาคุ +ยาคู +ยาง +ย่าง +ยางกราด +ย่างตีน +ย่างทราย +ย่างเท้า +ยางน่อง +ยางบอน +ยางพารา +ยางมะตอย +ย่างเยื้อง +ยางลบ +ยางสน +ย่างสามขุม +ยางอาย +ยาจก +ยาจน +ยาจนก +ยาจนา +ยาจืด +ยาใจ +ยาฉุน +ยาไฉน +ยาชก +ยาด +ยาดา +ยาดำ +ยาแดง +ยาตนา +ยาตร +ยาตรา +ยาตั้ง +ย่าทวด +ยาธาตุ +ยาน +ย่าน +ยานก +ย่านกอบนาง +ยานคาง +ย่านซื่อ +ย่านทราย +ย่านนมควาย +ย่านพาโหม +ยานมาศ +ย่านยาว +ย่านลิเภา +ยานัตถุ์ +ย่านาง +ย่านางช้าง +ยานี +ยานุมาศ +ยาบ +ยาบๆ +ยาปน- +ยาปนมัต +ยาฝอย +ยาแฝด +ยาม +ยาม- +ย่าม +ยามกาลิก +ยามเกา +ยามตูดชาย +ยามพาด +ยามโยค +ยามสามตา +ยามักการ +ยามิก +ยาย +ย้าย +ยายทวด +ยายี +ยาเยีย +ยาว +ย้าว +ยาวกาลิก +ยาวชีวิก +ยาวบั่น สั้นต่อ +ยาวรี +ยาวัส +ยาสลบ +ยาสั่ง +ยาสูบ +ยาเส้น +ยาเสพย์ติด +ยาเสพย์ติดให้โทษ +ยาไส้ +ยาหม้อใหญ่ +ยาหมู่ +ยาหยัง +ย่าหยา +ยาหยี +ยาหัด +ยาอัด +ยำ +ย่ำ +ย้ำ +ยำเกรง +ย่ำเทือก +ยำยาม +ย่ำยี +ยำเยง +ยำเยีย +ย่ำแย่ +ย้ำเหยอ +ยิก +ยิกๆ +ยิง +ยิ่ง +ยิงปืนนัดเดียว ได้นกสองตัว +ยิงฟัน +ยิ่งยวด +ยิฏฐะ +ยิฐ +ยิน +ยินแคลน +ยินใจ +ยินดี +ยินมลาก +ยินยอม +ยินร้าย +ยินลากขากดี +ยิบ +ยิบๆ +ยิปซัม +ยิปซี +ยิ้ม +ยิ้มกริ่ม +ยิ้มแฉ่ง +ยิ้มด้วยปาก ถากด้วยตา +ยิมนาสติก +ยิ้มแป้น +ยิ้มย่อง +ยิ้มเยาะ +ยิ้มแย้ม +ยิ้มละไม +ยิ้มหัว +ยิ้มเหย +ยิ้มแห้ง +ยิ้มแหย +ยิหวา +ยี +ยี่ +ยี้ +ยี่ก่า +ยี่เก +ยี่เข่ง +ยี่โถ +ยี่โถฝรั่ง +ยีน +ยี่โป้ +ยี่ภู่ +ยียวน +ยีราฟ +ยี่สก +ยี่สง +ยี่สน +ยี่สาน +ยี่ส่าน +ยี่สิบ +ยี่สุ่น +ยี่หระ +ยี่หร่า +ยี่หร่าหวาน +ยี่ห้อ +ยี่หุบ +ยึกยือ +ยึด +ยึดครอง +ยึดถือ +ยึดทรัพย์ +ยึดเหนี่ยว +ยืด +ยืดยาด +ยืดเยื้อ +ยืดหยุ่น +ยืน +ยื่น +ยืนกระต่ายสามขา +ยืนกราน +ยื่นแก้วให้วานร +ยืนค้ำหัว +ยืนเครื่อง +ยื่นจมูก +ยืนชิงช้า +ยืนต้น +ยืนพื้น +ยื่นมือ +ยืนยง +ยืนยัน +ยืนยาม +ยืนโรง +ยื่นหมูยื่นแมว +ยืนหยัด +ยืม +ยืมจมูกคนอื่นหายใจ +ยืมใช้คงรูป +ยืมใช้สิ้นเปลือง +ยื้อ +ยื้อยุด +ยุ +ยุกกระบัตร +ยุกดิ +ยุกต์ +ยุกติ +ยุกติธรรม +ยุค +ยุคเข็ญ +ยุคนธร +ยุคล +ยุคลบาท +ยุคันต- +ยุคันต์ +ยุคันตวาต +ยุคันธร +ยุคุนธร +ยุง +ยุ่ง +ยุ้ง +ยุงกวาด +ยุ่งขิง +ยุ่งใจ +ยุงปัด +ยุงปัดแม่ม่าย +ยุ่งยาก +ยุ่งยิ่ง +ยุ่งเหมือนยุงตีกัน +ยุ่งเหยิง +ยุด +ยุต +ยุติ- +ยุติธรรม +ยุทธ- +ยุทธ์ +ยุทธการ +ยุทธนา +ยุทธนาการ +ยุทธนาธิการ +ยุทธภัณฑ์ +ยุทธภูมิ +ยุทธโยธา +ยุทธวิธี +ยุทธวินัย +ยุทธศาสตร์ +ยุทธหัตถี +ยุทโธปกรณ์ +ยุบ +ยุบยอบ +ยุบยับ +ยุบยิบ +ยุบล +ยุพ- +ยุพดี +ยุพยง +ยุพเยาว์ +ยุพราช +ยุพราชา +ยุพเรศ +ยุพา +ยุพาน +ยุพาพาล +ยุพาพิน +ยุ่มย่าม +ยุ่ย +ยุ้ย +ยุยง +ยุแยง +ยุแยงตะแคงแซะ +ยุแยงตะแคงรั่ว +ยุรบาตร +ยุรยาตร +ยุว- +ยุวชน +ยุวดี +ยุวราช +ยุวราชา +ยุวา +ยุวาน +ยุหบาตร +ยุแหย่ +ยุให้รำตำให้รั่ว +ยู +ยู่ +ยูง +ยูโด +ยูถะ +ยูถิกา +ยูปะ +ยู่ยี่ +ยูรยาตร +ยูริก +ยูเรนัส +ยูเรเนียม +ยูโรเพียม +ยูษะ +เยๆ +เย้ +เยง +เยซู +เย็ด +เย็น +เย็นใจ +เย็นชืด +เย็นตา +เย็นตาโฟ +เย็นเตาโฟ +เย็นเยียบ +เย็นเยือก +เย็นหู +เย็บ +เย็บกี่ +เย็บด้าย +เย็บลวด +เย็บเล่ม +เย็บอก +เยภุย- +เยภุยนัย +เยภุยยะ +เยภุยสิกา +เย้ย +เยอ +เย่อ +เยอรมัน +เยอว +เย่อหยิ่ง +เยอะ +เยอะแยะ +เยา +เย้า +เยาว- +เยาว์ +เยาวชน +เยาวน- +เยาวนะ +เยาวพา +เยาวพาณี +เยาวพาน +เยาวมาลย์ +เยาวยอด +เยาวราช +เยาวเรศ +เยาวลักษณ์ +เยาะ +เยิง +เยิน +เยิ่น +เยินยอ +เยิ่นเย้อ +เยิบๆ +เยิบยาบ +เยิ้ม +เยีย +เยี่ยง +เยียงผา +เยี่ยงอย่าง +เยียดยัด +เยียใด +เยียน +เยียบ +เยี่ยม +เยี่ยมๆ มองๆ +เยี่ยมยอด +เยี่ยมเยียน +เยี่ยมเยือน +เยี่ยมวิมาน +เยียมั่ง +เยียรบับ +เยียรยง +เยียว +เยี่ยว +เยี่ยวงัว +เยียวยง +เยียวยา +เยี่ยวอูฐ +เยียใหญ่ +เยือ +เยื่อ +เยื้อ +เยือก +เยือกเย็น +เยื่อเคย +เยือง +เยื่อง +เยื้อง +เยื้องกราย +เยื้องยัก +เยือน +เยื้อน +เยื่อใย +แย่ +แย้ +แยก +แยกเขี้ยว +แยกย้าย +แยกแย้ง +แยกแยะ +แยง +แย่ง +แย้ง +แยงยล +แยงแย่ +แยงแย้ +แย่แต้ +แยบ +แย็บ +แยบคาย +แยบยล +แยม +แย้ม +แย้มพราย +แยแส +แยะ +โย +โย้ +โยก +โยกตร์ +โยกย้าย +โยกเยก +โยกโย้ +โยค- +โยคเกณฑ์ +โยคจักษุ +โยคนิทรา +โยคยะ +โยคะ +โยคาพจร +โยคาวจร +โยคิน +โยคี +โยง +โย่ง +โย่งๆ +โย่งเย่ง +โยงโย่ +โยชก +โยชน์ +โยชนา +โยด +โยต +โยถิกะ +โยทะกา +โยธ- +โยธวาทิต +โยธา +โยธิน +โยน +โยนก +โยนกลอง +โยนกลอน +โยนยาว +โยนหลุม +โยนห่วง +โยนหัวโยนก้อย +โยนิโส +โยนิโสมนสิการ +โยนี +โยพนมัท +โยพนะ +โยม +โยเย +โย้เย้ +โยโส +ใย +ใยฟ้า +ใยยอง +ใยหิน +ไย +ไย่ +ไยดี +ไยไพ +ไยไย +ไย่ไย่ +ร +รก +รกชัฏ +รกช้าง +รกบิน +รกฟ้า +รกราก +รกร้าง +รกเรี้ยว +รง +รงกุ์ +รงค- +รงค์ +รงควัตถุ +รงรอง +รจนา +รจเรข +รจเลข +รจิต +รชกะ +รชตะ +รชนิ +รชนี +รชนีกร +รชนีจร +รชะ +รณ +รณ- +รณเกษตร +รณภู +รณภูมิ +รณรงค์ +รณสถาน +รด +รดน้ำ +รดี +รตนะ +รตะ +รติ +รถ +รถ- +รถจักรยาน +รถจักรยานยนต์ +รถฉุกเฉิน +รถโดยสารประจำทาง +รถปุงคพ +รถปุงควะ +รถไฟ +รถไฟฟ้า +รถยนต์ +รถยา +รถานึก +รเถสภะ +รท +รทนะ +รน +ร่น +ร้น +รนด +รนหาที่ +รบ +รบกวน +รบรา +รบเร้า +รบส +รบาญ +รพ +รพา +รพิ +รพี +รม +ร่ม +ร่มเกล้า +ร่มเกศ +ร่มชูชีพ +รมณี +รมณีย- +รมณีย์ +ร่มธง +ร่มผ้า +ร่มโพธิ์ร่มไทร +ร่มไม้ชายคา +รมย์ +ร่มเย็น +รมเยศ +รยะ +รยางค์ +รวก +รวง +ร่วง +รวงผึ้ง +ร่วงรุ้ง +ร่วงโรย +รวด +รวดเดียว +รวดเร็ว +รวน +ร่วน +รวนเร +รวบ +รวบรวม +รวบรัด +รวบหัวรวบหาง +รวม +ร่วม +ร่วมใจ +ร่วมท้อง +ร่วมประเวณี +ร่วมเพศ +ร่วมมือ +ร่วมรัก +ร่วมเรียงเคียงหมอน +ร่วมหอลงโรง +รวมหัว +ร่วมหัวงาน +ร่วมอุทร +รวย +รวยๆ +รวยริน +รวยรื่น +รวะ +รวิ +รวิวาร +รวี +รศนา +รส +รสก +รสชาติ +รสนา +รสนิยม +รสสุคนธ์ +รสายนเวท +รสิก +รหัท +รหัส +รหิต +รโห +รโหคต +รโหฐาน +รอ +ร่อ +รอก +รอง +ร่อง +ร้อง +ร้องขอ +รองคอ +รองเง็ง +รองจ่าย +รองช้ำ +ร้องฎีกา +รองทรง +รองท้อง +ร้องทุกข์ +รองทุน +รองเท้า +ร่องน้ำ +รองบ่อน +รองพื้น +ร้องเพลง +ร่องมด +ร้องโยนยาว +ร่องรอย +รองรัง +ร้องเรียกร้องหา +ร้องเรียน +ร้องเรือ +ร้องแรก +ร่องแร่ง +ร้องส่ง +ร้องห่ม +ร้องห่มร้องไห้ +ร้องไห้ +รอด +รอดชีวิต +รอดตัว +รอดหูรอดตา +รอน +รอนๆ +ร่อน +ร้อน +ร้อนตัว +ร่อนทอง +ร้อนผ้าเหลือง +ร้อนรน +ร่อนร่อน +ร่อนรับร่อนเร่ +ร่อนเร่ +รอนแรม +ร้อนวิชา +รอนสิทธิ์ +ร้อนอาสน์ +รอบ +รอบคอบ +รอบรู้ +รอม +รอมชอม +รอมร่อ +รอย +ร่อย +ร้อย +ร้อยกรอง +ร้อยแก้ว +ร้อยชั่ง +ร้อยทั้งร้อย +ร้อยแปด +รอยร้าว +ร้อยลิ้น +ร้อยลิ้นกะลาวน +ร้อยสีร้อยอย่าง +ร่อยหรอ +ร้อยหวาย +ร้อยหวี +ร้อยเอ็ด +ร้อยเอ็ดเจ็ดหัวเมือง +ร่อแร่ +ระ +ระกะ +ระกา +ระกำ +ระกำนา +ระกำป่า +ระเกะระกะ +ระคน +ระคาง +ระคาย +ระเค็ดระคาย +ระแคะ +ระแคะระคาย +ระฆัง +ระงม +ระงมไพร +ระงับ +ระงับพิษ +ระงี่ +ระแง้ +ระโงกหิน +ระชวย +ระดม +ระดะ +ระดับ +ระดับทะเล +ระดับทะเลปานกลาง +ระดา +ระด่าว +ระดู +ระดูขาว +ระเด่น +ระเดียง +ระแด +ระตู +ระทก +ระทด +ระทม +ระทวย +ระทอด +ระทา +ระทึก +ระทึง +ระแทะ +ระนัม +ระนาด +ระนาดแก้ว +ระนาดทุ้ม +ระนาดเอก +ระนาบ +ระนาบเอียง +ระนาม +ระนาว +ระเนน +ระเนระนาด +ระเนียด +ระแนง +ระแนะ +ระบบ +ระบบสุริยะ +ระบม +ระบอบ +ระบัด +ระบับ +ระบาญ +ระบาด +ระบานี +ระบานี้ +ระบาย +ระบายสี +ระบำ +ระบิ +ระบิล +ระบิลเมือง +ระบือ +ระบุ +ระเบง +ระเบ็ง +ระเบิด +ระเบิดขวด +ระเบิดทำลาย +ระเบิดน้ำตา +ระเบิดปรมาณู +ระเบิดเพลิง +ระเบิดมือ +ระเบิดเวลา +ระเบิดไฮโดรเจน +ระเบียง +ระเบียน +ระเบียบ +ระเบียบการ +ระเบียบวาระ +ระแบบ +ระใบ +ระฟ้า +ระมัดระวัง +ระมา +ระมาด +ระเมียร +ระย่อ +ระย่อม +ระยะ +ระยัง +ระยั้ง +ระยัด +ระยับ +ระย้า +ระยาน +ระยาบ +ระยำ +ระยำตำบอน +ระยิบระยับ +ระโยง +ระโยงระยาง +ระรวย +ระรอง +ระร่อน +ระรัว +ระราน +ระร่าย +ระราว +ระริก +ระรี่ +ระรึง +ระรื่น +ระรื้น +ระเร +ระเร่ +ระเร้ง +ระเร็ว +ระเริง +ระเรียง +ระเรียม +ระเรื่อย +ระแร่ +ระแรง +ระลง +ระลวง +ระลอก +ระลอง +ระลัด +ระลัดได +ระลึก +ระลุก +ระลุง +ระเลิง +ระเลียด +ระวัง +ระวังไพร +ระวังวัน +ระวาง +ระวาดระไว +ระวาม +ระวาย +ระวิง +ระแวง +ระแวดระวัง +ระไว +ระสะเก็ด +ระสาย +ระส่ำระสาย +ระสี +ระเสิดระสัง +ระหกระเหิน +ระหง +ระหวย +ระหว่าง +ระหองระแหง +ระหอบ +ระหัด +ระหาย +ระหุย +ระเห็จ +ระเหย +ระเหระหน +ระเหหน +ระเหหัน +ระเหิด +ระเหินระหก +ระแหก +ระแหง +ระโหย +ระอมระอา +ระอา +ระอิดระอา +ระอุ +รัก +รักข์ +รักขสะ +รักขา +รักขิต +รักดป +รักดะ +รักดีหามจั่ว รักชั่วหามเสา +รักตะ +รักบี้ +รักพี่เสียดายน้อง +รักยม +รักยาวให้บั่น รักสั้นให้ต่อ +รักร้อย +รักเร่ +รักแร้ +รักษ์ +รักษา +รักษาการ +รักษาการณ์ +รักหมู +รัง +รั้ง +รังกา +รังเกียจ +รังแก +รังไข่ +รังค์ +รังควาน +รังแค +รังดุม +รังแตน +รังนก +รังนาน +รังบวบ +รังผึ้ง +รังเพลิง +รังมด +รังรอง +รังรักษ์ +รังเรข +รังแรก +รังวัด +รังสรรค์ +รังสรัง +รังสฤษฏ์ +รังสิ +รังสิมันตุ์ +รังสิมา +รังสี +รังสีความร้อน +รังสีคอสมิก +รังสีแพทย์ +รังสีวิทยา +รังสีเหนือม่วง +รังหยาว +รัจฉา +รัช +รัช- +รัชกะ +รัชกาล +รัชชุ +รัชชูปการ +รัชฎาภิเษก +รัชด- +รัชดาภิเษก +รัชต- +รัชทายาท +รัชนะ +รัชนี +รัชนีกร +รัญจวน +รัฏฐาภิปาลโนบาย +รัฐ +รัฐ- +รัฐทูต +รัฐธรรมนูญ +รัฐบาล +รัฐบุรุษ +รัฐประศาสน์ +รัฐประศาสนนัย +รัฐประศาสนศาสตร์ +รัฐประศาสโนบาย +รัฐประหาร +รัฐมนตรี +รัฐวิสาหกิจ +รัฐศาสตร์ +รัฐสภา +รัด +รัดกุม +รัดเกล้า +รัดเข็มขัด +รัดช้อง +รัดตัว +รัดทึบ +รัดประคด +รัดประคน +รัดพัสตร์ +รัดรึง +รัดรูป +รัต +รัต- +รัตกัมพล +รัตคน +รัตจันทน์ +รัตตัญญู +รัตติ +รัตติกาล +รัตน- +รัตน์ +รัตนโกสินทร์ +รัตนตรัย +รัตนบัลลังก์ +รัตนสิงหาสน์ +รัตนะ +รัตนา +รัตนากร +รัตนาวลี +รัตมณี +รัตมา +รัถ +รัถยา +รัทเทอร์ฟอร์เดียม +รัน +รั้น +รันชนรันแชง +รันทด +รันทวย +รันทำ +รันแทะ +รันธะ +รับ +รับขวัญ +รับแขก +รับคำ +รับจ้าง +รับท้อง +รับประกัน +รับประทาน +รับปาก +รับผิด +รับผิดชอบ +รับมือ +รับรอง +รับเรือน +รับสั่ง +รับหน้า +รับไหว้ +รัมก- +รัมณีย- +รัมภา +รัมมี่ +รัมย์ +รัย +รัว +รั่ว +รั้ว +รั้วไก่ +รัศมิมัต +รัศมิมาน +รัศมี +รัษฎากร +รัส- +รัสสระ +รัสสะ +รา +ร่า +ร้า +ราก +รากแก้ว +รากขวัญ +รากฐาน +รากดิน +รากฝอย +รากฟัน +รากศัพท์ +รากษส +รากโษส +รากสาด +รากสาดน้อย +รากสาดใหญ่ +รากสามสิบ +รากเหง้า +ราข้อ +ราคะ +ราคา +ราคาตลาด +ราคิน +ราคี +ราง +ร่าง +ร้าง +ร่างกาย +รางจืด +รางชาง +รางดำ +รางแดง +รางนาน +รางบรรทัด +ร่างร้าน +รางวัล +ร่างแห +ราช +ราช- +ราชการ +ราชกิจจานุเบกษา +ราชครู +ราชญี +ราชดัด +ราชทัณฑ์ +ราชทินนาม +ราชทูต +ราชโทรหะ +ราชธรรม +ราชธานี +ราชนิกุล +ราชนีติ +ราชบัณฑิต +ราชบาตร +ราชบุตร +ราชบุรุษ +ราชปะแตน +ราชพฤกษ์ +ราชภัฏ +ราชมัล +ราชมาณพ +ราชมาษ +ราชมาส +ราชย์ +ราชยาน +ราชโยค +ราชโยงการ +ราชรถมาเกย +ราชวงศ์ +ราชวรมหาวิหาร +ราชวรวิหาร +ราชวโรงการ +ราชวัติ +ราชศาสตร์ +ราชสกุล +ราชสันตติวงศ์ +ราชสาสน์ +ราชสีห์ +ราชสีห์ตัวผู้ +ราชสีห์ตัวเมีย +ราชสีห์สองตัวอยู่ถ้ำเดียวกันไม่ได้ +ราชสูยะ +ราชหัตถเลขา +ราชองครักษ์ +ราชโองการ +ราชะ +ราชัน +ราชันย์ +ราชัย +ราชา +ราชาคณะ +ราชาโชค +ราชาธิราช +ราชาภิเษก +ราชายตนะ +ราชาฤกษ์ +ราชาวดี +ราชาวลี +ราชาศัพท์ +ราชิ +ราชินิกุล +ราชินี +ราชินีกุล +ราชินีนาถ +ราชินูปถัมภ์ +ราชี +ราชูปถัมภ์ +ราชูปโภค +ราเชน +ราเชนทร์ +ราเชนทรยาน +ราโชงการ +ราโชปถัมภ์ +ราโชปโภค +ราโชวาท +ราไชศวรรย์ +ราญ +ราญรอน +ราด +ราต +ราตร +ราตรี +ราตรีประดับดาว +ราโท +ราน +ร่าน +ร้าน +ร้านม้า +ราบ +ราบคาบ +ราบเป็นหน้ากลอง +ราบรื่น +ราบเรียบ +ราปีก +ราพณ์ +ราพณาสูร +ราม +รามเกียรติ์ +รามสูร +รามัญ +รามา +ราย +ร่าย +ร้าย +ร้ายกาจ +รายการ +รายงาน +รายงานการประชุม +รายจ่าย +รายทาง +ร่ายไม้ +ร่ายรัง +รายรับ +ร้ายแรง +รายวิชา +ร่าเริง +ราเริด +ราแรม +ราว +ร้าว +ราวกะ +ราวกับ +ราวข่าว +ร้าวฉาน +ราวป่า +ร้าวราน +ราวี +ราศี +ราษฎร +ราษฎร์ +ราษตรี +ราษราตริน +ราษราตรี +ราสี +ราหุ +ร่าหุ์ +ราหู +รำ +ร่ำ +รำเขนง +รำคาญ +รำโคม +รำงับ +รำจวน +รำชั่วโทษพากย์ +รำซุย +รำเท้า +รำบาญ +ร่ำไป +รำผี +รำพัด +รำพัดชา +รำพัน +รำพาย +รำพึง +รำเพย +รำแพน +รำไพ +รำมะแข +รำมะนา +รำมะนาด +รำมะร่อ +รำไม่ดีโทษปี่โทษกลอง +รำยวน +รำย้อย +รำแย้ +รำรงค์ +ร่ำรวย +รำราญ +รำรำ +ร่ำรี้ร่ำไร +รำเร +ร่ำเรียน +รำไร +ร่ำไร +รำลึก +รำวง +รำหัด +รำหัส +ร่ำไห้ +ริ +ริก +ริกๆ +ริดสีดวง +ริน +รินๆ +ริ้น +ริบ +ริบทรัพย์สิน +ริบบิ้น +ริบราชบาตร +ริบรี่ +ริบหรี่ +ริปอง +ริปุ +ริปู +ริม +ริมฝีปาก +ริเริ่ม +ริ้ว +ริษยา +ริอ่าน +รี +รี่ +รี้ +รีๆ ขวางๆ +รีด +รีดนาทาเน้น +รีดนาทาเร้น +รีดลูก +รีดักชัน +รีต +รีเนียม +รีบ +รีบรุด +รี้พล +รีม +รีรอ +รีๆ รอๆ +รี้ริก +รึกต์ +รึง +รึ้ง +รื่น +รื้น +รื่นรมย์ +รื่นเริง +รื้อ +รื้อแต่หลังคาเขา หลังคาเราไม่รื้อ +รื้อฟื้น +รุ +รุก +รุกข- +รุกข์ +รุกขกะ +รุกขชาติ +รุกขมูล +รุกขมูลิกธุดงค์ +รุกขา +รุกฆาต +รุกร้น +รุกราน +รุกรุย +รุกษะ +รุข้าว +รุ่ง +รุ้ง +รุ่งเช้า +รุ้งพราย +รุ้งร่วง +รุงรัง +รุ่งเรือง +รุ่งโรจน์ +รุจ +รุจน +รุจา +รุจิ +รุจิระ +รุจิรา +รุจิเรข +รุจี +รุชา +รุด +รุดหน้า +รุต +รุทธ์ +รุทร +รุธิร +รุเธียร +รุน +รุ่น +รุ่นกระทง +รุ่นตะกอ +รุ่นราวคราวเดียวกัน +รุนแรง +รุบรู่ +รุบาการ +รุม +รุ่ม +รุมไข้ +รุมไฟ +รุ่มรวย +รุ่มร่าม +รุย +รุ่ย +รุ่ยร่าย +รุรุ +รุษฏ์ +รุหะ +รุหาญ +รู +รู่ +รู้ +รู้แกว +รู้ความ +รู้คิด +รู้คิดรู้อ่าน +รู้คุณ +รู้งูๆ ปลาๆ +รู้จัก +รู้จักเก็บรู้จักเขี่ย +รู้จักเก็บรู้จักงำ +รู้จักมักคุ้น +รู้จักมักจี่ +รูจี +รู้ฉลาด +รู้เช่นเห็นชาติ +รูด +รู้ตัว +รู้ตื้นลึกหนาบาง +รู้ทัน +รู้ที +รูทีเนียม +รู้เท่า +รู้เท่าไม่ถึงการณ์ +รู้น้อยพลอยรำคาญ +รูบิเดียม +รูป +รูป- +รูปชี +รูปธรรม +รูปพยัญชนะ +รูปพรรณ +รูปภาพ +รูปร่าง +รูปลอก +รูปสมบัติ +รูปสระ +รูปิยะ +รูปี +รู้มลัก +รู้มลาก +รู้มาก +รู้มากยากนาน +รู้ยาวรู้สั้น +รูเล็ตต์ +รู้ไว้ใช่ว่า ใส่บ่าแบกหาม +รู้สึก +รู้ไส้ +รู้หลบเป็นปีก รู้หลีกเป็นหาง +รูหะ +รู้หาญรู้ขลาด +รู้เห็น +รู้เห็นเป็นใจ +รู้อย่างเป็ด +รู้อยู่ +รู้เองเป็นเอง +เร่ +เรข +เรขา +เรขาคณิต +เรขาคณิตบริสุทธิ์ +เรขาคณิตวิเคราะห์ +เร็ง +เร่ง +เร้ง +เร่งมือ +เร่งรัด +เร่งร่าย +เร่งรีบ +เร่งเร้า +เรณุ +เรณุก +เรณู +เรดอน +เรดาร์ +เรเดียม +เร้น +เร้นลับ +เรรวน +เร่ร่อน +เร่ร่าย +เรไร +เร็ว +เร่ว +เรวดี +เรอ +เร่อ +เร่อร่า +เรา +เร่า +เร่าๆ +เร้า +เร่าร้อน +เราะ +เราะราย +เราะร้าย +เริง +เริด +เริม +เริ่ม +เริ้ม +เริศร้าง +เรี่ย +เรี้ยๆ +เรียก +เรียกเนื้อ +เรียง +เรียงๆ +เรียงความ +เรียงพิมพ์ +เรียงพี่เรียงน้อง +เรียงรัน +เรียงราย +เรียงหน้ากระดาน +เรียงหมอน +เรียด +เรียน +เรียนปฏิบัติ +เรียนผูกต้องเรียนแก้ +เรียบ +เรียบๆ +เรียบร้อย +เรียบเรียง +เรียบวุธ +เรียม +เรี่ยม +เรี่ยราด +เรี่ยราย +เรี่ยไร +เรียว +เรี่ยว +เรี้ยวรก +เรี่ยวแรง +เรียวหนาม +เรือ +เรื่อ +เรื้อ +เรือก +เรือกสวน +เรือขนาน +เรือขาดหางเสือ +เรือง +เรื่อง +เรื้อง +เรืองนาม +เรืองรอง +เรื่องราว +เรืองไร +เรื่องสั้น +เรืองอำนาจ +เรือด +เรือดไม้ +เรือน +เรื้อน +เรือนแก้ว +เรือนเครื่องผูก +เรือนเครื่องสับ +เรือนจำ +เรือนตะเกียง +เรือนธาตุ +เรือนเบี้ย +เรือนฝากระดาน +เรือนแฝด +เรือนแพ +เรือนไฟ +เรือนยอด +เรือนหอ +เรือบิน +เรือพ่วง +เรือไฟ +เรื่อย +เรื้อย +เรื่อยเจื้อย +เรื่อยเปื่อย +เรือโยง +เรือรบ +เรื้อรัง +เรือล่มในหนอง ทองจะไปไหน +เรือล่มเมื่อจอด ตาบอดเมื่อแก่ +เรือแหวด +เรือใหญ่คับคลอง +แร +แร่ +แรก +แร็กเกต +แรกนา +แรกนาขวัญ +แรง +แร่ง +แร้ง +แรงงาน +แรงงานและสวัสดิการสังคม +แรงงานสัมพันธ์ +แรงดึงดูด +แรงเทียน +แรงม้า +แร่งริ้ว +แรงสู่ศูนย์กลาง +แรงหนีศูนย์กลาง +แรงเหวี่ยง +แร่งไหม +แรเงา +แรด +แรดตัวผู้ +แรดตัวเมีย +แร้นแค้น +แรม +แรมรอน +แรมรา +แรมโรย +แร้ว +แรเส้น +แระ +โร +โร่ +โรค +โรค- +โรคจิต +โรคจิตเภท +โรคนิทาน +โรคประจำตัว +โรคประสาท +โรคระบบประสาท +โรคศิลปะ +โรคสมอง +โรคา +โรคาพยาธิ +โรคาพาธ +โรง +โรงคัล +โรงงาน +โรงธาร +โรงธารคำนัล +โรงนา +โรงรับจำนำ +โรงเรียน +โรงเรียนประจำ +โรงเรียนสาธิต +โรงเรือน +โรงแรม +โรงแสง +โรจ +โรจน์ +โรเดียม +โรตี +โรตีสายไหม +โรท +โรทนะ +โรธ +โรธร +โรปนะ +โรม +โรมมัย +โรมรัน +โรมัญจ +โรมัน +โรมันคาทอลิก +โรเมอร์ +โรย +โรยขนมจีน +โรยรา +โรยหน้า +โรเร +โรษ +โรษณะ +โรหิณี +โรหิต +ไร +ไร่ +ไร้ +ไรฟัน +ไรย์ +ไรเรือง +ฤ +ฤกษ์ +ฤกษณะ +ฤกษ์บน +ฤกษ์พานาที +ฤกษ์ล่าง +ฤคเวท +ฤชา +ฤชากร +ฤชุ +ฤณ +ฤดี +ฤดียา +ฤดู +ฤดูกาล +ฤต +ฤติยา +ฤตุ +ฤตุสนาน +ฤทธา +ฤทธิ์ +ฤทัย +ฤษภ +ฤษยา +ฤษี +ฤๅ +ฤๅชุ +ฤๅชุตา +ฤๅดี +ฤๅทัย +ฤๅเยา +ฤๅษี +ฤๅษีแปลงสาร +ฤๅษีผสมแล้ว +ฤๅษีเลี้ยงลิง +ฤๅสาย +ล +ลก +ลการ +ลกุจ +ลคุฑ +ลคุฬ +ลฆุ +ลฆุจิต +ลฆุภาพ +ลฆุโภชน์ +ลง +ล่ง +ลงกลอน +ลงกา +ลงขัน +ลงข่าว +ลงแขก +ลงคอ +ลงเงิน +ลงชื่อ +ลงแดง +ลงตัว +ลงทอง +ลงท้อง +ลงท่า +ลงท้าย +ลงทุน +ลงโทษ +ลงนา +ลงเนื้อเห็นด้วย +ลงโบสถ์ +ลงแป้ง +ลงผี +ลงฝัก +ลงพระบังคน +ลงพื้น +ลงพุง +ลงมีด +ลงมือ +ลงยา +ลงรอยกัน +ลงรัก +ลงราก +ลงแรง +ลงโรง +ล้งเล้ง +ลงสรง +ลงหญ้าช้าง +ลงหิน +ลงอาชญา +ลงอาญา +ลงอุโบสถ +ลงเอย +ลด +ลดเขื่อน +ลดราวาศอก +ลดละ +ลดเลี้ยว +ลดเลี้ยวเกี้ยวพา +ลดหย่อน +ลดหลั่น +ลดา +ลดาวัลย์ +ลน +ล่น +ล้น +ล้นเกล้าล้นกระหม่อม +ลนควัน +ล้นพ้น +ลนลาน +ล้นหลาม +ลบ +ลบม +ลบรอย +ลบล้าง +ลบเลือน +ลบโลก +ลบศักราช +ลบหลู่ +ลบเหลี่ยม +ลบอง +ลปก +ลปน +ลพ +ลพุช +ลม +ลมๆ +ล่ม +ล้ม +ลมกรด +ลมขึ้น +ล้มคว่ำ +ลมค้า +ลมงวง +ล่มจม +ลมจับ +ลมแดง +ลมทวนลมค้า +ลมทะเล +ล้มทั้งยืน +ลมบก +ลมบ้าหมู +ลมปราณ +ลมปาก +ลมพัดชายเขา +ลมพัดหลวง +ลมพิษ +ลมเพลมพัด +ล่มฟ้า +ลมไม่ดี +ลมล่อง +ล้มละลาย +ล้มลุก +ล้มลุกคลุกคลาน +ล้มเลิก +ลมแล้ง +ลมๆ แล้งๆ +ลมว่าว +ลมเสีย +ล้มหมอนนอนเสื่อ +ลมาด +ลรรลุง +ลลนา +ลลาฏ +ลลิต +ลวก +ลวง +ล่วง +ล้วง +ล้วงกระเป๋า +ล่วงเกิน +ล่วงขื่อ +ลวงค์ +ล้วงคองูเห่า +ล่วงคำ +ล้วงตับ +ลวงตา +ล่วงประเวณี +ล่วงแป +ล่วงพ้น +ล้วงมือ +ล่วงรู้ +ล่วงลับ +ล่วงล้ำ +ล่วงเลย +ลวงเล้า +ล่วงว่า +ล่วงเวลา +ล้วงไส้ +ล่วงหน้า +ลวณะ +ลวด +ลวดลาย +ลวดสปริง +ลวดหนัง +ลวดหนาม +ล้วน +ล้วนๆ +ลวนลาม +ลวนะ +ล่วม +ลวะ +ลวิตร +ลหุ +ลหุก- +ลหุกะ +ลหุกาบัติ +ลหุโทษ +ล่อ +ล้อ +ลอก +ล็อกเกต +ลอกคราบ +ลอกท้องร่อง +ลอกเลน +ลอกแลก +ลอการิทึม +ลอง +ล่อง +ลองกอง +ล่องแก่ง +ล่องจวน +ลองจิจูด +ลองใจ +ล่องชาด +ลองเชิง +ลองดี +ล่องถุน +ลองธรรม์ +ลองใน +ลองไน +ลองภูมิ +ล่องแมว +ล่องหน +ลอด +ลอดช่อง +ลอน +ล่อน +ล่อนแก่น +ล่อนจ้อน +ลอนทอง +ลอบ +ลอบกัด +ลอม +ล้อม +ลอมชอม +ล้อมปรวด +ลอมพอก +ล้อมวง +ลอย +ลอยๆ +ล่อยๆ +ลอยกระทง +ลอยแก้ว +ลอยคอ +ลอยช้อน +ลอยชาย +ลอยดอก +ลอยตัว +ลอยนวล +ลอยบาป +ลอยแพ +ลอยฟ้า +ลอยเมฆ +ลอยลำ +ลอยหน้า +ล่อลวง +ล้อเลียน +ล้อเลื่อน +ล่อแล่ +ลอว์เรนเซียม +ล่อหลอก +ล้อหลอก +ล่อแหลม +ลออ +ละ +ล่ะ +ละกล +ละกูมะนิส +ละขัดละขืน +ละคร +ละครยก +ละคิ +ละคึก +ละงาด +ละงิด +ละติจูด +ละทิ้ง +ละบม +ละบอง +ละบองไฟ +ละบองราหู +ละบัด +ละบือ +ละเบ็ง +ละโบม +ละม่อม +ละมั่ง +ละมา +ละมาน +ละม้าย +ละมุ +ละมุด +ละมุน +ละมุนละไม +ละเม็ด +ละเมอ +ละเมาะ +ละเมิด +ละเมิดลิขสิทธิ์ +ละเมิน +ละเมียด +ละเมียบ +ละแมะ +ละโมก +ละโมบ +ละไม +ละรี +ละลด +ละลนละลาน +ละลมละลาย +ละลวย +ละลอก +ละลอบละเล้า +ละลัง +ละลัด +ละล้า +ละลาน +ละลาบละล้วง +ละลาย +ละล้าละลัง +ละล้าว +ละล่ำละลัก +ละลิบ +ละลุง +ละลุม +ละเลง +ละเลงขนมเบื้องด้วยปาก +ละเลย +ละเล้า +ละเลาะ +ละเลาะละลอง +ละเลิง +ละเลียด +ละเลียบ +ละเลือก +ละไล้ +ละวล +ละว้อ +ละว้า +ละวาง +ละวาด +ละเวง +ละเว้น +ละแวก +ละโว้ +ละหมาด +ละหมาดญานาซะฮ์ +ละหลัด +ละห้อย +ละหาน +ละหุ่ง +ละเหย +ละเหี่ย +ละองละมั่ง +ละออง +ละอาย +ละเอียด +ละเอียดลออ +ละแอน +ลัก +ลักไก่ +ลักขณะ +ลักขณา +ลักขะ +ลักขี +ลักเค้า +ลักจั่น +ลักปิดลักเปิด +ลักพา +ลักเพศ +ลักยิ้ม +ลักลอบ +ลักลั่น +ลักลาย +ลักเลียม +ลักศพ +ลักษณ- +ลักษณนาม +ลักษณะ +ลักษณาการ +ลักษมณ์ +ลักษมาณา +ลักษมี +ลักษะ +ลักสร้อย +ลักสี +ลักหลับ +ลัคคะ +ลัคน- +ลัคน์ +ลัคนา +ลัง +ลั่ง +ลังกา +ลังคิ +ลังคี +ลังถึง +ลังลอง +ลังเล +ลังสาด +ลัชชา +ลัชชี +ลัญจ์ +ลัญจกร +ลัญฉ +ลัญฉกร +ลัญฉน์ +ลัฐิ +ลัฐิกา +ลัด +ลัดนิ้วมือ +ลัดเนื้อ +ลัดเลาะ +ลัดแลง +ลัดวงจร +ลัดา +ลัทธ์ +ลัทธิ +ลัน +ลั่น +ลั่นกุญแจ +ลั่นไก +ลั่นฆ้อง +ลั่นดาล +ลันเต +ลันเตา +ลันไต +ลั่นถัน +ลั่นทม +ลันทวย +ลันโทม +ลั่นนก +ลั่นปาก +ลั่นวาจา +ลับ +ลับตา +ลับปาก +ลับฝีปาก +ลับลมคมใน +ลับล่อ +ลับๆ ล่อๆ +ลับลี้ +ลับแล +ลับสมอง +ลับหลัง +ลับหู +ลัพธ์ +ลัพธิ +ลัภ +ลัภนะ +ลัภย์ +ลัมพ์ +ลัย +ลัย- +ลัยกาล +ลัยคต +ลา +ล่า +ล้า +ลาก +ลากข้าง +ลากษา +ลากเส้น +ลากหนามจุกช่อง +ลาขา +ลาข้าวพระ +ลาง +ล่าง +ล้าง +ลางคัล +ล้างแค้น +ลางงิด +ล้างท้อง +ลางที +ลางเนื้อชอบลางยา +ล้างปาก +ล้างป่าช้า +ล้างผลาญ +ล้างไพ่ +ล้างมือ +ลางลิง +ล้างโลก +ล้างสมอง +ลางสาด +ล้างอาย +ลางาด +ล้างาด +ลาเง็ด +ลาช +ลาชา +ลาญ +ลาญทัก +ลาด +ลาดเขา +ลาดตระเวน +ลาดทวีป +ลาดเท +ลาดพระบาท +ลาดยาง +ลาดเลา +ล้าต้า +ลาตาย +ล่าเตียง +ล้าเตียง +ลาน +ล่าน +ล้าน +ลาบ +ลาป +ลาพรรษา +ลาพอน +ลาพุ +ลาพุช +ลาเพ +ลาเพา +ลาภ +ลาภมิควรได้ +ลาม +ล่าม +ลามก +ลามปาม +ลามลวน +ลาย +ล้าย +ลายขัด +ลายคราม +ลายตา +ลายเทศ +ลายแทง +ลายน้ำ +ลายน้ำทอง +ลายพระหัตถ์ +ลายพาดกลอน +ลายมือ +ลายมือชื่อ +ลายไม้ +ลายลักษณ์ +ลายสอ +ลายสอง +ลายสาบ +ลายสือ +ลายอย่าง +ลายฮ่อ +ลาโรง +ลาลนะ +ลาลส +ลาลา +ลาโลก +ลาว +ลาวก +ลาวัณย์ +ลาวา +ลาสนะ +ล้าสมัย +ลาสิกขา +ล้าหลัง +ลำ +ล่ำ +ล้ำ +ลำกระโดง +ลำกล้อง +ลำเข็ญ +ลำแข +ลำแข้ง +ลำเค็ญ +ลำเคือง +ลำงาด +ลำเจียก +ลำเจียกหนู +ลำดวน +ลำดับ +ลำตัด +ลำธาร +ลำนัก +ลำนำ +ลำเนา +ลำบอง +ลำบาก +ลำบุ +ลำปำ +ลำพวน +ลำพอง +ลำพัง +ลำพู +ลำพู่กัน +ลำเพ็ญ +ลำเพา +ลำแพง +ลำแพน +ลำโพง +ลำไพ่ +ลำภุขัน +ลำมะลอก +ลำมาด +ลำมาบ +ลำเมาะ +ลำเมียบ +ลำยอง +ลำยา +ลำไย +ลำลอง +ล่ำลา +ลำลาบ +ลำลำ +ลำลึก +ลำเลาะ +ลำเลิก +ล้ำเลิศ +ลำเลียง +ลำเลียบ +ลำเวียง +ลำเวียน +ล่ำสัน +ลำเสา +ลำไส้ +ลำหนัก +ล้ำหน้า +ลำห้วย +ลำหักลำโค่น +ลำอุด +ลำเอียก +ลำเอียง +ลำโอง +ลิ +ลิกขา +ลิกไนต์ +ลิกษา +ลิกุจ +ลิเก +ลิขนะ +ลิขสิทธิ์ +ลิขิต +ลิง +ลิงค์ +ลิงจุ่น +ลิงชิงหลัก +ลิงตกต้นไม้ +ลิงลม +ลิงโลด +ลิงหลอกเจ้า +ลิด +ลิดตีนปู +ลิดรอน +ลิต +ลิตมัส +ลิตร +ลิเทียม +ลิ่น +ลิ้น +ลิ้นกระด้างคางแข็ง +ลิ้นกระบือ +ลินโกรย +ลิ้นไก่ +ลิ้นควาย +ลิ้นงูเห่า +ลินจง +ลิ้นจะกวด +ลิ้นจี่ +ลิ้นชัก +ลิ่นต้น +ลิ้นตวัดถึงหู +ลิ้นตะกวด +ลิ้นทอง +ลิ่นทะเล +ลิ้นทะเล +ลิ้นปี่ +ลิ้นมังกร +ลิ้นไม่มีกระดูก +ลิ้นลม +ลิ้นลังกา +ลินลา +ลินลากระทุ่ม +ลินลากระบี่ +ลิ้นลาย +ลินสีด +ลิ้นเสือ +ลิ้นหมา +ลิ่นฮื้อ +ลินิน +ลิบ +ลิบลับ +ลิบลิ่ว +ลิปดา +ลิปต์ +ลิปสติก +ลิปิ +ลิปิกร +ลิปิการ +ลิฟต์ +ลิเภา +ลิ่ม +ลิ้ม +ลิมป์ +ลิมปนะ +ลิลิต +ลิว +ลิ่ว +ลิสง +ลี +ลี่ +ลี้ +ลีซอ +ลีบ +ลี้ลับ +ลีลา +ลีลากระทุ่ม +ลีลาศ +ลีฬหา +ลึก +ลึกซึ้ง +ลึกลับ +ลึกล้ำ +ลึงค์ +ลึงค์นายพราน +ลืด +ลื่น +ลื้น +ลืบ +ลืม +ลืมตน +ลืมต้น +ลืมตัว +ลืมตา +ลือ +ลื่อ +ลื้อ +ลือชา +ลือชาปรากฏ +ลื่อชื่อ +ลือสาย +ลุ +ลุก +ลุกลน +ลุกลาม +ลุกลี้ลุกลน +ลุกฮือ +ลุแก่โทษ +ลุแก่อำนาจ +ลุง +ลุ้ง +ลุต +ลุท +ลุทกะ +ลุทธ์ +ลุ่น +ลุ่นๆ +ลุ่นตุ้น +ลุ่นโตง +ลุปต์ +ลุพธ์ +ลุพธกะ +ลุ่ม +ลุ่มๆ ดอนๆ +ลุ่มน้ำ +ลุ่มเนื้อ +ลุมป์ +ลุมพี +ลุมพู +ลุ่มเล้า +ลุ่มหลง +ลุย +ลุ่ย +ลุ้ย +ลุ่ยหู +ลุล่วง +ลุลาย +ลุสา +ลุอำนาจ +ลู่ +ลูก +ลูกกก +ลูกกรง +ลูกกรอก +ลูกกระเดือก +ลูกกระพรวน +ลูกกระแอม +ลูกกลอน +ลูกกลิ้ง +ลูกกวาด +ลูกกะโล่ +ลูกกะแอ +ลูกกัลปพฤกษ์ +ลูกแก้ว +ลูกโกลน +ลูกไก่ +ลูกไก่อยู่ในกำมือ +ลูกขวัญ +ลูกขัด +ลูกข่าง +ลูกข้าว +ลูกขุน +ลูกขุน ณ ศาลหลวง +ลูกขุน ณ ศาลา +ลูกขุนพลอยพยัก +ลูกเขย +ลูกเขยตายแม่ยายชักปรก +ลูกเขยตายแม่ยายทำศพ +ลูกครอก +ลูกครึ่ง +ลูกคลัก +ลูกความ +ลูกคอ +ลูกคอก +ลูกคัน +ลูกค้า +ลูกคำ +ลูกคิด +ลูกเคล้า +ลูกฆ้อง +ลูกจ๊อก +ลูกจ้าง +ลูกเจี๊ยบ +ลูกช่วง +ลูกช้าง +ลูกชิด +ลูกชิ้น +ลูกโซ่ +ลูกดอก +ลูกดิ่ง +ลูกโดด +ลูกตั้ง +ลูกตุ้ม +ลูกเต้า +ลูกเต๋า +ลูกแตก +ลูกถ้วย +ลูกเถื่อน +ลูกแถว +ลูกทอย +ลูกท่านหลานเธอ +ลูกทุ่ง +ลูกเธอ +ลูกน้อง +ลูกนา +ลูกน้ำ +ลูกนิมิต +ลูกบท +ลูกบวบ +ลูกบ้าน +ลูกบาศก์ +ลูกบิด +ลูกบุญธรรม +ลูกเบี้ยว +ลูกประคบ +ลูกประคำ +ลูกประคำผี +ลูกประสม +ลูกประสัก +ลูกประหล่ำ +ลูกปราย +ลูกปละ +ลูกปลา +ลูกปะกน +ลูกปัด +ลูกปา +ลูกป่า +ลูกปืน +ลูกปืนใหญ่ +ลูกแป +ลูกโป่ง +ลูกโป่งสวรรค์ +ลูกผสม +ลูกผักชี +ลูกผีลูกคน +ลูกผู้ชาย +ลูกผู้น้อง +ลูกผู้พี่ +ลูกผู้หญิง +ลูกไผ่ +ลูกฝาแฝด +ลูกแฝด +ลูกพรวน +ลูกพริก +ลูกพลู +ลูกพี่ +ลูกพี่ลูกน้อง +ลูกฟัก +ลูกฟูก +ลูกไฟ +ลูกมโหตร +ลูกมะหวด +ลูกมาด +ลูกมือ +ลูกโม่ +ลูกไม้ +ลูกไม้หล่นไม่ไกลต้น +ลูกยอ +ลูกย่าง +ลูกยาเธอ +ลูกโยน +ลูกรอก +ลูกระมาศ +ลูกรัง +ลูกรุ่ย +ลูกเรือ +ลูกลม +ลูกล้อ +ลูกล่า +ลูกเล่น +ลูกเลี้ยง +ลูกแล่ง +ลูกโลก +ลูกไล่ +ลูกวัด +ลูกศิษย์ +ลูกสมภารหลานเจ้าวัด +ลูกสมุน +ลูกสวรรค์ +ลูกสวาท +ลูกสะบ้า +ลูกสะใภ้ +ลูกสังกะสี +ลูกสูบ +ลูกเสือ +ลูกหนี้ +ลูกหนู +ลูกหมด +ลูกหม้อ +ลูกหมาก +ลูกหมู่ +ลูกหลง +ลูกหลวง +ลูกหาบ +ลูกหิน +ลูกหินบด +ลูกหีบ +ลูกเห็บ +ลูกแห +ลูกแหง่ +ลูกอม +ลูกเอ็น +ลูกเอ็ล +ลูขะ +ลูตา +ลูติกา +ลู่ทาง +ลูทีเชียม +ลูนะ +ลูบ +ลูบคม +ลูบคลำ +ลูบตัว +ลูบไล้ +ลูบหน้าปะจมูก +ลู่หลี่ +เลก +เล็ก +เล็กดา +เล็กน้อย +เล็กพริกขี้หนู +เลกวัด +เลข +เลขกะ +เลขคณิต +เลขจำนวน +เลขชี้กำลัง +เลขโดด +เลขนะ +เลขผา +เลขยะ +เลขยันต์ +เลขลำดับ +เลขหมาย +เลขา +เลขาธิการ +เลขานุการ +เล็ง +เล้ง +เล็งลัคน์ +เล่งฮื้อ +เลเซอร์ +เลฑฑุ +เลณ +เลณฑุ +เล็ด +เล็ดลอด +เลต +เลน +เล็น +เล่น +เล่นกล +เล่นกับไฟ +เล่นขายของ +เล่นคำ +เล่นงาน +เลนจง +เล่นชู้ +เล่นตลก +เล่นตัว +เล่นเบี้ย +เล่นพวก +เล่นพิเรนทร์ +เล่นเพลงยาว +เล่นเพื่อน +เล่นแร่แปรธาตุ +เล่นลิ้น +เลนส์ +เลนส์ตีบแสง +เลนส์ถ่างแสง +เลนส์นูน +เล่นสวาท +เลนส์เว้า +เลนส์สัมผัส +เล่นสำนวน +เลนหะรี +เล่นหัว +เล่นหาง +เล่นหูเล่นตา +เล่นเอาเถิดเจ้าล่อ +เล็บ +เล็บครุฑ +เล็บควาย +เลบง +เล็บนาง +เล็บมือนาง +เล็บเหยี่ยว +เลป- +เลปกร +เลปน์ +เลเป +เลเพ +เลเพลาดพาด +เล็ม +เล่ม +เล็มล่า +เลย +เลยตามเลย +เลยเถิด +เลว +เลวง +เลวูโลส +เลศ +เลษฏุ +เลห +เล่ห์ +เล่ห์กระเท่ห์ +เลหยะ +เลหลัง +เลหลา +เล่ห์เหลี่ยม +เลหะ +เลอ +เล่อ +เลอมาน +เล่อล่า +เลอะ +เลอะเทอะ +เละ +เละเทะ +เลา +เลาๆ +เล่า +เล้า +เลากัย +เล่าเรียน +เล่าลือ +เล้าโลม +เลาะ +เลิก +เลิกล้ม +เลิ่กลั่ก +เลิ้ง +เลินเล่อ +เลิศ +เลีย +เลียง +เลี่ยง +เลี้ยง +เลียงขาว +เลี้ยงแขก +เลี้ยงช้างกินขี้ช้าง +เลี้ยงดู +เลี้ยงต้อย +เลี้ยงโต๊ะ +เลี้ยงปากเลี้ยงท้อง +เลียงผา +เลียงฝ้าย +เลียงมัน +เลี้ยงรับ +เลี้ยงลา +เลี้ยงลูกเสือลูกจระเข้ +เลี้ยงส่ง +เลียน +เลี่ยน +เลียนไฟ +เลียบ +เลียบค่าย +เลียบเคียง +เลียบเมือง +เลียม +เลี่ยม +เลียว +เลี้ยว +เลี้ยวลด +เลือก +เลือกตั้ง +เลือกที่รักมักที่ชัง +เลือกนักมักได้แร่ +เลือกสรร +เลือง +เลื่อง +เลื่องลือ +เลือด +เลือดขึ้นหน้า +เลือดเข้าตา +เลือดเนื้อ +เลือดเนื้อเชื้อไข +เลือดในอก +เลือดฝาด +เลือดไม้ +เลือดเย็น +เลือดร้อน +เลือดล้างหน้า +เลือดอุ่น +เลือน +เลื่อน +เลื่อนที่ +เลื่อนเปื้อน +เลื่อนลอย +เลื่อม +เลื่อมใส +เลื่อย +เลื้อย +เลื้อยคลาน +เลื้อยเจื้อย +เลื่อยล้า +แล +แล่ +แล้ +แลก +แล็กโทส +แลกเปลี่ยน +แลง +แล่ง +แล้ง +แลงกินฟัน +แล่งพระราม +แลน +แล่น +แลนทานัม +แลบ +แล้ว +แล้วกัน +แล้วด้วย +แล้วแต่ +แล้วไป +แล้ว...เล่า +แล้วๆ เล่าๆ +และ +และเล็ม +และเลียม +โล่ +โล้ +โลก +โลก- +โลกเชษฐ์ +โลกธรรม +โลกธาดา +โลกธาตุ +โลกนาถ +โลกบาล +โลกย์ +โลกยะ +โลกวัชชะ +โลกวิทู +โลกสถิติ +โลกอุดร +โลกัตถจริยา +โลกันตร์ +โลกัย +โลกา +โลกาธิบดี +โลกาธิปไตย +โลกานุวัตร +โลกาภิวัตน์ +โลกามิส +โลกายัต +โลกาวินาศ +โลกิยะ +โลกีย์ +โลกียวัตร +โลกุตรธรรม +โลกุตระ +โลเกศ +โลง +โล่ง +โล้ง +โล้งโต้ง +โล่งโถง +โลจนะ +โลณะ +โลด +โลดเต้น +โลดทะนง +โลดโผน +โลดแล่น +โล่ติ๊น +โลโต +โลท +โลน +โล้น +โลปะ +โลภ +โลภโมโทสัน +โลม +โลมชาติ +โลมเล้า +โลมะ +โลมา +โลล +โลลุป +โลเล +โล้เล้ +โลโล +โลโล้ +โลห- +โลหกุมภี +โลหะ +โลหะเจือ +โลหัช +โลหิต +ไล่ +ไล้ +ไล่ช้าง +ไล่ที่ทำวัง +ไล่น้ำ +ไล่เบี้ย +ไลย +ไลลา +ไล่ลูกฆ้อง +ไลเลย +ไล่เลี่ย +ไล่เลียง +ไลไล้ +ไล่ออก +ฦ +ฦๅ +ฦๅชา +ฦๅสาย +ว +วก +วกะ +วกุล +วง +วงก์ +วงกต +วงกบ +วงกลม +วงการ +วงเงิน +วงจร +วงจรปิด +วงจรเปิด +วงเดือน +วงนอก +วงใน +วงพาด +วงรี +วงเล็บ +วงวัง +วงเวียน +วงศ- +วงศ์ +วงศกร +วงศ์วาน +วงศา +วงศาคณาญาติ +วงษ์ +วงแหวน +วจนะ +วจะ +วจา +วจี +วจีกรรม +วจีเภท +วชะ +วชิร- +วชิรปาณี +วชิรหัตถ์ +วชิระ +วชิราวุธ +วฏะ +วฏาการ +วฏุมะ +วณ- +วณบัตร +วณพันธน์ +วณะ +วณิช +วณิชชา +วณิชชากร +วณิชย์ +วณิชยา +วณิพก +วดี +วต- +วตะ +วทนะ +วทะ +วทัญญุตา +วทัญญู +วทานิย- +วธ- +วธก- +วธุกา +วธู +วน +วนจร +วนจรก +วนภู +วนภูมิ +วนเวียน +วนศาสตร์ +วนสณฑ์ +วนสัณฑ์ +วนอุทยาน +วนัปติ +วนัส +วนัส- +วนัสบดี +วนา +วนาดอน +วนานต์ +วนาลัย +วนาลี +วนาวาส +วนาศรม +วนาสณฑ์ +วนาสัณฑ์ +วนิดา +วนิพก +วเนจร +วโนทยาน +วปนะ +วปุ +วยัคฆ์ +วยัญชนะ +วยัมหะ +วยัสย์ +วยากรณ์ +วยาฆร์ +วยาธิ +วยาม +วยายาม +วร- +วรงค์ +วรณะ +วรดนู +วรท +วรทาน +วรมหาวิหาร +วรรค +วรรคย์ +วรรช +วรรชย์ +วรรณ- +วรรณกรรม +วรรณคดี +วรรณนา +วรรณพฤติ +วรรณยุกต์ +วรรณยุต +วรรณศิลป์ +วรรณะ +วรรณึก +วรรธก +วรรธนะ +วรรษ +วรรษา +วรวิหาร +วรัญญู +วรากะ +วรางคณา +วราห์ +วราหะ +วรุณ +วรุตดม +วรุตมะ +วรูถ +วโรดม +วโรตมะ +วฤก +วฤษภ +วฤษล +วลัช +วลัญช์ +วลัญชน์ +วลัย +วลาหก +วลี +วศค +วศะ +วศิน +วสนะ +วสภะ +วสละ +วสลี +วสวัดดี +วสวัตตี +วสะ +วสันต- +วสันต์ +วสันตดิลก +วสันตวิษุวัต +วสา +วสี +วสุ +วสุธา +วสุนธรา +วสุมดี +วหะ +วหา +วอ +วอก +วอกแวก +ว่อง +ว่องไว +วอด +วอดวาย +วอน +ว่อน +วอลเลย์บอล +วอแว +วะ +วัก +วักกะ +วัค +วัคคิย +วัคคีย์ +วัคคุ +วัคคุวัท +วัคซีน +วัง +วังก์ +วังชา +วังช้าง +วังวน +วังเวง +วังศะ +วังสะ +วังหน้า +วังหลวง +วังหลัง +วัจ- +วัจกุฎี +วัจจะ +วัจฉ์ +วัจฉก +วัจฉละ +วัจน์ +วัจมรรค +วัช +วัช- +วัชชะ +วัชฌ์ +วัชพืช +วัชร- +วัชรธาตุมณฑล +วัชรปาณี +วัชรยาน +วัชรอาสน์ +วัชระ +วัชราสน์ +วัชรินทร์ +วัชรี +วัชเรนทร์ +วัญจก +วัญจนะ +วัญฌ์ +วัฏ- +วัฏกะ +วัฏจักร +วัฏฏะ +วัฏฏิ +วัฏทุกข์ +วัฏสงสาร +วัฒกะ +วัฒกี +วัฒน- +วัฒนธรรม +วัฒนะ +วัฒนา +วัณ +วัณ- +วัณฏ์ +วัณณะ +วัณนา +วัณโรค +วัด +วัดแดด +วัดผล +วัดพื้น +วัดรอยตีน +วัดรอยเท้า +วัดราษฎร์ +วัดวา +วัดวาอาราม +วัดหลวง +วัดเหวี่ยง +วัต +วัตต์ +วัตตา +วัตถ์ +วัตถาภรณ์ +วัตถาลังการ +วัตถุ +วัตถุดิบ +วัตถุนิยม +วัตถุวิสัย +วัตนะ +วัตร +วัตร- +วัตรปฏิบัติ +วัตสดร +วัตสะ +วัติ +วัทน์ +วัน +วันโกน +วันแข็ง +วันครู +วันจม +วันดับ +วันดีคืนดี +วันต์ +วันตัว +วันเถลิงศก +วันทน- +วันทนา +วันทนาการ +วันทนีย์ +วันทย- +วันทยหัตถ์ +วันทยาวุธ +วันทา +วันทิ +วันนิพก +วันเนา +วันพระ +วันพระไม่มีหนเดียว +วันเพ็ญ +วันฟู +วันยังค่ำ +วันลอย +วันแล้ววันเล่า +วันสุกดิบ +วันอุโบสถ +วับ +วับๆ +วับวาบ +วับวาม +วับแวบ +วับแวม +วับๆ หวำๆ +วัปปะ +วัมมิก +วัย +วัย- +วัยรุ่น +วัยวุฒิ +วัลก์ +วัลคุ +วัลย์ +วัลลภ +วัลลี +วัว +วัวใครเข้าคอกคนนั้น +วัวตัวผู้ +วัวตัวเมีย +วัวทะเล +วัวพันหลัก +วัวลืมตีน +วัวสันหลังหวะ +วัวหายล้อมคอก +วัส- +วัสคณนา +วัสดุ +วัสตร์ +วัสน์ +วัสนะ +วัสสะ +วัสสานะ +วัสโสทก +วา +ว่า +ว้า +วาก +ว้าก +วากจิรพัสตร์ +วากย- +วากยสัมพันธ์ +วากยะ +วากรา +ว่ากล่าว +วากะ +ว่าการ +ว่าขาน +ว่าความ +วาง +ว่าง +ว้าง +วางก้าม +วางข้อ +วางไข่ +ว่างงาน +วางเงิน +วางใจ +วางตลาด +วางตัว +วางตา +วางโต +วางท่า +วางปุ่ม +วางเพลิง +วางมวย +วางมาด +วางมือ +วางยา +วางวาย +ว่างเว้น +ว้างเวิ้ง +วางอำนาจ +ว่าง่าย +วาจก +วาจา +ว่าจ้าง +วาจาไปยะ +วาจาล +วาชเปยะ +วาฏกะ +วาณิช +วาณิชกะ +วาณิชย์ +วาณี +วาด +วาดเขียน +วาต- +วาตปานะ +วาตภัย +วาตะ +ว่าต่าง +วาตารางเหลี่ยม +ว่าแต่เขาอิเหนาเป็นเอง +วาท +วาท- +วาทก +วาทน +วาทย- +วาทย์ +วาทยกร +วาทศาสตร์ +วาทศิลป์ +วาทิต +วาทิน +วาที +ว่าที่ +วาน +ว่าน +ว่านกีบม้า +ว่านกีบแรด +ว่านเครือ +วานซืน +ว่านธรณีสาร +ว่านนางกวัก +ว่านนางล้อม +ว่านน้ำ +ว่านเพชรหึง +ว่านมหาเมฆ +ว่านมีดยับ +วานร +วานรินทร์ +ว่านเสน่ห์จันทร์ขาว +ว่านเสน่ห์จันทร์แดง +ว่านหางช้าง +ว่านอนสอนง่าย +วาเนเดียม +วาบ +วาบหวาม +วาปะ +วาปิตะ +วาปี +วาม +วามน- +วามนาวตาร +วามแวม +วามะ +วามาจาร +วาโมร +ว่าไม่ได้ +วาย +ว่าย +ว้าย +วายชนม์ +วายชีวิต +ว่ายตา +ว่ายน้ำหาจระเข้ +วายปราณ +วายร้าย +วายวอด +วายสะ +วายสังขาร +วายะ +ว่ายาก +วายามะ +วายุ +วายุกูล +วายุบุตรยาตรา +วายุภักษ์ +วาโย +วาโยธาตุ +วาร +วารณ- +วารณกร +วารวาริ +วารสาร +วารสารศาสตร์ +วาระ +วาริ +วาริจร +วาริช +วาริท +วาริธร +วาริพินทุ +วารี +วารีช +วารุณ +วารุณี +วาล +วาล- +วาลกัมพล +วาลธิ +วาล์ว +วาลวีชนี +วาลิกา +วาลุกา +วาว +ว่าว +ว่าวติดลม +วาววับ +วาววาม +วาวแวว +ว่าวเหลิง +ว่าวอน +ว้าว่อน +ว้าวุ่น +วาสนะ +วาสนา +วาสพ +วาสะ +ว่าสาดเสียเทเสีย +วาสิน +วาสี +วาสุกรี +วาสุกี +วาสุเทพ +วาหนะ +วาหะ +วาหินี +ว้าเหว่ +วาฬ +วาฬ- +วาฬมิค +วิ +วิกขัมภ์ +วิกขัมภนะ +วิกเขป +วิกจะ +วิกรม +วิกรัย +วิกรานต์ +วิกฤต +วิกฤต- +วิกฤตการณ์ +วิกฤตกาล +วิกฤติ +วิกฤติ- +วิกฤติการณ์ +วิกฤติกาล +วิกล +วิกลจริต +วิกสิต +วิกัต +วิกัติ +วิกัติการก +วิกัป +วิกัย +วิการ +วิกาล +วิกาล- +วิกาลโภชน์ +วิคหะ +วิเคราะห์ +วิฆนะ +วิฆเนศ +วิฆเนศวร +วิฆาต +วิฆาส +วิง +วิ่ง +วิ่งกระโดดข้ามรั้ว +วิ่งข้ามรั้ว +วิ่งงัว +วิ่งเต้น +วิ่งเปี้ยว +วิ่งผลัด +วิ่งม้า +วิ่งรอก +วิ่งระแบง +วิ่งราว +วิงวอน +วิ่งวัว +วิ่งว่าว +วิ่งวิบาก +วิงเวียน +วิ่งสามขา +วิจฉิกะ +วิจยุต +วิจรณะ +วิจล +วิจักขณ์ +วิจักษณ์ +วิจัย +วิจาร +วิจารณ- +วิจารณ์ +วิจารณญาณ +วิจิ +วิจิกิจฉา +วิจิต +วิจิตร +วิจิตรพิสดาร +วิจิน +วิจุณ +วิจุรณ +วิชชา +วิชชุ +วิชชุดา +วิชชุตา +วิชชุลดา +วิชญะ +วิชน +วิชนี +วิชย- +วิชัย +วิชา +วิชาการ +วิชาชีพ +วิชาโท +วิชาธร +วิชานนะ +วิชาเอก +วิชิต +วิเชียร +วิญญัตติ +วิญญาณ +วิญญาณกทรัพย์ +วิญญู +วิญญูชน +วิญญูภาพ +วิฑูรย์ +วิณหุ +วิด +วิดพื้น +วิดัสดี +วิตก +วิตก- +วิตกจริต +วิตถาร +วิตามิน +วิถี +วิทธะ +วิทย- +วิทยฐานะ +วิทยา +วิทยากร +วิทยากล +วิทยาเขต +วิทยาคม +วิทยาคาร +วิทยาทาน +วิทยาธร +วิทยานิพนธ์ +วิทยาลัย +วิทยาศาสตร์ +วิทยาศาสตร์กายภาพ +วิทยาศาสตร์ชีวภาพ +วิทยาศาสตร์เทคโนโลยีและสิ่งแวดล้อม +วิทยาศาสตร์ประยุกต์ +วิทยุ +วิทยุต +วิทรุมะ +วิทวัส +วิทัตถิ +วิทารณ์ +วิทาลน์ +วิทิต +วิทู +วิทูร +วิเทวษ +วิเทศ +วิเทศสัมพันธ์ +วิเทโศบาย +วิธ +วิธวา +วิธา +วิธาน +วิธี +วิธุระ +วิธู +วิธูปนะ +วิ่น +วินย- +วินันตู +วินัย +วินัยธร +วินาที +วินายก +วินาศ +วินาศ- +วินาศกรรม +วินาศภัย +วินิจ +วินิจฉัย +วินิต +วินิบาต +วินิปาติก +วิเนต +วิโนทก +วิบัติ +วิบาก +วิบุล +วิบุลย์ +วิบูล +วิบูลย์ +วิปการ +วิปฏิสาร +วิปโยค +วิประการ +วิประติสาร +วิประโยค +วิประลาป +วิประวาส +วิปริต +วิปลาป +วิปลาส +วิปวาส +วิปักษ์ +วิปัสสก +วิปัสสนา +วิพากษ์ +วิพากษ์วิจารณ์ +วิพิธทัศนา +วิพุธ +วิภว- +วิภวตัณหา +วิภังค์ +วิภัช +วิภัช- +วิภัชพยากรณ์ +วิภัชวาที +วิภัตติ +วิภา +วิภาค +วิภาช +วิภาดา +วิภาวี +วิภาษ +วิภาส +วิภู +วิภูษณะ +วิภูษา +วิภูษิต +วิเภตก์ +วิเภทก์ +วิมน +วิมล +วิมลัก +วิมลาก +วิมังสา +วิมัติ +วิมาน +วิมุข +วิมุต +วิมุตติ +วิเมลือง +วิโมกข์ +วิเยน +วิโยค +วิร- +วิรงรอง +วิรตะ +วิรมณะ +วิรวะ +วิระ +วิรังรอง +วิรัช +วิรัต +วิรัติ +วิราคะ +วิราม +วิราวะ +วิริยภาพ +วิริยะ +วิรุธ +วิรุฬห์ +วิรุฬหก +วิรูป +วิรูปักษ์ +วิเรนทร์ +วิโรค +วิโรจ +วิโรจน์ +วิโรฒ +วิโรธ +วิโรธน์ +วิลย- +วิลันดา +วิลัย +วิลาด +วิลาป +วิลาวัณย์ +วิลาศ +วิลาส +วิลาสินี +วิลิปดา +วิเลป +วิเลป- +วิเลปนะ +วิโลก +วิโลกนะ +วิโลจนะ +วิโลม +วิไล +วิไลวรรณ +วิวรณ์ +วิวรรธน์ +วิวระ +วิวัฏ +วิวัฒน- +วิวัฒน์ +วิวัฒนาการ +วิวัน +วิวาท +วิวาห- +วิวาห์ +วิวาหะ +วิวิจ +วิวิต +วิวิธ +วิเวก +วิศรุต +วิศว- +วิศวกร +วิศวกรรม +วิศวกรรมศาสตร์ +วิศัลย์ +วิศาข- +วิศาขบูชา +วิศาขะ +วิศาขา +วิศางค์ +วิศาล +วิศิษฏ์ +วิศุทธ์ +วิศุทธิ์ +วิเศษ +วิเศษณ- +วิเศษณ์ +วิเศษณการก +วิษณุ +วิษณุกรรม +วิษณุโลก +วิษณุเวท +วิษธร +วิษักต์ +วิษัย +วิษาณ +วิษุวัต +วิสกี้ +วิสม- +วิสย- +วิสรรชนีย์ +วิสฤต +วิสสุกรรม +วิสัชนา +วิสัญญี +วิสัญญีแพทย์ +วิสัญญีวิทยา +วิสัย +วิสาข- +วิสาขบูชา +วิสาขะ +วิสาขา +วิสามัญ +วิสามัญฆาตกรรม +วิสามานยนาม +วิสาร +วิสารท +วิสาล +วิสาสะ +วิสาหกิจ +วิสิฐ +วิสุงคามสีมา +วิสุทธ์ +วิสุทธิ์ +วิสูตร +วิเสท +วิหค +วิหงค์ +วิหลั่น +วิหายสะ +วิหาร +วิหาร- +วิหารแกลบ +วิหารคด +วิหารทิศ +วิหารธรรม +วิหารยอด +วิหารหลวง +วิหิงสะ +วิหิงสา +วิเหสา +วิฬังค์ +วิฬาร +วิฬาร์ +วี +วีจิ +วีชนี +วีณา +วี้ด +วีต- +วีร- +วีรกรรม +วีรชน +วีรบุรุษ +วีรสตรี +วี่วัน +วี่แวว +วีสะ +วุ้ง +วุฐิ +วุฒ +วุฒิ +วุฒิ- +วุฒิบัตร +วุฒิสภา +วุฒิสมาชิก +วุด +วุ่น +วุ้น +วุ้นชา +วุ่นเป็นจุลกฐิน +วุ่นวาย +วุ้นเส้น +วุบ +วุ้ย +วุลแฟรม +วู้ +วูดวาด +วูบ +วูบวาบ +วู่วาม +เว้ +เวค +เวคิน +เวคี +เวจ +เวจ- +เวจกุฎี +เวจมรรค +เวช +เวช- +เวชกรรม +เวชภัณฑ์ +เวชยันต์ +เวชศาสตร์ +เวฐน์ +เวณะ +เวณิ +เวณิก +เวณุ +เวณุวัน +เวตน์ +เวตร +เวตาล +เวท +เวท- +เวทคู +เวทนา +เวทมนตร์ +เวทย์ +เวทางค์ +เวทางคศาสตร์ +เวทานต์ +เวทานตะ +เวทิ +เวที +เวธะ +เวน +เว้น +เวนคืนอสังหาริมทรัพย์ +เว้นแต่ +เวนไตย +เวไนย +เวมะ +เวมัต +เวมัติก- +เวมาติก +เว้ย +เวร +เวรมณี +เวรี +เวโรจน์ +เวลา +เวเลนซี +เววัณ +เววัณณิยะ +เวศม์ +เวศย์ +เวศยา +เวสน์ +เวสภู +เวสม์ +เวสมะ +เวสวัณ +เวสสะ +เวสสันดร +เวสสุกรรม +เวสสุวัณ +เวสารัช +เวสิ +เวสิยา +เวหน +เวหะ +เวหังค์ +เวหัปติ +เวหา +เวหายส +เวหาส +เวฬุ +เวฬุการ +เวฬุริย +เวฬุวัน +เว่อ +เว้า +เว้าวอน +เวิก +เวิ้ง +เวิ้งว้าง +เวี่ย +เวียง +เวียน +เวียนเทียน +เวียนหัว +เวียร +เวี่ยว +แว้ +แวง +แว้ง +แว้งกัด +แวด +แวดล้อม +แวดวง +แวตร +แวน +แว่น +แว่นขยาย +แวนดา +แว่นตา +แว่นฟ้า +แว่นไว +แวบ +แวบๆ +แวบวับ +แวม +แวว +แว่ว +แวววาม +แวววาว +แวววิเชียร +แวะ +โว +โว่ +โวการ +โว่ง +โวทาน +โว้ย +โวยวาย +โว้เว้ +โวสาน +โวหาร +ไว +ไว้ +ไวกูณฐ์ +ไว้ใจ +ไวฑูรย์ +ไว้ตัว +ไวทย์ +ไว้ทุกข์ +ไว้ธุระ +ไว้เนื้อเชื่อใจ +ไวพจน์ +ไวไฟ +ไว้ยศ +ไวยากรณ์ +ไวยาวัจกร +ไวยาวัจมัย +ไว้ลาย +ไววรรณ +ไวษณพ +ไว้หน้า +ไว้อาลัย +ไวโอลิน +ศ +ศก +ศกฏ +ศกล +ศกุน +ศกุนต์ +ศกุนิ +ศกุนี +ศงกา +ศจี +ศฐ +ศดก +ศต +ศต- +ศตก +ศตบาท +ศตปที +ศตพรรษ +ศตภิษัช +ศตวรรษ +ศตสังวัตสร์ +ศตัฆนี +ศนิ +ศนิวาร +ศพ +ศพล +ศม +ศมน +ศย +ศยนะ +ศยาม +ศยามล +ศร +ศรนารายณ์ +ศรภ +ศรมณะ +ศรรกรา +ศรวณะ +ศรวณีย์ +ศรวิษฐา +ศรศิลป์ไม่กินกัน +ศระวณ +ศรัณย์ +ศรัณยู +ศรัถนะ +ศรัท +ศรัทธา +ศรัย +ศราทธ- +ศราทธ์ +ศราทธพรต +ศราพ +ศราพก +ศรายุธ +ศราวก +ศราวณะ +ศราวรณ์ +ศราสน์ +ศรี +ศรีตรัง +ศรีสังคีต +ศรุต +ศรุติ +ศฤคาล +ศฤงค์ +ศฤงคาร +ศฤงคาริน +ศฤงคารี +ศลภ +ศลัถ +ศลิษฏ์ +ศลิษา +ศว +ศวศุร +ศวัส +ศวัสน +ศวา +ศวาน +ศวาส +ศศ- +ศศธร +ศศพินทุ์ +ศศลักษณ์ +ศศะ +ศศิ +ศศิกษัย +ศศิขัณฑ์ +ศศิเคราะห์ +ศศิธร +ศศิน +ศศิมณฑล +ศศิวิมล +ศศี +ศสา +ศอ +ศอก +ศอกกลับ +ศอกกำ +ศอกกำมา +ศอกคู้ +ศอกตูม +ศักดา +ศักดิ +ศักดิ์ +ศักดินา +ศักดิ์ศรี +ศักดิ์สิทธิ์ +ศักติ +ศักย- +ศักย์ +ศักยภาพ +ศักยะ +ศักร- +ศักรภพน์ +ศักราช +ศักรินทร์ +ศักเรนทร์ +ศังกร +ศังกา +ศังกุ +ศัตรู +ศัทธนะ +ศันสนะ +ศันสนีย์ +ศัพท- +ศัพท์ +ศัพทมูลวิทยา +ศัยยา +ศัล +ศัลก +ศัลกี +ศัลย- +ศัลยกรรม +ศัลยแพทย์ +ศัลยศาสตร์ +ศัสดร +ศัสตร- +ศัสตรกรรม +ศัสตรการ +ศัสตรศาสตร์ +ศัสตรา +ศัสย +ศาก +ศาก- +ศากตะ +ศากภักษ์ +ศากย- +ศากยเกตุ +ศากยพุทธ +ศากยมุนี +ศากยะ +ศาฎก +ศาฐยะ +ศาณ +ศาต +ศานต- +ศานต์ +ศานตรส +ศานติ +ศานติก- +ศานติโหม +ศาป +ศาป- +ศาปมุกติ์ +ศาปานต์ +ศาพร +ศารท +ศารทวิษุวัต +ศารทูล +ศาริกา +ศาล +ศาลกงสุล +ศาลแขวง +ศาลคดีเด็กและเยาวชน +ศาลจังหวัด +ศาลชั้นต้น +ศาลฎีกา +ศาลเตี้ย +ศาลทหาร +ศาลปกครอง +ศาลโปริสภา +ศาลเพียงตา +ศาลแพ่ง +ศาลยุติธรรม +ศาลเยาวชนและครอบครัว +ศาลโลก +ศาลสถิตยุติธรรม +ศาลสูง +ศาลสูงสุด +ศาลอาญา +ศาลอุทธรณ์ +ศาลอุทธรณ์ภาค +ศาลา +ศาลาประชาคม +ศาลาราย +ศาลาสรง +ศาศวัต +ศาสก +ศาสดา +ศาสตร- +ศาสตร์ +ศาสตรา +ศาสตราจารย์ +ศาสน- +ศาสน์ +ศาสนจักร +ศาสนา +ศาสนีย- +ศาสนีย์ +ศาสนูปถัมภก +ศิกษก +ศิการ +ศิขร +ศิขริน +ศิขรี +ศิขัณฑ์ +ศิขา +ศิคาล +ศิงขร +ศิงขริน +ศิต +ศิถี +ศิพิระ +ศิร- +ศิรประภา +ศิระ +ศิรา +ศิรามพุช +ศิโรรัตน์ +ศิโรราบ +ศิโรเวฐน์ +ศิลป- +ศิลป์ +ศิลปกร +ศิลปกรรม +ศิลปการ +ศิลปกิจ +ศิลปวิทยา +ศิลปศาสตร์ +ศิลปะ +ศิลปิน +ศิลปี +ศิลา +ศิลาฤกษ์ +ศิลาแลง +ศิว- +ศิวโมกข์ +ศิวลึงค์ +ศิวเวท +ศิวะ +ศิศีระ +ศิศุ +ศิษฎิ +ศิษฏ์ +ศิษย์ +ศิษย์มีครู +ศีขร +ศีขริน +ศีขรี +ศีต- +ศีตกาล +ศีตล +ศีรษะ +ศีรษะกระบือ +ศีรษะโค +ศีรษะช้าง +ศีรษะเนื้อ +ศีล +ศีลจุ่ม +ศีลธรรม +ศีลมหาสนิท +ศีลล้างบาป +ศีลวัต +ศีลอด +ศึก +ศึกษา +ศึกษาธิการ +ศึกษานิเทศก์ +ศึกหน้านาง +ศุกร- +ศุกร์ +ศุกรวรรณ +ศุกล- +ศุกลปักษ์ +ศุกลัม +ศุกะ +ศุจิ +ศุจิกรรม +ศุทธ +ศุทธิ +ศุน +ศุนัก +ศุนิ +ศุภ- +ศุภกร +ศุภเคราะห์ +ศุภนิมิต +ศุภมัสดุ +ศุภมาตรา +ศุภมาส +ศุภร- +ศุภอักษร +ศุภางค์ +ศุลก- +ศุลกากร +ศุลการักษ์ +ศุลี +ศุษิร +ศูกร +ศูทร +ศูนย- +ศูนย์ +ศูนย์การค้า +ศูนย์ชุมชน +ศูนย์พ่าห์ +ศูนยภาพ +ศูนย์เยาวชน +ศูนยวาท +ศูนย์สัมบูรณ์ +ศูนย์สูตร +ศูล +ศูลิน +เศรณี +เศรษฐ- +เศรษฐ์ +เศรษฐกิจ +เศรษฐศาสตร์ +เศรษฐี +เศร้า +เศร้าหมอง +เศลษ +เศวดงค์ +เศวดีภ +เศวต +เศวต- +เศวตงค์ +เศวตฉัตร +เศวตร +เศวตัมพร +เศวติภ +เศวตีภ +เศวเตภ +เศวาล +เศษ +เศษเกิน +เศษซ้อน +เศษส่วน +เศษสิบ +เศาจ- +เศาไจย +เศาร์ +เศารยะ +เศิก +เศียร +โศก +โศก- +โศกนาฏกรรม +โศกศัลย์ +โศกา +โศกาดูร +โศกาลัย +โศกี +โศจนะ +โศจนียะ +โศจิ +โศถะ +โศธนะ +โศผะ +โศภ +โศภน +โศภา +โศภิต +โศภิน +โศภิษฐ์ +โศภี +โศรณิ +โศรณี +โศรดา +โศรตร +โศลก +ไศล +ไศล- +ไศวะ +ษ +ษมา +ษมายุมแปลง +ษัฏ +ษัฏกะ +ษัฑ +ษัณ +ษัษ +ษัษฏี +ษัษฐ +ษัษฐี +โษฑศ +โษฑศัน +ส +สก- +สกฏ- +สกฏภาร +สกฏะ +สกทาคามิผล +สกทาคามิมรรค +สกทาคามี +สกนธ์ +สกปรก +สกรณีย์ +สกรรจ์ +สกรรมกริยา +สกล +สกล- +สกลมหาสังฆปริณายก +สกลโลก +สกวาที +สกัด +สกัดแคร่ +สกา +สกาว +สกิทาคามี +สกี +สกีน้ำ +สกุณ +สกุณา +สกุณี +สกุน +สกุนต์ +สกุล +สกุลรุนชาติ +สเกต +สเกตน้ำแข็ง +สแกนเดียม +สขะ +สขา +สขิ +สง +ส่ง +สงกร +สงกรานต์ +ส่งกลิ่น +สงกา +สงโกจ +ส่งข่าว +สงค์ +สงคร +สงคราม +สงครามกลางเมือง +สงครามเย็น +สงครามโลก +สงเคราะห์ +สงฆ์ +ส่งดอก +ส่งเดช +ส่งตัว +ส่งท้าย +สงบ +สงบเสงี่ยม +ส่งภาษา +ส่งลำ +สงวน +สงเษป +ส่งสการ +สงสัย +สงสาร +สงสาร- +สงสารทุกข์ +สงสารวัฏ +ส่งเสริม +ส่งเสีย +ส่งเสียง +สงัด +สง่า +สฐ +สณฑ์ +สด +สดก +สดคาว +สดชื่น +สดน +สดมภ์ +สดๆ ร้อนๆ +สดใส +สดัน +สดับ +สดับตรับฟัง +สดับปกรณ์ +สดำ +สดี +สดุดี +สดูป +สต +สตก +สตน +สตภิสชะ +สตมาหะ +สตรอนเชียม +สตริกนิน +สตรี +สตรีลิงค์ +สตรีลึงค์ +สตัน +สตันย์ +สตัพธ์ +สตัฟฟ์ +สตัมภ์ +สตางค์ +สติ +สติปัญญา +สติปัฏฐาน +สติวินัย +สติสัมปชัญญะ +สตี +สตู +สตูป +สถน +สถบดี +สถล +สถล- +สถลทิน +สถลบถ +สถลมารค +สถวิร- +สถวีร- +สถวีระ +สถาน +สถานการณ์ +สถานภาพ +สถานะ +สถานี +สถาบก +สถาบัน +สถาปนา +สถาปนิก +สถาปนียพยากรณ์ +สถาปนียวาที +สถาปัตยกรรม +สถาปัตยกรรมศาสตร์ +สถาพร +สถาล +สถาวร +สถิต +สถิตยศาสตร์ +สถิติ +สถิติศาสตร์ +สถิร- +สถุล +สถูป +สทึง +สทุม +สธน +สธุสะ +สน +ส้น +สนใจ +สนเดก +สนตะพาย +ส้นตีน +สนทนา +สนทรรศ +สนทรรศน์ +สนทิศ +สนเทศ +สนเท่ห์ +สนธยา +สนธิ +สนธิสัญญา +สนธิอลงกต +สนนราคา +สนแผง +สนม +สนมเอก +สนวน +สนหางสิงห์ +สนอง +สนองไข +สนองได +สนองโอษฐ์ +สนอบ +สนอม +สนะ +สนัด +สนัดใจ +สนั่น +สนับ +สนับแข้ง +สนับงา +สนับทึบ +สนับนิ้วมือ +สนับเพลา +สนับมือ +สนับสนุน +สนาดก +สนาน +สนาบก +สนาบัน +สนาม +สนามเพลาะ +สนามหลวง +สนายุ +สนิก +สนิท +สนิทสนม +สนิธ +สนิม +สนิมสร้อย +สนุก +สนุกเกอร์ +สนุกสนาน +สนุข +สนุต +สนุ่น +สบ +สบง +สบจ +สบถ +สบประมาท +สบสังวาส +สบเสีย +สบัน +สบาย +สบู่ +สบู่เลือด +สไบ +สไบเฉียง +สไบนาง +สปริง +สปาเกตตี +สเปกตรัม +สเปกโทรสโคป +สไปริลลัม +สพั้น +สพาบ +สภา +สภากาชาด +สภาค +สภาจาร +สภานายก +สภาบดี +สภาพ +สภาพธรรม +สภาว- +สภาวการณ์ +สภาวะ +สม +ส้ม +สมการ +สมการเคมี +ส้มกุ้ง +สมคบ +สมควร +สมคะเน +สมจร +สมจริง +สมจารี +ส้มชื่น +ส้มเช้า +สมญา +สมเญศ +สมณ- +สมณบริขาร +สมณโวหาร +สมณศักดิ์ +สมณสารูป +สมณสาสน์ +สมณะ +สมดุล +สมเด็จ +สมเด็จพระสังฆราช +ส้มตำ +สมถ- +สมถยานิก +สมถวิปัสสนา +สมถะ +สมทบ +ส้มทับ +สมนอก +สมนัย +สมนาคุณ +สมน้ำสมเนื้อ +สมน้ำหน้า +สมใน +สมบัติ +สมบัตินักเลง +สมบัติผู้ดี +สมบุกสมบัน +สมบุญ +สมบูรณ์ +สมบูรณาญาสิทธิราชย์ +สมประกอบ +สมประดี +สมปฤดี +สมปฤๅดี +ส้มป่อย +สมปัก +สมผุส +ส้มแผ่น +สมพง +สมพงศ์ +สมพรปาก +สมพล +สมพัตสร +สมพาส +สมเพช +สมโพธน์ +สมโพธิ +ส้มฟัก +สมภพ +สมภาร +สมโภค +สมโภช +สมมต +สมมติ +สมมติ- +สมมติฐาน +ส้มมะขาม +สมมาตร +ส้มมือ +สมมุติ +สมมุติ- +สมมุติฐาน +สมมูล +สมมูลเคมี +สมโมท +สมยอม +สมโยค +สมร +สมร- +สมรด +สมรภูมิ +สมรรถ +สมรรถ- +สมรรถนะ +สมรรถภาพ +สมรส +สมรู้ +สมฤดี +สมฤติ +สมฤๅดี +ส้มลิ้ม +สมวัย +สมวายะ +สมสัก +ส้มสันดาน +สมสู่ +สมเสร็จ +ส้มเสี้ยว +สมหน้าสมตา +สมเหตุสมผล +สมอ +สมอกานน +สมอง +สมองตาย +สมองฝ่อ +สมอจีน +สมอทะเล +สมอสำเภา +สมอ้าง +สมัค +สมัคร +สมัครพรรคพวก +สมัครสมา +สมัครสมาน +สมังคี +สมัช +สมัชชา +สมัญญา +สมัต +สมัน +สมันต์ +สมัย +สมัยเก่า +สมัยใหม่ +สมา +สมาคม +สมาจาร +สมาชิก +สมาทาน +สมาธิ +สมาน- +สมานคติ +สมานฉันท์ +สมานสังวาส +สมาบัติ +สมาพันธรัฐ +สมาส +สม่ำเสมอ +สมิง +สมิงทอง +สมิงพราย +สมิงมิ่งชาย +สมิต +สมิติ +สมิทธ์ +สมิทธิ +สมี +สมีป +สมีร +สมุก +สมุจจัย +สมุจเฉท +สมุจเฉท- +สมุจเฉทปหาน +สมุฏฐาน +สมุด +สมุดไทย +สมุดปูมเดินทาง +สมุตถาน +สมุทร +สมุทร- +สมุทรโคดม +สมุทรโจร +สมุทรศาสตร์ +สมุทรเสนา +สมุทัย +สมุน +สมุนไพร +สมุลแว้ง +สมุห- +สมุห์ +สมุหกลาโหม +สมุหเทศาภิบาล +สมุหนาม +สมุหนายก +สมุหประธาน +สมุหพระกลาโหม +สโมธาน +สโมสร +สโมสรสันนิบาต +สยด +สยดสยอง +สยดแสยง +สยนะ +สยบ +สยมพร +สยมภู +สยอง +สยอน +สยัมพร +สยัมวรา +สยาม +สยาม- +สยามรัฐ +สยาย +สยิว +สยิ้ว +สยุ่น +สยุมพร +สยุมภู +สร +สรก +สรง +สร่ง +สรฏะ +สรณ- +สรณคมน์ +สรณตรัย +สรณะ +สรณาคมน์ +สรดัก +สรดึ่น +สรดื่น +สรตะ +สรตัก +สรทะ +สรทึง +สรแทบ +สรนุก +สรเนาะ +สรไน +สรบ +สรบบ +สรบับ +สรพ +สรเพชญ +สรภะ +สรภัญญะ +สรภู +สรม +สรร +สรรค์ +สรรพ +สรรพ- +สรรพคราส +สรรพคุณ +สรรพนาม +สรรพสามิต +สรรพัชญ +สรรพากร +สรรพางค์ +สรรเพชญ +สรรเพชุดา +สรรเพชุดาญาณ +สรรวง +สรรเสริญ +สรรแสร้ง +สรลน +สรลม +สรลมสลวน +สรลอด +สรลอน +สรละ +สรล้าย +สรลิด +สรเลข +สรวง +สรวงเส +สรวป +สรวม +สรวมชีพ +สรวล +สรวลเส +สรวลเสเฮฮา +สรเสริญ +สร้อย +สร้อยทอง +สร้อยทะแย +สร้อยนกเขา +สร้อยน้ำผึ้ง +สร้อยระย้า +สร้อยเศร้า +สร้อยสน +สร้อยอ่อน +สร้อยอินทนิล +สระ +สระกอ +สระคราญ +สระดะ +สระท้อน +สระพรั่ง +สระอาด +สระอื้น +สรั่ง +สรัสวดี +สร่าง +สร้าง +สร้างวิมานในอากาศ +สร้างสรรค์ +สราญ +สร้าวเสียว +สริต +สรี้ +สรีร- +สรีรกิจ +สรีรธาตุ +สรีรวิทยา +สรีรศาสตร์ +สรีระ +สรีรังคาร +สรีรางคาร +สรีสฤบ +สรุก +สรุกเกรา +สรุง +สรุโนก +สรุป +สรุสระ +สรูป +สโรช +สฤก +สฤคาล +สฤต +สฤษฎี +สฤษฏ์ +สล +สลด +สลบ +สลบไสล +สลบเหมือด +สลวน +สลวย +สลอด +สลอน +สลอย +สละ +สละสลวย +สลัก +สลักเกลียว +สลักเต้ +สลักเพชร +สลักสำคัญ +สลักเสลา +สลักหลัง +สลัด +สลัดได +สลับ +สลับฉาก +สลัว +สลา +สลาก +สลากกินแบ่ง +สลากกินรวบ +สลากภัต +สลาง +สล้าง +สลาด +สลาตัน +สลาบ +สลาย +สลาเหิน +สลิด +สลิล +สลึก +สลึง +สลุต +สลุบ +สลุมพร +สแลง +สว- +สวก +สวกรรม +สวการย์ +ส้วง +สวด +สวน +ส่วน +ส่วนกลาง +สวนควัน +สวนความ +ส่วนได้ส่วนเสีย +ส่วนตัว +ส่วนท้องถิ่น +สวนแทง +ส่วนประกอบ +สวนปากสวนคำ +ส่วนผสม +ส่วนภูมิภาค +ส่วนรวม +ส่วนลด +สวนสนาม +ส่วนสัด +ส่วนหน้า +ส่วนหลัง +สวนะ +สวนาการ +สวนิต +สวนีย- +สวบ +สวภาพ +สวม +ส้วม +สวมกอด +สวมรอย +สวมหัวโขน +สวย +ส่วย +ส้วย +สวยแต่รูป จูบไม่หอม +สวยม +สวยมพร +สวยมภู +ส้วยเสี้ยว +สวร +สวรรค- +สวรรค์ +สวรรคต +สวรรคบดี +สวรรค์อยู่ในอก นรกอยู่ในใจ +สวรรคาลัย +สวรรยา +สวราชย์ +สวะ +สวัสดิ์ +สวัสดิการ +สวัสดี +สวัสติ +สวัสติกะ +สวา +สวาคต +สวาง +สว่าง +สว่างไสว +สวาด +สวาดิ +สวาตี +สวาท +สว่าน +สว้าน +สวาบ +สวาปาม +สวามิ +สวามินี +สวามิภักดิ์ +สวามี +สวาย +สวายสอ +สวาสดิ์ +สวาหะ +สวิง +สวิงสวาย +สวิญญาณกทรัพย์ +สวิตช์ +สสาร +สสาร- +สสารนิยม +สสุระ +สสุรี +สห- +สหกรณ์ +สหการ +สหจร +สหชาต +สหชาติ +สหธรรม +สหธรรมิก +สหบาน +สหประชาชาติ +สหพันธ์ +สหพันธรัฐ +สหภาพ +สหภาพแรงงาน +สหศึกษา +สหัช +สหัมบดี +สหัส- +สหัสธารา +สหัสนัยน์ +สหัสเนตร +สหัสรังสี +สหัสสะ +สหัสา +สหาย +สอ +ส่อ +สอง +ส่อง +ส้อง +สองเกลอ +สองจิตสองใจ +สองใจ +สองต่อสอง +สองผม +สองฝักสองฝ่าย +สองไม้ +สองฤดู +สองสลึงเฟื้อง +สองหน้า +สอด +สอดคล้อง +สอดแคล้ว +สอดแนม +สอดรู้ +สอดรู้สอดเห็น +สอดส่อง +สอดใส่ +สอดไส้ +สอน +ส่อน +สอนจระเข้ให้ว่ายน้ำ +สอนหนังสือสังฆราช +สอบ +สอบซ้อม +สอบปากคำ +สอบพยาน +สอบไล่ +สอบสวน +สอบสวนทวนพยาน +สอปูน +สอพลอ +ส้อม +สอย +สอยดอกฟ้า +สอยดาว +สอยผม +สอยไร +ส่อเสียด +สะ +สะกด +สะกอ +สะกาง +สะการะ +สะการะตาหรา +สะกิด +สะเก็ด +สะแก +สะแกวัลย์ +สะแกแสง +สะคร้อ +สะคราญ +สะค้าน +สะเงาะสะแงะ +สะใจ +สะดม +สะดวก +สะดัก +สะดิ้ง +สะดึง +สะดือ +สะดุ้ง +สะดุ้งมาร +สะดุด +สะดุดใจ +สะดุดตา +สะดุดหู +สะเด็ด +สะเดา +สะเดาดิน +สะเดาอินเดีย +สะเดาะ +สะตอ +สะตอเบา +สะตาหมัน +สะตึ +สะตือ +สะตุ +สะเต๊ะ +สะโตก +สะทก +สะทน +สะท้อน +สะท้อนใจ +สะท้าน +สะทึก +สะทึน +สะทึ่น +สะเทิน +สะเทิ้น +สะเทินน้ำสะเทินบก +สะเทือน +สะเทื้อน +สะเทือนใจ +สะบะ +สะบัก +สะบักจม +สะบักสะบอม +สะบัด +สะบัดก้น +สะบัดมือ +สะบัดร้อนสะบัดหนาว +สะบัดลุกสะบัดนั่ง +สะบัดสะบิ้ง +สะบัดหน้า +สะบั้น +สะบันงา +สะบันงาจีน +สะบันงาต้น +สะบ้า +สะบ้าหัวเข่า +สะบู +สะแบง +สะเปะสะปะ +สะพรัก +สะพรั่ง +สะพรึงกลัว +สะพรึบ +สะพัก +สะพัง +สะพัด +สะพั้น +สะพาน +สะพานแขวน +สะพานชัก +สะพานเชือก +สะพานเดินเรือ +สะพานทุ่น +สะพานเบี่ยง +สะพานปลา +สะพานไฟ +สะพานลอย +สะพานเสี้ยว +สะพานหก +สะพานหัน +สะพาย +สะพายแล่ง +สะเพร่า +สะโพก +สะเภา +สะใภ้ +สะโมง +สะระตะ +สะระแหน่ +สะละปะตุ่น +สะลาง +สะลึมสะลือ +สะวี้ดสะว้าด +สะสม +สะสวย +สะสาง +สะอาง +สะอาด +สะอ้าน +สะอิ้ง +สะอิดสะเอียน +สะอึก +สะอึกเข้าใส่ +สะอึกสะอื้น +สะอื้น +สะเอ้ง +สะเอว +สะเออะ +สะโอดสะอง +สะไอ +สัก +สักกะ +สักกัจจะ +สักกาย- +สักกายทิฐิ +สักการ- +สักการะ +สักขรา +สักขี +สักขี้ไก่ +สักฏะ +สักตะ +สักแต่ว่า +สักยะ +สักวา +สักว่า +สักหลาด +สัขยะ +สัค +สัคคะ +สั่ง +สังกมทรัพย์ +สังกร +สังกรณี +สังกะตัง +สังกะวัง +สังกะวาด +สังกะสี +สังกัด +สังกัปปะ +สังกา +สังการ +สังกาศ +สังกิเลส +สังเกต +สังเกตการณ์ +สังข- +สังข์ +สังขกร +สังขต- +สังขตธรรม +สังขตะ +สังขยา +สังขลิก +สังขลิกา +สังขาร +สังขาร- +สังขารธรรม +สังขารโลก +สังเขป +สังโขภ +สังค- +สังค์ +สังคญาติ +สังคม +สังคม- +สังคมนิยม +สังคมวิทยา +สังคมศาสตร์ +สังคมศึกษา +สังคมสงเคราะห์ +สังคหะ +สังคัง +สังคาตา +สังคายนา +สังคายนาย +สังคีต +สังคีติ +สังเค็ด +สังเคราะห์ +สังฆ- +สังฆกรรม +สังฆการี +สังฆเถระ +สังฆทาน +สังฆนายก +สังฆปาโมกข์ +สังฆภัต +สังฆเภท +สังฆมณฑล +สังฆมนตรี +สังฆราช +สังฆสภา +สังฆาฏิ +สังฆาณัติ +สังฆาทิเสส +สังฆาธิการ +สังฆานุสติ +สังฆาวาส +สังดัก +สังปะติแหงะ +สังปะลิเหงะ +สังโยค +สังโยชน์ +สังวร +สังวัจฉระ +สังวัธยาย +สังวาล +สังวาลพราหมณ์ +สังวาส +สังเวคะ +สังเวช +สังเวย +สังเวียน +สังสกฤต +สังสการ +สังสดมภ์ +สังสนทนา +สั่งสนทนา +สั่งสม +สังสรรค์ +สั่งสอน +สังสารวัฏ +สังสิทธิ +สังสุทธ์ +สังสุทธิ +สั่งเสีย +สังหร +สังหรณ์ +สังหรรษ +สังหาร +สังหาริมทรัพย์ +สังหาริมะ +สังหิต +สัจ +สัจ- +สัจกิริยา +สัจจะ +สัจญาณ +สัจนิยม +สัจพจน์ +สัชฌ- +สัชฌกร +สัชฌการ +สัชฌะ +สัชฌายะ +สัชฌุ +สัชฌุกร +สัชฌุการ +สัญจร +สัญจรโรค +สัญจาร +สัญเจตนา +สัญชาต- +สัญชาตญาณ +สัญชาติ +สัญฌา +สัญญา +สัญญาณ +สัญญาบัตร +สัญญาประกันชีวิต +สัญญาประกันภัย +สัญญาวิปลาส +สัญญี +สัญโญชน์ +สัญประกาศ +สัญโยค +สัญลักษณ์ +สัฐิ +สัณฐาน +สัณฐิติ +สัณฑ์ +สัณห์ +สัด +สัดจอง +สัดส่วน +สัต +สัต- +สัตการ +สัตตบงกช +สัตตบรรณ +สัตตบุษย์ +สัตตะ +สัตตาห- +สัตตาหกาลิก +สัตตู +สัตถ- +สัตถันดร +สัตถา +สัตถิ +สัตถุ +สัตถุศาสนา +สัตบถ +สัตบรรณ +สัตบริภัณฑ์ +สัตบุรุษ +สัตภัณฑ์ +สัตม- +สัตมวาร +สัตย- +สัตย์ +สัตยพรต +สัตยวาที +สัตยาเคราะห์ +สัตยาธิษฐาน +สัตยาบัน +สัตว- +สัตว์ +สัตวบาล +สัตวแพทย์ +สัตวโลก +สัตววิทยา +สัตวา +สัตวาร +สัตสดก +สัทธรรม +สัทธา +สัทธาจริต +สัทธาธิก +สัทธิงวิหาริก +สัทธินทรีย์ +สัทธิวิหาริก +สัทศาสตร์ +สัน +สั่น +สั้น +สันเขา +สันดอน +สันดาน +สันดาป +สันเดก +สันโดษ +สันต์ +สันตติ +สันตะปาปา +สันตะวา +สันติ +สันติกะ +สันติภาพ +สันตุฏฐี +สันถระ +สันถว- +สันถวไมตรี +สันถวะ +สันถัต +สันถาร +สันทนะ +สันทะ +สันทัด +สันทัดกรณี +สันทัสนะ +สันทาน +สันทิฐิก- +สันทิส +สันเทส +สันเทห +สันธาน +สันนิธิ +สันนิบาต +สันนิวาส +สันนิเวส +สันนิษฐาน +สันปันน้ำ +สันพร้านางแอ +สันพร้ามอญ +สันพร้าหอม +สันรวง +สันลึก +สันสกฤต +สันหลัง +สันหลังยาว +สับ +สับเกลียว +สับเงา +สับเชือก +สับนก +สับปลับ +สับปลี้ +สับปะขาว +สับปะรด +สับเปลี่ยน +สับสน +สับหลีก +สัปคับ +สัปคับช้าง +สัปด- +สัปดน +สัปดปกรณ์ +สัปดประกรณ์ +สัปดสดก +สัปดาห์ +สัปดาหะ +สัปต- +สัปตศก +สัปทน +สัปปะ +สัปปิ +สัปปุริส- +สัปปุรุษ +สัประยุทธ์ +สัปหงก +สัปเหร่อ +สัพ +สัพพะ +สัพพัญญู +สัพเพเหระ +สัพยอก +สัมบูรณ์ +สัมปชัญญะ +สัมปทา +สัมปทาน +สัมปยุต +สัมปโยค +สัมประสิทธิ์ +สัมประหาร +สัมปรายภพ +สัมปรายิกภพ +สัมปัตติ +สัมผัปลาป +สัมผัส +สัมผัสนอก +สัมผัสใน +สัมผัสสระ +สัมผัสอักษร +สัมพล +สัมพหุลา +สัมพัจฉร- +สัมพัจฉรฉินท์ +สัมพัตสร +สัมพัทธ์ +สัมพันธ- +สัมพันธ์ +สัมพันธน์ +สัมพันธภาพ +สัมพันธมิตร +สัมพันธไมตรี +สัมพาธะ +สัมพาหน์ +สัมพาหะ +สัมพุทธ- +สัมพุทธะ +สัมโพธิ +สัมภวะ +สัมภเวสี +สัมภัต +สัมภัตตะ +สัมภาระ +สัมภาษณ์ +สัมเภทะ +สัมโภคกาย +สัมมนา +สัมมัปธาน +สัมมา +สัมมากัมมันตะ +สัมมาจริยา +สัมมาชีพ +สัมมาทิฐิ +สัมมาวาจา +สัมมาวายามะ +สัมมาสติ +สัมมาสมาธิ +สัมมาสังกัปปะ +สัมมาอาชีวะ +สัมโมทนียกถา +สัมฤทธิ- +สัมฤทธิ์ +สัมฤทธิศก +สัยน์ +สัลลาป- +สัลเลข- +สัสดี +สัสต- +สัสตทิฐิ +สัสสะ +สัสสุ +สัสสู +สัสุรี +สา +ส่า +สาก +สากกะเบือ +สากรรจ์ +สากล +สากษิน +สากษี +สากหยาก +สากัจฉา +สากัลย์ +สากิย- +สากิยบุตร +สากิยมุนี +สากิยะ +สาเก +ส่าขนุน +สาขา +ส่าไข้ +สาคร +สาคเรศ +สาคู +สาคูลาน +สาคูวิลาด +สาง +ส้าง +สางคลื่น +สางห่า +สาฎก +สาฏิก- +สาณ- +สาณี +สาด +สาดโคลน +สาดน้ำรดกัน +สาดเสียเทเสีย +สาต +สาตรา +สาไถย +สาทร +สาทิส +สาทิส- +สาทิสลักษณ์ +สาทุ +สาโท +สาธก +สาธย- +สาธยะ +สาธยาย +สาธารณ- +สาธารณ์ +สาธารณภัย +สาธารณรัฐ +สาธารณสถาน +สาธารณสมบัติ +สาธารณสมบัติของแผ่นดิน +สาธารณสุข +สาธารณะ +สาธารณูปการ +สาธารณูปโภค +สาธิต +สาธุ +สาธุการ +สาธุชน +สาธุสะ +สาน +ส่าน +สานตวะ +สานุ +สานุศิษย์ +สานู +สาบ +สาบขนุน +สาบแร้ง +สาบแร้งสาบกา +สาบสูญ +สาบเสือ +สาบาน +สาบานธง +สาป +สาปไตย +สาปสรร +สาม +สามกษัตริย์ +สามเกลอ +สามแก้ว +สามขา +สามขุม +สามเขี้ยว +สามคาน +สามง่าม +สามชุก +สามแซ่ +สามเณร +สามเณรี +สามตา +สามนต- +สามนต์ +สามนตราช +สามใบเถา +สามเพลงตกม้าตาย +สามเมา +สามยทรัพย์ +สามรส +สามล +สามล้อ +สามลำคาน +สามวันดีสี่วันไข้ +สามเวท +สามเศียร +สามสลึงเฟื้อง +สามสิบกลีบ +สามเส้า +สามหมุด +สามหาบ +สามหาว +สามเหลี่ยม +สามเหลี่ยมด้านเท่า +สามเหลี่ยมมุมฉาก +สามเหลี่ยมมุมป้าน +สามเหลี่ยมมุมแหลม +สามเหลี่ยมหน้าจั่ว +สามัคคี +สามัญ- +สามัญสำนึก +สามัตถิยะ +สามานย- +สามานย์ +สามานยนาม +สามารถ +สามิก +สามิต +สามินี +สามิภักดิ์ +สามี +สามีจิกรรม +สาย +ส่าย +ส้าย +สายกระได +สายใจ +สายชู +สายซุง +สายดิน +สายตะพาย +สายตัว +สายตา +สายตาพิการ +สายติ่ง +สายน้ำ +สายน้ำผึ้ง +สายบัว +สายพาน +สายฟ้า +สายมงคล +สายม่าน +สายยู +สายโยก +สายใย +สายระเดียง +สายระยาง +สายระโยง +สายรัดทึบ +สายรุ้ง +สายล่อฟ้า +สายลับ +สายเลือด +สายโลหิต +ส่ายศึก +ส่ายเศิก +สายสนกลใน +สายสมร +สายสร้อย +สายสวาท +สายสะพาย +สายสิญจน์ +สายสูตร +สายหยุด +สายเหา +สายอากาศ +สายเอก +สายัณห์ +สายาห์ +สาร +สาร- +สารกรมธรรม์ +สารคดี +สารตรา +สารถี +สารถีชักรถ +สารท +สารทา +สารทุกข์สุกดิบ +สารธรรม +สารนิเทศ +สารบบ +สารบรรณ +สารบัญ +สารบับ +ส้ารบับ +สารบาญ +สารบาญชี +สารประกอบ +สารประโยชน์ +สารพัด +สารพัน +สารพางค์ +สารภาพ +สารภี +สารภีทะเล +สารภีป่า +สารไมย +สารละลาย +สารวัด +สารวัตร +สารสนเทศ +สารส้ม +สารหนู +สารหนูขาว +สาระ +สาระโกก +สาระแน +สาระพา +สาระพาเฮโล +สาระวอน +สาระวารี +สาระสะมา +สารัตถ- +สารัตถะ +สารัตถะประโยชน์ +สารัทธ์ +สารัมภ์ +สาราณีย- +สาราณียกร +สาราณียธรรม +สาราณียะ +สารานุกรม +สารีริกธาตุ +สารูป +สาโรช +สาละ +สาละวน +สาลิ +สาลิกา +สาลินี +สาลี +สาลี่ +สาลู +ส่าเลือด +สาโลหิต +สาว +สาวก +สาวกระทืบหอ +สาวก้าว +สาวแก่ +สาวเท้า +สาวน้อยเล่นน้ำ +สาวนะ +สาวแส้ +สาวไส้ +สาวไส้ให้กากิน +สาวิกา +สาวิตร +สาวิตรี +สาสน +สาสน- +สาสน์ +สาสนธรรม +สาสนา +สาหร่าย +สาหรี +ส่าหรี +สาหัตถ- +สาหัตถิก- +สาหัส +สาหัสสากรรจ์ +ส่าเห็ด +สาเหตุ +ส่าเหล้า +สาแหรก +สาฬุระ +สำ +ส่ำ +สำคัญ +สำซ่าง +สำแดง +สำทับ +สำนวด +สำนวน +สำนวนความ +สำนอง +สำนัก +สำนักสงฆ์ +สำนาน +สำนึก +สำนึง +สำเนา +สำเนียง +สำบอก +สำบัดสำนวน +สำปะลอ +สำปะหลัง +สำปั้น +สำปันนี +สำเภา +สำเภาทอง +สำมะงา +สำมะโน +สำมะโนครัว +สำมะโนประชากร +สำมะลอ +สำมะเลเทเมา +สำมะหา +สำรด +สำรวจ +สำรวม +สำรวมใจ +สำรวย +สำรวล +สำรอก +สำรอง +สำรับ +สำราก +สำราญ +สำริด +สำเร็จ +สำเร็จโทษ +สำเร็จรูป +สำเรา +สำเริง +สำโรง +สำลัก +สำลาน +สำลี +สำแลง +สำสร้าง +สำส่อน +สำสา +สำเส็ด +ส่ำเสีย +สำหรวด +สำหรับ +สำหา +สำเหนียก +สำเหร่ +สำออย +สำอาง +สิ +สิกข์ +สิกขมานา +สิกขา +สิกขากาม- +สิกขาบท +สิขร +สิขรี +สิขเรศ +สิขา +สิขานล +สิขี +สิคาล +สิง +สิ่ง +สิงขร +สิ่งของ +สิงค์ +สิงคลิ้ง +สิงคลี +สิงคาร +สิงคาล +สิงคี +สิงโต +สิงโตทะเล +สิ่งพิมพ์ +สิ่งละอันพันละน้อย +สิ่งแวดล้อม +สิงสถิต +สิงสาราสัตว์ +สิงสู่ +สิงห- +สิงห์ +สิงหนาท +สิงหบัญชร +สิงหรา +สิงหราช +สิงหล +สิงหลก- +สิงหาคม +สิงหาสน์ +สิญจ- +สิญจน์ +สิต- +สิตางศุ์ +สิถิล +สิทธ- +สิทธ์ +สิทธา +สิทธาจารย์ +สิทธานต์ +สิทธารถ +สิทธิ +สิทธิ์ +สิทธิกร +สิทธิการิยะ +สิทธิ์ขาด +สิทธิครอบครอง +สิทธิชัย +สิทธิโชค +สิทธิบัตร +สิทธิยึดหน่วง +สิทธิสภาพนอกอาณาเขต +สิธยะ +สิน +สิ้น +สินค้า +สินค้าเข้า +สินค้าออก +สิ้นคิด +สินจ้าง +สิ้นใจ +สิ้นชีพ +สิ้นชีพตักษัย +สิ้นชีวิต +สิ้นเชิง +สินเชื่อ +สินใช้ +สินเดิม +สิ้นตำรา +สิ้นแต้ม +สินไถ่ +สินทรัพย์ +สิ้นท่า +สินทูระ +สินเทา +สินธพ +สินธุ +สินธุระ +สินเธาว์ +สินน้ำใจ +สิ้นเนื้อประดาตัว +สินบน +สินบริคณห์ +สิ้นบุญ +สิ้นประตู +สิ้นพระชนม์ +สินระบาด +สินแร่ +สิ้นไร้ไม้ตอก +สิ้นฤทธิ์ +สิ้นลม +สินสมรส +สินส่วนตัว +สินสอด +สิ้นสุด +สินหัวบัวนาง +สินไหม +สินไหมทดแทน +สินะ +สินาด +สินิทธ์ +สินี +สิเนรุ +สิเนหก +สิเนหนียะ +สิเนหะ +สิเนหา +สิเน่หา +สิบ +สิบเบี้ยใกล้มือ +สิบแปดมงกุฎ +สิปปะ +สิพนะ +สิมพลี +สิร- +สิระ +สิริ +สิรี +สิโรดม +สิโรตม์ +สิลา +สิโลก +สิว +สิ่ว +สิ่วน่อง +สิวเสี้ยน +สิวะ +สิวาลัย +สิวิกา +สิหนา +สี +สี่ +สี้ +สีกรุด +สีกา +สีกุน +สีข้าง +สีฆ- +สีจัก +สีชมพูดง +สีชมพูสวน +สีซอให้ควายฟัง +สีด +สีดอ +สีต- +สีต้น +สีตล- +สีตลรัศมี +สีตลหฤทัย +สีตโลทก +สีโตทก +สีทันดร +สี่บท +สีผึ้ง +สีฝัด +สีฟันคนทา +สีฟันนางแอ +สีไฟ +สีมันต์ +สีมา +สีลม +สีละมัน +สีวิกา +สีสวรรค์ +สีสอ +สีสะ +สีสา +สีสุก +สีเสียด +สีเสียดแก่น +สีเสียดเปลือก +สีเสียดเหนือ +สีเสื้อน้อย +สีห- +สีห์ +สีหน้า +สีหนาท +สีหบัญชร +สีหราช +สีหะ +สี่เหลี่ยม +สี่เหลี่ยมขนมเปียกปูน +สี่เหลี่ยมคางหมู +สี่เหลี่ยมจัตุรัส +สี่เหลี่ยมด้านขนาน +สี่เหลี่ยมด้านไม่เท่า +สี่เหลี่ยมผืนผ้า +สึก +สึกหรอ +สึง +สืบ +สืบไป +สืบพยาน +สืบพันธุ์ +สืบพันธุ์แบบไม่อาศัยเพศ +สืบพันธุ์แบบอาศัยเพศ +สืบราชสมบัติ +สืบราชสันตติวงศ์ +สืบศาสนา +สืบสวน +สืบสันดาน +สืบสาย +สืบสาวราวเรื่อง +สืบเสาะ +สืบหูก +สื่อ +สื่อการศึกษา +สื่อมวลชน +สื่อสาร +สื่อสารมวลชน +สุ +สุก +สุกก่อนห่าม +สุกข์ +สุกดิบ +สุกๆ ดิบๆ +สุกแดด +สุกร +สุกรม +สุกใส +สุกเอาเผากิน +สุกำศพ +สุกียากี้ +สุข +สุข- +สุขนาฏกรรม +สุขภัณฑ์ +สุขภาพ +สุขลักษณะ +สุขวิทยา +สุขศาลา +สุขศึกษา +สุขา +สุขาภิบาล +สุขารมณ์ +สุขาวดี +สุขิน +สุขี +สุขุม +สุขุมาล +สุคต +สุคติ +สุคนธ- +สุคนธ์ +สุคนธรส +สุคันธ์ +สุงก- +สุงกะ +สุงกากร +สุงสิง +สุงสุมาร +สุงสุมารี +สุจริต +สุจหนี่ +สุจะ +สุจิ +สุจิต +สุจิตร +สุชน +สุชัมบดี +สุชา +สุชาดา +สุญ +สุญ- +สุญญ- +สุญญากาศ +สุญตา +สุญนิยม +สุณ +สุณหา +สุณิสา +สุด +สุดกำลัง +สุดกู่ +สุดขีด +สุดคน +สุดคิด +สุดจิต +สุดใจ +สุดด้าม +สุดแต่ +สุดโต่ง +สุดท้อง +สุดท้าย +สุดท้ายปลายโต่ง +สุดแรงเกิด +สุดลิ่ม +สุดวิสัย +สุดสงวน +สุดสวาทขาดใจ +สุดสายป่าน +สุดเสียง +สุดเสียงสังข์ +สุดหล้าฟ้าเขียว +สุดเหวี่ยง +สุดา +สุต +สุตกวี +สุตตะ +สุตตันตปิฎก +สุตตันตะ +สุติ +สุทธ- +สุทธ์ +สุทธาวาส +สุทธิ +สุทรรศน์ +สุทัศน์ +สุธา +สุธาการ +สุธาโภชน์ +สุธารส +สุธารสชา +สุธาสินี +สุธาสี +สุธี +สุนทร +สุนทร- +สุนทรพจน์ +สุนทรี +สุนทรีย- +สุนทรียภาพ +สุนทรียศาสตร์ +สุนทรียะ +สุนัข +สุนันท์ +สุโนก +สุบดี +สุบรรณ +สุบิน +สุปรีดิ์ +สุปรีย์ +สุปาณี +สุพพัต +สุพรรณ +สุพรรณ- +สุพรรณถัน +สุพรรณบัฏ +สุพรรณภาชน์ +สุพรรณราช +สุพรรณศรี +สุพรรณิการ์ +สุภ- +สุภร +สุภัค +สุภา +สุภาพ +สุภาพชน +สุภาพบุรุษ +สุภาพสตรี +สุภาษิต +สุม +สุ่ม +สุมขอน +สุมควัน +สุ่มตัวอย่าง +สุมทุม +สุมน +สุมนะ +สุมนัส +สุมนา +สุมยุง +สุ่มสี่สุ่มห้า +สุ้มเสียง +สุมหัว +สุมะ +สุมาลี +สุเมธ +สุเมรุ +สุร- +สุรคต +สุรงค์ +สุรเชษฐ์ +สุรบดี +สุรบถ +สุรภาพ +สุรภี +สุรโลก +สุรสีหนาท +สุรเสียง +สุรังค์ +สุรัติ +สุรัสวดี +สุรา +สุรางค์จำเรียง +สุรางคนา +สุรางคนางค์ +สุราบาน +สุรารักษ์ +สุราลัย +สุรินทร์ +สุรินทราหู +สุริย- +สุริยกันต์ +สุริยกานต์ +สุริยการ +สุริยกาล +สุริยคติ +สุริยคราส +สุริยเคราะห์ +สุริยง +สุริยน +สุริยมณฑล +สุริยะ +สุริยัน +สุริยา +สุริยุปราคา +สุริเยนทร์ +สุริเยศ +สุริโย +สุรีย์ +สุรุ่ยสุร่าย +สุเรนทร์ +สุลต่าน +สุว +สุวภาพ +สุวรรณ +สุวรรณ- +สุวรรณภูมิ +สุวาน +สุวินัย +สุวิมล +สุษิร +สุสาน +สุหนัต +สุหร่ง +สุหร่าย +สุหฤท +สุหัท +สุเหร่า +สู +สู่ +สู้ +สูกษม +สู่ขวัญ +สู่ขอ +สูง +สูงเท่านกเขาเหิน +สูงเทียมเมฆ +สูงส่ง +สูงสุดสอย +สูงอายุ +สูจกะ +สูจนะ +สูจิ +สูจิบัตร +สูเจ้า +สูญ +สูด +สูต +สูตร +สูตรเคมี +สูติ- +สูติกรรม +สูติบัตร +สูติแพทย์ +สูติศาสตร์ +สูท +สูท- +สูทกรรม +สูทศาสตร์ +สูน +สูนุ +สูบ +สูบเลือด +สูบเลือดสูบเนื้อ +สูป- +สูปการ +สูปะ +สู้ยิบตา +สู้เย็บตา +สูร +สู้รบตบมือ +สูรย- +สูรย์ +สูรยกานต์ +สูรยคราส +สูริ +สู่รู้ +สู่สม +สูสี +สู้หน้า +สู่หา +สู้เหมือนหมาจนตรอก +เส +เสก +เสกข- +เสกขบุคคล +เสกขะ +เสกสรร +เสข- +เสขบุคคล +เสขะ +เสความ +เส็ง +เส้ง +เส็งเคร็ง +เสงี่ยม +เสฏฐี +เสณี +เสด +เสด็จ +เสด็จในกรม +เสด็จพระราชดำเนิน +เสต- +เสตุ +เสถียร +เสถียร- +เสถียรภาพ +เสท +เสโท +เสน +เส้น +เส้นแกงร้อน +เส้นขนาน +เส้นแข็ง +เสนง +เสน่ง +เส้นด้าย +เส้นตาย +เส้นตื้น +เส้นทาง +เส้นบังคับ +เส้นผมบังภูเขา +เส้นผ่านศูนย์กลาง +เส้นผ่าศูนย์กลาง +เส้นแผลง +เส้นยาแดงผ่าแปด +เส้นใย +เส้นใยแก้ว +เส้นรอบวง +เส้นรัศมี +เส้นแร +เส้นลายมือ +เส้นลึก +เส้นเลือด +เส้นวันที่ +เส้นศูนย์สูตร +เส้นสมมาตร +เส้นสัมผัส +เส้นสาย +เสนห- +เสน่ห์ +เสน่ห์จันทร์ขาว +เสน่ห์จันทร์แดง +เสน่ห์ปลายจวัก +เส้นหมี่ +เสนหา +เสน่หา +เสนอ +เส้นฮ่อ +เสนะ +เสนา +เสน่า +เสนากุฎ +เสนางค์ +เสนางคนิกร +เสนาธิการ +เสนาธิปัต +เสนานี +เสนาบดี +เสนาพยุห์ +เสนาพยูห์ +เสนาสนะ +เสนาะ +เสนี +เสนีย์ +เสนียด +เสนียะ +เสบย +เสบียง +เสบียงกรัง +เสพ +เสพย์ติด +เสเพล +เสภา +เสม็ด +เสมหะ +เสมอ +เสมอใจ +เสมอต้นเสมอปลาย +เสมอตัว +เสมอนอก +เสมอบ่าเสมอไหล่ +เสมอภาค +เสมอหน้า +เสมา +เสมียน +เสมือน +เสย +เสร็จ +เสริด +เสริม +เสริมสวย +เสรี +เสรีไทย +เสรีธรรม +เสรีนิยม +เสรีภาพ +เสล- +เสลด +เสลดพังพอน +เสลดหางวัว +เสลบรรพต +เสลา +เสลี่ยง +เสลือกสลน +เสโล +เสวก +เสวกามาตย์ +เสวนะ +เสวนา +เสวย +เสวยพระชาติ +เสวียน +เสสรวง +เสสรวล +เสแสร้ง +เสา +เส้า +เสากระโดง +เสาเข็ม +เสาชี้ +เสาดั้ง +เสาตะลุง +เสานางเรียง +เสาร์ +เสารภย์ +เสารี +เสาว- +เสาวคนธ์ +เสาวคันธ์ +เสาวณิต +เสาวธาร +เสาวนะ +เสาวนา +เสาวนาการ +เสาวนีย์ +เสาวภา +เสาวภาคย์ +เสาวภาพ +เสาวรภย์ +เสาวรส +เสาวลักษณ์ +เสาหมอ +เสาหฤท +เสาหาน +เสาเอก +เสาะ +เสาะด้าย +เสาะป่าน +เสาะแสะ +เสิร์จ +เสิร์ฟ +เสีย +เสียกบาล +เสียกระบวน +เสียกล +เสียการ +เสียกำซ้ำกอบ +เสียกำได้กอบ +เสียกำลังใจ +เสียกิริยา +เสียขวง +เสียขวัญ +เสียคน +เสียคำพูด +เสียง +เสี่ยง +เสียงเขียว +เสียงแข็ง +เสี่ยงชีวิต +เสียงแตก +เสียงทอง +เสี่ยงทาย +เสี่ยงบุญเสี่ยงกรรม +เสียงพยัญชนะ +เสี่ยงภัย +เสียงสระ +เสียงหลง +เสียงอ่อน +เสียจริต +เสียใจ +เสียโฉม +เสียชาติเกิด +เสียชื่อ +เสียเชิง +เสียด +เสียดใบ +เสียดสี +เสียดาย +เสียเด็ก +เสียตัว +เสียแต้ม +เสียเถอะ +เสียเถิด +เสียท่า +เสียที +เสี้ยน +เสี้ยนศึก +เสี้ยนหนาม +เสียน้ำใจ +เสียน้ำตา +เสียเนื้อเสียตัว +เสียบ +เสียบน +เสียบหนู +เสียปาก +เสียเปรียบ +เสียผี +เสียผู้ใหญ่ +เสียภูมิ +เสียม +เสี่ยม +เสี้ยม +เสี้ยมเขาควายให้ชนกัน +เสี้ยมสอน +เสี่ยมสาร +เสียรอย +เสียรังวัด +เสียราศี +เสียรู้ +เสียรูป +เสียรูปคดี +เสียแรง +เสียว +เสี่ยว +เสี้ยว +เสียวซ่าน +เสียวไส้ +เสียเศวตฉัตร +เสียสละ +เสียสาว +เสียเส้น +เสียหน่อย +เสียหน้า +เสียหลัก +เสียหลาย +เสียหัว +เสียหาย +เสียเหลี่ยม +เสือ +เสื่อ +เสื้อ +เสือก +เสือกกะโหลก +เสือกคลาน +เสือกระดาษ +เสือกระต่าย +เสื้อกล้าม +เสือกสน +เสือกไส +เสื้อกั๊ก +เสือกินวัว +เสือเก่า +เสือข้ามห้วย +เสือจนท่า ข้าจนทาง +เสือซ่อนเล็บ +เสือเฒ่าจำศีล +เสือดาว +เสือดำ +เสือตกถัง +เสือตบก้น +เสือทลายห้าง ช้างทลายโรง +เสือทะเล +เสือนอนกิน +เสือนั่งร่ม +เสื้อน้ำ +เสื่อน้ำมัน +เสือในร่างสมัน +เสือบอง +เสือปลา +เสือป่า +เสือป่าแมวเซา +เสือป่าแมวมอง +เสือไฟ +เสื่อม +เสื่อมทราม +เสื่อมโทรม +เสื่อมสิทธิ์ +เสื่อมเสีย +เสือแมลงวัน +เสือรู้ +เสื่อลวด +เสือลากหาง +เสื่อลำแพน +เสือสมิง +เสือสิ้นตวัก +เสือสุมาตรา +เสื้อแสง +เสือหมอบ +เสือหิว +แส +แส่ +แส้ +แสก +แสกๆ +แสกหน้า +แสง +แสงเงินแสงทอง +แสงจันทร์ +แสงสว่าง +แสงอาทิตย์ +แสด +แสดง +แสดงออก +แสตมป์ +แสเถา +แสน +แสนกล +แสนง +แสนงอน +แสนย- +แสนย์ +แสนยากร +แสนยานุภาพ +แสนรู้ +แสนเสนาะ +แสนา +แสบ +แสบก +แสม +แสมสาร +แส้ม้า +แส้ม้าทะลาย +แสยก +แสยง +แสยงขน +แสยะ +แสรก +แสร้ง +แสร้งว่า +แสลง +แสลงใจ +แสลงเบื่อ +แสวง +แสอก +แสะ +โสก +โสกโดก +โสกันต์ +โสกาดานา +โสโครก +โสณ +โสณฑ์ +โสณิ +โสณี +โสด +โสดก +โสดม +โสดา +โสดาบัน +โสดาปัตติผล +โสดาปัตติมรรค +โสต +โสต- +โสตถิ +โสตทัศนวัสดุ +โสตทัศนอุปกรณ์ +โสทก +โสทร +โสธก +โสธนะ +โสน +โสนกินดอก +โสนคางคก +โสนหางไก่ +โสนหิน +โสภ- +โสภณ +โสภา +โสภิณี +โสภี +โสเภณี +โสม +โสมนัส +โสมม +โสมย์ +โสมส่องแสง +โสร่ง +โสรจ +โสรจสรง +โสวรรณ +โสหุ้ย +โสฬส +ใส +ใส่ +ใส่ความ +ใส่คะแนนไม่ทัน +ใส่ไคล้ +ใส่ใจ +ใส่ตะกร้าล้างน้ำ +ใส่ถ้อยร้อยความ +ใส่ไฟ +ใส่ยา +ใส่ร้าย +ใส่สาแหรกแขวนไว้ +ใส่สีสัน +ใส่ไส้ +ใส่หน้ากาก +ใส่หน้ายักษ์ +ไส +ไส้ +ไส้กรอก +ไส้ไก่ +ไส้แขวน +ไส้เดือน +ไส้ตัน +ไส้ติ่ง +ไส้เป็นน้ำเหลือง +ไส้เป็นหนอน +ไสย +ไสย- +ไสยเวท +ไสยศาสตร์ +ไสยา +ไสยาสน์ +ไสร้ +ไส้ละมาน +ไส้เลื่อน +ไสว +ไส้ศึก +ไสหัว +ไส้แห้ง +ไส้อั่ว +ห +หก +หกคว่ำ +หกคะเมน +หกบท +หกล้ม +หกโล่ +หกหัน +หง +หงกๆ +หงส- +หงส์ +หงสคติ +หงส์ทอง +หงสบาท +หงสรถ +หงส์ร่อนมังกรรำ +หงสราช +หงส์ลีลา +หงส์หยก +หงอ +หงอก +หง่องๆ +หงองแหงง +หงอด +หงอดๆ +หงอน +หงอนไก่ +หงอนไก่ป่า +หง่อม +หงอย +หง่อย +หงอยก๋อย +หงอยเหงา +หงักๆ +หงับๆ +หง่าง +หงาย +หงายท้อง +หงายหลัง +หง่าว +หงำ +หงำเหงอะ +หงิก +หงิงๆ +หงิม +หงิมๆ +หงึกๆ +หงุงหงิง +หงุดหงิด +หงุบ +หงุบหงับ +หงุ่ย +หญ้า +หญ้ากระจาม +หญ้าเกล็ดหอย +หญ้าขัด +หญ้าขัดใบยาว +หญ้าขัดหลวง +หญ้างวงช้าง +หญ้าจาม +หญ้าใต้ใบ +หญ้าถอดปล้อง +หญ้าน้ำดับไฟ +หญ้าบัว +หญ้าปากคอก +หญ้าปีนตอ +หญ้าฝรั่น +หญ้าพันงู +หญ้าเพ็ก +หญ้าแพรก +หญ้ายองไฟ +หญ้ายายเภา +หญ้ารกช้าง +หญ้ารากขาว +หญ้าลิเภา +หญ้าหนวดแมว +หญ้าแห้วหมู +หญิง +หญิบ +หด +หดหาย +หดหู่ +หตะ +หทย- +หทัย +หน +หนทาง +หนนะ +หนวก +หนวกหู +หน่วง +หน่วงเหนี่ยว +หนวด +หนวดนาคราช +หนวดพราหมณ์ +หนวดแมว +หน่วย +หน่วยก้าน +หน่วยกิต +หน่วยดาราศาสตร์ +หนอ +หน่อ +หนอก +หนอกช้าง +หนอง +หนองแซง +หนองใน +หน็องแหน็ง +หนอน +หนอนกระทู้ +หนอนกระสือ +หนอนกอ +หนอนด้น +หนอนตายหยาก +หนอนบ่อนไส้ +หนอนพยาธิ +หนอนม้วนใบข้าว +หนอนหนังสือ +หน่อเนื้อเชื้อไข +หน่อไม้ +หน่อไม้น้ำ +หน่อไม้ฝรั่ง +หน่อย +หน็อยแน่ +หนัก +หนักข้อ +หนักใจ +หนักแน่น +หนักปาก +หนักแผ่นดิน +หนักมือ +หนักไม่เอา เบาไม่สู้ +หนักหน่วง +หนักหนา +หนักหน้า +หนักอก +หนัง +หนังกลางวัน +หนังกำพร้า +หนังไก่ +หนังตะลุง +หนังเรียด +หนังสติ๊ก +หนังสือ +หนังสือเดินทาง +หนังสือบริคณห์สนธิ +หนังสือพิมพ์ +หนังสือรับรองการทำประโยชน์ +หนังสือเวียน +หนังสือสัญญา +หนังหน้าไฟ +หนังใหญ่ +หนั่น +หนับ +หนา +หน้า +หน้ากระฉีก +หน้ากระดาน +หน้ากาก +หนากาสรี +หน้าเก้อ +หน้าขา +หน้าข้าวตัง +หน้าแข้ง +หน้าคว่ำ +หน่าง +หน้างอ +หน้างอก +หน้าเง้า +หน้าแง +หน้าจ๋อย +หน้าจั่ว +หน้าจืด +หน้าฉาก +หน้าฉาน +หน้าโฉนด +หน้าซีด +หน้าซื่อใจคด +หน้าเซียว +หนาด +หน้าด้าน +หน้าตัก +หน้าตั้ง +หนาตา +หน้าตา +หน้าต่าง +หน้าตาย +หน้าตึง +หน้าตื่น +หน้าตูม +หน้าเตา +หน้าถัง +หน้าทับ +หน้าที่ +หน้าที่นั่ง +หนาน +หน้านวล +หน้าเนื้อใจเสือ +หนาแน่น +หน้าบัน +หน้าบาง +หน้าบาน +หน้าบูด +หน้าปัด +หน้าเป็น +หน้าผา +หน้าผาก +หน้าพาทย์ +หน้าไฟ +หนาม +หนามขี้แรด +หนามเขียะ +หนามควายนอน +หนามจี้ +หนามแดง +หนามเตย +หนามพรม +หนามพุงดอ +หนามยอกอก +หนามยอกเอาหนามบ่ง +หนามรอบตัว +หนามหลัง +หนามเหม็น +หนามแหลมไม่มีใครเสี้ยม +หนามใหญ่ +หน้ามอด +หน้าม่อย +หน้าม้า +หน้ามืด +หน้ามุข +หน้าไม้ +หน่าย +หน่ายหนี +หน่ายแหนง +หน้าร่าหุ์ +หน้าราหู +หน้าเลือด +หนาว +หนาวใจ +หน้าวัว +หน้าแว่น +หน้าสิ่วหน้าขวาน +หน้าเสีย +หน้าเสี้ยว +หน้าหนา +หน้าหัก +หนาหู +หนาหูหนาตา +หน้าใหญ่ใจโต +หน้าไหว้หลังหลอก +หน้าอก +หน้าอัด +หนำ +หนำใจ +หนำเลี้ยบ +หนี +หนี้ +หนี้เกลื่อนกลืนกัน +หนีบ +หนี้สิน +หนี้สูญ +หนีเสือ +หนีเสือปะจระเข้ +หนึก +หนึ่ง +หนึบ +หนืด +หนุ +หนุน +หนุนเนื่อง +หนุนหลัง +หนุบ +หนุบๆ +หนุบหนับ +หนุ่ม +หนุ่มทั้งแท่ง +หนุ่มแน่น +หนุ่มเหน้า +หนุ่ย +หนู +หนูตกถังข้าวสาร +หนูติดจั่น +หนูผี +ห่ม +หมก +หมกมุ่น +หมกไหม้ +หมด +หมดกระเป๋า +หมดกัน +หมดเขต +หมดเขี้ยวหมดงา +หมดจด +หมดตัว +หมดตำรา +หมดตูด +หมดเนื้อหมดตัว +หมดบุญ +หมดประตู +หมดเปลือก +หมดพก +หมดพุง +หมดรูป +หมดไส้หมดพุง +ห่มดอง +หมดอายุ +หมดอาลัย +หมดอาลัยตายอยาก +หมดอาลัยไยดี +หม่น +หม่นหมอง +หม่นไหม้ +หมวก +หมวกกะโล่ +หมวกแก๊ป +หมวกแจว +หมวกทรงหม้อตาล +หมวกนิรภัย +หมวกหูกระต่าย +หมวด +หมอ +หม่อ +หม้อ +หมอก +หม้อแกง +หม้อแกงค่าง +หม้อแกงลิง +หมอขวัญ +หม้อข้าวหม้อแกงลิง +หมอความ +หมอง +หม่อง +หมองใจ +หมองมัว +หมองหมาง +หมอช้างเหยียบ +หมอเฒ่า +หมอดู +หมอตาล +หม้อตาล +หมอตำแย +หม้อทะนน +หมอไทย +หมอน +หม่อน +หมอนขวาน +หมอนข้าง +หมอนทอง +หมอน้อย +หม้อน้ำ +หมอน้ำมัน +หมอบ +หมอบกระแต +หมอบราบคาบแก้ว +หม้อแปลง +หม้อแปลงไฟ +หมอผี +หมอพัดโตนด +หม่อม +หม่อมเจ้า +หม่อมฉัน +หม่อมราชวงศ์ +หม่อมหลวง +หม่อมห้าม +หมอย +หมอลำ +หม้อหนู +หม้อห้อม +หมัก +หมักหมม +หมัด +หมัน +หมั่น +หมั้น +หมั่นไส้ +หมับ +หมับๆ +หมา +หม่า +หม้า +หมาก +หมากเก็บ +หมากข่วง +หมากเขียว +หมากแข้ง +หมากคัน +หมากดิบ +หมากแดง +หมากทัน +หมากผาง +หมากผู้หมากเมีย +หมากฝรั่ง +หมากม่วน +หมากมาศ +หมากเม่า +หมากเม่าควาย +หมากยับ +หมากแยก +หมากรุก +หมากลิง +หมากสง +หมากหนาม +หมากหอมควาย +หมากเหลือง +หมากอีแปะ +หมากฮอส +หมาขี้ไม่มีใครยกหาง +หมาง +หมางใจ +หมางเมิน +หมาจิ้งจอก +หมาด +หมาใน +หมาป่า +หมามุ่ย +หมามุ้ย +หมาไม้ +หมาย +หม้าย +หมายกำหนดการ +หมายเกณฑ์ +หมายขัง +หมายค้น +หมายความ +หมายจับ +หมายจำคุก +หมายใจ +หมายตัว +หมายตา +หมายน้ำบ่อหน้า +หมายปล่อย +หมายมั่น +หมายมั่นปั้นมือ +หมายยา +หมายเรียก +หมายเลข +หมายหัว +หมายเหตุ +หมายอาญา +หมาร่า +หมาสองราง +หมาหมู่ +หมาหยอกไก่ +หมาหวงก้าง +หมาหัวเน่า +หมาหางด้วน +หมาเห่าใบตองแห้ง +หม่ำ +หม้ำ +หม้ำตับ +หมิ่น +หมิ่นประมาท +หมิ่นพระบรมเดชานุภาพ +หมิ่นเหม่ +หมี +หมี่ +หมีเหม็น +หมึก +หมืน +หมื่น +หมุด +หมุน +หมุนเงิน +หมุนเวียน +หมุบ +หมุบหมับ +หมุบหมิบ +หมุ่ย +หมุยขาว +หมู +หมู่ +หมูเขาจะหามเอาคานเข้าไปสอด +หมูแดง +หมูตั้ง +หมูเทโพ +หมูน้ำ +หมูแนม +หมูในเล้า +หมูในอวย +หมูป่า +หมูไปไก่มา +หมูแผ่น +หมูยอ +หมูสนาม +หมูสามชั้น +หมูสี +หมูหย็อง +หมูหริ่ง +หมูหรึ่ง +หมูหัน +หมูแฮม +หย- +หยก +หยกๆ +หย่ง +หย่งๆ +หยด +หยดย้อย +หยวก +หยวบ +หยวบๆ +หยอก +หยอกเย้า +หย็อกหย็อย +หยอกเอิน +หย็อง +หย่อง +หย่องๆ +หย็องกรอด +หย็องแหย็ง +หยอด +หยอดหลุม +หยอน +หย่อน +หย่อนใจ +หย่อนอารมณ์ +หย่อม +หย็อมแหย็ม +หย็อย +หย่อย +หยัก +หยักไย่ +หยักรั้ง +หยักศก +หยักเหยา +หยัง +หยั่ง +หยั่งทราบ +หยั่งรู้ +หยั่งเสียง +หยังหยัง +หยัด +หยัน +หยับ +หยับๆ +หยั่วเมือง +หย่า +หยากเยื่อ +หยากไย่ +หย่ากัน +หยาด +หยาดน้ำค้าง +หยาดน้ำฟ้า +หย่านม +หยาบ +หยาบคาย +หยาบช้า +หยาบหยาม +หยาม +หยามน้ำหน้า +หยาว +หย้าว +หยำเป +หยำเหยอะ +หยำแหยะ +หยิก +หยิกแกมหยอก +หยิกหย็อง +หยิ่ง +หยิบ +หยิบผิด +หยิบยก +หยิบยืม +หยิบหย่ง +หยิมๆ +หยี +หยี่ +หยุ +หยุกหยิก +หยุด +หยุดหย่อน +หยุ่น +หยุบๆ +หยุมหยิม +หยูกยา +หโยดม +หร +หรคุณ +หรณ +หรดาล +หรดาลกลีบทอง +หรดาลแดง +หรดี +หรบๆ +หรรษ- +หรรษา +หรอ +หรอก +หร็อมแหร็ม +หรอยๆ +หระ +หรับๆ +หรัสว- +หรัสวมูรดี +หรัสวางค์ +หรา +หริ +หริคันธ์ +หริ่ง +หริ่งๆ +หริจันทน์ +หริณะ +หริต +หริตกี +หริรักษ์ +หริวงศ์ +หรี่ +หรีด +หรีตกี +หรือ +หรุบๆ +หรุบรู่ +หรุบหรู่ +หรุ่ม +หรู +หรูหรา +หฤทย +หฤทย์ +หฤทัย +หฤทัย- +หฤทัยกลม +หฤทัยกัปน์ +หฤทัยกัมป์ +หฤทัยปรีย์ +หฤทัยพันธน์ +หฤษฎ์ +หฤษฎี +หฤหรรษ์ +หฤโหด +หล +หลง +หลงกล +หลงตา +หลงลม +หลงลืม +หลงหูหลงตา +หลงเหลือ +หลงใหล +หลด +หลน +หล่น +หลบ +หลบตา +หลบฝาก +หลบมุม +หลบหน้า +หลบหน้าหลบตา +หลบหลังคา +หล่ม +หลวง +หลวงจีน +หลวม +หลวมตัว +หลอ +หล่อ +หลอก +หลอกๆ +หลอกลวง +หลอกล่อ +หลอกหลอน +หลอด +หลอดลม +หลอดลมคอ +หลอดลมฝอย +หลอดเลือด +หลอดอาหาร +หลอน +หล็อน +หล็อนๆ +หล่อน +หลอม +หลอมตัว +หลอมละลาย +หลอมเหลว +หล่อลื่น +หล่อเลี้ยง +หล่อเหลา +หละ +หละหลวม +หลัก +หลักการ +หลักเกณฑ์ +หลักแจว +หลักชัย +หลักฐาน +หลักตอ +หลักทรัพย์ +หลักประกัน +หลักพยาน +หลักลอย +หลักสูตร +หลักแหล่ง +หลักแหลม +หลัง +หลั่ง +หลังเขียว +หลังคา +หลังคาเรือน +หลังจาก +หลังฉาก +หลังเต่า +หลังยาว +หลั่งไหล +หลัดๆ +หลั่น +หลับ +หลับตา +หลับนก +หลับใน +หลัว +หลา +หล้า +หลาก +หลากใจ +หลากหลาย +หลาท +หลาน +หลาบ +หลาบจำ +หลาม +หลาย +หลายเติบ +หลายหลาก +หลายแหล่ +หลาว +หลาวเหล็ก +หลาหล +หลิก +หลิ่ง +หลิท +หลิน +หลิม +หลิว +หลิ่ว +หลิ่วตา +หลี +หลีก +หลีโก +หลีบ +หลีฮื้อ +หลืบ +หลุกหลิก +หลุด +หลุดปาก +หลุดพ้น +หลุดมือ +หลุดลอย +หลุดลุ่ย +หลุนๆ +หลุบ +หลุบลู่ +หลุม +หลุมโจน +หลุมพราง +หลุมพอ +หลุมพี +หลุมหลบภัย +หลุมอากาศ +หลู่ +หลู่หลี่ +หวง +ห่วง +ห้วง +หวงก้าง +ห่วงใย +หวงห้าม +หวงแหน +หวด +หวน +ห้วน +ห้วนๆ +หวนคำนึง +หวย +ห้วย +หวอ +หวอด +หว็อยๆ +หวะ +หวัง +หวัด +หวัดๆ +หวั่น +หวันยิหวา +หวั่นหวาด +หวั่นไหว +หวัว +หวัวร่อ +หวัวเราะ +หวา +หว่า +หว้า +หวาก +หว่าง +หวาด +หวาดระแวง +หวาดเสียว +หวาดหวั่น +หวาดไหว +หวาน +หว่าน +หวานคอแร้ง +หว่านล้อม +หวาม +หวาย +หวายดิน +หวายตะมอย +หวำ +หวิด +หวิว +หวี +หวี่ +หวีด +หวือ +หวุดหวิด +หวุม +หวูด +หสน- +หอ +ห่อ +ห้อ +หอก +หอกข้างแคร่ +หอกซัด +หอการค้า +หอคอย +หอคำ +หอง +ห้อง +ห้องเครื่อง +ห้องชุด +ห้องแถว +ห้องน้ำ +ห้องสมุด +หอจดหมายเหตุ +ห่อตัว +หอไตร +หอน +ห่อน +หอบ +หอบหิ้ว +หอบหืด +หอบังคับการ +หอประชุม +หอพัก +หอม +ห้อม +หอมกราย +หอมขาว +หอมจันทร์ +หอมแดง +หอมเตียม +หอมป้อม +หอมแป้น +ห้อมเมือง +หอมยับ +ห้อมล้อม +หอมหวน +หอย +ห้อย +หอยโข่ง +ห้อยท้าย +หอยปากเป็ด +หอยแปดเกล็ด +หอยเม่น +ห้อยโหน +หอสมุด +ห่อหมก +ห่อเหี่ยว +ห่อแห่ +ห้อแห้ +หะ +หะยี +หะแรก +หะหาย +หะห้าย +หะแห้น +หัก +หักกลบลบหนี้ +หักคอ +หักใจ +หักด้ามพร้าด้วยเข่า +หักทองขวาง +หักบัญชี +หักมุก +หักราคา +หักร้าง +หักแรง +หักล้าง +หักลำ +หักหน้า +หักหลัง +หักหาญ +หักห้าม +หักเห +หักโหม +หักอก +หักอกหักใจ +หังส- +หัจญ์ +หัจญี +หัช +หัฏฐะ +หัด +หัดเยอรมัน +หัต +หัตถ- +หัตถ์ +หัตถกรรม +หัตถการ +หัตถกิจ +หัตถบาส +หัตถพันธ์ +หัตถศิลป์ +หัตถศึกษา +หัตถาจารย์ +หัตถานึก +หัตถาภรณ์ +หัตถาโรหะ +หัตถาลังการ +หัตถินี +หัตถี +หัน +หั่น +หั้น +หันตรา +หันตา +หันรีหันขวาง +หันหน้าเข้าหากัน +หันหลังให้กัน +หันเห +หั่นแหลก +หันอากาศ +หับ +หับเผย +หัมมียะ +หัย +หัว +หัวกระเด็น +หัวกระไดไม่แห้ง +หัวกระสุน +หัวก๊อก +หัวกะทิ +หัวก่ายท้ายเกย +หัวกุญแจ +หัวเก่า +หัวแก้วหัวแหวน +หัวขโมย +หัวขวาน +หัวข้อ +หัวขั้ว +หัวขาด +หัวขี้แต้ +หัวขี้หมา +หัวเข้า +หัวแข็ง +หัวโขน +หัวคว่ำ +หัวคะแนน +หัวค่ำ +หัวคิด +หัวใคร่ +หัวงอน +หัวงาน +หัวเงิน +หัวเงื่อน +หัวโจก +หัวใจ +หัวชนกำแพง +หัวชนฝา +หัวซุกหัวซุน +หัวซุน +หัวด้วน +หัวดาวหัวเดือน +หัวดื้อ +หัวเด็ดตีนขาด +หัวเดียวกระเทียมลีบ +หัวต่อ +หัวตะกั่ว +หัวตะคาก +หัวตะโหงก +หัวเต่า +หัวเตาไฟ +หัวถอก +หัวเถิก +หัวที +หัวเทียน +หัวเทียม +หัวนกกระจอก +หัวนม +หัวนอก +หัวนอน +หัวนอนปลายตีน +หัวน้ำ +หัวน้ำขึ้น +หัวน้ำลง +หัวเนื้อ +หัวเนื้อทราย +หัวบัว +หัวเบี้ย +หัวโบราณ +หัวปลวก +หัวปลี +หัวปักหัวปำ +หัวปั่น +หัวป่า +หัวปาก +หัวปี +หัวพัน +หัวพุงหัวมัน +หัวฟืนหัวไฟ +หัวมังกุท้ายมังกร +หัวมัน +หัวเม็ด +หัวเมือง +หัวแม่ตีน +หัวแม่เท้า +หัวแม่มือ +หัวแมลงวัน +หัวไม้ +หัวไม่วางหางไม่เว้น +หัวรอ +หัวร่อ +หัวร้อยรู +หัวระแหง +หัวรักหัวใคร่ +หัวรั้น +หัวราน้ำ +หัวรุนแรง +หัวเราะ +หัวเรี่ยวหัวแรง +หัวเรื่อง +หัวเรือใหญ่ +หัวแรง +หัวแร้ง +หัวลม +หัวล้าน +หัวลิง +หัวเลี้ยว +หัวเลี้ยวหัวต่อ +หัวโล้น +หัวว่าว +หัวสำเภา +หัวสูง +หัวเสีย +หัวไส้ +หัวหกก้นขวิด +หัวหงอก +หัวหด +หัวหน้า +หัวหน่าว +หัวหมอ +หัวหมื่น +หัวหมุน +หัวหมู +หัวหลักหัวตอ +หัวหาด +หัวหายตะพายขาด +หัวเห็ด +หัวแหลม +หัวแหวน +หัวใหม่ +หัวไหล่ +หัวอก +หัวออก +หัวอ่อน +หัส +หัสดิน +หัสดี +หัสต +หัสต์ +หัสตะ +หา +ห่า +ห้า +หาก +หากว่า +หากิน +ห่ากิน +หาความ +หาค่ามิได้ +หาง +ห่าง +ห้าง +หางกระเบน +หางกระรอก +หางกระหมวด +หางกราย +หางกะลวย +หางกะลวยไก่ +หางกังหัน +หางกิ่ว +หางแกละ +หางไก่ +หางขมวด +หางขอด +หางข้าว +หางแข็ง +หางค้อ +หางเครื่อง +หางจระเข้ +หางจิ้งเหลน +หางช้าง +หางเต่า +หางแถว +หางนกกะลิง +หางนกยูง +หางนกยูงฝรั่ง +หางนาค +หางปลา +หางเปีย +หางแพน +หางแมงป่อง +หางยาม +หางยาว +หางเลข +หางว่าว +หางสิงห์ +หางเสียง +หางเสือ +หางหงส์ +หางหนู +ห้างหุ้นส่วน +ห้างหุ้นส่วนจำกัด +ห้างหุ้นส่วนสามัญ +ห่างเห +ห่างเหิน +หางไหล +หางไหลแดง +หางไหลเผือก +หาเงิน +หาเช้ากินค่ำ +หาญ +หาด +หาดก +หาตก +หาตัวจับยาก +ห้าแต้ม +หาน +ห่าน +หาบ +หาบมิได้ +หาบเร่ +หาบหลวง +หาม +ห่าม +ห้าม +ห้ามญาติ +ห้ามทัพ +ห้ามปราม +ห้ามเปลี่ยนมือ +ห้ามพระแก่นจันทน์ +หามรอก +หามรุ่งหามค่ำ +ห้ามล้อ +ห้ามเลือด +หามแล่น +ห้ามสมุทร +หามิได้ +หาไม่ +หาไม่ก็ +หาย +หายกัน +หายขาด +หายเข้ากลีบเมฆ +หายใจ +หายใจไม่ทั่วท้อง +หายตัว +หายนะ +หายหกตกหล่น +หายหน้า +หายห่วง +หายหัว +หาร +หารร่วมมาก +หาริ +หาริน +หารี +หารือ +หาเรื่อง +ห่าลง +หาลิท +หาเลือดกับปู +หาว +ห้าว +หาวนอน +ห้าวหาญ +หาเศษหาเลย +หาส +หาสก +หาสยะ +หาสู่ +หาเสียง +หาห่วงมาคล้องคอ +หาเหตุ +หำ +ห้ำ +ห้ำหัก +ห้ำหั่น +หิ้ง +หิงคุ +หิงสา +หิงห้อย +หิ่งห้อย +หิ่งหาย +หิด +หิต +หิต- +หิตกร +หิตประโยชน์ +หิตพจน์ +หิตวจนะ +หิตานุหิตประโยชน์ +หิน +หิน- +หินงอก +หินชนวน +หินชั้น +หินชาติ +หินดินดาน +หินดินสอพอง +หินตะกอน +หินตับเป็ด +หินทราย +หินน้ำมัน +หินปูน +หินแปร +หินฝนทอง +หินย้อย +หินยาน +หินแลง +หินสบู่ +หินโสโครก +หินหนืด +หินอ่อน +หินอัคนี +หิม- +หิมพาน +หิมพานต์ +หิมวัต +หิมวันต์ +หิมวา +หิมวาต +หิมวาน +หิมวาส +หิมเวศ +หิมะ +หิมาลัย +หิรัญ +หิรัญ- +หิรัญญิการ์ +หิรัญบัฏ +หิรัณย- +หิรัณย์ +หิรัณยการ +หิรัณยเกศ +หิรัณยรัศมี +หิริ +หิริโอตตัปปะ +หิว +หิ้ว +หิ้วท้อง +หิ้วปีก +หี +หีด +หีตา +หีเต่า +หีน- +หีนยาน +หีบ +หีบชัก +หีบเชิงชาย +หีบฝ้าย +หีบพระมาลัย +หีบเพลง +หีบเพลงชัก +หีบเพลงปาก +หีบสไบ +หีบเสียง +หีบห่อ +หึๆ +หึง +หึ่ง +หึ่งๆ +หึงส- +หึงสา +หืด +หืน +หื่น +หื่นหรรษ์ +หือ +หื้อ +หือไม่ขึ้น +หือรือโหด +หุง +หุงข้าวประชดหมา +หุต- +หุตโกวิท +หุตาจารย์ +หุน +หุ่น +หุ้น +หุ้นกู้ +หุ่นนิ่ง +หุ้นบุริมสิทธิ +หุ่นพยนต์ +หุ้นลม +หุ่นไล่กา +หุ้นส่วน +หุนหัน +หุนหันพลันแล่น +หุบ +หุบเขา +หุบปาก +หุบผา +หุบเหว +หุ้ม +หุ้มกลอง +หุ้มแผลง +หุ้มแพร +หุ้ยหุย +หุยฮา +หุรัม +หุหนิงหงัน +หู +หู่ +หูก +หูกระต่าย +หูกวาง +หูแจว +หูฉลาม +หูฉี่ +หูชอง +หูช้าง +หูด +หูดับตับไหม้ +หูตาสว่าง +หูติ +หูตึง +หูตูบ +หูทวนลม +หูเบา +หูปลาช่อน +หูป่าตาเถื่อน +หูผีจมูกมด +หูผึ่ง +หูรูด +หูไว +หูไวตาไว +หูเสือ +หูหนาตาโต +หูหนาตาเล่อ +หูหนู +หู่หี่ +หูไห +เห +เห่ +เหง +เหง่ง +เหงา +เหง้า +เหงาหงอย +เหงื่อ +เหงือก +เหงือกปลาหมอ +เหงื่อกาฬ +เห็จ +เห็ด +เห็ดโคน +เห็ดหลุบ +เหติ +เหตุ +เหตุการณ์ +เหตุผล +เหตุสุดวิสัย +เห็น +เห็นกงจักรเป็นดอกบัว +เห็นแก่ +เห็นแก่หน้า +เห็นขี้ดีกว่าไส้ +เห็นเขาขึ้นคานหาม เอามือประสานก้น +เหน่ง +เหนงนายพราน +เห็นจะ +เห็นใจ +เห็นช้างขี้ ขี้ตามช้าง +เหน็ด +เหน็ดเหนื่อย +เห็นดำเห็นแดง +เห็นดี +เหน็บ +เหน็บชา +เหน็บแนม +เห็นหน้าเห็นหลัง +เหน่อ +เห็นอ้ม +เหนอะ +เหนอะหนะ +เหน้า +เหนาะๆ +เหนียง +เหนี่ยง +เหนียงนกกระทุง +เหนี่ยน +เหนียม +เหนียว +เหนี่ยว +เหนี่ยวนำแม่เหล็กไฟฟ้า +เหนียวแน่น +เหนี่ยวรั้ง +เหนียวหนืด +เหนียวหมา +เหนือ +เหนื่อย +เหนื่อยหน่าย +เห็บ +เห็บน้ำ +เหม +เหม- +เหม่ +เหม่ง +เหม็น +เหม็นเขียว +เหม็นเบื่อ +เหม็นเปรี้ยว +เหมวดี +เหม่อ +เหมันต- +เหมันต์ +เหมา +เหมายัน +เหมาะ +เหมาะเจาะ +เหมาะสม +เหมาะเหม็ง +เหมียว +เหมี่ยว +เหมือง +เหมืองฝาย +เหมือด +เหมือดคน +เหมือดโลด +เหมือน +เหมือนกับ +เหมือนว่า +เหมือนหนึ่งว่า +เหมื่อย +เหมื่อยๆ +เหย +เหยเก +เหยง +เหย่อย +เหยา +เหย่า +เหย่าๆ +เหย้า +เหยาะ +เหยาะๆ +เหยาะแหยะ +เหยิง +เหยิบๆ +เหยียด +เหยียดผิว +เหยียดหยาม +เหยียบ +เหยียบขี้ไก่ไม่ฝ่อ +เหยียบจมูก +เหยียบย่ำ +เหยียบเรือสองแคม +เหยี่ยว +เหยี่ยวข่าว +เหยื่อ +เหยือก +เหรัญญิก +เหรา +เหราเล่นน้ำ +เหราะๆ +เหรียญ +เหรียญกระษาปณ์ +เห่เรือ +เหล่ +เหล็ก +เหล็กกล้า +เหล็กกล้าไม่เป็นสนิม +เหล็กใน +เหล็กพืด +เหล็กวิลาด +เหล็กส่ง +เหล็กเส้น +เหล็กหมาด +เหล็กหล่อ +เหล็กเหนียว +เหล็กไหล +เหลน +เหลว +เหลวแหลก +เหลวไหล +เหลอ +เหลา +เหล่า +เหล้า +เหล่ากอ +เหลาชะโอน +เหลาหลก +เหล้าแห้ง +เหลาะแหละ +เหลิง +เหลิงเจิ้ง +เหลียน +เหลี่ยม +เหลี่ยมคู +เหลี่ยมลูกบาศก์ +เหลียว +เหลียวแล +เหลียวหลัง +เหลือ +เหลือก +เหลือกำลัง +เหลือเกิน +เหลือขอ +เหลือเข็ญ +เหลือเข็น +เหลือง +เหลืองหางฟ้า +เหลืองหิน +เหลือใจ +เหลือเชื่อ +เหลือใช้ +เหลือทน +เหลือบ +เหลือบ่ากว่าแรง +เหลือเฟือ +เหลือม +เหลื่อม +เหลื่อมล้ำต่ำสูง +เหลือมือ +เหลือรับ +เหลือร้าย +เหลือล้น +เหลือวิสัย +เหลือสติกำลัง +เหลือแสน +เหลือหลอ +เหลือหลาย +เหลือแหล่ +เหลืออด +เหลืออดเหลือทน +เหว +เหว่ +เหวง +เหวทะเล +เหวย +เหวอะ +เหวอะหวะ +เหวี่ยง +เหวี่ยงแห +เห่อ +เห่อเหิม +เหอะ +เหอะน่า +เหะ +เหะหะ +เหา +เห่า +เหาฉลาม +เหาทะเล +เหาน้ำ +เหาไม้ +เหาะ +เหิน +เหินห่าง +เหินเห่อ +เหิม +เหิมหาญ +เหิมห้าว +เหิมฮึก +เหี้ย +เหียง +เหียงกราด +เหียน +เหี้ยน +เหียนราก +เหี้ยม +เหี้ยมเกรียม +เหี้ยมหาญ +เหี้ยมโหด +เหี่ยว +เหี่ยวแห้ง +เหื่อ +เหือด +เหือดหาย +เหือดแห้ง +แห +แห่ +แห้ +แหก +แหกคอก +แหกปาก +แหง +แหง่ +แห่ง +แห้ง +แหงแก๋ +แหง่ง +แหงน +แหงนเต่อ +แหงนเถ่อ +แห้งผาก +แห้งแล้ง +แห้งเหี่ยว +แห้งเหือด +แหน +แห้น +แหนง +แหนงใจ +แหนงหน่าย +แหนบ +แหนม +แหบ +แหม +แหม่ +แหม่ม +แหมะ +แหย +แหย่ +แหยง +แหย่ง +แหยม +แหย็ม +แหยะ +แหยะๆ +แหล +แหล่ +แหลก +แหลกลาญ +แหลกเหลว +แหล่ง +แหล่งเสื่อมโทรม +แหล่งหล้า +แหลน +แหล่นอก +แหล่ใน +แหลม +แหลมหลัก +แหละ +แหว +แห้ว +แหวก +แหวกแนว +แหว่ง +แหวด +แหวน +แหวนหัว +แห้วหมู +แหวะ +แห่ห้อม +แห่แหน +แหะ +แหะๆ +โห่ +โหก +โหง +โหงพราย +โหด +โหดร้าย +โหดเหี้ยม +โหน +โหนก +โหนกแก้ม +โหน่ง +โหม +โหม- +โหม่ +โหมกรรม +โหมกูณฑ์ +โหม่ง +โหมด +โหมดเทศ +โหมโรง +โหมหัก +โหมฮึก +โหย +โหยกเหยก +โหยง +โหย่ง +โหย่งๆ +โหยหวน +โหยไห้ +โหร +โหรง +โหรงเหรง +โหรดาจารย์ +โหระพา +โหรา +โหรากระบือ +โหราเขาเนื้อ +โหราจารย์ +โหราเดือยไก่ +โหราตีนหมา +โหราเท้าสุนัข +โหราบอน +โหราศาสตร์ +โหล +โหล่ +โหลงโจ้ง +โหว +โหว่ +โหว้ +โหวกเหวก +โหวง +โหวงเหวง +โหวด +โหวต +ให้ +ให้การ +ใหญ่ +ให้โดยเสน่หา +ให้ท่า +ให้ท้าย +ใหม่ +ใหม่ถอดด้าม +ใหม่เอี่ยม +ให้ร้าย +ให้ร้ายป้ายสี +ให้สัตยาบัน +ให้หา +ให้อภัย +ให้ออก +ไห +ไห่ +ไห้ +ไหซอง +ไหน +ไหปลาร้า +ไหม +ไหม้ +ไหมทอง +ไหมสับปะรด +ไหรณย์ +ไหล +ไหล่ +ไหล่เขา +ไหล่ถนน +ไหล่ทวีป +ไหล่ทาง +ไหลน้ำ +ไหล่รวบ +ไหว +ไหวๆ +ไหว้ +ไหว้ครู +ไหว้เจ้า +ไหวตัว +ไหวติง +ไหวทัน +ไหว้ผี +ไหวพริบ +ไหว้วาน +ไหหลำ +ฬ +อ +อก +อกไก่ +อกคราก +อกตั้ง +อกตัญญุตา +อกตัญญู +อกเต่า +อกแตก +อกทะเล +อกนิษฐ์ +อกเมือง +อกรณีย์ +อกรรมกริยา +อกรวบ +อกร่อง +อกโรย +อกเลา +อกหัก +อกัปปิย- +อกัปปิยวัตถุ +อกัปปิยโวหาร +อกัปปิยะ +อกุศล +อกุศล- +อกุศลกรรม +อกุศลกรรมบถ +อกุศลเจตนา +อกุศลมูล +อคติ +อคเนสัน +อคาธ +อคาร- +อฆ +อโฆษะ +อง +องก์ +องค- +องค์ +องค์กฐิน +องค์กร +องค์การ +องค์การสหประชาชาติ +องคชาต +องค์ประกอบ +องค์ประชุม +องคมนตรี +องคมรรษ +องครักษ์ +องควิการ +องควิเกษป +องควิทยา +องคาพยพ +องคุล +องคุลี +องศ์ +องศา +องอาจ +องุ่น +อจร +อจล- +อจลา +อจิตติ +อจินตา +อจินไตย +อจิร- +อจิระ +อเจลก +อเจละ +อช +อชา +อชิน +อชินี +อชิร +อฏวี +อณิ +อณุ +อณู +อโณทัย +อด +อดกลั้น +อดใจ +อดตาหลับขับตานอน +อดทน +อดนม +อดเปรี้ยวไว้กินหวาน +อดสู +อดแห้งอดแล้ง +อดอยาก +อดออม +อดิ +อดิถี +อดิเทพ +อดิเรก +อดิเรก- +อดิเรกลาภ +อดิศร +อดิศวร +อดิศัย +อดีต +อดีต- +อดีตกาล +อดีตชาติ +อดีตภพ +อดีตสมัย +อดุล +อดุลย- +อดุลย์ +อติ +อติชาต +อติชาต- +อติชาตบุตร +อติมานะ +อติราช +อติเรก +อติเรก- +อติเรกจีวร +อติเรกลาภ +อติสาร +อถรรพเวท +อทระ +อทินนาทาน +อทินนาทายี +อธรรม +อธิ +อธิก- +อธิกมาส +อธิกรณ์ +อธิกวาร +อธิกสุรทิน +อธิการ +อธิการบดี +อธิคม +อธิฏฐาน +อธิบดี +อธิบาย +อธิป +อธิป- +อธิปไตย +อธิมาตร +อธิมุตติ +อธิโมกข์ +อธิราช +อธิวาส +อธิวาสนะ +อธิศีล +อธิษฐาน +อธึก +อน- +อ้น +อนงค- +อนงค์ +อนงคณะ +อนงคเลข +อนงคเลขา +อนธ- +อนธการ +อนนต์ +อนยะ +อนรรฆ +อนรรถ +อนล +อนวัช +อนวัช- +อ้นอ้อ +อนัญ +อนัญ- +อนัญคติ +อนัญสาธารณ์ +อนัตตา +อนัตถ- +อนันต- +อนันต์ +อนันตร- +อนันตริยกรรม +อนัม +อนากูล +อนาคต +อนาคต- +อนาคตกาล +อนาคามิผล +อนาคามิมรรค +อนาคามี +อนาจาร +อนาถ +อนาถา +อนาทร +อนาธิปไตย +อนามัย +อนารย- +อนารยชน +อนารยธรรม +อนารยะ +อนาลัย +อนำ +อนิจ +อนิจ- +อนิจกรรม +อนิจจัง +อนิจจา +อนิฏฐารมณ์ +อนิยต +อนิยม +อนิยม- +อนิล +อนิล- +อนิลบถ +อนิวรรต +อนิวรรตน์ +อนิษฏ์ +อนีก- +อนีกทรรศนะ +อนีกทัศนะ +อนีกะ +อนีกัฐ +อนีจ +อนึก +อนึ่ง +อนุ +อนุกร +อนุกรม +อนุกรรมการ +อนุกระเบียด +อนุกาชาด +อนุการ +อนุกูล +อนุคามิก +อนุคามี +อนุเคราะห์ +อนุจร +อนุช +อนุชน +อนุชา +อนุชาต +อนุชาต- +อนุชาตบุตร +อนุชิต +อนุญาต +อนุญาโตตุลาการ +อนุตร- +อนุเถระ +อนุทิน +อนุบท +อนุบาล +อนุปริญญา +อนุปสัมบัน +อนุปัสนา +อนุพงศ์ +อนุพัทธ์ +อนุพันธ์ +อนุโพธ +อนุภรรยา +อนุภริยา +อนุภาค +อนุภาษ +อนุมัติ +อนุมาตรา +อนุมาน +อนุมูล +อนุมูลกรด +อนุโมทนา +อนุโมทนาบัตร +อนุโยค +อนุรักษ- +อนุรักษ์ +อนุรักษนิยม +อนุราช +อนุราธ +อนุราธะ +อนุราธา +อนุรูป +อนุโลม +อนุวงศ์ +อนุวัต +อนุวาต +อนุศาสก +อนุศาสน์ +อนุศาสนาจารย์ +อนุศิษฏ์ +อนุสติ +อนุสนธิ +อนุสภากาชาด +อนุสร +อนุสรณ์ +อนุสัญญา +อนุสัย +อนุสาวรีย์ +อนุสาสนี +อเนก +อเนก- +อเนกคุณ +อเนกประสงค์ +อเนกวิธ +อเนกอนันต์ +อเนกอนันตัง +อเนจอนาถ +อโนชา +อโนดาต +อบ +อบเชย +อบรม +อบอวล +อบอ้าว +อบอุ่น +อบาย +อบาย- +อบายภูมิ +อบายมุข +อป +อปการ +อปจายน- +อปจายนธรรม +อปจายนมัย +อปภาคย์ +อปมงคล +อปมาน +อปยศ +อปร- +อปรภาค +อประมาณ +อประมาท +อประไมย +อปรัณณชาติ +อปรา +อปราชัย +อปราชิต +อปราธ +อปริมาณ +อปลักษณ์ +อปโลกน์ +อปวาท +อปหาร +อปาจี +อปาจีน +อปาน +อเปหิ +อพพะ +อพยพ +อภว +อภัพ +อภัพ- +อภัพบุคคล +อภัพผล +อภัย +อภัย- +อภัยทาน +อภัยโทษ +อภิ +อภิฆาต +อภิจฉา +อภิชฌา +อภิชน +อภิชน- +อภิชนาธิปไตย +อภิชัย +อภิชาต +อภิชาต- +อภิชาตบุตร +อภิชิต +อภิญญา +อภิญญาณ +อภิณห- +อภิธรรม +อภิธาน +อภิไธย +อภินันท์ +อภินันทนาการ +อภินัย +อภินิหาร +อภิเนษกรมณ์ +อภิบาล +อภิปรัชญา +อภิปราย +อภิมหาอำนาจ +อภิมานะ +อภิมุข +อภิรดี +อภิรติ +อภิรมย์ +อภิรักษ์ +อภิรัฐมนตรี +อภิราม +อภิรุต +อภิรุม +อภิรูป +อภิลักขิต +อภิลักขิต- +อภิลักขิตกาล +อภิลักขิตสมัย +อภิเลปน์ +อภิวันท์ +อภิวาท +อภิวาทน์ +อภิเษก +อภิเษกสมรส +อภิสมโพธิ +อภิสมัย +อภิสมาจาร +อภิสัมโพธิ +อภิสัมโพธิญาณ +อภิสิต +อภิสิทธิ์ +อภูต +อม +อ้ม +อมความ +อมต- +อมตบท +อมตะ +อมนุษย์ +อมปาก +อมพะนำ +อมเพลิง +อมภูมิ +อมมือ +อมยิ้ม +อมร +อมร- +อมรบดี +อมรรัตน์ +อมรราช +อมรสตรี +อมรา +อมราวดี +อมรินทร์ +อมเรนทร์ +อมเรศ +อมเรศวร +อมโรค +อมฤต +อมฤต- +อมฤตบท +อมฤตยู +อมฤตรส +อมเลือดอมฝาด +อมเลือดอมหนอง +อมหนอง +อมัจจะ +อมัตร +อมาตย์ +อมาวสี +อมาวสุ +อมาวาสี +อมิตร +อเมริกัน +อย +อยน +อยัส +อย่า +อยาก +อย่าง +อย่างไร +อย่างไรก็ดี +อย่างไรก็ตาม +อยุทธ์ +อยู่ +อยู่กรรม +อยู่กิน +อยู่คง +อยู่งาน +อยู่จริง +อยู่ดีกินดี +อยู่ตัว +อยู่ท้อง +อยู่ไฟ +อยู่มือ +อยู่ไม่สุข +อยู่ยงคงกระพัน +อยู่ยาม +อยู่โยง +อยู่เวร +อยู่หมัด +อร +อรช +อรชร +อรชุน +อรณ +อรดี +อรติ +อรทัย +อรไท +อรธาน +อรนุช +อรพินท์ +อรพิม +อรรค +อรรฆ +อรรฆย์ +อรรจน์ +อรรณพ +อรรถ +อรรถ- +อรรถกถา +อรรถกถาจารย์ +อรรถกร +อรรถกวี +อรรถคดี +อรรถบท +อรรถปฏิสัมภิทา +อรรถประโยชน์ +อรรถรส +อรรถาธิบาย +อรรธ +อรรธ- +อรรธกรรณ +อรรธคราส +อรรธจักร +อรรธจันทร์ +อรรธนิศา +อรรธบท +อรรธภาค +อรรธสระ +อรสุม +อรสุมพล +อรหะ +อรหัง +อรหัต +อรหัต- +อรหัตผล +อรหัตมรรค +อรหัตวิโมกข์ +อรหัน +อรหันต- +อรหันต์ +อรหันตฆาต +อร่อย +อรัญ +อรัญ- +อรัญญิก +อรัญวาส +อรัญวาสี +อรัณย์ +อราดี +อราติ +อร่าม +อริ +อริน +อรินทร์ +อริย- +อริยกะ +อริยทรัพย์ +อริยบุคคล +อริยผล +อริยมรรค +อริยสัจ +อริยะ +อรุ +อรุณ +อรุโณทัย +อรุ่ม +อรูป +อลงกต +อลงกรณ์ +อลงการ +อลวน +อลเวง +อลหม่าน +อล่องฉ่อง +อลักเอลื่อ +อลังการ +อลัชชี +อล่างฉ่าง +อลิงค์ +อลึงค์ +อลึ่งฉึ่ง +อโลหะ +อวก +อ้วก +อวกาศ +อวเคราะห์ +อวจร +อวชัย +อวชาต +อวชาต- +อวชาตบุตร +อวด +อวดดี +อวดรู้ +อวดอ้าง +อวตาร +อวน +อ้วน +อ้วนท้วน +อวนลอย +อวนลาก +อวบ +อวบน้ำ +อวมงคล +อวมอำ +อวย +อวยวะ +อวรุทธ์ +อวรุทธก +อวล +อวสาน +อวหาร +อวัยวะ +อวัสดา +อวาจี +อวิจี +อวิชชา +อวิญญาณก- +อวิญญาณกทรัพย์ +อวิญญู +อวิรุทธ์ +อวิโรธน์ +อวีจิ +อเวจี +อโศก +อสงไขย +อสนี +อสนีบาต +อสภ +อสมการ +อสมมาตร +อสรพิษ +อสังกมทรัพย์ +อสังหาริม- +อสังหาริมทรัพย์ +อสังหาริมะ +อสัญ- +อสัญกรรม +อสัญญี +อสัญญีภาพ +อสัญญีภาวะ +อสัญญีสัตว์ +อสัญแดหวา +อสัตถพฤกษ์ +อสัตย์ +อสัมภิน- +อสัมภินพงศ์ +อสัมภินวงศ์ +อสาธร +อสาธุ +อสิ +อสิจรรยาการ +อสิต +อสิธารา +อสิเลสะ +อสีตยานุพยัญชนะ +อสีติ +อสีติมหาสาวก +อสุ +อสุจิ +อสุนีบาต +อสุภ +อสุภ- +อสุภกรรมฐาน +อสุภสัญญา +อสุร- +อสุรกาย +อสุรี +อสุเรศ +อสูร +อเส +อเสกข- +อเสกขบุคคล +อเสกขะ +อเสข- +อเสขะ +อห +อหังการ +อหิ +อหิงสา +อหิวาตกโรค +อหึงสา +อเหตุกทิฐิ +อโหสิกรรม +ออ +อ้อ +อ๋อ +ออก +ออกกำลัง +ออกขุนนาง +ออกแขก +ออกโขน +ออกไข้หัว +ออกงาน +ออกงิ้ว +ออกชื่อ +ออกซิเจน +ออกซิเดชัน +ออกไซด์ +ออกญา +ออกดอก +ออกดอกออกผล +ออกตัว +ออกท่า +ออกท่าออกทาง +ออกทุกข์ +ออกทุน +ออกนอกหน้า +ออกบวช +ออกปาก +ออกผื่น +ออกฝี +ออกฝีดาษ +ออกพรรษา +ออกไฟ +ออกภาษา +ออกมหาสมาคม +ออกยักษ์ออกโขน +ออกรส +ออกรับ +ออกร้าน +ออกเรือน +ออกแรง +ออกโรง +ออกฤทธิ์ +ออกลาย +ออกลิงออกค่าง +ออกลูก +ออกวัง +ออกเสียง +ออกหน้าออกตา +ออกหัด +ออกหาก +ออกอากาศ +อ่อง +อ๋อง +อ้องแอ้ง +ออเจ้า +ออเซาะ +ออด +ออดๆ +ออดอ้อน +ออดแอด +ออดๆ แอดๆ +อ๊อดแอ๊ด +อ๊อดๆ แอ๊ดๆ +อ้อดิบ +อ่อน +อ้อน +อ่อนข้อ +อ่อนความ +อ่อนจิตอ่อนใจ +อ่อนใจ +อ่อนช้อย +ออนซ์ +ออนซอน +อ่อนซอน +อ่อนไท้ +อ่อนน้อม +อ่อนปวกเปียก +อ่อนเปลี้ย +อ่อนเปียก +อ่อนเพลีย +อ่อนโยน +อ้อนวอน +อ่อนหวาน +อ่อนหัด +อ่อนหู +อ่อนไหว +อ่อนอกอ่อนใจ +อ้อนออด +อ่อนแอ +อ้อนแอ้น +ออฟฟิศ +ออม +อ่อม +อ้อม +ออมครอม +อ้อมค้อม +ออมชอม +ออมซอม +ออมสิน +อ้อมอก +ออมอด +อ้อมแอ้ม +อ่อย +อ้อย +อ๋อย +อ้อยเข้าปากช้าง +อ้อยช้าง +อ้อยแดง +อ้อยเลา +อ้อยส้อย +อ้อยอิ่ง +ออสเมียม +อ้อแอ้ +อ๊ะ +อะคร้าว +อะเคื้อ +อะจีน +อะแจ +อะเซทิลีน +อะดรีนาลีน +อะดัก +อะดักอะเดี้ย +อะดักอะเดื่อ +อะดักอะแด้ +อะดุง +อะตอม +อะนะ +อะนั้น +อะนี้ +อะมีบา +อะเมริเซียม +อะร้าอร่าม +อะไร +อะลุ่มอล่วย +อะลุ้มอล่วย +อะลูมิเนียม +อะหม +อะไหล่ +อะอื้อ +อะเอื้อย +อัก +อั้ก +อั้กๆ +อั๊ก +อั๊กๆ +อักกะ +อักโกธะ +อักข +อักขร- +อักขรวิธี +อักขรวิบัติ +อักขรสมัย +อักขระ +อักขรานุกรม +อักขรานุกรมภูมิศาสตร์ +อักโข +อักโขภิณี +อักโขเภณี +อักษร +อักษร- +อักษรกลาง +อักษรต่ำ +อักษรบฏ +อักษรลักษณ์ +อักษรเลข +อักษรศาสตร์ +อักษรสมัย +อักษรสาสน์ +อักษรสูง +อักษะ +อักเษาหิณี +อักเสบ +อักอ่วน +อัคคะ +อัคคิ +อัคคี +อัคคีภัย +อัคนิ +อัคนิคณะ +อัคนิพ่าห์ +อัคนิรุทร +อัคนิวาหะ +อัคนิโหตร +อัคนี +อัคร- +อัครชายา +อัครมหาเสนาบดี +อัครมเหสี +อัครราชทูต +อัครสมณทูต +อัง +อังก์ +อังกนะ +อังกฤษ +อังกวด +อังกะลุง +อังกา +อังกาบ +อังกาบฝรั่ง +อังกาบหนู +อังกุร +อังกุศ +อังกูร +อังคณะ +อังคณา +อังคาร +อังคาส +อังคีรส +อังคุฐ +อังฆาต +อั้งยี่ +อั้งโล่ +อังศุ +อังศุก +อังศุธร +อังศุมาลี +อังส- +อังสกุฏ +อังสตรอม +อังสนา +อังสภาระ +อังสะ +อังสา +อัจกลับ +อัจจันต์ +อัจจัย +อัจจิ +อัจจิมา +อัจจุต +อัจเจกะ +อัจฉรา +อัจฉริย- +อัจฉริยบุคคล +อัจฉริยภาพ +อัจฉริยลักษณ์ +อัจฉริยลักษณะ +อัจฉริยะ +อัจนา +อัชฌัตติก- +อัชฌา +อัชฌาจาร +อัชฌาศัย +อัชฌาสัย +อัญ- +อัญขยม +อัญชนะ +อัญชลี +อัญชัน +อัญชันป่า +อัญเชิญ +อัญญะ +อัญดิตถีย์ +อัญเดียรถีย์ +อัญประกาศ +อัญประกาศเดี่ยว +อัญมณี +อัญมัญ- +อัญรูป +อัฏ +อัฏฐ- +อัฏฐะ +อัฏฐังค์ +อัฏฐังคิกมรรค +อัฏฐังสะ +อัฏนา +อัฐ +อัฐเคราะห์ +อัฐทิศ +อัฐบริขาร +อัฐบาน +อัฐม- +อัฐมะ +อัฐยายซื้อขนมยาย +อัฐศก +อัฐฬส +อัฐิ +อัฐิมิญชะ +อัฐิสัณฐาน +อัฒ- +อัฒจันทร์ +อัฒภาค +อัฒมณฑล +อัฒมาส +อัฒรัตติ +อัณฑ- +อัณฑโกส +อัณฑชะ +อัณฑะ +อัณฑาการ +อัณณพ +อัด +อัดก๊อบปี้ +อัดแจ +อัดฉีด +อัดแบตเตอรี่ +อัดแผ่นเสียง +อัดรูป +อัดลม +อัดสำเนา +อัดเสียง +อัดอั้น +อัดอั้นตันใจ +อัดแอ +อัต- +อัตคัด +อัตชีวประวัติ +อัตตะ +อัตตา +อัตตาธิปไตย +อัตถ์ +อัตถะ +อัตนัย +อัตโนมัติ +อัตภาพ +อัตรชะ +อัตรา +อัตราเร็ว +อัตราส่วน +อัตลัด +อัตวินิบาตกรรม +อัตหิต- +อัตเหตุ +อัททา +อัทธ- +อัทธ์ +อัทธคต +อัทธคู +อัทธา +อัทธาน +อัทธายุ +อัธยาตมวิทยา +อัธยาย +อัธยาศัย +อัน +อั้น +อั๋น +อันดก +อันดร +อันดับ +อันด๊าก +อันโด๊ก +อันต- +อันตก +อันตกาล +อันตกิริยา +อันตคุณ +อันตคู +อันตชาติ +อันตร +อันตร- +อันตรการณ์ +อันตรธาน +อันตรภาค +อันตรวาสก +อันตรา +อันตราย +อันตรายิกธรรม +อันตลิกขะ +อันตะ +อั้นตั้น +อันติก +อันติม- +อันติมสัจ +อันติมะ +อั้นตู้ +อันเต +อันเตบุระ +อันเตบุริก +อันเตบุริกา +อันเตปุระ +อันเตปุริก +อันเตปุริกา +อันเตวาสิก +อันโต +อันโตชน +อันโตนาที +อันแถ้ง +อันทุ +อันโทล +อันธ- +อันธการ +อันธพาล +อันธิกา +อันนะ +อันนา +อันเป็น +อันเป็นไป +อันโยนย- +อันโยนยะ +อันวย- +อันวัย +อันว่า +อันเวส +อั้นอ้น +อับ +อับจน +อับเฉา +อับปาง +อับอาย +อัป- +อัปกะ +อัปการ +อัปฏิฆะ +อัปฏิภาค +อัปปะ +อัปเปหิ +อัปภาคย์ +อัปมงคล +อัปยศ +อัประมาณ +อัประมาท +อัประไมย +อัปราชัย +อัปรีย์ +อัปลักษณ์ +อัปสร +อัพพุท +อัพโพหาริก +อัพภันดร +อัพภันตร- +อัพภาน +อัพภาส +อัม +อัมพ- +อัมพร +อัมพฤกษ์ +อัมพวัน +อัมพวา +อัมพา +อัมพาต +อัมพิล +อัมพุ +อัมพุช +อัมพุชินี +อัมพุท +อัยกะ +อัยกา +อัยการ +อัยกี +อัยยะ +อัยยิกา +อัลกุรอาน +อัลตราไวโอเลต +อั่ว +อัศจรรย์ +อัศเจรีย์ +อัศว- +อัศวโกวิท +อัศวมุข +อัศวมุขี +อัศวเมธ +อัศวยุช +อัศวานึก +อัศวิน +อัศวินี +อัษฎ- +อัษฎกฉันท์ +อัษฎมงคล +อัษฎมะ +อัษฎางคิกมรรค +อัษฎายุธ +อัษฎาวุธ +อัษฏมงคล +อัส- +อัสดง +อัสดงคต +อัสดม +อัสดร +อัสนี +อัสมิมานะ +อัสมุขี +อัสสนี +อัสสะ +อัสสัตถพฤกษ์ +อัสสานิก +อัสสานีก +อัสสานึก +อัสสาสะ +อัสสุ +อัสสุชล +อัสสุธารา +อา +อ่า +อ้า +อากร +อากรแสตมป์ +อากังขา +อากัป +อากัปกิริยา +อากัมปนะ +อากัมปะ +อาการ +อาการ- +อาการนาม +อากาศ +อากาศ- +อากาศธาตุ +อากาศยาน +อากูล +อาเกียรณ์ +อาขยาต +อาขยาน +อาคเนย์ +อาคม +อาครหายณี +อาคันตุก- +อาคันตุกภัต +อาคันตุกวัตร +อาคันตุกะ +อาคาร +อาคารชุด +อาฆาต +อาฆาตนะ +อาฆาตมาดร้าย +อ่าง +อ้าง +อ่างเก็บน้ำ +อางขนาง +อ้างว้าง +อ้างอิง +อาจ +อาจม +อาจมน +อาจริย- +อาจริยวัตร +อาจริยวาท +อาจหาญ +อาจอง +อาจเอื้อม +อาจาด +อาจาร +อาจาร- +อาจารย์ +อาจารี +อาจิณ +อาจิณ- +อาจิณสมาจาร +อาเจียน +อาชญัปติ +อาชญัปติ์ +อาชญา +อาชญากร +อาชญากรรม +อาชญากรสงคราม +อาชญาบท +อาชญาบัตร +อาชญาศึก +อาชญาสิทธิ์ +อาชวะ +อาชา +อาชาน +อาชานิ +อาชาไนย +อาชีพ +อาชีว- +อาชีวก +อาชีวศึกษา +อาชีวะ +อ้าซ่า +อาญา +อาญาสิทธิ์ +อาฏานา +อาณัติ +อาณัติสัญญาณ +อาณา +อาณาเกษตร +อาณาเขต +อาณาจักร +อาณานิคม +อาณาประชาราษฎร์ +อาณาประโยชน์ +อาด +อาดๆ +อาดุร +อาดุลย์ +อาดูร +อาดูลย์ +อาเด๊ะ +อาตม- +อาตมทาน +อาตมภาพ +อาตมัน +อาตมา +อาตุร +อาถรรพ์ +อาถรรพณ์ +อาถรรพณะ +อาทร +อาทาตา +อาทาน +อาทิ +อาทิตย- +อาทิตย์ +อาทิตยมณฑล +อาทิตยวาร +อาทีนพ +อาทีนว +อาทึก +อาเทศ +อาธรรม +อาธรรม์ +อาธรรมิก +อาธรรมึก +อาธาน +อาธาร +อาน +อ่าน +อานก +อานน +อานนท์ +อานม้า +อ่านเล่น +อานะ +อานันท์ +อานันทนะ +อานัม +อานาปาน +อานาปาน- +อานาปานัสสติ +อานำ +อานิก +อานิสงส์ +อานุภาพ +อานุภาวะ +อาบ +อาบแดด +อาบน้ำร้อนมาก่อน +อาบเหงื่อต่างน้ำ +อาบเอิบ +อาบัติ +อาบัน +อาปณกะ +อาปณะ +อาปะ +อาปาน- +อาปานภูมิ +อาปานศาลา +อาปานะ +อาโป +อาโปกสิณ +อาโปธาตุ +อาพัด +อาพัทธ์ +อาพันธ์ +อาพันธนะ +อาพาธ +อาพาธิก +อาพาธึก +อาพิล +อาเพศ +อาภรณ์ +อาภัพ +อาภัสระ +อาภา +อาภากร +อาภาส +อาม +อ่าม +อามลก +อามัย +อามิษ +อามิส +อาย +อ้าย +อ้ายขิก +อ้ายเข้ +อ้ายงั่ว +อ้ายเจี๊ยว +อ้ายชื่น +อายต +อายตนะ +อายน +อ้ายบ้า +อ้ายเบี้ยว +อ้ายป๊อก +อายเหนียม +อ้ายอ้าว +อายัด +อายัต +อายัน +อายาจนะ +อายาน +อายุ +อายุกตกะ +อายุกษัย +อายุขัย +อายุความ +อายุตกะ +อายุธ +อายุร- +อายุรแพทย์ +อายุรเวช +อายุรเวท +อายุรศาสตร์ +อายุวัฒนะ +อายุษ +อาร์กอน +อารดี +อาร์ต +อารติ +อารทรา +อาร์ม +อารมณ์ +อารมณ์ขัน +อารย- +อารยชน +อารยชาติ +อารยธรรม +อารยประเทศ +อารยะ +อารยัน +อาระ +อารักขา +อารักษ์ +อารัญ +อารัญญิก +อารัณย์ +อารัณยกะ +อารัติ +อารัมภ- +อารัมภ์ +อารัมภกถา +อารัมภบท +อาราธน์ +อาราธนา +อาราธนาธรรม +อาราธนาพระปริตร +อาราธนาศีล +อาราม +อารามิก +อารี +อารีอารอบ +อารุม +อาลปน์ +อาลปนะ +อาละวาด +อาลักษณ์ +อาลัย +อาลัยอาวรณ์ +อาลัว +อาลิ +อาลี +อาโลก +อาโลก- +อาโลกกสิณ +อาโลกนะ +อาว +อ่าว +อ้าว +อาวรณ์ +อาวัชนาการ +อาวัล +อาวาส +อาวาสิก +อาวาห- +อาวาหะ +อาวิล +อาวุต +อาวุธ +อาวุโส +อาเวค +อาเวศ +อาศรม +อาศรมบท +อาศเลษา +อาศัย +อาศัยที่ +อาศัยลำแข้งตัวเอง +อาศิร- +อาศิรพจน์ +อาศิรพาท +อาศิรพิษ +อาศิรวจนะ +อาศิรวาท +อาศิรวิษ +อาศีรพิษ +อาศีรวิษ +อาศุ +อาเศียร- +อาเศียรพจน์ +อาเศียรพาท +อาเศียรวจนะ +อาเศียรวาท +อาษาฒ +อาสน +อาสน์ +อาสน์สงฆ์ +อาสนะ +อาสัญ +อาสัตย์ +อาสันนะ +อาสา +อาสาฬห- +อาสาฬห์ +อาสาฬหบูชา +อาสิญจ์ +อาสิน +อาสูร +อาแสะ +อาหต +อาหนี +อาหนู +อาหม +อาหร +อาหรัดกัดติกา +อาหรับ +อาหลักอาเหลื่อ +อาหาร +อาหารว่าง +อาหุดี +อาฬหก +อาฬาริก +อ่าองค์ +อำ +อ่ำ +อำแดง +อำนด +อำนนต์ +อำนรรฆ +อำนวย +อำนาจ +อำนาจบาตรใหญ่ +อำนาถ +อำนิฐ +อำนิษฐ์ +อำปลัง +อำพน +อำพราง +อำพะนำ +อำพัน +อำพันขี้ปลา +อำพันทอง +อำไพ +อำเภอ +อำเภอใจ +อำมร +อำมฤคโชค +อำมฤต +อำมหิต +อำมาตย์ +อำยวน +อำรุง +อำลา +อำอวม +อ้ำอึ้ง +อิก +อิง +อิงค์ +อิงอร +อิงแอบ +อิจฉา +อิฉัน +อิชยา +อิฏฐ- +อิฏฐารมณ์ +อิฐ- +อิฐผล +อิณ +อิด +อิดโรย +อิดหนาระอาใจ +อิดออด +อิดๆ ออดๆ +อิดเอื้อน +อิดๆ เอื้อนๆ +อิตถี +อิตถีลิงค์ +อิตเทรียม +อิตเทอร์เบียม +อิทธิ +อิทธิ- +อิทธิปาฏิหาริย์ +อิทธิพล +อิทธิฤทธิ์ +อิน +อินซูลิน +อินเดีย +อินเดียนแดง +อินเดียม +อินท์ +อินทขีล +อินทนิล +อินทนิลน้ำ +อินทผลัม +อินทร- +อินทร์ +อินทรธนู +อินทรวงศ์ +อินทรวิเชียร +อินทรศักดิ์ +อินทราณี +อินทราภิเษก +อินทรายุธ +อินทรี +อินทรีย- +อินทรีย์ +อินทรียโคจร +อินทรียญาณ +อินทรียสังวร +อินทีวร +อินทุ +อินธน์ +อินฟราเรด +อินัง +อินังขังขอบ +อิ่ม +อิ่มใจ +อิ่มตัว +อิ่มหนำ +อิ่มหมีพีมัน +อิ่มอกอิ่มใจ +อิ่มเอิบ +อิมัลชัน +อิริเดียม +อิริยา +อิริยาบถ +อิรุพเพท +อิลู +อิเล็กตรอน +อิเล็กทรอนิกส์ +อิเล็กโทน +อิศร +อิศวร +อิษฏ์ +อิษฏี +อิส +อิสตรี +อิสร- +อิสรภาพ +อิสระ +อิสริย- +อิสริยยศ +อิสริยะ +อิสริยาภรณ์ +อิสลาม +อิสสา +อิสัตรี +อิสิ +อิสี +อิหม่าม +อิหลักอิเหลื่อ +อี +อี่ +อี้ +อี๊ +อี๋ +อีก +อีก้อ +อีก๋อย +อีกา +อีก๋า +อีเก้ง +อีเกร็ง +อีเก้อีกัง +อีแก +อีแก่ +อีแก้ +อีโก้ง +อีโก๊ะ +อีคว่ำอีหงาย +อีจู้ +อีฉัน +อีฉุยอีแฉก +อีชุก +อี๊ด +อีดำอีแดง +อีตาล +อีเต้อ +อีโต้ +อีถ่าง +อีทุก +อีทุบ +อีเทอร์ +อีนุงตุงนัง +อีนูน +อีโน +อีโนงโตงเนง +อีบึ้ง +อีเป็ด +อีเป้า +อีแปะ +อีโปง +อีโปงครอบ +อีเพา +อีมู +อีรม +อีรุ้ง +อีลอง +อีล่อยป่อยแอ +อีลุ้ม +อีลุ่ยฉุยแฉก +อีเลิ้ง +อีแล่ง +อีโลง +อีศ +อีศวร +อีส +อีสา +อีสาน +อีสุกอีใส +อีหน็องอีแหน็ง +อีหรอบ +อีหรอบเดียวกัน +อีหลักอีเหลื่อ +อีหลัดถัดทา +อีหลี +อีหลุกขลุกขลัก +อีหลุกขลุกขลุ่ย +อีหลุยฉุยแฉก +อีเห็น +อีเหน็บ +อีเหนียว +อีเหละเขละขละ +อีเหละเขะขะ +อีโหน่อีเหน่ +อีโหลกโขลกเขลก +อี๋อ๋อ +อีแอ่น +อึ +อึก +อึ๊ก +อึกทึก +อึกอัก +อึง +อึ่ง +อึ้ง +อึงคะนึง +อึงมี่ +อึ่งยาง +อึ่งใหญ่ +อึงอล +อึ่งอ่าง +อึด +อึดใจ +อึดตะปือ +อึ้ดทึ่ด +อึดอัด +อึน +อืด +อืดอาด +อื่น +อื้น +อือ +อื้อ +อื้อฉาว +อื้ออึง +อุ +อุก +อุกกา +อุกกาบาต +อุกฉกรรจ์ +อุกฤษฏ์ +อุกลา +อุกลาบาต +อุกอาจ +อุค +อุคร +อุคห- +อุคหนิมิต +อุคหะ +อุโฆษ +อุ้ง +อุจ +อุจจาร- +อุจจารมรรค +อุจจาระ +อุจฉุ +อุจเฉท +อุจเฉท- +อุจเฉททิฐิ +อุจาด +อุชุ +อุฏฐาการ +อุณห- +อุณหภูมิ +อุณหะ +อุณหาการ +อุณหิส +อุณา +อุณานาภี +อุณาโลม +อุด +อุดเตา +อุดม +อุดม- +อุดมการณ์ +อุดมคติ +อุดมศึกษา +อุดร +อุดหนุน +อุดอู้ +อุดากัน +อุตดม +อุตดร +อุตตมะ +อุตตรผลคุนี +อุตตรภัทรบท +อุตตรอาษาฒ +อุตตราสาฬหะ +อุตตะภัททะ +อุตบล +อุตพิด +อุตพิดผี +อุตม- +อุตมภาพ +อุตมัตถ์ +อุตมางค์ +อุตร- +อุตรกุรุ +อุตรกุรู +อุตรนิกาย +อุตรผลคุนี +อุตรภัทรบท +อุตรา +อุตราภิมุข +อุตราวัฏ +อุตราษาฒ +อุตราสงค์ +อุตริ +อุตริมนุสธรรม +อุตลุด +อุตสาห- +อุตส่าห์ +อุตสาหกรรม +อุตสาหกรรมศิลป์ +อุตสาหะ +อุตุ +อุตุนิยมวิทยา +อุท- +อุทก +อุทก- +อุทกธาร +อุทกธารา +อุทกภัย +อุทกวิทยา +อุทกศาสตร์ +อุททาม +อุทธรณ์ +อุทธัจ +อุทบาตร +อุทบาน +อุทพินทุ์ +อุทยาน +อุทยานแห่งชาติ +อุทร +อุทริยะ +อุทลุม +อุทัช +อุทัย +อุทาน +อุทาร +อุทาหรณ์ +อุทิศ +อุทุมพร +อุเทศ +อุธัจ +อุ่น +อุ่นเครื่อง +อุ่นใจ +อุ่นหนาฝาคั่ง +อุนากัน +อุบ +อุบล +อุบอิบ +อุบะ +อุบ๊ะ +อุบัติ +อุบัติ- +อุบัติภัย +อุบัติเหตุ +อุบาท +อุบาทว์ +อุบาย +อุบาสก +อุบาสิกา +อุเบกขา +อุโบสถ +อุโบสถกรรม +อุโบสถหัตถี +อุป +อุปกรณ์ +อุปกรม +อุปการ- +อุปการะ +อุปการี +อุปกิณณะ +อุปกิเลส +อุปจาร +อุปถัมภ์ +อุปถัมภก +อุปทม +อุปทูต +อุปเทศ +อุปเท่ห์ +อุปธิ +อุปนัย +อุปนิกขิต +อุปนิกษิต +อุปนิษัท +อุปนิสัย +อุปบล +อุปบัติ +อุปบาท +อุปปาติก- +อุปพัทธ์ +อุปพันธ์ +อุปโภค +อุปมา +อุปมาน +อุปมาโวหาร +อุปมาอุปไมย +อุปไมย +อุปยุวราช +อุปโยค +อุปโยคบุรพบท +อุปรากร +อุปราคา +อุปราช +อุปริ +อุปริจร +อุปริพุทธิ +อุปริภาค +อุปริภาพ +อุปริม- +อุปริมปริยาย +อุปริวัสน์ +อุปริสัจ +อุปโลกน์ +อุปสมบท +อุปสมบทกรรม +อุปสมบัน +อุปสรรค +อุปสัมบัน +อุปสัมปทา +อุปสัมปทาเปกข์ +อุปสัมปทาเปกษ์ +อุปฮาด +อุปัชฌาย- +อุปัชฌาย์ +อุปัชฌายวัตร +อุปัชฌายะ +อุปัฏฐาก +อุปัฏฐานะ +อุปัทรพ +อุปัทว- +อุปัทวะ +อุปัทวันตราย +อุปาณ- +อุปาทาน +อุปาธยาย +อุปาหนา +อุภัย +อุ้ม +อุมงค์ +อุ้มชู +อุ้มท้อง +อุ้มน้ำ +อุ้มสม +อุโมงค์ +อุย +อุ่ย +อุ้ย +อุ๊ย +อุยยาน +อุยยาม +อุ้ยยุ้ย +อุยโยค +อุยหน่า +อุ่ยหน่า +อุ้ยอ้าย +อุร- +อุรค +อุรเคนทร์ +อุรณ +อุรพี +อุรส +อุระ +อุรังอุตัง +อุรัจฉทะ +อุรัจฉัท +อุรา +อุรุ +อุไร +อุลปนะ +อุลโลจ +อุลโลละ +อุลามก +อุลิด +อุลูก +อุโลก +อุแว้ +อุษณ- +อุษณกร +อุษณกาล +อุษณรัศมี +อุษณรูจี +อุษณาการ +อุษณีษ์ +อุษม +อุษมัน +อุษา +อุษาโยค +อุสภ +อุสวะ +อุสส่าห์ +อุสสาหะ +อุสา +อุสุ +อุสุการ +อุสุภ +อุสุม +อุหรับ +อุหลบ +อุเหม่ +อุฬาร +อู +อู่ +อู้ +อูฐ +อูด +อู่น้ำ +อูม +อูย +อูรุ +อู่ลอย +อู่แห้ง +อู้อี้ +อู๋อี๋ +เอ +เอ้ +เอก +เอก- +เอ๊ก +เอกเขนก +เอกจิต +เอกฉันท์ +เอกชน +เอกซเรย์ +เอกเทศ +เอกโทษ +เอกนัย +เอกบุคคล +เอกบุรุษ +เอกพจน์ +เอกภพ +เอกภริยา +เอกภักดิ์ +เอกภาคี +เอกภาพ +เอกม +เอกมัย +เอกรรถประโยค +เอกรส +เอกระ +เอกราช +เอกรูป +เอกลักษณ์ +เอกศก +เอกส +เอกสาร +เอกสารราชการ +เอกสารสิทธิ +เอกสิทธิ์ +เอกอัครราชทูต +เอกอัครสมณทูต +เอกอุ +เอกัคตา +เอกังสพยากรณ์ +เอกังสวาที +เอกา +เอ้กา +เอกาธิปไตย +เอเคอร์ +เอง +เอ็ง +เอ๋ง +เอ็ด +เอ็ดตะโร +เอ็ดอึง +เอตทัคคะ +เอ้เต +เอทิลแอลกอฮอล์ +เอน +เอ็น +เอนกาย +เอนไซม์ +เอ็นดู +เอนตัว +เอนหลัง +เอ็นอ่อน +เอนเอียง +เอม +เอ็มบริโอ +เอมอร +เอมโอช +เอย +เอ่ย +เอ๊ย +เอ๋ย +เอร็ดอร่อย +เอราวัณ +เอลา +เอลาฬุก +เอว +เอ๊ว +เอวัง +เอฬก +เอฬา +เออ +เอ่อ +เออๆ คะๆ +เออน่ะ +เออแน่ะ +เออร์เบียม +เอ้อระเหย +เอ้อเร้อ +เอ้อเร้อเอ้อเต่อ +เอออวย +เออออ +เออออห่อหมก +เอ้อเฮอ +เอ้แอ่น +เอ้ๆ แอ่นๆ +เอ๊ะ +เอะใจ +เอะอะ +เอะอะมะเทิ่ง +เอา +เอาการ +เอาการเอางาน +เอากุ้งฝอยไปตกปลากะพง +เอาข้างเข้าถู +เอางาน +เอาจมูกผู้อื่นมาหายใจ +เอาจริง +เอาจริงเอาจัง +เอาใจ +เอาใจช่วย +เอาใจใส่ +เอาชนะ +เอาชั้นเอาเชิง +เอาชัย +เอาชีวิต +เอาชื่อ +เอาเชิง +เอาใช้ +เอาดีเอาเด่น +เอาตาย +เอาแต่ +เอาแต่ใจ +เอาถ่าน +เอาเถิด +เอาเถิดเจ้าล่อ +เอาทองไปรู่กระเบื้อง +เอาทาร +เอาทารย์ +เอาน้ำเย็นเข้าลูบ +เอาน้ำลูบท้อง +เอาเนื้อหนูไปปะเนื้อช้าง +เอาบุญเอาคุณ +เอาปูนหมายหัว +เอาเป็นธุระ +เอาเป็นว่า +เอาเป็นเอาตาย +เอาเปรียบ +เอาผิด +เอาพิมเสนไปแลกเกลือ +เอามะพร้าวห้าวไปขายสวน +เอามือซุกหีบ +เอาไม้ซีกไปงัดไม้ซุง +เอาไม้สั้นไปรันขี้ +เอารส +เอารัดเอาเปรียบ +เอาเรื่อง +เอาฤกษ์ +เอาละ +เอาเลย +เอาเลือดกับปู +เอาหน้า +เอาหูไปนา เอาตาไปไร่ +เอาใหญ่ +เอาฬาร +เอาฬาริก +เอาฬารึก +เอาอกเอาใจ +เอาอย่าง +เอาอยู่ +เอาะลาย +เอิก +เอิกเกริก +เอิ้น +เอิบ +เอิบอาบ +เอียง +เอี้ยง +เอี้ยงคำ +เอียงอาย +เอียงเอน +เอียด +เอี๊ยด +เอียน +เอี่ยน +เอี่ยม +เอี๊ยม +เอี้ยมจุ๊น +เอี้ยมเฟี้ยม +เอี่ยมอ่อง +เอี่ยว +เอี้ยว +เอี่ยวลม +เอื้อ +เอื้อง +เอื้องครั่ง +เอื้องน้ำครั่ง +เอื้องศรีเที่ยง +เอื้องหนวดพราหมณ์ +เอือด +เอือน +เอื้อน +เอือนกิน +เอื้อเฟื้อ +เอือม +เอื้อม +เอื้อมอาจ +เอื่อย +เอื่อยๆ +เอื้อย +เอื้ออำนวย +แอ +แอ้ +แอ๋ +แอก +แอกทิเนียม +แอกน้อย +แอ่ง +แอ้งแม้ง +แอด +แอดๆ +แอ้ด +แอ้ดๆ +แอ๊ด +แอ๊ดๆ +แอ่น +แอนติเจน +แอนติบอดี +แอนติอิเล็กตรอน +แอ่นลม +แอโนด +แอบ +แอบแฝง +แอบอ้าง +แอบอิง +แอ้ม +แอมแปร์ +แอมมิเตอร์ +แอมโมเนีย +แอร่ม +แอลกอฮอล์ +แอลฟา +แอว +แอ่ว +แอ้วแซ่ว +แอสทาทีน +แอสไพริน +แอสฟัลต์ +แอหนัง +แออวย +แออัด +โอ +โอ่ +โอ้ +โอ๋ +โอก +โอ้ก +โอ๊ก +โอกาส +โอฆ- +โอฆชล +โอฆสงสาร +โอฆะ +โอ่ง +โองการ +โองโขดง +โอ่งมังกร +โอชะ +โอชา +โอโซน +โอฐ +โอด +โอดกาเหว่า +โอดครวญ +โอดโอย +โอ๊ต +โอตตัปปะ +โอ่โถง +โอ้โถง +โอทน- +โอทนะ +โอน +โอนกรรมสิทธิ์ +โอนชาติ +โอนอ่อน +โอนเอน +โอบ +โอบอ้อมอารี +โอบอุ้ม +โอบเอื้อ +โอปปาติกะ +โอภา +โอภาปราศรัย +โอภาส +โอม +โอย +โอ๊ย +โอร- +โอรส +โอละพ่อ +โอลิมปิก +โอ้โลม +โอ้โลมปฏิโลม +โอ้ว่า +โอวาท +โอษฐ- +โอษฐ์ +โอษฐชะ +โอษฐภัย +โอสถ +โอสถ- +โอสถกรรม +โอสาน +โอหนอ +โอห์ม +โอห์มมิเตอร์ +โอหัง +โอฬาร +โอฬาริก +โอฬารึก +โอ่อวด +โอ้อวด +โอ่อ่า +โอ้เอ้ +โอเอซิส +โอ้โฮ +ไอ +ไอ้ +ไอกรน +ไอโซโทป +ไอแดด +ไอตัว +ไอน์สไตเนียม +ไอพ่น +ไอพิษ +ไอยรา +ไอยเรศ +ไอราพต +ไอราวัณ +ไอศกรีม +ไอศวรรย์ +ไอศุริย- +ไอศุริยสมบัติ +ไอศูรย์ +ไอเสีย +ไอออน +ไอโอดีน +ฮ +ฮกเกี้ยน +ฮด +ฮวงซุ้ย +ฮวน +ฮ้วนหมู +ฮวบ +ฮวบฮาบ +ฮ่อ +ฮ้อ +ฮอกกี้ +ฮอด +ฮ่อม +ฮ่อมดง +ฮ่อมเมือง +ฮอร์โมน +ฮอลแลนด์ +ฮอลันดา +ฮะ +ฮะฮ้าย +ฮะไฮ้ +ฮัก +ฮักๆ +ฮังเล +ฮัจญ์ +ฮัจญะฮ์ +ฮัจญี +ฮั่น +ฮา +ฮ้า +ฮ่างหลวง +ฮาป่า +ฮาม +ฮาเร็ม +ฮาห์เนียม +ฮ้าไฮ้ +ฮิจเราะห์ +ฮินดู +ฮิปโปโปเตมัส +ฮิสทีเรีย +ฮีเลียม +ฮึ +ฮึก +ฮึกหาญ +ฮึกห้าว +ฮึกเหิม +ฮึกโหม +ฮึกฮัก +ฮึด +ฮึดฮัด +ฮึ่ม +ฮึย +ฮึยๆ +ฮึ่ย +ฮืดฮาด +ฮือ +ฮือๆ +ฮื่อ +ฮื้อ +ฮุด +ฮุบ +ฮุยเลฮุย +ฮู้ +ฮูก +ฮูม +เฮ +เฮกตาร์ +เฮกโตกรัม +เฮกโตเมตร +เฮกโตลิตร +เฮง +เฮงซวย +เฮ็ด +เฮโมโกลบิน +เฮย +เฮ้ย +เฮโรอีน +เฮลิคอปเตอร์ +เฮโลสาระพา +เฮ้ว +เฮอ +เฮ้อ +เฮฮา +เฮิรตซ์ +เฮี้ยน +เฮี้ยบ +เฮี้ยว +เฮือก +เฮือกๆ +เฮือกสุดท้าย +เฮือน +แฮ +แฮ่ +แฮก +แฮกๆ +แฮ่กึ๊น +แฮนด์บอล +แฮฟเนียม +แฮม +แฮะ +โฮ +โฮก +โฮกอือ +โฮกฮาก +โฮเต็ล +โฮลเมียม +โฮะ +ไฮ้ +ไฮโกรมิเตอร์ +ไฮดรา +ไฮโดรคาร์บอน +ไฮโดรเจน +ไฮโดรเจนซัลไฟด์ +ไฮโดรเจนเพอร์ออกไซด์ +ไฮโดรมิเตอร์ +ไฮไฟ +ไฮโล +ไฮฮี diff --git a/icuSources/test/testdata/root.txt b/icuSources/test/testdata/root.txt index 539d3bc7..dc5d7982 100644 --- a/icuSources/test/testdata/root.txt +++ b/icuSources/test/testdata/root.txt @@ -1,6 +1,6 @@ //******************************************************************************* //* -//* Copyright (C) 1998-2000, International Business Machines +//* Copyright (C) 1998-2005, International Business Machines //* Corporation and others. All Rights Reserved. //* //******************************************************************************* @@ -53,6 +53,7 @@ root tag4 { ROOT4 } tag9 { ROOT9 } tag12 { ROOT12 } + tag1 { ROOT1 } } string_in_Root_te { ROOT } @@ -91,6 +92,18 @@ root tag13 { ROOT13 } tag8 { ROOT8 } } + rootAliasClient:alias {"/LOCALE/rootAliasDestination"} + rootAliasDestination {"wrong"} + nestedRootAliasClient:alias {"/LOCALE/rootAliasTable/destination"} + rootAliasTable { + destination { "correct" } + } + a { + a1{"ar1"} + a2{"ar2"} + a3{"ar3"} + a4{"ar4"} + } } //eof diff --git a/icuSources/test/testdata/sh.txt b/icuSources/test/testdata/sh.txt new file mode 100644 index 00000000..0519dada --- /dev/null +++ b/icuSources/test/testdata/sh.txt @@ -0,0 +1,14 @@ +//******************************************************************************* +//* +//* Copyright (C) 2005, International Business Machines +//* Corporation and others. All Rights Reserved. +//* +//******************************************************************************* + +sh{ + a{ + a1{"a01"} + a2{"a02"} + a3{"a03"} + } + } \ No newline at end of file diff --git a/icuSources/test/testdata/sh_YU.txt b/icuSources/test/testdata/sh_YU.txt new file mode 100644 index 00000000..bdd009d8 --- /dev/null +++ b/icuSources/test/testdata/sh_YU.txt @@ -0,0 +1,12 @@ +//******************************************************************************* +//* +//* Copyright (C) 2005, International Business Machines +//* Corporation and others. All Rights Reserved. +//* +//******************************************************************************* + +sh_YU{ + a{ + a2{"a12"} + } + } \ No newline at end of file diff --git a/icuSources/test/testdata/structLocale.txt b/icuSources/test/testdata/structLocale.txt index 9e103cd0..6df6655c 100644 --- a/icuSources/test/testdata/structLocale.txt +++ b/icuSources/test/testdata/structLocale.txt @@ -1,6 +1,6 @@ // *************************************************************************** // * -// * Copyright (C) 2004 International Business Machines +// * Copyright (C) 2004-2006 International Business Machines // * Corporation and others. All Rights Reserved. // * // *************************************************************************** @@ -9,9 +9,44 @@ // Since ICU doesn't follow the traditional fallback model where all keys fallback to root, // root can't be used to validate the structure. // This file was generated from en.txt, and all ".*" were replaced with "". -structLocale{ +structLocale:table(nofallback){ BreakDictionaryData:bin {00} Countries{ + 001{""} + 002{""} + 003{""} + 005{""} + 009{""} + 011{""} + 013{""} + 014{""} + 015{""} + 017{""} + 018{""} + 019{""} + 021{""} + 029{""} + 030{""} + 034{""} + 035{""} + 039{""} + 053{""} + 054{""} + 057{""} + 061{""} + 062{""} + 142{""} + 143{""} + 145{""} + 150{""} + 151{""} + 154{""} + 155{""} + 172{""} + 200{""} + 419{""} + 830{""} + 833{""} AD{""} AE{""} AF{""} @@ -27,6 +62,7 @@ structLocale{ AT{""} AU{""} AW{""} + AX{""} AZ{""} BA{""} BB{""} @@ -59,7 +95,8 @@ structLocale{ CM{""} CN{""} CO{""} - CR{""} + CR{""} + CS{""} CU{""} CV{""} CX{""} @@ -89,6 +126,7 @@ structLocale{ GD{""} GE{""} GF{""} + GG{""} GH{""} GI{""} GL{""} @@ -111,12 +149,14 @@ structLocale{ ID{""} IE{""} IL{""} + IM{""} IN{""} IO{""} IQ{""} IR{""} IS{""} IT{""} + JE{""} JM{""} JO{""} JP{""} @@ -191,6 +231,9 @@ structLocale{ PW{""} PY{""} QA{""} + QE{""} + QO{""} + QU{""} RE{""} RO{""} RU{""} @@ -248,16 +291,12 @@ structLocale{ WS{""} YE{""} YT{""} - YU{""} ZA{""} ZM{""} ZW{""} + ZZ{""} } Currencies{ - ADD{ - "", - "", - } ADP{ "", "", @@ -274,26 +313,10 @@ structLocale{ "", "", } - AIF{ - "", - "", - } - ALK{ - "", - "", - } ALL{ "", "", } - ALV{ - "", - "", - } - ALX{ - "", - "", - } AMD{ "", "", @@ -318,18 +341,10 @@ structLocale{ "", "", } - AOS{ - "", - "", - } ARA{ "", "", } - ARM{ - "", - "", - } ARP{ "", "", @@ -346,10 +361,6 @@ structLocale{ "", "", } - AUP{ - "", - "", - } AWG{ "", "", @@ -358,15 +369,15 @@ structLocale{ "", "", } - BAD{ + AZN{ "", "", } - BAM{ + BAD{ "", "", } - BAN{ + BAM{ "", "", } @@ -394,22 +405,10 @@ structLocale{ "", "", } - BGM{ - "", - "", - } BGN{ "", "", } - BGO{ - "", - "", - } - BGX{ - "", - "", - } BHD{ "", "", @@ -422,10 +421,6 @@ structLocale{ "", "", } - BMP{ - "", - "", - } BND{ "", "", @@ -434,10 +429,6 @@ structLocale{ "", "", } - BOL{ - "", - "", - } BOP{ "", "", @@ -470,34 +461,18 @@ structLocale{ "", "", } - BRZ{ - "", - "", - } BSD{ "", "", } - BSP{ - "", - "", - } BTN{ "", "", } - BTR{ - "", - "", - } BUK{ "", "", } - BUR{ - "", - "", - } BWP{ "", "", @@ -506,10 +481,6 @@ structLocale{ "", "", } - BYL{ - "", - "", - } BYR{ "", "", @@ -518,10 +489,6 @@ structLocale{ "", "", } - BZH{ - "", - "", - } CAD{ "", "", @@ -530,15 +497,7 @@ structLocale{ "", "", } - CDG{ - "", - "", - } - CDL{ - "", - "", - } - CFF{ + CHE{ "", "", } @@ -546,15 +505,7 @@ structLocale{ "", "", } - CKD{ - "", - "", - } - CLC{ - "", - "", - } - CLE{ + CHW{ "", "", } @@ -566,31 +517,19 @@ structLocale{ "", "", } - CMF{ - "", - "", - } - CNP{ - "", - "", - } - CNX{ - "", - "", - } CNY{ "", "", } - COB{ + CNX{ "", "", } - COF{ + COP{ "", "", } - COP{ + COU{ "", "", } @@ -598,7 +537,7 @@ structLocale{ "", "", } - CSC{ + CSD{ "", "", } @@ -610,18 +549,10 @@ structLocale{ "", "", } - CUX{ - "", - "", - } CVE{ "", "", } - CWG{ - "", - "", - } CYP{ "", "", @@ -638,10 +569,6 @@ structLocale{ "", "", } - DES{ - "", - "", - } DJF{ "", "", @@ -658,14 +585,6 @@ structLocale{ "", "", } - DZF{ - "", - "", - } - DZG{ - "", - "", - } ECS{ "", "", @@ -682,39 +601,39 @@ structLocale{ "", "", } - ERN{ + EQE{ "", "", } - ESP{ + ERN{ "", "", } - ETB{ + ESA{ "", "", } - ETD{ + ESB{ "", "", } - EUR{ + ESP{ "", "", } - FIM{ + ETB{ "", "", } - FIN{ + EUR{ "", "", } - FJD{ + FIM{ "", "", } - FJP{ + FJD{ "", "", } @@ -722,22 +641,10 @@ structLocale{ "", "", } - FOK{ - "", - "", - } FRF{ "", "", } - FRG{ - "", - "", - } - GAF{ - "", - "", - } GBP{ "", "", @@ -754,86 +661,38 @@ structLocale{ "", "", } - GHO{ - "", - "", - } - GHP{ - "", - "", - } - GHR{ - "", - "", - } GIP{ "", "", } - GLK{ - "", - "", - } GMD{ "", "", } - GMP{ - "", - "", - } GNF{ "", "", } - GNI{ - "", - "", - } GNS{ "", "", } - GPF{ - "", - "", - } GQE{ "", "", } - GQF{ - "", - "", - } - GQP{ - "", - "", - } GRD{ "", "", } - GRN{ - "", - "", - } GTQ{ "", "", } - GUF{ - "", - "", - } GWE{ "", "", } - GWM{ - "", - "", - } GWP{ "", "", @@ -866,22 +725,6 @@ structLocale{ "", "", } - IBP{ - "", - "", - } - IDG{ - "", - "", - } - IDJ{ - "", - "", - } - IDN{ - "", - "", - } IDR{ "", "", @@ -890,10 +733,6 @@ structLocale{ "", "", } - ILL{ - "", - "", - } ILP{ "", "", @@ -902,10 +741,6 @@ structLocale{ "", "", } - IMP{ - "", - "", - } INR{ "", "", @@ -926,18 +761,10 @@ structLocale{ "", "", } - JEP{ - "", - "", - } JMD{ "", "", } - JMP{ - "", - "", - } JOD{ "", "", @@ -954,38 +781,18 @@ structLocale{ "", "", } - KHO{ - "", - "", - } KHR{ "", "", } - KID{ - "", - "", - } KMF{ "", "", } - KPP{ - "", - "", - } KPW{ "", "", } - KRH{ - "", - "", - } - KRO{ - "", - "", - } KRW{ "", "", @@ -998,10 +805,6 @@ structLocale{ "", "", } - KZR{ - "", - "", - } KZT{ "", "", @@ -1014,23 +817,19 @@ structLocale{ "", "", } - LIF{ - "", - "", - } LKR{ "", "", } - LNR{ + LRD{ "", "", } - LRD{ + LSL{ "", "", } - LSL{ + LSM{ "", "", } @@ -1042,27 +841,27 @@ structLocale{ "", "", } - LUF{ + LUC{ "", "", } - LVL{ + LUF{ "", "", } - LVR{ + LUL{ "", "", } - LYB{ + LVL{ "", "", } - LYD{ + LVR{ "", "", } - LYP{ + LYD{ "", "", } @@ -1074,26 +873,10 @@ structLocale{ "", "", } - MCF{ - "", - "", - } - MCG{ - "", - "", - } - MDC{ - "", - "", - } MDL{ "", "", } - MDR{ - "", - "", - } MGA{ "", "", @@ -1102,18 +885,10 @@ structLocale{ "", "", } - MHD{ - "", - "", - } MKD{ "", "", } - MKN{ - "", - "", - } MLF{ "", "", @@ -1122,10 +897,6 @@ structLocale{ "", "", } - MMX{ - "", - "", - } MNT{ "", "", @@ -1134,10 +905,6 @@ structLocale{ "", "", } - MQF{ - "", - "", - } MRO{ "", "", @@ -1154,10 +921,6 @@ structLocale{ "", "", } - MVP{ - "", - "", - } MVR{ "", "", @@ -1166,10 +929,6 @@ structLocale{ "", "", } - MWP{ - "", - "", - } MXN{ "", "", @@ -1194,11 +953,11 @@ structLocale{ "", "", } - NAD{ + MZN{ "", "", } - NCF{ + NAD{ "", "", } @@ -1206,22 +965,10 @@ structLocale{ "", "", } - NGP{ - "", - "", - } - NHF{ - "", - "", - } NIC{ "", "", } - NIG{ - "", - "", - } NIO{ "", "", @@ -1242,34 +989,14 @@ structLocale{ "", "", } - NZP{ - "", - "", - } OMR{ "", "", } - OMS{ - "", - "", - } PAB{ "", "", } - PDK{ - "", - "", - } - PDN{ - "", - "", - } - PDR{ - "", - "", - } PEI{ "", "", @@ -1298,22 +1025,10 @@ structLocale{ "", "", } - PLX{ - "", - "", - } PLZ{ "", "", } - PSP{ - "", - "", - } - PTC{ - "", - "", - } PTE{ "", "", @@ -1326,7 +1041,7 @@ structLocale{ "", "", } - REF{ + RHD{ "", "", } @@ -1354,10 +1069,6 @@ structLocale{ "", "", } - SAS{ - "", - "", - } SBD{ "", "", @@ -1386,10 +1097,6 @@ structLocale{ "", "", } - SIB{ - "", - "", - } SIT{ "", "", @@ -1402,15 +1109,11 @@ structLocale{ "", "", } - SML{ - "", - "", - } SOS{ "", "", } - SQS{ + SRD{ "", "", } @@ -1418,22 +1121,10 @@ structLocale{ "", "", } - SSP{ - "", - "", - } STD{ "", "", } - STE{ - "", - "", - } - SUN{ - "", - "", - } SUR{ "", "", @@ -1450,14 +1141,6 @@ structLocale{ "", "", } - TCC{ - "", - "", - } - TDF{ - "", - "", - } THB{ "", "", @@ -1482,18 +1165,10 @@ structLocale{ "", "", } - TOS{ - "", - "", - } TPE{ "", "", } - TPP{ - "", - "", - } TRL{ "", "", @@ -1506,14 +1181,6 @@ structLocale{ "", "", } - TTO{ - "", - "", - } - TVD{ - "", - "", - } TWD{ "", "", @@ -1550,10 +1217,6 @@ structLocale{ "", "", } - UYF{ - "", - "", - } UYP{ "", "", @@ -1562,75 +1225,31 @@ structLocale{ "", "", } - UZC{ - "", - "", - } UZS{ "", "", } - VAL{ - "", - "", - } - VDD{ - "", - "", - } - VDN{ - "", - "", - } - VDP{ - "", - "", - } VEB{ "", "", } - VGD{ - "", - "", - } VND{ "", "", } - VNN{ - "", - "", - } - VNR{ - "", - "", - } - VNS{ - "", - "", - } VUV{ "", "", } - WSP{ - "", - "", - } WST{ "", "", } - XAD{ - "", - "", - } XAF{ "", "", } - XAM{ + XAG{ "", "", } @@ -1658,18 +1277,10 @@ structLocale{ "", "", } - XCF{ - "", - "", - } XDR{ "", "", } - XEF{ - "", - "", - } XEU{ "", "", @@ -1682,35 +1293,35 @@ structLocale{ "", "", } - XID{ + XOF{ "", "", } - XMF{ + XPD{ "", "", } - XNF{ + XPF{ "", "", } - XOF{ + XPT{ "", "", } - XPF{ + XRE{ "", "", } - XTR{ + XTS{ "", "", } - YDD{ + XXX{ "", "", } - YEI{ + YDD{ "", "", } @@ -1722,14 +1333,6 @@ structLocale{ "", "", } - YUF{ - "", - "", - } - YUG{ - "", - "", - } YUM{ "", "", @@ -1738,22 +1341,10 @@ structLocale{ "", "", } - YUO{ - "", - "", - } - YUR{ - "", - "", - } ZAL{ "", "", } - ZAP{ - "", - "", - } ZAR{ "", "", @@ -1762,10 +1353,6 @@ structLocale{ "", "", } - ZMP{ - "", - "", - } ZRN{ "", "", @@ -1779,7 +1366,14 @@ structLocale{ "", } } + delimiters{ + quotationStart{""} + quotationEnd{""} + alternateQuotationEnd{""} + alternateQuotationStart{""} + } ExemplarCharacters{""} + AuxExemplarCharacters{""} Keys{ calendar{""} collation{""} @@ -1796,13 +1390,16 @@ structLocale{ af{""} afa{""} afh{""} + ain{""} ak{""} akk{""} ale{""} alg{""} + alt{""} am{""} an{""} ang{""} + anp{""} apa{""} ar{""} arc{""} @@ -1852,6 +1449,7 @@ structLocale{ cai{""} car{""} cau{""} + cch{""} ce{""} ceb{""} cel{""} @@ -1915,6 +1513,7 @@ structLocale{ fat{""} ff{""} fi{""} + fil{""} fiu{""} fj{""} fo{""} @@ -1922,6 +1521,8 @@ structLocale{ fr{""} frm{""} fro{""} + frr{""} + frs{""} fur{""} fy{""} ga{""} @@ -1941,6 +1542,7 @@ structLocale{ got{""} grb{""} grc{""} + gsw{""} gu{""} gv{""} gwi{""} @@ -1988,10 +1590,13 @@ structLocale{ kaa{""} kab{""} kac{""} + kaj{""} kam{""} kar{""} kaw{""} kbd{""} + kcg{""} + kfo{""} kg{""} kha{""} khi{""} @@ -2009,6 +1614,7 @@ structLocale{ kpe{""} kr{""} krc{""} + krl{""} kro{""} kru{""} ks{""} @@ -2071,6 +1677,7 @@ structLocale{ mul{""} mun{""} mus{""} + mwl{""} mwr{""} my{""} myn{""} @@ -2139,6 +1746,7 @@ structLocale{ rom{""} root{""} ru{""} + rup{""} rw{""} sa{""} sad{""} @@ -2149,6 +1757,7 @@ structLocale{ sas{""} sat{""} sc{""} + scn{""} sco{""} sd{""} se{""} @@ -2179,6 +1788,7 @@ structLocale{ son{""} sq{""} sr{""} + srn{""} srr{""} ss{""} ssa{""} @@ -2256,6 +1866,7 @@ structLocale{ znd{""} zu{""} zun{""} + zxx{""} } LocaleScript{ "", @@ -2288,19 +1899,32 @@ structLocale{ Scripts{ Arab{""} Armn{""} + Bali{""} + Batk{""} Beng{""} + Blis{""} Bopo{""} + Brah{""} Brai{""} + Bugi{""} Buhd{""} Cans{""} + Cham{""} Cher{""} + Cirt{""} Copt{""} Cprt{""} Cyrl{""} + Cyrs{""} Deva{""} Dsrt{""} + Egyd{""} + Egyh{""} + Egyp{""} Ethi{""} + Geok{""} Geor{""} + Glag{""} Goth{""} Grek{""} Gujr{""} @@ -2312,37 +1936,71 @@ structLocale{ Hant{""} Hebr{""} Hira{""} + Hmng{""} Hrkt{""} + Hung{""} + Inds{""} Ital{""} + Java{""} + Kali{""} Kana{""} + Khar{""} Khmr{""} Knda{""} Laoo{""} + Latf{""} + Latg{""} Latn{""} + Lepc{""} Limb{""} + Lina{""} Linb{""} + Mand{""} + Maya{""} + Mero{""} Mlym{""} Mong{""} Mymr{""} + Nkoo{""} Ogam{""} + Orkh{""} Orya{""} Osma{""} + Perm{""} + Phag{""} + Phnx{""} + Plrd{""} Qaai{""} + Roro{""} Runr{""} + Sara{""} Shaw{""} Sinh{""} + Sylo{""} Syrc{""} + Syre{""} + Syrj{""} + Syrn{""} Tagb{""} Tale{""} + Talu{""} Taml{""} Telu{""} + Teng{""} + Tfng{""} Tglg{""} Thaa{""} Thai{""} Tibt{""} Ugar{""} + Vaii{""} + Visp{""} + Xpeo{""} + Xsux{""} Yiii{""} + Zxxx{""} Zyyy{""} + Zzzz{""} } Types{ calendar{ @@ -2350,12 +2008,15 @@ structLocale{ chinese{""} gregorian{""} hebrew{""} + persian{""} islamic{""} islamic-civil{""} japanese{""} } collation{ + big5han{""} direct{""} + gb2312han{""} phonebook{""} pinyin{""} stroke{""} @@ -2363,8 +2024,21 @@ structLocale{ } } Variants{ + 1901{""} + 1996{""} POSIX{""} + POLYTONI{""} REVISED{""} + BOONT{""} + GAULISH{""} + GUOYU{""} + HAKKA{""} + LOJBAN{""} + NEDIS{""} + SAAHO{""} + ROZAJ{""} + SCOUSE{""} + XIANG{""} } Version{""} boundaries{ @@ -2391,6 +2065,10 @@ structLocale{ abbreviated{ "", } + wide{ + "", + "" + } } } chinese{ @@ -2406,14 +2084,86 @@ structLocale{ "", } } + coptic{ + monthNames{ + format{ + abbreviated{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + wide{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + } + } + } default{""} + ethiopic{ + monthNames{ + format{ + abbreviated{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + wide{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + } + } + } gregorian{ AmPmMarkers{ "", "", } DateTimeElements:intvector{ - 1, + 2, 1, } DateTimePatterns{ @@ -2427,6 +2177,34 @@ structLocale{ "", "", } + appendItems{ + Day{"{0} ({2}: {1})"} + Day-Of-Week{"{0} {1}"} + Era{"{0} {1}"} + Hour{"{0} ({2}: {1})"} + Minute{"{0} ({2}: {1})"} + Month{"{0} ({2}: {1})"} + Quarter{"{0} ({2}: {1})"} + Second{"{0} ({2}: {1})"} + Timezone{"{0} {1}"} + Week{"{0} ({2}: {1})"} + Year{"{0} {1}"} + } + availableFormats{ + HHmm{""} + HHmmss{""} + KKmm{"KK:mm a"} + KKmmss{"KK:mm:ss a"} + MMMM{""} + MMMdd{""} + mmssSS{""} + ww{""} + yyMM{""} + yyMMMEEEd{""} + yyMMMd{""} + yyMd{""} + yyQQQQ{""} + } dayNames{ default{""} format{ @@ -2495,6 +2273,100 @@ structLocale{ "", "", } + wide{ + "", + "" + } + } + fields{ + day{ + dn{"Day"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + dayperiod{ + dn{"Dayperiod"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + era{ + dn{"Era"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + hour{ + dn{"Hour"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + minute{ + dn{"Minute"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + month{ + dn{"Month"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + second{ + dn{"Second"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + week{ + dn{"Week"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + weekday{ + dn{"Day of the Week"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + year{ + dn{"Year"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } + zone{ + dn{"Zone"} + relative{ + "-1"{""} + "0"{""} + "1"{""} + } + } } monthNames{ default{""} @@ -2589,6 +2461,22 @@ structLocale{ } } } + quarters{ + format{ + abbreviated{ + "", + "", + "", + "", + } + wide{ + "", + "", + "", + "", + } + } + } weekend:intvector{ 7, 0, @@ -2601,6 +2489,10 @@ structLocale{ abbreviated{ "", } + wide{ + "", + "" + } } monthNames{ default{""} @@ -2626,16 +2518,224 @@ structLocale{ } } islamic{ + DateTimeElements:intvector{ + 1, + 1, + } + DateTimePatterns{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + } eras{ abbreviated{ "", } + wide{ + "", + } } monthNames{ default{""} format{ - abbreviated:alias{"structLocale/calendar/islamic/monthNames/format/wide"} + abbreviated{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + default{""} + narrow{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + wide{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + } + stand-alone{ + abbreviated{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } default{""} + narrow{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + wide{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + } + } + } + persian{ + DateTimeElements:intvector{ + 1, + 1, + } + DateTimePatterns{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + eras{ + abbreviated{ + "", + } + wide{ + "", + } + } + monthNames{ + default{""} + format{ + abbreviated{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + default{""} + narrow{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + wide{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + } + stand-alone{ + abbreviated{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } + default{""} + narrow{ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + } wide{ "", "", @@ -2905,18 +3005,5276 @@ structLocale{ "", "", } + wide{ + "", + "" + } } } } + layout{ + casing{""} + characters{""} + lines{""} + } localPatternChars{""} + measurementSystemNames{ + US{"US"} + metric{"Metric"} + } + messages{ + nostr{""} + yesstr{""} + yesexpr{""} + noexpr{""} + } zoneStrings{ - { - "", - "", - "", - "", - "", - "", + hoursFormat{""} + hourFormat{""} + gmtFormat{""} + regionFormat{""} + fallbackFormat{""} + abbreviationFallback{""} + preferenceOrdering:array{""} + singleCountries:array{""} + "ACT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "AET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "AGT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "ART"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "AST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Abidjan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Accra"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Addis_Ababa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Algiers"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Asmera"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Bamako"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Bangui"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Banjul"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Bissau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Blantyre"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Brazzaville"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Bujumbura"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Cairo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Casablanca"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Ceuta"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Conakry"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Dakar"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Dar_es_Salaam"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Djibouti"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Douala"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:El_Aaiun"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Freetown"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Gaborone"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Harare"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Johannesburg"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Kampala"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Khartoum"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Kigali"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Kinshasa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Lagos"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Libreville"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Lome"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Luanda"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Lubumbashi"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Lusaka"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Malabo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Maputo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Maseru"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Mbabane"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Mogadishu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Monrovia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Nairobi"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Ndjamena"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Niamey"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Nouakchott"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Ouagadougou"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Porto-Novo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Sao_Tome"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Timbuktu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Tripoli"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Tunis"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Africa:Windhoek"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Adak"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Anchorage"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Anguilla"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Antigua"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Araguaina"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Buenos_Aires"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Catamarca"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:ComodRivadavia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Cordoba"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Jujuy"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:La_Rioja"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Mendoza"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Rio_Gallegos"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:San_Juan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Tucuman"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Argentina:Ushuaia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Aruba"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Asuncion"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Atka"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Bahia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Barbados"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Belem"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Belize"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Boa_Vista"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Bogota"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Boise"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Buenos_Aires"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Cambridge_Bay"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Campo_Grande"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Cancun"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Caracas"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Catamarca"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Cayenne"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Cayman"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Chicago"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Chihuahua"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Coral_Harbour"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Cordoba"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Costa_Rica"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Cuiaba"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Curacao"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Danmarkshavn"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Dawson"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Dawson_Creek"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Denver"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Detroit"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Dominica"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Edmonton"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Eirunepe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:El_Salvador"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Ensenada"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Fort_Wayne"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Fortaleza"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Glace_Bay"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Godthab"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Goose_Bay"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Grand_Turk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Grenada"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Guadeloupe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Guatemala"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Guayaquil"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Guyana"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Halifax"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Havana"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Hermosillo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indiana:Indianapolis"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indiana:Knox"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indiana:Marengo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indiana:Petersburg"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indiana:Vevay"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indiana:Vincennes"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Indianapolis"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Inuvik"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Iqaluit"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Jamaica"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Jujuy"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Juneau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Kentucky:Louisville"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Kentucky:Monticello"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Knox_IN"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:La_Paz"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Lima"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Los_Angeles"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Louisville"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Maceio"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Managua"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Manaus"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Martinique"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Mazatlan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Mendoza"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Menominee"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Merida"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Mexico_City"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Miquelon"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Moncton"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Monterrey"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Montevideo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Montreal"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Montserrat"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Nassau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:New_York"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Nipigon"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Nome"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Noronha"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:North_Dakota:Center"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Panama"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Pangnirtung"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Paramaribo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Phoenix"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Port-au-Prince"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Port_of_Spain"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Porto_Acre"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Porto_Velho"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Puerto_Rico"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Rainy_River"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Rankin_Inlet"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Recife"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Regina"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Rio_Branco"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Rosario"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Santiago"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Santo_Domingo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Sao_Paulo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Scoresbysund"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Shiprock"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:St_Johns"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:St_Kitts"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:St_Lucia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:St_Thomas"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:St_Vincent"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Swift_Current"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Tegucigalpa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Thule"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Thunder_Bay"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Tijuana"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Toronto"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Tortola"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Vancouver"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Virgin"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Whitehorse"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Winnipeg"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Yakutat"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "America:Yellowknife"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Casey"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Davis"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:DumontDUrville"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Mawson"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:McMurdo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Palmer"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Rothera"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:South_Pole"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Syowa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Antarctica:Vostok"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Arctic:Longyearbyen"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Aden"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Almaty"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Amman"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Anadyr"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Aqtau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Aqtobe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Ashgabat"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Ashkhabad"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Baghdad"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Bahrain"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Baku"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Bangkok"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Beirut"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Bishkek"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Brunei"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Calcutta"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Choibalsan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Chongqing"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Chungking"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Colombo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Dacca"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Damascus"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Dhaka"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Dili"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Dubai"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Dushanbe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Gaza"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Harbin"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Hong_Kong"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Hovd"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Irkutsk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Istanbul"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Jakarta"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Jayapura"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Jerusalem"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Kabul"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Kamchatka"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Karachi"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Kashgar"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Katmandu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Krasnoyarsk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Kuala_Lumpur"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Kuching"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Kuwait"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Macao"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Macau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Magadan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Makassar"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Manila"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Muscat"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Nicosia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Novosibirsk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Omsk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Oral"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Phnom_Penh"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Pontianak"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Pyongyang"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Qatar"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Qyzylorda"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Rangoon"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Riyadh"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Riyadh87"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Riyadh88"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Riyadh89"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Saigon"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Sakhalin"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Samarkand"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Seoul"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Shanghai"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Singapore"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Taipei"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Tashkent"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Tbilisi"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Tehran"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Tel_Aviv"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Thimbu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Thimphu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Tokyo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Ujung_Pandang"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Ulaanbaatar"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Ulan_Bator"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Urumqi"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Vientiane"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Vladivostok"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Yakutsk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Yekaterinburg"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Asia:Yerevan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Azores"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Bermuda"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Canary"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Cape_Verde"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Faeroe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Jan_Mayen"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Madeira"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Reykjavik"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:South_Georgia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:St_Helena"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Atlantic:Stanley"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:ACT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Adelaide"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Brisbane"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Broken_Hill"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Canberra"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Currie"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Darwin"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Hobart"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:LHI"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Lindeman"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Lord_Howe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Melbourne"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:NSW"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:North"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Perth"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Queensland"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:South"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Sydney"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Tasmania"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Victoria"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:West"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Australia:Yancowinna"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "BET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "BST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Brazil:Acre"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Brazil:DeNoronha"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Brazil:East"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Brazil:West"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "CAT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "CET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "CNT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "CST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "CST6CDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "CTT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Atlantic"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Central"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:East-Saskatchewan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Eastern"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Mountain"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Newfoundland"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Pacific"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Saskatchewan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Canada:Yukon"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Chile:Continental"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Chile:EasterIsland"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Cuba"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "EAT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "ECT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "EET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "EST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "EST5EDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Egypt"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Eire"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+0"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+1"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+10"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+11"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+12"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+2"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+3"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+4"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+5"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+6"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+7"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+8"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT+9"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-0"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-1"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-10"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-11"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-12"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-13"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-14"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-2"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-3"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-4"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-5"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-6"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-7"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-8"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT-9"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:GMT0"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:Greenwich"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:UCT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:UTC"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:Universal"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Etc:Zulu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Amsterdam"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Andorra"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Athens"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Belfast"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Belgrade"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Berlin"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Bratislava"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Brussels"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Bucharest"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Budapest"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Chisinau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Copenhagen"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Dublin"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Gibraltar"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Helsinki"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Istanbul"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Kaliningrad"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Kiev"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Lisbon"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Ljubljana"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:London"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Luxembourg"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Madrid"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Malta"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Mariehamn"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Minsk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Monaco"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Moscow"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Nicosia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Oslo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Paris"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Prague"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Riga"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Rome"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Samara"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:San_Marino"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Sarajevo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Simferopol"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Skopje"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Sofia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Stockholm"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Tallinn"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Tirane"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Tiraspol"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Uzhgorod"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Vaduz"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Vatican"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Vienna"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Vilnius"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Warsaw"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Zagreb"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Zaporozhye"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Europe:Zurich"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Factory"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "GB"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "GB-Eire"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "GMT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "GMT+0"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "GMT-0"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "GMT0"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Greenwich"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "HST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Hongkong"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "IET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "IST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Iceland"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Antananarivo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Chagos"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Christmas"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Cocos"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Comoro"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Kerguelen"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Mahe"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Maldives"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Mauritius"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Mayotte"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Indian:Reunion"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Iran"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Israel"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "JST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Jamaica"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Japan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Kwajalein"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Libya"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "MET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "MIT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "MST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "MST7MDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Mexico:BajaNorte"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Mexico:BajaSur"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Mexico:General"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Mideast:Riyadh87"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Mideast:Riyadh88"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Mideast:Riyadh89"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "NET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "NST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "NZ"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "NZ-CHAT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Navajo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "PLT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "PNT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "PRC"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "PRT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "PST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "PST8PDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Apia"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Auckland"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Chatham"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Easter"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Efate"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Enderbury"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Fakaofo"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Fiji"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Funafuti"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Galapagos"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Gambier"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Guadalcanal"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Guam"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Honolulu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Johnston"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Kiritimati"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Kosrae"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Kwajalein"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Majuro"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Marquesas"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Midway"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Nauru"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Niue"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Norfolk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Noumea"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Pago_Pago"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Palau"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Pitcairn"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Ponape"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Port_Moresby"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Rarotonga"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Saipan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Samoa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Tahiti"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Tarawa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Tongatapu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Truk"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Wake"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Wallis"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Pacific:Yap"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Poland"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Portugal"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "ROC"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "ROK"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Singapore"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:AST4"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:AST4ADT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:CST6"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:CST6CDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:EST5"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:EST5EDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:HST10"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:MST7"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:MST7MDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:PST8"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:PST8PDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:YST9"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "SystemV:YST9YDT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Turkey"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "UCT"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Alaska"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Aleutian"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Arizona"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Central"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:East-Indiana"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Eastern"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Hawaii"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Indiana-Starke"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Michigan"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Mountain"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Pacific"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Pacific-New"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "US:Samoa"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "UTC"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Universal"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "VST"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "W-SU"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "WET"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} + } + "Zulu"{ + ld{""} + lg{""} + ls{""} + sd{""} + sg{""} + ss{""} + ec{""} } } } + diff --git a/icuSources/test/testdata/te.txt b/icuSources/test/testdata/te.txt index 6e8e790a..3a83c82c 100644 --- a/icuSources/test/testdata/te.txt +++ b/icuSources/test/testdata/te.txt @@ -1,6 +1,6 @@ //******************************************************************************* //* -//* Copyright (C) 1998-2003, International Business Machines +//* Copyright (C) 1998-2005, International Business Machines //* Corporation and others. All Rights Reserved. //* //******************************************************************************* @@ -98,6 +98,68 @@ te ", O\u0308 & S < s\u0327 , S\u0327 & U < u\u0308 , U\u0308 " } } } + aliasClient:alias {"/LOCALE/aliasDestination"} + aliasDestination {"tedest"} + rootAliasDestination {"correct"} + a { + a1{"a21"} + a2{"a22"} + a3{"a23"} + a4{"a24"} + } + zoneStrings{ + { + "Pacific/Honolulu", + "Hawaii Standard Time", + "HST", + "Hawaii Daylight Time", + "HDT", + "Honolulu", + "Hawaii Time", + "HT", + } + { + "America/Anchorage", + "Alaska Standard Time", + "AKST", + "Alaska Daylight Time", + "AKDT", + "Anchorage", + "Alaska Time", + "AKT", + } + { + "America/Los_Angeles", + "Pacific Standard Time", + "PST", + "Pacific Daylight Time", + "PDT", + "Los Angeles", + "Pacific Time", + "PT", + } + { + "America/Phoenix", + "Mountain Standard Time", + "MST", + "Mountain Daylight Time", + "MDT", + "Phoenix", + "Mountain Time", + "MT", + } + { + "America/Denver", + "Mountain Standard Time", + "MST", + "Mountain Daylight Time", + "MDT", + "Denver", + "Mountain Time", + "MT", + } + } + } //eof diff --git a/icuSources/test/testdata/te_IN.txt b/icuSources/test/testdata/te_IN.txt index c441572a..6d2aa73b 100644 --- a/icuSources/test/testdata/te_IN.txt +++ b/icuSources/test/testdata/te_IN.txt @@ -1,6 +1,6 @@ //******************************************************************************* //* -//* Copyright (C) 1998-2000, International Business Machines +//* Copyright (C) 1998-2005, International Business Machines //* Corporation and others. All Rights Reserved. //* //******************************************************************************* @@ -88,6 +88,9 @@ te_IN tag3 { TE_IN3 } tag7 { TE_IN7 } } + aliasDestination {"correct" } + + a:alias{ "sh_YU"} } //eof diff --git a/icuSources/test/testdata/te_IN_REVISED.txt b/icuSources/test/testdata/te_IN_REVISED.txt new file mode 100644 index 00000000..18efd30b --- /dev/null +++ b/icuSources/test/testdata/te_IN_REVISED.txt @@ -0,0 +1,13 @@ +//******************************************************************************* +//* +//* Copyright (C) 2005, International Business Machines +//* Corporation and others. All Rights Reserved. +//* +//******************************************************************************* + +te_IN_REVISED +{ + a { + a1 { "a41" } + } +} diff --git a/icuSources/test/testdata/testaliases.txt b/icuSources/test/testdata/testaliases.txt index a2720c3c..1ae48be8 100644 --- a/icuSources/test/testdata/testaliases.txt +++ b/icuSources/test/testdata/testaliases.txt @@ -1,6 +1,6 @@ //******************************************************************************* //* -//* Copyright (C) 2002-2004, International Business Machines +//* Copyright (C) 2002-2006, International Business Machines //* Corporation and others. All Rights Reserved. //* //******************************************************************************* @@ -9,7 +9,7 @@ // This is a test resource to check whether the aliasing mechanism works // as advertised -testaliases +testaliases:table(nofallback) { // This should produce an error - circular alias aaa:alias { "testaliases/aab" } // Test circular dependency protection @@ -23,12 +23,12 @@ testaliases // alias that uses another alias and references parts of the end structure referencingalias:alias { "testaliases/anotheralias/2" } // Referencing through another alias - anotheralias:alias { "/ICUDATA/ja/LocaleScript" } + anotheralias:alias { "/ICUDATA/ja_JP/LocaleScript" } // Provoke a fallback too LocaleScript:alias { "/ICUDATA/ja/LocaleScript" } // aliasing using position - BreakDictionaryData:alias { "/ICUDATA/th" } // Referencing corresponding resource in another bundle + boundaries:alias { "/ICUDATA-brkitr/ja" } // Referencing corresponding resource in another bundle // aliasing arrays zoneTests { @@ -45,17 +45,18 @@ testaliases // WARNING: this test assumes that on all platforms digits sort normally // if not, the test may fail testGetStringByKeyAliasing { - KeyAlias0PST:alias { "/ICUDATA/en/zoneStrings/0/0" } //"America/Los_Angeles", - KeyAlias1PacificStandardTime:alias { "/ICUDATA/en/zoneStrings/0/1" } //"Pacific Standard Time", - KeyAlias2PDT:alias { "/ICUDATA/en/zoneStrings/0/4" } //"PDT", - KeyAlias3LosAngeles:alias { "/ICUDATA/en/zoneStrings/0/5" } //"Los Angeles", + KeyAlias0PST:alias { "te/zoneStrings/2/0" } //"America/Los_Angeles", + KeyAlias1PacificStandardTime:alias { "te/zoneStrings/2/1" } //"Pacific Standard Time", + KeyAlias2PDT:alias { "te/zoneStrings/2/4" } //"PDT", + KeyAlias3LosAngeles:alias { "te/zoneStrings/2/5" } //"Los Angeles", } testGetStringByIndexAliasing { - :alias { "/ICUDATA/en/zoneStrings/0/0" } //"America/Los_Angeles", - :alias { "/ICUDATA/en/zoneStrings/0/1" } //"Pacific Standard Time", - :alias { "/ICUDATA/en/zoneStrings/0/4" } //"PDT", - :alias { "/ICUDATA/en/zoneStrings/0/5" } //"Los Angeles", + :alias { "te/zoneStrings/2/0" } //"America/Los_Angeles", + :alias { "te/zoneStrings/2/1" } //"Pacific Standard Time", + :alias { "te/zoneStrings/2/4" } //"PDT", + :alias { "te/zoneStrings/2/5" } //"Los Angeles", } + testAliasToTree:alias{"/ICUDATA-coll/en/collations"} } diff --git a/icuSources/test/testdata/testdata.mak b/icuSources/test/testdata/testdata.mak index dbe0f079..a50b183e 100644 --- a/icuSources/test/testdata/testdata.mak +++ b/icuSources/test/testdata/testdata.mak @@ -1,5 +1,5 @@ #********************************************************************** -#* Copyright (C) 1999-2004, International Business Machines Corporation +#* Copyright (C) 1999-2006, International Business Machines Corporation #* and others. All Rights Reserved. #********************************************************************** # @@ -8,7 +8,7 @@ .SUFFIXES : .res .txt TESTPKG=testdata -TESTDT=$(TESTPKG)_ +TESTDT=$(TESTPKG) ALL : "$(TESTDATAOUT)\testdata.dat" @@ -23,40 +23,43 @@ ALL : "$(TESTDATAOUT)\testdata.dat" # icu26e_testtypes.res is the same, but icuswapped to big-endian EBCDIC # markus 2003nov21 -"$(TESTDATAOUT)\testdata.dat" : "$(TESTDATABLD)\casing.res" "$(TESTDATABLD)\conversion.res" "$(TESTDATABLD)\icuio.res" "$(TESTDATABLD)\mc.res" "$(TESTDATABLD)\structLocale.res" "$(TESTDATABLD)\root.res" "$(TESTDATABLD)\te.res" "$(TESTDATABLD)\te_IN.res" "$(TESTDATABLD)\testaliases.res" "$(TESTDATABLD)\testtypes.res" "$(TESTDATABLD)\testempty.res" "$(TESTDATABLD)\$(TESTDT)iscii.res" "$(TESTDATABLD)\$(TESTDT)idna_rules.res" "$(TESTDATABLD)\DataDrivenCollationTest.res" "$(TESTDATABLD)\$(TESTDT)test.icu" "$(TESTDATABLD)\$(TESTDT)testtable32.res" "$(TESTDATABLD)\$(TESTDT)test1.cnv" "$(TESTDATABLD)\$(TESTDT)test3.cnv" "$(TESTDATABLD)\$(TESTDT)test4.cnv" "$(TESTDATABLD)\$(TESTDT)test4x.cnv" "$(TESTDATABLD)\$(TESTDT)ibm9027.cnv" "$(TESTDATABLD)\$(TESTDT)nfscsi.spp" "$(TESTDATABLD)\$(TESTDT)nfscss.spp" "$(TESTDATABLD)\$(TESTDT)nfscis.spp" "$(TESTDATABLD)\$(TESTDT)nfsmxs.spp" "$(TESTDATABLD)\$(TESTDT)nfsmxp.spp" +"$(TESTDATAOUT)\testdata.dat" : "$(TESTDATABLD)\casing.res" "$(TESTDATABLD)\conversion.res" "$(TESTDATABLD)\icuio.res" "$(TESTDATABLD)\mc.res" "$(TESTDATABLD)\structLocale.res" "$(TESTDATABLD)\root.res" "$(TESTDATABLD)\sh.res" "$(TESTDATABLD)\sh_YU.res" "$(TESTDATABLD)\te.res" "$(TESTDATABLD)\te_IN.res" "$(TESTDATABLD)\te_IN_REVISED.res" "$(TESTDATABLD)\testaliases.res" "$(TESTDATABLD)\testtypes.res" "$(TESTDATABLD)\testempty.res" "$(TESTDATABLD)\iscii.res" "$(TESTDATABLD)\idna_rules.res" "$(TESTDATABLD)\DataDrivenCollationTest.res" "$(TESTDATABLD)\test.icu" "$(TESTDATABLD)\testtable32.res" "$(TESTDATABLD)\test1.cnv" "$(TESTDATABLD)\test3.cnv" "$(TESTDATABLD)\test4.cnv" "$(TESTDATABLD)\test4x.cnv" "$(TESTDATABLD)\ibm9027.cnv" "$(TESTDATABLD)\nfscsi.spp" "$(TESTDATABLD)\nfscss.spp" "$(TESTDATABLD)\nfscis.spp" "$(TESTDATABLD)\nfsmxs.spp" "$(TESTDATABLD)\nfsmxp.spp" @echo Building test data - @copy "$(TESTDATABLD)\$(TESTDT)te.res" "$(TESTDATAOUT)\$(TESTDT)nam.typ" - @copy "$(TESTDATA)\$(TESTDT)icu26_testtypes.res" "$(TESTDATABLD)" - @copy "$(TESTDATA)\$(TESTDT)icu26e_testtypes.res" "$(TESTDATABLD)" - @"$(ICUP)\bin\pkgdata" -f -v -m common -c -p"$(TESTPKG)" -d "$(TESTDATAOUT)" -T "$(TESTDATABLD)" -s "$(TESTDATABLD)" << -$(TESTDT)casing.res -$(TESTDT)conversion.res -$(TESTDT)mc.res -$(TESTDT)root.res -$(TESTDT)testtable32.res -$(TESTDT)te.res -$(TESTDT)te_IN.res -$(TESTDT)testtypes.res -$(TESTDT)icu26_testtypes.res -$(TESTDT)icu26e_testtypes.res -$(TESTDT)testempty.res -$(TESTDT)testaliases.res -$(TESTDT)structLocale.res -$(TESTDT)icuio.res -$(TESTDT)iscii.res -$(TESTDT)DataDrivenCollationTest.res -$(TESTDT)test.icu -$(TESTDT)test1.cnv -$(TESTDT)test3.cnv -$(TESTDT)test4.cnv -$(TESTDT)test4x.cnv -$(TESTDT)ibm9027.cnv -$(TESTDT)idna_rules.res -$(TESTDT)nfscsi.spp -$(TESTDT)nfscss.spp -$(TESTDT)nfscis.spp -$(TESTDT)nfsmxs.spp -$(TESTDT)nfsmxp.spp + @copy "$(TESTDATABLD)\te.res" "$(TESTDATAOUT)\$(TESTDT)\nam.typ" + @copy "$(TESTDATA)\icu26_testtypes.res" "$(TESTDATABLD)" + @copy "$(TESTDATA)\icu26e_testtypes.res" "$(TESTDATABLD)" + "$(ICUP)\bin\pkgdata" -f -v -m common -c -p"$(TESTPKG)" -d "$(TESTDATAOUT)" -T "$(TESTDATABLD)" -s "$(TESTDATABLD)" << +casing.res +conversion.res +mc.res +root.res +testtable32.res +sh.res +sh_YU.res +te.res +te_IN.res +te_IN_REVISED.res +testtypes.res +icu26_testtypes.res +icu26e_testtypes.res +testempty.res +testaliases.res +structLocale.res +icuio.res +iscii.res +DataDrivenCollationTest.res +test.icu +test1.cnv +test3.cnv +test4.cnv +test4x.cnv +ibm9027.cnv +idna_rules.res +nfscsi.spp +nfscss.spp +nfscis.spp +nfsmxs.spp +nfsmxp.spp << @@ -65,72 +68,72 @@ $(TESTDT)nfsmxp.spp # The -q option is there on purpose, so we don't see it normally. {$(TESTDATA)}.txt.res:: @echo Making Test Resource Bundle files $< - @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -t -p"$(TESTPKG)" -q -s"$(TESTDATA)" -d"$(TESTDATABLD)" $< + @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -q -s"$(TESTDATA)" -d"$(TESTDATABLD)" $< -"$(TESTDATABLD)\$(TESTDT)iscii.res": "$(TESTDATA)\iscii.bin" +"$(TESTDATABLD)\iscii.res": "$(TESTDATA)\iscii.bin" @echo Making Test Resource Bundle file with encoding ISCII,version=0 - @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -p"$(TESTPKG)" -q -s"$(TESTDATA)" -eISCII,version=0 -d"$(TESTDATABLD)" iscii.bin + @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -s"$(TESTDATA)" -eISCII,version=0 -d"$(TESTDATABLD)" iscii.bin -"$(TESTDATABLD)\$(TESTDT)idna_rules.res": "$(TESTDATA)\idna_rules.txt" +"$(TESTDATABLD)\idna_rules.res": "$(TESTDATA)\idna_rules.txt" @echo Making Test Resource Bundle file for IDNA reference implementation - @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -p"$(TESTPKG)" -q -s"$(TESTDATA)" -d"$(TESTDATABLD)" idna_rules.txt + @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -s"$(TESTDATA)" -d"$(TESTDATABLD)" idna_rules.txt -"$(TESTDATABLD)\$(TESTDT)test.icu" : {"$(ICUTOOLS)\gentest\$(CFG)"}gentest.exe +"$(TESTDATABLD)\test.icu" : {"$(ICUTOOLS)\gentest\$(CFG)"}gentest.exe "$(ICUTOOLS)\gentest\$(CFG)\gentest" -d"$(TESTDATABLD)" # testtable32 resource file "$(TESTDATABLD)\testtable32.txt" : {"$(ICUTOOLS)\gentest\$(CFG)"}gentest.exe "$(ICUTOOLS)\gentest\$(CFG)\gentest" -r -d"$(TESTDATABLD)" -"$(TESTDATABLD)\$(TESTDT)testtable32.res": "$(TESTDATABLD)\testtable32.txt" +"$(TESTDATABLD)\testtable32.res": "$(TESTDATABLD)\testtable32.txt" @echo Making Test Resource Bundle file for IDNA reference implementation - @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -p"$(TESTPKG)" -q -s"$(TESTDATABLD)" -d"$(TESTDATABLD)" testtable32.txt + @"$(ICUTOOLS)\genrb\$(CFG)\genrb" -s"$(TESTDATABLD)" -d"$(TESTDATABLD)" testtable32.txt # Targets for nfscsi.spp -"$(TESTDATABLD)\$(TESTDT)nfscsi.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_cs_prep_ci.txt" +"$(TESTDATABLD)\nfscsi.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_cs_prep_ci.txt" @echo Building $@ - @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfscsi -p "$(TESTPKG)" -u 3.2.0 nfs4_cs_prep_ci.txt + @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfscsi -u 3.2.0 nfs4_cs_prep_ci.txt # Targets for nfscss.spp -"$(TESTDATABLD)\$(TESTDT)nfscss.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_cs_prep_cs.txt" +"$(TESTDATABLD)\nfscss.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_cs_prep_cs.txt" @echo Building $@ - @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfscss -p "$(TESTPKG)" -u 3.2.0 nfs4_cs_prep_cs.txt + @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfscss -u 3.2.0 nfs4_cs_prep_cs.txt # Targets for nfscis.spp -"$(TESTDATABLD)\$(TESTDT)nfscis.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_cis_prep.txt" +"$(TESTDATABLD)\nfscis.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_cis_prep.txt" @echo Building $@ - @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfscis -p "$(TESTPKG)" -u 3.2.0 -k -n "$(ICUTOOLS)\..\data\unidata" nfs4_cis_prep.txt + @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfscis -u 3.2.0 -k -n "$(ICUTOOLS)\..\data\unidata" nfs4_cis_prep.txt # Targets for nfsmxs.spp -"$(TESTDATABLD)\$(TESTDT)nfsmxs.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_mixed_prep_s.txt" +"$(TESTDATABLD)\nfsmxs.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_mixed_prep_s.txt" @echo Building $@ - @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfsmxs -p "$(TESTPKG)" -u 3.2.0 -k -n "$(ICUTOOLS)\..\data\unidata" nfs4_mixed_prep_s.txt + @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfsmxs -u 3.2.0 -k -n "$(ICUTOOLS)\..\data\unidata" nfs4_mixed_prep_s.txt # Targets for nfsmxp.spp -"$(TESTDATABLD)\$(TESTDT)nfsmxp.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_mixed_prep_p.txt" +"$(TESTDATABLD)\nfsmxp.spp" : {"$(ICUTOOLS)\gensprep\$(CFG)"}gensprep.exe "$(TESTDATA)\nfs4_mixed_prep_p.txt" @echo Building $@ - @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfsmxp -p "$(TESTPKG)" -u 3.2.0 -k -n "$(ICUTOOLS)\..\data\unidata" nfs4_mixed_prep_p.txt + @"$(ICUTOOLS)\gensprep\$(CFG)\gensprep" -s "$(TESTDATA)" -d "$(TESTDATABLD)\\" -b nfsmxp -u 3.2.0 -k -n "$(ICUTOOLS)\..\data\unidata" nfs4_mixed_prep_p.txt # Targets for test converter data -"$(TESTDATABLD)\$(TESTDT)test1.cnv": "$(TESTDATA)\test1.ucm" +"$(TESTDATABLD)\test1.cnv": "$(TESTDATA)\test1.ucm" @echo Building $@ - @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" -p $(TESTPKG) $** + @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" $** -"$(TESTDATABLD)\$(TESTDT)test3.cnv": "$(TESTDATA)\test3.ucm" +"$(TESTDATABLD)\test3.cnv": "$(TESTDATA)\test3.ucm" @echo Building $@ - @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" -p $(TESTPKG) $** + @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" $** -"$(TESTDATABLD)\$(TESTDT)test4.cnv": "$(TESTDATA)\test4.ucm" +"$(TESTDATABLD)\test4.cnv": "$(TESTDATA)\test4.ucm" @echo Building $@ - @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" -p $(TESTPKG) $** + @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" $** -"$(TESTDATABLD)\$(TESTDT)test4x.cnv": "$(TESTDATA)\test4x.ucm" +"$(TESTDATABLD)\test4x.cnv": "$(TESTDATA)\test4x.ucm" @echo Building $@ - @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" -p $(TESTPKG) $** + @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" $** -"$(TESTDATABLD)\$(TESTDT)ibm9027.cnv": "$(TESTDATA)\ibm9027.ucm" +"$(TESTDATABLD)\ibm9027.cnv": "$(TESTDATA)\ibm9027.ucm" @echo Building $@ - @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" -p $(TESTPKG) $** + @"$(ICUTOOLS)\makeconv\$(CFG)\makeconv" -d"$(TESTDATABLD)" $** diff --git a/icuSources/test/testmap/Makefile.in b/icuSources/test/testmap/Makefile.in index cd7cc8b1..ad2038f9 100644 --- a/icuSources/test/testmap/Makefile.in +++ b/icuSources/test/testmap/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - test/testmap -## Copyright (c) 2003, International Business Machines Corporation and +## Copyright (c) 2003-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -26,13 +26,6 @@ CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n LIBS = $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) -# Data packaging options are set at configure time with --with-data-packaging. -CPPFLAGS += @DATA_PACKAGING_CPPFLAGS@ - -#ifeq ($(PKGDATA_MODE),dll) -#CPPFLAGS += -DUDATA_MAP_DLL -#LIBICUDATA= -L$(top_srcdir)/../data -licudata - OBJECTS = testmap.o DEPS = $(OBJECTS:.o=.d) diff --git a/icuSources/test/thaitest/space.txt b/icuSources/test/thaitest/space.txt index f8e1b697..f8919426 100644 --- a/icuSources/test/thaitest/space.txt +++ b/icuSources/test/thaitest/space.txt @@ -1,322 +1,322 @@ -บท ที่ ๑ พายุ ไซโคลน -โดโรธี อาศัย อยู่ ท่าม กลาง ทุ่ง ใหญ่ ใน แคนซัส กับ ลุง เฮนรี ชาว ไร่ และ ป้า เอ็ม ภรรยา ชาวไร่ - -บ้าน ของ พวก เขา หลัง เล็ก เพราะ ไม้ สร้าง บ้าน ต้อง ขน มา ด้วย เกวียน เป็น - -ระยะ ทาง หลาย ไมล์ - -บ้าน มี สี่ ฝา มี พื้น กับ หลังคา รวม ทำ เป็น ห้อง เดียว - -ใน ห้อง มี ทั้ง เตา หุง ต้ม ที่ สนิม ดู ขึ้น เลอะ - -มี ตู้ ใส่ ถ้วย - -ชาม - -โต๊ะ - -เก้าอี้ สาม หรือ สี่ ตัว - -แล้ว ก็ มี เตียง นอน - -ลุง เฮนรี กับ ป้า เอ็ม มี เตียง นอน ใหญ่ อยู่ ที่ มุม หนึ่ง - -ส่วน โดโรธี มี เตียง เล็ก อีก ที่ มุม หนึ่ง - -ไม่ มี ห้อง ใต้ เพดาน เลย ห้อง ใต้ถุน ก็ ไม่ มี - -เว้น แต่ มี โพรง เล็กๆ - -ที่ ขุด ไป ใต้ - -พื้น เรียก ว่า - -" โพรง ไซโคลน " - -เป็น ที่ ครอบครัว นี้ จะ มุด เข้า ไป เมื่อ เกิด ลม มหาภัย - -ซึ่ง กระโชก แรง จน บด ขยี้ สิ่ง ก่อ สร้าง ใด ๆ - -ที่ ขวาง ทาง มัน ได้ ตรง กลาง พื้น มี ฝา เปิด เข้า ไป - -จาก นั้น มี บันได ลง ไป ถึง โพรง มืด เล็ก ๆ - - -เมื่อ โดโรธี ยืน ที่ ปาก ประตู และ มอง ไป รอบ ๆ - -เธอ ไม่ เห็น อะไร นอก จาก ท้อง ทุ่ง กว้าง สี เทา หม่น ทั่ว ทุก ด้าน - -ไม่ มี แม้ ต้นไม้ สัก ต้น หรือ บ้าน สัก หลัง ที่ โผล่ พ้น ภูมิ ประเทศ อัน ราบ เรียบ - -แผ่ ไป ไกล จน จด ขอบ ฟ้า ทั่ว ทุก ทิศ - -ดวง ตะวัน เผา ผืน ดิน ที่ ไถ แล้ว จน กลาย เป็น แผ่น มหึมา สี ดำ - -มี รอย แตกระแหง อยู่ ตลอด - -แม้แต่ หญ้า ก็ ไม่ เขียว - -เพราะ ดวง ตะวัน เผา ยอด ใบ ยาว เสีย จน เป็น สี เทา หม่น มอง เห็น อยู่ ทั่ว ไป - -ครั้ง หนึ่ง เคย ทา สี บ้านเอาไว้ - -แต่ ก็ ถูก ดวง ตะวัน เผา เสีย จน สี พอง - -แล้ว ฝน ก็ ชะมัน หลุด ไป จน หมด - -และ ตอน นี้ บ้าน จึง ดู หม่นหมอง เป็น สี เทา เหมือน สิ่ง อื่น ๆ - -ด้วย - - -ตอน ที่ ป้า เอ็ม ย้าย มา อยู่ ที่ นี่ - -เธอ ยัง สาว - -เป็น ภรรยา ที่ งดงาม - -แล้ว แดด และ ลม ก็ ได้ เปลี่ยน เธอ ไป - -เอา ประกาย ไป จาก ดวงตา เธอ ปล่อย ไว้ แต่ ความ สุขุม อย่าง หม่นหมอง - -เอา สี แดง จาก แก้ม และ ริมฝีปาก เธอ ไป - -กลาย เป็น สี หม่น ๆ - -เหมือน กัน - -เธอ ผอม และ หลัง โค้ง - -และ เดี๋ยว นี้ ไม่ เคย ยิ้ม เลย - -เมื่อ โดโรธี ซึ่ง เป็น เด็ก กำพร้า มา อยู่ กับ เธอ ตอน แรก - -ป้า เอ็ม ตื่น เต้น กับ เสียง หัวเราะ ของ เด็ก น้อย มาก - -เธอ จะส่ง เสียง ร้อง แล้ว เอา มือ ทาบ อก ทุก ครั้ง ที่ เสียง อัน ร่าเริง ของ โดโรธี เข้า หู เธอ - -และ เธอ เฝ้า มอง เด็ก หญิง น้อย ๆ - -ด้วย ความ ประหลาด ใจ - -ด้วย ยัง หา อะไร มา เป็น เรื่อง หัวเราะ ได้ - - -ลุง เฮนรี ไม่ เคย หัวเราะ - -ลุง ทำงาน หนัก จาก เช้า ยัน ค่ำ - -และ ไม่ เคย รู้จัก ว่า ความ ร่าเริง คือ อะไร - -ลุง ดู หม่นหมอง ไป หมด ตั้ง แต่ เครา ยาว จน จด รองเท้า บูต อัน หยาบ - -แล้ว ลุง ก็ ดู เคร่งขรึม น่า เกรงขาม ไม่ ค่อย จะ พูด - - -มี โตโต้ ที่ ทำ ให้ โดโรธี หัวเราะ ได้ - -และ ช่วย เธอ ให้ พ้น จาก การ กลาย เป็น สี เทา หม่นเหมือน กับ สิ่ง รอบ ตัว อื่น ๆ - -โตโต้ สี ไม่ เทา หม่น - -แต่ มัน เป็น หมา สี ดำ ตัว น้อย ๆ - -ขน ยาว ปุย ราว กับ ไหม - -มี ตา ดำ เล็ก เป็น ประกาย รื่นเริง อยู่ สอง ข้าง จมูก เล็ก อัน น่า ขัน ของ มัน - -โตโต้ เล่น ทั้ง วัน - -และ โดโรธี ก็ เล่น กับ มัน - -และ รัก มัน เหลือ เกิน - - -อย่างไร ก็ ตาม - -วัน นี้ ทั้ง คู่ ไม่ ได้ เล่น - -ลุง เฮนรี นั่ง อยู่ ที่ บันได ประตู และ เฝ้า กังวล จ้อง ดู ท้อง ฟ้า สี เทา หม่น ผิด ปกติ - -โดโรธี ยืน ที่ ประตู - -กอด โตโต้ ไว้ ใน อ้อม แขน - -และ ก็ มอง ดู ท้อง ฟ้า อยู่ เหมือน กัน - -ป้า เอ็ม กำลัง ล้าง ชาม อยู่ - - - -จาก ด้าน เหนือ ไกล ออก ไป - -มี เสียง ลม คราง แผ่ว เบา ได้ยิน มา - -ลุง เฮนรี และ โดโรธี เห็น ต้น หญ้า สูง เอน เป็น คลื่น ก่อน ที่ พายุ จะ มา ถึง - -แล้ว ก็ มี เสียง หวีดหวิว ชัดเจน มา จาก บรรยากาศ ทาง ใต้ - -และ เมื่อ เหลือบ ตา ไป ทาง ด้าน นั้น ก็ เห็น คลื่น หญ้า มา ทาง ด้าน นั้น ด้วย - - - -ลุง เฮนรี ผุด ลุก ขึ้น ทัน ใด - - - -" ลม ไซโคลน มา - -เอ็ม " - -ลุง ร้อง บอก ภรรยา - -" ข้า จะ ไป ดู สัตว์ เลี้ยง หน่อย " - -แล้ว ลุง ก็ วิ่ง ไป ยัง เพิง ที่ วัว และ ม้า อาศัย อยู่ - - - -ป้า เอ็ม หยุด ทำงาน และ มา ที่ ประตู - -เพียง ชายตา มอง - -ป้า ก็ บอก ได้ ว่า อันตราย มา ถึง แล้ว - - - -" เร็ว โดโรธี ! " - -ป้า ตะโกน - - - -" วิ่ง ไป ห้อง ใต้ถุน " - - - -โตโต้ ผลุน กระโดด ลง จาก อ้อมแขน โดโรธี - -แล้ว เข้า ไป ซ่อน อยู่ ใต้ เตียง - -เด็ก หญิง น้อย เข้า ไป ดึง มัน ออก มา - -ป้า เอ็ม กระชาก ฝา ที่ พื้น ออก อย่าง อก สั่น ขวัญ หาย - -ปีน บันได ไม้ ลง ไป ใน โพรง เล็ก อัน มืด ทึบ - -โดโรธี จับ โตโต้ ได้ ใน ที่ สุด - -และ วิ่ง ตาม ป้า เธอ ไป - -เมื่อ เธอ มา ได้ ครึ่ง ห้อง ก็ มี เสียง หวีดหวือ - -ส่วน บ้าน ก็ สั่น อย่าง แรง จน เธอ หก คะมำ นั่ง จ้ำเบ้า อยู่ กับ พื้น - - - -แล้ว สิ่ง ประหลาด ก็ เกิด ขึ้น - - - -บ้าน หมุน ไป หมุน มา สอง สาม รอบ - -แล้ว ก็ ลอย ขึ้น สู่ อากาศ อย่าง ช้า ๆ - -โดโรธี รู้สึก ราว กับ ว่า เธอ ได้ ขึ้น ไป กับ ลูก บอลลูน - - - -พายุ เหนือ กับ พายุ ใต้ มา พบ กัน ตรง ที่ บ้าน พอ ดี - -และ ทำ ให้ ตรง นั้น เป็น จุด ศูนย์ กลาง ของ พายุ ไซโคลน - -ตาม ปกติ ตรง กลาง พายุ ไซโคลน อากาศ จะ นิ่ง - -แต่ ความ กดดัน อย่าง หนัก ของ ลม ทุก ด้าน รอบ บ้าน - -ทำ ให้ บ้าน ลอย สูง ขึ้น ๆ - -จน กระทั่ง ขึ้น ไป อยู่ สุด ยอด ของ พายุ ไซโคลน - -และ จาก ตรง นั้น ก็ ถูก หอบ ไป หลาย ไมล์ - -ง่าย ดาย ราว กับ หอบ ขน นก - - - -มืด มาก แล้ว - -ลม ยัง ส่ง เสียง หวีดหวือ น่า กลัว อยู่ รอบ ตัว เธอ - -แต่ โดโรธี เห็น ว่า เธอ สามารถ นั่ง ไป ได้ อย่า งง่าย ดาย นัก - -ครั้ง หนึ่ง หลัง จาก ที่ บ้าน สะดุด อย่าง แรง และ หมุน ไป รอบ ๆ - -สอง สาม ครั้ง ใน ตอน แรก - -เธอ ก็ รู้สึก ว่า ตัว เอง ถูก แกว่ง อย่าง แผ่ว เบา ราว ทารก ใน เปล - - - -โตโต้ ไม่ ชอบ ใจ เลย - -มัน วิ่ง ไป วิ่ง มา รอบ ห้อง - -ทาง โน้น ที ทาง นี้ ที ส่ง เสียง เห่า ดัง ก้อง - -แต่ โดโรธี นั่ง นิ่ง อยู่ บน พื้น เฝ้า คอย ดู ว่า จะ เกิด อะไร ขึ้น - - - -ครั้ง หนึ่ง โตโต้ เข้า ไป ใกล้ ฝา ที่ พื้น มาก ไป - -เลย พลัด ตกลง ไป - -ที แรก เด็ก หญิง คิด ว่า เธอ จะ สูญ เสีย มัน ไป เสีย แล้ว - -แต่ ชั่ว ครู่ เธอ ก็ เห็น หู ของ มัน โผล่ ขึ้น มา จาก ช่อง นั้น - -ทั้ง นี้ เพราะ แรง กด อย่าง หนัก ของ อากาศ ทำ ให้ โตโต้ ไม่ ตกลง ไป ข้าง ล่าง - -โดโรธี คลาน ไป ที่ ช่อง นั้น จับ หู โตโต้ ไว้ ได้ - -และ ลาก มัน มา ที่ ห้อง อีก - -หลัง จาก นั้น ก็ ปิด ฝา พื้น เพื่อ จะ ได้ ไม่ เกิด อุบัติเหตุ อีก - - - -ชั่วโมง แล้ว ชั่วโมง เล่า ผ่าน ไป - -โดโรธี ค่อย ๆ - -หาย กลัว - -แต่ เธอ รู้สึก เหงา เหลือ เกิน - -และ ลม ก็ ส่ง เสียง หวีดหวือ ดัง เสีย จน เธอ แทบ จะ หู หนวก - -ที แรก เธอ สงสัย ว่า คง จะ ถูก ฉีก กระชาก ออก เป็น ชิ้น เล็ก ชิ้น น้อย เมื่อ บ้าน เอน ล้ม ลง อีก ครั้ง - -แต่ หลาย ชั่วโมง ผ่าน ไป ก็ ไม่ มี อะไร เกิด ขึ้น เธอ เลย เลิก วิตก และ ตัดสิน ใจ คอย ดู อย่าง สงบ - -และ รอ ว่า อนาคต จะ เป็น อย่างไร - -ใน ที่ สุด เธอ คลาน จาก พื้น ห้อง ที่ โยก ไป มา ขึ้น ไป บน เตียง - -แล้ว ก็ นอน ลง - -โตโต้ ตาม ติด มา นอน ลง ใกล้ ๆ - -เธอ - - - -ไม่ ช้า โดโรธี ก็ ปิด ตา ลง หลับ ผล็อย ไป อย่าง สนิท ทั้ง ๆ - -ที่ บ้าน โยก ไป มา และ ลม ก็ คราง หวีดหวือ - - - - - +บท ที่๑พายุ ไซโคลน +โด โรธี อาศัย อยู่ ท่ามกลาง ทุ่งใหญ่ ใน แคนซัส กับ ลุง เฮ นรี ชาวไร่ และ ป้า เอ็ม ภรรยา ชาวไร่ + +บ้าน ของ พวก เขา หลัง เล็ก เพราะ ไม้ สร้าง บ้าน ต้อง ขน มา ด้วย เกวียน เป็น + +ระยะ ทาง หลาย ไมล์ + +บ้าน มี สี่ ฝา มี พื้น กับ หลังคา รวม ทำ เป็น ห้อง เดียว + +ใน ห้อง มี ทั้ง เตา หุง ต้ม ที่ สนิม ดู ขึ้น เลอะ + +มี ตู้ ใส่ ถ้วย + +ชาม + +โต๊ะ + +เก้าอี้ สาม หรือ สี่ ตัว + +แล้ว ก็ มี เตียง นอน + +ลุง เฮ นรี กับ ป้า เอ็ม มี เตียง นอน ใหญ่ อยู่ ที่ มุม หนึ่ง + +ส่วน โด โร ธีมี เตียง เล็ก อีก ที่ มุม หนึ่ง + +ไม่มี ห้อง ใต้ เพดาน เลย ห้อง ใต้ถุน ก็ ไม่มี + +เว้น แต่ มี โพ รง เล็กๆ + +ที่ ขุด ไป ใต้ + +พื้น เรียก ว่า + +"โพรง ไซโคลน" + +เป็น ที่ ครอบครัว นี้ จะ มุด เข้าไป เมื่อ เกิด ลม มหา ภัย + +ซึ่ง กระโชก แรง จน บดขยี้ สิ่ง ก่อ สร้าง ใดๆ + +ที่ ขวาง ทาง มัน ได้ ตรง กลาง พื้น มี ฝา เปิด เข้าไป + +จาก นั้น มี บันได ลง ไป ถึง โพรง มืด เล็กๆ + + +เมื่อ โด โรธี ยืน ที่ ปาก ประตู และ มอง ไป รอบๆ + +เธอ ไม่ เห็น อะไร นอกจาก ท้อง ทุ่ง กว้าง สี เทา หม่น ทั่ว ทุก ด้าน + +ไม่มี แม้ ต้นไม้ สัก ต้น หรือ บ้าน สัก หลัง ที่ โผล่ พ้น ภูมิประเทศ อัน ราบ เรียบ + +แผ่ ไป ไกล จน จด ขอบ ฟ้า ทั่ว ทุก ทิศ + +ดวงตะวัน เผา ผืน ดิน ที่ ไถ แล้ว จน กลาย เป็น แผ่น มหึมา สี ดำ + +มี รอย แตก ระแหง อยู่ ตลอด + +แม้แต่ หญ้า ก็ ไม่ เขียว + +เพราะ ดวงตะวัน เผา ยอด ใบ ยาว เสีย จน เป็น สี เทา หม่น มอง เห็น อยู่ ทั่วไป + +ครั้ง หนึ่ง เคย ทาสี บ้าน เอา ไว้ + +แต่ ก็ ถูก ดวงตะวัน เผา เสีย จน สี พอง + +แล้ว ฝน ก็ ชะ มัน หลุด ไป จน หมด + +และ ตอน นี้ บ้าน จึง ดู หม่นหมอง เป็น สี เทา เหมือน สิ่ง อื่นๆ + +ด้วย + + +ตอน ที่ ป้า เอ็ม ย้าย มา อยู่ ที่ นี่ + +เธอ ยัง สาว + +เป็น ภรรยา ที่ งดงาม + +แล้ว แดด และ ลม ก็ได้ เปลี่ยน เธอ ไป + +เอา ประกาย ไป จาก ดวงตา เธอ ปล่อย ไว้ แต่ ความ สุขุม อย่าง หม่นหมอง + +เอา สี แดง จาก แก้ม และ ริม ฝีปาก เธอ ไป + +กลาย เป็น สี หม่นๆ + +เหมือน กัน + +เธอ ผอม และ หลัง โค้ง + +และ เดี๋ยว นี้ ไม่ เคย ยิ้ม เลย + +เมื่อ โด โรธี ซึ่ง เป็น เด็ก กำพร้า มา อยู่ กับ เธอ ตอน แรก + +ป้า เอ็ม ตื่น เต้น กับ เสียง หัวเราะ ของ เด็ก น้อย มาก + +เธอ จะ ส่ง เสียง ร้อง แล้ว เอา มือ ทาบ อก ทุก ครั้ง ที่ เสียง อัน ร่าเริง ของ โด โรธี เข้าหู เธอ + +และ เธอ เฝ้า มอง เด็ก หญิง น้อยๆ + +ด้วย ความ ประหลาด ใจ + +ด้วย ยัง หา อะไร มา เป็น เรื่อง หัวเราะ ได้ + + +ลุง เฮ นรี ไม่ เคย หัวเราะ + +ลุง ทำงาน หนัก จาก เช้า ยัน ค่ำ + +และ ไม่ เคย รู้จัก ว่า ความ ร่าเริง คือ อะไร + +ลุง ดู หม่นหมอง ไป หมด ตั้งแต่ เครา ยาว จน จด รองเท้า บูต อัน หยาบ + +แล้ว ลุง ก็ ดู เคร่งขรึม น่า เกรง ขาม ไม่ ค่อย จะ พูด + + +มี โต โต้ ที่ ทำให้ โด โรธี หัวเราะ ได้ + +และ ช่วย เธอ ให้ พ้น จาก การก ลาย เป็น สี เทา หม่น เหมือน กับ สิ่ง รอบ ตัว อื่นๆ + +โต โต้ สี ไม่ เทา หม่น + +แต่ มัน เป็น หมา สี ดำ ตัว น้อยๆ + +ขน ยาว ปุย ราวกับ ไหม + +มี ตา ดำ เล็ก เป็น ประกาย รื่นเริง อยู่ สอง ข้าง จมูก เล็ก อัน น่า ขัน ของ มัน + +โต โต้ เล่น ทั้ง วัน + +และ โด โรธี ก็ เล่น กับ มัน + +และ รัก มัน เหลือ เกิน + + +อย่างไร ก็ตาม + +วัน นี้ ทั้ง คู่ ไม่ ได้ เล่น + +ลุง เฮ นรี นั่ง อยู่ ที่ บันได ประตู และ เฝ้า กังวล จ้อง ดู ท้องฟ้า สี เทา หม่น ผิด ปกติ + +โด โรธี ยืน ที่ ประตู + +กอด โต โต้ ไว้ ใน อ้อม แขน + +และ ก็ มอง ดู ท้องฟ้า อยู่ เหมือน กัน + +ป้า เอ็ มกำ ลัง ล้าง ชาม อยู่ + + + +จาก ด้าน เหนือ ไกล ออก ไป + +มี เสียง ลม คราง แผ่ว เบา ได้ยิน มา + +ลุง เฮ นรี และ โด โรธี เห็น ต้น หญ้า สูง เอน เป็น คลื่น ก่อน ที่ พายุ จะ มา ถึง + +แล้ว ก็ มี เสียง หวีด หวิว ชัดเจน มา จาก บรรยากาศ ทาง ใต้ + +และ เมื่อ เหลือบ ตา ไป ทาง ด้าน นั้น ก็ เห็น คลื่น หญ้า มา ทาง ด้าน นั้น ด้วย + + + +ลุง เฮ นรี ผุด ลุก ขึ้น ทันใด + + + +"ลม ไซโคลน มา + +เอ็ม" + +ลุง ร้อง บอก ภรรยา + +"ข้า จะ ไป ดู สัตว์ เลี้ยง หน่อย" + +แล้ว ลุง ก็ วิ่ง ไป ยัง เพิง ที่ วัว และ ม้า อาศัย อยู่ + + + +ป้า เอ็ม หยุด ทำงาน และ มา ที่ ประตู + +เพียง ชายตา มอง + +ป้า ก็ บอก ได้ ว่า อันตราย มา ถึง แล้ว + + + +"เร็ว โด โรธี!" + +ป้า ตะโกน + + + +"วิ่ง ไป ห้อง ใต้ถุน" + + + +โต โต้ ผลุน กระโดด ลง จาก อ้อม แขน โด โรธี + +แล้ว เข้าไป ซ่อน อยู่ ใต้ เตียง + +เด็ก หญิง น้อย เข้าไป ดึง มัน ออก มา + +ป้า เอ็ มก ระ ชาก ฝา ที่ พื้น ออก อย่าง อก สั่น ขวัญ หาย + +ปีน บันได ไม้ ลง ไป ใน โพรง เล็ก อัน มืด ทึบ + +โด โรธี จับ โต โต้ ได้ ใน ที่สุด + +และ วิ่ง ตาม ป้า เธอ ไป + +เมื่อ เธอ มา ได้ ครึ่ง ห้อง ก็ มี เสียง หวีด หวือ + +ส่วน บ้าน ก็ สั่น อย่าง แรง จน เธอ หก คะมำ นั่ง จ้ำเบ้า อยู่ กับ พื้น + + + +แล้ว สิ่ง ประหลาด ก็ เกิด ขึ้น + + + +บ้าน หมุน ไป หมุน มาส อง สาม รอบ + +แล้ว ก็ ลอย ขึ้น สู่ อากาศ อย่าง ช้าๆ + +โด โร ธีรู้ สึก ราวกับ ว่า เธอ ได้ ขึ้น ไป กับ ลูก บอลลูน + + + +พายุ เหนือ กับ พายุ ใต้ มา พบ กัน ตรง ที่ บ้าน พอดี + +และ ทำให้ ตรง นั้น เป็น จุดศูนย์กลาง ของ พายุ ไซโคลน + +ตาม ปกติ ตรง กลาง พายุ ไซโคลน อากาศ จะ นิ่ง + +แต่ ความ กดดัน อย่าง หนัก ของ ลม ทุก ด้าน รอบ บ้าน + +ทำให้ บ้าน ลอย สูง ขึ้นๆ + +จน กระทั่ง ขึ้น ไป อยู่ สุด ยอด ของ พายุ ไซโคลน + +และ จาก ตรง นั้น ก็ ถูก หอบ ไป หลาย ไมล์ + +ง่ายดาย ราวกับ หอบ ขน นก + + + +มืด มาก แล้ว + +ลม ยัง ส่ง เสียง หวีด หวือ น่า กลัว อยู่ รอบ ตัว เธอ + +แต่ โด โรธี เห็น ว่า เธอ สามารถ นั่ง ไป ได้ อย่าง ง่ายดาย นัก + +ครั้ง หนึ่ง หลัง จาก ที่ บ้าน สะดุด อย่าง แรง และ หมุน ไป รอบๆ + +สอง สาม ครั้ง ใน ตอน แรก + +เธอ ก็ รู้สึก ว่า ตัว เอง ถูก แกว่ง อย่าง แผ่ว เบา ราว ทารก ใน เปล + + + +โต โต้ ไม่ ชอบใจ เลย + +มัน วิ่ง ไป วิ่ง มาร อบ ห้อง + +ทาง โน้น ที ทาง นี้ ที ส่ง เสียง เห่า ดัง ก้อง + +แต่ โด โรธี นั่ง นิ่ง อยู่ บน พื้น เฝ้า คอย ดู ว่า จะ เกิด อะไร ขึ้น + + + +ครั้ง หนึ่ง โต โต้ เข้าไป ใกล้ ฝา ที่ พื้น มาก ไป + +เลย พลัด ตกลง ไป + +ที แรก เด็ก หญิง คิด ว่า เธอ จะ สูญ เสีย มัน ไป เสีย แล้ว + +แต่ ชั่ว ครู่ เธอ ก็ เห็น หู ของ มัน โผล่ ขึ้น มา จาก ช่อง นั้น + +ทั้งนี้ เพราะ แรง กด อย่าง หนัก ของ อากาศ ทำให้ โต โต้ ไม่ ตกลง ไป ข้าง ล่าง + +โด โรธี คลาน ไป ที่ ช่อง นั้น จับ หู โต โต้ ไว้ ได้ + +และ ลาก มัน มา ที่ ห้อง อีก + +หลัง จาก นั้น ก็ ปิด ฝา พื้น เพื่อ จะ ได้ ไม่ เกิด อุบัติเหตุ อีก + + + +ชั่วโมง แล้ว ชั่วโมง เล่า ผ่าน ไป + +โด โรธี ค่อยๆ + +หาย กลัว + +แต่ เธอ รู้สึก เหงา เหลือ เกิน + +และ ลม ก็ ส่ง เสียง หวีด หวือ ดัง เสีย จน เธอ แทบ จะ หู หนวก + +ที แรก เธอ สงสัย ว่า คงจะ ถูก ฉีก กระชาก ออก เป็น ชิ้น เล็ก ชิ้น น้อย เมื่อ บ้าน เอน ล้ม ลง อีก ครั้ง + +แต่ หลาย ชั่วโมง ผ่าน ไป ก็ ไม่มี อะไร เกิด ขึ้น เธอ เลย เลิก วิตก และ ตัดสิน ใจ คอย ดู อย่าง สงบ + +และ รอ ว่า อนาคต จะ เป็น อย่างไร + +ใน ที่สุด เธอ คลาน จาก พื้น ห้อง ที่ โยก ไป มา ขึ้น ไป บน เตียง + +แล้ว ก็ นอน ลง + +โต โต้ ตาม ติด มา นอน ลง ใกล้ๆ + +เธอ + + + +ไม่ ช้า โด โรธี ก็ ปิด ตา ลง หลับ ผล็อย ไป อย่าง สนิท ทั้งๆ + +ที่ บ้าน โยก ไป มา และ ลม ก็ คราง หวีด หวือ + + + + + diff --git a/icuSources/test/thaitest/thaitest.cpp b/icuSources/test/thaitest/thaitest.cpp index 910d9db2..657fab43 100644 --- a/icuSources/test/thaitest/thaitest.cpp +++ b/icuSources/test/thaitest/thaitest.cpp @@ -1,7 +1,7 @@ /* ****************************************************************************** - * Copyright (C) 1998-2003, International Business Machines Corporation and * - * others. All Rights Reserved. * + * Copyright (C) 1998-2003, 2006, International Business Machines Corporation * + * and others. All Rights Reserved. * ****************************************************************************** */ @@ -15,6 +15,8 @@ #include "unicode/brkiter.h" #include "unicode/locid.h" #include "unicode/unistr.h" +#include "unicode/uniset.h" +#include "unicode/ustring.h" /* * This program takes a Unicode text file containing Thai text with @@ -68,6 +70,9 @@ private: // current space count int32_t fSpaceCount; + + // UnicodeSet of SA characters + UnicodeSet fComplexContext; // true when fBreakIter has returned DONE UBool fDone; @@ -386,6 +391,46 @@ const UChar *ThaiWordbreakTest::crunchSpaces(const UChar *spaces, int32_t count, return noSpaces; } +/* + * Generate a text file with spaces in it from a file without. + */ +int generateFile(const UChar *chars, int32_t length) { + Locale root(""); + UCharCharacterIterator *noSpaceIter = new UCharCharacterIterator(chars, length); + UErrorCode status = U_ZERO_ERROR; + + UnicodeSet complexContext(UNICODE_STRING_SIMPLE("[:LineBreak=SA:]"), status); + BreakIterator *breakIter = BreakIterator::createWordInstance(root, status); + breakIter->adoptText(noSpaceIter); + char outbuf[1024]; + int32_t strlength; + UChar bom = 0xFEFF; + + printf("%s", u_strToUTF8(outbuf, sizeof(outbuf), &strlength, &bom, 1, &status)); + int32_t prevbreak = 0; + while (U_SUCCESS(status)) { + int32_t nextbreak = breakIter->next(); + if (nextbreak == BreakIterator::DONE) { + break; + } + printf("%s", u_strToUTF8(outbuf, sizeof(outbuf), &strlength, &chars[prevbreak], + nextbreak-prevbreak, &status)); + if (nextbreak > 0 && complexContext.contains(chars[nextbreak-1]) + && complexContext.contains(chars[nextbreak])) { + printf(" "); + } + prevbreak = nextbreak; + } + + if (U_FAILURE(status)) { + fprintf(stderr, "generate failed: %s\n", u_errorName(status)); + return status; + } + else { + return 0; + } +} + /* * The main routine. Read the command line arguments, read the text file, * remove the spaces, do the comparison and report the final results @@ -395,6 +440,12 @@ int main(int argc, char **argv) char *fileName = "space.txt"; int arg = 1; UBool verbose = FALSE; + UBool generate = FALSE; + + if (argc >= 2 && strcmp(argv[1], "-generate") == 0) { + generate = TRUE; + arg += 1; + } if (argc >= 2 && strcmp(argv[1], "-verbose") == 0) { verbose = TRUE; @@ -418,6 +469,10 @@ int main(int argc, char **argv) if (spaces == 0) { return 1; } + + if (generate) { + return generateFile(spaces, spaceCount); + } noSpaces = ThaiWordbreakTest::crunchSpaces(spaces, spaceCount, nonSpaceCount); @@ -443,9 +498,10 @@ SpaceBreakIterator::SpaceBreakIterator(const UChar *text, int32_t count) { UCharCharacterIterator *iter = new UCharCharacterIterator(text, count); UErrorCode status = U_ZERO_ERROR; - Locale us("us"); + fComplexContext.applyPattern(UNICODE_STRING_SIMPLE("[:LineBreak=SA:]"), status); + Locale root(""); - fBreakIter = BreakIterator::createWordInstance(us, status); + fBreakIter = BreakIterator::createWordInstance(root, status); fBreakIter->adoptText(iter); } @@ -471,12 +527,17 @@ int32_t SpaceBreakIterator::next() return BreakIterator::DONE; } - int32_t nextBreak = fBreakIter->next(); - - if (nextBreak == BreakIterator::DONE) { - fDone = TRUE; - return BreakIterator::DONE; + int32_t nextBreak; + do { + nextBreak = fBreakIter->next(); + + if (nextBreak == BreakIterator::DONE) { + fDone = TRUE; + return BreakIterator::DONE; + } } + while(nextBreak > 0 && fComplexContext.contains(fText[nextBreak-1]) + && fComplexContext.contains(fText[nextBreak])); int32_t result = nextBreak - fSpaceCount; diff --git a/icuSources/test/threadtest/threadtest.cpp b/icuSources/test/threadtest/threadtest.cpp index 33a89b8c..7891a888 100644 --- a/icuSources/test/threadtest/threadtest.cpp +++ b/icuSources/test/threadtest/threadtest.cpp @@ -1,6 +1,6 @@ // //******************************************************************** -// Copyright (C) 2002-2003, International Business Machines +// Copyright (C) 2002-2005, International Business Machines // Corporation and others. All Rights Reserved. //******************************************************************** // @@ -32,7 +32,7 @@ extern AbstractThreadTest *createConvertTest(); // Windows specific code for starting threads // //------------------------------------------------------------------------------ -#ifdef WIN32 +#ifdef U_WINDOWS #include "Windows.h" #include "process.h" diff --git a/icuSources/test/unalignedtest/readme b/icuSources/test/unalignedtest/readme deleted file mode 100644 index acf10a1c..00000000 --- a/icuSources/test/unalignedtest/readme +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2002-2003, International Business Machines Corporation and others. All Rights Reserved. -Unalignedtest -============= - -This is a test to find if ICU is 64 bit clean. This test runs cintltst and intltest through gdb and produces SIGBUS fault -whenever the kernel encounters a unaligned trap. - -Build and Usage -================== -To build this test: - -i) Build and test ICU - -ii) cd to <icu>/source and run the following command to build the Makefile -CONFIG_FILES=./test/unalignedtest/Makefile CONFIG_HEADERS= ./config.status - -iii) cd to <icu>/source/test/unalignedtest and run 'make' to build the executable - -iv) For testing cintltst run 'make check-cintltst' - -v) For testing intltest run 'make check-intltest' - -vi) To find out if any of the tools are performing unaligned traps: - a) cd to <icu>/source/data - b) run 'make clean' - c) run 'env LEAK_CHECKER="<icu>/source/test/unalignedtest/unalignedtest -b" make' - diff --git a/icuSources/test/unalignedtest/unaligned.c b/icuSources/test/unalignedtest/unaligned.c deleted file mode 100644 index 69137a30..00000000 --- a/icuSources/test/unalignedtest/unaligned.c +++ /dev/null @@ -1,304 +0,0 @@ -/* - - This program is a wrapper to assist in debugging analigned traps on the Alpha - - architectures. - - - - COPYRIGHT AND PERMISSION NOTICE - - - - Copyright (c) 2002 Sean Hunter - - - - 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, and/or sell copies of the Software, and to permit persons - - to whom the Software is furnished to do so, provided that the above - - copyright notice(s) and this permission notice appear in all copies of - - the Software and that both the above copyright notice(s) and this - - permission notice appear in supporting documentation. - - - - 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 - - OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - - HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL - - INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING - - FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - - Except as contained in this notice, the name of a copyright holder - - shall not be used in advertising or otherwise to promote the sale, use - - or other dealings in this Software without prior written authorization - - of the copyright holder. - - - - -------------------------------------------------------------------------------- - - All trademarks and registered trademarks mentioned herein are the property - - of their respective owners. - - - -*/ - -#include <errno.h> - -#include <stdio.h> - - - -#include <asm/sysinfo.h> - -#include <asm/unistd.h> - - - -#define TMP_PATH_MAX 1024 - - - - - -static int - -setsysinfo(unsigned long op, void *buffer, unsigned long size, - - int *start, void *arg, unsigned long flag) - -{ - - syscall(__NR_osf_setsysinfo, op, buffer, size, start, arg, flag); - -} - - - - - -void - -trap_unaligned(void) - -{ - - unsigned int buf[2]; - - buf[0] = SSIN_UACPROC; - - buf[1] = UAC_SIGBUS | UAC_NOPRINT; - - setsysinfo(SSI_NVPAIRS, buf, 1, 0, 0, 0); - -} - - - - - -static void - -usage(void) - -{ - - fprintf(stderr, - - "usage: unaligned [-b] <command-path> [command-args...]\n\n" - - " This program is designed to assist debugging of\n" - - " unaligned traps by running the program in gdb\n" - - " and causing it to get SIGBUS when it encounters\n" - - " an unaligned trap.\n\n" - - " It is free software written by Sean Hunter <sean@uncarved.co.uk>\n" - - " based on code by Richard Henderson and Andrew Morgan.\n\n" - - ); - - - - exit(1); - -} - - - - - -int - -main(int argc, char **argv) - -{ - - const char my_debugger[] = "/usr/bin/gdb"; - - - - char *temp_str; - - char *curr; - - int size = 0; - - int curr_arg; - - int isBatchMode = 0; - - - - /* check that we have at least 1 argument */ - - if (argc < 2) { - - usage(); - - } - - if( strcmp("-b" , argv[1]) == 0 ){ - - isBatchMode = 1; - - curr_arg = 2; - - }else{ - - curr_arg = 1; - - } - - - - trap_unaligned(); - - - - if (argc > 2) { - - /* We're going to use bash process redirection to create a "file" for gdb to read - - * containing the arguments we need */ - - size = 2048; - - for(; curr_arg < argc; curr_arg++) { - - size += strlen(argv[curr_arg]); - - } - - temp_str = (char *) malloc(sizeof(char) * size); - - if (!temp_str) { - - fprintf(stderr, "Unable to malloc memory for string use: %s\n", strerror(errno)); - - exit(255); - - } - - if(isBatchMode==1){ - - sprintf(temp_str, "%s -batch %s -x <( echo file %s; echo set args", my_debugger, argv[2], argv[2]); - - }else{ - - sprintf(temp_str, "%s %s -x <( echo file %s; echo set args", my_debugger, argv[1], argv[1]); - - } - - curr = temp_str + strlen(temp_str); - - for(curr_arg = 2; curr_arg < argc; curr_arg++) { - - sprintf(curr, " %s", argv[curr_arg]); - - curr = temp_str + strlen(temp_str); - - } - -#ifndef NOAUTORUN - - curr = temp_str + strlen(temp_str); - - sprintf(curr, "; echo run"); - -#endif - - curr = temp_str + strlen(temp_str); - - sprintf(curr, ")"); - - - - execlp("/bin/bash", "/bin/bash", "-c", temp_str, NULL); - - - - } - - else { - - execlp(my_debugger, my_debugger, argv[1], NULL); - - } - - - - /* if we fall through to here, our exec failed -- announce the fact */ - - fprintf(stderr, "Unable to execute command: %s\n", strerror(errno)); - - - - usage(); - - - -} - - - -/* use gcc unaligned.c -o unaliged to compile. Add -DNOAUTORUN if you - -don't want gdb to automatically run the program */ - - - diff --git a/icuSources/test/usetperf/timer.h b/icuSources/test/usetperf/timer.h deleted file mode 100644 index 4aa5824f..00000000 --- a/icuSources/test/usetperf/timer.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -********************************************************************** -* Copyright (c) 2002-2004, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* 2002-09-20 aliu Created. -*/ -#ifndef __PERFTIMER_H__ -#define __PERFTIMER_H__ - -#include "unicode/utypes.h" - -// Derived from Ram's perftime.h - -//---------------------------------------------------------------------- -// Win32 - -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) - -#include <windows.h> - -class Timer { - LARGE_INTEGER tstart, tend; -public: - Timer() {} - inline void start() { - QueryPerformanceCounter(&tstart); - } - inline double stop() { - QueryPerformanceCounter(&tend); - LARGE_INTEGER freq; - int result = QueryPerformanceFrequency(&freq); - return ((double)(tend.QuadPart - tstart.QuadPart))/((double)freq.QuadPart); - } -}; - -//---------------------------------------------------------------------- -// UNIX - -#else - -#include <sys/time.h> - -class Timer { - struct timeval tstart, tend; - struct timezone tz; -public: - Timer() {} - inline void start() { - gettimeofday(&tstart, &tz); - } - inline double stop() { - gettimeofday(&tend, &tz); - double t1, t2; - t1 = (double)tstart.tv_sec + (double)tstart.tv_usec*1e-6; - t2 = (double)tend.tv_sec + (double)tend.tv_usec*1e-6; - return t2-t1; - } -}; - -#endif -#endif diff --git a/icuSources/test/usetperf/usetperf.cpp b/icuSources/test/usetperf/usetperf.cpp deleted file mode 100644 index cdff2adb..00000000 --- a/icuSources/test/usetperf/usetperf.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* -********************************************************************** -* Copyright (c) 2002-2004, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* 2002-09-20 aliu Created. -*/ - -#include <stdio.h> - -#include "unicode/utypes.h" -#include "unicode/uniset.h" -#include "unicode/uchar.h" -#include "unicode/usetiter.h" -#include "bitset.h" -#include "timer.h" - -#define LENGTH(a) (sizeof(a)/sizeof(a[0])) - -int main(int argc, const char *argv[]) { - - Timer timer; - BitSet bs; - UnicodeSet us; - int32_t i, j, n, temp; - UChar32 cp; - double t; - - int32_t PROPS[] = { - // category iterations for add, contains, iterator - U_TITLECASE_LETTER, 100, 100, 20000000, - U_UNASSIGNED, 30, 100, 20000000, - }; - - for (j=0; j<LENGTH(PROPS); j+=4) { - UCharCategory prop = (UCharCategory) PROPS[j]; - - printf("\nGetting characters for character category %d\n", prop); - bs.clearAll(); - int32_t total = 0; - for (cp=0; cp<0x110000; ++cp) { - if (u_charType(cp) == prop) { - bs.set((int32_t) cp); - ++total; - } - } - printf("Total characters: %d\n", total); - - // add() - n = PROPS[j+1]; - printf("Testing add() x %d...", n); - timer.start(); - for (i=0; i<n; ++i) { - us.clear(); - for (cp=0; cp<0x110000; ++cp) { - if (bs.get((int32_t) cp)) { - us.add(cp); - } - } - } - t = timer.stop(); - printf("result: %f sec => %f ms/loop\n", t, t*1e3/n); - - // contains() - n = PROPS[j+2]; - printf("Testing contains() x %d...", n); - temp = 0; - timer.start(); - for (i=0; i<n; ++i) { - us.clear(); - for (cp=0; cp<0x110000; ++cp) { - if (us.contains(cp)) { - temp += cp; - } - } - } - t = timer.stop(); - printf("result: %f sec => %f ms/loop\n", t, t*1e3/n); - - // iterator - n = PROPS[j+3]; - printf("Testing iterator x %d...", n); - temp = 0; - timer.start(); - for (i=0; i<n; ++i) { - UnicodeSetIterator uit(us); - while (uit.next()) { - temp += uit.getCodepoint(); - } - } - t = timer.stop(); - printf("result: %f sec => %f ns/loop\n", t, t*1e9/n); - } - - char* PAT[] = { - "['A-Za-z\\u00C0-\\u00C5\\u00C7-\\u00CF\\u00D1-\\u00D6\\u00D9-\\u00DD\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6\\u00F9-\\u00FD\\u00FF-\\u010F\\u0112-\\u0125\\u0128-\\u0130\\u0134-\\u0137\\u0139-\\u013E\\u0143-\\u0148\\u014C-\\u0151\\u0154-\\u0165\\u0168-\\u017E\\u01A0-\\u01A1\\u01AF-\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E1\\u01E6-\\u01ED\\u01F0\\u01F4-\\u01F5\\u01F8-\\u01FB\\u0200-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u1E00-\\u1E99\\u1EA0-\\u1EF9\\u212A-\\u212B]", - - "['.0-9A-Za-z~\\u00C0-\\u00C5\\u00C7-\\u00CF\\u00D1-\\u00D6\\u00D9-\\u00DD\\u00E0-\\u00E5\\u00E7-\\u00EF\\u00F1-\\u00F6\\u00F9-\\u00FD\\u00FF-\\u010F\\u0112-\\u0125\\u0128-\\u0130\\u0134-\\u0137\\u0139-\\u013E\\u0143-\\u0148\\u014C-\\u0151\\u0154-\\u0165\\u0168-\\u017E\\u01A0-\\u01A1\\u01AF-\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E6-\\u01ED\\u01F0\\u01F4-\\u01F5\\u01F8-\\u021B\\u021E-\\u021F\\u0226-\\u0233\\u0301\\u0303-\\u0304\\u0306-\\u0307\\u0310\\u0314-\\u0315\\u0323\\u0325\\u0331\\u0341\\u0344\\u0385-\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u0390\\u03AC-\\u03B0\\u03CC-\\u03CE\\u03D3\\u0403\\u040C\\u040E\\u0419\\u0439\\u0453\\u045C\\u045E\\u04C1-\\u04C2\\u04D0-\\u04D1\\u04D6-\\u04D7\\u04E2-\\u04E3\\u04EE-\\u04EF\\u1E00-\\u1E99\\u1EA0-\\u1EF9\\u1F01\\u1F03-\\u1F05\\u1F07\\u1F09\\u1F0B-\\u1F0D\\u1F0F\\u1F11\\u1F13-\\u1F15\\u1F19\\u1F1B-\\u1F1D\\u1F21\\u1F23-\\u1F25\\u1F27\\u1F29\\u1F2B-\\u1F2D\\u1F2F\\u1F31\\u1F33-\\u1F35\\u1F37\\u1F39\\u1F3B-\\u1F3D\\u1F3F\\u1F41\\u1F43-\\u1F45\\u1F49\\u1F4B-\\u1F4D\\u1F51\\u1F53-\\u1F55\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F61\\u1F63-\\u1F65\\u1F67\\u1F69\\u1F6B-\\u1F6D\\u1F6F\\u1F71\\u1F73\\u1F75\\u1F77\\u1F79\\u1F7B\\u1F7D\\u1F81\\u1F83-\\u1F85\\u1F87\\u1F89\\u1F8B-\\u1F8D\\u1F8F\\u1F91\\u1F93-\\u1F95\\u1F97\\u1F99\\u1F9B-\\u1F9D\\u1F9F\\u1FA1\\u1FA3-\\u1FA5\\u1FA7\\u1FA9\\u1FAB-\\u1FAD\\u1FAF-\\u1FB1\\u1FB4\\u1FB8-\\u1FB9\\u1FBB\\u1FC4\\u1FC9\\u1FCB\\u1FCE\\u1FD0-\\u1FD1\\u1FD3\\u1FD8-\\u1FD9\\u1FDB\\u1FDE\\u1FE0-\\u1FE1\\u1FE3\\u1FE5\\u1FE8-\\u1FE9\\u1FEB-\\u1FEC\\u1FEE\\u1FF4\\u1FF9\\u1FFB\\u212A-\\u212B\\uE04D\\uE064]", - - "[\\u0901-\\u0903\\u0905-\\u0939\\u093C-\\u094D\\u0950-\\u0954\\u0958-\\u096F]", - }; - - UErrorCode ec = U_ZERO_ERROR; - - n = 2000; - - for (j=0; j<LENGTH(PAT); ++j) { - - printf("\nApplying pattern %s x %d...", PAT[j], n); - UnicodeSet set; - UnicodeString pat(PAT[j], ""); - - timer.start(); - for (i=0; i<n; i++) { - set.applyPattern(pat, ec); - } - t = timer.stop(); - printf("result: %f sec => %f us/loop\n", t, t*1e6/n); - } - - return 0; -} diff --git a/icuSources/test/usetperf/usetperf.dsp b/icuSources/test/usetperf/usetperf.dsp deleted file mode 100644 index 3d012285..00000000 --- a/icuSources/test/usetperf/usetperf.dsp +++ /dev/null @@ -1,164 +0,0 @@ -# Microsoft Developer Studio Project File - Name="usetperf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=usetperf - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "usetperf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "usetperf.mak" CFG="usetperf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "usetperf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "usetperf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "usetperf - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "usetperf - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "usetperf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib gdi32.lib winmm.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "usetperf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "usetperf - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /Op /I "..\..\..\include" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib gdi32.lib winmm.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "usetperf - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /Op /I "..\..\..\include" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "usetperf - Win32 Release" -# Name "usetperf - Win32 Debug" -# Name "usetperf - Win64 Release" -# Name "usetperf - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\bitset.cpp -# ADD CPP /I "..\..\common" -# End Source File -# Begin Source File - -SOURCE=.\usetperf.cpp -# ADD CPP /I "..\..\common" -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/test/utfperf/utfperf.c b/icuSources/test/utfperf/utfperf.c deleted file mode 100644 index dfe7e3f8..00000000 --- a/icuSources/test/utfperf/utfperf.c +++ /dev/null @@ -1,450 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 2002, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* file name: utfperf.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2002apr17 -* created by: Markus W. Scherer -* -* Performance test program for Unicode converters -* (converters that support all Unicode code points). -* Takes a UTF-8 file as input. -*/ - -#include <stdio.h> -#include <string.h> - -#include <fcntl.h> /* for _O_BINARY */ -#include <io.h> /* for _setmode() */ - -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) -# include <windows.h> -#else -# include <sys/time.h> - static unsigned long - timeGetTime() { - struct timeval t; - - gettimeofday(&t, 0); - return t.tv_sec*1000+t.tv_usec/1000; - }; -#endif - -#include "unicode/utypes.h" -#include "unicode/ucnv.h" -#include "unicode/ustring.h" - -/* definitions and text buffers */ - -#define INPUT_CAPACITY (1024*1024) -#define INTERMEDIATE_CAPACITY 4096 -#define INTERMEDIATE_SMALL_CAPACITY 20 -#define OUTPUT_CAPACITY INPUT_CAPACITY - -#define TARGET_MEASURE_TIME_MS 2000 - -#define PERCENT(a, b) (int)(((a)*200+1)/(2*(b))) - -#define ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0])) - -static UChar input[INPUT_CAPACITY], output[OUTPUT_CAPACITY]; -static char intermediate[INTERMEDIATE_CAPACITY]; - -static int32_t inputLength, encodedLength, outputLength, countInputCodePoints; - -static int32_t utf8Length=0; -static double utf8Time=0.; - -static const char *const -utfNames[]={ - "UTF-8", /* UTF-8 should always be first to serve as percentage reference */ - "SCSU", "BOCU-1" /*, "CESU-8" *//*, "UTF-16BE", "UTF-16LE"*//*, "GB18030"*/ -}; - -/* functions */ - -typedef void -RoundtripFn(UConverter *cnv, int32_t intermediateCapacity, UErrorCode *pErrorCode); - -static void -roundtrip(UConverter *cnv, int32_t intermediateCapacity, UErrorCode *pErrorCode) { - const UChar *pIn, *pInLimit; - UChar *pOut, *pOutLimit; - char *pInter, *pInterLimit, *p; - UBool flush; - - ucnv_reset(cnv); - - pIn=input; - pInLimit=input+inputLength; - - pOut=output; - pOutLimit=output+OUTPUT_CAPACITY; - - pInterLimit=intermediate+intermediateCapacity; - - encodedLength=outputLength=0; - flush=FALSE; - - while(pIn<pInLimit || !flush) { - /* convert a block of [pIn..pInLimit[ to the encoding in intermediate[] */ - pInter=intermediate; - flush=(UBool)(pIn==pInLimit); - ucnv_fromUnicode(cnv, - &pInter, pInterLimit, - &pIn, pInLimit, - NULL, flush, - pErrorCode); - encodedLength+=(int32_t)(pInter-intermediate); - - if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR) { - /* in case flush was TRUE make sure that we convert once more to really flush */ - flush=FALSE; - *pErrorCode=U_ZERO_ERROR; - } else if(U_FAILURE(*pErrorCode)) { - return; - } - - /* convert the block [intermediate..pInter[ back to UTF-16 */ - p=intermediate; - ucnv_toUnicode(cnv, - &pOut, pOutLimit, - &p, pInter, - NULL, flush, - pErrorCode); - if(U_FAILURE(*pErrorCode)) { - return; - } - /* intermediate must have been consumed (p==pInter) because of the converter semantics */ - } - - outputLength=pOut-output; - if(inputLength!=outputLength) { - fprintf(stderr, "error: roundtrip failed, inputLength %d!=outputLength %d\n", inputLength, outputLength); - *pErrorCode=U_INTERNAL_PROGRAM_ERROR; - } -} - -static void -noop(UConverter *cnv, int32_t intermediateCapacity, UErrorCode *pErrorCode) { - /* do nothing */ -} - -static unsigned long -measureRoundtrips(RoundtripFn *fn, UConverter *cnv, const char *encName, int32_t intermediateCapacity, int32_t n) { - unsigned long _time; - UErrorCode errorCode; - - _time=timeGetTime(); - errorCode=U_ZERO_ERROR; - do { - fn(cnv, intermediateCapacity, &errorCode); - } while(U_SUCCESS(errorCode) && --n>0); - _time=timeGetTime()-_time; - - if(U_FAILURE(errorCode)) { - fprintf(stderr, "error in roundtrip conversion (%s): %s\n", encName, u_errorName(errorCode)); - return 0x7fffffff; - } - - if(0!=u_memcmp(input, output, inputLength)) { - fprintf(stderr, "error: roundtrip failed, input[]!=output[]\n"); - return 0x7fffffff; - } - - return _time; -} - -static void -perEncAndCapacity(UConverter *cnv, const char *encName, int32_t intermediateCapacity) { - double rtTime; - unsigned long _time; - int32_t n; - - /*printf("test performance for %s with intermediate capacity %d\n", encName, intermediateCapacity);*/ - - /* warm up caches and estimate loop time */ - n=10; - for(;;) { - _time=measureRoundtrips(roundtrip, cnv, encName, intermediateCapacity, n); - if(_time<500 && _time<TARGET_MEASURE_TIME_MS/10) { - n*=10; - } else { - break; - } - } - - if(_time<TARGET_MEASURE_TIME_MS) { - n=(n*TARGET_MEASURE_TIME_MS)/_time+1; - } - - /* run actual measurement with a target test time of 10s */ - _time=measureRoundtrips(roundtrip, cnv, encName, intermediateCapacity, n); - - /* subtract same number of loops over no-operation function */ - _time-=measureRoundtrips(noop, cnv, encName, intermediateCapacity, n); - - rtTime=((double)_time*1000.)/(double)n; - - /* report */ - printf("* performance report for %8s:\n", encName); - printf(" intermediate buffer capacity %8d B\n", intermediateCapacity); - if(intermediateCapacity==INTERMEDIATE_CAPACITY && utf8Length!=0) { - printf(" number of encoding bytes %8d B (%3d%% of UTF-8)\n", encodedLength, PERCENT(encodedLength, utf8Length)); - printf(" roundtrip conversion time %8g μs (%3d%% of UTF-8)\n", rtTime, PERCENT(rtTime, utf8Time)); - } else { - printf(" number of encoding bytes %8d B\n", encodedLength); - printf(" roundtrip conversion time %8g μs\n", rtTime); - } - printf(" average bytes/code point %8g B/cp\n", (double)encodedLength/countInputCodePoints); - puts(""); - - /* set UTF-8 values */ - if(intermediateCapacity==INTERMEDIATE_CAPACITY && 0==strcmp(encName, "UTF-8")) { - utf8Length=encodedLength; - utf8Time=rtTime; - } -} - -static void -perEnc(UConverter *cnv, const char *encName) { - /*printf("test performance for %s\n", encName);*/ - perEncAndCapacity(cnv, encName, INTERMEDIATE_CAPACITY); - perEncAndCapacity(cnv, encName, INTERMEDIATE_SMALL_CAPACITY); -} - -static void -testPerformance() { - UConverter *cnv; - UErrorCode errorCode; - int32_t i; - - printf("number of code points %8d cp\n", countInputCodePoints); - printf("platform endianness: %8s-endian\n", U_IS_BIG_ENDIAN ? "big" : "little"); - puts(""); - for(i=0; i<ARRAY_LENGTH(utfNames); ++i) { - errorCode=U_ZERO_ERROR; - cnv=ucnv_open(utfNames[i], &errorCode); - if(U_SUCCESS(errorCode)) { - perEnc(cnv, utfNames[i]); - ucnv_close(cnv); - } else { - fprintf(stderr, "error opening converter for \"%s\" - %s\n", utfNames[i], u_errorName(errorCode)); - } - } -} - -/* read a complete block from the input file */ -static int32_t -readBlock(FILE *in) { - int length, blockLength; - - blockLength=0; - while(blockLength<INTERMEDIATE_CAPACITY && !feof(in)) { - length=fread(intermediate, 1, INTERMEDIATE_CAPACITY-blockLength, in); - if(length<0 || ferror(in)) { - return -1; - } - blockLength+=length; - } - - return (int32_t)blockLength; -} - -static UBool -readInput(FILE *in, const char *encName) { - UConverter *cnv; - UChar *pOut, *pOutLimit; - const char *p, *limit; - int32_t length; - UErrorCode errorCode; - - pOut=input; - pOutLimit=input+INPUT_CAPACITY; - - errorCode=U_ZERO_ERROR; - - /* read the first block and open the converter */ - length=readBlock(in); - if(length<0) { - return FALSE; - } - - if(encName==NULL) { - int32_t signatureLength; - encName=ucnv_detectUnicodeSignature(intermediate, length, - &signatureLength, - &errorCode); - if(U_FAILURE(errorCode) || encName==NULL) { - /* default to UTF-8 */ - printf("no Unicode signature - using UTF-8\n"); - encName="UTF-8"; - errorCode=U_ZERO_ERROR; - } else { - printf("detected signature for %s (removing %d bytes)\n", encName, signatureLength); - /* remove signature byte sequence */ - memmove(intermediate, intermediate+signatureLength, length-=signatureLength); - } - } - - cnv=ucnv_open(encName, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "error: unable to ucnv_open(\"%s\") - %s\n", encName, u_errorName(errorCode)); - return FALSE; - } - - while(length>0) { - /* convert the block */ - p=intermediate; - limit=p+length; - - ucnv_toUnicode(cnv, - &pOut, pOutLimit, - &p, limit, - NULL, FALSE, - &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "error converting input to UTF-16: %s\n", u_errorName(errorCode)); - ucnv_close(cnv); - return FALSE; - } - - /* read the next block */ - length=readBlock(in); - if(length<0) { - ucnv_close(cnv); - return FALSE; - } - } - - /* flush the converter */ - ucnv_toUnicode(cnv, - &pOut, pOutLimit, - &p, p, - NULL, TRUE, - &errorCode); - ucnv_close(cnv); - - if(U_FAILURE(errorCode)) { - fprintf(stderr, "error converting input to UTF-16: %s\n", u_errorName(errorCode)); - return FALSE; - } - - inputLength=(int32_t)(pOut-input); - countInputCodePoints=u_countChar32(input, inputLength); - if(inputLength<=0) { - fprintf(stderr, "warning: input is empty\n"); - return FALSE; - } - - return TRUE; -} - -static void -showUsage(const char *myName) { - fprintf(stderr, - "Usage:\n" - "%s [-e encoding-name] filename | '-'\n" - " encoding-name must be the name of an encoding supported by ICU\n" - " the filename of the input file with text to be used\n" - " can be a dash (-) for standard input\n", - myName); -} - -/* - * Read file using some encoding, convert to 1M UTF-16 input buffer. - * For each UTF to be tested: - * n times: - * convert from UTF-16 input buffer to UTF, 4kB buffer - * convert from 4kB buffer to 1M UTF-16 output buffer - * adjust n so that time elapsed is 10s (#define) - * ->divide 10s by time, increase n by that factor, run 2nd time - * n times: - * empty function - * subtract out loop/function overhead - * display #code points - #UTF bytes - time per roundtrip - * - * * do the same again with an intermediate buffer size of 20 instead of 4kB - * - * Test following UTFs: - * UTF-16BE, UTF-16LE, UTF-8, SCSU, BOCU-1, CESU-8 - * - * Command-line arguments: - * - encoding (default UTF-8, detect BOM) - * - filename (allow "-") - */ -extern int -main(int argc, const char *argv[]) { - FILE *in; - const char *myName, *encName, *filename, *basename; - - myName=argv[0]; - if(argc<2) { - showUsage(myName); - return 1; - } - - /* get encoding name argument */ - if(argv[1][0]=='-' && argv[1][1]=='e') { - encName=argv[1]+2; - --argc; - ++argv; - if(*encName==0) { - if(argc<2) { - showUsage(myName); - return 1; - } - encName=argv[1]; - --argc; - ++argv; - } - } else { - encName=NULL; - } - - /* get filename argument */ - if(argc<2) { - showUsage(myName); - return 1; - } - filename=argv[1]; - if(filename[0]=='-' && filename[1]==0) { - filename="(standard input)"; - in=stdin; - /* set stdin to binary mode */ - _setmode(_fileno(stdin), _O_BINARY); - } else { - in=fopen(filename, "rb"); - if(in==NULL) { - fprintf(stderr, "error opening \"%s\"\n", filename); - showUsage(myName); - return 2; - } - } - - /* read input */ - basename=strrchr(filename, U_FILE_SEP_CHAR); - if(basename!=NULL) { - ++basename; - } else { - basename=filename; - } - printf("# testing converter performance with file \"%s\"\n", basename); - if(!readInput(in, encName)) { - fprintf(stderr, "error reading \"%s\" (encoding %s)\n", filename, encName); - showUsage(myName); - return 2; - } - if(in!=stdin) { - fclose(in); - } - - /* test performance */ - testPerformance(); - return 0; -} diff --git a/icuSources/test/utfperf/utfperf.dsp b/icuSources/test/utfperf/utfperf.dsp deleted file mode 100644 index 83512224..00000000 --- a/icuSources/test/utfperf/utfperf.dsp +++ /dev/null @@ -1,158 +0,0 @@ -# Microsoft Developer Studio Project File - Name="utfperf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=utfperf - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "utfperf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "utfperf.mak" CFG="utfperf - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "utfperf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "utfperf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "utfperf - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "utfperf - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "utfperf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib gdi32.lib winmm.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "utfperf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" - -!ELSEIF "$(CFG)" == "utfperf - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /Op /I "..\..\..\include" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib kernel32.lib user32.lib gdi32.lib winmm.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "utfperf - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /Op /I "..\..\..\include" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "utfperf - Win32 Release" -# Name "utfperf - Win32 Debug" -# Name "utfperf - Win64 Release" -# Name "utfperf - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\utfperf.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/Makefile.in b/icuSources/tools/Makefile.in index d8509e61..da7c907b 100644 --- a/icuSources/tools/Makefile.in +++ b/icuSources/tools/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU tools -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -13,15 +13,15 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools -SUBDIRS = ctestfw toolutil makeconv genrb genuca genbrk \ -genprops gencase gennames genpname gennorm gencmn gencnval gensprep genccode pkgdata \ -gentest icuswap +SUBDIRS = toolutil ctestfw makeconv genrb genuca genbrk genctd \ +gennames genpname gencnval gensprep genccode gencmn icupkg pkgdata \ +gentest genprops gencase genbidi gennorm icuswap ## List of phony targets -.PHONY : all all-local all-recursive install install-local install-files install-dlls build-cmnfile build-dll \ +.PHONY : all all-local all-recursive install install-local \ install-recursive clean clean-local clean-recursive distclean \ distclean-local distclean-recursive dist dist-local dist-recursive \ -check check-local check-recursive build-testdlls build-basetestdata build-local +check check-local check-recursive build-local ## Clear suffix list .SUFFIXES : diff --git a/icuSources/tools/cpysearch/cpyscan.pl b/icuSources/tools/cpysearch/cpyscan.pl index d435e356..eab4f36a 100644 --- a/icuSources/tools/cpysearch/cpyscan.pl +++ b/icuSources/tools/cpysearch/cpyscan.pl @@ -1,9 +1,12 @@ #!/usr/bin/perl -w # *********************************************************************** # * COPYRIGHT: -# * Copyright (c) 2002-2004, International Business Machines Corporation +# * Copyright (c) 2002-2005, International Business Machines Corporation # * and others. All Rights Reserved. # *********************************************************************** +# +# Search for and list files which don't have a copyright notice, and should. +# use strict; my $icuSource = $ARGV[0]; diff --git a/icuSources/tools/cpysearch/cpysearch.pl b/icuSources/tools/cpysearch/cpysearch.pl index c6405b5f..77bf85ed 100644 --- a/icuSources/tools/cpysearch/cpysearch.pl +++ b/icuSources/tools/cpysearch/cpysearch.pl @@ -1,9 +1,13 @@ #!/usr/bin/perl -w # *********************************************************************** # * COPYRIGHT: -# * Copyright (c) 2002-2004, International Business Machines Corporation +# * Copyright (c) 2002-2005, International Business Machines Corporation # * and others. All Rights Reserved. # *********************************************************************** +# +# Search for files modified this year, that need to have copyright indicating +# this current year on them. +# use strict; my $icuSource = $ARGV[0]; diff --git a/icuSources/tools/cpysearch/cpyskip.txt b/icuSources/tools/cpysearch/cpyskip.txt index 76fb80cd..199fc28e 100644 --- a/icuSources/tools/cpysearch/cpyskip.txt +++ b/icuSources/tools/cpysearch/cpyskip.txt @@ -1,76 +1,202 @@ -# Copyright (c) 2004 International Business Machines +# Copyright (c) 2005-2006 International Business Machines # Corporation and others. All Rights Reserved. +# suffix matches +*.brk +*.bz2 +*.csproj +*.dat +*.doc +*.gif +*.gz +*.ico +*.jar +*.jpg +*.pdf +*.png +*.ppt +*.res +*.rtf +*.sln +*.sxd +*.sxg +*.sxw +*.vcproj +*.zip +*.cvsignore # ICU4C files that don't need an IBM copyright -as_is/os400/configure -debian/changelog -debian/control -debian/icu-doc.doc-base -debian/icu.conffiles.in -source/config.guess -source/config.sub -source/configure -source/data/brkitr/thaidict.brk -source/extra/uconv/pkgdatain.txt -source/extra/uconv/samples/danish-ISO-8859-1.txt -source/extra/uconv/samples/eucJP.txt -source/extra/uconv/samples/hangul-eucKR.txt -source/extra/uconv/samples/hania-eucKR.txt -source/extra/uconv/samples/ISO-8859-2.txt -source/extra/uconv/samples/ISO-8859-3.txt -source/extra/uconv/samples/iso8859-1.txt -source/extra/uconv/samples/koi8r.txt -source/extra/uconv/samples/utf8/armenian.txt -source/extra/uconv/samples/utf8/banviet.txt -source/extra/uconv/samples/utf8/chinese-ulysses.txt -source/extra/uconv/samples/utf8/croat.txt -source/extra/uconv/samples/utf8/danish.txt -source/extra/uconv/samples/utf8/greek.txt -source/extra/uconv/samples/utf8/hangul.txt -source/extra/uconv/samples/utf8/hania.txt -source/extra/uconv/samples/utf8/jap.txt -source/extra/uconv/samples/utf8/korean.txt -source/extra/uconv/samples/utf8/linji.txt -source/extra/uconv/samples/utf8/many.txt -source/extra/uconv/samples/utf8/maopoem.txt -source/extra/uconv/samples/utf8/russian.txt -source/extra/uconv/samples/utf8/simplechinese.txt -source/extra/uconv/samples/utf8/turkish.txt -source/extra/uconv/samples/utf8/utf-8-demo.txt -source/install-sh -source/samples/layout/Sample.txt -source/samples/ucnv/data01.txt -source/samples/ufortune/resources/res-file-list.txt -source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt -source/test/testdata/CollationTest_SHIFTED_STUB.txt -source/test/testdata/re_tests.txt -source/test/testdata/riwords.txt -source/test/thaitest/space.txt -source/test/unalignedtest/unaligned.c -source/tools/gendraft/DeprecatedApi.txt -source/tools/gendraft/DraftApi.txt -source/tools/gendraft/ObsoleteApi.txt -source/tools/tzcode/patch-icu-tzcode +icu/debian/changelog +icu/debian/control +icu/debian/icu-doc.doc-base +icu/debian/icu-doc.install +icu/debian/icu.conffiles.in +icu/source/config.guess +icu/source/config.sub +icu/source/configure +icu/source/data/brkitr/thaidict.brk +icu/source/data/unidata/UnicodeData.txt +icu/source/data/unidata/FractionalUCA.txt +icu/source/data/unidata/UCARules.txt +icu/source/extra/uconv/pkgdatain.txt +icu/source/extra/uconv/samples/danish-ISO-8859-1.txt +icu/source/extra/uconv/samples/eucJP.txt +icu/source/extra/uconv/samples/hangul-eucKR.txt +icu/source/extra/uconv/samples/hania-eucKR.txt +icu/source/extra/uconv/samples/ISO-8859-2.txt +icu/source/extra/uconv/samples/ISO-8859-3.txt +icu/source/extra/uconv/samples/iso8859-1.txt +icu/source/extra/uconv/samples/koi8r.txt +icu/source/extra/uconv/samples/utf8/armenian.txt +icu/source/extra/uconv/samples/utf8/banviet.txt +icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt +icu/source/extra/uconv/samples/utf8/croat.txt +icu/source/extra/uconv/samples/utf8/danish.txt +icu/source/extra/uconv/samples/utf8/greek.txt +icu/source/extra/uconv/samples/utf8/hangul.txt +icu/source/extra/uconv/samples/utf8/hania.txt +icu/source/extra/uconv/samples/utf8/jap.txt +icu/source/extra/uconv/samples/utf8/korean.txt +icu/source/extra/uconv/samples/utf8/linji.txt +icu/source/extra/uconv/samples/utf8/many.txt +icu/source/extra/uconv/samples/utf8/maopoem.txt +icu/source/extra/uconv/samples/utf8/russian.txt +icu/source/extra/uconv/samples/utf8/simplechinese.txt +icu/source/extra/uconv/samples/utf8/turkish.txt +icu/source/extra/uconv/samples/utf8/utf-8-demo.txt +icu/source/install-sh +icu/source/samples/layout/Sample.txt +icu/source/samples/ucnv/data01.txt +icu/source/samples/ufortune/resources/res-file-list.txt +icu/source/test/testdata/CollationTest_NON_IGNORABLE_STUB.txt +icu/source/test/testdata/CollationTest_SHIFTED_STUB.txt +icu/source/test/testdata/GraphemeClusterBreakTest.txt +icu/source/test/testdata/ra.xlf +icu/source/test/testdata/re_tests.txt +icu/source/test/testdata/riwords.txt +icu/source/test/testdata/SentenceBreakTest.txt +icu/source/test/testdata/WordBreakTest.txt +icu/source/test/testdata/idna_conf.txt +icu/source/test/thaitest/space.txt +icu/source/tools/tzcode/patch-icu-tzcode +# Following are Public Domain +icu/source/tools/tzcode/asctime.c +icu/source/tools/tzcode/ialloc.c +icu/source/tools/tzcode/localtime.c +icu/source/tools/tzcode/private.h +icu/source/tools/tzcode/scheck.c +icu/source/tools/tzcode/tzfile.h +icu/source/tools/tzcode/tzselect.ksh +icu/source/tools/tzcode/zic.c #ICU4JNI files that don't need an IBM copyright -src/classes/com/ibm/icu4jni/test/text/NormalizationTest.txt -src/native/converter/ConverterInterface.h +icu4jni/src/classes/com/ibm/icu4jni/test/text/NormalizationTest.txt +icu4jni/src/native/converter/ConverterInterface.h +icu4jni/configure #ICU4J files that don't need an IBM copyright -src/com/ibm/icu/dev/data/holidays_jp.ucs -src/com/ibm/icu/dev/data/rbbi/english.dict -src/com/ibm/icu/dev/data/rbbi/words.txt -src/com/ibm/icu/dev/data/riwords.txt -src/com/ibm/icu/dev/data/thai6.ucs -src/com/ibm/icu/dev/data/ThaiWordFreq.xls -src/com/ibm/icu/dev/data/unicode/CompositionExclusions.txt -src/com/ibm/icu/dev/data/unicode/NormalizationCorrections.txt -src/com/ibm/icu/dev/data/unicode/NormalizationTest-3.2.0.txt -src/com/ibm/icu/dev/data/unicode/NormalizationTest.txt -src/com/ibm/icu/dev/data/unicode/SpecialCasing.txt -src/com/ibm/icu/dev/data/unicode/ucdterms.txt -src/com/ibm/icu/dev/data/unicode/UnicodeData.txt -src/com/ibm/icu/dev/tool/docs/icu4j28.api.gz -src/com/ibm/icu/dev/tool/docs/icu4j30.api.gz -src/com/ibm/icu/dev/tool/ime/indic/services/java.awt.im.spi.InputMethodDescriptor -src/com/ibm/icu/dev/tool/ime/translit/services/java.awt.im.spi.InputMethodDescriptor -src/com/ibm/icu/impl/data/th.brk -src/com/ibm/richtext/textapps/resources/unicode.arabic.red -src/com/ibm/richtext/textapps/resources/unicode.hebrew.red +icu4j/src/com/ibm/icu/dev/data/CollationTest_NON_IGNORABLE_STUB.txt +icu4j/src/com/ibm/icu/dev/data/CollationTest_SHIFTED_STUB.txt +icu4j/src/com/ibm/icu/dev/data/holidays_jp.ucs +icu4j/src/com/ibm/icu/dev/data/rbbi/english.dict +icu4j/src/com/ibm/icu/dev/data/rbbi/words.txt +icu4j/src/com/ibm/icu/dev/data/riwords.txt +icu4j/src/com/ibm/icu/dev/data/thai6.ucs +icu4j/src/com/ibm/icu/dev/data/ThaiWordFreq.xls +icu4j/src/com/ibm/icu/dev/data/unicode/CompositionExclusions.txt +icu4j/src/com/ibm/icu/dev/data/unicode/NormalizationCorrections.txt +icu4j/src/com/ibm/icu/dev/data/unicode/NormalizationTest-3.2.0.txt +icu4j/src/com/ibm/icu/dev/data/unicode/NormalizationTest.txt +icu4j/src/com/ibm/icu/dev/data/unicode/SpecialCasing.txt +icu4j/src/com/ibm/icu/dev/data/unicode/ucdterms.txt +icu4j/src/com/ibm/icu/dev/data/unicode/UnicodeData.txt +icu4j/src/com/ibm/icu/dev/data/IDNATestInput.txt +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu/.classpath +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu/.project +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu/build.properties +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu/build.xml +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base/.classpath +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base/.project +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base/build.properties +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base/build.xml +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base.tests/.classpath +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base.tests/.project +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base.tests/build.properties +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base-feature/.project +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base-feature/build.properties +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.base-feature/feature.xml +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.tests/.classpath +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.tests/.project +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu.tests/build.properties +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu-feature/.project +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu-feature/build.properties +icu4j/src/com/ibm/icu/dev/eclipse/com.ibm.icu-feature/feature.xml +icu4j/src/com/ibm/icu/dev/eclipse/misc/about.html +icu4j/src/com/ibm/icu/dev/test/serializable/*/*.dat +icu4j/src/com/ibm/icu/dev/tool/ime/indic/services/java.awt.im.spi.InputMethodDescriptor +icu4j/src/com/ibm/icu/dev/tool/ime/translit/services/java.awt.im.spi.InputMethodDescriptor +icu4j/src/com/ibm/richtext/textapps/resources/unicode.arabic.red +icu4j/src/com/ibm/richtext/textapps/resources/unicode.hebrew.red +#Userguide html template file. Skip because adding one would cause multiple +#copyright notices to appear in each generated userguide html file. +icuhtml/userguide/html-template/ugtemplate.html +icuhtml/icu.sf.net/.htaccess +icuhtml/icu.sf.net/apiref/index.html +icuhtml/icu.sf.net/bugs.html +icuhtml/icu.sf.net/charts/charset/CharacterMappingNames.xml +icuhtml/icu.sf.net/charts/charset/identicals.html +icuhtml/icu.sf.net/charts/charset/index.html +icuhtml/icu.sf.net/charts/charset/roundtripIndex.html +icuhtml/icu.sf.net/charts/charset/similar.html +icuhtml/icu.sf.net/charts/collation_icu4c_glibc.html +icuhtml/icu.sf.net/charts/collation_icu4j_sun.html +icuhtml/icu.sf.net/charts/comparison/character.html +icuhtml/icu.sf.net/charts/comparison/collation.html +icuhtml/icu.sf.net/charts/comparison/index.html +icuhtml/icu.sf.net/charts/comparison/transforms.html +icuhtml/icu.sf.net/charts/icu4c_footprint.html +icuhtml/icu.sf.net/charts/index.html +icuhtml/icu.sf.net/contacts.html +icuhtml/icu.sf.net/docs/demo/convexp_help.html +icuhtml/icu.sf.net/docs/demo/translit_help.html +icuhtml/icu.sf.net/docs/demo/translit_rule_help.html +icuhtml/icu.sf.net/docs/eclipse_howto/eclipse_howto.html +icuhtml/icu.sf.net/docs/index.html +icuhtml/icu.sf.net/docs/papers/.htaccess +icuhtml/icu.sf.net/docs/papers/a_rule_based_approach_to_number_spellout/index.html +icuhtml/icu.sf.net/docs/papers/binary_ordered_compression_for_unicode.html +icuhtml/icu.sf.net/docs/papers/codepages_and_unicode.html +icuhtml/icu.sf.net/docs/papers/cpp_report/an_introduction_to_garbage_collection_part_i.html +icuhtml/icu.sf.net/docs/papers/cpp_report/an_introduction_to_garbage_collection_part_ii.html +icuhtml/icu.sf.net/docs/papers/cpp_report/java_liaison/learning_to_love_loss_of_control.html +icuhtml/icu.sf.net/docs/papers/cpp_report/java_liaison/liaison_communication_for_establishing_and_maintaining_cooperation.html +icuhtml/icu.sf.net/docs/papers/cpp_report/java_liaison/some_holes_and_how_to_fill_them.html +icuhtml/icu.sf.net/docs/papers/cpp_report/java_liaison/the_amorphous_java_program.html +icuhtml/icu.sf.net/docs/papers/cpp_report/the_anatomy_of_the_assignment_operator.html +icuhtml/icu.sf.net/docs/papers/cpp_report/the_assignment_operator_revisited.html +icuhtml/icu.sf.net/docs/papers/creating_global_applications/index.html +icuhtml/icu.sf.net/docs/papers/efficient_text_searching_in_java.html +icuhtml/icu.sf.net/docs/papers/foldedtrie_iuc21.ppt +icuhtml/icu.sf.net/docs/papers/forms_of_unicode/index.html +icuhtml/icu.sf.net/docs/papers/gb18030.html +icuhtml/icu.sf.net/docs/papers/history_of_java_internationalization.html +icuhtml/icu.sf.net/docs/papers/icu4j_in_eclipse_iuc29.sxi +icuhtml/icu.sf.net/docs/papers/international_calendars_in_java.html +icuhtml/icu.sf.net/docs/papers/international_text_in_jdk_1.2/index.html +icuhtml/icu.sf.net/docs/papers/internationalization_support_for_javascript.html +icuhtml/icu.sf.net/docs/papers/java_international_api.html +icuhtml/icu.sf.net/docs/papers/optimized_unicode_composition_and_decomposition.html +icuhtml/icu.sf.net/docs/papers/text_boundary_analysis_in_java/index.html +icuhtml/icu.sf.net/docs/papers/unicode-gb18030-faq.html +icuhtml/icu.sf.net/docs/papers/unicode_wchar_t.html +icuhtml/icu.sf.net/docs/papers/utf16_code_point_order.html +icuhtml/icu.sf.net/docs/workshop_2000/agenda.html +icuhtml/icu.sf.net/docs/workshop_2000/evaluate.html +icuhtml/icu.sf.net/docs/workshop_2000/index.html +icuhtml/icu.sf.net/docs/workshop_2000/register.html +icuhtml/icu.sf.net/docs/workshop_2000/register.txt +icuhtml/icu.sf.net/docs/workshop_2000/travel.html +icuhtml/icu.sf.net/icu.css +icuhtml/icu.sf.net/icu4j_faq.html +icuhtml/icu.sf.net/index.html +icuhtml/icu.sf.net/meetings/*.* +icuhtml/icu.sf.net/ssi/footer.html +icuhtml/icu.sf.net/ssi/header.html +icuapps/redemo/readme +icuapps/configure diff --git a/icuSources/tools/cpysearch/readme.txt b/icuSources/tools/cpysearch/readme.txt index 661e5c52..bb1d5a66 100644 --- a/icuSources/tools/cpysearch/readme.txt +++ b/icuSources/tools/cpysearch/readme.txt @@ -1,8 +1,16 @@ -Copyright (c) 2002, International Business Machines Corporation and others. All Rights Reserved. +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. cpysearch.pl is a perl script used to detect the files that might not have the copyright notice. Best when used on windows on a clean checkout. Edit $icuSource to your path. If you are working on other platform, you probably want to edit $ignore to reflect different temporary files that you don't want in the scan. The result will be the list of files that don't have word copyright (case ignored) in first 10 lines. Look at them and fix if needed. +cpysearch.pl searches for files modified this year that don't have the + correct year copyright (i.e. 'copyright 1995') + +cpyscan.pl searches for all files that don't have any copyright + +cpyskip.txt is part of the ignore list. + + Have fun! weiv diff --git a/icuSources/tools/ctestfw/Makefile.in b/icuSources/tools/ctestfw/Makefile.in index 37a9434b..bca5dbf3 100644 --- a/icuSources/tools/ctestfw/Makefile.in +++ b/icuSources/tools/ctestfw/Makefile.in @@ -1,6 +1,10 @@ +#****************************************************************************** +# +# Copyright (C) 1999-2006, International Business Machines +# Corporation and others. All Rights Reserved. +# +#****************************************************************************** ## Makefile.in for ICU - tools/ctestfw -## Copyright (c) 1999-2004, International Business Machines Corporation and -## others. All Rights Reserved. ## Stephen F. Booth ## Source directory information @@ -9,6 +13,7 @@ top_srcdir = @top_srcdir@ top_builddir = ../.. +## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk ## Build directory information @@ -19,17 +24,15 @@ CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB) ## Target information +TARGET_STUBNAME=$(CTESTFW_STUBNAME) + ifneq ($(ENABLE_STATIC),) -TARGET = $(LIBSICU)$(CTESTFW_STUBNAME)$(ICULIBSUFFIX).$(A) +TARGET = $(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A) endif -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir) -DEFS += -DT_CTEST_IMPLEMENTATION - - ifneq ($(ENABLE_SHARED),) -SO_TARGET = $(LIBICU)$(CTESTFW_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +SO_TARGET = $(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) endif ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) @@ -38,15 +41,22 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil -I$(srcdir) $(LIBCPPFLAGS) +DEFS += -DT_CTEST_IMPLEMENTATION LDFLAGS += $(LDFLAGSCTESTFW) -LIBS = $(LIBICUUC) $(DEFAULT_LIBS) +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) -OBJECTS = ctest.o tstdtmod.o testdata.o datamap.o +OBJECTS = ctest.o tstdtmod.o testdata.o datamap.o uperf.o STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) DEPS = $(OBJECTS:.o=.d) +-include Makefile.local + ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ distclean distclean-local dist dist-local check check-local @@ -67,18 +77,6 @@ all-local: $(ALL_TARGETS) install-local: install-library install-library: all-local -#echo This doesn't need to be installed normally -# $(MKINSTALLDIRS) $(DESTDIR)$(libdir) -#ifneq ($(ENABLE_STATIC),) -# $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)/$(TARGET) -#endif -#ifneq ($(ENABLE_SHARED),) -# $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)/$(FINAL_SO_TARGET) -#ifneq ($(FINAL_SO_TARGET),$(SO_TARGET)) -# cd $(DESTDIR)$(libdir) && $(RM) $(MIDDLE_SO_TARGET) && ln -s $(FINAL_SO_TARGET) $(MIDDLE_SO_TARGET) -# cd $(DESTDIR)$(libdir) && $(RM) $(SO_TARGET) && ln -s $(FINAL_SO_TARGET) $(SO_TARGET) -#endif -#endif dist-local: @@ -101,7 +99,7 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) +$(SHARED_OBJECT): $(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) endif @@ -112,3 +110,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/ctestfw/ctest.c b/icuSources/tools/ctestfw/ctest.c index f493be14..d99450b1 100644 --- a/icuSources/tools/ctestfw/ctest.c +++ b/icuSources/tools/ctestfw/ctest.c @@ -1,10 +1,10 @@ /* -***************************************************************************************** +******************************************************************************** * -* Copyright (C) 1996-2004, International Business Machines +* Copyright (C) 1996-2006, International Business Machines * Corporation and others. All Rights Reserved. * -***************************************************************************************** +******************************************************************************** */ #include <stdio.h> #include <stdlib.h> @@ -372,8 +372,10 @@ getTest(const TestNode* root, const char* name) const TestNode* curNode; int nameLen; /* length of current 'name' */ - if (root == NULL) + if (root == NULL) { log_err("TEST CAN'T BE FOUND!\n"); + return NULL; + } /* remove leading slash */ if ( *name == TEST_SEPARATOR ) name++; @@ -429,7 +431,7 @@ static void vlog_err(const char *prefix, const char *pattern, va_list ap) } fprintf(stderr, "%-*s", INDENT_LEVEL," " ); if(prefix) { - fputs(prefix, stderr); + fputs(prefix, stderr); } vfprintf(stderr, pattern, ap); fflush(stderr); @@ -441,7 +443,7 @@ vlog_info(const char *prefix, const char *pattern, va_list ap) { fprintf(stdout, "%-*s", INDENT_LEVEL," " ); if(prefix) { - fputs(prefix, stderr); + fputs(prefix, stdout); } vfprintf(stdout, pattern, ap); fflush(stdout); @@ -455,7 +457,7 @@ static void vlog_verbose(const char *prefix, const char *pattern, va_list ap) fprintf(stdout, "%-*s", INDENT_LEVEL," " ); if(prefix) { - fputs(prefix, stderr); + fputs(prefix, stdout); } vfprintf(stdout, pattern, ap); fflush(stdout); diff --git a/icuSources/tools/ctestfw/ctestfw.dsp b/icuSources/tools/ctestfw/ctestfw.dsp deleted file mode 100644 index e5a4b884..00000000 --- a/icuSources/tools/ctestfw/ctestfw.dsp +++ /dev/null @@ -1,199 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ctestfw" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=ctestfw - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ctestfw.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ctestfw.mak" CFG="ctestfw - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ctestfw - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ctestfw - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ctestfw - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ctestfw - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ctestfw - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\..\include" /I "..\..\common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /D "T_CTEST_IMPLEMENTATION" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 /nologo /dll /machine:I386 /out:"..\..\..\bin\ctestfw.dll" - -!ELSEIF "$(CFG)" == "ctestfw - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /D "T_CTEST_IMPLEMENTATION" /FR /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\ctestfwd.dll" /pdbtype:sept - -!ELSEIF "$(CFG)" == "ctestfw - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\..\include" /I "..\..\common" /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /D "T_CTEST_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 /nologo /dll /machine:IX86 /out:"..\..\..\bin\ctestfw.dll" /machine:IA64 - -!ELSEIF "$(CFG)" == "ctestfw - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /I "..\..\common" /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTESTFW_EXPORTS" /D "T_CTEST_IMPLEMENTATION" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 /nologo /dll /incremental:no /debug /machine:IX86 /out:"..\..\..\bin\ctestfwd.dll" /pdbtype:sept /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "ctestfw - Win32 Release" -# Name "ctestfw - Win32 Debug" -# Name "ctestfw - Win64 Release" -# Name "ctestfw - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\ctest.c -# End Source File -# Begin Source File - -SOURCE=.\datamap.cpp -# End Source File -# Begin Source File - -SOURCE=.\testdata.cpp -# End Source File -# Begin Source File - -SOURCE=.\tstdtmod.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\unicode\ctest.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\datamap.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\testdata.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\testlog.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\testtype.h -# End Source File -# Begin Source File - -SOURCE=.\unicode\tstdtmod.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/ctestfw/ctestfw.vcproj b/icuSources/tools/ctestfw/ctestfw.vcproj index 63a65e8f..05abd30c 100644 --- a/icuSources/tools/ctestfw/ctestfw.vcproj +++ b/icuSources/tools/ctestfw/ctestfw.vcproj @@ -3,6 +3,7 @@ ProjectType="Visual C++" Version="7.10" Name="ctestfw" + ProjectGUID="{E7D9BA19-6ED3-4325-8D0D-D724F6D29C65}" SccProjectName="" SccLocalPath=""> <Platforms> @@ -20,14 +21,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\common" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CTESTFW_EXPORTS;T_CTEST_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;T_CTEST_IMPLEMENTATION" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/icutest.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -39,11 +40,11 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" OutputFile="..\..\..\bin\icutest.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" ProgramDatabaseFile=".\..\..\..\lib\icutest.pdb" + EnableCOMDATFolding="2" ImportLibrary=".\..\..\..\lib\icutest.lib"/> <Tool Name="VCMIDLTool" @@ -85,12 +86,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\common" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CTESTFW_EXPORTS;T_CTEST_IMPLEMENTATION" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;T_CTEST_IMPLEMENTATION" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/icutest.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -104,7 +106,6 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" OutputFile="..\..\..\bin\icutestd.dll" LinkIncremental="2" SuppressStartupBanner="TRUE" @@ -158,6 +159,21 @@ <File RelativePath=".\tstdtmod.cpp"> </File> + <File + RelativePath=".\uperf.cpp"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + </File> </Filter> <Filter Name="Header Files" @@ -180,6 +196,12 @@ <File RelativePath=".\unicode\tstdtmod.h"> </File> + <File + RelativePath=".\unicode\uperf.h"> + </File> + <File + RelativePath=".\unicode\utimer.h"> + </File> </Filter> <Filter Name="Resource Files" diff --git a/icuSources/tools/ctestfw/datamap.cpp b/icuSources/tools/ctestfw/datamap.cpp index 30da4500..e9242dec 100644 --- a/icuSources/tools/ctestfw/datamap.cpp +++ b/icuSources/tools/ctestfw/datamap.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -69,7 +69,7 @@ void RBDataMap::init(UResourceBundle *data, UErrorCode &status) { UResourceBundle *t = NULL; for(i = 0; i < ures_getSize(data); i++) { t = ures_getByIndex(data, i, t, &status); - fData->put(UnicodeString(ures_getKey(t), ""), new ResourceBundle(t, status), status); + fData->put(UnicodeString(ures_getKey(t), -1, US_INV), new ResourceBundle(t, status), status); } ures_close(t); } @@ -100,7 +100,7 @@ const ResourceBundle *RBDataMap::getItem(const char* key, UErrorCode &status) co return NULL; } - UnicodeString hashKey(key, ""); + UnicodeString hashKey(key, -1, US_INV); const ResourceBundle *r = (ResourceBundle *)fData->get(hashKey); if(r != NULL) { return r; @@ -116,7 +116,6 @@ const UnicodeString RBDataMap::getString(const char* key, UErrorCode &status) co if(U_SUCCESS(status)) { return r->getString(status); } else { - status = U_MISSING_RESOURCE_ERROR; return UnicodeString(); } } @@ -190,7 +189,6 @@ const UnicodeString* RBDataMap::getStringArray(int32_t& count, const char* key, } return result; } else { - status = U_MISSING_RESOURCE_ERROR; return NULL; } } @@ -214,7 +212,7 @@ const int32_t* RBDataMap::getIntArray(int32_t& count, const char* key, UErrorCod } return result; } else { - status = U_MISSING_RESOURCE_ERROR; return NULL; } } + diff --git a/icuSources/tools/ctestfw/testdata.cpp b/icuSources/tools/ctestfw/testdata.cpp index 68a5b535..0925cb59 100644 --- a/icuSources/tools/ctestfw/testdata.cpp +++ b/icuSources/tools/ctestfw/testdata.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -8,8 +8,9 @@ #include "unicode/testdata.h" -TestData::TestData(const char* name) -: name(name), + +TestData::TestData(const char* testName) +: name(testName), fInfo(NULL), fCurrSettings(NULL), fCurrCase(NULL), @@ -40,8 +41,8 @@ const char * TestData::getName() const -RBTestData::RBTestData(const char* name) -: TestData(name), +RBTestData::RBTestData(const char* testName) +: TestData(testName), fData(NULL), fHeaders(NULL), fSettings(NULL), @@ -138,3 +139,4 @@ UBool RBTestData::nextCase(const DataMap *& nextCase, UErrorCode &status) } } + diff --git a/icuSources/tools/ctestfw/tstdtmod.cpp b/icuSources/tools/ctestfw/tstdtmod.cpp index 6846680a..2f050296 100644 --- a/icuSources/tools/ctestfw/tstdtmod.cpp +++ b/icuSources/tools/ctestfw/tstdtmod.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -9,6 +9,8 @@ #include "unicode/tstdtmod.h" #include "cmemory.h" +TestLog::~TestLog() {} + TestDataModule *TestDataModule::getTestDataModule(const char* name, TestLog& log, UErrorCode &status) { if(U_FAILURE(status)) { @@ -71,7 +73,7 @@ RBTestDataModule::RBTestDataModule(const char* name, TestLog& log, UErrorCode& s fNumberOfTests = ures_getSize(fTestData); fInfoRB = ures_getByKey(fModuleBundle, "Info", NULL, &status); if(status != U_ZERO_ERROR) { - log.errln("Unable to initalize test data - missing mandatory description resources!"); + log.errln(UNICODE_STRING_SIMPLE("Unable to initalize test data - missing mandatory description resources!")); fDataTestValid = FALSE; } else { fInfo = new RBDataMap(fInfoRB, status); @@ -156,7 +158,7 @@ RBTestDataModule::getTestBundle(const char* bundleName, UErrorCode &status) if (testBundle == NULL) { testBundle = ures_openDirect(icu_data, bundleName, &status); if (status != U_ZERO_ERROR) { - fLog.errln(UnicodeString("Failed: could not load test data from resourcebundle: ") + UnicodeString(bundleName)); + fLog.errln(UNICODE_STRING_SIMPLE("Failed: could not load test data from resourcebundle: ") + UnicodeString(bundleName, -1, US_INV)); fDataTestValid = FALSE; } } diff --git a/icuSources/tools/ctestfw/unicode/datamap.h b/icuSources/tools/ctestfw/unicode/datamap.h index bd812796..b8180fd9 100644 --- a/icuSources/tools/ctestfw/unicode/datamap.h +++ b/icuSources/tools/ctestfw/unicode/datamap.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -12,6 +12,8 @@ #include "unicode/resbund.h" #include "unicode/testtype.h" + + U_NAMESPACE_BEGIN class Hashtable; U_NAMESPACE_END @@ -131,5 +133,6 @@ public: // ... etc ... }; + #endif diff --git a/icuSources/tools/ctestfw/unicode/testdata.h b/icuSources/tools/ctestfw/unicode/testdata.h index ef9e73e3..0b8d7525 100644 --- a/icuSources/tools/ctestfw/unicode/testdata.h +++ b/icuSources/tools/ctestfw/unicode/testdata.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -14,6 +14,7 @@ #include "unicode/tstdtmod.h" #include "unicode/datamap.h" + /** This is the class that abstracts one of the tests in a data file * It is usually instantiated using TestDataModule::CreateTestData method * This class provides two important methods: nextSettings and nextCase @@ -107,3 +108,4 @@ public: }; #endif + diff --git a/icuSources/tools/ctestfw/unicode/testlog.h b/icuSources/tools/ctestfw/unicode/testlog.h index 83abd597..a6c8f0d1 100644 --- a/icuSources/tools/ctestfw/unicode/testlog.h +++ b/icuSources/tools/ctestfw/unicode/testlog.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2004, International Business Machines Corporation and + * Copyright (c) 2004-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -12,13 +12,15 @@ #define U_TESTFW_TESTLOG #include "unicode/unistr.h" +#include "unicode/testtype.h" /** Facilitates internal logging of data driven test service * It would be interesting to develop this into a full * fledged control system as in Java. */ -class TestLog { +class T_CTEST_EXPORT_API TestLog { public: + virtual ~TestLog(); virtual void errln( const UnicodeString &message ) = 0; virtual const char* getTestDataPath(UErrorCode& err) = 0; }; diff --git a/icuSources/tools/ctestfw/unicode/testtype.h b/icuSources/tools/ctestfw/unicode/testtype.h index b89bcd2c..52a4cbd6 100644 --- a/icuSources/tools/ctestfw/unicode/testtype.h +++ b/icuSources/tools/ctestfw/unicode/testtype.h @@ -1,7 +1,7 @@ /* ***************************************************************************************** * -* Copyright (C) 2004-2004, International Business Machines +* Copyright (C) 2004-2006, International Business Machines * Corporation and others. All Rights Reserved. * ***************************************************************************************** @@ -10,15 +10,18 @@ #include "unicode/utypes.h" /*Deals with imports and exports of the dynamic library*/ -#if !defined(U_STATIC_IMPLEMENTATION) && (defined(_WIN32) || defined(U_CYGWIN)) +#if !defined(U_STATIC_IMPLEMENTATION) && (defined(U_WINDOWS) || defined(U_CYGWIN)) #define T_CTEST_EXPORT __declspec(dllexport) #define T_CTEST_IMPORT __declspec(dllimport) +#elif defined(USE_GCC_VISIBILITY_ATTRIBUTE) + #define T_CTEST_EXPORT __attribute__((visibility("default"))) + #define T_CTEST_IMPORT #else #define T_CTEST_EXPORT #define T_CTEST_IMPORT #endif -#if defined(_WIN32) +#if defined(U_WINDOWS) #define T_CTEST_EXPORT2 __cdecl #else #define T_CTEST_EXPORT2 diff --git a/icuSources/tools/ctestfw/unicode/tstdtmod.h b/icuSources/tools/ctestfw/unicode/tstdtmod.h index 77def6b6..06799b5f 100644 --- a/icuSources/tools/ctestfw/unicode/tstdtmod.h +++ b/icuSources/tools/ctestfw/unicode/tstdtmod.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2005, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -18,6 +18,7 @@ #include "unicode/datamap.h" #include "unicode/testlog.h" + /* This class abstracts the actual organization of the * data for data driven tests */ @@ -111,3 +112,4 @@ private: #endif + diff --git a/icuSources/tools/toolutil/uperf.h b/icuSources/tools/ctestfw/unicode/uperf.h similarity index 92% rename from icuSources/tools/toolutil/uperf.h rename to icuSources/tools/ctestfw/unicode/uperf.h index 939f873a..76776946 100644 --- a/icuSources/tools/toolutil/uperf.h +++ b/icuSources/tools/ctestfw/unicode/uperf.h @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2002-2004, International Business Machines +* Copyright (c) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** ********************************************************************** @@ -11,10 +11,13 @@ #include "unicode/utypes.h" #include "unicode/unistr.h" #include "unicode/ustring.h" -#include "utimer.h" -#include "uoptions.h" + +#include "unicode/testtype.h" +#include "unicode/utimer.h" #include "ucbuf.h" +#if !UCONFIG_NO_CONVERSION + U_NAMESPACE_USE // Use the TESTCASE macro in subclasses of IntlTest. Define the // runIndexedTest method in this fashion: @@ -56,7 +59,7 @@ U_NAMESPACE_USE * be timed. They then call setTestFunction() in their "Test..." * method to establish this as the current test functor. */ -class U_EXPORT UPerfFunction { +class T_CTEST_EXPORT_API UPerfFunction { public: /** * Subclasses must implement this method to do the action to be @@ -79,6 +82,10 @@ public: virtual long getEventsPerIteration(){ return -1; } + /** + * destructor + */ + virtual ~UPerfFunction() {} /** * Call call() n times in a tight loop and return the elapsed @@ -86,7 +93,7 @@ public: * result may be zero. Small return values have limited * meaningfulness, depending on the underlying CPU and OS. */ - double time(int32_t n, UErrorCode* status) { + virtual double time(int32_t n, UErrorCode* status) { UTimer start, stop; utimer_getTime(&start); while (n-- > 0) { @@ -99,7 +106,7 @@ public: }; -class U_EXPORT UPerfTest { +class T_CTEST_EXPORT_API UPerfTest { public: UBool run(); UBool runTest( char* name = NULL, char* par = NULL ); // not to be overidden @@ -156,4 +163,5 @@ public: }; #endif +#endif diff --git a/icuSources/tools/toolutil/utimer.h b/icuSources/tools/ctestfw/unicode/utimer.h similarity index 72% rename from icuSources/tools/toolutil/utimer.h rename to icuSources/tools/ctestfw/unicode/utimer.h index 6926cdfe..e08deae0 100644 --- a/icuSources/tools/toolutil/utimer.h +++ b/icuSources/tools/ctestfw/unicode/utimer.h @@ -1,6 +1,6 @@ /* ************************************************************************ -* Copyright (c) 1997-2004, International Business Machines +* Copyright (c) 1997-2006, International Business Machines * Corporation and others. All Rights Reserved. ************************************************************************ */ @@ -8,7 +8,9 @@ #ifndef _UTIMER_H #define _UTIMER_H -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +#include "unicode/utypes.h" + +#if defined(U_WINDOWS) # define VC_EXTRALEAN # define WIN32_LEAN_AND_MEAN # include <windows.h> @@ -57,62 +59,62 @@ * ii) Measure the time taken * Example: * <code> - * double perfNormalization(NormFn fn,const char* mode,Line* fileLines,int32_t loopCount){ - * int line; - * int loops; - * UErrorCode error = U_ZERO_ERROR; - * UChar* dest=NULL; - * int32_t destCapacity=0; - * int len =-1; - * double elapsedTime = 0; - * int retVal=0; + * double perfNormalization(NormFn fn,const char* mode,Line* fileLines,int32_t loopCount){ + * int line; + * int loops; + * UErrorCode error = U_ZERO_ERROR; + * UChar* dest=NULL; + * int32_t destCapacity=0; + * int len =-1; + * double elapsedTime = 0; + * int retVal=0; * - * UChar arr[5000]; - * dest=arr; - * destCapacity = 5000; - * UTimer start; + * UChar arr[5000]; + * dest=arr; + * destCapacity = 5000; + * UTimer start; * - * // Initialize cache and ensure the data is loaded. - * // This loop checks for errors in Normalization. Once we pass the initialization - * // without errors we can safelly assume that there are no errors while timing the - * // funtion - * for (loops=0; loops<10; loops++) { - * for (line=0; line < gNumFileLines; line++) { - * if (opt_uselen) { - * len = fileLines[line].len; - * } + * // Initialize cache and ensure the data is loaded. + * // This loop checks for errors in Normalization. Once we pass the initialization + * // without errors we can safelly assume that there are no errors while timing the + * // funtion + * for (loops=0; loops<10; loops++) { + * for (line=0; line < gNumFileLines; line++) { + * if (opt_uselen) { + * len = fileLines[line].len; + * } * - * retVal= fn(fileLines[line].name,len,dest,destCapacity,&error); - * #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) - * if(retVal==0 ){ - * fprintf(stderr,"Normalization of string in Windows API failed for mode %s. ErrorNo: %i at line number %i\n",mode,GetLastError(),line); - * return 0; - * } - * #endif - * if(U_FAILURE(error)){ - * fprintf(stderr,"Normalization of string in ICU API failed for mode %s. Error: %s at line number %i\n",mode,u_errorName(error),line); - * return 0; - * } - * + * retVal= fn(fileLines[line].name,len,dest,destCapacity,&error); + * #if defined(U_WINDOWS) + * if(retVal==0 ){ + * fprintf(stderr,"Normalization of string in Windows API failed for mode %s. ErrorNo: %i at line number %i\n",mode,GetLastError(),line); + * return 0; * } + * #endif + * if(U_FAILURE(error)){ + * fprintf(stderr,"Normalization of string in ICU API failed for mode %s. Error: %s at line number %i\n",mode,u_errorName(error),line); + * return 0; + * } + * * } + * } * - * //compute the time - * - * utimer_getTime(&start); - * for (loops=0; loops<loopCount; loops++) { - * for (line=0; line < gNumFileLines; line++) { - * if (opt_uselen) { - * len = fileLines[line].len; - * } + * //compute the time * - * retVal= fn(fileLines[line].name,len,dest,destCapacity,&error); - * + * utimer_getTime(&start); + * for (loops=0; loops<loopCount; loops++) { + * for (line=0; line < gNumFileLines; line++) { + * if (opt_uselen) { + * len = fileLines[line].len; * } - * } * - * return utimer_getElapsedSeconds(&start); + * retVal= fn(fileLines[line].name,len,dest,destCapacity,&error); + * + * } * } + * + * return utimer_getElapsedSeconds(&start); + * } * </code> * * iii) Let a higher level function do the calculation of confidence levels etc. @@ -155,7 +157,7 @@ typedef struct UTimer UTimer; typedef void FuntionToBeTimed(void* param); -#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +#if defined(U_WINDOWS) struct UTimer{ LARGE_INTEGER start; @@ -209,7 +211,7 @@ typedef void FuntionToBeTimed(void* param); * * @param timer A pointer to UTimer struct to recieve the current time */ -U_CAPI void U_EXPORT2 +static U_INLINE void U_EXPORT2 utimer_getTime(UTimer* timer){ uprv_initFrequency(timer); uprv_start(timer); @@ -223,7 +225,7 @@ utimer_getTime(UTimer* timer){ * @param timer2 A pointer to UTimer struct to be used as end time * @return Time in seconds */ -U_CAPI double U_EXPORT2 +static U_INLINE double U_EXPORT2 utimer_getDeltaSeconds(UTimer* timer1, UTimer* timer2){ if(uprv_compareFrequency(timer1,timer2)){ return uprv_delta(timer1,timer2); @@ -238,7 +240,7 @@ utimer_getDeltaSeconds(UTimer* timer1, UTimer* timer2){ * @param timer A pointer to UTimer struct to be used as starting time * @return Time elapsed in seconds */ -U_CAPI double U_EXPORT2 +static U_INLINE double U_EXPORT2 utimer_getElapsedSeconds(UTimer* timer){ UTimer temp; utimer_getTime(&temp); @@ -254,7 +256,7 @@ utimer_getElapsedSeconds(UTimer* timer){ * @param param Parameters to be passed to the fn * @return the time elapsed in seconds */ -U_CAPI double U_EXPORT2 +static U_INLINE double U_EXPORT2 utimer_loopUntilDone(double thresholdTimeVal, int32_t* loopCount, FuntionToBeTimed fn, diff --git a/icuSources/tools/toolutil/uperf.cpp b/icuSources/tools/ctestfw/uperf.cpp similarity index 96% rename from icuSources/tools/toolutil/uperf.cpp rename to icuSources/tools/ctestfw/uperf.cpp index 3493ae29..72b5a6d8 100644 --- a/icuSources/tools/toolutil/uperf.cpp +++ b/icuSources/tools/ctestfw/uperf.cpp @@ -1,11 +1,16 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 2002-2004, International Business Machines Corporation and + * Copyright (c) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ -#include "uperf.h" +#include "unicode/uperf.h" +#include "uoptions.h" +#include "cmemory.h" +#include <stdio.h> +#include <stdlib.h> +#if !UCONFIG_NO_CONVERSION static const char delim = '/'; static int32_t execCount = 0; UPerfTest* UPerfTest::gTest = NULL; @@ -146,9 +151,9 @@ UPerfTest::UPerfTest(int32_t argc, const char* argv[], UErrorCode& status){ resolvedFileName = NULL; if(fileName!=NULL){ //pre-flight - ucbuf_resolveFileName(sourceDir, fileName,resolvedFileName,&len, &status); + ucbuf_resolveFileName(sourceDir, fileName, NULL, &len, &status); resolvedFileName = (char*) uprv_malloc(len); - if(fileName==NULL){ + if(resolvedFileName==NULL){ status= U_MEMORY_ALLOCATION_ERROR; return; } @@ -188,12 +193,12 @@ ULine* UPerfTest::getLines(UErrorCode& status){ if(newLines == NULL) { fprintf(stderr, "Out of memory reading line %d.\n", (int)numLines); status= U_MEMORY_ALLOCATION_ERROR; - delete lines; + delete []lines; return NULL; } memcpy(newLines, lines, numLines*sizeof(ULine)); - delete lines; + delete []lines; lines = newLines; } } @@ -459,7 +464,10 @@ UPerfTest::~UPerfTest(){ if(buffer!=NULL){ uprv_free(buffer); } + if(resolvedFileName!=NULL){ + uprv_free(resolvedFileName); + } ucbuf_close(ucharBuf); } - +#endif diff --git a/icuSources/tools/dumpce/dumpce.cpp b/icuSources/tools/dumpce/dumpce.cpp index 17d9c254..47792faa 100644 --- a/icuSources/tools/dumpce/dumpce.cpp +++ b/icuSources/tools/dumpce/dumpce.cpp @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (C) 2001-2003 IBM, Inc. All Rights Reserved. + * Copyright (C) 2001-2005 IBM, Inc. All Rights Reserved. * ********************************************************************/ /******************************************************************************** @@ -1362,7 +1362,7 @@ void outputHTMLHeader(const char *locale, UScriptCode script[], } fprintf(OUTPUT_, "</td></tr>\n"); - fprintf(OUTPUT_, "<tr><th>Rules</th><td class='noborder'><a href=http://oss.software.ibm.com/cvs/icu/~checkout~/icu/source/data/locales/%s.txt>%s.txt</a></td></tr>\n", locale, locale); + fprintf(OUTPUT_, "<tr><th>Rules</th><td class='noborder'><a href=\"http://dev.icu-project.org/cgi-bin/viewcvs.cgi/*checkout*/icu/source/data/coll/%s.txt\">%s.txt</a></td></tr>\n", locale, locale); UVersionInfo version; ucol_getVersion(COLLATOR_, version); @@ -1441,7 +1441,7 @@ void outputListHTMLHeader(FILE *file) void outputListHTMLFooter(FILE *file) { fprintf(file, "</p>\n"); - fprintf(file, "<center><image src=http://oss.software.ibm.com/icu/images/w24.gif></center>\n"); + //fprintf(file, "<center><image src=http://oss.software.ibm.com/icu/images/w24.gif></center>\n"); fprintf(file, "</body>\n"); fprintf(file, "</html>\n"); } diff --git a/icuSources/tools/genbidi/Makefile.in b/icuSources/tools/genbidi/Makefile.in new file mode 100644 index 00000000..5e006918 --- /dev/null +++ b/icuSources/tools/genbidi/Makefile.in @@ -0,0 +1,94 @@ +## Makefile.in for ICU - tools/genbidi +## Copyright (c) 1999-2005, International Business Machines Corporation and +## others. All Rights Reserved. +## Steven R. Loomis + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../.. + +include $(top_builddir)/icudefs.mk + +## Build directory information +subdir = tools/genbidi + +TARGET_STUB_NAME = genbidi + +SECTION = 8 + +#MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) $(MAN_FILES) + +## Target information +TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) + +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) + +OBJECTS = genbidi.o store.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) $(MAN_FILES) + +install-local: all-local install-man + +install-man: $(MAN_FILES) +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(TARGET) $(OBJECTS) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: all-local + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(TARGET) : $(OBJECTS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif + diff --git a/icuSources/tools/genbidi/genbidi.c b/icuSources/tools/genbidi/genbidi.c new file mode 100644 index 00000000..4e21925f --- /dev/null +++ b/icuSources/tools/genbidi/genbidi.c @@ -0,0 +1,634 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: genbidi.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004dec30 +* created by: Markus W. Scherer +* +* This program reads several of the Unicode character database text files, +* parses them, and extracts the bidi/shaping properties for each character. +* It then writes a binary file containing the properties +* that is designed to be used directly for random-access to +* the properties of each Unicode character. +*/ + +#include <stdio.h> +#include "unicode/utypes.h" +#include "unicode/uchar.h" +#include "unicode/putil.h" +#include "unicode/uclean.h" +#include "cmemory.h" +#include "cstring.h" +#include "uarrsort.h" +#include "unewdata.h" +#include "uoptions.h" +#include "uparse.h" +#include "propsvec.h" +#include "ubidi_props.h" +#include "genbidi.h" + +#define LENGTHOF(array) (sizeof(array)/sizeof((array)[0])) + +/* data --------------------------------------------------------------------- */ + +uint32_t *pv; + +UBool beVerbose=FALSE, haveCopyright=TRUE; + +/* prototypes --------------------------------------------------------------- */ + +static UBool +isToken(const char *token, const char *s); + +static void +parseBidiMirroring(const char *filename, UErrorCode *pErrorCode); + +static void +parseDB(const char *filename, UErrorCode *pErrorCode); + +/* miscellaneous ------------------------------------------------------------ */ + +/* TODO: more common code, move functions to uparse.h|c */ + +static char * +trimTerminateField(char *s, char *limit) { + /* trim leading whitespace */ + s=(char *)u_skipWhitespace(s); + + /* trim trailing whitespace */ + while(s<limit && (*(limit-1)==' ' || *(limit-1)=='\t')) { + --limit; + } + *limit=0; + + return s; +} + +static void +parseTwoFieldFile(char *filename, char *basename, + const char *ucdFile, const char *suffix, + UParseLineFn *lineFn, + UErrorCode *pErrorCode) { + char *fields[2][2]; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return; + } + + writeUCDFilename(basename, ucdFile, suffix); + + u_parseDelimitedFile(filename, ';', fields, 2, lineFn, NULL, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + fprintf(stderr, "error parsing %s.txt: %s\n", ucdFile, u_errorName(*pErrorCode)); + } +} + +static void U_CALLCONV +bidiClassLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode); + +/* parse files with single enumerated properties ---------------------------- */ + +/* TODO: more common code, move functions to uparse.h|c */ + +struct SingleEnum { + const char *ucdFile, *propName; + UProperty prop; + int32_t vecWord, vecShift; + uint32_t vecMask; +}; +typedef struct SingleEnum SingleEnum; + +static void +parseSingleEnumFile(char *filename, char *basename, const char *suffix, + const SingleEnum *sen, + UErrorCode *pErrorCode); + +static const SingleEnum jtSingleEnum={ + "DerivedJoiningType", "joining type", + UCHAR_JOINING_TYPE, + 0, UBIDI_JT_SHIFT, UBIDI_JT_MASK +}; + +static const SingleEnum jgSingleEnum={ + "DerivedJoiningGroup", "joining group", + UCHAR_JOINING_GROUP, + 1, 0, 0xff /* column 1 bits 7..0 */ +}; + +static void U_CALLCONV +singleEnumLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode) { + const SingleEnum *sen; + char *s; + uint32_t start, limit, uv; + int32_t value; + + sen=(const SingleEnum *)context; + + u_parseCodePointRange(fields[0][0], &start, &limit, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + fprintf(stderr, "genbidi: syntax error in %s.txt field 0 at %s\n", sen->ucdFile, fields[0][0]); + exit(*pErrorCode); + } + ++limit; + + /* parse property alias */ + s=trimTerminateField(fields[1][0], fields[1][1]); + value=u_getPropertyValueEnum(sen->prop, s); + if(value<0) { + if(sen->prop==UCHAR_BLOCK) { + if(isToken("Greek", s)) { + value=UBLOCK_GREEK; /* Unicode 3.2 renames this to "Greek and Coptic" */ + } else if(isToken("Combining Marks for Symbols", s)) { + value=UBLOCK_COMBINING_MARKS_FOR_SYMBOLS; /* Unicode 3.2 renames this to "Combining Diacritical Marks for Symbols" */ + } else if(isToken("Private Use", s)) { + value=UBLOCK_PRIVATE_USE; /* Unicode 3.2 renames this to "Private Use Area" */ + } + } + } + if(value<0) { + fprintf(stderr, "genbidi error: unknown %s name in %s.txt field 1 at %s\n", + sen->propName, sen->ucdFile, s); + exit(U_PARSE_ERROR); + } + + uv=(uint32_t)(value<<sen->vecShift); + if((uv&sen->vecMask)!=uv) { + fprintf(stderr, "genbidi error: %s value overflow (0x%x) at %s\n", + sen->propName, (int)uv, s); + exit(U_INTERNAL_PROGRAM_ERROR); + } + + if(!upvec_setValue(pv, start, limit, sen->vecWord, uv, sen->vecMask, pErrorCode)) { + fprintf(stderr, "genbidi error: unable to set %s code: %s\n", + sen->propName, u_errorName(*pErrorCode)); + exit(*pErrorCode); + } +} + +static void +parseSingleEnumFile(char *filename, char *basename, const char *suffix, + const SingleEnum *sen, + UErrorCode *pErrorCode) { + char *fields[2][2]; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return; + } + + writeUCDFilename(basename, sen->ucdFile, suffix); + + u_parseDelimitedFile(filename, ';', fields, 2, singleEnumLineFn, (void *)sen, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + fprintf(stderr, "error parsing %s.txt: %s\n", sen->ucdFile, u_errorName(*pErrorCode)); + } +} + +/* parse files with multiple binary properties ------------------------------ */ + +/* TODO: more common code, move functions to uparse.h|c */ + +/* TODO: similar to genbidi/props2.c but not the same; same as in gencase/gencase.c */ + +struct Binary { + const char *propName; + int32_t vecWord; + uint32_t vecValue, vecMask; +}; +typedef struct Binary Binary; + +struct Binaries { + const char *ucdFile; + const Binary *binaries; + int32_t binariesCount; +}; +typedef struct Binaries Binaries; + +static const Binary +propListNames[]={ + { "Bidi_Control", 0, U_MASK(UBIDI_BIDI_CONTROL_SHIFT), U_MASK(UBIDI_BIDI_CONTROL_SHIFT) }, + { "Join_Control", 0, U_MASK(UBIDI_JOIN_CONTROL_SHIFT), U_MASK(UBIDI_JOIN_CONTROL_SHIFT) } +}; + +static const Binaries +propListBinaries={ + "PropList", propListNames, LENGTHOF(propListNames) +}; + +static void U_CALLCONV +binariesLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode) { + const Binaries *bin; + char *s; + uint32_t start, limit; + int32_t i; + + bin=(const Binaries *)context; + + u_parseCodePointRange(fields[0][0], &start, &limit, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + fprintf(stderr, "genbidi: syntax error in %s.txt field 0 at %s\n", bin->ucdFile, fields[0][0]); + exit(*pErrorCode); + } + ++limit; + + /* parse binary property name */ + s=(char *)u_skipWhitespace(fields[1][0]); + for(i=0;; ++i) { + if(i==bin->binariesCount) { + /* ignore unrecognized properties */ + return; + } + if(isToken(bin->binaries[i].propName, s)) { + break; + } + } + + if(bin->binaries[i].vecMask==0) { + fprintf(stderr, "genbidi error: mask value %d==0 for %s %s\n", + (int)bin->binaries[i].vecMask, bin->ucdFile, bin->binaries[i].propName); + exit(U_INTERNAL_PROGRAM_ERROR); + } + + if(!upvec_setValue(pv, start, limit, bin->binaries[i].vecWord, bin->binaries[i].vecValue, bin->binaries[i].vecMask, pErrorCode)) { + fprintf(stderr, "genbidi error: unable to set %s, code: %s\n", + bin->binaries[i].propName, u_errorName(*pErrorCode)); + exit(*pErrorCode); + } +} + +static void +parseBinariesFile(char *filename, char *basename, const char *suffix, + const Binaries *bin, + UErrorCode *pErrorCode) { + char *fields[2][2]; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return; + } + + writeUCDFilename(basename, bin->ucdFile, suffix); + + u_parseDelimitedFile(filename, ';', fields, 2, binariesLineFn, (void *)bin, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + fprintf(stderr, "error parsing %s.txt: %s\n", bin->ucdFile, u_errorName(*pErrorCode)); + } +} + +/* -------------------------------------------------------------------------- */ + +enum { + HELP_H, + HELP_QUESTION_MARK, + VERBOSE, + COPYRIGHT, + DESTDIR, + SOURCEDIR, + UNICODE_VERSION, + ICUDATADIR, + CSOURCE +}; + +/* Keep these values in sync with the above enums */ +static UOption options[]={ + UOPTION_HELP_H, + UOPTION_HELP_QUESTION_MARK, + UOPTION_VERBOSE, + UOPTION_COPYRIGHT, + UOPTION_DESTDIR, + UOPTION_SOURCEDIR, + UOPTION_DEF("unicode", 'u', UOPT_REQUIRES_ARG), + UOPTION_ICUDATADIR, + UOPTION_DEF("csource", 'C', UOPT_NO_ARG) +}; + +extern int +main(int argc, char* argv[]) { + char filename[300]; + const char *srcDir=NULL, *destDir=NULL, *suffix=NULL; + char *basename=NULL; + UErrorCode errorCode=U_ZERO_ERROR; + + U_MAIN_INIT_ARGS(argc, argv); + + /* preset then read command line options */ + options[DESTDIR].value=u_getDataDirectory(); + options[SOURCEDIR].value=""; + options[UNICODE_VERSION].value=""; + options[ICUDATADIR].value=u_getDataDirectory(); + argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); + + /* error handling, printing usage message */ + if(argc<0) { + fprintf(stderr, + "error in command line argument \"%s\"\n", + argv[-argc]); + } + if(argc<0 || options[HELP_H].doesOccur || options[HELP_QUESTION_MARK].doesOccur) { + /* + * Broken into chucks because the C89 standard says the minimum + * required supported string length is 509 bytes. + */ + fprintf(stderr, + "Usage: %s [-options] [suffix]\n" + "\n" + "read the UnicodeData.txt file and other Unicode properties files and\n" + "create a binary file " UBIDI_DATA_NAME "." UBIDI_DATA_TYPE " with the bidi/shaping properties\n" + "\n", + argv[0]); + fprintf(stderr, + "Options:\n" + "\t-h or -? or --help this usage text\n" + "\t-v or --verbose verbose output\n" + "\t-c or --copyright include a copyright notice\n" + "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n" + "\t-C or --csource generate a .c source file rather than the .icu binary\n"); + fprintf(stderr, + "\t-d or --destdir destination directory, followed by the path\n" + "\t-s or --sourcedir source directory, followed by the path\n" + "\t-i or --icudatadir directory for locating any needed intermediate data files,\n" + "\t followed by path, defaults to %s\n" + "\tsuffix suffix that is to be appended with a '-'\n" + "\t to the source file basenames before opening;\n" + "\t 'genbidi new' will read UnicodeData-new.txt etc.\n", + u_getDataDirectory()); + return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; + } + + /* get the options values */ + beVerbose=options[VERBOSE].doesOccur; + haveCopyright=options[COPYRIGHT].doesOccur; + srcDir=options[SOURCEDIR].value; + destDir=options[DESTDIR].value; + + if(argc>=2) { + suffix=argv[1]; + } else { + suffix=NULL; + } + + if(options[UNICODE_VERSION].doesOccur) { + setUnicodeVersion(options[UNICODE_VERSION].value); + } + /* else use the default dataVersion in store.c */ + + if (options[ICUDATADIR].doesOccur) { + u_setDataDirectory(options[ICUDATADIR].value); + } + + /* prepare the filename beginning with the source dir */ + uprv_strcpy(filename, srcDir); + basename=filename+uprv_strlen(filename); + if(basename>filename && *(basename-1)!=U_FILE_SEP_CHAR) { + *basename++=U_FILE_SEP_CHAR; + } + + /* initialize */ + pv=upvec_open(2, 10000); + + /* process BidiMirroring.txt */ + writeUCDFilename(basename, "BidiMirroring", suffix); + parseBidiMirroring(filename, &errorCode); + + /* process additional properties files */ + *basename=0; + + parseBinariesFile(filename, basename, suffix, &propListBinaries, &errorCode); + + parseSingleEnumFile(filename, basename, suffix, &jtSingleEnum, &errorCode); + + parseSingleEnumFile(filename, basename, suffix, &jgSingleEnum, &errorCode); + + /* process UnicodeData.txt */ + writeUCDFilename(basename, "UnicodeData", suffix); + parseDB(filename, &errorCode); + + /* set proper bidi class for unassigned code points (Cn) */ + parseTwoFieldFile(filename, basename, "DerivedBidiClass", suffix, bidiClassLineFn, &errorCode); + + /* process parsed data */ + if(U_SUCCESS(errorCode)) { + /* write the properties data file */ + generateData(destDir, options[CSOURCE].doesOccur); + } + + u_cleanup(); + return errorCode; +} + +U_CFUNC void +writeUCDFilename(char *basename, const char *filename, const char *suffix) { + int32_t length=(int32_t)uprv_strlen(filename); + uprv_strcpy(basename, filename); + if(suffix!=NULL) { + basename[length++]='-'; + uprv_strcpy(basename+length, suffix); + length+=(int32_t)uprv_strlen(suffix); + } + uprv_strcpy(basename+length, ".txt"); +} + +/* TODO: move to toolutil */ +static UBool +isToken(const char *token, const char *s) { + const char *z; + int32_t j; + + s=u_skipWhitespace(s); + for(j=0;; ++j) { + if(token[j]!=0) { + if(s[j]!=token[j]) { + break; + } + } else { + z=u_skipWhitespace(s+j); + if(*z==';' || *z==0) { + return TRUE; + } else { + break; + } + } + } + + return FALSE; +} + +/* parser for BidiMirroring.txt --------------------------------------------- */ + +static void U_CALLCONV +mirrorLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode) { + char *end; + UChar32 src, mirror; + + src=(UChar32)uprv_strtoul(fields[0][0], &end, 16); + if(end<=fields[0][0] || end!=fields[0][1]) { + fprintf(stderr, "genbidi: syntax error in BidiMirroring.txt field 0 at %s\n", fields[0][0]); + *pErrorCode=U_PARSE_ERROR; + exit(U_PARSE_ERROR); + } + + mirror=(UChar32)uprv_strtoul(fields[1][0], &end, 16); + if(end<=fields[1][0] || end!=fields[1][1]) { + fprintf(stderr, "genbidi: syntax error in BidiMirroring.txt field 1 at %s\n", fields[1][0]); + *pErrorCode=U_PARSE_ERROR; + exit(U_PARSE_ERROR); + } + + addMirror(src, mirror); +} + +static void +parseBidiMirroring(const char *filename, UErrorCode *pErrorCode) { + char *fields[2][2]; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return; + } + + u_parseDelimitedFile(filename, ';', fields, 2, mirrorLineFn, NULL, pErrorCode); +} + +/* parser for UnicodeData.txt ----------------------------------------------- */ + +static void U_CALLCONV +unicodeDataLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode) { + char *end; + UErrorCode errorCode; + UChar32 c; + + errorCode=U_ZERO_ERROR; + + /* get the character code, field 0 */ + c=(UChar32)uprv_strtoul(fields[0][0], &end, 16); + if(end<=fields[0][0] || end!=fields[0][1]) { + fprintf(stderr, "genbidi: syntax error in field 0 at %s\n", fields[0][0]); + *pErrorCode=U_PARSE_ERROR; + exit(U_PARSE_ERROR); + } + + /* get Mirrored flag, field 9 */ + if(*fields[9][0]=='Y') { + if(!upvec_setValue(pv, c, c+1, 0, U_MASK(UBIDI_IS_MIRRORED_SHIFT), U_MASK(UBIDI_IS_MIRRORED_SHIFT), &errorCode)) { + fprintf(stderr, "genbidi error: unable to set 'is mirrored' for U+%04lx, code: %s\n", + (long)c, u_errorName(errorCode)); + exit(errorCode); + } + } else if(fields[9][1]-fields[9][0]!=1 || *fields[9][0]!='N') { + fprintf(stderr, "genbidi: syntax error in field 9 at U+%04lx\n", + (long)c); + *pErrorCode=U_PARSE_ERROR; + exit(U_PARSE_ERROR); + } +} + +static void +parseDB(const char *filename, UErrorCode *pErrorCode) { + /* default Bidi classes for unassigned code points */ + static const UChar32 defaultBidi[][3]={ /* { start, end, class } */ + /* R: U+0590..U+05FF, U+07C0..U+08FF, U+FB1D..U+FB4F, U+10800..U+10FFF */ + { 0x0590, 0x05FF, U_RIGHT_TO_LEFT }, + { 0x07C0, 0x08FF, U_RIGHT_TO_LEFT }, + { 0xFB1D, 0xFB4F, U_RIGHT_TO_LEFT }, + { 0x10800, 0x10FFF, U_RIGHT_TO_LEFT }, + + /* AL: U+0600..U+07BF, U+FB50..U+FDCF, U+FDF0..U+FDFF, U+FE70..U+FEFE */ + { 0x0600, 0x07BF, U_RIGHT_TO_LEFT_ARABIC }, + { 0xFB50, 0xFDCF, U_RIGHT_TO_LEFT_ARABIC }, + { 0xFDF0, 0xFDFF, U_RIGHT_TO_LEFT_ARABIC }, + { 0xFE70, 0xFEFE, U_RIGHT_TO_LEFT_ARABIC } + + /* L otherwise */ + }; + + char *fields[15][2]; + UChar32 start, end; + int32_t i; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return; + } + + /* + * Set default Bidi classes for unassigned code points. + * See the documentation for Bidi_Class in UCD.html in the Unicode data. + * http://www.unicode.org/Public/ + * + * Starting with Unicode 5.0, DerivedBidiClass.txt should (re)set + * the Bidi_Class values for all code points including unassigned ones + * and including L values for these. + * This code becomes unnecesary but harmless. Leave it for now in case + * someone uses genbidi on pre-Unicode 5.0 data. + */ + for(i=0; i<LENGTHOF(defaultBidi); ++i) { + start=defaultBidi[i][0]; + end=defaultBidi[i][1]; + if(!upvec_setValue(pv, start, end+1, 0, (uint32_t)defaultBidi[i][2], UBIDI_CLASS_MASK, pErrorCode)) { + fprintf(stderr, "genbidi error: unable to set default bidi class for U+%04lx..U+%04lx, code: %s\n", + (long)start, (long)end, u_errorName(*pErrorCode)); + exit(*pErrorCode); + } + } + + u_parseDelimitedFile(filename, ';', fields, 15, unicodeDataLineFn, NULL, pErrorCode); + + if(U_FAILURE(*pErrorCode)) { + return; + } +} + +/* DerivedBidiClass.txt ----------------------------------------------------- */ + +static void U_CALLCONV +bidiClassLineFn(void *context, + char *fields[][2], int32_t fieldCount, + UErrorCode *pErrorCode) { + char *s; + uint32_t start, limit, value; + + /* get the code point range */ + u_parseCodePointRange(fields[0][0], &start, &limit, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + fprintf(stderr, "genbidi: syntax error in DerivedBidiClass.txt field 0 at %s\n", fields[0][0]); + exit(*pErrorCode); + } + ++limit; + + /* parse bidi class */ + s=trimTerminateField(fields[1][0], fields[1][1]); + value=u_getPropertyValueEnum(UCHAR_BIDI_CLASS, s); + if((int32_t)value<0) { + fprintf(stderr, "genbidi error: unknown bidi class in DerivedBidiClass.txt field 1 at %s\n", s); + exit(U_PARSE_ERROR); + } + + if(!upvec_setValue(pv, start, limit, 0, value, UBIDI_CLASS_MASK, pErrorCode)) { + fprintf(stderr, "genbidi error: unable to set derived bidi class for U+%04x..U+%04x - %s\n", + (int)start, (int)limit-1, u_errorName(*pErrorCode)); + exit(*pErrorCode); + } +} + +/* + * Hey, Emacs, please set the following: + * + * Local Variables: + * indent-tabs-mode: nil + * End: + * + */ diff --git a/icuSources/tools/genbidi/genbidi.h b/icuSources/tools/genbidi/genbidi.h new file mode 100644 index 00000000..a6fc8d57 --- /dev/null +++ b/icuSources/tools/genbidi/genbidi.h @@ -0,0 +1,47 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: genbidi.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004dec30 +* created by: Markus W. Scherer +*/ + +#ifndef __GENBIDI_H__ +#define __GENBIDI_H__ + +#include "unicode/utypes.h" + +U_CDECL_BEGIN + +/* genbidi ------------------------------------------------------------------ */ + +/* global flags */ +extern UBool beVerbose, haveCopyright; + +/* properties vectors in genbidi.c */ +extern uint32_t *pv; + +/* prototypes */ +U_CFUNC void +writeUCDFilename(char *basename, const char *filename, const char *suffix); + +extern void +setUnicodeVersion(const char *v); + +extern void +addMirror(UChar32 src, UChar32 mirror); + +extern void +generateData(const char *dataDir, UBool csource); + +U_CDECL_END + +#endif diff --git a/icuSources/tools/genbidi/genbidi.vcproj b/icuSources/tools/genbidi/genbidi.vcproj new file mode 100644 index 00000000..71292b4e --- /dev/null +++ b/icuSources/tools/genbidi/genbidi.vcproj @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="genbidi" + ProjectGUID="{DB312A49-12A9-4E07-9E96-451DC2D8FF62}" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" + PrecompiledHeaderFile=".\Release/genbidi.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool" + CommandLine="copy "$(TargetPath)" ..\..\..\bin +" + Outputs="..\..\..\bin\$(TargetFileName)"/> + <Tool + Name="VCLinkerTool" + OutputFile=".\Release/genbidi.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + ProgramDatabaseFile=".\Release/genbidi.pdb" + SubSystem="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/genbidi.tlb"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + BufferSecurityCheck="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" + PrecompiledHeaderFile=".\Debug/genbidi.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool" + CommandLine="copy "$(TargetPath)" ..\..\..\bin +" + Outputs="..\..\..\bin\$(TargetFileName)"/> + <Tool + Name="VCLinkerTool" + OutputFile=".\Debug/genbidi.exe" + LinkIncremental="2" + SuppressStartupBanner="TRUE" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/genbidi.pdb" + SubSystem="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/genbidi.tlb"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="c;cpp;rc"> + <File + RelativePath=".\genbidi.c"> + </File> + <File + RelativePath=".\store.c"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h"> + <File + RelativePath=".\genbidi.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/tools/genbidi/store.c b/icuSources/tools/genbidi/store.c new file mode 100644 index 00000000..9a5b5bb1 --- /dev/null +++ b/icuSources/tools/genbidi/store.c @@ -0,0 +1,469 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: store.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004dec30 +* created by: Markus W. Scherer +* +* Store Unicode bidi/shaping properties efficiently for +* random access. +*/ + +#include <stdio.h> +#include <stdlib.h> +#include "unicode/utypes.h" +#include "unicode/uchar.h" +#include "cmemory.h" +#include "cstring.h" +#include "utrie.h" +#include "uarrsort.h" +#include "unicode/udata.h" +#include "unewdata.h" +#include "propsvec.h" +#include "writesrc.h" +#include "ubidi_props.h" +#include "genbidi.h" + +#define LENGTHOF(array) (sizeof(array)/sizeof((array)[0])) + +/* Unicode bidi/shaping properties file format --------------------------------- + +The file format prepared and written here contains several data +structures that store indexes or data. + +Before the data contents described below, there are the headers required by +the udata API for loading ICU data. Especially, a UDataInfo structure +precedes the actual data. It contains platform properties values and the +file format version. + +The following is a description of format version 1.0 . + +The file contains the following structures: + + const int32_t indexes[i0] with values i0, i1, ...: + (see UBIDI_IX_... constants for names of indexes) + + i0 indexLength; -- length of indexes[] (UBIDI_IX_TOP) + i1 dataLength; -- length in bytes of the post-header data (incl. indexes[]) + i2 trieSize; -- size in bytes of the bidi/shaping properties trie + i3 mirrorLength; -- length in uint32_t of the bidi mirroring array + + i4 jgStart; -- first code point with Joining_Group data + i5 jgLimit; -- limit code point for Joining_Group data + + i6..i14 reservedIndexes; -- reserved values; 0 for now + + i15 maxValues; -- maximum code values for enumerated properties + bits 23..16 contain the max value for Joining_Group, + otherwise the bits are used like enum fields in the trie word + + Serialized trie, see utrie.h; + + const uint32_t mirrors[mirrorLength]; + + const uint8_t jgArray[i5-i4]; -- (i5-i4) is always a multiple of 4 + +Trie data word: +Bits +15..13 signed delta to bidi mirroring code point + (add delta to input code point) + 0 no such code point (source maps to itself) + -3..-1, 1..3 delta + -4 look in mirrors table + 12 is mirrored + 11 Bidi_Control + 10 Join_Control + 9.. 8 reserved (set to 0) + 7.. 5 Joining_Type + 4.. 0 BiDi category + + +Mirrors: +Stores some of the bidi mirroring data, where each code point maps to +at most one other. +Most code points do not have a mirroring code point; most that do have a signed +delta stored in the trie data value. Only those where the delta does not fit +into the trie data are stored in this table. + +Logically, this is a two-column table with source and mirror code points. + +Physically, the table is compressed by taking advantage of the fact that each +mirror code point is also a source code point +(each of them is a mirror of the other). +Therefore, both logical columns contain the same set of code points, which needs +to be stored only once. + +The table stores source code points, and also for each the index of its mirror +code point in the same table, in a simple array of uint32_t. +Bits +31..21 index to mirror code point (unsigned) +20.. 0 source code point + +The table is sorted by source code points. + + +Joining_Group array: +The Joining_Group values do not fit into the 16-bit trie, but the data is also +limited to a small range of code points (Arabic and Syriac) and not +well compressible. + +The start and limit code points for the range are stored in the indexes[] +array, and the jgArray[] stores a byte for each of these code points, +containing the Joining_Group value. + +All code points outside of this range have No_Joining_Group (0). + +----------------------------------------------------------------------------- */ + +/* UDataInfo cf. udata.h */ +static UDataInfo dataInfo={ + sizeof(UDataInfo), + 0, + + U_IS_BIG_ENDIAN, + U_CHARSET_FAMILY, + U_SIZEOF_UCHAR, + 0, + + /* dataFormat="BiDi" */ + { UBIDI_FMT_0, UBIDI_FMT_1, UBIDI_FMT_2, UBIDI_FMT_3 }, + { 1, 0, UTRIE_SHIFT, UTRIE_INDEX_SHIFT }, /* formatVersion */ + { 4, 0, 1, 0 } /* dataVersion */ +}; + +/* exceptions values */ +static uint32_t mirrors[UBIDI_MAX_MIRROR_INDEX+1][2]; +static uint16_t mirrorTop=0; + +/* -------------------------------------------------------------------------- */ + +extern void +setUnicodeVersion(const char *v) { + UVersionInfo version; + u_versionFromString(version, v); + uprv_memcpy(dataInfo.dataVersion, version, 4); +} + +/* bidi mirroring table ----------------------------------------------------- */ + +extern void +addMirror(UChar32 src, UChar32 mirror) { + UErrorCode errorCode; + int32_t delta; + + delta=mirror-src; + if(delta==0) { + return; /* mapping to self=no mapping */ + } + + if(delta<UBIDI_MIN_MIRROR_DELTA || UBIDI_MAX_MIRROR_DELTA<delta) { + /* delta does not fit into the trie properties value, store in the mirrors[] table */ + if(mirrorTop==LENGTHOF(mirrors)) { + fprintf(stderr, "genbidi error: too many long-distance mirroring mappings\n"); + exit(U_BUFFER_OVERFLOW_ERROR); + } + + /* possible: search the table so far and see if src is already listed */ + + mirrors[mirrorTop][0]=(uint32_t)src; + mirrors[mirrorTop][1]=(uint32_t)mirror; + ++mirrorTop; + + /* set an escape marker in src's properties */ + delta=UBIDI_ESC_MIRROR_DELTA; + } + + errorCode=U_ZERO_ERROR; + if( + !upvec_setValue( + pv, src, src+1, 0, + (uint32_t)delta<<UBIDI_MIRROR_DELTA_SHIFT, (uint32_t)(-1)<<UBIDI_MIRROR_DELTA_SHIFT, + &errorCode) + ) { + fprintf(stderr, "genbidi error: unable to set mirroring delta, code: %s\n", + u_errorName(errorCode)); + exit(errorCode); + } +} + +static int32_t U_CALLCONV +compareMirror(const void *context, const void *left, const void *right) { + UChar32 l, r; + + l=UBIDI_GET_MIRROR_CODE_POINT(((const uint32_t *)left)[0]); + r=UBIDI_GET_MIRROR_CODE_POINT(((const uint32_t *)right)[0]); + return l-r; +} + +static void +makeMirror() { + uint32_t *reducedMirror; + UErrorCode errorCode; + int32_t i, j, start, limit, step; + uint32_t c; + + /* sort the mirroring table by source code points */ + errorCode=U_ZERO_ERROR; + uprv_sortArray(mirrors, mirrorTop, 8, + compareMirror, NULL, FALSE, &errorCode); + + /* + * reduce the 2-column table to a single column + * by putting the index to the mirror entry into the source entry + * + * first: + * find each mirror code point in the source column and set each other's indexes + * + * second: + * reduce the table, combine the source code points with their indexes + * and store as a simple array of uint32_t + */ + for(i=0; i<mirrorTop; ++i) { + c=mirrors[i][1]; /* mirror code point */ + if(c>0x1fffff) { + continue; /* this entry already has an index */ + } + + /* search for the mirror code point in the source column */ + if(c<mirrors[i][0]) { + /* search before i */ + start=i-1; + limit=-1; + step=-1; + } else { + start=i+1; + limit=mirrorTop; + step=1; + } + + for(j=start;; j+=step) { + if(j==limit) { + fprintf(stderr, + "genbidi error: bidi mirror does not roundtrip - %04lx->%04lx->?\n", + (long)mirrors[i][0], (long)mirrors[i][1]); + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + } + if(c==mirrors[j][0]) { + /* + * found the mirror code point c in the source column, + * set both entries' indexes to each other + */ + if(UBIDI_GET_MIRROR_CODE_POINT(mirrors[i][0])!=UBIDI_GET_MIRROR_CODE_POINT(mirrors[j][1])) { + /* roundtrip check fails */ + fprintf(stderr, + "genbidi error: bidi mirrors do not roundtrip - %04lx->%04lx->%04lx\n", + (long)mirrors[i][0], (long)mirrors[i][1], (long)mirrors[j][1]); + errorCode=U_ILLEGAL_ARGUMENT_ERROR; + } else { + mirrors[i][1]|=(uint32_t)j<<UBIDI_MIRROR_INDEX_SHIFT; + mirrors[j][1]|=(uint32_t)i<<UBIDI_MIRROR_INDEX_SHIFT; + } + break; + } + } + } + + /* now the second step, the actual reduction of the table */ + reducedMirror=mirrors[0]; + for(i=0; i<mirrorTop; ++i) { + reducedMirror[i]=mirrors[i][0]|(mirrors[i][1]&~0x1fffff); + } + + if(U_FAILURE(errorCode)) { + exit(errorCode); + } +} + +/* generate output data ----------------------------------------------------- */ + +extern void +generateData(const char *dataDir, UBool csource) { + static int32_t indexes[UBIDI_IX_TOP]={ + UBIDI_IX_TOP + }; + static uint8_t trieBlock[40000]; + static uint8_t jgArray[0x300]; /* at most for U+0600..U+08FF */ + + const uint32_t *row; + UChar32 start, limit, prev, jgStart; + int32_t i; + + UNewDataMemory *pData; + UNewTrie *pTrie; + UErrorCode errorCode=U_ZERO_ERROR; + int32_t trieSize; + long dataLength; + + makeMirror(); + + pTrie=utrie_open(NULL, NULL, 20000, 0, 0, TRUE); + if(pTrie==NULL) { + fprintf(stderr, "genbidi error: unable to create a UNewTrie\n"); + exit(U_MEMORY_ALLOCATION_ERROR); + } + + prev=jgStart=0; + for(i=0; (row=upvec_getRow(pv, i, &start, &limit))!=NULL; ++i) { + /* store most values from vector column 0 in the trie */ + if(!utrie_setRange32(pTrie, start, limit, *row, TRUE)) { + fprintf(stderr, "genbidi error: unable to set trie value (overflow)\n"); + exit(U_BUFFER_OVERFLOW_ERROR); + } + + /* store Joining_Group values from vector column 1 in a simple byte array */ + if(row[1]!=0) { + if(start<0x600 || 0x900<=limit) { + fprintf(stderr, "genbidi error: Joining_Group for out-of-range code points U+%04lx..U+%04lx\n", + (long)start, (long)limit); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } + + if(prev==0) { + /* first code point with any value */ + prev=jgStart=start; + } else { + /* add No_Joining_Group for code points between prev and start */ + while(prev<start) { + jgArray[prev++ -jgStart]=0; + } + } + + /* set Joining_Group value for start..limit */ + while(prev<limit) { + jgArray[prev++ -jgStart]=(uint8_t)row[1]; + } + } + } + + /* finish jgArray, pad to multiple of 4 */ + while((prev-jgStart)&3) { + jgArray[prev++ -jgStart]=0; + } + indexes[UBIDI_IX_JG_START]=jgStart; + indexes[UBIDI_IX_JG_LIMIT]=prev; + + trieSize=utrie_serialize(pTrie, trieBlock, sizeof(trieBlock), NULL, TRUE, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "genbidi error: utrie_serialize failed: %s (length %ld)\n", u_errorName(errorCode), (long)trieSize); + exit(errorCode); + } + + indexes[UBIDI_IX_TRIE_SIZE]=trieSize; + indexes[UBIDI_IX_MIRROR_LENGTH]=mirrorTop; + indexes[UBIDI_IX_LENGTH]= + (int32_t)sizeof(indexes)+ + trieSize+ + 4*mirrorTop+ + (prev-jgStart); + + if(beVerbose) { + printf("trie size in bytes: %5d\n", (int)trieSize); + printf("size in bytes of mirroring table: %5d\n", (int)(4*mirrorTop)); + printf("length of Joining_Group array: %5d (U+%04x..U+%04x)\n", (int)(prev-jgStart), (int)jgStart, (int)(prev-1)); + printf("data size: %5d\n", (int)indexes[UBIDI_IX_LENGTH]); + } + + indexes[UBIDI_MAX_VALUES_INDEX]= + ((int32_t)U_CHAR_DIRECTION_COUNT-1)| + (((int32_t)U_JT_COUNT-1)<<UBIDI_JT_SHIFT)| + (((int32_t)U_JG_COUNT-1)<<UBIDI_MAX_JG_SHIFT); + + if(csource) { + /* write .c file for hardcoded data */ + UTrie trie={ NULL }; + FILE *f; + + utrie_unserialize(&trie, trieBlock, trieSize, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf( + stderr, + "genbidi error: failed to utrie_unserialize(ubidi.icu trie) - %s\n", + u_errorName(errorCode)); + return; + } + + f=usrc_create(dataDir, "ubidi_props_data.c"); + if(f!=NULL) { + usrc_writeArray(f, + "static const UVersionInfo ubidi_props_dataVersion={", + dataInfo.dataVersion, 8, 4, + "};\n\n"); + usrc_writeArray(f, + "static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={", + indexes, 32, UBIDI_IX_TOP, + "};\n\n"); + usrc_writeUTrieArrays(f, + "static const uint16_t ubidi_props_trieIndex[%ld]={\n", NULL, + &trie, + "\n};\n\n"); + usrc_writeArray(f, + "static const uint32_t ubidi_props_mirrors[%ld]={\n", + mirrors, 32, mirrorTop, + "\n};\n\n"); + usrc_writeArray(f, + "static const uint8_t ubidi_props_jgArray[%ld]={\n", + jgArray, 8, prev-jgStart, + "\n};\n\n"); + fputs( + "static const UBiDiProps ubidi_props_singleton={\n" + " NULL,\n" + " ubidi_props_indexes,\n" + " ubidi_props_mirrors,\n" + " ubidi_props_jgArray,\n", + f); + usrc_writeUTrieStruct(f, + " {\n", + &trie, "ubidi_props_trieIndex", NULL, NULL, + " },\n"); + usrc_writeArray(f, " { ", dataInfo.formatVersion, 8, 4, " }\n"); + fputs("};\n", f); + fclose(f); + } + } else { + /* write the data */ + pData=udata_create(dataDir, UBIDI_DATA_TYPE, UBIDI_DATA_NAME, &dataInfo, + haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "genbidi: unable to create data memory, %s\n", u_errorName(errorCode)); + exit(errorCode); + } + + udata_writeBlock(pData, indexes, sizeof(indexes)); + udata_writeBlock(pData, trieBlock, trieSize); + udata_writeBlock(pData, mirrors, 4*mirrorTop); + udata_writeBlock(pData, jgArray, prev-jgStart); + + /* finish up */ + dataLength=udata_finish(pData, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "genbidi: error %d writing the output file\n", errorCode); + exit(errorCode); + } + + if(dataLength!=indexes[UBIDI_IX_LENGTH]) { + fprintf(stderr, "genbidi: data length %ld != calculated size %d\n", + dataLength, (int)indexes[UBIDI_IX_LENGTH]); + exit(U_INTERNAL_PROGRAM_ERROR); + } + } + + utrie_close(pTrie); + upvec_close(pv); +} + +/* + * Hey, Emacs, please set the following: + * + * Local Variables: + * indent-tabs-mode: nil + * End: + * + */ diff --git a/icuSources/tools/genbrk/Makefile.in b/icuSources/tools/genbrk/Makefile.in index 489e70a9..f9b58919 100644 --- a/icuSources/tools/genbrk/Makefile.in +++ b/icuSources/tools/genbrk/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/genbrk -## Copyright (c) 2002-2004 International Business Machines Corporation and +## Copyright (c) 2002-2006 International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -10,7 +10,8 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/genbrk TARGET_STUB_NAME = genbrk @@ -18,17 +19,18 @@ SECTION = 1 MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/genbrk ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(MAN_FILES) $(DEPS) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = genbrk.o @@ -36,8 +38,7 @@ DEPS = $(OBJECTS:.o=.d) ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -50,15 +51,19 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) +all-local: $(TARGET) $(MAN_FILES) -install-local: all-local +install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + dist-local: -clean-local: +clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) $(RMV) $(TARGET) $(OBJECTS) @@ -72,22 +77,13 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) - - -# the 'mv' will always fail if you are building in the source dir + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) %.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -# build postscript and pdf formats -$(TARGET).ps: $(TARGET).$(SECTION) - groff -man < $< > $@ - -$(TARGET).pdf: $(TARGET).ps - ps2pdf $< $@ ifeq (,$(MAKECMDGOALS)) -include $(DEPS) diff --git a/icuSources/tools/genbrk/genbrk.1.in b/icuSources/tools/genbrk/genbrk.1.in new file mode 100644 index 00000000..79dbfea0 --- /dev/null +++ b/icuSources/tools/genbrk/genbrk.1.in @@ -0,0 +1,112 @@ +.\" Hey, Emacs! This is -*-nroff-*- you know... +.\" +.\" genbrk.1: manual page for the genbrk utility +.\" +.\" Copyright (C) 2005-2006 IBM, Inc. and others. +.\" +.TH GENBRK 1 "2 December 2005" "ICU MANPAGE" "ICU @VERSION@ Manual" +.SH NAME +.B genbrk +\- Compiles ICU break iteration rules source files into binary data files +.SH SYNOPSIS +.B genbrk +[ +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +] +[ +.BR "\-V\fP, \fB\-\-version" +] +[ +.BR "\-c\fP, \fB\-\-copyright" +] +[ +.BR "\-v\fP, \fB\-\-verbose" +] +[ +.BI "\-d\fP, \fB\-\-destdir" " destination" +] +[ +.BI "\-i\fP, \fB\-\-icudatadir" " directory" +] +.BI "\-r\fP, \fB\-\-rules" " rule\-file" +.BI "\-o\fP, \fB\-\-out" " output\-file" +.SH DESCRIPTION +.B genbrk +reads the break (boundary) rule source code from +.I rule-file +and creates a break iteration data file. Normally this data file has the +.B .brk +extension. +.PP +The details of the rule syntax can be found in ICU's User Guide. +.SH OPTIONS +.TP +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +Print help about usage and exit. +.TP +.BR "\-V\fP, \fB\-\-version" +Print the version of +.B genbrk +and exit. +.TP +.BR "\-c\fP, \fB\-\-copyright" +Embeds the standard ICU copyright into the +.IR output-file . +.TP +.BR "\-v\fP, \fB\-\-verbose" +Display extra informative messages during execution. +.TP +.BI "\-d\fP, \fB\-\-destdir" " destination" +Set the destination directory of the +.IR output-file +to +.IR destination . +.TP +.BI "\-i\fP, \fB\-\-icudatadir" " directory" +Look for any necessary ICU data files in +.IR directory . +For example, the file +.B pnames.icu +must be located when ICU's data is not built as a shared library. +The default ICU data directory is specified by the environment variable +.BR ICU_DATA . +Most configurations of ICU do not require this argument. +.TP +.BI "\-r\fP, \fB\-\-rules" " rule\-file" +The source file to read. +.TP +.BI "\-o\fP, \fB\-\-out" " output\-file" +The output data file to write. +.SH CAVEATS +When the +.IR rule-file +contains a byte order mark (BOM) at the beginning of the file, which is the Unicode character +.B U+FEFF, +then the +.IR rule-file +is interpreted as Unicode. Without the BOM, +the file is interpreted in the current operating system default codepage. +In order to eliminate any ambiguity of the encoding for how the +.IR rule-file +was written, it is recommended that you write this file in UTF-8 +with the BOM. +.SH ENVIRONMENT +.TP 10 +.B ICU_DATA +Specifies the directory containing ICU data. Defaults to +.BR @thepkgicudatadir@/@PACKAGE@/@VERSION@/ . +Some tools in ICU depend on the presence of the trailing slash. It is thus +important to make sure that it is present if +.B ICU_DATA +is set. +.SH AUTHORS +George Rhoten +.br +Andy Heninger +.SH VERSION +1.0 +.SH COPYRIGHT +Copyright (C) 2005 IBM, Inc. and others. +.SH SEE ALSO +.BR http://icu.sourceforge.net/userguide/boundaryAnalysis.html + diff --git a/icuSources/tools/genbrk/genbrk.cpp b/icuSources/tools/genbrk/genbrk.cpp index 2ca7a4df..c6ca76e2 100644 --- a/icuSources/tools/genbrk/genbrk.cpp +++ b/icuSources/tools/genbrk/genbrk.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -37,13 +37,13 @@ #include "uoptions.h" #include "unewdata.h" #include "ucmndata.h" +#include "rbbidata.h" +#include "cmemory.h" #include <stdio.h> #include <stdlib.h> #include <string.h> -#define DATA_TYPE "brk" - static char *progName; static UOption options[]={ UOPTION_HELP_H, /* 0 */ @@ -108,8 +108,10 @@ DataHeader dh ={ 0, // reserved { 0x42, 0x72, 0x6b, 0x20 }, // dataFormat="Brk " - { 3, 0, 0, 0 }, // formatVersion - { 4, 0, 0, 0 } // dataVersion (Unicode version) + { 0xff, 0, 0, 0 }, // formatVersion. Filled in later with values + // from the RBBI rule builder. The values declared + // here should never appear in any real RBBI data. + { 4, 1, 0, 0 } // dataVersion (Unicode version) }}; #endif @@ -175,35 +177,14 @@ int main(int argc, char **argv) { #if UCONFIG_NO_BREAK_ITERATION UNewDataMemory *pData; - char msg[2048], folder[2048], name[32]; - char *basename; - int length; - - /* split the outFileName into folder + name + type */ - strcpy(folder, outFileName); - basename = strrchr(folder, U_FILE_SEP_CHAR); - if(basename == NULL) { - basename = folder; - } else { - ++basename; - } - - /* copy the data name and remove it from the folder */ - strcpy(name, basename); - *basename = 0; + char msg[1024]; /* write message with just the name */ - sprintf(msg, "genbrk writes dummy %s because of UCONFIG_NO_BREAK_ITERATION, see uconfig.h", name); + sprintf(msg, "genbrk writes dummy %s because of UCONFIG_NO_BREAK_ITERATION, see uconfig.h", outFileName); fprintf(stderr, "%s\n", msg); - /* remove the type suffix (hardcode to DATA_TYPE) */ - length = strlen(name); - if(length > 4 && name[length - 4] == '.') { - name[length - 4] = 0; - } - /* write the dummy data file */ - pData = udata_create(folder, DATA_TYPE, name, &dummyDataInfo, NULL, &status); + pData = udata_create(outDir, NULL, outFileName, &dummyDataInfo, NULL, &status); udata_writeBlock(pData, msg, strlen(msg)); udata_finish(pData, &status); return (int)status; @@ -318,6 +299,8 @@ int main(int argc, char **argv) { const uint8_t *outData; outData = bi->getBinaryRules(outDataSize); + // Copy the data format version numbers from the RBBI data header into the UDataMemory header. + uprv_memcpy(dh.info.formatVersion, ((RBBIDataHeader *)outData)->fFormatVersion, sizeof(dh.info.formatVersion)); // // Create the output file @@ -330,6 +313,8 @@ int main(int argc, char **argv) { outFileName, u_errorName(status)); exit(status); } + + // Write the data itself. udata_writeBlock(pData, outData, outDataSize); // finish up diff --git a/icuSources/tools/genbrk/genbrk.dsp b/icuSources/tools/genbrk/genbrk.dsp deleted file mode 100644 index 8cb33549..00000000 --- a/icuSources/tools/genbrk/genbrk.dsp +++ /dev/null @@ -1,200 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genbrk" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genbrk - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "genbrk.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "genbrk.mak" CFG="genbrk - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genbrk - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genbrk - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "genbrk - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genbrk - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genbrk - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\genbrk.exe -InputPath=.\Release\genbrk.exe -InputName=genbrk -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genbrk - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\genbrk.exe -InputPath=.\Debug\genbrk.exe -InputName=genbrk -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genbrk - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\genbrk.exe -InputPath=.\Release\genbrk.exe -InputName=genbrk -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genbrk - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Zm600 /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\genbrk.exe -InputPath=.\Debug\genbrk.exe -InputName=genbrk -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "genbrk - Win32 Release" -# Name "genbrk - Win32 Debug" -# Name "genbrk - Win64 Release" -# Name "genbrk - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\genbrk.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/genbrk/genbrk.vcproj b/icuSources/tools/genbrk/genbrk.vcproj index 24018853..721a379e 100644 --- a/icuSources/tools/genbrk/genbrk.vcproj +++ b/icuSources/tools/genbrk/genbrk.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\..\i18n,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/genbrk.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\..\i18n,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/genbrk.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gencase/Makefile.in b/icuSources/tools/gencase/Makefile.in index 0125abd6..2a537055 100644 --- a/icuSources/tools/gencase/Makefile.in +++ b/icuSources/tools/gencase/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/gencase -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -11,16 +11,15 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/gencase TARGET_STUB_NAME = gencase SECTION = 8 -MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) +#MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/gencase ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) $(MAN_FILES) @@ -28,17 +27,19 @@ CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gencase.o store.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -54,24 +55,10 @@ check: all check-local all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man - $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) - $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) -# man page install-man: $(MAN_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $< $(DESTDIR)$(mandir)/man$(SECTION) - -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -# build postscript and pdf formats -#$(TARGET).ps: $(TARGET).$(SECTION) -# groff -man < $< > $@ - -#$(TARGET).pdf: $(TARGET).ps -# ps2pdf $< $@ +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: @@ -89,7 +76,13 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -98,3 +91,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/gencase/gencase.8.in b/icuSources/tools/gencase/gencase.8.in deleted file mode 100644 index af93f656..00000000 --- a/icuSources/tools/gencase/gencase.8.in +++ /dev/null @@ -1,136 +0,0 @@ -.\" Hey, Emacs! This is -*-nroff-*- you know... -.\" -.\" gencase.8: manual page for the gencase utility -.\" -.\" Copyright (C) 2004 IBM, Inc. and others. -.\" -.TH GENCASE 8 "16 September 2004" "ICU MANPAGE" "ICU @VERSION@ Manual" -.SH NAME -.B gencase -\- compile case mapping properties from the Unicode Character Database -.SH SYNOPSIS -.B gencase -[ -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -] -[ -.BR "\-v\fP, \fB\-\-verbose" -] -[ -.BI "\-u\fP, \fB\-\-unicode" " version" -] -[ -.BI "\-c\fP, \fB\-\-copyright" -] -[ -.BI "\-s\fP, \fB\-\-sourcedir" " source" -] -[ -.BI "\-d\fP, \fB\-\-destdir" " destination" -] -[ -.BI "\-i\fP, \fB\-\-icudatadir" " path" -] -[ -.I suffix -] -.SH DESCRIPTION -.B gencase -reads some of the Unicode Character Database files and compiles their -information information into a binary form. -The resulting file, -.BR ucase.icu , -can then be read directly by ICU, or used by -.BR pkgdata (8) -for incorporation into a larger archive or library. -.LP -The files read by -.B gencase -are described in the -.B FILES -section. If -.I suffix -is passed on the command line, the names of these files will actually -be changed to include a dash followed by -.I suffix -in their basename. For example, the file -.B UnicodeData.txt -would be looked for under the name -.BR UnicodeData\-\fIsuffix\fP.txt . -.SH OPTIONS -.TP -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -Print help about usage and exit. -.TP -.BR "\-v\fP, \fB\-\-verbose" -Display extra informative messages during execution. -.TP -.BI "\-u\fP, \fB\-\-unicode" " version" -Specify which -.I version -of Unicode the Unicode Character Database refers to. -Defaults to -.BR 3.0.0 . -.TP -.BI "\-c\fP, \fB\-\-copyright" -Include a copyright notice into the binary data. -.TP -.BI "\-s\fP, \fB\-\-sourcedir" " source" -Set the source directory to -.IR source . -The default source directory is the current working directory. -.TP -.BI "\-d\fP, \fB\-\-destdir" " destination" -Set the destination directory to -.IR destination . -The default destination directory is specified by the environment variable -.BR ICU_DATA . -.TP -.BI "\-i\fP, \fB\-\-icudatadir" " path" -Set the directory for loading ICU data files to -.IR path . -The default ICU data directory is specified by the environment variable -.BR ICU_DATA . -.SH ENVIRONMENT -.TP 10 -.B ICU_DATA -Specifies the directory containing ICU data. Defaults to -.BR @thepkgicudatadir@/@PACKAGE@/@VERSION@/ . -Some tools in ICU depend on the presence of the trailing slash. It is thus -important to make sure that it is present if -.B ICU_DATA -is set. -.SH FILES -The following files are read by -.B gencase -and are looked for in the -.I source -directory. -.TP 20 -.B UnicodeData.txt -The main file in the Unicode Character Database. Contains character -properties, combining classes information, decompositions, names, -etc.\|.\|.. -.TP -.B PropList.txt -Listing of auxiliary binary character properties. -.TP -.B DerivedCoreProperties.txt -Derived binary properties, generated by Unicode from other files. -.TP -.B SpecialCasing.txt -List of properties required for full case mapping. -.TP -.B CaseFolding.txt -Mapping from characters to their case-folded forms. (Note: this file -is derived from -.B UnicodeData.txt -and -.B SpecialCasing.txt -when generated by the Unicode Consortium.) -.SH VERSION -@VERSION@ -.SH COPYRIGHT -Copyright (C) 2004 IBM, Inc. and others. -.SH SEE ALSO -.BR pkgdata (8) diff --git a/icuSources/tools/gencase/gencase.c b/icuSources/tools/gencase/gencase.c index a49b73c1..af54e9d8 100644 --- a/icuSources/tools/gencase/gencase.c +++ b/icuSources/tools/gencase/gencase.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -104,6 +104,17 @@ derCorePropsBinaries={ "DerivedCoreProperties", derCorePropsNames, LENGTHOF(derCorePropsNames) }; +/* treat Word_Break=MidLetter as a binary property (we ignore all other Word_Break values) */ +static const Binary +wordBreakNames[]={ + { "MidLetter", 1, U_MASK(UGENCASE_IS_MID_LETTER_SHIFT), U_MASK(UGENCASE_IS_MID_LETTER_SHIFT) } +}; + +static const Binaries +wordBreakBinaries={ + "WordBreakProperty", wordBreakNames, LENGTHOF(wordBreakNames) +}; + static void U_CALLCONV binariesLineFn(void *context, char *fields[][2], int32_t fieldCount, @@ -176,7 +187,8 @@ enum DESTDIR, SOURCEDIR, UNICODE_VERSION, - ICUDATADIR + ICUDATADIR, + CSOURCE }; /* Keep these values in sync with the above enums */ @@ -187,8 +199,9 @@ static UOption options[]={ UOPTION_COPYRIGHT, UOPTION_DESTDIR, UOPTION_SOURCEDIR, - { "unicode", NULL, NULL, NULL, 'u', UOPT_REQUIRES_ARG, 0 }, - UOPTION_ICUDATADIR + UOPTION_DEF("unicode", 'u', UOPT_REQUIRES_ARG), + UOPTION_ICUDATADIR, + UOPTION_DEF("csource", 'C', UOPT_NO_ARG) }; extern int @@ -230,7 +243,8 @@ main(int argc, char* argv[]) { "\t-h or -? or --help this usage text\n" "\t-v or --verbose verbose output\n" "\t-c or --copyright include a copyright notice\n" - "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n"); + "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n" + "\t-C or --csource generate a .c source file rather than the .icu binary\n"); fprintf(stderr, "\t-d or --destdir destination directory, followed by the path\n" "\t-s or --sourcedir source directory, followed by the path\n" @@ -272,7 +286,7 @@ main(int argc, char* argv[]) { } /* initialize */ - pv=upvec_open(1, 10000); + pv=upvec_open(2, 10000); caseSensitive=uset_open(1, 0); /* empty set (start>end) */ /* process SpecialCasing.txt */ @@ -290,6 +304,10 @@ main(int argc, char* argv[]) { parseBinariesFile(filename, basename, suffix, &derCorePropsBinaries, &errorCode); + if(ucdVersion>=UNI_4_1) { + parseBinariesFile(filename, basename, suffix, &wordBreakBinaries, &errorCode); + } + /* process UnicodeData.txt */ writeUCDFilename(basename, "UnicodeData", suffix); parseDB(filename, &errorCode); @@ -301,7 +319,7 @@ main(int argc, char* argv[]) { if(U_SUCCESS(errorCode)) { /* write the properties data file */ - generateData(destDir); + generateData(destDir, options[CSOURCE].doesOccur); } u_cleanup(); diff --git a/icuSources/tools/gencase/gencase.dsp b/icuSources/tools/gencase/gencase.dsp deleted file mode 100644 index aa37702c..00000000 --- a/icuSources/tools/gencase/gencase.dsp +++ /dev/null @@ -1,194 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gencase" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gencase - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gencase.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gencase.mak" CFG="gencase - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gencase - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gencase - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gencase - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gencase - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gencase - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\toolutil" /I "..\..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gencase.exe -InputPath=.\Release\gencase.exe -InputName=gencase -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencase - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\toolutil" /I "..\..\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gencase.exe -InputPath=.\Debug\gencase.exe -InputName=gencase -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencase - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\toolutil" /I "..\..\common" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gencase.exe -InputPath=.\Release\gencase.exe -InputName=gencase -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencase - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\toolutil" /I "..\..\common" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gencase.exe -InputPath=.\Debug\gencase.exe -InputName=gencase -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gencase - Win32 Release" -# Name "gencase - Win32 Debug" -# Name "gencase - Win64 Release" -# Name "gencase - Win64 Debug" -# Begin Source File - -SOURCE=.\gencase.c -# End Source File -# Begin Source File - -SOURCE=.\gencase.h -# End Source File -# Begin Source File - -SOURCE=.\store.c -# End Source File -# End Target -# End Project diff --git a/icuSources/tools/gencase/gencase.h b/icuSources/tools/gencase/gencase.h index 2ca8eddf..8b09cb2d 100644 --- a/icuSources/tools/gencase/gencase.h +++ b/icuSources/tools/gencase/gencase.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -23,11 +23,48 @@ U_CDECL_BEGIN +/* Unicode versions --------------------------------------------------------- */ + +enum { + UNI_1_0, + UNI_1_1, + UNI_2_0, + UNI_3_0, + UNI_3_1, + UNI_3_2, + UNI_4_0, + UNI_4_0_1, + UNI_4_1, + UNI_VER_COUNT +}; + +extern int32_t ucdVersion; + /* gencase ------------------------------------------------------------------ */ #define UGENCASE_EXC_SHIFT 16 #define UGENCASE_EXC_MASK 0xffff0000 +/* + * Values for the ucase.icu unfold[] data array, see store.c. + * The values are stored in ucase.icu so that the runtime code will work with + * changing values, but they are hardcoded for gencase for simplicity. + * They are optimized, that is, provide for minimal table column widths, + * for the actual Unicode data, so that the table size is minimized. + * Future versions of Unicode may require increases of some of these values. + */ +enum { + UGENCASE_UNFOLD_STRING_WIDTH=3, + UGENCASE_UNFOLD_CP_WIDTH=2, + UGENCASE_UNFOLD_WIDTH=UGENCASE_UNFOLD_STRING_WIDTH+UGENCASE_UNFOLD_CP_WIDTH, + UGENCASE_UNFOLD_MAX_ROWS=250 +}; + +/* Values for additional data stored in pv column 1 */ +enum { + UGENCASE_IS_MID_LETTER_SHIFT /* bit 0 */ +}; + /* special casing data */ typedef struct { UChar32 code; @@ -45,6 +82,7 @@ typedef struct { /* case mapping properties */ typedef struct { UChar32 code, lowerCase, upperCase, titleCase; + UChar32 closure[8]; SpecialCasing *specialCasing; CaseFolding *caseFolding; uint8_t gc, cc; @@ -82,7 +120,7 @@ extern void makeExceptions(void); extern void -generateData(const char *dataDir); +generateData(const char *dataDir, UBool csource); U_CDECL_END diff --git a/icuSources/tools/gencase/gencase.vcproj b/icuSources/tools/gencase/gencase.vcproj index a95c874d..025b1720 100644 --- a/icuSources/tools/gencase/gencase.vcproj +++ b/icuSources/tools/gencase/gencase.vcproj @@ -21,14 +21,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\toolutil,..\..\common" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gencase.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -84,12 +84,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\toolutil,..\..\common" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gencase.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gencase/store.c b/icuSources/tools/gencase/store.c index 4746429c..c4d241ee 100644 --- a/icuSources/tools/gencase/store.c +++ b/icuSources/tools/gencase/store.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2004, International Business Machines +* Copyright (C) 2004-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -26,11 +26,15 @@ #include "cstring.h" #include "filestrm.h" #include "utrie.h" +#include "uarrsort.h" #include "unicode/udata.h" #include "unewdata.h" #include "propsvec.h" +#include "writesrc.h" #include "gencase.h" +#define LENGTHOF(array) (sizeof(array)/sizeof((array)[0])) + /* Unicode case mapping properties file format --------------------------------- The file format prepared and written here contains several data @@ -41,7 +45,9 @@ the udata API for loading ICU data. Especially, a UDataInfo structure precedes the actual data. It contains platform properties values and the file format version. -The following is a description of format version 1 . +The following is a description of format version 1.1 . + +Format version 1.1 adds data for case closure. The file contains the following structures: @@ -52,16 +58,19 @@ The file contains the following structures: i1 dataLength; -- length in bytes of the post-header data (incl. indexes[]) i2 trieSize; -- size in bytes of the case mapping properties trie i3 exceptionsLength; -- length in uint16_t of the exceptions array + i4 unfoldLength; -- length in uint16_t of the reverse-folding array (new in format version 1.1) - i4..i14 reservedIndexes; -- reserved values; 0 for now + i5..i14 reservedIndexes; -- reserved values; 0 for now i15 maxFullLength; -- maximum length of a full case mapping/folding string - Serizalied trie, see utrie.h; + Serialized trie, see utrie.h; const uint16_t exceptions[exceptionsLength]; + const UChar unfold[unfoldLength]; + Trie data word: Bits @@ -117,12 +126,24 @@ Optional-value slots: 1 case folding (code point) 2 uppercase mapping (code point) 3 titlecase mapping (code point) -4..6 reserved +4 reserved +5 reserved +6 closure mappings (new in format version 1.1) 7 there is at least one full (string) case mapping the length of each is encoded in a nibble of this optional value, and the strings follow this optional value in the same order: lower/fold/upper/title +The optional closure mappings value is used as follows: +Bits 0..3 contain the length of a string of code points for case closure. +The string immediately follows the full case mappings, or the closure value +slot if there are no full case mappings. +Bits 4..15 are reserved and could be used in the future to indicate the +number of strings for case closure. +Complete case closure for a code point is given by the union of all simple +and full case mappings and foldings, plus the case closure code points +(and potentially, in the future, case closure strings). + For space saving, some values are not stored. Lookups are as follows: - If special casing is conditional, then no full lower/upper/title mapping strings are stored. @@ -135,6 +156,28 @@ For space saving, some values are not stored. Lookups are as follows: simple title->simple upper finally, the original code point (no mapping) +This fallback order is strict: +In particular, the fallback from full case folding is to simple case folding, +not to full lowercase mapping. + +Reverse case folding data ("unfold") array: (new in format version 1.1) + +This array stores some miscellaneous values followed by a table. The data maps +back from multi-character strings to their original code points, for use +in case closure. + +The table contains two columns of strings. +The string in the first column is the case folding of each of the code points +in the second column. The strings are terminated with NUL or by the end of the +column, whichever comes first. + +The miscellaneous data takes up one pseudo-row and includes: +- number of rows +- number of UChars per row +- number of UChars in the left (folding string) column + +The table is sorted by its first column. Values in the first column are unique. + ----------------------------------------------------------------------------- */ /* UDataInfo cf. udata.h */ @@ -149,7 +192,7 @@ static UDataInfo dataInfo={ /* dataFormat="cAsE" */ { UCASE_FMT_0, UCASE_FMT_1, UCASE_FMT_2, UCASE_FMT_3 }, - { 1, 0, UTRIE_SHIFT, UTRIE_INDEX_SHIFT }, /* formatVersion */ + { 1, 1, UTRIE_SHIFT, UTRIE_INDEX_SHIFT }, /* formatVersion */ { 4, 0, 1, 0 } /* dataVersion */ }; @@ -167,13 +210,74 @@ static uint16_t exceptionsCount=0; /* becomes indexes[UCASE_IX_MAX_FULL_LENGTH] */ static int32_t maxFullLength=U16_MAX_LENGTH; -/* -------------------------------------------------------------------------- */ +/* reverse case folding ("unfold") data */ +static UChar unfold[UGENCASE_UNFOLD_MAX_ROWS*UGENCASE_UNFOLD_WIDTH]={ + 0, UGENCASE_UNFOLD_WIDTH, UGENCASE_UNFOLD_STRING_WIDTH, 0, 0 +}; +static uint16_t unfoldRows=0; +static uint16_t unfoldTop=UGENCASE_UNFOLD_WIDTH; + +/* Unicode versions --------------------------------------------------------- */ + +static const UVersionInfo +unicodeVersions[]={ + { 1, 0, 0, 0 }, + { 1, 1, 0, 0 }, + { 2, 0, 0, 0 }, + { 3, 0, 0, 0 }, + { 3, 1, 0, 0 }, + { 3, 2, 0, 0 }, + { 4, 0, 0, 0 }, + { 4, 0, 1, 0 }, + { 4, 1, 0, 0 } +}; + +int32_t ucdVersion=UNI_4_1; + +static int32_t +findUnicodeVersion(const UVersionInfo version) { + int32_t i; + + for(i=0; /* while(version>unicodeVersions[i]) {} */ + i<UNI_VER_COUNT && uprv_memcmp(version, unicodeVersions[i], 4)>0; + ++i) {} + if(0<i && i<UNI_VER_COUNT && uprv_memcmp(version, unicodeVersions[i], 4)<0) { + --i; /* fix 4.0.2 to land before 4.1, for valid x>=ucdVersion comparisons */ + } + return i; /* version>=unicodeVersions[i] && version<unicodeVersions[i+1]; possible: i==UNI_VER_COUNT */ +} extern void setUnicodeVersion(const char *v) { UVersionInfo version; u_versionFromString(version, v); uprv_memcpy(dataInfo.dataVersion, version, 4); + ucdVersion=findUnicodeVersion(version); +} + +/* -------------------------------------------------------------------------- */ + +static void +addUnfolding(UChar32 c, const UChar *s, int32_t length) { + int32_t i; + + if(length>UGENCASE_UNFOLD_STRING_WIDTH) { + fprintf(stderr, "gencase error: case folding too long (length=%ld>%d=UGENCASE_UNFOLD_STRING_WIDTH)\n", + (long)length, UGENCASE_UNFOLD_STRING_WIDTH); + exit(U_INTERNAL_PROGRAM_ERROR); + } + if(unfoldTop>=LENGTHOF(unfold)) { + fprintf(stderr, "gencase error: too many multi-character case foldings\n"); + exit(U_BUFFER_OVERFLOW_ERROR); + } + u_memset(unfold+unfoldTop, 0, UGENCASE_UNFOLD_WIDTH); + u_memcpy(unfold+unfoldTop, s, length); + + i=unfoldTop+UGENCASE_UNFOLD_STRING_WIDTH; + U16_APPEND_UNSAFE(unfold, i, c); + + ++unfoldRows; + unfoldTop+=UGENCASE_UNFOLD_WIDTH; } /* store a character's properties ------------------------------------------- */ @@ -183,6 +287,7 @@ setProps(Props *p) { UErrorCode errorCode; uint32_t value, oldValue; int32_t delta; + UBool isCaseIgnorable; /* get the non-UnicodeData.txt properties */ value=oldValue=upvec_getValue(pv, p->code, 0); @@ -214,6 +319,9 @@ setProps(Props *p) { if(p->upperCase!=p->titleCase) { value|=UCASE_EXCEPTION; } + if(p->closure[0]!=0) { + value|=UCASE_EXCEPTION; + } if(p->specialCasing!=NULL) { value|=UCASE_EXCEPTION; } @@ -238,12 +346,28 @@ setProps(Props *p) { } /* encode case-ignorable as delta==1 on uncased characters */ - if( - (value&UCASE_TYPE_MASK)==UCASE_NONE && - p->code!=0x307 && - ((U_MASK(p->gc)&(U_GC_MN_MASK|U_GC_ME_MASK|U_GC_CF_MASK|U_GC_LM_MASK|U_GC_SK_MASK))!=0 || - p->code==0x27 || p->code==0xad || p->code==0x2019) - ) { + isCaseIgnorable=FALSE; + if((value&UCASE_TYPE_MASK)==UCASE_NONE) { + if(ucdVersion>=UNI_4_1) { + /* Unicode 4.1 and up: (D47a) Word_Break=MidLetter or Mn, Me, Cf, Lm, Sk */ + if( + (U_MASK(p->gc)&(U_GC_MN_MASK|U_GC_ME_MASK|U_GC_CF_MASK|U_GC_LM_MASK|U_GC_SK_MASK))!=0 || + ((upvec_getValue(pv, p->code, 1)>>UGENCASE_IS_MID_LETTER_SHIFT)&1)!=0 + ) { + isCaseIgnorable=TRUE; + } + } else { + /* before Unicode 4.1: Mn, Me, Cf, Lm, Sk or 0027 or 00AD or 2019 */ + if( + (U_MASK(p->gc)&(U_GC_MN_MASK|U_GC_ME_MASK|U_GC_CF_MASK|U_GC_LM_MASK|U_GC_SK_MASK))!=0 || + p->code==0x27 || p->code==0xad || p->code==0x2019 + ) { + isCaseIgnorable=TRUE; + } + } + } + + if(isCaseIgnorable && p->code!=0x307) { /* * We use one of the delta/exception bits, which works because we only * store the case-ignorable flag for uncased characters. @@ -286,6 +410,14 @@ setProps(Props *p) { u_errorName(errorCode)); exit(errorCode); } + + /* add the multi-character case folding to the "unfold" data */ + if(p->caseFolding!=NULL) { + int32_t length=p->caseFolding->full[0]; + if(length>1 && u_strHasMoreChar32Than(p->caseFolding->full+1, length, 1)) { + addUnfolding(p->code, p->caseFolding->full+1, length); + } + } } extern void @@ -298,13 +430,368 @@ addCaseSensitive(UChar32 first, UChar32 last) { } } +/* finalize reverse case folding ("unfold") data ---------------------------- */ + +static int32_t U_CALLCONV +compareUnfold(const void *context, const void *left, const void *right) { + return u_memcmp((const UChar *)left, (const UChar *)right, UGENCASE_UNFOLD_WIDTH); +} + +static void +makeUnfoldData() { + static const UChar + iDot[2]= { 0x69, 0x307 }; + + UChar *p, *q; + int32_t i, j, k; + UErrorCode errorCode; + + /* + * add a case folding that we missed because it's conditional: + * 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE + */ + addUnfolding(0x130, iDot, 2); + + /* sort the data */ + errorCode=U_ZERO_ERROR; + uprv_sortArray(unfold+UGENCASE_UNFOLD_WIDTH, unfoldRows, UGENCASE_UNFOLD_WIDTH*2, + compareUnfold, NULL, FALSE, &errorCode); + + /* make unique-string rows by merging adjacent ones' code point columns */ + + /* make p point to row i-1 */ + p=(UChar *)unfold+UGENCASE_UNFOLD_WIDTH; + + for(i=1; i<unfoldRows;) { + if(0==u_memcmp(p, p+UGENCASE_UNFOLD_WIDTH, UGENCASE_UNFOLD_STRING_WIDTH)) { + /* concatenate code point columns */ + q=p+UGENCASE_UNFOLD_STRING_WIDTH; + for(j=1; j<UGENCASE_UNFOLD_CP_WIDTH && q[j]!=0; ++j) {} + for(k=0; k<UGENCASE_UNFOLD_CP_WIDTH && q[UGENCASE_UNFOLD_WIDTH+k]!=0; ++j, ++k) { + q[j]=q[UGENCASE_UNFOLD_WIDTH+k]; + } + if(j>UGENCASE_UNFOLD_CP_WIDTH) { + fprintf(stderr, "gencase error: too many code points in unfold[]: %ld>%d=UGENCASE_UNFOLD_CP_WIDTH\n", + (long)j, UGENCASE_UNFOLD_CP_WIDTH); + exit(U_BUFFER_OVERFLOW_ERROR); + } + + /* move following rows up one */ + --unfoldRows; + unfoldTop-=UGENCASE_UNFOLD_WIDTH; + u_memmove(p+UGENCASE_UNFOLD_WIDTH, p+UGENCASE_UNFOLD_WIDTH*2, (unfoldRows-i)*UGENCASE_UNFOLD_WIDTH); + } else { + p+=UGENCASE_UNFOLD_WIDTH; + ++i; + } + } + + unfold[UCASE_UNFOLD_ROWS]=(UChar)unfoldRows; + + if(beVerbose) { + puts("unfold data:"); + + p=(UChar *)unfold; + for(i=0; i<unfoldRows; ++i) { + p+=UGENCASE_UNFOLD_WIDTH; + printf("[%2d] %04x %04x %04x <- %04x %04x\n", + (int)i, p[0], p[1], p[2], p[3], p[4]); + } + } +} + +/* case closure ------------------------------------------------------------- */ + +static void +addClosureMapping(UChar32 src, UChar32 dest) { + uint32_t value; + + if(beVerbose) { + printf("add closure mapping U+%04lx->U+%04lx\n", + (unsigned long)src, (unsigned long)dest); + } + + value=upvec_getValue(pv, src, 0); + if(value&UCASE_EXCEPTION) { + Props *p=excProps+(value>>UGENCASE_EXC_SHIFT); + int32_t i; + + /* append dest to src's closure array */ + for(i=0;; ++i) { + if(i==LENGTHOF(p->closure)) { + fprintf(stderr, "closure[] overflow for U+%04lx->U+%04lx\n", + (unsigned long)src, (unsigned long)dest); + exit(U_BUFFER_OVERFLOW_ERROR); + } else if(p->closure[i]==dest) { + break; /* do not store duplicates */ + } else if(p->closure[i]==0) { + p->closure[i]=dest; + break; + } + } + } else { + Props p2={ 0 }; + UChar32 next; + UErrorCode errorCode; + + /* + * decode value into p2 (enough for makeException() to work properly), + * add the closure mapping, + * and set the new exception for src + */ + p2.code=src; + p2.closure[0]=dest; + + if((value&UCASE_TYPE_MASK)>UCASE_NONE) { + /* one simple case mapping, don't care which one */ + next=src+((int16_t)value>>UCASE_DELTA_SHIFT); + if(next!=src) { + if((value&UCASE_TYPE_MASK)==UCASE_LOWER) { + p2.upperCase=p2.titleCase=next; + } else { + p2.lowerCase=next; + } + } + } else if(value&UCASE_DELTA_MASK) { + fprintf(stderr, "gencase error: unable to add case closure exception to case-ignorable U+%04lx\n", + (unsigned long)src); + exit(U_INTERNAL_PROGRAM_ERROR); + } + + value&=~(UGENCASE_EXC_MASK|UCASE_DELTA_MASK); /* remove previous simple mapping */ + value|=(uint32_t)exceptionsCount<<UGENCASE_EXC_SHIFT; + value|=UCASE_EXCEPTION; + uprv_memcpy(excProps+exceptionsCount, &p2, sizeof(p2)); + if(++exceptionsCount==MAX_EXC_COUNT) { + fprintf(stderr, "gencase: too many exceptions\n"); + exit(U_INDEX_OUTOFBOUNDS_ERROR); + } + + errorCode=U_ZERO_ERROR; + if(!upvec_setValue(pv, src, src+1, 0, value, 0xffffffff, &errorCode)) { + fprintf(stderr, "gencase error: unable to set case mapping values, code: %s\n", + u_errorName(errorCode)); + exit(errorCode); + } + } +} + +/* + * Find missing case mapping relationships and add mappings for case closure. + * This function starts from an "original" code point and recursively + * finds its case mappings and the case mappings of where it maps to. + * + * The recursion depth is capped at 3 nested calls of this function. + * In each call, the current code point is c, and the function enumerates + * all of c's simple (single-code point) case mappings. + * prev is the code point that case-mapped to c. + * prev2 is the code point that case-mapped to prev. + * + * The initial function call has prev2<0, prev<0, and c==orig + * (marking no code points). + * It enumerates c's case mappings and recurses without further action. + * + * The second-level function call has prev2<0, prev==orig, and c is + * the destination code point of one of prev's case mappings. + * The function checks if any of c's case mappings go back to orig + * and adds a closure mapping if not. + * In other words, it turns a case mapping relationship of + * orig->c + * into + * orig<->c + * + * The third-level function call has prev2==orig, prev>=0, and c is + * the destination code point of one of prev's case mappings. + * (And prev is the destination of one of prev2's case mappings.) + * The function checks if any of c's case mappings go back to orig + * and adds a closure mapping if not. + * In other words, it turns case mapping relationships of + * orig->prev->c or orig->prev<->c + * into + * orig->prev->c->orig or orig->prev<->c->orig + * etc. + * (Graphically, this closes a triangle.) + * + * With repeated application on all code points until no more closure mappings + * are added, all case equivalence groups get complete mappings. + * That is, in each group of code points with case relationships + * each code point will in the end have some mapping to each other + * code point in the group. + * + * @return TRUE if a closure mapping was added + */ +static UBool +addClosure(UChar32 orig, UChar32 prev2, UChar32 prev, UChar32 c, uint32_t value) { + UChar32 next; + UBool someMappingsAdded=FALSE; + + if(c!=orig) { + /* get the properties for c */ + value=upvec_getValue(pv, c, 0); + } + /* else if c==orig then c's value was passed in */ + + if(value&UCASE_EXCEPTION) { + UChar32 set[32]; + int32_t i, count=0; + + Props *p=excProps+(value>>UGENCASE_EXC_SHIFT); + + /* + * marker for whether any of c's mappings goes to orig + * c==orig: prevent adding a closure mapping when getting orig's own, direct mappings + */ + UBool mapsToOrig=(UBool)(c==orig); + + /* collect c's case mapping destinations in set[] */ + if((next=p->upperCase)!=0 && next!=c) { + set[count++]=next; + } + if((next=p->lowerCase)!=0 && next!=c) { + set[count++]=next; + } + if(p->upperCase!=(next=p->titleCase) && next!=c) { + set[count++]=next; + } + if(p->caseFolding!=NULL && (next=p->caseFolding->simple)!=0 && next!=c) { + set[count++]=next; + } + + /* append c's current closure mappings to set[] */ + for(i=0; i<LENGTHOF(p->closure) && (next=p->closure[i])!=0; ++i) { + set[count++]=next; + } + + /* process all code points to which c case-maps */ + for(i=0; i<count; ++i) { + next=set[i]; /* next!=c */ + + if(next==orig) { + mapsToOrig=TRUE; /* remember that we map to orig */ + } else if(prev2<0 && next!=prev) { + /* + * recurse unless + * we have reached maximum depth (prev2>=0) or + * this is a mapping to one of the previous code points (orig, prev, c) + */ + someMappingsAdded|=addClosure(orig, prev, c, next, 0); + } + } + + if(!mapsToOrig) { + addClosureMapping(c, orig); + return TRUE; + } + } else { + if((value&UCASE_TYPE_MASK)>UCASE_NONE) { + /* one simple case mapping, don't care which one */ + next=c+((int16_t)value>>UCASE_DELTA_SHIFT); + if(next!=c) { + /* + * recurse unless + * we have reached maximum depth (prev2>=0) or + * this is a mapping to one of the previous code points (orig, prev, c) + */ + if(prev2<0 && next!=orig && next!=prev) { + someMappingsAdded|=addClosure(orig, prev, c, next, 0); + } + + if(c!=orig && next!=orig) { + /* c does not map to orig, add a closure mapping c->orig */ + addClosureMapping(c, orig); + return TRUE; + } + } + } + } + + return someMappingsAdded; +} + extern void makeCaseClosure() { - /* TODO */ + UChar *p; + uint32_t *row; + uint32_t value; + UChar32 start, limit, c, c2; + int32_t i, j; + UBool someMappingsAdded; + + /* + * finalize the "unfold" data because we need to use it to add closure mappings + * for situations like FB05->"st"<-FB06 + * where we would otherwise miss the FB05<->FB06 relationship + */ + makeUnfoldData(); + + /* use the "unfold" data to add mappings */ + + /* p always points to the code points; this loop ignores the strings completely */ + p=unfold+UGENCASE_UNFOLD_WIDTH+UGENCASE_UNFOLD_STRING_WIDTH; + + for(i=0; i<unfoldRows; p+=UGENCASE_UNFOLD_WIDTH, ++i) { + j=0; + U16_NEXT_UNSAFE(p, j, c); + while(j<UGENCASE_UNFOLD_CP_WIDTH && p[j]!=0) { + U16_NEXT_UNSAFE(p, j, c2); + addClosure(c, U_SENTINEL, c, c2, 0); + } + } + + if(beVerbose) { + puts("---- ---- ---- ---- (done with closures from unfolding)"); + } + + /* add further closure mappings from analyzing simple mappings */ + do { + someMappingsAdded=FALSE; + + i=0; + while((row=upvec_getRow(pv, i, &start, &limit))!=NULL) { + value=*row; + if(value!=0) { + while(start<limit) { + if(addClosure(start, U_SENTINEL, U_SENTINEL, start, value)) { + someMappingsAdded=TRUE; + + /* + * stop this loop because pv was changed and row is not valid any more + * skip all rows below the current start + */ + while((row=upvec_getRow(pv, i, NULL, &limit))!=NULL && start>=limit) { + ++i; + } + row=NULL; /* signal to continue with outer loop, without further ++i */ + break; + } + ++start; + } + if(row==NULL) { + continue; /* see row=NULL above */ + } + } + ++i; + } + + if(beVerbose && someMappingsAdded) { + puts("---- ---- ---- ----"); + } + } while(someMappingsAdded); } /* exceptions --------------------------------------------------------------- */ +/* get the string length from zero-terminated code points in a limited-length array */ +static int32_t +getLengthOfCodePoints(const UChar32 *s, int32_t maxLength) { + int32_t i, length; + + for(i=length=0; i<maxLength && s[i]!=0; ++i) { + length+=U16_LENGTH(s[i]); + } + return length; +} + static UBool fullMappingEqualsSimple(const UChar *s, UChar32 simple, UChar32 c) { int32_t i, length; @@ -441,6 +928,15 @@ makeException(uint32_t value, Props *p) { excWord|=U_MASK(UCASE_EXC_TITLE); } + /* length of case closure */ + if(p->closure[0]!=0) { + length=getLengthOfCodePoints(p->closure, LENGTHOF(p->closure)); + slots[count]=(uint32_t)length; /* must be 1..UCASE_CLOSURE_MAX_LENGTH */ + slotBits|=slots[count]; + ++count; + excWord|=U_MASK(UCASE_EXC_CLOSURE); + } + /* lengths of full case mapping strings, stored in the last slot */ fullLengths=0; if(p->specialCasing!=NULL) { @@ -493,6 +989,15 @@ makeException(uint32_t value, Props *p) { excTop+=length; } + /* write the closure data */ + if(p->closure[0]!=0) { + UChar32 c; + + for(i=0; i<LENGTHOF(p->closure) && (c=p->closure[i])!=0; ++i) { + U16_APPEND_UNSAFE((UChar *)exceptions, excTop, c); + } + } + exceptionsTop=excTop; /* write the main exceptions word */ @@ -522,7 +1027,7 @@ makeExceptions() { /* generate output data ----------------------------------------------------- */ extern void -generateData(const char *dataDir) { +generateData(const char *dataDir, UBool csource) { static int32_t indexes[UCASE_IX_TOP]={ UCASE_IX_TOP }; @@ -559,7 +1064,8 @@ generateData(const char *dataDir) { indexes[UCASE_IX_EXC_LENGTH]=exceptionsTop; indexes[UCASE_IX_TRIE_SIZE]=trieSize; - indexes[UCASE_IX_LENGTH]=(int32_t)sizeof(indexes)+trieSize+2*exceptionsTop; + indexes[UCASE_IX_UNFOLD_LENGTH]=unfoldTop; + indexes[UCASE_IX_LENGTH]=(int32_t)sizeof(indexes)+trieSize+2*exceptionsTop+2*unfoldTop; indexes[UCASE_IX_MAX_FULL_LENGTH]=maxFullLength; @@ -567,32 +1073,87 @@ generateData(const char *dataDir) { printf("trie size in bytes: %5d\n", (int)trieSize); printf("number of code points with exceptions: %5d\n", exceptionsCount); printf("size in bytes of exceptions: %5d\n", 2*exceptionsTop); + printf("size in bytes of reverse foldings: %5d\n", 2*unfoldTop); printf("data size: %5d\n", (int)indexes[UCASE_IX_LENGTH]); } - /* write the data */ - pData=udata_create(dataDir, UCASE_DATA_TYPE, UCASE_DATA_NAME, &dataInfo, - haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "gencase: unable to create data memory, %s\n", u_errorName(errorCode)); - exit(errorCode); - } + if(csource) { + /* write .c file for hardcoded data */ + UTrie trie={ NULL }; + FILE *f; + + utrie_unserialize(&trie, trieBlock, trieSize, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf( + stderr, + "gencase error: failed to utrie_unserialize(ucase.icu trie) - %s\n", + u_errorName(errorCode)); + return; + } - udata_writeBlock(pData, indexes, sizeof(indexes)); - udata_writeBlock(pData, trieBlock, trieSize); - udata_writeBlock(pData, exceptions, 2*exceptionsTop); + f=usrc_create(dataDir, "ucase_props_data.c"); + if(f!=NULL) { + usrc_writeArray(f, + "static const UVersionInfo ucase_props_dataVersion={", + dataInfo.dataVersion, 8, 4, + "};\n\n"); + usrc_writeArray(f, + "static const int32_t ucase_props_indexes[UCASE_IX_TOP]={", + indexes, 32, UCASE_IX_TOP, + "};\n\n"); + usrc_writeUTrieArrays(f, + "static const uint16_t ucase_props_trieIndex[%ld]={\n", NULL, + &trie, + "\n};\n\n"); + usrc_writeArray(f, + "static const uint16_t ucase_props_exceptions[%ld]={\n", + exceptions, 16, exceptionsTop, + "\n};\n\n"); + usrc_writeArray(f, + "static const uint16_t ucase_props_unfold[%ld]={\n", + unfold, 16, unfoldTop, + "\n};\n\n"); + fputs( + "static const UCaseProps ucase_props_singleton={\n" + " NULL,\n" + " ucase_props_indexes,\n" + " ucase_props_exceptions,\n" + " ucase_props_unfold,\n", + f); + usrc_writeUTrieStruct(f, + " {\n", + &trie, "ucase_props_trieIndex", NULL, NULL, + " },\n"); + usrc_writeArray(f, " { ", dataInfo.formatVersion, 8, 4, " }\n"); + fputs("};\n", f); + fclose(f); + } + } else { + /* write the data */ + pData=udata_create(dataDir, UCASE_DATA_TYPE, UCASE_DATA_NAME, &dataInfo, + haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "gencase: unable to create data memory, %s\n", u_errorName(errorCode)); + exit(errorCode); + } - /* finish up */ - dataLength=udata_finish(pData, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "gencase: error %d writing the output file\n", errorCode); - exit(errorCode); - } + udata_writeBlock(pData, indexes, sizeof(indexes)); + udata_writeBlock(pData, trieBlock, trieSize); + udata_writeBlock(pData, exceptions, 2*exceptionsTop); + udata_writeBlock(pData, unfold, 2*unfoldTop); - if(dataLength!=indexes[UCASE_IX_LENGTH]) { - fprintf(stderr, "gencase: data length %ld != calculated size %d\n", - dataLength, (int)indexes[UCASE_IX_LENGTH]); - exit(U_INTERNAL_PROGRAM_ERROR); + /* finish up */ + dataLength=udata_finish(pData, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "gencase: error %d writing the output file\n", errorCode); + exit(errorCode); + } + + if(dataLength!=indexes[UCASE_IX_LENGTH]) { + fprintf(stderr, "gencase: data length %ld != calculated size %d\n", + dataLength, (int)indexes[UCASE_IX_LENGTH]); + exit(U_INTERNAL_PROGRAM_ERROR); + } } utrie_close(pTrie); diff --git a/icuSources/tools/genccode/Makefile.in b/icuSources/tools/genccode/Makefile.in index cffd2dab..920b75fe 100644 --- a/icuSources/tools/genccode/Makefile.in +++ b/icuSources/tools/genccode/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/genccode -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -14,33 +14,32 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/genccode -## - TARGET_STUB_NAME = genccode SECTION = 8 -MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -ALL_MAN_FILES = $(MANX_FILES) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(ALL_MAN_FILES) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil $(BIR_CPPFLAGS) -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = genccode.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man install-manx +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -53,22 +52,16 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) -# man page -install-man: install-manx -install-manx: $(MANX_FILES) +install-man: $(MAN_FILES) $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - dist-local: clean-local: @@ -85,7 +78,13 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.c) $(OUTOPT)$@ $^ $(LIBS) + $(LINK.c) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -94,3 +93,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/genccode/genccode.c b/icuSources/tools/genccode/genccode.c index 60dfaf40..31a53711 100644 --- a/icuSources/tools/genccode/genccode.c +++ b/icuSources/tools/genccode/genccode.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -19,7 +19,9 @@ * 12/09/1999 weiv Added multiple file handling */ -#ifdef WIN32 +#include "unicode/utypes.h" + +#ifdef U_WINDOWS # define VC_EXTRALEAN # define WIN32_LEAN_AND_MEAN # define NOUSER @@ -45,7 +47,6 @@ #include <stdio.h> #include <stdlib.h> -#include "unicode/utypes.h" #include "unicode/putil.h" #include "cmemory.h" #include "cstring.h" @@ -58,7 +59,7 @@ static uint32_t column=MAX_COLUMN; -#ifdef WIN32 +#ifdef U_WINDOWS #define CAN_GENERATE_OBJECTS #endif @@ -148,8 +149,10 @@ static const struct AssemblyType { } assemblyHeader[] = { {"gcc", ".globl %s\n" + "\t.section .note.GNU-stack,\"\",@progbits\n" "\t.section .rodata\n" "\t.align 8\n" /* Either align 8 bytes or 2^8 (256) bytes. 8 bytes is needed. */ + "\t.type %s,@object\n" "%s:\n\n", ".long " @@ -485,7 +488,7 @@ writeCCode(const char *filename, const char *destdir) { #ifdef CAN_GENERATE_OBJECTS static void writeObjectCode(const char *filename, const char *destdir) { -#ifdef WIN32 +#ifdef U_WINDOWS char buffer[4096], entry[40]; struct { IMAGE_FILE_HEADER fileHeader; diff --git a/icuSources/tools/genccode/genccode.dsp b/icuSources/tools/genccode/genccode.dsp deleted file mode 100644 index dae00742..00000000 --- a/icuSources/tools/genccode/genccode.dsp +++ /dev/null @@ -1,197 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genccode" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genccode - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "genccode.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "genccode.mak" CFG="genccode - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genccode - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genccode - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "genccode - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genccode - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genccode - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\genccode.exe -InputPath=.\Release\genccode.exe -InputName=genccode -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genccode - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\genccode.exe -InputPath=.\Debug\genccode.exe -InputName=genccode -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genccode - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /Op /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\genccode.exe -InputPath=.\Release\genccode.exe -InputName=genccode -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genccode - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /Op /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\genccode.exe -InputPath=.\Debug\genccode.exe -InputName=genccode -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "genccode - Win32 Release" -# Name "genccode - Win32 Debug" -# Name "genccode - Win64 Release" -# Name "genccode - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\genccode.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/genccode/genccode.vcproj b/icuSources/tools/genccode/genccode.vcproj index 7379af12..0f9b703a 100644 --- a/icuSources/tools/genccode/genccode.vcproj +++ b/icuSources/tools/genccode/genccode.vcproj @@ -20,13 +20,13 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/genccode.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -81,11 +81,13 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/genccode.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gencmn/Makefile.in b/icuSources/tools/gencmn/Makefile.in index 905c173f..925ff22c 100644 --- a/icuSources/tools/gencmn/Makefile.in +++ b/icuSources/tools/gencmn/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/gencmn -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -14,37 +14,32 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/gencmn -## - TARGET_STUB_NAME = gencmn -DECMN_STUB_NAME = decmn SECTION = 8 -MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) $(DECMN_STUB_NAME).$(SECTION) +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -ALL_MAN_FILES = $(MANX_FILES) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(DECMN_DEP) $(ALL_MAN_FILES) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -DECMN = $(BINDIR)/$(DECMN_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil $(BIR_CPPFLAGS) -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gencmn.o -DECMN_OBJ = decmn.o DEPS = $(OBJECTS:.o=.d) -DECMN_DEP = $(DECMN_OBJ:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man install-manx +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -57,18 +52,21 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(DECMN) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) - $(INSTALL) $(DECMN) $(DESTDIR)$(sbindir) + +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) - $(RMV) $(TARGET) $(OBJECTS) $(DECMN) $(DECMN_OBJ) + $(RMV) $(TARGET) $(OBJECTS) distclean-local: clean-local $(RMV) Makefile @@ -80,31 +78,18 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) - -$(DECMN) : $(DECMN_OBJ) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) - -# man page -install-man: install-manx -install-manx: $(MANX_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) - -# This line is needed to serialize builds when the gmake -j option is used. -$(DECMN:$(EXEEXT)=).$(SECTION): $(TARGET:$(EXEEXT)=).$(SECTION) + $(LINK.c) $(OUTOPT)$@ $^ $(LIBS) %.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) --include $(DECMN_DEP) else ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) --include $(DECMN_DEP) endif endif diff --git a/icuSources/tools/gencmn/decmn.8.in b/icuSources/tools/gencmn/decmn.8.in deleted file mode 100644 index ea5dddd1..00000000 --- a/icuSources/tools/gencmn/decmn.8.in +++ /dev/null @@ -1,68 +0,0 @@ -.\" Hey, Emacs! This is -*-nroff-*- you know... -.\" -.\" decmn.8: manual page for the decmn utility -.\" -.\" Copyright (C) 2001 IBM, Inc. and others. -.\" -.\" Manual page by Yves Arrouye <yves@realnames.com>. -.\" -.TH DECMN 8 "5 November 2001" "ICU MANPAGE" "ICU @VERSION@ Manual" -.SH NAME -.B decmn -\- explodes an ICU memory-mappable data file -.SH SYNOPSIS -.B decmn -[ -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -] -[ -.B "\-n\" -] -[ -.BI "\-C\fP, \fB\-\-comment" -] -[ -.BI "\-d\fP, \fB\-\-destdir" " destination" -] -.I archive -.SH DESCRIPTION -.B decmn -reads the ICU memory-mappable data file -.I archive -and writes each of the -packaged files that it contains as a separate file in the destination -directory. -.PP -.B decmn -also writes a list of these files on its standard output. This list of -files can later be used, along with the individual files that have -been generated, to produce a new common data file using -.BR gencmn (8). -.\" Note that the output of -.\" .B decmn -.\" is not in the format expected by -.\" .BR gencmn (8). -.\" One can obtain a suitable file by filtering the output through -.\" .B "sed -e '1,2d' -e 's/[^=]*=//' -e '/^endfiles$/d" -.\" which transforms it into a simple list of filenames. -.SH OPTIONS -.TP -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -Print help about usage and exit. -.TP -.B \-n -Do not create the output files. -.TP -.BI "\-C\fP, \fB\-\-comment" -Print the comment embedded in the archive file and exit. -.TP -.BI "\-d\fP, \fB\-\-destdir" " destination" -Set the destination directory to -.IR destination . -The default destination directory is the current directory. -.SH VERSION -@VERSION@ -.SH COPYRIGHT -Copyright (C) 2001 IBM, Inc. and others. -.SH SEE ALSO -.BR gencmn (8) diff --git a/icuSources/tools/gencmn/decmn.c b/icuSources/tools/gencmn/decmn.c deleted file mode 100644 index 49643c9a..00000000 --- a/icuSources/tools/gencmn/decmn.c +++ /dev/null @@ -1,265 +0,0 @@ -/* -******************************************************************************* -* -* Copyright (C) 2000-2004, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: decmn.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2001mar05 -* created by: Markus W. Scherer -* changes by: Yves Arrouye -* -* This tool takes an ICU common data file (icuxyz.dat), -* outputs a list of components, -* and writes one file per packaged data piece in the common file. -* This can be used to add, remove, or replace data. -*/ - -#include <stdio.h> -#include <stdlib.h> -#include "unicode/utypes.h" -#include "unicode/putil.h" -#include "unicode/udata.h" -#include "uoptions.h" -#include "cstring.h" - -static uint8_t buffer[100000], buffer2[128*1024]; - -static const char *pname; - -static UOption options[]={ -/*0*/ UOPTION_HELP_H, -/*1*/ UOPTION_HELP_QUESTION_MARK, -/*2*/ UOPTION_DESTDIR, -/*3*/ UOPTION_DEF(0, 'n', UOPT_NO_ARG), -/*4*/ UOPTION_DEF("comment", 'C', UOPT_NO_ARG), -}; - -static int -compareFiles(const void *file1, const void *file2) { - /* sort by file offset */ - int32_t diff=*((int32_t *)file1+1)-*((int32_t *)file2+1); - if(diff!=0) { - return (int)(diff>>15)|1; - } else { - return 0; - } -} - -static int -copyFile(FILE *in, int32_t offset, int32_t size, const char *dir, const char *name) { - FILE *out; - int32_t length; - char path[512], *p; - - if(0!=fseek(in, offset, SEEK_SET)) { - fprintf(stderr, "%s: cannot seek to position %ld for file \"%s\"\n", pname, - (long)offset, name); - return 4; - } - - uprv_strcpy(path, dir); - p = path + strlen(path); - if (p[-1] != U_FILE_SEP_CHAR) { - *p++ = U_FILE_SEP_CHAR; - } - uprv_strcpy(p, name); - - out=fopen(path, "wb"); - if(out==NULL) { - fprintf(stderr, "%s: unable to open output file \"%s\"\n", pname, path); - return 5; - } - - /* copy the contents into the new, separate file */ - while(size>sizeof(buffer2)) { - length=(int32_t)fread(buffer2, 1, sizeof(buffer2), in); - if(length<=0) { - fprintf(stderr, "%s: read error while copying output file \"%s\"\n", pname, path); - fclose(out); - return 4; - } - if(length!=(int32_t)fwrite(buffer2, 1, length, out)) { - fprintf(stderr, "%s: write error while copying output file \"%s\"\n", pname, path); - fclose(out); - return 5; - } - size-=length; - } - while(size>0) { - length=(int32_t)fread(buffer2, 1, size, in); - if(length<=0) { - fprintf(stderr, "%s: read error while copying output file \"%s\"\n", pname, path); - fclose(out); - return 4; - } - if(length!=(int32_t)fwrite(buffer2, 1, length, out)) { - fprintf(stderr, "%s: write error while copying output file \"%s\"\n", pname, path); - fclose(out); - return 5; - } - size-=length; - } - - fclose(out); - return 0; -} - -extern int -main(int argc, char *argv[]) { - FILE *in; - UDataInfo *info; - uint8_t *base; - int32_t *p; - int32_t i, length, count, baseOffset; - int result, ishelp = 0; - - U_MAIN_INIT_ARGS(argc, argv); - - pname = uprv_strchr(*argv, U_FILE_SEP_CHAR); -#ifdef WIN32 - if (!pname) { - pname = uprv_strchr(*argv, '/'); - } -#endif - if (pname) { - ++pname; - } else { - pname = argv[0]; - } - - options[2].value = "."; - - argc = u_parseArgs(argc, argv, sizeof(options) / sizeof(*options), options); - ishelp = options[0].doesOccur || options[1].doesOccur; - if (ishelp || argc != 2) { - fprintf(stderr, - "%csage: %s [ -h, -?, --help ] [ -n ] [ -C, --comment ] [ -d, --destdir destination ] archive\n", ishelp ? 'U' : 'u', pname); - if (ishelp) { - fprintf(stderr, "\nOptions: -h, -?, --help print this message and exit\n" - " -n do not create files\n" - " -C, --comment print the comment embedded in the file and exit\n" - " -d, --destdir destination create files in destination\n"); - } - - return ishelp ? 0 : 1; - } - - in=fopen(argv[1], "rb"); - if(in==NULL) { - fprintf(stderr, "%s: unable to open input file \"%s\"\n", pname, argv[1]); - return 2; - } - - /* read the beginning of the file */ - length=(int32_t)fread(buffer, 1, sizeof(buffer), in); - if(length<20) { - fprintf(stderr, "%s: input file too short\n", pname); - fclose(in); - return 3; - } - - /* check the validity of the file */ - if(buffer[2]!=0xda || buffer[3]!=0x27) { - fprintf(stderr, "%s: not an ICU data file\n", pname); - fclose(in); - return 3; - } - - /* check the platform properties for the file */ - info=(UDataInfo *)(buffer+4); - if(info->isBigEndian!=U_IS_BIG_ENDIAN) { - fprintf(stderr, "%s: the file is in the wrong byte endianness\n", pname); - fclose(in); - return 3; - } - if(info->charsetFamily!=U_CHARSET_FAMILY) { - fprintf(stderr, "%s: the file is not built for this machine's charset family\n", pname); - fclose(in); - return 3; - } - - /* check that this is a common data file */ - if(info->dataFormat[0]!=0x43 || info->dataFormat[1]!=0x6d || info->dataFormat[2]!=0x6e || info->dataFormat[3]!=0x44) { - fprintf(stderr, "%s: this file is not a common data (archive) file\n", pname); - fclose(in); - return 3; - } - - /* check for version 1 */ - if(info->formatVersion[0]!=1) { - fprintf(stderr, "%s: the format version %d.%d.%d.%d is not known\n", pname, - info->formatVersion[0], info->formatVersion[1], info->formatVersion[2], info->formatVersion[3]); - fclose(in); - return 3; - } - - /* do we want to show the comment, and is there a comment? */ - if (options[4].doesOccur && *(uint16_t *)buffer>4+info->size) { - printf("%s\n", (const char *)(buffer+4+info->size)); - return 0; - } - - /* output all filenames */ - baseOffset=*(uint16_t *)buffer; - base=buffer+baseOffset; - p=(int32_t *)base; - count=*p++; - /* printf("files[%ld]\n", (long)count); */ - for(i=0; i<count; ++i) { - printf("%s%c%s\n", options[2].value, U_FILE_SEP_CHAR, base+*p); - p+=2; - } - /* puts("endfiles"); */ - - if (options[3].doesOccur) { /* Do not extract. */ - return 0; - } - - /* sort all files by their offsets in the common file */ - qsort(base+4, count, 8, compareFiles); - - /* write all files except the last one */ - p=(int32_t *)(base+4); - --count; - for(i=0; i<count; ++i) { - /* the size is the difference between this file's offset and the next one's */ - result=copyFile(in, baseOffset+p[1], p[3]-p[1], options[2].value, (const char *)(base+*p)); - if(result!=0) { - fclose(in); - return result; - } - p+=2; - } - - /* write the last file */ - if(count>=0) { - /* the size is the number of bytes to the end of the common file */ - if(0!=fseek(in, 0, SEEK_END)) { - fprintf(stderr, "%s: unable to seek to the end of the common file\n", pname); - return 4; - } - result=copyFile(in, baseOffset+p[1], (int32_t)ftell(in)-baseOffset-p[1], options[2].value, (const char *)(base+*p)); - if(result!=0) { - fclose(in); - return result; - } - } - - fclose(in); - return 0; -} - -/* - * Hey, Emacs, please set the following: - * - * Local Variables: - * indent-tabs-mode: nil - * End: - * - */ diff --git a/icuSources/tools/gencmn/decmn.dsp b/icuSources/tools/gencmn/decmn.dsp deleted file mode 100644 index 7a7b6636..00000000 --- a/icuSources/tools/gencmn/decmn.dsp +++ /dev/null @@ -1,197 +0,0 @@ -# Microsoft Developer Studio Project File - Name="decmn" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=decmn - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "decmn.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "decmn.mak" CFG="decmn - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "decmn - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "decmn - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "decmn - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "decmn - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "decmn - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "decmn___Win32_Release" -# PROP BASE Intermediate_Dir "decmn___Win32_Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W4 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\decmn.exe -InputPath=.\Release\decmn.exe -InputName=decmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "decmn - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "decmn___Win32_Debug" -# PROP BASE Intermediate_Dir "decmn___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W4 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib kernel32.lib user32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\decmn.exe -InputPath=.\Debug\decmn.exe -InputName=decmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "decmn - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "decmn___Win64_Release" -# PROP BASE Intermediate_Dir "decmn___Win64_Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W4 /GX /Zi /O2 /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\decmn.exe -InputPath=.\Release\decmn.exe -InputName=decmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "decmn - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "decmn___Win64_Debug" -# PROP BASE Intermediate_Dir "decmn___Win64_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W4 /Gm /GX /Zi /Od /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib kernel32.lib user32.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\decmn.exe -InputPath=.\Debug\decmn.exe -InputName=decmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "decmn - Win32 Release" -# Name "decmn - Win32 Debug" -# Name "decmn - Win64 Release" -# Name "decmn - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\decmn.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gencmn/gencmn.c b/icuSources/tools/gencmn/gencmn.c index 5e83a5c6..3b4c6835 100644 --- a/icuSources/tools/gencmn/gencmn.c +++ b/icuSources/tools/gencmn/gencmn.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,6 +28,7 @@ #include "unicode/uclean.h" #include "unewdata.h" #include "uoptions.h" +#include "putilimp.h" #define STRING_STORE_SIZE 100000 #define MAX_FILE_COUNT 2000 @@ -98,7 +99,6 @@ typedef struct { static File files[MAX_FILE_COUNT]; static uint32_t fileCount=0; -static UBool embed = FALSE; /* prototypes --------------------------------------------------------------- */ @@ -131,7 +131,6 @@ static UOption options[]={ /*8*/ UOPTION_DEF( "source", 'S', UOPT_NO_ARG), /*9*/ UOPTION_DEF( "entrypoint", 'e', UOPT_REQUIRES_ARG), /*10*/UOPTION_SOURCEDIR, -/*11*/UOPTION_DEF( "embed", 'E', UOPT_NO_ARG) }; static char *symPrefix = NULL; @@ -165,10 +164,6 @@ main(int argc, char* argv[]) { argc=-1; } - if(options[11].doesOccur) { - embed = TRUE; - } - if(argc<0 || options[0].doesOccur || options[1].doesOccur) { FILE *where = argc < 0 ? stderr : stdout; @@ -389,21 +384,6 @@ main(int argc, char* argv[]) { } -#if 0 - if(!embed) { - symPrefix = (char *) uprv_malloc(uprv_strlen(entrypointName) + 2); - - /* test for NULL */ - if (symPrefix == NULL) { - sprintf(buffer, "U_MEMORY_ALLOCATION_ERROR"); - exit(U_MEMORY_ALLOCATION_ERROR); - } - - uprv_strcpy(symPrefix, entrypointName); - uprv_strcat(symPrefix, "_"); - } -#endif - /* write the source file */ sprintf(buffer, "/*\n" @@ -487,23 +467,18 @@ addFile(const char *filename, UBool sourceTOC, UBool verbose) { if(!sourceTOC) { FileStream *file; + if(uprv_pathIsAbsolute(filename)) { + fprintf(stderr, "gencmn: Error: absolute path encountered. Old style paths are not supported. Use relative paths such as 'fur.res' or 'translit%cfur.res'.\n\tBad path: '%s'\n", U_FILE_SEP_CHAR, filename); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } fullPath = pathToFullPath(filename); /* store the pathname */ - if(!embed) { - length = (uint32_t)(uprv_strlen(filename) + 1 + uprv_strlen(options[6].value) + 1); - s=allocString(length); - uprv_strcpy(s, options[6].value); - uprv_strcat(s, U_TREE_ENTRY_SEP_STRING); - uprv_strcat(s, filename); - } else { - /* compatibility mode */ - const char *base; - base = findBasename(filename); - length = (uint32_t)(uprv_strlen(base) + 1); - s=allocString(length); - uprv_memcpy(s, base, length); - } + length = (uint32_t)(uprv_strlen(filename) + 1 + uprv_strlen(options[6].value) + 1); + s=allocString(length); + uprv_strcpy(s, options[6].value); + uprv_strcat(s, U_TREE_ENTRY_SEP_STRING); + uprv_strcat(s, filename); /* get the basename */ fixDirToTreePath(s); @@ -541,22 +516,13 @@ addFile(const char *filename, UBool sourceTOC, UBool verbose) { } else { char *t; - if(embed) { - filename = findBasename(filename); - } /* get and store the basename */ - if(!embed) { - /* need to include the package name */ - length = (uint32_t)(uprv_strlen(filename) + 1 + uprv_strlen(options[6].value) + 1); - s=allocString(length); - uprv_strcpy(s, options[6].value); - uprv_strcat(s, U_TREE_ENTRY_SEP_STRING); - uprv_strcat(s, filename); - } else { - length = (uint32_t)(uprv_strlen(filename) + 1); - s=allocString(length); - uprv_memcpy(s, filename, length); - } + /* need to include the package name */ + length = (uint32_t)(uprv_strlen(filename) + 1 + uprv_strlen(options[6].value) + 1); + s=allocString(length); + uprv_strcpy(s, options[6].value); + uprv_strcat(s, U_TREE_ENTRY_SEP_STRING); + uprv_strcat(s, filename); fixDirToTreePath(s); files[fileCount].basename=s; @@ -610,26 +576,24 @@ pathToFullPath(const char *path) { n = (int32_t)uprv_strlen(fullPath); uprv_strcat(fullPath, path); - if(!embed) { #if (U_FILE_ALT_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR) #if (U_FILE_ALT_SEP_CHAR != U_FILE_SEP_CHAR) - /* replace tree separator (such as '/') with file sep char (such as ':' or '\\') */ - for(;fullPath[n];n++) { - if(fullPath[n] == U_FILE_ALT_SEP_CHAR) { - fullPath[n] = U_FILE_SEP_CHAR; - } + /* replace tree separator (such as '/') with file sep char (such as ':' or '\\') */ + for(;fullPath[n];n++) { + if(fullPath[n] == U_FILE_ALT_SEP_CHAR) { + fullPath[n] = U_FILE_SEP_CHAR; } + } #endif #endif #if (U_FILE_SEP_CHAR != U_TREE_ENTRY_SEP_CHAR) - /* replace tree separator (such as '/') with file sep char (such as ':' or '\\') */ - for(;fullPath[n];n++) { - if(fullPath[n] == U_TREE_ENTRY_SEP_CHAR) { - fullPath[n] = U_FILE_SEP_CHAR; - } + /* replace tree separator (such as '/') with file sep char (such as ':' or '\\') */ + for(;fullPath[n];n++) { + if(fullPath[n] == U_TREE_ENTRY_SEP_CHAR) { + fullPath[n] = U_FILE_SEP_CHAR; } -#endif } +#endif return fullPath; } diff --git a/icuSources/tools/gencmn/gencmn.dsp b/icuSources/tools/gencmn/gencmn.dsp deleted file mode 100644 index b62ec3ad..00000000 --- a/icuSources/tools/gencmn/gencmn.dsp +++ /dev/null @@ -1,198 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gencmn" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gencmn - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gencmn.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gencmn.mak" CFG="gencmn - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gencmn - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gencmn - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gencmn - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gencmn - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gencmn - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gencmn.exe -InputPath=.\Release\gencmn.exe -InputName=gencmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencmn - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gencmn.exe -InputPath=.\Debug\gencmn.exe -InputName=gencmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencmn - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gencmn.exe -InputPath=.\Release\gencmn.exe -InputName=gencmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencmn - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gencmn.exe -InputPath=.\Debug\gencmn.exe -InputName=gencmn -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gencmn - Win32 Release" -# Name "gencmn - Win32 Debug" -# Name "gencmn - Win64 Release" -# Name "gencmn - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\gencmn.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gencmn/gencmn.vcproj b/icuSources/tools/gencmn/gencmn.vcproj index 8e51fbd3..0cd618d8 100644 --- a/icuSources/tools/gencmn/gencmn.vcproj +++ b/icuSources/tools/gencmn/gencmn.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gencmn.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gencmn.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gencnval/Makefile.in b/icuSources/tools/gencnval/Makefile.in index dfe91aa4..a3b90420 100644 --- a/icuSources/tools/gencnval/Makefile.in +++ b/icuSources/tools/gencnval/Makefile.in @@ -1,9 +1,9 @@ ## Makefile.in for ICU - tools/gencnval -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. -## Steven R. Loomi +## Steven R. Loomis -## Install directory information +## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -14,34 +14,32 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/gencnval -## - TARGET_STUB_NAME = gencnval SECTION = 1 -MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -ALL_MAN_FILES = $(MANX_FILES) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(ALL_MAN_FILES) $(DEPS) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gencnval.o DEPS = $(OBJECTS:.o=.d) - ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man install-manx +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -54,12 +52,15 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: @@ -77,24 +78,13 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) -# man page -install-man: install-manx -install-manx: $(MANX_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) %.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -# only on linux probably ? -#$(TARGET).ps: $(TARGET).$(SECTION) -# groff -man < $< > $@ - -#$(TARGET).pdf: $(TARGET).ps -# ps2pdf $< $@ ifeq (,$(MAKECMDGOALS)) -include $(DEPS) diff --git a/icuSources/tools/gencnval/gencnval.c b/icuSources/tools/gencnval/gencnval.c index bc38e9ca..83eebd9c 100644 --- a/icuSources/tools/gencnval/gencnval.c +++ b/icuSources/tools/gencnval/gencnval.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -84,7 +84,7 @@ static const UDataInfo dataInfo={ 0, {0x43, 0x76, 0x41, 0x6c}, /* dataFormat="CvAl" */ - {3, 0, 0, 0}, /* formatVersion */ + {3, 0, 1, 0}, /* formatVersion */ {1, 4, 2, 0} /* dataVersion */ }; @@ -137,6 +137,11 @@ static UBool standardTagsUsed = FALSE; static UBool verbose = FALSE; static int lineNum = 1; +static UConverterAliasOptions tableOptions = { + UCNV_IO_STD_NORMALIZED, + 1 /* containsCnvOptionInfo */ +}; + /* prototypes --------------------------------------------------------------- */ static void @@ -663,19 +668,7 @@ addAlias(const char *alias, uint16_t standard, uint16_t converter, UBool default } } - /* Check for duplicates in a tag/converter combination */ - for (idx = 0; idx < aliasList->aliasCount; idx++) { - uint16_t aliasNum = tags[standard].aliasList[converter].aliases[idx]; - if (aliasNum && ucnv_compareNames(alias, GET_ALIAS_STR(aliasNum)) == 0 && standard != ALL_TAG_NUM) - { - fprintf(stderr, "warning(line %d): duplicate alias %s and %s found for standard %s\n", - lineNum, alias, GET_ALIAS_STR(aliasNum), GET_TAG_STR(tags[standard].tag)); - dupFound = TRUE; - break; - } - } - - if (!dupFound && standard != ALL_TAG_NUM) { + if (standard != ALL_TAG_NUM) { /* Check for duplicate aliases for this tag on all converters */ for (idx = 0; idx < converterCount; idx++) { for (idx2 = 0; idx2 < tags[standard].aliasList[idx].aliasCount; idx2++) { @@ -683,8 +676,25 @@ addAlias(const char *alias, uint16_t standard, uint16_t converter, UBool default if (aliasNum && ucnv_compareNames(alias, GET_ALIAS_STR(aliasNum)) == 0) { - fprintf(stderr, "warning(line %d): duplicate alias %s found for standard tag %s between converter %s and converter %s\n", - lineNum, alias, GET_TAG_STR(tags[standard].tag), GET_ALIAS_STR(converters[converter].converter), GET_ALIAS_STR(converters[idx].converter)); + if (idx == converter) { + /* + * (alias, standard) duplicates are harmless if they map to the same converter. + * Only print a warning in verbose mode, or if the alias is a precise duplicate, + * not just a lenient-match duplicate. + */ + if (verbose || 0 == uprv_strcmp(alias, GET_ALIAS_STR(aliasNum))) { + fprintf(stderr, "warning(line %d): duplicate aliases %s and %s found for standard %s and converter %s\n", + lineNum, alias, GET_ALIAS_STR(aliasNum), + GET_TAG_STR(tags[standard].tag), + GET_ALIAS_STR(converters[converter].converter)); + } + } else { + fprintf(stderr, "warning(line %d): duplicate aliases %s and %s found for standard tag %s between converter %s and converter %s\n", + lineNum, alias, GET_ALIAS_STR(aliasNum), + GET_TAG_STR(tags[standard].tag), + GET_ALIAS_STR(converters[converter].converter), + GET_ALIAS_STR(converters[idx].converter)); + } dupFound = TRUE; break; } @@ -860,6 +870,9 @@ resolveAliases(uint16_t *uniqueAliasArr, uint16_t *uniqueAliasToConverterArr, ui oldTagNum = currTagNum; /*printf("%s -> %s\n", GET_ALIAS_STR(knownAliases[idx]), GET_ALIAS_STR(converters[currConvNum].converter));*/ } + if (uprv_strchr(GET_ALIAS_STR(converters[currConvNum].converter), UCNV_OPTION_SEP_CHAR) != NULL) { + uniqueAliasToConverterArr[uniqueAliasIdx-1] |= UCNV_CONTAINS_OPTION_BIT; + } } return uniqueAliasIdx; } @@ -905,6 +918,26 @@ createOneAliasList(uint16_t *aliasArrLists, uint32_t tag, uint32_t converter, ui } } +static void +createNormalizedAliasStrings(char *normalizedStrings, const char *origStringBlock, int32_t stringBlockLength) { + int32_t currStrLen; + uprv_memcpy(normalizedStrings, origStringBlock, stringBlockLength); + while ((currStrLen = (int32_t)uprv_strlen(origStringBlock)) < stringBlockLength) { + int32_t currStrSize = currStrLen + 1; + if (currStrLen > 0) { + int32_t normStrLen; + ucnv_io_stripForCompare(normalizedStrings, origStringBlock); + normStrLen = uprv_strlen(normalizedStrings); + if (normStrLen > 0) { + uprv_memset(normalizedStrings + normStrLen, 0, currStrSize - normStrLen); + } + } + stringBlockLength -= currStrSize; + normalizedStrings += currStrSize; + origStringBlock += currStrSize; + } +} + static void writeAliasTable(UNewDataMemory *out) { uint32_t i, j; @@ -928,7 +961,12 @@ writeAliasTable(UNewDataMemory *out) { } /* Write the size of the TOC */ - udata_write32(out, 8); + if (tableOptions.stringNormalizationType == UCNV_IO_UNNORMALIZED) { + udata_write32(out, 8); + } + else { + udata_write32(out, 9); + } /* Write the sizes of each section */ /* All sizes are the number of uint16_t units, not bytes */ @@ -938,8 +976,11 @@ writeAliasTable(UNewDataMemory *out) { udata_write32(out, uniqueAliasesSize); /* The preresolved form of mapping an untagged the alias to a converter */ udata_write32(out, tagCount * converterCount); udata_write32(out, aliasListsSize + 1); - udata_write32(out, 0); /* Reserved space. */ + udata_write32(out, sizeof(tableOptions) / sizeof(uint16_t)); udata_write32(out, (tagBlock.top + stringBlock.top) / sizeof(uint16_t)); + if (tableOptions.stringNormalizationType != UCNV_IO_UNNORMALIZED) { + udata_write32(out, (tagBlock.top + stringBlock.top) / sizeof(uint16_t)); + } /* write the table of converters */ /* Think of this as the column headers */ @@ -973,12 +1014,26 @@ writeAliasTable(UNewDataMemory *out) { /* Write the lists */ udata_writeBlock(out, (const void *)aliasLists, aliasListsSize * sizeof(uint16_t)); + /* Write any options for the alias table. */ + udata_writeBlock(out, (const void *)&tableOptions, sizeof(tableOptions)); + /* write the tags strings */ udata_writeString(out, tagBlock.store, tagBlock.top); /* write the aliases strings */ udata_writeString(out, stringBlock.store, stringBlock.top); + /* write the normalized aliases strings */ + if (tableOptions.stringNormalizationType != UCNV_IO_UNNORMALIZED) { + char *normalizedStrings = (char *)uprv_malloc(tagBlock.top + stringBlock.top); + createNormalizedAliasStrings(normalizedStrings, tagBlock.store, tagBlock.top); + createNormalizedAliasStrings(normalizedStrings + tagBlock.top, stringBlock.store, stringBlock.top); + + /* Write out the complete normalized array. */ + udata_writeString(out, normalizedStrings, tagBlock.top + stringBlock.top); + uprv_free(normalizedStrings); + } + uprv_free(aliasArrLists); uprv_free(uniqueAliases); } diff --git a/icuSources/tools/gencnval/gencnval.dsp b/icuSources/tools/gencnval/gencnval.dsp deleted file mode 100644 index 12e2154f..00000000 --- a/icuSources/tools/gencnval/gencnval.dsp +++ /dev/null @@ -1,198 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gencnval" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gencnval - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gencnval.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gencnval.mak" CFG="gencnval - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gencnval - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gencnval - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gencnval - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gencnval - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gencnval - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gencnval.exe -InputPath=.\Release\gencnval.exe -InputName=gencnval -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencnval - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gencnval.exe -InputPath=.\Debug\gencnval.exe -InputName=gencnval -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencnval - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gencnval.exe -InputPath=.\Release\gencnval.exe -InputName=gencnval -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gencnval - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gencnval.exe -InputPath=.\Debug\gencnval.exe -InputName=gencnval -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gencnval - Win32 Release" -# Name "gencnval - Win32 Debug" -# Name "gencnval - Win64 Release" -# Name "gencnval - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\gencnval.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gencnval/gencnval.vcproj b/icuSources/tools/gencnval/gencnval.vcproj index 5c6d5235..3570af31 100644 --- a/icuSources/tools/gencnval/gencnval.vcproj +++ b/icuSources/tools/gencnval/gencnval.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gencnval.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gencnval.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/genctd/Makefile.in b/icuSources/tools/genctd/Makefile.in new file mode 100644 index 00000000..6cea47a5 --- /dev/null +++ b/icuSources/tools/genctd/Makefile.in @@ -0,0 +1,95 @@ +## Makefile.in for ICU - tools/genctd +## Copyright (c) 2002-2006 International Business Machines Corporation and +## others. All Rights Reserved. + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../.. + +include $(top_builddir)/icudefs.mk + +## Build directory information +subdir = tools/genctd + +TARGET_STUB_NAME = genctd + +SECTION = 1 + +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) + + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) $(MAN_FILES) + +## Target information +TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) + +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) + +OBJECTS = genctd.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) $(MAN_FILES) + +install-local: all-local install-man + $(MKINSTALLDIRS) $(DESTDIR)$(bindir) + $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) + +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(TARGET) $(OBJECTS) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: all-local + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(TARGET) : $(OBJECTS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif + diff --git a/icuSources/tools/genctd/genctd.1.in b/icuSources/tools/genctd/genctd.1.in new file mode 100644 index 00000000..36224ea2 --- /dev/null +++ b/icuSources/tools/genctd/genctd.1.in @@ -0,0 +1,111 @@ +.\" Hey, Emacs! This is -*-nroff-*- you know... +.\" +.\" genctd.1: manual page for the genctd utility +.\" +.\" Copyright (C) 2006 IBM, Inc. and others. +.\" +.TH GENCTD 1 "8 March 2006" "ICU MANPAGE" "ICU @VERSION@ Manual" +.SH NAME +.B genctd +\- Compiles word list into ICU compact trie dictionary +.SH SYNOPSIS +.B genctd +[ +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +] +[ +.BR "\-V\fP, \fB\-\-version" +] +[ +.BR "\-c\fP, \fB\-\-copyright" +] +[ +.BR "\-v\fP, \fB\-\-verbose" +] +[ +.BI "\-d\fP, \fB\-\-destdir" " destination" +] +[ +.BI "\-i\fP, \fB\-\-icudatadir" " directory" +] +.BI "\-o\fP, \fB\-\-out" " output\-file" +.IR " dictionary\-file" +.SH DESCRIPTION +.B genctd +reads the word list from +.I dictionary-file +and creates a compact trie dictionary file. Normally this data file has the +.B .ctd +extension. +.PP +Words begin at the beginning of a line and are terminated by the first whitespace. +Lines that begin with whitespace are ignored. +.SH OPTIONS +.TP +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +Print help about usage and exit. +.TP +.BR "\-V\fP, \fB\-\-version" +Print the version of +.B genctd +and exit. +.TP +.BR "\-c\fP, \fB\-\-copyright" +Embeds the standard ICU copyright into the +.IR output-file . +.TP +.BR "\-v\fP, \fB\-\-verbose" +Display extra informative messages during execution. +.TP +.BI "\-d\fP, \fB\-\-destdir" " destination" +Set the destination directory of the +.IR output-file +to +.IR destination . +.TP +.BI "\-i\fP, \fB\-\-icudatadir" " directory" +Look for any necessary ICU data files in +.IR directory . +For example, the file +.B pnames.icu +must be located when ICU's data is not built as a shared library. +The default ICU data directory is specified by the environment variable +.BR ICU_DATA . +Most configurations of ICU do not require this argument. +.TP +.BI " dictionary\-file" +The source file to read. +.TP +.BI "\-o\fP, \fB\-\-out" " output\-file" +The output data file to write. +.SH CAVEATS +When the +.IR dictionary-file +contains a byte order mark (BOM) at the beginning of the file, which is the Unicode character +.B U+FEFF, +then the +.IR dictionary-file +is interpreted as Unicode. Without the BOM, +the file is interpreted in the current operating system default codepage. +In order to eliminate any ambiguity of the encoding for how the +.IR rule-file +was written, it is recommended that you write this file in UTF-8 +with the BOM. +.SH ENVIRONMENT +.TP 10 +.B ICU_DATA +Specifies the directory containing ICU data. Defaults to +.BR @thepkgicudatadir@/@PACKAGE@/@VERSION@/ . +Some tools in ICU depend on the presence of the trailing slash. It is thus +important to make sure that it is present if +.B ICU_DATA +is set. +.SH AUTHORS +Deborah Goldsmith +.SH VERSION +1.0 +.SH COPYRIGHT +Copyright (C) 2006 IBM, Inc. and others. +.SH SEE ALSO +.BR http://icu.sourceforge.net/userguide/boundaryAnalysis.html + diff --git a/icuSources/tools/genctd/genctd.cpp b/icuSources/tools/genctd/genctd.cpp new file mode 100644 index 00000000..5472d026 --- /dev/null +++ b/icuSources/tools/genctd/genctd.cpp @@ -0,0 +1,393 @@ +/* +********************************************************************** +* Copyright (C) 2002-2006, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* +* File genctd.c +*/ + +//-------------------------------------------------------------------- +// +// Tool for generating CompactTrieDictionary data files (.ctd files). +// +// Usage: genctd [options] -o output-file.ctd input-file +// +// options: -v verbose +// -? or -h help +// +// The input file is a plain text file containing words, one per line. +// Words end at the first whitespace; lines beginning with whitespace +// are ignored. +// The file can be encoded as utf-8, or utf-16 (either endian), or +// in the default code page (platform dependent.). utf encoded +// files must include a BOM. +// +//-------------------------------------------------------------------- + +#include "unicode/utypes.h" +#include "unicode/uchar.h" +#include "unicode/ucnv.h" +#include "unicode/uniset.h" +#include "unicode/unistr.h" +#include "unicode/uclean.h" +#include "unicode/udata.h" +#include "unicode/putil.h" + +#include "uoptions.h" +#include "unewdata.h" +#include "ucmndata.h" +#include "rbbidata.h" +#include "triedict.h" +#include "cmemory.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static char *progName; +static UOption options[]={ + UOPTION_HELP_H, /* 0 */ + UOPTION_HELP_QUESTION_MARK, /* 1 */ + UOPTION_VERBOSE, /* 2 */ + { "out", NULL, NULL, NULL, 'o', UOPT_REQUIRES_ARG, 0 }, /* 3 */ + UOPTION_ICUDATADIR, /* 4 */ + UOPTION_DESTDIR, /* 5 */ + UOPTION_COPYRIGHT, /* 6 */ +}; + +void usageAndDie(int retCode) { + printf("Usage: %s [-v] [-options] -o output-file dictionary-file\n", progName); + printf("\tRead in word list and write out compact trie dictionary\n" + "options:\n" + "\t-h or -? or --help this usage text\n" + "\t-V or --version show a version message\n" + "\t-c or --copyright include a copyright notice\n" + "\t-v or --verbose turn on verbose output\n" + "\t-i or --icudatadir directory for locating any needed intermediate data files,\n" + "\t followed by path, defaults to %s\n" + "\t-d or --destdir destination directory, followed by the path\n", + u_getDataDirectory()); + exit (retCode); +} + + +#if UCONFIG_NO_BREAK_ITERATION + +/* dummy UDataInfo cf. udata.h */ +static UDataInfo dummyDataInfo = { + sizeof(UDataInfo), + 0, + + U_IS_BIG_ENDIAN, + U_CHARSET_FAMILY, + U_SIZEOF_UCHAR, + 0, + + { 0, 0, 0, 0 }, /* dummy dataFormat */ + { 0, 0, 0, 0 }, /* dummy formatVersion */ + { 0, 0, 0, 0 } /* dummy dataVersion */ +}; + +#else + +// +// Set up the ICU data header, defined in ucmndata.h +// +DataHeader dh ={ + {sizeof(DataHeader), // Struct MappedData + 0xda, + 0x27}, + + { // struct UDataInfo + sizeof(UDataInfo), // size + 0, // reserved + U_IS_BIG_ENDIAN, + U_CHARSET_FAMILY, + U_SIZEOF_UCHAR, + 0, // reserved + + { 0x54, 0x72, 0x44, 0x63 }, // "TrDc" Trie Dictionary + { 1, 0, 0, 0 }, // 1.0.0.0 + { 0, 0, 0, 0 }, // Irrelevant for this data type + }}; + +#endif + +//---------------------------------------------------------------------------- +// +// main for genctd +// +//---------------------------------------------------------------------------- +int main(int argc, char **argv) { + UErrorCode status = U_ZERO_ERROR; + const char *wordFileName; + const char *outFileName; + const char *outDir = NULL; + const char *copyright = NULL; + + // + // Pick up and check the command line arguments, + // using the standard ICU tool utils option handling. + // + U_MAIN_INIT_ARGS(argc, argv); + progName = argv[0]; + argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); + if(argc<0) { + // Unrecognized option + fprintf(stderr, "error in command line argument \"%s\"\n", argv[-argc]); + usageAndDie(U_ILLEGAL_ARGUMENT_ERROR); + } + + if(options[0].doesOccur || options[1].doesOccur) { + // -? or -h for help. + usageAndDie(0); + } + + if (!options[3].doesOccur || argc < 2) { + fprintf(stderr, "input and output file must both be specified.\n"); + usageAndDie(U_ILLEGAL_ARGUMENT_ERROR); + } + outFileName = options[3].value; + wordFileName = argv[1]; + + if (options[4].doesOccur) { + u_setDataDirectory(options[4].value); + } + + /* Initialize ICU */ + u_init(&status); + if (U_FAILURE(status)) { + fprintf(stderr, "%s: can not initialize ICU. status = %s\n", + argv[0], u_errorName(status)); + exit(1); + } + status = U_ZERO_ERROR; + + /* Combine the directory with the file name */ + if(options[5].doesOccur) { + outDir = options[5].value; + } + if (options[6].doesOccur) { + copyright = U_COPYRIGHT_STRING; + } + +#if UCONFIG_NO_BREAK_ITERATION + + UNewDataMemory *pData; + char msg[1024]; + + /* write message with just the name */ + sprintf(msg, "genctd writes dummy %s because of UCONFIG_NO_BREAK_ITERATION, see uconfig.h", outFileName); + fprintf(stderr, "%s\n", msg); + + /* write the dummy data file */ + pData = udata_create(outDir, NULL, outFileName, &dummyDataInfo, NULL, &status); + udata_writeBlock(pData, msg, strlen(msg)); + udata_finish(pData, &status); + return (int)status; + +#else + + // + // Read in the dictionary source file + // + long result; + long wordFileSize; + FILE *file; + char *wordBufferC; + + file = fopen(wordFileName, "rb"); + if( file == 0 ) { + fprintf(stderr, "Could not open file \"%s\"\n", wordFileName); + exit(-1); + } + fseek(file, 0, SEEK_END); + wordFileSize = ftell(file); + fseek(file, 0, SEEK_SET); + wordBufferC = new char[wordFileSize+10]; + + result = (long)fread(wordBufferC, 1, wordFileSize, file); + if (result != wordFileSize) { + fprintf(stderr, "Error reading file \"%s\"\n", wordFileName); + exit (-1); + } + wordBufferC[wordFileSize]=0; + fclose(file); + + // + // Look for a Unicode Signature (BOM) on the word file + // + int32_t signatureLength; + const char * wordSourceC = wordBufferC; + const char* encoding = ucnv_detectUnicodeSignature( + wordSourceC, wordFileSize, &signatureLength, &status); + if (U_FAILURE(status)) { + exit(status); + } + if(encoding!=NULL ){ + wordSourceC += signatureLength; + wordFileSize -= signatureLength; + } + + // + // Open a converter to take the rule file to UTF-16 + // + UConverter* conv; + conv = ucnv_open(encoding, &status); + if (U_FAILURE(status)) { + fprintf(stderr, "ucnv_open: ICU Error \"%s\"\n", u_errorName(status)); + exit(status); + } + + // + // Convert the words to UChar. + // Preflight first to determine required buffer size. + // + uint32_t destCap = ucnv_toUChars(conv, + NULL, // dest, + 0, // destCapacity, + wordSourceC, + wordFileSize, + &status); + if (status != U_BUFFER_OVERFLOW_ERROR) { + fprintf(stderr, "ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status)); + exit(status); + }; + + status = U_ZERO_ERROR; + UChar *wordSourceU = new UChar[destCap+1]; + ucnv_toUChars(conv, + wordSourceU, // dest, + destCap+1, + wordSourceC, + wordFileSize, + &status); + if (U_FAILURE(status)) { + fprintf(stderr, "ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status)); + exit(status); + }; + ucnv_close(conv); + + // Get rid of the original file buffer + delete[] wordBufferC; + + // Create a MutableTrieDictionary, and loop through all the lines, inserting + // words. + + // First, pick a median character. + UChar *current = wordSourceU + (destCap/2); + UChar uc = *current++; + UnicodeSet breaks; + breaks.add(0x000A); // Line Feed + breaks.add(0x000D); // Carriage Return + breaks.add(0x2028); // Line Separator + breaks.add(0x2029); // Paragraph Separator + + do { + // Look for line break + while (uc && !breaks.contains(uc)) { + uc = *current++; + } + // Now skip to first non-line-break + while (uc && breaks.contains(uc)) { + uc = *current++; + } + } + while (uc && (breaks.contains(uc) || u_isspace(uc))); + + MutableTrieDictionary *mtd = new MutableTrieDictionary(uc, status); + + if (U_FAILURE(status)) { + fprintf(stderr, "new MutableTrieDictionary: ICU Error \"%s\"\n", u_errorName(status)); + exit(status); + } + + // Now add the words. Words are non-space characters at the beginning of + // lines, and must be at least one UChar. + current = wordSourceU; + UChar *candidate = current; + uc = *current++; + int32_t length = 0; + + while (uc) { + while (uc && !u_isspace(uc)) { + ++length; + uc = *current++; + } + if (length > 0) { + mtd->addWord(candidate, length, status); + if (U_FAILURE(status)) { + fprintf(stderr, "MutableTrieDictionary::addWord: ICU Error \"%s\"\n", + u_errorName(status)); + exit(status); + } + } + // Find beginning of next line + while (uc && !breaks.contains(uc)) { + uc = *current++; + } + while (uc && breaks.contains(uc)) { + uc = *current++; + } + candidate = current-1; + length = 0; + } + + // Get rid of the Unicode text buffer + delete[] wordSourceU; + + // Now, create a CompactTrieDictionary from the mutable dictionary + CompactTrieDictionary *ctd = new CompactTrieDictionary(*mtd, status); + if (U_FAILURE(status)) { + fprintf(stderr, "new CompactTrieDictionary: ICU Error \"%s\"\n", u_errorName(status)); + exit(status); + } + + // Get rid of the MutableTrieDictionary + delete mtd; + + // + // Get the binary data from the dictionary. + // + uint32_t outDataSize = ctd->dataSize(); + const uint8_t *outData = (const uint8_t *)ctd->data(); + + // + // Create the output file + // + size_t bytesWritten; + UNewDataMemory *pData; + pData = udata_create(outDir, NULL, outFileName, &(dh.info), copyright, &status); + if(U_FAILURE(status)) { + fprintf(stderr, "genctd: Could not open output file \"%s\", \"%s\"\n", + outFileName, u_errorName(status)); + exit(status); + } + + + // Write the data itself. + udata_writeBlock(pData, outData, outDataSize); + // finish up + bytesWritten = udata_finish(pData, &status); + if(U_FAILURE(status)) { + fprintf(stderr, "genctd: error \"%s\" writing the output file\n", u_errorName(status)); + exit(status); + } + + if (bytesWritten != outDataSize) { + fprintf(stderr, "Error writing to output file \"%s\"\n", outFileName); + exit(-1); + } + + // Get rid of the CompactTrieDictionary + delete ctd; + + u_cleanup(); + + printf("genctd: tool completed successfully.\n"); + return 0; + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ +} + diff --git a/icuSources/tools/gencmn/decmn.vcproj b/icuSources/tools/genctd/genctd.vcproj similarity index 70% rename from icuSources/tools/gencmn/decmn.vcproj rename to icuSources/tools/genctd/genctd.vcproj index 3d0d1d4e..d3c5911c 100644 --- a/icuSources/tools/gencmn/decmn.vcproj +++ b/icuSources/tools/genctd/genctd.vcproj @@ -2,7 +2,8 @@ <VisualStudioProject ProjectType="Visual C++" Version="7.10" - Name="decmn" + Name="genctd" + ProjectGUID="{9D4211F7-2C77-439C-82F0-30A4E43BA569}" SccProjectName="" SccLocalPath=""> <Platforms> @@ -12,27 +13,27 @@ <Configurations> <Configuration Name="Release|Win32" - OutputDirectory=".\decmn_Win32_Release" - IntermediateDirectory=".\decmn_Win32_Release" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" ConfigurationType="1" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" - PrecompiledHeaderFile=".\decmn_Win32_Release/decmn.pch" - AssemblerListingLocation=".\decmn_Win32_Release/" - ObjectFile=".\decmn_Win32_Release/" - ProgramDataBaseFileName=".\decmn_Win32_Release/" - WarningLevel="4" + TreatWChar_tAsBuiltInType="TRUE" + PrecompiledHeaderFile=".\Release/genctd.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" SuppressStartupBanner="TRUE" CompileAs="0"/> <Tool @@ -42,14 +43,14 @@ Outputs="..\..\..\bin\$(TargetFileName)"/> <Tool Name="VCLinkerTool" - OutputFile=".\decmn_Win32_Release/decmn.exe" + OutputFile=".\Release/genctd.exe" LinkIncremental="1" SuppressStartupBanner="TRUE" - ProgramDatabaseFile=".\decmn_Win32_Release/decmn.pdb" + ProgramDatabaseFile=".\Release/genctd.pdb" SubSystem="1"/> <Tool Name="VCMIDLTool" - TypeLibraryName=".\decmn_Win32_Release/decmn.tlb"/> + TypeLibraryName=".\Release/genctd.tlb"/> <Tool Name="VCPostBuildEventTool"/> <Tool @@ -73,8 +74,8 @@ </Configuration> <Configuration Name="Debug|Win32" - OutputDirectory=".\decmn_Win32_Debug" - IntermediateDirectory=".\decmn_Win32_Debug" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" ConfigurationType="1" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="FALSE" @@ -83,18 +84,19 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" - PrecompiledHeaderFile=".\decmn_Win32_Debug/decmn.pch" - AssemblerListingLocation=".\decmn_Win32_Debug/" - ObjectFile=".\decmn_Win32_Debug/" - ProgramDataBaseFileName=".\decmn_Win32_Debug/" + TreatWChar_tAsBuiltInType="TRUE" + PrecompiledHeaderFile=".\Debug/genctd.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" BrowseInformation="1" - WarningLevel="4" + WarningLevel="3" SuppressStartupBanner="TRUE" DebugInformationFormat="4" CompileAs="0"/> @@ -105,15 +107,15 @@ Outputs="..\..\..\bin\$(TargetFileName)"/> <Tool Name="VCLinkerTool" - OutputFile=".\decmn_Win32_Debug/decmn.exe" + OutputFile=".\Debug/genctd.exe" LinkIncremental="2" SuppressStartupBanner="TRUE" GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\decmn_Win32_Debug/decmn.pdb" + ProgramDatabaseFile=".\Debug/genctd.pdb" SubSystem="1"/> <Tool Name="VCMIDLTool" - TypeLibraryName=".\decmn_Win32_Debug/decmn.tlb"/> + TypeLibraryName=".\Debug/genctd.tlb"/> <Tool Name="VCPostBuildEventTool"/> <Tool @@ -143,7 +145,7 @@ Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> <File - RelativePath=".\decmn.c"> + RelativePath=".\genctd.cpp"> </File> </Filter> <Filter diff --git a/icuSources/tools/gendraft/DeprecatedApi.txt b/icuSources/tools/gendraft/DeprecatedApi.txt deleted file mode 100644 index b6a8527a..00000000 --- a/icuSources/tools/gendraft/DeprecatedApi.txt +++ /dev/null @@ -1,225 +0,0 @@ -ubrk.h UBRK_TITLE ICU 2.8 Use the word break iterator for titlecasing for Unicode 4 and later. -ucol.h ucol_getLocale ICU 2.8 Use ucol_getLocaleByType instead -uloc.h ULOC_REQUESTED_LOCALE ICU 2.8 -ures.h RES_NONE ICU 2.6 Use the URES_ constant instead. -ures.h RES_STRING ICU 2.6 Use the URES_ constant instead. -ures.h RES_BINARY ICU 2.6 Use the URES_ constant instead. -ures.h RES_TABLE ICU 2.6 Use the URES_ constant instead. -ures.h RES_ALIAS ICU 2.6 Use the URES_ constant instead. -ures.h RES_INT ICU 2.6 Use the URES_ constant instead. -ures.h RES_ARRAY ICU 2.6 Use the URES_ constant instead. -ures.h RES_INT_VECTOR ICU 2.6 Use the URES_ constant instead. -ures.h RES_RESERVED ICU 2.6 Not used. -ures.h ures_countArrayItems ICU 2.8 User ures_getSize instead -ures.h ures_getLocale ICU 2.8 Use ures_getLocaleByType instead. -ures.h ures_getVersionNumber ICU 2.8 Use ures_getVersion instead. -utf_old.h (null) ICU 2.4. Use the macros in utf.h, utf16.h, utf8.h instead. -utf_old.h UTF16_APPEND_CHAR_SAFE ICU 2.4. Use U16_APPEND instead, see utf_old.h. -utf_old.h UTF16_APPEND_CHAR_UNSAFE ICU 2.4. Renamed to U16_APPEND_UNSAFE, see utf_old.h. -utf_old.h UTF16_ARRAY_SIZE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF16_BACK_1_SAFE ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. -utf_old.h UTF16_BACK_1_UNSAFE ICU 2.4. Renamed to U16_BACK_1_UNSAFE, see utf_old.h. -utf_old.h UTF16_BACK_N_SAFE ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. -utf_old.h UTF16_BACK_N_UNSAFE ICU 2.4. Renamed to U16_BACK_N_UNSAFE, see utf_old.h. -utf_old.h UTF16_CHAR_LENGTH ICU 2.4. Renamed to U16_LENGTH, see utf_old.h. -utf_old.h UTF16_FWD_1_SAFE ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. -utf_old.h UTF16_FWD_1_UNSAFE ICU 2.4. Renamed to U16_FWD_1_UNSAFE, see utf_old.h. -utf_old.h UTF16_FWD_N_SAFE ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. -utf_old.h UTF16_FWD_N_UNSAFE ICU 2.4. Renamed to U16_FWD_N_UNSAFE, see utf_old.h. -utf_old.h UTF16_GET_CHAR_SAFE ICU 2.4. Use U16_GET instead, see utf_old.h. -utf_old.h UTF16_GET_CHAR_UNSAFE ICU 2.4. Renamed to U16_GET_UNSAFE, see utf_old.h. -utf_old.h UTF16_GET_PAIR_VALUE ICU 2.4. Renamed to U16_GET_SUPPLEMENTARY, see utf_old.h. -utf_old.h UTF16_IS_LEAD ICU 2.4. Renamed to U16_IS_LEAD, see utf_old.h. -utf_old.h UTF16_IS_SINGLE ICU 2.4. Renamed to U16_IS_SINGLE, see utf_old.h. -utf_old.h UTF16_IS_TRAIL ICU 2.4. Renamed to U16_IS_TRAIL, see utf_old.h. -utf_old.h UTF16_LEAD ICU 2.4. Renamed to U16_LEAD, see utf_old.h. -utf_old.h UTF16_MAX_CHAR_LENGTH ICU 2.4. Renamed to U16_MAX_LENGTH, see utf_old.h. -utf_old.h UTF16_NEED_MULTIPLE_UCHAR ICU 2.4. Use U16_LENGTH or test ((uint32_t)(c)>0xffff) instead, see utf_old.h. -utf_old.h UTF16_NEXT_CHAR_SAFE ICU 2.4. Use U16_NEXT instead, see utf_old.h. -utf_old.h UTF16_NEXT_CHAR_UNSAFE ICU 2.4. Renamed to U16_NEXT_UNSAFE, see utf_old.h. -utf_old.h UTF16_PREV_CHAR_SAFE ICU 2.4. Use U16_PREV instead, see utf_old.h. -utf_old.h UTF16_PREV_CHAR_UNSAFE ICU 2.4. Renamed to U16_PREV_UNSAFE, see utf_old.h. -utf_old.h UTF16_SET_CHAR_LIMIT_SAFE ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. -utf_old.h UTF16_SET_CHAR_LIMIT_UNSAFE ICU 2.4. Renamed to U16_SET_CP_LIMIT_UNSAFE, see utf_old.h. -utf_old.h UTF16_SET_CHAR_START_SAFE ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. -utf_old.h UTF16_SET_CHAR_START_UNSAFE ICU 2.4. Renamed to U16_SET_CP_START_UNSAFE, see utf_old.h. -utf_old.h UTF16_TRAIL ICU 2.4. Renamed to U16_TRAIL, see utf_old.h. -utf_old.h UTF32_APPEND_CHAR_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_APPEND_CHAR_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_ARRAY_SIZE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_BACK_1_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_BACK_1_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_BACK_N_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_BACK_N_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_CHAR_LENGTH ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_FWD_1_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_FWD_1_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_FWD_N_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_FWD_N_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_GET_CHAR_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_GET_CHAR_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_IS_LEAD ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_IS_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_IS_SINGLE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_IS_TRAIL ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_MAX_CHAR_LENGTH ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_NEED_MULTIPLE_UCHAR ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_NEXT_CHAR_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_NEXT_CHAR_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_PREV_CHAR_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_PREV_CHAR_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_SET_CHAR_LIMIT_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_SET_CHAR_LIMIT_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_SET_CHAR_START_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF32_SET_CHAR_START_UNSAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF8_APPEND_CHAR_SAFE ICU 2.4. Use U8_APPEND instead, see utf_old.h. -utf_old.h UTF8_APPEND_CHAR_UNSAFE ICU 2.4. Renamed to U8_APPEND_UNSAFE, see utf_old.h. -utf_old.h UTF8_ARRAY_SIZE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF8_BACK_1_SAFE ICU 2.4. Renamed to U8_BACK_1, see utf_old.h. -utf_old.h UTF8_BACK_1_UNSAFE ICU 2.4. Renamed to U8_BACK_1_UNSAFE, see utf_old.h. -utf_old.h UTF8_BACK_N_SAFE ICU 2.4. Renamed to U8_BACK_N, see utf_old.h. -utf_old.h UTF8_BACK_N_UNSAFE ICU 2.4. Renamed to U8_BACK_N_UNSAFE, see utf_old.h. -utf_old.h UTF8_CHAR_LENGTH ICU 2.4. Use U8_LENGTH instead, see utf_old.h. -utf_old.h UTF8_COUNT_TRAIL_BYTES ICU 2.4. Renamed to U8_COUNT_TRAIL_BYTES, see utf_old.h. -utf_old.h UTF8_ERROR_VALUE_1 ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF8_ERROR_VALUE_2 ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF8_FWD_1_SAFE ICU 2.4. Renamed to U8_FWD_1, see utf_old.h. -utf_old.h UTF8_FWD_1_UNSAFE ICU 2.4. Renamed to U8_FWD_1_UNSAFE, see utf_old.h. -utf_old.h UTF8_FWD_N_SAFE ICU 2.4. Renamed to U8_FWD_N, see utf_old.h. -utf_old.h UTF8_FWD_N_UNSAFE ICU 2.4. Renamed to U8_FWD_N_UNSAFE, see utf_old.h. -utf_old.h UTF8_GET_CHAR_SAFE ICU 2.4. Use U8_GET instead, see utf_old.h. -utf_old.h UTF8_GET_CHAR_UNSAFE ICU 2.4. Renamed to U8_GET_UNSAFE, see utf_old.h. -utf_old.h UTF8_IS_LEAD ICU 2.4. Renamed to U8_IS_LEAD, see utf_old.h. -utf_old.h UTF8_IS_SINGLE ICU 2.4. Renamed to U8_IS_SINGLE, see utf_old.h. -utf_old.h UTF8_IS_TRAIL ICU 2.4. Renamed to U8_IS_TRAIL, see utf_old.h. -utf_old.h UTF8_MASK_LEAD_BYTE ICU 2.4. Renamed to U8_MASK_LEAD_BYTE, see utf_old.h. -utf_old.h UTF8_MAX_CHAR_LENGTH ICU 2.4. Renamed to U8_MAX_LENGTH, see utf_old.h. -utf_old.h UTF8_NEED_MULTIPLE_UCHAR ICU 2.4. Use U8_LENGTH or test ((uint32_t)(c)>0x7f) instead, see utf_old.h. -utf_old.h UTF8_NEXT_CHAR_SAFE ICU 2.4. Use U8_NEXT instead, see utf_old.h. -utf_old.h UTF8_NEXT_CHAR_UNSAFE ICU 2.4. Renamed to U8_NEXT_UNSAFE, see utf_old.h. -utf_old.h UTF8_PREV_CHAR_SAFE ICU 2.4. Use U8_PREV instead, see utf_old.h. -utf_old.h UTF8_PREV_CHAR_UNSAFE ICU 2.4. Renamed to U8_PREV_UNSAFE, see utf_old.h. -utf_old.h UTF8_SET_CHAR_LIMIT_SAFE ICU 2.4. Renamed to U8_SET_CP_LIMIT, see utf_old.h. -utf_old.h UTF8_SET_CHAR_LIMIT_UNSAFE ICU 2.4. Renamed to U8_SET_CP_LIMIT_UNSAFE, see utf_old.h. -utf_old.h UTF8_SET_CHAR_START_SAFE ICU 2.4. Renamed to U8_SET_CP_START, see utf_old.h. -utf_old.h UTF8_SET_CHAR_START_UNSAFE ICU 2.4. Renamed to U8_SET_CP_START_UNSAFE, see utf_old.h. -utf_old.h UTF_APPEND_CHAR ICU 2.4. Use U16_APPEND instead, see utf_old.h. -utf_old.h UTF_APPEND_CHAR_SAFE ICU 2.4. Use U16_APPEND instead, see utf_old.h. -utf_old.h UTF_APPEND_CHAR_UNSAFE ICU 2.4. Renamed to U16_APPEND_UNSAFE, see utf_old.h. -utf_old.h UTF_ARRAY_SIZE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF_BACK_1 ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. -utf_old.h UTF_BACK_1_SAFE ICU 2.4. Renamed to U16_BACK_1, see utf_old.h. -utf_old.h UTF_BACK_1_UNSAFE ICU 2.4. Renamed to U16_BACK_1_UNSAFE, see utf_old.h. -utf_old.h UTF_BACK_N ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. -utf_old.h UTF_BACK_N_SAFE ICU 2.4. Renamed to U16_BACK_N, see utf_old.h. -utf_old.h UTF_BACK_N_UNSAFE ICU 2.4. Renamed to U16_BACK_N_UNSAFE, see utf_old.h. -utf_old.h UTF_CHAR_LENGTH ICU 2.4. Renamed to U16_LENGTH, see utf_old.h. -utf_old.h UTF_ERROR_VALUE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF_FIRST_SURROGATE ICU 2.4. Renamed to U16_LEAD, see utf_old.h. -utf_old.h UTF_FWD_1 ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. -utf_old.h UTF_FWD_1_SAFE ICU 2.4. Renamed to U16_FWD_1, see utf_old.h. -utf_old.h UTF_FWD_1_UNSAFE ICU 2.4. Renamed to U16_FWD_1_UNSAFE, see utf_old.h. -utf_old.h UTF_FWD_N ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. -utf_old.h UTF_FWD_N_SAFE ICU 2.4. Renamed to U16_FWD_N, see utf_old.h. -utf_old.h UTF_FWD_N_UNSAFE ICU 2.4. Renamed to U16_FWD_N_UNSAFE, see utf_old.h. -utf_old.h UTF_GET_CHAR ICU 2.4. Renamed to U16_GET, see utf_old.h. -utf_old.h UTF_GET_CHAR_SAFE ICU 2.4. Use U16_GET instead, see utf_old.h. -utf_old.h UTF_GET_CHAR_UNSAFE ICU 2.4. Renamed to U16_GET_UNSAFE, see utf_old.h. -utf_old.h UTF_IS_ERROR ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF_IS_FIRST_SURROGATE ICU 2.4. Renamed to U_IS_LEAD and U16_IS_LEAD, see utf_old.h. -utf_old.h UTF_IS_LEAD ICU 2.4. Renamed to U_IS_LEAD and U16_IS_LEAD, see utf_old.h. -utf_old.h UTF_IS_SECOND_SURROGATE ICU 2.4. Renamed to U_IS_TRAIL and U16_IS_TRAIL, see utf_old.h. -utf_old.h UTF_IS_SINGLE ICU 2.4. Renamed to U_IS_SINGLE and U16_IS_SINGLE, see utf_old.h. -utf_old.h UTF_IS_SURROGATE ICU 2.4. Renamed to U_IS_SURROGATE and U16_IS_SURROGATE, see utf_old.h. -utf_old.h UTF_IS_SURROGATE_FIRST ICU 2.4. Renamed to U_IS_SURROGATE_LEAD and U16_IS_SURROGATE_LEAD, see utf_old.h. -utf_old.h UTF_IS_TRAIL ICU 2.4. Renamed to U_IS_TRAIL and U16_IS_TRAIL, see utf_old.h. -utf_old.h UTF_IS_UNICODE_CHAR ICU 2.4. Renamed to U_IS_UNICODE_CHAR, see utf_old.h. -utf_old.h UTF_IS_UNICODE_NONCHAR ICU 2.4. Renamed to U_IS_UNICODE_NONCHAR, see utf_old.h. -utf_old.h UTF_IS_VALID ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF_MAX_CHAR_LENGTH ICU 2.4. Renamed to U16_MAX_LENGTH, see utf_old.h. -utf_old.h UTF_NEED_MULTIPLE_UCHAR ICU 2.4. Use U16_LENGTH or test ((uint32_t)(c)>0xffff) instead. -utf_old.h UTF_NEXT_CHAR ICU 2.4. Renamed to U16_NEXT, see utf_old.h. -utf_old.h UTF_NEXT_CHAR_SAFE ICU 2.4. Use U16_NEXT instead, see utf_old.h. -utf_old.h UTF_NEXT_CHAR_UNSAFE ICU 2.4. Renamed to U16_NEXT_UNSAFE, see utf_old.h. -utf_old.h UTF_PREV_CHAR ICU 2.4. Renamed to U16_PREV, see utf_old.h. -utf_old.h UTF_PREV_CHAR_SAFE ICU 2.4. Use U16_PREV instead, see utf_old.h. -utf_old.h UTF_PREV_CHAR_UNSAFE ICU 2.4. Renamed to U16_PREV_UNSAFE, see utf_old.h. -utf_old.h UTF_SAFE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF_SECOND_SURROGATE ICU 2.4. Renamed to U16_TRAIL, see utf_old.h. -utf_old.h UTF_SET_CHAR_LIMIT ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. -utf_old.h UTF_SET_CHAR_LIMIT_SAFE ICU 2.4. Renamed to U16_SET_CP_LIMIT, see utf_old.h. -utf_old.h UTF_SET_CHAR_LIMIT_UNSAFE ICU 2.4. Renamed to U16_SET_CP_LIMIT_UNSAFE, see utf_old.h. -utf_old.h UTF_SET_CHAR_START ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. -utf_old.h UTF_SET_CHAR_START_SAFE ICU 2.4. Renamed to U16_SET_CP_START, see utf_old.h. -utf_old.h UTF_SET_CHAR_START_UNSAFE ICU 2.4. Renamed to U16_SET_CP_START_UNSAFE, see utf_old.h. -utf_old.h UTF_SIZE ICU 2.4. Obsolete, see utf_old.h. -utf_old.h UTF_SURROGATE_OFFSET ICU 2.4. Renamed to U16_SURROGATE_OFFSET, see utf_old.h. -utrans.h utrans_getAvailableID ICU 2.8 Use utrans_openIDs() instead, see utrans.h -utrans.h utrans_getID ICU 2.8 Use utrans_getUnicodeID() instead, see utrans.h -utrans.h utrans_open ICU 2.8 Use utrans_openU() instead, see utrans.h -utrans.h utrans_unregister ICU 2.8 Use utrans_unregisterID() instead, see utrans.h -Calendar EAmpm ICU 2.6. Use C enum UCalendarAMPMs defined in ucal.h -Calendar EDateFields ICU 2.6. Use C enum UCalendarDateFields defined in ucal.h -Calendar EDaysOfWeek ICU 2.6. Use C enum UCalendarDaysOfWeek defined in ucal.h -Calendar EMonths ICU 2.6. Use C enum UCalendarMonths defined in ucal.h -Calendar add ICU 2.6. use add(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. -Calendar clear ICU 2.6. Use clear(UCalendarDateFields field) instead. -Calendar fieldDifference ICU 2.6. Use fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status). -Calendar get ICU 2.6. Use get(UCalendarDateFields field, UErrorCode& status) instead. -Calendar getActualMaximum ICU 2.6. Use getActualMaximum(UCalendarDateFields field, UErrorCode& status) instead. -Calendar getActualMinimum ICU 2.6. Use getActualMinimum(UCalendarDateFields field, UErrorCode& status) instead. -Calendar getFirstDayOfWeek ICU 2.6 use the overload with error code -Calendar getGreatestMinimum ICU 2.6. Use getGreatestMinimum(UCalendarDateFields field) instead. -Calendar getLeastMaximum ICU 2.6. Use getLeastMaximum(UCalendarDateFields field) instead. -Calendar getMaximum ICU 2.6. Use getMaximum(UCalendarDateFields field) instead. -Calendar getMinimum ICU 2.6. Use getMinimum(UCalendarDateFields field) instead. -Calendar internalGet ICU 2.6. Use internalGet(UCalendarDateFields field) instead. -Calendar internalSet ICU 2.6. Use internalSet(UCalendarDateFields field, int32_t value) instead. -Calendar isSet ICU 2.6. Use isSet(UCalendarDateFields field) instead. -Calendar roll ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. -Calendar roll ICU 2.6. Use roll(UCalendarDateFields field, UBool up, UErrorCode& status) instead. -Calendar set ICU 2.6. Use set(UCalendarDateFields field, int32_t value) instead. -Calendar setFirstDayOfWeek ICU 2.6. Use setFirstDayOfWeek(UCalendarDaysOfWeek value) instead. -Calendar fIsSet ICU 2.8 use (fStamp[n]!=kUnset) -CollationKey (null) ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey CollationKey ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey CollationKey ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey CollationKey ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey ~CollationKey ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey compareTo ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey compareTo ICU 2.6 use the overload with error code -CollationKey getByteArray ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey getDynamicClassID ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey getStaticClassID ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey hashCode ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey isBogus ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey operator!= ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey operator= ICU 2.8 Use Collator::getSortKey(...) instead -CollationKey operator== ICU 2.8 Use Collator::getSortKey(...) instead -Collator EComparisonResult ICU 2.6. Use C enum UCollationResult defined in ucol.h -Collator Collator ICU 2.4. Subclasses should use the default constructor -Collator compare ICU 2.6 use the overload with UErrorCode & -Collator compare ICU 2.6 use the overload with UErrorCode & -Collator compare ICU 2.6 use the overload with UErrorCode & -Collator getCollationKey ICU 2.8 Use getSortKey(...) instead -Collator getCollationKey ICU 2.8 Use getSortKey(...) instead -Collator getLocale ICU 2.8 This API is under consideration for revision -Collator getStrength ICU 2.6 Use getAttribute(UCOL_STRENGTH...) instead -Collator setStrength ICU 2.6 Use setAttribute(UCOL_STRENGTH...) instead -GregorianCalendar getActualMaximum ICU 2.6. Use getActualMaximum(UCalendarDateFields field) instead. -GregorianCalendar getActualMinimum ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. (Added to ICU 3.0 for signature consistency) -GregorianCalendar getActualMinimum ICU 2.6. Use getActualMinimum(UCalendarDateFields field) instead. -GregorianCalendar roll ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead. -ResourceBundle getLocale ICU 2.8 Use getLocale(ULocDataLocaleType type, UErrorCode &status) overload instead. -ResourceBundle getVersionNumber ICU 2.8 Use getVersion instead. -RuleBasedCollator compare ICU 2.6 Use overload with UErrorCode& -RuleBasedCollator compare ICU 2.6 Use overload with UErrorCode& -RuleBasedCollator compare ICU 2.6 Use overload with UErrorCode& -RuleBasedCollator getCollationKey ICU 2.8 Use getSortKey(...) instead -RuleBasedCollator getCollationKey ICU 2.8 Use getSortKey(...) instead -RuleBasedCollator getEComparisonResult ICU 2.6. We will not need it. -RuleBasedCollator getLocale ICU 2.8 likely to change in ICU 3.0, based on feedback -RuleBasedCollator getStrength ICU 2.6 Use getAttribute(UCOL_STRENGTH...) instead -RuleBasedCollator setStrength ICU 2.6 Use setAttribute(UCOL_STRENGTH...) instead -SimpleTimeZone inDaylightTime ICU 2.4. Use Calendar::inDaylightTime() instead. -TimeZone inDaylightTime ICU 2.4. Use Calendar::inDaylightTime() instead. diff --git a/icuSources/tools/gendraft/DraftApi.txt b/icuSources/tools/gendraft/DraftApi.txt deleted file mode 100644 index 89959580..00000000 --- a/icuSources/tools/gendraft/DraftApi.txt +++ /dev/null @@ -1,372 +0,0 @@ -coll.h URegistryKey ICU 2.6 -ubrk.h ULineBreakTag ICU 2.8 -ubrk.h USentenceBreakTag ICU 2.8 -ubrk.h ULineBreakTag ICU 2.8 -ubrk.h USentenceBreakTag ICU 2.8 -ubrk.h ubrk_getLocaleByType ICU 2.8 likely to change in ICU 3.0, based on feedback -ubrk.h ubrk_getRuleStatusVec ICU 3.0 -ucal.h UCAL_EXTENDED_YEAR ICU 2.8 -ucal.h UCAL_JULIAN_DAY ICU 2.8 -ucal.h UCAL_MILLISECONDS_IN_DAY ICU 2.8 -ucal.h UCAL_DAY_OF_MONTH ICU 2.8 -ucal.h ucal_getDSTSavings ICU 2.6 -ucal.h ucal_getDefaultTimeZone ICU 2.6 -ucal.h ucal_getLocaleByType ICU 2.8 likely to change in ICU 3.0, based on feedback -ucal.h ucal_openCountryTimeZones ICU 2.6 -ucal.h ucal_openTimeZones ICU 2.6 -ucal.h ucal_setDefaultTimeZone ICU 2.6 -ucat.h u_catclose ICU 2.6 -ucat.h u_catgets ICU 2.6 -ucat.h u_catopen ICU 2.6 -ucat.h u_nl_catd ICU 2.6 -uchar.h UHangulSyllableType ICU 2.6 -uchar.h UBLOCK_NO_BLOCK ICU 2.6 -uchar.h UBLOCK_LIMBU ICU 2.6 -uchar.h UBLOCK_TAI_LE ICU 2.6 -uchar.h UBLOCK_KHMER_SYMBOLS ICU 2.6 -uchar.h UBLOCK_PHONETIC_EXTENSIONS ICU 2.6 -uchar.h UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS ICU 2.6 -uchar.h UBLOCK_YIJING_HEXAGRAM_SYMBOLS ICU 2.6 -uchar.h UBLOCK_LINEAR_B_SYLLABARY ICU 2.6 -uchar.h UBLOCK_LINEAR_B_IDEOGRAMS ICU 2.6 -uchar.h UBLOCK_AEGEAN_NUMBERS ICU 2.6 -uchar.h UBLOCK_UGARITIC ICU 2.6 -uchar.h UBLOCK_SHAVIAN ICU 2.6 -uchar.h UBLOCK_OSMANYA ICU 2.6 -uchar.h UBLOCK_CYPRIOT_SYLLABARY ICU 2.6 -uchar.h UBLOCK_TAI_XUAN_JING_SYMBOLS ICU 2.6 -uchar.h UBLOCK_VARIATION_SELECTORS_SUPPLEMENT ICU 2.6 -uchar.h UHangulSyllableType ICU 2.6 -uchar.h U_JG_FE ICU 2.6 -uchar.h U_JG_KHAPH ICU 2.6 -uchar.h U_JG_ZHAIN ICU 2.6 -uchar.h UCHAR_CASE_SENSITIVE ICU 2.6 -uchar.h UCHAR_HANGUL_SYLLABLE_TYPE ICU 2.6 -uchar.h u_isISOControl ICU 2.6 -uchar.h u_isJavaSpaceChar ICU 2.6 -uchar.h u_isblank ICU 2.6 -uchar.h u_isgraph ICU 2.6 -uchar.h u_ispunct ICU 2.6 -uchar.h u_isxdigit ICU 2.6 -uclean.h UMTX ICU 2.8 -uclean.h UMemAllocFn ICU 2.8 -uclean.h UMemFreeFn ICU 2.8 -uclean.h UMemReallocFn ICU 2.8 -uclean.h UMtxAtomicFn ICU 2.8 -uclean.h UMtxFn ICU 2.8 -uclean.h UMtxInitFn ICU 2.8 -uclean.h u_init ICU 2.6 -uclean.h u_setAtomicIncDecFunctions ICU 2.8 -uclean.h u_setMemoryFunctions ICU 2.8 -uclean.h u_setMutexFunctions ICU 2.8 -ucnv.h UCNV_GET_MAX_BYTES_FOR_STRING ICU 2.8 -ucnv.h UConverterUnicodeSet ICU 2.6 -ucnv.h UConverterUnicodeSet ICU 2.6 -ucnv.h UCNV_ROUNDTRIP_SET ICU 2.6 -ucnv.h UCNV_SET_COUNT ICU 2.6 -ucnv.h ucnv_convertEx ICU 2.6 -ucnv.h ucnv_fromAlgorithmic ICU 2.6 -ucnv.h ucnv_getUnicodeSet ICU 2.6 -ucnv.h ucnv_toAlgorithmic ICU 2.6 -ucol.h ucol_getLocaleByType ICU 2.8 likely to change in ICU 3.0, based on feedback -ucol.h ucol_getUCAVersion ICU 2.8 -ucol.h ucol_nextSortKeyPart ICU 2.6 -ucol.h ucol_strcollIter ICU 2.6 -ucoleitr.h ucol_primaryOrder ICU 2.6 -ucoleitr.h ucol_secondaryOrder ICU 2.6 -ucoleitr.h ucol_tertiaryOrder ICU 2.6 -uconfig.h UCONFIG_NO_IDNA ICU 2.6 -uconfig.h UCONFIG_NO_NORMALIZATION ICU 2.6 -uconfig.h UCONFIG_NO_SERVICE ICU 2.8 -ucurr.h UCurrNameStyle ICU 2.6 -ucurr.h UCurrNameStyle ICU 2.6 -ucurr.h UCURR_SYMBOL_NAME ICU 2.6 -ucurr.h UCURR_LONG_NAME ICU 2.6 -ucurr.h ucurr_forLocale ICU 2.8 -ucurr.h ucurr_getDefaultFractionDigits ICU 3.0 -ucurr.h ucurr_getName ICU 2.6 -ucurr.h ucurr_getRoundingIncrement ICU 3.0 -ucurr.h ucurr_register ICU 2.6 -udat.h UDateFormatField ICU 3.0 -udat.h UDateFormatField ICU 3.0 -udat.h UDAT_ERA_FIELD ICU 3.0 -udat.h UDAT_YEAR_FIELD ICU 3.0 -udat.h UDAT_MONTH_FIELD ICU 3.0 -udat.h UDAT_DATE_FIELD ICU 3.0 -udat.h UDAT_HOUR_OF_DAY1_FIELD ICU 3.0 -udat.h UDAT_HOUR_OF_DAY0_FIELD ICU 3.0 -udat.h UDAT_MINUTE_FIELD ICU 3.0 -udat.h UDAT_SECOND_FIELD ICU 3.0 -udat.h UDAT_FRACTIONAL_SECOND_FIELD ICU 3.0 -udat.h UDAT_DAY_OF_WEEK_FIELD ICU 3.0 -udat.h UDAT_DAY_OF_YEAR_FIELD ICU 3.0 -udat.h UDAT_DAY_OF_WEEK_IN_MONTH_FIELD ICU 3.0 -udat.h UDAT_WEEK_OF_YEAR_FIELD ICU 3.0 -udat.h UDAT_WEEK_OF_MONTH_FIELD ICU 3.0 -udat.h UDAT_AM_PM_FIELD ICU 3.0 -udat.h UDAT_HOUR1_FIELD ICU 3.0 -udat.h UDAT_HOUR0_FIELD ICU 3.0 -udat.h UDAT_TIMEZONE_FIELD ICU 3.0 -udat.h UDAT_YEAR_WOY_FIELD ICU 3.0 -udat.h UDAT_DOW_LOCAL_FIELD ICU 3.0 -udat.h UDAT_EXTENDED_YEAR_FIELD ICU 3.0 -udat.h UDAT_JULIAN_DAY_FIELD ICU 3.0 -udat.h UDAT_MILLISECONDS_IN_DAY_FIELD ICU 3.0 -udat.h UDAT_TIMEZONE_RFC_FIELD ICU 3.0 -udat.h UDAT_FIELD_COUNT ICU 3.0 -udat.h udat_getLocaleByType ICU 2.8 likely to change in ICU 3.0, based on feedback -uidna.h UIDNA_ALLOW_UNASSIGNED ICU 2.6 -uidna.h UIDNA_DEFAULT ICU 2.6 -uidna.h UIDNA_USE_STD3_RULES ICU 2.6 -uidna.h uidna_IDNToASCII ICU 2.6 -uidna.h uidna_IDNToUnicode ICU 2.6 -uidna.h uidna_compare ICU 2.6 -uidna.h uidna_toASCII ICU 2.6 -uidna.h uidna_toUnicode ICU 2.6 -uiter.h UITER_NO_STATE ICU 2.6 -uiter.h UCharIteratorGetState ICU 2.6 -uiter.h UCharIteratorSetState ICU 2.6 -uiter.h @1 ICU 2.6 -uiter.h UITER_UNKNOWN_INDEX ICU 2.6 -uiter.h uiter_getState ICU 2.6 -uiter.h uiter_setState ICU 2.6 -uiter.h uiter_setUTF16BE ICU 2.6 -uiter.h uiter_setUTF8 ICU 2.6 -uloc.h ULOC_KEYWORDS_CAPACITY ICU 2.8 -uloc.h ULOC_KEYWORD_AND_VALUES_CAPACITY ICU 2.8 -uloc.h ULOC_KEYWORD_ASSIGN ICU 2.8 -uloc.h ULOC_KEYWORD_ITEM_SEPARATOR ICU 2.8 -uloc.h ULOC_KEYWORD_SEPARATOR ICU 2.8 -uloc.h ULOC_SCRIPT_CAPACITY ICU 2.8 -uloc.h uloc_getBaseName ICU 2.8 -uloc.h uloc_getDisplayKeyword ICU 2.8 -uloc.h uloc_getDisplayKeywordValue ICU 2.8 -uloc.h uloc_getDisplayScript ICU 2.8 -uloc.h uloc_getKeywordValue ICU 2.8 -uloc.h uloc_getScript ICU 2.8 -uloc.h uloc_openKeywords ICU 2.8 -ulocdata.h UMeasurementSystem ICU 2.8 -ulocdata.h UMeasurementSystem ICU 2.8 -ulocdata.h ulocdata_getExemplarSet ICU 2.8 -ulocdata.h ulocdata_getMeasurementSystem ICU 2.8 -ulocdata.h ulocdata_getPaperSize ICU 2.8 -umachine.h INT64_C ICU 2.8 -umachine.h UINT64_C ICU 2.8 -umsg.h umsg_getLocaleByType ICU 2.8 likely to change in ICU 3.0, based on feedback -unistr.h operator+ ICU 2.8 -unorm.h UNORM_COMPARE_NORM_OPTIONS_SHIFT ICU 2.6 -unorm.h @2 ICU 2.6 -unorm.h UNORM_UNICODE_3_2 ICU 2.6 -unorm.h unorm_isNormalizedWithOptions ICU 2.6 -unorm.h unorm_quickCheckWithOptions ICU 2.6 -unum.h UNUM_MIN_SIGNIFICANT_DIGITS ICU 3.0 -unum.h UNUM_MAX_SIGNIFICANT_DIGITS ICU 3.0 -unum.h UNUM_LENIENT_PARSE ICU 3.0 -unum.h UNUM_PATTERN_DECIMAL ICU 3.0 -unum.h UNUM_ORDINAL ICU 3.0 -unum.h UNUM_DURATION ICU 3.0 -unum.h UNUM_PATTERN_RULEBASED ICU 3.0 -unum.h UNUM_SIGNIFICANT_DIGIT_SYMBOL ICU 3.0 -unum.h UNUM_DEFAULT_RULESET ICU 3.0 -unum.h UNUM_PUBLIC_RULESETS ICU 3.0 -unum.h unum_getLocaleByType ICU 2.8 likely to change in ICU 3.0, based on feedback -unum.h unum_parseInt64 ICU 2.8 -uobject.h U_HAVE_PLACEMENT_NEW ICU 2.6 -uregex.h URegularExpression ICU 3.0 -uregex.h UREGEX_CANON_EQ ICU 2.4 -uregex.h UREGEX_UWORD ICU 2.8 -uregex.h uregex_appendReplacement ICU 3.0 -uregex.h uregex_appendTail ICU 3.0 -uregex.h uregex_clone ICU 3.0 -uregex.h uregex_close ICU 3.0 -uregex.h uregex_end ICU 3.0 -uregex.h uregex_find ICU 3.0 -uregex.h uregex_findNext ICU 3.0 -uregex.h uregex_flags ICU 3.0 -uregex.h uregex_getText ICU 3.0 -uregex.h uregex_group ICU 3.0 -uregex.h uregex_groupCount ICU 3.0 -uregex.h uregex_lookingAt ICU 3.0 -uregex.h uregex_matches ICU 3.0 -uregex.h uregex_open ICU 3.0 -uregex.h uregex_openC ICU 3.0 -uregex.h uregex_pattern ICU 3.0 -uregex.h uregex_replaceAll ICU 3.0 -uregex.h uregex_replaceFirst ICU 3.0 -uregex.h uregex_reset ICU 3.0 -uregex.h uregex_setText ICU 3.0 -uregex.h uregex_split ICU 3.0 -uregex.h uregex_start ICU 3.0 -ures.h URES_NONE ICU 2.6 -ures.h URES_STRING ICU 2.6 -ures.h URES_BINARY ICU 2.6 -ures.h URES_TABLE ICU 2.6 -ures.h URES_ALIAS ICU 2.6 -ures.h URES_INT ICU 2.6 -ures.h URES_ARRAY ICU 2.6 -ures.h URES_INT_VECTOR ICU 2.6 -ures.h ures_getLocaleByType ICU 2.8 -uscript.h USCRIPT_CANADIAN_ABORIGINAL ICU 2.6 -uset.h uset_addAll ICU 2.6 -uset.h uset_applyPattern ICU 2.8 -usprep.h USPREP_ALLOW_UNASSIGNED ICU 2.8 -usprep.h USPREP_DEFAULT ICU 2.8 -usprep.h UStringPrepProfile ICU 2.8 -usprep.h usprep_close ICU 2.8 -usprep.h usprep_open ICU 2.8 -usprep.h usprep_prepare ICU 2.8 -ustring.h u_strCompareIter ICU 2.6 -utf.h U_IS_BMP ICU 2.8 -utf.h U_IS_SUPPLEMENTARY ICU 2.8 -utrace.h UTraceData ICU 2.8 -utrace.h UTraceEntry ICU 2.8 -utrace.h UTraceExit ICU 2.8 -utrace.h UTraceFunctionNumber ICU 2.8 -utrace.h UTraceLevel ICU 2.8 -utrace.h UTraceFunctionNumber ICU 2.8 -utrace.h UTraceLevel ICU 2.8 -utrace.h UTRACE_OFF ICU 2.8 -utrace.h UTRACE_ERROR ICU 2.8 -utrace.h UTRACE_WARNING ICU 2.8 -utrace.h UTRACE_OPEN_CLOSE ICU 2.8 -utrace.h UTRACE_INFO ICU 2.8 -utrace.h UTRACE_VERBOSE ICU 2.8 -utrace.h utrace_format ICU 2.8 -utrace.h utrace_functionName ICU 2.8 -utrace.h utrace_getFunctions ICU 2.8 -utrace.h utrace_getLevel ICU 2.8 -utrace.h utrace_setFunctions ICU 2.8 -utrace.h utrace_setLevel ICU 2.8 -utrace.h utrace_vformat ICU 2.8 -utrans.h utrans_getUnicodeID ICU 2.8 -utrans.h utrans_openIDs ICU 2.8 -utrans.h utrans_openU ICU 2.8 -utrans.h utrans_unregisterID ICU 2.8 -utypes.h U_LAYOUTEX_API ICU 2.6 -uversion.h U_ICU_VERSION_MINOR_NUM ICU 2.6 -uversion.h U_ICU_VERSION_SHORT ICU 2.6 -uversion.h U_ICU_VERSION_SUFFIX ICU 2.6 -BreakIterator getLocale ICU 2.8 likely to change in ICU 3.0, based on feedback -Calendar add ICU 2.6. -Calendar clear ICU 2.6. -Calendar fieldDifference ICU 2.6. -Calendar get ICU 2.6. -Calendar getActualMaximum ICU 2.6. -Calendar getActualMinimum ICU 2.6. -Calendar getFirstDayOfWeek ICU 2.6 -Calendar getGreatestMinimum ICU 2.6. -Calendar getLeastMaximum ICU 2.6. -Calendar getLocale ICU 2.8 likely to change in ICU 3.0, based on feedback -Calendar getMaximum ICU 2.6. -Calendar getMinimum ICU 2.6. -Calendar internalSet ICU 2.6. -Calendar isSet ICU 2.6. -Calendar roll ICU 2.6. -Calendar roll ICU 2.6. -Calendar set ICU 2.6. -Calendar setFirstDayOfWeek ICU 2.6. -ChoiceFormat format ICU 2.8 -Collator compare ICU 2.6 -Collator compare ICU 2.6 -Collator compare ICU 2.6 -Collator getAvailableLocales ICU 2.6 -Collator registerFactory ICU 2.6 -Collator registerInstance ICU 2.6 -Collator unregister ICU 2.6 -CollatorFactory (null) ICU 2.6 -CollatorFactory createCollator ICU 2.6 -CollatorFactory getDisplayName ICU 2.6 -CollatorFactory getSupportedIDs ICU 2.6 -CollatorFactory visible ICU 2.6 -DateFormatSymbols getLocale ICU 2.8 likely to change in ICU 3.0, based on feedback -DecimalFormat format ICU 2.8 -DecimalFormat format ICU 2.8 -DecimalFormat getMaximumSignificantDigits ICU 3.0 -DecimalFormat getMinimumSignificantDigits ICU 3.0 -DecimalFormat setCurrency ICU 3.0 -DecimalFormat setMaximumSignificantDigits ICU 3.0 -DecimalFormat setMinimumSignificantDigits ICU 3.0 -DecimalFormatSymbols kSignificantDigitSymbol ICU 3.0 -DecimalFormatSymbols getLocale ICU 2.8 likely to change in ICU 3.0, based on feedback -FieldPosition clone ICU 2.8 -Format getLocale ICU 2.8 likely to change in ICU 3.0, based on feedback -Formattable kInt64 ICU 2.8 -Formattable Formattable ICU 2.8 -Formattable clone ICU 2.8 -Formattable getArray ICU 2.8 -Formattable getDate ICU 2.8 -Formattable getDouble ICU 2.8 -Formattable getInt64 ICU 2.8 -Formattable getInt64 ICU 2.8 -Formattable getString ICU 2.8 -Formattable getString ICU 2.8 -Formattable getString ICU 2.8 -Formattable setInt64 ICU 2.8 -GregorianCalendar getActualMaximum ICU 2.6 -GregorianCalendar getActualMinimum ICU 3.0 -GregorianCalendar roll ICU 2.6. -Locale clone ICU 2.8 -Locale createKeywords ICU 2.8 -Locale getBaseName ICU 2.8 -Locale getDisplayScript ICU 2.8 -Locale getDisplayScript ICU 2.8 -Locale getKeywordValue ICU 2.8 -Locale getScript ICU 2.8 -Normalizer isNormalized ICU 2.6 -Normalizer quickCheck ICU 2.6 -NumberFormat format ICU 2.8 -NumberFormat format ICU 2.8 -NumberFormat getAvailableLocales ICU 2.6 -NumberFormat getCurrency ICU 2.6 -NumberFormat registerFactory ICU 2.6 -NumberFormat setCurrency ICU 3.0 -NumberFormat unregister ICU 2.6 -NumberFormatFactory createFormat ICU 2.6 -NumberFormatFactory getSupportedIDs ICU 2.6 -NumberFormatFactory visible ICU 2.6 -ParsePosition clone ICU 2.8 -RegexMatcher RegexMatcher ICU 2.6 -RegexMatcher RegexMatcher ICU 2.6 -RegexMatcher lookingAt ICU 2.8 -RegexMatcher matches ICU 2.8 -RegexMatcher reset ICU 2.8 -RegexMatcher split ICU 2.6 -RegexPattern compile ICU 2.6 -RegexPattern matcher ICU 2.6 -Replaceable clone ICU 2.6 -ResourceBundle clone ICU 2.8 -ResourceBundle getLocale ICU 2.8 -RuleBasedBreakIterator RuleBasedBreakIterator ICU 2.8 -RuleBasedBreakIterator getRuleStatusVec ICU 3.0 -RuleBasedCollator compare ICU 2.6 -RuleBasedCollator compare ICU 2.6 -RuleBasedCollator compare ICU 2.6 -RuleBasedNumberFormat getDefaultRuleSetName ICU 3.0 -RuleBasedNumberFormat setDefaultRuleSet ICU 2.6 -SimpleNumberFormatFactory SimpleNumberFormatFactory ICU 2.6 -SimpleNumberFormatFactory getSupportedIDs ICU 2.6 -SimpleNumberFormatFactory visible ICU 2.6 -SimpleNumberFormatFactory _id ICU 2.6 -SimpleNumberFormatFactory _visible ICU 2.6 -SimpleTimeZone getOffset ICU 2.8 -StringEnumeration StringEnumeration ICU 2.8 -StringEnumeration clone ICU 2.8 -StringEnumeration ensureCharsCapacity ICU 2.8 -StringEnumeration setChars ICU 2.8 -StringEnumeration chars ICU 2.8 -StringEnumeration charsBuffer ICU 2.8 -StringEnumeration charsCapacity ICU 2.8 -StringEnumeration unistr ICU 2.8 -StringSearch clone ICU 2.8 -SymbolTable (null) ICU 2.8 -TimeZone getOffset ICU 2.8 -Transliterator countElements ICU 3.0 -Transliterator getAvailableIDs ICU 3.0 -Transliterator getElement ICU 3.0 -UCharIterator getState ICU 2.6 -UCharIterator setState ICU 2.6 -UMemory operator delete ICU 2.6 -UMemory operator new ICU 2.6 -UnicodeSet UnicodeSet ICU 2.8 -UnicodeSet applyPattern ICU 2.8 -UnicodeString clone ICU 2.6 diff --git a/icuSources/tools/gendraft/ObsoleteApi.txt b/icuSources/tools/gendraft/ObsoleteApi.txt deleted file mode 100644 index 319a98ef..00000000 --- a/icuSources/tools/gendraft/ObsoleteApi.txt +++ /dev/null @@ -1,19 +0,0 @@ -DateFormat EField ICU 3.4 use UDateFormatField instead, since this API will be -ICULayoutEngine (null) ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine ~ICULayoutEngine ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine countGlyphs ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine createInstance ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getCharIndices ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getCharIndices ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getDynamicClassID ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getGlyphPosition ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getGlyphPositions ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getGlyphs ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine getStaticClassID ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine layoutChars ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -ICULayoutEngine layoutString ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release. -MessageFormat EFormatNumber ICU 3.0. The 10-argument limit was removed as of ICU 2.6, -MessageFormat kMaxFormat ICU 3.0. The 10-argument limit was removed as of ICU 2.6, -Transliterator countAvailableIDs ICU 3.4 use getAvailableIDs() instead -Transliterator getAvailableID ICU 3.4 use getAvailableIDs() instead - diff --git a/icuSources/tools/gendraft/exclude.txt b/icuSources/tools/gendraft/exclude.txt new file mode 100644 index 00000000..9f5c3198 --- /dev/null +++ b/icuSources/tools/gendraft/exclude.txt @@ -0,0 +1,7 @@ +#* +#******************************************************************************* +#* Copyright (C) 2006, International Business Machines +#* Corporation and others. All Rights Reserved. +#******************************************************************************* +#* +# file that contains function names that need to be excluded from generation \ No newline at end of file diff --git a/icuSources/tools/gendraft/gendraft.pl b/icuSources/tools/gendraft/gendraft.pl deleted file mode 100644 index 06ee2366..00000000 --- a/icuSources/tools/gendraft/gendraft.pl +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/perl -#* -#******************************************************************************* -#* Copyright (C) 2004, International Business Machines -#* Corporation and others. All Rights Reserved. -#******************************************************************************* -#* -#* file name: gendraft.pl -#* encoding: US-ASCII -#* tab size: 8 (not used) -#* indentation:4 -#* -#* Created by: Ram Viswanadha -#* -#* This tool filters the DraftAPI txt file generated by Doxygen and generates udarft.h -#* udeprctd.h and uobslete.h -#* - -use File::Find; -use File::Basename; -use IO::File; -use Cwd; -use File::Copy; -use Getopt::Long; -use File::Path; -use File::Copy; - -$draftHeaderName = "udraft.h"; -$draftAppend = "DRAFT_API_DO_NOT_USE"; -$draftDefine = "U_HIDE_DRAFT_API"; - -$deprecatedHeaderName = "udeprctd.h"; -$deprecatedAppend = "DEPRECATED_API_DO_NOT_USE"; -$deprecatedDefine = "U_HIDE_DEPRECATED_API"; - -$obsoleteHeaderName = "uobslete.h"; -$obsoleteAppend = "OBSOLETE_API_DO_NOT_USE"; -$obsoleteDefine = "U_HIDE_OBSOLETE_API"; - -$versionAppend=""; - -#run the program -main(); - -#--------------------------------------------------------------------- -# The main program - -sub main(){ - GetOptions( - "--draft-file=s" => \$draftFile, - "--deprecated-file=s" => \$deprecatedFile, - "--obsolete-file=s" => \$obsoleteFile, - "--destdir=s" => \$destDir, - "--version=s" => \$version, - ); - usage() unless defined $draftFile; - usage() unless defined $deprecatedFile; - usage() unless defined $obsoleteFile; - usage() unless defined $destDir; - usage() unless defined $version; - - $versionAppend = $version; - $versionAppend=~ s/\./_/; - - writeFile($draftFile, $draftHeaderName, $destDir, $draftAppend, $draftDefine); - writeFile($deprecatedFile, $deprecatedHeaderName, $destDir, $deprecatedAppend, $deprecatedDefine); - writeFile($obsoleteFile, $obsoleteHeaderName, $destDir, $obsoleteAppend, $obsoleteDefine); -} - -#----------------------------------------------------------------------- -sub getHeaderDef{ - ($headerName) = @_; - $headerDef = uc($headerName); # this is building the constant for #define - $headerDef =~ s/\./_/; - return $headerDef; -} - -#----------------------------------------------------------------------- -sub writeFile{ - ($inFileName,$outFileName,$destDir, $symbolAppend, $symbolDef) = @_; - - $outFN = $destDir."/".$outFileName; - - $inFH = IO::File->new($inFileName,"r") - or die "could not open the file $infile for reading: $! \n"; - $outFH = IO::File->new($outFN,"w") - or die "could not open the file $outfile for writing: $! \n"; - - $headerDef = getHeaderDef($outFileName); - - printHeader($outFH, $outFileName, $headerDef, $symbolDef); - parseWriteFile($inFH, $outFH, $symbolAppend); - printFooter($outFH, $headerDef, $symbolDef); - close($inFH); - close($outFH); -} - -#----------------------------------------------------------------------- -sub printHeader{ - ($outFH, $headername, $HEADERDEF, $symbolDef) = @_; -#We will print our copyright here + warnings -print $outFH <<END_HEADER_COMMENT; -/* -******************************************************************************* -* Copyright (C) 2004, International Business Machines -* Corporation and others. All Rights Reserved. -******************************************************************************* -* -* file name: $headername -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* Created by: gendraft.pl, a perl script written by Ram Viswanadha -* -* Contains data for commenting out APIs. -* Gets included by umachine.h -* -* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT -* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! -*/ - -#ifndef $HEADERDEF -#define $HEADERDEF - -#ifdef $symbolDef - -END_HEADER_COMMENT -} - -#----------------------------------------------------------------------- -sub parseWriteFile{ - ($inFH, $outFH, $symbolAppend) = @_; - while (defined ($line = <$inFH>)){ - ($a,$b,$c) = split( /\t/, $line); - #just process C APIs for now - if($b =~ /^[uU]/){ - $realSymbol = $b."_".$versionAppend; - $nonExSymbol = $b."_".$symbolAppend; - print $outFH "#define ".$realSymbol." ".$nonExSymbol."\n"; - } - } -} - -#----------------------------------------------------------------------- -sub printFooter{ - - ($outFH, $headerDef, $symbolDef ) = @_; -#print the footer -print $outFH <<END_FOOTER; - -#endif /* $symbolDef */ -#endif /* $headerDef */ - -END_FOOTER -} -#----------------------------------------------------------------------- -sub usage { - print << "END"; -Usage: -gendraft.pl -Options: - --draft-file=<path and name of output file of Doxygen containing draft API symbols> - --deprecated-file=<path and name of output file of Doxygen containing deprecated API symbols> - --obsolete-file=<path and name of output file of Doxygen containing obsolete API symbols> - --destdir=<directory> - --version=<current version of ICU> - -e.g.: gendraft.pl --draft-file=c:\blah\DraftAPI.txt --deprecated-file=c:\blah\DeprecatedAPI.txt --obsolete-file=c:\blah\ObsoleteFile.txt --destdir=<icu>/source/common/unicode --version=2.8 -END - exit(0); -} diff --git a/icuSources/tools/gendraft/genheaders.pl b/icuSources/tools/gendraft/genheaders.pl new file mode 100644 index 00000000..6f83b2df --- /dev/null +++ b/icuSources/tools/gendraft/genheaders.pl @@ -0,0 +1,253 @@ +#!/usr/bin/perl +#* +#******************************************************************************* +#* Copyright (C) 2006, International Business Machines +#* Corporation and others. All Rights Reserved. +#******************************************************************************* +#* +#* file name: genheaders.pl +#* encoding: US-ASCII +#* tab size: 8 (not used) +#* indentation:4 +#* +#* Created by: Ram Viswanadha +#* +#* This tool filters the deprecated.html and friends file generated by Doxygen and generates udarft.h +#* udeprctd.h and uobslete.h +#* + +use File::Find; +use File::Basename; +use IO::File; +use Cwd; +use File::Copy; +use Getopt::Long; +use File::Path; +use File::Copy; + +$draftHeaderName = "udraft.h"; +$draftAppend = "DRAFT_API_DO_NOT_USE"; +$draftDefine = "U_HIDE_DRAFT_API"; + +$deprecatedHeaderName = "udeprctd.h"; +$deprecatedAppend = "DEPRECATED_API_DO_NOT_USE"; +$deprecatedDefine = "U_HIDE_DEPRECATED_API"; + +$obsoleteHeaderName = "uobslete.h"; +$obsoleteAppend = "OBSOLETE_API_DO_NOT_USE"; +$obsoleteDefine = "U_HIDE_OBSOLETE_API"; + +$systemHeaderName = "usystem.h"; +$systemAppend = "SYSTEM_API_DO_NOT_USE"; +$systemDefine = "U_HIDE_SYSTEM_API"; + +$internalHeaderName = "uintrnal.h"; +$internalAppend = "INTERNAL_API_DO_NOT_USE"; +$internalDefine = "U_HIDE_INTERNAL_API"; + +$versionAppend=""; +#run the program +main(); + +#--------------------------------------------------------------------- +# The main program + +sub main(){ + GetOptions( + "--srcdir=s" => \$srcDir, + "--destdir=s" => \$destDir, + "--version=s" => \$version, + "--exclusion-list=s" => \$exclude, + "--include-types" => \$includeTypes + ); + usage() unless defined $srcDir; + usage() unless defined $destDir; + usage() unless defined $version; + usage() unless defined $exclude; + $draftFile = "$srcDir/draft.html"; + $deprecatedFile = "$srcDir/deprecated.html"; + $obsoleteFile = "$srcDir/obsolete.html"; + $systemFile = "$srcDir/system.html"; + $internalFile = "$srcDir/internal.html"; + + $versionAppend = $version; + $versionAppend=~ s/\./_/; + $excludeFH = IO::File->new($exclude,"r") + or die "could not open the file $exclude for reading: $! \n"; + my %exclude; + while (defined ($line = <$excludeFH>)){ + next if( $line =~ /^#/); + $line =~ s/^\s+//; + $line =~ s/\s+\n$//; + $exclude{$line}="EXCLUDE"; + } + + writeFile($draftFile, $draftHeaderName, $destDir, $draftAppend, $draftDefine, \%exclude); + writeFile($deprecatedFile, $deprecatedHeaderName, $destDir, $deprecatedAppend, $deprecatedDefine, \%exclude); + writeFile($obsoleteFile, $obsoleteHeaderName, $destDir, $obsoleteAppend, $obsoleteDefine, \%exclude); + writeFile($systemFile, $systemHeaderName, $destDir, $systemAppend, $systemDefine, \%exclude); + writeFile($internalFile, $internalHeaderName, $destDir, $internalAppend, $internalDefine, \%exclude); +} + +#----------------------------------------------------------------------- +sub getHeaderDef{ + ($headerName) = @_; + $headerDef = uc($headerName); # this is building the constant for #define + $headerDef =~ s/\./_/; + return $headerDef; +} + +#----------------------------------------------------------------------- +sub writeFile{ + ($infile,$outfile,$destDir, $symbolAppend, $symbolDef, $exclude) = @_; + + $headerDef = getHeaderDef($outfile); + + $outfile = $destDir."/".$outfile; + + $inFH = IO::File->new($infile,"r") + or die "could not open the file $infile for reading: $! \n"; + $outFH = IO::File->new($outfile,"w") + or die "could not open the file $outfile for writing: $! \n"; + + #print "$headerDef>>> $outfile\n"; + printHeader($outFH, $outFileName, $headerDef, $symbolDef); + parseWriteFile($inFH, $outFH, $symbolAppend, $exclude); + printFooter($outFH, $headerDef, $symbolDef); + close($inFH); + close($outFH); +} + +#----------------------------------------------------------------------- +sub printHeader{ + ($outFH, $headername, $HEADERDEF, $symbolDef) = @_; + ($DAY, $MONTH, $YEAR) = (localtime)[3,4,5]; + $YEAR += 1900; +#We will print our copyright here + warnings +print $outFH <<END_HEADER_COMMENT; +/* +******************************************************************************* +* Copyright (C) 2004-$YEAR, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* +* file name: $headername +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* Created by: genheaders.pl, a perl script written by Ram Viswanadha +* +* Contains data for commenting out APIs. +* Gets included by umachine.h +* +* THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW WHAT +* YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! +*/ + +#ifndef $HEADERDEF +#define $HEADERDEF + +#ifdef $symbolDef + +END_HEADER_COMMENT +} + +#----------------------------------------------------------------------- +sub parseWriteFile{ + ($inFH, $outFH, $symbolAppend, $exclude) = @_; + %disableRenaming; + %enableRenaning; + while (defined ($line = <$inFH>)){ + #just process C APIs for now + if($line =~ /\<dt\>/ ){ + #special cases + if( ($line =~ /LEUnicode/)|| ($line =~ /LanguageCodes/) || + ($line =~ /ScriptCodes/) || ($line =~ /\:+/) || + ($line =~ /Class/) ){ + next; + } + #<dt>Global <a class="el" href="utrans_8h.html#a21">utrans_unregister</a> </dt> + #<dt>Global <a class="el" href="classUnicodeString.html#w1w0">UnicodeString::kInvariant</a> </dt> + # the below regular expression works for both the above formats. + $line=~ m/\<dt\>.*\<a class=\".*\" href=\".*\">(.*)\<\/dt\>/; + my $value = $1; + $value =~ s/\<\/a\>\s*//g; + $value =~ s/^\s+//; + $value =~ s/\s+$//; + #print "$exclude->{$value}\n"; + if($exclude->{$value} eq "EXCLUDE"){ + #print "$value $exclude->{$value}\n"; + next; + } + #print "$value $realSymbol $nonExSymbol\n"; + next if(isStringAcceptable($value)==1); + $realSymbol = $value."_".$versionAppend; + $nonExSymbol = $value."_".$symbolAppend; + $disableRenaming{$value} = $nonExSymbol; + $enableRenaming{$realSymbol} = $nonExSymbol; + #print "$value $realSymbol $nonExSymbol\n"; + + } + } + print "size of disableRenaming: " . keys( %disableRenaming) . ".\n"; + print "size of enableRenaming: " . keys( %enableRenaming) . ".\n"; + print $outFH "# if U_DISABLE_RENAMING\n"; + foreach $key (sort (keys(%disableRenaming))) { + print $outFH "# define $key $disableRenaming{$key}\n"; + delete($disableRenaming{$key}); + } + print $outFH "# else\n"; + foreach $key (sort (keys(%enableRenaming))) { + print $outFH "# define $key $enableRenaming{$key}\n"; + delete($enableRenaming{$key}); + } + print $outFH "# endif /* U_DISABLE_RENAMING */\n"; +} +#----------------------------------------------------------------------- +sub isStringAcceptable{ + ($string) = @_; + @str = split(//, $string); + $ret = 1; + foreach $val (@str){ + if(($val ne "_") && !($val =~ /[0-9A-Z]/)){ + #print "$val\n"; + $ret = 0; + } + } + #print "$string : $ret\n"; + if(!(defined $includeTypes)){ + if($ret==0 && $str[0] eq 'U'){ + $ret=1; + } + } + return $ret; +} + +#----------------------------------------------------------------------- +sub printFooter{ + + ($outFH, $headerDef, $symbolDef ) = @_; +#print the footer +print $outFH <<END_FOOTER; + +#endif /* $symbolDef */ +#endif /* $headerDef */ + +END_FOOTER +} +#----------------------------------------------------------------------- +sub usage { + print << "END"; +Usage: +gendraft.pl +Options: + --srcdir=<directory> + --destdir=<directory> + --version=<current version of ICU> + --exclusion-list=<file name> + --include-types +e.g.: genheaders.pl --srcdir=<icu>/source/common/docs/html --destdir=<icu>/source/common/unicode --version=2.8 --exclusion-list=exclude.txt +END + exit(0); +} diff --git a/icuSources/tools/gennames/Makefile.in b/icuSources/tools/gennames/Makefile.in index 785bc533..46162ada 100644 --- a/icuSources/tools/gennames/Makefile.in +++ b/icuSources/tools/gennames/Makefile.in @@ -1,9 +1,9 @@ ## Makefile.in for ICU - tools/gennames -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. -## Steven R. Loomi +## Steven R. Loomis -## Install directory information +## Source directory information srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -14,33 +14,32 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/gennames -## - TARGET_STUB_NAME = gennames SECTION = 8 -MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) +#MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -ALL_MAN_FILES = $(MANX_FILES) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(ALL_MAN_FILES) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gennames.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local\ -distclean distclean-local dist dist-local check \ -check-local install-man install-manx +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -53,25 +52,19 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man - $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) - $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) +# $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) +# $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) -# man page -install-man: install-manx -install-manx: $(MANX_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) - -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status +install-man: $(MAN_FILES) +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: -clean-local: +clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) $(RMV) $(TARGET) $(OBJECTS) @@ -85,7 +78,13 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -94,3 +93,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/gennames/gennames.8.in b/icuSources/tools/gennames/gennames.8.in deleted file mode 100644 index 77c1eb43..00000000 --- a/icuSources/tools/gennames/gennames.8.in +++ /dev/null @@ -1,85 +0,0 @@ -.\" Hey, Emacs! This is -*-nroff-*- you know... -.\" -.\" gennames.8: manual page for the gennames utility -.\" -.\" Copyright (C) 2000 IBM, Inc. and others. -.\" -.TH GENNAMES 8 "13 November 2001" "ICU MANPAGE" "ICU @VERSION@ Manual" -.SH NAME -.B gennames -\- compile Unicode code points names into a data file -.SH SYNOPSIS -.B gennames -[ -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -] -[ -.BR "\-v\fP, \fB\-\-verbose" -] -[ -.BR "\-q\fP, \fB\-\-quiet" -] -[ -.BI "\-d\fP, \fB\-\-destdir" " destination" -] -[ -.BI "\-u\fP, \fB\-\-unicode" " version" -] -[ -.BI "\-1\fP, \fB\-\-unicode1-names" -] -[ -.IR filename -] -.SH DESCRIPTION -.B gennames -reads the Unicode character database from -.I filename -and produce the file -.I unames.dat -in its destination directory. -Optionally, Unicode 1.0 names can be chosen over Unicode 2.0 names for -those code points whose names were changed for Unicode 2.0. -.SH OPTIONS -.TP -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -Print help about usage and exit. -.TP -.BR "\-v\fP, \fB\-\-verbose" -Display extra informative messages during execution. -.TP -.BR "\-q\fP, \fB\-\-quiet" -Do not display any message during execution. -.TP -.BI "\-d\fP, \fB\-\-destdir" " destination" -Set the destination directory to -.IR destination . -The default destination directory is specified by the environment variable -.BR ICU_DATA , -or the location set when ICU was built if -.B ICU_DATA -is not set. -.TP -.BI "\-u\fP, \fB\-\-unicode" " version" -Mark the character names as belong to the specified -.I version -of Unicode. The default version is 3.1.1. -.TP -.BI "\-1\fP, \fB\-\-unicode1-names" -Store Unicode 1.0 names in addition of Unicode 2.0 names for -those code points whose names were changed for Unicode 2.0. -.SH ENVIRONMENT -.TP 10 -.B ICU_DATA -Specifies the directory containing ICU data. Defaults to -.BR @thepkgicudatadir@/@PACKAGE@/@VERSION@/ . -Some tools in ICU depend on the presence of the trailing slash. It is thus -important to make sure that it is present if -.B ICU_DATA -is set. -.SH VERSION -@VERSION@ -.SH COPYRIGHT -Copyright (C) 2000-2001 IBM, Inc. and others. -.SH SEE ALSO -.BR genprops (8) diff --git a/icuSources/tools/gennames/gennames.c b/icuSources/tools/gennames/gennames.c index 18958d9c..8a50acc0 100644 --- a/icuSources/tools/gennames/gennames.c +++ b/icuSources/tools/gennames/gennames.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -146,9 +146,50 @@ #define VERSION_STRING "unam" #define NAME_SEPARATOR_CHAR ';' +/* Unicode versions --------------------------------------------------------- */ + +enum { + UNI_1_0, + UNI_1_1, + UNI_2_0, + UNI_3_0, + UNI_3_1, + UNI_3_2, + UNI_4_0, + UNI_4_0_1, + UNI_4_1, + UNI_VER_COUNT +}; + static const UVersionInfo -unicode_3_0={ 3, 0, 0, 0 }, -unicode_3_1={ 3, 1, 0, 0 }; +unicodeVersions[]={ + { 1, 0, 0, 0 }, + { 1, 1, 0, 0 }, + { 2, 0, 0, 0 }, + { 3, 0, 0, 0 }, + { 3, 1, 0, 0 }, + { 3, 2, 0, 0 }, + { 4, 0, 0, 0 }, + { 4, 0, 1, 0 }, + { 4, 1, 0, 0 } +}; + +static int32_t ucdVersion=UNI_4_1; + +static int32_t +findUnicodeVersion(const UVersionInfo version) { + int32_t i; + + for(i=0; /* while(version>unicodeVersions[i]) {} */ + i<UNI_VER_COUNT && uprv_memcmp(version, unicodeVersions[i], 4)>0; + ++i) {} + if(0<i && i<UNI_VER_COUNT && uprv_memcmp(version, unicodeVersions[i], 4)<0) { + --i; /* fix 4.0.2 to land before 4.1, for valid x>=ucdVersion comparisons */ + } + return i; /* version>=unicodeVersions[i] && version<unicodeVersions[i+1]; possible: i==UNI_VER_COUNT */ +} + +/* generator data ----------------------------------------------------------- */ /* UDataInfo cf. udata.h */ static UDataInfo dataInfo={ @@ -301,7 +342,7 @@ main(int argc, char* argv[]) { /* preset then read command line options */ options[5].value=u_getDataDirectory(); - options[6].value="3.2"; + options[6].value="4.1"; argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); /* error handling, printing usage message */ @@ -348,6 +389,7 @@ main(int argc, char* argv[]) { /* set the Unicode version */ u_versionFromString(version, options[6].value); uprv_memcpy(dataInfo.dataVersion, version, 4); + ucdVersion=findUnicodeVersion(version); init(); parseDB(argc>=2 ? argv[1] : "-", store10Names); @@ -861,6 +903,42 @@ generateData(const char *dataDir) { } } + /* + * Required padding for data swapping: + * The token table undergoes a permutation during data swapping when the + * input and output charsets are different. + * The token table cannot grow during swapping, so we need to make sure that + * the table is long enough for successful in-place permutation. + * + * We simply round up tokenCount to the next multiple of 256 to account for + * all possible permutations. + * + * An optimization is possible if we only ever swap between ASCII and EBCDIC: + * + * If tokenCount>256, then a semicolon (NAME_SEPARATOR_CHAR) is used + * and will be swapped between ASCII and EBCDIC between + * positions 0x3b (ASCII semicolon) and 0x5e (EBCDIC semicolon). + * This should be the only -1 entry in tokens[256..511] on which the data + * swapper bases its trail byte permutation map (trailMap[]). + * + * It would be sufficient to increase tokenCount so that its lower 8 bits + * are at least 0x5e+1 to make room for swapping between the two semicolons. + * For values higher than 0x5e, the trail byte permutation map (trailMap[]) + * should always be an identity map, where we do not need additional room. + */ + i=tokenCount; + tokenCount=(tokenCount+0xff)&~0xff; + if(!beQuiet && i<tokenCount) { + printf("number of tokens[] padding entries for data swapping: %lu\n", (unsigned long)(tokenCount-i)); + } + for(; i<tokenCount; ++i) { + if((i&0xff)==NAME_SEPARATOR_CHAR) { + tokens[i]=-1; /* do not use NAME_SEPARATOR_CHAR as a second token byte */ + } else { + tokens[i]=0; /* unused token for padding */ + } + } + /* * Calculate the total size in bytes of the data including: * - the offset to the token strings, uint32_t (4) @@ -1009,11 +1087,16 @@ generateAlgorithmicData(UNewDataMemory *pData) { size=0; + if(ucdVersion>=UNI_4_1) { + /* Unicode 4.1 and up has a longer CJK Unihan range than before */ + cjk.rangeEnd=0x9FBB; + } + /* number of ranges of algorithmic names */ - if(uprv_memcmp(dataInfo.dataVersion, unicode_3_1, sizeof(UVersionInfo))>=0) { + if(ucdVersion>=UNI_3_1) { /* Unicode 3.1 and up has 4 ranges including CJK Extension B */ countAlgRanges=4; - } else if(uprv_memcmp(dataInfo.dataVersion, unicode_3_0, sizeof(UVersionInfo))>=0) { + } else if(ucdVersion>=UNI_3_0) { /* Unicode 3.0 has 3 ranges including CJK Extension A */ countAlgRanges=3; } else { @@ -1094,7 +1177,7 @@ findToken(uint8_t *s, int16_t length) { for(i=0; i<(int16_t)tokenCount; ++i) { token=tokens[i]; - if(token!=-1 && length==words[token].length && 0==uprv_memcmp(s, words[token].s, length)) { + if(token>=0 && length==words[token].length && 0==uprv_memcmp(s, words[token].s, length)) { return i; } } diff --git a/icuSources/tools/gennames/gennames.dsp b/icuSources/tools/gennames/gennames.dsp deleted file mode 100644 index d331ae39..00000000 --- a/icuSources/tools/gennames/gennames.dsp +++ /dev/null @@ -1,198 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gennames" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gennames - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gennames.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gennames.mak" CFG="gennames - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gennames - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gennames - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gennames - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gennames - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gennames - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gennames.exe -InputPath=.\Release\gennames.exe -InputName=gennames -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gennames - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gennames.exe -InputPath=.\Debug\gennames.exe -InputName=gennames -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gennames - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gennames.exe -InputPath=.\Release\gennames.exe -InputName=gennames -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gennames - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gennames.exe -InputPath=.\Debug\gennames.exe -InputName=gennames -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gennames - Win32 Release" -# Name "gennames - Win32 Debug" -# Name "gennames - Win64 Release" -# Name "gennames - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\gennames.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gennames/gennames.vcproj b/icuSources/tools/gennames/gennames.vcproj index b552c71f..e8d07fee 100644 --- a/icuSources/tools/gennames/gennames.vcproj +++ b/icuSources/tools/gennames/gennames.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gennames.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gennames.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gennorm/Makefile.in b/icuSources/tools/gennorm/Makefile.in index 9a2d5447..c2000d22 100644 --- a/icuSources/tools/gennorm/Makefile.in +++ b/icuSources/tools/gennorm/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/gennorm -## Copyright (c) 2001-2004, International Business Machines Corporation and +## Copyright (c) 2001-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis/Markus W. Scherer @@ -11,16 +11,15 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/gennorm TARGET_STUB_NAME = gennorm SECTION = 8 -MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) +#MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/gennorm ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) $(MAN_FILES) @@ -28,17 +27,19 @@ CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gennorm.o store.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -54,24 +55,12 @@ check: all check-local all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man - $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) - $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) +# $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) +# $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) -# man page install-man: $(MAN_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $< $(DESTDIR)$(mandir)/man$(SECTION) - -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -# build postscript and pdf formats -#$(TARGET).ps: $(TARGET).$(SECTION) -# groff -man < $< > $@ - -#$(TARGET).pdf: $(TARGET).ps -# ps2pdf $< $@ +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: @@ -89,7 +78,13 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) diff --git a/icuSources/tools/gennorm/gennorm.8.in b/icuSources/tools/gennorm/gennorm.8.in deleted file mode 100644 index be5e690e..00000000 --- a/icuSources/tools/gennorm/gennorm.8.in +++ /dev/null @@ -1,114 +0,0 @@ -.\" Hey, Emacs! This is -*-nroff-*- you know... -.\" -.\" gennorm.8: manual page for the gennorm utility -.\" -.\" Copyright (C) 2000-2001 IBM, Inc. and others. -.\" -.TH GENNORM 8 "16 January 2001" "ICU MANPAGE" "ICU @VERSION@ Manual" -.SH NAME -.B gennorm -\- compile normalization data from the Unicode Character Database -.SH SYNOPSIS -.B gennorm -[ -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -] -[ -.BR "\-v\fP, \fB\-\-verbose" -] -[ -.BI "\-u\fP, \fB\-\-unicode" " version" -] -[ -.BI "\-c\fP, \fB\-\-copyright" -] -[ -.BI "\-s\fP, \fB\-\-sourcedir" " source" -] -[ -.BI "\-d\fP, \fB\-\-destdir" " destination" -] -[ -.I suffix -] -.SH DESCRIPTION -.B gennorm -reads some of the Unicode Character Database files and compiles their -normalization information into a binary form. -The resulting file, -.BR unorm.dat , -can then be read directly by ICU, or used by -.BR pkgdata (8) -for incorporation into a larger archive or library. -.LP -The files read by -.B gennorm -are described in the -.B FILES -section. If -.I suffix -is passed on the command line, the names of these files will actually -be changed to include a dash followed by -.I suffix -in their basename. For example, the file -.B UnicodeData.txt -would be looked for under the name -.BR UnicodeData\-\fIsuffix\fP.txt . -.SH OPTIONS -.TP -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -Print help about usage and exit. -.TP -.BR "\-v\fP, \fB\-\-verbose" -Display extra informative messages during execution. -.TP -.BI "\-u\fP, \fB\-\-unicode" " version" -Specify which -.I version -of Unicode the Unicode Character Database refers to. -Defaults to -.BR 3.0.0 . -.TP -.BI "\-c\fP, \fB\-\-copyright" -Include a copyright notice into the binary data. -.TP -.BI "\-s\fP, \fB\-\-sourcedir" " source" -Set the source directory to -.IR source . -The default source directory is specified by the environment variable -.BR ICU_DATA . -.TP -.BI "\-d\fP, \fB\-\-destdir" " destination" -Set the destination directory to -.IR destination . -The default destination directory is specified by the environment variable -.BR ICU_DATA . -.SH ENVIRONMENT -.TP 10 -.B ICU_DATA -Specifies the directory containing ICU data. Defaults to -.BR @thepkgicudatadir@/@PACKAGE@/@VERSION@/ . -Some tools in ICU depend on the presence of the trailing slash. It is thus -important to make sure that it is present if -.B ICU_DATA -is set. -.SH FILES -The following files are read by -.B gennorm -and are looked for in the -.I source -directory. -.TP 20 -.B UnicodeData.txt -The main file in the Unicode Character Database. Contains character -properties, combining classes information, decompositions, names, -etc.\|.\|.. -.TP -.B DerivedNormalizationProperties.txt -Derived properties useful in dealing with normalization forms. -.SH VERSION -@VERSION@ -.SH COPYRIGHT -Copyright (C) 2000-2002 IBM, Inc. and others. -.SH SEE ALSO -.BR pkgdata (8) diff --git a/icuSources/tools/gennorm/gennorm.c b/icuSources/tools/gennorm/gennorm.c index 1a872476..69a12e30 100644 --- a/icuSources/tools/gennorm/gennorm.c +++ b/icuSources/tools/gennorm/gennorm.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2001-2004, International Business Machines +* Copyright (C) 2001-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -39,10 +39,6 @@ U_CDECL_BEGIN #include "gennorm.h" U_CDECL_END -#ifdef WIN32 -# pragma warning(disable: 4100) -#endif - UBool beVerbose=FALSE, haveCopyright=TRUE; /* prototypes --------------------------------------------------------------- */ @@ -63,7 +59,9 @@ enum { DESTDIR, SOURCEDIR, UNICODE_VERSION, - ICUDATADIR + ICUDATADIR, + CSOURCE, + STORE_FLAGS }; static UOption options[]={ @@ -73,8 +71,10 @@ static UOption options[]={ UOPTION_COPYRIGHT, UOPTION_DESTDIR, UOPTION_SOURCEDIR, - { "unicode", NULL, NULL, NULL, 'u', UOPT_REQUIRES_ARG, 0 }, - UOPTION_ICUDATADIR + UOPTION_DEF("unicode", 'u', UOPT_REQUIRES_ARG), + UOPTION_ICUDATADIR, + UOPTION_DEF("csource", 'C', UOPT_NO_ARG), + UOPTION_DEF("prune", 'p', UOPT_REQUIRES_ARG) }; extern int @@ -118,7 +118,19 @@ main(int argc, char* argv[]) { "\t-h or -? or --help this usage text\n" "\t-v or --verbose verbose output\n" "\t-c or --copyright include a copyright notice\n" - "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n"); + "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n" + "\t-C or --csource generate a .c source file rather than the .icu binary\n"); + fprintf(stderr, + "\t-p or --prune flags Prune for data modularization:\n" + "\t Determine what data is to be stored.\n" + "\t 0 (zero) stores minimal data (only for NFD)\n" + "\t lowercase letters turn off data, uppercase turn on (use with 0)\n"); + fprintf(stderr, + "\t k: compatibility decompositions (NFKC, NFKD)\n" + "\t c: composition data (NFC, NFKC)\n" + "\t f: FCD data (will be generated at load time)\n" + "\t a: auxiliary data (canonical closure etc.)\n" + "\t x: exclusion sets (Unicode 3.2-level normalization)\n"); fprintf(stderr, "\t-d or --destdir destination directory, followed by the path\n" "\t-s or --sourcedir source directory, followed by the path\n" @@ -149,7 +161,7 @@ main(int argc, char* argv[]) { "gennorm writes a dummy " U_ICUDATA_NAME "_" DATA_NAME "." DATA_TYPE " because UCONFIG_NO_NORMALIZATION is set, \n" "see icu/source/common/unicode/uconfig.h\n"); - generateData(destDir); + generateData(destDir, options[CSOURCE].doesOccur); #else @@ -159,6 +171,57 @@ main(int argc, char* argv[]) { u_setDataDirectory(options[ICUDATADIR].value); } + if(options[STORE_FLAGS].doesOccur) { + const char *s=options[STORE_FLAGS].value; + char c; + + while((c=*s++)!=0) { + switch(c) { + case '0': + gStoreFlags=0; /* store minimal data (only for NFD) */ + break; + + /* lowercase letters: omit data */ + case 'k': + gStoreFlags&=~U_MASK(UGENNORM_STORE_COMPAT); + break; + case 'c': + gStoreFlags&=~U_MASK(UGENNORM_STORE_COMPOSITION); + break; + case 'f': + gStoreFlags&=~U_MASK(UGENNORM_STORE_FCD); + break; + case 'a': + gStoreFlags&=~U_MASK(UGENNORM_STORE_AUX); + break; + case 'x': + gStoreFlags&=~U_MASK(UGENNORM_STORE_EXCLUSIONS); + break; + + /* uppercase letters: include data (use with 0) */ + case 'K': + gStoreFlags|=U_MASK(UGENNORM_STORE_COMPAT); + break; + case 'C': + gStoreFlags|=U_MASK(UGENNORM_STORE_COMPOSITION); + break; + case 'F': + gStoreFlags|=U_MASK(UGENNORM_STORE_FCD); + break; + case 'A': + gStoreFlags|=U_MASK(UGENNORM_STORE_AUX); + break; + case 'X': + gStoreFlags|=U_MASK(UGENNORM_STORE_EXCLUSIONS); + break; + + default: + fprintf(stderr, "ignoring undefined prune flag '%c'\n", c); + break; + } + } + } + /* * Verify that we can work with properties * but don't call u_init() because that needs unorm.icu which we are just @@ -226,7 +289,7 @@ main(int argc, char* argv[]) { processData(); /* write the properties data file */ - generateData(destDir); + generateData(destDir, options[CSOURCE].doesOccur); cleanUpData(); } @@ -379,6 +442,12 @@ unicodeDataLineFn(void *context, /* reset the properties */ uprv_memset(&norm, 0, sizeof(Norm)); + /* + * The combiningIndex must not be initialized to 0 because 0 is the + * combiningIndex of the first forward-combining character. + */ + norm.combiningIndex=0xffff; + /* get the character code, field 0 */ code=(uint32_t)uprv_strtoul(fields[0][0], &end, 16); if(end<=fields[0][0] || end!=fields[0][1]) { diff --git a/icuSources/tools/gennorm/gennorm.dsp b/icuSources/tools/gennorm/gennorm.dsp deleted file mode 100644 index e528ff1f..00000000 --- a/icuSources/tools/gennorm/gennorm.dsp +++ /dev/null @@ -1,206 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gennorm" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gennorm - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gennorm.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gennorm.mak" CFG="gennorm - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gennorm - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gennorm - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gennorm - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gennorm - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gennorm - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\toolutil" /I "..\..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gennorm.exe -InputPath=.\Release\gennorm.exe -InputName=gennorm -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gennorm - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\toolutil" /I "..\..\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gennorm.exe -InputPath=.\Debug\gennorm.exe -InputName=gennorm -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gennorm - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\toolutil" /I "..\..\common" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gennorm.exe -InputPath=.\Release\gennorm.exe -InputName=gennorm -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gennorm - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\toolutil" /I "..\..\common" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gennorm.exe -InputPath=.\Debug\gennorm.exe -InputName=gennorm -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gennorm - Win32 Release" -# Name "gennorm - Win32 Debug" -# Name "gennorm - Win64 Release" -# Name "gennorm - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "c;cpp;rc" -# Begin Source File - -SOURCE=.\gennorm.c -# End Source File -# Begin Source File - -SOURCE=.\store.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h" -# Begin Source File - -SOURCE=.\gennorm.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gennorm/gennorm.h b/icuSources/tools/gennorm/gennorm.h index 7856928a..ea33d957 100644 --- a/icuSources/tools/gennorm/gennorm.h +++ b/icuSources/tools/gennorm/gennorm.h @@ -1,16 +1,16 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2002, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* -* file name: genprops.h +* file name: gennorm.h * encoding: US-ASCII * tab size: 8 (not used) * indentation:4 * -* created on: 1999dec13 +* created on: 2001may25 * created by: Markus W. Scherer */ @@ -39,6 +39,28 @@ typedef struct Norm { UBool unsafeStart; } Norm; +/* + * modularization flags + * + * Corresponding bits in gStoreFlags control whether certain kinds of data + * are to be stored in (1) or omitted from (0) the data file. + * The flags are controlled by a command-line argument, with a letter + * per flag. + */ +enum { + UGENNORM_STORE_COMPAT, /* (k) compatibility decompositions */ + UGENNORM_STORE_COMPOSITION, /* (c) composition data */ + UGENNORM_STORE_FCD, /* (f) FCD data */ + UGENNORM_STORE_AUX, /* (a) auxiliary trie and associated data */ + UGENNORM_STORE_EXCLUSIONS, /* (x) exclusion sets */ + UGENNORM_STORE_COUNT +}; + +extern uint32_t gStoreFlags; + +#define DO_STORE(flag) (0!=(gStoreFlags&U_MASK(flag))) +#define DO_NOT_STORE(flag) (0==(gStoreFlags&U_MASK(flag))) + /* global flags */ extern UBool beVerbose, haveCopyright; @@ -65,7 +87,7 @@ extern void processData(void); extern void -generateData(const char *dataDir); +generateData(const char *dataDir, UBool csource); extern void cleanUpData(void); diff --git a/icuSources/tools/gennorm/gennorm.vcproj b/icuSources/tools/gennorm/gennorm.vcproj index ed098248..34fcc44c 100644 --- a/icuSources/tools/gennorm/gennorm.vcproj +++ b/icuSources/tools/gennorm/gennorm.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\toolutil,..\..\common" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gennorm.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\toolutil,..\..\common" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gennorm.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gennorm/store.c b/icuSources/tools/gennorm/store.c index 5dc0162a..e0e4051b 100644 --- a/icuSources/tools/gennorm/store.c +++ b/icuSources/tools/gennorm/store.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -29,11 +29,9 @@ #include "unicode/uset.h" #include "toolutil.h" #include "unewdata.h" +#include "writesrc.h" #include "unormimp.h" #include "gennorm.h" -#ifdef WIN32 -# pragma warning(disable: 4100) -#endif #define DO_DEBUG_OUT 0 @@ -92,6 +90,9 @@ static int32_t indexes[_NORM_INDEX_TOP]={ 0 }; /* builder data ------------------------------------------------------------- */ +/* modularization flags, see gennorm.h (default to "store everything") */ +uint32_t gStoreFlags=0xffffffff; + typedef void EnumTrieFn(void *context, uint32_t code, Norm *norm); static UNewTrie @@ -151,6 +152,19 @@ static uint16_t canonStartSets[_NORM_MAX_CANON_SETS+2*_NORM_MAX_SET_SEARCH_TABLE static int32_t canonStartSetsTop=_NORM_SET_INDEX_TOP; static int32_t canonSetsCount=0; +/* allocate and initialize a Norm unit */ +static Norm * +allocNorm() { + /* allocate Norm */ + Norm *p=(Norm *)utm_alloc(normMem); + /* + * The combiningIndex must not be initialized to 0 because 0 is the + * combiningIndex of the first forward-combining character. + */ + p->combiningIndex=0xffff; + return p; +} + extern void init() { uint16_t *p16; @@ -172,7 +186,7 @@ init() { /* allocate Norm structures and reset the first one */ normMem=utm_open("gennorm normalization structs", 20000, 20000, sizeof(Norm)); - norms=utm_alloc(normMem); + norms=allocNorm(); /* allocate UTF-32 string memory */ utf32Mem=utm_open("gennorm UTF-32 strings", 30000, 30000, 4); @@ -216,7 +230,7 @@ createNorm(uint32_t code) { p=norms+i; } else { /* allocate Norm */ - p=(Norm *)utm_alloc(normMem); + p=allocNorm(); if(!utrie_set32(normTrie, (UChar32)code, (uint32_t)(p-norms))) { fprintf(stderr, "error: too many normalization entries\n"); exit(U_BUFFER_OVERFLOW_ERROR); @@ -399,6 +413,10 @@ static void addCombiningTriple(uint32_t lead, uint32_t trail, uint32_t combined) { CombiningTriple *triple; + if(DO_NOT_STORE(UGENNORM_STORE_COMPOSITION)) { + return; + } + /* * set combiningFlags for the two code points * do this after decomposition so that getNorm() above returns NULL @@ -561,8 +579,12 @@ getHangulDecomposition(uint32_t c, Norm *pHangulNorm, uint32_t hangulBuffer[3]) hangulBuffer[1]=JAMO_V_BASE+c%JAMO_V_COUNT; hangulBuffer[0]=JAMO_L_BASE+c/JAMO_V_COUNT; - pHangulNorm->nfd=pHangulNorm->nfkd=hangulBuffer; - pHangulNorm->lenNFD=pHangulNorm->lenNFKD=length; + pHangulNorm->nfd=hangulBuffer; + pHangulNorm->lenNFD=length; + if(DO_STORE(UGENNORM_STORE_COMPAT)) { + pHangulNorm->nfkd=hangulBuffer; + pHangulNorm->lenNFKD=length; + } } /* @@ -628,7 +650,11 @@ decompStoreNewNF(uint32_t code, Norm *norm) { } else if(p->lenNFD!=0) { uprv_memcpy(nfkd+lenNFKD, p->nfd, p->lenNFD*4); lenNFKD+=p->lenNFD; - changedNFKD=TRUE; + /* + * not changedNFKD=TRUE; + * so that we do not store a new nfkd if there was no nfkd string before + * and we only see canonical decompositions + */ } else { nfkd[lenNFKD++]=c; } @@ -776,13 +802,18 @@ storeNorm(uint32_t code, Norm *norm) { DecompSingle decompSingle; Norm *p; + if(DO_NOT_STORE(UGENNORM_STORE_COMPAT)) { + /* ignore compatibility decomposition */ + norm->lenNFKD=0; + } + /* copy existing derived normalization properties */ p=createNorm(code); norm->qcFlags=p->qcFlags; norm->combiningFlags=p->combiningFlags; norm->fncIndex=p->fncIndex; - /* process the decomposition if if there is at one here */ + /* process the decomposition if there is one here */ if((norm->lenNFD|norm->lenNFKD)!=0) { /* decompose this one decomposition further, may generate two decompositions */ decompStoreNewNF(code, norm); @@ -802,6 +833,21 @@ storeNorm(uint32_t code, Norm *norm) { extern void setQCFlags(uint32_t code, uint8_t qcFlags) { + if(DO_NOT_STORE(UGENNORM_STORE_COMPAT)) { + /* ignore compatibility decomposition: unset the KC/KD flags */ + qcFlags&=~(_NORM_QC_NFKC|_NORM_QC_NFKD); + + /* set the KC/KD flags to the same values as the C/D flags */ + qcFlags|=qcFlags<<1; + } + if(DO_NOT_STORE(UGENNORM_STORE_COMPOSITION)) { + /* ignore composition data: unset the C/KC flags */ + qcFlags&=~(_NORM_QC_NFC|_NORM_QC_NFKC); + + /* set the C/KC flags to the same values as the D/KD flags */ + qcFlags|=qcFlags>>2; + } + createNorm(code)->qcFlags|=qcFlags; /* adjust the minimum code point for quick check no/maybe */ @@ -827,7 +873,9 @@ setQCFlags(uint32_t code, uint8_t qcFlags) { extern void setCompositionExclusion(uint32_t code) { - createNorm(code)->combiningFlags|=0x80; + if(DO_STORE(UGENNORM_STORE_COMPOSITION)) { + createNorm(code)->combiningFlags|=0x80; + } } static void @@ -846,7 +894,9 @@ setHangulJamoSpecials() { for(c=0x1100; c<=0x1112; ++c) { norm=createNorm(c); norm->specialTag=_NORM_EXTRA_INDEX_TOP+_NORM_EXTRA_JAMO_L; - norm->combiningFlags=1; + if(DO_STORE(UGENNORM_STORE_COMPOSITION)) { + norm->combiningFlags=1; + } /* for each Jamo L create a set with its associated Hangul block */ norm->canonStart=uset_open(hangul, hangul+21*28-1); @@ -857,7 +907,9 @@ setHangulJamoSpecials() { for(c=0x1161; c<=0x1175; ++c) { norm=createNorm(c); norm->specialTag=_NORM_EXTRA_INDEX_TOP+_NORM_EXTRA_JAMO_V; - norm->combiningFlags=2; + if(DO_STORE(UGENNORM_STORE_COMPOSITION)) { + norm->combiningFlags=2; + } norm->unsafeStart=TRUE; } @@ -865,14 +917,20 @@ setHangulJamoSpecials() { for(c=0x11a8; c<=0x11c2; ++c) { norm=createNorm(c); norm->specialTag=_NORM_EXTRA_INDEX_TOP+_NORM_EXTRA_JAMO_T; - norm->combiningFlags=2; + if(DO_STORE(UGENNORM_STORE_COMPOSITION)) { + norm->combiningFlags=2; + } norm->unsafeStart=TRUE; } /* set Hangul specials, precompacted */ - norm=(Norm *)utm_alloc(normMem); + norm=allocNorm(); norm->specialTag=_NORM_EXTRA_INDEX_TOP+_NORM_EXTRA_HANGUL; - norm->qcFlags=_NORM_QC_NFD|_NORM_QC_NFKD; + if(DO_STORE(UGENNORM_STORE_COMPAT)) { + norm->qcFlags=_NORM_QC_NFD|_NORM_QC_NFKD; + } else { + norm->qcFlags=_NORM_QC_NFD; + } if(!utrie_setRange32(normTrie, 0xac00, 0xd7a4, (uint32_t)(norm-norms), TRUE)) { fprintf(stderr, "error: too many normalization entries (setting Hangul)\n"); @@ -891,6 +949,13 @@ setFNC(uint32_t c, UChar *s) { int32_t length, i, count; UChar first; + if( DO_NOT_STORE(UGENNORM_STORE_COMPAT) || + DO_NOT_STORE(UGENNORM_STORE_COMPOSITION) || + DO_NOT_STORE(UGENNORM_STORE_AUX) + ) { + return; + } + count=utm_countItems(extraMem); length=s[0]; first=s[1]; @@ -970,7 +1035,9 @@ reorderString(uint32_t *s, int32_t length) { return (uint16_t)(((uint16_t)ccs[0]<<8)|ccs[length-1]); } +#if 0 static UBool combineAndQC[64]={ 0 }; +#endif /* * canonically reorder the up to two decompositions @@ -1003,7 +1070,9 @@ postParseFn(void *context, uint32_t code, Norm *norm) { } /* see which combinations of combiningFlags and qcFlags are used for NFC/NFKC */ +#if 0 combineAndQC[(norm->qcFlags&0x33)|((norm->combiningFlags&3)<<2)]=1; +#endif if(norm->combiningFlags&1) { if(norm->udataCC!=0) { @@ -1096,18 +1165,19 @@ make32BitNorm(Norm *norm) { if(norm->lenNFKD>0) { /* a "true" NFKC starter with a compatibility decomposition */ if( norm->compatBothCCs>=0x100 || /* lead cc!=0 or */ - ((other=getNorm(norm->nfkd[0]))!=NULL && (other->qcFlags&_NORM_QC_NFKC)!=0) /* nfkd[0] not NFC_YES */ + ((other=getNorm(norm->nfkd[0]))!=NULL && (other->qcFlags&_NORM_QC_NFKC)!=0) /* nfkd[0] not NFKC_YES */ ) { fprintf(stderr, "error: true NFKC starter compatibility decomposition[%u] does not begin\n" " with a true NFKC starter: U+%04lx U+%04lx%s\n", - norm->lenNFKD, (long)norm->nfkd[0], (long)norm->nfkd[1], norm->lenNFKD<=2 ? "" : " ..."); + norm->lenNFKD, (long)norm->nfkd[0], (long)norm->nfkd[1], + norm->lenNFKD<=2 ? "" : " ..."); exit(U_INVALID_TABLE_FILE); } } else if(norm->lenNFD>0) { /* a "true" NFKC starter with only a canonical decomposition */ if( norm->canonBothCCs>=0x100 || /* lead cc!=0 or */ - ((other=getNorm(norm->nfd[0]))!=NULL && (other->qcFlags&_NORM_QC_NFKC)!=0) /* nfd[0] not NFC_YES */ + ((other=getNorm(norm->nfd[0]))!=NULL && (other->qcFlags&_NORM_QC_NFKC)!=0) /* nfd[0] not NFKC_YES */ ) { fprintf(stderr, "error: true NFKC starter canonical decomposition[%u] does not begin\n" @@ -1132,7 +1202,8 @@ make32BitNorm(Norm *norm) { } /* set the combining index value into the extra data */ - if(norm->combiningIndex!=0) { + /* 0xffff: no combining index; 0..0x7fff: combining index */ + if(norm->combiningIndex!=0xffff) { extra[0]=norm->combiningIndex; beforeZero=1; } @@ -1206,7 +1277,7 @@ makeAll32() { pNormData=utrie_getData(norm32Trie, &normLength); - count=0; + count=0; /* count is now just used for debugging */ for(i=0; i<normLength; ++i) { n=pNormData[i]; if(0!=(pNormData[i]=norms[n].value32)) { @@ -1251,11 +1322,14 @@ makeFCD() { */ static int32_t usetContainsOne(const USet* set) { - if (uset_size(set) == 1) { /* ### faster to count ranges and check only range?! */ + if(uset_getItemCount(set)==1) { + /* there is a single item (a single range) */ UChar32 start, end; - UErrorCode ec = U_ZERO_ERROR; - int32_t len = uset_getItem(set, 0, &start, &end, NULL, 0, &ec); - if (len == 0) return start; + UErrorCode ec=U_ZERO_ERROR; + int32_t len=uset_getItem(set, 0, &start, &end, NULL, 0, &ec); + if (len==0 && start==end) { /* a range (len==0) with a single code point */ + return start; + } } return -1; } @@ -1268,7 +1342,7 @@ makeCanonSetFn(void *context, uint32_t code, Norm *norm) { UErrorCode errorCode=U_ZERO_ERROR; /* does the set contain exactly one code point? */ - c=usetContainsOne(norm->canonStart); /* ### why? */ + c=usetContainsOne(norm->canonStart); /* add an entry to the BMP or supplementary search table */ if(code<=0xffff) { @@ -1294,7 +1368,7 @@ makeCanonSetFn(void *context, uint32_t code, Norm *norm) { if(c>=0) { /* single-code point result for supplementary code point */ - table[tableLength-2]|=(uint16_t)(0x8000|((c>>8)&0x1f00)); /* ### how does this work again? */ + table[tableLength-2]|=(uint16_t)(0x8000|((c>>8)&0x1f00)); table[tableLength++]=(uint16_t)c; } else { table[tableLength++]=(uint16_t)canonStartSetsTop; @@ -1490,7 +1564,7 @@ getSkippableFlags(const Norm *norm) { return 0; } - /* ### check other data generation functions whether they should & do ignore Hangul/Jamo specials */ + /* ### TODO check other data generation functions whether they should & do ignore Hangul/Jamo specials */ /* * Note: @@ -1605,26 +1679,7 @@ getFoldedNormValue(UNewTrie *trie, UChar32 start, int32_t offset) { return leadNorm32; } -/* folding value for FCD: just store the offset (16 bits) if there is any non-0 entry */ -static uint32_t U_CALLCONV -getFoldedFCDValue(UNewTrie *trie, UChar32 start, int32_t offset) { - uint32_t value; - UChar32 limit; - UBool inBlockZero; - - limit=start+0x400; - while(start<limit) { - value=utrie_get32(trie, start, &inBlockZero); - if(inBlockZero) { - start+=UTRIE_DATA_BLOCK_LENGTH; - } else if(value!=0) { - return (uint32_t)offset; - } else { - ++start; - } - } - return 0; -} +/* folding value for FCD: use default function (just store the offset (16 bits) if there is any non-0 entry) */ /* * folding value for auxiliary data: @@ -1685,8 +1740,13 @@ processData() { /* add hangul/jamo specials */ setHangulJamoSpecials(); + /* set this value; will be updated as makeCanonSetFn() adds sets (if there are any, see gStoreFlags) */ + canonStartSets[_NORM_SET_INDEX_CANON_SETS_LENGTH]=(uint16_t)canonStartSetsTop; + /* store search tables and USerializedSets for canonical starters (after Hangul/Jamo specials!) */ - enumTrie(makeCanonSetFn, NULL); + if(DO_STORE(UGENNORM_STORE_AUX) && DO_STORE(UGENNORM_STORE_COMPOSITION)) { + enumTrie(makeCanonSetFn, NULL); + } /* clone the normalization builder trie to make the final data tries */ if( NULL==utrie_clone(norm32Trie, normTrie, NULL, 0) || @@ -1723,7 +1783,7 @@ processData() { #endif /* #if !UCONFIG_NO_NORMALIZATION */ extern void -generateData(const char *dataDir) { +generateData(const char *dataDir, UBool csource) { static uint8_t normTrieBlock[100000], fcdTrieBlock[100000], auxTrieBlock[100000]; UNewDataMemory *pData; @@ -1747,27 +1807,39 @@ generateData(const char *dataDir) { exit(errorCode); } - fcdTrieSize=utrie_serialize(fcdTrie, fcdTrieBlock, sizeof(fcdTrieBlock), getFoldedFCDValue, TRUE, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "error: utrie_serialize(FCD data) failed, %s\n", u_errorName(errorCode)); - exit(errorCode); + if(DO_STORE(UGENNORM_STORE_FCD)) { + fcdTrieSize=utrie_serialize(fcdTrie, fcdTrieBlock, sizeof(fcdTrieBlock), NULL, TRUE, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "error: utrie_serialize(FCD data) failed, %s\n", u_errorName(errorCode)); + exit(errorCode); + } + } else { + fcdTrieSize=0; } - auxTrieSize=utrie_serialize(auxTrie, auxTrieBlock, sizeof(auxTrieBlock), getFoldedAuxValue, TRUE, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "error: utrie_serialize(auxiliary data) failed, %s\n", u_errorName(errorCode)); - exit(errorCode); + if(DO_STORE(UGENNORM_STORE_AUX)) { + auxTrieSize=utrie_serialize(auxTrie, auxTrieBlock, sizeof(auxTrieBlock), getFoldedAuxValue, TRUE, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "error: utrie_serialize(auxiliary data) failed, %s\n", u_errorName(errorCode)); + exit(errorCode); + } + } else { + auxTrieSize=0; } /* move the parts of canonStartSets[] together into a contiguous block */ - if(canonStartSetsTop<_NORM_MAX_CANON_SETS) { + if( canonStartSetsTop<_NORM_MAX_CANON_SETS && + canonStartSets[_NORM_SET_INDEX_CANON_BMP_TABLE_LENGTH]!=0 + ) { uprv_memmove(canonStartSets+canonStartSetsTop, canonStartSets+_NORM_MAX_CANON_SETS, canonStartSets[_NORM_SET_INDEX_CANON_BMP_TABLE_LENGTH]*2); } canonStartSetsTop+=canonStartSets[_NORM_SET_INDEX_CANON_BMP_TABLE_LENGTH]; - if(canonStartSetsTop<(_NORM_MAX_CANON_SETS+_NORM_MAX_SET_SEARCH_TABLE_LENGTH)) { + if( canonStartSetsTop<(_NORM_MAX_CANON_SETS+_NORM_MAX_SET_SEARCH_TABLE_LENGTH) && + canonStartSets[_NORM_SET_INDEX_CANON_SUPP_TABLE_LENGTH]!=0 + ) { uprv_memmove(canonStartSets+canonStartSetsTop, canonStartSets+_NORM_MAX_CANON_SETS+_NORM_MAX_SET_SEARCH_TABLE_LENGTH, canonStartSets[_NORM_SET_INDEX_CANON_SUPP_TABLE_LENGTH]*2); @@ -1792,6 +1864,9 @@ generateData(const char *dataDir) { exit(errorCode); } uset_retainAll(set, nfdQCNoSet); + if(DO_NOT_STORE(UGENNORM_STORE_EXCLUSIONS)) { + uset_clear(set); + } canonStartSetsTop+=uset_serialize(set, canonStartSets+canonStartSetsTop, LENGTHOF(canonStartSets)-canonStartSetsTop, &errorCode); if(U_FAILURE(errorCode)) { fprintf(stderr, "error: uset_serialize([:Ideographic:]&[:NFD_QC=No:]) failed, %s\n", u_errorName(errorCode)); @@ -1805,6 +1880,9 @@ generateData(const char *dataDir) { fprintf(stderr, "error: uset_openPattern([:^Age=3.2:]) failed, %s\n", u_errorName(errorCode)); exit(errorCode); } + if(DO_NOT_STORE(UGENNORM_STORE_EXCLUSIONS)) { + uset_clear(set); + } canonStartSetsTop+=uset_serialize(set, canonStartSets+canonStartSetsTop, LENGTHOF(canonStartSets)-canonStartSetsTop, &errorCode); if(U_FAILURE(errorCode)) { fprintf(stderr, "error: uset_serialize([:^Age=3.2:]) failed, %s\n", u_errorName(errorCode)); @@ -1866,37 +1944,126 @@ generateData(const char *dataDir) { #endif - /* write the data */ - pData=udata_create(dataDir, DATA_TYPE, DATA_NAME, &dataInfo, - haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "gennorm: unable to create the output file, error %d\n", errorCode); - exit(errorCode); - } + if(csource) { +#if UCONFIG_NO_NORMALIZATION + /* no csource for dummy mode..? */ + fprintf(stderr, "gennorm error: UCONFIG_NO_NORMALIZATION is on in csource mode.\n"); + exit(1); +#else + /* write .c file for hardcoded data */ + UTrie normTrie2={ NULL }, fcdTrie2={ NULL }, auxTrie2={ NULL }; + FILE *f; + + utrie_unserialize(&normTrie2, normTrieBlock, normTrieSize, &errorCode); + if(fcdTrieSize>0) { + utrie_unserialize(&fcdTrie2, fcdTrieBlock, fcdTrieSize, &errorCode); + } + if(auxTrieSize>0) { + utrie_unserialize(&auxTrie2, auxTrieBlock, auxTrieSize, &errorCode); + } + if(U_FAILURE(errorCode)) { + fprintf( + stderr, + "gennorm error: failed to utrie_unserialize() one of the tries - %s\n", + u_errorName(errorCode)); + exit(errorCode); + } + + f=usrc_create(dataDir, "unorm_props_data.c"); + if(f!=NULL) { + usrc_writeArray(f, + "static const UVersionInfo formatVersion={ ", + dataInfo.formatVersion, 8, 4, + " };\n\n"); + usrc_writeArray(f, + "static const UVersionInfo dataVersion={ ", + dataInfo.dataVersion, 8, 4, + " };\n\n"); + usrc_writeArray(f, + "static const int32_t indexes[_NORM_INDEX_TOP]={\n", + indexes, 32, _NORM_INDEX_TOP, + "\n};\n\n"); + usrc_writeUTrieArrays(f, + "static const uint16_t normTrie_index[%ld]={\n", + "static const uint32_t normTrie_data32[%ld]={\n", + &normTrie2, + "\n};\n\n"); + usrc_writeUTrieStruct(f, + "static const UTrie normTrie={\n", + &normTrie2, "normTrie_index", "normTrie_data32", "getFoldingNormOffset", + "};\n\n"); + usrc_writeArray(f, + "static const uint16_t extraData[%ld]={\n", + utm_getStart(extraMem), 16, utm_countItems(extraMem), + "\n};\n\n"); + usrc_writeArray(f, + "static const uint16_t combiningTable[%ld]={\n", + combiningTable, 16, combiningTableTop, + "\n};\n\n"); + if(fcdTrieSize>0) { + usrc_writeUTrieArrays(f, + "static const uint16_t fcdTrie_index[%ld]={\n", NULL, + &fcdTrie2, + "\n};\n\n"); + usrc_writeUTrieStruct(f, + "static const UTrie fcdTrie={\n", + &fcdTrie2, "fcdTrie_index", NULL, NULL, + "};\n\n"); + } else { + fputs( "static const UTrie fcdTrie={ NULL };\n\n", f); + } + if(auxTrieSize>0) { + usrc_writeUTrieArrays(f, + "static const uint16_t auxTrie_index[%ld]={\n", NULL, + &auxTrie2, + "\n};\n\n"); + usrc_writeUTrieStruct(f, + "static const UTrie auxTrie={\n", + &auxTrie2, "auxTrie_index", NULL, "getFoldingAuxOffset", + "};\n\n"); + } else { + fputs( "static const UTrie auxTrie={ NULL };\n\n", f); + } + usrc_writeArray(f, + "static const uint16_t canonStartSets[%ld]={\n", + canonStartSets, 16, canonStartSetsTop, + "\n};\n\n"); + fclose(f); + } +#endif + } else { + /* write the data */ + pData=udata_create(dataDir, DATA_TYPE, DATA_NAME, &dataInfo, + haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "gennorm: unable to create the output file, error %d\n", errorCode); + exit(errorCode); + } #if !UCONFIG_NO_NORMALIZATION - udata_writeBlock(pData, indexes, sizeof(indexes)); - udata_writeBlock(pData, normTrieBlock, normTrieSize); - udata_writeBlock(pData, utm_getStart(extraMem), utm_countItems(extraMem)*2); - udata_writeBlock(pData, combiningTable, combiningTableTop*2); - udata_writeBlock(pData, fcdTrieBlock, fcdTrieSize); - udata_writeBlock(pData, auxTrieBlock, auxTrieSize); - udata_writeBlock(pData, canonStartSets, canonStartSetsTop*2); + udata_writeBlock(pData, indexes, sizeof(indexes)); + udata_writeBlock(pData, normTrieBlock, normTrieSize); + udata_writeBlock(pData, utm_getStart(extraMem), utm_countItems(extraMem)*2); + udata_writeBlock(pData, combiningTable, combiningTableTop*2); + udata_writeBlock(pData, fcdTrieBlock, fcdTrieSize); + udata_writeBlock(pData, auxTrieBlock, auxTrieSize); + udata_writeBlock(pData, canonStartSets, canonStartSetsTop*2); #endif - /* finish up */ - dataLength=udata_finish(pData, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "gennorm: error %d writing the output file\n", errorCode); - exit(errorCode); - } + /* finish up */ + dataLength=udata_finish(pData, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "gennorm: error %d writing the output file\n", errorCode); + exit(errorCode); + } - if(dataLength!=size) { - fprintf(stderr, "gennorm error: data length %ld != calculated size %ld\n", - (long)dataLength, (long)size); - exit(U_INTERNAL_PROGRAM_ERROR); + if(dataLength!=size) { + fprintf(stderr, "gennorm error: data length %ld != calculated size %ld\n", + (long)dataLength, (long)size); + exit(U_INTERNAL_PROGRAM_ERROR); + } } } diff --git a/icuSources/tools/genpname/Makefile.in b/icuSources/tools/genpname/Makefile.in index 0c30400c..3d1670d4 100644 --- a/icuSources/tools/genpname/Makefile.in +++ b/icuSources/tools/genpname/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/genpname -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -11,30 +11,35 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## - ## Build directory information subdir = tools/genpname TARGET_STUB_NAME = genpname +SECTION = 8 + +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) + + ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = genpname.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -47,11 +52,15 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(MAN_FILES) +all-local: $(TARGET) install-local: all-local - $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) - $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) +# $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) +# $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) + +install-man: $(MAN_FILES) +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: @@ -71,6 +80,12 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(TARGET) : $(OBJECTS) $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) else diff --git a/icuSources/tools/genpname/SyntheticPropertyAliases.txt b/icuSources/tools/genpname/SyntheticPropertyAliases.txt index fa9b1b26..77d71f23 100644 --- a/icuSources/tools/genpname/SyntheticPropertyAliases.txt +++ b/icuSources/tools/genpname/SyntheticPropertyAliases.txt @@ -1,5 +1,5 @@ ###################################################################### -# Copyright (c) 2003-2004, International Business Machines +# Copyright (c) 2003-2005, International Business Machines # Corporation and others. All Rights Reserved. ###################################################################### # Author: Alan Liu @@ -42,3 +42,11 @@ nfcinert; NFC_Inert nfkcinert; NFKC_Inert segstart; Segment_Starter + +# C/POSIX character classes that do not have Unicode property [value] aliases +# see uchar.h +n/a; alnum +n/a; blank +n/a; graph +n/a; print +n/a; xdigit diff --git a/icuSources/tools/genpname/SyntheticPropertyValueAliases.txt b/icuSources/tools/genpname/SyntheticPropertyValueAliases.txt new file mode 100644 index 00000000..48cd1bec --- /dev/null +++ b/icuSources/tools/genpname/SyntheticPropertyValueAliases.txt @@ -0,0 +1,62 @@ +######################################################################## +# Copyright (c) 2006-2006, International Business Machines +# Corporation and others. All Rights Reserved. +######################################################################## +# file name: SyntheticPropertyValueAliases.txt +# encoding: US-ASCII +# tab size: 8 (not used) +# indentation: 4 +# created by: gensvpa.pl +######################################################################## + +# This file follows the format of PropertyValueAliases.txt +# It contains synthetic property value aliases not present +# in the UCD. Unlike PropertyValueAliases.txt, it should +# NOT contain a version number. + +######################################################################## +# THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW +# WHAT YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! +######################################################################## + +# set the same names as short and long names to fit the syntax without +# inventing names that we would have to support forever + +# Script (sc) + +sc ; Batk ; Batk +sc ; Blis ; Blis +sc ; Brah ; Brah +sc ; Cham ; Cham +sc ; Cirt ; Cirt +sc ; Cyrs ; Cyrs +sc ; Egyd ; Egyd +sc ; Egyh ; Egyh +sc ; Egyp ; Egyp +sc ; Geok ; Geok +sc ; Hans ; Hans +sc ; Hant ; Hant +sc ; Hmng ; Hmng +sc ; Hung ; Hung +sc ; Inds ; Inds +sc ; Java ; Java +sc ; Kali ; Kali +sc ; Latf ; Latf +sc ; Latg ; Latg +sc ; Lepc ; Lepc +sc ; Lina ; Lina +sc ; Mand ; Mand +sc ; Maya ; Maya +sc ; Mero ; Mero +sc ; Orkh ; Orkh +sc ; Perm ; Perm +sc ; Plrd ; Plrd +sc ; Roro ; Roro +sc ; Sara ; Sara +sc ; Syre ; Syre +sc ; Syrj ; Syrj +sc ; Syrn ; Syrn +sc ; Teng ; Teng +sc ; Vaii ; Vaii +sc ; Visp ; Visp +sc ; Zxxx ; Zxxx diff --git a/icuSources/tools/genpname/data.h b/icuSources/tools/genpname/data.h index 9b370d5e..9ca86836 100644 --- a/icuSources/tools/genpname/data.h +++ b/icuSources/tools/genpname/data.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2002-2004, International Business Machines Corporation and + * Copyright (C) 2002-2006, International Business Machines Corporation and * others. All Rights Reserved. * * MACHINE GENERATED FILE. !!! Do not edit manually !!! @@ -11,18 +11,18 @@ * PropertyAliases.txt * PropertyValueAliases.txt * - * Date: Mon May 3 17:13:38 2004 - * Unicode version: 4.0.1 + * Date: Tue Jun 13 12:03:23 2006 + * Unicode version: 5.0.0 * Script: preparse.pl */ -/* Unicode version 4.0.1 */ -const uint8_t VERSION_0 = 4; +/* Unicode version 5.0.0 */ +const uint8_t VERSION_0 = 5; const uint8_t VERSION_1 = 0; -const uint8_t VERSION_2 = 1; +const uint8_t VERSION_2 = 0; const uint8_t VERSION_3 = 0; -const int32_t STRING_COUNT = 663; +const int32_t STRING_COUNT = 788; /* to be sorted */ const AliasName STRING_TABLE[] = { @@ -31,1778 +31,2157 @@ const AliasName STRING_TABLE[] = { AliasName("AHex", 2), AliasName("AI", 3), AliasName("AL", 4), - AliasName("AN", 5), - AliasName("AR", 6), - AliasName("ASCII_Hex_Digit", 7), - AliasName("ATAR", 8), - AliasName("ATB", 9), - AliasName("ATBL", 10), - AliasName("Above", 11), - AliasName("Above_Left", 12), - AliasName("Above_Right", 13), - AliasName("Aegean_Numbers", 14), - AliasName("Age", 15), - AliasName("Ain", 16), - AliasName("Alaph", 17), - AliasName("Alef", 18), - AliasName("Alpha", 19), - AliasName("Alphabetic", 20), - AliasName("Alphabetic_Presentation_Forms", 21), - AliasName("Ambiguous", 22), - AliasName("Arab", 23), - AliasName("Arabic", 24), - AliasName("Arabic_Letter", 25), - AliasName("Arabic_Number", 26), - AliasName("Arabic_Presentation_Forms-A", 27), - AliasName("Arabic_Presentation_Forms-B", 28), - AliasName("Armenian", 29), - AliasName("Armn", 30), - AliasName("Arrows", 31), - AliasName("Attached_Above_Right", 32), - AliasName("Attached_Below", 33), - AliasName("Attached_Below_Left", 34), - AliasName("B", 35), - AliasName("B2", 36), - AliasName("BA", 37), - AliasName("BB", 38), - AliasName("BK", 39), - AliasName("BL", 40), - AliasName("BN", 41), - AliasName("BR", 42), - AliasName("Basic_Latin", 43), - AliasName("Beh", 44), - AliasName("Below", 45), - AliasName("Below_Left", 46), - AliasName("Below_Right", 47), - AliasName("Beng", 48), - AliasName("Bengali", 49), - AliasName("Beth", 50), - AliasName("Bidi_C", 51), - AliasName("Bidi_Class", 52), - AliasName("Bidi_Control", 53), - AliasName("Bidi_M", 54), - AliasName("Bidi_Mirrored", 55), - AliasName("Bidi_Mirroring_Glyph", 56), - AliasName("Block", 57), - AliasName("Block_Elements", 58), - AliasName("Bopo", 59), - AliasName("Bopomofo", 60), - AliasName("Bopomofo_Extended", 61), - AliasName("Boundary_Neutral", 62), - AliasName("Box_Drawing", 63), - AliasName("Brai", 64), - AliasName("Braille", 65), - AliasName("Braille_Patterns", 66), - AliasName("Break_After", 67), - AliasName("Break_Before", 68), - AliasName("Break_Both", 69), - AliasName("Break_Symbols", 70), - AliasName("Buhd", 71), - AliasName("Buhid", 72), - AliasName("Byzantine_Musical_Symbols", 73), - AliasName("C", 74), - AliasName("CB", 75), - AliasName("CJK_Compatibility", 76), - AliasName("CJK_Compatibility_Forms", 77), - AliasName("CJK_Compatibility_Ideographs", 78), - AliasName("CJK_Compatibility_Ideographs_Supplement", 79), - AliasName("CJK_Radicals_Supplement", 80), - AliasName("CJK_Symbols_and_Punctuation", 81), - AliasName("CJK_Unified_Ideographs", 82), - AliasName("CJK_Unified_Ideographs_Extension_A", 83), - AliasName("CJK_Unified_Ideographs_Extension_B", 84), - AliasName("CL", 85), - AliasName("CM", 86), - AliasName("CR", 87), - AliasName("CS", 88), - AliasName("Canadian_Aboriginal", 89), - AliasName("Canonical", 90), - AliasName("Canonical_Combining_Class", 91), - AliasName("Cans", 92), - AliasName("Carriage_Return", 93), - AliasName("Case_Folding", 94), - AliasName("Case_Sensitive", 95), - AliasName("Cased_Letter", 96), - AliasName("Cc", 97), - AliasName("Cf", 98), - AliasName("Cher", 99), - AliasName("Cherokee", 100), - AliasName("Circle", 101), - AliasName("Close_Punctuation", 102), - AliasName("Cn", 103), - AliasName("Co", 104), - AliasName("Combining_Diacritical_Marks", 105), - AliasName("Combining_Diacritical_Marks_for_Symbols", 106), - AliasName("Combining_Half_Marks", 107), - AliasName("Combining_Mark", 108), - AliasName("Common", 109), - AliasName("Common_Separator", 110), - AliasName("Comp_Ex", 111), - AliasName("Compat", 112), - AliasName("Complex_Context", 113), - AliasName("Connector_Punctuation", 114), - AliasName("Contingent_Break", 115), - AliasName("Control", 116), - AliasName("Control_Pictures", 117), - AliasName("Coptic", 118), - AliasName("Cprt", 119), - AliasName("Cs", 120), - AliasName("Currency_Symbol", 121), - AliasName("Currency_Symbols", 122), - AliasName("Cypriot", 123), - AliasName("Cypriot_Syllabary", 124), - AliasName("Cyrillic", 125), - AliasName("Cyrillic_Supplement", 126), - AliasName("Cyrillic_Supplementary", 127), - AliasName("Cyrl", 128), - AliasName("D", 129), - AliasName("DA", 130), - AliasName("DB", 131), - AliasName("DI", 132), - AliasName("Dal", 133), - AliasName("Dalath_Rish", 134), - AliasName("Dash", 135), - AliasName("Dash_Punctuation", 136), - AliasName("De", 137), - AliasName("Decimal", 138), - AliasName("Decimal_Number", 139), - AliasName("Decomposition_Type", 140), - AliasName("Default_Ignorable_Code_Point", 141), - AliasName("Dep", 142), - AliasName("Deprecated", 143), - AliasName("Deseret", 144), - AliasName("Deva", 145), - AliasName("Devanagari", 146), - AliasName("Di", 147), - AliasName("Dia", 148), - AliasName("Diacritic", 149), - AliasName("Digit", 150), - AliasName("Dingbats", 151), - AliasName("Double_Above", 152), - AliasName("Double_Below", 153), - AliasName("Dsrt", 154), - AliasName("Dual_Joining", 155), - AliasName("E", 156), - AliasName("EN", 157), - AliasName("ES", 158), - AliasName("ET", 159), - AliasName("EX", 160), - AliasName("East_Asian_Width", 161), - AliasName("Enclosed_Alphanumerics", 162), - AliasName("Enclosed_CJK_Letters_and_Months", 163), - AliasName("Enclosing_Mark", 164), - AliasName("Ethi", 165), - AliasName("Ethiopic", 166), - AliasName("European_Number", 167), - AliasName("European_Separator", 168), - AliasName("European_Terminator", 169), - AliasName("Exclamation", 170), - AliasName("Ext", 171), - AliasName("Extender", 172), - AliasName("F", 173), - AliasName("False", 174), - AliasName("Fe", 175), - AliasName("Feh", 176), - AliasName("Final", 177), - AliasName("Final_Punctuation", 178), - AliasName("Final_Semkath", 179), - AliasName("Font", 180), - AliasName("Format", 181), - AliasName("Fraction", 182), - AliasName("Full_Composition_Exclusion", 183), - AliasName("Fullwidth", 184), - AliasName("GL", 185), - AliasName("Gaf", 186), - AliasName("Gamal", 187), - AliasName("General_Category", 188), - AliasName("General_Category_Mask", 189), - AliasName("General_Punctuation", 190), - AliasName("Geometric_Shapes", 191), - AliasName("Geor", 192), - AliasName("Georgian", 193), - AliasName("Glue", 194), - AliasName("Goth", 195), - AliasName("Gothic", 196), - AliasName("Gr_Base", 197), - AliasName("Gr_Ext", 198), - AliasName("Gr_Link", 199), - AliasName("Grapheme_Base", 200), - AliasName("Grapheme_Extend", 201), - AliasName("Grapheme_Link", 202), - AliasName("Greek", 203), - AliasName("Greek_Extended", 204), - AliasName("Greek_and_Coptic", 205), - AliasName("Grek", 206), - AliasName("Gujarati", 207), - AliasName("Gujr", 208), - AliasName("Gurmukhi", 209), - AliasName("Guru", 210), - AliasName("H", 211), - AliasName("HY", 212), - AliasName("Hah", 213), - AliasName("Halfwidth", 214), - AliasName("Halfwidth_and_Fullwidth_Forms", 215), - AliasName("Hamza_On_Heh_Goal", 216), - AliasName("Han", 217), - AliasName("Hang", 218), - AliasName("Hangul", 219), - AliasName("Hangul_Compatibility_Jamo", 220), - AliasName("Hangul_Jamo", 221), - AliasName("Hangul_Syllable_Type", 222), - AliasName("Hangul_Syllables", 223), - AliasName("Hani", 224), - AliasName("Hano", 225), - AliasName("Hanunoo", 226), - AliasName("He", 227), - AliasName("Hebr", 228), - AliasName("Hebrew", 229), - AliasName("Heh", 230), - AliasName("Heh_Goal", 231), - AliasName("Heth", 232), - AliasName("Hex", 233), - AliasName("Hex_Digit", 234), - AliasName("High_Private_Use_Surrogates", 235), - AliasName("High_Surrogates", 236), - AliasName("Hira", 237), - AliasName("Hiragana", 238), - AliasName("Hrkt", 239), - AliasName("Hyphen", 240), - AliasName("ID", 241), - AliasName("IDC", 242), - AliasName("IDS", 243), - AliasName("IDSB", 244), - AliasName("IDST", 245), - AliasName("IDS_Binary_Operator", 246), - AliasName("IDS_Trinary_Operator", 247), - AliasName("ID_Continue", 248), - AliasName("ID_Start", 249), - AliasName("IN", 250), - AliasName("IPA_Extensions", 251), - AliasName("IS", 252), - AliasName("ISO_Comment", 253), - AliasName("Ideo", 254), - AliasName("Ideographic", 255), - AliasName("Ideographic_Description_Characters", 256), - AliasName("Infix_Numeric", 257), - AliasName("Inherited", 258), - AliasName("Initial", 259), - AliasName("Initial_Punctuation", 260), - AliasName("Inseparable", 261), - AliasName("Inseperable", 262), - AliasName("Iota_Subscript", 263), - AliasName("Isolated", 264), - AliasName("Ital", 265), - AliasName("Join_C", 266), - AliasName("Join_Causing", 267), - AliasName("Join_Control", 268), - AliasName("Joining_Group", 269), - AliasName("Joining_Type", 270), - AliasName("KV", 271), - AliasName("Kaf", 272), - AliasName("Kana", 273), - AliasName("Kana_Voicing", 274), - AliasName("Kanbun", 275), - AliasName("Kangxi_Radicals", 276), - AliasName("Kannada", 277), - AliasName("Kaph", 278), - AliasName("Katakana", 279), - AliasName("Katakana_Or_Hiragana", 280), - AliasName("Katakana_Phonetic_Extensions", 281), - AliasName("Khaph", 282), - AliasName("Khmer", 283), - AliasName("Khmer_Symbols", 284), - AliasName("Khmr", 285), - AliasName("Knda", 286), - AliasName("Knotted_Heh", 287), - AliasName("L", 288), - AliasName("LC", 289), - AliasName("LF", 290), - AliasName("LOE", 291), - AliasName("LRE", 292), - AliasName("LRO", 293), - AliasName("LV", 294), - AliasName("LVT", 295), - AliasName("LVT_Syllable", 296), - AliasName("LV_Syllable", 297), - AliasName("Lam", 298), - AliasName("Lamadh", 299), - AliasName("Lao", 300), - AliasName("Laoo", 301), - AliasName("Latin", 302), - AliasName("Latin-1_Supplement", 303), - AliasName("Latin_Extended-A", 304), - AliasName("Latin_Extended-B", 305), - AliasName("Latin_Extended_Additional", 306), - AliasName("Latn", 307), - AliasName("Lead_Canonical_Combining_Class", 308), - AliasName("Leading_Jamo", 309), - AliasName("Left", 310), - AliasName("Left_Joining", 311), - AliasName("Left_To_Right", 312), - AliasName("Left_To_Right_Embedding", 313), - AliasName("Left_To_Right_Override", 314), - AliasName("Letter", 315), - AliasName("Letter_Number", 316), - AliasName("Letterlike_Symbols", 317), - AliasName("Limb", 318), - AliasName("Limbu", 319), - AliasName("Linb", 320), - AliasName("Line_Break", 321), - AliasName("Line_Feed", 322), - AliasName("Line_Separator", 323), - AliasName("Linear_B", 324), - AliasName("Linear_B_Ideograms", 325), - AliasName("Linear_B_Syllabary", 326), - AliasName("Ll", 327), - AliasName("Lm", 328), - AliasName("Lo", 329), - AliasName("Logical_Order_Exception", 330), - AliasName("Low_Surrogates", 331), - AliasName("Lower", 332), - AliasName("Lowercase", 333), - AliasName("Lowercase_Letter", 334), - AliasName("Lowercase_Mapping", 335), - AliasName("Lt", 336), - AliasName("Lu", 337), - AliasName("M", 338), - AliasName("Malayalam", 339), - AliasName("Mandatory_Break", 340), - AliasName("Mark", 341), - AliasName("Math", 342), - AliasName("Math_Symbol", 343), - AliasName("Mathematical_Alphanumeric_Symbols", 344), - AliasName("Mathematical_Operators", 345), - AliasName("Maybe", 346), - AliasName("Mc", 347), - AliasName("Me", 348), - AliasName("Medial", 349), - AliasName("Meem", 350), - AliasName("Mim", 351), - AliasName("Miscellaneous_Mathematical_Symbols-A", 352), - AliasName("Miscellaneous_Mathematical_Symbols-B", 353), - AliasName("Miscellaneous_Symbols", 354), - AliasName("Miscellaneous_Symbols_and_Arrows", 355), - AliasName("Miscellaneous_Technical", 356), - AliasName("Mlym", 357), - AliasName("Mn", 358), - AliasName("Modifier_Letter", 359), - AliasName("Modifier_Symbol", 360), - AliasName("Mong", 361), - AliasName("Mongolian", 362), - AliasName("Musical_Symbols", 363), - AliasName("Myanmar", 364), - AliasName("Mymr", 365), - AliasName("N", 366), - AliasName("NA", 367), - AliasName("NChar", 368), - AliasName("NFC_Inert", 369), - AliasName("NFC_QC", 370), - AliasName("NFC_Quick_Check", 371), - AliasName("NFD_Inert", 372), - AliasName("NFD_QC", 373), - AliasName("NFD_Quick_Check", 374), - AliasName("NFKC_Inert", 375), - AliasName("NFKC_QC", 376), - AliasName("NFKC_Quick_Check", 377), - AliasName("NFKD_Inert", 378), - AliasName("NFKD_QC", 379), - AliasName("NFKD_Quick_Check", 380), - AliasName("NK", 381), - AliasName("NL", 382), - AliasName("NR", 383), - AliasName("NS", 384), - AliasName("NSM", 385), - AliasName("NU", 386), - AliasName("Na", 387), - AliasName("Name", 388), - AliasName("Narrow", 389), - AliasName("Nd", 390), - AliasName("Neutral", 391), - AliasName("Next_Line", 392), - AliasName("Nl", 393), - AliasName("No", 394), - AliasName("No_Block", 395), - AliasName("No_Joining_Group", 396), - AliasName("Nobreak", 397), - AliasName("Non_Joining", 398), - AliasName("Noncharacter_Code_Point", 399), - AliasName("None", 400), - AliasName("Nonspacing_Mark", 401), - AliasName("Nonstarter", 402), - AliasName("Noon", 403), - AliasName("Not_Applicable", 404), - AliasName("Not_Reordered", 405), - AliasName("Nu", 406), - AliasName("Nukta", 407), - AliasName("Number", 408), - AliasName("Number_Forms", 409), - AliasName("Numeric", 410), - AliasName("Numeric_Type", 411), - AliasName("Numeric_Value", 412), - AliasName("Nun", 413), - AliasName("ON", 414), - AliasName("OP", 415), - AliasName("OV", 416), - AliasName("Ogam", 417), - AliasName("Ogham", 418), - AliasName("Old_Italic", 419), - AliasName("Open_Punctuation", 420), - AliasName("Optical_Character_Recognition", 421), - AliasName("Oriya", 422), - AliasName("Orya", 423), - AliasName("Osma", 424), - AliasName("Osmanya", 425), - AliasName("Other", 426), - AliasName("Other_Letter", 427), - AliasName("Other_Neutral", 428), - AliasName("Other_Number", 429), - AliasName("Other_Punctuation", 430), - AliasName("Other_Symbol", 431), - AliasName("Overlay", 432), - AliasName("P", 433), - AliasName("PDF", 434), - AliasName("PO", 435), - AliasName("PR", 436), - AliasName("Paragraph_Separator", 437), - AliasName("Pc", 438), - AliasName("Pd", 439), - AliasName("Pe", 440), - AliasName("Pf", 441), - AliasName("Phonetic_Extensions", 442), - AliasName("Pi", 443), - AliasName("Po", 444), - AliasName("Pop_Directional_Format", 445), - AliasName("Postfix_Numeric", 446), - AliasName("Prefix_Numeric", 447), - AliasName("Private_Use", 448), - AliasName("Private_Use_Area", 449), - AliasName("Ps", 450), - AliasName("Punctuation", 451), - AliasName("QMark", 452), - AliasName("QU", 453), - AliasName("Qaac", 454), - AliasName("Qaai", 455), - AliasName("Qaf", 456), - AliasName("Qaph", 457), - AliasName("Quotation", 458), - AliasName("Quotation_Mark", 459), - AliasName("R", 460), - AliasName("RLE", 461), - AliasName("RLO", 462), - AliasName("Radical", 463), - AliasName("Reh", 464), - AliasName("Reversed_Pe", 465), - AliasName("Right", 466), - AliasName("Right_Joining", 467), - AliasName("Right_To_Left", 468), - AliasName("Right_To_Left_Embedding", 469), - AliasName("Right_To_Left_Override", 470), - AliasName("Runic", 471), - AliasName("Runr", 472), - AliasName("S", 473), - AliasName("SA", 474), - AliasName("SD", 475), - AliasName("SG", 476), - AliasName("SP", 477), - AliasName("STerm", 478), - AliasName("SY", 479), - AliasName("Sad", 480), - AliasName("Sadhe", 481), - AliasName("Sc", 482), - AliasName("Script", 483), - AliasName("Seen", 484), - AliasName("Segment_Separator", 485), - AliasName("Segment_Starter", 486), - AliasName("Semkath", 487), - AliasName("Sensitive", 488), - AliasName("Separator", 489), - AliasName("Shavian", 490), - AliasName("Shaw", 491), - AliasName("Shin", 492), - AliasName("Simple_Case_Folding", 493), - AliasName("Simple_Lowercase_Mapping", 494), - AliasName("Simple_Titlecase_Mapping", 495), - AliasName("Simple_Uppercase_Mapping", 496), - AliasName("Sinh", 497), - AliasName("Sinhala", 498), - AliasName("Sk", 499), - AliasName("Sm", 500), - AliasName("Small", 501), - AliasName("Small_Form_Variants", 502), - AliasName("So", 503), - AliasName("Soft_Dotted", 504), - AliasName("Space", 505), - AliasName("Space_Separator", 506), - AliasName("Spacing_Mark", 507), - AliasName("Spacing_Modifier_Letters", 508), - AliasName("Specials", 509), - AliasName("Square", 510), - AliasName("Sub", 511), - AliasName("Super", 512), - AliasName("Superscripts_and_Subscripts", 513), - AliasName("Supplemental_Arrows-A", 514), - AliasName("Supplemental_Arrows-B", 515), - AliasName("Supplemental_Mathematical_Operators", 516), - AliasName("Supplementary_Private_Use_Area-A", 517), - AliasName("Supplementary_Private_Use_Area-B", 518), - AliasName("Surrogate", 519), - AliasName("Swash_Kaf", 520), - AliasName("Symbol", 521), - AliasName("Syrc", 522), - AliasName("Syriac", 523), - AliasName("Syriac_Waw", 524), - AliasName("T", 525), - AliasName("Tagalog", 526), - AliasName("Tagb", 527), - AliasName("Tagbanwa", 528), - AliasName("Tags", 529), - AliasName("Tah", 530), - AliasName("Tai_Le", 531), - AliasName("Tai_Xuan_Jing_Symbols", 532), - AliasName("Tale", 533), - AliasName("Tamil", 534), - AliasName("Taml", 535), - AliasName("Taw", 536), - AliasName("Teh_Marbuta", 537), - AliasName("Telu", 538), - AliasName("Telugu", 539), - AliasName("Term", 540), - AliasName("Terminal_Punctuation", 541), - AliasName("Teth", 542), - AliasName("Tglg", 543), - AliasName("Thaa", 544), - AliasName("Thaana", 545), - AliasName("Thai", 546), - AliasName("Tibetan", 547), - AliasName("Tibt", 548), - AliasName("Titlecase_Letter", 549), - AliasName("Titlecase_Mapping", 550), - AliasName("Trail_Canonical_Combining_Class", 551), - AliasName("Trailing_Jamo", 552), - AliasName("Transparent", 553), - AliasName("True", 554), - AliasName("U", 555), - AliasName("UIdeo", 556), - AliasName("Ugar", 557), - AliasName("Ugaritic", 558), - AliasName("Unassigned", 559), - AliasName("Unicode_1_Name", 560), - AliasName("Unified_Canadian_Aboriginal_Syllabics", 561), - AliasName("Unified_Ideograph", 562), - AliasName("Unknown", 563), - AliasName("Upper", 564), - AliasName("Uppercase", 565), - AliasName("Uppercase_Letter", 566), - AliasName("Uppercase_Mapping", 567), - AliasName("V", 568), - AliasName("VR", 569), - AliasName("VS", 570), - AliasName("Variation_Selector", 571), - AliasName("Variation_Selectors", 572), - AliasName("Variation_Selectors_Supplement", 573), - AliasName("Vertical", 574), - AliasName("Virama", 575), - AliasName("Vowel_Jamo", 576), - AliasName("W", 577), - AliasName("WJ", 578), - AliasName("WS", 579), - AliasName("WSpace", 580), - AliasName("Waw", 581), - AliasName("White_Space", 582), - AliasName("Wide", 583), - AliasName("Word_Joiner", 584), - AliasName("XIDC", 585), - AliasName("XIDS", 586), - AliasName("XID_Continue", 587), - AliasName("XID_Start", 588), - AliasName("XX", 589), - AliasName("Y", 590), - AliasName("Yeh", 591), - AliasName("Yeh_Barree", 592), - AliasName("Yeh_With_Tail", 593), - AliasName("Yes", 594), - AliasName("Yi", 595), - AliasName("Yi_Radicals", 596), - AliasName("Yi_Syllables", 597), - AliasName("Yiii", 598), - AliasName("Yijing_Hexagram_Symbols", 599), - AliasName("Yudh", 600), - AliasName("Yudh_He", 601), - AliasName("Z", 602), - AliasName("ZW", 603), - AliasName("ZWSpace", 604), - AliasName("Zain", 605), - AliasName("Zhain", 606), - AliasName("Zl", 607), - AliasName("Zp", 608), - AliasName("Zs", 609), - AliasName("Zyyy", 610), - AliasName("age", 611), - AliasName("bc", 612), - AliasName("blk", 613), - AliasName("bmg", 614), - AliasName("can", 615), - AliasName("ccc", 616), - AliasName("cf", 617), - AliasName("com", 618), - AliasName("dt", 619), - AliasName("ea", 620), - AliasName("enc", 621), - AliasName("fin", 622), - AliasName("font", 623), - AliasName("fra", 624), - AliasName("gc", 625), - AliasName("gcm", 626), - AliasName("hst", 627), - AliasName("init", 628), - AliasName("isc", 629), - AliasName("iso", 630), - AliasName("jg", 631), - AliasName("jt", 632), - AliasName("lb", 633), - AliasName("lc", 634), - AliasName("lccc", 635), - AliasName("med", 636), - AliasName("na", 637), - AliasName("na1", 638), - AliasName("nar", 639), - AliasName("nb", 640), - AliasName("nfcinert", 641), - AliasName("nfdinert", 642), - AliasName("nfkcinert", 643), - AliasName("nfkdinert", 644), - AliasName("none", 645), - AliasName("nt", 646), - AliasName("nv", 647), - AliasName("sc", 648), - AliasName("segstart", 649), - AliasName("sfc", 650), - AliasName("slc", 651), - AliasName("sml", 652), - AliasName("sqr", 653), - AliasName("stc", 654), - AliasName("sub", 655), - AliasName("suc", 656), - AliasName("sup", 657), - AliasName("tc", 658), - AliasName("tccc", 659), - AliasName("uc", 660), - AliasName("vert", 661), - AliasName("wide", 662), + AliasName("ALetter", 5), + AliasName("AN", 6), + AliasName("AR", 7), + AliasName("ASCII_Hex_Digit", 8), + AliasName("AT", 9), + AliasName("ATAR", 10), + AliasName("ATB", 11), + AliasName("ATBL", 12), + AliasName("ATerm", 13), + AliasName("Above", 14), + AliasName("Above_Left", 15), + AliasName("Above_Right", 16), + AliasName("Aegean_Numbers", 17), + AliasName("Age", 18), + AliasName("Ain", 19), + AliasName("Alaph", 20), + AliasName("Alef", 21), + AliasName("Alpha", 22), + AliasName("Alphabetic", 23), + AliasName("Alphabetic_Presentation_Forms", 24), + AliasName("Ambiguous", 25), + AliasName("Ancient_Greek_Musical_Notation", 26), + AliasName("Ancient_Greek_Numbers", 27), + AliasName("Arab", 28), + AliasName("Arabic", 29), + AliasName("Arabic_Letter", 30), + AliasName("Arabic_Number", 31), + AliasName("Arabic_Presentation_Forms-A", 32), + AliasName("Arabic_Presentation_Forms-B", 33), + AliasName("Arabic_Supplement", 34), + AliasName("Armenian", 35), + AliasName("Armn", 36), + AliasName("Arrows", 37), + AliasName("Attached_Above_Right", 38), + AliasName("Attached_Below", 39), + AliasName("Attached_Below_Left", 40), + AliasName("B", 41), + AliasName("B2", 42), + AliasName("BA", 43), + AliasName("BB", 44), + AliasName("BK", 45), + AliasName("BL", 46), + AliasName("BN", 47), + AliasName("BR", 48), + AliasName("Bali", 49), + AliasName("Balinese", 50), + AliasName("Basic_Latin", 51), + AliasName("Batk", 52), + AliasName("Beh", 53), + AliasName("Below", 54), + AliasName("Below_Left", 55), + AliasName("Below_Right", 56), + AliasName("Beng", 57), + AliasName("Bengali", 58), + AliasName("Beth", 59), + AliasName("Bidi_C", 60), + AliasName("Bidi_Class", 61), + AliasName("Bidi_Control", 62), + AliasName("Bidi_M", 63), + AliasName("Bidi_Mirrored", 64), + AliasName("Bidi_Mirroring_Glyph", 65), + AliasName("Blis", 66), + AliasName("Block", 67), + AliasName("Block_Elements", 68), + AliasName("Bopo", 69), + AliasName("Bopomofo", 70), + AliasName("Bopomofo_Extended", 71), + AliasName("Boundary_Neutral", 72), + AliasName("Box_Drawing", 73), + AliasName("Brah", 74), + AliasName("Brai", 75), + AliasName("Braille", 76), + AliasName("Braille_Patterns", 77), + AliasName("Break_After", 78), + AliasName("Break_Before", 79), + AliasName("Break_Both", 80), + AliasName("Break_Symbols", 81), + AliasName("Bugi", 82), + AliasName("Buginese", 83), + AliasName("Buhd", 84), + AliasName("Buhid", 85), + AliasName("Byzantine_Musical_Symbols", 86), + AliasName("C", 87), + AliasName("CB", 88), + AliasName("CJK_Compatibility", 89), + AliasName("CJK_Compatibility_Forms", 90), + AliasName("CJK_Compatibility_Ideographs", 91), + AliasName("CJK_Compatibility_Ideographs_Supplement", 92), + AliasName("CJK_Radicals_Supplement", 93), + AliasName("CJK_Strokes", 94), + AliasName("CJK_Symbols_and_Punctuation", 95), + AliasName("CJK_Unified_Ideographs", 96), + AliasName("CJK_Unified_Ideographs_Extension_A", 97), + AliasName("CJK_Unified_Ideographs_Extension_B", 98), + AliasName("CL", 99), + AliasName("CM", 100), + AliasName("CN", 101), + AliasName("CR", 102), + AliasName("CS", 103), + AliasName("Canadian_Aboriginal", 104), + AliasName("Canonical", 105), + AliasName("Canonical_Combining_Class", 106), + AliasName("Cans", 107), + AliasName("Carriage_Return", 108), + AliasName("Case_Folding", 109), + AliasName("Case_Sensitive", 110), + AliasName("Cased_Letter", 111), + AliasName("Cc", 112), + AliasName("Cf", 113), + AliasName("Cham", 114), + AliasName("Cher", 115), + AliasName("Cherokee", 116), + AliasName("Circle", 117), + AliasName("Cirt", 118), + AliasName("Close", 119), + AliasName("Close_Punctuation", 120), + AliasName("Cn", 121), + AliasName("Co", 122), + AliasName("Combining_Diacritical_Marks", 123), + AliasName("Combining_Diacritical_Marks_Supplement", 124), + AliasName("Combining_Diacritical_Marks_for_Symbols", 125), + AliasName("Combining_Half_Marks", 126), + AliasName("Combining_Mark", 127), + AliasName("Common", 128), + AliasName("Common_Separator", 129), + AliasName("Comp_Ex", 130), + AliasName("Compat", 131), + AliasName("Complex_Context", 132), + AliasName("Connector_Punctuation", 133), + AliasName("Contingent_Break", 134), + AliasName("Control", 135), + AliasName("Control_Pictures", 136), + AliasName("Copt", 137), + AliasName("Coptic", 138), + AliasName("Counting_Rod_Numerals", 139), + AliasName("Cprt", 140), + AliasName("Cs", 141), + AliasName("Cuneiform", 142), + AliasName("Cuneiform_Numbers_and_Punctuation", 143), + AliasName("Currency_Symbol", 144), + AliasName("Currency_Symbols", 145), + AliasName("Cypriot", 146), + AliasName("Cypriot_Syllabary", 147), + AliasName("Cyrillic", 148), + AliasName("Cyrillic_Supplement", 149), + AliasName("Cyrillic_Supplementary", 150), + AliasName("Cyrl", 151), + AliasName("Cyrs", 152), + AliasName("D", 153), + AliasName("DA", 154), + AliasName("DB", 155), + AliasName("DI", 156), + AliasName("Dal", 157), + AliasName("Dalath_Rish", 158), + AliasName("Dash", 159), + AliasName("Dash_Punctuation", 160), + AliasName("De", 161), + AliasName("Decimal", 162), + AliasName("Decimal_Number", 163), + AliasName("Decomposition_Type", 164), + AliasName("Default_Ignorable_Code_Point", 165), + AliasName("Dep", 166), + AliasName("Deprecated", 167), + AliasName("Deseret", 168), + AliasName("Deva", 169), + AliasName("Devanagari", 170), + AliasName("Di", 171), + AliasName("Dia", 172), + AliasName("Diacritic", 173), + AliasName("Digit", 174), + AliasName("Dingbats", 175), + AliasName("Double_Above", 176), + AliasName("Double_Below", 177), + AliasName("Dsrt", 178), + AliasName("Dual_Joining", 179), + AliasName("E", 180), + AliasName("EN", 181), + AliasName("ES", 182), + AliasName("ET", 183), + AliasName("EX", 184), + AliasName("East_Asian_Width", 185), + AliasName("Egyd", 186), + AliasName("Egyh", 187), + AliasName("Egyp", 188), + AliasName("Enclosed_Alphanumerics", 189), + AliasName("Enclosed_CJK_Letters_and_Months", 190), + AliasName("Enclosing_Mark", 191), + AliasName("Ethi", 192), + AliasName("Ethiopic", 193), + AliasName("Ethiopic_Extended", 194), + AliasName("Ethiopic_Supplement", 195), + AliasName("European_Number", 196), + AliasName("European_Separator", 197), + AliasName("European_Terminator", 198), + AliasName("Exclamation", 199), + AliasName("Ext", 200), + AliasName("Extend", 201), + AliasName("ExtendNumLet", 202), + AliasName("Extender", 203), + AliasName("F", 204), + AliasName("FO", 205), + AliasName("False", 206), + AliasName("Fe", 207), + AliasName("Feh", 208), + AliasName("Final", 209), + AliasName("Final_Punctuation", 210), + AliasName("Final_Semkath", 211), + AliasName("Font", 212), + AliasName("Format", 213), + AliasName("Fraction", 214), + AliasName("Full_Composition_Exclusion", 215), + AliasName("Fullwidth", 216), + AliasName("GCB", 217), + AliasName("GL", 218), + AliasName("Gaf", 219), + AliasName("Gamal", 220), + AliasName("General_Category", 221), + AliasName("General_Category_Mask", 222), + AliasName("General_Punctuation", 223), + AliasName("Geok", 224), + AliasName("Geometric_Shapes", 225), + AliasName("Geor", 226), + AliasName("Georgian", 227), + AliasName("Georgian_Supplement", 228), + AliasName("Glag", 229), + AliasName("Glagolitic", 230), + AliasName("Glue", 231), + AliasName("Goth", 232), + AliasName("Gothic", 233), + AliasName("Gr_Base", 234), + AliasName("Gr_Ext", 235), + AliasName("Gr_Link", 236), + AliasName("Grapheme_Base", 237), + AliasName("Grapheme_Cluster_Break", 238), + AliasName("Grapheme_Extend", 239), + AliasName("Grapheme_Link", 240), + AliasName("Greek", 241), + AliasName("Greek_Extended", 242), + AliasName("Greek_and_Coptic", 243), + AliasName("Grek", 244), + AliasName("Gujarati", 245), + AliasName("Gujr", 246), + AliasName("Gurmukhi", 247), + AliasName("Guru", 248), + AliasName("H", 249), + AliasName("H2", 250), + AliasName("H3", 251), + AliasName("HY", 252), + AliasName("Hah", 253), + AliasName("Halfwidth", 254), + AliasName("Halfwidth_and_Fullwidth_Forms", 255), + AliasName("Hamza_On_Heh_Goal", 256), + AliasName("Han", 257), + AliasName("Hang", 258), + AliasName("Hangul", 259), + AliasName("Hangul_Compatibility_Jamo", 260), + AliasName("Hangul_Jamo", 261), + AliasName("Hangul_Syllable_Type", 262), + AliasName("Hangul_Syllables", 263), + AliasName("Hani", 264), + AliasName("Hano", 265), + AliasName("Hans", 266), + AliasName("Hant", 267), + AliasName("Hanunoo", 268), + AliasName("He", 269), + AliasName("Hebr", 270), + AliasName("Hebrew", 271), + AliasName("Heh", 272), + AliasName("Heh_Goal", 273), + AliasName("Heth", 274), + AliasName("Hex", 275), + AliasName("Hex_Digit", 276), + AliasName("High_Private_Use_Surrogates", 277), + AliasName("High_Surrogates", 278), + AliasName("Hira", 279), + AliasName("Hiragana", 280), + AliasName("Hmng", 281), + AliasName("Hrkt", 282), + AliasName("Hung", 283), + AliasName("Hyphen", 284), + AliasName("ID", 285), + AliasName("IDC", 286), + AliasName("IDS", 287), + AliasName("IDSB", 288), + AliasName("IDST", 289), + AliasName("IDS_Binary_Operator", 290), + AliasName("IDS_Trinary_Operator", 291), + AliasName("ID_Continue", 292), + AliasName("ID_Start", 293), + AliasName("IN", 294), + AliasName("IPA_Extensions", 295), + AliasName("IS", 296), + AliasName("ISO_Comment", 297), + AliasName("Ideo", 298), + AliasName("Ideographic", 299), + AliasName("Ideographic_Description_Characters", 300), + AliasName("Inds", 301), + AliasName("Infix_Numeric", 302), + AliasName("Inherited", 303), + AliasName("Initial", 304), + AliasName("Initial_Punctuation", 305), + AliasName("Inseparable", 306), + AliasName("Inseperable", 307), + AliasName("Iota_Subscript", 308), + AliasName("Isolated", 309), + AliasName("Ital", 310), + AliasName("JL", 311), + AliasName("JT", 312), + AliasName("JV", 313), + AliasName("Java", 314), + AliasName("Join_C", 315), + AliasName("Join_Causing", 316), + AliasName("Join_Control", 317), + AliasName("Joining_Group", 318), + AliasName("Joining_Type", 319), + AliasName("KA", 320), + AliasName("KV", 321), + AliasName("Kaf", 322), + AliasName("Kali", 323), + AliasName("Kana", 324), + AliasName("Kana_Voicing", 325), + AliasName("Kanbun", 326), + AliasName("Kangxi_Radicals", 327), + AliasName("Kannada", 328), + AliasName("Kaph", 329), + AliasName("Katakana", 330), + AliasName("Katakana_Or_Hiragana", 331), + AliasName("Katakana_Phonetic_Extensions", 332), + AliasName("Khaph", 333), + AliasName("Khar", 334), + AliasName("Kharoshthi", 335), + AliasName("Khmer", 336), + AliasName("Khmer_Symbols", 337), + AliasName("Khmr", 338), + AliasName("Knda", 339), + AliasName("Knotted_Heh", 340), + AliasName("L", 341), + AliasName("LC", 342), + AliasName("LE", 343), + AliasName("LF", 344), + AliasName("LO", 345), + AliasName("LOE", 346), + AliasName("LRE", 347), + AliasName("LRO", 348), + AliasName("LV", 349), + AliasName("LVT", 350), + AliasName("LVT_Syllable", 351), + AliasName("LV_Syllable", 352), + AliasName("Lam", 353), + AliasName("Lamadh", 354), + AliasName("Lao", 355), + AliasName("Laoo", 356), + AliasName("Latf", 357), + AliasName("Latg", 358), + AliasName("Latin", 359), + AliasName("Latin-1_Supplement", 360), + AliasName("Latin_Extended-A", 361), + AliasName("Latin_Extended-B", 362), + AliasName("Latin_Extended-C", 363), + AliasName("Latin_Extended-D", 364), + AliasName("Latin_Extended_Additional", 365), + AliasName("Latn", 366), + AliasName("Lead_Canonical_Combining_Class", 367), + AliasName("Leading_Jamo", 368), + AliasName("Left", 369), + AliasName("Left_Joining", 370), + AliasName("Left_To_Right", 371), + AliasName("Left_To_Right_Embedding", 372), + AliasName("Left_To_Right_Override", 373), + AliasName("Lepc", 374), + AliasName("Letter", 375), + AliasName("Letter_Number", 376), + AliasName("Letterlike_Symbols", 377), + AliasName("Limb", 378), + AliasName("Limbu", 379), + AliasName("Lina", 380), + AliasName("Linb", 381), + AliasName("Line_Break", 382), + AliasName("Line_Feed", 383), + AliasName("Line_Separator", 384), + AliasName("Linear_B", 385), + AliasName("Linear_B_Ideograms", 386), + AliasName("Linear_B_Syllabary", 387), + AliasName("Ll", 388), + AliasName("Lm", 389), + AliasName("Lo", 390), + AliasName("Logical_Order_Exception", 391), + AliasName("Low_Surrogates", 392), + AliasName("Lower", 393), + AliasName("Lowercase", 394), + AliasName("Lowercase_Letter", 395), + AliasName("Lowercase_Mapping", 396), + AliasName("Lt", 397), + AliasName("Lu", 398), + AliasName("M", 399), + AliasName("ML", 400), + AliasName("MN", 401), + AliasName("Malayalam", 402), + AliasName("Mand", 403), + AliasName("Mandatory_Break", 404), + AliasName("Mark", 405), + AliasName("Math", 406), + AliasName("Math_Symbol", 407), + AliasName("Mathematical_Alphanumeric_Symbols", 408), + AliasName("Mathematical_Operators", 409), + AliasName("Maya", 410), + AliasName("Maybe", 411), + AliasName("Mc", 412), + AliasName("Me", 413), + AliasName("Medial", 414), + AliasName("Meem", 415), + AliasName("Mero", 416), + AliasName("MidLetter", 417), + AliasName("MidNum", 418), + AliasName("Mim", 419), + AliasName("Miscellaneous_Mathematical_Symbols-A", 420), + AliasName("Miscellaneous_Mathematical_Symbols-B", 421), + AliasName("Miscellaneous_Symbols", 422), + AliasName("Miscellaneous_Symbols_and_Arrows", 423), + AliasName("Miscellaneous_Technical", 424), + AliasName("Mlym", 425), + AliasName("Mn", 426), + AliasName("Modifier_Letter", 427), + AliasName("Modifier_Symbol", 428), + AliasName("Modifier_Tone_Letters", 429), + AliasName("Mong", 430), + AliasName("Mongolian", 431), + AliasName("Musical_Symbols", 432), + AliasName("Myanmar", 433), + AliasName("Mymr", 434), + AliasName("N", 435), + AliasName("NA", 436), + AliasName("NChar", 437), + AliasName("NFC_Inert", 438), + AliasName("NFC_QC", 439), + AliasName("NFC_Quick_Check", 440), + AliasName("NFD_Inert", 441), + AliasName("NFD_QC", 442), + AliasName("NFD_Quick_Check", 443), + AliasName("NFKC_Inert", 444), + AliasName("NFKC_QC", 445), + AliasName("NFKC_Quick_Check", 446), + AliasName("NFKD_Inert", 447), + AliasName("NFKD_QC", 448), + AliasName("NFKD_Quick_Check", 449), + AliasName("NK", 450), + AliasName("NKo", 451), + AliasName("NL", 452), + AliasName("NR", 453), + AliasName("NS", 454), + AliasName("NSM", 455), + AliasName("NU", 456), + AliasName("Na", 457), + AliasName("Name", 458), + AliasName("Narrow", 459), + AliasName("Nd", 460), + AliasName("Neutral", 461), + AliasName("New_Tai_Lue", 462), + AliasName("Next_Line", 463), + AliasName("Nko", 464), + AliasName("Nkoo", 465), + AliasName("Nl", 466), + AliasName("No", 467), + AliasName("No_Block", 468), + AliasName("No_Joining_Group", 469), + AliasName("Nobreak", 470), + AliasName("Non_Joining", 471), + AliasName("Noncharacter_Code_Point", 472), + AliasName("None", 473), + AliasName("Nonspacing_Mark", 474), + AliasName("Nonstarter", 475), + AliasName("Noon", 476), + AliasName("Not_Applicable", 477), + AliasName("Not_Reordered", 478), + AliasName("Nu", 479), + AliasName("Nukta", 480), + AliasName("Number", 481), + AliasName("Number_Forms", 482), + AliasName("Numeric", 483), + AliasName("Numeric_Type", 484), + AliasName("Numeric_Value", 485), + AliasName("Nun", 486), + AliasName("OLetter", 487), + AliasName("ON", 488), + AliasName("OP", 489), + AliasName("OV", 490), + AliasName("Ogam", 491), + AliasName("Ogham", 492), + AliasName("Old_Italic", 493), + AliasName("Old_Persian", 494), + AliasName("Open_Punctuation", 495), + AliasName("Optical_Character_Recognition", 496), + AliasName("Oriya", 497), + AliasName("Orkh", 498), + AliasName("Orya", 499), + AliasName("Osma", 500), + AliasName("Osmanya", 501), + AliasName("Other", 502), + AliasName("Other_Letter", 503), + AliasName("Other_Neutral", 504), + AliasName("Other_Number", 505), + AliasName("Other_Punctuation", 506), + AliasName("Other_Symbol", 507), + AliasName("Overlay", 508), + AliasName("P", 509), + AliasName("PDF", 510), + AliasName("PO", 511), + AliasName("PR", 512), + AliasName("Paragraph_Separator", 513), + AliasName("Pat_Syn", 514), + AliasName("Pat_WS", 515), + AliasName("Pattern_Syntax", 516), + AliasName("Pattern_White_Space", 517), + AliasName("Pc", 518), + AliasName("Pd", 519), + AliasName("Pe", 520), + AliasName("Perm", 521), + AliasName("Pf", 522), + AliasName("Phag", 523), + AliasName("Phags-pa", 524), + AliasName("Phags_Pa", 525), + AliasName("Phnx", 526), + AliasName("Phoenician", 527), + AliasName("Phonetic_Extensions", 528), + AliasName("Phonetic_Extensions_Supplement", 529), + AliasName("Pi", 530), + AliasName("Plrd", 531), + AliasName("Po", 532), + AliasName("Pop_Directional_Format", 533), + AliasName("Postfix_Numeric", 534), + AliasName("Prefix_Numeric", 535), + AliasName("Private_Use", 536), + AliasName("Private_Use_Area", 537), + AliasName("Ps", 538), + AliasName("Punctuation", 539), + AliasName("QMark", 540), + AliasName("QU", 541), + AliasName("Qaac", 542), + AliasName("Qaai", 543), + AliasName("Qaf", 544), + AliasName("Qaph", 545), + AliasName("Quotation", 546), + AliasName("Quotation_Mark", 547), + AliasName("R", 548), + AliasName("RLE", 549), + AliasName("RLO", 550), + AliasName("Radical", 551), + AliasName("Reh", 552), + AliasName("Reversed_Pe", 553), + AliasName("Right", 554), + AliasName("Right_Joining", 555), + AliasName("Right_To_Left", 556), + AliasName("Right_To_Left_Embedding", 557), + AliasName("Right_To_Left_Override", 558), + AliasName("Roro", 559), + AliasName("Runic", 560), + AliasName("Runr", 561), + AliasName("S", 562), + AliasName("SA", 563), + AliasName("SB", 564), + AliasName("SD", 565), + AliasName("SE", 566), + AliasName("SG", 567), + AliasName("SP", 568), + AliasName("ST", 569), + AliasName("STerm", 570), + AliasName("SY", 571), + AliasName("Sad", 572), + AliasName("Sadhe", 573), + AliasName("Sara", 574), + AliasName("Sc", 575), + AliasName("Script", 576), + AliasName("Seen", 577), + AliasName("Segment_Separator", 578), + AliasName("Segment_Starter", 579), + AliasName("Semkath", 580), + AliasName("Sensitive", 581), + AliasName("Sentence_Break", 582), + AliasName("Sep", 583), + AliasName("Separator", 584), + AliasName("Shavian", 585), + AliasName("Shaw", 586), + AliasName("Shin", 587), + AliasName("Simple_Case_Folding", 588), + AliasName("Simple_Lowercase_Mapping", 589), + AliasName("Simple_Titlecase_Mapping", 590), + AliasName("Simple_Uppercase_Mapping", 591), + AliasName("Sinh", 592), + AliasName("Sinhala", 593), + AliasName("Sk", 594), + AliasName("Sm", 595), + AliasName("Small", 596), + AliasName("Small_Form_Variants", 597), + AliasName("So", 598), + AliasName("Soft_Dotted", 599), + AliasName("Sp", 600), + AliasName("Space", 601), + AliasName("Space_Separator", 602), + AliasName("Spacing_Mark", 603), + AliasName("Spacing_Modifier_Letters", 604), + AliasName("Specials", 605), + AliasName("Square", 606), + AliasName("Sub", 607), + AliasName("Super", 608), + AliasName("Superscripts_and_Subscripts", 609), + AliasName("Supplemental_Arrows-A", 610), + AliasName("Supplemental_Arrows-B", 611), + AliasName("Supplemental_Mathematical_Operators", 612), + AliasName("Supplemental_Punctuation", 613), + AliasName("Supplementary_Private_Use_Area-A", 614), + AliasName("Supplementary_Private_Use_Area-B", 615), + AliasName("Surrogate", 616), + AliasName("Swash_Kaf", 617), + AliasName("Sylo", 618), + AliasName("Syloti_Nagri", 619), + AliasName("Symbol", 620), + AliasName("Syrc", 621), + AliasName("Syre", 622), + AliasName("Syriac", 623), + AliasName("Syriac_Waw", 624), + AliasName("Syrj", 625), + AliasName("Syrn", 626), + AliasName("T", 627), + AliasName("Tagalog", 628), + AliasName("Tagb", 629), + AliasName("Tagbanwa", 630), + AliasName("Tags", 631), + AliasName("Tah", 632), + AliasName("Tai_Le", 633), + AliasName("Tai_Xuan_Jing_Symbols", 634), + AliasName("Tale", 635), + AliasName("Talu", 636), + AliasName("Tamil", 637), + AliasName("Taml", 638), + AliasName("Taw", 639), + AliasName("Teh_Marbuta", 640), + AliasName("Telu", 641), + AliasName("Telugu", 642), + AliasName("Teng", 643), + AliasName("Term", 644), + AliasName("Terminal_Punctuation", 645), + AliasName("Teth", 646), + AliasName("Tfng", 647), + AliasName("Tglg", 648), + AliasName("Thaa", 649), + AliasName("Thaana", 650), + AliasName("Thai", 651), + AliasName("Tibetan", 652), + AliasName("Tibt", 653), + AliasName("Tifinagh", 654), + AliasName("Titlecase_Letter", 655), + AliasName("Titlecase_Mapping", 656), + AliasName("Trail_Canonical_Combining_Class", 657), + AliasName("Trailing_Jamo", 658), + AliasName("Transparent", 659), + AliasName("True", 660), + AliasName("U", 661), + AliasName("UIdeo", 662), + AliasName("UP", 663), + AliasName("Ugar", 664), + AliasName("Ugaritic", 665), + AliasName("Unassigned", 666), + AliasName("Unicode_1_Name", 667), + AliasName("Unified_Canadian_Aboriginal_Syllabics", 668), + AliasName("Unified_Ideograph", 669), + AliasName("Unknown", 670), + AliasName("Upper", 671), + AliasName("Uppercase", 672), + AliasName("Uppercase_Letter", 673), + AliasName("Uppercase_Mapping", 674), + AliasName("V", 675), + AliasName("VR", 676), + AliasName("VS", 677), + AliasName("Vaii", 678), + AliasName("Variation_Selector", 679), + AliasName("Variation_Selectors", 680), + AliasName("Variation_Selectors_Supplement", 681), + AliasName("Vertical", 682), + AliasName("Vertical_Forms", 683), + AliasName("Virama", 684), + AliasName("Visp", 685), + AliasName("Vowel_Jamo", 686), + AliasName("W", 687), + AliasName("WB", 688), + AliasName("WJ", 689), + AliasName("WS", 690), + AliasName("WSpace", 691), + AliasName("Waw", 692), + AliasName("White_Space", 693), + AliasName("Wide", 694), + AliasName("Word_Break", 695), + AliasName("Word_Joiner", 696), + AliasName("XIDC", 697), + AliasName("XIDS", 698), + AliasName("XID_Continue", 699), + AliasName("XID_Start", 700), + AliasName("XX", 701), + AliasName("Xpeo", 702), + AliasName("Xsux", 703), + AliasName("Y", 704), + AliasName("Yeh", 705), + AliasName("Yeh_Barree", 706), + AliasName("Yeh_With_Tail", 707), + AliasName("Yes", 708), + AliasName("Yi", 709), + AliasName("Yi_Radicals", 710), + AliasName("Yi_Syllables", 711), + AliasName("Yiii", 712), + AliasName("Yijing_Hexagram_Symbols", 713), + AliasName("Yudh", 714), + AliasName("Yudh_He", 715), + AliasName("Z", 716), + AliasName("ZW", 717), + AliasName("ZWSpace", 718), + AliasName("Zain", 719), + AliasName("Zhain", 720), + AliasName("Zl", 721), + AliasName("Zp", 722), + AliasName("Zs", 723), + AliasName("Zxxx", 724), + AliasName("Zyyy", 725), + AliasName("Zzzz", 726), + AliasName("age", 727), + AliasName("alnum", 728), + AliasName("bc", 729), + AliasName("blank", 730), + AliasName("blk", 731), + AliasName("bmg", 732), + AliasName("can", 733), + AliasName("ccc", 734), + AliasName("cf", 735), + AliasName("cntrl", 736), + AliasName("com", 737), + AliasName("digit", 738), + AliasName("dt", 739), + AliasName("ea", 740), + AliasName("enc", 741), + AliasName("fin", 742), + AliasName("font", 743), + AliasName("fra", 744), + AliasName("gc", 745), + AliasName("gcm", 746), + AliasName("graph", 747), + AliasName("hst", 748), + AliasName("init", 749), + AliasName("isc", 750), + AliasName("iso", 751), + AliasName("jg", 752), + AliasName("jt", 753), + AliasName("lb", 754), + AliasName("lc", 755), + AliasName("lccc", 756), + AliasName("med", 757), + AliasName("na", 758), + AliasName("na1", 759), + AliasName("nar", 760), + AliasName("nb", 761), + AliasName("nfcinert", 762), + AliasName("nfdinert", 763), + AliasName("nfkcinert", 764), + AliasName("nfkdinert", 765), + AliasName("none", 766), + AliasName("nt", 767), + AliasName("nv", 768), + AliasName("print", 769), + AliasName("punct", 770), + AliasName("sc", 771), + AliasName("segstart", 772), + AliasName("sfc", 773), + AliasName("slc", 774), + AliasName("sml", 775), + AliasName("space", 776), + AliasName("sqr", 777), + AliasName("stc", 778), + AliasName("sub", 779), + AliasName("suc", 780), + AliasName("sup", 781), + AliasName("tc", 782), + AliasName("tccc", 783), + AliasName("uc", 784), + AliasName("vert", 785), + AliasName("wide", 786), + AliasName("xdigit", 787), }; /* to be filled in */ -int32_t REMAP[663]; +int32_t REMAP[788]; -const int32_t NAME_GROUP_COUNT = 926; +const int32_t NAME_GROUP_COUNT = 1165; int32_t NAME_GROUP[] = { - 338, -346, /* 0: "M", "Maybe" */ - 366, -394, /* 2: "N", "No" */ - 590, -594, /* 4: "Y", "Yes" */ - 19, -20, /* 6: "Alpha", "Alphabetic" */ - 2, -7, /* 8: "AHex", "ASCII_Hex_Digit" */ - 51, -53, /* 10: "Bidi_C", "Bidi_Control" */ - 54, -55, /* 12: "Bidi_M", "Bidi_Mirrored" */ - 488, -95, /* 14: "Sensitive", "Case_Sensitive" */ - 135, -135, /* 16: "Dash", "Dash" */ - 132, -141, /* 18: "DI", "Default_Ignorable_Code_Point" */ - 142, -143, /* 20: "Dep", "Deprecated" */ - 148, -149, /* 22: "Dia", "Diacritic" */ - 171, -172, /* 24: "Ext", "Extender" */ - 111, -183, /* 26: "Comp_Ex", "Full_Composition_Exclusion" */ - 197, -200, /* 28: "Gr_Base", "Grapheme_Base" */ - 198, -201, /* 30: "Gr_Ext", "Grapheme_Extend" */ - 199, -202, /* 32: "Gr_Link", "Grapheme_Link" */ - 233, -234, /* 34: "Hex", "Hex_Digit" */ - 240, -240, /* 36: "Hyphen", "Hyphen" */ - 254, -255, /* 38: "Ideo", "Ideographic" */ - 244, -246, /* 40: "IDSB", "IDS_Binary_Operator" */ - 245, -247, /* 42: "IDST", "IDS_Trinary_Operator" */ - 242, -248, /* 44: "IDC", "ID_Continue" */ - 243, -249, /* 46: "IDS", "ID_Start" */ - 266, -268, /* 48: "Join_C", "Join_Control" */ - 291, -330, /* 50: "LOE", "Logical_Order_Exception" */ - 332, -333, /* 52: "Lower", "Lowercase" */ - 342, -342, /* 54: "Math", "Math" */ - 641, -369, /* 56: "nfcinert", "NFC_Inert" */ - 642, -372, /* 58: "nfdinert", "NFD_Inert" */ - 643, -375, /* 60: "nfkcinert", "NFKC_Inert" */ - 644, -378, /* 62: "nfkdinert", "NFKD_Inert" */ - 368, -399, /* 64: "NChar", "Noncharacter_Code_Point" */ - 452, -459, /* 66: "QMark", "Quotation_Mark" */ - 463, -463, /* 68: "Radical", "Radical" */ - 649, -486, /* 70: "segstart", "Segment_Starter" */ - 475, -504, /* 72: "SD", "Soft_Dotted" */ - 478, -478, /* 74: "STerm", "STerm" */ - 540, -541, /* 76: "Term", "Terminal_Punctuation" */ - 556, -562, /* 78: "UIdeo", "Unified_Ideograph" */ - 564, -565, /* 80: "Upper", "Uppercase" */ - 570, -571, /* 82: "VS", "Variation_Selector" */ - 580, -582, /* 84: "WSpace", "White_Space" */ - 585, -587, /* 86: "XIDC", "XID_Continue" */ - 586, -588, /* 88: "XIDS", "XID_Start" */ - 647, -412, /* 90: "nv", "Numeric_Value" */ - 612, -52, /* 92: "bc", "Bidi_Class" */ - 613, -57, /* 94: "blk", "Block" */ - 616, -91, /* 96: "ccc", "Canonical_Combining_Class" */ - 619, -140, /* 98: "dt", "Decomposition_Type" */ - 620, -161, /* 100: "ea", "East_Asian_Width" */ - 625, -188, /* 102: "gc", "General_Category" */ - 627, -222, /* 104: "hst", "Hangul_Syllable_Type" */ - 631, -269, /* 106: "jg", "Joining_Group" */ - 632, -270, /* 108: "jt", "Joining_Type" */ - 635, -308, /* 110: "lccc", "Lead_Canonical_Combining_Class" */ - 633, -321, /* 112: "lb", "Line_Break" */ - 370, -371, /* 114: "NFC_QC", "NFC_Quick_Check" */ - 373, -374, /* 116: "NFD_QC", "NFD_Quick_Check" */ - 376, -377, /* 118: "NFKC_QC", "NFKC_Quick_Check" */ - 379, -380, /* 120: "NFKD_QC", "NFKD_Quick_Check" */ - 646, -411, /* 122: "nt", "Numeric_Type" */ - 648, -483, /* 124: "sc", "Script" */ - 659, -551, /* 126: "tccc", "Trail_Canonical_Combining_Class" */ - 626, -189, /* 128: "gcm", "General_Category_Mask" */ - 611, -15, /* 130: "age", "Age" */ - 614, -56, /* 132: "bmg", "Bidi_Mirroring_Glyph" */ - 617, -94, /* 134: "cf", "Case_Folding" */ - 629, -253, /* 136: "isc", "ISO_Comment" */ - 634, -335, /* 138: "lc", "Lowercase_Mapping" */ - 637, -388, /* 140: "na", "Name" */ - 650, -493, /* 142: "sfc", "Simple_Case_Folding" */ - 651, -494, /* 144: "slc", "Simple_Lowercase_Mapping" */ - 654, -495, /* 146: "stc", "Simple_Titlecase_Mapping" */ - 656, -496, /* 148: "suc", "Simple_Uppercase_Mapping" */ - 658, -550, /* 150: "tc", "Titlecase_Mapping" */ - 638, -560, /* 152: "na1", "Unicode_1_Name" */ - 660, -567, /* 154: "uc", "Uppercase_Mapping" */ - 5, -26, /* 156: "AN", "Arabic_Number" */ - 35, -437, /* 158: "B", "Paragraph_Separator" */ - 41, -62, /* 160: "BN", "Boundary_Neutral" */ - 88, -110, /* 162: "CS", "Common_Separator" */ - 385, -401, /* 164: "NSM", "Nonspacing_Mark" */ - 157, -167, /* 166: "EN", "European_Number" */ - 158, -168, /* 168: "ES", "European_Separator" */ - 159, -169, /* 170: "ET", "European_Terminator" */ - 288, -312, /* 172: "L", "Left_To_Right" */ - 292, -313, /* 174: "LRE", "Left_To_Right_Embedding" */ - 293, -314, /* 176: "LRO", "Left_To_Right_Override" */ - 414, -428, /* 178: "ON", "Other_Neutral" */ - 434, -445, /* 180: "PDF", "Pop_Directional_Format" */ - 460, -468, /* 182: "R", "Right_To_Left" */ - 4, -25, /* 184: "AL", "Arabic_Letter" */ - 461, -469, /* 186: "RLE", "Right_To_Left_Embedding" */ - 462, -470, /* 188: "RLO", "Right_To_Left_Override" */ - 473, -485, /* 190: "S", "Segment_Separator" */ - 579, -582, /* 192: "WS", "White_Space" */ - 173, -174, /* 194: "F", "False" */ - 525, -554, /* 196: "T", "True" */ - 0, -14, /* 198: "", "Aegean_Numbers" */ - 0, -21, /* 200: "", "Alphabetic_Presentation_Forms" */ - 0, -24, /* 202: "", "Arabic" */ - 0, -27, /* 204: "", "Arabic_Presentation_Forms-A" */ - 0, -28, /* 206: "", "Arabic_Presentation_Forms-B" */ - 0, -29, /* 208: "", "Armenian" */ - 0, -31, /* 210: "", "Arrows" */ - 0, -43, /* 212: "", "Basic_Latin" */ - 0, -49, /* 214: "", "Bengali" */ - 0, -58, /* 216: "", "Block_Elements" */ - 0, -60, /* 218: "", "Bopomofo" */ - 0, -61, /* 220: "", "Bopomofo_Extended" */ - 0, -63, /* 222: "", "Box_Drawing" */ - 0, -66, /* 224: "", "Braille_Patterns" */ - 0, -72, /* 226: "", "Buhid" */ - 0, -73, /* 228: "", "Byzantine_Musical_Symbols" */ - 0, -100, /* 230: "", "Cherokee" */ - 0, -76, /* 232: "", "CJK_Compatibility" */ - 0, -77, /* 234: "", "CJK_Compatibility_Forms" */ - 0, -78, /* 236: "", "CJK_Compatibility_Ideographs" */ - 0, -79, /* 238: "", "CJK_Compatibility_Ideographs_Supplement" */ - 0, -80, /* 240: "", "CJK_Radicals_Supplement" */ - 0, -81, /* 242: "", "CJK_Symbols_and_Punctuation" */ - 0, -82, /* 244: "", "CJK_Unified_Ideographs" */ - 0, -83, /* 246: "", "CJK_Unified_Ideographs_Extension_A" */ - 0, -84, /* 248: "", "CJK_Unified_Ideographs_Extension_B" */ - 0, -105, /* 250: "", "Combining_Diacritical_Marks" */ - 0, -107, /* 252: "", "Combining_Half_Marks" */ - 0, -106, /* 254: "", "Combining_Diacritical_Marks_for_Symbols" */ - 0, -117, /* 256: "", "Control_Pictures" */ - 0, -122, /* 258: "", "Currency_Symbols" */ - 0, -124, /* 260: "", "Cypriot_Syllabary" */ - 0, -125, /* 262: "", "Cyrillic" */ - 0, 126, -127, /* 264: "", "Cyrillic_Supplement", "Cyrillic_Supplementary" */ - 0, -144, /* 267: "", "Deseret" */ - 0, -146, /* 269: "", "Devanagari" */ - 0, -151, /* 271: "", "Dingbats" */ - 0, -162, /* 273: "", "Enclosed_Alphanumerics" */ - 0, -163, /* 275: "", "Enclosed_CJK_Letters_and_Months" */ - 0, -166, /* 277: "", "Ethiopic" */ - 0, -190, /* 279: "", "General_Punctuation" */ - 0, -191, /* 281: "", "Geometric_Shapes" */ - 0, -193, /* 283: "", "Georgian" */ - 0, -196, /* 285: "", "Gothic" */ - 0, -205, /* 287: "", "Greek_and_Coptic" */ - 0, -204, /* 289: "", "Greek_Extended" */ - 0, -207, /* 291: "", "Gujarati" */ - 0, -209, /* 293: "", "Gurmukhi" */ - 0, -215, /* 295: "", "Halfwidth_and_Fullwidth_Forms" */ - 0, -220, /* 297: "", "Hangul_Compatibility_Jamo" */ - 0, -221, /* 299: "", "Hangul_Jamo" */ - 0, -223, /* 301: "", "Hangul_Syllables" */ - 0, -226, /* 303: "", "Hanunoo" */ - 0, -229, /* 305: "", "Hebrew" */ - 0, -235, /* 307: "", "High_Private_Use_Surrogates" */ - 0, -236, /* 309: "", "High_Surrogates" */ - 0, -238, /* 311: "", "Hiragana" */ - 0, -256, /* 313: "", "Ideographic_Description_Characters" */ - 0, -251, /* 315: "", "IPA_Extensions" */ - 0, -275, /* 317: "", "Kanbun" */ - 0, -276, /* 319: "", "Kangxi_Radicals" */ - 0, -277, /* 321: "", "Kannada" */ - 0, -279, /* 323: "", "Katakana" */ - 0, -281, /* 325: "", "Katakana_Phonetic_Extensions" */ - 0, -283, /* 327: "", "Khmer" */ - 0, -284, /* 329: "", "Khmer_Symbols" */ - 0, -300, /* 331: "", "Lao" */ - 0, -303, /* 333: "", "Latin-1_Supplement" */ - 0, -304, /* 335: "", "Latin_Extended-A" */ - 0, -306, /* 337: "", "Latin_Extended_Additional" */ - 0, -305, /* 339: "", "Latin_Extended-B" */ - 0, -317, /* 341: "", "Letterlike_Symbols" */ - 0, -319, /* 343: "", "Limbu" */ - 0, -325, /* 345: "", "Linear_B_Ideograms" */ - 0, -326, /* 347: "", "Linear_B_Syllabary" */ - 0, -331, /* 349: "", "Low_Surrogates" */ - 0, -339, /* 351: "", "Malayalam" */ - 0, -344, /* 353: "", "Mathematical_Alphanumeric_Symbols" */ - 0, -345, /* 355: "", "Mathematical_Operators" */ - 0, -352, /* 357: "", "Miscellaneous_Mathematical_Symbols-A" */ - 0, -353, /* 359: "", "Miscellaneous_Mathematical_Symbols-B" */ - 0, -354, /* 361: "", "Miscellaneous_Symbols" */ - 0, -355, /* 363: "", "Miscellaneous_Symbols_and_Arrows" */ - 0, -356, /* 365: "", "Miscellaneous_Technical" */ - 0, -362, /* 367: "", "Mongolian" */ - 0, -363, /* 369: "", "Musical_Symbols" */ - 0, -364, /* 371: "", "Myanmar" */ - 0, -395, /* 373: "", "No_Block" */ - 0, -409, /* 375: "", "Number_Forms" */ - 0, -418, /* 377: "", "Ogham" */ - 0, -419, /* 379: "", "Old_Italic" */ - 0, -421, /* 381: "", "Optical_Character_Recognition" */ - 0, -422, /* 383: "", "Oriya" */ - 0, -425, /* 385: "", "Osmanya" */ - 0, -442, /* 387: "", "Phonetic_Extensions" */ - 0, -449, /* 389: "", "Private_Use_Area" */ - 0, -471, /* 391: "", "Runic" */ - 0, -490, /* 393: "", "Shavian" */ - 0, -498, /* 395: "", "Sinhala" */ - 0, -502, /* 397: "", "Small_Form_Variants" */ - 0, -508, /* 399: "", "Spacing_Modifier_Letters" */ - 0, -509, /* 401: "", "Specials" */ - 0, -513, /* 403: "", "Superscripts_and_Subscripts" */ - 0, -514, /* 405: "", "Supplemental_Arrows-A" */ - 0, -515, /* 407: "", "Supplemental_Arrows-B" */ - 0, -516, /* 409: "", "Supplemental_Mathematical_Operators" */ - 0, -517, /* 411: "", "Supplementary_Private_Use_Area-A" */ - 0, -518, /* 413: "", "Supplementary_Private_Use_Area-B" */ - 0, -523, /* 415: "", "Syriac" */ - 0, -526, /* 417: "", "Tagalog" */ - 0, -528, /* 419: "", "Tagbanwa" */ - 0, -529, /* 421: "", "Tags" */ - 0, -531, /* 423: "", "Tai_Le" */ - 0, -532, /* 425: "", "Tai_Xuan_Jing_Symbols" */ - 0, -534, /* 427: "", "Tamil" */ - 0, -539, /* 429: "", "Telugu" */ - 0, -545, /* 431: "", "Thaana" */ - 0, -546, /* 433: "", "Thai" */ - 0, -547, /* 435: "", "Tibetan" */ - 0, -558, /* 437: "", "Ugaritic" */ - 0, -561, /* 439: "", "Unified_Canadian_Aboriginal_Syllabics" */ - 0, -572, /* 441: "", "Variation_Selectors" */ - 0, -573, /* 443: "", "Variation_Selectors_Supplement" */ - 0, -599, /* 445: "", "Yijing_Hexagram_Symbols" */ - 0, -596, /* 447: "", "Yi_Radicals" */ - 0, -597, /* 449: "", "Yi_Syllables" */ - 383, -405, /* 451: "NR", "Not_Reordered" */ - 416, -432, /* 453: "OV", "Overlay" */ - 10, -34, /* 455: "ATBL", "Attached_Below_Left" */ - 9, -33, /* 457: "ATB", "Attached_Below" */ - 8, -32, /* 459: "ATAR", "Attached_Above_Right" */ - 40, -46, /* 461: "BL", "Below_Left" */ - 35, -45, /* 463: "B", "Below" */ - 42, -47, /* 465: "BR", "Below_Right" */ - 288, -310, /* 467: "L", "Left" */ - 460, -466, /* 469: "R", "Right" */ - 4, -12, /* 471: "AL", "Above_Left" */ - 1, -11, /* 473: "A", "Above" */ - 6, -13, /* 475: "AR", "Above_Right" */ - 131, -153, /* 477: "DB", "Double_Below" */ - 130, -152, /* 479: "DA", "Double_Above" */ - 252, -263, /* 481: "IS", "Iota_Subscript" */ - 381, -407, /* 483: "NK", "Nukta" */ - 271, -274, /* 485: "KV", "Kana_Voicing" */ - 569, -575, /* 487: "VR", "Virama" */ - 615, -90, /* 489: "can", "Canonical" */ - 621, -101, /* 491: "enc", "Circle" */ - 618, -112, /* 493: "com", "Compat" */ - 622, -177, /* 495: "fin", "Final" */ - 623, -180, /* 497: "font", "Font" */ - 624, -182, /* 499: "fra", "Fraction" */ - 628, -259, /* 501: "init", "Initial" */ - 630, -264, /* 503: "iso", "Isolated" */ - 636, -349, /* 505: "med", "Medial" */ - 639, -389, /* 507: "nar", "Narrow" */ - 640, -397, /* 509: "nb", "Nobreak" */ - 645, -400, /* 511: "none", "None" */ - 652, -501, /* 513: "sml", "Small" */ - 653, -510, /* 515: "sqr", "Square" */ - 655, -511, /* 517: "sub", "Sub" */ - 657, -512, /* 519: "sup", "Super" */ - 661, -574, /* 521: "vert", "Vertical" */ - 662, -583, /* 523: "wide", "Wide" */ - 1, -22, /* 525: "A", "Ambiguous" */ - 173, -184, /* 527: "F", "Fullwidth" */ - 211, -214, /* 529: "H", "Halfwidth" */ - 387, -389, /* 531: "Na", "Narrow" */ - 366, -391, /* 533: "N", "Neutral" */ - 577, -583, /* 535: "W", "Wide" */ - 347, -507, /* 537: "Mc", "Spacing_Mark" */ - 438, -114, /* 539: "Pc", "Connector_Punctuation" */ - 97, -116, /* 541: "Cc", "Control" */ - 482, -121, /* 543: "Sc", "Currency_Symbol" */ - 439, -136, /* 545: "Pd", "Dash_Punctuation" */ - 390, -139, /* 547: "Nd", "Decimal_Number" */ - 348, -164, /* 549: "Me", "Enclosing_Mark" */ - 440, -102, /* 551: "Pe", "Close_Punctuation" */ - 441, -178, /* 553: "Pf", "Final_Punctuation" */ - 98, -181, /* 555: "Cf", "Format" */ - 103, -559, /* 557: "Cn", "Unassigned" */ - 443, -260, /* 559: "Pi", "Initial_Punctuation" */ - 393, -316, /* 561: "Nl", "Letter_Number" */ - 607, -323, /* 563: "Zl", "Line_Separator" */ - 327, -334, /* 565: "Ll", "Lowercase_Letter" */ - 500, -343, /* 567: "Sm", "Math_Symbol" */ - 328, -359, /* 569: "Lm", "Modifier_Letter" */ - 499, -360, /* 571: "Sk", "Modifier_Symbol" */ - 358, -401, /* 573: "Mn", "Nonspacing_Mark" */ - 329, -427, /* 575: "Lo", "Other_Letter" */ - 394, -429, /* 577: "No", "Other_Number" */ - 444, -430, /* 579: "Po", "Other_Punctuation" */ - 503, -431, /* 581: "So", "Other_Symbol" */ - 608, -437, /* 583: "Zp", "Paragraph_Separator" */ - 104, -448, /* 585: "Co", "Private_Use" */ - 609, -506, /* 587: "Zs", "Space_Separator" */ - 450, -420, /* 589: "Ps", "Open_Punctuation" */ - 120, -519, /* 591: "Cs", "Surrogate" */ - 336, -549, /* 593: "Lt", "Titlecase_Letter" */ - 337, -566, /* 595: "Lu", "Uppercase_Letter" */ - 74, -426, /* 597: "C", "Other" */ - 289, -96, /* 599: "LC", "Cased_Letter" */ - 288, -315, /* 601: "L", "Letter" */ - 338, -341, /* 603: "M", "Mark" */ - 366, -408, /* 605: "N", "Number" */ - 433, -451, /* 607: "P", "Punctuation" */ - 473, -521, /* 609: "S", "Symbol" */ - 602, -489, /* 611: "Z", "Separator" */ - 288, -309, /* 613: "L", "Leading_Jamo" */ - 295, -296, /* 615: "LVT", "LVT_Syllable" */ - 294, -297, /* 617: "LV", "LV_Syllable" */ - 367, -404, /* 619: "NA", "Not_Applicable" */ - 525, -552, /* 621: "T", "Trailing_Jamo" */ - 568, -576, /* 623: "V", "Vowel_Jamo" */ - 0, -16, /* 625: "", "Ain" */ - 0, -17, /* 627: "", "Alaph" */ - 0, -18, /* 629: "", "Alef" */ - 0, -44, /* 631: "", "Beh" */ - 0, -50, /* 633: "", "Beth" */ - 0, -133, /* 635: "", "Dal" */ - 0, -134, /* 637: "", "Dalath_Rish" */ - 0, -156, /* 639: "", "E" */ - 0, -175, /* 641: "", "Fe" */ - 0, -176, /* 643: "", "Feh" */ - 0, -179, /* 645: "", "Final_Semkath" */ - 0, -186, /* 647: "", "Gaf" */ - 0, -187, /* 649: "", "Gamal" */ - 0, -213, /* 651: "", "Hah" */ - 0, -216, /* 653: "", "Hamza_On_Heh_Goal" */ - 0, -227, /* 655: "", "He" */ - 0, -230, /* 657: "", "Heh" */ - 0, -231, /* 659: "", "Heh_Goal" */ - 0, -232, /* 661: "", "Heth" */ - 0, -272, /* 663: "", "Kaf" */ - 0, -278, /* 665: "", "Kaph" */ - 0, -282, /* 667: "", "Khaph" */ - 0, -287, /* 669: "", "Knotted_Heh" */ - 0, -298, /* 671: "", "Lam" */ - 0, -299, /* 673: "", "Lamadh" */ - 0, -350, /* 675: "", "Meem" */ - 0, -351, /* 677: "", "Mim" */ - 0, -403, /* 679: "", "Noon" */ - 0, -396, /* 681: "", "No_Joining_Group" */ - 0, -413, /* 683: "", "Nun" */ - 0, -440, /* 685: "", "Pe" */ - 0, -456, /* 687: "", "Qaf" */ - 0, -457, /* 689: "", "Qaph" */ - 0, -464, /* 691: "", "Reh" */ - 0, -465, /* 693: "", "Reversed_Pe" */ - 0, -480, /* 695: "", "Sad" */ - 0, -481, /* 697: "", "Sadhe" */ - 0, -484, /* 699: "", "Seen" */ - 0, -487, /* 701: "", "Semkath" */ - 0, -492, /* 703: "", "Shin" */ - 0, -520, /* 705: "", "Swash_Kaf" */ - 0, -524, /* 707: "", "Syriac_Waw" */ - 0, -530, /* 709: "", "Tah" */ - 0, -536, /* 711: "", "Taw" */ - 0, -537, /* 713: "", "Teh_Marbuta" */ - 0, -542, /* 715: "", "Teth" */ - 0, -581, /* 717: "", "Waw" */ - 0, -591, /* 719: "", "Yeh" */ - 0, -592, /* 721: "", "Yeh_Barree" */ - 0, -593, /* 723: "", "Yeh_With_Tail" */ - 0, -600, /* 725: "", "Yudh" */ - 0, -601, /* 727: "", "Yudh_He" */ - 0, -605, /* 729: "", "Zain" */ - 0, -606, /* 731: "", "Zhain" */ - 129, -155, /* 733: "D", "Dual_Joining" */ - 74, -267, /* 735: "C", "Join_Causing" */ - 288, -311, /* 737: "L", "Left_Joining" */ - 555, -398, /* 739: "U", "Non_Joining" */ - 460, -467, /* 741: "R", "Right_Joining" */ - 525, -553, /* 743: "T", "Transparent" */ - 4, -20, /* 745: "AL", "Alphabetic" */ - 3, -22, /* 747: "AI", "Ambiguous" */ - 37, -67, /* 749: "BA", "Break_After" */ - 38, -68, /* 751: "BB", "Break_Before" */ - 36, -69, /* 753: "B2", "Break_Both" */ - 479, -70, /* 755: "SY", "Break_Symbols" */ - 87, -93, /* 757: "CR", "Carriage_Return" */ - 85, -102, /* 759: "CL", "Close_Punctuation" */ - 86, -108, /* 761: "CM", "Combining_Mark" */ - 474, -113, /* 763: "SA", "Complex_Context" */ - 75, -115, /* 765: "CB", "Contingent_Break" */ - 160, -170, /* 767: "EX", "Exclamation" */ - 185, -194, /* 769: "GL", "Glue" */ - 212, -240, /* 771: "HY", "Hyphen" */ - 241, -255, /* 773: "ID", "Ideographic" */ - 252, -257, /* 775: "IS", "Infix_Numeric" */ - 250, 261, -262, /* 777: "IN", "Inseparable", "Inseperable" */ - 290, -322, /* 780: "LF", "Line_Feed" */ - 39, -340, /* 782: "BK", "Mandatory_Break" */ - 382, -392, /* 784: "NL", "Next_Line" */ - 384, -402, /* 786: "NS", "Nonstarter" */ - 386, -410, /* 788: "NU", "Numeric" */ - 415, -420, /* 790: "OP", "Open_Punctuation" */ - 435, -446, /* 792: "PO", "Postfix_Numeric" */ - 436, -447, /* 794: "PR", "Prefix_Numeric" */ - 453, -458, /* 796: "QU", "Quotation" */ - 477, -505, /* 798: "SP", "Space" */ - 476, -519, /* 800: "SG", "Surrogate" */ - 589, -563, /* 802: "XX", "Unknown" */ - 578, -584, /* 804: "WJ", "Word_Joiner" */ - 603, -604, /* 806: "ZW", "ZWSpace" */ - 137, -138, /* 808: "De", "Decimal" */ - 147, -150, /* 810: "Di", "Digit" */ - 400, -400, /* 812: "None", "None" */ - 406, -410, /* 814: "Nu", "Numeric" */ - 23, -24, /* 816: "Arab", "Arabic" */ - 30, -29, /* 818: "Armn", "Armenian" */ - 48, -49, /* 820: "Beng", "Bengali" */ - 59, -60, /* 822: "Bopo", "Bopomofo" */ - 64, -65, /* 824: "Brai", "Braille" */ - 71, -72, /* 826: "Buhd", "Buhid" */ - 92, -89, /* 828: "Cans", "Canadian_Aboriginal" */ - 99, -100, /* 830: "Cher", "Cherokee" */ - 610, -109, /* 832: "Zyyy", "Common" */ - 454, -118, /* 834: "Qaac", "Coptic" */ - 119, -123, /* 836: "Cprt", "Cypriot" */ - 128, -125, /* 838: "Cyrl", "Cyrillic" */ - 154, -144, /* 840: "Dsrt", "Deseret" */ - 145, -146, /* 842: "Deva", "Devanagari" */ - 165, -166, /* 844: "Ethi", "Ethiopic" */ - 192, -193, /* 846: "Geor", "Georgian" */ - 195, -196, /* 848: "Goth", "Gothic" */ - 206, -203, /* 850: "Grek", "Greek" */ - 208, -207, /* 852: "Gujr", "Gujarati" */ - 210, -209, /* 854: "Guru", "Gurmukhi" */ - 224, -217, /* 856: "Hani", "Han" */ - 218, -219, /* 858: "Hang", "Hangul" */ - 225, -226, /* 860: "Hano", "Hanunoo" */ - 228, -229, /* 862: "Hebr", "Hebrew" */ - 237, -238, /* 864: "Hira", "Hiragana" */ - 455, -258, /* 866: "Qaai", "Inherited" */ - 286, -277, /* 868: "Knda", "Kannada" */ - 273, -279, /* 870: "Kana", "Katakana" */ - 239, -280, /* 872: "Hrkt", "Katakana_Or_Hiragana" */ - 285, -283, /* 874: "Khmr", "Khmer" */ - 301, -300, /* 876: "Laoo", "Lao" */ - 307, -302, /* 878: "Latn", "Latin" */ - 318, -319, /* 880: "Limb", "Limbu" */ - 320, -324, /* 882: "Linb", "Linear_B" */ - 357, -339, /* 884: "Mlym", "Malayalam" */ - 361, -362, /* 886: "Mong", "Mongolian" */ - 365, -364, /* 888: "Mymr", "Myanmar" */ - 417, -418, /* 890: "Ogam", "Ogham" */ - 265, -419, /* 892: "Ital", "Old_Italic" */ - 423, -422, /* 894: "Orya", "Oriya" */ - 424, -425, /* 896: "Osma", "Osmanya" */ - 472, -471, /* 898: "Runr", "Runic" */ - 491, -490, /* 900: "Shaw", "Shavian" */ - 497, -498, /* 902: "Sinh", "Sinhala" */ - 522, -523, /* 904: "Syrc", "Syriac" */ - 543, -526, /* 906: "Tglg", "Tagalog" */ - 527, -528, /* 908: "Tagb", "Tagbanwa" */ - 533, -531, /* 910: "Tale", "Tai_Le" */ - 535, -534, /* 912: "Taml", "Tamil" */ - 538, -539, /* 914: "Telu", "Telugu" */ - 544, -545, /* 916: "Thaa", "Thaana" */ - 546, -546, /* 918: "Thai", "Thai" */ - 548, -547, /* 920: "Tibt", "Tibetan" */ - 557, -558, /* 922: "Ugar", "Ugaritic" */ - 598, -595, /* 924: "Yiii", "Yi" */ + 101, -135, /* 0: "CN", "Control" */ + 102, -102, /* 2: "CR", "CR" */ + 184, -201, /* 4: "EX", "Extend" */ + 341, -341, /* 6: "L", "L" */ + 344, -344, /* 8: "LF", "LF" */ + 349, -349, /* 10: "LV", "LV" */ + 350, -350, /* 12: "LVT", "LVT" */ + 701, -502, /* 14: "XX", "Other" */ + 627, -627, /* 16: "T", "T" */ + 675, -675, /* 18: "V", "V" */ + 399, -411, /* 20: "M", "Maybe" */ + 435, -467, /* 22: "N", "No" */ + 704, -708, /* 24: "Y", "Yes" */ + 9, -13, /* 26: "AT", "ATerm" */ + 99, -119, /* 28: "CL", "Close" */ + 205, -213, /* 30: "FO", "Format" */ + 345, -393, /* 32: "LO", "Lower" */ + 456, -483, /* 34: "NU", "Numeric" */ + 343, -487, /* 36: "LE", "OLetter" */ + 566, -583, /* 38: "SE", "Sep" */ + 568, -600, /* 40: "SP", "Sp" */ + 569, -570, /* 42: "ST", "STerm" */ + 663, -671, /* 44: "UP", "Upper" */ + 343, -5, /* 46: "LE", "ALetter" */ + 184, -202, /* 48: "EX", "ExtendNumLet" */ + 320, -330, /* 50: "KA", "Katakana" */ + 400, -417, /* 52: "ML", "MidLetter" */ + 401, -418, /* 54: "MN", "MidNum" */ + 22, -23, /* 56: "Alpha", "Alphabetic" */ + 2, -8, /* 58: "AHex", "ASCII_Hex_Digit" */ + 60, -62, /* 60: "Bidi_C", "Bidi_Control" */ + 63, -64, /* 62: "Bidi_M", "Bidi_Mirrored" */ + 581, -110, /* 64: "Sensitive", "Case_Sensitive" */ + 159, -159, /* 66: "Dash", "Dash" */ + 156, -165, /* 68: "DI", "Default_Ignorable_Code_Point" */ + 166, -167, /* 70: "Dep", "Deprecated" */ + 172, -173, /* 72: "Dia", "Diacritic" */ + 200, -203, /* 74: "Ext", "Extender" */ + 130, -215, /* 76: "Comp_Ex", "Full_Composition_Exclusion" */ + 234, -237, /* 78: "Gr_Base", "Grapheme_Base" */ + 235, -239, /* 80: "Gr_Ext", "Grapheme_Extend" */ + 236, -240, /* 82: "Gr_Link", "Grapheme_Link" */ + 275, -276, /* 84: "Hex", "Hex_Digit" */ + 284, -284, /* 86: "Hyphen", "Hyphen" */ + 298, -299, /* 88: "Ideo", "Ideographic" */ + 288, -290, /* 90: "IDSB", "IDS_Binary_Operator" */ + 289, -291, /* 92: "IDST", "IDS_Trinary_Operator" */ + 286, -292, /* 94: "IDC", "ID_Continue" */ + 287, -293, /* 96: "IDS", "ID_Start" */ + 315, -317, /* 98: "Join_C", "Join_Control" */ + 346, -391, /* 100: "LOE", "Logical_Order_Exception" */ + 393, -394, /* 102: "Lower", "Lowercase" */ + 406, -406, /* 104: "Math", "Math" */ + 762, -438, /* 106: "nfcinert", "NFC_Inert" */ + 763, -441, /* 108: "nfdinert", "NFD_Inert" */ + 764, -444, /* 110: "nfkcinert", "NFKC_Inert" */ + 765, -447, /* 112: "nfkdinert", "NFKD_Inert" */ + 437, -472, /* 114: "NChar", "Noncharacter_Code_Point" */ + 514, -516, /* 116: "Pat_Syn", "Pattern_Syntax" */ + 515, -517, /* 118: "Pat_WS", "Pattern_White_Space" */ + 0, -728, /* 120: "", "alnum" */ + 0, -730, /* 122: "", "blank" */ + 0, -747, /* 124: "", "graph" */ + 0, -769, /* 126: "", "print" */ + 0, -787, /* 128: "", "xdigit" */ + 540, -547, /* 130: "QMark", "Quotation_Mark" */ + 551, -551, /* 132: "Radical", "Radical" */ + 772, -579, /* 134: "segstart", "Segment_Starter" */ + 565, -599, /* 136: "SD", "Soft_Dotted" */ + 570, -570, /* 138: "STerm", "STerm" */ + 644, -645, /* 140: "Term", "Terminal_Punctuation" */ + 662, -669, /* 142: "UIdeo", "Unified_Ideograph" */ + 671, -672, /* 144: "Upper", "Uppercase" */ + 677, -679, /* 146: "VS", "Variation_Selector" */ + 691, 693, -776, /* 148: "WSpace", "White_Space", "space" */ + 697, -699, /* 151: "XIDC", "XID_Continue" */ + 698, -700, /* 153: "XIDS", "XID_Start" */ + 768, -485, /* 155: "nv", "Numeric_Value" */ + 729, -61, /* 157: "bc", "Bidi_Class" */ + 731, -67, /* 159: "blk", "Block" */ + 734, -106, /* 161: "ccc", "Canonical_Combining_Class" */ + 739, -164, /* 163: "dt", "Decomposition_Type" */ + 740, -185, /* 165: "ea", "East_Asian_Width" */ + 745, -221, /* 167: "gc", "General_Category" */ + 217, -238, /* 169: "GCB", "Grapheme_Cluster_Break" */ + 748, -262, /* 171: "hst", "Hangul_Syllable_Type" */ + 752, -318, /* 173: "jg", "Joining_Group" */ + 753, -319, /* 175: "jt", "Joining_Type" */ + 756, -367, /* 177: "lccc", "Lead_Canonical_Combining_Class" */ + 754, -382, /* 179: "lb", "Line_Break" */ + 439, -440, /* 181: "NFC_QC", "NFC_Quick_Check" */ + 442, -443, /* 183: "NFD_QC", "NFD_Quick_Check" */ + 445, -446, /* 185: "NFKC_QC", "NFKC_Quick_Check" */ + 448, -449, /* 187: "NFKD_QC", "NFKD_Quick_Check" */ + 767, -484, /* 189: "nt", "Numeric_Type" */ + 771, -576, /* 191: "sc", "Script" */ + 564, -582, /* 193: "SB", "Sentence_Break" */ + 783, -657, /* 195: "tccc", "Trail_Canonical_Combining_Class" */ + 688, -695, /* 197: "WB", "Word_Break" */ + 746, -222, /* 199: "gcm", "General_Category_Mask" */ + 727, -18, /* 201: "age", "Age" */ + 732, -65, /* 203: "bmg", "Bidi_Mirroring_Glyph" */ + 735, -109, /* 205: "cf", "Case_Folding" */ + 750, -297, /* 207: "isc", "ISO_Comment" */ + 755, -396, /* 209: "lc", "Lowercase_Mapping" */ + 758, -458, /* 211: "na", "Name" */ + 773, -588, /* 213: "sfc", "Simple_Case_Folding" */ + 774, -589, /* 215: "slc", "Simple_Lowercase_Mapping" */ + 778, -590, /* 217: "stc", "Simple_Titlecase_Mapping" */ + 780, -591, /* 219: "suc", "Simple_Uppercase_Mapping" */ + 782, -656, /* 221: "tc", "Titlecase_Mapping" */ + 759, -667, /* 223: "na1", "Unicode_1_Name" */ + 784, -674, /* 225: "uc", "Uppercase_Mapping" */ + 6, -31, /* 227: "AN", "Arabic_Number" */ + 41, -513, /* 229: "B", "Paragraph_Separator" */ + 47, -72, /* 231: "BN", "Boundary_Neutral" */ + 103, -129, /* 233: "CS", "Common_Separator" */ + 455, -474, /* 235: "NSM", "Nonspacing_Mark" */ + 181, -196, /* 237: "EN", "European_Number" */ + 182, -197, /* 239: "ES", "European_Separator" */ + 183, -198, /* 241: "ET", "European_Terminator" */ + 341, -371, /* 243: "L", "Left_To_Right" */ + 347, -372, /* 245: "LRE", "Left_To_Right_Embedding" */ + 348, -373, /* 247: "LRO", "Left_To_Right_Override" */ + 488, -504, /* 249: "ON", "Other_Neutral" */ + 510, -533, /* 251: "PDF", "Pop_Directional_Format" */ + 548, -556, /* 253: "R", "Right_To_Left" */ + 4, -30, /* 255: "AL", "Arabic_Letter" */ + 549, -557, /* 257: "RLE", "Right_To_Left_Embedding" */ + 550, -558, /* 259: "RLO", "Right_To_Left_Override" */ + 562, -578, /* 261: "S", "Segment_Separator" */ + 690, -693, /* 263: "WS", "White_Space" */ + 204, -206, /* 265: "F", "False" */ + 627, -660, /* 267: "T", "True" */ + 0, -17, /* 269: "", "Aegean_Numbers" */ + 0, -24, /* 271: "", "Alphabetic_Presentation_Forms" */ + 0, -26, /* 273: "", "Ancient_Greek_Musical_Notation" */ + 0, -27, /* 275: "", "Ancient_Greek_Numbers" */ + 0, -29, /* 277: "", "Arabic" */ + 0, -32, /* 279: "", "Arabic_Presentation_Forms-A" */ + 0, -33, /* 281: "", "Arabic_Presentation_Forms-B" */ + 0, -34, /* 283: "", "Arabic_Supplement" */ + 0, -35, /* 285: "", "Armenian" */ + 0, -37, /* 287: "", "Arrows" */ + 0, -50, /* 289: "", "Balinese" */ + 0, -51, /* 291: "", "Basic_Latin" */ + 0, -58, /* 293: "", "Bengali" */ + 0, -68, /* 295: "", "Block_Elements" */ + 0, -70, /* 297: "", "Bopomofo" */ + 0, -71, /* 299: "", "Bopomofo_Extended" */ + 0, -73, /* 301: "", "Box_Drawing" */ + 0, -77, /* 303: "", "Braille_Patterns" */ + 0, -83, /* 305: "", "Buginese" */ + 0, -85, /* 307: "", "Buhid" */ + 0, -86, /* 309: "", "Byzantine_Musical_Symbols" */ + 0, -116, /* 311: "", "Cherokee" */ + 0, -89, /* 313: "", "CJK_Compatibility" */ + 0, -90, /* 315: "", "CJK_Compatibility_Forms" */ + 0, -91, /* 317: "", "CJK_Compatibility_Ideographs" */ + 0, -92, /* 319: "", "CJK_Compatibility_Ideographs_Supplement" */ + 0, -93, /* 321: "", "CJK_Radicals_Supplement" */ + 0, -94, /* 323: "", "CJK_Strokes" */ + 0, -95, /* 325: "", "CJK_Symbols_and_Punctuation" */ + 0, -96, /* 327: "", "CJK_Unified_Ideographs" */ + 0, -97, /* 329: "", "CJK_Unified_Ideographs_Extension_A" */ + 0, -98, /* 331: "", "CJK_Unified_Ideographs_Extension_B" */ + 0, -123, /* 333: "", "Combining_Diacritical_Marks" */ + 0, -124, /* 335: "", "Combining_Diacritical_Marks_Supplement" */ + 0, -126, /* 337: "", "Combining_Half_Marks" */ + 0, -125, /* 339: "", "Combining_Diacritical_Marks_for_Symbols" */ + 0, -136, /* 341: "", "Control_Pictures" */ + 0, -138, /* 343: "", "Coptic" */ + 0, -139, /* 345: "", "Counting_Rod_Numerals" */ + 0, -142, /* 347: "", "Cuneiform" */ + 0, -143, /* 349: "", "Cuneiform_Numbers_and_Punctuation" */ + 0, -145, /* 351: "", "Currency_Symbols" */ + 0, -147, /* 353: "", "Cypriot_Syllabary" */ + 0, -148, /* 355: "", "Cyrillic" */ + 0, 149, -150, /* 357: "", "Cyrillic_Supplement", "Cyrillic_Supplementary" */ + 0, -168, /* 360: "", "Deseret" */ + 0, -170, /* 362: "", "Devanagari" */ + 0, -175, /* 364: "", "Dingbats" */ + 0, -189, /* 366: "", "Enclosed_Alphanumerics" */ + 0, -190, /* 368: "", "Enclosed_CJK_Letters_and_Months" */ + 0, -193, /* 370: "", "Ethiopic" */ + 0, -194, /* 372: "", "Ethiopic_Extended" */ + 0, -195, /* 374: "", "Ethiopic_Supplement" */ + 0, -223, /* 376: "", "General_Punctuation" */ + 0, -225, /* 378: "", "Geometric_Shapes" */ + 0, -227, /* 380: "", "Georgian" */ + 0, -228, /* 382: "", "Georgian_Supplement" */ + 0, -230, /* 384: "", "Glagolitic" */ + 0, -233, /* 386: "", "Gothic" */ + 0, -243, /* 388: "", "Greek_and_Coptic" */ + 0, -242, /* 390: "", "Greek_Extended" */ + 0, -245, /* 392: "", "Gujarati" */ + 0, -247, /* 394: "", "Gurmukhi" */ + 0, -255, /* 396: "", "Halfwidth_and_Fullwidth_Forms" */ + 0, -260, /* 398: "", "Hangul_Compatibility_Jamo" */ + 0, -261, /* 400: "", "Hangul_Jamo" */ + 0, -263, /* 402: "", "Hangul_Syllables" */ + 0, -268, /* 404: "", "Hanunoo" */ + 0, -271, /* 406: "", "Hebrew" */ + 0, -277, /* 408: "", "High_Private_Use_Surrogates" */ + 0, -278, /* 410: "", "High_Surrogates" */ + 0, -280, /* 412: "", "Hiragana" */ + 0, -300, /* 414: "", "Ideographic_Description_Characters" */ + 0, -295, /* 416: "", "IPA_Extensions" */ + 0, -326, /* 418: "", "Kanbun" */ + 0, -327, /* 420: "", "Kangxi_Radicals" */ + 0, -328, /* 422: "", "Kannada" */ + 0, -330, /* 424: "", "Katakana" */ + 0, -332, /* 426: "", "Katakana_Phonetic_Extensions" */ + 0, -335, /* 428: "", "Kharoshthi" */ + 0, -336, /* 430: "", "Khmer" */ + 0, -337, /* 432: "", "Khmer_Symbols" */ + 0, -355, /* 434: "", "Lao" */ + 0, -360, /* 436: "", "Latin-1_Supplement" */ + 0, -361, /* 438: "", "Latin_Extended-A" */ + 0, -365, /* 440: "", "Latin_Extended_Additional" */ + 0, -362, /* 442: "", "Latin_Extended-B" */ + 0, -363, /* 444: "", "Latin_Extended-C" */ + 0, -364, /* 446: "", "Latin_Extended-D" */ + 0, -377, /* 448: "", "Letterlike_Symbols" */ + 0, -379, /* 450: "", "Limbu" */ + 0, -386, /* 452: "", "Linear_B_Ideograms" */ + 0, -387, /* 454: "", "Linear_B_Syllabary" */ + 0, -392, /* 456: "", "Low_Surrogates" */ + 0, -402, /* 458: "", "Malayalam" */ + 0, -408, /* 460: "", "Mathematical_Alphanumeric_Symbols" */ + 0, -409, /* 462: "", "Mathematical_Operators" */ + 0, -420, /* 464: "", "Miscellaneous_Mathematical_Symbols-A" */ + 0, -421, /* 466: "", "Miscellaneous_Mathematical_Symbols-B" */ + 0, -422, /* 468: "", "Miscellaneous_Symbols" */ + 0, -423, /* 470: "", "Miscellaneous_Symbols_and_Arrows" */ + 0, -424, /* 472: "", "Miscellaneous_Technical" */ + 0, -429, /* 474: "", "Modifier_Tone_Letters" */ + 0, -431, /* 476: "", "Mongolian" */ + 0, -432, /* 478: "", "Musical_Symbols" */ + 0, -433, /* 480: "", "Myanmar" */ + 0, -462, /* 482: "", "New_Tai_Lue" */ + 0, -451, /* 484: "", "NKo" */ + 0, -468, /* 486: "", "No_Block" */ + 0, -482, /* 488: "", "Number_Forms" */ + 0, -492, /* 490: "", "Ogham" */ + 0, -493, /* 492: "", "Old_Italic" */ + 0, -494, /* 494: "", "Old_Persian" */ + 0, -496, /* 496: "", "Optical_Character_Recognition" */ + 0, -497, /* 498: "", "Oriya" */ + 0, -501, /* 500: "", "Osmanya" */ + 0, -524, /* 502: "", "Phags-pa" */ + 0, -527, /* 504: "", "Phoenician" */ + 0, -528, /* 506: "", "Phonetic_Extensions" */ + 0, -529, /* 508: "", "Phonetic_Extensions_Supplement" */ + 0, -537, /* 510: "", "Private_Use_Area" */ + 0, -560, /* 512: "", "Runic" */ + 0, -585, /* 514: "", "Shavian" */ + 0, -593, /* 516: "", "Sinhala" */ + 0, -597, /* 518: "", "Small_Form_Variants" */ + 0, -604, /* 520: "", "Spacing_Modifier_Letters" */ + 0, -605, /* 522: "", "Specials" */ + 0, -609, /* 524: "", "Superscripts_and_Subscripts" */ + 0, -610, /* 526: "", "Supplemental_Arrows-A" */ + 0, -611, /* 528: "", "Supplemental_Arrows-B" */ + 0, -612, /* 530: "", "Supplemental_Mathematical_Operators" */ + 0, -613, /* 532: "", "Supplemental_Punctuation" */ + 0, -614, /* 534: "", "Supplementary_Private_Use_Area-A" */ + 0, -615, /* 536: "", "Supplementary_Private_Use_Area-B" */ + 0, -619, /* 538: "", "Syloti_Nagri" */ + 0, -623, /* 540: "", "Syriac" */ + 0, -628, /* 542: "", "Tagalog" */ + 0, -630, /* 544: "", "Tagbanwa" */ + 0, -631, /* 546: "", "Tags" */ + 0, -633, /* 548: "", "Tai_Le" */ + 0, -634, /* 550: "", "Tai_Xuan_Jing_Symbols" */ + 0, -637, /* 552: "", "Tamil" */ + 0, -642, /* 554: "", "Telugu" */ + 0, -650, /* 556: "", "Thaana" */ + 0, -651, /* 558: "", "Thai" */ + 0, -652, /* 560: "", "Tibetan" */ + 0, -654, /* 562: "", "Tifinagh" */ + 0, -665, /* 564: "", "Ugaritic" */ + 0, -668, /* 566: "", "Unified_Canadian_Aboriginal_Syllabics" */ + 0, -680, /* 568: "", "Variation_Selectors" */ + 0, -681, /* 570: "", "Variation_Selectors_Supplement" */ + 0, -683, /* 572: "", "Vertical_Forms" */ + 0, -713, /* 574: "", "Yijing_Hexagram_Symbols" */ + 0, -710, /* 576: "", "Yi_Radicals" */ + 0, -711, /* 578: "", "Yi_Syllables" */ + 453, -478, /* 580: "NR", "Not_Reordered" */ + 490, -508, /* 582: "OV", "Overlay" */ + 12, -40, /* 584: "ATBL", "Attached_Below_Left" */ + 11, -39, /* 586: "ATB", "Attached_Below" */ + 10, -38, /* 588: "ATAR", "Attached_Above_Right" */ + 46, -55, /* 590: "BL", "Below_Left" */ + 41, -54, /* 592: "B", "Below" */ + 48, -56, /* 594: "BR", "Below_Right" */ + 341, -369, /* 596: "L", "Left" */ + 548, -554, /* 598: "R", "Right" */ + 4, -15, /* 600: "AL", "Above_Left" */ + 1, -14, /* 602: "A", "Above" */ + 7, -16, /* 604: "AR", "Above_Right" */ + 155, -177, /* 606: "DB", "Double_Below" */ + 154, -176, /* 608: "DA", "Double_Above" */ + 296, -308, /* 610: "IS", "Iota_Subscript" */ + 450, -480, /* 612: "NK", "Nukta" */ + 321, -325, /* 614: "KV", "Kana_Voicing" */ + 676, -684, /* 616: "VR", "Virama" */ + 733, -105, /* 618: "can", "Canonical" */ + 741, -117, /* 620: "enc", "Circle" */ + 737, -131, /* 622: "com", "Compat" */ + 742, -209, /* 624: "fin", "Final" */ + 743, -212, /* 626: "font", "Font" */ + 744, -214, /* 628: "fra", "Fraction" */ + 749, -304, /* 630: "init", "Initial" */ + 751, -309, /* 632: "iso", "Isolated" */ + 757, -414, /* 634: "med", "Medial" */ + 760, -459, /* 636: "nar", "Narrow" */ + 761, -470, /* 638: "nb", "Nobreak" */ + 766, -473, /* 640: "none", "None" */ + 775, -596, /* 642: "sml", "Small" */ + 777, -606, /* 644: "sqr", "Square" */ + 779, -607, /* 646: "sub", "Sub" */ + 781, -608, /* 648: "sup", "Super" */ + 785, -682, /* 650: "vert", "Vertical" */ + 786, -694, /* 652: "wide", "Wide" */ + 1, -25, /* 654: "A", "Ambiguous" */ + 204, -216, /* 656: "F", "Fullwidth" */ + 249, -254, /* 658: "H", "Halfwidth" */ + 457, -459, /* 660: "Na", "Narrow" */ + 435, -461, /* 662: "N", "Neutral" */ + 687, -694, /* 664: "W", "Wide" */ + 412, -603, /* 666: "Mc", "Spacing_Mark" */ + 518, -133, /* 668: "Pc", "Connector_Punctuation" */ + 112, 135, -736, /* 670: "Cc", "Control", "cntrl" */ + 575, -144, /* 673: "Sc", "Currency_Symbol" */ + 519, -160, /* 675: "Pd", "Dash_Punctuation" */ + 460, 163, -738, /* 677: "Nd", "Decimal_Number", "digit" */ + 413, -191, /* 680: "Me", "Enclosing_Mark" */ + 520, -120, /* 682: "Pe", "Close_Punctuation" */ + 522, -210, /* 684: "Pf", "Final_Punctuation" */ + 113, -213, /* 686: "Cf", "Format" */ + 121, -666, /* 688: "Cn", "Unassigned" */ + 530, -305, /* 690: "Pi", "Initial_Punctuation" */ + 466, -376, /* 692: "Nl", "Letter_Number" */ + 721, -384, /* 694: "Zl", "Line_Separator" */ + 388, -395, /* 696: "Ll", "Lowercase_Letter" */ + 595, -407, /* 698: "Sm", "Math_Symbol" */ + 389, -427, /* 700: "Lm", "Modifier_Letter" */ + 594, -428, /* 702: "Sk", "Modifier_Symbol" */ + 426, -474, /* 704: "Mn", "Nonspacing_Mark" */ + 390, -503, /* 706: "Lo", "Other_Letter" */ + 467, -505, /* 708: "No", "Other_Number" */ + 532, -506, /* 710: "Po", "Other_Punctuation" */ + 598, -507, /* 712: "So", "Other_Symbol" */ + 722, -513, /* 714: "Zp", "Paragraph_Separator" */ + 122, -536, /* 716: "Co", "Private_Use" */ + 723, -602, /* 718: "Zs", "Space_Separator" */ + 538, -495, /* 720: "Ps", "Open_Punctuation" */ + 141, -616, /* 722: "Cs", "Surrogate" */ + 397, -655, /* 724: "Lt", "Titlecase_Letter" */ + 398, -673, /* 726: "Lu", "Uppercase_Letter" */ + 87, -502, /* 728: "C", "Other" */ + 342, -111, /* 730: "LC", "Cased_Letter" */ + 341, -375, /* 732: "L", "Letter" */ + 399, -405, /* 734: "M", "Mark" */ + 435, -481, /* 736: "N", "Number" */ + 509, 539, -770, /* 738: "P", "Punctuation", "punct" */ + 562, -620, /* 741: "S", "Symbol" */ + 716, -584, /* 743: "Z", "Separator" */ + 341, -368, /* 745: "L", "Leading_Jamo" */ + 350, -351, /* 747: "LVT", "LVT_Syllable" */ + 349, -352, /* 749: "LV", "LV_Syllable" */ + 436, -477, /* 751: "NA", "Not_Applicable" */ + 627, -658, /* 753: "T", "Trailing_Jamo" */ + 675, -686, /* 755: "V", "Vowel_Jamo" */ + 0, -19, /* 757: "", "Ain" */ + 0, -20, /* 759: "", "Alaph" */ + 0, -21, /* 761: "", "Alef" */ + 0, -53, /* 763: "", "Beh" */ + 0, -59, /* 765: "", "Beth" */ + 0, -157, /* 767: "", "Dal" */ + 0, -158, /* 769: "", "Dalath_Rish" */ + 0, -180, /* 771: "", "E" */ + 0, -207, /* 773: "", "Fe" */ + 0, -208, /* 775: "", "Feh" */ + 0, -211, /* 777: "", "Final_Semkath" */ + 0, -219, /* 779: "", "Gaf" */ + 0, -220, /* 781: "", "Gamal" */ + 0, -253, /* 783: "", "Hah" */ + 0, -256, /* 785: "", "Hamza_On_Heh_Goal" */ + 0, -269, /* 787: "", "He" */ + 0, -272, /* 789: "", "Heh" */ + 0, -273, /* 791: "", "Heh_Goal" */ + 0, -274, /* 793: "", "Heth" */ + 0, -322, /* 795: "", "Kaf" */ + 0, -329, /* 797: "", "Kaph" */ + 0, -333, /* 799: "", "Khaph" */ + 0, -340, /* 801: "", "Knotted_Heh" */ + 0, -353, /* 803: "", "Lam" */ + 0, -354, /* 805: "", "Lamadh" */ + 0, -415, /* 807: "", "Meem" */ + 0, -419, /* 809: "", "Mim" */ + 0, -476, /* 811: "", "Noon" */ + 0, -469, /* 813: "", "No_Joining_Group" */ + 0, -486, /* 815: "", "Nun" */ + 0, -520, /* 817: "", "Pe" */ + 0, -544, /* 819: "", "Qaf" */ + 0, -545, /* 821: "", "Qaph" */ + 0, -552, /* 823: "", "Reh" */ + 0, -553, /* 825: "", "Reversed_Pe" */ + 0, -572, /* 827: "", "Sad" */ + 0, -573, /* 829: "", "Sadhe" */ + 0, -577, /* 831: "", "Seen" */ + 0, -580, /* 833: "", "Semkath" */ + 0, -587, /* 835: "", "Shin" */ + 0, -617, /* 837: "", "Swash_Kaf" */ + 0, -624, /* 839: "", "Syriac_Waw" */ + 0, -632, /* 841: "", "Tah" */ + 0, -639, /* 843: "", "Taw" */ + 0, -640, /* 845: "", "Teh_Marbuta" */ + 0, -646, /* 847: "", "Teth" */ + 0, -692, /* 849: "", "Waw" */ + 0, -705, /* 851: "", "Yeh" */ + 0, -706, /* 853: "", "Yeh_Barree" */ + 0, -707, /* 855: "", "Yeh_With_Tail" */ + 0, -714, /* 857: "", "Yudh" */ + 0, -715, /* 859: "", "Yudh_He" */ + 0, -719, /* 861: "", "Zain" */ + 0, -720, /* 863: "", "Zhain" */ + 153, -179, /* 865: "D", "Dual_Joining" */ + 87, -316, /* 867: "C", "Join_Causing" */ + 341, -370, /* 869: "L", "Left_Joining" */ + 661, -471, /* 871: "U", "Non_Joining" */ + 548, -555, /* 873: "R", "Right_Joining" */ + 627, -659, /* 875: "T", "Transparent" */ + 4, -23, /* 877: "AL", "Alphabetic" */ + 3, -25, /* 879: "AI", "Ambiguous" */ + 43, -78, /* 881: "BA", "Break_After" */ + 44, -79, /* 883: "BB", "Break_Before" */ + 42, -80, /* 885: "B2", "Break_Both" */ + 571, -81, /* 887: "SY", "Break_Symbols" */ + 102, -108, /* 889: "CR", "Carriage_Return" */ + 99, -120, /* 891: "CL", "Close_Punctuation" */ + 100, -127, /* 893: "CM", "Combining_Mark" */ + 563, -132, /* 895: "SA", "Complex_Context" */ + 88, -134, /* 897: "CB", "Contingent_Break" */ + 184, -199, /* 899: "EX", "Exclamation" */ + 218, -231, /* 901: "GL", "Glue" */ + 250, -250, /* 903: "H2", "H2" */ + 251, -251, /* 905: "H3", "H3" */ + 252, -284, /* 907: "HY", "Hyphen" */ + 285, -299, /* 909: "ID", "Ideographic" */ + 296, -302, /* 911: "IS", "Infix_Numeric" */ + 294, 306, -307, /* 913: "IN", "Inseparable", "Inseperable" */ + 311, -311, /* 916: "JL", "JL" */ + 312, -312, /* 918: "JT", "JT" */ + 313, -313, /* 920: "JV", "JV" */ + 344, -383, /* 922: "LF", "Line_Feed" */ + 45, -404, /* 924: "BK", "Mandatory_Break" */ + 452, -463, /* 926: "NL", "Next_Line" */ + 454, -475, /* 928: "NS", "Nonstarter" */ + 489, -495, /* 930: "OP", "Open_Punctuation" */ + 511, -534, /* 932: "PO", "Postfix_Numeric" */ + 512, -535, /* 934: "PR", "Prefix_Numeric" */ + 541, -546, /* 936: "QU", "Quotation" */ + 568, -601, /* 938: "SP", "Space" */ + 567, -616, /* 940: "SG", "Surrogate" */ + 701, -670, /* 942: "XX", "Unknown" */ + 689, -696, /* 944: "WJ", "Word_Joiner" */ + 717, -718, /* 946: "ZW", "ZWSpace" */ + 161, -162, /* 948: "De", "Decimal" */ + 171, -174, /* 950: "Di", "Digit" */ + 473, -473, /* 952: "None", "None" */ + 479, -483, /* 954: "Nu", "Numeric" */ + 28, -29, /* 956: "Arab", "Arabic" */ + 36, -35, /* 958: "Armn", "Armenian" */ + 49, -50, /* 960: "Bali", "Balinese" */ + 52, -52, /* 962: "Batk", "Batk" */ + 57, -58, /* 964: "Beng", "Bengali" */ + 66, -66, /* 966: "Blis", "Blis" */ + 69, -70, /* 968: "Bopo", "Bopomofo" */ + 74, -74, /* 970: "Brah", "Brah" */ + 75, -76, /* 972: "Brai", "Braille" */ + 82, -83, /* 974: "Bugi", "Buginese" */ + 84, -85, /* 976: "Buhd", "Buhid" */ + 107, -104, /* 978: "Cans", "Canadian_Aboriginal" */ + 114, -114, /* 980: "Cham", "Cham" */ + 115, -116, /* 982: "Cher", "Cherokee" */ + 118, -118, /* 984: "Cirt", "Cirt" */ + 725, -128, /* 986: "Zyyy", "Common" */ + 137, 138, -542, /* 988: "Copt", "Coptic", "Qaac" */ + 703, -142, /* 991: "Xsux", "Cuneiform" */ + 140, -146, /* 993: "Cprt", "Cypriot" */ + 151, -148, /* 995: "Cyrl", "Cyrillic" */ + 186, -186, /* 997: "Egyd", "Egyd" */ + 178, -168, /* 999: "Dsrt", "Deseret" */ + 169, -170, /* 1001: "Deva", "Devanagari" */ + 626, -626, /* 1003: "Syrn", "Syrn" */ + 188, -188, /* 1005: "Egyp", "Egyp" */ + 622, -622, /* 1007: "Syre", "Syre" */ + 192, -193, /* 1009: "Ethi", "Ethiopic" */ + 226, -227, /* 1011: "Geor", "Georgian" */ + 229, -230, /* 1013: "Glag", "Glagolitic" */ + 232, -233, /* 1015: "Goth", "Gothic" */ + 244, -241, /* 1017: "Grek", "Greek" */ + 246, -245, /* 1019: "Gujr", "Gujarati" */ + 248, -247, /* 1021: "Guru", "Gurmukhi" */ + 264, -257, /* 1023: "Hani", "Han" */ + 258, -259, /* 1025: "Hang", "Hangul" */ + 265, -268, /* 1027: "Hano", "Hanunoo" */ + 301, -301, /* 1029: "Inds", "Inds" */ + 270, -271, /* 1031: "Hebr", "Hebrew" */ + 187, -187, /* 1033: "Egyh", "Egyh" */ + 279, -280, /* 1035: "Hira", "Hiragana" */ + 543, -303, /* 1037: "Qaai", "Inherited" */ + 314, -314, /* 1039: "Java", "Java" */ + 339, -328, /* 1041: "Knda", "Kannada" */ + 324, -330, /* 1043: "Kana", "Katakana" */ + 282, -331, /* 1045: "Hrkt", "Katakana_Or_Hiragana" */ + 323, -323, /* 1047: "Kali", "Kali" */ + 334, -335, /* 1049: "Khar", "Kharoshthi" */ + 338, -336, /* 1051: "Khmr", "Khmer" */ + 224, -224, /* 1053: "Geok", "Geok" */ + 356, -355, /* 1055: "Laoo", "Lao" */ + 366, -359, /* 1057: "Latn", "Latin" */ + 357, -357, /* 1059: "Latf", "Latf" */ + 358, -358, /* 1061: "Latg", "Latg" */ + 374, -374, /* 1063: "Lepc", "Lepc" */ + 378, -379, /* 1065: "Limb", "Limbu" */ + 380, -380, /* 1067: "Lina", "Lina" */ + 381, -385, /* 1069: "Linb", "Linear_B" */ + 425, -402, /* 1071: "Mlym", "Malayalam" */ + 403, -403, /* 1073: "Mand", "Mand" */ + 410, -410, /* 1075: "Maya", "Maya" */ + 416, -416, /* 1077: "Mero", "Mero" */ + 430, -431, /* 1079: "Mong", "Mongolian" */ + 434, -433, /* 1081: "Mymr", "Myanmar" */ + 636, -462, /* 1083: "Talu", "New_Tai_Lue" */ + 465, -464, /* 1085: "Nkoo", "Nko" */ + 491, -492, /* 1087: "Ogam", "Ogham" */ + 152, -152, /* 1089: "Cyrs", "Cyrs" */ + 283, -283, /* 1091: "Hung", "Hung" */ + 310, -493, /* 1093: "Ital", "Old_Italic" */ + 521, -521, /* 1095: "Perm", "Perm" */ + 702, -494, /* 1097: "Xpeo", "Old_Persian" */ + 499, -497, /* 1099: "Orya", "Oriya" */ + 498, -498, /* 1101: "Orkh", "Orkh" */ + 500, -501, /* 1103: "Osma", "Osmanya" */ + 281, -281, /* 1105: "Hmng", "Hmng" */ + 523, -525, /* 1107: "Phag", "Phags_Pa" */ + 526, -527, /* 1109: "Phnx", "Phoenician" */ + 531, -531, /* 1111: "Plrd", "Plrd" */ + 559, -559, /* 1113: "Roro", "Roro" */ + 561, -560, /* 1115: "Runr", "Runic" */ + 574, -574, /* 1117: "Sara", "Sara" */ + 586, -585, /* 1119: "Shaw", "Shavian" */ + 266, -266, /* 1121: "Hans", "Hans" */ + 592, -593, /* 1123: "Sinh", "Sinhala" */ + 618, -619, /* 1125: "Sylo", "Syloti_Nagri" */ + 621, -623, /* 1127: "Syrc", "Syriac" */ + 648, -628, /* 1129: "Tglg", "Tagalog" */ + 629, -630, /* 1131: "Tagb", "Tagbanwa" */ + 635, -633, /* 1133: "Tale", "Tai_Le" */ + 638, -637, /* 1135: "Taml", "Tamil" */ + 641, -642, /* 1137: "Telu", "Telugu" */ + 643, -643, /* 1139: "Teng", "Teng" */ + 649, -650, /* 1141: "Thaa", "Thaana" */ + 651, -651, /* 1143: "Thai", "Thai" */ + 653, -652, /* 1145: "Tibt", "Tibetan" */ + 647, -654, /* 1147: "Tfng", "Tifinagh" */ + 267, -267, /* 1149: "Hant", "Hant" */ + 664, -665, /* 1151: "Ugar", "Ugaritic" */ + 726, -670, /* 1153: "Zzzz", "Unknown" */ + 724, -724, /* 1155: "Zxxx", "Zxxx" */ + 678, -678, /* 1157: "Vaii", "Vaii" */ + 685, -685, /* 1159: "Visp", "Visp" */ + 625, -625, /* 1161: "Syrj", "Syrj" */ + 712, -709, /* 1163: "Yiii", "Yi" */ }; #define MAX_NAMES_PER_GROUP 3 +const int32_t VALUES_GCB_COUNT = 10; + +const Alias VALUES_GCB[] = { + Alias((int32_t) U_GCB_CONTROL, 0), + Alias((int32_t) U_GCB_CR, 2), + Alias((int32_t) U_GCB_EXTEND, 4), + Alias((int32_t) U_GCB_L, 6), + Alias((int32_t) U_GCB_LF, 8), + Alias((int32_t) U_GCB_LV, 10), + Alias((int32_t) U_GCB_LVT, 12), + Alias((int32_t) U_GCB_OTHER, 14), + Alias((int32_t) U_GCB_T, 16), + Alias((int32_t) U_GCB_V, 18), +}; + const int32_t VALUES_NFC_QC_COUNT = 3; const Alias VALUES_NFC_QC[] = { - Alias((int32_t) UNORM_MAYBE, 0), - Alias((int32_t) UNORM_NO, 2), - Alias((int32_t) UNORM_YES, 4), + Alias((int32_t) UNORM_MAYBE, 20), + Alias((int32_t) UNORM_NO, 22), + Alias((int32_t) UNORM_YES, 24), }; const int32_t VALUES_NFD_QC_COUNT = 2; const Alias VALUES_NFD_QC[] = { - Alias((int32_t) UNORM_NO, 2), - Alias((int32_t) UNORM_YES, 4), + Alias((int32_t) UNORM_NO, 22), + Alias((int32_t) UNORM_YES, 24), }; const int32_t VALUES_NFKC_QC_COUNT = 3; const Alias VALUES_NFKC_QC[] = { - Alias((int32_t) UNORM_MAYBE, 0), - Alias((int32_t) UNORM_NO, 2), - Alias((int32_t) UNORM_YES, 4), + Alias((int32_t) UNORM_MAYBE, 20), + Alias((int32_t) UNORM_NO, 22), + Alias((int32_t) UNORM_YES, 24), }; const int32_t VALUES_NFKD_QC_COUNT = 2; const Alias VALUES_NFKD_QC[] = { - Alias((int32_t) UNORM_NO, 2), - Alias((int32_t) UNORM_YES, 4), + Alias((int32_t) UNORM_NO, 22), + Alias((int32_t) UNORM_YES, 24), +}; + +const int32_t VALUES_SB_COUNT = 11; + +const Alias VALUES_SB[] = { + Alias((int32_t) U_SB_ATERM, 26), + Alias((int32_t) U_SB_CLOSE, 28), + Alias((int32_t) U_SB_FORMAT, 30), + Alias((int32_t) U_SB_LOWER, 32), + Alias((int32_t) U_SB_NUMERIC, 34), + Alias((int32_t) U_SB_OLETTER, 36), + Alias((int32_t) U_SB_OTHER, 14), + Alias((int32_t) U_SB_SEP, 38), + Alias((int32_t) U_SB_SP, 40), + Alias((int32_t) U_SB_STERM, 42), + Alias((int32_t) U_SB_UPPER, 44), +}; + +const int32_t VALUES_WB_COUNT = 8; + +const Alias VALUES_WB[] = { + Alias((int32_t) U_WB_ALETTER, 46), + Alias((int32_t) U_WB_EXTENDNUMLET, 48), + Alias((int32_t) U_WB_FORMAT, 30), + Alias((int32_t) U_WB_KATAKANA, 50), + Alias((int32_t) U_WB_MIDLETTER, 52), + Alias((int32_t) U_WB_MIDNUM, 54), + Alias((int32_t) U_WB_NUMERIC, 34), + Alias((int32_t) U_WB_OTHER, 14), }; const int32_t VALUES_bc_COUNT = 19; const Alias VALUES_bc[] = { - Alias((int32_t) U_ARABIC_NUMBER, 156), - Alias((int32_t) U_BLOCK_SEPARATOR, 158), - Alias((int32_t) U_BOUNDARY_NEUTRAL, 160), - Alias((int32_t) U_COMMON_NUMBER_SEPARATOR, 162), - Alias((int32_t) U_DIR_NON_SPACING_MARK, 164), - Alias((int32_t) U_EUROPEAN_NUMBER, 166), - Alias((int32_t) U_EUROPEAN_NUMBER_SEPARATOR, 168), - Alias((int32_t) U_EUROPEAN_NUMBER_TERMINATOR, 170), - Alias((int32_t) U_LEFT_TO_RIGHT, 172), - Alias((int32_t) U_LEFT_TO_RIGHT_EMBEDDING, 174), - Alias((int32_t) U_LEFT_TO_RIGHT_OVERRIDE, 176), - Alias((int32_t) U_OTHER_NEUTRAL, 178), - Alias((int32_t) U_POP_DIRECTIONAL_FORMAT, 180), - Alias((int32_t) U_RIGHT_TO_LEFT, 182), - Alias((int32_t) U_RIGHT_TO_LEFT_ARABIC, 184), - Alias((int32_t) U_RIGHT_TO_LEFT_EMBEDDING, 186), - Alias((int32_t) U_RIGHT_TO_LEFT_OVERRIDE, 188), - Alias((int32_t) U_SEGMENT_SEPARATOR, 190), - Alias((int32_t) U_WHITE_SPACE_NEUTRAL, 192), + Alias((int32_t) U_ARABIC_NUMBER, 227), + Alias((int32_t) U_BLOCK_SEPARATOR, 229), + Alias((int32_t) U_BOUNDARY_NEUTRAL, 231), + Alias((int32_t) U_COMMON_NUMBER_SEPARATOR, 233), + Alias((int32_t) U_DIR_NON_SPACING_MARK, 235), + Alias((int32_t) U_EUROPEAN_NUMBER, 237), + Alias((int32_t) U_EUROPEAN_NUMBER_SEPARATOR, 239), + Alias((int32_t) U_EUROPEAN_NUMBER_TERMINATOR, 241), + Alias((int32_t) U_LEFT_TO_RIGHT, 243), + Alias((int32_t) U_LEFT_TO_RIGHT_EMBEDDING, 245), + Alias((int32_t) U_LEFT_TO_RIGHT_OVERRIDE, 247), + Alias((int32_t) U_OTHER_NEUTRAL, 249), + Alias((int32_t) U_POP_DIRECTIONAL_FORMAT, 251), + Alias((int32_t) U_RIGHT_TO_LEFT, 253), + Alias((int32_t) U_RIGHT_TO_LEFT_ARABIC, 255), + Alias((int32_t) U_RIGHT_TO_LEFT_EMBEDDING, 257), + Alias((int32_t) U_RIGHT_TO_LEFT_OVERRIDE, 259), + Alias((int32_t) U_SEGMENT_SEPARATOR, 261), + Alias((int32_t) U_WHITE_SPACE_NEUTRAL, 263), }; const int32_t VALUES_binprop_COUNT = 2; const Alias VALUES_binprop[] = { - Alias((int32_t) 0, 194), - Alias((int32_t) 1, 196), + Alias((int32_t) 0, 265), + Alias((int32_t) 1, 267), }; -const int32_t VALUES_blk_COUNT = 126; +const int32_t VALUES_blk_COUNT = 155; const Alias VALUES_blk[] = { - Alias((int32_t) UBLOCK_AEGEAN_NUMBERS, 198), - Alias((int32_t) UBLOCK_ALPHABETIC_PRESENTATION_FORMS, 200), - Alias((int32_t) UBLOCK_ARABIC, 202), - Alias((int32_t) UBLOCK_ARABIC_PRESENTATION_FORMS_A, 204), - Alias((int32_t) UBLOCK_ARABIC_PRESENTATION_FORMS_B, 206), - Alias((int32_t) UBLOCK_ARMENIAN, 208), - Alias((int32_t) UBLOCK_ARROWS, 210), - Alias((int32_t) UBLOCK_BASIC_LATIN, 212), - Alias((int32_t) UBLOCK_BENGALI, 214), - Alias((int32_t) UBLOCK_BLOCK_ELEMENTS, 216), - Alias((int32_t) UBLOCK_BOPOMOFO, 218), - Alias((int32_t) UBLOCK_BOPOMOFO_EXTENDED, 220), - Alias((int32_t) UBLOCK_BOX_DRAWING, 222), - Alias((int32_t) UBLOCK_BRAILLE_PATTERNS, 224), - Alias((int32_t) UBLOCK_BUHID, 226), - Alias((int32_t) UBLOCK_BYZANTINE_MUSICAL_SYMBOLS, 228), - Alias((int32_t) UBLOCK_CHEROKEE, 230), - Alias((int32_t) UBLOCK_CJK_COMPATIBILITY, 232), - Alias((int32_t) UBLOCK_CJK_COMPATIBILITY_FORMS, 234), - Alias((int32_t) UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, 236), - Alias((int32_t) UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT, 238), - Alias((int32_t) UBLOCK_CJK_RADICALS_SUPPLEMENT, 240), - Alias((int32_t) UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION, 242), - Alias((int32_t) UBLOCK_CJK_UNIFIED_IDEOGRAPHS, 244), - Alias((int32_t) UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A, 246), - Alias((int32_t) UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B, 248), - Alias((int32_t) UBLOCK_COMBINING_DIACRITICAL_MARKS, 250), - Alias((int32_t) UBLOCK_COMBINING_HALF_MARKS, 252), - Alias((int32_t) UBLOCK_COMBINING_MARKS_FOR_SYMBOLS, 254), - Alias((int32_t) UBLOCK_CONTROL_PICTURES, 256), - Alias((int32_t) UBLOCK_CURRENCY_SYMBOLS, 258), - Alias((int32_t) UBLOCK_CYPRIOT_SYLLABARY, 260), - Alias((int32_t) UBLOCK_CYRILLIC, 262), - Alias((int32_t) UBLOCK_CYRILLIC_SUPPLEMENT, 264), - Alias((int32_t) UBLOCK_DESERET, 267), - Alias((int32_t) UBLOCK_DEVANAGARI, 269), - Alias((int32_t) UBLOCK_DINGBATS, 271), - Alias((int32_t) UBLOCK_ENCLOSED_ALPHANUMERICS, 273), - Alias((int32_t) UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS, 275), - Alias((int32_t) UBLOCK_ETHIOPIC, 277), - Alias((int32_t) UBLOCK_GENERAL_PUNCTUATION, 279), - Alias((int32_t) UBLOCK_GEOMETRIC_SHAPES, 281), - Alias((int32_t) UBLOCK_GEORGIAN, 283), - Alias((int32_t) UBLOCK_GOTHIC, 285), - Alias((int32_t) UBLOCK_GREEK, 287), - Alias((int32_t) UBLOCK_GREEK_EXTENDED, 289), - Alias((int32_t) UBLOCK_GUJARATI, 291), - Alias((int32_t) UBLOCK_GURMUKHI, 293), - Alias((int32_t) UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, 295), - Alias((int32_t) UBLOCK_HANGUL_COMPATIBILITY_JAMO, 297), - Alias((int32_t) UBLOCK_HANGUL_JAMO, 299), - Alias((int32_t) UBLOCK_HANGUL_SYLLABLES, 301), - Alias((int32_t) UBLOCK_HANUNOO, 303), - Alias((int32_t) UBLOCK_HEBREW, 305), - Alias((int32_t) UBLOCK_HIGH_PRIVATE_USE_SURROGATES, 307), - Alias((int32_t) UBLOCK_HIGH_SURROGATES, 309), - Alias((int32_t) UBLOCK_HIRAGANA, 311), - Alias((int32_t) UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS, 313), - Alias((int32_t) UBLOCK_IPA_EXTENSIONS, 315), - Alias((int32_t) UBLOCK_KANBUN, 317), - Alias((int32_t) UBLOCK_KANGXI_RADICALS, 319), - Alias((int32_t) UBLOCK_KANNADA, 321), - Alias((int32_t) UBLOCK_KATAKANA, 323), - Alias((int32_t) UBLOCK_KATAKANA_PHONETIC_EXTENSIONS, 325), - Alias((int32_t) UBLOCK_KHMER, 327), - Alias((int32_t) UBLOCK_KHMER_SYMBOLS, 329), - Alias((int32_t) UBLOCK_LAO, 331), - Alias((int32_t) UBLOCK_LATIN_1_SUPPLEMENT, 333), - Alias((int32_t) UBLOCK_LATIN_EXTENDED_A, 335), - Alias((int32_t) UBLOCK_LATIN_EXTENDED_ADDITIONAL, 337), - Alias((int32_t) UBLOCK_LATIN_EXTENDED_B, 339), - Alias((int32_t) UBLOCK_LETTERLIKE_SYMBOLS, 341), - Alias((int32_t) UBLOCK_LIMBU, 343), - Alias((int32_t) UBLOCK_LINEAR_B_IDEOGRAMS, 345), - Alias((int32_t) UBLOCK_LINEAR_B_SYLLABARY, 347), - Alias((int32_t) UBLOCK_LOW_SURROGATES, 349), - Alias((int32_t) UBLOCK_MALAYALAM, 351), - Alias((int32_t) UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS, 353), - Alias((int32_t) UBLOCK_MATHEMATICAL_OPERATORS, 355), - Alias((int32_t) UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A, 357), - Alias((int32_t) UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B, 359), - Alias((int32_t) UBLOCK_MISCELLANEOUS_SYMBOLS, 361), - Alias((int32_t) UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS, 363), - Alias((int32_t) UBLOCK_MISCELLANEOUS_TECHNICAL, 365), - Alias((int32_t) UBLOCK_MONGOLIAN, 367), - Alias((int32_t) UBLOCK_MUSICAL_SYMBOLS, 369), - Alias((int32_t) UBLOCK_MYANMAR, 371), - Alias((int32_t) UBLOCK_NO_BLOCK, 373), - Alias((int32_t) UBLOCK_NUMBER_FORMS, 375), - Alias((int32_t) UBLOCK_OGHAM, 377), - Alias((int32_t) UBLOCK_OLD_ITALIC, 379), - Alias((int32_t) UBLOCK_OPTICAL_CHARACTER_RECOGNITION, 381), - Alias((int32_t) UBLOCK_ORIYA, 383), - Alias((int32_t) UBLOCK_OSMANYA, 385), - Alias((int32_t) UBLOCK_PHONETIC_EXTENSIONS, 387), - Alias((int32_t) UBLOCK_PRIVATE_USE_AREA, 389), - Alias((int32_t) UBLOCK_RUNIC, 391), - Alias((int32_t) UBLOCK_SHAVIAN, 393), - Alias((int32_t) UBLOCK_SINHALA, 395), - Alias((int32_t) UBLOCK_SMALL_FORM_VARIANTS, 397), - Alias((int32_t) UBLOCK_SPACING_MODIFIER_LETTERS, 399), - Alias((int32_t) UBLOCK_SPECIALS, 401), - Alias((int32_t) UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS, 403), - Alias((int32_t) UBLOCK_SUPPLEMENTAL_ARROWS_A, 405), - Alias((int32_t) UBLOCK_SUPPLEMENTAL_ARROWS_B, 407), - Alias((int32_t) UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS, 409), - Alias((int32_t) UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A, 411), - Alias((int32_t) UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B, 413), - Alias((int32_t) UBLOCK_SYRIAC, 415), - Alias((int32_t) UBLOCK_TAGALOG, 417), - Alias((int32_t) UBLOCK_TAGBANWA, 419), - Alias((int32_t) UBLOCK_TAGS, 421), - Alias((int32_t) UBLOCK_TAI_LE, 423), - Alias((int32_t) UBLOCK_TAI_XUAN_JING_SYMBOLS, 425), - Alias((int32_t) UBLOCK_TAMIL, 427), - Alias((int32_t) UBLOCK_TELUGU, 429), - Alias((int32_t) UBLOCK_THAANA, 431), - Alias((int32_t) UBLOCK_THAI, 433), - Alias((int32_t) UBLOCK_TIBETAN, 435), - Alias((int32_t) UBLOCK_UGARITIC, 437), - Alias((int32_t) UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS, 439), - Alias((int32_t) UBLOCK_VARIATION_SELECTORS, 441), - Alias((int32_t) UBLOCK_VARIATION_SELECTORS_SUPPLEMENT, 443), - Alias((int32_t) UBLOCK_YIJING_HEXAGRAM_SYMBOLS, 445), - Alias((int32_t) UBLOCK_YI_RADICALS, 447), - Alias((int32_t) UBLOCK_YI_SYLLABLES, 449), + Alias((int32_t) UBLOCK_AEGEAN_NUMBERS, 269), + Alias((int32_t) UBLOCK_ALPHABETIC_PRESENTATION_FORMS, 271), + Alias((int32_t) UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION, 273), + Alias((int32_t) UBLOCK_ANCIENT_GREEK_NUMBERS, 275), + Alias((int32_t) UBLOCK_ARABIC, 277), + Alias((int32_t) UBLOCK_ARABIC_PRESENTATION_FORMS_A, 279), + Alias((int32_t) UBLOCK_ARABIC_PRESENTATION_FORMS_B, 281), + Alias((int32_t) UBLOCK_ARABIC_SUPPLEMENT, 283), + Alias((int32_t) UBLOCK_ARMENIAN, 285), + Alias((int32_t) UBLOCK_ARROWS, 287), + Alias((int32_t) UBLOCK_BALINESE, 289), + Alias((int32_t) UBLOCK_BASIC_LATIN, 291), + Alias((int32_t) UBLOCK_BENGALI, 293), + Alias((int32_t) UBLOCK_BLOCK_ELEMENTS, 295), + Alias((int32_t) UBLOCK_BOPOMOFO, 297), + Alias((int32_t) UBLOCK_BOPOMOFO_EXTENDED, 299), + Alias((int32_t) UBLOCK_BOX_DRAWING, 301), + Alias((int32_t) UBLOCK_BRAILLE_PATTERNS, 303), + Alias((int32_t) UBLOCK_BUGINESE, 305), + Alias((int32_t) UBLOCK_BUHID, 307), + Alias((int32_t) UBLOCK_BYZANTINE_MUSICAL_SYMBOLS, 309), + Alias((int32_t) UBLOCK_CHEROKEE, 311), + Alias((int32_t) UBLOCK_CJK_COMPATIBILITY, 313), + Alias((int32_t) UBLOCK_CJK_COMPATIBILITY_FORMS, 315), + Alias((int32_t) UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, 317), + Alias((int32_t) UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT, 319), + Alias((int32_t) UBLOCK_CJK_RADICALS_SUPPLEMENT, 321), + Alias((int32_t) UBLOCK_CJK_STROKES, 323), + Alias((int32_t) UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION, 325), + Alias((int32_t) UBLOCK_CJK_UNIFIED_IDEOGRAPHS, 327), + Alias((int32_t) UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A, 329), + Alias((int32_t) UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B, 331), + Alias((int32_t) UBLOCK_COMBINING_DIACRITICAL_MARKS, 333), + Alias((int32_t) UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT, 335), + Alias((int32_t) UBLOCK_COMBINING_HALF_MARKS, 337), + Alias((int32_t) UBLOCK_COMBINING_MARKS_FOR_SYMBOLS, 339), + Alias((int32_t) UBLOCK_CONTROL_PICTURES, 341), + Alias((int32_t) UBLOCK_COPTIC, 343), + Alias((int32_t) UBLOCK_COUNTING_ROD_NUMERALS, 345), + Alias((int32_t) UBLOCK_CUNEIFORM, 347), + Alias((int32_t) UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION, 349), + Alias((int32_t) UBLOCK_CURRENCY_SYMBOLS, 351), + Alias((int32_t) UBLOCK_CYPRIOT_SYLLABARY, 353), + Alias((int32_t) UBLOCK_CYRILLIC, 355), + Alias((int32_t) UBLOCK_CYRILLIC_SUPPLEMENT, 357), + Alias((int32_t) UBLOCK_DESERET, 360), + Alias((int32_t) UBLOCK_DEVANAGARI, 362), + Alias((int32_t) UBLOCK_DINGBATS, 364), + Alias((int32_t) UBLOCK_ENCLOSED_ALPHANUMERICS, 366), + Alias((int32_t) UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS, 368), + Alias((int32_t) UBLOCK_ETHIOPIC, 370), + Alias((int32_t) UBLOCK_ETHIOPIC_EXTENDED, 372), + Alias((int32_t) UBLOCK_ETHIOPIC_SUPPLEMENT, 374), + Alias((int32_t) UBLOCK_GENERAL_PUNCTUATION, 376), + Alias((int32_t) UBLOCK_GEOMETRIC_SHAPES, 378), + Alias((int32_t) UBLOCK_GEORGIAN, 380), + Alias((int32_t) UBLOCK_GEORGIAN_SUPPLEMENT, 382), + Alias((int32_t) UBLOCK_GLAGOLITIC, 384), + Alias((int32_t) UBLOCK_GOTHIC, 386), + Alias((int32_t) UBLOCK_GREEK, 388), + Alias((int32_t) UBLOCK_GREEK_EXTENDED, 390), + Alias((int32_t) UBLOCK_GUJARATI, 392), + Alias((int32_t) UBLOCK_GURMUKHI, 394), + Alias((int32_t) UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, 396), + Alias((int32_t) UBLOCK_HANGUL_COMPATIBILITY_JAMO, 398), + Alias((int32_t) UBLOCK_HANGUL_JAMO, 400), + Alias((int32_t) UBLOCK_HANGUL_SYLLABLES, 402), + Alias((int32_t) UBLOCK_HANUNOO, 404), + Alias((int32_t) UBLOCK_HEBREW, 406), + Alias((int32_t) UBLOCK_HIGH_PRIVATE_USE_SURROGATES, 408), + Alias((int32_t) UBLOCK_HIGH_SURROGATES, 410), + Alias((int32_t) UBLOCK_HIRAGANA, 412), + Alias((int32_t) UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS, 414), + Alias((int32_t) UBLOCK_IPA_EXTENSIONS, 416), + Alias((int32_t) UBLOCK_KANBUN, 418), + Alias((int32_t) UBLOCK_KANGXI_RADICALS, 420), + Alias((int32_t) UBLOCK_KANNADA, 422), + Alias((int32_t) UBLOCK_KATAKANA, 424), + Alias((int32_t) UBLOCK_KATAKANA_PHONETIC_EXTENSIONS, 426), + Alias((int32_t) UBLOCK_KHAROSHTHI, 428), + Alias((int32_t) UBLOCK_KHMER, 430), + Alias((int32_t) UBLOCK_KHMER_SYMBOLS, 432), + Alias((int32_t) UBLOCK_LAO, 434), + Alias((int32_t) UBLOCK_LATIN_1_SUPPLEMENT, 436), + Alias((int32_t) UBLOCK_LATIN_EXTENDED_A, 438), + Alias((int32_t) UBLOCK_LATIN_EXTENDED_ADDITIONAL, 440), + Alias((int32_t) UBLOCK_LATIN_EXTENDED_B, 442), + Alias((int32_t) UBLOCK_LATIN_EXTENDED_C, 444), + Alias((int32_t) UBLOCK_LATIN_EXTENDED_D, 446), + Alias((int32_t) UBLOCK_LETTERLIKE_SYMBOLS, 448), + Alias((int32_t) UBLOCK_LIMBU, 450), + Alias((int32_t) UBLOCK_LINEAR_B_IDEOGRAMS, 452), + Alias((int32_t) UBLOCK_LINEAR_B_SYLLABARY, 454), + Alias((int32_t) UBLOCK_LOW_SURROGATES, 456), + Alias((int32_t) UBLOCK_MALAYALAM, 458), + Alias((int32_t) UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS, 460), + Alias((int32_t) UBLOCK_MATHEMATICAL_OPERATORS, 462), + Alias((int32_t) UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A, 464), + Alias((int32_t) UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B, 466), + Alias((int32_t) UBLOCK_MISCELLANEOUS_SYMBOLS, 468), + Alias((int32_t) UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS, 470), + Alias((int32_t) UBLOCK_MISCELLANEOUS_TECHNICAL, 472), + Alias((int32_t) UBLOCK_MODIFIER_TONE_LETTERS, 474), + Alias((int32_t) UBLOCK_MONGOLIAN, 476), + Alias((int32_t) UBLOCK_MUSICAL_SYMBOLS, 478), + Alias((int32_t) UBLOCK_MYANMAR, 480), + Alias((int32_t) UBLOCK_NEW_TAI_LUE, 482), + Alias((int32_t) UBLOCK_NKO, 484), + Alias((int32_t) UBLOCK_NO_BLOCK, 486), + Alias((int32_t) UBLOCK_NUMBER_FORMS, 488), + Alias((int32_t) UBLOCK_OGHAM, 490), + Alias((int32_t) UBLOCK_OLD_ITALIC, 492), + Alias((int32_t) UBLOCK_OLD_PERSIAN, 494), + Alias((int32_t) UBLOCK_OPTICAL_CHARACTER_RECOGNITION, 496), + Alias((int32_t) UBLOCK_ORIYA, 498), + Alias((int32_t) UBLOCK_OSMANYA, 500), + Alias((int32_t) UBLOCK_PHAGS_PA, 502), + Alias((int32_t) UBLOCK_PHOENICIAN, 504), + Alias((int32_t) UBLOCK_PHONETIC_EXTENSIONS, 506), + Alias((int32_t) UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT, 508), + Alias((int32_t) UBLOCK_PRIVATE_USE_AREA, 510), + Alias((int32_t) UBLOCK_RUNIC, 512), + Alias((int32_t) UBLOCK_SHAVIAN, 514), + Alias((int32_t) UBLOCK_SINHALA, 516), + Alias((int32_t) UBLOCK_SMALL_FORM_VARIANTS, 518), + Alias((int32_t) UBLOCK_SPACING_MODIFIER_LETTERS, 520), + Alias((int32_t) UBLOCK_SPECIALS, 522), + Alias((int32_t) UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS, 524), + Alias((int32_t) UBLOCK_SUPPLEMENTAL_ARROWS_A, 526), + Alias((int32_t) UBLOCK_SUPPLEMENTAL_ARROWS_B, 528), + Alias((int32_t) UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS, 530), + Alias((int32_t) UBLOCK_SUPPLEMENTAL_PUNCTUATION, 532), + Alias((int32_t) UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A, 534), + Alias((int32_t) UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B, 536), + Alias((int32_t) UBLOCK_SYLOTI_NAGRI, 538), + Alias((int32_t) UBLOCK_SYRIAC, 540), + Alias((int32_t) UBLOCK_TAGALOG, 542), + Alias((int32_t) UBLOCK_TAGBANWA, 544), + Alias((int32_t) UBLOCK_TAGS, 546), + Alias((int32_t) UBLOCK_TAI_LE, 548), + Alias((int32_t) UBLOCK_TAI_XUAN_JING_SYMBOLS, 550), + Alias((int32_t) UBLOCK_TAMIL, 552), + Alias((int32_t) UBLOCK_TELUGU, 554), + Alias((int32_t) UBLOCK_THAANA, 556), + Alias((int32_t) UBLOCK_THAI, 558), + Alias((int32_t) UBLOCK_TIBETAN, 560), + Alias((int32_t) UBLOCK_TIFINAGH, 562), + Alias((int32_t) UBLOCK_UGARITIC, 564), + Alias((int32_t) UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS, 566), + Alias((int32_t) UBLOCK_VARIATION_SELECTORS, 568), + Alias((int32_t) UBLOCK_VARIATION_SELECTORS_SUPPLEMENT, 570), + Alias((int32_t) UBLOCK_VERTICAL_FORMS, 572), + Alias((int32_t) UBLOCK_YIJING_HEXAGRAM_SYMBOLS, 574), + Alias((int32_t) UBLOCK_YI_RADICALS, 576), + Alias((int32_t) UBLOCK_YI_SYLLABLES, 578), }; const int32_t VALUES_ccc_COUNT = 19; const Alias VALUES_ccc[] = { - Alias((int32_t) 0, 451), - Alias((int32_t) 1, 453), - Alias((int32_t) 200, 455), - Alias((int32_t) 202, 457), - Alias((int32_t) 216, 459), - Alias((int32_t) 218, 461), - Alias((int32_t) 220, 463), - Alias((int32_t) 222, 465), - Alias((int32_t) 224, 467), - Alias((int32_t) 226, 469), - Alias((int32_t) 228, 471), - Alias((int32_t) 230, 473), - Alias((int32_t) 232, 475), - Alias((int32_t) 233, 477), - Alias((int32_t) 234, 479), - Alias((int32_t) 240, 481), - Alias((int32_t) 7, 483), - Alias((int32_t) 8, 485), - Alias((int32_t) 9, 487), + Alias((int32_t) 0, 580), + Alias((int32_t) 1, 582), + Alias((int32_t) 200, 584), + Alias((int32_t) 202, 586), + Alias((int32_t) 216, 588), + Alias((int32_t) 218, 590), + Alias((int32_t) 220, 592), + Alias((int32_t) 222, 594), + Alias((int32_t) 224, 596), + Alias((int32_t) 226, 598), + Alias((int32_t) 228, 600), + Alias((int32_t) 230, 602), + Alias((int32_t) 232, 604), + Alias((int32_t) 233, 606), + Alias((int32_t) 234, 608), + Alias((int32_t) 240, 610), + Alias((int32_t) 7, 612), + Alias((int32_t) 8, 614), + Alias((int32_t) 9, 616), }; const int32_t VALUES_dt_COUNT = 18; const Alias VALUES_dt[] = { - Alias((int32_t) U_DT_CANONICAL, 489), - Alias((int32_t) U_DT_CIRCLE, 491), - Alias((int32_t) U_DT_COMPAT, 493), - Alias((int32_t) U_DT_FINAL, 495), - Alias((int32_t) U_DT_FONT, 497), - Alias((int32_t) U_DT_FRACTION, 499), - Alias((int32_t) U_DT_INITIAL, 501), - Alias((int32_t) U_DT_ISOLATED, 503), - Alias((int32_t) U_DT_MEDIAL, 505), - Alias((int32_t) U_DT_NARROW, 507), - Alias((int32_t) U_DT_NOBREAK, 509), - Alias((int32_t) U_DT_NONE, 511), - Alias((int32_t) U_DT_SMALL, 513), - Alias((int32_t) U_DT_SQUARE, 515), - Alias((int32_t) U_DT_SUB, 517), - Alias((int32_t) U_DT_SUPER, 519), - Alias((int32_t) U_DT_VERTICAL, 521), - Alias((int32_t) U_DT_WIDE, 523), + Alias((int32_t) U_DT_CANONICAL, 618), + Alias((int32_t) U_DT_CIRCLE, 620), + Alias((int32_t) U_DT_COMPAT, 622), + Alias((int32_t) U_DT_FINAL, 624), + Alias((int32_t) U_DT_FONT, 626), + Alias((int32_t) U_DT_FRACTION, 628), + Alias((int32_t) U_DT_INITIAL, 630), + Alias((int32_t) U_DT_ISOLATED, 632), + Alias((int32_t) U_DT_MEDIAL, 634), + Alias((int32_t) U_DT_NARROW, 636), + Alias((int32_t) U_DT_NOBREAK, 638), + Alias((int32_t) U_DT_NONE, 640), + Alias((int32_t) U_DT_SMALL, 642), + Alias((int32_t) U_DT_SQUARE, 644), + Alias((int32_t) U_DT_SUB, 646), + Alias((int32_t) U_DT_SUPER, 648), + Alias((int32_t) U_DT_VERTICAL, 650), + Alias((int32_t) U_DT_WIDE, 652), }; const int32_t VALUES_ea_COUNT = 6; const Alias VALUES_ea[] = { - Alias((int32_t) U_EA_AMBIGUOUS, 525), - Alias((int32_t) U_EA_FULLWIDTH, 527), - Alias((int32_t) U_EA_HALFWIDTH, 529), - Alias((int32_t) U_EA_NARROW, 531), - Alias((int32_t) U_EA_NEUTRAL, 533), - Alias((int32_t) U_EA_WIDE, 535), + Alias((int32_t) U_EA_AMBIGUOUS, 654), + Alias((int32_t) U_EA_FULLWIDTH, 656), + Alias((int32_t) U_EA_HALFWIDTH, 658), + Alias((int32_t) U_EA_NARROW, 660), + Alias((int32_t) U_EA_NEUTRAL, 662), + Alias((int32_t) U_EA_WIDE, 664), }; const int32_t VALUES_gc_COUNT = 30; const Alias VALUES_gc[] = { - Alias((int32_t) U_COMBINING_SPACING_MARK, 537), - Alias((int32_t) U_CONNECTOR_PUNCTUATION, 539), - Alias((int32_t) U_CONTROL_CHAR, 541), - Alias((int32_t) U_CURRENCY_SYMBOL, 543), - Alias((int32_t) U_DASH_PUNCTUATION, 545), - Alias((int32_t) U_DECIMAL_DIGIT_NUMBER, 547), - Alias((int32_t) U_ENCLOSING_MARK, 549), - Alias((int32_t) U_END_PUNCTUATION, 551), - Alias((int32_t) U_FINAL_PUNCTUATION, 553), - Alias((int32_t) U_FORMAT_CHAR, 555), - Alias((int32_t) U_GENERAL_OTHER_TYPES, 557), - Alias((int32_t) U_INITIAL_PUNCTUATION, 559), - Alias((int32_t) U_LETTER_NUMBER, 561), - Alias((int32_t) U_LINE_SEPARATOR, 563), - Alias((int32_t) U_LOWERCASE_LETTER, 565), - Alias((int32_t) U_MATH_SYMBOL, 567), - Alias((int32_t) U_MODIFIER_LETTER, 569), - Alias((int32_t) U_MODIFIER_SYMBOL, 571), - Alias((int32_t) U_NON_SPACING_MARK, 573), - Alias((int32_t) U_OTHER_LETTER, 575), - Alias((int32_t) U_OTHER_NUMBER, 577), - Alias((int32_t) U_OTHER_PUNCTUATION, 579), - Alias((int32_t) U_OTHER_SYMBOL, 581), - Alias((int32_t) U_PARAGRAPH_SEPARATOR, 583), - Alias((int32_t) U_PRIVATE_USE_CHAR, 585), - Alias((int32_t) U_SPACE_SEPARATOR, 587), - Alias((int32_t) U_START_PUNCTUATION, 589), - Alias((int32_t) U_SURROGATE, 591), - Alias((int32_t) U_TITLECASE_LETTER, 593), - Alias((int32_t) U_UPPERCASE_LETTER, 595), + Alias((int32_t) U_COMBINING_SPACING_MARK, 666), + Alias((int32_t) U_CONNECTOR_PUNCTUATION, 668), + Alias((int32_t) U_CONTROL_CHAR, 670), + Alias((int32_t) U_CURRENCY_SYMBOL, 673), + Alias((int32_t) U_DASH_PUNCTUATION, 675), + Alias((int32_t) U_DECIMAL_DIGIT_NUMBER, 677), + Alias((int32_t) U_ENCLOSING_MARK, 680), + Alias((int32_t) U_END_PUNCTUATION, 682), + Alias((int32_t) U_FINAL_PUNCTUATION, 684), + Alias((int32_t) U_FORMAT_CHAR, 686), + Alias((int32_t) U_GENERAL_OTHER_TYPES, 688), + Alias((int32_t) U_INITIAL_PUNCTUATION, 690), + Alias((int32_t) U_LETTER_NUMBER, 692), + Alias((int32_t) U_LINE_SEPARATOR, 694), + Alias((int32_t) U_LOWERCASE_LETTER, 696), + Alias((int32_t) U_MATH_SYMBOL, 698), + Alias((int32_t) U_MODIFIER_LETTER, 700), + Alias((int32_t) U_MODIFIER_SYMBOL, 702), + Alias((int32_t) U_NON_SPACING_MARK, 704), + Alias((int32_t) U_OTHER_LETTER, 706), + Alias((int32_t) U_OTHER_NUMBER, 708), + Alias((int32_t) U_OTHER_PUNCTUATION, 710), + Alias((int32_t) U_OTHER_SYMBOL, 712), + Alias((int32_t) U_PARAGRAPH_SEPARATOR, 714), + Alias((int32_t) U_PRIVATE_USE_CHAR, 716), + Alias((int32_t) U_SPACE_SEPARATOR, 718), + Alias((int32_t) U_START_PUNCTUATION, 720), + Alias((int32_t) U_SURROGATE, 722), + Alias((int32_t) U_TITLECASE_LETTER, 724), + Alias((int32_t) U_UPPERCASE_LETTER, 726), }; const int32_t VALUES_gcm_COUNT = 38; const Alias VALUES_gcm[] = { - Alias((int32_t) U_GC_CC_MASK, 541), - Alias((int32_t) U_GC_CF_MASK, 555), - Alias((int32_t) U_GC_CN_MASK, 557), - Alias((int32_t) U_GC_CO_MASK, 585), - Alias((int32_t) U_GC_CS_MASK, 591), - Alias((int32_t) U_GC_C_MASK, 597), - Alias((int32_t) U_GC_LC_MASK, 599), - Alias((int32_t) U_GC_LL_MASK, 565), - Alias((int32_t) U_GC_LM_MASK, 569), - Alias((int32_t) U_GC_LO_MASK, 575), - Alias((int32_t) U_GC_LT_MASK, 593), - Alias((int32_t) U_GC_LU_MASK, 595), - Alias((int32_t) U_GC_L_MASK, 601), - Alias((int32_t) U_GC_MC_MASK, 537), - Alias((int32_t) U_GC_ME_MASK, 549), - Alias((int32_t) U_GC_MN_MASK, 573), - Alias((int32_t) U_GC_M_MASK, 603), - Alias((int32_t) U_GC_ND_MASK, 547), - Alias((int32_t) U_GC_NL_MASK, 561), - Alias((int32_t) U_GC_NO_MASK, 577), - Alias((int32_t) U_GC_N_MASK, 605), - Alias((int32_t) U_GC_PC_MASK, 539), - Alias((int32_t) U_GC_PD_MASK, 545), - Alias((int32_t) U_GC_PE_MASK, 551), - Alias((int32_t) U_GC_PF_MASK, 553), - Alias((int32_t) U_GC_PI_MASK, 559), - Alias((int32_t) U_GC_PO_MASK, 579), - Alias((int32_t) U_GC_PS_MASK, 589), - Alias((int32_t) U_GC_P_MASK, 607), - Alias((int32_t) U_GC_SC_MASK, 543), - Alias((int32_t) U_GC_SK_MASK, 571), - Alias((int32_t) U_GC_SM_MASK, 567), - Alias((int32_t) U_GC_SO_MASK, 581), - Alias((int32_t) U_GC_S_MASK, 609), - Alias((int32_t) U_GC_ZL_MASK, 563), - Alias((int32_t) U_GC_ZP_MASK, 583), - Alias((int32_t) U_GC_ZS_MASK, 587), - Alias((int32_t) U_GC_Z_MASK, 611), + Alias((int32_t) U_GC_CC_MASK, 670), + Alias((int32_t) U_GC_CF_MASK, 686), + Alias((int32_t) U_GC_CN_MASK, 688), + Alias((int32_t) U_GC_CO_MASK, 716), + Alias((int32_t) U_GC_CS_MASK, 722), + Alias((int32_t) U_GC_C_MASK, 728), + Alias((int32_t) U_GC_LC_MASK, 730), + Alias((int32_t) U_GC_LL_MASK, 696), + Alias((int32_t) U_GC_LM_MASK, 700), + Alias((int32_t) U_GC_LO_MASK, 706), + Alias((int32_t) U_GC_LT_MASK, 724), + Alias((int32_t) U_GC_LU_MASK, 726), + Alias((int32_t) U_GC_L_MASK, 732), + Alias((int32_t) U_GC_MC_MASK, 666), + Alias((int32_t) U_GC_ME_MASK, 680), + Alias((int32_t) U_GC_MN_MASK, 704), + Alias((int32_t) U_GC_M_MASK, 734), + Alias((int32_t) U_GC_ND_MASK, 677), + Alias((int32_t) U_GC_NL_MASK, 692), + Alias((int32_t) U_GC_NO_MASK, 708), + Alias((int32_t) U_GC_N_MASK, 736), + Alias((int32_t) U_GC_PC_MASK, 668), + Alias((int32_t) U_GC_PD_MASK, 675), + Alias((int32_t) U_GC_PE_MASK, 682), + Alias((int32_t) U_GC_PF_MASK, 684), + Alias((int32_t) U_GC_PI_MASK, 690), + Alias((int32_t) U_GC_PO_MASK, 710), + Alias((int32_t) U_GC_PS_MASK, 720), + Alias((int32_t) U_GC_P_MASK, 738), + Alias((int32_t) U_GC_SC_MASK, 673), + Alias((int32_t) U_GC_SK_MASK, 702), + Alias((int32_t) U_GC_SM_MASK, 698), + Alias((int32_t) U_GC_SO_MASK, 712), + Alias((int32_t) U_GC_S_MASK, 741), + Alias((int32_t) U_GC_ZL_MASK, 694), + Alias((int32_t) U_GC_ZP_MASK, 714), + Alias((int32_t) U_GC_ZS_MASK, 718), + Alias((int32_t) U_GC_Z_MASK, 743), }; const int32_t VALUES_hst_COUNT = 6; const Alias VALUES_hst[] = { - Alias((int32_t) U_HST_LEADING_JAMO, 613), - Alias((int32_t) U_HST_LVT_SYLLABLE, 615), - Alias((int32_t) U_HST_LV_SYLLABLE, 617), - Alias((int32_t) U_HST_NOT_APPLICABLE, 619), - Alias((int32_t) U_HST_TRAILING_JAMO, 621), - Alias((int32_t) U_HST_VOWEL_JAMO, 623), + Alias((int32_t) U_HST_LEADING_JAMO, 745), + Alias((int32_t) U_HST_LVT_SYLLABLE, 747), + Alias((int32_t) U_HST_LV_SYLLABLE, 749), + Alias((int32_t) U_HST_NOT_APPLICABLE, 751), + Alias((int32_t) U_HST_TRAILING_JAMO, 753), + Alias((int32_t) U_HST_VOWEL_JAMO, 755), }; const int32_t VALUES_jg_COUNT = 54; const Alias VALUES_jg[] = { - Alias((int32_t) U_JG_AIN, 625), - Alias((int32_t) U_JG_ALAPH, 627), - Alias((int32_t) U_JG_ALEF, 629), - Alias((int32_t) U_JG_BEH, 631), - Alias((int32_t) U_JG_BETH, 633), - Alias((int32_t) U_JG_DAL, 635), - Alias((int32_t) U_JG_DALATH_RISH, 637), - Alias((int32_t) U_JG_E, 639), - Alias((int32_t) U_JG_FE, 641), - Alias((int32_t) U_JG_FEH, 643), - Alias((int32_t) U_JG_FINAL_SEMKATH, 645), - Alias((int32_t) U_JG_GAF, 647), - Alias((int32_t) U_JG_GAMAL, 649), - Alias((int32_t) U_JG_HAH, 651), - Alias((int32_t) U_JG_HAMZA_ON_HEH_GOAL, 653), - Alias((int32_t) U_JG_HE, 655), - Alias((int32_t) U_JG_HEH, 657), - Alias((int32_t) U_JG_HEH_GOAL, 659), - Alias((int32_t) U_JG_HETH, 661), - Alias((int32_t) U_JG_KAF, 663), - Alias((int32_t) U_JG_KAPH, 665), - Alias((int32_t) U_JG_KHAPH, 667), - Alias((int32_t) U_JG_KNOTTED_HEH, 669), - Alias((int32_t) U_JG_LAM, 671), - Alias((int32_t) U_JG_LAMADH, 673), - Alias((int32_t) U_JG_MEEM, 675), - Alias((int32_t) U_JG_MIM, 677), - Alias((int32_t) U_JG_NOON, 679), - Alias((int32_t) U_JG_NO_JOINING_GROUP, 681), - Alias((int32_t) U_JG_NUN, 683), - Alias((int32_t) U_JG_PE, 685), - Alias((int32_t) U_JG_QAF, 687), - Alias((int32_t) U_JG_QAPH, 689), - Alias((int32_t) U_JG_REH, 691), - Alias((int32_t) U_JG_REVERSED_PE, 693), - Alias((int32_t) U_JG_SAD, 695), - Alias((int32_t) U_JG_SADHE, 697), - Alias((int32_t) U_JG_SEEN, 699), - Alias((int32_t) U_JG_SEMKATH, 701), - Alias((int32_t) U_JG_SHIN, 703), - Alias((int32_t) U_JG_SWASH_KAF, 705), - Alias((int32_t) U_JG_SYRIAC_WAW, 707), - Alias((int32_t) U_JG_TAH, 709), - Alias((int32_t) U_JG_TAW, 711), - Alias((int32_t) U_JG_TEH_MARBUTA, 713), - Alias((int32_t) U_JG_TETH, 715), - Alias((int32_t) U_JG_WAW, 717), - Alias((int32_t) U_JG_YEH, 719), - Alias((int32_t) U_JG_YEH_BARREE, 721), - Alias((int32_t) U_JG_YEH_WITH_TAIL, 723), - Alias((int32_t) U_JG_YUDH, 725), - Alias((int32_t) U_JG_YUDH_HE, 727), - Alias((int32_t) U_JG_ZAIN, 729), - Alias((int32_t) U_JG_ZHAIN, 731), + Alias((int32_t) U_JG_AIN, 757), + Alias((int32_t) U_JG_ALAPH, 759), + Alias((int32_t) U_JG_ALEF, 761), + Alias((int32_t) U_JG_BEH, 763), + Alias((int32_t) U_JG_BETH, 765), + Alias((int32_t) U_JG_DAL, 767), + Alias((int32_t) U_JG_DALATH_RISH, 769), + Alias((int32_t) U_JG_E, 771), + Alias((int32_t) U_JG_FE, 773), + Alias((int32_t) U_JG_FEH, 775), + Alias((int32_t) U_JG_FINAL_SEMKATH, 777), + Alias((int32_t) U_JG_GAF, 779), + Alias((int32_t) U_JG_GAMAL, 781), + Alias((int32_t) U_JG_HAH, 783), + Alias((int32_t) U_JG_HAMZA_ON_HEH_GOAL, 785), + Alias((int32_t) U_JG_HE, 787), + Alias((int32_t) U_JG_HEH, 789), + Alias((int32_t) U_JG_HEH_GOAL, 791), + Alias((int32_t) U_JG_HETH, 793), + Alias((int32_t) U_JG_KAF, 795), + Alias((int32_t) U_JG_KAPH, 797), + Alias((int32_t) U_JG_KHAPH, 799), + Alias((int32_t) U_JG_KNOTTED_HEH, 801), + Alias((int32_t) U_JG_LAM, 803), + Alias((int32_t) U_JG_LAMADH, 805), + Alias((int32_t) U_JG_MEEM, 807), + Alias((int32_t) U_JG_MIM, 809), + Alias((int32_t) U_JG_NOON, 811), + Alias((int32_t) U_JG_NO_JOINING_GROUP, 813), + Alias((int32_t) U_JG_NUN, 815), + Alias((int32_t) U_JG_PE, 817), + Alias((int32_t) U_JG_QAF, 819), + Alias((int32_t) U_JG_QAPH, 821), + Alias((int32_t) U_JG_REH, 823), + Alias((int32_t) U_JG_REVERSED_PE, 825), + Alias((int32_t) U_JG_SAD, 827), + Alias((int32_t) U_JG_SADHE, 829), + Alias((int32_t) U_JG_SEEN, 831), + Alias((int32_t) U_JG_SEMKATH, 833), + Alias((int32_t) U_JG_SHIN, 835), + Alias((int32_t) U_JG_SWASH_KAF, 837), + Alias((int32_t) U_JG_SYRIAC_WAW, 839), + Alias((int32_t) U_JG_TAH, 841), + Alias((int32_t) U_JG_TAW, 843), + Alias((int32_t) U_JG_TEH_MARBUTA, 845), + Alias((int32_t) U_JG_TETH, 847), + Alias((int32_t) U_JG_WAW, 849), + Alias((int32_t) U_JG_YEH, 851), + Alias((int32_t) U_JG_YEH_BARREE, 853), + Alias((int32_t) U_JG_YEH_WITH_TAIL, 855), + Alias((int32_t) U_JG_YUDH, 857), + Alias((int32_t) U_JG_YUDH_HE, 859), + Alias((int32_t) U_JG_ZAIN, 861), + Alias((int32_t) U_JG_ZHAIN, 863), }; const int32_t VALUES_jt_COUNT = 6; const Alias VALUES_jt[] = { - Alias((int32_t) U_JT_DUAL_JOINING, 733), - Alias((int32_t) U_JT_JOIN_CAUSING, 735), - Alias((int32_t) U_JT_LEFT_JOINING, 737), - Alias((int32_t) U_JT_NON_JOINING, 739), - Alias((int32_t) U_JT_RIGHT_JOINING, 741), - Alias((int32_t) U_JT_TRANSPARENT, 743), + Alias((int32_t) U_JT_DUAL_JOINING, 865), + Alias((int32_t) U_JT_JOIN_CAUSING, 867), + Alias((int32_t) U_JT_LEFT_JOINING, 869), + Alias((int32_t) U_JT_NON_JOINING, 871), + Alias((int32_t) U_JT_RIGHT_JOINING, 873), + Alias((int32_t) U_JT_TRANSPARENT, 875), }; -const int32_t VALUES_lb_COUNT = 31; +const int32_t VALUES_lb_COUNT = 36; const Alias VALUES_lb[] = { - Alias((int32_t) U_LB_ALPHABETIC, 745), - Alias((int32_t) U_LB_AMBIGUOUS, 747), - Alias((int32_t) U_LB_BREAK_AFTER, 749), - Alias((int32_t) U_LB_BREAK_BEFORE, 751), - Alias((int32_t) U_LB_BREAK_BOTH, 753), - Alias((int32_t) U_LB_BREAK_SYMBOLS, 755), - Alias((int32_t) U_LB_CARRIAGE_RETURN, 757), - Alias((int32_t) U_LB_CLOSE_PUNCTUATION, 759), - Alias((int32_t) U_LB_COMBINING_MARK, 761), - Alias((int32_t) U_LB_COMPLEX_CONTEXT, 763), - Alias((int32_t) U_LB_CONTINGENT_BREAK, 765), - Alias((int32_t) U_LB_EXCLAMATION, 767), - Alias((int32_t) U_LB_GLUE, 769), - Alias((int32_t) U_LB_HYPHEN, 771), - Alias((int32_t) U_LB_IDEOGRAPHIC, 773), - Alias((int32_t) U_LB_INFIX_NUMERIC, 775), - Alias((int32_t) U_LB_INSEPARABLE, 777), - Alias((int32_t) U_LB_LINE_FEED, 780), - Alias((int32_t) U_LB_MANDATORY_BREAK, 782), - Alias((int32_t) U_LB_NEXT_LINE, 784), - Alias((int32_t) U_LB_NONSTARTER, 786), - Alias((int32_t) U_LB_NUMERIC, 788), - Alias((int32_t) U_LB_OPEN_PUNCTUATION, 790), - Alias((int32_t) U_LB_POSTFIX_NUMERIC, 792), - Alias((int32_t) U_LB_PREFIX_NUMERIC, 794), - Alias((int32_t) U_LB_QUOTATION, 796), - Alias((int32_t) U_LB_SPACE, 798), - Alias((int32_t) U_LB_SURROGATE, 800), - Alias((int32_t) U_LB_UNKNOWN, 802), - Alias((int32_t) U_LB_WORD_JOINER, 804), - Alias((int32_t) U_LB_ZWSPACE, 806), + Alias((int32_t) U_LB_ALPHABETIC, 877), + Alias((int32_t) U_LB_AMBIGUOUS, 879), + Alias((int32_t) U_LB_BREAK_AFTER, 881), + Alias((int32_t) U_LB_BREAK_BEFORE, 883), + Alias((int32_t) U_LB_BREAK_BOTH, 885), + Alias((int32_t) U_LB_BREAK_SYMBOLS, 887), + Alias((int32_t) U_LB_CARRIAGE_RETURN, 889), + Alias((int32_t) U_LB_CLOSE_PUNCTUATION, 891), + Alias((int32_t) U_LB_COMBINING_MARK, 893), + Alias((int32_t) U_LB_COMPLEX_CONTEXT, 895), + Alias((int32_t) U_LB_CONTINGENT_BREAK, 897), + Alias((int32_t) U_LB_EXCLAMATION, 899), + Alias((int32_t) U_LB_GLUE, 901), + Alias((int32_t) U_LB_H2, 903), + Alias((int32_t) U_LB_H3, 905), + Alias((int32_t) U_LB_HYPHEN, 907), + Alias((int32_t) U_LB_IDEOGRAPHIC, 909), + Alias((int32_t) U_LB_INFIX_NUMERIC, 911), + Alias((int32_t) U_LB_INSEPARABLE, 913), + Alias((int32_t) U_LB_JL, 916), + Alias((int32_t) U_LB_JT, 918), + Alias((int32_t) U_LB_JV, 920), + Alias((int32_t) U_LB_LINE_FEED, 922), + Alias((int32_t) U_LB_MANDATORY_BREAK, 924), + Alias((int32_t) U_LB_NEXT_LINE, 926), + Alias((int32_t) U_LB_NONSTARTER, 928), + Alias((int32_t) U_LB_NUMERIC, 34), + Alias((int32_t) U_LB_OPEN_PUNCTUATION, 930), + Alias((int32_t) U_LB_POSTFIX_NUMERIC, 932), + Alias((int32_t) U_LB_PREFIX_NUMERIC, 934), + Alias((int32_t) U_LB_QUOTATION, 936), + Alias((int32_t) U_LB_SPACE, 938), + Alias((int32_t) U_LB_SURROGATE, 940), + Alias((int32_t) U_LB_UNKNOWN, 942), + Alias((int32_t) U_LB_WORD_JOINER, 944), + Alias((int32_t) U_LB_ZWSPACE, 946), }; const int32_t VALUES_lccc_COUNT = 19; const Alias VALUES_lccc[] = { - Alias((int32_t) 0, 451), - Alias((int32_t) 1, 453), - Alias((int32_t) 200, 455), - Alias((int32_t) 202, 457), - Alias((int32_t) 216, 459), - Alias((int32_t) 218, 461), - Alias((int32_t) 220, 463), - Alias((int32_t) 222, 465), - Alias((int32_t) 224, 467), - Alias((int32_t) 226, 469), - Alias((int32_t) 228, 471), - Alias((int32_t) 230, 473), - Alias((int32_t) 232, 475), - Alias((int32_t) 233, 477), - Alias((int32_t) 234, 479), - Alias((int32_t) 240, 481), - Alias((int32_t) 7, 483), - Alias((int32_t) 8, 485), - Alias((int32_t) 9, 487), + Alias((int32_t) 0, 580), + Alias((int32_t) 1, 582), + Alias((int32_t) 200, 584), + Alias((int32_t) 202, 586), + Alias((int32_t) 216, 588), + Alias((int32_t) 218, 590), + Alias((int32_t) 220, 592), + Alias((int32_t) 222, 594), + Alias((int32_t) 224, 596), + Alias((int32_t) 226, 598), + Alias((int32_t) 228, 600), + Alias((int32_t) 230, 602), + Alias((int32_t) 232, 604), + Alias((int32_t) 233, 606), + Alias((int32_t) 234, 608), + Alias((int32_t) 240, 610), + Alias((int32_t) 7, 612), + Alias((int32_t) 8, 614), + Alias((int32_t) 9, 616), }; const int32_t VALUES_nt_COUNT = 4; const Alias VALUES_nt[] = { - Alias((int32_t) U_NT_DECIMAL, 808), - Alias((int32_t) U_NT_DIGIT, 810), - Alias((int32_t) U_NT_NONE, 812), - Alias((int32_t) U_NT_NUMERIC, 814), + Alias((int32_t) U_NT_DECIMAL, 948), + Alias((int32_t) U_NT_DIGIT, 950), + Alias((int32_t) U_NT_NONE, 952), + Alias((int32_t) U_NT_NUMERIC, 954), }; -const int32_t VALUES_sc_COUNT = 55; +const int32_t VALUES_sc_COUNT = 104; const Alias VALUES_sc[] = { - Alias((int32_t) USCRIPT_ARABIC, 816), - Alias((int32_t) USCRIPT_ARMENIAN, 818), - Alias((int32_t) USCRIPT_BENGALI, 820), - Alias((int32_t) USCRIPT_BOPOMOFO, 822), - Alias((int32_t) USCRIPT_BRAILLE, 824), - Alias((int32_t) USCRIPT_BUHID, 826), - Alias((int32_t) USCRIPT_CANADIAN_ABORIGINAL, 828), - Alias((int32_t) USCRIPT_CHEROKEE, 830), - Alias((int32_t) USCRIPT_COMMON, 832), - Alias((int32_t) USCRIPT_COPTIC, 834), - Alias((int32_t) USCRIPT_CYPRIOT, 836), - Alias((int32_t) USCRIPT_CYRILLIC, 838), - Alias((int32_t) USCRIPT_DESERET, 840), - Alias((int32_t) USCRIPT_DEVANAGARI, 842), - Alias((int32_t) USCRIPT_ETHIOPIC, 844), - Alias((int32_t) USCRIPT_GEORGIAN, 846), - Alias((int32_t) USCRIPT_GOTHIC, 848), - Alias((int32_t) USCRIPT_GREEK, 850), - Alias((int32_t) USCRIPT_GUJARATI, 852), - Alias((int32_t) USCRIPT_GURMUKHI, 854), - Alias((int32_t) USCRIPT_HAN, 856), - Alias((int32_t) USCRIPT_HANGUL, 858), - Alias((int32_t) USCRIPT_HANUNOO, 860), - Alias((int32_t) USCRIPT_HEBREW, 862), - Alias((int32_t) USCRIPT_HIRAGANA, 864), - Alias((int32_t) USCRIPT_INHERITED, 866), - Alias((int32_t) USCRIPT_KANNADA, 868), - Alias((int32_t) USCRIPT_KATAKANA, 870), - Alias((int32_t) USCRIPT_KATAKANA_OR_HIRAGANA, 872), - Alias((int32_t) USCRIPT_KHMER, 874), - Alias((int32_t) USCRIPT_LAO, 876), - Alias((int32_t) USCRIPT_LATIN, 878), - Alias((int32_t) USCRIPT_LIMBU, 880), - Alias((int32_t) USCRIPT_LINEAR_B, 882), - Alias((int32_t) USCRIPT_MALAYALAM, 884), - Alias((int32_t) USCRIPT_MONGOLIAN, 886), - Alias((int32_t) USCRIPT_MYANMAR, 888), - Alias((int32_t) USCRIPT_OGHAM, 890), - Alias((int32_t) USCRIPT_OLD_ITALIC, 892), - Alias((int32_t) USCRIPT_ORIYA, 894), - Alias((int32_t) USCRIPT_OSMANYA, 896), - Alias((int32_t) USCRIPT_RUNIC, 898), - Alias((int32_t) USCRIPT_SHAVIAN, 900), - Alias((int32_t) USCRIPT_SINHALA, 902), - Alias((int32_t) USCRIPT_SYRIAC, 904), - Alias((int32_t) USCRIPT_TAGALOG, 906), - Alias((int32_t) USCRIPT_TAGBANWA, 908), - Alias((int32_t) USCRIPT_TAI_LE, 910), - Alias((int32_t) USCRIPT_TAMIL, 912), - Alias((int32_t) USCRIPT_TELUGU, 914), - Alias((int32_t) USCRIPT_THAANA, 916), - Alias((int32_t) USCRIPT_THAI, 918), - Alias((int32_t) USCRIPT_TIBETAN, 920), - Alias((int32_t) USCRIPT_UGARITIC, 922), - Alias((int32_t) USCRIPT_YI, 924), + Alias((int32_t) USCRIPT_ARABIC, 956), + Alias((int32_t) USCRIPT_ARMENIAN, 958), + Alias((int32_t) USCRIPT_BALINESE, 960), + Alias((int32_t) USCRIPT_BATAK, 962), + Alias((int32_t) USCRIPT_BENGALI, 964), + Alias((int32_t) USCRIPT_BLISSYMBOLS, 966), + Alias((int32_t) USCRIPT_BOPOMOFO, 968), + Alias((int32_t) USCRIPT_BRAHMI, 970), + Alias((int32_t) USCRIPT_BRAILLE, 972), + Alias((int32_t) USCRIPT_BUGINESE, 974), + Alias((int32_t) USCRIPT_BUHID, 976), + Alias((int32_t) USCRIPT_CANADIAN_ABORIGINAL, 978), + Alias((int32_t) USCRIPT_CHAM, 980), + Alias((int32_t) USCRIPT_CHEROKEE, 982), + Alias((int32_t) USCRIPT_CIRTH, 984), + Alias((int32_t) USCRIPT_COMMON, 986), + Alias((int32_t) USCRIPT_COPTIC, 988), + Alias((int32_t) USCRIPT_CUNEIFORM, 991), + Alias((int32_t) USCRIPT_CYPRIOT, 993), + Alias((int32_t) USCRIPT_CYRILLIC, 995), + Alias((int32_t) USCRIPT_DEMOTIC_EGYPTIAN, 997), + Alias((int32_t) USCRIPT_DESERET, 999), + Alias((int32_t) USCRIPT_DEVANAGARI, 1001), + Alias((int32_t) USCRIPT_EASTERN_SYRIAC, 1003), + Alias((int32_t) USCRIPT_EGYPTIAN_HIEROGLYPHS, 1005), + Alias((int32_t) USCRIPT_ESTRANGELO_SYRIAC, 1007), + Alias((int32_t) USCRIPT_ETHIOPIC, 1009), + Alias((int32_t) USCRIPT_GEORGIAN, 1011), + Alias((int32_t) USCRIPT_GLAGOLITIC, 1013), + Alias((int32_t) USCRIPT_GOTHIC, 1015), + Alias((int32_t) USCRIPT_GREEK, 1017), + Alias((int32_t) USCRIPT_GUJARATI, 1019), + Alias((int32_t) USCRIPT_GURMUKHI, 1021), + Alias((int32_t) USCRIPT_HAN, 1023), + Alias((int32_t) USCRIPT_HANGUL, 1025), + Alias((int32_t) USCRIPT_HANUNOO, 1027), + Alias((int32_t) USCRIPT_HARAPPAN_INDUS, 1029), + Alias((int32_t) USCRIPT_HEBREW, 1031), + Alias((int32_t) USCRIPT_HIERATIC_EGYPTIAN, 1033), + Alias((int32_t) USCRIPT_HIRAGANA, 1035), + Alias((int32_t) USCRIPT_INHERITED, 1037), + Alias((int32_t) USCRIPT_JAVANESE, 1039), + Alias((int32_t) USCRIPT_KANNADA, 1041), + Alias((int32_t) USCRIPT_KATAKANA, 1043), + Alias((int32_t) USCRIPT_KATAKANA_OR_HIRAGANA, 1045), + Alias((int32_t) USCRIPT_KAYAH_LI, 1047), + Alias((int32_t) USCRIPT_KHAROSHTHI, 1049), + Alias((int32_t) USCRIPT_KHMER, 1051), + Alias((int32_t) USCRIPT_KHUTSURI, 1053), + Alias((int32_t) USCRIPT_LAO, 1055), + Alias((int32_t) USCRIPT_LATIN, 1057), + Alias((int32_t) USCRIPT_LATIN_FRAKTUR, 1059), + Alias((int32_t) USCRIPT_LATIN_GAELIC, 1061), + Alias((int32_t) USCRIPT_LEPCHA, 1063), + Alias((int32_t) USCRIPT_LIMBU, 1065), + Alias((int32_t) USCRIPT_LINEAR_A, 1067), + Alias((int32_t) USCRIPT_LINEAR_B, 1069), + Alias((int32_t) USCRIPT_MALAYALAM, 1071), + Alias((int32_t) USCRIPT_MANDAEAN, 1073), + Alias((int32_t) USCRIPT_MAYAN_HIEROGLYPHS, 1075), + Alias((int32_t) USCRIPT_MEROITIC, 1077), + Alias((int32_t) USCRIPT_MONGOLIAN, 1079), + Alias((int32_t) USCRIPT_MYANMAR, 1081), + Alias((int32_t) USCRIPT_NEW_TAI_LUE, 1083), + Alias((int32_t) USCRIPT_NKO, 1085), + Alias((int32_t) USCRIPT_OGHAM, 1087), + Alias((int32_t) USCRIPT_OLD_CHURCH_SLAVONIC_CYRILLIC, 1089), + Alias((int32_t) USCRIPT_OLD_HUNGARIAN, 1091), + Alias((int32_t) USCRIPT_OLD_ITALIC, 1093), + Alias((int32_t) USCRIPT_OLD_PERMIC, 1095), + Alias((int32_t) USCRIPT_OLD_PERSIAN, 1097), + Alias((int32_t) USCRIPT_ORIYA, 1099), + Alias((int32_t) USCRIPT_ORKHON, 1101), + Alias((int32_t) USCRIPT_OSMANYA, 1103), + Alias((int32_t) USCRIPT_PAHAWH_HMONG, 1105), + Alias((int32_t) USCRIPT_PHAGS_PA, 1107), + Alias((int32_t) USCRIPT_PHOENICIAN, 1109), + Alias((int32_t) USCRIPT_PHONETIC_POLLARD, 1111), + Alias((int32_t) USCRIPT_RONGORONGO, 1113), + Alias((int32_t) USCRIPT_RUNIC, 1115), + Alias((int32_t) USCRIPT_SARATI, 1117), + Alias((int32_t) USCRIPT_SHAVIAN, 1119), + Alias((int32_t) USCRIPT_SIMPLIFIED_HAN, 1121), + Alias((int32_t) USCRIPT_SINHALA, 1123), + Alias((int32_t) USCRIPT_SYLOTI_NAGRI, 1125), + Alias((int32_t) USCRIPT_SYRIAC, 1127), + Alias((int32_t) USCRIPT_TAGALOG, 1129), + Alias((int32_t) USCRIPT_TAGBANWA, 1131), + Alias((int32_t) USCRIPT_TAI_LE, 1133), + Alias((int32_t) USCRIPT_TAMIL, 1135), + Alias((int32_t) USCRIPT_TELUGU, 1137), + Alias((int32_t) USCRIPT_TENGWAR, 1139), + Alias((int32_t) USCRIPT_THAANA, 1141), + Alias((int32_t) USCRIPT_THAI, 1143), + Alias((int32_t) USCRIPT_TIBETAN, 1145), + Alias((int32_t) USCRIPT_TIFINAGH, 1147), + Alias((int32_t) USCRIPT_TRADITIONAL_HAN, 1149), + Alias((int32_t) USCRIPT_UGARITIC, 1151), + Alias((int32_t) USCRIPT_UNKNOWN, 1153), + Alias((int32_t) USCRIPT_UNWRITTEN_LANGUAGES, 1155), + Alias((int32_t) USCRIPT_VAI, 1157), + Alias((int32_t) USCRIPT_VISIBLE_SPEECH, 1159), + Alias((int32_t) USCRIPT_WESTERN_SYRIAC, 1161), + Alias((int32_t) USCRIPT_YI, 1163), }; const int32_t VALUES_tccc_COUNT = 19; const Alias VALUES_tccc[] = { - Alias((int32_t) 0, 451), - Alias((int32_t) 1, 453), - Alias((int32_t) 200, 455), - Alias((int32_t) 202, 457), - Alias((int32_t) 216, 459), - Alias((int32_t) 218, 461), - Alias((int32_t) 220, 463), - Alias((int32_t) 222, 465), - Alias((int32_t) 224, 467), - Alias((int32_t) 226, 469), - Alias((int32_t) 228, 471), - Alias((int32_t) 230, 473), - Alias((int32_t) 232, 475), - Alias((int32_t) 233, 477), - Alias((int32_t) 234, 479), - Alias((int32_t) 240, 481), - Alias((int32_t) 7, 483), - Alias((int32_t) 8, 485), - Alias((int32_t) 9, 487), + Alias((int32_t) 0, 580), + Alias((int32_t) 1, 582), + Alias((int32_t) 200, 584), + Alias((int32_t) 202, 586), + Alias((int32_t) 216, 588), + Alias((int32_t) 218, 590), + Alias((int32_t) 220, 592), + Alias((int32_t) 222, 594), + Alias((int32_t) 224, 596), + Alias((int32_t) 226, 598), + Alias((int32_t) 228, 600), + Alias((int32_t) 230, 602), + Alias((int32_t) 232, 604), + Alias((int32_t) 233, 606), + Alias((int32_t) 234, 608), + Alias((int32_t) 240, 610), + Alias((int32_t) 7, 612), + Alias((int32_t) 8, 614), + Alias((int32_t) 9, 616), }; -const int32_t PROPERTY_COUNT = 75; +const int32_t PROPERTY_COUNT = 85; const Property PROPERTY[] = { - Property((int32_t) UCHAR_ALPHABETIC, 6, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_ASCII_HEX_DIGIT, 8, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_BIDI_CONTROL, 10, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_BIDI_MIRRORED, 12, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_CASE_SENSITIVE, 14, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_DASH, 16, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_DEFAULT_IGNORABLE_CODE_POINT, 18, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_DEPRECATED, 20, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_DIACRITIC, 22, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_EXTENDER, 24, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_FULL_COMPOSITION_EXCLUSION, 26, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_GRAPHEME_BASE, 28, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_GRAPHEME_EXTEND, 30, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_GRAPHEME_LINK, 32, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_HEX_DIGIT, 34, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_HYPHEN, 36, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_IDEOGRAPHIC, 38, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_IDS_BINARY_OPERATOR, 40, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_IDS_TRINARY_OPERATOR, 42, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_ID_CONTINUE, 44, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_ID_START, 46, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_JOIN_CONTROL, 48, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_LOGICAL_ORDER_EXCEPTION, 50, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_LOWERCASE, 52, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_MATH, 54, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_NFC_INERT, 56, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_NFD_INERT, 58, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_NFKC_INERT, 60, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_NFKD_INERT, 62, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_NONCHARACTER_CODE_POINT, 64, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_QUOTATION_MARK, 66, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_RADICAL, 68, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_SEGMENT_STARTER, 70, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_SOFT_DOTTED, 72, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_S_TERM, 74, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_TERMINAL_PUNCTUATION, 76, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_UNIFIED_IDEOGRAPH, 78, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_UPPERCASE, 80, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_VARIATION_SELECTOR, 82, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_WHITE_SPACE, 84, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_XID_CONTINUE, 86, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_XID_START, 88, VALUES_binprop_COUNT, VALUES_binprop), - Property((int32_t) UCHAR_BIDI_CLASS, 92, VALUES_bc_COUNT, VALUES_bc), - Property((int32_t) UCHAR_BLOCK, 94, VALUES_blk_COUNT, VALUES_blk), - Property((int32_t) UCHAR_CANONICAL_COMBINING_CLASS, 96, VALUES_ccc_COUNT, VALUES_ccc), - Property((int32_t) UCHAR_DECOMPOSITION_TYPE, 98, VALUES_dt_COUNT, VALUES_dt), - Property((int32_t) UCHAR_EAST_ASIAN_WIDTH, 100, VALUES_ea_COUNT, VALUES_ea), - Property((int32_t) UCHAR_GENERAL_CATEGORY, 102, VALUES_gc_COUNT, VALUES_gc), - Property((int32_t) UCHAR_HANGUL_SYLLABLE_TYPE, 104, VALUES_hst_COUNT, VALUES_hst), - Property((int32_t) UCHAR_JOINING_GROUP, 106, VALUES_jg_COUNT, VALUES_jg), - Property((int32_t) UCHAR_JOINING_TYPE, 108, VALUES_jt_COUNT, VALUES_jt), - Property((int32_t) UCHAR_LEAD_CANONICAL_COMBINING_CLASS, 110, VALUES_lccc_COUNT, VALUES_lccc), - Property((int32_t) UCHAR_LINE_BREAK, 112, VALUES_lb_COUNT, VALUES_lb), - Property((int32_t) UCHAR_NFC_QUICK_CHECK, 114, VALUES_NFC_QC_COUNT, VALUES_NFC_QC), - Property((int32_t) UCHAR_NFD_QUICK_CHECK, 116, VALUES_NFD_QC_COUNT, VALUES_NFD_QC), - Property((int32_t) UCHAR_NFKC_QUICK_CHECK, 118, VALUES_NFKC_QC_COUNT, VALUES_NFKC_QC), - Property((int32_t) UCHAR_NFKD_QUICK_CHECK, 120, VALUES_NFKD_QC_COUNT, VALUES_NFKD_QC), - Property((int32_t) UCHAR_NUMERIC_TYPE, 122, VALUES_nt_COUNT, VALUES_nt), - Property((int32_t) UCHAR_SCRIPT, 124, VALUES_sc_COUNT, VALUES_sc), - Property((int32_t) UCHAR_TRAIL_CANONICAL_COMBINING_CLASS, 126, VALUES_tccc_COUNT, VALUES_tccc), - Property((int32_t) UCHAR_AGE, 130, 0, NULL), - Property((int32_t) UCHAR_BIDI_MIRRORING_GLYPH, 132, 0, NULL), - Property((int32_t) UCHAR_CASE_FOLDING, 134, 0, NULL), - Property((int32_t) UCHAR_ISO_COMMENT, 136, 0, NULL), - Property((int32_t) UCHAR_LOWERCASE_MAPPING, 138, 0, NULL), - Property((int32_t) UCHAR_NAME, 140, 0, NULL), - Property((int32_t) UCHAR_SIMPLE_CASE_FOLDING, 142, 0, NULL), - Property((int32_t) UCHAR_SIMPLE_LOWERCASE_MAPPING, 144, 0, NULL), - Property((int32_t) UCHAR_SIMPLE_TITLECASE_MAPPING, 146, 0, NULL), - Property((int32_t) UCHAR_SIMPLE_UPPERCASE_MAPPING, 148, 0, NULL), - Property((int32_t) UCHAR_TITLECASE_MAPPING, 150, 0, NULL), - Property((int32_t) UCHAR_UNICODE_1_NAME, 152, 0, NULL), - Property((int32_t) UCHAR_UPPERCASE_MAPPING, 154, 0, NULL), - Property((int32_t) UCHAR_NUMERIC_VALUE, 90, 0, NULL), - Property((int32_t) UCHAR_GENERAL_CATEGORY_MASK, 128, VALUES_gcm_COUNT, VALUES_gcm), + Property((int32_t) UCHAR_ALPHABETIC, 56, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_ASCII_HEX_DIGIT, 58, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_BIDI_CONTROL, 60, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_BIDI_MIRRORED, 62, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_CASE_SENSITIVE, 64, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_DASH, 66, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_DEFAULT_IGNORABLE_CODE_POINT, 68, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_DEPRECATED, 70, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_DIACRITIC, 72, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_EXTENDER, 74, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_FULL_COMPOSITION_EXCLUSION, 76, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_GRAPHEME_BASE, 78, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_GRAPHEME_EXTEND, 80, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_GRAPHEME_LINK, 82, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_HEX_DIGIT, 84, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_HYPHEN, 86, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_IDEOGRAPHIC, 88, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_IDS_BINARY_OPERATOR, 90, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_IDS_TRINARY_OPERATOR, 92, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_ID_CONTINUE, 94, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_ID_START, 96, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_JOIN_CONTROL, 98, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_LOGICAL_ORDER_EXCEPTION, 100, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_LOWERCASE, 102, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_MATH, 104, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_NFC_INERT, 106, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_NFD_INERT, 108, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_NFKC_INERT, 110, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_NFKD_INERT, 112, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_NONCHARACTER_CODE_POINT, 114, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_PATTERN_SYNTAX, 116, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_PATTERN_WHITE_SPACE, 118, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_POSIX_ALNUM, 120, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_POSIX_BLANK, 122, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_POSIX_GRAPH, 124, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_POSIX_PRINT, 126, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_POSIX_XDIGIT, 128, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_QUOTATION_MARK, 130, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_RADICAL, 132, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_SEGMENT_STARTER, 134, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_SOFT_DOTTED, 136, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_S_TERM, 138, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_TERMINAL_PUNCTUATION, 140, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_UNIFIED_IDEOGRAPH, 142, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_UPPERCASE, 144, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_VARIATION_SELECTOR, 146, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_WHITE_SPACE, 148, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_XID_CONTINUE, 151, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_XID_START, 153, VALUES_binprop_COUNT, VALUES_binprop), + Property((int32_t) UCHAR_BIDI_CLASS, 157, VALUES_bc_COUNT, VALUES_bc), + Property((int32_t) UCHAR_BLOCK, 159, VALUES_blk_COUNT, VALUES_blk), + Property((int32_t) UCHAR_CANONICAL_COMBINING_CLASS, 161, VALUES_ccc_COUNT, VALUES_ccc), + Property((int32_t) UCHAR_DECOMPOSITION_TYPE, 163, VALUES_dt_COUNT, VALUES_dt), + Property((int32_t) UCHAR_EAST_ASIAN_WIDTH, 165, VALUES_ea_COUNT, VALUES_ea), + Property((int32_t) UCHAR_GENERAL_CATEGORY, 167, VALUES_gc_COUNT, VALUES_gc), + Property((int32_t) UCHAR_GRAPHEME_CLUSTER_BREAK, 169, VALUES_GCB_COUNT, VALUES_GCB), + Property((int32_t) UCHAR_HANGUL_SYLLABLE_TYPE, 171, VALUES_hst_COUNT, VALUES_hst), + Property((int32_t) UCHAR_JOINING_GROUP, 173, VALUES_jg_COUNT, VALUES_jg), + Property((int32_t) UCHAR_JOINING_TYPE, 175, VALUES_jt_COUNT, VALUES_jt), + Property((int32_t) UCHAR_LEAD_CANONICAL_COMBINING_CLASS, 177, VALUES_lccc_COUNT, VALUES_lccc), + Property((int32_t) UCHAR_LINE_BREAK, 179, VALUES_lb_COUNT, VALUES_lb), + Property((int32_t) UCHAR_NFC_QUICK_CHECK, 181, VALUES_NFC_QC_COUNT, VALUES_NFC_QC), + Property((int32_t) UCHAR_NFD_QUICK_CHECK, 183, VALUES_NFD_QC_COUNT, VALUES_NFD_QC), + Property((int32_t) UCHAR_NFKC_QUICK_CHECK, 185, VALUES_NFKC_QC_COUNT, VALUES_NFKC_QC), + Property((int32_t) UCHAR_NFKD_QUICK_CHECK, 187, VALUES_NFKD_QC_COUNT, VALUES_NFKD_QC), + Property((int32_t) UCHAR_NUMERIC_TYPE, 189, VALUES_nt_COUNT, VALUES_nt), + Property((int32_t) UCHAR_SCRIPT, 191, VALUES_sc_COUNT, VALUES_sc), + Property((int32_t) UCHAR_SENTENCE_BREAK, 193, VALUES_SB_COUNT, VALUES_SB), + Property((int32_t) UCHAR_TRAIL_CANONICAL_COMBINING_CLASS, 195, VALUES_tccc_COUNT, VALUES_tccc), + Property((int32_t) UCHAR_WORD_BREAK, 197, VALUES_WB_COUNT, VALUES_WB), + Property((int32_t) UCHAR_AGE, 201, 0, NULL), + Property((int32_t) UCHAR_BIDI_MIRRORING_GLYPH, 203, 0, NULL), + Property((int32_t) UCHAR_CASE_FOLDING, 205, 0, NULL), + Property((int32_t) UCHAR_ISO_COMMENT, 207, 0, NULL), + Property((int32_t) UCHAR_LOWERCASE_MAPPING, 209, 0, NULL), + Property((int32_t) UCHAR_NAME, 211, 0, NULL), + Property((int32_t) UCHAR_SIMPLE_CASE_FOLDING, 213, 0, NULL), + Property((int32_t) UCHAR_SIMPLE_LOWERCASE_MAPPING, 215, 0, NULL), + Property((int32_t) UCHAR_SIMPLE_TITLECASE_MAPPING, 217, 0, NULL), + Property((int32_t) UCHAR_SIMPLE_UPPERCASE_MAPPING, 219, 0, NULL), + Property((int32_t) UCHAR_TITLECASE_MAPPING, 221, 0, NULL), + Property((int32_t) UCHAR_UNICODE_1_NAME, 223, 0, NULL), + Property((int32_t) UCHAR_UPPERCASE_MAPPING, 225, 0, NULL), + Property((int32_t) UCHAR_NUMERIC_VALUE, 155, 0, NULL), + Property((int32_t) UCHAR_GENERAL_CATEGORY_MASK, 199, VALUES_gcm_COUNT, VALUES_gcm), }; /*eof*/ diff --git a/icuSources/tools/genpname/genpname.cpp b/icuSources/tools/genpname/genpname.cpp index b2df4d5c..bfaeac01 100644 --- a/icuSources/tools/genpname/genpname.cpp +++ b/icuSources/tools/genpname/genpname.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -162,10 +162,13 @@ void die(const char* msg) { */ class AliasList { public: + virtual ~AliasList(); virtual const Alias& operator[](int32_t i) const = 0; virtual int32_t count() const = 0; }; +AliasList::~AliasList() {} + /** * A single array. */ diff --git a/icuSources/tools/genpname/genpname.dsp b/icuSources/tools/genpname/genpname.dsp deleted file mode 100644 index 1b38e485..00000000 --- a/icuSources/tools/genpname/genpname.dsp +++ /dev/null @@ -1,198 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genpname" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genpname - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "genpname.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "genpname.mak" CFG="genpname - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genpname - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genpname - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "genpname - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genpname - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genpname - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\genpname.exe -InputPath=.\Release\genpname.exe -InputName=genpname -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genpname - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\genpname.exe -InputPath=.\Debug\genpname.exe -InputName=genpname -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genpname - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\genpname.exe -InputPath=.\Release\genpname.exe -InputName=genpname -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genpname - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\genpname.exe -InputPath=.\Debug\genpname.exe -InputName=genpname -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "genpname - Win32 Release" -# Name "genpname - Win32 Debug" -# Name "genpname - Win64 Release" -# Name "genpname - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\genpname.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/genpname/genpname.vcproj b/icuSources/tools/genpname/genpname.vcproj index 5ec0debb..3e920244 100644 --- a/icuSources/tools/genpname/genpname.vcproj +++ b/icuSources/tools/genpname/genpname.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\..\i18n,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/genpname.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\..\i18n,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/genpname.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/genpname/gensvpa.pl b/icuSources/tools/genpname/gensvpa.pl new file mode 100644 index 00000000..bcbf1cc4 --- /dev/null +++ b/icuSources/tools/genpname/gensvpa.pl @@ -0,0 +1,161 @@ +#!/usr/bin/perl +#* +#******************************************************************************* +#* Copyright (C) 2006, International Business Machines +#* Corporation and others. All Rights Reserved. +#******************************************************************************* +#* +#* file name: genspva.pl +#* encoding: US-ASCII +#* tab size: 8 (not used) +#* indentation:4 +#* +#* Created by: Ram Viswanadha +#* +#* This file filters iso15924-utf8-<date>.txt +#* + +use File::Find; +use File::Basename; +use IO::File; +use Cwd; +use File::Copy; +use Getopt::Long; +use File::Path; +use File::Copy; + +#run the program +main(); + +#--------------------------------------------------------------------- +# The main program + +sub main(){ + GetOptions( + "--destdir=s" => \$destdir, + "--iso15924=s" => \$iso, + "--prop=s" => \$prop, + "--code-start=s" => \$code, + ); + usage() unless defined $destdir; + usage() unless defined $iso; + usage() unless defined $prop; + + $outfile = "$destdir/SyntheticPropertyValueAliases.txt"; + $propFH = IO::File->new($prop,"r") + or die "could not open the file $prop for reading: $! \n"; + $isoFH = IO::File->new($iso,"r") + or die "could not open the file $iso for reading: $! \n"; + $outFH = IO::File->new($outfile,"w") + or die "could not open the file $outfile for reading: $! \n"; + my @propLines; + while (<$propFH>) { + next if(!($_ =~/sc ; /)); + push(@propLines, $_); + } + printHeader($outFH); + if(defined $code){ + print "Please add the following to UScriptCode enum in uscript.h.\n"; + print "#ifndef U_HIDE_DRAFT_API\n"; + } + while (<$isoFH>) { + next if($_=~/^#/);#skip if the line starts with a comment char + ($script, $t, $name, $rest) = split(/;/,$_,4); + #sc ; Arab + $outstr = "sc ; $script"; + $encoded = 0; #false + + # seach the propLines to make sure that this scipt code is not + # encoded in Unicode + foreach $key (@propLines){ + if($key =~ /$outstr/){ + $encoded = 1; + } + } + next if($encoded == 1); + #ignore private use codes + next if($script =~ /Qa[ab][a-z]/); + + #if($script eq "Qaaa"){ + # $outstr = $outstr." ; Private_Use_Start\n"; + #}elsif($script eq "Qabx"){ + # $outstr = $outstr." ; Private_Use_End\n"; + #}else{ + # $outstr = $outstr." ; $script \n"; + #} + + $outstr = $outstr." ; $script \n"; + print $outFH $outstr; + + #print to console + if(defined $code){ + if($name =~ /[(\s,\x80-\xFF]/){ + $name = $script; + } + $name =~s/-/_/g; + + $scriptcode = "USCRIPT_".uc($name); + print " $scriptcode = $code, /* $script */\n"; + $code++; + } + + } + if(defined $code){ + print "#endif /* U_HIDE_DRAFT_API */\n"; + } + for($i=0; $i<2; $i++){ + + } + close($isoFH); + close($propFH); + close($outFH); +} +#----------------------------------------------------------------------- +sub printHeader{ + ($outFH) = @_; + ($DAY, $MONTH, $YEAR) = (localtime)[3,4,5]; + $YEAR += 1900; + #We will print our copyright here + warnings +print $outFH <<END_HEADER_COMMENT; +######################################################################## +# Copyright (c) 2006-$YEAR, International Business Machines +# Corporation and others. All Rights Reserved. +######################################################################## +# file name: SyntheticPropertyValueAliases.txt +# encoding: US-ASCII +# tab size: 8 (not used) +# indentation: 4 +# created by: gensvpa.pl +######################################################################## + +# This file follows the format of PropertyValueAliases.txt +# It contains synthetic property value aliases not present +# in the UCD. Unlike PropertyValueAliases.txt, it should +# NOT contain a version number. + +######################################################################## +# THIS FILE IS MACHINE-GENERATED, DON'T PLAY WITH IT IF YOU DON'T KNOW +# WHAT YOU ARE DOING, OTHERWISE VERY BAD THINGS WILL HAPPEN! +######################################################################## + +# set the same names as short and long names to fit the syntax without +# inventing names that we would have to support forever + +# Script (sc) + +END_HEADER_COMMENT +} +#----------------------------------------------------------------------- +sub usage { + print << "END"; +Usage: +gensvpa.pl +Options: + --destdir=<directory> + --iso15924=<file name> + --prop=<PropertyValueAliases.txt> + --code-start=s +e.g.: gensvpa.pl --destdir=<icu>/source/tools/genpname --iso15924=iso15924-utf8-20041025.txt --prop=<icu>/source/data/unidata --code-start=60 +END + exit(0); +} \ No newline at end of file diff --git a/icuSources/tools/genpname/preparse.pl b/icuSources/tools/genpname/preparse.pl index 5925d223..3e6c9704 100644 --- a/icuSources/tools/genpname/preparse.pl +++ b/icuSources/tools/genpname/preparse.pl @@ -1,7 +1,7 @@ #!/bin/perl -w #******************************************************************* # COPYRIGHT: -# Copyright (c) 2002-2004, International Business Machines Corporation and +# Copyright (c) 2002-2006, International Business Machines Corporation and # others. All Rights Reserved. #******************************************************************* @@ -65,6 +65,10 @@ my $UNIDATA_DIR = "$ICU_DIR/source/data/unidata"; # Get the current year from the system my $YEAR = 1900+@{[localtime]}[5]; # Get the current year +# Used to make "n/a" property [value] aliases (Unicode or Synthetic) unique +my $propNA = 0; +my $valueNA = 0; + #---------------------------------------------------------------------- # Top level property keys for binary, enumerated, string, and double props my @TOP = qw( _bp _ep _sp _dp _mp ); @@ -102,6 +106,16 @@ my %UNSUPPORTED = (Composition_Exclusion => 1, # missing. my %MISSING_FROM_UCHAR; +# Additional property aliases beyond short and long names, +# like space in addition to WSpace and White_Space in Unicode 4.1. +# Hashtable, maps long name to alias. +# For example, maps White_Space->space. +# +# If multiple additional aliases are defined, +# then they are separated in the value string with '|'. +# For example, White_Space->space|outer_space +my %additional_property_aliases; + #---------------------------------------------------------------------- # Emitted class names @@ -294,7 +308,7 @@ END $i = $groupToInt{$groupString}; } else { my @names = split(/\|/, $groupString); - die "Error: Wrong number of names in " . $groupString if (@names < 2); + die "Error: Wrong number of names in " . $groupString if (@names < 1); $i = @nameGroups; # index of group we are making $groupToInt{$groupString} = $i; # Cache for reuse push @nameGroups, map { $stringToID{$_} } @names; @@ -415,7 +429,9 @@ sub readAndMerge { my $pa = {}; read_PropertyAliases($pa, "$unidataDir/PropertyAliases.txt"); read_PropertyAliases($pa, "SyntheticPropertyAliases.txt"); - my $va = read_PropertyValueAliases("$unidataDir/PropertyValueAliases.txt"); + my $va = {}; + read_PropertyValueAliases($va, "$unidataDir/PropertyValueAliases.txt"); + read_PropertyValueAliases($va, "SyntheticPropertyValueAliases.txt"); # Extract property family hash my $fam = $pa->{'_family'}; @@ -574,14 +590,29 @@ sub merge_PropertyAliases { for my $subh (map { $h->{$_} } @TOP) { for my $enum (keys %$subh) { - my $name = $subh->{$enum}; - die "Error: Property $name not found (or used more than once)" - unless (exists $pa->{$name}); + my $long_name = $subh->{$enum}; + if (!exists $pa->{$long_name}) { + die "Error: Property $long_name not found (or used more than once)"; + } - $subh->{$enum} = $pa->{$name} . "|" . $name; - delete $pa->{$name}; + my $value; + if($pa->{$long_name} =~ m|^n/a\d*$|) { + # replace an "n/a" short name with an empty name (nothing before "|"); + # don't remove it (don't remove the "|"): there must always be a long name, + # and if the short name is removed, then the long name becomes the + # short name and there is no long name left (unless there is another alias) + $value = "|" . $long_name; + } else { + $value = $pa->{$long_name} . "|" . $long_name; + } + if (exists $additional_property_aliases{$long_name}) { + $value .= "|" . $additional_property_aliases{$long_name}; + } + $subh->{$enum} = $value; + delete $pa->{$long_name}; } } + my @err; for my $name (keys %$pa) { $MISSING_FROM_UCHAR{$pa->{$name}} = 1; @@ -639,7 +670,7 @@ sub merge_PropertyValueAliases { # look up both long and short & ignore case my $n; if (exists $pva->{$name}) { - $n = $name; + $n = $name; } else { # iterate (slow) for my $a (keys %$pva) { @@ -652,7 +683,7 @@ sub merge_PropertyValueAliases { } } } - + # For blocks, do a loose match from Blocks.txt pseudo-name # to PropertyValueAliases long name. if (!$n && $prop eq 'blk') { @@ -672,9 +703,9 @@ sub merge_PropertyValueAliases { my $l = $n; my $r = $pva->{$n}; - # convert |n/a\d+| to blank - $l = '' if ($l =~ m|^n/a\d+$|); - $r = '' if ($r =~ m|^n/a\d+$|); + # convert |n/a\d*| to blank + $l = '' if ($l =~ m|^n/a\d*$|); + $r = '' if ($r =~ m|^n/a\d*$|); $hh->{$enum} = "$l|$r"; # Don't delete the 'gc' properties because we need to share @@ -768,14 +799,42 @@ sub read_PropertyAliases { s/\#.*//; next unless (/\S/); - if (/^\s*(.+?)\s*;\s*(.+?)\s*$/i) { - die "Error: Duplicate property $1 in $filename" - if (exists $hash->{$2}); - $hash->{$2} = $1; - $fam->{$2} = $family; - } + if (/^\s*(.+?)\s*;/) { + my $short = $1; + my @fields = /;\s*([^\s;]+)/g; + if (@fields < 1 || @fields > 2) { + my $number = @fields; + die "Error: Wrong number of fields ($number) in $filename at $_"; + } - else { + # Make "n/a" strings unique + if ($short eq 'n/a') { + $short .= sprintf("%03d", $propNA++); + } + my $long = $fields[0]; + if ($long eq 'n/a') { + $long .= sprintf("%03d", $propNA++); + } + + # Add long name->short name to the hash=pa hash table + if (exists $hash->{$long}) { + die "Error: Duplicate property $long in $filename" + } + $hash->{$long} = $short; + $fam->{$long} = $family; + + # Add the list of further aliases to the additional_property_aliases hash table, + # using the long property name as the key. + # For example: + # White_Space->space|outer_space + if (@fields > 1) { + my $value = pop @fields; + while (@fields > 1) { + $value .= "|" . pop @fields; + } + $additional_property_aliases{$long} = $value; + } + } else { die "Error: Can't parse $_ in $filename"; } } @@ -797,15 +856,13 @@ sub read_PropertyAliases { # @return a hash reference. sub read_PropertyValueAliases { - my $filename = shift; + my $hash = shift; # result - my $hash = {}; # result + my $filename = shift; my $in = new FileHandle($filename, 'r'); die "Error: Cannot open $filename" if (!defined $in); - my $sym = 0; # Used to make "n/a" strings unique - while (<$in>) { # Read version (embedded in a comment) @@ -822,10 +879,10 @@ sub read_PropertyValueAliases { if (/^\s*(.+?)\s*;/i) { my $prop = $1; my @fields = /;\s*([^\s;]+)/g; - die "Error: Wrong number of fields" + die "Error: Wrong number of fields in $filename" if (@fields < 2 || @fields > 3); # Make "n/a" strings unique - $fields[0] .= sprintf("%03d", $sym++) if ($fields[0] eq 'n/a'); + $fields[0] .= sprintf("%03d", $valueNA++) if ($fields[0] eq 'n/a'); # Squash extra fields together while (@fields > 2) { my $f = pop @fields; @@ -841,18 +898,21 @@ sub read_PropertyValueAliases { $in->close(); - # Script Qaac (Coptic) is a special case. Handle it here. See UTR#24: - # http://www.unicode.org/unicode/reports/tr24/ + # Script Copt=Qaac (Coptic) is a special case. + # Before the Copt code was defined, the private-use code Qaac was used. + # Starting with Unicode 4.1, PropertyValueAliases.txt contains + # Copt as the short name as well as Qaac as an alias. + # For use with older Unicode data files, we add here a Qaac->Coptic entry. + # This should not do anything for 4.1-and-later Unicode data files. + # See also UAX #24: Script Names http://www.unicode.org/unicode/reports/tr24/ $hash->{'sc'}->{'Qaac'} = 'Coptic' - unless (exists $hash->{'sc'}->{'Qaac'}); + unless (exists $hash->{'sc'}->{'Qaac'} || exists $hash->{'sc'}->{'Copt'}); # Add T|True and F|False -- these are values we recognize for # binary properties (NOT from PropertyValueAliases.txt). These # are of the same form as the 'ccc' value aliases. $hash->{'binprop'}->{'0'} = 'F|False'; $hash->{'binprop'}->{'1'} = 'T|True'; - - $hash; } #---------------------------------------------------------------------- @@ -899,7 +959,7 @@ sub read_Blocks { s/\#.*//; next unless (/\S/); - if (/^([0-9a-f]+)\.\.[0-9a-f]+;\s*(.+?)\s*$/i) { + if (/^([0-9a-f]+)\.\.[0-9a-f]+\s*;\s*(.+?)\s*$/i) { die "Error: Duplicate range $1 in $filename" if (exists $hash->{$1}); $hash->{$1} = $2; @@ -1132,6 +1192,24 @@ sub read_uchar { } } + elsif ($mode eq 'UGraphemeClusterBreak') { + if (m|^\s*(U_GCB_\w+).+?/\*\[(.+?)\]\*/|) { + addDatum($hash, 'GCB', $1, $2); + } + } + + elsif ($mode eq 'UWordBreakValues') { + if (m|^\s*(U_WB_\w+).+?/\*\[(.+?)\]\*/|) { + addDatum($hash, 'WB', $1, $2); + } + } + + elsif ($mode eq 'USentenceBreak') { + if (m|^\s*(U_SB_\w+).+?/\*\[(.+?)\]\*/|) { + addDatum($hash, 'SB', $1, $2); + } + } + elsif ($mode eq 'ULineBreak') { if (m|^\s*(U_LB_\w+).+?/\*\[(.+?)\]\*/|) { addDatum($hash, 'lb', $1, $2); diff --git a/icuSources/tools/genprops/Makefile.in b/icuSources/tools/genprops/Makefile.in index 2f63f60e..3fd2fe97 100644 --- a/icuSources/tools/genprops/Makefile.in +++ b/icuSources/tools/genprops/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/genprops -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -11,16 +11,15 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/genprops TARGET_STUB_NAME = genprops SECTION = 8 -MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) +#MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/genprops ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) $(MAN_FILES) @@ -28,17 +27,19 @@ CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = genprops.o props2.o store.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -54,24 +55,12 @@ check: all check-local all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man - $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) - $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) +# $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) +# $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) -# man page install-man: $(MAN_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $< $(DESTDIR)$(mandir)/man$(SECTION) - -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -# build postscript and pdf formats -#$(TARGET).ps: $(TARGET).$(SECTION) -# groff -man < $< > $@ - -#$(TARGET).pdf: $(TARGET).ps -# ps2pdf $< $@ +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: @@ -91,6 +80,12 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(TARGET) : $(OBJECTS) $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) else diff --git a/icuSources/tools/genprops/genprops.8.in b/icuSources/tools/genprops/genprops.8.in deleted file mode 100644 index e161c877..00000000 --- a/icuSources/tools/genprops/genprops.8.in +++ /dev/null @@ -1,126 +0,0 @@ -.\" Hey, Emacs! This is -*-nroff-*- you know... -.\" -.\" genprops.8: manual page for the genprops utility -.\" -.\" Copyright (C) 2000-2001 IBM, Inc. and others. -.\" -.TH GENPROPS 8 "16 January 2001" "ICU MANPAGE" "ICU @VERSION@ Manual" -.SH NAME -.B genprops -\- compile properties from the Unicode Character Database -.SH SYNOPSIS -.B genprops -[ -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -] -[ -.BR "\-v\fP, \fB\-\-verbose" -] -[ -.BI "\-u\fP, \fB\-\-unicode" " version" -] -[ -.BI "\-c\fP, \fB\-\-copyright" -] -[ -.BI "\-s\fP, \fB\-\-sourcedir" " source" -] -[ -.BI "\-d\fP, \fB\-\-destdir" " destination" -] -[ -.I suffix -] -.SH DESCRIPTION -.B genprops -reads some of the Unicode Character Database files and compiles their -information information into a binary form. -The resulting file, -.BR icudata.dat , -can then be read directly by ICU, or used by -.BR pkgdata (8) -for incorporation into a larger archive or library. -.LP -The files read by -.B genprops -are described in the -.B FILES -section. If -.I suffix -is passed on the command line, the names of these files will actually -be changed to include a dash followed by -.I suffix -in their basename. For example, the file -.B UnicodeData.txt -would be looked for under the name -.BR UnicodeData\-\fIsuffix\fP.txt . -.SH OPTIONS -.TP -.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" -Print help about usage and exit. -.TP -.BR "\-v\fP, \fB\-\-verbose" -Display extra informative messages during execution. -.TP -.BI "\-u\fP, \fB\-\-unicode" " version" -Specify which -.I version -of Unicode the Unicode Character Database refers to. -Defaults to -.BR 3.0.0 . -.TP -.BI "\-c\fP, \fB\-\-copyright" -Include a copyright notice into the binary data. -.TP -.BI "\-s\fP, \fB\-\-sourcedir" " source" -Set the source directory to -.IR source . -The default source directory is specified by the environment variable -.BR ICU_DATA . -.TP -.BI "\-d\fP, \fB\-\-destdir" " destination" -Set the destination directory to -.IR destination . -The default destination directory is specified by the environment variable -.BR ICU_DATA . -.SH ENVIRONMENT -.TP 10 -.B ICU_DATA -Specifies the directory containing ICU data. Defaults to -.BR @thepkgicudatadir@/@PACKAGE@/@VERSION@/ . -Some tools in ICU depend on the presence of the trailing slash. It is thus -important to make sure that it is present if -.B ICU_DATA -is set. -.SH FILES -The following files are read by -.B genprops -and are looked for in the -.I source -directory. -.TP 20 -.B UnicodeData.txt -The main file in the Unicode Character Database. Contains character -properties, combining classes information, decompositions, names, -etc.\|.\|.. -.TP -.B BidiMirroring.txt -Properties for substituting characters in an implementation of -bidirectional mirroring. -.TP -.B SpecialCasing.txt -List of properties required for full case mapping. -.TP -.B CaseFolding.txt -Mapping from characters to their case-folded forms. (Note: this file -is derived from -.B UnicodeData.txt -and -.B SpecialCasing.txt -when generated by the Unicode Consortium.) -.SH VERSION -@VERSION@ -.SH COPYRIGHT -Copyright (C) 2000-2002 IBM, Inc. and others. -.SH SEE ALSO -.BR pkgdata (8) diff --git a/icuSources/tools/genprops/genprops.c b/icuSources/tools/genprops/genprops.c index 3c09e197..bb388126 100644 --- a/icuSources/tools/genprops/genprops.c +++ b/icuSources/tools/genprops/genprops.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -24,7 +24,6 @@ #include <stdlib.h> #include "unicode/utypes.h" #include "unicode/uchar.h" -#include "unicode/uset.h" #include "unicode/putil.h" #include "unicode/uclean.h" #include "cmemory.h" @@ -43,31 +42,13 @@ U_CDECL_END UBool beVerbose=FALSE, haveCopyright=TRUE; -/* - * Unicode set collecting the case-sensitive characters; - * see uchar.h UCHAR_CASE_SENSITIVE. - * Add code points from case mappings/foldings in - * the root locale and with default options. - */ -static USet *caseSensitive; - /* prototypes --------------------------------------------------------------- */ -static void -parseBidiMirroring(const char *filename, UErrorCode *pErrorCode); - -static void -parseSpecialCasing(const char *filename, UErrorCode *pErrorCode); - -static void -parseCaseFolding(const char *filename, UErrorCode *pErrorCode); - static void parseDB(const char *filename, UErrorCode *pErrorCode); /* -------------------------------------------------------------------------- */ - enum { HELP_H, @@ -77,7 +58,8 @@ enum DESTDIR, SOURCEDIR, UNICODE_VERSION, - ICUDATADIR + ICUDATADIR, + CSOURCE }; /* Keep these values in sync with the above enums */ @@ -88,8 +70,9 @@ static UOption options[]={ UOPTION_COPYRIGHT, UOPTION_DESTDIR, UOPTION_SOURCEDIR, - { "unicode", NULL, NULL, NULL, 'u', UOPT_REQUIRES_ARG, 0 }, - UOPTION_ICUDATADIR + UOPTION_DEF("unicode", 'u', UOPT_REQUIRES_ARG), + UOPTION_ICUDATADIR, + UOPTION_DEF("csource", 'C', UOPT_NO_ARG) }; extern int @@ -131,7 +114,8 @@ main(int argc, char* argv[]) { "\t-h or -? or --help this usage text\n" "\t-v or --verbose verbose output\n" "\t-c or --copyright include a copyright notice\n" - "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n"); + "\t-u or --unicode Unicode version, followed by the version like 3.0.0\n" + "\t-C or --csource generate a .c source file rather than the .icu binary\n"); fprintf(stderr, "\t-d or --destdir destination directory, followed by the path\n" "\t-s or --sourcedir source directory, followed by the path\n" @@ -174,19 +158,6 @@ main(int argc, char* argv[]) { /* initialize */ initStore(); - caseSensitive=uset_open(1, 0); /* empty set (start>end) */ - - /* process BidiMirroring.txt */ - writeUCDFilename(basename, "BidiMirroring", suffix); - parseBidiMirroring(filename, &errorCode); - - /* process SpecialCasing.txt */ - writeUCDFilename(basename, "SpecialCasing", suffix); - parseSpecialCasing(filename, &errorCode); - - /* process CaseFolding.txt */ - writeUCDFilename(basename, "CaseFolding", suffix); - parseCaseFolding(filename, &errorCode); /* process UnicodeData.txt */ writeUCDFilename(basename, "UnicodeData", suffix); @@ -199,9 +170,10 @@ main(int argc, char* argv[]) { /* process parsed data */ if(U_SUCCESS(errorCode)) { /* write the properties data file */ - generateData(destDir); + generateData(destDir, options[CSOURCE].doesOccur); } + exitStore(); u_cleanup(); return errorCode; } @@ -270,301 +242,6 @@ getTokenIndex(const char *const tokens[], int32_t countTokens, const char *s) { return -1; } -static void -_set_addAll(USet *set, const UChar *s, int32_t length) { - UChar32 c; - int32_t i; - - /* needs length>=0 */ - for(i=0; i<length; /* U16_NEXT advances i */) { - U16_NEXT(s, i, length, c); - uset_add(set, c); - } -} - -/* parser for BidiMirroring.txt --------------------------------------------- */ - -#define MAX_MIRROR_COUNT 2000 - -static uint32_t mirrorMappings[MAX_MIRROR_COUNT][2]; -static int32_t mirrorCount=0; - -static void U_CALLCONV -mirrorLineFn(void *context, - char *fields[][2], int32_t fieldCount, - UErrorCode *pErrorCode) { - char *end; - static uint32_t prevCode=0; - - mirrorMappings[mirrorCount][0]=(uint32_t)uprv_strtoul(fields[0][0], &end, 16); - if(end<=fields[0][0] || end!=fields[0][1]) { - fprintf(stderr, "genprops: syntax error in BidiMirroring.txt field 0 at %s\n", fields[0][0]); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - - mirrorMappings[mirrorCount][1]=(uint32_t)uprv_strtoul(fields[1][0], &end, 16); - if(end<=fields[1][0] || end!=fields[1][1]) { - fprintf(stderr, "genprops: syntax error in BidiMirroring.txt field 1 at %s\n", fields[1][0]); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - - /* check that the code points (mirrorMappings[mirrorCount][0]) are in ascending order */ - if(mirrorMappings[mirrorCount][0]<=prevCode && mirrorMappings[mirrorCount][0]>0) { - fprintf(stderr, "genprops: error - BidiMirroring entries out of order, U+%04lx after U+%04lx\n", - (unsigned long)mirrorMappings[mirrorCount][0], - (unsigned long)prevCode); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - prevCode=mirrorMappings[mirrorCount][0]; - - if(++mirrorCount==MAX_MIRROR_COUNT) { - fprintf(stderr, "genprops: too many mirror mappings\n"); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - exit(U_INDEX_OUTOFBOUNDS_ERROR); - } -} - -static void -parseBidiMirroring(const char *filename, UErrorCode *pErrorCode) { - char *fields[2][2]; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return; - } - - u_parseDelimitedFile(filename, ';', fields, 2, mirrorLineFn, NULL, pErrorCode); -} - -/* parser for SpecialCasing.txt --------------------------------------------- */ - -#define MAX_SPECIAL_CASING_COUNT 500 - -static SpecialCasing specialCasings[MAX_SPECIAL_CASING_COUNT]; -static int32_t specialCasingCount=0; - -static void U_CALLCONV -specialCasingLineFn(void *context, - char *fields[][2], int32_t fieldCount, - UErrorCode *pErrorCode) { - char *end; - - /* get code point */ - specialCasings[specialCasingCount].code=(uint32_t)uprv_strtoul(u_skipWhitespace(fields[0][0]), &end, 16); - end=(char *)u_skipWhitespace(end); - if(end<=fields[0][0] || end!=fields[0][1]) { - fprintf(stderr, "genprops: syntax error in SpecialCasing.txt field 0 at %s\n", fields[0][0]); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - - /* is this a complex mapping? */ - if(*(end=(char *)u_skipWhitespace(fields[4][0]))!=0 && *end!=';' && *end!='#') { - /* there is some condition text in the fifth field */ - specialCasings[specialCasingCount].isComplex=TRUE; - - /* do not store any actual mappings for this */ - specialCasings[specialCasingCount].lowerCase[0]=0; - specialCasings[specialCasingCount].upperCase[0]=0; - specialCasings[specialCasingCount].titleCase[0]=0; - } else { - /* just set the "complex" flag and get the case mappings */ - specialCasings[specialCasingCount].isComplex=FALSE; - specialCasings[specialCasingCount].lowerCase[0]= - (UChar)u_parseString(fields[1][0], specialCasings[specialCasingCount].lowerCase+1, 31, NULL, pErrorCode); - specialCasings[specialCasingCount].upperCase[0]= - (UChar)u_parseString(fields[3][0], specialCasings[specialCasingCount].upperCase+1, 31, NULL, pErrorCode); - specialCasings[specialCasingCount].titleCase[0]= - (UChar)u_parseString(fields[2][0], specialCasings[specialCasingCount].titleCase+1, 31, NULL, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - fprintf(stderr, "genprops: error parsing special casing at %s\n", fields[0][0]); - exit(*pErrorCode); - } - - uset_add(caseSensitive, (UChar32)specialCasings[specialCasingCount].code); - _set_addAll(caseSensitive, specialCasings[specialCasingCount].lowerCase+1, specialCasings[specialCasingCount].lowerCase[0]); - _set_addAll(caseSensitive, specialCasings[specialCasingCount].upperCase+1, specialCasings[specialCasingCount].upperCase[0]); - _set_addAll(caseSensitive, specialCasings[specialCasingCount].titleCase+1, specialCasings[specialCasingCount].titleCase[0]); - } - - if(++specialCasingCount==MAX_SPECIAL_CASING_COUNT) { - fprintf(stderr, "genprops: too many special casing mappings\n"); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - exit(U_INDEX_OUTOFBOUNDS_ERROR); - } -} - -static int -compareSpecialCasings(const void *left, const void *right) { - return ((const SpecialCasing *)left)->code-((const SpecialCasing *)right)->code; -} - -static void -parseSpecialCasing(const char *filename, UErrorCode *pErrorCode) { - char *fields[5][2]; - int32_t i, j; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return; - } - - u_parseDelimitedFile(filename, ';', fields, 5, specialCasingLineFn, NULL, pErrorCode); - - /* sort the special casing entries by code point */ - if(specialCasingCount>0) { - qsort(specialCasings, specialCasingCount, sizeof(SpecialCasing), compareSpecialCasings); - } - - /* replace multiple entries for any code point by one "complex" one */ - j=0; - for(i=1; i<specialCasingCount; ++i) { - if(specialCasings[i-1].code==specialCasings[i].code) { - /* there is a duplicate code point */ - specialCasings[i-1].code=0x7fffffff; /* remove this entry in the following qsort */ - specialCasings[i].isComplex=TRUE; /* make the following one complex */ - specialCasings[i].lowerCase[0]=0; - specialCasings[i].upperCase[0]=0; - specialCasings[i].titleCase[0]=0; - ++j; - } - } - - /* if some entries just were removed, then re-sort */ - if(j>0) { - qsort(specialCasings, specialCasingCount, sizeof(SpecialCasing), compareSpecialCasings); - specialCasingCount-=j; - } - - /* - * Add one complex mapping to caseSensitive that was filtered out above: - * Greek final Sigma has a conditional mapping but not locale-sensitive, - * and it is taken when lowercasing just U+03A3 alone. - * 03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA - */ - uset_add(caseSensitive, 0x3c2); -} - -/* parser for CaseFolding.txt ----------------------------------------------- */ - -#define MAX_CASE_FOLDING_COUNT 2000 - -static CaseFolding caseFoldings[MAX_CASE_FOLDING_COUNT]; -static int32_t caseFoldingCount=0; - -static void U_CALLCONV -caseFoldingLineFn(void *context, - char *fields[][2], int32_t fieldCount, - UErrorCode *pErrorCode) { - char *end; - static uint32_t prevCode=0; - int32_t count; - char status; - - /* get code point */ - caseFoldings[caseFoldingCount].code=(uint32_t)uprv_strtoul(u_skipWhitespace(fields[0][0]), &end, 16); - end=(char *)u_skipWhitespace(end); - if(end<=fields[0][0] || end!=fields[0][1]) { - fprintf(stderr, "genprops: syntax error in CaseFolding.txt field 0 at %s\n", fields[0][0]); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - - /* get the status of this mapping */ - caseFoldings[caseFoldingCount].status=status=*u_skipWhitespace(fields[1][0]); - if(status!='L' && status!='E' && status!='C' && status!='S' && status!='F' && status!='I' && status!='T') { - fprintf(stderr, "genprops: unrecognized status field in CaseFolding.txt at %s\n", fields[0][0]); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - - /* ignore all case folding mappings that are the same as the UnicodeData.txt lowercase mappings */ - if(status=='L') { - return; - } - - /* get the mapping */ - count=caseFoldings[caseFoldingCount].full[0]= - (UChar)u_parseString(fields[2][0], caseFoldings[caseFoldingCount].full+1, 31, &caseFoldings[caseFoldingCount].simple, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - fprintf(stderr, "genprops: error parsing CaseFolding.txt mapping at %s\n", fields[0][0]); - exit(*pErrorCode); - } - - /* there is a simple mapping only if there is exactly one code point (count is in UChars) */ - if(count==0 || count>2 || (count==2 && UTF_IS_SINGLE(caseFoldings[caseFoldingCount].full[1]))) { - caseFoldings[caseFoldingCount].simple=0; - } - - /* update the case-sensitive set */ - if(status!='T') { - uset_add(caseSensitive, (UChar32)caseFoldings[caseFoldingCount].code); - _set_addAll(caseSensitive, caseFoldings[caseFoldingCount].full+1, caseFoldings[caseFoldingCount].full[0]); - } - - /* check the status */ - if(status=='S') { - /* check if there was a full mapping for this code point before */ - if( caseFoldingCount>0 && - caseFoldings[caseFoldingCount-1].code==caseFoldings[caseFoldingCount].code && - caseFoldings[caseFoldingCount-1].status=='F' - ) { - /* merge the two entries */ - caseFoldings[caseFoldingCount-1].simple=caseFoldings[caseFoldingCount].simple; - return; - } - } else if(status=='F') { - /* check if there was a simple mapping for this code point before */ - if( caseFoldingCount>0 && - caseFoldings[caseFoldingCount-1].code==caseFoldings[caseFoldingCount].code && - caseFoldings[caseFoldingCount-1].status=='S' - ) { - /* merge the two entries */ - uprv_memcpy(caseFoldings[caseFoldingCount-1].full, caseFoldings[caseFoldingCount].full, 32*U_SIZEOF_UCHAR); - return; - } - } else if(status=='I' || status=='T') { - /* check if there was a default mapping for this code point before (remove it) */ - while(caseFoldingCount>0 && - caseFoldings[caseFoldingCount-1].code==caseFoldings[caseFoldingCount].code - ) { - prevCode=0; - --caseFoldingCount; - } - /* store only a marker for special handling for cases like dotless i */ - caseFoldings[caseFoldingCount].simple=0; - caseFoldings[caseFoldingCount].full[0]=0; - } - - /* check that the code points (caseFoldings[caseFoldingCount].code) are in ascending order */ - if(caseFoldings[caseFoldingCount].code<=prevCode && caseFoldings[caseFoldingCount].code>0) { - fprintf(stderr, "genprops: error - CaseFolding entries out of order, U+%04lx after U+%04lx\n", - (unsigned long)caseFoldings[caseFoldingCount].code, - (unsigned long)prevCode); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - prevCode=caseFoldings[caseFoldingCount].code; - - if(++caseFoldingCount==MAX_CASE_FOLDING_COUNT) { - fprintf(stderr, "genprops: too many case folding mappings\n"); - *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; - exit(U_INDEX_OUTOFBOUNDS_ERROR); - } -} - -static void -parseCaseFolding(const char *filename, UErrorCode *pErrorCode) { - char *fields[3][2]; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return; - } - - u_parseDelimitedFile(filename, ';', fields, 3, caseFoldingLineFn, NULL, pErrorCode); -} - /* parser for UnicodeData.txt ----------------------------------------------- */ /* general categories */ @@ -580,12 +257,6 @@ genCategoryNames[U_CHAR_CATEGORY_COUNT]={ "Pi", "Pf" }; -const char *const -bidiNames[U_CHAR_DIRECTION_COUNT]={ - "L", "R", "EN", "ES", "ET", "AN", "CS", "B", "S", - "WS", "ON", "LRE", "LRO", "AL", "RLE", "RLO", "PDF", "NSM", "BN" -}; - const char *const decompositionTypeNames[U_DT_COUNT]={ NULL, @@ -613,7 +284,7 @@ static struct { char name[80]; } unicodeAreas[32]; -static int32_t unicodeAreaIndex=0, mirrorIndex=0, specialCasingIndex=0, caseFoldingIndex=0; +static int32_t unicodeAreaIndex=0; static void U_CALLCONV unicodeDataLineFn(void *context, @@ -647,17 +318,6 @@ unicodeDataLineFn(void *context, exit(U_PARSE_ERROR); } - /* get BiDi category, field 4 */ - i=getTokenIndex(bidiNames, U_CHAR_DIRECTION_COUNT, fields[4][0]); - if(i>=0) { - p.bidi=(uint8_t)i; - } else { - fprintf(stderr, "genprops: unknown BiDi category \"%s\" at code 0x%lx\n", - fields[4][0], (unsigned long)p.code); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - /* get decomposition type, field 5 */ if(fields[5][0]<fields[5][1]) { /* there is some decomposition */ @@ -771,80 +431,6 @@ unicodeDataLineFn(void *context, } } - /* get Mirrored flag, field 9 */ - if(*fields[9][0]=='Y') { - p.isMirrored=1; - } else if(fields[9][1]-fields[9][0]!=1 || *fields[9][0]!='N') { - fprintf(stderr, "genprops: syntax error in field 9 at code 0x%lx\n", - (unsigned long)p.code); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - - /* get uppercase mapping, field 12 */ - value=(uint32_t)uprv_strtoul(fields[12][0], &end, 16); - if(end!=fields[12][1]) { - fprintf(stderr, "genprops: syntax error in field 12 at code 0x%lx\n", - (unsigned long)p.code); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - if(value!=0 && value!=p.code) { - p.upperCase=value; - uset_add(caseSensitive, (UChar32)p.code); - uset_add(caseSensitive, (UChar32)value); - } - - /* get lowercase value, field 13 */ - value=(uint32_t)uprv_strtoul(fields[13][0], &end, 16); - if(end!=fields[13][1]) { - fprintf(stderr, "genprops: syntax error in field 13 at code 0x%lx\n", - (unsigned long)p.code); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - if(value!=0 && value!=p.code) { - p.lowerCase=value; - uset_add(caseSensitive, (UChar32)p.code); - uset_add(caseSensitive, (UChar32)value); - } - - /* get titlecase value, field 14 */ - value=(uint32_t)uprv_strtoul(fields[14][0], &end, 16); - if(end!=fields[14][1]) { - fprintf(stderr, "genprops: syntax error in field 14 at code 0x%lx\n", - (unsigned long)p.code); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - if(value!=0 && value!=p.code) { - p.titleCase=value; - uset_add(caseSensitive, (UChar32)p.code); - uset_add(caseSensitive, (UChar32)value); - } - - /* set additional properties from previously parsed files */ - if(mirrorIndex<mirrorCount && p.code==mirrorMappings[mirrorIndex][0]) { - p.mirrorMapping=mirrorMappings[mirrorIndex++][1]; - } - if(specialCasingIndex<specialCasingCount && p.code==specialCasings[specialCasingIndex].code) { - p.specialCasing=specialCasings+specialCasingIndex++; - } else { - p.specialCasing=NULL; - } - if(caseFoldingIndex<caseFoldingCount && p.code==caseFoldings[caseFoldingIndex].code) { - p.caseFolding=caseFoldings+caseFoldingIndex++; - - /* ignore "Common" mappings (simple==full) that map to the same code point as the regular lowercase mapping */ - if( p.caseFolding->status=='C' && - p.caseFolding->simple==p.lowerCase - ) { - p.caseFolding=NULL; - } - } else { - p.caseFolding=NULL; - } - value=makeProps(&p); if(*fields[1][0]=='<') { @@ -966,41 +552,12 @@ repeatAreaProps() { static void parseDB(const char *filename, UErrorCode *pErrorCode) { - /* default Bidi classes for unassigned code points */ - static const uint32_t defaultBidi[][2]={ /* { limit, class } */ - { 0x0590, U_LEFT_TO_RIGHT }, - { 0x0600, U_RIGHT_TO_LEFT }, - { 0x07C0, U_RIGHT_TO_LEFT_ARABIC }, - { 0xFB1D, U_LEFT_TO_RIGHT }, - { 0xFB50, U_RIGHT_TO_LEFT }, - { 0xFE00, U_RIGHT_TO_LEFT_ARABIC }, - { 0xFE70, U_LEFT_TO_RIGHT }, - { 0xFF00, U_RIGHT_TO_LEFT_ARABIC }, - { 0x110000, U_LEFT_TO_RIGHT } - }; - char *fields[15][2]; - UChar32 start, end; - uint32_t prev; - int32_t i; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return; } - /* - * Set default Bidi classes for unassigned code points. - * See table 3-7 "Bidirectional Character Types" in UAX #9. - * http://www.unicode.org/reports/tr9/ - */ - prev=0; - for(i=0; i<LENGTHOF(defaultBidi); ++i) { - if(defaultBidi[i][1]!=0) { - repeatProps(prev, defaultBidi[i][0]-1, defaultBidi[i][1]<<UPROPS_BIDI_SHIFT); - } - prev=defaultBidi[i][0]; - } - /* while unicodeAreas[unicodeAreaIndex] is unused, set its first to a bogus value */ unicodeAreas[0].first=0xffffffff; @@ -1016,36 +573,9 @@ parseDB(const char *filename, UErrorCode *pErrorCode) { repeatAreaProps(); - /* are all sub-properties consumed? */ - if(mirrorIndex<mirrorCount) { - fprintf(stderr, "genprops: error - some code points in BidiMirroring.txt are missing from UnicodeData.txt\n"); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - if(specialCasingIndex<specialCasingCount) { - fprintf(stderr, "genprops: error - some code points in SpecialCasing.txt are missing from UnicodeData.txt\n"); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - if(caseFoldingIndex<caseFoldingCount) { - fprintf(stderr, "genprops: error - some code points in CaseFolding.txt are missing from UnicodeData.txt\n"); - *pErrorCode=U_PARSE_ERROR; - exit(U_PARSE_ERROR); - } - if(U_FAILURE(*pErrorCode)) { return; } - - for(i=0; - 0==uset_getItem(caseSensitive, i, &start, &end, NULL, 0, pErrorCode) && U_SUCCESS(*pErrorCode); - ++i - ) { - addCaseSensitive(start, end); - } - if(*pErrorCode==U_INDEX_OUTOFBOUNDS_ERROR) { - *pErrorCode=U_ZERO_ERROR; - } } /* @@ -1056,4 +586,3 @@ parseDB(const char *filename, UErrorCode *pErrorCode) { * End: * */ - diff --git a/icuSources/tools/genprops/genprops.dsp b/icuSources/tools/genprops/genprops.dsp deleted file mode 100644 index c987e0a7..00000000 --- a/icuSources/tools/genprops/genprops.dsp +++ /dev/null @@ -1,198 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genprops" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genprops - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "genprops.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "genprops.mak" CFG="genprops - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genprops - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genprops - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "genprops - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genprops - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genprops - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\toolutil" /I "..\..\common" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\genprops.exe -InputPath=.\Release\genprops.exe -InputName=genprops -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genprops - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\toolutil" /I "..\..\common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\genprops.exe -InputPath=.\Debug\genprops.exe -InputName=genprops -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genprops - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\toolutil" /I "..\..\common" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\genprops.exe -InputPath=.\Release\genprops.exe -InputName=genprops -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genprops - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\toolutil" /I "..\..\common" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\genprops.exe -InputPath=.\Debug\genprops.exe -InputName=genprops -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "genprops - Win32 Release" -# Name "genprops - Win32 Debug" -# Name "genprops - Win64 Release" -# Name "genprops - Win64 Debug" -# Begin Source File - -SOURCE=.\genprops.c -# End Source File -# Begin Source File - -SOURCE=.\genprops.h -# End Source File -# Begin Source File - -SOURCE=.\props2.c -# End Source File -# Begin Source File - -SOURCE=.\store.c -# End Source File -# End Target -# End Project diff --git a/icuSources/tools/genprops/genprops.h b/icuSources/tools/genprops/genprops.h index 0afaa7f9..40915235 100644 --- a/icuSources/tools/genprops/genprops.h +++ b/icuSources/tools/genprops/genprops.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -24,37 +24,17 @@ #define DATA_NAME "uprops" #define DATA_TYPE "icu" -/* special casing data */ -typedef struct { - uint32_t code; - UBool isComplex; - UChar lowerCase[32], upperCase[32], titleCase[32]; -} SpecialCasing; - -/* case folding data */ -typedef struct { - uint32_t code, simple; - char status; - UChar full[32]; -} CaseFolding; - /* character properties */ typedef struct { - uint32_t code, lowerCase, upperCase, titleCase, mirrorMapping; + uint32_t code; int32_t numericValue; /* see numericType */ uint32_t denominator; /* 0: no value */ - uint8_t generalCategory, bidi, isMirrored, numericType; - SpecialCasing *specialCasing; - CaseFolding *caseFolding; + uint8_t generalCategory, numericType, exponent; } Props; /* global flags */ extern UBool beVerbose, haveCopyright; -/* name tables */ -extern const char *const -bidiNames[]; - extern const char *const genCategoryNames[]; @@ -77,6 +57,9 @@ setUnicodeVersion(const char *v); extern void initStore(void); +extern void +exitStore(void); + extern uint32_t makeProps(Props *p); @@ -89,24 +72,20 @@ getProps(uint32_t c); extern void repeatProps(uint32_t first, uint32_t last, uint32_t props); -U_CFUNC uint32_t U_EXPORT2 -getFoldedPropsValue(UNewTrie *trie, UChar32 start, int32_t offset); - -extern void -addCaseSensitive(UChar32 first, UChar32 last); - extern void -generateData(const char *dataDir); +generateData(const char *dataDir, UBool csource); /* props2.c */ U_CFUNC void initAdditionalProperties(void); +U_CFUNC void +exitAdditionalProperties(void); + U_CFUNC void generateAdditionalProperties(char *filename, const char *suffix, UErrorCode *pErrorCode); U_CFUNC int32_t -writeAdditionalData(uint8_t *p, int32_t capacity, int32_t indexes[16]); +writeAdditionalData(FILE *f, uint8_t *p, int32_t capacity, int32_t indexes[16]); #endif - diff --git a/icuSources/tools/genprops/genprops.vcproj b/icuSources/tools/genprops/genprops.vcproj index 92332816..b9c6b929 100644 --- a/icuSources/tools/genprops/genprops.vcproj +++ b/icuSources/tools/genprops/genprops.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\toolutil,..\..\common" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/genprops.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -83,12 +83,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\toolutil,..\..\common" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/genprops.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/genprops/props2.c b/icuSources/tools/genprops/props2.c index 331f821f..9f18a11b 100644 --- a/icuSources/tools/genprops/props2.c +++ b/icuSources/tools/genprops/props2.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -27,6 +27,7 @@ #include "uprops.h" #include "propsvec.h" #include "uparse.h" +#include "writesrc.h" #include "genprops.h" #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) @@ -102,11 +103,6 @@ numericLineFn(void *context, char *fields[][2], int32_t fieldCount, UErrorCode *pErrorCode); -static void U_CALLCONV -bidiClassLineFn(void *context, - char *fields[][2], int32_t fieldCount, - UErrorCode *pErrorCode); - /* parse files with single enumerated properties ---------------------------- */ struct SingleEnum { @@ -134,6 +130,24 @@ static const SingleEnum blockSingleEnum={ 0, UPROPS_BLOCK_SHIFT, UPROPS_BLOCK_MASK }; +static const SingleEnum graphemeClusterBreakSingleEnum={ + "GraphemeBreakProperty", "Grapheme_Cluster_Break", + UCHAR_GRAPHEME_CLUSTER_BREAK, + 2, UPROPS_GCB_SHIFT, UPROPS_GCB_MASK +}; + +static const SingleEnum wordBreakSingleEnum={ + "WordBreakProperty", "Word_Break", + UCHAR_WORD_BREAK, + 2, UPROPS_WB_SHIFT, UPROPS_WB_MASK +}; + +static const SingleEnum sentenceBreakSingleEnum={ + "SentenceBreakProperty", "Sentence_Break", + UCHAR_SENTENCE_BREAK, + 2, UPROPS_SB_SHIFT, UPROPS_SB_MASK +}; + static const SingleEnum lineBreakSingleEnum={ "LineBreak", "line break", UCHAR_LINE_BREAK, @@ -146,18 +160,6 @@ static const SingleEnum eawSingleEnum={ 0, UPROPS_EA_SHIFT, UPROPS_EA_MASK }; -static const SingleEnum jtSingleEnum={ - "DerivedJoiningType", "joining type", - UCHAR_JOINING_TYPE, - 2, UPROPS_JT_SHIFT, UPROPS_JT_MASK -}; - -static const SingleEnum jgSingleEnum={ - "DerivedJoiningGroup", "joining group", - UCHAR_JOINING_GROUP, - 2, UPROPS_JG_SHIFT, UPROPS_JG_MASK -}; - static void U_CALLCONV singleEnumLineFn(void *context, char *fields[][2], int32_t fieldCount, @@ -246,8 +248,6 @@ typedef struct Binaries Binaries; static const Binary propListNames[]={ { "White_Space", 1, UPROPS_WHITE_SPACE }, - { "Bidi_Control", 1, UPROPS_BIDI_CONTROL }, - { "Join_Control", 1, UPROPS_JOIN_CONTROL }, { "Dash", 1, UPROPS_DASH }, { "Hyphen", 1, UPROPS_HYPHEN }, { "Quotation_Mark", 1, UPROPS_QUOTATION_MARK }, @@ -264,12 +264,15 @@ propListNames[]={ { "Radical", 1, UPROPS_RADICAL }, { "Unified_Ideograph", 1, UPROPS_UNIFIED_IDEOGRAPH }, { "Deprecated", 1, UPROPS_DEPRECATED }, - { "Soft_Dotted", 1, UPROPS_SOFT_DOTTED }, { "Logical_Order_Exception", 1, UPROPS_LOGICAL_ORDER_EXCEPTION }, /* new properties in Unicode 4.0.1 */ { "STerm", 2, UPROPS_V2_S_TERM }, - { "Variation_Selector", 2, UPROPS_V2_VARIATION_SELECTOR } + { "Variation_Selector", 2, UPROPS_V2_VARIATION_SELECTOR }, + + /* new properties in Unicode 4.1 */ + { "Pattern_Syntax", 2, UPROPS_V2_PATTERN_SYNTAX }, + { "Pattern_White_Space", 2, UPROPS_V2_PATTERN_WHITE_SPACE } }; static const Binaries @@ -285,15 +288,19 @@ derCorePropsNames[]={ /* before Unicode 4/ICU 2.6/format version 3.2, these used to be Other_XYZ from PropList.txt */ { "Math", 1, UPROPS_MATH }, { "Alphabetic", 1, UPROPS_ALPHABETIC }, - { "Lowercase", 1, UPROPS_LOWERCASE }, - { "Uppercase", 1, UPROPS_UPPERCASE }, { "Grapheme_Extend", 1, UPROPS_GRAPHEME_EXTEND }, { "Default_Ignorable_Code_Point", 1, UPROPS_DEFAULT_IGNORABLE_CODE_POINT }, /* new properties bits in ICU 2.6/format version 3.2 */ { "ID_Start", 1, UPROPS_ID_START }, { "ID_Continue", 1, UPROPS_ID_CONTINUE }, - { "Grapheme_Base", 1, UPROPS_GRAPHEME_BASE } + { "Grapheme_Base", 1, UPROPS_GRAPHEME_BASE }, + + /* + * Unicode 5/ICU 3.6 moves Grapheme_Link from PropList.txt + * to DerivedCoreProperties.txt and deprecates it. + */ + { "Grapheme_Link", 1, UPROPS_GRAPHEME_LINK } }; static const Binaries @@ -340,7 +347,9 @@ binariesLineFn(void *context, for(i=0;; ++i) { if(i==bin->binariesCount) { /* ignore unrecognized properties */ - addIgnoredProp(s, fields[1][1]); + if(beVerbose) { + addIgnoredProp(s, fields[1][1]); + } return; } if(isToken(bin->binaries[i].propName, s)) { @@ -382,8 +391,10 @@ parseBinariesFile(char *filename, char *basename, const char *suffix, fprintf(stderr, "error parsing %s.txt: %s\n", bin->ucdFile, u_errorName(*pErrorCode)); } - for(i=0; i<ignoredPropsCount; ++i) { - printf("genprops: ignoring property %s in %s.txt\n", ignoredProps[i], bin->ucdFile); + if(beVerbose) { + for(i=0; i<ignoredPropsCount; ++i) { + printf("genprops: ignoring property %s in %s.txt\n", ignoredProps[i], bin->ucdFile); + } } } @@ -394,6 +405,12 @@ initAdditionalProperties() { pv=upvec_open(UPROPS_VECTOR_WORDS, 20000); } +U_CFUNC void +exitAdditionalProperties() { + utrie_close(trie); + upvec_close(pv); +} + U_CFUNC void generateAdditionalProperties(char *filename, const char *suffix, UErrorCode *pErrorCode) { char *basename; @@ -405,9 +422,6 @@ generateAdditionalProperties(char *filename, const char *suffix, UErrorCode *pEr /* add Han numeric types & values */ parseMultiFieldFile(filename, basename, "DerivedNumericValues", suffix, 2, numericLineFn, pErrorCode); - /* set proper bidi class for unassigned code points (Cn) */ - parseTwoFieldFile(filename, basename, "DerivedBidiClass", suffix, bidiClassLineFn, pErrorCode); - parseTwoFieldFile(filename, basename, "DerivedAge", suffix, ageLineFn, pErrorCode); /* @@ -432,6 +446,12 @@ generateAdditionalProperties(char *filename, const char *suffix, UErrorCode *pEr parseBinariesFile(filename, basename, suffix, &derCorePropsBinaries, pErrorCode); + parseSingleEnumFile(filename, basename, suffix, &graphemeClusterBreakSingleEnum, pErrorCode); + + parseSingleEnumFile(filename, basename, suffix, &wordBreakSingleEnum, pErrorCode); + + parseSingleEnumFile(filename, basename, suffix, &sentenceBreakSingleEnum, pErrorCode); + /* * LineBreak-4.0.0.txt: * - All code points, assigned and unassigned, that are not listed @@ -441,10 +461,6 @@ generateAdditionalProperties(char *filename, const char *suffix, UErrorCode *pEr */ parseSingleEnumFile(filename, basename, suffix, &lineBreakSingleEnum, pErrorCode); - parseSingleEnumFile(filename, basename, suffix, &jtSingleEnum, pErrorCode); - - parseSingleEnumFile(filename, basename, suffix, &jgSingleEnum, pErrorCode); - /* * Preset East Asian Width defaults: * @@ -481,7 +497,7 @@ generateAdditionalProperties(char *filename, const char *suffix, UErrorCode *pEr return; } - pvCount=upvec_toTrie(pv, trie, pErrorCode); + pvCount=upvec_compact(pv, upvec_compactToTrieHandler, trie, pErrorCode); if(U_FAILURE(*pErrorCode)) { fprintf(stderr, "genprops error: unable to build trie for additional properties: %s\n", u_errorName(*pErrorCode)); exit(*pErrorCode); @@ -504,8 +520,13 @@ ageLineFn(void *context, } ++limit; - /* parse version number */ + /* ignore "unassigned" (the default is already set to 0.0) */ s=(char *)u_skipWhitespace(fields[1][0]); + if(0==uprv_strncmp(s, "unassigned", 10)) { + return; + } + + /* parse version number */ value=(uint32_t)uprv_strtoul(s, &end, 10); if(s==end || value==0 || value>15 || (*end!='.' && *end!=' ' && *end!='\t' && *end!=0)) { fprintf(stderr, "genprops: syntax error in DerivedAge.txt field 1 at %s\n", fields[1][0]); @@ -538,7 +559,7 @@ static void U_CALLCONV numericLineFn(void *context, char *fields[][2], int32_t fieldCount, UErrorCode *pErrorCode) { - Props newProps; + Props newProps={ 0 }; char *s, *end; uint32_t start, limit, value, oldProps32; int32_t oldType; @@ -575,11 +596,14 @@ numericLineFn(void *context, /* try large powers of 10 first, may otherwise overflow strtoul() */ if(0==uprv_strncmp(s, "10000000000", 11)) { /* large powers of 10 are encoded in a special way, see store.c */ - value=0x7fffff00; + uint8_t exp=0; + end=s; while(*(++end)=='0') { - ++value; + ++exp; } + value=1; + newProps.exponent=exp; } else { /* normal number parsing */ value=(uint32_t)uprv_strtoul(s, &end, 10); @@ -599,130 +623,93 @@ numericLineFn(void *context, * specific properties for single characters. */ + /* set the new numeric type and value */ + newProps.numericType=(uint8_t)U_NT_NUMERIC; /* assumed numeric type, see Unicode 4.0.1 comment */ + newProps.numericValue=(int32_t)value; /* newly parsed numeric value */ + /* the exponent may have been set above */ + value=makeProps(&newProps); + for(; start<limit; ++start) { oldProps32=getProps(start); oldType=(int32_t)GET_NUMERIC_TYPE(oldProps32); - if(oldType!=0) { - /* this code point was already listed with its numeric value in UnicodeData.txt */ - continue; + + if(isFraction) { + if(oldType!=0) { + /* this code point was already listed with its numeric value in UnicodeData.txt */ + continue; + } else { + fprintf(stderr, "genprops: not prepared for new fractions in DerivedNumericValues.txt field 1 at %s\n", fields[1][0]); + exit(U_PARSE_ERROR); + } } /* - * Do not set a numeric value for code points that have other - * values or exceptions because the code below is not prepared - * to maintain such values and exceptions. - * - * Check store.c (e.g., file format description and makeProps()) - * for details of what code points get their value field interpreted. - * For example, case mappings for Ll/Lt/Lu and mirror mappings for mirrored characters. - * * For simplicity, and because we only expect to set numeric values for Han characters, * for now we only allow to set these values for Lo characters. */ - if(GET_UNSIGNED_VALUE(oldProps32)!=0 || PROPS_VALUE_IS_EXCEPTION(oldProps32) || GET_CATEGORY(oldProps32)!=U_OTHER_LETTER) { - fprintf(stderr, "genprops error: new numeric value for a character with some other value in DerivedNumericValues.txt at %s\n", fields[0][0]); + if(oldType==0 && GET_CATEGORY(oldProps32)!=U_OTHER_LETTER) { + fprintf(stderr, "genprops error: new numeric value for a character other than Lo in DerivedNumericValues.txt at %s\n", fields[0][0]); exit(U_PARSE_ERROR); } - if(isFraction) { - fprintf(stderr, "genprops: not prepared for new fractions in DerivedNumericValues.txt field 1 at %s\n", fields[1][0]); - exit(U_PARSE_ERROR); - } - - if(beVerbose) { - printf("adding U+%04x numeric type %d value %u\n", (int)start, U_NT_NUMERIC, (int)value); - } - - /* reconstruct the properties and set the new numeric type and value */ - uprv_memset(&newProps, 0, sizeof(newProps)); - newProps.code=start; - newProps.generalCategory=(uint8_t)GET_CATEGORY(oldProps32); - newProps.bidi=(uint8_t)GET_BIDI_CLASS(oldProps32); - newProps.isMirrored=(uint8_t)(oldProps32&(1UL<<UPROPS_MIRROR_SHIFT) ? TRUE : FALSE); - newProps.numericType=(uint8_t)U_NT_NUMERIC; /* assumed numeric type, see Unicode 4.0.1 comment */ - newProps.numericValue=(int32_t)value; /* newly parsed numeric value */ - addProps(start, makeProps(&newProps)); - } -} - -/* DerivedBidiClass.txt ----------------------------------------------------- */ - -static void U_CALLCONV -bidiClassLineFn(void *context, - char *fields[][2], int32_t fieldCount, - UErrorCode *pErrorCode) { - char *s; - uint32_t oldStart, start, limit, value, props32; - UBool didSet; - - /* get the code point range */ - u_parseCodePointRange(fields[0][0], &start, &limit, pErrorCode); - if(U_FAILURE(*pErrorCode)) { - fprintf(stderr, "genprops: syntax error in DerivedBidiClass.txt field 0 at %s\n", fields[0][0]); - exit(*pErrorCode); - } - ++limit; - - /* parse bidi class */ - s=trimTerminateField(fields[1][0], fields[1][1]); - value=u_getPropertyValueEnum(UCHAR_BIDI_CLASS, s); - if((int32_t)value<0) { - fprintf(stderr, "genprops error: unknown bidi class in DerivedBidiClass.txt field 1 at %s\n", s); - exit(U_PARSE_ERROR); - } - - didSet=FALSE; - oldStart=start; - for(; start<limit; ++start) { - props32=getProps(start); - - /* ignore if this bidi class is already set */ - if(value==GET_BIDI_CLASS(props32)) { - continue; - } + /* verify that we do not change an existing value (fractions were excluded above) */ + if(oldType!=0) { + /* the code point already has a value stored */ + if((oldProps32&0xff00)!=(value&0xff00)) { + fprintf(stderr, "genprops error: new numeric value differs from old one for U+%04lx\n", (long)start); + exit(U_PARSE_ERROR); + } + /* same value, continue */ + } else { + /* the code point is getting a new numeric value */ + if(beVerbose) { + printf("adding U+%04x numeric type %d value 0x%04x from %s\n", (int)start, U_NT_NUMERIC, (int)value, fields[0][0]); + } - /* ignore old bidi class, set only for unassigned code points (Cn) */ - if(GET_CATEGORY(props32)!=0) { - /* error if this one contradicts what we parsed from UnicodeData.txt */ - fprintf(stderr, "genprops error: different bidi class in DerivedBidiClass.txt field 1 at %s\n", s); - exit(U_PARSE_ERROR); + addProps(start, value|GET_CATEGORY(oldProps32)); } - - /* remove whatever bidi class was set before */ - props32&=~(0x1f<<UPROPS_BIDI_SHIFT); - - /* set bidi class for Cn according to DerivedBidiClass.txt */ - props32|=value<<UPROPS_BIDI_SHIFT; - - /* set the modified properties */ - addProps(start, props32); - didSet=TRUE; - } - - if(didSet && beVerbose) { - printf("setting U+%04x..U+%04x bidi class %d\n", (int)oldStart, (int)limit-1, (int)value); } } /* data serialization ------------------------------------------------------- */ U_CFUNC int32_t -writeAdditionalData(uint8_t *p, int32_t capacity, int32_t indexes[UPROPS_INDEX_COUNT]) { +writeAdditionalData(FILE *f, uint8_t *p, int32_t capacity, int32_t indexes[UPROPS_INDEX_COUNT]) { int32_t length; UErrorCode errorCode; errorCode=U_ZERO_ERROR; - length=utrie_serialize(trie, p, capacity, getFoldedPropsValue, TRUE, &errorCode); + length=utrie_serialize(trie, p, capacity, NULL, TRUE, &errorCode); if(U_FAILURE(errorCode)) { fprintf(stderr, "genprops error: unable to serialize trie for additional properties: %s\n", u_errorName(errorCode)); exit(errorCode); } if(p!=NULL) { - p+=length; - capacity-=length; if(beVerbose) { printf("size in bytes of additional props trie:%5u\n", (int)length); } + if(f!=NULL) { + UTrie trie2={ NULL }; + utrie_unserialize(&trie2, p, length, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf( + stderr, + "genprops error: failed to utrie_unserialize(trie for additional properties) - %s\n", + u_errorName(errorCode)); + exit(errorCode); + } + usrc_writeUTrieArrays(f, + "static const uint16_t propsVectorsTrie_index[%ld]={\n", NULL, + &trie2, + "\n};\n\n"); + usrc_writeUTrieStruct(f, + "static const UTrie propsVectorsTrie={\n", + &trie2, "propsVectorsTrie_index", NULL, NULL, + "};\n\n"); + } + + p+=length; + capacity-=length; /* set indexes */ indexes[UPROPS_ADDITIONAL_VECTORS_INDEX]= @@ -737,13 +724,23 @@ writeAdditionalData(uint8_t *p, int32_t capacity, int32_t indexes[UPROPS_INDEX_C (((int32_t)UBLOCK_COUNT-1)<<UPROPS_BLOCK_SHIFT)| ((int32_t)USCRIPT_CODE_LIMIT-1); indexes[UPROPS_MAX_VALUES_2_INDEX]= - (((int32_t)U_JT_COUNT-1)<<UPROPS_JT_SHIFT)| - (((int32_t)U_JG_COUNT-1)<<UPROPS_JG_SHIFT)| + (((int32_t)U_SB_COUNT-1)<<UPROPS_SB_SHIFT)| + (((int32_t)U_WB_COUNT-1)<<UPROPS_WB_SHIFT)| + (((int32_t)U_GCB_COUNT-1)<<UPROPS_GCB_SHIFT)| ((int32_t)U_DT_COUNT-1); } if(p!=NULL && (pvCount*4)<=capacity) { - uprv_memcpy(p, pv, pvCount*4); + if(f!=NULL) { + usrc_writeArray(f, + "static const uint32_t propsVectors[%ld]={\n", + pv, 32, pvCount, + "};\n\n"); + fprintf(f, "static const int32_t countPropsVectors=%ld;\n", (long)pvCount); + fprintf(f, "static const int32_t propsVectorsColumns=%ld;\n", (long)indexes[UPROPS_ADDITIONAL_VECTORS_COLUMNS_INDEX]); + } else { + uprv_memcpy(p, pv, pvCount*4); + } if(beVerbose) { printf("number of additional props vectors: %5u\n", (int)pvCount/UPROPS_VECTOR_WORDS); printf("number of 32-bit words per vector: %5u\n", UPROPS_VECTOR_WORDS); @@ -751,9 +748,5 @@ writeAdditionalData(uint8_t *p, int32_t capacity, int32_t indexes[UPROPS_INDEX_C } length+=pvCount*4; - if(p!=NULL) { - utrie_close(trie); - upvec_close(pv); - } return length; } diff --git a/icuSources/tools/genprops/store.c b/icuSources/tools/genprops/store.c index d3368efb..76cfa3e7 100644 --- a/icuSources/tools/genprops/store.c +++ b/icuSources/tools/genprops/store.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -18,15 +18,14 @@ */ #include <stdio.h> -#include <stdlib.h> #include "unicode/utypes.h" #include "unicode/uchar.h" #include "cmemory.h" #include "cstring.h" -#include "filestrm.h" #include "utrie.h" #include "unicode/udata.h" #include "unewdata.h" +#include "writesrc.h" #include "uprops.h" #include "genprops.h" @@ -42,7 +41,15 @@ the udata API for loading ICU data. Especially, a UDataInfo structure precedes the actual data. It contains platform properties values and the file format version. -The following is a description of format version 3 . +The following is a description of format version 4 . + +The format changes between version 3 and 4 because the properties related to +case mappings and bidi/shaping are pulled out into separate files +for modularization. +In order to reduce the need for code changes, some of the previous data +structures are omitted, rather than rearranging everything. + +For details see "Changes in format version 4" below. Data contents: @@ -63,6 +70,10 @@ Formally, the file contains the following structures: const int32_t indexes[16] with values i0..i15: + i0 indicates the length of the main trie. + i0..i3 all have the same value in format version 4.0; + the related props32[] and exceptions[] and uchars[] were used in format version 3 + i0 propsIndex; -- 32-bit unit index to the table of 32-bit properties words i1 exceptionsIndex; -- 32-bit unit index to the table of 32-bit exception words i2 exceptionsTopIndex; -- 32-bit unit index to the array of UChars for special mappings @@ -74,12 +85,14 @@ Formally, the file contains the following structures: i6 reservedItemIndex; -- 32-bit unit index to the top of the properties vectors table i7..i9 reservedIndexes; -- reserved values; 0 for now - i10 maxValues; -- maximum code values for vector word 0, see uprops.h (format version 3.1+) - i11 maxValues2; -- maximum code values for vector word 2, see uprops.h (format version 3.2) + i10 maxValues; -- maximum code values for vector word 0, see uprops.h (new in format version 3.1+) + i11 maxValues2; -- maximum code values for vector word 2, see uprops.h (new in format version 3.2) i12..i15 reservedIndexes; -- reserved values; 0 for now PT serialized properties trie, see utrie.h (byte size: 4*(i0-16)) + P, E, and U are not used (empty) in format version 4 + P const uint32_t props32[i1-i0]; E const uint32_t exceptions[i2-i1]; U const UChar uchars[2*(i3-i2)]; @@ -99,14 +112,7 @@ the Unicode code assignment are exploited: The lookup of properties for a given code point is done with a trie lookup, using the UTrie implementation. -The trie lookup result is a 16-bit index in the props32[] table where the -actual 32-bit properties word is stored. This is done to save space. - -(There are thousands of 16-bit entries in the trie data table, but -only a few hundred unique 32-bit properties words. -If the trie data table contained 32-bit words directly, then that would be -larger because the length of the table would be the same as now but the -width would be 32 bits instead of 16. This saves more than 10kB.) +The trie lookup result is a 16-bit properties word. With a given Unicode code point @@ -114,141 +120,51 @@ With a given Unicode code point and 0<=c<0x110000, the lookup is done like this: - uint16_t i; - UTRIE_GET16(c, i); - uint32_t props=p32[i]; - -For some characters, not all of the properties can be efficiently encoded -using 32 bits. For them, the 32-bit word contains an index into the exceptions[] -array: - - if(props&EXCEPTION_BIT)) { - uint16_t e=(uint16_t)(props>>VALUE_SHIFT); - ... - } + uint16_t props; + UTRIE_GET16(trie, c, props); -The exception values are a variable number of uint32_t starting at - - const uint32_t *pe=p32+exceptionsIndex+e; - -The first uint32_t there contains flags about what values actually follow it. -Some of the exception values are UChar32 code points for the case mappings, -others are numeric values etc. - -32-bit properties sets: - -Each 32-bit properties word contains: +Each 16-bit properties word contains: 0.. 4 general category - 5 has exception values - 6..10 BiDi category -11 is mirrored -12..14 numericType: - 0 no numeric value - 1 decimal digit value - 2 digit value - 3 numeric value - ### TODO: type 4 for Han digits & numbers?! -15..19 reserved -20..31 value according to bits 0..5: - if(has exception) { - exception index; - } else switch(general category) { - case Ll: delta to uppercase; -- same as titlecase - case Lu: -delta to lowercase; -- titlecase is same as c - case Lt: -delta to lowercase; -- uppercase is same as c - default: - if(is mirrored) { - delta to mirror; - } else if(numericType!=0) { - numericValue; - } else { - 0; - }; - } - -Exception values: - -In the first uint32_t exception word for a code point, -bits -31..16 reserved -15..0 flags that indicate which values follow: - -bit - 0 has uppercase mapping - 1 has lowercase mapping - 2 has titlecase mapping - 3 unused - 4 has numeric value (numerator) - if numericValue=0x7fffff00+x then numericValue=10^x - 5 has denominator value - 6 has a mirror-image Unicode code point - 7 has SpecialCasing.txt entries - 8 has CaseFolding.txt entries - -According to the flags in this word, one or more uint32_t words follow it -in the sequence of the bit flags in the flags word; if a flag is not set, -then the value is missing or 0: - -For the case mappings and the mirror-image Unicode code point, -one uint32_t or UChar32 each is the code point. -If the titlecase mapping is missing, then it is the same as the uppercase mapping. - -For the digit values, bits 31..16 contain the decimal digit value, and -bits 15..0 contain the digit value. A value of -1 indicates that -this value is missing. - -For the numeric/numerator value, an int32_t word contains the value directly, -except for when there is no numerator but a denominator, then the numerator -is implicitly 1. This means: - numerator denominator result - none none none - x none x - none y 1/y - x y x/y - -If the numerator value is 0x7fffff00+x then it is replaced with 10^x. - -For the denominator value, a uint32_t word contains the value directly. - -For special casing mappings, the 32-bit exception word contains: -31 if set, this character has complex, conditional mappings - that are not stored; - otherwise, the mappings are stored according to the following bits -30..24 number of UChars used for mappings -23..16 reserved -15.. 0 UChar offset from the beginning of the UChars array where the - UChars for the special case mappings are stored in the following format: - -Format of special casing UChars: -One UChar value with lengths as follows: -14..10 number of UChars for titlecase mapping - 9.. 5 number of UChars for uppercase mapping - 4.. 0 number of UChars for lowercase mapping - -Followed by the UChars for lowercase, uppercase, titlecase mappings in this order. - -For case folding mappings, the 32-bit exception word contains: -31..24 number of UChars used for the full mapping -23..16 reserved -15.. 0 UChar offset from the beginning of the UChars array where the - UChars for the special case mappings are stored in the following format: - -Format of case folding UChars: -Two UChars contain the simple mapping as follows: - 0, 0 no simple mapping - BMP,0 a simple mapping to a BMP code point - s1, s2 a simple mapping to a supplementary code point stored as two surrogates -This is followed by the UChars for the full case folding mappings. - -Example: -U+2160, ROMAN NUMERAL ONE, needs an exception because it has a lowercase -mapping and a numeric value. -Its exception values would be stored as 3 uint32_t words: - -- flags=0x0a (see above) with combining class 0 -- lowercase mapping 0x2170 -- numeric value=1 + 5.. 7 numeric type + non-digit numbers are stored with multiple types and pseudo-types + in order to facilitate compact encoding: + 0 no numeric value (0) + 1 decimal digit value (0..9) + 2 digit value (0..9) + 3 (U_NT_NUMERIC) normal non-digit numeric value 0..0xff + 4 (internal type UPROPS_NT_FRACTION) fraction + 5 (internal type UPROPS_NT_LARGE) large number >0xff + 6..7 reserved + + when returning the numeric type from a public API, + internal types must be turned into U_NT_NUMERIC + + 8..15 numeric value + encoding of fractions and large numbers see below + +Fractions: + // n is the 8-bit numeric value from bits 8..15 of the trie word (shifted down) + int32_t num, den; + num=n>>3; // num=0..31 + den=(n&7)+2; // den=2..9 + if(num==0) { + num=-1; // num=-1 or 1..31 + } + double result=(double)num/(double)den; + +Large numbers: + // n is the 8-bit numeric value from bits 8..15 of the trie word (shifted down) + int32_t m, e; + m=n>>4; // m=0..15 + e=(n&0xf); + if(m==0) { + m=1; // for large powers of 10 + e+=18; // e=18..33 + } else { + e+=2; // e=2..17 + } // m==10..15 are reserved + double result=(double)m*10^e; --- Additional properties (new in format version 2.1) --- @@ -277,6 +193,32 @@ See i10 maxValues above, contains only UBLOCK_COUNT and USCRIPT_CODE_LIMIT. - i10 also contains U_LB_COUNT and U_EA_COUNT. - i11 contains maxValues2 for vector word 2. +--- Changes in format version 4 --- + +The format changes between version 3 and 4 because the properties related to +case mappings and bidi/shaping are pulled out into separate files +for modularization. +In order to reduce the need for code changes, some of the previous data +structures are omitted, rather than rearranging everything. + +(The change to format version 4 is for ICU 3.4. The last CVS revision of +genprops/store.c for format version 3.2 is 1.48.) + +The main trie's data is significantly simplified: +- The trie's 16-bit data word is used directly instead of as an index + into props32[]. +- The trie uses the default trie folding functions instead of custom ones. +- Numeric values are stored directly in the trie data word, with special + encodings. +- No more exception data (the data that needed it was pulled out, or, in the + case of numeric values, encoded differently). +- No more string data (pulled out - was for case mappings). + +Also, some of the previously used properties vector bits are reserved again. + +The indexes[] values for the omitted structures are still filled in +(indicating zero-length arrays) so that the swapper code remains unchanged. + ----------------------------------------------------------------------------- */ /* UDataInfo cf. udata.h */ @@ -290,46 +232,12 @@ static UDataInfo dataInfo={ 0, { 0x55, 0x50, 0x72, 0x6f }, /* dataFormat="UPro" */ - { 3, 2, UTRIE_SHIFT, UTRIE_INDEX_SHIFT }, /* formatVersion */ + { 4, 0, UTRIE_SHIFT, UTRIE_INDEX_SHIFT }, /* formatVersion */ { 4, 0, 1, 0 } /* dataVersion */ }; -/* definitions of expected data size limits */ -enum { - MAX_PROPS_COUNT=26000, - MAX_UCHAR_COUNT=10000 -}; - static UNewTrie *pTrie=NULL; -/* props32[] contains unique properties words after compacting the array of properties */ -static uint32_t props32[MAX_PROPS_COUNT]; - -/* context pointer for compareProps() - temporarily holds a pointer to the trie data */ -static uint32_t *props; - -/* length of props32[] after compaction */ -static int32_t propsTop; - -/* exceptions values */ -static uint32_t exceptions[UPROPS_MAX_EXCEPTIONS_COUNT+20]; -static uint16_t exceptionsTop=0; - -/* Unicode characters, e.g. for special casing or decomposition */ -static UChar uchars[MAX_UCHAR_COUNT+20]; -static uint32_t ucharsTop=0; - -/* statistics */ -static uint16_t exceptionsCount=0; - -/* prototypes --------------------------------------------------------------- */ - -static int -compareProps(const void *l, const void *r); - -static uint32_t -addUChars(const UChar *s, uint32_t length); - /* -------------------------------------------------------------------------- */ extern void @@ -341,266 +249,109 @@ setUnicodeVersion(const char *v) { extern void initStore() { - pTrie=utrie_open(NULL, NULL, MAX_PROPS_COUNT, 0, 0, TRUE); + pTrie=utrie_open(NULL, NULL, 40000, 0, 0, TRUE); if(pTrie==NULL) { fprintf(stderr, "error: unable to create a UNewTrie\n"); exit(U_MEMORY_ALLOCATION_ERROR); } - uprv_memset(props32, 0, sizeof(props32)); initAdditionalProperties(); } +extern void +exitStore() { + utrie_close(pTrie); + exitAdditionalProperties(); +} + +static uint32_t printNumericTypeValueError(Props *p) { + fprintf(stderr, "genprops error: unable to encode numeric type & value %d %ld/%lu E%d\n", + (int)p->numericType, (long)p->numericValue, (unsigned long)p->denominator, p->exponent); + exit(U_ILLEGAL_ARGUMENT_ERROR); + return 0; +} + /* store a character's properties ------------------------------------------- */ extern uint32_t makeProps(Props *p) { - uint32_t x; - int32_t value; - uint16_t count; - UBool isNumber; - - /* - * Simple ideas for reducing the number of bits for one character's - * properties: - * - * Some fields are only used for characters of certain - * general categories: - * - casing fields for letters and others, not for - * numbers & Mn - * + uppercase not for uppercase letters - * + lowercase not for lowercase letters - * + titlecase not for titlecase letters - * - * * most of the time, uppercase=titlecase - * - numeric fields for various digit & other types - * - canonical combining classes for non-spacing marks (Mn) - * * the above is not always true, for all three cases - * - * Using the same bits for alternate fields saves some space. - * - * For the canonical categories, there are only few actually used - * most of the time. - * They can be stored using 5 bits. - * - * In the BiDi categories, the 5 explicit codes are only ever - * assigned 1:1 to 5 well-known code points. Storing only one - * value for all "explicit codes" gets this down to 4 bits. - * Client code then needs to check for this special value - * and replace it by the real one using a 5-element table. - * - * The general categories Mn & Me, non-spacing & enclosing marks, - * are always NSM, and NSM are always of those categories. - * - * Digit values can often be derived from the code point value - * itself in a simple way. - * - */ - - /* count the case mappings and other values competing for the value bit field */ - x=0; - value=0; - count=0; - isNumber= (UBool)(genCategoryNames[p->generalCategory][0]=='N'); - - if(p->upperCase!=0) { - /* verify that no numbers and no Mn have case mappings */ - if(p->generalCategory==U_LOWERCASE_LETTER) { - value=(int32_t)p->code-(int32_t)p->upperCase; - } else { - x=UPROPS_EXCEPTION_BIT; + uint32_t den; + int32_t type, value, exp; + + /* encode numeric type & value */ + type=p->numericType; + value=p->numericValue; + den=p->denominator; + exp=p->exponent; + + if(den!=0) { + /* fraction */ + if( type!=U_NT_NUMERIC || + value<-1 || value==0 || value>UPROPS_FRACTION_MAX_NUM || + den<UPROPS_FRACTION_MIN_DEN || UPROPS_FRACTION_MAX_DEN<den || + exp!=0 + ) { + return printNumericTypeValueError(p); } - ++count; - } - if(p->lowerCase!=0) { - /* verify that no numbers and no Mn have case mappings */ - if(p->generalCategory==U_UPPERCASE_LETTER || p->generalCategory==U_TITLECASE_LETTER) { - value=(int32_t)p->lowerCase-(int32_t)p->code; - } else { - x=UPROPS_EXCEPTION_BIT; + type=UPROPS_NT_FRACTION; + + if(value==-1) { + value=0; } - ++count; - } - if(p->upperCase!=p->titleCase) { - x=UPROPS_EXCEPTION_BIT; - ++count; - } - if(p->numericType!=0) { - value=p->numericValue; - ++count; - } - if(p->denominator!=0) { - x=UPROPS_EXCEPTION_BIT; - ++count; - } - if(p->isMirrored) { - if(p->mirrorMapping!=0) { - value=(int32_t)p->mirrorMapping-(int32_t)p->code; + den-=UPROPS_FRACTION_DEN_OFFSET; + value=(value<<UPROPS_FRACTION_NUM_SHIFT)|den; + } else if(exp!=0) { + /* very large value */ + if( type!=U_NT_NUMERIC || + value<1 || 9<value || + exp<UPROPS_LARGE_MIN_EXP || UPROPS_LARGE_MAX_EXP_EXTRA<exp + ) { + return printNumericTypeValueError(p); } - ++count; - } - if(p->specialCasing!=NULL) { - x=UPROPS_EXCEPTION_BIT; - ++count; - } - if(p->caseFolding!=NULL) { - x=UPROPS_EXCEPTION_BIT; - ++count; - } + type=UPROPS_NT_LARGE; - /* handle exceptions */ - if(count>1 || x!=0 || value<UPROPS_MIN_VALUE || UPROPS_MAX_VALUE<value) { - /* this code point needs exception values */ - if(beVerbose) { - if(x!=0) { - /* do not print - many code points because of SpecialCasing & CaseFolding - printf("*** code 0x%06x needs an exception because it is irregular\n", p->code); - */ - } else if(value<UPROPS_MIN_VALUE || UPROPS_MAX_VALUE<value) { - printf("*** U+%04x needs an exception because its value is out-of-bounds at %ld (not [%ld..%ld]\n", - (int)p->code, (long)value, (long)UPROPS_MIN_VALUE, (long)UPROPS_MAX_VALUE); - } else { - printf("*** U+%04x needs an exception because it has %u values\n", - (int)p->code, count); + if(exp<=UPROPS_LARGE_MAX_EXP) { + /* 1..9 * 10^(2..17) */ + exp-=UPROPS_LARGE_EXP_OFFSET; + } else { + /* 1 * 10^(18..33) */ + if(value!=1) { + return printNumericTypeValueError(p); } + value=0; + exp-=UPROPS_LARGE_EXP_OFFSET_EXTRA; } + value=(value<<UPROPS_LARGE_MANT_SHIFT)|exp; + } else if(value>UPROPS_MAX_SMALL_NUMBER) { + /* large value */ + if(type!=U_NT_NUMERIC) { + return printNumericTypeValueError(p); + } + type=UPROPS_NT_LARGE; - ++exceptionsCount; - x=UPROPS_EXCEPTION_BIT; + /* split the value into mantissa and exponent, base 10 */ + while((value%10)==0) { + value/=10; + ++exp; + } + if(value>9) { + return printNumericTypeValueError(p); + } - /* allocate and create exception values */ - value=exceptionsTop; - if(value>=UPROPS_MAX_EXCEPTIONS_COUNT) { - fprintf(stderr, "genprops: out of exceptions memory at U+%06x. (%d exceeds allocated space)\n", - (int)p->code, (int)value); - exit(U_MEMORY_ALLOCATION_ERROR); - } else { - uint32_t first=0; - uint16_t length=1; + exp-=UPROPS_LARGE_EXP_OFFSET; + value=(value<<UPROPS_LARGE_MANT_SHIFT)|exp; + } else if(value<0) { + /* unable to encode negative values, other than fractions -1/x */ + return printNumericTypeValueError(p); - if(p->upperCase!=0) { - first|=1; - exceptions[value+length++]=p->upperCase; - } - if(p->lowerCase!=0) { - first|=2; - exceptions[value+length++]=p->lowerCase; - } - if(p->upperCase!=p->titleCase) { - first|=4; - if(p->titleCase!=0) { - exceptions[value+length++]=p->titleCase; - } else { - exceptions[value+length++]=p->code; - } - } - if(p->numericType!=0) { - if(p->denominator==0) { - first|=0x10; - exceptions[value+length++]=(uint32_t)p->numericValue; - } else { - if(p->numericValue!=1) { - first|=0x10; - exceptions[value+length++]=(uint32_t)p->numericValue; - } - first|=0x20; - exceptions[value+length++]=p->denominator; - } - } - if(p->isMirrored) { - first|=0x40; - exceptions[value+length++]=p->mirrorMapping; - } - if(p->specialCasing!=NULL) { - first|=0x80; - if(p->specialCasing->isComplex) { - /* complex special casing */ - exceptions[value+length++]=0x80000000; - } else { - /* unconditional special casing */ - UChar u[128]; - uint32_t i; - uint16_t j, entry; - - i=1; - entry=0; - j=p->specialCasing->lowerCase[0]; - if(j>0) { - uprv_memcpy(u+1, p->specialCasing->lowerCase+1, 2*j); - i+=j; - entry=j; - } - j=p->specialCasing->upperCase[0]; - if(j>0) { - uprv_memcpy(u+i, p->specialCasing->upperCase+1, 2*j); - i+=j; - entry|=j<<5; - } - j=p->specialCasing->titleCase[0]; - if(j>0) { - uprv_memcpy(u+i, p->specialCasing->titleCase+1, 2*j); - i+=j; - entry|=j<<10; - } - u[0]=entry; - - exceptions[value+length++]=(i<<24)|addUChars(u, i); - } - } - if(p->caseFolding!=NULL) { - first|=0x100; - if(p->caseFolding->simple==0 && p->caseFolding->full[0]==0) { - /* special case folding, store only a marker */ - exceptions[value+length++]=0; - } else { - /* normal case folding with a simple and a full mapping */ - UChar u[128]; - uint16_t i; - - /* store the simple mapping into the first two UChars */ - i=0; - u[1]=0; - UTF_APPEND_CHAR_UNSAFE(u, i, p->caseFolding->simple); - - /* store the full mapping after that */ - i=p->caseFolding->full[0]; - if(i>0) { - uprv_memcpy(u+2, p->caseFolding->full+1, 2*i); - } - - exceptions[value+length++]=(i<<24)|addUChars(u, 2+i); - } - } - exceptions[value]=first; - exceptionsTop+=length; - } + /* } else normal value=0..0xff { */ } - /* put together the 32-bit word of encoded properties */ - x|= + /* encode the properties */ + return (uint32_t)p->generalCategory | - (uint32_t)p->bidi<<UPROPS_BIDI_SHIFT | - (uint32_t)p->isMirrored<<UPROPS_MIRROR_SHIFT | - (uint32_t)p->numericType<<UPROPS_NUMERIC_TYPE_SHIFT | - (uint32_t)value<<UPROPS_VALUE_SHIFT; - - return x; - - /* - * "Higher-hanging fruit" (not implemented): - * - * For some sets of fields, there are fewer sets of values - * than the product of the numbers of values per field. - * This means that storing one single value for more than - * one field and later looking up both field values in a table - * saves space. - * Examples: - * - general category & BiDi - * - * There are only few common displacements between a code point - * and its case mappings. Store deltas. Store codes for few - * occuring deltas. - */ + ((uint32_t)type<<UPROPS_NUMERIC_TYPE_SHIFT) | + ((uint32_t)value<<UPROPS_NUMERIC_VALUE_SHIFT); } extern void @@ -611,21 +362,6 @@ addProps(uint32_t c, uint32_t x) { } } -extern void -addCaseSensitive(UChar32 first, UChar32 last) { - uint32_t x, cs; - - cs=U_MASK(UPROPS_CASE_SENSITIVE_SHIFT); - while(first<=last) { - x=utrie_get32(pTrie, first, NULL); - if(!utrie_set32(pTrie, first, x|cs)) { - fprintf(stderr, "error: too many entries for the properties trie\n"); - exit(U_BUFFER_OVERFLOW_ERROR); - } - ++first; - } -} - extern uint32_t getProps(uint32_t c) { return utrie_get32(pTrie, (UChar32)c, NULL); @@ -641,127 +377,10 @@ repeatProps(uint32_t first, uint32_t last, uint32_t x) { } } -/* compacting --------------------------------------------------------------- */ - -static void -compactProps(void) { - /* - * At this point, all the propsTop properties are in props[], but they - * are not all unique. - * Now we sort them, reduce them to unique ones in props32[], and - * build an index in stage3[] from the old to the new indexes. - * (The quick sort averages at N*log(N) with N=propsTop. The inverting - * yields linear performance.) - */ - - /* - * We are going to sort only an index table in map[] because we need this - * index table anyway and qsort() does not allow to sort two tables together - * directly. This will thus also reduce the amount of data moved around. - */ - uint32_t x; - int32_t i, oldIndex, newIndex; - - static uint16_t map[MAX_PROPS_COUNT]; - -#if DO_DEBUG_OUT - { - /* debug output */ - uint16_t i1, i2, i3; - uint32_t c; - for(c=0; c<0xffff; c+=307) { - printf("properties(0x%06x)=0x%06x\n", c, getProps(c, &i1, &i2, &i3)); - } - } -#endif - - props=utrie_getData(pTrie, &propsTop); - - /* build the index table */ - for(i=propsTop; i>0;) { - --i; - map[i]=(uint16_t)i; - } - - /* reorder */ - qsort(map, propsTop, 2, compareProps); - - /* - * Now invert the reordered table and compact it in the same step. - * The result will be props32[] having only unique properties words - * and stage3[] having indexes to them. - */ - newIndex=0; - for(i=0; i<propsTop;) { - /* set the first of a possible series of the same properties */ - oldIndex=map[i]; - props32[newIndex]=x=props[oldIndex]; - props[oldIndex]=newIndex; - - /* set the following same properties only in stage3 */ - while(++i<propsTop && x==props[map[i]]) { - props[map[i]]=newIndex; - } - - ++newIndex; - } - - /* we saved some space */ - if(beVerbose) { - printf("compactProps() reduced propsTop from %u to %u\n", - (int)propsTop, (int)newIndex); - } - propsTop=newIndex; - -#if DO_DEBUG_OUT - { - /* debug output */ - uint16_t i1, i2, i3, i4; - uint32_t c; - for(c=0; c<0xffff; c+=307) { - printf("properties(0x%06x)=0x%06x\n", c, getProps2(c, &i1, &i2, &i3, &i4)); - } - } -#endif -} - -static int -compareProps(const void *l, const void *r) { - uint32_t left=props[*(const uint16_t *)l], right=props[*(const uint16_t *)r]; - - /* compare general categories first */ - int rc=(int)(left&0x1f)-(int)(right&0x1f); - if(rc==0 && left!=right) { - rc= left<right ? -1 : 1; - } - return rc; -} - /* generate output data ----------------------------------------------------- */ -/* folding value: just store the offset (16 bits) if there is any non-0 entry */ -U_CFUNC uint32_t U_EXPORT2 -getFoldedPropsValue(UNewTrie *trie, UChar32 start, int32_t offset) { - uint32_t value; - UChar32 limit; - UBool inBlockZero; - - limit=start+0x400; - while(start<limit) { - value=utrie_get32(trie, start, &inBlockZero); - if(inBlockZero) { - start+=UTRIE_DATA_BLOCK_LENGTH; - } else if(value!=0) { - return (uint32_t)(offset|0x8000); - } else { - ++start; - } - } - return 0; -} - extern void -generateData(const char *dataDir) { +generateData(const char *dataDir, UBool csource) { static int32_t indexes[UPROPS_INDEX_COUNT]={ 0, 0, 0, 0, 0, 0, 0, 0, @@ -773,13 +392,11 @@ generateData(const char *dataDir) { UNewDataMemory *pData; UErrorCode errorCode=U_ZERO_ERROR; - uint32_t size; + uint32_t size = 0; int32_t trieSize, additionalPropsSize, offset; long dataLength; - compactProps(); - - trieSize=utrie_serialize(pTrie, trieBlock, sizeof(trieBlock), getFoldedPropsValue, TRUE, &errorCode); + trieSize=utrie_serialize(pTrie, trieBlock, sizeof(trieBlock), NULL, TRUE, &errorCode); if(U_FAILURE(errorCode)) { fprintf(stderr, "error: utrie_serialize failed: %s (length %ld)\n", u_errorName(errorCode), (long)trieSize); exit(errorCode); @@ -787,83 +404,93 @@ generateData(const char *dataDir) { offset=sizeof(indexes)/4; /* uint32_t offset to the properties trie */ - /* round up trie size to 4-alignement */ + /* round up trie size to 4-alignment */ trieSize=(trieSize+3)&~3; offset+=trieSize>>2; - indexes[UPROPS_PROPS32_INDEX]=offset; /* uint32_t offset to props[] */ - - offset+=propsTop; - indexes[UPROPS_EXCEPTIONS_INDEX]=offset;/* uint32_t offset to exceptions[] */ - - offset+=exceptionsTop; /* uint32_t offset to the first unit after exceptions[] */ - indexes[UPROPS_EXCEPTIONS_TOP_INDEX]=offset; - - /* round up UChar count to 4-alignement */ - ucharsTop=(ucharsTop+1)&~1; - offset+=(uint16_t)(ucharsTop/2); /* uint32_t offset to the first unit after uchars[] */ + indexes[UPROPS_PROPS32_INDEX]= /* set indexes to the same offsets for empty */ + indexes[UPROPS_EXCEPTIONS_INDEX]= /* structures from the old format version 3 */ + indexes[UPROPS_EXCEPTIONS_TOP_INDEX]= /* so that less runtime code has to be changed */ indexes[UPROPS_ADDITIONAL_TRIE_INDEX]=offset; if(beVerbose) { printf("trie size in bytes: %5u\n", (int)trieSize); - printf("number of unique properties values: %5u\n", (int)propsTop); - printf("number of code points with exceptions: %5u\n", exceptionsCount); - printf("size in bytes of exceptions: %5u\n", 4*exceptionsTop); - printf("number of UChars for special mappings: %5u\n", (int)ucharsTop); } - additionalPropsSize=writeAdditionalData(additionalProps, sizeof(additionalProps), indexes); + if(csource) { + /* write .c file for hardcoded data */ + UTrie trie={ NULL }; + FILE *f; + + utrie_unserialize(&trie, trieBlock, trieSize, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf( + stderr, + "genprops error: failed to utrie_unserialize(uprops.icu main trie) - %s\n", + u_errorName(errorCode)); + return; + } - size=4*offset+additionalPropsSize; /* total size of data */ - if(beVerbose) { - printf("data size: %6lu\n", (unsigned long)size); - } + f=usrc_create(dataDir, "uchar_props_data.c"); + if(f!=NULL) { + usrc_writeArray(f, + "static const UVersionInfo formatVersion={", + dataInfo.formatVersion, 8, 4, + "};\n\n"); + usrc_writeArray(f, + "static const UVersionInfo dataVersion={", + dataInfo.dataVersion, 8, 4, + "};\n\n"); + usrc_writeUTrieArrays(f, + "static const uint16_t propsTrie_index[%ld]={\n", NULL, + &trie, + "\n};\n\n"); + usrc_writeUTrieStruct(f, + "static const UTrie propsTrie={\n", + &trie, "propsTrie_index", NULL, NULL, + "};\n\n"); + + additionalPropsSize=writeAdditionalData(f, additionalProps, sizeof(additionalProps), indexes); + size=4*offset+additionalPropsSize; /* total size of data */ + + usrc_writeArray(f, + "static const int32_t indexes[UPROPS_INDEX_COUNT]={", + indexes, 32, UPROPS_INDEX_COUNT, + "};\n\n"); + fclose(f); + } + } else { + /* write the data */ + pData=udata_create(dataDir, DATA_TYPE, DATA_NAME, &dataInfo, + haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "genprops: unable to create data memory, %s\n", u_errorName(errorCode)); + exit(errorCode); + } - /* write the data */ - pData=udata_create(dataDir, DATA_TYPE, DATA_NAME, &dataInfo, - haveCopyright ? U_COPYRIGHT_STRING : NULL, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "genprops: unable to create data memory, %s\n", u_errorName(errorCode)); - exit(errorCode); - } + additionalPropsSize=writeAdditionalData(NULL, additionalProps, sizeof(additionalProps), indexes); + size=4*offset+additionalPropsSize; /* total size of data */ - udata_writeBlock(pData, indexes, sizeof(indexes)); - udata_writeBlock(pData, trieBlock, trieSize); - udata_writeBlock(pData, props32, 4*propsTop); - udata_writeBlock(pData, exceptions, 4*exceptionsTop); - udata_writeBlock(pData, uchars, 2*ucharsTop); - udata_writeBlock(pData, additionalProps, additionalPropsSize); + udata_writeBlock(pData, indexes, sizeof(indexes)); + udata_writeBlock(pData, trieBlock, trieSize); + udata_writeBlock(pData, additionalProps, additionalPropsSize); - /* finish up */ - dataLength=udata_finish(pData, &errorCode); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "genprops: error %d writing the output file\n", errorCode); - exit(errorCode); - } + /* finish up */ + dataLength=udata_finish(pData, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "genprops: error %d writing the output file\n", errorCode); + exit(errorCode); + } - if(dataLength!=(long)size) { - fprintf(stderr, "genprops: data length %ld != calculated size %lu\n", - dataLength, (unsigned long)size); - exit(U_INTERNAL_PROGRAM_ERROR); + if(dataLength!=(long)size) { + fprintf(stderr, "genprops: data length %ld != calculated size %lu\n", + dataLength, (unsigned long)size); + exit(U_INTERNAL_PROGRAM_ERROR); + } } - utrie_close(pTrie); -} - -/* helpers ------------------------------------------------------------------ */ - -static uint32_t -addUChars(const UChar *s, uint32_t length) { - uint32_t top=(uint16_t)(ucharsTop+length); - UChar *p; - - if(top>=MAX_UCHAR_COUNT) { - fprintf(stderr, "genprops: out of UChars memory\n"); - exit(U_MEMORY_ALLOCATION_ERROR); + if(beVerbose) { + printf("data size: %6lu\n", (unsigned long)size); } - p=uchars+ucharsTop; - uprv_memcpy(p, s, 2*length); - ucharsTop=top; - return (uint32_t)(p-uchars); } /* diff --git a/icuSources/tools/genrb/Makefile.in b/icuSources/tools/genrb/Makefile.in index e43634ac..8ec43fcc 100644 --- a/icuSources/tools/genrb/Makefile.in +++ b/icuSources/tools/genrb/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/genrb -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -10,7 +10,8 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/genrb TARGET_STUB_NAME = genrb DERB_STUB_NAME = derb @@ -19,8 +20,6 @@ SECTION = 1 MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) $(DERB_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/genrb ## Extra files to remove for 'make clean' CLEANFILES = *~ $(MAN_FILES) $(DEPS) $(DERB_DEPS) @@ -29,10 +28,13 @@ CLEANFILES = *~ $(MAN_FILES) $(DEPS) $(DERB_DEPS) TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) DERB = $(BINDIR)/$(DERB_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/../toolutil +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/../toolutil LIBS = $(LIBICUI18N) $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) -OBJECTS = errmsg.o genrb.o parse.o read.o reslist.o ustr.o util.o \ +OBJECTS = errmsg.o genrb.o parse.o read.o reslist.o ustr.o rbutil.o \ wrtjava.o rle.o wrtxml.o prscmnts.o DERB_OBJ = derb.o @@ -41,8 +43,7 @@ DERB_DEPS = $(DERB_OBJ:.o=.d) ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -62,9 +63,13 @@ install-local: all-local install-man $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) $(INSTALL) $(DERB) $(DESTDIR)$(bindir) +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + dist-local: -clean-local: +clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) $(RMV) $(TARGET) $(DERB) $(OBJECTS) $(DERB_OBJ) @@ -84,13 +89,6 @@ $(DERB) : $(DERB_OBJ) $(LINK.c) $(OUTOPT)$@ $^ $(LIBS) -# the 'mv' will always fail if you are building in the source dir - -# man page -install-man: $(MAN_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) - # This line is needed to serialize builds when the gmake -j option is used. $(TARGET_STUB_NAME).$(SECTION): $(DERB_STUB_NAME).$(SECTION) @@ -98,12 +96,6 @@ $(TARGET_STUB_NAME).$(SECTION): $(DERB_STUB_NAME).$(SECTION) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -# build postscript and pdf formats -$(TARGET).ps: $(TARGET).$(SECTION) - groff -man < $< > $@ - -$(TARGET).pdf: $(TARGET).ps - ps2pdf $< $@ ifeq (,$(MAKECMDGOALS)) -include $(DEPS) diff --git a/icuSources/tools/genrb/derb.c b/icuSources/tools/genrb/derb.c index 9ea70ea0..d63c4811 100644 --- a/icuSources/tools/genrb/derb.c +++ b/icuSources/tools/genrb/derb.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -30,9 +30,20 @@ #include <stdio.h> #include <ctype.h> -#if defined(WIN32) || defined(U_CYGWIN) +#if defined(U_WINDOWS) || defined(U_CYGWIN) #include <io.h> #include <fcntl.h> +#define USE_FILENO_BINARY_MODE 1 +/* Windows likes to rename Unix-like functions */ +#ifndef fileno +#define fileno _fileno +#endif +#ifndef setmode +#define setmode _setmode +#endif +#ifndef O_BINARY +#define O_BINARY _O_BINARY +#endif #endif #define DERB_VERSION "1.0" @@ -45,8 +56,6 @@ static const int32_t indentsize = 4; static int32_t truncsize = DERB_DEFAULT_TRUNC; static UBool trunc = FALSE; -static const UChar baderror[] = { 0x0042, 0x0041, 0x0044, 0x0000 }; - static const char *getEncodingName(const char *encoding); static void reportError(const char *pname, UErrorCode *status, const char *when); static UChar *quotedString(const UChar *string); @@ -94,9 +103,9 @@ main(int argc, char* argv[]) { /* Get the name of tool. */ pname = uprv_strrchr(*argv, U_FILE_SEP_CHAR); -#ifdef WIN32 +#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR if (!pname) { - pname = uprv_strrchr(*argv, '/'); + pname = uprv_strrchr(*argv, U_FILE_ALT_SEP_CHAR); } #endif if (!pname) { @@ -208,36 +217,47 @@ main(int argc, char* argv[]) { } p = uprv_strrchr(arg, U_FILE_SEP_CHAR); +#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR + if (p == NULL) { + p = uprv_strrchr(arg, U_FILE_ALT_SEP_CHAR); + } +#endif if (!p) { p = arg; } else { - p++; + p++; } q = uprv_strrchr(p, '.'); if (!q) { - for (q = p; *q; ++q); + for (q = p; *q; ++q) + ; } uprv_strncpy(locale, p, q - p); locale[q - p] = 0; if (!(fromICUData = !uprv_strcmp(inputDir, "-"))) { UBool absfilename = *arg == U_FILE_SEP_CHAR; -#ifdef WIN32 +#ifdef U_WINDOWS if (!absfilename) { absfilename = (uprv_strlen(arg) > 2 && isalpha(arg[0]) - && arg[1] == ':' && arg[2] == U_FILE_SEP_CHAR); + && arg[1] == ':' && arg[2] == U_FILE_SEP_CHAR); } #endif if (absfilename) { thename = arg; } else { - q = uprv_strrchr(arg, U_FILE_SEP_CHAR); - uprv_strcpy(infile, inputDir); - if(q != NULL) { - uprv_strcat(infile, U_FILE_SEP_STRING), - strncat(infile, arg, q-arg); - } - thename = infile; + q = uprv_strrchr(arg, U_FILE_SEP_CHAR); +#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR + if (q == NULL) { + q = uprv_strrchr(arg, U_FILE_ALT_SEP_CHAR); + } +#endif + uprv_strcpy(infile, inputDir); + if(q != NULL) { + uprv_strcat(infile, U_FILE_SEP_STRING); + strncat(infile, arg, q-arg); + } + thename = infile; } } status = U_ZERO_ERROR; @@ -255,9 +275,9 @@ main(int argc, char* argv[]) { if (!locale || !tostdout) { filename = uprv_strrchr(arg, U_FILE_SEP_CHAR); -#ifdef WIN32 +#if U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR if (!filename) { - filename = uprv_strrchr(arg, '/'); + filename = uprv_strrchr(arg, U_FILE_ALT_SEP_CHAR); } #endif if (!filename) { @@ -273,8 +293,8 @@ main(int argc, char* argv[]) { if (tostdout) { out = stdout; -#if defined(WIN32) || defined(U_CYGWIN) - if (_setmode(_fileno(out), _O_BINARY) == -1) { +#if defined(U_WINDOWS) || defined(U_CYGWIN) + if (setmode(fileno(out), O_BINARY) == -1) { fprintf(stderr, "%s: couldn't set standard output to binary mode\n", pname); return 4; } @@ -336,7 +356,8 @@ main(int argc, char* argv[]) { if (out != stdout) { fclose(out); } - } else { + } + else { reportError(pname, &status, "opening resource file"); } diff --git a/icuSources/tools/genrb/derb.dsp b/icuSources/tools/genrb/derb.dsp deleted file mode 100644 index b74a4c73..00000000 --- a/icuSources/tools/genrb/derb.dsp +++ /dev/null @@ -1,206 +0,0 @@ -# Microsoft Developer Studio Project File - Name="derb" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=derb - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "derb.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "derb.mak" CFG="derb - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "derb - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "derb - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "derb - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "derb - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "derb - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "derb___Win32_Release" -# PROP BASE Intermediate_Dir "derb___Win32_Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "derb_Win32_Release" -# PROP Intermediate_Dir "derb_Win32_Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\derb_Win32_Release\derb.exe -InputPath=.\derb_Win32_Release\derb.exe -InputName=derb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "derb - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "derb___Win32_Debug" -# PROP BASE Intermediate_Dir "derb___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "derb_Win32_Debug" -# PROP Intermediate_Dir "derb_Win32_Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\derb_Win32_Debug\derb.exe -InputPath=.\derb_Win32_Debug\derb.exe -InputName=derb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "derb - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "derb___Win64_Release" -# PROP BASE Intermediate_Dir "derb___Win64_Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "derb_Win64_Release" -# PROP Intermediate_Dir "derb_Win64_Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\derb_Win64_Release\derb.exe -InputPath=.\derb_Win64_Release\derb.exe -InputName=derb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "derb - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "derb___Win64_Debug" -# PROP BASE Intermediate_Dir "derb___Win64_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "derb_Win64_Debug" -# PROP Intermediate_Dir "derb_Win64_Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\derb_Win64_Debug\derb.exe -InputPath=.\derb_Win64_Debug\derb.exe -InputName=derb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "derb - Win32 Release" -# Name "derb - Win32 Debug" -# Name "derb - Win64 Release" -# Name "derb - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\derb.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/genrb/derb.vcproj b/icuSources/tools/genrb/derb.vcproj index 99f14895..eb0bf376 100644 --- a/icuSources/tools/genrb/derb.vcproj +++ b/icuSources/tools/genrb/derb.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\derb_Win32_Release/derb.pch" AssemblerListingLocation=".\derb_Win32_Release/" ObjectFile=".\derb_Win32_Release/" @@ -87,12 +87,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\derb_Win32_Debug/derb.pch" AssemblerListingLocation=".\derb_Win32_Debug/" ObjectFile=".\derb_Win32_Debug/" diff --git a/icuSources/tools/genrb/gendtjar.pl b/icuSources/tools/genrb/gendtjar.pl index 38aada8d..0e953cac 100644 --- a/icuSources/tools/genrb/gendtjar.pl +++ b/icuSources/tools/genrb/gendtjar.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl # ******************************************************************** # * COPYRIGHT: -# * Copyright (c) 2002-2004, International Business Machines Corporation and +# * Copyright (c) 2002-2006, International Business Machines Corporation and # * others. All Rights Reserved. # ******************************************************************** @@ -22,47 +22,194 @@ use File::Copy; use Getopt::Long; use File::Path; use File::Copy; - +use Cwd; +use Cwd 'abs_path'; main(); #------------------------------------------------------------------ sub main(){ -GetOptions( - "--icu-root=s" => \$icuRootDir, - "--jar=s" => \$jarDir, - "--icu4j-root=s" => \$icu4jDir, - "--version=s" => \$version - ); -usage() unless defined $icuRootDir; -usage() unless defined $jarDir; - #usage() unless defined $icu4jRootDir; - $icuswap = $icuRootDir."/bin/icuswap -tb"; - $tempDir =cwd(); - $tempDir .= "/temp"; - $version =~ s/\.//; - $icu4jDataDir ="com/ibm/icu/impl/data/icudt".$version."b"; - $icu4jTestDataDir = "com/ibm/icu/dev/data/testdata"; - $icuDataDir =$icuRootDir."/source/data/out/build/icudt".$version.checkPlatform(); - $icuTestDataDir =$icuRootDir."/source/test/testdata/out/build/"; - convertData($icuDataDir, $icuswap, $tempDir, $icu4jDataDir); - #convertData($icuDataDir."/coll/", $icuswap, $tempDir, $icu4jDataDir."/coll"); - createJar("$jarDir/jar", "icudata.jar", $tempDir, $icu4jDataDir); + GetOptions( + "--icu-root=s" => \$icuRootDir, + "--jar=s" => \$jarDir, + "--icu4j-root=s" => \$icu4jDir, + "--version=s" => \$version, + "--verbose" => \$verbose, + "--help" => \$help + ); + $cwd = abs_path(getcwd); + + if($help){ + usage(); + } + unless (defined $icuRootDir){ + $icuRootDir =abs_path($cwd."/../../.."); + } + unless (defined $icu4jDir){ + $icu4jDir =abs_path($icuRootDir."/../icu4j"); + } + unless (defined $jarDir){ + if(defined $ENV{'JAVA_HOME'}){ + $jarDir=$ENV{'JAVA_HOME'}."/bin"; + }else{ + print("ERROR: JAVA_HOME enviroment variable undefined and --jar argument not specifed.\n"); + usage(); + } + } + + $platform = getPlatform(); + $icuBinDir = $icuRootDir; + + $path=$ENV{'PATH'}; + + if(($platform eq "cygwin") || ($platform eq "linux")){ + $icuBinDir .= "/source/bin"; + $icuLibDir = abs_path($icuBinDir."/../lib"); + $path .=":$icuBinDir:$icuLibDir"; + + $libpath = $ENV{'LD_LIBRARY_PATH'}.":$icuLibDir"; + $ENV{'LD_LIBRARY_PATH'} = $libpath; + + #print ("##### LD_LIBRARY_PATH = $ENV{'LD_LIBRARY_PATH'}\n"); + + }elsif($platform eq "aix"){ + + $icuBinDir .= "/source/bin"; + $icuLibDir = abs_path($icuBinDir."/../lib"); + $path .=":$icuBinDir:$icuLibDir"; - convertTestData($icuTestDataDir, $icuswap, $tempDir, $icu4jTestDataDir); - createJar("$jarDir/jar", "testdata.jar", $tempDir, $icu4jTestDataDir); + $libpath = $ENV{'LIBPATH'}.":$icuLibDir"; + $ENV{'LIBPATH'} = $libpath; + #print ("##### LIBPATH = $ENV{'LIBPATH'}\n"); + }elsif($platform eq "darwin"){ + $icuBinDir .= "/source/bin"; + $icuLibDir = abs_path($icuBinDir."/../lib"); + $path .=":$icuBinDir:$icuLibDir"; + + $libpath = $ENV{'DYLD_LIBRARY_PATH'}.":$icuLibDir"; + $ENV{'DYLD_LIBRARY_PATH'} = $libpath; + + }elsif($platform eq "MSWin32"){ + $icuBinDir =$icuRootDir."/bin"; + $path .=$icuBinDir; + + } + $ENV{'PATH'} = $path; + #print ("##### PATH = $ENV{'PATH'}\n"); + # TODO add more platforms and test on Linux and Unix + + $icuBuildDir =$icuRootDir."/source/data/out/build"; + $icuTestDataDir =$icuRootDir."/source/test/testdata/out/build/"; + + # now build ICU + buildICU($platform, $icuRootDir, $icuTestDataDir, $verbose); + + #figure out the version and endianess + unless (defined $version){ + ($version, $endian) = getVersion(); + #print "#################### $version, $endian ######\n"; + } + + $icuswap = $icuBinDir."/icuswap -tb"; + $tempDir = $cwd."/temp"; + $version =~ s/\.//; + $icu4jImpl = "com/ibm/icu/impl/data/"; + $icu4jDataDir = $icu4jImpl."/icudt".$version."b"; + $icu4jDevDataDir = "com/ibm/icu/dev/data/"; + $icu4jTestDataDir = "$icu4jDevDataDir/testdata"; + + $icuDataDir =$icuBuildDir."/icudt".$version.checkPlatformEndianess(); + + convertData($icuDataDir, $icuswap, $tempDir, $icu4jDataDir, $verbose); + #convertData($icuDataDir."/coll/", $icuswap, $tempDir, $icu4jDataDir."/coll"); + createJar("$jarDir/jar", "icudata.jar", $tempDir, $icu4jDataDir, $verbose); + + convertTestData($icuTestDataDir, $icuswap, $tempDir, $icu4jTestDataDir, $verbose); + createJar("$jarDir/jar", "testdata.jar", $tempDir, $icu4jTestDataDir, $verbose); + copyData($icu4jDir, $icu4jImpl, $icu4jDevDataDir, $tempDir, $verbose); } +#----------------------------------------------------------------------- +sub buildICU{ + local($platform, $icuRootDir, $icuTestDataDir, $verbose) = @_; + $icuSrcDir = $icuRootDir."/source"; + $icuSrcDataDir = $icuSrcDir."/data"; + + chdir($icuSrcDir); + # clean the data directories + unlink($icuBuildDir."../"); + unlink($icuTestDataDir."../"); + + if(($platform eq "cygwin")||($platform eq "darwin")||($platform eq "linux")){ + # make all in ICU + cmd("make all", $verbose); + chdir($icuSrcDataDir); + cmd("make uni-core-data", $verbose); + chdir($icuTestDataDir."../../"); + #print($icuTestDataDir."../../\n"); + cmd("make", $verbose); + }elsif($platform eq "aix"){ + # make all in ICU + cmd("gmake all", $verbose); + chdir($icuSrcDataDir); + cmd("gmake uni-core-data", $verbose); + chdir($icuTestDataDir."../../"); + cmd("gmake", $verbose); + }elsif($platform eq "MSWin32"){ + #devenv.com $projectFileName \/build $configurationName > \"$cLogFile\" 2>&1 + cmd("devenv.com allinone/allinone.sln /useenv /build Debug", $verbose); + # build required data. this is required coz building icu will not build all the data + chdir($icuSrcDataDir); + cmd("NMAKE /f makedata.mak ICUMAKE=\"$icuSrcDataDir\" CFG=debug uni-core-data", $verbose); + + }else{ + print "ERROR: Could not build ICU unknown platform $platform. \n"; + exit(-1); + } + + chdir($cwd); +} +#----------------------------------------------------------------------- +sub getVersion{ + my @list; + opendir(DIR,$icuBuildDir); + + @list = readdir(DIR); + closedir(DIR); + + if(scalar(@list)>3){ + print("ERROR: More than 1 directory in build. Can't decide the version"); + exit(-1); + } + foreach $item (@list){ + next if($item eq "." || $item eq ".."); + my ($ver, $end) =$item =~ m/icudt(.*)(l|b|e)$/; + return $ver,$end; + } +} + +#----------------------------------------------------------------------- +sub getPlatform{ + $platform = $^O; + return $platform; +} #----------------------------------------------------------------------- sub createJar{ - local($jar, $jarFile, $tempDir, $dirToJar) = @_; + local($jar, $jarFile, $tempDir, $dirToJar, $verbose) = @_; chdir($tempDir); - $command = "$jar cvf $jarFile -C $tempDir $dirToJar"; - cmd($command); + $command=""; + print "INFO: Creating $jarFile\n"; + if(defined $verbose){ + $command = "$jar cvf $jarFile -C $tempDir $dirToJar"; + }else{ + $command = "$jar cf $jarFile -C $tempDir $dirToJar"; + } + + cmd($command, $verbose); } #----------------------------------------------------------------------- -sub checkPlatform { +sub checkPlatformEndianess { my $is_big_endian = unpack("h*", pack("s", 1)) =~ /01/; if ($is_big_endian) { return "b"; @@ -71,58 +218,81 @@ sub checkPlatform { } } #----------------------------------------------------------------------- - +sub copyData{ + local($icu4jDir, $icu4jImpl, $icu4jDevDataDir, $tempDir) =@_; + print("INFO: Copying $tempDir/icudata.jar to $icu4jDir/src/$icu4jImpl\n"); + copy("$tempDir/icudata.jar", "$icu4jDir/src/$icu4jImpl"); + print("INFO: Copying $tempDir/testdata.jar $icu4jDir/src/$icu4jDevDataDir\n"); + copy("$tempDir/testdata.jar","$icu4jDir/src/$icu4jDevDataDir"); +} #----------------------------------------------------------------------- sub convertData{ local($icuDataDir, $icuswap, $tempDir, $icu4jDataDir) =@_; my $dir = $tempDir."/".$icu4jDataDir; # create the temp directory - mkpath("$tempDir/$icu4jDataDir"); + mkpath($dir) ; # cd to the temp directory chdir($tempDir); - + my $endian = checkPlatformEndianess(); my @list; opendir(DIR,$icuDataDir); - print $icuDataDir; + #print $icuDataDir; @list = readdir(DIR); closedir(DIR); - print "{Command: $op*.*}\n"; my $op = $icuswap; + #print "####### $endian ############\n"; + if($endian eq "l"){ + print "INFO: {Command: $op $icuDataDir/*.*}\n"; + }else{ + print "INFO: {Command: copy($icuDataDir/*.*, $tempDir/$icu4jDataDir/*)}\n"; + } + $i=0; # now convert foreach $item (@list){ - next if($item eq "." || $item eq ".."); + next if($item eq "." || $item eq ".."); + # next if($item =~ /^t_.*$\.res/ ||$item =~ /^translit_.*$\.res/ || + # $item=~/$\.crs/ || $item=~ /$\.txt/ || + # $item=~/icudata\.res/ || $item=~/$\.exp/ || $item=~/$\.lib/ || + # $item=~/$\.obj/ || $item=~/$\.lst/); next if($item =~ /^t_.*$\.res/ ||$item =~ /^translit_.*$\.res/ || $item =~ /$\.cnv/ || - $item=~/$\.crs/ || $item=~ /$\.txt/ || $item=~ /^zoneinfo/ || + $item=~/$\.crs/ || $item=~ /$\.txt/ || $item=~/icudata\.res/ || $item=~/$\.exp/ || $item=~/$\.lib/ || $item=~/$\.obj/ || $item=~/cnvalias\.icu/ || $item=~/$\.lst/); if(-d "$icuDataDir/$item"){ - convertData("$icuDataDir/$item/", $icuswap, $tempDir, "$icu4jDataDir./$item/"); + convertData("$icuDataDir/$item/", $icuswap, $tempDir, "$icu4jDataDir/$item/"); next; } - $command = $icuswap." $icuDataDir/$item $tempDir/$icu4jDataDir/$item"; - cmd($command); + if($endian eq "l"){ + $command = $icuswap." $icuDataDir/$item $tempDir/$icu4jDataDir/$item"; + cmd($command, $verbose); + }else{ + $rc = copy("$icuDataDir/$item", "$tempDir/$icu4jDataDir/$item"); + if($rc==1){ + #die "ERROR: Could not copy $icuDataDir/$item to $tempDir/$icu4jDataDir/$item, $!"; + } + } } chdir(".."); - print "\nDONE\n"; + print "INFO: DONE\n"; } #----------------------------------------------------------------------- sub convertTestData{ local($icuDataDir, $icuswap, $tempDir, $icu4jDataDir) =@_; my $dir = $tempDir."/".$icu4jDataDir; # create the temp directory - mkpath("$tempDir/$icu4jDataDir"); + mkpath($dir); # cd to the temp directory chdir($tempDir); - print "{Command: $op*.*}\n"; my $op = $icuswap; + print "INFO: {Command: $op $icuDataDir/*.*}\n"; my @list; - opendir(DIR,$icuDataDir); - print $icuDataDir; + opendir(DIR,$icuDataDir) or die "ERROR: Could not open the $icuDataDir directory for reading $!"; + #print $icuDataDir; @list = readdir(DIR); closedir(DIR); - + my $endian = checkPlatformEndianess(); $i=0; # now convert foreach $item (@list){ @@ -130,33 +300,42 @@ sub convertTestData{ next if($item =~ /$\.cnv/ || item=~/$\.crs/ || $item=~ /$\.txt/ || $item=~/$\.exp/ || $item=~/$\.lib/ || $item=~/$\.obj/ || $item=~/$\.mak/ || $item=~/test\.icu/ || $item=~/$\.lst/); - - if($item =~ /^testdata_/){ - $file = $item; - $file =~ s/testdata_//g; + $file = $item; + $file =~ s/testdata_//g; + if($endian eq "l"){ $command = "$icuswap $icuDataDir/$item $tempDir/$icu4jDataDir/$file"; - cmd($command); + cmd($command, $verbose); + }else{ + #print("Copying $icuDataDir/$item $tempDir/$icu4jDataDir/$file\n"); + copy("$icuDataDir/$item", "$tempDir/$icu4jDataDir/$file"); } + } chdir(".."); - print "\nDONE\n"; + print "INFO: DONE\n"; } #------------------------------------------------------------------------------------------------ sub cmd { my $cmd = shift; + my $verbose = shift; my $prompt = shift; + $prompt = "Command: $cmd.." unless ($prompt); - print $prompt."\n"; + if(defined $verbose){ + print $prompt."\n"; + } system($cmd); my $exit_value = $? >> 8; #my $signal_num = $? & 127; #my $dumped_core = $? & 128; if ($exit_value == 0) { - print "ok\n"; + if(defined $verbose){ + print "ok\n"; + } } else { ++$errCount; - print "ERROR ($exit_value)\n"; + print "ERROR: Execution of $prompt returned ($exit_value)\n"; exit(1); } } @@ -170,6 +349,8 @@ Options: --jar=<directory where jar.exe lives> --icu4j-root=<directory> --version=<ICU4C version> + --verbose + --help e.g: gendtjar.pl --icu-root=\\work\\icu --jar=\\jdk1.4.1\\bin --icu4j-root=\\work\\icu4j --version=3.0 END diff --git a/icuSources/tools/genrb/genrb.c b/icuSources/tools/genrb/genrb.c index f6929bb7..a73febad 100644 --- a/icuSources/tools/genrb/genrb.c +++ b/icuSources/tools/genrb/genrb.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -50,7 +50,6 @@ enum PACKAGE_NAME, BUNDLE_NAME, WRITE_XLIFF, - TOUCHFILE, STRICT, NO_BINARY_COLLATION, /*added by Jing*/ @@ -72,16 +71,13 @@ UOption options[]={ UOPTION_PACKAGE_NAME, UOPTION_BUNDLE_NAME, UOPTION_DEF( "write-xliff", 'x', UOPT_OPTIONAL_ARG), - UOPTION_DEF( "touchfile", 't', UOPT_NO_ARG), UOPTION_DEF( "strict", 'k', UOPT_NO_ARG), /* 14 */ UOPTION_DEF( "noBinaryCollation", 'C', UOPT_NO_ARG),/* 15 */ - /*added by Jing*/ UOPTION_DEF( "language", 'l', UOPT_REQUIRES_ARG) }; static UBool write_java = FALSE; static UBool write_xliff = FALSE; -static UBool touchfile = FALSE; static const char* outputEnc =""; static const char* gPackageName=NULL; static const char* bundleName=NULL; @@ -146,9 +142,7 @@ main(int argc, "\t-j or --write-java write a Java ListResourceBundle for ICU4J, followed by optional encoding\n" "\t defaults to ASCII and \\uXXXX format.\n" "\t-p or --package-name For ICU4J: package name for writing the ListResourceBundle for ICU4J,\n" - "\t defaults to com.ibm.icu.impl.data\n" - "\t For ICU4C: Package name for the .res files on output. Specfiying\n" - "\t 'ICUDATA' defaults to the current ICU4C data name.\n"); + "\t defaults to com.ibm.icu.impl.data\n"); fprintf(stderr, "\t-b or --bundle-name bundle name for writing the ListResourceBundle for ICU4J,\n" "\t defaults to LocaleElements\n" @@ -193,15 +187,6 @@ main(int argc, } } - if(options[TOUCHFILE].doesOccur) { - if(gPackageName == NULL) { - fprintf(stderr, "%s: Don't use touchfile (-t) option with no package.\n", - argv[0]); - return -1; - } - touchfile = TRUE; - } - if(options[ENCODING].doesOccur) { encoding = options[ENCODING].value; } @@ -379,7 +364,7 @@ processFile(const char *filename, const char *cp, const char *inputDir, const ch printf("autodetected encoding %s\n", cp); } /* Parse the data into an SRBRoot */ - data = parse(ucbuf, inputDir, status); + data = parse(ucbuf, inputDir, outputDir, status); if (data == NULL || U_FAILURE(*status)) { fprintf(stderr, "couldn't parse the file %s. Error:%s\n", filename,u_errorName(*status)); @@ -388,37 +373,6 @@ processFile(const char *filename, const char *cp, const char *inputDir, const ch /* Determine the target rb filename */ rbname = make_res_filename(filename, outputDir, packageName, status); - if(touchfile == TRUE) { - FileStream *q; - char msg[1024]; - char *tfname = NULL; - - tfname = make_res_filename(filename, outputDir, NULL, status); - - if(U_FAILURE(*status)) - { - fprintf(stderr, "Error writing touchfile for \"%s\"\n", filename); - *status = U_FILE_ACCESS_ERROR; - } else { - uprv_strcat(tfname, ".res"); - sprintf(msg, "This empty file tells nmake that %s in package %s has been updated.\n", - filename, packageName); - - q = T_FileStream_open(tfname, "w"); - if(q == NULL) - { - fprintf(stderr, "Error writing touchfile \"%s\"\n", tfname); - *status = U_FILE_ACCESS_ERROR; - } - else - { - T_FileStream_write(q, msg, (int32_t)uprv_strlen(msg)); - T_FileStream_close(q); - } - uprv_free(tfname); - } - - } if(U_FAILURE(*status)) { fprintf(stderr, "couldn't make the res fileName for bundle %s. Error:%s\n", filename,u_errorName(*status)); goto finish; diff --git a/icuSources/tools/genrb/genrb.dsp b/icuSources/tools/genrb/genrb.dsp deleted file mode 100644 index a8507075..00000000 --- a/icuSources/tools/genrb/genrb.dsp +++ /dev/null @@ -1,274 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genrb" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genrb - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "genrb.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "genrb.mak" CFG="genrb - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genrb - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genrb - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "genrb - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genrb - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genrb - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /I "..\..\..\source\i18n" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuin.lib icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\genrb.exe -InputPath=.\Release\genrb.exe -InputName=genrb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genrb - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /I "..\..\..\source\i18n" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuind.lib icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\genrb.exe -InputPath=.\Debug\genrb.exe -InputName=genrb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genrb - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /I "..\..\..\source\i18n" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuin.lib icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\genrb.exe -InputPath=.\Release\genrb.exe -InputName=genrb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genrb - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /I "..\..\..\source\i18n" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuind.lib icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\genrb.exe -InputPath=.\Debug\genrb.exe -InputName=genrb -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "genrb - Win32 Release" -# Name "genrb - Win32 Debug" -# Name "genrb - Win64 Release" -# Name "genrb - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\errmsg.c -# End Source File -# Begin Source File - -SOURCE=.\genrb.c -# End Source File -# Begin Source File - -SOURCE=.\parse.c -# End Source File -# Begin Source File - -SOURCE=.\prscmnts.cpp -# End Source File -# Begin Source File - -SOURCE=.\read.c -# End Source File -# Begin Source File - -SOURCE=.\reslist.c -# End Source File -# Begin Source File - -SOURCE=.\rle.c -# End Source File -# Begin Source File - -SOURCE=.\ustr.c -# End Source File -# Begin Source File - -SOURCE=.\util.c -# End Source File -# Begin Source File - -SOURCE=.\wrtjava.c -# End Source File -# Begin Source File - -SOURCE=.\wrtxml.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\errmsg.h -# End Source File -# Begin Source File - -SOURCE=.\genrb.h -# End Source File -# Begin Source File - -SOURCE=.\parse.h -# End Source File -# Begin Source File - -SOURCE=.\prscmnts.h -# End Source File -# Begin Source File - -SOURCE=.\read.h -# End Source File -# Begin Source File - -SOURCE=.\reslist.h -# End Source File -# Begin Source File - -SOURCE=.\rle.h -# End Source File -# Begin Source File - -SOURCE=.\ustr.h -# End Source File -# Begin Source File - -SOURCE=.\util.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/genrb/genrb.h b/icuSources/tools/genrb/genrb.h index 6494d1af..995ad5ea 100644 --- a/icuSources/tools/genrb/genrb.h +++ b/icuSources/tools/genrb/genrb.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -26,7 +26,7 @@ #include "ucbuf.h" #include "errmsg.h" #include "parse.h" -#include "util.h" +#include "rbutil.h" #include "reslist.h" diff --git a/icuSources/tools/genrb/genrb.vcproj b/icuSources/tools/genrb/genrb.vcproj index 4fa36270..e564c207 100644 --- a/icuSources/tools/genrb/genrb.vcproj +++ b/icuSources/tools/genrb/genrb.vcproj @@ -20,12 +20,13 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\toolutil,..\..\..\source\i18n" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil;..\..\i18n" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" RuntimeLibrary="2" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/genrb.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -81,12 +82,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\toolutil,..\..\..\source\i18n" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil;..\..\i18n" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/genrb.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -152,6 +154,9 @@ <File RelativePath=".\prscmnts.cpp"> </File> + <File + RelativePath=".\rbutil.c"> + </File> <File RelativePath=".\read.c"> </File> @@ -164,9 +169,6 @@ <File RelativePath=".\ustr.c"> </File> - <File - RelativePath=".\util.c"> - </File> <File RelativePath=".\wrtjava.c"> </File> @@ -189,6 +191,9 @@ <File RelativePath=".\prscmnts.h"> </File> + <File + RelativePath=".\rbutil.h"> + </File> <File RelativePath=".\read.h"> </File> @@ -201,9 +206,6 @@ <File RelativePath=".\ustr.h"> </File> - <File - RelativePath=".\util.h"> - </File> </Filter> <Filter Name="Resource Files" diff --git a/icuSources/tools/genrb/genrbjar.pl b/icuSources/tools/genrb/genrbjar.pl deleted file mode 100644 index 12be04de..00000000 --- a/icuSources/tools/genrb/genrbjar.pl +++ /dev/null @@ -1,358 +0,0 @@ -#!/usr/bin/perl -# ******************************************************************** -# * COPYRIGHT: -# * Copyright (c) 2002-2004, International Business Machines Corporation and -# * others. All Rights Reserved. -# ******************************************************************** - -# Script to generate the ICULocaleData.jar file. This file is -# part of icu4j. It is checked into CVS. It is generated from -# locale data in the icu4c project. See usage() notes (below) -# for more information. - -# This script requires perl. For Win32, I recommend www.activestate.com. - -# Alan Liu - -use strict; -use warnings; -use File::Path; -use File::Copy; - -my $isMSWin32 = ($^O eq 'MSWin32'); -usage() unless (@ARGV >= ($isMSWin32 ? 3:2)); -my $ICU_ROOT = shift; -my $ICU4J_ROOT = shift; -my $prefix = ''; # e.g. "LD_LIBRARY_PATH=..." -my $flavor = ''; # e.g. "Debug/" -if ($isMSWin32) { - $flavor = shift() . '/'; -} else { - my $isDarwin = ($^O eq 'darwin'); - my $ldVar = ($isDarwin ? 'DYLD_LIBRARY_PATH' : 'LD_LIBRARY_PATH'); - $prefix = ($isMSWin32 ? '' : "$ldVar=$ICU_ROOT/source/common:$ICU_ROOT/source/i18n:$ICU_ROOT/source/tools/toolutil:$ICU_ROOT/source/data/out:$ICU_ROOT/source/data: "); -} -checkPlatform(); - -# Step 1. Run genrb. -print "\n[Step 1: Run genrb]\n"; -my $genrb = "$ICU_ROOT/source/tools/genrb/${flavor}genrb"; -my $dataDir = "$ICU_ROOT/source/data/locales"; -my $javaRootDir = "$dataDir/java"; -my $pkg = "com/ibm/icu/impl/data"; -my $javaDir = "$javaRootDir/$pkg"; -chdir($dataDir); -mkpath($javaDir); -my $op = "$prefix$genrb -s. -d$javaDir -j -p com.ibm.icu.impl.data -b LocaleElements "; -print "{Command: $op*.txt}\n"; -print "Directory: $dataDir\n"; -my @list; -if (@ARGV) { - @list = @ARGV; - foreach (@list) { $_ .= ".txt" unless (/\.txt$/i); } -} else { - @list = glob("*.txt"); -} -my $count = 0; -my $errCount = 0; -foreach (sort @list) { - cmd("$op $_", " $_ "); - ++$count; -} - -print "\nProcessed $count locale file(s)\n"; - -# Step 2. Create LocaleElements_index.java. -print "\n[Step 2: Create LocaleElements_index.java]\n"; -chdir("$ICU_ROOT/source/data/out/build"); -cmd("$op res_index.txt"); -chdir($javaDir); -my $f = "LocaleElements_index.java"; -unlink $f if (-e $f); -rename "LocaleElements_res_index.java", $f; -patchIndex("LocaleElements_index.java"); - -# Step 3. Find %%ALIAS tags. -# Assume that it looks like this: -# public LocaleElements_no_NO_NY () { -# contents = new Object[][] { -# { -# "%%ALIAS", -# "nn_NO", -# }, -# }; -# } -print "\n[Step 3: Scan for %%ALIAS tags]\n"; -print "Directory: $javaDir\n"; -chdir($javaDir); -@list = glob("LocaleElements*.java"); -my %aliases; -foreach my $file (sort @list) { - my $aliasOf = ''; - open(IN, $file) or die; - while (<IN>) { - if (/^\s*\"\%\%ALIAS\"/) { - # This is an alias of the locale on the next line - $aliasOf = <IN>; - die "Can't parse $aliasOf" unless - ($aliasOf =~ s/^\s*\"(.+?)\",\s*$/$1/); - last; - } - } - close(IN); - - if ($aliasOf) { - my $me = $file; - $me =~ s/^LocaleElements_(.+)\.java$/$1/i; - $aliases{$me} = $aliasOf; - print " $me is an alias of $aliasOf\n"; - } -} - -# Step 4. Fix %%ALIAS tags. -print "\n[Step 4: Fix %%ALIAS tags]\n"; -my %patched; # Record any locales that we patch -foreach my $loc (sort keys %aliases) { - # $loc is an alias of $aliases{$loc} - # Make $loc point to package private static _contents of $aliases{$loc} - my $aliasee = $aliases{$loc}; - if (!exists($patched{$aliasee})) { - # Patch the alias - #patchAliasee($aliasee); - $patched{$aliasee} = 1; - } - patchAlias($loc, $aliasee); -} - -# Step 5. Patch transliteration resources. -# ICU resources have TransliterateLATIN but ICU4J resources expect Transliterate_LATIN -print "\n[Step 5: Patch transliteration resources]\n"; -foreach my $file (sort @list) { - my $hasTrans = 0; - open(IN, $file) or die; - while (<IN>) { - # Ignore files that are already patched - if (/^\s*\"Transliterate[^_].*\"/) { - $hasTrans = 1; - last; - } - } - close(IN); - - patchTrans($file) if ($hasTrans); -} - -# Step 6. Compile .java files -print "\n[Step 6: Compile .java files]\n"; -my $cmd = "javac -classpath $ICU4J_ROOT/classes:$javaRootDir:%CLASSPATH% $pkg/*.java"; -chdir($javaRootDir); -print "Directory: $javaRootDir\n"; -cmd($cmd); - -# Step 7. Update .jar file. Do a "jar u" to update the existing file. -print "\n[Step 7: Update .jar file]\n"; -my $jarFile = "$ICU4J_ROOT/src/$pkg/ICULocaleData.jar"; -my $filesToBePackaged= "$pkg/*.class $pkg/*.col $pkg/*.brk $pkg/*.utf8"; -$cmd = "jar uf $jarFile $filesToBePackaged"; -# Do jar command -print "Directory: $javaRootDir\n"; -chdir($javaRootDir); -if(-e "$jarFile"){ - if (! -e "$jarFile.orig") { - copy("$jarFile","$jarFile.orig"); - } -}else{ - $jarFile ="$ICU_ROOT/source/data/locales/java/ICULocaleData.jar"; - $cmd = "jar cvf $jarFile $filesToBePackaged"; -} -cmd($cmd); -print " $jarFile updated\n"; - -# Done! -print "\n[All done]\n"; -checkPlatform(); -exit(0); - -#----------------------------------------------------------------------- -# Execute a command -# Param: Command -# Param: Display line, or '' to display command -sub cmd { - my $cmd = shift; - my $prompt = shift; - if ($prompt) { - print $prompt; - } else { - print "{Command: $cmd}.."; - } - my_system($cmd); - my $exit_value = $? >> 8; - #my $signal_num = $? & 127; - #my $dumped_core = $? & 128; - if ($exit_value == 0) { - print "ok\n" unless ($prompt); - } else { - ++$errCount; - print "ERROR ($exit_value)\n"; - exit(1); - } -} - -# A system()-like sub that does NOT ignore SIGINT -sub my_system { - my $pid = fork; - if (! defined $pid) { - return -1; - } elsif ($pid) { - return waitpid($pid, 0); - } else { - exec(@_) or exit $!; - } -} - -#----------------------------------------------------------------------- -# Patch the file that an %%ALIAS tag points to -sub patchAliasee { - my $loc = shift; - my $file = "LocaleElements_$loc.java"; - my $omitNextBrace = 0; - open(IN, $file) or die; - open(OUT, ">$file.new") or die; - while (<IN>) { - #if (/^\s*data\s*=\s*new\s+Object/) { - # print OUT " super.contents = data;\n"; - # print OUT " };\n"; - # print OUT ' static final Object[][] data =', "\n"; - # s/^\s*contents\s*=\s*/ /; - # print OUT; - # } elsif (/^\s*\}\s*;/) { - # # Omit the "}" after this - # print OUT; - # $omitNextBrace = 1; - # } elsif ($omitNextBrace && /^\s*\}\s*$/) { - # # Omit it - # $omitNextBrace = 0; - # } else { - print OUT; - # } - } - close(IN); - close(OUT); - unlink($file); - rename("$file.new", $file); - print " $file patched (aliasee)\n"; -} - -#----------------------------------------------------------------------- -# Patch the file that contains the %%ALIAS tag -sub patchAlias { - my $loc = shift; - my $aliasee = shift; - my $file = "LocaleElements_$loc.java"; - open(IN, $file) or die; - open(OUT, ">$file.new") or die; - my $var = "static final Object"; - while (<IN>) { - if(/$var/){ - # Output our new data - print OUT " static final Object[][] data = LocaleElements_$aliasee.data;\n"; - #consume the next 3 lines - <IN>; - <IN>; - <IN>; - <IN>; - <IN>; - } else { - print OUT; - } - } - close(IN); - close(OUT); - unlink($file); - rename("$file.new", $file); - print " $file patched (alias)\n"; -} - -#----------------------------------------------------------------------- -# Patch a file with a transliteration resource. -sub patchTrans { - my $file = shift; - open(IN, $file) or die; - open(OUT, ">$file.new") or die; - while (<IN>) { - # This should look like "TransliterateFOO" but if underscores - # have crept in, ignore them. - s/^(\s*\"Transliterate)_*(.+?\")/$1_$2/; - print OUT; - } - close(IN); - close(OUT); - unlink($file); - rename("$file.new", $file); - print " $file patched (trans)\n"; -} - -#----------------------------------------------------------------------- -# Patch the index file, renaming res_index to index -sub patchIndex { - my $file = shift; - open(IN, $file) or die; - open(OUT, ">$file.new") or die; - while (<IN>) { - s/res_(index)/$1/; - print OUT; - } - close(IN); - close(OUT); - unlink($file); - rename("$file.new", $file); - print " $file patched (index)\n"; -} - -#----------------------------------------------------------------------- -sub checkPlatform { - my $is_big_endian = unpack("h*", pack("s", 1)) =~ /01/; - if (!$is_big_endian) { - print "*******\n"; - print "WARNING: You are running on a LITTLE ENDIAN machine.\n"; - print "WARNING: You cannot use the resulting ICULocaleData.jar\n"; - print "WARNING: *.col files will have incorrect byte order.\n"; - print "*******\n"; - } -} - -#----------------------------------------------------------------------- -sub usage { - print << "END"; -Usage: genrbjar.pl <icu_root_dir> <icu4j_root_dir> [<locale>+] - genrbjar.pl <icu_root_dir> <icu4j_root_dir> ('Debug' | 'Release') [<locale>+] - -'Debug' or 'Release' is required on MSWin32, and absent on UNIX. - -genrbjar creates the ICULocaleData.jar file in the icu4j project. It -uses locale data files in the icu4c directory and processes them with -genrb to generate Java source. It makes necessary edits to the Java -source, then compiles the Java to .class files, then creates a .jar -file. The ICULocaleData.jar file is created in its correct location -within the icu4j directory structure. - -Optionally, one or more locales may be specified on the command line. -If this is done, only those locales will be processed. If no locales -are listed, all locales are processed. - -Before running this tool, a JDK must be installed and the javac and -jar binaries for that JDK must be on the system path. -Examples: - i) on Linux: ./genrbjar.pl ~/icu ~/icu4j - ii) on Win32: perl genrbjar.pl C:\\icu C:\\icu4j Debug - -NOTE: You CANNOT use the ICULocaleData.jar created on little endian -machines (e.g. Win32) because the *.col files will have the wrong byte -order. However, you can use the *.class files and look at the *.java -files. -END - exit(0); -} - -__END__ -:endofperl diff --git a/icuSources/tools/genrb/parse.c b/icuSources/tools/genrb/parse.c index 786bf67a..bd9a8550 100644 --- a/icuSources/tools/genrb/parse.c +++ b/icuSources/tools/genrb/parse.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,13 +28,14 @@ #include "read.h" #include "ustr.h" #include "reslist.h" +#include "rbt_pars.h" #include "unicode/ustring.h" #include "unicode/putil.h" +#include <stdio.h> /* Number of tokens to read ahead of the current stream position */ #define MAX_LOOKAHEAD 3 -#define U_ICU_UNIDATA "unidata" #define CR 0x000D #define LF 0x000A #define SPACE 0x0020 @@ -42,52 +43,14 @@ #define ESCAPE 0x005C #define HASH 0x0023 #define QUOTE 0x0027 +#define ZERO 0x0030 #define STARTCOMMAND 0x005B #define ENDCOMMAND 0x005D +#define OPENSQBRACKET 0x005B +#define CLOSESQBRACKET 0x005D -U_STRING_DECL(k_type_string, "string", 6); -U_STRING_DECL(k_type_binary, "binary", 6); -U_STRING_DECL(k_type_bin, "bin", 3); -U_STRING_DECL(k_type_table, "table", 5); -U_STRING_DECL(k_type_int, "int", 3); -U_STRING_DECL(k_type_integer, "integer", 7); -U_STRING_DECL(k_type_array, "array", 5); -U_STRING_DECL(k_type_alias, "alias", 5); -U_STRING_DECL(k_type_intvector, "intvector", 9); -U_STRING_DECL(k_type_import, "import", 6); -U_STRING_DECL(k_type_include, "include", 7); -U_STRING_DECL(k_type_reserved, "reserved", 8); - -enum EResourceType -{ - RT_UNKNOWN, - RT_STRING, - RT_BINARY, - RT_TABLE, - RT_INTEGER, - RT_ARRAY, - RT_ALIAS, - RT_INTVECTOR, - RT_IMPORT, - RT_INCLUDE, - RT_RESERVED -}; - -/* only used for debugging */ -const char *resourceNames[] = -{ - "Unknown", - "String", - "Binary", - "Table", - "Integer", - "Array", - "Alias", - "Int vector", - "Import", - "Include", - "Reserved", -}; +typedef struct SResource * +ParseResourceFunction(char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status); struct Lookahead { @@ -120,34 +83,13 @@ static UCHARBUF *buffer; static struct SRBRoot *bundle; static const char *inputdir; static uint32_t inputdirLength; +static const char *outputdir; +static uint32_t outputdirLength; static UBool gMakeBinaryCollation = TRUE; static struct SResource *parseResource(char *tag, const struct UString *comment, UErrorCode *status); -void initParser(UBool makeBinaryCollation) -{ - uint32_t i; - - U_STRING_INIT(k_type_string, "string", 6); - U_STRING_INIT(k_type_binary, "binary", 6); - U_STRING_INIT(k_type_bin, "bin", 3); - U_STRING_INIT(k_type_table, "table", 5); - U_STRING_INIT(k_type_int, "int", 3); - U_STRING_INIT(k_type_integer, "integer", 7); - U_STRING_INIT(k_type_array, "array", 5); - U_STRING_INIT(k_type_alias, "alias", 5); - U_STRING_INIT(k_type_intvector, "intvector", 9); - U_STRING_INIT(k_type_import, "import", 6); - U_STRING_INIT(k_type_reserved, "reserved", 8); - U_STRING_INIT(k_type_include, "include", 7); - for (i = 0; i < MAX_LOOKAHEAD + 1; i++) - { - ustr_init(&lookahead[i].value); - } - gMakeBinaryCollation = makeBinaryCollation; -} - /* The nature of the lookahead buffer: There are MAX_LOOKAHEAD + 1 slots, used as a circular buffer. This provides MAX_LOOKAHEAD lookahead tokens and a slot for the current token and value. @@ -263,14 +205,14 @@ expect(enum ETokenType expectedToken, struct UString **tokenValue, struct UStrin enum ETokenType token = getToken(tokenValue, comment, &line, status); - if (U_FAILURE(*status)) + if (linenumber != NULL) { - return; + *linenumber = line; } - if (linenumber != NULL) + if (U_FAILURE(*status)) { - *linenumber = line; + return; } if (token != expectedToken) @@ -316,64 +258,11 @@ static char *getInvariantString(uint32_t *line, struct UString *comment, UErrorC return result; } -static enum EResourceType -parseResourceType(UErrorCode *status) -{ - struct UString *tokenValue; - struct UString comment; - enum EResourceType result = RT_UNKNOWN; - uint32_t line=0; - ustr_init(&comment); - expect(TOK_STRING, &tokenValue, &comment, &line, status); - - if (U_FAILURE(*status)) - { - return RT_UNKNOWN; - } - - *status = U_ZERO_ERROR; - - if (u_strcmp(tokenValue->fChars, k_type_string) == 0) { - result = RT_STRING; - } else if (u_strcmp(tokenValue->fChars, k_type_array) == 0) { - result = RT_ARRAY; - } else if (u_strcmp(tokenValue->fChars, k_type_alias) == 0) { - result = RT_ALIAS; - } else if (u_strcmp(tokenValue->fChars, k_type_table) == 0) { - result = RT_TABLE; - } else if (u_strcmp(tokenValue->fChars, k_type_binary) == 0) { - result = RT_BINARY; - } else if (u_strcmp(tokenValue->fChars, k_type_bin) == 0) { - result = RT_BINARY; - } else if (u_strcmp(tokenValue->fChars, k_type_int) == 0) { - result = RT_INTEGER; - } else if (u_strcmp(tokenValue->fChars, k_type_integer) == 0) { - result = RT_INTEGER; - } else if (u_strcmp(tokenValue->fChars, k_type_intvector) == 0) { - result = RT_INTVECTOR; - } else if (u_strcmp(tokenValue->fChars, k_type_import) == 0) { - result = RT_IMPORT; - } else if (u_strcmp(tokenValue->fChars, k_type_include) == 0) { - result = RT_INCLUDE; - } else if (u_strcmp(tokenValue->fChars, k_type_reserved) == 0) { - result = RT_RESERVED; - } else { - char tokenBuffer[1024]; - u_austrncpy(tokenBuffer, tokenValue->fChars, sizeof(tokenBuffer)); - tokenBuffer[sizeof(tokenBuffer) - 1] = 0; - *status = U_INVALID_FORMAT_ERROR; - error(line, "unknown resource type '%s'", tokenBuffer); - } - - return result; -} - static struct SResource * -parseUCARules(char *tag, uint32_t startline, UErrorCode *status) +parseUCARules(char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status) { struct SResource *result = NULL; struct UString *tokenValue; - struct UString comment; FileStream *file = NULL; char filename[256] = { '\0' }; char cs[128] = { '\0' }; @@ -388,8 +277,7 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) UChar *targetLimit = NULL; int32_t size = 0; - ustr_init(&comment); - expect(TOK_STRING, &tokenValue, &comment, &line, status); + expect(TOK_STRING, &tokenValue, NULL, &line, status); if(isVerbose()){ printf(" %s at line %i \n", (tag == NULL) ? "(null)" : tag, (int)startline); @@ -418,10 +306,6 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) { return NULL; } - uprv_strcat(filename,".."); - uprv_strcat(filename,U_FILE_SEP_STRING); - uprv_strcat(filename, U_ICU_UNIDATA); - uprv_strcat(filename, U_FILE_SEP_STRING); uprv_strcat(filename, cs); @@ -436,7 +320,7 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) * since the actual size needed for storing UChars * is not known in UTF-8 byte stream */ - size = ucbuf_size(ucbuf); + size = ucbuf_size(ucbuf) + 1; pTarget = (UChar*) uprv_malloc(U_SIZEOF_UCHAR * size); uprv_memset(pTarget, 0, size*U_SIZEOF_UCHAR); target = pTarget; @@ -447,7 +331,7 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) { c = ucbuf_getc(ucbuf, status); if(c == QUOTE) { - quoted = (UBool)!quoted; + quoted = (UBool)!quoted; } /* weiv (06/26/2002): adding the following: * - preserving spaces in commands [...] @@ -455,21 +339,23 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) */ if (c == STARTCOMMAND && !quoted) { - /* preserve commands - * closing bracket will be handled by the - * append at the end of the loop - */ - while(c != ENDCOMMAND) { - U_APPEND_CHAR32(c, target,len); - c = ucbuf_getc(ucbuf, status); - } - } else if (c == HASH && !quoted) { - /* skip comments */ - while(c != CR && c != LF) { - c = ucbuf_getc(ucbuf, status); - } - continue; - } else if (c == ESCAPE) + /* preserve commands + * closing bracket will be handled by the + * append at the end of the loop + */ + while(c != ENDCOMMAND) { + U_APPEND_CHAR32(c, target,len); + c = ucbuf_getc(ucbuf, status); + } + } + else if (c == HASH && !quoted) { + /* skip comments */ + while(c != CR && c != LF) { + c = ucbuf_getc(ucbuf, status); + } + continue; + } + else if (c == ESCAPE) { c = unescape(ucbuf, status); @@ -482,8 +368,8 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) } else if (!quoted && (c == SPACE || c == TAB || c == CR || c == LF)) { - /* ignore spaces carriage returns - * and line feed unless in the form \uXXXX + /* ignore spaces carriage returns + * and line feed unless in the form \uXXXX */ continue; } @@ -514,16 +400,156 @@ parseUCARules(char *tag, uint32_t startline, UErrorCode *status) return result; } +static struct SResource * +parseTransliterator(char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status) +{ + struct SResource *result = NULL; + struct UString *tokenValue; + FileStream *file = NULL; + char filename[256] = { '\0' }; + char cs[128] = { '\0' }; + uint32_t line; + UCHARBUF *ucbuf=NULL; + const char* cp = NULL; + UChar *pTarget = NULL; + const UChar *pSource = NULL; + int32_t size = 0; + + expect(TOK_STRING, &tokenValue, NULL, &line, status); + + if(isVerbose()){ + printf(" %s at line %i \n", (tag == NULL) ? "(null)" : tag, (int)startline); + } + + if (U_FAILURE(*status)) + { + return NULL; + } + /* make the filename including the directory */ + if (inputdir != NULL) + { + uprv_strcat(filename, inputdir); + + if (inputdir[inputdirLength - 1] != U_FILE_SEP_CHAR) + { + uprv_strcat(filename, U_FILE_SEP_STRING); + } + } + + u_UCharsToChars(tokenValue->fChars, cs, tokenValue->fLength); + + expect(TOK_CLOSE_BRACE, NULL, NULL, NULL, status); + + if (U_FAILURE(*status)) + { + return NULL; + } + uprv_strcat(filename, cs); + + + ucbuf = ucbuf_open(filename, &cp, getShowWarning(),FALSE, status); + + if (U_FAILURE(*status)) { + error(line, "An error occured while opening the input file %s\n", filename); + return NULL; + } + + /* We allocate more space than actually required + * since the actual size needed for storing UChars + * is not known in UTF-8 byte stream + */ + pSource = ucbuf_getBuffer(ucbuf, &size, status); + pTarget = (UChar*) uprv_malloc(U_SIZEOF_UCHAR * (size + 1)); + uprv_memset(pTarget, 0, size*U_SIZEOF_UCHAR); + +#if !UCONFIG_NO_TRANSLITERATION + size = utrans_stripRules(pSource, size, pTarget, status); +#else + size = 0; + fprintf(stderr, " Warning: writing empty transliteration data ( UCONFIG_NO_TRANSLITERATION ) \n"); +#endif + result = string_open(bundle, tag, pTarget, size, NULL, status); + + ucbuf_close(ucbuf); + uprv_free(pTarget); + T_FileStream_close(file); + + return result; +} +static struct SResource* dependencyArray = NULL; + +static struct SResource * +parseDependency(char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status) +{ + struct SResource *result = NULL; + struct SResource *elem = NULL; + struct UString *tokenValue; + uint32_t line; + char filename[256] = { '\0' }; + char cs[128] = { '\0' }; + + expect(TOK_STRING, &tokenValue, NULL, &line, status); + + if(isVerbose()){ + printf(" %s at line %i \n", (tag == NULL) ? "(null)" : tag, (int)startline); + } + + if (U_FAILURE(*status)) + { + return NULL; + } + /* make the filename including the directory */ + if (outputdir != NULL) + { + uprv_strcat(filename, outputdir); + + if (outputdir[outputdirLength - 1] != U_FILE_SEP_CHAR) + { + uprv_strcat(filename, U_FILE_SEP_STRING); + } + } + + u_UCharsToChars(tokenValue->fChars, cs, tokenValue->fLength); + + if (U_FAILURE(*status)) + { + return NULL; + } + uprv_strcat(filename, cs); + if(!T_FileStream_file_exists(filename)){ + if(isStrict()){ + error(line, "The dependency file %s does not exist. Please make sure it exists.\n",filename); + }else{ + warning(line, "The dependency file %s does not exist. Please make sure it exists.\n",filename); + } + } + if(dependencyArray==NULL){ + dependencyArray = array_open(bundle, "%%DEPENDENCY", NULL, status); + } + if(tag!=NULL){ + result = string_open(bundle, tag, tokenValue->fChars, tokenValue->fLength, comment, status); + } + elem = string_open(bundle, NULL, tokenValue->fChars, tokenValue->fLength, comment, status); + + array_add(dependencyArray, elem, status); + + if (U_FAILURE(*status)) + { + return NULL; + } + expect(TOK_CLOSE_BRACE, NULL, NULL, NULL, status); + return result; +} static struct SResource * parseString(char *tag, uint32_t startline, const struct UString* comment, UErrorCode *status) { struct UString *tokenValue; struct SResource *result = NULL; - if (tag != NULL && uprv_strcmp(tag, "%%UCARULES") == 0) +/* if (tag != NULL && uprv_strcmp(tag, "%%UCARULES") == 0) { return parseUCARules(tag, startline, status); - } + }*/ if(isVerbose()){ printf(" string %s at line %i \n", (tag == NULL) ? "(null)" : tag, (int)startline); } @@ -693,6 +719,7 @@ addCollation(struct SResource *result, uint32_t startline, UErrorCode *status) { len = ucol_cloneBinary(coll, NULL, 0, &intStatus); data = (uint8_t *)uprv_malloc(len); + intStatus = U_ZERO_ERROR; len = ucol_cloneBinary(coll, data, len, &intStatus); /*data = ucol_cloneRuleData(coll, &len, &intStatus);*/ @@ -778,99 +805,99 @@ parseCollationElements(char *tag, uint32_t startline, UBool newCollation, UError printf(" collation elements %s at line %i \n", (tag == NULL) ? "(null)" : tag, (int)startline); } if(!newCollation) { - return addCollation(result, startline, status); - } else { - for(;;) { - ustr_init(&comment); - token = getToken(&tokenValue, &comment, &line, status); - - if (token == TOK_CLOSE_BRACE) - { - return result; - } - - if (token != TOK_STRING) - { - table_close(result, status); - *status = U_INVALID_FORMAT_ERROR; + return addCollation(result, startline, status); + } + else { + for(;;) { + ustr_init(&comment); + token = getToken(&tokenValue, &comment, &line, status); - if (token == TOK_EOF) + if (token == TOK_CLOSE_BRACE) { - error(startline, "unterminated table"); + return result; } - else + + if (token != TOK_STRING) { - error(line, "Unexpected token %s", tokenNames[token]); + table_close(result, status); + *status = U_INVALID_FORMAT_ERROR; + + if (token == TOK_EOF) + { + error(startline, "unterminated table"); + } + else + { + error(line, "Unexpected token %s", tokenNames[token]); + } + + return NULL; } - return NULL; - } + u_UCharsToChars(tokenValue->fChars, subtag, u_strlen(tokenValue->fChars) + 1); - u_UCharsToChars(tokenValue->fChars, subtag, u_strlen(tokenValue->fChars) + 1); + if (U_FAILURE(*status)) + { + table_close(result, status); + return NULL; + } - if (U_FAILURE(*status)) - { - table_close(result, status); - return NULL; - } + if (uprv_strcmp(subtag, "default") == 0) + { + member = parseResource(subtag, NULL, status); - if (uprv_strcmp(subtag, "default") == 0) - { - member = parseResource(subtag, NULL, status); + if (U_FAILURE(*status)) + { + table_close(result, status); + return NULL; + } - if (U_FAILURE(*status)) - { - table_close(result, status); - return NULL; - } + table_add(result, member, line, status); + } + else + { + token = peekToken(0, &tokenValue, &line, &comment, status); + /* this probably needs to be refactored or recursively use the parser */ + /* first we assume that our collation table won't have the explicit type */ + /* then, we cannot handle aliases */ + if(token == TOK_OPEN_BRACE) { + token = getToken(&tokenValue, &comment, &line, status); + collationRes = table_open(bundle, subtag, NULL, status); + table_add(result, addCollation(collationRes, startline, status), startline, status); + } else if(token == TOK_COLON) { /* right now, we'll just try to see if we have aliases */ + /* we could have a table too */ + token = peekToken(1, &tokenValue, &line, &comment, status); + u_UCharsToChars(tokenValue->fChars, typeKeyword, u_strlen(tokenValue->fChars) + 1); + if(uprv_strcmp(typeKeyword, "alias") == 0) { + member = parseResource(subtag, NULL, status); + + if (U_FAILURE(*status)) + { + table_close(result, status); + return NULL; + } - table_add(result, member, line, status); - } - else - { - token = peekToken(0, &tokenValue, &line, &comment, status); - /* this probably needs to be refactored or recursively use the parser */ - /* first we assume that our collation table won't have the explicit type */ - /* then, we cannot handle aliases */ - if(token == TOK_OPEN_BRACE) { - token = getToken(&tokenValue, &comment, &line, status); - collationRes = table_open(bundle, subtag, NULL, status); - table_add(result, addCollation(collationRes, startline, status), startline, status); - } else if(token == TOK_COLON) { /* right now, we'll just try to see if we have aliases */ - /* we could have a table too */ - token = peekToken(1, &tokenValue, &line, &comment, status); - u_UCharsToChars(tokenValue->fChars, typeKeyword, u_strlen(tokenValue->fChars) + 1); - if(uprv_strcmp(typeKeyword, "alias") == 0) { - member = parseResource(subtag, NULL, status); - - if (U_FAILURE(*status)) - { - table_close(result, status); - return NULL; - } - - table_add(result, member, line, status); - } else { - *status = U_INVALID_FORMAT_ERROR; - return NULL; + table_add(result, member, line, status); + } else { + *status = U_INVALID_FORMAT_ERROR; + return NULL; + } + } else { + *status = U_INVALID_FORMAT_ERROR; + return NULL; + } } - } else { - *status = U_INVALID_FORMAT_ERROR; - return NULL; - } - } - /*member = string_open(bundle, subtag, tokenValue->fChars, tokenValue->fLength, status);*/ + /*member = string_open(bundle, subtag, tokenValue->fChars, tokenValue->fLength, status);*/ - /*expect(TOK_CLOSE_BRACE, NULL, NULL, status);*/ + /*expect(TOK_CLOSE_BRACE, NULL, NULL, status);*/ - if (U_FAILURE(*status)) - { - table_close(result, status); - return NULL; + if (U_FAILURE(*status)) + { + table_close(result, status); + return NULL; + } } - - } } } @@ -1505,11 +1532,156 @@ parseInclude(char *tag, uint32_t startline, const struct UString* comment, UErro return result; } + + + + +U_STRING_DECL(k_type_string, "string", 6); +U_STRING_DECL(k_type_binary, "binary", 6); +U_STRING_DECL(k_type_bin, "bin", 3); +U_STRING_DECL(k_type_table, "table", 5); +U_STRING_DECL(k_type_table_no_fallback, "table(nofallback)", 17); +U_STRING_DECL(k_type_int, "int", 3); +U_STRING_DECL(k_type_integer, "integer", 7); +U_STRING_DECL(k_type_array, "array", 5); +U_STRING_DECL(k_type_alias, "alias", 5); +U_STRING_DECL(k_type_intvector, "intvector", 9); +U_STRING_DECL(k_type_import, "import", 6); +U_STRING_DECL(k_type_include, "include", 7); +U_STRING_DECL(k_type_reserved, "reserved", 8); + +/* Various non-standard processing plugins that create one or more special resources. */ +U_STRING_DECL(k_type_plugin_uca_rules, "process(uca_rules)", 18); +U_STRING_DECL(k_type_plugin_collation, "process(collation)", 18); +U_STRING_DECL(k_type_plugin_transliterator, "process(transliterator)", 23); +U_STRING_DECL(k_type_plugin_dependency, "process(dependency)", 19); + +typedef enum EResourceType +{ + RT_UNKNOWN, + RT_STRING, + RT_BINARY, + RT_TABLE, + RT_TABLE_NO_FALLBACK, + RT_INTEGER, + RT_ARRAY, + RT_ALIAS, + RT_INTVECTOR, + RT_IMPORT, + RT_INCLUDE, + RT_PROCESS_UCA_RULES, + RT_PROCESS_COLLATION, + RT_PROCESS_TRANSLITERATOR, + RT_PROCESS_DEPENDENCY, + RT_RESERVED +} EResourceType; + +static struct { + const char *nameChars; /* only used for debugging */ + const UChar *nameUChars; + ParseResourceFunction *parseFunction; +} gResourceTypes[] = { + {"Unknown", NULL, NULL}, + {"string", k_type_string, parseString}, + {"binary", k_type_binary, parseBinary}, + {"table", k_type_table, parseTable}, + {"table(nofallback)", k_type_table_no_fallback, NULL}, /* parseFunction will never be called */ + {"integer", k_type_integer, parseInteger}, + {"array", k_type_array, parseArray}, + {"alias", k_type_alias, parseAlias}, + {"intvector", k_type_intvector, parseIntVector}, + {"import", k_type_import, parseImport}, + {"include", k_type_include, parseInclude}, + {"process(uca_rules)", k_type_plugin_uca_rules, parseUCARules}, + {"process(collation)", k_type_plugin_collation, NULL /* not implemented yet */}, + {"process(transliterator)", k_type_plugin_transliterator, parseTransliterator}, + {"process(dependency)", k_type_plugin_dependency, parseDependency}, + {"reserved", NULL, NULL} +}; + +void initParser(UBool makeBinaryCollation) +{ + uint32_t i; + + U_STRING_INIT(k_type_string, "string", 6); + U_STRING_INIT(k_type_binary, "binary", 6); + U_STRING_INIT(k_type_bin, "bin", 3); + U_STRING_INIT(k_type_table, "table", 5); + U_STRING_INIT(k_type_table_no_fallback, "table(nofallback)", 17); + U_STRING_INIT(k_type_int, "int", 3); + U_STRING_INIT(k_type_integer, "integer", 7); + U_STRING_INIT(k_type_array, "array", 5); + U_STRING_INIT(k_type_alias, "alias", 5); + U_STRING_INIT(k_type_intvector, "intvector", 9); + U_STRING_INIT(k_type_import, "import", 6); + U_STRING_INIT(k_type_reserved, "reserved", 8); + U_STRING_INIT(k_type_include, "include", 7); + + U_STRING_INIT(k_type_plugin_uca_rules, "process(uca_rules)", 18); + U_STRING_INIT(k_type_plugin_collation, "process(collation)", 18); + U_STRING_INIT(k_type_plugin_transliterator, "process(transliterator)", 23); + U_STRING_INIT(k_type_plugin_dependency, "process(dependency)", 19); + + for (i = 0; i < MAX_LOOKAHEAD + 1; i++) + { + ustr_init(&lookahead[i].value); + } + gMakeBinaryCollation = makeBinaryCollation; +} + +static U_INLINE UBool isTable(enum EResourceType type) { + return (UBool)(type==RT_TABLE || type==RT_TABLE_NO_FALLBACK); +} + +static enum EResourceType +parseResourceType(UErrorCode *status) +{ + struct UString *tokenValue; + struct UString comment; + enum EResourceType result = RT_UNKNOWN; + uint32_t line=0; + ustr_init(&comment); + expect(TOK_STRING, &tokenValue, &comment, &line, status); + + if (U_FAILURE(*status)) + { + return RT_UNKNOWN; + } + + *status = U_ZERO_ERROR; + + /* Search for normal types */ + result=RT_UNKNOWN; + while (++result < RT_RESERVED) { + if (u_strcmp(tokenValue->fChars, gResourceTypes[result].nameUChars) == 0) { + break; + } + } + /* Now search for the aliases */ + if (u_strcmp(tokenValue->fChars, k_type_int) == 0) { + result = RT_INTEGER; + } + else if (u_strcmp(tokenValue->fChars, k_type_bin) == 0) { + result = RT_BINARY; + } + else if (result == RT_RESERVED) { + char tokenBuffer[1024]; + u_austrncpy(tokenBuffer, tokenValue->fChars, sizeof(tokenBuffer)); + tokenBuffer[sizeof(tokenBuffer) - 1] = 0; + *status = U_INVALID_FORMAT_ERROR; + error(line, "unknown resource type '%s'", tokenBuffer); + } + + return result; +} + +/* parse a non-top-level resource */ static struct SResource * parseResource(char *tag, const struct UString *comment, UErrorCode *status) { enum ETokenType token; enum EResourceType resType = RT_UNKNOWN; + ParseResourceFunction *parseFunction = NULL; struct UString *tokenValue; uint32_t startline; uint32_t line; @@ -1615,32 +1787,29 @@ parseResource(char *tag, const struct UString *comment, UErrorCode *status) } /* printf("Type guessed as %s\n", resourceNames[resType]); */ + } else if(resType == RT_TABLE_NO_FALLBACK) { + *status = U_INVALID_FORMAT_ERROR; + error(startline, "error: %s resource type not valid except on top bundle level", gResourceTypes[resType].nameChars); + return NULL; } /* We should now know what we need to parse next, so call the appropriate parser function and return. */ - switch (resType) - { - case RT_STRING: return parseString (tag, startline, comment, status); - case RT_TABLE: return parseTable (tag, startline, comment, status); - case RT_ARRAY: return parseArray (tag, startline, comment, status); - case RT_ALIAS: return parseAlias (tag, startline, comment, status); - case RT_BINARY: return parseBinary (tag, startline, comment, status); - case RT_INTEGER: return parseInteger (tag, startline, comment, status); - case RT_IMPORT: return parseImport (tag, startline, comment, status); - case RT_INCLUDE: return parseInclude (tag, startline, comment, status); - case RT_INTVECTOR: return parseIntVector (tag, startline, comment, status); - - default: + parseFunction = gResourceTypes[resType].parseFunction; + if (parseFunction != NULL) { + return parseFunction(tag, startline, comment, status); + } + else { *status = U_INTERNAL_PROGRAM_ERROR; - error(startline, "internal error: unknown resource type found and not handled"); + error(startline, "internal error: %s resource type found and not handled", gResourceTypes[resType].nameChars); } return NULL; } +/* parse the top-level resource */ struct SRBRoot * -parse(UCHARBUF *buf, const char *currentInputDir, UErrorCode *status) +parse(UCHARBUF *buf, const char *inputDir, const char *outputDir, UErrorCode *status) { struct UString *tokenValue; struct UString comment; @@ -1651,8 +1820,10 @@ parse(UCHARBUF *buf, const char *currentInputDir, UErrorCode *status) initLookahead(buf, status); - inputdir = currentInputDir; + inputdir = inputDir; inputdirLength = (inputdir != NULL) ? (uint32_t)uprv_strlen(inputdir) : 0; + outputdir = outputDir; + outputdirLength = (outputdir != NULL) ? (uint32_t)uprv_strlen(outputdir) : 0; ustr_init(&comment); expect(TOK_STRING, &tokenValue, &comment, NULL, status); @@ -1670,21 +1841,11 @@ parse(UCHARBUF *buf, const char *currentInputDir, UErrorCode *status) /* expect(TOK_OPEN_BRACE, NULL, &line, status); */ /* The following code is to make Empty bundle work no matter with :table specifer or not */ token = getToken(NULL, NULL, &line, status); - - if(token==TOK_COLON) - { + if(token==TOK_COLON) { *status=U_ZERO_ERROR; - } - else - { - *status=U_PARSE_ERROR; - } - - if(U_SUCCESS(*status)){ - bundleType=parseResourceType(status); - if(bundleType==RT_TABLE) + if(isTable(bundleType)) { expect(TOK_OPEN_BRACE, NULL, NULL, &line, status); } @@ -1696,12 +1857,17 @@ parse(UCHARBUF *buf, const char *currentInputDir, UErrorCode *status) } else { + /* not a colon */ if(token==TOK_OPEN_BRACE) { *status=U_ZERO_ERROR; + bundleType=RT_TABLE; } else { + /* neither colon nor open brace */ + *status=U_PARSE_ERROR; + bundleType=RT_UNKNOWN; error(line, "parse error, did not find open-brace '{' or colon ':', stopped with %s", u_errorName(*status)); } } @@ -1713,11 +1879,25 @@ parse(UCHARBUF *buf, const char *currentInputDir, UErrorCode *status) return NULL; } + if(bundleType==RT_TABLE_NO_FALLBACK) { + /* + * Parse a top-level table with the table(nofallback) declaration. + * This is the same as a regular table, but also sets the + * URES_ATT_NO_FALLBACK flag in indexes[URES_INDEX_ATTRIBUTES] . + */ + bundle->noFallback=TRUE; + } + /* top-level tables need not handle special table names like "collations" */ realParseTable(bundle->fRoot, NULL, line, status); - + + if(dependencyArray!=NULL){ + table_add(bundle->fRoot, dependencyArray, 0, status); + dependencyArray = NULL; + } if (U_FAILURE(*status)) { bundle_close(bundle, status); + array_close(dependencyArray, status); return NULL; } diff --git a/icuSources/tools/genrb/parse.h b/icuSources/tools/genrb/parse.h index 79ffd79c..da5b345b 100644 --- a/icuSources/tools/genrb/parse.h +++ b/icuSources/tools/genrb/parse.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2003, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -27,7 +27,7 @@ U_CDECL_BEGIN void initParser(UBool makeBinaryCollation); /* Parse a ResourceBundle text file */ -struct SRBRoot* parse(UCHARBUF *buf, const char* inputDir, UErrorCode *status); +struct SRBRoot* parse(UCHARBUF *buf, const char* inputDir, const char* outputDir, UErrorCode *status); U_CDECL_END diff --git a/icuSources/tools/genrb/util.c b/icuSources/tools/genrb/rbutil.c similarity index 96% rename from icuSources/tools/genrb/util.c rename to icuSources/tools/genrb/rbutil.c index 0f0bdf58..92d45fd7 100644 --- a/icuSources/tools/genrb/util.c +++ b/icuSources/tools/genrb/rbutil.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -16,7 +16,7 @@ */ #include "unicode/putil.h" -#include "util.h" +#include "rbutil.h" #include "cmemory.h" #include "cstring.h" diff --git a/icuSources/tools/genrb/util.h b/icuSources/tools/genrb/rbutil.h similarity index 89% rename from icuSources/tools/genrb/util.h rename to icuSources/tools/genrb/rbutil.h index 6bb96e5c..b059bfa0 100644 --- a/icuSources/tools/genrb/util.h +++ b/icuSources/tools/genrb/rbutil.h @@ -1,12 +1,12 @@ /* ******************************************************************************* * -* Copyright (C) 1998-1999, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * -* File util.h +* File rbutil.h * * Modification History: * diff --git a/icuSources/tools/genrb/reslist.c b/icuSources/tools/genrb/reslist.c index 32b45937..9f30ca9c 100644 --- a/icuSources/tools/genrb/reslist.c +++ b/icuSources/tools/genrb/reslist.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -40,7 +40,7 @@ static const UDataInfo dataInfo= { 0, {0x52, 0x65, 0x73, 0x42}, /* dataFormat="resb" */ - {1, 1, 0, 0}, /* formatVersion */ + {1, 2, 0, 0}, /* formatVersion */ {1, 4, 0, 0} /* dataVersion take a look at version inside parsed resb*/ }; @@ -393,12 +393,22 @@ void bundle_write(struct SRBRoot *bundle, const char *outputDir, const char *out * write int32_t indexes[] after root and before the strings * to make it easier to parse resource bundles in icuswap or from Java etc. */ + uprv_memset(indexes, 0, sizeof(indexes)); indexes[URES_INDEX_LENGTH]= URES_INDEX_TOP; indexes[URES_INDEX_STRINGS_TOP]= (int32_t)(usedOffset>>2); indexes[URES_INDEX_RESOURCES_TOP]= (int32_t)(top>>2); indexes[URES_INDEX_BUNDLE_TOP]= indexes[URES_INDEX_RESOURCES_TOP]; indexes[URES_INDEX_MAX_TABLE_LENGTH]= bundle->fMaxTableLength; + /* + * formatVersion 1.2 (ICU 3.6): + * write indexes[URES_INDEX_ATTRIBUTES] with URES_ATT_NO_FALLBACK set or not set + * the memset() above initialized all indexes[] to 0 + */ + if(bundle->noFallback) { + indexes[URES_INDEX_ATTRIBUTES]=URES_ATT_NO_FALLBACK; + } + /* write the indexes[] */ udata_writeBlock(mem, indexes, sizeof(indexes)); @@ -441,6 +451,7 @@ struct SResource* res_open(const struct UString* comment, UErrorCode* status){ res->fComment = (struct UString *) uprv_malloc(sizeof(struct UString)); if(res->fComment == NULL){ *status = U_MEMORY_ALLOCATION_ERROR; + uprv_free(res); return NULL; } ustr_init(res->fComment); @@ -478,7 +489,7 @@ struct SResource* table_open(struct SRBRoot *bundle, char *tag, const struct US return res; } -struct SResource* array_open(struct SRBRoot *bundle, char *tag, const struct UString* comment, UErrorCode *status) { +struct SResource* array_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status) { struct SResource *res = res_open(comment, status); @@ -743,9 +754,12 @@ void table_close(struct SResource *table, UErrorCode *status) { void array_close(struct SResource *array, UErrorCode *status) { struct SResource *current = NULL; struct SResource *prev = NULL; - + + if(array==NULL){ + return; + } current = array->u.fArray.fFirst; - + while (current != NULL) { prev = current; current = current->fNext; diff --git a/icuSources/tools/genrb/reslist.h b/icuSources/tools/genrb/reslist.h index 34e35fd2..2d6a3783 100644 --- a/icuSources/tools/genrb/reslist.h +++ b/icuSources/tools/genrb/reslist.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -41,6 +41,7 @@ struct SRBRoot { int32_t fCount; struct SResource *fRoot; int32_t fMaxTableLength; + UBool noFallback; /* see URES_ATT_NO_FALLBACK */ }; struct SRBRoot *bundle_open(const struct UString* comment, UErrorCode *status); @@ -84,7 +85,7 @@ struct SResArray { struct SResource *fLast; }; -struct SResource* array_open(struct SRBRoot *bundle, char *tag, const struct UString* comment, UErrorCode *status); +struct SResource* array_open(struct SRBRoot *bundle, const char *tag, const struct UString* comment, UErrorCode *status); void array_close(struct SResource *array, UErrorCode *status); void array_add(struct SResource *array, struct SResource *res, UErrorCode *status); diff --git a/icuSources/tools/genrb/ustr.c b/icuSources/tools/genrb/ustr.c index 2a35db0b..aafcec54 100644 --- a/icuSources/tools/genrb/ustr.c +++ b/icuSources/tools/genrb/ustr.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -206,7 +206,6 @@ ustr_resize(struct UString *s, s->fChars = (UChar*) uprv_realloc(s->fChars, sizeof(UChar) * (len + 1)); if(s->fChars == 0) { *status = U_MEMORY_ALLOCATION_ERROR; - s->fChars = 0; s->fLength = s->fCapacity = 0; return; } diff --git a/icuSources/tools/genrb/wrtjava.c b/icuSources/tools/genrb/wrtjava.c index 7df45260..a4293ae2 100644 --- a/icuSources/tools/genrb/wrtjava.c +++ b/icuSources/tools/genrb/wrtjava.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -230,23 +230,24 @@ str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s uint32_t length = srcLen*8; uint32_t bufLen = 0; + uint32_t columnCount; char* buf = (char*) malloc(sizeof(char)*length); - uint32_t columnCount = getColumnCount(srcLen); - - /* test for NULL */ if(buf == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return; } + columnCount = getColumnCount(srcLen); memset(buf,0,length); bufLen = uCharsToChars(buf,length,src,srcLen,status); - if(printEndLine) write_tabs(out); + if(printEndLine) + write_tabs(out); if(U_FAILURE(*status)){ + uprv_free(buf); return; } @@ -299,6 +300,7 @@ str_write_java( uint16_t* src, int32_t srcLen, UBool printEndLine, UErrorCode *s }else{ T_FileStream_write(out,"\"",1); } + uprv_free(buf); } static void diff --git a/icuSources/tools/genrb/wrtxml.c b/icuSources/tools/genrb/wrtxml.c index 57813b76..4e0cd731 100644 --- a/icuSources/tools/genrb/wrtxml.c +++ b/icuSources/tools/genrb/wrtxml.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -123,166 +123,46 @@ static uint32_t computeCRC(char *ptr, uint32_t len, uint32_t lastcrc){ return(crc); } -/*check the language with ISO 639 standard*/ -static UBool checkISOLanguage(char* language) { - int i = 0; - int result = -1; - - while(ISOLanguages[i] != '\0') { - result = uprv_strcmp(language, ISOLanguages[i]); - if(result == 0) { - return TRUE; - } - i++; - } - return FALSE; -} - -/*check the language with ISO 639 standard*/ -static UBool checkISOCountry(char* country) { - int i = 0; - int result = -1; - - while(ISOCountries[i]!='\0') { - result = uprv_strcmp(country, ISOCountries[i]); - if(result == 0) { - return TRUE; +static void strnrepchr(char* src, int32_t srcLen, char s, char r){ + int32_t i = 0; + for(i=0;i<srcLen;i++){ + if(src[i]==s){ + src[i]=r; } - i++; } - return FALSE; } - /* Parse the filename, and get its language information. * If it fails to get the language information from the filename, * use "en" as the default value for language */ -static char* parseFilename(const char* fileName, char* lang) { - char* pos; - char* pos2; - int32_t first; - int32_t second; - char* str0 = NULL; - char* str1 = NULL; - char* str2 = NULL; - char* str3 = NULL; - int32_t index = 0; - UBool ISO_tag = TRUE; - - ISOLanguages = uloc_getISOLanguages(); - ISOCountries = uloc_getISOCountries(); - - pos = uprv_strrchr(fileName, U_FILE_SEP_CHAR); - pos2 = uprv_strrchr(fileName, '.'); - - if(pos == NULL) { - first = -1; - }else { - first = (int32_t)(pos - fileName); - } - if(pos2 == NULL) { - second = (int32_t)uprv_strlen(fileName); - } else { - second = (int32_t)(pos2 - fileName); - } - index = (int32_t)(second - first - 1); - str0 = uprv_malloc(sizeof(char) * index + 1); - uprv_memset(str0, 0, sizeof(char) * index + 1); - uprv_strncpy(str0, fileName + first + 1, index); - - pos = uprv_strchr( str0, '_' ); - first = (int32_t)(pos - str0); - if (pos == NULL) { - str1 = uprv_malloc(sizeof(char)*uprv_strlen(str0)+1); - uprv_memset(str1, 0, sizeof(char)*uprv_strlen(str0)+1); - uprv_strcpy(str1, str0); - } else { - str1 = uprv_malloc(sizeof(char)*first+1); - uprv_memset(str1, 0, sizeof(char)*first+1); - uprv_strncpy(str1, str0, first); - pos = uprv_strrchr( str0, '_' ); - second = (int32_t)(pos - str0); - if(first != second && second-first != 1) { - index = second - first-1; - str2 = uprv_malloc(sizeof(char)*index+1); - uprv_memset(str2, 0, sizeof(char)*index+1); - uprv_strncpy(str2, str0 + first + 1, index ); - index = (int32_t)(uprv_strlen(str0) - second -1); - str3 = uprv_malloc(sizeof(char)*index+1); - uprv_memset(str3, 0, sizeof(char)*index+1); - uprv_strncpy(str3, str0 + second + 1, index); - } else if(first == second) { - index = first; - str1 = uprv_malloc(sizeof(char)*first+1); - uprv_memset(str1, 0, sizeof(char)*first+1); - uprv_strncpy(str1, str0, index ); - index = (int32_t)(uprv_strlen(str0) - second -1); - str2 = uprv_malloc(sizeof(char)*index+1); - uprv_memset(str2, 0, sizeof(char)*index+1); - uprv_strncpy(str2, str0 + second + 1, index ); - } - } - - if (str2 == NULL && str3 == NULL) { - ISO_tag = checkISOLanguage(str1); - if(ISO_tag) { - lang = uprv_malloc(sizeof(char)*uprv_strlen(str1)+1); - uprv_memset(lang, 0, sizeof(char)*uprv_strlen(str1)+1); - uprv_strcpy(lang, str1); - } - } else if(str3 == NULL){ - ISO_tag = checkISOLanguage(str1); - if (ISO_tag) { - ISO_tag = checkISOCountry(str2); - if (ISO_tag) { - lang = uprv_malloc(sizeof(char)*uprv_strlen(str1)+1); - uprv_memset(lang, 0, sizeof(char)*uprv_strlen(str1)+1); - uprv_strcpy(lang, str1); - } - } else { - ISO_tag = checkISOLanguage(str2); - if (ISO_tag) { - lang = uprv_malloc(sizeof(char)*uprv_strlen(str2)+1); - uprv_memset(lang, 0, sizeof(char)*uprv_strlen(str2)+1); - uprv_strcpy(lang, str2); - } - } - } else { - ISO_tag = checkISOLanguage(str1); - if(ISO_tag) { - ISO_tag = checkISOCountry(str2); - if (ISO_tag) { - lang = uprv_malloc(sizeof(char)*uprv_strlen(str1)+1); - uprv_memset(lang, 0, sizeof(char)*uprv_strlen(str1)+1); - uprv_strcpy(lang, str1); - } - } else { - ISO_tag = checkISOLanguage(str2); - if(ISO_tag) { - ISO_tag = checkISOCountry(str3); - if (ISO_tag) { - lang = uprv_malloc(sizeof(char)*uprv_strlen(str2)+1); - uprv_memset(lang, 0, sizeof(char)*uprv_strlen(str2)+1); - uprv_strcpy(lang, str2); - } - } - } - } - - if(str0 != NULL){ - uprv_free(str0); +static char* parseFilename(const char* id, char* lang) { + int idLen = uprv_strlen(id); + char* localeID = (char*) uprv_malloc(idLen); + int pos = 0; + int canonCapacity = 0; + char* canon = NULL; + int canonLen = 0; + /*int i;*/ + UErrorCode status = U_ZERO_ERROR; + char *ext = uprv_strchr(id, '.'); + if(ext!=NULL){ + pos = ext-id; + }else{ + pos = idLen; } + uprv_memcpy(localeID, id, pos); + localeID[pos]=0; /* NUL terminate the string */ + + canonCapacity =pos*3; + canon = (char*) uprv_malloc(canonCapacity); + canonLen = uloc_canonicalize(localeID, canon, canonCapacity, &status); - if(str1 != NULL){ - uprv_free(str1); + if(U_FAILURE(status)){ + fprintf(stderr, "Could not canonicalize the locale ID: %s. Error: %s\n", localeID, u_errorName(status)); + exit(status); } - if(str2 != NULL){ - uprv_free(str2); - } - if(str3 != NULL){ - uprv_free(str3); - } - return lang; + strnrepchr(canon, canonLen, '_', '-'); + return canon; } static const char* xmlHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" @@ -291,7 +171,7 @@ static const char* xmlHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" static const char* bundleStart = "<xliff version = \"1.0\">\n"; static const char* bundleEnd = "</xliff>\n"; -void res_write_xml(struct SResource *res, const char* id, const char* language, UErrorCode *status); +void res_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status); static char* convertAndEscape(char** pDest, int32_t destCap, int32_t* destLength, const UChar* src, int32_t srcLen, UErrorCode* status){ @@ -408,6 +288,7 @@ static char* convertAndEscape(char** pDest, int32_t destCap, int32_t* destLength temp = (char*) uprv_malloc(sizeof(char)*destCap); if(temp==NULL){ *status=U_MEMORY_ALLOCATION_ERROR; + uprv_free(dest); return NULL; } uprv_memmove(temp,dest,destLen); @@ -428,13 +309,7 @@ static char* convertAndEscape(char** pDest, int32_t destCap, int32_t* destLength #define LF 0x000D #define AT_SIGN 0x0040 -static const UChar tokens[][11] = { - {0x0040, 0x0074, 0x0072, 0x0061, 0x006e, 0x0073, 0x006c, 0x0061, 0x0074, 0x0065, 0x0000}, /* @translate */ - {0x0040, 0x006e, 0x006f, 0x0074, 0x0065, 0x0000} /* @note */ -}; -static const UChar yes[] = { 0x0079, 0x0065, 0x0073, 0x0000}; /* yes */ -static const UChar no[] ={ 0x006e, 0x006f, 0x0000 }; /* no */ @@ -597,7 +472,7 @@ string_write_xml(struct SResource *res, const char* id, const char* language, UE char* sid = NULL; const char* strStart = "<trans-unit xml:space = \"preserve\" id = \""; - const char* valStrStart = "<source xml:lang = \""; + const char* valStrStart = "<source "; const char* valStrEnd = "</source>\n"; const char* strEnd = "</trans-unit>\n"; @@ -622,8 +497,8 @@ string_write_xml(struct SResource *res, const char* id, const char* language, UE write_tabs(out); T_FileStream_write(out,valStrStart, (int32_t)uprv_strlen(valStrStart)); - T_FileStream_write(out,language, (int32_t)uprv_strlen(language)); - T_FileStream_write(out,"\">", 2); + /* T_FileStream_write(out,language, (int32_t)uprv_strlen(language)); */ + T_FileStream_write(out,">", 1); buf = convertAndEscape(&buf,0,&bufLen,res->u.fString.fChars,res->u.fString.fLength,status); @@ -662,8 +537,8 @@ string_write_xml(struct SResource *res, const char* id, const char* language, UE write_tabs(out); T_FileStream_write(out,valStrStart, (int32_t)uprv_strlen(valStrStart)); - T_FileStream_write(out,language, (int32_t)uprv_strlen(language)); - T_FileStream_write(out,"\">", 2); + /*T_FileStream_write(out,language, (int32_t)uprv_strlen(language));*/ + T_FileStream_write(out,">", 1); buf = convertAndEscape(&buf,0,&bufLen,res->u.fString.fChars,res->u.fString.fLength,status); if(U_FAILURE(*status)){ @@ -802,7 +677,7 @@ array_write_xml( struct SResource *res, const char* id, const char* language, UE index++; subId = getID(sid, c, subId); - res_write_xml(current, subId, language, status); + res_write_xml(current, subId, language, FALSE, status); uprv_free(subId); subId = NULL; if(U_FAILURE(*status)){ @@ -823,7 +698,7 @@ intvector_write_xml( struct SResource *res, const char* id, const char* language const char* end = "</group>\n"; const char* startKey= "resname=\""; - const char* intStart = "<trans-unit restype = \"int\" xml:space = \"preserve\" translate=\"no\" id = \""; + const char* intStart = "<trans-unit restype = \"int\" xml:space = \"preserve\" id = \""; const char* valIntStart = "<source>"; const char* valIntEnd = "</source>\n"; const char* intEnd = "</trans-unit>\n"; @@ -990,9 +865,18 @@ bin_write_xml( struct SResource *res, const char* id, const char* language, UErr if(res->u.fBinaryValue.fFileName!=NULL){ uprv_strcpy(fileName, res->u.fBinaryValue.fFileName); f = uprv_strrchr(fileName, '\\'); - f++; + if (f != NULL) { + f++; + } + else { + f = fileName; + } ext = uprv_strrchr(fileName, '.'); + if (ext == NULL) { + fprintf(stderr, "Error: %s is an unknown binary filename type.\n", fileName); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } if(uprv_strcmp(ext, ".jpg")==0 || uprv_strcmp(ext, ".jpeg")==0 || uprv_strcmp(ext, ".gif")==0 ){ m_type = "\"image"; } else if(uprv_strcmp(ext, ".wav")==0 || uprv_strcmp(ext, ".au")==0 ){ @@ -1107,16 +991,16 @@ bin_write_xml( struct SResource *res, const char* id, const char* language, UErr write_tabs(out); T_FileStream_write(out,end,(int32_t)uprv_strlen(end)); - uprv_free(fn); uprv_free(sid); sid = NULL; } + uprv_free(fn); } static void -table_write_xml(struct SResource *res, const char* id, const char* language, UErrorCode *status) { +table_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status) { uint32_t i = 0; @@ -1140,6 +1024,13 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr if(res->fKey<0 || uprv_strcmp(srBundle->fKeys+res->fKey ,"")==0){ T_FileStream_write(out, start, (int32_t)uprv_strlen(start)); + if(isTopLevel){ + int32_t len = uprv_strlen(id); + T_FileStream_write(out, idstr, (int32_t)uprv_strlen(idstr)); + T_FileStream_write(out, id,len); + T_FileStream_write(out, "\" ", 2); + id=""; + } sid = getID(id, NULL, sid); /* only write the id if the sid!="" */ if(sid[0]!='\0'){ @@ -1149,6 +1040,7 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr } + if(res->fComment!=NULL && res->fComment->fChars != NULL){ printComments(res->fComment, sid, FALSE, status); printNoteElements(res->fComment, status); @@ -1181,7 +1073,7 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr save = current = res->u.fTable.fFirst; i = 0; while (current != NULL) { - res_write_xml(current, sid, language, status); + res_write_xml(current, sid, language, FALSE, status); if(U_FAILURE(*status)){ return; @@ -1228,7 +1120,7 @@ table_write_xml(struct SResource *res, const char* id, const char* language, UEr } void -res_write_xml(struct SResource *res, const char* id, const char* language, UErrorCode *status) { +res_write_xml(struct SResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status) { if (U_FAILURE(*status)) { return ; @@ -1256,7 +1148,7 @@ res_write_xml(struct SResource *res, const char* id, const char* language, UErro return; case URES_TABLE: case URES_TABLE32: - table_write_xml (res, id, language, status); + table_write_xml (res, id, language, isTopLevel, status); return; default: @@ -1276,7 +1168,7 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu char* outputFileName = NULL; char* originalFileName = NULL; const char* fileStart = "<file xml:space = \"preserve\" source-language = \""; - const char* file1 = "\" datatype = \"text\" "; + const char* file1 = "\" datatype = \"ICUResourceBundle\" "; const char* file2 = "original = \""; const char* file3 = "\" tool = \"genrb\" "; const char* file4 = "date = \""; @@ -1321,10 +1213,10 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu uprv_free(temp); temp = NULL; - /*check file name*/ + if (language == NULL) { - lang = parseFilename(filename, lang); - if (lang == NULL) { +/* lang = parseFilename(filename, lang); + if (lang == NULL) {*/ /* now check if locale name is valid or not * this is to cater for situation where * pegasusServer.txt contains @@ -1348,7 +1240,7 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu fprintf(stderr, "Error: The file name and table name do not contain a valid language code. Please use -l option to specify it.\n"); exit(U_ILLEGAL_ARGUMENT_ERROR); } - } + /* }*/ } else { lang = uprv_malloc(sizeof(char)*uprv_strlen(language) +1); uprv_memset(lang, 0, sizeof(char)*uprv_strlen(language) +1); @@ -1387,14 +1279,14 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu } if (U_FAILURE(*status)) { - return; + goto cleanup_bundle_write_xml; } out= T_FileStream_open(xmlfileName,"w"); if(out==NULL){ *status = U_FILE_ACCESS_ERROR; - return; + goto cleanup_bundle_write_xml; } T_FileStream_write(out,xmlHeader, (int32_t)uprv_strlen(xmlHeader)); @@ -1403,7 +1295,7 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu enc = outputEnc; conv=ucnv_open(enc,status); if(U_FAILURE(*status)){ - return; + goto cleanup_bundle_write_xml; } } T_FileStream_write(out,bundleStart, (int32_t)uprv_strlen(bundleStart)); @@ -1435,7 +1327,7 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu T_FileStream_write(out,bodyStart, (int32_t)uprv_strlen(bodyStart)); - res_write_xml(bundle->fRoot, srBundle->fLocale, lang, status); + res_write_xml(bundle->fRoot, bundle->fLocale, lang, TRUE, status); tabCount--; write_tabs(out); @@ -1450,6 +1342,7 @@ bundle_write_xml(struct SRBRoot *bundle, const char *outputDir,const char* outpu ucnv_close(conv); +cleanup_bundle_write_xml: if(originalFileName!= NULL) { uprv_free(originalFileName); originalFileName = NULL; diff --git a/icuSources/tools/genren/genren.pl b/icuSources/tools/genren/genren.pl index ddf78786..b1c6a32d 100644 --- a/icuSources/tools/genren/genren.pl +++ b/icuSources/tools/genren/genren.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl #* #******************************************************************************* -#* Copyright (C) 2001-2004, International Business Machines +#* Copyright (C) 2001-2006, International Business Machines #* Corporation and others. All Rights Reserved. #******************************************************************************* #* @@ -60,7 +60,7 @@ $HEADERDEF =~ s/\./_/; print HEADER <<"EndOfHeaderComment"; /* ******************************************************************************* -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * diff --git a/icuSources/tools/gensprep/Makefile.in b/icuSources/tools/gensprep/Makefile.in index 3bdb909c..0739775d 100644 --- a/icuSources/tools/gensprep/Makefile.in +++ b/icuSources/tools/gensprep/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/gensprep -## Copyright (c) 2001-2004, International Business Machines Corporation and +## Copyright (c) 2001-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis/Markus W. Scherer @@ -11,7 +11,8 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/gensprep TARGET_STUB_NAME = gensprep @@ -19,8 +20,6 @@ SECTION = 8 MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/gensprep ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) $(MAN_FILES) @@ -28,17 +27,19 @@ CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gensprep.o store.o DEPS = $(OBJECTS:.o=.d) ## List of phony targets -.PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -57,21 +58,9 @@ install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) -# man page install-man: $(MAN_FILES) $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $< $(DESTDIR)$(mandir)/man$(SECTION) - -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -# build postscript and pdf formats -#$(TARGET).ps: $(TARGET).$(SECTION) -# groff -man < $< > $@ - -#$(TARGET).pdf: $(TARGET).ps -# ps2pdf $< $@ + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) dist-local: @@ -91,6 +80,12 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(TARGET) : $(OBJECTS) $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) else diff --git a/icuSources/tools/gensprep/gensprep.c b/icuSources/tools/gensprep/gensprep.c index e8f9608f..74215451 100644 --- a/icuSources/tools/gensprep/gensprep.c +++ b/icuSources/tools/gensprep/gensprep.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -40,10 +40,6 @@ U_CDECL_BEGIN #include "gensprep.h" U_CDECL_END -#ifdef WIN32 -# pragma warning(disable: 4100) -#endif - UBool beVerbose=FALSE, haveCopyright=TRUE; #define NORM_CORRECTIONS_FILE_NAME "NormalizationCorrections.txt" @@ -67,7 +63,6 @@ static UOption options[]={ UOPTION_DESTDIR, UOPTION_SOURCEDIR, UOPTION_ICUDATADIR, - UOPTION_PACKAGE_NAME, UOPTION_BUNDLE_NAME, { "normalization", NULL, NULL, NULL, 'n', UOPT_REQUIRES_ARG, 0 }, { "check-bidi", NULL, NULL, NULL, 'k', UOPT_NO_ARG, 0}, @@ -82,7 +77,6 @@ enum{ DESTDIR, SOURCEDIR, ICUDATADIR, - PACKAGE_NAME, BUNDLE_NAME, NORMALIZE, CHECK_BIDI, @@ -114,7 +108,6 @@ static int printHelp(int argc, char* argv[]){ "\t followed by path, defaults to %s\n", u_getDataDirectory()); fprintf(stderr, - "\t-p or --package-name prepend the output data file name with the package name specified\n" "\t-n or --normalize turn on the option for normalization and include mappings\n" "\t from NormalizationCorrections.txt from the given path,\n" "\t e.g: /test/icu/source/data/unidata\n" @@ -131,7 +124,7 @@ main(int argc, char* argv[]) { char* filename = NULL; #endif const char *srcDir=NULL, *destDir=NULL, *icuUniDataDir=NULL; - const char *packageName=NULL, *bundleName=NULL, *inputFileName = NULL; + const char *bundleName=NULL, *inputFileName = NULL; char *basename=NULL; int32_t sprepOptions = 0; @@ -144,7 +137,6 @@ main(int argc, char* argv[]) { options[SOURCEDIR].value=""; options[UNICODE_VERSION].value="0"; /* don't assume the unicode version */ options[BUNDLE_NAME].value = DATA_NAME; - options[PACKAGE_NAME].value = NULL; options[NORMALIZE].value = ""; argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); @@ -165,7 +157,6 @@ main(int argc, char* argv[]) { haveCopyright=options[COPYRIGHT].doesOccur; srcDir=options[SOURCEDIR].value; destDir=options[DESTDIR].value; - packageName = options[PACKAGE_NAME].value; bundleName = options[BUNDLE_NAME].value; icuUniDataDir = options[NORMALIZE].value; @@ -187,7 +178,7 @@ main(int argc, char* argv[]) { "gensprep writes dummy " U_ICUDATA_NAME "_" DATA_NAME "." DATA_TYPE " because UCONFIG_NO_IDNA is set, \n" "see icu/source/common/unicode/uconfig.h\n"); - generateData(destDir, packageName, bundleName); + generateData(destDir, bundleName); #else @@ -247,9 +238,9 @@ main(int argc, char* argv[]) { /* process parsed data */ if(U_SUCCESS(errorCode)) { /* write the data file */ - generateData(destDir, packageName, bundleName); + generateData(destDir, bundleName); - cleanUpData(); + cleanUpData(); } uprv_free(filename); diff --git a/icuSources/tools/gensprep/gensprep.dsp b/icuSources/tools/gensprep/gensprep.dsp deleted file mode 100644 index d1bb22b4..00000000 --- a/icuSources/tools/gensprep/gensprep.dsp +++ /dev/null @@ -1,206 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gensprep" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gensprep - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gensprep.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gensprep.mak" CFG="gensprep - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gensprep - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gensprep - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gensprep - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gensprep - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gensprep - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gensprep.exe -InputPath=.\Release\gensprep.exe -InputName=gensprep -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gensprep - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icutud.lib icuucd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gensprep.exe -InputPath=.\Debug\gensprep.exe -InputName=gensprep -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gensprep - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /W3 /GX /Zi /O2 /Op /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gensprep.exe -InputPath=.\Release\gensprep.exe -InputName=gensprep -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gensprep - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /Op /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icutud.lib icuucd.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gensprep.exe -InputPath=.\Debug\gensprep.exe -InputName=gensprep -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gensprep - Win32 Release" -# Name "gensprep - Win32 Debug" -# Name "gensprep - Win64 Release" -# Name "gensprep - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\gensprep.c -# End Source File -# Begin Source File - -SOURCE=.\store.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\gensprep.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gensprep/gensprep.h b/icuSources/tools/gensprep/gensprep.h index 9b76e8e8..cb3a6744 100644 --- a/icuSources/tools/gensprep/gensprep.h +++ b/icuSources/tools/gensprep/gensprep.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -52,7 +52,7 @@ storeRange(uint32_t start, uint32_t end, UStringPrepType type,UErrorCode* status #endif extern void -generateData(const char *dataDir, const char* packageName, const char* bundleName); +generateData(const char *dataDir, const char* bundleName); extern void setOptions(int32_t options); diff --git a/icuSources/tools/gensprep/gensprep.vcproj b/icuSources/tools/gensprep/gensprep.vcproj index d984e261..e31f0a33 100644 --- a/icuSources/tools/gensprep/gensprep.vcproj +++ b/icuSources/tools/gensprep/gensprep.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" - RuntimeLibrary="4" + RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gensprep.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -82,11 +82,14 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" - RuntimeLibrary="5" + RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gensprep.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/gensprep/store.c b/icuSources/tools/gensprep/store.c index 6a70d615..58b88b3a 100644 --- a/icuSources/tools/gensprep/store.c +++ b/icuSources/tools/gensprep/store.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,10 +28,6 @@ #include "uhash.h" -#ifdef WIN32 -# pragma warning(disable: 4100) -#endif - #define DO_DEBUG_OUT 0 @@ -381,7 +377,7 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length, /* initialize the hashtable */ if(hashTable==NULL){ - hashTable = uhash_open(hashEntry, compareEntries, status); + hashTable = uhash_open(hashEntry, compareEntries, NULL, status); uhash_setValueDeleter(hashTable, valueDeleter); } @@ -496,11 +492,11 @@ extern void storeRange(uint32_t start, uint32_t end, UStringPrepType type,UErrorCode* status){ uint16_t trieWord = 0; - trieWord += (_SPREP_TYPE_THRESHOLD + type); /* the top 4 bits contain the value */ - if(trieWord > 0xFFFF){ + if((int)(_SPREP_TYPE_THRESHOLD + type) > 0xFFFF){ fprintf(stderr,"trieWord cannot contain value greater than 0xFFFF.\n"); exit(U_ILLEGAL_CHAR_FOUND); } + trieWord = (_SPREP_TYPE_THRESHOLD + type); /* the top 4 bits contain the value */ if(start == end){ uint32_t savedTrieWord = utrie_get32(sprepTrie, start, NULL); if(savedTrieWord>0){ @@ -578,7 +574,7 @@ getFoldedValue(UNewTrie *trie, UChar32 start, int32_t offset) { #endif /* #if !UCONFIG_NO_IDNA */ extern void -generateData(const char *dataDir, const char *packageName, const char* bundleName) { +generateData(const char *dataDir, const char* bundleName) { static uint8_t sprepTrieBlock[100000]; UNewDataMemory *pData; @@ -614,12 +610,7 @@ generateData(const char *dataDir, const char *packageName, const char* bundleNam #endif - if(packageName != NULL) { - uprv_strcpy(fileName,packageName); - uprv_strcat(fileName,"_"); - } else { - fileName[0]=0; - } + fileName[0]=0; uprv_strcat(fileName,bundleName); /* write the data */ pData=udata_create(dataDir, DATA_TYPE, fileName, &dataInfo, diff --git a/icuSources/tools/gentest/Makefile.in b/icuSources/tools/gentest/Makefile.in index 422a53f1..39f1f925 100644 --- a/icuSources/tools/gentest/Makefile.in +++ b/icuSources/tools/gentest/Makefile.in @@ -1,6 +1,5 @@ ## Makefile.in for ICU - tools/gentest - -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Madhu Katragadda @@ -15,16 +14,17 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/gentest -## - ## Extra files to remove for 'make clean' CLEANFILES = *~ $(DEPS) ## Target information TARGET = gentest$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = gentest.o genres32.o @@ -32,8 +32,7 @@ DEPS = $(OBJECTS:.o=.d) ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local +distclean distclean-local dist dist-local check check-local ## Clear suffix list .SUFFIXES : @@ -52,7 +51,7 @@ install-local: all-local dist-local: -clean-local: +clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) $(RMV) $(TARGET) $(OBJECTS) @@ -76,4 +75,3 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) endif endif - diff --git a/icuSources/tools/gentest/gentest.c b/icuSources/tools/gentest/gentest.c index 57869c10..b65bd0bf 100644 --- a/icuSources/tools/gentest/gentest.c +++ b/icuSources/tools/gentest/gentest.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,7 +28,6 @@ #include "uoptions.h" #include "gentest.h" -#define DATA_PKG "testdata" #define DATA_NAME "test" #define DATA_TYPE "icu" @@ -73,7 +72,7 @@ main(int argc, char* argv[]) { if(argc<0 || options[0].doesOccur || options[1].doesOccur) { fprintf(stderr, "usage: %s [-options]\n" - "\tcreate the test file " DATA_PKG "_" DATA_NAME "." DATA_TYPE " unless the -r option is given.\n" + "\tcreate the test file " DATA_NAME "." DATA_TYPE " unless the -r option is given.\n" "\toptions:\n" "\t\t-h or -? or --help this usage text\n" "\t\t-d or --destdir destination directory, followed by the path\n" @@ -101,7 +100,7 @@ createData(const char* outputDirectory, UErrorCode *errorCode) { long dataLength; uint32_t size; - pData=udata_create(outputDirectory, DATA_TYPE, DATA_PKG "_" DATA_NAME, &dataInfo, + pData=udata_create(outputDirectory, DATA_TYPE, DATA_NAME, &dataInfo, U_COPYRIGHT_STRING, errorCode); if(U_FAILURE(*errorCode)) { fprintf(stderr, "gentest: unable to create data memory, error %d\n", *errorCode); diff --git a/icuSources/tools/gentest/gentest.dsp b/icuSources/tools/gentest/gentest.dsp deleted file mode 100644 index 9a597425..00000000 --- a/icuSources/tools/gentest/gentest.dsp +++ /dev/null @@ -1,202 +0,0 @@ -# Microsoft Developer Studio Project File - Name="gentest" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=gentest - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "gentest.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "gentest.mak" CFG="gentest - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "gentest - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gentest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "gentest - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "gentest - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "gentest - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\gentest.exe -InputPath=.\Release\gentest.exe -InputName=gentest -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gentest - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\toolutil\debug\\" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\gentest.exe -InputPath=.\Debug\gentest.exe -InputName=gentest -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gentest - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\gentest.exe -InputPath=.\Release\gentest.exe -InputName=gentest -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "gentest - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\debug\\" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\gentest.exe -InputPath=.\Debug\gentest.exe -InputName=gentest -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "gentest - Win32 Release" -# Name "gentest - Win32 Debug" -# Name "gentest - Win64 Release" -# Name "gentest - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\gentest.c -# End Source File -# Begin Source File - -SOURCE=.\genres32.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/gentest/gentest.vcproj b/icuSources/tools/gentest/gentest.vcproj index 4397f374..66faff11 100644 --- a/icuSources/tools/gentest/gentest.vcproj +++ b/icuSources/tools/gentest/gentest.vcproj @@ -20,14 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/gentest.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -80,12 +80,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/gentest.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" diff --git a/icuSources/tools/genuca/Makefile.in b/icuSources/tools/genuca/Makefile.in index 3ec6f6b8..34fbb443 100644 --- a/icuSources/tools/genuca/Makefile.in +++ b/icuSources/tools/genuca/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/genuca -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Source directory information @@ -10,7 +10,8 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/genuca TARGET_STUB_NAME = genuca @@ -18,27 +19,26 @@ SECTION = 8 MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) -## Build directory information -subdir = tools/genuca ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(MAN_FILES) $(DEPS) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/../toolutil +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/../toolutil LIBS = $(LIBICUI18N) $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = genuca.o DEPS = $(OBJECTS:.o=.d) - ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -51,15 +51,19 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + dist-local: -clean-local: +clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) $(RMV) $(TARGET) $(OBJECTS) @@ -76,23 +80,10 @@ $(TARGET) : $(OBJECTS) $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) -# the 'mv' will always fail if you are building in the source dir - -# man page -install-man: $(MAN_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $< $(DESTDIR)$(mandir)/man$(SECTION) - %.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -# build postscript and pdf formats -#$(TARGET).ps: $(TARGET).$(SECTION) -# groff -man < $< > $@ - -#$(TARGET).pdf: $(TARGET).ps -# ps2pdf $< $@ ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -101,3 +92,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/genuca/genuca.cpp b/icuSources/tools/genuca/genuca.cpp index 0e36fd91..8a0f8718 100644 --- a/icuSources/tools/genuca/genuca.cpp +++ b/icuSources/tools/genuca/genuca.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -678,9 +678,9 @@ UCAElements *readAnElement(FILE *data, tempUCATable *t, UCAConstants *consts, UE i++; } element->noOfCEs = CEindex; - +#if 0 element->isThai = UCOL_ISTHAIPREVOWEL(element->cPoints[0]); - +#endif // we don't want any strange stuff after useful data! while(pointer < commentStart) { if(*pointer != ' ' && *pointer != '\t') @@ -778,6 +778,10 @@ write_uca_table(const char *filename, UErrorCode *status) { FILE *data = fopen(filename, "r"); + if(data == NULL) { + fprintf(stderr, "Couldn't open file: %s\n", filename); + return -1; + } uint32_t line = 0; UCAElements *element = NULL; UChar variableTopValue = 0; @@ -798,8 +802,8 @@ write_uca_table(const char *filename, return 0; } uprv_memset(opts, 0, sizeof(UColOptionSet)); - UChar contractionCEs[256][3]; - uprv_memset(contractionCEs, 0, 256*3*sizeof(UChar)); + UChar contractionCEs[512][3]; + uprv_memset(contractionCEs, 0, 512*3*sizeof(UChar)); uint32_t noOfContractions = 0; UCAConstants consts; uprv_memset(&consts, 0, sizeof(consts)); @@ -836,11 +840,6 @@ write_uca_table(const char *filename, #endif - if(data == NULL) { - fprintf(stderr, "Couldn't open file: %s\n", filename); - return -1; - } - uprv_memset(inverseTable, 0xDA, sizeof(int32_t)*3*0xFFFF); opts->variableTopValue = variableTopValue; @@ -858,6 +857,9 @@ write_uca_table(const char *filename, if(U_FAILURE(*status)) { fprintf(stderr, "Failed to init UCA temp table: %s\n", u_errorName(*status)); + uprv_free(opts); + uprv_free(myD); + fclose(data); return -1; } @@ -952,8 +954,12 @@ struct { } if(UCAVersion[0] == 0 && UCAVersion[1] == 0 && UCAVersion[2] == 0 && UCAVersion[3] == 0) { - fprintf(stderr, "UCA version not specified. Cannot create data file!\n"); - return -1; + fprintf(stderr, "UCA version not specified. Cannot create data file!\n"); + uprv_uca_closeTempTable(t); + uprv_free(opts); + uprv_free(myD); + fclose(data); + return -1; } /* { uint32_t trieWord = utrie_get32(t->mapping, 0xDC01, NULL); @@ -992,6 +998,10 @@ struct { if(U_FAILURE(*status)) { fprintf(stderr, "Error creating table: %s\n", u_errorName(*status)); + uprv_uca_closeTempTable(t); + uprv_free(opts); + uprv_free(myD); + fclose(data); return -1; } @@ -1013,7 +1023,7 @@ struct { uprv_memcpy(inverse->UCAVersion, UCAVersion, sizeof(UVersionInfo)); writeOutInverseData(inverse, outputDir, copyright, status); - uprv_uca_closeTempTable(t); + uprv_uca_closeTempTable(t); uprv_free(myD); uprv_free(opts); diff --git a/icuSources/tools/genuca/genuca.dsp b/icuSources/tools/genuca/genuca.dsp deleted file mode 100644 index 189aafe6..00000000 --- a/icuSources/tools/genuca/genuca.dsp +++ /dev/null @@ -1,204 +0,0 @@ -# Microsoft Developer Studio Project File - Name="genuca" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=genuca - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "genuca.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "genuca.mak" CFG="genuca - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "genuca - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genuca - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "genuca - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "genuca - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "genuca - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuin.lib icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\genuca.exe -InputPath=.\Release\genuca.exe -InputName=genuca -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genuca - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icuind.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /nodefaultlib -# Begin Custom Build -TargetPath=.\Debug\genuca.exe -InputPath=.\Debug\genuca.exe -InputName=genuca -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genuca - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuin.lib icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\genuca.exe -InputPath=.\Release\genuca.exe -InputName=genuca -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "genuca - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\..\i18n" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icuind.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# SUBTRACT LINK32 /nodefaultlib -# Begin Custom Build -TargetPath=.\Debug\genuca.exe -InputPath=.\Debug\genuca.exe -InputName=genuca -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "genuca - Win32 Release" -# Name "genuca - Win32 Debug" -# Name "genuca - Win64 Release" -# Name "genuca - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\genuca.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\genuca.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/genuca/genuca.vcproj b/icuSources/tools/genuca/genuca.vcproj index e4962744..e390f12a 100644 --- a/icuSources/tools/genuca/genuca.vcproj +++ b/icuSources/tools/genuca/genuca.vcproj @@ -22,12 +22,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\..\i18n,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\..\i18n;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/genuca.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -84,14 +85,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\..\i18n,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\..\i18n;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/genuca.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" diff --git a/icuSources/tools/icupkg/Makefile.in b/icuSources/tools/icupkg/Makefile.in new file mode 100644 index 00000000..155c3aa1 --- /dev/null +++ b/icuSources/tools/icupkg/Makefile.in @@ -0,0 +1,96 @@ +## Makefile.in for ICU - tools/icupkg +## Copyright (c) 1999-2006, International Business Machines Corporation and +## others. All Rights Reserved. +## Steven R. Loomis + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../.. + +include $(top_builddir)/icudefs.mk + +## Build directory information +subdir = tools/icupkg + +TARGET_STUB_NAME = icupkg + +SECTION = 8 + +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) $(MAN_FILES) + +## Target information +TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) + +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) + +OBJECTS = icupkg.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) $(MAN_FILES) + +install-local: all-local install-man + $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) + $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) + +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(TARGET) $(OBJECTS) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: all-local + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(TARGET) : $(OBJECTS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + + +%.$(SECTION): $(srcdir)/%.$(SECTION).in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif + diff --git a/icuSources/tools/icupkg/icupkg.1.in b/icuSources/tools/icupkg/icupkg.1.in new file mode 100644 index 00000000..c5ea50e5 --- /dev/null +++ b/icuSources/tools/icupkg/icupkg.1.in @@ -0,0 +1,204 @@ +.\" Hey, Emacs! This is -*-nroff-*- you know... +.\" +.\" icupkg.1: manual page for the icupkg utility +.\" +.\" Copyright (C) 2000-2006 IBM, Inc. and others. +.\" +.TH ICUPKG 1 "18 August 2006" "ICU MANPAGE" "ICU @VERSION@ Manual" +.SH NAME +.B icupkg +\- extract or modify an ICU +.B .dat +archive +.SH SYNOPSIS +.B icupkg +[ +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +] +[ +.BR "\-tl\fP, \fB\-\-type" " l" +| +.BR "\-tb\fP, \fB\-\-type" " b" +| +.BR "\-te\fP, \fB\-\-type" " e" +] +[ +.BR "\-c\fP, \fB\-\-copyright" +| +.BI "\-C\fP, \fB\-\-comment" " comment" +] +[ +.BI "\-a\fP, \fB\-\-add" " list" +] +[ +.BI "\-r\fP, \fB\-\-remove" " list" +] +[ +.BI "\-x\fP, \fB\-\-extract" " list" +] +[ +.BI "\-l\fP, \fB\-\-list" +] +[ +.BI "\-s\fP, \fB\-\-sourcedir" " source" +] +[ +.BI "\-d\fP, \fB\-\-destdir" " destination" +] +[ +.BI "\-w\fP, \fB\-\-writepkg" +] +[ +.BI "\-m\fP, \fB\-\-matchmode" " mode" +] +.IR infilename +[ +.BI "outfilename" +] +.SH DESCRIPTION +.B icupkg +reads the input ICU +.B .dat +package file, modify it according to the options, +swap it to the desired platform properties (charset & endianness), +and optionally write the resulting ICU +.B .dat +package to the output file. +Items are removed, then added, then extracted and listed. +An ICU +.B .dat +package is written if items are removed or added, +or if the input and output filenames differ, +or if the +.BR "\-w\fP, \fB\-\-writepkg" +option is set. +.PP +If the input filename is "new" then an empty package is created. +If the output filename is missing, then it is automatically generated +from the input filename. If the input filename ends with an l, b, or e +matching its platform properties, then the output filename will +contain the letter from the +.BI "\-t\fP, \fB\-\-type" +option. +.PP +This tool can also be used to just swap a single ICU data file, replacing the +former icuswap tool. For this mode, provide the infilename (and optional +outfilename) for a non-package ICU data file. +Allowed options include +.BI "\-t\fP, \fB\-w\fP, \fB\-s\fP" +and +.BI \-d +. +The filenames can be absolute, or relative to the source/dest dir paths. +Other options are not allowed in this mode. +.SH OPTIONS +.TP +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +Print help about usage and exit. +.TP +.BI "\-tl\fP, \fB\-\-type" " l" +Output for little-endian/ASCII charset family. +The output type defaults to the input type. +.TP +.BI "\-tb\fP, \fB\-\-type" " b" +Output for big-endian/ASCII charset family. +The output type defaults to the input type. +.TP +.BI "\-te\fP, \fB\-\-type" " e" +Output for big-endian/EBCDIC charset family. +The output type defaults to the input type. +.TP +.BR \-c\fP, \fB\-\-copyright +Include the ICU copyright notice in the resulting data. +.TP +.BI "\-C\fP, \fB\-\-comment" " comment" +Include the specified +.I comment +in the resulting data instead of the ICU copyright notice. +.TP +.BI "\-a\fP, \fB\-\-add" " list" +Add items from the +.I list +to the package. The list can be a single filename with a +.B .txt +file extension containing a list of item filenames, or an ICU +.B .dat +package filename. +.TP +.BI "\-r\fP, \fB\-\-remove" " list" +Remove items from the +.I list +from the package. The list can be a single filename with a +.B .txt +file extension containing a list of item filenames, or an ICU +.B .dat +package filename. +.TP +.BI "\-x\fP, \fB\-\-extract" " list" +Extract items from the +.I list +from the package. The list can be a single filename with a +.B .txt +file extension containing a list of item filenames, or an ICU +.B .dat +package filename. +.TP +.BI "\-m\fP, \fB\-\-matchmode" " mode" +Set the matching mode for item names with wildcards. +.TP +.BI "\-s\fP, \fB\-\-sourcedir" " source" +Set the source directory to +.IR source . +The default source directory is the current directory. +.TP +.BI "\-d\fP, \fB\-\-destdir" " destination" +Set the destination directory to +.IR destination . +The default destination directory is the current directory. +.TP +.BI "\-l\fP, \fB\-\-list" +List the package items to stdout (after modifying the package). +.SH LIST FILE SYNTAX +Items are listed on one or more lines and separated by whitespace (space+tab). +Comments begin with +.B # +and are ignored. Empty lines are ignored. Lines where the first non-whitespace +character is one of "%&'()*+,-./:;<=>?_ are also ignored +to reserve for future syntax. +.PP +Items for removal or extraction may contain a single +.B * +wildcard character. The +.B * +matches zero or more characters. If +.BI "\-m\fP, \fB\-\-matchmode" " noslash" +is set, then the +.B * +character does not match the +.B / +character. +.PP +Items must be listed relative to the package, and the +.B "\fB\-\-sourcedir" +or the +.B "\fB\-\-destdir" +path will be prepended. The paths are only prepended to item +filenames while adding or extracting items, not to ICU .dat package or list +filenames. +.PP +Paths may contain +.B / +instead of the platform's file separator character and are converted as +appropriate. +.SH AUTHORS +Markus Scherer +.br +George Rhoten +.SH VERSION +1.0 +.SH COPYRIGHT +Copyright (C) 2006 IBM, Inc. and others. +.SH SEE ALSO +.BR pkgdata (1) +.BR genrb (1) + diff --git a/icuSources/tools/icupkg/icupkg.8.in b/icuSources/tools/icupkg/icupkg.8.in new file mode 100644 index 00000000..37caabaf --- /dev/null +++ b/icuSources/tools/icupkg/icupkg.8.in @@ -0,0 +1,204 @@ +.\" Hey, Emacs! This is -*-nroff-*- you know... +.\" +.\" icupkg.8: manual page for the icupkg utility +.\" +.\" Copyright (C) 2000-2006 IBM, Inc. and others. +.\" +.TH ICUPKG 8 "18 August 2006" "ICU MANPAGE" "ICU @VERSION@ Manual" +.SH NAME +.B icupkg +\- extract or modify an ICU +.B .dat +archive +.SH SYNOPSIS +.B icupkg +[ +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +] +[ +.BR "\-tl\fP, \fB\-\-type" " l" +| +.BR "\-tb\fP, \fB\-\-type" " b" +| +.BR "\-te\fP, \fB\-\-type" " e" +] +[ +.BR "\-c\fP, \fB\-\-copyright" +| +.BI "\-C\fP, \fB\-\-comment" " comment" +] +[ +.BI "\-a\fP, \fB\-\-add" " list" +] +[ +.BI "\-r\fP, \fB\-\-remove" " list" +] +[ +.BI "\-x\fP, \fB\-\-extract" " list" +] +[ +.BI "\-l\fP, \fB\-\-list" +] +[ +.BI "\-s\fP, \fB\-\-sourcedir" " source" +] +[ +.BI "\-d\fP, \fB\-\-destdir" " destination" +] +[ +.BI "\-w\fP, \fB\-\-writepkg" +] +[ +.BI "\-m\fP, \fB\-\-matchmode" " mode" +] +.IR infilename +[ +.BI "outfilename" +] +.SH DESCRIPTION +.B icupkg +reads the input ICU +.B .dat +package file, modify it according to the options, +swap it to the desired platform properties (charset & endianness), +and optionally write the resulting ICU +.B .dat +package to the output file. +Items are removed, then added, then extracted and listed. +An ICU +.B .dat +package is written if items are removed or added, +or if the input and output filenames differ, +or if the +.BR "\-w\fP, \fB\-\-writepkg" +option is set. +.PP +If the input filename is "new" then an empty package is created. +If the output filename is missing, then it is automatically generated +from the input filename. If the input filename ends with an l, b, or e +matching its platform properties, then the output filename will +contain the letter from the +.BI "\-t\fP, \fB\-\-type" +option. +.PP +This tool can also be used to just swap a single ICU data file, replacing the +former icuswap tool. For this mode, provide the infilename (and optional +outfilename) for a non-package ICU data file. +Allowed options include +.BI "\-t\fP, \fB\-w\fP, \fB\-s\fP" +and +.BI \-d +. +The filenames can be absolute, or relative to the source/dest dir paths. +Other options are not allowed in this mode. +.SH OPTIONS +.TP +.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" +Print help about usage and exit. +.TP +.BI "\-tl\fP, \fB\-\-type" " l" +Output for little-endian/ASCII charset family. +The output type defaults to the input type. +.TP +.BI "\-tb\fP, \fB\-\-type" " b" +Output for big-endian/ASCII charset family. +The output type defaults to the input type. +.TP +.BI "\-te\fP, \fB\-\-type" " e" +Output for big-endian/EBCDIC charset family. +The output type defaults to the input type. +.TP +.BR \-c\fP, \fB\-\-copyright +Include the ICU copyright notice in the resulting data. +.TP +.BI "\-C\fP, \fB\-\-comment" " comment" +Include the specified +.I comment +in the resulting data instead of the ICU copyright notice. +.TP +.BI "\-a\fP, \fB\-\-add" " list" +Add items from the +.I list +to the package. The list can be a single filename with a +.B .txt +file extension containing a list of item filenames, or an ICU +.B .dat +package filename. +.TP +.BI "\-r\fP, \fB\-\-remove" " list" +Remove items from the +.I list +from the package. The list can be a single filename with a +.B .txt +file extension containing a list of item filenames, or an ICU +.B .dat +package filename. +.TP +.BI "\-x\fP, \fB\-\-extract" " list" +Extract items from the +.I list +from the package. The list can be a single filename with a +.B .txt +file extension containing a list of item filenames, or an ICU +.B .dat +package filename. +.TP +.BI "\-m\fP, \fB\-\-matchmode" " mode" +Set the matching mode for item names with wildcards. +.TP +.BI "\-s\fP, \fB\-\-sourcedir" " source" +Set the source directory to +.IR source . +The default source directory is the current directory. +.TP +.BI "\-d\fP, \fB\-\-destdir" " destination" +Set the destination directory to +.IR destination . +The default destination directory is the current directory. +.TP +.BI "\-l\fP, \fB\-\-list" +List the package items to stdout (after modifying the package). +.SH LIST FILE SYNTAX +Items are listed on one or more lines and separated by whitespace (space+tab). +Comments begin with +.B # +and are ignored. Empty lines are ignored. Lines where the first non-whitespace +character is one of "%&'()*+,-./:;<=>?_ are also ignored +to reserve for future syntax. +.PP +Items for removal or extraction may contain a single +.B * +wildcard character. The +.B * +matches zero or more characters. If +.BI "\-m\fP, \fB\-\-matchmode" " noslash" +is set, then the +.B * +character does not match the +.B / +character. +.PP +Items must be listed relative to the package, and the +.B "\fB\-\-sourcedir" +or the +.B "\fB\-\-destdir" +path will be prepended. The paths are only prepended to item +filenames while adding or extracting items, not to ICU .dat package or list +filenames. +.PP +Paths may contain +.B / +instead of the platform's file separator character and are converted as +appropriate. +.SH AUTHORS +Markus Scherer +.br +George Rhoten +.SH VERSION +1.0 +.SH COPYRIGHT +Copyright (C) 2006 IBM, Inc. and others. +.SH SEE ALSO +.BR pkgdata (1) +.BR genrb (1) + diff --git a/icuSources/tools/icupkg/icupkg.cpp b/icuSources/tools/icupkg/icupkg.cpp new file mode 100644 index 00000000..93c488dd --- /dev/null +++ b/icuSources/tools/icupkg/icupkg.cpp @@ -0,0 +1,579 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: icupkg.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005jul29 +* created by: Markus W. Scherer +* +* This tool operates on ICU data (.dat package) files. +* It takes one as input, or creates an empty one, and can remove, add, and +* extract data pieces according to command-line options. +* At the same time, it swaps each piece to a consistent set of platform +* properties as desired. +* Useful as an install-time tool for shipping only one flavor of ICU data +* and preparing data files for the target platform. +* Also for customizing ICU data (pruning, augmenting, replacing) and for +* taking it apart. +* Subsumes functionality and implementation code from +* gencmn, decmn, and icuswap tools. +* Will not work with data DLLs (shared libraries). +*/ + +#include "unicode/utypes.h" +#include "unicode/putil.h" +#include "cstring.h" +#include "toolutil.h" +#include "uoptions.h" +#include "uparse.h" +#include "package.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +// TODO: add --matchmode=regex for using the ICU regex engine for item name pattern matching? + +// general definitions ----------------------------------------------------- *** + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +// read a file list -------------------------------------------------------- *** + +static const char *reservedChars="\"%&'()*+,-./:;<=>?_"; + +static const struct { + const char *suffix; + int32_t length; +} listFileSuffixes[]={ + { ".txt", 4 }, + { ".lst", 4 }, + { ".tmp", 4 } +}; + +/* check for multiple text file suffixes to see if this list name is a text file name */ +static UBool +isListTextFile(const char *listname) { + const char *listNameEnd=strchr(listname, 0); + const char *suffix; + int32_t i, length; + for(i=0; i<LENGTHOF(listFileSuffixes); ++i) { + suffix=listFileSuffixes[i].suffix; + length=listFileSuffixes[i].length; + if((listNameEnd-listname)>length && 0==memcmp(listNameEnd-length, suffix, length)) { + return TRUE; + } + } + return FALSE; +} + +/* + * Read a file list. + * If the listname ends with ".txt", then read the list file + * (in the system/ invariant charset). + * If the listname ends with ".dat", then read the ICU .dat package file. + * Otherwise, read the file itself as a single-item list. + */ +static Package * +readList(const char *filesPath, const char *listname, UBool readContents) { + Package *listPkg; + FILE *file; + const char *listNameEnd; + + if(listname==NULL || listname[0]==0) { + fprintf(stderr, "missing list file\n"); + return NULL; + } + + listPkg=new Package(); + if(listPkg==NULL) { + fprintf(stderr, "icupkg: not enough memory\n"); + exit(U_MEMORY_ALLOCATION_ERROR); + } + + listNameEnd=strchr(listname, 0); + if(isListTextFile(listname)) { + // read the list file + char line[1024]; + char *end; + const char *start; + + file=fopen(listname, "r"); + if(file==NULL) { + fprintf(stderr, "icupkg: unable to open list file \"%s\"\n", listname); + delete listPkg; + exit(U_FILE_ACCESS_ERROR); + } + + while(fgets(line, sizeof(line), file)) { + // remove comments + end=strchr(line, '#'); + if(end!=NULL) { + *end=0; + } else { + // remove trailing CR LF + end=strchr(line, 0); + while(line<end && (*(end-1)=='\r' || *(end-1)=='\n')) { + *--end=0; + } + } + + // check first non-whitespace character and + // skip empty lines and + // skip lines starting with reserved characters + start=u_skipWhitespace(line); + if(*start==0 || NULL!=strchr(reservedChars, *start)) { + continue; + } + + // take whitespace-separated items from the line + for(;;) { + // find whitespace after the item or the end of the line + for(end=(char *)start; *end!=0 && *end!=' ' && *end!='\t'; ++end) {} + if(*end==0) { + // this item is the last one on the line + end=NULL; + } else { + // the item is terminated by whitespace, terminate it with NUL + *end=0; + } + if(readContents) { + listPkg->addFile(filesPath, start); + } else { + listPkg->addItem(start); + } + + // find the start of the next item or exit the loop + if(end==NULL || *(start=u_skipWhitespace(end+1))==0) { + break; + } + } + } + fclose(file); + } else if((listNameEnd-listname)>4 && 0==memcmp(listNameEnd-4, ".dat", 4)) { + // read the ICU .dat package + listPkg->readPackage(listname); + } else { + // list the single file itself + if(readContents) { + listPkg->addFile(filesPath, listname); + } else { + listPkg->addItem(listname); + } + } + + return listPkg; +} + +// main() ------------------------------------------------------------------ *** + +static void +printUsage(const char *pname, UBool isHelp) { + FILE *where=isHelp ? stdout : stderr; + + fprintf(where, + "%csage: %s [-h|-?|--help ] [-tl|-tb|-te] [-c] [-C comment]\n" + "\t[-a list] [-r list] [-x list] [-l]\n" + "\t[-s path] [-d path] [-w] [-m mode]\n" + "\tinfilename [outfilename]\n", + isHelp ? 'U' : 'u', pname); + if(isHelp) { + fprintf(where, + "\n" + "Read the input ICU .dat package file, modify it according to the options,\n" + "swap it to the desired platform properties (charset & endianness),\n" + "and optionally write the resulting ICU .dat package to the output file.\n" + "Items are removed, then added, then extracted and listed.\n" + "An ICU .dat package is written if items are removed or added,\n" + "or if the input and output filenames differ,\n" + "or if the --writepkg (-w) option is set.\n"); + fprintf(where, + "\n" + "If the input filename is \"new\" then an empty package is created.\n" + "If the output filename is missing, then it is automatically generated\n" + "from the input filename: If the input filename ends with an l, b, or e\n" + "matching its platform properties, then the output filename will\n" + "contain the letter from the -t (--type) option.\n"); + fprintf(where, + "\n" + "This tool can also be used to just swap a single ICU data file, replacing the\n" + "former icuswap tool. For this mode, provide the infilename (and optional\n" + "outfilename) for a non-package ICU data file.\n" + "Allowed options include -t, -w, -s and -d.\n" + "The filenames can be absolute, or relative to the source/dest dir paths.\n" + "Other options are not allowed in this mode.\n"); + fprintf(where, + "\n" + "Options:\n" + "\t(Only the last occurrence of an option is used.)\n" + "\n" + "\t-h or -? or --help print this message and exit\n"); + fprintf(where, + "\n" + "\t-tl or --type l output for little-endian/ASCII charset family\n" + "\t-tb or --type b output for big-endian/ASCII charset family\n" + "\t-te or --type e output for big-endian/EBCDIC charset family\n" + "\t The output type defaults to the input type.\n" + "\n" + "\t-c or --copyright include the ICU copyright notice\n" + "\t-C comment or --comment comment include a comment string\n"); + fprintf(where, + "\n" + "\t-a list or --add list add items to the package\n" + "\t-r list or --remove list remove items from the package\n" + "\t-x list or --extract list extract items from the package\n" + "\tThe list can be a single item's filename,\n" + "\tor a .txt filename with a list of item filenames,\n" + "\tor an ICU .dat package filename.\n"); + fprintf(where, + "\n" + "\t-w or --writepkg write the output package even if no items are removed\n" + "\t or added (e.g., for only swapping the data)\n"); + fprintf(where, + "\n" + "\t-m mode or --matchmode mode set the matching mode for item names with\n" + "\t wildcards\n" + "\t noslash: the '*' wildcard does not match the '/' tree separator\n"); + /* + * Usage text columns, starting after the initial TAB. + * 1 2 3 4 5 6 7 8 + * 901234567890123456789012345678901234567890123456789012345678901234567890 + */ + fprintf(where, + "\n" + "\tList file syntax: Items are listed on one or more lines and separated\n" + "\tby whitespace (space+tab).\n" + "\tComments begin with # and are ignored. Empty lines are ignored.\n" + "\tLines where the first non-whitespace character is one of %s\n" + "\tare also ignored, to reserve for future syntax.\n", + reservedChars); + fprintf(where, + "\tItems for removal or extraction may contain a single '*' wildcard\n" + "\tcharacter. The '*' matches zero or more characters.\n" + "\tIf --matchmode noslash (-m noslash) is set, then the '*'\n" + "\tdoes not match '/'.\n"); + fprintf(where, + "\n" + "\tItems must be listed relative to the package, and the --sourcedir or\n" + "\tthe --destdir path will be prepended.\n" + "\tThe paths are only prepended to item filenames while adding or\n" + "\textracting items, not to ICU .dat package or list filenames.\n" + "\t\n" + "\tPaths may contain '/' instead of the platform's\n" + "\tfile separator character, and are converted as appropriate.\n"); + fprintf(where, + "\n" + "\t-s path or --sourcedir path directory for the --add items\n" + "\t-d path or --destdir path directory for the --extract items\n" + "\n" + "\t-l or --list list the package items to stdout\n" + "\t (after modifying the package)\n"); + } +} + +static UOption options[]={ + UOPTION_HELP_H, + UOPTION_HELP_QUESTION_MARK, + UOPTION_DEF("type", 't', UOPT_REQUIRES_ARG), + + UOPTION_COPYRIGHT, + UOPTION_DEF("comment", 'C', UOPT_REQUIRES_ARG), + + UOPTION_SOURCEDIR, + UOPTION_DESTDIR, + + UOPTION_DEF("writepkg", 'w', UOPT_NO_ARG), + + UOPTION_DEF("matchmode", 'm', UOPT_REQUIRES_ARG), + + UOPTION_DEF("add", 'a', UOPT_REQUIRES_ARG), + UOPTION_DEF("remove", 'r', UOPT_REQUIRES_ARG), + UOPTION_DEF("extract", 'x', UOPT_REQUIRES_ARG), + + UOPTION_DEF("list", 'l', UOPT_NO_ARG) +}; + +enum { + OPT_HELP_H, + OPT_HELP_QUESTION_MARK, + OPT_OUT_TYPE, + + OPT_COPYRIGHT, + OPT_COMMENT, + + OPT_SOURCEDIR, + OPT_DESTDIR, + + OPT_WRITEPKG, + + OPT_MATCHMODE, + + OPT_ADD_LIST, + OPT_REMOVE_LIST, + OPT_EXTRACT_LIST, + + OPT_LIST_ITEMS, + + OPT_COUNT +}; + +static UBool +isPackageName(const char *filename) { + int32_t len; + + len=(int32_t)strlen(filename)-4; /* -4: subtract the length of ".dat" */ + return (UBool)(len>0 && 0==strcmp(filename+len, ".dat")); +} + +extern int +main(int argc, char *argv[]) { + const char *pname, *sourcePath, *destPath, *inFilename, *outFilename, *outComment; + char outType; + UBool isHelp, isModified, isPackage; + + Package *pkg, *listPkg; + + U_MAIN_INIT_ARGS(argc, argv); + + /* get the program basename */ + pname=findBasename(argv[0]); + + argc=u_parseArgs(argc, argv, LENGTHOF(options), options); + isHelp=options[OPT_HELP_H].doesOccur || options[OPT_HELP_QUESTION_MARK].doesOccur; + if(isHelp) { + printUsage(pname, TRUE); + return U_ZERO_ERROR; + } + if(argc<2 || 3<argc) { + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + + pkg=new Package; + if(pkg==NULL) { + fprintf(stderr, "icupkg: not enough memory\n"); + return U_MEMORY_ALLOCATION_ERROR; + } + isModified=FALSE; + + if(options[OPT_SOURCEDIR].doesOccur) { + sourcePath=options[OPT_SOURCEDIR].value; + } else { + // work relative to the current working directory + sourcePath=NULL; + } + if(options[OPT_DESTDIR].doesOccur) { + destPath=options[OPT_DESTDIR].value; + } else { + // work relative to the current working directory + destPath=NULL; + } + + if(0==strcmp(argv[1], "new")) { + inFilename=NULL; + isPackage=TRUE; + } else { + inFilename=argv[1]; + if(isPackageName(inFilename)) { + pkg->readPackage(inFilename); + isPackage=TRUE; + } else { + /* swap a single file (icuswap replacement) rather than work on a package */ + pkg->addFile(sourcePath, inFilename); + isPackage=FALSE; + } + } + + if(argc>=3) { + outFilename=argv[2]; + if(0!=strcmp(argv[1], argv[2])) { + isModified=TRUE; + } + } else if(isPackage) { + outFilename=NULL; + } else /* !isPackage */ { + outFilename=inFilename; + isModified=(UBool)(sourcePath!=destPath); + } + + /* parse the output type option */ + if(options[OPT_OUT_TYPE].doesOccur) { + const char *type=options[OPT_OUT_TYPE].value; + if(type[0]==0 || type[1]!=0) { + /* the type must be exactly one letter */ + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + outType=type[0]; + switch(outType) { + case 'l': + case 'b': + case 'e': + break; + default: + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + + /* + * Set the isModified flag if the output type differs from the + * input package type. + * If we swap a single file, just assume that we are modifying it. + * The Package class does not give us access to the item and its type. + */ + isModified=(UBool)(!isPackage || outType!=pkg->getInType()); + } else if(isPackage) { + outType=pkg->getInType(); // default to input type + } else /* !isPackage: swap single file */ { + outType=0; /* tells extractItem() to not swap */ + } + + if(options[OPT_WRITEPKG].doesOccur) { + isModified=TRUE; + } + + if(!isPackage) { + /* + * icuswap tool replacement: Only swap a single file. + * Check that irrelevant options are not set. + */ + if( options[OPT_COMMENT].doesOccur || + options[OPT_COPYRIGHT].doesOccur || + options[OPT_MATCHMODE].doesOccur || + options[OPT_REMOVE_LIST].doesOccur || + options[OPT_ADD_LIST].doesOccur || + options[OPT_EXTRACT_LIST].doesOccur || + options[OPT_LIST_ITEMS].doesOccur + ) { + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + if(isModified) { + pkg->extractItem(destPath, outFilename, 0, outType); + } + + delete pkg; + return 0; + } + + /* Work with a package. */ + + if(options[OPT_COMMENT].doesOccur) { + outComment=options[OPT_COMMENT].value; + } else if(options[OPT_COPYRIGHT].doesOccur) { + outComment=U_COPYRIGHT_STRING; + } else { + outComment=NULL; + } + + if(options[OPT_MATCHMODE].doesOccur) { + if(0==strcmp(options[OPT_MATCHMODE].value, "noslash")) { + pkg->setMatchMode(Package::MATCH_NOSLASH); + } else { + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + } + + /* remove items */ + if(options[OPT_REMOVE_LIST].doesOccur) { + listPkg=readList(NULL, options[OPT_REMOVE_LIST].value, FALSE); + if(listPkg!=NULL) { + pkg->removeItems(*listPkg); + delete listPkg; + isModified=TRUE; + } else { + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + } + + /* + * add items + * use a separate Package so that its memory and items stay around + * as long as the main Package + */ + if(options[OPT_ADD_LIST].doesOccur) { + listPkg=readList(sourcePath, options[OPT_ADD_LIST].value, TRUE); + if(listPkg!=NULL) { + pkg->addItems(*listPkg); + delete listPkg; + isModified=TRUE; + } else { + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + } + + /* extract items */ + if(options[OPT_EXTRACT_LIST].doesOccur) { + listPkg=readList(NULL, options[OPT_EXTRACT_LIST].value, FALSE); + if(listPkg!=NULL) { + pkg->extractItems(destPath, *listPkg, outType); + delete listPkg; + } else { + printUsage(pname, FALSE); + return U_ILLEGAL_ARGUMENT_ERROR; + } + } + + /* list items */ + if(options[OPT_LIST_ITEMS].doesOccur) { + pkg->listItems(stdout); + } + + /* check dependencies between items */ + if(!pkg->checkDependencies()) { + /* some dependencies are not fulfilled */ + return U_MISSING_RESOURCE_ERROR; + } + + /* write the output .dat package if there are any modifications */ + if(isModified) { + char outFilenameBuffer[1024]; // for auto-generated output filename, if necessary + + if(outFilename==NULL || outFilename[0]==0) { + if(inFilename==NULL || inFilename[0]==0) { + fprintf(stderr, "icupkg: unable to auto-generate an output filename if there is no input filename\n"); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } + + /* + * auto-generate a filename: + * copy the inFilename, + * and if the last basename character matches the input file's type, + * then replace it with the output file's type + */ + char suffix[6]="?.dat"; + char *s; + + suffix[0]=pkg->getInType(); + strcpy(outFilenameBuffer, inFilename); + s=strchr(outFilenameBuffer, 0); + if((s-outFilenameBuffer)>5 && 0==memcmp(s-5, suffix, 5)) { + *(s-5)=outType; + } + outFilename=outFilenameBuffer; + } + pkg->writePackage(outFilename, outType, outComment); + } + + delete pkg; + return 0; +} + +/* + * Hey, Emacs, please set the following: + * + * Local Variables: + * indent-tabs-mode: nil + * End: + * + */ diff --git a/icuSources/tools/icupkg/icupkg.vcproj b/icuSources/tools/icupkg/icupkg.vcproj new file mode 100644 index 00000000..281b2987 --- /dev/null +++ b/icuSources/tools/icupkg/icupkg.vcproj @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="icupkg" + ProjectGUID="{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}" + Keyword="Win32Proj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" + PrecompiledHeaderFile="Release/icupkg.pch" + AssemblerListingLocation="Release/" + ObjectFile="Release/" + ProgramDataBaseFileName="Release/" + WarningLevel="4" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool" + CommandLine="copy "$(TargetPath)" ..\..\..\bin +" + Outputs="..\..\..\bin\$(TargetFileName)"/> + <Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/icupkg.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + ProgramDatabaseFile="Release/icupkg.pdb" + SubSystem="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + BufferSecurityCheck="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" + PrecompiledHeaderFile="Debug/icupkg.pch" + AssemblerListingLocation="Debug/" + ObjectFile="Debug/" + ProgramDataBaseFileName="Debug/" + BrowseInformation="1" + WarningLevel="4" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool" + CommandLine="copy "$(TargetPath)" ..\..\..\bin +" + Outputs="..\..\..\bin\$(TargetFileName)"/> + <Tool + Name="VCLinkerTool" + OutputFile="$(OutDir)/icupkg.exe" + LinkIncremental="2" + SuppressStartupBanner="TRUE" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile="$(OutDir)/icupkg.pdb" + SubSystem="1"/> + <Tool + Name="VCMIDLTool"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <File + RelativePath="icupkg.cpp"> + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/icuSources/tools/icuswap/Makefile.in b/icuSources/tools/icuswap/Makefile.in index 41193999..6fd0ced2 100644 --- a/icuSources/tools/icuswap/Makefile.in +++ b/icuSources/tools/icuswap/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/icuswap -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2006, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -14,24 +14,23 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/icuswap -## - TARGET_STUB_NAME = icuswap -SECTION = 1 - -#MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) +SECTION = 8 -#ALL_MAN_FILES = $(MANX_FILES) +#MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(ALL_MAN_FILES) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil $(BIR_CPPFLAGS) -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = icuswap.o @@ -39,8 +38,7 @@ DEPS = $(OBJECTS:.o=.d) ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man install-manx +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -53,12 +51,17 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(sbindir) $(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) +install-man: $(MAN_FILES) +# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) +# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) + + dist-local: clean-local: @@ -75,18 +78,14 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status $(TARGET) : $(OBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) + $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) -# man page -install-man: install-manx -install-manx: $(MANX_FILES) -# $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) -# $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) %.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + ifeq (,$(MAKECMDGOALS)) -include $(DEPS) else @@ -94,3 +93,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/icuswap/icuswap.cpp b/icuSources/tools/icuswap/icuswap.cpp index df664a32..2fb33199 100644 --- a/icuSources/tools/icuswap/icuswap.cpp +++ b/icuSources/tools/icuswap/icuswap.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -31,28 +31,14 @@ #include "uarrsort.h" #include "ucmndata.h" #include "udataswp.h" +#include "swapimpl.h" #include "toolutil.h" #include "uoptions.h" -/* swapping implementations in common */ - -#include "uresdata.h" -#include "ucnv_io.h" -#include "uprops.h" -#include "ucase.h" -#include "ucol_swp.h" -#include "ucnv_bld.h" -#include "unormimp.h" -#include "sprpimpl.h" -#include "propname.h" -#include "rbbidata.h" - #include <stdio.h> #include <stdlib.h> #include <string.h> -/* swapping implementations in i18n */ - /* definitions */ #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) @@ -79,39 +65,15 @@ fileSize(FILE *f) { return size; } -/** - * Identifies and then transforms the ICU data piece in-place, or determines - * its length. See UDataSwapFn. - * This function handles .dat data packages as well as single data pieces - * and internally dispatches to per-type swap functions. - * Sets a U_UNSUPPORTED_ERROR if the data format is not recognized. - * - * @see UDataSwapFn - * @see udata_openSwapper - * @see udata_openSwapperForInputData - * @draft ICU 2.8 - */ -static int32_t -udata_swap(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode); - /** * Swap an ICU .dat package, including swapping of enclosed items. */ U_CFUNC int32_t U_CALLCONV -udata_swapPackage(const UDataSwapper *ds, +udata_swapPackage(const char *inFilename, const char *outFilename, + const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode); -/* - * udata_swapPackage() needs to rename ToC name entries from the old package - * name to the new one. - * We store the filenames here, and udata_swapPackage() will extract the - * package names. - */ -static const char *inFilename, *outFilename; - U_CDECL_BEGIN static void U_CALLCONV printError(void *context, const char *fmt, va_list args) { @@ -147,12 +109,15 @@ main(int argc, char *argv[]) { int rc; UDataSwapper *ds; + const UDataInfo *pInfo; UErrorCode errorCode; uint8_t outCharset; UBool outIsBigEndian; U_MAIN_INIT_ARGS(argc, argv); + fprintf(stderr, "Warning: icuswap is an obsolete tool and it will be removed in the next ICU release.\nPlease use the icupkg tool instead.\n"); + /* get the program basename */ pname=strrchr(argv[0], U_FILE_SEP_CHAR); if(pname==NULL) { @@ -196,10 +161,6 @@ main(int argc, char *argv[]) { in=out=NULL; data=NULL; - /* udata_swapPackage() needs the filenames */ - inFilename=argv[1]; - outFilename=argv[2]; - /* open the input file, get its length, allocate memory for it, read the file */ in=fopen(argv[1], "rb"); if(in==NULL) { @@ -253,13 +214,40 @@ main(int argc, char *argv[]) { ds->printError=printError; ds->printErrorContext=stderr; - length=udata_swap(ds, data, length, data, &errorCode); - udata_closeSwapper(ds); - if(U_FAILURE(errorCode)) { - fprintf(stderr, "%s: udata_swap(\"%s\") failed - %s\n", - pname, argv[1], u_errorName(errorCode)); - rc=4; - goto done; + /* speculative cast, protected by the following length check */ + pInfo=(const UDataInfo *)((const char *)data+4); + + if( length>=20 && + pInfo->dataFormat[0]==0x43 && /* dataFormat="CmnD" */ + pInfo->dataFormat[1]==0x6d && + pInfo->dataFormat[2]==0x6e && + pInfo->dataFormat[3]==0x44 + ) { + /* + * swap the .dat package + * udata_swapPackage() needs to rename ToC name entries from the old package + * name to the new one. + * We pass it the filenames, and udata_swapPackage() will extract the + * package names. + */ + length=udata_swapPackage(argv[1], argv[2], ds, data, length, data, &errorCode); + udata_closeSwapper(ds); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "%s: udata_swapPackage(\"%s\") failed - %s\n", + pname, argv[1], u_errorName(errorCode)); + rc=4; + goto done; + } + } else { + /* swap the data, which is not a .dat package */ + length=udata_swap(ds, data, length, data, &errorCode); + udata_closeSwapper(ds); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "%s: udata_swap(\"%s\") failed - %s\n", + pname, argv[1], u_errorName(errorCode)); + rc=4; + goto done; + } } out=fopen(argv[2], "wb"); @@ -294,124 +282,6 @@ done: return rc; } -/* swap the data ------------------------------------------------------------ */ - -static const struct { - uint8_t dataFormat[4]; - UDataSwapFn *swapFn; -} swapFns[]={ - { { 0x52, 0x65, 0x73, 0x42 }, ures_swap }, /* dataFormat="ResB" */ -#if !UCONFIG_NO_LEGACY_CONVERSION - { { 0x63, 0x6e, 0x76, 0x74 }, ucnv_swap }, /* dataFormat="cnvt" */ - { { 0x43, 0x76, 0x41, 0x6c }, ucnv_swapAliases }, /* dataFormat="CvAl" */ -#endif - { { 0x43, 0x6d, 0x6e, 0x44 }, udata_swapPackage }, /* dataFormat="CmnD" */ -#if !UCONFIG_NO_IDNA - { { 0x53, 0x50, 0x52, 0x50 }, usprep_swap }, /* dataFormat="SPRP" */ -#endif - /* insert data formats here, descending by expected frequency of occurrence */ - { { 0x55, 0x50, 0x72, 0x6f }, uprops_swap }, /* dataFormat="UPro" */ - - { { UCASE_FMT_0, UCASE_FMT_1, UCASE_FMT_2, UCASE_FMT_3 }, - ucase_swap }, /* dataFormat="cAsE" */ - -#if !UCONFIG_NO_NORMALIZATION - { { 0x4e, 0x6f, 0x72, 0x6d }, unorm_swap }, /* dataFormat="Norm" */ -#endif -#if !UCONFIG_NO_COLLATION - { { 0x55, 0x43, 0x6f, 0x6c }, ucol_swap }, /* dataFormat="UCol" */ - { { 0x49, 0x6e, 0x76, 0x43 }, ucol_swapInverseUCA },/* dataFormat="InvC" */ -#endif -#if !UCONFIG_NO_BREAK_ITERATION - { { 0x42, 0x72, 0x6b, 0x20 }, ubrk_swap }, /* dataFormat="Brk " */ -#endif - { { 0x70, 0x6e, 0x61, 0x6d }, upname_swap }, /* dataFormat="pnam" */ - { { 0x75, 0x6e, 0x61, 0x6d }, uchar_swapNames } /* dataFormat="unam" */ -}; - -static int32_t -udata_swap(const UDataSwapper *ds, - const void *inData, int32_t length, void *outData, - UErrorCode *pErrorCode) { - char dataFormatChars[4]; - const UDataInfo *pInfo; - int32_t headerSize, i, swappedLength; - - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { - return 0; - } - - /* - * Preflight the header first; checks for illegal arguments, too. - * Do not swap the header right away because the format-specific swapper - * will swap it, get the headerSize again, and also use the header - * information. Otherwise we would have to pass some of the information - * and not be able to use the UDataSwapFn signature. - */ - headerSize=udata_swapDataHeader(ds, inData, -1, NULL, pErrorCode); - - /* - * If we wanted udata_swap() to also handle non-loadable data like a UTrie, - * then we could check here for further known magic values and structures. - */ - if(U_FAILURE(*pErrorCode)) { - return 0; /* the data format was not recognized */ - } - - pInfo=(const UDataInfo *)((const char *)inData+4); - - { - /* convert the data format from ASCII to Unicode to the system charset */ - UChar u[4]={ - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3] - }; - - if(uprv_isInvariantUString(u, 4)) { - u_UCharsToChars(u, dataFormatChars, 4); - } else { - dataFormatChars[0]=dataFormatChars[1]=dataFormatChars[2]=dataFormatChars[3]='?'; - } - } - - /* dispatch to the swap function for the dataFormat */ - for(i=0; i<LENGTHOF(swapFns); ++i) { - if(0==memcmp(swapFns[i].dataFormat, pInfo->dataFormat, 4)) { - swappedLength=swapFns[i].swapFn(ds, inData, length, outData, pErrorCode); - - if(U_FAILURE(*pErrorCode)) { - udata_printError(ds, "udata_swap(): failure swapping data format %02x.%02x.%02x.%02x (\"%c%c%c%c\") - %s\n", - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3], - dataFormatChars[0], dataFormatChars[1], - dataFormatChars[2], dataFormatChars[3], - u_errorName(*pErrorCode)); - } else if(swappedLength<(length-15)) { - /* swapped less than expected */ - udata_printError(ds, "udata_swap() warning: swapped only %d out of %d bytes - data format %02x.%02x.%02x.%02x (\"%c%c%c%c\")\n", - swappedLength, length, - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3], - dataFormatChars[0], dataFormatChars[1], - dataFormatChars[2], dataFormatChars[3], - u_errorName(*pErrorCode)); - } - - return swappedLength; - } - } - - /* the dataFormat was not recognized */ - udata_printError(ds, "udata_swap(): unknown data format %02x.%02x.%02x.%02x (\"%c%c%c%c\")\n", - pInfo->dataFormat[0], pInfo->dataFormat[1], - pInfo->dataFormat[2], pInfo->dataFormat[3], - dataFormatChars[0], dataFormatChars[1], - dataFormatChars[2], dataFormatChars[3]); - - *pErrorCode=U_UNSUPPORTED_ERROR; - return 0; -} - /* swap .dat package files -------------------------------------------------- */ static int32_t @@ -461,7 +331,8 @@ compareToCEntries(const void *context, const void *left, const void *right) { U_CDECL_END U_CFUNC int32_t U_CALLCONV -udata_swapPackage(const UDataSwapper *ds, +udata_swapPackage(const char *inFilename, const char *outFilename, + const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode) { const UDataInfo *pInfo; @@ -573,7 +444,7 @@ udata_swapPackage(const UDataSwapper *ds, } } if((uint32_t)length<offset) { - udata_printError(ds, "udata_swapPackage(): too few bytes (%d after header) for unames.icu\n", + udata_printError(ds, "udata_swapPackage(): too few bytes (%d after header) for a .dat package\n", length); *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; return 0; @@ -704,6 +575,9 @@ udata_swapPackage(const UDataSwapper *ds, table[itemCount-1].length+=(uint32_t)delta; } + /* Save the offset before we sort the TOC. */ + offset=table[0].inOffset; + /* sort the TOC entries */ uprv_sortArray(table, (int32_t)itemCount, (int32_t)sizeof(ToCEntry), compareToCEntries, outBytes, FALSE, pErrorCode); @@ -713,7 +587,6 @@ udata_swapPackage(const UDataSwapper *ds, */ /* assign outOffset values */ - offset=table[0].inOffset; for(i=0; i<itemCount; ++i) { table[i].outOffset=offset; offset+=table[i].length; diff --git a/icuSources/tools/icuswap/icuswap.dsp b/icuSources/tools/icuswap/icuswap.dsp deleted file mode 100644 index c419c7c6..00000000 --- a/icuSources/tools/icuswap/icuswap.dsp +++ /dev/null @@ -1,185 +0,0 @@ -# Microsoft Developer Studio Project File - Name="icuswap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=icuswap - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "icuswap.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "icuswap.mak" CFG="icuswap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "icuswap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "icuswap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "icuswap - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "icuswap - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "icuswap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuin.lib icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\icuswap.exe -InputPath=.\Release\icuswap.exe -InputName=icuswap -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "icuswap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuind.lib icuucd.lib icutud.lib kernel32.lib user32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\icuswap.exe -InputPath=.\Debug\icuswap.exe -InputName=icuswap -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "icuswap - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuin.lib icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\icuswap.exe -InputPath=.\Release\icuswap.exe -InputName=icuswap -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "icuswap - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuind.lib icuucd.lib icutud.lib kernel32.lib user32.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\icuswap.exe -InputPath=.\Debug\icuswap.exe -InputName=icuswap -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "icuswap - Win32 Release" -# Name "icuswap - Win32 Debug" -# Name "icuswap - Win64 Release" -# Name "icuswap - Win64 Debug" -# Begin Source File - -SOURCE=.\icuswap.cpp -# End Source File -# End Target -# End Project diff --git a/icuSources/tools/icuswap/icuswap.vcproj b/icuSources/tools/icuswap/icuswap.vcproj index 030a991d..4d372948 100644 --- a/icuSources/tools/icuswap/icuswap.vcproj +++ b/icuSources/tools/icuswap/icuswap.vcproj @@ -3,6 +3,7 @@ ProjectType="Visual C++" Version="7.10" Name="icuswap" + ProjectGUID="{39690C2A-AD89-45E4-893A-899496B85785}" SccProjectName="" SccLocalPath=""> <Platforms> @@ -20,10 +21,9 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" @@ -83,11 +83,11 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" PrecompiledHeaderFile=".\Debug/icuswap.pch" AssemblerListingLocation=".\Debug/" @@ -139,21 +139,9 @@ <References> </References> <Files> - <Filter - Name="Source Files" - Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> - <File - RelativePath=".\icuswap.cpp"> - </File> - </Filter> - <Filter - Name="Header Files" - Filter="h;hpp;hxx;hm;inl"> - </Filter> - <Filter - Name="Resource Files" - Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> - </Filter> + <File + RelativePath=".\icuswap.cpp"> + </File> </Files> <Globals> </Globals> diff --git a/icuSources/tools/makeconv/Makefile.in b/icuSources/tools/makeconv/Makefile.in index d7750c49..91e2124d 100644 --- a/icuSources/tools/makeconv/Makefile.in +++ b/icuSources/tools/makeconv/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/makeconv -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Stephen F. Booth @@ -11,38 +11,34 @@ top_builddir = ../.. include $(top_builddir)/icudefs.mk -## +## Build directory information +subdir = tools/makeconv TARGET_STUB_NAME = makeconv SECTION = 1 -MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) - -ALL_MAN_FILES = $(MANX_FILES) - - -## Build directory information -subdir = tools/makeconv +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(ALL_MAN_FILES) $(DEPS) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = makeconv.o ucnvstat.o genmbcs.o gencnvex.o DEPS = $(OBJECTS:.o=.d) - ## List of phony targets -.PHONY : all all-local install install-local install-man clean clean-local \ - distclean distclean-local dist dist-local check \ - check-local +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -55,17 +51,18 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) -dist-local: +install-man: $(MAN_FILES) + $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) + $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) -rebuild: $(TARGET) - -$(RMV) - $(MAKE) all-local + +dist-local: clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) @@ -76,18 +73,13 @@ distclean-local: clean-local check-local: all-local - Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -$(TARGET): $(OBJECTS) +$(TARGET) : $(OBJECTS) $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) -install-man: install-manx -install-manx: $(MANX_FILES) - $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) - $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) %.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ @@ -101,3 +93,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/makeconv/gencnvex.c b/icuSources/tools/makeconv/gencnvex.c index 0ae6d4a1..c5fc7d46 100644 --- a/icuSources/tools/makeconv/gencnvex.c +++ b/icuSources/tools/makeconv/gencnvex.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -29,6 +29,7 @@ #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + static void CnvExtClose(NewConverter *cnvData); @@ -1057,3 +1058,4 @@ CnvExtAddTable(NewConverter *cnvData, UCMTable *table, UConverterStaticData *sta makeToUTable(extData, table) && makeFromUTable(extData, table); } + diff --git a/icuSources/tools/makeconv/genmbcs.c b/icuSources/tools/makeconv/genmbcs.c index 41d01011..b4596ad9 100644 --- a/icuSources/tools/makeconv/genmbcs.c +++ b/icuSources/tools/makeconv/genmbcs.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -25,6 +25,7 @@ #include "makeconv.h" #include "genmbcs.h" + typedef struct MBCSData { NewConverter newConverter; @@ -1098,3 +1099,4 @@ MBCSWrite(NewConverter *cnvData, const UConverterStaticData *staticData, /* return the number of bytes that should have been written */ return header.offsetFromUBytes+header.fromUBytesLength; } + diff --git a/icuSources/tools/makeconv/genmbcs.h b/icuSources/tools/makeconv/genmbcs.h index 93132026..0eb5b860 100644 --- a/icuSources/tools/makeconv/genmbcs.h +++ b/icuSources/tools/makeconv/genmbcs.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -42,4 +42,4 @@ MBCSOpen(UCMFile *ucm); U_CFUNC NewConverter * CnvExtOpen(UCMFile *ucm); -#endif +#endif /* __GENMBCS_H__ */ diff --git a/icuSources/tools/makeconv/makeconv.c b/icuSources/tools/makeconv/makeconv.c index f3b64430..1bd4bec3 100644 --- a/icuSources/tools/makeconv/makeconv.c +++ b/icuSources/tools/makeconv/makeconv.c @@ -1,7 +1,7 @@ /* ******************************************************************************** * - * Copyright (C) 1998-2004, International Business Machines + * Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************** @@ -17,7 +17,6 @@ #include <stdio.h> #include "unicode/putil.h" -#include "ucnv_io.h" #include "unicode/ucnv_err.h" #include "ucnv_bld.h" #include "ucnv_imp.h" @@ -37,6 +36,7 @@ #define DEBUG 0 + typedef struct ConvData { UCMFile *ucm; NewConverter *cnvData, *extData; @@ -77,7 +77,6 @@ extern const UConverterStaticData * ucnv_converterStaticData[UCNV_NUMBER_OF_SUPP * Global - verbosity */ UBool VERBOSE = FALSE; -UBool TOUCHFILE = FALSE; static void createConverter(ConvData *data, const char* converterName, UErrorCode *pErrorCode); @@ -172,8 +171,6 @@ static UOption options[]={ UOPTION_VERSION, /* 3 */ UOPTION_DESTDIR, /* 4 */ UOPTION_VERBOSE, /* 5 */ - UOPTION_PACKAGE_NAME, /* 6 */ - UOPTION_DEF( "touchfile", 't', UOPT_NO_ARG) /* 7 */ }; int main(int argc, char* argv[]) @@ -181,9 +178,7 @@ int main(int argc, char* argv[]) ConvData data; UErrorCode err = U_ZERO_ERROR, localError; char outFileName[UCNV_MAX_FULL_FILE_NAME_LENGTH]; - char touchFileName[UCNV_MAX_FULL_FILE_NAME_LENGTH]; const char* destdir, *arg; - const char *pkgName = NULL; size_t destdirlen; char* dot = NULL, *outBasename; char cnvName[UCNV_MAX_FULL_FILE_NAME_LENGTH]; @@ -222,48 +217,16 @@ int main(int argc, char* argv[]) "\t-d or --destdir destination directory, followed by the path\n" "\t-v or --verbose Turn on verbose output\n", argv[0]); - fprintf(stderr, - "\t-p or --pkgname sets the 'package' name for output files.\n" - "\t If name is ICUDATA, then the default icu package\n" - "\t name will be used.\n" - "\t-t or --touchfile Generate additional small file without packagename, for nmake\n"); return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; } if(options[3].doesOccur) { - fprintf(stderr,"makeconv version %hu.%hu, ICU tool to read .ucm codepage mapping files and write .cnv files\n", + fprintf(stderr,"makeconv version %hu.%hu, ICU tool to read .ucm codepage mapping files and write .cnv files\n", dataInfo.formatVersion[0], dataInfo.formatVersion[1]); - fprintf(stderr, "Copyright (C) 1998-2000, International Business Machines\n"); - fprintf(stderr,"Corporation and others. All Rights Reserved.\n"); + fprintf(stderr, U_COPYRIGHT_STRING "\n"); exit(0); } - TOUCHFILE = options[7].doesOccur; - - if(!options[6].doesOccur) - { - pkgName=NULL; - } - else - { - pkgName =options[6].value; - if(!strcmp(pkgName, "ICUDATA")) - { - pkgName = U_ICUDATA_NAME; - } - if(pkgName[0] == 0) - { - pkgName = NULL; - - if(TOUCHFILE) - { - fprintf(stderr, "%s: Don't use touchfile option with an empty packagename.\n", - argv[0]); - exit(1); - } - } - } - /* get the options values */ haveCopyright = options[2].doesOccur; destdir = options[4].value; @@ -324,21 +287,6 @@ int main(int argc, char* argv[]) /* the basename without extension is the converter name */ uprv_strcpy(cnvName, outBasename); - if(TOUCHFILE) - { - uprv_strcpy(touchFileName, outBasename); - uprv_strcat(touchFileName, ".cnv"); - } - - if(pkgName != NULL) - { - /* changes both basename and filename */ - uprv_strcpy(outBasename, pkgName); - uprv_strcat(outBasename, "_"); - uprv_strcat(outBasename, cnvName); - } - - /*Adds the target extension*/ uprv_strcat(outBasename, CONVERTER_FILE_EXTENSION); @@ -382,40 +330,10 @@ int main(int argc, char* argv[]) } } - if(pkgName == NULL) - { - uprv_strcpy(cnvNameWithPkg, cnvName); - } - else - { - uprv_strcpy(cnvNameWithPkg, pkgName); - uprv_strcat(cnvNameWithPkg, "_"); - uprv_strcat(cnvNameWithPkg, cnvName); - } + uprv_strcpy(cnvNameWithPkg, cnvName); localError = U_ZERO_ERROR; writeConverterData(&data, cnvNameWithPkg, destdir, &localError); - if(TOUCHFILE) - { - FileStream *q; - char msg[1024]; - - sprintf(msg, "This empty file tells nmake that %s in package %s has been updated.\n", - cnvName, pkgName); - - q = T_FileStream_open(touchFileName, "w"); - if(q == NULL) - { - fprintf(stderr, "Error writing touchfile \"%s\"\n", touchFileName); - localError = U_FILE_ACCESS_ERROR; - } - - else - { - T_FileStream_write(q, msg, (int32_t)uprv_strlen(msg)); - T_FileStream_close(q); - } - } if(U_FAILURE(localError)) { diff --git a/icuSources/tools/makeconv/makeconv.dsp b/icuSources/tools/makeconv/makeconv.dsp deleted file mode 100644 index 7ac61a5f..00000000 --- a/icuSources/tools/makeconv/makeconv.dsp +++ /dev/null @@ -1,218 +0,0 @@ -# Microsoft Developer Studio Project File - Name="makeconv" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=makeconv - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "makeconv.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "makeconv.mak" CFG="makeconv - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "makeconv - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "makeconv - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "makeconv - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "makeconv - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "makeconv - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\makeconv.exe -InputPath=.\Release\makeconv.exe -InputName=makeconv -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "makeconv - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\makeconv.exe -InputPath=.\Debug\makeconv.exe -InputName=makeconv -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "makeconv - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\makeconv.exe -InputPath=.\Release\makeconv.exe -InputName=makeconv -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "makeconv - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\include" /I "..\..\..\source\common" /I "..\toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\makeconv.exe -InputPath=.\Debug\makeconv.exe -InputName=makeconv -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "makeconv - Win32 Release" -# Name "makeconv - Win32 Debug" -# Name "makeconv - Win64 Release" -# Name "makeconv - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\gencnvex.c -# End Source File -# Begin Source File - -SOURCE=.\genmbcs.c -# End Source File -# Begin Source File - -SOURCE=.\makeconv.c -# End Source File -# Begin Source File - -SOURCE=.\ucnvstat.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\genmbcs.h -# End Source File -# Begin Source File - -SOURCE=.\makeconv.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/makeconv/makeconv.h b/icuSources/tools/makeconv/makeconv.h index bb6c5004..0fa0fb2d 100644 --- a/icuSources/tools/makeconv/makeconv.h +++ b/icuSources/tools/makeconv/makeconv.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2003, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -54,4 +54,4 @@ struct NewConverter { UNewDataMemory *pData, int32_t tableType); }; -#endif +#endif /* __MAKECONV_H__ */ diff --git a/icuSources/tools/makeconv/makeconv.vcproj b/icuSources/tools/makeconv/makeconv.vcproj index 614528a6..cfb95afd 100644 --- a/icuSources/tools/makeconv/makeconv.vcproj +++ b/icuSources/tools/makeconv/makeconv.vcproj @@ -22,12 +22,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/makeconv.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -84,12 +85,13 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\..\include,..\..\..\source\common,..\toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="..\..\..\include;..\..\common;..\toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="TRUE" RuntimeLibrary="2" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/makeconv.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" diff --git a/icuSources/tools/makeconv/misc/canonucm.c b/icuSources/tools/makeconv/misc/canonucm.c deleted file mode 100644 index a37f8ddf..00000000 --- a/icuSources/tools/makeconv/misc/canonucm.c +++ /dev/null @@ -1,29 +0,0 @@ -/* -******************************************************************************* -* -* Copyright (C) 2000, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: canonucm.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000nov08 -* created by: Markus W. Scherer -* -* This tool reads a .ucm file and canonicalizes it: In the CHARMAP section, -* - sort by Unicode code points -* - print all code points in uppercase hexadecimal -* - print all Unicode code points with 4, 5, or 6 digits as needed -* - remove the comments -* - remove unnecessary spaces -* -* To compile, just call a C compiler/linker with this source file. -* On Windows: cl canonucm.c -*/ - -#error File moved to charset/source/ucmtools/ on 2002-nov-06 - -/* see http://oss.software.ibm.com/cvs/icu/charset/source/ucmtools/ */ diff --git a/icuSources/tools/makeconv/misc/rptp2ucm.c b/icuSources/tools/makeconv/misc/rptp2ucm.c deleted file mode 100644 index 7ec83209..00000000 --- a/icuSources/tools/makeconv/misc/rptp2ucm.c +++ /dev/null @@ -1,31 +0,0 @@ -/* -******************************************************************************* -* -* Copyright (C) 2000-2001, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: rptp2ucm.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2001feb16 -* created by: Markus W. Scherer -* -* This tool reads two CDRA conversion table files (RPMAP & TPMAP or RXMAP and TXMAP) and -* generates a canonicalized ICU .ucm file from them. -* If the RPMAP/RXMAP file does not contain a comment line with the substitution character, -* then this tool also attempts to read the header of the corresponding UPMAP/UXMAP file -* to extract subchar and subchar1. -* -* R*MAP: Unicode->codepage -* T*MAP: codepage->Unicode -* -* To compile, just call a C compiler/linker with this source file. -* On Windows: cl rptp2ucm.c -*/ - -#error File moved to charset/source/ucmtools/ on 2002-nov-06 - -/* see http://oss.software.ibm.com/cvs/icu/charset/source/ucmtools/ */ diff --git a/icuSources/tools/makeconv/misc/ucmmerge.c b/icuSources/tools/makeconv/misc/ucmmerge.c deleted file mode 100644 index a8035bba..00000000 --- a/icuSources/tools/makeconv/misc/ucmmerge.c +++ /dev/null @@ -1,26 +0,0 @@ -/* -******************************************************************************* -* -* Copyright (C) 2000, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: ucmmerge.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000nov09 -* created by: Markus W. Scherer -* -* This tool reads two .ucm files and merges them. -* Merging the files allows to update the ICU data while keeping ICU-specific -* changes like "MBCS"->"EBCDIC_STATEFUL" or adding <icu:state>. -* -* To compile, just call a C compiler/linker with this source file. -* On Windows: cl ucmmerge.c -*/ - -#error File moved to charset/source/ucmtools/ on 2002-nov-06 - -/* see http://oss.software.ibm.com/cvs/icu/charset/source/ucmtools/ */ diff --git a/icuSources/tools/makeconv/misc/ucmstrip.c b/icuSources/tools/makeconv/misc/ucmstrip.c deleted file mode 100644 index 751af780..00000000 --- a/icuSources/tools/makeconv/misc/ucmstrip.c +++ /dev/null @@ -1,28 +0,0 @@ -/* -******************************************************************************* -* -* Copyright (C) 2000, International Business Machines -* Corporation and others. All Rights Reserved. -* -******************************************************************************* -* file name: ucmstrip.c -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2000nov09 -* created by: Markus W. Scherer -* -* This tool reads a .ucm file, expects there to be a line in the header with -* "File created on..." and removes the lines before and including that. -* Then it removes lines with <icu:state> and <uconv_class> and <code_set_name>. -* This helps comparing .ucm files with different copyright statements and -* different state specifications. -* -* To compile, just call a C compiler/linker with this source file. -* On Windows: cl ucmstrip.c -*/ - -#error File moved to charset/source/ucmtools/ on 2002-nov-06 - -/* see http://oss.software.ibm.com/cvs/icu/charset/source/ucmtools/ */ diff --git a/icuSources/tools/makeconv/ucnvstat.c b/icuSources/tools/makeconv/ucnvstat.c index 2ba8ec5a..0dfdc956 100644 --- a/icuSources/tools/makeconv/ucnvstat.c +++ b/icuSources/tools/makeconv/ucnvstat.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * - * Copyright (C) 1998-2001, International Business Machines + * Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -64,3 +64,4 @@ const UConverterStaticData *ucnv_converterStaticData[UCNV_NUMBER_OF_SUPPORTED_CO NULL/*ISO2022*/, /* LMBCS */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; + diff --git a/icuSources/tools/memcheck/ICUMemCheck.pl b/icuSources/tools/memcheck/ICUMemCheck.pl new file mode 100644 index 00000000..ea9c1486 --- /dev/null +++ b/icuSources/tools/memcheck/ICUMemCheck.pl @@ -0,0 +1,68 @@ +# *********************************************************************** +# * COPYRIGHT: +# * Copyright (c) 2004-2006, International Business Machines Corporation +# * and others. All Rights Reserved. +# *********************************************************************** +# +# This perl script checks for correct memory function usage in ICU library code. +# It works with Linux builds of ICU using gcc. +# +# To run it, +# 1. Build ICU +# 2. cd icu/source +# 3. perl ICUMemCheck.pl +# +# All object files containing direct references to C or C++ runtime library memory +# functions will be listed in the output. +# +# For ICU 3.6, the expected output is +# common/uniset.o U operator delete(void*) +# common/unifilt.o U operator delete(void*) +# common/cmemory.o U malloc +# common/cmemory.o U free +# i18n/strrepl.o U operator delete(void*) +# layout/LEFontInstance.o U operator delete(void*) +# layout/LEGlyphStorage.o U operator delete(void*) +# layout/LayoutEngine.o U operator delete(void*) +# +# cmemory.c Expected failures from uprv_malloc, uprv_free implementation. +# uniset.cpp Fails because of SymbolTable::~SymbolTable() +# unifilt.cpp Fails because of UnicodeMatcher::~UnicodeMatcher() +# strrepl.cpp Fails because of UnicodeReplacer::~UnicodeReplacer() +# LayoutEngine.cpp Fails because of LEGlyphFilter::~LEGlyphFilter() +# LEGlyphStorage.cpp Fails because of LEInsertionCallback::~LEInsertionCallback() +# LEFontInstance.cpp Fails because of LECharMapper::~LECharMapper +# +# To verify that no additional problems exist in the .cpp files, #ifdef out the +# offending destructors, rebuild icu, and re-run the tool. The problems should +# be gone. +# +# The problem destructors all are for mix-in style interface classes. +# These classes can not derive from UObject or UMemory because of multiple-inheritance +# problems, so they don't get the ICU memory functions. The delete code +# in the destructors will never be called because stand-alone instances of +# the classes cannot exist. +# +$fileNames = `find common i18n layout io -name "*.o" -print`; +foreach $f (split('\n', $fileNames)) { + $symbols = `nm -u -C $f`; + if ($symbols =~ /U +operator delete\(void\*\)/) { + print "$f $&\n"; + } + if ($symbols =~ /U +operator delete\[\]\(void\*\)/) { + print "$f $&\n"; + } + if ($symbols =~ /U +operator new\(unsigned int\)/) { + print "$f $&\n"; + } + if ($symbols =~ /U +operator new\[\]\(unsigned int\)/) { + print "$f $&\n"; + } + if ($symbols =~ /U +malloc.*/) { + print "$f $&\n"; + } + if ($symbols =~ /U +free.*/) { + print "$f $&\n"; + } + +} diff --git a/icuSources/tools/pkgdata/Makefile.in b/icuSources/tools/pkgdata/Makefile.in index a2b3463f..9818e5df 100644 --- a/icuSources/tools/pkgdata/Makefile.in +++ b/icuSources/tools/pkgdata/Makefile.in @@ -1,5 +1,5 @@ ## Makefile.in for ICU - tools/pkgdata -## Copyright (c) 1999-2004, International Business Machines Corporation and +## Copyright (c) 1999-2005, International Business Machines Corporation and ## others. All Rights Reserved. ## Steven R. Loomis @@ -14,18 +14,14 @@ include $(top_builddir)/icudefs.mk ## Build directory information subdir = tools/pkgdata -## - TARGET_STUB_NAME = pkgdata SECTION = 1 -MANX_FILES = $(TARGET_STUB_NAME).$(SECTION) - -ALL_MAN_FILES = $(MANX_FILES) +MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) ## Extra files to remove for 'make clean' -CLEANFILES = *~ $(DEPS) $(ALL_MAN_FILES) +CLEANFILES = *~ $(DEPS) $(MAN_FILES) ifneq ($(PKGDATA_DEFS),) DEFS += $(PKGDATA_DEFS) @@ -34,9 +30,12 @@ endif ## Target information TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(srcdir)/../toolutil DEFS += -DUDATA_SO_SUFFIX=\".$(SO)\" -DSTATIC_O=\"$(STATIC_O)\" -LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) +LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) OBJECTS = pkgdata.o pkgtypes.o make.o dllmode.o cmnmode.o filemode.o sttcmode.o winmode.o @@ -44,8 +43,7 @@ DEPS = $(OBJECTS:.o=.d) ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check \ -check-local install-man install-manx +distclean distclean-local dist dist-local check check-local install-man ## Clear suffix list .SUFFIXES : @@ -58,21 +56,16 @@ distclean : distclean-local dist: dist-local check: all check-local -all-local: $(TARGET) $(ALL_MAN_FILES) +all-local: $(TARGET) $(MAN_FILES) install-local: all-local install-man $(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(INSTALL) $(TARGET) $(DESTDIR)$(bindir) -# man page -install-man: install-manx -install-manx: $(MANX_FILES) +install-man: $(MAN_FILES) $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) -%.$(SECTION): $(srcdir)/%.$(SECTION).in - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status dist-local: @@ -89,12 +82,14 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status +$(TARGET) : $(OBJECTS) + $(LINK.c) $(OUTOPT)$@ $^ $(LIBS) + +%.$(SECTION): $(srcdir)/%.$(SECTION).in cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -$(TARGET) : $(OBJECTS) - $(LINK.c) $(OUTOPT)$@ $^ $(LIBS) ifeq (,$(MAKECMDGOALS)) -include $(DEPS) @@ -103,3 +98,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/tools/pkgdata/cmnmode.c b/icuSources/tools/pkgdata/cmnmode.c index 2104e9e7..05639d14 100644 --- a/icuSources/tools/pkgdata/cmnmode.c +++ b/icuSources/tools/pkgdata/cmnmode.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -76,13 +76,8 @@ void pkg_mode_common(UPKGOptions *o, FileStream *makefile, UErrorCode *status) sprintf(tmp, "all: $(TARGET)\n\n"); T_FileStream_writeLine(makefile, tmp); - if(!o->embed) { T_FileStream_writeLine(makefile, "$(TARGET): $(CMNLIST) $(DATAFILEPATHS)\n" "\t$(INVOKE) $(GENCMN) -n $(CNAME) -c -s $(SRCDIR) -d $(TARGETDIR) 0 $(CMNLIST)\n\n"); - } else { - T_FileStream_writeLine(makefile, "$(TARGET): $(CMNLIST) $(DATAFILEPATHS)\n" - "\t$(INVOKE) $(GENCMN) -n $(CNAME) -c -d $(TARGETDIR) 0 -E $(CMNLIST)\n\n"); - } if(o->hadStdin == FALSE) { /* shortcut */ T_FileStream_writeLine(makefile, "$(CMNLIST): $(LISTFILES)\n" diff --git a/icuSources/tools/pkgdata/dllmode.c b/icuSources/tools/pkgdata/dllmode.c index f3b70432..9aac5a56 100644 --- a/icuSources/tools/pkgdata/dllmode.c +++ b/icuSources/tools/pkgdata/dllmode.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -67,6 +67,8 @@ void pkg_mode_dll(UPKGOptions *o, FileStream *makefile, UErrorCode *status) sprintf(tmp, "# File to make:\nBATCH_TARGET=\"//'${LOADMOD}(IXMI" U_ICU_VERSION_SHORT "TE)'\"\n\n"); else if (uprv_strcmp(o->libName, U_LIBICUDATA_NAME"_stub") == 0) sprintf(tmp, "# File to make:\nBATCH_TARGET=\"//'${LOADMOD}(IXMI" U_ICU_VERSION_SHORT "D1)'\"\n\n"); + else + sprintf(tmp, "\n"); T_FileStream_writeLine(makefile, tmp); #endif @@ -151,7 +153,10 @@ void pkg_mode_dll(UPKGOptions *o, FileStream *makefile, UErrorCode *status) "\t echo $$file >> $@; \\\n" "\tdone;\n\n"); } - + + sprintf(tmp, "TOCSYM= %s_dat \n\n", o->entryName); /* entrypoint not always shortname! */ + T_FileStream_writeLine(makefile, tmp); + pkg_mak_writeAssemblyHeader(makefile, o); sprintf(tmp,"$(TEMP_DIR)/$(NAME)_dat.o : $(TEMP_DIR)/$(NAME)_dat.c\n" @@ -160,13 +165,8 @@ void pkg_mode_dll(UPKGOptions *o, FileStream *makefile, UErrorCode *status) T_FileStream_writeLine(makefile, "# 'TOCOBJ' contains C Table of Contents objects [if any]\n"); - if(!o->embed) { - sprintf(tmp, "$(TEMP_DIR)/$(NAME)_dat.c: $(CMNLIST)\n" + sprintf(tmp, "$(TEMP_DIR)/$(NAME)_dat.c: $(CMNLIST)\n" "\t$(INVOKE) $(GENCMN) -e $(ENTRYPOINT) -n $(NAME) -S -s $(SRCDIR) -d $(TEMP_DIR) 0 $(CMNLIST)\n\n"); - } else { - sprintf(tmp, "$(TEMP_DIR)/$(NAME)_dat.c: $(CMNLIST)\n" - "\t$(INVOKE) $(GENCMN) -e $(ENTRYPOINT) -n $(NAME) -S -E -d $(TEMP_DIR) 0 $(CMNLIST)\n\n"); - } T_FileStream_writeLine(makefile, tmp); sprintf(tmp, "TOCOBJ= $(NAME)_dat%s \n\n", OBJ_SUFFIX); @@ -184,9 +184,6 @@ void pkg_mode_dll(UPKGOptions *o, FileStream *makefile, UErrorCode *status) T_FileStream_writeLine(makefile, tmp); #endif - sprintf(tmp, "TOCSYM= %s_dat \n\n", o->entryName); /* entrypoint not always shortname! */ - T_FileStream_writeLine(makefile, tmp); - T_FileStream_writeLine(makefile, "BASE_OBJECTS= $(TOCOBJ) "); #ifdef OS400 T_FileStream_writeLine(makefile, "$(ALLDATAOBJ) "); @@ -221,9 +218,16 @@ void pkg_mode_dll(UPKGOptions *o, FileStream *makefile, UErrorCode *status) "\t$(SHLIB.c) -o $@ $(OBJECTS) $(DLL_LDFLAGS)\n\n"); #endif +#ifdef U_AIX + T_FileStream_writeLine(makefile, "$(TARGETDIR)/$(FINAL_SO_TARGET): $(OBJECTS) $(LISTFILES) $(DLL_DEPS)\n" + "\t$(SHLIB.c) -o $(FINAL_SO_TARGET:.$(SO)=.$(SOBJ)) $(OBJECTS) $(DLL_LDFLAGS)\n" + "\t$(AR) $(ARFLAGS) $@ $(FINAL_SO_TARGET:.$(SO)=.$(SOBJ))\n" + "\t-$(AR) vt $@\n\n"); +#else T_FileStream_writeLine(makefile, "$(TARGETDIR)/$(FINAL_SO_TARGET): $(OBJECTS) $(LISTFILES) $(DLL_DEPS)\n" "\t$(SHLIB.c) -o $@ $(OBJECTS) $(DLL_LDFLAGS)\n" "\t-ls -l $@\n\n"); +#endif #ifdef OS390 /* diff --git a/icuSources/tools/pkgdata/filemode.c b/icuSources/tools/pkgdata/filemode.c index 0bf94c77..6710a83c 100644 --- a/icuSources/tools/pkgdata/filemode.c +++ b/icuSources/tools/pkgdata/filemode.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -51,143 +51,141 @@ install: all */ - +#ifdef U_MAKE_IS_NMAKE +#define DEPENDENT_FILE_RULE "$?" +#else +#define DEPENDENT_FILE_RULE "$<" +#endif void pkg_mode_files(UPKGOptions *o, FileStream *makefile, UErrorCode *status) { - char tmp[1024], tmp2[1024], srcPath[1024]; - char stanza[3072]; + char tmp[1024], tmp2[1024], srcPath[1024]; + char stanza[3072]; - CharList *tail = NULL, *infiles = NULL; + CharList *tail = NULL, *infiles = NULL; - CharList *copyFilesLeft = NULL; /* left hand side of the copy rule*/ - CharList *copyFilesRight = NULL; /* rhs "" "" */ - CharList *copyFilesInstall = NULL; + CharList *copyFilesLeft = NULL; /* left hand side of the copy rule*/ + CharList *copyFilesRight = NULL; /* rhs "" "" */ + CharList *copyFilesInstall = NULL; - CharList *copyFilesLeftTail = NULL; - CharList *copyFilesRightTail = NULL; - CharList *copyFilesInstallTail = NULL; + CharList *copyFilesLeftTail = NULL; + CharList *copyFilesRightTail = NULL; + CharList *copyFilesInstallTail = NULL; - CharList *copyDirs = NULL; /* list of dirs to create for copying */ - CharList *installDirs = NULL; /* list of dirs to create for installation */ + CharList *copyDirs = NULL; /* list of dirs to create for copying */ + CharList *installDirs = NULL; /* list of dirs to create for installation */ -/* CharList *copyCommands = NULL;*/ + /* CharList *copyCommands = NULL;*/ - const char *baseName; + const char *baseName; - T_FileStream_writeLine(makefile, "\n.PHONY: $(NAME) all install clean\n\nall: $(NAME)\n\n"); +#ifndef U_MAKE_IS_NMAKE + T_FileStream_writeLine(makefile, "\n.PHONY: $(NAME) all install clean\n"); +#endif + T_FileStream_writeLine(makefile, "\nall: $(NAME)\n\n"); - if(o->embed) { - infiles = o->filePaths; - } else { infiles = o->files; /* raw files - no paths other than tree paths */ - } - - /* Dont' copy files already in tmp */ - for(;infiles;infiles = infiles->next) - { - uprv_strcpy(tmp, o->targetDir); - uprv_strcat(tmp, U_FILE_SEP_STRING); - if(o->embed) { - baseName = findBasename(infiles->str); - uprv_strcpy(srcPath, baseName); - } else { - baseName = infiles->str; - uprv_strcat(tmp, o->shortName); - uprv_strcat(tmp, U_FILE_SEP_STRING); - uprv_strcpy(srcPath, "$(SRCDIR)/"); - uprv_strcat(srcPath, infiles->str); - } - uprv_strcat(tmp, baseName); - - copyDirs = pkg_appendUniqueDirToList(copyDirs, NULL, tmp); - o->outFiles = pkg_appendToList(o->outFiles, &tail, uprv_strdup(tmp)); - - if(strcmp(tmp, infiles->str) == 0) - { - /* fprintf(stderr, "### NOT copying: %s\n", tmp); */ - /* no copy needed.. */ - } else { - sprintf(stanza, "%s: %s\n\t$(INSTALL_DATA) $< $@\n", tmp, srcPath); - T_FileStream_writeLine(makefile, stanza); + /* Dont' copy files already in tmp */ + for(;infiles;infiles = infiles->next) + { + uprv_strcpy(tmp, o->targetDir); + uprv_strcat(tmp, U_FILE_SEP_STRING); + baseName = infiles->str; + uprv_strcat(tmp, o->shortName); + uprv_strcat(tmp, U_FILE_SEP_STRING); + uprv_strcpy(srcPath, "$(SRCDIR)/"); + uprv_strcat(srcPath, infiles->str); + uprv_strcat(tmp, baseName); + + copyDirs = pkg_appendUniqueDirToList(copyDirs, NULL, tmp); + + o->outFiles = pkg_appendToList(o->outFiles, &tail, uprv_strdup(tmp)); + + if(strcmp(tmp, infiles->str) == 0) + { + /* fprintf(stderr, "### NOT copying: %s\n", tmp); */ + /* no copy needed.. */ + } else { + sprintf(stanza, "%s: %s\n\t$(INSTALL_DATA) "DEPENDENT_FILE_RULE" $@\n", tmp, srcPath); + convertToNativePathSeparators(stanza); + T_FileStream_writeLine(makefile, stanza); + } + + uprv_strcpy(tmp2, "$(INSTALLTO)" U_FILE_SEP_STRING); + uprv_strcat(tmp2, o->shortName); + uprv_strcat(tmp2, U_FILE_SEP_STRING); + uprv_strcat(tmp2, baseName); + + installDirs = pkg_appendUniqueDirToList(installDirs, NULL, tmp2); + + if(strcmp(tmp2, infiles->str) == 0) { + /* fprintf(stderr, "### NOT copying: %s\n", tmp2); */ + /* no copy needed.. */ + } else { + sprintf(stanza, "%s: %s\n\t$(INSTALL_DATA) "DEPENDENT_FILE_RULE" $@\n", tmp2, tmp); + convertToNativePathSeparators(stanza); + T_FileStream_writeLine(makefile, stanza); + + /* left hand side: target path, target name */ + copyFilesLeft = pkg_appendToList(copyFilesLeft, ©FilesLeftTail, uprv_strdup(tmp)); + + /* fprintf(stderr, "##### COPY %s from %s\n", tmp, infiles->str); */ + /* rhs: source path */ + copyFilesRight = pkg_appendToList(copyFilesRight, ©FilesRightTail, uprv_strdup(infiles->str)); + + /* install: installed path */ + copyFilesInstall = pkg_appendToList(copyFilesInstall, ©FilesInstallTail, uprv_strdup(tmp2)); + } } - uprv_strcpy(tmp2, "$(INSTALLTO)" U_FILE_SEP_STRING); - if(!o->embed) { - uprv_strcat(tmp2, o->shortName); - uprv_strcat(tmp2, U_FILE_SEP_STRING); + if(o->nooutput || o->verbose) { + CharList *i; + fprintf(stdout, "# Output files: "); + for(i = o->outFiles; i; i=i->next) { + printf("%s ", i->str); + } + printf("\n"); } - uprv_strcat(tmp2, baseName); - - installDirs = pkg_appendUniqueDirToList(installDirs, NULL, tmp2); - - if(strcmp(tmp2, infiles->str) == 0) { - /* fprintf(stderr, "### NOT copying: %s\n", tmp2); */ - /* no copy needed.. */ - } else { - sprintf(stanza, "%s: %s\n\t$(INSTALL_DATA) $< $@\n", tmp2, tmp); - T_FileStream_writeLine(makefile, stanza); - - /* left hand side: target path, target name */ - copyFilesLeft = pkg_appendToList(copyFilesLeft, ©FilesLeftTail, uprv_strdup(tmp)); - - /* fprintf(stderr, "##### COPY %s from %s\n", tmp, infiles->str); */ - /* rhs: source path */ - copyFilesRight = pkg_appendToList(copyFilesRight, ©FilesRightTail, uprv_strdup(infiles->str)); - - /* install: installed path */ - copyFilesInstall = pkg_appendToList(copyFilesInstall, ©FilesInstallTail, uprv_strdup(tmp2)); - } - } - - if(o->nooutput || o->verbose) { - CharList *i; - fprintf(stdout, "# Output files: "); - for(i = o->outFiles; i; i=i->next) { - printf("%s ", i->str); - } - printf("\n"); - } - if(o->nooutput) { - *status = U_ZERO_ERROR; - return; - } + if(o->nooutput) { + *status = U_ZERO_ERROR; + return; + } - /* these are also the files to delete */ - T_FileStream_writeLine(makefile, "COPIEDDEST= "); - pkg_writeCharListWrap(makefile, copyFilesLeft, " ", " \\\n", 0); - T_FileStream_writeLine(makefile, "\n\n"); + /* these are also the files to delete */ + T_FileStream_writeLine(makefile, "COPIEDDEST= "); + pkg_writeCharListWrap(makefile, copyFilesLeft, " ", " \\\n", 0); + T_FileStream_writeLine(makefile, "\n\n"); - T_FileStream_writeLine(makefile, "INSTALLEDDEST= "); - pkg_writeCharListWrap(makefile, copyFilesInstall, " ", " \\\n", 0); - T_FileStream_writeLine(makefile, "\n\n"); + T_FileStream_writeLine(makefile, "INSTALLEDDEST= "); + pkg_writeCharListWrap(makefile, copyFilesInstall, " ", " \\\n", 0); + T_FileStream_writeLine(makefile, "\n\n"); - T_FileStream_writeLine(makefile, "COPYDIRS= "); - pkg_writeCharListWrap(makefile, copyDirs, " ", " \\\n", 0); - T_FileStream_writeLine(makefile, "\n\n"); + T_FileStream_writeLine(makefile, "COPYDIRS= "); + pkg_writeCharListWrap(makefile, copyDirs, " ", " \\\n", 0); + T_FileStream_writeLine(makefile, "\n\n"); - T_FileStream_writeLine(makefile, "INSTALLDIRS= "); - pkg_writeCharListWrap(makefile, installDirs, " ", " \\\n", 0); - T_FileStream_writeLine(makefile, "\n\n"); + T_FileStream_writeLine(makefile, "INSTALLDIRS= "); + pkg_writeCharListWrap(makefile, installDirs, " ", " \\\n", 0); + T_FileStream_writeLine(makefile, "\n\n"); - if(copyFilesRight != NULL) - { - T_FileStream_writeLine(makefile, "$(NAME): copy-dirs $(COPIEDDEST)\n\n"); + if(copyFilesRight != NULL) + { + T_FileStream_writeLine(makefile, "$(NAME): copy-dirs $(COPIEDDEST)\n\n"); - T_FileStream_writeLine(makefile, "clean:\n\t-$(RMV) $(COPIEDDEST) $(MAKEFILE)"); - T_FileStream_writeLine(makefile, "\n\n"); + T_FileStream_writeLine(makefile, "clean:\n\t-$(RMV) $(COPIEDDEST) $(MAKEFILE)"); + T_FileStream_writeLine(makefile, "\n\n"); - } - else - { - T_FileStream_writeLine(makefile, "clean:\n\n"); - } - T_FileStream_writeLine(makefile, "install: install-dirs $(INSTALLEDDEST)\n\n"); - T_FileStream_writeLine(makefile, "install-dirs:\n\t$(MKINSTALLDIRS) $(INSTALLDIRS)\n\n"); - T_FileStream_writeLine(makefile, "copy-dirs:\n\t$(MKINSTALLDIRS) $(COPYDIRS)\n\n"); + } + else + { + T_FileStream_writeLine(makefile, "clean:\n\n"); + } + T_FileStream_writeLine(makefile, "install: install-dirs $(INSTALLEDDEST)\n\n"); + T_FileStream_writeLine(makefile, "install-dirs:\n\t$(MKINSTALLDIRS) $(INSTALLDIRS)\n\n"); + T_FileStream_writeLine(makefile, "copy-dirs:\n\t$(MKINSTALLDIRS) $(COPYDIRS)\n\n"); } diff --git a/icuSources/tools/pkgdata/make.c b/icuSources/tools/pkgdata/make.c index 0d794ecc..53e9c03a 100644 --- a/icuSources/tools/pkgdata/make.c +++ b/icuSources/tools/pkgdata/make.c @@ -1,6 +1,6 @@ /************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * *************************************************************************** @@ -24,6 +24,7 @@ #include "unicode/putil.h" #include "makefile.h" #include "cstring.h" +#include "cmemory.h" #include <stdio.h> #ifdef U_MAKE_IS_NMAKE @@ -35,6 +36,8 @@ void pkg_mak_writeHeader(FileStream *f, const UPKGOptions *o) { const char *appendVersion = NULL; + char *srcDir = convertToNativePathSeparators(uprv_strdup(o->srcDir)); + if(o->version && !uprv_strstr(o->shortName,o->version)) { /* do not append version if already contained in the name */ appendVersion = o->version; @@ -59,12 +62,14 @@ pkg_mak_writeHeader(FileStream *f, const UPKGOptions *o) "ENTRYPOINT=%s\n" "TARGET_VERSION=%s\n" "MKINSTALLDIRS=mkdir\n" + "INSTALL_DATA=copy\n" + "RMV=del /F" "\n\n\n", o->shortName, (appendVersion ? appendVersion : ""), o->cShortName, o->libName, - o->srcDir, + srcDir, o->targetDir, o->tmpDir, o->mode, @@ -102,6 +107,7 @@ pkg_mak_writeHeader(FileStream *f, const UPKGOptions *o) T_FileStream_writeLine(f, "\n\n\n"); + uprv_free(srcDir); } /* Write a stanza in the makefile, with specified "target: parents... \n\n\tcommands" [etc] */ @@ -133,7 +139,7 @@ pkg_mak_writeFooter(FileStream *f, const UPKGOptions *o) T_FileStream_write(f, buf, (int32_t)uprv_strlen(buf)); } -#else /* #ifdef WIN32 */ +#else /* #ifdef U_MAKE_IS_NMAKE */ #include "cmemory.h" #include "filestrm.h" @@ -271,14 +277,11 @@ pkg_mak_writeObjRules(UPKGOptions *o, FileStream *makefile, CharList **objects, CharList *infiles; CharList *parents = NULL, *commands = NULL; int32_t genFileOffset = 0; /* offset from beginning of .c and .o file name, use to chop off package name for AS/400 */ - static int serNo = 0; /* counter for numeric file names */ - char serName[100]; + char *parentPath; + const char *tchar; + char tree[1024]; - if(o->embed) { - infiles = o->filePaths; - } else { - infiles = o->files; /* raw files - no paths other than tree paths */ - } + infiles = o->files; /* raw files - no paths other than tree paths */ #if defined (OS400) if(infiles != NULL) { @@ -291,36 +294,26 @@ pkg_mak_writeObjRules(UPKGOptions *o, FileStream *makefile, CharList **objects, #endif for(;infiles;infiles = infiles->next) { - if(o->embed) { - baseName = findBasename(infiles->str); - } else { - baseName = infiles->str; /* skip the icudt28b/ part */ - } + baseName = infiles->str; /* skip the icudt28b/ part */ p = uprv_strrchr(baseName, '.'); if( (p == NULL) || (*p == '\0' ) ) { continue; } - if(o->numeric) { - sprintf(serName, "t%04x", serNo++); - uprv_strcpy(tmp,serName); - uprv_strcat(tmp, objSuffix); - } else { - uprv_strncpy(tmp, baseName, p-baseName); - p++; - - uprv_strcpy(tmp+(p-1-baseName), "_"); /* to append */ - uprv_strcat(tmp, p); - uprv_strcat(tmp, objSuffix ); - - /* iSeries cannot have '-' in the .o objects. */ - for( tmpPtr = tmp; *tmpPtr; tmpPtr++ ) { - if ( *tmpPtr == U_FILE_SEP_CHAR ) { /* map tree names with underscores */ - *tmpPtr = '_'; - } - if ( *tmpPtr == '-' ) { - *tmpPtr = '_'; - } + uprv_strncpy(tmp, baseName, p-baseName); + p++; + + uprv_strcpy(tmp+(p-1-baseName), "_"); /* to append */ + uprv_strcat(tmp, p); + uprv_strcat(tmp, objSuffix ); + + /* iSeries cannot have '-' in the .o objects. */ + for( tmpPtr = tmp; *tmpPtr; tmpPtr++ ) { + if ( *tmpPtr == U_FILE_SEP_CHAR ) { /* map tree names with underscores */ + *tmpPtr = '_'; + } + if ( *tmpPtr == '-' ) { + *tmpPtr = '_'; } } @@ -331,20 +324,12 @@ pkg_mak_writeObjRules(UPKGOptions *o, FileStream *makefile, CharList **objects, uprv_strcpy(cfile+uprv_strlen(cfile)-uprv_strlen(objSuffix), ".c" ); /* replace .o with .c */ /* Make up parents.. */ - if(!o->embed) { - char *parentPath; - parentPath = uprv_malloc(1+uprv_strlen(baseName) + uprv_strlen("$(SRCDIR)/")); - sprintf(parentPath, "$(SRCDIR)/%s", baseName); - parents = pkg_appendToList(parents, NULL, parentPath); - } else { - parents = pkg_appendToList(parents, NULL, uprv_strdup(infiles->str)); - } + parentPath = uprv_malloc(1+uprv_strlen(baseName) + uprv_strlen("$(SRCDIR)/")); + sprintf(parentPath, "$(SRCDIR)/%s", baseName); + parents = pkg_appendToList(parents, NULL, parentPath); /* make up commands.. */ - if(!o->embed) { /* search for tree.. */ - const char *tchar; - char tree[1024]; if((tchar=uprv_strchr(baseName, '/'))) { tree[0]='_'; strncpy(tree+1,baseName,tchar-baseName); @@ -357,18 +342,8 @@ pkg_mak_writeObjRules(UPKGOptions *o, FileStream *makefile, CharList **objects, #else sprintf(stanza, "$(INVOKE) $(GENCCODE) -n $(CNAME)%s -d $(TEMP_DIR) $<", tree); #endif - } else { -#ifdef OS400 - sprintf(stanza, "$(INVOKE) $(GENCCODE) -d $(TEMP_DIR) %s", infiles->str); -#else - sprintf(stanza, "$(INVOKE) $(GENCCODE) -d $(TEMP_DIR) $<"); -#endif - } - if(o->numeric) { - strcat(stanza, " -f "); - strcat(stanza,serName); - } else if(!o->embed && uprv_strchr(baseName, '/')) { + if(uprv_strchr(baseName, '/')) { /* append actual file - ex: coll_en_res otherwise the tree name will be lost */ strcat(stanza, " -f "); strncat(stanza, tmp, (strlen(tmp)-strlen(objSuffix))); @@ -393,7 +368,7 @@ pkg_mak_writeObjRules(UPKGOptions *o, FileStream *makefile, CharList **objects, commands = pkg_appendToList(commands, NULL, uprv_strdup(stanza)); } - sprintf(stanza, "@$(COMPILE.c) -o $@ $(TEMP_DIR)/%s", cfile+genFileOffset); /* for AS/400 */ + sprintf(stanza, "@$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $(TEMP_DIR)/%s", cfile+genFileOffset); /* for AS/400 */ commands = pkg_appendToList(commands, NULL, uprv_strdup(stanza)); sprintf(stanza, "@$(RMV) $(TEMP_DIR)/%s", cfile+genFileOffset); @@ -410,7 +385,7 @@ pkg_mak_writeObjRules(UPKGOptions *o, FileStream *makefile, CharList **objects, } } -#endif /* #ifdef WIN32 */ +#endif /* #ifdef U_MAKE_IS_NMAKE */ void pkg_mak_writeAssemblyHeader(FileStream *f, const UPKGOptions *o) @@ -421,11 +396,7 @@ pkg_mak_writeAssemblyHeader(FileStream *f, const UPKGOptions *o) T_FileStream_writeLine(f, "BASE_OBJECTS=$(NAME)_dat.o\n"); T_FileStream_writeLine(f, "\n"); T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME).dat: $(CMNLIST) $(DATAFILEPATHS)\n"); - if(!o->embed) { - T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -s $(SRCDIR) -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n"); - } else { - T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -E -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n"); - } + T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -s $(SRCDIR) -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n"); T_FileStream_writeLine(f, "\n"); T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME)_dat.o : $(TEMP_DIR)/$(NAME).dat\n"); T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCCODE) $(GENCCODE_ASSEMBLY) -n $(NAME) -e $(ENTRYPOINT) -d $(TEMP_DIR) $<\n"); diff --git a/icuSources/tools/pkgdata/makefile.h b/icuSources/tools/pkgdata/makefile.h index 0b1bbe97..1a5cd7b5 100644 --- a/icuSources/tools/pkgdata/makefile.h +++ b/icuSources/tools/pkgdata/makefile.h @@ -1,6 +1,6 @@ /************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2005, International Business Machines * Corporation and others. All Rights Reserved. * *************************************************************************** @@ -58,7 +58,7 @@ extern void pkg_mode_dll(UPKGOptions* o, FileStream *stream, UErrorCode *status) extern void pkg_mode_static(UPKGOptions* o, FileStream *stream, UErrorCode *status); #endif /*#ifdef UDATA_SO_SUFFIX*/ extern void pkg_mode_common(UPKGOptions* o, FileStream *stream, UErrorCode *status); -#endif /*#ifdef WIN32*/ +#endif /*#ifdef U_MAKE_IS_NMAKE*/ extern void pkg_mode_files(UPKGOptions* o, FileStream *stream, UErrorCode *status); diff --git a/icuSources/tools/pkgdata/pkgdata.c b/icuSources/tools/pkgdata/pkgdata.c index 041ebdbf..09f900fa 100644 --- a/icuSources/tools/pkgdata/pkgdata.c +++ b/icuSources/tools/pkgdata/pkgdata.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -25,6 +25,7 @@ #include "unicode/uclean.h" #include "unewdata.h" #include "uoptions.h" +#include "putilimp.h" #if U_HAVE_POPEN /* @@ -72,6 +73,30 @@ static struct #endif /*#ifdef U_MAKE_IS_NMAKE*/ }; +enum { + NAME, + BLDOPT, + MODE, + HELP, + HELP_QUESTION_MARK, + VERBOSE, + COPYRIGHT, + COMMENT, + DESTDIR, + CLEAN, + NOOUTPUT, + REBUILD, + TEMPDIR, + INSTALL, + SOURCEDIR, + ENTRYPOINT, + REVISION, + MAKEARG, + FORCE_PREFIX, + LIBNAME, + QUIET +}; + static UOption options[]={ /*00*/ UOPTION_DEF( "name", 'p', UOPT_REQUIRES_ARG), /*01*/ UOPTION_DEF( "bldopt", 'O', UOPT_REQUIRES_ARG), /* on Win32 it is release or debug */ @@ -90,12 +115,10 @@ static UOption options[]={ /*14*/ UOPTION_SOURCEDIR , /*15*/ UOPTION_DEF( "entrypoint", 'e', UOPT_REQUIRES_ARG), /*16*/ UOPTION_DEF( "revision", 'r', UOPT_REQUIRES_ARG), - /*17*/ UOPTION_DEF( 0, 'M', UOPT_REQUIRES_ARG), + /*17*/ UOPTION_DEF( "makearg", 'M', UOPT_REQUIRES_ARG), /*18*/ UOPTION_DEF( "force-prefix", 'f', UOPT_NO_ARG), - /*19*/ UOPTION_DEF( "numerictmp", 'N', UOPT_NO_ARG), - /*20*/ UOPTION_DEF( "embed", 'E', UOPT_NO_ARG), - /*21*/ UOPTION_DEF( "libname", 'L', UOPT_REQUIRES_ARG), - /*22*/ UOPTION_DEF( "quiet", 'q', UOPT_NO_ARG) + /*19*/ UOPTION_DEF( "libname", 'L', UOPT_REQUIRES_ARG), + /*20*/ UOPTION_DEF( "quiet", 'q', UOPT_NO_ARG) }; const char options_help[][320]={ @@ -122,8 +145,6 @@ const char options_help[][320]={ "Specify a version when packaging in DLL or static mode", "Pass the next argument to make(1)", "Add package to all file names if not present", - "Use short numeric temporary file names such as t1234.c", - "Use Embedded paths (such as 'mypackage_') - for compatibility.", "Library name to build (if different than package name)", "Quite mode. (e.g. Do not output a readme file for static libraries)" }; @@ -144,8 +165,8 @@ main(int argc, char* argv[]) { progname = argv[0]; - options[2].value = "common"; - options[17].value = ""; + options[MODE].value = "common"; + options[MAKEARG].value = ""; /* read command line options */ argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); @@ -154,7 +175,7 @@ main(int argc, char* argv[]) { /* I've decided to simply print an error and quit. This tool has too many options to just display them all of the time. */ - if(options[3].doesOccur || options[4].doesOccur) { + if(options[HELP].doesOccur || options[HELP_QUESTION_MARK].doesOccur) { needsHelp = TRUE; } else { @@ -167,7 +188,7 @@ main(int argc, char* argv[]) { return 1; } - if(!options[1].doesOccur) { + if(!options[BLDOPT].doesOccur) { /* Try to fill in from icu-config or equivalent */ fillInMakefileFromICUConfig(&options[1]); } @@ -179,13 +200,13 @@ main(int argc, char* argv[]) { } #endif - if(!options[1].doesOccur) { + if(!options[BLDOPT].doesOccur) { fprintf(stderr, " required parameter is missing: -O is required \n"); fprintf(stderr, "Run '%s --help' for help.\n", progname); return 1; } - if(!options[0].doesOccur) /* -O we already have - don't report it. */ + if(!options[NAME].doesOccur) /* -O we already have - don't report it. */ { fprintf(stderr, " required parameter -p is missing \n"); fprintf(stderr, "Run '%s --help' for help.\n", progname); @@ -234,9 +255,9 @@ main(int argc, char* argv[]) { /* OK, fill in the options struct */ uprv_memset(&o, 0, sizeof(o)); - o.mode = options[2].value; - o.version = options[16].doesOccur ? options[16].value : 0; - o.makeArgs = options[17].value; + o.mode = options[MODE].value; + o.version = options[REVISION].doesOccur ? options[REVISION].value : 0; + o.makeArgs = options[MAKEARG].value; o.fcn = NULL; @@ -274,24 +295,24 @@ main(int argc, char* argv[]) { o.cShortName = csname; } - if(options[21].doesOccur) { /* get libname from shortname, or explicit -L parameter */ - o.libName = options[21].value; + if(options[LIBNAME].doesOccur) { /* get libname from shortname, or explicit -L parameter */ + o.libName = options[LIBNAME].value; } else { o.libName = o.shortName; } - if(options[22].doesOccur) { + if(options[QUIET].doesOccur) { o.quiet = TRUE; } else { o.quiet = FALSE; } - o.verbose = options[5].doesOccur; + o.verbose = options[VERBOSE].doesOccur; #ifdef U_MAKE_IS_NMAKE /* format is R:pathtoICU or D:pathtoICU */ { - char *pathstuff = (char *)options[1].value; - if(options[1].value[uprv_strlen(options[1].value)-1] == '\\') { - pathstuff[uprv_strlen(options[1].value)-1] = '\0'; + char *pathstuff = (char *)options[BLDOPT].value; + if(options[1].value[uprv_strlen(options[BLDOPT].value)-1] == '\\') { + pathstuff[uprv_strlen(options[BLDOPT].value)-1] = '\0'; } if(*pathstuff == PKGDATA_DERIVED_PATH || *pathstuff == 'R' || *pathstuff == 'D') { o.options = pathstuff; @@ -314,48 +335,42 @@ main(int argc, char* argv[]) { } } #else /* on UNIX, we'll just include the file... */ - o.options = options[1].value; + o.options = options[BLDOPT].value; #endif - if(options[6].doesOccur) { + if(options[COPYRIGHT].doesOccur) { o.comment = U_COPYRIGHT_STRING; - } else if (options[7].doesOccur) { - o.comment = options[7].value; + } else if (options[COMMENT].doesOccur) { + o.comment = options[COMMENT].value; } - if( options[8].doesOccur ) { - o.targetDir = options[8].value; + if( options[DESTDIR].doesOccur ) { + o.targetDir = options[DESTDIR].value; } else { o.targetDir = "."; /* cwd */ } - o.clean = options[9].doesOccur; - o.nooutput = options[10].doesOccur; - o.rebuild = options[11].doesOccur; - o.numeric = options[19].doesOccur; - if(o.numeric) { - o.rebuild = TRUE; /* force rebuild if numeric */ - } + o.clean = options[CLEAN].doesOccur; + o.nooutput = options[NOOUTPUT].doesOccur; + o.rebuild = options[REBUILD].doesOccur; - o.embed = options[20].doesOccur; - - if( options[12].doesOccur ) { - o.tmpDir = options[12].value; + if( options[TEMPDIR].doesOccur ) { + o.tmpDir = options[TEMPDIR].value; } else { o.tmpDir = o.targetDir; } - if( options[13].doesOccur ) { - o.install = options[13].value; + if( options[INSTALL].doesOccur ) { + o.install = options[INSTALL].value; } - if( options[14].doesOccur ) { - o.srcDir = options[14].value; + if( options[SOURCEDIR].doesOccur ) { + o.srcDir = options[SOURCEDIR].value; } else { o.srcDir = "."; } - if( options[15].doesOccur ) { - o.entryName = options[15].value; + if( options[ENTRYPOINT].doesOccur ) { + o.entryName = options[ENTRYPOINT].value; } else { o.entryName = o.cShortName; } @@ -385,7 +400,11 @@ main(int argc, char* argv[]) { /* Makefile pathname */ uprv_strcpy(tmp, o.tmpDir); +#ifdef U_MAKE_IS_NMAKE uprv_strcat(tmp, U_FILE_SEP_STRING); +#else + uprv_strcat(tmp, U_FILE_ALT_SEP_STRING); +#endif uprv_strcat(tmp, o.shortName); uprv_strcat(tmp, "_"); uprv_strcat(tmp, o.mode); @@ -432,7 +451,7 @@ static int executeMakefile(const UPKGOptions *o) } /*getcwd(pwd, 1024);*/ -#ifdef WIN32 +#ifdef U_WINDOWS sprintf(cmd, "%s %s%s -f \"%s\" %s %s %s %s", make, o->install ? "INSTALLTO=" : "", @@ -442,8 +461,8 @@ static int executeMakefile(const UPKGOptions *o) o->rebuild ? "rebuild" : "", o->install ? "install" : "", o->makeArgs); -#elif OS400 - sprintf(cmd, "CALL GNU/GMAKE PARM(%s%s%s '-f' '%s' %s %s %s %s)", +#elif defined(OS400) + sprintf(cmd, "CALL GNU/GMAKE PARM(%s%s%s '-f' '%s' %s %s %s %s%s%s)", o->install ? "'INSTALLTO=" : "", o->install ? o->install : "", o->install ? "'" : "", @@ -451,7 +470,9 @@ static int executeMakefile(const UPKGOptions *o) o->clean ? "'clean'" : "", o->rebuild ? "'rebuild'" : "", o->install ? "'install'" : "", - o->makeArgs); + o->makeArgs && *o->makeArgs ? "'" : "", + o->makeArgs && *o->makeArgs ? o->makeArgs : "", + o->makeArgs && *o->makeArgs ? "'" : ""); #else sprintf(cmd, "%s %s%s -f %s %s %s %s %s", make, @@ -485,19 +506,9 @@ static void loadLists(UPKGOptions *o, UErrorCode *status) char *linePtr, *lineNext; const uint32_t lineMax = 16300; char tmp[1024]; - char pkgPrefix[1024]; - int32_t pkgPrefixLen; - const char *baseName; char *s; int32_t ln=0; /* line number */ - UBool fixPrefix; - - - fixPrefix = options[18].doesOccur; - strcpy(pkgPrefix, o->shortName); - strcat(pkgPrefix, "_"); - pkgPrefixLen=(int32_t)uprv_strlen(pkgPrefix); for(l = o->fileListFiles; l; l = l->next) { if(o->verbose) { fprintf(stdout, "# Reading %s..\n", l->str); @@ -512,100 +523,79 @@ static void loadLists(UPKGOptions *o, UErrorCode *status) } while(T_FileStream_readLine(in, line, sizeof(line))!=NULL) { /* for each line */ - if((ln == 0) && (!o->embed)) { - /* determine if we need to run in 'embed' (compatibility) mode */ - if(!strncmp(findBasename(line), pkgPrefix, pkgPrefixLen)) { - fprintf(stderr, "Warning: Found path '%s' in file name. Assuming compatibility (-E) mode.\n", pkgPrefix); - o->embed = 1; + ln++; + if(uprv_strlen(line)>lineMax) { + fprintf(stderr, "%s:%d - line too long (over %d chars)\n", l->str, (int)ln, (int)lineMax); + exit(1); } - } - ln++; - if(uprv_strlen(line)>lineMax) { - fprintf(stderr, "%s:%d - line too long (over %d chars)\n", l->str, (int)ln, (int)lineMax); - exit(1); - } - /* remove spaces at the beginning */ - linePtr = line; - while(isspace(*linePtr)) { - linePtr++; - } - s=linePtr; - /* remove trailing newline characters */ - while(*s!=0) { - if(*s=='\r' || *s=='\n') { - *s=0; - break; + /* remove spaces at the beginning */ + linePtr = line; + while(isspace(*linePtr)) { + linePtr++; } + s=linePtr; + /* remove trailing newline characters */ + while(*s!=0) { + if(*s=='\r' || *s=='\n') { + *s=0; + break; + } ++s; - } - if((*linePtr == 0) || (*linePtr == '#')) { - continue; /* comment or empty line */ - } - - /* Now, process the line */ - lineNext = NULL; - - while(linePtr && *linePtr) { /* process space-separated items */ - while(*linePtr == ' ') { - linePtr++; } - /* Find the next quote */ - if(linePtr[0] == '"') - { - lineNext = uprv_strchr(linePtr+1, '"'); - if(lineNext == NULL) { - fprintf(stderr, "%s:%d - missing trailing double quote (\")\n", - l->str, (int)ln); - exit(1); + if((*linePtr == 0) || (*linePtr == '#')) { + continue; /* comment or empty line */ + } + + /* Now, process the line */ + lineNext = NULL; + + while(linePtr && *linePtr) { /* process space-separated items */ + while(*linePtr == ' ') { + linePtr++; + } + /* Find the next quote */ + if(linePtr[0] == '"') + { + lineNext = uprv_strchr(linePtr+1, '"'); + if(lineNext == NULL) { + fprintf(stderr, "%s:%d - missing trailing double quote (\")\n", + l->str, (int)ln); + exit(1); + } else { + lineNext++; + if(*lineNext) { + if(*lineNext != ' ') { + fprintf(stderr, "%s:%d - malformed quoted line at position %d, expected ' ' got '%c'\n", + l->str, (int)ln, (int)(lineNext-line), (*lineNext)?*lineNext:'0'); + exit(1); + } + *lineNext = 0; + lineNext++; + } + } } else { - lineNext++; - if(*lineNext) { - if(*lineNext != ' ') { - fprintf(stderr, "%s:%d - malformed quoted line at position %d, expected ' ' got '%c'\n", - l->str, (int)ln, lineNext-line, (*lineNext)?*lineNext:'0'); - exit(1); + lineNext = uprv_strchr(linePtr, ' '); + if(lineNext) { + *lineNext = 0; /* terminate at space */ + lineNext++; } - *lineNext = 0; - lineNext++; - } } - } else { - lineNext = uprv_strchr(linePtr, ' '); - if(lineNext) { - *lineNext = 0; /* terminate at space */ - lineNext++; - } - } - - /* add the file */ - s = (char*)getLongPathname(linePtr); - - if(o->embed == 0) { - /* normal mode.. o->files is just the bare list without package names */ - o->files = pkg_appendToList(o->files, &tail, uprv_strdup(linePtr)); - uprv_strcpy(tmp, o->srcDir); - uprv_strcat(tmp, o->srcDir[uprv_strlen(o->srcDir)-1]==U_FILE_SEP_CHAR?"":U_FILE_SEP_STRING); - uprv_strcat(tmp, s); - o->filePaths = pkg_appendToList(o->filePaths, &tail2, uprv_strdup(tmp)); - } else {/* embedded package_ mode */ - baseName = findBasename(s); - - if(s != baseName) { - /* s was something 'long' with a path */ - /* paths already have the prefix */ - o->files = pkg_appendToList(o->files, &tail, uprv_strdup(baseName)); - o->filePaths = pkg_appendToList(o->filePaths, &tail2, uprv_strdup(s)); - } else { /* s was just a basename, we want to prepend source dir*/ - /* check for prefix of package */ + + /* add the file */ + s = (char*)getLongPathname(linePtr); + + /* normal mode.. o->files is just the bare list without package names */ + o->files = pkg_appendToList(o->files, &tail, uprv_strdup(linePtr)); + if(uprv_pathIsAbsolute(s)) { + fprintf(stderr, "pkgdata: Error: absolute path encountered. Old style paths are not supported. Use relative paths such as 'fur.res' or 'translit%cfur.res'.\n\tBad path: '%s'\n", U_FILE_SEP_CHAR, s); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } uprv_strcpy(tmp, o->srcDir); uprv_strcat(tmp, o->srcDir[uprv_strlen(o->srcDir)-1]==U_FILE_SEP_CHAR?"":U_FILE_SEP_STRING); - o->files = pkg_appendToList(o->files, &tail, uprv_strdup(baseName)); uprv_strcat(tmp, s); o->filePaths = pkg_appendToList(o->filePaths, &tail2, uprv_strdup(tmp)); - } - } /* end compatibility mode */ - linePtr = lineNext; - } /* for each entry on line */ + linePtr = lineNext; + } /* for each entry on line */ } /* for each line */ T_FileStream_close(in); } /* for each file list file */ @@ -664,7 +654,7 @@ static void fillInMakefileFromICUConfig(UOption *option) option->doesOccur = TRUE; #else /* ! U_HAVE_POPEN */ -#ifdef WIN32 +#ifdef U_WINDOWS char pathbuffer[_MAX_PATH] = {0}; char *fullEXEpath = NULL; char *pathstuff = NULL; diff --git a/icuSources/tools/pkgdata/pkgdata.dsp b/icuSources/tools/pkgdata/pkgdata.dsp deleted file mode 100644 index 006719d2..00000000 --- a/icuSources/tools/pkgdata/pkgdata.dsp +++ /dev/null @@ -1,226 +0,0 @@ -# Microsoft Developer Studio Project File - Name="pkgdata" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pkgdata - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pkgdata.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pkgdata.mak" CFG="pkgdata - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pkgdata - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pkgdata - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "pkgdata - Win64 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pkgdata - Win64 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pkgdata - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /I "../../../include" /I "../../common" /I "../toolutil" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD BASE RSC /l 0x411 /d "NDEBUG" -# ADD RSC /l 0x411 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../lib/release" /libpath:"../toolutil/release" /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Release\pkgdata.exe -InputPath=.\Release\pkgdata.exe -InputName=pkgdata -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "pkgdata - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "../../../include" /I "../../common" /I "../toolutil" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# ADD BASE RSC /l 0x411 /d "_DEBUG" -# ADD RSC /l 0x411 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../lib/debug" /libpath:"../toolutil/debug" /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" -# Begin Custom Build -TargetPath=.\Debug\pkgdata.exe -InputPath=.\Debug\pkgdata.exe -InputName=pkgdata -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "pkgdata - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c -# ADD CPP /nologo /MD /Za /W3 /GX /Zi /O2 /I "../../../include" /I "../../common" /I "../toolutil" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x411 /d "NDEBUG" -# ADD RSC /l 0x411 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IX86 /machine:IA64 -# ADD LINK32 icuuc.lib icutu.lib /nologo /subsystem:console /machine:IX86 /libpath:"../../../lib/release" /libpath:"../toolutil/release" /libpath:"..\toolutil\Release" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Release\pkgdata.exe -InputPath=.\Release\pkgdata.exe -InputName=pkgdata -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ELSEIF "$(CFG)" == "pkgdata - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -MTL=midl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c -# ADD CPP /nologo /MDd /Za /W3 /Gm /GX /Zi /Od /I "../../../include" /I "../../common" /I "../toolutil" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FR /FD /GZ /Wp64 /Zm600 /c -# ADD BASE RSC /l 0x411 /d "_DEBUG" -# ADD RSC /l 0x411 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 icuucd.lib icutud.lib /nologo /subsystem:console /incremental:no /debug /machine:IX86 /pdbtype:sept /libpath:"../../../lib/debug" /libpath:"../toolutil/debug" /libpath:"..\toolutil\Debug" /libpath:"..\..\..\lib" /machine:IA64 -# Begin Custom Build -TargetPath=.\Debug\pkgdata.exe -InputPath=.\Debug\pkgdata.exe -InputName=pkgdata -SOURCE="$(InputPath)" - -"..\..\..\bin\$(InputName).exe" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - copy $(TargetPath) ..\..\..\bin - -# End Custom Build - -!ENDIF - -# Begin Target - -# Name "pkgdata - Win32 Release" -# Name "pkgdata - Win32 Debug" -# Name "pkgdata - Win64 Release" -# Name "pkgdata - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\filemode.c -# End Source File -# Begin Source File - -SOURCE=.\make.c -# End Source File -# Begin Source File - -SOURCE=.\pkgdata.c -# End Source File -# Begin Source File - -SOURCE=.\pkgtypes.c -# End Source File -# Begin Source File - -SOURCE=.\sttcmode.c -# End Source File -# Begin Source File - -SOURCE=.\winmode.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\makefile.h -# End Source File -# Begin Source File - -SOURCE=.\pkgtypes.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/pkgdata/pkgdata.vcproj b/icuSources/tools/pkgdata/pkgdata.vcproj index 89b358af..b33310fa 100644 --- a/icuSources/tools/pkgdata/pkgdata.vcproj +++ b/icuSources/tools/pkgdata/pkgdata.vcproj @@ -22,12 +22,13 @@ Name="VCCLCompilerTool" Optimization="0" ImproveFloatingPointConsistency="TRUE" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="../../../include,../../common,../toolutil" - PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + AdditionalIncludeDirectories="../../../include;../../common;../toolutil" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/pkgdata.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -84,14 +85,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="../../../include,../../common,../toolutil" - PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + AdditionalIncludeDirectories="../../../include;../../common;../toolutil" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/pkgdata.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" diff --git a/icuSources/tools/pkgdata/pkgtypes.c b/icuSources/tools/pkgdata/pkgtypes.c index 728020a5..97f3ff51 100644 --- a/icuSources/tools/pkgdata/pkgtypes.c +++ b/icuSources/tools/pkgdata/pkgtypes.c @@ -1,6 +1,6 @@ /************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * *************************************************************************** @@ -28,7 +28,6 @@ const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, { int32_t ln = 0; char buffer[1024]; - const CharList *ol = NULL; while(l != NULL) { if(l->str) @@ -53,11 +52,9 @@ const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, } } T_FileStream_write(s, buffer, (int32_t)uprv_strlen(buffer)); - } - - ln += (int32_t)uprv_strlen(l->str); - ol = l; + ln += (int32_t)uprv_strlen(l->str); + } if(l->next && delim) { @@ -199,11 +196,21 @@ CharList *pkg_appendToList(CharList *l, CharList** end, const char *str) return l; } +char * convertToNativePathSeparators(char *path) { +#if defined(U_MAKE_IS_NMAKE) + char *itr; + while ((itr = uprv_strchr(path, U_FILE_ALT_SEP_CHAR))) { + *itr = U_FILE_SEP_CHAR; + } +#endif + return path; +} + CharList *pkg_appendUniqueDirToList(CharList *l, CharList** end, const char *strAlias) { char aBuf[1024]; char *rPtr; rPtr = uprv_strrchr(strAlias, U_FILE_SEP_CHAR); -#if defined(U_FILE_ALT_SEP_CHAR) && (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) +#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) { char *aPtr = uprv_strrchr(strAlias, U_FILE_ALT_SEP_CHAR); if(!rPtr || /* regular char wasn't found or.. */ @@ -217,11 +224,12 @@ CharList *pkg_appendUniqueDirToList(CharList *l, CharList** end, const char *str return l; /* no dir path */ } if((rPtr-strAlias) > (sizeof(aBuf)/sizeof(aBuf[0]))) { - fprintf(stderr, "## ERR: Path too long [%d chars]: %s\n", sizeof(aBuf), strAlias); + fprintf(stderr, "## ERR: Path too long [%d chars]: %s\n", (int)sizeof(aBuf), strAlias); return l; } strncpy(aBuf, strAlias,(rPtr-strAlias)); aBuf[rPtr-strAlias]=0; /* no trailing slash */ + convertToNativePathSeparators(aBuf); if(!pkg_listContains(l, aBuf)) { return pkg_appendToList(l, end, uprv_strdup(aBuf)); diff --git a/icuSources/tools/pkgdata/pkgtypes.h b/icuSources/tools/pkgdata/pkgtypes.h index 8b7abb3b..8826cda5 100644 --- a/icuSources/tools/pkgdata/pkgtypes.h +++ b/icuSources/tools/pkgdata/pkgtypes.h @@ -1,6 +1,6 @@ /************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * *************************************************************************** @@ -130,17 +130,16 @@ typedef struct UPKGOptions_ UBool verbose; UBool quiet; UBool hadStdin; /* Stdin was a dependency - don't make anything depend on the file list coming in. */ - UBool numeric; /* use numeric, short, temporary file names */ - int32_t embed; /* embedded package - i.e. .../mypkg_myfile.res files */ - UPKGMODE *fcn; /* Handler function */ } UPKGOptions; +char * convertToNativePathSeparators(char *path); + /* set up common defines for library naming */ -#ifdef WIN32 +#ifdef U_WINDOWS # ifndef UDATA_SO_SUFFIX # define UDATA_SO_SUFFIX ".DLL" # endif diff --git a/icuSources/tools/pkgdata/sttcmode.c b/icuSources/tools/pkgdata/sttcmode.c index 57fd7e86..568dec7b 100644 --- a/icuSources/tools/pkgdata/sttcmode.c +++ b/icuSources/tools/pkgdata/sttcmode.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -35,11 +35,13 @@ /** set if AR is NOT to be called implicitly by gnumake ** (i.e. if the form libblah.a($(OBJECTS) doesnt work) **/ +#if !defined(NO_IMPLICIT_AR) #if defined(OS400) || defined(OS390) # define NO_IMPLICIT_AR 1 #else # define NO_IMPLICIT_AR 0 #endif +#endif void pkg_sttc_writeReadme(struct UPKGOptions_ *o, const char *libName, UErrorCode *status) { @@ -204,13 +206,8 @@ void pkg_mode_static(UPKGOptions *o, FileStream *makefile, UErrorCode *status) T_FileStream_writeLine(makefile, "# 'TOCOBJ' contains C Table of Contents objects [if any]\n"); - if(!o->embed) { sprintf(tmp, "$(TEMP_PATH)$(NAME)_dat.c: $(CMNLIST)\n" "\t$(INVOKE) $(GENCMN) -e $(ENTRYPOINT) -n $(NAME) -S -s $(SRCDIR) -d $(TEMP_DIR) 0 $(CMNLIST)\n\n"); - } else { - sprintf(tmp, "$(TEMP_PATH)$(NAME)_dat.c: $(CMNLIST)\n" - "\t$(INVOKE) $(GENCMN) -e $(ENTRYPOINT) -n $(NAME) -S -E -d $(TEMP_DIR) 0 $(CMNLIST)\n\n"); - } T_FileStream_writeLine(makefile, tmp); sprintf(tmp, "TOCOBJ= $(NAME)_dat.$(STATIC_O)\n\n"); diff --git a/icuSources/tools/pkgdata/winmode.c b/icuSources/tools/pkgdata/winmode.c index 11e922ca..d5b59874 100644 --- a/icuSources/tools/pkgdata/winmode.c +++ b/icuSources/tools/pkgdata/winmode.c @@ -1,6 +1,6 @@ /****************************************************************************** * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -40,19 +40,13 @@ void writeCmnRules(UPKGOptions *o, FileStream *makefile) char tmp[1024]; CharList *infiles; - if(!o->embed) { - infiles = o->files; - } else { - infiles = o->filePaths; - } + infiles = o->files; sprintf(tmp, "\"$(TARGETDIR)\\$(CMNTARGET)\" : $(DATAFILEPATHS)\n" - "\t%s\"$(GENCMN)\" %s%s%s-d \"$(TARGETDIR)\" %s %s -n \"$(NAME)\" 0 <<\n", + "\t%s\"$(GENCMN)\" %s%s%s-d \"$(TARGETDIR)\" -s \"$(SRCDIR)\" -n \"$(NAME)\" 0 <<\n", (o->verbose ? "" : "@"), (o->comment ? "-C \"" : ""), (o->comment ? o->comment : ""), - (o->comment ? "\" " : ""), - (o->embed ? "-E" : ""), - o->embed ? "" : "-s \"$(SRCDIR)\""); + (o->comment ? "\" " : "")); T_FileStream_writeLine(makefile, tmp); pkg_writeCharList(makefile, infiles, "\n", -1); @@ -118,7 +112,7 @@ void pkg_mode_windows(UPKGOptions *o, FileStream *makefile, UErrorCode *status) sprintf(tmp2, "LINK32 = link.exe\n" - "LINK32_FLAGS = /nologo /out:\"$(TARGETDIR)\\$(DLLTARGET)\" /DLL /NOENTRY /base:\"0x4ad00000\" /implib:\"$(TARGETDIR)\\$(LIBNAME).lib\" %s%s%s\n", + "LINK32_FLAGS = /nologo /out:\"$(TARGETDIR)\\$(DLLTARGET)\" /DLL /NOENTRY $(LDFLAGS) $(PKGDATA_LDFLAGS) /implib:\"$(TARGETDIR)\\$(LIBNAME).lib\" %s%s%s\n", (o->comment ? "/comment:\"" : ""), (o->comment ? o->comment : ""), (o->comment ? "\"" : ""), diff --git a/icuSources/tools/toolutil/Makefile.in b/icuSources/tools/toolutil/Makefile.in index 0c1a43fb..0fa1d97c 100644 --- a/icuSources/tools/toolutil/Makefile.in +++ b/icuSources/tools/toolutil/Makefile.in @@ -1,6 +1,9 @@ -## Copyright (C) 1999-2004, International Business Machines Corporation -## and others. All Rights Reserved. - +#****************************************************************************** +# +# Copyright (C) 1999-2005, International Business Machines +# Corporation and others. All Rights Reserved. +# +#****************************************************************************** ## Makefile.in for ICU - tools/toolutil ## Steven R. Loomis @@ -10,6 +13,7 @@ top_srcdir = @top_srcdir@ top_builddir = ../.. +## All the flags and other definitions are included here. include $(top_builddir)/icudefs.mk ## Build directory information @@ -28,7 +32,7 @@ endif ifneq ($(ENABLE_SHARED),) SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO) -ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) +ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT) endif ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) @@ -37,19 +41,28 @@ DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS) DYNAMICCFLAGS = $(SHAREDLIBCFLAGS) DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS) +ifneq ($(top_builddir),$(top_srcdir)) +CPPFLAGS += -I$(top_builddir)/common +endif +CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n $(LIBCPPFLAGS) +DEFS += -DU_TOOLUTIL_IMPLEMENTATION LDFLAGS += $(LDFLAGSICUTOOLUTIL) -CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common $(LIBCPPFLAGS) -LIBS = $(LIBICUUC) $(DEFAULT_LIBS) +LIBS = $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) -OBJECTS = propsvec.o toolutil.o unewdata.o ucm.o ucmstate.o ucmpwrit.o uoptions.o uparse.o ucbuf.o uperf.o +OBJECTS = filestrm.o package.o pkgitems.o propsvec.o swapimpl.o toolutil.o unewdata.o \ +ucm.o ucmstate.o uoptions.o uparse.o \ +ucbuf.o xmlparser.o writesrc.o STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O)) DEPS = $(OBJECTS:.o=.d) +-include Makefile.local + ## List of phony targets .PHONY : all all-local install install-local clean clean-local \ -distclean distclean-local dist dist-local check check-local install-library +distclean distclean-local install-library dist \ +dist-local check check-local ## Clear suffix list .SUFFIXES : @@ -102,7 +115,7 @@ $(TARGET): $(TARGET)($(STATIC_OBJECTS)) endif ifneq ($(ENABLE_SHARED),) -$(FINAL_SO_TARGET): $(OBJECTS) +$(SHARED_OBJECT): $(OBJECTS) $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS) endif @@ -113,3 +126,4 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) -include $(DEPS) endif endif + diff --git a/icuSources/common/filestrm.c b/icuSources/tools/toolutil/filestrm.c similarity index 97% rename from icuSources/common/filestrm.c rename to icuSources/tools/toolutil/filestrm.c index 30476ea9..bf646916 100644 --- a/icuSources/common/filestrm.c +++ b/icuSources/tools/toolutil/filestrm.c @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2003, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -22,6 +22,7 @@ */ #include "filestrm.h" + #include "cmemory.h" #include <stdio.h> @@ -42,7 +43,7 @@ U_CAPI FileStream* U_EXPORT2 T_FileStream_wopen(const wchar_t* filename, const wchar_t* mode) { // TBD: _wfopen is believed to be MS-specific? -#if defined(WIN32) && !defined(__WINDOWS__) +#if defined(U_WINDOWS) FILE* result = _wfopen(filename, mode); return (FileStream*)result; #else @@ -167,7 +168,7 @@ T_FileStream_size(FileStream* fileStream) /*Changes by Bertrand A. D. doesn't affect the current position goes to the end of the file before ftell*/ fseek((FILE*)fileStream, 0, SEEK_END); - size = ftell((FILE*)fileStream); + size = (int32_t)ftell((FILE*)fileStream); fseek((FILE*)fileStream, savedPos, SEEK_SET); return size; } @@ -222,5 +223,3 @@ U_CAPI UBool U_EXPORT2 T_FileStream_remove(const char* fileName){ return (remove(fileName) == 0); } - - diff --git a/icuSources/common/filestrm.h b/icuSources/tools/toolutil/filestrm.h similarity index 96% rename from icuSources/common/filestrm.h rename to icuSources/tools/toolutil/filestrm.h index 037f6bd4..0eeba98b 100644 --- a/icuSources/common/filestrm.h +++ b/icuSources/tools/toolutil/filestrm.h @@ -1,7 +1,7 @@ /* ****************************************************************************** * -* Copyright (C) 1997-2003, International Business Machines +* Copyright (C) 1997-2005, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -25,9 +25,7 @@ #ifndef FILESTRM_H #define FILESTRM_H -#ifndef _UTYPES #include "unicode/utypes.h" -#endif typedef struct _FileStream FileStream; @@ -102,8 +100,5 @@ T_FileStream_stderr(void); U_CAPI UBool U_EXPORT2 T_FileStream_remove(const char* fileName); -#endif /* _FILESTRM*/ - - - +#endif /* _FILESTRM*/ diff --git a/icuSources/tools/toolutil/package.cpp b/icuSources/tools/toolutil/package.cpp new file mode 100644 index 00000000..2bc9a504 --- /dev/null +++ b/icuSources/tools/toolutil/package.cpp @@ -0,0 +1,1202 @@ +/* +******************************************************************************* +* +* Copyright (C) 1999-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: package.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005aug25 +* created by: Markus W. Scherer +* +* Read, modify, and write ICU .dat data package files. +* This is an integral part of the icupkg tool, moved to the toolutil library +* because parts of tool implementations tend to be later shared by +* other tools. +* Subsumes functionality and implementation code from +* gencmn, decmn, and icuswap tools. +*/ + +#include "unicode/utypes.h" +#include "unicode/putil.h" +#include "unicode/udata.h" +#include "cstring.h" +#include "uarrsort.h" +#include "ucmndata.h" +#include "udataswp.h" +#include "swapimpl.h" +#include "toolutil.h" +#include "package.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +// general definitions ----------------------------------------------------- *** + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +/* UDataInfo cf. udata.h */ +static const UDataInfo dataInfo={ + (uint16_t)sizeof(UDataInfo), + 0, + + U_IS_BIG_ENDIAN, + U_CHARSET_FAMILY, + (uint8_t)sizeof(UChar), + 0, + + {0x43, 0x6d, 0x6e, 0x44}, /* dataFormat="CmnD" */ + {1, 0, 0, 0}, /* formatVersion */ + {3, 0, 0, 0} /* dataVersion */ +}; + +U_CDECL_BEGIN +static void U_CALLCONV +printPackageError(void *context, const char *fmt, va_list args) { + vfprintf((FILE *)context, fmt, args); +} +U_CDECL_END + +static uint16_t +readSwapUInt16(uint16_t x) { + return (uint16_t)((x<<8)|(x>>8)); +} + +// platform types ---------------------------------------------------------- *** + +static const char *types="lb?e"; + +enum { TYPE_L, TYPE_B, TYPE_LE, TYPE_E, TYPE_COUNT }; + +static inline int32_t +makeTypeEnum(uint8_t charset, UBool isBigEndian) { + return 2*(int32_t)charset+isBigEndian; +} + +static inline int32_t +makeTypeEnum(char type) { + return + type == 'l' ? TYPE_L : + type == 'b' ? TYPE_B : + type == 'e' ? TYPE_E : + -1; +} + +static inline char +makeTypeLetter(uint8_t charset, UBool isBigEndian) { + return types[makeTypeEnum(charset, isBigEndian)]; +} + +static inline char +makeTypeLetter(int32_t typeEnum) { + return types[typeEnum]; +} + +static void +makeTypeProps(char type, uint8_t &charset, UBool &isBigEndian) { + int32_t typeEnum=makeTypeEnum(type); + charset=(uint8_t)(typeEnum>>1); + isBigEndian=(UBool)(typeEnum&1); +} + +U_CFUNC const UDataInfo * +getDataInfo(const uint8_t *data, int32_t length, + int32_t &infoLength, int32_t &headerLength, + UErrorCode *pErrorCode) { + const DataHeader *pHeader; + const UDataInfo *pInfo; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return NULL; + } + if( data==NULL || + (length>=0 && length<(int32_t)sizeof(DataHeader)) + ) { + *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return NULL; + } + + pHeader=(const DataHeader *)data; + pInfo=&pHeader->info; + if( (length>=0 && length<(int32_t)sizeof(DataHeader)) || + pHeader->dataHeader.magic1!=0xda || + pHeader->dataHeader.magic2!=0x27 || + pInfo->sizeofUChar!=2 + ) { + *pErrorCode=U_UNSUPPORTED_ERROR; + return NULL; + } + + if(pInfo->isBigEndian==U_IS_BIG_ENDIAN) { + headerLength=pHeader->dataHeader.headerSize; + infoLength=pInfo->size; + } else { + headerLength=readSwapUInt16(pHeader->dataHeader.headerSize); + infoLength=readSwapUInt16(pInfo->size); + } + + if( headerLength<(int32_t)sizeof(DataHeader) || + infoLength<(int32_t)sizeof(UDataInfo) || + headerLength<(int32_t)(sizeof(pHeader->dataHeader)+infoLength) || + (length>=0 && length<headerLength) + ) { + *pErrorCode=U_UNSUPPORTED_ERROR; + return NULL; + } + + return pInfo; +} + +static int32_t +getTypeEnumForInputData(const uint8_t *data, int32_t length, + UErrorCode *pErrorCode) { + const UDataInfo *pInfo; + int32_t infoLength, headerLength; + + /* getDataInfo() checks for illegal arguments */ + pInfo=getDataInfo(data, length, infoLength, headerLength, pErrorCode); + if(pInfo==NULL) { + return -1; + } + + return makeTypeEnum(pInfo->charsetFamily, (UBool)pInfo->isBigEndian); +} + +// file handling ----------------------------------------------------------- *** + +static void +extractPackageName(const char *filename, + char pkg[], int32_t capacity) { + const char *basename; + int32_t len; + + basename=findBasename(filename); + len=(int32_t)strlen(basename)-4; /* -4: subtract the length of ".dat" */ + + if(len<=0 || 0!=strcmp(basename+len, ".dat")) { + fprintf(stderr, "icupkg: \"%s\" is not recognized as a package filename (must end with .dat)\n", + basename); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } + + if(len>=capacity) { + fprintf(stderr, "icupkg: the package name \"%s\" is too long (>=%ld)\n", + basename, (long)capacity); + exit(U_ILLEGAL_ARGUMENT_ERROR); + } + + memcpy(pkg, basename, len); + pkg[len]=0; +} + +static int32_t +getFileLength(FILE *f) { + int32_t length; + + fseek(f, 0, SEEK_END); + length=(int32_t)ftell(f); + fseek(f, 0, SEEK_SET); + return length; +} + +/* + * Turn tree separators and alternate file separators into normal file separators. + */ +#if U_TREE_ENTRY_SEP_CHAR==U_FILE_SEP_CHAR && U_FILE_ALT_SEP_CHAR==U_FILE_SEP_CHAR +#define treeToPath(s) +#else +static void +treeToPath(char *s) { + char *t; + + for(t=s; *t!=0; ++t) { + if(*t==U_TREE_ENTRY_SEP_CHAR || *t==U_FILE_ALT_SEP_CHAR) { + *t=U_FILE_SEP_CHAR; + } + } +} +#endif + +/* + * Turn file separators into tree separators. + */ +#if U_TREE_ENTRY_SEP_CHAR==U_FILE_SEP_CHAR && U_FILE_ALT_SEP_CHAR==U_FILE_SEP_CHAR +#define pathToTree(s) +#else +static void +pathToTree(char *s) { + char *t; + + for(t=s; *t!=0; ++t) { + if(*t==U_FILE_SEP_CHAR || *t==U_FILE_ALT_SEP_CHAR) { + *t=U_TREE_ENTRY_SEP_CHAR; + } + } +} +#endif + +/* + * Prepend the path (if any) to the name and run the name through treeToName(). + */ +static void +makeFullFilename(const char *path, const char *name, + char *filename, int32_t capacity) { + char *s; + + // prepend the path unless NULL or empty + if(path!=NULL && path[0]!=0) { + if((int32_t)(strlen(path)+1)>=capacity) { + fprintf(stderr, "pathname too long: \"%s\"\n", path); + exit(U_BUFFER_OVERFLOW_ERROR); + } + strcpy(filename, path); + + // make sure the path ends with a file separator + s=strchr(filename, 0); + if(*(s-1)!=U_FILE_SEP_CHAR && *(s-1)!=U_FILE_ALT_SEP_CHAR) { + *s++=U_FILE_SEP_CHAR; + } + } else { + s=filename; + } + + // turn the name into a filename, turn tree separators into file separators + if((int32_t)((s-filename)+strlen(name))>=capacity) { + fprintf(stderr, "path/filename too long: \"%s%s\"\n", filename, name); + exit(U_BUFFER_OVERFLOW_ERROR); + } + strcpy(s, name); + treeToPath(s); +} + +static void +makeFullFilenameAndDirs(const char *path, const char *name, + char *filename, int32_t capacity) { + char *sep; + UErrorCode errorCode; + + makeFullFilename(path, name, filename, capacity); + + // make tree directories + errorCode=U_ZERO_ERROR; + sep=strchr(filename, 0)-strlen(name); + while((sep=strchr(sep, U_FILE_SEP_CHAR))!=NULL) { + if(sep!=filename) { + *sep=0; // truncate temporarily + uprv_mkdir(filename, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: unable to create tree directory \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + } + *sep++=U_FILE_SEP_CHAR; // restore file separator character + } +} + +static uint8_t * +readFile(const char *path, const char *name, int32_t &length, char &type) { + char filename[1024]; + FILE *file; + uint8_t *data; + UErrorCode errorCode; + int32_t fileLength, typeEnum; + + makeFullFilename(path, name, filename, (int32_t)sizeof(filename)); + + /* open the input file, get its length, allocate memory for it, read the file */ + file=fopen(filename, "rb"); + if(file==NULL) { + fprintf(stderr, "icupkg: unable to open input file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + + /* get the file length */ + fileLength=getFileLength(file); + if(ferror(file) || fileLength<=0) { + fprintf(stderr, "icupkg: empty input file \"%s\"\n", filename); + fclose(file); + exit(U_FILE_ACCESS_ERROR); + } + + /* allocate the buffer, pad to multiple of 16 */ + length=(fileLength+0xf)&~0xf; + data=(uint8_t *)malloc(length); + if(data==NULL) { + fclose(file); + exit(U_MEMORY_ALLOCATION_ERROR); + } + + /* read the file */ + if(fileLength!=(int32_t)fread(data, 1, fileLength, file)) { + fprintf(stderr, "icupkg: error reading \"%s\"\n", filename); + fclose(file); + free(data); + exit(U_FILE_ACCESS_ERROR); + } + + /* pad the file to a multiple of 16 using the usual padding byte */ + if(fileLength<length) { + memset(data+fileLength, 0xaa, length-fileLength); + } + + fclose(file); + + // minimum check for ICU-format data + errorCode=U_ZERO_ERROR; + typeEnum=getTypeEnumForInputData(data, length, &errorCode); + if(typeEnum<0 || U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: not an ICU data file: \"%s\"\n", filename); + free(data); + exit(U_INVALID_FORMAT_ERROR); + } + type=makeTypeLetter(typeEnum); + + return data; +} + +// .dat package file representation ---------------------------------------- *** + +U_CDECL_BEGIN + +static int32_t U_CALLCONV +compareItems(const void * /*context*/, const void *left, const void *right) { + return (int32_t)strcmp(((Item *)left)->name, ((Item *)right)->name); +} + +U_CDECL_END + +Package::Package() { + inPkgName[0]=0; + inData=NULL; + inLength=0; + inCharset=U_CHARSET_FAMILY; + inIsBigEndian=U_IS_BIG_ENDIAN; + + itemCount=0; + inStringTop=outStringTop=0; + + matchMode=0; + findPrefix=findSuffix=NULL; + findPrefixLength=findSuffixLength=0; + findNextIndex=-1; + + // create a header for an empty package + DataHeader *pHeader; + pHeader=(DataHeader *)header; + pHeader->dataHeader.magic1=0xda; + pHeader->dataHeader.magic2=0x27; + memcpy(&pHeader->info, &dataInfo, sizeof(dataInfo)); + headerLength=(int32_t)(4+sizeof(dataInfo)); + if(headerLength&0xf) { + /* NUL-pad the header to a multiple of 16 */ + int32_t length=(headerLength+0xf)&~0xf; + memset(header+headerLength, 0, length-headerLength); + headerLength=length; + } + pHeader->dataHeader.headerSize=(uint16_t)headerLength; +} + +Package::~Package() { + int32_t index; + + free(inData); + + for(index=0; index<itemCount; ++index) { + if(items[index].isDataOwned) { + free(items[index].data); + } + } +} + +void +Package::readPackage(const char *filename) { + UDataSwapper *ds; + const UDataInfo *pInfo; + UErrorCode errorCode; + + const uint8_t *inBytes; + + int32_t length, offset, i; + int32_t itemLength, typeEnum; + char type; + + const UDataOffsetTOCEntry *inEntries; + + extractPackageName(filename, inPkgName, (int32_t)sizeof(inPkgName)); + + /* read the file */ + inData=readFile(NULL, filename, inLength, type); + length=inLength; + + /* + * swap the header - even if the swapping itself is a no-op + * because it tells us the header length + */ + errorCode=U_ZERO_ERROR; + makeTypeProps(type, inCharset, inIsBigEndian); + ds=udata_openSwapper(inIsBigEndian, inCharset, U_IS_BIG_ENDIAN, U_CHARSET_FAMILY, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_openSwapper(\"%s\") failed - %s\n", + filename, u_errorName(errorCode)); + exit(errorCode); + } + + ds->printError=printPackageError; + ds->printErrorContext=stderr; + + headerLength=sizeof(header); + if(length<headerLength) { + headerLength=length; + } + headerLength=udata_swapDataHeader(ds, inData, headerLength, header, &errorCode); + if(U_FAILURE(errorCode)) { + exit(errorCode); + } + + /* check data format and format version */ + pInfo=(const UDataInfo *)((const char *)inData+4); + if(!( + pInfo->dataFormat[0]==0x43 && /* dataFormat="CmnD" */ + pInfo->dataFormat[1]==0x6d && + pInfo->dataFormat[2]==0x6e && + pInfo->dataFormat[3]==0x44 && + pInfo->formatVersion[0]==1 + )) { + fprintf(stderr, "icupkg: data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as an ICU .dat package\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + pInfo->formatVersion[0]); + exit(U_UNSUPPORTED_ERROR); + } + inIsBigEndian=(UBool)pInfo->isBigEndian; + inCharset=pInfo->charsetFamily; + + inBytes=(const uint8_t *)inData+headerLength; + inEntries=(const UDataOffsetTOCEntry *)(inBytes+4); + + /* check that the itemCount fits, then the ToC table, then at least the header of the last item */ + length-=headerLength; + if(length<4) { + /* itemCount does not fit */ + offset=0x7fffffff; + } else { + itemCount=udata_readInt32(ds, *(const int32_t *)inBytes); + if(itemCount==0) { + offset=4; + } else if(length<(4+8*itemCount)) { + /* ToC table does not fit */ + offset=0x7fffffff; + } else { + /* offset of the last item plus at least 20 bytes for its header */ + offset=20+(int32_t)ds->readUInt32(inEntries[itemCount-1].dataOffset); + } + } + if(length<offset) { + fprintf(stderr, "icupkg: too few bytes (%ld after header) for a .dat package\n", + (long)length); + exit(U_INDEX_OUTOFBOUNDS_ERROR); + } + /* do not modify the package length variable until the last item's length is set */ + + if(itemCount>0) { + char prefix[MAX_PKG_NAME_LENGTH+4]; + char *s, *inItemStrings; + int32_t inPkgNameLength, prefixLength, stringsOffset; + + if(itemCount>MAX_FILE_COUNT) { + fprintf(stderr, "icupkg: too many items, maximum is %d\n", MAX_FILE_COUNT); + exit(U_BUFFER_OVERFLOW_ERROR); + } + + /* swap the item name strings */ + stringsOffset=4+8*itemCount; + itemLength=(int32_t)(ds->readUInt32(inEntries[0].dataOffset))-stringsOffset; + + // don't include padding bytes at the end of the item names + while(itemLength>0 && inBytes[stringsOffset+itemLength-1]!=0) { + --itemLength; + } + + if((inStringTop+itemLength)>STRING_STORE_SIZE) { + fprintf(stderr, "icupkg: total length of item name strings too long\n"); + exit(U_BUFFER_OVERFLOW_ERROR); + } + + inItemStrings=inStrings+inStringTop; + ds->swapInvChars(ds, inBytes+stringsOffset, itemLength, inItemStrings, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg failed to swap the input .dat package item name strings\n"); + exit(U_INVALID_FORMAT_ERROR); + } + inStringTop+=itemLength; + + // reset the Item entries + memset(items, 0, itemCount*sizeof(Item)); + + inPkgNameLength=strlen(inPkgName); + memcpy(prefix, inPkgName, inPkgNameLength); + prefixLength=inPkgNameLength; + + /* + * Get the common prefix of the items. + * New-style ICU .dat packages use tree separators ('/') between package names, + * tree names, and item names, + * while old-style ICU .dat packages (before multi-tree support) + * use an underscore ('_') between package and item names. + */ + offset=(int32_t)ds->readUInt32(inEntries[0].nameOffset)-stringsOffset; + s=inItemStrings+offset; + if( (int32_t)strlen(s)>=(inPkgNameLength+2) && + 0==memcmp(s, inPkgName, inPkgNameLength) && + s[inPkgNameLength]=='_' + ) { + // old-style .dat package + prefix[prefixLength++]='_'; + } else { + // new-style .dat package + prefix[prefixLength++]=U_TREE_ENTRY_SEP_CHAR; + // if it turns out to not contain U_TREE_ENTRY_SEP_CHAR + // then the test in the loop below will fail + } + prefix[prefixLength]=0; + + /* read the ToC table */ + for(i=0; i<itemCount; ++i) { + // skip the package part of the item name, error if it does not match the actual package name + // or if nothing follows the package name + offset=(int32_t)ds->readUInt32(inEntries[i].nameOffset)-stringsOffset; + s=inItemStrings+offset; + if(0!=strncmp(s, prefix, prefixLength) || s[prefixLength]==0) { + fprintf(stderr, "icupkg: input .dat item name \"%s\" does not start with \"%s\"\n", + s, prefix); + exit(U_UNSUPPORTED_ERROR); + } + items[i].name=s+prefixLength; + + // set the item's data + items[i].data=(uint8_t *)inBytes+ds->readUInt32(inEntries[i].dataOffset); + if(i>0) { + items[i-1].length=(int32_t)(items[i].data-items[i-1].data); + + // set the previous item's platform type + typeEnum=getTypeEnumForInputData(items[i-1].data, items[i-1].length, &errorCode); + if(typeEnum<0 || U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: not an ICU data file: item \"%s\" in \"%s\"\n", items[i-1].name, filename); + exit(U_INVALID_FORMAT_ERROR); + } + items[i-1].type=makeTypeLetter(typeEnum); + } + items[i].isDataOwned=FALSE; + } + // set the last item's length + items[itemCount-1].length=length-ds->readUInt32(inEntries[itemCount-1].dataOffset); + + // set the last item's platform type + typeEnum=getTypeEnumForInputData(items[itemCount-1].data, items[itemCount-1].length, &errorCode); + if(typeEnum<0 || U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: not an ICU data file: item \"%s\" in \"%s\"\n", items[i-1].name, filename); + exit(U_INVALID_FORMAT_ERROR); + } + items[itemCount-1].type=makeTypeLetter(typeEnum); + + if(type!=U_ICUDATA_TYPE_LETTER[0]) { + // sort the item names for the local charset + sortItems(); + } + } + + udata_closeSwapper(ds); +} + +char +Package::getInType() { + return makeTypeLetter(inCharset, inIsBigEndian); +} + +void +Package::writePackage(const char *filename, char outType, const char *comment) { + char prefix[MAX_PKG_NAME_LENGTH+4]; + UDataOffsetTOCEntry entry; + UDataSwapper *dsLocalToOut, *ds[TYPE_COUNT]; + FILE *file; + Item *pItem; + char *name; + UErrorCode errorCode; + int32_t i, length, prefixLength, maxItemLength, basenameOffset, offset, outInt32; + uint8_t outCharset; + UBool outIsBigEndian; + + extractPackageName(filename, prefix, MAX_PKG_NAME_LENGTH); + + // if there is an explicit comment, then use it, else use what's in the current header + if(comment!=NULL) { + /* get the header size minus the current comment */ + DataHeader *pHeader; + int32_t length; + + pHeader=(DataHeader *)header; + headerLength=4+pHeader->info.size; + length=(int32_t)strlen(comment); + if((int32_t)(headerLength+length)>=(int32_t)sizeof(header)) { + fprintf(stderr, "icupkg: comment too long\n"); + exit(U_BUFFER_OVERFLOW_ERROR); + } + memcpy(header+headerLength, comment, length+1); + headerLength+=length; + if(headerLength&0xf) { + /* NUL-pad the header to a multiple of 16 */ + length=(headerLength+0xf)&~0xf; + memset(header+headerLength, 0, length-headerLength); + headerLength=length; + } + pHeader->dataHeader.headerSize=(uint16_t)headerLength; + } + + makeTypeProps(outType, outCharset, outIsBigEndian); + + // open (TYPE_COUNT-2) swappers + // one is a no-op for local type==outType + // one type (TYPE_LE) is bogus + errorCode=U_ZERO_ERROR; + i=makeTypeEnum(outType); + ds[TYPE_B]= i==TYPE_B ? NULL : udata_openSwapper(TRUE, U_ASCII_FAMILY, outIsBigEndian, outCharset, &errorCode); + ds[TYPE_L]= i==TYPE_L ? NULL : udata_openSwapper(FALSE, U_ASCII_FAMILY, outIsBigEndian, outCharset, &errorCode); + ds[TYPE_LE]=NULL; + ds[TYPE_E]= i==TYPE_E ? NULL : udata_openSwapper(TRUE, U_EBCDIC_FAMILY, outIsBigEndian, outCharset, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_openSwapper() failed - %s\n", u_errorName(errorCode)); + exit(errorCode); + } + for(i=0; i<TYPE_COUNT; ++i) { + if(ds[i]!=NULL) { + ds[i]->printError=printPackageError; + ds[i]->printErrorContext=stderr; + } + } + + dsLocalToOut=ds[makeTypeEnum(U_CHARSET_FAMILY, U_IS_BIG_ENDIAN)]; + + // create the file and write its contents + file=fopen(filename, "wb"); + if(file==NULL) { + fprintf(stderr, "icupkg: unable to create file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + + // swap and write the header + if(dsLocalToOut!=NULL) { + udata_swapDataHeader(dsLocalToOut, header, headerLength, header, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_swapDataHeader(local to out) failed - %s\n", u_errorName(errorCode)); + exit(errorCode); + } + } + length=(int32_t)fwrite(header, 1, headerLength, file); + if(length!=headerLength) { + fprintf(stderr, "icupkg: unable to write complete header to file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + + // prepare and swap the package name with a tree separator + // for prepending to item names + strcat(prefix, U_TREE_ENTRY_SEP_STRING); + prefixLength=(int32_t)strlen(prefix); + if(dsLocalToOut!=NULL) { + dsLocalToOut->swapInvChars(dsLocalToOut, prefix, prefixLength, prefix, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: swapInvChars(output package name) failed - %s\n", u_errorName(errorCode)); + exit(errorCode); + } + + // swap and sort the item names (sorting needs to be done in the output charset) + dsLocalToOut->swapInvChars(dsLocalToOut, inStrings, inStringTop, inStrings, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: swapInvChars(item names) failed - %s\n", u_errorName(errorCode)); + exit(errorCode); + } + sortItems(); + } + + // create the output item names in sorted order, with the package name prepended to each + for(i=0; i<itemCount; ++i) { + length=(int32_t)strlen(items[i].name); + name=allocString(FALSE, length+prefixLength); + memcpy(name, prefix, prefixLength); + memcpy(name+prefixLength, items[i].name, length+1); + items[i].name=name; + } + + // calculate offsets for item names and items, pad to 16-align items + // align only the first item; each item's length is a multiple of 16 + basenameOffset=4+8*itemCount; + offset=basenameOffset+outStringTop; + if((length=(offset&15))!=0) { + length=16-length; + memset(allocString(FALSE, length-1), 0xaa, length); + offset+=length; + } + + // write the table of contents + // first the itemCount + outInt32=itemCount; + if(dsLocalToOut!=NULL) { + dsLocalToOut->swapArray32(dsLocalToOut, &outInt32, 4, &outInt32, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: swapArray32(item count) failed - %s\n", u_errorName(errorCode)); + exit(errorCode); + } + } + length=(int32_t)fwrite(&outInt32, 1, 4, file); + if(length!=4) { + fprintf(stderr, "icupkg: unable to write complete item count to file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + + // then write the item entries (and collect the maxItemLength) + maxItemLength=0; + for(i=0; i<itemCount; ++i) { + entry.nameOffset=(uint32_t)(basenameOffset+(items[i].name-outStrings)); + entry.dataOffset=(uint32_t)offset; + if(dsLocalToOut!=NULL) { + dsLocalToOut->swapArray32(dsLocalToOut, &entry, 8, &entry, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: swapArray32(item entry %ld) failed - %s\n", (long)i, u_errorName(errorCode)); + exit(errorCode); + } + } + length=(int32_t)fwrite(&entry, 1, 8, file); + if(length!=8) { + fprintf(stderr, "icupkg: unable to write complete item entry %ld to file \"%s\"\n", (long)i, filename); + exit(U_FILE_ACCESS_ERROR); + } + + length=items[i].length; + if(length>maxItemLength) { + maxItemLength=length; + } + offset+=length; + } + + // write the item names + length=(int32_t)fwrite(outStrings, 1, outStringTop, file); + if(length!=outStringTop) { + fprintf(stderr, "icupkg: unable to write complete item names to file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + + // write the items + for(pItem=items, i=0; i<itemCount; ++pItem, ++i) { + int32_t type=makeTypeEnum(pItem->type); + if(ds[type]!=NULL) { + // swap each item from its platform properties to the desired ones + udata_swap( + ds[type], + pItem->data, pItem->length, pItem->data, + &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_swap(item %ld) failed - %s\n", (long)i, u_errorName(errorCode)); + exit(errorCode); + } + } + length=(int32_t)fwrite(pItem->data, 1, pItem->length, file); + if(length!=pItem->length) { + fprintf(stderr, "icupkg: unable to write complete item %ld to file \"%s\"\n", (long)i, filename); + exit(U_FILE_ACCESS_ERROR); + } + } + + if(ferror(file)) { + fprintf(stderr, "icupkg: unable to write complete file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + + fclose(file); + for(i=0; i<TYPE_COUNT; ++i) { + udata_closeSwapper(ds[i]); + } +} + +int32_t +Package::findItem(const char *name, int32_t length) { + int32_t i, start, limit; + int result; + + /* do a binary search for the string */ + start=0; + limit=itemCount; + while(start<limit) { + i=(start+limit)/2; + if(length>=0) { + result=strncmp(name, items[i].name, length); + } else { + result=strcmp(name, items[i].name); + } + + if(result==0) { + /* found */ + if(length>=0) { + /* + * if we compared just prefixes, then we may need to back up + * to the first item with this prefix + */ + while(i>0 && 0==strncmp(name, items[i-1].name, length)) { + --i; + } + } + return i; + } else if(result<0) { + limit=i; + } else /* result>0 */ { + start=i+1; + } + } + + return ~start; /* not found, return binary-not of the insertion point */ +} + +void +Package::findItems(const char *pattern) { + const char *wild; + + if(pattern==NULL || *pattern==0) { + findNextIndex=-1; + return; + } + + findPrefix=pattern; + findSuffix=NULL; + findSuffixLength=0; + + wild=strchr(pattern, '*'); + if(wild==NULL) { + // no wildcard + findPrefixLength=(int32_t)strlen(pattern); + } else { + // one wildcard + findPrefixLength=(int32_t)(wild-pattern); + findSuffix=wild+1; + findSuffixLength=(int32_t)strlen(findSuffix); + if(NULL!=strchr(findSuffix, '*')) { + // two or more wildcards + fprintf(stderr, "icupkg: syntax error (more than one '*') in item pattern \"%s\"\n", pattern); + exit(U_PARSE_ERROR); + } + } + + if(findPrefixLength==0) { + findNextIndex=0; + } else { + findNextIndex=findItem(findPrefix, findPrefixLength); + } +} + +int32_t +Package::findNextItem() { + const char *name, *middle, *treeSep; + int32_t index, nameLength, middleLength; + + if(findNextIndex<0) { + return -1; + } + + while(findNextIndex<itemCount) { + index=findNextIndex++; + name=items[index].name; + nameLength=(int32_t)strlen(name); + if(nameLength<(findPrefixLength+findSuffixLength)) { + // item name too short for prefix & suffix + continue; + } + if(findPrefixLength>0 && 0!=memcmp(findPrefix, name, findPrefixLength)) { + // left the range of names with this prefix + break; + } + middle=name+findPrefixLength; + middleLength=nameLength-findPrefixLength-findSuffixLength; + if(findSuffixLength>0 && 0!=memcmp(findSuffix, name+(nameLength-findSuffixLength), findSuffixLength)) { + // suffix does not match + continue; + } + // prefix & suffix match + + if(matchMode&MATCH_NOSLASH) { + treeSep=strchr(middle, U_TREE_ENTRY_SEP_CHAR); + if(treeSep!=NULL && (treeSep-middle)<middleLength) { + // the middle (matching the * wildcard) contains a tree separator / + continue; + } + } + + // found a matching item + return index; + } + + // no more items + findNextIndex=-1; + return -1; +} + +void +Package::setMatchMode(uint32_t mode) { + matchMode=mode; +} + +void +Package::addItem(const char *name) { + addItem(name, NULL, 0, FALSE, U_ICUDATA_TYPE_LETTER[0]); +} + +void +Package::addItem(const char *name, uint8_t *data, int32_t length, UBool isDataOwned, char type) { + int32_t index; + + index=findItem(name); + if(index<0) { + // new item, make space at the insertion point + if(itemCount>=MAX_FILE_COUNT) { + fprintf(stderr, "icupkg: too many items, maximum is %d\n", MAX_FILE_COUNT); + exit(U_BUFFER_OVERFLOW_ERROR); + } + // move the following items down + index=~index; + if(index<itemCount) { + memmove(items+index+1, items+index, (itemCount-index)*sizeof(Item)); + } + ++itemCount; + + // reset this Item entry + memset(items+index, 0, sizeof(Item)); + + // copy the item's name + items[index].name=allocString(TRUE, strlen(name)); + strcpy(items[index].name, name); + pathToTree(items[index].name); + } else { + // same-name item found, replace it + if(items[index].isDataOwned) { + free(items[index].data); + } + + // keep the item's name since it is the same + } + + // set the item's data + items[index].data=data; + items[index].length=length; + items[index].isDataOwned=isDataOwned; + items[index].type=type; +} + +void +Package::addFile(const char *filesPath, const char *name) { + uint8_t *data; + int32_t length; + char type; + + data=readFile(filesPath, name, length, type); + // readFile() exits the tool if it fails + addItem(name, data, length, TRUE, type); +} + +void +Package::addItems(const Package &listPkg) { + const Item *pItem; + int32_t i; + + for(pItem=listPkg.items, i=0; i<listPkg.itemCount; ++pItem, ++i) { + addItem(pItem->name, pItem->data, pItem->length, FALSE, pItem->type); + } +} + +void +Package::removeItem(int32_t index) { + if(index>=0) { + // remove the item + if(items[index].isDataOwned) { + free(items[index].data); + } + + // move the following items up + if((index+1)<itemCount) { + memmove(items+index, items+index+1, (itemCount-(index+1))*sizeof(Item)); + } + --itemCount; + + if(index<=findNextIndex) { + --findNextIndex; + } + } +} + +void +Package::removeItems(const char *pattern) { + int32_t index; + + findItems(pattern); + while((index=findNextItem())>=0) { + removeItem(index); + } +} + +void +Package::removeItems(const Package &listPkg) { + const Item *pItem; + int32_t i; + + for(pItem=listPkg.items, i=0; i<listPkg.itemCount; ++pItem, ++i) { + removeItems(pItem->name); + } +} + +void +Package::extractItem(const char *filesPath, const char *outName, int32_t index, char outType) { + char filename[1024]; + UDataSwapper *ds; + FILE *file; + Item *pItem; + int32_t fileLength; + uint8_t itemCharset, outCharset; + UBool itemIsBigEndian, outIsBigEndian; + + if(index<0 || itemCount<=index) { + return; + } + pItem=items+index; + + // swap the data to the outType + // outType==0: don't swap + if(outType!=0 && pItem->type!=outType) { + // open the swapper + UErrorCode errorCode=U_ZERO_ERROR; + makeTypeProps(pItem->type, itemCharset, itemIsBigEndian); + makeTypeProps(outType, outCharset, outIsBigEndian); + ds=udata_openSwapper(itemIsBigEndian, itemCharset, outIsBigEndian, outCharset, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_openSwapper(item %ld) failed - %s\n", + (long)index, u_errorName(errorCode)); + exit(errorCode); + } + + ds->printError=printPackageError; + ds->printErrorContext=stderr; + + // swap the item from its platform properties to the desired ones + udata_swap(ds, pItem->data, pItem->length, pItem->data, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_swap(item %ld) failed - %s\n", (long)index, u_errorName(errorCode)); + exit(errorCode); + } + udata_closeSwapper(ds); + } + + // create the file and write its contents + makeFullFilenameAndDirs(filesPath, outName, filename, (int32_t)sizeof(filename)); + file=fopen(filename, "wb"); + if(file==NULL) { + fprintf(stderr, "icupkg: unable to create file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + fileLength=(int32_t)fwrite(pItem->data, 1, pItem->length, file); + + if(ferror(file) || fileLength!=pItem->length) { + fprintf(stderr, "icupkg: unable to write complete file \"%s\"\n", filename); + exit(U_FILE_ACCESS_ERROR); + } + fclose(file); +} + +void +Package::extractItem(const char *filesPath, int32_t index, char outType) { + extractItem(filesPath, items[index].name, index, outType); +} + +void +Package::extractItems(const char *filesPath, const char *pattern, char outType) { + int32_t index; + + findItems(pattern); + while((index=findNextItem())>=0) { + extractItem(filesPath, index, outType); + } +} + +void +Package::extractItems(const char *filesPath, const Package &listPkg, char outType) { + const Item *pItem; + int32_t i; + + for(pItem=listPkg.items, i=0; i<listPkg.itemCount; ++pItem, ++i) { + extractItems(filesPath, pItem->name, outType); + } +} + +void +Package::listItems(FILE *file) { + int32_t i; + + for(i=0; i<itemCount; ++i) { + fprintf(file, "%s\n", items[i].name); + } +} + +void +Package::checkDependency(void *context, const char *itemName, const char *targetName) { + // check dependency: make sure the target item is in the package + Package *me=(Package *)context; + if(me->findItem(targetName)<0) { + me->isMissingItems=TRUE; + fprintf(stderr, "Item %s depends on missing item %s\n", itemName, targetName); + } +} + +UBool +Package::checkDependencies() { + int32_t i; + + isMissingItems=FALSE; + for(i=0; i<itemCount; ++i) { + enumDependencies(items+i); + } + return (UBool)!isMissingItems; +} + +char * +Package::allocString(UBool in, int32_t length) { + char *p; + int32_t top; + + if(in) { + top=inStringTop; + p=inStrings+top; + } else { + top=outStringTop; + p=outStrings+top; + } + top+=length+1; + + if(top>STRING_STORE_SIZE) { + fprintf(stderr, "icupkg: string storage overflow\n"); + exit(U_BUFFER_OVERFLOW_ERROR); + } + if(in) { + inStringTop=top; + } else { + outStringTop=top; + } + return p; +} + +void +Package::sortItems() { + UErrorCode errorCode=U_ZERO_ERROR; + uprv_sortArray(items, itemCount, (int32_t)sizeof(Item), compareItems, NULL, FALSE, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: sorting item names failed - %s\n", u_errorName(errorCode)); + exit(errorCode); + } +} diff --git a/icuSources/tools/toolutil/package.h b/icuSources/tools/toolutil/package.h new file mode 100644 index 00000000..8e50975e --- /dev/null +++ b/icuSources/tools/toolutil/package.h @@ -0,0 +1,159 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: package.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005aug25 +* created by: Markus W. Scherer +* +* Read, modify, and write ICU .dat data package files. +*/ + +#ifndef __PACKAGE_H__ +#define __PACKAGE_H__ + +#include "unicode/utypes.h" + +#include <stdio.h> + +// .dat package file representation ---------------------------------------- *** + +#define STRING_STORE_SIZE 100000 +#define MAX_FILE_COUNT 2000 +#define MAX_PKG_NAME_LENGTH 32 + +U_NAMESPACE_BEGIN + +struct Item { + char *name; + uint8_t *data; + int32_t length; + UBool isDataOwned; + char type; +}; + +class U_TOOLUTIL_API Package { +public: + /* + * Constructor. + * Prepare this object for a new, empty package. + */ + Package(); + + /* Destructor. */ + ~Package(); + + /* + * Read an existing .dat package file. + * The header and item name strings are swapped into this object, + * but the items are left unswapped. + */ + void readPackage(const char *filename); + /* + * Write a .dat package file with the items in this object. + * Swap all pieces to the desired output platform properties. + * The package becomes unusable: + * The item names are swapped and sorted in the outCharset rather than the local one. + * Also, the items themselves are swapped in-place + */ + void writePackage(const char *filename, char outType, const char *comment); + + /* + * Return the input data type letter (l, b, or e). + */ + char getInType(); + + // find the item in items[], return the non-negative index if found, else the binary-not of the insertion point + int32_t findItem(const char *name, int32_t length=-1); + + /* + * Set internal state for following calls to findNextItem() which will return + * indexes for items whose names match the pattern. + */ + void findItems(const char *pattern); + int32_t findNextItem(); + /* + * Set the match mode for findItems() & findNextItem(). + * @param mode 0=default + * MATCH_NOSLASH * does not match a '/' + */ + void setMatchMode(uint32_t mode); + + enum { + MATCH_NOSLASH=1 + }; + + void addItem(const char *name); + void addItem(const char *name, uint8_t *data, int32_t length, UBool isDataOwned, char type); + void addFile(const char *filesPath, const char *name); + void addItems(const Package &listPkg); + + void removeItem(int32_t index); + void removeItems(const char *pattern); + void removeItems(const Package &listPkg); + + /* The extractItem() functions accept outputType=0 to mean "don't swap the item". */ + void extractItem(const char *filesPath, int32_t index, char outType); + void extractItems(const char *filesPath, const char *pattern, char outType); + void extractItems(const char *filesPath, const Package &listPkg, char outType); + + /* This variant extracts an item to a specific filename. */ + void extractItem(const char *filesPath, const char *outName, int32_t index, char outType); + + void listItems(FILE *file); + + /* + * Check dependencies and return TRUE if all dependencies are fulfilled. + */ + UBool checkDependencies(); + +private: + void enumDependencies(Item *pItem); + + static void checkDependency(void *context, const char *itemName, const char *targetName); + + /* + * Allocate a string in inStrings or outStrings. + * The length does not include the terminating NUL. + */ + char *allocString(UBool in, int32_t length); + + void sortItems(); + + // data fields + char inPkgName[MAX_PKG_NAME_LENGTH]; + + uint8_t *inData; + uint8_t header[1024]; + int32_t inLength, headerLength; + uint8_t inCharset; + UBool inIsBigEndian; + + int32_t itemCount; + Item items[MAX_FILE_COUNT]; + + int32_t inStringTop, outStringTop; + char inStrings[STRING_STORE_SIZE], outStrings[STRING_STORE_SIZE]; + + // match mode for findItems(pattern) and findNextItem() + uint32_t matchMode; + + // state for findItems(pattern) and findNextItem() + const char *findPrefix, *findSuffix; + int32_t findPrefixLength, findSuffixLength; + int32_t findNextIndex; + + // state for checkDependencies() + UBool isMissingItems; +}; + +U_NAMESPACE_END + +#endif diff --git a/icuSources/tools/toolutil/pkg_imp.h b/icuSources/tools/toolutil/pkg_imp.h new file mode 100644 index 00000000..0b0c2b74 --- /dev/null +++ b/icuSources/tools/toolutil/pkg_imp.h @@ -0,0 +1,35 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: pkg_imp.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005sep18 +* created by: Markus W. Scherer +* +* Implementation definitions for data package functions in toolutil. +*/ + +#ifndef __PKG_IMP_H__ +#define __PKG_IMP_H__ + +#include "unicode/utypes.h" + +/* + * Read an ICU data item with any platform type, + * return the pointer to the UDataInfo in its header, + * and set the lengths of the UDataInfo and of the whole header. + * All data remains in its platform type. + */ +U_CFUNC const UDataInfo * +getDataInfo(const uint8_t *data, int32_t length, + int32_t &infoLength, int32_t &headerLength, + UErrorCode *pErrorCode); + +#endif diff --git a/icuSources/tools/toolutil/pkgitems.cpp b/icuSources/tools/toolutil/pkgitems.cpp new file mode 100644 index 00000000..bddbfa5b --- /dev/null +++ b/icuSources/tools/toolutil/pkgitems.cpp @@ -0,0 +1,638 @@ +/* +******************************************************************************* +* +* Copyright (C) 2003-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: pkgitems.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005sep18 +* created by: Markus W. Scherer +* +* Companion file to package.cpp. Deals with details of ICU data item formats. +* Used for item dependencies. +* Contains adapted code from uresdata.c and ucnv_bld.c (swapper code from 2003). +*/ + +#include "unicode/utypes.h" +#include "unicode/ures.h" +#include "unicode/putil.h" +#include "unicode/udata.h" +#include "cstring.h" +#include "ucmndata.h" +#include "udataswp.h" +#include "swapimpl.h" +#include "toolutil.h" +#include "package.h" +#include "pkg_imp.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* item formats in common */ + +#include "uresdata.h" +#include "ucnv_bld.h" +#include "ucnv_io.h" + +// general definitions ----------------------------------------------------- *** + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +U_CDECL_BEGIN + +static void U_CALLCONV +printError(void *context, const char *fmt, va_list args) { + vfprintf((FILE *)context, fmt, args); +} + +U_CDECL_END + +typedef void CheckDependency(void *context, const char *itemName, const char *targetName); + +// check a dependency ------------------------------------------------------ *** + +/* + * assemble the target item name from the source item name, an ID + * and a suffix + */ +static void +checkIDSuffix(const char *itemName, const char *id, int32_t idLength, const char *suffix, + CheckDependency check, void *context, + UErrorCode *pErrorCode) { + char target[200]; + const char *itemID; + int32_t treeLength, suffixLength, targetLength; + + // get the item basename + itemID=strrchr(itemName, '/'); + if(itemID!=NULL) { + ++itemID; + } else { + itemID=itemName; + } + + // build the target string + treeLength=(int32_t)(itemID-itemName); + if(idLength<0) { + idLength=(int32_t)strlen(id); + } + suffixLength=(int32_t)strlen(suffix); + targetLength=treeLength+idLength+suffixLength; + if(targetLength>=(int32_t)sizeof(target)) { + fprintf(stderr, "icupkg/checkIDSuffix(%s) alias target item name length %ld too long\n", + itemName, (long)targetLength); + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + return; + } + + memcpy(target, itemName, treeLength); + memcpy(target+treeLength, id, idLength); + memcpy(target+treeLength+idLength, suffix, suffixLength+1); // +1 includes the terminating NUL + + check(context, itemName, target); +} + +/* assemble the target item name from the item's parent item name */ +static void +checkParent(const char *itemName, CheckDependency check, void *context, + UErrorCode *pErrorCode) { + const char *itemID, *parent, *parentLimit, *suffix; + int32_t parentLength; + + // get the item basename + itemID=strrchr(itemName, '/'); + if(itemID!=NULL) { + ++itemID; + } else { + itemID=itemName; + } + + // get the item suffix + suffix=strrchr(itemID, '.'); + if(suffix==NULL) { + // empty suffix, point to the end of the string + suffix=strrchr(itemID, 0); + } + + // get the position of the last '_' + for(parentLimit=suffix; parentLimit>itemID && *--parentLimit!='_';) {} + + if(parentLimit!=itemID) { + // get the parent item name by truncating the last part of this item's name */ + parent=itemID; + parentLength=(int32_t)(parentLimit-itemID); + } else { + // no '_' in the item name: the parent is the root bundle + parent="root"; + parentLength=4; + if((suffix-itemID)==parentLength && 0==memcmp(itemID, parent, parentLength)) { + // the item itself is "root", which does not depend on a parent + return; + } + } + checkIDSuffix(itemName, parent, parentLength, suffix, check, context, pErrorCode); +} + +// get dependencies from resource bundles ---------------------------------- *** + +static const char *const gAliasKey="%%ALIAS"; +enum { gAliasKeyLength=7 }; + +/* + * Enumerate one resource item and its children and extract dependencies from + * aliases. + * Code adapted from ures_preflightResource() and ures_swapResource(). + */ +static void +ures_enumDependencies(const UDataSwapper *ds, + const char *itemName, + const Resource *inBundle, int32_t length, + Resource res, const char *inKey, int32_t depth, + CheckDependency check, void *context, + UErrorCode *pErrorCode) { + const Resource *p; + int32_t offset; + + if(res==0 || RES_GET_TYPE(res)==URES_INT) { + /* empty string or integer, nothing to do */ + return; + } + + /* all other types use an offset to point to their data */ + offset=(int32_t)RES_GET_OFFSET(res); + if(0<=length && length<=offset) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s res=%08x) resource offset exceeds bundle length %d\n", + itemName, res, length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return; + } + p=inBundle+offset; + + switch(RES_GET_TYPE(res)) { + /* strings and aliases have physically the same value layout */ + case URES_STRING: + // we ignore all strings except top-level strings with a %%ALIAS key + if(depth!=1) { + break; + } else { + char key[8]; + int32_t keyLength; + + keyLength=(int32_t)strlen(inKey); + if(keyLength!=gAliasKeyLength) { + break; + } + ds->swapInvChars(ds, inKey, gAliasKeyLength+1, key, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s res=%08x) string key contains variant characters\n", + itemName, res); + return; + } + if(0!=strcmp(key, gAliasKey)) { + break; + } + } + // for the top-level %%ALIAS string fall through to URES_ALIAS + case URES_ALIAS: + { + char localeID[32]; + const uint16_t *p16; + int32_t i, stringLength; + uint16_t u16, ored16; + + stringLength=udata_readInt32(ds, (int32_t)*p); + + /* top=offset+1+(string length +1)/2 rounded up */ + offset+=1+((stringLength+1)+1)/2; + if(offset>length) { + break; // the resource does not fit into the bundle, print error below + } + + // extract the locale ID from alias strings like + // locale_ID/key1/key2/key3 + // locale_ID + if(U_IS_BIG_ENDIAN==ds->inIsBigEndian) { + u16=0x2f; // slash in local endianness + } else { + u16=0x2f00; // slash in opposite endianness + } + p16=(const uint16_t *)(p+1); // Unicode string contents + + // search for the first slash + for(i=0; i<stringLength && p16[i]!=u16; ++i) {} + + if(RES_GET_TYPE(res)==URES_ALIAS) { + // ignore aliases with an initial slash: + // /ICUDATA/... and /pkgname/... go to a different package + // /LOCALE/... are for dynamic sideways fallbacks and don't go to a fixed bundle + if(i==0) { + break; // initial slash ('/') + } + + // ignore the intra-bundle path starting from the first slash ('/') + stringLength=i; + } else /* URES_STRING */ { + // the whole string should only consist of a locale ID + if(i!=stringLength) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s res=%08x) %%ALIAS contains a '/'\n", + itemName, res); + *pErrorCode=U_UNSUPPORTED_ERROR; + return; + } + } + + // convert the Unicode string to char * and + // check that it has a bundle path but no package + if(stringLength>=(int32_t)sizeof(localeID)) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s res=%08x) alias locale ID length %ld too long\n", + itemName, res, stringLength); + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + return; + } + + // convert the alias Unicode string to US-ASCII + ored16=0; + if(U_IS_BIG_ENDIAN==ds->inIsBigEndian) { + for(i=0; i<stringLength; ++i) { + u16=p16[i]; + ored16|=u16; + localeID[i]=(char)u16; + } + } else { + for(i=0; i<stringLength; ++i) { + u16=p16[i]; + ored16|=u16; + localeID[i]=(char)(u16>>8); + } + ored16=(uint16_t)((ored16<<8)|(ored16>>8)); + } + localeID[stringLength]=0; + if(ored16>0x7f) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s res=%08x) alias string contains non-ASCII characters\n", + itemName, res); + *pErrorCode=U_INVALID_CHAR_FOUND; + return; + } + + if(U_CHARSET_FAMILY==U_EBCDIC_FAMILY) { + // swap to EBCDIC + // our swapper is probably not the right one, but + // the function uses it only for printing errors + uprv_ebcdicFromAscii(ds, localeID, stringLength, localeID, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + return; + } + } +#if U_CHARSET_FAMILY!=U_ASCII_FAMILY && U_CHARSET_FAMILY!=U_EBCDIC_FAMILY +# error Unknown U_CHARSET_FAMILY value! +#endif + + checkIDSuffix(itemName, localeID, -1, ".res", check, context, pErrorCode); + } + break; + case URES_TABLE: + case URES_TABLE32: + { + const uint16_t *pKey16; + const int32_t *pKey32; + + Resource item; + int32_t i, count; + + if(RES_GET_TYPE(res)==URES_TABLE) { + /* get table item count */ + pKey16=(const uint16_t *)p; + count=ds->readUInt16(*pKey16++); + + pKey32=NULL; + + /* top=((1+ table item count)/2 rounded up)+(table item count) */ + offset+=((1+count)+1)/2; + } else { + /* get table item count */ + pKey32=(const int32_t *)p; + count=udata_readInt32(ds, *pKey32++); + + pKey16=NULL; + + /* top=(1+ table item count)+(table item count) */ + offset+=1+count; + } + + p=inBundle+offset; /* pointer to table resources */ + offset+=count; + + if(offset>length) { + break; // the resource does not fit into the bundle, print error below + } + + /* recurse */ + for(i=0; i<count; ++i) { + item=ds->readUInt32(*p++); + ures_enumDependencies( + ds, itemName, inBundle, length, item, + ((const char *)inBundle)+ + (pKey16!=NULL ? + ds->readUInt16(pKey16[i]) : + udata_readInt32(ds, pKey32[i])), + depth+1, + check, context, + pErrorCode); + if(U_FAILURE(*pErrorCode)) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s table res=%08x)[%d].recurse(%08x) failed\n", + itemName, res, i, item); + break; + } + } + } + break; + case URES_ARRAY: + { + Resource item; + int32_t i, count; + + /* top=offset+1+(array length) */ + count=udata_readInt32(ds, (int32_t)*p++); + offset+=1+count; + + if(offset>length) { + break; // the resource does not fit into the bundle, print error below + } + + /* recurse */ + for(i=0; i<count; ++i) { + item=ds->readUInt32(*p++); + ures_enumDependencies( + ds, itemName, inBundle, length, + item, NULL, depth+1, + check, context, + pErrorCode); + if(U_FAILURE(*pErrorCode)) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s array res=%08x)[%d].recurse(%08x) failed\n", + itemName, res, i, item); + break; + } + } + } + break; + default: + break; + } + + if(U_FAILURE(*pErrorCode)) { + /* nothing to do */ + } else if(0<=length && length<offset) { + udata_printError(ds, "icupkg/ures_enumDependencies(%s res=%08x) resource limit exceeds bundle length %d\n", + itemName, res, length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + } +} + +/* code adapted from ures_swap() */ +static void +ures_enumDependencies(const UDataSwapper *ds, + const char *itemName, const UDataInfo *pInfo, + const uint8_t *inBytes, int32_t length, + CheckDependency check, void *context, + UErrorCode *pErrorCode) { + const Resource *inBundle; + Resource rootRes; + + /* the following integers count Resource item offsets (4 bytes each), not bytes */ + int32_t bundleLength; + + /* check format version */ + if(pInfo->formatVersion[0]!=1) { + fprintf(stderr, "icupkg: .res format version %02x not supported\n", + pInfo->formatVersion[0]); + exit(U_UNSUPPORTED_ERROR); + } + + /* a resource bundle must contain at least one resource item */ + bundleLength=length/4; + + /* formatVersion 1.1 must have a root item and at least 5 indexes */ + if( bundleLength< + (pInfo->formatVersion[1]==0 ? 1 : 1+5) + ) { + fprintf(stderr, "icupkg: too few bytes (%d after header) for a resource bundle\n", + length); + exit(U_INDEX_OUTOFBOUNDS_ERROR); + } + + inBundle=(const Resource *)inBytes; + rootRes=ds->readUInt32(*inBundle); + + ures_enumDependencies( + ds, itemName, inBundle, bundleLength, + rootRes, NULL, 0, + check, context, + pErrorCode); + + /* + * if the bundle attributes are present and the nofallback flag is not set, + * then add the parent bundle as a dependency + */ + if(pInfo->formatVersion[1]>=1) { + int32_t indexes[URES_INDEX_TOP]; + const int32_t *inIndexes; + + inIndexes=(const int32_t *)inBundle+1; + indexes[URES_INDEX_LENGTH]=udata_readInt32(ds, inIndexes[URES_INDEX_LENGTH]); + if(indexes[URES_INDEX_LENGTH]>URES_INDEX_ATTRIBUTES) { + indexes[URES_INDEX_ATTRIBUTES]=udata_readInt32(ds, inIndexes[URES_INDEX_ATTRIBUTES]); + if(0==(indexes[URES_INDEX_ATTRIBUTES]&URES_ATT_NO_FALLBACK)) { + /* this bundle participates in locale fallback */ + checkParent(itemName, check, context, pErrorCode); + } + } + } +} + +// get dependencies from conversion tables --------------------------------- *** + +/* code adapted from ucnv_swap() */ +static void +ucnv_enumDependencies(const UDataSwapper *ds, + const char *itemName, const UDataInfo *pInfo, + const uint8_t *inBytes, int32_t length, + CheckDependency check, void *context, + UErrorCode *pErrorCode) { + uint32_t staticDataSize; + + const UConverterStaticData *inStaticData; + + const _MBCSHeader *inMBCSHeader; + uint8_t outputType; + + /* check format version */ + if(!( + pInfo->formatVersion[0]==6 && + pInfo->formatVersion[1]>=2 + )) { + fprintf(stderr, "icupkg/ucnv_enumDependencies(): .cnv format version %02x.%02x not supported\n", + pInfo->formatVersion[0], pInfo->formatVersion[1]); + exit(U_UNSUPPORTED_ERROR); + } + + /* read the initial UConverterStaticData structure after the UDataInfo header */ + inStaticData=(const UConverterStaticData *)inBytes; + + if( length<(int32_t)sizeof(UConverterStaticData) || + (uint32_t)length<(staticDataSize=ds->readUInt32(inStaticData->structSize)) + ) { + udata_printError(ds, "icupkg/ucnv_enumDependencies(): too few bytes (%d after header) for an ICU .cnv conversion table\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return; + } + + inBytes+=staticDataSize; + length-=(int32_t)staticDataSize; + + /* check for supported conversionType values */ + if(inStaticData->conversionType==UCNV_MBCS) { + /* MBCS data */ + uint32_t mbcsHeaderFlags; + int32_t extOffset; + + inMBCSHeader=(const _MBCSHeader *)inBytes; + + if(length<(int32_t)sizeof(_MBCSHeader)) { + udata_printError(ds, "icupkg/ucnv_enumDependencies(): too few bytes (%d after headers) for an ICU MBCS .cnv conversion table\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return; + } + if(!(inMBCSHeader->version[0]==4 && inMBCSHeader->version[1]>=1)) { + udata_printError(ds, "icupkg/ucnv_enumDependencies(): unsupported _MBCSHeader.version %d.%d\n", + inMBCSHeader->version[0], inMBCSHeader->version[1]); + *pErrorCode=U_UNSUPPORTED_ERROR; + return; + } + + mbcsHeaderFlags=ds->readUInt32(inMBCSHeader->flags); + extOffset=(int32_t)(mbcsHeaderFlags>>8); + outputType=(uint8_t)mbcsHeaderFlags; + + if(outputType==MBCS_OUTPUT_EXT_ONLY) { + /* + * extension-only file, + * contains a base name instead of normal base table data + */ + char baseName[32]; + int32_t baseNameLength; + + /* there is extension data after the base data, see ucnv_ext.h */ + if(length<(extOffset+UCNV_EXT_INDEXES_MIN_LENGTH*4)) { + udata_printError(ds, "icupkg/ucnv_enumDependencies(): too few bytes (%d after headers) for an ICU MBCS .cnv conversion table with extension data\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return; + } + + /* swap the base name, between the header and the extension data */ + baseNameLength=(int32_t)strlen((const char *)(inMBCSHeader+1)); + if(baseNameLength>=(int32_t)sizeof(baseName)) { + udata_printError(ds, "icupkg/ucnv_enumDependencies(%s): base name length %ld too long\n", + itemName, baseNameLength); + *pErrorCode=U_UNSUPPORTED_ERROR; + return; + } + ds->swapInvChars(ds, inMBCSHeader+1, baseNameLength+1, baseName, pErrorCode); + + checkIDSuffix(itemName, baseName, -1, ".cnv", check, context, pErrorCode); + } + } +} + +// ICU data formats -------------------------------------------------------- *** + +static const struct { + uint8_t dataFormat[4]; +} dataFormats[]={ + { { 0x52, 0x65, 0x73, 0x42 } }, /* dataFormat="ResB" */ + { { 0x63, 0x6e, 0x76, 0x74 } }, /* dataFormat="cnvt" */ + { { 0x43, 0x76, 0x41, 0x6c } } /* dataFormat="CvAl" */ +}; + +enum { + FMT_RES, + FMT_CNV, + FMT_ALIAS, + FMT_COUNT +}; + +static int32_t +getDataFormat(const uint8_t dataFormat[4]) { + int32_t i; + + for(i=0; i<FMT_COUNT; ++i) { + if(0==memcmp(dataFormats[i].dataFormat, dataFormat, 4)) { + return i; + } + } + return -1; +} + +// enumerate dependencies of a package item -------------------------------- *** + +U_NAMESPACE_BEGIN + +void +Package::enumDependencies(Item *pItem) { + const UDataInfo *pInfo; + const uint8_t *inBytes; + int32_t format, length, infoLength, itemHeaderLength; + UErrorCode errorCode; + + errorCode=U_ZERO_ERROR; + pInfo=getDataInfo(pItem->data,pItem->length, infoLength, itemHeaderLength, &errorCode); + if(U_FAILURE(errorCode)) { + return; // should not occur because readFile() checks headers + } + + // find the data format and call the corresponding function, if any + format=getDataFormat(pInfo->dataFormat); + if(format>=0) { + UDataSwapper *ds; + + // TODO: share/cache swappers + ds=udata_openSwapper((UBool)pInfo->isBigEndian, pInfo->charsetFamily, U_IS_BIG_ENDIAN, U_CHARSET_FAMILY, &errorCode); + if(U_FAILURE(errorCode)) { + fprintf(stderr, "icupkg: udata_openSwapper(\"%s\") failed - %s\n", + pItem->name, u_errorName(errorCode)); + exit(errorCode); + } + + ds->printError=printError; + ds->printErrorContext=stderr; + + inBytes=pItem->data+itemHeaderLength; + length=pItem->length-itemHeaderLength; + + switch(format) { + case FMT_RES: + ures_enumDependencies(ds, pItem->name, pInfo, inBytes, length, checkDependency, this, &errorCode); + break; + case FMT_CNV: + ucnv_enumDependencies(ds, pItem->name, pInfo, inBytes, length, checkDependency, this, &errorCode); + break; + default: + break; + } + + udata_closeSwapper(ds); + + if(U_FAILURE(errorCode)) { + exit(errorCode); + } + } +} +U_NAMESPACE_END diff --git a/icuSources/tools/toolutil/propsvec.c b/icuSources/tools/toolutil/propsvec.c index 84fb3311..c4cb7b17 100644 --- a/icuSources/tools/toolutil/propsvec.c +++ b/icuSources/tools/toolutil/propsvec.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -277,16 +277,17 @@ upvec_compareRows(const void *context, const void *l, const void *r) { } U_CAPI int32_t U_EXPORT2 -upvec_toTrie(uint32_t *pv, UNewTrie *trie, UErrorCode *pErrorCode) { +upvec_compact(uint32_t *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) { uint32_t *row; int32_t columns, valueColumns, rows, count; + UChar32 start, limit; /* argument checking */ if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return 0; } - if(pv==NULL || trie==NULL) { + if(pv==NULL || handler==NULL) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } @@ -295,6 +296,10 @@ upvec_toTrie(uint32_t *pv, UNewTrie *trie, UErrorCode *pErrorCode) { columns=(int32_t)pv[UPVEC_COLUMNS]; rows=(int32_t)pv[UPVEC_ROWS]; + if(rows==0) { + return 0; + } + /* sort the properties vectors to find unique vector values */ if(rows>1) { uprv_sortArray(pv+UPVEC_HEADER_LENGTH, rows, columns*4, @@ -306,7 +311,7 @@ upvec_toTrie(uint32_t *pv, UNewTrie *trie, UErrorCode *pErrorCode) { /* * Move vector contents up to a contiguous array with only unique - * vector values, and set indexes to those values into the trie. + * vector values, and call the handler function for each vector. * * This destroys the Properties Vector structure and replaces it * with an array of just vector values. @@ -315,19 +320,34 @@ upvec_toTrie(uint32_t *pv, UNewTrie *trie, UErrorCode *pErrorCode) { count=-valueColumns; do { + /* fetch these first before memmove() may overwrite them */ + start=(UChar32)row[0]; + limit=(UChar32)row[1]; + /* add a new values vector if it is different from the current one */ if(count<0 || 0!=uprv_memcmp(row+2, pv+count, valueColumns*4)) { count+=valueColumns; uprv_memmove(pv+count, row+2, valueColumns*4); } - if(count>0 && !utrie_setRange32(trie, (UChar32)row[0], (UChar32)row[1], (uint32_t)count, FALSE)) { - *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + handler(context, start, limit, count, pv+count, valueColumns, pErrorCode); + if(U_FAILURE(*pErrorCode)) { return 0; } row+=columns; } while(--rows>0); + /* count is at the beginning of the last vector, add valueColumns to include that last vector */ return count+valueColumns; } + +U_CAPI void U_CALLCONV +upvec_compactToTrieHandler(void *context, + UChar32 start, UChar32 limit, + int32_t rowIndex, uint32_t *row, int32_t columns, + UErrorCode *pErrorCode) { + if(!utrie_setRange32((UNewTrie *)context, start, limit, (uint32_t)rowIndex, FALSE)) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } +} diff --git a/icuSources/tools/toolutil/propsvec.h b/icuSources/tools/toolutil/propsvec.h index 86d214f9..c899d588 100644 --- a/icuSources/tools/toolutil/propsvec.h +++ b/icuSources/tools/toolutil/propsvec.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2002-2004, International Business Machines +* Copyright (C) 2002-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -72,7 +72,32 @@ U_CAPI uint32_t * U_EXPORT2 upvec_getRow(uint32_t *pv, int32_t rowIndex, UChar32 *pRangeStart, UChar32 *pRangeLimit); +/* + * Compact the vectors: + * - modify the memory + * - keep only unique vectors + * - store them contiguously from the beginning of the memory + * - for each (non-unique) row, call the handler function + * + * The handler's rowIndex is the uint32_t index of the row in the compacted + * memory block. + * (Therefore, it starts at 0 increases in increments of the columns value.) + */ + +typedef void U_CALLCONV +UPVecCompactHandler(void *context, + UChar32 start, UChar32 limit, + int32_t rowIndex, uint32_t *row, int32_t columns, + UErrorCode *pErrorCode); + U_CAPI int32_t U_EXPORT2 -upvec_toTrie(uint32_t *pv, UNewTrie *trie, UErrorCode *pErrorCode); +upvec_compact(uint32_t *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode); + +/* context=UNewTrie, stores the rowIndex values into the trie */ +U_CAPI void U_CALLCONV +upvec_compactToTrieHandler(void *context, + UChar32 start, UChar32 limit, + int32_t rowIndex, uint32_t *row, int32_t columns, + UErrorCode *pErrorCode); #endif diff --git a/icuSources/tools/toolutil/swapimpl.cpp b/icuSources/tools/toolutil/swapimpl.cpp new file mode 100644 index 00000000..fd0f7faf --- /dev/null +++ b/icuSources/tools/toolutil/swapimpl.cpp @@ -0,0 +1,643 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: swapimpl.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005may05 +* created by: Markus W. Scherer +* +* Data file swapping functions moved here from the common library +* because some data is hardcoded in ICU4C and needs not be swapped any more. +* Moving the functions here simplifies testing (for code coverage) because +* we need not jump through hoops (like adding snapshots of these files +* to testdata). +* +* The declarations for these functions remain in the internal header files +* in icu/source/common/ +*/ + +#include "unicode/utypes.h" +#include "unicode/putil.h" +#include "unicode/udata.h" +#include "cmemory.h" +#include "cstring.h" +#include "uinvchar.h" +#include "uassert.h" +#include "uarrsort.h" +#include "ucmndata.h" +#include "udataswp.h" + +/* swapping implementations in common */ + +#include "uresdata.h" +#include "ucnv_io.h" +#include "uprops.h" +#include "ucase.h" +#include "ubidi_props.h" +#include "ucol_swp.h" +#include "ucnv_bld.h" +#include "unormimp.h" +#include "sprpimpl.h" +#include "propname.h" +#include "rbbidata.h" +#include "triedict.h" + +/* swapping implementations in i18n */ + +/* definitions */ + +#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) + +/* Unicode properties data swapping ----------------------------------------- */ + +U_CAPI int32_t U_EXPORT2 +uprops_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode) { + const UDataInfo *pInfo; + int32_t headerSize, i; + + int32_t dataIndexes[UPROPS_INDEX_COUNT]; + const int32_t *inData32; + + /* udata_swapDataHeader checks the arguments */ + headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return 0; + } + + /* check data format and format version */ + pInfo=(const UDataInfo *)((const char *)inData+4); + if(!( + pInfo->dataFormat[0]==0x55 && /* dataFormat="UPro" */ + pInfo->dataFormat[1]==0x50 && + pInfo->dataFormat[2]==0x72 && + pInfo->dataFormat[3]==0x6f && + (pInfo->formatVersion[0]==3 || pInfo->formatVersion[0]==4) && + pInfo->formatVersion[2]==UTRIE_SHIFT && + pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT + )) { + udata_printError(ds, "uprops_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not a Unicode properties file\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + pInfo->formatVersion[0]); + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } + + /* the properties file must contain at least the indexes array */ + if(length>=0 && (length-headerSize)<(int32_t)sizeof(dataIndexes)) { + udata_printError(ds, "uprops_swap(): too few bytes (%d after header) for a Unicode properties file\n", + length-headerSize); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + /* read the indexes */ + inData32=(const int32_t *)((const char *)inData+headerSize); + for(i=0; i<UPROPS_INDEX_COUNT; ++i) { + dataIndexes[i]=udata_readInt32(ds, inData32[i]); + } + + /* + * comments are copied from the data format description in genprops/store.c + * indexes[] constants are in uprops.h + */ + if(length>=0) { + int32_t *outData32; + + if((length-headerSize)<(4*dataIndexes[UPROPS_RESERVED_INDEX])) { + udata_printError(ds, "uprops_swap(): too few bytes (%d after header) for a Unicode properties file\n", + length-headerSize); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + outData32=(int32_t *)((char *)outData+headerSize); + + /* copy everything for inaccessible data (padding) */ + if(inData32!=outData32) { + uprv_memcpy(outData32, inData32, 4*dataIndexes[UPROPS_RESERVED_INDEX]); + } + + /* swap the indexes[16] */ + ds->swapArray32(ds, inData32, 4*UPROPS_INDEX_COUNT, outData32, pErrorCode); + + /* + * swap the main properties UTrie + * PT serialized properties trie, see utrie.h (byte size: 4*(i0-16)) + */ + utrie_swap(ds, + inData32+UPROPS_INDEX_COUNT, + 4*(dataIndexes[UPROPS_PROPS32_INDEX]-UPROPS_INDEX_COUNT), + outData32+UPROPS_INDEX_COUNT, + pErrorCode); + + /* + * swap the properties and exceptions words + * P const uint32_t props32[i1-i0]; + * E const uint32_t exceptions[i2-i1]; + */ + ds->swapArray32(ds, + inData32+dataIndexes[UPROPS_PROPS32_INDEX], + 4*(dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX]-dataIndexes[UPROPS_PROPS32_INDEX]), + outData32+dataIndexes[UPROPS_PROPS32_INDEX], + pErrorCode); + + /* + * swap the UChars + * U const UChar uchars[2*(i3-i2)]; + */ + ds->swapArray16(ds, + inData32+dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX], + 4*(dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX]-dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX]), + outData32+dataIndexes[UPROPS_EXCEPTIONS_TOP_INDEX], + pErrorCode); + + /* + * swap the additional UTrie + * i3 additionalTrieIndex; -- 32-bit unit index to the additional trie for more properties + */ + utrie_swap(ds, + inData32+dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX], + 4*(dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX]-dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX]), + outData32+dataIndexes[UPROPS_ADDITIONAL_TRIE_INDEX], + pErrorCode); + + /* + * swap the properties vectors + * PV const uint32_t propsVectors[(i6-i4)/i5][i5]==uint32_t propsVectors[i6-i4]; + */ + ds->swapArray32(ds, + inData32+dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX], + 4*(dataIndexes[UPROPS_RESERVED_INDEX]-dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX]), + outData32+dataIndexes[UPROPS_ADDITIONAL_VECTORS_INDEX], + pErrorCode); + } + + /* i6 reservedItemIndex; -- 32-bit unit index to the top of the properties vectors table */ + return headerSize+4*dataIndexes[UPROPS_RESERVED_INDEX]; +} + +/* Unicode case mapping data swapping --------------------------------------- */ + +U_CAPI int32_t U_EXPORT2 +ucase_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode) { + const UDataInfo *pInfo; + int32_t headerSize; + + const uint8_t *inBytes; + uint8_t *outBytes; + + const int32_t *inIndexes; + int32_t indexes[16]; + + int32_t i, offset, count, size; + + /* udata_swapDataHeader checks the arguments */ + headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return 0; + } + + /* check data format and format version */ + pInfo=(const UDataInfo *)((const char *)inData+4); + if(!( + pInfo->dataFormat[0]==UCASE_FMT_0 && /* dataFormat="cAsE" */ + pInfo->dataFormat[1]==UCASE_FMT_1 && + pInfo->dataFormat[2]==UCASE_FMT_2 && + pInfo->dataFormat[3]==UCASE_FMT_3 && + pInfo->formatVersion[0]==1 && + pInfo->formatVersion[2]==UTRIE_SHIFT && + pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT + )) { + udata_printError(ds, "ucase_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as case mapping data\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + pInfo->formatVersion[0]); + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } + + inBytes=(const uint8_t *)inData+headerSize; + outBytes=(uint8_t *)outData+headerSize; + + inIndexes=(const int32_t *)inBytes; + + if(length>=0) { + length-=headerSize; + if(length<16*4) { + udata_printError(ds, "ucase_swap(): too few bytes (%d after header) for case mapping data\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } + + /* read the first 16 indexes (ICU 3.2/format version 1: UCASE_IX_TOP==16, might grow) */ + for(i=0; i<16; ++i) { + indexes[i]=udata_readInt32(ds, inIndexes[i]); + } + + /* get the total length of the data */ + size=indexes[UCASE_IX_LENGTH]; + + if(length>=0) { + if(length<size) { + udata_printError(ds, "ucase_swap(): too few bytes (%d after header) for all of case mapping data\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + /* copy the data for inaccessible bytes */ + if(inBytes!=outBytes) { + uprv_memcpy(outBytes, inBytes, size); + } + + offset=0; + + /* swap the int32_t indexes[] */ + count=indexes[UCASE_IX_INDEX_TOP]*4; + ds->swapArray32(ds, inBytes, count, outBytes, pErrorCode); + offset+=count; + + /* swap the UTrie */ + count=indexes[UCASE_IX_TRIE_SIZE]; + utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + + /* swap the uint16_t exceptions[] and unfold[] */ + count=(indexes[UCASE_IX_EXC_LENGTH]+indexes[UCASE_IX_UNFOLD_LENGTH])*2; + ds->swapArray16(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + + U_ASSERT(offset==size); + } + + return headerSize+size; +} + +/* Unicode bidi/shaping data swapping --------------------------------------- */ + +U_CAPI int32_t U_EXPORT2 +ubidi_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode) { + const UDataInfo *pInfo; + int32_t headerSize; + + const uint8_t *inBytes; + uint8_t *outBytes; + + const int32_t *inIndexes; + int32_t indexes[16]; + + int32_t i, offset, count, size; + + /* udata_swapDataHeader checks the arguments */ + headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return 0; + } + + /* check data format and format version */ + pInfo=(const UDataInfo *)((const char *)inData+4); + if(!( + pInfo->dataFormat[0]==UBIDI_FMT_0 && /* dataFormat="BiDi" */ + pInfo->dataFormat[1]==UBIDI_FMT_1 && + pInfo->dataFormat[2]==UBIDI_FMT_2 && + pInfo->dataFormat[3]==UBIDI_FMT_3 && + pInfo->formatVersion[0]==1 && + pInfo->formatVersion[2]==UTRIE_SHIFT && + pInfo->formatVersion[3]==UTRIE_INDEX_SHIFT + )) { + udata_printError(ds, "ubidi_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as bidi/shaping data\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + pInfo->formatVersion[0]); + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } + + inBytes=(const uint8_t *)inData+headerSize; + outBytes=(uint8_t *)outData+headerSize; + + inIndexes=(const int32_t *)inBytes; + + if(length>=0) { + length-=headerSize; + if(length<16*4) { + udata_printError(ds, "ubidi_swap(): too few bytes (%d after header) for bidi/shaping data\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } + + /* read the first 16 indexes (ICU 3.4/format version 1: UBIDI_IX_TOP==16, might grow) */ + for(i=0; i<16; ++i) { + indexes[i]=udata_readInt32(ds, inIndexes[i]); + } + + /* get the total length of the data */ + size=indexes[UBIDI_IX_LENGTH]; + + if(length>=0) { + if(length<size) { + udata_printError(ds, "ubidi_swap(): too few bytes (%d after header) for all of bidi/shaping data\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + /* copy the data for inaccessible bytes */ + if(inBytes!=outBytes) { + uprv_memcpy(outBytes, inBytes, size); + } + + offset=0; + + /* swap the int32_t indexes[] */ + count=indexes[UBIDI_IX_INDEX_TOP]*4; + ds->swapArray32(ds, inBytes, count, outBytes, pErrorCode); + offset+=count; + + /* swap the UTrie */ + count=indexes[UBIDI_IX_TRIE_SIZE]; + utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + + /* swap the uint32_t mirrors[] */ + count=indexes[UBIDI_IX_MIRROR_LENGTH]*4; + ds->swapArray32(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + + /* just skip the uint8_t jgArray[] */ + count=indexes[UBIDI_IX_JG_LIMIT]-indexes[UBIDI_IX_JG_START]; + offset+=count; + + U_ASSERT(offset==size); + } + + return headerSize+size; +} + +/* Unicode normalization data swapping -------------------------------------- */ + +#if !UCONFIG_NO_NORMALIZATION + +U_CAPI int32_t U_EXPORT2 +unorm_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode) { + const UDataInfo *pInfo; + int32_t headerSize; + + const uint8_t *inBytes; + uint8_t *outBytes; + + const int32_t *inIndexes; + int32_t indexes[32]; + + int32_t i, offset, count, size; + + /* udata_swapDataHeader checks the arguments */ + headerSize=udata_swapDataHeader(ds, inData, length, outData, pErrorCode); + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return 0; + } + + /* check data format and format version */ + pInfo=(const UDataInfo *)((const char *)inData+4); + if(!( + pInfo->dataFormat[0]==0x4e && /* dataFormat="Norm" */ + pInfo->dataFormat[1]==0x6f && + pInfo->dataFormat[2]==0x72 && + pInfo->dataFormat[3]==0x6d && + pInfo->formatVersion[0]==2 + )) { + udata_printError(ds, "unorm_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as unorm.icu\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + pInfo->formatVersion[0]); + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; + } + + inBytes=(const uint8_t *)inData+headerSize; + outBytes=(uint8_t *)outData+headerSize; + + inIndexes=(const int32_t *)inBytes; + + if(length>=0) { + length-=headerSize; + if(length<32*4) { + udata_printError(ds, "unorm_swap(): too few bytes (%d after header) for unorm.icu\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } + + /* read the first 32 indexes (ICU 2.8/format version 2.2: _NORM_INDEX_TOP==32, might grow) */ + for(i=0; i<32; ++i) { + indexes[i]=udata_readInt32(ds, inIndexes[i]); + } + + /* calculate the total length of the data */ + size= + 32*4+ /* size of indexes[] */ + indexes[_NORM_INDEX_TRIE_SIZE]+ + indexes[_NORM_INDEX_UCHAR_COUNT]*2+ + indexes[_NORM_INDEX_COMBINE_DATA_COUNT]*2+ + indexes[_NORM_INDEX_FCD_TRIE_SIZE]+ + indexes[_NORM_INDEX_AUX_TRIE_SIZE]+ + indexes[_NORM_INDEX_CANON_SET_COUNT]*2; + + if(length>=0) { + if(length<size) { + udata_printError(ds, "unorm_swap(): too few bytes (%d after header) for all of unorm.icu\n", + length); + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + + /* copy the data for inaccessible bytes */ + if(inBytes!=outBytes) { + uprv_memcpy(outBytes, inBytes, size); + } + + offset=0; + + /* swap the indexes[] */ + count=32*4; + ds->swapArray32(ds, inBytes, count, outBytes, pErrorCode); + offset+=count; + + /* swap the main UTrie */ + count=indexes[_NORM_INDEX_TRIE_SIZE]; + utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + + /* swap the uint16_t extraData[] and the uint16_t combiningTable[] */ + count=(indexes[_NORM_INDEX_UCHAR_COUNT]+indexes[_NORM_INDEX_COMBINE_DATA_COUNT])*2; + ds->swapArray16(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + + /* swap the FCD UTrie */ + count=indexes[_NORM_INDEX_FCD_TRIE_SIZE]; + if(count!=0) { + utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + } + + /* swap the aux UTrie */ + count=indexes[_NORM_INDEX_AUX_TRIE_SIZE]; + if(count!=0) { + utrie_swap(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + } + + /* swap the uint16_t combiningTable[] */ + count=indexes[_NORM_INDEX_CANON_SET_COUNT]*2; + ds->swapArray16(ds, inBytes+offset, count, outBytes+offset, pErrorCode); + offset+=count; + } + + return headerSize+size; +} + +#endif + +/* swap any data (except a .dat package) ------------------------------------ */ + +static const struct { + uint8_t dataFormat[4]; + UDataSwapFn *swapFn; +} swapFns[]={ + { { 0x52, 0x65, 0x73, 0x42 }, ures_swap }, /* dataFormat="ResB" */ +#if !UCONFIG_NO_LEGACY_CONVERSION + { { 0x63, 0x6e, 0x76, 0x74 }, ucnv_swap }, /* dataFormat="cnvt" */ +#endif +#if !UCONFIG_NO_CONVERSION + { { 0x43, 0x76, 0x41, 0x6c }, ucnv_swapAliases }, /* dataFormat="CvAl" */ +#endif +#if !UCONFIG_NO_IDNA + { { 0x53, 0x50, 0x52, 0x50 }, usprep_swap }, /* dataFormat="SPRP" */ +#endif + /* insert data formats here, descending by expected frequency of occurrence */ + { { 0x55, 0x50, 0x72, 0x6f }, uprops_swap }, /* dataFormat="UPro" */ + + { { UCASE_FMT_0, UCASE_FMT_1, UCASE_FMT_2, UCASE_FMT_3 }, + ucase_swap }, /* dataFormat="cAsE" */ + + { { UBIDI_FMT_0, UBIDI_FMT_1, UBIDI_FMT_2, UBIDI_FMT_3 }, + ubidi_swap }, /* dataFormat="BiDi" */ + +#if !UCONFIG_NO_NORMALIZATION + { { 0x4e, 0x6f, 0x72, 0x6d }, unorm_swap }, /* dataFormat="Norm" */ +#endif +#if !UCONFIG_NO_COLLATION + { { 0x55, 0x43, 0x6f, 0x6c }, ucol_swap }, /* dataFormat="UCol" */ + { { 0x49, 0x6e, 0x76, 0x43 }, ucol_swapInverseUCA },/* dataFormat="InvC" */ +#endif +#if !UCONFIG_NO_BREAK_ITERATION + { { 0x42, 0x72, 0x6b, 0x20 }, ubrk_swap }, /* dataFormat="Brk " */ + { { 0x54, 0x72, 0x44, 0x63 }, triedict_swap }, /* dataFormat="TrDc " */ +#endif + { { 0x70, 0x6e, 0x61, 0x6d }, upname_swap }, /* dataFormat="pnam" */ + { { 0x75, 0x6e, 0x61, 0x6d }, uchar_swapNames } /* dataFormat="unam" */ +}; + +U_CAPI int32_t U_EXPORT2 +udata_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode) { + char dataFormatChars[4]; + const UDataInfo *pInfo; + int32_t headerSize, i, swappedLength; + + if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { + return 0; + } + + /* + * Preflight the header first; checks for illegal arguments, too. + * Do not swap the header right away because the format-specific swapper + * will swap it, get the headerSize again, and also use the header + * information. Otherwise we would have to pass some of the information + * and not be able to use the UDataSwapFn signature. + */ + headerSize=udata_swapDataHeader(ds, inData, -1, NULL, pErrorCode); + + /* + * If we wanted udata_swap() to also handle non-loadable data like a UTrie, + * then we could check here for further known magic values and structures. + */ + if(U_FAILURE(*pErrorCode)) { + return 0; /* the data format was not recognized */ + } + + pInfo=(const UDataInfo *)((const char *)inData+4); + + { + /* convert the data format from ASCII to Unicode to the system charset */ + UChar u[4]={ + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3] + }; + + if(uprv_isInvariantUString(u, 4)) { + u_UCharsToChars(u, dataFormatChars, 4); + } else { + dataFormatChars[0]=dataFormatChars[1]=dataFormatChars[2]=dataFormatChars[3]='?'; + } + } + + /* dispatch to the swap function for the dataFormat */ + for(i=0; i<LENGTHOF(swapFns); ++i) { + if(0==memcmp(swapFns[i].dataFormat, pInfo->dataFormat, 4)) { + swappedLength=swapFns[i].swapFn(ds, inData, length, outData, pErrorCode); + + if(U_FAILURE(*pErrorCode)) { + udata_printError(ds, "udata_swap(): failure swapping data format %02x.%02x.%02x.%02x (\"%c%c%c%c\") - %s\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + dataFormatChars[0], dataFormatChars[1], + dataFormatChars[2], dataFormatChars[3], + u_errorName(*pErrorCode)); + } else if(swappedLength<(length-15)) { + /* swapped less than expected */ + udata_printError(ds, "udata_swap() warning: swapped only %d out of %d bytes - data format %02x.%02x.%02x.%02x (\"%c%c%c%c\")\n", + swappedLength, length, + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + dataFormatChars[0], dataFormatChars[1], + dataFormatChars[2], dataFormatChars[3], + u_errorName(*pErrorCode)); + } + + return swappedLength; + } + } + + /* the dataFormat was not recognized */ + udata_printError(ds, "udata_swap(): unknown data format %02x.%02x.%02x.%02x (\"%c%c%c%c\")\n", + pInfo->dataFormat[0], pInfo->dataFormat[1], + pInfo->dataFormat[2], pInfo->dataFormat[3], + dataFormatChars[0], dataFormatChars[1], + dataFormatChars[2], dataFormatChars[3]); + + *pErrorCode=U_UNSUPPORTED_ERROR; + return 0; +} diff --git a/icuSources/tools/toolutil/swapimpl.h b/icuSources/tools/toolutil/swapimpl.h new file mode 100644 index 00000000..b36ec260 --- /dev/null +++ b/icuSources/tools/toolutil/swapimpl.h @@ -0,0 +1,43 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: swapimpl.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005jul29 +* created by: Markus W. Scherer +* +* Declarations for data file swapping functions not declared in internal +* library headers. +*/ + +#ifndef __SWAPIMPL_H__ +#define __SWAPIMPL_H__ + +#include "unicode/utypes.h" +#include "udataswp.h" + +/** + * Identifies and then transforms the ICU data piece in-place, or determines + * its length. See UDataSwapFn. + * This function handles single data pieces (but not .dat data packages) + * and internally dispatches to per-type swap functions. + * Sets a U_UNSUPPORTED_ERROR if the data format is not recognized. + * + * @see UDataSwapFn + * @see udata_openSwapper + * @see udata_openSwapperForInputData + * @internal ICU 2.8 + */ +U_CAPI int32_t U_EXPORT2 +udata_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode); + +#endif diff --git a/icuSources/tools/toolutil/toolutil.c b/icuSources/tools/toolutil/toolutil.c index 8703445c..3ee34e98 100644 --- a/icuSources/tools/toolutil/toolutil.c +++ b/icuSources/tools/toolutil/toolutil.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2004, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -16,7 +16,14 @@ * This file contains utility functions for ICU tools like genccode. */ -#ifdef WIN32 +#include <stdio.h> +#include "unicode/utypes.h" +#include "unicode/putil.h" +#include "cmemory.h" +#include "cstring.h" +#include "toolutil.h" + +#ifdef U_WINDOWS # define VC_EXTRALEAN # define WIN32_LEAN_AND_MEAN # define NOUSER @@ -24,17 +31,16 @@ # define NOIME # define NOMCX # include <windows.h> +# include <direct.h> +#else +# include <sys/stat.h> +# include <sys/types.h> #endif -#include <stdio.h> -#include "unicode/utypes.h" -#include "unicode/putil.h" -#include "cmemory.h" -#include "cstring.h" -#include "toolutil.h" +#include <errno.h> U_CAPI const char * U_EXPORT2 getLongPathname(const char *pathname) { -#ifdef WIN32 +#ifdef U_WINDOWS /* anticipate problems with "short" pathnames */ static WIN32_FIND_DATA info; HANDLE file=FindFirstFile(pathname, &info); @@ -75,6 +81,19 @@ findBasename(const char *filename) { } } +U_CAPI void U_EXPORT2 +uprv_mkdir(const char *pathname, UErrorCode *status) { + int retVal = 0; +#if defined(U_WINDOWS) + retVal = _mkdir(pathname); +#else + retVal = mkdir(pathname, S_IRWXU | (S_IROTH | S_IXOTH) | (S_IROTH | S_IXOTH)); +#endif + if (retVal && errno != EEXIST) { + *status = U_FILE_ACCESS_ERROR; + } +} + /* tool memory helper ------------------------------------------------------- */ struct UToolMemory { diff --git a/icuSources/tools/toolutil/toolutil.dsp b/icuSources/tools/toolutil/toolutil.dsp deleted file mode 100644 index 1ff0f1a1..00000000 --- a/icuSources/tools/toolutil/toolutil.dsp +++ /dev/null @@ -1,246 +0,0 @@ -# Microsoft Developer Studio Project File - Name="toolutil" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=toolutil - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "toolutil.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "toolutil.mak" CFG="toolutil - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "toolutil - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "toolutil - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "toolutil - Win64 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "toolutil - Win64 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "toolutil - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOOLUTIL_EXPORTS" /FD /c -# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "..\..\common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FD /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib /nologo /dll /machine:I386 /out:"..\..\..\bin\icutu32.dll" /implib:"..\..\..\lib/icutu.lib" /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "toolutil - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOOLUTIL_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /G6 /MDd /W3 /Gm /GX /ZI /Od /I "..\..\common" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib /nologo /dll /debug /machine:I386 /out:"..\..\..\bin\icutu32d.dll" /implib:"..\..\..\lib/icutud.lib" /pdbtype:sept /libpath:"..\..\..\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "toolutil - Win64 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOOLUTIL_EXPORTS" /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /O2 /Op /I "..\..\common" /D "NDEBUG" /D "WIN64" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /Zm600 /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:IX86 /machine:IA64 -# ADD LINK32 kernel32.lib /nologo /dll /machine:IX86 /out:"..\..\..\bin\icutu32.dll" /implib:"..\..\..\lib/icutu.lib" /libpath:"..\..\..\lib" /machine:IA64 - -!ELSEIF "$(CFG)" == "toolutil - Win64 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TOOLUTIL_EXPORTS" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /Op /I "..\..\common" /D "_DEBUG" /D "WIN64" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_IA64_" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /GZ /Zm600 /c -# SUBTRACT CPP /YX -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:IX86 /pdbtype:sept /machine:IA64 -# ADD LINK32 kernel32.lib /nologo /dll /incremental:no /debug /machine:IX86 /out:"..\..\..\bin\icutu32d.dll" /implib:"..\..\..\lib/icutud.lib" /pdbtype:sept /libpath:"..\..\..\lib" /machine:IA64 - -!ENDIF - -# Begin Target - -# Name "toolutil - Win32 Release" -# Name "toolutil - Win32 Debug" -# Name "toolutil - Win64 Release" -# Name "toolutil - Win64 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\propsvec.c -# End Source File -# Begin Source File - -SOURCE=.\toolutil.c -# ADD CPP /Ze -# End Source File -# Begin Source File - -SOURCE=.\ucbuf.c -# End Source File -# Begin Source File - -SOURCE=.\ucm.c -# End Source File -# Begin Source File - -SOURCE=.\ucmpwrit.c -# End Source File -# Begin Source File - -SOURCE=.\ucmstate.c -# End Source File -# Begin Source File - -SOURCE=.\unewdata.c -# End Source File -# Begin Source File - -SOURCE=.\uoptions.c -# End Source File -# Begin Source File - -SOURCE=.\uparse.c -# End Source File -# Begin Source File - -SOURCE=.\uperf.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\propsvec.h -# End Source File -# Begin Source File - -SOURCE=.\toolutil.h -# End Source File -# Begin Source File - -SOURCE=.\ucbuf.h -# End Source File -# Begin Source File - -SOURCE=.\ucm.h -# End Source File -# Begin Source File - -SOURCE=.\ucmpwrit.h -# End Source File -# Begin Source File - -SOURCE=.\unewdata.h -# End Source File -# Begin Source File - -SOURCE=.\uoptions.h -# End Source File -# Begin Source File - -SOURCE=.\uparse.h -# End Source File -# Begin Source File - -SOURCE=.\uperf.h -# End Source File -# Begin Source File - -SOURCE=.\utimer.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/icuSources/tools/toolutil/toolutil.h b/icuSources/tools/toolutil/toolutil.h index 147d2aa5..91c6c881 100644 --- a/icuSources/tools/toolutil/toolutil.h +++ b/icuSources/tools/toolutil/toolutil.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1999-2003, International Business Machines +* Copyright (C) 1999-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -49,6 +49,14 @@ getLongPathname(const char *pathname); U_CAPI const char * U_EXPORT2 findBasename(const char *filename); +/* + * Creates a diretory with pathname. + * + * @param status Set to an error code when mkdir failed. + */ +U_CAPI void U_EXPORT2 +uprv_mkdir(const char *pathname, UErrorCode *status); + /* * UToolMemory is used for generic, custom memory management. * It is allocated with enough space for count*size bytes starting diff --git a/icuSources/tools/toolutil/toolutil.vcproj b/icuSources/tools/toolutil/toolutil.vcproj index bdb70d41..38b3ed3b 100644 --- a/icuSources/tools/toolutil/toolutil.vcproj +++ b/icuSources/tools/toolutil/toolutil.vcproj @@ -20,13 +20,14 @@ CharacterSet="2"> <Tool Name="VCCLCompilerTool" - InlineFunctionExpansion="2" ImproveFloatingPointConsistency="TRUE" - AdditionalIncludeDirectories="..\..\common" - PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_USRDLL" + AdditionalIncludeDirectories="..\..\..\include,..\..\common" + PreprocessorDefinitions="WIN32;NDEBUG;U_TOOLUTIL_IMPLEMENTATION" StringPooling="TRUE" RuntimeLibrary="2" EnableFunctionLevelLinking="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Release/toolutil.pch" AssemblerListingLocation=".\Release/" ObjectFile=".\Release/" @@ -38,12 +39,12 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" - OutputFile="..\..\..\bin\icutu32.dll" + OutputFile="..\..\..\bin\icutu36.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\..\lib" - ProgramDatabaseFile=".\..\..\..\lib\icutu32.pdb" + ProgramDatabaseFile=".\..\..\..\lib\icutu36.pdb" + EnableCOMDATFolding="2" BaseAddress="0x4ac00000" ImportLibrary="..\..\..\lib\icutu.lib"/> <Tool @@ -85,11 +86,14 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - OptimizeForProcessor="2" - AdditionalIncludeDirectories="..\..\common" - PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_USRDLL" + ImproveFloatingPointConsistency="TRUE" + AdditionalIncludeDirectories="..\..\..\include,..\..\common" + PreprocessorDefinitions="WIN32;_DEBUG;U_TOOLUTIL_IMPLEMENTATION" BasicRuntimeChecks="3" RuntimeLibrary="3" + BufferSecurityCheck="TRUE" + DisableLanguageExtensions="TRUE" + TreatWChar_tAsBuiltInType="TRUE" PrecompiledHeaderFile=".\Debug/toolutil.pch" AssemblerListingLocation=".\Debug/" ObjectFile=".\Debug/" @@ -102,13 +106,12 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" - OutputFile="..\..\..\bin\icutu32d.dll" + OutputFile="..\..\..\bin\icutu36d.dll" LinkIncremental="2" SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\..\lib" GenerateDebugInformation="TRUE" - ProgramDatabaseFile=".\..\..\..\lib\icutu32d.pdb" + ProgramDatabaseFile=".\..\..\..\lib\icutu36d.pdb" BaseAddress="0x4ac00000" ImportLibrary="..\..\..\lib\icutud.lib"/> <Tool @@ -146,11 +149,35 @@ <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath=".\filestrm.c"> + </File> + <File + RelativePath=".\package.cpp"> + </File> + <File + RelativePath=".\pkgitems.cpp"> + </File> <File RelativePath=".\propsvec.c"> </File> + <File + RelativePath=".\swapimpl.cpp"> + </File> <File RelativePath=".\toolutil.c"> + <FileConfiguration + Name="Release|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + DisableLanguageExtensions="FALSE"/> + </FileConfiguration> </File> <File RelativePath=".\ucbuf.c"> @@ -158,9 +185,6 @@ <File RelativePath=".\ucm.c"> </File> - <File - RelativePath=".\ucmpwrit.c"> - </File> <File RelativePath=".\ucmstate.c"> </File> @@ -174,15 +198,30 @@ RelativePath=".\uparse.c"> </File> <File - RelativePath=".\uperf.cpp"> + RelativePath=".\writesrc.c"> + </File> + <File + RelativePath=".\xmlparser.cpp"> </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath=".\filestrm.h"> + </File> + <File + RelativePath=".\package.h"> + </File> + <File + RelativePath=".\pkg_imp.h"> + </File> <File RelativePath=".\propsvec.h"> </File> + <File + RelativePath=".\swapimpl.h"> + </File> <File RelativePath=".\toolutil.h"> </File> @@ -192,9 +231,6 @@ <File RelativePath=".\ucm.h"> </File> - <File - RelativePath=".\ucmpwrit.h"> - </File> <File RelativePath=".\unewdata.h"> </File> @@ -205,10 +241,10 @@ RelativePath=".\uparse.h"> </File> <File - RelativePath=".\uperf.h"> + RelativePath=".\writesrc.h"> </File> <File - RelativePath=".\utimer.h"> + RelativePath=".\xmlparser.h"> </File> </Filter> <Filter diff --git a/icuSources/tools/toolutil/ucbuf.c b/icuSources/tools/toolutil/ucbuf.c index 111fd584..824bde1e 100644 --- a/icuSources/tools/toolutil/ucbuf.c +++ b/icuSources/tools/toolutil/ucbuf.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2004, International Business Machines +* Copyright (C) 1998-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -28,6 +28,9 @@ #include "ucbuf.h" #include <stdio.h> +#if !UCONFIG_NO_CONVERSION + + #define MAX_IN_BUF 1000 #define MAX_U_BUF 1500 #define CONTEXT_LEN 15 @@ -458,55 +461,61 @@ ucbuf_open(const char* fileName,const char** cp,UBool showWarning, UBool buffere if(in!=NULL){ UCHARBUF* buf =(UCHARBUF*) uprv_malloc(sizeof(UCHARBUF)); fileSize = T_FileStream_size(in); - if(buf){ - buf->in=in; - buf->conv=NULL; - buf->showWarning = showWarning; - buf->isBuffered = buffered; - buf->signatureLength=0; - if(*cp==NULL || **cp=='\0'){ - /* don't have code page name... try to autodetect */ - ucbuf_autodetect_fs(in,cp,&buf->conv,&buf->signatureLength,error); - }else if(ucbuf_isCPKnown(*cp)){ - /* discard BOM */ - ucbuf_autodetect_fs(in,&knownCp,&buf->conv,&buf->signatureLength,error); - } - if(U_SUCCESS(*error) && buf->conv==NULL) { - buf->conv=ucnv_open(*cp,error); - } - if(U_FAILURE(*error)){ - ucnv_close(buf->conv); - uprv_free(buf); - return NULL; - } - - if((buf->conv==NULL) && (buf->showWarning==TRUE)){ - fprintf(stderr,"###WARNING: No converter defined. Using codepage of system.\n"); - } - buf->remaining=fileSize-buf->signatureLength; - if(buf->isBuffered){ - buf->bufCapacity=MAX_U_BUF; - }else{ - buf->bufCapacity=buf->remaining+buf->signatureLength+1/*for terminating nul*/; - } - buf->buffer=(UChar*) uprv_malloc(U_SIZEOF_UCHAR * buf->bufCapacity ); - if (buf->buffer == NULL) { - *error = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } - buf->currentPos=buf->buffer; - buf->bufLimit=buf->buffer; - if(U_FAILURE(*error)){ - fprintf(stderr, "Could not open codepage [%s]: %s\n", *cp, u_errorName(*error)); - return NULL; - } - buf=ucbuf_fillucbuf(buf,error); - return buf; + if(buf == NULL){ + *error = U_MEMORY_ALLOCATION_ERROR; + T_FileStream_close(in); + return NULL; + } + buf->in=in; + buf->conv=NULL; + buf->showWarning = showWarning; + buf->isBuffered = buffered; + buf->signatureLength=0; + if(*cp==NULL || **cp=='\0'){ + /* don't have code page name... try to autodetect */ + ucbuf_autodetect_fs(in,cp,&buf->conv,&buf->signatureLength,error); + }else if(ucbuf_isCPKnown(*cp)){ + /* discard BOM */ + ucbuf_autodetect_fs(in,&knownCp,&buf->conv,&buf->signatureLength,error); + } + if(U_SUCCESS(*error) && buf->conv==NULL) { + buf->conv=ucnv_open(*cp,error); + } + if(U_FAILURE(*error)){ + ucnv_close(buf->conv); + uprv_free(buf); + T_FileStream_close(in); + return NULL; + } + + if((buf->conv==NULL) && (buf->showWarning==TRUE)){ + fprintf(stderr,"###WARNING: No converter defined. Using codepage of system.\n"); + } + buf->remaining=fileSize-buf->signatureLength; + if(buf->isBuffered){ + buf->bufCapacity=MAX_U_BUF; }else{ + buf->bufCapacity=buf->remaining+buf->signatureLength+1/*for terminating nul*/; + } + buf->buffer=(UChar*) uprv_malloc(U_SIZEOF_UCHAR * buf->bufCapacity ); + if (buf->buffer == NULL) { *error = U_MEMORY_ALLOCATION_ERROR; + ucnv_close(buf->conv); + uprv_free(buf); + T_FileStream_close(in); return NULL; } - + buf->currentPos=buf->buffer; + buf->bufLimit=buf->buffer; + if(U_FAILURE(*error)){ + fprintf(stderr, "Could not open codepage [%s]: %s\n", *cp, u_errorName(*error)); + ucnv_close(buf->conv); + uprv_free(buf); + T_FileStream_close(in); + return NULL; + } + buf=ucbuf_fillucbuf(buf,error); + return buf; } *error =U_FILE_ACCESS_ERROR; return NULL; @@ -776,3 +785,4 @@ ucbuf_readline(UCHARBUF* buf,int32_t* len,UErrorCode* err){ /* A compiler warning will appear if all paths don't contain a return statement. */ /* return NULL;*/ } +#endif diff --git a/icuSources/tools/toolutil/ucbuf.h b/icuSources/tools/toolutil/ucbuf.h index 069cd1a4..abb36c85 100644 --- a/icuSources/tools/toolutil/ucbuf.h +++ b/icuSources/tools/toolutil/ucbuf.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 1998-2001, International Business Machines +* Copyright (C) 1998-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -17,11 +17,10 @@ ******************************************************************************* */ -#include "unicode/utypes.h" #include "unicode/ucnv.h" #include "filestrm.h" -#include "cmemory.h" -#include <stdio.h> + +#if !UCONFIG_NO_CONVERSION #ifndef UCBUF_H #define UCBUF_H 1 @@ -194,3 +193,5 @@ U_CAPI const char* U_EXPORT2 ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target, int32_t* len, UErrorCode* status); #endif +#endif + diff --git a/icuSources/tools/toolutil/ucm.c b/icuSources/tools/toolutil/ucm.c index 108e4325..5cd0bae7 100644 --- a/icuSources/tools/toolutil/ucm.c +++ b/icuSources/tools/toolutil/ucm.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -35,6 +35,8 @@ #include "ucm.h" #include <stdio.h> +#if !UCONFIG_NO_CONVERSION + /* -------------------------------------------------------------------------- */ static void @@ -1175,3 +1177,5 @@ ucm_readTable(UCMFile *ucm, FileStream* convFile, *pErrorCode=U_INVALID_TABLE_FORMAT; } } +#endif + diff --git a/icuSources/tools/toolutil/ucm.h b/icuSources/tools/toolutil/ucm.h index 7ab1aeac..7d6dda03 100644 --- a/icuSources/tools/toolutil/ucm.h +++ b/icuSources/tools/toolutil/ucm.h @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003, International Business Machines +* Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -25,6 +25,8 @@ #include "filestrm.h" #include <stdio.h> +#if !UCONFIG_NO_CONVERSION + U_CDECL_BEGIN /* @@ -280,3 +282,6 @@ ucm_separateMappings(UCMFile *ucm, UBool isSISO); U_CDECL_END #endif + +#endif + diff --git a/icuSources/tools/toolutil/ucmpwrit.c b/icuSources/tools/toolutil/ucmpwrit.c deleted file mode 100644 index 304deb62..00000000 --- a/icuSources/tools/toolutil/ucmpwrit.c +++ /dev/null @@ -1,164 +0,0 @@ -/********************************************************************** -* Copyright (C) 1998-2000, International Business Machines Corporation -* and others. All Rights Reserved. -**********************************************************************/ -#include "ucmpwrit.h" -#include <stdio.h> - -/* - UCMP8 format: - - offset size what - --------------------------------------------- - 0 4 ICU_UCMP8_VERSION - 4 4 count - 8 512*2 = 1024 fIndex [uint16's] (UCMP8_kIndexCount*2) - 1032 1*fCount fArray [int8_t's] - + padding (to extend fCount to the nearest multiple of 4) -*/ - -/* Sanity check. */ -#if (UCMP8_kIndexCount != 512) -# error UCMP8_kIndexCount - changed size. Check to see if different pading needed. -#endif - -U_CAPI uint32_t U_EXPORT2 udata_write_ucmp8 (UNewDataMemory *pData, const CompactByteArray* array) -{ - int32_t size = 0; - - udata_write32(pData, ICU_UCMP8_VERSION); - size += 4; - - udata_write32(pData, array->fCount); - size += 4; - - udata_writeBlock(pData, array->fIndex, sizeof(array->fIndex[0])*UCMP8_kIndexCount); - size += sizeof(array->fIndex[0])*UCMP8_kIndexCount; - - udata_writeBlock(pData, array->fArray, sizeof(array->fArray[0])*array->fCount); - size += sizeof(array->fArray[0])*array->fCount; - - while(size%4) /* end padding */ - { - udata_writePadding(pData, 1); /* Pad total so far to even size */ - size += 1; - } - - return size; -} - -/* internal constants*/ -#if 0 - -static const int32_t UCMP16_kMaxUnicode = UCMP16_kMaxUnicode_int; -static const int32_t UCMP16_kUnicodeCount = UCMP16_kUnicodeCount_int; -static const int32_t UCMP16_kBlockShift = UCMP16_kBlockShift_int; -static const int32_t UCMP16_kBlockCount = UCMP16_kBlockCount_int; -static const int32_t UCMP16_kBlockBytes = UCMP16_kBlockBytes_int; -static const int32_t UCMP16_kIndexShift = UCMP16_kIndexShift_int; -static const int32_t UCMP16_kIndexCount = UCMP16_kIndexCount_int; -static const uint32_t UCMP16_kBlockMask = UCMP16_kBlockMask_int; - -/* - UCMP16 format: - - offset size what - --------------------------------------------- - 0 4 ICU_UCMP16_VERSION - 4 4 count - 8 4 blockShift - 12 4 blockMask - 16 512*2 = 1024 fIndex [uint16's] (UCMP16_kIndexCount*2) - 1032 1*fCount fArray [int16's] - + padding (to extend fCount to the nearest multiple of 4) - - */ - -#if (UCMP16_kIndexCount_int != 512) -# error UCMP16_kIndexCount - changed size. Check to see if different pading needed. -#endif - -U_CAPI uint32_t U_EXPORT2 udata_write_ucmp16 (UNewDataMemory *pData, const CompactShortArray* array) -{ - int32_t size = 0; - - udata_write32(pData, ICU_UCMP16_VERSION); - size += 4; - - udata_write32(pData, array->fCount); - size += 4; - - udata_write32(pData, array->kBlockShift); - size += 4; - - udata_write32(pData, array->kBlockMask); - size += 4; - - udata_writeBlock(pData, array->fIndex, sizeof(array->fIndex[0])*UCMP16_kIndexCount); - size += sizeof(array->fIndex[0])*UCMP16_kIndexCount; - - udata_writeBlock(pData, array->fArray, sizeof(array->fArray[0])*array->fCount); - size += sizeof(array->fArray[0])*array->fCount; - - while(size%4) /* end padding */ - { - udata_writePadding(pData, 1); /* Pad total so far to even size */ - size += 1; - } - - return size; -} - -/* - UCMP32 format: - - - Add format here - - - offset size what - --------------------------------------------- - 0 4 ICU_UCMP32_VERSION - 4 4 count - 16 512*2 = 1024 fIndex [uint16's] (UCMP16_kIndexCount*2) - 1032 1*fCount fArray [int32's] - Padding is not needed for ucmp32, since the array consists of int32's - + padding (to extend fCount to the nearest multiple of 4) - - */ - -#if (UCMP32_kIndexCount != 512) -# error UCMP32_kIndexCount - changed size. Check to see if different pading needed. -#endif - -U_CAPI uint32_t U_EXPORT2 udata_write_ucmp32 (UNewDataMemory *pData, const CompactIntArray* array) -{ - int32_t size = 0; - - udata_write32(pData, ICU_UCMP32_VERSION); - size += 4; - - udata_write32(pData, array->fCount); - size += 4; - - udata_writeBlock(pData, array->fIndex, sizeof(array->fIndex[0])*UCMP32_kIndexCount); - size += sizeof(array->fIndex[0])*UCMP32_kIndexCount; - - udata_writeBlock(pData, array->fArray, sizeof(array->fArray[0])*array->fCount); - size += sizeof(array->fArray[0])*array->fCount; - - while(size%4) /* end padding */ - { - udata_writePadding(pData, 1); /* Pad total so far to even size */ - size += 1; - } - - return size; -} - -#endif - - - - - diff --git a/icuSources/tools/toolutil/ucmpwrit.h b/icuSources/tools/toolutil/ucmpwrit.h deleted file mode 100644 index f75c7b58..00000000 --- a/icuSources/tools/toolutil/ucmpwrit.h +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************** -* -* Copyright (C) 1997-2004, International Business Machines -* Corporation and others. All Rights Reserved. -* -*********************************************************************/ - -/** - API's for writing UCMPs. - Return nbytes written. - */ - -#ifndef _UCMPWRIT -#define _UCMPWRIT - -#include "unicode/utypes.h" -#include "unewdata.h" - -#include "ucmp8.h" - -/* udata filestream variants */ -U_CAPI uint32_t U_EXPORT2 udata_write_ucmp8 (UNewDataMemory *pData, const CompactByteArray* array); - -#endif - - - - - - diff --git a/icuSources/tools/toolutil/ucmstate.c b/icuSources/tools/toolutil/ucmstate.c index 81e3b3a3..393d18b3 100644 --- a/icuSources/tools/toolutil/ucmstate.c +++ b/icuSources/tools/toolutil/ucmstate.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2003-2004, International Business Machines +* Copyright (C) 2003-2005, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -27,6 +27,8 @@ #include "ucm.h" #include <stdio.h> +#if !UCONFIG_NO_CONVERSION + /* MBCS state handling ------------------------------------------------------ */ /* @@ -1040,3 +1042,5 @@ ucm_countChars(UCMStates *states, return count; } +#endif + diff --git a/icuSources/tools/toolutil/uoptions.h b/icuSources/tools/toolutil/uoptions.h index 2376d141..55e30f68 100644 --- a/icuSources/tools/toolutil/uoptions.h +++ b/icuSources/tools/toolutil/uoptions.h @@ -22,10 +22,11 @@ #include "unicode/utypes.h" /* This should usually be called before calling u_parseArgs */ -#if defined(OS390) && (U_CHARSET_FAMILY == U_ASCII_FAMILY) +/*#if defined(OS390) && (U_CHARSET_FAMILY == U_ASCII_FAMILY)*/ /* translate args from EBCDIC to ASCII */ -# define U_MAIN_INIT_ARGS(argc, argv) __argvtoascii_a(argc, argv) -#elif defined(XP_MAC_CONSOLE) +/*# define U_MAIN_INIT_ARGS(argc, argv) __argvtoascii_a(argc, argv)*/ +/*#elif defined(XP_MAC_CONSOLE)*/ +#if defined(XP_MAC_CONSOLE) # include <console.h> /* Get the arguments from the GUI, since old Macs don't have a console Window. */ # define U_MAIN_INIT_ARGS(argc, argv) argc = ccommand((char***)&argv) diff --git a/icuSources/tools/toolutil/uparse.c b/icuSources/tools/toolutil/uparse.c index 0a49ecb9..f9f84721 100644 --- a/icuSources/tools/toolutil/uparse.c +++ b/icuSources/tools/toolutil/uparse.c @@ -1,7 +1,7 @@ /* ******************************************************************************* * -* Copyright (C) 2000-2004, International Business Machines +* Copyright (C) 2000-2006, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -36,6 +36,29 @@ u_skipWhitespace(const char *s) { return s; } +/* + * If the string starts with # @missing: then return the pointer to the + * following non-whitespace character. + * Otherwise return the original pointer. + * Unicode 5.0 adds such lines in some data files to document + * default property values. + * Poor man's regex for variable amounts of white space. + */ +static const char * +getMissingLimit(const char *s) { + const char *s0=s; + if( + *(s=u_skipWhitespace(s))=='#' && + *(s=u_skipWhitespace(s+1))=='@' && + 0==strncmp((s=u_skipWhitespace(s+1)), "missing", 7) && + *(s=u_skipWhitespace(s+7))==':' + ) { + return u_skipWhitespace(s+1); + } else { + return s0; + } +} + U_CAPI void U_EXPORT2 u_parseDelimitedFile(const char *filename, char delimiter, char *fields[][2], int32_t fieldCount, @@ -74,16 +97,28 @@ u_parseDelimitedFile(const char *filename, char delimiter, line[--length]=0; } + /* + * detect a line with # @missing: + * start parsing after that, or else from the beginning of the line + * set the default warning for @missing lines + */ + start=(char *)getMissingLimit(line); + if(start==line) { + *pErrorCode=U_ZERO_ERROR; + } else { + *pErrorCode=U_USING_DEFAULT_WARNING; + } + /* skip this line if it is empty or a comment */ - if(line[0]==0 || line[0]=='#') { + if(*start==0 || *start=='#') { continue; } /* remove in-line comments */ - limit=uprv_strchr(line, '#'); + limit=uprv_strchr(start, '#'); if(limit!=NULL) { /* get white space before the pound sign */ - while(limit>line && (*(limit-1)==' ' || *(limit-1)=='\t')) { + while(limit>start && (*(limit-1)==' ' || *(limit-1)=='\t')) { --limit; } @@ -92,12 +127,11 @@ u_parseDelimitedFile(const char *filename, char delimiter, } /* skip lines with only whitespace */ - if(u_skipWhitespace(line)[0]==0) { + if(u_skipWhitespace(start)[0]==0) { continue; } /* for each field, call the corresponding field function */ - start=line; for(i=0; i<fieldCount; ++i) { /* set the limit pointer of this field */ limit=start; @@ -156,6 +190,7 @@ u_parseCodePoints(const char *s, } if(s==NULL || destCapacity<0 || (destCapacity>0 && dest==NULL)) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; } count=0; @@ -261,6 +296,7 @@ u_parseCodePointRange(const char *s, } if(s==NULL || pStart==NULL || pEnd==NULL) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; + return 0; } s=u_skipWhitespace(s); diff --git a/icuSources/tools/toolutil/writesrc.c b/icuSources/tools/toolutil/writesrc.c new file mode 100644 index 00000000..a53bb4b2 --- /dev/null +++ b/icuSources/tools/toolutil/writesrc.c @@ -0,0 +1,190 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: writesrc.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005apr23 +* created by: Markus W. Scherer +* +* Helper functions for writing source code for data. +*/ + +#include <stdio.h> +#include <time.h> +#include "unicode/utypes.h" +#include "unicode/putil.h" +#include "utrie.h" +#include "cstring.h" +#include "writesrc.h" + +U_CAPI FILE * U_EXPORT2 +usrc_create(const char *path, const char *filename) { + char buffer[1024]; + const char *p; + char *q; + FILE *f; + char c; + + if(path==NULL) { + p=filename; + } else { + /* concatenate path and filename, with U_FILE_SEP_CHAR in between if necessary */ + uprv_strcpy(buffer, path); + q=buffer+uprv_strlen(buffer); + if(q>buffer && (c=*(q-1))!=U_FILE_SEP_CHAR && c!=U_FILE_ALT_SEP_CHAR) { + *q++=U_FILE_SEP_CHAR; + } + uprv_strcpy(q, filename); + p=buffer; + } + + f=fopen(p, "w"); + if(f!=NULL) { + char year[8]; + const struct tm *lt; + time_t t; + + time(&t); + lt=localtime(&t); + strftime(year, sizeof(year), "%Y", lt); + strftime(buffer, sizeof(buffer), "%Y-%m-%d", lt); + fprintf( + f, + "/*\n" + " * Copyright (C) 1999-%s, International Business Machines\n" + " * Corporation and others. All Rights Reserved.\n" + " *\n" + " * file name: %s\n" + " *\n" + " * machine-generated on: %s\n" + " */\n\n", + year, + filename, + buffer); + } else { + fprintf( + stderr, + "usrc_create(%s, %s): unable to create file\n", + path!=NULL ? path : NULL, filename); + } + return f; +} + +U_CAPI void U_EXPORT2 +usrc_writeArray(FILE *f, + const char *prefix, + const void *p, int32_t width, int32_t length, + const char *postfix) { + const uint8_t *p8; + const uint16_t *p16; + const uint32_t *p32; + uint32_t value; + int32_t i, col; + + p8=NULL; + p16=NULL; + p32=NULL; + switch(width) { + case 8: + p8=(const uint8_t *)p; + break; + case 16: + p16=(const uint16_t *)p; + break; + case 32: + p32=(const uint32_t *)p; + break; + default: + fprintf(stderr, "usrc_writeArray(width=%ld) unrecognized width\n", (long)width); + return; + } + if(prefix!=NULL) { + fprintf(f, prefix, (long)length); + } + for(i=col=0; i<length; ++i, ++col) { + if(i>0) { + if(col<16) { + fputc(',', f); + } else { + fputs(",\n", f); + col=0; + } + } + switch(width) { + case 8: + value=p8[i]; + break; + case 16: + value=p16[i]; + break; + case 32: + value=p32[i]; + break; + default: + value=0; /* unreachable */ + break; + } + fprintf(f, value<=9 ? "%lu" : "0x%lx", (unsigned long)value); + } + if(postfix!=NULL) { + fputs(postfix, f); + } +} + +U_CAPI void U_EXPORT2 +usrc_writeUTrieArrays(FILE *f, + const char *indexPrefix, const char *dataPrefix, + const UTrie *pTrie, + const char *postfix) { + if(pTrie->data32==NULL) { + /* 16-bit trie */ + usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength+pTrie->dataLength, postfix); + } else { + /* 32-bit trie */ + usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength, postfix); + usrc_writeArray(f, dataPrefix, pTrie->data32, 32, pTrie->dataLength, postfix); + } +} + +U_CAPI void U_EXPORT2 +usrc_writeUTrieStruct(FILE *f, + const char *prefix, + const UTrie *pTrie, + const char *indexName, const char *dataName, + const char *getFoldingOffsetName, + const char *postfix) { + if(prefix!=NULL) { + fputs(prefix, f); + } + if(dataName==NULL) { + dataName="NULL"; + } + if(getFoldingOffsetName==NULL) { + getFoldingOffsetName="utrie_defaultGetFoldingOffset"; + } + fprintf( + f, + " %s,\n" + " %s,\n" + " %s,\n" + " %ld,\n" + " %ld,\n" + " %lu,\n" + " %s\n", + indexName, + dataName, + getFoldingOffsetName, + (long)pTrie->indexLength, (long)pTrie->dataLength, + (unsigned long)pTrie->initialValue, + pTrie->isLatin1Linear ? "TRUE" : "FALSE"); + if(postfix!=NULL) { + fputs(postfix, f); + } +} diff --git a/icuSources/tools/toolutil/writesrc.h b/icuSources/tools/toolutil/writesrc.h new file mode 100644 index 00000000..613ee9d7 --- /dev/null +++ b/icuSources/tools/toolutil/writesrc.h @@ -0,0 +1,70 @@ +/* +******************************************************************************* +* +* Copyright (C) 2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: writesrc.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005apr23 +* created by: Markus W. Scherer +* +* Helper functions for writing source code for data. +*/ + +#ifndef __WRITESRC_H__ +#define __WRITESRC_H__ + +#include <stdio.h> +#include "unicode/utypes.h" +#include "utrie.h" + +/** + * Create a source text file and write a header comment with the ICU copyright. + */ +U_CAPI FILE * U_EXPORT2 +usrc_create(const char *path, const char *filename); + +/** + * Write the contents of an array of 8/16/32-bit words. + * The prefix and postfix are optional (can be NULL) and are written first/last. + * The prefix may contain a %ld or similar field for the array length. + * The {} and declaration etc. need to be included in prefix/postfix or + * printed before and after the array contents. + */ +U_CAPI void U_EXPORT2 +usrc_writeArray(FILE *f, + const char *prefix, + const void *p, int32_t width, int32_t length, + const char *postfix); + +/** + * Calls usrc_writeArray() for the index and data arrays of a runtime UTrie. + * Only the index array is written for a 16-bit UTrie. In this case, dataPrefix + * is ignored and can be NULL. + */ +U_CAPI void U_EXPORT2 +usrc_writeUTrieArrays(FILE *f, + const char *indexPrefix, const char *dataPrefix, + const UTrie *pTrie, + const char *postfix); + +/** + * Writes the UTrie struct values. + * The {} and declaration etc. need to be included in prefix/postfix or + * printed before and after the array contents. + * If getFoldingOffsetName==NULL then "utrie_defaultGetFoldingOffset" is printed. + */ +U_CAPI void U_EXPORT2 +usrc_writeUTrieStruct(FILE *f, + const char *prefix, + const UTrie *pTrie, + const char *indexName, const char *dataName, + const char *getFoldingOffsetName, + const char *postfix); + +#endif diff --git a/icuSources/tools/toolutil/xmlparser.cpp b/icuSources/tools/toolutil/xmlparser.cpp new file mode 100644 index 00000000..195fa303 --- /dev/null +++ b/icuSources/tools/toolutil/xmlparser.cpp @@ -0,0 +1,820 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2006, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: xmlparser.cpp +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004jul21 +* created by: Andy Heninger +*/ + +#include <stdio.h> +#include "unicode/uchar.h" +#include "unicode/ucnv.h" +#include "unicode/regex.h" +#include "filestrm.h" +#include "xmlparser.h" + +#if !UCONFIG_NO_REGULAR_EXPRESSIONS && !UCONFIG_NO_CONVERSION + +// character constants +enum { + x_QUOT=0x22, + x_AMP=0x26, + x_APOS=0x27, + x_LT=0x3c, + x_GT=0x3e, + x_l=0x6c +}; + +#define XML_SPACES "[ \\u0009\\u000d\\u000a]" + +// XML #4 +#define XML_NAMESTARTCHAR "[[A-Z]:_[a-z][\\u00c0-\\u00d6][\\u00d8-\\u00f6]" \ + "[\\u00f8-\\u02ff][\\u0370-\\u037d][\\u037F-\\u1FFF][\\u200C-\\u200D]" \ + "[\\u2070-\\u218F][\\u2C00-\\u2FEF][\\u3001-\\uD7FF][\\uF900-\\uFDCF]" \ + "[\\uFDF0-\\uFFFD][\\U00010000-\\U000EFFFF]]" + +// XML #5 +#define XML_NAMECHAR "[" XML_NAMESTARTCHAR "\\-.[0-9]\\u00b7[\\u0300-\\u036f][\\u203f-\\u2040]]" + +// XML #6 +#define XML_NAME XML_NAMESTARTCHAR "(?:" XML_NAMECHAR ")*" + +U_NAMESPACE_BEGIN + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UXMLParser) +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UXMLElement) + +// +// UXMLParser constructor. Mostly just initializes the ICU regexes that are +// used for parsing. +// +UXMLParser::UXMLParser(UErrorCode &status) : + // XML Declaration. XML Production #23. + // example: "<?xml version=1.0 encoding="utf-16" ?> + // This is a sloppy implementation - just look for the leading <?xml and the closing ?> + // allow for a possible leading BOM. + mXMLDecl(UnicodeString("(?s)\\uFEFF?<\\?xml.+?\\?>"), 0, status), + + // XML Comment production #15 + // example: "<!-- whatever --> + // note, does not detect an illegal "--" within comments + mXMLComment(UnicodeString("(?s)<!--.+?-->"), 0, status), + + // XML Spaces + // production [3] + mXMLSP(UnicodeString(XML_SPACES "+"), 0, status), + + // XML Doctype decl production #28 + // example "<!DOCTYPE foo SYSTEM "somewhere" > + // TODO: we don't actually parse the DOCTYPE or internal subsets. + // Some internal dtd subsets could confuse this simple-minded + // attempt at skipping over them. + mXMLDoctype(UnicodeString("(?s)<!DOCTYPE.+?>"), 0, status), + + // XML PI production #16 + // example "<?target stuff?> + mXMLPI(UnicodeString("(?s)<\\?.+?\\?>"), 0, status), + + // XML Element Start Productions #40, #41 + // example <foo att1='abc' att2="d e f" > + // capture #1: the tag name + // + mXMLElemStart (UnicodeString("(?s)<(" XML_NAME ")" // match "<tag_name" + "(?:" + XML_SPACES "+" XML_NAME XML_SPACES "*=" XML_SPACES "*" // match "ATTR_NAME = " + "(?:(?:\\\'[^<\\\']*?\\\')|(?:\\\"[^<\\\"]*?\\\"))" // match '"attribute value"' + ")*" // * for zero or more attributes. + XML_SPACES "*?>"), 0, status), // match " >" + + // XML Element End production #42 + // example </foo> + mXMLElemEnd (UnicodeString("</(" XML_NAME ")" XML_SPACES "*>"), 0, status), + + // XML Element Empty production #44 + // example <foo att1="abc" att2="d e f" /> + mXMLElemEmpty (UnicodeString("(?s)<(" XML_NAME ")" // match "<tag_name" + "(?:" + XML_SPACES "+" XML_NAME XML_SPACES "*=" XML_SPACES "*" // match "ATTR_NAME = " + "(?:(?:\\\'[^<\\\']*?\\\')|(?:\\\"[^<\\\"]*?\\\"))" // match '"attribute value"' + ")*" // * for zero or more attributes. + XML_SPACES "*?/>"), 0, status), // match " />" + + + // XMLCharData. Everything but '<'. Note that & will be dealt with later. + mXMLCharData(UnicodeString("(?s)[^<]*"), 0, status), + + // Attribute name = "value". XML Productions 10, 40/41 + // Capture group 1 is name, + // 2 is the attribute value, including the quotes. + // + // Note that attributes are scanned twice. The first time is with + // the regex for an entire element start. There, the attributes + // are checked syntactically, but not separted out one by one. + // Here, we match a single attribute, and make its name and + // attribute value available to the parser code. + mAttrValue(UnicodeString(XML_SPACES "+(" XML_NAME ")" XML_SPACES "*=" XML_SPACES "*" + "((?:\\\'[^<\\\']*?\\\')|(?:\\\"[^<\\\"]*?\\\"))"), 0, status), + + + mAttrNormalizer(UnicodeString(XML_SPACES), 0, status), + + // Match any of the new-line sequences in content. + // All are changed to \u000a. + mNewLineNormalizer(UnicodeString("\\u000d\\u000a|\\u000d\\u0085|\\u000a|\\u000d|\\u0085|\\u2028"), 0, status), + + // & char references + // We will figure out what we've got based on which capture group has content. + // The last one is a catchall for unrecognized entity references.. + // 1 2 3 4 5 6 7 8 + mAmps(UnicodeString("&(?:(amp;)|(lt;)|(gt;)|(apos;)|(quot;)|#x([0-9A-Fa-f]{1,8});|#([0-9]{1,8});|(.))"), + 0, status), + + fNames(status), + fElementStack(status), + fOneLF((UChar)0x0a) // Plain new-line string, used in new line normalization. + { + } + +UXMLParser * +UXMLParser::createParser(UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { + return NULL; + } else { + return new UXMLParser(errorCode); + } +} + +UXMLParser::~UXMLParser() {} + +UXMLElement * +UXMLParser::parseFile(const char *filename, UErrorCode &errorCode) { + char bytes[4096], charsetBuffer[100]; + FileStream *f; + const char *charset, *pb; + UnicodeString src; + UConverter *cnv; + UChar *buffer, *pu; + int32_t fileLength, bytesLength, length, capacity; + UBool flush; + + if(U_FAILURE(errorCode)) { + return NULL; + } + + f=T_FileStream_open(filename, "rb"); + if(f==NULL) { + errorCode=U_FILE_ACCESS_ERROR; + return NULL; + } + + bytesLength=T_FileStream_read(f, bytes, (int32_t)sizeof(bytes)); + if(bytesLength<(int32_t)sizeof(bytes)) { + // we have already read the entire file + fileLength=bytesLength; + } else { + // get the file length + fileLength=T_FileStream_size(f); + } + + /* + * get the charset: + * 1. Unicode signature + * 2. treat as ISO-8859-1 and read XML encoding="charser" + * 3. default to UTF-8 + */ + charset=ucnv_detectUnicodeSignature(bytes, bytesLength, NULL, &errorCode); + if(U_SUCCESS(errorCode) && charset!=NULL) { + // open converter according to Unicode signature + cnv=ucnv_open(charset, &errorCode); + } else { + // read as Latin-1 and parse the XML declaration and encoding + cnv=ucnv_open("ISO-8859-1", &errorCode); + if(U_FAILURE(errorCode)) { + // unexpected error opening Latin-1 converter + goto exit; + } + + buffer=src.getBuffer(bytesLength); + if(buffer==NULL) { + // unexpected failure to reserve some string capacity + errorCode=U_MEMORY_ALLOCATION_ERROR; + goto exit; + } + pb=bytes; + pu=buffer; + ucnv_toUnicode( + cnv, + &pu, buffer+src.getCapacity(), + &pb, bytes+bytesLength, + NULL, TRUE, &errorCode); + src.releaseBuffer(U_SUCCESS(errorCode) ? (int32_t)(pu-buffer) : 0); + ucnv_close(cnv); + cnv=NULL; + if(U_FAILURE(errorCode)) { + // unexpected error in conversion from Latin-1 + src.remove(); + goto exit; + } + + // parse XML declaration + if(mXMLDecl.reset(src).lookingAt(0, errorCode)) { + int32_t declEnd=mXMLDecl.end(errorCode); + // go beyond <?xml + int32_t pos=src.indexOf((UChar)x_l)+1; + + mAttrValue.reset(src); + while(pos<declEnd && mAttrValue.lookingAt(pos, errorCode)) { // loop runs once per attribute on this element. + UnicodeString attName = mAttrValue.group(1, errorCode); + UnicodeString attValue = mAttrValue.group(2, errorCode); + + // Trim the quotes from the att value. These are left over from the original regex + // that parsed the attribue, which couldn't conveniently strip them. + attValue.remove(0,1); // one char from the beginning + attValue.truncate(attValue.length()-1); // and one from the end. + + if(attName==UNICODE_STRING("encoding", 8)) { + length=attValue.extract(0, 0x7fffffff, charsetBuffer, (int32_t)sizeof(charsetBuffer)); + charset=charsetBuffer; + break; + } + pos = mAttrValue.end(2, errorCode); + } + + if(charset==NULL) { + // default to UTF-8 + charset="UTF-8"; + } + cnv=ucnv_open(charset, &errorCode); + } + } + + if(U_FAILURE(errorCode)) { + // unable to open the converter + goto exit; + } + + // convert the file contents + capacity=fileLength; // estimated capacity + src.getBuffer(capacity); + src.releaseBuffer(0); // zero length + flush=FALSE; + for(;;) { + // convert contents of bytes[bytesLength] + pb=bytes; + for(;;) { + length=src.length(); + buffer=src.getBuffer(capacity); + if(buffer==NULL) { + // unexpected failure to reserve some string capacity + errorCode=U_MEMORY_ALLOCATION_ERROR; + goto exit; + } + + pu=buffer+length; + ucnv_toUnicode( + cnv, &pu, buffer+src.getCapacity(), + &pb, bytes+bytesLength, + NULL, FALSE, &errorCode); + src.releaseBuffer(U_SUCCESS(errorCode) ? (int32_t)(pu-buffer) : 0); + if(errorCode==U_BUFFER_OVERFLOW_ERROR) { + errorCode=U_ZERO_ERROR; + capacity=(3*src.getCapacity())/2; // increase capacity by 50% + } else { + break; + } + } + + if(U_FAILURE(errorCode)) { + break; // conversion error + } + + if(flush) { + break; // completely converted the file + } + + // read next block + bytesLength=T_FileStream_read(f, bytes, (int32_t)sizeof(bytes)); + if(bytesLength==0) { + // reached end of file, convert once more to flush the converter + flush=TRUE; + } + }; + +exit: + ucnv_close(cnv); + T_FileStream_close(f); + + if(U_SUCCESS(errorCode)) { + return parse(src, errorCode); + } else { + return NULL; + } +} + +UXMLElement * +UXMLParser::parse(const UnicodeString &src, UErrorCode &status) { + if(U_FAILURE(status)) { + return NULL; + } + + UXMLElement *root = NULL; + fPos = 0; // TODO use just a local pos variable and pass it into functions + // where necessary? + + // set all matchers to work on the input string + mXMLDecl.reset(src); + mXMLComment.reset(src); + mXMLSP.reset(src); + mXMLDoctype.reset(src); + mXMLPI.reset(src); + mXMLElemStart.reset(src); + mXMLElemEnd.reset(src); + mXMLElemEmpty.reset(src); + mXMLCharData.reset(src); + mAttrValue.reset(src); + mAttrNormalizer.reset(src); + mNewLineNormalizer.reset(src); + mAmps.reset(src); + + // Consume the XML Declaration, if present. + if (mXMLDecl.lookingAt(fPos, status)) { + fPos = mXMLDecl.end(status); + } + + // Consume "misc" [XML production 27] appearing before DocType + parseMisc(status); + + // Consume a DocType declaration, if present. + if (mXMLDoctype.lookingAt(fPos, status)) { + fPos = mXMLDoctype.end(status); + } + + // Consume additional "misc" [XML production 27] appearing after the DocType + parseMisc(status); + + // Get the root element + if (mXMLElemEmpty.lookingAt(fPos, status)) { + // Root is an empty element (no nested elements or content) + root = createElement(mXMLElemEmpty, status); + fPos = mXMLElemEmpty.end(status); + } else { + if (mXMLElemStart.lookingAt(fPos, status) == FALSE) { + error("Root Element expected", status); + goto errorExit; + } + root = createElement(mXMLElemStart, status); + UXMLElement *el = root; + + // + // This is the loop that consumes the root element of the document, + // including all nested content. Nested elements are handled by + // explicit pushes/pops of the element stack; there is no recursion + // in the control flow of this code. + // "el" always refers to the current element, the one to which content + // is being added. It is above the top of the element stack. + for (;;) { + // Nested Element Start + if (mXMLElemStart.lookingAt(fPos, status)) { + UXMLElement *t = createElement(mXMLElemStart, status); + el->fChildren.addElement(t, status); + t->fParent = el; + fElementStack.push(el, status); + el = t; + continue; + } + + // Text Content. String is concatenated onto the current node's content, + // but only if it contains something other than spaces. + UnicodeString s = scanContent(status); + if (s.length() > 0) { + mXMLSP.reset(s); + if (mXMLSP.matches(status) == FALSE) { + // This chunk of text contains something other than just + // white space. Make a child node for it. + replaceCharRefs(s, status); + el->fChildren.addElement(s.clone(), status); + } + mXMLSP.reset(src); // The matchers need to stay set to the main input string. + continue; + } + + // Comments. Discard. + if (mXMLComment.lookingAt(fPos, status)) { + fPos = mXMLComment.end(status); + continue; + } + + // PIs. Discard. + if (mXMLPI.lookingAt(fPos, status)) { + fPos = mXMLPI.end(status); + continue; + } + + // Element End + if (mXMLElemEnd.lookingAt(fPos, status)) { + fPos = mXMLElemEnd.end(0, status); + const UnicodeString name = mXMLElemEnd.group(1, status); + if (name != *el->fName) { + error("Element start / end tag mismatch", status); + goto errorExit; + } + if (fElementStack.empty()) { + // Close of the root element. We're done with the doc. + el = NULL; + break; + } + el = (UXMLElement *)fElementStack.pop(); + continue; + } + + // Empty Element. Stored as a child of the current element, but not stacked. + if (mXMLElemEmpty.lookingAt(fPos, status)) { + UXMLElement *t = createElement(mXMLElemEmpty, status); + el->fChildren.addElement(t, status); + continue; + } + + // Hit something within the document that doesn't match anything. + // It's an error. + error("Unrecognized markup", status); + break; + } + + if (el != NULL || !fElementStack.empty()) { + // We bailed out early, for some reason. + error("Root element not closed.", status); + goto errorExit; + } + } + + // Root Element parse is complete. + // Consume the annoying xml "Misc" that can appear at the end of the doc. + parseMisc(status); + + // We should have reached the end of the input + if (fPos != src.length()) { + error("Extra content at the end of the document", status); + goto errorExit; + } + + // Success! + return root; + +errorExit: + delete root; + return NULL; +} + +// +// createElement +// We've just matched an element start tag. Create and fill in a UXMLElement object +// for it. +// +UXMLElement * +UXMLParser::createElement(RegexMatcher &mEl, UErrorCode &status) { + // First capture group is the element's name. + UXMLElement *el = new UXMLElement(this, intern(mEl.group(1, status), status), status); + + // Scan for attributes. + int32_t pos = mEl.end(1, status); // The position after the end of the tag name + + while (mAttrValue.lookingAt(pos, status)) { // loop runs once per attribute on this element. + UnicodeString attName = mAttrValue.group(1, status); + UnicodeString attValue = mAttrValue.group(2, status); + + // Trim the quotes from the att value. These are left over from the original regex + // that parsed the attribue, which couldn't conveniently strip them. + attValue.remove(0,1); // one char from the beginning + attValue.truncate(attValue.length()-1); // and one from the end. + + // XML Attribue value normalization. + // This is one of the really screwy parts of the XML spec. + // See http://www.w3.org/TR/2004/REC-xml11-20040204/#AVNormalize + // Note that non-validating parsers must treat all entities as type CDATA + // which simplifies things some. + + // Att normalization step 1: normalize any newlines in the attribute value + mNewLineNormalizer.reset(attValue); + attValue = mNewLineNormalizer.replaceAll(fOneLF, status); + + // Next change all xml white space chars to plain \u0020 spaces. + mAttrNormalizer.reset(attValue); + UnicodeString oneSpace((UChar)0x0020); + attValue = mAttrNormalizer.replaceAll(oneSpace, status); + + // Replace character entities. + replaceCharRefs(attValue, status); + + // Save the attribute name and value in our document structure. + el->fAttNames.addElement((void *)intern(attName, status), status); + el->fAttValues.addElement(attValue.clone(), status); + pos = mAttrValue.end(2, status); + } + fPos = mEl.end(0, status); + return el; +} + +// +// parseMisc +// Consume XML "Misc" [production #27] +// which is any combination of space, PI and comments +// Need to watch end-of-input because xml MISC stuff is allowed after +// the document element, so we WILL scan off the end in this function +// +void +UXMLParser::parseMisc(UErrorCode &status) { + for (;;) { + if (fPos >= mXMLPI.input().length()) { + break; + } + if (mXMLPI.lookingAt(fPos, status)) { + fPos = mXMLPI.end(status); + continue; + } + if (mXMLSP.lookingAt(fPos, status)) { + fPos = mXMLSP.end(status); + continue; + } + if (mXMLComment.lookingAt(fPos, status)) { + fPos = mXMLComment.end(status); + continue; + } + break; + } +} + +// +// Scan for document content. +// +UnicodeString +UXMLParser::scanContent(UErrorCode &status) { + UnicodeString result; + if (mXMLCharData.lookingAt(fPos, status)) { + result = mXMLCharData.group(0, status); + // Normalize the new-lines. (Before char ref substitution) + mNewLineNormalizer.reset(result); + result = mNewLineNormalizer.replaceAll(fOneLF, status); + + // TODO: handle CDATA + fPos = mXMLCharData.end(0, status); + } + + return result; +} + +// +// replaceCharRefs +// +// replace the char entities < & { ካ etc. in a string +// with the corresponding actual character. +// +void +UXMLParser::replaceCharRefs(UnicodeString &s, UErrorCode &status) { + UnicodeString result; + UnicodeString replacement; + int i; + + mAmps.reset(s); + // See the initialization for the regex matcher mAmps. + // Which entity we've matched is determined by which capture group has content, + // which is flaged by start() of that group not being -1. + while (mAmps.find()) { + if (mAmps.start(1, status) != -1) { + replacement.setTo((UChar)x_AMP); + } else if (mAmps.start(2, status) != -1) { + replacement.setTo((UChar)x_LT); + } else if (mAmps.start(3, status) != -1) { + replacement.setTo((UChar)x_GT); + } else if (mAmps.start(4, status) != -1) { + replacement.setTo((UChar)x_APOS); + } else if (mAmps.start(5, status) != -1) { + replacement.setTo((UChar)x_QUOT); + } else if (mAmps.start(6, status) != -1) { + UnicodeString hexString = mAmps.group(6, status); + UChar32 val = 0; + for (i=0; i<hexString.length(); i++) { + val = (val << 4) + u_digit(hexString.charAt(i), 16); + } + // TODO: some verification that the character is valid + replacement.setTo(val); + } else if (mAmps.start(7, status) != -1) { + UnicodeString decimalString = mAmps.group(7, status); + UChar32 val = 0; + for (i=0; i<decimalString.length(); i++) { + val = val*10 + u_digit(decimalString.charAt(i), 10); + } + // TODO: some verification that the character is valid + replacement.setTo(val); + } else { + // An unrecognized &entity; Leave it alone. + // TODO: check that it really looks like an entity, and is not some + // random & in the text. + replacement = mAmps.group(0, status); + } + mAmps.appendReplacement(result, replacement, status); + } + mAmps.appendTail(result); + s = result; +} + +void +UXMLParser::error(const char *message, UErrorCode &status) { + // TODO: something better here... + const UnicodeString &src=mXMLDecl.input(); + int line = 0; + int ci = 0; + while (ci < fPos && ci>=0) { + ci = src.indexOf((UChar)0x0a, ci+1); + line++; + } + fprintf(stderr, "Error: %s at line %d\n", message, line); + if (U_SUCCESS(status)) { + status = U_PARSE_ERROR; + } +} + +// intern strings like in Java + +const UnicodeString * +UXMLParser::intern(const UnicodeString &s, UErrorCode &errorCode) { + const UHashElement *he=fNames.find(s); + if(he!=NULL) { + // already a known name, return its hashed key pointer + return (const UnicodeString *)he->key.pointer; + } else { + // add this new name and return its hashed key pointer + fNames.puti(s, 0, errorCode); + he=fNames.find(s); + return (const UnicodeString *)he->key.pointer; + } +} + +const UnicodeString * +UXMLParser::findName(const UnicodeString &s) const { + const UHashElement *he=fNames.find(s); + if(he!=NULL) { + // a known name, return its hashed key pointer + return (const UnicodeString *)he->key.pointer; + } else { + // unknown name + return NULL; + } +} + +// UXMLElement ------------------------------------------------------------- *** + +UXMLElement::UXMLElement(const UXMLParser *parser, const UnicodeString *name, UErrorCode &errorCode) : + fParser(parser), + fName(name), + fAttNames(errorCode), + fAttValues(errorCode), + fChildren(errorCode), + fParent(NULL) +{ +} + +UXMLElement::~UXMLElement() { + int i; + // attribute names are owned by the UXMLParser, don't delete them here + for (i=fAttValues.size()-1; i>=0; i--) { + delete (UObject *)fAttValues.elementAt(i); + } + for (i=fChildren.size()-1; i>=0; i--) { + delete (UObject *)fChildren.elementAt(i); + } +} + +const UnicodeString & +UXMLElement::getTagName() const { + return *fName; +} + +UnicodeString +UXMLElement::getText(UBool recurse) const { + UnicodeString text; + appendText(text, recurse); + return text; +} + +void +UXMLElement::appendText(UnicodeString &text, UBool recurse) const { + const UObject *node; + int32_t i, count=fChildren.size(); + for(i=0; i<count; ++i) { + node=(const UObject *)fChildren.elementAt(i); + if(node->getDynamicClassID()==UnicodeString::getStaticClassID()) { + text.append(*(const UnicodeString *)node); + } else if(recurse) /* must be a UXMLElement */ { + ((const UXMLElement *)node)->appendText(text, recurse); + } + } +} + +int32_t +UXMLElement::countAttributes() const { + return fAttNames.size(); +} + +const UnicodeString * +UXMLElement::getAttribute(int32_t i, UnicodeString &name, UnicodeString &value) const { + if(0<=i && i<fAttNames.size()) { + name.setTo(*(const UnicodeString *)fAttNames.elementAt(i)); + value.setTo(*(const UnicodeString *)fAttValues.elementAt(i)); + return &value; // or return (UnicodeString *)fAttValues.elementAt(i); + } else { + return NULL; + } +} + +const UnicodeString * +UXMLElement::getAttribute(const UnicodeString &name) const { + // search for the attribute name by comparing the interned pointer, + // not the string contents + const UnicodeString *p=fParser->findName(name); + if(p==NULL) { + return NULL; // no such attribute seen by the parser at all + } + + int32_t i, count=fAttNames.size(); + for(i=0; i<count; ++i) { + if(p==(const UnicodeString *)fAttNames.elementAt(i)) { + return (const UnicodeString *)fAttValues.elementAt(i); + } + } + return NULL; +} + +int32_t +UXMLElement::countChildren() const { + return fChildren.size(); +} + +const UObject * +UXMLElement::getChild(int32_t i, UXMLNodeType &type) const { + if(0<=i && i<fChildren.size()) { + const UObject *node=(const UObject *)fChildren.elementAt(i); + if(node->getDynamicClassID()==UXMLElement::getStaticClassID()) { + type=UXML_NODE_TYPE_ELEMENT; + } else { + type=UXML_NODE_TYPE_STRING; + } + return node; + } else { + return NULL; + } +} + +const UXMLElement * +UXMLElement::nextChildElement(int32_t &i) const { + if(i<0) { + return NULL; + } + + const UObject *node; + int32_t count=fChildren.size(); + while(i<count) { + node=(const UObject *)fChildren.elementAt(i++); + // TODO: see if ICU can use C++ instanceof instead of its own poor man's RTTI + // if(node instanceof UXMLElement) { + if(node->getDynamicClassID()==UXMLElement::getStaticClassID()) { + return (const UXMLElement *)node; + } + } + return NULL; +} + +const UXMLElement * +UXMLElement::getChildElement(const UnicodeString &name) const { + // search for the element name by comparing the interned pointer, + // not the string contents + const UnicodeString *p=fParser->findName(name); + if(p==NULL) { + return NULL; // no such element seen by the parser at all + } + + const UObject *node; + int32_t i, count=fChildren.size(); + for(i=0; i<count; ++i) { + node=(const UObject *)fChildren.elementAt(i); + if(node->getDynamicClassID()==UXMLElement::getStaticClassID()) { + const UXMLElement *elem=(const UXMLElement *)node; + if(p==elem->fName) { + return elem; + } + } + } + return NULL; +} + +U_NAMESPACE_END + +#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ + diff --git a/icuSources/tools/toolutil/xmlparser.h b/icuSources/tools/toolutil/xmlparser.h new file mode 100644 index 00000000..a619769b --- /dev/null +++ b/icuSources/tools/toolutil/xmlparser.h @@ -0,0 +1,245 @@ +/* +******************************************************************************* +* +* Copyright (C) 2004-2005, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: xmlparser.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2004jul21 +* created by: Andy Heninger +* +* Tiny XML parser using ICU and intended for use in ICU tests and in build tools. +* Not suitable for production use. Not supported. +* Not conformant. Not efficient. +* But very small. +*/ + +#ifndef __XMLPARSER_H__ +#define __XMLPARSER_H__ + +#include "unicode/uobject.h" +#include "unicode/unistr.h" +#include "unicode/regex.h" +#include "uvector.h" +#include "hash.h" + +#if !UCONFIG_NO_REGULAR_EXPRESSIONS && !UCONFIG_NO_CONVERSION + +enum UXMLNodeType { + /** Node type string (text contents), stored as a UnicodeString. */ + UXML_NODE_TYPE_STRING, + /** Node type element, stored as a UXMLElement. */ + UXML_NODE_TYPE_ELEMENT, + UXML_NODE_TYPE_COUNT +}; + +U_NAMESPACE_BEGIN + +class UXMLParser; + +/** + * This class represents an element node in a parsed XML tree. + */ +class U_TOOLUTIL_API UXMLElement : public UObject { +public: + /** + * Destructor. + */ + virtual ~UXMLElement(); + + /** + * Get the tag name of this element. + */ + const UnicodeString &getTagName() const; + /** + * Get the text contents of the element. + * Append the contents of all text child nodes. + * @param recurse If TRUE, also recursively appends the contents of all + * text child nodes of element children. + * @return The text contents. + */ + UnicodeString getText(UBool recurse) const; + /** + * Get the number of attributes. + */ + int32_t countAttributes() const; + /** + * Get the i-th attribute. + * @param i Index of the attribute. + * @param name Output parameter, receives the attribute name. + * @param value Output parameter, receives the attribute value. + * @return A pointer to the attribute value (may be &value or a pointer to an + * internal string object), or NULL if i is out of bounds. + */ + const UnicodeString *getAttribute(int32_t i, UnicodeString &name, UnicodeString &value) const; + /** + * Get the value of the attribute with the given name. + * @param name Attribute name to be looked up. + * @return A pointer to the attribute value, or NULL if this element + * does not have this attribute. + */ + const UnicodeString *getAttribute(const UnicodeString &name) const; + /** + * Get the number of child nodes. + */ + int32_t countChildren() const; + /** + * Get the i-th child node. + * @param i Index of the child node. + * @param type The child node type. + * @return A pointer to the child node object, or NULL if i is out of bounds. + */ + const UObject *getChild(int32_t i, UXMLNodeType &type) const; + /** + * Get the next child element node, skipping non-element child nodes. + * @param i Enumeration index; initialize to 0 before getting the first child element. + * @return A pointer to the next child element, or NULL if there is none. + */ + const UXMLElement *nextChildElement(int32_t &i) const; + /** + * Get the immediate child element with the given name. + * If there are multiple child elements with this name, then return + * the first one. + * @param name Element name to be looked up. + * @return A pointer to the element node, or NULL if this element + * does not have this immediate child element. + */ + const UXMLElement *getChildElement(const UnicodeString &name) const; + + /** + * ICU "poor man's RTTI", returns a UClassID for the actual class. + */ + virtual UClassID getDynamicClassID() const; + + /** + * ICU "poor man's RTTI", returns a UClassID for this class. + */ + static UClassID U_EXPORT2 getStaticClassID(); + +private: + // prevent default construction etc. + UXMLElement(); + UXMLElement(const UXMLElement &other); + UXMLElement &operator=(const UXMLElement &other); + + void appendText(UnicodeString &text, UBool recurse) const; + + friend class UXMLParser; + + UXMLElement(const UXMLParser *parser, const UnicodeString *name, UErrorCode &errorCode); + + const UXMLParser *fParser; + const UnicodeString *fName; // The tag name of this element (owned by the UXMLParser) + UnicodeString fContent; // The text content of this node. All element content is + // concatenated even when there are intervening nested elements + // (which doesn't happen with most xml files we care about) + // Sections of content containing only white space are dropped, + // which gets rid the bogus white space content from + // elements which are primarily containers for nested elements. + UVector fAttNames; // A vector containing the names of this element's attributes + // The names are UnicodeString objects, owned by the UXMLParser. + UVector fAttValues; // A vector containing the attribute values for + // this element's attributes. The order is the same + // as that of the attribute name vector. + + UVector fChildren; // The child nodes of this element (a Vector) + + UXMLElement *fParent; // A pointer to the parent element of this element. +}; + +/** + * A simple XML parser; it is neither efficient nor conformant and only useful for + * restricted types of XML documents. + * + * The parse methods parse whole documents and return the parse trees via their + * root elements. + */ +class U_TOOLUTIL_API UXMLParser : public UObject { +public: + /** + * Create an XML parser. + */ + static UXMLParser *createParser(UErrorCode &errorCode); + /** + * Destructor. + */ + virtual ~UXMLParser(); + + /** + * Parse an XML document, create the entire document tree, and + * return a pointer to the root element of the parsed tree. + * The caller must delete the element. + */ + UXMLElement *parse(const UnicodeString &src, UErrorCode &errorCode); + /** + * Parse an XML file, create the entire document tree, and + * return a pointer to the root element of the parsed tree. + * The caller must delete the element. + */ + UXMLElement *parseFile(const char *filename, UErrorCode &errorCode); + + /** + * ICU "poor man's RTTI", returns a UClassID for the actual class. + */ + virtual UClassID getDynamicClassID() const; + + /** + * ICU "poor man's RTTI", returns a UClassID for this class. + */ + static UClassID U_EXPORT2 getStaticClassID(); + +private: + // prevent default construction etc. + UXMLParser(); + UXMLParser(const UXMLParser &other); + UXMLParser &operator=(const UXMLParser &other); + + // constructor + UXMLParser(UErrorCode &status); + + void parseMisc(UErrorCode &status); + UXMLElement *createElement(RegexMatcher &mEl, UErrorCode &status); + void error(const char *message, UErrorCode &status); + UnicodeString scanContent(UErrorCode &status); + void replaceCharRefs(UnicodeString &s, UErrorCode &status); + + const UnicodeString *intern(const UnicodeString &s, UErrorCode &errorCode); +public: + // public for UXMLElement only + const UnicodeString *findName(const UnicodeString &s) const; +private: + + // There is one ICU regex matcher for each of the major XML syntax items + // that are recognized. + RegexMatcher mXMLDecl; + RegexMatcher mXMLComment; + RegexMatcher mXMLSP; + RegexMatcher mXMLDoctype; + RegexMatcher mXMLPI; + RegexMatcher mXMLElemStart; + RegexMatcher mXMLElemEnd; + RegexMatcher mXMLElemEmpty; + RegexMatcher mXMLCharData; + RegexMatcher mAttrValue; + RegexMatcher mAttrNormalizer; + RegexMatcher mNewLineNormalizer; + RegexMatcher mAmps; + + Hashtable fNames; // interned element/attribute name strings + UStack fElementStack; // Stack holds the parent elements when nested + // elements are being parsed. All items on this + // stack are of type UXMLElement. + int32_t fPos; // String index of the current scan position in + // xml source (in fSrc). + UnicodeString fOneLF; +}; + +U_NAMESPACE_END +#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ + +#endif diff --git a/icuSources/tools/tzcode/Makefile.in b/icuSources/tools/tzcode/Makefile.in new file mode 100644 index 00000000..af9ff6e9 --- /dev/null +++ b/icuSources/tools/tzcode/Makefile.in @@ -0,0 +1,88 @@ +# Some Portions Copyright (c) 2006 IBM and others. All Rights Reserved. + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +top_builddir = ../.. + +subdir = tools/tzcode + +include $(top_builddir)/icudefs.mk + +OBJECTS= zic.o localtime.o asctime.o scheck.o ialloc.o +TZDATA = $(firstword $(wildcard ./tzdata*.tar.gz) $(wildcard $(srcdir)/tzdata*.tar.gz)) + +ifeq ($(TZDATA),) +all: + @echo ERROR tzdata*.tar.gz can\'t be found. + @false +else +all: icu_data +endif + +PRIMARY_YDATA= africa antarctica asia australasia \ + europe northamerica southamerica +YDATA= $(PRIMARY_YDATA) pacificnew etcetera factory backward +NDATA= systemv +SDATA= solar87 solar88 solar89 +TDATA= $(YDATA) $(NDATA) $(SDATA) +YEARISTYPE= ./yearistype + +ZIC = ./zic +TZDIR=zoneinfo + +CFLAGS+=-D_POSIX_C_SOURCE +CPPFLAGS+= -DTZDIR=\"$(TZDIR)\" + +# more data +XDATA=zone.tab yearistype.sh leapseconds iso3166.tab +ICUDATA=ZoneMetaData.java icu_zone.txt tz2icu zoneinfo.txt + + + +zic: $(OBJECTS) yearistype $(srcdir)/tz2icu.h + $(CC) $(CFLAGS) $(LFLAGS) -I$(srcdir) $(OBJECTS) $(LDLIBS) -o $@ + +tz2icu: $(srcdir)/tz2icu.cpp $(srcdir)/tz2icu.h + $(CXX) -W -Wall -I$(srcdir) -pedantic $(srcdir)/tz2icu.cpp -o $@ + +yearistype.sh: $(TZDATA) + gunzip -d < $(TZDATA) | tar xf - + +yearistype: yearistype.sh + cp yearistype.sh yearistype + chmod +x yearistype + +tz.alias: $(srcdir)/tz.alias + cp $< . + +posix_only: zic $(TDATA) + $(ZIC) -y $(YEARISTYPE) -d $(TZDIR) -L /dev/null $(TDATA) + + +icu_data: tz2icu posix_only tz.alias + ./tz2icu $(TZDIR) zone.tab `echo $(TZDATA) | sed -e "s/.*\/tzdata//;s/\.tar\.gz$$//"` + +clean: + -rm -f core *.o *.out zdump zic yearistype date + @echo ICU specific cleanup: + -rm -f $(ICUDATA) + -rm -rf $(TZDIR) +ifneq ($(srcdir),.) + -$(RMV) tz.alias +endif +ifneq ($(TZDATA),) + -rm -rf `gunzip -d < $(TZDATA) | tar tf - | grep -o '[^ ]*$$' | tr '\n' ' '` +endif + +dataclean: clean + -rm -f $(TDATA) $(XDATA) + +distclean: dataclean clean + -rm -f Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + diff --git a/icuSources/tools/tzcode/asctime.c b/icuSources/tools/tzcode/asctime.c new file mode 100644 index 00000000..e0804f16 --- /dev/null +++ b/icuSources/tools/tzcode/asctime.c @@ -0,0 +1,138 @@ +/* +** This file is in the public domain, so clarified as of +** 1996-06-05 by Arthur David Olson. +*/ + +/* +** Avoid the temptation to punt entirely to strftime; +** the output of strftime is supposed to be locale specific +** whereas the output of asctime is supposed to be constant. +*/ + +#ifndef lint +#ifndef NOID +static char elsieid[] = "@(#)asctime.c 8.2"; +#endif /* !defined NOID */ +#endif /* !defined lint */ + +/*LINTLIBRARY*/ + +#include "private.h" +#include "tzfile.h" + +/* +** Some systems only handle "%.2d"; others only handle "%02d"; +** "%02.2d" makes (most) everybody happy. +** At least some versions of gcc warn about the %02.2d; +** we conditionalize below to avoid the warning. +*/ +/* +** All years associated with 32-bit time_t values are exactly four digits long; +** some years associated with 64-bit time_t values are not. +** Vintage programs are coded for years that are always four digits long +** and may assume that the newline always lands in the same place. +** For years that are less than four digits, we pad the output with +** leading zeroes to get the newline in the traditional place. +** The -4 ensures that we get four characters of output even if +** we call a strftime variant that produces fewer characters for some years. +** The ISO C 1999 and POSIX 1003.1-2004 standards prohibit padding the year, +** but many implementations pad anyway; most likely the standards are buggy. +*/ +#ifdef __GNUC__ +#define ASCTIME_FMT "%.3s %.3s%3d %2.2d:%2.2d:%2.2d %-4s\n" +#else /* !defined __GNUC__ */ +#define ASCTIME_FMT "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %-4s\n" +#endif /* !defined __GNUC__ */ +/* +** For years that are more than four digits we put extra spaces before the year +** so that code trying to overwrite the newline won't end up overwriting +** a digit within a year and truncating the year (operating on the assumption +** that no output is better than wrong output). +*/ +#ifdef __GNUC__ +#define ASCTIME_FMT_B "%.3s %.3s%3d %2.2d:%2.2d:%2.2d %s\n" +#else /* !defined __GNUC__ */ +#define ASCTIME_FMT_B "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %s\n" +#endif /* !defined __GNUC__ */ + +#define STD_ASCTIME_BUF_SIZE 26 +/* +** Big enough for something such as +** ??? ???-2147483648 -2147483648:-2147483648:-2147483648 -2147483648\n +** (two three-character abbreviations, five strings denoting integers, +** seven explicit spaces, two explicit colons, a newline, +** and a trailing ASCII nul). +** The values above are for systems where an int is 32 bits and are provided +** as an example; the define below calculates the maximum for the system at +** hand. +*/ +#define MAX_ASCTIME_BUF_SIZE (2*3+5*INT_STRLEN_MAXIMUM(int)+7+2+1+1) + +static char buf_asctime[MAX_ASCTIME_BUF_SIZE]; + +/* +** A la ISO/IEC 9945-1, ANSI/IEEE Std 1003.1, 2004 Edition. +*/ + +char * +asctime_r(timeptr, buf) +register const struct tm * timeptr; +char * buf; +{ + static const char wday_name[][3] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + static const char mon_name[][3] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; + register const char * wn; + register const char * mn; + char year[INT_STRLEN_MAXIMUM(int) + 2]; + char result[MAX_ASCTIME_BUF_SIZE]; + + if (timeptr->tm_wday < 0 || timeptr->tm_wday >= DAYSPERWEEK) + wn = "???"; + else wn = wday_name[timeptr->tm_wday]; + if (timeptr->tm_mon < 0 || timeptr->tm_mon >= MONSPERYEAR) + mn = "???"; + else mn = mon_name[timeptr->tm_mon]; + /* + ** Use strftime's %Y to generate the year, to avoid overflow problems + ** when computing timeptr->tm_year + TM_YEAR_BASE. + ** Assume that strftime is unaffected by other out-of-range members + ** (e.g., timeptr->tm_mday) when processing "%Y". + */ + (void) strftime(year, sizeof year, "%Y", timeptr); + /* + ** We avoid using snprintf since it's not available on all systems. + */ + (void) sprintf(result, + ((strlen(year) <= 4) ? ASCTIME_FMT : ASCTIME_FMT_B), + wn, mn, + timeptr->tm_mday, timeptr->tm_hour, + timeptr->tm_min, timeptr->tm_sec, + year); + if (strlen(result) < STD_ASCTIME_BUF_SIZE || buf == buf_asctime) { + (void) strcpy(buf, result); + return buf; + } else { +#ifdef EOVERFLOW + errno = EOVERFLOW; +#else /* !defined EOVERFLOW */ + errno = EINVAL; +#endif /* !defined EOVERFLOW */ + return NULL; + } +} + +/* +** A la ISO/IEC 9945-1, ANSI/IEEE Std 1003.1, 2004 Edition. +*/ + +char * +asctime(timeptr) +register const struct tm * timeptr; +{ + return asctime_r(timeptr, buf_asctime); +} diff --git a/icuSources/tools/tzcode/ialloc.c b/icuSources/tools/tzcode/ialloc.c new file mode 100644 index 00000000..1fc2035f --- /dev/null +++ b/icuSources/tools/tzcode/ialloc.c @@ -0,0 +1,86 @@ +/* +** This file is in the public domain, so clarified as of +** 2006-07-17 by Arthur David Olson. +*/ + +#ifndef lint +#ifndef NOID +static char elsieid[] = "@(#)ialloc.c 8.30"; +#endif /* !defined NOID */ +#endif /* !defined lint */ + +/*LINTLIBRARY*/ + +#include "private.h" + +#define nonzero(n) (((n) == 0) ? 1 : (n)) + +char * +imalloc(n) +const int n; +{ + return malloc((size_t) nonzero(n)); +} + +char * +icalloc(nelem, elsize) +int nelem; +int elsize; +{ + if (nelem == 0 || elsize == 0) + nelem = elsize = 1; + return calloc((size_t) nelem, (size_t) elsize); +} + +void * +irealloc(pointer, size) +void * const pointer; +const int size; +{ + if (pointer == NULL) + return imalloc(size); + return realloc((void *) pointer, (size_t) nonzero(size)); +} + +char * +icatalloc(old, new) +char * const old; +const char * const new; +{ + register char * result; + register int oldsize, newsize; + + newsize = (new == NULL) ? 0 : strlen(new); + if (old == NULL) + oldsize = 0; + else if (newsize == 0) + return old; + else oldsize = strlen(old); + if ((result = irealloc(old, oldsize + newsize + 1)) != NULL) + if (new != NULL) + (void) strcpy(result + oldsize, new); + return result; +} + +char * +icpyalloc(string) +const char * const string; +{ + return icatalloc((char *) NULL, string); +} + +void +ifree(p) +char * const p; +{ + if (p != NULL) + (void) free(p); +} + +void +icfree(p) +char * const p; +{ + if (p != NULL) + (void) free(p); +} diff --git a/icuSources/tools/tzcode/localtime.c b/icuSources/tools/tzcode/localtime.c new file mode 100644 index 00000000..1fdfbdbb --- /dev/null +++ b/icuSources/tools/tzcode/localtime.c @@ -0,0 +1,2053 @@ +/* +** This file is in the public domain, so clarified as of +** 1996-06-05 by Arthur David Olson. +*/ + +#ifndef lint +#ifndef NOID +static char elsieid[] = "@(#)localtime.c 8.5"; +#endif /* !defined NOID */ +#endif /* !defined lint */ + +/* +** Leap second handling from Bradley White. +** POSIX-style TZ environment variable handling from Guy Harris. +*/ + +/*LINTLIBRARY*/ + +#include "private.h" +#include "tzfile.h" +#include "fcntl.h" +#include "float.h" /* for FLT_MAX and DBL_MAX */ + +#ifndef TZ_ABBR_MAX_LEN +#define TZ_ABBR_MAX_LEN 16 +#endif /* !defined TZ_ABBR_MAX_LEN */ + +#ifndef TZ_ABBR_CHAR_SET +#define TZ_ABBR_CHAR_SET \ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 :+-._" +#endif /* !defined TZ_ABBR_CHAR_SET */ + +#ifndef TZ_ABBR_ERR_CHAR +#define TZ_ABBR_ERR_CHAR '_' +#endif /* !defined TZ_ABBR_ERR_CHAR */ + +/* +** SunOS 4.1.1 headers lack O_BINARY. +*/ + +#ifdef O_BINARY +#define OPEN_MODE (O_RDONLY | O_BINARY) +#endif /* defined O_BINARY */ +#ifndef O_BINARY +#define OPEN_MODE O_RDONLY +#endif /* !defined O_BINARY */ + +#ifndef WILDABBR +/* +** Someone might make incorrect use of a time zone abbreviation: +** 1. They might reference tzname[0] before calling tzset (explicitly +** or implicitly). +** 2. They might reference tzname[1] before calling tzset (explicitly +** or implicitly). +** 3. They might reference tzname[1] after setting to a time zone +** in which Daylight Saving Time is never observed. +** 4. They might reference tzname[0] after setting to a time zone +** in which Standard Time is never observed. +** 5. They might reference tm.TM_ZONE after calling offtime. +** What's best to do in the above cases is open to debate; +** for now, we just set things up so that in any of the five cases +** WILDABBR is used. Another possibility: initialize tzname[0] to the +** string "tzname[0] used before set", and similarly for the other cases. +** And another: initialize tzname[0] to "ERA", with an explanation in the +** manual page of what this "time zone abbreviation" means (doing this so +** that tzname[0] has the "normal" length of three characters). +*/ +#define WILDABBR " " +#endif /* !defined WILDABBR */ + +static char wildabbr[] = WILDABBR; + +static const char gmt[] = "GMT"; + +/* +** The DST rules to use if TZ has no rules and we can't load TZDEFRULES. +** We default to US rules as of 1999-08-17. +** POSIX 1003.1 section 8.1.1 says that the default DST rules are +** implementation dependent; for historical reasons, US rules are a +** common default. +*/ +#ifndef TZDEFRULESTRING +#define TZDEFRULESTRING ",M4.1.0,M10.5.0" +#endif /* !defined TZDEFDST */ + +struct ttinfo { /* time type information */ + long tt_gmtoff; /* UTC offset in seconds */ + int tt_isdst; /* used to set tm_isdst */ + int tt_abbrind; /* abbreviation list index */ + int tt_ttisstd; /* TRUE if transition is std time */ + int tt_ttisgmt; /* TRUE if transition is UTC */ +}; + +struct lsinfo { /* leap second information */ + time_t ls_trans; /* transition time */ + long ls_corr; /* correction to apply */ +}; + +#define BIGGEST(a, b) (((a) > (b)) ? (a) : (b)) + +#ifdef TZNAME_MAX +#define MY_TZNAME_MAX TZNAME_MAX +#endif /* defined TZNAME_MAX */ +#ifndef TZNAME_MAX +#define MY_TZNAME_MAX 255 +#endif /* !defined TZNAME_MAX */ + +struct state { + int leapcnt; + int timecnt; + int typecnt; + int charcnt; + int goback; + int goahead; + time_t ats[TZ_MAX_TIMES]; + unsigned char types[TZ_MAX_TIMES]; + struct ttinfo ttis[TZ_MAX_TYPES]; + char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, sizeof gmt), + (2 * (MY_TZNAME_MAX + 1)))]; + struct lsinfo lsis[TZ_MAX_LEAPS]; +}; + +struct rule { + int r_type; /* type of rule--see below */ + int r_day; /* day number of rule */ + int r_week; /* week number of rule */ + int r_mon; /* month number of rule */ + long r_time; /* transition time of rule */ +}; + +#define JULIAN_DAY 0 /* Jn - Julian day */ +#define DAY_OF_YEAR 1 /* n - day of year */ +#define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */ + +/* +** Prototypes for static functions. +*/ + +static long detzcode P((const char * codep)); +static time_t detzcode64 P((const char * codep)); +static int differ_by_repeat P((time_t t1, time_t t0)); +static const char * getzname P((const char * strp)); +static const char * getqzname P((const char * strp, const int delim)); +static const char * getnum P((const char * strp, int * nump, int min, + int max)); +static const char * getsecs P((const char * strp, long * secsp)); +static const char * getoffset P((const char * strp, long * offsetp)); +static const char * getrule P((const char * strp, struct rule * rulep)); +static void gmtload P((struct state * sp)); +static struct tm * gmtsub P((const time_t * timep, long offset, + struct tm * tmp)); +static struct tm * localsub P((const time_t * timep, long offset, + struct tm * tmp)); +static int increment_overflow P((int * number, int delta)); +static int leaps_thru_end_of P((int y)); +static int long_increment_overflow P((long * number, int delta)); +static int long_normalize_overflow P((long * tensptr, + int * unitsptr, int base)); +static int normalize_overflow P((int * tensptr, int * unitsptr, + int base)); +static void settzname P((void)); +static time_t time1 P((struct tm * tmp, + struct tm * (*funcp) P((const time_t *, + long, struct tm *)), + long offset)); +static time_t time2 P((struct tm *tmp, + struct tm * (*funcp) P((const time_t *, + long, struct tm*)), + long offset, int * okayp)); +static time_t time2sub P((struct tm *tmp, + struct tm * (*funcp) P((const time_t *, + long, struct tm*)), + long offset, int * okayp, int do_norm_secs)); +static struct tm * timesub P((const time_t * timep, long offset, + const struct state * sp, struct tm * tmp)); +static int tmcomp P((const struct tm * atmp, + const struct tm * btmp)); +static time_t transtime P((time_t janfirst, int year, + const struct rule * rulep, long offset)); +static int tzload P((const char * name, struct state * sp, + int doextend)); +static int tzparse P((const char * name, struct state * sp, + int lastditch)); + +#ifdef ALL_STATE +static struct state * lclptr; +static struct state * gmtptr; +#endif /* defined ALL_STATE */ + +#ifndef ALL_STATE +static struct state lclmem; +static struct state gmtmem; +#define lclptr (&lclmem) +#define gmtptr (&gmtmem) +#endif /* State Farm */ + +#ifndef TZ_STRLEN_MAX +#define TZ_STRLEN_MAX 255 +#endif /* !defined TZ_STRLEN_MAX */ + +static char lcl_TZname[TZ_STRLEN_MAX + 1]; +static int lcl_is_set; +static int gmt_is_set; + +char * tzname[2] = { + wildabbr, + wildabbr +}; + +/* +** Section 4.12.3 of X3.159-1989 requires that +** Except for the strftime function, these functions [asctime, +** ctime, gmtime, localtime] return values in one of two static +** objects: a broken-down time structure and an array of char. +** Thanks to Paul Eggert for noting this. +*/ + +static struct tm tm; + +#ifdef USG_COMPAT +time_t timezone = 0; +int daylight = 0; +#endif /* defined USG_COMPAT */ + +#ifdef ALTZONE +time_t altzone = 0; +#endif /* defined ALTZONE */ + +static long +detzcode(codep) +const char * const codep; +{ + register long result; + register int i; + + result = (codep[0] & 0x80) ? ~0L : 0; + for (i = 0; i < 4; ++i) + result = (result << 8) | (codep[i] & 0xff); + return result; +} + +static time_t +detzcode64(codep) +const char * const codep; +{ + register time_t result; + register int i; + + result = (codep[0] & 0x80) ? (~(int_fast64_t) 0) : 0; + for (i = 0; i < 8; ++i) + result = result * 256 + (codep[i] & 0xff); + return result; +} + +static void +settzname P((void)) +{ + register struct state * const sp = lclptr; + register int i; + + tzname[0] = wildabbr; + tzname[1] = wildabbr; +#ifdef USG_COMPAT + daylight = 0; + timezone = 0; +#endif /* defined USG_COMPAT */ +#ifdef ALTZONE + altzone = 0; +#endif /* defined ALTZONE */ +#ifdef ALL_STATE + if (sp == NULL) { + tzname[0] = tzname[1] = gmt; + return; + } +#endif /* defined ALL_STATE */ + for (i = 0; i < sp->typecnt; ++i) { + register const struct ttinfo * const ttisp = &sp->ttis[i]; + + tzname[ttisp->tt_isdst] = + &sp->chars[ttisp->tt_abbrind]; +#ifdef USG_COMPAT + if (ttisp->tt_isdst) + daylight = 1; + if (i == 0 || !ttisp->tt_isdst) + timezone = -(ttisp->tt_gmtoff); +#endif /* defined USG_COMPAT */ +#ifdef ALTZONE + if (i == 0 || ttisp->tt_isdst) + altzone = -(ttisp->tt_gmtoff); +#endif /* defined ALTZONE */ + } + /* + ** And to get the latest zone names into tzname. . . + */ + for (i = 0; i < sp->timecnt; ++i) { + register const struct ttinfo * const ttisp = + &sp->ttis[ + sp->types[i]]; + + tzname[ttisp->tt_isdst] = + &sp->chars[ttisp->tt_abbrind]; + } + /* + ** Finally, scrub the abbreviations. + ** First, replace bogus characters. + */ + for (i = 0; i < sp->charcnt; ++i) + if (strchr(TZ_ABBR_CHAR_SET, sp->chars[i]) == NULL) + sp->chars[i] = TZ_ABBR_ERR_CHAR; + /* + ** Second, truncate long abbreviations. + */ + for (i = 0; i < sp->typecnt; ++i) { + register const struct ttinfo * const ttisp = &sp->ttis[i]; + register char * cp = &sp->chars[ttisp->tt_abbrind]; + + if (strlen(cp) > TZ_ABBR_MAX_LEN && + strcmp(cp, GRANDPARENTED) != 0) + *(cp + TZ_ABBR_MAX_LEN) = '\0'; + } +} + +static int +differ_by_repeat(t1, t0) +const time_t t1; +const time_t t0; +{ + if (TYPE_INTEGRAL(time_t) && + TYPE_BIT(time_t) - TYPE_SIGNED(time_t) < SECSPERREPEAT_BITS) + return 0; + return t1 - t0 == SECSPERREPEAT; +} + +static int +tzload(name, sp, doextend) +register const char * name; +register struct state * const sp; +register const int doextend; +{ + register const char * p; + register int i; + register int fid; + register int stored; + register int nread; + union { + struct tzhead tzhead; + char buf[2 * sizeof(struct tzhead) + + 2 * sizeof *sp + + 4 * TZ_MAX_TIMES]; + } u; + + if (name == NULL && (name = TZDEFAULT) == NULL) + return -1; + { + register int doaccess; + /* + ** Section 4.9.1 of the C standard says that + ** "FILENAME_MAX expands to an integral constant expression + ** that is the size needed for an array of char large enough + ** to hold the longest file name string that the implementation + ** guarantees can be opened." + */ + char fullname[FILENAME_MAX + 1]; + + if (name[0] == ':') + ++name; + doaccess = name[0] == '/'; + if (!doaccess) { + if ((p = TZDIR) == NULL) + return -1; + if ((strlen(p) + strlen(name) + 1) >= sizeof fullname) + return -1; + (void) strcpy(fullname, p); + (void) strcat(fullname, "/"); + (void) strcat(fullname, name); + /* + ** Set doaccess if '.' (as in "../") shows up in name. + */ + if (strchr(name, '.') != NULL) + doaccess = TRUE; + name = fullname; + } + if (doaccess && access(name, R_OK) != 0) + return -1; + if ((fid = open(name, OPEN_MODE)) == -1) + return -1; + } + nread = read(fid, u.buf, sizeof u.buf); + if (close(fid) < 0 || nread <= 0) + return -1; + for (stored = 4; stored <= 8; stored *= 2) { + int ttisstdcnt; + int ttisgmtcnt; + + ttisstdcnt = (int) detzcode(u.tzhead.tzh_ttisstdcnt); + ttisgmtcnt = (int) detzcode(u.tzhead.tzh_ttisgmtcnt); + sp->leapcnt = (int) detzcode(u.tzhead.tzh_leapcnt); + sp->timecnt = (int) detzcode(u.tzhead.tzh_timecnt); + sp->typecnt = (int) detzcode(u.tzhead.tzh_typecnt); + sp->charcnt = (int) detzcode(u.tzhead.tzh_charcnt); + p = u.tzhead.tzh_charcnt + sizeof u.tzhead.tzh_charcnt; + if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS || + sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES || + sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES || + sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS || + (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) || + (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0)) + return -1; + if (nread - (p - u.buf) < + sp->timecnt * stored + /* ats */ + sp->timecnt + /* types */ + sp->typecnt * 6 + /* ttinfos */ + sp->charcnt + /* chars */ + sp->leapcnt * (stored + 4) + /* lsinfos */ + ttisstdcnt + /* ttisstds */ + ttisgmtcnt) /* ttisgmts */ + return -1; + for (i = 0; i < sp->timecnt; ++i) { + sp->ats[i] = (stored == 4) ? + detzcode(p) : detzcode64(p); + p += stored; + } + for (i = 0; i < sp->timecnt; ++i) { + sp->types[i] = (unsigned char) *p++; + if (sp->types[i] >= sp->typecnt) + return -1; + } + for (i = 0; i < sp->typecnt; ++i) { + register struct ttinfo * ttisp; + + ttisp = &sp->ttis[i]; + ttisp->tt_gmtoff = detzcode(p); + p += 4; + ttisp->tt_isdst = (unsigned char) *p++; + if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1) + return -1; + ttisp->tt_abbrind = (unsigned char) *p++; + if (ttisp->tt_abbrind < 0 || + ttisp->tt_abbrind > sp->charcnt) + return -1; + } + for (i = 0; i < sp->charcnt; ++i) + sp->chars[i] = *p++; + sp->chars[i] = '\0'; /* ensure '\0' at end */ + for (i = 0; i < sp->leapcnt; ++i) { + register struct lsinfo * lsisp; + + lsisp = &sp->lsis[i]; + lsisp->ls_trans = (stored == 4) ? + detzcode(p) : detzcode64(p); + p += stored; + lsisp->ls_corr = detzcode(p); + p += 4; + } + for (i = 0; i < sp->typecnt; ++i) { + register struct ttinfo * ttisp; + + ttisp = &sp->ttis[i]; + if (ttisstdcnt == 0) + ttisp->tt_ttisstd = FALSE; + else { + ttisp->tt_ttisstd = *p++; + if (ttisp->tt_ttisstd != TRUE && + ttisp->tt_ttisstd != FALSE) + return -1; + } + } + for (i = 0; i < sp->typecnt; ++i) { + register struct ttinfo * ttisp; + + ttisp = &sp->ttis[i]; + if (ttisgmtcnt == 0) + ttisp->tt_ttisgmt = FALSE; + else { + ttisp->tt_ttisgmt = *p++; + if (ttisp->tt_ttisgmt != TRUE && + ttisp->tt_ttisgmt != FALSE) + return -1; + } + } + /* + ** Out-of-sort ats should mean we're running on a + ** signed time_t system but using a data file with + ** unsigned values (or vice versa). + */ + for (i = 0; i < sp->timecnt - 2; ++i) + if (sp->ats[i] > sp->ats[i + 1]) { + ++i; + if (TYPE_SIGNED(time_t)) { + /* + ** Ignore the end (easy). + */ + sp->timecnt = i; + } else { + /* + ** Ignore the beginning (harder). + */ + register int j; + + for (j = 0; j + i < sp->timecnt; ++j) { + sp->ats[j] = sp->ats[j + i]; + sp->types[j] = sp->types[j + i]; + } + sp->timecnt = j; + } + break; + } + /* + ** If this is an old file, we're done. + */ + if (u.tzhead.tzh_version[0] == '\0') + break; + nread -= p - u.buf; + for (i = 0; i < nread; ++i) + u.buf[i] = p[i]; + /* + ** If this is a narrow integer time_t system, we're done. + */ + if (stored >= (int) sizeof(time_t) && TYPE_INTEGRAL(time_t)) + break; + } + if (doextend && nread > 2 && + u.buf[0] == '\n' && u.buf[nread - 1] == '\n' && + sp->typecnt + 2 <= TZ_MAX_TYPES) { + struct state ts; + register int result; + + u.buf[nread - 1] = '\0'; + result = tzparse(&u.buf[1], &ts, FALSE); + if (result == 0 && ts.typecnt == 2 && + sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) { + for (i = 0; i < 2; ++i) + ts.ttis[i].tt_abbrind += + sp->charcnt; + for (i = 0; i < ts.charcnt; ++i) + sp->chars[sp->charcnt++] = + ts.chars[i]; + i = 0; + while (i < ts.timecnt && + ts.ats[i] <= + sp->ats[sp->timecnt - 1]) + ++i; + while (i < ts.timecnt && + sp->timecnt < TZ_MAX_TIMES) { + sp->ats[sp->timecnt] = + ts.ats[i]; + sp->types[sp->timecnt] = + sp->typecnt + + ts.types[i]; + ++sp->timecnt; + ++i; + } + sp->ttis[sp->typecnt++] = ts.ttis[0]; + sp->ttis[sp->typecnt++] = ts.ttis[1]; + } + } + i = 2 * YEARSPERREPEAT; + sp->goback = sp->goahead = sp->timecnt > i; + sp->goback = sp->goback && sp->types[i] == sp->types[0] && + differ_by_repeat(sp->ats[i], sp->ats[0]); + sp->goahead = sp->goahead && + sp->types[sp->timecnt - 1] == sp->types[sp->timecnt - 1 - i] && + differ_by_repeat(sp->ats[sp->timecnt - 1], + sp->ats[sp->timecnt - 1 - i]); + return 0; +} + +static const int mon_lengths[2][MONSPERYEAR] = { + { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } +}; + +static const int year_lengths[2] = { + DAYSPERNYEAR, DAYSPERLYEAR +}; + +/* +** Given a pointer into a time zone string, scan until a character that is not +** a valid character in a zone name is found. Return a pointer to that +** character. +*/ + +static const char * +getzname(strp) +register const char * strp; +{ + register char c; + + while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' && + c != '+') + ++strp; + return strp; +} + +/* +** Given a pointer into an extended time zone string, scan until the ending +** delimiter of the zone name is located. Return a pointer to the delimiter. +** +** As with getzname above, the legal character set is actually quite +** restricted, with other characters producing undefined results. +** We don't do any checking here; checking is done later in common-case code. +*/ + +static const char * +getqzname(register const char *strp, const int delim) +{ + register int c; + + while ((c = *strp) != '\0' && c != delim) + ++strp; + return strp; +} + +/* +** Given a pointer into a time zone string, extract a number from that string. +** Check that the number is within a specified range; if it is not, return +** NULL. +** Otherwise, return a pointer to the first character not part of the number. +*/ + +static const char * +getnum(strp, nump, min, max) +register const char * strp; +int * const nump; +const int min; +const int max; +{ + register char c; + register int num; + + if (strp == NULL || !is_digit(c = *strp)) + return NULL; + num = 0; + do { + num = num * 10 + (c - '0'); + if (num > max) + return NULL; /* illegal value */ + c = *++strp; + } while (is_digit(c)); + if (num < min) + return NULL; /* illegal value */ + *nump = num; + return strp; +} + +/* +** Given a pointer into a time zone string, extract a number of seconds, +** in hh[:mm[:ss]] form, from the string. +** If any error occurs, return NULL. +** Otherwise, return a pointer to the first character not part of the number +** of seconds. +*/ + +static const char * +getsecs(strp, secsp) +register const char * strp; +long * const secsp; +{ + int num; + + /* + ** `HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like + ** "M10.4.6/26", which does not conform to Posix, + ** but which specifies the equivalent of + ** ``02:00 on the first Sunday on or after 23 Oct''. + */ + strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1); + if (strp == NULL) + return NULL; + *secsp = num * (long) SECSPERHOUR; + if (*strp == ':') { + ++strp; + strp = getnum(strp, &num, 0, MINSPERHOUR - 1); + if (strp == NULL) + return NULL; + *secsp += num * SECSPERMIN; + if (*strp == ':') { + ++strp; + /* `SECSPERMIN' allows for leap seconds. */ + strp = getnum(strp, &num, 0, SECSPERMIN); + if (strp == NULL) + return NULL; + *secsp += num; + } + } + return strp; +} + +/* +** Given a pointer into a time zone string, extract an offset, in +** [+-]hh[:mm[:ss]] form, from the string. +** If any error occurs, return NULL. +** Otherwise, return a pointer to the first character not part of the time. +*/ + +static const char * +getoffset(strp, offsetp) +register const char * strp; +long * const offsetp; +{ + register int neg = 0; + + if (*strp == '-') { + neg = 1; + ++strp; + } else if (*strp == '+') + ++strp; + strp = getsecs(strp, offsetp); + if (strp == NULL) + return NULL; /* illegal time */ + if (neg) + *offsetp = -*offsetp; + return strp; +} + +/* +** Given a pointer into a time zone string, extract a rule in the form +** date[/time]. See POSIX section 8 for the format of "date" and "time". +** If a valid rule is not found, return NULL. +** Otherwise, return a pointer to the first character not part of the rule. +*/ + +static const char * +getrule(strp, rulep) +const char * strp; +register struct rule * const rulep; +{ + if (*strp == 'J') { + /* + ** Julian day. + */ + rulep->r_type = JULIAN_DAY; + ++strp; + strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR); + } else if (*strp == 'M') { + /* + ** Month, week, day. + */ + rulep->r_type = MONTH_NTH_DAY_OF_WEEK; + ++strp; + strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR); + if (strp == NULL) + return NULL; + if (*strp++ != '.') + return NULL; + strp = getnum(strp, &rulep->r_week, 1, 5); + if (strp == NULL) + return NULL; + if (*strp++ != '.') + return NULL; + strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1); + } else if (is_digit(*strp)) { + /* + ** Day of year. + */ + rulep->r_type = DAY_OF_YEAR; + strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1); + } else return NULL; /* invalid format */ + if (strp == NULL) + return NULL; + if (*strp == '/') { + /* + ** Time specified. + */ + ++strp; + strp = getsecs(strp, &rulep->r_time); + } else rulep->r_time = 2 * SECSPERHOUR; /* default = 2:00:00 */ + return strp; +} + +/* +** Given the Epoch-relative time of January 1, 00:00:00 UTC, in a year, the +** year, a rule, and the offset from UTC at the time that rule takes effect, +** calculate the Epoch-relative time that rule takes effect. +*/ + +static time_t +transtime(janfirst, year, rulep, offset) +const time_t janfirst; +const int year; +register const struct rule * const rulep; +const long offset; +{ + register int leapyear; + register time_t value; + register int i; + int d, m1, yy0, yy1, yy2, dow; + + INITIALIZE(value); + leapyear = isleap(year); + switch (rulep->r_type) { + + case JULIAN_DAY: + /* + ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap + ** years. + ** In non-leap years, or if the day number is 59 or less, just + ** add SECSPERDAY times the day number-1 to the time of + ** January 1, midnight, to get the day. + */ + value = janfirst + (rulep->r_day - 1) * SECSPERDAY; + if (leapyear && rulep->r_day >= 60) + value += SECSPERDAY; + break; + + case DAY_OF_YEAR: + /* + ** n - day of year. + ** Just add SECSPERDAY times the day number to the time of + ** January 1, midnight, to get the day. + */ + value = janfirst + rulep->r_day * SECSPERDAY; + break; + + case MONTH_NTH_DAY_OF_WEEK: + /* + ** Mm.n.d - nth "dth day" of month m. + */ + value = janfirst; + for (i = 0; i < rulep->r_mon - 1; ++i) + value += mon_lengths[leapyear][i] * SECSPERDAY; + + /* + ** Use Zeller's Congruence to get day-of-week of first day of + ** month. + */ + m1 = (rulep->r_mon + 9) % 12 + 1; + yy0 = (rulep->r_mon <= 2) ? (year - 1) : year; + yy1 = yy0 / 100; + yy2 = yy0 % 100; + dow = ((26 * m1 - 2) / 10 + + 1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7; + if (dow < 0) + dow += DAYSPERWEEK; + + /* + ** "dow" is the day-of-week of the first day of the month. Get + ** the day-of-month (zero-origin) of the first "dow" day of the + ** month. + */ + d = rulep->r_day - dow; + if (d < 0) + d += DAYSPERWEEK; + for (i = 1; i < rulep->r_week; ++i) { + if (d + DAYSPERWEEK >= + mon_lengths[leapyear][rulep->r_mon - 1]) + break; + d += DAYSPERWEEK; + } + + /* + ** "d" is the day-of-month (zero-origin) of the day we want. + */ + value += d * SECSPERDAY; + break; + } + + /* + ** "value" is the Epoch-relative time of 00:00:00 UTC on the day in + ** question. To get the Epoch-relative time of the specified local + ** time on that day, add the transition time and the current offset + ** from UTC. + */ + return value + rulep->r_time + offset; +} + +/* +** Given a POSIX section 8-style TZ string, fill in the rule tables as +** appropriate. +*/ + +static int +tzparse(name, sp, lastditch) +const char * name; +register struct state * const sp; +const int lastditch; +{ + const char * stdname; + const char * dstname; + size_t stdlen; + size_t dstlen; + long stdoffset; + long dstoffset; + register time_t * atp; + register unsigned char * typep; + register char * cp; + register int load_result; + + INITIALIZE(dstname); + stdname = name; + if (lastditch) { + stdlen = strlen(name); /* length of standard zone name */ + name += stdlen; + if (stdlen >= sizeof sp->chars) + stdlen = (sizeof sp->chars) - 1; + stdoffset = 0; + } else { + if (*name == '<') { + name++; + stdname = name; + name = getqzname(name, '>'); + if (*name != '>') + return (-1); + stdlen = name - stdname; + name++; + } else { + name = getzname(name); + stdlen = name - stdname; + } + if (*name == '\0') + return -1; + name = getoffset(name, &stdoffset); + if (name == NULL) + return -1; + } + load_result = tzload(TZDEFRULES, sp, FALSE); + if (load_result != 0) + sp->leapcnt = 0; /* so, we're off a little */ + if (*name != '\0') { + if (*name == '<') { + dstname = ++name; + name = getqzname(name, '>'); + if (*name != '>') + return -1; + dstlen = name - dstname; + name++; + } else { + dstname = name; + name = getzname(name); + dstlen = name - dstname; /* length of DST zone name */ + } + if (*name != '\0' && *name != ',' && *name != ';') { + name = getoffset(name, &dstoffset); + if (name == NULL) + return -1; + } else dstoffset = stdoffset - SECSPERHOUR; + if (*name == '\0' && load_result != 0) + name = TZDEFRULESTRING; + if (*name == ',' || *name == ';') { + struct rule start; + struct rule end; + register int year; + register time_t janfirst; + time_t starttime; + time_t endtime; + + ++name; + if ((name = getrule(name, &start)) == NULL) + return -1; + if (*name++ != ',') + return -1; + if ((name = getrule(name, &end)) == NULL) + return -1; + if (*name != '\0') + return -1; + sp->typecnt = 2; /* standard time and DST */ + /* + ** Two transitions per year, from EPOCH_YEAR forward. + */ + sp->ttis[0].tt_gmtoff = -dstoffset; + sp->ttis[0].tt_isdst = 1; + sp->ttis[0].tt_abbrind = stdlen + 1; + sp->ttis[1].tt_gmtoff = -stdoffset; + sp->ttis[1].tt_isdst = 0; + sp->ttis[1].tt_abbrind = 0; + atp = sp->ats; + typep = sp->types; + janfirst = 0; + sp->timecnt = 0; + for (year = EPOCH_YEAR; + sp->timecnt + 2 <= TZ_MAX_TIMES; + ++year) { + time_t newfirst; + + starttime = transtime(janfirst, year, &start, + stdoffset); + endtime = transtime(janfirst, year, &end, + dstoffset); + if (starttime > endtime) { + *atp++ = endtime; + *typep++ = 1; /* DST ends */ + *atp++ = starttime; + *typep++ = 0; /* DST begins */ + } else { + *atp++ = starttime; + *typep++ = 0; /* DST begins */ + *atp++ = endtime; + *typep++ = 1; /* DST ends */ + } + sp->timecnt += 2; + newfirst = janfirst; + newfirst += year_lengths[isleap(year)] * + SECSPERDAY; + if (newfirst <= janfirst) + break; + janfirst = newfirst; + } + } else { + register long theirstdoffset; + register long theirdstoffset; + register long theiroffset; + register int isdst; + register int i; + register int j; + + if (*name != '\0') + return -1; + /* + ** Initial values of theirstdoffset and theirdstoffset. + */ + theirstdoffset = 0; + for (i = 0; i < sp->timecnt; ++i) { + j = sp->types[i]; + if (!sp->ttis[j].tt_isdst) { + theirstdoffset = + -sp->ttis[j].tt_gmtoff; + break; + } + } + theirdstoffset = 0; + for (i = 0; i < sp->timecnt; ++i) { + j = sp->types[i]; + if (sp->ttis[j].tt_isdst) { + theirdstoffset = + -sp->ttis[j].tt_gmtoff; + break; + } + } + /* + ** Initially we're assumed to be in standard time. + */ + isdst = FALSE; + theiroffset = theirstdoffset; + /* + ** Now juggle transition times and types + ** tracking offsets as you do. + */ + for (i = 0; i < sp->timecnt; ++i) { + j = sp->types[i]; + sp->types[i] = sp->ttis[j].tt_isdst; + if (sp->ttis[j].tt_ttisgmt) { + /* No adjustment to transition time */ + } else { + /* + ** If summer time is in effect, and the + ** transition time was not specified as + ** standard time, add the summer time + ** offset to the transition time; + ** otherwise, add the standard time + ** offset to the transition time. + */ + /* + ** Transitions from DST to DDST + ** will effectively disappear since + ** POSIX provides for only one DST + ** offset. + */ + if (isdst && !sp->ttis[j].tt_ttisstd) { + sp->ats[i] += dstoffset - + theirdstoffset; + } else { + sp->ats[i] += stdoffset - + theirstdoffset; + } + } + theiroffset = -sp->ttis[j].tt_gmtoff; + if (sp->ttis[j].tt_isdst) + theirdstoffset = theiroffset; + else theirstdoffset = theiroffset; + } + /* + ** Finally, fill in ttis. + ** ttisstd and ttisgmt need not be handled. + */ + sp->ttis[0].tt_gmtoff = -stdoffset; + sp->ttis[0].tt_isdst = FALSE; + sp->ttis[0].tt_abbrind = 0; + sp->ttis[1].tt_gmtoff = -dstoffset; + sp->ttis[1].tt_isdst = TRUE; + sp->ttis[1].tt_abbrind = stdlen + 1; + sp->typecnt = 2; + } + } else { + dstlen = 0; + sp->typecnt = 1; /* only standard time */ + sp->timecnt = 0; + sp->ttis[0].tt_gmtoff = -stdoffset; + sp->ttis[0].tt_isdst = 0; + sp->ttis[0].tt_abbrind = 0; + } + sp->charcnt = stdlen + 1; + if (dstlen != 0) + sp->charcnt += dstlen + 1; + if ((size_t) sp->charcnt > sizeof sp->chars) + return -1; + cp = sp->chars; + (void) strncpy(cp, stdname, stdlen); + cp += stdlen; + *cp++ = '\0'; + if (dstlen != 0) { + (void) strncpy(cp, dstname, dstlen); + *(cp + dstlen) = '\0'; + } + return 0; +} + +static void +gmtload(sp) +struct state * const sp; +{ + if (tzload(gmt, sp, TRUE) != 0) + (void) tzparse(gmt, sp, TRUE); +} + +#ifndef STD_INSPIRED +/* +** A non-static declaration of tzsetwall in a system header file +** may cause a warning about this upcoming static declaration... +*/ +static +#endif /* !defined STD_INSPIRED */ +void +tzsetwall P((void)) +{ + if (lcl_is_set < 0) + return; + lcl_is_set = -1; + +#ifdef ALL_STATE + if (lclptr == NULL) { + lclptr = (struct state *) malloc(sizeof *lclptr); + if (lclptr == NULL) { + settzname(); /* all we can do */ + return; + } + } +#endif /* defined ALL_STATE */ + if (tzload((char *) NULL, lclptr, TRUE) != 0) + gmtload(lclptr); + settzname(); +} + +void +tzset P((void)) +{ + register const char * name; + + name = getenv("TZ"); + if (name == NULL) { + tzsetwall(); + return; + } + + if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0) + return; + lcl_is_set = strlen(name) < sizeof lcl_TZname; + if (lcl_is_set) + (void) strcpy(lcl_TZname, name); + +#ifdef ALL_STATE + if (lclptr == NULL) { + lclptr = (struct state *) malloc(sizeof *lclptr); + if (lclptr == NULL) { + settzname(); /* all we can do */ + return; + } + } +#endif /* defined ALL_STATE */ + if (*name == '\0') { + /* + ** User wants it fast rather than right. + */ + lclptr->leapcnt = 0; /* so, we're off a little */ + lclptr->timecnt = 0; + lclptr->typecnt = 0; + lclptr->ttis[0].tt_isdst = 0; + lclptr->ttis[0].tt_gmtoff = 0; + lclptr->ttis[0].tt_abbrind = 0; + (void) strcpy(lclptr->chars, gmt); + } else if (tzload(name, lclptr, TRUE) != 0) + if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0) + (void) gmtload(lclptr); + settzname(); +} + +/* +** The easy way to behave "as if no library function calls" localtime +** is to not call it--so we drop its guts into "localsub", which can be +** freely called. (And no, the PANS doesn't require the above behavior-- +** but it *is* desirable.) +** +** The unused offset argument is for the benefit of mktime variants. +*/ + +/*ARGSUSED*/ +static struct tm * +localsub(timep, offset, tmp) +const time_t * const timep; +const long offset; +struct tm * const tmp; +{ + register struct state * sp; + register const struct ttinfo * ttisp; + register int i; + register struct tm * result; + const time_t t = *timep; + + sp = lclptr; +#ifdef ALL_STATE + if (sp == NULL) + return gmtsub(timep, offset, tmp); +#endif /* defined ALL_STATE */ + if ((sp->goback && t < sp->ats[0]) || + (sp->goahead && t > sp->ats[sp->timecnt - 1])) { + time_t newt = t; + register time_t seconds; + register time_t tcycles; + register int_fast64_t icycles; + + if (t < sp->ats[0]) + seconds = sp->ats[0] - t; + else seconds = t - sp->ats[sp->timecnt - 1]; + --seconds; + tcycles = seconds / YEARSPERREPEAT / AVGSECSPERYEAR; + ++tcycles; + icycles = tcycles; + if (tcycles - icycles >= 1 || icycles - tcycles >= 1) + return NULL; + seconds = icycles; + seconds *= YEARSPERREPEAT; + seconds *= AVGSECSPERYEAR; + if (t < sp->ats[0]) + newt += seconds; + else newt -= seconds; + if (newt < sp->ats[0] || + newt > sp->ats[sp->timecnt - 1]) + return NULL; /* "cannot happen" */ + result = localsub(&newt, offset, tmp); + if (result == tmp) { + register time_t newy; + + newy = tmp->tm_year; + if (t < sp->ats[0]) + newy -= icycles * YEARSPERREPEAT; + else newy += icycles * YEARSPERREPEAT; + tmp->tm_year = newy; + if (tmp->tm_year != newy) + return NULL; + } + return result; + } + if (sp->timecnt == 0 || t < sp->ats[0]) { + i = 0; + while (sp->ttis[i].tt_isdst) + if (++i >= sp->typecnt) { + i = 0; + break; + } + } else { + register int lo = 1; + register int hi = sp->timecnt; + + while (lo < hi) { + register int mid = (lo + hi) >> 1; + + if (t < sp->ats[mid]) + hi = mid; + else lo = mid + 1; + } + i = (int) sp->types[lo - 1]; + } + ttisp = &sp->ttis[i]; + /* + ** To get (wrong) behavior that's compatible with System V Release 2.0 + ** you'd replace the statement below with + ** t += ttisp->tt_gmtoff; + ** timesub(&t, 0L, sp, tmp); + */ + result = timesub(&t, ttisp->tt_gmtoff, sp, tmp); + tmp->tm_isdst = ttisp->tt_isdst; + tzname[tmp->tm_isdst] = &sp->chars[ttisp->tt_abbrind]; +#ifdef TM_ZONE + tmp->TM_ZONE = &sp->chars[ttisp->tt_abbrind]; +#endif /* defined TM_ZONE */ + return result; +} + +struct tm * +localtime(timep) +const time_t * const timep; +{ + tzset(); + return localsub(timep, 0L, &tm); +} + +/* +** Re-entrant version of localtime. +*/ + +struct tm * +localtime_r(timep, tmp) +const time_t * const timep; +struct tm * tmp; +{ + return localsub(timep, 0L, tmp); +} + +/* +** gmtsub is to gmtime as localsub is to localtime. +*/ + +static struct tm * +gmtsub(timep, offset, tmp) +const time_t * const timep; +const long offset; +struct tm * const tmp; +{ + register struct tm * result; + + if (!gmt_is_set) { + gmt_is_set = TRUE; +#ifdef ALL_STATE + gmtptr = (struct state *) malloc(sizeof *gmtptr); + if (gmtptr != NULL) +#endif /* defined ALL_STATE */ + gmtload(gmtptr); + } + result = timesub(timep, offset, gmtptr, tmp); +#ifdef TM_ZONE + /* + ** Could get fancy here and deliver something such as + ** "UTC+xxxx" or "UTC-xxxx" if offset is non-zero, + ** but this is no time for a treasure hunt. + */ + if (offset != 0) + tmp->TM_ZONE = wildabbr; + else { +#ifdef ALL_STATE + if (gmtptr == NULL) + tmp->TM_ZONE = gmt; + else tmp->TM_ZONE = gmtptr->chars; +#endif /* defined ALL_STATE */ +#ifndef ALL_STATE + tmp->TM_ZONE = gmtptr->chars; +#endif /* State Farm */ + } +#endif /* defined TM_ZONE */ + return result; +} + +struct tm * +gmtime(timep) +const time_t * const timep; +{ + return gmtsub(timep, 0L, &tm); +} + +/* +* Re-entrant version of gmtime. +*/ + +struct tm * +gmtime_r(timep, tmp) +const time_t * const timep; +struct tm * tmp; +{ + return gmtsub(timep, 0L, tmp); +} + +#ifdef STD_INSPIRED + +struct tm * +offtime(timep, offset) +const time_t * const timep; +const long offset; +{ + return gmtsub(timep, offset, &tm); +} + +#endif /* defined STD_INSPIRED */ + +/* +** Return the number of leap years through the end of the given year +** where, to make the math easy, the answer for year zero is defined as zero. +*/ + +static int +leaps_thru_end_of(y) +register const int y; +{ + return (y >= 0) ? (y / 4 - y / 100 + y / 400) : + -(leaps_thru_end_of(-(y + 1)) + 1); +} + +static struct tm * +timesub(timep, offset, sp, tmp) +const time_t * const timep; +const long offset; +register const struct state * const sp; +register struct tm * const tmp; +{ + register const struct lsinfo * lp; + register time_t tdays; + register int idays; /* unsigned would be so 2003 */ + register long rem; + int y; + register const int * ip; + register long corr; + register int hit; + register int i; + + corr = 0; + hit = 0; +#ifdef ALL_STATE + i = (sp == NULL) ? 0 : sp->leapcnt; +#endif /* defined ALL_STATE */ +#ifndef ALL_STATE + i = sp->leapcnt; +#endif /* State Farm */ + while (--i >= 0) { + lp = &sp->lsis[i]; + if (*timep >= lp->ls_trans) { + if (*timep == lp->ls_trans) { + hit = ((i == 0 && lp->ls_corr > 0) || + lp->ls_corr > sp->lsis[i - 1].ls_corr); + if (hit) + while (i > 0 && + sp->lsis[i].ls_trans == + sp->lsis[i - 1].ls_trans + 1 && + sp->lsis[i].ls_corr == + sp->lsis[i - 1].ls_corr + 1) { + ++hit; + --i; + } + } + corr = lp->ls_corr; + break; + } + } + y = EPOCH_YEAR; + tdays = *timep / SECSPERDAY; + rem = *timep - tdays * SECSPERDAY; + while (tdays < 0 || tdays >= year_lengths[isleap(y)]) { + int newy; + register time_t tdelta; + register int idelta; + register int leapdays; + + tdelta = tdays / DAYSPERLYEAR; + idelta = tdelta; + if (tdelta - idelta >= 1 || idelta - tdelta >= 1) + return NULL; + if (idelta == 0) + idelta = (tdays < 0) ? -1 : 1; + newy = y; + if (increment_overflow(&newy, idelta)) + return NULL; + leapdays = leaps_thru_end_of(newy - 1) - + leaps_thru_end_of(y - 1); + tdays -= ((time_t) newy - y) * DAYSPERNYEAR; + tdays -= leapdays; + y = newy; + } + { + register long seconds; + + seconds = tdays * SECSPERDAY + 0.5; + tdays = seconds / SECSPERDAY; + rem += seconds - tdays * SECSPERDAY; + } + /* + ** Given the range, we can now fearlessly cast... + */ + idays = tdays; + rem += offset - corr; + while (rem < 0) { + rem += SECSPERDAY; + --idays; + } + while (rem >= SECSPERDAY) { + rem -= SECSPERDAY; + ++idays; + } + while (idays < 0) { + if (increment_overflow(&y, -1)) + return NULL; + idays += year_lengths[isleap(y)]; + } + while (idays >= year_lengths[isleap(y)]) { + idays -= year_lengths[isleap(y)]; + if (increment_overflow(&y, 1)) + return NULL; + } + tmp->tm_year = y; + if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) + return NULL; + tmp->tm_yday = idays; + /* + ** The "extra" mods below avoid overflow problems. + */ + tmp->tm_wday = EPOCH_WDAY + + ((y - EPOCH_YEAR) % DAYSPERWEEK) * + (DAYSPERNYEAR % DAYSPERWEEK) + + leaps_thru_end_of(y - 1) - + leaps_thru_end_of(EPOCH_YEAR - 1) + + idays; + tmp->tm_wday %= DAYSPERWEEK; + if (tmp->tm_wday < 0) + tmp->tm_wday += DAYSPERWEEK; + tmp->tm_hour = (int) (rem / SECSPERHOUR); + rem %= SECSPERHOUR; + tmp->tm_min = (int) (rem / SECSPERMIN); + /* + ** A positive leap second requires a special + ** representation. This uses "... ??:59:60" et seq. + */ + tmp->tm_sec = (int) (rem % SECSPERMIN) + hit; + ip = mon_lengths[isleap(y)]; + for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; ++(tmp->tm_mon)) + idays -= ip[tmp->tm_mon]; + tmp->tm_mday = (int) (idays + 1); + tmp->tm_isdst = 0; +#ifdef TM_GMTOFF + tmp->TM_GMTOFF = offset; +#endif /* defined TM_GMTOFF */ + return tmp; +} + +char * +ctime(timep) +const time_t * const timep; +{ +/* +** Section 4.12.3.2 of X3.159-1989 requires that +** The ctime function converts the calendar time pointed to by timer +** to local time in the form of a string. It is equivalent to +** asctime(localtime(timer)) +*/ + return asctime(localtime(timep)); +} + +char * +ctime_r(timep, buf) +const time_t * const timep; +char * buf; +{ + struct tm mytm; + + return asctime_r(localtime_r(timep, &mytm), buf); +} + +/* +** Adapted from code provided by Robert Elz, who writes: +** The "best" way to do mktime I think is based on an idea of Bob +** Kridle's (so its said...) from a long time ago. +** It does a binary search of the time_t space. Since time_t's are +** just 32 bits, its a max of 32 iterations (even at 64 bits it +** would still be very reasonable). +*/ + +#ifndef WRONG +#define WRONG (-1) +#endif /* !defined WRONG */ + +/* +** Simplified normalize logic courtesy Paul Eggert. +*/ + +static int +increment_overflow(number, delta) +int * number; +int delta; +{ + int number0; + + number0 = *number; + *number += delta; + return (*number < number0) != (delta < 0); +} + +static int +long_increment_overflow(number, delta) +long * number; +int delta; +{ + long number0; + + number0 = *number; + *number += delta; + return (*number < number0) != (delta < 0); +} + +static int +normalize_overflow(tensptr, unitsptr, base) +int * const tensptr; +int * const unitsptr; +const int base; +{ + register int tensdelta; + + tensdelta = (*unitsptr >= 0) ? + (*unitsptr / base) : + (-1 - (-1 - *unitsptr) / base); + *unitsptr -= tensdelta * base; + return increment_overflow(tensptr, tensdelta); +} + +static int +long_normalize_overflow(tensptr, unitsptr, base) +long * const tensptr; +int * const unitsptr; +const int base; +{ + register int tensdelta; + + tensdelta = (*unitsptr >= 0) ? + (*unitsptr / base) : + (-1 - (-1 - *unitsptr) / base); + *unitsptr -= tensdelta * base; + return long_increment_overflow(tensptr, tensdelta); +} + +static int +tmcomp(atmp, btmp) +register const struct tm * const atmp; +register const struct tm * const btmp; +{ + register int result; + + if ((result = (atmp->tm_year - btmp->tm_year)) == 0 && + (result = (atmp->tm_mon - btmp->tm_mon)) == 0 && + (result = (atmp->tm_mday - btmp->tm_mday)) == 0 && + (result = (atmp->tm_hour - btmp->tm_hour)) == 0 && + (result = (atmp->tm_min - btmp->tm_min)) == 0) + result = atmp->tm_sec - btmp->tm_sec; + return result; +} + +static time_t +time2sub(tmp, funcp, offset, okayp, do_norm_secs) +struct tm * const tmp; +struct tm * (* const funcp) P((const time_t*, long, struct tm*)); +const long offset; +int * const okayp; +const int do_norm_secs; +{ + register const struct state * sp; + register int dir; + register int i, j; + register int saved_seconds; + register long li; + register time_t lo; + register time_t hi; + long y; + time_t newt; + time_t t; + struct tm yourtm, mytm; + + *okayp = FALSE; + yourtm = *tmp; + if (do_norm_secs) { + if (normalize_overflow(&yourtm.tm_min, &yourtm.tm_sec, + SECSPERMIN)) + return WRONG; + } + if (normalize_overflow(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR)) + return WRONG; + if (normalize_overflow(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY)) + return WRONG; + y = yourtm.tm_year; + if (long_normalize_overflow(&y, &yourtm.tm_mon, MONSPERYEAR)) + return WRONG; + /* + ** Turn y into an actual year number for now. + ** It is converted back to an offset from TM_YEAR_BASE later. + */ + if (long_increment_overflow(&y, TM_YEAR_BASE)) + return WRONG; + while (yourtm.tm_mday <= 0) { + if (long_increment_overflow(&y, -1)) + return WRONG; + li = y + (1 < yourtm.tm_mon); + yourtm.tm_mday += year_lengths[isleap(li)]; + } + while (yourtm.tm_mday > DAYSPERLYEAR) { + li = y + (1 < yourtm.tm_mon); + yourtm.tm_mday -= year_lengths[isleap(li)]; + if (long_increment_overflow(&y, 1)) + return WRONG; + } + for ( ; ; ) { + i = mon_lengths[isleap(y)][yourtm.tm_mon]; + if (yourtm.tm_mday <= i) + break; + yourtm.tm_mday -= i; + if (++yourtm.tm_mon >= MONSPERYEAR) { + yourtm.tm_mon = 0; + if (long_increment_overflow(&y, 1)) + return WRONG; + } + } + if (long_increment_overflow(&y, -TM_YEAR_BASE)) + return WRONG; + yourtm.tm_year = y; + if (yourtm.tm_year != y) + return WRONG; + if (yourtm.tm_sec >= 0 && yourtm.tm_sec < SECSPERMIN) + saved_seconds = 0; + else if (y + TM_YEAR_BASE < EPOCH_YEAR) { + /* + ** We can't set tm_sec to 0, because that might push the + ** time below the minimum representable time. + ** Set tm_sec to 59 instead. + ** This assumes that the minimum representable time is + ** not in the same minute that a leap second was deleted from, + ** which is a safer assumption than using 58 would be. + */ + if (increment_overflow(&yourtm.tm_sec, 1 - SECSPERMIN)) + return WRONG; + saved_seconds = yourtm.tm_sec; + yourtm.tm_sec = SECSPERMIN - 1; + } else { + saved_seconds = yourtm.tm_sec; + yourtm.tm_sec = 0; + } + /* + ** Do a binary search (this works whatever time_t's type is). + */ + if (!TYPE_SIGNED(time_t)) { + lo = 0; + hi = lo - 1; + } else if (!TYPE_INTEGRAL(time_t)) { + if (sizeof(time_t) > sizeof(float)) + hi = (time_t) DBL_MAX; + else hi = (time_t) FLT_MAX; + lo = -hi; + } else { + lo = 1; + for (i = 0; i < (int) TYPE_BIT(time_t) - 1; ++i) + lo *= 2; + hi = -(lo + 1); + } + for ( ; ; ) { + t = lo / 2 + hi / 2; + if (t < lo) + t = lo; + else if (t > hi) + t = hi; + if ((*funcp)(&t, offset, &mytm) == NULL) { + /* + ** Assume that t is too extreme to be represented in + ** a struct tm; arrange things so that it is less + ** extreme on the next pass. + */ + dir = (t > 0) ? 1 : -1; + } else dir = tmcomp(&mytm, &yourtm); + if (dir != 0) { + if (t == lo) { + ++t; + if (t <= lo) + return WRONG; + ++lo; + } else if (t == hi) { + --t; + if (t >= hi) + return WRONG; + --hi; + } + if (lo > hi) + return WRONG; + if (dir > 0) + hi = t; + else lo = t; + continue; + } + if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst) + break; + /* + ** Right time, wrong type. + ** Hunt for right time, right type. + ** It's okay to guess wrong since the guess + ** gets checked. + */ + /* + ** The (void *) casts are the benefit of SunOS 3.3 on Sun 2's. + */ + sp = (const struct state *) + (((void *) funcp == (void *) localsub) ? + lclptr : gmtptr); +#ifdef ALL_STATE + if (sp == NULL) + return WRONG; +#endif /* defined ALL_STATE */ + for (i = sp->typecnt - 1; i >= 0; --i) { + if (sp->ttis[i].tt_isdst != yourtm.tm_isdst) + continue; + for (j = sp->typecnt - 1; j >= 0; --j) { + if (sp->ttis[j].tt_isdst == yourtm.tm_isdst) + continue; + newt = t + sp->ttis[j].tt_gmtoff - + sp->ttis[i].tt_gmtoff; + if ((*funcp)(&newt, offset, &mytm) == NULL) + continue; + if (tmcomp(&mytm, &yourtm) != 0) + continue; + if (mytm.tm_isdst != yourtm.tm_isdst) + continue; + /* + ** We have a match. + */ + t = newt; + goto label; + } + } + return WRONG; + } +label: + newt = t + saved_seconds; + if ((newt < t) != (saved_seconds < 0)) + return WRONG; + t = newt; + if ((*funcp)(&t, offset, tmp)) + *okayp = TRUE; + return t; +} + +static time_t +time2(tmp, funcp, offset, okayp) +struct tm * const tmp; +struct tm * (* const funcp) P((const time_t*, long, struct tm*)); +const long offset; +int * const okayp; +{ + time_t t; + + /* + ** First try without normalization of seconds + ** (in case tm_sec contains a value associated with a leap second). + ** If that fails, try with normalization of seconds. + */ + t = time2sub(tmp, funcp, offset, okayp, FALSE); + return *okayp ? t : time2sub(tmp, funcp, offset, okayp, TRUE); +} + +static time_t +time1(tmp, funcp, offset) +struct tm * const tmp; +struct tm * (* const funcp) P((const time_t *, long, struct tm *)); +const long offset; +{ + register time_t t; + register const struct state * sp; + register int samei, otheri; + register int sameind, otherind; + register int i; + register int nseen; + int seen[TZ_MAX_TYPES]; + int types[TZ_MAX_TYPES]; + int okay; + + if (tmp->tm_isdst > 1) + tmp->tm_isdst = 1; + t = time2(tmp, funcp, offset, &okay); +#ifdef PCTS + /* + ** PCTS code courtesy Grant Sullivan. + */ + if (okay) + return t; + if (tmp->tm_isdst < 0) + tmp->tm_isdst = 0; /* reset to std and try again */ +#endif /* defined PCTS */ +#ifndef PCTS + if (okay || tmp->tm_isdst < 0) + return t; +#endif /* !defined PCTS */ + /* + ** We're supposed to assume that somebody took a time of one type + ** and did some math on it that yielded a "struct tm" that's bad. + ** We try to divine the type they started from and adjust to the + ** type they need. + */ + /* + ** The (void *) casts are the benefit of SunOS 3.3 on Sun 2's. + */ + sp = (const struct state *) (((void *) funcp == (void *) localsub) ? + lclptr : gmtptr); +#ifdef ALL_STATE + if (sp == NULL) + return WRONG; +#endif /* defined ALL_STATE */ + for (i = 0; i < sp->typecnt; ++i) + seen[i] = FALSE; + nseen = 0; + for (i = sp->timecnt - 1; i >= 0; --i) + if (!seen[sp->types[i]]) { + seen[sp->types[i]] = TRUE; + types[nseen++] = sp->types[i]; + } + for (sameind = 0; sameind < nseen; ++sameind) { + samei = types[sameind]; + if (sp->ttis[samei].tt_isdst != tmp->tm_isdst) + continue; + for (otherind = 0; otherind < nseen; ++otherind) { + otheri = types[otherind]; + if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst) + continue; + tmp->tm_sec += sp->ttis[otheri].tt_gmtoff - + sp->ttis[samei].tt_gmtoff; + tmp->tm_isdst = !tmp->tm_isdst; + t = time2(tmp, funcp, offset, &okay); + if (okay) + return t; + tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff - + sp->ttis[samei].tt_gmtoff; + tmp->tm_isdst = !tmp->tm_isdst; + } + } + return WRONG; +} + +time_t +mktime(tmp) +struct tm * const tmp; +{ + tzset(); + return time1(tmp, localsub, 0L); +} + +#ifdef STD_INSPIRED + +time_t +timelocal(tmp) +struct tm * const tmp; +{ + tmp->tm_isdst = -1; /* in case it wasn't initialized */ + return mktime(tmp); +} + +time_t +timegm(tmp) +struct tm * const tmp; +{ + tmp->tm_isdst = 0; + return time1(tmp, gmtsub, 0L); +} + +time_t +timeoff(tmp, offset) +struct tm * const tmp; +const long offset; +{ + tmp->tm_isdst = 0; + return time1(tmp, gmtsub, offset); +} + +#endif /* defined STD_INSPIRED */ + +#ifdef CMUCS + +/* +** The following is supplied for compatibility with +** previous versions of the CMUCS runtime library. +*/ + +long +gtime(tmp) +struct tm * const tmp; +{ + const time_t t = mktime(tmp); + + if (t == WRONG) + return -1; + return t; +} + +#endif /* defined CMUCS */ + +/* +** XXX--is the below the right way to conditionalize?? +*/ + +#ifdef STD_INSPIRED + +/* +** IEEE Std 1003.1-1988 (POSIX) legislates that 536457599 +** shall correspond to "Wed Dec 31 23:59:59 UTC 1986", which +** is not the case if we are accounting for leap seconds. +** So, we provide the following conversion routines for use +** when exchanging timestamps with POSIX conforming systems. +*/ + +static long +leapcorr(timep) +time_t * timep; +{ + register struct state * sp; + register struct lsinfo * lp; + register int i; + + sp = lclptr; + i = sp->leapcnt; + while (--i >= 0) { + lp = &sp->lsis[i]; + if (*timep >= lp->ls_trans) + return lp->ls_corr; + } + return 0; +} + +time_t +time2posix(t) +time_t t; +{ + tzset(); + return t - leapcorr(&t); +} + +time_t +posix2time(t) +time_t t; +{ + time_t x; + time_t y; + + tzset(); + /* + ** For a positive leap second hit, the result + ** is not unique. For a negative leap second + ** hit, the corresponding time doesn't exist, + ** so we return an adjacent second. + */ + x = t + leapcorr(&t); + y = x - leapcorr(&x); + if (y < t) { + do { + x++; + y = x - leapcorr(&x); + } while (y < t); + if (t != y) + return x - 1; + } else if (y > t) { + do { + --x; + y = x - leapcorr(&x); + } while (y > t); + if (t != y) + return x + 1; + } + return x; +} + +#endif /* defined STD_INSPIRED */ diff --git a/icuSources/tools/tzcode/patch-icu-tzcode b/icuSources/tools/tzcode/patch-icu-tzcode deleted file mode 100644 index 0985c79c..00000000 --- a/icuSources/tools/tzcode/patch-icu-tzcode +++ /dev/null @@ -1,475 +0,0 @@ -diff -u -r ../tzcode.orig/Makefile ./Makefile ---- Makefile.orig 2006-11-27 05:54:05.000000000 -0800 -+++ Makefile 2006-12-06 14:54:28.000000000 -0800 -@@ -40,7 +40,7 @@ - # (and subdirectories). - # Use an absolute path name for TZDIR unless you're just testing the software. - --TZDIR= $(TOPDIR)/etc/zoneinfo -+TZDIR= zoneinfo - - # The "tzselect", "zic", and "zdump" commands get installed in. . . - -@@ -241,9 +241,11 @@ - - ############################################################################### - --cc= cc -+cc= gcc - CC= $(cc) -DTZDIR=\"$(TZDIR)\" - -+CPP= g++ -+ - TZCSRCS= zic.c localtime.c asctime.c scheck.c ialloc.c - TZCOBJS= zic.o localtime.o asctime.o scheck.o ialloc.o - TZDSRCS= zdump.c localtime.c ialloc.c -@@ -278,7 +280,10 @@ - - SHELL= /bin/sh - --all: tzselect zic zdump $(LIBOBJS) -+LS= /bin/ls -+SED= /usr/bin/sed -+ -+all: tzselect zic zdump $(LIBOBJS) tz2icu - - ALL: all date - -@@ -311,9 +316,12 @@ - zdump: $(TZDOBJS) - $(CC) $(CFLAGS) $(LFLAGS) $(TZDOBJS) $(LDLIBS) -o $@ - --zic: $(TZCOBJS) yearistype -+zic: $(TZCOBJS) yearistype tz2icu.h - $(CC) $(CFLAGS) $(LFLAGS) $(TZCOBJS) $(LDLIBS) -o $@ - -+tz2icu: tz2icu.cpp tz2icu.h -+ $(CPP) -W -Wall -pedantic tz2icu.cpp -o $@ -+ - yearistype: yearistype.sh - cp yearistype.sh yearistype - chmod +x yearistype -@@ -324,6 +332,9 @@ - right_only: zic leapseconds $(TDATA) - $(ZIC) -y $(YEARISTYPE) -d $(TZDIR) -L leapseconds $(TDATA) - -+icu_data: tz2icu posix_only -+ ./tz2icu zoneinfo zone.tab `$(LS) tzdata*.tar.gz | $(SED) -e "s/^tzdata//;s/\.tar\.gz$$//"` -+ - # In earlier versions of this makefile, the other two directories were - # subdirectories of $(TZDIR). However, this led to configuration errors. - # For example, with posix_right under the earlier scheme, -diff -u -r ../tzcode.orig/zic.c ./zic.c ---- zic.c.orig 2006-12-06 14:29:17.000000000 -0800 -+++ zic.c 2006-12-06 14:51:36.000000000 -0800 -@@ -26,6 +26,20 @@ - #define MKDIR_UMASK 0755 - #endif - -+/* Enable extensions and modifications for ICU. */ -+#define ICU -+ -+/* Continue executing after link failure. Even if ICU is undefined -+ * (for vanilla zic behavior), ICU_LINKS should be defined, since zic -+ * appears to fail on the 2003 data the first time through during the -+ * linking phase. Running zic twice, with ICU_LINKS defined, causes -+ * links to be handled correctly. */ -+#define ICU_LINKS -+ -+#ifdef ICU -+#include "tz2icu.h" -+#endif -+ - /* - ** On some ancient hosts, predicates like `isspace(C)' are defined - ** only if isascii(C) || C == EOF. Modern hosts obey the C Standard, -@@ -106,8 +120,14 @@ - extern int optind; - - static void addtt P((zic_t starttime, int type)); -+#ifdef ICU -+static int addtype P((long gmtoff, long rawoff, long dstoff, -+ const char * abbr, int isdst, -+ int ttisstd, int ttisgmt)); -+#else - static int addtype P((long gmtoff, const char * abbr, int isdst, - int ttisstd, int ttisgmt)); -+#endif - static void leapadd P((zic_t t, int positive, int rolling, int count)); - static void adjleap P((void)); - static void associate P((void)); -@@ -287,6 +307,18 @@ - const int l_value; - }; - -+#ifdef ICU -+ -+/* Indices into rules[] for final rules. They will occur in pairs, -+ * with finalRules[i] occurring before finalRules[i+1] in the year. -+ * Each zone need only store a start year, a standard offset, and an -+ * index into finalRules[]. FinalRules[] are aliases into rules[]. */ -+ -+static const struct rule ** finalRules; -+static int finalRulesCount; -+ -+#endif -+ - static struct lookup const * byword P((const char * string, - const struct lookup * lp)); - -@@ -369,6 +401,11 @@ - unsigned char type; - } attypes[TZ_MAX_TIMES]; - static long gmtoffs[TZ_MAX_TYPES]; -+#ifdef ICU -+/* gmtoffs[i] = rawoffs[i] + dstoffs[i] */ -+static long rawoffs[TZ_MAX_TYPES]; -+static long dstoffs[TZ_MAX_TYPES]; -+#endif - static char isdsts[TZ_MAX_TYPES]; - static unsigned char abbrinds[TZ_MAX_TYPES]; - static char ttisstds[TZ_MAX_TYPES]; -@@ -480,6 +517,62 @@ - exit(EXIT_FAILURE); - } - -+#ifdef ICU -+ -+/* File into which we will write supplemental ICU data. */ -+static FILE * icuFile; -+ -+void emit_icu_zone(FILE* f, const char* zoneName, int zoneOffset, -+ const struct rule* rule, -+ int ruleIndex, int startYear) { -+ /* machine-readable section */ -+ fprintf(f, "zone %s %d %d %s", zoneName, zoneOffset, startYear, rule->r_name); -+ -+ /* human-readable section */ -+ fprintf(f, " # zone %s, offset %d, year >= %d, rule %s (%d)\n", -+ zoneName, zoneOffset, startYear, -+ rule->r_name, ruleIndex); -+} -+ -+void emit_icu_link(FILE* f, const char* from, const char* to) { -+ /* machine-readable section */ -+ fprintf(f, "link %s %s\n", from, to); -+} -+ -+static const char* DYCODE[] = {"DOM", "DOWGEQ", "DOWLEQ"}; -+ -+void emit_icu_rule(FILE* f, const struct rule* r, int ruleIndex) { -+ if (r->r_yrtype != NULL) { -+ warning("year types not supported by ICU"); -+ fprintf(stderr, "rule %s, file %s, line %d\n", -+ r->r_name, r->r_filename, r->r_linenum); -+ } -+ -+ /* machine-readable section */ -+ fprintf(f, "rule %s %s %d %d %d %d %d %d %d", -+ r->r_name, DYCODE[r->r_dycode], -+ r->r_month, r->r_dayofmonth, -+ (r->r_dycode == DC_DOM ? -1 : r->r_wday), -+ r->r_tod, r->r_todisstd, r->r_todisgmt, r->r_stdoff -+ ); -+ -+ /* human-readable section */ -+ fprintf(f, " # %d: %s, file %s, line %d", -+ ruleIndex, r->r_name, r->r_filename, r->r_linenum); -+ fprintf(f, ", mode %s", DYCODE[r->r_dycode]); -+ fprintf(f, ", %s, dom %d", mon_names[r->r_month].l_word, r->r_dayofmonth); -+ if (r->r_dycode != DC_DOM) { -+ fprintf(f, ", %s", wday_names[r->r_wday].l_word); -+ } -+ fprintf(f, ", time %d", r->r_tod); -+ fprintf(f, ", isstd %d", r->r_todisstd); -+ fprintf(f, ", isgmt %d", r->r_todisgmt); -+ fprintf(f, ", offset %ld", r->r_stdoff); -+ fprintf(f, "\n"); -+} -+ -+#endif -+ - static const char * psxrules; - static const char * lcltime; - static const char * directory; -@@ -591,6 +684,14 @@ - adjleap(); - } - -+#ifdef ICU -+ if ((icuFile = fopen(ICU_ZONE_FILE, "w")) == NULL) { -+ const char *e = strerror(errno); -+ (void) fprintf(stderr, _("%s: Can't open %s: %s\n"), -+ progname, ICU_ZONE_FILE, e); -+ (void) exit(EXIT_FAILURE); -+ } -+#endif - for (i = optind; i < argc; ++i) - infile(argv[i]); - if (errors) -@@ -610,6 +711,9 @@ - for (i = 0; i < nlinks; ++i) { - eat(links[i].l_filename, links[i].l_linenum); - dolink(links[i].l_from, links[i].l_to); -+#ifdef ICU -+ emit_icu_link(icuFile, links[i].l_from, links[i].l_to); -+#endif - if (noise) - for (j = 0; j < nlinks; ++j) - if (strcmp(links[i].l_to, -@@ -624,6 +728,11 @@ - eat("command line", 1); - dolink(psxrules, TZDEFRULES); - } -+#ifdef ICU -+ for (i=0; i<finalRulesCount; ++i) { -+ emit_icu_rule(icuFile, finalRules[i], i); -+ } -+#endif /*ICU*/ - return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE; - } - -@@ -689,7 +798,9 @@ - (void) fprintf(stderr, - _("%s: Can't link from %s to %s: %s\n"), - progname, fromname, toname, e); -+#ifndef ICU_LINKS - exit(EXIT_FAILURE); -+#endif - } - } - ifree(fromname); -@@ -1655,7 +1766,12 @@ - #define DO(field) (void) fwrite((void *) tzh.field, \ - (size_t) sizeof tzh.field, (size_t) 1, fp) - tzh = tzh0; -+#ifdef ICU -+ * (ICUZoneinfoVersion*) &tzh.tzh_reserved = TZ_ICU_VERSION; -+ (void) strncpy(tzh.tzh_magic, TZ_ICU_MAGIC, sizeof tzh.tzh_magic); -+#else - (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic); -+#endif - tzh.tzh_version[0] = ZIC_VERSION; - convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt); - convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt); -@@ -1688,7 +1804,12 @@ - } - for (i = 0; i < typecnt; ++i) - if (writetype[i]) { -+#ifdef ICU -+ puttzcode((long) rawoffs[i], fp); -+ puttzcode((long) dstoffs[i], fp); -+#else - puttzcode(gmtoffs[i], fp); -+#endif - (void) putc(isdsts[i], fp); - (void) putc((unsigned char) indmap[abbrinds[i]], fp); - } -@@ -1957,6 +2078,24 @@ - } - } - -+#ifdef ICU -+ -+int add_icu_final_rules(const struct rule* r1, const struct rule* r2) { -+ int i; -+ -+ for (i=0; i<finalRulesCount; ++i) { /* i+=2 should work too */ -+ if (r1==finalRules[i]) return i; /* [sic] pointer comparison */ -+ } -+ -+ finalRules = (const struct rule**) (void*) erealloc((char *) finalRules, -+ (finalRulesCount + 2) * sizeof(*finalRules)); -+ finalRules[finalRulesCount++] = r1; -+ finalRules[finalRulesCount++] = r2; -+ return finalRulesCount - 2; -+} -+ -+#endif /*ICU*/ -+ - static void - outzone(zpfirst, zonecount) - const struct zone * const zpfirst; -@@ -1979,6 +2118,11 @@ - register char * envvar; - register int max_abbr_len; - register int max_envvar_len; -+#ifdef ICU -+ int finalRuleYear, finalRuleIndex; -+ const struct rule* finalRule1; -+ const struct rule* finalRule2; -+#endif - - max_abbr_len = 2 + max_format_len + max_abbrvar_len; - max_envvar_len = 2 * max_abbr_len + 5 * 9; -@@ -2055,11 +2199,55 @@ - eat(zp->z_filename, zp->z_linenum); - *startbuf = '\0'; - startoff = zp->z_gmtoff; -+#ifdef ICU -+ finalRuleYear = finalRuleIndex = -1; -+ finalRule1 = finalRule2 = NULL; -+ if (i == (zonecount - 1)) { /* !useuntil */ -+ /* Look for exactly 2 rules that end at 'max' and -+ * note them. Determine max(r_loyear) for the 2 of -+ * them. */ -+ for (j=0; j<zp->z_nrules; ++j) { -+ rp = &zp->z_rules[j]; -+ if (rp->r_hiyear == INT_MAX) { -+ if (finalRule1 == NULL) { -+ finalRule1 = rp; -+ finalRuleYear = rp->r_loyear; -+ } else if (finalRule2 == NULL) { -+ finalRule2 = rp; -+ if (rp->r_loyear > finalRuleYear) { -+ finalRuleYear = rp->r_loyear; -+ } -+ } else { -+ error("more than two max rules found (ICU)"); -+ exit(EXIT_FAILURE); -+ } -+ } -+ } -+ if (finalRule1 != NULL && finalRule2 == NULL) { -+ error("only one max rule found (ICU)"); -+ exit(EXIT_FAILURE); -+ } -+ if (finalRule1 != NULL) { -+ /* Swap if necessary so finalRule1 occurs before -+ * finalRule2 */ -+ if (finalRule1->r_month > finalRule2->r_month) { -+ const struct rule* t = finalRule1; -+ finalRule1 = finalRule2; -+ finalRule2 = t; -+ } -+ /* Add final rule to our list */ -+ finalRuleIndex = add_icu_final_rules(finalRule1, finalRule2); -+ } -+ } -+#endif - if (zp->z_nrules == 0) { - stdoff = zp->z_stdoff; - doabbr(startbuf, zp->z_format, - (char *) NULL, stdoff != 0, FALSE); - type = addtype(oadd(zp->z_gmtoff, stdoff), -+#ifdef ICU -+ zp->z_gmtoff, stdoff, -+#endif - startbuf, stdoff != 0, startttisstd, - startttisgmt); - if (usestart) { -@@ -2132,6 +2320,15 @@ - break; /* go on to next year */ - rp = &zp->z_rules[k]; - rp->r_todo = FALSE; -+#ifdef ICU -+ if (year >= finalRuleYear && rp == finalRule1) { -+ emit_icu_zone(icuFile, -+ zpfirst->z_name, zp->z_gmtoff, -+ rp, finalRuleIndex, year); -+ /* only emit this for the first year */ -+ finalRule1 = NULL; -+ } -+#endif - if (useuntil && ktime >= untiltime) - break; - stdoff = rp->r_stdoff; -@@ -2163,8 +2360,14 @@ - doabbr(ab, zp->z_format, rp->r_abbrvar, - rp->r_stdoff != 0, FALSE); - offset = oadd(zp->z_gmtoff, rp->r_stdoff); -+#ifdef ICU -+ type = addtype(offset, zp->z_gmtoff, rp->r_stdoff, -+ ab, rp->r_stdoff != 0, -+ rp->r_todisstd, rp->r_todisgmt); -+#else - type = addtype(offset, ab, rp->r_stdoff != 0, - rp->r_todisstd, rp->r_todisgmt); -+#endif - addtt(ktime, type); - } - } -@@ -2178,10 +2381,19 @@ - if (*startbuf == '\0') - error(_("can't determine time zone abbreviation to use just after until time")); - else addtt(starttime, -+#ifdef ICU -+ addtype(startoff, -+ zp->z_gmtoff, startoff - zp->z_gmtoff, -+ startbuf, -+ startoff != zp->z_gmtoff, -+ startttisstd, -+ startttisgmt)); -+#else - addtype(startoff, startbuf, - startoff != zp->z_gmtoff, - startttisstd, - startttisgmt)); -+#endif - } - /* - ** Now we may get to set starttime for the next zone line. -@@ -2210,6 +2422,10 @@ - if (starttime <= min_time || - (timecnt == 1 && attypes[0].at < min_time)) { - gmtoffs[0] = gmtoffs[type]; -+#ifdef ICU -+ rawoffs[0] = rawoffs[type]; -+ dstoffs[0] = dstoffs[type]; -+#endif - isdsts[0] = isdsts[type]; - ttisstds[0] = ttisstds[type]; - ttisgmts[0] = ttisgmts[type]; -@@ -2231,8 +2447,15 @@ - } - - static int -+#ifdef ICU -+addtype(gmtoff, rawoff, dstoff, abbr, isdst, ttisstd, ttisgmt) -+const long gmtoff; -+const long rawoff; -+const long dstoff; -+#else - addtype(gmtoff, abbr, isdst, ttisstd, ttisgmt) - const long gmtoff; -+#endif - const char * const abbr; - const int isdst; - const int ttisstd; -@@ -2252,12 +2475,25 @@ - error(_("internal error - addtype called with bad ttisgmt")); - exit(EXIT_FAILURE); - } -+#ifdef ICU -+ if (isdst != (dstoff != 0)) { -+ error(_("internal error - addtype called with bad isdst/dstoff")); -+ (void) exit(EXIT_FAILURE); -+ } -+ if (gmtoff != (rawoff + dstoff)) { -+ error(_("internal error - addtype called with bad gmt/raw/dstoff")); -+ (void) exit(EXIT_FAILURE); -+ } -+#endif - /* - ** See if there's already an entry for this zone type. - ** If so, just return its index. - */ - for (i = 0; i < typecnt; ++i) { - if (gmtoff == gmtoffs[i] && isdst == isdsts[i] && -+#ifdef ICU -+ rawoff == rawoffs[i] && dstoff == dstoffs[i] && -+#endif - strcmp(abbr, &chars[abbrinds[i]]) == 0 && - ttisstd == ttisstds[i] && - ttisgmt == ttisgmts[i]) -@@ -2272,6 +2508,10 @@ - exit(EXIT_FAILURE); - } - gmtoffs[i] = gmtoff; -+#ifdef ICU -+ rawoffs[i] = rawoff; -+ dstoffs[i] = dstoff; -+#endif - isdsts[i] = isdst; - ttisstds[i] = ttisstd; - ttisgmts[i] = ttisgmt; diff --git a/icuSources/tools/tzcode/private.h b/icuSources/tools/tzcode/private.h new file mode 100644 index 00000000..2837b70c --- /dev/null +++ b/icuSources/tools/tzcode/private.h @@ -0,0 +1,368 @@ +#ifndef PRIVATE_H + +#define PRIVATE_H + +/* +** This file is in the public domain, so clarified as of +** 1996-06-05 by Arthur David Olson. +*/ + +/* +** This header is for use ONLY with the time conversion code. +** There is no guarantee that it will remain unchanged, +** or that it will remain at all. +** Do NOT copy it to any system include directory. +** Thank you! +*/ + +/* +** ID +*/ + +#ifndef lint +#ifndef NOID +static char privatehid[] = "@(#)private.h 8.2"; +#endif /* !defined NOID */ +#endif /* !defined lint */ + +#define GRANDPARENTED "Local time zone must be set--see zic manual page" + +/* +** Defaults for preprocessor symbols. +** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'. +*/ + +#ifndef HAVE_ADJTIME +#define HAVE_ADJTIME 1 +#endif /* !defined HAVE_ADJTIME */ + +#ifndef HAVE_GETTEXT +#define HAVE_GETTEXT 0 +#endif /* !defined HAVE_GETTEXT */ + +#ifndef HAVE_INCOMPATIBLE_CTIME_R +#define HAVE_INCOMPATIBLE_CTIME_R 0 +#endif /* !defined INCOMPATIBLE_CTIME_R */ + +#ifndef HAVE_SETTIMEOFDAY +#define HAVE_SETTIMEOFDAY 3 +#endif /* !defined HAVE_SETTIMEOFDAY */ + +#ifndef HAVE_STRERROR +#define HAVE_STRERROR 1 +#endif /* !defined HAVE_STRERROR */ + +#ifndef HAVE_SYMLINK +#define HAVE_SYMLINK 1 +#endif /* !defined HAVE_SYMLINK */ + +#ifndef HAVE_SYS_STAT_H +#define HAVE_SYS_STAT_H 1 +#endif /* !defined HAVE_SYS_STAT_H */ + +#ifndef HAVE_SYS_WAIT_H +#define HAVE_SYS_WAIT_H 1 +#endif /* !defined HAVE_SYS_WAIT_H */ + +#ifndef HAVE_UNISTD_H +#define HAVE_UNISTD_H 1 +#endif /* !defined HAVE_UNISTD_H */ + +#ifndef HAVE_UTMPX_H +#define HAVE_UTMPX_H 0 +#endif /* !defined HAVE_UTMPX_H */ + +#ifndef LOCALE_HOME +#define LOCALE_HOME "/usr/lib/locale" +#endif /* !defined LOCALE_HOME */ + +#if HAVE_INCOMPATIBLE_CTIME_R +#define asctime_r _incompatible_asctime_r +#define ctime_r _incompatible_ctime_r +#endif /* HAVE_INCOMPATIBLE_CTIME_R */ + +/* +** Nested includes +*/ + +#include "sys/types.h" /* for time_t */ +#include "stdio.h" +#include "errno.h" +#include "string.h" +#include "limits.h" /* for CHAR_BIT et al. */ +#include "time.h" +#include "stdlib.h" + +#if HAVE_GETTEXT +#include "libintl.h" +#endif /* HAVE_GETTEXT */ + +#if HAVE_SYS_WAIT_H +#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */ +#endif /* HAVE_SYS_WAIT_H */ + +#ifndef WIFEXITED +#define WIFEXITED(status) (((status) & 0xff) == 0) +#endif /* !defined WIFEXITED */ +#ifndef WEXITSTATUS +#define WEXITSTATUS(status) (((status) >> 8) & 0xff) +#endif /* !defined WEXITSTATUS */ + +#if HAVE_UNISTD_H +#include "unistd.h" /* for F_OK and R_OK */ +#endif /* HAVE_UNISTD_H */ + +#if !HAVE_UNISTD_H +#ifndef F_OK +#define F_OK 0 +#endif /* !defined F_OK */ +#ifndef R_OK +#define R_OK 4 +#endif /* !defined R_OK */ +#endif /* !HAVE_UNISTD_H */ + +/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */ +#define is_digit(c) ((unsigned)(c) - '0' <= 9) + +/* +** Define HAVE_STDINT_H's default value here, rather than at the +** start, since __GLIBC__'s value depends on previously-included +** files. +** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.) +*/ +#ifndef HAVE_STDINT_H +#define HAVE_STDINT_H \ + (199901 <= __STDC_VERSION__ || \ + 2 < (__GLIBC__ + (0 < __GLIBC_MINOR__))) +#endif /* !defined HAVE_STDINT_H */ + +#if HAVE_STDINT_H +#include "stdint.h" +#endif /* !HAVE_STDINT_H */ + +#ifndef INT_FAST64_MAX +/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */ +#if defined LLONG_MAX || defined __LONG_LONG_MAX__ +typedef long long int_fast64_t; +#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */ +#if (LONG_MAX >> 31) < 0xffffffff +Please use a compiler that supports a 64-bit integer type (or wider); +you may need to compile with "-DHAVE_STDINT_H". +#endif /* (LONG_MAX >> 31) < 0xffffffff */ +typedef long int_fast64_t; +#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */ +#endif /* !defined INT_FAST64_MAX */ + +#ifndef INT32_MAX +#define INT32_MAX 0x7fffffff +#endif /* !defined INT32_MAX */ +#ifndef INT32_MIN +#define INT32_MIN (-1 - INT32_MAX) +#endif /* !defined INT32_MIN */ + +/* +** Workarounds for compilers/systems. +*/ + +/* +** If your compiler lacks prototypes, "#define P(x) ()". +*/ + +#ifndef P +#define P(x) x +#endif /* !defined P */ + +/* +** SunOS 4.1.1 headers lack EXIT_SUCCESS. +*/ + +#ifndef EXIT_SUCCESS +#define EXIT_SUCCESS 0 +#endif /* !defined EXIT_SUCCESS */ + +/* +** SunOS 4.1.1 headers lack EXIT_FAILURE. +*/ + +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif /* !defined EXIT_FAILURE */ + +/* +** SunOS 4.1.1 headers lack FILENAME_MAX. +*/ + +#ifndef FILENAME_MAX + +#ifndef MAXPATHLEN +#ifdef unix +#include "sys/param.h" +#endif /* defined unix */ +#endif /* !defined MAXPATHLEN */ + +#ifdef MAXPATHLEN +#define FILENAME_MAX MAXPATHLEN +#endif /* defined MAXPATHLEN */ +#ifndef MAXPATHLEN +#define FILENAME_MAX 1024 /* Pure guesswork */ +#endif /* !defined MAXPATHLEN */ + +#endif /* !defined FILENAME_MAX */ + +/* +** SunOS 4.1.1 libraries lack remove. +*/ + +#ifndef remove +extern int unlink P((const char * filename)); +#define remove unlink +#endif /* !defined remove */ + +/* +** Some ancient errno.h implementations don't declare errno. +** But some newer errno.h implementations define it as a macro. +** Fix the former without affecting the latter. +*/ + +#ifndef errno +extern int errno; +#endif /* !defined errno */ + +/* +** Some time.h implementations don't declare asctime_r. +** Others might define it as a macro. +** Fix the former without affecting the latter. +*/ + +#ifndef asctime_r +extern char * asctime_r(); +#endif + +/* +** Private function declarations. +*/ + +char * icalloc P((int nelem, int elsize)); +char * icatalloc P((char * old, const char * new)); +char * icpyalloc P((const char * string)); +char * imalloc P((int n)); +void * irealloc P((void * pointer, int size)); +void icfree P((char * pointer)); +void ifree P((char * pointer)); +const char * scheck P((const char * string, const char * format)); + +/* +** Finally, some convenience items. +*/ + +#ifndef TRUE +#define TRUE 1 +#endif /* !defined TRUE */ + +#ifndef FALSE +#define FALSE 0 +#endif /* !defined FALSE */ + +#ifndef TYPE_BIT +#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT) +#endif /* !defined TYPE_BIT */ + +#ifndef TYPE_SIGNED +#define TYPE_SIGNED(type) (((type) -1) < 0) +#endif /* !defined TYPE_SIGNED */ + +/* +** Since the definition of TYPE_INTEGRAL contains floating point numbers, +** it cannot be used in preprocessor directives. +*/ + +#ifndef TYPE_INTEGRAL +#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5) +#endif /* !defined TYPE_INTEGRAL */ + +#ifndef INT_STRLEN_MAXIMUM +/* +** 302 / 1000 is log10(2.0) rounded up. +** Subtract one for the sign bit if the type is signed; +** add one for integer division truncation; +** add one more for a minus sign if the type is signed. +*/ +#define INT_STRLEN_MAXIMUM(type) \ + ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \ + 1 + TYPE_SIGNED(type)) +#endif /* !defined INT_STRLEN_MAXIMUM */ + +/* +** INITIALIZE(x) +*/ + +#ifndef GNUC_or_lint +#ifdef lint +#define GNUC_or_lint +#endif /* defined lint */ +#ifndef lint +#ifdef __GNUC__ +#define GNUC_or_lint +#endif /* defined __GNUC__ */ +#endif /* !defined lint */ +#endif /* !defined GNUC_or_lint */ + +#ifndef INITIALIZE +#ifdef GNUC_or_lint +#define INITIALIZE(x) ((x) = 0) +#endif /* defined GNUC_or_lint */ +#ifndef GNUC_or_lint +#define INITIALIZE(x) +#endif /* !defined GNUC_or_lint */ +#endif /* !defined INITIALIZE */ + +/* +** For the benefit of GNU folk... +** `_(MSGID)' uses the current locale's message library string for MSGID. +** The default is to use gettext if available, and use MSGID otherwise. +*/ + +#ifndef _ +#if HAVE_GETTEXT +#define _(msgid) gettext(msgid) +#else /* !HAVE_GETTEXT */ +#define _(msgid) msgid +#endif /* !HAVE_GETTEXT */ +#endif /* !defined _ */ + +#ifndef TZ_DOMAIN +#define TZ_DOMAIN "tz" +#endif /* !defined TZ_DOMAIN */ + +#if HAVE_INCOMPATIBLE_CTIME_R +#undef asctime_r +#undef ctime_r +char *asctime_r P((struct tm const *, char *)); +char *ctime_r P((time_t const *, char *)); +#endif /* HAVE_INCOMPATIBLE_CTIME_R */ + +#ifndef YEARSPERREPEAT +#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ +#endif /* !defined YEARSPERREPEAT */ + +/* +** The Gregorian year averages 365.2425 days, which is 31556952 seconds. +*/ + +#ifndef AVGSECSPERYEAR +#define AVGSECSPERYEAR 31556952L +#endif /* !defined AVGSECSPERYEAR */ + +#ifndef SECSPERREPEAT +#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR) +#endif /* !defined SECSPERREPEAT */ + +#ifndef SECSPERREPEAT_BITS +#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ +#endif /* !defined SECSPERREPEAT_BITS */ + +/* +** UNIX was a registered trademark of The Open Group in 2003. +*/ + +#endif /* !defined PRIVATE_H */ diff --git a/icuSources/tools/tzcode/readme.txt b/icuSources/tools/tzcode/readme.txt index d13b1468..656a6488 100644 --- a/icuSources/tools/tzcode/readme.txt +++ b/icuSources/tools/tzcode/readme.txt @@ -1,5 +1,5 @@ ********************************************************************** -* Copyright (c) 2003-2004, International Business Machines +* Copyright (c) 2003-2006, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu @@ -7,6 +7,10 @@ * Since: ICU 2.8 ********************************************************************** +Note: this directory currently contains tzcode as of tzcode2006h.tar.gz + with localtime.c patches from tzcode2006i.tar.gz + + ---------------------------------------------------------------------- OVERVIEW @@ -19,7 +23,7 @@ behavior, as well as the full set of Olson compatibility IDs. References: -ICU4C: http://oss.software.ibm.com/icu/ +ICU4C: http://icu.sourceforge.net/ Olson: ftp://elsie.nci.nih.gov/pub/ ---------------------------------------------------------------------- @@ -56,91 +60,29 @@ several parts. E.g.: tzcode2003a.tar.gz 98 KB 3/24/2003 2:32:00 PM tzdata2003a.tar.gz 132 KB 3/24/2003 2:32:00 PM -ICU only uses the tzcodeYYYYV.tar.gz and tzdataYYYYV.tar.gz files, +ICU only uses the tzdataYYYYV.tar.gz files, where YYYY is the year and V is the version letter ('a'...'z'). +This directory has partial contents of tzcode checked into ICU + ---------------------------------------------------------------------- HOWTO -1. Obtain the current versions of tzcodeYYYYV.tar.gz (aka `tzcode') - and tzdataYYYYV.tar.gz (aka `tzdata') from the FTP site given +0. Note, these instructions will only work on POSIX type systems. + +1. Obtain the current versions of tzdataYYYYV.tar.gz (aka `tzdata') from the FTP site given above. Either manually download or use wget: $ cd {path_to}/icu/source/tools/tzcode - $ wget "ftp://elsie.nci.nih.gov/pub/tz*.tar.gz" + $ wget "ftp://elsie.nci.nih.gov/pub/tzdata*.tar.gz" -2. Unpack tzcode and tzdata directly into the directory tzcode: - - $ tar xzvf tzcode*.tar.gz - $ tar xzvf tzdata*.tar.gz +2. copy only one tzdata*.tar.gz file into the icu/source/data/in/ directory (you may have to create this directory) *** Make sure you only have ONE FILE named tzdata*.tar.gz in the directory. - *** Do NOT delete the tzdata*.tar.gz file. - - The Makefile looks in the current directory to determine the - version of Olson data it is building by looking for tzdata*.tar.gz. - -3. Apply the ICU patch to zic.c: - - $ patch < patch-icu-tzcode - - If patch complains at this point, there is a mismatch that must be - manually addressed. See the CVS log of `patch-icu-tzcode' for - version details. - -4. Build: - - $ make icu_data - -5. Copy the data files to the correct location in the ICU4C/ICU4J - source trees: - - $ cp zoneinfo.txt ../../../data/misc/ - $ cp ZoneMetaData.java {path_to}/icu4j/src/com/ibm/icu/impl - -6. Rebuild ICU: - $ cd ../../../ - $ {*make} +3. Build ICU normally. You will see a notice "updating zoneinfo.txt..." -7. Don't forget to check in the new zoneinfo.txt (from its location at +4. For ICU maintainers, don't forget to check in the new + zoneinfo.txt (from its location at {path_to}/icu/source/data/misc/zoneinfo.txt) into CVS. - ----------------------------------------------------------------------- -HOWTO regenerate patch-icu-tzcode - -If you need to edit any of the tzcode* files, you will need to -regenerate the patch file as follows. - -1. Follow the above instructions to extract and patch the tzcode* - files in {path_to}/icu/source/tools/tzcode. Modify any of the - tzcode files. - -2. Extract a clean set of the tzcode* files into a new directory, - ../tzcode.orig/: - - $ mkdir ../tzcode.orig - $ cd ../tzcode.orig - $ tar xzf ../tzcode/tzcode*.tar.gz - $ cd ../tzcode - -3. Compute diffs, ignoring files that are in only one directory: - - $ diff -ur ../tzcode.orig . | grep -vE -e "^Only in " > patch-icu-tzcode - -4. Test the patch-icu-tzcode file by regenerating and diffing the - files again in another directory. The expected output from the - final diff command is *nothing*. - - $ mkdir ../tzcode.new - $ cd ../tzcode.new - $ tar xzf ../tzcode/tzcode*.tar.gz - $ patch < ../tzcode/patch-icu-tzcode - $ cd ../tzcode - $ diff -ur ../tzcode.new . | grep -vE -e "^Only in " - -5. Check in the new patch-icu-tzcode file. - ----------------------------------------------------------------------- -eof diff --git a/icuSources/tools/tzcode/scheck.c b/icuSources/tools/tzcode/scheck.c new file mode 100644 index 00000000..74d9b07c --- /dev/null +++ b/icuSources/tools/tzcode/scheck.c @@ -0,0 +1,63 @@ +/* +** This file is in the public domain, so clarified as of +** 2006-07-17 by Arthur David Olson. +*/ + +#ifndef lint +#ifndef NOID +static char elsieid[] = "@(#)scheck.c 8.19"; +#endif /* !defined lint */ +#endif /* !defined NOID */ + +/*LINTLIBRARY*/ + +#include "private.h" + +const char * +scheck(string, format) +const char * const string; +const char * const format; +{ + register char * fbuf; + register const char * fp; + register char * tp; + register int c; + register const char * result; + char dummy; + + result = ""; + if (string == NULL || format == NULL) + return result; + fbuf = imalloc((int) (2 * strlen(format) + 4)); + if (fbuf == NULL) + return result; + fp = format; + tp = fbuf; + while ((*tp++ = c = *fp++) != '\0') { + if (c != '%') + continue; + if (*fp == '%') { + *tp++ = *fp++; + continue; + } + *tp++ = '*'; + if (*fp == '*') + ++fp; + while (is_digit(*fp)) + *tp++ = *fp++; + if (*fp == 'l' || *fp == 'h') + *tp++ = *fp++; + else if (*fp == '[') + do *tp++ = *fp++; + while (*fp != '\0' && *fp != ']'); + if ((*tp++ = *fp++) == '\0') + break; + } + *(tp - 1) = '%'; + *tp++ = 'c'; + *tp = '\0'; + if (sscanf(string, fbuf, &dummy) != 1) + result = (char *) format; + ifree(fbuf); + return result; +} diff --git a/icuSources/tools/tzcode/tz2icu.cpp b/icuSources/tools/tzcode/tz2icu.cpp index 6bf01e98..eba0d3aa 100644 --- a/icuSources/tools/tzcode/tz2icu.cpp +++ b/icuSources/tools/tzcode/tz2icu.cpp @@ -1,3 +1,4 @@ + /* ********************************************************************** * Copyright (c) 2003-2006, International Business Machines @@ -478,7 +479,7 @@ void handleFile(string path, string id) { ostringstream os; os << (-eofPos) << " unprocessed bytes at end"; throw invalid_argument(os.str()); - } + } } ZONEINFO[id] = info; @@ -1451,12 +1452,14 @@ int main(int argc, char *argv[]) { << "// Build date: " << asctime(now) /* << endl -- asctime emits CR */ << "// Olson source: ftp://elsie.nci.nih.gov/pub/" << endl << "// Olson version: " << version << endl + << "// ICU version: " << U_ICU_VERSION << endl << "//---------------------------------------------------------" << endl << "// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<" << endl << "// >> !!! >>> DO NOT EDIT <<< !!! <<" << endl << "//---------------------------------------------------------" << endl << endl - << ICU_TZ_RESOURCE " {" << endl + << ICU_TZ_RESOURCE ":table(nofallback) {" << endl + << " TZVersion { \"" << version << "\" }" << endl << " Zones:array { " << endl << ZONEINFO // Zones (the actual data) << " }" << endl; diff --git a/icuSources/tools/tzcode/tzfile.h b/icuSources/tools/tzcode/tzfile.h new file mode 100644 index 00000000..3a9eee30 --- /dev/null +++ b/icuSources/tools/tzcode/tzfile.h @@ -0,0 +1,180 @@ +#ifndef TZFILE_H + +#define TZFILE_H + +/* +** This file is in the public domain, so clarified as of +** 1996-06-05 by Arthur David Olson. +*/ + +/* +** This header is for use ONLY with the time conversion code. +** There is no guarantee that it will remain unchanged, +** or that it will remain at all. +** Do NOT copy it to any system include directory. +** Thank you! +*/ + +/* +** ID +*/ + +#ifndef lint +#ifndef NOID +static char tzfilehid[] = "@(#)tzfile.h 8.1"; +#endif /* !defined NOID */ +#endif /* !defined lint */ + +/* +** Information about time zone files. +*/ + +#ifndef TZDIR +#define TZDIR "/usr/local/etc/zoneinfo" /* Time zone object file directory */ +#endif /* !defined TZDIR */ + +#ifndef TZDEFAULT +#define TZDEFAULT "localtime" +#endif /* !defined TZDEFAULT */ + +#ifndef TZDEFRULES +#define TZDEFRULES "posixrules" +#endif /* !defined TZDEFRULES */ + +/* +** Each file begins with. . . +*/ + +#define TZ_MAGIC "TZif" + +struct tzhead { + char tzh_magic[4]; /* TZ_MAGIC */ + char tzh_version[1]; /* '\0' or '2' as of 2005 */ + char tzh_reserved[15]; /* reserved--must be zero */ + char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */ + char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ + char tzh_leapcnt[4]; /* coded number of leap seconds */ + char tzh_timecnt[4]; /* coded number of transition times */ + char tzh_typecnt[4]; /* coded number of local time types */ + char tzh_charcnt[4]; /* coded number of abbr. chars */ +}; + +/* +** . . .followed by. . . +** +** tzh_timecnt (char [4])s coded transition times a la time(2) +** tzh_timecnt (unsigned char)s types of local time starting at above +** tzh_typecnt repetitions of +** one (char [4]) coded UTC offset in seconds +** one (unsigned char) used to set tm_isdst +** one (unsigned char) that's an abbreviation list index +** tzh_charcnt (char)s '\0'-terminated zone abbreviations +** tzh_leapcnt repetitions of +** one (char [4]) coded leap second transition times +** one (char [4]) total correction after above +** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition +** time is standard time, if FALSE, +** transition time is wall clock time +** if absent, transition times are +** assumed to be wall clock time +** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition +** time is UTC, if FALSE, +** transition time is local time +** if absent, transition times are +** assumed to be local time +*/ + +/* +** If tzh_version is '2' or greater, the above is followed by a second instance +** of tzhead and a second instance of the data in which each coded transition +** time uses 8 rather than 4 chars, +** then a POSIX-TZ-environment-variable-style string for use in handling +** instants after the last transition time stored in the file +** (with nothing between the newlines if there is no POSIX representation for +** such instants). +*/ + +/* +** In the current implementation, "tzset()" refuses to deal with files that +** exceed any of the limits below. +*/ + +#ifndef TZ_MAX_TIMES +#define TZ_MAX_TIMES 1200 +#endif /* !defined TZ_MAX_TIMES */ + +#ifndef TZ_MAX_TYPES +#ifndef NOSOLAR +#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ +#endif /* !defined NOSOLAR */ +#ifdef NOSOLAR +/* +** Must be at least 14 for Europe/Riga as of Jan 12 1995, +** as noted by Earl Chew. +*/ +#define TZ_MAX_TYPES 20 /* Maximum number of local time types */ +#endif /* !defined NOSOLAR */ +#endif /* !defined TZ_MAX_TYPES */ + +#ifndef TZ_MAX_CHARS +#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ + /* (limited by what unsigned chars can hold) */ +#endif /* !defined TZ_MAX_CHARS */ + +#ifndef TZ_MAX_LEAPS +#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ +#endif /* !defined TZ_MAX_LEAPS */ + +#define SECSPERMIN 60 +#define MINSPERHOUR 60 +#define HOURSPERDAY 24 +#define DAYSPERWEEK 7 +#define DAYSPERNYEAR 365 +#define DAYSPERLYEAR 366 +#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) +#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY) +#define MONSPERYEAR 12 + +#define TM_SUNDAY 0 +#define TM_MONDAY 1 +#define TM_TUESDAY 2 +#define TM_WEDNESDAY 3 +#define TM_THURSDAY 4 +#define TM_FRIDAY 5 +#define TM_SATURDAY 6 + +#define TM_JANUARY 0 +#define TM_FEBRUARY 1 +#define TM_MARCH 2 +#define TM_APRIL 3 +#define TM_MAY 4 +#define TM_JUNE 5 +#define TM_JULY 6 +#define TM_AUGUST 7 +#define TM_SEPTEMBER 8 +#define TM_OCTOBER 9 +#define TM_NOVEMBER 10 +#define TM_DECEMBER 11 + +#define TM_YEAR_BASE 1900 + +#define EPOCH_YEAR 1970 +#define EPOCH_WDAY TM_THURSDAY + +#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) + +/* +** Since everything in isleap is modulo 400 (or a factor of 400), we know that +** isleap(y) == isleap(y % 400) +** and so +** isleap(a + b) == isleap((a + b) % 400) +** or +** isleap(a + b) == isleap(a % 400 + b % 400) +** This is true even if % means modulo rather than Fortran remainder +** (which is allowed by C89 but not C99). +** We use this to avoid addition overflow problems. +*/ + +#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) + +#endif /* !defined TZFILE_H */ diff --git a/icuSources/tools/tzcode/tzselect.ksh b/icuSources/tools/tzcode/tzselect.ksh new file mode 100644 index 00000000..26dfa984 --- /dev/null +++ b/icuSources/tools/tzcode/tzselect.ksh @@ -0,0 +1,308 @@ +#! /bin/ksh + +# '@(#)tzselect.ksh 8.1' + +# Ask the user about the time zone, and output the resulting TZ value to stdout. +# Interact with the user via stderr and stdin. + +# Contributed by Paul Eggert. + +# Porting notes: +# +# This script requires several features of the Korn shell. +# If your host lacks the Korn shell, +# you can use either of the following free programs instead: +# +# <a href=ftp://ftp.gnu.org/pub/gnu/> +# Bourne-Again shell (bash) +# </a> +# +# <a href=ftp://ftp.cs.mun.ca/pub/pdksh/pdksh.tar.gz> +# Public domain ksh +# </a> +# +# This script also uses several features of modern awk programs. +# If your host lacks awk, or has an old awk that does not conform to Posix.2, +# you can use either of the following free programs instead: +# +# <a href=ftp://ftp.gnu.org/pub/gnu/> +# GNU awk (gawk) +# </a> +# +# <a href=ftp://ftp.whidbey.net/pub/brennan/> +# mawk +# </a> + + +# Specify default values for environment variables if they are unset. +: ${AWK=awk} +: ${TZDIR=$(pwd)} + +# Check for awk Posix compliance. +($AWK -v x=y 'BEGIN { exit 123 }') </dev/null >/dev/null 2>&1 +[ $? = 123 ] || { + echo >&2 "$0: Sorry, your \`$AWK' program is not Posix compatible." + exit 1 +} + +# Make sure the tables are readable. +TZ_COUNTRY_TABLE=$TZDIR/iso3166.tab +TZ_ZONE_TABLE=$TZDIR/zone.tab +for f in $TZ_COUNTRY_TABLE $TZ_ZONE_TABLE +do + <$f || { + echo >&2 "$0: time zone files are not set up correctly" + exit 1 + } +done + +newline=' +' +IFS=$newline + + +# Work around a bug in bash 1.14.7 and earlier, where $PS3 is sent to stdout. +case $(echo 1 | (select x in x; do break; done) 2>/dev/null) in +?*) PS3= +esac + + +# Begin the main loop. We come back here if the user wants to retry. +while + + echo >&2 'Please identify a location' \ + 'so that time zone rules can be set correctly.' + + continent= + country= + region= + + + # Ask the user for continent or ocean. + + echo >&2 'Please select a continent or ocean.' + + select continent in \ + Africa \ + Americas \ + Antarctica \ + 'Arctic Ocean' \ + Asia \ + 'Atlantic Ocean' \ + Australia \ + Europe \ + 'Indian Ocean' \ + 'Pacific Ocean' \ + 'none - I want to specify the time zone using the Posix TZ format.' + do + case $continent in + '') + echo >&2 'Please enter a number in range.';; + ?*) + case $continent in + Americas) continent=America;; + *' '*) continent=$(expr "$continent" : '\([^ ]*\)') + esac + break + esac + done + case $continent in + '') + exit 1;; + none) + # Ask the user for a Posix TZ string. Check that it conforms. + while + echo >&2 'Please enter the desired value' \ + 'of the TZ environment variable.' + echo >&2 'For example, GST-10 is a zone named GST' \ + 'that is 10 hours ahead (east) of UTC.' + read TZ + $AWK -v TZ="$TZ" 'BEGIN { + tzname = "[^-+,0-9][^-+,0-9][^-+,0-9]+" + time = "[0-2]?[0-9](:[0-5][0-9](:[0-5][0-9])?)?" + offset = "[-+]?" time + date = "(J?[0-9]+|M[0-9]+\.[0-9]+\.[0-9]+)" + datetime = "," date "(/" time ")?" + tzpattern = "^(:.*|" tzname offset "(" tzname \ + "(" offset ")?(" datetime datetime ")?)?)$" + if (TZ ~ tzpattern) exit 1 + exit 0 + }' + do + echo >&2 "\`$TZ' is not a conforming" \ + 'Posix time zone string.' + done + TZ_for_date=$TZ;; + *) + # Get list of names of countries in the continent or ocean. + countries=$($AWK -F'\t' \ + -v continent="$continent" \ + -v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \ + ' + /^#/ { next } + $3 ~ ("^" continent "/") { + if (!cc_seen[$1]++) cc_list[++ccs] = $1 + } + END { + while (getline <TZ_COUNTRY_TABLE) { + if ($0 !~ /^#/) cc_name[$1] = $2 + } + for (i = 1; i <= ccs; i++) { + country = cc_list[i] + if (cc_name[country]) { + country = cc_name[country] + } + print country + } + } + ' <$TZ_ZONE_TABLE | sort -f) + + + # If there's more than one country, ask the user which one. + case $countries in + *"$newline"*) + echo >&2 'Please select a country.' + select country in $countries + do + case $country in + '') echo >&2 'Please enter a number in range.';; + ?*) break + esac + done + + case $country in + '') exit 1 + esac;; + *) + country=$countries + esac + + + # Get list of names of time zone rule regions in the country. + regions=$($AWK -F'\t' \ + -v country="$country" \ + -v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \ + ' + BEGIN { + cc = country + while (getline <TZ_COUNTRY_TABLE) { + if ($0 !~ /^#/ && country == $2) { + cc = $1 + break + } + } + } + $1 == cc { print $4 } + ' <$TZ_ZONE_TABLE) + + + # If there's more than one region, ask the user which one. + case $regions in + *"$newline"*) + echo >&2 'Please select one of the following' \ + 'time zone regions.' + select region in $regions + do + case $region in + '') echo >&2 'Please enter a number in range.';; + ?*) break + esac + done + case $region in + '') exit 1 + esac;; + *) + region=$regions + esac + + # Determine TZ from country and region. + TZ=$($AWK -F'\t' \ + -v country="$country" \ + -v region="$region" \ + -v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \ + ' + BEGIN { + cc = country + while (getline <TZ_COUNTRY_TABLE) { + if ($0 !~ /^#/ && country == $2) { + cc = $1 + break + } + } + } + $1 == cc && $4 == region { print $3 } + ' <$TZ_ZONE_TABLE) + + # Make sure the corresponding zoneinfo file exists. + TZ_for_date=$TZDIR/$TZ + <$TZ_for_date || { + echo >&2 "$0: time zone files are not set up correctly" + exit 1 + } + esac + + + # Use the proposed TZ to output the current date relative to UTC. + # Loop until they agree in seconds. + # Give up after 8 unsuccessful tries. + + extra_info= + for i in 1 2 3 4 5 6 7 8 + do + TZdate=$(LANG=C TZ="$TZ_for_date" date) + UTdate=$(LANG=C TZ=UTC0 date) + TZsec=$(expr "$TZdate" : '.*:\([0-5][0-9]\)') + UTsec=$(expr "$UTdate" : '.*:\([0-5][0-9]\)') + case $TZsec in + $UTsec) + extra_info=" +Local time is now: $TZdate. +Universal Time is now: $UTdate." + break + esac + done + + + # Output TZ info and ask the user to confirm. + + echo >&2 "" + echo >&2 "The following information has been given:" + echo >&2 "" + case $country+$region in + ?*+?*) echo >&2 " $country$newline $region";; + ?*+) echo >&2 " $country";; + +) echo >&2 " TZ='$TZ'" + esac + echo >&2 "" + echo >&2 "Therefore TZ='$TZ' will be used.$extra_info" + echo >&2 "Is the above information OK?" + + ok= + select ok in Yes No + do + case $ok in + '') echo >&2 'Please enter 1 for Yes, or 2 for No.';; + ?*) break + esac + done + case $ok in + '') exit 1;; + Yes) break + esac +do : +done + +case $SHELL in +*csh) file=.login line="setenv TZ '$TZ'";; +*) file=.profile line="TZ='$TZ'; export TZ" +esac + +echo >&2 " +You can make this change permanent for yourself by appending the line + $line +to the file '$file' in your home directory; then log out and log in again. + +Here is that TZ value again, this time on standard output so that you +can use the $0 command in shell scripts:" + +echo "$TZ" diff --git a/icuSources/tools/tzcode/zic.c b/icuSources/tools/tzcode/zic.c new file mode 100644 index 00000000..47f92d22 --- /dev/null +++ b/icuSources/tools/tzcode/zic.c @@ -0,0 +1,2948 @@ +/* +** This file is in the public domain, so clarified as of +** 2006-07-17 by Arthur David Olson. +*/ + +static char elsieid[] = "@(#)zic.c 8.7"; + +#include "private.h" +#include "locale.h" +#include "tzfile.h" + +#define ZIC_VERSION '2' + +typedef int_fast64_t zic_t; + +#ifndef ZIC_MAX_ABBR_LEN_WO_WARN +#define ZIC_MAX_ABBR_LEN_WO_WARN 6 +#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */ + +#if HAVE_SYS_STAT_H +#include "sys/stat.h" +#endif +#ifdef S_IRUSR +#define MKDIR_UMASK (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) +#else +#define MKDIR_UMASK 0755 +#endif + +/* Enable extensions and modifications for ICU. */ +#define ICU + +/* Continue executing after link failure. Even if ICU is undefined + * (for vanilla zic behavior), ICU_LINKS should be defined, since zic + * appears to fail on the 2003 data the first time through during the + * linking phase. Running zic twice, with ICU_LINKS defined, causes + * links to be handled correctly. */ +#define ICU_LINKS + +#ifdef ICU +#include "tz2icu.h" +#endif + +/* +** On some ancient hosts, predicates like `isspace(C)' are defined +** only if isascii(C) || C == EOF. Modern hosts obey the C Standard, +** which says they are defined only if C == ((unsigned char) C) || C == EOF. +** Neither the C Standard nor Posix require that `isascii' exist. +** For portability, we check both ancient and modern requirements. +** If isascii is not defined, the isascii check succeeds trivially. +*/ +#include "ctype.h" +#ifndef isascii +#define isascii(x) 1 +#endif + +#define OFFSET_STRLEN_MAXIMUM (7 + INT_STRLEN_MAXIMUM(long)) +#define RULE_STRLEN_MAXIMUM 8 /* "Mdd.dd.d" */ + +#define end(cp) (strchr((cp), '\0')) + +struct rule { + const char * r_filename; + int r_linenum; + const char * r_name; + + int r_loyear; /* for example, 1986 */ + int r_hiyear; /* for example, 1986 */ + const char * r_yrtype; + int r_lowasnum; + int r_hiwasnum; + + int r_month; /* 0..11 */ + + int r_dycode; /* see below */ + int r_dayofmonth; + int r_wday; + + long r_tod; /* time from midnight */ + int r_todisstd; /* above is standard time if TRUE */ + /* or wall clock time if FALSE */ + int r_todisgmt; /* above is GMT if TRUE */ + /* or local time if FALSE */ + long r_stdoff; /* offset from standard time */ + const char * r_abbrvar; /* variable part of abbreviation */ + + int r_todo; /* a rule to do (used in outzone) */ + zic_t r_temp; /* used in outzone */ +}; + +/* +** r_dycode r_dayofmonth r_wday +*/ + +#define DC_DOM 0 /* 1..31 */ /* unused */ +#define DC_DOWGEQ 1 /* 1..31 */ /* 0..6 (Sun..Sat) */ +#define DC_DOWLEQ 2 /* 1..31 */ /* 0..6 (Sun..Sat) */ + +struct zone { + const char * z_filename; + int z_linenum; + + const char * z_name; + long z_gmtoff; + const char * z_rule; + const char * z_format; + + long z_stdoff; + + struct rule * z_rules; + int z_nrules; + + struct rule z_untilrule; + zic_t z_untiltime; +}; + +extern int getopt P((int argc, char * const argv[], + const char * options)); +extern int link P((const char * fromname, const char * toname)); +extern char * optarg; +extern int optind; + +static void addtt P((zic_t starttime, int type)); +#ifdef ICU +static int addtype P((long gmtoff, long rawoff, long dstoff, + const char * abbr, int isdst, + int ttisstd, int ttisgmt)); +#else +static int addtype P((long gmtoff, const char * abbr, int isdst, + int ttisstd, int ttisgmt)); +#endif +static void leapadd P((zic_t t, int positive, int rolling, int count)); +static void adjleap P((void)); +static void associate P((void)); +static int ciequal P((const char * ap, const char * bp)); +static void convert P((long val, char * buf)); +static void convert64 P((zic_t val, char * buf)); +static void dolink P((const char * fromfile, const char * tofile)); +static void doabbr P((char * abbr, const char * format, + const char * letters, int isdst, int doquotes)); +static void eat P((const char * name, int num)); +static void eats P((const char * name, int num, + const char * rname, int rnum)); +static long eitol P((int i)); +static void error P((const char * message)); +static char ** getfields P((char * buf)); +static long gethms P((const char * string, const char * errstrng, + int signable)); +static void infile P((const char * filename)); +static void inleap P((char ** fields, int nfields)); +static void inlink P((char ** fields, int nfields)); +static void inrule P((char ** fields, int nfields)); +static int inzcont P((char ** fields, int nfields)); +static int inzone P((char ** fields, int nfields)); +static int inzsub P((char ** fields, int nfields, int iscont)); +static int is32 P((zic_t x)); +static int itsabbr P((const char * abbr, const char * word)); +static int itsdir P((const char * name)); +static int lowerit P((int c)); +static char * memcheck P((char * tocheck)); +static int mkdirs P((char * filename)); +static void newabbr P((const char * abbr)); +static long oadd P((long t1, long t2)); +static void outzone P((const struct zone * zp, int ntzones)); +static void puttzcode P((long code, FILE * fp)); +static void puttzcode64 P((zic_t code, FILE * fp)); +static int rcomp P((const void * leftp, const void * rightp)); +static zic_t rpytime P((const struct rule * rp, int wantedy)); +static void rulesub P((struct rule * rp, + const char * loyearp, const char * hiyearp, + const char * typep, const char * monthp, + const char * dayp, const char * timep)); +static int stringoffset P((char * result, long offset)); +static int stringrule P((char * result, const struct rule * rp, + long dstoff, long gmtoff)); +static void stringzone P((char * result, + const struct zone * zp, int ntzones)); +static void setboundaries P((void)); +static zic_t tadd P((zic_t t1, long t2)); +static void usage P((void)); +static void writezone P((const char * name, const char * string)); +static int yearistype P((int year, const char * type)); + +#if !HAVE_STRERROR +static char * strerror P((int)); +#endif /* !HAVE_STRERROR */ + +static int charcnt; +static int errors; +static const char * filename; +static int leapcnt; +static int leapseen; +static int leapminyear; +static int leapmaxyear; +static int linenum; +static int max_abbrvar_len; +static int max_format_len; +static zic_t max_time; +static int max_year; +static zic_t min_time; +static int min_year; +static int noise; +static const char * rfilename; +static int rlinenum; +static const char * progname; +static int timecnt; +static int typecnt; + +/* +** Line codes. +*/ + +#define LC_RULE 0 +#define LC_ZONE 1 +#define LC_LINK 2 +#define LC_LEAP 3 + +/* +** Which fields are which on a Zone line. +*/ + +#define ZF_NAME 1 +#define ZF_GMTOFF 2 +#define ZF_RULE 3 +#define ZF_FORMAT 4 +#define ZF_TILYEAR 5 +#define ZF_TILMONTH 6 +#define ZF_TILDAY 7 +#define ZF_TILTIME 8 +#define ZONE_MINFIELDS 5 +#define ZONE_MAXFIELDS 9 + +/* +** Which fields are which on a Zone continuation line. +*/ + +#define ZFC_GMTOFF 0 +#define ZFC_RULE 1 +#define ZFC_FORMAT 2 +#define ZFC_TILYEAR 3 +#define ZFC_TILMONTH 4 +#define ZFC_TILDAY 5 +#define ZFC_TILTIME 6 +#define ZONEC_MINFIELDS 3 +#define ZONEC_MAXFIELDS 7 + +/* +** Which files are which on a Rule line. +*/ + +#define RF_NAME 1 +#define RF_LOYEAR 2 +#define RF_HIYEAR 3 +#define RF_COMMAND 4 +#define RF_MONTH 5 +#define RF_DAY 6 +#define RF_TOD 7 +#define RF_STDOFF 8 +#define RF_ABBRVAR 9 +#define RULE_FIELDS 10 + +/* +** Which fields are which on a Link line. +*/ + +#define LF_FROM 1 +#define LF_TO 2 +#define LINK_FIELDS 3 + +/* +** Which fields are which on a Leap line. +*/ + +#define LP_YEAR 1 +#define LP_MONTH 2 +#define LP_DAY 3 +#define LP_TIME 4 +#define LP_CORR 5 +#define LP_ROLL 6 +#define LEAP_FIELDS 7 + +/* +** Year synonyms. +*/ + +#define YR_MINIMUM 0 +#define YR_MAXIMUM 1 +#define YR_ONLY 2 + +static struct rule * rules; +static int nrules; /* number of rules */ + +static struct zone * zones; +static int nzones; /* number of zones */ + +struct link { + const char * l_filename; + int l_linenum; + const char * l_from; + const char * l_to; +}; + +static struct link * links; +static int nlinks; + +struct lookup { + const char * l_word; + const int l_value; +}; + +#ifdef ICU + +/* Indices into rules[] for final rules. They will occur in pairs, + * with finalRules[i] occurring before finalRules[i+1] in the year. + * Each zone need only store a start year, a standard offset, and an + * index into finalRules[]. FinalRules[] are aliases into rules[]. */ + +static const struct rule ** finalRules; +static int finalRulesCount; + +#endif + +static struct lookup const * byword P((const char * string, + const struct lookup * lp)); + +static struct lookup const line_codes[] = { + { "Rule", LC_RULE }, + { "Zone", LC_ZONE }, + { "Link", LC_LINK }, + { "Leap", LC_LEAP }, + { NULL, 0} +}; + +static struct lookup const mon_names[] = { + { "January", TM_JANUARY }, + { "February", TM_FEBRUARY }, + { "March", TM_MARCH }, + { "April", TM_APRIL }, + { "May", TM_MAY }, + { "June", TM_JUNE }, + { "July", TM_JULY }, + { "August", TM_AUGUST }, + { "September", TM_SEPTEMBER }, + { "October", TM_OCTOBER }, + { "November", TM_NOVEMBER }, + { "December", TM_DECEMBER }, + { NULL, 0 } +}; + +static struct lookup const wday_names[] = { + { "Sunday", TM_SUNDAY }, + { "Monday", TM_MONDAY }, + { "Tuesday", TM_TUESDAY }, + { "Wednesday", TM_WEDNESDAY }, + { "Thursday", TM_THURSDAY }, + { "Friday", TM_FRIDAY }, + { "Saturday", TM_SATURDAY }, + { NULL, 0 } +}; + +static struct lookup const lasts[] = { + { "last-Sunday", TM_SUNDAY }, + { "last-Monday", TM_MONDAY }, + { "last-Tuesday", TM_TUESDAY }, + { "last-Wednesday", TM_WEDNESDAY }, + { "last-Thursday", TM_THURSDAY }, + { "last-Friday", TM_FRIDAY }, + { "last-Saturday", TM_SATURDAY }, + { NULL, 0 } +}; + +static struct lookup const begin_years[] = { + { "minimum", YR_MINIMUM }, + { "maximum", YR_MAXIMUM }, + { NULL, 0 } +}; + +static struct lookup const end_years[] = { + { "minimum", YR_MINIMUM }, + { "maximum", YR_MAXIMUM }, + { "only", YR_ONLY }, + { NULL, 0 } +}; + +static struct lookup const leap_types[] = { + { "Rolling", TRUE }, + { "Stationary", FALSE }, + { NULL, 0 } +}; + +static const int len_months[2][MONSPERYEAR] = { + { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } +}; + +static const int len_years[2] = { + DAYSPERNYEAR, DAYSPERLYEAR +}; + +static struct attype { + zic_t at; + unsigned char type; +} attypes[TZ_MAX_TIMES]; +static long gmtoffs[TZ_MAX_TYPES]; +#ifdef ICU +/* gmtoffs[i] = rawoffs[i] + dstoffs[i] */ +static long rawoffs[TZ_MAX_TYPES]; +static long dstoffs[TZ_MAX_TYPES]; +#endif +static char isdsts[TZ_MAX_TYPES]; +static unsigned char abbrinds[TZ_MAX_TYPES]; +static char ttisstds[TZ_MAX_TYPES]; +static char ttisgmts[TZ_MAX_TYPES]; +static char chars[TZ_MAX_CHARS]; +static zic_t trans[TZ_MAX_LEAPS]; +static long corr[TZ_MAX_LEAPS]; +static char roll[TZ_MAX_LEAPS]; + +/* +** Memory allocation. +*/ + +static char * +memcheck(ptr) +char * const ptr; +{ + if (ptr == NULL) { + const char *e = strerror(errno); + + (void) fprintf(stderr, _("%s: Memory exhausted: %s\n"), + progname, e); + exit(EXIT_FAILURE); + } + return ptr; +} + +#define emalloc(size) memcheck(imalloc(size)) +#define erealloc(ptr, size) memcheck(irealloc((ptr), (size))) +#define ecpyalloc(ptr) memcheck(icpyalloc(ptr)) +#define ecatalloc(oldp, newp) memcheck(icatalloc((oldp), (newp))) + +/* +** Error handling. +*/ + +#if !HAVE_STRERROR +static char * +strerror(errnum) +int errnum; +{ + extern char * sys_errlist[]; + extern int sys_nerr; + + return (errnum > 0 && errnum <= sys_nerr) ? + sys_errlist[errnum] : _("Unknown system error"); +} +#endif /* !HAVE_STRERROR */ + +static void +eats(name, num, rname, rnum) +const char * const name; +const int num; +const char * const rname; +const int rnum; +{ + filename = name; + linenum = num; + rfilename = rname; + rlinenum = rnum; +} + +static void +eat(name, num) +const char * const name; +const int num; +{ + eats(name, num, (char *) NULL, -1); +} + +static void +error(string) +const char * const string; +{ + /* + ** Match the format of "cc" to allow sh users to + ** zic ... 2>&1 | error -t "*" -v + ** on BSD systems. + */ + (void) fprintf(stderr, _("\"%s\", line %d: %s"), + filename, linenum, string); + if (rfilename != NULL) + (void) fprintf(stderr, _(" (rule from \"%s\", line %d)"), + rfilename, rlinenum); + (void) fprintf(stderr, "\n"); + ++errors; +} + +static void +warning(string) +const char * const string; +{ + char * cp; + + cp = ecpyalloc(_("warning: ")); + cp = ecatalloc(cp, string); + error(cp); + ifree(cp); + --errors; +} + +static void +usage P((void)) +{ + (void) fprintf(stderr, _("%s: usage is %s \ +[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\ +\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"), + progname, progname); + exit(EXIT_FAILURE); +} + +#ifdef ICU + +/* File into which we will write supplemental ICU data. */ +static FILE * icuFile; + +void emit_icu_zone(FILE* f, const char* zoneName, int zoneOffset, + const struct rule* rule, + int ruleIndex, int startYear) { + /* machine-readable section */ + fprintf(f, "zone %s %d %d %s", zoneName, zoneOffset, startYear, rule->r_name); + + /* human-readable section */ + fprintf(f, " # zone %s, offset %d, year >= %d, rule %s (%d)\n", + zoneName, zoneOffset, startYear, + rule->r_name, ruleIndex); +} + +void emit_icu_link(FILE* f, const char* from, const char* to) { + /* machine-readable section */ + fprintf(f, "link %s %s\n", from, to); +} + +static const char* DYCODE[] = {"DOM", "DOWGEQ", "DOWLEQ"}; + +void emit_icu_rule(FILE* f, const struct rule* r, int ruleIndex) { + if (r->r_yrtype != NULL) { + warning("year types not supported by ICU"); + fprintf(stderr, "rule %s, file %s, line %d\n", + r->r_name, r->r_filename, r->r_linenum); + } + + /* machine-readable section */ + fprintf(f, "rule %s %s %d %d %d %d %d %d %d", + r->r_name, DYCODE[r->r_dycode], + r->r_month, r->r_dayofmonth, + (r->r_dycode == DC_DOM ? -1 : r->r_wday), + r->r_tod, r->r_todisstd, r->r_todisgmt, r->r_stdoff + ); + + /* human-readable section */ + fprintf(f, " # %d: %s, file %s, line %d", + ruleIndex, r->r_name, r->r_filename, r->r_linenum); + fprintf(f, ", mode %s", DYCODE[r->r_dycode]); + fprintf(f, ", %s, dom %d", mon_names[r->r_month].l_word, r->r_dayofmonth); + if (r->r_dycode != DC_DOM) { + fprintf(f, ", %s", wday_names[r->r_wday].l_word); + } + fprintf(f, ", time %d", r->r_tod); + fprintf(f, ", isstd %d", r->r_todisstd); + fprintf(f, ", isgmt %d", r->r_todisgmt); + fprintf(f, ", offset %ld", r->r_stdoff); + fprintf(f, "\n"); +} + +#endif + +static const char * psxrules; +static const char * lcltime; +static const char * directory; +static const char * leapsec; +static const char * yitcommand; + +int +main(argc, argv) +int argc; +char * argv[]; +{ + register int i; + register int j; + register int c; + +#ifdef unix + (void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH)); +#endif /* defined unix */ +#if HAVE_GETTEXT + (void) setlocale(LC_ALL, ""); +#ifdef TZ_DOMAINDIR + (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); +#endif /* defined TEXTDOMAINDIR */ + (void) textdomain(TZ_DOMAIN); +#endif /* HAVE_GETTEXT */ + progname = argv[0]; + if (TYPE_BIT(zic_t) < 64) { + (void) fprintf(stderr, "%s: %s\n", progname, + _("wild compilation-time specification of zic_t")); + exit(EXIT_FAILURE); + } + for (i = 1; i < argc; ++i) + if (strcmp(argv[i], "--version") == 0) { + (void) printf("%s\n", elsieid); + exit(EXIT_SUCCESS); + } + while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1) + switch (c) { + default: + usage(); + case 'd': + if (directory == NULL) + directory = optarg; + else { + (void) fprintf(stderr, +_("%s: More than one -d option specified\n"), + progname); + exit(EXIT_FAILURE); + } + break; + case 'l': + if (lcltime == NULL) + lcltime = optarg; + else { + (void) fprintf(stderr, +_("%s: More than one -l option specified\n"), + progname); + exit(EXIT_FAILURE); + } + break; + case 'p': + if (psxrules == NULL) + psxrules = optarg; + else { + (void) fprintf(stderr, +_("%s: More than one -p option specified\n"), + progname); + exit(EXIT_FAILURE); + } + break; + case 'y': + if (yitcommand == NULL) + yitcommand = optarg; + else { + (void) fprintf(stderr, +_("%s: More than one -y option specified\n"), + progname); + exit(EXIT_FAILURE); + } + break; + case 'L': + if (leapsec == NULL) + leapsec = optarg; + else { + (void) fprintf(stderr, +_("%s: More than one -L option specified\n"), + progname); + exit(EXIT_FAILURE); + } + break; + case 'v': + noise = TRUE; + break; + case 's': + (void) printf("%s: -s ignored\n", progname); + break; + } + if (optind == argc - 1 && strcmp(argv[optind], "=") == 0) + usage(); /* usage message by request */ + if (directory == NULL) + directory = TZDIR; + if (yitcommand == NULL) + yitcommand = "yearistype"; + + setboundaries(); + + if (optind < argc && leapsec != NULL) { + infile(leapsec); + adjleap(); + } + +#ifdef ICU + if ((icuFile = fopen(ICU_ZONE_FILE, "w")) == NULL) { + const char *e = strerror(errno); + (void) fprintf(stderr, _("%s: Can't open %s: %s\n"), + progname, ICU_ZONE_FILE, e); + (void) exit(EXIT_FAILURE); + } +#endif + for (i = optind; i < argc; ++i) + infile(argv[i]); + if (errors) + exit(EXIT_FAILURE); + associate(); + for (i = 0; i < nzones; i = j) { + /* + ** Find the next non-continuation zone entry. + */ + for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j) + continue; + outzone(&zones[i], j - i); + } + /* + ** Make links. + */ + for (i = 0; i < nlinks; ++i) { + eat(links[i].l_filename, links[i].l_linenum); + dolink(links[i].l_from, links[i].l_to); +#ifdef ICU + emit_icu_link(icuFile, links[i].l_from, links[i].l_to); +#endif + if (noise) + for (j = 0; j < nlinks; ++j) + if (strcmp(links[i].l_to, + links[j].l_from) == 0) + warning(_("link to link")); + } + if (lcltime != NULL) { + eat("command line", 1); + dolink(lcltime, TZDEFAULT); + } + if (psxrules != NULL) { + eat("command line", 1); + dolink(psxrules, TZDEFRULES); + } +#ifdef ICU + for (i=0; i<finalRulesCount; ++i) { + emit_icu_rule(icuFile, finalRules[i], i); + } +#endif /*ICU*/ + return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} + +static void +dolink(fromfile, tofile) +const char * const fromfile; +const char * const tofile; +{ + register char * fromname; + register char * toname; + + if (fromfile[0] == '/') + fromname = ecpyalloc(fromfile); + else { + fromname = ecpyalloc(directory); + fromname = ecatalloc(fromname, "/"); + fromname = ecatalloc(fromname, fromfile); + } + if (tofile[0] == '/') + toname = ecpyalloc(tofile); + else { + toname = ecpyalloc(directory); + toname = ecatalloc(toname, "/"); + toname = ecatalloc(toname, tofile); + } + /* + ** We get to be careful here since + ** there's a fair chance of root running us. + */ + if (!itsdir(toname)) + (void) remove(toname); + if (link(fromname, toname) != 0) { + int result; + + if (mkdirs(toname) != 0) + exit(EXIT_FAILURE); + + result = link(fromname, toname); +#if HAVE_SYMLINK + if (result != 0 && + access(fromname, F_OK) == 0 && + !itsdir(fromname)) { + const char *s = tofile; + register char * symlinkcontents = NULL; + + while ((s = strchr(s+1, '/')) != NULL) + symlinkcontents = + ecatalloc(symlinkcontents, + "../"); + symlinkcontents = + ecatalloc(symlinkcontents, + fromfile); + result = symlink(symlinkcontents, + toname); + if (result == 0) +warning(_("hard link failed, symbolic link used")); + ifree(symlinkcontents); + } +#endif /* HAVE_SYMLINK */ + if (result != 0) { + const char *e = strerror(errno); + + (void) fprintf(stderr, + _("%s: Can't link from %s to %s: %s\n"), + progname, fromname, toname, e); +#ifndef ICU_LINKS + exit(EXIT_FAILURE); +#endif + } + } + ifree(fromname); + ifree(toname); +} + +#define TIME_T_BITS_IN_FILE 64 + +static void +setboundaries P((void)) +{ + register int i; + + min_time = -1; + for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i) + min_time *= 2; + max_time = -(min_time + 1); +} + +static int +itsdir(name) +const char * const name; +{ + register char * myname; + register int accres; + + myname = ecpyalloc(name); + myname = ecatalloc(myname, "/."); + accres = access(myname, F_OK); + ifree(myname); + return accres == 0; +} + +/* +** Associate sets of rules with zones. +*/ + +/* +** Sort by rule name. +*/ + +static int +rcomp(cp1, cp2) +const void * cp1; +const void * cp2; +{ + return strcmp(((const struct rule *) cp1)->r_name, + ((const struct rule *) cp2)->r_name); +} + +static void +associate P((void)) +{ + register struct zone * zp; + register struct rule * rp; + register int base, out; + register int i, j; + + if (nrules != 0) { + (void) qsort((void *) rules, (size_t) nrules, + (size_t) sizeof *rules, rcomp); + for (i = 0; i < nrules - 1; ++i) { + if (strcmp(rules[i].r_name, + rules[i + 1].r_name) != 0) + continue; + if (strcmp(rules[i].r_filename, + rules[i + 1].r_filename) == 0) + continue; + eat(rules[i].r_filename, rules[i].r_linenum); + warning(_("same rule name in multiple files")); + eat(rules[i + 1].r_filename, rules[i + 1].r_linenum); + warning(_("same rule name in multiple files")); + for (j = i + 2; j < nrules; ++j) { + if (strcmp(rules[i].r_name, + rules[j].r_name) != 0) + break; + if (strcmp(rules[i].r_filename, + rules[j].r_filename) == 0) + continue; + if (strcmp(rules[i + 1].r_filename, + rules[j].r_filename) == 0) + continue; + break; + } + i = j - 1; + } + } + for (i = 0; i < nzones; ++i) { + zp = &zones[i]; + zp->z_rules = NULL; + zp->z_nrules = 0; + } + for (base = 0; base < nrules; base = out) { + rp = &rules[base]; + for (out = base + 1; out < nrules; ++out) + if (strcmp(rp->r_name, rules[out].r_name) != 0) + break; + for (i = 0; i < nzones; ++i) { + zp = &zones[i]; + if (strcmp(zp->z_rule, rp->r_name) != 0) + continue; + zp->z_rules = rp; + zp->z_nrules = out - base; + } + } + for (i = 0; i < nzones; ++i) { + zp = &zones[i]; + if (zp->z_nrules == 0) { + /* + ** Maybe we have a local standard time offset. + */ + eat(zp->z_filename, zp->z_linenum); + zp->z_stdoff = gethms(zp->z_rule, _("unruly zone"), + TRUE); + /* + ** Note, though, that if there's no rule, + ** a '%s' in the format is a bad thing. + */ + if (strchr(zp->z_format, '%') != 0) + error(_("%s in ruleless zone")); + } + } + if (errors) + exit(EXIT_FAILURE); +} + +static void +infile(name) +const char * name; +{ + register FILE * fp; + register char ** fields; + register char * cp; + register const struct lookup * lp; + register int nfields; + register int wantcont; + register int num; + char buf[BUFSIZ]; + + if (strcmp(name, "-") == 0) { + name = _("standard input"); + fp = stdin; + } else if ((fp = fopen(name, "r")) == NULL) { + const char *e = strerror(errno); + + (void) fprintf(stderr, _("%s: Can't open %s: %s\n"), + progname, name, e); + exit(EXIT_FAILURE); + } + wantcont = FALSE; + for (num = 1; ; ++num) { + eat(name, num); + if (fgets(buf, (int) sizeof buf, fp) != buf) + break; + cp = strchr(buf, '\n'); + if (cp == NULL) { + error(_("line too long")); + exit(EXIT_FAILURE); + } + *cp = '\0'; + fields = getfields(buf); + nfields = 0; + while (fields[nfields] != NULL) { + static char nada; + + if (strcmp(fields[nfields], "-") == 0) + fields[nfields] = &nada; + ++nfields; + } + if (nfields == 0) { + /* nothing to do */ + } else if (wantcont) { + wantcont = inzcont(fields, nfields); + } else { + lp = byword(fields[0], line_codes); + if (lp == NULL) + error(_("input line of unknown type")); + else switch ((int) (lp->l_value)) { + case LC_RULE: + inrule(fields, nfields); + wantcont = FALSE; + break; + case LC_ZONE: + wantcont = inzone(fields, nfields); + break; + case LC_LINK: + inlink(fields, nfields); + wantcont = FALSE; + break; + case LC_LEAP: + if (name != leapsec) + (void) fprintf(stderr, +_("%s: Leap line in non leap seconds file %s\n"), + progname, name); + else inleap(fields, nfields); + wantcont = FALSE; + break; + default: /* "cannot happen" */ + (void) fprintf(stderr, +_("%s: panic: Invalid l_value %d\n"), + progname, lp->l_value); + exit(EXIT_FAILURE); + } + } + ifree((char *) fields); + } + if (ferror(fp)) { + (void) fprintf(stderr, _("%s: Error reading %s\n"), + progname, filename); + exit(EXIT_FAILURE); + } + if (fp != stdin && fclose(fp)) { + const char *e = strerror(errno); + + (void) fprintf(stderr, _("%s: Error closing %s: %s\n"), + progname, filename, e); + exit(EXIT_FAILURE); + } + if (wantcont) + error(_("expected continuation line not found")); +} + +/* +** Convert a string of one of the forms +** h -h hh:mm -hh:mm hh:mm:ss -hh:mm:ss +** into a number of seconds. +** A null string maps to zero. +** Call error with errstring and return zero on errors. +*/ + +static long +gethms(string, errstring, signable) +const char * string; +const char * const errstring; +const int signable; +{ + int hh, mm, ss, sign; + + if (string == NULL || *string == '\0') + return 0; + if (!signable) + sign = 1; + else if (*string == '-') { + sign = -1; + ++string; + } else sign = 1; + if (sscanf(string, scheck(string, "%d"), &hh) == 1) + mm = ss = 0; + else if (sscanf(string, scheck(string, "%d:%d"), &hh, &mm) == 2) + ss = 0; + else if (sscanf(string, scheck(string, "%d:%d:%d"), + &hh, &mm, &ss) != 3) { + error(errstring); + return 0; + } + if ((hh < 0 || hh >= HOURSPERDAY || + mm < 0 || mm >= MINSPERHOUR || + ss < 0 || ss > SECSPERMIN) && + !(hh == HOURSPERDAY && mm == 0 && ss == 0)) { + error(errstring); + return 0; + } + if (noise && hh == HOURSPERDAY) + warning(_("24:00 not handled by pre-1998 versions of zic")); + return eitol(sign) * + (eitol(hh * MINSPERHOUR + mm) * + eitol(SECSPERMIN) + eitol(ss)); +} + +static void +inrule(fields, nfields) +register char ** const fields; +const int nfields; +{ + static struct rule r; + + if (nfields != RULE_FIELDS) { + error(_("wrong number of fields on Rule line")); + return; + } + if (*fields[RF_NAME] == '\0') { + error(_("nameless rule")); + return; + } + r.r_filename = filename; + r.r_linenum = linenum; + r.r_stdoff = gethms(fields[RF_STDOFF], _("invalid saved time"), TRUE); + rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND], + fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]); + r.r_name = ecpyalloc(fields[RF_NAME]); + r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]); + if (max_abbrvar_len < strlen(r.r_abbrvar)) + max_abbrvar_len = strlen(r.r_abbrvar); + rules = (struct rule *) (void *) erealloc((char *) rules, + (int) ((nrules + 1) * sizeof *rules)); + rules[nrules++] = r; +} + +static int +inzone(fields, nfields) +register char ** const fields; +const int nfields; +{ + register int i; + static char * buf; + + if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) { + error(_("wrong number of fields on Zone line")); + return FALSE; + } + if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) { + buf = erealloc(buf, (int) (132 + strlen(TZDEFAULT))); + (void) sprintf(buf, +_("\"Zone %s\" line and -l option are mutually exclusive"), + TZDEFAULT); + error(buf); + return FALSE; + } + if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) { + buf = erealloc(buf, (int) (132 + strlen(TZDEFRULES))); + (void) sprintf(buf, +_("\"Zone %s\" line and -p option are mutually exclusive"), + TZDEFRULES); + error(buf); + return FALSE; + } + for (i = 0; i < nzones; ++i) + if (zones[i].z_name != NULL && + strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) { + buf = erealloc(buf, (int) (132 + + strlen(fields[ZF_NAME]) + + strlen(zones[i].z_filename))); + (void) sprintf(buf, +_("duplicate zone name %s (file \"%s\", line %d)"), + fields[ZF_NAME], + zones[i].z_filename, + zones[i].z_linenum); + error(buf); + return FALSE; + } + return inzsub(fields, nfields, FALSE); +} + +static int +inzcont(fields, nfields) +register char ** const fields; +const int nfields; +{ + if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) { + error(_("wrong number of fields on Zone continuation line")); + return FALSE; + } + return inzsub(fields, nfields, TRUE); +} + +static int +inzsub(fields, nfields, iscont) +register char ** const fields; +const int nfields; +const int iscont; +{ + register char * cp; + static struct zone z; + register int i_gmtoff, i_rule, i_format; + register int i_untilyear, i_untilmonth; + register int i_untilday, i_untiltime; + register int hasuntil; + + if (iscont) { + i_gmtoff = ZFC_GMTOFF; + i_rule = ZFC_RULE; + i_format = ZFC_FORMAT; + i_untilyear = ZFC_TILYEAR; + i_untilmonth = ZFC_TILMONTH; + i_untilday = ZFC_TILDAY; + i_untiltime = ZFC_TILTIME; + z.z_name = NULL; + } else { + i_gmtoff = ZF_GMTOFF; + i_rule = ZF_RULE; + i_format = ZF_FORMAT; + i_untilyear = ZF_TILYEAR; + i_untilmonth = ZF_TILMONTH; + i_untilday = ZF_TILDAY; + i_untiltime = ZF_TILTIME; + z.z_name = ecpyalloc(fields[ZF_NAME]); + } + z.z_filename = filename; + z.z_linenum = linenum; + z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UTC offset"), TRUE); + if ((cp = strchr(fields[i_format], '%')) != 0) { + if (*++cp != 's' || strchr(cp, '%') != 0) { + error(_("invalid abbreviation format")); + return FALSE; + } + } + z.z_rule = ecpyalloc(fields[i_rule]); + z.z_format = ecpyalloc(fields[i_format]); + if (max_format_len < strlen(z.z_format)) + max_format_len = strlen(z.z_format); + hasuntil = nfields > i_untilyear; + if (hasuntil) { + z.z_untilrule.r_filename = filename; + z.z_untilrule.r_linenum = linenum; + rulesub(&z.z_untilrule, + fields[i_untilyear], + "only", + "", + (nfields > i_untilmonth) ? + fields[i_untilmonth] : "Jan", + (nfields > i_untilday) ? fields[i_untilday] : "1", + (nfields > i_untiltime) ? fields[i_untiltime] : "0"); + z.z_untiltime = rpytime(&z.z_untilrule, + z.z_untilrule.r_loyear); + if (iscont && nzones > 0 && + z.z_untiltime > min_time && + z.z_untiltime < max_time && + zones[nzones - 1].z_untiltime > min_time && + zones[nzones - 1].z_untiltime < max_time && + zones[nzones - 1].z_untiltime >= z.z_untiltime) { + error(_( +"Zone continuation line end time is not after end time of previous line" + )); + return FALSE; + } + } + zones = (struct zone *) (void *) erealloc((char *) zones, + (int) ((nzones + 1) * sizeof *zones)); + zones[nzones++] = z; + /* + ** If there was an UNTIL field on this line, + ** there's more information about the zone on the next line. + */ + return hasuntil; +} + +static void +inleap(fields, nfields) +register char ** const fields; +const int nfields; +{ + register const char * cp; + register const struct lookup * lp; + register int i, j; + int year, month, day; + long dayoff, tod; + zic_t t; + + if (nfields != LEAP_FIELDS) { + error(_("wrong number of fields on Leap line")); + return; + } + dayoff = 0; + cp = fields[LP_YEAR]; + if (sscanf(cp, scheck(cp, "%d"), &year) != 1) { + /* + ** Leapin' Lizards! + */ + error(_("invalid leaping year")); + return; + } + if (!leapseen || leapmaxyear < year) + leapmaxyear = year; + if (!leapseen || leapminyear > year) + leapminyear = year; + leapseen = TRUE; + j = EPOCH_YEAR; + while (j != year) { + if (year > j) { + i = len_years[isleap(j)]; + ++j; + } else { + --j; + i = -len_years[isleap(j)]; + } + dayoff = oadd(dayoff, eitol(i)); + } + if ((lp = byword(fields[LP_MONTH], mon_names)) == NULL) { + error(_("invalid month name")); + return; + } + month = lp->l_value; + j = TM_JANUARY; + while (j != month) { + i = len_months[isleap(year)][j]; + dayoff = oadd(dayoff, eitol(i)); + ++j; + } + cp = fields[LP_DAY]; + if (sscanf(cp, scheck(cp, "%d"), &day) != 1 || + day <= 0 || day > len_months[isleap(year)][month]) { + error(_("invalid day of month")); + return; + } + dayoff = oadd(dayoff, eitol(day - 1)); + if (dayoff < 0 && !TYPE_SIGNED(zic_t)) { + error(_("time before zero")); + return; + } + if (dayoff < min_time / SECSPERDAY) { + error(_("time too small")); + return; + } + if (dayoff > max_time / SECSPERDAY) { + error(_("time too large")); + return; + } + t = (zic_t) dayoff * SECSPERDAY; + tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE); + cp = fields[LP_CORR]; + { + register int positive; + int count; + + if (strcmp(cp, "") == 0) { /* infile() turns "-" into "" */ + positive = FALSE; + count = 1; + } else if (strcmp(cp, "--") == 0) { + positive = FALSE; + count = 2; + } else if (strcmp(cp, "+") == 0) { + positive = TRUE; + count = 1; + } else if (strcmp(cp, "++") == 0) { + positive = TRUE; + count = 2; + } else { + error(_("illegal CORRECTION field on Leap line")); + return; + } + if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) { + error(_( + "illegal Rolling/Stationary field on Leap line" + )); + return; + } + leapadd(tadd(t, tod), positive, lp->l_value, count); + } +} + +static void +inlink(fields, nfields) +register char ** const fields; +const int nfields; +{ + struct link l; + + if (nfields != LINK_FIELDS) { + error(_("wrong number of fields on Link line")); + return; + } + if (*fields[LF_FROM] == '\0') { + error(_("blank FROM field on Link line")); + return; + } + if (*fields[LF_TO] == '\0') { + error(_("blank TO field on Link line")); + return; + } + l.l_filename = filename; + l.l_linenum = linenum; + l.l_from = ecpyalloc(fields[LF_FROM]); + l.l_to = ecpyalloc(fields[LF_TO]); + links = (struct link *) (void *) erealloc((char *) links, + (int) ((nlinks + 1) * sizeof *links)); + links[nlinks++] = l; +} + +static void +rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep) +register struct rule * const rp; +const char * const loyearp; +const char * const hiyearp; +const char * const typep; +const char * const monthp; +const char * const dayp; +const char * const timep; +{ + register const struct lookup * lp; + register const char * cp; + register char * dp; + register char * ep; + + if ((lp = byword(monthp, mon_names)) == NULL) { + error(_("invalid month name")); + return; + } + rp->r_month = lp->l_value; + rp->r_todisstd = FALSE; + rp->r_todisgmt = FALSE; + dp = ecpyalloc(timep); + if (*dp != '\0') { + ep = dp + strlen(dp) - 1; + switch (lowerit(*ep)) { + case 's': /* Standard */ + rp->r_todisstd = TRUE; + rp->r_todisgmt = FALSE; + *ep = '\0'; + break; + case 'w': /* Wall */ + rp->r_todisstd = FALSE; + rp->r_todisgmt = FALSE; + *ep = '\0'; + break; + case 'g': /* Greenwich */ + case 'u': /* Universal */ + case 'z': /* Zulu */ + rp->r_todisstd = TRUE; + rp->r_todisgmt = TRUE; + *ep = '\0'; + break; + } + } + rp->r_tod = gethms(dp, _("invalid time of day"), FALSE); + ifree(dp); + /* + ** Year work. + */ + cp = loyearp; + lp = byword(cp, begin_years); + rp->r_lowasnum = lp == NULL; + if (!rp->r_lowasnum) switch ((int) lp->l_value) { + case YR_MINIMUM: + rp->r_loyear = INT_MIN; + break; + case YR_MAXIMUM: + rp->r_loyear = INT_MAX; + break; + default: /* "cannot happen" */ + (void) fprintf(stderr, + _("%s: panic: Invalid l_value %d\n"), + progname, lp->l_value); + exit(EXIT_FAILURE); + } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) { + error(_("invalid starting year")); + return; + } + cp = hiyearp; + lp = byword(cp, end_years); + rp->r_hiwasnum = lp == NULL; + if (!rp->r_hiwasnum) switch ((int) lp->l_value) { + case YR_MINIMUM: + rp->r_hiyear = INT_MIN; + break; + case YR_MAXIMUM: + rp->r_hiyear = INT_MAX; + break; + case YR_ONLY: + rp->r_hiyear = rp->r_loyear; + break; + default: /* "cannot happen" */ + (void) fprintf(stderr, + _("%s: panic: Invalid l_value %d\n"), + progname, lp->l_value); + exit(EXIT_FAILURE); + } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) { + error(_("invalid ending year")); + return; + } + if (rp->r_loyear > rp->r_hiyear) { + error(_("starting year greater than ending year")); + return; + } + if (*typep == '\0') + rp->r_yrtype = NULL; + else { + if (rp->r_loyear == rp->r_hiyear) { + error(_("typed single year")); + return; + } + rp->r_yrtype = ecpyalloc(typep); + } + /* + ** Day work. + ** Accept things such as: + ** 1 + ** last-Sunday + ** Sun<=20 + ** Sun>=7 + */ + dp = ecpyalloc(dayp); + if ((lp = byword(dp, lasts)) != NULL) { + rp->r_dycode = DC_DOWLEQ; + rp->r_wday = lp->l_value; + rp->r_dayofmonth = len_months[1][rp->r_month]; + } else { + if ((ep = strchr(dp, '<')) != 0) + rp->r_dycode = DC_DOWLEQ; + else if ((ep = strchr(dp, '>')) != 0) + rp->r_dycode = DC_DOWGEQ; + else { + ep = dp; + rp->r_dycode = DC_DOM; + } + if (rp->r_dycode != DC_DOM) { + *ep++ = 0; + if (*ep++ != '=') { + error(_("invalid day of month")); + ifree(dp); + return; + } + if ((lp = byword(dp, wday_names)) == NULL) { + error(_("invalid weekday name")); + ifree(dp); + return; + } + rp->r_wday = lp->l_value; + } + if (sscanf(ep, scheck(ep, "%d"), &rp->r_dayofmonth) != 1 || + rp->r_dayofmonth <= 0 || + (rp->r_dayofmonth > len_months[1][rp->r_month])) { + error(_("invalid day of month")); + ifree(dp); + return; + } + } + ifree(dp); +} + +static void +convert(val, buf) +const long val; +char * const buf; +{ + register int i; + register int shift; + + for (i = 0, shift = 24; i < 4; ++i, shift -= 8) + buf[i] = val >> shift; +} + +static void +convert64(val, buf) +const zic_t val; +char * const buf; +{ + register int i; + register int shift; + + for (i = 0, shift = 56; i < 8; ++i, shift -= 8) + buf[i] = val >> shift; +} + +static void +puttzcode(val, fp) +const long val; +FILE * const fp; +{ + char buf[4]; + + convert(val, buf); + (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp); +} + +static void +puttzcode64(val, fp) +const zic_t val; +FILE * const fp; +{ + char buf[8]; + + convert64(val, buf); + (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp); +} + +static int +atcomp(avp, bvp) +const void * avp; +const void * bvp; +{ + const zic_t a = ((const struct attype *) avp)->at; + const zic_t b = ((const struct attype *) bvp)->at; + + return (a < b) ? -1 : (a > b); +} + +static int +is32(x) +const zic_t x; +{ + return INT32_MIN <= x && x <= INT32_MAX; +} + +static void +writezone(name, string) +const char * const name; +const char * const string; +{ + register FILE * fp; + register int i, j; + register int leapcnt32, leapi32; + register int timecnt32, timei32; + register int pass; + static char * fullname; + static const struct tzhead tzh0; + static struct tzhead tzh; + zic_t ats[TZ_MAX_TIMES]; + unsigned char types[TZ_MAX_TIMES]; + + /* + ** Sort. + */ + if (timecnt > 1) + (void) qsort((void *) attypes, (size_t) timecnt, + (size_t) sizeof *attypes, atcomp); + /* + ** Optimize. + */ + { + int fromi; + int toi; + + toi = 0; + fromi = 0; + while (fromi < timecnt && attypes[fromi].at < min_time) + ++fromi; + if (isdsts[0] == 0) + while (fromi < timecnt && attypes[fromi].type == 0) + ++fromi; /* handled by default rule */ + for ( ; fromi < timecnt; ++fromi) { + if (toi != 0 && ((attypes[fromi].at + + gmtoffs[attypes[toi - 1].type]) <= + (attypes[toi - 1].at + gmtoffs[toi == 1 ? 0 + : attypes[toi - 2].type]))) { + attypes[toi - 1].type = + attypes[fromi].type; + continue; + } + if (toi == 0 || + attypes[toi - 1].type != attypes[fromi].type) + attypes[toi++] = attypes[fromi]; + } + timecnt = toi; + } + /* + ** Transfer. + */ + for (i = 0; i < timecnt; ++i) { + ats[i] = attypes[i].at; + types[i] = attypes[i].type; + } + /* + ** Correct for leap seconds. + */ + for (i = 0; i < timecnt; ++i) { + j = leapcnt; + while (--j >= 0) + if (ats[i] > trans[j] - corr[j]) { + ats[i] = tadd(ats[i], corr[j]); + break; + } + } + /* + ** Figure out 32-bit-limited starts and counts. + */ + timecnt32 = timecnt; + timei32 = 0; + leapcnt32 = leapcnt; + leapi32 = 0; + while (timecnt32 > 0 && !is32(ats[timecnt32 - 1])) + --timecnt32; + while (timecnt32 > 0 && !is32(ats[timei32])) { + --timecnt32; + ++timei32; + } + while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1])) + --leapcnt32; + while (leapcnt32 > 0 && !is32(trans[leapi32])) { + --leapcnt32; + ++leapi32; + } + fullname = erealloc(fullname, + (int) (strlen(directory) + 1 + strlen(name) + 1)); + (void) sprintf(fullname, "%s/%s", directory, name); + /* + ** Remove old file, if any, to snap links. + */ + if (!itsdir(fullname) && remove(fullname) != 0 && errno != ENOENT) { + const char *e = strerror(errno); + + (void) fprintf(stderr, _("%s: Can't remove %s: %s\n"), + progname, fullname, e); + exit(EXIT_FAILURE); + } + if ((fp = fopen(fullname, "wb")) == NULL) { + if (mkdirs(fullname) != 0) + exit(EXIT_FAILURE); + if ((fp = fopen(fullname, "wb")) == NULL) { + const char *e = strerror(errno); + + (void) fprintf(stderr, _("%s: Can't create %s: %s\n"), + progname, fullname, e); + exit(EXIT_FAILURE); + } + } + for (pass = 1; pass <= 2; ++pass) { + register int thistimei, thistimecnt; + register int thisleapi, thisleapcnt; + register int thistimelim, thisleaplim; + int writetype[TZ_MAX_TIMES]; + int typemap[TZ_MAX_TYPES]; + register int thistypecnt; + char thischars[TZ_MAX_CHARS]; + char thischarcnt; + int indmap[TZ_MAX_CHARS]; + + if (pass == 1) { + thistimei = timei32; + thistimecnt = timecnt32; + thisleapi = leapi32; + thisleapcnt = leapcnt32; + } else { + thistimei = 0; + thistimecnt = timecnt; + thisleapi = 0; + thisleapcnt = leapcnt; + } + thistimelim = thistimei + thistimecnt; + thisleaplim = thisleapi + thisleapcnt; + for (i = 0; i < typecnt; ++i) + writetype[i] = thistimecnt == timecnt; + if (thistimecnt == 0) { + /* + ** No transition times fall in the current + ** (32- or 64-bit) window. + */ + if (typecnt != 0) + writetype[typecnt - 1] = TRUE; + } else { + for (i = thistimei - 1; i < thistimelim; ++i) + if (i >= 0) + writetype[types[i]] = TRUE; + /* + ** For America/Godthab and Antarctica/Palmer + */ + if (thistimei == 0) + writetype[0] = TRUE; + } + thistypecnt = 0; + for (i = 0; i < typecnt; ++i) + typemap[i] = writetype[i] ? thistypecnt++ : -1; + for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i) + indmap[i] = -1; + thischarcnt = 0; + for (i = 0; i < typecnt; ++i) { + register char * thisabbr; + + if (!writetype[i]) + continue; + if (indmap[abbrinds[i]] >= 0) + continue; + thisabbr = &chars[abbrinds[i]]; + for (j = 0; j < thischarcnt; ++j) + if (strcmp(&thischars[j], thisabbr) == 0) + break; + if (j == thischarcnt) { + (void) strcpy(&thischars[(int) thischarcnt], + thisabbr); + thischarcnt += strlen(thisabbr) + 1; + } + indmap[abbrinds[i]] = j; + } +#define DO(field) (void) fwrite((void *) tzh.field, \ + (size_t) sizeof tzh.field, (size_t) 1, fp) + tzh = tzh0; +#ifdef ICU + * (ICUZoneinfoVersion*) &tzh.tzh_reserved = TZ_ICU_VERSION; + (void) strncpy(tzh.tzh_magic, TZ_ICU_MAGIC, sizeof tzh.tzh_magic); +#else + (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic); +#endif + tzh.tzh_version[0] = ZIC_VERSION; + convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt); + convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt); + convert(eitol(thisleapcnt), tzh.tzh_leapcnt); + convert(eitol(thistimecnt), tzh.tzh_timecnt); + convert(eitol(thistypecnt), tzh.tzh_typecnt); + convert(eitol(thischarcnt), tzh.tzh_charcnt); + DO(tzh_magic); + DO(tzh_version); + DO(tzh_reserved); + DO(tzh_ttisgmtcnt); + DO(tzh_ttisstdcnt); + DO(tzh_leapcnt); + DO(tzh_timecnt); + DO(tzh_typecnt); + DO(tzh_charcnt); +#undef DO + for (i = thistimei; i < thistimelim; ++i) + if (pass == 1) + puttzcode((long) ats[i], fp); + else puttzcode64(ats[i], fp); + for (i = thistimei; i < thistimelim; ++i) { + unsigned char uc; + + uc = typemap[types[i]]; + (void) fwrite((void *) &uc, + (size_t) sizeof uc, + (size_t) 1, + fp); + } + for (i = 0; i < typecnt; ++i) + if (writetype[i]) { +#ifdef ICU + puttzcode((long) rawoffs[i], fp); + puttzcode((long) dstoffs[i], fp); +#else + puttzcode((long) gmtoffs[i], fp); +#endif + (void) putc(isdsts[i], fp); + (void) putc((unsigned char) indmap[abbrinds[i]], fp); + } + if (thischarcnt != 0) + (void) fwrite((void *) thischars, + (size_t) sizeof thischars[0], + (size_t) thischarcnt, fp); + for (i = thisleapi; i < thisleaplim; ++i) { + register zic_t todo; + + if (roll[i]) { + if (timecnt == 0 || trans[i] < ats[0]) { + j = 0; + while (isdsts[j]) + if (++j >= typecnt) { + j = 0; + break; + } + } else { + j = 1; + while (j < timecnt && + trans[i] >= ats[j]) + ++j; + j = types[j - 1]; + } + todo = tadd(trans[i], -gmtoffs[j]); + } else todo = trans[i]; + if (pass == 1) + puttzcode((long) todo, fp); + else puttzcode64(todo, fp); + puttzcode(corr[i], fp); + } + for (i = 0; i < typecnt; ++i) + if (writetype[i]) + (void) putc(ttisstds[i], fp); + for (i = 0; i < typecnt; ++i) + if (writetype[i]) + (void) putc(ttisgmts[i], fp); + } + (void) fprintf(fp, "\n%s\n", string); + if (ferror(fp) || fclose(fp)) { + (void) fprintf(stderr, _("%s: Error writing %s\n"), + progname, fullname); + exit(EXIT_FAILURE); + } +} + +static void +doabbr(abbr, format, letters, isdst, doquotes) +char * const abbr; +const char * const format; +const char * const letters; +const int isdst; +const int doquotes; +{ + register char * cp; + register char * slashp; + register int len; + + slashp = strchr(format, '/'); + if (slashp == NULL) { + if (letters == NULL) + (void) strcpy(abbr, format); + else (void) sprintf(abbr, format, letters); + } else if (isdst) { + (void) strcpy(abbr, slashp + 1); + } else { + if (slashp > format) + (void) strncpy(abbr, format, + (unsigned) (slashp - format)); + abbr[slashp - format] = '\0'; + } + if (!doquotes) + return; + for (cp = abbr; *cp != '\0'; ++cp) + if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", *cp) == NULL && + strchr("abcdefghijklmnopqrstuvwxyz", *cp) == NULL) + break; + len = strlen(abbr); + if (len > 0 && *cp == '\0') + return; + abbr[len + 2] = '\0'; + abbr[len + 1] = '>'; + for ( ; len > 0; --len) + abbr[len] = abbr[len - 1]; + abbr[0] = '<'; +} + +static void +updateminmax(x) +const int x; +{ + if (min_year > x) + min_year = x; + if (max_year < x) + max_year = x; +} + +static int +stringoffset(result, offset) +char * result; +long offset; +{ + register int hours; + register int minutes; + register int seconds; + + result[0] = '\0'; + if (offset < 0) { + (void) strcpy(result, "-"); + offset = -offset; + } + seconds = offset % SECSPERMIN; + offset /= SECSPERMIN; + minutes = offset % MINSPERHOUR; + offset /= MINSPERHOUR; + hours = offset; + if (hours >= HOURSPERDAY) { + result[0] = '\0'; + return -1; + } + (void) sprintf(end(result), "%d", hours); + if (minutes != 0 || seconds != 0) { + (void) sprintf(end(result), ":%02d", minutes); + if (seconds != 0) + (void) sprintf(end(result), ":%02d", seconds); + } + return 0; +} + +static int +stringrule(result, rp, dstoff, gmtoff) +char * result; +const struct rule * const rp; +const long dstoff; +const long gmtoff; +{ + register long tod; + + result = end(result); + if (rp->r_dycode == DC_DOM) { + register int month, total; + + if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY) + return -1; + total = 0; + for (month = 0; month < rp->r_month; ++month) + total += len_months[0][month]; + (void) sprintf(result, "J%d", total + rp->r_dayofmonth); + } else { + register int week; + + if (rp->r_dycode == DC_DOWGEQ) { + week = 1 + rp->r_dayofmonth / DAYSPERWEEK; + if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth) + return -1; + } else if (rp->r_dycode == DC_DOWLEQ) { + if (rp->r_dayofmonth == len_months[1][rp->r_month]) + week = 5; + else { + week = 1 + rp->r_dayofmonth / DAYSPERWEEK; + if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth) + return -1; + } + } else return -1; /* "cannot happen" */ + (void) sprintf(result, "M%d.%d.%d", + rp->r_month + 1, week, rp->r_wday); + } + tod = rp->r_tod; + if (rp->r_todisgmt) + tod += gmtoff; + if (rp->r_todisstd && rp->r_stdoff == 0) + tod += dstoff; + if (tod < 0) { + result[0] = '\0'; + return -1; + } + if (tod != 2 * SECSPERMIN * MINSPERHOUR) { + (void) strcat(result, "/"); + if (stringoffset(end(result), tod) != 0) + return -1; + } + return 0; +} + +static void +stringzone(result, zpfirst, zonecount) +char * result; +const struct zone * const zpfirst; +const int zonecount; +{ + register const struct zone * zp; + register struct rule * rp; + register struct rule * stdrp; + register struct rule * dstrp; + register int i; + register const char * abbrvar; + + result[0] = '\0'; + zp = zpfirst + zonecount - 1; + stdrp = dstrp = NULL; + for (i = 0; i < zp->z_nrules; ++i) { + rp = &zp->z_rules[i]; + if (rp->r_hiwasnum || rp->r_hiyear != INT_MAX) + continue; + if (rp->r_yrtype != NULL) + continue; + if (rp->r_stdoff == 0) { + if (stdrp == NULL) + stdrp = rp; + else return; + } else { + if (dstrp == NULL) + dstrp = rp; + else return; + } + } + if (stdrp == NULL && dstrp == NULL) { + /* + ** There are no rules running through "max". + ** Let's find the latest rule. + */ + for (i = 0; i < zp->z_nrules; ++i) { + rp = &zp->z_rules[i]; + if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear || + (rp->r_hiyear == stdrp->r_hiyear && + rp->r_month > stdrp->r_month)) + stdrp = rp; + } + if (stdrp != NULL && stdrp->r_stdoff != 0) + return; /* We end up in DST (a POSIX no-no). */ + /* + ** Horrid special case: if year is 2037, + ** presume this is a zone handled on a year-by-year basis; + ** do not try to apply a rule to the zone. + */ + if (stdrp != NULL && stdrp->r_hiyear == 2037) + return; + } + if (stdrp == NULL && zp->z_nrules != 0) + return; + abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar; + doabbr(result, zp->z_format, abbrvar, FALSE, TRUE); + if (stringoffset(end(result), -zp->z_gmtoff) != 0) { + result[0] = '\0'; + return; + } + if (dstrp == NULL) + return; + doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE); + if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR) + if (stringoffset(end(result), + -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) { + result[0] = '\0'; + return; + } + (void) strcat(result, ","); + if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) { + result[0] = '\0'; + return; + } + (void) strcat(result, ","); + if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) { + result[0] = '\0'; + return; + } +} + +#ifdef ICU + +int add_icu_final_rules(const struct rule* r1, const struct rule* r2) { + int i; + + for (i=0; i<finalRulesCount; ++i) { /* i+=2 should work too */ + if (r1==finalRules[i]) return i; /* [sic] pointer comparison */ + } + + finalRules = (const struct rule**) (void*) erealloc((char *) finalRules, + (finalRulesCount + 2) * sizeof(*finalRules)); + finalRules[finalRulesCount++] = r1; + finalRules[finalRulesCount++] = r2; + return finalRulesCount - 2; +} + +#endif /*ICU*/ + +static void +outzone(zpfirst, zonecount) +const struct zone * const zpfirst; +const int zonecount; +{ + register const struct zone * zp; + register struct rule * rp; + register int i, j; + register int usestart, useuntil; + register zic_t starttime, untiltime; + register long gmtoff; + register long stdoff; + register int year; + register long startoff; + register int startttisstd; + register int startttisgmt; + register int type; + register char * startbuf; + register char * ab; + register char * envvar; + register int max_abbr_len; + register int max_envvar_len; +#ifdef ICU + int finalRuleYear, finalRuleIndex; + const struct rule* finalRule1; + const struct rule* finalRule2; +#endif + + max_abbr_len = 2 + max_format_len + max_abbrvar_len; + max_envvar_len = 2 * max_abbr_len + 5 * 9; + startbuf = emalloc(max_abbr_len + 1); + ab = emalloc(max_abbr_len + 1); + envvar = emalloc(max_envvar_len + 1); + INITIALIZE(untiltime); + INITIALIZE(starttime); + /* + ** Now. . .finally. . .generate some useful data! + */ + timecnt = 0; + typecnt = 0; + charcnt = 0; + /* + ** Thanks to Earl Chew + ** for noting the need to unconditionally initialize startttisstd. + */ + startttisstd = FALSE; + startttisgmt = FALSE; + min_year = max_year = EPOCH_YEAR; + if (leapseen) { + updateminmax(leapminyear); + updateminmax(leapmaxyear); + } + for (i = 0; i < zonecount; ++i) { + zp = &zpfirst[i]; + updateminmax(zp->z_untilrule.r_loyear); + for (j = 0; j < zp->z_nrules; ++j) { + rp = &zp->z_rules[j]; + if (rp->r_lowasnum) + updateminmax(rp->r_loyear); + if (rp->r_hiwasnum) + updateminmax(rp->r_hiyear); + } + } + /* + ** Generate lots of data if a rule can't cover all future times. + */ + stringzone(envvar, zpfirst, zonecount); + if (noise && envvar[0] == '\0') { + register char * wp; + +wp = ecpyalloc(_("no POSIX environment variable for zone")); + wp = ecatalloc(wp, " "); + wp = ecatalloc(wp, zpfirst->z_name); + warning(wp); + ifree(wp); + } + if (envvar[0] == '\0') { + if (min_year >= INT_MIN + YEARSPERREPEAT) + min_year -= YEARSPERREPEAT; + else min_year = INT_MIN; + if (max_year <= INT_MAX - YEARSPERREPEAT) + max_year += YEARSPERREPEAT; + else max_year = INT_MAX; + } + /* + ** For the benefit of older systems, generate data through 2037. + */ + if (max_year < 2037) + max_year = 2037; + for (i = 0; i < zonecount; ++i) { + /* + ** A guess that may well be corrected later. + */ + stdoff = 0; + zp = &zpfirst[i]; + usestart = i > 0 && (zp - 1)->z_untiltime > min_time; + useuntil = i < (zonecount - 1); + if (useuntil && zp->z_untiltime <= min_time) + continue; + gmtoff = zp->z_gmtoff; + eat(zp->z_filename, zp->z_linenum); + *startbuf = '\0'; + startoff = zp->z_gmtoff; +#ifdef ICU + finalRuleYear = finalRuleIndex = -1; + finalRule1 = finalRule2 = NULL; + if (i == (zonecount - 1)) { /* !useuntil */ + /* Look for exactly 2 rules that end at 'max' and + * note them. Determine max(r_loyear) for the 2 of + * them. */ + for (j=0; j<zp->z_nrules; ++j) { + rp = &zp->z_rules[j]; + if (rp->r_hiyear == INT_MAX) { + if (finalRule1 == NULL) { + finalRule1 = rp; + finalRuleYear = rp->r_loyear; + } else if (finalRule2 == NULL) { + finalRule2 = rp; + if (rp->r_loyear > finalRuleYear) { + finalRuleYear = rp->r_loyear; + } + } else { + error("more than two max rules found (ICU)"); + exit(EXIT_FAILURE); + } + } + } + if (finalRule1 != NULL && finalRule2 == NULL) { + error("only one max rule found (ICU)"); + exit(EXIT_FAILURE); + } + if (finalRule1 != NULL) { + /* Swap if necessary so finalRule1 occurs before + * finalRule2 */ + if (finalRule1->r_month > finalRule2->r_month) { + const struct rule* t = finalRule1; + finalRule1 = finalRule2; + finalRule2 = t; + } + /* Add final rule to our list */ + finalRuleIndex = add_icu_final_rules(finalRule1, finalRule2); + } + } +#endif + + if (zp->z_nrules == 0) { + stdoff = zp->z_stdoff; + doabbr(startbuf, zp->z_format, + (char *) NULL, stdoff != 0, FALSE); + type = addtype(oadd(zp->z_gmtoff, stdoff), +#ifdef ICU + zp->z_gmtoff, stdoff, +#endif + startbuf, stdoff != 0, startttisstd, + startttisgmt); + if (usestart) { + addtt(starttime, type); + usestart = FALSE; + } else if (stdoff != 0) + addtt(min_time, type); + } else for (year = min_year; year <= max_year; ++year) { + if (useuntil && year > zp->z_untilrule.r_hiyear) + break; + /* + ** Mark which rules to do in the current year. + ** For those to do, calculate rpytime(rp, year); + */ + for (j = 0; j < zp->z_nrules; ++j) { + rp = &zp->z_rules[j]; + eats(zp->z_filename, zp->z_linenum, + rp->r_filename, rp->r_linenum); + rp->r_todo = year >= rp->r_loyear && + year <= rp->r_hiyear && + yearistype(year, rp->r_yrtype); + if (rp->r_todo) + rp->r_temp = rpytime(rp, year); + } + for ( ; ; ) { + register int k; + register zic_t jtime, ktime; + register long offset; + + INITIALIZE(ktime); + if (useuntil) { + /* + ** Turn untiltime into UTC + ** assuming the current gmtoff and + ** stdoff values. + */ + untiltime = zp->z_untiltime; + if (!zp->z_untilrule.r_todisgmt) + untiltime = tadd(untiltime, + -gmtoff); + if (!zp->z_untilrule.r_todisstd) + untiltime = tadd(untiltime, + -stdoff); + } + /* + ** Find the rule (of those to do, if any) + ** that takes effect earliest in the year. + */ + k = -1; + for (j = 0; j < zp->z_nrules; ++j) { + rp = &zp->z_rules[j]; + if (!rp->r_todo) + continue; + eats(zp->z_filename, zp->z_linenum, + rp->r_filename, rp->r_linenum); + offset = rp->r_todisgmt ? 0 : gmtoff; + if (!rp->r_todisstd) + offset = oadd(offset, stdoff); + jtime = rp->r_temp; + if (jtime == min_time || + jtime == max_time) + continue; + jtime = tadd(jtime, -offset); + if (k < 0 || jtime < ktime) { + k = j; + ktime = jtime; + } + } + if (k < 0) + break; /* go on to next year */ + rp = &zp->z_rules[k]; + rp->r_todo = FALSE; +#ifdef ICU + if (year >= finalRuleYear && rp == finalRule1) { + emit_icu_zone(icuFile, + zpfirst->z_name, zp->z_gmtoff, + rp, finalRuleIndex, year); + /* only emit this for the first year */ + finalRule1 = NULL; + } +#endif + if (useuntil && ktime >= untiltime) + break; + stdoff = rp->r_stdoff; + if (usestart && ktime == starttime) + usestart = FALSE; + if (usestart) { + if (ktime < starttime) { + startoff = oadd(zp->z_gmtoff, + stdoff); + doabbr(startbuf, zp->z_format, + rp->r_abbrvar, + rp->r_stdoff != 0, + FALSE); + continue; + } + if (*startbuf == '\0' && + startoff == oadd(zp->z_gmtoff, + stdoff)) { + doabbr(startbuf, + zp->z_format, + rp->r_abbrvar, + rp->r_stdoff != + 0, + FALSE); + } + } + eats(zp->z_filename, zp->z_linenum, + rp->r_filename, rp->r_linenum); + doabbr(ab, zp->z_format, rp->r_abbrvar, + rp->r_stdoff != 0, FALSE); + offset = oadd(zp->z_gmtoff, rp->r_stdoff); +#ifdef ICU + type = addtype(offset, zp->z_gmtoff, rp->r_stdoff, + ab, rp->r_stdoff != 0, + rp->r_todisstd, rp->r_todisgmt); +#else + type = addtype(offset, ab, rp->r_stdoff != 0, + rp->r_todisstd, rp->r_todisgmt); +#endif + addtt(ktime, type); + } + } + if (usestart) { + if (*startbuf == '\0' && + zp->z_format != NULL && + strchr(zp->z_format, '%') == NULL && + strchr(zp->z_format, '/') == NULL) + (void) strcpy(startbuf, zp->z_format); + eat(zp->z_filename, zp->z_linenum); + if (*startbuf == '\0') +error(_("can't determine time zone abbreviation to use just after until time")); + else addtt(starttime, +#ifdef ICU + addtype(startoff, + zp->z_gmtoff, startoff - zp->z_gmtoff, + startbuf, + startoff != zp->z_gmtoff, + startttisstd, + startttisgmt)); +#else + addtype(startoff, startbuf, + startoff != zp->z_gmtoff, + startttisstd, + startttisgmt)); +#endif + } + /* + ** Now we may get to set starttime for the next zone line. + */ + if (useuntil) { + startttisstd = zp->z_untilrule.r_todisstd; + startttisgmt = zp->z_untilrule.r_todisgmt; + starttime = zp->z_untiltime; + if (!startttisstd) + starttime = tadd(starttime, -stdoff); + if (!startttisgmt) + starttime = tadd(starttime, -gmtoff); + } + } + writezone(zpfirst->z_name, envvar); + ifree(startbuf); + ifree(ab); + ifree(envvar); +} + +static void +addtt(starttime, type) +const zic_t starttime; +int type; +{ + if (starttime <= min_time || + (timecnt == 1 && attypes[0].at < min_time)) { + gmtoffs[0] = gmtoffs[type]; +#ifdef ICU + rawoffs[0] = rawoffs[type]; + dstoffs[0] = dstoffs[type]; +#endif + isdsts[0] = isdsts[type]; + ttisstds[0] = ttisstds[type]; + ttisgmts[0] = ttisgmts[type]; + if (abbrinds[type] != 0) + (void) strcpy(chars, &chars[abbrinds[type]]); + abbrinds[0] = 0; + charcnt = strlen(chars) + 1; + typecnt = 1; + timecnt = 0; + type = 0; + } + if (timecnt >= TZ_MAX_TIMES) { + error(_("too many transitions?!")); + exit(EXIT_FAILURE); + } + attypes[timecnt].at = starttime; + attypes[timecnt].type = type; + ++timecnt; +} + +static int +#ifdef ICU +addtype(gmtoff, rawoff, dstoff, abbr, isdst, ttisstd, ttisgmt) +const long gmtoff; +const long rawoff; +const long dstoff; +#else +addtype(gmtoff, abbr, isdst, ttisstd, ttisgmt) +const long gmtoff; +#endif +const char * const abbr; +const int isdst; +const int ttisstd; +const int ttisgmt; +{ + register int i, j; + + if (isdst != TRUE && isdst != FALSE) { + error(_("internal error - addtype called with bad isdst")); + exit(EXIT_FAILURE); + } + if (ttisstd != TRUE && ttisstd != FALSE) { + error(_("internal error - addtype called with bad ttisstd")); + exit(EXIT_FAILURE); + } + if (ttisgmt != TRUE && ttisgmt != FALSE) { + error(_("internal error - addtype called with bad ttisgmt")); + exit(EXIT_FAILURE); + } +#ifdef ICU + if (isdst != (dstoff != 0)) { + error(_("internal error - addtype called with bad isdst/dstoff")); + (void) exit(EXIT_FAILURE); + } + if (gmtoff != (rawoff + dstoff)) { + error(_("internal error - addtype called with bad gmt/raw/dstoff")); + (void) exit(EXIT_FAILURE); + } +#endif + /* + ** See if there's already an entry for this zone type. + ** If so, just return its index. + */ + for (i = 0; i < typecnt; ++i) { + if (gmtoff == gmtoffs[i] && isdst == isdsts[i] && +#ifdef ICU + rawoff == rawoffs[i] && dstoff == dstoffs[i] && +#endif + strcmp(abbr, &chars[abbrinds[i]]) == 0 && + ttisstd == ttisstds[i] && + ttisgmt == ttisgmts[i]) + return i; + } + /* + ** There isn't one; add a new one, unless there are already too + ** many. + */ + if (typecnt >= TZ_MAX_TYPES) { + error(_("too many local time types")); + exit(EXIT_FAILURE); + } + gmtoffs[i] = gmtoff; +#ifdef ICU + rawoffs[i] = rawoff; + dstoffs[i] = dstoff; +#endif + isdsts[i] = isdst; + ttisstds[i] = ttisstd; + ttisgmts[i] = ttisgmt; + + for (j = 0; j < charcnt; ++j) + if (strcmp(&chars[j], abbr) == 0) + break; + if (j == charcnt) + newabbr(abbr); + abbrinds[i] = j; + ++typecnt; + return i; +} + +static void +leapadd(t, positive, rolling, count) +const zic_t t; +const int positive; +const int rolling; +int count; +{ + register int i, j; + + if (leapcnt + (positive ? count : 1) > TZ_MAX_LEAPS) { + error(_("too many leap seconds")); + exit(EXIT_FAILURE); + } + for (i = 0; i < leapcnt; ++i) + if (t <= trans[i]) { + if (t == trans[i]) { + error(_("repeated leap second moment")); + exit(EXIT_FAILURE); + } + break; + } + do { + for (j = leapcnt; j > i; --j) { + trans[j] = trans[j - 1]; + corr[j] = corr[j - 1]; + roll[j] = roll[j - 1]; + } + trans[i] = t; + corr[i] = positive ? 1L : eitol(-count); + roll[i] = rolling; + ++leapcnt; + } while (positive && --count != 0); +} + +static void +adjleap P((void)) +{ + register int i; + register long last = 0; + + /* + ** propagate leap seconds forward + */ + for (i = 0; i < leapcnt; ++i) { + trans[i] = tadd(trans[i], last); + last = corr[i] += last; + } +} + +static int +yearistype(year, type) +const int year; +const char * const type; +{ + static char * buf; + int result; + + if (type == NULL || *type == '\0') + return TRUE; + buf = erealloc(buf, (int) (132 + strlen(yitcommand) + strlen(type))); + (void) sprintf(buf, "%s %d %s", yitcommand, year, type); + result = system(buf); + if (WIFEXITED(result)) switch (WEXITSTATUS(result)) { + case 0: + return TRUE; + case 1: + return FALSE; + } + error(_("Wild result from command execution")); + (void) fprintf(stderr, _("%s: command was '%s', result was %d\n"), + progname, buf, result); + for ( ; ; ) + exit(EXIT_FAILURE); +} + +static int +lowerit(a) +int a; +{ + a = (unsigned char) a; + return (isascii(a) && isupper(a)) ? tolower(a) : a; +} + +static int +ciequal(ap, bp) /* case-insensitive equality */ +register const char * ap; +register const char * bp; +{ + while (lowerit(*ap) == lowerit(*bp++)) + if (*ap++ == '\0') + return TRUE; + return FALSE; +} + +static int +itsabbr(abbr, word) +register const char * abbr; +register const char * word; +{ + if (lowerit(*abbr) != lowerit(*word)) + return FALSE; + ++word; + while (*++abbr != '\0') + do { + if (*word == '\0') + return FALSE; + } while (lowerit(*word++) != lowerit(*abbr)); + return TRUE; +} + +static const struct lookup * +byword(word, table) +register const char * const word; +register const struct lookup * const table; +{ + register const struct lookup * foundlp; + register const struct lookup * lp; + + if (word == NULL || table == NULL) + return NULL; + /* + ** Look for exact match. + */ + for (lp = table; lp->l_word != NULL; ++lp) + if (ciequal(word, lp->l_word)) + return lp; + /* + ** Look for inexact match. + */ + foundlp = NULL; + for (lp = table; lp->l_word != NULL; ++lp) + if (itsabbr(word, lp->l_word)) { + if (foundlp == NULL) + foundlp = lp; + else return NULL; /* multiple inexact matches */ + } + return foundlp; +} + +static char ** +getfields(cp) +register char * cp; +{ + register char * dp; + register char ** array; + register int nsubs; + + if (cp == NULL) + return NULL; + array = (char **) (void *) + emalloc((int) ((strlen(cp) + 1) * sizeof *array)); + nsubs = 0; + for ( ; ; ) { + while (isascii((unsigned char) *cp) && + isspace((unsigned char) *cp)) + ++cp; + if (*cp == '\0' || *cp == '#') + break; + array[nsubs++] = dp = cp; + do { + if ((*dp = *cp++) != '"') + ++dp; + else while ((*dp = *cp++) != '"') + if (*dp != '\0') + ++dp; + else error(_( + "Odd number of quotation marks" + )); + } while (*cp != '\0' && *cp != '#' && + (!isascii(*cp) || !isspace((unsigned char) *cp))); + if (isascii(*cp) && isspace((unsigned char) *cp)) + ++cp; + *dp = '\0'; + } + array[nsubs] = NULL; + return array; +} + +static long +oadd(t1, t2) +const long t1; +const long t2; +{ + register long t; + + t = t1 + t2; + if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) { + error(_("time overflow")); + exit(EXIT_FAILURE); + } + return t; +} + +static zic_t +tadd(t1, t2) +const zic_t t1; +const long t2; +{ + register zic_t t; + + if (t1 == max_time && t2 > 0) + return max_time; + if (t1 == min_time && t2 < 0) + return min_time; + t = t1 + t2; + if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) { + error(_("time overflow")); + exit(EXIT_FAILURE); + } + return t; +} + +/* +** Given a rule, and a year, compute the date - in seconds since January 1, +** 1970, 00:00 LOCAL time - in that year that the rule refers to. +*/ + +static zic_t +rpytime(rp, wantedy) +register const struct rule * const rp; +register const int wantedy; +{ + register int y, m, i; + register long dayoff; /* with a nod to Margaret O. */ + register zic_t t; + + if (wantedy == INT_MIN) + return min_time; + if (wantedy == INT_MAX) + return max_time; + dayoff = 0; + m = TM_JANUARY; + y = EPOCH_YEAR; + while (wantedy != y) { + if (wantedy > y) { + i = len_years[isleap(y)]; + ++y; + } else { + --y; + i = -len_years[isleap(y)]; + } + dayoff = oadd(dayoff, eitol(i)); + } + while (m != rp->r_month) { + i = len_months[isleap(y)][m]; + dayoff = oadd(dayoff, eitol(i)); + ++m; + } + i = rp->r_dayofmonth; + if (m == TM_FEBRUARY && i == 29 && !isleap(y)) { + if (rp->r_dycode == DC_DOWLEQ) + --i; + else { + error(_("use of 2/29 in non leap-year")); + exit(EXIT_FAILURE); + } + } + --i; + dayoff = oadd(dayoff, eitol(i)); + if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) { + register long wday; + +#define LDAYSPERWEEK ((long) DAYSPERWEEK) + wday = eitol(EPOCH_WDAY); + /* + ** Don't trust mod of negative numbers. + */ + if (dayoff >= 0) + wday = (wday + dayoff) % LDAYSPERWEEK; + else { + wday -= ((-dayoff) % LDAYSPERWEEK); + if (wday < 0) + wday += LDAYSPERWEEK; + } + while (wday != eitol(rp->r_wday)) + if (rp->r_dycode == DC_DOWGEQ) { + dayoff = oadd(dayoff, (long) 1); + if (++wday >= LDAYSPERWEEK) + wday = 0; + ++i; + } else { + dayoff = oadd(dayoff, (long) -1); + if (--wday < 0) + wday = LDAYSPERWEEK - 1; + --i; + } + if (i < 0 || i >= len_months[isleap(y)][m]) { + if (noise) + warning(_("rule goes past start/end of month--\ +will not work with pre-2004 versions of zic")); + } + } + if (dayoff < min_time / SECSPERDAY) + return min_time; + if (dayoff > max_time / SECSPERDAY) + return max_time; + t = (zic_t) dayoff * SECSPERDAY; + return tadd(t, rp->r_tod); +} + +static void +newabbr(string) +const char * const string; +{ + register int i; + + if (strcmp(string, GRANDPARENTED) != 0) { + register const char * cp; + register char * wp; + + /* + ** Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics + ** optionally followed by a + or - and a number from 1 to 14. + */ + cp = string; + wp = NULL; + while (isascii((unsigned char) *cp) && + isalpha((unsigned char) *cp)) + ++cp; + if (cp - string == 0) +wp = _("time zone abbreviation lacks alphabetic at start"); + if (noise && cp - string > 3) +wp = _("time zone abbreviation has more than 3 alphabetics"); + if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN) +wp = _("time zone abbreviation has too many alphabetics"); + if (wp == NULL && (*cp == '+' || *cp == '-')) { + ++cp; + if (isascii((unsigned char) *cp) && + isdigit((unsigned char) *cp)) + if (*cp++ == '1' && + *cp >= '0' && *cp <= '4') + ++cp; + } + if (*cp != '\0') +wp = _("time zone abbreviation differs from POSIX standard"); + if (wp != NULL) { + wp = ecpyalloc(wp); + wp = ecatalloc(wp, " ("); + wp = ecatalloc(wp, string); + wp = ecatalloc(wp, ")"); + warning(wp); + ifree(wp); + } + } + i = strlen(string) + 1; + if (charcnt + i > TZ_MAX_CHARS) { + error(_("too many, or too long, time zone abbreviations")); + exit(EXIT_FAILURE); + } + (void) strcpy(&chars[charcnt], string); + charcnt += eitol(i); +} + +static int +mkdirs(argname) +char * const argname; +{ + register char * name; + register char * cp; + + if (argname == NULL || *argname == '\0') + return 0; + cp = name = ecpyalloc(argname); + while ((cp = strchr(cp + 1, '/')) != 0) { + *cp = '\0'; +#ifndef unix + /* + ** DOS drive specifier? + */ + if (isalpha((unsigned char) name[0]) && + name[1] == ':' && name[2] == '\0') { + *cp = '/'; + continue; + } +#endif /* !defined unix */ + if (!itsdir(name)) { + /* + ** It doesn't seem to exist, so we try to create it. + ** Creation may fail because of the directory being + ** created by some other multiprocessor, so we get + ** to do extra checking. + */ + if (mkdir(name, MKDIR_UMASK) != 0) { + const char *e = strerror(errno); + + if (errno != EEXIST || !itsdir(name)) { + (void) fprintf(stderr, +_("%s: Can't create directory %s: %s\n"), + progname, name, e); + ifree(name); + return -1; + } + } + } + *cp = '/'; + } + ifree(name); + return 0; +} + +static long +eitol(i) +const int i; +{ + long l; + + l = i; + if ((i < 0 && l >= 0) || (i == 0 && l != 0) || (i > 0 && l <= 0)) { + (void) fprintf(stderr, + _("%s: %d did not sign extend correctly\n"), + progname, i); + exit(EXIT_FAILURE); + } + return l; +} + +/* +** UNIX was a registered trademark of The Open Group in 2003. +*/ diff --git a/license.html b/license.html index 2a2c8e5b..00d356d4 100644 --- a/license.html +++ b/license.html @@ -10,7 +10,7 @@ <pre> COPYRIGHT AND PERMISSION NOTICE -Copyright (c) 1995-2003 International Business Machines Corporation and others +Copyright (c) 1995-2005 International Business Machines Corporation and others All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a diff --git a/makefile b/makefile index d85cd0fc..9a461215 100644 --- a/makefile +++ b/makefile @@ -20,12 +20,44 @@ SHELL := /bin/sh # Sane defaults, which are typically overridden on the command line. +MINIMAL=NO +WINDOWS=NO SRCROOT=$(shell pwd) OBJROOT=$(SRCROOT)/build DSTROOT=$(OBJROOT) SYMROOT=$(OBJROOT) APPLE_INTERNAL_DIR=/AppleInternal +TZDATA=$(lastword $(wildcard /usr/local/share/tz/tzdata*.tar.gz)) RC_ARCHS= +DISABLE_DRAFT=NO + +ifeq "$(DISABLE_DRAFT)" "YES" + DRAFT_FLAG=--disable-draft +else + DRAFT_FLAG= +endif + +ifeq "$(MINIMAL)" "YES" + THUMB_FLAG = -mthumb +else + THUMB_FLAG = +endif + +ifndef RC_ProjectSourceVersion +ifdef RC_PROJECTSOURCEVERSION + RC_ProjectSourceVersion=$(RC_PROJECTSOURCEVERSION) +endif +endif + +ifneq "$(RC_ProjectSourceVersion)" "" + ifeq "$(WINDOWS)" "YES" + ICU_BUILD := $(shell echo $(RC_ProjectSourceVersion) | sed -r -e 's/[0-9]+.([0-9]+)(.[0-9]+)?/\1/') + else + ICU_BUILD := $(shell echo $(RC_ProjectSourceVersion) | sed -E -e 's/[0-9]+.([0-9]+)(.[0-9]+)?/\1/') + endif +else + ICU_BUILD := 0 +endif # Disallow $(SRCROOT) == $(OBJROOT) ifeq ($(OBJROOT), $(SRCROOT)) @@ -45,7 +77,20 @@ endif EXTRA_HDRS = # EXTRA_HDRS = ./extra/ustdio/ ./layout/ -HDR_MAKE_SUBDIR = ./common/ ./i18n/ $(EXTRA_HDRS) +ifeq "$(MINIMAL)" "YES" + HDR_MAKE_SUBDIR = ./common/ ./i18n/ $(EXTRA_HDRS) +else ifeq "$(WINDOWS)" "YES" + HDR_MAKE_SUBDIR = ./common/ ./i18n/ $(EXTRA_HDRS) +else + HDR_MAKE_SUBDIR = ./common/ ./i18n/ ./io/ $(EXTRA_HDRS) +endif +ifeq "$(WINDOWS)" "YES" + HDR_PREFIX=$(APPLE_INTERNAL_DIR) + PRIVATE_HDR_PREFIX=$(APPLE_INTERNAL_DIR) +else + HDR_PREFIX=/usr + PRIVATE_HDR_PREFIX=/usr/local +endif ################################# # Install @@ -59,13 +104,22 @@ HDR_MAKE_SUBDIR = ./common/ ./i18n/ $(EXTRA_HDRS) INSTALL = /usr/bin/install COMMON_OBJ = ./common/*.o I18N_OBJ = ./i18n/*.o +IO_OBJ = ./io/*.o STUB_DATA_OBJ = ./stubdata/*.o -COMMON_SRC = $(OBJROOT)/common/*.c -I18N_SRC = $(OBJROOT)/i18n/*.c -STUB_DATA_SRC = $(OBJROOT)/stubdata/*.c +#COMMON_SRC = $(OBJROOT)/common/*.c +#I18N_SRC = $(OBJROOT)/i18n/*.c +#IO_SRC = $(OBJROOT)/io/*.c +#STUB_DATA_SRC = $(OBJROOT)/stubdata/*.c EXTRA_LIBS = #EXTRA_LIBS =./extra/ ./layout/ ./tools/ctestfw/ ./tools/toolutil/ #DATA_OBJ = ./data/out/build/*.o +ifeq "$(MINIMAL)" "YES" + DYLIB_OBJS=$(COMMON_OBJ) $(I18N_OBJ) $(STUB_DATA_OBJ) +else ifeq "$(WINDOWS)" "YES" + DYLIB_OBJS=$(COMMON_OBJ) ./common/common.res $(I18N_OBJ) $(STUB_DATA_OBJ) +else + DYLIB_OBJS=$(COMMON_OBJ) $(I18N_OBJ) $(IO_OBJ) $(STUB_DATA_OBJ) +endif ################################# # Cleaning @@ -81,15 +135,25 @@ MANUAL_CLEAN_EXTRA = ./extra/scrptrun ./samples/layout ./extra/ustdio ./extra MANUAL_CLEAN_TEST = ./test/collperf ./test/iotest ./test/letest ./test/thaitest ./test/threadtest ./test/testmap ./test MANUAL_CLEAN_SAMPLE = ./samples/layout ./samples -CLEAN_SUBDIR = ./stubdata ./common ./i18n ./layout ./layoutex ./data ./tools ./$(MANUAL_CLEAN_TOOLS) $(MANUAL_CLEAN_EXTRA) $(MANUAL_CLEAN_TEST) $(MANUAL_CLEAN_SAMPLE) +CLEAN_SUBDIR = ./stubdata ./common ./i18n ./io ./layout ./layoutex ./data ./tools ./$(MANUAL_CLEAN_TOOLS) $(MANUAL_CLEAN_EXTRA) $(MANUAL_CLEAN_TEST) $(MANUAL_CLEAN_SAMPLE) ################################# # Config flags ################################# -CONFIG_FLAGS = --disable-renaming --disable-extras --disable-ustdio --disable-layout \ - --disable-samples --with-data-packaging=archive --prefix=/usr/local \ - --srcdir=$(SRCROOT)/icuSources +ifeq "$(MINIMAL)" "YES" + CONFIG_FLAGS = --disable-renaming --disable-extras --disable-icuio --disable-layout \ + --disable-samples --with-data-packaging=archive --prefix=$(PRIVATE_HDR_PREFIX) \ + $(DRAFT_FLAG) --srcdir=$(SRCROOT)/icuSources +else ifeq "$(WINDOWS)" "YES" + CONFIG_FLAGS = --disable-extras --disable-icuio --disable-layout \ + --disable-samples --with-data-packaging=library --prefix=$(PRIVATE_HDR_PREFIX) \ + $(DRAFT_FLAG) +else + CONFIG_FLAGS = --disable-renaming --disable-extras --disable-layout \ + --disable-samples --with-data-packaging=archive --prefix=$(PRIVATE_HDR_PREFIX) \ + $(DRAFT_FLAG) --srcdir=$(SRCROOT)/icuSources +endif ################################# # Install paths @@ -103,14 +167,39 @@ CONFIG_FLAGS = --disable-renaming --disable-extras --disable-ustdio --disable-la # The ICU version/subversion should reflect the actual ICU version. LIB_NAME = icucore -ICU_VERS = 32 +ICU_VERS = 36 ICU_SUBVERS = 0 CORE_VERS = A -DYLIB_SUFF = dylib -libdir = /usr/lib/ -INSTALLED_DYLIB = lib$(LIB_NAME).$(CORE_VERS).$(DYLIB_SUFF) +ifeq "$(WINDOWS)" "YES" + DYLIB_SUFF = dll + libdir = /AppleInternal/bin/ + winlibdir = /AppleInternal/lib/ +else + DYLIB_SUFF = dylib + libdir = /usr/lib/ + winlibdir = +endif + DYLIB = lib$(LIB_NAME).$(DYLIB_SUFF) +DYLIB_DEBUG = lib$(LIB_NAME)_debug.$(DYLIB_SUFF) +DYLIB_PROFILE = lib$(LIB_NAME)_profile.$(DYLIB_SUFF) +ifeq "$(WINDOWS)" "YES" + INSTALLED_DYLIB = $(LIB_NAME).$(DYLIB_SUFF) + INSTALLED_DYLIB_DEBUG = $(LIB_NAME)_debug.$(DYLIB_SUFF) + INSTALLED_DYLIB_PROFILE = $(LIB_NAME)_profile.$(DYLIB_SUFF) +else + INSTALLED_DYLIB = lib$(LIB_NAME).$(CORE_VERS).$(DYLIB_SUFF) + INSTALLED_DYLIB_DEBUG = lib$(LIB_NAME).$(CORE_VERS)_debug.$(DYLIB_SUFF) + INSTALLED_DYLIB_PROFILE = lib$(LIB_NAME).$(CORE_VERS)_profile.$(DYLIB_SUFF) +endif + +INSTALLED_DYLIB_icu = INSTALLED_DYLIB +INSTALLED_DYLIB_debug = INSTALLED_DYLIB_DEBUG +INSTALLED_DYLIB_profile = INSTALLED_DYLIB_PROFILE +DYLIB_icu = DYLIB +DYLIB_debug = DYLIB_DEBUG +DYLIB_profile = DYLIB_PROFILE ################################# # Data files @@ -137,26 +226,54 @@ LIBOVERRIDES=LIBICUDT="-L$(OBJROOT) -l$(LIB_NAME)" \ LIBICUUC="-L$(OBJROOT) -l$(LIB_NAME)" \ LIBICUI18N="-L$(OBJROOT) -l$(LIB_NAME)" -ENV= APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ - CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -g -Os -fno-exceptions" \ - CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -g -Os -fno-exceptions -fno-rtti -fvisibility-inlines-hidden" \ - RC_ARCHS="$(RC_ARCHS)" \ - DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" +ifeq "$(WINDOWS)" "YES" + ifeq "$(ICU_BUILD)" "0" + CPPOPTIONS = + else + CPPOPTIONS = CPPFLAGS="-DU_ICU_VERSION_BUILDLEVEL_NUM=$(ICU_BUILD)" + endif + ENV= CFLAGS="/O2 /Ob2 /MD /GF" CXXFLAGS="/O2 /Ob2 /MD /GF" LDFLAGS="/DEBUG" + ENV_CONFIGURE= $(CPPOPTIONS) CFLAGS="/O2 /Ob2 /MD /GF" CXXFLAGS="/O2 /Ob2 /MD /GF" LDFLAGS="/DEBUG" + ENV_DEBUG= CFLAGS="/O2 /Ob2 /MDd /GF /Zi" CXXFLAGS="/O2 /Ob2 /MDd /GF /Zi" LDFLAGS="/DEBUG" + ENV_PROFILE= +else + ifeq "$(ICU_BUILD)" "0" + CPPOPTIONS = CPPFLAGS="-DSTD_INSPIRED -DMAC_OS_X_VERSION_MIN_REQUIRED=1040" + else + CPPOPTIONS = CPPFLAGS="-DU_ICU_VERSION_BUILDLEVEL_NUM=$(ICU_BUILD) -DSTD_INSPIRED -DMAC_OS_X_VERSION_MIN_REQUIRED=1040" + endif + ENV= APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ + CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -g -Os -fno-exceptions -fvisibility=hidden $(THUMB_FLAG)" \ + CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -g -Os -fno-exceptions -fno-rtti -fvisibility=hidden -fvisibility-inlines-hidden $(THUMB_FLAG)" \ + RC_ARCHS="$(RC_ARCHS)" \ + TZDATA="$(TZDATA)" \ + DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" + + ENV_CONFIGURE= $(CPPOPTIONS) APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ + CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" -g -Os -fno-exceptions -fvisibility=hidden $(THUMB_FLAG)" \ + CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" -g -Os -fno-exceptions -fno-rtti -fvisibility=hidden -fvisibility-inlines-hidden $(THUMB_FLAG)" \ + RC_ARCHS="$(RC_ARCHS)" \ + TZDATA="$(TZDATA)" \ + DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" + + ENV_DEBUG = APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ + CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -O0 -gfull -fno-exceptions -fvisibility=hidden $(THUMB_FLAG)" \ + CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -O0 -gfull -fno-exceptions -fno-rtti -fvisibility=hidden -fvisibility-inlines-hidden $(THUMB_FLAG)" \ + RC_ARCHS="$(RC_ARCHS)" \ + TZDATA="$(TZDATA)" \ + DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" + + ENV_PROFILE = APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ + CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -g -Os -pg -fno-exceptions -fvisibility=hidden $(THUMB_FLAG)" \ + CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -g -Os -pg -fno-exceptions -fno-rtti -fvisibility=hidden -fvisibility-inlines-hidden $(THUMB_FLAG)" \ + RC_ARCHS="$(RC_ARCHS)" \ + TZDATA="$(TZDATA)" \ + DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" +endif -ENV_CONFIGURE= APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ - CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" -g -Os -fno-exceptions" \ - CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" -g -Os -fno-exceptions -fno-rtti -fvisibility-inlines-hidden" \ - RC_ARCHS="$(RC_ARCHS)" \ - DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" - -ENV_DEBUG = APPLE_INTERNAL_DIR="$(APPLE_INTERNAL_DIR)" \ - CFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -O0 -g -fno-exceptions" \ - CXXFLAGS="-DICU_DATA_DIR=\"\\\"/usr/share/icu/\\\"\" $(RC_ARCHS:%=-arch %) -O0 -g -fno-exceptions -fno-rtti -fvisibility-inlines-hidden" \ - RC_ARCHS="$(RC_ARCHS)" \ - DYLD_LIBRARY_PATH="$(DSTROOT)/usr/local/lib" - ENV_icu = ENV ENV_debug = ENV_DEBUG +ENV_profile = ENV_PROFILE ORDERFILE=/usr/local/lib/OrderFiles/libicucore.order ifeq "$(shell test -f $(ORDERFILE) && echo YES )" "YES" @@ -175,31 +292,49 @@ endif .PHONY : icu check installsrc installhdrs clean install debug debug-install .DELETE_ON_ERROR : -icu debug : $(OBJROOT)/Makefile +icu debug profile : $(OBJROOT)/Makefile (cd $(OBJROOT); \ $(MAKE) $($(ENV_$@)); \ - tmpfile=`mktemp -t weakexternal` || exit 1; \ - nm -m $(COMMON_OBJ) $(I18N_OBJ) $(STUB_DATA_OBJ) | fgrep "weak external" | fgrep -v "undefined" | sed -e 's/.*weak external //' | uniq | cat >$$tmpfile; \ - $($(ENV_$@)) $(CXX) -current_version $(ICU_VERS).$(ICU_SUBVERS) -compatibility_version 1 -dynamiclib -dynamic \ - $(RC_ARCHS:%=-arch %) $(CXXFLAGS) $(LDFLAGS) -single_module $(SECTORDER_FLAGS) -unexported_symbols_list $$tmpfile \ - -install_name $(libdir)$(INSTALLED_DYLIB) -o ./$(INSTALLED_DYLIB) $(COMMON_OBJ) $(I18N_OBJ) $(STUB_DATA_OBJ); \ - if test -f ./$(ICU_DATA_DIR)/$(B_DATA_FILE); then \ - ln -fs ./$(ICU_DATA_DIR)/$(B_DATA_FILE); \ - else \ - DYLD_LIBRARY_PATH="./lib:./stubdata" \ - ./bin/icuswap -tb ./$(ICU_DATA_DIR)/$(L_DATA_FILE) $(B_DATA_FILE); \ - fi; \ - if test -f ./$(ICU_DATA_DIR)/$(L_DATA_FILE); then \ - ln -fs ./$(ICU_DATA_DIR)/$(L_DATA_FILE); \ + if test "$(WINDOWS)" = "YES"; then \ + if test "$@" = "debug"; then \ + (cd common; \ + LINK.EXE /subsystem:console /DLL /nologo /base:"0x4a800000" /DEBUG \ + /IMPLIB:../lib/icuuc_$@.lib /out:../lib/icuuc$(ICU_VERS)_$@.dll *.o \ + common.res ../stubdata/icudt.lib advapi32.lib;); \ + (cd i18n; \ + LINK.EXE /subsystem:console /DLL /nologo /base:"0x4a900000" /DEBUG \ + /IMPLIB:../lib/icuin_$@.lib /out:../lib/icuin$(ICU_VERS)_$@.dll *.o \ + i18n.res ../lib/icuuc_$@.lib ../stubdata/icudt.lib advapi32.lib;); \ + fi; \ else \ - DYLD_LIBRARY_PATH="./lib:./stubdata" \ - ./bin/icuswap -tl ./$(ICU_DATA_DIR)/$(B_DATA_FILE) $(L_DATA_FILE); \ + tmpfile=`mktemp -t weakexternal` || exit 1; \ + nm -m $(RC_ARCHS:%=-arch %) $(DYLIB_OBJS) | fgrep "weak external" | fgrep -v "undefined" | sed -e 's/.*weak external //' | sort | uniq | cat >$$tmpfile; \ + $($(ENV_$@)) $(CXX) -current_version $(ICU_VERS).$(ICU_SUBVERS) -compatibility_version 1 -dynamiclib -dynamic \ + $(RC_ARCHS:%=-arch %) $(CXXFLAGS) $(LDFLAGS) -single_module $(SECTORDER_FLAGS) -unexported_symbols_list $$tmpfile -dead_strip \ + -install_name $(libdir)$($(INSTALLED_DYLIB_$@)) -o ./$($(INSTALLED_DYLIB_$@)) $(DYLIB_OBJS); \ + if test -f ./$(ICU_DATA_DIR)/$(B_DATA_FILE); then \ + ln -fs ./$(ICU_DATA_DIR)/$(B_DATA_FILE); \ + else \ + DYLD_LIBRARY_PATH="./lib:./stubdata" \ + ./bin/icupkg -tb ./$(ICU_DATA_DIR)/$(L_DATA_FILE) $(B_DATA_FILE); \ + fi; \ + if test -f ./$(ICU_DATA_DIR)/$(L_DATA_FILE); then \ + ln -fs ./$(ICU_DATA_DIR)/$(L_DATA_FILE); \ + else \ + DYLD_LIBRARY_PATH="./lib:./stubdata" \ + ./bin/icupkg -tl ./$(ICU_DATA_DIR)/$(B_DATA_FILE) $(L_DATA_FILE); \ + fi; \ fi; \ ); check : icu (cd $(OBJROOT); \ - $(MAKE) $(ENV) check; \ + ICU_DATA=$(OBJROOT) $(MAKE) $(ENV) check; \ + ); + +check-debug: debug + (cd $(OBJROOT); \ + ICU_DATA=$(OBJROOT) $(MAKE) $(ENV_DEBUG) check; \ ); samples: icu @@ -216,35 +351,29 @@ $(OBJROOT)/Makefile : if test ! -d $(OBJROOT); then \ mkdir -p $(OBJROOT); \ fi; - (cd $(OBJROOT); $(ENV_CONFIGURE) $(SRCROOT)/icuSources/configure $(CONFIG_FLAGS);) - -debug-install: debug installhdrs - if test ! -d $(DSTROOT)$(libdir)/; then \ - $(INSTALL) -d -m 0775 $(DSTROOT)$(libdir)/; \ - fi; - $(INSTALL) -b -m 0664 $(OBJROOT)/$(INSTALLED_DYLIB) $(DSTROOT)$(libdir)$(INSTALLED_DYLIB) - (cd $(DSTROOT)$(libdir); \ - ln -fs $(INSTALLED_DYLIB) $(DYLIB)); - for subdir in $(EXTRA_LIBS); do \ - (cd $(OBJROOT)/$$subdir; $(MAKE) -e DESTDIR=$(DSTROOT) $(ENV_DEBUG) install-library;) \ - done; - if test ! -d $(DSTROOT)$(datadir)/; then \ - $(INSTALL) -d -m 0755 $(DSTROOT)$(datadir)/; \ - fi; - if test -f $(OBJROOT)/$(B_DATA_FILE); then \ - $(INSTALL) -b -m 0644 $(OBJROOT)/$(B_DATA_FILE) $(DSTROOT)$(datadir)$(B_DATA_FILE); \ - fi; - if test -f $(OBJROOT)/$(L_DATA_FILE); then \ - $(INSTALL) -b -m 0644 $(OBJROOT)/$(L_DATA_FILE) $(DSTROOT)$(datadir)$(L_DATA_FILE); \ + if test "$(WINDOWS)" = "YES"; then \ + cp -Rpf $(SRCROOT)/icuSources/* $(OBJROOT); \ + (cd $(OBJROOT)/data/unidata; mv base_unidata/*.txt .;); \ + (cd $(OBJROOT); $(ENV_CONFIGURE) ./runConfigureICU Cygwin/MSVC $(CONFIG_FLAGS);) \ + else \ + (cd $(OBJROOT); $(ENV_CONFIGURE) $(SRCROOT)/icuSources/runConfigureICU MacOSX $(CONFIG_FLAGS);) \ fi; - if test ! -d $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)/; then \ - $(INSTALL) -d -m 0755 $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)/; \ - fi; - $(INSTALL) -b -m 0644 $(SRCROOT)/ICU.plist $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)ICU.plist; - if test ! -d $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)/; then \ - $(INSTALL) -d -m 0755 $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)/; \ - fi; - $(INSTALL) -b -m 0644 $(SRCROOT)/license.html $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)ICU.html; + if test "$(MINIMAL)" = "YES"; then \ + (cd $(OBJROOT)/common/unicode/; \ + cp $(SRCROOT)/icuSources/common/unicode/uconfig.h . ; \ + patch <$(SRCROOT)/minimalpatchconfig.txt;) \ + elif test "$(WINDOWS)" = "YES"; then \ + (cd $(OBJROOT)/common/unicode/; \ + cp $(SRCROOT)/icuSources/common/unicode/uconfig.h . ; \ + patch <$(SRCROOT)/windowspatchconfig.txt;) \ + else \ + (cd $(OBJROOT)/common/unicode/; \ + cp $(SRCROOT)/icuSources/common/unicode/uconfig.h . ; \ + patch <$(SRCROOT)/patchconfig.txt;) \ + fi; \ + if test -f $(SRCROOT)/icuSources/common/Makefile.local; then \ + cp -p $(SRCROOT)/icuSources/common/Makefile.local $(OBJROOT)/common/ ; \ + fi; ################################# # B&I TARGETS @@ -258,7 +387,7 @@ debug-install: debug installhdrs installsrc : if test ! -d $(SRCROOT); then mkdir $(SRCROOT); fi; if test -d $(SRCROOT)/icuSources ; then rm -rf $(SRCROOT)/icuSources; fi; - tar cf - ./makefile ./ICU.plist ./license.html ./icuSources | (cd $(SRCROOT) ; tar xfp -); \ + tar cf - ./makefile ./ICU.plist ./license.html ./icuSources ./minimalpatchconfig.txt ./windowspatchconfig.txt ./patchconfig.txt | (cd $(SRCROOT) ; tar xfp -); \ for i in `find $(SRCROOT)/icuSources/ | grep "CVS$$"` ; do \ if test -d $$i ; then \ rm -rf $$i; \ @@ -276,44 +405,88 @@ installsrc : installhdrs : $(OBJROOT)/Makefile (cd $(OBJROOT); \ - for subdir in $(HDR_MAKE_SUBDIR); do \ - (cd $$subdir; $(MAKE) -e DESTDIR=$(DSTROOT) $(ENV) install-headers); \ - done;); + for subdir in $(HDR_MAKE_SUBDIR); do \ + (cd $$subdir; $(MAKE) -e DESTDIR=$(DSTROOT) $(ENV) install-headers); \ + done; \ + ); # We run configure and run make first. This generates the .o files. We then link them # all up together into libicucore. Then we put it into its install location, create # symbolic links, and then strip the main dylib. Then install the remaining libraries. # We cleanup the sources folder. - + install : installhdrs icu if test ! -d $(DSTROOT)$(libdir)/; then \ $(INSTALL) -d -m 0775 $(DSTROOT)$(libdir)/; \ fi; - $(INSTALL) -b -m 0664 $(OBJROOT)/$(INSTALLED_DYLIB) $(DSTROOT)$(libdir)$(INSTALLED_DYLIB) - (cd $(DSTROOT)$(libdir); \ - ln -fs $(INSTALLED_DYLIB) $(DYLIB)); - cp $(OBJROOT)/$(INSTALLED_DYLIB) $(SYMROOT)/$(INSTALLED_DYLIB); - strip -x -u -r -S $(DSTROOT)$(libdir)$(INSTALLED_DYLIB); - for subdir in $(EXTRA_LIBS); do \ - (cd $(OBJROOT)/$$subdir; $(MAKE) -e DESTDIR=$(DSTROOT) $(ENV) install-library;) \ - done; - if test ! -d $(DSTROOT)$(datadir)/; then \ - $(INSTALL) -d -m 0755 $(DSTROOT)$(datadir)/; \ - fi; - if test -f $(OBJROOT)/$(B_DATA_FILE); then \ - $(INSTALL) -b -m 0644 $(OBJROOT)/$(B_DATA_FILE) $(DSTROOT)$(datadir)$(B_DATA_FILE); \ - fi; - if test -f $(OBJROOT)/$(L_DATA_FILE); then \ - $(INSTALL) -b -m 0644 $(OBJROOT)/$(L_DATA_FILE) $(DSTROOT)$(datadir)$(L_DATA_FILE); \ + if test "$(WINDOWS)" = "YES"; then \ + if test ! -d $(DSTROOT)$(winlibdir)/; then \ + $(INSTALL) -d -m 0775 $(DSTROOT)$(winlibdir)/; \ + fi; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuuc.lib $(DSTROOT)$(winlibdir)icuuc.lib; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuuc$(ICU_VERS).pdb $(DSTROOT)$(libdir)icuuc$(ICU_VERS).pdb; \ + $(INSTALL) -b -m 0755 $(OBJROOT)/lib/icuuc$(ICU_VERS).dll $(DSTROOT)$(libdir)icuuc$(ICU_VERS).dll; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuin.lib $(DSTROOT)$(winlibdir)icuin.lib; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuin$(ICU_VERS).pdb $(DSTROOT)$(libdir)icuin$(ICU_VERS).pdb; \ + $(INSTALL) -b -m 0755 $(OBJROOT)/lib/icuin$(ICU_VERS).dll $(DSTROOT)$(libdir)icuin$(ICU_VERS).dll; \ + $(INSTALL) -b -m 0755 $(OBJROOT)/lib/icudt$(ICU_VERS).dll $(DSTROOT)$(libdir)icudt$(ICU_VERS).dll; \ + else \ + $(INSTALL) -b -m 0664 $(OBJROOT)/$(INSTALLED_DYLIB) $(DSTROOT)$(libdir)$(INSTALLED_DYLIB); \ + (cd $(DSTROOT)$(libdir); \ + ln -fs $(INSTALLED_DYLIB) $(DYLIB)); \ + cp $(OBJROOT)/$(INSTALLED_DYLIB) $(SYMROOT)/$(INSTALLED_DYLIB); \ + strip -x -u -r -S $(DSTROOT)$(libdir)$(INSTALLED_DYLIB); \ + for subdir in $(EXTRA_LIBS); do \ + (cd $(OBJROOT)/$$subdir; $(MAKE) -e DESTDIR=$(DSTROOT) $(ENV) install-library;) \ + done; \ + if test ! -d $(DSTROOT)$(datadir)/; then \ + $(INSTALL) -d -m 0755 $(DSTROOT)$(datadir)/; \ + fi; \ + if test -f $(OBJROOT)/$(B_DATA_FILE); then \ + $(INSTALL) -b -m 0644 $(OBJROOT)/$(B_DATA_FILE) $(DSTROOT)$(datadir)$(B_DATA_FILE); \ + fi; \ + if test -f $(OBJROOT)/$(L_DATA_FILE); then \ + $(INSTALL) -b -m 0644 $(OBJROOT)/$(L_DATA_FILE) $(DSTROOT)$(datadir)$(L_DATA_FILE); \ + fi; \ + if test ! -d $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)/; then \ + $(INSTALL) -d -m 0755 $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)/; \ + fi; \ + $(INSTALL) -b -m 0644 $(SRCROOT)/ICU.plist $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)ICU.plist; \ + if test ! -d $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)/; then \ + $(INSTALL) -d -m 0755 $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)/; \ + fi; \ + $(INSTALL) -b -m 0644 $(SRCROOT)/license.html $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)ICU.html; \ fi; - if test ! -d $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)/; then \ - $(INSTALL) -d -m 0755 $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)/; \ + +DEPEND_install_debug = debug +DEPEND_install_profile = profile + +.SECONDEXPANSION: +install_debug install_profile : $$(DEPEND_$$@) + if test ! -d $(DSTROOT)$(libdir)/; then \ + $(INSTALL) -d -m 0775 $(DSTROOT)$(libdir)/; \ fi; - $(INSTALL) -b -m 0644 $(SRCROOT)/ICU.plist $(DSTROOT)$(OPEN_SOURCE_VERSIONS_DIR)ICU.plist; - if test ! -d $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)/; then \ - $(INSTALL) -d -m 0755 $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)/; \ + if test "$(WINDOWS)" = "YES"; then \ + if test ! -d $(DSTROOT)$(winlibdir)/; then \ + $(INSTALL) -d -m 0775 $(DSTROOT)$(winlibdir)/; \ + fi; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuuc_$(DEPEND_$@).lib $(DSTROOT)$(winlibdir)icuuc_$(DEPEND_$@).lib; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuuc$(ICU_VERS)_$(DEPEND_$@).pdb $(DSTROOT)$(libdir)icuuc$(ICU_VERS)_$(DEPEND_$@).pdb; \ + $(INSTALL) -b -m 0755 $(OBJROOT)/lib/icuuc$(ICU_VERS)_$(DEPEND_$@).dll $(DSTROOT)$(libdir)icuuc$(ICU_VERS)_$(DEPEND_$@).dll; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuin_$(DEPEND_$@).lib $(DSTROOT)$(winlibdir)icuin_$(DEPEND_$@).lib; \ + $(INSTALL) -b -m 0644 $(OBJROOT)/lib/icuin$(ICU_VERS)_$(DEPEND_$@).pdb $(DSTROOT)$(libdir)icuin$(ICU_VERS)_$(DEPEND_$@).pdb; \ + $(INSTALL) -b -m 0755 $(OBJROOT)/lib/icuin$(ICU_VERS)_$(DEPEND_$@).dll $(DSTROOT)$(libdir)icuin$(ICU_VERS)_$(DEPEND_$@).dll; \ + else \ + $(INSTALL) -b -m 0664 $(OBJROOT)/$($(INSTALLED_DYLIB_$(DEPEND_$@))) $(DSTROOT)$(libdir)$($(INSTALLED_DYLIB_$(DEPEND_$@))); \ + (cd $(DSTROOT)$(libdir); \ + ln -fs $($(INSTALLED_DYLIB_$(DEPEND_$@))) $($(DYLIB_$(DEPEND_$@)))); \ + cp $(OBJROOT)/$($(INSTALLED_DYLIB_$(DEPEND_$@))) $(SYMROOT)/$($(INSTALLED_DYLIB_$(DEPEND_$@))); \ + strip -x -u -r -S $(DSTROOT)$(libdir)$($(INSTALLED_DYLIB_$(DEPEND_$@))); \ + for subdir in $(EXTRA_LIBS); do \ + (cd $(OBJROOT)/$$subdir; $(MAKE) -e DESTDIR=$(DSTROOT) $(ENV) install-library;) \ + done; \ fi; - $(INSTALL) -b -m 0644 $(SRCROOT)/license.html $(DSTROOT)$(OPEN_SOURCE_LICENSES_DIR)ICU.html; clean : -rm -rf $(OBJROOT) + diff --git a/minimalpatchconfig.txt b/minimalpatchconfig.txt new file mode 100644 index 00000000..88666916 --- /dev/null +++ b/minimalpatchconfig.txt @@ -0,0 +1,11 @@ +--- icuSources/common/unicode/uconfig.h 2005-08-11 17:40:22.000000000 -0700 ++++ build/common/unicode/uconfig.h 2005-09-15 16:58:56.000000000 -0700 +@@ -180,7 +180,7 @@ + * @draft ICU 3.2 + */ + #ifndef UCONFIG_NO_SERVICE +-# define UCONFIG_NO_SERVICE 0 ++# define UCONFIG_NO_SERVICE 1 + #endif + + #endif diff --git a/patchconfig.txt b/patchconfig.txt new file mode 100644 index 00000000..88666916 --- /dev/null +++ b/patchconfig.txt @@ -0,0 +1,11 @@ +--- icuSources/common/unicode/uconfig.h 2005-08-11 17:40:22.000000000 -0700 ++++ build/common/unicode/uconfig.h 2005-09-15 16:58:56.000000000 -0700 +@@ -180,7 +180,7 @@ + * @draft ICU 3.2 + */ + #ifndef UCONFIG_NO_SERVICE +-# define UCONFIG_NO_SERVICE 0 ++# define UCONFIG_NO_SERVICE 1 + #endif + + #endif diff --git a/windowspatchconfig.txt b/windowspatchconfig.txt new file mode 100644 index 00000000..1cebd1ca --- /dev/null +++ b/windowspatchconfig.txt @@ -0,0 +1,20 @@ +--- icuSources/common/unicode/uconfig.h 2006-08-31 16:10:35.000000000 -0700 ++++ uconfig.h 2006-10-10 17:08:55.000000000 -0700 +@@ -169,7 +169,7 @@ + * @stable ICU 2.4 + */ + #ifndef UCONFIG_NO_COLLATION +-# define UCONFIG_NO_COLLATION 0 ++# define UCONFIG_NO_COLLATION 1 + #endif + + /** +@@ -209,7 +209,7 @@ + * @stable ICU 3.2 + */ + #ifndef UCONFIG_NO_SERVICE +-# define UCONFIG_NO_SERVICE 0 ++# define UCONFIG_NO_SERVICE 1 + #endif + + #endif -- 2.45.2